ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1kcml2ZXItaWJfc3JwIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci1pYl9zcnAKaW5kZXggYjk2ODhkZS4uNzA0OWEyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci1pYl9zcnAKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci1pYl9zcnAKQEAgLTU1LDEyICs1NSwxMiBAQAogCQkgIG9ubHkgc2FmZSB3aXRoIHBhcnRpYWwgbWVtb3J5IGRlc2NyaXB0b3IgbGlzdCBzdXBwb3J0IGVuYWJsZWQKIAkJICAoYWxsb3dfZXh0X3NnPTEpLgogCQkqIGNvbXBfdmVjdG9yLCBhIG51bWJlciBpbiB0aGUgcmFuZ2UgMC4ubi0xIHNwZWNpZnlpbmcgdGhlCi0JCSAgTVNJLVggY29tcGxldGlvbiB2ZWN0b3IuIFNvbWUgSENBJ3MgYWxsb2NhdGUgbXVsdGlwbGUgKG4pCi0JCSAgTVNJLVggdmVjdG9ycyBwZXIgSENBIHBvcnQuIElmIHRoZSBJUlEgYWZmaW5pdHkgbWFza3Mgb2YKLQkJICB0aGVzZSBpbnRlcnJ1cHRzIGhhdmUgYmVlbiBjb25maWd1cmVkIHN1Y2ggdGhhdCBlYWNoIE1TSS1YCi0JCSAgaW50ZXJydXB0IGlzIGhhbmRsZWQgYnkgYSBkaWZmZXJlbnQgQ1BVIHRoZW4gdGhlIGNvbXBfdmVjdG9yCi0JCSAgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNwcmVhZCB0aGUgU1JQIGNvbXBsZXRpb24gd29ya2xvYWQKLQkJICBvdmVyIG11bHRpcGxlIENQVSdzLgorCQkgIE1TSS1YIGNvbXBsZXRpb24gdmVjdG9yIG9mIHRoZSBmaXJzdCBSRE1BIGNoYW5uZWwuIFNvbWUKKwkJICBIQ0EncyBhbGxvY2F0ZSBtdWx0aXBsZSAobikgTVNJLVggdmVjdG9ycyBwZXIgSENBIHBvcnQuIElmCisJCSAgdGhlIElSUSBhZmZpbml0eSBtYXNrcyBvZiB0aGVzZSBpbnRlcnJ1cHRzIGhhdmUgYmVlbgorCQkgIGNvbmZpZ3VyZWQgc3VjaCB0aGF0IGVhY2ggTVNJLVggaW50ZXJydXB0IGlzIGhhbmRsZWQgYnkgYQorCQkgIGRpZmZlcmVudCBDUFUgdGhlbiB0aGUgY29tcF92ZWN0b3IgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvCisJCSAgc3ByZWFkIHRoZSBTUlAgY29tcGxldGlvbiB3b3JrbG9hZCBvdmVyIG11bHRpcGxlIENQVSdzLgogCQkqIHRsX3JldHJ5X2NvdW50LCBhIG51bWJlciBpbiB0aGUgcmFuZ2UgMi4uNyBzcGVjaWZ5aW5nIHRoZQogCQkgIElCIFJDIHJldHJ5IGNvdW50LgogCQkqIHF1ZXVlX3NpemUsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb21tYW5kcyB0aGF0IHRoZQpAQCAtODgsNiArODgsMTMgQEAKIAkJZGVzY3JpcHRvciBsaXN0IGluIGFuIFNSUF9DTUQgd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggYW4gU1JQCiAJCXRhcmdldC4KIAorV2hhdDoJCS9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3Q8bj4vY2hfY291bnQKK0RhdGU6CQlBcHJpbCAxLCAyMDE1CitLZXJuZWxWZXJzaW9uOgkzLjE5CitDb250YWN0OglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CU51bWJlciBvZiBSRE1BIGNoYW5uZWxzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUgU1JQCisJCXRhcmdldC4KKwogV2hhdDoJCS9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3Q8bj4vY21kX3NnX2VudHJpZXMKIERhdGU6CQlNYXkgMTksIDIwMTEKIEtlcm5lbFZlcnNpb246CTIuNi4zOQpAQCAtOTUsNiArMTAyLDEyIEBACiBEZXNjcmlwdGlvbjoJTWF4aW11bSBudW1iZXIgb2YgZGF0YSBidWZmZXIgZGVzY3JpcHRvcnMgdGhhdCBtYXkgYmUgc2VudCB0bwogCQl0aGUgdGFyZ2V0IGluIGEgc2luZ2xlIFNSUF9DTUQgcmVxdWVzdC4KIAorV2hhdDoJCS9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3Q8bj4vY29tcF92ZWN0b3IKK0RhdGU6CQlTZXB0ZW1iZXIgMiwgMjAxMworS2VybmVsVmVyc2lvbjoJMy4xMQorQ29udGFjdDoJbGludXgtcmRtYUB2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOglDb21wbGV0aW9uIHZlY3RvciB1c2VkIGZvciB0aGUgZmlyc3QgUkRNQSBjaGFubmVsLgorCiBXaGF0OgkJL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdDxuPi9kZ2lkCiBEYXRlOgkJSnVuZSAxNywgMjAwNgogS2VybmVsVmVyc2lvbjoJMi42LjE3CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0lSUS1kb21haW4udHh0IGIvRG9jdW1lbnRhdGlvbi9JUlEtZG9tYWluLnR4dAppbmRleCA4YThiODJjLi4zOWNmYTcyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0lSUS1kb21haW4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vSVJRLWRvbWFpbi50eHQKQEAgLTE1MSwzICsxNTEsNzQgQEAKIHRoYXQgdGhlIGRyaXZlciB1c2luZyB0aGUgc2ltcGxlIGRvbWFpbiBjYWxsIGlycV9jcmVhdGVfbWFwcGluZygpCiBiZWZvcmUgYW55IGlycV9maW5kX21hcHBpbmcoKSBzaW5jZSB0aGUgbGF0dGVyIHdpbGwgYWN0dWFsbHkgd29yawogZm9yIHRoZSBzdGF0aWMgSVJRIGFzc2lnbm1lbnQgY2FzZS4KKworPT09PSBIaWVyYXJjaHkgSVJRIGRvbWFpbiA9PT09CitPbiBzb21lIGFyY2hpdGVjdHVyZXMsIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBpbnRlcnJ1cHQgY29udHJvbGxlcnMKK2ludm9sdmVkIGluIGRlbGl2ZXJpbmcgYW4gaW50ZXJydXB0IGZyb20gdGhlIGRldmljZSB0byB0aGUgdGFyZ2V0IENQVS4KK0xldCdzIGxvb2sgYXQgYSB0eXBpY2FsIGludGVycnVwdCBkZWxpdmVyaW5nIHBhdGggb24geDg2IHBsYXRmb3JtczoKKworRGV2aWNlIC0tPiBJT0FQSUMgLT4gSW50ZXJydXB0IHJlbWFwcGluZyBDb250cm9sbGVyIC0+IExvY2FsIEFQSUMgLT4gQ1BVCisKK1RoZXJlIGFyZSB0aHJlZSBpbnRlcnJ1cHQgY29udHJvbGxlcnMgaW52b2x2ZWQ6CisxKSBJT0FQSUMgY29udHJvbGxlcgorMikgSW50ZXJydXB0IHJlbWFwcGluZyBjb250cm9sbGVyCiszKSBMb2NhbCBBUElDIGNvbnRyb2xsZXIKKworVG8gc3VwcG9ydCBzdWNoIGEgaGFyZHdhcmUgdG9wb2xvZ3kgYW5kIG1ha2Ugc29mdHdhcmUgYXJjaGl0ZWN0dXJlIG1hdGNoCitoYXJkd2FyZSBhcmNoaXRlY3R1cmUsIGFuIGlycV9kb21haW4gZGF0YSBzdHJ1Y3R1cmUgaXMgYnVpbHQgZm9yIGVhY2gKK2ludGVycnVwdCBjb250cm9sbGVyIGFuZCB0aG9zZSBpcnFfZG9tYWlucyBhcmUgb3JnYW5pemVkIGludG8gaGllcmFyY2h5LgorV2hlbiBidWlsZGluZyBpcnFfZG9tYWluIGhpZXJhcmNoeSwgdGhlIGlycV9kb21haW4gbmVhciB0byB0aGUgZGV2aWNlIGlzCitjaGlsZCBhbmQgdGhlIGlycV9kb21haW4gbmVhciB0byBDUFUgaXMgcGFyZW50LiBTbyBhIGhpZXJhcmNoeSBzdHJ1Y3R1cmUKK2FzIGJlbG93IHdpbGwgYmUgYnVpbHQgZm9yIHRoZSBleGFtcGxlIGFib3ZlLgorCUNQVSBWZWN0b3IgaXJxX2RvbWFpbiAocm9vdCBpcnFfZG9tYWluIHRvIG1hbmFnZSBDUFUgdmVjdG9ycykKKwkJXgorCQl8CisJSW50ZXJydXB0IFJlbWFwcGluZyBpcnFfZG9tYWluIChtYW5hZ2UgaXJxX3JlbWFwcGluZyBlbnRyaWVzKQorCQleCisJCXwKKwlJT0FQSUMgaXJxX2RvbWFpbiAobWFuYWdlIElPQVBJQyBkZWxpdmVyeSBlbnRyaWVzL3BpbnMpCisKK1RoZXJlIGFyZSBmb3VyIG1ham9yIGludGVyZmFjZXMgdG8gdXNlIGhpZXJhcmNoeSBpcnFfZG9tYWluOgorMSkgaXJxX2RvbWFpbl9hbGxvY19pcnFzKCk6IGFsbG9jYXRlIElSUSBkZXNjcmlwdG9ycyBhbmQgaW50ZXJydXB0CisgICBjb250cm9sbGVyIHJlbGF0ZWQgcmVzb3VyY2VzIHRvIGRlbGl2ZXIgdGhlc2UgaW50ZXJydXB0cy4KKzIpIGlycV9kb21haW5fZnJlZV9pcnFzKCk6IGZyZWUgSVJRIGRlc2NyaXB0b3JzIGFuZCBpbnRlcnJ1cHQgY29udHJvbGxlcgorICAgcmVsYXRlZCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGludGVycnVwdHMuCiszKSBpcnFfZG9tYWluX2FjdGl2YXRlX2lycSgpOiBhY3RpdmF0ZSBpbnRlcnJ1cHQgY29udHJvbGxlciBoYXJkd2FyZSB0bworICAgZGVsaXZlciB0aGUgaW50ZXJydXB0LgorMykgaXJxX2RvbWFpbl9kZWFjdGl2YXRlX2lycSgpOiBkZWFjdGl2YXRlIGludGVycnVwdCBjb250cm9sbGVyIGhhcmR3YXJlCisgICB0byBzdG9wIGRlbGl2ZXJpbmcgdGhlIGludGVycnVwdC4KKworRm9sbG93aW5nIGNoYW5nZXMgYXJlIG5lZWRlZCB0byBzdXBwb3J0IGhpZXJhcmNoeSBpcnFfZG9tYWluLgorMSkgYSBuZXcgZmllbGQgJ3BhcmVudCcgaXMgYWRkZWQgdG8gc3RydWN0IGlycV9kb21haW47IGl0J3MgdXNlZCB0bworICAgbWFpbnRhaW4gaXJxX2RvbWFpbiBoaWVyYXJjaHkgaW5mb3JtYXRpb24uCisyKSBhIG5ldyBmaWVsZCAncGFyZW50X2RhdGEnIGlzIGFkZGVkIHRvIHN0cnVjdCBpcnFfZGF0YTsgaXQncyB1c2VkIHRvCisgICBidWlsZCBoaWVyYXJjaHkgaXJxX2RhdGEgdG8gbWF0Y2ggaGllcmFyY2h5IGlycV9kb21haW5zLiBUaGUgaXJxX2RhdGEKKyAgIGlzIHVzZWQgdG8gc3RvcmUgaXJxX2RvbWFpbiBwb2ludGVyIGFuZCBoYXJkd2FyZSBpcnEgbnVtYmVyLgorMykgbmV3IGNhbGxiYWNrcyBhcmUgYWRkZWQgdG8gc3RydWN0IGlycV9kb21haW5fb3BzIHRvIHN1cHBvcnQgaGllcmFyY2h5CisgICBpcnFfZG9tYWluIG9wZXJhdGlvbnMuCisKK1dpdGggc3VwcG9ydCBvZiBoaWVyYXJjaHkgaXJxX2RvbWFpbiBhbmQgaGllcmFyY2h5IGlycV9kYXRhIHJlYWR5LCBhbgoraXJxX2RvbWFpbiBzdHJ1Y3R1cmUgaXMgYnVpbHQgZm9yIGVhY2ggaW50ZXJydXB0IGNvbnRyb2xsZXIsIGFuZCBhbgoraXJxX2RhdGEgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBmb3IgZWFjaCBpcnFfZG9tYWluIGFzc29jaWF0ZWQgd2l0aCBhbgorSVJRLiBOb3cgd2UgY291bGQgZ28gb25lIHN0ZXAgZnVydGhlciB0byBzdXBwb3J0IHN0YWNrZWQoaGllcmFyY2h5KQoraXJxX2NoaXAuIFRoYXQgaXMsIGFuIGlycV9jaGlwIGlzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGlycV9kYXRhIGFsb25nCit0aGUgaGllcmFyY2h5LiBBIGNoaWxkIGlycV9jaGlwIG1heSBpbXBsZW1lbnQgYSByZXF1aXJlZCBhY3Rpb24gYnkKK2l0c2VsZiBvciBieSBjb29wZXJhdGluZyB3aXRoIGl0cyBwYXJlbnQgaXJxX2NoaXAuCisKK1dpdGggc3RhY2tlZCBpcnFfY2hpcCwgaW50ZXJydXB0IGNvbnRyb2xsZXIgZHJpdmVyIG9ubHkgbmVlZHMgdG8gZGVhbAord2l0aCB0aGUgaGFyZHdhcmUgbWFuYWdlZCBieSBpdHNlbGYgYW5kIG1heSBhc2sgZm9yIHNlcnZpY2VzIGZyb20gaXRzCitwYXJlbnQgaXJxX2NoaXAgd2hlbiBuZWVkZWQuIFNvIHdlIGNvdWxkIGFjaGlldmUgYSBtdWNoIGNsZWFuZXIKK3NvZnR3YXJlIGFyY2hpdGVjdHVyZS4KKworRm9yIGFuIGludGVycnVwdCBjb250cm9sbGVyIGRyaXZlciB0byBzdXBwb3J0IGhpZXJhcmNoeSBpcnFfZG9tYWluLCBpdAorbmVlZHMgdG86CisxKSBJbXBsZW1lbnQgaXJxX2RvbWFpbl9vcHMuYWxsb2MgYW5kIGlycV9kb21haW5fb3BzLmZyZWUKKzIpIE9wdGlvbmFsbHkgaW1wbGVtZW50IGlycV9kb21haW5fb3BzLmFjdGl2YXRlIGFuZAorICAgaXJxX2RvbWFpbl9vcHMuZGVhY3RpdmF0ZS4KKzMpIE9wdGlvbmFsbHkgaW1wbGVtZW50IGFuIGlycV9jaGlwIHRvIG1hbmFnZSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAgIGhhcmR3YXJlLgorNCkgTm8gbmVlZCB0byBpbXBsZW1lbnQgaXJxX2RvbWFpbl9vcHMubWFwIGFuZCBpcnFfZG9tYWluX29wcy51bm1hcCwKKyAgIHRoZXkgYXJlIHVudXNlZCB3aXRoIGhpZXJhcmNoeSBpcnFfZG9tYWluLgorCitIaWVyYXJjaHkgaXJxX2RvbWFpbiBtYXkgYWxzbyBiZSB1c2VkIHRvIHN1cHBvcnQgb3RoZXIgYXJjaGl0ZWN0dXJlcywKK3N1Y2ggYXMgQVJNLCBBUk02NCBldGMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAppbmRleCBiZjc3ODMzLi43NDVmNDI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKQEAgLTM2LDcgKzM2LDcgQEAKIAlleGVjdXRlZCBpbiB1c2VyIG1vZGUsIG9yIGV4ZWN1dGVkIGluIHRoZSBpZGxlIGxvb3AsIHdlIGNhbgogCXNhZmVseSBmcmVlIHVwIHRoYXQgaXRlbS4KIAotCVByZWVtcHRpYmxlIHZhcmlhbnRzIG9mIFJDVSAoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpIGdldCB0aGUKKwlQcmVlbXB0aWJsZSB2YXJpYW50cyBvZiBSQ1UgKENPTkZJR19QUkVFTVBUX1JDVSkgZ2V0IHRoZQogCXNhbWUgZWZmZWN0LCBidXQgcmVxdWlyZSB0aGF0IHRoZSByZWFkZXJzIG1hbmlwdWxhdGUgQ1BVLWxvY2FsCiAJY291bnRlcnMuICBUaGVzZSBjb3VudGVycyBhbGxvdyBsaW1pdGVkIHR5cGVzIG9mIGJsb2NraW5nIHdpdGhpbgogCVJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuICBTUkNVIGFsc28gdXNlcyBDUFUtbG9jYWwKQEAgLTgxLDcgKzgxLDcgQEAKIG8JSSBoZWFyIHRoYXQgUkNVIG5lZWRzIHdvcmsgaW4gb3JkZXIgdG8gc3VwcG9ydCByZWFsdGltZSBrZXJuZWxzPwogCiAJVGhpcyB3b3JrIGlzIGxhcmdlbHkgY29tcGxldGVkLiAgUmVhbHRpbWUtZnJpZW5kbHkgUkNVIGNhbiBiZQotCWVuYWJsZWQgdmlhIHRoZSBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBrZXJuZWwgY29uZmlndXJhdGlvbgorCWVuYWJsZWQgdmlhIHRoZSBDT05GSUdfUFJFRU1QVF9SQ1Uga2VybmVsIGNvbmZpZ3VyYXRpb24KIAlwYXJhbWV0ZXIuICBIb3dldmVyLCB3b3JrIGlzIGluIHByb2dyZXNzIGZvciBlbmFibGluZyBwcmlvcml0eQogCWJvb3N0aW5nIG9mIHByZWVtcHRlZCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLglUaGlzIGlzCiAJbmVlZGVkIGlmIHlvdSBoYXZlIENQVS1ib3VuZCByZWFsdGltZSB0aHJlYWRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQKaW5kZXggZWY1YTJmZC4uZWQxODZhOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0CkBAIC0yNiwxMiArMjYsNiBAQAogCVN0YWxsLXdhcm5pbmcgbWVzc2FnZXMgbWF5IGJlIGVuYWJsZWQgYW5kIGRpc2FibGVkIGNvbXBsZXRlbHkgdmlhCiAJL3N5cy9tb2R1bGUvcmN1cGRhdGUvcGFyYW1ldGVycy9yY3VfY3B1X3N0YWxsX3N1cHByZXNzLgogCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFCi0KLQlUaGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBjYXVzZXMgdGhlIHN0YWxsIHdhcm5pbmcgdG8KLQlhbHNvIGR1bXAgdGhlIHN0YWNrcyBvZiBhbnkgdGFza3MgdGhhdCBhcmUgYmxvY2tpbmcgdGhlIGN1cnJlbnQKLQlSQ1UtcHJlZW1wdCBncmFjZSBwZXJpb2QuCi0KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk8KIAogCVRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGNhdXNlcyB0aGUgc3RhbGwgd2FybmluZyB0bwpAQCAtNzcsNyArNzEsNyBAQAogYW5kIHRoYXQgdGhlIHN0YWxsIHdhcyBhZmZlY3RpbmcgUkNVLXNjaGVkLiAgVGhpcyBtZXNzYWdlIHdpbGwgbm9ybWFsbHkgYmUKIGZvbGxvd2VkIGJ5IGEgc3RhY2sgZHVtcCBvZiB0aGUgb2ZmZW5kaW5nIENQVS4gIE9uIFRSRUVfUkNVIGtlcm5lbCBidWlsZHMsCiBSQ1UgYW5kIFJDVS1zY2hlZCBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlIHNhbWUgdW5kZXJseWluZyBtZWNoYW5pc20sCi13aGlsZSBvbiBUUkVFX1BSRUVNUFRfUkNVIGtlcm5lbCBidWlsZHMsIFJDVSBpcyBpbnN0ZWFkIGltcGxlbWVudGVkCit3aGlsZSBvbiBQUkVFTVBUX1JDVSBrZXJuZWwgYnVpbGRzLCBSQ1UgaXMgaW5zdGVhZCBpbXBsZW1lbnRlZAogYnkgcmN1X3ByZWVtcHRfc3RhdGUuCiAKIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgb2ZmZW5kaW5nIENQVSBmYWlscyB0byBwcmludCBvdXQgYSBzdGFsbC13YXJuaW5nCkBAIC04OSw3ICs4Myw3IEBACiBUaGlzIG1lc3NhZ2UgaW5kaWNhdGVzIHRoYXQgQ1BVIDIgZGV0ZWN0ZWQgdGhhdCBDUFVzIDMgYW5kIDUgd2VyZSBib3RoCiBjYXVzaW5nIHN0YWxscywgYW5kIHRoYXQgdGhlIHN0YWxsIHdhcyBhZmZlY3RpbmcgUkNVLWJoLiAgVGhpcyBtZXNzYWdlCiB3aWxsIG5vcm1hbGx5IGJlIGZvbGxvd2VkIGJ5IHN0YWNrIGR1bXBzIGZvciBlYWNoIENQVS4gIFBsZWFzZSBub3RlIHRoYXQKLVRSRUVfUFJFRU1QVF9SQ1UgYnVpbGRzIGNhbiBiZSBzdGFsbGVkIGJ5IHRhc2tzIGFzIHdlbGwgYXMgYnkgQ1BVcywKK1BSRUVNUFRfUkNVIGJ1aWxkcyBjYW4gYmUgc3RhbGxlZCBieSB0YXNrcyBhcyB3ZWxsIGFzIGJ5IENQVXMsCiBhbmQgdGhhdCB0aGUgdGFza3Mgd2lsbCBiZSBpbmRpY2F0ZWQgYnkgUElELCBmb3IgZXhhbXBsZSwgIlAzNDIxIi4KIEl0IGlzIGV2ZW4gcG9zc2libGUgZm9yIGEgcmN1X3ByZWVtcHRfc3RhdGUgc3RhbGwgdG8gYmUgY2F1c2VkIGJ5IGJvdGgKIENQVXMgLWFuZC0gdGFza3MsIGluIHdoaWNoIGNhc2UgdGhlIG9mZmVuZGluZyBDUFVzIGFuZCB0YXNrcyB3aWxsIGFsbApAQCAtMjA1LDEwICsxOTksMTAgQEAKIG8JQSBDUFUtYm91bmQgcmVhbC10aW1lIHRhc2sgaW4gYSBDT05GSUdfUFJFRU1QVF9SVCBrZXJuZWwgdGhhdAogCWlzIHJ1bm5pbmcgYXQgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgUkNVIHNvZnRpcnEgdGhyZWFkcy4KIAlUaGlzIHdpbGwgcHJldmVudCBSQ1UgY2FsbGJhY2tzIGZyb20gZXZlciBiZWluZyBpbnZva2VkLAotCWFuZCBpbiBhIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGtlcm5lbCB3aWxsIGZ1cnRoZXIgcHJldmVudAorCWFuZCBpbiBhIENPTkZJR19QUkVFTVBUX1JDVSBrZXJuZWwgd2lsbCBmdXJ0aGVyIHByZXZlbnQKIAlSQ1UgZ3JhY2UgcGVyaW9kcyBmcm9tIGV2ZXIgY29tcGxldGluZy4gIEVpdGhlciB3YXksIHRoZQogCXN5c3RlbSB3aWxsIGV2ZW50dWFsbHkgcnVuIG91dCBvZiBtZW1vcnkgYW5kIGhhbmcuICBJbiB0aGUKLQlDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBjYXNlLCB5b3UgbWlnaHQgc2VlIHN0YWxsLXdhcm5pbmcKKwlDT05GSUdfUFJFRU1QVF9SQ1UgY2FzZSwgeW91IG1pZ2h0IHNlZSBzdGFsbC13YXJuaW5nCiAJbWVzc2FnZXMuCiAKIG8JQSBoYXJkd2FyZSBvciBzb2Z0d2FyZSBpc3N1ZSBzaHV0cyBvZmYgdGhlIHNjaGVkdWxlci1jbG9jawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0CmluZGV4IDkxMDg3MGIuLmI2M2I5YmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS90cmFjZS50eHQKQEAgLTgsNyArOCw3IEBACiBmb3IgcmN1dHJlZSBhbmQgbmV4dCBmb3IgcmN1dGlueS4KIAogCi1DT05GSUdfVFJFRV9SQ1UgYW5kIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKK0NPTkZJR19UUkVFX1JDVSBhbmQgQ09ORklHX1BSRUVNUFRfUkNVIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKIAogVGhlc2UgaW1wbGVtZW50YXRpb25zIG9mIFJDVSBwcm92aWRlIHNldmVyYWwgZGVidWdmcyBkaXJlY3RvcmllcyB1bmRlciB0aGUKIHRvcC1sZXZlbCBkaXJlY3RvcnkgInJjdSI6CkBAIC0xOCw3ICsxOCw3IEBACiByY3UvcmN1X3NjaGVkCiAKIEVhY2ggZGlyZWN0b3J5IGNvbnRhaW5zIGZpbGVzIGZvciB0aGUgY29ycmVzcG9uZGluZyBmbGF2b3Igb2YgUkNVLgotTm90ZSB0aGF0IHJjdS9yY3VfcHJlZW1wdCBpcyBvbmx5IHByZXNlbnQgZm9yIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVLgorTm90ZSB0aGF0IHJjdS9yY3VfcHJlZW1wdCBpcyBvbmx5IHByZXNlbnQgZm9yIENPTkZJR19QUkVFTVBUX1JDVS4KIEZvciBDT05GSUdfVFJFRV9SQ1UsIHRoZSBSQ1UgZmxhdm9yIG1hcHMgb250byB0aGUgUkNVLXNjaGVkIGZsYXZvciwKIHNvIHRoYXQgYWN0aXZpdHkgZm9yIGJvdGggYXBwZWFycyBpbiByY3UvcmN1X3NjaGVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dAppbmRleCBlNDhjNTdmLi44OGRmY2UxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKQEAgLTEzNyw3ICsxMzcsNyBAQAogCVVzZWQgYnkgYSByZWFkZXIgdG8gaW5mb3JtIHRoZSByZWNsYWltZXIgdGhhdCB0aGUgcmVhZGVyIGlzCiAJZW50ZXJpbmcgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSXQgaXMgaWxsZWdhbAogCXRvIGJsb2NrIHdoaWxlIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwgdGhvdWdoCi0Ja2VybmVscyBidWlsdCB3aXRoIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGNhbiBwcmVlbXB0IFJDVQorCWtlcm5lbHMgYnVpbHQgd2l0aCBDT05GSUdfUFJFRU1QVF9SQ1UgY2FuIHByZWVtcHQgUkNVCiAJcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiAgQW55IFJDVS1wcm90ZWN0ZWQgZGF0YSBzdHJ1Y3R1cmUKIAlhY2Nlc3NlZCBkdXJpbmcgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGlzIGd1YXJhbnRlZWQgdG8KIAlyZW1haW4gdW5yZWNsYWltZWQgZm9yIHRoZSBmdWxsIGR1cmF0aW9uIG9mIHRoYXQgY3JpdGljYWwgc2VjdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL2Zpcm13YXJlLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL2Zpcm13YXJlLnR4dAppbmRleCBjMmU0NjhmLi5kYTY3MTNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9maXJtd2FyZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vZmlybXdhcmUudHh0CkBAIC03LDMyICs3LDE0IEBACiBhIG5lZWQgdG8gcHJvdmlkZSBhbiBpbnRlcmZhY2UgZm9yIHN1Y2ggcGxhdGZvcm1zIHRvIHNwZWNpZnkgYXZhaWxhYmxlIGZpcm13YXJlCiBvcGVyYXRpb25zIGFuZCBjYWxsIHRoZW0gd2hlbiBuZWVkZWQuCiAKLUZpcm13YXJlIG9wZXJhdGlvbnMgY2FuIGJlIHNwZWNpZmllZCB1c2luZyBzdHJ1Y3QgZmlybXdhcmVfb3BzCi0KLQlzdHJ1Y3QgZmlybXdhcmVfb3BzIHsKLQkJLyoKLQkJKiBFbnRlcnMgQ1BVIGlkbGUgbW9kZQotCQkqLwotCQlpbnQgKCpkb19pZGxlKSh2b2lkKTsKLQkJLyoKLQkJKiBTZXRzIGJvb3QgYWRkcmVzcyBvZiBzcGVjaWZpZWQgcGh5c2ljYWwgQ1BVCi0JCSovCi0JCWludCAoKnNldF9jcHVfYm9vdF9hZGRyKShpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGJvb3RfYWRkcik7Ci0JCS8qCi0JCSogQm9vdHMgc3BlY2lmaWVkIHBoeXNpY2FsIENQVQotCQkqLwotCQlpbnQgKCpjcHVfYm9vdCkoaW50IGNwdSk7Ci0JCS8qCi0JCSogSW5pdGlhbGl6ZXMgTDIgY2FjaGUKLQkJKi8KLQkJaW50ICgqbDJ4MF9pbml0KSh2b2lkKTsKLQl9OwotCi1hbmQgdGhlbiByZWdpc3RlcmVkIHdpdGggcmVnaXN0ZXJfZmlybXdhcmVfb3BzIGZ1bmN0aW9uCitGaXJtd2FyZSBvcGVyYXRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgZmlsbGluZyBpbiBhIHN0cnVjdCBmaXJtd2FyZV9vcHMKK3dpdGggYXBwcm9wcmlhdGUgY2FsbGJhY2tzIGFuZCB0aGVuIHJlZ2lzdGVyaW5nIGl0IHdpdGggcmVnaXN0ZXJfZmlybXdhcmVfb3BzKCkKK2Z1bmN0aW9uLgogCiAJdm9pZCByZWdpc3Rlcl9maXJtd2FyZV9vcHMoY29uc3Qgc3RydWN0IGZpcm13YXJlX29wcyAqb3BzKQogCi10aGUgb3BzIHBvaW50ZXIgbXVzdCBiZSBub24tTlVMTC4KK1RoZSBvcHMgcG9pbnRlciBtdXN0IGJlIG5vbi1OVUxMLiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHN0cnVjdCBmaXJtd2FyZV9vcHMKK2FuZCBpdHMgbWVtYmVycyBjYW4gYmUgZm91bmQgaW4gYXJjaC9hcm0vaW5jbHVkZS9hc20vZmlybXdhcmUuaCBoZWFkZXIuCiAKIFRoZXJlIGlzIGEgZGVmYXVsdCwgZW1wdHkgc2V0IG9mIG9wZXJhdGlvbnMgcHJvdmlkZWQsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KIHNldCBhbnl0aGluZyBpZiBwbGF0Zm9ybSBkb2VzIG5vdCByZXF1aXJlIGZpcm13YXJlIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9zdW54aS9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2FybS9zdW54aS9SRUFETUUKaW5kZXggNzk0NTIzODQuLmU2OGQxNjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL3N1bnhpL1JFQURNRQorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9zdW54aS9SRUFETUUKQEAgLTM3LDE2ICszNywyNiBAQAogICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTIwL0EyMCUyMFVzZXIlMjBNYW51YWwlMjAyMDEzLTAzLTIyLnBkZgogCiAgICAgICAtIEFsbHdpbm5lciBBMjMKLSAgICAgICAgKyBOb3QgU3VwcG9ydGVkCisgICAgICAgICsgRGF0YXNoZWV0CisgICAgICAgICAgaHR0cDovL2RsLmxpbnV4LXN1bnhpLm9yZy9BMjMvQTIzJTIwRGF0YXNoZWV0JTIwVjEuMCUyMDIwMTMwODMwLnBkZgorICAgICAgICArIFVzZXIgTWFudWFsCisgICAgICAgICAgaHR0cDovL2RsLmxpbnV4LXN1bnhpLm9yZy9BMjMvQTIzJTIwVXNlciUyME1hbnVhbCUyMFYxLjAlMjAyMDEzMDgzMC5wZGYKIAogICAgICogUXVhZCBBUk0gQ29ydGV4LUE3IGJhc2VkIFNvQ3MKICAgICAgIC0gQWxsd2lubmVyIEEzMSAoc3VuNmkpCiAgICAgICAgICsgRGF0YXNoZWV0Ci0gICAgICAgICAgaHR0cDovL2RsLmxpbnV4LXN1bnhpLm9yZy9BMzEvQTMxJTIwRGF0YXNoZWV0JTIwLSUyMHYxLjAwJTIwKDIwMTItMTItMjQpLnBkZgorICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTMxL0EzeF9yZWxlYXNlX2RvY3VtZW50L0EzMS9JQy9BMzElMjBkYXRhc2hlZXQlMjBWMS4zJTIwMjAxMzExMDYucGRmCisgICAgICAgICsgVXNlciBNYW51YWwKKyAgICAgICAgICBodHRwOi8vZGwubGludXgtc3VueGkub3JnL0EzMS9BM3hfcmVsZWFzZV9kb2N1bWVudC9BMzEvSUMvQTMxJTIwdXNlciUyMG1hbnVhbCUyMFYxLjElMjAyMDEzMDYzMC5wZGYKIAogICAgICAgLSBBbGx3aW5uZXIgQTMxcyAoc3VuNmkpCiAgICAgICAgICsgTm90IFN1cHBvcnRlZAorICAgICAgICArIERhdGFzaGVldAorICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTMxL0EzeF9yZWxlYXNlX2RvY3VtZW50L0EzMXMvSUMvQTMxcyUyMGRhdGFzaGVldCUyMFYxLjMlMjAyMDEzMTEwNi5wZGYKKyAgICAgICAgKyBVc2VyIE1hbnVhbAorICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTMxL0EzeF9yZWxlYXNlX2RvY3VtZW50L0EzMXMvSUMvQTMxcyUyMFVzZXIlMjBNYW51YWwlMjAlMjBWMS4wJTIwMjAxMzAzMjIucGRmCiAKICAgICAqIFF1YWQgQVJNIENvcnRleC1BMTUsIFF1YWQgQVJNIENvcnRleC1BNyBiYXNlZCBTb0NzCiAgICAgICAtIEFsbHdpbm5lciBBODAKLSAgICAgICAgKyBOb3QgU3VwcG9ydGVkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorICAgICAgICArIERhdGFzaGVldAorCSAgaHR0cDovL2RsLmxpbnV4LXN1bnhpLm9yZy9BODAvQTgwX0RhdGFzaGVldF9SZXZpc2lvbl8xLjBfMDQwNC5wZGYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtNjQvbGVnYWN5X2luc3RydWN0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2FybTY0L2xlZ2FjeV9pbnN0cnVjdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjNkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybTY0L2xlZ2FjeV9pbnN0cnVjdGlvbnMudHh0CkBAIC0wLDAgKzEsNDUgQEAKK1RoZSBhcm02NCBwb3J0IG9mIHRoZSBMaW51eCBrZXJuZWwgcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydAorZW11bGF0aW9uIG9mIGluc3RydWN0aW9ucyB3aGljaCBoYXZlIGJlZW4gZGVwcmVjYXRlZCwgb3Igb2Jzb2xldGVkIGluCit0aGUgYXJjaGl0ZWN0dXJlLiBUaGUgaW5mcmFzdHJ1Y3R1cmUgY29kZSB1c2VzIHVuZGVmaW5lZCBpbnN0cnVjdGlvbgoraG9va3MgdG8gc3VwcG9ydCBlbXVsYXRpb24uIFdoZXJlIGF2YWlsYWJsZSBpdCBhbHNvIGFsbG93cyB0dXJuaW5nIG9uCit0aGUgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGluIGhhcmR3YXJlLgorCitUaGUgZW11bGF0aW9uIG1vZGUgY2FuIGJlIGNvbnRyb2xsZWQgYnkgd3JpdGluZyB0byBzeXNjdGwgbm9kZXMKKygvcHJvYy9zeXMvYWJpKS4gVGhlIGZvbGxvd2luZyBleHBsYWlucyB0aGUgZGlmZmVyZW50IGV4ZWN1dGlvbgorYmVoYXZpb3VycyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIG9mIHRoZSBzeXNjdGwgbm9kZXMgLQorCisqIFVuZGVmCisgIFZhbHVlOiAwCisgIEdlbmVyYXRlcyB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gYWJvcnQuIERlZmF1bHQgZm9yIGluc3RydWN0aW9ucyB0aGF0CisgIGhhdmUgYmVlbiBvYnNvbGV0ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZSwgZS5nLiwgU1dQCisKKyogRW11bGF0ZQorICBWYWx1ZTogMQorICBVc2VzIHNvZnR3YXJlIGVtdWxhdGlvbi4gVG8gYWlkIG1pZ3JhdGlvbiBvZiBzb2Z0d2FyZSwgaW4gdGhpcyBtb2RlCisgIHVzYWdlIG9mIGVtdWxhdGVkIGluc3RydWN0aW9uIGlzIHRyYWNlZCBhcyB3ZWxsIGFzIHJhdGUgbGltaXRlZAorICB3YXJuaW5ncyBhcmUgaXNzdWVkLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBkZXByZWNhdGVkCisgIGluc3RydWN0aW9ucywgLmUuZy4sIENQMTUgYmFycmllcnMKKworKiBIYXJkd2FyZSBFeGVjdXRpb24KKyAgVmFsdWU6IDIKKyAgQWx0aG91Z2ggbWFya2VkIGFzIGRlcHJlY2F0ZWQsIHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBzdXBwb3J0IHRoZQorICBlbmFibGluZy9kaXNhYmxpbmcgb2YgaGFyZHdhcmUgc3VwcG9ydCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZQorICBpbnN0cnVjdGlvbnMuIFVzaW5nIGhhcmR3YXJlIGV4ZWN1dGlvbiBnZW5lcmFsbHkgcHJvdmlkZXMgYmV0dGVyCisgIHBlcmZvcm1hbmNlLCBidXQgYXQgdGhlIGxvc3Mgb2YgYWJpbGl0eSB0byBnYXRoZXIgcnVudGltZSBzdGF0aXN0aWNzCisgIGFib3V0IHRoZSB1c2Ugb2YgdGhlIGRlcHJlY2F0ZWQgaW5zdHJ1Y3Rpb25zLgorCitUaGUgZGVmYXVsdCBtb2RlIGRlcGVuZHMgb24gdGhlIHN0YXR1cyBvZiB0aGUgaW5zdHJ1Y3Rpb24gaW4gdGhlCithcmNoaXRlY3R1cmUuIERlcHJlY2F0ZWQgaW5zdHJ1Y3Rpb25zIHNob3VsZCBkZWZhdWx0IHRvIGVtdWxhdGlvbgord2hpbGUgb2Jzb2xldGUgaW5zdHJ1Y3Rpb25zIG11c3QgYmUgdW5kZWZpbmVkIGJ5IGRlZmF1bHQuCisKK1N1cHBvcnRlZCBsZWdhY3kgaW5zdHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBTV1B7Qn0KK05vZGU6IC9wcm9jL3N5cy9hYmkvc3dwCitTdGF0dXM6IE9ic29sZXRlCitEZWZhdWx0OiBVbmRlZiAoMCkKKworKiBDUDE1IEJhcnJpZXJzCitOb2RlOiAvcHJvYy9zeXMvYWJpL2NwMTVfYmFycmllcgorU3RhdHVzOiBEZXByZWNhdGVkCitEZWZhdWx0OiBFbXVsYXRlICgxKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dCBiL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQKaW5kZXggNjg1NDJmZS4uMTgzZTQxYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2F0b21pY19vcHMudHh0CkBAIC03LDEyICs3LDEzIEBACiBtYWludGFpbmVycyBvbiBob3cgdG8gaW1wbGVtZW50IGF0b21pYyBjb3VudGVyLCBiaXRvcHMsIGFuZCBzcGlubG9jawogaW50ZXJmYWNlcyBwcm9wZXJseS4KIAotCVRoZSBhdG9taWNfdCB0eXBlIHNob3VsZCBiZSBkZWZpbmVkIGFzIGEgc2lnbmVkIGludGVnZXIuCi1BbHNvLCBpdCBzaG91bGQgYmUgbWFkZSBvcGFxdWUgc3VjaCB0aGF0IGFueSBraW5kIG9mIGNhc3QgdG8gYSBub3JtYWwKLUMgaW50ZWdlciB0eXBlIHdpbGwgZmFpbC4gIFNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgc2hvdWxkCi1zdWZmaWNlOgorCVRoZSBhdG9taWNfdCB0eXBlIHNob3VsZCBiZSBkZWZpbmVkIGFzIGEgc2lnbmVkIGludGVnZXIgYW5kCit0aGUgYXRvbWljX2xvbmdfdCB0eXBlIGFzIGEgc2lnbmVkIGxvbmcgaW50ZWdlci4gIEFsc28sIHRoZXkgc2hvdWxkCitiZSBtYWRlIG9wYXF1ZSBzdWNoIHRoYXQgYW55IGtpbmQgb2YgY2FzdCB0byBhIG5vcm1hbCBDIGludGVnZXIgdHlwZQord2lsbCBmYWlsLiAgU29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBzaG91bGQgc3VmZmljZToKIAogCXR5cGVkZWYgc3RydWN0IHsgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CisJdHlwZWRlZiBzdHJ1Y3QgeyBsb25nIGNvdW50ZXI7IH0gYXRvbWljX2xvbmdfdDsKIAogSGlzdG9yaWNhbGx5LCBjb3VudGVyIGhhcyBiZWVuIGRlY2xhcmVkIHZvbGF0aWxlLiAgVGhpcyBpcyBub3cgZGlzY291cmFnZWQuCiBTZWUgRG9jdW1lbnRhdGlvbi92b2xhdGlsZS1jb25zaWRlcmVkLWhhcm1mdWwudHh0IGZvciB0aGUgY29tcGxldGUgcmF0aW9uYWxlLgpAQCAtMzcsNiArMzgsOSBAQAogcHJvcGVyIGltcGxpY2l0IG9yIGV4cGxpY2l0IHJlYWQgbWVtb3J5IGJhcnJpZXIgaXMgbmVlZGVkIGJlZm9yZSByZWFkaW5nIHRoZQogdmFsdWUgd2l0aCBhdG9taWNfcmVhZCBmcm9tIGFub3RoZXIgdGhyZWFkLgogCitBcyB3aXRoIGFsbCBvZiB0aGUgYXRvbWljXyBpbnRlcmZhY2VzLCByZXBsYWNlIHRoZSBsZWFkaW5nICJhdG9taWNfIgord2l0aCAiYXRvbWljX2xvbmdfIiB0byBvcGVyYXRlIG9uIGF0b21pY19sb25nX3QuCisKIFRoZSBzZWNvbmQgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIGF0IHJ1bnRpbWUsIGFzIGluOgogCiAJc3RydWN0IGZvbyB7IGF0b21pY190IGNvdW50ZXI7IH07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKaW5kZXggMjEwMWU3MS4uNmI5NzJiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dApAQCAtODI3LDEwICs4MjcsNiBAQAogdGhhdCByZXF1ZXN0cyBhcmUgcmVzdGFydGVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcXVldWUuIFRoaXMgbWF5IGhhcHBlbgogaWYgdGhlIGRyaXZlciBuZWVkcyB0byB1c2UgYmxrX3F1ZXVlX2ludmFsaWRhdGVfdGFncygpLgogCi1UYWdnaW5nIGFsc28gZGVmaW5lcyBhIG5ldyByZXF1ZXN0IGZsYWcsIFJFUV9RVUVVRUQuIFRoaXMgaXMgc2V0IHdoZW5ldmVyCi1hIHJlcXVlc3QgaXMgY3VycmVudGx5IHRhZ2dlZC4gWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZmxhZyBkaXJlY3RseSwKLWJsa19ycV90YWdnZWQocnEpIGlzIHRoZSBwb3J0YWJsZSB3YXkgdG8gZG8gc28uCi0KIDMuMyBJL08gU3VibWlzc2lvbgogCiBUaGUgcm91dGluZSBzdWJtaXRfYmlvKCkgaXMgdXNlZCB0byBzdWJtaXQgYSBzaW5nbGUgaW8uIEhpZ2hlciBsZXZlbCBpL28KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9jYWNoZS1wb2xpY2llcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvY2FjaGUtcG9saWNpZXMudHh0CmluZGV4IDY2YzI3NzQuLjBkMTI0YTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9jYWNoZS1wb2xpY2llcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2NhY2hlLXBvbGljaWVzLnR4dApAQCAtNDcsMjAgKzQ3LDI2IEBACiAJJ2Rpc2NhcmRfcHJvbW90ZV9hZGp1c3RtZW50IDx2YWx1ZT4nCiAKIFRoZSBzZXF1ZW50aWFsIHRocmVzaG9sZCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBjb250aWd1b3VzIEkvT3MKLXJlcXVpcmVkIGJlZm9yZSBhIHN0cmVhbSBpcyB0cmVhdGVkIGFzIHNlcXVlbnRpYWwuICBUaGUgcmFuZG9tIHRocmVzaG9sZAorcmVxdWlyZWQgYmVmb3JlIGEgc3RyZWFtIGlzIHRyZWF0ZWQgYXMgc2VxdWVudGlhbC4gIE9uY2UgYSBzdHJlYW0gaXMKK2NvbnNpZGVyZWQgc2VxdWVudGlhbCBpdCB3aWxsIGJ5cGFzcyB0aGUgY2FjaGUuICBUaGUgcmFuZG9tIHRocmVzaG9sZAogaXMgdGhlIG51bWJlciBvZiBpbnRlcnZlbmluZyBub24tY29udGlndW91cyBJL09zIHRoYXQgbXVzdCBiZSBzZWVuCiBiZWZvcmUgdGhlIHN0cmVhbSBpcyB0cmVhdGVkIGFzIHJhbmRvbSBhZ2Fpbi4KIAogVGhlIHNlcXVlbnRpYWwgYW5kIHJhbmRvbSB0aHJlc2hvbGRzIGRlZmF1bHQgdG8gNTEyIGFuZCA0IHJlc3BlY3RpdmVseS4KIAotTGFyZ2UsIHNlcXVlbnRpYWwgaW9zIGFyZSBwcm9iYWJseSBiZXR0ZXIgbGVmdCBvbiB0aGUgb3JpZ2luIGRldmljZQotc2luY2Ugc3BpbmRsZXMgdGVuZCB0byBoYXZlIGdvb2QgYmFuZHdpZHRoLiBUaGUgaW9fdHJhY2tlciBjb3VudHMKLWNvbnRpZ3VvdXMgSS9PcyB0byB0cnkgdG8gc3BvdCB3aGVuIHRoZSBpbyBpcyBpbiBvbmUgb2YgdGhlc2Ugc2VxdWVudGlhbAotbW9kZXMuCitMYXJnZSwgc2VxdWVudGlhbCBJL09zIGFyZSBwcm9iYWJseSBiZXR0ZXIgbGVmdCBvbiB0aGUgb3JpZ2luIGRldmljZQorc2luY2Ugc3BpbmRsZXMgdGVuZCB0byBoYXZlIGdvb2Qgc2VxdWVudGlhbCBJL08gYmFuZHdpZHRoLiAgVGhlCitpb190cmFja2VyIGNvdW50cyBjb250aWd1b3VzIEkvT3MgdG8gdHJ5IHRvIHNwb3Qgd2hlbiB0aGUgSS9PIGlzIGluIG9uZQorb2YgdGhlc2Ugc2VxdWVudGlhbCBtb2Rlcy4gIEJ1dCB0aGVyZSBhcmUgdXNlLWNhc2VzIGZvciB3YW50aW5nIHRvCitwcm9tb3RlIHNlcXVlbnRpYWwgYmxvY2tzIHRvIHRoZSBjYWNoZSAoZS5nLiBmYXN0IGFwcGxpY2F0aW9uIHN0YXJ0dXApLgorSWYgc2VxdWVudGlhbCB0aHJlc2hvbGQgaXMgc2V0IHRvIDAgdGhlIHNlcXVlbnRpYWwgSS9PIGRldGVjdGlvbiBpcworZGlzYWJsZWQgYW5kIHNlcXVlbnRpYWwgSS9PIHdpbGwgbm8gbG9uZ2VyIGltcGxpY2l0bHkgYnlwYXNzIHRoZSBjYWNoZS4KK1NldHRpbmcgdGhlIHJhbmRvbSB0aHJlc2hvbGQgdG8gMCBkb2VzIF9ub3RfIGRpc2FibGUgdGhlIHJhbmRvbSBJL08KK3N0cmVhbSBkZXRlY3Rpb24uCiAKLUludGVybmFsbHkgdGhlIG1xIHBvbGljeSBtYWludGFpbnMgYSBwcm9tb3Rpb24gdGhyZXNob2xkIHZhcmlhYmxlLiAgSWYKLXRoZSBoaXQgY291bnQgb2YgYSBibG9jayBub3QgaW4gdGhlIGNhY2hlIGdvZXMgYWJvdmUgdGhpcyB0aHJlc2hvbGQgaXQKLWdldHMgcHJvbW90ZWQgdG8gdGhlIGNhY2hlLiAgVGhlIHJlYWQsIHdyaXRlIGFuZCBkaXNjYXJkIHByb21vdGUgYWRqdXN0bWVudAorSW50ZXJuYWxseSB0aGUgbXEgcG9saWN5IGRldGVybWluZXMgYSBwcm9tb3Rpb24gdGhyZXNob2xkLiAgSWYgdGhlIGhpdAorY291bnQgb2YgYSBibG9jayBub3QgaW4gdGhlIGNhY2hlIGdvZXMgYWJvdmUgdGhpcyB0aHJlc2hvbGQgaXQgZ2V0cworcHJvbW90ZWQgdG8gdGhlIGNhY2hlLiAgVGhlIHJlYWQsIHdyaXRlIGFuZCBkaXNjYXJkIHByb21vdGUgYWRqdXN0bWVudAogdHVuYWJsZXMgYWxsb3cgeW91IHRvIHR3ZWFrIHRoZSBwcm9tb3Rpb24gdGhyZXNob2xkIGJ5IGFkZGluZyBhIHNtYWxsCiB2YWx1ZSBiYXNlZCBvbiB0aGUgaW8gdHlwZS4gIFRoZXkgZGVmYXVsdCB0byA0LCA4IGFuZCAxIHJlc3BlY3RpdmVseS4KIElmIHlvdSdyZSB0cnlpbmcgdG8gcXVpY2tseSB3YXJtIGEgbmV3IGNhY2hlIGRldmljZSB5b3UgbWF5IHdpc2ggdG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYW1sb2dpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FtbG9naWMudHh0CmluZGV4IDdlZWNlNzIuLjhmZTgxNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYW1sb2dpYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hbWxvZ2ljLnR4dApAQCAtMiw3ICsyLDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQm9hcmRzIHdpdGggdGhlIEFtbG9naWMgTWVzb242IFNvQyBzaGFsbCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAgUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgorICAgIGNvbXBhdGlibGU6ICJhbWxvZ2ljLG1lc29uNiIKIAotUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgotCi1jb21wYXRpYmxlID0gImFtbG9naWMsbWVzb242IjsKK0JvYXJkcyB3aXRoIHRoZSBBbWxvZ2ljIE1lc29uOCBTb0Mgc2hhbGwgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0eToKKyAgICBjb21wYXRpYmxlOiAiYW1sb2dpYyxtZXNvbjgiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcmNoX3RpbWVyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJjaF90aW1lci50eHQKaW5kZXggMzdiMmNhZi4uMjU2YjRkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcmNoX3RpbWVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FyY2hfdGltZXIudHh0CkBAIC0yMiw2ICsyMiwxNCBAQAogLSBhbHdheXMtb24gOiBhIGJvb2xlYW4gcHJvcGVydHkuIElmIHByZXNlbnQsIHRoZSB0aW1lciBpcyBwb3dlcmVkIHRocm91Z2ggYW4KICAgYWx3YXlzLW9uIHBvd2VyIGRvbWFpbiwgdGhlcmVmb3JlIGl0IG5ldmVyIGxvc2VzIGNvbnRleHQuCiAKKyoqIE9wdGlvbmFsIHByb3BlcnRpZXM6CisKKy0gYXJtLGNwdS1yZWdpc3RlcnMtbm90LWZ3LWNvbmZpZ3VyZWQgOiBGaXJtd2FyZSBkb2VzIG5vdCBpbml0aWFsaXplCisgIGFueSBvZiB0aGUgZ2VuZXJpYyB0aW1lciBDUFUgcmVnaXN0ZXJzLCB3aGljaCBjb250YWluIHRoZWlyCisgIGFyY2hpdGVjdHVyYWxseS1kZWZpbmVkIHJlc2V0IHZhbHVlcy4gT25seSBzdXBwb3J0ZWQgZm9yIDMyLWJpdAorICBzeXN0ZW1zIHdoaWNoIGZvbGxvdyB0aGUgQVJNdjcgYXJjaGl0ZWN0ZWQgcmVzZXQgdmFsdWVzLgorCisKIEV4YW1wbGU6CiAKIAl0aW1lciB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FybS1ib2FyZHMgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FybS1ib2FyZHMKaW5kZXggYzU1NGVkMy4uNTU2Yzg2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcm0tYm9hcmRzCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtLWJvYXJkcwpAQCAtOTIsMyArOTIsNjggQEAKIC0gY29yZS1tb2R1bGU6IHRoZSByb290IG5vZGUgdG8gdGhlIFZlcnNhdGlsZSBwbGF0Zm9ybXMgbXVzdCBoYXZlCiAgIGEgY29yZS1tb2R1bGUgd2l0aCByZWdzIGFuZCB0aGUgY29tcGF0aWJsZSBzdHJpbmdzCiAgICJhcm0sY29yZS1tb2R1bGUtdmVyc2F0aWxlIiwgInN5c2NvbiIKKworQVJNIFJlYWxWaWV3IEJvYXJkcworLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIFJlYWxWaWV3IGJvYXJkcyBjb3ZlciB0YWlsb3JlZCBldmFsdWF0aW9uIGJvYXJkcyB0aGF0IGFyZSB1c2VkIHRvIGV4cGxvcmUKK3RoZSBBUk0xMSBhbmQgQ29ydGV4IEEtOCBhbmQgQ29ydGV4IEEtOSBwcm9jZXNzb3JzLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzIChpbiByb290IG5vZGUpOgorCS8qIFJlYWxWaWV3IEVtdWxhdGlvbiBCYXNlYm9hcmQgKi8KKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1lYiI7CisJIC8qIFJlYWxWaWV3IFBsYXRmb3JtIEJhc2Vib2FyZCBmb3IgQVJNMTE3NkpaRi1TICovCisJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGIxMTc2IjsKKwkvKiBSZWFsVmlldyBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIEFSTTExIE1QQ29yZSAqLworCWNvbXBhdGlibGUgPSAiYXJtLHJlYWx2aWV3LXBiMTFtcCI7CisJLyogUmVhbFZpZXcgUGxhdGZvcm0gQmFzZWJvYXJkIGZvciBDb3J0ZXggQS04ICovCisJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGJhOCI7CisJLyogUmVhbFZpZXcgUGxhdGZvcm0gQmFzZWJvYXJkIEV4cGxvcmUgZm9yIENvcnRleCBBLTkgKi8KKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYngiOworCitSZXF1aXJlZCBub2RlczoKKworLSBzb2M6IHNvbWUgbm9kZSBvZiB0aGUgUmVhbFZpZXcgcGxhdGZvcm1zIG11c3QgYmUgdGhlIFNvQworICBub2RlIHRoYXQgY29udGFpbiB0aGUgU29DLXNwZWNpZmljIGRldmljZXMsIHdpdGhlIHRoZSBjb21wYXRpYmxlCisgIHN0cmluZyBzZXQgdG8gb25lIG9mIHRoZXNlIHR1cGxlczoKKyAgICJhcm0scmVhbHZpZXctZWItc29jIiwgInNpbXBsZS1idXMiCisgICAiYXJtLHJlYWx2aWV3LXBiMTE3Ni1zb2MiLCAic2ltcGxlLWJ1cyIKKyAgICJhcm0scmVhbHZpZXctcGIxMW1wLXNvYyIsICJzaW1wbGUtYnVzIgorICAgImFybSxyZWFsdmlldy1wYmE4LXNvYyIsICJzaW1wbGUtYnVzIgorICAgImFybSxyZWFsdmlldy1wYngtc29jIiwgInNpbXBsZS1idXMiCisKKy0gc3lzY29uOiBzb21lIHN1Ym5vZGUgb2YgdGhlIFJlYWxWaWV3IFNvQyBub2RlIG11c3QgYmUgYQorICBzeXN0ZW0gY29udHJvbGxlciBub2RlIHBvaW50aW5nIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVycywKKyAgd2l0aCB0aGUgY29tcGF0aWJsZSBzdHJpbmcgc2V0IHRvIG9uZSBvZiB0aGVzZSB0dXBsZXM6CisgICAiYXJtLHJlYWx2aWV3LWViLXN5c2NvbiIsICJzeXNjb24iCisgICAiYXJtLHJlYWx2aWV3LXBiMTE3Ni1zeXNjb24iLCAic3lzY29uIgorICAgImFybSxyZWFsdmlldy1wYjExbXAtc3lzY29uIiwgInN5c2NvbiIKKyAgICJhcm0scmVhbHZpZXctcGJhOC1zeXNjb24iLCAic3lzY29uIgorICAgImFybSxyZWFsdmlldy1wYngtc3lzY29uIiwgInN5c2NvbiIKKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciB0aGUgc3lzdGVtIGNvbnRyb2xsZXI6CisgIC0gcmVnczogdGhlIGxvY2F0aW9uIGFuZCBzaXplIG9mIHRoZSBzeXN0ZW0gY29udHJvbGxlciByZWdpc3RlcnMsCisgICAgb25lIHJhbmdlIG9mIDB4MTAwMCBieXRlcy4KKworRXhhbXBsZToKKworL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQVJNIFJlYWxWaWV3IFBCMTE3NiB3aXRoIGRldmljZSB0cmVlIjsKKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYiOworCisJc29jIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYtc29jIiwgInNpbXBsZS1idXMiOworCQlyYW5nZXM7CisKKwkJc3lzY29uOiBzeXNjb25AMTAwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctc3lzY29uIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgxMDAwMDAwMCAweDEwMDA+OworCQl9OworCisJfTsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2JjbS9jeWdudXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9iY20vY3lnbnVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzc3MTY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9iY20vY3lnbnVzLnR4dApAQCAtMCwwICsxLDMxIEBACitCcm9hZGNvbSBDeWdudXMgZGV2aWNlIHRyZWUgYmluZGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0JvYXJkcyB3aXRoIEN5Z251cyBTb0NzIHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorCitSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydHk6CisKK0JDTTExMzAwCitjb21wYXRpYmxlID0gImJyY20sYmNtMTEzMDAiLCAiYnJjbSxjeWdudXMiOworCitCQ00xMTMyMAorY29tcGF0aWJsZSA9ICJicmNtLGJjbTExMzIwIiwgImJyY20sY3lnbnVzIjsKKworQkNNMTEzNTAKK2NvbXBhdGlibGUgPSAiYnJjbSxiY20xMTM1MCIsICJicmNtLGN5Z251cyI7CisKK0JDTTExMzYwCitjb21wYXRpYmxlID0gImJyY20sYmNtMTEzNjAiLCAiYnJjbSxjeWdudXMiOworCitCQ001ODMwMAorY29tcGF0aWJsZSA9ICJicmNtLGJjbTU4MzAwIiwgImJyY20sY3lnbnVzIjsKKworQkNNNTgzMDIKK2NvbXBhdGlibGUgPSAiYnJjbSxiY201ODMwMiIsICJicmNtLGN5Z251cyI7CisKK0JDTTU4MzAzCitjb21wYXRpYmxlID0gImJyY20sYmNtNTgzMDMiLCAiYnJjbSxjeWdudXMiOworCitCQ001ODMwNQorY29tcGF0aWJsZSA9ICJicmNtLGJjbTU4MzA1IiwgImJyY20sY3lnbnVzIjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vY3B1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2NwdXMudHh0CmluZGV4IGZjNDQ2MzQ3Li5iMmFhY2JlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2NwdXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vY3B1cy50eHQKQEAgLTIyNyw2ICsyMjcsMTUgQEAKIAkJCSMgTGlzdCBvZiBwaGFuZGxlcyB0byBpZGxlIHN0YXRlIG5vZGVzIHN1cHBvcnRlZAogCQkJICBieSB0aGlzIGNwdSBbM10uCiAKKwktIHJvY2tjaGlwLHBtdQorCQlVc2FnZTogb3B0aW9uYWwgZm9yIHN5c3RlbXMgdGhhdCBoYXZlIGFuICJlbmFibGUtbWV0aG9kIgorCQkgICAgICAgcHJvcGVydHkgdmFsdWUgb2YgInJvY2tjaGlwLHJrMzA2Ni1zbXAiCisJCSAgICAgICBXaGlsZSBvcHRpb25hbCwgaXQgaXMgdGhlIHByZWZlcnJlZCB3YXkgdG8gZ2V0IGFjY2VzcyB0bworCQkgICAgICAgdGhlIGNwdS1jb3JlIHBvd2VyLWRvbWFpbnMuCisJCVZhbHVlIHR5cGU6IDxwaGFuZGxlPgorCQlEZWZpbml0aW9uOiBTcGVjaWZpZXMgdGhlIHN5c2NvbiBub2RlIGNvbnRyb2xsaW5nIHRoZSBjcHUgY29yZQorCQkJICAgIHBvd2VyIGRvbWFpbnMuCisKIEV4YW1wbGUgMSAoZHVhbC1jbHVzdGVyIGJpZy5MSVRUTEUgc3lzdGVtIDMyLWJpdCk6CiAKIAljcHVzIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZnNsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZnNsLnR4dAppbmRleCBlOTM1ZDdkLi40ZThiN2RmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2ZzbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9mc2wudHh0CkBAIC03NCwzICs3NCw0MSBAQAogaS5NWDZxIGdlbmVyaWMgYm9hcmQKIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0aWVzOgogICAgIC0gY29tcGF0aWJsZSA9ICJmc2wsaW14NnEiOworCisKK0ZyZWVzY2FsZSBMUzEwMjFBIFBsYXRmb3JtIERldmljZSBUcmVlIEJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVxdWlyZWQgcm9vdCBub2RlIGNvbXBhdGlibGUgcHJvcGVydGllczoKKyAgLSBjb21wYXRpYmxlID0gImZzbCxsczEwMjFhIjsKKworRnJlZXNjYWxlIExTMTAyMUEgU29DLXNwZWNpZmljIERldmljZSBUcmVlIEJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZyZWVzY2FsZSBTQ0ZHCisgIFNDRkcgaXMgdGhlIHN1cHBsZW1lbnRhbCBjb25maWd1cmF0aW9uIHVuaXQsIHRoYXQgcHJvdmlkZXMgU29DIHNwZWNpZmljCitjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIGZvciB0aGUgY2hpcC4gU3VjaCBhcyBnZXR0aW5nIFBFWCBwb3J0CitzdGF0dXMuCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisgIC0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJmc2wsbHMxMDIxYS1zY2ZnIgorICAtIHJlZzogc2hvdWxkIGNvbnRhaW4gYmFzZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgU0NGRyBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycworCitFeGFtcGxlOgorCXNjZmc6IHNjZmdAMTU3MDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtc2NmZyI7CisJCXJlZyA9IDwweDAgMHgxNTcwMDAwIDB4MCAweDEwMDAwPjsKKwl9OworCitGcmVlc2NhbGUgRENGRworICBEQ0ZHIGlzIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiB1bml0LCB0aGF0IHByb3ZpZGVzIGdlbmVyYWwgcHVycG9zZQorY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzIGZvciB0aGUgZGV2aWNlLiBTdWNoIGFzIHNldHRpbmcgdGhlIHNlY29uZGFyeQorY29yZSBzdGFydCBhZGRyZXNzIGFuZCByZWxlYXNlIHRoZSBzZWNvbmRhcnkgY29yZSBmcm9tIGhvbGRvZmYgYW5kIHN0YXJ0dXAuCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisgIC0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJmc2wsbHMxMDIxYS1kY2ZnIgorICAtIHJlZyA6IHNob3VsZCBjb250YWluIGJhc2UgYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIERDRkcgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMKKworRXhhbXBsZToKKwlkY2ZnOiBkY2ZnQDFlZTAwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWRjZmciOworCQlyZWcgPSA8MHgwIDB4MWVlMDAwMCAweDAgMHgxMDAwMD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZ2ljLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZ2ljLnR4dAppbmRleCBjN2QyZmExLi5iMzg2MDhhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2dpYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9naWMudHh0CkBAIC0xNyw2ICsxNyw3IEBACiAJImFybSxjb3J0ZXgtYTctZ2ljIgogCSJhcm0sYXJtMTFtcC1naWMiCiAJImJyY20sYnJhaG1hLWIxNS1naWMiCisJImFybSxhcm0xMTc2anpmLWRldmNoaXAtZ2ljIgogLSBpbnRlcnJ1cHQtY29udHJvbGxlciA6IElkZW50aWZpZXMgdGhlIG5vZGUgYXMgYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIKIC0gI2ludGVycnVwdC1jZWxscyA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNlbGxzIG5lZWRlZCB0byBlbmNvZGUgYW4KICAgaW50ZXJydXB0IHNvdXJjZS4gIFRoZSB0eXBlIHNoYWxsIGJlIGEgPHUzMj4gYW5kIHRoZSB2YWx1ZSBzaGFsbCBiZSAzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9tYXJ2ZWxsLGJlcmxpbi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21hcnZlbGwsYmVybGluLnR4dAppbmRleCA5MDRkZTU3Li5hOTllYjllIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21hcnZlbGwsYmVybGluLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21hcnZlbGwsYmVybGluLnR4dApAQCAtMTA2LDExICsxMDYsMjEgQEAKIC0gZ3JvdXBzOiBhIGxpc3Qgb2Ygc3RyaW5ncyBkZXNjcmliaW5nIHRoZSBncm91cCBuYW1lcy4KIC0gZnVuY3Rpb246IGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gbXV4IHRoZSBncm91cHMuCiAKKyogUmVzZXQgY29udHJvbGxlciBiaW5kaW5nCisKK0EgcmVzZXQgY29udHJvbGxlciBpcyBwYXJ0IG9mIHRoZSBjaGlwIGNvbnRyb2wgcmVnaXN0ZXJzIHNldC4gVGhlIGNoaXAgY29udHJvbAorbm9kZSBhbHNvIHByb3ZpZGVzIHRoZSByZXNldC4gVGhlIHJlZ2lzdGVyIHNldCBpcyBub3QgYXQgdGhlIHNhbWUgb2Zmc2V0IGJldHdlZW4KK0JlcmxpbiBTb0NzLgorCitSZXF1aXJlZCBwcm9wZXJ0eToKKy0gI3Jlc2V0LWNlbGxzOiBtdXN0IGJlIHNldCB0byAyCisKIEV4YW1wbGU6CiAKIGNoaXA6IGNoaXAtY29udHJvbEBlYTAwMDAgewogCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLWNoaXAtY3RybCI7CiAJI2Nsb2NrLWNlbGxzID0gPDE+OworCSNyZXNldC1jZWxscyA9IDwyPjsKIAlyZWcgPSA8MHhlYTAwMDAgMHg0MDA+OwogCWNsb2NrcyA9IDwmcmVmY2xrPiwgPCZleHRlcm5hbGRldiAwPjsKIAljbG9jay1uYW1lcyA9ICJyZWZjbGsiLCAidmlkZW9fZXh0MCI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21lZGlhdGVrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWVkaWF0ZWsudHh0CmluZGV4IGZhMjUyMjYuLjNiZTQwMTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWVkaWF0ZWsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWVkaWF0ZWsudHh0CkBAIC0xLDEwICsxLDE0IEBACi1NZWRpYXRlayBNVDY1ODkgUGxhdGZvcm1zIERldmljZSBUcmVlIEJpbmRpbmdzCitNZWRpYVRlayBtdDY1eHggJiBtdDgxeHggUGxhdGZvcm1zIERldmljZSBUcmVlIEJpbmRpbmdzCiAKLUJvYXJkcyB3aXRoIGEgU29DIG9mIHRoZSBNZWRpYXRlayBNVDY1ODkgc2hhbGwgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5OgorQm9hcmRzIHdpdGggYSBNZWRpYVRlayBtdDY1eHgvbXQ4MXh4IFNvQyBzaGFsbCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHk6CiAKIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0eToKIAotY29tcGF0aWJsZTogbXVzdCBjb250YWluICJtZWRpYXRlayxtdDY1ODkiCitjb21wYXRpYmxlOiBNdXN0IGNvbnRhaW4gb25lIG9mCisgICAibWVkaWF0ZWssbXQ2NTg5IgorICAgIm1lZGlhdGVrLG10NjU5MiIKKyAgICJtZWRpYXRlayxtdDgxMjciCisgICAibWVkaWF0ZWssbXQ4MTM1IgogCiAKIFN1cHBvcnRlZCBib2FyZHM6CkBAIC0xMiwzICsxNiwxMiBAQAogLSBicSBBcXVhcmlzNSBzbWFydCBwaG9uZToKICAgICBSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydGllczoKICAgICAgIC0gY29tcGF0aWJsZSA9ICJtdW5kb3JlYWRlcixicS1hcXVhcmlzNSIsICJtZWRpYXRlayxtdDY1ODkiOworLSBFdmFsdWF0aW9uIGJvYXJkIGZvciBNVDY1OTI6CisgICAgUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnRpZXM6CisgICAgICAtIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2NTkyLWV2YiIsICJtZWRpYXRlayxtdDY1OTIiOworLSBNVEsgbXQ4MTI3IHRhYmxldCBtb29zZSBFVkI6CisgICAgUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnRpZXM6CisgICAgICAtIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTI3LW1vb3NlIiwgIm1lZGlhdGVrLG10ODEyNyI7CistIE1USyBtdDgxMzUgdGFibGV0IEVWQjoKKyAgICBSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydGllczoKKyAgICAgIC0gY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxMzUtZXZicDEiLCAibWVkaWF0ZWssbXQ4MTM1IjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vb21hcC9vbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vb21hcC9vbWFwLnR4dAppbmRleCBkZGQ5YmNkLi40ZjZhODJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL29tYXAvb21hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9vbWFwL29tYXAudHh0CkBAIC0xMzIsNiArMTMyLDkgQEAKIC0gQU0zMzVYIEJvbmUgOiBMb3cgY29zdCBjb21tdW5pdHkgYm9hcmQKICAgY29tcGF0aWJsZSA9ICJ0aSxhbTMzNXgtYm9uZSIsICJ0aSxhbTMzeHgiLCAidGksb21hcDMiCiAKKy0gQU0zMzVYIE9yaW9uTFhtIDogU3Vic3RhdGlvbiBBdXRvbWF0aW9uIFBsYXRmb3JtCisgIGNvbXBhdGlibGUgPSAibm92YXRlY2gsYW0zMzV4LWx4bSIsICJ0aSxhbTMzeHgiCisKIC0gT01BUDUgRVZNIDogRXZhbHVhdGlvbiBNb2R1bGUKICAgY29tcGF0aWJsZSA9ICJ0aSxvbWFwNS1ldm0iLCAidGksb21hcDUiCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vcm9ja2NoaXAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9yb2NrY2hpcC50eHQKaW5kZXggODU3ZjEyNi4uZWFhM2QxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9yb2NrY2hpcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9yb2NrY2hpcC50eHQKQEAgLTEsNiArMSwxMCBAQAogUm9ja2NoaXAgcGxhdGZvcm1zIGRldmljZSB0cmVlIGJpbmRpbmdzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBNYXJzQm9hcmQgUkszMDY2IGJvYXJkOgorICAgIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0aWVzOgorICAgICAgLSBjb21wYXRpYmxlID0gImhhb3l1LG1hcnNib2FyZC1yazMwNjYiLCAicm9ja2NoaXAscmszMDY2YSI7CisKIC0gYnEgQ3VyaWUgMiB0YWJsZXQ6CiAgICAgUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnRpZXM6CiAgICAgICAtIGNvbXBhdGlibGUgPSAibXVuZG9yZWFkZXIsYnEtY3VyaWUyIiwgInJvY2tjaGlwLHJrMzA2NmEiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9zYW1zdW5nLWJvYXJkcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3NhbXN1bmctYm9hcmRzLnR4dAppbmRleCAyMTY4ZWQzLi40MzU4OWQyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3NhbXN1bmctYm9hcmRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3NhbXN1bmctYm9hcmRzLnR4dApAQCAtMSwxMSArMSwyMCBAQAotKiBTYW1zdW5nJ3MgRXh5bm9zNDIxMCBiYXNlZCBTTURLVjMxMCBldmFsdWF0aW9uIGJvYXJkCi0KLVNNREtWMzEwIGV2YWx1YXRpb24gYm9hcmQgaXMgYmFzZWQgb24gU2Ftc3VuZydzIEV4eW5vczQyMTAgU29DLgorKiBTYW1zdW5nJ3MgRXh5bm9zIFNvQyBiYXNlZCBib2FyZHMKIAogUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnRpZXM6CiAgICAgLSBjb21wYXRpYmxlID0gc2hvdWxkIGJlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcuCi0gICAgICAgIChhKSAic2Ftc3VuZyxzbWRrdjMxMCIgLSBmb3IgU2Ftc3VuZydzIFNNREtWMzEwIGV2YWwgYm9hcmQuCi0gICAgICAgIChiKSAic2Ftc3VuZyxleHlub3M0MjEwIiAgLSBmb3IgYm9hcmRzIGJhc2VkIG9uIEV4eW5vczQyMTAgU29DLgorCS0gInNhbXN1bmcsbW9uayIJLSBmb3IgRXh5bm9zMzI1MC1iYXNlZCBTYW1zdW5nIFNpbWJhbmQgYm9hcmQuCisJLSAic2Ftc3VuZyxyaW5hdG8iCS0gZm9yIEV4eW5vczMyNTAtYmFzZWQgU2Ftc3VuZyBHZWFyMiBib2FyZC4KKwktICJzYW1zdW5nLHNtZGt2MzEwIgktIGZvciBFeHlub3M0MjEwLWJhc2VkIFNhbXN1bmcgU01ES1YzMTAgZXZhbCBib2FyZC4KKwktICJzYW1zdW5nLHRyYXRzIgktIGZvciBFeHlub3M0MjEwLWJhc2VkIFRpemVuIFJlZmVyZW5jZSBib2FyZC4KKwktICJzYW1zdW5nLHVuaXZlcnNhbF9jMjEwIiAtIGZvciBFeHlub3M0MjEwLWJhc2VkIFNhbXN1bmcgYm9hcmQuCisJLSAic2Ftc3VuZyxzbWRrNDQxMiIsCS0gZm9yIEV4eW5vczQ0MTItYmFzZWQgU2Ftc3VuZyBTTURLNDQxMiBldmFsIGJvYXJkLgorCS0gInNhbXN1bmcsdHJhdHMyIgktIGZvciBFeHlub3M0NDEyLWJhc2VkIFRpemVuIFJlZmVyZW5jZSBib2FyZC4KKwktICJzYW1zdW5nLHNtZGs1MjUwIgktIGZvciBFeHlub3M1MjUwLWJhc2VkIFNhbXN1bmcgU01ESzUyNTAgZXZhbCBib2FyZC4KKwktICJzYW1zdW5nLHh5cmVmNTI2MCIJLSBmb3IgRXh5bm9zNTI2MC1iYXNlZCBTYW1zdW5nIGJvYXJkLgorCS0gInNhbXN1bmcsc21kazU0MTAiCS0gZm9yIEV4eW5vczU0MTAtYmFzZWQgU2Ftc3VuZyBTTURLNTQxMCBldmFsIGJvYXJkLgorCS0gInNhbXN1bmcsc21kazU0MjAiCS0gZm9yIEV4eW5vczU0MjAtYmFzZWQgU2Ftc3VuZyBTTURLNTQyMCBldmFsIGJvYXJkLgorCS0gInNhbXN1bmcsc2Q1djEiCS0gZm9yIEV4eW5vczU0NDAtYmFzZWQgU2Ftc3VuZyBib2FyZC4KKwktICJzYW1zdW5nLHNzZGs1NDQwIgktIGZvciBFeHlub3M1NDQwLWJhc2VkIFNhbXN1bmcgYm9hcmQuCiAKIE9wdGlvbmFsOgogICAgIC0gZmlybXdhcmUgbm9kZSwgc3BlY2lmeWluZyBwcmVzZW5jZSBhbmQgdHlwZSBvZiBzZWN1cmUgZmlybXdhcmU6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3N0ZS1ub21hZGlrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3RlLW5vbWFkaWsudHh0CmluZGV4IDYyNTZlYzMuLjJmZGZmNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3RlLW5vbWFkaWsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3RlLW5vbWFkaWsudHh0CkBAIC0xMCw2ICsxMCwxMiBAQAogCiBCb2FyZHMgd2l0aCB0aGUgTm9tYWRpayBTb0MgaW5jbHVkZToKIAorTm9tYWRpayBOSEstMTUgYm9hcmQgbWFudWZhY3R1cmVkIGJ5IFNUIE1pY3JvZWxlY3Ryb25pY3M6CisKK1JlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0eToKKworY29tcGF0aWJsZT0ic3Qsbm9tYWRpay1uaGstMTUiOworCiBTODgxNSAiTWluaUtpdCIgbWFudWZhY3R1cmVkIGJ5IENhbGFvIFN5c3RlbXM6CiAKIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0eToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3VueGkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9zdW54aS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5NDFmZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3VueGkudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0FsbHdpbm5lciBzdW5YaSBQbGF0Zm9ybXMgRGV2aWNlIFRyZWUgQmluZGluZ3MKKworRWFjaCBkZXZpY2UgdHJlZSBtdXN0IHNwZWNpZnkgd2hpY2ggQWxsd2lubmVyIFNvQyBpdCB1c2VzLAordXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tcGF0aWJsZSBzdHJpbmdzOgorCisgIGFsbHdpbm5lcixzdW40aS1hMTAKKyAgYWxsd2lubmVyLHN1bjVpLWExMHMKKyAgYWxsd2lubmVyLHN1bjVpLWExMworICBhbGx3aW5uZXIsc3VuNmktYTMxCisgIGFsbHdpbm5lcixzdW43aS1hMjAKKyAgYWxsd2lubmVyLHN1bjhpLWEyMworICBhbGx3aW5uZXIsc3VuOWktYTgwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3V4NTAwL3Bvd2VyX2RvbWFpbi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3V4NTAwL3Bvd2VyX2RvbWFpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3OWQxNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vdXg1MDAvcG93ZXJfZG9tYWluLnR4dApAQCAtMCwwICsxLDM1IEBACisqIFNULUVyaWNzc29uIFVYNTAwIFBNIERvbWFpbnMKKworVVg1MDAgc3VwcG9ydHMgbXVsdGlwbGUgUE0gZG9tYWlucyB3aGljaCBhcmUgdXNlZCB0byBnYXRlIHBvd2VyIHRvIG9uZSBvcgorbW9yZSBwZXJpcGhlcmFscyBvbiB0aGUgU09DLgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgUE0gZG9tYWlucyBmb3IgVVg1MDAgYXJlIGJhc2VkIHVwb24gdGhlIGdlbmVyaWMgUE0gZG9tYWluCithbmQgdXNlIHRoZSBjb3JyZXNwb25kaW5nIERUIGJpbmRpbmdzLgorCis9PVBNIGRvbWFpbiBwcm92aWRlcnM9PQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorIC0gY29tcGF0aWJsZTogTXVzdCBiZSAic3Rlcmljc3Nvbix1eDUwMC1wbS1kb21haW5zIi4KKyAtICNwb3dlci1kb21haW4tY2VsbHMgOiBOdW1iZXIgb2YgY2VsbHMgaW4gYSBwb3dlciBkb21haW4gc3BlY2lmaWVyLCBtdXN0IGJlIDEuCisKK0V4YW1wbGU6CisJcG1fZG9tYWluczogcG1fZG9tYWluczAgeworCQljb21wYXRpYmxlID0gInN0ZXJpY3Nzb24sdXg1MDAtcG0tZG9tYWlucyI7CisJCSNwb3dlci1kb21haW4tY2VsbHMgPSA8MT47CisJfTsKKworPT1QTSBkb21haW4gY29uc3VtZXJzPT0KKworUmVxdWlyZWQgcHJvcGVydGllczoKKyAtIHBvd2VyLWRvbWFpbnM6IEEgcGhhbmRsZSBhbmQgUE0gZG9tYWluIHNwZWNpZmllci4gQmVsb3cgYXJlIHRoZSBsaXN0IG9mCisJCXZhbGlkIHNwZWNpZmllcnM6CisKKwkJSW5kZXgJU3BlY2lmaWVyCisJCS0tLS0tCS0tLS0tLS0tLQorCQkwCURPTUFJTl9WQVBFCisKK0V4YW1wbGU6CisJc2RpMF9wZXIxQDgwMTI2MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwxOHgiLCAiYXJtLHByaW1lY2VsbCI7CisJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvYnJjbSxnaXNiLWFyYi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL2JyY20sZ2lzYi1hcmIudHh0CmluZGV4IGUyZDUwMWQuLjFlY2VlZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvYnJjbSxnaXNiLWFyYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2J1cy9icmNtLGdpc2ItYXJiLnR4dApAQCAtMiw3ICsyLDExIEBACiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAKLS0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJicmNtLGdpc2ItYXJiIgorLSBjb21wYXRpYmxlOgorICAgICJicmNtLGdpc2ItYXJiIiBvciAiYnJjbSxiY203NDQ1LWdpc2ItYXJiIiBmb3IgMjhubSBjaGlwcworICAgICJicmNtLGJjbTc0MzUtZ2lzYi1hcmIiIGZvciBuZXdlciA0MG5tIGNoaXBzCisgICAgImJyY20sYmNtNzQwMC1naXNiLWFyYiIgZm9yIG9sZGVyIDQwbm0gY2hpcHMgYW5kIGFsbCA2NW5tIGNoaXBzCisgICAgImJyY20sYmNtNzAzOC1naXNiLWFyYiIgZm9yIDEzMG5tIGNoaXBzCiAtIHJlZzogc3BlY2lmaWVzIHRoZSBiYXNlIHBoeXNpY2FsIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIHJlZ2lzdGVycwogLSBpbnRlcnJ1cHQtcGFyZW50OiBzcGVjaWZpZXMgdGhlIHBoYW5kbGUgdG8gdGhlIHBhcmVudCBpbnRlcnJ1cHQgY29udHJvbGxlcgogICB0aGlzIGFyYml0ZXIgZ2V0cyBpbnRlcnJ1cHQgbGluZSBmcm9tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL212ZWJ1LW1idXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2J1cy9tdmVidS1tYnVzLnR4dAppbmRleCA1ZmE0NGY1Li41ZTE2YzNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL212ZWJ1LW1idXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvbXZlYnUtbWJ1cy50eHQKQEAgLTQ4LDkgKzQ4LDEyIEBACiAtIGNvbXBhdGlibGU6CVNob3VsZCBiZSBzZXQgdG8gIm1hcnZlbGwsbWJ1cy1jb250cm9sbGVyIi4KIAogLSByZWc6ICAgICAgICAgIERldmljZSdzIHJlZ2lzdGVyIHNwYWNlLgotCQlUd28gZW50cmllcyBhcmUgZXhwZWN0ZWQgKHNlZSB0aGUgZXhhbXBsZXMgYmVsb3cpOgotCQl0aGUgZmlyc3Qgb25lIGNvbnRyb2xzIHRoZSBkZXZpY2VzIGRlY29kaW5nIHdpbmRvdyBhbmQKLQkJdGhlIHNlY29uZCBvbmUgY29udHJvbHMgdGhlIFNEUkFNIGRlY29kaW5nIHdpbmRvdy4KKwkJVHdvIG9yIHRocmVlIGVudHJpZXMgYXJlIGV4cGVjdGVkIChzZWUgdGhlIGV4YW1wbGVzIGJlbG93KToKKwkJdGhlIGZpcnN0IG9uZSBjb250cm9scyB0aGUgZGV2aWNlcyBkZWNvZGluZyB3aW5kb3csCisJCXRoZSBzZWNvbmQgb25lIGNvbnRyb2xzIHRoZSBTRFJBTSBkZWNvZGluZyB3aW5kb3cgYW5kCisJCXRoZSB0aGlyZCBjb250cm9scyB0aGUgTUJ1cyBicmlkZ2UgKG9ubHkgd2l0aCB0aGUKKwkJbWFydmVsbCxhcm1hZGEzNzAtbWJ1cyBhbmQgbWFydmVsbCxhcm1hZGF4cC1tYnVzCisJCWNvbXBhdGlibGUgc3RyaW5ncykKIAogRXhhbXBsZToKIApAQCAtNjcsNyArNzAsNyBAQAogCiAJCQltYnVzYzogbWJ1cy1jb250cm9sbGVyQDIwMDAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbWJ1cy1jb250cm9sbGVyIjsKLQkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+OworCQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwPiwgPDB4MjAxODAgMHgyMD4sIDwweDIwMjUwIDB4OD47CiAJCQl9OwogCiAJCQkvKiBtb3JlIGNoaWxkcmVuIC4uLiovCkBAIC0xMjYsNyArMTI5LDcgQEAKIAogCQkJbWJ1c2M6IG1idXMtY29udHJvbGxlckAyMDAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG1idXMtY29udHJvbGxlciI7Ci0JCQkJcmVnID0gPDB4MjAwMDAgMHgxMDA+LCA8MHgyMDE4MCAweDIwPjsKKwkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+LCA8MHgyMDI1MCAweDg+OwogCQkJfTsKIAogCQkJLyogbW9yZSBjaGlsZHJlbiAuLi4qLwpAQCAtMTcwLDcgKzE3Myw3IEBACiAKIAkJCW1idXNjOiBtYnVzLWNvbnRyb2xsZXJAMjAwMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtYnVzLWNvbnRyb2xsZXIiOwotCQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwPiwgPDB4MjAxODAgMHgyMD47CisJCQkJcmVnID0gPDB4MjAwMDAgMHgxMDA+LCA8MHgyMDE4MCAweDIwPiwgPDB4MjAyNTAgMHg4PjsKIAkJCX07CiAKIAkJCS8qIG90aGVyIGNoaWxkcmVuICovCkBAIC0yNjYsNyArMjY5LDcgQEAKIAkJCXJhbmdlcyA9IDwwIE1CVVNfSUQoMHhmMCwgMHgwMSkgMCAweDEwMDAwMD47CiAKIAkJCW1idXNjOiBtYnVzLWNvbnRyb2xsZXJAMjAwMDAgewotCQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwPiwgPDB4MjAxODAgMHgyMD47CisJCQkJcmVnID0gPDB4MjAwMDAgMHgxMDA+LCA8MHgyMDE4MCAweDIwPiwgPDB4MjAyNTAgMHg4PjsKIAkJCX07CiAKIAkJCWludGVycnVwdC1jb250cm9sbGVyQDIwMDAwIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9iY20tY3lnbnVzLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9iY20tY3lnbnVzLWNsb2NrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGQyNmVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2JjbS1jeWdudXMtY2xvY2sudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0Jyb2FkY29tIEN5Z251cyBDbG9ja3MKKworVGhpcyBiaW5kaW5nIHVzZXMgdGhlIGNvbW1vbiBjbG9jayBiaW5kaW5nOgorRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2Nsb2NrLWJpbmRpbmdzLnR4dAorCitDdXJyZW50bHkgdmFyaW91cyAiZml4ZWQiIGNsb2NrcyBhcmUgZGVjbGFyZWQgZm9yIHBlcmlwaGVyYWwgZHJpdmVycyB0aGF0IHVzZQordGhlIGNvbW1vbiBjbG9jayBmcmFtZXdvcmsgdG8gcmVmZXJlbmNlIHRoZWlyIGNvcmUgY2xvY2tzLiBQcm9wZXIgc3VwcG9ydCBvZgordGhlc2UgY2xvY2tzIHdpbGwgYmUgYWRkZWQgbGF0ZXIKKworRGV2aWNlIHRyZWUgZXhhbXBsZToKKworCWNsb2NrcyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCisJCW9zYzogb3NjaWxsYXRvciB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47CisJCX07CisKKwkJYXBiX2NsazogYXBiX2NsayB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDAwPjsKKwkJfTsKKworCQlwZXJpcGhfY2xrOiBwZXJpcGhfY2xrIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwMDAwMD47CisJCX07CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay92ZjYxMC1jbG9jay50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svdmY2MTAtY2xvY2sudHh0CmluZGV4IGM4MDg2M2QuLjYzZjlmMWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay92ZjYxMC1jbG9jay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLnR4dApAQCAtNSw2ICs1LDE5IEBACiAtIHJlZzogQWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQKIC0gI2Nsb2NrLWNlbGxzOiBTaG91bGQgYmUgPDE+CiAKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGNsb2NrczogbGlzdCBvZiBjbG9jayBpZGVudGlmaWVycyB3aGljaCBhcmUgZXh0ZXJuYWwgaW5wdXQgY2xvY2tzIHRvIHRoZQorCWdpdmVuIGNsb2NrIGNvbnRyb2xsZXIuIFBsZWFzZSByZWZlciB0aGUgbmV4dCBzZWN0aW9uIHRvIGZpbmQKKwl0aGUgaW5wdXQgY2xvY2tzIGZvciBhIGdpdmVuIGNvbnRyb2xsZXIuCistIGNsb2NrLW5hbWVzOiBsaXN0IG9mIG5hbWVzIG9mIGNsb2NrcyB3aGljaCBhcmUgZXh0ZXJhbCBpbnB1dCBjbG9ja3MgdG8gdGhlCisJZ2l2ZW4gY2xvY2sgY29udHJvbGxlci4KKworSW5wdXQgY2xvY2tzIGZvciB0b3AgY2xvY2sgY29udHJvbGxlcjoKKwktIHN4b3NjIChleHRlcm5hbCBjcnlzdGFsIG9zY2lsbGF0b3IgMzJLSHosIHJlY29tbWVuZGVkKQorCS0gZnhvc2MgKGV4dGVybmFsIGNyeXN0YWwgb3NjaWxsYXRvciAyNE1IeiwgcmVjb21tZW5kZWQpCisJLSBhdWRpb19leHQKKwktIGVuZXRfZXh0CisKIFRoZSBjbG9jayBjb25zdW1lciBzaG91bGQgc3BlY2lmeSB0aGUgZGVzaXJlZCBjbG9jayBieSBoYXZpbmcgdGhlIGNsb2NrCiBJRCBpbiBpdHMgImNsb2NrcyIgcGhhbmRsZSBjZWxsLiBTZWUgaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay92ZjYxMC1jbG9jay5oCiBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBWRjYxMCBjbG9jayBJRHMuCkBAIC0xNSw2ICsyOCw4IEBACiAJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtY2NtIjsKIAlyZWcgPSA8MHg0MDA2YjAwMCAweDEwMDA+OwogCSNjbG9jay1jZWxscyA9IDwxPjsKKwljbG9ja3MgPSA8JnN4b3NjPiwgPCZmeG9zYz47CisJY2xvY2stbmFtZXMgPSAic3hvc2MiLCAiZnhvc2MiOwogfTsKIAogdWFydDE6IHNlcmlhbEA0MDAyODAwMCB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL3hpbGlueC94aWxpbnhfdmRtYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL3hpbGlueC94aWxpbnhfdmRtYS50eHQKaW5kZXggMTQwNWVkMC4uZTRjNGQ0NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2RtYS94aWxpbngveGlsaW54X3ZkbWEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kbWEveGlsaW54L3hpbGlueF92ZG1hLnR4dApAQCAtMjUsNyArMjUsNyBAQAogLSBjb21wYXRpYmxlOiBJdCBzaG91bGQgYmUgZWl0aGVyICJ4bG54LGF4aS12ZG1hLW1tMnMtY2hhbm5lbCIgb3IKIAkieGxueCxheGktdmRtYS1zMm1tLWNoYW5uZWwiLgogLSBpbnRlcnJ1cHRzOiBTaG91bGQgY29udGFpbiBwZXIgY2hhbm5lbCBWRE1BIGludGVycnVwdHMuCi0tIHhsbngsZGF0YS13aWR0aDogU2hvdWxkIGNvbnRhaW4gdGhlIHN0cmVhbSBkYXRhIHdpZHRoLCB0YWtlIHZhbHVlcworLSB4bG54LGRhdGF3aWR0aDogU2hvdWxkIGNvbnRhaW4gdGhlIHN0cmVhbSBkYXRhIHdpZHRoLCB0YWtlIHZhbHVlcwogCXszMiw2NC4uLjEwMjR9LgogCiBPcHRpb25hbCBjaGlsZCBub2RlIHByb3BlcnRpZXM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaHdtb24vbHRjMjk3OC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaHdtb24vbHRjMjk3OC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyZjA5ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9od21vbi9sdGMyOTc4LnR4dApAQCAtMCwwICsxLDM5IEBACitsdGMyOTc4CisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6IHNob3VsZCBjb250YWluIG9uZSBvZjoKKyAgKiAibGx0YyxsdGMyOTc0IgorICAqICJsbHRjLGx0YzI5NzciCisgICogImxsdGMsbHRjMjk3OCIKKyAgKiAibGx0YyxsdGMzODgwIgorICAqICJsbHRjLGx0YzM4ODMiCisgICogImxsdGMsbHRtNDY3NiIKKy0gcmVnOiBJMkMgc2xhdmUgYWRkcmVzcworCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSByZWd1bGF0b3JzOiBBIG5vZGUgdGhhdCBob3VzZXMgYSBzdWItbm9kZSBmb3IgZWFjaCByZWd1bGF0b3IgY29udHJvbGxlZCBieQorICB0aGUgZGV2aWNlLiBFYWNoIHN1Yi1ub2RlIGlzIGlkZW50aWZpZWQgdXNpbmcgdGhlIG5vZGUncyBuYW1lLCB3aXRoIHZhbGlkCisgIHZhbHVlcyBsaXN0ZWQgYmVsb3cuIFRoZSBjb250ZW50IG9mIGVhY2ggc3ViLW5vZGUgaXMgZGVmaW5lZCBieSB0aGUKKyAgc3RhbmRhcmQgYmluZGluZyBmb3IgcmVndWxhdG9yczsgc2VlIHJlZ3VsYXRvci50eHQuCisKK1ZhbGlkIG5hbWVzIG9mIHJlZ3VsYXRvcnMgZGVwZW5kIG9uIG51bWJlciBvZiBzdXBwbGllcyBzdXBwb3J0ZWQgcGVyIGRldmljZToKKyAgKiBsdGMyOTc0IDogdm91dDAgLSB2b3V0MworICAqIGx0YzI5NzcgOiB2b3V0MCAtIHZvdXQ3CisgICogbHRjMjk3OCA6IHZvdXQwIC0gdm91dDcKKyAgKiBsdGMzODgwIDogdm91dDAgLSB2b3V0MQorICAqIGx0YzM4ODMgOiB2b3V0MAorICAqIGx0bTQ2NzYgOiB2b3V0MCAtIHZvdXQxCisKK0V4YW1wbGU6CitsdGMyOTc4QDVlIHsKKwljb21wYXRpYmxlID0gImxsdGMsbHRjMjk3OCI7CisJcmVnID0gPDB4NWU+OworCXJlZ3VsYXRvcnMgeworCQl2b3V0MCB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJGUEdBLTIuNVYiOworCQl9OworCQl2b3V0MiB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJGUEdBLTEuNVYiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9pMmMtczNjMjQxMC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2kyYy1zM2MyNDEwLnR4dAppbmRleCAyNzhkZThlLi44OWIzMjUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2kyYy1zM2MyNDEwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2kyYy1zM2MyNDEwLnR4dApAQCAtMzIsNiArMzIsNyBAQAogICAgIHNwZWNpZmllZCwgZGVmYXVsdCB2YWx1ZSBpcyAwLgogICAtIHNhbXN1bmcsaTJjLW1heC1idXMtZnJlcTogRGVzaXJlZCBmcmVxdWVuY3kgaW4gSHogb2YgdGhlIGJ1cy4gSWYgbm90CiAgICAgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpbiBIeiBpcyAxMDAwMDAuCisgIC0gc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSAtIGhhbmRsZSB0byBzeXNjb24gdXNlZCB0byBjb250cm9sIHRoZSBzeXN0ZW0gcmVnaXN0ZXJzCiAKIEV4YW1wbGU6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZpY2VzLnR4dAppbmRleCBmYmRlNDE1Li42MDVkY2NhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2aWNlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0CkBAIC01Niw2ICs1Niw4IEBACiBpbmZpbmVvbixzbGI5NjM1dHQJSW5maW5lb24gU0xCOTYzNSAoU29mdC0pIEkyQyBUUE0gKG9sZCBwcm90b2NvbCwgbWF4IDEwMGtoeikKIGluZmluZW9uLHNsYjk2NDV0dAlJbmZpbmVvbiBTTEI5NjQ1IEkyQyBUUE0gKG5ldyBwcm90b2NvbCwgbWF4IDQwMGtoeikKIGlzbCxpc2wxMjA1NwkJSW50ZXJzaWwgSVNMMTIwNTcgSTJDIFJUQyBDaGlwCitpc2lsLGlzbDI5MDI4ICAgICAgICAgICAoZGVwcmVjYXRlZCwgdXNlIGlzbCkKK2lzbCxpc2wyOTAyOCAgICAgICAgICAgIEludGVyc2lsIElTTDI5MDI4IEFtYmllbnQgTGlnaHQgYW5kIFByb3hpbWl0eSBTZW5zb3IKIG1heGltLGRzMTA1MAkJNSBCaXQgUHJvZ3JhbW1hYmxlLCBQdWxzZS1XaWR0aCBNb2R1bGF0b3IKIG1heGltLG1heDEyMzcJCUxvdy1Qb3dlciwgNC0vMTItQ2hhbm5lbCwgMi1XaXJlIFNlcmlhbCwgMTItQml0IEFEQ3MKIG1heGltLG1heDY2MjUJCTktQml0LzEyLUJpdCBUZW1wZXJhdHVyZSBTZW5zb3JzIHdpdGggScKyQy1Db21wYXRpYmxlIFNlcmlhbCBJbnRlcmZhY2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9icmNtLGJjbTcxMjAtbDItaW50Yy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYnJjbSxiY203MTIwLWwyLWludGMudHh0CmluZGV4IGZmODEyYTguLmJhZTFmMjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9icmNtLGJjbTcxMjAtbDItaW50Yy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2JyY20sYmNtNzEyMC1sMi1pbnRjLnR4dApAQCAtMTMsNyArMTMsMTIgQEAKICAgb3IgaWYgdGhleSB3aWxsIG91dHB1dCBhbiBpbnRlcnJ1cHQgc2lnbmFsIGF0IHRoaXMgMm5kIGxldmVsIGludGVycnVwdAogICBjb250cm9sbGVyLCBpbiBwYXJ0aWN1bGFyIGZvciBVQVJUcwogCi0tIG5vdCBhbGwgMzItYml0cyB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIGFjdHVhbGx5IG1hcCB0byBhbiBpbnRlcnJ1cHQKKy0gdHlwaWNhbGx5IGhhcyBvbmUgMzItYml0IGVuYWJsZSB3b3JkIGFuZCBvbmUgMzItYml0IHN0YXR1cyB3b3JkLCBidXQgb24KKyAgc29tZSBoYXJkd2FyZSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIGVuYWJsZS9zdGF0dXMgcGFpcgorCistIG5vIGF0b21pYyBzZXQvY2xlYXIgb3BlcmF0aW9ucworCistIG5vdCBhbGwgYml0cyB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIGFjdHVhbGx5IG1hcCB0byBhbiBpbnRlcnJ1cHQKIAogVGhlIHR5cGljYWwgaGFyZHdhcmUgbGF5b3V0IGZvciB0aGlzIGNvbnRyb2xsZXIgaXMgcmVwcmVzZW50ZWQgYmVsb3c6CiAKQEAgLTQ4LDcgKzUzLDkgQEAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAKIC0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJicmNtLGJjbTcxMjAtbDItaW50YyIKLS0gcmVnOiBzcGVjaWZpZXMgdGhlIGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgcmVnaXN0ZXJzCistIHJlZzogc3BlY2lmaWVzIHRoZSBiYXNlIHBoeXNpY2FsIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIHJlZ2lzdGVyczsKKyAgbXVsdGlwbGUgcGFpcnMgbWF5IGJlIHNwZWNpZmllZCwgd2l0aCB0aGUgZmlyc3QgcGFpciBoYW5kbGluZyBJUlEgb2Zmc2V0cworICAwLi4zMSBhbmQgdGhlIHNlY29uZCBwYWlyIGhhbmRsaW5nIDMyLi42MwogLSBpbnRlcnJ1cHQtY29udHJvbGxlcjogaWRlbnRpZmllcyB0aGUgbm9kZSBhcyBhbiBpbnRlcnJ1cHQgY29udHJvbGxlcgogLSAjaW50ZXJydXB0LWNlbGxzOiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjZWxscyBuZWVkZWQgdG8gZW5jb2RlIGFuIGludGVycnVwdAogICBzb3VyY2UsIHNob3VsZCBiZSAxLgpAQCAtNTksMTggKzY2LDIxIEBACiAtIGJyY20saW50LW1hcC1tYXNrOiAzMi1iaXRzIGJpdCBtYXNrIGRlc2NyaWJpbmcgaG93IG1hbnkgYW5kIHdoaWNoIGludGVycnVwdHMKICAgYXJlIHdpcmVkIHRvIHRoaXMgMm5kIGxldmVsIGludGVycnVwdCBjb250cm9sbGVyLCBhbmQgaG93IHRoZXkgbWF0Y2ggdGhlaXIKICAgcmVzcGVjdGl2ZSBpbnRlcnJ1cHQgcGFyZW50cy4gU2hvdWxkIG1hdGNoIGV4YWN0bHkgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzCi0gIHNwZWNpZmllZCBpbiB0aGUgJ2ludGVycnVwdHMnIHByb3BlcnR5LgorICBzcGVjaWZpZWQgaW4gdGhlICdpbnRlcnJ1cHRzJyBwcm9wZXJ0eSwgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mCisgIGVuYWJsZS9zdGF0dXMgcmVnaXN0ZXIgcGFpcnMgaW1wbGVtZW50ZWQgYnkgdGhpcyBjb250cm9sbGVyLiAgRm9yCisgIG11bHRpcGxlIHBhcmVudCBJUlFzIHdpdGggbXVsdGlwbGUgZW5hYmxlL3N0YXR1cyB3b3JkcywgdGhpcyBsb29rcyBsaWtlOgorICA8aXJxMF93MCBpcnEwX3cxIGlycTFfdzAgaXJxMV93MSAuLi4+CiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAKIC0gYnJjbSxpcnEtY2FuLXdha2U6IGlmIHByZXNlbnQsIHRoaXMgbWVhbnMgdGhlIEwyIGNvbnRyb2xsZXIgY2FuIGJlIHVzZWQgYXMgYQogICB3YWtldXAgc291cmNlIGZvciBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUuCiAKLS0gYnJjbSxpbnQtZndkLW1hc2s6IGlmIHByZXNlbnQsIGEgMzItYml0cyBiaXQgbWFzayB0byBjb25maWd1cmUgZm9yIHRoZQotICBpbnRlcnJ1cHRzIHdoaWNoIGhhdmUgYSBtdXggZ2F0ZSwgdHlwaWNhbGx5IFVBUlRzLiBTZXR0aW5nIHRoZXNlIGJpdHMgd2lsbAotICBtYWtlIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJydXB0cyBvdXRwdXRzIGJ5cGFzcyB0aGlzIDJuZCBsZXZlbCBpbnRlcnJ1cHQKLSAgY29udHJvbGxlciBjb21wbGV0ZWx5LCBpdCBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKLSAgcGFyZW50CistIGJyY20saW50LWZ3ZC1tYXNrOiBpZiBwcmVzZW50LCBhIGJpdCBtYXNrIHRvIGNvbmZpZ3VyZSB0aGUgaW50ZXJydXB0cyB3aGljaAorICBoYXZlIGEgbXV4IGdhdGUsIHR5cGljYWxseSBVQVJUcy4gU2V0dGluZyB0aGVzZSBiaXRzIHdpbGwgbWFrZSB0aGVpcgorICByZXNwZWN0aXZlIGludGVycnVwdCBvdXRwdXRzIGJ5cGFzcyB0aGlzIDJuZCBsZXZlbCBpbnRlcnJ1cHQgY29udHJvbGxlcgorICBjb21wbGV0ZWx5OyBpdCBpcyBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAgcGFyZW50LiBUaGlzIHNob3VsZCBoYXZlIG9uZSAzMi1iaXQgd29yZCBwZXIgZW5hYmxlL3N0YXR1cyBwYWlyLgogCiBFeGFtcGxlOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVtb3J5LWNvbnRyb2xsZXJzL212ZWJ1LXNkcmFtLWNvbnRyb2xsZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lbW9yeS1jb250cm9sbGVycy9tdmVidS1zZHJhbS1jb250cm9sbGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTY1N2QxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lbW9yeS1jb250cm9sbGVycy9tdmVidS1zZHJhbS1jb250cm9sbGVyLnR4dApAQCAtMCwwICsxLDIxIEBACitEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgTVZFQlUgU0RSQU0gY29udHJvbGxlcnMKKworVGhlIE1hcnZlbGwgRUJVIFNvQ3MgYWxsIGhhdmUgYSBTRFJBTSBjb250cm9sbGVyLiBUaGUgU0RSQU0gY29udHJvbGxlcgorZGlmZmVycyBmcm9tIG9uZSBTb0MgdmFyaWFudCB0byBhbm90aGVyLCBidXQgdGhleSBhbHNvIHNoYXJlIGEgbnVtYmVyCitvZiBjb21tb25hbGl0aWVzLgorCitGb3Igbm93LCB0aGlzIERldmljZSBUcmVlIGJpbmRpbmcgZG9jdW1lbnRhdGlvbiBvbmx5IGRvY3VtZW50cyB0aGUKK0FybWFkYSBYUCBTRFJBTSBjb250cm9sbGVyLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgLSBjb21wYXRpYmxlOiBmb3IgQXJtYWRhIFhQLCAibWFydmVsbCxhcm1hZGEteHAtc2RyYW0tY29udHJvbGxlciIKKyAtIHJlZzogYSByZXNvdXJjZSBzcGVjaWZpZXIgZm9yIHRoZSByZWdpc3RlciBzcGFjZSwgd2hpY2ggc2hvdWxkCisgICBpbmNsdWRlIGFsbCBTRFJBTSBjb250cm9sbGVyIHJlZ2lzdGVycyBhcyBwZXIgdGhlIGRhdGFzaGVldC4KKworRXhhbXBsZToKKworc2RyYW1jQDE0MDAgeworCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEteHAtc2RyYW0tY29udHJvbGxlciI7CisJcmVnID0gPDB4MTQwMCAweDUwMD47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lbW9yeS1jb250cm9sbGVycy9udmlkaWEsdGVncmEtbWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lbW9yeS1jb250cm9sbGVycy9udmlkaWEsdGVncmEtbWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZGI5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVtb3J5LWNvbnRyb2xsZXJzL252aWRpYSx0ZWdyYS1tYy50eHQKQEAgLTAsMCArMSwzNiBAQAorTlZJRElBIFRlZ3JhIE1lbW9yeSBDb250cm9sbGVyIGRldmljZSB0cmVlIGJpbmRpbmdzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogU2hvdWxkIGJlICJudmlkaWEsdGVncmE8Y2hpcD4tbWMiCistIHJlZzogUGh5c2ljYWwgYmFzZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIGNvbnRyb2xsZXIncyByZWdpc3RlcnMuCistIGNsb2NrczogTXVzdCBjb250YWluIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgorICBTZWUgLi4vY2xvY2tzL2Nsb2NrLWJpbmRpbmdzLnR4dCBmb3IgZGV0YWlscy4KKy0gY2xvY2stbmFtZXM6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGVudHJpZXM6CisgIC0gbWM6IHRoZSBtb2R1bGUncyBjbG9jayBpbnB1dAorLSBpbnRlcnJ1cHRzOiBUaGUgaW50ZXJydXB0IG91dHB1dHMgZnJvbSB0aGUgY29udHJvbGxlci4KKy0gI2lvbW11LWNlbGxzOiBTaG91bGQgYmUgMS4gVGhlIHNpbmdsZSBjZWxsIG9mIHRoZSBJT01NVSBzcGVjaWZpZXIgZGVmaW5lcworICB0aGUgU1dHUk9VUCBvZiB0aGUgbWFzdGVyLgorCitUaGlzIGRldmljZSBpbXBsZW1lbnRzIGFuIElPTU1VIHRoYXQgY29tcGxpZXMgd2l0aCB0aGUgZ2VuZXJpYyBJT01NVSBiaW5kaW5nLgorU2VlIC4uL2lvbW11L2lvbW11LnR4dCBmb3IgZGV0YWlscy4KKworRXhhbXBsZToKKy0tLS0tLS0tCisKKwltYzogbWVtb3J5LWNvbnRyb2xsZXJAMCw3MDAxOTAwMCB7CisJCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LW1jIjsKKwkJcmVnID0gPDB4MCAweDcwMDE5MDAwIDB4MCAweDEwMDA+OworCQljbG9ja3MgPSA8JnRlZ3JhX2NhciBURUdSQTEyNF9DTEtfTUM+OworCQljbG9jay1uYW1lcyA9ICJtYyI7CisKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCSNpb21tdS1jZWxscyA9IDwxPjsKKwl9OworCisJc2RoY2lAMCw3MDBiMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LXNkaGNpIjsKKwkJLi4uCisJCWlvbW11cyA9IDwmbWMgVEVHUkFfU1dHUk9VUF9TRE1NQzFBPjsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9hdG1lbC1obGNkYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL2F0bWVsLWhsY2RjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjRkZTk1YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvYXRtZWwtaGxjZGMudHh0CkBAIC0wLDAgKzEsNTEgQEAKK0RldmljZS1UcmVlIGJpbmRpbmdzIGZvciBBdG1lbCdzIEhMQ0RDIChIaWdoIExDRCBDb250cm9sbGVyKSBNRkQgZHJpdmVyCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisgLSBjb21wYXRpYmxlOiB2YWx1ZSBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAiYXRtZWwsc2FtYTVkMy1obGNkYyIKKyAtIHJlZzogYmFzZSBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSBITENEQyBkZXZpY2UgcmVnaXN0ZXJzLgorIC0gY2xvY2stbmFtZXM6IHRoZSBuYW1lIG9mIHRoZSAzIGNsb2NrcyByZXF1ZXN0ZWQgYnkgdGhlIEhMQ0RDIGRldmljZS4KKyAgIFNob3VsZCBjb250YWluICJwZXJpcGhfY2xrIiwgInN5c19jbGsiIGFuZCAic2xvd19jbGsiLgorIC0gY2xvY2tzOiBzaG91bGQgY29udGFpbiB0aGUgMyBjbG9ja3MgcmVxdWVzdGVkIGJ5IHRoZSBITENEQyBkZXZpY2UuCisgLSBpbnRlcnJ1cHRzOiBzaG91bGQgY29udGFpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEhMQ0RDIGludGVycnVwdCBsaW5lCisKK1RoZSBITENEQyBJUCBleHBvc2VzIHR3byBzdWJkZXZpY2VzOgorIC0gYSBQV00gY2hpcDogc2VlIC4uL3B3bS9hdG1lbC1obGNkYy1wd20udHh0CisgLSBhIERpc3BsYXkgQ29udHJvbGxlcjogc2VlIC4uL2RybS9hdG1lbC1obGNkYy1kYy50eHQKKworRXhhbXBsZToKKworCWhsY2RjOiBobGNkY0BmMDAzMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkMy1obGNkYyI7CisJCXJlZyA9IDwweGYwMDMwMDAwIDB4MjAwMD47CisJCWNsb2NrcyA9IDwmbGNkY19jbGs+LCA8JmxjZGNrPiwgPCZjbGszMms+OworCQljbG9jay1uYW1lcyA9ICJwZXJpcGhfY2xrIiwic3lzX2NsayIsICJzbG93X2NsayI7CisJCWludGVycnVwdHMgPSA8MzYgSVJRX1RZUEVfTEVWRUxfSElHSCAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQlobGNkYy1kaXNwbGF5LWNvbnRyb2xsZXIgeworCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxobGNkYy1kaXNwbGF5LWNvbnRyb2xsZXIiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9sY2RfYmFzZSAmcGluY3RybF9sY2RfcmdiODg4PjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJcmVnID0gPDA+OworCisJCQkJaGxjZGNfcGFuZWxfb3V0cHV0OiBlbmRwb2ludEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnBhbmVsX2lucHV0PjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlobGNkY19wd206IGhsY2RjLXB3bSB7CisJCQljb21wYXRpYmxlID0gImF0bWVsLGhsY2RjLXB3bSI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2xjZF9wd20+OworCQkJI3B3bS1jZWxscyA9IDwzPjsKKwkJfTsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9tYXg3NzY4Ni50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3Njg2LnR4dAppbmRleCA2NzhmM2NmLi43NWZkZmFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3Njg2LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3Njg2LnR4dApAQCAtMzQsNiArMzQsMTIgQEAKIAktQlVDS24gCToJZm9yIEJVQ0tzLCB3aGVyZSBuIGNhbiBsaWUgaW4gcmFuZ2UgMSB0byA5LgogCQkJZXhhbXBsZTogQlVDSzEsIEJVQ0s1LCBCVUNLOS4KIAorICBSZWd1bGF0b3JzIHdoaWNoIGNhbiBiZSB0dXJuZWQgb2ZmIGR1cmluZyBzeXN0ZW0gc3VzcGVuZDoKKwktTERPbgk6CTIsIDYtOCwgMTAtMTIsIDE0LTE2LAorCS1CVUNLbgk6CTEtNC4KKyAgVXNlIHN0YW5kYXJkIHJlZ3VsYXRvciBiaW5kaW5ncyBmb3IgaXQgKCdyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQnKS4KKworCiBFeGFtcGxlOgogCiAJbWF4Nzc2ODZAMDkgewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9tYXg3NzY5My50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3NjkzLnR4dAppbmRleCAxMTkyMWNjLi4wMWU5ZjMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3NjkzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3NjkzLnR4dApAQCAtMjcsNiArMjcsMjAgQEAKIAogCVsqXSByZWZlciBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKIAorLSBoYXB0aWMgOiBUaGUgTUFYNzc2OTMgaGFwdGljIGRldmljZSB1dGlsaXNlcyBhIFBXTSBjb250cm9sbGVkIG1vdG9yIHRvIHByb3ZpZGUKKyAgdXNlcnMgd2l0aCB0YWN0aWxlIGZlZWRiYWNrLiBQV00gcGVyaW9kIGFuZCBkdXR5LWN5Y2xlIGFyZSB2YXJpZWQgaW4KKyAgb3JkZXIgdG8gcHJvdmlkZSB0aGUgYXBwcm9wcml0ZSBsZXZlbCBvZiBmZWVkYmFjay4KKworIFJlcXVpcmVkIHByb3BlcnRpZXM6CisJLSBjb21wYXRpYmxlIDogTXVzdCBiZSAibWF4aW0sbWF4Nzc2OTMtaHBhdGljIgorCS0gaGFwdGljLXN1cHBseSA6IHBvd2VyIHN1cHBseSBmb3IgdGhlIGhhcHRpYyBtb3RvcgorCVsqXSByZWZlciBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKKwktIHB3bXMgOiBwaGFuZGxlIHRvIHRoZSBwaHlzaWNhbCBQV00oUHVsc2UgV2lkdGggTW9kdWxhdGlvbikgZGV2aWNlLgorCSBQV00gcHJvcGVydGllcyBzaG91bGQgYmUgbmFtZWQgInB3bXMiLiBBbmQgbnVtYmVyIG9mIGNlbGwgaXMgZGlmZmVyZW50CisJIGZvciBlYWNoIHB3bSBkZXZpY2UuCisJIFRvIGdldCBtb3JlIGluZm9ybWF0aW9ucywgcGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YWlvbi4KKwlbKl0gcmVmZXIgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3B3bS9wd20udHh0CisKIEV4YW1wbGU6CiAJbWF4Nzc2OTNANjYgewogCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3NjkzIjsKQEAgLTUyLDQgKzY2LDExIEBACiAJCQkJCXJlZ3VsYXRvci1ib290LW9uOwogCQkJfTsKIAkJfTsKKworCQloYXB0aWMgeworCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY5My1oYXB0aWMiOworCQkJaGFwdGljLXN1cHBseSA9IDwmaGFwdGljX3N1cHBseT47CisJCQlwd21zID0gPCZwd20gMCA0MDAwMCAwPjsKKwkJCXB3bS1uYW1lcyA9ICJoYXB0aWMiOworCQl9OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3MybXBzMTEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9zMm1wczExLnR4dAppbmRleCAwZTQwMjZhLi41N2EwNDUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3MybXBzMTEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvczJtcHMxMS50eHQKQEAgLTEsNSArMSw1IEBACiAKLSogU2Ftc3VuZyBTMk1QUzExLCBTMk1QUzE0IGFuZCBTMk1QVTAyIFZvbHRhZ2UgYW5kIEN1cnJlbnQgUmVndWxhdG9yCisqIFNhbXN1bmcgUzJNUFMxMSwgUzJNUFMxMywgUzJNUFMxNCBhbmQgUzJNUFUwMiBWb2x0YWdlIGFuZCBDdXJyZW50IFJlZ3VsYXRvcgogCiBUaGUgU2Ftc3VuZyBTMk1QUzExIGlzIGEgbXVsdGktZnVuY3Rpb24gZGV2aWNlIHdoaWNoIGluY2x1ZGVzIHZvbHRhZ2UgYW5kCiBjdXJyZW50IHJlZ3VsYXRvcnMsIFJUQywgY2hhcmdlciBjb250cm9sbGVyIGFuZCBvdGhlciBzdWItYmxvY2tzLiBJdCBpcwpAQCAtNyw4ICs3LDggQEAKIGFkZHJlc3NlZCBieSB0aGUgaG9zdCBzeXN0ZW0gdXNpbmcgZGlmZmVyZW50IEkyQyBzbGF2ZSBhZGRyZXNzZXMuCiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6Ci0tIGNvbXBhdGlibGU6IFNob3VsZCBiZSAic2Ftc3VuZyxzMm1wczExLXBtaWMiIG9yICJzYW1zdW5nLHMybXBzMTQtcG1pYyIKLSAgICAgICAgICAgICAgb3IgInNhbXN1bmcsczJtcHUwMi1wbWljIi4KKy0gY29tcGF0aWJsZTogU2hvdWxkIGJlICJzYW1zdW5nLHMybXBzMTEtcG1pYyIgb3IgInNhbXN1bmcsczJtcHMxMy1wbWljIgorCSAgICAgIG9yICJzYW1zdW5nLHMybXBzMTQtcG1pYyIgb3IgInNhbXN1bmcsczJtcHUwMi1wbWljIi4KIC0gcmVnOiBTcGVjaWZpZXMgdGhlIEkyQyBzbGF2ZSBhZGRyZXNzIG9mIHRoZSBwbWljIGJsb2NrLiBJdCBzaG91bGQgYmUgMHg2Ni4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKQEAgLTE3LDggKzE3LDggQEAKIC0gaW50ZXJydXB0czogSW50ZXJydXB0IHNwZWNpZmllcnMgZm9yIGludGVycnVwdCBzb3VyY2VzLgogCiBPcHRpb25hbCBub2RlczoKLS0gY2xvY2tzOiBzMm1wczExIGFuZCBzNW04NzY3IHByb3ZpZGUgdGhyZWUoQVAvQ1AvQlQpIGJ1ZmZlcmVkIDMyLjc2OCBLSHoKLSAgb3V0cHV0cywgc28gdG8gcmVnaXN0ZXIgdGhlc2UgYXMgY2xvY2tzIHdpdGggY29tbW9uIGNsb2NrIGZyYW1ld29yaworLSBjbG9ja3M6IHMybXBzMTEsIHMybXBzMTMgYW5kIHM1bTg3NjcgcHJvdmlkZSB0aHJlZShBUC9DUC9CVCkgYnVmZmVyZWQgMzIuNzY4CisgIEtIeiBvdXRwdXRzLCBzbyB0byByZWdpc3RlciB0aGVzZSBhcyBjbG9ja3Mgd2l0aCBjb21tb24gY2xvY2sgZnJhbWV3b3JrCiAgIGluc3RhbnRpYXRlIGEgc3ViLW5vZGUgbmFtZWQgImNsb2NrcyIuIEl0IHVzZXMgdGhlIGNvbW1vbiBjbG9jayBiaW5kaW5nCiAgIGRvY3VtZW50ZWQgaW4gOgogICBbRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2Nsb2NrLWJpbmRpbmdzLnR4dF0KQEAgLTMwLDEyICszMCwxMiBAQAogICAgIHRoZSBjbG9jayB3aGljaCB0aGV5IGNvbnN1bWUuCiAgICAgQ2xvY2sgICAgICAgICAgICAgICBJRCAgICAgICAgICAgRGV2aWNlcwogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAzMktoekFQCQkwICAgICAgICAgICAgUzJNUFMxMSwgUzJNUFMxNCwgUzVNODc2NwotICAgIDMyS2h6Q1AJCTEgICAgICAgICAgICBTMk1QUzExLCBTNU04NzY3Ci0gICAgMzJLaHpCVAkJMiAgICAgICAgICAgIFMyTVBTMTEsIFMyTVBTMTQsIFM1TTg3NjcKKyAgICAzMktoekFQCQkwICAgICAgICAgICAgUzJNUFMxMSwgUzJNUFMxMywgUzJNUFMxNCwgUzVNODc2NworICAgIDMyS2h6Q1AJCTEgICAgICAgICAgICBTMk1QUzExLCBTMk1QUzEzLCBTNU04NzY3CisgICAgMzJLaHpCVAkJMiAgICAgICAgICAgIFMyTVBTMTEsIFMyTVBTMTMsIFMyTVBTMTQsIFM1TTg3NjcKIAotICAtIGNvbXBhdGlibGU6IFNob3VsZCBiZSBvbmUgb2Y6ICJzYW1zdW5nLHMybXBzMTEtY2xrIiwgInNhbXN1bmcsczJtcHMxNC1jbGsiLAotCQkic2Ftc3VuZyxzNW04NzY3LWNsayIKKyAgLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mOiAic2Ftc3VuZyxzMm1wczExLWNsayIsICJzYW1zdW5nLHMybXBzMTMtY2xrIiwKKwkJInNhbXN1bmcsczJtcHMxNC1jbGsiLCAic2Ftc3VuZyxzNW04NzY3LWNsayIKIAogLSByZWd1bGF0b3JzOiBUaGUgcmVndWxhdG9ycyBvZiBzMm1wczExIHRoYXQgaGF2ZSB0byBiZSBpbnN0YW50aWF0ZWQgc2hvdWxkIGJlCiBpbmNsdWRlZCBpbiBhIHN1Yi1ub2RlIG5hbWVkICdyZWd1bGF0b3JzJy4gUmVndWxhdG9yIG5vZGVzIGluY2x1ZGVkIGluIHRoaXMKQEAgLTgxLDEyICs4MSwxNCBAQAogCS0gTERPbgogCQkgIC0gdmFsaWQgdmFsdWVzIGZvciBuIGFyZToKIAkJCS0gUzJNUFMxMTogMSB0byAzOAorCQkJLSBTMk1QUzEzOiAxIHRvIDQwCiAJCQktIFMyTVBTMTQ6IDEgdG8gMjUKIAkJCS0gUzJNUFUwMjogMSB0byAyOAogCQkgIC0gRXhhbXBsZTogTERPMSwgTERPMiwgTERPMjgKIAktIEJVQ0tuCiAJCSAgLSB2YWxpZCB2YWx1ZXMgZm9yIG4gYXJlOgogCQkJLSBTMk1QUzExOiAxIHRvIDEwCisJCQktIFMyTVBTMTM6IDEgdG8gMTAKIAkJCS0gUzJNUFMxNDogMSB0byA1CiAJCQktIFMyTVBVMDI6IDEgdG8gNwogCQkgIC0gRXhhbXBsZTogQlVDSzEsIEJVQ0syLCBCVUNLOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9leHlub3MtZHctbXNoYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2V4eW5vcy1kdy1tc2hjLnR4dAppbmRleCA2Y2QzNTI1Li5lZTRmYzA1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2V4eW5vcy1kdy1tc2hjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2V4eW5vcy1kdy1tc2hjLnR4dApAQCAtMTgsNiArMTgsMTAgQEAKIAkgIHNwZWNpZmljIGV4dGVuc2lvbnMuCiAJLSAic2Ftc3VuZyxleHlub3M1NDIwLWR3LW1zaGMiOiBmb3IgY29udHJvbGxlcnMgd2l0aCBTYW1zdW5nIEV4eW5vczU0MjAKIAkgIHNwZWNpZmljIGV4dGVuc2lvbnMuCisJLSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMiOiBmb3IgY29udHJvbGxlcnMgd2l0aCBTYW1zdW5nIEV4eW5vczcKKwkgIHNwZWNpZmljIGV4dGVuc2lvbnMuCisJLSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMtc211IjogZm9yIGNvbnRyb2xsZXJzIHdpdGggU2Ftc3VuZyBFeHlub3M3CisJICBzcGVjaWZpYyBleHRlbnNpb25zIGhhdmluZyBhbiBTTVUuCiAKICogc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXY6IFNwZWNpZmllcyB0aGUgZGl2aWRlciB2YWx1ZSBmb3IgdGhlIGNhcmQgaW50ZXJmYWNlCiAgIHVuaXQgKGNpdSkgY2xvY2suIFRoaXMgcHJvcGVydHkgaXMgYXBwbGljYWJsZSBvbmx5IGZvciBFeHlub3M1IFNvQydzIGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9pbWctZHctbXNoYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2ltZy1kdy1tc2hjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWRlOTlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9pbWctZHctbXNoYy50eHQKQEAgLTAsMCArMSwyOSBAQAorKiBJbWFnaW5hdGlvbiBzcGVjaWZpYyBleHRlbnNpb25zIHRvIHRoZSBTeW5vcHN5cyBEZXNpZ253YXJlIE1vYmlsZSBTdG9yYWdlCisgIEhvc3QgQ29udHJvbGxlcgorCitUaGUgU3lub3BzeXMgZGVzaWdud2FyZSBtb2JpbGUgc3RvcmFnZSBob3N0IGNvbnRyb2xsZXIgaXMgdXNlZCB0byBpbnRlcmZhY2UKK2EgU29DIHdpdGggc3RvcmFnZSBtZWRpdW0gc3VjaCBhcyBlTU1DIG9yIFNEL01NQyBjYXJkcy4gVGhpcyBmaWxlIGRvY3VtZW50cworZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgY29yZSBTeW5vcHN5cyBkdyBtc2hjIGNvbnRyb2xsZXIgcHJvcGVydGllcyBkZXNjcmliZWQKK2J5IHN5bm9wc3lzLWR3LW1zaGMudHh0IGFuZCB0aGUgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBJbWFnaW5hdGlvbiBzcGVjaWZpYworZXh0ZW5zaW9ucyB0byB0aGUgU3lub3BzeXMgRGVzaWdud2FyZSBNb2JpbGUgU3RvcmFnZSBIb3N0IENvbnRyb2xsZXIuCisKK1JlcXVpcmVkIFByb3BlcnRpZXM6CisKKyogY29tcGF0aWJsZTogc2hvdWxkIGJlCisJLSAiaW1nLHBpc3RhY2hpby1kdy1tc2hjIjogZm9yIFBpc3RhY2hpbyBTb0NzCisKK0V4YW1wbGU6CisKKwltbWNAMTgxNDIwMDAgeworCQljb21wYXRpYmxlID0gImltZyxwaXN0YWNoaW8tZHctbXNoYyI7CisJCXJlZyA9IDwweDE4MTQyMDAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU0hBUkVEIDM5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sIDwmc2Rob3N0X2Nsaz47CisJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOworCisJCWZpZm8tZGVwdGggPSA8MHgyMD47CisJCWJ1cy13aWR0aCA9IDw0PjsKKwkJbnVtLXNsb3RzID0gPDE+OworCQlkaXNhYmxlLXdwOworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL3NkaGNpLXB4YS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL3NkaGNpLXB4YS50eHQKaW5kZXggODYyMjNjMy4uNGRkNmRlYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9zZGhjaS1weGEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvc2RoY2ktcHhhLnR4dApAQCAtMTIsNiArMTIsMTAgQEAKICAgKiBmb3IgIm1hcnZlbGwsYXJtYWRhLTM4MC1zZGhjaSIsIHR3byByZWdpc3RlciBhcmVhcy4gVGhlIGZpcnN0IG9uZQogICAgIGZvciB0aGUgU0RIQ0kgcmVnaXN0ZXJzIHRoZW1zZWx2ZXMsIGFuZCB0aGUgc2Vjb25kIG9uZSBmb3IgdGhlCiAgICAgQVhJL01idXMgYnJpZGdlIHJlZ2lzdGVycyBvZiB0aGUgU0RIQ0kgdW5pdC4KKy0gY2xvY2tzOiBBcnJheSBvZiBjbG9ja3MgcmVxdWlyZWQgZm9yIFNESENJOyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZm9yCisgICAgSS9PIGNsb2NrLgorLSBjbG9jay1uYW1lczogQXJyYXkgb2YgbmFtZXMgY29ycmVzcG9uZGluZyB0byBjbG9ja3MgcHJvcGVydHk7IHNoYWxsIGJlCisgICAgImlvIiBmb3IgSS9PIGNsb2NrIGFuZCAiY29yZSIgZm9yIG9wdGlvbmFsIGNvcmUgY2xvY2suCiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIG1ydmwsY2xrLWRlbGF5LWN5Y2xlczogU3BlY2lmeSBhIG51bWJlciBvZiBjeWNsZXMgdG8gZGVsYXkgZm9yIHR1bmluZy4KQEAgLTIzLDYgKzI3LDggQEAKIAlyZWcgPSA8MHhkNDI4MDgwMCAweDgwMD47CiAJYnVzLXdpZHRoID0gPDg+OwogCWludGVycnVwdHMgPSA8Mjc+OworCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9TRElPMVhJTj4sIDwmY2hpcCBDTEtJRF9TRElPMT47CisJY2xvY2stbmFtZXMgPSAiaW8iLCAiY29yZSI7CiAJbm9uLXJlbW92YWJsZTsKIAltcnZsLGNsay1kZWxheS1jeWNsZXMgPSA8MzE+OwogfTsKQEAgLTMyLDUgKzM4LDYgQEAKIAlyZWcgPSA8MHhkODAwMCAweDEwMDA+LCA8MHhkYzAwMCAweDEwMD47CiAJaW50ZXJydXB0cyA9IDwwIDI1IDB4ND47CiAJY2xvY2tzID0gPCZnYXRlY2xrIDE3PjsKKwljbG9jay1uYW1lcyA9ICJpbyI7CiAJbXJ2bCxjbGstZGVsYXktY3ljbGVzID0gPDB4MUY+OwogfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uaW9zMi9uaW9zMi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmlvczIvbmlvczIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZDBhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmlvczIvbmlvczIudHh0CkBAIC0wLDAgKzEsNjIgQEAKKyogTmlvcyBJSSBQcm9jZXNzb3IgQmluZGluZworCitUaGlzIGJpbmRpbmcgc3BlY2lmaWVzIHdoYXQgcHJvcGVydGllcyBhdmFpbGFibGUgaW4gdGhlIGRldmljZSB0cmVlCityZXByZXNlbnRhdGlvbiBvZiBhIE5pb3MgSUkgUHJvY2Vzc29yIENvcmUuCisKK1VzZXJzIGNhbiB1c2Ugc29wYzJkdHMgdG9vbCBmb3IgZ2VuZXJhdGluZyBkZXZpY2UgdHJlZSBzb3VyY2VzIChkdHMpIGZyb20gYQorUXN5cyBzeXN0ZW0uIFNlZSBtb3JlIGRldGFpbCBpbjogaHR0cDovL3d3dy5hbHRlcmF3aWtpLmNvbS93aWtpL1NvcGMyZHRzCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisKKy0gY29tcGF0aWJsZTogQ29tcGF0aWJsZSBwcm9wZXJ0eSB2YWx1ZSBzaG91bGQgYmUgImFsdHIsbmlvczItMS4wIi4KKy0gcmVnOiBDb250YWlucyBDUFUgaW5kZXguCistIGludGVycnVwdC1jb250cm9sbGVyOiBTcGVjaWZpZXMgdGhhdCB0aGUgbm9kZSBpcyBhbiBpbnRlcnJ1cHQgY29udHJvbGxlcgorLSAjaW50ZXJydXB0LWNlbGxzOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjZWxscyBuZWVkZWQgdG8gZW5jb2RlIGFuCisJCWludGVycnVwdCBzb3VyY2UsIHNob3VsZCBiZSAxLgorLSBjbG9jay1mcmVxdWVuY3k6IENvbnRhaW5zIHRoZSBjbG9jayBmcmVxdWVuY3kgZm9yIENQVSwgaW4gSHouCistIGRjYWNoZS1saW5lLXNpemU6IENvbnRhaW5zIGRhdGEgY2FjaGUgbGluZSBzaXplLgorLSBpY2FjaGUtbGluZS1zaXplOiBDb250YWlucyBpbnN0cnVjdGlvbiBsaW5lIHNpemUuCistIGRjYWNoZS1zaXplOiBDb250YWlucyBkYXRhIGNhY2hlIHNpemUuCistIGljYWNoZS1zaXplOiBDb250YWlucyBpbnN0cnVjdGlvbiBjYWNoZSBzaXplLgorLSBhbHRyLHBpZC1udW0tYml0czogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYml0cyB0byB1c2UgdG8gcmVwcmVzZW50IHRoZSBwcm9jZXNzCisJCWlkZW50aWZpZXIgKFBJRCkuCistIGFsdHIsdGxiLW51bS13YXlzOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzZXQtYXNzb2NpYXRpdml0eSB3YXlzIGluIHRoZSBUTEIuCistIGFsdHIsdGxiLW51bS1lbnRyaWVzOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBUTEIuCistIGFsdHIsdGxiLXB0ci1zejogU3BlY2lmaWVzIHNpemUgb2YgVExCIHBvaW50ZXIuCistIGFsdHIsaGFzLW11bDogU3BlY2lmaWVzIENQVSBoYXJkd2FyZSBtdWx0aXB5IHN1cHBvcnQsIHNob3VsZCBiZSAxLgorLSBhbHRyLGhhcy1tbXU6IFNwZWNpZmllcyBDUFUgc3VwcG9ydCBNTVUgc3VwcG9ydCwgc2hvdWxkIGJlIDEuCistIGFsdHIsaGFzLWluaXRkYTogU3BlY2lmaWVzIENQVSBzdXBwb3J0IGluaXRkYSBpbnN0cnVjdGlvbiwgc2hvdWxkIGJlIDEuCistIGFsdHIscmVzZXQtYWRkcjogU3BlY2lmaWVzIENQVSByZXNldCBhZGRyZXNzCistIGFsdHIsZmFzdC10bGItbWlzcy1hZGRyOiBTcGVjaWZpZXMgQ1BVIGZhc3QgVExCIG1pc3MgZXhjZXB0aW9uIGFkZHJlc3MKKy0gYWx0cixleGNlcHRpb24tYWRkcjogU3BlY2lmaWVzIENQVSBleGNlcHRpb24gYWRkcmVzcworCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBhbHRyLGhhcy1kaXY6IFNwZWNpZmllcyBDUFUgaGFyZHdhcmUgZGl2aWRlIHN1cHBvcnQKKy0gYWx0cixpbXBsZW1lbnRhdGlvbjogTmlvcyBJSSBjb3JlIGltcGxlbWVudGF0aW9uLCB0aGlzIHNob3VsZCBiZSAiZmFzdCI7CisKK0V4YW1wbGU6CisKK2NwdUAweDAgeworCWRldmljZV90eXBlID0gImNwdSI7CisJY29tcGF0aWJsZSA9ICJhbHRyLG5pb3MyLTEuMCI7CisJcmVnID0gPDA+OworCWludGVycnVwdC1jb250cm9sbGVyOworCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJY2xvY2stZnJlcXVlbmN5ID0gPDEyNTAwMDAwMD47CisJZGNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJaWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJZGNhY2hlLXNpemUgPSA8MzI3Njg+OworCWljYWNoZS1zaXplID0gPDMyNzY4PjsKKwlhbHRyLGltcGxlbWVudGF0aW9uID0gImZhc3QiOworCWFsdHIscGlkLW51bS1iaXRzID0gPDg+OworCWFsdHIsdGxiLW51bS13YXlzID0gPDE2PjsKKwlhbHRyLHRsYi1udW0tZW50cmllcyA9IDwxMjg+OworCWFsdHIsdGxiLXB0ci1zeiA9IDw3PjsKKwlhbHRyLGhhcy1kaXYgPSA8MT47CisJYWx0cixoYXMtbXVsID0gPDE+OworCWFsdHIscmVzZXQtYWRkciA9IDwweGMyODAwMDAwPjsKKwlhbHRyLGZhc3QtdGxiLW1pc3MtYWRkciA9IDwweGM3ZmZmNDAwPjsKKwlhbHRyLGV4Y2VwdGlvbi1hZGRyID0gPDB4ZDAwMDAwMjA+OworCWFsdHIsaGFzLWluaXRkYSA9IDwxPjsKKwlhbHRyLGhhcy1tbXUgPSA8MT47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25pb3MyL3RpbWVyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uaW9zMi90aW1lci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0YTU4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uaW9zMi90aW1lci50eHQKQEAgLTAsMCArMSwxOSBAQAorQWx0ZXJhIFRpbWVyCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisKKy0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAiYWx0cix0aW1lci0xLjAiCistIHJlZyA6IFNwZWNpZmllcyBiYXNlIHBoeXNpY2FsIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIHJlZ2lzdGVycy4KKy0gaW50ZXJydXB0LXBhcmVudDogcGhhbmRsZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKy0gaW50ZXJydXB0cyA6IFNob3VsZCBjb250YWluIHRoZSB0aW1lciBpbnRlcnJ1cHQgbnVtYmVyCistIGNsb2NrLWZyZXF1ZW5jeSA6IFRoZSBmcmVxdWVuY3kgb2YgdGhlIGNsb2NrIHRoYXQgZHJpdmVzIHRoZSBjb3VudGVyLCBpbiBIei4KKworRXhhbXBsZToKKwordGltZXIgeworCWNvbXBhdGlibGUgPSAiYWx0cix0aW1lci0xLjAiOworCXJlZyA9IDwweDAwNDAwMDAwIDB4MDAwMDAwMjA+OworCWludGVycnVwdC1wYXJlbnQgPSA8JmNwdT47CisJaW50ZXJydXB0cyA9IDwxMT47CisJY2xvY2stZnJlcXVlbmN5ID0gPDEyNTAwMDAwMD47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL3Bvd2VyLWNvbnRyb2xsZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL3Bvd2VyLWNvbnRyb2xsZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmN2EzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXIvcG93ZXItY29udHJvbGxlci50eHQKQEAgLTAsMCArMSwxOCBAQAorKiBHZW5lcmljIHN5c3RlbSBwb3dlciBjb250cm9sIGNhcGFiaWxpdHkKKworUG93ZXItbWFuYWdlbWVudCBpbnRlZ3JhdGVkIGNpcmN1aXRzIG9yIG1pc2NlbGxhbmVvdXMgaGFyZHdhcmUgY29tcG9uZW50cyBhcmUKK3NvbWV0aW1lcyBhYmxlIHRvIGNvbnRyb2wgdGhlIHN5c3RlbSBwb3dlci4gVGhlIGRldmljZSBkcml2ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZXNlCitjb21wb25lbnRzIG1pZ2h0IG5lZWQgdG8gZGVmaW5lIHRoaXMgY2FwYWJpbGl0eSwgd2hpY2ggdGVsbHMgdGhlIGtlcm5lbCB0aGF0CitpdCBjYW4gYmUgdXNlZCB0byBzd2l0Y2ggb2ZmIHRoZSBzeXN0ZW0uIFRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBtdXN0IGhhdmUgdGhlCitzdGFuZGFyZCBwcm9wZXJ0eSAic3lzdGVtLXBvd2VyLWNvbnRyb2xsZXIiIGluIGl0cyBkZXZpY2Ugbm9kZS4gVGhpcyBwcm9wZXJ0eQorbWFya3MgdGhlIGRldmljZSBhcyBhYmxlIHRvIGNvbnRyb2wgdGhlIHN5c3RlbSBwb3dlci4gSW4gb3JkZXIgdG8gdGVzdCBpZiB0aGlzCitwcm9wZXJ0eSBpcyBmb3VuZCBwcm9ncmFtbWF0aWNhbGx5LCB1c2UgdGhlIGhlbHBlciBmdW5jdGlvbgorIm9mX2RldmljZV9pc19zeXN0ZW1fcG93ZXJfY29udHJvbGxlciIgZnJvbSBvZi5oIC4KKworRXhhbXBsZToKKworYWN0ODg0NjogYWN0ODg0NkA1IHsKKwkgY29tcGF0aWJsZSA9ICJhY3RpdmUtc2VtaSxhY3Q4ODQ2IjsKKwkgc3RhdHVzID0gIm9rYXkiOworCSBzeXN0ZW0tcG93ZXItY29udHJvbGxlcjsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcl9zdXBwbHkvaW14LXNudnMtcG93ZXJvZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyX3N1cHBseS9pbXgtc252cy1wb3dlcm9mZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3YzliYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcl9zdXBwbHkvaW14LXNudnMtcG93ZXJvZmYudHh0CkBAIC0wLDAgKzEsMjMgQEAKK2kubXg2IFBvd2Vyb2ZmIERyaXZlcgorCitTTlZTX0xQQ1IgaW4gU05WUyBtb2R1bGUgY2FuIHBvd2VyIG9mZiB0aGUgd2hvbGUgc3lzdGVtIGJ5IHB1bGwKK1BNSUNfT05fUkVRIGxvdyBpZiBQTUlDX09OX1JFUSBpcyBjb25uZWN0ZWQgd2l0aCBleHRlcm5hbCBQTUlDLgorSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIFBNSUNfT05fUkVRIGFzIHBvd2VyIG9uL29mZiBjb250cm9sLAorcGxlYXNlIHNldCBzdGF0dXM9J2Rpc2FibGVkJyB0byBkaXNhYmxlIHRoaXMgZHJpdmVyLgorCitSZXF1aXJlZCBQcm9wZXJ0aWVzOgorLWNvbXBhdGlibGU6ICJmc2wsc2VjLXY0LjAtcG93ZXJvZmYiCistcmVnOiBTcGVjaWZpZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIFNOVlNfTFBDUiByZWdpc3RlcgorCitFeGFtcGxlOgorCXNudnNAMDIwY2MwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1tb24iLCAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMHgwMjBjYzAwMCAweDQwMDA+OworCQkuLi4uLgorCQlzbnZzX3Bvd2Vyb2ZmOiBzbnZzLXBvd2Vyb2ZmQDM4IHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXBvd2Vyb2ZmIjsKKwkJCXJlZyA9IDwweDM4IDB4ND47CisJCX07CisJfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9hY3Q4ODY1LXJlZ3VsYXRvci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL2FjdDg4NjUtcmVndWxhdG9yLnR4dAppbmRleCA4NjU2MTRiLi5kYWQ2MzU4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL2FjdDg4NjUtcmVndWxhdG9yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL2FjdDg4NjUtcmVndWxhdG9yLnR4dApAQCAtNSw2ICs1LDEwIEBACiAtIGNvbXBhdGlibGU6ICJhY3RpdmUtc2VtaSxhY3Q4ODQ2IiBvciAiYWN0aXZlLXNlbWksYWN0ODg2NSIKIC0gcmVnOiBJMkMgc2xhdmUgYWRkcmVzcwogCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBzeXN0ZW0tcG93ZXItY29udHJvbGxlcjogVGVsbGluZyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBtaWMgaXMgY29udHJvbGxpbmcKKyAgdGhlIHN5c3RlbSBwb3dlci4gU2VlIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlci9wb3dlci1jb250cm9sbGVyLnR4dCAuCisKIEFueSBzdGFuZGFyZCByZWd1bGF0b3IgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHNpbmdsZSByZWd1bGF0b3IuCiAKIFRoZSB2YWxpZCBuYW1lcyBmb3IgcmVndWxhdG9ycyBhcmU6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL21heDc3ODAyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvbWF4Nzc4MDIudHh0CmluZGV4IDVhZWFmZmMuLjc5ZTU0NzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvbWF4Nzc4MDIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvbWF4Nzc4MDIudHh0CkBAIC0yNSw2ICsyNSwyOSBAQAogCQkJZXhhbXBsZTogTERPMSwgTERPMiwgTERPMzUuCiAJLUJVQ0tuIAk6CWZvciBCVUNLcywgd2hlcmUgbiBjYW4gbGllIGluIHJhbmdlIDEgdG8gMTAuCiAJCQlleGFtcGxlOiBCVUNLMSwgQlVDSzUsIEJVQ0sxMC4KKworVGhlIG1heDc3ODAyIHJlZ3VsYXRvciBzdXBwb3J0cyB0d28gZGlmZmVyZW50IG9wZXJhdGluZyBtb2RlczogTm9ybWFsIGFuZCBMb3cKK1Bvd2VyIE1vZGUuIFNvbWUgcmVndWxhdG9ycyBzdXBwb3J0IHRoZSBtb2RlcyB0byBiZSBjaGFuZ2VkIGF0IHN0YXJ0dXAgb3IgYnkKK3RoZSBjb25zdW1lcnMgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gd2hpbGUgb3RoZXJzIG9ubHkgc3VwcG9ydCB0byBjaGFuZ2UgdGhlCittb2RlIGR1cmluZyBzeXN0ZW0gc3VzcGVuZC4gVGhlIHN0YW5kYXJkIHJlZ3VsYXRvciBzdXNwZW5kIHN0YXRlcyBiaW5kaW5nIGNhbgorYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHJlZ3VsYXRvciBvcGVyYXRpbmcgbW9kZS4KKworVGhlIHJlZ3VsYXRvcnMgdGhhdCBzdXBwb3J0IHRoZSBzdGFuZGFyZCAicmVndWxhdG9yLWluaXRpYWwtbW9kZSIgcHJvcGVydHksCitjaGFuZ2luZyB0aGVpciBtb2RlIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uIGFyZTogTERPcyAxLCAzLCAyMCBhbmQgMjEuCisKK1RoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yICJyZWd1bGF0b3ItaW5pdGlhbC1tb2RlIiBhbmQgInJlZ3VsYXRvci1tb2RlIiBhcmU6CisJMTogTm9ybWFsIHJlZ3VsYXRvciB2b2x0YWdlIG91dHB1dCBtb2RlLgorCTM6IExvdyBQb3dlciB3aGljaCByZWR1Y2VzIHRoZSBxdWllc2NlbnQgY3VycmVudCBkb3duIHRvIG9ubHkgMXVBCisKK1RoZSBsaXN0IG9mIHZhbGlkIG1vZGVzIGFyZSBkZWZpbmVkIGluIHRoZSBkdC1iaW5kaW5ncy9jbG9jay9tYXhpbSxtYXg3NzgwMi5oCitoZWFkZXIgYW5kIGNhbiBiZSBpbmNsdWRlZCBieSBkZXZpY2UgdHJlZSBzb3VyY2UgZmlsZXMuCisKK1RoZSBzdGFuZGFyZCAicmVndWxhdG9yLW1vZGUiIHByb3BlcnR5IGNhbiBvbmx5IGJlIHVzZWQgZm9yIHJlZ3VsYXRvcnMgdGhhdAorc3VwcG9ydCBjaGFuZ2luZyB0aGVpciBtb2RlIHRvIExvdyBQb3dlciBNb2RlIGR1cmluZyBzdXNwZW5kLiBUaGVzZSByZWd1bGF0b3JzCithcmU6IEJVQ0tzIDItNCBhbmQgTERPcyAxLTM1LiBBbHNvLCBpdCBvbmx5IHRha2VzIGVmZmVjdCBpZiB0aGUgcmVndWxhdG9yIGhhcworYmVlbiBlbmFibGVkIGZvciB0aGUgZ2l2ZW4gc3VzcGVuZCBzdGF0ZSB1c2luZyAicmVndWxhdG9yLW9uLWluLXN1c3BlbmQiIGFuZAoraGFzIG5vdCBiZWVuIGRpc2FibGVkIGZvciB0aGF0IHN0YXRlIHVzaW5nICJyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQiLgorCiBFeGFtcGxlOgogCiAJbWF4Nzc4MDJAMDkgewpAQCAtMzYsMTEgKzU5LDIzIEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCiAJCXJlZ3VsYXRvcnMgeworCQkJbGRvMV9yZWc6IExETzEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF8xdjAiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWluaXRpYWwtbW9kZSA9IDxNQVg3NzgwMl9PUE1PREVfTFA+OworCQkJfTsKKwogCQkJbGRvMTFfcmVnOiBMRE8xMSB7CiAJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2xkbzExIjsKIAkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxOTAwMDAwPjsKIAkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxOTAwMDAwPjsKIAkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb24taW4tc3VzcGVuZDsKKwkJCQkJcmVndWxhdG9yLW1vZGUgPSA8TUFYNzc4MDJfT1BNT0RFX0xQPjsKKwkJCQl9OwogCQkJfTsKIAogCQkJYnVjazFfcmVnOiBCVUNLMSB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKaW5kZXggODYwNzQzMy4uYWJiMjZiNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dApAQCAtMTksNiArMTksMjQgQEAKICAgZGVzaWduIHJlcXVpcmVzLiBUaGlzIHByb3BlcnR5IGRlc2NyaWJlcyB0aGUgdG90YWwgc3lzdGVtIHJhbXAgdGltZQogICByZXF1aXJlZCBkdWUgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIGludGVybmFsIHJhbXBpbmcgb2YgdGhlIHJlZ3VsYXRvciBpdHNlbGYsCiAgIGFuZCBib2FyZCBkZXNpZ24gaXNzdWVzIHN1Y2ggYXMgdHJhY2UgY2FwYWNpdGFuY2UgYW5kIGxvYWQgb24gdGhlIHN1cHBseS4KKy0gcmVndWxhdG9yLXN0YXRlLW1lbSBzdWItcm9vdCBub2RlIGZvciBTdXNwZW5kLXRvLVJBTSBtb2RlCisgIDogc3VzcGVuZCB0byBtZW1vcnksIHRoZSBkZXZpY2UgZ29lcyB0byBzbGVlcCwgYnV0IGFsbCBkYXRhIHN0b3JlZCBpbiBtZW1vcnksCisgIG9ubHkgc29tZSBleHRlcm5hbCBpbnRlcnJ1cHQgY2FuIHdha2UgdGhlIGRldmljZS4KKy0gcmVndWxhdG9yLXN0YXRlLWRpc2sgc3ViLXJvb3Qgbm9kZSBmb3IgU3VzcGVuZC10by1ESVNLIG1vZGUKKyAgOiBzdXNwZW5kIHRvIGRpc2ssIHRoaXMgc3RhdGUgb3BlcmF0ZXMgc2ltaWxhcmx5IHRvIFN1c3BlbmQtdG8tUkFNLAorICBidXQgaW5jbHVkZXMgYSBmaW5hbCBzdGVwIG9mIHdyaXRpbmcgbWVtb3J5IGNvbnRlbnRzIHRvIGRpc2suCistIHJlZ3VsYXRvci1zdGF0ZS1bbWVtL2Rpc2tdIG5vZGUgaGFzIGZvbGxvd2luZyBjb21tb24gcHJvcGVydGllczoKKwktIHJlZ3VsYXRvci1vbi1pbi1zdXNwZW5kOiByZWd1bGF0b3Igc2hvdWxkIGJlIG9uIGluIHN1c3BlbmQgc3RhdGUuCisJLSByZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ6IHJlZ3VsYXRvciBzaG91bGQgYmUgb2ZmIGluIHN1c3BlbmQgc3RhdGUuCisJLSByZWd1bGF0b3Itc3VzcGVuZC1taWNyb3ZvbHQ6IHJlZ3VsYXRvciBzaG91bGQgYmUgc2V0IHRvIHRoaXMgdm9sdGFnZQorCSAgaW4gc3VzcGVuZC4KKwktIHJlZ3VsYXRvci1tb2RlOiBvcGVyYXRpbmcgbW9kZSBpbiB0aGUgZ2l2ZW4gc3VzcGVuZCBzdGF0ZS4KKwkgIFRoZSBzZXQgb2YgcG9zc2libGUgb3BlcmF0aW5nIG1vZGVzIGRlcGVuZHMgb24gdGhlIGNhcGFiaWxpdGllcyBvZgorCSAgZXZlcnkgaGFyZHdhcmUgc28gdGhlIHZhbGlkIG1vZGVzIGFyZSBkb2N1bWVudGVkIG9uIGVhY2ggcmVndWxhdG9yCisJICBkZXZpY2UgdHJlZSBiaW5kaW5nIGRvY3VtZW50LgorLSByZWd1bGF0b3ItaW5pdGlhbC1tb2RlOiBpbml0aWFsIG9wZXJhdGluZyBtb2RlLiBUaGUgc2V0IG9mIHBvc3NpYmxlIG9wZXJhdGluZworICBtb2RlcyBkZXBlbmRzIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgZXZlcnkgaGFyZHdhcmUgc28gZWFjaCBkZXZpY2UgYmluZGluZworICBkb2N1bWVudGF0aW9uIGV4cGxhaW5zIHdoaWNoIHZhbHVlcyB0aGUgcmVndWxhdG9yIHN1cHBvcnRzLgogCiBEZXByZWNhdGVkIHByb3BlcnRpZXM6CiAtIHJlZ3VsYXRvci1jb21wYXRpYmxlOiBJZiBhIHJlZ3VsYXRvciBjaGlwIGNvbnRhaW5zIG11bHRpcGxlCkBAIC0zNCw2ICs1MiwxMCBAQAogCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyNTAwMDAwPjsKIAkJcmVndWxhdG9yLWFsd2F5cy1vbjsKIAkJdmluLXN1cHBseSA9IDwmdmluPjsKKworCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCXJlZ3VsYXRvci1vbi1pbi1zdXNwZW5kOworCQl9OwogCX07CiAKIFJlZ3VsYXRvciBDb25zdW1lcnM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3NreTgxNDUyLXJlZ3VsYXRvci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3NreTgxNDUyLXJlZ3VsYXRvci50eHQKaW5kZXggODgyNDU1ZS4uZjlhY2JjMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9za3k4MTQ1Mi1yZWd1bGF0b3IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3Ivc2t5ODE0NTItcmVndWxhdG9yLnR4dApAQCAtMSw2ICsxLDcgQEAKIFNLWTgxNDUyIHZvbHRhZ2UgcmVndWxhdG9yCiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CistIHJlZ3VsYXRvciBub2RlIG5hbWVkIGxvdXQuCiAtIGFueSByZXF1aXJlZCBnZW5lcmljIHByb3BlcnRpZXMgZGVmaW5lZCBpbiByZWd1bGF0b3IudHh0CiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CkBAIC05LDggKzEwLDkgQEAKIEV4YW1wbGU6CiAKIAlyZWd1bGF0b3IgewotCQkvKiBnZW5lcmljIHJlZ3VsYXRvciBwcm9wZXJ0aWVzICovCi0JCXJlZ3VsYXRvci1uYW1lID0gInRvdWNoX2VuIjsKLQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NDUwMDAwMD47Ci0JCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDgwMDAwMDA+OworCQlsb3V0IHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInNreTgxNDUyLWxvdXQiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NDUwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw4MDAwMDAwPjsKKwkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2V0L3N0LHN0aS1waWNvcGh5cmVzZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2V0L3N0LHN0aS1waWNvcGh5cmVzZXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YWU5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXQvc3Qsc3RpLXBpY29waHlyZXNldC50eHQKQEAgLTAsMCArMSw0MiBAQAorU1RNaWNyb2VsZWN0cm9uaWNzIFNUaSBmYW1pbHkgU3lzY29uZmlnIFBpY29waHkgU29mdFJlc2V0IENvbnRyb2xsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgYmluZGluZyBkZXNjcmliZXMgYSByZXNldCBjb250cm9sbGVyIGRldmljZSB0aGF0IGlzIHVzZWQgdG8gZW5hYmxlIGFuZAorZGlzYWJsZSBvbi1jaGlwIFBpY29QSFkgVVNCMiBwaHkocykgdXNpbmcgInNvZnRyZXNldCIgY29udHJvbCBiaXRzIGZvdW5kIGluCit0aGUgU1RpIGZhbWlseSBTb0Mgc3lzdGVtIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLgorCitUaGUgYWN0dWFsIGFjdGlvbiB0YWtlbiB3aGVuIHNvZnRyZXNldCBpcyBhc3NlcnRlZCBpcyBoYXJkd2FyZSBkZXBlbmRlbnQuCitIb3dldmVyLCB3aGVuIGFzc2VydGVkIGl0IG1heSBub3QgYmUgcG9zc2libGUgdG8gYWNjZXNzIHRoZSBoYXJkd2FyZSdzCityZWdpc3RlcnMgYW5kIGFmdGVyIGFuIGFzc2VydC9kZWFzc2VydCBzZXF1ZW5jZSB0aGUgaGFyZHdhcmUncyBwcmV2aW91cyBzdGF0ZQorbWF5IG5vIGxvbmdlciBiZSB2YWxpZC4KKworUGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNldC9yZXNldC50eHQKK2ZvciBjb21tb24gcmVzZXQgY29udHJvbGxlciBiaW5kaW5nIHVzYWdlLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgInN0LHN0aWg0MDctcGljb3BoeXJlc2V0IgorLSAjcmVzZXQtY2VsbHM6IDEsIHNlZSBiZWxvdworCitFeGFtcGxlOgorCisJcGljb3BoeXJlc2V0OiBwaWNvcGh5cmVzZXQtY29udHJvbGxlciB7CisJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1waWNvcGh5cmVzZXQiOworCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJfTsKKworU3BlY2lmeWluZyBwaWNvcGh5cmVzZXQgY29udHJvbCBvZiBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRGV2aWNlIG5vZGVzIHNob3VsZCBzcGVjaWZ5IHRoZSByZXNldCBjaGFubmVsIHJlcXVpcmVkIGluIHRoZWlyICJyZXNldHMiCitwcm9wZXJ0eSwgY29udGFpbmluZyBhIHBoYW5kbGUgdG8gdGhlIHBpY29waHlyZXNldCBkZXZpY2Ugbm9kZSBhbmQgYW4KK2luZGV4IHNwZWNpZnlpbmcgd2hpY2ggY2hhbm5lbCB0byB1c2UsIGFzIGRlc2NyaWJlZCBpbgorRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2V0L3Jlc2V0LnR4dC4KKworRXhhbXBsZToKKworCXVzYjJfcGljb3BoeTA6IHVzYnBpY29waHlAMCB7CisJCXJlc2V0cyA9IDwmcGljb3BoeXJlc2V0IFNUSUg0MDdfUElDT1BIWTBfUkVTRVQ+OworCX07CisKK01hY3JvIGRlZmluaXRpb25zIGZvciB0aGUgc3VwcG9ydGVkIHJlc2V0IGNoYW5uZWxzIGNhbiBiZSBmb3VuZCBpbjoKK2luY2x1ZGUvZHQtYmluZGluZ3MvcmVzZXQtY29udHJvbGxlci9zdGloNDA3LXJlc2V0cy5oCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcnRjL2F0bWVsLGF0OTFzYW05LXJ0Yy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcnRjL2F0bWVsLGF0OTFzYW05LXJ0Yy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlNzlkMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ydGMvYXRtZWwsYXQ5MXNhbTktcnRjLnR4dApAQCAtMCwwICsxLDIzIEBACitBdG1lbCBBVDkxU0FNOTI2MCBSZWFsIFRpbWUgVGltZXIKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogc2hvdWxkIGJlOiAiYXRtZWwsYXQ5MXNhbTkyNjAtcnR0IgorLSByZWc6IHNob3VsZCBlbmNvZGUgdGhlIG1lbW9yeSByZWdpb24gb2YgdGhlIFJUVCBjb250cm9sbGVyCistIGludGVycnVwdHM6IHJ0dCBhbGFybS9ldmVudCBpbnRlcnJ1cHQKKy0gY2xvY2tzOiBzaG91bGQgY29udGFpbiB0aGUgMzIgS0h6IHNsb3cgY2xrIHRoYXQgd2lsbCBkcml2ZSB0aGUgUlRUIGJsb2NrLgorLSBhdG1lbCxydHQtcnRjLXRpbWUtcmVnOiBzaG91bGQgZW5jb2RlIHRoZSBHUEJSIHJlZ2lzdGVyIHVzZWQgdG8gc3RvcmUKKwl0aGUgdGltZSBiYXNlIHdoZW4gdGhlIFJUVCBpcyB1c2VkIGFzIGFuIFJUQy4KKwlUaGUgZmlyc3QgY2VsbCBzaG91bGQgcG9pbnQgdG8gdGhlIEdQQlIgbm9kZSBhbmQgdGhlIHNlY29uZCBvbmUKKwllbmNvZGUgdGhlIG9mZnNldCB3aXRoaW4gdGhlIEdQQlIgYmxvY2sgKG9yIGluIG90aGVyIHdvcmRzLCB0aGUKKwlHUEJSIHJlZ2lzdGVyIHVzZWQgdG8gc3RvcmUgdGhlIHRpbWUgYmFzZSkuCisKKworRXhhbXBsZToKKworcnR0QGZmZmZmZDIwIHsKKwljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLXJ0dCI7CisJcmVnID0gPDB4ZmZmZmZkMjAgMHgxMD47CisJaW50ZXJydXB0cyA9IDwxIDQgNz47CisJY2xvY2tzID0gPCZjbGszMms+OworCWF0bWVsLHJ0dC1ydGMtdGltZS1yZWcgPSA8JmdwYnIgMHgwPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvbWFydmVsbCxhcm1hZGEtMzcwLXhwLXRpbWVyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9tYXJ2ZWxsLGFybWFkYS0zNzAteHAtdGltZXIudHh0CmluZGV4IGY0NTUxODIuLmU5Yzc4Y2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9tYXJ2ZWxsLGFybWFkYS0zNzAteHAtdGltZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9tYXJ2ZWxsLGFybWFkYS0zNzAteHAtdGltZXIudHh0CkBAIC0yLDggKzIsMTAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgZWl0aGVyICJtYXJ2ZWxsLGFybWFkYS0zNzAtdGltZXIiIG9yCi0gICJtYXJ2ZWxsLGFybWFkYS14cC10aW1lciIgYXMgYXBwcm9wcmlhdGUuCistIGNvbXBhdGlibGU6IFNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAibWFydmVsbCxhcm1hZGEtMzcwLXRpbWVyIiwKKwkgICAgICAibWFydmVsbCxhcm1hZGEtMzc1LXRpbWVyIiwKKwkgICAgICAibWFydmVsbCxhcm1hZGEteHAtdGltZXIiLgogLSBpbnRlcnJ1cHRzOiBTaG91bGQgY29udGFpbiB0aGUgbGlzdCBvZiBHbG9iYWwgVGltZXIgaW50ZXJydXB0cyBhbmQKICAgdGhlbiBsb2NhbCB0aW1lciBpbnRlcnJ1cHRzCiAtIHJlZzogU2hvdWxkIGNvbnRhaW4gbG9jYXRpb24gYW5kIGxlbmd0aCBmb3IgdGltZXJzIHJlZ2lzdGVyLiBGaXJzdApAQCAtMTMsNyArMTUsOCBAQAogQ2xvY2tzIHJlcXVpcmVkIGZvciBjb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC10aW1lciI6CiAtIGNsb2NrcyA6IE11c3QgY29udGFpbiBhIHNpbmdsZSBlbnRyeSBkZXNjcmliaW5nIHRoZSBjbG9jayBpbnB1dAogCi1DbG9ja3MgcmVxdWlyZWQgZm9yIGNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEteHAtdGltZXIiOgorQ2xvY2tzIHJlcXVpcmVkIGZvciBjb21wYXRpYmxlcyA9ICJtYXJ2ZWxsLGFybWFkYS14cC10aW1lciIsCisJCQkJICAibWFydmVsbCxhcm1hZGEtMzc1LXRpbWVyIjoKIC0gY2xvY2tzIDogTXVzdCBjb250YWluIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgogLSBjbG9jay1uYW1lcyA6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGVudHJpZXM6CiAgICJuYmNsayIgKEwyL2NvaGVyZW5jeSBmYWJyaWMgY2xvY2spLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3RpbWVyL3JlbmVzYXMsbXR1Mi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyxtdHUyLnR4dAppbmRleCBkOWE4ZDVhLi5iYTBhMzRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyxtdHUyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyxtdHUyLnR4dApAQCAtMSw0ICsxLDQgQEAKLSogUmVuZXNhcyBSLUNhciBNdWx0aS1GdW5jdGlvbiBUaW1lciBQdWxzZSBVbml0IDIgKE1UVTIpCisqIFJlbmVzYXMgTXVsdGktRnVuY3Rpb24gVGltZXIgUHVsc2UgVW5pdCAyIChNVFUyKQogCiBUaGUgTVRVMiBpcyBhIG11bHRpLXB1cnBvc2UsIG11bHRpLWNoYW5uZWwgdGltZXIvY291bnRlciB3aXRoIGNvbmZpZ3VyYWJsZQogY2xvY2sgaW5wdXRzIGFuZCBwcm9ncmFtbWFibGUgY29tcGFyZSBtYXRjaC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9yZW5lc2FzLHRtdS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyx0bXUudHh0CmluZGV4IDdkYjg5ZmIuLmNkNWYyMGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9yZW5lc2FzLHRtdS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3RpbWVyL3JlbmVzYXMsdG11LnR4dApAQCAtMSw0ICsxLDQgQEAKLSogUmVuZXNhcyBSLUNhciBUaW1lciBVbml0IChUTVUpCisqIFJlbmVzYXMgUi1Nb2JpbGUvUi1DYXIgVGltZXIgVW5pdCAoVE1VKQogCiBUaGUgVE1VIGlzIGEgMzItYml0IHRpbWVyL2NvdW50ZXIgd2l0aCBjb25maWd1cmFibGUgY2xvY2sgaW5wdXRzIGFuZAogcHJvZ3JhbW1hYmxlIGNvbXBhcmUgbWF0Y2guCkBAIC05LDYgKzksOCBAQAogUmVxdWlyZWQgUHJvcGVydGllczoKIAogICAtIGNvbXBhdGlibGU6IG11c3QgY29udGFpbiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nOgorICAgIC0gInJlbmVzYXMsdG11LXI4YTc3NDAiIGZvciB0aGUgcjhhNzc0MCBUTVUKKyAgICAtICJyZW5lc2FzLHRtdS1yOGE3Nzc4IiBmb3IgdGhlIHI4YTc3NzggVE1VCiAgICAgLSAicmVuZXNhcyx0bXUtcjhhNzc3OSIgZm9yIHRoZSByOGE3Nzc5IFRNVQogICAgIC0gInJlbmVzYXMsdG11IiBmb3IgYW55IFRNVS4KICAgICAgIFRoaXMgaXMgYSBmYWxsYmFjayBmb3IgdGhlIGFib3ZlIHJlbmVzYXMsdG11LSogZW50cmllcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3ZlbmRvci1wcmVmaXhlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dAppbmRleCBhMzQ0ZWMyLi4wZDM1NDYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dApAQCAtNDEsNiArNDEsNyBAQAogZGF2aWNvbQlEQVZJQ09NIFNlbWljb25kdWN0b3IsIEluYy4KIGRlbngJRGVueCBTb2Z0d2FyZSBFbmdpbmVlcmluZwogZGlnaQlEaWdpIEludGVybmF0aW9uYWwgSW5jLgorZGlnaWxlbnQJRGlnbGVudCwgSW5jLgogZGxnCURpYWxvZyBTZW1pY29uZHVjdG9yCiBkbGluawlELUxpbmsgQ29ycG9yYXRpb24KIGRtbwlEYXRhIE1vZHVsIEFHCkBAIC03OCw2ICs3OSw3IEBACiBpbnRlbAlJbnRlbCBDb3Jwb3JhdGlvbgogaW50ZXJjb250cm9sCUludGVyIENvbnRyb2wgR3JvdXAKIGlzZWUJSVNFRSAyMDA3IFMuTC4KK2lzaWwgICAgSW50ZXJzaWwgKGRlcHJlY2F0ZWQsIHVzZSBpc2wpCiBpc2wJSW50ZXJzaWwKIGthcm8JS2EtUm8gZWxlY3Ryb25pY3MgR21iSAoga2V5bWlsZQlLZXltaWxlIEdtYkgKQEAgLTkxLDYgKzkzLDcgQEAKIG1hcnZlbGwJTWFydmVsbCBUZWNobm9sb2d5IEdyb3VwIEx0ZC4KIG1heGltCU1heGltIEludGVncmF0ZWQgUHJvZHVjdHMKIG1lZGlhdGVrCU1lZGlhVGVrIEluYy4KK21lcnJpaQlNZXJyaWkgVGVjaG5vbG9neSBDby4sIEx0ZC4KIG1pY3JlbAlNaWNyZWwgSW5jLgogbWljcm9jaGlwCU1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4KIG1pY3JvbglNaWNyb24gVGVjaG5vbG9neSBJbmMuCkBAIC0xNDksNiArMTUyLDcgQEAKIHN0ZQlTVC1Fcmljc3Nvbgogc3Rlcmljc3NvbglTVC1Fcmljc3Nvbgogc3lub2xvZ3kJU3lub2xvZ3ksIEluYy4KK3RicwlUQlMgVGVjaG5vbG9naWVzCiB0aGluZQlUSGluZSBFbGVjdHJvbmljcywgSW5jLgogdGkJVGV4YXMgSW5zdHJ1bWVudHMKIHRsbQlUcnVzdGVkIExvZ2ljIE1vYmlsaXR5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdzEvb21hcC1oZHEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3cxL29tYXAtaGRxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWY3OTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3cxL29tYXAtaGRxLnR4dApAQCAtMCwwICsxLDE3IEBACisqIE9NQVAgSERRIE9uZSB3aXJlIGJ1cyBtYXN0ZXIgY29udHJvbGxlcgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJ0aSxvbWFwMy0xdyIKKy0gcmVnIDogQWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UKKy0gaW50ZXJydXB0cyA6IGludGVycnVwdCBsaW5lLgorLSB0aSxod21vZHMgOiAiaGRxMXciCisKK0V4YW1wbGU6CisKKy0gRnJvbSBvbWFwMy5kdHNpCisgIGhkcXcxdzogMXdANDgwYjIwMDAgeworCWNvbXBhdGlibGUgPSAidGksb21hcDMtMXciOworCXJlZyA9IDwweDQ4MGIyMDAwIDB4MTAwMD47CisJaW50ZXJydXB0cyA9IDw1OD47CisJdGksaHdtb2RzID0gImhkcTF3IjsKKyAgfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy93YXRjaGRvZy9tYXJ2ZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3dhdGNoZG9nL21hcnZlbC50eHQKaW5kZXggOTcyMjNmZC4uODU4ZWQ5MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3dhdGNoZG9nL21hcnZlbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3dhdGNoZG9nL21hcnZlbC50eHQKQEAgLTE3LDYgKzE3LDE4IEBACiAtIHJlZwkJOiBBIHRoaXJkIGVudHJ5IGlzIG1hbmRhdG9yeSBhbmQgc2hvdWxkIGNvbnRhaW4gdGhlCiAgICAgICAgICAgICAgICAgICBzaGFyZWQgbWFzay91bm1hc2sgUlNUT1VUIGFkZHJlc3MuCiAKK0Nsb2NrcyByZXF1aXJlZCBmb3IgY29tcGF0aWJsZXMgPSAibWFydmVsbCxvcmlvbi13ZHQiLAorCQkJCSAgIm1hcnZlbGwsYXJtYWRhLTM3MC13ZHQiOgorLSBjbG9ja3MgOiBNdXN0IGNvbnRhaW4gYSBzaW5nbGUgZW50cnkgZGVzY3JpYmluZyB0aGUgY2xvY2sgaW5wdXQKKworQ2xvY2tzIHJlcXVpcmVkIGZvciBjb21wYXRpYmxlcyA9ICJtYXJ2ZWxsLGFybWFkYS14cC13ZHQiCisJCQkJICAibWFydmVsbCxhcm1hZGEtMzc1LXdkdCIKKwkJCQkgICJtYXJ2ZWxsLGFybWFkYS0zODAtd2R0IjoKKy0gY2xvY2tzIDogTXVzdCBjb250YWluIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgorLSBjbG9jay1uYW1lcyA6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGVudHJpZXM6CisgICJuYmNsayIgKEwyL2NvaGVyZW5jeSBmYWJyaWMgY2xvY2spLAorICAiZml4ZWQiIChSZWZlcmVuY2UgMjUgTUh6IGZpeGVkLWNsb2NrKS4KKwogT3B0aW9uYWwgcHJvcGVydGllczoKIAogLSBpbnRlcnJ1cHRzCTogQ29udGFpbnMgdGhlIElSUSBmb3Igd2F0Y2hkb2cgZXhwaXJhdGlvbgpAQCAtMzAsNCArNDIsNSBAQAogCQlpbnRlcnJ1cHRzID0gPDM+OwogCQl0aW1lb3V0LXNlYyA9IDwxMD47CiAJCXN0YXR1cyA9ICJva2F5IjsKKwkJY2xvY2tzID0gPCZnYXRlX2NsayA3PjsKIAl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc1CmluZGV4IGM2YTVmZjEuLjY3NjkxYTBhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtNzUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc1CkBAIC01Myw2ICs1MywxMSBAQAogICAgICAgICAgICAgICAgaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC90bXA3NQogICAgICAgICAgICAgICAgaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC90bXAxNzUKICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvdG1wMjc1CisgICogTlhQIExNNzVCCisgICAgUHJlZml4OiAnbG03NWInCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IG5vbmUKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTlhQIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubnhwLmNvbS9kb2N1bWVudHMvZGF0YV9zaGVldC9MTTc1Qi5wZGYKIAogQXV0aG9yOiBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05NTIzNCBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05NTIzNAppbmRleCBhMGU5NWRkLi4zMmI3NzdlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTUyMzQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTk1MjM0CkBAIC0yLDYgKzIsMTAgQEAKID09PT09PT09PT09PT09PT09PT09PQogCiBTdXBwb3J0ZWQgY2hpcHM6CisgICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciAvIFRleGFzIEluc3RydW1lbnRzIExNOTUyMzMKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTgsIDB4MmEsIDB4MmIKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC9sbTk1MjMzCiAgICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciAvIFRleGFzIEluc3RydW1lbnRzIExNOTUyMzQKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTgsIDB4NGQsIDB4NGUKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgd2Vic2l0ZQpAQCAtMTMsMTEgKzE3LDEyIEBACiBEZXNjcmlwdGlvbgogLS0tLS0tLS0tLS0KIAotTE05NTIzNCBpcyBhbiAxMS1iaXQgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3Igd2l0aCBhIDItd2lyZSBTeXN0ZW0gTWFuYWdlbWVudAotQnVzIChTTUJ1cykgaW50ZXJmYWNlIGFuZCBUcnVlVGhlcm0gdGVjaG5vbG9neSB0aGF0IGNhbiB2ZXJ5IGFjY3VyYXRlbHkgbW9uaXRvcgotdGhlIHRlbXBlcmF0dXJlIG9mIGZvdXIgcmVtb3RlIGRpb2RlcyBhcyB3ZWxsIGFzIGl0cyBvd24gdGVtcGVyYXR1cmUuCi1UaGUgZm91ciByZW1vdGUgZGlvZGVzIGNhbiBiZSBleHRlcm5hbCBkZXZpY2VzIHN1Y2ggYXMgbWljcm9wcm9jZXNzb3JzLAotZ3JhcGhpY3MgcHJvY2Vzc29ycyBvciBkaW9kZS1jb25uZWN0ZWQgMk4zOTA0cy4gVGhlIExNOTUyMzQncyBUcnVUaGVybQorTE05NTIzMyBhbmQgTE05NTIzNCBhcmUgMTEtYml0IGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29ycyB3aXRoIGEgMi13aXJlCitTeXN0ZW0gTWFuYWdlbWVudCBCdXMgKFNNQnVzKSBpbnRlcmZhY2UgYW5kIFRydWVUaGVybSB0ZWNobm9sb2d5Cit0aGF0IGNhbiB2ZXJ5IGFjY3VyYXRlbHkgbW9uaXRvciB0aGUgdGVtcGVyYXR1cmUgb2YgdHdvIChMTTk1MjMzKQorb3IgZm91ciAoTE05NTIzNCkgcmVtb3RlIGRpb2RlcyBhcyB3ZWxsIGFzIGl0cyBvd24gdGVtcGVyYXR1cmUuCitUaGUgcmVtb3RlIGRpb2RlcyBjYW4gYmUgZXh0ZXJuYWwgZGV2aWNlcyBzdWNoIGFzIG1pY3JvcHJvY2Vzc29ycywKK2dyYXBoaWNzIHByb2Nlc3NvcnMgb3IgZGlvZGUtY29ubmVjdGVkIDJOMzkwNHMuIFRoZSBjaGlwJ3MgVHJ1VGhlcm0KIGJldGEgY29tcGVuc2F0aW9uIHRlY2hub2xvZ3kgYWxsb3dzIHNlbnNpbmcgb2YgOTAgbm0gb3IgNjUgbm0gcHJvY2VzcwogdGhlcm1hbCBkaW9kZXMgYWNjdXJhdGVseS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTk1MjQ1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTk1MjQ1CmluZGV4IDc3ZWFmMjguLmQ3NTU5MDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05NTI0NQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTUyNDUKQEAgLTIsMTAgKzIsMTQgQEAKID09PT09PT09PT09PT09PT09PQogCiBTdXBwb3J0ZWQgY2hpcHM6Ci0gICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk1MjQ1CisgICogVEkgTE05NTIzNQorICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgxOCwgMHgyOSwgMHg0YworICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBUSSB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3LnRpLmNvbS9saXQvZHMvc3ltbGluay9sbTk1MjM1LnBkZgorICAqIFRJIC8gTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk1MjQ1CiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4LCAweDE5LCAweDI5LCAweDRjLCAweDRkCi0gICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3Igd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vbXBmL0xNL0xNOTUyNDUuaHRtbAorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBUSSB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3LnRpLmNvbS9saXQvZHMvc3ltbGluay9sbTk1MjQ1LnBkZgogCiAKIEF1dGhvcjogQWxleGFuZGVyIFN0ZWluIDxhbGV4YW5kZXIuc3RlaW5Ac3lzdGVjLWVsZWN0cm9uaWMuY29tPgpAQCAtMTMsMTAgKzE3LDEwIEBACiBEZXNjcmlwdGlvbgogLS0tLS0tLS0tLS0KIAotVGhlIExNOTUyNDUgaXMgYW4gMTEtYml0IGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29yIHdpdGggYSAyLXdpcmUgU3lzdGVtCitMTTk1MjM1IGFuZCBMTTk1MjQ1IGFyZSAxMS1iaXQgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3JzIHdpdGggYSAyLXdpcmUgU3lzdGVtCiBNYW5hZ2VtZW50IEJ1cyAoU01CdXMpIGludGVyZmFjZSBhbmQgVHJ1VGhlcm0gdGVjaG5vbG9neSB0aGF0IGNhbiBtb25pdG9yCiB0aGUgdGVtcGVyYXR1cmUgb2YgYSByZW1vdGUgZGlvZGUgYXMgd2VsbCBhcyBpdHMgb3duIHRlbXBlcmF0dXJlLgotVGhlIExNOTUyNDUgY2FuIGJlIHVzZWQgdG8gdmVyeSBhY2N1cmF0ZWx5IG1vbml0b3IgdGhlIHRlbXBlcmF0dXJlIG9mCitUaGUgY2hpcHMgY2FuIGJlIHVzZWQgdG8gdmVyeSBhY2N1cmF0ZWx5IG1vbml0b3IgdGhlIHRlbXBlcmF0dXJlIG9mCiBleHRlcm5hbCBkZXZpY2VzIHN1Y2ggYXMgbWljcm9wcm9jZXNzb3JzLgogCiBBbGwgdGVtcGVyYXR1cmUgdmFsdWVzIGFyZSBnaXZlbiBpbiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cy4gTG9jYWwgdGVtcGVyYXR1cmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbmN0Njc3NSBiL0RvY3VtZW50YXRpb24vaHdtb24vbmN0Njc3NQppbmRleCA0ZTllZjYwLi5mMGRkM2QyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDY3NzUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9uY3Q2Nzc1CkBAIC04LDExICs4LDE1IEBACiA9PT09PT09PT09PT09PT09PT09PT0KIAogU3VwcG9ydGVkIGNoaXBzOgorICAqIE51dm90b24gTkNUNjEwMkQvTkNUNjEwNEQvTkNUNjEwNkQKKyAgICBQcmVmaXg6ICduY3Q2MTA2JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSB0aGUgTnV2b3RvbiB3ZWIgc2l0ZQogICAqIE51dm90b24gTkNUNTU3MkQvTkNUNjc3MUYvTkNUNjc3MkYvTkNUNjc3NUYvVzgzNjc3SEctSQogICAgIFByZWZpeDogJ25jdDY3NzUnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IElTQSBhZGRyZXNzIHJldHJpZXZlZCBmcm9tIFN1cGVyIEkvTyByZWdpc3RlcnMKICAgICBEYXRhc2hlZXQ6IEF2YWlsYWJsZSBmcm9tIE51dm90b24gdXBvbiByZXF1ZXN0Ci0gICogTnV2b3RvbiBOQ1Q1NTc3RC9OQ1Q2Nzc2RC9OQ1Q2Nzc2RgorICAqIE51dm90b24gTkNUNTU3M0QvTkNUNTU3N0QvTkNUNjc3NkQvTkNUNjc3NkYKICAgICBQcmVmaXg6ICduY3Q2Nzc2JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCiAgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHVwb24gcmVxdWVzdApAQCAtMjAsNiArMjQsMTQgQEAKICAgICBQcmVmaXg6ICduY3Q2Nzc5JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCiAgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHVwb24gcmVxdWVzdAorICAqIE51dm90b24gTkNUNjc5MUQKKyAgICBQcmVmaXg6ICduY3Q2NzkxJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHVwb24gcmVxdWVzdAorICAqIE51dm90b24gTkNUNjc5MkQKKyAgICBQcmVmaXg6ICduY3Q2NzkyJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHVwb24gcmVxdWVzdAogCiBBdXRob3JzOgogICAgICAgICBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDc4MDIgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDc4MDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwMGY1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbmN0NzgwMgpAQCAtMCwwICsxLDMyIEBACitLZXJuZWwgZHJpdmVyIG5jdDc4MDIKKz09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogTnV2b3RvbiBOQ1Q3ODAyWQorICAgIFByZWZpeDogJ25jdDc4MDInCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDI4Li4weDJmCisgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHdlYiBzaXRlCisKK0F1dGhvcnM6CisgICAgICAgIEd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIE51dm90b24gTkNUNzgwMlkgaGFyZHdhcmUgbW9uaXRvcmluZworY2hpcC4gTkNUNzgwMlkgc3VwcG9ydHMgNiB0ZW1wZXJhdHVyZSBzZW5zb3JzLCA1IHZvbHRhZ2Ugc2Vuc29ycywgYW5kIDMgZmFuCitzcGVlZCBzZW5zb3JzLgorCitUaGUgY2hpcCBhbHNvIHN1cHBvcnRzIGludGVsbGlnZW50IGZhbiBzcGVlZCBjb250cm9sLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMKK25vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuCisKK1Rlc3RlZCBCb2FyZHMgYW5kIEJJT1MgVmVyc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBoYXMgYmVlbiByZXBvcnRlZCB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBib2FyZHMgYW5kCitCSU9TIHZlcnNpb25zLgorCitCb2FyZAkJCUJJT1MgdmVyc2lvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitLb250cm9uIENPTWUtYlNDMglDSFIyRTkzNC4wMDEuR0dPCitLb250cm9uIENPTWUtYklQMglDQ1IyRTIxMgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi90bXA0MDEgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3RtcDQwMQppbmRleCBmOTFlM2ZhLi44ZWI4OGU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3RtcDQwMQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3RtcDQwMQpAQCAtMTgsNiArMTgsMTAgQEAKICAgICBQcmVmaXg6ICd0bXA0MzInCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjLCAweDRkCiAgICAgRGF0YXNoZWV0OiBodHRwOi8vZm9jdXMudGkuY29tL2RvY3MvcHJvZC9mb2xkZXJzL3ByaW50L3RtcDQzMi5odG1sCisgICogVGV4YXMgSW5zdHJ1bWVudHMgVE1QNDM1CisgICAgUHJlZml4OiAndG1wNDM1JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgzNywgMHg0OCAtIDB4NGYKKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9mb2N1cy50aS5jb20vZG9jcy9wcm9kL2ZvbGRlcnMvcHJpbnQvdG1wNDM1Lmh0bWwKIAogQXV0aG9yczoKICAgICAgICAgIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CkBAIC0yNyw4ICszMSw4IEBACiAtLS0tLS0tLS0tLQogCiBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIFRleGFzIEluc3RydW1lbnRzIFRNUDQwMSwgVE1QNDExLAotVE1QNDMxLCBhbmQgVE1QNDMyIGNoaXBzLiBUaGVzZSBjaGlwcyBpbXBsZW1lbnQgb25lIG9yIHR3byByZW1vdGUgYW5kCi1vbmUgbG9jYWwgdGVtcGVyYXR1cmUgc2Vuc29ycy4gVGVtcGVyYXR1cmUgaXMgbWVhc3VyZWQgaW4gZGVncmVlcworVE1QNDMxLCBUTVA0MzIgYW5kIFRNUDQzNSBjaGlwcy4gVGhlc2UgY2hpcHMgaW1wbGVtZW50IG9uZSBvciB0d28gcmVtb3RlCithbmQgb25lIGxvY2FsIHRlbXBlcmF0dXJlIHNlbnNvcnMuIFRlbXBlcmF0dXJlIGlzIG1lYXN1cmVkIGluIGRlZ3JlZXMKIENlbHNpdXMuIFJlc29sdXRpb24gb2YgdGhlIHJlbW90ZSBzZW5zb3IgaXMgMC4wNjI1IGRlZ3JlZS4gTG9jYWwKIHNlbnNvciByZXNvbHV0aW9uIGNhbiBiZSBzZXQgdG8gMC41LCAwLjI1LCAwLjEyNSBvciAwLjA2MjUgZGVncmVlIChub3QKIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIHNvIGZhciwgc28gdXNpbmcgdGhlIGRlZmF1bHQgcmVzb2x1dGlvbiBvZiAwLjUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggNDc5ZjMzMi4uODM4ZjM3NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTI5NDAsNiArMjk0MCwxMyBAQAogCQkJcXVpZXNjZW50IHN0YXRlcy4gIFVuaXRzIGFyZSBqaWZmaWVzLCBtaW5pbXVtCiAJCQl2YWx1ZSBpcyBvbmUsIGFuZCBtYXhpbXVtIHZhbHVlIGlzIEhaLgogCisJcmN1dHJlZS5rdGhyZWFkX3ByaW89IAkgW0tOTCxCT09UXQorCQkJU2V0IHRoZSBTQ0hFRF9GSUZPIHByaW9yaXR5IG9mIHRoZSBSQ1UKKwkJCXBlci1DUFUga3RocmVhZHMgKHJjdWMvTikuIFRoaXMgdmFsdWUgaXMgYWxzbworCQkJdXNlZCBmb3IgdGhlIHByaW9yaXR5IG9mIHRoZSBSQ1UgYm9vc3QgdGhyZWFkcworCQkJKHJjdWIvTikuIFZhbGlkIHZhbHVlcyBhcmUgMS05OSBhbmQgdGhlIGRlZmF1bHQKKwkJCWlzIDEgKHRoZSBsZWFzdC1mYXZvcmVkIHByaW9yaXR5KS4KKwogCXJjdXRyZWUucmN1X25vY2JfbGVhZGVyX3N0cmlkZT0gW0tOTF0KIAkJCVNldCB0aGUgbnVtYmVyIG9mIE5PQ0Iga3RocmVhZCBncm91cHMsIHdoaWNoCiAJCQlkZWZhdWx0cyB0byB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIG51bWJlciBvZgpAQCAtMzA4OSw2ICszMDk2LDE1IEBACiAJCQltZXNzYWdlcy4gIERpc2FibGUgd2l0aCBhIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbAogCQkJdG8gemVyby4KIAorCXJjdXBkYXRlLnJjdV9zZWxmX3Rlc3Q9IFtLTkxdCisJCQlSdW4gdGhlIFJDVSBlYXJseSBib290IHNlbGYgdGVzdHMKKworCXJjdXBkYXRlLnJjdV9zZWxmX3Rlc3RfYmg9IFtLTkxdCisJCQlSdW4gdGhlIFJDVSBiaCBlYXJseSBib290IHNlbGYgdGVzdHMKKworCXJjdXBkYXRlLnJjdV9zZWxmX3Rlc3Rfc2NoZWQ9IFtLTkxdCisJCQlSdW4gdGhlIFJDVSBzY2hlZCBlYXJseSBib290IHNlbGYgdGVzdHMKKwogCXJkaW5pdD0JCVtLTkxdCiAJCQlGb3JtYXQ6IDxmdWxsX3BhdGg+CiAJCQlSdW4gc3BlY2lmaWVkIGJpbmFyeSBpbnN0ZWFkIG9mIC9pbml0IGZyb20gdGhlIHJhbWRpc2ssCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbGdsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vbG9ja2luZy9sZ2xvY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTcxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbGdsb2NrLnR4dApAQCAtMCwwICsxLDE2NiBAQAorbGdsb2NrIC0gbG9jYWwvZ2xvYmFsIGxvY2tzIGZvciBtb3N0bHkgbG9jYWwgYWNjZXNzIHBhdHRlcm5zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3JpZ2luOiBOaWNrIFBpZ2dpbidzIFZGUyBzY2FsYWJpbGl0eSBzZXJpZXMgaW50cm9kdWNlZCBkdXJpbmcKKwkyLjYuMzUrKyBbMV0gWzJdCitMb2NhdGlvbjoga2VybmVsL2xvY2tpbmcvbGdsb2NrLmMKKwlpbmNsdWRlL2xpbnV4L2xnbG9jay5oCitVc2VyczogY3VycmVudGx5IG9ubHkgdGhlIFZGUyBhbmQgc3RvcF9tYWNoaW5lIHJlbGF0ZWQgY29kZQorCitEZXNpZ24gR29hbDoKKy0tLS0tLS0tLS0tLQorCitJbXByb3ZlIHNjYWxhYmlsaXR5IG9mIGdsb2JhbGx5IHVzZWQgbGFyZ2UgZGF0YSBzZXRzIHRoYXQgYXJlCitkaXN0cmlidXRlZCBvdmVyIGFsbCBDUFVzIGFzIHBlcl9jcHUgZWxlbWVudHMuCisKK1RvIG1hbmFnZSBnbG9iYWwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHBhcnRpdGlvbmVkIG92ZXIgYWxsIENQVXMKK2FzIHBlcl9jcHUgZWxlbWVudHMgYnV0IGNhbiBiZSBtb3N0bHkgaGFuZGxlZCBieSBDUFUgbG9jYWwgYWN0aW9ucworbGdsb2NrIHdpbGwgYmUgdXNlZCB3aGVyZSB0aGUgbWFqb3JpdHkgb2YgYWNjZXNzZXMgYXJlIGNwdSBsb2NhbAorcmVhZGluZyBhbmQgb2NjYXNpb25hbCBjcHUgbG9jYWwgd3JpdGluZyB3aXRoIHZlcnkgaW5mcmVxdWVudAorZ2xvYmFsIHdyaXRlIGFjY2Vzcy4KKworCisqIGRlYWwgd2l0aCB0aGluZ3MgbG9jYWxseSB3aGVuZXZlciBwb3NzaWJsZQorCS0gdmVyeSBmYXN0IGFjY2VzcyB0byB0aGUgbG9jYWwgcGVyX2NwdSBkYXRhCisJLSByZWFzb25hYmx5IGZhc3QgYWNjZXNzIHRvIHNwZWNpZmljIHBlcl9jcHUgZGF0YSBvbiBhIGRpZmZlcmVudAorCSAgQ1BVCisqIHdoaWxlIG1ha2luZyBnbG9iYWwgYWN0aW9uIHBvc3NpYmxlIHdoZW4gbmVlZGVkCisJLSBieSBleHBlbnNpdmUgYWNjZXNzIHRvIGFsbCBDUFVzIGxvY2tzIC0gZWZmZWN0aXZlbHkKKwkgIHJlc3VsdGluZyBpbiBhIGdsb2JhbGx5IHZpc2libGUgY3JpdGljYWwgc2VjdGlvbi4KKworRGVzaWduOgorLS0tLS0tLQorCitCYXNpY2FsbHkgaXQgaXMgYW4gYXJyYXkgb2YgcGVyX2NwdSBzcGlubG9ja3Mgd2l0aCB0aGUKK2xnX2xvY2FsX2xvY2svdW5sb2NrIGFjY2Vzc2luZyB0aGUgbG9jYWwgQ1BVcyBsb2NrIG9iamVjdCBhbmQgdGhlCitsZ19sb2NhbF9sb2NrX2NwdS91bmxvY2tfY3B1IGFjY2Vzc2luZyBhIHJlbW90ZSBDUFVzIGxvY2sgb2JqZWN0Cit0aGUgbGdfbG9jYWxfbG9jayBoYXMgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFzIG1pZ3JhdGlvbiBwcm90ZWN0aW9uIHNvCit0aGF0IHRoZSByZWZlcmVuY2UgdG8gdGhlIGxvY2FsIENQVXMgbG9jayBkb2VzIG5vdCBnbyBvdXQgb2Ygc2NvcGUuCitEdWUgdG8gdGhlIGxnX2xvY2FsX2xvY2svdW5sb2NrIG9ubHkgdG91Y2hpbmcgY3B1LWxvY2FsIHJlc291cmNlcyBpdAoraXMgZmFzdC4gVGFraW5nIHRoZSBsb2NhbCBsb2NrIG9uIGEgZGlmZmVyZW50IENQVSB3aWxsIGJlIG1vcmUKK2V4cGVuc2l2ZSBidXQgc3RpbGwgcmVsYXRpdmVseSBjaGVhcC4KKworT25lIGNhbiByZWxheCB0aGUgbWlncmF0aW9uIGNvbnN0cmFpbnRzIGJ5IGFjcXVpcmluZyB0aGUgY3VycmVudAorQ1BVcyBsb2NrIHdpdGggbGdfbG9jYWxfbG9ja19jcHUsIHJlbWVtYmVyIHRoZSBjcHUsIGFuZCByZWxlYXNlIHRoYXQKK2xvY2sgYXQgdGhlIGVuZCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBldmVuIGlmIG1pZ3JhdGVkLiBUaGlzIHNob3VsZAorZ2l2ZSBtb3N0IG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0cyB3aXRob3V0IGluaGliaXRpbmcgbWlncmF0aW9uCit0aG91Z2ggbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9ucyBmb3IgbmVzdGluZyBvZiBsZ2xvY2tzIGFuZAorY29uc2lkZXJhdGlvbiBvZiBkZWFkbG9ja3Mgd2l0aCBsZ19nbG9iYWxfbG9jay4KKworVGhlIGxnX2dsb2JhbF9sb2NrL3VubG9jayBsb2NrcyBhbGwgdW5kZXJseWluZyBzcGlubG9ja3Mgb2YgYWxsCitwb3NzaWJsZSBDUFVzIChpbmNsdWRpbmcgdGhvc2Ugb2ZmLWxpbmUpLiBUaGUgcHJlZW1wdGlvbiBkaXNhYmxlL2VuYWJsZQorYXJlIG5lZWRlZCBpbiB0aGUgbm9uLVJUIGtlcm5lbHMgdG8gcHJldmVudCBkZWFkbG9ja3MgbGlrZToKKworICAgICAgICAgICAgICAgICAgICAgb24gY3B1IDEKKworICAgICAgICAgICAgICB0YXNrIEEgICAgICAgICAgdGFzayBCCisgICAgICAgICBsZ19nbG9iYWxfbG9jaworICAgICAgICAgICBnb3QgY3B1IDAgbG9jaworICAgICAgICAgICAgICAgICA8PDw8IHByZWVtcHQgPDw8PAorICAgICAgICAgICAgICAgICAgICAgICAgIGxnX2xvY2FsX2xvY2tfY3B1IGZvciBjcHUgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpbiBvbiBjcHUgMCBsb2NrCisKK09uIC1SVCB0aGlzIGRlYWRsb2NrIHNjZW5hcmlvIGlzIHJlc29sdmVkIGJ5IHRoZSBhcmNoX3NwaW5fbG9ja3MgaW4gdGhlCitsZ2xvY2tzIGJlaW5nIHJlcGxhY2VkIGJ5IHJ0X211dGV4ZXMgd2hpY2ggcmVzb2x2ZSB0aGUgYWJvdmUgZGVhZGxvY2sKK2J5IGJvb3N0aW5nIHRoZSBsb2NrLWhvbGRlci4KKworCitJbXBsZW1lbnRhdGlvbjoKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW5pdGlhbCBsZ2xvY2sgaW1wbGVtZW50YXRpb24gZnJvbSBOaWNrIFBpZ2dpbiB1c2VkIHNvbWUgY29tcGxleAorbWFjcm9zIHRvIGdlbmVyYXRlIHRoZSBsZ2xvY2svYnJsb2NrIGluIGxnbG9jay5oIC0gdGhleSB3ZXJlIGxhdGVyCit0dXJuZWQgaW50byBhIHNldCBvZiBmdW5jdGlvbnMgYnkgQW5kaSBLbGVlbiBbN10uIFRoZSBjaGFuZ2UgdG8gZnVuY3Rpb25zCit3YXMgbW90aXZhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBtdWx0aXBsZSBsb2NrIHVzZXJzIGFuZCBhbHNvIGJ5IHRoZW0KK2JlaW5nIGVhc2llciB0byBtYWludGFpbiB0aGFuIHRoZSBnZW5lcmF0aW5nIG1hY3Jvcy4gVGhpcyBjaGFuZ2UgdG8KK2Z1bmN0aW9ucyBpcyBhbHNvIHRoZSBiYXNpcyB0byBlbGltaW5hdGVkIHRoZSByZXN0cmljdGlvbiBvZiBub3QKK2JlaW5nIGluaXRpYWxpemVhYmxlIGluIGtlcm5lbCBtb2R1bGVzICh0aGUgcmVtYWluaW5nIHByb2JsZW0gaXMgdGhhdAorbG9ja3MgYXJlIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemVkIC0gc2VlIGxvY2tkZXAtZGVzaWduLnR4dCkKKworRGVjbGFyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICNpbmNsdWRlIDxsaW51eC9sZ2xvY2suaD4KKworICBERUZJTkVfTEdMT0NLKG5hbWUpCisgIG9yOgorICBERUZJTkVfU1RBVElDX0xHTE9DSyhuYW1lKTsKKworICBsZ19sb2NrX2luaXQoJm5hbWUsICJsb2NrZGVwX25hbWVfc3RyaW5nIik7CisKKyAgb24gVVAgdGhpcyBpcyBtYXBwZWQgdG8gREVGSU5FX1NQSU5MT0NLKG5hbWUpIGluIGJvdGggY2FzZXMsIG5vdGUKKyAgYWxzbyB0aGF0IGFzIG9mIDMuMTgtcmM2IGFsbCBkZWNsYXJhdGlvbiBpbiB1c2UgYXJlIG9mIHRoZSBfU1RBVElDXworICB2YXJpYW50IChhbmQgaXQgc2VlbXMgdGhhdCB0aGUgbm9uLXN0YXRpYyB3YXMgbmV2ZXIgaW4gdXNlKS4KKyAgbGdfbG9ja19pbml0IGlzIGluaXRpYWxpemluZyB0aGUgbG9ja2RlcCBtYXAgb25seS4KKworVXNhZ2U6CistLS0tLS0KKworRnJvbSB0aGUgbG9ja2luZyBzZW1hbnRpY3MgaXQgaXMgYSBzcGlubG9jay4gSXQgY291bGQgYmUgY2FsbGVkIGEKK2xvY2FsaXR5IGF3YXJlIHNwaW5sb2NrLiBsZ19sb2NhbF8qIGJlaGF2ZXMgbGlrZSBhIHBlcl9jcHUKK3NwaW5sb2NrIGFuZCBsZ19nbG9iYWxfKiBsaWtlIGEgZ2xvYmFsIHNwaW5sb2NrLgorTm8gc3VycHJpc2VzIGluIHRoZSBBUEkuCisKKyAgbGdfbG9jYWxfbG9jaygqbGdsb2NrKTsKKyAgICAgYWNjZXNzIHRvIHByb3RlY3RlZCBwZXJfY3B1IG9iamVjdCBvbiB0aGlzIENQVQorICBsZ19sb2NhbF91bmxvY2soKmxnbG9jayk7CisKKyAgbGdfbG9jYWxfbG9ja19jcHUoKmxnbG9jaywgY3B1KTsKKyAgICAgYWNjZXNzIHRvIHByb3RlY3RlZCBwZXJfY3B1IG9iamVjdCBvbiBvdGhlciBDUFUgY3B1CisgIGxnX2xvY2FsX3VubG9ja19jcHUoKmxnbG9jaywgY3B1KTsKKworICBsZ19nbG9iYWxfbG9jaygqbGdsb2NrKTsKKyAgICAgYWNjZXNzIGFsbCBwcm90ZWN0ZWQgcGVyX2NwdSBvYmplY3RzIG9uIGFsbCBDUFVzCisgIGxnX2dsb2JhbF91bmxvY2soKmxnbG9jayk7CisKKyAgVGhlcmUgYXJlIG5vIF90cnlsb2NrIHZhcmlhbnRzIG9mIHRoZSBsZ2xvY2tzLgorCitOb3RlIHRoYXQgdGhlIGxnX2dsb2JhbF9sb2NrL3VubG9jayBoYXMgdG8gaXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJsZQorQ1BVcyByYXRoZXIgdGhhbiB0aGUgYWN0dWFsbHkgcHJlc2VudCBDUFVzIG9yIGEgQ1BVIGNvdWxkIGdvIG9mZi1saW5lCit3aXRoIGEgaGVsZCBsb2NrIFs0XSBhbmQgdGhhdCBtYWtlcyBpdCB2ZXJ5IGV4cGVuc2l2ZS4gQSBkaXNjdXNzaW9uIG9uCit0aGVzZSBpc3N1ZXMgY2FuIGJlIGZvdW5kIGF0IFs1XQorCitDb25zdHJhaW50czoKKy0tLS0tLS0tLS0tLQorCisgICogY3VycmVudGx5IHRoZSBkZWNsYXJhdGlvbiBvZiBsZ2xvY2tzIGluIGtlcm5lbCBtb2R1bGVzIGlzIG5vdAorICAgIHBvc3NpYmxlLCB0aG91Z2ggdGhpcyBzaG91bGQgYmUgZG9hYmxlIHdpdGggbGl0dGxlIGNoYW5nZS4KKyAgKiBsZ2xvY2tzIGFyZSBub3QgcmVjdXJzaXZlLgorICAqIHN1aXRhYmxlIGZvciBjb2RlIHRoYXQgY2FuIGRvIG1vc3Qgb3BlcmF0aW9ucyBvbiB0aGUgQ1BVIGxvY2FsCisgICAgZGF0YSBhbmQgd2lsbCB2ZXJ5IHJhcmVseSBuZWVkIHRoZSBnbG9iYWwgbG9jaworICAqIGxnX2dsb2JhbF9sb2NrL3VubG9jayBpcyAqdmVyeSogZXhwZW5zaXZlIGFuZCBkb2VzIG5vdCBzY2FsZQorICAqIG9uIFVQIHN5c3RlbXMgYWxsIGxnXyogcHJpbWl0aXZlcyBhcmUgc2ltcGx5IHNwaW5sb2NrcworICAqIGluIFBSRUVNUFRfUlQgdGhlIHNwaW5sb2NrIGJlY29tZXMgYW4gcnQtbXV0ZXggYW5kIGNhbiBzbGVlcCBidXQKKyAgICBkb2VzIG5vdCBjaGFuZ2UgdGhlIHRhc2tzIHN0YXRlIHdoaWxlIHNsZWVwaW5nIFs2XS4KKyAgKiBpbiBQUkVFTVBUX1JUIHRoZSBwcmVlbXB0X2Rpc2FibGUvZW5hYmxlIGluIGxnX2xvY2FsX2xvY2svdW5sb2NrCisgICAgaXMgZG93bmdyYWRlZCB0byBhIG1pZ3JhdGVfZGlzYWJsZS9lbmFibGUsIHRoZSBvdGhlcgorICAgIHByZWVtcHRfZGlzYWJsZS9lbmFibGUgYXJlIGRvd25ncmFkZWQgdG8gYmFycmllcnMgWzZdLgorICAgIFRoZSBkZWFkbG9jayBub3RlZCBmb3Igbm9uLVJUIGFib3ZlIGlzIHJlc29sdmVkIGR1ZSB0byBydF9tdXRleGVzCisgICAgYm9vc3RpbmcgdGhlIGxvY2staG9sZGVyIGluIHRoaXMgY2FzZSB3aGljaCBhcmNoX3NwaW5fbG9ja3MgZG8KKyAgICBub3QgZG8uCisKK2xnbG9ja3Mgd2VyZSBkZXNpZ25lZCBmb3IgdmVyeSBzcGVjaWZpYyBwcm9ibGVtcyBpbiB0aGUgVkZTIGFuZCBwcm9iYWJseQorb25seSBhcmUgdGhlIHJpZ2h0IGFuc3dlciBpbiB0aGVzZSBjb3JuZXIgY2FzZXMuIEFueSBuZXcgdXNlciB0aGF0IGxvb2tzCithdCBsZ2xvY2tzIHByb2JhYmx5IHdhbnRzIHRvIGxvb2sgYXQgdGhlIHNlcWxvY2sgYW5kIFJDVSBhbHRlcm5hdGl2ZXMgYXMKK2hlciBmaXJzdCBjaG9pY2UuIFRoZXJlIGFyZSBhbHNvIGVmZm9ydHMgdG8gcmVzb2x2ZSB0aGUgUkNVIGlzc3VlcyB0aGF0CitjdXJyZW50bHkgcHJldmVudCB1c2luZyBSQ1UgaW4gcGxhY2Ugb2YgdmlldyByZW1haW5pbmcgbGdsb2Nrcy4KKworTm90ZSBvbiBicmxvY2sgaGlzdG9yeToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnQmlnIFJlYWRlcicgcmVhZC13cml0ZSBzcGlubG9ja3Mgd2VyZSBvcmlnaW5hbGx5IGludHJvZHVjZWQgYnkKK0luZ28gTW9sbmFyIGluIDIwMDAgKDIuNC8yLjUga2VybmVsIHNlcmllcykgYW5kIHJlbW92ZWQgaW4gMjAwMy4gVGhleQorbGF0ZXIgd2VyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBWRlMgc2NhbGFiaWxpdHkgcGF0Y2ggc2V0IGluIDIuNiBzZXJpZXMKK2FnYWluIGFzIHRoZSAiYmlnIHJlYWRlciBsb2NrIiBicmxvY2sgWzJdIHZhcmlhbnQgb2YgbGdsb2NrIHdoaWNoIGhhcworYmVlbiByZXBsYWNlZCBieSBzZXFsb2NrIHByaW1pdGl2ZXMgb3IgYnkgUkNVIGJhc2VkIHByaW1pdGl2ZXMgaW4gdGhlCiszLjEzIGtlcm5lbCBzZXJpZXMgYXMgd2FzIHN1Z2dlc3RlZCBpbiBbM10gaW4gMjAwMy4gVGhlIGJybG9jayB3YXMKK2VudGlyZWx5IHJlbW92ZWQgaW4gdGhlIDMuMTMga2VybmVsIHNlcmllcy4KKworTGluazogMSBodHRwOi8vbGttbC5vcmcvbGttbC8yMDEwLzgvMi84MQorTGluazogMiBodHRwOi8vbHduLm5ldC9BcnRpY2xlcy80MDE3MzgvCitMaW5rOiAzIGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDMvMy85LzIwNQorTGluazogNCBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMS84LzI0LzE4NQorTGluazogNSBodHRwOi8vbGttbC5vcmcvbGttbC8yMDExLzEyLzE4LzE4OQorTGluazogNiBodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcHJvamVjdHMvcnQvCisgICAgICAgIHBhdGNoIHNlcmllcyAtIGxnbG9ja3MtcnQucGF0Y2gucGF0Y2gKK0xpbms6IDcgaHR0cDovL2xrbWwub3JnL2xrbWwvMjAxMi8zLzUvMjYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAppbmRleCAyMmE5NjljLi43ZWUyYWU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CkBAIC0xMjEsMjIgKzEyMSwyMiBAQAogVGhlIHNldCBvZiBhY2Nlc3NlcyBhcyBzZWVuIGJ5IHRoZSBtZW1vcnkgc3lzdGVtIGluIHRoZSBtaWRkbGUgY2FuIGJlIGFycmFuZ2VkCiBpbiAyNCBkaWZmZXJlbnQgY29tYmluYXRpb25zOgogCi0JU1RPUkUgQT0zLAlTVE9SRSBCPTQsCXg9TE9BRCBBLT4zLAl5PUxPQUQgQi0+NAotCVNUT1JFIEE9MywJU1RPUkUgQj00LAl5PUxPQUQgQi0+NCwJeD1MT0FEIEEtPjMKLQlTVE9SRSBBPTMsCXg9TE9BRCBBLT4zLAlTVE9SRSBCPTQsCXk9TE9BRCBCLT40Ci0JU1RPUkUgQT0zLAl4PUxPQUQgQS0+MywJeT1MT0FEIEItPjIsCVNUT1JFIEI9NAotCVNUT1JFIEE9MywJeT1MT0FEIEItPjIsCVNUT1JFIEI9NCwJeD1MT0FEIEEtPjMKLQlTVE9SRSBBPTMsCXk9TE9BRCBCLT4yLAl4PUxPQUQgQS0+MywJU1RPUkUgQj00Ci0JU1RPUkUgQj00LAlTVE9SRSBBPTMsCXg9TE9BRCBBLT4zLAl5PUxPQUQgQi0+NAorCVNUT1JFIEE9MywJU1RPUkUgQj00LAl5PUxPQUQgQS0+MywJeD1MT0FEIEItPjQKKwlTVE9SRSBBPTMsCVNUT1JFIEI9NCwJeD1MT0FEIEItPjQsCXk9TE9BRCBBLT4zCisJU1RPUkUgQT0zLAl5PUxPQUQgQS0+MywJU1RPUkUgQj00LAl4PUxPQUQgQi0+NAorCVNUT1JFIEE9MywJeT1MT0FEIEEtPjMsCXg9TE9BRCBCLT4yLAlTVE9SRSBCPTQKKwlTVE9SRSBBPTMsCXg9TE9BRCBCLT4yLAlTVE9SRSBCPTQsCXk9TE9BRCBBLT4zCisJU1RPUkUgQT0zLAl4PUxPQUQgQi0+MiwJeT1MT0FEIEEtPjMsCVNUT1JFIEI9NAorCVNUT1JFIEI9NCwJU1RPUkUgQT0zLAl5PUxPQUQgQS0+MywJeD1MT0FEIEItPjQKIAlTVE9SRSBCPTQsIC4uLgogCS4uLgogCiBhbmQgY2FuIHRodXMgcmVzdWx0IGluIGZvdXIgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXM6CiAKLQl4ID09IDEsIHkgPT0gMgotCXggPT0gMSwgeSA9PSA0Ci0JeCA9PSAzLCB5ID09IDIKLQl4ID09IDMsIHkgPT0gNAorCXggPT0gMiwgeSA9PSAxCisJeCA9PSAyLCB5ID09IDMKKwl4ID09IDQsIHkgPT0gMQorCXggPT0gNCwgeSA9PSAzCiAKIAogRnVydGhlcm1vcmUsIHRoZSBzdG9yZXMgY29tbWl0dGVkIGJ5IGEgQ1BVIHRvIHRoZSBtZW1vcnkgc3lzdGVtIG1heSBub3QgYmUKQEAgLTY5NCw2ICs2OTQsMjQgQEAKIGlkZW50aWNhbCwgYXMgbm90ZWQgZWFybGllciwgdGhlIGNvbXBpbGVyIGNvdWxkIHB1bGwgdGhpcyBzdG9yZSBvdXRzaWRlCiBvZiB0aGUgJ2lmJyBzdGF0ZW1lbnQuCiAKK1lvdSBtdXN0IGFsc28gYmUgY2FyZWZ1bCBub3QgdG8gcmVseSB0b28gbXVjaCBvbiBib29sZWFuIHNob3J0LWNpcmN1aXQKK2V2YWx1YXRpb24uICBDb25zaWRlciB0aGlzIGV4YW1wbGU6CisKKwlxID0gQUNDRVNTX09OQ0UoYSk7CisJaWYgKGEgfHwgMSA+IDApCisJCUFDQ0VTU19PTkNFKGIpID0gMTsKKworQmVjYXVzZSB0aGUgc2Vjb25kIGNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZSwgdGhlIGNvbXBpbGVyIGNhbiB0cmFuc2Zvcm0KK3RoaXMgZXhhbXBsZSBhcyBmb2xsb3dpbmcsIGRlZmVhdGluZyBjb250cm9sIGRlcGVuZGVuY3k6CisKKwlxID0gQUNDRVNTX09OQ0UoYSk7CisJQUNDRVNTX09OQ0UoYikgPSAxOworCitUaGlzIGV4YW1wbGUgdW5kZXJzY29yZXMgdGhlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGNhbm5vdAorb3V0LWd1ZXNzIHlvdXIgY29kZS4gIE1vcmUgZ2VuZXJhbGx5LCBhbHRob3VnaCBBQ0NFU1NfT05DRSgpIGRvZXMgZm9yY2UKK3RoZSBjb21waWxlciB0byBhY3R1YWxseSBlbWl0IGNvZGUgZm9yIGEgZ2l2ZW4gbG9hZCwgaXQgZG9lcyBub3QgZm9yY2UKK3RoZSBjb21waWxlciB0byB1c2UgdGhlIHJlc3VsdHMuCisKIEZpbmFsbHksIGNvbnRyb2wgZGVwZW5kZW5jaWVzIGRvIC1ub3QtIHByb3ZpZGUgdHJhbnNpdGl2aXR5LiAgVGhpcyBpcwogZGVtb25zdHJhdGVkIGJ5IHR3byByZWxhdGVkIGV4YW1wbGVzLCB3aXRoIHRoZSBpbml0aWFsIHZhbHVlcyBvZgogeCBhbmQgeSBib3RoIGJlaW5nIHplcm86CkBAIC0yNDY1LDEwICsyNDgzLDE1IEBACiAgICAgIFBsZWFzZSByZWZlciB0byB0aGUgUENJIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaW50ZXJhY3Rpb25zCiAgICAgIGJldHdlZW4gUENJIHRyYW5zYWN0aW9ucy4KIAotICgqKSByZWFkWF9yZWxheGVkKCkKKyAoKikgcmVhZFhfcmVsYXhlZCgpLCB3cml0ZVhfcmVsYXhlZCgpCiAKLSAgICAgVGhlc2UgYXJlIHNpbWlsYXIgdG8gcmVhZFgoKSwgYnV0IGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBvcmRlcmVkIGluIGFueQotICAgICB3YXkuIEJlIGF3YXJlIHRoYXQgdGhlcmUgaXMgbm8gSS9PIHJlYWQgYmFycmllciBhdmFpbGFibGUuCisgICAgIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHJlYWRYKCkgYW5kIHdyaXRlWCgpLCBidXQgcHJvdmlkZSB3ZWFrZXIgbWVtb3J5CisgICAgIG9yZGVyaW5nIGd1YXJhbnRlZXMuIFNwZWNpZmljYWxseSwgdGhleSBkbyBub3QgZ3VhcmFudGVlIG9yZGVyaW5nIHdpdGgKKyAgICAgcmVzcGVjdCB0byBub3JtYWwgbWVtb3J5IGFjY2Vzc2VzIChlLmcuIERNQSBidWZmZXJzKSBub3IgZG8gdGhleSBndWFyYW50ZWUKKyAgICAgb3JkZXJpbmcgd2l0aCByZXNwZWN0IHRvIExPQ0sgb3IgVU5MT0NLIG9wZXJhdGlvbnMuIElmIHRoZSBsYXR0ZXIgaXMKKyAgICAgcmVxdWlyZWQsIGFuIG1taW93YigpIGJhcnJpZXIgY2FuIGJlIHVzZWQuIE5vdGUgdGhhdCByZWxheGVkIGFjY2Vzc2VzIHRvCisgICAgIHRoZSBzYW1lIHBlcmlwaGVyYWwgYXJlIGd1YXJhbnRlZWQgdG8gYmUgb3JkZXJlZCB3aXRoIHJlc3BlY3QgdG8gZWFjaAorICAgICBvdGhlci4KIAogICgqKSBpb3JlYWRYKCksIGlvd3JpdGVYKCkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uaW9zMi9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL25pb3MyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTRhNjdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uaW9zMi9SRUFETUUKQEAgLTAsMCArMSwyMyBAQAorTGludXggb24gdGhlIE5pb3MgSUkgYXJjaGl0ZWN0dXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhIHBvcnQgb2YgTGludXggdG8gTmlvcyBJSSAobmlvczIpIHByb2Nlc3Nvci4KKworSW4gb3JkZXIgdG8gY29tcGlsZSBmb3IgTmlvcyBJSSwgeW91IG5lZWQgYSB2ZXJzaW9uIG9mIEdDQyB3aXRoIHN1cHBvcnQgZm9yIHRoZSBnZW5lcmljCitzeXN0ZW0gY2FsbCBBQkkuIFBsZWFzZSBzZWUgdGhpcyBsaW5rIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBjb21waWxpbmcgYW5kIGJvb3RpbmcKK3NvZnR3YXJlIGZvciB0aGUgTmlvcyBJSSBwbGF0Zm9ybToKK2h0dHA6Ly93d3cucm9ja2V0Ym9hcmRzLm9yZy9mb3N3aWtpL0RvY3VtZW50YXRpb24vTmlvc0lJTGludXhVc2VyTWFudWFsCisKK0ZvciByZWZlcmVuY2UsIHBsZWFzZSBzZWUgdGhlIGZvbGxvd2luZyBsaW5rOgoraHR0cDovL3d3dy5hbHRlcmEuY29tL2xpdGVyYXR1cmUvbGl0LW5pbzIuanNwCisKK1doYXQgaXMgTmlvcyBJST8KKz09PT09PT09PT09PT09PT0KK05pb3MgSUkgaXMgYSAzMi1iaXQgZW1iZWRkZWQtcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIHRoZQorQWx0ZXJhIGZhbWlseSBvZiBGUEdBcy4gSW4gb3JkZXIgdG8gc3VwcG9ydCBMaW51eCwgTmlvcyBJSSBuZWVkcyB0byBiZSBjb25maWd1cmVkCit3aXRoIE1NVSBhbmQgaGFyZHdhcmUgbXVsdGlwbGllciBlbmFibGVkLgorCitOaW9zIElJIEFCSQorPT09PT09PT09PT0KK1BsZWFzZSByZWZlciB0byBjaGFwdGVyICJBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIiBpbiBOaW9zIElJIFByb2Nlc3NvciBSZWZlcmVuY2UKK0hhbmRib29rLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2xpYnNhcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbGlic2FzLnR4dAppbmRleCAzY2M5Yzc4Li44Y2FjNjQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvbGlic2FzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbGlic2FzLnR4dApAQCAtMjI2LDkgKzIyNiw2IEBACiAJbXlfaGEtPnNhc19oYS5sbGRkX2Rldl9mb3VuZCA9IG15X2Rldl9mb3VuZDsKIAlteV9oYS0+c2FzX2hhLmxsZGRfZGV2X2dvbmUgPSBteV9kZXZfZ29uZTsKIAotCW15X2hhLT5zYXNfaGEubGxkZF9tYXhfZXhlY3V0ZV9udW0gPSBsbGRkX21heF9leGVjdXRlX251bTsgKDEpCi0KLQlteV9oYS0+c2FzX2hhLmxsZGRfcXVldWVfc2l6ZSA9IGhhX2Nhbl9xdWV1ZTsKIAlteV9oYS0+c2FzX2hhLmxsZGRfZXhlY3V0ZV90YXNrID0gbXlfZXhlY3V0ZV90YXNrOwogCiAJbXlfaGEtPnNhc19oYS5sbGRkX2Fib3J0X3Rhc2sgICAgID0gbXlfYWJvcnRfdGFzazsKQEAgLTI0NywyOCArMjQ0LDYgQEAKIAlyZXR1cm4gc2FzX3JlZ2lzdGVyX2hhKCZteV9oYS0+c2FzX2hhKTsKIH0KIAotKDEpIFRoaXMgaXMgbm9ybWFsbHkgYSBMTEREIHBhcmFtZXRlciwgc29tZXRoaW5nIG9mIHRoZQotbGluZXMgb2YgYSB0YXNrIGNvbGxlY3Rvci4gIFdoYXQgaXQgdGVsbHMgdGhlIFNBUyBMYXllciBpcwotd2hldGhlciB0aGUgU0FTIGxheWVyIHNob3VsZCBydW4gaW4gRGlyZWN0IE1vZGUgKGRlZmF1bHQ6Ci12YWx1ZSAwIG9yIDEpIG9yIFRhc2sgQ29sbGVjdG9yIE1vZGUgKHZhbHVlIGdyZWF0ZXIgdGhhbiAxKS4KLQotSW4gRGlyZWN0IE1vZGUsIHRoZSBTQVMgTGF5ZXIgY2FsbHMgRXhlY3V0ZSBUYXNrIGFzIHNvb24gYXMKLWl0IGhhcyBhIGNvbW1hbmQgdG8gc2VuZCB0byB0aGUgU0RTLCBfYW5kXyB0aGlzIGlzIGEgc2luZ2xlCi1jb21tYW5kLCBpLmUuIG5vdCBsaW5rZWQuCi0KLVNvbWUgaGFyZHdhcmUgKGUuZy4gYWljOTR4eCkgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIERNQSBtb3JlCi10aGFuIG9uZSB0YXNrIGF0IGEgdGltZSAoaW50ZXJydXB0KSBmcm9tIGhvc3QgbWVtb3J5LiAgVGFzawotQ29sbGVjdG9yIE1vZGUgaXMgYW4gb3B0aW9uYWwgZmVhdHVyZSBmb3IgSEFzIHdoaWNoIHN1cHBvcnQKLXRoaXMgaW4gdGhlaXIgaGFyZHdhcmUuICAoQWdhaW4sIGl0IGlzIGNvbXBsZXRlbHkgb3B0aW9uYWwKLWV2ZW4gaWYgeW91ciBoYXJkd2FyZSBzdXBwb3J0cyBpdC4pCi0KLUluIFRhc2sgQ29sbGVjdG9yIE1vZGUsIHRoZSBTQVMgTGF5ZXIgd291bGQgZG8gX25hdHVyYWxfCi1jb2FsZXNjaW5nIG9mIHRhc2tzIGFuZCBhdCB0aGUgYXBwcm9wcmlhdGUgbW9tZW50IGl0IHdvdWxkCi1jYWxsIHlvdXIgZHJpdmVyIHRvIERNQSBtb3JlIHRoYW4gb25lIHRhc2sgaW4gYSBzaW5nbGUgSEEKLWludGVycnVwdC4gRE1CUyBtYXkgd2FudCB0byB1c2UgdGhpcyBieSBpbnNtb2QvbW9kcHJvYmUKLXNldHRpbmcgdGhlIGxsZGRfbWF4X2V4ZWN1dGVfbnVtIHRvIHNvbWV0aGluZyBncmVhdGVyIHRoYW4KLTEuCi0KICgyKSBTQVMgMS4xIGRvZXMgbm90IGRlZmluZSBJX1QgTmV4dXMgUmVzZXQgVE1GLgogCiBFdmVudHMKQEAgLTMyNSw3MSArMzAwLDIyIEBACiAKIFRoZSBFeGVjdXRlIENvbW1hbmQgU0NTSSBSUEM6CiAKLQlpbnQgKCpsbGRkX2V4ZWN1dGVfdGFzaykoc3RydWN0IHNhc190YXNrICosIGludCBudW0sCi0JCQkJIHVuc2lnbmVkIGxvbmcgZ2ZwX2ZsYWdzKTsKKwlpbnQgKCpsbGRkX2V4ZWN1dGVfdGFzaykoc3RydWN0IHNhc190YXNrICosIGdmcF90IGdmcF9mbGFncyk7CiAKLVVzZWQgdG8gcXVldWUgYSB0YXNrIHRvIHRoZSBTQVMgTExERC4gIEB0YXNrIGlzIHRoZSB0YXNrcyB0bwotYmUgZXhlY3V0ZWQuICBAbnVtIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIHRhc2tzIGJlaW5nCi1xdWV1ZWQgYXQgdGhpcyBmdW5jdGlvbiBjYWxsICh0aGV5IGFyZSBsaW5rZWQgbGlzdGVkIHZpYQotdGFzazo6bGlzdCksIEBnZnBfbWFzayBzaG91bGQgYmUgdGhlIGdmcF9tYXNrIGRlZmluaW5nIHRoZQotY29udGV4dCBvZiB0aGUgY2FsbGVyLgorVXNlZCB0byBxdWV1ZSBhIHRhc2sgdG8gdGhlIFNBUyBMTERELiAgQHRhc2sgaXMgdGhlIHRhc2sgdG8gYmUgZXhlY3V0ZWQuCitAZ2ZwX21hc2sgaXMgdGhlIGdmcF9tYXNrIGRlZmluaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsZXIuCiAKIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGltcGxlbWVudCB0aGUgRXhlY3V0ZSBDb21tYW5kIFNDU0kgUlBDLAotb3IgaWYgeW91J3JlIHNlbmRpbmcgYSBTQ1NJIFRhc2sgYXMgbGlua2VkIGNvbW1hbmRzLCB5b3UKLXNob3VsZCBhbHNvIHVzZSB0aGlzIGZ1bmN0aW9uLgogCi1UaGF0IGlzLCB3aGVuIGxsZGRfZXhlY3V0ZV90YXNrKCkgaXMgY2FsbGVkLCB0aGUgY29tbWFuZChzKQorVGhhdCBpcywgd2hlbiBsbGRkX2V4ZWN1dGVfdGFzaygpIGlzIGNhbGxlZCwgdGhlIGNvbW1hbmQKIGdvIG91dCBvbiB0aGUgdHJhbnNwb3J0ICppbW1lZGlhdGVseSouICBUaGVyZSBpcyAqbm8qCiBxdWV1aW5nIG9mIGFueSBzb3J0IGFuZCBhdCBhbnkgbGV2ZWwgaW4gYSBTQVMgTExERC4KIAotVGhlIHVzZSBvZiB0YXNrOjpsaXN0IGlzIHR3by1mb2xkLCBvbmUgZm9yIGxpbmtlZCBjb21tYW5kcywKLXRoZSBvdGhlciBkaXNjdXNzZWQgYmVsb3cuCi0KLUl0IGlzIHBvc3NpYmxlIHRvIHF1ZXVlIHVwIG1vcmUgdGhhbiBvbmUgdGFzayBhdCBhIHRpbWUsIGJ5Ci1pbml0aWFsaXppbmcgdGhlIGxpc3QgZWxlbWVudCBvZiBzdHJ1Y3Qgc2FzX3Rhc2ssIGFuZAotcGFzc2luZyB0aGUgbnVtYmVyIG9mIHRhc2tzIGVubGlzdGVkIGluIHRoaXMgbWFubmVyIGluIG51bS4KLQogUmV0dXJuczogLVNBU19RVUVVRV9GVUxMLCAtRU5PTUVNLCBub3RoaW5nIHdhcyBxdWV1ZWQ7CiAJIDAsIHRoZSB0YXNrKHMpIHdlcmUgcXVldWVkLgogCi1JZiB5b3Ugd2FudCB0byBwYXNzIG51bSA+IDEsIHRoZW4gZWl0aGVyCi1BKSB5b3UncmUgdGhlIG9ubHkgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGtlZXAgdHJhY2sKLSAgIG9mIHdoYXQgeW91J3ZlIHF1ZXVlZCB0byB0aGUgTExERCwgb3IKLUIpIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nIGFuZCBoYXZlIGEgc3RyYXRlZ3kgb2YKLSAgIHJldHJ5aW5nLgotCi1BcyBvcHBvc2VkIHRvIHF1ZXVpbmcgb25lIHRhc2sgYXQgYSB0aW1lIChmdW5jdGlvbiBjYWxsKSwKLWJhdGNoIHF1ZXVpbmcgb2YgdGFza3MsIGJ5IGhhdmluZyBudW0gPiAxLCBncmVhdGx5Ci1zaW1wbGlmaWVzIExMREQgY29kZSwgc2VxdWVuY2VyIGNvZGUsIGFuZCBfaGFyZHdhcmUgZGVzaWduXywKLWFuZCBoYXMgc29tZSBwZXJmb3JtYW5jZSBhZHZhbnRhZ2VzIGluIGNlcnRhaW4gc2l0dWF0aW9ucwotKERCTVMpLgotCi1UaGUgTExERCBhZHZlcnRpc2VzIGlmIGl0IGNhbiB0YWtlIG1vcmUgdGhhbiBvbmUgY29tbWFuZCBhdAotYSB0aW1lIGF0IGxsZGRfZXhlY3V0ZV90YXNrKCksIGJ5IHNldHRpbmcgdGhlCi1sbGRkX21heF9leGVjdXRlX251bSBwYXJhbWV0ZXIgKGNvbnRyb2xsZWQgYnkgImNvbGxlY3RvciIKLW1vZHVsZSBwYXJhbWV0ZXIgaW4gYWljOTR4eCBTQVMgTExERCkuCi0KLVlvdSBzaG91bGQgbGVhdmUgdGhpcyB0byB0aGUgZGVmYXVsdCAxLCB1bmxlc3MgeW91IGtub3cgd2hhdAoteW91J3JlIGRvaW5nLgotCi1UaGlzIGlzIGEgZnVuY3Rpb24gb2YgdGhlIExMREQsIHRvIHdoaWNoIHRoZSBTQVMgbGF5ZXIgY2FuCi1jYXRlciB0by4KLQotaW50IGxsZGRfcXVldWVfc2l6ZQotCVRoZSBob3N0IGFkYXB0ZXIncyBxdWV1ZSBzaXplLiAgVGhpcyBpcyB0aGUgbWF4aW11bQotbnVtYmVyIG9mIGNvbW1hbmRzIHRoZSBsbGRkIGNhbiBoYXZlIHBlbmRpbmcgdG8gZG9tYWluCi1kZXZpY2VzIG9uIGJlaGFsZiBvZiBhbGwgdXBwZXIgbGF5ZXJzIHN1Ym1pdHRpbmcgdGhyb3VnaAotbGxkZF9leGVjdXRlX3Rhc2soKS4KLQotWW91IHJlYWxseSB3YW50IHRvIHNldCB0aGlzIHRvIHNvbWV0aGluZyAobXVjaCkgbGFyZ2VyIHRoYW4KLTEuCi0KLVRoaXMgX3JlYWxseV8gaGFzIGFic29sdXRlbHkgbm90aGluZyB0byBkbyB3aXRoIHF1ZXVpbmcuCi1UaGVyZSBpcyBubyBxdWV1aW5nIGluIFNBUyBMTEREcy4KLQogc3RydWN0IHNhc190YXNrIHsKIAlkZXYgLS0gdGhlIGRldmljZSB0aGlzIHRhc2sgaXMgZGVzdGluZWQgdG8KLQlsaXN0IC0tIG11c3QgYmUgaW5pdGlhbGl6ZWQgKElOSVRfTElTVF9IRUFEKQogCXRhc2tfcHJvdG8gLS0gX29uZV8gb2YgZW51bSBzYXNfcHJvdG8KIAlzY2F0dGVyIC0tIHBvaW50ZXIgdG8gc2NhdHRlciBnYXRoZXIgbGlzdCBhcnJheQogCW51bV9zY2F0dGVyIC0tIG51bWJlciBvZiBlbGVtZW50cyBpbiBzY2F0dGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKaW5kZXggZDZhOWJkZS4uNzMxYmM0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dApAQCAtMTQ5LDcgKzE0OSw3IEBACiBzY3NpX3NjYW5faG9zdCgpICAtLS0tLS0tKwogICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQotICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAtLT4gIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkgLS0+ICBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpCiAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpCkBAIC0xNTksNyArMTU5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJZiB0aGUgTExEIHdhbnRzIHRvIGFkanVzdCB0aGUgZGVmYXVsdCBxdWV1ZSBzZXR0aW5ncywgaXQgY2FuIGludm9rZQotc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKSBpbiBpdHMgc2xhdmVfY29uZmlndXJlKCkgcm91dGluZS4KK3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKCkgaW4gaXRzIHNsYXZlX2NvbmZpZ3VyZSgpIHJvdXRpbmUuCiAKICoqKiBGb3Igc2NzaSBkZXZpY2VzIHRoYXQgdGhlIG1pZCBsZXZlbCB0cmllcyB0byBzY2FuIGJ1dCBkbyBub3QKICAgICByZXNwb25kLCBhIHNsYXZlX2FsbG9jKCksIHNsYXZlX2Rlc3Ryb3koKSBwYWlyIGlzIGNhbGxlZC4KQEAgLTIwMyw3ICsyMDMsNyBAQAogc2NzaV9hZGRfZGV2aWNlKCkgIC0tLS0tLSsKICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKLSAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkgICBbLS0+IHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCldCisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpICAgWy0tPiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpXQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEluIGEgc2ltaWxhciBmYXNoaW9uLCBhbiBMTEQgbWF5IGJlY29tZSBhd2FyZSB0aGF0IGEgU0NTSSBkZXZpY2UgaGFzIGJlZW4KQEAgLTI2MSw3ICsyNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgc2NzaV9yZWdpc3RlcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKLSAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAgLS0+ICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkgIC0tPiAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoKQogICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkgICAqKioKICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkgKioqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtMjcxLDkgKzI3MSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpICoqKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBtaWQgbGV2ZWwgaW52b2tlcyBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpIHdpdGggdGFnZ2VkIHF1ZXVpbmcgb2ZmIGFuZAotImNtZF9wZXJfbHVuIiBmb3IgdGhhdCBob3N0IGFzIHRoZSBxdWV1ZSBsZW5ndGguIFRoZXNlIHNldHRpbmdzIGNhbiBiZQotb3ZlcnJpZGRlbiBieSBhIHNsYXZlX2NvbmZpZ3VyZSgpIHN1cHBsaWVkIGJ5IHRoZSBMTEQuCitUaGUgbWlkIGxldmVsIGludm9rZXMgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoKSB3aXRoICJjbWRfcGVyX2x1biIgZm9yIHRoYXQKK2hvc3QgYXMgdGhlIHF1ZXVlIGxlbmd0aC4gVGhlc2Ugc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYQorc2xhdmVfY29uZmlndXJlKCkgc3VwcGxpZWQgYnkgdGhlIExMRC4KIAogKioqIEZvciBzY3NpIGRldmljZXMgdGhhdCB0aGUgbWlkIGxldmVsIHRyaWVzIHRvIHNjYW4gYnV0IGRvIG5vdAogICAgIHJlc3BvbmQsIGEgc2xhdmVfYWxsb2MoKSwgc2xhdmVfZGVzdHJveSgpIHBhaXIgaXMgY2FsbGVkLgpAQCAtMzY2LDEzICszNjYsMTEgQEAKIG5hbWVzIGFsbCBzdGFydCB3aXRoICJzY3NpXyIuCiAKIFN1bW1hcnk6Ci0gICBzY3NpX2FjdGl2YXRlX3RjcSAtIHR1cm4gb24gdGFnIGNvbW1hbmQgcXVldWVpbmcKICAgIHNjc2lfYWRkX2RldmljZSAtIGNyZWF0ZXMgbmV3IHNjc2kgZGV2aWNlIChsdSkgaW5zdGFuY2UKICAgIHNjc2lfYWRkX2hvc3QgLSBwZXJmb3JtIHN5c2ZzIHJlZ2lzdHJhdGlvbiBhbmQgc2V0IHVwIHRyYW5zcG9ydCBjbGFzcwotICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGggLSBjaGFuZ2UgdGhlIHF1ZXVlIGRlcHRoIG9uIGEgU0NTSSBkZXZpY2UKKyAgIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gY2hhbmdlIHRoZSBxdWV1ZSBkZXB0aCBvbiBhIFNDU0kgZGV2aWNlCiAgICBzY3NpX2Jpb3NfcHRhYmxlIC0gcmV0dXJuIGNvcHkgb2YgYmxvY2sgZGV2aWNlJ3MgcGFydGl0aW9uIHRhYmxlCiAgICBzY3NpX2Jsb2NrX3JlcXVlc3RzIC0gcHJldmVudCBmdXJ0aGVyIGNvbW1hbmRzIGJlaW5nIHF1ZXVlZCB0byBnaXZlbiBob3N0Ci0gICBzY3NpX2RlYWN0aXZhdGVfdGNxIC0gdHVybiBvZmYgdGFnIGNvbW1hbmQgcXVldWVpbmcKICAgIHNjc2lfaG9zdF9hbGxvYyAtIHJldHVybiBhIG5ldyBzY3NpX2hvc3QgaW5zdGFuY2Ugd2hvc2UgcmVmY291bnQ9PTEKICAgIHNjc2lfaG9zdF9nZXQgLSBpbmNyZW1lbnRzIFNjc2lfSG9zdCBpbnN0YW5jZSdzIHJlZmNvdW50CiAgICBzY3NpX2hvc3RfcHV0IC0gZGVjcmVtZW50cyBTY3NpX0hvc3QgaW5zdGFuY2UncyByZWZjb3VudCAoZnJlZSBpZiAwKQpAQCAtMzkwLDI0ICszODgsNiBAQAogRGV0YWlsczoKIAogLyoqCi0gKiBzY3NpX2FjdGl2YXRlX3RjcSAtIHR1cm4gb24gdGFnIGNvbW1hbmQgcXVldWVpbmcgKCJvcmRlcmVkIiB0YXNrIGF0dHJpYnV0ZSkKLSAqIEBzZGV2OiAgICAgICBkZXZpY2UgdG8gdHVybiBvbiBUQ1EgZm9yCi0gKiBAZGVwdGg6ICAgICAgcXVldWUgZGVwdGgKLSAqCi0gKiAgICAgIFJldHVybnMgbm90aGluZwotICoKLSAqICAgICAgTWlnaHQgYmxvY2s6IG5vCi0gKgotICogICAgICBOb3RlczogRXZlbnR1YWxseSwgaXQgaXMgaG9wZWQgZGVwdGggd291bGQgYmUgdGhlIG1heGltdW0gZGVwdGgKLSAqICAgICAgdGhlIGRldmljZSBjb3VsZCBjb3BlIHdpdGggYW5kIHRoZSByZWFsIHF1ZXVlIGRlcHRoCi0gKiAgICAgIHdvdWxkIGJlIGFkanVzdGFibGUgZnJvbSAwIHRvIGRlcHRoLgotICoKLSAqICAgICAgRGVmaW5lZCAoaW5saW5lKSBpbjogaW5jbHVkZS9zY3NpL3Njc2lfdGNxLmgKLSAqKi8KLXZvaWQgc2NzaV9hY3RpdmF0ZV90Y3Eoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCi0KLQotLyoqCiAgKiBzY3NpX2FkZF9kZXZpY2UgLSBjcmVhdGVzIG5ldyBzY3NpIGRldmljZSAobHUpIGluc3RhbmNlCiAgKiBAc2hvc3Q6ICAgcG9pbnRlciB0byBzY3NpIGhvc3QgaW5zdGFuY2UKICAqIEBjaGFubmVsOiBjaGFubmVsIG51bWJlciAocmFyZWx5IG90aGVyIHRoYW4gMCkKQEAgLTQ1NiwxMSArNDM2LDggQEAKIAogCiAvKioKLSAqIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoIC0gYWxsb3cgTExEIHRvIGNoYW5nZSBxdWV1ZSBkZXB0aCBvbiBhIFNDU0kgZGV2aWNlCisgKiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIGFsbG93IExMRCB0byBjaGFuZ2UgcXVldWUgZGVwdGggb24gYSBTQ1NJIGRldmljZQogICogQHNkZXY6ICAgICAgIHBvaW50ZXIgdG8gU0NTSSBkZXZpY2UgdG8gY2hhbmdlIHF1ZXVlIGRlcHRoIG9uCi0gKiBAdGFnZ2VkOiAgICAgMCAtIG5vIHRhZ2dlZCBxdWV1aW5nCi0gKiAgICAgICAgICAgICAgTVNHX1NJTVBMRV9UQUcgLSBzaW1wbGUgdGFnZ2VkIHF1ZXVpbmcKLSAqICAgICAgICAgICAgICBNU0dfT1JERVJFRF9UQUcgLSBvcmRlcmVkIHRhZ2dlZCBxdWV1aW5nCiAgKiBAdGFncyAgICAgICAgTnVtYmVyIG9mIHRhZ3MgYWxsb3dlZCBpZiB0YWdnZWQgcXVldWluZyBlbmFibGVkLAogICogICAgICAgICAgICAgIG9yIG51bWJlciBvZiBjb21tYW5kcyB0aGUgTExEIGNhbiBxdWV1ZSB1cAogICogICAgICAgICAgICAgIGluIG5vbi10YWdnZWQgbW9kZSAoYXMgcGVyIGNtZF9wZXJfbHVuKS4KQEAgLTQ3MSwxNSArNDQ4LDEyIEBACiAgKgogICogICAgICBOb3RlczogQ2FuIGJlIGludm9rZWQgYW55IHRpbWUgb24gYSBTQ1NJIGRldmljZSBjb250cm9sbGVkIGJ5IHRoaXMKICAqICAgICAgTExELiBbU3BlY2lmaWNhbGx5IGR1cmluZyBhbmQgYWZ0ZXIgc2xhdmVfY29uZmlndXJlKCkgYW5kIHByaW9yIHRvCi0gKiAgICAgIHNsYXZlX2Rlc3Ryb3koKS5dIENhbiBzYWZlbHkgYmUgaW52b2tlZCBmcm9tIGludGVycnVwdCBjb2RlLiBBY3R1YWwKLSAqICAgICAgcXVldWUgZGVwdGggY2hhbmdlIG1heSBiZSBkZWxheWVkIHVudGlsIHRoZSBuZXh0IGNvbW1hbmQgaXMgYmVpbmcKLSAqICAgICAgcHJvY2Vzc2VkLiBTZWUgYWxzbyBzY3NpX2FjdGl2YXRlX3RjcSgpIGFuZCBzY3NpX2RlYWN0aXZhdGVfdGNxKCkuCisgKiAgICAgIHNsYXZlX2Rlc3Ryb3koKS5dIENhbiBzYWZlbHkgYmUgaW52b2tlZCBmcm9tIGludGVycnVwdCBjb2RlLgogICoKICAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2kuYyBbc2VlIHNvdXJjZSBjb2RlIGZvciBtb3JlIG5vdGVzXQogICoKICAqKi8KLXZvaWQgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICogc2RldiwgaW50IHRhZ2dlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWdzKQoraW50IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZ3MpCiAKIAogLyoqCkBAIC01MTUsMjAgKzQ4OSw2IEBACiAKIAogLyoqCi0gKiBzY3NpX2RlYWN0aXZhdGVfdGNxIC0gdHVybiBvZmYgdGFnIGNvbW1hbmQgcXVldWVpbmcKLSAqIEBzZGV2OiAgICAgICBkZXZpY2UgdG8gdHVybiBvZmYgVENRIGZvcgotICogQGRlcHRoOiAgICAgIHF1ZXVlIGRlcHRoIChzdG9yZWQgaW4gc2RldikKLSAqCi0gKiAgICAgIFJldHVybnMgbm90aGluZwotICoKLSAqICAgICAgTWlnaHQgYmxvY2s6IG5vCi0gKgotICogICAgICBEZWZpbmVkIChpbmxpbmUpIGluOiBpbmNsdWRlL3Njc2kvc2NzaV90Y3EuaAotICoqLwotdm9pZCBzY3NpX2RlYWN0aXZhdGVfdGNxKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQotCi0KLS8qKgogICogc2NzaV9ob3N0X2FsbG9jIC0gY3JlYXRlIGEgc2NzaSBob3N0IGFkYXB0ZXIgaW5zdGFuY2UgYW5kIHBlcmZvcm0gYmFzaWMKICAqICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLgogICogQHNodDogICAgICAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IHRlbXBsYXRlCkBAIC0xMjU0LDcgKzEyMTQsNyBAQAogICAgICAgICAgICAgICAgICAgIGZvciBkaXNrIGZpcm13YXJlIHVwbG9hZHMuCiAgICAgY21kX3Blcl9sdW4gIC0gbWF4aW11bSBudW1iZXIgb2YgY29tbWFuZHMgdGhhdCBjYW4gYmUgcXVldWVkIG9uIGRldmljZXMKICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVkIGJ5IHRoZSBob3N0LiBPdmVycmlkZGVuIGJ5IExMRCBjYWxscyB0bwotICAgICAgICAgICAgICAgICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkuCisgICAgICAgICAgICAgICAgICAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoKS4KICAgICB1bmNoZWNrZWRfaXNhX2RtYSAtIDE9Pm9ubHkgdXNlIGJvdHRvbSAxNiBNQiBvZiByYW0gKElTQSBETUEgYWRkcmVzc2luZwogICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uKSwgMD0+Y2FuIHVzZSBmdWxsIDMyIGJpdCAob3IgYmV0dGVyKSBETUEKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIHNwYWNlCkBAIC0xMjk0LDcgKzEyNTQsNyBAQAogSW5zdGFuY2VzIG9mIHRoaXMgc3RydWN0dXJlIGNvbnZleSBTQ1NJIGNvbW1hbmRzIHRvIHRoZSBMTEQgYW5kIHJlc3BvbnNlcwogYmFjayB0byB0aGUgbWlkIGxldmVsLiBUaGUgU0NTSSBtaWQgbGV2ZWwgd2lsbCBlbnN1cmUgdGhhdCBubyBtb3JlIFNDU0kKIGNvbW1hbmRzIGJlY29tZSBxdWV1ZWQgYWdhaW5zdCB0aGUgTExEIHRoYW4gYXJlIGluZGljYXRlZCBieQotc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKSAob3Igc3RydWN0IFNjc2lfSG9zdDo6Y21kX3Blcl9sdW4pLiBUaGVyZSB3aWxsCitzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpIChvciBzdHJ1Y3QgU2NzaV9Ib3N0OjpjbWRfcGVyX2x1bikuIFRoZXJlIHdpbGwKIGJlIGF0IGxlYXN0IG9uZSBpbnN0YW5jZSBvZiBzdHJ1Y3Qgc2NzaV9jbW5kIGF2YWlsYWJsZSBmb3IgZWFjaCBTQ1NJIGRldmljZS4KIE1lbWJlcnMgb2YgaW50ZXJlc3Q6CiAgICAgY21uZCAgICAgICAgIC0gYXJyYXkgY29udGFpbmluZyBTQ1NJIGNvbW1hbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zdC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0CmluZGV4IGYzNDZhYmIuLjBkNWJkYjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dApAQCAtNTA2LDkgKzUwNiwxMSBAQAogCiBERUJVR0dJTkcgSElOVFMKIAotVG8gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcywgZWRpdCBzdC5jIGFuZCAjZGVmaW5lIERFQlVHIDEuIEFzIHNlZW4KLWFib3ZlLCBkZWJ1Z2dpbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiB3aXRoIGFuIGlvY3RsIGlmIGRlYnVnZ2luZyBpcwotY29tcGlsZWQgaW50byB0aGUgZHJpdmVyLiBUaGUgZGVidWdnaW5nIG91dHB1dCBpcyBub3Qgdm9sdW1pbm91cy4KK0RlYnVnZ2luZyBjb2RlIGlzIG5vdyBjb21waWxlZCBpbiBieSBkZWZhdWx0IGJ1dCBkZWJ1Z2dpbmcgaXMgdHVybmVkIG9mZgord2l0aCB0aGUga2VybmVsIG1vZHVsZSBwYXJhbWV0ZXIgZGVidWdfZmxhZyBkZWZhdWx0aW5nIHRvIDAuICBEZWJ1Z2dpbmcKK2NhbiBzdGlsbCBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmIHdpdGggYW4gaW9jdGwuICBUbyBlbmFibGUgZGVidWcgYXQKK21vZHVsZSBsb2FkIHRpbWUgYWRkIGRlYnVnX2ZsYWc9MSB0byB0aGUgbW9kdWxlIGxvYWQgb3B0aW9ucywgdGhlCitkZWJ1Z2dpbmcgb3V0cHV0IGlzIG5vdCB2b2x1bWlub3VzLgogCiBJZiB0aGUgdGFwZSBzZWVtcyB0byBoYW5nLCBJIHdvdWxkIGJlIHZlcnkgaW50ZXJlc3RlZCB0byBoZWFyIHdoZXJlCiB0aGUgZHJpdmVyIGlzIHdhaXRpbmcuIFdpdGggdGhlIGNvbW1hbmQgJ3BzIC1sJyB5b3UgY2FuIHNlZSB0aGUgc3RhdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS93ZDcxOXgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3dkNzE5eC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxNmIwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS93ZDcxOXgudHh0CkBAIC0wLDAgKzEsMjEgQEAKK0RyaXZlciBmb3IgV2VzdGVybiBEaWdpdGFsIFdENzE5MywgV0Q3MTk3IGFuZCBXRDcyOTYgU0NTSSBjYXJkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjYXJkIHJlcXVpcmVzIGZpcm13YXJlIHRoYXQgY2FuIGJlIGN1dCBvdXQgb2YgdGhlIFdpbmRvd3MgTlQgZHJpdmVyIHRoYXQKK2NhbiBiZSBkb3dubG9hZGVkIGZyb20gV0QgYXQ6CitodHRwOi8vc3VwcG9ydC53ZGMuY29tL3Byb2R1Y3QvZG93bmxvYWQuYXNwP2dyb3VwaWQ9ODAxJnNpZD0yNyZsYW5nPWVuCisKK1RoZXJlIGlzIG5vIGxpY2Vuc2UgYW55d2hlcmUgaW4gdGhlIGZpbGUgb3Igb24gdGhlIHBhZ2UgLSBzbyB0aGUgZmlybXdhcmUKK3Byb2JhYmx5IGNhbm5vdCBiZSBhZGRlZCB0byBsaW51eC1maXJtd2FyZS4KKworVGhpcyBzY3JpcHQgZG93bmxvYWRzIGFuZCBleHRyYWN0cyB0aGUgZmlybXdhcmUsIGNyZWF0aW5nIHdkNzE5eC1yaXNjLmJpbiBhbmQKK2Q3MTl4LXdjcy5iaW4gZmlsZXMuIFB1dCB0aGVtIGluIC9saWIvZmlybXdhcmUvLgorCisjIS9iaW4vc2gKK3dnZXQgaHR0cDovL3N1cHBvcnQud2RjLmNvbS9kb3dubG9hZC9hcmNoaXZlL3BjaXNjc2kuZXhlCitsaGEgeGkgcGNpc2NzaS5leGUgcGNpLXNjc2kuZXhlCitsaGEgeGkgcGNpLXNjc2kuZXhlIG50L3dkNzI5NmEuc3lzCitybSBwY2ktc2NzaS5leGUKK2RkIGlmPXdkNzI5NmEuc3lzIG9mPXdkNzE5eC1yaXNjLmJpbiBicz0xIHNraXA9NTc2MCBjb3VudD0xNDMzNgorZGQgaWY9d2Q3Mjk2YS5zeXMgb2Y9d2Q3MTl4LXdjcy5iaW4gYnM9MSBza2lwPTIwMDk2IGNvdW50PTUxNAorcm0gd2Q3Mjk2YS5zeXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L2ludGVsX21weC50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni9pbnRlbF9tcHgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzJlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Ni9pbnRlbF9tcHgudHh0CkBAIC0wLDAgKzEsMjM0IEBACisxLiBJbnRlbChSKSBNUFggT3ZlcnZpZXcKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnRlbChSKSBNZW1vcnkgUHJvdGVjdGlvbiBFeHRlbnNpb25zIChJbnRlbChSKSBNUFgpIGlzIGEgbmV3IGNhcGFiaWxpdHkKK2ludHJvZHVjZWQgaW50byBJbnRlbCBBcmNoaXRlY3R1cmUuIEludGVsIE1QWCBwcm92aWRlcyBoYXJkd2FyZSBmZWF0dXJlcwordGhhdCBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNvbXBpbGVyIGNoYW5nZXMgdG8gY2hlY2sgbWVtb3J5CityZWZlcmVuY2VzLCBmb3IgdGhvc2UgcmVmZXJlbmNlcyB3aG9zZSBjb21waWxlLXRpbWUgbm9ybWFsIGludGVudGlvbnMgYXJlCit1c3VycGVkIGF0IHJ1bnRpbWUgZHVlIHRvIGJ1ZmZlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gSW50ZWwoUikgQXJjaGl0ZWN0dXJlIEluc3RydWN0aW9uCitTZXQgRXh0ZW5zaW9ucyBQcm9ncmFtbWluZyBSZWZlcmVuY2UsIENoYXB0ZXIgOTogSW50ZWwoUikgTWVtb3J5IFByb3RlY3Rpb24KK0V4dGVuc2lvbnMuCisKK05vdGU6IEN1cnJlbnRseSBubyBoYXJkd2FyZSB3aXRoIE1QWCBJU0EgaXMgYXZhaWxhYmxlIGJ1dCBpdCBpcyBhbHdheXMKK3Bvc3NpYmxlIHRvIHVzZSBTREUgKEludGVsKFIpIFNvZnR3YXJlIERldmVsb3BtZW50IEVtdWxhdG9yKSBpbnN0ZWFkLCB3aGljaAorY2FuIGJlIGRvd25sb2FkZWQgZnJvbQoraHR0cDovL3NvZnR3YXJlLmludGVsLmNvbS9lbi11cy9hcnRpY2xlcy9pbnRlbC1zb2Z0d2FyZS1kZXZlbG9wbWVudC1lbXVsYXRvcgorCisKKzIuIEhvdyB0byBnZXQgdGhlIGFkdmFudGFnZSBvZiBNUFgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIE1QWCB0byB3b3JrLCBjaGFuZ2VzIGFyZSByZXF1aXJlZCBpbiB0aGUga2VybmVsLCBiaW51dGlscyBhbmQgY29tcGlsZXIuCitObyBzb3VyY2UgY2hhbmdlcyBhcmUgcmVxdWlyZWQgZm9yIGFwcGxpY2F0aW9ucywganVzdCBhIHJlY29tcGlsZS4KKworVGhlcmUgYXJlIGEgbG90IG9mIG1vdmluZyBwYXJ0cyBvZiB0aGlzIHRvIGFsbCB3b3JrIHJpZ2h0LiBUaGUgZm9sbG93aW5nCitpcyBob3cgd2UgZXhwZWN0IHRoZSBjb21waWxlciwgYXBwbGljYXRpb24gYW5kIGtlcm5lbCB0byB3b3JrIHRvZ2V0aGVyLgorCisxKSBBcHBsaWNhdGlvbiBkZXZlbG9wZXIgY29tcGlsZXMgd2l0aCAtZm1weC4gVGhlIGNvbXBpbGVyIHdpbGwgYWRkIHRoZQorICAgaW5zdHJ1bWVudGF0aW9uIGFzIHdlbGwgYXMgc29tZSBzZXR1cCBjb2RlIGNhbGxlZCBlYXJseSBhZnRlciB0aGUgYXBwCisgICBzdGFydHMuIE5ldyBpbnN0cnVjdGlvbiBwcmVmaXhlcyBhcmUgbm9vcHMgZm9yIG9sZCBDUFVzLgorMikgVGhhdCBzZXR1cCBjb2RlIGFsbG9jYXRlcyAodmlydHVhbCkgc3BhY2UgZm9yIHRoZSAiYm91bmRzIGRpcmVjdG9yeSIsCisgICBwb2ludHMgdGhlICJibmRjZmd1IiByZWdpc3RlciB0byB0aGUgZGlyZWN0b3J5IGFuZCBub3RpZmllcyB0aGUga2VybmVsCisgICAodmlhIHRoZSBuZXcgcHJjdGwoUFJfTVBYX0VOQUJMRV9NQU5BR0VNRU5UKSkgdGhhdCB0aGUgYXBwIHdpbGwgYmUgdXNpbmcKKyAgIE1QWC4KKzMpIFRoZSBrZXJuZWwgZGV0ZWN0cyB0aGF0IHRoZSBDUFUgaGFzIE1QWCwgYWxsb3dzIHRoZSBuZXcgcHJjdGwoKSB0bworICAgc3VjY2VlZCwgYW5kIG5vdGVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgYm91bmRzIGRpcmVjdG9yeS4gVXNlcnNwYWNlIGlzCisgICBleHBlY3RlZCB0byBrZWVwIHRoZSBib3VuZHMgZGlyZWN0b3J5IGF0IHRoYXQgbG9jYXRpb25XZSBub3RlIGl0CisgICBpbnN0ZWFkIG9mIHJlYWRpbmcgaXQgZWFjaCB0aW1lIGJlY2F1c2UgdGhlICd4c2F2ZScgb3BlcmF0aW9uIG5lZWRlZAorICAgdG8gYWNjZXNzIHRoZSBib3VuZHMgZGlyZWN0b3J5IHJlZ2lzdGVyIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24uCis0KSBJZiB0aGUgYXBwbGljYXRpb24gbmVlZHMgdG8gc3BpbGwgYm91bmRzIG91dCBvZiB0aGUgNCByZWdpc3RlcnMsIGl0CisgICBpc3N1ZXMgYSBibmRzdHggaW5zdHJ1Y3Rpb24uIFNpbmNlIHRoZSBib3VuZHMgZGlyZWN0b3J5IGlzIGVtcHR5IGF0CisgICB0aGlzIHBvaW50LCBhIGJvdW5kcyBmYXVsdCAoI0JSKSBpcyByYWlzZWQsIHRoZSBrZXJuZWwgYWxsb2NhdGVzIGEKKyAgIGJvdW5kcyB0YWJsZSAoaW4gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSkgYW5kIG1ha2VzIHRoZSByZWxldmFudCBlbnRyeQorICAgaW4gdGhlIGJvdW5kcyBkaXJlY3RvcnkgcG9pbnQgdG8gdGhlIG5ldyB0YWJsZS4KKzUpIElmIHRoZSBhcHBsaWNhdGlvbiB2aW9sYXRlcyB0aGUgYm91bmRzIHNwZWNpZmllZCBpbiB0aGUgYm91bmRzIHJlZ2lzdGVycywKKyAgIGEgc2VwYXJhdGUga2luZCBvZiAjQlIgaXMgcmFpc2VkIHdoaWNoIHdpbGwgZGVsaXZlciBhIHNpZ25hbCB3aXRoCisgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmlvbGF0aW9uIGluIHRoZSAnc3RydWN0IHNpZ2luZm8nLgorNikgV2hlbmV2ZXIgbWVtb3J5IGlzIGZyZWVkLCB3ZSBrbm93IHRoYXQgaXQgY2FuIG5vIGxvbmdlciBjb250YWluIHZhbGlkCisgICBwb2ludGVycywgYW5kIHdlIGF0dGVtcHQgdG8gZnJlZSB0aGUgYXNzb2NpYXRlZCBzcGFjZSBpbiB0aGUgYm91bmRzCisgICB0YWJsZXMuIElmIGFuIGVudGlyZSB0YWJsZSBiZWNvbWVzIHVudXNlZCwgd2Ugd2lsbCBhdHRlbXB0IHRvIGZyZWUKKyAgIHRoZSB0YWJsZSBhbmQgcmVtb3ZlIHRoZSBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5LgorCitUbyBzdW1tYXJpemUsIHRoZXJlIGFyZSBlc3NlbnRpYWxseSB0aHJlZSB0aGluZ3MgaW50ZXJhY3RpbmcgaGVyZToKKworR0NDIHdpdGggLWZtcHg6CisgKiBlbmFibGVzIGFubm90YXRpb24gb2YgY29kZSB3aXRoIE1QWCBpbnN0cnVjdGlvbnMgYW5kIHByZWZpeGVzCisgKiBpbnNlcnRzIGNvZGUgZWFybHkgaW4gdGhlIGFwcGxpY2F0aW9uIHRvIGNhbGwgaW4gdG8gdGhlICJnY2MgcnVudGltZSIKK0dDQyBNUFggUnVudGltZToKKyAqIENoZWNrcyBmb3IgaGFyZHdhcmUgTVBYIHN1cHBvcnQgaW4gY3B1aWQgbGVhZgorICogYWxsb2NhdGVzIHZpcnR1YWwgc3BhY2UgZm9yIHRoZSBib3VuZHMgZGlyZWN0b3J5IChtYWxsb2MoKSBlc3NlbnRpYWxseSkKKyAqIHBvaW50cyB0aGUgaGFyZHdhcmUgQk5EQ0ZHVSByZWdpc3RlciBhdCB0aGUgZGlyZWN0b3J5CisgKiBjYWxscyBhIG5ldyBwcmN0bChQUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQpIHRvIG5vdGlmeSB0aGUga2VybmVsIHRvCisgICBzdGFydCBtYW5hZ2luZyB0aGUgYm91bmRzIGRpcmVjdG9yaWVzCitLZXJuZWwgTVBYIENvZGU6CisgKiBDaGVja3MgZm9yIGhhcmR3YXJlIE1QWCBzdXBwb3J0IGluIGNwdWlkIGxlYWYKKyAqIEhhbmRsZXMgI0JSIGV4Y2VwdGlvbnMgYW5kIHNlbmRzIFNJR1NFR1YgdG8gdGhlIGFwcCB3aGVuIGl0IHZpb2xhdGVzCisgICBib3VuZHMsIGxpa2UgZHVyaW5nIGEgYnVmZmVyIG92ZXJmbG93LgorICogV2hlbiBib3VuZHMgYXJlIHNwaWxsZWQgaW4gdG8gYW4gdW5hbGxvY2F0ZWQgYm91bmRzIHRhYmxlLCB0aGUga2VybmVsCisgICBub3RpY2VzIGluIHRoZSAjQlIgZXhjZXB0aW9uLCBhbGxvY2F0ZXMgdGhlIHZpcnR1YWwgc3BhY2UsIHRoZW4KKyAgIHVwZGF0ZXMgdGhlIGJvdW5kcyBkaXJlY3RvcnkgdG8gcG9pbnQgdG8gdGhlIG5ldyB0YWJsZS4gSXQga2VlcHMKKyAgIHNwZWNpYWwgdHJhY2sgb2YgdGhlIG1lbW9yeSB3aXRoIGEgVk1fTVBYIGZsYWcuCisgKiBGcmVlcyB1bnVzZWQgYm91bmRzIHRhYmxlcyBhdCB0aGUgdGltZSB0aGF0IHRoZSBtZW1vcnkgdGhleSBkZXNjcmliZWQKKyAgIGlzIHVubWFwcGVkLgorCisKKzMuIEhvdyBkb2VzIE1QWCBrZXJuZWwgY29kZSB3b3JrCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitIYW5kbGluZyAjQlIgZmF1bHRzIGNhdXNlZCBieSBNUFgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIE1QWCBpcyBlbmFibGVkLCB0aGVyZSBhcmUgMiBuZXcgc2l0dWF0aW9ucyB0aGF0IGNhbiBnZW5lcmF0ZQorI0JSIGZhdWx0cy4KKyAgKiBuZXcgYm91bmRzIHRhYmxlcyAoQlQpIG5lZWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdmUgYm91bmRzLgorICAqIGJvdW5kcyB2aW9sYXRpb24gY2F1c2VkIGJ5IE1QWCBpbnN0cnVjdGlvbnMuCisKK1dlIGhvb2sgI0JSIGhhbmRsZXIgdG8gaGFuZGxlIHRoZXNlIHR3byBuZXcgc2l0dWF0aW9ucy4KKworT24tZGVtYW5kIGtlcm5lbCBhbGxvY2F0aW9uIG9mIGJvdW5kcyB0YWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01QWCBvbmx5IGhhcyA0IGhhcmR3YXJlIHJlZ2lzdGVycyBmb3Igc3RvcmluZyBib3VuZHMgaW5mb3JtYXRpb24uIElmCitNUFgtZW5hYmxlZCBjb2RlIG5lZWRzIG1vcmUgdGhhbiB0aGVzZSA0IHJlZ2lzdGVycywgaXQgbmVlZHMgdG8gc3BpbGwKK3RoZW0gc29tZXdoZXJlLiBJdCBoYXMgdHdvIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zIGZvciB0aGlzIHdoaWNoIGFsbG93Cit0aGUgYm91bmRzIHRvIGJlIG1vdmVkIGJldHdlZW4gdGhlIGJvdW5kcyByZWdpc3RlcnMgYW5kIHNvbWUgbmV3ICJib3VuZHMKK3RhYmxlcyIuCisKKyNCUiBleGNlcHRpb25zIGFyZSBhIG5ldyBjbGFzcyBvZiBleGNlcHRpb25zIGp1c3QgZm9yIE1QWC4gVGhleSBhcmUKK3NpbWlsYXIgY29uY2VwdHVhbGx5IHRvIGEgcGFnZSBmYXVsdCBhbmQgd2lsbCBiZSByYWlzZWQgYnkgdGhlIE1QWAoraGFyZHdhcmUgZHVyaW5nIGJvdGggYm91bmRzIHZpb2xhdGlvbnMgb3Igd2hlbiB0aGUgdGFibGVzIGFyZSBub3QKK3ByZXNlbnQuIFRoZSBrZXJuZWwgaGFuZGxlcyB0aG9zZSAjQlIgZXhjZXB0aW9ucyBmb3Igbm90LXByZXNlbnQgdGFibGVzCitieSBjYXJ2aW5nIHRoZSBzcGFjZSBvdXQgb2YgdGhlIG5vcm1hbCBwcm9jZXNzZXMgYWRkcmVzcyBzcGFjZSBhbmQgdGhlbgorcG9pbnRpbmcgdGhlIGJvdW5kcy1kaXJlY3Rvcnkgb3ZlciB0byBpdC4KKworVGhlIHRhYmxlcyBuZWVkIHRvIGJlIGFjY2Vzc2VkIGFuZCBjb250cm9sbGVkIGJ5IHVzZXJzcGFjZSBiZWNhdXNlCit0aGUgaW5zdHJ1Y3Rpb25zIGZvciBtb3ZpbmcgYm91bmRzIGluIGFuZCBvdXQgb2YgdGhlbSBhcmUgZXh0cmVtZWx5CitmcmVxdWVudC4gVGhleSBwb3RlbnRpYWxseSBoYXBwZW4gZXZlcnkgdGltZSBhIHJlZ2lzdGVyIHBvaW50cyB0bworbWVtb3J5LiBBbnkgZGlyZWN0IGtlcm5lbCBpbnZvbHZlbWVudCAobGlrZSBhIHN5c2NhbGwpIHRvIGFjY2VzcyB0aGUKK3RhYmxlcyB3b3VsZCBvYnZpb3VzbHkgZGVzdHJveSBwZXJmb3JtYW5jZS4KKworV2h5IG5vdCBkbyB0aGlzIGluIHVzZXJzcGFjZT8gTVBYIGRvZXMgbm90IHN0cmljdGx5IHJlcXVpcmUgYW55dGhpbmcgaW4KK3RoZSBrZXJuZWwuIEl0IGNhbiB0aGVvcmV0aWNhbGx5IGJlIGRvbmUgY29tcGxldGVseSBmcm9tIHVzZXJzcGFjZS4gSGVyZQorYXJlIGEgZmV3IHdheXMgdGhpcyBjb3VsZCBiZSBkb25lLiBXZSBkb24ndCB0aGluayBhbnkgb2YgdGhlbSBhcmUgcHJhY3RpY2FsCitpbiB0aGUgcmVhbC13b3JsZCwgYnV0IGhlcmUgdGhleSBhcmUuCisKK1E6IENhbiB2aXJ0dWFsIHNwYWNlIHNpbXBseSBiZSByZXNlcnZlZCBmb3IgdGhlIGJvdW5kcyB0YWJsZXMgc28gdGhhdCB3ZQorICAgbmV2ZXIgaGF2ZSB0byBhbGxvY2F0ZSB0aGVtPworQTogTVBYLWVuYWJsZWQgYXBwbGljYXRpb24gd2lsbCBwb3NzaWJseSBjcmVhdGUgYSBsb3Qgb2YgYm91bmRzIHRhYmxlcyBpbgorICAgcHJvY2VzcyBhZGRyZXNzIHNwYWNlIHRvIHNhdmUgYm91bmRzIGluZm9ybWF0aW9uLiBUaGVzZSB0YWJsZXMgY2FuIHRha2UKKyAgIHVwIGh1Z2Ugc3dhdGhzIG9mIG1lbW9yeSAoYXMgbXVjaCBhcyA4MCUgb2YgdGhlIG1lbW9yeSBvbiB0aGUgc3lzdGVtKQorICAgZXZlbiBpZiB3ZSBjbGVhbiB0aGVtIHVwIGFnZ3Jlc3NpdmVseS4gSW4gdGhlIHdvcnN0LWNhc2Ugc2NlbmFyaW8sIHRoZQorICAgdGFibGVzIGNhbiBiZSA0eCB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmUgYmVpbmcgdHJhY2tlZC4gSU9XLCBhCisgICAxLXBhZ2Ugc3RydWN0dXJlIGNhbiByZXF1aXJlIDQgYm91bmRzLXRhYmxlIHBhZ2VzLiBBbiBYLUdCIHZpcnR1YWwKKyAgIGFyZWEgbmVlZHMgNCpYIEdCIG9mIHZpcnR1YWwgc3BhY2UsIHBsdXMgMkdCIGZvciB0aGUgYm91bmRzIGRpcmVjdG9yeS4KKyAgIElmIHdlIHdlcmUgdG8gcHJlYWxsb2NhdGUgdGhlbSBmb3IgdGhlIDEyOFRCIG9mIHVzZXIgdmlydHVhbCBhZGRyZXNzCisgICBzcGFjZSwgd2Ugd291bGQgbmVlZCB0byByZXNlcnZlIDUxMlRCKzJHQiwgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlCisgICBlbnRpcmUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvZGF5LiBUaGlzIG1lYW5zIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZAorICAgYWhlYWQgb2YgdGltZS4gQWxzbywgYSBzaW5nbGUgcHJvY2VzcydzIHByZS1wb3B1YWxhdGVkIGJvdW5kcyBkaXJlY3RvcnkKKyAgIGNvbnN1bWVzIDJHQiBvZiB2aXJ0dWFsICpBTkQqIHBoeXNpY2FsIG1lbW9yeS4gSU9XLCBpdCdzIGNvbXBsZXRlbHkKKyAgIGluZmVhc2libGUgdG8gcHJlcG9wdWxhdGUgYm91bmRzIGRpcmVjdG9yaWVzLgorCitROiBDYW4gd2UgcHJlYWxsb2NhdGUgYm91bmRzIHRhYmxlIHNwYWNlIGF0IHRoZSBzYW1lIHRpbWUgbWVtb3J5IGlzCisgICBhbGxvY2F0ZWQgd2hpY2ggbWlnaHQgY29udGFpbiBwb2ludGVycyB0aGF0IG1pZ2h0IGV2ZW50dWFsbHkgbmVlZAorICAgYm91bmRzIHRhYmxlcz8KK0E6IFRoaXMgd291bGQgd29yayBpZiB3ZSBjb3VsZCBob29rIHRoZSBzaXRlIG9mIGVhY2ggYW5kIGV2ZXJ5IG1lbW9yeQorICAgYWxsb2NhdGlvbiBzeXNjYWxsLiBUaGlzIGNhbiBiZSBkb25lIGZvciBzbWFsbCwgY29uc3RyYWluZWQgYXBwbGljYXRpb25zLgorICAgQnV0LCBpdCBpc24ndCBwcmFjdGljYWwgYXQgYSBsYXJnZXIgc2NhbGUgc2luY2UgYSBnaXZlbiBhcHAgaGFzIG5vCisgICB3YXkgb2YgY29udHJvbGxpbmcgaG93IGFsbCB0aGUgcGFydHMgb2YgdGhlIGFwcCBtaWdodCBhbGxvY2F0ZSBtZW1vcnkKKyAgICh0aGluayBsaWJyYXJpZXMpLiBUaGUga2VybmVsIGlzIHJlYWxseSB0aGUgb25seSBwbGFjZSB0byBpbnRlcmNlcHQKKyAgIHRoZXNlIGNhbGxzLgorCitROiBDb3VsZCBhIGJvdW5kcyBmYXVsdCBiZSBoYW5kZWQgdG8gdXNlcnNwYWNlIGFuZCB0aGUgdGFibGVzIGFsbG9jYXRlZAorICAgdGhlcmUgaW4gYSBzaWduYWwgaGFuZGxlciBpbnRlYWQgb2YgaW4gdGhlIGtlcm5lbD8KK0E6IG1tYXAoKSBpcyBub3Qgb24gdGhlIGxpc3Qgb2Ygc2FmZSBhc3luYyBoYW5kbGVyIGZ1bmN0aW9ucyBhbmQgZXZlbgorICAgaWYgbW1hcCgpIHdvdWxkIHdvcmsgaXQgc3RpbGwgcmVxdWlyZXMgbG9ja2luZyBvciBuYXN0eSB0cmlja3MgdG8KKyAgIGtlZXAgdHJhY2sgb2YgdGhlIGFsbG9jYXRpb24gc3RhdGUgdGhlcmUuCisKK0hhdmluZyBydWxlZCBvdXQgYWxsIG9mIHRoZSB1c2Vyc3BhY2Utb25seSBhcHByb2FjaGVzIGZvciBtYW5hZ2luZworYm91bmRzIHRhYmxlcyB0aGF0IHdlIGNvdWxkIHRoaW5rIG9mLCB3ZSBjcmVhdGUgdGhlbSBvbiBkZW1hbmQgaW4KK3RoZSBrZXJuZWwuCisKK0RlY29kaW5nIE1QWCBpbnN0cnVjdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYSAjQlIgaXMgZ2VuZXJhdGVkIGR1ZSB0byBhIGJvdW5kcyB2aW9sYXRpb24gY2F1c2VkIGJ5IE1QWC4KK1dlIG5lZWQgdG8gZGVjb2RlIE1QWCBpbnN0cnVjdGlvbnMgdG8gZ2V0IHZpb2xhdGlvbiBhZGRyZXNzIGFuZAorc2V0IHRoaXMgYWRkcmVzcyBpbnRvIGV4dGVuZGVkIHN0cnVjdCBzaWdpbmZvLgorCitUaGUgX3NpZ2ZhdWx0IGZlaWxkIG9mIHN0cnVjdCBzaWdpbmZvIGlzIGV4dGVuZGVkIGFzIGZvbGxvdzoKKworODcJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KKzg4CQlzdHJ1Y3QgeworODkJCQl2b2lkIF9fdXNlciAqX2FkZHI7IC8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KKzkwICNpZmRlZiBfX0FSQ0hfU0lfVFJBUE5PCis5MQkJCWludCBfdHJhcG5vOwkvKiBUUkFQICMgd2hpY2ggY2F1c2VkIHRoZSBzaWduYWwgKi8KKzkyICNlbmRpZgorOTMJCQlzaG9ydCBfYWRkcl9sc2I7IC8qIExTQiBvZiB0aGUgcmVwb3J0ZWQgYWRkcmVzcyAqLworOTQJCQlzdHJ1Y3QgeworOTUJCQkJdm9pZCBfX3VzZXIgKl9sb3dlcjsKKzk2CQkJCXZvaWQgX191c2VyICpfdXBwZXI7Cis5NwkJCX0gX2FkZHJfYm5kOworOTgJCX0gX3NpZ2ZhdWx0OworCitUaGUgJ19hZGRyJyBmaWVsZCByZWZlcnMgdG8gdmlvbGF0aW9uIGFkZHJlc3MsIGFuZCBuZXcgJ19hZGRyX2FuZCcKK2ZpZWxkIHJlZmVycyB0byB0aGUgdXBwZXIvbG93ZXIgYm91bmRzIHdoZW4gYSAjQlIgaXMgY2F1c2VkLgorCitHbGliYyB3aWxsIGJlIGFsc28gdXBkYXRlZCB0byBzdXBwb3J0IHRoaXMgbmV3IHNpZ2luZm8uIFNvIHVzZXIKK2NhbiBnZXQgdmlvbGF0aW9uIGFkZHJlc3MgYW5kIGJvdW5kcyB3aGVuIGJvdW5kcyB2aW9sYXRpb25zIG9jY3VyLgorCitDbGVhbnVwIHVudXNlZCBib3VuZHMgdGFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gYSBCTkRTVFggaW5zdHJ1Y3Rpb24gYXR0ZW1wdHMgdG8gc2F2ZSBib3VuZHMgdG8gYSBib3VuZHMgZGlyZWN0b3J5CitlbnRyeSBtYXJrZWQgYXMgaW52YWxpZCwgYSAjQlIgaXMgZ2VuZXJhdGVkLiBUaGlzIGlzIGFuIGluZGljYXRpb24gdGhhdAorbm8gYm91bmRzIHRhYmxlIGV4aXN0cyBmb3IgdGhpcyBlbnRyeS4gSW4gdGhpcyBjYXNlIHRoZSBmYXVsdCBoYW5kbGVyCit3aWxsIGFsbG9jYXRlIGEgbmV3IGJvdW5kcyB0YWJsZSBvbiBkZW1hbmQuCisKK1NpbmNlIHRoZSBrZXJuZWwgYWxsb2NhdGVkIHRob3NlIHRhYmxlcyBvbi1kZW1hbmQgd2l0aG91dCB1c2Vyc3BhY2UKK2tub3dsZWRnZSwgaXQgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGVtIHdoZW4gdGhlIGFzc29jaWF0ZWQKK21hcHBpbmdzIGdvIGF3YXkuCisKK0hlcmUsIHRoZSBzb2x1dGlvbiBmb3IgdGhpcyBpc3N1ZSBpcyB0byBob29rIGRvX211bm1hcCgpIHRvIGNoZWNrCit3aGV0aGVyIG9uZSBwcm9jZXNzIGlzIE1QWCBlbmFibGVkLiBJZiB5ZXMsIHRob3NlIGJvdW5kcyB0YWJsZXMgY292ZXJlZAoraW4gdGhlIHZpcnR1YWwgYWRkcmVzcyByZWdpb24gd2hpY2ggaXMgYmVpbmcgdW5tYXBwZWQgd2lsbCBiZSBmcmVlZCBhbHNvLgorCitBZGRpbmcgbmV3IHByY3RsIGNvbW1hbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1R3byBuZXcgcHJjdGwgY29tbWFuZHMgYXJlIGFkZGVkIHRvIGVuYWJsZSBhbmQgZGlzYWJsZSBNUFggYm91bmRzIHRhYmxlcworbWFuYWdlbWVudCBpbiBrZXJuZWwuCisKKzE1NQkjZGVmaW5lIFBSX01QWF9FTkFCTEVfTUFOQUdFTUVOVAk0MworMTU2CSNkZWZpbmUgUFJfTVBYX0RJU0FCTEVfTUFOQUdFTUVOVAk0NAorCitSdW50aW1lIGxpYnJhcnkgaW4gdXNlcnNwYWNlIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW9uIG9mIGJvdW5kcworZGlyZWN0b3J5LiBTbyBrZXJuZWwgaGF2ZSB0byB1c2UgWFNBVkUgaW5zdHJ1Y3Rpb24gdG8gZ2V0IHRoZSBiYXNlCitvZiBib3VuZHMgZGlyZWN0b3J5IGZyb20gQk5EQ0ZHIHJlZ2lzdGVyLgorCitCdXQgWFNBVkUgaXMgZXhwZWN0ZWQgdG8gYmUgdmVyeSBleHBlbnNpdmUuIEluIG9yZGVyIHRvIGRvIHBlcmZvcm1hbmNlCitvcHRpbWl6YXRpb24sIHdlIGhhdmUgdG8gZ2V0IHRoZSBiYXNlIG9mIGJvdW5kcyBkaXJlY3RvcnkgYW5kIHNhdmUgaXQKK2ludG8gc3RydWN0IG1tX3N0cnVjdCB0byBiZSB1c2VkIGluIGZ1dHVyZSBkdXJpbmcgUFJfTVBYX0VOQUJMRV9NQU5BR0VNRU5UCitjb21tYW5kIGV4ZWN1dGlvbi4KKworCis0LiBTcGVjaWFsIHJ1bGVzCis9PT09PT09PT09PT09PT09CisKKzEpIElmIHVzZXJzcGFjZSBpcyByZXF1ZXN0aW5nIGhlbHAgZnJvbSB0aGUga2VybmVsIHRvIGRvIHRoZSBtYW5hZ2VtZW50CitvZiBib3VuZHMgdGFibGVzLCBpdCBtYXkgbm90IGNyZWF0ZSBvciBtb2RpZnkgZW50cmllcyBpbiB0aGUgYm91bmRzIGRpcmVjdG9yeS4KKworQ2VydGFpbmx5IHVzZXJzIGNhbiBhbGxvY2F0ZSBib3VuZHMgdGFibGVzIGFuZCBmb3JjaWJseSBwb2ludCB0aGUgYm91bmRzCitkaXJlY3RvcnkgYXQgdGhlbSB0aHJvdWdoIFhTQVZFIGluc3RydWN0aW9uLCBhbmQgdGhlbiBzZXQgdmFsaWQgYml0CitvZiBib3VuZHMgZW50cnkgdG8gaGF2ZSB0aGlzIGVudHJ5IHZhbGlkLiAgQnV0LCB0aGUga2VybmVsIHdpbGwgZGVjbGluZQordG8gYXNzaXN0IGluIG1hbmFnaW5nIHRoZXNlIHRhYmxlcy4KKworMikgVXNlcnNwYWNlIG1heSBub3QgdGFrZSBtdWx0aXBsZSBib3VuZHMgZGlyZWN0b3J5IGVudHJpZXMgYW5kIHBvaW50Cit0aGVtIGF0IHRoZSBzYW1lIGJvdW5kcyB0YWJsZS4KKworVGhpcyBpcyBhbGxvd2VkIGFyY2hpdGVjdHVyYWxseS4gIFNlZSBtb3JlIGluZm9ybWF0aW9uICJJbnRlbChSKSBBcmNoaXRlY3R1cmUKK0luc3RydWN0aW9uIFNldCBFeHRlbnNpb25zIFByb2dyYW1taW5nIFJlZmVyZW5jZSIgKDkuMy40KS4KKworSG93ZXZlciwgaWYgdXNlcnMgZGlkIHRoaXMsIHRoZSBrZXJuZWwgbWlnaHQgYmUgZm9vbGVkIGluIHRvIHVubWFwaW5nIGFuCitpbi11c2UgYm91bmRzIHRhYmxlIHNpbmNlIGl0IGRvZXMgbm90IHJlY29nbml6ZSBzaGFyaW5nLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBmMWU1OTMyLi4xNTYzYTNiIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtODYxLDYgKzg2MSw3IEBACiBXOglodHRwOi8vd3d3LmxpbnV4NHNhbS5vcmcKIFM6CVN1cHBvcnRlZAogRjoJYXJjaC9hcm0vbWFjaC1hdDkxLworRjoJaW5jbHVkZS9zb2MvYXQ5MS8KIEY6CWFyY2gvYXJtL2Jvb3QvZHRzL2F0OTEqLmR0cwogRjoJYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MSouZHRzaQogRjoJYXJjaC9hcm0vYm9vdC9kdHMvc2FtYSouZHRzCkBAIC0xMzA4LDMwICsxMzA5LDIyIEBACiBGOglkcml2ZXJzLyovKi8qcm9ja2NoaXAqCiBGOglzb3VuZC9zb2Mvcm9ja2NoaXAvCiAKLUFSTS9TQU1TVU5HIEFSTSBBUkNISVRFQ1RVUkVTCi1NOglCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+Ci1NOglLdWtqaW4gS2ltIDxrZ2VuZS5raW1Ac2Ftc3VuZy5jb20+CitBUk0vU0FNU1VORyBFWFlOT1MgQVJNIEFSQ0hJVEVDVFVSRVMKK006CUt1a2ppbiBLaW0gPGtnZW5lQGtlcm5lbC5vcmc+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogTDoJbGludXgtc2Ftc3VuZy1zb2NAdmdlci5rZXJuZWwub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLVc6CWh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9saW51eC8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL2Jvb3QvZHRzL3MzYyoKIEY6CWFyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vcyoKIEY6CWFyY2gvYXJtL3BsYXQtc2Ftc3VuZy8KIEY6CWFyY2gvYXJtL21hY2gtczNjMjQqLwogRjoJYXJjaC9hcm0vbWFjaC1zM2M2NHh4LworRjoJYXJjaC9hcm0vbWFjaC1zNXAqLworRjoJYXJjaC9hcm0vbWFjaC1leHlub3MqLwogRjoJZHJpdmVycy8qLypzM2MyNDEwKgogRjoJZHJpdmVycy8qLyovKnMzYzI0MTAqCiBGOglkcml2ZXJzL3NwaS9zcGktczNjKgogRjoJc291bmQvc29jL3NhbXN1bmcvKgotCi1BUk0vUzVQIEVYWU5PUyBBUk0gQVJDSElURUNUVVJFUwotTToJS3VramluIEtpbSA8a2dlbmUua2ltQHNhbXN1bmcuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLUw6CWxpbnV4LXNhbXN1bmctc29jQHZnZXIua2VybmVsLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1TOglNYWludGFpbmVkCi1GOglhcmNoL2FybS9tYWNoLXM1cCovCi1GOglhcmNoL2FybS9tYWNoLWV4eW5vcyovCiBOOglleHlub3MKIAogQVJNL1NBTVNVTkcgTU9CSUxFIE1BQ0hJTkUgU1VQUE9SVApAQCAtMTM4MSwxMiArMTM3NCwxMiBAQAogRjoJYXJjaC9hcm0vY29uZmlncy9hcGU2ZXZtX2RlZmNvbmZpZwogRjoJYXJjaC9hcm0vY29uZmlncy9hcm1hZGlsbG84MDBldmFfZGVmY29uZmlnCiBGOglhcmNoL2FybS9jb25maWdzL2JvY2t3X2RlZmNvbmZpZwotRjoJYXJjaC9hcm0vY29uZmlncy9rb2Vsc2NoX2RlZmNvbmZpZwogRjoJYXJjaC9hcm0vY29uZmlncy9rem05Z19kZWZjb25maWcKIEY6CWFyY2gvYXJtL2NvbmZpZ3MvbGFnZXJfZGVmY29uZmlnCiBGOglhcmNoL2FybS9jb25maWdzL21hY2tlcmVsX2RlZmNvbmZpZwogRjoJYXJjaC9hcm0vY29uZmlncy9tYXJ6ZW5fZGVmY29uZmlnCiBGOglhcmNoL2FybS9jb25maWdzL3NobW9iaWxlX2RlZmNvbmZpZworRjoJYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9yZW5lc2FzLXNjaWYuUwogRjoJYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS8KIEY6CWRyaXZlcnMvc2gvCiAKQEAgLTE0MzAsNiArMTQyMyw3IEBACiBGOglkcml2ZXJzL3VzYi9kd2MzL2R3YzMtc3QuYwogRjoJZHJpdmVycy91c2IvaG9zdC9laGNpLXN0LmMKIEY6CWRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zdC5jCitGOglkcml2ZXJzL2F0YS9haGNpX3N0LmMKIAogQVJNL1RFQ0hOT0xPR0lDIFNZU1RFTVMgVFM3MjUwIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KQEAgLTE1MDMsNiArMTQ5NywxOSBAQAogRjoJZHJpdmVycy9jbGsvdXg1MDAvCiBGOglpbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvY2xrLXV4NTAwLmgKIAorQVJNL1ZFUlNBVElMRSBFWFBSRVNTIFBMQVRGT1JNCitNOglMaXZpdSBEdWRhdSA8bGl2aXUuZHVkYXVAYXJtLmNvbT4KK006CVN1ZGVlcCBIb2xsYSA8c3VkZWVwLmhvbGxhQGFybS5jb20+CitNOglMb3JlbnpvIFBpZXJhbGlzaSA8bG9yZW56by5waWVyYWxpc2lAYXJtLmNvbT4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9ib290L2R0cy92ZXhwcmVzcyoKK0Y6CWFyY2gvYXJtL21hY2gtdmV4cHJlc3MvCitGOgkqLyovdmV4cHJlc3MqCitGOgkqLyovKi92ZXhwcmVzcyoKK0Y6CWRyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3Mtb3NjLmMKK0Y6CWRyaXZlcnMvY2xvY2tzb3VyY2UvdmVyc2F0aWxlLmMKKwogQVJNL1ZGUCBTVVBQT1JUCiBNOglSdXNzZWxsIEtpbmcgPGxpbnV4QGFybS5saW51eC5vcmcudWs+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQpAQCAtMjA5NywxMCArMjEwNCwxMyBAQAogQlJPQURDT00gQkNNN1hYWCBBUk0gQVJDSElURUNUVVJFCiBNOglNYXJjIENhcmlubyA8bWFyYy5jZWVlZWVAZ21haWwuY29tPgogTToJQnJpYW4gTm9ycmlzIDxjb21wdXRlcnNmb3JwZWFjZUBnbWFpbC5jb20+CitNOglHcmVnb3J5IEZvbmcgPGdyZWdvcnkuMHhmMEBnbWFpbC5jb20+CitNOglGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLWJjbS8qYnJjbXN0YioKIEY6CWFyY2gvYXJtL2Jvb3QvZHRzL2JjbTcqLmR0cyoKK0Y6CWRyaXZlcnMvYnVzL2JyY21zdGJfZ2lzYi5jCiAKIEJST0FEQ09NIFRHMyBHSUdBQklUIEVUSEVSTkVUIERSSVZFUgogTToJUHJhc2hhbnQgU3JlZWRoYXJhbiA8cHJhc2hhbnRAYnJvYWRjb20uY29tPgpAQCAtMjEzMSw2ICsyMTQxLDIwIEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvc2NzaS9ibngyaS8KIAorQlJPQURDT00gQ1lHTlVTL0lQUk9DIEFSTSBBUkNISVRFQ1RVUkUKK006CVJheSBKdWkgPHJqdWlAYnJvYWRjb20uY29tPgorTToJU2NvdHQgQnJhbmRlbiA8c2JyYW5kZW5AYnJvYWRjb20uY29tPgorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CWJjbS1rZXJuZWwtZmVlZGJhY2stbGlzdEBicm9hZGNvbS5jb20KK1Q6CWdpdCBnaXQ6Ly9naXQuZ2l0aHViLmNvbS9icmNtL2xpbnV4LmdpdAorUzoJTWFpbnRhaW5lZAorTjoJaXByb2MKK046CWN5Z251cworTjoJYmNtOTExMyoKK046CWJjbTk1ODMqCitOOgliY201ODMqCitOOgliY20xMTMqCisKIEJST0FEQ09NIEtPTkEgR1BJTyBEUklWRVIKIE06CVJheSBKdWkgPHJqdWlAYnJvYWRjb20uY29tPgogTDoJYmNtLWtlcm5lbC1mZWVkYmFjay1saXN0QGJyb2FkY29tLmNvbQpAQCAtMjg2MSwxMSArMjg4NSwxMCBAQAogRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL2RtZmUuYwogCiBEQzM5MC9BTTUzQzk3NCBTQ1NJIGRyaXZlcgotTToJS3VydCBHYXJsb2ZmIDxnYXJsb2ZmQHN1c2UuZGU+Ci1XOglodHRwOi8vd3d3LmdhcmxvZmYuZGUva3VydC9saW51eC9kYzM5MC8KLU06CUd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorTToJSGFubmVzIFJlaW5lY2tlIDxoYXJlQHN1c2UuZGU+CitMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9zY3NpL3Rtc2NzaW0uKgorRjoJZHJpdmVycy9zY3NpL2FtNTNjOTc0LmMKIAogREMzOTV4IFNDU0kgZHJpdmVyCiBNOglPbGl2ZXIgTmV1a3VtIDxvbGl2ZXJAbmV1a3VtLm9yZz4KQEAgLTU5OTAsMTAgKzYwMTMsMTMgQEAKIFM6CU9kZCBGaXhlcwogRjoJZHJpdmVycy9tZWRpYS9wYXJwb3J0L3BtcyoKIAotTUVHQVJBSUQgU0NTSSBEUklWRVJTCi1NOglOZWVsYSBTeWFtIEtvbGxpIDxtZWdhcmFpZGxpbnV4QGxzaS5jb20+CitNRUdBUkFJRCBTQ1NJL1NBUyBEUklWRVJTCitNOglLYXNoeWFwIERlc2FpIDxrYXNoeWFwLmRlc2FpQGF2YWdvdGVjaC5jb20+CitNOglTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgorTToJVWRheSBMaW5nYWxhIDx1ZGF5LmxpbmdhbGFAYXZhZ290ZWNoLmNvbT4KK0w6CW1lZ2FyYWlkbGludXgucGRsQGF2YWdvdGVjaC5jb20KIEw6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vbWVnYXJhaWQubHNpbG9naWMuY29tCitXOglodHRwOi8vd3d3LmxzaS5jb20KIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vc2NzaS9tZWdhcmFpZC50eHQKIEY6CWRyaXZlcnMvc2NzaS9tZWdhcmFpZC4qCkBAIC02MzA0LDcgKzYzMzAsNiBAQAogRjoJZHJpdmVycy9zY3NpL2dfTkNSNTM4MF9tbWlvLmMKIEY6CWRyaXZlcnMvc2NzaS9tYWNfc2NzaS4qCiBGOglkcml2ZXJzL3Njc2kvcGFzMTYuKgotRjoJZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCiBGOglkcml2ZXJzL3Njc2kvc3VuM19zY3NpLioKIEY6CWRyaXZlcnMvc2NzaS9zdW4zX3Njc2lfdm1lLmMKIEY6CWRyaXZlcnMvc2NzaS90MTI4LioKQEAgLTY1NjAsNiArNjU4NSwxMyBAQAogRjoJRG9jdW1lbnRhdGlvbi9zY3NpL05pbmphU0NTSS50eHQKIEY6CWRyaXZlcnMvc2NzaS9uc3AzMioKIAorTklPUzIgQVJDSElURUNUVVJFCitNOglMZXkgRm9vbiBUYW4gPGxmdGFuQGFsdGVyYS5jb20+CitMOgluaW9zMi1kZXZAbGlzdHMucm9ja2V0Ym9hcmRzLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitUOglnaXQgZ2l0Oi8vZ2l0LnJvY2tldGJvYXJkcy5vcmcvbGludXgtc29jZnBnYS5naXQKK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvbmlvczIvCisKIE5UQiBEUklWRVIKIE06CUpvbiBNYXNvbiA8amRtYXNvbkBrdWR6dS51cz4KIE06CURhdmUgSmlhbmcgPGRhdmUuamlhbmdAaW50ZWwuY29tPgpAQCAtNjY2OSw2ICs2NzAxLDE0IEBACiBTOglNYWludGFpbmVkCiBGOglzb3VuZC9zb2Mvb21hcC8KIAorT01BUCBHRU5FUkFMIFBVUlBPU0UgTUVNT1JZIENPTlRST0xMRVIgU1VQUE9SVAorTToJUm9nZXIgUXVhZHJvcyA8cm9nZXJxQHRpLmNvbT4KK006CVRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CitMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9tZW1vcnkvb21hcC1ncG1jLmMKK0Y6CWFyY2gvYXJtL21hY2gtb21hcDIvKmdwbWMqCisKIE9NQVAgRlJBTUVCVUZGRVIgU1VQUE9SVAogTToJVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KIEw6CWxpbnV4LWZiZGV2QHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMzM0Y2U3MC4uY2FiZDUxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9pby5oCkBAIC0xMyw4ICsxMyw2IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKLSNkZWZpbmUgUENJX0lPQkFTRSAoKHZvaWQgX19pb21lbSAqKTApCi0KIGV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfcHJvdChwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggODljNGI1Yy4uYzg0MjRhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0zMjAsMjQgKzMyMCw2IEBACiAJc2VsZWN0IFNQQVJTRV9JUlEKIAlzZWxlY3QgVVNFX09GCiAKLWNvbmZpZyBBUkNIX0lOVEVHUkFUT1IKLQlib29sICJBUk0gTHRkLiBJbnRlZ3JhdG9yIGZhbWlseSIKLQlzZWxlY3QgQVJNX0FNQkEKLQlzZWxlY3QgQVJNX1BBVENIX1BIWVNfVklSVCBpZiBNTVUKLQlzZWxlY3QgQVVUT19aUkVMQUREUgotCXNlbGVjdCBDT01NT05fQ0xLCi0Jc2VsZWN0IENPTU1PTl9DTEtfVkVSU0FUSUxFCi0Jc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKLQlzZWxlY3QgSEFWRV9UQ00KLQlzZWxlY3QgSUNTVAotCXNlbGVjdCBNVUxUSV9JUlFfSEFORExFUgotCXNlbGVjdCBQTEFUX1ZFUlNBVElMRQotCXNlbGVjdCBTUEFSU0VfSVJRCi0Jc2VsZWN0IFVTRV9PRgotCXNlbGVjdCBWRVJTQVRJTEVfRlBHQV9JUlEKLQloZWxwCi0JICBTdXBwb3J0IGZvciBBUk0ncyBJbnRlZ3JhdG9yIHBsYXRmb3JtLgotCiBjb25maWcgQVJDSF9SRUFMVklFVwogCWJvb2wgIkFSTSBMdGQuIFJlYWxWaWV3IGZhbWlseSIKIAlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKQEAgLTM1MCw2ICszMzIsNyBAQAogCXNlbGVjdCBJQ1NUCiAJc2VsZWN0IE5FRURfTUFDSF9NRU1PUllfSAogCXNlbGVjdCBQTEFUX1ZFUlNBVElMRQorCXNlbGVjdCBQTEFUX1ZFUlNBVElMRV9TQ0hFRF9DTE9DSwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBBUk0gTHRkIFJlYWxWaWV3IGJvYXJkcy4KIApAQCAtMzY1LDYgKzM0OCw3IEBACiAJc2VsZWN0IElDU1QKIAlzZWxlY3QgUExBVF9WRVJTQVRJTEUKIAlzZWxlY3QgUExBVF9WRVJTQVRJTEVfQ0xPQ0sKKwlzZWxlY3QgUExBVF9WRVJTQVRJTEVfU0NIRURfQ0xPQ0sKIAlzZWxlY3QgVkVSU0FUSUxFX0ZQR0FfSVJRCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEFSTSBMdGQgVmVyc2F0aWxlIGJvYXJkLgpAQCAtMzc2LDEwICszNjAsMTEgQEAKIAlzZWxlY3QgSVJRX0RPTUFJTgogCXNlbGVjdCBORUVEX01BQ0hfSU9fSCBpZiBQQ0NBUkQKIAlzZWxlY3QgUElOQ1RSTAotCXNlbGVjdCBQSU5DVFJMX0FUOTEgaWYgVVNFX09GCisJc2VsZWN0IFBJTkNUUkxfQVQ5MQorCXNlbGVjdCBVU0VfT0YKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiBBdG1lbAotCSAgQVQ5MVJNOTIwMCBhbmQgQVQ5MVNBTTkqIHByb2Nlc3NvcnMuCisJICBBVDkxUk05MjAwLCBBVDkxU0FNOSBhbmQgU0FNQTUgcHJvY2Vzc29ycy4KIAogY29uZmlnIEFSQ0hfQ0xQUzcxMVgKIAlib29sICJDaXJydXMgTG9naWMgQ0xQUzcxMXgvRVA3MjF4L0VQNzMxeC1iYXNlZCIKQEAgLTg1NCw2ICs4MzksOCBAQAogIwogc291cmNlICJhcmNoL2FybS9tYWNoLW12ZWJ1L0tjb25maWciCiAKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1hc205MjYwL0tjb25maWciCisKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1heHhpYS9LY29uZmlnIgpAQCAtMTI1OSw5ICsxMjQ2LDYgQEAKIAogbWVudSAiQnVzIHN1cHBvcnQiCiAKLWNvbmZpZyBBUk1fQU1CQQotCWJvb2wKLQogY29uZmlnIElTQQogCWJvb2wKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnLmRlYnVnIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwppbmRleCBkOGY2YTJlLi5mOTI5NWE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvYXJtL0tjb25maWcuZGVidWcKQEAgLTkzLDYgKzkzLDI3IEBACiAJcHJvbXB0ICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBwb3J0IgogCWRlcGVuZHMgb24gREVCVUdfTEwKIAorCWNvbmZpZyBERUJVR19BU005MjYwX1VBUlQKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgdmlhIGFzbTkyNjAgVUFSVCIKKwkJZGVwZW5kcyBvbiBNQUNIX0FTTTkyNjAKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIGRlYnVnIHByaW50IHJvdXRpbmVzIHRvIGRpcmVjdAorCQkgIHRoZWlyIG91dHB1dCB0byBhbiBVQVJUIG9yIFVTQVJUIHBvcnQgb24gYXNtOTI2MCBiYXNlZAorCQkgIG1hY2hpbmVzLgorCisJCSAgICBERUJVR19VQVJUX1BIWVMgfCBERUJVR19VQVJUX1ZJUlQKKworCQkgICAgMHg4MDAwMDAwMCAgICAgIHwgMHhmMDAwMDAwMCAgICAgfCBVQVJUMAorCQkgICAgMHg4MDAwNDAwMCAgICAgIHwgMHhmMDAwNDAwMCAgICAgfCBVQVJUMQorCQkgICAgMHg4MDAwODAwMCAgICAgIHwgMHhmMDAwODAwMCAgICAgfCBVQVJUMgorCQkgICAgMHg4MDAwYzAwMCAgICAgIHwgMHhmMDAwYzAwMCAgICAgfCBVQVJUMworCQkgICAgMHg4MDAxMDAwMCAgICAgIHwgMHhmMDAxMDAwMCAgICAgfCBVQVJUNAorCQkgICAgMHg4MDAxNDAwMCAgICAgIHwgMHhmMDAxNDAwMCAgICAgfCBVQVJUNQorCQkgICAgMHg4MDAxODAwMCAgICAgIHwgMHhmMDAxODAwMCAgICAgfCBVQVJUNgorCQkgICAgMHg4MDAxYzAwMCAgICAgIHwgMHhmMDAxYzAwMCAgICAgfCBVQVJUNworCQkgICAgMHg4MDAyMDAwMCAgICAgIHwgMHhmMDAyMDAwMCAgICAgfCBVQVJUOAorCQkgICAgMHg4MDAyNDAwMCAgICAgIHwgMHhmMDAyNDAwMCAgICAgfCBVQVJUOQorCiAJY29uZmlnIEFUOTFfREVCVUdfTExfREJHVTAKIAkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgb24gcm05MjAwLCA5MjYwLzlnMjAsIDkyNjEvOWcxMCBhbmQgOXJsIgogCQlkZXBlbmRzIG9uIEhBVkVfQVQ5MV9EQkdVMApAQCAtMTEzLDcgKzEzNCw3IEBACiAJY29uZmlnIERFQlVHX0JDTV81MzAxWAogCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBvbiBCQ001MzAxWCBVQVJUMSIKIAkJZGVwZW5kcyBvbiBBUkNIX0JDTV81MzAxWAotCQlzZWxlY3QgREVCVUdfVUFSVF9QTDAxWAorCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCiAKIAljb25maWcgREVCVUdfQkNNX0tPTkFfVUFSVAogCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgQkNNIEtPTkEgVUFSVCIKQEAgLTEzOSw2ICsxNjAsMTcgQEAKIAkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKIAkJICBvbiBNYXJ2ZWxsIEJlcmxpbiBTb0MgYmFzZWQgcGxhdGZvcm1zLgogCisJY29uZmlnIERFQlVHX0JSQ01TVEJfVUFSVAorCQlib29sICJVc2UgQlJDTVNUQiBVQVJUIGZvciBsb3ctbGV2ZWwgZGVidWciCisJCWRlcGVuZHMgb24gQVJDSF9CUkNNU1RCCisJCXNlbGVjdCBERUJVR19VQVJUXzgyNTAKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIGRlYnVnIHByaW50IHJvdXRpbmVzIHRvIGRpcmVjdAorCQkgIHRoZWlyIG91dHB1dCB0byB0aGUgZmlyc3Qgc2VyaWFsIHBvcnQgb24gdGhlc2UgZGV2aWNlcy4KKworCQkgIElmIHlvdSBoYXZlIGEgQnJvYWRjb20gU1RCIGNoaXAgYW5kIHdvdWxkIGxpa2UgZWFybHkgcHJpbnQKKwkJICBtZXNzYWdlcyB0byBhcHBlYXIgb3ZlciB0aGUgVUFSVCwgc2VsZWN0IHRoaXMgb3B0aW9uLgorCiAJY29uZmlnIERFQlVHX0NMUFM3MTFYX1VBUlQxCiAJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBVQVJUMSIKIAkJZGVwZW5kcyBvbiBBUkNIX0NMUFM3MTFYCkBAIC02NTMsNiArNjg1LDY0IEBACiAJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CiAJCSAgb24gUm9ja2NoaXAgUkszMnh4IGJhc2VkIHBsYXRmb3Jtcy4KIAorCWNvbmZpZyBERUJVR19SN1M3MjEwMF9TQ0lGMgorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgU0NJRjIgb24gUjdTNzIxMDAiCisJCWRlcGVuZHMgb24gQVJDSF9SN1M3MjEwMAorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgdmlhIFNDSUYyIG9uIFJlbmVzYXMgUlovQTFIIChSN1M3MjEwMCkuCisKKwljb25maWcgREVCVUdfUkNBUl9HRU4xX1NDSUYwCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBTQ0lGMCBvbiBSOEE3Nzc4IgorCQlkZXBlbmRzIG9uIEFSQ0hfUjhBNzc3OAorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgdmlhIFNDSUYwIG9uIFJlbmVzYXMgUi1DYXIgTTFBIChSOEE3Nzc4KS4KKworCWNvbmZpZyBERUJVR19SQ0FSX0dFTjFfU0NJRjIKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFNDSUYyIG9uIFI4QTc3NzkiCisJCWRlcGVuZHMgb24gQVJDSF9SOEE3Nzc5CisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICB2aWEgU0NJRjIgb24gUmVuZXNhcyBSLUNhciBIMSAoUjhBNzc3OSkuCisKKwljb25maWcgREVCVUdfUkNBUl9HRU4yX1NDSUYwCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBTQ0lGMCBvbiBSOEE3NzkwL1I4QTc3OTEvUjhBNzc5MykiCisJCWRlcGVuZHMgb24gQVJDSF9SOEE3NzkwIHx8IEFSQ0hfUjhBNzc5MSB8fCBBUkNIX1I4QTc3OTMKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIHZpYSBTQ0lGMCBvbiBSZW5lc2FzIFItQ2FyIEgyIChSOEE3NzkwKSwgTTItVyAoUjhBNzc5MSksIG9yCisJCSAgTTItTiAoUjhBNzc5MykuCisKKwljb25maWcgREVCVUdfUkNBUl9HRU4yX1NDSUYyCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBTQ0lGMiBvbiBSOEE3Nzk0IgorCQlkZXBlbmRzIG9uIEFSQ0hfUjhBNzc5NAorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgdmlhIFNDSUYyIG9uIFJlbmVzYXMgUi1DYXIgRTIgKFI4QTc3OTQpLgorCisJY29uZmlnIERFQlVHX1JNT0JJTEVfU0NJRkEwCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBTQ0lGQTAgb24gUjhBNzNBNC9TSDczNzIiCisJCWRlcGVuZHMgb24gQVJDSF9SOEE3M0E0IHx8IEFSQ0hfU0g3MzcyCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICB2aWEgU0NJRkEwIG9uIFJlbmVzYXMgUi1Nb2JpbGUgQVBFNiAoUjhBNzNBNCkgb3IgU0gtTW9iaWxlCisJCSAgQVA0IChTSDczNzIpLgorCisJY29uZmlnIERFQlVHX1JNT0JJTEVfU0NJRkExCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBTQ0lGQTEgb24gUjhBNzc0MCIKKwkJZGVwZW5kcyBvbiBBUkNIX1I4QTc3NDAKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIHZpYSBTQ0lGQTEgb24gUmVuZXNhcyBSLU1vYmlsZSBBMSAoUjhBNzc0MCkuCisKKwljb25maWcgREVCVUdfUk1PQklMRV9TQ0lGQTQKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFNDSUZBNCBvbiBTSDczQTAiCisJCWRlcGVuZHMgb24gQVJDSF9TSDczQTAKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIHZpYSBTQ0lGQTQgb24gUmVuZXNhcyBTSC1Nb2JpbGUgQUc1IChTSDczQTApLgorCiAJY29uZmlnIERFQlVHX1MzQ19VQVJUMAogCQlkZXBlbmRzIG9uIFBMQVRfU0FNU1VORwogCQlzZWxlY3QgREVCVUdfRVhZTk9TX1VBUlQgaWYgQVJDSF9FWFlOT1MKQEAgLTcyMyw2ICs4MTMsMTQgQEAKIAkJICB0aGVpciBvdXRwdXQgdG8gVUFSVCAyLiBUaGUgcG9ydCBtdXN0IGhhdmUgYmVlbiBpbml0aWFsaXNlZAogCQkgIGJ5IHRoZSBib290LWxvYWRlciBiZWZvcmUgdXNlLgogCisJY29uZmlnIERFQlVHX1NBMTEwMAorCQlkZXBlbmRzIG9uIEFSQ0hfU0ExMTAwCisJCWJvb2wgIlVzZSBTQTExMDAgVUFSVHMgZm9yIGxvdy1sZXZlbCBkZWJ1ZyIKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIG9uIFNBLTExeDAgVUFSVCBwb3J0cy4gVGhlIGtlcm5lbCB3aWxsIGNoZWNrIGZvciB0aGUgZmlyc3QKKwkJICBlbmFibGVkIFVBUlQgaW4gYSBzZXF1ZW5jZSAzLTEtMi4KKwogCWNvbmZpZyBERUJVR19TT0NGUEdBX1VBUlQKIAkJZGVwZW5kcyBvbiBBUkNIX1NPQ0ZQR0EKIAkJYm9vbCAiVXNlIFNPQ0ZQR0EgVUFSVCBmb3IgbG93LWxldmVsIGRlYnVnIgpAQCAtNzMxLDYgKzgyOSwxNCBAQAogCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAogCQkgIG9uIFNPQ0ZQR0EgYmFzZWQgcGxhdGZvcm1zLgogCisJY29uZmlnIERFQlVHX1NVTjlJX1VBUlQwCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBzdW45aSBVQVJUMCIKKwkJZGVwZW5kcyBvbiBNQUNIX1NVTjlJCisJCXNlbGVjdCBERUJVR19VQVJUXzgyNTAKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIG9uIEFsbHdpbm5lciBBODAgYmFzZWQgcGxhdGZvcm1zIG9uIHRoZSBVQVJUMC4KKwogCWNvbmZpZyBERUJVR19TVU5YSV9VQVJUMAogCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgc3VuWGkgVUFSVDAiCiAJCWRlcGVuZHMgb24gQVJDSF9TVU5YSQpAQCAtODY2LDYgKzk3MiwyMiBAQAogCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAogCQkgIGZvciBNZWRpYXRlayBtdDY1ODkgYmFzZWQgcGxhdGZvcm1zIG9uIFVBUlQwLgogCisJY29uZmlnIERFQlVHX01UODEyN19VQVJUMAorCQlib29sICJNZWRpYXRlayBtdDgxMjcgVUFSVDAiCisJCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSworCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICBmb3IgTWVkaWF0ZWsgbXQ4MTI3IGJhc2VkIHBsYXRmb3JtcyBvbiBVQVJUMC4KKworCWNvbmZpZyBERUJVR19NVDgxMzVfVUFSVDMKKwkJYm9vbCAiTWVkaWF0ZWsgbXQ4MTM1IFVBUlQzIgorCQlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsKKwkJc2VsZWN0IERFQlVHX1VBUlRfODI1MAorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgZm9yIE1lZGlhdGVrIG10ODEzNSBiYXNlZCBwbGF0Zm9ybXMgb24gVUFSVDMuCisKIAljb25maWcgREVCVUdfVkVYUFJFU1NfVUFSVDBfREVURUNUCiAJCWJvb2wgIkF1dG9kZXRlY3QgVUFSVDAgb24gVmVyc2F0aWxlIEV4cHJlc3MgQ29ydGV4LUEgY29yZSB0aWxlcyIKIAkJZGVwZW5kcyBvbiBBUkNIX1ZFWFBSRVNTICYmIENQVV9DUDE1X01NVQpAQCAtMTA0MSw3ICsxMTYzLDkgQEAKIAogY29uZmlnIERFQlVHX0xMX0lOQ0xVREUKIAlzdHJpbmcKKwlkZWZhdWx0ICJkZWJ1Zy9zYTExMDAuUyIgaWYgREVCVUdfU0ExMTAwCiAJZGVmYXVsdCAiZGVidWcvODI1MC5TIiBpZiBERUJVR19MTF9VQVJUXzgyNTAgfHwgREVCVUdfVUFSVF84MjUwCisJZGVmYXVsdCAiZGVidWcvYXNtOTI2MC5TIiBpZiBERUJVR19BU005MjYwX1VBUlQKIAlkZWZhdWx0ICJkZWJ1Zy9jbHBzNzExeC5TIiBpZiBERUJVR19DTFBTNzExWF9VQVJUMSB8fCBERUJVR19DTFBTNzExWF9VQVJUMgogCWRlZmF1bHQgImRlYnVnL21lc29uLlMiIGlmIERFQlVHX01FU09OX1VBUlRBTwogCWRlZmF1bHQgImRlYnVnL3BsMDF4LlMiIGlmIERFQlVHX0xMX1VBUlRfUEwwMVggfHwgREVCVUdfVUFSVF9QTDAxWApAQCAtMTA2MSw2ICsxMTg1LDE0IEBACiAJCQkJIERFQlVHX0lNWDZTWF9VQVJUCiAJZGVmYXVsdCAiZGVidWcvbXNtLlMiIGlmIERFQlVHX01TTV9VQVJUIHx8IERFQlVHX1FDT01fVUFSVERNCiAJZGVmYXVsdCAiZGVidWcvb21hcDJwbHVzLlMiIGlmIERFQlVHX09NQVAyUExVU19VQVJUCisJZGVmYXVsdCAiZGVidWcvcmVuZXNhcy1zY2lmLlMiIGlmIERFQlVHX1I3UzcyMTAwX1NDSUYyCisJZGVmYXVsdCAiZGVidWcvcmVuZXNhcy1zY2lmLlMiIGlmIERFQlVHX1JDQVJfR0VOMV9TQ0lGMAorCWRlZmF1bHQgImRlYnVnL3JlbmVzYXMtc2NpZi5TIiBpZiBERUJVR19SQ0FSX0dFTjFfU0NJRjIKKwlkZWZhdWx0ICJkZWJ1Zy9yZW5lc2FzLXNjaWYuUyIgaWYgREVCVUdfUkNBUl9HRU4yX1NDSUYwCisJZGVmYXVsdCAiZGVidWcvcmVuZXNhcy1zY2lmLlMiIGlmIERFQlVHX1JDQVJfR0VOMl9TQ0lGMgorCWRlZmF1bHQgImRlYnVnL3JlbmVzYXMtc2NpZi5TIiBpZiBERUJVR19STU9CSUxFX1NDSUZBMAorCWRlZmF1bHQgImRlYnVnL3JlbmVzYXMtc2NpZi5TIiBpZiBERUJVR19STU9CSUxFX1NDSUZBMQorCWRlZmF1bHQgImRlYnVnL3JlbmVzYXMtc2NpZi5TIiBpZiBERUJVR19STU9CSUxFX1NDSUZBNAogCWRlZmF1bHQgImRlYnVnL3MzYzI0eHguUyIgaWYgREVCVUdfUzNDMjRYWF9VQVJUCiAJZGVmYXVsdCAiZGVidWcvczVwdjIxMC5TIiBpZiBERUJVR19TNVBWMjEwX1VBUlQKIAlkZWZhdWx0ICJkZWJ1Zy9zaXJmLlMiIGlmIERFQlVHX1NJUkZQUklNQTJfVUFSVDEgfHwgREVCVUdfU0lSRk1BUkNPX1VBUlQxCkBAIC0xMTA2LDYgKzEyMzgsNyBAQAogCWRlZmF1bHQgMHgwMjUzMGMwMCBpZiBERUJVR19LRVlTVE9ORV9VQVJUMAogCWRlZmF1bHQgMHgwMjUzMTAwMCBpZiBERUJVR19LRVlTVE9ORV9VQVJUMQogCWRlZmF1bHQgMHgwMzAxMGZlMCBpZiBBUkNIX1JQQworCWRlZmF1bHQgMHgwNzAwMDAwMCBpZiBERUJVR19TVU45SV9VQVJUMAogCWRlZmF1bHQgMHgxMDAwOTAwMCBpZiBERUJVR19SRUFMVklFV19TVERfUE9SVCB8fCBcCiAJCQkJREVCVUdfVkVYUFJFU1NfVUFSVDBfQ0E5CiAJZGVmYXVsdCAweDEwMTBjMDAwIGlmIERFQlVHX1JFQUxWSUVXX1BCMTE3Nl9QT1JUCkBAIC0xMTEzLDcgKzEyNDYsOSBAQAogCWRlZmF1bHQgMHgxMDEyNjAwMCBpZiBERUJVR19SSzNYX1VBUlQxCiAJZGVmYXVsdCAweDEwMWYxMDAwIGlmIEFSQ0hfVkVSU0FUSUxFCiAJZGVmYXVsdCAweDEwMWZiMDAwIGlmIERFQlVHX05PTUFESUtfVUFSVAorCWRlZmF1bHQgMHgxMTAwMjAwMCBpZiBERUJVR19NVDgxMjdfVUFSVDAKIAlkZWZhdWx0IDB4MTEwMDYwMDAgaWYgREVCVUdfTVQ2NTg5X1VBUlQwCisJZGVmYXVsdCAweDExMDA5MDAwIGlmIERFQlVHX01UODEzNV9VQVJUMwogCWRlZmF1bHQgMHgxNjAwMDAwMCBpZiBBUkNIX0lOVEVHUkFUT1IKIAlkZWZhdWx0IDB4MTgwMDAzMDAgaWYgREVCVUdfQkNNXzUzMDFYCiAJZGVmYXVsdCAweDFjMDkwMDAwIGlmIERFQlVHX1ZFWFBSRVNTX1VBUlQwX1JTMQpAQCAtMTEzNSw2ICsxMjcwLDcgQEAKIAlkZWZhdWx0IDB4NzgwMDAwMDAgaWYgREVCVUdfQ05TM1hYWAogCWRlZmF1bHQgMHg3YzAwMDNmOCBpZiBGT09UQlJJREdFCiAJZGVmYXVsdCAweDc4MDAwMDAwIGlmIERFQlVHX0NOUzNYWFgKKwlkZWZhdWx0IDB4ODAwMTAwMDAgaWYgREVCVUdfQVNNOTI2MF9VQVJUCiAJZGVmYXVsdCAweDgwMDcwMDAwIGlmIERFQlVHX0lNWDIzX1VBUlQKIAlkZWZhdWx0IDB4ODAwNzQwMDAgaWYgREVCVUdfSU1YMjhfVUFSVAogCWRlZmF1bHQgMHg4MDIzMDAwMCBpZiBERUJVR19QSUNPWENFTExfVUFSVApAQCAtMTE1Miw3ICsxMjg4LDE0IEBACiAJZGVmYXVsdCAweGQ0MDE4MDAwIGlmIERFQlVHX01NUF9VQVJUMwogCWRlZmF1bHQgMHhlMDAwMDAwMCBpZiBBUkNIX1NQRUFSMTNYWAogCWRlZmF1bHQgMHhlNDAwNzAwMCBpZiBERUJVR19ISVAwNF9VQVJUCisJZGVmYXVsdCAweGU2YzQwMDAwIGlmIERFQlVHX1JNT0JJTEVfU0NJRkEwCisJZGVmYXVsdCAweGU2YzUwMDAwIGlmIERFQlVHX1JNT0JJTEVfU0NJRkExCisJZGVmYXVsdCAweGU2YzgwMDAwIGlmIERFQlVHX1JNT0JJTEVfU0NJRkE0CisJZGVmYXVsdCAweGU2ZTU4MDAwIGlmIERFQlVHX1JDQVJfR0VOMl9TQ0lGMgorCWRlZmF1bHQgMHhlNmU2MDAwMCBpZiBERUJVR19SQ0FSX0dFTjJfU0NJRjAKKwlkZWZhdWx0IDB4ZTgwMDgwMDAgaWYgREVCVUdfUjdTNzIxMDBfU0NJRjIKIAlkZWZhdWx0IDB4ZjAwMDBiZTAgaWYgQVJDSF9FQlNBMTEwCisJZGVmYXVsdCAweGYwNDBhYjAwIGlmIERFQlVHX0JSQ01TVEJfVUFSVAogCWRlZmF1bHQgMHhmMTAxMjAwMCBpZiBERUJVR19NVkVCVV9VQVJUX0FMVEVSTkFURQogCWRlZmF1bHQgMHhmMTAxMjAwMCBpZiBBUkNIX0RPVkUgfHwgQVJDSF9NVjc4WFgwIHx8IFwKIAkJCQlBUkNIX09SSU9ONVgKQEAgLTExNjQsMjQgKzEzMDcsMzMgQEAKIAlkZWZhdWx0IDB4ZmY2OTAwMDAgaWYgREVCVUdfUkszMl9VQVJUMgogCWRlZmF1bHQgMHhmZmMwMjAwMCBpZiBERUJVR19TT0NGUEdBX1VBUlQKIAlkZWZhdWx0IDB4ZmZkODIzNDAgaWYgQVJDSF9JT1AxM1hYCisJZGVmYXVsdCAweGZmZTQwMDAwIGlmIERFQlVHX1JDQVJfR0VOMV9TQ0lGMAorCWRlZmF1bHQgMHhmZmU0MjAwMCBpZiBERUJVR19SQ0FSX0dFTjFfU0NJRjIKIAlkZWZhdWx0IDB4ZmZmMzYwMDAgaWYgREVCVUdfSElHSEJBTktfVUFSVAogCWRlZmF1bHQgMHhmZmZlODYwMCBpZiBERUJVR19VQVJUX0JDTTYzWFgKIAlkZWZhdWx0IDB4ZmZmZmY3MDAgaWYgQVJDSF9JT1AzM1gKIAlkZXBlbmRzIG9uIERFQlVHX0xMX1VBUlRfODI1MCB8fCBERUJVR19MTF9VQVJUX1BMMDFYIHx8IFwKIAkJREVCVUdfTExfVUFSVF9FRk0zMiB8fCBcCiAJCURFQlVHX1VBUlRfODI1MCB8fCBERUJVR19VQVJUX1BMMDFYIHx8IERFQlVHX01FU09OX1VBUlRBTyB8fCBcCi0JCURFQlVHX01TTV9VQVJUIHx8IERFQlVHX1FDT01fVUFSVERNIHx8IERFQlVHX1MzQzI0WFhfVUFSVCB8fCBcCi0JCURFQlVHX1VBUlRfQkNNNjNYWAorCQlERUJVR19NU01fVUFSVCB8fCBERUJVR19RQ09NX1VBUlRETSB8fCBERUJVR19SN1M3MjEwMF9TQ0lGMiB8fCBcCisJCURFQlVHX1JDQVJfR0VOMV9TQ0lGMCB8fCBERUJVR19SQ0FSX0dFTjFfU0NJRjIgfHwgXAorCQlERUJVR19SQ0FSX0dFTjJfU0NJRjAgfHwgREVCVUdfUkNBUl9HRU4yX1NDSUYyIHx8IFwKKwkJREVCVUdfUk1PQklMRV9TQ0lGQTAgfHwgREVCVUdfUk1PQklMRV9TQ0lGQTEgfHwgXAorCQlERUJVR19STU9CSUxFX1NDSUZBNCB8fCBERUJVR19TM0MyNFhYX1VBUlQgfHwgXAorCQlERUJVR19VQVJUX0JDTTYzWFggfHwgREVCVUdfQVNNOTI2MF9VQVJUCiAKIGNvbmZpZyBERUJVR19VQVJUX1ZJUlQKIAloZXggIlZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mIGRlYnVnIFVBUlQiCiAJZGVmYXVsdCAweGUwMDEwZmUwIGlmIEFSQ0hfUlBDCiAJZGVmYXVsdCAweGUxMDAwMDAwIGlmIERFQlVHX01TTV9VQVJUCiAJZGVmYXVsdCAweGYwMDAwYmUwIGlmIEFSQ0hfRUJTQTExMAorCWRlZmF1bHQgMHhmMDAxMDAwMCBpZiBERUJVR19BU005MjYwX1VBUlQKIAlkZWZhdWx0IDB4ZjAxZmIwMDAgaWYgREVCVUdfTk9NQURJS19VQVJUCiAJZGVmYXVsdCAweGYwMjAxMDAwIGlmIERFQlVHX0JDTTI4MzUKIAlkZWZhdWx0IDB4ZjEwMDAzMDAgaWYgREVCVUdfQkNNXzUzMDFYCisJZGVmYXVsdCAweGYxMDAyMDAwIGlmIERFQlVHX01UODEyN19VQVJUMAogCWRlZmF1bHQgMHhmMTAwNjAwMCBpZiBERUJVR19NVDY1ODlfVUFSVDAKKwlkZWZhdWx0IDB4ZjEwMDkwMDAgaWYgREVCVUdfTVQ4MTM1X1VBUlQzCiAJZGVmYXVsdCAweGYxMWYxMDAwIGlmIEFSQ0hfVkVSU0FUSUxFCiAJZGVmYXVsdCAweGYxNjAwMDAwIGlmIEFSQ0hfSU5URUdSQVRPUgogCWRlZmF1bHQgMHhmMWMyODAwMCBpZiBERUJVR19TVU5YSV9VQVJUMApAQCAtMTE5MCw2ICsxMzQyLDcgQEAKIAlkZWZhdWx0IDB4ZjYyMDAwMDAgaWYgREVCVUdfUFhBX1VBUlQxCiAJZGVmYXVsdCAweGY0MDkwMDAwIGlmIEFSQ0hfTFBDMzJYWAogCWRlZmF1bHQgMHhmNDIwMDAwMCBpZiBBUkNIX0dFTUlOSQorCWRlZmF1bHQgMHhmNzAwMDAwMCBpZiBERUJVR19TVU45SV9VQVJUMAogCWRlZmF1bHQgMHhmNzAwMDAwMCBpZiBERUJVR19TM0MyNFhYX1VBUlQgJiYgKERFQlVHX1MzQ19VQVJUMCB8fCBcCiAJCQkJREVCVUdfUzNDMjQxMF9VQVJUMCkKIAlkZWZhdWx0IDB4ZjcwMDQwMDAgaWYgREVCVUdfUzNDMjRYWF9VQVJUICYmIChERUJVR19TM0NfVUFSVDEgfHwgXApAQCAtMTIwNCw2ICsxMzU3LDcgQEAKIAlkZWZhdWx0IDB4ZmIwMDIwMDAgaWYgREVCVUdfQ05TM1hYWAogCWRlZmF1bHQgMHhmYjAwOTAwMCBpZiBERUJVR19SRUFMVklFV19TVERfUE9SVAogCWRlZmF1bHQgMHhmYjEwYzAwMCBpZiBERUJVR19SRUFMVklFV19QQjExNzZfUE9SVAorCWRlZmF1bHQgMHhmYzQwYWIwMCBpZiBERUJVR19CUkNNU1RCX1VBUlQKIAlkZWZhdWx0IDB4ZmNmZTg2MDAgaWYgREVCVUdfVUFSVF9CQ002M1hYCiAJZGVmYXVsdCAweGZkMDAwMDAwIGlmIEFSQ0hfU1BFQVIzWFggfHwgQVJDSF9TUEVBUjZYWAogCWRlZmF1bHQgMHhmZDAwMDAwMCBpZiBBUkNIX1NQRUFSMTNYWApAQCAtMTI0NCwxMiArMTM5OCwxMiBAQAogCWRlcGVuZHMgb24gREVCVUdfTExfVUFSVF84MjUwIHx8IERFQlVHX0xMX1VBUlRfUEwwMVggfHwgXAogCQlERUJVR19VQVJUXzgyNTAgfHwgREVCVUdfVUFSVF9QTDAxWCB8fCBERUJVR19NRVNPTl9VQVJUQU8gfHwgXAogCQlERUJVR19NU01fVUFSVCB8fCBERUJVR19RQ09NX1VBUlRETSB8fCBERUJVR19TM0MyNFhYX1VBUlQgfHwgXAotCQlERUJVR19VQVJUX0JDTTYzWFgKKwkJREVCVUdfVUFSVF9CQ002M1hYIHx8IERFQlVHX0FTTTkyNjBfVUFSVAogCiBjb25maWcgREVCVUdfVUFSVF84MjUwX1NISUZUCiAJaW50ICJSZWdpc3RlciBvZmZzZXQgc2hpZnQgZm9yIHRoZSA4MjUwIGRlYnVnIFVBUlQiCiAJZGVwZW5kcyBvbiBERUJVR19MTF9VQVJUXzgyNTAgfHwgREVCVUdfVUFSVF84MjUwCi0JZGVmYXVsdCAwIGlmIEZPT1RCUklER0UgfHwgQVJDSF9JT1AzMlgKKwlkZWZhdWx0IDAgaWYgRk9PVEJSSURHRSB8fCBBUkNIX0lPUDMyWCB8fCBERUJVR19CQ01fNTMwMVgKIAlkZWZhdWx0IDIKIAogY29uZmlnIERFQlVHX1VBUlRfODI1MF9XT1JECkBAIC0xMjYwLDcgKzE0MTQsOCBAQAogCQlBUkNIX0tFWVNUT05FIHx8IFwKIAkJREVCVUdfREFWSU5DSV9ETXhfVUFSVDAgfHwgREVCVUdfREFWSU5DSV9EQThYWF9VQVJUMSB8fCBcCiAJCURFQlVHX0RBVklOQ0lfREE4WFhfVUFSVDIgfHwgXAotCQlERUJVR19CQ01fS09OQV9VQVJUIHx8IERFQlVHX1JLMzJfVUFSVDIKKwkJREVCVUdfQkNNX0tPTkFfVUFSVCB8fCBERUJVR19SSzMyX1VBUlQyIHx8IFwKKwkJREVCVUdfQlJDTVNUQl9VQVJUCiAKIGNvbmZpZyBERUJVR19VQVJUXzgyNTBfRkxPV19DT05UUk9MCiAJYm9vbCAiRW5hYmxlIGZsb3cgY29udHJvbCBmb3IgODI1MCBVQVJUIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCAwMzRhOTQ5Li5jMTc4NWVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMzEyLDggKzMxMiwxMiBAQAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkvZHRzIE1BQ0hJTkU9JChNQUNISU5FKSAkKGJvb3QpL2R0cy8kQAogCiBQSE9OWSArPSBkdGJzIGR0YnNfaW5zdGFsbAotZHRicyBkdGJzX2luc3RhbGw6IHByZXBhcmUgc2NyaXB0cwotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkvZHRzIE1BQ0hJTkU9JChNQUNISU5FKSAkQAorCitkdGJzOiBwcmVwYXJlIHNjcmlwdHMKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpL2R0cworCitkdGJzX2luc3RhbGw6CisJJChRKSQoTUFLRSkgJChkdGJpbnN0KT0kKGJvb3QpL2R0cwogCiAjIFdlIHVzZSBNUlBST1BFUl9GSUxFUyBhbmQgQ0xFQU5fRklMRVMgbm93CiBhcmNoY2xlYW46CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZSBiL2FyY2gvYXJtL2Jvb3QvZHRzL01ha2VmaWxlCmluZGV4IDM4Yzg5Y2EuLjZhM2Q5YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL01ha2VmaWxlCkBAIC01NCw4ICs1NCwxNyBAQAogZHRiLSQoQ09ORklHX0FSQ0hfQVRMQVM2KSArPSBhdGxhczYtZXZiLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfQVhYSUEpICs9IGF4bTU1MTYtYW1hcmlsbG8uZHRiCiBkdGItJChDT05GSUdfQVJDSF9CQ00yODM1KSArPSBiY20yODM1LXJwaS1iLmR0YgotZHRiLSQoQ09ORklHX0FSQ0hfQkNNXzUzMDFYKSArPSBiY200NzA4LW5ldGdlYXItcjYyNTAuZHRiCitkdGItJChDT05GSUdfQVJDSF9CQ00yODM1KSArPSBiY20yODM1LXJwaS1iLXBsdXMuZHRiCitkdGItJChDT05GSUdfQVJDSF9CQ01fNTMwMVgpICs9IFwKKwliY200NzA4LWJ1ZmZhbG8td3pyLTE3NTBkaHAuZHRiIFwKKwliY200NzA4LW5ldGdlYXItcjYyNTAuZHRiIFwKKwliY200NzA4LW5ldGdlYXItcjYzMDAtdjIuZHRiIFwKKwliY200NzA4MS1hc3VzLXJ0LW4xOHUuZHRiIFwKKwliY200NzA4MS1idWZmYWxvLXd6ci02MDBkaHAyLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfQkNNXzYzWFgpICs9IGJjbTk2MzEzOGR2dC5kdGIKK2R0Yi0kKENPTkZJR19BUkNIX0JDTV9DWUdOVVMpICs9IGJjbTkxMTM2MF9lbnRwaG4uZHRiIFwKKwliY205MTEzNjBrLmR0YiBcCisJYmNtOTU4MzAway5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX0JDTV9NT0JJTEUpICs9IGJjbTI4MTU1LWFwLmR0YiBcCiAJYmNtMjE2NjQtZ2FybmV0LmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfQkVSTElOKSArPSBcCkBAIC02Nyw3ICs3Niw5IEBACiBkdGItJChDT05GSUdfQVJDSF9EQVZJTkNJKSArPSBkYTg1MC1lbmJ3LWNtYy5kdGIgXAogCWRhODUwLWV2bS5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX0VGTTMyKSArPSBlZm0zMmdnLWRrMzc1MC5kdGIKLWR0Yi0kKENPTkZJR19BUkNIX0VYWU5PUykgKz0gZXh5bm9zNDIxMC1vcmlnZW4uZHRiIFwKK2R0Yi0kKENPTkZJR19BUkNIX0VYWU5PUykgKz0gZXh5bm9zMzI1MC1tb25rLmR0YiBcCisJZXh5bm9zMzI1MC1yaW5hdG8uZHRiIFwKKwlleHlub3M0MjEwLW9yaWdlbi5kdGIgXAogCWV4eW5vczQyMTAtc21ka3YzMTAuZHRiIFwKIAlleHlub3M0MjEwLXRyYXRzLmR0YiBcCiAJZXh5bm9zNDIxMC11bml2ZXJzYWxfYzIxMC5kdGIgXApAQCAtODEsNiArOTIsNyBAQAogCWV4eW5vczUyNTAtYXJuZGFsZS5kdGIgXAogCWV4eW5vczUyNTAtc21kazUyNTAuZHRiIFwKIAlleHlub3M1MjUwLXNub3cuZHRiIFwKKwlleHlub3M1MjUwLXNwcmluZy5kdGIgXAogCWV4eW5vczUyNjAteHlyZWY1MjYwLmR0YiBcCiAJZXh5bm9zNTQxMC1zbWRrNTQxMC5kdGIgXAogCWV4eW5vczU0MjAtYXJuZGFsZS1vY3RhLmR0YiBcCkBAIC0xMDQsNiArMTE2LDcgQEAKIAlraXJrd29vZC1kMm5ldC5kdGIgXAogCWtpcmt3b29kLWRiLTg4ZjYyODEuZHRiIFwKIAlraXJrd29vZC1kYi04OGY2MjgyLmR0YiBcCisJa2lya3dvb2QtZGlyNjY1LmR0YiBcCiAJa2lya3dvb2QtZG5zMzIwLmR0YiBcCiAJa2lya3dvb2QtZG5zMzI1LmR0YiBcCiAJa2lya3dvb2QtZG9ja3N0YXIuZHRiIFwKQEAgLTI0MCw2ICsyNTMsNyBAQAogCWlteDZxLXNhYnJlbGl0ZS5kdGIgXAogCWlteDZxLXNhYnJlc2QuZHRiIFwKIAlpbXg2cS1zYmM2eC5kdGIgXAorCWlteDZxLXRiczI5MTAuZHRiIFwKIAlpbXg2cS11ZG9vLmR0YiBcCiAJaW14NnEtd2FuZGJvYXJkLmR0YiBcCiAJaW14NnEtd2FuZGJvYXJkLXJldmIxLmR0YiBcCkBAIC0yNTAsNiArMjY0LDkgQEAKIAlpbXg2cS10eDZxLTExMTAuZHRiIFwKIAlpbXg2c2wtZXZrLmR0YiBcCiAJaW14NnN4LXNkYi5kdGIgXAorCWxzMTAyMWEtcWRzLmR0YiBcCisJbHMxMDIxYS10d3IuZHRiIFwKKwl2ZjUwMC1jb2xpYnJpLWV2YWwtdjMuZHRiIFwKIAl2ZjYxMC1jb2xpYnJpLWV2YWwtdjMuZHRiIFwKIAl2ZjYxMC1jb3NtaWMuZHRiIFwKIAl2ZjYxMC10d3IuZHRiCkBAIC0yNzQsNyArMjkxLDggQEAKIAlpbXgyOC1tMjhldmsuZHRiIFwKIAlpbXgyOC1zcHMxLmR0YiBcCiAJaW14MjgtdHgyOC5kdGIKLWR0Yi0kKENPTkZJR19BUkNIX05PTUFESUspICs9IHN0ZS1ub21hZGlrLXM4ODE1LmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfTk9NQURJSykgKz0gc3RlLW5vbWFkaWstczg4MTUuZHRiIFwKKwlzdGUtbm9tYWRpay1uaGsxNS5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX05TUElSRSkgKz0gbnNwaXJlLWN4LmR0YiBcCiAJbnNwaXJlLXRwLmR0YiBcCiAJbnNwaXJlLWNscC5kdGIKQEAgLTMwMiw3ICszMjAsOSBAQAogCW9tYXAzLWhhLmR0YiBcCiAJb21hcDMtaGEtbGNkLmR0YiBcCiAJb21hcDMtaWdlcDAwMjAuZHRiIFwKKwlvbWFwMy1pZ2VwMDAyMC1yZXYtZi5kdGIgXAogCW9tYXAzLWlnZXAwMDMwLmR0YiBcCisJb21hcDMtaWdlcDAwMzAtcmV2LWcuZHRiIFwKIAlvbWFwMy1sZHAuZHRiIFwKIAlvbWFwMy1saWxseS1kYmIwNTYuZHRiIFwKIAlvbWFwMy1uOTAwLmR0YiBcCkBAIC0zMzEsNyArMzUxLDggQEAKIAlhbTMzNXgtZXZtLmR0YiBcCiAJYW0zMzV4LWV2bXNrLmR0YiBcCiAJYW0zMzV4LW5hbm8uZHRiIFwKLQlhbTMzNXgtcGVwcGVyLmR0YgorCWFtMzM1eC1wZXBwZXIuZHRiIFwKKwlhbTMzNXgtbHhtLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfT01BUDQpICs9IG9tYXA0LWR1b3Zlcm8tcGFybG9yLmR0YiBcCiAJb21hcDQtcGFuZGEuZHRiIFwKIAlvbWFwNC1wYW5kYS1hNC5kdGIgXApAQCAtMzQ3LDYgKzM2OCw3IEBACiAJb21hcDUtc2JjLXQ1NC5kdGIgXAogCW9tYXA1LXVldm0uZHRiCiBkdGItJChDT05GSUdfU09DX0RSQTdYWCkgKz0gZHJhNy1ldm0uZHRiIFwKKwlhbTU3eHgtYmVhZ2xlLXgxNS5kdGIgXAogCWRyYTcyLWV2bS5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX09SSU9ONVgpICs9IG9yaW9uNXgtbGFjaWUtZDItbmV0d29yay5kdGIgXAogCW9yaW9uNXgtbGFjaWUtZXRoZXJuZXQtZGlzay1taW5pLXYyLmR0YiBcCkBAIC0zNjMsOCArMzg1LDEwIEBACiAJcWNvbS1tc204NjYwLXN1cmYuZHRiIFwKIAlxY29tLW1zbTg5NjAtY2RwLmR0YiBcCiAJcWNvbS1tc204OTc0LXNvbnkteHBlcmlhLWhvbmFtaS5kdGIKK2R0Yi0kKENPTkZJR19BUkNIX1JFQUxWSUVXKSArPSBhcm0tcmVhbHZpZXctcGIxMTc2LmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfUk9DS0NISVApICs9IFwKIAlyazMwNjZhLWJxY3VyaWUyLmR0YiBcCisJcmszMDY2YS1tYXJzYm9hcmQuZHRiIFwKIAlyazMxODgtcmFkeGFyb2NrLmR0YiBcCiAJcmszMjg4LWV2Yi1hY3Q4ODQ2LmR0YiBcCiAJcmszMjg4LWV2Yi1yazgwOC5kdGIKQEAgLTM3NiwyNyArNDAwLDI3IEBACiAJczVwdjIxMC1zbWRrYzExMC5kdGIgXAogCXM1cHYyMTAtc21ka3YyMTAuZHRiIFwKIAlzNXB2MjEwLXRvcmJyZWNrLmR0YgotZHRiLSQoQ09ORklHX0FSQ0hfU0hNT0JJTEVfTEVHQUNZKSArPSByN3M3MjEwMC1nZW5tYWkuZHRiIFwKK2R0Yi0kKENPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWSkgKz0gXAorCXI4YTczYTQtYXBlNmV2bS5kdGIgXAorCXI4YTczYTQtYXBlNmV2bS1yZWZlcmVuY2UuZHRiIFwKIAlyOGE3NzQwLWFybWFkaWxsbzgwMGV2YS5kdGIgXAogCXI4YTc3NzgtYm9ja3cuZHRiIFwKIAlyOGE3Nzc4LWJvY2t3LXJlZmVyZW5jZS5kdGIgXAogCXI4YTc3NzktbWFyemVuLmR0YiBcCi0JcjhhNzc5MS1rb2Vsc2NoLmR0YiBcCiAJcjhhNzc5MC1sYWdlci5kdGIgXAorCXNoNzM3Mi1tYWNrZXJlbC5kdGIgXAogCXNoNzNhMC1rem05Zy5kdGIgXAotCXNoNzNhMC1rem05Zy1yZWZlcmVuY2UuZHRiIFwKLQlyOGE3M2E0LWFwZTZldm0uZHRiIFwKLQlyOGE3M2E0LWFwZTZldm0tcmVmZXJlbmNlLmR0YiBcCi0Jc2g3MzcyLW1hY2tlcmVsLmR0YgorCXNoNzNhMC1rem05Zy1yZWZlcmVuY2UuZHRiCiBkdGItJChDT05GSUdfQVJDSF9TSE1PQklMRV9NVUxUSSkgKz0gZW1ldjIta3ptOWQuZHRiIFwKIAlyN3M3MjEwMC1nZW5tYWkuZHRiIFwKIAlyOGE3NzQwLWFybWFkaWxsbzgwMGV2YS5kdGIgXAorCXI4YTc3NzktbWFyemVuLmR0YiBcCisJcjhhNzc5MC1sYWdlci5kdGIgXAogCXI4YTc3OTEtaGVubmluZ2VyLmR0YiBcCiAJcjhhNzc5MS1rb2Vsc2NoLmR0YiBcCi0JcjhhNzc5MC1sYWdlci5kdGIgXAotCXI4YTc3NzktbWFyemVuLmR0YiBcCiAJcjhhNzc5NC1hbHQuZHRiCiBkdGItJChDT05GSUdfQVJDSF9TT0NGUEdBKSArPSBzb2NmcGdhX2FycmlhNV9zb2Nkay5kdGIgXAorCXNvY2ZwZ2FfYXJyaWExMF9zb2Nkay5kdGIgXAogCXNvY2ZwZ2FfY3ljbG9uZTVfc29jZGsuZHRiIFwKIAlzb2NmcGdhX2N5Y2xvbmU1X3NvY2tpdC5kdGIgXAogCXNvY2ZwZ2FfY3ljbG9uZTVfc29jcmF0ZXMuZHRiIFwKQEAgLTQwOSw2ICs0MzMsNyBAQAogCXNwZWFyMzIwLWhtaS5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX1NQRUFSNlhYKSs9IHNwZWFyNjAwLWV2Yi5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX1NUSSkrPSBzdGloNDA3LWIyMTIwLmR0YiBcCisJc3RpaDQxMC1iMjEyMC5kdGIgXAogCXN0aWg0MTUtYjIwMDAuZHRiIFwKIAlzdGloNDE1LWIyMDIwLmR0YiBcCiAJc3RpaDQxNi1iMjAwMC5kdGIgXApAQCAtNDM1LDE1ICs0NjAsMjAgQEAKIAlzdW42aS1hMzEtaHVtbWluZ2JpcmQuZHRiIFwKIAlzdW42aS1hMzEtbTkuZHRiCiBkdGItJChDT05GSUdfTUFDSF9TVU43SSkgKz0gXAorCXN1bjdpLWEyMC1iYW5hbmFwaS5kdGIgXAogCXN1bjdpLWEyMC1jdWJpZWJvYXJkMi5kdGIgXAogCXN1bjdpLWEyMC1jdWJpZXRydWNrLmR0YiBcCiAJc3VuN2ktYTIwLWh1bW1pbmdiaXJkLmR0YiBcCiAJc3VuN2ktYTIwLWkxMi10dmJveC5kdGIgXAorCXN1bjdpLWEyMC1tMy5kdGIgXAogCXN1bjdpLWEyMC1vbGludXhpbm8tbGltZS5kdGIgXAorCXN1bjdpLWEyMC1vbGludXhpbm8tbGltZTIuZHRiIFwKIAlzdW43aS1hMjAtb2xpbnV4aW5vLW1pY3JvLmR0YiBcCiAJc3VuN2ktYTIwLXBjZHVpbm8zLmR0YgogZHRiLSQoQ09ORklHX01BQ0hfU1VOOEkpICs9IFwKIAlzdW44aS1hMjMtaXBwby1xOGgtdjUuZHRiCitkdGItJChDT05GSUdfTUFDSF9TVU45SSkgKz0gXAorCXN1bjlpLWE4MC1vcHRpbXVzLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfVEVHUkEpICs9IHRlZ3JhMjAtaGFybW9ueS5kdGIgXAogCXRlZ3JhMjAtaXJpcy01MTIuZHRiIFwKIAl0ZWdyYTIwLW1lZGNvbS13aWRlLmR0YiBcCkBAIC00ODksMTMgKzUxOSwxNSBAQAogCXp5bnEtcGFyYWxsZWxsYS5kdGIgXAogCXp5bnEtemM3MDIuZHRiIFwKIAl6eW5xLXpjNzA2LmR0YiBcCi0JenlucS16ZWQuZHRiCisJenlucS16ZWQuZHRiIFwKKwl6eW5xLXp5Ym8uZHRiCiBkdGItJChDT05GSUdfTUFDSF9BUk1BREFfMzcwKSArPSBcCiAJYXJtYWRhLTM3MC1kYi5kdGIgXAogCWFybWFkYS0zNzAtbWlyYWJveC5kdGIgXAogCWFybWFkYS0zNzAtbmV0Z2Vhci1ybjEwMi5kdGIgXAogCWFybWFkYS0zNzAtbmV0Z2Vhci1ybjEwNC5kdGIgXAotCWFybWFkYS0zNzAtcmQuZHRiCisJYXJtYWRhLTM3MC1yZC5kdGIgXAorCWFybWFkYS0zNzAtc3lub2xvZ3ktZHMyMTNqLmR0YgogZHRiLSQoQ09ORklHX01BQ0hfQVJNQURBXzM3NSkgKz0gXAogCWFybWFkYS0zNzUtZGIuZHRiCiBkdGItJChDT05GSUdfTUFDSF9BUk1BREFfMzhYKSArPSBcCkBAIC01MDgsMjQgKzU0MCwyMCBAQAogCWFybWFkYS14cC1sZW5vdm8taXg0LTMwMGQuZHRiIFwKIAlhcm1hZGEteHAtbWF0cml4LmR0YiBcCiAJYXJtYWRhLXhwLW5ldGdlYXItcm4yMTIwLmR0YiBcCi0JYXJtYWRhLXhwLW9wZW5ibG9ja3MtYXgzLTQuZHRiCisJYXJtYWRhLXhwLW9wZW5ibG9ja3MtYXgzLTQuZHRiIFwKKwlhcm1hZGEteHAtc3lub2xvZ3ktZHM0MTQuZHRiCiBkdGItJChDT05GSUdfTUFDSF9ET1ZFKSArPSBkb3ZlLWNtLWE1MTAuZHRiIFwKIAlkb3ZlLWN1Ym94LmR0YiBcCiAJZG92ZS1jdWJveC1lcy5kdGIgXAogCWRvdmUtZDJwbHVnLmR0YiBcCiAJZG92ZS1kM3BsdWcuZHRiIFwKIAlkb3ZlLWRvdmUtZGIuZHRiCi1kdGItJChDT05GSUdfQVJDSF9NRURJQVRFSykgKz0gbXQ2NTg5LWFxdWFyaXM1LmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfTUVESUFURUspICs9IG10NjU4OS1hcXVhcmlzNS5kdGIgXAorCW10NjU5Mi1ldmIuZHRiIFwKKwltdDgxMjctbW9vc2UuZHRiIFwKKwltdDgxMzUtZXZicDEuZHRiCiAKLXRhcmdldHMgKz0gZHRicyBkdGJzX2luc3RhbGwKLXRhcmdldHMgKz0gJChkdGIteSkKIGVuZGlmCiAKLSMgKi5kdGIgdXNlZCB0byBiZSBnZW5lcmF0ZWQgaW4gdGhlIGRpcmVjdG9yeSBhYm92ZS4gQ2xlYW4gb3V0IHRoZQotIyBvbGQgYnVpbGQgcmVzdWx0cyBzbyBwZW9wbGUgZG9uJ3QgYWNjaWRlbnRhbGx5IHVzZSB0aGVtLgotZHRiczogJChhZGRwcmVmaXggJChvYmopLywgJChkdGIteSkpCi0JJChRKXJtIC1mICQob2JqKS8uLi8qLmR0YgotCi1jbGVhbi1maWxlcyA6PSAqLmR0YgotCi1kdGJzX2luc3RhbGw6ICQoYWRkc3VmZml4IF9kdGJpbnN0XywgJChkdGIteSkpCithbHdheXMJCTo9ICQoZHRiLXkpCitjbGVhbi1maWxlcwk6PSAqLmR0YgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWV2bS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtZXZtLmR0cwppbmRleCBjNGI5NjhmLi41NGYxMThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtZXZtLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtZXZtLmR0cwpAQCAtMzA3LDYgKzMwNywxMyBAQAogCQkJMHgxNDQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkgLyogcm1paTFfcmVmX2Nsay5tY2FzcDFfYXhyMyAqLwogCQk+OwogCX07CisKKwlkY2FuMV9waW5zX2RlZmF1bHQ6IGRjYW4xX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDE2OCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMikgLyogdWFydDBfY3Rzbi5kX2NhbjFfdHggKi8KKwkJCTB4MTZjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTIpIC8qIHVhcnQwX3J0c24uZF9jYW4xX3J4ICovCisJCT47CisJfTsKIH07CiAKICZ1YXJ0MCB7CkBAIC00MzcsOSArNDQ0LDkgQEAKIAlzdGF0dXMgPSAib2theSI7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8Jm5hbmRmbGFzaF9waW5zX3MwPjsKLQlyYW5nZXMgPSA8MCAwIDB4MDgwMDAwMDAgMHgxMDAwMDAwMD47CS8qIENTMDogTkFORCAqLworCXJhbmdlcyA9IDwwIDAgMHgwODAwMDAwMCAweDEwMDAwMDA+OwkvKiBDUzA6IDE2TUIgZm9yIE5BTkQgKi8KIAluYW5kQDAsMCB7Ci0JCXJlZyA9IDwwIDAgMD47IC8qIENTMCwgb2Zmc2V0IDAgKi8KKwkJcmVnID0gPDAgMCA0PjsgLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKIAkJdGksZWxtLWlkID0gPCZlbG0+OwogCQluYW5kLWJ1cy13aWR0aCA9IDw4PjsKQEAgLTY2NCwzICs2NzEsOSBAQAogJmFlcyB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJmRjYW4xIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOwkvKiBFbmFibGUgb25seSBpZiBQcm9maWxlIDEgaXMgc2VsZWN0ZWQgKi8KKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmZGNhbjFfcGluc19kZWZhdWx0PjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtaWdlcDAwMzMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1pZ2VwMDAzMy5kdHNpCmluZGV4IGExYTBjYzUuLmMwZTExMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1pZ2VwMDAzMy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1pZ2VwMDAzMy5kdHNpCkBAIC0xMjYsMTAgKzEyNiwxMCBAQAogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZuYW5kZmxhc2hfcGlucz47CiAKLQlyYW5nZXMgPSA8MCAwIDB4MDgwMDAwMDAgMHgxMDAwMDAwMD47CS8qIENTMDogTkFORCAqLworCXJhbmdlcyA9IDwwIDAgMHgwODAwMDAwMCAweDEwMDAwMDA+OwkvKiBDUzA6IDE2TUIgZm9yIE5BTkQgKi8KIAogCW5hbmRAMCwwIHsKLQkJcmVnID0gPDAgMCAwPjsgLyogQ1MwLCBvZmZzZXQgMCAqLworCQlyZWcgPSA8MCAwIDQ+OyAvKiBDUzAsIG9mZnNldCAwLCBJTyBzaXplIDQgKi8KIAkJbmFuZC1idXMtd2lkdGggPSA8OD47CiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKIAkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8MT47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtbHhtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1seG0uZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNjZhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtbHhtLmR0cwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBOb3ZhVGVjaCBMTEMgLSBodHRwOi8vd3d3Lm5vdmF0ZWNod2ViLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKy9kdHMtdjEvOworCisjaW5jbHVkZSAiYW0zM3h4LmR0c2kiCisKKy8geworCW1vZGVsID0gIk5vdmFUZWNoIE9yaW9uTFhtIjsKKwljb21wYXRpYmxlID0gIm5vdmF0ZWNoLGFtMzM1eC1seG0iLCAidGksYW0zM3h4IjsKKworCWNwdXMgeworCQljcHVAMCB7CisJCQljcHUwLXN1cHBseSA9IDwmdmRkMV9yZWc+OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDIwMDAwMDAwPjsgLyogNTEyIE1CICovCisJfTsKKworCS8qIFBvd2VyIHN1cHBseSBwcm92aWRlcyBhIGZpeGVkIDVWIEAyQSAqLworCXZiYXQ6IGZpeGVkcmVndWxhdG9yQDAgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInZiYXQiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOworCX07CisKKwkvKiBQb3dlciBzdXBwbHkgcHJvdmlkZXMgYSBmaXhlZCAzLjNWIEAzQSAqLworCXZtbWNzZF9maXhlZDogZml4ZWRyZWd1bGF0b3JAMSB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidm1tY3NkX2ZpeGVkIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwl9OworfTsKKworJmFtMzN4eF9waW5tdXggeworCW1tYzFfcGluczogcGlubXV4X21tYzFfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweGYwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBtbWMwX2RhdDMgKi8KKwkJCTB4ZjQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1tYzBfZGF0MiAqLworCQkJMHhmOCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogbW1jMF9kYXQxICovCisJCQkweGZjIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBtbWMwX2RhdDAgKi8KKwkJCTB4MTAwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBtbWMwX2NsayAqLworCQkJMHgxMDQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1tYzBfY21kICovCisJCT47CisJfTsKKworCWkyYzBfcGluczogcGlubXV4X2kyYzBfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDE4OCAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBpMmMwX3NkYS5pMmMwX3NkYSAqLworCQkJMHgxOGMgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogaTJjMF9zY2wuaTJjMF9zY2wgKi8KKwkJPjsKKwl9OworCisJY3Bzd19kZWZhdWx0OiBjcHN3X2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogU2xhdmUgMSAqLworCQkJMHg2NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMV9pbnQgKi8KKwkJCTB4MTBjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTEpCS8qIHJtaWkxX2Nyc19kdiAqLworCQkJMHgxMTAgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMSkJLyogcm1paTFfcnhlciAqLworCQkJMHgxMTQgKFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTEpCS8qIHJtaWkxX3R4ZW4gKi8KKwkJCTB4MTI0IChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUxKQkvKiBybWlpMV90ZDEgKi8KKwkJCTB4MTI4IChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUxKQkvKiBybWlpMV90ZDAgKi8KKwkJCTB4MTNjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTEpCS8qIHJtaWkxX3JkMSAqLworCQkJMHgxNDAgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMSkJLyogcm1paTFfcmQwICovCisJCQkweDE0NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUwKQkvKiBybWlpMV9yZWZjbGsgKi8KKworCQkJLyogU2xhdmUgMiAqLworCQkJMHg0MCAoUElOX09VVFBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogcm1paTJfdHhlbiAqLworCQkJMHg1MCAoUElOX09VVFBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogcm1paTJfdGQxICovCisJCQkweDU0IChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBybWlpMl90ZDAgKi8KKwkJCTB4NjggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogcm1paTJfcmQxICovCisJCQkweDZjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIHJtaWkyX3JkMCAqLworCQkJMHg3MCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBybWlpMl9jcnNfZHYgKi8KKwkJCTB4NzQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogcm1paTJfcnhlciAqLworCQkJMHg3OCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMl9pbnQgKi8KKwkJCTB4MTA4IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTEpCS8qIHJtaWkyX3JlZmNsayAqLworCQk+OworCX07CisKKwljcHN3X3NsZWVwOiBjcHN3X3NsZWVwIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCS8qIFNsYXZlIDEgcmVzZXQgdmFsdWUgKi8KKwkJCTB4NjQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfaW50ICovCisJCQkweDEwYyAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMV9jcnNfZHYgKi8KKwkJCTB4MTEwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkxX3J4ZXIgKi8KKwkJCTB4MTE0IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkxX3R4ZW4gKi8KKwkJCTB4MTI0IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkxX3RkMSAqLworCQkJMHgxMjggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfdGQwICovCisJCQkweDEzYyAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMV9yZDEgKi8KKwkJCTB4MTQwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkxX3JkMCAqLworCQkJMHgxNDQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfcmVmY2xrICovCisKKwkJCS8qIFNsYXZlIDIgcmVzZXQgdmFsdWUqLworCQkJMHg0MCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMl90eGVuICovCisJCQkweDUwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX3RkMSAqLworCQkJMHg1NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMl90ZDAgKi8KKwkJCTB4NjggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTJfcmQxICovCisJCQkweDZjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX3JkMCAqLworCQkJMHg3MCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMl9jcnNfZHYgKi8KKwkJCTB4NzQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTJfcnhlciAqLworCQkJMHg3OCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMl9pbnQgKi8KKwkJCTB4MTA4IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX3JlZmNsayAqLworCQk+OworCX07CisKKwlkYXZpbmNpX21kaW9fZGVmYXVsdDogZGF2aW5jaV9tZGlvX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogTURJTyAqLworCQkJMHgxNDggKFBJTl9JTlBVVF9QVUxMVVAgfCBTTEVXQ1RSTF9GQVNUIHwgTVVYX01PREUwKQkvKiBtZGlvX2RhdGEubWRpb19kYXRhICovCisJCQkweDE0YyAoUElOX09VVFBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCQkJLyogbWRpb19jbGsubWRpb19jbGsgKi8KKwkJPjsKKwl9OworCisJZGF2aW5jaV9tZGlvX3NsZWVwOiBkYXZpbmNpX21kaW9fc2xlZXAgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogTURJTyByZXNldCB2YWx1ZSAqLworCQkJMHgxNDggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykKKwkJCTB4MTRjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCisJCT47CisJfTsKKworCWVtbWNfcGluczogcGlubXV4X2VtbWNfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDgwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUyKSAvKiBncG1jX2NzbjEubW1jMV9jbGsgKi8KKwkJCTB4ODQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTIpIC8qIGdwbWNfY3NuMi5tbWMxX2NtZCAqLworCQkJMHgwMCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hZDAubW1jMV9kYXQwICovCisJCQkweDA0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2FkMS5tbWMxX2RhdDEgKi8KKwkJCTB4MDggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYWQyLm1tYzFfZGF0MiAqLworCQkJMHgwYyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hZDMubW1jMV9kYXQzICovCisJCQkweDEwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2FkNC5tbWMxX2RhdDQgKi8KKwkJCTB4MTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYWQ1Lm1tYzFfZGF0NSAqLworCQkJMHgxOCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hZDYubW1jMV9kYXQ2ICovCisJCQkweDFjIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2FkNy5tbWMxX2RhdDcgKi8KKwkJPjsKKwl9OworCisJdWFydDBfcGluczogcGlubXV4X3VhcnQwX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgxNzAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHVhcnQwX3J4ZC51YXJ0MF9yeGQgKi8KKwkJCTB4MTc0IChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUwKQkvKiB1YXJ0MF90eGQudWFydDBfdHhkICovCisJCT47CisJfTsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjMF9waW5zPjsKKworCXN0YXR1cyA9ICJva2F5IjsKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCXNlcmlhbF9jb25maWcxOiBzZXJpYWxfY29uZmlnMUAyMCB7CisJCWNvbXBhdGlibGUgPSAibnhwLHBjYTk1MzkiOworCQlyZWcgPSA8MHgyMD47CisJfTsKKworCXNlcmlhbF9jb25maWcyOiBzZXJpYWxfY29uZmlnMkAyMSB7CisJCWNvbXBhdGlibGUgPSAibnhwLHBjYTk1MzkiOworCQlyZWcgPSA8MHgyMT47CisJfTsKKworCXRwczogdHBzQDJkIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTkxMCI7CisJCXJlZyA9IDwweDJkPjsKKwl9OworfTsKKworL2luY2x1ZGUvICJ0cHM2NTkxMC5kdHNpIgorCismdHBzIHsKKwl2Y2MxLXN1cHBseSA9IDwmdmJhdD47CisJdmNjMi1zdXBwbHkgPSA8JnZiYXQ+OworCXZjYzMtc3VwcGx5ID0gPCZ2YmF0PjsKKwl2Y2M0LXN1cHBseSA9IDwmdmJhdD47CisJdmNjNS1zdXBwbHkgPSA8JnZiYXQ+OworCXZjYzYtc3VwcGx5ID0gPCZ2YmF0PjsKKwl2Y2M3LXN1cHBseSA9IDwmdmJhdD47CisJdmNjaW8tc3VwcGx5ID0gPCZ2YmF0PjsKKworCXJlZ3VsYXRvcnMgeworCQkvKiB2cnRjIC0gdW51c2VkICovCisKKwkJdmlvX3JlZzogcmVndWxhdG9yQDEgeworCQkJcmVndWxhdG9yLW5hbWUgPSAidmlvXzF2NSxkZHIiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKworCQl2ZGQxX3JlZzogcmVndWxhdG9yQDIgeworCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkMSxtcHUiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NjAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZkZDJfcmVnOiByZWd1bGF0b3JAMyB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGQyXzF2MSxjb3JlIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCX07CisKKwkJLyogdmRkMyAtIHVudXNlZCAqLworCisJCS8qIHZkaWcxIC0gdW51c2VkICovCisKKwkJdmRpZzJfcmVnOiByZWd1bGF0b3JANiB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGlnMl8xdjgsdmRkc19wbGwiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKworCQkvKiB2cGxsIC0gdW51c2VkICovCisKKwkJdmRhY19yZWc6IHJlZ3VsYXRvckA4IHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZkYWNfMXY4LHZkZHMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKworCQl2YXV4MV9yZWc6IHJlZ3VsYXRvckA5IHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZhdXgxXzF2OCx1c2IiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKworCQl2YXV4Ml9yZWc6IHJlZ3VsYXRvckAxMCB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2YXV4Ml8zdjMsaW8iOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKworCQl2YXV4MzNfcmVnOiByZWd1bGF0b3JAMTEgeworCQkJcmVndWxhdG9yLW5hbWUgPSAidmF1eDMzXzN2Myx1c2IiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKworCQl2bW1jX3JlZzogcmVndWxhdG9yQDEyIHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZtbWNfM3YzLGlvIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCX07CisJfTsKK307CisKKyZzaGFtIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismYWVzIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MF9waW5zPjsKKworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2IgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JfY3RybF9tb2QgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2IwX3BoeSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYjFfcGh5IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiMCB7CisJc3RhdHVzID0gIm9rYXkiOworCWRyX21vZGUgPSAiaG9zdCI7Cit9OworCismdXNiMSB7CisJc3RhdHVzID0gIm9rYXkiOworCWRyX21vZGUgPSAiaG9zdCI7Cit9OworCismY3BwaTQxZG1hICB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmNwc3dfZW1hYzAgeworCXBoeV9pZCA9IDwmZGF2aW5jaV9tZGlvPiwgPDU+OworCXBoeS1tb2RlID0gInJtaWkiOworCWR1YWxfZW1hY19yZXNfdmxhbiA9IDwyPjsKK307CisKKyZjcHN3X2VtYWMxIHsKKwlwaHlfaWQgPSA8JmRhdmluY2lfbWRpbz4sIDw0PjsKKwlwaHktbW9kZSA9ICJybWlpIjsKKwlkdWFsX2VtYWNfcmVzX3ZsYW4gPSA8Mz47Cit9OworCismbWFjIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic2xlZXAiOworCXBpbmN0cmwtMCA9IDwmY3Bzd19kZWZhdWx0PjsKKwlwaW5jdHJsLTEgPSA8JmNwc3dfc2xlZXA+OworCWR1YWxfZW1hYyA9IDwxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZGF2aW5jaV9tZGlvIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic2xlZXAiOworCXBpbmN0cmwtMCA9IDwmZGF2aW5jaV9tZGlvX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmZGF2aW5jaV9tZGlvX3NsZWVwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbW1jMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm1tYzFfcGlucz47CisJdm1tYy1zdXBwbHkgPSA8JnZtbWNzZF9maXhlZD47CisJYnVzLXdpZHRoID0gPDQ+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtbWMyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmZW1tY19waW5zPjsKKwl2bW1jLXN1cHBseSA9IDwmdm1tY3NkX2ZpeGVkPjsKKwlidXMtd2lkdGggPSA8OD47CisJdGksbm9uLXJlbW92YWJsZTsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTMzeHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzN4eC5kdHNpCmluZGV4IDgzMTgxMDUuLmJlZmU3MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzN4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzN4eC5kdHNpCkBAIC04Myw2ICs4MywxMSBAQAogCQl9OwogCX07CiAKKwlhbTMzeHhfY29udHJvbF9tb2R1bGU6IGNvbnRyb2xfbW9kdWxlQDRhMDAyMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzeXNjb24iOworCQlyZWcgPSA8MHg0NGUxMDAwMCAweDdmYz47CisJfTsKKwogCWFtMzN4eF9waW5tdXg6IHBpbm11eEA0NGUxMDgwMCB7CiAJCWNvbXBhdGlibGUgPSAicGluY3RybC1zaW5nbGUiOwogCQlyZWcgPSA8MHg0NGUxMDgwMCAweDAyMzg+OwpAQCAtMjA0LDYgKzIwOSw4IEBACiAJCQlyZWcgPSA8MHg0NGUwOTAwMCAweDIwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw3Mj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJZG1hcyA9IDwmZWRtYSAyNj4sIDwmZWRtYSAyNz47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQl9OwogCiAJCXVhcnQxOiBzZXJpYWxANDgwMjIwMDAgewpAQCAtMjEzLDYgKzIyMCw4IEBACiAJCQlyZWcgPSA8MHg0ODAyMjAwMCAweDIwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw3Mz47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJZG1hcyA9IDwmZWRtYSAyOD4sIDwmZWRtYSAyOT47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQl9OwogCiAJCXVhcnQyOiBzZXJpYWxANDgwMjQwMDAgewpAQCAtMjIyLDYgKzIzMSw4IEBACiAJCQlyZWcgPSA8MHg0ODAyNDAwMCAweDIwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw3ND47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJZG1hcyA9IDwmZWRtYSAzMD4sIDwmZWRtYSAzMT47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQl9OwogCiAJCXVhcnQzOiBzZXJpYWxANDgxYTYwMDAgewpAQCAtMzMzLDIwICszNDQsMjQgQEAKIAkJCWludGVycnVwdHMgPSA8OTE+OwogCQl9OwogCi0JCWRjYW4wOiBkX2NhbkA0ODFjYzAwMCB7Ci0JCQljb21wYXRpYmxlID0gImJvc2NoLGRfY2FuIjsKKwkJZGNhbjA6IGNhbkA0ODFjYzAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGFtMzM1Mi1kX2NhbiI7CiAJCQl0aSxod21vZHMgPSAiZF9jYW4wIjsKLQkJCXJlZyA9IDwweDQ4MWNjMDAwIDB4MjAwMAotCQkJCTB4NDRlMTA2NDQgMHg0PjsKKwkJCXJlZyA9IDwweDQ4MWNjMDAwIDB4MjAwMD47CisJCQljbG9ja3MgPSA8JmRjYW4wX2Zjaz47CisJCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkJc3lzY29uLXJhbWluaXQgPSA8JmFtMzN4eF9jb250cm9sX21vZHVsZSAweDY0NCAwPjsKIAkJCWludGVycnVwdHMgPSA8NTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAotCQlkY2FuMTogZF9jYW5ANDgxZDAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJib3NjaCxkX2NhbiI7CisJCWRjYW4xOiBjYW5ANDgxZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTMzNTItZF9jYW4iOwogCQkJdGksaHdtb2RzID0gImRfY2FuMSI7Ci0JCQlyZWcgPSA8MHg0ODFkMDAwMCAweDIwMDAKLQkJCQkweDQ0ZTEwNjQ0IDB4ND47CisJCQlyZWcgPSA8MHg0ODFkMDAwMCAweDIwMDA+OworCQkJY2xvY2tzID0gPCZkY2FuMV9mY2s+OworCQkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJCXN5c2Nvbi1yYW1pbml0ID0gPCZhbTMzeHhfY29udHJvbF9tb2R1bGUgMHg2NDQgMT47CiAJCQlpbnRlcnJ1cHRzID0gPDU1PjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC0zNTYsNiArMzcxLDcgQEAKIAkJCXJlZyA9IDwweDQ4MEM4MDAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8Nzc+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3giOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDg+OwogCQkJbWJveF93a3VwbTM6IHdrdXBfbTMgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW00MzcyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzNzIuZHRzaQppbmRleCA0NjY2MGZmLi5kNDJkNzg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTQzNzIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzNzIuZHRzaQpAQCAtNTcsNiArNTcsMTEgQEAKIAkJY2FjaGUtbGV2ZWwgPSA8Mj47CiAJfTsKIAorCWFtNDN4eF9jb250cm9sX21vZHVsZTogY29udHJvbF9tb2R1bGVANGEwMDIwMDAgeworCQljb21wYXRpYmxlID0gInN5c2NvbiI7CisJCXJlZyA9IDwweDQ0ZTEwMDAwIDB4N2Y0PjsKKwl9OworCiAJYW00M3h4X3Bpbm11eDogcGlubXV4QDQ0ZTEwODAwIHsKIAkJY29tcGF0aWJsZSA9ICJ0aSxhbTQzNy1wYWRjb25mIiwgInBpbmN0cmwtc2luZ2xlIjsKIAkJcmVnID0gPDB4NDRlMTA4MDAgMHgzMWM+OwpAQCAtMTY4LDYgKzE3Myw3IEBACiAJCQlyZWcgPSA8MHg0ODBDODAwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzcgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8OD47CiAJCQltYm94X3drdXBtMzogd2t1cF9tMyB7CkBAIC02NjcsNiArNjczLDI2IEBACiAJCQl9OwogCQl9OwogCisJCXRzY2FkYzogdHNjYWRjQDQ0ZTBkMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksYW0zMzU5LXRzY2FkYyI7CisJCQlyZWcgPSA8MHg0NGUwZDAwMCAweDEwMDA+OworCQkJdGksaHdtb2RzID0gImFkY190c2MiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZhZGNfdHNjX2Zjaz47CisJCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJdHNjIHsKKwkJCQljb21wYXRpYmxlID0gInRpLGFtMzM1OS10c2MiOworCQkJfTsKKworCQkJYWRjIHsKKwkJCQkjaW8tY2hhbm5lbC1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInRpLGFtMzM1OS1hZGMiOworCQkJfTsKKworCQl9OworCiAJCXNoYW06IHNoYW1ANTMxMDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNS1zaGFtIjsKIAkJCXRpLGh3bW9kcyA9ICJzaGFtIjsKQEAgLTg5Niw2ICs5MjIsMjggQEAKIAkJCWNvbXBhdGlibGUgPSAibW1pby1zcmFtIjsKIAkJCXJlZyA9IDwweDQwMzAwMDAwIDB4NDAwMDA+OyAvKiAyNTZrICovCiAJCX07CisKKwkJZGNhbjA6IGNhbkA0ODFjYzAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGFtNDM3Mi1kX2NhbiIsICJ0aSxhbTMzNTItZF9jYW4iOworCQkJdGksaHdtb2RzID0gImRfY2FuMCI7CisJCQljbG9ja3MgPSA8JmRjYW4wX2Zjaz47CisJCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkJcmVnID0gPDB4NDgxY2MwMDAgMHgyMDAwPjsKKwkJCXN5c2Nvbi1yYW1pbml0ID0gPCZhbTQzeHhfY29udHJvbF9tb2R1bGUgMHg2NDQgMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWRjYW4xOiBjYW5ANDgxZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTQzNzItZF9jYW4iLCAidGksYW0zMzUyLWRfY2FuIjsKKwkJCXRpLGh3bW9kcyA9ICJkX2NhbjEiOworCQkJY2xvY2tzID0gPCZkY2FuMV9mY2s+OworCQkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJCXJlZyA9IDwweDQ4MWQwMDAwIDB4MjAwMD47CisJCQlzeXNjb24tcmFtaW5pdCA9IDwmYW00M3h4X2NvbnRyb2xfbW9kdWxlIDB4NjQ0IDE+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW00Mzd4LWdwLWV2bS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzN3gtZ3AtZXZtLmR0cwppbmRleCBhNTIxYWMwLi43ZWFhZTRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTQzN3gtZ3AtZXZtLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzN3gtZ3AtZXZtLmR0cwpAQCAtMjU0LDYgKzI1NCwyMCBAQAogCQkJMHgyMzggKFBJTl9PVVRQVVRfUFVMTFVQIHwgTVVYX01PREU3KQogCQk+OwogCX07CisKKwlkY2FuMF9kZWZhdWx0OiBkY2FuMF9kZWZhdWx0X3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgxNzggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTIpCQkvKiB1YXJ0MV9jdHNuLmRfY2FuMF90eCAqLworCQkJMHgxN2MgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTIpCS8qIHVhcnQxX3J0c24uZF9jYW4wX3J4ICovCisJCT47CisJfTsKKworCWRjYW4xX2RlZmF1bHQ6IGRjYW4xX2RlZmF1bHRfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDE4MCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMikJCS8qIHVhcnQxX3J4ZC5kX2NhbjFfdHggKi8KKwkJCTB4MTg0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUyKQkvKiB1YXJ0MV90eGQuZF9jYW4xX3J4ICovCisJCT47CisJfTsKIH07CiAKICZpMmMwIHsKQEAgLTM0Myw2ICszNTcsMTQgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismdHNjYWRjIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlhZGMgeworCQl0aSxhZGMtY2hhbm5lbHMgPSA8MCAxIDIgMyA0IDUgNiA3PjsKKwl9OworfTsKKwogJmVjYXAwIHsKIAlzdGF0dXMgPSAib2theSI7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTUxMSwzICs1MzMsMTUgQEAKIAkJfTsKIAl9OwogfTsKKworJmRjYW4wIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmZGNhbjBfZGVmYXVsdD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmRjYW4xIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmZGNhbjFfZGVmYXVsdD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDN4LWVwb3MtZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDN4LWVwb3MtZXZtLmR0cwppbmRleCBmN2U5YmJhLi42NjIyNjFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTQzeC1lcG9zLWV2bS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00M3gtZXBvcy1ldm0uZHRzCkBAIC00MzgsOSArNDM4LDkgQEAKIAlzdGF0dXMgPSAib2theSI7CS8qIERpc2FibGUgUVNQSSB3aGVuIGVuYWJsaW5nIEdQTUMgKE5BTkQpICovCiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8Jm5hbmRfZmxhc2hfeDg+OwotCXJhbmdlcyA9IDwwIDAgMHgwODAwMDAwMCAweDEwMDAwMDAwPjsJLyogQ1MwOiBOQU5EICovCisJcmFuZ2VzID0gPDAgMCAweDA4MDAwMDAwIDB4MTAwMDAwMD47CS8qIENTMDogMTZNQiBmb3IgTkFORCAqLwogCW5hbmRAMCwwIHsKLQkJcmVnID0gPDAgMCAwPjsgLyogQ1MwLCBvZmZzZXQgMCAqLworCQlyZWcgPSA8MCAwIDQ+OyAvKiBDUzAsIG9mZnNldCAwLCBJTyBzaXplIDQgKi8KIAkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDE2IjsKIAkJdGksZWxtLWlkID0gPCZlbG0+OwogCQluYW5kLWJ1cy13aWR0aCA9IDw4PjsKQEAgLTUxOSw2ICs1MTksMTQgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismdHNjYWRjIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlhZGMgeworCQl0aSxhZGMtY2hhbm5lbHMgPSA8MCAxIDIgMyA0IDUgNiA3PjsKKwl9OworfTsKKwogJmVjYXAwIHsKIAkJc3RhdHVzID0gIm9rYXkiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW01N3h4LWJlYWdsZS14MTUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW01N3h4LWJlYWdsZS14MTUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZWRiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTU3eHgtYmVhZ2xlLXgxNS5kdHMKQEAgLTAsMCArMSw0MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworL2R0cy12MS87CisKKyNpbmNsdWRlICJkcmE3NHguZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbGsvdGktZHJhNy1hdGwuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKworLyB7CisJbW9kZWwgPSAiVEkgQU01NzI4IEJlYWdsZUJvYXJkLVgxNSI7CisJY29tcGF0aWJsZSA9ICJ0aSxhbTU3MngtYmVhZ2xlLXgxNSIsICJ0aSxhbTU3MjgiLCAidGksZHJhNzQyIiwgInRpLGRyYTc0IiwgInRpLGRyYTciOworCisJYWxpYXNlcyB7CisJCXJ0YzAgPSAmbWNwX3J0YzsKKwkJcnRjMSA9ICZ0cHM2NTkwMzhfcnRjOworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDgwMDAwMDAwPjsKKwl9OworCisJdmRkXzN2MzogZml4ZWRyZWd1bGF0b3ItdmRkXzN2MyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidmRkXzN2MyI7CisJCXZpbi1zdXBwbHkgPSA8JnJlZ2VuMT47CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwl9OworCisJdnR0X2ZpeGVkOiBmaXhlZHJlZ3VsYXRvci12dHQgeworCQkvKiBUUFM1MTIwMCAqLworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInZ0dF9maXhlZCI7CisJCXZpbi1zdXBwbHkgPSA8JnNtcHMzX3JlZz47CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJZ3BpbyA9IDwmZ3BpbzcgMTEgR1BJT19BQ1RJVkVfSElHSD47CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmbGVkc19waW5zX2RlZmF1bHQ+OworCisJCWxlZEAwIHsKKwkJCWxhYmVsID0gImJlYWdsZS14MTU6dXNyMCI7CisJCQlncGlvcyA9IDwmZ3BpbzcgOSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOworCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCisJCWxlZEAxIHsKKwkJCWxhYmVsID0gImJlYWdsZS14MTU6dXNyMSI7CisJCQlncGlvcyA9IDwmZ3BpbzcgOCBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHUwIjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJfTsKKworCQlsZWRAMiB7CisJCQlsYWJlbCA9ICJiZWFnbGUteDE1OnVzcjIiOworCQkJZ3Bpb3MgPSA8JmdwaW83IDE0IEdQSU9fQUNUSVZFX0hJR0g+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gIm1tYzAiOworCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCisJCWxlZEAzIHsKKwkJCWxhYmVsID0gImJlYWdsZS14MTU6dXNyMyI7CisJCQlncGlvcyA9IDwmZ3BpbzcgMTUgR1BJT19BQ1RJVkVfSElHSD47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaWRlLWRpc2siOworCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCX07Cit9OworCismZHJhN19wbXhfY29yZSB7CisJbGVkc19waW5zX2RlZmF1bHQ6IGxlZHNfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4M2E4IChQSU5fT1VUUFVUIHwgTVVYX01PREUxNCkJLyogc3BpMV9kMS5ncGlvN184ICovCisJCQkweDNhYyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMTQpCS8qIHNwaTFfZDAuZ3BpbzdfOSAqLworCQkJMHgzYzAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTE0KQkvKiBzcGkyX3NjbGsuZ3BpbzdfMTQgKi8KKwkJCTB4M2M0IChQSU5fT1VUUFVUIHwgTVVYX01PREUxNCkJLyogc3BpMl9kMS5ncGlvN18xNSAqLworCQk+OworCX07CisKKwlpMmMxX3BpbnNfZGVmYXVsdDogaTJjMV9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg0MDAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGkyYzFfc2RhLnNkYSAqLworCQkJMHg0MDQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGkyYzFfc2NsLnNjbCAqLworCQk+OworCX07CisKKwlpMmMzX3BpbnNfZGVmYXVsdDogaTJjM19waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgyYTQgKFBJTl9JTlBVVHwgTVVYX01PREUxMCkJLyogbWNhc3AxX2FjbGt4LmkyYzNfc2RhICovCisJCQkweDJhOCAoUElOX0lOUFVUfCBNVVhfTU9ERTEwKQkvKiBtY2FzcDFfZnN4LmkyYzNfc2NsICovCisJCT47CisJfTsKKworCXVhcnQzX3BpbnNfZGVmYXVsdDogdWFydDNfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MjQ4IChQSU5fSU5QVVRfU0xFVyB8IE1VWF9NT0RFMCkgLyogdWFydDNfcnhkLnJ4ZCAqLworCQkJMHgyNGMgKFBJTl9JTlBVVF9TTEVXIHwgTVVYX01PREUwKSAvKiB1YXJ0M190eGQudHhkICovCisJCT47CisJfTsKKworCW1tYzFfcGluc19kZWZhdWx0OiBtbWMxX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDM2YyAoUElOX0lOUFVUIHwgTVVYX01PREUxNCkJLyogbW1jMXNkY2QuZ3BpbzIxOSAqLworCQkJMHgzNTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfY2xrLmNsayAqLworCQkJMHgzNTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfY21kLmNtZCAqLworCQkJMHgzNWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfZGF0MC5kYXQwICovCisJCQkweDM2MCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogbW1jMV9kYXQxLmRhdDEgKi8KKwkJCTB4MzY0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2RhdDIuZGF0MiAqLworCQkJMHgzNjggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfZGF0My5kYXQzICovCisJCT47CisJfTsKKworCW1tYzJfcGluc19kZWZhdWx0OiBtbWMyX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDljIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyMy5tbWMyX2NsayAqLworCQkJMHhiMCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19jczEubW1jMl9jbWQgKi8KKwkJCTB4YTAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTI0Lm1tYzJfZGF0MCAqLworCQkJMHhhNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjUubW1jMl9kYXQxICovCisJCQkweGE4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyNi5tbWMyX2RhdDIgKi8KKwkJCTB4YWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTI3Lm1tYzJfZGF0MyAqLworCQkJMHg4YyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMTkubW1jMl9kYXQ0ICovCisJCQkweDkwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyMC5tbWMyX2RhdDUgKi8KKwkJCTB4OTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTIxLm1tYzJfZGF0NiAqLworCQkJMHg5OCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjIubW1jMl9kYXQ3ICovCisJCT47CisJfTsKKworCXRwczY1OTAzOF9waW5zX2RlZmF1bHQ6IHRwczY1OTAzOF9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg0MTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTE0KQkvKiB3YWtldXAwLmdwaW8xXzAgKi8KKwkJPjsKKwl9OworCisJdG1wMTAyX3BpbnNfZGVmYXVsdDogdG1wMTAyX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDNDOCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMTQpCS8qIHNwaTJfZDAuZ3BpbzdfMTYgKi8KKwkJPjsKKwl9OworCisJbWNwNzk0MTBfcGluc19kZWZhdWx0OiBtY3A3OTQxMF9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg0MjQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpCS8qIHdha2V1cDMuc3lzX25pcnExICovCisJCT47CisJfTsKKworCXVzYjFfcGluczogcGlubXV4X3VzYjFfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDI4MCAoUElOX0lOUFVUX1NMRVcgfCBNVVhfTU9ERTApIC8qIHVzYjFfZHJ2dmJ1cyAqLworCQk+OworCX07CisKK307CisKKyZpMmMxIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyYzFfcGluc19kZWZhdWx0PjsKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCXRwczY1OTAzODogdHBzNjU5MDM4QDU4IHsKKwkJY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTkwMzgiOworCQlyZWcgPSA8MHg1OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8xPjsKKwkJaW50ZXJydXB0cyA9IDwwIElSUV9UWVBFX0xFVkVMX0xPVz47CisKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ0cHM2NTkwMzhfcGluc19kZWZhdWx0PjsKKworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKworCQl0aSxzeXN0ZW0tcG93ZXItY29udHJvbGxlcjsKKworCQl0cHM2NTkwMzhfcG1pYyB7CisJCQljb21wYXRpYmxlID0gInRpLHRwczY1OTAzOC1wbWljIjsKKworCQkJcmVndWxhdG9ycyB7CisJCQkJc21wczEyX3JlZzogc21wczEyIHsKKwkJCQkJLyogVkREX01QVSAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzMTIiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwgODUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTI1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlzbXBzM19yZWc6IHNtcHMzIHsKKwkJCQkJLyogVkREX0REUiAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzMyI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXNtcHM0NV9yZWc6IHNtcHM0NSB7CisJCQkJCS8qIFZERF9EU1BFVkUsIFZERF9JVkEsIFZERF9HUFUgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAic21wczQ1IjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8IDg1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQl9OworCisJCQkJc21wczZfcmVnOiBzbXBzNiB7CisJCQkJCS8qIFZERF9DT1JFICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gInNtcHM2IjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAzMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQkvKiBTTVBTNyB1bnVzZWQgKi8KKworCQkJCXNtcHM4X3JlZzogc21wczggeworCQkJCQkvKiBWRERfMVY4ICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gInNtcHM4IjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQl9OworCisJCQkJLyogU01QUzkgdW51c2VkICovCisKKwkJCQlsZG8xX3JlZzogbGRvMSB7CisJCQkJCS8qIFZERF9TRCAgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvMSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCWxkbzJfcmVnOiBsZG8yIHsKKwkJCQkJLyogVkREX1NIVjUgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvMiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCWxkbzNfcmVnOiBsZG8zIHsKKwkJCQkJLyogVkREQV8xVjhfUEhZICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzMiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlsZG85X3JlZzogbGRvOSB7CisJCQkJCS8qIFZERF9SVEMgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvOSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCWxkb2xuX3JlZzogbGRvbG4geworCQkJCQkvKiBWRERBXzFWOF9QTEwgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvbG4iOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlsZG91c2JfcmVnOiBsZG91c2IgeworCQkJCQkvKiBWRERBXzNWX1VTQjogVkREQV9VU0JIUzMzICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkb3VzYiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXJlZ2VuMTogcmVnZW4xIHsKKwkJCQkJLyogVkREXzNWM19PTiAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJyZWdlbjEiOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQl0cHM2NTkwMzhfcnRjOiB0cHM2NTkwMzhfcnRjIHsKKwkJCWNvbXBhdGlibGUgPSAidGkscGFsbWFzLXJ0YyI7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ0cHM2NTkwMzg+OworCQkJaW50ZXJydXB0cyA9IDw4IElSUV9UWVBFX0VER0VfRkFMTElORz47CisJCQl3YWtldXAtc291cmNlOworCQl9OworCisJCXRwczY1OTAzOF9wd3JfYnV0dG9uOiB0cHM2NTkwMzhfcHdyX2J1dHRvbiB7CisJCQljb21wYXRpYmxlID0gInRpLHBhbG1hcy1wd3JidXR0b24iOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmdHBzNjU5MDM4PjsKKwkJCWludGVycnVwdHMgPSA8MSBJUlFfVFlQRV9FREdFX0ZBTExJTkc+OworCQkJd2FrZXVwLXNvdXJjZTsKKwkJCXRpLHBhbG1hcy1sb25nLXByZXNzLXNlY29uZHMgPSA8MTI+OworCQl9OworCX07CisKKwl0bXAxMDI6IHRtcDEwMkA0OCB7CisJCWNvbXBhdGlibGUgPSAidGksdG1wMTAyIjsKKwkJcmVnID0gPDB4NDg+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnRtcDEwMl9waW5zX2RlZmF1bHQ+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvNz47CisJCWludGVycnVwdHMgPSA8MTYgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwl9OworfTsKKworJmkyYzMgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjM19waW5zX2RlZmF1bHQ+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJbWNwX3J0YzogcnRjQDZmIHsKKwkJY29tcGF0aWJsZSA9ICJtaWNyb2NoaXAsbWNwNzk0MXgiOworCQlyZWcgPSA8MHg2Zj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyIElSUV9UWVBFX0xFVkVMX0xPVz47ICAvKiBJUlFfU1lTXzFOICovCisKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZtY3A3OTQxMF9waW5zX2RlZmF1bHQ+OworCisJCXZjYy1zdXBwbHkgPSA8JnZkZF8zdjM+OworCQl3YWtldXAtc291cmNlOworCX07Cit9OworCismZ3BpbzcgeworCXRpLG5vLXJlc2V0LW9uLWluaXQ7CisJdGksbm8taWRsZS1vbi1pbml0OworfTsKKworJmNwdTAgeworCWNwdTAtc3VwcGx5ID0gPCZzbXBzMTJfcmVnPjsKKwl2b2x0YWdlLXRvbGVyYW5jZSA9IDwxPjsKK307CisKKyZ1YXJ0MyB7CisJc3RhdHVzID0gIm9rYXkiOworCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JmdpYyBHSUNfU1BJIDY5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICAgPCZkcmE3X3BteF9jb3JlIDB4MjQ4PjsKKworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0M19waW5zX2RlZmF1bHQ+OworfTsKKworJm1tYzEgeworCXN0YXR1cyA9ICJva2F5IjsKKworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMxX3BpbnNfZGVmYXVsdD47CisKKwl2bW1jLXN1cHBseSA9IDwmbGRvMV9yZWc+OworCXZtbWNfYXV4LXN1cHBseSA9IDwmdmRkXzN2Mz47CisJcGJpYXMtc3VwcGx5ID0gPCZwYmlhc19tbWNfcmVnPjsKKwlidXMtd2lkdGggPSA8ND47CisJY2QtZ3Bpb3MgPSA8JmdwaW82IDI3IDA+OyAvKiBncGlvIDIxOSAqLworfTsKKworJm1tYzIgeworCXN0YXR1cyA9ICJva2F5IjsKKworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMyX3BpbnNfZGVmYXVsdD47CisKKwl2bW1jLXN1cHBseSA9IDwmdmRkXzN2Mz47CisJYnVzLXdpZHRoID0gPDg+OworCXRpLG5vbi1yZW1vdmFibGU7CisJY2FwLW1tYy1kdWFsLWRhdGEtcmF0ZTsKK307CisKKyZzYXRhIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiMl9waHkxIHsKKwlwaHktc3VwcGx5ID0gPCZsZG91c2JfcmVnPjsKK307CisKKyZ1c2IxIHsKKwlkcl9tb2RlID0gImhvc3QiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1c2IxX3BpbnM+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybS1yZWFsdmlldy1wYjExNzYuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtLXJlYWx2aWV3LXBiMTE3Ni5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyNmM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybS1yZWFsdmlldy1wYjExNzYuZHRzCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgTGluYXJvIEx0ZAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlICJza2VsZXRvbi5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJBUk0gUmVhbFZpZXcgUEIxMTc2IjsKKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYiOworCisJY2hvc2VuIHsgfTsKKworCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJnBiMTE3Nl9zZXJpYWwwOworCQlzZXJpYWwxID0gJnBiMTE3Nl9zZXJpYWwxOworCQlzZXJpYWwyID0gJnBiMTE3Nl9zZXJpYWwyOworCQlzZXJpYWwzID0gJnBiMTE3Nl9zZXJpYWwzOworCQlzZXJpYWw0ID0gJmZwZ2Ffc2VyaWFsOworCX07CisKKwltZW1vcnkgeworCQkvKiAxMjggTWlCIG1lbW9yeSBAIDB4MCAqLworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA4MDAwMDAwPjsKKwl9OworCisJLyogVGhlIHZvbHRhZ2UgdG8gdGhlIE1NQyBjYXJkIGlzIGhhcmR3aXJlZCBhdCAzLjNWICovCisJdm1tYzogZml4ZWRyZWd1bGF0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidm1tYyI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisgICAgICAgIH07CisKKwl4dGFsMjRtaHo6IHh0YWwyNG1oekAyNE0geworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MjQwMDAwMDA+OworCX07CisKKwl0aW1jbGs6IHRpbWNsa0AxTSB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9jay1kaXYgPSA8MjQ+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9ja3MgPSA8Jnh0YWwyNG1oej47CisJfTsKKworCW1jbGs6IG1jbGtAMjRNIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCWNsb2NrLWRpdiA9IDwxPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2tzID0gPCZ4dGFsMjRtaHo+OworCX07CisKKwlrbWljbGs6IGttaWNsa0AyNE0geworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2stZGl2ID0gPDE+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9ja3MgPSA8Jnh0YWwyNG1oej47CisJfTsKKworCXNzcGNsazogc3NwY2xrQDI0TSB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9jay1kaXYgPSA8MT47CisJCWNsb2NrLW11bHQgPSA8MT47CisJCWNsb2NrcyA9IDwmeHRhbDI0bWh6PjsKKwl9OworCisJdWFydGNsazogdWFydGNsa0AyNE0geworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2stZGl2ID0gPDE+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9ja3MgPSA8Jnh0YWwyNG1oej47CisJfTsKKworCS8qIEZJWE1FOiB0aGlzIGFjdHVhbGx5IGhhbmdzIG9mZiB0aGUgUExMIGNsb2NrcyAqLworCXBjbGs6IHBjbGtAMCB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwl9OworCisJc29jIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYtc29jIiwgInNpbXBsZS1idXMiOworCQlyZWdtYXAgPSA8JnN5c2Nvbj47CisJCXJhbmdlczsKKworCQlzeXNjb246IHN5c2NvbkAxMDAwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYtc3lzY29uIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgxMDAwMDAwMCAweDEwMDA+OworCisJCQlsZWRAMDguMCB7CisJCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCQlvZmZzZXQgPSA8MHgwOD47CisJCQkJbWFzayA9IDwweDAxPjsKKwkJCQlsYWJlbCA9ICJ2ZXJzYXRpbGU6MCI7CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvbiI7CisJCQl9OworCQkJbGVkQDA4LjEgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHgwMj47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjEiOworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJtbWMwIjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA4LjIgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHgwND47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjIiOworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHUwIjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA4LjMgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHgwOD47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjMiOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCQlsZWRAMDguNCB7CisJCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCQlvZmZzZXQgPSA8MHgwOD47CisJCQkJbWFzayA9IDwweDEwPjsKKwkJCQlsYWJlbCA9ICJ2ZXJzYXRpbGU6NCI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJCWxlZEAwOC41IHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA4PjsKKwkJCQltYXNrID0gPDB4MjA+OworCQkJCWxhYmVsID0gInZlcnNhdGlsZTo1IjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA4LjYgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHg0MD47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjYiOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCQlsZWRAMDguNyB7CisJCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCQlvZmZzZXQgPSA8MHgwOD47CisJCQkJbWFzayA9IDwweDgwPjsKKwkJCQlsYWJlbCA9ICJ2ZXJzYXRpbGU6NyI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJfTsKKworCQkvKiBQcmltYXJ5IERldkNoaXAgR0lDIHN5bnRoZXNpemVkIHdpdGggdGhlIENQVSAqLworCQlpbnRjX2RjMTE3NjogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTAxMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sYXJtMTE3Nmp6Zi1kZXZjaGlwLWdpYyIsICJhcm0sYXJtMTFtcC1naWMiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHgxMDEyMTAwMCAweDEwMDA+LAorCQkJICAgICAgPDB4MTAxMjAwMDAgMHgxMDA+OworCQl9OworCisJCUwyOiBsMi1jYWNoZSB7CisJCQljb21wYXRpYmxlID0gImFybSxsMjIwLWNhY2hlIjsKKwkJCXJlZyA9IDwweDEwMTEwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljYWNoZS11bmlmaWVkOworCQkJY2FjaGUtbGV2ZWwgPSA8Mj47CisJCQkvKgorCQkJICogT3ZlcnJpZGUgZGVmYXVsdCBjYWNoZSBzaXplLCBzZXRzIGFuZAorCQkJICogYXNzb2NpYXRpdml0eSBhcyB0aGVzZSBtYXkgYmUgZXJyb25lb3VzbHkgc2V0CisJCQkgKiB1cCBieSBib290IGxvYWRlcihzKS4KKwkJCSAqLworCQkJYXJtLG92ZXJyaWRlLWF1eHJlZzsKKwkJCWNhY2hlLXNpemUgPSA8MTMxMDcyPjsgLy8gMTI4a0IKKwkJCWNhY2hlLXNldHMgPSA8NTEyPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCX07CisKKwkJcG11IHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGFybTExNzYtcG11IjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQl9OworCisJCXRpbWVyMDE6IHRpbWVyQDEwMTA0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHNwODA0IiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMDQwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCA4IElSUV9UWVBFX0xFVkVMX0hJR0g+LCA8MCA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZ0aW1jbGs+LCA8JnRpbWNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJ0aW1lcjEiLCAidGltZXIyIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQl0aW1lcjIzOiB0aW1lckAxMDEwNTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxzcDgwNCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMTA1MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlhcm0sc3A4MDQtaGFzLWlycSA9IDwxPjsKKwkJCWNsb2NrcyA9IDwmdGltY2xrPiwgPCZ0aW1jbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAidGltZXIxIiwgInRpbWVyMiIsICJhcGJfcGNsayI7CisJCX07CisKKwkJcGIxMTc2X3J0YzogcnRjQDEwMTA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDMxIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMDgwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAxNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKwkJcGIxMTc2X2dwaW8wOiBncGlvQDEwMTBhMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGEwMDAgMHgxMDAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAxNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJY2xvY2tzID0gPCZwY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJfTsKKworCQlwYjExNzZfc3NwOiBzc3BAMTAxMGIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMjIiLCAiYXJtLHByaW1lY2VsbCI7CisJCQlyZWcgPSA8MHgxMDEwYjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19kYzExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZzc3BjbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAiU1NQQ0xLIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlwYjExNzZfc2VyaWFsMDogc2VyaWFsQDEwMTBjMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGMwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAxOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmdWFydGNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0Y2xrIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlwYjExNzZfc2VyaWFsMTogc2VyaWFsQDEwMTBkMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGQwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAxOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmdWFydGNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0Y2xrIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlwYjExNzZfc2VyaWFsMjogc2VyaWFsQDEwMTBlMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGUwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmdWFydGNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0Y2xrIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlwYjExNzZfc2VyaWFsMzogc2VyaWFsQDEwMTBmMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGYwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmdWFydGNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0Y2xrIiwgImFwYl9wY2xrIjsKKwkJfTsKKwl9OworCisJLyogVGhlc2UgcGVyaXBoZXJhbHMgYXJlIGluc2lkZSB0aGUgRlBHQSByYXRoZXIgdGhhbiB0aGUgRGV2Q2hpcCAqLworCWZwZ2EgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJhbmdlczsKKworCQlmcGdhX21jaTogbW1jc2RAMTAwMDUwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwxOHgiLCAiYXJtLHByaW1lY2VsbCI7CisJCQlyZWcgPSA8MHgxMDAwNTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19mcGdhMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJPDAgMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCS8qIER1ZSB0byBmcmVxdWVudCBGSUZPIG92ZXJydW5zLCB1c2UganVzdCA1MDAga0h6ICovCisJCQltYXgtZnJlcXVlbmN5ID0gPDUwMDAwMD47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljYXAtc2QtaGlnaHNwZWVkOworCQkJY2FwLW1tYy1oaWdoc3BlZWQ7CisJCQljbG9ja3MgPSA8Jm1jbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAibWNsayIsICJhcGJfcGNsayI7CisJCQl2bW1jLXN1cHBseSA9IDwmdm1tYz47CisJCQljZC1ncGlvcyA9IDwmZnBnYV9ncGlvMSAwIEdQSU9fQUNUSVZFX0xPVz47CisJCQl3cC1ncGlvcyA9IDwmZnBnYV9ncGlvMSAxIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCWZwZ2Ffa21pMDoga21pQDEwMDA2MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDUwIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAwMDYwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZnBnYTExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmttaWNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJLTUlSRUZDTEsiLCAiYXBiX3BjbGsiOworCQl9OworCisJCWZwZ2Ffa21pMToga21pQDEwMDA3MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDUwIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAwMDcwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZnBnYTExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmttaWNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJLTUlSRUZDTEsiLCAiYXBiX3BjbGsiOworCQl9OworCisJCWZwZ2FfY2hhcmxjZDogY2hhcmxjZEAxMDAwODAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSx2ZXJzYXRpbGUtbGNkIjsKKwkJCXJlZyA9IDwweDEwMDA4MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2ZwZ2ExMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZwY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJfTsKKworCQlmcGdhX3NlcmlhbDogc2VyaWFsQDEwMDA5MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAwMDkwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZnBnYTExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnVhcnRjbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAidWFydGNsayIsICJhcGJfcGNsayI7CisJCX07CisKKwkJLyogVGhpcyBHSUMgb24gdGhlIGJvYXJkIGlzIGNhc2NhZGVkIG9mZiB0aGUgRGV2Q2hpcCBHSUMgKi8KKwkJaW50Y19mcGdhMTE3NjogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTAwNDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sYXJtMTE3Nmp6Zi1kZXZjaGlwLWdpYyIsICJhcm0sYXJtMTFtcC1naWMiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHgxMDA0MTAwMCAweDEwMDA+LAorCQkJICAgICAgPDB4MTAwNDAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19kYzExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDMxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQl9OworCisJCWZwZ2FfZ3BpbzA6IGdwaW9AMTAwMTQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQlyZWcgPSA8MHgxMDAxNDAwMCAweDEwMDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19mcGdhMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJY2xvY2tzID0gPCZwY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJfTsKKworCQlmcGdhX2dwaW8xOiBncGlvQDEwMDE1MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAwMTUwMDAgMHgxMDAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZnBnYTExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCWNsb2NrcyA9IDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKwkJZnBnYV9ydGM6IHJ0Y0AxMDAxNzAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAzMSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMDE3MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2ZwZ2ExMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLWRiLmR0cwppbmRleCBhNDk1ZTU4Li4xNDY2NTgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLWRiLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLWRiLmR0cwpAQCAtNzUsNiArNzUsNyBAQAogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCQlhdWRpb19jb2RlYzogYXVkaW8tY29kZWNANGEgeworCQkJCQkjc291bmQtZGFpLWNlbGxzID0gPDA+OwogCQkJCQljb21wYXRpYmxlID0gImNpcnJ1cyxjczQybDUxIjsKIAkJCQkJcmVnID0gPDB4NGE+OwogCQkJCX07CkBAIC0xMDIsMzAgKzEwMyw2IEBACiAJCQkJYnJva2VuLWNkOwogCQkJfTsKIAotCQkJcGluY3RybCB7Ci0JCQkJLyoKLQkJCQkgKiBUaGVzZSBwaW5zIG1pZ2h0IGJlIG11eGVkIGFzIEkyUyBieQotCQkJCSAqIHRoZSBib290bG9hZGVyLCBidXQgaXQgY29uZmxpY3RzCi0JCQkJICogd2l0aCB0aGUgcmVhbCBJMlMgcGlucyB0aGF0IGFyZQotCQkJCSAqIG11eGVkIHVzaW5nIGkyc19waW5zLiBXZSBtdXN0IG11eAotCQkJCSAqIHRob3NlIHBpbnMgdG8gYSBmdW5jdGlvbiBvdGhlciB0aGFuCi0JCQkJICogSTJTLgotCQkJCSAqLwotCQkJCXBpbmN0cmwtMCA9IDwmaG9nX3BpbnMxICZob2dfcGluczI+OwotCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0KLQkJCQlob2dfcGluczE6IGhvZy1waW5zMSB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA2IiwgICJtcHA4IiwgIm1wcDEwIiwKLQkJCQkJCSAgICAgICAibXBwMTIiLCAibXBwMTMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlob2dfcGluczI6IGhvZy1waW5zMiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDciLCAibXBwOSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJdXNiQDUwMDAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtMTM1LDYgKzExMiw4IEBACiAJCQl9OwogCiAJCQlzcGkwOiBzcGlAMTA2MDAgeworCQkJCXBpbmN0cmwtMCA9IDwmc3BpMF9waW5zMj47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAKIAkJCQlzcGktZmxhc2hAMCB7CkBAIC0xNjcsMTcgKzE0Niw4NCBAQAogCX07CiAKIAlzb3VuZCB7Ci0JICAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGEzNzBkYi1hdWRpbyI7Ci0JICAgICAgbWFydmVsbCxhdWRpby1jb250cm9sbGVyID0gPCZhdWRpb19jb250cm9sbGVyPjsKLQkgICAgICBtYXJ2ZWxsLGF1ZGlvLWNvZGVjID0gPCZhdWRpb19jb2RlYyAmc3BkaWZfb3V0ICZzcGRpZl9pbj47Ci0JICAgICAgc3RhdHVzID0gIm9rYXkiOworCQljb21wYXRpYmxlID0gInNpbXBsZS1hdWRpby1jYXJkIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsbmFtZSA9ICJBcm1hZGEgMzcwIERCIEF1ZGlvIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsbWNsay1mcyA9IDwyNTY+OworCQlzaW1wbGUtYXVkaW8tY2FyZCx3aWRnZXRzID0KKwkJCSJIZWFkcGhvbmUiLCAiT3V0IEphY2siLAorCQkJIkxpbmUiLCAiSW4gSmFjayI7CisJCXNpbXBsZS1hdWRpby1jYXJkLHJvdXRpbmcgPQorCQkJIk91dCBKYWNrIiwgIkhQTCIsCisJCQkiT3V0IEphY2siLCAiSFBSIiwKKwkJCSJBSU4xTCIsICJJbiBKYWNrIiwKKwkJCSJBSU4xTCIsICJJbiBKYWNrIjsKKwkJc3RhdHVzID0gIm9rYXkiOworCisJCXNpbXBsZS1hdWRpby1jYXJkLGRhaS1saW5rQDAgeworCQkJZm9ybWF0ID0gImkycyI7CisJCQljcHUgeworCQkJCXNvdW5kLWRhaSA9IDwmYXVkaW9fY29udHJvbGxlciAwPjsKKwkJCX07CisKKwkJCWNvZGVjIHsKKwkJCQlzb3VuZC1kYWkgPSA8JmF1ZGlvX2NvZGVjPjsKKwkJCX07CisJCX07CisKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZGFpLWxpbmtAMSB7CisJCQlmb3JtYXQgPSAiaTJzIjsKKwkJCWNwdSB7CisJCQkJc291bmQtZGFpID0gPCZhdWRpb19jb250cm9sbGVyIDE+OworCQkJfTsKKworCQkJY29kZWMgeworCQkJCXNvdW5kLWRhaSA9IDwmc3BkaWZfb3V0PjsKKwkJCX07CisJCX07CisKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZGFpLWxpbmtAMiB7CisJCQlmb3JtYXQgPSAiaTJzIjsKKwkJCWNwdSB7CisJCQkJc291bmQtZGFpID0gPCZhdWRpb19jb250cm9sbGVyIDE+OworCQkJfTsKKworCQkJY29kZWMgeworCQkJCXNvdW5kLWRhaSA9IDwmc3BkaWZfaW4+OworCQkJfTsKKwkJfTsKIAl9OwogCiAJc3BkaWZfb3V0OiBzcGRpZi1vdXQgewotCSAgICAgIGNvbXBhdGlibGUgPSAibGludXgsc3BkaWYtZGl0IjsKKwkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJsaW51eCxzcGRpZi1kaXQiOwogCX07CiAKIAlzcGRpZl9pbjogc3BkaWYtaW4gewotCSAgICAgIGNvbXBhdGlibGUgPSAibGludXgsc3BkaWYtZGlyIjsKKwkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJsaW51eCxzcGRpZi1kaXIiOworCX07Cit9OworCismcGluY3RybCB7CisJLyoKKwkgKiBUaGVzZSBwaW5zIG1pZ2h0IGJlIG11eGVkIGFzIEkyUyBieQorCSAqIHRoZSBib290bG9hZGVyLCBidXQgaXQgY29uZmxpY3RzCisJICogd2l0aCB0aGUgcmVhbCBJMlMgcGlucyB0aGF0IGFyZQorCSAqIG11eGVkIHVzaW5nIGkyc19waW5zLiBXZSBtdXN0IG11eAorCSAqIHRob3NlIHBpbnMgdG8gYSBmdW5jdGlvbiBvdGhlciB0aGFuCisJICogSTJTLgorCSAqLworCXBpbmN0cmwtMCA9IDwmaG9nX3BpbnMxICZob2dfcGluczI+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwlob2dfcGluczE6IGhvZy1waW5zMSB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2IiwgICJtcHA4IiwgIm1wcDEwIiwKKwkJCSAgICAgICAibXBwMTIiLCAibXBwMTMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlob2dfcGluczI6IGhvZy1waW5zMiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDciLCAibXBwOSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbWlyYWJveC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW1pcmFib3guZHRzCmluZGV4IDJiNmQyNGUuLmUxYjBlYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbWlyYWJveC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1taXJhYm94LmR0cwpAQCAtNTQsMTggKzU0LDYgQEAKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCi0JCQlwaW5jdHJsIHsKLQkJCQlwd3JfbGVkX3BpbjogcHdyLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwbyI7Ci0JCQkJfTsKLQotCQkJCXN0YXRfbGVkX3BpbnM6IHN0YXQtbGVkLXBpbnMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjQiLCAibXBwNjUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0JCQl9OwotCiAJCQlncGlvX2xlZHMgewogCQkJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMTY5LDMgKzE1NywxNiBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJcHdyX2xlZF9waW46IHB3ci1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncG8iOworCX07CisKKwlzdGF0X2xlZF9waW5zOiBzdGF0LWxlZC1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDY0IiwgIm1wcDY1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTAyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbmV0Z2Vhci1ybjEwMi5kdHMKaW5kZXggM2FlYmQ5My4uNGUyNDkzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTAyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDIuZHRzCkBAIC0zNSw3ICszNSw3IEBACiAJCXBjaWUtY29udHJvbGxlciB7CiAJCQlzdGF0dXMgPSAib2theSI7CiAKLQkJCS8qIENvbm5lY3RlZCB0byBNYXJ2ZWxsIFNBVEEgY29udHJvbGxlciAqLworCQkJLyogQ29ubmVjdGVkIHRvIE1hcnZlbGwgODhTRTkxNzAgU0FUQSBjb250cm9sbGVyICovCiAJCQlwY2llQDEsMCB7CiAJCQkJLyogUG9ydCAwLCBMYW5lIDAgKi8KIAkJCQlzdGF0dXMgPSAib2theSI7CkBAIC01Myw1MyArNTMsMTIgQEAKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCisJCQkvKiBlU0FUQSBpbnRlcmZhY2UgKi8KIAkJCXNhdGFAYTAwMDAgewotCQkJCW5yLXBvcnRzID0gPDI+OworCQkJCW5yLXBvcnRzID0gPDE+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAKLQkJCXBpbmN0cmwgewotCQkJCXBvd2VyX2xlZF9waW46IHBvd2VyLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTciOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlzYXRhMV9sZWRfcGluOiBzYXRhMS1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDE1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTJfbGVkX3Bpbjogc2F0YTItbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxNCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCWJhY2t1cF9sZWRfcGluOiBiYWNrdXAtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1NiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCWJhY2t1cF9idXR0b25fcGluOiBiYWNrdXAtYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1OCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXBvd2VyX2J1dHRvbl9waW46IHBvd2VyLWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjIiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlyZXNldF9idXR0b25fcGluOiByZXNldC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDYiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlwb3dlcm9mZjogcG93ZXJvZmYgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwOCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQkJCX07Ci0KIAkJCW1kaW8gewogCQkJCXBpbmN0cmwtMCA9IDwmbWRpb19waW5zPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMjA0LDIwICsxNjMsMjAgQEAKIAkJCWRlZmF1bHQtc3RhdGUgPSAia2VlcCI7CiAJCX07CiAKLQkJZ3JlZW4tc2F0YTEtbGVkIHsKLQkJCWxhYmVsID0gInJuMTAyOmdyZWVuOnNhdGExIjsKKwkJYmx1ZS1zYXRhMS1sZWQgeworCQkJbGFiZWwgPSAicm4xMDI6Ymx1ZTpzYXRhMSI7CiAJCQlncGlvcyA9IDwmZ3BpbzAgMTUgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWRlZmF1bHQtc3RhdGUgPSAib24iOwogCQl9OwogCi0JCWdyZWVuLXNhdGEyLWxlZCB7Ci0JCQlsYWJlbCA9ICJybjEwMjpncmVlbjpzYXRhMiI7CisJCWJsdWUtc2F0YTItbGVkIHsKKwkJCWxhYmVsID0gInJuMTAyOmJsdWU6c2F0YTIiOwogCQkJZ3Bpb3MgPSA8JmdwaW8wIDE0IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKIAkJfTsKIAotCQlncmVlbi1iYWNrdXAtbGVkIHsKLQkJCWxhYmVsID0gInJuMTAyOmdyZWVuOmJhY2t1cCI7CisJCWJsdWUtYmFja3VwLWxlZCB7CisJCQlsYWJlbCA9ICJybjEwMjpibHVlOmJhY2t1cCI7CiAJCQlncGlvcyA9IDwmZ3BpbzEgMjQgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWRlZmF1bHQtc3RhdGUgPSAib24iOwogCQl9OwpAQCAtMjU2LDMgKzIxNSw0NSBAQAogCQlncGlvcyA9IDwmZ3BpbzAgOCBHUElPX0FDVElWRV9MT1c+OwogCX07CiB9OworCismcGluY3RybCB7CisJcG93ZXJfbGVkX3BpbjogcG93ZXItbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1NyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGExX2xlZF9waW46IHNhdGExLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMl9sZWRfcGluOiBzYXRhMi1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDE0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJYmFja3VwX2xlZF9waW46IGJhY2t1cC1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDU2IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJYmFja3VwX2J1dHRvbl9waW46IGJhY2t1cC1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDU4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcG93ZXJfYnV0dG9uX3BpbjogcG93ZXItYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2MiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXJlc2V0X2J1dHRvbl9waW46IHJlc2V0LWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXBvd2Vyb2ZmOiBwb3dlcm9mZiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbmV0Z2Vhci1ybjEwNC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDQuZHRzCmluZGV4IGMyZjQxNGIuLjMwNTg2ZTQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbmV0Z2Vhci1ybjEwNC5kdHMKQEAgLTUzLDM4ICs1Myw2IEBACiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAotCQkJcGluY3RybCB7Ci0JCQkJcG93ZXJvZmY6IHBvd2Vyb2ZmIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDYwIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJYmFja3VwX2J1dHRvbl9waW46IGJhY2t1cC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDUyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJcG93ZXJfYnV0dG9uX3BpbjogcG93ZXItYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA2MiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCWJhY2t1cF9sZWRfcGluOiBiYWNrdXAtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA2MyI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKLQkJCQl9OwotCi0JCQkJcG93ZXJfbGVkX3BpbjogcG93ZXItbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA2NCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXJlc2V0X2J1dHRvbl9waW46IHJlc2V0LWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0JCQl9OwotCiAJCQltZGlvIHsKIAkJCQlwaW5jdHJsLTAgPSA8Jm1kaW9fcGlucz47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTI2OSwzICsyMzcsMzUgQEAKIAkJZ3Bpb3MgPSA8JmdwaW8xIDI4IEdQSU9fQUNUSVZFX0xPVz47CiAJfTsKIH07CisKKyZwaW5jdHJsIHsKKwlwb3dlcm9mZjogcG93ZXJvZmYgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjAiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwliYWNrdXBfYnV0dG9uX3BpbjogYmFja3VwLWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwb3dlcl9idXR0b25fcGluOiBwb3dlci1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJYmFja3VwX2xlZF9waW46IGJhY2t1cC1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncG8iOworCX07CisKKwlwb3dlcl9sZWRfcGluOiBwb3dlci1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDY0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcmVzZXRfYnV0dG9uX3BpbjogcmVzZXQtYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtcmQuZHRzCmluZGV4IGY1N2E4Zjg0Li4zOTQzMDg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXJkLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXJkLmR0cwpAQCAtNTksMTggKzU5LDYgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKLQkJCXBpbmN0cmwgewotCQkJCWZhbl9waW5zOiBmYW4tcGlucyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA4IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJbGVkX3BpbnM6IGxlZC1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJc2VyaWFsQDEyMDAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtODUsMTAgKzczLDYgQEAKIAkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CiAJCQkJCXJlZyA9IDwwPjsKIAkJCQl9OwotCi0JCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCQlyZWcgPSA8MT47Ci0JCQkJfTsKIAkJCX07CiAKIAkJCWV0aGVybmV0QDcwMDAwIHsKQEAgLTEwMCw4ICs4NCwxMSBAQAogCQkJCXBpbmN0cmwtMCA9IDwmZ2UxX3JnbWlpX3BpbnM+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJCXBoeSA9IDwmcGh5MT47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWktaWQiOworCQkJCWZpeGVkLWxpbmsgeworCQkJCQkgICBzcGVlZCA9IDwxMDAwPjsKKwkJCQkJICAgZnVsbC1kdXBsZXg7CisJCQkJfTsKIAkJCX07CiAKIAkJCW12c2Rpb0BkNDAwMCB7CkBAIC0xNzMsNCArMTYwLDU2IEBACiAJCQl9OwogCQl9OwogCX07CisKKwlkc2FAMCB7CisJCWNvbXBhdGlibGUgPSAibWFydmVsbCxkc2EiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJZHNhLGV0aGVybmV0ID0gPCZldGgxPjsKKwkJZHNhLG1paS1idXMgPSA8Jm1kaW8+OworCisJCXN3aXRjaEAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgxMCAwPjsJLyogTURJTyBhZGRyZXNzIDE2LCBzd2l0Y2ggMCBpbiB0cmVlICovCisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWxhYmVsID0gImxhbjAiOworCQkJfTsKKworCQkJcG9ydEAxIHsKKwkJCSAgICAgICByZWcgPSA8MT47CisJCQkgICAgICAgbGFiZWwgPSAibGFuMSI7CisJCQl9OworCisJCQlwb3J0QDIgeworCQkJICAgICAgIHJlZyA9IDwyPjsKKwkJCSAgICAgICBsYWJlbCA9ICJsYW4yIjsKKwkJCX07CisKKwkJCXBvcnRAMyB7CisJCQkgICAgICAgcmVnID0gPDM+OworCQkJICAgICAgIGxhYmVsID0gImxhbjMiOworCQkJfTsKKworCQkJcG9ydEA1IHsKKwkJCSAgICAgIHJlZyA9IDw1PjsKKwkJCSAgICAgIGxhYmVsID0gImNwdSI7CisJCQl9OworCQl9OworCSB9OwogIH07CisKKyZwaW5jdHJsIHsKKwlmYW5fcGluczogZmFuLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwOCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWxlZF9waW5zOiBsZWQtcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXN5bm9sb2d5LWRzMjEzai5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXN5bm9sb2d5LWRzMjEzai5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmZWNkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtc3lub2xvZ3ktZHMyMTNqLmR0cwpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIERldmljZSBUcmVlIGZpbGUgZm9yIFN5bm9sb2d5IERTMjEzagorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgQXJuYXVkIEVCQUxBUkQgPGFybm9AbmF0aXNiYWQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTm90ZTogdGhpcyBEZXZpY2UgVHJlZSBhc3N1bWVzIHRoYXQgdGhlIGJvb3Rsb2FkZXIgaGFzIHJlbWFwcGVkIHRoZQorICogaW50ZXJuYWwgcmVnaXN0ZXJzIHRvIDB4ZjEwMDAwMDAgKGluc3RlYWQgb2YgdGhlIG9sZCAweGQwMDAwMDAwKS4KKyAqIFRoZSAweGYxMDAwMDAwIGlzIHRoZSBkZWZhdWx0IHVzZWQgYnkgdGhlIHJlY2VudCwgRFQtY2FwYWJsZSwgVS1Cb290CisgKiBib290bG9hZGVycyBwcm92aWRlZCBieSBNYXJ2ZWxsLiBJdCBpcyB1c2VkIGluIHJlY2VudCB2ZXJzaW9ucyBvZgorICogRFNNIHNvZnR3YXJlIHByb3ZpZGVkIGJ5IFN5bm9sb2d5LiBOb25ldGhlbGVzcywgc29tZSBlYXJsaWVyIGJvYXJkcworICogd2VyZSBkZWxpdmVyZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIHUtYm9vdCB0aGF0IGxlZnQgaW50ZXJuYWwKKyAqIHJlZ2lzdGVycyBtYXBwZWQgYXQgMHhkMDAwMDAwMC4gSWYgeW91IGhhdmUgc3VjaCBhIGRldmljZSB5b3Ugd2lsbAorICogbm90IGJlIGFibGUgdG8gZGlyZWN0bHkgYm9vdCBhIGtlcm5lbCBiYXNlZCBvbiB0aGlzIERldmljZSBUcmVlLiBJbgorICogdGhhdCBjYXNlLCB0aGUgcHJlZmVycmVkIHNvbHV0aW9uIGlzIHRvIHVwZGF0ZSB5b3VyIGJvb3Rsb2FkZXIgKGUuZy4KKyAqIGJ5IHVwZ3JhZGluZyB0byBsYXRlc3QgdmVyc2lvbiBvZiBEU00sIG9yIGJ1aWxkaW5nIGEgbmV3IG9uZSBhbmQKKyAqIGluc3RhbGxpbmcgaXQgZnJvbSB1LWJvb3QgcHJvbXB0KSBvciBhZGp1c3QgdGhlIERldml2ZSBUcmVlCisgKiAocy8weGYxMDAwMDAwLzB4ZDAwMDAwMDAvIGluICdyYW5nZXMnIGJlbG93KS4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSAiYXJtYWRhLTM3MC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJTeW5vbG9neSBEUzIxM2oiOworCWNvbXBhdGlibGUgPSAic3lub2xvZ3ksZHMyMTNqIiwgIm1hcnZlbGwsYXJtYWRhMzcwIiwKKwkJICAgICAibWFydmVsbCxhcm1hZGEtMzcwLXhwIjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIGVhcmx5cHJpbnRrIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MjAwMDAwMDA+OyAvKiA1MTIgTUIgKi8KKwl9OworCisJc29jIHsKKwkJcmFuZ2VzID0gPE1CVVNfSUQoMHhmMCwgMHgwMSkgMCAweGYxMDAwMDAwIDB4MTAwMDAwCisJCQkgIE1CVVNfSUQoMHgwMSwgMHhlMCkgMCAweGZmZjAwMDAwIDB4MTAwMDAwPjsKKworCQlpbnRlcm5hbC1yZWdzIHsKKworCQkJLyogUlRDIHByb3ZpZGVkIGJ5IFNlaWtvIFMtMzUzOTBBIEkyQyBSVEMgY2hpcCBiZWxvdyAqLworCQkJcnRjQDEwMzAwIHsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJc3BpMDogc3BpQDEwNjAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCQlzcGktZmxhc2hAMCB7CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQkJY29tcGF0aWJsZSA9ICJtaWNyb24sbjI1cTA2NCI7CisJCQkJCXJlZyA9IDwwPjsgLyogQ2hpcCBzZWxlY3QgMCAqLworCQkJCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisKKwkJCQkJLyoKKwkJCQkJICogV2FybmluZyEKKwkJCQkJICoKKwkJCQkJICogU3lub2xvZ3kgdS1ib290IHVzZXMgaXRzIGNvbXBpbGVkLWluIGVudmlyb25tZW50CisJCQkJCSAqIGFuZCBpdCBzZWVtcyBTeW5vbG9neSBkaWQgbm90IGNhcmUgdG8gY2hhbmdlIHUtYm9vdAorCQkJCQkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgdG8gYWxsb3cgc2F2aW5nIGEKKwkJCQkJICogbW9kaWZpZWQgZW52aXJvbm1lbnQgYXQgYSBzZW5zaWJsZSBsb2NhdGlvbi4gU28sCisJCQkJCSAqIGlmIHlvdSBkbyBhICdzYXZlZW52JyB1bmRlciB1LWJvb3QsIHlvdXIgbW9kaWZpZWQKKwkJCQkJICogZW52aXJvbm1lbnQgd2lsbCBiZSBzYXZlZCBhdCAxTUIgYWZ0ZXIgdGhlIHN0YXJ0CisJCQkJCSAqIG9mIHRoZSBmbGFzaCwgaS5lLiBpbiB0aGUgbWlkZGxlIG9mIHRoZSB1SW1hZ2UuCisJCQkJCSAqIEZvciB0aGF0IHJlYXNvbiwgaXQgaXMgc3Ryb25nbHkgYWR2aXNlZCBub3QgdG8KKwkJCQkJICogY2hhbmdlIHRoZSBkZWZhdWx0IGVudmlyb25tZW50LCB1bmxlc3MgeW91IGtub3cKKwkJCQkJICogd2hhdCB5b3UgYXJlIGRvaW5nLgorCQkJCQkgKi8KKwkJCQkJcGFydGl0aW9uQDAwMDAwMDAwIHsgLyogdS1ib290ICovCisJCQkJCQlsYWJlbCA9ICJSZWRCb290IjsKKwkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwYzAwMDA+OyAvKiA3NjhLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDBjMDAwMCB7IC8qIHVJbWFnZSAqLworCQkJCQkJbGFiZWwgPSAiekltYWdlIjsKKwkJCQkJCXJlZyA9IDwweDAwMGMwMDAwIDB4MDAyZDAwMDA+OyAvKiAyODgwS0IgKi8KKwkJCQkJfTsKKworCQkJCQlwYXJ0aXRpb25AMDAzOTAwMDAgeyAvKiB1SW5pdHJhbWZzICovCisJCQkJCQlsYWJlbCA9ICJyZC5neiI7CisJCQkJCQlyZWcgPSA8MHgwMDM5MDAwMCAweDAwNDQwMDAwPjsgLyogNDI1MEtCICovCisJCQkJCX07CisKKwkJCQkJcGFydGl0aW9uQDAwN2QwMDAwIHsgLyogTUFDIGFkZHJlc3MgYW5kIHNlcmlhbCBudW1iZXIgKi8KKwkJCQkJCWxhYmVsID0gInZlbmRvciI7CisJCQkJCQlyZWcgPSA8MHgwMDdkMDAwMCAweDAwMDEwMDAwPjsgLyogNjRLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDdlMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJSZWRCb290IGNvbmZpZyI7CisJCQkJCQlyZWcgPSA8MHgwMDdlMDAwMCAweDAwMDEwMDAwPjsgLyogNjRLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDdmMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJGSVMgZGlyZWN0b3J5IjsKKwkJCQkJCXJlZyA9IDwweDAwN2YwMDAwIDB4MDAwMTAwMDA+OyAvKiA2NEtCICovCisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWkyY0AxMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4eHgtaTJjIjsKKwkJCQlwaW5jdHJsLTAgPSA8JmkyYzBfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCQkvKiBNYWluIGRldmljZSBSVEMgY2hpcCAqLworCQkJCXMzNTM5MGE6IHMzNTM5MGFAMzAgeworCQkJCQkgY29tcGF0aWJsZSA9ICJzaWksczM1MzkwYSI7CisJCQkJCSByZWcgPSA8MHgzMD47CisJCQkJfTsKKwkJCX07CisKKwkJCS8qIENvbm5lY3RlZCB0byBhIGhlYWRlciBvbiBkZXZpY2UncyBQQ0IgKi8KKwkJCXNlcmlhbEAxMjAwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJLyogQ29ubmVjdGVkIHRvIGEgVEkgTVNQNDMwRjIxMTEgZm9yIHBvd2VyIGNvbnRyb2wgKi8KKwkJCXNlcmlhbEAxMjEwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJcG93ZXJvZmZAMTIxMDAgeworCQkJCWNvbXBhdGlibGUgPSAic3lub2xvZ3kscG93ZXItb2ZmIjsKKwkJCQlyZWcgPSA8MHgxMjEwMCAweDEwMD47CisJCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+OworCQkJfTsKKworCQkJLyogcmVhciBVU0IgcG9ydCwgbmVhciByZXNldCBidXR0b24gKi8KKwkJCXVzYkA1MDAwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJLyogcmVhciBVU0IgcG9ydCwgbmVhciBSSjQ1IHBvcnQgKi8KKwkJCXVzYkA1MTAwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJbWRpbyB7CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeyAvKiBNYXJ2ZWxsIDg4RTE1MTIgKi8KKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQl9OworCisJCQlldGhlcm5ldEA3MDAwMCB7CisJCQkgICAgICAgc3RhdHVzID0gIm9rYXkiOworCQkJICAgICAgIHBoeSA9IDwmcGh5MT47CisJCQkgICAgICAgcGh5LW1vZGUgPSAic2dtaWkiOworCQkJfTsKKworCQkJc2F0YUBhMDAwMCB7CisJCQkJbnItcG9ydHMgPSA8Mj47CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKwkJfTsKKwl9OworCisJZ3Bpby1mYW4tMzItMzggeworCQlzdGF0dXMgPSAib2theSI7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1mYW4iOworCQlwaW5jdHJsLTAgPSA8JmZhbl9jdHJsX2xvd19waW4gJmZhbl9jdHJsX21pZF9waW4KKwkJCSAgICAgJmZhbl9jdHJsX2hpZ2hfcGluICZmYW5fYWxhcm1fcGluPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJZ3Bpb3MgPSA8JmdwaW8xIDMxIEdQSU9fQUNUSVZFX0hJR0gKKwkJCSAmZ3BpbzIgIDAgR1BJT19BQ1RJVkVfSElHSAorCQkJICZncGlvMiAgMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJYWxhcm0tZ3Bpb3MgPSA8JmdwaW8xIDYgR1BJT19BQ1RJVkVfSElHSD47CisJCWdwaW8tZmFuLHNwZWVkLW1hcCA9IDwgICAgMCAwCisJCQkJICAgICAgIDEwMDAgMQorCQkJCSAgICAgICAxMTUwIDIKKwkJCQkgICAgICAgMTM1MCA0CisJCQkJICAgICAgIDE1MDAgMworCQkJCSAgICAgICAxNjUwIDUKKwkJCQkgICAgICAgMTc1MCA2CisJCQkJICAgICAgIDE5MDAgNyA+OworCX07CisKKwlncGlvLWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtMCA9IDwmZGlzazFfbGVkX3BpbgorCQkJICAgICAmZGlzazJfbGVkX3Bpbj47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJZGlzazEtbGVkLWFtYmVyIHsKKwkJCWxhYmVsID0gInN5bm9sb2d5OmFtYmVyOmRpc2sxIjsKKwkJCWdwaW9zID0gPCZncGlvMCAzMSBHUElPX0FDVElWRV9MT1c+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJfTsKKworCQlkaXNrMi1sZWQtYW1iZXIgeworCQkJbGFiZWwgPSAic3lub2xvZ3k6YW1iZXI6ZGlzazIiOworCQkJZ3Bpb3MgPSA8JmdwaW8xIDAgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAia2VlcCI7CisJCX07CisJfTsKKworCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtMCA9IDwmc2F0YTFfcHdyX3BpbiAmc2F0YTJfcHdyX3Bpbj47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJc2F0YTFfcmVndWxhdG9yOiBzYXRhMS1yZWd1bGF0b3IgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDE+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiU0FUQTEgUG93ZXIiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXN0YXJ0dXAtZGVsYXktdXMgPSA8MjAwMDAwMD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlncGlvID0gPCZncGlvMSA1IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCXNhdGEyX3JlZ3VsYXRvcjogc2F0YTItcmVndWxhdG9yIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwyPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIlNBVEEyIFBvd2VyIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlzdGFydHVwLWRlbGF5LXVzID0gPDQwMDAwMDA+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJZ3BpbyA9IDwmZ3BpbzEgMzAgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJfTsKK307CisKKyZwaW5jdHJsIHsKKwlkaXNrMV9sZWRfcGluOiBkaXNrMS1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMxIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJZGlzazJfbGVkX3BpbjogZGlzazItbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGExX3B3cl9waW46IHNhdGExLXB3ci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzciOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMl9wd3JfcGluOiBzYXRhMi1wd3ItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTFfcHJlc19waW46IHNhdGExLXByZXMtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYwIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTJfcHJlc19waW46IHNhdGEyLXByZXMtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc3lub19pZF9iaXQwX3Bpbjogc3luby1pZC1iaXQwLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXN5bm9faWRfYml0MV9waW46IHN5bm8taWQtYml0MS1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTYiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzeW5vX2lkX2JpdDJfcGluOiBzeW5vLWlkLWJpdDItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDU3IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc3lub19pZF9iaXQzX3Bpbjogc3luby1pZC1iaXQzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1OCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWZhbl9jdHJsX2xvd19waW46IGZhbi1jdHJsLWxvdy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlmYW5fY3RybF9taWRfcGluOiBmYW4tY3RybC1taWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDY0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJZmFuX2N0cmxfaGlnaF9waW46IGZhbi1jdHJsLWhpZ2gtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncG8iOworCX07CisKKwlmYW5fYWxhcm1fcGluOiBmYW4tYWxhcm0tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDM4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAteHAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAteHAuZHRzaQppbmRleCA4MzI4NmVjLi4xYWY0Mjg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXhwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC14cC5kdHNpCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAotCQkJc2VyaWFsQDEyMDAwIHsKKwkJCXVhcnQwOiBzZXJpYWxAMTIwMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CiAJCQkJcmVnID0gPDB4MTIwMDAgMHgxMDA+OwogCQkJCXJlZy1zaGlmdCA9IDwyPjsKQEAgLTE2MCw3ICsxNjAsOCBAQAogCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKLQkJCXNlcmlhbEAxMjEwMCB7CisKKwkJCXVhcnQxOiBzZXJpYWxAMTIxMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CiAJCQkJcmVnID0gPDB4MTIxMDAgMHgxMDA+OwogCQkJCXJlZy1zaGlmdCA9IDwyPjsKQEAgLTE3MCw2ICsxNzEsMTAgQEAKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAorCQkJcGluY3RybDogcGluLWN0cmxAMTgwMDAgeworCQkJCXJlZyA9IDwweDE4MDAwIDB4Mzg+OworCQkJfTsKKwogCQkJY29yZWRpdmNsazogY29yZWRpdi1jbG9ja0AxODc0MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zNzAtY29yZWRpdi1jbG9jayI7CiAJCQkJcmVnID0gPDB4MTg3NDAgMHhjPjsKQEAgLTE4MCw3ICsxODUsOCBAQAogCiAJCQltYnVzYzogbWJ1cy1jb250cm9sbGVyQDIwMDAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbWJ1cy1jb250cm9sbGVyIjsKLQkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+OworCQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwPiwgPDB4MjAxODAgMHgyMD4sCisJCQkJICAgICAgPDB4MjAyNTAgMHg4PjsKIAkJCX07CiAKIAkJCW1waWM6IGludGVycnVwdC1jb250cm9sbGVyQDIwMDAwIHsKQEAgLTIzMiw3ICsyMzgsNyBAQAogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCi0JCQltZGlvIHsKKwkJCW1kaW86IG1kaW8gewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1tZGlvIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAuZHRzaQppbmRleCA2YjNjMjNiLi5mZGIzYzEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC5kdHNpCkBAIC05NSw5ICs5NSwyNCBAQAogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhdXJvcmEtb3V0ZXItY2FjaGUiOwogCQkJCXJlZyA9IDwweDA4MDAwIDB4MTAwMD47CiAJCQkJY2FjaGUtaWQtcGFydCA9IDwweDEwMD47CisJCQkJY2FjaGUtdW5pZmllZDsKIAkJCQl3dC1vdmVycmlkZTsKIAkJCX07CiAKKwkJCS8qCisJCQkgKiBEZWZhdWx0IFNQSSBwaW5jdHJsIHNldHRpbmcsIGNhbiBiZSBvdmVyd3JpdHRlbiBvbgorCQkJICogYm9hcmQgbGV2ZWwgaWYgYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBpcyB1c2VkLgorCQkJICovCisJCQlzcGkwOiBzcGlAMTA2MDAgeworCQkJCXBpbmN0cmwtMCA9IDwmc3BpMF9waW5zMT47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCX07CisKKwkJCXNwaTE6IHNwaUAxMDY4MCB7CisJCQkJcGluY3RybC0wID0gPCZzcGkxX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQl9OworCiAJCQlpMmMwOiBpMmNAMTEwMDAgewogCQkJCXJlZyA9IDwweDExMDAwIDB4MjA+OwogCQkJfTsKQEAgLTEwNiw3MiArMTIxLDYgQEAKIAkJCQlyZWcgPSA8MHgxMTEwMCAweDIwPjsKIAkJCX07CiAKLQkJCXN5c3RlbS1jb250cm9sbGVyQDE4MjAwIHsKLQkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC14cC1zeXN0ZW0tY29udHJvbGxlciI7Ci0JCQkJcmVnID0gPDB4MTgyMDAgMHgxMDA+OwotCQkJfTsKLQotCQkJcGluY3RybCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12ODhmNjcxMC1waW5jdHJsIjsKLQkJCQlyZWcgPSA8MHgxODAwMCAweDM4PjsKLQotCQkJCXNkaW9fcGluczE6IHNkaW8tcGluczEgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwOSIsICAibXBwMTEiLCAibXBwMTIiLAotCQkJCQkJCSJtcHAxMyIsICJtcHAxNCIsICJtcHAxNSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKLQkJCQl9OwotCi0JCQkJc2Rpb19waW5zMjogc2Rpby1waW5zMiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NyIsICJtcHA0OCIsICJtcHA0OSIsCi0JCQkJCQkJIm1wcDUwIiwgIm1wcDUxIiwgIm1wcDUyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzZDAiOwotCQkJCX07Ci0KLQkJCQlzZGlvX3BpbnMzOiBzZGlvLXBpbnMzIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ4IiwgIm1wcDQ5IiwgIm1wcDUwIiwKLQkJCQkJCQkibXBwNTEiLCAibXBwNTIiLCAibXBwNTMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNkMCI7Ci0JCQkJfTsKLQotCQkJCWkyYzBfcGluczogaTJjMC1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDIiLCAibXBwMyI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiaTJjMCI7Ci0JCQkJfTsKLQotCQkJCWkyc19waW5zMTogaTJzLXBpbnMxIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDUiLCAibXBwNiIsICJtcHA3IiwKLQkJCQkJCSAgICAgICAibXBwOCIsICJtcHA5IiwgIm1wcDEwIiwKLQkJCQkJCSAgICAgICAibXBwMTIiLCAibXBwMTMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImF1ZGlvIjsKLQkJCQl9OwotCi0JCQkJaTJzX3BpbnMyOiBpMnMtcGluczIgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDkiLCAibXBwNDciLCAibXBwNTAiLAotCQkJCQkJICAgICAgICJtcHA1OSIsICJtcHA1NyIsICJtcHA2MSIsCi0JCQkJCQkgICAgICAgIm1wcDYyIiwgIm1wcDYwIiwgIm1wcDU4IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJhdWRpbyI7Ci0JCQkJfTsKLQotCQkJCW1kaW9fcGluczogbWRpby1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDE3IiwgIm1wcDE4IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZSI7Ci0JCQkJfTsKLQotCQkJCWdlMF9yZ21paV9waW5zOiBnZTAtcmdtaWktcGlucyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDYiLCAibXBwNyIsICJtcHA4IiwKLQkJCQkJCSAgICAgICAibXBwOSIsICJtcHAxMCIsICJtcHAxMSIsICJtcHAxMiIsCi0JCQkJCQkgICAgICAgIm1wcDEzIiwgIm1wcDE0IiwgIm1wcDE1IiwgIm1wcDE2IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTAiOwotCQkJCX07Ci0KLQkJCQlnZTFfcmdtaWlfcGluczogZ2UxLXJnbWlpLXBpbnMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTkiLCAibXBwMjAiLCAibXBwMjEiLCAibXBwMjIiLAotCQkJCQkJICAgICAgICJtcHAyMyIsICJtcHAyNCIsICJtcHAyNSIsICJtcHAyNiIsCi0JCQkJCQkgICAgICAgIm1wcDI3IiwgIm1wcDI4IiwgIm1wcDI5IiwgIm1wcDMwIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTEiOwotCQkJCX07Ci0JCQl9OwotCiAJCQlncGlvMDogZ3Bpb0AxODEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWdwaW8iOwogCQkJCXJlZyA9IDwweDE4MTAwIDB4NDA+OwpAQCAtMjA1LDYgKzE1NCwyNiBAQAogCQkJCWludGVycnVwdHMgPSA8OTE+OwogCQkJfTsKIAorCQkJLyoKKwkJCSAqIERlZmF1bHQgVUFSVCBwaW5jdHJsIHNldHRpbmcgd2l0aG91dCBSVFMvQ1RTLCBjYW4KKwkJCSAqIGJlIG92ZXJ3cml0dGVuIG9uIGJvYXJkIGxldmVsIGlmIGEgZGlmZmVyZW50CisJCQkgKiBjb25maWd1cmF0aW9uIGlzIHVzZWQuCisJCQkgKi8KKwkJCXVhcnQwOiBzZXJpYWxAMTIwMDAgeworCQkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCX07CisKKwkJCXVhcnQxOiBzZXJpYWxAMTIxMDAgeworCQkJCXBpbmN0cmwtMCA9IDwmdWFydDFfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCX07CisKKwkJCXN5c3RlbS1jb250cm9sbGVyQDE4MjAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC14cC1zeXN0ZW0tY29udHJvbGxlciI7CisJCQkJcmVnID0gPDB4MTgyMDAgMHgxMDA+OworCQkJfTsKKwogCQkJZ2F0ZWNsazogY2xvY2stZ2F0aW5nLWNvbnRyb2xAMTgyMjAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwLWdhdGluZy1jbG9jayI7CiAJCQkJcmVnID0gPDB4MTgyMjAgMHg0PjsKQEAgLTI0OSw2ICsyMTgsNyBAQAogCQkJfTsKIAogCQkJYXVkaW9fY29udHJvbGxlcjogYXVkaW8tY29udHJvbGxlckAzMDAwMCB7CisJCQkJI3NvdW5kLWRhaS1jZWxscyA9IDwxPjsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhMzcwLWF1ZGlvIjsKIAkJCQlyZWcgPSA8MHgzMDAwMCAweDQwMDA+OwogCQkJCWludGVycnVwdHMgPSA8OTM+OwpAQCAtMzA1LDMgKzI3NSw5MSBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12ODhmNjcxMC1waW5jdHJsIjsKKworCXNwaTBfcGluczE6IHNwaTAtcGluczEgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzMiLCAibXBwMzQiLAorCQkJICAgICAgICJtcHAzNSIsICJtcHAzNiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic3BpMCI7CisJfTsKKworCXNwaTBfcGluczI6IHNwaTBfcGluczIgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzIiLCAibXBwNjMiLAorCQkJICAgICAgICJtcHA2NCIsICJtcHA2NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic3BpMCI7CisJfTsKKworCXNwaTFfcGluczogc3BpMS1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ5IiwgIm1wcDUwIiwKKwkJCSAgICAgICAibXBwNTEiLCAibXBwNTIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNwaTEiOworCX07CisKKwl1YXJ0MF9waW5zOiB1YXJ0MC1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDAiLCAibXBwMSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDAiOworCX07CisKKwl1YXJ0MV9waW5zOiB1YXJ0MS1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQxIiwgIm1wcDQyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJ1YXJ0MSI7CisJfTsKKworCXNkaW9fcGluczE6IHNkaW8tcGluczEgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwOSIsICAibXBwMTEiLCAibXBwMTIiLAorCQkJCSJtcHAxMyIsICJtcHAxNCIsICJtcHAxNSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKKwl9OworCisJc2Rpb19waW5zMjogc2Rpby1waW5zMiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0NyIsICJtcHA0OCIsICJtcHA0OSIsCisJCQkJIm1wcDUwIiwgIm1wcDUxIiwgIm1wcDUyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJzZDAiOworCX07CisKKwlzZGlvX3BpbnMzOiBzZGlvLXBpbnMzIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ4IiwgIm1wcDQ5IiwgIm1wcDUwIiwKKwkJCQkibXBwNTEiLCAibXBwNTIiLCAibXBwNTMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNkMCI7CisJfTsKKworCWkyYzBfcGluczogaTJjMC1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDIiLCAibXBwMyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiaTJjMCI7CisJfTsKKworCWkyc19waW5zMTogaTJzLXBpbnMxIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDUiLCAibXBwNiIsICJtcHA3IiwKKwkJCSAgICAgICAibXBwOCIsICJtcHA5IiwgIm1wcDEwIiwKKwkJCSAgICAgICAibXBwMTIiLCAibXBwMTMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImF1ZGlvIjsKKwl9OworCisJaTJzX3BpbnMyOiBpMnMtcGluczIgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDkiLCAibXBwNDciLCAibXBwNTAiLAorCQkJICAgICAgICJtcHA1OSIsICJtcHA1NyIsICJtcHA2MSIsCisJCQkgICAgICAgIm1wcDYyIiwgIm1wcDYwIiwgIm1wcDU4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJhdWRpbyI7CisJfTsKKworCW1kaW9fcGluczogbWRpby1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDE3IiwgIm1wcDE4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZSI7CisJfTsKKworCWdlMF9yZ21paV9waW5zOiBnZTAtcmdtaWktcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDYiLCAibXBwNyIsICJtcHA4IiwKKwkJCSAgICAgICAibXBwOSIsICJtcHAxMCIsICJtcHAxMSIsICJtcHAxMiIsCisJCQkgICAgICAgIm1wcDEzIiwgIm1wcDE0IiwgIm1wcDE1IiwgIm1wcDE2IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTAiOworCX07CisKKwlnZTFfcmdtaWlfcGluczogZ2UxLXJnbWlpLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTkiLCAibXBwMjAiLCAibXBwMjEiLCAibXBwMjIiLAorCQkJICAgICAgICJtcHAyMyIsICJtcHAyNCIsICJtcHAyNSIsICJtcHAyNiIsCisJCQkgICAgICAgIm1wcDI3IiwgIm1wcDI4IiwgIm1wcDI5IiwgIm1wcDMwIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTEiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3NS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3NS5kdHNpCmluZGV4IGRlNjU3MTQuLjk3MjFlNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzc1LmR0c2kKQEAgLTM2LDYgKzM2LDEyIEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwMD47CiAJCX07CisJCS8qIDI1IE1IeiByZWZlcmVuY2UgY3J5c3RhbCAqLworCQlyZWZjbGs6IG9zY2lsbGF0b3IgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDA+OworCQl9OwogCX07CiAKIAljcHVzIHsKQEAgLTM2NiwxMyArMzcyLDE1IEBACiAJCQkJCQkgICAgICA8JmdpYyAgR0lDX1NQSSAxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCQkJCSAgICAgIDwmbXBpYyA1PiwKIAkJCQkJCSAgICAgIDwmbXBpYyA2PjsKLQkJCQljbG9ja3MgPSA8JmNvcmVjbGsgMD47CisJCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+LCA8JnJlZmNsaz47CisJCQkJY2xvY2stbmFtZXMgPSAibmJjbGsiLCAiZml4ZWQiOwogCQkJfTsKIAogCQkJd2F0Y2hkb2dAMjAzMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzc1LXdkdCI7CiAJCQkJcmVnID0gPDB4MjAzMDAgMHgzND4sIDwweDIwNzA0IDB4ND4sIDwweDE4MjU0IDB4ND47Ci0JCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+OworCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPiwgPCZyZWZjbGs+OworCQkJCWNsb2NrLW5hbWVzID0gIm5iY2xrIiwgImZpeGVkIjsKIAkJCX07CiAKIAkJCWNwdXJzdEAyMDgwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzg1LWRiLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODUtZGIuZHRzCmluZGV4IDFhZjg4NmYuLjJhYWE5ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODUtZGIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODUtZGIuZHRzCkBAIC0xMTYsMTEgKzExNiwxMSBAQAogCQkJfTsKIAogCQkJc2RoY2lAZDgwMDAgewotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwogCQkJCWJyb2tlbi1jZDsKIAkJCQl3cC1pbnZlcnRlZDsKIAkJCQlidXMtd2lkdGggPSA8OD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJCW5vLTEtOC12OwogCQkJfTsKIAogCQkJdXNiM0BmMDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzh4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzh4LmR0c2kKaW5kZXggMjQyZDBlYy4uNzQzOTFkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zOHguZHRzaQpAQCAtMjUsOSArMjUsOSBAQAogCWFsaWFzZXMgewogCQlncGlvMCA9ICZncGlvMDsKIAkJZ3BpbzEgPSAmZ3BpbzE7Ci0JCWV0aDAgPSAmZXRoMDsKLQkJZXRoMSA9ICZldGgxOwotCQlldGgyID0gJmV0aDI7CisJCWV0aGVybmV0MCA9ICZldGgwOworCQlldGhlcm5ldDEgPSAmZXRoMTsKKwkJZXRoZXJuZXQyID0gJmV0aDI7CiAJfTsKIAogCXNvYyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtYXhwd2lmaWFwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1heHB3aWZpYXAuZHRzCmluZGV4IGE1NWE5N2EuLmNhMDIwMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1heHB3aWZpYXAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1heHB3aWZpYXAuZHRzCkBAIC02MCw0MCArNjAsNiBAQAogCQl9OwogCiAJCWludGVybmFsLXJlZ3MgewotCQkJcGluY3RybCB7Ci0JCQkJcGluY3RybC0wID0gPCZwbXhfcGh5X2ludD47Ci0JCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQotCQkJCXBteF9nZTA6IHBteC1nZTAgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMCIsICJtcHAxIiwgIm1wcDIiLCAibXBwMyIsCi0JCQkJCQkgICAgICAgIm1wcDQiLCAibXBwNSIsICJtcHA2IiwgIm1wcDciLAotCQkJCQkJICAgICAgICJtcHA4IiwgIm1wcDkiLCAibXBwMTAiLCAibXBwMTEiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdlMCI7Ci0JCQkJfTsKLQotCQkJCXBteF9nZTE6IHBteC1nZTEgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTIiLCAibXBwMTMiLCAibXBwMTQiLCAibXBwMTUiLAotCQkJCQkJICAgICAgICJtcHAxNiIsICJtcHAxNyIsICJtcHAxOCIsICJtcHAxOSIsCi0JCQkJCQkgICAgICAgIm1wcDIwIiwgIm1wcDIxIiwgIm1wcDIyIiwgIm1wcDIzIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTEiOwotCQkJCX07Ci0KLQkJCQlwbXhfa2V5czogcG14LWtleXMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlwbXhfc3BpOiBwbXgtc3BpIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDM2IiwgIm1wcDM3IiwgIm1wcDM4IiwgIm1wcDM5IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzcGkiOwotCQkJCX07Ci0KLQkJCQlwbXhfcGh5X2ludDogcG14LXBoeS1pbnQgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzIiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0JCQl9OwotCiAJCQlzZXJpYWxAMTIwMDAgewogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CkBAIC0xMTgsMTQgKzg0LDE0IEBACiAJCQl9OwogCiAJCQlldGhlcm5ldEA3MDAwMCB7Ci0JCQkJcGluY3RybC0wID0gPCZwbXhfZ2UwPjsKKwkJCQlwaW5jdHJsLTAgPSA8JmdlMF9yZ21paV9waW5zPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCQlwaHkgPSA8JnBoeTA+OwogCQkJCXBoeS1tb2RlID0gInJnbWlpLWlkIjsKIAkJCX07CiAJCQlldGhlcm5ldEA3NDAwMCB7Ci0JCQkJcGluY3RybC0wID0gPCZwbXhfZ2UxPjsKKwkJCQlwaW5jdHJsLTAgPSA8JmdlMV9yZ21paV9waW5zPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCQlwaHkgPSA8JnBoeTE+OwpAQCAtMTM0LDggKzEwMCw2IEBACiAKIAkJCXNwaTA6IHNwaUAxMDYwMCB7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJCXBpbmN0cmwtMCA9IDwmcG14X3NwaT47Ci0JCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCQkJCXNwaS1mbGFzaEAwIHsKIAkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0xNTIsNyArMTE2LDcgQEAKIAkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCXBpbmN0cmwtMCA9IDwmcG14X2tleXM+OworCQlwaW5jdHJsLTAgPSA8JmtleXNfcGluPjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCQlidXR0b25AMSB7CkBAIC0xNjIsMyArMTI2LDE4IEBACiAJCX07CiAJfTsKIH07CisKKyZwaW5jdHJsIHsKKwlwaW5jdHJsLTAgPSA8JnBoeV9pbnRfcGluPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJa2V5c19waW46IGtleXMtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcGh5X2ludF9waW46IHBoeS1pbnQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1ncC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtZ3AuZHRzCmluZGV4IDA0NzhjNTUuLmVhODY3MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1ncC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWdwLmR0cwpAQCAtMjMsNiArMjMsNyBAQAogICovCiAKIC9kdHMtdjEvOworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgogI2luY2x1ZGUgImFybWFkYS14cC1tdjc4NDYwLmR0c2kiCiAKIC8gewpAQCAtNDgsNiArNDksMTQgQEAKIAkJICAgICAgPDB4MDAwMDAwMDEgMHgwMDAwMDAwMCAweDAwMDAwMDAxIDB4MDAwMDAwMDA+OwogCX07CiAKKwljcHVzIHsKKwkJcG1fcGljIHsKKwkJCWN0cmwtZ3Bpb3MgPSA8JmdwaW8wIDE2IEdQSU9fQUNUSVZFX0xPVz4sCisJCQkJICAgICA8JmdwaW8wIDE3IEdQSU9fQUNUSVZFX0xPVz4sCisJCQkJICAgICA8JmdwaW8wIDE4IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKKwogCXNvYyB7CiAJCXJhbmdlcyA9IDxNQlVTX0lEKDB4ZjAsIDB4MDEpIDAgMCAweGYxMDAwMDAwIDB4MTAwMDAwCiAJCQkgIE1CVVNfSUQoMHgwMSwgMHgxZCkgMCAwIDB4ZmZmMDAwMDAgMHgxMDAwMDAKQEAgLTExNSw3ICsxMjQsMTUgQEAKIAkJCXNlcmlhbEAxMjMwMCB7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKLQorCQkJcGluY3RybCB7CisJCQkJcGluY3RybC0wID0gPCZwaWNfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQlwaWNfcGluczogcGljLXBpbnMtMCB7CisJCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxNiIsICJtcHAxNyIsCisJCQkJCQkgICAgICAgIm1wcDE4IjsKKwkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCQl9OworCQkJfTsKIAkJCXNhdGFAYTAwMDAgewogCQkJCW5yLXBvcnRzID0gPDI+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1sZW5vdm8taXg0LTMwMGQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWxlbm92by1peDQtMzAwZC5kdHMKaW5kZXggNDY5Y2Y3MS4uYTJlZjkzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWxlbm92by1peDQtMzAwZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWxlbm92by1peDQtMzAwZC5kdHMKQEAgLTIyLDcgKzIyLDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIGVhcmx5cHJpbnRrIjsKLQkJc3Rkb3V0LXBhdGggPSAiL3NvYy9pbnRlcm5hbC1yZWdzL3NlcmlhbEAxMjAwMCI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAltZW1vcnkgewpAQCAtNTEsMzcgKzUxLDYgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKLQkJCXBpbmN0cmwgewotCQkJCXBvd2Vyb2ZmX3BpbjogcG93ZXJvZmYtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI0IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJcG93ZXJfYnV0dG9uX3BpbjogcG93ZXItYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXJlc2V0X2J1dHRvbl9waW46IHJlc2V0LWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0JCQkJc2VsZWN0X2J1dHRvbl9waW46IHNlbGVjdC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQxIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2Nyb2xsX2J1dHRvbl9waW46IHNjcm9sbC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJaGRkX2xlZF9waW46IGhkZC1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI2IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJc2VyaWFsQDEyMDAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtOTcsMTIgKzY2LDE2IEBACiAJCQl9OwogCiAJCQlldGhlcm5ldEA3MDAwMCB7CisJCQkJcGluY3RybC0wID0gPCZnZTBfcmdtaWlfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQkJcGh5ID0gPCZwaHkwPjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paS1pZCI7CiAJCQl9OwogCiAJCQlldGhlcm5ldEA3NDAwMCB7CisJCQkJcGluY3RybC0wID0gPCZnZTFfcmdtaWlfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQkJcGh5ID0gPCZwaHkxPjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paS1pZCI7CkBAIC0xMjUsNiArOTgsMTEgQEAKIAkJCQkJcmVnID0gPDB4MmU+OwogCQkJCX07CiAKKwkJCQllZXByb21ANTAgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLDI0YzY0IjsKKwkJCQkJcmVnID0gPDB4NTA+OworCQkJCX07CisKIAkJCQlwY2Y4NTYzQDUxIHsKIAkJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CiAJCQkJCXJlZyA9IDwweDUxPjsKQEAgLTIyNiw3ICsyMDQsNyBAQAogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MD47Ci0JCQlyZWdpc3RlcnMtbnVtYmVyID0gPDI+OworCQkJcmVnaXN0ZXJzLW51bWJlciA9IDwxPjsKIAkJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJCX07CiAJfTsKQEAgLTI4MiwzICsyNjAsMzQgQEAKIAkJZ3Bpb3MgPSA8JmdwaW8wIDI0IEdQSU9fQUNUSVZFX0hJR0g+OwogCX07CiB9OworCismcGluY3RybCB7CisJcG93ZXJvZmZfcGluOiBwb3dlcm9mZi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwb3dlcl9idXR0b25fcGluOiBwb3dlci1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcmVzZXRfYnV0dG9uX3BpbjogcmVzZXQtYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKwlzZWxlY3RfYnV0dG9uX3Bpbjogc2VsZWN0LWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDEiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzY3JvbGxfYnV0dG9uX3Bpbjogc2Nyb2xsLWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwloZGRfbGVkX3BpbjogaGRkLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjYiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyMzAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjMwLmR0c2kKaW5kZXggMjU5MmUxYy4uMjgxY2NkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyMzAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODIzMC5kdHNpCkBAIC0xNjcsMTcgKzE2Nyw2IEBACiAJCX07CiAKIAkJaW50ZXJuYWwtcmVncyB7Ci0JCQlwaW5jdHJsIHsKLQkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY3ODIzMC1waW5jdHJsIjsKLQkJCQlyZWcgPSA8MHgxODAwMCAweDM4PjsKLQotCQkJCXNkaW9fcGluczogc2Rpby1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMwIiwgIm1wcDMxIiwgIm1wcDMyIiwKLQkJCQkJCSAgICAgICAibXBwMzMiLCAibXBwMzQiLCAibXBwMzUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNkMCI7Ci0JCQkJfTsKLQkJCX07Ci0KIAkJCWdwaW8wOiBncGlvQDE4MTAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tZ3BpbyI7CiAJCQkJcmVnID0gPDB4MTgxMDAgMHg0MD47CkBAIC0yMDIsMyArMTkxLDcgQEAKIAkJfTsKIAl9OwogfTsKKworJnBpbmN0cmwgeworCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjc4MjMwLXBpbmN0cmwiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjYwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODI2MC5kdHNpCmluZGV4IDQ4MGUyMzcuLmQ3YThkMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjYwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyNjAuZHRzaQpAQCAtMjUxLDE3ICsyNTEsNiBAQAogCQl9OwogCiAJCWludGVybmFsLXJlZ3MgewotCQkJcGluY3RybCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NzgyNjAtcGluY3RybCI7Ci0JCQkJcmVnID0gPDB4MTgwMDAgMHgzOD47Ci0KLQkJCQlzZGlvX3BpbnM6IHNkaW8tcGlucyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzMCIsICJtcHAzMSIsICJtcHAzMiIsCi0JCQkJCQkgICAgICAgIm1wcDMzIiwgIm1wcDM0IiwgIm1wcDM1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzZDAiOwotCQkJCX07Ci0JCQl9OwotCiAJCQlncGlvMDogZ3Bpb0AxODEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWdwaW8iOwogCQkJCXJlZyA9IDwweDE4MTAwIDB4NDA+OwpAQCAtMzA1LDMgKzI5NCw3IEBACiAJCX07CiAJfTsKIH07CisKKyZwaW5jdHJsIHsKKwljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY3ODI2MC1waW5jdHJsIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODQ2MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12Nzg0NjAuZHRzaQppbmRleCAyYzdiMWZlLi45YzQwYzEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODQ2MC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4NDYwLmR0c2kKQEAgLTI4OSwxNyArMjg5LDYgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKLQkJCXBpbmN0cmwgewotCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjc4NDYwLXBpbmN0cmwiOwotCQkJCXJlZyA9IDwweDE4MDAwIDB4Mzg+OwotCi0JCQkJc2Rpb19waW5zOiBzZGlvLXBpbnMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzAiLCAibXBwMzEiLCAibXBwMzIiLAotCQkJCQkJICAgICAgICJtcHAzMyIsICJtcHAzNCIsICJtcHAzNSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJZ3BpbzA6IGdwaW9AMTgxMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1ncGlvIjsKIAkJCQlyZWcgPSA8MHgxODEwMCAweDQwPjsKQEAgLTM0MywzICszMzIsNyBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12Nzg0NjAtcGluY3RybCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW5ldGdlYXItcm4yMTIwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1uZXRnZWFyLXJuMjEyMC5kdHMKaW5kZXggN2Q4ZjMyOC4uZDgxNDMwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW5ldGdlYXItcm4yMTIwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbmV0Z2Vhci1ybjIxMjAuZHRzCkBAIC01NSw4NiArNTUsMTAgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKLQkJCXBpbmN0cmwgewotCQkJCXBvd2Vyb2ZmOiBwb3dlcm9mZiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0MiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXBvd2VyX2J1dHRvbl9waW46IHBvd2VyLWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjciOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlyZXNldF9idXR0b25fcGluOiByZXNldC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQxIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTFfbGVkX3Bpbjogc2F0YTEtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzMSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGEyX2xlZF9waW46IHNhdGEyLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDAiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlzYXRhM19sZWRfcGluOiBzYXRhMy1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ0IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTRfbGVkX3Bpbjogc2F0YTQtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NyI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGExX3Bvd2VyX3Bpbjogc2F0YTEtcG93ZXItcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI0IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTJfcG93ZXJfcGluOiBzYXRhMi1wb3dlci1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlzYXRhM19wb3dlcl9waW46IHNhdGEzLXBvd2VyLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyNiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGE0X3Bvd2VyX3Bpbjogc2F0YTQtcG93ZXItcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI4IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTFfcHJlc19waW46IHNhdGExLXByZXMtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTJfcHJlc19waW46IHNhdGEyLXByZXMtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMzIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTNfcHJlc19waW46IHNhdGEzLXByZXMtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDM0IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTRfcHJlc19waW46IHNhdGE0LXByZXMtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDM1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJZXJyX2xlZF9waW46IGVyci1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OworCQkJLyogVHdvIHJlYXIgZVNBVEEgcG9ydHMgKi8KKwkJCXNhdGFAYTAwMDAgeworCQkJCW5yLXBvcnRzID0gPDI+OworCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAKIAkJCXNlcmlhbEAxMjAwMCB7CkBAIC0zMjgsMyArMjUyLDg1IEBACiAJCWdwaW9zID0gPCZncGlvMSAxMCBHUElPX0FDVElWRV9MT1c+OwogCX07CiB9OworCismcGluY3RybCB7CisJcG93ZXJvZmY6IHBvd2Vyb2ZmIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcG93ZXJfYnV0dG9uX3BpbjogcG93ZXItYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAyNyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXJlc2V0X2J1dHRvbl9waW46IHJlc2V0LWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDEiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMV9sZWRfcGluOiBzYXRhMS1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMxIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTJfbGVkX3Bpbjogc2F0YTItbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEzX2xlZF9waW46IHNhdGEzLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhNF9sZWRfcGluOiBzYXRhNC1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ3IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTFfcG93ZXJfcGluOiBzYXRhMS1wb3dlci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMl9wb3dlcl9waW46IHNhdGEyLXBvd2VyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAyNSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEzX3Bvd2VyX3Bpbjogc2F0YTMtcG93ZXItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDI2IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTRfcG93ZXJfcGluOiBzYXRhNC1wb3dlci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjgiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMV9wcmVzX3Bpbjogc2F0YTEtcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMl9wcmVzX3Bpbjogc2F0YTItcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhM19wcmVzX3Bpbjogc2F0YTMtcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhNF9wcmVzX3Bpbjogc2F0YTQtcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwllcnJfbGVkX3BpbjogZXJyLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW9wZW5ibG9ja3MtYXgzLTQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW9wZW5ibG9ja3MtYXgzLTQuZHRzCmluZGV4IDRlNWE1OWUuLjZmNmIwOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1vcGVuYmxvY2tzLWF4My00LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtb3BlbmJsb2Nrcy1heDMtNC5kdHMKQEAgLTc3LDEyICs3Nyw3IEBACiAJCQlzZXJpYWxAMTIxMDAgewogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07Ci0JCQlwaW5jdHJsIHsKLQkJCQlsZWRfcGluczogbGVkLXBpbnMtMCB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0OSIsICJtcHA1MSIsICJtcHA1MyI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQkJCX07CisKIAkJCWxlZHMgewogCQkJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMTg3LDMgKzE4MiwxMCBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJbGVkX3BpbnM6IGxlZC1waW5zLTAgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDkiLCAibXBwNTEiLCAibXBwNTMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLXN5bm9sb2d5LWRzNDE0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1zeW5vbG9neS1kczQxNC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5ZmRiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1zeW5vbG9neS1kczQxNC5kdHMKQEAgLTAsMCArMSwzMzAgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBmaWxlIGZvciBTeW5vbG9neSBEUzQxNAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgQXJuYXVkIEVCQUxBUkQgPGFybm9AbmF0aXNiYWQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTm90ZTogdGhpcyBEZXZpY2UgVHJlZSBhc3N1bWVzIHRoYXQgdGhlIGJvb3Rsb2FkZXIgaGFzIHJlbWFwcGVkIHRoZQorICogaW50ZXJuYWwgcmVnaXN0ZXJzIHRvIDB4ZjEwMDAwMDAgKGluc3RlYWQgb2YgdGhlIG9sZCAweGQwMDAwMDAwKS4KKyAqIFRoZSAweGYxMDAwMDAwIGlzIHRoZSBkZWZhdWx0IHVzZWQgYnkgdGhlIHJlY2VudCwgRFQtY2FwYWJsZSwgVS1Cb290CisgKiBib290bG9hZGVycyBwcm92aWRlZCBieSBNYXJ2ZWxsLiBJdCBpcyB1c2VkIGluIHJlY2VudCB2ZXJzaW9ucyBvZgorICogRFNNIHNvZnR3YXJlIHByb3ZpZGVkIGJ5IFN5bm9sb2d5LiBOb25ldGhlbGVzcywgc29tZSBlYXJsaWVyIGJvYXJkcworICogd2VyZSBkZWxpdmVyZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIHUtYm9vdCB0aGF0IGxlZnQgaW50ZXJuYWwKKyAqIHJlZ2lzdGVycyBtYXBwZWQgYXQgMHhkMDAwMDAwMC4gSWYgeW91IGhhdmUgc3VjaCBhIGRldmljZSB5b3Ugd2lsbAorICogbm90IGJlIGFibGUgdG8gZGlyZWN0bHkgYm9vdCBhIGtlcm5lbCBiYXNlZCBvbiB0aGlzIERldmljZSBUcmVlLiBJbgorICogdGhhdCBjYXNlLCB0aGUgcHJlZmVycmVkIHNvbHV0aW9uIGlzIHRvIHVwZGF0ZSB5b3VyIGJvb3Rsb2FkZXIgKGUuZy4KKyAqIGJ5IHVwZ3JhZGluZyB0byBsYXRlc3QgdmVyc2lvbiBvZiBEU00sIG9yIGJ1aWxkaW5nIGEgbmV3IG9uZSBhbmQKKyAqIGluc3RhbGxpbmcgaXQgZnJvbSB1LWJvb3QgcHJvbXB0KSBvciBhZGp1c3QgdGhlIERldml2ZSBUcmVlCisgKiAocy8weGYxMDAwMDAwLzB4ZDAwMDAwMDAvIGluICdyYW5nZXMnIGJlbG93KS4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSAiYXJtYWRhLXhwLW12NzgyMzAuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiU3lub2xvZ3kgRFM0MTQiOworCWNvbXBhdGlibGUgPSAic3lub2xvZ3ksZHM0MTQiLCAibWFydmVsbCxhcm1hZGF4cC1tdjc4MjMwIiwKKwkJICAgICAibWFydmVsbCxhcm1hZGF4cCIsICJtYXJ2ZWxsLGFybWFkYS0zNzAteHAiOworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDAgZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDAgMHgwMDAwMDAwMCAwIDB4NDAwMDAwMDA+OyAvKiAxR0IgKi8KKwl9OworCisJc29jIHsKKwkJcmFuZ2VzID0gPE1CVVNfSUQoMHhmMCwgMHgwMSkgMCAwIDB4ZjEwMDAwMDAgMHgxMDAwMDAKKwkJCSAgTUJVU19JRCgweDAxLCAweDFkKSAwIDAgMHhmZmYwMDAwMCAweDEwMDAwMD47CisKKwkJcGNpZS1jb250cm9sbGVyIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJLyoKKwkJCSAqIENvbm5lY3RlZCB0byBNYXJ2ZWxsIDg4U1g3MDQyIFNBVEEtSUkgY29udHJvbGxlcgorCQkJICogaGFuZGxpbmcgdGhlIGZvdXIgZGlza3MuCisJCQkgKi8KKwkJCXBjaWVAMSwwIHsKKwkJCQkvKiBQb3J0IDAsIExhbmUgMCAqLworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisKKwkJCS8qCisJCQkgKiBDb25uZWN0ZWQgdG8gRXRyb25UZWNoIEVKMTY4QSBYSENJIGNvbnRyb2xsZXIKKwkJCSAqIHByb3ZpZGluZyB0aGUgdHdvIHJlYXIgVVNCIDMuMCBwb3J0cy4KKwkJCSAqLworCQkJcGNpZUA1LDAgeworCQkJCS8qIFBvcnQgMSwgTGFuZSAwICovCisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKwkJfTsKKworCQlpbnRlcm5hbC1yZWdzIHsKKworCQkJLyogUlRDIGlzIHByb3ZpZGVkIGJ5IFNlaWtvIFMtMzUzOTBBIGJlbG93ICovCisJCQlydGNAMTAzMDAgeworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlzcGkwOiBzcGlAMTA2MDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJCXNwaS1mbGFzaEAwIHsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCQljb21wYXRpYmxlID0gIm1pY3JvbixuMjVxMDY0IjsKKwkJCQkJcmVnID0gPDA+OyAvKiBDaGlwIHNlbGVjdCAwICovCisJCQkJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDIwMDAwMDAwPjsKKworCQkJCQkvKgorCQkJCQkgKiBXYXJuaW5nIQorCQkJCQkgKgorCQkJCQkgKiBTeW5vbG9neSB1LWJvb3QgdXNlcyBpdHMgY29tcGlsZWQtaW4gZW52aXJvbm1lbnQKKwkJCQkJICogYW5kIGl0IHNlZW1zIFN5bm9sb2d5IGRpZCBub3QgY2FyZSB0byBjaGFuZ2UgdS1ib290CisJCQkJCSAqIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiBvcmRlciB0byBhbGxvdyBzYXZpbmcgYQorCQkJCQkgKiBtb2RpZmllZCBlbnZpcm9ubWVudCBhdCBhIHNlbnNpYmxlIGxvY2F0aW9uLiBTbywKKwkJCQkJICogaWYgeW91IGRvIGEgJ3NhdmVlbnYnIHVuZGVyIHUtYm9vdCwgeW91ciBtb2RpZmllZAorCQkJCQkgKiBlbnZpcm9ubWVudCB3aWxsIGJlIHNhdmVkIGF0IDFNQiBhZnRlciB0aGUgc3RhcnQKKwkJCQkJICogb2YgdGhlIGZsYXNoLCBpLmUuIGluIHRoZSBtaWRkbGUgb2YgdGhlIHVJbWFnZS4KKwkJCQkJICogRm9yIHRoYXQgcmVhc29uLCBpdCBpcyBzdHJvbmdseSBhZHZpc2VkIG5vdCB0bworCQkJCQkgKiBjaGFuZ2UgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQsIHVubGVzcyB5b3Uga25vdworCQkJCQkgKiB3aGF0IHlvdSBhcmUgZG9pbmcuCisJCQkJCSAqLworCQkJCQlwYXJ0aXRpb25AMDAwMDAwMDAgeyAvKiB1LWJvb3QgKi8KKwkJCQkJCWxhYmVsID0gIlJlZEJvb3QiOworCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDBkMDAwMD47IC8qIDgzMktCICovCisJCQkJCX07CisKKwkJCQkJcGFydGl0aW9uQDAwMGMwMDAwIHsgLyogdUltYWdlICovCisJCQkJCQlsYWJlbCA9ICJ6SW1hZ2UiOworCQkJCQkJcmVnID0gPDB4MDAwZDAwMDAgMHgwMDJkMDAwMD47IC8qIDI4ODBLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDNhMDAwMCB7IC8qIHVJbml0cmFtZnMgKi8KKwkJCQkJCWxhYmVsID0gInJkLmd6IjsKKwkJCQkJCXJlZyA9IDwweDAwM2EwMDAwIDB4MDA0MzAwMDA+OyAvKiA0MjUwS0IgKi8KKwkJCQkJfTsKKworCQkJCQlwYXJ0aXRpb25AMDA3ZDAwMDAgeyAvKiBNQUMgYWRkcmVzcyBhbmQgc2VyaWFsIG51bWJlciAqLworCQkJCQkJbGFiZWwgPSAidmVuZG9yIjsKKwkJCQkJCXJlZyA9IDwweDAwN2QwMDAwIDB4MDAwMTAwMDA+OyAvKiA2NEtCICovCisJCQkJCX07CisKKwkJCQkJcGFydGl0aW9uQDAwN2UwMDAwIHsKKwkJCQkJCWxhYmVsID0gIlJlZEJvb3QgY29uZmlnIjsKKwkJCQkJCXJlZyA9IDwweDAwN2UwMDAwIDB4MDAwMTAwMDA+OyAvKiA2NEtCICovCisJCQkJCX07CisKKwkJCQkJcGFydGl0aW9uQDAwN2YwMDAwIHsKKwkJCQkJCWxhYmVsID0gIkZJUyBkaXJlY3RvcnkiOworCQkJCQkJcmVnID0gPDB4MDA3ZjAwMDAgMHgwMDAxMDAwMD47IC8qIDY0S0IgKi8KKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJaTJjQDExMDAwIHsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCQlzMzUzOTBhOiBzMzUzOTBhQDMwIHsKKwkJCQkJIGNvbXBhdGlibGUgPSAic2lpLHMzNTM5MGEiOworCQkJCQkgcmVnID0gPDB4MzA+OworCQkJCX07CisJCQl9OworCisJCQkvKiBDb25uZWN0ZWQgdG8gYSBoZWFkZXIgb24gZGV2aWNlJ3MgUENCLiBUaGlzCisJCQkgKiBwcm92aWRlcyB0aGUgbWFpbiBjb25zb2xlIGZvciB0aGUgZGV2aWNlLgorCQkJICoKKwkJCSAqIFdhcm5pbmc6IHRoZSBkZXZpY2UgbWF5IG5vdCBib290IHdpdGggYSAzLjNWCisJCQkgKiBVU0Itc2VyaWFsIGNvbnZlcnRlciBjb25uZWN0ZWQgd2hlbiB0aGUgcG93ZXIKKwkJCSAqIGJ1dHRvbiBpcyBwcmVzc2VkLiBUaGUgY29udmVydGVyIG5lZWRzIHRvIGJlCisJCQkgKiBjb25uZWN0ZWQgYSBmZXcgc2Vjb25kcyBhZnRlciBwcmVzc2luZyB0aGUKKwkJCSAqIHBvd2VyIGJ1dHRvbi4gVGhpcyBpcyBwb3NzaWJseSBkdWUgdG8gVUFSVDBfVFhECisJCQkgKiBwaW4gYmVpbmcgc2FtcGxlZCBhdCByZXNldCAoYml0IDAgb2YgU0FSKS4KKwkJCSAqLworCQkJc2VyaWFsQDEyMDAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQkvKiBDb25uZWN0ZWQgdG8gYSBNaWNyb2NoaXAgUElDMTZGODgzIGZvciBwb3dlciBjb250cm9sICovCisJCQlzZXJpYWxAMTIxMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisKKwkJCXBvd2Vyb2ZmQDEyMTAwIHsKKwkJCQljb21wYXRpYmxlID0gInN5bm9sb2d5LHBvd2VyLW9mZiI7CisJCQkJcmVnID0gPDB4MTIxMDAgMHgxMDA+OworCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKKwkJCX07CisKKwkJCS8qIEZyb250IFVTQiAyLjAgcG9ydCAqLworCQkJdXNiQDUwMDAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQltZGlvIHsKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7IC8qIE1hcnZlbGwgODhFMTUxMiAqLworCQkJCQlyZWcgPSA8MD47CisJCQkJfTsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsgLyogTWFydmVsbCA4OEUxNTEyICovCisJCQkJCXJlZyA9IDwxPjsKKwkJCQl9OworCQkJfTsKKworCQkJZXRoZXJuZXRANzAwMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCQlwaW5jdHJsLTAgPSA8JmdlMF9yZ21paV9waW5zPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJCXBoeSA9IDwmcGh5MT47CisJCQkJcGh5LW1vZGUgPSAicmdtaWktaWQiOworCQkJfTsKKworCQkJZXRoZXJuZXRANzQwMDAgeworCQkJCXBpbmN0cmwtMCA9IDwmZ2UxX3JnbWlpX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJCXBoeSA9IDwmcGh5MD47CisJCQkJcGh5LW1vZGUgPSAicmdtaWktaWQiOworCQkJfTsKKwkJfTsKKwl9OworCisJcmVndWxhdG9ycyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcGluY3RybC0wID0gPCZzYXRhMV9wd3JfcGluICZzYXRhMl9wd3JfcGluCisJCQkgICAgICZzYXRhM19wd3JfcGluICZzYXRhNF9wd3JfcGluPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCQlzYXRhMV9yZWd1bGF0b3I6IHNhdGExLXJlZ3VsYXRvciB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MT47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJTQVRBMSBQb3dlciI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJc3RhcnR1cC1kZWxheS11cyA9IDwyMDAwMDAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCWdwaW8gPSA8JmdwaW8xIDEwIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCXNhdGEyX3JlZ3VsYXRvcjogc2F0YTItcmVndWxhdG9yIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwyPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIlNBVEEyIFBvd2VyIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlzdGFydHVwLWRlbGF5LXVzID0gPDQwMDAwMDA+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJZ3BpbyA9IDwmZ3BpbzEgMTIgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisKKwkJc2F0YTNfcmVndWxhdG9yOiBzYXRhMy1yZWd1bGF0b3IgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDM+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiU0FUQTMgUG93ZXIiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXN0YXJ0dXAtZGVsYXktdXMgPSA8NjAwMDAwMD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlncGlvID0gPCZncGlvMSAxMyBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlzYXRhNF9yZWd1bGF0b3I6IHNhdGE0LXJlZ3VsYXRvciB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8ND47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJTQVRBNCBQb3dlciI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJc3RhcnR1cC1kZWxheS11cyA9IDw4MDAwMDAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCWdwaW8gPSA8JmdwaW8xIDE0IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCX07Cit9OworCismcGluY3RybCB7CisJc2F0YTFfcHdyX3Bpbjogc2F0YTEtcHdyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEyX3B3cl9waW46IHNhdGEyLXB3ci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhM19wd3JfcGluOiBzYXRhMy1wd3ItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTRfcHdyX3Bpbjogc2F0YTQtcHdyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0NiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGExX3ByZXNfcGluOiBzYXRhMS1wcmVzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzNCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEyX3ByZXNfcGluOiBzYXRhMi1wcmVzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzNSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEzX3ByZXNfcGluOiBzYXRhMy1wcmVzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGE0X3ByZXNfcGluOiBzYXRhNC1wcmVzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXN5bm9faWRfYml0MF9waW46IHN5bm8taWQtYml0MC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjYiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzeW5vX2lkX2JpdDFfcGluOiBzeW5vLWlkLWJpdDEtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDI4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc3lub19pZF9iaXQyX3Bpbjogc3luby1pZC1iaXQyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAyOSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWZhbjFfYWxhcm1fcGluOiBmYW4xLWFsYXJtLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWZhbjJfYWxhcm1fcGluOiBmYW4yLWFsYXJtLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC5kdHNpCmluZGV4IGJmZjlmNmMuLjYyYzNiYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC5kdHNpCkBAIC0zNSwxMyArMzUsMjQgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKKwkJCXNkcmFtY0AxNDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLXhwLXNkcmFtLWNvbnRyb2xsZXIiOworCQkJCXJlZyA9IDwweDE0MDAgMHg1MDA+OworCQkJfTsKKwogCQkJTDI6IGwyLWNhY2hlIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXVyb3JhLXN5c3RlbS1jYWNoZSI7CiAJCQkJcmVnID0gPDB4MDgwMDAgMHgxMDAwPjsKIAkJCQljYWNoZS1pZC1wYXJ0ID0gPDB4MTAwPjsKKwkJCQljYWNoZS11bmlmaWVkOwogCQkJCXd0LW92ZXJyaWRlOwogCQkJfTsKIAorCQkJc3BpMDogc3BpQDEwNjAwIHsKKwkJCQlwaW5jdHJsLTAgPSA8JnNwaTBfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCX07CisKIAkJCWkyYzA6IGkyY0AxMTAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NzgyMzAtaTJjIiwgIm1hcnZlbGwsbXY2NHh4eC1pMmMiOwogCQkJCXJlZyA9IDwweDExMDAwIDB4MTAwPjsKQEAgLTUyLDggKzYzLDEwIEBACiAJCQkJcmVnID0gPDB4MTExMDAgMHgxMDA+OwogCQkJfTsKIAotCQkJc2VyaWFsQDEyMjAwIHsKKwkJCXVhcnQyOiBzZXJpYWxAMTIyMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQkJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXJlZyA9IDwweDEyMjAwIDB4MTAwPjsKIAkJCQlyZWctc2hpZnQgPSA8Mj47CiAJCQkJaW50ZXJydXB0cyA9IDw0Mz47CkBAIC02MSw4ICs3NCwxMSBAQAogCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKLQkJCXNlcmlhbEAxMjMwMCB7CisKKwkJCXVhcnQzOiBzZXJpYWxAMTIzMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQkJcGluY3RybC0wID0gPCZ1YXJ0M19waW5zPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXJlZyA9IDwweDEyMzAwIDB4MTAwPjsKIAkJCQlyZWctc2hpZnQgPSA8Mj47CiAJCQkJaW50ZXJydXB0cyA9IDw0ND47CkBAIC0xOTksMyArMjE1LDU0IEBACiAJCX07CiAJfTsKIH07CisKKyZwaW5jdHJsIHsKKwlnZTBfZ21paV9waW5zOiBnZTAtZ21paS1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0KKwkJICAgICAibXBwMCIsICAibXBwMSIsICAibXBwMiIsICAibXBwMyIsCisJCSAgICAgIm1wcDQiLCAgIm1wcDUiLCAgIm1wcDYiLCAgIm1wcDciLAorCQkgICAgICJtcHA4IiwgICJtcHA5IiwgICJtcHAxMCIsICJtcHAxMSIsCisJCSAgICAgIm1wcDEyIiwgIm1wcDEzIiwgIm1wcDE0IiwgIm1wcDE1IiwKKwkJICAgICAibXBwMTYiLCAibXBwMTciLCAibXBwMTgiLCAibXBwMTkiLAorCQkgICAgICJtcHAyMCIsICJtcHAyMSIsICJtcHAyMiIsICJtcHAyMyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UwIjsKKwl9OworCisJZ2UwX3JnbWlpX3BpbnM6IGdlMC1yZ21paS1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0KKwkJICAgICAibXBwMCIsICJtcHAxIiwgIm1wcDIiLCAibXBwMyIsCisJCSAgICAgIm1wcDQiLCAibXBwNSIsICJtcHA2IiwgIm1wcDciLAorCQkgICAgICJtcHA4IiwgIm1wcDkiLCAibXBwMTAiLCAibXBwMTEiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdlMCI7CisJfTsKKworCWdlMV9yZ21paV9waW5zOiBnZTEtcmdtaWktcGlucyB7CisJCW1hcnZlbGwscGlucyA9CisJCSAgICAgIm1wcDEyIiwgIm1wcDEzIiwgIm1wcDE0IiwgIm1wcDE1IiwKKwkJICAgICAibXBwMTYiLCAibXBwMTciLCAibXBwMTgiLCAibXBwMTkiLAorCQkgICAgICJtcHAyMCIsICJtcHAyMSIsICJtcHAyMiIsICJtcHAyMyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UxIjsKKwl9OworCisJc2Rpb19waW5zOiBzZGlvLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzAiLCAibXBwMzEiLCAibXBwMzIiLAorCQkJICAgICAgICJtcHAzMyIsICJtcHAzNCIsICJtcHAzNSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKKwl9OworCisJc3BpMF9waW5zOiBzcGkwLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzYiLCAibXBwMzciLAorCQkJICAgICAgICJtcHAzOCIsICJtcHAzOSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic3BpIjsKKwl9OworCisJdWFydDJfcGluczogdWFydDItcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MiIsICJtcHA0MyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDIiOworCX07CisKKwl1YXJ0M19waW5zOiB1YXJ0My1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ0IiwgIm1wcDQ1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJ1YXJ0MyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOTI2My5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjMuZHRzaQppbmRleCA1MTQxNmM3ZC4uNjUzZTQzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOTI2My5kdHNpCkBAIC02NzcsNiArNjc3LDE0IEBACiAJCQkJCX07CiAJCQkJfTsKIAorCQkJCWNhbiB7CisJCQkJCXBpbmN0cmxfY2FuX3J4X3R4OiBjYW5fcnhfdHggeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQSAxNCBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FCS8qIENBTlJYLCBjb25mbGljdHMgd2l0aCBJUlEwICovCisJCQkJCQkJIEFUOTFfUElPQSAxMyBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPjsJLyogQ0FOVFgsIGNvbmZsaWN0cyB3aXRoIFBDSzAgKi8KKwkJCQkJfTsKKwkJCQl9OworCiAJCQkJcGlvQTogZ3Bpb0BmZmZmZjIwMCB7CiAJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1ncGlvIjsKIAkJCQkJcmVnID0gPDB4ZmZmZmYyMDAgMHgyMDA+OwpAQCAtOTA1LDYgKzkxMywxNyBAQAogCQkJCWNsb2NrLW5hbWVzID0gInB3bV9jbGsiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OworCisJCQljYW46IGNhbkBmZmZhYzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2My1jYW4iOworCQkJCXJlZyA9IDwweGZmZmFjMDAwIDB4MzAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEyIElSUV9UWVBFX0xFVkVMX0hJR0ggMz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfY2FuX3J4X3R4PjsKKwkJCQljbG9ja3MgPSA8JmNhbl9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gImNhbl9jbGsiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OwogCQl9OwogCiAJCWZiMDogZmJAMHgwMDcwMDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXgyNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4MjUuZHRzaQppbmRleCBjMjU1NDIxLi4zYzVmYTMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXgyNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDI1LmR0c2kKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJhdDkxc2FtOXg1X3VzYXJ0My5kdHNpIgogI2luY2x1ZGUgImF0OTFzYW05eDVfbWFjYjAuZHRzaSIKICNpbmNsdWRlICJhdDkxc2FtOXg1X21hY2IxLmR0c2kiCisjaW5jbHVkZSAiYXQ5MXNhbTl4NV9jYW4uZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiQXRtZWwgQVQ5MVNBTTlYMjUgU29DIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDM1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXgzNS5kdHNpCmluZGV4IDhlYWM2NmMuLjQ5OWNkYzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDM1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4MzUuZHRzaQpAQCAtOCw2ICs4LDcgQEAKIAogI2luY2x1ZGUgImF0OTFzYW05eDUuZHRzaSIKICNpbmNsdWRlICJhdDkxc2FtOXg1X21hY2IwLmR0c2kiCisjaW5jbHVkZSAiYXQ5MXNhbTl4NV9jYW4uZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiQXRtZWwgQVQ5MVNBTTlYMzUgU29DIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDUuZHRzaQppbmRleCA3MjYyNzRmLi5iYmIzYmE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NS5kdHNpCkBAIC04NjAsNiArODYwLDkgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfTEVWRUxfSElHSCA3PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9kYmd1PjsKKwkJCQlkbWFzID0gPCZkbWExIDEgQVQ5MV9ETUFfQ0ZHX1BFUl9JRCg4KT4sCisJCQkJICAgICAgIDwmZG1hMSAxIChBVDkxX0RNQV9DRkdfUEVSX0lEKDkpIHwgQVQ5MV9ETUFfQ0ZHX0ZJRk9DRkdfQVNBUCk+OworCQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCQkJY2xvY2tzID0gPCZtY2s+OwogCQkJCWNsb2NrLW5hbWVzID0gInVzYXJ0IjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtODcxLDYgKzg3NCw5IEBACiAJCQkJaW50ZXJydXB0cyA9IDw1IElSUV9UWVBFX0xFVkVMX0hJR0ggNT47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNhcnQwPjsKKwkJCQlkbWFzID0gPCZkbWEwIDEgQVQ5MV9ETUFfQ0ZHX1BFUl9JRCgzKT4sCisJCQkJICAgICAgIDwmZG1hMCAxIChBVDkxX0RNQV9DRkdfUEVSX0lEKDQpIHwgQVQ5MV9ETUFfQ0ZHX0ZJRk9DRkdfQVNBUCk+OworCQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCQkJY2xvY2tzID0gPCZ1c2FydDBfY2xrPjsKIAkJCQljbG9jay1uYW1lcyA9ICJ1c2FydCI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTg4Miw2ICs4ODgsOSBAQAogCQkJCWludGVycnVwdHMgPSA8NiBJUlFfVFlQRV9MRVZFTF9ISUdIIDU+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYXJ0MT47CisJCQkJZG1hcyA9IDwmZG1hMCAxIEFUOTFfRE1BX0NGR19QRVJfSUQoNSk+LAorCQkJCSAgICAgICA8JmRtYTAgMSAoQVQ5MV9ETUFfQ0ZHX1BFUl9JRCg2KSB8IEFUOTFfRE1BX0NGR19GSUZPQ0ZHX0FTQVApPjsKKwkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQkJCWNsb2NrcyA9IDwmdXNhcnQxX2Nsaz47CiAJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC04OTMsNiArOTAyLDkgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDcgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDI+OworCQkJCWRtYXMgPSA8JmRtYTEgMSBBVDkxX0RNQV9DRkdfUEVSX0lEKDEyKT4sCisJCQkJICAgICAgIDwmZG1hMSAxIChBVDkxX0RNQV9DRkdfUEVSX0lEKDEzKSB8IEFUOTFfRE1BX0NGR19GSUZPQ0ZHX0FTQVApPjsKKwkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQkJCWNsb2NrcyA9IDwmdXNhcnQyX2Nsaz47CiAJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2Nhbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV9jYW4uZHRzaQppbmRleCBmNDRhYjc3Li44ZWIyZjljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2Nhbi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfY2FuLmR0c2kKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXQ5MXNhbTl4NV9tYWNiMC5kdHNpIC0gRGV2aWNlIFRyZWUgSW5jbHVkZSBmaWxlIGZvciBBVDkxU0FNOXg1IFNvQyB3aXRoIDEKKyAqIGF0OTFzYW05eDVfY2FuLmR0c2kgLSBEZXZpY2UgVHJlZSBJbmNsdWRlIGZpbGUgZm9yIEFUOTFTQU05eDUgU29DIHdpdGggMQogICogRXRoZXJuZXQgaW50ZXJmYWNlLgogICoKICAqIENvcHlyaWdodCAoQykgMjAxMyBCb3JpcyBCUkVaSUxMT04gPGIuYnJlemlsbG9uQG92ZXJraXouY29tPgpAQCAtMjAsMTAgKzIwLDUwIEBACiAJCQkJCQlyZWcgPSA8Mjk+OwogCQkJCQl9OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuMV9jbGs6IGNhbjFfY2xrIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjbG9jay1jZWxscyA9IDwwPjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwzMD47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkJCQkJY2FuMV9jbGs6IGNhbjFfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwzMD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWNhbjA6IGNhbkBmODAwMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNhbiI7CisJCQkJcmVnID0gPDB4ZjgwMDAwMDAgMHgzMDA+OworCQkJCWludGVycnVwdHMgPSA8MjkgSVJRX1RZUEVfTEVWRUxfSElHSCAzPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9jYW4wX3J4X3R4PjsKKwkJCQljbG9ja3MgPSA8JmNhbjBfY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJjYW5fY2xrIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJY2FuMTogY2FuQGY4MDA0MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtY2FuIjsKKwkJCQlyZWcgPSA8MHhmODAwNDAwMCAweDMwMD47CisJCQkJaW50ZXJydXB0cyA9IDwzMCBJUlFfVFlQRV9MRVZFTF9ISUdIIDM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2NhbjFfcnhfdHg+OworCQkJCWNsb2NrcyA9IDwmY2FuMV9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gImNhbl9jbGsiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlwaW5jdHJsQGZmZmZmNDAwIHsKKwkJCQljYW4wIHsKKwkJCQkJcGluY3RybF9jYW4wX3J4X3R4OiBjYW4wX3J4X3R4IHsKKwkJCQkJCWF0bWVsLHBpbnMgPQorCQkJCQkJCTxBVDkxX1BJT0EgOSBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FCS8qIENBTlJYMCwgY29uZmxpY3RzIHdpdGggRFJYRCAqLworCQkJCQkJCUFUOTFfUElPQSAxMCBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsJLyogQ0FOVFgwLCBjb25mbGljdHMgd2l0aCBEVFhEICovCisJCQkJCX07CisJCQkJfTsKKworCQkJCWNhbjEgeworCQkJCQlwaW5jdHJsX2NhbjFfcnhfdHg6IGNhbjFfcnhfdHggeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQSA2IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkUJLyogQ0FOUlgxLCBjb25mbGljdHMgd2l0aCBSWEQxICovCisJCQkJCQkJQVQ5MV9QSU9BIDUgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CS8qIENBTlRYMSwgY29uZmxpY3RzIHdpdGggVFhEMSAqLworCQkJCQl9OwogCQkJCX07CiAJCQl9OwogCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV91c2FydDMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfdXNhcnQzLmR0c2kKaW5kZXggMTQwMjE3YTUuLjQzYmI1YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfdXNhcnQzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV91c2FydDMuZHRzaQpAQCAtNTcsNiArNTcsOSBAQAogCQkJCWludGVycnVwdHMgPSA8OCBJUlFfVFlQRV9MRVZFTF9ISUdIIDU+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYXJ0Mz47CisJCQkJZG1hcyA9IDwmZG1hMSAxIEFUOTFfRE1BX0NGR19QRVJfSUQoMTQpPiwKKwkJCQkgICAgICAgPCZkbWExIDEgKEFUOTFfRE1BX0NGR19QRVJfSUQoMTUpIHwgQVQ5MV9ETUFfQ0ZHX0ZJRk9DRkdfQVNBUCk+OworCQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCQkJY2xvY2tzID0gPCZ1c2FydDNfY2xrPjsKIAkJCQljbG9jay1uYW1lcyA9ICJ1c2FydCI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0bGFzNi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXRsYXM2LmR0c2kKaW5kZXggYmIyMjg0Mi4uMjk1OTg2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXRsYXM2LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXRsYXM2LmR0c2kKQEAgLTEzMSw2ICsxMzEsNyBAQAogCQkJCXJlZyA9IDwweDkwMDIwMDAwIDB4MTAwMDA+OwogCQkJCWludGVycnVwdHMgPSA8MzE+OwogCQkJCWNsb2NrcyA9IDwmY2xrcyAzNT47CisJCQkJcmVzZXRzID0gPCZyc3RjIDY+OwogCQkJfTsKIAkJfTsKIApAQCAtMzEyLDYgKzMxMyw3IEBACiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJY2xvY2tzID0gPCZjbGtzIDE5PjsKKwkJCQlyZXNldHMgPSA8JnJzdGMgMjY+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC0zMjcsNiArMzI5LDcgQEAKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMjA+OworCQkJCXJlc2V0cyA9IDwmcnN0YyAyNz47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTUyMiw2ICs1MjUsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAic2RtbWM1IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCQkJCWkyc19tY2xrX3BpbnNfYTogaTJzX21jbGtAMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJzX21jbGsgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixwaW5zID0gImkyc21jbGtncnAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixmdW5jdGlvbiA9ICJpMnNfbWNsayI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkJCQlpMnNfZXh0X2Nsa19pbnB1dF9waW5zX2E6IGkyc19leHRfY2xrX2lucHV0QDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyc19leHRfY2xrX2lucHV0IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYscGlucyA9ICJpMnNfZXh0X2Nsa19pbnB1dGdycCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLGZ1bmN0aW9uID0gImkyc19leHRfY2xrX2lucHV0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMnNfcGluc19hOiBpMnNAMCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYscGlucyA9ICJpMnNncnAiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtLWN5Z251cy1jbG9jay5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtLWN5Z251cy1jbG9jay5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDgzODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY20tY3lnbnVzLWNsb2NrLmR0c2kKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqICBCU0QgTElDRU5TRQorICoKKyAqICBDb3B5cmlnaHQoYykgMjAxNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogIGFyZSBtZXQ6CisgKgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBCcm9hZGNvbSBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2Nsb2NrcyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJcmFuZ2VzOworCisJb3NjOiBvc2NpbGxhdG9yIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKKwl9OworCisJYXBiX2NsazogYXBiX2NsayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDAwPjsKKwl9OworCisJcGVyaXBoX2NsazogcGVyaXBoX2NsayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMDA+OworCX07CisKKwlzZGlvX2NsazogbGNwbGxfY2gyIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDIwMDAwMDAwMD47CisJfTsKKworCWF4aTgxX2NsazogYXhpODFfY2xrIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJfTsKKworCWtleXBhZF9jbGs6IGtleXBhZF9jbGsgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzE4MDY+OworCX07CisKKwlhZGNfY2xrOiBhZGNfY2xrIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDE1NjI1MDA+OworCX07CisKKwlwd21fY2xrOiBwd21fY2xrIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDA+OworCX07CisKKwlsY2RfY2xrOiBtaXBpcGxsX2NoMSB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtLWN5Z251cy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtLWN5Z251cy5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMjZmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY20tY3lnbnVzLmR0c2kKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiAgQlNEIExJQ0VOU0UKKyAqCisgKiAgQ29weXJpZ2h0KGMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICoKKyAqICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgICBkaXN0cmlidXRpb24uCisgKiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQnJvYWRjb20gQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorCisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJicmNtLGN5Z251cyI7CisJbW9kZWwgPSAiQnJvYWRjb20gQ3lnbnVzIFNvQyI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCQlyZWcgPSA8MHgwPjsKKwkJfTsKKwl9OworCisJL2luY2x1ZGUvICJiY20tY3lnbnVzLWNsb2NrLmR0c2kiCisKKwlhbWJhIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImFybSxhbWJhLWJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJcmFuZ2VzOworCisJCXdkdEAxODAwOTAwMCB7CisJCQkgY29tcGF0aWJsZSA9ICJhcm0sc3A4MDUiICwgImFybSxwcmltZWNlbGwiOworCQkJIHJlZyA9IDwweDE4MDA5MDAwIDB4MTAwMD47CisJCQkgaW50ZXJydXB0cyA9IDxHSUNfU1BJIDkxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJIGNsb2NrcyA9IDwmYXhpODFfY2xrPjsKKwkJCSBjbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisJfTsKKworCXVhcnQwOiBzZXJpYWxAMTgwMjAwMDAgeworCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQlyZWcgPSA8MHgxODAyMDAwMCAweDEwMD47CisJCXJlZy1zaGlmdCA9IDwyPjsKKwkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmYXhpODFfY2xrPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQxOiBzZXJpYWxAMTgwMjEwMDAgeworCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQlyZWcgPSA8MHgxODAyMTAwMCAweDEwMD47CisJCXJlZy1zaGlmdCA9IDwyPjsKKwkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmYXhpODFfY2xrPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQyOiBzZXJpYWxAMTgwMjIwMDAgeworCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQlyZWcgPSA8MHgxODAyMDAwMCAweDEwMD47CisJCXJlZy1zaGlmdCA9IDwyPjsKKwkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmYXhpODFfY2xrPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQzOiBzZXJpYWxAMTgwMjMwMDAgeworCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQlyZWcgPSA8MHgxODAyMzAwMCAweDEwMD47CisJCXJlZy1zaGlmdCA9IDwyPjsKKwkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmYXhpODFfY2xrPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTkwMjEwMDAgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktZ2ljIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlyZWcgPSA8MHgxOTAyMTAwMCAweDEwMDA+LAorCQkgICAgICA8MHgxOTAyMDEwMCAweDEwMD47CisJfTsKKworCUwyOiBsMi1jYWNoZSB7CisJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzEwLWNhY2hlIjsKKwkJcmVnID0gPDB4MTkwMjIwMDAgMHgxMDAwPjsKKwkJY2FjaGUtdW5pZmllZDsKKwkJY2FjaGUtbGV2ZWwgPSA8Mj47CisJfTsKKworCXRpbWVyQDE5MDIwMjAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdsb2JhbC10aW1lciI7CisJCXJlZyA9IDwweDE5MDIwMjAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDExIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnBlcmlwaF9jbGs+OworCX07CisKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY20yODM1LXJwaS1iLXBsdXMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi1wbHVzLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDc5NTE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi1wbHVzLmR0cwpAQCAtMCwwICsxLDMwIEBACisvZHRzLXYxLzsKKy9pbmNsdWRlLyAiYmNtMjgzNS1ycGkuZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJyYXNwYmVycnlwaSxtb2RlbC1iLXBsdXMiLCAiYnJjbSxiY20yODM1IjsKKwltb2RlbCA9ICJSYXNwYmVycnkgUGkgTW9kZWwgQisiOworCisJbGVkcyB7CisJCWFjdCB7CisJCQlncGlvcyA9IDwmZ3BpbyA0NyAwPjsKKwkJfTsKKworCQlwd3IgeworCQkJbGFiZWwgPSAiUFdSIjsKKwkJCWdwaW9zID0gPCZncGlvIDM1IDA+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKwl9OworfTsKKworJmdwaW8geworCXBpbmN0cmwtMCA9IDwmZ3Bpb291dCAmYWx0MCAmaTJzX2FsdDAgJmFsdDM+OworCisJLyogSTJTIGludGVyZmFjZSAqLworCWkyc19hbHQwOiBpMnNfYWx0MCB7CisJCWJyY20scGlucyA9IDwxOCAxOSAyMCAyMT47CisJCWJyY20sZnVuY3Rpb24gPSA8ND47IC8qIGFsdDAgKi8KKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTI4MzUtcnBpLWIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi5kdHMKaW5kZXggNThhMGQ2MC4uYmFmYTQ2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi5kdHMKQEAgLTEsNjMgKzEsMjMgQEAKIC9kdHMtdjEvOwotL2luY2x1ZGUvICJiY20yODM1LmR0c2kiCisvaW5jbHVkZS8gImJjbTI4MzUtcnBpLmR0c2kiCiAKIC8gewogCWNvbXBhdGlibGUgPSAicmFzcGJlcnJ5cGksbW9kZWwtYiIsICJicmNtLGJjbTI4MzUiOwogCW1vZGVsID0gIlJhc3BiZXJyeSBQaSBNb2RlbCBCIjsKIAotCW1lbW9yeSB7Ci0JCXJlZyA9IDwwIDB4MTAwMDAwMDA+OwotCX07Ci0KIAlsZWRzIHsKLQkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOwotCiAJCWFjdCB7Ci0JCQlsYWJlbCA9ICJBQ1QiOwogCQkJZ3Bpb3MgPSA8JmdwaW8gMTYgMT47Ci0JCQlkZWZhdWx0LXN0YXRlID0gImtlZXAiOwotCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CiAJCX07CiAJfTsKIH07CiAKICZncGlvIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmZ3Bpb291dCAmYWx0MCAmYWx0MiAmYWx0Mz47Ci0KLQlncGlvb3V0OiBncGlvb3V0IHsKLQkJYnJjbSxwaW5zID0gPDY+OwotCQlicmNtLGZ1bmN0aW9uID0gPDE+OyAvKiBHUElPIG91dCAqLwotCX07Ci0KLQlhbHQwOiBhbHQwIHsKLQkJYnJjbSxwaW5zID0gPDAgMSAyIDMgNCA1IDcgOCA5IDEwIDExIDE0IDE1IDQwIDQ1PjsKLQkJYnJjbSxmdW5jdGlvbiA9IDw0PjsgLyogYWx0MCAqLwotCX07Ci0KLQlhbHQzOiBhbHQzIHsKLQkJYnJjbSxwaW5zID0gPDQ4IDQ5IDUwIDUxIDUyIDUzPjsKLQkJYnJjbSxmdW5jdGlvbiA9IDw3PjsgLyogYWx0MyAqLwotCX07CisJcGluY3RybC0wID0gPCZncGlvb3V0ICZhbHQwICZpMnNfYWx0MiAmYWx0Mz47CiAKIAkvKiBJMlMgaW50ZXJmYWNlICovCi0JYWx0MjogYWx0MiB7CisJaTJzX2FsdDI6IGkyc19hbHQyIHsKIAkJYnJjbSxwaW5zID0gPDI4IDI5IDMwIDMxPjsKIAkJYnJjbSxmdW5jdGlvbiA9IDw2PjsgLyogYWx0MiAqLwogCX07CiB9OwotCi0maTJjMCB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwotfTsKLQotJmkyYzEgewotCXN0YXR1cyA9ICJva2F5IjsKLQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLX07Ci0KLSZzZGhjaSB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotCWJ1cy13aWR0aCA9IDw0PjsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY20yODM1LXJwaS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGkuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzA2NDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGkuZHRzaQpAQCAtMCwwICsxLDUxIEBACisvaW5jbHVkZS8gImJjbTI4MzUuZHRzaSIKKworLyB7CisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHgxMDAwMDAwMD47CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJYWN0IHsKKwkJCWxhYmVsID0gIkFDVCI7CisJCQlkZWZhdWx0LXN0YXRlID0gImtlZXAiOworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CisJCX07CisJfTsKK307CisKKyZncGlvIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJZ3Bpb291dDogZ3Bpb291dCB7CisJCWJyY20scGlucyA9IDw2PjsKKwkJYnJjbSxmdW5jdGlvbiA9IDwxPjsgLyogR1BJTyBvdXQgKi8KKwl9OworCisJYWx0MDogYWx0MCB7CisJCWJyY20scGlucyA9IDwwIDEgMiAzIDQgNSA3IDggOSAxMCAxMSAxNCAxNSA0MCA0NT47CisJCWJyY20sZnVuY3Rpb24gPSA8ND47IC8qIGFsdDAgKi8KKwl9OworCisJYWx0MzogYWx0MyB7CisJCWJyY20scGlucyA9IDw0OCA0OSA1MCA1MSA1MiA1Mz47CisJCWJyY20sZnVuY3Rpb24gPSA8Nz47IC8qIGFsdDMgKi8KKwl9OworfTsKKworJmkyYzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKK307CisKKyZpMmMxIHsKKwlzdGF0dXMgPSAib2theSI7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Cit9OworCismc2RoY2kgeworCXN0YXR1cyA9ICJva2F5IjsKKwlidXMtd2lkdGggPSA8ND47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwOC1idWZmYWxvLXd6ci0xNzUwZGhwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtYnVmZmFsby13enItMTc1MGRocC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjMGZhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtYnVmZmFsby13enItMTc1MGRocC5kdHMKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIEJyb2FkY29tIEJDTTQ3MFggLyBCQ001MzAxWCBBUk0gcGxhdGZvcm0gY29kZS4KKyAqIERUUyBmb3IgQnVmZmFsbyBXWlItMTc1MERIUAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAiYmNtNDcwOC5kdHNpIgorCisvIHsKKwljb21wYXRpYmxlID0gImJ1ZmZhbG8sd3pyLTE3NTBkaHAiLCAiYnJjbSxiY200NzA4IjsKKwltb2RlbCA9ICJCdWZmYWxvIFdaUi0xNzUwREhQIChCQ000NzA4KSI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDgwMDAwMDA+OworCX07CisKKwlncGlvLWtleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcG9sbC1pbnRlcnZhbCA9IDwyMDA+OworCisJCXJlc3RhcnQgeworCQkJbGFiZWwgPSAiUmVzZXQiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxMSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCWFvc3MgeworCQkJbGFiZWwgPSAiQU9TUyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDEyIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJLyogQ29tbWl0IG1vZGUgc2V0IGJ5IHN3aXRjaD8gKi8KKwkJbW9kZSB7CisJCQlsYWJlbCA9ICJNb2RlIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1NFVFVQPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDEzIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJLyogU3dpdGNoOiBBUCBtb2RlICovCisJCXN3X2FwIHsKKwkJCWxhYmVsID0gIkFQIjsKKwkJCWxpbnV4LGNvZGUgPSA8QlROXzA+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMTQgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQllamVjdCB7CisJCQlsYWJlbCA9ICJVU0IgZWplY3QiOworCQkJbGludXgsY29kZSA9IDxLRVlfRUpFQ1RDRD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxNSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwOC1uZXRnZWFyLXI2MjUwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtbmV0Z2Vhci1yNjI1MC5kdHMKaW5kZXggM2I1MjU5ZC4uNGVkN2RlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwOC1uZXRnZWFyLXI2MjUwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4LW5ldGdlYXItcjYyNTAuZHRzCkBAIC0zMiw0ICszMiw2MyBAQAogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCWxvZ28geworCQkJbGFiZWwgPSAiYmNtNTN4eDp3aGl0ZTpsb2dvIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDEgR1BJT19BQ1RJVkVfSElHSD47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vbiI7CisJCX07CisKKwkJcG93ZXIwIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Z3JlZW46cG93ZXIiOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMiBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb2ZmIjsKKwkJfTsKKworCQlwb3dlcjEgeworCQkJbGFiZWwgPSAiYmNtNTN4eDphbWJlcjpwb3dlciI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAzIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vbiI7CisJCX07CisKKwkJdXNiIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp1c2IiOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gOCBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb2ZmIjsKKwkJfTsKKworCQl3aXJlbGVzcyB7CisJCQlsYWJlbCA9ICJiY201M3h4OmJsdWU6d2lyZWxlc3MiOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMTEgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9mZiI7CisJCX07CisJfTsKKworCWdwaW8ta2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlwb2xsLWludGVydmFsID0gPDIwMD47CisKKwkJd3BzIHsKKwkJCWxhYmVsID0gIldQUyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDQgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQlyZmtpbGwgeworCQkJbGFiZWwgPSAiV2lGaSI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9SRktJTEw+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gNSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCXJlc3RhcnQgeworCQkJbGFiZWwgPSAiUmVzZXQiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA2IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY200NzA4LW5ldGdlYXItcjYzMDAtdjIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwOC1uZXRnZWFyLXI2MzAwLXYyLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmZjMmEwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtbmV0Z2Vhci1yNjMwMC12Mi5kdHMKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIEJyb2FkY29tIEJDTTQ3MFggLyBCQ001MzAxWCBBUk0gcGxhdGZvcm0gY29kZS4KKyAqIERUUyBmb3IgTmV0Z2VhciBSNjMwMCBWMgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAiYmNtNDcwOC5kdHNpIgorCisvIHsKKwljb21wYXRpYmxlID0gIm5ldGdlYXIscjYzMDB2MiIsICJicmNtLGJjbTQ3MDgiOworCW1vZGVsID0gIk5ldGdlYXIgUjYzMDAgVjIgKEJDTTQ3MDgpIjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwODAwMDAwMD47CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJbG9nbyB7CisJCQlsYWJlbCA9ICJiY201M3h4OndoaXRlOmxvZ28iOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKworCQlwb3dlcjAgeworCQkJbGFiZWwgPSAiYmNtNTN4eDpncmVlbjpwb3dlciI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAyIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vZmYiOworCQl9OworCisJCXBvd2VyMSB7CisJCQlsYWJlbCA9ICJiY201M3h4OmFtYmVyOnBvd2VyIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDMgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKworCQl1c2IgeworCQkJbGFiZWwgPSAiYmNtNTN4eDpibHVlOnVzYiI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA4IEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vZmYiOworCQl9OworCisJCXdpcmVsZXNzIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp3aXJlbGVzcyI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxMSBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb2ZmIjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBvbGwtaW50ZXJ2YWwgPSA8MjAwPjsKKworCQl3cHMgeworCQkJbGFiZWwgPSAiV1BTIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1dQU19CVVRUT04+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gNCBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCXJma2lsbCB7CisJCQlsYWJlbCA9ICJXaUZpIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1JGS0lMTD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA1IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJcmVzdGFydCB7CisJCQlsYWJlbCA9ICJSZXNldCI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9SRVNUQVJUPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDYgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgxLWFzdXMtcnQtbjE4dS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS1hc3VzLXJ0LW4xOHUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzYzNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS1hc3VzLXJ0LW4xOHUuZHRzCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBCcm9hZGNvbSBCQ000NzBYIC8gQkNNNTMwMVggQVJNIHBsYXRmb3JtIGNvZGUuCisgKiBEVFMgZm9yIEFzdXMgUlQtTjE4VQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAiYmNtNDcwODEuZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJhc3VzLHJ0LW4xOHUiLCAiYnJjbSxiY200NzA4MSIsICJicmNtLGJjbTQ3MDgiOworCW1vZGVsID0gIkFzdXMgUlQtTjE4VSAoQkNNNDcwODEpIjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwODAwMDAwMD47CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJcG93ZXIgeworCQkJbGFiZWwgPSAiYmNtNTN4eDpibHVlOnBvd2VyIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDAgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKworCQl1c2IyIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp1c2IyIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDMgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9mZiI7CisJCX07CisKKwkJd2FuIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp3YW4iOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gNiBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb24iOworCQl9OworCisJCWxhbiB7CisJCQlsYWJlbCA9ICJiY201M3h4OmJsdWU6bGFuIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDkgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKworCQl1c2IzIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp1c2IzIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDE0IEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vZmYiOworCQl9OworCX07CisKKwlncGlvLWtleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcG9sbC1pbnRlcnZhbCA9IDwyMDA+OworCisJCXJlc3RhcnQgeworCQkJbGFiZWwgPSAiUmVzZXQiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA3IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJd3BzIHsKKwkJCWxhYmVsID0gIldQUyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDExIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS1idWZmYWxvLXd6ci02MDBkaHAyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgxLWJ1ZmZhbG8td3pyLTYwMGRocDIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYjQxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS1idWZmYWxvLXd6ci02MDBkaHAyLmR0cwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQnJvYWRjb20gQkNNNDcwWCAvIEJDTTUzMDFYIEFSTSBwbGF0Zm9ybSBjb2RlLgorICogRFRTIGZvciBCdWZmYWxvIFdaUi02MDBESFAyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJhZmHFgiBNacWCZWNraSA8emFqZWM1QGdtYWlsLmNvbT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlICJiY200NzA4MS5kdHNpIgorCisvIHsKKwljb21wYXRpYmxlID0gImJ1ZmZhbG8sd3pyLTYwMGRocDIiLCAiYnJjbSxiY200NzA4MSIsICJicmNtLGJjbTQ3MDgiOworCW1vZGVsID0gIkJ1ZmZhbG8gV1pSLTYwMERIUDIgKEJDTTQ3MDgxKSI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDgwMDAwMDA+OworCX07CisKKwlncGlvLWtleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcG9sbC1pbnRlcnZhbCA9IDwyMDA+OworCisJCWFvc3MgeworCQkJbGFiZWwgPSAiQU9TUyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDkgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQlyZXN0YXJ0IHsKKwkJCWxhYmVsID0gIlJlc2V0IjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1JFU1RBUlQ+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMTEgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQkvKiBTd2l0Y2ggZGV2aWNlIG1vZGU/ICovCisJCW1vZGUgeworCQkJbGFiZWwgPSAiTW9kZSI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9TRVRVUD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxNCBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCWVqZWN0IHsKKwkJCWxhYmVsID0gIlVTQiBlamVjdCI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9FSkVDVENEPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDE1IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwODEuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzIwMDEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwODEuZHRzaQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQnJvYWRjb20gQkNNNDcwWCAvIEJDTTUzMDFYIEFSTSBwbGF0Zm9ybSBjb2RlLgorICogRFRTIGZvciBCQ000NzA4MSBTb0MuCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTQgUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiYmNtNTMwMXguZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJicmNtLGJjbTQ3MDgxIjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCQlyZWcgPSA8MHgwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTUzMDF4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9iY201MzAxeC5kdHNpCmluZGV4IDUzYzYyNGYuLjc4YWVjNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTUzMDF4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNTMwMXguZHRzaQpAQCAtOCw2ICs4LDggQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CiAjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKQEAgLTkyLDQgKzk0LDUzIEBACiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwMDAwPjsKIAkJfTsKIAl9OworCisJYXhpQDE4MDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJicmNtLGJ1cy1heGkiOworCQlyZWcgPSA8MHgxODAwMDAwMCAweDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMDAwMDAwMCAweDE4MDAwMDAwIDB4MDAxMDAwMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4MDAwZmZmZmYgMHhmZmZmPjsKKwkJaW50ZXJydXB0LW1hcCA9IAorCQkJLyogQ2hpcENvbW1vbiAqLworCQkJPDB4MDAwMDAwMDAgMCAmZ2ljIEdJQ19TUEkgODUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisKKwkJCS8qIFVTQiAyLjAgQ29udHJvbGxlciAqLworCQkJPDB4MDAwMjEwMDAgMCAmZ2ljIEdJQ19TUEkgNzkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisKKwkJCS8qIFVTQiAzLjAgQ29udHJvbGxlciAqLworCQkJPDB4MDAwMjMwMDAgMCAmZ2ljIEdJQ19TUEkgODAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisKKwkJCS8qIEV0aGVybmV0IENvbnRyb2xsZXIgMCAqLworCQkJPDB4MDAwMjQwMDAgMCAmZ2ljIEdJQ19TUEkgMTQ3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCisJCQkvKiBFdGhlcm5ldCBDb250cm9sbGVyIDEgKi8KKwkJCTwweDAwMDI1MDAwIDAgJmdpYyBHSUNfU1BJIDE0OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKworCQkJLyogRXRoZXJuZXQgQ29udHJvbGxlciAyICovCisJCQk8MHgwMDAyNjAwMCAwICZnaWMgR0lDX1NQSSAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisKKwkJCS8qIEV0aGVybmV0IENvbnRyb2xsZXIgMyAqLworCQkJPDB4MDAwMjcwMDAgMCAmZ2ljIEdJQ19TUEkgMTUwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCisJCQkvKiBOQU5EIENvbnRyb2xsZXIgKi8KKwkJCTwweDAwMDI4MDAwIDAgJmdpYyBHSUNfU1BJIDY0IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJPDB4MDAwMjgwMDAgMSAmZ2ljIEdJQ19TUEkgNjUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQk8MHgwMDAyODAwMCAyICZnaWMgR0lDX1NQSSA2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCTwweDAwMDI4MDAwIDMgJmdpYyBHSUNfU1BJIDY3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJPDB4MDAwMjgwMDAgNCAmZ2ljIEdJQ19TUEkgNjggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQk8MHgwMDAyODAwMCA1ICZnaWMgR0lDX1NQSSA2OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCTwweDAwMDI4MDAwIDYgJmdpYyBHSUNfU1BJIDcwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJPDB4MDAwMjgwMDAgNyAmZ2ljIEdJQ19TUEkgNzEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJY2hpcGNvbW1vbjogY2hpcGNvbW1vbkAwIHsKKwkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MTAwMD47CisKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtOTExMzYwX2VudHBobi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iY205MTEzNjBfZW50cGhuLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmVlOTUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtOTExMzYwX2VudHBobi5kdHMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBCU0QgTElDRU5TRQorICoKKyAqICBDb3B5cmlnaHQoYykgMjAxNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogIGFyZSBtZXQ6CisgKgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBCcm9hZGNvbSBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAiYmNtLWN5Z251cy5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJDeWdudXMgRW50ZXJwcmlzZSBQaG9uZSAoQkNNOTExMzYwX0VOVFBITikiOworCWNvbXBhdGlibGUgPSAiYnJjbSxiY20xMTM2MCIsICJicmNtLGN5Z251cyI7CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MzsKKwl9OworCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDM7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworCisJdWFydDM6IHNlcmlhbEAxODAyMzAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTkxMTM2MGsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtOTExMzYway5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1OGQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTkxMTM2MGsuZHRzCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQlNEIExJQ0VOU0UKKyAqCisgKiAgQ29weXJpZ2h0KGMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICoKKyAqICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgICBkaXN0cmlidXRpb24uCisgKiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQnJvYWRjb20gQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImJjbS1jeWdudXMuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQ3lnbnVzIFNWSyAoQkNNOTExMzYwSykiOworCWNvbXBhdGlibGUgPSAiYnJjbSxiY20xMTM2MCIsICJicmNtLGN5Z251cyI7CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MzsKKwl9OworCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDM7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworCisJdWFydDM6IHNlcmlhbEAxODAyMzAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTk1ODMwMGsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtOTU4MzAway5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFiYjM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTk1ODMwMGsuZHRzCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQlNEIExJQ0VOU0UKKyAqCisgKiAgQ29weXJpZ2h0KGMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICoKKyAqICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgICBkaXN0cmlidXRpb24uCisgKiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQnJvYWRjb20gQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImJjbS1jeWdudXMuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQ3lnbnVzIFNWSyAoQkNNOTU4MzAwSykiOworCWNvbXBhdGlibGUgPSAiYnJjbSxiY201ODMwMCIsICJicmNtLGN5Z251cyI7CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MzsKKwl9OworCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDM7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworCisJdWFydDM6IHNlcmlhbEAxODAyMzAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjItc29ueS1uc3otZ3M3LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjItc29ueS1uc3otZ3M3LmR0cwppbmRleCBjNzJiZmQ0Li44NmQ4NWQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yLXNvbnktbnN6LWdzNy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMi1zb255LW5zei1nczcuZHRzCkBAIC0yNiw0ICsyNiwyMCBAQAogCX07CiB9OwogCismYWhjaSB7IHN0YXR1cyA9ICJva2F5IjsgfTsKKworJmV0aDEgeyBzdGF0dXMgPSAib2theSI7IH07CisKKy8qIFVucG9wdWxhdGVkIFNBVEEgcGx1ZyBvbiBzb2xkZXIgc2lkZSAqLworJnNhdGEwIHsgc3RhdHVzID0gIm9rYXkiOyB9OworCismc2F0YV9waHkgeyBzdGF0dXMgPSAib2theSI7IH07CisKKy8qIFNhbXN1bmcgTThHMkZBIDhHQiBlTU1DICovCismc2RoY2kyIHsKKwlub24tcmVtb3ZhYmxlOworCWJ1cy13aWR0aCA9IDw4PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmdWFydDAgeyBzdGF0dXMgPSAib2theSI7IH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yLmR0c2kKaW5kZXggOWQ3YzgxMC4uMDE1YTA2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjIuZHRzaQpAQCAtNTMsNiArNTMsMzUgQEAKIAogCQlyYW5nZXMgPSA8MCAweGY3MDAwMDAwIDB4MTAwMDAwMD47CiAKKwkJc2RoY2kwOiBzZGhjaUBhYjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtcnZsLHB4YXYzLW1tYyI7CisJCQlyZWcgPSA8MHhhYjAwMDAgMHgyMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NESU8wWElOPiwgPCZjaGlwIENMS0lEX1NESU8wPjsKKwkJCWNsb2NrLW5hbWVzID0gImlvIiwgImNvcmUiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzZGhjaTE6IHNkaGNpQGFiMDgwMCB7CisJCQljb21wYXRpYmxlID0gIm1ydmwscHhhdjMtbW1jIjsKKwkJCXJlZyA9IDwweGFiMDgwMCAweDIwMD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0RJTzFYSU4+LCA8JmNoaXAgQ0xLSURfU0RJTzE+OworCQkJY2xvY2stbmFtZXMgPSAiaW8iLCAiY29yZSI7CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNkaGNpMjogc2RoY2lAYWIxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibXJ2bCxweGF2My1tbWMiOworCQkJcmVnID0gPDB4YWIxMDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9ORkNfRUNDPiwgPCZjaGlwIENMS0lEX05GQz47CisJCQljbG9jay1uYW1lcyA9ICJpbyIsICJjb3JlIjsKKwkJCXBpbmN0cmwtMCA9IDwmZW1tY19wbXV4PjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCWwyOiBsMi1jYWNoZS1jb250cm9sbGVyQGFjMDAwMCB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsdGF1cm9zMy1jYWNoZSIsICJhcm0scGwzMTAtY2FjaGUiOwogCQkJcmVnID0gPDB4YWMwMDAwIDB4MTAwMD47CkBAIC03OSwxMSArMTA4LDQ3IEBACiAJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfVFdEPjsKIAkJfTsKIAorCQlldGgxOiBldGhlcm5ldEBiOTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLHB4YTE2OC1ldGgiOworCQkJcmVnID0gPDB4YjkwMDAwIDB4MTAwMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0dFVEgxPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCS8qIHNldCBieSBib290bG9hZGVyICovCisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOworCQkJcGh5LWhhbmRsZSA9IDwmZXRocGh5MT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlldGhwaHkxOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKwogCQljcHUtY3RybEBkZDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbi1jcHUtY3RybCI7CiAJCQlyZWcgPSA8MHhkZDAwMDAgMHgxMDAwMD47CiAJCX07CiAKKwkJZXRoMDogZXRoZXJuZXRAZTUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxweGExNjgtZXRoIjsKKwkJCXJlZyA9IDwweGU1MDAwMCAweDEwMDAwPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9HRVRIMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCS8qIHNldCBieSBib290bG9hZGVyICovCisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOworCQkJcGh5LWhhbmRsZSA9IDwmZXRocGh5MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlldGhwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKwogCQlhcGJAZTgwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTI0NiwxMiArMzExLDU3IEBACiAJCQl9OwogCQl9OwogCisJCWFoY2k6IHNhdGFAZTkwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLWFoY2kiLCAiZ2VuZXJpYy1haGNpIjsKKwkJCXJlZyA9IDwweGU5MDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0FUQT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQlzYXRhMDogc2F0YS1wb3J0QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCQlwaHlzID0gPCZzYXRhX3BoeSAwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJc2F0YTE6IHNhdGEtcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQkJcGh5cyA9IDwmc2F0YV9waHkgMT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCX07CisKKwkJc2F0YV9waHk6IHBoeUBlOTAwYTAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjItc2F0YS1waHkiOworCQkJcmVnID0gPDB4ZTkwMGEwIDB4MjAwPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9TQVRBPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJc2F0YS1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKworCQkJc2F0YS1waHlAMSB7CisJCQkJcmVnID0gPDE+OworCQkJfTsKKwkJfTsKKwogCQljaGlwOiBjaGlwLWNvbnRyb2xAZWEwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLWNoaXAtY3RybCI7CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkjcmVzZXQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHhlYTAwMDAgMHg0MDA+OwogCQkJY2xvY2tzID0gPCZyZWZjbGs+OwogCQkJY2xvY2stbmFtZXMgPSAicmVmY2xrIjsKKworCQkJZW1tY19wbXV4OiBlbW1jLXBtdXggeworCQkJCWdyb3VwcyA9ICJHMjYiOworCQkJCWZ1bmN0aW9uID0gImVtbWMiOworCQkJfTsKIAkJfTsKIAogCQlhcGJAZmMwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJjZC1nb29nbGUtY2hyb21lY2FzdC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QtZ29vZ2xlLWNocm9tZWNhc3QuZHRzCmluZGV4IGJjZDgxZmYuLjMwMjcwYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJjZC1nb29nbGUtY2hyb21lY2FzdC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMmNkLWdvb2dsZS1jaHJvbWVjYXN0LmR0cwpAQCAtMTEsNiArMTEsNyBAQAogL2R0cy12MS87CiAKICNpbmNsdWRlICJiZXJsaW4yY2QuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KIAogLyB7CiAJbW9kZWwgPSAiR29vZ2xlIENocm9tZWNhc3QiOwpAQCAtMjQsNiArMjUsMzUgQEAKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKIAkJcmVnID0gPDB4MDAwMDAwMDAgMHgyMDAwMDAwMD47IC8qIDUxMiBNQiAqLwogCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCXdoaXRlIHsKKwkJCWxhYmVsID0gIndoaXRlIjsKKwkJCWdwaW9zID0gPCZwb3J0YyAxIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJfTsKKworCQlyZWQgeworCQkJbGFiZWwgPSAicmVkIjsKKwkJCWdwaW9zID0gPCZwb3J0YyAyIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJfTsKKwl9OworfTsKKworLyoKKyAqIEF6dXJlV2F2ZSBBVy1OSDM4NyAoTWFydmVsbCA4OFc4Nzg3KQorICogODAyLjExYi9nL24gKyBCbHVldG9vdGggMi4xCisgKi8KKyZzZGhjaTAgeworCW5vbi1yZW1vdmFibGU7CisJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJnVhcnQwIHsgc3RhdHVzID0gIm9rYXkiOyB9OworCismdXNiX3BoeTEgeyBzdGF0dXMgPSAib2theSI7IH07CisKKyZ1c2IxIHsgc3RhdHVzID0gIm9rYXkiOyB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMmNkLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QuZHRzaQppbmRleCBjYzFkZjY1Li4yMzBkZjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QuZHRzaQpAQCAtNDUsNiArNDUsMTUgQEAKIAogCQlyYW5nZXMgPSA8MCAweGY3MDAwMDAwIDB4MTAwMDAwMD47CiAKKwkJc2RoY2kwOiBzZGhjaUBhYjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtcnZsLHB4YXYzLW1tYyI7CisJCQlyZWcgPSA8MHhhYjAwMDAgMHgyMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NESU8wWElOPiwgPCZjaGlwIENMS0lEX1NESU8wPjsKKwkJCWNsb2NrLW5hbWVzID0gImlvIiwgImNvcmUiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQlsMjogbDItY2FjaGUtY29udHJvbGxlckBhYzAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOwogCQkJcmVnID0gPDB4YWMwMDAwIDB4MTAwMD47CkBAIC02Niw2ICs3NSw1OCBAQAogCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1RXRD47CiAJCX07CiAKKwkJdXNiX3BoeTA6IHVzYi1waHlAYjc0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yY2QtdXNiLXBoeSI7CisJCQlyZWcgPSA8MHhiNzQwMDAgMHgxMjg+OworCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCXJlc2V0cyA9IDwmY2hpcCAweDE3OCAyMz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYl9waHkxOiB1c2ItcGh5QGI3ODAwMCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMmNkLXVzYi1waHkiOworCQkJcmVnID0gPDB4Yjc4MDAwIDB4MTI4PjsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQlyZXNldHMgPSA8JmNoaXAgMHgxNzggMjQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlldGgxOiBldGhlcm5ldEBiOTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLHB4YTE2OC1ldGgiOworCQkJcmVnID0gPDB4YjkwMDAwIDB4MTAwMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0dFVEgxPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCS8qIHNldCBieSBib290bG9hZGVyICovCisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOworCQkJcGh5LWhhbmRsZSA9IDwmZXRocGh5MT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlldGhwaHkxOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlldGgwOiBldGhlcm5ldEBlNTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLHB4YTE2OC1ldGgiOworCQkJcmVnID0gPDB4ZTUwMDAwIDB4MTAwMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0dFVEgwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJLyogc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwIDAwIDAwIDAwIDAwIDAwXTsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CisJCQlwaHktaGFuZGxlID0gPCZldGhwaHkwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCWV0aHBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCiAJCWFwYkBlODAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMjMxLDYgKzI5Miw3IEBACiAJCWNoaXA6IGNoaXAtY29udHJvbEBlYTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJjZC1jaGlwLWN0cmwiOwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJI3Jlc2V0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4ZWEwMDAwIDB4NDAwPjsKIAkJCWNsb2NrcyA9IDwmcmVmY2xrPjsKIAkJCWNsb2NrLW5hbWVzID0gInJlZmNsayI7CkBAIC0yNDEsNiArMzAzLDI2IEBACiAJCQl9OwogCQl9OwogCisJCXVzYjA6IHVzYkBlZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJjaGlwaWRlYSx1c2IyIjsKKwkJCXJlZyA9IDwweGVkMDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfVVNCMD47CisJCQlwaHlzID0gPCZ1c2JfcGh5MD47CisJCQlwaHktbmFtZXMgPSAidXNiLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYjE6IHVzYkBlZTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJjaGlwaWRlYSx1c2IyIjsKKwkJCXJlZyA9IDwweGVlMDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfVVNCMT47CisJCQlwaHlzID0gPCZ1c2JfcGh5MT47CisJCQlwaHktbmFtZXMgPSAidXNiLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCWFwYkBmYzAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEtbWFydmVsbC1kbXAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEtbWFydmVsbC1kbXAuZHRzCmluZGV4IGVhMWY5OWIuLjI4ZTdlMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLW1hcnZlbGwtZG1wLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS1tYXJ2ZWxsLWRtcC5kdHMKQEAgLTcsNiArNyw4IEBACiAgKi8KIAogL2R0cy12MS87CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KICNpbmNsdWRlICJiZXJsaW4ycS5kdHNpIgogCiAvIHsKQEAgLTIxLDYgKzIzLDM5IEBACiAJY2hvb3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIGVhcmx5cHJpbnRrIjsKIAl9OworCisJcmVndWxhdG9ycyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlyZWdfdXNiMF92YnVzOiByZWd1bGF0b3JAMCB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ1c2IwX3ZidXMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCWdwaW8gPSA8JnBvcnRiIDggR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCX07CisKKwkJcmVnX3VzYjFfdmJ1czogcmVndWxhdG9yQDEgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiMV92YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZwb3J0YiAxMCBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJfTsKKworCQlyZWdfdXNiMl92YnVzOiByZWd1bGF0b3JAMiB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ1c2IyX3ZidXMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCWdwaW8gPSA8JnBvcnRiIDEyIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQl9OworCX07CiB9OwogCiAmc2RoY2kxIHsKQEAgLTQ2LDYgKzgxLDMyIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnVzYl9waHkwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiX3BoeTIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2IwIHsKKwl2YnVzLXN1cHBseSA9IDwmcmVnX3VzYjBfdmJ1cz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYjIgeworCXZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmZXRoMCB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJnNhdGEwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2F0YV9waHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEuZHRzaQppbmRleCA4OTFkNTZiLi4zNTI1M2M5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLmR0c2kKQEAgLTExNCw2ICsxMTQsNDAgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CiAJCX07CiAKKwkJdXNiX3BoeTI6IHBoeUBhMmY0MDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjItdXNiLXBoeSI7CisJCQlyZWcgPSA8MHhhMmY0MDAgMHgxMjg+OworCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCXJlc2V0cyA9IDwmY2hpcCAweDEwNCAxND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYjI6IHVzYkBhMzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJjaGlwaWRlYSx1c2IyIjsKKwkJCXJlZyA9IDwweGEzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA1MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9VU0IyPjsKKwkJCXBoeXMgPSA8JnVzYl9waHkyPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2ItcGh5IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdXNiX3BoeTA6IHBoeUBiNzQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjItdXNiLXBoeSI7CisJCQlyZWcgPSA8MHhiNzQwMDAgMHgxMjg+OworCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCXJlc2V0cyA9IDwmY2hpcCAweDEwNCAxMj47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYl9waHkxOiBwaHlAYjc4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLXVzYi1waHkiOworCQkJcmVnID0gPDB4Yjc4MDAwIDB4MTI4PjsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQlyZXNldHMgPSA8JmNoaXAgMHgxMDQgMTM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQlldGgwOiBldGhlcm5ldEBiOTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLHB4YTE2OC1ldGgiOwogCQkJcmVnID0gPDB4YjkwMDAwIDB4MTAwMDA+OwpAQCAtMTIzLDYgKzE1Nyw3IEBACiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJcGh5LWhhbmRsZSA9IDwmZXRocGh5MD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCkBAIC0yNTUsNyArMjkwLDYgQEAKIAkJCQlyZWcgPSA8MHgyYzE0IDB4MTQ+OwogCQkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9DRkc+OwogCQkJCWNsb2NrLW5hbWVzID0gInRpbWVyIjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAogCQkJdGltZXIyOiB0aW1lckAyYzI4IHsKQEAgLTM0OSw2ICszODMsNyBAQAogCQljaGlwOiBjaGlwLWNvbnRyb2xAZWEwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4ycS1jaGlwLWN0cmwiOwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJI3Jlc2V0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4ZWEwMDAwIDB4NDAwPiwgPDB4ZGQwMTcwIDB4MTA+OwogCQkJY2xvY2tzID0gPCZyZWZjbGs+OwogCQkJY2xvY2stbmFtZXMgPSAicmVmY2xrIjsKQEAgLTM2NCw2ICszOTksNjUgQEAKIAkJCX07CiAJCX07CiAKKwkJYWhjaTogc2F0YUBlOTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJxLWFoY2kiLCAiZ2VuZXJpYy1haGNpIjsKKwkJCXJlZyA9IDwweGU5MDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0FUQT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQlzYXRhMDogc2F0YS1wb3J0QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCQlwaHlzID0gPCZzYXRhX3BoeSAwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJc2F0YTE6IHNhdGEtcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQkJcGh5cyA9IDwmc2F0YV9waHkgMT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCX07CisKKwkJc2F0YV9waHk6IHBoeUBlOTAwYTAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJxLXNhdGEtcGh5IjsKKwkJCXJlZyA9IDwweGU5MDBhMCAweDIwMD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0FUQT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCXNhdGEtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisKKwkJCXNhdGEtcGh5QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisJCX07CisKKwkJdXNiMDogdXNiQGVkMDAwMCB7CisJCQljb21wYXRpYmxlID0gImNoaXBpZGVhLHVzYjIiOworCQkJcmVnID0gPDB4ZWQwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1VTQjA+OworCQkJcGh5cyA9IDwmdXNiX3BoeTA+OworCQkJcGh5LW5hbWVzID0gInVzYi1waHkiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2IxOiB1c2JAZWUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2hpcGlkZWEsdXNiMiI7CisJCQlyZWcgPSA8MHhlZTAwMDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfVVNCMT47CisJCQlwaHlzID0gPCZ1c2JfcGh5MT47CisJCQlwaHktbmFtZXMgPSAidXNiLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCWFwYkBmYzAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy1ldm0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy1ldm0uZHRzCmluZGV4IGM2Y2U2MjUuLjczNjA5MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTctZXZtLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3LWV2bS5kdHMKQEAgLTE3MSw2ICsxNzEsMTAxIEBACiAJCQkweGQwCShQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBncG1jX2JlMG5fY2xlICovCiAJCT47CiAJfTsKKworCWNwc3dfZGVmYXVsdDogY3Bzd19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCS8qIFNsYXZlIDEgKi8KKwkJCTB4MjUwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfdHhjLnJnbWlpMF90eGMgKi8KKwkJCTB4MjU0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfdHhjdGwucmdtaWkwX3R4Y3RsICovCisJCQkweDI1OCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3RkMy5yZ21paTBfdHhkMyAqLworCQkJMHgyNWMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIHJnbWlpMF90eGQyLnJnbWlpMF90eGQyICovCisJCQkweDI2MCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3R4ZDEucmdtaWkwX3R4ZDEgKi8KKwkJCTB4MjY0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfdHhkMC5yZ21paTBfdHhkMCAqLworCQkJMHgyNjggKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3J4Yy5yZ21paTBfcnhjICovCisJCQkweDI2YyAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfcnhjdGwucmdtaWkwX3J4Y3RsICovCisJCQkweDI3MCAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfcnhkMy5yZ21paTBfcnhkMyAqLworCQkJMHgyNzQgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3J4ZDIucmdtaWkwX3J4ZDIgKi8KKwkJCTB4Mjc4IChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHJnbWlpMF9yeGQxLnJnbWlpMF9yeGQxICovCisJCQkweDI3YyAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfcnhkMC5yZ21paTBfcnhkMCAqLworCisJCQkvKiBTbGF2ZSAyICovCisJCQkweDE5OCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDEyLnJnbWlpMV90eGMgKi8KKwkJCTB4MTljIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTMucmdtaWkxX3RjdGwgKi8KKwkJCTB4MWEwIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTQucmdtaWkxX3RkMyAqLworCQkJMHgxYTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QxNS5yZ21paTFfdGQyICovCisJCQkweDFhOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE2LnJnbWlpMV90ZDEgKi8KKwkJCTB4MWFjIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTcucmdtaWkxX3RkMCAqLworCQkJMHgxYjAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE4LnJnbWlpMV9yY2xrICovCisJCQkweDFiNCAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTkucmdtaWkxX3JjdGwgKi8KKwkJCTB4MWI4IChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QyMC5yZ21paTFfcmQzICovCisJCQkweDFiYyAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMjEucmdtaWkxX3JkMiAqLworCQkJMHgxYzAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDIyLnJnbWlpMV9yZDEgKi8KKwkJCTB4MWM0IChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QyMy5yZ21paTFfcmQwICovCisJCT47CisKKwl9OworCisJY3Bzd19zbGVlcDogY3Bzd19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBTbGF2ZSAxICovCisJCQkweDI1MCAoTVVYX01PREUxNSkKKwkJCTB4MjU0IChNVVhfTU9ERTE1KQorCQkJMHgyNTggKE1VWF9NT0RFMTUpCisJCQkweDI1YyAoTVVYX01PREUxNSkKKwkJCTB4MjYwIChNVVhfTU9ERTE1KQorCQkJMHgyNjQgKE1VWF9NT0RFMTUpCisJCQkweDI2OCAoTVVYX01PREUxNSkKKwkJCTB4MjZjIChNVVhfTU9ERTE1KQorCQkJMHgyNzAgKE1VWF9NT0RFMTUpCisJCQkweDI3NCAoTVVYX01PREUxNSkKKwkJCTB4Mjc4IChNVVhfTU9ERTE1KQorCQkJMHgyN2MgKE1VWF9NT0RFMTUpCisKKwkJCS8qIFNsYXZlIDIgKi8KKwkJCTB4MTk4IChNVVhfTU9ERTE1KQorCQkJMHgxOWMgKE1VWF9NT0RFMTUpCisJCQkweDFhMCAoTVVYX01PREUxNSkKKwkJCTB4MWE0IChNVVhfTU9ERTE1KQorCQkJMHgxYTggKE1VWF9NT0RFMTUpCisJCQkweDFhYyAoTVVYX01PREUxNSkKKwkJCTB4MWIwIChNVVhfTU9ERTE1KQorCQkJMHgxYjQgKE1VWF9NT0RFMTUpCisJCQkweDFiOCAoTVVYX01PREUxNSkKKwkJCTB4MWJjIChNVVhfTU9ERTE1KQorCQkJMHgxYzAgKE1VWF9NT0RFMTUpCisJCQkweDFjNCAoTVVYX01PREUxNSkKKwkJPjsKKwl9OworCisJZGF2aW5jaV9tZGlvX2RlZmF1bHQ6IGRhdmluY2lfbWRpb19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MjNjIChQSU5fT1VUUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogbWRpb19kLm1kaW9fZCAqLworCQkJMHgyNDAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1kaW9fY2xrLm1kaW9fY2xrICovCisJCT47CisJfTsKKworCWRhdmluY2lfbWRpb19zbGVlcDogZGF2aW5jaV9tZGlvX3NsZWVwIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MjNjIChNVVhfTU9ERTE1KQorCQkJMHgyNDAgKE1VWF9NT0RFMTUpCisJCT47CisJfTsKKworCWRjYW4xX3BpbnNfZGVmYXVsdDogZGNhbjFfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4M2QwICAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApIC8qIGRjYW4xX3R4ICovCisJCQkweDNkNCAgIChNVVhfTU9ERTE1KQkJLyogZGNhbjFfcngub2ZmICovCisJCQkweDQxOCAgIChQVUxMX0RJUyB8IE1VWF9NT0RFMSkgLyogd2FrZXVwMC5kY2FuMV9yeCAqLworCQk+OworCX07CisKKwlkY2FuMV9waW5zX3NsZWVwOiBkY2FuMV9waW5zX3NsZWVwIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4M2QwICAgKE1VWF9NT0RFMTUpCS8qIGRjYW4xX3R4Lm9mZiAqLworCQkJMHgzZDQgICAoTVVYX01PREUxNSkJLyogZGNhbjFfcngub2ZmICovCisJCQkweDQxOCAgIChNVVhfTU9ERTE1KQkvKiB3YWtldXAwLm9mZiAqLworCQk+OworCX07CiB9OwogCiAmaTJjMSB7CkBAIC0yMDEsNiArMjk2LDcgQEAKIAkJCQkJcmVndWxhdG9yLW5hbWUgPSAic21wczQ1IjsKIAkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8IDg1MDAwMD47CiAJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKIAkJCQl9OwogCkBAIC0yMDksNiArMzA1LDcgQEAKIAkJCQkJcmVndWxhdG9yLW5hbWUgPSAic21wczYiOwogCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjUwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCQkJCXJlZ3VsYXRvci1ib290LW9uOwogCQkJCX07CiAKQEAgLTIyNiw2ICszMjMsNyBAQAogCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzOCI7CiAJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPCA4NTAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKIAkJCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQkJfTsKIApAQCAtMjUyLDYgKzM1MCw3IEBACiAJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzIiOwogCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKIAkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCQkJCXJlZ3VsYXRvci1ib290LW9uOwogCQkJCX07CiAKQEAgLTI2OSw2ICszNjgsNyBAQAogCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJsZG85IjsKIAkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTA1MDAwMD47CiAJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKIAkJCQl9OwogCkBAIC01MjgsMyArNjI4LDM2IEBACiAJdGksbm8tcmVzZXQtb24taW5pdDsKIAl0aSxuby1pZGxlLW9uLWluaXQ7CiB9OworCismbWFjIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmNwc3dfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZjcHN3X3NsZWVwPjsKKwlkdWFsX2VtYWM7Cit9OworCismY3Bzd19lbWFjMCB7CisJcGh5X2lkID0gPCZkYXZpbmNpX21kaW8+LCA8Mj47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCWR1YWxfZW1hY19yZXNfdmxhbiA9IDwxPjsKK307CisKKyZjcHN3X2VtYWMxIHsKKwlwaHlfaWQgPSA8JmRhdmluY2lfbWRpbz4sIDwzPjsKKwlwaHktbW9kZSA9ICJyZ21paSI7CisJZHVhbF9lbWFjX3Jlc192bGFuID0gPDI+OworfTsKKworJmRhdmluY2lfbWRpbyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmRhdmluY2lfbWRpb19kZWZhdWx0PjsKKwlwaW5jdHJsLTEgPSA8JmRhdmluY2lfbWRpb19zbGVlcD47Cit9OworCismZGNhbjEgeworCXN0YXR1cyA9ICJvayI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmRjYW4xX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZkY2FuMV9waW5zX3NsZWVwPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kcmE3LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3LmR0c2kKaW5kZXggOWNjOTg0My4uNjNiZjk5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcuZHRzaQpAQCAtMzQsNiArMzQsMTQgQEAKIAkJc2VyaWFsMyA9ICZ1YXJ0NDsKIAkJc2VyaWFsNCA9ICZ1YXJ0NTsKIAkJc2VyaWFsNSA9ICZ1YXJ0NjsKKwkJc2VyaWFsNiA9ICZ1YXJ0NzsKKwkJc2VyaWFsNyA9ICZ1YXJ0ODsKKwkJc2VyaWFsOCA9ICZ1YXJ0OTsKKwkJc2VyaWFsOSA9ICZ1YXJ0MTA7CisJCWV0aGVybmV0MCA9ICZjcHN3X2VtYWMwOworCQlldGhlcm5ldDEgPSAmY3Bzd19lbWFjMTsKKwkJZF9jYW4wID0gJmRjYW4xOworCQlkX2NhbjEgPSAmZGNhbjI7CiAJfTsKIAogCXRpbWVyIHsKQEAgLTIwMSw2ICsyMDksMTEgQEAKIAkJCXRpLGh3bW9kcyA9ICJjb3VudGVyXzMyayI7CiAJCX07CiAKKwkJZHJhN19jdHJsX2NvcmU6IGN0cmxfY29yZUA0YTAwMjAwMCB7CisJCQljb21wYXRpYmxlID0gInN5c2NvbiI7CisJCQlyZWcgPSA8MHg0YTAwMjAwMCAweDZkMD47CisJCX07CisKIAkJZHJhN19jdHJsX2dlbmVyYWw6IHRpc3lzY29uQDRhMDAyZTAwIHsKIAkJCWNvbXBhdGlibGUgPSAic3lzY29uIjsKIAkJCXJlZyA9IDwweDRhMDAyZTAwIDB4N2M+OwpAQCAtMzM1LDYgKzM0OCw4IEBACiAJCQl0aSxod21vZHMgPSAidWFydDEiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQ4MDAwMDAwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZzZG1hIDQ5PiwgPCZzZG1hIDUwPjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDI6IHNlcmlhbEA0ODA2YzAwMCB7CkBAIC0zNDQsNiArMzU5LDggQEAKIAkJCXRpLGh3bW9kcyA9ICJ1YXJ0MiI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWRtYXMgPSA8JnNkbWEgNTE+LCA8JnNkbWEgNTI+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJfTsKIAogCQl1YXJ0Mzogc2VyaWFsQDQ4MDIwMDAwIHsKQEAgLTM1Myw2ICszNzAsOCBAQAogCQkJdGksaHdtb2RzID0gInVhcnQzIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJZG1hcyA9IDwmc2RtYSA1Mz4sIDwmc2RtYSA1ND47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQl9OwogCiAJCXVhcnQ0OiBzZXJpYWxANDgwNmUwMDAgewpAQCAtMzYyLDYgKzM4MSw4IEBACiAJCQl0aSxod21vZHMgPSAidWFydDQiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQ4MDAwMDAwPjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZzZG1hIDU1PiwgPCZzZG1hIDU2PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDU6IHNlcmlhbEA0ODA2NjAwMCB7CkBAIC0zNzEsNiArMzkyLDggQEAKIAkJCXRpLGh3bW9kcyA9ICJ1YXJ0NSI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWRtYXMgPSA8JnNkbWEgNjM+LCA8JnNkbWEgNjQ+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJfTsKIAogCQl1YXJ0Njogc2VyaWFsQDQ4MDY4MDAwIHsKQEAgLTM4MCw2ICs0MDMsOCBAQAogCQkJdGksaHdtb2RzID0gInVhcnQ2IjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJZG1hcyA9IDwmc2RtYSA3OT4sIDwmc2RtYSA4MD47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQl9OwogCiAJCXVhcnQ3OiBzZXJpYWxANDg0MjAwMDAgewpAQCAtNDIxLDcgKzQ0NiwxMSBAQAogCQltYWlsYm94MTogbWFpbGJveEA0YTBmNDAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NGEwZjQwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMTM1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMTM0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gxIjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8Mz47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDw4PjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC00MzAsNyArNDU5LDEyIEBACiAJCW1haWxib3gyOiBtYWlsYm94QDQ4ODNhMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODgzYTAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjM3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjM4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjM5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjQwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gyIjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwxMj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNDM5LDcgKzQ3MywxMiBAQAogCQltYWlsYm94MzogbWFpbGJveEA0ODgzYzAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4M2MwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI0MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI0MiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI0MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI0NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94MyI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTQ0OCw3ICs0ODcsMTIgQEAKIAkJbWFpbGJveDQ6IG1haWxib3hANDg4M2UwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC1tYWlsYm94IjsKIAkJCXJlZyA9IDwweDQ4ODNlMDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNDUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNDYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNDcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNDggSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveDQiOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC00NTcsNyArNTAxLDEyIEBACiAJCW1haWxib3g1OiBtYWlsYm94QDQ4ODQwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg0MDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjUwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjUxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjUyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3g1IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwxMj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNDY2LDcgKzUxNSwxMiBAQAogCQltYWlsYm94NjogbWFpbGJveEA0ODg0MjAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4NDIwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI1MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI1NCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI1NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI1NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94NiI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTQ3NSw3ICs1MjksMTIgQEAKIAkJbWFpbGJveDc6IG1haWxib3hANDg4NDQwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC1tYWlsYm94IjsKIAkJCXJlZyA9IDwweDQ4ODQ0MDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNTggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNTkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNjAgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveDciOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC00ODQsNyArNTQzLDEyIEBACiAJCW1haWxib3g4OiBtYWlsYm94QDQ4ODQ2MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg0NjAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjYxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjYyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjYzIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjY0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3g4IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwxMj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNDkzLDcgKzU1NywxMiBAQAogCQltYWlsYm94OTogbWFpbGJveEA0ODg1ZTAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4NWUwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI2OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94OSI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTUwMiw3ICs1NzEsMTIgQEAKIAkJbWFpbGJveDEwOiBtYWlsYm94QDQ4ODYwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg2MDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjY5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjcwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjcxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjcyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gxMCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTUxMSw3ICs1ODUsMTIgQEAKIAkJbWFpbGJveDExOiBtYWlsYm94QDQ4ODYyMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg2MjAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjczIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjc0IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjc1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjc2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gxMSI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTUyMCw3ICs1OTksMTIgQEAKIAkJbWFpbGJveDEyOiBtYWlsYm94QDQ4ODY0MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg2NDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjc3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjc4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjc5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjgwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gxMiI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTUyOSw3ICs2MTMsMTIgQEAKIAkJbWFpbGJveDEzOiBtYWlsYm94QDQ4ODAyMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODgwMjAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzc5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMzgwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMzgxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMzgyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gxMyI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTEwNzUsNiArMTE2NCwxNSBAQAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAorCQlydGNANDg4MzgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTMzNTItcnRjIjsKKwkJCXJlZyA9IDwweDQ4ODM4MDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyMTcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQl0aSxod21vZHMgPSAicnRjc3MiOworCQkJY2xvY2tzID0gPCZzeXNfMzJrX2NrPjsKKwkJfTsKKwogCQlvbWFwX2NvbnRyb2xfdXNiMnBoeTE6IGNvbnRyb2wtcGh5QDRhMDAyMzAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksY29udHJvbC1waHktdXNiMiI7CiAJCQlyZWcgPSA8MHg0YTAwMjMwMCAweDQ+OwpAQCAtMTE0MSw3ICsxMjM5LDcgQEAKIAkJCX07CiAJCX07CiAKLQkJb21hcF9kd2MzXzFANDg4ODAwMDAgeworCQlvbWFwX2R3YzNfMTogb21hcF9kd2MzXzFANDg4ODAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxkd2MzIjsKIAkJCXRpLGh3bW9kcyA9ICJ1c2Jfb3RnX3NzMSI7CiAJCQlyZWcgPSA8MHg0ODg4MDAwMCAweDEwMDAwPjsKQEAgLTExNjIsNyArMTI2MCw3IEBACiAJCQl9OwogCQl9OwogCi0JCW9tYXBfZHdjM18yQDQ4OGMwMDAwIHsKKwkJb21hcF9kd2MzXzI6IG9tYXBfZHdjM18yQDQ4OGMwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksZHdjMyI7CiAJCQl0aSxod21vZHMgPSAidXNiX290Z19zczIiOwogCQkJcmVnID0gPDB4NDg4YzAwMDAgMHgxMDAwMD47CkBAIC0xMTg0LDcgKzEyODIsNyBAQAogCQl9OwogCiAJCS8qIElSUSBmb3IgRFdDM18zIGFuZCBEV0MzXzQgbmVlZCBJUlEgY3Jvc3NiYXIgKi8KLQkJb21hcF9kd2MzXzNANDg5MDAwMDAgeworCQlvbWFwX2R3YzNfMzogb21hcF9kd2MzXzNANDg5MDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxkd2MzIjsKIAkJCXRpLGh3bW9kcyA9ICJ1c2Jfb3RnX3NzMyI7CiAJCQlyZWcgPSA8MHg0ODkwMDAwMCAweDEwMDAwPjsKQEAgLTEyMDQsMjYgKzEzMDIsNiBAQAogCQkJfTsKIAkJfTsKIAotCQlvbWFwX2R3YzNfNEA0ODk0MDAwMCB7Ci0JCQljb21wYXRpYmxlID0gInRpLGR3YzMiOwotCQkJdGksaHdtb2RzID0gInVzYl9vdGdfc3M0IjsKLQkJCXJlZyA9IDwweDQ4OTQwMDAwIDB4MTAwMDA+OwotCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM0NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQl1dG1pLW1vZGUgPSA8Mj47Ci0JCQlyYW5nZXM7Ci0JCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJdXNiNDogdXNiQDQ4OTUwMDAwIHsKLQkJCQljb21wYXRpYmxlID0gInNucHMsZHdjMyI7Ci0JCQkJcmVnID0gPDB4NDg5NTAwMDAgMHgxNzAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM0NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQl0eC1maWZvLXJlc2l6ZTsKLQkJCQltYXhpbXVtLXNwZWVkID0gImhpZ2gtc3BlZWQiOwotCQkJCWRyX21vZGUgPSAib3RnIjsKLQkJCX07Ci0JCX07Ci0KIAkJZWxtOiBlbG1ANDgwNzgwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTMzNTItZWxtIjsKIAkJCXJlZyA9IDwweDQ4MDc4MDAwIDB4ZmMwPjsgICAgICAvKiBkZXZpY2UgSU8gcmVnaXN0ZXJzICovCkBAIC0xMjY1LDYgKzEzNDMsODQgQEAKIAkJCXRpLGlycXMtc2tpcCA9IDwxMCAxMzMgMTM5IDE0MD47CiAJCQl0aSxpcnFzLXNhZmUtbWFwID0gPDA+OwogCQl9OworCisJCW1hYzogZXRoZXJuZXRANGExMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxjcHN3IjsKKwkJCXRpLGh3bW9kcyA9ICJnbWFjIjsKKwkJCWNsb2NrcyA9IDwmZHBsbF9nbWFjX2NrPiwgPCZnbWFjX2dtaWlfcmVmX2Nsa19kaXY+OworCQkJY2xvY2stbmFtZXMgPSAiZmNrIiwgImNwdHMiOworCQkJY3BkbWFfY2hhbm5lbHMgPSA8OD47CisJCQlhbGVfZW50cmllcyA9IDwxMDI0PjsKKwkJCWJkX3JhbV9zaXplID0gPDB4MjAwMD47CisJCQlub19iZF9yYW0gPSA8MD47CisJCQlyeF9kZXNjcyA9IDw2ND47CisJCQltYWNfY29udHJvbCA9IDwweDIwPjsKKwkJCXNsYXZlcyA9IDwyPjsKKwkJCWFjdGl2ZV9zbGF2ZSA9IDwwPjsKKwkJCWNwdHNfY2xvY2tfbXVsdCA9IDwweDgwMDAwMDAwPjsKKwkJCWNwdHNfY2xvY2tfc2hpZnQgPSA8Mjk+OworCQkJcmVnID0gPDB4NDg0ODQwMDAgMHgxMDAwCisJCQkgICAgICAgMHg0ODQ4NTIwMCAweDJFMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCS8qCisJCQkgKiByeF90aHJlc2hfcGVuZAorCQkJICogcnhfcGVuZAorCQkJICogdHhfcGVuZAorCQkJICogbWlzY19wZW5kCisJCQkgKi8KKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzMzQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAzMzUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAzMzYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAzMzcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlyYW5nZXM7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlkYXZpbmNpX21kaW86IG1kaW9ANDg0ODUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAidGksZGF2aW5jaV9tZGlvIjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQl0aSxod21vZHMgPSAiZGF2aW5jaV9tZGlvIjsKKwkJCQlidXNfZnJlcSA9IDwxMDAwMDAwPjsKKwkJCQlyZWcgPSA8MHg0ODQ4NTAwMCAweDEwMD47CisJCQl9OworCisJCQljcHN3X2VtYWMwOiBzbGF2ZUA0ODQ4MDIwMCB7CisJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJfTsKKworCQkJY3Bzd19lbWFjMTogc2xhdmVANDg0ODAzMDAgeworCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQltYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCX07CisKKwkJCXBoeV9zZWw6IGNwc3ctcGh5LXNlbEA0YTAwMjU1NCB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxkcmE3eHgtY3Bzdy1waHktc2VsIjsKKwkJCQlyZWc9IDwweDRhMDAyNTU0IDB4ND47CisJCQkJcmVnLW5hbWVzID0gImdtaWktc2VsIjsKKwkJCX07CisJCX07CisKKwkJZGNhbjE6IGNhbkA0ODFjYzAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGRyYTctZF9jYW4iOworCQkJdGksaHdtb2RzID0gImRjYW4xIjsKKwkJCXJlZyA9IDwweDRhZTNjMDAwIDB4MjAwMD47CisJCQlzeXNjb24tcmFtaW5pdCA9IDwmZHJhN19jdHJsX2NvcmUgMHg1NTggMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjIyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZkY2FuMV9zeXNfY2xrX211eD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWRjYW4yOiBjYW5ANDgxZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxkcmE3LWRfY2FuIjsKKwkJCXRpLGh3bW9kcyA9ICJkY2FuMiI7CisJCQlyZWcgPSA8MHg0ODQ4MDAwMCAweDIwMDA+OworCQkJc3lzY29uLXJhbWluaXQgPSA8JmRyYTdfY3RybF9jb3JlIDB4NTU4IDE+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmc3lzX2Nsa2luMT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OwogCX07CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kcmE3Mi1ldm0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNzItZXZtLmR0cwppbmRleCA0MTA3NDI4Li5hZmM3NGZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9kcmE3Mi1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcyLWV2bS5kdHMKQEAgLTE3LDYgKzE3LDEzIEBACiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CiAJCXJlZyA9IDwweDgwMDAwMDAwIDB4NDAwMDAwMDA+OyAvKiAxMDI0IE1CICovCiAJfTsKKworCWV2bV8zdjM6IGZpeGVkcmVndWxhdG9yLWV2bV8zdjMgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImV2bV8zdjMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJfTsKIH07CiAKICZkcmE3X3BteF9jb3JlIHsKQEAgLTI2LDYgKzMzLDk0IEBACiAJCQkweDQwNCAoUElOX0lOUFVUIHwgTVVYX01PREUwKSAvKiBpMmMxX3NjbC5pMmMxX3NjbCAqLwogCQk+OwogCX07CisKKwluYW5kX2RlZmF1bHQ6IG5hbmRfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDAJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQwICovCisJCQkweDQJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQxICovCisJCQkweDgJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQyICovCisJCQkweGMJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQzICovCisJCQkweDEwCShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkNCAqLworCQkJMHgxNAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDUgKi8KKwkJCTB4MTgJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQ2ICovCisJCQkweDFjCShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkNyAqLworCQkJMHgyMAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDggKi8KKwkJCTB4MjQJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQ5ICovCisJCQkweDI4CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkMTAgKi8KKwkJCTB4MmMJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQxMSAqLworCQkJMHgzMAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDEyICovCisJCQkweDM0CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkMTMgKi8KKwkJCTB4MzgJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQxNCAqLworCQkJMHgzYwkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDE1ICovCisJCQkweGI0CShQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAvKiBncG1jX2NzMCAqLworCQkJMHhjNAkoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZHZuX2FsZSAqLworCQkJMHhjYwkoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgLyogZ3BtY193ZW4gKi8KKwkJCTB4YzgJKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApIC8qIGdwbWNfb2VuX3JlbiAqLworCQkJMHhkMAkoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgLyogZ3BtY19iZW4wICovCisJCQkweGQ4CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX3dhaXQwICovCisJCT47CisJfTsKKworCXVzYjFfcGluczogcGlubXV4X3VzYjFfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDI4MCAoUElOX0lOUFVUX1NMRVcgfCBNVVhfTU9ERTApIC8qIHVzYjFfZHJ2dmJ1cyAqLworCQk+OworCX07CisKKwl1c2IyX3BpbnM6IHBpbm11eF91c2IyX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgyODQgKFBJTl9JTlBVVF9TTEVXIHwgTVVYX01PREUwKSAvKiB1c2IyX2RydnZidXMgKi8KKwkJPjsKKwl9OworCisJdHBzNjU5MTdfcGluc19kZWZhdWx0OiB0cHM2NTkxN19waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg0MjQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIHdha2V1cDMuc3lzX25pcnExICovCisJCT47CisJfTsKKworCW1tYzFfcGluc19kZWZhdWx0OiBtbWMxX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDM2YyAoUElOX0lOUFVUIHwgTVVYX01PREUxNCkJLyogbW1jMXNkY2QuZ3BpbzIxOSAqLworCQkJMHgzNTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfY2xrLmNsayAqLworCQkJMHgzNTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfY21kLmNtZCAqLworCQkJMHgzNWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfZGF0MC5kYXQwICovCisJCQkweDM2MCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogbW1jMV9kYXQxLmRhdDEgKi8KKwkJCTB4MzY0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2RhdDIuZGF0MiAqLworCQkJMHgzNjggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfZGF0My5kYXQzICovCisJCT47CisJfTsKKworCW1tYzJfcGluc19kZWZhdWx0OiBtbWMyX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDljIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyMy5tbWMyX2NsayAqLworCQkJMHhiMCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19jczEubW1jMl9jbWQgKi8KKwkJCTB4YTAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTI0Lm1tYzJfZGF0MCAqLworCQkJMHhhNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjUubW1jMl9kYXQxICovCisJCQkweGE4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyNi5tbWMyX2RhdDIgKi8KKwkJCTB4YWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTI3Lm1tYzJfZGF0MyAqLworCQkJMHg4YyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMTkubW1jMl9kYXQ0ICovCisJCQkweDkwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyMC5tbWMyX2RhdDUgKi8KKwkJCTB4OTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTIxLm1tYzJfZGF0NiAqLworCQkJMHg5OCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjIubW1jMl9kYXQ3ICovCisJCT47CisJfTsKKworCWRjYW4xX3BpbnNfZGVmYXVsdDogZGNhbjFfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4M2QwICAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApIC8qIGRjYW4xX3R4ICovCisJCQkweDNkNCAgIChNVVhfTU9ERTE1KQkJLyogZGNhbjFfcngub2ZmICovCisJCQkweDQxOCAgIChQVUxMX0RJUyB8IE1VWF9NT0RFMSkgLyogd2FrZXVwMC5kY2FuMV9yeCAqLworCQk+OworCX07CisKKwlkY2FuMV9waW5zX3NsZWVwOiBkY2FuMV9waW5zX3NsZWVwIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4M2QwICAgKE1VWF9NT0RFMTUpCS8qIGRjYW4xX3R4Lm9mZiAqLworCQkJMHgzZDQgICAoTVVYX01PREUxNSkJLyogZGNhbjFfcngub2ZmICovCisJCQkweDQxOCAgIChNVVhfTU9ERTE1KQkvKiB3YWtldXAwLm9mZiAqLworCQk+OworCX07CiB9OwogCiAmaTJjMSB7CkBAIC0zOCw2ICsxMzMsOSBAQAogCQljb21wYXRpYmxlID0gInRpLHRwczY1OTE3IjsKIAkJcmVnID0gPDB4NTg+OwogCisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdHBzNjU5MTdfcGluc19kZWZhdWx0PjsKKwogCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMiBJUlFfVFlQRV9OT05FPjsgIC8qIElSUV9TWVNfMU4gKi8KIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0xMzYsOSArMjM0LDIzMCBAQAogCQkJCX07CiAJCQl9OwogCQl9OworCisJCXRwczY1OTE3X3Bvd2VyX2J1dHRvbiB7CisJCQljb21wYXRpYmxlID0gInRpLHBhbG1hcy1wd3JidXR0b24iOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmdHBzNjU5MTc+OworCQkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX05PTkU+OworCQkJd2FrZXVwLXNvdXJjZTsKKwkJCXRpLHBhbG1hcy1sb25nLXByZXNzLXNlY29uZHMgPSA8Nj47CisJCX07CiAJfTsKIH07CiAKICZ1YXJ0MSB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJmVsbSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmdwbWMgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbmFuZF9kZWZhdWx0PjsKKwlyYW5nZXMgPSA8MCAwIDAgMHgwMTAwMDAwMD47CS8qIG1pbmltdW0gR1BNQyBwYXJ0aXRpb24gPSAxNk1CICovCisJbmFuZEAwLDAgeworCQkvKiBUbyB1c2UgTkFORCwgRElQIHN3aXRjaCBTVzUgbXVzdCBiZSBzZXQgbGlrZSBzbzoKKwkJICogU1c1LjEgKE5BTkRfU0VMbikgPSBPTiAoTE9XKQorCQkgKiBTVzUuOSAoR1BNQ19XUE4pID0gT0ZGIChISUdIKQorCQkgKi8KKwkJcmVnID0gPDAgMCA0PjsJCS8qIGRldmljZSBJTyByZWdpc3RlcnMgKi8KKwkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOworCQl0aSxlbG0taWQgPSA8JmVsbT47CisJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKKwkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8Mj47CisJCWdwbWMsc3luYy1jbGstcHMgPSA8MD47CisJCWdwbWMsY3Mtb24tbnMgPSA8MD47CisJCWdwbWMsY3MtcmQtb2ZmLW5zID0gPDgwPjsKKwkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8ODA+OworCQlncG1jLGFkdi1vbi1ucyA9IDwwPjsKKwkJZ3BtYyxhZHYtcmQtb2ZmLW5zID0gPDYwPjsKKwkJZ3BtYyxhZHYtd3Itb2ZmLW5zID0gPDYwPjsKKwkJZ3BtYyx3ZS1vbi1ucyA9IDwxMD47CisJCWdwbWMsd2Utb2ZmLW5zID0gPDUwPjsKKwkJZ3BtYyxvZS1vbi1ucyA9IDw0PjsKKwkJZ3BtYyxvZS1vZmYtbnMgPSA8NDA+OworCQlncG1jLGFjY2Vzcy1ucyA9IDw0MD47CisJCWdwbWMsd3ItYWNjZXNzLW5zID0gPDgwPjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDw4MD47CisJCWdwbWMsd3ItY3ljbGUtbnMgPSA8ODA+OworCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDA+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRlbGF5LW5zID0gPDA+OworCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDA+OworCQlncG1jLHdhaXQtbW9uaXRvcmluZy1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1kYXRhLW11eC1idXMtbnMgPSA8MD47CisJCS8qIE1URCBwYXJ0aXRpb24gdGFibGUgKi8KKwkJLyogQWxsIFNQTC0qIHBhcnRpdGlvbnMgYXJlIHNpemVkIHRvIG1pbmltYWwgbGVuZ3RoCisJCSAqIHdoaWNoIGNhbiBiZSBpbmRlcGVuZGVudGx5IHByb2dyYW1tYWJsZS4gRm9yCisJCSAqIE5BTkQgZmxhc2ggdGhpcyBpcyBlcXVhbCB0byBzaXplIG9mIGVyYXNlLWJsb2NrICovCisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcGFydGl0aW9uQDAgeworCQkJbGFiZWwgPSAiTkFORC5TUEwiOworCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMSB7CisJCQlsYWJlbCA9ICJOQU5ELlNQTC5iYWNrdXAxIjsKKwkJCXJlZyA9IDwweDAwMDIwMDAwIDB4MDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMiB7CisJCQlsYWJlbCA9ICJOQU5ELlNQTC5iYWNrdXAyIjsKKwkJCXJlZyA9IDwweDAwMDQwMDAwIDB4MDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMyB7CisJCQlsYWJlbCA9ICJOQU5ELlNQTC5iYWNrdXAzIjsKKwkJCXJlZyA9IDwweDAwMDYwMDAwIDB4MDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANCB7CisJCQlsYWJlbCA9ICJOQU5ELnUtYm9vdC1zcGwtb3MiOworCQkJcmVnID0gPDB4MDAwODAwMDAgMHgwMDA0MDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA1IHsKKwkJCWxhYmVsID0gIk5BTkQudS1ib290IjsKKwkJCXJlZyA9IDwweDAwMGMwMDAwIDB4MDAxMDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANiB7CisJCQlsYWJlbCA9ICJOQU5ELnUtYm9vdC1lbnYiOworCQkJcmVnID0gPDB4MDAxYzAwMDAgMHgwMDAyMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA3IHsKKwkJCWxhYmVsID0gIk5BTkQudS1ib290LWVudi5iYWNrdXAxIjsKKwkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AOCB7CisJCQlsYWJlbCA9ICJOQU5ELmtlcm5lbCI7CisJCQlyZWcgPSA8MHgwMDIwMDAwMCAweDAwODAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDkgeworCQkJbGFiZWwgPSAiTkFORC5maWxlLXN5c3RlbSI7CisJCQlyZWcgPSA8MHgwMGEwMDAwMCAweDBmNjAwMDAwPjsKKwkJfTsKKwl9OworfTsKKworJnVzYjJfcGh5MSB7CisJcGh5LXN1cHBseSA9IDwmbGRvNF9yZWc+OworfTsKKworJnVzYjJfcGh5MiB7CisJcGh5LXN1cHBseSA9IDwmbGRvNF9yZWc+OworfTsKKworJnVzYjEgeworCWRyX21vZGUgPSAicGVyaXBoZXJhbCI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVzYjFfcGlucz47Cit9OworCismdXNiMiB7CisJZHJfbW9kZSA9ICJob3N0IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdXNiMl9waW5zPjsKK307CisKKyZtbWMxIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm1tYzFfcGluc19kZWZhdWx0PjsKKworCXZtbWMtc3VwcGx5ID0gPCZsZG8xX3JlZz47CisJYnVzLXdpZHRoID0gPDQ+OworCS8qCisJICogU0RDRCBzaWduYWwgaXMgbm90IGJlaW5nIHVzZWQgaGVyZSAtIHVzaW5nIHRoZSBmYWN0IHRoYXQgR1BJTyBtb2RlCisJICogaXMgYSB2aWFibGUgYWx0ZXJuYXRpdmUKKwkgKi8KKwljZC1ncGlvcyA9IDwmZ3BpbzYgMjcgMD47Cit9OworCismbW1jMiB7CisJLyogU1c1LTMgaW4gT04gcG9zaXRpb24gKi8KKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm1tYzJfcGluc19kZWZhdWx0PjsKKworCXZtbWMtc3VwcGx5ID0gPCZldm1fM3YzPjsKKwlidXMtd2lkdGggPSA8OD47CisJdGksbm9uLXJlbW92YWJsZTsKK307CisKKyZkcmE3X3BteF9jb3JlIHsKKwljcHN3X2RlZmF1bHQ6IGNwc3dfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBTbGF2ZSAyICovCisJCQkweDE5OCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDEyLnJnbWlpMV90eGMgKi8KKwkJCTB4MTljIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTMucmdtaWkxX3RjdGwgKi8KKwkJCTB4MWEwIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTQucmdtaWkxX3RkMyAqLworCQkJMHgxYTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QxNS5yZ21paTFfdGQyICovCisJCQkweDFhOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE2LnJnbWlpMV90ZDEgKi8KKwkJCTB4MWFjIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTcucmdtaWkxX3RkMCAqLworCQkJMHgxYjAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE4LnJnbWlpMV9yY2xrICovCisJCQkweDFiNCAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTkucmdtaWkxX3JjdGwgKi8KKwkJCTB4MWI4IChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QyMC5yZ21paTFfcmQzICovCisJCQkweDFiYyAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMjEucmdtaWkxX3JkMiAqLworCQkJMHgxYzAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDIyLnJnbWlpMV9yZDEgKi8KKwkJCTB4MWM0IChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QyMy5yZ21paTFfcmQwICovCisJCT47CisKKwl9OworCisJY3Bzd19zbGVlcDogY3Bzd19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBTbGF2ZSAyICovCisJCQkweDE5OCAoTVVYX01PREUxNSkKKwkJCTB4MTljIChNVVhfTU9ERTE1KQorCQkJMHgxYTAgKE1VWF9NT0RFMTUpCisJCQkweDFhNCAoTVVYX01PREUxNSkKKwkJCTB4MWE4IChNVVhfTU9ERTE1KQorCQkJMHgxYWMgKE1VWF9NT0RFMTUpCisJCQkweDFiMCAoTVVYX01PREUxNSkKKwkJCTB4MWI0IChNVVhfTU9ERTE1KQorCQkJMHgxYjggKE1VWF9NT0RFMTUpCisJCQkweDFiYyAoTVVYX01PREUxNSkKKwkJCTB4MWMwIChNVVhfTU9ERTE1KQorCQkJMHgxYzQgKE1VWF9NT0RFMTUpCisJCT47CisJfTsKKworCWRhdmluY2lfbWRpb19kZWZhdWx0OiBkYXZpbmNpX21kaW9fZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBNRElPICovCisJCQkweDIzYyAoUElOX09VVFBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1kaW9fZC5tZGlvX2QgKi8KKwkJCTB4MjQwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBtZGlvX2Nsay5tZGlvX2NsayAqLworCQk+OworCX07CisKKwlkYXZpbmNpX21kaW9fc2xlZXA6IGRhdmluY2lfbWRpb19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDIzYyAoTVVYX01PREUxNSkKKwkJCTB4MjQwIChNVVhfTU9ERTE1KQorCQk+OworCX07Cit9OworCismbWFjIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmNwc3dfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZjcHN3X3NsZWVwPjsKK307CisKKyZjcHN3X2VtYWMxIHsKKwlwaHlfaWQgPSA8JmRhdmluY2lfbWRpbz4sIDwzPjsKKwlwaHktbW9kZSA9ICJyZ21paSI7Cit9OworCismZGF2aW5jaV9tZGlvIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic2xlZXAiOworCXBpbmN0cmwtMCA9IDwmZGF2aW5jaV9tZGlvX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmZGF2aW5jaV9tZGlvX3NsZWVwPjsKKwlhY3RpdmVfc2xhdmUgPSA8MT47Cit9OworCismZGNhbjEgeworCXN0YXR1cyA9ICJvayI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmRjYW4xX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZkY2FuMV9waW5zX3NsZWVwPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kcmE3NHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTc0eC5kdHNpCmluZGV4IDNiZTU0NGMuLjEwMTczZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTc0eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTc0eC5kdHNpCkBAIC00NCw0ICs0NCwyNiBAQAogCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgRElSRUNUX0lSUSgxMzEpIElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJICAgICA8R0lDX1NQSSBESVJFQ1RfSVJRKDEzMikgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJfTsKKworCW9jcCB7CisJCW9tYXBfZHdjM180OiBvbWFwX2R3YzNfNEA0ODk0MDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGR3YzMiOworCQkJdGksaHdtb2RzID0gInVzYl9vdGdfc3M0IjsKKwkJCXJlZyA9IDwweDQ4OTQwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM0NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQl1dG1pLW1vZGUgPSA8Mj47CisJCQlyYW5nZXM7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJdXNiNDogdXNiQDQ4OTUwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHdjMyI7CisJCQkJcmVnID0gPDB4NDg5NTAwMDAgMHgxNzAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM0NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCQl0eC1maWZvLXJlc2l6ZTsKKwkJCQltYXhpbXVtLXNwZWVkID0gImhpZ2gtc3BlZWQiOworCQkJCWRyX21vZGUgPSAib3RnIjsKKwkJCX07CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9lbWV2Mi1rem05ZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9lbWV2Mi1rem05ZC5kdHMKaW5kZXggNTBjY2QxNS4uNjY3ZDMyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZW1ldjIta3ptOWQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2VtZXYyLWt6bTlkLmR0cwpAQCAtMjUsMzcgKzI1LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzEsMTE1MjAwbjgxIGlnbm9yZV9sb2dsZXZlbCByb290PS9kZXYvbmZzIGlwPWRoY3AiOwotCX07Ci0KLQlyZWdfMXA4djogcmVndWxhdG9yQDAgewotCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7Ci0JCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTEuOFYiOwotCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCXJlZ3VsYXRvci1ib290LW9uOwotCX07Ci0KLQlyZWdfM3AzdjogcmVndWxhdG9yQDEgewotCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7Ci0JCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTMuM1YiOwotCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0JCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCXJlZ3VsYXRvci1ib290LW9uOwotCX07Ci0KLQlsYW45MjIwQDIwMDAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkyMjAiLCAic21zYyxsYW45MTE1IjsKLQkJcmVnID0gPDB4MjAwMDAwMDAgMHgxMDAwMD47Ci0JCXBoeS1tb2RlID0gIm1paSI7Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8wPjsKLQkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0VER0VfUklTSU5HPjsKLQkJcmVnLWlvLXdpZHRoID0gPDQ+OwotCQlzbXNjLGlycS1hY3RpdmUtaGlnaDsKLQkJc21zYyxpcnEtcHVzaC1wdWxsOwotCQl2ZGR2YXJpby1zdXBwbHkgPSA8JnJlZ18xcDh2PjsKLQkJdmRkMzNhLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MTsKIAl9OwogCiAJZ3Bpb19rZXlzIHsKQEAgLTkyLDQgKzYyLDM1IEBACiAJCQlncGlvcyA9IDwmZ3BpbzAgMTcgR1BJT19BQ1RJVkVfSElHSD47CiAJCX07CiAJfTsKKworCXJlZ18xcDh2OiByZWd1bGF0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMS44ViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJfTsKKworCXJlZ18zcDN2OiByZWd1bGF0b3JAMSB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMy4zViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJfTsKKworCWxhbjkyMjBAMjAwMDAwMDAgeworCQljb21wYXRpYmxlID0gInNtc2MsbGFuOTIyMCIsICJzbXNjLGxhbjkxMTUiOworCQlyZWcgPSA8MHgyMDAwMDAwMCAweDEwMDAwPjsKKwkJcGh5LW1vZGUgPSAibWlpIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzA+OworCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfRURHRV9SSVNJTkc+OworCQlyZWctaW8td2lkdGggPSA8ND47CisJCXNtc2MsaXJxLWFjdGl2ZS1oaWdoOworCQlzbXNjLGlycS1wdXNoLXB1bGw7CisJCXZkZHZhcmlvLXN1cHBseSA9IDwmcmVnXzFwOHY+OworCQl2ZGQzM2Etc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9lbWV2Mi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZW1ldjIuZHRzaQppbmRleCAwMGVlZWQzLi5jYzdiZmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9lbWV2Mi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2VtZXYyLmR0c2kKQEAgLTU1LDcgKzU1LDcgQEAKIAkJCSAgICAgPDAgMTIxIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCX07CiAKLQlzbXVAZTAxMTAwMDAgeworCWNsb2Nrc0BlMDExMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxlbWV2Mi1zbXUiOwogCQlyZWcgPSA8MHhlMDExMDAwMCAweDEwMDAwPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CkBAIC0xMjksNyArMTI5LDcgQEAKIAkJfTsKIAl9OwogCi0Jc3RpQGUwMTgwMDAwIHsKKwl0aW1lckBlMDE4MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxlbS1zdGkiOwogCQlyZWcgPSA8MHhlMDE4MDAwMCAweDU0PjsKIAkJaW50ZXJydXB0cyA9IDwwIDEyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQljbG9jay1uYW1lcyA9ICJzY2xrIjsKIAl9OwogCi0JdWFydEBlMTAyMDAwMCB7CisJdWFydDA6IHNlcmlhbEBlMTAyMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxlbS11YXJ0IjsKIAkJcmVnID0gPDB4ZTEwMjAwMDAgMHgzOD47CiAJCWludGVycnVwdHMgPSA8MCA4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCWNsb2NrLW5hbWVzID0gInNjbGsiOwogCX07CiAKLQl1YXJ0QGUxMDMwMDAwIHsKKwl1YXJ0MTogc2VyaWFsQGUxMDMwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGVtLXVhcnQiOwogCQlyZWcgPSA8MHhlMTAzMDAwMCAweDM4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAic2NsayI7CiAJfTsKIAotCXVhcnRAZTEwNDAwMDAgeworCXVhcnQyOiBzZXJpYWxAZTEwNDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsZW0tdWFydCI7CiAJCXJlZyA9IDwweGUxMDQwMDAwIDB4Mzg+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAic2NsayI7CiAJfTsKIAotCXVhcnRAZTEwNTAwMDAgeworCXVhcnQzOiBzZXJpYWxAZTEwNTAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsZW0tdWFydCI7CiAJCXJlZyA9IDwweGUxMDUwMDAwIDB4Mzg+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLW1vbmsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC1tb25rLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDgyMmFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC1tb25rLmR0cwpAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIFNhbXN1bmcncyBFeHlub3MzMjUwIGJhc2VkIE1vbmsgYm9hcmQgZGV2aWNlIHRyZWUgc291cmNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIERldmljZSB0cmVlIHNvdXJjZSBmaWxlIGZvciBTYW1zdW5nJ3MgTW9uayBib2FyZCB3aGljaCBpcyBiYXNlZCBvbgorICogU2Ftc3VuZyBFeHlub3MzMjUwIFNvQy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgImV4eW5vczMyNTAuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgorCisvIHsKKwltb2RlbCA9ICJTYW1zdW5nIE1vbmsgYm9hcmQiOworCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxtb25rIiwgInNhbXN1bmcsZXh5bm9zMzI1MCIsICJzYW1zdW5nLGV4eW5vczMiOworCisJYWxpYXNlcyB7CisJCWkyYzcgPSAmaTJjX21heDc3ODM2OworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSAgPDB4NDAwMDAwMDAgMHgxZmYwMDAwMD47CisJfTsKKworCWZpcm13YXJlQDAyMDVGMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHNlY3VyZS1maXJtd2FyZSI7CisJCXJlZyA9IDwweDAyMDVGMDAwIDB4MTAwMD47CisJfTsKKworCWdwaW9fa2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKworCQlwb3dlcl9rZXkgeworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mj47CisJCQlpbnRlcnJ1cHRzID0gPDcgMD47CisJCQlncGlvcyA9IDwmZ3B4MiA3IDE+OworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OworCQkJbGFiZWwgPSAicG93ZXIga2V5IjsKKwkJCWRlYm91bmNlLWludGVydmFsID0gPDEwPjsKKwkJCWdwaW8ta2V5LHdha2V1cDsKKwkJfTsKKwl9OworCisJdmVtbWNfcmVnOiB2b2x0YWdlLXJlZ3VsYXRvci0wIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0VNTUNfMi44Vi1maXhlZCI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BrMCAyIDA+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJfTsKKworCWkyY19tYXg3NzgzNjogaTJjLWdwaW8tMCB7CisJCWNvbXBhdGlibGUgPSAiaTJjLWdwaW8iOworCQlncGlvcyA9IDwmZ3BkMCAyIDA+LCA8JmdwZDAgMyAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCW1heDc3ODM2OiBzdWJwbWljQDI1IHsKKwkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYiOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4MT47CisJCQlpbnRlcnJ1cHRzID0gPDUgMD47CisJCQlyZWcgPSA8MHgyNT47CisJCQl3YWtldXA7CisKKwkJCW11aWM6IG1heDc3ODM2LW11aWMgeworCQkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtbXVpYyI7CisJCQl9OworCisJCQlyZWd1bGF0b3JzIHsKKwkJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2LXJlZ3VsYXRvciI7CisJCQkJc2FmZW91dF9yZWc6IFNBRkVPVVQgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJTQUZFT1VUIjsKKwkJCQl9OworCisJCQkJY2hhcmdlcl9yZWc6IENIQVJHRVIgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJDSEFSR0VSIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb2FtcCA9IDw0NTAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm9hbXAgPSA8NDc1MDAwPjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCW1vdG9yX3JlZzogTERPMSB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIk1PVF8yLjdWIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI3MDAwMDA+OworCQkJCX07CisKKwkJCQlMRE8yIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzIiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzOTUwMDAwPjsKKwkJCQl9OworCQkJfTsKKworCQkJY2hhcmdlciB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgzNi1jaGFyZ2VyIjsKKworCQkJCW1heGltLGNvbnN0YW50LXV2b2x0ID0gPDQzNTAwMDA+OworCQkJCW1heGltLGZhc3QtY2hhcmdlLXVhbXAgPSA8MjI1MDAwPjsKKwkJCQltYXhpbSxlb2MtdWFtcCA9IDw3NTAwPjsKKwkJCQltYXhpbSxvdnAtdXZvbHQgPSA8NjUwMDAwMD47CisJCQl9OworCQl9OworCX07Cit9OworCismYWRjIHsKKwl2ZGQtc3VwcGx5ID0gPCZsZG8zX3JlZz47CisJc3RhdHVzID0gIm9rYXkiOworCWFzc2lnbmVkLWNsb2NrcyA9IDwmY211IENMS19TQ0xLX1RTQURDPjsKKwlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDw2MDAwMDAwPjsKKworCXRoZXJtaXN0b3ItYXAgeworCQljb21wYXRpYmxlID0gIm50YyxuY3AxNXdiNDczIjsKKwkJcHVsbHVwLXV2ID0gPDE4MDAwMDA+OworCQlwdWxsdXAtb2htID0gPDEwMDAwMD47CisJCXB1bGxkb3duLW9obSA9IDwxMDAwMDA+OworCQlpby1jaGFubmVscyA9IDwmYWRjIDA+OworCX07CisKKwl0aGVybWlzdG9yLWJhdHRlcnkgeworCQljb21wYXRpYmxlID0gIm50YyxuY3AxNXdiNDczIjsKKwkJcHVsbHVwLXV2ID0gPDE4MDAwMDA+OworCQlwdWxsdXAtb2htID0gPDEwMDAwMD47CisJCXB1bGxkb3duLW9obSA9IDwxMDAwMDA+OworCQlpby1jaGFubmVscyA9IDwmYWRjIDE+OworCX07Cit9OworCismaTJjXzAgeworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDA+OworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHgxMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDEwMDAwMD47CisJc3RhdHVzID0gIm9rYXkiOworCisJczJtcHMxNF9wbWljQDY2IHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMybXBzMTQtcG1pYyI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDA+OworCQlpbnRlcnJ1cHRzID0gPDcgMD47CisJCXJlZyA9IDwweDY2PjsKKwkJd2FrZXVwOworCisJCXMybXBzMTRfb3NjOiBjbG9ja3MgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMybXBzMTQtY2xrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJzMm1wczE0X2FwIiwgInVudXNlZCIsCisJCQkJInMybXBzMTRfYnQiOworCQl9OworCisJCXJlZ3VsYXRvcnMgeworCQkJbGRvMV9yZWc6IExETzEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9BTElWRV8xLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvMl9yZWc6IExETzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9NMV8xLjJWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvM19yZWc6IExETzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZDQ19BUF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvNF9yZWc6IExETzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9BVkREX1BMTDEiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG81X3JlZzogTERPNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX1BMTF9JU09fMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzZfcmVnOiBMRE82IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfTUlQSV8xLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzdfcmVnOiBMRE83IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfQVZERF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvOF9yZWc6IExETzggeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9VU0JfMy4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzlfcmVnOiBMRE85IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0xQRERSXzEuMlYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG8xMF9yZWc6IExETzEwIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMTAiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJfTsKKworCQkJbGRvMTFfcmVnOiBMRE8xMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVl9FTU1DXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXNhbXN1bmcsZXh0LWNvbnRyb2wtZ3Bpb3MgPSA8JmdwazAgMiAwPjsKKwkJCX07CisKKwkJCWxkbzEyX3JlZzogTERPMTIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZfRU1NQ18yLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlzYW1zdW5nLGV4dC1jb250cm9sLWdwaW9zID0gPCZncGswIDIgMD47CisJCQl9OworCisJCQlsZG8xM19yZWc6IExETzEzIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWU0VOU09SXzIuODVWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvMTRfcmVnOiBMRE8xNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzE0IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzE1X3JlZzogTERPMTUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlRTUF9BVkREXzMuM1YiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJfTsKKworCQkJbGRvMTZfcmVnOiBMRE8xNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiTENEX1ZERF8zLjNWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzE3X3JlZzogTERPMTcgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8xNyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8xOF9yZWc6IExETzE4IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMTgiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJfTsKKworCQkJbGRvMTlfcmVnOiBMRE8xOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVFNQX1ZERF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzIwX3JlZzogTERPMjAgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkxDRF9WRERfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8yMV9yZWc6IExETzIxIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMjEiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJfTsKKworCQkJbGRvMjJfcmVnOiBMRE8yMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzIyIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzIzX3JlZzogTERPMjMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8yMyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzI0X3JlZzogTERPMjQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8yNCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8yNV9yZWc6IExETzI1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMjUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJfTsKKworCQkJYnVjazFfcmVnOiBCVUNLMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX01JRl8xLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDkwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWJ1Y2syX3JlZzogQlVDSzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9BUk1fMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJYnVjazNfcmVnOiBCVUNLMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX0lOVDNEXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWJ1Y2s0X3JlZzogQlVDSzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZDQ19TVUJfMS45NVYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlidWNrNV9yZWc6IEJVQ0s1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQ0NfU1VCXzEuMzVWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmkyY18xIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4MTA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw0MDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCWZ1ZWxnYXVnZUAzNiB7CisJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtYmF0dGVyeSI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OworCQlpbnRlcnJ1cHRzID0gPDIgOD47CisJCXJlZyA9IDwweDM2PjsKKwl9OworfTsKKworJmkyczIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtc2hjXzAgeworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDA+OworCW51bS1zbG90cyA9IDwxPjsKKwlicm9rZW4tY2Q7CisJbm9uLXJlbW92YWJsZTsKKwljYXAtbW1jLWhpZ2hzcGVlZDsKKwlkZXNjLW51bSA9IDw0PjsKKwltbWMtaHMyMDAtMV84djsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXZtbWMtc3VwcGx5ID0gPCZ2ZW1tY19yZWc+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCWNsb2NrLWZyZXEtbWluLW1heCA9IDw0MDAwMDAgMTAwMDAwMDAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwxPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwwIDE+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9jbWQgJnNkMF9idXMxICZzZDBfYnVzNCAmc2QwX2J1czg+OworCWJ1cy13aWR0aCA9IDw4PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2VyaWFsXzAgeworCWFzc2lnbmVkLWNsb2NrcyA9IDwmY211IENMS19TQ0xLX1VBUlQwPjsKKwlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwxMDAwMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzZXJpYWxfMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnRtdSB7CisJdnRtdS1zdXBwbHkgPSA8JmxkbzdfcmVnPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcnRjIHsKKwljbG9ja3MgPSA8JmNtdSBDTEtfUlRDPiwgPCZzMm1wczE0X29zYyAwPjsKKwljbG9jay1uYW1lcyA9ICJydGMiLCAicnRjX3NyYyI7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnh1c2J4dGkgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47Cit9OworCismcGluY3RybF8wIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAwPjsKKworCXNsZWVwMDogc2xlZXAtc3RhdGUgeworCQlQSU5fU0xQKGdwYTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BhMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS01LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGItMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwYi0yLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGItMywgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGItNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYi02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BiLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYzAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtNCwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BjMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS00LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGQwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQwLTMsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZDEtMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMywgSU5QVVQsIE5PTkUpOworCX07Cit9OworCismcGluY3RybF8xIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAxPjsKKworCXNsZWVwMTogc2xlZXAtc3RhdGUgeworCQlQSU5fU0xQKGdwZTAtMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMC0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGUwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUwLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUwLTQsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwZTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BlMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMS0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGUxLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTcsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZTItMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZTItMSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZTItMiwgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BrMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMC0yLCBPVVQwLCBOT05FKTsKKwkJUElOX1NMUChncGswLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwazEtMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMS0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGsxLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsxLTMsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazEtNCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMS01LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGsxLTYsIFBSRVYsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BrMi0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGwwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGwwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGwwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGwwLTMsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0yLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTQsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTMtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtNC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC03LCBJTlBVVCwgRE9XTik7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXBpbmN0cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtcGluY3RybC5kdHNpCmluZGV4IDQ3YjkyYzEuLjVhYjgxYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtcGluY3RybC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtcGluY3RybC5kdHNpCkBAIC0xMiw2ICsxMiwyMiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqLwogCisjZGVmaW5lIFBJTl9QVUxMX05PTkUJCTAKKyNkZWZpbmUgUElOX1BVTExfRE9XTgkJMQorI2RlZmluZSBQSU5fUFVMTF9VUAkJMworCisjZGVmaW5lIFBJTl9QRE5fT1VUMAkJMAorI2RlZmluZSBQSU5fUEROX09VVDEJCTEKKyNkZWZpbmUgUElOX1BETl9JTlBVVAkJMgorI2RlZmluZSBQSU5fUEROX1BSRVYJCTMKKworI2RlZmluZSBQSU5fU0xQKF9waW4sIF9tb2RlLCBfcHVsbCkJCQkJXAorCV9waW4gewkJCQkJCQlcCisJCXNhbXN1bmcscGlucyA9ICNfcGluOwkJCQlcCisJCXNhbXN1bmcscGluLWNvbi1wZG4gPSA8UElOX1BETl8gIyNfbW9kZT47CVwKKwkJc2Ftc3VuZyxwaW4tcHVkLXBkbiA9IDxQSU5fUFVMTF8gIyNfcHVsbD47CVwKKwl9CisKICZwaW5jdHJsXzAgewogCWdwYTA6IGdwYTAgewogCQlncGlvLWNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXJpbmF0by5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXJpbmF0by5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhYThiNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtcmluYXRvLmR0cwpAQCAtMCwwICsxLDY4MiBAQAorLyoKKyAqIFNhbXN1bmcncyBFeHlub3MzMjUwIGJhc2VkIFJpbmF0byBib2FyZCBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRGV2aWNlIHRyZWUgc291cmNlIGZpbGUgZm9yIFNhbXN1bmcncyBSaW5hdG8gYm9hcmQgd2hpY2ggaXMgYmFzZWQgb24KKyAqIFNhbXN1bmcgRXh5bm9zMzI1MCBTb0MuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJleHlub3MzMjUwLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKworLyB7CisJbW9kZWwgPSAiU2Ftc3VuZyBSaW5hdG8gYm9hcmQiOworCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxyaW5hdG8iLCAic2Ftc3VuZyxleHlub3MzMjUwIiwgInNhbXN1bmcsZXh5bm9zMyI7CisKKwlhbGlhc2VzIHsKKwkJaTJjNyA9ICZpMmNfbWF4Nzc4MzY7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9ICA8MHg0MDAwMDAwMCAweDFmZjAwMDAwPjsKKwl9OworCisJZmlybXdhcmVAMDIwNUYwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsc2VjdXJlLWZpcm13YXJlIjsKKwkJcmVnID0gPDB4MDIwNUYwMDAgMHgxMDAwPjsKKwl9OworCisJZ3Bpb19rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCisJCXBvd2VyX2tleSB7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgyPjsKKwkJCWludGVycnVwdHMgPSA8NyAwPjsKKwkJCWdwaW9zID0gPCZncHgyIDcgMT47CisJCQlsaW51eCxjb2RlID0gPEtFWV9QT1dFUj47CisJCQlsYWJlbCA9ICJwb3dlciBrZXkiOworCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MTA+OworCQkJZ3Bpby1rZXksd2FrZXVwOworCQl9OworCX07CisKKwlpMmNfbWF4Nzc4MzY6IGkyYy1ncGlvLTAgeworCQljb21wYXRpYmxlID0gImkyYy1ncGlvIjsKKwkJZ3Bpb3MgPSA8JmdwZDAgMiAwPiwgPCZncGQwIDMgMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQltYXg3NzgzNjogc3VicG1pY0AyNSB7CisJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2IjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OworCQkJaW50ZXJydXB0cyA9IDw1IDA+OworCQkJcmVnID0gPDB4MjU+OworCQkJd2FrZXVwOworCisJCQltdWljOiBtYXg3NzgzNi1tdWljIHsKKwkJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2LW11aWMiOworCQkJfTsKKworCQkJcmVndWxhdG9ycyB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgzNi1yZWd1bGF0b3IiOworCQkJCXNhZmVvdXRfcmVnOiBTQUZFT1VUIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiU0FGRU9VVCI7CisJCQkJfTsKKworCQkJCWNoYXJnZXJfcmVnOiBDSEFSR0VSIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiQ0hBUkdFUiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm9hbXAgPSA8NDUwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3JvYW1wID0gPDQ3NTAwMD47CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQltb3Rvcl9yZWc6IExETzEgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJNT1RfMi43ViI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyNzAwMDAwPjsKKwkJCQl9OworCisJCQkJTERPMiB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8yIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8Mzk1MDAwMD47CisJCQkJfTsKKwkJCX07CisKKwkJCWNoYXJnZXIgeworCQkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtY2hhcmdlciI7CisKKwkJCQltYXhpbSxjb25zdGFudC11dm9sdCA9IDw0MzUwMDAwPjsKKwkJCQltYXhpbSxmYXN0LWNoYXJnZS11YW1wID0gPDIyNTAwMD47CisJCQkJbWF4aW0sZW9jLXVhbXAgPSA8NzUwMD47CisJCQkJbWF4aW0sb3ZwLXV2b2x0ID0gPDY1MDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmFkYyB7CisJdmRkLXN1cHBseSA9IDwmbGRvM19yZWc+OworCXN0YXR1cyA9ICJva2F5IjsKKwlhc3NpZ25lZC1jbG9ja3MgPSA8JmNtdSBDTEtfU0NMS19UU0FEQz47CisJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8NjAwMDAwMD47CisKKwl0aGVybWlzdG9yLWFwIHsKKwkJY29tcGF0aWJsZSA9ICJudGMsbmNwMTV3YjQ3MyI7CisJCXB1bGx1cC11diA9IDwxODAwMDAwPjsKKwkJcHVsbHVwLW9obSA9IDwxMDAwMDA+OworCQlwdWxsZG93bi1vaG0gPSA8MTAwMDAwPjsKKwkJaW8tY2hhbm5lbHMgPSA8JmFkYyAwPjsKKwl9OworCisJdGhlcm1pc3Rvci1iYXR0ZXJ5IHsKKwkJY29tcGF0aWJsZSA9ICJudGMsbmNwMTV3YjQ3MyI7CisJCXB1bGx1cC11diA9IDwxODAwMDAwPjsKKwkJcHVsbHVwLW9obSA9IDwxMDAwMDA+OworCQlwdWxsZG93bi1vaG0gPSA8MTAwMDAwPjsKKwkJaW8tY2hhbm5lbHMgPSA8JmFkYyAxPjsKKwl9OworfTsKKworJmkyY18wIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4MTA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwxMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXMybXBzMTRfcG1pY0A2NiB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczE0LXBtaWMiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgwPjsKKwkJaW50ZXJydXB0cyA9IDw3IDA+OworCQlyZWcgPSA8MHg2Nj47CisJCXdha2V1cDsKKworCQlzMm1wczE0X29zYzogY2xvY2tzIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczE0LWNsayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiczJtcHMxNF9hcCIsICJ1bnVzZWQiLAorCQkJCSJzMm1wczE0X2J0IjsKKwkJfTsKKworCQlyZWd1bGF0b3JzIHsKKwkJCWxkbzFfcmVnOiBMRE8xIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfQUxJVkVfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb24taW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMl9yZWc6IExETzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9NMV8xLjJWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvM19yZWc6IExETzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZDQ19BUF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvNF9yZWc6IExETzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9BVkREX1BMTDEiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG81X3JlZzogTERPNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX1BMTF9JU09fMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzZfcmVnOiBMRE82IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfVk1JUElfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzdfcmVnOiBMRE83IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfQVZERF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvOF9yZWc6IExETzggeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9VU0JfMy4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzlfcmVnOiBMRE85IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0xQRERSXzEuMlYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9uLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzEwX3JlZzogTERPMTAgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8xMCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8xMV9yZWc6IExETzExIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0VNTUNfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJc2Ftc3VuZyxleHQtY29udHJvbC1ncGlvcyA9IDwmZ3BrMCAyIDA+OworCQkJfTsKKworCQkJbGRvMTJfcmVnOiBMRE8xMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVl9FTU1DXzIuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXNhbXN1bmcsZXh0LWNvbnRyb2wtZ3Bpb3MgPSA8JmdwazAgMiAwPjsKKwkJCX07CisKKwkJCWxkbzEzX3JlZzogTERPMTMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkNBTV9BVkREXzIuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMTRfcmVnOiBMRE8xNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzE0IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyNzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyNzAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzE1X3JlZzogTERPMTUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlRTUF9BVkREXzMuM1YiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMTZfcmVnOiBMRE8xNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiTENEX1ZERF8zLjNWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzE3X3JlZzogTERPMTcgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZfSVJMRURfMy4zViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8xOF9yZWc6IExETzE4IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJDQU1fQUZfMi44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8xOV9yZWc6IExETzE5IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJUU1BfVkREXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMjBfcmVnOiBMRE8yMCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiTENEX1ZERF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzIxX3JlZzogTERPMjEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkNBTV9JT18xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzIyX3JlZzogTERPMjIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkNBTV9EVkREXzEuMlYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMjNfcmVnOiBMRE8yMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiSFJNX1ZDQ18xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvMjRfcmVnOiBMRE8yNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiSFJNX1ZDQ18zLjNWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzI1X3JlZzogTERPMjUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8yNSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlidWNrMV9yZWc6IEJVQ0sxIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfTUlGXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8OTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJYnVjazJfcmVnOiBCVUNLMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX0FSTV8xLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExNTAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlidWNrM19yZWc6IEJVQ0szIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfSU5UM0RfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJYnVjazRfcmVnOiBCVUNLNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkNDX1NVQl8xLjk1ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTk1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTk1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb24taW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJYnVjazVfcmVnOiBCVUNLNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkNDX1NVQl8xLjM1ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb24taW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmkyY18xIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4MTA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw0MDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCWZ1ZWxnYXVnZUAzNiB7CisJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtYmF0dGVyeSI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OworCQlpbnRlcnJ1cHRzID0gPDIgOD47CisJCXJlZyA9IDwweDM2PjsKKwl9OworfTsKKworJmkyczIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtZmMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtc2hjXzAgeworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDA+OworCW51bS1zbG90cyA9IDwxPjsKKwlicm9rZW4tY2Q7CisJbm9uLXJlbW92YWJsZTsKKwljYXAtbW1jLWhpZ2hzcGVlZDsKKwlkZXNjLW51bSA9IDw0PjsKKwltbWMtaHMyMDAtMV84djsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXZtbWMtc3VwcGx5ID0gPCZsZG8xMl9yZWc+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCWNsb2NrLWZyZXEtbWluLW1heCA9IDw0MDAwMDAgMTAwMDAwMDAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwxPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwwIDE+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9jbWQgJnNkMF9idXMxICZzZDBfYnVzNCAmc2QwX2J1czg+OworCWJ1cy13aWR0aCA9IDw4PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2VyaWFsXzAgeworCWFzc2lnbmVkLWNsb2NrcyA9IDwmY211IENMS19TQ0xLX1VBUlQwPjsKKwlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwxMDAwMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzZXJpYWxfMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnRtdSB7CisJdnRtdS1zdXBwbHkgPSA8JmxkbzdfcmVnPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcnRjIHsKKwljbG9ja3MgPSA8JmNtdSBDTEtfUlRDPiwgPCZzMm1wczE0X29zYyAwPjsKKwljbG9jay1uYW1lcyA9ICJydGMiLCAicnRjX3NyYyI7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnh1c2J4dGkgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47Cit9OworCismcGluY3RybF8wIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAwPjsKKworCXNsZWVwMDogc2xlZXAtc3RhdGUgeworCQlQSU5fU0xQKGdwYTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BhMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS01LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGItMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwYi0yLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGItMywgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGItNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYi02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BiLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYzAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtNCwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BjMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS00LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGQwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQwLTMsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZDEtMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMywgSU5QVVQsIE5PTkUpOworCX07Cit9OworCismcGluY3RybF8xIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAxPjsKKworCXNsZWVwMTogc2xlZXAtc3RhdGUgeworCQlQSU5fU0xQKGdwZTAtMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMC0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGUwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUwLTMsIElOUFVULCBVUCk7CisJCVBJTl9TTFAoZ3BlMC00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGUxLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwZTEtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtNywgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BlMi0wLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMi0xLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMi0yLCBJTlBVVCwgTk9ORSk7CisKKwkJUElOX1NMUChncGswLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTIsIE9VVDAsIE5PTkUpOworCQlQSU5fU0xQKGdwazAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BrMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGsyLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTYsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbDAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDAtMywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0xLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTYsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTItMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTItMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTItMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTItMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTItNCwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMy0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG00LTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTcsIElOUFVULCBET1dOKTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAuZHRzaQppbmRleCA2OTNhMzI3Li4yNDJkZGRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC5kdHNpCkBAIC0zMjAsNiArMzIwLDE2IEBACiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCisJCW1mYzogY29kZWNAMTM0MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLG1mYy12NyI7CisJCQlyZWcgPSA8MHgxMzQwMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMDIgMD47CisJCQljbG9jay1uYW1lcyA9ICJtZmMiLCAic2Nsa19tZmMiOworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX01GQz4sIDwmY211IENMS19TQ0xLX01GQz47CisJCQlzYW1zdW5nLHBvd2VyLWRvbWFpbiA9IDwmcGRfbWZjPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAkJc2VyaWFsXzA6IHNlcmlhbEAxMzgwMDAwMCB7CiAJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKIAkJCXJlZyA9IDwweDEzODAwMDAwIDB4MTAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQuZHRzaQppbmRleCBlMDI3OGVjLi5iODE2OGYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNC5kdHNpCkBAIC0zOTIsOCArMzkyLDggQEAKIAkJcmVnID0gPDB4MTM0MDAwMDAgMHgxMDAwMD47CiAJCWludGVycnVwdHMgPSA8MCA5NCAwPjsKIAkJc2Ftc3VuZyxwb3dlci1kb21haW4gPSA8JnBkX21mYz47Ci0JCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01GQz47Ci0JCWNsb2NrLW5hbWVzID0gIm1mYyI7CisJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01GQz4sIDwmY2xvY2sgQ0xLX1NDTEtfTUZDPjsKKwkJY2xvY2stbmFtZXMgPSAibWZjIiwgInNjbGtfbWZjIjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXRyYXRzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdHJhdHMuZHRzCmluZGV4IGY1MTZkYTkuLjcyMDgzNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdHJhdHMuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdHJhdHMuZHRzCkBAIC00MzEsMTggKzQzMSwzNCBAQAogCiAJCWZpbWNfMDogZmltY0AxMTgwMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMwPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMD47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfU0NMS19NUExMPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTYwMDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzE6IGZpbWNAMTE4MTAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMT4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzE+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX1NDTEtfTVBMTD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE2MDAwMDAwMD47CiAJCX07CiAKIAkJZmltY18yOiBmaW1jQDExODIwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzI+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMyPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19TQ0xLX01QTEw+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNjAwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMzogZmltY0AxMTgzMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMzPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMz47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfU0NMS19NUExMPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTYwMDAwMDAwPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdW5pdmVyc2FsX2MyMTAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC11bml2ZXJzYWxfYzIxMC5kdHMKaW5kZXggZDUwZWIzYS4uYWFmMGNhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC11bml2ZXJzYWxfYzIxMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC11bml2ZXJzYWxfYzIxMC5kdHMKQEAgLTQ3MywxOCArNDczLDM0IEBACiAKIAkJZmltY18wOiBmaW1jQDExODAwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzA+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMwPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19TQ0xLX01QTEw+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNjAwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMTogZmltY0AxMTgxMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMxPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMT47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfU0NMS19NUExMPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTYwMDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzI6IGZpbWNAMTE4MjAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMj4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzI+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX1NDTEtfTVBMTD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE2MDAwMDAwMD47CiAJCX07CiAKIAkJZmltY18zOiBmaW1jQDExODMwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzM+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMzPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19TQ0xLX01QTEw+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNjAwMDAwMDA+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC5kdHNpCmluZGV4IDgwN2JiNWIuLmJjYzllNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLmR0c2kKQEAgLTMxLDYgKzMxLDIzIEBACiAJCXBpbmN0cmwyID0gJnBpbmN0cmxfMjsKIAl9OwogCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAOTAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4OTAwPjsKKwkJfTsKKworCQljcHVAOTAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4OTAxPjsKKwkJfTsKKwl9OworCiAJcG11X3N5c3RlbV9jb250cm9sbGVyOiBzeXN0ZW0tY29udHJvbGxlckAxMDAyMDAwMCB7CiAJCWNsb2NrLW5hbWVzID0gImNsa291dDAiLCAiY2xrb3V0MSIsICJjbGtvdXQyIiwgImNsa291dDMiLAogCQkJCSJjbGtvdXQ0IiwgImNsa291dDgiLCAiY2xrb3V0OSI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEyLmR0c2kKaW5kZXggM2MwMGU2ZS4uZGQwYTQzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTIuZHRzaQpAQCAtMjIsNiArMjIsMjMgQEAKIC8gewogCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEyIiwgInNhbXN1bmcsZXh5bm9zNCI7CiAKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUBBMDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQlyZWcgPSA8MHhBMDA+OworCQl9OworCisJCWNwdUBBMDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQlyZWcgPSA8MHhBMDE+OworCQl9OworCX07CisKIAljb21iaW5lcjogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTA0NDAwMDAgewogCQlzYW1zdW5nLGNvbWJpbmVyLW5yID0gPDE4PjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi1vZHJvaWQtY29tbW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9kcm9pZC1jb21tb24uZHRzaQppbmRleCBjNjk3ZmYwLi4zZmJmNTg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9kcm9pZC1jb21tb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9kcm9pZC1jb21tb24uZHRzaQpAQCAtNDUsNiArNDUsMTYgQEAKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLG9kcm9pZHgyLWF1ZGlvIjsKIAkJc2Ftc3VuZyxpMnMtY29udHJvbGxlciA9IDwmaTJzMD47CiAJCXNhbXN1bmcsYXVkaW8tY29kZWMgPSA8Jm1heDk4MDkwPjsKKwkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9ja19hdWRzcyBFWFlOT1NfTU9VVF9BVURTUz4sCisJCQkJPCZjbG9ja19hdWRzcyBFWFlOT1NfTU9VVF9JMlM+LAorCQkJCTwmY2xvY2tfYXVkc3MgRVhZTk9TX0RPVVRfU1JQPiwKKwkJCQk8JmNsb2NrX2F1ZHNzIEVYWU5PU19ET1VUX0FVRF9CVVM+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfRk9VVF9FUExMPiwKKwkJCQk8JmNsb2NrX2F1ZHNzIEVYWU5PU19NT1VUX0FVRFNTPjsKKwkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sCisJCQkJPDA+LAorCQkJCTwxOTIwMDAwMDA+LAorCQkJCTwxOTIwMDAwMD47CiAJfTsKIAogCW1tY0AxMjU1MDAwMCB7CkBAIC04MiwxOCArOTIsMzQgQEAKIAogCQlmaW1jXzA6IGZpbWNAMTE4MDAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMD4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzA+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMTogZmltY0AxMTgxMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMxPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMT47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE3NjAwMDAwMD47CiAJCX07CiAKIAkJZmltY18yOiBmaW1jQDExODIwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzI+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMyPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19NT1VUX01QTExfVVNFUl9UPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTc2MDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzM6IGZpbWNAMTE4MzAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMz4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzM+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItdHJhdHMyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItdHJhdHMyLmR0cwppbmRleCA1ZTA2NmNkLi4yOTIzMWI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLXRyYXRzMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi10cmF0czIuZHRzCkBAIC0xNCw2ICsxNCw3IEBACiAKIC9kdHMtdjEvOwogI2luY2x1ZGUgImV4eW5vczQ0MTIuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KIAogLyB7CiAJbW9kZWwgPSAiU2Ftc3VuZyBUcmF0cyAyIGJhc2VkIG9uIEV4eW5vczQ0MTIiOwpAQCAtMjIsNiArMjMsNyBAQAogCWFsaWFzZXMgewogCQlpMmM5ID0gJmkyY19hazg5NzU7CiAJCWkyYzEwID0gJmkyY19jbTM2NjUxOworCQlpMmMxMSA9ICZpMmNfbWF4Nzc2OTM7CiAJfTsKIAogCW1lbW9yeSB7CkBAIC0zOTksOCArNDAxLDYgQEAKIAkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVk1FTV9WRERfMi44ViI7CiAJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLW1lbS1vZmY7CiAJCQkJfTsKIAogCQkJCWxkbzIzX3JlZzogbGRvMjMgewpAQCAtNTAzLDggKzUwMyw2IEBACiAJCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZNRU1fVkRERl8zLjBWIjsKIAkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8Mjg1MDAwMD47CiAJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4NTAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItbWVtLW9mZjsKIAkJCQl9OwogCiAJCQkJYnVjazlfcmVnOiBidWNrOSB7CkBAIC01MTgsNiArNTE2LDQyIEBACiAJCX07CiAJfTsKIAorCWkyY19tYXg3NzY5MzogaTJjLWdwaW8tMSB7CisJCWNvbXBhdGlibGUgPSAiaTJjLWdwaW8iOworCQlncGlvcyA9IDwmZ3BtMiAwIEdQSU9fQUNUSVZFX0hJR0g+LCA8JmdwbTIgMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJaTJjLWdwaW8sZGVsYXktdXMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCisJCW1heDc3NjkzQDY2IHsKKwkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc2OTMiOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4MT47CisJCQlpbnRlcnJ1cHRzID0gPDUgMj47CisJCQlyZWcgPSA8MHg2Nj47CisKKwkJCXJlZ3VsYXRvcnMgeworCQkJCWVzYWZlb3V0MV9yZWc6IEVTQUZFT1VUMUAxIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVNBRkVPVVQxIjsKKwkJCQl9OworCQkJCWVzYWZlb3V0Ml9yZWc6IEVTQUZFT1VUMkAyIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVNBRkVPVVQyIjsKKwkJCQl9OworCQkJCWNoYXJnZXJfcmVnOiBDSEFSR0VSQDAgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJDSEFSR0VSIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb2FtcCA9IDw2MDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm9hbXAgPSA8MjU4MDAwMD47CisJCQkJfTsKKwkJCX07CisKKwkJCW1heDc3NjkzX2hhcHRpYyB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY5My1oYXB0aWMiOworCQkJCWhhcHRpYy1zdXBwbHkgPSA8JmxkbzI2X3JlZz47CisJCQkJcHdtcyA9IDwmcHdtIDAgMzgwMjIgMD47CisJCQl9OworCQl9OworCX07CisKIAltbWNAMTI1NTAwMDAgewogCQludW0tc2xvdHMgPSA8MT47CiAJCWJyb2tlbi1jZDsKQEAgLTUzNSw2ICs1NjksMTYgQEAKIAkJY2FwLW1tYy1oaWdoc3BlZWQ7CiAJfTsKIAorCXNkaGNpQDEyNTMwMDAwIHsKKwkJYnVzLXdpZHRoID0gPDQ+OworCQljZC1ncGlvcyA9IDwmZ3B4MyA0IDA+OworCQljZC1pbnZlcnRlZDsKKwkJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfYnVzND47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXZtbWMtc3VwcGx5ID0gPCZsZG8yMV9yZWc+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKwogCXNlcmlhbEAxMzgwMDAwMCB7CiAJCXN0YXR1cyA9ICJva2F5IjsKIAl9OwpAQCAtNTUxLDYgKzU5NSwxMSBAQAogCQlzdGF0dXMgPSAib2theSI7CiAJfTsKIAorCXRtdUAxMDBDMDAwMCB7CisJCXZ0bXUtc3VwcGx5ID0gPCZsZG8xMF9yZWc+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKwogCWkyY19hazg5NzU6IGkyYy1ncGlvLTAgewogCQljb21wYXRpYmxlID0gImkyYy1ncGlvIjsKIAkJZ3Bpb3MgPSA8JmdweTIgNCAwPiwgPCZncHkyIDUgMD47CkBAIC01OTgsNiArNjQ3LDEzIEBACiAJCX07CiAJfTsKIAorCXB3bTogcHdtQDEzOUQwMDAwIHsKKwkJcGluY3RybC0wID0gPCZwd20wX291dD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXNhbXN1bmcscHdtLW91dHB1dHMgPSA8MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCiAJZHNpXzA6IGRzaUAxMUM4MDAwMCB7CiAJCXZkZGNvcmUtc3VwcGx5ID0gPCZsZG84X3JlZz47CiAJCXZkZGlvLXN1cHBseSA9IDwmbGRvMTBfcmVnPjsKQEAgLTY2MywyOCArNzE5LDUxIEBACiAJCXBpbmN0cmwtMCA9IDwmY2FtX3BvcnRfYV9jbGtfYWN0aXZlICZjYW1fcG9ydF9iX2Nsa19hY3RpdmU+OwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlzdGF0dXMgPSAib2theSI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfQ0FNMD4sCisJCQkJICA8JmNsb2NrIENMS19NT1VUX0NBTTE+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD4sCisJCQkJCSA8JmNsb2NrIENMS19NT1VUX01QTExfVVNFUl9UPjsKIAogCQlmaW1jXzA6IGZpbWNAMTE4MDAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMD4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzA+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMTogZmltY0AxMTgxMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMxPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMT47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE3NjAwMDAwMD47CiAJCX07CiAKIAkJZmltY18yOiBmaW1jQDExODIwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzI+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMyPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19NT1VUX01QTExfVVNFUl9UPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTc2MDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzM6IGZpbWNAMTE4MzAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMz4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzM+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCQl9OwogCiAJCWNzaXNfMDogY3Npc0AxMTg4MDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCQl2ZGRjb3JlLXN1cHBseSA9IDwmbGRvOF9yZWc+OwogCQkJdmRkaW8tc3VwcGx5ID0gPCZsZG8xMF9yZWc+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE3NjAwMDAwMD47CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0NTSVMwPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19DU0lTMD47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE3NjAwMDAwMD47CiAKIAkJCS8qIENhbWVyYSBDICgzKSBNSVBJIENTSS0yIChDU0lTMCkgKi8KIAkJCXBvcnRAMyB7CkBAIC02OTgsMTAgKzc3NywxMyBAQAogCQl9OwogCiAJCWNzaXNfMTogY3Npc0AxMTg5MDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CiAJCQl2ZGRjb3JlLXN1cHBseSA9IDwmbGRvOF9yZWc+OwogCQkJdmRkaW8tc3VwcGx5ID0gPCZsZG8xMF9yZWc+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE2MDAwMDAwMD47Ci0JCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0NTSVMxPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19DU0lTMT47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE3NjAwMDAwMD47CiAKIAkJCS8qIENhbWVyYSBEICg0KSBNSVBJIENTSS0yIChDU0lTMSkgKi8KIAkJCXBvcnRANCB7CkBAIC03ODIsMyArODY0LDMxOSBAQAogCQlpby1jaGFubmVscyA9IDwmYWRjIDI+OyAgLyogQmF0dGVyeSB0ZW1wZXJhdHVyZSAqLwogCX07CiB9OworCismcGluY3RybF8wIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAwPjsKKworCXNsZWVwMDogc2xlZXAtc3RhdGVzIHsKKwkJUElOX1NMUChncGEwLTAsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGEwLTEsIE9VVDAsIE5PTkUpOworCQlQSU5fU0xQKGdwYTAtMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwYTAtMywgSU5QVVQsIFVQKTsKKwkJUElOX1NMUChncGEwLTQsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGEwLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTcsIElOUFVULCBVUCk7CisKKwkJUElOX1NMUChncGExLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGExLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGExLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGExLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGExLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGExLTUsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYi0wLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTEsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGItMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwYi0zLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGItNSwgSU5QVVQsIFVQKTsKKwkJUElOX1NMUChncGItNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYi03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGMwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTQsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYzEtMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwYzEtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BjMS0yLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BjMS0zLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BjMS00LCBJTlBVVCwgTk9ORSk7CisKKwkJUElOX1NMUChncGQwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQwLTMsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZDEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZDEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZDEtMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMywgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BmMC0wLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMC0xLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMC00LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMC02LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGYxLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYxLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYxLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYxLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYxLTQsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGYxLTUsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGYxLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYxLTcsIFBSRVYsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BmMi0wLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGYyLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYyLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYyLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYyLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYyLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYyLTYsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGYyLTcsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZjMtMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZjMtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMy0yLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGYzLTMsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwZjMtNCwgT1VUMSwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMy01LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGowLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwajAtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BqMC0yLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGowLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGowLTQsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwajAtNSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BqMC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BqMC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGoxLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGoxLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwajEtMiwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BqMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BqMS00LCBJTlBVVCwgRE9XTik7CisJfTsKK307CisKKyZwaW5jdHJsXzEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzbGVlcDE+OworCisJc2xlZXAxOiBzbGVlcC1zdGF0ZXMgeworCQlQSU5fU0xQKGdwazAtMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMC0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGswLTIsIE9VVDAsIE5PTkUpOworCQlQSU5fU0xQKGdwazAtMywgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMC00LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGswLTUsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazAtNiwgUFJFViwgTk9ORSk7CisKKwkJUElOX1NMUChncGsxLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsxLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsxLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsxLTMsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazEtNCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMS01LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGsxLTYsIFBSRVYsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BrMi0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGszLTAsIE9VVDAsIE5PTkUpOworCQlQSU5fU0xQKGdwazMtMSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwazMtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazMtMywgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwazMtNCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwazMtNSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwazMtNiwgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BsMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC00LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGwwLTYsIFBSRVYsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BsMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi02LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGwyLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0yLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMS0zLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMS00LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMS01LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMS02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0yLTAsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncG0yLTEsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncG0yLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTQsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTMtMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMy0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncG0zLTIsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwbTMtMywgT1VUMSwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMy00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG00LTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdweTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTAtNSwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B5MS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5MS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5MS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5MS0zLCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncHkyLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdweTItMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTItMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdweTItMywgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdweTItNCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdweTItNSwgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3B5My0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncHk0LTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdweTUtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B5Ni0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni03LCBJTlBVVCwgRE9XTik7CisJfTsKK307CisKKyZwaW5jdHJsXzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzbGVlcDI+OworCisJc2xlZXAyOiBzbGVlcC1zdGF0ZXMgeworCQlQSU5fU0xQKGdwei0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B6LTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHotMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwei0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B6LTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHotNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwei02LCBJTlBVVCwgRE9XTik7CisJfTsKK307CisKKyZwaW5jdHJsXzMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzbGVlcDM+OworCisJc2xlZXAzOiBzbGVlcC1zdGF0ZXMgeworCQlQSU5fU0xQKGdwdjAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B2MS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncHYyLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwdjMtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B2NC0wLCBJTlBVVCwgRE9XTik7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLmR0c2kKaW5kZXggZDhiYzA1OWUuLjBmNmVjOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLmR0c2kKQEAgLTIyLDYgKzIyLDM1IEBACiAvIHsKIAljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxMiIsICJzYW1zdW5nLGV4eW5vczQiOwogCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAQTAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4QTAwPjsKKwkJfTsKKworCQljcHVAQTAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4QTAxPjsKKwkJfTsKKworCQljcHVAQTAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4QTAyPjsKKwkJfTsKKworCQljcHVAQTAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4QTAzPjsKKwkJfTsKKwl9OworCiAJY29tYmluZXI6IGludGVycnVwdC1jb250cm9sbGVyQDEwNDQwMDAwIHsKIAkJc2Ftc3VuZyxjb21iaW5lci1uciA9IDwyMD47CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTUtcGluY3RybC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxNS1waW5jdHJsLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhZjljNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTUtcGluY3RybC5kdHNpCkBAIC0wLDAgKzEsNTczIEBACisvKgorICogU2Ftc3VuZydzIEV4eW5vczQ0MTUgU29DcyBwaW4tbXV4IGFuZCBwaW4tY29uZmlnIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIFNhbXN1bmcncyBFeHlub3M0NDE1IFNvQ3MgcGluLW11eCBhbmQgcGluLWNvbmZpZyBvcHRpb3NuIGFyZSBsaXN0ZWQgYXMgZGV2aWNlCisgKiB0cmVlIG5vZGVzIGFyZSBsaXN0ZWQgaW4gdGhpcyBmaWxlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCismcGluY3RybF8wIHsKKwlncGEwOiBncGEwIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BhMTogZ3BhMSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYjogZ3BiIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BjMDogZ3BjMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYzE6IGdwYzEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGQwOiBncGQwIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BkMTogZ3BkMSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwZjA6IGdwZjAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGYxOiBncGYxIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BmMjogZ3BmMiB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCXVhcnQwX2RhdGE6IHVhcnQwLWRhdGEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMC0wIiwgImdwYTAtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDB4Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl1YXJ0MF9mY3RsOiB1YXJ0MC1mY3RsIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTAtMiIsICJncGEwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVhcnQxX2RhdGE6IHVhcnQxLWRhdGEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMC00IiwgImdwYTAtNSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdWFydDFfZmN0bDogdWFydDEtZmN0bCB7CisJCXNhbXN1bmcscGlucyA9ICJncGEwLTYiLCAiZ3BhMC03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl1YXJ0Ml9kYXRhOiB1YXJ0Mi1kYXRhIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTEtMCIsICJncGExLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVhcnQyX2ZjdGw6IHVhcnQyLWZjdGwgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMS0yIiwgImdwYTEtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdWFydDNfZGF0YTogdWFydDMtZGF0YSB7CisJCXNhbXN1bmcscGlucyA9ICJncGExLTQiLCAiZ3BhMS01IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmMyX2J1czogaTJjMi1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMC02IiwgImdwYTAtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjM19idXM6IGkyYzMtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTEtMiIsICJncGExLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXNwaTBfYnVzOiBzcGkwLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGItMCIsICJncGItMiIsICJncGItMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjNF9idXM6IGkyYzQtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYi0wIiwgImdwYi0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlzcGkxX2J1czogc3BpMS1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiLTQiLCAiZ3BiLTYiLCAiZ3BiLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzVfYnVzOiBpMmM1LWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGItMiIsICJncGItMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJzMV9idXM6IGkyczEtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzAtMCIsICJncGMwLTEiLCAiZ3BjMC0yIiwgImdwYzAtMyIsCisJCQkJImdwYzAtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJzMl9idXM6IGkyczItYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzEtMCIsICJncGMxLTEiLCAiZ3BjMS0yIiwgImdwYzEtMyIsCisJCQkJImdwYzEtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcGNtMl9idXM6IHBjbTItYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzEtMCIsICJncGMxLTEiLCAiZ3BjMS0yIiwgImdwYzEtMyIsCisJCQkJImdwYzEtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjNl9idXM6IGkyYzYtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzEtMyIsICJncGMxLTQiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDw0PjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXNwaTJfYnVzOiBzcGkyLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGMxLTEiLCAiZ3BjMS0zIiwgImdwYzEtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDU+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcHdtMF9vdXQ6IHB3bTAtb3V0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcHdtMV9vdXQ6IHB3bTEtb3V0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcHdtMl9vdXQ6IHB3bTItb3V0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcHdtM19vdXQ6IHB3bTMtb3V0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjN19idXM6IGkyYzctYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMiIsICJncGQwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzBfYnVzOiBpMmMwLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGQxLTAiLCAiZ3BkMS0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmMxX2J1czogaTJjMS1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BkMS0yIiwgImdwZDEtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKKworJnBpbmN0cmxfMSB7CisJZ3BrMDogZ3BrMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwazE6IGdwazEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGsyOiBncGsyIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BrMzogZ3BrMyB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwbDA6IGdwbDAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncG0wOiBncG0wIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BtMTogZ3BtMSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwbTI6IGdwbTIgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncG0zOiBncG0zIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BtNDogZ3BtNCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdweDA6IGdweDAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPDAgMzIgMD4sIDwwIDMzIDA+LCA8MCAzNCAwPiwgPDAgMzUgMD4sCisJCQkJPDAgMzYgMD4sIDwwIDM3IDA+LCA8MCAzOCAwPiwgPDAgMzkgMD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdweDE6IGdweDEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPDAgNDAgMD4sIDwwIDQxIDA+LCA8MCA0MiAwPiwgPDAgNDMgMD4sCisJCQkJPDAgNDQgMD4sIDwwIDQ1IDA+LCA8MCA0NiAwPiwgPDAgNDcgMD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdweDI6IGdweDIgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncHgzOiBncHgzIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJc2QwX2Nsazogc2QwLWNsayB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTAiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9jbWQ6IHNkMC1jbWQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMC0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDBfY2Q6IHNkMC1jZCB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9yZHFzOiBzZDAtcmRxcyB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9idXMxOiBzZDAtYnVzLXdpZHRoMSB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9idXM0OiBzZDAtYnVzLXdpZHRoNCB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTQiLCAiZ3BrMC01IiwgImdwazAtNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QwX2J1czg6IHNkMC1idXMtd2lkdGg4IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbDAtMCIsICJncGwwLTEiLCAiZ3BsMC0yIiwgImdwbDAtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QxX2Nsazogc2QxLWNsayB7CisJCXNhbXN1bmcscGlucyA9ICJncGsxLTAiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9jbWQ6IHNkMS1jbWQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMS0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDFfY2Q6IHNkMS1jZCB7CisJCXNhbXN1bmcscGlucyA9ICJncGsxLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9idXMxOiBzZDEtYnVzLXdpZHRoMSB7CisJCXNhbXN1bmcscGlucyA9ICJncGsxLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9idXM0OiBzZDEtYnVzLXdpZHRoNCB7CisJCXNhbXN1bmcscGlucyA9ICJncGsxLTQiLCAiZ3BrMS01IiwgImdwazEtNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QyX2Nsazogc2QyLWNsayB7CisJCXNhbXN1bmcscGlucyA9ICJncGsyLTAiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8ND47CisJfTsKKworCXNkMl9jbWQ6IHNkMi1jbWQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMi0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDQ+OworCX07CisKKwlzZDJfY2Q6IHNkMi1jZCB7CisJCXNhbXN1bmcscGlucyA9ICJncGsyLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMl9idXMxOiBzZDItYnVzLXdpZHRoMSB7CisJCXNhbXN1bmcscGlucyA9ICJncGsyLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8ND47CisJfTsKKworCXNkMl9idXM0OiBzZDItYnVzLXdpZHRoNCB7CisJCXNhbXN1bmcscGlucyA9ICJncGsyLTQiLCAiZ3BrMi01IiwgImdwazItNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDw0PjsKKwl9OworCisJY2FtX3BvcnRfYl9pbzogY2FtLXBvcnQtYi1pbyB7CisJCXNhbXN1bmcscGlucyA9ICJncG0wLTAiLCAiZ3BtMC0xIiwgImdwbTAtMiIsICJncG0wLTMiLAorCQkJCSJncG0wLTQiLCAiZ3BtMC01IiwgImdwbTAtNiIsICJncG0wLTciLAorCQkJCSJncG0xLTAiLCAiZ3BtMS0xIiwgImdwbTItMCIsICJncG0yLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWNhbV9wb3J0X2JfY2xrX2FjdGl2ZTogY2FtLXBvcnQtYi1jbGstYWN0aXZlIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbTItMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJY2FtX3BvcnRfYl9jbGtfaWRsZTogY2FtLXBvcnQtYi1jbGstaWRsZSB7CisJCXNhbXN1bmcscGlucyA9ICJncG0yLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWZpbWNfaXNfaTJjMDogZmltYy1pcy1pMmMwIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbTQtMCIsICJncG00LTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWZpbWNfaXNfaTJjMTogZmltYy1pcy1pMmMxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbTQtMiIsICJncG00LTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWZpbWNfaXNfdWFydDogZmltYy1pcy11YXJ0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbTMtNSIsICJncG0zLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZwaW5jdHJsXzIgeworCWdwejogZ3B6IHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJaTJzMF9idXM6IGkyczAtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwei0wIiwgImdwei0xIiwgImdwei0yIiwgImdwei0zIiwKKwkJCQkiZ3B6LTQiLCAiZ3B6LTUiLCAiZ3B6LTYiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDE1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDE1LmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjOWIzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTUuZHRzaQpAQCAtMCwwICsxLDYwNCBAQAorLyoKKyAqIFNhbXN1bmcncyBFeHlub3M0NDE1IFNvQyBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCisgKiBTYW1zdW5nJ3MgRXh5bm9zNDQxNSBTb0MgZGV2aWNlIG5vZGVzIGFyZSBsaXN0ZWQgaW4gdGhpcyBmaWxlLiBFeHlub3M0NDE1CisgKiBiYXNlZCBib2FyZCBmaWxlcyBjYW4gaW5jbHVkZSB0aGlzIGZpbGUgYW5kIHByb3ZpZGUgdmFsdWVzIGZvciBib2FyZAorICogc3BlY2lmaWMgYmluZGluZ3MuCisgKgorICogTm90ZTogVGhpcyBmaWxlIGRvZXMgbm90IGluY2x1ZGUgZGV2aWNlIG5vZGVzIGZvciBhbGwgdGhlIGNvbnRyb2xsZXJzIGluCisgKiBFeHlub3M0NDE1IFNvQy4gQXMgZGV2aWNlIHRyZWUgY292ZXJhZ2UgZm9yIEV4eW5vczQ0MTUgaW5jcmVhc2VzLCBhZGRpdGlvbmFsCisgKiBub2RlcyBjYW4gYmUgYWRkZWQgdG8gdGhpcyBmaWxlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNDQxNS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2V4eW5vcy1hdWRzcy1jbGsuaD4KKworLyB7CisJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTUiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisKKwlhbGlhc2VzIHsKKwkJcGluY3RybDAgPSAmcGluY3RybF8wOworCQlwaW5jdHJsMSA9ICZwaW5jdHJsXzE7CisJCXBpbmN0cmwyID0gJnBpbmN0cmxfMjsKKwkJbXNoYzAgPSAmbXNoY18wOworCQltc2hjMSA9ICZtc2hjXzE7CisJCW1zaGMyID0gJm1zaGNfMjsKKwkJc3BpMCA9ICZzcGlfMDsKKwkJc3BpMSA9ICZzcGlfMTsKKwkJc3BpMiA9ICZzcGlfMjsKKwkJaTJjMCA9ICZpMmNfMDsKKwkJaTJjMSA9ICZpMmNfMTsKKwkJaTJjMiA9ICZpMmNfMjsKKwkJaTJjMyA9ICZpMmNfMzsKKwkJaTJjNCA9ICZpMmNfNDsKKwkJaTJjNSA9ICZpMmNfNTsKKwkJaTJjNiA9ICZpMmNfNjsKKwkJaTJjNyA9ICZpMmNfNzsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHUwOiBjcHVAYTAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4YTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMDAwPjsKKwkJfTsKKworCQljcHUxOiBjcHVAYTAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4YTAxPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMDAwPjsKKwkJfTsKKworCQljcHUyOiBjcHVAYTAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4YTAyPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMDAwPjsKKwkJfTsKKworCQljcHUzOiBjcHVAYTAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4YTAzPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMDAwPjsKKwkJfTsKKwl9OworCisJc29jOiBzb2MgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKworCQlzeXNyYW1AMDIwMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iOworCQkJcmVnID0gPDB4MDIwMjAwMDAgMHg1MDAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzID0gPDAgMHgwMjAyMDAwMCAweDUwMDAwPjsKKworCQkJc21wLXN5c3JhbUAwIHsKKwkJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zeXNyYW0iOworCQkJCXJlZyA9IDwweDAgMHgxMDAwPjsKKwkJCX07CisKKwkJCXNtcC1zeXNyYW1ANGYwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXN5c3JhbS1ucyI7CisJCQkJcmVnID0gPDB4NGYwMDAgMHgxMDAwPjsKKwkJCX07CisJCX07CisKKwkJcGluY3RybF8yOiBwaW5jdHJsQDAzODYwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDE1LXBpbmN0cmwiOworCQkJcmVnID0gPDB4MDM4NjAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAyNDIgMD47CisJCX07CisKKwkJY2hpcGlkQDEwMDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWNoaXBpZCI7CisJCQlyZWcgPSA8MHgxMDAwMDAwMCAweDEwMD47CisJCX07CisKKwkJc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyOiBzeXNjb25AMTAwMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQtc3lzcmVnIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgxMDAxMDAwMCAweDQwMD47CisJCX07CisKKwkJcG11X3N5c3RlbV9jb250cm9sbGVyOiBzeXN0ZW0tY29udHJvbGxlckAxMDAyMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxNS1wbXUiLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweDEwMDIwMDAwIDB4NDAwMD47CisJCX07CisKKwkJbWlwaV9waHk6IHZpZGVvLXBoeUAxMDAyMDcxMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVwdjIxMC1taXBpLXZpZGVvLXBoeSI7CisJCQlyZWcgPSA8MHgxMDAyMDcxMCA4PjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCX07CisKKwkJcGRfY2FtOiBjYW0tcG93ZXItZG9tYWluQDEwMDI0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBkIjsKKwkJCXJlZyA9IDwweDEwMDI0MDAwIDB4MjA+OworCQl9OworCisJCXBkX3R2OiB0di1wb3dlci1kb21haW5AMTAwMjQwMjAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcGQiOworCQkJcmVnID0gPDB4MTAwMjQwMjAgMHgyMD47CisJCX07CisKKwkJcGRfbWZjOiBtZmMtcG93ZXItZG9tYWluQDEwMDI0MDQwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBkIjsKKwkJCXJlZyA9IDwweDEwMDI0MDQwIDB4MjA+OworCQl9OworCisJCXBkX2czZDogZzNkLXBvd2VyLWRvbWFpbkAxMDAyNDA2MCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyNDA2MCAweDIwPjsKKwkJfTsKKworCQlwZF9sY2QwOiBsY2QwLXBvd2VyLWRvbWFpbkAxMDAyNDA4MCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyNDA4MCAweDIwPjsKKwkJfTsKKworCQlwZF9pc3AwOiBpc3AwLXBvd2VyLWRvbWFpbkAxMDAyNDBBMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyNDBBMCAweDIwPjsKKwkJfTsKKworCQlwZF9pc3AxOiBpc3AxLXBvd2VyLWRvbWFpbkAxMDAyNDBFMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyNDBFMCAweDIwPjsKKwkJfTsKKworCQljbXU6IGNsb2NrLWNvbnRyb2xsZXJAMTAwMzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTUtY211IjsKKwkJCXJlZyA9IDwweDEwMDMwMDAwIDB4MTgwMDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQl9OworCisJCXJ0YzogcnRjQDEwMDcwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3MzMjUwLXJ0YyI7CisJCQlyZWcgPSA8MHgxMDA3MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNzMgMD4sIDwwIDc0IDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltY3RAMTAwNTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtbWN0IjsKKwkJCXJlZyA9IDwweDEwMDUwMDAwIDB4ODAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAyMTggMD4sIDwwIDIxOSAwPiwgPDAgMjIwIDA+LCA8MCAyMjEgMD4sCisJCQkJICAgICA8MCAyMjMgMD4sIDwwIDIyNiAwPiwgPDAgMjI3IDA+LCA8MCAyMjggMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfRklOX1BMTD4sIDwmY211IENMS19NQ1Q+OworCQkJY2xvY2stbmFtZXMgPSAiZmluX3BsbCIsICJtY3QiOworCQl9OworCisJCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTA0ODEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHgxMDQ4MTAwMCAweDEwMDA+LAorCQkJICAgICAgPDB4MTA0ODIwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDEwNDg0MDAwIDB4MjAwMD4sCisJCQkgICAgICA8MHgxMDQ4NjAwMCAweDIwMDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMHhmMDQ+OworCQl9OworCisJCWwyYzogbDItY2FjaGUtY29udHJvbGxlckAxMDUwMjAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDMxMC1jYWNoZSI7CisJCQlyZWcgPSA8MHgxMDUwMjAwMCAweDEwMDA+OworCQkJY2FjaGUtdW5pZmllZDsKKwkJCWNhY2hlLWxldmVsID0gPDI+OworCQkJYXJtLHRhZy1sYXRlbmN5ID0gPDIgMiAxPjsKKwkJCWFybSxkYXRhLWxhdGVuY3kgPSA8MyAyIDE+OworCQkJYXJtLGRvdWJsZS1saW5lZmlsbCA9IDwxPjsKKwkJCWFybSxkb3VibGUtbGluZWZpbGwtaW5jciA9IDwwPjsKKwkJCWFybSxkb3VibGUtbGluZWZpbGwtd3JhcCA9IDwxPjsKKwkJCWFybSxwcmVmZXRjaC1kcm9wID0gPDE+OworCQkJYXJtLHByZWZldGNoLW9mZnNldCA9IDw3PjsKKwkJfTsKKworCQljbXVfZG1jOiBjbG9jay1jb250cm9sbGVyQDEwNUMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDE1LWNtdS1kbWMiOworCQkJcmVnID0gPDB4MTA1QzAwMDAgMHgzMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJfTsKKworCQlwaW5jdHJsXzE6IHBpbmN0cmxAMTEwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTUtcGluY3RybCI7CisJCQlyZWcgPSA8MHgxMTAwMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDIyNSAwPjsKKworCQkJd2FrZXVwLWludGVycnVwdC1jb250cm9sbGVyIHsKKwkJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC13YWtldXAtZWludCI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgNDggMD47CisJCQl9OworCQl9OworCisJCXBpbmN0cmxfMDogcGluY3RybEAxMTQwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxNS1waW5jdHJsIjsKKwkJCXJlZyA9IDwweDExNDAwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMjQwIDA+OworCQl9OworCisJCWhzb3RnOiBoc290Z0AxMjQ4MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjNjQwMC1oc290ZyI7CisJCQlyZWcgPSA8MHgxMjQ4MDAwMCAweDIwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNDEgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVVNCREVWSUNFPjsKKwkJCWNsb2NrLW5hbWVzID0gIm90ZyI7CisJCQlwaHlzID0gPCZleHlub3NfdXNicGh5IDA+OworCQkJcGh5LW5hbWVzID0gInVzYjItcGh5IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbXNoY18wOiBtc2hjQDEyNTEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLWR3LW1zaGMiOworCQkJcmVnID0gPDB4MTI1MTAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNDIgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfU0RNTUMwPiwgPCZjbXUgQ0xLX1NDTEtfTU1DMD47CisJCQljbG9jay1uYW1lcyA9ICJiaXUiLCAiY2l1IjsKKwkJCWZpZm8tZGVwdGggPSA8MHg4MD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltc2hjXzE6IG1zaGNAMTI1MjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtZHctbXNoYyI7CisJCQlyZWcgPSA8MHgxMjUyMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE0MyAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19TRE1NQzE+LCA8JmNtdSBDTEtfU0NMS19NTUMxPjsKKwkJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOworCQkJZmlmby1kZXB0aCA9IDwweDgwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1zaGNfMjogbXNoY0AxMjUzMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1kdy1tc2hjIjsKKwkJCXJlZyA9IDwweDEyNTMwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTQ0IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1NETU1DMj4sIDwmY211IENMS19TQ0xLX01NQzI+OworCQkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7CisJCQlmaWZvLWRlcHRoID0gPDB4ODA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZWhjaTogZWhjaUAxMjU4MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1laGNpIjsKKwkJCXJlZyA9IDwweDEyNTgwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNDAgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVVNCSE9TVD47CisJCQljbG9jay1uYW1lcyA9ICJ1c2Job3N0IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJcGh5cyA9IDwmZXh5bm9zX3VzYnBoeSAxPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKwkJCXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCXBoeXMgPSA8JmV4eW5vc191c2JwaHkgMj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCQlwb3J0QDIgeworCQkJCXJlZyA9IDwyPjsKKwkJCQlwaHlzID0gPCZleHlub3NfdXNicGh5IDM+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCQl9OworCisJCW9oY2k6IG9oY2lAMTI1OTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtb2hjaSI7CisJCQlyZWcgPSA8MHgxMjU5MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTQwIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1VTQkhPU1Q+OworCQkJY2xvY2stbmFtZXMgPSAidXNiaG9zdCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCXBoeXMgPSA8JmV4eW5vc191c2JwaHkgMT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCX07CisKKwkJZXh5bm9zX3VzYnBoeTogZXh5bm9zLXVzYnBoeUAxMjVCMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNHgxMi11c2IyLXBoeSI7CisJCQlyZWcgPSA8MHgxMjVCMDAwMCAweDEwMD47CisJCQlzYW1zdW5nLHBtdXJlZy1waGFuZGxlID0gPCZwbXVfc3lzdGVtX2NvbnRyb2xsZXI+OworCQkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19VU0JERVZJQ0U+LCA8Jnh1c2J4dGk+OworCQkJY2xvY2stbmFtZXMgPSAicGh5IiwgInJlZiI7CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlhbWJhIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGFtYmEtYnVzIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkJcmFuZ2VzOworCisJCQlwZG1hMDogcGRtYUAxMjY4MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMzAiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4MTI2ODAwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTM4IDA+OworCQkJCWNsb2NrcyA9IDwmY211IENMS19QRE1BMD47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCSNkbWEtY2VsbHMgPSA8MT47CisJCQkJI2RtYS1jaGFubmVscyA9IDw4PjsKKwkJCQkjZG1hLXJlcXVlc3RzID0gPDMyPjsKKwkJCX07CisKKwkJCXBkbWExOiBwZG1hQDEyNjkwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDMzMCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHgxMjY5MDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMzkgMD47CisJCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1BETUExPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJI2RtYS1jZWxscyA9IDwxPjsKKwkJCQkjZG1hLWNoYW5uZWxzID0gPDg+OworCQkJCSNkbWEtcmVxdWVzdHMgPSA8MzI+OworCQkJfTsKKwkJfTsKKworCQlhZGM6IGFkY0AxMjZDMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zMzI1MC1hZGMiLAorCQkJCSAgICAgInNhbXN1bmcsZXh5bm9zLWFkYy12MiI7CisJCQlyZWcgPSA8MHgxMjZDMDAwMCAweDEwMD4sIDwweDEwMDIwNzE4IDB4ND47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTM3IDA+OworCQkJY2xvY2stbmFtZXMgPSAiYWRjIiwgInNjbGsiOworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1RTQURDPiwgPCZjbXUgQ0xLX1NDTEtfVFNBREM+OworCQkJI2lvLWNoYW5uZWwtY2VsbHMgPSA8MT47CisJCQlpby1jaGFubmVsLXJhbmdlczsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2VyaWFsXzA6IHNlcmlhbEAxMzgwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEzODAwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMDkgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVUFSVDA+LCA8JmNtdSBDTEtfU0NMS19VQVJUMD47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2VyaWFsXzE6IHNlcmlhbEAxMzgxMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEzODEwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTAgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVUFSVDE+LCA8JmNtdSBDTEtfU0NMS19VQVJUMT47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2VyaWFsXzI6IHNlcmlhbEAxMzgyMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEzODIwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTEgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVUFSVDI+LCA8JmNtdSBDTEtfU0NMS19VQVJUMj47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2VyaWFsXzM6IHNlcmlhbEAxMzgzMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEzODMwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTIgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVUFSVDM+LCA8JmNtdSBDTEtfU0NMS19VQVJUMz47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzA6IGkyY0AxMzg2MDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzODYwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTMgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDMD47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjMF9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfMTogaTJjQDEzODcwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC1pMmMiOworCQkJcmVnID0gPDB4MTM4NzAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExNCAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19JMkMxPjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmMxX2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY18yOiBpMmNAMTM4ODAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLWkyYyI7CisJCQlyZWcgPSA8MHgxMzg4MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE1IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0kyQzI+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzJfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzM6IGkyY0AxMzg5MDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzODkwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTYgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDMz47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjM19idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfNDogaTJjQDEzOEEwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC1pMmMiOworCQkJcmVnID0gPDB4MTM4QTAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExNyAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19JMkM0PjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmM0X2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY181OiBpMmNAMTM4QjAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLWkyYyI7CisJCQlyZWcgPSA8MHgxMzhCMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE4IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0kyQzU+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzVfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzY6IGkyY0AxMzhDMDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzOEMwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTkgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDNj47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjNl9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfNzogaTJjQDEzOEQwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC1pMmMiOworCQkJcmVnID0gPDB4MTM4RDAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyMCAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19JMkM3PjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmM3X2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNwaV8wOiBzcGlAMTM5MjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3BpIjsKKwkJCXJlZyA9IDwweDEzOTIwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMjEgMD47CisJCQlkbWFzID0gPCZwZG1hMCA3PiwgPCZwZG1hMCA2PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1NQSTA+LCA8JmNtdSBDTEtfU0NMS19TUEkwPjsKKwkJCWNsb2NrLW5hbWVzID0gInNwaSIsICJzcGlfYnVzY2xrMCI7CisJCQlzYW1zdW5nLHNwaS1zcmMtY2xrID0gPDA+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmc3BpMF9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzcGlfMTogc3BpQDEzOTMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXNwaSI7CisJCQlyZWcgPSA8MHgxMzkzMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTIyIDA+OworCQkJZG1hcyA9IDwmcGRtYTEgNz4sIDwmcGRtYTEgNj47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19TUEkxPiwgPCZjbXUgQ0xLX1NDTEtfU1BJMT47CisJCQljbG9jay1uYW1lcyA9ICJzcGkiLCAic3BpX2J1c2NsazAiOworCQkJc2Ftc3VuZyxzcGktc3JjLWNsayA9IDwwPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnNwaTFfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc3BpXzI6IHNwaUAxMzk0MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zcGkiOworCQkJcmVnID0gPDB4MTM5NDAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyMyAwPjsKKwkJCWRtYXMgPSA8JnBkbWEwIDk+LCA8JnBkbWEwIDg+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfU1BJMj4sIDwmY211IENMS19TQ0xLX1NQSTI+OworCQkJY2xvY2stbmFtZXMgPSAic3BpIiwgInNwaV9idXNjbGswIjsKKwkJCXNhbXN1bmcsc3BpLXNyYy1jbGsgPSA8MD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZzcGkyX2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWNsb2NrX2F1ZHNzOiBjbG9jay1jb250cm9sbGVyQDAzODEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWF1ZHNzLWNsb2NrIjsKKwkJCXJlZyA9IDwweDAzODEwMDAwIDB4MEM+OworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQl9OworCisJCWkyczA6IGkyc0AzODMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNXB2MjEwLWkycyI7CisJCQlyZWcgPSA8MHgwMzgzMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTI0IDA+OworCQkJY2xvY2tzID0gPCZjbG9ja19hdWRzcyBFWFlOT1NfSTJTX0JVUz4sCisJCQkJPCZjbG9ja19hdWRzcyBFWFlOT1NfU0NMS19JMlM+OworCQkJY2xvY2stbmFtZXMgPSAiaWlzIiwgImkyc19vcGNsazAiOworCQkJZG1hcyA9IDwmcGRtYTEgMTA+LCA8JnBkbWExIDk+LCA8JnBkbWExIDg+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IiwgInR4LXNlYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMnMwX2J1cz47CisJCQlzYW1zdW5nLGlkbWEtYWRkciA9IDwweDAzMDAwMDAwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJcHdtOiBwd21AMTM5RDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcHdtIjsKKwkJCXJlZyA9IDwweDEzOUQwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTA0IDA+LCA8MCAxMDUgMD4sIDwwIDEwNiAwPiwKKwkJCQkgICAgIDwwIDEwNyAwPiwgPDAgMTA4IDA+OworCQkJI3B3bS1jZWxscyA9IDwzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJcG11IHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1wbXUiOworCQkJaW50ZXJydXB0cyA9IDwwIDE4IDA+LCA8MCAxOSAwPiwgPDAgMjAgMD4sIDwwIDIxIDA+OworCQl9OworCX07Cit9OworCisjaW5jbHVkZSAiZXh5bm9zNDQxNS1waW5jdHJsLmR0c2kiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLXBpbmN0cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTItcGluY3RybC5kdHNpCmluZGV4IDA4NjVhMmUuLmMxNDE5MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTItcGluY3RybC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTItcGluY3RybC5kdHNpCkBAIC0xMiw2ICsxMiwyMiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqLwogCisjZGVmaW5lIFBJTl9QVUxMX05PTkUJCTAKKyNkZWZpbmUgUElOX1BVTExfRE9XTgkJMQorI2RlZmluZSBQSU5fUFVMTF9VUAkJMworCisjZGVmaW5lIFBJTl9QRE5fT1VUMAkJMAorI2RlZmluZSBQSU5fUEROX09VVDEJCTEKKyNkZWZpbmUgUElOX1BETl9JTlBVVAkJMgorI2RlZmluZSBQSU5fUEROX1BSRVYJCTMKKworI2RlZmluZSBQSU5fU0xQKF9waW4sIF9tb2RlLCBfcHVsbCkJCQkJXAorCV9waW4gewkJCQkJCQlcCisJCXNhbXN1bmcscGlucyA9ICNfcGluOwkJCQlcCisJCXNhbXN1bmcscGluLWNvbi1wZG4gPSA8UElOX1BETl8gIyNfbW9kZT47CVwKKwkJc2Ftc3VuZyxwaW4tcHVkLXBkbiA9IDxQSU5fUFVMTF8gIyNfcHVsbD47CVwKKwl9CisKIC8gewogCXBpbmN0cmxAMTE0MDAwMDAgewogCQlncGEwOiBncGEwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTIuZHRzaQppbmRleCA4NjFiYjkxLi4yZTlmMWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNHgxMi5kdHNpCkBAIC0yNzEsNCArMjcxLDE0IEBACiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0eDEyLXVzYjItcGh5IjsKIAkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzX3JlZz47CiAJfTsKKworCXRtdUAxMDBDMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDEyLXRtdSI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmNvbWJpbmVyPjsKKwkJaW50ZXJydXB0cyA9IDwyIDQ+OworCQlyZWcgPSA8MHgxMDBDMDAwMCAweDEwMD47CisJCWNsb2NrcyA9IDwmY2xvY2sgMzgzPjsKKwkJY2xvY2stbmFtZXMgPSAidG11X2FwYmlmIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtYXJuZGFsZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLWFybmRhbGUuZHRzCmluZGV4IDNhY2Q5N2UuLjdlNzI4YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtYXJuZGFsZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1hcm5kYWxlLmR0cwpAQCAtNywxMiArNywxMyBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCisgKi8KIAogL2R0cy12MS87Ci0jaW5jbHVkZSAiZXh5bm9zNTI1MC5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSAiZXh5bm9zNTI1MC5kdHNpIgogCiAvIHsKIAltb2RlbCA9ICJJbnNpZ25hbCBBcm5kYWxlIGV2YWx1YXRpb24gYm9hcmQgYmFzZWQgb24gRVhZTk9TNTI1MCI7CkBAIC0yNiw0NjUgKzI3LDUyIEBACiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0FDMiwxMTUyMDAiOwogCX07CiAKLQlydGNAMTAxRTAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQotCWNvZGVjQDExMDAwMDAwIHsKLQkJc2Ftc3VuZyxtZmMtciA9IDwweDQzMDAwMDAwIDB4ODAwMDAwPjsKLQkJc2Ftc3VuZyxtZmMtbCA9IDwweDUxMDAwMDAwIDB4ODAwMDAwPjsKLQl9OwotCi0JaTJjQDEyQzYwMDAwIHsKLQkJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47Ci0JCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwyMDAwMD47Ci0JCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHg2Nj47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQlzNW04NzY3X3BtaWNANjYgewotCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1bTg3NjctcG1pYyI7Ci0JCQlyZWcgPSA8MHg2Nj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgzPjsKLQkJCWludGVycnVwdHMgPSA8MiBJUlFfVFlQRV9MRVZFTF9MT1c+OwotCi0JCQl2aW5iMS1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmIyLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmluYjMtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQl2aW5iNC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmI1LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmluYjYtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQl2aW5iNy1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmI4LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmluYjktc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0KLQkJCXZpbmwxLXN1cHBseSA9IDwmYnVjazdfcmVnPjsKLQkJCXZpbmwyLXN1cHBseSA9IDwmYnVjazdfcmVnPjsKLQkJCXZpbmwzLXN1cHBseSA9IDwmYnVjazdfcmVnPjsKLQkJCXZpbmw0LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmlubDUtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQl2aW5sNi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmw3LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmlubDgtc3VwcGx5ID0gPCZidWNrOF9yZWc+OwotCQkJdmlubDktc3VwcGx5ID0gPCZidWNrOF9yZWc+OwotCi0JCQlzNW04NzY3LHBtaWMtYnVjazItZHZzLXZvbHRhZ2UgPSA8MTMwMDAwMD47Ci0JCQlzNW04NzY3LHBtaWMtYnVjazMtZHZzLXZvbHRhZ2UgPSA8MTEwMDAwMD47Ci0JCQlzNW04NzY3LHBtaWMtYnVjazQtZHZzLXZvbHRhZ2UgPSA8MTIwMDAwMD47Ci0JCQlzNW04NzY3LHBtaWMtYnVjay1kdnMtZ3Bpb3MgPSA8JmdwZDEgMCAwPiwKLQkJCQkJCQk8JmdwZDEgMSAwPiwKLQkJCQkJCQk8JmdwZDEgMiAwPjsKLQkJCXM1bTg3NjcscG1pYy1idWNrLWRzLWdwaW9zID0gPCZncHgyIDMgMD4sCi0JCQkJCQkJPCZncHgyIDQgMD4sCi0JCQkJCQkJPCZncHgyIDUgMD47Ci0JCQlyZWd1bGF0b3JzIHsKLQkJCQlsZG8xX3JlZzogTERPMSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9BTElWRV8xLjBWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMl9yZWc6IExETzIgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMjhJT19EUF8xLjM1ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzNfcmVnOiBMRE8zIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0NPTU1PTjFfMS44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzRfcmVnOiBMRE80IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0lPUEVSSV8xLjhWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG81X3JlZzogTERPNSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9FWFRfMS44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzZfcmVnOiBMRE82IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX01QTExfMS4xViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzdfcmVnOiBMRE83IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX1hQTExfMS4xViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzhfcmVnOiBMRE84IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0NPTU1PTjJfMS4wViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzlfcmVnOiBMRE85IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREXzMzT05fMy4wViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMTBfcmVnOiBMRE8xMCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9DT01NT04zXzEuOFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8xMV9yZWc6IExETzExIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0FCQjJfMS44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzEyX3JlZzogTERPMTIgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfVVNCXzMuMFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8xM19yZWc6IExETzEzIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREUV9DMkNfV18xLjhWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMTRfcmVnOiBMRE8xNCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERDE4X0FCQjBfM18xLjhWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMTVfcmVnOiBMRE8xNSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERDEwX0NPTU1PTjRfMS4wViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzE2X3JlZzogTERPMTYgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWREQxOF9IU0lDXzEuOFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8xN19yZWc6IExETzE3IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREUV9NTUMyXzNfMi44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzE4X3JlZzogTERPMTggewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMzNPTl8yLjhWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8yMl9yZWc6IExETzIyIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVhUXzMzX09GRiI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMjNfcmVnOiBMRE8yMyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIkVYVF8yOF9PRkYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzI1X3JlZzogTERPMjUgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQVkREX0xETzI1IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8yNl9yZWc6IExETzI2IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVhUXzE4X09GRiI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJYnVjazFfcmVnOiBCVUNLMSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9taWYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5NTAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWJ1Y2syX3JlZzogQlVDSzIgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfYXJtIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTEyNTAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlidWNrM19yZWc6IEJVQ0szIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2ludCI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDkwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJYnVjazRfcmVnOiBCVUNLNCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9nM2QiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlidWNrNV9yZWc6IEJVQ0s1IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX01FTV8xLjM1ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDc1MDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTUwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJYnVjazdfcmVnOiBCVUNLNyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlBWRERfQlVDSzciOwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlidWNrOF9yZWc6IEJVQ0s4IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUFZERF9CVUNLOCI7Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWJ1Y2s5X3JlZzogQlVDSzkgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMzNfT0ZGX0VYVDEiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3NTAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCQkJfTsKLQkJfTsKLQl9OwotCi0JaTJjQDEyQzgwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCi0JCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwotCQlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NjYwMDA+OwotCQlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4NTA+OwotCi0JCWhkbWlkZGNANTAgewotCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtaGRtaWRkYyI7Ci0JCQlyZWcgPSA8MHg1MD47Ci0JCX07Ci0JfTsKLQotCWkyY0AxMkM5MDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQl3bTE4MTFhQDFhIHsKLQotCQkJY29tcGF0aWJsZSA9ICJ3bGYsd20xODExIjsKLQkJCXJlZyA9IDwweDFhPjsKLQotCQkJQVZERDItc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQlDUFZERC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCURCVkREMS1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCURCVkREMi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCURCVkREMy1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCUxETzFWREQtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQlTUEtWREQxLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJU1BLVkREMi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQotCQkJd2xmLGxkbzFlbmEgPSA8JmdwYjAgMCAwPjsKLQkJCXdsZixsZG8yZW5hID0gPCZncGIwIDEgMD47Ci0JCX07Ci0JfTsKLQotCWkyY0AxMkNFMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKLQkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKLQkJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDM4PjsKLQotCQloZG1pcGh5QDM4IHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEyLWhkbWlwaHkiOwotCQkJcmVnID0gPDB4Mzg+OwotCQl9OwotCX07Ci0KLQlpMmNAMTIxRDAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwotCQlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NDAwMDA+OwotCQlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4Mzg+OwotCi0JCXNhdGFfcGh5X2kyYzpzYXRhLXBoeUAzOCB7Ci0JCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjIjsKLQkJCXJlZyA9IDwweDM4PjsKLQkJfTsKLQl9OwotCi0Jc2F0YUAxMjJGMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OwotCi0Jc2F0YS1waHlAMTIxNzAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCXNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjLXBoYW5kbGUgPSA8JnNhdGFfcGh5X2kyYz47Ci0JfTsKLQotCW1tY18wOiBtbWNAMTIyMDAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCW51bS1zbG90cyA9IDwxPjsKLQkJYnJva2VuLWNkOwotCQljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OwotCQlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKLQkJdm1tYy1zdXBwbHkgPSA8Jm1tY19yZWc+OwotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JnNkMF9jbGsgJnNkMF9jbWQgJnNkMF9idXM0ICZzZDBfYnVzOD47Ci0JCWJ1cy13aWR0aCA9IDw4PjsKLQkJY2FwLW1tYy1oaWdoc3BlZWQ7Ci0JfTsKLQotCW1tY18yOiBtbWNAMTIyMjAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCW51bS1zbG90cyA9IDwxPjsKLQkJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47Ci0JCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47Ci0JCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47Ci0JCXZtbWMtc3VwcGx5ID0gPCZtbWNfcmVnPjsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXM0PjsKLQkJYnVzLXdpZHRoID0gPDQ+OwotCQlkaXNhYmxlLXdwOwotCQljYXAtc2QtaGlnaHNwZWVkOwotCX07Ci0KLQlpMnMwOiBpMnNAMDM4MzAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQogCWdwaW9fa2V5cyB7CiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKIAogCQltZW51IHsKIAkJCWxhYmVsID0gIlNXLVRBQ1QyIjsKLQkJCWdwaW9zID0gPCZncHgxIDQgMT47CisJCQlncGlvcyA9IDwmZ3B4MSA0IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPEtFWV9NRU5VPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQlob21lIHsKIAkJCWxhYmVsID0gIlNXLVRBQ1QzIjsKLQkJCWdwaW9zID0gPCZncHgxIDUgMT47CisJCQlncGlvcyA9IDwmZ3B4MSA1IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPEtFWV9IT01FPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQl1cCB7CiAJCQlsYWJlbCA9ICJTVy1UQUNUNCI7Ci0JCQlncGlvcyA9IDwmZ3B4MSA2IDE+OworCQkJZ3Bpb3MgPSA8JmdweDEgNiBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDxLRVlfVVA+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCWRvd24gewogCQkJbGFiZWwgPSAiU1ctVEFDVDUiOwotCQkJZ3Bpb3MgPSA8JmdweDEgNyAxPjsKKwkJCWdwaW9zID0gPCZncHgxIDcgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWxpbnV4LGNvZGUgPSA8S0VZX0RPV04+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCWJhY2sgewogCQkJbGFiZWwgPSAiU1ctVEFDVDYiOwotCQkJZ3Bpb3MgPSA8JmdweDIgMCAxPjsKKwkJCWdwaW9zID0gPCZncHgyIDAgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWxpbnV4LGNvZGUgPSA8S0VZX0JBQ0s+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCXdha2V1cCB7CiAJCQlsYWJlbCA9ICJTVy1UQUNUNyI7Ci0JCQlncGlvcyA9IDwmZ3B4MiAxIDE+OworCQkJZ3Bpb3MgPSA8JmdweDIgMSBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDxLRVlfV0FLRVVQPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAl9OwogCi0JaGRtaSB7Ci0JCWhwZC1ncGlvID0gPCZncHgzIDcgMj47Ci0JCXZkZF9vc2Mtc3VwcGx5ID0gPCZsZG8xMF9yZWc+OwotCQl2ZGRfcGxsLXN1cHBseSA9IDwmbGRvOF9yZWc+OwotCQl2ZGQtc3VwcGx5ID0gPCZsZG84X3JlZz47Ci0JfTsKLQogCXJlZ3VsYXRvcnMgewogCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTUwMiw3ICs5MCw3IEBACiAJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMzNPTl8yLjhWIjsKIAkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OwogCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQlncGlvID0gPCZncHgxIDEgMT47CisJCQlncGlvID0gPCZncHgxIDEgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKIAkJfTsKIApAQCAtNTIwLDQ2ICsxMDgsNDU1IEBACiAJCX07CiAJfTsKIAotCWRwLWNvbnRyb2xsZXJAMTQ1QjAwMDAgewotCQlzYW1zdW5nLGNvbG9yLXNwYWNlID0gPDA+OwotCQlzYW1zdW5nLGR5bmFtaWMtcmFuZ2UgPSA8MD47Ci0JCXNhbXN1bmcseWNiY3ItY29lZmYgPSA8MD47Ci0JCXNhbXN1bmcsY29sb3ItZGVwdGggPSA8MT47Ci0JCXNhbXN1bmcsbGluay1yYXRlID0gPDB4MGE+OwotCQlzYW1zdW5nLGxhbmUtY291bnQgPSA8ND47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OworCS8vIFNNU0MgVVNCMzUwMyBjb25uZWN0ZWQgaW4gaGFyZHdhcmUgb25seSBtb2RlIGFzIGEgUEhZCisJdXNiX2h1YjogdXNiLWh1YiB7CisJCWNvbXBhdGlibGUgPSAic21zYyx1c2IzNTAzYSI7CiAKLQlmaW1kOiBmaW1kQDE0NDAwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlkaXNwbGF5LXRpbWluZ3MgewotCQkJbmF0aXZlLW1vZGUgPSA8JnRpbWluZzA+OwotCQkJdGltaW5nMDogdGltaW5nQDAgewotCQkJCS8qIDI1NjB4MTYwMCBEUCBwYW5lbCAqLwotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMD47Ci0JCQkJaGFjdGl2ZSA9IDwyNTYwPjsKLQkJCQl2YWN0aXZlID0gPDE2MDA+OwotCQkJCWhmcm9udC1wb3JjaCA9IDw0OD47Ci0JCQkJaGJhY2stcG9yY2ggPSA8ODA+OwotCQkJCWhzeW5jLWxlbiA9IDwzMj47Ci0JCQkJdmJhY2stcG9yY2ggPSA8MTY+OwotCQkJCXZmcm9udC1wb3JjaCA9IDw4PjsKLQkJCQl2c3luYy1sZW4gPSA8Nj47CisJCXJlc2V0LWdwaW9zID0gPCZncHgzIDUgR1BJT19BQ1RJVkVfTE9XPjsKKwkJY29ubmVjdC1ncGlvcyA9IDwmZ3BkMSA3IEdQSU9fQUNUSVZFX0xPVz47CisJfTsKK307CisKKyZkcCB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsY29sb3Itc3BhY2UgPSA8MD47CisJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OworCXNhbXN1bmcseWNiY3ItY29lZmYgPSA8MD47CisJc2Ftc3VuZyxjb2xvci1kZXB0aCA9IDwxPjsKKwlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKKwlzYW1zdW5nLGxhbmUtY291bnQgPSA8ND47Cit9OworCismZmltZCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZGlzcGxheS10aW1pbmdzIHsKKwkJbmF0aXZlLW1vZGUgPSA8JnRpbWluZzA+OworCisJCXRpbWluZzA6IHRpbWluZ0AwIHsKKwkJCS8qIDI1NjB4MTYwMCBEUCBwYW5lbCAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwPjsKKwkJCWhhY3RpdmUgPSA8MjU2MD47CisJCQl2YWN0aXZlID0gPDE2MDA+OworCQkJaGZyb250LXBvcmNoID0gPDQ4PjsKKwkJCWhiYWNrLXBvcmNoID0gPDgwPjsKKwkJCWhzeW5jLWxlbiA9IDwzMj47CisJCQl2YmFjay1wb3JjaCA9IDwxNj47CisJCQl2ZnJvbnQtcG9yY2ggPSA8OD47CisJCQl2c3luYy1sZW4gPSA8Nj47CisJCX07CisJfTsKK307CisKKyZoZG1pIHsKKwlocGQtZ3BpbyA9IDwmZ3B4MyA3IEdQSU9fQUNUSVZFX0xPVz47CisJdmRkX29zYy1zdXBwbHkgPSA8JmxkbzEwX3JlZz47CisJdmRkX3BsbC1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKKwl2ZGQtc3VwcGx5ID0gPCZsZG84X3JlZz47Cit9OworCismaTJjXzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MjAwMDA+OworCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHg2Nj47CisKKwlzNW04NzY3X3BtaWNANjYgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVtODc2Ny1wbWljIjsKKwkJcmVnID0gPDB4NjY+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgzPjsKKwkJaW50ZXJydXB0cyA9IDwyIElSUV9UWVBFX0xFVkVMX0xPVz47CisKKwkJdmluYjEtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmIyLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5iMy1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmluYjQtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmI1LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5iNi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmluYjctc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmI4LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5iOS1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKworCQl2aW5sMS1zdXBwbHkgPSA8JmJ1Y2s3X3JlZz47CisJCXZpbmwyLXN1cHBseSA9IDwmYnVjazdfcmVnPjsKKwkJdmlubDMtc3VwcGx5ID0gPCZidWNrN19yZWc+OworCQl2aW5sNC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmlubDUtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmw2LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5sNy1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmlubDgtc3VwcGx5ID0gPCZidWNrOF9yZWc+OworCQl2aW5sOS1zdXBwbHkgPSA8JmJ1Y2s4X3JlZz47CisKKwkJczVtODc2NyxwbWljLWJ1Y2syLWR2cy12b2x0YWdlID0gPDEzMDAwMDA+OworCQlzNW04NzY3LHBtaWMtYnVjazMtZHZzLXZvbHRhZ2UgPSA8MTEwMDAwMD47CisJCXM1bTg3NjcscG1pYy1idWNrNC1kdnMtdm9sdGFnZSA9IDwxMjAwMDAwPjsKKwkJczVtODc2NyxwbWljLWJ1Y2stZHZzLWdwaW9zID0gPCZncGQxIDAgR1BJT19BQ1RJVkVfSElHSD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwmZ3BkMSAxIEdQSU9fQUNUSVZFX0hJR0g+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdwZDEgMiBHUElPX0FDVElWRV9ISUdIPjsKKwkJczVtODc2NyxwbWljLWJ1Y2stZHMtZ3Bpb3MgPSA8JmdweDIgMyBHUElPX0FDVElWRV9ISUdIPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdweDIgNCBHUElPX0FDVElWRV9ISUdIPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdweDIgNSBHUElPX0FDVElWRV9ISUdIPjsKKworCQlyZWd1bGF0b3JzIHsKKwkJCWxkbzFfcmVnOiBMRE8xIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfQUxJVkVfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMl9yZWc6IExETzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF8yOElPX0RQXzEuMzVWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8zX3JlZzogTERPMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0NPTU1PTjFfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvNF9yZWc6IExETzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9JT1BFUklfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvNV9yZWc6IExETzUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9FWFRfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvNl9yZWc6IExETzYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9NUExMXzEuMVYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzdfcmVnOiBMRE83IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfWFBMTF8xLjFWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG84X3JlZzogTERPOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0NPTU1PTjJfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvOV9yZWc6IExETzkgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF8zM09OXzMuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xMF9yZWc6IExETzEwIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfQ09NTU9OM18xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xMV9yZWc6IExETzExIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfQUJCMl8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xMl9yZWc6IExETzEyIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfVVNCXzMuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzEzX3JlZzogTERPMTMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERFFfQzJDX1dfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMTRfcmVnOiBMRE8xNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREMThfQUJCMF8zXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzE1X3JlZzogTERPMTUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERDEwX0NPTU1PTjRfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMTZfcmVnOiBMRE8xNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREMThfSFNJQ18xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xN19yZWc6IExETzE3IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERRX01NQzJfM18yLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xOF9yZWc6IExETzE4IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMzNPTl8yLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMjJfcmVnOiBMRE8yMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVhUXzMzX09GRiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzIzX3JlZzogTERPMjMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkVYVF8yOF9PRkYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8yNV9yZWc6IExETzI1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQVkREX0xETzI1IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMjZfcmVnOiBMRE8yNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVhUXzE4X09GRiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2sxX3JlZzogQlVDSzEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9taWYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDk1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJYnVjazJfcmVnOiBCVUNLMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2FybSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTEyNTAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlidWNrM19yZWc6IEJVQ0szIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfaW50IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2s0X3JlZzogQlVDSzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9nM2QiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2s1X3JlZzogQlVDSzUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9NRU1fMS4zNVYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDc1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1NTAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJYnVjazdfcmVnOiBCVUNLNyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUFZERF9CVUNLNyI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJYnVjazhfcmVnOiBCVUNLOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUFZERF9CVUNLOCI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJYnVjazlfcmVnOiBCVUNLOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREXzMzX09GRl9FWFQxIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCW9wX21vZGUgPSA8MT47CiAJCQl9OwogCQl9OwogCX07Cit9OwogCi0JdXNiX2h1Yl9idXMgewotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47CismaTJjXzIgeworCXN0YXR1cyA9ICJva2F5IjsKIAotCQkvLyBTTVNDIFVTQjM1MDMgY29ubmVjdGVkIGluIGhhcmR3YXJlIG9ubHkgbW9kZSBhcyBhIFBIWQotCQl1c2JfaHViOiB1c2JfaHViIHsKLQkJCWNvbXBhdGlibGUgPSAic21zYyx1c2IzNTAzYSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4NTA+OwogCi0JCQlyZXNldC1ncGlvcyA9IDwmZ3B4MyA1IDE+OwotCQkJY29ubmVjdC1ncGlvcyA9IDwmZ3BkMSA3IDE+OwotCQl9OworCWhkbWlkZGNANTAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1oZG1pZGRjIjsKKwkJcmVnID0gPDB4NTA+OwogCX07CiB9OworCismaTJjXzMgeworCXN0YXR1cyA9ICJva2F5IjsKKworCXdtMTgxMWFAMWEgeworCQljb21wYXRpYmxlID0gIndsZix3bTE4MTEiOworCQlyZWcgPSA8MHgxYT47CisKKwkJQVZERDItc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCUNQVkRELXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQlEQlZERDEtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCURCVkREMi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJREJWREQzLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQlMRE8xVkRELXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQlTUEtWREQxLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQlTUEtWREQyLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCisJCXdsZixsZG8xZW5hID0gPCZncGIwIDAgR1BJT19BQ1RJVkVfSElHSD47CisJCXdsZixsZG8yZW5hID0gPCZncGIwIDEgR1BJT19BQ1RJVkVfSElHSD47CisJfTsKK307CisKKyZpMmNfOCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4Mzg+OworCisJaGRtaXBoeUAzOCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEyLWhkbWlwaHkiOworCQlyZWcgPSA8MHgzOD47CisJfTsKK307CisKKyZpMmNfOSB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw0MDAwMD47CisJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDM4PjsKKworCXNhdGFfcGh5X2kyYzpzYXRhLXBoeUAzOCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3Mtc2F0YXBoeS1pMmMiOworCQlyZWcgPSA8MHgzOD47CisJfTsKK307CisKKyZpMnMwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbWZjIHsKKwlzYW1zdW5nLG1mYy1yID0gPDB4NDMwMDAwMDAgMHg4MDAwMDA+OworCXNhbXN1bmcsbWZjLWwgPSA8MHg1MTAwMDAwMCAweDgwMDAwMD47Cit9OworCismbW1jXzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJYnJva2VuLWNkOworCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXZtbWMtc3VwcGx5ID0gPCZtbWNfcmVnPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2QwX2NsayAmc2QwX2NtZCAmc2QwX2J1czQgJnNkMF9idXM4PjsKKwlidXMtd2lkdGggPSA8OD47CisJY2FwLW1tYy1oaWdoc3BlZWQ7Cit9OworCismbW1jXzIgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwyIDM+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisJdm1tYy1zdXBwbHkgPSA8Jm1tY19yZWc+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXM0PjsKKwlidXMtd2lkdGggPSA8ND47CisJZGlzYWJsZS13cDsKKwljYXAtc2QtaGlnaHNwZWVkOworfTsKKworJnJ0YyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNhdGEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzYXRhX3BoeSB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjLXBoYW5kbGUgPSA8JnNhdGFfcGh5X2kyYz47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbWRrNTI1MC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNtZGs1MjUwLmR0cwppbmRleCA2YTBmNGMwLi5iYzI3Y2MyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNtZGs1MjUwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNtZGs1MjUwLmR0cwpAQCAtNyw5ICs3LDExIEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KKyAqLwogCiAvZHRzLXYxLzsKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KICNpbmNsdWRlICJleHlub3M1MjUwLmR0c2kiCiAKIC8gewpAQCAtMjcsMTY1ICsyOSw2IEBACiAJCWJvb3RhcmdzID0gInJvb3Q9L2Rldi9yYW0wIHJ3IHJhbWRpc2s9ODE5MiBpbml0cmQ9MHg0MTAwMDAwMCw4TSBjb25zb2xlPXR0eVNBQzIsMTE1MjAwIGluaXQ9L2xpbnV4cmMiOwogCX07CiAKLQlydGNAMTAxRTAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQotCWkyY0AxMkM2MDAwMCB7Ci0JCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwotCQlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MjAwMDA+OwotCQlzdGF0dXMgPSAib2theSI7Ci0KLQkJZWVwcm9tQDUwIHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNTI0YWQweGQxIjsKLQkJCXJlZyA9IDwweDUwPjsKLQkJfTsKLQotCQltYXg3NzY4NkAwOSB7Ci0JCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3Njg2IjsKLQkJCXJlZyA9IDwweDA5PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDM+OwotCQkJaW50ZXJydXB0cyA9IDwyIDA+OwotCi0JCQl2b2x0YWdlLXJlZ3VsYXRvcnMgewotCQkJCWxkbzFfcmVnOiBMRE8xIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDEiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJfTsKLQotCQkJCWxkbzJfcmVnOiBMRE8yIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMlZfTERPX09VVDIiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJfTsKLQotCQkJCWxkbzNfcmVnOiBMRE8zIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDMiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJfTsKLQotCQkJCWxkbzRfcmVnOiBMRE80IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDIuOFZfTERPX09VVDQiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzVfcmVnOiBMRE81IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDUiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzZfcmVnOiBMRE82IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMVZfTERPX09VVDYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJfTsKLQotCQkJCWxkbzdfcmVnOiBMRE83IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMVZfTERPX09VVDciOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJfTsKLQotCQkJCWxkbzhfcmVnOiBMRE84IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDgiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzEwX3JlZzogTERPMTAgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTAiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzExX3JlZzogTERPMTEgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTEiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzEyX3JlZzogTERPMTIgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMy4wVl9MRE9fT1VUMTIiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzEzX3JlZzogTERPMTMgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTMiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzE0X3JlZzogTERPMTQgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTQiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzE1X3JlZzogTERPMTUgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4wVl9MRE9fT1VUMTUiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzE2X3JlZzogTERPMTYgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWJ1Y2sxX3JlZzogQlVDSzEgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbWlmIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTUwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCX07Ci0KLQkJCQlidWNrMl9yZWc6IEJVQ0syIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2FybSI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQl9OwotCi0JCQkJYnVjazNfcmVnOiBCVUNLMyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9pbnQiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJfTsKLQotCQkJCWJ1Y2s0X3JlZzogQlVDSzQgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfZzNkIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCX07Ci0KLQkJCQlidWNrNV9yZWc6IEJVQ0s1IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfQlVDS19PVVQ1IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQl9OwotCQkJfTsKLQkJfTsKLQl9OwotCiAJdmRkOiBmaXhlZC1yZWd1bGF0b3JAMCB7CiAJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKIAkJcmVndWxhdG9yLW5hbWUgPSAidmRkLXN1cHBseSI7CkBAIC0yMTAsMTQ2ICs1Myw2IEBACiAJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJfTsKIAotCWkyY0AxMkM3MDAwMCB7Ci0JCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwotCQlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MjAwMDA+OwotCQlzdGF0dXMgPSAib2theSI7Ci0KLQkJZWVwcm9tQDUxIHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNTI0YWQweGQxIjsKLQkJCXJlZyA9IDwweDUxPjsKLQkJfTsKLQotCQl3bTg5OTQ6IHdtODk5NEAxYSB7Ci0JCQljb21wYXRpYmxlID0gIndsZix3bTg5OTQiOwotCQkJcmVnID0gPDB4MWE+OwotCi0JCQlncGlvLWNvbnRyb2xsZXI7Ci0JCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQotCQkJY2xvY2tzID0gPCZjb2RlY19tY2xrPjsKLQkJCWNsb2NrLW5hbWVzID0gIk1DTEsxIjsKLQotCQkJQVZERDItc3VwcGx5ID0gPCZ2ZGQ+OwotCQkJQ1BWREQtc3VwcGx5ID0gPCZ2ZGQ+OwotCQkJREJWREQtc3VwcGx5ID0gPCZkYnZkZD47Ci0JCQlTUEtWREQxLXN1cHBseSA9IDwmc3BrdmRkPjsKLQkJCVNQS1ZERDItc3VwcGx5ID0gPCZzcGt2ZGQ+OwotCQl9OwotCX07Ci0KLQlpMmNAMTIxRDAwMDAgewotCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKLQkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDQwMDAwPjsKLQkJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDM4PjsKLQkJc3RhdHVzID0gIm9rYXkiOwotCi0JCXNhdGFfcGh5X2kyYzpzYXRhLXBoeUAzOCB7Ci0JCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjIjsKLQkJCXJlZyA9IDwweDM4PjsKLQkJfTsKLQl9OwotCi0JaTJjQDEyQzgwMDAwIHsKLQkJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47Ci0JCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQloZG1pZGRjQDUwIHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWhkbWlkZGMiOwotCQkJcmVnID0gPDB4NTA+OwotCQl9OwotCX07Ci0KLQlpMmNAMTJDRTAwMDAgewotCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKLQkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKLQkJc3RhdHVzID0gIm9rYXkiOwotCi0JCWhkbWlwaHlAMzggewotCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItaGRtaXBoeSI7Ci0JCQlyZWcgPSA8MHgzOD47Ci0JCX07Ci0JfTsKLQotCXNhdGFAMTIyRjAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQotCXNhdGEtcGh5QDEyMTcwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlzYW1zdW5nLGV4eW5vcy1zYXRhcGh5LWkyYy1waGFuZGxlID0gPCZzYXRhX3BoeV9pMmM+OwotCX07Ci0KLQltbWNAMTIyMDAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCW51bS1zbG90cyA9IDwxPjsKLQkJYnJva2VuLWNkOwotCQljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OwotCQlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZzZDBfY2xrICZzZDBfY21kICZzZDBfYnVzNCAmc2QwX2J1czg+OwotCQlidXMtd2lkdGggPSA8OD47Ci0JCWNhcC1tbWMtaGlnaHNwZWVkOwotCX07Ci0KLQltbWNAMTIyMjAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCW51bS1zbG90cyA9IDwxPjsKLQkJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47Ci0JCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47Ci0JCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47Ci0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmc2QyX2NsayAmc2QyX2NtZCAmc2QyX2NkICZzZDJfYnVzND47Ci0JCWJ1cy13aWR0aCA9IDw0PjsKLQkJZGlzYWJsZS13cDsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQl9OwotCi0Jc3BpXzE6IHNwaUAxMmQzMDAwMCB7Ci0JCWNzLWdwaW9zID0gPCZncGEyIDUgMD47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQl3MjVxODBid0AwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljb21wYXRpYmxlID0gIncyNXg4MCI7Ci0JCQlyZWcgPSA8MD47Ci0JCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwxMDAwMDAwPjsKLQotCQkJY29udHJvbGxlci1kYXRhIHsKLQkJCQlzYW1zdW5nLHNwaS1mZWVkYmFjay1kZWxheSA9IDwwPjsKLQkJCX07Ci0KLQkJCXBhcnRpdGlvbkAwIHsKLQkJCQlsYWJlbCA9ICJVLUJvb3QiOwotCQkJCXJlZyA9IDwweDAgMHg0MDAwMD47Ci0JCQkJcmVhZC1vbmx5OwotCQkJfTsKLQotCQkJcGFydGl0aW9uQDQwMDAwIHsKLQkJCQlsYWJlbCA9ICJLZXJuZWwiOwotCQkJCXJlZyA9IDwweDQwMDAwIDB4YzAwMDA+OwotCQkJfTsKLQkJfTsKLQl9OwotCi0JaGRtaSB7Ci0JCWhwZC1ncGlvID0gPCZncHgzIDcgMD47Ci0JfTsKLQotCWNvZGVjQDExMDAwMDAwIHsKLQkJc2Ftc3VuZyxtZmMtciA9IDwweDQzMDAwMDAwIDB4ODAwMDAwPjsKLQkJc2Ftc3VuZyxtZmMtbCA9IDwweDUxMDAwMDAwIDB4ODAwMDAwPjsKLQl9OwotCi0JaTJzMDogaTJzQDAzODMwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07Ci0KIAlzb3VuZCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzbWRrLXdtODk5NCI7CiAKQEAgLTM1Nyw0MiArNjAsNiBAQAogCQlzYW1zdW5nLGF1ZGlvLWNvZGVjID0gPCZ3bTg5OTQ+OwogCX07CiAKLQl1c2JAMTIxMTAwMDAgewotCQlzYW1zdW5nLHZidXMtZ3BpbyA9IDwmZ3B4MiA2IDA+OwotCX07Ci0KLQlkcC1jb250cm9sbGVyQDE0NUIwMDAwIHsKLQkJc2Ftc3VuZyxjb2xvci1zcGFjZSA9IDwwPjsKLQkJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OwotCQlzYW1zdW5nLHljYmNyLWNvZWZmID0gPDA+OwotCQlzYW1zdW5nLGNvbG9yLWRlcHRoID0gPDE+OwotCQlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKLQkJc2Ftc3VuZyxsYW5lLWNvdW50ID0gPDQ+OwotCi0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmZHBfaHBkPjsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07Ci0KLQlmaW1kQDE0NDAwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlkaXNwbGF5LXRpbWluZ3MgewotCQkJbmF0aXZlLW1vZGUgPSA8JnRpbWluZzA+OwotCQkJdGltaW5nMDogdGltaW5nQDAgewotCQkJCS8qIDEyODB4ODAwICovCi0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwPjsKLQkJCQloYWN0aXZlID0gPDEyODA+OwotCQkJCXZhY3RpdmUgPSA8ODAwPjsKLQkJCQloZnJvbnQtcG9yY2ggPSA8ND47Ci0JCQkJaGJhY2stcG9yY2ggPSA8ND47Ci0JCQkJaHN5bmMtbGVuID0gPDQ+OwotCQkJCXZiYWNrLXBvcmNoID0gPDQ+OwotCQkJCXZmcm9udC1wb3JjaCA9IDw0PjsKLQkJCQl2c3luYy1sZW4gPSA8ND47Ci0JCQl9OwotCQl9OwotCX07Ci0KIAlmaXhlZC1yYXRlLWNsb2NrcyB7CiAJCXh4dGkgewogCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGNsb2NrLXh4dGkiOwpAQCAtNDA2LDMgKzczLDM0MCBAQAogCQl9OwogCX07CiB9OworCismZHAgeworCXNhbXN1bmcsY29sb3Itc3BhY2UgPSA8MD47CisJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OworCXNhbXN1bmcseWNiY3ItY29lZmYgPSA8MD47CisJc2Ftc3VuZyxjb2xvci1kZXB0aCA9IDwxPjsKKwlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKKwlzYW1zdW5nLGxhbmUtY291bnQgPSA8ND47CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmZHBfaHBkPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZWhjaSB7CisJc2Ftc3VuZyx2YnVzLWdwaW8gPSA8JmdweDIgNiBHUElPX0FDVElWRV9ISUdIPjsKK307CisKKyZmaW1kIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlkaXNwbGF5LXRpbWluZ3MgeworCQluYXRpdmUtbW9kZSA9IDwmdGltaW5nMD47CisKKwkJdGltaW5nMDogdGltaW5nQDAgeworCQkJLyogMTI4MHg4MDAgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMD47CisJCQloYWN0aXZlID0gPDEyODA+OworCQkJdmFjdGl2ZSA9IDw4MDA+OworCQkJaGZyb250LXBvcmNoID0gPDQ+OworCQkJaGJhY2stcG9yY2ggPSA8ND47CisJCQloc3luYy1sZW4gPSA8ND47CisJCQl2YmFjay1wb3JjaCA9IDw0PjsKKwkJCXZmcm9udC1wb3JjaCA9IDw0PjsKKwkJCXZzeW5jLWxlbiA9IDw0PjsKKwkJfTsKKwl9OworfTsKKworJmhkbWkgeworCWhwZC1ncGlvID0gPCZncHgzIDcgR1BJT19BQ1RJVkVfSElHSD47Cit9OworCismaTJjXzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MjAwMDA+OworCisJZWVwcm9tQDUwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1MjRhZDB4ZDEiOworCQlyZWcgPSA8MHg1MD47CisJfTsKKworCW1heDc3Njg2QDA5IHsKKwkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY4NiI7CisJCXJlZyA9IDwweDA5PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mz47CisJCWludGVycnVwdHMgPSA8MiBJUlFfVFlQRV9OT05FPjsKKworCQl2b2x0YWdlLXJlZ3VsYXRvcnMgeworCQkJbGRvMV9yZWc6IExETzEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjBWX0xET19PVVQxIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvMl9yZWc6IExETzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjJWX0xET19PVVQyIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvM19yZWc6IExETzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQzIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvNF9yZWc6IExETzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAyLjhWX0xET19PVVQ0IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzVfcmVnOiBMRE81IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUNSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG82X3JlZzogTERPNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMVZfTERPX09VVDYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG83X3JlZzogTERPNyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMVZfTERPX09VVDciOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG84X3JlZzogTERPOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDgiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJfTsKKworCQkJbGRvMTBfcmVnOiBMRE8xMCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDEwIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzExX3JlZzogTERPMTEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxMSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8xMl9yZWc6IExETzEyIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMy4wVl9MRE9fT1VUMTIiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJfTsKKworCQkJbGRvMTNfcmVnOiBMRE8xMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDEzIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzE0X3JlZzogTERPMTQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxNCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8xNV9yZWc6IExETzE1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4wVl9MRE9fT1VUMTUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJfTsKKworCQkJbGRvMTZfcmVnOiBMRE8xNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDE2IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWJ1Y2sxX3JlZzogQlVDSzEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9taWYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDk1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisKKwkJCWJ1Y2syX3JlZzogQlVDSzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9hcm0iOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisKKwkJCWJ1Y2szX3JlZzogQlVDSzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9pbnQiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDkwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisKKwkJCWJ1Y2s0X3JlZzogQlVDSzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9nM2QiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisKKwkJCWJ1Y2s1X3JlZzogQlVDSzUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0JVQ0tfT1VUNSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZpMmNfMSB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwyMDAwMD47CisKKwllZXByb21ANTEgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsczUyNGFkMHhkMSI7CisJCXJlZyA9IDwweDUxPjsKKwl9OworCisJd204OTk0OiB3bTg5OTRAMWEgeworCQljb21wYXRpYmxlID0gIndsZix3bTg5OTQiOworCQlyZWcgPSA8MHgxYT47CisKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQljbG9ja3MgPSA8JmNvZGVjX21jbGs+OworCQljbG9jay1uYW1lcyA9ICJNQ0xLMSI7CisKKwkJQVZERDItc3VwcGx5ID0gPCZ2ZGQ+OworCQlDUFZERC1zdXBwbHkgPSA8JnZkZD47CisJCURCVkRELXN1cHBseSA9IDwmZGJ2ZGQ+OworCQlTUEtWREQxLXN1cHBseSA9IDwmc3BrdmRkPjsKKwkJU1BLVkREMi1zdXBwbHkgPSA8JnNwa3ZkZD47CisJfTsKK307CisKKyZpMmNfMiB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisKKwloZG1pZGRjQDUwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtaGRtaWRkYyI7CisJCXJlZyA9IDwweDUwPjsKKwl9OworfTsKKworJmkyY184IHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKworCWhkbWlwaHlAMzggeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1oZG1pcGh5IjsKKwkJcmVnID0gPDB4Mzg+OworCX07Cit9OworCismaTJjXzkgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NDAwMDA+OworCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHgzOD47CisKKwlzYXRhX3BoeV9pMmM6IHNhdGEtcGh5QDM4IHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vcy1zYXRhcGh5LWkyYyI7CisJCXJlZyA9IDwweDM4PjsKKwl9OworfTsKKworJmkyczAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtZmMgeworCXNhbXN1bmcsbWZjLXIgPSA8MHg0MzAwMDAwMCAweDgwMDAwMD47CisJc2Ftc3VuZyxtZmMtbCA9IDwweDUxMDAwMDAwIDB4ODAwMDAwPjsKK307CisKKyZtbWNfMCB7CisJc3RhdHVzID0gIm9rYXkiOworCW51bS1zbG90cyA9IDwxPjsKKwlicm9rZW4tY2Q7CisJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwyIDM+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9jbGsgJnNkMF9jbWQgJnNkMF9idXM0ICZzZDBfYnVzOD47CisJYnVzLXdpZHRoID0gPDg+OworCWNhcC1tbWMtaGlnaHNwZWVkOworfTsKKworJm1tY18yIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXM0PjsKKwlidXMtd2lkdGggPSA8ND47CisJZGlzYWJsZS13cDsKKwljYXAtc2QtaGlnaHNwZWVkOworfTsKKworJnJ0YyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNhdGEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzYXRhX3BoeSB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjLXBoYW5kbGUgPSA8JnNhdGFfcGh5X2kyYz47Cit9OworCismc3BpXzEgeworCXN0YXR1cyA9ICJva2F5IjsKKwljcy1ncGlvcyA9IDwmZ3BhMiA1IEdQSU9fQUNUSVZFX0hJR0g+OworCisJdzI1cTgwYndAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJ3MjV4ODAiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDA+OworCisJCWNvbnRyb2xsZXItZGF0YSB7CisJCQlzYW1zdW5nLHNwaS1mZWVkYmFjay1kZWxheSA9IDwwPjsKKwkJfTsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJVLUJvb3QiOworCQkJcmVnID0gPDB4MCAweDQwMDAwPjsKKwkJCXJlYWQtb25seTsKKwkJfTsKKworCQlwYXJ0aXRpb25ANDAwMDAgeworCQkJbGFiZWwgPSAiS2VybmVsIjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4YzAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbm93LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtc25vdy5kdHMKaW5kZXggNjA0MjlhZC4uZWZmYWYyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbm93LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNub3cuZHRzCkBAIC02LDEwICs2LDEzIEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KKyAqLwogCiAvZHRzLXYxLzsKICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9tYXhpbSxtYXg3NzY4Ni5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAjaW5jbHVkZSAiZXh5bm9zNTI1MC5kdHNpIgogCiAvIHsKQEAgLTI1LDc2ICsyOCw3IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JfTsKLQotCXJ0Y0AxMDFFMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OwotCi0JcGluY3RybEAxMTQwMDAwMCB7Ci0JCWVjX2lycTogZWMtaXJxIHsKLQkJCXNhbXN1bmcscGlucyA9ICJncHgxLTYiOwotCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47Ci0JCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJc2QzX2Nsazogc2QzLWNsayB7Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJc2QzX2NtZDogc2QzLWNtZCB7Ci0JCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJc2QzX2J1czQ6IHNkMy1idXMtd2lkdGg0IHsKLQkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKLQkJfTsKLQotCQltYXg5ODA5NV9lbjogbWF4OTgwOTUtZW4gewotCQkJc2Ftc3VuZyxwaW5zID0gImdweDEtNyI7Ci0JCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKLQkJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKLQkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKLQkJfTsKLQotCQl0cHM2NTA5MF9pcnE6IHRwczY1MDkwLWlycSB7Ci0JCQlzYW1zdW5nLHBpbnMgPSAiZ3B4Mi02IjsKLQkJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OwotCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OwotCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwotCQl9OwotCi0JCXVzYjNfdmJ1c19lbjogdXNiMy12YnVzLWVuIHsKLQkJCXNhbXN1bmcscGlucyA9ICJncHgyLTciOwotCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MT47Ci0JCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJaGRtaV9ocGRfaXJxOiBoZG1pLWhwZC1pcnEgewotCQkJc2Ftc3VuZyxwaW5zID0gImdweDMtNyI7Ci0JCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKLQkJCXNhbXN1bmcscGluLXB1ZCA9IDwxPjsKLQkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKLQkJfTsKLQl9OwotCi0JcGluY3RybEAxMzQwMDAwMCB7Ci0JCWFyYl90aGVpcl9jbGFpbTogYXJiLXRoZWlyLWNsYWltIHsKLQkJCXNhbXN1bmcscGlucyA9ICJncGUwLTQiOwotCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47Ci0JCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJYXJiX291cl9jbGFpbTogYXJiLW91ci1jbGFpbSB7Ci0JCQlzYW1zdW5nLHBpbnMgPSAiZ3BmMC0zIjsKLQkJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDE+OwotCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OwotCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwotCQl9OworCQlib290YXJncyA9ICJjb25zb2xlPXR0eTEiOwogCX07CiAKIAlncGlvLWtleXMgewpAQCAtMTAyLDE0ICszNiwxNCBAQAogCiAJCXBvd2VyIHsKIAkJCWxhYmVsID0gIlBvd2VyIjsKLQkJCWdwaW9zID0gPCZncHgxIDMgMT47Ci0JCQlsaW51eCxjb2RlID0gPDExNj47IC8qIEtFWV9QT1dFUiAqLworCQkJZ3Bpb3MgPSA8JmdweDEgMyBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCWxpZC1zd2l0Y2ggewogCQkJbGFiZWwgPSAiTGlkIjsKLQkJCWdwaW9zID0gPCZncHgzIDUgMT47CisJCQlncGlvcyA9IDwmZ3B4MyA1IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxpbnB1dC10eXBlID0gPDU+OyAvKiBFVl9TVyAqLwogCQkJbGludXgsY29kZSA9IDwwPjsgLyogU1dfTElEICovCiAJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwxPjsKQEAgLTEzMCw4ICs2NCw4IEBACiAKIAkJaTJjLXBhcmVudCA9IDwmey9pMmNAMTJDQTAwMDB9PjsKIAotCQlvdXItY2xhaW0tZ3BpbyA9IDwmZ3BmMCAzIDE+OwotCQl0aGVpci1jbGFpbS1ncGlvcyA9IDwmZ3BlMCA0IDE+OworCQlvdXItY2xhaW0tZ3BpbyA9IDwmZ3BmMCAzIEdQSU9fQUNUSVZFX0xPVz47CisJCXRoZWlyLWNsYWltLWdwaW9zID0gPCZncGUwIDQgR1BJT19BQ1RJVkVfTE9XPjsKIAkJc2xldy1kZWxheS11cyA9IDwxMD47CiAJCXdhaXQtcmV0cnktdXMgPSA8MzAwMD47CiAJCXdhaXQtZnJlZS11cyA9IDw1MDAwMD47CkBAIC0xNTQsNyArODgsNyBAQAogCQkJY3Jvc19lYzogZW1iZWRkZWQtY29udHJvbGxlciB7CiAJCQkJY29tcGF0aWJsZSA9ICJnb29nbGUsY3Jvcy1lYy1pMmMiOwogCQkJCXJlZyA9IDwweDFlPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDYgMD47CisJCQkJaW50ZXJydXB0cyA9IDw2IElSUV9UWVBFX05PTkU+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZlY19pcnE+OwpAQCAtMjQxLDEzICsxNzUsNiBAQAogCX07CiAKIAlpMmNAMTJDRDAwMDAgewotCQltYXg5ODA5NTogY29kZWNAMTEgewotCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg5ODA5NSI7Ci0JCQlyZWcgPSA8MHgxMT47Ci0JCQlwaW5jdHJsLTAgPSA8Jm1heDk4MDk1X2VuPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCX07Ci0KIAkJcHRuMzQ2MDogbHZkcy1icmlkZ2VAMjAgewogCQkJY29tcGF0aWJsZSA9ICJueHAscHRuMzQ2MCI7CiAJCQlyZWcgPSA8MHgyMD47CkBAIC0yNTgsMTAgKzE4NSw2IEBACiAJCX07CiAJfTsKIAotCWkyczA6IGkyc0AwMzgzMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OwotCiAJc291bmQgewogCQljb21wYXRpYmxlID0gImdvb2dsZSxzbm93LWF1ZGlvLW1heDk4MDk1IjsKIApAQCAtMjc1LDIwICsxOTgsMTIgQEAKIAkJcmVndWxhdG9yLW5hbWUgPSAiUDUuMFZfVVNCM0NPTiI7CiAJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OwogCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKLQkJZ3BpbyA9IDwmZ3B4MiA3IDA+OworCQlncGlvID0gPCZncHgyIDcgR1BJT19BQ1RJVkVfSElHSD47CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmdXNiM192YnVzX2VuPjsKIAkJZW5hYmxlLWFjdGl2ZS1oaWdoOwogCX07CiAKLQlwaHlAMTIxMDAwMDAgewotCQl2YnVzLXN1cHBseSA9IDwmdXNiM192YnVzX3JlZz47Ci0JfTsKLQotCXVzYkAxMjExMDAwMCB7Ci0JCXNhbXN1bmcsdmJ1cy1ncGlvID0gPCZncHgxIDEgMD47Ci0JfTsKLQogCWZpeGVkLXJhdGUtY2xvY2tzIHsKIAkJeHh0aSB7CiAJCQljb21wYXRpYmxlID0gInNhbXN1bmcsY2xvY2steHh0aSI7CkBAIC0yOTYsMTggKzIxMSw2IEBACiAJCX07CiAJfTsKIAotCWhkbWkgewotCQlocGQtZ3BpbyA9IDwmZ3B4MyA3IDA+OwotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JmhkbWlfaHBkX2lycT47Ci0JCXBoeSA9IDwmaGRtaXBoeT47Ci0JCWRkYyA9IDwmaTJjXzI+OwotCQloZG1pLWVuLXN1cHBseSA9IDwmdHBzNjUwOTBfZmV0Nz47Ci0JCXZkZC1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKLQkJdmRkX29zYy1zdXBwbHkgPSA8JmxkbzEwX3JlZz47Ci0JCXZkZF9wbGwtc3VwcGx5ID0gPCZsZG84X3JlZz47Ci0JfTsKLQogCWJhY2tsaWdodDogYmFja2xpZ2h0IHsKIAkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKIAkJcHdtcyA9IDwmcHdtIDAgMTAwMDAwMCAwPjsKQEAgLTMxOSwzMCArMjIyLDQ2IEBACiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJfTsKIAotCWZpbWRAMTQ0MDAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCXNhbXN1bmcsaW52ZXJ0LXZjbGs7Ci0JfTsKLQogCXBhbmVsOiBwYW5lbCB7CiAJCWNvbXBhdGlibGUgPSAiYXVvLGIxMTZ4dzAzIjsKIAkJcG93ZXItc3VwcGx5ID0gPCZmZXQ2PjsKIAkJYmFja2xpZ2h0ID0gPCZiYWNrbGlnaHQ+OwogCX07Cit9OwogCi0JZHAtY29udHJvbGxlckAxNDVCMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZkcF9ocGQ+OwotCQlzYW1zdW5nLGNvbG9yLXNwYWNlID0gPDA+OwotCQlzYW1zdW5nLGR5bmFtaWMtcmFuZ2UgPSA8MD47Ci0JCXNhbXN1bmcseWNiY3ItY29lZmYgPSA8MD47Ci0JCXNhbXN1bmcsY29sb3ItZGVwdGggPSA8MT47Ci0JCXNhbXN1bmcsbGluay1yYXRlID0gPDB4MGE+OwotCQlzYW1zdW5nLGxhbmUtY291bnQgPSA8Mj47Ci0JCXNhbXN1bmcsaHBkLWdwaW8gPSA8JmdweDAgNyAwPjsKLQkJYnJpZGdlID0gPCZwdG4zNDYwPjsKLQl9OworJmRwIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmRwX2hwZD47CisJc2Ftc3VuZyxjb2xvci1zcGFjZSA9IDwwPjsKKwlzYW1zdW5nLGR5bmFtaWMtcmFuZ2UgPSA8MD47CisJc2Ftc3VuZyx5Y2Jjci1jb2VmZiA9IDwwPjsKKwlzYW1zdW5nLGNvbG9yLWRlcHRoID0gPDE+OworCXNhbXN1bmcsbGluay1yYXRlID0gPDB4MGE+OworCXNhbXN1bmcsbGFuZS1jb3VudCA9IDwyPjsKKwlzYW1zdW5nLGhwZC1ncGlvID0gPCZncHgwIDcgR1BJT19BQ1RJVkVfSElHSD47CisJYnJpZGdlID0gPCZwdG4zNDYwPjsKK307CisKKyZlaGNpIHsKKwlzYW1zdW5nLHZidXMtZ3BpbyA9IDwmZ3B4MSAxIEdQSU9fQUNUSVZFX0hJR0g+OworfTsKKworJmZpbWQgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGludmVydC12Y2xrOworfTsKKworJmhkbWkgeworCWhwZC1ncGlvID0gPCZncHgzIDcgR1BJT19BQ1RJVkVfSElHSD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmhkbWlfaHBkX2lycT47CisJcGh5ID0gPCZoZG1pcGh5PjsKKwlkZGMgPSA8JmkyY18yPjsKKwloZG1pLWVuLXN1cHBseSA9IDwmdHBzNjUwOTBfZmV0Nz47CisJdmRkLXN1cHBseSA9IDwmbGRvOF9yZWc+OworCXZkZF9vc2Mtc3VwcGx5ID0gPCZsZG8xMF9yZWc+OworCXZkZF9wbGwtc3VwcGx5ID0gPCZsZG84X3JlZz47CiB9OwogCiAmaTJjXzAgewpAQCAtMzUwLDEwICsyNjksMTAgQEAKIAlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKIAlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8Mzc4MDAwPjsKIAotCW1heDc3Njg2QDA5IHsKKwltYXg3NzY4NjogbWF4Nzc2ODZAMDkgewogCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3Njg2IjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mz47Ci0JCWludGVycnVwdHMgPSA8MiAwPjsKKwkJaW50ZXJydXB0cyA9IDwyIElSUV9UWVBFX05PTkU+OwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8Jm1heDc3Njg2X2lycT47CiAJCXdha2V1cC1zb3VyY2U7CkBAIC01MDMsNyArNDIyLDcgQEAKIAl0cmFja3BhZCB7CiAJCXJlZyA9IDwweDY3PjsKIAkJY29tcGF0aWJsZSA9ICJjeXByZXNzLGN5YXBhIjsKLQkJaW50ZXJydXB0cyA9IDwyIDA+OworCQlpbnRlcnJ1cHRzID0gPDIgSVJRX1RZUEVfTk9ORT47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OwogCQl3YWtldXAtc291cmNlOwogCX07CkBAIC01NTAsNiArNDY5LDEzIEBACiAJc3RhdHVzID0gIm9rYXkiOwogCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwogCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisKKwltYXg5ODA5NTogY29kZWNAMTEgeworCQljb21wYXRpYmxlID0gIm1heGltLG1heDk4MDk1IjsKKwkJcmVnID0gPDB4MTE+OworCQlwaW5jdHJsLTAgPSA8Jm1heDk4MDk1X2VuPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwl9OwogfTsKIAogJmkyY184IHsKQEAgLTU2Myw2ICs0ODksMTAgQEAKIAl9OwogfTsKIAorJmkyczAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZtbWNfMCB7CiAJc3RhdHVzID0gIm9rYXkiOwogCW51bS1zbG90cyA9IDwxPjsKQEAgLTU4Nyw3ICs1MTcsNyBAQAogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXM0PjsKIAlidXMtd2lkdGggPSA8ND47Ci0Jd3AtZ3Bpb3MgPSA8JmdwYzIgMSAwPjsKKwl3cC1ncGlvcyA9IDwmZ3BjMiAxIEdQSU9fQUNUSVZFX0hJR0g+OwogCWNhcC1zZC1oaWdoc3BlZWQ7CiB9OwogCkBAIC02MTAsMTIgKzU0MCw4MiBAQAogfTsKIAogJnBpbmN0cmxfMCB7CisJZWNfaXJxOiBlYy1pcnEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4MS02IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwltYXg5ODA5NV9lbjogbWF4OTgwOTUtZW4geworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4MS03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl0cHM2NTA5MF9pcnE6IHRwczY1MDkwLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgyLTYiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVzYjNfdmJ1c19lbjogdXNiMy12YnVzLWVuIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDItNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDE+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCiAJbWF4Nzc2ODZfaXJxOiBtYXg3NzY4Ni1pcnEgewogCQlzYW1zdW5nLHBpbnMgPSAiZ3B4My0yIjsKIAkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CiAJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKIAkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwogCX07CisKKwloZG1pX2hwZF9pcnE6IGhkbWktaHBkLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgzLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDE+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZwaW5jdHJsXzEgeworCWFyYl90aGVpcl9jbGFpbTogYXJiLXRoZWlyLWNsYWltIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZTAtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJYXJiX291cl9jbGFpbTogYXJiLW91ci1jbGFpbSB7CisJCXNhbXN1bmcscGlucyA9ICJncGYwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwxPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZydGMgeworCXN0YXR1cyA9ICJva2F5IjsKKwljbG9ja3MgPSA8JmNsb2NrIENMS19SVEM+LCA8Jm1heDc3Njg2IE1BWDc3Njg2X0NMS19BUD47CisJY2xvY2stbmFtZXMgPSAicnRjIiwgInJ0Y19zcmMiOworfTsKKworJnNkM19idXM0IHsKKwlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Cit9OworCismc2QzX2NsayB7CisJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworfTsKKworJnNkM19jbWQgeworCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CiB9OwogCiAmc3BpXzEgewpAQCAtNjI4LDQgKzYyOCw4IEBACiAJZHJfbW9kZSA9ICJob3N0IjsKIH07CiAKKyZ1c2JkcmRfcGh5IHsKKwl2YnVzLXN1cHBseSA9IDwmdXNiM192YnVzX3JlZz47Cit9OworCiAjaW5jbHVkZSAiY3Jvcy1lYy1rZXlib2FyZC5kdHNpIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zcHJpbmcuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zcHJpbmcuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjc3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNwcmluZy5kdHMKQEAgLTAsMCArMSw1NjYgQEAKKy8qCisgKiBHb29nbGUgU3ByaW5nIGJvYXJkIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBHb29nbGUsIEluYworICogQ29weXJpZ2h0IChjKSAyMDE0IFNVU0UgTElOVVggUHJvZHVjdHMgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKyNpbmNsdWRlICJleHlub3M1MjUwLmR0c2kiCisKKy8geworCW1vZGVsID0gIkdvb2dsZSBTcHJpbmciOworCWNvbXBhdGlibGUgPSAiZ29vZ2xlLHNwcmluZyIsICJzYW1zdW5nLGV4eW5vczUyNTAiLCAic2Ftc3VuZyxleHlub3M1IjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDQwMDAwMDAwIDB4ODAwMDAwMDA+OworCX07CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eTEiOworCX07CisKKwlncGlvLWtleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcG93ZXJfa2V5X2lycT4sIDwmbGlkX2lycT47CisKKwkJcG93ZXIgeworCQkJbGFiZWwgPSAiUG93ZXIiOworCQkJZ3Bpb3MgPSA8JmdweDEgMyBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OworCQkJZ3Bpby1rZXksd2FrZXVwOworCQl9OworCisJCWxpZC1zd2l0Y2ggeworCQkJbGFiZWwgPSAiTGlkIjsKKwkJCWdwaW9zID0gPCZncHgzIDUgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGlucHV0LXR5cGUgPSA8NT47IC8qIEVWX1NXICovCisJCQlsaW51eCxjb2RlID0gPDA+OyAvKiBTV19MSUQgKi8KKwkJCWRlYm91bmNlLWludGVydmFsID0gPDE+OworCQkJZ3Bpby1rZXksd2FrZXVwOworCQl9OworCX07CisKKwl1c2ItaHViIHsKKwkJY29tcGF0aWJsZSA9ICJzbXNjLHVzYjM1MDNhIjsKKwkJcmVzZXQtZ3Bpb3MgPSA8JmdwZTEgMCBHUElPX0FDVElWRV9MT1c+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmhzaWNfcmVzZXQ+OworCX07CisKKwlmaXhlZC1yYXRlLWNsb2NrcyB7CisJCXh4dGkgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGNsb2NrLXh4dGkiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKKwkJfTsKKwl9OworfTsKKworJmRwIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmRwX2hwZF9ncGlvPjsKKwlzYW1zdW5nLGNvbG9yLXNwYWNlID0gPDA+OworCXNhbXN1bmcsZHluYW1pYy1yYW5nZSA9IDwwPjsKKwlzYW1zdW5nLHljYmNyLWNvZWZmID0gPDA+OworCXNhbXN1bmcsY29sb3ItZGVwdGggPSA8MT47CisJc2Ftc3VuZyxsaW5rLXJhdGUgPSA8MHgwYT47CisJc2Ftc3VuZyxsYW5lLWNvdW50ID0gPDE+OworCXNhbXN1bmcsaHBkLWdwaW8gPSA8JmdwYzMgMCBHUElPX0FDVElWRV9ISUdIPjsKK307CisKKyZlaGNpIHsKKwlzYW1zdW5nLHZidXMtZ3BpbyA9IDwmZ3B4MSAxIEdQSU9fQUNUSVZFX0hJR0g+OworfTsKKworJmZpbWQgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGludmVydC12Y2xrOworfTsKKworJmhkbWkgeworCWhwZC1ncGlvID0gPCZncHgzIDcgR1BJT19BQ1RJVkVfSElHSD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmhkbWlfaHBkX2lycT47CisJcGh5ID0gPCZoZG1pcGh5PjsKKwlkZGMgPSA8JmkyY18yPjsKKwloZG1pLWVuLXN1cHBseSA9IDwmbGRvOF9yZWc+OworCXZkZC1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKKwl2ZGRfb3NjLXN1cHBseSA9IDwmbGRvMTBfcmVnPjsKKwl2ZGRfcGxsLXN1cHBseSA9IDwmbGRvOF9yZWc+OworfTsKKworJmkyY18wIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDM3ODAwMD47CisKKwlzNW04NzY3LXBtaWNANjYgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVtODc2Ny1wbWljIjsKKwkJcmVnID0gPDB4NjY+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgzPjsKKwkJaW50ZXJydXB0cyA9IDwyIElSUV9UWVBFX05PTkU+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnM1bTg3NjdfaXJxICZzNW04NzY3X2R2cyAmczVtODc2N19kcz47CisJCXdha2V1cC1zb3VyY2U7CisKKwkJczVtODc2NyxwbWljLWJ1Y2stZHZzLWdwaW9zID0gPCZncGQxIDAgR1BJT19BQ1RJVkVfTE9XPiwgLyogRFZTMSAqLworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdwZDEgMSBHUElPX0FDVElWRV9MT1c+LCAvKiBEVlMyICovCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwmZ3BkMSAyIEdQSU9fQUNUSVZFX0xPVz47IC8qIERWUzMgKi8KKworCQlzNW04NzY3LHBtaWMtYnVjay1kcy1ncGlvcyA9IDwmZ3B4MiAzIEdQSU9fQUNUSVZFX0xPVz4sIC8qIFNFVDEgKi8KKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdweDIgNCBHUElPX0FDVElWRV9MT1c+LCAvKiBTRVQyICovCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZncHgyIDUgR1BJT19BQ1RJVkVfTE9XPjsgLyogU0VUMyAqLworCisJCS8qCisJCSAqIFRoZSBmb2xsb3dpbmcgYXJyYXlzIG9mIERWUyB2b2x0YWdlcyBhcmUgbm90IHVzZWQsIHNpbmNlIHdlIGFyZQorCQkgKiBub3QgdXNpbmcgR1BJT3MgdG8gY29udHJvbCBQTUlDIGJ1Y2tzLCBidXQgdGhleSBtdXN0IGJlIGRlZmluZWQKKwkJICogdG8gcGxlYXNlIHRoZSBkcml2ZXIuCisJCSAqLworCQlzNW04NzY3LHBtaWMtYnVjazItZHZzLXZvbHRhZ2UgPSA8MTM1MDAwMD4sIDwxMzAwMDAwPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDEyNTAwMDA+LCA8MTIwMDAwMD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxMTUwMDAwPiwgPDExMDAwMDA+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MTAwMDAwMD4sIDw5NTAwMDA+OworCisJCXM1bTg3NjcscG1pYy1idWNrMy1kdnMtdm9sdGFnZSA9IDwxMTAwMDAwPiwgPDExMDAwMDA+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MTEwMDAwMD4sIDwxMTAwMDAwPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDEwMDAwMDA+LCA8MTAwMDAwMD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxMDAwMDAwPiwgPDEwMDAwMDA+OworCisJCXM1bTg3NjcscG1pYy1idWNrNC1kdnMtdm9sdGFnZSA9IDwxMjAwMDAwPiwgPDEyMDAwMDA+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MTIwMDAwMD4sIDwxMjAwMDAwPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDEyMDAwMDA+LCA8MTIwMDAwMD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxMjAwMDAwPiwgPDEyMDAwMDA+OworCisJCWNsb2NrcyB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVtODc2Ny1jbGsiOworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImVuMzJraHpfYXAiLAorCQkJICAgICAgICAgICAgICAgICAgICAgImVuMzJraHpfY3AiLAorCQkJICAgICAgICAgICAgICAgICAgICAgImVuMzJraHpfYnQiOworCQl9OworCisJCXJlZ3VsYXRvcnMgeworCQkJbGRvNF9yZWc6IExETzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjBWX0xET19PVVQ0IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8MD47CisJCQl9OworCisJCQlsZG81X3JlZzogTERPNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwwPjsKKwkJCX07CisKKwkJCWxkbzZfcmVnOiBMRE82IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbXlkcCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJbGRvN19yZWc6IExETzcgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjFWX0xET19PVVQ3IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlsZG84X3JlZzogTERPOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDgiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWxkbzEwX3JlZzogTERPMTAgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxMCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJbGRvMTFfcmVnOiBMRE8xMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDExIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8MD47CisJCQl9OworCisJCQlsZG8xMl9yZWc6IExETzEyIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMy4wVl9MRE9fT1VUMTIiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWxkbzEzX3JlZzogTERPMTMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxMyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDA+OworCQkJfTsKKworCQkJbGRvMTRfcmVnOiBMRE8xNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDE0IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlsZG8xNV9yZWc6IExETzE1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4wVl9MRE9fT1VUMTUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWxkbzE2X3JlZzogTERPMTYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxNiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJbGRvMTdfcmVnOiBMRE8xNyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDIuOFZfTERPX09VVDE3IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8MD47CisJCQl9OworCisJCQlsZG8yNV9yZWc6IExETzI1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfYnJpZGdlIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlidWNrMV9yZWc6IEJVQ0sxIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbWlmIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWJ1Y2syX3JlZzogQlVDSzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9hcm0iOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJYnVjazNfcmVnOiBCVUNLMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2ludCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlidWNrNF9yZWc6IEJVQ0s0IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfZzNkIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlidWNrNV9yZWc6IEJVQ0s1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9CVUNLX09VVDUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2s2X3JlZzogQlVDSzYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjJWX0JVQ0tfT1VUNiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDA+OworCQkJfTsKKworCQkJYnVjazlfcmVnOiBCVUNLOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX3VtbWMiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDk1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmkyY18xIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDM3ODAwMD47CisKKwl0cmFja3BhZEA0YiB7CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsbWF4dG91Y2giOworCQlyZWcgPSA8MHg0Yj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OworCQlpbnRlcnJ1cHRzID0gPDIgSVJRX1RZUEVfRURHRV9GQUxMSU5HPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ0cmFja3BhZF9pcnE+OworCQlsaW51eCxncGlvLWtleW1hcCA9IDxLRVlfUkVTRVJWRUQKKwkJCQkgICAgIEtFWV9SRVNFUlZFRAorCQkJCSAgICAgS0VZX1JFU0VSVkVECisJCQkJICAgICBLRVlfUkVTRVJWRUQKKwkJCQkgICAgIEtFWV9SRVNFUlZFRAorCQkJCSAgICAgQlROX0xFRlQ+OworCQl3YWtldXAtc291cmNlOworCX07Cit9OworCisvKgorICogRGlzYWJsZWQgcHVsbHVwcyBzaW5jZSBleHRlcm5hbCBwYXJ0IGhhcyBpdHMgb3duIHB1bGx1cHMgYW5kCisgKiBkb3VibGUtcHVsbGluZyBnZXRzIHVzIG91dCBvZiBzcGVjIGluIHNvbWUgY2FzZXMuCisgKi8KKyZpMmMyX2J1cyB7CisJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworfTsKKworJmkyY18yIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKworCWhkbWlkZGNANTAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1oZG1pZGRjIjsKKwkJcmVnID0gPDB4NTA+OworCX07Cit9OworCismaTJjXzMgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NjYwMDA+OworfTsKKworJmkyY180IHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKworCWNyb3NfZWM6IGVtYmVkZGVkLWNvbnRyb2xsZXIgeworCQljb21wYXRpYmxlID0gImdvb2dsZSxjcm9zLWVjLWkyYyI7CisJCXJlZyA9IDwweDFlPjsKKwkJaW50ZXJydXB0cyA9IDw2IElSUV9UWVBFX05PTkU+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgxPjsKKwkJd2FrZXVwLXNvdXJjZTsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZlY19pcnE+OworCX07Cit9OworCismaTJjXzUgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NjYwMDA+OworfTsKKworJmkyY183IHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKworCXRlbXBlcmF0dXJlLXNlbnNvckA0YyB7CisJCWNvbXBhdGlibGUgPSAiZ210LGc3ODEiOworCQlyZWcgPSA8MHg0Yz47CisJfTsKK307CisKKyZpMmNfOCB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwzNzgwMDA+OworCisJaGRtaXBoeTogaGRtaXBoeUAzOCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEyLWhkbWlwaHkiOworCQlyZWcgPSA8MHgzOD47CisJfTsKK307CisKKyZpMnMwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbWZjIHsKKwlzYW1zdW5nLG1mYy1yID0gPDB4NDMwMDAwMDAgMHg4MDAwMDA+OworCXNhbXN1bmcsbWZjLWwgPSA8MHg1MTAwMDAwMCAweDgwMDAwMD47Cit9OworCismbW1jXzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJc3VwcG9ydHMtaGlnaHNwZWVkOworCWJyb2tlbi1jZDsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OworCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47CisJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2QwX2NsayAmc2QwX2NtZCAmc2QwX2NkICZzZDBfYnVzNCAmc2QwX2J1czg+OworCisJc2xvdEAwIHsKKwkJcmVnID0gPDA+OworCQlidXMtd2lkdGggPSA8OD47CisJfTsKK307CisKKy8qCisgKiBPbiBTcHJpbmcgd2UndmUgZ290IFNJUCBXaUZpIGFuZCBzbyBjYW4ga2VlcCBkcml2ZSBzdHJlbmd0aHMgbG93IHRvCisgKiByZWR1Y2UgRU1JLgorICovCismbW1jXzEgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJc3VwcG9ydHMtaGlnaHNwZWVkOworCWJyb2tlbi1jZDsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OworCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47CisJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2QxX2NsayAmc2QxX2NtZCAmc2QxX2NkICZzZDFfYnVzND47CisKKwlzbG90QDAgeworCQlyZWcgPSA8MD47CisJCWJ1cy13aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnBpbmN0cmxfMCB7CisJczVtODc2N19kdnM6IHM1bTg3NjctZHZzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDEtMCIsICJncGQxLTEiLCAiZ3BkMS0yIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwxPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlkcF9ocGRfZ3BpbzogZHAtaHBkLWdwaW8geworCQlzYW1zdW5nLHBpbnMgPSAiZ3BjMy0wIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl0cmFja3BhZF9pcnE6IHRyYWNrcGFkLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgxLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwweGY+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcG93ZXJfa2V5X2lycTogcG93ZXIta2V5LWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgxLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWVjX2lycTogZWMtaXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDEtNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJczVtODc2N19kczogczVtODc2Ny1kcyB7CisJCXNhbXN1bmcscGlucyA9ICJncHgyLTMiLCAiZ3B4Mi00IiwgImdweDItNSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJczVtODc2N19pcnE6IHM1bTg3NjctaXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDMtMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJbGlkX2lycTogbGlkLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgzLTUiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWhkbWlfaHBkX2lycTogaGRtaS1ocGQtaXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDMtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKKworJnBpbmN0cmxfMSB7CisJaHNpY19yZXNldDogaHNpYy1yZXNldCB7CisJCXNhbXN1bmcscGlucyA9ICJncGUxLTAiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwxPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZzZDFfYnVzNCB7CisJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworfTsKKworJnNkMV9jZCB7CisJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworfTsKKworJnNkMV9jbGsgeworCXNhbXN1bmcscGluLWRydiA9IDwwPjsKK307CisKKyZzZDFfY21kIHsKKwlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworfTsKKworJnNwaV8xIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxzcGktc3JjLWNsayA9IDwwPjsKKwludW0tY3MgPSA8MT47Cit9OworCisjaW5jbHVkZSAiY3Jvcy1lYy1rZXlib2FyZC5kdHNpIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpCmluZGV4IGQ1NWMxYTIuLmQ0NWEwN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLmR0c2kKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQljbG9jay1uYW1lcyA9ICJmaW1nMmQiOwogCX07CiAKLQljb2RlY0AxMTAwMDAwMCB7CisJbWZjOiBjb2RlY0AxMTAwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxtZmMtdjYiOwogCQlyZWcgPSA8MHgxMTAwMDAwMCAweDEwMDAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDk2IDA+OwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCWNsb2NrLW5hbWVzID0gIm1mYyI7CiAJfTsKIAotCXJ0Y0AxMDFFMDAwMCB7CisJcnRjOiBydGNAMTAxRTAwMDAgewogCQljbG9ja3MgPSA8JmNsb2NrIENMS19SVEM+OwogCQljbG9jay1uYW1lcyA9ICJydGMiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJCWNsb2NrLW5hbWVzID0gInVhcnQiLCAiY2xrX3VhcnRfYmF1ZDAiOwogCX07CiAKLQlzYXRhQDEyMkYwMDAwIHsKKwlzYXRhOiBzYXRhQDEyMkYwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzbnBzLGR3Yy1haGNpIjsKIAkJc2Ftc3VuZyxzYXRhLWZyZXEgPSA8NjY+OwogCQlyZWcgPSA8MHgxMjJGMDAwMCAweDFmZj47CkBAIC0yOTMsNiArMjkzLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmMwX2J1cz47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzA2LDYgKzMwNyw3IEBACiAJCWNsb2NrLW5hbWVzID0gImkyYyI7CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmaTJjMV9idXM+OworCQlzYW1zdW5nLHN5c3JlZy1waGFuZGxlID0gPCZzeXNyZWdfc3lzdGVtX2NvbnRyb2xsZXI+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTMxOSw2ICszMjEsNyBAQAogCQljbG9jay1uYW1lcyA9ICJpMmMiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JmkyYzJfYnVzPjsKKwkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zMzIsNiArMzM1LDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmMzX2J1cz47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNTczLDcgKzU3Nyw3IEBACiAJCSNwaHktY2VsbHMgPSA8MT47CiAJfTsKIAotCXVzYkAxMjExMDAwMCB7CisJZWhjaTogdXNiQDEyMTEwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtZWhjaSI7CiAJCXJlZyA9IDwweDEyMTEwMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDcxIDA+OwpAQCAtNTg4LDcgKzU5Miw3IEBACiAJCX07CiAJfTsKIAotCXVzYkAxMjEyMDAwMCB7CisJb2hjaTogdXNiQDEyMTIwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtb2hjaSI7CiAJCXJlZyA9IDwweDEyMTIwMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDcxIDA+OwpAQCAtNzEwLDcgKzcxNCw3IEBACiAJCWNsb2NrLW5hbWVzID0gImdzY2wiOwogCX07CiAKLQloZG1pIHsKKwloZG1pOiBoZG1pIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItaGRtaSI7CiAJCXJlZyA9IDwweDE0NTMwMDAwIDB4NzAwMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgOTUgMD47CkBAIC03MzYsMTQgKzc0MCwxNCBAQAogCQkjcGh5LWNlbGxzID0gPDA+OwogCX07CiAKLQlkcC1jb250cm9sbGVyQDE0NUIwMDAwIHsKKwlkcDogZHAtY29udHJvbGxlckAxNDVCMDAwMCB7CiAJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX0RQPjsKIAkJY2xvY2stbmFtZXMgPSAiZHAiOwogCQlwaHlzID0gPCZkcF9waHk+OwogCQlwaHktbmFtZXMgPSAiZHAiOwogCX07CiAKLQlmaW1kQDE0NDAwMDAwIHsKKwlmaW1kOiBmaW1kQDE0NDAwMDAwIHsKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfU0NMS19GSU1EMT4sIDwmY2xvY2sgQ0xLX0ZJTUQxPjsKIAkJY2xvY2stbmFtZXMgPSAic2Nsa19maW1kIiwgImZpbWQiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLXBlYWNoLXBpdC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLXBlYWNoLXBpdC5kdHMKaW5kZXggODJjZGI3NC4uOWEwNTBlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC1wZWFjaC1waXQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtcGVhY2gtcGl0LmR0cwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svbWF4aW0sbWF4Nzc4MDIuaD4KICNpbmNsdWRlICJleHlub3M1NDIwLmR0c2kiCiAKIC8gewpAQCAtMTUxLDcgKzE1Miw3IEBACiAJc3RhdHVzID0gIm9rYXkiOwogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCi0JbWF4Nzc4MDItcG1pY0A5IHsKKwltYXg3NzgwMjogbWF4Nzc4MDItcG1pY0A5IHsKIAkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgwMiI7CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDM+OwogCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfTk9ORT47CkBAIC01NjAsNyArNTYxLDcgQEAKIAlzdGF0dXMgPSAib2theSI7CiAJbnVtLXNsb3RzID0gPDE+OwogCWJyb2tlbi1jZDsKLQljYXBzMi1tbWMtaHMyMDAtMV84djsKKwltbWMtaHMyMDAtMV84djsKIAljYXAtbW1jLWhpZ2hzcGVlZDsKIAlub24tcmVtb3ZhYmxlOwogCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CkBAIC03MjcsNiArNzI4LDggQEAKIAogJnJ0YyB7CiAJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1JUQz4sIDwmbWF4Nzc4MDIgTUFYNzc4MDJfQ0xLXzMyS19BUD47CisJY2xvY2stbmFtZXMgPSAicnRjIiwgInJ0Y19zcmMiOwogfTsKIAogJnNwaV8yIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAuZHRzaQppbmRleCA4NjE3YTAzLi45MGJmNDAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC5kdHNpCkBAIC01NjAsNiArNTYwLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmMwX2J1cz47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNTczLDYgKzU3NCw3IEBACiAJCWNsb2NrLW5hbWVzID0gImkyYyI7CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmaTJjMV9idXM+OworCQlzYW1zdW5nLHN5c3JlZy1waGFuZGxlID0gPCZzeXNyZWdfc3lzdGVtX2NvbnRyb2xsZXI+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTU4Niw2ICs1ODgsNyBAQAogCQljbG9jay1uYW1lcyA9ICJpMmMiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JmkyYzJfYnVzPjsKKwkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC01OTksNiArNjAyLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmMzX2J1cz47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTgwMC1wZWFjaC1waS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLXBlYWNoLXBpLmR0cwppbmRleCA3YmIxYzhkLi5lOGZkZGE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLXBlYWNoLXBpLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLXBlYWNoLXBpLmR0cwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svbWF4aW0sbWF4Nzc4MDIuaD4KICNpbmNsdWRlICJleHlub3M1ODAwLmR0c2kiCiAKIC8gewpAQCAtMTUwLDcgKzE1MSw3IEBACiAJc3RhdHVzID0gIm9rYXkiOwogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCi0JbWF4Nzc4MDItcG1pY0A5IHsKKwltYXg3NzgwMjogbWF4Nzc4MDItcG1pY0A5IHsKIAkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgwMiI7CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDM+OwogCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfTk9ORT47CkBAIC01NDgsNyArNTQ5LDcgQEAKIAlzdGF0dXMgPSAib2theSI7CiAJbnVtLXNsb3RzID0gPDE+OwogCWJyb2tlbi1jZDsKLQljYXBzMi1tbWMtaHMyMDAtMV84djsKKwltbWMtaHMyMDAtMV84djsKIAljYXAtbW1jLWhpZ2hzcGVlZDsKIAlub24tcmVtb3ZhYmxlOwogCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CkBAIC03MTUsNiArNzE2LDggQEAKIAogJnJ0YyB7CiAJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1JUQz4sIDwmbWF4Nzc4MDIgTUFYNzc4MDJfQ0xLXzMyS19BUD47CisJY2xvY2stbmFtZXMgPSAicnRjIiwgInJ0Y19zcmMiOwogfTsKIAogJnNwaV8yIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2hpc2kteDVoZDItZGtiLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2hpc2kteDVoZDItZGtiLmR0cwppbmRleCAwNWI0NGMyLi43MjFiMDkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9oaXNpLXg1aGQyLWRrYi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaGlzaS14NWhkMi1ka2IuZHRzCkBAIC01MSwzICs1MSwzNiBAQAogJnVhcnQwIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OworCismZ21hYzAgeworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDA+OworCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCXBoeS1tb2RlID0gIm1paSI7CisJLyogUGxhY2Vob2xkZXIsIG92ZXJ3cml0dGVuIGJ5IGJvb3Rsb2FkZXIgKi8KKwltYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJc3RhdHVzID0gIm9rYXkiOworCisJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQlyZWcgPSA8Mj47CisJfTsKK307CisKKyZnbWFjMSB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MD47CisJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCS8qIFBsYWNlaG9sZGVyLCBvdmVyd3JpdHRlbiBieSBib290bG9hZGVyICovCisJbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOworCXN0YXR1cyA9ICJva2F5IjsKKworCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJcmVnID0gPDE+OworCX07Cit9OworCismYWhjaSB7CisJcGh5cyA9IDwmc2F0YV9waHk+OworCXBoeS1uYW1lcyA9ICJzYXRhLXBoeSI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaGlzaS14NWhkMi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaGlzaS14NWhkMi5kdHNpCmluZGV4IGY4NWJhMjkuLmM1MjcyMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2hpc2kteDVoZDIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9oaXNpLXg1aGQyLmR0c2kKQEAgLTEzMSw2ICsxMzEsMjQ5IEBACiAJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OworCisJCQlncGlvMDogZ3Bpb0BiMjAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyMDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMDggMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTogZ3Bpb0BiMjEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyMTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMDkgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMjogZ3Bpb0BiMjIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyMjAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTAgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMzogZ3Bpb0BiMjMwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyMzAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTEgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvNDogZ3Bpb0BiMjQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyNDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTIgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvNTogZ3Bpb0AwMDQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweDAwNDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTMgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvNjogZ3Bpb0BiMjYwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyNjAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTQgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvNzogZ3Bpb0BiMjcwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyNzAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTUgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvODogZ3Bpb0BiMjgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyODAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTYgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvOTogZ3Bpb0BiMjkwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyOTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTcgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTA6IGdwaW9AYjJhMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHhiMmEwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTE4IDB4ND47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9GSVhFRF8xMDBNPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZ3BpbzExOiBncGlvQGIyYjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjJiMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExOSAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW8xMjogZ3Bpb0BiMmMwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyYzAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMjAgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTM6IGdwaW9AYjJkMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHhiMmQwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTIxIDB4ND47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9GSVhFRF8xMDBNPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZ3BpbzE0OiBncGlvQGIyZTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjJlMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEyMiAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW8xNTogZ3Bpb0BiMmYwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyZjAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMjMgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTY6IGdwaW9AYjMwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHhiMzAwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTI0IDB4ND47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9GSVhFRF8xMDBNPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZ3BpbzE3OiBncGlvQGIzMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjMxMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEyNSAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXdkdDA6IHdhdGNoZG9nQGEyYzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0sc3A4MDUiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJYXJtLHByaW1lY2VsbC1wZXJpcGhpZCA9IDwweDAwMTQxODA1PjsKKwkJCQlyZWcgPSA8MHhhMmMwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMjkgND47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX1dERzBfUlNUPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQl9OwogCQl9OwogCiAJCWxvY2FsX3RpbWVyQDAwYTAwNjAwIHsKQEAgLTE0OCw5ICszOTEsMTUgQEAKIAkJfTsKIAogCQlzeXNjdHJsOiBzeXN0ZW0tY29udHJvbGxlckAwMDAwMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixzeXNjdHJsIjsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLHN5c2N0cmwiLCAic3lzY29uIjsKIAkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MTAwMD47Ci0JCQlyZWJvb3Qtb2Zmc2V0ID0gPDB4ND47CisJCX07CisKKwkJcmVib290IHsKKwkJCWNvbXBhdGlibGUgPSAic3lzY29uLXJlYm9vdCI7CisJCQlyZWdtYXAgPSA8JnN5c2N0cmw+OworCQkJb2Zmc2V0ID0gPDB4ND47CisJCQltYXNrID0gPDB4ZGVhZGJlZWY+OwogCQl9OwogCiAJCWNwdWN0cmxAMDBhMjIwMDAgewpAQCAtMTY2LDUgKzQxNSwxNDIgQEAKIAkJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQl9OwogCQl9OworCisJCS8qIHVucmVtb3ZhYmxlIGVtbWMgYXMgbW1jYmxrMCAqLworCQltbWM6IG1tY0AxODMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1tc2hjIjsKKwkJCXJlZyA9IDwweDE4MzAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAzNSA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9NTUNfQ0lVX1JTVD4sCisJCQkJIDwmY2xvY2sgSElYNUhEMl9NTUNfQklVX0NMSz47CisJCQljbG9jay1uYW1lcyA9ICJjaXUiLCAiYml1IjsKKwkJfTsKKworCQlzZDogbW1jQDE4MjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LW1zaGMiOworCQkJcmVnID0gPDB4MTgyMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDM0IDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX1NEX0NJVV9SU1Q+LAorCQkJCSA8JmNsb2NrIEhJWDVIRDJfU0RfQklVX0NMSz47CisJCQljbG9jay1uYW1lcyA9ICJjaXUiLCJiaXUiOworCQl9OworCisJCWdtYWMwOiBldGhlcm5ldEAxODQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpeDVoZDItZ21hYyI7CisJCQlyZWcgPSA8MHgxODQwMDAwIDB4MTAwMD4sPDB4MTg0MzAwYyAweDQ+OworCQkJaW50ZXJydXB0cyA9IDwwIDcxIDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX01BQzBfQ0xLPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZ21hYzE6IGV0aGVybmV0QDE4NDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGl4NWhkMi1nbWFjIjsKKwkJCXJlZyA9IDwweDE4NDEwMDAgMHgxMDAwPiw8MHgxODQzMDEwIDB4ND47CisJCQlpbnRlcnJ1cHRzID0gPDAgNzIgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfTUFDMV9DTEs+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2IwOiBlaGNpQDE4OTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJnZW5lcmljLWVoY2kiOworCQkJcmVnID0gPDB4MTg5MDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDY2IDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX1VTQl9DTEs+OworCQl9OworCisJCXVzYjE6IG9oY2lAMTg4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImdlbmVyaWMtb2hjaSI7CisJCQlyZWcgPSA8MHgxODgwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNjcgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfVVNCX0NMSz47CisJCX07CisKKwkJcGVyaXBoZXJhbF9jdHJsOiBzeXNjb25AYTIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3lzY29uIjsKKwkJCXJlZyA9IDwweGEyMDAwMCAweDEwMDA+OworCQl9OworCisJCXNhdGFfcGh5OiBwaHlAMTkwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLXNhdGEtcGh5IjsKKwkJCXJlZyA9IDwweDE5MDAwMDAgMHgxMDAwMD47CisJCQkjcGh5LWNlbGxzID0gPDA+OworCQkJaGlzaWxpY29uLHBlcmlwaGVyYWwtc3lzY29uID0gPCZwZXJpcGhlcmFsX2N0cmw+OworCQkJaGlzaWxpY29uLHBvd2VyLXJlZyA9IDwweDggMTA+OworCQl9OworCisJCWFoY2k6IHNhdGFAMTkwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXNpLWFoY2kiOworCQkJcmVnID0gPDB4MTkwMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA3MCA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9TQVRBX0NMSz47CisJCX07CisKKwkJaXI6IGlyQDAwMTAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLWlyIjsKKwkJCXJlZyA9IDwweDAwMTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDQ3IDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzI0TT47CisJCQloaXNpbGljb24scG93ZXItc3lzY29uID0gPCZzeXNjdHJsPjsKKwkJfTsKKworCQlpMmMwOiBpMmNAYjEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpeDVoZDItaTJjIjsKKwkJCXJlZyA9IDwweGIxMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDM4IDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0kyQzBfUlNUPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzE6IGkyY0BiMTEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGl4NWhkMi1pMmMiOworCQkJcmVnID0gPDB4YjExMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzkgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfSTJDMV9SU1Q+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjMjogaTJjQGIxMjAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLWkyYyI7CisJCQlyZWcgPSA8MHhiMTIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA0MCA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9JMkMyX1JTVD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMzOiBpMmNAYjEzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpeDVoZDItaTJjIjsKKwkJCXJlZyA9IDwweGIxMzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDQxIDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0kyQzNfUlNUPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzQ6IGkyY0BiMTYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGl4NWhkMi1pMmMiOworCQkJcmVnID0gPDB4YjE2MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNDMgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfSTJDNF9SU1Q+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjNTogaTJjQGIxNzAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLWkyYyI7CisJCQlyZWcgPSA8MHhiMTcwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA0NCA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9JMkM1X1JTVD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MS5kdHNpCmluZGV4IDkyNjYwZTEuLmMwMTE2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEuZHRzaQpAQCAtMjE0LDcgKzIxNCw5IEBACiAJCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDUxLXNzaSIsICJmc2wsaW14MjEtc3NpIjsKIAkJCQkJcmVnID0gPDB4NzAwMTQwMDAgMHg0MDAwPjsKIAkJCQkJaW50ZXJydXB0cyA9IDwzMD47Ci0JCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19TU0kyX0lQR19HQVRFPjsKKwkJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTJfSVBHX0dBVEU+LAorCQkJCQkJIDwmY2xrcyBJTVg1X0NMS19TU0kyX1JPT1RfR0FURT47CisJCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJiYXVkIjsKIAkJCQkJZG1hcyA9IDwmc2RtYSAyNCAxIDA+LAogCQkJCQkgICAgICAgPCZzZG1hIDI1IDEgMD47CiAJCQkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CkBAIC01MDQsNyArNTA2LDkgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXg1MS1zc2kiLCAiZnNsLGlteDIxLXNzaSI7CiAJCQkJcmVnID0gPDB4ODNmY2MwMDAgMHg0MDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDI5PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfU1NJMV9JUEdfR0FURT47CisJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTFfSVBHX0dBVEU+LAorCQkJCQkgPCZjbGtzIElNWDVfQ0xLX1NTSTFfUk9PVF9HQVRFPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYmF1ZCI7CiAJCQkJZG1hcyA9IDwmc2RtYSAyOCAwIDA+LAogCQkJCSAgICAgICA8JnNkbWEgMjkgMCAwPjsKIAkJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOwpAQCAtNTYwLDcgKzU2NCw5IEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NTEtc3NpIiwgImZzbCxpbXgyMS1zc2kiOwogCQkJCXJlZyA9IDwweDgzZmU4MDAwIDB4NDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw5Nj47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTNfSVBHX0dBVEU+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19TU0kzX0lQR19HQVRFPiwKKwkJCQkJIDwmY2xrcyBJTVg1X0NMS19TU0kzX1JPT1RfR0FURT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImJhdWQiOwogCQkJCWRtYXMgPSA8JnNkbWEgNDYgMCAwPiwKIAkJCQkgICAgICAgPCZzZG1hIDQ3IDAgMD47CiAJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1My5kdHNpCmluZGV4IGY5MTcyNWIuLmEzMGJkZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMuZHRzaQpAQCAtNDYsMTAgKzQ2LDIxIEBACiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY3B1QDAgeworCQljcHUwOiBjcHVAMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE4IjsKIAkJCXJlZyA9IDwweDA+OworCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX0FSTT47CisJCQljbG9jay1sYXRlbmN5ID0gPDYxMDM2PjsKKwkJCXZvbHRhZ2UtdG9sZXJhbmNlID0gPDU+OworCQkJb3BlcmF0aW5nLXBvaW50cyA9IDwKKwkJCQkvKiBrSHogKi8KKwkJCQkgMTY2NjY2ICA4NTAwMDAKKwkJCQkgNDAwMDAwICA5MDAwMDAKKwkJCQkgODAwMDAwIDEwNTAwMDAKKwkJCQkxMDAwMDAwIDEyMDAwMDAKKwkJCQkxMjAwMDAwIDEzMDAwMDAKKwkJCT47CiAJCX07CiAJfTsKIApAQCAtMjI3LDcgKzIzOCw5IEBACiAJCQkJCQkJImZzbCxpbXgyMS1zc2kiOwogCQkJCQlyZWcgPSA8MHg1MDAxNDAwMCAweDQwMDA+OwogCQkJCQlpbnRlcnJ1cHRzID0gPDMwPjsKLQkJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTJfSVBHX0dBVEU+OworCQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfU1NJMl9JUEdfR0FURT4sCisJCQkJCQkgPCZjbGtzIElNWDVfQ0xLX1NTSTJfUk9PVF9HQVRFPjsKKwkJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImJhdWQiOwogCQkJCQlkbWFzID0gPCZzZG1hIDI0IDEgMD4sCiAJCQkJCSAgICAgICA8JnNkbWEgMjUgMSAwPjsKIAkJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKQEAgLTY3NSw3ICs2ODgsOSBAQAogCQkJCQkJImZzbCxpbXgyMS1zc2kiOwogCQkJCXJlZyA9IDwweDYzZmNjMDAwIDB4NDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwyOT47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTFfSVBHX0dBVEU+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19TU0kxX0lQR19HQVRFPiwKKwkJCQkJIDwmY2xrcyBJTVg1X0NMS19TU0kxX1JPT1RfR0FURT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImJhdWQiOwogCQkJCWRtYXMgPSA8JnNkbWEgMjggMCAwPiwKIAkJCQkgICAgICAgPCZzZG1hIDI5IDAgMD47CiAJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKQEAgLTcwMyw3ICs3MTgsOSBAQAogCQkJCQkJImZzbCxpbXgyMS1zc2kiOwogCQkJCXJlZyA9IDwweDYzZmU4MDAwIDB4NDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw5Nj47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTNfSVBHX0dBVEU+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19TU0kzX0lQR19HQVRFPiwKKwkJCQkJIDwmY2xrcyBJTVg1X0NMS19TU0kzX1JPT1RfR0FURT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImJhdWQiOwogCQkJCWRtYXMgPSA8JnNkbWEgNDYgMCAwPiwKIAkJCQkgICAgICAgPCZzZG1hIDQ3IDAgMD47CiAJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZkbC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLmR0c2kKaW5kZXggYjQ1M2UwZS4uMWFjMmZlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLmR0c2kKQEAgLTEzLDYgKzEzLDEwIEBACiAjaW5jbHVkZSAiaW14NnFkbC5kdHNpIgogCiAvIHsKKwlhbGlhc2VzIHsKKwkJaTJjMyA9ICZpMmM0OworCX07CisKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwpAQCAtMTE0LDMgKzExOCw3IEBACiAJCSAgICAgICJkaTBfc2VsIiwgImRpMV9zZWwiLAogCQkgICAgICAiZGkwIiwgImRpMSI7CiB9OworCismdnB1IHsKKwljb21wYXRpYmxlID0gImZzbCxpbXg2ZGwtdnB1IiwgImNubSxjb2RhOTYwIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cS10YnMyOTEwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLXRiczI5MTAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0M2FiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cS10YnMyOTEwLmR0cwpAQCAtMCwwICsxLDQzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFNvZXJlbiBNb2NoIDxzbW9jaEB3ZWIuZGU+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlICJpbXg2cS5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisKKy8geworCW1vZGVsID0gIlRCUzI5MTAgTWF0cml4IEFSTSBtaW5pIFBDIjsKKwljb21wYXRpYmxlID0gInRicyxpbXg2cS10YnMyOTEwIiwgImZzbCxpbXg2cSI7CisKKwljaG9zZW4geworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MTsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4MTAwMDAwMDAgMHg4MDAwMDAwMD47CisJfTsKKworCWZhbiB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1mYW4iOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZ3Bpb19mYW4+OworCQlncGlvcyA9IDwmZ3BpbzMgMjggR1BJT19BQ1RJVkVfSElHSD47CisJCWdwaW8tZmFuLHNwZWVkLW1hcCA9IDwwICAgIDAKKwkJCQkgICAgICAzMDAwIDE+OworCX07CisKKwlpcl9yZWN2IHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWlyLXJlY2VpdmVyIjsKKwkJZ3Bpb3MgPSA8JmdwaW8zIDE4IEdQSU9fQUNUSVZFX0xPVz47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pcj47CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9ncGlvX2xlZHM+OworCisJCWJsdWUgeworCQkJbGFiZWwgPSAiYmx1ZV9zdGF0dXNfbGVkIjsKKwkJCWdwaW9zID0gPCZncGlvMSAyIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJfTsKKwl9OworCisJcmVndWxhdG9ycyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlyZWdfMnA1djogcmVndWxhdG9yQDAgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDA+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiMlA1ViI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyNTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI1MDAwMDA+OworCQl9OworCisJCXJlZ18zcDN2OiByZWd1bGF0b3JAMSB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MT47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICIzUDNWIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCX07CisKKwkJcmVnXzVwMHY6IHJlZ3VsYXRvckAyIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwyPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIjVQMFYiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJfTsKKwl9OworCisJc291bmQtc2d0bDUwMDAgeworCQlhdWRpby1jb2RlYyA9IDwmc2d0bDUwMDA+OworCQlhdWRpby1yb3V0aW5nID0KKwkJCSJNSUNfSU4iLCAiTWljIEphY2siLAorCQkJIk1pYyBKYWNrIiwgIk1pYyBCaWFzIiwKKwkJCSJIZWFkcGhvbmUgSmFjayIsICJIUF9PVVQiOworCQljb21wYXRpYmxlID0gImZzbCxpbXgtYXVkaW8tc2d0bDUwMDAiOworCQltb2RlbCA9ICJPbi1ib2FyZCBDb2RlYyI7CisJCW11eC1leHQtcG9ydCA9IDwzPjsKKwkJbXV4LWludC1wb3J0ID0gPDE+OworCQlzc2ktY29udHJvbGxlciA9IDwmc3NpMT47CisJfTsKKworCXNvdW5kLXNwZGlmIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsaW14LWF1ZGlvLXNwZGlmIjsKKwkJbW9kZWwgPSAiT24tYm9hcmQgU1BESUYiOworCQlzcGRpZi1jb250cm9sbGVyID0gPCZzcGRpZj47CisJCXNwZGlmLW91dDsKKwl9OworfTsKKworJmF1ZG11eCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmZlYyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldD47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCXBoeS1yZXNldC1ncGlvcyA9IDwmZ3BpbzEgMjUgR1BJT19BQ1RJVkVfSElHSD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmhkbWkgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2hkbWk+OworCWRkYy1pMmMtYnVzID0gPCZpMmMyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMSB7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMT47CisJc3RhdHVzID0gIm9rYXkiOworCisJc2d0bDUwMDA6IHNndGw1MDAwQDBhIHsKKwkJY2xvY2tzID0gPCZjbGtzIDIwMT47CisJCWNvbXBhdGlibGUgPSAiZnNsLHNndGw1MDAwIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZwaW5jdHJsX3NndGw1MDAwPjsKKwkJcmVnID0gPDB4MGE+OworCQlWRERBLXN1cHBseSA9IDwmcmVnXzJwNXY+OworCQlWRERJTy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwl9OworfTsKKworJmkyYzIgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMzIHsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMzPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlydGM6IGRzMTMwN0A2OCB7CisJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMwNyI7CisJCXJlZyA9IDwweDY4PjsKKwl9OworfTsKKworJnBjaWUgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3BjaWU+OworCXJlc2V0LWdwaW8gPSA8JmdwaW83IDEyIEdQSU9fQUNUSVZFX0hJR0g+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzYXRhIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc252c19wb3dlcm9mZiB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwZGlmIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zcGRpZj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNzaTEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDE+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JoMSB7CisJdmJ1cy1zdXBwbHkgPSA8JnJlZ181cDB2PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNib3RnIHsKKwl2YnVzLXN1cHBseSA9IDwmcmVnXzVwMHY+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYm90Zz47CisJZGlzYWJsZS1vdmVyLWN1cnJlbnQ7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzZGhjMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNkaGMyPjsKKwlidXMtd2lkdGggPSA8ND47CisJY2QtZ3Bpb3MgPSA8JmdwaW8yIDIgR1BJT19BQ1RJVkVfSElHSD47CisJdm1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNkaGMzIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2RoYzM+OworCWJ1cy13aWR0aCA9IDw0PjsKKwljZC1ncGlvcyA9IDwmZ3BpbzIgMCBHUElPX0FDVElWRV9ISUdIPjsKKwl3cC1ncGlvcyA9IDwmZ3BpbzIgMSBHUElPX0FDVElWRV9ISUdIPjsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2RoYzQgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzZGhjND47CisJYnVzLXdpZHRoID0gPDg+OworCW5vbi1yZW1vdmFibGU7CisJbm8tMS04LXY7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmlvbXV4YyB7CisJaW14NnEtdGJzMjkxMCB7CisJCXBpbmN0cmxfZW5ldDogZW5ldGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VORVRfTURJT19fRU5FVF9NRElPICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX0VORVRfTURDX19FTkVUX01EQyAgICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1RYQ19fUkdNSUlfVFhDICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1REMF9fUkdNSUlfVEQwICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1REMV9fUkdNSUlfVEQxICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1REMl9fUkdNSUlfVEQyICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1REM19fUkdNSUlfVEQzICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1RYX0NUTF9fUkdNSUlfVFhfQ1RMIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX0VORVRfUkVGX0NMS19fRU5FVF9UWF9DTEsgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JYQ19fUkdNSUlfUlhDICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JEMF9fUkdNSUlfUkQwICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JEMV9fUkdNSUlfUkQxICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JEMl9fUkdNSUlfUkQyICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JEM19fUkdNSUlfUkQzICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JYX0NUTF9fUkdNSUlfUlhfQ1RMIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX0dQSU9fMTZfX0VORVRfUkVGX0NMSyAgICAgIDB4NDAwMWIwYTgKKwkJCQlNWDZRRExfUEFEX0VORVRfQ1JTX0RWX19HUElPMV9JTzI1ICAgIDB4MWIwNTkKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9oZG1pOiBoZG1pZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfS0VZX1JPVzJfX0hETUlfVFhfQ0VDX0xJTkUgMHgxZjhiMAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2kyYzE6IGkyYzFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9DU0kwX0RBVDlfX0kyQzFfU0NMICAgICAgICAweDQwMDFiOGIxCisJCQkJTVg2UURMX1BBRF9DU0kwX0RBVDhfX0kyQzFfU0RBICAgICAgICAweDQwMDFiOGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfaTJjMjogaTJjMmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0tFWV9DT0wzX19JMkMyX1NDTCAgICAgICAgIDB4NDAwMWI4YjEKKwkJCQlNWDZRRExfUEFEX0tFWV9ST1czX19JMkMyX1NEQSAgICAgICAgIDB4NDAwMWI4YjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9pMmMzOiBpMmMzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfR1BJT18zX19JMkMzX1NDTCAgICAgICAgICAgMHg0MDAxYjhiMQorCQkJCU1YNlFETF9QQURfR1BJT182X19JMkMzX1NEQSAgICAgICAgICAgMHg0MDAxYjhiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2lyOiBpcmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VJTV9EMThfX0dQSU8zX0lPMTggICAgICAgIDB4MTcwNTkKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9wY2llOiBwY2llZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfR1BJT18xN19fR1BJTzdfSU8xMiAgICAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3NndGw1MDAwOiBzZ3RsNTAwMGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUN19fQVVEM19SWEQgICAgICAgIDB4MTMwYjAKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUNF9fQVVEM19UWEMgICAgICAgIDB4MTMwYjAKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUNV9fQVVEM19UWEQgICAgICAgIDB4MTEwYjAKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUNl9fQVVEM19UWEZTICAgICAgIDB4MTMwYjAKKwkJCQlNWDZRRExfUEFEX0dQSU9fMF9fQ0NNX0NMS08xICAgICAgICAgIDB4MTMwYjAKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9zcGRpZjogc3BkaWZncnAgeworCQkJZnNsLHBpbnMgPSA8TVg2UURMX1BBRF9HUElPXzE5X19TUERJRl9PVVQgICAgIDB4MTMwOTEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MTogdWFydDFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9DU0kwX0RBVDEwX19VQVJUMV9UWF9EQVRBICAweDFiMGIxCisJCQkJTVg2UURMX1BBRF9DU0kwX0RBVDExX19VQVJUMV9SWF9EQVRBICAweDFiMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdWFydDI6IHVhcnQyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRUlNX0QyNl9fVUFSVDJfVFhfREFUQSAgICAgMHgxYjBiMQorCQkJCU1YNlFETF9QQURfRUlNX0QyN19fVUFSVDJfUlhfREFUQSAgICAgMHgxYjBiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzYm90ZzogdXNib3RnZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRU5FVF9SWF9FUl9fVVNCX09UR19JRCAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjMjogdXNkaGMyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0QyX0NNRF9fU0QyX0NNRCAgICAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0NMS19fU0QyX0NMSyAgICAgICAgICAgMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDBfX1NEMl9EQVRBMCAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDFfX1NEMl9EQVRBMSAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDJfX1NEMl9EQVRBMiAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDNfX1NEMl9EQVRBMyAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfTkFOREZfRDJfX0dQSU8yX0lPMDIgICAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjMzogdXNkaGMzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0QzX0NNRF9fU0QzX0NNRCAgICAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0NMS19fU0QzX0NMSyAgICAgICAgICAgMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDBfX1NEM19EQVRBMCAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDFfX1NEM19EQVRBMSAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDJfX1NEM19EQVRBMiAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDNfX1NEM19EQVRBMyAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfTkFOREZfRDBfX0dQSU8yX0lPMDAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfTkFOREZfRDFfX0dQSU8yX0lPMDEgICAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjNDogdXNkaGM0Z3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0Q0X0NNRF9fU0Q0X0NNRCAgICAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0NMS19fU0Q0X0NMSyAgICAgICAgICAgMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDBfX1NENF9EQVRBMCAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDFfX1NENF9EQVRBMSAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDJfX1NENF9EQVRBMiAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDNfX1NENF9EQVRBMyAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDRfX1NENF9EQVRBNCAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDVfX1NENF9EQVRBNSAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDZfX1NENF9EQVRBNiAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDdfX1NENF9EQVRBNyAgICAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKwl9OworCisJZ3Bpb19mYW4geworCQlwaW5jdHJsX2dwaW9fZmFuOiBncGlvZmFuZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRUlNX0QyOF9fR1BJTzNfSU8yOCAgICAgICAgMHgxMzBiMQorCQkJPjsKKwkJfTsKKwl9OworCisJZ3Bpb19sZWRzIHsKKwkJcGluY3RybF9ncGlvX2xlZHM6IGdwaW9sZWRzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfR1BJT18yX19HUElPMV9JTzAyICAgICAgICAgMHgxMzBiMQorCQkJPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cS5kdHNpCmluZGV4IGU5ZjM2NDYuLjg1ZjcyZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEuZHRzaQpAQCAtMzA4LDMgKzMwOCw3IEBACiAJCX07CiAJfTsKIH07CisKKyZ2cHUgeworCWNvbXBhdGlibGUgPSAiZnNsLGlteDZxLXZwdSIsICJjbm0sY29kYTk2MCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUyeHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1Mnh4LmR0c2kKaW5kZXggZDNjMGJmNS4uYjU3NTZjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUyeHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTJ4eC5kdHNpCkBAIC0yODIsNyArMjgyLDYgQEAKIH07CiAKICZzc2kxIHsKLQlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1M3h4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTN4eC5kdHNpCmluZGV4IGNhZGUxYmQuLjg2ZjAzYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1M3h4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUzeHguZHRzaQpAQCAtMjg3LDcgKzI4Nyw2IEBACiB9OwogCiAmc3NpMSB7Ci0JZnNsLG1vZGUgPSAiaTJzLXNsYXZlIjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTR4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzU0eHguZHRzaQppbmRleCBjZjEzMjM5Li40YThkOTdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTR4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1NHh4LmR0c2kKQEAgLTM3NiwxMiArMzc2LDEwIEBACiB9OwogCiAmc3NpMSB7Ci0JZnNsLG1vZGUgPSAiaTJzLXNsYXZlIjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCiAmc3NpMiB7Ci0JZnNsLG1vZGUgPSAiaTJzLXNsYXZlIjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXBoeXRlYy1wYmFiMDEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBiYWIwMS5kdHNpCmluZGV4IDU4NDcyMTIuLjU4NWI0ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBiYWIwMS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBiYWIwMS5kdHNpCkBAIC05LDE3ICs5LDEwMyBAQAogICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCiAgKi8KIAorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3NvdW5kL2ZzbC1pbXgtYXVkbXV4Lmg+CisKIC8gewogCWNob3NlbiB7CiAJCWxpbnV4LHN0ZG91dC1wYXRoID0gJnVhcnQ0OwogCX07CisKKwlyZWd1bGF0b3JzIHsKKwkJc291bmRfMXY4OiByZWd1bGF0b3JAMiB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Mj47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJpMnMtYXVkaW8tMXY4IjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCX07CisKKwkJc291bmRfM3YzOiByZWd1bGF0b3JAMyB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Mz47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJpMnMtYXVkaW8tM3YzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCX07CisJfTsKKworCXRsdjMyMF9tY2xrOiBvc2NpbGxhdG9yIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDE5MjAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gInRsdjMyMC1tY2xrIjsKKwl9OworCisJc291bmQgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1hdWRpby1jYXJkIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsbmFtZSA9ICJPbmJvYXJkVExWMzIwQUlDMzAwNyI7CisJCXNpbXBsZS1hdWRpby1jYXJkLGZvcm1hdCA9ICJpMnMiOworCQlzaW1wbGUtYXVkaW8tY2FyZCxiaXRjbG9jay1tYXN0ZXIgPSA8JmRhaWxpbmtfbWFzdGVyPjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZnJhbWUtbWFzdGVyID0gPCZkYWlsaW5rX21hc3Rlcj47CisJCXNpbXBsZS1hdWRpby1jYXJkLHdpZGdldHMgPQorCQkJIk1pY3JvcGhvbmUiLCAiTWljIEphY2siLAorCQkJIkxpbmUiLCAiTGluZSBJbiIsCisJCQkiTGluZSIsICJMaW5lIE91dCIsCisJCQkiU3BlYWtlciIsICJTcGVha2VyIiwKKwkJCSJIZWFkcGhvbmUiLCAiSGVhZHBob25lIEphY2siOworCQlzaW1wbGUtYXVkaW8tY2FyZCxyb3V0aW5nID0KKwkJCSJMaW5lIE91dCIsICJMTE9VVCIsCisJCQkiTGluZSBPdXQiLCAiUkxPVVQiLAorCQkJIlNwZWFrZXIiLCAiU1BPUCIsCisJCQkiU3BlYWtlciIsICJTUE9NIiwKKwkJCSJIZWFkcGhvbmUgSmFjayIsICJIUExPVVQiLAorCQkJIkhlYWRwaG9uZSBKYWNrIiwgIkhQUk9VVCIsCisJCQkiTUlDM0wiLCAiTWljIEphY2siLAorCQkJIk1JQzNSIiwgIk1pYyBKYWNrIiwKKwkJCSJNaWMgSmFjayIsICJNaWMgQmlhcyIsCisJCQkiTElORTFMIiwgIkxpbmUgSW4iLAorCQkJIkxJTkUxUiIsICJMaW5lIEluIjsKKworCQlzaW1wbGUtYXVkaW8tY2FyZCxjcHUgeworCQkJc291bmQtZGFpID0gPCZzc2kyPjsKKwkJfTsKKworCQlkYWlsaW5rX21hc3Rlcjogc2ltcGxlLWF1ZGlvLWNhcmQsY29kZWMgeworCQkJc291bmQtZGFpID0gPCZjb2RlYz47CisJCQljbG9ja3MgPSA8JnRsdjMyMF9tY2xrPjsKKwkJfTsKKwl9OworCiB9OwogCi0mZmVjIHsKKyZhdWRtdXggeworCXN0YXR1cyA9ICJva2F5IjsKKworCXNzaTIgeworCQlmc2wsYXVkbXV4LXBvcnQgPSA8MT47CisJCWZzbCxwb3J0LWNvbmZpZyA9IDwKKwkJCShJTVhfQVVETVVYX1YyX1BUQ1JfVEZTRElSIHwKKwkJCUlNWF9BVURNVVhfVjJfUFRDUl9URlNFTCg0KSB8CisJCQlJTVhfQVVETVVYX1YyX1BUQ1JfVENMS0RJUiB8CisJCQlJTVhfQVVETVVYX1YyX1BUQ1JfVENTRUwoNCkpCisJCQlJTVhfQVVETVVYX1YyX1BEQ1JfUlhEU0VMKDQpCisJCT47CisJfTsKKworCXBpbnM1IHsKKwkJZnNsLGF1ZG11eC1wb3J0ID0gPDQ+OworCQlmc2wscG9ydC1jb25maWcgPSA8CisJCQkweDAwMDAwMDAwCisJCQlJTVhfQVVETVVYX1YyX1BEQ1JfUlhEU0VMKDEpCisJCT47CisJfTsKK307CisKKyZjYW4xIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCi0mZ3BtaSB7CismZmVjIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCkBAIC0yOCwxNCArMTE0LDE4IEBACiB9OwogCiAmaTJjMiB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMj47Ci0JY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJc3RhdHVzID0gIm9rYXkiOwogCi0JdGx2MzIwQDE4IHsKLQkJY29tcGF0aWJsZSA9ICJ0aSx0bHYzMjBhaWMzeCI7CisJY29kZWM6IHRsdjMyMEAxOCB7CisJCWNvbXBhdGlibGUgPSAidGksdGx2MzIwYWljMzAwNyI7CisJCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CiAJCXJlZyA9IDwweDE4PjsKKwkJYWkzeC1taWNiaWFzLXZnID0gPDI+OworCisJCUFWREQtc3VwcGx5ID0gPCZzb3VuZF8zdjM+OworCQlJT1ZERC1zdXBwbHkgPSA8JnNvdW5kXzN2Mz47CisJCURSVkRELXN1cHBseSA9IDwmc291bmRfM3YzPjsKKwkJRFZERC1zdXBwbHkgPSA8JnNvdW5kXzF2OD47CiAJfTsKIAogCXN0bXBlQDQxIHsKQEAgLTU1LDkgKzE0NSwxNCBAQAogfTsKIAogJmkyYzMgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzM+OwotCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3NpMiB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIApAQCAtODQsMTkgKzE3OSwzIEBACiAmdXNkaGMzIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwotCi0maW9tdXhjIHsKLQlwaW5jdHJsX2kyYzI6IGkyYzJncnAgewotCQlmc2wscGlucyA9IDwKLQkJCU1YNlFETF9QQURfRUlNX0VCMl9fSTJDMl9TQ0wJCTB4NDAwMWI4YjEKLQkJCU1YNlFETF9QQURfRUlNX0QxNl9fSTJDMl9TREEJCTB4NDAwMWI4YjEKLQkJPjsKLQl9OwotCi0JcGluY3RybF9pMmMzOiBpMmMzZ3JwIHsKLQkJZnNsLHBpbnMgPSA8Ci0JCQlNWDZRRExfUEFEX0VJTV9EMTdfX0kyQzNfU0NMCQkweDQwMDFiOGIxCi0JCQlNWDZRRExfUEFEX0VJTV9EMThfX0kyQzNfU0RBCQkweDQwMDFiOGIxCi0JCT47Ci0JfTsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXBoeXRlYy1wZmxhMDIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBmbGEwMi5kdHNpCmluZGV4IDBlNTBiYjAuLjE5Y2MyNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBmbGEwMi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBmbGEwMi5kdHNpCkBAIC01OCw2ICs1OCwxOCBAQAogCX07CiB9OwogCismYXVkbXV4IHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9hdWRtdXg+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismY2FuMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZmxleGNhbjE+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCiAmZWNzcGkzIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lY3NwaTM+OwpAQCAtNzIsNiArODQsMjIgQEAKIAl9OwogfTsKIAorJmZlYyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldD47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCXBoeS1yZXNldC1ncGlvcyA9IDwmZ3BpbzMgMjMgR1BJT19BQ1RJVkVfTE9XPjsKKwlwaHktc3VwcGx5ID0gPCZ2ZGRfZXRoX2lvX3JlZz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZncG1pIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9ncG1pX25hbmQ+OworCW5hbmQtb24tZmxhc2gtYmJ0OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZpMmMxIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMxPjsKQEAgLTg1LDggKzExMyw4IEBACiAJcG1pY0A1OCB7CiAJCWNvbXBhdGlibGUgPSAiZGxnLGRhOTA2MyI7CiAJCXJlZyA9IDwweDU4PjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzQ+OwotCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47IC8qIGFjdGl2ZS1sb3cgR1BJTzRfMTcgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzI+OworCQlpbnRlcnJ1cHRzID0gPDkgMHg4PjsgLyogYWN0aXZlLWxvdyBHUElPMl85ICovCiAKIAkJcmVndWxhdG9ycyB7CiAJCQl2ZGRjb3JlX3JlZzogYmNvcmUxIHsKQEAgLTE2Miw2ICsxOTAsMTggQEAKIAl9OwogfTsKIAorJmkyYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzI+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworfTsKKworJmkyYzMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzM+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworfTsKKwogJmlvbXV4YyB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaG9nPjsKQEAgLTE3MSw3ICsyMTEsNyBAQAogCQkJZnNsLHBpbnMgPSA8CiAJCQkJTVg2UURMX1BBRF9FSU1fRDIzX19HUElPM19JTzIzIDB4ODAwMDAwMDAKIAkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDNfX0dQSU80X0lPMjQgMHg4MDAwMDAwMCAvKiBTUEkgTk9SIGNoaXBzZWxlY3QgKi8KLQkJCQlNWDZRRExfUEFEX0RJMF9QSU4xNV9fR1BJTzRfSU8xNyAgMHg4MDAwMDAwMCAvKiBQTUlDIGludGVycnVwdCAqLworCQkJCU1YNlFETF9QQURfU0Q0X0RBVDFfX0dQSU8yX0lPMDkgIDB4ODAwMDAwMDAgLyogUE1JQyBpbnRlcnJ1cHQgKi8KIAkJCQlNWDZRRExfUEFEX0VORVRfVFhEMF9fR1BJTzFfSU8zMCAweDgwMDAwMDAwIC8qIEdyZWVuIExFRCAqLwogCQkJCU1YNlFETF9QQURfRUlNX0VCM19fR1BJTzJfSU8zMSAweDgwMDAwMDAwIC8qIFJlZCBMRUQgKi8KIAkJCT47CkBAIC0yMDYsNiArMjQ2LDEzIEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfZmxleGNhbjE6IGZsZXhjYW4xZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfS0VZX1JPVzJfX0ZMRVhDQU4xX1JYCTB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX0tFWV9DT0wyX19GTEVYQ0FOMV9UWAkweDFiMGIwCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfZ3BtaV9uYW5kOiBncG1pbmFuZGdycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDZRRExfUEFEX05BTkRGX0NMRV9fTkFORF9DTEUJCTB4YjBiMQpAQCAtMjM1LDYgKzI4MiwyNCBAQAogCQkJPjsKIAkJfTsKIAorCQlwaW5jdHJsX2kyYzI6IGkyYzJncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9FSU1fRUIyX19JMkMyX1NDTAkJMHg0MDAxYjhiMQorCQkJCU1YNlFETF9QQURfRUlNX0QxNl9fSTJDMl9TREEJCTB4NDAwMWI4YjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9pMmMzOiBpMmMzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRUlNX0QxN19fSTJDM19TQ0wJCTB4NDAwMWI4YjEKKwkJCQlNWDZRRExfUEFEX0VJTV9EMThfX0kyQzNfU0RBCQkweDQwMDFiOGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfcGNpZTogcGNpZWdycCB7CisJCQlmc2wscGlucyA9IDxNWDZRRExfUEFEX0RJMF9QSU4xNV9fR1BJTzRfSU8xNyAgMHg4MDAwMDAwMD47CisJCX07CisKIAkJcGluY3RybF91YXJ0MzogdWFydDNncnAgewogCQkJZnNsLHBpbnMgPSA8CiAJCQkJTVg2UURMX1BBRF9FSU1fRDI0X19VQVJUM19UWF9EQVRBCTB4MWIwYjEKQEAgLTI5MywyMiArMzU4LDIyIEBACiAJCQkJTVg2UURMX1BBRF9FTkVUX1RYRDFfX0dQSU8xX0lPMjkgMHg4MDAwMDAwMAogCQkJPjsKIAkJfTsKKworCQlwaW5jdHJsX2F1ZG11eDogYXVkbXV4Z3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRElTUDBfREFUMTZfX0FVRDVfVFhDCTB4MTMwYjAKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDE3X19BVUQ1X1RYRAkweDExMGIwCisJCQkJTVg2UURMX1BBRF9ESVNQMF9EQVQxOF9fQVVENV9UWEZTCTB4MTMwYjAKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDE5X19BVUQ1X1JYRAkweDEzMGIwCisJCQk+OworCQl9OwogCX07CiB9OwogCi0mZmVjIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0PjsKLQlwaHktbW9kZSA9ICJyZ21paSI7Ci0JcGh5LXJlc2V0LWdwaW9zID0gPCZncGlvMyAyMyBHUElPX0FDVElWRV9MT1c+OwotCXBoeS1zdXBwbHkgPSA8JnZkZF9ldGhfaW9fcmVnPjsKLQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotfTsKLQotJmdwbWkgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2dwbWlfbmFuZD47Ci0JbmFuZC1vbi1mbGFzaC1iYnQ7CismcGNpZSB7CisJcGluY3RybC1uYW1lID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wY2llPjsKKwlyZXNldC1ncGlvID0gPCZncGlvNCAxNyAwPjsKIAlzdGF0dXMgPSAiZGlzYWJsZWQiOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1yZXguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcmV4LmR0c2kKaW5kZXggZGY3YmNmOC4uNDg4YTY0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1yZXguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXJleC5kdHNpCkBAIC0zMDgsNyArMzA4LDYgQEAKIH07CiAKICZzc2kxIHsKLQlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVzZC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZXNkLmR0c2kKaW5kZXggYmFmMmYwMC4uZjFjZDIxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZXNkLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZXNkLmR0c2kKQEAgLTEwNywxMCArMTA3LDggQEAKIAkJCSJIZWFkcGhvbmUgSmFjayIsICJIUE9VVFIiLAogCQkJIkV4dCBTcGsiLCAiU1BLT1VUTCIsCiAJCQkiRXh0IFNwayIsICJTUEtPVVRSIiwKLQkJCSJNSUNCSUFTIiwgIkFNSUMiLAotCQkJIklOM1IiLCAiTUlDQklBUyIsCi0JCQkiRE1JQyIsICJNSUNCSUFTIiwKLQkJCSJETUlDREFUIiwgIkRNSUMiOworCQkJIkFNSUMiLCAiTUlDQklBUyIsCisJCQkiSU4zUiIsICJBTUlDIjsKIAkJbXV4LWludC1wb3J0ID0gPDI+OwogCQltdXgtZXh0LXBvcnQgPSA8Mz47CiAJfTsKQEAgLTE3OSw3ICsxNzcsNyBAQAogCWNvZGVjOiB3bTg5NjJAMWEgewogCQljb21wYXRpYmxlID0gIndsZix3bTg5NjIiOwogCQlyZWcgPSA8MHgxYT47Ci0JCWNsb2NrcyA9IDwmY2xrcyAyMDE+OworCQljbG9ja3MgPSA8JmNsa3MgSU1YNlFETF9DTEtfQ0tPPjsKIAkJRENWREQtc3VwcGx5ID0gPCZyZWdfYXVkaW8+OwogCQlEQlZERC1zdXBwbHkgPSA8JnJlZ19hdWRpbz47CiAJCUFWREQtc3VwcGx5ID0gPCZyZWdfYXVkaW8+OwpAQCAtNTMxLDYgKzUyOSwxMCBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZzbnZzX3Bvd2Vyb2ZmIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmc3NpMiB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaQppbmRleCA5NTk2ZWQ1Li40ZmMwM2I3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC5kdHNpCkBAIC0zMzMsOSArMzMzLDE3IEBACiAJCQl9OwogCiAJCQl2cHU6IHZwdUAwMjA0MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJjbm0sY29kYTk2MCI7CiAJCQkJcmVnID0gPDB4MDIwNDAwMDAgMHgzYzAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwwIDMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkJICAgICAgICAgICAgIDwwIDEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWludGVycnVwdC1uYW1lcyA9ICJiaXQiLCAianBlZyI7CisJCQkJY2xvY2tzID0gPCZjbGtzIElNWDZRRExfQ0xLX1ZQVV9BWEk+LAorCQkJCQkgPCZjbGtzIElNWDZRRExfQ0xLX01NRENfQ0gwX0FYST4sCisJCQkJCSA8JmNsa3MgSU1YNlFETF9DTEtfT0NSQU0+OworCQkJCWNsb2NrLW5hbWVzID0gInBlciIsICJhaGIiLCAib2NyYW0iOworCQkJCXJlc2V0cyA9IDwmc3JjIDE+OworCQkJCWlyYW0gPSA8Jm9jcmFtPjsKIAkJCX07CiAKIAkJCWFpcHN0ekAwMjA3YzAwMCB7IC8qIEFJUFNUWjEgKi8KQEAgLTY1Nyw2ICs2NjUsMTIgQEAKIAkJCQkJaW50ZXJydXB0cyA9IDwwIDE5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJCQkJICAgICA8MCAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCQl9OworCisJCQkJc252c19wb3dlcm9mZjogc252cy1wb3dlcm9mZkAzOCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXBvd2Vyb2ZmIjsKKwkJCQkJcmVnID0gPDB4MzggMHg0PjsKKwkJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCQl9OwogCQkJfTsKIAogCQkJZXBpdDE6IGVwaXRAMDIwZDAwMDAgeyAvKiBFUElUMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLWV2ay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wtZXZrLmR0cwppbmRleCA4OThkMTRmLi5mZGE0OTMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wtZXZrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wtZXZrLmR0cwpAQCAtNTgwLDYgKzU4MCwxMCBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZzbnZzX3Bvd2Vyb2ZmIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmc3NpMiB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzbC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLmR0c2kKaW5kZXggZGZkODNlNi4uMzZhYjhlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLmR0c2kKQEAgLTU3NCw2ICs1NzQsMTIgQEAKIAkJCQkJaW50ZXJydXB0cyA9IDwwIDE5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJCQkJICAgICA8MCAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCQl9OworCisJCQkJc252c19wb3dlcm9mZjogc252cy1wb3dlcm9mZkAzOCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXBvd2Vyb2ZmIjsKKwkJCQkJcmVnID0gPDB4MzggMHg0PjsKKwkJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCQl9OwogCQkJfTsKIAogCQkJZXBpdDE6IGVwaXRAMDIwZDAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LXNkYi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cwppbmRleCA4MmQ2YjM0Li4xZTZlNWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cwpAQCAtMTA1LDYgKzEwNSwzMCBAQAogCQkJZ3BpbyA9IDwmZ3BpbzMgMjcgMD47CiAJCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJCX07CisKKwkJcmVnX3BlcmlfM3YzOiByZWd1bGF0b3JANSB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8NT47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3BlcmlfM3YzPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInBlcmlfM3YzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlncGlvcyA9IDwmZ3BpbzQgMTYgR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXJlZ19lbmV0XzN2MzogcmVndWxhdG9yQDYgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDY+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0XzN2Mz47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJlbmV0XzN2MyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJZ3Bpb3MgPSA8JmdwaW8yIDYgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKIAl9OwogCiAJc291bmQgewpAQCAtMTMzLDYgKzE1NywxNCBAQAogJmZlYzEgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2VuZXQxPjsKKwlwaHktc3VwcGx5ID0gPCZyZWdfZW5ldF8zdjM+OworCXBoeS1tb2RlID0gInJnbWlpIjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZmVjMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldDI+OwogCXBoeS1tb2RlID0gInJnbWlpIjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwpAQCAtMzA0LDYgKzMzNiwxMCBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZzbnZzX3Bvd2Vyb2ZmIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmc3NpMiB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKQEAgLTM5NCw2ICs0MzAsMzAgQEAKIAkJCQlNWDZTWF9QQURfUkdNSUkxX1JEMl9fRU5FVDFfUlhfREFUQV8yCTB4MzA4MQogCQkJCU1YNlNYX1BBRF9SR01JSTFfUkQzX19FTkVUMV9SWF9EQVRBXzMJMHgzMDgxCiAJCQkJTVg2U1hfUEFEX1JHTUlJMV9SWF9DVExfX0VORVQxX1JYX0VOCTB4MzA4MQorCQkJCU1YNlNYX1BBRF9FTkVUMl9SWF9DTEtfX0VORVQyX1JFRl9DTEtfMjVNCTB4OTEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9lbmV0XzN2MzogZW5ldDN2M2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZTWF9QQURfRU5FVDJfQ09MX19HUElPMl9JT182CQkweDgwMDAwMDAwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfZW5ldDI6IGVuZXQyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlNYX1BBRF9SR01JSTJfVFhDX19FTkVUMl9SR01JSV9UWEMJMHhhMGI5CisJCQkJTVg2U1hfUEFEX1JHTUlJMl9URDBfX0VORVQyX1RYX0RBVEFfMAkweGEwYjEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1REMV9fRU5FVDJfVFhfREFUQV8xCTB4YTBiMQorCQkJCU1YNlNYX1BBRF9SR01JSTJfVEQyX19FTkVUMl9UWF9EQVRBXzIJMHhhMGIxCisJCQkJTVg2U1hfUEFEX1JHTUlJMl9URDNfX0VORVQyX1RYX0RBVEFfMwkweGEwYjEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1RYX0NUTF9fRU5FVDJfVFhfRU4JMHhhMGIxCisJCQkJTVg2U1hfUEFEX1JHTUlJMl9SWENfX0VORVQyX1JYX0NMSwkweDMwODEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1JEMF9fRU5FVDJfUlhfREFUQV8wCTB4MzA4MQorCQkJCU1YNlNYX1BBRF9SR01JSTJfUkQxX19FTkVUMl9SWF9EQVRBXzEJMHgzMDgxCisJCQkJTVg2U1hfUEFEX1JHTUlJMl9SRDJfX0VORVQyX1JYX0RBVEFfMgkweDMwODEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1JEM19fRU5FVDJfUlhfREFUQV8zCTB4MzA4MQorCQkJCU1YNlNYX1BBRF9SR01JSTJfUlhfQ1RMX19FTkVUMl9SWF9FTgkweDMwODEKIAkJCT47CiAJCX07CiAKQEAgLTQ1Miw2ICs1MTIsMTIgQEAKIAkJCT47CiAJCX07CiAKKwkJcGluY3RybF9wZXJpXzN2MzogcGVyaTN2M2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZTWF9QQURfUVNQSTFBX0RBVEEwX19HUElPNF9JT18xNgkweDgwMDAwMDAwCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfcHdtMzogcHdtM2dycC0xIHsKIAkJCWZzbCxwaW5zID0gPAogCQkJCU1YNlNYX1BBRF9TRDFfREFUQTJfX1BXTTNfT1VUIDB4MTEwYjAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LmR0c2kKaW5kZXggZjNlODhjMC4uN2EyNGZlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LmR0c2kKQEAgLTY3MSw2ICs2NzEsMTIgQEAKIAkJCQkJcmVnID0gPDB4MzQgMHg1OD47CiAJCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxOSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwgPEdJQ19TUEkgMjAgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQkJfTsKKworCQkJCXNudnNfcG93ZXJvZmY6IHNudnMtcG93ZXJvZmZAMzggeworCQkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1wb3dlcm9mZiI7CisJCQkJCXJlZyA9IDwweDM4IDB4ND47CisJCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQkJfTsKIAkJCX07CiAKIAkJCWVwaXQxOiBlcGl0QDAyMGQwMDAwIHsKQEAgLTg3Nyw3ICs4ODMsNyBAQAogCQkJfTsKIAogCQkJZmVjMjogZXRoZXJuZXRAMDIxYjQwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZzeC1mZWMiOworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZzeC1mZWMiLCAiZnNsLGlteDZxLWZlYyI7CiAJCQkJcmVnID0gPDB4MDIxYjQwMDAgMHg0MDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTAyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJCQkgICAgIDxHSUNfU1BJIDEwMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2ludGVncmF0b3IuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2ludGVncmF0b3IuZHRzaQppbmRleCA4OGUzZDQ3Ny4uMjhlMzhmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW50ZWdyYXRvci5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2ludGVncmF0b3IuZHRzaQpAQCAtNiw4ICs2LDE4IEBACiAKIC8gewogCWNvcmUtbW9kdWxlQDEwMDAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJhcm0sY29yZS1tb2R1bGUtaW50ZWdyYXRvciI7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcmUtbW9kdWxlLWludGVncmF0b3IiLCAic3lzY29uIjsKIAkJcmVnID0gPDB4MTAwMDAwMDAgMHgyMDA+OworCisJCS8qIFVzZSBjb3JlIG1vZHVsZSBMRUQgdG8gaW5kaWNhdGUgQ1BVIGxvYWQgKi8KKwkJbGVkQDBjLjAgeworCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCW9mZnNldCA9IDwweDBjPjsKKwkJCW1hc2sgPSA8MHgwMT47CisJCQlsYWJlbCA9ICJpbnRlZ3JhdG9yOmNvcmVfbW9kdWxlIjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHUwIjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAib24iOworCQl9OwogCX07CiAKIAllYmlAMTIwMDAwMDAgewpAQCAtODIsNSArOTIsNDEgQEAKIAkJCXJlZyA9IDwweDE5MDAwMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ+OwogCQl9OworCisJCXN5c2NvbiB7CisJCQkvKiBEZWJ1ZyByZWdpc3RlcnMgbWFwcGVkIGFzIHN5c2NvbiAqLworCQkJY29tcGF0aWJsZSA9ICJzeXNjb24iOworCQkJcmVnID0gPDB4MWEwMDAwMDAgMHgxMD47CisKKwkJCWxlZEAwNC4wIHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA0PjsKKwkJCQltYXNrID0gPDB4MDE+OworCQkJCWxhYmVsID0gImludGVncmF0b3I6Z3JlZW4wIjsKKwkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKKwkJCX07CisJCQlsZWRAMDQuMSB7CisJCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCQlvZmZzZXQgPSA8MHgwND47CisJCQkJbWFzayA9IDwweDAyPjsKKwkJCQlsYWJlbCA9ICJpbnRlZ3JhdG9yOnllbGxvdyI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJCWxlZEAwNC4yIHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA0PjsKKwkJCQltYXNrID0gPDB4MDQ+OworCQkJCWxhYmVsID0gImludGVncmF0b3I6cmVkIjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA0LjMgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDQ+OworCQkJCW1hc2sgPSA8MHgwOD47CisJCQkJbGFiZWwgPSAiaW50ZWdyYXRvcjpncmVlbjEiOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9rMmUtZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS1ldm0uZHRzCmluZGV4IGM1NjhmMDYuLjU2MGQ2MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS1ldm0uZHRzCkBAIC0xMzksMyArMTM5LDE1IEBACiAJCX07CiAJfTsKIH07CisKKyZtZGlvIHsKKwlldGhwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCWNvbXBhdGlibGUgPSAibWFydmVsbCw4OEUxNTE0IiwgIm1hcnZlbGwsODhFMTUxMCIsICJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMiI7CisJCXJlZyA9IDwwPjsKKwl9OworCisJZXRocGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQljb21wYXRpYmxlID0gIm1hcnZlbGwsODhFMTUxNCIsICJtYXJ2ZWxsLDg4RTE1MTAiLCAiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjIiOworCQlyZWcgPSA8MT47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9rMmUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS5kdHNpCmluZGV4IGMzNThiNGIuLjVmYzE0NjgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9rMmUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9rMmUuZHRzaQpAQCAtODUsNiArODUsNTEgQEAKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQkJZ3BpbyxzeXNjb24tZGV2ID0gPCZkZXZjdHJsIDB4MjQwPjsKIAkJfTsKKworCQlwY2llQDIxMDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksa2V5c3RvbmUtcGNpZSIsInNucHMsZHctcGNpZSI7CisJCQljbG9ja3MgPSA8JmNsa3BjaWUxPjsKKwkJCWNsb2NrLW5hbWVzID0gInBjaWUiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCXJlZyA9ICA8MHgyMTAyMTAwMCAweDIwMDA+LCA8MHgyMTAyMDAwMCAweDEwMDA+LCA8MHgwMjYyMDEyOCA0PjsKKwkJCXJhbmdlcyA9IDwweDgxMDAwMDAwIDAgMCAweDIzMjYwMDAwIDB4NDAwMCAweDQwMDAKKwkJCQkweDgyMDAwMDAwIDAgMHg2MDAwMDAwMCAweDYwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQludW0tbGFuZXMgPSA8Mj47CisKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJnBjaWVfaW50YzEgMD4sIC8qIElOVCBBICovCisJCQkJCTwwIDAgMCAyICZwY2llX2ludGMxIDE+LCAvKiBJTlQgQiAqLworCQkJCQk8MCAwIDAgMyAmcGNpZV9pbnRjMSAyPiwgLyogSU5UIEMgKi8KKwkJCQkJPDAgMCAwIDQgJnBjaWVfaW50YzEgMz47IC8qIElOVCBEICovCisKKwkJCXBjaWVfbXNpX2ludGMxOiBtc2ktaW50ZXJydXB0LWNvbnRyb2xsZXIgeworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzc3IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzc4IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzc5IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzgwIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzgxIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzgyIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzgzIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzg0IElSUV9UWVBFX0VER0VfUklTSU5HPjsKKwkJCX07CisKKwkJCXBjaWVfaW50YzE6IGxlZ2FjeS1pbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzNzMgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNzQgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNzUgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNzYgSVJRX1RZUEVfRURHRV9SSVNJTkc+OworCQkJfTsKKwkJfTsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvazJsLWV2bS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9rMmwtZXZtLmR0cwppbmRleCBmZWM0MzEyLi44NWNjN2YyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9rMmwtZXZtLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9rMmwtZXZtLmR0cwpAQCAtMTE2LDMgKzExNiwxNSBAQAogCQl9OwogCX07CiB9OworCismbWRpbyB7CisJZXRocGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQljb21wYXRpYmxlID0gIm1hcnZlbGwsODhFMTUxNCIsICJtYXJ2ZWxsLDg4RTE1MTAiLCAiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjIiOworCQlyZWcgPSA8MD47CisJfTsKKworCWV0aHBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLDg4RTE1MTQiLCAibWFydmVsbCw4OEUxNTEwIiwgImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyIjsKKwkJcmVnID0gPDE+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2V5c3RvbmUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tleXN0b25lLmR0c2kKaW5kZXggNWQzZTgzZi4uYzA2NTQyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2V5c3RvbmUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9rZXlzdG9uZS5kdHNpCkBAIC0yODUsNSArMjg1LDUwIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkJdGksc3lzY29uLWRldiA9IDwmZGV2Y3RybCAweDJhMD47CiAJCX07CisKKwkJcGNpZUAyMTgwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGtleXN0b25lLXBjaWUiLCAic25wcyxkdy1wY2llIjsKKwkJCWNsb2NrcyA9IDwmY2xrcGNpZT47CisJCQljbG9jay1uYW1lcyA9ICJwY2llIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSAgPDB4MjE4MDEwMDAgMHgyMDAwPiwgPDB4MjE4MDAwMDAgMHgxMDAwPiwgPDB4MDI2MjAxMjggND47CisJCQlyYW5nZXMgPSA8MHg4MTAwMDAwMCAwIDAgMHgyMzI1MDAwMCAwIDB4NDAwMAorCQkJCTB4ODIwMDAwMDAgMCAweDUwMDAwMDAwIDB4NTAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCW51bS1sYW5lcyA9IDwyPjsKKworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDwwIDAgMCA3PjsKKwkJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmcGNpZV9pbnRjMCAwPiwgLyogSU5UIEEgKi8KKwkJCQkJPDAgMCAwIDIgJnBjaWVfaW50YzAgMT4sIC8qIElOVCBCICovCisJCQkJCTwwIDAgMCAzICZwY2llX2ludGMwIDI+LCAvKiBJTlQgQyAqLworCQkJCQk8MCAwIDAgNCAmcGNpZV9pbnRjMCAzPjsgLyogSU5UIEQgKi8KKworCQkJcGNpZV9tc2lfaW50YzA6IG1zaS1pbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzMCBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDMxIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzIgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzMyBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDM0IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzUgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDM3IElSUV9UWVBFX0VER0VfUklTSU5HPjsKKwkJCX07CisKKwkJCXBjaWVfaW50YzA6IGxlZ2FjeS1pbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDI3IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMjggSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAyOSBJUlFfVFlQRV9FREdFX1JJU0lORz47CisJCQl9OworCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZGlyNjY1LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRpcjY2NS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2OTU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRpcjY2NS5kdHMKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQ2xhdWRpbyBMZWl0ZSA8bGVpdGVjQHN0YXRpY2t5LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImtpcmt3b29kLmR0c2kiCisjaW5jbHVkZSAia2lya3dvb2QtNjI4MS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJELUxpbmsgRElSLTY2NSI7CisJY29tcGF0aWJsZSA9ICJkbGluayxkaXItNjY1IiwgIm1hcnZlbGwsa2lya3dvb2QtODhmNjI4MSIsICJtYXJ2ZWxsLGtpcmt3b29kIjsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4ODAwMDAwMD47IC8qIDEyOCBNQiAqLworCX07CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IGVhcmx5cHJpbnRrIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CisJfTsKKworCW1idXMgeworCQlwY2llLWNvbnRyb2xsZXIgeworCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQlwY2llQDEsMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKwkJfTsKKwl9OworCisJb2NwQGYxMDAwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgeworCQkJcGluY3RybC0wID08ICZwbXhfbGVkX3VzYgorCQkJCSAgICAgJnBteF9sZWRfaW50ZXJuZXRfYmx1ZQorCQkJCSAgICAgJnBteF9sZWRfaW50ZXJuZXRfYW1iZXIKKwkJCQkgICAgICZwbXhfbGVkXzVnICZwbXhfbGVkX3N0YXR1c19ibHVlCisJCQkJICAgICAmcG14X2xlZF93cHMgJnBteF9sZWRfc3RhdHVzX2FtYmVyCisJCQkJICAgICAmcG14X2xlZF8yNGcKKwkJCQkgICAgICZwbXhfYnRuX3Jlc3RhcnQgJnBteF9idG5fd3BzPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJCXBteF9sZWRfdXNiOiBwbXgtbGVkLXVzYiB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDEyIjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKwkJCXBteF9sZWRfaW50ZXJuZXRfYmx1ZTogcG14LWxlZC1pbnRlcm5ldC1ibHVlIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDIiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2xlZF9pbnRlcm5ldF9hbWJlcjogcG14LWxlZC1pbnRlcm5ldC1hbWJlciB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQzIjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKwkJCXBteF9sZWRfNWc6IHBteC1sZWQtNWcgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NCI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCQlwbXhfbGVkX3N0YXR1c19ibHVlOiBwbXgtbGVkLXN0YXR1cy1ibHVlIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDUiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2xlZF93cHM6IHBteC1sZWQtd3BzIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDciOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2xlZF9zdGF0dXNfYW1iZXI6IHBteC1sZWQtc3RhdHVzLWFtYmVyIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDgiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2xlZF8yNGc6IHBteC1sZWQtMjRnIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDkiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2J0bl9yZXN0YXJ0OiBwbXgtYnRuLXJlc3RhcnQgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyOCI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCQlwbXhfYnRuX3dwczogcG14LWJ0bi13cHMgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NiI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCX07CisKKwkJc3BpQDEwNjAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCW0yNXA4MEAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gIm14aWN5LG14MjVsMTI4MDVkIjsKKwkJCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47CisJCQkJcmVnID0gPDA+OworCisJCQkJcGFydGl0aW9uQDAgeworCQkJCQlsYWJlbCA9ICJ1Ym9vdCI7CisJCQkJCXJlZyA9IDwweDAgMHgzMDAwMD47CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDMwMDAwIHsKKwkJCQkJbGFiZWwgPSAibnZyYW0iOworCQkJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCQkJcmVhZC1vbmx5OworCQkJCX07CisKKwkJCQlwYXJ0aXRpb25ANDAwMDAgeworCQkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCQlyZWcgPSA8MHg0MDAwMCAweDE4MDAwMD47CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkAxYzAwMDAgeworCQkJCQlsYWJlbCA9ICJyb290ZnMiOworCQkJCQlyZWcgPSA8MHgxYzAwMDAgMHhlMDAwMDA+OworCQkJCX07CisKKwkJCQljYWxfZGF0YTogcGFydGl0aW9uQGZjMDAwMCB7CisJCQkJCWxhYmVsID0gImNhbF9kYXRhIjsKKwkJCQkJcmVnID0gPDB4ZmMwMDAwIDB4MTAwMDA+OworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkBmZDAwMDAgeworCQkJCQlsYWJlbCA9ICJsYW5nX3BhY2siOworCQkJCQlyZWcgPSA8MHhmZDAwMDAgMHgzMDAwMD47CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlzZXJpYWxAMTIwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyY0AxMTAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJZWhjaUA1MDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKKworCWdwaW8tbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKworCQlibHVlLXVzYiB7CisJCQlsYWJlbCA9ICJkaXI2NjU6Ymx1ZTp1c2IiOworCQkJZ3Bpb3MgPSA8JmdwaW8wIDEyIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCQlibHVlLWludGVybmV0IHsKKwkJCS8qIENhbiBvbmx5IGJlIHR1cm5lZCBvbiBpZiB0aGUgSW50ZXJuZXQKKwkJCSAqIEV0aGVybmV0IHBvcnQgaGFzIExpbmsKKwkJCSAqLworCQkJbGFiZWwgPSAiZGlyNjY1OmJsdWU6aW50ZXJuZXQiOworCQkJZ3Bpb3MgPSA8JmdwaW8xIDEwIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJCWFtYmVyLWludGVybmV0IHsKKwkJCWxhYmVsID0gImRpcjY2NTphbWJlcjppbnRlcm5ldCI7CisJCQlncGlvcyA9IDwmZ3BpbzEgMTEgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJCWJsdWUtd2lmaTVnIHsKKwkJCWxhYmVsID0gImRpcjY2NTpibHVlOjVnIjsKKwkJCWdwaW9zID0gPCZncGlvMSAxMiBHUElPX0FDVElWRV9MT1c+OworCQl9OworCQlibHVlLXN0YXR1cyB7CisJCQlsYWJlbCA9ICJkaXI2NjU6Ymx1ZTpzdGF0dXMiOworCQkJZ3Bpb3MgPSA8JmdwaW8xIDEzIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCQlibHVlLXdwcyB7CisJCQlsYWJlbCA9ICJkaXI2NjU6Ymx1ZTp3cHMiOworCQkJZ3Bpb3MgPSA8JmdwaW8xIDE1IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCQlhbWJlci1zdGF0dXMgeworCQkJbGFiZWwgPSAiZGlyNjY1OmFtYmVyOnN0YXR1cyI7CisJCQlncGlvcyA9IDwmZ3BpbzEgMTYgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJCWJsdWUtMjRnIHsKKwkJCWxhYmVsID0gImRpcjY2NTpibHVlOjI0ZyI7CisJCQlncGlvcyA9IDwmZ3BpbzEgMTcgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcmVzZXQgeworCQkJbGFiZWwgPSAicmVzZXQiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmZ3BpbzAgMjggR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwkJd3BzIHsKKwkJCWxhYmVsID0gIndwcyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZncGlvMSAxNCBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07CisKKwlkc2FAMCB7CisJCWNvbXBhdGlibGUgPSAibWFydmVsbCxkc2EiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJZHNhLGV0aGVybmV0ID0gPCZldGgwcG9ydD47CisJCWRzYSxtaWktYnVzID0gPCZtZGlvPjsKKworCQlzd2l0Y2hAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDAgMD47CS8qIE1ESU8gYWRkcmVzcyAwLCBzd2l0Y2ggMCBpbiB0cmVlICovCisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWxhYmVsID0gImxhbjQiOworCQkJfTsKKworCQkJcG9ydEAxIHsKKwkJCSAgICAgICByZWcgPSA8MT47CisJCQkgICAgICAgbGFiZWwgPSAibGFuMyI7CisJCQl9OworCisJCQlwb3J0QDIgeworCQkJICAgICAgIHJlZyA9IDwyPjsKKwkJCSAgICAgICBsYWJlbCA9ICJsYW4yIjsKKwkJCX07CisKKwkJCXBvcnRAMyB7CisJCQkgICAgICAgcmVnID0gPDM+OworCQkJICAgICAgIGxhYmVsID0gImxhbjEiOworCQkJfTsKKworCQkJcG9ydEA0IHsKKwkJCQlyZWcgPSA8ND47CisJCQkJbGFiZWwgPSAid2FuIjsKKwkJCX07CisKKwkJCXBvcnRANiB7CisJCQkgICAgICAgcmVnID0gPDY+OworCQkJICAgICAgIGxhYmVsID0gImNwdSI7CisJCQl9OworCQl9OworCX07Cit9OworCismbWRpbyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogZXRoMCBpcyBjb25uZWN0ZWQgdG8gYSBNYXJ2ZWxsIDg4RTYxNzEgc3dpdGNoLCB3aXRob3V0IGEgUEhZLiBTbyBzZXQKKyAqIGZpeGVkIHNwZWVkIGFuZCBkdXBsZXguICovCismZXRoMCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZXRoZXJuZXQwLXBvcnRAMCB7CisJCXNwZWVkID0gPDEwMDA+OworCQlkdXBsZXggPSA8MT47CisJfTsKK307CisKKy8qIGV0aDEgaXMgY29ubmVjdGVkIHRvIHRoZSBzd2l0Y2ggYXMgd2VsbC4gSG93ZXZlciBEU0Egb25seSBzdXBwb3J0cyBhCisgKiBzaW5nbGUgQ1BVIHBvcnQuIFNvIGxlYXZlIHRoaXMgcG9ydCBkaXNhYmxlZCB0byBhdm9pZCBjb25mdXNpb24uICovCisKKyZldGgxIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworLyogVGhlcmUgaXMgbm8gYmF0dGVyeSBvbiB0aGUgYm9hcmRzLCBzbyB0aGUgUlRDIGRvZXMgbm90IGtlZXAgdGltZQorICogd2hlbiB0aGVyZSBpcyBubyBwb3dlciwgbWFraW5nIGl0IHVzZWxlc3MuICovCismcnRjIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXN5bm9sb2d5LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1zeW5vbG9neS5kdHNpCmluZGV4IDgxMWUwOTcuLjhiZTViMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXN5bm9sb2d5LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtc3lub2xvZ3kuZHRzaQpAQCAtMjY2LDcgKzI2Niw3IEBACiAKIAkJCXMzNTM5MGE6IHMzNTM5MGFAMzAgewogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQkJY29tcGF0aWJsZSA9ICJzc2ksczM1MzkwYSI7CisJCQkJY29tcGF0aWJsZSA9ICJzaWksczM1MzkwYSI7CiAJCQkJcmVnID0gPDB4MzA+OwogCQkJfTsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEtcWRzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEtcWRzLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzVlMTZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbHMxMDIxYS1xZHMuZHRzCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KKyAqCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgImxzMTAyMWEuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTFMxMDIxQSBRRFMgQm9hcmQiOworCisJYWxpYXNlcyB7CisJCWVuZXQwX3JnbWlpX3BoeSA9ICZyZ21paV9waHkxOworCQllbmV0MV9yZ21paV9waHkgPSAmcmdtaWlfcGh5MjsKKwkJZW5ldDJfcmdtaWlfcGh5ID0gJnJnbWlpX3BoeTM7CisJCWVuZXQwX3NnbWlpX3BoeSA9ICZzZ21paV9waHkxYzsKKwkJZW5ldDFfc2dtaWlfcGh5ID0gJnNnbWlpX3BoeTFkOworCX07Cit9OworCismZHNwaTAgeworCWJ1cy1udW0gPSA8MD47CisJc3RhdHVzID0gIm9rYXkiOworCisJZHNwaWZsYXNoOiBhdDQ1ZGIwMjFkQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ0NWRiMDIxZCIsICJhdG1lbCxhdDQ1IiwgImF0bWVsLGRhdGFmbGFzaCI7CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDE2MDAwMDAwPjsKKwkJc3BpLWNwb2w7CisJCXNwaS1jcGhhOworCQlyZWcgPSA8MD47CisJfTsKK307CisKKyZpMmMwIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwY2E5NTQ3OiBtdXhANzcgeworCQlyZWcgPSA8MHg3Nz47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlpMmNAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4MD47CisKKwkJCWRzMzIzMjogcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczMyMzIiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJfTsKKwkJfTsKKworCQlpMmNAMiB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4Mj47CisKKwkJCWluYTIyMEA0MCB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxpbmEyMjAiOworCQkJCXJlZyA9IDwweDQwPjsKKwkJCQlzaHVudC1yZXNpc3RvciA9IDwxMDAwPjsKKwkJCX07CisKKwkJCWluYTIyMEA0MSB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxpbmEyMjAiOworCQkJCXJlZyA9IDwweDQxPjsKKwkJCQlzaHVudC1yZXNpc3RvciA9IDwxMDAwPjsKKwkJCX07CisJCX07CisKKwkJaTJjQDMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDM+OworCisJCQllZXByb21ANTYgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjNTEyIjsKKwkJCQlyZWcgPSA8MHg1Nj47CisJCQl9OworCisJCQllZXByb21ANTcgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjNTEyIjsKKwkJCQlyZWcgPSA8MHg1Nz47CisJCQl9OworCisJCQlhZHQ3NDYxYUA0YyB7CisJCQkJY29tcGF0aWJsZSA9ICJhZGksYWR0NzQ2MWEiOworCQkJCXJlZyA9IDwweDRjPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZpZmMgeworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDE+OworCS8qIE5PUiwgTkFORCBGbGFzaGVzIGFuZCBGUEdBIG9uIGJvYXJkICovCisJcmFuZ2VzID0gPDB4MCAweDAgMHgwIDB4NjAwMDAwMDAgMHgwODAwMDAwMAorCQkgIDB4MiAweDAgMHgwIDB4N2U4MDAwMDAgMHgwMDAxMDAwMAorCQkgIDB4MyAweDAgMHgwIDB4N2ZiMDAwMDAgMHgwMDAwMDEwMD47CisJc3RhdHVzID0gIm9rYXkiOworCisJbm9yQDAsMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQlyZWcgPSA8MHgwIDB4MCAweDgwMDAwMDA+OworCQliYW5rLXdpZHRoID0gPDI+OworCQlkZXZpY2Utd2lkdGggPSA8MT47CisJfTsKKworCWZwZ2E6IGJvYXJkLWNvbnRyb2xAMywwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHgzIDB4MCAweDAwMDAxMDA+OworCQliYW5rLXdpZHRoID0gPDE+OworCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCXJhbmdlcyA9IDwwIDMgMCAweDEwMD47CisKKwkJbWRpby1tdXgtZW1pMSB7CisJCQljb21wYXRpYmxlID0gIm1kaW8tbXV4LW1taW9yZWciOworCQkJbWRpby1wYXJlbnQtYnVzID0gPCZtZGlvMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4NTQgMT47IC8qIEJSRENGRzQgKi8KKwkJCW11eC1tYXNrID0gPDB4ZTA+OyAvKiBFTUkxWzI6MF0gKi8KKworCQkJLyogT25ib2FyZCBQSFlzICovCisJCQlsczEwMjFhbWRpbzA6IG1kaW9AMCB7CisJCQkJcmVnID0gPDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXJnbWlpX3BoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJfTsKKwkJCX07CisKKwkJCWxzMTAyMWFtZGlvMTogbWRpb0AyMCB7CisJCQkJcmVnID0gPDB4MjA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXJnbWlpX3BoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJfTsKKwkJCX07CisKKwkJCWxzMTAyMWFtZGlvMjogbWRpb0A0MCB7CisJCQkJcmVnID0gPDB4NDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXJnbWlpX3BoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJfTsKKwkJCX07CisKKwkJCWxzMTAyMWFtZGlvMzogbWRpb0A2MCB7CisJCQkJcmVnID0gPDB4NjA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXNnbWlpX3BoeTFjOiBldGhlcm5ldC1waHlAMWMgeworCQkJCQlyZWcgPSA8MHgxYz47CisJCQkJfTsKKwkJCX07CisKKwkJCWxzMTAyMWFtZGlvNDogbWRpb0A4MCB7CisJCQkJcmVnID0gPDB4ODA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXNnbWlpX3BoeTFkOiBldGhlcm5ldC1waHlAMWQgeworCQkJCQlyZWcgPSA8MHgxZD47CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZscHVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbWRpbzAgeworCXRiaTA6IHRiaS1waHlAOCB7CisJCXJlZyA9IDwweDg+OworCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLXR3ci5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLXR3ci5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjNTkxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEtdHdyLmR0cwpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJsczEwMjFhLmR0c2kiCisKKy8geworCW1vZGVsID0gIkxTMTAyMUEgVFdSIEJvYXJkIjsKKworCWFsaWFzZXMgeworCQllbmV0Ml9yZ21paV9waHkgPSAmcmdtaWlfcGh5MTsKKwkJZW5ldDBfc2dtaWlfcGh5ID0gJnNnbWlpX3BoeTI7CisJCWVuZXQxX3NnbWlpX3BoeSA9ICZzZ21paV9waHkwOworCX07Cit9OworCismZHNwaTEgeworCWJ1cy1udW0gPSA8MD47CisJc3RhdHVzID0gIm9rYXkiOworCisJZHNwaWZsYXNoOiBzMjVmbDA2NGtAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGFuc2lvbixzMjVmbDA2NGsiOworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwxNjAwMDAwMD47CisJCXNwaS1jcG9sOworCQlzcGktY3BoYTsKKwkJcmVnID0gPDA+OworCX07Cit9OworCismaTJjMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmkyYzEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpZmMgeworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDE+OworCS8qIE5PUiBGbGFzaCBvbiBib2FyZCAqLworCXJhbmdlcyA9IDwweDAgMHgwIDB4MCAweDYwMDAwMDAwIDB4MDgwMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCW5vckAwLDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJcmVnID0gPDB4MCAweDAgMHg4MDAwMDAwPjsKKwkJYmFuay13aWR0aCA9IDwyPjsKKwkJZGV2aWNlLXdpZHRoID0gPDE+OworCX07Cit9OworCismbHB1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1kaW8wIHsKKwlzZ21paV9waHkwOiBldGhlcm5ldC1waHlAMCB7CisJCXJlZyA9IDwweDA+OworCX07CisJcmdtaWlfcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQlyZWcgPSA8MHgxPjsKKwl9OworCXNnbWlpX3BoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJcmVnID0gPDB4Mj47CisJfTsKKwl0YmkxOiB0YmktcGh5QDFmIHsKKwkJcmVnID0gPDB4MWY+OworCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3ZGExNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEuZHRzaQpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAic2tlbGV0b242NC5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKworLyB7CisJY29tcGF0aWJsZSA9ICJmc2wsbHMxMDIxYSI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKworCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJmxwdWFydDA7CisJCXNlcmlhbDEgPSAmbHB1YXJ0MTsKKwkJc2VyaWFsMiA9ICZscHVhcnQyOworCQlzZXJpYWwzID0gJmxwdWFydDM7CisJCXNlcmlhbDQgPSAmbHB1YXJ0NDsKKwkJc2VyaWFsNSA9ICZscHVhcnQ1OworCQlzeXNjbGsgPSAmc3lzY2xrOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUBmMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHhmMDA+OworCQkJY2xvY2tzID0gPCZjbHVzdGVyMV9jbGs+OworCQl9OworCisJCWNwdUBmMDEgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHhmMDE+OworCQkJY2xvY2tzID0gPCZjbHVzdGVyMV9jbGs+OworCQl9OworCX07CisKKwl0aW1lciB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY3LXRpbWVyIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDEzIChHSUNfQ1BVX01BU0tfU0lNUExFKDIpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCisJCQkgICAgIDxHSUNfUFBJIDE0IChHSUNfQ1BVX01BU0tfU0lNUExFKDIpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCisJCQkgICAgIDxHSUNfUFBJIDExIChHSUNfQ1BVX01BU0tfU0lNUExFKDIpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCisJCQkgICAgIDxHSUNfUFBJIDEwIChHSUNfQ1BVX01BU0tfU0lNUExFKDIpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT47CisJfTsKKworCXBtdSB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNy1wbXUiOworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMzkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKworCXNvYyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJcmFuZ2VzOworCisJCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTQwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTctZ2ljIjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCXJlZyA9IDwweDAgMHgxNDAxMDAwIDB4MCAweDEwMDA+LAorCQkJICAgICAgPDB4MCAweDE0MDIwMDAgMHgwIDB4MTAwMD4sCisJCQkgICAgICA8MHgwIDB4MTQwNDAwMCAweDAgMHgyMDAwPiwKKwkJCSAgICAgIDwweDAgMHgxNDA2MDAwIDB4MCAweDIwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDkgKEdJQ19DUFVfTUFTS19TSU1QTEUoMikgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKT47CisKKwkJfTsKKworCQlpZmM6IGlmY0AxNTMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGlmYyIsICJzaW1wbGUtYnVzIjsKKwkJCXJlZyA9IDwweDAgMHgxNTMwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJfTsKKworCQlkY2ZnOiBkY2ZnQDFlZTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbHMxMDIxYS1kY2ZnIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgwIDB4MWVlMDAwMCAweDAgMHgxMDAwMD47CisJCQliaWctZW5kaWFuOworCQl9OworCisJCWVzZGhjOiBlc2RoY0AxNTYwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVzZGhjIjsKKwkJCXJlZyA9IDwweDAgMHgxNTYwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA5NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCXZvbHRhZ2UtcmFuZ2VzID0gPDE4MDAgMTgwMCAzMzAwIDMzMDA+OworCQkJc2RoY2ksYXV0by1jbWQxMjsKKwkJCWJpZy1lbmRpYW47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNjZmc6IHNjZmdAMTU3MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLXNjZmciLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweDAgMHgxNTcwMDAwIDB4MCAweDEwMDAwPjsKKwkJfTsKKworCQljbG9ja2dlbjogY2xvY2tpbmdAMWVlMTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzID0gPDB4MCAweDAgMHgxZWUxMDAwIDB4MTAwMDA+OworCisJCQlzeXNjbGs6IHN5c2NsayB7CisJCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJzeXNjbGsiOworCQkJfTsKKworCQkJY2dhX3BsbDE6IHBsbEA4MDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHFvcmlxLWNvcmUtcGxsLTIuMCI7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweDgwMCAweDEwPjsKKwkJCQljbG9ja3MgPSA8JnN5c2Nsaz47CisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNnYS1wbGwxIiwgImNnYS1wbGwxLWRpdjIiLAorCQkJCQkJICAgICAiY2dhLXBsbDEtZGl2NCI7CisJCQl9OworCisJCQlwbGF0Zm9ybV9jbGs6IHBsbEBjMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHFvcmlxLWNvcmUtcGxsLTIuMCI7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweGMwMCAweDEwPjsKKwkJCQljbG9ja3MgPSA8JnN5c2Nsaz47CisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInBsYXRmb3JtLWNsayIsICJwbGF0Zm9ybS1jbGstZGl2MiI7CisJCQl9OworCisJCQljbHVzdGVyMV9jbGs6IGNsazBjMEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxxb3JpcS1jb3JlLW11eC0yLjAiOworCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQlyZWcgPSA8MHgwIDB4MTA+OworCQkJCWNsb2NrLW5hbWVzID0gInBsbDFjZ2EiLCAicGxsMWNnYS1kaXYyIiwgInBsbDFjZ2EtZGl2NCI7CisJCQkJY2xvY2tzID0gPCZjZ2FfcGxsMSAwPiwgPCZjZ2FfcGxsMSAxPiwgPCZjZ2FfcGxsMSAyPjsKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2x1c3RlcjEtY2xrIjsKKwkJCX07CisJCX07CisKKwkJZHNwaTA6IGRzcGlAMjEwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1kc3BpIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgwIDB4MjEwMDAwMCAweDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1uYW1lcyA9ICJkc3BpIjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJc3BpLW51bS1jaGlwc2VsZWN0cyA9IDw1PjsKKwkJCWJpZy1lbmRpYW47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWRzcGkxOiBkc3BpQDIxMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZHNwaSI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4MCAweDIxMTAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDk3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2stbmFtZXMgPSAiZHNwaSI7CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCXNwaS1udW0tY2hpcHNlbGVjdHMgPSA8NT47CisJCQliaWctZW5kaWFuOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMwOiBpMmNAMjE4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1pMmMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDAgMHgyMTgwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjMTogaTJjQDIxOTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtaTJjIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgwIDB4MjE5MDAwMCAweDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzI6IGkyY0AyMWEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWkyYyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4MCAweDIxYTAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDkwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0MDogc2VyaWFsQDIxYzA1MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsMTY1NTAtRklGTzY0IiwgIm5zMTY1NTBhIjsKKwkJCXJlZyA9IDwweDAgMHgyMWMwNTAwIDB4MCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlmaWZvLXNpemUgPSA8MTU+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0MTogc2VyaWFsQDIxYzA2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsMTY1NTAtRklGTzY0IiwgIm5zMTY1NTBhIjsKKwkJCXJlZyA9IDwweDAgMHgyMWMwNjAwIDB4MCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlmaWZvLXNpemUgPSA8MTU+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0Mjogc2VyaWFsQDIxZDA1MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsMTY1NTAtRklGTzY0IiwgIm5zMTY1NTBhIjsKKwkJCXJlZyA9IDwweDAgMHgyMWQwNTAwIDB4MCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlmaWZvLXNpemUgPSA8MTU+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0Mzogc2VyaWFsQDIxZDA2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsMTY1NTAtRklGTzY0IiwgIm5zMTY1NTBhIjsKKwkJCXJlZyA9IDwweDAgMHgyMWQwNjAwIDB4MCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlmaWZvLXNpemUgPSA8MTU+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlscHVhcnQwOiBzZXJpYWxAMjk1MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWxwdWFydCI7CisJCQlyZWcgPSA8MHgwIDB4Mjk1MDAwMCAweDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmc3lzY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWxwdWFydDE6IHNlcmlhbEAyOTYwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtbHB1YXJ0IjsKKwkJCXJlZyA9IDwweDAgMHgyOTYwMDAwIDB4MCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDgxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlscHVhcnQyOiBzZXJpYWxAMjk3MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWxwdWFydCI7CisJCQlyZWcgPSA8MHgwIDB4Mjk3MDAwMCAweDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbHB1YXJ0Mzogc2VyaWFsQDI5ODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbHMxMDIxYS1scHVhcnQiOworCQkJcmVnID0gPDB4MCAweDI5ODAwMDAgMHgwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWxwdWFydDQ6IHNlcmlhbEAyOTkwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtbHB1YXJ0IjsKKwkJCXJlZyA9IDwweDAgMHgyOTkwMDAwIDB4MCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlscHVhcnQ1OiBzZXJpYWxAMjlhMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWxwdWFydCI7CisJCQlyZWcgPSA8MHgwIDB4MjlhMDAwMCAweDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJd2RvZzA6IHdhdGNoZG9nQDJhZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjEtd2R0IjsKKwkJCXJlZyA9IDwweDAgMHgyYWQwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCWNsb2NrLW5hbWVzID0gIndkb2ctZW4iOworCQkJYmlnLWVuZGlhbjsKKwkJfTsKKworCQlzYWkxOiBzYWlAMmI1MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1zYWkiOworCQkJcmVnID0gPDB4MCAweDJiNTAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEzMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJY2xvY2stbmFtZXMgPSAic2FpIjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCQlkbWFzID0gPCZlZG1hMCAxIDQ3PiwKKwkJCSAgICAgICA8JmVkbWEwIDEgNDY+OworCQkJYmlnLWVuZGlhbjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2FpMjogc2FpQDJiNjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtc2FpIjsKKwkJCXJlZyA9IDwweDAgMHgyYjYwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCWNsb2NrLW5hbWVzID0gInNhaSI7CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOworCQkJZG1hcyA9IDwmZWRtYTAgMSA0NT4sCisJCQkgICAgICAgPCZlZG1hMCAxIDQ0PjsKKwkJCWJpZy1lbmRpYW47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWVkbWEwOiBlZG1hQDJjMDAwMDAgeworCQkJI2RtYS1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWVkbWEiOworCQkJcmVnID0gPDB4MCAweDJjMDAwMDAgMHgwIDB4MTAwMDA+LAorCQkJICAgICAgPDB4MCAweDJjMTAwMDAgMHgwIDB4MTAwMDA+LAorCQkJICAgICAgPDB4MCAweDJjMjAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEzNSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDEzNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWludGVycnVwdC1uYW1lcyA9ICJlZG1hLXR4IiwgImVkbWEtZXJyIjsKKwkJCWRtYS1jaGFubmVscyA9IDwzMj47CisJCQliaWctZW5kaWFuOworCQkJY2xvY2stbmFtZXMgPSAiZG1hbXV4MCIsICJkbWFtdXgxIjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+LAorCQkJCSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJfTsKKworCQltZGlvMDogbWRpb0AyZDI0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgwIDB4MmQyNDAwMCAweDAgMHg0MDAwPjsKKwkJfTsKKworCQl1c2JAODYwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyLXYyLjUiLCAiZnNsLXVzYjItZHIiOworCQkJcmVnID0gPDB4MCAweDg2MDAwMDAgMHgwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTcxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJZHJfbW9kZSA9ICJob3N0IjsKKwkJCXBoeV90eXBlID0gInVscGkiOworCQl9OworCisJCXVzYjNAMzEwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHdjMyI7CisJCQlyZWcgPSA8MHgwIDB4MzEwMDAwMCAweDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlkcl9tb2RlID0gImhvc3QiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uLmR0c2kKaW5kZXggZTY1MzllYS4uMDNiY2ZmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbi5kdHNpCkBAIC01MCw2ICs1MCwxMyBAQAogLyB7CiAJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAorCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQGM0MjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOworCQlyZWcgPSA8MHhjNDIwMDAwMCAweDEwMDA+OworCQljYWNoZS11bmlmaWVkOworCQljYWNoZS1sZXZlbCA9IDwyPjsKKwl9OworCiAJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBjNDMwMTAwMCB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiOwogCQlyZWcgPSA8MHhjNDMwMTAwMCAweDEwMDA+LApAQCAtMTA2LDUgKzExMywzNSBAQAogCQkJY2xvY2tzID0gPCZjbGs4MT47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OworCisJCWkyY19BTzogaTJjQGM4MTAwNTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjYtaTJjIjsKKwkJCXJlZyA9IDwweGM4MTAwNTAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwwIDkyIDE+OworCQkJY2xvY2tzID0gPCZjbGs4MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfQTogaTJjQGMxMTA4NTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjYtaTJjIjsKKwkJCXJlZyA9IDwweGMxMTA4NTAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwwIDIxIDE+OworCQkJY2xvY2tzID0gPCZjbGs4MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfQjogaTJjQGMxMTA4N2MwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjYtaTJjIjsKKwkJCXJlZyA9IDwweGMxMTA4N2MwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyOCAxPjsKKwkJCWNsb2NrcyA9IDwmY2xrODE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CiAJfTsKIH07IC8qIGVuZCBvZiAvICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYtYXR2MTIwMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYtYXR2MTIwMC5kdHMKaW5kZXggZGMyNTQxZmEuLmQ3ZDM1MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uNi1hdHYxMjAwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYtYXR2MTIwMC5kdHMKQEAgLTUwLDcgKzUwLDcgQEAKIAogLyB7CiAJbW9kZWwgPSAiR2VuaWF0ZWNoIEFUVjEyMDAiOwotCWNvbXBhdGlibGUgPSAiZ2VuaWF0ZWNoLGF0djEyMDAiOworCWNvbXBhdGlibGUgPSAiZ2VuaWF0ZWNoLGF0djEyMDAiLCAiYW1sb2dpYyxtZXNvbjYiOwogCiAJYWxpYXNlcyB7CiAJCXNlcmlhbDAgPSAmdWFydF9BTzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uNi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb242LmR0c2kKaW5kZXggNGJhNDkxMi4uOGIzM2JlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb242LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb242LmR0c2kKQEAgLTYwLDEyICs2MCwxNCBAQAogCQljcHVAMjAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwogCQkJcmVnID0gPDB4MjAwPjsKIAkJfTsKIAogCQljcHVAMjAxIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwogCQkJcmVnID0gPDB4MjAxPjsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb244LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbjguZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQ0MmE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb244LmR0c2kKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IENhcmxvIENhaW9uZSA8Y2FybG9AY2Fpb25lLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2luY2x1ZGUvICJtZXNvbi5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJBbWxvZ2ljIE1lc29uOCBTb0MiOworCWNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjgiOworCisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDIwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJCXJlZyA9IDwweDIwMD47CisJCX07CisKKwkJY3B1QDIwMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJCXJlZyA9IDwweDIwMT47CisJCX07CisKKwkJY3B1QDIwMiB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJCXJlZyA9IDwweDIwMj47CisJCX07CisKKwkJY3B1QDIwMyB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJCXJlZyA9IDwweDIwMz47CisJCX07CisJfTsKKworCWNsazgxOiBjbGtAMCB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNDE2NjY2NjY+OworCX07Cit9OyAvKiBlbmQgb2YgLyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ2NTkyLWV2Yi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9tdDY1OTItZXZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTcyMzdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ2NTkyLWV2Yi5kdHMKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEhvd2FyZCBDaGVuIDxpYmFuZXpjaGVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSAibXQ2NTkyLmR0c2kiCisKKy8geworCW1vZGVsID0gIm10NjU5MiBldmIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2NTkyLWV2YiIsICJtZWRpYXRlayxtdDY1OTIiOworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4ODAwMDAwMDAgMHg0MDAwMDAwMD47CisJfTsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL210NjU5Mi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ2NTkyLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlNWEwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210NjU5Mi5kdHNpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBIb3dhcmQgQ2hlbiA8aWJhbmV6Y2hlbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1OTIiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4MD47CisJCX07CisJCWNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4MT47CisJCX07CisJCWNwdUAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4Mj47CisJCX07CisJCWNwdUAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4Mz47CisJCX07CisJCWNwdUA0IHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4ND47CisJCX07CisJCWNwdUA1IHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4NT47CisJCX07CisJCWNwdUA2IHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4Nj47CisJCX07CisJCWNwdUA3IHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4Nz47CisJCX07CisJfTsKKworCXN5c3RlbV9jbGs6IGR1bW15MTNtIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzAwMDAwMD47CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwl9OworCisJcnRjX2NsazogZHVtbXkzMmsgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMyMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07CisKKwl0aW1lcjogdGltZXJAMTAwMDgwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NjU3Ny10aW1lciI7CisJCXJlZyA9IDwweDEwMDA4MDAwIDB4ODA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQ0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+LCA8JnJ0Y19jbGs+OworCQljbG9jay1uYW1lcyA9ICJzeXN0ZW0tY2xrIiwgInJ0Yy1jbGsiOworCX07CisKKwlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQDEwMjExMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3LWdpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHgxMDIxMTAwMCAweDEwMDA+LAorCQkgICAgICA8MHgxMDIxMjAwMCAweDEwMDA+OworCX07CisKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEyNy1tb29zZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9tdDgxMjctbW9vc2UuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzY2JhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9tdDgxMjctbW9vc2UuZHRzCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKb2UuQyA8eWluZ2pvZS5jaGVuQG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSAibXQ4MTI3LmR0c2kiCisKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UODEyNyBNb29zZSBCb2FyZCI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxMjctbW9vc2UiLCAibWVkaWF0ZWssbXQ4MTI3IjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4ODAwMDAwMDAgMCAweDQwMDAwMDAwPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEyNy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTI3LmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0YzBhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEyNy5kdHNpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKb2UuQyA8eWluZ2pvZS5jaGVuQG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKyNpbmNsdWRlICJza2VsZXRvbjY0LmR0c2kiCisKKy8geworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTI3IjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCXJlZyA9IDwweDA+OworCQl9OworCQljcHVAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCXJlZyA9IDwweDE+OworCQl9OworCQljcHVAMiB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCXJlZyA9IDwweDI+OworCQl9OworCQljcHVAMyB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCXJlZyA9IDwweDM+OworCQl9OworCisJfTsKKworCWNsb2NrcyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzOworCisJCXN5c3RlbV9jbGs6IGR1bW15MTNtIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMDAwMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlydGNfY2xrOiBkdW1teTMyayB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCX07CisJfTsKKworCXNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzOworCisJCXRpbWVyOiB0aW1lckAxMDAwODAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODEyNy10aW1lciIsCisJCQkJCSJtZWRpYXRlayxtdDY1NzctdGltZXIiOworCQkJcmVnID0gPDAgMHgxMDAwODAwMCAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sIDwmcnRjX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJzeXN0ZW0tY2xrIiwgInJ0Yy1jbGsiOworCQl9OworCisJCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTAyMTEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3LWdpYyI7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQlyZWcgPSA8MCAweDEwMjExMDAwIDAgMHgxMDAwPiwKKwkJCSAgICAgIDwwIDB4MTAyMTIwMDAgMCAweDEwMDA+LAorCQkJICAgICAgPDAgMHgxMDIxNDAwMCAwIDB4MjAwMD4sCisJCQkgICAgICA8MCAweDEwMjE2MDAwIDAgMHgyMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEzNS1ldmJwMS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9tdDgxMzUtZXZicDEuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YWRmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9tdDgxMzUtZXZicDEuZHRzCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKb2UuQyA8eWluZ2pvZS5jaGVuQG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSAibXQ4MTM1LmR0c2kiCisKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UODEzNSBldmFsdWF0aW9uIGJvYXJkIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODEzNS1ldmJwMSIsICJtZWRpYXRlayxtdDgxMzUiOworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg4MDAwMDAwMCAwIDB4NDAwMDAwMDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTM1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9tdDgxMzUuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDU2YTk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTM1LmR0c2kKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKb2UuQyA8eWluZ2pvZS5jaGVuQG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKyNpbmNsdWRlICJza2VsZXRvbjY0LmR0c2kiCisKKy8geworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTM1IjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCisJY3B1LW1hcCB7CisJCWNsdXN0ZXIwIHsKKwkJCWNvcmUwIHsKKwkJCQljcHUgPSA8JmNwdTA+OworCQkJfTsKKwkJCWNvcmUxIHsKKwkJCQljcHUgPSA8JmNwdTE+OworCQkJfTsKKwkJfTsKKworCQljbHVzdGVyMSB7CisJCQljb3JlMCB7CisJCQkJY3B1ID0gPCZjcHUyPjsKKwkJCX07CisJCQljb3JlMSB7CisJCQkJY3B1ID0gPCZjcHUzPjsKKwkJCX07CisJCX07CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1MDogY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgwMDA+OworCQl9OworCisJCWNwdTE6IGNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4MDAxPjsKKwkJfTsKKworCQljcHUyOiBjcHVAMTAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDEwMD47CisJCX07CisKKwkJY3B1MzogY3B1QDEwMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNSI7CisJCQlyZWcgPSA8MHgxMDE+OworCQl9OworCX07CisKKwljbG9ja3MgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJhbmdlczsKKworCQlzeXN0ZW1fY2xrOiBkdW1teTEzbSB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzAwMDAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCX07CisKKwkJcnRjX2NsazogZHVtbXkzMmsgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MzIwMDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQl9OworCX07CisKKwlzb2MgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJhbmdlczsKKworCQl0aW1lcjogdGltZXJAMTAwMDgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxMzUtdGltZXIiLAorCQkJCQkibWVkaWF0ZWssbXQ2NTc3LXRpbWVyIjsKKwkJCXJlZyA9IDwwIDB4MTAwMDgwMDAgMCAweDgwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+LCA8JnJ0Y19jbGs+OworCQkJY2xvY2stbmFtZXMgPSAic3lzdGVtLWNsayIsICJydGMtY2xrIjsKKwkJfTsKKworCQlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQDEwMjExMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUtZ2ljIjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCXJlZyA9IDwwIDB4MTAyMTEwMDAgMCAweDEwMDA+LAorCQkJICAgICAgPDAgMHgxMDIxMjAwMCAwIDB4MTAwMD4sCisJCQkgICAgICA8MCAweDEwMjE0MDAwIDAgMHgyMDAwPiwKKwkJCSAgICAgIDwwIDB4MTAyMTYwMDAgMCAweDIwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcC1ncG1jLXNtc2M5MTF4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwLWdwbWMtc21zYzkxMXguZHRzaQppbmRleCA1MjFjNTg3Li40NDVmYWZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwLWdwbWMtc21zYzkxMXguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwLWdwbWMtc21zYzkxMXguZHRzaQpAQCAtMjMsMjQgKzIzLDI5IEBACiAJZXRoZXJuZXRAZ3BtYyB7CiAJCWNvbXBhdGlibGUgPSAic21zYyxsYW45MjIxIiwgInNtc2MsbGFuOTExNSI7CiAJCWJhbmstd2lkdGggPSA8Mj47Ci0JCWdwbWMsbXV4LWFkZC1kYXRhOwotCQlncG1jLGNzLW9uLW5zID0gPDE+OwotCQlncG1jLGNzLXJkLW9mZi1ucyA9IDwxODA+OwotCQlncG1jLGNzLXdyLW9mZi1ucyA9IDwxODA+OwotCQlncG1jLGFkdi1yZC1vZmYtbnMgPSA8MTg+OwotCQlncG1jLGFkdi13ci1vZmYtbnMgPSA8NDg+OwotCQlncG1jLG9lLW9uLW5zID0gPDU0PjsKLQkJZ3BtYyxvZS1vZmYtbnMgPSA8MTY4PjsKLQkJZ3BtYyx3ZS1vbi1ucyA9IDw1ND47Ci0JCWdwbWMsd2Utb2ZmLW5zID0gPDE2OD47Ci0JCWdwbWMscmQtY3ljbGUtbnMgPSA8MTg2PjsKLQkJZ3BtYyx3ci1jeWNsZS1ucyA9IDwxODY+OwotCQlncG1jLGFjY2Vzcy1ucyA9IDwxNDQ+OwotCQlncG1jLHBhZ2UtYnVyc3QtYWNjZXNzLW5zID0gPDI0PjsKLQkJZ3BtYyxidXMtdHVybmFyb3VuZC1ucyA9IDw5MD47Ci0JCWdwbWMsY3ljbGUyY3ljbGUtZGVsYXktbnMgPSA8OTA+OwotCQlncG1jLGN5Y2xlMmN5Y2xlLXNhbWVjc2VuOwotCQlncG1jLGN5Y2xlMmN5Y2xlLWRpZmZjc2VuOworCQlncG1jLGRldmljZS13aWR0aCA9IDwxPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1zYW1lY3NlbiA9IDwxPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kaWZmY3NlbiA9IDwxPjsKKwkJZ3BtYyxjcy1vbi1ucyA9IDw1PjsKKwkJZ3BtYyxjcy1yZC1vZmYtbnMgPSA8MTUwPjsKKwkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8MTUwPjsKKwkJZ3BtYyxhZHYtb24tbnMgPSA8MD47CisJCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDwxNT47CisJCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw0MD47CisJCWdwbWMsb2Utb24tbnMgPSA8NDU+OworCQlncG1jLG9lLW9mZi1ucyA9IDwxNDA+OworCQlncG1jLHdlLW9uLW5zID0gPDQ1PjsKKwkJZ3BtYyx3ZS1vZmYtbnMgPSA8MTQwPjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDwxNTU+OworCQlncG1jLHdyLWN5Y2xlLW5zID0gPDE1NT47CisJCWdwbWMsYWNjZXNzLW5zID0gPDEyMD47CisJCWdwbWMscGFnZS1idXJzdC1hY2Nlc3MtbnMgPSA8MjA+OworCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDc1PjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDw3NT47CisJCWdwbWMsd2FpdC1tb25pdG9yaW5nLW5zID0gPDA+OworCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDA+OworCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1hY2Nlc3MtbnMgPSA8MD47CiAJCXZkZHZhcmlvLXN1cHBseSA9IDwmdmRkdmFyaW8+OwogCQl2ZGQzM2Etc3VwcGx5ID0gPCZ2ZGQzM2E+OwogCQlyZWctaW8td2lkdGggPSA8ND47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwLXpvb20tY29tbW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwLXpvb20tY29tbW9uLmR0c2kKaW5kZXggNjgyMjFmYS4uNDZlZjNlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcC16b29tLWNvbW1vbi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtem9vbS1jb21tb24uZHRzaQpAQCAtNSw3ICs1LDcgQEAKICNpbmNsdWRlICJvbWFwLWdwbWMtc21zYzkxMXguZHRzaSIKIAogJmdwbWMgewotCXJhbmdlcyA9IDwzIDAgMHgxMDAwMDAwMCAweDAwMDAwNDAwPiwKKwlyYW5nZXMgPSA8MyAwIDB4MTAwMDAwMDAgMHgxMDAwMDAwPiwJLyogQ1MzOiAxNk1CIGZvciBVQVJUICovCiAJCSA8NyAwIDB4MmMwMDAwMDAgMHgwMTAwMDAwMD47CiAKIAkvKgpAQCAtMTUsNyArMTUsNjUgQEAKIAkgKi8KIAl1YXJ0QDMsMCB7CiAJCWNvbXBhdGlibGUgPSAibnMxNjU1MGEiOwotCQlyZWcgPSA8MyAwIDB4MTAwPjsKKwkJcmVnID0gPDMgMCA4PjsJLyogQ1MzLCBvZmZzZXQgMCwgSU8gc2l6ZSA4ICovCisJCWJhbmstd2lkdGggPSA8Mj47CisJCXJlZy1zaGlmdCA9IDwxPjsKKwkJcmVnLWlvLXdpZHRoID0gPDE+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvND47CisJCWludGVycnVwdHMgPSA8NiBJUlFfVFlQRV9FREdFX1JJU0lORz47CS8qIGdwaW8xMDIgKi8KKwkJY2xvY2stZnJlcXVlbmN5ID0gPDE4NDMyMDA+OworCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CisJCWdwbWMsbXV4LWFkZC1kYXRhID0gPDA+OworCQlncG1jLGRldmljZS13aWR0aCA9IDwxPjsKKwkJZ3BtYyx3YWl0LXBpbiA9IDwxPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1zYW1lY3NlbiA9IDwxPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kaWZmY3NlbiA9IDwxPjsKKwkJZ3BtYyxjcy1vbi1ucyA9IDw1PjsKKwkJZ3BtYyxjcy1yZC1vZmYtbnMgPSA8MTU1PjsKKwkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8MTU1PjsKKwkJZ3BtYyxhZHYtb24tbnMgPSA8MTU+OworCQlncG1jLGFkdi1yZC1vZmYtbnMgPSA8NDA+OworCQlncG1jLGFkdi13ci1vZmYtbnMgPSA8NDA+OworCQlncG1jLG9lLW9uLW5zID0gPDQ1PjsKKwkJZ3BtYyxvZS1vZmYtbnMgPSA8MTQ1PjsKKwkJZ3BtYyx3ZS1vbi1ucyA9IDw0NT47CisJCWdwbWMsd2Utb2ZmLW5zID0gPDE0NT47CisJCWdwbWMscmQtY3ljbGUtbnMgPSA8MTU1PjsKKwkJZ3BtYyx3ci1jeWNsZS1ucyA9IDwxNTU+OworCQlncG1jLGFjY2Vzcy1ucyA9IDwxNDU+OworCQlncG1jLHBhZ2UtYnVyc3QtYWNjZXNzLW5zID0gPDIwPjsKKwkJZ3BtYyxidXMtdHVybmFyb3VuZC1ucyA9IDwyMD47CisJCWdwbWMsY3ljbGUyY3ljbGUtZGVsYXktbnMgPSA8MjA+OworCQlncG1jLHdhaXQtbW9uaXRvcmluZy1ucyA9IDwwPjsKKwkJZ3BtYyxjbGstYWN0aXZhdGlvbi1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1kYXRhLW11eC1idXMtbnMgPSA8NDU+OworCQlncG1jLHdyLWFjY2Vzcy1ucyA9IDwxNDU+OworCX07CisJdWFydEAzLDEgeworCQljb21wYXRpYmxlID0gIm5zMTY1NTBhIjsKKwkJcmVnID0gPDMgMHgxMDAgOD47CS8qIENTMywgb2Zmc2V0IDB4MTAwLCBJTyBzaXplIDggKi8KKwkJYmFuay13aWR0aCA9IDwyPjsKKwkJcmVnLXNoaWZ0ID0gPDE+OworCQlyZWctaW8td2lkdGggPSA8MT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW80PjsKKwkJaW50ZXJydXB0cyA9IDw2IElSUV9UWVBFX0VER0VfUklTSU5HPjsJLyogZ3BpbzEwMiAqLworCQljbG9jay1mcmVxdWVuY3kgPSA8MTg0MzIwMD47CisJCWN1cnJlbnQtc3BlZWQgPSA8MTE1MjAwPjsKKwl9OworCXVhcnRAMywyIHsKKwkJY29tcGF0aWJsZSA9ICJuczE2NTUwYSI7CisJCXJlZyA9IDwzIDB4MjAwIDg+OwkvKiBDUzMsIG9mZnNldCAweDIwMCwgSU8gc2l6ZSA4ICovCisJCWJhbmstd2lkdGggPSA8Mj47CisJCXJlZy1zaGlmdCA9IDwxPjsKKwkJcmVnLWlvLXdpZHRoID0gPDE+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvND47CisJCWludGVycnVwdHMgPSA8NiBJUlFfVFlQRV9FREdFX1JJU0lORz47CS8qIGdwaW8xMDIgKi8KKwkJY2xvY2stZnJlcXVlbmN5ID0gPDE4NDMyMDA+OworCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CisJfTsKKwl1YXJ0QDMsMyB7CisJCWNvbXBhdGlibGUgPSAibnMxNjU1MGEiOworCQlyZWcgPSA8MyAweDMwMCA4PjsJLyogQ1MzLCBvZmZzZXQgMHgzMDAsIElPIHNpemUgOCAqLwogCQliYW5rLXdpZHRoID0gPDI+OwogCQlyZWctc2hpZnQgPSA8MT47CiAJCXJlZy1pby13aWR0aCA9IDwxPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDIwLW44eDAtY29tbW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQyMC1uOHgwLWNvbW1vbi5kdHNpCmluZGV4IDI0YzUwZGIuLmM5ZjFlOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDIwLW44eDAtY29tbW9uLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAtbjh4MC1jb21tb24uZHRzaQpAQCAtNDAsMTQgKzQwLDE0IEBACiB9OwogCiAmZ3BtYyB7Ci0JcmFuZ2VzID0gPDAgMCAweDA0MDAwMDAwIDB4MTAwMDAwMDA+OworCXJhbmdlcyA9IDwwIDAgMHgwNDAwMDAwMCAweDEwMDAwMDA+OwkvKiBDUzA6IDE2TUIgZm9yIE9uZU5BTkQgKi8KIAogCS8qIGdwaW8taXJxIGZvciBkbWE6IDI2ICovCiAKIAlvbmVuYW5kQDAsMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPDAgMCAweDEwMDAwMDAwPjsKKwkJcmVnID0gPDAgMCAweDIwMDAwPjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSAxMjhLICovCiAKIAkJZ3BtYyxzeW5jLXJlYWQ7CiAJCWdwbWMsYnVyc3QtbGVuZ3RoID0gPDE2PjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDIwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQyMC5kdHNpCmluZGV4IGFlODlhYWQuLmUyYjJlOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDIwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAuZHRzaQpAQCAtMTU3LDYgKzE1Nyw3IEBACiAJCQlpbnRlcnJ1cHRzID0gPDI2PiwgPDM0PjsKIAkJCWludGVycnVwdC1uYW1lcyA9ICJkc3AiLCAiaXZhIjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDw2PjsKIAkJCW1ib3hfZHNwOiBkc3AgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MzAtc2RwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDMwLXNkcC5kdHMKaW5kZXggMmM5MGQyOS4uMDVlY2EyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MzAtc2RwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC1zZHAuZHRzCkBAIC00Myw3ICs0MywzMSBAQAogCQlpbnRlcnJ1cHRzID0gPDIxIElSUV9UWVBFX0xFVkVMX0xPVz47CS8qIGdwaW8xNDkgKi8KIAkJcmVnID0gPDUgMHgzMDAgMHhmPjsKIAkJYmFuay13aWR0aCA9IDwyPjsKLQkJZ3BtYyxtdXgtYWRkLWRhdGE7Ci0gICAgICAgIH07CisJCWdwbWMsc3luYy1jbGstcHMgPSA8MD47CisJCWdwbWMsbXV4LWFkZC1kYXRhID0gPDI+OworCQlncG1jLGRldmljZS13aWR0aCA9IDwxPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1zYW1lY3NlbiA9IDwxPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kaWZmY3NlbiA9IDwxPjsKKwkJZ3BtYyxjcy1vbi1ucyA9IDw3PjsKKwkJZ3BtYyxjcy1yZC1vZmYtbnMgPSA8MjMzPjsKKwkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8MjMzPjsKKwkJZ3BtYyxhZHYtb24tbnMgPSA8MjI+OworCQlncG1jLGFkdi1yZC1vZmYtbnMgPSA8NjA+OworCQlncG1jLGFkdi13ci1vZmYtbnMgPSA8NjA+OworCQlncG1jLG9lLW9uLW5zID0gPDY3PjsKKwkJZ3BtYyxvZS1vZmYtbnMgPSA8MjEwPjsKKwkJZ3BtYyx3ZS1vbi1ucyA9IDw2Nz47CisJCWdwbWMsd2Utb2ZmLW5zID0gPDIxMD47CisJCWdwbWMscmQtY3ljbGUtbnMgPSA8MjMzPjsKKwkJZ3BtYyx3ci1jeWNsZS1ucyA9IDwyMzM+OworCQlncG1jLGFjY2Vzcy1ucyA9IDwyMzM+OworCQlncG1jLHBhZ2UtYnVyc3QtYWNjZXNzLW5zID0gPDMwPjsKKwkJZ3BtYyxidXMtdHVybmFyb3VuZC1ucyA9IDwzMD47CisJCWdwbWMsY3ljbGUyY3ljbGUtZGVsYXktbnMgPSA8MzA+OworCQlncG1jLHdhaXQtbW9uaXRvcmluZy1ucyA9IDwwPjsKKwkJZ3BtYyxjbGstYWN0aXZhdGlvbi1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1kYXRhLW11eC1idXMtbnMgPSA8MD47CisJCWdwbWMsd3ItYWNjZXNzLW5zID0gPDA+OworCX07CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MzAuZHRzaQppbmRleCBiNTZkNzE2MS4uMGRjOGRlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MzAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC5kdHNpCkBAIC0yNDcsNiArMjQ3LDcgQEAKIAkJCXJlZyA9IDwweDQ4MDk0MDAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8MjY+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3giOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDY+OwogCQkJbWJveF9kc3A6IGRzcCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzUxNy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzUxNy5kdHMKaW5kZXggZDAwNTAyZi4uMGFiNzQ4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDM1MTcuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNTE3LmR0cwpAQCAtMTM0LDMgKzEzNCwxNCBAQAogCWJ1cy13aWR0aCA9IDw0PjsKIAljYXAtcG93ZXItb2ZmLWNhcmQ7CiB9OworCismZHNzIHsKKwlzdGF0dXMgPSAib2siOworCisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8CisJCSZkc3NfZHBpX3BpbnNfY29tbW9uCisJCSZkc3NfZHBpX3BpbnNfY21fdDM1eAorCT47Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzUzMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzUzMC5kdHMKaW5kZXggZDE0NTg0OS4uOGRkMTRmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDM1MzAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNTMwLmR0cwpAQCAtNDYsMyArNDYsMTQgQEAKIAlidXMtd2lkdGggPSA8ND47CiAJY2FwLXBvd2VyLW9mZi1jYXJkOwogfTsKKworJmRzcyB7CisJc3RhdHVzID0gIm9rIjsKKworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPAorCQkmZHNzX2RwaV9waW5zX2NvbW1vbgorCQkmZHNzX2RwaV9waW5zX2NtX3QzNXgKKwk+OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDM3MzAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDM3MzAuZHRzCmluZGV4IGIzZjlhNTAuLjQ2ZWFkYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNzMwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzczMC5kdHMKQEAgLTMxLDYgKzMxLDE5IEBACiAJfTsKIH07CiAKKyZvbWFwM19wbXhfd2t1cCB7CisJZHNzX2RwaV9waW5zX2NtX3QzNzMwOiBwaW5tdXhfZHNzX2RwaV9waW5zX2NtX3QzNzMwIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX1dLVVBfSU9QQUQoMHgyYTA4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKSAgIC8qIHN5c19ib290MC5kc3NfZGF0YTE4ICovCisJCQlPTUFQM19XS1VQX0lPUEFEKDB4MmEwYywgUElOX09VVFBVVCB8IE1VWF9NT0RFMykgICAvKiBzeXNfYm9vdDEuZHNzX2RhdGExOSAqLworCQkJT01BUDNfV0tVUF9JT1BBRCgweDJhMTAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpICAgLyogc3lzX2Jvb3QzLmRzc19kYXRhMjAgKi8KKwkJCU9NQVAzX1dLVVBfSU9QQUQoMHgyYTEyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKSAgIC8qIHN5c19ib290NC5kc3NfZGF0YTIxICovCisJCQlPTUFQM19XS1VQX0lPUEFEKDB4MmExNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykgICAvKiBzeXNfYm9vdDUuZHNzX2RhdGEyMiAqLworCQkJT01BUDNfV0tVUF9JT1BBRCgweDJhMTYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpICAgLyogc3lzX2Jvb3Q2LmRzc19kYXRhMjMgKi8KKwkJPjsKKwl9OworfTsKKwogJm9tYXAzX3BteF9jb3JlIHsKIAogCW1tYzJfcGluczogcGlubXV4X21tYzJfcGlucyB7CkBAIC02MSwzICs3NCwxNCBAQAogCWJ1cy13aWR0aCA9IDw0PjsKIAljYXAtcG93ZXItb2ZmLWNhcmQ7CiB9OworCismZHNzIHsKKwlzdGF0dXMgPSAib2siOworCisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8CisJCSZkc3NfZHBpX3BpbnNfY29tbW9uCisJCSZkc3NfZHBpX3BpbnNfY21fdDM3MzAKKwk+OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDN4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10M3guZHRzaQppbmRleCBjNjcxYTIyLi42ZWE2ZDQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10M3guZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10M3guZHRzaQpAQCAtNDksNiArNDksMjQgQEAKIAkJY29tcGF0aWJsZSA9ICJ1c2Itbm9wLXhjZWl2IjsKIAkJdmNjLXN1cHBseSA9IDwmaHN1c2IyX3Bvd2VyPjsKIAl9OworCisJYWRzNzg0NnJlZzogYWRzNzg0Ni1yZWcgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImFkczc4NDYtcmVnIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCX07CisKKwl0djA6IGNvbm5lY3RvckAxIHsKKwkJY29tcGF0aWJsZSA9ICJzdmlkZW8tY29ubmVjdG9yIjsKKwkJbGFiZWwgPSAidHYiOworCisJCXBvcnQgeworCQkJdHZfY29ubmVjdG9yX2luOiBlbmRwb2ludCB7CisJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ2ZW5jX291dD47CisJCQl9OworCQl9OworCX07CiB9OwogCiAmb21hcDNfcG14X2NvcmUgewpAQCAtNzYsNiArOTQsNzYgQEAKIAkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjFlMiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc3lzX2Nsa291dDIuZ3Bpb18xODYgKi8KIAkJPjsKIAl9OworCisJZHNzX2RwaV9waW5zX2NvbW1vbjogcGlubXV4X2Rzc19kcGlfcGluc19jb21tb24geworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGQ0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfcGNsay5kc3NfcGNsayAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGQ2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfaHN5bmMuZHNzX2hzeW5jICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZDgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc192c3luYy5kc3NfdnN5bmMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2FjYmlhcy5kc3NfYWNiaWFzICovCisKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGE2LmRzc19kYXRhNiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGVhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTcuZHNzX2RhdGE3ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZWMsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhOC5kc3NfZGF0YTggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGE5LmRzc19kYXRhOSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGYwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTEwLmRzc19kYXRhMTAgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmMiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExMS5kc3NfZGF0YTExICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZjQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTIuZHNzX2RhdGExMiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGY2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTEzLmRzc19kYXRhMTMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExNC5kc3NfZGF0YTE0ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZmEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTUuZHNzX2RhdGExNSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGZjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTE2LmRzc19kYXRhMTYgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExNy5kc3NfZGF0YTE3ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxMDAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTguZHNzX2RhdGExOCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTAyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTE5LmRzc19kYXRhMTkgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGEyMC5kc3NfZGF0YTIwICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxMDYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMjEuZHNzX2RhdGEyMSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTA4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTIyLmRzc19kYXRhMjIgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGEyMy5kc3NfZGF0YTIzICovCisJCT47CisJfTsKKworCWRzc19kcGlfcGluc19jbV90MzV4OiBwaW5tdXhfZHNzX2RwaV9waW5zX2NtX3QzNXggeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGRjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTAuZHNzX2RhdGEwICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZGUsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMS5kc3NfZGF0YTEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGEyLmRzc19kYXRhMiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGUyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTMuZHNzX2RhdGEzICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZTQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhNC5kc3NfZGF0YTQgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGE1LmRzc19kYXRhNSAqLworCQk+OworCX07CisKKwlhZHM3ODQ2X3BpbnM6IHBpbm11eF9hZHM3ODQ2X3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGJhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREU0KQkvKiBncG1jX25jczYuZ3Bpb181NyAqLworCQk+OworCX07CisKKwltY3NwaTFfcGluczogcGlubXV4X21jc3BpMV9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjFjOCwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBtY3NwaTFfY2xrICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxY2EsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogbWNzcGkxX3NpbW8gKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjFjYywgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBtY3NwaTFfc29taSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWNlLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTApIC8qIG1jc3BpMV9jczAgKi8KKwkJPjsKKwl9OworCisJaTJjMV9waW5zOiBwaW5tdXhfaTJjMV9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjFiYSwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjMV9zY2wgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjFiYywgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjMV9zZGEgKi8KKwkJPjsKKwl9OworCisJbWNic3AyX3BpbnM6IHBpbm11eF9tY2JzcDJfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxM2MsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogbWNic3AyX2ZzeCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTNlLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIG1jYnNwMl9jbGt4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNDAsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogbWNic3AyX2RyICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNDIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIG1jYnNwMl9keCAqLworCQk+OworCX07CiB9OwogCiAmdWFydDMgewpAQCAtOTQsMTIgKzE4MiwyMiBAQAogfTsKIAogJmkyYzEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmMxX3BpbnM+OworCiAJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisKKwlhdDI0QDUwIHsKKwkJY29tcGF0aWJsZSA9ICJhdDI0LDI0YzAyIjsKKwkJcGFnZXNpemUgPSA8MTY+OworCQlyZWcgPSA8MHg1MD47CisJfTsKIH07CiAKICZpMmMzIHsKIAljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIH07CisKICZ1c2Joc2hvc3QgewogCXBvcnQxLW1vZGUgPSAiZWhjaS1waHkiOwogCXBvcnQyLW1vZGUgPSAiZWhjaS1waHkiOwpAQCAtMTA4LDMgKzIwNiw1NiBAQAogJnVzYmhzZWhjaSB7CiAJcGh5cyA9IDwmaHN1c2IxX3BoeSAmaHN1c2IyX3BoeT47CiB9OworCismbWNzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbWNzcGkxX3BpbnM+OworCisJLyogdG91Y2ggY29udHJvbGxlciAqLworCWFkczc4NDZAMCB7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmYWRzNzg0Nl9waW5zPjsKKworCQljb21wYXRpYmxlID0gInRpLGFkczc4NDYiOworCQl2Y2Mtc3VwcGx5ID0gPCZhZHM3ODQ2cmVnPjsKKworCQlyZWcgPSA8MD47CQkJLyogQ1MwICovCisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDE1MDAwMDA+OworCisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8yPjsKKwkJaW50ZXJydXB0cyA9IDwyNSAwPjsJCS8qIGdwaW9fNTcgKi8KKwkJcGVuZG93bi1ncGlvID0gPCZncGlvMiAyNSAwPjsKKworCQl0aSx4LW1pbiA9IC9iaXRzLyAxNiA8MHgwPjsKKwkJdGkseC1tYXggPSAvYml0cy8gMTYgPDB4MGZmZj47CisJCXRpLHktbWluID0gL2JpdHMvIDE2IDwweDA+OworCQl0aSx5LW1heCA9IC9iaXRzLyAxNiA8MHgwZmZmPjsKKworCQl0aSx4LXBsYXRlLW9obXMgPSAvYml0cy8gMTYgPDE4MD47CisJCXRpLHByZXNzdXJlLW1heCA9IC9iaXRzLyAxNiA8MjU1PjsKKworCQl0aSxkZWJvdW5jZS1tYXggPSAvYml0cy8gMTYgPDMwPjsKKwkJdGksZGVib3VuY2UtdG9sID0gL2JpdHMvIDE2IDwxMD47CisJCXRpLGRlYm91bmNlLXJlcCA9IC9iaXRzLyAxNiA8MT47CisKKwkJbGludXgsd2FrZXVwOworCX07Cit9OworCismdmVuYyB7CisJc3RhdHVzID0gIm9rIjsKKworCXBvcnQgeworCQl2ZW5jX291dDogZW5kcG9pbnQgeworCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0dl9jb25uZWN0b3JfaW4+OworCQkJdGksY2hhbm5lbHMgPSA8Mj47CisJCX07CisJfTsKK307CisKKyZtY2JzcDIgeworCXN0YXR1cyA9ICJvayI7CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbWNic3AyX3BpbnM+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzeDMwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10M3gzMC5kdHNpCmluZGV4IDI1YmEwODMuLjlhNGEzYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzeDMwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDN4MzAuZHRzaQpAQCAtMTAsNiArMTAsMTQgQEAKIAkJCWNwdTAtc3VwcGx5ID0gPCZ2Y2M+OwogCQl9OwogCX07CisKKwlzb3VuZCB7CisJCWNvbXBhdGlibGUgPSAidGksb21hcC10d2w0MDMwIjsKKwkJdGksbW9kZWwgPSAiY20tdDM1IjsKKworCQl0aSxtY2JzcCA9IDwmbWNic3AyPjsKKwkJdGksY29kZWMgPSA8JnR3bF9hdWRpbz47CisJfTsKIH07CiAKICZvbWFwM19wbXhfY29yZSB7CkBAIC01OSwxMSArNjcsMjIgQEAKIAkJcmVnID0gPDB4NDg+OwogCQlpbnRlcnJ1cHRzID0gPDc+OyAvKiBTWVNfTklSUSBjYXNjYWRlZCB0byBpbnRjICovCiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OworCisJCXR3bF9hdWRpbzogYXVkaW8geworCQkJY29tcGF0aWJsZSA9ICJ0aSx0d2w0MDMwLWF1ZGlvIjsKKwkJCWNvZGVjIHsKKwkJCX07CisJCX07CiAJfTsKIH07CiAKICNpbmNsdWRlICJ0d2w0MDMwLmR0c2kiCiAjaW5jbHVkZSAidHdsNDAzMF9vbWFwMy5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisKKyZ2ZW5jIHsKKwl2ZGRhLXN1cHBseSA9IDwmdmRhYz47Cit9OwogCiAmbW1jMSB7CiAJdm1tYy1zdXBwbHkgPSA8JnZtbWMxPjsKQEAgLTc1LDYgKzk0LDIyIEBACiAJdGkscHVsbHVwcyA9IDwweDAwMDAwMT47CiB9OwogCismdHdsX2tleXBhZCB7CisJbGludXgsa2V5bWFwID0gPAorCQkJCU1BVFJJWF9LRVkoMHgwMCwgMHgwMSwgS0VZX0EpCisJCQkJTUFUUklYX0tFWSgweDAwLCAweDAyLCBLRVlfQikKKwkJCQlNQVRSSVhfS0VZKDB4MDAsIDB4MDMsIEtFWV9MRUZUKQorCisJCQkJTUFUUklYX0tFWSgweDAxLCAweDAxLCBLRVlfVVApCisJCQkJTUFUUklYX0tFWSgweDAxLCAweDAyLCBLRVlfRU5URVIpCisJCQkJTUFUUklYX0tFWSgweDAxLCAweDAzLCBLRVlfRE9XTikKKworCQkJCU1BVFJJWF9LRVkoMHgwMiwgMHgwMSwgS0VZX1JJR0hUKQorCQkJCU1BVFJJWF9LRVkoMHgwMiwgMHgwMiwgS0VZX0MpCisJCQkJTUFUUklYX0tFWSgweDAyLCAweDAzLCBLRVlfRCkKKwkJCT47Cit9OworCiAmaHN1c2IxX3BoeSB7CiAJcmVzZXQtZ3Bpb3MgPSA8JnR3bF9ncGlvIDYgR1BJT19BQ1RJVkVfTE9XPjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1kZXZraXQ4MDAwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWRldmtpdDgwMDAuZHRzCmluZGV4IGRhNDAyZjAuLjE2OTAzN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWRldmtpdDgwMDAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWRldmtpdDgwMDAuZHRzCkBAIC0xMDYsMTAgKzEwNiwxMCBAQAogfTsKIAogJmdwbWMgewotCXJhbmdlcyA9IDwwIDAgMHgzMDAwMDAwMCAweDA0PjsgICAgICAgLyogQ1MwOiBOQU5EICovCisJcmFuZ2VzID0gPDAgMCAweDMwMDAwMDAwIDB4MTAwMDAwMD47ICAgICAgIC8qIENTMDogMTZNQiBmb3IgTkFORCAqLwogCiAJbmFuZEAwLDAgewotCQlyZWcgPSA8MCAwIDA+OyAvKiBDUzAsIG9mZnNldCAwICovCisJCXJlZyA9IDwwIDAgND47IC8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47CiAKIAkJZ3BtYyxzeW5jLWNsay1wcyA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWV2bS0zN3h4LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWV2bS0zN3h4LmR0cwppbmRleCBhOGJkNDM0Li4xNmU4Y2UzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1ldm0tMzd4eC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLTM3eHguZHRzCkBAIC0xNTQsMTMgKzE1NCwxNCBAQAogfTsKIAogJmdwbWMgewotCXJhbmdlcyA9IDwwIDAgMHgwMDAwMDAwMCAweDIwMDAwMDAwPiwKKwlyYW5nZXMgPSA8MCAwIDB4MDAwMDAwMDAgMHgxMDAwMDAwPiwJLyogQ1MwOiAxNk1CIGZvciBOQU5EICovCiAJCSA8NSAwIDB4MmMwMDAwMDAgMHgwMTAwMDAwMD47CiAKIAluYW5kQDAsMCB7CiAJCWxpbnV4LG10ZC1uYW1lPSAiaHluaXgsaDhrZHMwdW4wbWVyLTRlbSI7Ci0JCXJlZyA9IDwwIDAgMD47CisJCXJlZyA9IDwwIDAgND47CS8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDI+OwogCQl0aSxuYW5kLWVjYy1vcHQgPSAiYmNoOCI7CiAKIAkJZ3BtYyxzeW5jLWNsay1wcyA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWV2bS1jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWV2bS1jb21tb24uZHRzaQppbmRleCBjODc0N2M3Li4xMjdmM2U3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1ldm0tY29tbW9uLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLWNvbW1vbi5kdHNpCkBAIC0yLDYgKzIsNyBAQAogICogQ29tbW9uIHN1cHBvcnQgZm9yIG9tYXAzIEVWTSBib2FyZHMKICAqLwogCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KICNpbmNsdWRlICJvbWFwLWdwbWMtc21zYzkxMXguZHRzaSIKIAogLyB7CkBAIC0xMTEsNiArMTEyLDI2IEBACiAJdGksdXNlLWxlZHM7CiB9OwogCismdHdsX2tleXBhZCB7CisJbGludXgsa2V5bWFwID0gPAorCQkJTUFUUklYX0tFWSgyLCAyLCBLRVlfMSkKKwkJCU1BVFJJWF9LRVkoMSwgMSwgS0VZXzIpCisJCQlNQVRSSVhfS0VZKDAsIDAsIEtFWV8zKQorCQkJTUFUUklYX0tFWSgzLCAyLCBLRVlfNCkKKwkJCU1BVFJJWF9LRVkoMiwgMSwgS0VZXzUpCisJCQlNQVRSSVhfS0VZKDEsIDAsIEtFWV82KQorCQkJTUFUUklYX0tFWSgxLCAzLCBLRVlfNykKKwkJCU1BVFJJWF9LRVkoMywgMSwgS0VZXzgpCisJCQlNQVRSSVhfS0VZKDIsIDAsIEtFWV85KQorCQkJTUFUUklYX0tFWSgyLCAzLCBLRVlfS1BBU1RFUklTSykKKwkJCU1BVFJJWF9LRVkoMCwgMiwgS0VZXzApCisJCQlNQVRSSVhfS0VZKDMsIDAsIEtFWV9LUERPVCkKKwkJCS8qIHM0IG5vdCB3aXJlZCAqLworCQkJTUFUUklYX0tFWSgxLCAyLCBLRVlfQkFDS1NQQUNFKQorCQkJTUFUUklYX0tFWSgwLCAxLCBLRVlfRU5URVIpCisJCQk+OworfTsKKwogJnVzYl9vdGdfaHMgewogCWludGVyZmFjZS10eXBlID0gPDA+OwogCXVzYi1waHkgPSA8JnVzYjJfcGh5PjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWd0YTA0LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1ndGEwNC5kdHNpCmluZGV4IGZkMzRmOTEuLjY1NWQ2ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWd0YTA0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZ3RhMDQuZHRzaQpAQCAtMTA0LDY3ICsxMDQsNjcgQEAKIAogCXVhcnQxX3BpbnM6IHBpbm11eF91YXJ0MV9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4MTUyIChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0MV9yeC51YXJ0MV9yeCAqLwotCQkJMHgxNGMgKFBJTl9PVVRQVVQgfE1VWF9NT0RFMCkJCS8qIHVhcnQxX3R4LnVhcnQxX3R4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxODIsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQxX3J4LnVhcnQxX3J4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxN2MsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0MV90eC51YXJ0MV90eCAqLwogCQk+OwogCX07CiAKIAl1YXJ0Ml9waW5zOiBwaW5tdXhfdWFydDJfcGlucyB7CiAJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQkweDE0YSAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogdWFydDJfcngudWFydDJfcnggKi8KLQkJCTB4MTQ4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogdWFydDJfdHgudWFydDJfdHggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3YSwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogdWFydDJfcngudWFydDJfcnggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3OCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQyX3R4LnVhcnQyX3R4ICovCiAJCT47CiAJfTsKIAogCXVhcnQzX3BpbnM6IHBpbm11eF91YXJ0M19waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4MTZlIChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0M19yeC51YXJ0M19yeCAqLwotCQkJMHgxNzAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0M190eC51YXJ0M190eCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTllLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0M19yeC51YXJ0M19yeCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWEwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogdWFydDNfdHgudWFydDNfdHggKi8KIAkJPjsKIAl9OwogCiAJbW1jMV9waW5zOiBwaW5tdXhfbW1jMV9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4MTE0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzFfY2xrLnNkbW1jMV9jbGsgKi8KLQkJCTB4MTE2IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzFfY21kLnNkbW1jMV9jbWQgKi8KLQkJCTB4MTE4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAJLyogc2RtbWMxX2RhdDAuc2RtbWMxX2RhdDAgKi8KLQkJCTB4MTFhIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzFfZGF0MS5zZG1tYzFfZGF0MSAqLwotCQkJMHgxMWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9kYXQyLnNkbW1jMV9kYXQyICovCi0JCQkweDExZSAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWMxX2RhdDMuc2RtbWMxX2RhdDMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE0NCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJCS8qIHNkbW1jMV9jbGsuc2RtbWMxX2NsayAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTQ2LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkJLyogc2RtbWMxX2NtZC5zZG1tYzFfY21kICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNDgsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCQkvKiBzZG1tYzFfZGF0MC5zZG1tYzFfZGF0MCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTRhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkJLyogc2RtbWMxX2RhdDEuc2RtbWMxX2RhdDEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE0YywgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJCS8qIHNkbW1jMV9kYXQyLnNkbW1jMV9kYXQyICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNGUsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCQkvKiBzZG1tYzFfZGF0My5zZG1tYzFfZGF0MyAqLwogCQk+OwogCX07CiAKIAlkc3NfZHBpX3BpbnM6IHBpbm11eF9kc3NfZHBpX3BpbnMgewogICAgICAgICAgICAgICAgcGluY3RybC1zaW5nbGUscGlucyA9IDwKLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX3BjbGsuZHNzX3BjbGsgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYTYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2hzeW5jLmRzc19oc3luYyAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBhOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfdnN5bmMuZHNzX3ZzeW5jICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGFhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19hY2JpYXMuZHNzX2FjYmlhcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBhYyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTAuZHNzX2RhdGEwICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGFlIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMS5kc3NfZGF0YTEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYjAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyLmRzc19kYXRhMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBiMiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTMuZHNzX2RhdGEzICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGI0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNC5kc3NfZGF0YTQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYjYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE1LmRzc19kYXRhNSAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBiOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTYuZHNzX2RhdGE2ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGJhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNy5kc3NfZGF0YTcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYmMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE4LmRzc19kYXRhOCAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBiZSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTkuZHNzX2RhdGE5ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGMwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTAuZHNzX2RhdGExMCAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBjMiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTExLmRzc19kYXRhMTEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYzQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMi5kc3NfZGF0YTEyICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGM2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTMuZHNzX2RhdGExMyAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBjOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE0LmRzc19kYXRhMTQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwY2EgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNS5kc3NfZGF0YTE1ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGNjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTYuZHNzX2RhdGExNiAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBjZSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE3LmRzc19kYXRhMTcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwZDAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExOC5kc3NfZGF0YTE4ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGQyIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTkuZHNzX2RhdGExOSAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBkNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIwLmRzc19kYXRhMjAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwZDYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMS5kc3NfZGF0YTIxICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGQ4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjIuZHNzX2RhdGEyMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBkYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIzLmRzc19kYXRhMjMgKi8KLSAgICAgICAgICAgICAgID47CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZDQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX3BjbGsuZHNzX3BjbGsgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfaHN5bmMuZHNzX2hzeW5jICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZDgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX3ZzeW5jLmRzc192c3luYyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGRhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19hY2JpYXMuZHNzX2FjYmlhcyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGRjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMC5kc3NfZGF0YTAgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTEuZHNzX2RhdGExICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZTAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyLmRzc19kYXRhMiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGUyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMy5kc3NfZGF0YTMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTQuZHNzX2RhdGE0ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZTYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE1LmRzc19kYXRhNSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGU4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNi5kc3NfZGF0YTYgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTcuZHNzX2RhdGE3ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZWMsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE4LmRzc19kYXRhOCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGVlLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhOS5kc3NfZGF0YTkgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTEwLmRzc19kYXRhMTAgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmMiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTExLmRzc19kYXRhMTEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTEyLmRzc19kYXRhMTIgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTEzLmRzc19kYXRhMTMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE0LmRzc19kYXRhMTQgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE1LmRzc19kYXRhMTUgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmYywgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE2LmRzc19kYXRhMTYgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE3LmRzc19kYXRhMTcgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE4LmRzc19kYXRhMTggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwMiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE5LmRzc19kYXRhMTkgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIwLmRzc19kYXRhMjAgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIxLmRzc19kYXRhMjEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIyLmRzc19kYXRhMjIgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIzLmRzc19kYXRhMjMgKi8KKwkJPjsKICAgICAgICB9OwogfTsKIApAQCAtMzk3LDEwICszOTcsMTAgQEAKIH07CiAKICZncG1jIHsKLQlyYW5nZXMgPSA8MCAwIDB4MzAwMDAwMDAgMHgwND47IC8qIENTMDogTkFORCAqLworCXJhbmdlcyA9IDwwIDAgMHgzMDAwMDAwMCAweDEwMDAwMDA+OyAvKiBDUzA6IDE2TUIgZm9yIE5BTkQgKi8KIAogCW5hbmRAMCwwIHsKLQkJcmVnID0gPDAgMCAwPjsgLyogQ1MwLCBvZmZzZXQgMCAqLworCQlyZWcgPSA8MCAwIDQ+OyAvKiBDUzAsIG9mZnNldCAwLCBJTyBzaXplIDQgKi8KIAkJbmFuZC1idXMtd2lkdGggPSA8MTY+OwogCQl0aSxuYW5kLWVjYy1vcHQgPSAiYmNoOCI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAuZHRzaQppbmRleCBlMmQxNjNiLi44YTYzYWQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcC5kdHNpCkBAIC0zMSwxOCArMzEsNiBAQAogCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCX07CiAKLQlsYmVlMXVzanljX3ZtbWM6IGxiZWUxdXNqeWNfdm1tYyB7Ci0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmbGJlZTF1c2p5Y19waW5zPjsKLQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOwotCQlyZWd1bGF0b3ItbmFtZSA9ICJyZWd1bGF0b3ItbGJlZTF1c2p5YyI7Ci0JCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLQkJZ3BpbyA9IDwmZ3BpbzUgMTAgR1BJT19BQ1RJVkVfSElHSD47CS8qIGdwaW9fMTM4IFdJRklfUEROICovCi0JCXN0YXJ0dXAtZGVsYXktdXMgPSA8MTAwMDA+OwotCQllbmFibGUtYWN0aXZlLWhpZ2g7Ci0JCXZpbi1zdXBwbHkgPSA8JnZkZDMzPjsKLQl9OwogfTsKIAogJm9tYXAzX3BteF9jb3JlIHsKQEAgLTUzLDEzICs0MSw2IEBACiAJCT47CiAJfTsKIAotCXVhcnQyX3BpbnM6IHBpbm11eF91YXJ0Ml9waW5zIHsKLQkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4MTRhIChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0Ml9yeC51YXJ0Ml9yeCAqLwotCQkJMHgxNDggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0Ml90eC51YXJ0Ml90eCAqLwotCQk+OwotCX07Ci0KIAl1YXJ0M19waW5zOiBwaW5tdXhfdWFydDNfcGlucyB7CiAJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CiAJCQkweDE2ZSAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogdWFydDNfcngudWFydDNfcnggKi8KQEAgLTY3LDE1ICs0OCw2IEBACiAJCT47CiAJfTsKIAotCS8qIFdpRmkvQlQgY29tYm8gKi8KLQlsYmVlMXVzanljX3BpbnM6IHBpbm11eF9sYmVlMXVzanljX3BpbnMgewotCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxMzYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ1LmdwaW9fMTM3ICovCi0JCQkweDEzOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDYuZ3Bpb18xMzggKi8KLQkJCTB4MTNhIChQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0Ny5ncGlvXzEzOSAqLwotCQk+OwotCX07Ci0KIAltY2JzcDJfcGluczogcGlubXV4X21jYnNwMl9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKIAkJCTB4MTBjIChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiBtY2JzcDJfZnN4Lm1jYnNwMl9mc3ggKi8KQEAgLTEyMCwxMyArOTIsNiBAQAogCQk+OwogCX07CiAKLQlpMmMyX3BpbnM6IHBpbm11eF9pMmMyX3BpbnMgewotCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxOGUgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkgICAvKiBpMmMyX3NjbC5pMmMyX3NjbCAqLwotCQkJMHgxOTAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkgICAvKiBpMmMyX3NkYS5pMmMyX3NkYSAqLwotCQk+OwotCX07Ci0KIAlpMmMzX3BpbnM6IHBpbm11eF9pMmMzX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAogCQkJMHgxOTIgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkgICAvKiBpMmMzX3NjbC5pMmMzX3NjbCAqLwpAQCAtMTM1LDYgKzEwMCw1NSBAQAogCX07CiB9OwogCismZ3BtYyB7CisJbmFuZEAwLDAgeworCQlsaW51eCxtdGQtbmFtZT0gIm1pY3JvbixtdDI5YzRnOTZtYXoiOworCQlyZWcgPSA8MCAwIDQ+OwkvKiBDUzAsIG9mZnNldCAwLCBJTyBzaXplIDQgKi8KKwkJbmFuZC1idXMtd2lkdGggPSA8MTY+OworCQlncG1jLGRldmljZS13aWR0aCA9IDwyPjsKKwkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOworCisJCWdwbWMsc3luYy1jbGstcHMgPSA8MD47CisJCWdwbWMsY3Mtb24tbnMgPSA8MD47CisJCWdwbWMsY3MtcmQtb2ZmLW5zID0gPDQ0PjsKKwkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8NDQ+OworCQlncG1jLGFkdi1vbi1ucyA9IDw2PjsKKwkJZ3BtYyxhZHYtcmQtb2ZmLW5zID0gPDM0PjsKKwkJZ3BtYyxhZHYtd3Itb2ZmLW5zID0gPDQ0PjsKKwkJZ3BtYyx3ZS1vZmYtbnMgPSA8NDA+OworCQlncG1jLG9lLW9mZi1ucyA9IDw1ND47CisJCWdwbWMsYWNjZXNzLW5zID0gPDY0PjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDw4Mj47CisJCWdwbWMsd3ItY3ljbGUtbnMgPSA8ODI+OworCQlncG1jLHdyLWFjY2Vzcy1ucyA9IDw0MD47CisJCWdwbWMsd3ItZGF0YS1tdXgtYnVzLW5zID0gPDA+OworCisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJTUEwiOworCQkJcmVnID0gPDAgMHgxMDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AODAwMDAgeworCQkJbGFiZWwgPSAiVS1Cb290IjsKKwkJCXJlZyA9IDwweDEwMDAwMCAweDE4MDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAxYzAwMDAgeworCQkJbGFiZWwgPSAiRW52aXJvbm1lbnQiOworCQkJcmVnID0gPDB4MjgwMDAwIDB4MTAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDI4MDAwMCB7CisJCQlsYWJlbCA9ICJLZXJuZWwiOworCQkJcmVnID0gPDB4MzgwMDAwIDB4MzAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDc4MDAwMCB7CisJCQlsYWJlbCA9ICJGaWxlc3lzdGVtIjsKKwkJCXJlZyA9IDwweDY4MDAwMCAweDFmOTgwMDAwPjsKKwkJfTsKKwl9OworfTsKKwogJmkyYzEgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZpMmMxX3BpbnM+OwpAQCAtMTU2LDEyICsxNzAsNiBAQAogI2luY2x1ZGUgInR3bDQwMzAuZHRzaSIKICNpbmNsdWRlICJ0d2w0MDMwX29tYXAzLmR0c2kiCiAKLSZpMmMyIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmaTJjMl9waW5zPjsKLQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKLX07Ci0KICZpMmMzIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmaTJjM19waW5zPjsKQEAgLTE4MSwxNCArMTg5LDYgQEAKICAgICAgIGJ1cy13aWR0aCA9IDw0PjsKIH07CiAKLSZtbWMyIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmbW1jMl9waW5zPjsKLQl2bW1jLXN1cHBseSA9IDwmbGJlZTF1c2p5Y192bW1jPjsKLQlidXMtd2lkdGggPSA8ND47Ci0Jbm9uLXJlbW92YWJsZTsKLX07Ci0KICZtbWMzIHsKIAlzdGF0dXMgPSAiZGlzYWJsZWQiOwogfTsKQEAgLTE5OCwxMSArMTk4LDYgQEAKICAgICAgICBwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OwogfTsKIAotJnVhcnQyIHsKLSAgICAgICBwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotICAgICAgIHBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47Ci19OwotCiAmdWFydDMgewogICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAgICAgICAgcGluY3RybC0wID0gPCZ1YXJ0M19waW5zPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDIwLWNvbW1vbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAtY29tbW9uLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1OGMyMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDIwLWNvbW1vbi5kdHNpCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogQ29tbW9uIERldmljZSBUcmVlIFNvdXJjZSBmb3IgSUdFUHYyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEphdmllciBNYXJ0aW5leiBDYW5pbGxhcyA8amF2aWVyQGNvbGxhYm9yYS5jby51az4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBFbnJpYyBCYWxsZXRibyBpIFNlcnJhIDxlYmFsbGV0Ym9AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgIm9tYXAzLWlnZXAuZHRzaSIKKyNpbmNsdWRlICJvbWFwLWdwbWMtc21zYzkyMjEuZHRzaSIKKworLyB7CisKKwlsZWRzIHsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZsZWRzX3BpbnM+OworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJYm9vdCB7CisJCQkgbGFiZWwgPSAib21hcDM6Z3JlZW46Ym9vdCI7CisJCQkgZ3Bpb3MgPSA8JmdwaW8xIDI2IEdQSU9fQUNUSVZFX0hJR0g+OworCQkJIGRlZmF1bHQtc3RhdGUgPSAib24iOworCQl9OworCisJCXVzZXIwIHsKKwkJCSBsYWJlbCA9ICJvbWFwMzpyZWQ6dXNlcjAiOworCQkJIGdwaW9zID0gPCZncGlvMSAyNyBHUElPX0FDVElWRV9ISUdIPjsKKwkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCX07CisKKwkJdXNlcjEgeworCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMSI7CisJCQkgZ3Bpb3MgPSA8JmdwaW8xIDI4IEdQSU9fQUNUSVZFX0hJR0g+OworCQkJIGRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJfTsKKworCQl1c2VyMiB7CisJCQlsYWJlbCA9ICJvbWFwMzpncmVlbjp1c2VyMSI7CisJCQlncGlvcyA9IDwmdHdsX2dwaW8gMTkgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworCisJLyogSFMgVVNCIFBvcnQgMSBQb3dlciAqLworCWhzdXNiMV9wb3dlcjogaHN1c2IxX3Bvd2VyX3JlZyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiaHN1c2IxX3ZidXMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCWdwaW8gPSA8JnR3bF9ncGlvIDE4IEdQSU9fQUNUSVZFX0xPVz47CS8qIEdQSU8gTEVEQSAqLworCQlzdGFydHVwLWRlbGF5LXVzID0gPDcwMDAwPjsKKwl9OworCisJLyogSFMgVVNCIEhvc3QgUEhZIG9uIFBPUlQgMSAqLworCWhzdXNiMV9waHk6IGhzdXNiMV9waHkgeworCQljb21wYXRpYmxlID0gInVzYi1ub3AteGNlaXYiOworCQlyZXNldC1ncGlvcyA9IDwmZ3BpbzEgMjQgR1BJT19BQ1RJVkVfTE9XPjsgLyogZ3Bpb18yNCAqLworCQl2Y2Mtc3VwcGx5ID0gPCZoc3VzYjFfcG93ZXI+OworCX07CisKKwl0ZnA0MTA6IGVuY29kZXJAMCB7CisJCWNvbXBhdGlibGUgPSAidGksdGZwNDEwIjsKKwkJcG93ZXJkb3duLWdwaW9zID0gPCZncGlvNiAxMCBHUElPX0FDVElWRV9MT1c+OyAvKiBncGlvXzE3MCAqLworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCisJCQkJdGZwNDEwX2luOiBlbmRwb2ludEAwIHsKKwkJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZkcGlfb3V0PjsKKwkJCQl9OworCQkJfTsKKworCQkJcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisKKwkJCQl0ZnA0MTBfb3V0OiBlbmRwb2ludEAwIHsKKwkJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZkdmlfY29ubmVjdG9yX2luPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCisJZHZpMDogY29ubmVjdG9yQDAgeworCQljb21wYXRpYmxlID0gImR2aS1jb25uZWN0b3IiOworCQlsYWJlbCA9ICJkdmkiOworCisJCWRpZ2l0YWw7CisKKwkJZGRjLWkyYy1idXMgPSA8JmkyYzM+OworCisJCXBvcnQgeworCQkJZHZpX2Nvbm5lY3Rvcl9pbjogZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdGZwNDEwX291dD47CisJCQl9OworCQl9OworCX07Cit9OworCismb21hcDNfcG14X2NvcmUgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPAorCQkmdGZwNDEwX3BpbnMKKwkJJmRzc19kcGlfcGlucworCT47CisKKwl0ZnA0MTBfcGluczogcGlubXV4X3RmcDQxMF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MTk2IChQSU5fT1VUUFVUIHwgTVVYX01PREU0KSAgIC8qIGhkcV9zaW8uZ3Bpb18xNzAgKi8KKwkJPjsKKwl9OworCisJZHNzX2RwaV9waW5zOiBwaW5tdXhfZHNzX2RwaV9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MGE0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19wY2xrLmRzc19wY2xrICovCisJCQkweDBhNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfaHN5bmMuZHNzX2hzeW5jICovCisJCQkweDBhOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfdnN5bmMuZHNzX3ZzeW5jICovCisJCQkweDBhYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfYWNiaWFzLmRzc19hY2JpYXMgKi8KKwkJCTB4MGFjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMC5kc3NfZGF0YTAgKi8KKwkJCTB4MGFlIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMS5kc3NfZGF0YTEgKi8KKwkJCTB4MGIwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMi5kc3NfZGF0YTIgKi8KKwkJCTB4MGIyIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMy5kc3NfZGF0YTMgKi8KKwkJCTB4MGI0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNC5kc3NfZGF0YTQgKi8KKwkJCTB4MGI2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNS5kc3NfZGF0YTUgKi8KKwkJCTB4MGI4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNi5kc3NfZGF0YTYgKi8KKwkJCTB4MGJhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNy5kc3NfZGF0YTcgKi8KKwkJCTB4MGJjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhOC5kc3NfZGF0YTggKi8KKwkJCTB4MGJlIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhOS5kc3NfZGF0YTkgKi8KKwkJCTB4MGMwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTAuZHNzX2RhdGExMCAqLworCQkJMHgwYzIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMS5kc3NfZGF0YTExICovCisJCQkweDBjNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTEyLmRzc19kYXRhMTIgKi8KKwkJCTB4MGM2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTMuZHNzX2RhdGExMyAqLworCQkJMHgwYzggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNC5kc3NfZGF0YTE0ICovCisJCQkweDBjYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE1LmRzc19kYXRhMTUgKi8KKwkJCTB4MGNjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTYuZHNzX2RhdGExNiAqLworCQkJMHgwY2UgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNy5kc3NfZGF0YTE3ICovCisJCQkweDBkMCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE4LmRzc19kYXRhMTggKi8KKwkJCTB4MGQyIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTkuZHNzX2RhdGExOSAqLworCQkJMHgwZDQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMC5kc3NfZGF0YTIwICovCisJCQkweDBkNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIxLmRzc19kYXRhMjEgKi8KKwkJCTB4MGQ4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjIuZHNzX2RhdGEyMiAqLworCQkJMHgwZGEgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMy5kc3NfZGF0YTIzICovCisJCT47CisJfTsKKworCXVhcnQyX3BpbnM6IHBpbm11eF91YXJ0Ml9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3NCwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiB1YXJ0Ml9jdHMudWFydDJfY3RzICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNzYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIHVhcnQyX3J0cyAudWFydDJfcnRzKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3OCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogdWFydDJfdHgudWFydDJfdHggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3YSwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiB1YXJ0Ml9yeC51YXJ0Ml9yeCAqLworCQk+OworCX07Cit9OworCismb21hcDNfcG14X2NvcmUyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwKKwkJJmhzdXNiYjFfcGlucworCT47CisKKwloc3VzYmIxX3BpbnM6IHBpbm11eF9oc3VzYmIxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWRhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkJLyogZXRrX2N0bC5oc3VzYjFfY2xrICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZDgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCQkvKiBldGtfY2xrLmhzdXNiMV9zdHAgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlYywgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDguaHN1c2IxX2RpciAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWVlLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kOS5oc3VzYjFfbnh0ICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZGMsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2QwLmhzdXNiMV9kYXRhMCAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWRlLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kMS5oc3VzYjFfZGF0YTEgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlMCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDIuaHN1c2IxX2RhdGEyICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTIsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2QzLmhzdXNiMV9kYXRhNyAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWU0LCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kNC5oc3VzYjFfZGF0YTQgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlNiwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDUuaHN1c2IxX2RhdGE1ICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTgsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q2LmhzdXNiMV9kYXRhNiAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWVhLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kNy5oc3VzYjFfZGF0YTMgKi8KKwkJPjsKKwl9OworCisJbGVkc19waW5zOiBwaW5tdXhfbGVkc19waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVmNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkgLyogZXRrX2QxMi5ncGlvXzI2ICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZjYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpIC8qIGV0a19kMTMuZ3Bpb18yNyAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWY4LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KSAvKiBldGtfZDE0LmdwaW9fMjggKi8KKwkJPjsKKwl9OworfTsKKworJmkyYzMgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCisJLyoKKwkgKiBEaXNwbGF5IG1vbml0b3IgZmVhdHVyZXMgYXJlIGJ1cm50IGluIHRoZSBFRVBST00KKwkgKiBhcyBFRElEIGRhdGEuCisJICovCisJZWVwcm9tQDUwIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSxlZXByb20iOworCQlyZWcgPSA8MHg1MD47CisJfTsKK307CisKKyZncG1jIHsKKwlyYW5nZXMgPSA8MCAwIDB4MDAwMDAwMDAgMHgyMDAwMDAwMD4sCisJCSA8NSAwIDB4MmMwMDAwMDAgMHgwMTAwMDAwMD47CisKKwlldGhlcm5ldEBncG1jIHsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZzbXNjOTIyMV9waW5zPjsKKwkJcmVnID0gPDUgMCAweGZmPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzY+OworCQlpbnRlcnJ1cHRzID0gPDE2IElSUV9UWVBFX0xFVkVMX0xPVz47CisJfTsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworfTsKKworJnVzYmhzaG9zdCB7CisJcG9ydDEtbW9kZSA9ICJlaGNpLXBoeSI7Cit9OworCismdXNiaHNlaGNpIHsKKwlwaHlzID0gPCZoc3VzYjFfcGh5PjsKK307CisKKyZ2cGxsMiB7CisJLyogTmVlZGVkIGZvciBEU1MgKi8KKwlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRzX2RzaSI7Cit9OworCismZHNzIHsKKwlzdGF0dXMgPSAib2siOworCisJcG9ydCB7CisJCWRwaV9vdXQ6IGVuZHBvaW50IHsKKwkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdGZwNDEwX2luPjsKKwkJCWRhdGEtbGluZXMgPSA8MjQ+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAtcmV2LWYuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAtcmV2LWYuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGJkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAyMC1yZXYtZi5kdHMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgSUdFUHYyIFJldi4gRiAoVEkgT01BUCBBTS9ETTM3eCkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDEyIEVucmljIEJhbGxldGJvIGkgU2VycmEgPGViYWxsZXRib0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib21hcDMtaWdlcDAwMjAtY29tbW9uLmR0c2kiCisKKy8geworCW1vZGVsID0gIklHRVB2MiBSZXYuIEYgKFRJIE9NQVAgQU0vRE0zN3gpIjsKKwljb21wYXRpYmxlID0gImlzZWUsb21hcDMtaWdlcDAwMjAtcmV2LWYiLCAidGksb21hcDM2eHgiLCAidGksb21hcDMiOworCisJLyogUmVndWxhdG9yIHRvIHRyaWdnZXIgdGhlIFdMX0VOIHNpZ25hbCBvZiB0aGUgV2lmaSBtb2R1bGUgKi8KKwlsYmVwNWNsd21jX3dsZW46IHJlZ3VsYXRvci1sYmVwNWNsd21jLXdsZW4geworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInJlZ3VsYXRvci1sYmVwNWNsd21jLXdsZW4iOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCWdwaW8gPSA8JmdwaW81IDExIEdQSU9fQUNUSVZFX0hJR0g+OwkJLyogZ3Bpb18xMzkgLSBXTF9FTiAqLworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJfTsKK307CisKKyZvbWFwM19wbXhfY29yZSB7CisJbGJlcDVjbHdtY19waW5zOiBwaW5tdXhfbGJlcDVjbHdtY19waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjFkNCwgUElOX0lOUFVUIHwgTVVYX01PREU0KQkvKiBtY3NwaTFfY3MzLmdwaW9fMTc3IC0gV19JUlEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDUuZ3Bpb18xMzcgLSBCVF9FTiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTZhLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0Ny5ncGlvXzEzOSAtIFdMX0VOICovCisJCT47CisJfTsKK307CisKKyZtbWMyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbW1jMl9waW5zICZsYmVwNWNsd21jX3BpbnM+OworCXZtbWMtc3VwcGx5ID0gPCZsYmVwNWNsd21jX3dsZW4+OworCWJ1cy13aWR0aCA9IDw0PjsKKwlub24tcmVtb3ZhYmxlOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDIwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDIwLmR0cwppbmRleCBiMjJjYWFhLi5mZWE3ZjdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAyMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAuZHRzCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgSUdFUHYyIFJldi4gKFRJIE9NQVAgQU0vRE0zN3gpCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIElHRVB2MiBSZXYuIEMgKFRJIE9NQVAgQU0vRE0zN3gpCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEphdmllciBNYXJ0aW5leiBDYW5pbGxhcyA8amF2aWVyQGNvbGxhYm9yYS5jby51az4KICAqIENvcHlyaWdodCAoQykgMjAxMiBFbnJpYyBCYWxsZXRibyBpIFNlcnJhIDxlYmFsbGV0Ym9AZ21haWwuY29tPgpAQCAtOSwyNzIgKzksNTkgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlICJvbWFwMy1pZ2VwLmR0c2kiCi0jaW5jbHVkZSAib21hcC1ncG1jLXNtc2M5MjIxLmR0c2kiCisjaW5jbHVkZSAib21hcDMtaWdlcDAwMjAtY29tbW9uLmR0c2kiCiAKIC8gewotCW1vZGVsID0gIklHRVB2MiAoVEkgT01BUCBBTS9ETTM3eCkiOworCW1vZGVsID0gIklHRVB2MiBSZXYuIEMgKFRJIE9NQVAgQU0vRE0zN3gpIjsKIAljb21wYXRpYmxlID0gImlzZWUsb21hcDMtaWdlcDAwMjAiLCAidGksb21hcDM2eHgiLCAidGksb21hcDMiOwogCi0JbGVkcyB7Ci0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmbGVkc19waW5zPjsKLQkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOwotCi0JCWJvb3QgewotCQkJIGxhYmVsID0gIm9tYXAzOmdyZWVuOmJvb3QiOwotCQkJIGdwaW9zID0gPCZncGlvMSAyNiBHUElPX0FDVElWRV9ISUdIPjsKLQkJCSBkZWZhdWx0LXN0YXRlID0gIm9uIjsKLQkJfTsKLQotCQl1c2VyMCB7Ci0JCQkgbGFiZWwgPSAib21hcDM6cmVkOnVzZXIwIjsKLQkJCSBncGlvcyA9IDwmZ3BpbzEgMjcgR1BJT19BQ1RJVkVfSElHSD47Ci0JCQkgZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOwotCQl9OwotCi0JCXVzZXIxIHsKLQkJCSBsYWJlbCA9ICJvbWFwMzpyZWQ6dXNlcjEiOwotCQkJIGdwaW9zID0gPCZncGlvMSAyOCBHUElPX0FDVElWRV9ISUdIPjsKLQkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7Ci0JCX07Ci0KLQkJdXNlcjIgewotCQkJbGFiZWwgPSAib21hcDM6Z3JlZW46dXNlcjEiOwotCQkJZ3Bpb3MgPSA8JnR3bF9ncGlvIDE5IEdQSU9fQUNUSVZFX0xPVz47Ci0JCX07CisJLyogUmVndWxhdG9yIHRvIHRyaWdnZXIgdGhlIFdJRklfUEROIHNpZ25hbCBvZiB0aGUgV2lmaSBtb2R1bGUgKi8KKwlsYmVlMXVzanljX3BkbjogbGJlZTF1c2p5Y19wZG4geworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInJlZ3VsYXRvci1sYmVlMXVzanljLXBkbiI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BpbzUgMTAgR1BJT19BQ1RJVkVfSElHSD47CS8qIGdwaW9fMTM4IC0gV0lGSV9QRE4gKi8KKwkJc3RhcnR1cC1kZWxheS11cyA9IDwxMDAwMD47CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKIAl9OwogCi0gICAgICAgLyogSFMgVVNCIFBvcnQgMSBQb3dlciAqLwotICAgICAgIGhzdXNiMV9wb3dlcjogaHN1c2IxX3Bvd2VyX3JlZyB7Ci0gICAgICAgICAgICAgICBjb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7Ci0gICAgICAgICAgICAgICByZWd1bGF0b3ItbmFtZSA9ICJoc3VzYjFfdmJ1cyI7Ci0gICAgICAgICAgICAgICByZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLSAgICAgICAgICAgICAgIHJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OwotICAgICAgICAgICAgICAgZ3BpbyA9IDwmdHdsX2dwaW8gMTggR1BJT19BQ1RJVkVfTE9XPjsJLyogR1BJTyBMRURBICovCi0gICAgICAgICAgICAgICBzdGFydHVwLWRlbGF5LXVzID0gPDcwMDAwPjsKLSAgICAgICB9OwotCi0JLyogSFMgVVNCIEhvc3QgUEhZIG9uIFBPUlQgMSAqLwotCWhzdXNiMV9waHk6IGhzdXNiMV9waHkgewotCQljb21wYXRpYmxlID0gInVzYi1ub3AteGNlaXYiOwotCQlyZXNldC1ncGlvcyA9IDwmZ3BpbzEgMjQgR1BJT19BQ1RJVkVfTE9XPjsgLyogZ3Bpb18yNCAqLwotCQl2Y2Mtc3VwcGx5ID0gPCZoc3VzYjFfcG93ZXI+OwotCX07Ci0KLQl0ZnA0MTA6IGVuY29kZXJAMCB7Ci0JCWNvbXBhdGlibGUgPSAidGksdGZwNDEwIjsKLQkJcG93ZXJkb3duLWdwaW9zID0gPCZncGlvNiAxMCBHUElPX0FDVElWRV9MT1c+OyAvKiBncGlvXzE3MCAqLwotCi0JCXBvcnRzIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0KLQkJCXBvcnRAMCB7Ci0JCQkJcmVnID0gPDA+OwotCi0JCQkJdGZwNDEwX2luOiBlbmRwb2ludEAwIHsKLQkJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZkcGlfb3V0PjsKLQkJCQl9OwotCQkJfTsKLQotCQkJcG9ydEAxIHsKLQkJCQlyZWcgPSA8MT47Ci0KLQkJCQl0ZnA0MTBfb3V0OiBlbmRwb2ludEAwIHsKLQkJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZkdmlfY29ubmVjdG9yX2luPjsKLQkJCQl9OwotCQkJfTsKLQkJfTsKLQl9OwotCi0JZHZpMDogY29ubmVjdG9yQDAgewotCQljb21wYXRpYmxlID0gImR2aS1jb25uZWN0b3IiOwotCQlsYWJlbCA9ICJkdmkiOwotCi0JCWRpZ2l0YWw7Ci0KLQkJZGRjLWkyYy1idXMgPSA8JmkyYzM+OwotCi0JCXBvcnQgewotCQkJZHZpX2Nvbm5lY3Rvcl9pbjogZW5kcG9pbnQgewotCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdGZwNDEwX291dD47Ci0JCQl9OwotCQl9OworCS8qIFJlZ3VsYXRvciB0byB0cmlnZ2VyIHRoZSBSRVNFVF9OX1cgc2lnbmFsIG9mIHRoZSBXaWZpIG1vZHVsZSAqLworCWxiZWUxdXNqeWNfcmVzZXRfbl93OiBsYmVlMXVzanljX3Jlc2V0X25fdyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAicmVndWxhdG9yLWxiZWUxdXNqeWMtcmVzZXQtbi13IjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlncGlvID0gPCZncGlvNSAxMSBHUElPX0FDVElWRV9ISUdIPjsJLyogZ3Bpb18xMzkgLSBSRVNFVF9OX1cgKi8KKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOwogCX07CiB9OwogCiAmb21hcDNfcG14X2NvcmUgeworCWxiZWUxdXNqeWNfcGluczogcGlubXV4X2xiZWUxdXNqeWNfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNjYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ1LmdwaW9fMTM3IC0gUkVTRVRfTl9XICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNjgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ2LmdwaW9fMTM4IC0gV0lGSV9QRE4gKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2YSwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDcuZ3Bpb18xMzkgLSBSU1RfTl9CICovCisJCT47CisJfTsKKworCXVhcnQyX3BpbnM6IHBpbm11eF91YXJ0Ml9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3NCwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiB1YXJ0Ml9jdHMudWFydDJfY3RzICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNzYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIHVhcnQyX3J0cyAudWFydDJfcnRzKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3OCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogdWFydDJfdHgudWFydDJfdHggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3YSwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiB1YXJ0Ml9yeC51YXJ0Ml9yeCAqLworCQk+OworCX07Cit9OworCisvKiBPbiBib2FyZCBXaWZpIG1vZHVsZSAqLworJm1tYzIgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPAotCQkmdGZwNDEwX3BpbnMKLQkJJmRzc19kcGlfcGlucwotCT47Ci0KLQl0ZnA0MTBfcGluczogcGlubXV4X3RmcDQxMF9waW5zIHsKLQkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4MTk2IChQSU5fT1VUUFVUIHwgTVVYX01PREU0KSAgIC8qIGhkcV9zaW8uZ3Bpb18xNzAgKi8KLQkJPjsKLQl9OwotCi0JZHNzX2RwaV9waW5zOiBwaW5tdXhfZHNzX2RwaV9waW5zIHsKLQkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4MGE0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19wY2xrLmRzc19wY2xrICovCi0JCQkweDBhNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfaHN5bmMuZHNzX2hzeW5jICovCi0JCQkweDBhOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfdnN5bmMuZHNzX3ZzeW5jICovCi0JCQkweDBhYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfYWNiaWFzLmRzc19hY2JpYXMgKi8KLQkJCTB4MGFjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMC5kc3NfZGF0YTAgKi8KLQkJCTB4MGFlIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMS5kc3NfZGF0YTEgKi8KLQkJCTB4MGIwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMi5kc3NfZGF0YTIgKi8KLQkJCTB4MGIyIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMy5kc3NfZGF0YTMgKi8KLQkJCTB4MGI0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNC5kc3NfZGF0YTQgKi8KLQkJCTB4MGI2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNS5kc3NfZGF0YTUgKi8KLQkJCTB4MGI4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNi5kc3NfZGF0YTYgKi8KLQkJCTB4MGJhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNy5kc3NfZGF0YTcgKi8KLQkJCTB4MGJjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhOC5kc3NfZGF0YTggKi8KLQkJCTB4MGJlIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhOS5kc3NfZGF0YTkgKi8KLQkJCTB4MGMwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTAuZHNzX2RhdGExMCAqLwotCQkJMHgwYzIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMS5kc3NfZGF0YTExICovCi0JCQkweDBjNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTEyLmRzc19kYXRhMTIgKi8KLQkJCTB4MGM2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTMuZHNzX2RhdGExMyAqLwotCQkJMHgwYzggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNC5kc3NfZGF0YTE0ICovCi0JCQkweDBjYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE1LmRzc19kYXRhMTUgKi8KLQkJCTB4MGNjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTYuZHNzX2RhdGExNiAqLwotCQkJMHgwY2UgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNy5kc3NfZGF0YTE3ICovCi0JCQkweDBkMCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE4LmRzc19kYXRhMTggKi8KLQkJCTB4MGQyIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTkuZHNzX2RhdGExOSAqLwotCQkJMHgwZDQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMC5kc3NfZGF0YTIwICovCi0JCQkweDBkNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIxLmRzc19kYXRhMjEgKi8KLQkJCTB4MGQ4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjIuZHNzX2RhdGEyMiAqLwotCQkJMHgwZGEgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMy5kc3NfZGF0YTIzICovCi0JCT47Ci0JfTsKLX07Ci0KLSZvbWFwM19wbXhfY29yZTIgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPAotCQkmaHN1c2JiMV9waW5zCi0JPjsKLQotCWhzdXNiYjFfcGluczogcGlubXV4X2hzdXNiYjFfcGlucyB7Ci0JCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZGEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCQkvKiBldGtfY3RsLmhzdXNiMV9jbGsgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVkOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGV0a19jbGsuaHN1c2IxX3N0cCAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWVjLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kOC5oc3VzYjFfZGlyICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZWUsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q5LmhzdXNiMV9ueHQgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVkYywgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDAuaHN1c2IxX2RhdGEwICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZGUsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2QxLmhzdXNiMV9kYXRhMSAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWUwLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kMi5oc3VzYjFfZGF0YTIgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlMiwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDMuaHN1c2IxX2RhdGE3ICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTQsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q0LmhzdXNiMV9kYXRhNCAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWU2LCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kNS5oc3VzYjFfZGF0YTUgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlOCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDYuaHN1c2IxX2RhdGE2ICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZWEsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q3LmhzdXNiMV9kYXRhMyAqLwotCQk+OwotCX07Ci0KLQlsZWRzX3BpbnM6IHBpbm11eF9sZWRzX3BpbnMgewotCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWY0LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KSAvKiBldGtfZDEyLmdwaW9fMjYgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVmNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkgLyogZXRrX2QxMy5ncGlvXzI3ICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZjgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpIC8qIGV0a19kMTQuZ3Bpb18yOCAqLwotCQk+OwotCX07Ci19OwotCi0maTJjMyB7Ci0JY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Ci0KLQkvKgotCSAqIERpc3BsYXkgbW9uaXRvciBmZWF0dXJlcyBhcmUgYnVybnQgaW4gdGhlIEVFUFJPTQotCSAqIGFzIEVESUQgZGF0YS4KLQkgKi8KLQllZXByb21ANTAgewotCQljb21wYXRpYmxlID0gInRpLGVlcHJvbSI7Ci0JCXJlZyA9IDwweDUwPjsKLQl9OwotfTsKLQotJmdwbWMgewotCXJhbmdlcyA9IDwwIDAgMHgwMDAwMDAwMCAweDIwMDAwMDAwPiwKLQkJIDw1IDAgMHgyYzAwMDAwMCAweDAxMDAwMDAwPjsKLQotCW5hbmRAMCwwIHsKLQkJbGludXgsbXRkLW5hbWU9ICJtaWNyb24sbXQyOWM0Zzk2bWF6IjsKLQkJcmVnID0gPDAgMCAwPjsKLQkJbmFuZC1idXMtd2lkdGggPSA8MTY+OwotCQl0aSxuYW5kLWVjYy1vcHQgPSAiYmNoOCI7Ci0KLQkJZ3BtYyxzeW5jLWNsay1wcyA9IDwwPjsKLQkJZ3BtYyxjcy1vbi1ucyA9IDwwPjsKLQkJZ3BtYyxjcy1yZC1vZmYtbnMgPSA8NDQ+OwotCQlncG1jLGNzLXdyLW9mZi1ucyA9IDw0ND47Ci0JCWdwbWMsYWR2LW9uLW5zID0gPDY+OwotCQlncG1jLGFkdi1yZC1vZmYtbnMgPSA8MzQ+OwotCQlncG1jLGFkdi13ci1vZmYtbnMgPSA8NDQ+OwotCQlncG1jLHdlLW9mZi1ucyA9IDw0MD47Ci0JCWdwbWMsb2Utb2ZmLW5zID0gPDU0PjsKLQkJZ3BtYyxhY2Nlc3MtbnMgPSA8NjQ+OwotCQlncG1jLHJkLWN5Y2xlLW5zID0gPDgyPjsKLQkJZ3BtYyx3ci1jeWNsZS1ucyA9IDw4Mj47Ci0JCWdwbWMsd3ItYWNjZXNzLW5zID0gPDQwPjsKLQkJZ3BtYyx3ci1kYXRhLW11eC1idXMtbnMgPSA8MD47Ci0KLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCi0JCXBhcnRpdGlvbkAwIHsKLQkJCWxhYmVsID0gIlNQTCI7Ci0JCQlyZWcgPSA8MCAweDEwMDAwMD47Ci0JCX07Ci0JCXBhcnRpdGlvbkA4MDAwMCB7Ci0JCQlsYWJlbCA9ICJVLUJvb3QiOwotCQkJcmVnID0gPDB4MTAwMDAwIDB4MTgwMDAwPjsKLQkJfTsKLQkJcGFydGl0aW9uQDFjMDAwMCB7Ci0JCQlsYWJlbCA9ICJFbnZpcm9ubWVudCI7Ci0JCQlyZWcgPSA8MHgyODAwMDAgMHgxMDAwMDA+OwotCQl9OwotCQlwYXJ0aXRpb25AMjgwMDAwIHsKLQkJCWxhYmVsID0gIktlcm5lbCI7Ci0JCQlyZWcgPSA8MHgzODAwMDAgMHgzMDAwMDA+OwotCQl9OwotCQlwYXJ0aXRpb25ANzgwMDAwIHsKLQkJCWxhYmVsID0gIkZpbGVzeXN0ZW0iOwotCQkJcmVnID0gPDB4NjgwMDAwIDB4MWY5ODAwMDA+OwotCQl9OwotCX07Ci0KLQlldGhlcm5ldEBncG1jIHsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZzbXNjOTIyMV9waW5zPjsKLQkJcmVnID0gPDUgMCAweGZmPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzY+OwotCQlpbnRlcnJ1cHRzID0gPDE2IElSUV9UWVBFX0xFVkVMX0xPVz47Ci0JfTsKLX07Ci0KLSZ1c2Joc2hvc3QgewotCXBvcnQxLW1vZGUgPSAiZWhjaS1waHkiOwotfTsKLQotJnVzYmhzZWhjaSB7Ci0JcGh5cyA9IDwmaHN1c2IxX3BoeT47Ci19OwotCi0mdnBsbDIgewotICAgICAgICAvKiBOZWVkZWQgZm9yIERTUyAqLwotICAgICAgICByZWd1bGF0b3ItbmFtZSA9ICJ2ZGRzX2RzaSI7Ci19OwotCi0mZHNzIHsKLQlzdGF0dXMgPSAib2siOwotCi0JcG9ydCB7Ci0JCWRwaV9vdXQ6IGVuZHBvaW50IHsKLQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdGZwNDEwX2luPjsKLQkJCWRhdGEtbGluZXMgPSA8MjQ+OwotCQl9OwotCX07CisJcGluY3RybC0wID0gPCZtbWMyX3BpbnMgJmxiZWUxdXNqeWNfcGlucz47CisJdm1tYy1zdXBwbHkgPSA8JmxiZWUxdXNqeWNfcGRuPjsKKwl2bW1jX2F1eC1zdXBwbHkgPSA8JmxiZWUxdXNqeWNfcmVzZXRfbl93PjsKKwlidXMtd2lkdGggPSA8ND47CisJbm9uLXJlbW92YWJsZTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC1jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDMwLWNvbW1vbi5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYjE1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC1jb21tb24uZHRzaQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29tbW9uIERldmljZSBUcmVlIFNvdXJjZSBmb3IgSUdFUCBDT00gTU9EVUxFCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEphdmllciBNYXJ0aW5leiBDYW5pbGxhcyA8amF2aWVyQGNvbGxhYm9yYS5jby51az4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBFbnJpYyBCYWxsZXRibyBpIFNlcnJhIDxlYmFsbGV0Ym9AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgIm9tYXAzLWlnZXAuZHRzaSIKKworLyB7CisJbGVkczogZ3Bpb19sZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCXVzZXIwIHsKKwkJCSBsYWJlbCA9ICJvbWFwMzpyZWQ6dXNlcjAiOworCQkJIGdwaW9zID0gPCZ0d2xfZ3BpbyAxOCBHUElPX0FDVElWRV9MT1c+OwkvKiBMRURBICovCisJCQkgZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCisJCXVzZXIxIHsKKwkJCSBsYWJlbCA9ICJvbWFwMzpncmVlbjp1c2VyMSI7CisJCQkgZ3Bpb3MgPSA8JnR3bF9ncGlvIDE5IEdQSU9fQUNUSVZFX0xPVz47CS8qIExFREIgKi8KKwkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCX07CisKKwkJdXNlcjIgeworCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMSI7CisJCQkgZ3Bpb3MgPSA8JmdwaW8xIDE2IEdQSU9fQUNUSVZFX0xPVz47CQkvKiBncGlvXzE2ICovCisJCQkgZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCX07Cit9OworCismb21hcDNfcG14X2NvcmUgeworCXVhcnQyX3BpbnM6IHBpbm11eF91YXJ0Ml9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2YywgUElOX0lOUFVUIHwgTVVYX01PREUxKQkvKiBtY2JzcDNfZHgudWFydDJfY3RzICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNmUsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTEpCS8qIG1jYnNwM19kci51YXJ0Ml9ydHMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3MCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMSkJLyogbWNic3AzX2Nsay51YXJ0Ml90eCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTcyLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTEpCS8qIG1jYnNwM19mc3gudWFydDJfcnggKi8KKwkJPjsKKwl9OworfTsKKworJm9tYXAzX3BteF9jb3JlMiB7CisJbGVkc19jb3JlMl9waW5zOiBwaW5tdXhfbGVkc19jb3JlMl9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogZXRrX2QyLmdwaW9fMTYgKi8KKwkJPjsKKwl9OworfTsKKworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMzAtcmV2LWcuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMzAtcmV2LWcuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMjZiMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC1yZXYtZy5kdHMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgSUdFUCBDT00gTU9EVUxFIFJldi4gRyAoVEkgT01BUCBBTS9ETTM3eCkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDE0IEVucmljIEJhbGxldGJvIGkgU2VycmEgPGViYWxsZXRib0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib21hcDMtaWdlcDAwMzAtY29tbW9uLmR0c2kiCisKKy8geworCW1vZGVsID0gIklHRVAgQ09NIE1PRFVMRSBSZXYuIEcgKFRJIE9NQVAgQU0vRE0zN3gpIjsKKwljb21wYXRpYmxlID0gImlzZWUsb21hcDMtaWdlcDAwMzAtcmV2LWciLCAidGksb21hcDM2eHgiLCAidGksb21hcDMiOworCisJLyogUmVndWxhdG9yIHRvIHRyaWdnZXIgdGhlIFdMX0VOIHNpZ25hbCBvZiB0aGUgV2lmaSBtb2R1bGUgKi8KKwlsYmVwNWNsd21jX3dsZW46IHJlZ3VsYXRvci1sYmVwNWNsd21jLXdsZW4geworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInJlZ3VsYXRvci1sYmVwNWNsd21jLXdsZW4iOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCWdwaW8gPSA8JmdwaW81IDExIEdQSU9fQUNUSVZFX0hJR0g+OwkJLyogZ3Bpb18xMzkgLSBXTF9FTiAqLworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJfTsKK307CisKKyZvbWFwM19wbXhfY29yZSB7CisJbGJlcDVjbHdtY19waW5zOiBwaW5tdXhfbGJlcDVjbHdtY19waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2NCwgUElOX0lOUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0NC5ncGlvXzEzNiAtIFdfSVJRICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNjYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ1LmdwaW9fMTM3IC0gQlRfRU4gKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2YSwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDcuZ3Bpb18xMzkgLSBXTF9FTiAqLworCQk+OworCX07CisKKwlsZWRzX3BpbnM6IHBpbm11eF9sZWRzX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWJlLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBpMmMyX3NjbC5ncGlvXzE2OCAqLworCQk+OworCX07CisKK307CisKKyZpMmMyIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmxlZHMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZsZWRzX3BpbnMgJmxlZHNfY29yZTJfcGlucz47CisKKwlib290IHsKKwkJbGFiZWwgPSAib21hcDM6Z3JlZW46Ym9vdCI7CisJCWdwaW9zID0gPCZncGlvNiA4IEdQSU9fQUNUSVZFX0hJR0g+OworCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKKwl9OworfTsKKworJm1tYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMyX3BpbnMgJmxiZXA1Y2x3bWNfcGlucz47CisJdm1tYy1zdXBwbHkgPSA8JmxiZXA1Y2x3bWNfd2xlbj47CisJYnVzLXdpZHRoID0gPDQ+OworCW5vbi1yZW1vdmFibGU7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMzAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMzAuZHRzCmluZGV4IDI3OTM3NDkuLjgxNTBmNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDMwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC5kdHMKQEAgLTEsNSArMSw1IEBACiAvKgotICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQIENPTSBNT0RVTEUgKFRJIE9NQVAgQU0vRE0zN3gpCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIElHRVAgQ09NIE1PRFVMRSBSZXYuIEUgKFRJIE9NQVAgQU0vRE0zN3gpCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEphdmllciBNYXJ0aW5leiBDYW5pbGxhcyA8amF2aWVyQGNvbGxhYm9yYS5jby51az4KICAqIENvcHlyaWdodCAoQykgMjAxMiBFbnJpYyBCYWxsZXRibyBpIFNlcnJhIDxlYmFsbGV0Ym9AZ21haWwuY29tPgpAQCAtOSw5NyArOSw2MiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgIm9tYXAzLWlnZXAuZHRzaSIKKyNpbmNsdWRlICJvbWFwMy1pZ2VwMDAzMC1jb21tb24uZHRzaSIKIAogLyB7Ci0JbW9kZWwgPSAiSUdFUCBDT00gTU9EVUxFIChUSSBPTUFQIEFNL0RNMzd4KSI7CisJbW9kZWwgPSAiSUdFUCBDT00gTU9EVUxFIFJldi4gRSAoVEkgT01BUCBBTS9ETTM3eCkiOwogCWNvbXBhdGlibGUgPSAiaXNlZSxvbWFwMy1pZ2VwMDAzMCIsICJ0aSxvbWFwMzZ4eCIsICJ0aSxvbWFwMyI7CiAKLQlsZWRzIHsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZsZWRzX3BpbnM+OwotCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJLyogUmVndWxhdG9yIHRvIHRyaWdnZXIgdGhlIFdJRklfUEROIHNpZ25hbCBvZiB0aGUgV2lmaSBtb2R1bGUgKi8KKwlsYmVlMXVzanljX3BkbjogbGJlZTF1c2p5Y19wZG4geworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInJlZ3VsYXRvci1sYmVlMXVzanljLXBkbiI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BpbzUgMTAgR1BJT19BQ1RJVkVfSElHSD47CS8qIGdwaW9fMTM4IC0gV0lGSV9QRE4gKi8KKwkJc3RhcnR1cC1kZWxheS11cyA9IDwxMDAwMD47CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwl9OwogCi0JCWJvb3QgewotCQkJIGxhYmVsID0gIm9tYXAzOmdyZWVuOmJvb3QiOwotCQkJIGdwaW9zID0gPCZ0d2xfZ3BpbyAxMyBHUElPX0FDVElWRV9MT1c+OwotCQkJIGRlZmF1bHQtc3RhdGUgPSAib24iOwotCQl9OwotCi0JCXVzZXIwIHsKLQkJCSBsYWJlbCA9ICJvbWFwMzpyZWQ6dXNlcjAiOwotCQkJIGdwaW9zID0gPCZ0d2xfZ3BpbyAxOCBHUElPX0FDVElWRV9MT1c+OyAvKiBMRURBICovCi0JCQkgZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOwotCQl9OwotCi0JCXVzZXIxIHsKLQkJCSBsYWJlbCA9ICJvbWFwMzpncmVlbjp1c2VyMSI7Ci0JCQkgZ3Bpb3MgPSA8JnR3bF9ncGlvIDE5IEdQSU9fQUNUSVZFX0xPVz47IC8qIExFREIgKi8KLQkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7Ci0JCX07Ci0KLQkJdXNlcjIgewotCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMSI7Ci0JCQkgZ3Bpb3MgPSA8JmdwaW8xIDE2IEdQSU9fQUNUSVZFX0xPVz47Ci0JCQkgZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOwotCQl9OworCS8qIFJlZ3VsYXRvciB0byB0cmlnZ2VyIHRoZSBSRVNFVF9OX1cgc2lnbmFsIG9mIHRoZSBXaWZpIG1vZHVsZSAqLworCWxiZWUxdXNqeWNfcmVzZXRfbl93OiBsYmVlMXVzanljX3Jlc2V0X25fdyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAicmVndWxhdG9yLWxiZWUxdXNqeWMtcmVzZXQtbi13IjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlncGlvID0gPCZncGlvNSAxMSBHUElPX0FDVElWRV9ISUdIPjsJLyogZ3Bpb18xMzkgLSBSRVNFVF9OX1cgKi8KKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOwogCX07CiB9OwogCi0mb21hcDNfcG14X2NvcmUyIHsKLQlsZWRzX3BpbnM6IHBpbm11eF9sZWRzX3BpbnMgeworJm9tYXAzX3BteF9jb3JlIHsKKwlsYmVlMXVzanljX3BpbnM6IHBpbm11eF9sYmVlMXVzanljX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWUwLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KSAvKiBldGtfZDIuZ3Bpb18xNiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTY2LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0NS5ncGlvXzEzNyAtIFJFU0VUX05fVyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTY4LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0Ni5ncGlvXzEzOCAtIFdJRklfUEROICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNmEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ3LmdwaW9fMTM5IC0gUlNUX05fQiAqLwogCQk+OwogCX07CiB9OwogCi0mZ3BtYyB7Ci0JcmFuZ2VzID0gPDAgMCAweDAwMDAwMDAwIDB4MjAwMDAwMDA+OworJmxlZHMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZsZWRzX2NvcmUyX3BpbnM+OwogCi0JbmFuZEAwLDAgewotCQlsaW51eCxtdGQtbmFtZT0gIm1pY3JvbixtdDI5YzRnOTZtYXoiOwotCQlyZWcgPSA8MCAwIDA+OwotCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47Ci0JCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKLQotCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OwotCQlncG1jLGNzLW9uLW5zID0gPDA+OwotCQlncG1jLGNzLXJkLW9mZi1ucyA9IDw0ND47Ci0JCWdwbWMsY3Mtd3Itb2ZmLW5zID0gPDQ0PjsKLQkJZ3BtYyxhZHYtb24tbnMgPSA8Nj47Ci0JCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDwzND47Ci0JCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw0ND47Ci0JCWdwbWMsd2Utb2ZmLW5zID0gPDQwPjsKLQkJZ3BtYyxvZS1vZmYtbnMgPSA8NTQ+OwotCQlncG1jLGFjY2Vzcy1ucyA9IDw2ND47Ci0JCWdwbWMscmQtY3ljbGUtbnMgPSA8ODI+OwotCQlncG1jLHdyLWN5Y2xlLW5zID0gPDgyPjsKLQkJZ3BtYyx3ci1hY2Nlc3MtbnMgPSA8NDA+OwotCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDwwPjsKLQotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0KLQkJcGFydGl0aW9uQDAgewotCQkJbGFiZWwgPSAiU1BMIjsKLQkJCXJlZyA9IDwwIDB4MTAwMDAwPjsKLQkJfTsKLQkJcGFydGl0aW9uQDgwMDAwIHsKLQkJCWxhYmVsID0gIlUtQm9vdCI7Ci0JCQlyZWcgPSA8MHgxMDAwMDAgMHgxODAwMDA+OwotCQl9OwotCQlwYXJ0aXRpb25AMWMwMDAwIHsKLQkJCWxhYmVsID0gIkVudmlyb25tZW50IjsKLQkJCXJlZyA9IDwweDI4MDAwMCAweDEwMDAwMD47Ci0JCX07Ci0JCXBhcnRpdGlvbkAyODAwMDAgewotCQkJbGFiZWwgPSAiS2VybmVsIjsKLQkJCXJlZyA9IDwweDM4MDAwMCAweDMwMDAwMD47Ci0JCX07Ci0JCXBhcnRpdGlvbkA3ODAwMDAgewotCQkJbGFiZWwgPSAiRmlsZXN5c3RlbSI7Ci0JCQlyZWcgPSA8MHg2ODAwMDAgMHgxZjk4MDAwMD47Ci0JCX07CisJYm9vdCB7CisJCWxhYmVsID0gIm9tYXAzOmdyZWVuOmJvb3QiOworCQlncGlvcyA9IDwmdHdsX2dwaW8gMTMgR1BJT19BQ1RJVkVfTE9XPjsJLyogTEVEU1lOQyAqLworCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKIAl9OwogfTsKKworLyogT24gYm9hcmQgV2lmaSBtb2R1bGUgKi8KKyZtbWMyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbW1jMl9waW5zICZsYmVlMXVzanljX3BpbnM+OworCXZtbWMtc3VwcGx5ID0gPCZsYmVlMXVzanljX3Bkbj47CisJdm1tY19hdXgtc3VwcGx5ID0gPCZsYmVlMXVzanljX3Jlc2V0X25fdz47CisJYnVzLXdpZHRoID0gPDQ+OworCW5vbi1yZW1vdmFibGU7Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1sZHAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGRwLmR0cwppbmRleCA3MmRjYTBiLi5iNjk5YmM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1sZHAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxkcC5kdHMKQEAgLTcsNiArNyw3IEBACiAgKi8KIC9kdHMtdjEvOwogCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KICNpbmNsdWRlICJvbWFwMzR4eC5kdHNpIgogI2luY2x1ZGUgIm9tYXAtZ3BtYy1zbXNjOTExeC5kdHNpIgogCkBAIC0xMDEsOCArMTAyLDkgQEAKIAogCW5hbmRAMCwwIHsKIAkJbGludXgsbXRkLW5hbWU9ICJtaWNyb24sbmFuZCI7Ci0JCXJlZyA9IDwwIDAgMD47CisJCXJlZyA9IDwwIDAgND47CS8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDI+OwogCQl0aSxuYW5kLWVjYy1vcHQgPSAiYmNoOCI7CiAKIAkJZ3BtYyxzeW5jLWNsay1wcyA9IDwwPjsKQEAgLTE0MSw3ICsxNDMsNyBAQAogCQl9OwogCQlwYXJ0aXRpb25AMjAwMDAwMCB7CiAJCQlsYWJlbCA9ICJGaWxlc3lzdGVtIjsKLQkJCXJlZyA9IDwweDIwMDAwMDAgMHhlMDAwMDAwPjsKKwkJCXJlZyA9IDwweDIwMDAwMDAgMHg2MDAwMDAwPjsKIAkJfTsKIAl9OwogCkBAIC0yNjMsNiArMjY1LDI2IEBACiAJfTsKIH07CiAKKyZ0d2xfa2V5cGFkIHsKKwlsaW51eCxrZXltYXAgPSA8TUFUUklYX0tFWSgwLCAwLCBLRVlfMSkKKwkJCU1BVFJJWF9LRVkoMCwgMSwgS0VZXzIpCisJCQlNQVRSSVhfS0VZKDAsIDIsIEtFWV8zKQorCQkJTUFUUklYX0tFWSgxLCAwLCBLRVlfNCkKKwkJCU1BVFJJWF9LRVkoMSwgMSwgS0VZXzUpCisJCQlNQVRSSVhfS0VZKDEsIDIsIEtFWV82KQorCQkJTUFUUklYX0tFWSgxLCAzLCBLRVlfRjUpCisJCQlNQVRSSVhfS0VZKDIsIDAsIEtFWV83KQorCQkJTUFUUklYX0tFWSgyLCAxLCBLRVlfOCkKKwkJCU1BVFJJWF9LRVkoMiwgMiwgS0VZXzkpCisJCQlNQVRSSVhfS0VZKDIsIDMsIEtFWV9GNikKKwkJCU1BVFJJWF9LRVkoMywgMCwgS0VZX0Y3KQorCQkJTUFUUklYX0tFWSgzLCAxLCBLRVlfMCkKKwkJCU1BVFJJWF9LRVkoMywgMiwgS0VZX0Y4KQorCQkJTUFUUklYX0tFWSg1LCA0LCBLRVlfUkVTRVJWRUQpCisJCQlNQVRSSVhfS0VZKDQsIDQsIEtFWV9WT0xVTUVVUCkKKwkJCU1BVFJJWF9LRVkoNSwgNSwgS0VZX1ZPTFVNRURPV04pPjsKK307CisKICZ1YXJ0MyB7CiAJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmaW50YyA3NCAmb21hcDNfcG14X2NvcmUgT01BUDNfVUFSVDNfUlg+OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxpbGx5LWE4M3guZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxpbGx5LWE4M3guZHRzaQppbmRleCBkOTczMDg4Li5lODFmYjY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1saWxseS1hODN4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGlsbHktYTgzeC5kdHNpCkBAIC0zNjMsNyArMzYzLDcgQEAKIAkJPDcgMCAweDE1MDAwMDAwIDB4MDEwMDAwMDA+OwogCiAJbmFuZEAwLDAgewotCQlyZWcgPSA8MCAwIDB4MTAwMDAwMD47CisJCXJlZyA9IDwwIDAgND47CS8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47CiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKIAkJLyogbm8gZWxtIG9uIG9tYXAzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTAwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45MDAuZHRzCmluZGV4IGJjODJhMTIuLjUzZjNjYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45MDAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45MDAuZHRzCkBAIC0xMTUsNiArMTE1LDEyIEBACiAJCWVjaS1zd2l0Y2gtZ3Bpb3MgPSA8JmdwaW82IDIyIEdQSU9fQUNUSVZFX0hJR0g+OyAvKiAxODIgKi8KIAkJc3BlYWtlci1hbXBsaWZpZXItZ3Bpb3MgPSA8JnR3bF9ncGlvIDcgR1BJT19BQ1RJVkVfSElHSD47CiAJfTsKKworCWJhdHRlcnk6IG45MDAtYmF0dGVyeSB7CisJCWNvbXBhdGlibGUgPSAibm9raWEsbjkwMC1iYXR0ZXJ5IjsKKwkJaW8tY2hhbm5lbHMgPSA8JnR3bF9tYWRjIDA+LCA8JnR3bF9tYWRjIDQ+LCA8JnR3bF9tYWRjIDEyPjsKKwkJaW8tY2hhbm5lbC1uYW1lcyA9ICJ0ZW1wIiwgImJzaSIsICJ2YmF0IjsKKwl9OwogfTsKIAogJm9tYXAzX3BteF9jb3JlIHsKQEAgLTE0Miw2ICsxNDgsMzMgQEAKIAkJPjsKIAl9OwogCisJZ3BtY19waW5zOiBwaW5tdXhfZ3BtY19waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKworCQkJLyogYWRkcmVzcyBsaW5lcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMDdhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgICAgICAvKiBncG1jX2ExLmdwbWNfYTEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjA3YywgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAgICAgLyogZ3BtY19hMi5ncG1jX2EyICovCisgICAgICAgICAgICAgICAgICAgICAgICBPTUFQM19DT1JFMV9JT1BBRCgweDIwN2UsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgICAgIC8qIGdwbWNfYTMuZ3BtY19hMyAqLworCisJCQkvKiBkYXRhIGxpbmVzLCBncG1jX2QwLi5kNyBub3QgbXV4YWJsZSBhY2NvcmRpbmcgdG8gVFJNICovCisgICAgICAgICAgICAgICAgICAgICAgICBPTUFQM19DT1JFMV9JT1BBRCgweDIwOWUsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkgICAgICAgIC8qIGdwbWNfZDguZ3BtY19kOCAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGEwLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2Q5LmdwbWNfZDkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjBhMiwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgICAgICAgLyogZ3BtY19kMTAuZ3BtY19kMTAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjBhNCwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgICAgICAgLyogZ3BtY19kMTEuZ3BtY19kMTEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjBhNiwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgICAgICAgLyogZ3BtY19kMTIuZ3BtY19kMTIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjBhOCwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgICAgICAgLyogZ3BtY19kMTMuZ3BtY19kMTMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjBhYSwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgICAgICAgLyogZ3BtY19kMTQuZ3BtY19kMTQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjBhYywgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgICAgICAgLyogZ3BtY19kMTUuZ3BtY19kMTUgKi8KKworCQkJLyoKKwkJCSAqIGdwbWNfbmNzMCwgZ3BtY19uYWR2X2FsZSwgZ3BtY19ub2UsIGdwbWNfbndlLCBncG1jX3dhaXQwIG5vdCBtdXhhYmxlCisJCQkgKiBhY2NvcmRpbmcgdG8gVFJNLiBPbmVOQU5EIHNlZW1zIHRvIHJlcXVpcmUgUElOX0lOUFVUIG9uIGNsb2NrLgorCQkJICovCisgICAgICAgICAgICAgICAgICAgICAgICBPTUFQM19DT1JFMV9JT1BBRCgweDIwYjAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgICAgIC8qIGdwbWNfbmNzMS5ncG1jX25jczEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjBiZSwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgICAgICAgLyogZ3BtY19jbGsuZ3BtY19jbGsgKi8KKwkJPjsKKwl9OworCiAJaTJjMV9waW5zOiBwaW5tdXhfaTJjMV9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKIAkJCTB4MThhIChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiBpMmMxX3NjbCAqLwpAQCAtNTQwLDYgKzU3MywxNiBAQAogCQlwb3dlci1ncGlvID0gPCZncGlvNCAyIEdQSU9fQUNUSVZFX0hJR0g+OyAvKiA5OCAqLwogCX07CiAKKwlzaTQ3MTM6IHNpNDcxM0A2MyB7CisJCWNvbXBhdGlibGUgPSAic2lsYWJzLHNpNDcxMyI7CisgICAgICAgICAgICAgICAgcmVnID0gPDB4NjM+OworCisgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmZ3BpbzIgMjEgSVJRX1RZUEVfRURHRV9GQUxMSU5HPjsgLyogNTMgKi8KKyAgICAgICAgICAgICAgICByZXNldC1ncGlvcyA9IDwmZ3BpbzYgMyBHUElPX0FDVElWRV9ISUdIPjsgLyogMTYzICovCisgICAgICAgICAgICAgICAgdmlvLXN1cHBseSA9IDwmdmlvPjsKKyAgICAgICAgICAgICAgICB2ZGQtc3VwcGx5ID0gPCZ2YXV4MT47CisJfTsKKwogCWJxMjQxNTBhOiBicTI0MTUwYUA2YiB7CiAJCWNvbXBhdGlibGUgPSAidGksYnEyNDE1MGEiOwogCQlyZWcgPSA8MHg2Yj47CkBAIC01ODUsMTYgKzYyOCwxNiBAQAogfTsKIAogJmdwbWMgewotCXJhbmdlcyA9IDwwIDAgMHgwNDAwMDAwMCAweDEwMDAwMDAwPjsgLyogMjU2TUIgKi8KIAlyYW5nZXMgPSA8MCAwIDB4MDEwMDAwMDAgMHgwMTAwMDAwMD4sCS8qIDE2IE1CIGZvciBPbmVOQU5EICovCiAJCSA8MSAwIDB4MDIwMDAwMDAgMHgwMTAwMDAwMD47CS8qIDE2IE1CIGZvciBzbWM5MWM5NiAqLworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZncG1jX3BpbnM+OwogCi0JLyogZ3Bpby1pcnEgZm9yIGRtYTogNjUgKi8KLQorCS8qIHN5c19uZG1hcmVxMSBjb3VsZCBiZSB1c2VkIGJ5IHRoZSBkcml2ZXIsIG5vdCBhcyBncGlvNjUgdGhvdWdoICovCiAJb25lbmFuZEAwLDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJlZyA9IDwwIDAgMHgxMDAwMDAwMD47CisJCXJlZyA9IDwwIDAgMHgyMDAwMD47CS8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgMTI4SyAqLwogCiAJCWdwbWMsc3luYy1yZWFkOwogCQlncG1jLHN5bmMtd3JpdGU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTUwLW45LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTUwLW45LmR0c2kKaW5kZXggNzBhZGRjYi4uMWU0OWRmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjk1MC1uOS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45NTAtbjkuZHRzaQpAQCAtMTE1LDEyICsxMTUsMTIgQEAKIH07CiAKICZncG1jIHsKLQlyYW5nZXMgPSA8MCAwIDB4MDQwMDAwMDAgMHgyMDAwMDAwMD47CisJcmFuZ2VzID0gPDAgMCAweDA0MDAwMDAwIDB4MTAwMDAwMD47CS8qIENTMDogMTZNQiBmb3IgT25lTkFORCAqLwogCiAJb25lbmFuZEAwLDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJlZyA9IDwwIDAgMHgyMDAwMDAwMD47CisJCXJlZyA9IDwwIDAgMHgyMDAwMD47CS8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgMTI4SyAqLwogCiAJCWdwbWMsc3luYy1yZWFkOwogCQlncG1jLHN5bmMtd3JpdGU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYi10MzUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiLXQzNS5kdHNpCmluZGV4IGQ1OWUzZGUuLjgyN2Y2MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiLXQzNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiLXQzNS5kdHNpCkBAIC0yLDYgKzIsNTkgQEAKICAqIENvbW1vbiBzdXBwb3J0IGZvciBDb21wdUxhYiBTQi1UMzUgdXNlZCBvbiBTQkMtVDM1MzAsIFNCQy1UMzUxNyBhbmQgU0JDLVQzNzMwCiAgKi8KIAorLyB7CisJdGZwNDEwOiBlbmNvZGVyQDAgeworCQljb21wYXRpYmxlID0gInRpLHRmcDQxMCI7CisKKwkJcG93ZXJkb3duLWdwaW9zID0gPCZncGlvMiAyMiBHUElPX0FDVElWRV9MT1c+OyAgLyogZ3Bpb181NCAqLworCisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdGZwNDEwX3BpbnM+OworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCisJCQkJdGZwNDEwX2luOiBlbmRwb2ludEAwIHsKKwkJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZkcGlfb3V0PjsKKwkJCQl9OworCQkJfTsKKworCQkJcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisKKwkJCQl0ZnA0MTBfb3V0OiBlbmRwb2ludEAwIHsKKwkJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZkdmlfY29ubmVjdG9yX2luPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCisJZHZpMDogY29ubmVjdG9yQDAgeworCQljb21wYXRpYmxlID0gImR2aS1jb25uZWN0b3IiOworCQlsYWJlbCA9ICJkdmkiOworCisJCXBvcnQgeworCQkJZHZpX2Nvbm5lY3Rvcl9pbjogZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdGZwNDEwX291dD47CisJCQl9OworCQl9OworCX07CisKKwlhdWRpb19hbXA6IGF1ZGlvX2FtcCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiYXVkaW9fYW1wIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZzYl90MzVfYXVkaW9fYW1wPjsKKwkJZ3BpbyA9IDwmZ3BpbzIgMjkgR1BJT19BQ1RJVkVfTE9XPjsgICAvKiBncGlvXzYxICovCisJCWVuYWJsZS1hY3RpdmUtbG93OworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCX07Cit9OworCiAmb21hcDNfcG14X2NvcmUgewogCXNtc2MyX3BpbnM6IHBpbm11eF9zbXNjMl9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKQEAgLTksNiArNjIsMzggQEAKIAkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkMiwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFNCkJLyogZ3BtY193YWl0My5ncGlvXzY1ICovCiAJCT47CiAJfTsKKworCXRmcDQxMF9waW5zOiBwaW5tdXhfdGZwNDEwX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGI0LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBncG1jX25jczMuZ3Bpb181NCAqLworCQk+OworCX07CisKKwlpMmMzX3BpbnM6IHBpbm11eF9pMmMzX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWMyLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBpMmMzX3NjbCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWM0LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBpMmMzX3NkYSAqLworCQk+OworCX07CisKKwlzYl90MzVfYXVkaW9fYW1wOiBwaW5tdXhfc2JfdDM1X2F1ZGlvX2FtcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwYzgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpIC8qIGdwbWNfbmJlMS5ncGlvXzYxICovCisJCT47CisJfTsKK307CisKKyZpMmMzIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjM19waW5zPjsKKworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJYXQyNEA1MCB7CisJCWNvbXBhdGlibGUgPSAiYXQyNCwyNGMwMiI7CisJCXBhZ2VzaXplID0gPDE2PjsKKwkJcmVnID0gPDB4NTA+OworCX07CiB9OwogCiAmZ3BtYyB7CkBAIC0yMiwyNCArMTA3LDI5IEBACiAJCWludGVycnVwdHMgPSA8MSBJUlFfVFlQRV9MRVZFTF9MT1c+OwogCQlyZWcgPSA8NCAwIDB4ZmY+OwogCQliYW5rLXdpZHRoID0gPDI+OwotCQlncG1jLG11eC1hZGQtZGF0YTsKLQkJZ3BtYyxjcy1vbi1ucyA9IDwxPjsKLQkJZ3BtYyxjcy1yZC1vZmYtbnMgPSA8MTgwPjsKLQkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8MTgwPjsKLQkJZ3BtYyxhZHYtcmQtb2ZmLW5zID0gPDE4PjsKLQkJZ3BtYyxhZHYtd3Itb2ZmLW5zID0gPDQ4PjsKLQkJZ3BtYyxvZS1vbi1ucyA9IDw1ND47Ci0JCWdwbWMsb2Utb2ZmLW5zID0gPDE2OD47Ci0JCWdwbWMsd2Utb24tbnMgPSA8NTQ+OwotCQlncG1jLHdlLW9mZi1ucyA9IDwxNjg+OwotCQlncG1jLHJkLWN5Y2xlLW5zID0gPDE4Nj47Ci0JCWdwbWMsd3ItY3ljbGUtbnMgPSA8MTg2PjsKLQkJZ3BtYyxhY2Nlc3MtbnMgPSA8MTQ0PjsKLQkJZ3BtYyxwYWdlLWJ1cnN0LWFjY2Vzcy1ucyA9IDwyND47Ci0JCWdwbWMsYnVzLXR1cm5hcm91bmQtbnMgPSA8OTA+OwotCQlncG1jLGN5Y2xlMmN5Y2xlLWRlbGF5LW5zID0gPDkwPjsKLQkJZ3BtYyxjeWNsZTJjeWNsZS1zYW1lY3NlbjsKLQkJZ3BtYyxjeWNsZTJjeWNsZS1kaWZmY3NlbjsKKwkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8MT47CisJCWdwbWMsY3ljbGUyY3ljbGUtc2FtZWNzZW4gPSA8MT47CisJCWdwbWMsY3ljbGUyY3ljbGUtZGlmZmNzZW4gPSA8MT47CisJCWdwbWMsY3Mtb24tbnMgPSA8NT47CisJCWdwbWMsY3MtcmQtb2ZmLW5zID0gPDE1MD47CisJCWdwbWMsY3Mtd3Itb2ZmLW5zID0gPDE1MD47CisJCWdwbWMsYWR2LW9uLW5zID0gPDA+OworCQlncG1jLGFkdi1yZC1vZmYtbnMgPSA8MTU+OworCQlncG1jLGFkdi13ci1vZmYtbnMgPSA8NDA+OworCQlncG1jLG9lLW9uLW5zID0gPDQ1PjsKKwkJZ3BtYyxvZS1vZmYtbnMgPSA8MTQwPjsKKwkJZ3BtYyx3ZS1vbi1ucyA9IDw0NT47CisJCWdwbWMsd2Utb2ZmLW5zID0gPDE0MD47CisJCWdwbWMscmQtY3ljbGUtbnMgPSA8MTU1PjsKKwkJZ3BtYyx3ci1jeWNsZS1ucyA9IDwxNTU+OworCQlncG1jLGFjY2Vzcy1ucyA9IDwxMjA+OworCQlncG1jLHBhZ2UtYnVyc3QtYWNjZXNzLW5zID0gPDIwPjsKKwkJZ3BtYyxidXMtdHVybmFyb3VuZC1ucyA9IDw3NT47CisJCWdwbWMsY3ljbGUyY3ljbGUtZGVsYXktbnMgPSA8NzU+OworCQlncG1jLHdhaXQtbW9uaXRvcmluZy1ucyA9IDwwPjsKKwkJZ3BtYyxjbGstYWN0aXZhdGlvbi1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1kYXRhLW11eC1idXMtbnMgPSA8MD47CisJCWdwbWMsd3ItYWNjZXNzLW5zID0gPDA+OwogCQl2ZGR2YXJpby1zdXBwbHkgPSA8JnZkZHZhcmlvPjsKIAkJdmRkMzNhLXN1cHBseSA9IDwmdmRkMzNhPjsKIAkJcmVnLWlvLXdpZHRoID0gPDQ+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNTE3LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiYy10MzUxNy5kdHMKaW5kZXggNDIxODliNi4uMTc5ODY1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNTE3LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM1MTcuZHRzCkBAIC05LDYgKzksMTEgQEAKIAltb2RlbCA9ICJDb21wdUxhYiBTQkMtVDM1MTcgd2l0aCBDTS1UMzUxNyI7CiAJY29tcGF0aWJsZSA9ICJjb21wdWxhYixvbWFwMy1zYmMtdDM1MTciLCAiY29tcHVsYWIsb21hcDMtY20tdDM1MTciLCAidGksYW0zNTE3IiwgInRpLG9tYXAzIjsKIAorCWFsaWFzZXMgeworCQlkaXNwbGF5MCA9ICZkdmkwOworCQlkaXNwbGF5MSA9ICZ0djA7CisJfTsKKwogCS8qIE9ubHkgb25lIEdQTUMgc21zYzkyMjAgb24gU0JDLVQzNTE3LCBDTS1UMzUxNyB1c2VzIGFtMzV4IEV0aGVybmV0ICovCiAJdmRkdmFyaW86IHJlZ3VsYXRvci12ZGR2YXJpby1zYi10MzUgewogCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CkBAIC01NCwzICs1OSwxMyBAQAogCXdwLWdwaW9zID0gIDwmZ3BpbzIgMjcgR1BJT19BQ1RJVkVfSElHSD47IC8qIGdwaW9fNTkgICovCiAJY2QtZ3Bpb3MgPSAgPCZncGlvNSAxNiBHUElPX0FDVElWRV9ISUdIPjsgLyogZ3Bpb18xNDQgKi8KIH07CisKKyZkc3MgeworCXBvcnQgeworCQlkcGlfb3V0OiBlbmRwb2ludCB7CisJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnRmcDQxMF9pbj47CisJCQlkYXRhLWxpbmVzID0gPDI0PjsKKwkJfTsKKwl9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNTMwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiYy10MzUzMC5kdHMKaW5kZXggYmJiZWVhNi4uYzk5NGYwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNTMwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM1MzAuZHRzCkBAIC04LDYgKzgsMTEgQEAKIC8gewogCW1vZGVsID0gIkNvbXB1TGFiIFNCQy1UMzUzMCB3aXRoIENNLVQzNTMwIjsKIAljb21wYXRpYmxlID0gImNvbXB1bGFiLG9tYXAzLXNiYy10MzUzMCIsICJjb21wdWxhYixvbWFwMy1jbS10MzUzMCIsICJ0aSxvbWFwMzR4eCIsICJ0aSxvbWFwMyI7CisKKwlhbGlhc2VzIHsKKwkJZGlzcGxheTAgPSAmZHZpMDsKKwkJZGlzcGxheTEgPSAmdHYwOworCX07CiB9OwogCiAmb21hcDNfcG14X2NvcmUgewpAQCAtMzQsMyArMzksMTMgQEAKICZtbWMxIHsKIAljZC1ncGlvcyA9ICA8JnR3bF9ncGlvIDAgR1BJT19BQ1RJVkVfSElHSD47CiB9OworCismZHNzIHsKKwlwb3J0IHsKKwkJZHBpX291dDogZW5kcG9pbnQgeworCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfaW4+OworCQkJZGF0YS1saW5lcyA9IDwyND47CisJCX07CisJfTsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiYy10MzczMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM3MzAuZHRzCmluZGV4IDA4ZTRhNzAuLjViZGRkZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiYy10MzczMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNzMwLmR0cwpAQCAtOCw2ICs4LDExIEBACiAvIHsKIAltb2RlbCA9ICJDb21wdUxhYiBTQkMtVDM3MzAgd2l0aCBDTS1UMzczMCI7CiAJY29tcGF0aWJsZSA9ICJjb21wdWxhYixvbWFwMy1zYmMtdDM3MzAiLCAiY29tcHVsYWIsb21hcDMtY20tdDM3MzAiLCAidGksb21hcDM2eHgiLCAidGksb21hcDMiOworCisJYWxpYXNlcyB7CisJCWRpc3BsYXkwID0gJmR2aTA7CisJCWRpc3BsYXkxID0gJnR2MDsKKwl9OwogfTsKIAogJm9tYXAzX3BteF9jb3JlIHsKQEAgLTI1LDMgKzMwLDEzIEBACiAJcmFuZ2VzID0gPDUgMCAweDJjMDAwMDAwIDB4MDEwMDAwMDA+LAogCQkgPDQgMCAweDJkMDAwMDAwIDB4MDEwMDAwMDA+OwogfTsKKworJmRzcyB7CisJcG9ydCB7CisJCWRwaV9vdXQ6IGVuZHBvaW50IHsKKwkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdGZwNDEwX2luPjsKKwkJCWRhdGEtbGluZXMgPSA8MjQ+OworCQl9OworCX07Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy10YW8zNTMwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy10YW8zNTMwLmR0c2kKaW5kZXggYjMwZjM4Ny4uZTg5ODIwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtdGFvMzUzMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXRhbzM1MzAuZHRzaQpAQCAtMjcwLDcgKzI3MCw3IEBACiAJcmFuZ2VzID0gPDAgMCAweDAwMDAwMDAwIDB4MDEwMDAwMDA+OwogCiAJbmFuZEAwLDAgewotCQlyZWcgPSA8MCAwIDA+OyAvKiBDUzAsIG9mZnNldCAwICovCisJCXJlZyA9IDwwIDAgND47IC8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47CiAJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDI+OwkvKiBHUE1DX0RFVldJRFRIXzE2QklUICovCiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJzdyI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMuZHRzaQppbmRleCBkMGU4ODRkLi4wMWI3MTExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLmR0c2kKQEAgLTc5LDcgKzc5LDcgQEAKIAkgKiBoaWVyYXJjaHkuCiAJICovCiAJb2NwIHsKLQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1sMy1zbXgiLCAic2ltcGxlLWJ1cyI7CiAJCXJlZyA9IDwweDY4MDAwMDAwIDB4MTAwMDA+OwogCQlpbnRlcnJ1cHRzID0gPDkgMTA+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTMzMiw2ICszMzIsNyBAQAogCQkJdGksaHdtb2RzID0gIm1haWxib3giOwogCQkJcmVnID0gPDB4NDgwOTQwMDAgMHgyMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyNj47CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDI+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8Mj47CiAJCQltYm94X2RzcDogZHNwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzNDMwLXNkcC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMzQzMC1zZHAuZHRzCmluZGV4IDliYWQ5NGUuLjE2YjBjZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzNDMwLXNkcC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDM0MzAtc2RwLmR0cwpAQCAtNTEsOCArNTEsOCBAQAogCiAmZ3BtYyB7CiAJcmFuZ2VzID0gPDAgMCAweDEwMDAwMDAwIDB4MDgwMDAwMDA+LAotCQkgPDEgMCAweDI4MDAwMDAwIDB4MDgwMDAwMDA+LAotCQkgPDIgMCAweDIwMDAwMDAwIDB4MTAwMDAwMDA+OworCQkgPDEgMCAweDI4MDAwMDAwIDB4MTAwMDAwMD4sCS8qIENTMTogMTZNQiBmb3IgTkFORCAqLworCQkgPDIgMCAweDIwMDAwMDAwIDB4MTAwMDAwMD47CS8qIENTMjogMTZNQiBmb3IgT25lTkFORCAqLwogCiAJbm9yQDAsMCB7CiAJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCQlsaW51eCxtdGQtbmFtZT0gIm1pY3JvbixtdDI5ZjFnMDhhYmIiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJlZyA9IDwxIDAgMHgwODAwMDAwMD47CisJCXJlZyA9IDwxIDAgND47CS8qIENTMSwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCQl0aSxuYW5kLWVjYy1vcHQgPSAic3ciOwogCQluYW5kLWJ1cy13aWR0aCA9IDw4PjsKIAkJZ3BtYyxjcy1vbi1ucyA9IDwwPjsKQEAgLTE1MCw3ICsxNTAsNyBAQAogCQlsaW51eCxtdGQtbmFtZT0gInNhbXN1bmcsa2ZtMmcxNnEybS1kZWI4IjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwotCQlyZWcgPSA8MiAwIDB4MTAwMDAwMDA+OworCQlyZWcgPSA8MiAwIDB4MjAwMDA+OwkvKiBDUzIsIG9mZnNldCAwLCBJTyBzaXplIDQgKi8KIAogCQlncG1jLGRldmljZS13aWR0aCA9IDwyPjsKIAkJZ3BtYyxtdXgtYWRkLWRhdGEgPSA8Mj47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1kdW92ZXJvLXBhcmxvci5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1kdW92ZXJvLXBhcmxvci5kdHMKaW5kZXggNmRjODRkOS4uMWE3OGYwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtZHVvdmVyby1wYXJsb3IuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LWR1b3Zlcm8tcGFybG9yLmR0cwpAQCAtMTc3LDYgKzE3Nyw3IEBACiAKICZoZG1pIHsKIAlzdGF0dXMgPSAib2siOworCXZkZGEtc3VwcGx5ID0gPCZ2ZGFjPjsKIAogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZkc3NfaGRtaV9waW5zPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC5kdHNpCmluZGV4IDg3OGM5NzkuLjA3NDE0N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQuZHRzaQpAQCAtNjYxLDYgKzY2MSw3IEBACiAJCQlyZWcgPSA8MHg0YTBmNDAwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDM+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8OD47CiAJCQltYm94X2lwdTogbWJveF9pcHUgewpAQCAtODk1LDcgKzg5Niw3IEBACiAJCQkJcmVnID0gPDB4NTgwMDIwMDAgMHgxMDAwPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJCXRpLGh3bW9kcyA9ICJkc3NfcmZiaSI7Ci0JCQkJY2xvY2tzID0gPCZkc3NfZHNzX2Nsaz4sIDwmZHNzX2Zjaz47CisJCQkJY2xvY2tzID0gPCZkc3NfZHNzX2Nsaz4sIDwmbDNfZGl2X2NrPjsKIAkJCQljbG9jay1uYW1lcyA9ICJmY2siLCAiaWNrIjsKIAkJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0NHh4LWNsb2Nrcy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQ0eHgtY2xvY2tzLmR0c2kKaW5kZXggYzgyMWZmNS4uZjJjNDhmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQ0eHgtY2xvY2tzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQ0eHgtY2xvY2tzLmR0c2kKQEAgLTEwMTgsMTQgKzEwMTgsNiBAQAogCQlyZWcgPSA8MHgxMTIwPjsKIAl9OwogCi0JZHNzX2ZjazogZHNzX2ZjayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsM19kaXZfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MT47Ci0JCXJlZyA9IDwweDExMjA+OwotCX07Ci0KIAlmZGlmX2ZjazogZmRpZl9mY2sgewogCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDUuZHRzaQppbmRleCAyNTZiN2Y2Li5iMzIxZmRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1LmR0c2kKQEAgLTY1MSw2ICs2NTEsNyBAQAogCQkJcmVnID0gPDB4NGEwZjQwMDAgMHgyMDA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3giOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDwzPjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDg+OwogCQkJbWJveF9pcHU6IG1ib3hfaXB1IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ByaW1hMi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcHJpbWEyLmR0c2kKaW5kZXggOTYzYjdlNS4uMWNhMWE5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcHJpbWEyLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcHJpbWEyLmR0c2kKQEAgLTQxLDYgKzQxLDExIEBACiAJCX07CiAJfTsKIAorCWFybS1wbXUgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktcG11IjsKKwkJaW50ZXJydXB0cyA9IDwyOT47CisJfTsKKwogCWF4aSB7CiAJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMTMyLDYgKzEzNyw3IEBACiAJCQkJcmVnID0gPDB4OTAwMjAwMDAgMHgxMDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwzMT47CiAJCQkJY2xvY2tzID0gPCZjbGtzIDM1PjsKKwkJCQlyZXNldHMgPSA8JnJzdGMgNj47CiAJCQl9OwogCQl9OwogCkBAIC0xNzMsNiArMTc5LDcgQEAKIAkJCQljb21wYXRpYmxlID0gInNpcmYscHJpbWEyLWRzcGlmIjsKIAkJCQlyZWcgPSA8MHhhODAwMDAwMCAweDEwMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDk+OworCQkJCXJlc2V0cyA9IDwmcnN0YyAxPjsKIAkJCX07CiAKIAkJCWdwc0BhODAxMDAwMCB7CkBAIC0xODAsNiArMTg3LDcgQEAKIAkJCQlyZWcgPSA8MHhhODAxMDAwMCAweDEwMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDc+OwogCQkJCWNsb2NrcyA9IDwmY2xrcyA5PjsKKwkJCQlyZXNldHMgPSA8JnJzdGMgMj47CiAJCQl9OwogCiAJCQlkc3BAYTkwMDAwMDAgewpAQCAtMTg3LDYgKzE5NSw3IEBACiAJCQkJcmVnID0gPDB4YTkwMDAwMDAgMHgxMDAwMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDg+OwogCQkJCWNsb2NrcyA9IDwmY2xrcyA4PjsKKwkJCQlyZXNldHMgPSA8JnJzdGMgMD47CiAJCQl9OwogCQl9OwogCkBAIC01MjQsMTIgKzUzMywzNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixmdW5jdGlvbiA9ICJzZG1tYzUiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisJCQkJaTJzX21jbGtfcGluc19hOiBpMnNfbWNsa0AwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMnNfbWNsayB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLHBpbnMgPSAiaTJzbWNsa2dycCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLGZ1bmN0aW9uID0gImkyc19tY2xrIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCQkJCWkyc19leHRfY2xrX2lucHV0X3BpbnNfYTogaTJzX2V4dF9jbGtfaW5wdXRAMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJzX2V4dF9jbGtfaW5wdXQgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixwaW5zID0gImkyc19leHRfY2xrX2lucHV0Z3JwIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAiaTJzX2V4dF9jbGtfaW5wdXQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyc19waW5zX2E6IGkyc0AwIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMnMgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixwaW5zID0gImkyc2dycCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLGZ1bmN0aW9uID0gImkycyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkJCQlpMnNfbm9fZGluX3BpbnNfYTogaTJzX25vX2RpbkAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMnNfbm9fZGluIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYscGlucyA9ICJpMnNfbm9fZGluZ3JwIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAiaTJzX25vX2RpbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkJCQlpMnNfNmNobl9waW5zX2E6IGkyc182Y2huQDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyc182Y2huIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYscGlucyA9ICJpMnNfNmNobmdycCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLGZ1bmN0aW9uID0gImkyc182Y2huIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYzk3X3BpbnNfYTogYWM5N0AwIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYzk3IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYscGlucyA9ICJhYzk3Z3JwIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLWdlbm1haS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yN3M3MjEwMC1nZW5tYWkuZHRzCmluZGV4IGEzZWQyM2MuLjE1MThjNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLWdlbm1haS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAtZ2VubWFpLmR0cwpAQCAtMjEsNyArMjEsOCBAQAogCX07CiAKIAljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDMiwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCWJvb3RhcmdzID0gImlnbm9yZV9sb2dsZXZlbCBydyByb290PS9kZXYvbmZzIGlwPWRoY3AiOworCQlzdGRvdXQtcGF0aCA9ICZzY2lmMjsKIAl9OwogCiAJbWVtb3J5IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yN3M3MjEwMC5kdHNpCmluZGV4IDgwMWE1NTYuLjI3N2U3M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAuZHRzaQpAQCAtNTIsMTYgKzUyLDYgQEAKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJ1c2JfeDEiOwogCQl9OwogCi0JCS8qIFNwZWNpYWwgQ1BHIGNsb2NrcyAqLwotCQljcGdfY2xvY2tzOiBjcGdfY2xvY2tzQGZjZmUwMDAwIHsKLQkJCSNjbG9jay1jZWxscyA9IDwxPjsKLQkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyN3M3MjEwMC1jcGctY2xvY2tzIiwKLQkJCQkgICAgICJyZW5lc2FzLHJ6LWNwZy1jbG9ja3MiOwotCQkJcmVnID0gPDB4ZmNmZTAwMDAgMHgxOD47Ci0JCQljbG9ja3MgPSA8JmV4dGFsX2Nsaz4sIDwmdXNiX3gxX2Nsaz47Ci0JCQljbG9jay1vdXRwdXQtbmFtZXMgPSAicGxsIiwgImkiLCAiZyI7Ci0JCX07Ci0KIAkJLyogRml4ZWQgZmFjdG9yIGNsb2NrcyAqLwogCQliX2NsazogYl9jbGsgewogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwpAQCAtODgsNiArNzgsMTYgQEAKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwMCI7CiAJCX07CiAKKwkJLyogU3BlY2lhbCBDUEcgY2xvY2tzICovCisJCWNwZ19jbG9ja3M6IGNwZ19jbG9ja3NAZmNmZTAwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI3czcyMTAwLWNwZy1jbG9ja3MiLAorCQkJCSAgICAgInJlbmVzYXMscnotY3BnLWNsb2NrcyI7CisJCQlyZWcgPSA8MHhmY2ZlMDAwMCAweDE4PjsKKwkJCWNsb2NrcyA9IDwmZXh0YWxfY2xrPiwgPCZ1c2JfeDFfY2xrPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwbGwiLCAiaSIsICJnIjsKKwkJfTsKKwogCQkvKiBNU1RQIGNsb2NrcyAqLwogCQltc3RwM19jbGtzOiBtc3RwM19jbGtzQGZjZmUwNDIwIHsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKQEAgLTE0OCw5NyArMTQ4LDYgQEAKIAkJfTsKIAl9OwogCi0JZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBlODIwMTAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiOwotCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwotCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKLQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCXJlZyA9IDwweGU4MjAxMDAwIDB4MTAwMD4sCi0JCQk8MHhlODIwMjAwMCAweDEwMDA+OwotCX07Ci0KLQlpMmMwOiBpMmNAZmNmZWUwMDAgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyaWljLXI3czcyMTAwIiwgInJlbmVzYXMscmlpYy1yeiI7Ci0JCXJlZyA9IDwweGZjZmVlMDAwIDB4NDQ+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTU3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNTggSVJRX1RZUEVfRURHRV9SSVNJTkc+LAotCQkJICAgICA8MCAxNTkgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAotCQkJICAgICA8MCAxNjAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE2MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTYyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNjMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE2NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI3UzcyMTAwX0NMS19JMkMwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQotCWkyYzE6IGkyY0BmY2ZlZTQwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJpaWMtcjdzNzIxMDAiLCAicmVuZXNhcyxyaWljLXJ6IjsKLQkJcmVnID0gPDB4ZmNmZWU0MDAgMHg0ND47Ci0JCWludGVycnVwdHMgPSA8MCAxNjUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE2NiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCi0JCQkgICAgIDwwIDE2NyBJUlFfVFlQRV9FREdFX1JJU0lORz4sCi0JCQkgICAgIDwwIDE2OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNzAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE3MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTcyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzE+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQl9OwotCi0JaTJjMjogaTJjQGZjZmVlODAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscmlpYy1yN3M3MjEwMCIsICJyZW5lc2FzLHJpaWMtcnoiOwotCQlyZWcgPSA8MHhmY2ZlZTgwMCAweDQ0PjsKLQkJaW50ZXJydXB0cyA9IDwwIDE3MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTc0IElSUV9UWVBFX0VER0VfUklTSU5HPiwKLQkJCSAgICAgPDAgMTc1IElSUV9UWVBFX0VER0VfUklTSU5HPiwKLQkJCSAgICAgPDAgMTc2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNzcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE3OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTc5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxODAgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSN1M3MjEwMF9DTEtfSTJDMj47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCX07Ci0KLQlpMmMzOiBpMmNAZmNmZWVjMDAgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyaWljLXI3czcyMTAwIiwgInJlbmVzYXMscmlpYy1yeiI7Ci0JCXJlZyA9IDwweGZjZmVlYzAwIDB4NDQ+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTgxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxODIgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAotCQkJICAgICA8MCAxODMgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAotCQkJICAgICA8MCAxODQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE4NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTg2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxODcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE4OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI3UzcyMTAwX0NMS19JMkMzPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQotCW10dTI6IHRpbWVyQGZjZmYwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLG10dTItcjdzNzIxMDAiLCAicmVuZXNhcyxtdHUyIjsKLQkJcmVnID0gPDB4ZmNmZjAwMDAgMHg0MDA+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQlpbnRlcnJ1cHQtbmFtZXMgPSAidGdpMGEiOwotCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjdTNzIxMDBfQ0xLX01UVTI+OwotCQljbG9jay1uYW1lcyA9ICJmY2siOwotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCX07Ci0KIAlzY2lmMDogc2VyaWFsQGU4MDA3MDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWYtcjdzNzIxMDAiLCAicmVuZXNhcyxzY2lmIjsKIAkJcmVnID0gPDB4ZTgwMDcwMDAgNjQ+OwpAQCAtNDA0LDQgKzMxMyw5NSBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OworCisJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBlODIwMTAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCXJlZyA9IDwweGU4MjAxMDAwIDB4MTAwMD4sCisJCQk8MHhlODIwMjAwMCAweDEwMDA+OworCX07CisKKwlpMmMwOiBpMmNAZmNmZWUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyaWljLXI3czcyMTAwIiwgInJlbmVzYXMscmlpYy1yeiI7CisJCXJlZyA9IDwweGZjZmVlMDAwIDB4NDQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMTU3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNTggSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJICAgICA8MCAxNTkgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJICAgICA8MCAxNjAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE2MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTYyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNjMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE2NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI3UzcyMTAwX0NMS19JMkMwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWkyYzE6IGkyY0BmY2ZlZTQwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJpaWMtcjdzNzIxMDAiLCAicmVuZXNhcyxyaWljLXJ6IjsKKwkJcmVnID0gPDB4ZmNmZWU0MDAgMHg0ND47CisJCWludGVycnVwdHMgPSA8MCAxNjUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE2NiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkgICAgIDwwIDE2NyBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkgICAgIDwwIDE2OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNzAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE3MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTcyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzE+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJaTJjMjogaTJjQGZjZmVlODAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInJlbmVzYXMscmlpYy1yN3M3MjEwMCIsICJyZW5lc2FzLHJpaWMtcnoiOworCQlyZWcgPSA8MHhmY2ZlZTgwMCAweDQ0PjsKKwkJaW50ZXJydXB0cyA9IDwwIDE3MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTc0IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCSAgICAgPDAgMTc1IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCSAgICAgPDAgMTc2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNzcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE3OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTc5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxODAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSN1M3MjEwMF9DTEtfSTJDMj47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlpMmMzOiBpMmNAZmNmZWVjMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyaWljLXI3czcyMTAwIiwgInJlbmVzYXMscmlpYy1yeiI7CisJCXJlZyA9IDwweGZjZmVlYzAwIDB4NDQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMTgxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxODIgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJICAgICA8MCAxODMgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJICAgICA8MCAxODQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE4NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTg2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxODcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE4OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI3UzcyMTAwX0NMS19JMkMzPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCW10dTI6IHRpbWVyQGZjZmYwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLG10dTItcjdzNzIxMDAiLCAicmVuZXNhcyxtdHUyIjsKKwkJcmVnID0gPDB4ZmNmZjAwMDAgMHg0MDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlpbnRlcnJ1cHQtbmFtZXMgPSAidGdpMGEiOworCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjdTNzIxMDBfQ0xLX01UVTI+OworCQljbG9jay1uYW1lcyA9ICJmY2siOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzNhNC1hcGU2ZXZtLXJlZmVyZW5jZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3M2E0LWFwZTZldm0tcmVmZXJlbmNlLmR0cwppbmRleCBhODYwZjMyLi44NGUwNWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3M2E0LWFwZTZldm0tcmVmZXJlbmNlLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3M2E0LWFwZTZldm0tcmVmZXJlbmNlLmR0cwpAQCAtMjEsNyArMjEsOCBAQAogCX07CiAKIAljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDMCwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJ3IjsKKwkJYm9vdGFyZ3MgPSAiaWdub3JlX2xvZ2xldmVsIHJ3IjsKKwkJc3Rkb3V0LXBhdGggPSAmc2NpZmEwOwogCX07CiAKIAltZW1vcnlANDAwMDAwMDAgewpAQCAtOTMsNiArOTQsMTAgQEAKIAl2b2x0YWdlLXRvbGVyYW5jZSA9IDwxPjsgLyogMSUgKi8KIH07CiAKKyZjbXQxIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmcGZjIHsKIAlzY2lmYTBfcGluczogc2VyaWFsMCB7CiAJCXJlbmVzYXMsZ3JvdXBzID0gInNjaWZhMF9kYXRhIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQuZHRzaQppbmRleCBlZjE1MmUzLi41YWM1N2JhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3M2E0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzNhNC5kdHNpCkBAIC0zMCwxOCArMzAsNiBAQAogCQl9OwogCX07CiAKLQlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQGYxMDAxMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNS1naWMiOwotCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwotCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKLQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCXJlZyA9IDwwIDB4ZjEwMDEwMDAgMCAweDEwMDA+LAotCQkJPDAgMHhmMTAwMjAwMCAwIDB4MTAwMD4sCi0JCQk8MCAweGYxMDA0MDAwIDAgMHgyMDAwPiwKLQkJCTwwIDB4ZjEwMDYwMDAgMCAweDIwMDA+OwotCQlpbnRlcnJ1cHRzID0gPDEgOSAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0hJR0gpPjsKLQl9OwotCiAJdGltZXIgewogCQljb21wYXRpYmxlID0gImFybSxhcm12Ny10aW1lciI7CiAJCWludGVycnVwdHMgPSA8MSAxMyAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0xPVyk+LApAQCAtNTAsNiArMzgsOTEgQEAKIAkJCSAgICAgPDEgMTAgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPjsKIAl9OwogCisJZG1hYzogZG1hLW11bHRpcGxleGVyIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNoZG1hLW11eCI7CisJCSNkbWEtY2VsbHMgPSA8MT47CisJCWRtYS1jaGFubmVscyA9IDwyMD47CisJCWRtYS1yZXF1ZXN0cyA9IDwyNTY+OworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCXJhbmdlczsKKworCQlkbWEwOiBkbWEtY29udHJvbGxlckBlNjcwMDAyMCB7CisJCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2hkbWEtcjhhNzNhNCI7CisJCQlyZWcgPSA8MCAweGU2NzAwMDIwIDAgMHg4OWUwPjsKKwkJCWludGVycnVwdHMgPSA8MCAyMjAgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIwMCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjAxIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMDIgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIwMyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjA0IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMDUgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIwNiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjA3IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMDggSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIwOSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjEwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIxMiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjEzIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIxNSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjE2IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTcgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIxOCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjE5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJaW50ZXJydXB0LW5hbWVzID0gImVycm9yIiwKKwkJCQkJImNoMCIsICJjaDEiLCAiY2gyIiwgImNoMyIsCisJCQkJCSJjaDQiLCAiY2g1IiwgImNoNiIsICJjaDciLAorCQkJCQkiY2g4IiwgImNoOSIsICJjaDEwIiwgImNoMTEiLAorCQkJCQkiY2gxMiIsICJjaDEzIiwgImNoMTQiLCAiY2gxNSIsCisJCQkJCSJjaDE2IiwgImNoMTciLCAiY2gxOCIsICJjaDE5IjsKKwkJfTsKKwl9OworCisJcGZjOiBwZmNAZTYwNTAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMscGZjLXI4YTczYTQiOworCQlyZWcgPSA8MCAweGU2MDUwMDAwIDAgMHg5MDAwPjsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cy1leHRlbmRlZCA9CisJCQk8JmlycWMwICAwIDA+LCA8JmlycWMwICAxIDA+LCA8JmlycWMwICAyIDA+LCA8JmlycWMwICAzIDA+LAorCQkJPCZpcnFjMCAgNCAwPiwgPCZpcnFjMCAgNSAwPiwgPCZpcnFjMCAgNiAwPiwgPCZpcnFjMCAgNyAwPiwKKwkJCTwmaXJxYzAgIDggMD4sIDwmaXJxYzAgIDkgMD4sIDwmaXJxYzAgMTAgMD4sIDwmaXJxYzAgMTEgMD4sCisJCQk8JmlycWMwIDEyIDA+LCA8JmlycWMwIDEzIDA+LCA8JmlycWMwIDE0IDA+LCA8JmlycWMwIDE1IDA+LAorCQkJPCZpcnFjMCAxNiAwPiwgPCZpcnFjMCAxNyAwPiwgPCZpcnFjMCAxOCAwPiwgPCZpcnFjMCAxOSAwPiwKKwkJCTwmaXJxYzAgMjAgMD4sIDwmaXJxYzAgMjEgMD4sIDwmaXJxYzAgMjIgMD4sIDwmaXJxYzAgMjMgMD4sCisJCQk8JmlycWMwIDI0IDA+LCA8JmlycWMwIDI1IDA+LCA8JmlycWMwIDI2IDA+LCA8JmlycWMwIDI3IDA+LAorCQkJPCZpcnFjMCAyOCAwPiwgPCZpcnFjMCAyOSAwPiwgPCZpcnFjMCAzMCAwPiwgPCZpcnFjMCAzMSAwPiwKKwkJCTwmaXJxYzEgIDAgMD4sIDwmaXJxYzEgIDEgMD4sIDwmaXJxYzEgIDIgMD4sIDwmaXJxYzEgIDMgMD4sCisJCQk8JmlycWMxICA0IDA+LCA8JmlycWMxICA1IDA+LCA8JmlycWMxICA2IDA+LCA8JmlycWMxICA3IDA+LAorCQkJPCZpcnFjMSAgOCAwPiwgPCZpcnFjMSAgOSAwPiwgPCZpcnFjMSAxMCAwPiwgPCZpcnFjMSAxMSAwPiwKKwkJCTwmaXJxYzEgMTIgMD4sIDwmaXJxYzEgMTMgMD4sIDwmaXJxYzEgMTQgMD4sIDwmaXJxYzEgMTUgMD4sCisJCQk8JmlycWMxIDE2IDA+LCA8JmlycWMxIDE3IDA+LCA8JmlycWMxIDE4IDA+LCA8JmlycWMxIDE5IDA+LAorCQkJPCZpcnFjMSAyMCAwPiwgPCZpcnFjMSAyMSAwPiwgPCZpcnFjMSAyMiAwPiwgPCZpcnFjMSAyMyAwPiwKKwkJCTwmaXJxYzEgMjQgMD4sIDwmaXJxYzEgMjUgMD47CisJfTsKKworCWkyYzU6IGkyY0BlNjBiMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1yOGE3M2E0IiwgInJlbmVzYXMscm1vYmlsZS1paWMiOworCQlyZWcgPSA8MCAweGU2MGIwMDAwIDAgMHg0Mjg+OworCQlpbnRlcnJ1cHRzID0gPDAgMTc5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWNtdDE6IHRpbWVyQGU2MTMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGNtdC00OC1yOGE3M2E0IiwgInJlbmVzYXMsY210LTQ4LWdlbjIiOworCQlyZWcgPSA8MCAweGU2MTMwMDAwIDAgMHgxMDA0PjsKKwkJaW50ZXJydXB0cyA9IDwwIDEyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKworCQlyZW5lc2FzLGNoYW5uZWxzLW1hc2sgPSA8MHhmZj47CisKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJaXJxYzA6IGludGVycnVwdC1jb250cm9sbGVyQGU2MWMwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlycWMtcjhhNzNhNCIsICJyZW5lc2FzLGlycWMiOwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwpAQCAtMTIyLDQ4ICsxOTUsNiBAQAogCQkJICAgICA8MCA1NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAl9OwogCi0JZG1hYzogZG1hLW11bHRpcGxleGVyQDAgewotCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2hkbWEtbXV4IjsKLQkJI2RtYS1jZWxscyA9IDwxPjsKLQkJZG1hLWNoYW5uZWxzID0gPDIwPjsKLQkJZG1hLXJlcXVlc3RzID0gPDI1Nj47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDI+OwotCQkjc2l6ZS1jZWxscyA9IDwyPjsKLQkJcmFuZ2VzOwotCi0JCWRtYTA6IGRtYS1jb250cm9sbGVyQGU2NzAwMDIwIHsKLQkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzaGRtYS1yOGE3M2E0IjsKLQkJCXJlZyA9IDwwIDB4ZTY3MDAwMjAgMCAweDg5ZTA+OwotCQkJaW50ZXJydXB0cyA9IDwwIDIyMCBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjAwIElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDEgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIwMiBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjAzIElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDQgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIwNSBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjA2IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDcgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIwOCBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjA5IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMTAgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxMSBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjEyIElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMTMgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxNCBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjE1IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMTYgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxNyBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjE4IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMTkgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQlpbnRlcnJ1cHQtbmFtZXMgPSAiZXJyb3IiLAotCQkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKLQkJCQkJImNoNCIsICJjaDUiLCAiY2g2IiwgImNoNyIsCi0JCQkJCSJjaDgiLCAiY2g5IiwgImNoMTAiLCAiY2gxMSIsCi0JCQkJCSJjaDEyIiwgImNoMTMiLCAiY2gxNCIsICJjaDE1IiwKLQkJCQkJImNoMTYiLCAiY2gxNyIsICJjaDE4IiwgImNoMTkiOwotCQl9OwotCX07Ci0KIAl0aGVybWFsQGU2MWYwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHRoZXJtYWwtcjhhNzNhNCIsICJyZW5lc2FzLHJjYXItdGhlcm1hbCI7CiAJCXJlZyA9IDwwIDB4ZTYxZjAwMDAgMCAweDE0PiwgPDAgMHhlNjFmMDEwMCAwIDB4Mzg+LApAQCAtMTc0LDcgKzIwNSw3IEBACiAJaTJjMDogaTJjQGU2NTAwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1MDAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxNzQgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0xODMsNyArMjE0LDcgQEAKIAlpMmMxOiBpMmNAZTY1MTAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzNhNCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDAgMHhlNjUxMDAwMCAwIDB4NDI4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTE5Miw3ICsyMjMsNyBAQAogCWkyYzI6IGkyY0BlNjUyMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1yOGE3M2E0IiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MCAweGU2NTIwMDAwIDAgMHg0Mjg+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTc2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtMjAxLDcgKzIzMiw3IEBACiAJaTJjMzogaTJjQGU2NTMwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1MzAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxNzcgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0yMTAsMjUgKzI0MSwxNiBAQAogCWkyYzQ6IGkyY0BlNjU0MDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1yOGE3M2E0IiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MCAweGU2NTQwMDAwIDAgMHg0Mjg+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTc4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKLQlpMmM1OiBpMmNAZTYwYjAwMDAgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7Ci0JCXJlZyA9IDwwIDB4ZTYwYjAwMDAgMCAweDQyOD47Ci0JCWludGVycnVwdHMgPSA8MCAxNzkgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQogCWkyYzY6IGkyY0BlNjU1MDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1yOGE3M2E0IiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MCAweGU2NTUwMDAwIDAgMHg0Mjg+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTg0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtMjM3LDcgKzI1OSw3IEBACiAJaTJjNzogaTJjQGU2NTYwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1NjAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxODUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0yNDYsMTIgKzI2OCwyNiBAQAogCWkyYzg6IGkyY0BlNjU3MDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1yOGE3M2E0IiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MCAweGU2NTcwMDAwIDAgMHg0Mjg+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTczIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwlzY2lmYjA6IHNlcmlhbEBlNmMyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmYi1yOGE3M2E0IiwgInJlbmVzYXMsc2NpZmIiOworCQlyZWcgPSA8MCAweGU2YzIwMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTQ4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlzY2lmYjE6IHNlcmlhbEBlNmMzMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmYi1yOGE3M2E0IiwgInJlbmVzYXMsc2NpZmIiOworCQlyZWcgPSA8MCAweGU2YzMwMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAlzY2lmYTA6IHNlcmlhbEBlNmM0MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmYS1yOGE3M2E0IiwgInJlbmVzYXMsc2NpZmEiOwogCQlyZWcgPSA8MCAweGU2YzQwMDAwIDAgMHgxMDA+OwpAQCAtMjY2LDczICszMDIsMjAgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCi0Jc2NpZmIyOiBzZXJpYWxAZTZjMjAwMDAgewotCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2NpZmItcjhhNzNhNCIsICJyZW5lc2FzLHNjaWZiIjsKLQkJcmVnID0gPDAgMHhlNmMyMDAwMCAwIDB4MTAwPjsKLQkJaW50ZXJydXB0cyA9IDwwIDE0OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQl9OwotCi0Jc2NpZmIzOiBzZXJpYWxAZTZjMzAwMDAgewotCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2NpZmItcjhhNzNhNCIsICJyZW5lc2FzLHNjaWZiIjsKLQkJcmVnID0gPDAgMHhlNmMzMDAwMCAwIDB4MTAwPjsKLQkJaW50ZXJydXB0cyA9IDwwIDE0OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQl9OwotCi0Jc2NpZmI0OiBzZXJpYWxAZTZjZTAwMDAgeworCXNjaWZiMjogc2VyaWFsQGU2Y2UwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZiLXI4YTczYTQiLCAicmVuZXNhcyxzY2lmYiI7CiAJCXJlZyA9IDwwIDB4ZTZjZTAwMDAgMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCXNjaWZiNTogc2VyaWFsQGU2Y2YwMDAwIHsKKwlzY2lmYjM6IHNlcmlhbEBlNmNmMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmYi1yOGE3M2E0IiwgInJlbmVzYXMsc2NpZmIiOwogCQlyZWcgPSA8MCAweGU2Y2YwMDAwIDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTUxIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKLQltbWNpZjA6IG1tY0BlZTIwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzaC1tbWNpZiI7Ci0JCXJlZyA9IDwwIDB4ZWUyMDAwMDAgMCAweDgwPjsKLQkJaW50ZXJydXB0cyA9IDwwIDE2OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJcmVnLWlvLXdpZHRoID0gPDQ+OwotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCX07Ci0KLQltbWNpZjE6IG1tY0BlZTIyMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzaC1tbWNpZiI7Ci0JCXJlZyA9IDwwIDB4ZWUyMjAwMDAgMCAweDgwPjsKLQkJaW50ZXJydXB0cyA9IDwwIDE3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJcmVnLWlvLXdpZHRoID0gPDQ+OwotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCX07Ci0KLQlwZmM6IHBmY0BlNjA1MDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxwZmMtcjhhNzNhNCI7Ci0JCXJlZyA9IDwwIDB4ZTYwNTAwMDAgMCAweDkwMDA+OwotCQlncGlvLWNvbnRyb2xsZXI7Ci0JCSNncGlvLWNlbGxzID0gPDI+OwotCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0KLQkJCTwmaXJxYzAgIDAgMD4sIDwmaXJxYzAgIDEgMD4sIDwmaXJxYzAgIDIgMD4sIDwmaXJxYzAgIDMgMD4sCi0JCQk8JmlycWMwICA0IDA+LCA8JmlycWMwICA1IDA+LCA8JmlycWMwICA2IDA+LCA8JmlycWMwICA3IDA+LAotCQkJPCZpcnFjMCAgOCAwPiwgPCZpcnFjMCAgOSAwPiwgPCZpcnFjMCAxMCAwPiwgPCZpcnFjMCAxMSAwPiwKLQkJCTwmaXJxYzAgMTIgMD4sIDwmaXJxYzAgMTMgMD4sIDwmaXJxYzAgMTQgMD4sIDwmaXJxYzAgMTUgMD4sCi0JCQk8JmlycWMwIDE2IDA+LCA8JmlycWMwIDE3IDA+LCA8JmlycWMwIDE4IDA+LCA8JmlycWMwIDE5IDA+LAotCQkJPCZpcnFjMCAyMCAwPiwgPCZpcnFjMCAyMSAwPiwgPCZpcnFjMCAyMiAwPiwgPCZpcnFjMCAyMyAwPiwKLQkJCTwmaXJxYzAgMjQgMD4sIDwmaXJxYzAgMjUgMD4sIDwmaXJxYzAgMjYgMD4sIDwmaXJxYzAgMjcgMD4sCi0JCQk8JmlycWMwIDI4IDA+LCA8JmlycWMwIDI5IDA+LCA8JmlycWMwIDMwIDA+LCA8JmlycWMwIDMxIDA+LAotCQkJPCZpcnFjMSAgMCAwPiwgPCZpcnFjMSAgMSAwPiwgPCZpcnFjMSAgMiAwPiwgPCZpcnFjMSAgMyAwPiwKLQkJCTwmaXJxYzEgIDQgMD4sIDwmaXJxYzEgIDUgMD4sIDwmaXJxYzEgIDYgMD4sIDwmaXJxYzEgIDcgMD4sCi0JCQk8JmlycWMxICA4IDA+LCA8JmlycWMxICA5IDA+LCA8JmlycWMxIDEwIDA+LCA8JmlycWMxIDExIDA+LAotCQkJPCZpcnFjMSAxMiAwPiwgPCZpcnFjMSAxMyAwPiwgPCZpcnFjMSAxNCAwPiwgPCZpcnFjMSAxNSAwPiwKLQkJCTwmaXJxYzEgMTYgMD4sIDwmaXJxYzEgMTcgMD4sIDwmaXJxYzEgMTggMD4sIDwmaXJxYzEgMTkgMD4sCi0JCQk8JmlycWMxIDIwIDA+LCA8JmlycWMxIDIxIDA+LCA8JmlycWMxIDIyIDA+LCA8JmlycWMxIDIzIDA+LAotCQkJPCZpcnFjMSAyNCAwPiwgPCZpcnFjMSAyNSAwPjsKLQl9OwotCiAJc2RoaTA6IHNkQGVlMTAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzNhNCI7CiAJCXJlZyA9IDwwIDB4ZWUxMDAwMDAgMCAweDEwMD47CkBAIC0zNTYsNCArMzM5LDMyIEBACiAJCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKKworCW1tY2lmMDogbW1jQGVlMjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNoLW1tY2lmIjsKKwkJcmVnID0gPDAgMHhlZTIwMDAwMCAwIDB4ODA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlyZWctaW8td2lkdGggPSA8ND47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCW1tY2lmMTogbW1jQGVlMjIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNoLW1tY2lmIjsKKwkJcmVnID0gPDAgMHhlZTIyMDAwMCAwIDB4ODA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTcwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlyZWctaW8td2lkdGggPSA8ND47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAZjEwMDEwMDAgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1LWdpYyI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJcmVnID0gPDAgMHhmMTAwMTAwMCAwIDB4MTAwMD4sCisJCQk8MCAweGYxMDAyMDAwIDAgMHgxMDAwPiwKKwkJCTwwIDB4ZjEwMDQwMDAgMCAweDIwMDA+LAorCQkJPDAgMHhmMTAwNjAwMCAwIDB4MjAwMD47CisJCWludGVycnVwdHMgPSA8MSA5IChHSUNfQ1BVX01BU0tfU0lNUExFKDQpIHwgSVJRX1RZUEVfTEVWRUxfSElHSCk+OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc0MC1hcm1hZGlsbG84MDBldmEuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc0MC1hcm1hZGlsbG84MDBldmEuZHRzCmluZGV4IGVmZmI3YjQuLmQ0YWY0ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NDAtYXJtYWRpbGxvODAwZXZhLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLWFybWFkaWxsbzgwMGV2YS5kdHMKQEAgLTI1LDYgKzI1LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMSwxMTUyMDAgZWFybHlwcmludGs9c2gtc2NpLjEsMTE1MjAwIGlnbm9yZV9sb2dsZXZlbCByb290PS9kZXYvbmZzIGlwPWRoY3AgcnciOworCQlzdGRvdXQtcGF0aCA9ICZzY2lmYTE7CiAJfTsKIAogCW1lbW9yeSB7CkBAIC03Nyw3ICs3OCw3IEBACiAJCXJlZ3VsYXRvci1ib290LW9uOwogCX07CiAKLQlncGlvLWtleXMgeworCWtleWJvYXJkIHsKIAkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOwogCiAJCXBvd2VyLWtleSB7CkBAIC0yOTgsMyArMjk5LDcgQEAKIAogCXN0YXR1cyA9ICJva2F5IjsKIH07CisKKyZ0bXUwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc0MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc0MC5kdHNpCmluZGV4IGVlZDY5N2EuLmE4YTY3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NDAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLmR0c2kKQEAgLTcxLDYgKzcxLDcgQEAKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAyX2Nsa3MgUjhBNzc0MF9DTEtfSU5UQ0E+OwogCX07CiAKIAkvKiBpcnFwaW4xOiBJUlE4IC0gSVJRMTUgKi8KQEAgLTkxLDYgKzkyLDcgQEAKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAyX2Nsa3MgUjhBNzc0MF9DTEtfSU5UQ0E+OwogCX07CiAKIAkvKiBpcnFwaW4yOiBJUlExNiAtIElSUTIzICovCkBAIC0xMTEsNiArMTEzLDcgQEAKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAyX2Nsa3MgUjhBNzc0MF9DTEtfSU5UQ0E+OwogCX07CiAKIAkvKiBpcnFwaW4zOiBJUlEyNCAtIElSUTMxICovCkBAIC0xMzEsNiArMTM0LDcgQEAKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAyX2Nsa3MgUjhBNzc0MF9DTEtfSU5UQ0E+OwogCX07CiAKIAlldGhlcjogZXRoZXJuZXRAZTlhMDAwMDAgewpAQCAtMTkzLDcgKzE5Nyw3IEBACiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmYS1yOGE3NzQwIiwgInJlbmVzYXMsc2NpZmEiOwogCQlyZWcgPSA8MHhlNmM2MDAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxMDIgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19TQ0lGQTA+OworCQljbG9ja3MgPSA8Jm1zdHAyX2Nsa3MgUjhBNzc0MF9DTEtfU0NJRkEyPjsKIAkJY2xvY2stbmFtZXMgPSAic2NpX2ljayI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKQEAgLTMzMSw2ICszMzUsMzQgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJdG11MDogdGltZXJAZmZmODAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdG11LXI4YTc3NDAiLCAicmVuZXNhcyx0bXUiOworCQlyZWcgPSA8MHhmZmY4MDAwMCAweDJjPjsKKwkJaW50ZXJydXB0cyA9IDwwIDE5OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTk5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAyMDAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDFfY2xrcyBSOEE3NzQwX0NMS19UTVUwPjsKKwkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKworCQkjcmVuZXNhcyxjaGFubmVscyA9IDwzPjsKKworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl0bXUxOiB0aW1lckBmZmY5MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx0bXUtcjhhNzc0MCIsICJyZW5lc2FzLHRtdSI7CisJCXJlZyA9IDwweGZmZjkwMDAwIDB4MmM+OworCQlpbnRlcnJ1cHRzID0gPDAgMTcwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNzEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE3MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3NDBfQ0xLX1RNVTE+OworCQljbG9jay1uYW1lcyA9ICJmY2siOworCisJCSNyZW5lc2FzLGNoYW5uZWxzID0gPDM+OworCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCWNsb2NrcyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKQEAgLTQ0OCw4ICs0ODAsOCBAQAogCQltc3RwMl9jbGtzOiBtc3RwMl9jbGtzQGU2MTUwMTM4IHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzQwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwweGU2MTUwMTM4IDQ+LCA8MHhlNjE1MDA0MCA0PjsKLQkJCWNsb2NrcyA9IDwmc3ViX2Nsaz4sIDwmc3ViX2Nsaz4sCi0JCQkJIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCisJCQljbG9ja3MgPSA8JnN1Yl9jbGs+LCA8JmNwZ19jbG9ja3MgUjhBNzc0MF9DTEtfSFA+LAorCQkJCSA8JnN1Yl9jbGs+LCA8JmNwZ19jbG9ja3MgUjhBNzc0MF9DTEtfSFA+LAogCQkJCSA8JmNwZ19jbG9ja3MgUjhBNzc0MF9DTEtfSFA+LAogCQkJCSA8JmNwZ19jbG9ja3MgUjhBNzc0MF9DTEtfSFA+LAogCQkJCSA8JmNwZ19jbG9ja3MgUjhBNzc0MF9DTEtfSFA+LApAQCAtNDU4LDcgKzQ5MCw4IEBACiAJCQkJIDwmc3ViX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8Ci0JCQkJUjhBNzc0MF9DTEtfU0NJRkE2IFI4QTc3NDBfQ0xLX1NDSUZBNworCQkJCVI4QTc3NDBfQ0xLX1NDSUZBNiBSOEE3NzQwX0NMS19JTlRDQQorCQkJCVI4QTc3NDBfQ0xLX1NDSUZBNwogCQkJCVI4QTc3NDBfQ0xLX0RNQUMxIFI4QTc3NDBfQ0xLX0RNQUMyCiAJCQkJUjhBNzc0MF9DTEtfRE1BQzMgUjhBNzc0MF9DTEtfVVNCRE1BQwogCQkJCVI4QTc3NDBfQ0xLX1NDSUZBNSBSOEE3NzQwX0NMS19TQ0lGQgpAQCAtNDY3LDcgKzUwMCw4IEBACiAJCQkJUjhBNzc0MF9DTEtfU0NJRkE0CiAJCQk+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0KLQkJCQkic2NpZmE2IiwgInNjaWZhNyIsICJkbWFjMSIsICJkbWFjMiIsICJkbWFjMyIsCisJCQkJInNjaWZhNiIsICJpbnRjYSIsCisJCQkJInNjaWZhNyIsICJkbWFjMSIsICJkbWFjMiIsICJkbWFjMyIsCiAJCQkJInVzYmRtYWMiLCAic2NpZmE1IiwgInNjaWZiIiwgInNjaWZhMCIsICJzY2lmYTEiLAogCQkJCSJzY2lmYTIiLCAic2NpZmEzIiwgInNjaWZhNCI7CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LWJvY2t3LXJlZmVyZW5jZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LWJvY2t3LXJlZmVyZW5jZS5kdHMKaW5kZXggMzM0MmM3NC4uMDRjMGMzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OC1ib2Nrdy1yZWZlcmVuY2UuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzgtYm9ja3ctcmVmZXJlbmNlLmR0cwpAQCAtMjgsNyArMjgsOCBAQAogCX07CiAKIAljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDMCwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCBydyI7CisJCWJvb3RhcmdzID0gImlnbm9yZV9sb2dsZXZlbCByb290PS9kZXYvbmZzIGlwPWRoY3AgcnciOworCQlzdGRvdXQtcGF0aCA9ICZzY2lmMDsKIAl9OwogCiAJbWVtb3J5IHsKQEAgLTczLDYgKzc0LDEwIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnRtdTAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZwZmMgewogCXNjaWYwX3BpbnM6IHNlcmlhbDAgewogCQlyZW5lc2FzLGdyb3VwcyA9ICJzY2lmMF9kYXRhX2EiLCAic2NpZjBfY3RybCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LmR0c2kKaW5kZXggMzE1ZWM2Mi4uZWY4NTMzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzguZHRzaQpAQCAtMTYyLDYgKzE2Miw0MiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwl0bXUwOiB0aW1lckBmZmQ4MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx0bXUtcjhhNzc3OCIsICJyZW5lc2FzLHRtdSI7CisJCXJlZyA9IDwweGZmZDgwMDAwIDB4MzA+OworCQlpbnRlcnJ1cHRzID0gPDAgMzIgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDMzIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAzNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKworCQkjcmVuZXNhcyxjaGFubmVscyA9IDwzPjsKKworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl0bXUxOiB0aW1lckBmZmQ4MTAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx0bXUtcjhhNzc3OCIsICJyZW5lc2FzLHRtdSI7CisJCXJlZyA9IDwweGZmZDgxMDAwIDB4MzA+OworCQlpbnRlcnJ1cHRzID0gPDAgMzYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDM3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAzOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKworCQkjcmVuZXNhcyxjaGFubmVscyA9IDwzPjsKKworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl0bXUyOiB0aW1lckBmZmQ4MjAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx0bXUtcjhhNzc3OCIsICJyZW5lc2FzLHRtdSI7CisJCXJlZyA9IDwweGZmZDgyMDAwIDB4MzA+OworCQlpbnRlcnJ1cHRzID0gPDAgNDAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDQxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCA0MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKworCQkjcmVuZXNhcyxjaGFubmVscyA9IDwzPjsKKworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAlzY2lmMDogc2VyaWFsQGZmZTQwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWYtcjhhNzc3OCIsICJyZW5lc2FzLHNjaWYiOwogCQlyZWcgPSA8MHhmZmU0MDAwMCAweDEwMD47CkBAIC0yMTUsOCArMjUxLDYgQEAKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc3OCI7CiAJCXJlZyA9IDwweGZmZTRjMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDg3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQljYXAtc2QtaGlnaHNwZWVkOwotCQljYXAtc2Rpby1pcnE7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMjI0LDggKzI1OCw2IEBACiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzZGhpLXI4YTc3NzgiOwogCQlyZWcgPSA8MHhmZmU0ZDAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCA4OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQkJY2FwLXNkaW8taXJxOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTIzMyw4ICsyNjUsNiBAQAogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2RoaS1yOGE3Nzc4IjsKIAkJcmVnID0gPDB4ZmZlNGYwMDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgODYgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7Ci0JCWNhcC1zZGlvLWlycTsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LW1hcnplbi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LW1hcnplbi5kdHMKaW5kZXggYzE2MDQwNC4uZTgzZDQwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OS1tYXJ6ZW4uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzktbWFyemVuLmR0cwpAQCAtMjUsNiArMjUsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTQzIsMTE1MjAwIGlnbm9yZV9sb2dsZXZlbCByb290PS9kZXYvbmZzIGlwPW9uIjsKKwkJc3Rkb3V0LXBhdGggPSAmc2NpZjI7CiAJfTsKIAogCW1lbW9yeSB7CkBAIC02OCw2ICs2OSw3OCBAQAogCQkJZ3Bpb3MgPSA8JmdwaW80IDMxIEdQSU9fQUNUSVZFX0hJR0g+OwogCQl9OwogCX07CisKKwl2Z2EtZW5jb2RlciB7CisJCWNvbXBhdGlibGUgPSAiYWRpLGFkdjcxMjMiOworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCXZnYV9lbmNfaW46IGVuZHBvaW50IHsKKwkJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZkdV9vdXRfcmdiMD47CisJCQkJfTsKKwkJCX07CisJCQlwb3J0QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCQl2Z2FfZW5jX291dDogZW5kcG9pbnQgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnZnYV9pbj47CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKKworCXZnYSB7CisJCWNvbXBhdGlibGUgPSAidmdhLWNvbm5lY3RvciI7CisKKwkJcG9ydCB7CisJCQl2Z2FfaW46IGVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnZnYV9lbmNfb3V0PjsKKwkJCX07CisJCX07CisJfTsKKworCWx2ZHMtZW5jb2RlciB7CisJCWNvbXBhdGlibGUgPSAidGhpbmUsdGhjNjNsdmRtODNkIjsKKworCQlwb3J0cyB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQlwb3J0QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCQlsdmRzX2VuY19pbjogZW5kcG9pbnQgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmR1X291dF9yZ2IxPjsKKwkJCQl9OworCQkJfTsKKwkJCXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCWx2ZHNfY29ubmVjdG9yOiBlbmRwb2ludCB7CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZkdSB7CisJcGluY3RybC0wID0gPCZkdV9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXN0YXR1cyA9ICJva2F5IjsKKworCXBvcnRzIHsKKwkJcG9ydEAwIHsKKwkJCWVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnZnYV9lbmNfaW4+OworCQkJfTsKKwkJfTsKKwkJcG9ydEAxIHsKKwkJCWVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8Jmx2ZHNfZW5jX2luPjsKKwkJCX07CisJCX07CisJfTsKIH07CiAKICZpcnFwaW4wIHsKQEAgLTgzLDYgKzE1NiwxNyBAQAogfTsKIAogJnBmYyB7CisJZHVfcGluczogZHUgeworCQlkdTAgeworCQkJcmVuZXNhcyxncm91cHMgPSAiZHUwX3JnYjg4OCIsICJkdTBfc3luY18xIiwgImR1MF9jbGtfb3V0XzAiOworCQkJcmVuZXNhcyxmdW5jdGlvbiA9ICJkdTAiOworCQl9OworCQlkdTEgeworCQkJcmVuZXNhcyxncm91cHMgPSAiZHUxX3JnYjY2NiIsICJkdTFfc3luY18xIiwgImR1MV9jbGtfb3V0IjsKKwkJCXJlbmVzYXMsZnVuY3Rpb24gPSAiZHUxIjsKKwkJfTsKKwl9OworCiAJbGFuMF9waW5zOiBsYW4wIHsKIAkJaW50YyB7CiAJCQlyZW5lc2FzLGdyb3VwcyA9ICJpbnRjX2lycTFfYiI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LmR0c2kKaW5kZXggN2NmYmE5YS4uZWRlOWEyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzkuZHRzaQpAQCAtMzAzLDcgKzMwMyw3IEBACiAJfTsKIAogCXNhdGE6IHNhdGFAZmM2MDAwMDAgewotCQljb21wYXRpYmxlID0gInJlbmVzYXMscmNhci1zYXRhIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNhdGEtcjhhNzc3OSIsICJyZW5lc2FzLHJjYXItc2F0YSI7CiAJCXJlZyA9IDwweGZjNjAwMDAwIDB4MjAwMD47CiAJCWludGVycnVwdHMgPSA8MCAxMDAgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDFfY2xrcyBSOEE3Nzc5X0NMS19TQVRBPjsKQEAgLTMxNCw4ICszMTQsNiBAQAogCQlyZWcgPSA8MHhmZmU0YzAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxMDQgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3Nzc5X0NMS19TREhJMD47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7Ci0JCWNhcC1zZGlvLWlycTsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zMjQsOCArMzIyLDYgQEAKIAkJcmVnID0gPDB4ZmZlNGQwMDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTA1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc3OV9DTEtfU0RISTE+OwotCQljYXAtc2QtaGlnaHNwZWVkOwotCQljYXAtc2Rpby1pcnE7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzM0LDggKzMzMCw2IEBACiAJCXJlZyA9IDwweGZmZTRlMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3NzlfQ0xLX1NESEkyPjsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQkJY2FwLXNkaW8taXJxOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTM0NCw4ICszMzgsNiBAQAogCQlyZWcgPSA8MHhmZmU0ZjAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxMDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3Nzc5X0NMS19TREhJMz47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7Ci0JCWNhcC1zZGlvLWlycTsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zNzksNiArMzcxLDMwIEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCWR1OiBkaXNwbGF5QGZmZjgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGR1LXI4YTc3NzkiOworCQlyZWcgPSA8MCAweGZmZjgwMDAwIDAgMHg0MDAwMD47CisJCWludGVycnVwdHMgPSA8MCAzMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3NzlfQ0xLX0RVPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQlwb3J0cyB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQlwb3J0QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCQlkdV9vdXRfcmdiMDogZW5kcG9pbnQgeworCQkJCX07CisJCQl9OworCQkJcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQkJZHVfb3V0X3JnYjE6IGVuZHBvaW50IHsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCiAJY2xvY2tzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MC1sYWdlci5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkwLWxhZ2VyLmR0cwppbmRleCA2OTA5OGI5Li42MzZkNTNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkwLWxhZ2VyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkwLWxhZ2VyLmR0cwpAQCAtOSw2ICs5LDM0IEBACiAgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCisvKgorICogU1NJLUFLNDY0MworICoKKyAqIFNXMTogMTogQUs0NjQzCisgKiAgICAgIDI6IENOMjIKKyAqICAgICAgMzogQURWNzUxMQorICoKKyAqIFRoaXMgY29tbWFuZCBpcyByZXF1aXJlZCB3aGVuIFBsYXliYWNrL0NhcHR1cmUKKyAqCisgKglhbWl4ZXIgc2V0ICJMSU5FT1VUIE1peGVyIERBQ0wiIG9uCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IiAxMDAlCisgKglhbWl4ZXIgc2V0ICJEVkMgSW4iIDEwMCUKKyAqCisgKiBZb3UgY2FuIHVzZSBNdXRlCisgKgorICoJYW1peGVyIHNldCAiRFZDIE91dCBNdXRlIiBvbgorICoJYW1peGVyIHNldCAiRFZDIEluIE11dGUiIG9uCisgKgorICogWW91IGNhbiB1c2UgVm9sdW1lIFJhbXAKKyAqCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IFJhbXAgVXAgUmF0ZSIgICAiMC4xMjUgZEIvNjQgc3RlcHMiCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IFJhbXAgRG93biBSYXRlIiAiMC4xMjUgZEIvNTEyIHN0ZXBzIgorICoJYW1peGVyIHNldCAiRFZDIE91dCBSYW1wIiBvbgorICoJYXBsYXkgeHh4LndhdiAmCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IiAgODAlICAvLyBWb2x1bWUgRG93bgorICoJYW1peGVyIHNldCAiRFZDIE91dCIgMTAwJSAgLy8gVm9sdW1lIFVwCisgKi8KKwogL2R0cy12MS87CiAjaW5jbHVkZSAicjhhNzc5MC5kdHNpIgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgpAQCAtMTksMTIgKzQ3LDEzIEBACiAJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGxhZ2VyIiwgInJlbmVzYXMscjhhNzc5MCI7CiAKIAlhbGlhc2VzIHsKLQkJc2VyaWFsNiA9ICZzY2lmMDsKLQkJc2VyaWFsNyA9ICZzY2lmMTsKKwkJc2VyaWFsNiA9ICZzY2lmYTA7CisJCXNlcmlhbDcgPSAmc2NpZmExOwogCX07CiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDNiwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWZhMDsKIAl9OwogCiAJbWVtb3J5QDQwMDAwMDAwIHsKQEAgLTQyLDcgKzcxLDcgQEAKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJfTsKIAotCWdwaW9fa2V5cyB7CisJa2V5Ym9hcmQgewogCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CiAKIAkJYnV0dG9uQDEgewpAQCAtMTQ0LDYgKzE3Myw3MyBAQAogCQlzdGF0ZXMgPSA8MzMwMDAwMCAxCiAJCQkgIDE4MDAwMDAgMD47CiAJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYXVkaW8tY2FyZCI7CisKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZm9ybWF0ID0gImxlZnRfaiI7CisJCXNpbXBsZS1hdWRpby1jYXJkLGJpdGNsb2NrLW1hc3RlciA9IDwmc25kY29kZWM+OworCQlzaW1wbGUtYXVkaW8tY2FyZCxmcmFtZS1tYXN0ZXIgPSA8JnNuZGNvZGVjPjsKKworCQlzbmRjcHU6IHNpbXBsZS1hdWRpby1jYXJkLGNwdSB7CisJCQlzb3VuZC1kYWkgPSA8JnJjYXJfc291bmQ+OworCQl9OworCisJCXNuZGNvZGVjOiBzaW1wbGUtYXVkaW8tY2FyZCxjb2RlYyB7CisJCQlzb3VuZC1kYWkgPSA8JmFrNDY0Mz47CisJCQlzeXN0ZW0tY2xvY2stZnJlcXVlbmN5ID0gPDExMjg5NjAwPjsKKwkJfTsKKwl9OworCisJdmdhLWVuY29kZXIgeworCQljb21wYXRpYmxlID0gImFkaSxhZHY3MTIzIjsKKworCQlwb3J0cyB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQlwb3J0QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCQlhZHY3MTIzX2luOiBlbmRwb2ludCB7CisJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmZHVfb3V0X3JnYj47CisJCQkJfTsKKwkJCX07CisJCQlwb3J0QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCQlhZHY3MTIzX291dDogZW5kcG9pbnQgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnZnYV9pbj47CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKKworCXZnYSB7CisJCWNvbXBhdGlibGUgPSAidmdhLWNvbm5lY3RvciI7CisKKwkJcG9ydCB7CisJCQl2Z2FfaW46IGVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmFkdjcxMjNfb3V0PjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZkdSB7CisJcGluY3RybC0wID0gPCZkdV9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXN0YXR1cyA9ICJva2F5IjsKKworCXBvcnRzIHsKKwkJcG9ydEAwIHsKKwkJCWVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmFkdjcxMjNfaW4+OworCQkJfTsKKwkJfTsKKwkJcG9ydEAyIHsKKwkJCWx2ZHNfY29ubmVjdG9yOiBlbmRwb2ludCB7CisJCQl9OworCQl9OworCX07CiB9OwogCiAmZXh0YWxfY2xrIHsKQEAgLTE1MSwxNyArMjQ3LDE0IEBACiB9OwogCiAmcGZjIHsKLQlwaW5jdHJsLTAgPSA8JmR1X3BpbnM+OwotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0KIAlkdV9waW5zOiBkdSB7CiAJCXJlbmVzYXMsZ3JvdXBzID0gImR1X3JnYjY2NiIsICJkdV9zeW5jXzEiLCAiZHVfY2xrX291dF8wIjsKIAkJcmVuZXNhcyxmdW5jdGlvbiA9ICJkdSI7CiAJfTsKIAotCXNjaWYwX3BpbnM6IHNlcmlhbDAgewotCQlyZW5lc2FzLGdyb3VwcyA9ICJzY2lmMF9kYXRhIjsKLQkJcmVuZXNhcyxmdW5jdGlvbiA9ICJzY2lmMCI7CisJc2NpZmEwX3BpbnM6IHNlcmlhbDAgeworCQlyZW5lc2FzLGdyb3VwcyA9ICJzY2lmYTBfZGF0YSI7CisJCXJlbmVzYXMsZnVuY3Rpb24gPSAic2NpZmEwIjsKIAl9OwogCiAJZXRoZXJfcGluczogZXRoZXIgewpAQCAtMTc0LDkgKzI2Nyw5IEBACiAJCXJlbmVzYXMsZnVuY3Rpb24gPSAiaW50YyI7CiAJfTsKIAotCXNjaWYxX3BpbnM6IHNlcmlhbDEgewotCQlyZW5lc2FzLGdyb3VwcyA9ICJzY2lmMV9kYXRhIjsKLQkJcmVuZXNhcyxmdW5jdGlvbiA9ICJzY2lmMSI7CisJc2NpZmExX3BpbnM6IHNlcmlhbDEgeworCQlyZW5lc2FzLGdyb3VwcyA9ICJzY2lmYTFfZGF0YSI7CisJCXJlbmVzYXMsZnVuY3Rpb24gPSAic2NpZmExIjsKIAl9OwogCiAJc2RoaTBfcGluczogc2QwIHsKQEAgLTIyMCw2ICszMTMsMTEgQEAKIAkJcmVuZXNhcyxmdW5jdGlvbiA9ICJpaWMzIjsKIAl9OwogCisJaHN1c2JfcGluczogaHN1c2IgeworCQlyZW5lc2FzLGdyb3VwcyA9ICJ1c2IwX292Y192YnVzIjsKKwkJcmVuZXNhcyxmdW5jdGlvbiA9ICJ1c2IwIjsKKwl9OworCiAJdXNiMF9waW5zOiB1c2IwIHsKIAkJcmVuZXNhcyxncm91cHMgPSAidXNiMCI7CiAJCXJlbmVzYXMsZnVuY3Rpb24gPSAidXNiMCI7CkBAIC0yMzksNiArMzM3LDE2IEBACiAJCXJlbmVzYXMsZ3JvdXBzID0gInZpbjFfZGF0YTgiLCAidmluMV9jbGsiOwogCQlyZW5lc2FzLGZ1bmN0aW9uID0gInZpbjEiOwogCX07CisKKwlzb3VuZF9waW5zOiBzb3VuZCB7CisJCXJlbmVzYXMsZ3JvdXBzID0gInNzaTAxMjlfY3RybCIsICJzc2kwX2RhdGEiLCAic3NpMV9kYXRhIjsKKwkJcmVuZXNhcyxmdW5jdGlvbiA9ICJzc2kiOworCX07CisKKwlzb3VuZF9jbGtfcGluczogc291bmRfY2xrIHsKKwkJcmVuZXNhcyxncm91cHMgPSAiYXVkaW9fY2xrX2EiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gImF1ZGlvX2NsayI7CisJfTsKIH07CiAKICZldGhlciB7CkBAIC0zMDgsMTUgKzQxNiwxNSBAQAogCX07CiB9OwogCi0mc2NpZjAgewotCXBpbmN0cmwtMCA9IDwmc2NpZjBfcGlucz47Cismc2NpZmEwIHsKKwlwaW5jdHJsLTAgPSA8JnNjaWZhMF9waW5zPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAotJnNjaWYxIHsKLQlwaW5jdHJsLTAgPSA8JnNjaWYxX3BpbnM+OworJnNjaWZhMSB7CisJcGluY3RybC0wID0gPCZzY2lmYTFfcGlucz47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCXN0YXR1cyA9ICJva2F5IjsKQEAgLTM3Niw2ICs0ODQsMTQgQEAKIAlwaW5jdHJsLTAgPSA8JmlpYzJfcGlucz47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAorCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCisJYWs0NjQzOiBzb3VuZC1jb2RlY0AxMiB7CisJCWNvbXBhdGlibGUgPSAiYXNhaGkta2FzZWksYWs0NjQzIjsKKwkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKKwkJcmVnID0gPDB4MTI+OworCX07CisKIAljb21wb3NpdGUtaW5AMjAgewogCQljb21wYXRpYmxlID0gImFkaSxhZHY3MTgwIjsKIAkJcmVnID0gPDB4MjA+OwpAQCAtNDE4LDEyICs1MzQsMjkgQEAKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogfTsKIAorJnhoY2kgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLTAgPSA8JnVzYjJfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKK307CisKICZwY2kyIHsKIAlzdGF0dXMgPSAib2theSI7CiAJcGluY3RybC0wID0gPCZ1c2IyX3BpbnM+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiB9OwogCismaHN1c2IgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLTAgPSA8JmhzdXNiX3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcmVuZXNhcyxlbmFibGUtZ3BpbyA9IDwmZ3BpbzUgMTggR1BJT19BQ1RJVkVfSElHSD47Cit9OworCismdXNicGh5IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAvKiBjb21wb3NpdGUgdmlkZW8gaW5wdXQgKi8KICZ2aW4xIHsKIAlwaW5jdHJsLTAgPSA8JnZpbjFfcGlucz47CkBAIC00NDEsMyArNTc0LDIzIEBACiAJCX07CiAJfTsKIH07CisKKyZyY2FyX3NvdW5kIHsKKwlwaW5jdHJsLTAgPSA8JnNvdW5kX3BpbnMgJnNvdW5kX2Nsa19waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKKworCXN0YXR1cyA9ICJva2F5IjsKKworCXJjYXJfc291bmQsZGFpIHsKKwkJZGFpMCB7CisJCQlwbGF5YmFjayA9IDwmc3NpMCAmc3JjMiAmZHZjMD47CisJCQljYXB0dXJlICA9IDwmc3NpMSAmc3JjMyAmZHZjMT47CisJCX07CisJfTsKK307CisKKyZzc2kxIHsKKwlzaGFyZWQtcGluOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAuZHRzaQppbmRleCBlMjBhZmZlLi5hZjdlMjU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MC5kdHNpCkBAIC0zMTIsNiArMzEyLDcwIEBACiAJCSNkbWEtY2VsbHMgPSA8MT47CiAJCWRtYS1jaGFubmVscyA9IDwxNT47CiAJfTsKKworCWF1ZG1hMDogZG1hLWNvbnRyb2xsZXJAZWM3MDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMscmNhci1kbWFjIjsKKwkJcmVnID0gPDAgMHhlYzcwMDAwMCAwIDB4MTAwMDA+OworCQlpbnRlcnJ1cHRzID0JPDAgMzQ2IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjAgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyMSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzIyIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjMgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyNCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI1IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjYgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyNyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI4IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjkgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzMCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzMxIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWludGVycnVwdC1uYW1lcyA9ICJlcnJvciIsCisJCQkJImNoMCIsICJjaDEiLCAiY2gyIiwgImNoMyIsCisJCQkJImNoNCIsICJjaDUiLCAiY2g2IiwgImNoNyIsCisJCQkJImNoOCIsICJjaDkiLCAiY2gxMCIsICJjaDExIiwKKwkJCQkiY2gxMiI7CisJCWNsb2NrcyA9IDwmbXN0cDVfY2xrcyBSOEE3NzkwX0NMS19BVURJT19ETUFDMD47CisJCWNsb2NrLW5hbWVzID0gImZjayI7CisJCSNkbWEtY2VsbHMgPSA8MT47CisJCWRtYS1jaGFubmVscyA9IDwxMz47CisJfTsKKworCWF1ZG1hMTogZG1hLWNvbnRyb2xsZXJAZWM3MjAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMscmNhci1kbWFjIjsKKwkJcmVnID0gPDAgMHhlYzcyMDAwMCAwIDB4MTAwMDA+OworCQlpbnRlcnJ1cHRzID0JPDAgMzQ3IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzMgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzNCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM1IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzYgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzNyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM4IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzkgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0MCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQxIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDIgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0MyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQ0IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWludGVycnVwdC1uYW1lcyA9ICJlcnJvciIsCisJCQkJImNoMCIsICJjaDEiLCAiY2gyIiwgImNoMyIsCisJCQkJImNoNCIsICJjaDUiLCAiY2g2IiwgImNoNyIsCisJCQkJImNoOCIsICJjaDkiLCAiY2gxMCIsICJjaDExIiwKKwkJCQkiY2gxMiI7CisJCWNsb2NrcyA9IDwmbXN0cDVfY2xrcyBSOEE3NzkwX0NMS19BVURJT19ETUFDMT47CisJCWNsb2NrLW5hbWVzID0gImZjayI7CisJCSNkbWEtY2VsbHMgPSA8MT47CisJCWRtYS1jaGFubmVscyA9IDwxMz47CisJfTsKKworCWF1ZG1hcHA6IGRtYS1jb250cm9sbGVyQGVjNzQwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJjYXItYXVkbWFwcCI7CisJCSNkbWEtY2VsbHMgPSA8MT47CisKKwkJcmVnID0gPDAgMHhlYzc0MDAwMCAwIDB4MjAwPjsKKwl9OworCiAJaTJjMDogaTJjQGU2NTA4MDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwpAQCAtMzU5LDYgKzQyMyw4IEBACiAJCXJlZyA9IDwwIDB4ZTY1MDAwMDAgMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNzQgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19JSUMwPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHg2MT4sIDwmZG1hYzAgMHg2Mj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzY5LDYgKzQzNSw4IEBACiAJCXJlZyA9IDwwIDB4ZTY1MTAwMDAgMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNzUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19JSUMxPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHg2NT4sIDwmZG1hYzAgMHg2Nj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzc5LDYgKzQ0Nyw4IEBACiAJCXJlZyA9IDwwIDB4ZTY1MjAwMDAgMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNzYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19JSUMyPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHg2OT4sIDwmZG1hYzAgMHg2YT47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzg5LDE0ICs0NTksMTggQEAKIAkJcmVnID0gPDAgMHhlNjBiMDAwMCAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI4QTc3OTBfQ0xLX0lJQ0RWRlM+OworCQlkbWFzID0gPCZkbWFjMCAweDc3PiwgPCZkbWFjMCAweDc4PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCi0JbW1jaWYwOiBtbWNpZkBlZTIwMDAwMCB7CisJbW1jaWYwOiBtbWNAZWUyMDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsbW1jaWYtcjhhNzc5MCIsICJyZW5lc2FzLHNoLW1tY2lmIjsKIAkJcmVnID0gPDAgMHhlZTIwMDAwMCAwIDB4ODA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MF9DTEtfTU1DSUYwPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHhkMT4sIDwmZG1hYzAgMHhkMj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXJlZy1pby13aWR0aCA9IDw0PjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtNDA2LDYgKzQ4MCw4IEBACiAJCXJlZyA9IDwwIDB4ZWUyMjAwMDAgMCAweDgwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX01NQ0lGMT47CisJCWRtYXMgPSA8JmRtYWMwIDB4ZTE+LCA8JmRtYWMwIDB4ZTI+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQlyZWctaW8td2lkdGggPSA8ND47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKQEAgLTQyMCw3ICs0OTYsNiBAQAogCQlyZWcgPSA8MCAweGVlMTAwMDAwIDAgMHgyMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTY1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MF9DTEtfU0RISTA+OwotCQljYXAtc2QtaGlnaHNwZWVkOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTQyOSw3ICs1MDQsNiBAQAogCQlyZWcgPSA8MCAweGVlMTIwMDAwIDAgMHgyMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTY2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MF9DTEtfU0RISTE+OwotCQljYXAtc2QtaGlnaHNwZWVkOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTQzOCw3ICs1MTIsNiBAQAogCQlyZWcgPSA8MCAweGVlMTQwMDAwIDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTY3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MF9DTEtfU0RISTI+OwotCQljYXAtc2QtaGlnaHNwZWVkOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTQ0Nyw3ICs1MjAsNiBAQAogCQlyZWcgPSA8MCAweGVlMTYwMDAwIDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTY4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MF9DTEtfU0RISTM+OwotCQljYXAtc2QtaGlnaHNwZWVkOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTU2OCw2ICs2NDAsMzYgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJaHN1c2I6IHVzYkBlNjU5MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx1c2Jocy1yOGE3NzkwIjsKKwkJcmVnID0gPDAgMHhlNjU5MDAwMCAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDEwNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwN19jbGtzIFI4QTc3OTBfQ0xLX0hTVVNCPjsKKwkJcmVuZXNhcyxidXN3YWl0ID0gPDQ+OworCQlwaHlzID0gPCZ1c2IwIDE+OworCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJdXNicGh5OiB1c2ItcGh5QGU2NTkwMTAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHVzYi1waHktcjhhNzc5MCI7CisJCXJlZyA9IDwwIDB4ZTY1OTAxMDAgMCAweDEwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY2xvY2tzID0gPCZtc3RwN19jbGtzIFI4QTc3OTBfQ0xLX0hTVVNCPjsKKwkJY2xvY2stbmFtZXMgPSAidXNiaHMiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCXVzYjA6IHVzYi1jaGFubmVsQDAgeworCQkJcmVnID0gPDA+OworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJfTsKKwkJdXNiMjogdXNiLWNoYW5uZWxAMiB7CisJCQlyZWcgPSA8Mj47CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQl9OworCX07CisKIAl2aW4wOiB2aWRlb0BlNmVmMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx2aW4tcjhhNzc5MCI7CiAJCWNsb2NrcyA9IDwmbXN0cDhfY2xrcyBSOEE3NzkwX0NMS19WSU4wPjsKQEAgLTYwMCw2ICs3MDIsOTYgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJdnNwMUBmZTkyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx2c3AxIjsKKwkJcmVnID0gPDAgMHhmZTkyMDAwMCAwIDB4ODAwMD47CisJCWludGVycnVwdHMgPSA8MCAyNjYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDFfY2xrcyBSOEE3NzkwX0NMS19WU1AxX1I+OworCisJCXJlbmVzYXMsaGFzLXNydTsKKwkJcmVuZXNhcywjcnBmID0gPDU+OworCQlyZW5lc2FzLCN1ZHMgPSA8MT47CisJCXJlbmVzYXMsI3dwZiA9IDw0PjsKKwl9OworCisJdnNwMUBmZTkyODAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx2c3AxIjsKKwkJcmVnID0gPDAgMHhmZTkyODAwMCAwIDB4ODAwMD47CisJCWludGVycnVwdHMgPSA8MCAyNjcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDFfY2xrcyBSOEE3NzkwX0NMS19WU1AxX1M+OworCisJCXJlbmVzYXMsaGFzLWx1dDsKKwkJcmVuZXNhcyxoYXMtc3J1OworCQlyZW5lc2FzLCNycGYgPSA8NT47CisJCXJlbmVzYXMsI3VkcyA9IDwzPjsKKwkJcmVuZXNhcywjd3BmID0gPDQ+OworCX07CisKKwl2c3AxQGZlOTMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHZzcDEiOworCQlyZWcgPSA8MCAweGZlOTMwMDAwIDAgMHg4MDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDI0NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3OTBfQ0xLX1ZTUDFfRFUwPjsKKworCQlyZW5lc2FzLGhhcy1saWY7CisJCXJlbmVzYXMsaGFzLWx1dDsKKwkJcmVuZXNhcywjcnBmID0gPDQ+OworCQlyZW5lc2FzLCN1ZHMgPSA8MT47CisJCXJlbmVzYXMsI3dwZiA9IDw0PjsKKwl9OworCisJdnNwMUBmZTkzODAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx2c3AxIjsKKwkJcmVnID0gPDAgMHhmZTkzODAwMCAwIDB4ODAwMD47CisJCWludGVycnVwdHMgPSA8MCAyNDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDFfY2xrcyBSOEE3NzkwX0NMS19WU1AxX0RVMT47CisKKwkJcmVuZXNhcyxoYXMtbGlmOworCQlyZW5lc2FzLGhhcy1sdXQ7CisJCXJlbmVzYXMsI3JwZiA9IDw0PjsKKwkJcmVuZXNhcywjdWRzID0gPDE+OworCQlyZW5lc2FzLCN3cGYgPSA8ND47CisJfTsKKworCWR1OiBkaXNwbGF5QGZlYjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGR1LXI4YTc3OTAiOworCQlyZWcgPSA8MCAweGZlYjAwMDAwIDAgMHg3MDAwMD4sCisJCSAgICAgIDwwIDB4ZmViOTAwMDAgMCAweDFjPiwKKwkJICAgICAgPDAgMHhmZWI5NDAwMCAwIDB4MWM+OworCQlyZWctbmFtZXMgPSAiZHUiLCAibHZkcy4wIiwgImx2ZHMuMSI7CisJCWludGVycnVwdHMgPSA8MCAyNTYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDI2OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMjY5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA3X2Nsa3MgUjhBNzc5MF9DTEtfRFUwPiwKKwkJCSA8Jm1zdHA3X2Nsa3MgUjhBNzc5MF9DTEtfRFUxPiwKKwkJCSA8Jm1zdHA3X2Nsa3MgUjhBNzc5MF9DTEtfRFUyPiwKKwkJCSA8Jm1zdHA3X2Nsa3MgUjhBNzc5MF9DTEtfTFZEUzA+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkwX0NMS19MVkRTMT47CisJCWNsb2NrLW5hbWVzID0gImR1LjAiLCAiZHUuMSIsICJkdS4yIiwgImx2ZHMuMCIsICJsdmRzLjEiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWR1X291dF9yZ2I6IGVuZHBvaW50IHsKKwkJCQl9OworCQkJfTsKKwkJCXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCWR1X291dF9sdmRzMDogZW5kcG9pbnQgeworCQkJCX07CisJCQl9OworCQkJcG9ydEAyIHsKKwkJCQlyZWcgPSA8Mj47CisJCQkJZHVfb3V0X2x2ZHMxOiBlbmRwb2ludCB7CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKKwogCWNsb2NrcyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTg2OCwxOCArMTA2MCwyNSBAQAogCQltc3RwMV9jbGtzOiBtc3RwMV9jbGtzQGU2MTUwMTM0IHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTAxMzQgMCA0PiwgPDAgMHhlNjE1MDAzOCAwIDQ+OwotCQkJY2xvY2tzID0gPCZtMl9jbGs+LCA8JnBfY2xrPiwgPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JnJjbGtfY2xrPiwKLQkJCQkgPCZjcF9jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+LAotCQkJCSA8JnpzX2Nsaz47CisJCQljbG9ja3MgPSA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmbTJfY2xrPiwKKwkJCQkgPCZ6c19jbGs+LCA8JnBfY2xrPiwgPCZ6Z19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwKKwkJCQkgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZyY2xrX2Nsaz4sCisJCQkJIDwmY3BfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+OwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPAotCQkJCVI4QTc3OTBfQ0xLX0pQVSBSOEE3NzkwX0NMS19UTVUxIFI4QTc3OTBfQ0xLX1RNVTMgUjhBNzc5MF9DTEtfVE1VMgotCQkJCVI4QTc3OTBfQ0xLX0NNVDAgUjhBNzc5MF9DTEtfVE1VMCBSOEE3NzkwX0NMS19WU1AxX0RVMQotCQkJCVI4QTc3OTBfQ0xLX1ZTUDFfRFUwIFI4QTc3OTBfQ0xLX1ZTUDFfUiBSOEE3NzkwX0NMS19WU1AxX1MKKwkJCQlSOEE3NzkwX0NMS19WQ1AxIFI4QTc3OTBfQ0xLX1ZDUDAgUjhBNzc5MF9DTEtfVlBDMQorCQkJCVI4QTc3OTBfQ0xLX1ZQQzAgUjhBNzc5MF9DTEtfSlBVIFI4QTc3OTBfQ0xLX1NTUDEKKwkJCQlSOEE3NzkwX0NMS19UTVUxIFI4QTc3OTBfQ0xLXzNERyBSOEE3NzkwX0NMS18yRERNQUMKKwkJCQlSOEE3NzkwX0NMS19GRFAxXzIgUjhBNzc5MF9DTEtfRkRQMV8xIFI4QTc3OTBfQ0xLX0ZEUDFfMAorCQkJCVI4QTc3OTBfQ0xLX1RNVTMgUjhBNzc5MF9DTEtfVE1VMiBSOEE3NzkwX0NMS19DTVQwCisJCQkJUjhBNzc5MF9DTEtfVE1VMCBSOEE3NzkwX0NMS19WU1AxX0RVMSBSOEE3NzkwX0NMS19WU1AxX0RVMAorCQkJCVI4QTc3OTBfQ0xLX1ZTUDFfUiBSOEE3NzkwX0NMS19WU1AxX1MKIAkJCT47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPQotCQkJCSJqcHUiLCAidG11MSIsICJ0bXUzIiwgInRtdTIiLCAiY210MCIsICJ0bXUwIiwgInZzcDEtZHUxIiwKLQkJCQkidnNwMS1kdTAiLCAidnNwMS1ydCIsICJ2c3AxLXN5IjsKKwkJCQkidmNwMSIsICJ2Y3AwIiwgInZwYzEiLCAidnBjMCIsICJqcHUiLCAic3NwMSIsCisJCQkJInRtdTEiLCAiM2RnIiwgIjJkZG1hYyIsICJmZHAxLTIiLCAiZmRwMS0xIiwKKwkJCQkiZmRwMS0wIiwgInRtdTMiLCAidG11MiIsICJjbXQwIiwgInRtdTAiLAorCQkJCSJ2c3AxLWR1MSIsICJ2c3AxLWR1MCIsICJ2c3AxLXJ0IiwgInZzcDEtc3kiOwogCQl9OwogCQltc3RwMl9jbGtzOiBtc3RwMl9jbGtzQGU2MTUwMTM4IHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKQEAgLTkwNCwyNSArMTEwMywyOSBAQAogCQkJcmVnID0gPDAgMHhlNjE1MDEzYyAwIDQ+LCA8MCAweGU2MTUwMDQ4IDAgND47CiAJCQljbG9ja3MgPSA8JmhwX2Nsaz4sIDwmY3BfY2xrPiwgPCZtbWMxX2Nsaz4sIDwmc2QzX2Nsaz4sCiAJCQkJIDwmc2QyX2Nsaz4sIDwmY3BnX2Nsb2NrcyBSOEE3NzkwX0NMS19TRDE+LCA8JmNwZ19jbG9ja3MgUjhBNzc5MF9DTEtfU0QwPiwgPCZtbWMwX2Nsaz4sCi0JCQkJIDwmaHBfY2xrPiwgPCZtcF9jbGs+LCA8JmhwX2Nsaz4sIDwmbXBfY2xrPiwgPCZyY2xrX2Nsaz47CisJCQkJIDwmaHBfY2xrPiwgPCZtcF9jbGs+LCA8JmhwX2Nsaz4sIDwmbXBfY2xrPiwgPCZyY2xrX2Nsaz4sCisJCQkJIDwmaHBfY2xrPiwgPCZocF9jbGs+OwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPAogCQkJCVI4QTc3OTBfQ0xLX0lJQzIgUjhBNzc5MF9DTEtfVFBVMCBSOEE3NzkwX0NMS19NTUNJRjEgUjhBNzc5MF9DTEtfU0RISTMKIAkJCQlSOEE3NzkwX0NMS19TREhJMiBSOEE3NzkwX0NMS19TREhJMSBSOEE3NzkwX0NMS19TREhJMCBSOEE3NzkwX0NMS19NTUNJRjAKIAkJCQlSOEE3NzkwX0NMS19JSUMwIFI4QTc3OTBfQ0xLX1BDSUVDIFI4QTc3OTBfQ0xLX0lJQzEgUjhBNzc5MF9DTEtfU1NVU0IgUjhBNzc5MF9DTEtfQ01UMQorCQkJCVI4QTc3OTBfQ0xLX1VTQkRNQUMwIFI4QTc3OTBfQ0xLX1VTQkRNQUMxCiAJCQk+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0KIAkJCQkiaWljMiIsICJ0cHUwIiwgIm1tY2lmMSIsICJzZGhpMyIsCiAJCQkJInNkaGkyIiwgInNkaGkxIiwgInNkaGkwIiwgIm1tY2lmMCIsCi0JCQkJImlpYzAiLCAicGNpZWMiLCAiaWljMSIsICJzc3VzYiIsICJjbXQxIjsKKwkJCQkiaWljMCIsICJwY2llYyIsICJpaWMxIiwgInNzdXNiIiwgImNtdDEiLAorCQkJCSJ1c2JkbWFjMCIsICJ1c2JkbWFjMSI7CiAJCX07CiAJCW1zdHA1X2Nsa3M6IG1zdHA1X2Nsa3NAZTYxNTAxNDQgewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTAtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwogCQkJcmVnID0gPDAgMHhlNjE1MDE0NCAwIDQ+LCA8MCAweGU2MTUwMDNjIDAgND47Ci0JCQljbG9ja3MgPSA8JmV4dGFsX2Nsaz4sIDwmcF9jbGs+OworCQkJY2xvY2tzID0gPCZocF9jbGs+LCA8JmhwX2Nsaz4sIDwmZXh0YWxfY2xrPiwgPCZwX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47Ci0JCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8UjhBNzc5MF9DTEtfVEhFUk1BTCBSOEE3NzkwX0NMS19QV00+OwotCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInRoZXJtYWwiLCAicHdtIjsKKwkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDxSOEE3NzkwX0NMS19BVURJT19ETUFDMCBSOEE3NzkwX0NMS19BVURJT19ETUFDMQorCQkJCQkJIFI4QTc3OTBfQ0xLX1RIRVJNQUwgUjhBNzc5MF9DTEtfUFdNPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhdWRtYWMwIiwgImF1ZG1hYzEiLCAidGhlcm1hbCIsICJwd20iOwogCQl9OwogCQltc3RwN19jbGtzOiBtc3RwN19jbGtzQGU2MTUwMTRjIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKQEAgLTEwNzAsNiArMTI3MywxNiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwl4aGNpOiB1c2JAZWUwMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMseGhjaS1yOGE3NzkwIjsKKwkJcmVnID0gPDAgMHhlZTAwMDAwMCAwIDB4YzAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDEwMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX1NTVVNCPjsKKwkJcGh5cyA9IDwmdXNiMiAxPjsKKwkJcGh5LW5hbWVzID0gInVzYiI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXBjaTA6IHBjaUBlZTA5MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxwY2ktcjhhNzc5MCI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CkBAIC0xMDg4LDYgKzEzMDEsMjAgQEAKIAkJaW50ZXJydXB0LW1hcCA9IDwweDAwMDAgMCAwIDEgJmdpYyAwIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkJIDB4MDgwMCAwIDAgMSAmZ2ljIDAgMTA4IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgxMDAwIDAgMCAyICZnaWMgMCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJdXNiQDAsMSB7CisJCQlyZWcgPSA8MHg4MDAgMCAwIDAgMD47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcGh5cyA9IDwmdXNiMCAwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQl9OworCisJCXVzYkAwLDIgeworCQkJcmVnID0gPDB4MTAwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IwIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CiAJfTsKIAogCXBjaTE6IHBjaUBlZTBiMDAwMCB7CkBAIC0xMTI4LDYgKzEzNTUsMjAgQEAKIAkJaW50ZXJydXB0LW1hcCA9IDwweDAwMDAgMCAwIDEgJmdpYyAwIDExMyBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkJIDB4MDgwMCAwIDAgMSAmZ2ljIDAgMTEzIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgxMDAwIDAgMCAyICZnaWMgMCAxMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJdXNiQDAsMSB7CisJCQlyZWcgPSA8MHg4MDAgMCAwIDAgMD47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcGh5cyA9IDwmdXNiMiAwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQl9OworCisJCXVzYkAwLDIgeworCQkJcmVnID0gPDB4MTAwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IyIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CiAJfTsKIAogCXBjaWVjOiBwY2llQGZlMDAwMDAwIHsKQEAgLTExNTUsNyArMTM5Niw3IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCXJjYXJfc291bmQ6IHJjYXJfc291bmRAMHhlYzUwMDAwMCB7CisJcmNhcl9zb3VuZDogcmNhcl9zb3VuZEBlYzUwMDAwMCB7CiAJCSNzb3VuZC1kYWktY2VsbHMgPSA8MT47CiAJCWNvbXBhdGlibGUgPSAgInJlbmVzYXMscmNhcl9zb3VuZC1yOGE3NzkwIiwgInJlbmVzYXMscmNhcl9zb3VuZC1nZW4yIiwgInJlbmVzYXMscmNhcl9zb3VuZCI7CiAJCXJlZyA9CTwwIDB4ZWM1MDAwMDAgMCAweDEwMDA+LCAvKiBTQ1UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEtaGVubmluZ2VyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEtaGVubmluZ2VyLmR0cwppbmRleCBmMWI1NmRlMS4uNzQwZTM4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS1oZW5uaW5nZXIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEtaGVubmluZ2VyLmR0cwpAQCAtMjMsNiArMjMsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTQzAsMzg0MDAgaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWYwOwogCX07CiAKIAltZW1vcnlANDAwMDAwMDAgewpAQCAtMjcxLDYgKzI3MiwxNyBAQAogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiB9OwogCismaHN1c2IgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLTAgPSA8JnVzYjBfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlyZW5lc2FzLGVuYWJsZS1ncGlvID0gPCZncGlvNSAzMSBHUElPX0FDVElWRV9ISUdIPjsKK307CisKKyZ1c2JwaHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZwY2llX2J1c19jbGsgewogCXN0YXR1cyA9ICJva2F5IjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLWtvZWxzY2guZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS1rb2Vsc2NoLmR0cwppbmRleCAwNzU1MGU3Li45OTBhZjE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLWtvZWxzY2guZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEta29lbHNjaC5kdHMKQEAgLTEwLDYgKzEwLDM0IEBACiAgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCisvKgorICogU1NJLUFLNDY0MworICoKKyAqIFNXMTogMTogQUs0NjQzCisgKiAgICAgIDI6IENOMjIKKyAqICAgICAgMzogQURWNzUxMQorICoKKyAqIFRoaXMgY29tbWFuZCBpcyByZXF1aXJlZCB3aGVuIFBsYXliYWNrL0NhcHR1cmUKKyAqCisgKglhbWl4ZXIgc2V0ICJMSU5FT1VUIE1peGVyIERBQ0wiIG9uCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IiAxMDAlCisgKglhbWl4ZXIgc2V0ICJEVkMgSW4iIDEwMCUKKyAqCisgKiBZb3UgY2FuIHVzZSBNdXRlCisgKgorICoJYW1peGVyIHNldCAiRFZDIE91dCBNdXRlIiBvbgorICoJYW1peGVyIHNldCAiRFZDIEluIE11dGUiIG9uCisgKgorICogWW91IGNhbiB1c2UgVm9sdW1lIFJhbXAKKyAqCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IFJhbXAgVXAgUmF0ZSIgICAiMC4xMjUgZEIvNjQgc3RlcHMiCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IFJhbXAgRG93biBSYXRlIiAiMC4xMjUgZEIvNTEyIHN0ZXBzIgorICoJYW1peGVyIHNldCAiRFZDIE91dCBSYW1wIiBvbgorICoJYXBsYXkgeHh4LndhdiAmCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IiAgODAlICAvLyBWb2x1bWUgRG93bgorICoJYW1peGVyIHNldCAiRFZDIE91dCIgMTAwJSAgLy8gVm9sdW1lIFVwCisgKi8KKwogL2R0cy12MS87CiAjaW5jbHVkZSAicjhhNzc5MS5kdHNpIgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgpAQCAtMjUsNyArNTMsOCBAQAogCX07CiAKIAljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDNiwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCWJvb3RhcmdzID0gImlnbm9yZV9sb2dsZXZlbCBydyByb290PS9kZXYvbmZzIGlwPWRoY3AiOworCQlzdGRvdXQtcGF0aCA9ICZzY2lmMDsKIAl9OwogCiAJbWVtb3J5QDQwMDAwMDAwIHsKQEAgLTQzLDcgKzcyLDcgQEAKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJfTsKIAotCWdwaW8ta2V5cyB7CisJa2V5Ym9hcmQgewogCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CiAKIAkJa2V5LTEgewpAQCAtMTI5LDEyICsxNTgsMTUgQEAKIAkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOwogCQlsZWQ2IHsKIAkJCWdwaW9zID0gPCZncGlvMiAxOSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxhYmVsID0gIkxFRDYiOwogCQl9OwogCQlsZWQ3IHsKIAkJCWdwaW9zID0gPCZncGlvMiAyMCBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxhYmVsID0gIkxFRDciOwogCQl9OwogCQlsZWQ4IHsKIAkJCWdwaW9zID0gPCZncGlvMiAyMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxhYmVsID0gIkxFRDgiOwogCQl9OwogCX07CiAKQEAgLTIwOSw2ICsyNDEsMzYgQEAKIAkJc3RhdGVzID0gPDMzMDAwMDAgMQogCQkJICAxODAwMDAwIDA+OwogCX07CisKKwlzb3VuZCB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWF1ZGlvLWNhcmQiOworCisJCXNpbXBsZS1hdWRpby1jYXJkLGZvcm1hdCA9ICJsZWZ0X2oiOworCQlzaW1wbGUtYXVkaW8tY2FyZCxiaXRjbG9jay1tYXN0ZXIgPSA8JnNuZGNvZGVjPjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZnJhbWUtbWFzdGVyID0gPCZzbmRjb2RlYz47CisKKwkJc25kY3B1OiBzaW1wbGUtYXVkaW8tY2FyZCxjcHUgeworCQkJc291bmQtZGFpID0gPCZyY2FyX3NvdW5kPjsKKwkJfTsKKworCQlzbmRjb2RlYzogc2ltcGxlLWF1ZGlvLWNhcmQsY29kZWMgeworCQkJc291bmQtZGFpID0gPCZhazQ2NDM+OworCQkJc3lzdGVtLWNsb2NrLWZyZXF1ZW5jeSA9IDwxMTI4OTYwMD47CisJCX07CisJfTsKK307CisKKyZkdSB7CisJcGluY3RybC0wID0gPCZkdV9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXN0YXR1cyA9ICJva2F5IjsKKworCXBvcnRzIHsKKwkJcG9ydEAxIHsKKwkJCWx2ZHNfY29ubmVjdG9yOiBlbmRwb2ludCB7CisJCQl9OworCQl9OworCX07CiB9OwogCiAmZXh0YWxfY2xrIHsKQEAgLTIxNiw5ICsyNzgsNiBAQAogfTsKIAogJnBmYyB7Ci0JcGluY3RybC0wID0gPCZkdV9waW5zPjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCiAJaTJjMl9waW5zOiBpMmMyIHsKIAkJcmVuZXNhcyxncm91cHMgPSAiaTJjMiI7CiAJCXJlbmVzYXMsZnVuY3Rpb24gPSAiaTJjMiI7CkBAIC0yODksNiArMzQ4LDE2IEBACiAJCXJlbmVzYXMsZ3JvdXBzID0gInZpbjFfZGF0YTgiLCAidmluMV9jbGsiOwogCQlyZW5lc2FzLGZ1bmN0aW9uID0gInZpbjEiOwogCX07CisKKwlzb3VuZF9waW5zOiBzb3VuZCB7CisJCXJlbmVzYXMsZ3JvdXBzID0gInNzaTAxMjlfY3RybCIsICJzc2kwX2RhdGEiLCAic3NpMV9kYXRhIjsKKwkJcmVuZXNhcyxmdW5jdGlvbiA9ICJzc2kiOworCX07CisKKwlzb3VuZF9jbGtfcGluczogc291bmRfY2xrIHsKKwkJcmVuZXNhcyxncm91cHMgPSAiYXVkaW9fY2xrX2EiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gImF1ZGlvX2NsayI7CisJfTsKIH07CiAKICZldGhlciB7CkBAIC00MTQsNyArNDgzLDEzIEBACiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCXN0YXR1cyA9ICJva2F5IjsKLQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKworCWFrNDY0Mzogc291bmQtY29kZWNAMTIgeworCQljb21wYXRpYmxlID0gImFzYWhpLWthc2VpLGFrNDY0MyI7CisJCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CisJCXJlZyA9IDwweDEyPjsKKwl9OwogCiAJY29tcG9zaXRlLWluQDIwIHsKIAkJY29tcGF0aWJsZSA9ICJhZGksYWR2NzE4MCI7CkBAIC00NjMsNiArNTM4LDE3IEBACiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIH07CiAKKyZoc3VzYiB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtMCA9IDwmdXNiMF9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXJlbmVzYXMsZW5hYmxlLWdwaW8gPSA8JmdwaW81IDMxIEdQSU9fQUNUSVZFX0hJR0g+OworfTsKKworJnVzYnBoeSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnBjaWVfYnVzX2NsayB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKQEAgLTQ5MSwzICs1NzcsMjMgQEAKIAkJfTsKIAl9OwogfTsKKworJnJjYXJfc291bmQgeworCXBpbmN0cmwtMCA9IDwmc291bmRfcGlucyAmc291bmRfY2xrX3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkjc291bmQtZGFpLWNlbGxzID0gPDA+OworCisJc3RhdHVzID0gIm9rYXkiOworCisJcmNhcl9zb3VuZCxkYWkgeworCQlkYWkwIHsKKwkJCXBsYXliYWNrID0gPCZzc2kwICZzcmMyICZkdmMwPjsKKwkJCWNhcHR1cmUgID0gPCZzc2kxICZzcmMzICZkdmMxPjsKKwkJfTsKKwl9OworfTsKKworJnNzaTEgeworCXNoYXJlZC1waW47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS5kdHNpCmluZGV4IGUwNmMxMWYuLjc3YzBiZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLmR0c2kKQEAgLTEsNyArMSw3IEBACiAvKgogICogRGV2aWNlIFRyZWUgU291cmNlIGZvciB0aGUgcjhhNzc5MSBTb0MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KICAqIENvcHlyaWdodCAoQykgMjAxNCBDb2dlbnQgRW1iZWRkZWQgSW5jLgogICoKQEAgLTMwMSw2ICszMDEsNjkgQEAKIAkJZG1hLWNoYW5uZWxzID0gPDE1PjsKIAl9OwogCisJYXVkbWEwOiBkbWEtY29udHJvbGxlckBlYzcwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLWRtYWMiOworCQlyZWcgPSA8MCAweGVjNzAwMDAwIDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPQk8MCAzNDYgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyMCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzIxIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjIgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyMyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI0IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjUgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyNiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI3IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjggSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyOSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzMwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gImVycm9yIiwKKwkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKKwkJCQkiY2g0IiwgImNoNSIsICJjaDYiLCAiY2g3IiwKKwkJCQkiY2g4IiwgImNoOSIsICJjaDEwIiwgImNoMTEiLAorCQkJCSJjaDEyIjsKKwkJY2xvY2tzID0gPCZtc3RwNV9jbGtzIFI4QTc3OTFfQ0xLX0FVRElPX0RNQUMwPjsKKwkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKwkJZG1hLWNoYW5uZWxzID0gPDEzPjsKKwl9OworCisJYXVkbWExOiBkbWEtY29udHJvbGxlckBlYzcyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLWRtYWMiOworCQlyZWcgPSA8MCAweGVjNzIwMDAwIDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPQk8MCAzNDcgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzMyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM0IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzUgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzNiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM3IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzggSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzOSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0MiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQzIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gImVycm9yIiwKKwkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKKwkJCQkiY2g0IiwgImNoNSIsICJjaDYiLCAiY2g3IiwKKwkJCQkiY2g4IiwgImNoOSIsICJjaDEwIiwgImNoMTEiLAorCQkJCSJjaDEyIjsKKwkJY2xvY2tzID0gPCZtc3RwNV9jbGtzIFI4QTc3OTFfQ0xLX0FVRElPX0RNQUMxPjsKKwkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKwkJZG1hLWNoYW5uZWxzID0gPDEzPjsKKwl9OworCisJYXVkbWFwcDogZG1hLWNvbnRyb2xsZXJAZWM3NDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMscmNhci1hdWRtYXBwIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKworCQlyZWcgPSA8MCAweGVjNzQwMDAwIDAgMHgyMDA+OworCX07CisKIAkvKiBUaGUgbWVtb3J5IG1hcCBpbiB0aGUgVXNlcidzIE1hbnVhbCBtYXBzIHRoZSBjb3JlcyB0byBidXMgbnVtYmVycyAqLwogCWkyYzA6IGkyY0BlNjUwODAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMzcxLDYgKzQzNCw4IEBACiAJCXJlZyA9IDwwIDB4ZTYwYjAwMDAgMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSOEE3NzkxX0NMS19JSUNEVkZTPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHg3Nz4sIDwmZG1hYzAgMHg3OD47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzgxLDYgKzQ0Niw4IEBACiAJCXJlZyA9IDwwIDB4ZTY1MDAwMDAgMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNzQgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkxX0NMS19JSUMwPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHg2MT4sIDwmZG1hYzAgMHg2Mj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzkxLDYgKzQ1OCw4IEBACiAJCXJlZyA9IDwwIDB4ZTY1MTAwMDAgMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNzUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkxX0NMS19JSUMxPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHg2NT4sIDwmZG1hYzAgMHg2Nj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNDAwLDYgKzQ2OSwxNyBAQAogCQkjZ3Bpby1yYW5nZS1jZWxscyA9IDwzPjsKIAl9OwogCisJbW1jaWYwOiBtbWNAZWUyMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsbW1jaWYtcjhhNzc5MSIsICJyZW5lc2FzLHNoLW1tY2lmIjsKKwkJcmVnID0gPDAgMHhlZTIwMDAwMCAwIDB4ODA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MV9DTEtfTU1DSUYwPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHhkMT4sIDwmZG1hYzAgMHhkMj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJc2RoaTA6IHNkQGVlMTAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc5MSI7CiAJCXJlZyA9IDwwIDB4ZWUxMDAwMDAgMCAweDIwMD47CkBAIC02MTMsNiArNjkzLDM2IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCWhzdXNiOiB1c2JAZTY1OTAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdXNiaHMtcjhhNzc5MSI7CisJCXJlZyA9IDwwIDB4ZTY1OTAwMDAgMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8MCAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDdfY2xrcyBSOEE3NzkxX0NMS19IU1VTQj47CisJCXJlbmVzYXMsYnVzd2FpdCA9IDw0PjsKKwkJcGh5cyA9IDwmdXNiMCAxPjsKKwkJcGh5LW5hbWVzID0gInVzYiI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVzYnBoeTogdXNiLXBoeUBlNjU5MDEwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx1c2ItcGh5LXI4YTc3OTEiOworCQlyZWcgPSA8MCAweGU2NTkwMTAwIDAgMHgxMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNsb2NrcyA9IDwmbXN0cDdfY2xrcyBSOEE3NzkxX0NMS19IU1VTQj47CisJCWNsb2NrLW5hbWVzID0gInVzYmhzIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQl1c2IwOiB1c2ItY2hhbm5lbEAwIHsKKwkJCXJlZyA9IDwwPjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCX07CisJCXVzYjI6IHVzYi1jaGFubmVsQDIgeworCQkJcmVnID0gPDI+OworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJfTsKKwl9OworCiAJdmluMDogdmlkZW9AZTZlZjAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsdmluLXI4YTc3OTEiOwogCQljbG9ja3MgPSA8Jm1zdHA4X2Nsa3MgUjhBNzc5MV9DTEtfVklOMD47CkBAIC02MzcsNiArNzQ3LDc1IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXZzcDFAZmU5MjgwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdnNwMSI7CisJCXJlZyA9IDwwIDB4ZmU5MjgwMDAgMCAweDgwMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMjY3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAxX2Nsa3MgUjhBNzc5MV9DTEtfVlNQMV9TPjsKKworCQlyZW5lc2FzLGhhcy1sdXQ7CisJCXJlbmVzYXMsaGFzLXNydTsKKwkJcmVuZXNhcywjcnBmID0gPDU+OworCQlyZW5lc2FzLCN1ZHMgPSA8Mz47CisJCXJlbmVzYXMsI3dwZiA9IDw0PjsKKwl9OworCisJdnNwMUBmZTkzMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx2c3AxIjsKKwkJcmVnID0gPDAgMHhmZTkzMDAwMCAwIDB4ODAwMD47CisJCWludGVycnVwdHMgPSA8MCAyNDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDFfY2xrcyBSOEE3NzkxX0NMS19WU1AxX0RVMD47CisKKwkJcmVuZXNhcyxoYXMtbGlmOworCQlyZW5lc2FzLGhhcy1sdXQ7CisJCXJlbmVzYXMsI3JwZiA9IDw0PjsKKwkJcmVuZXNhcywjdWRzID0gPDE+OworCQlyZW5lc2FzLCN3cGYgPSA8ND47CisJfTsKKworCXZzcDFAZmU5MzgwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdnNwMSI7CisJCXJlZyA9IDwwIDB4ZmU5MzgwMDAgMCAweDgwMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMjQ3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAxX2Nsa3MgUjhBNzc5MV9DTEtfVlNQMV9EVTE+OworCisJCXJlbmVzYXMsaGFzLWxpZjsKKwkJcmVuZXNhcyxoYXMtbHV0OworCQlyZW5lc2FzLCNycGYgPSA8ND47CisJCXJlbmVzYXMsI3VkcyA9IDwxPjsKKwkJcmVuZXNhcywjd3BmID0gPDQ+OworCX07CisKKwlkdTogZGlzcGxheUBmZWIwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxkdS1yOGE3NzkxIjsKKwkJcmVnID0gPDAgMHhmZWIwMDAwMCAwIDB4NDAwMDA+LAorCQkgICAgICA8MCAweGZlYjkwMDAwIDAgMHgxYz47CisJCXJlZy1uYW1lcyA9ICJkdSIsICJsdmRzLjAiOworCQlpbnRlcnJ1cHRzID0gPDAgMjU2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAyNjggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDdfY2xrcyBSOEE3NzkxX0NMS19EVTA+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkxX0NMS19EVTE+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkxX0NMS19MVkRTMD47CisJCWNsb2NrLW5hbWVzID0gImR1LjAiLCAiZHUuMSIsICJsdmRzLjAiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWR1X291dF9yZ2I6IGVuZHBvaW50IHsKKwkJCQl9OworCQkJfTsKKwkJCXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCWR1X291dF9sdmRzMDogZW5kcG9pbnQgeworCQkJCX07CisJCQl9OworCQl9OworCX07CisKIAljbG9ja3MgewogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CkBAIC04ODksMTcgKzEwNjgsMjMgQEAKIAkJbXN0cDFfY2xrczogbXN0cDFfY2xrc0BlNjE1MDEzNCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5MS1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CiAJCQlyZWcgPSA8MCAweGU2MTUwMTM0IDAgND4sIDwwIDB4ZTYxNTAwMzggMCA0PjsKLQkJCWNsb2NrcyA9IDwmbTJfY2xrPiwgPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZyY2xrX2Nsaz4sCi0JCQkJIDwmY3BfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPjsKKwkJCWNsb2NrcyA9IDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8Jm0yX2Nsaz4sIDwmenNfY2xrPiwgPCZwX2Nsaz4sCisJCQkJIDwmemdfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZwX2Nsaz4sCisJCQkJIDwmcF9jbGs+LCA8JnJjbGtfY2xrPiwgPCZjcF9jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwKKwkJCQkgPCZ6c19jbGs+OwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPAotCQkJCVI4QTc3OTFfQ0xLX0pQVSBSOEE3NzkxX0NMS19UTVUxIFI4QTc3OTFfQ0xLX1RNVTMgUjhBNzc5MV9DTEtfVE1VMgotCQkJCVI4QTc3OTFfQ0xLX0NNVDAgUjhBNzc5MV9DTEtfVE1VMCBSOEE3NzkxX0NMS19WU1AxX0RVMQotCQkJCVI4QTc3OTFfQ0xLX1ZTUDFfRFUwIFI4QTc3OTFfQ0xLX1ZTUDFfUworCQkJCVI4QTc3OTFfQ0xLX1ZDUDAgUjhBNzc5MV9DTEtfVlBDMCBSOEE3NzkxX0NMS19KUFUKKwkJCQlSOEE3NzkxX0NMS19TU1AxIFI4QTc3OTFfQ0xLX1RNVTEgUjhBNzc5MV9DTEtfM0RHCisJCQkJUjhBNzc5MV9DTEtfMkRETUFDIFI4QTc3OTFfQ0xLX0ZEUDFfMSBSOEE3NzkxX0NMS19GRFAxXzAKKwkJCQlSOEE3NzkxX0NMS19UTVUzIFI4QTc3OTFfQ0xLX1RNVTIgUjhBNzc5MV9DTEtfQ01UMAorCQkJCVI4QTc3OTFfQ0xLX1RNVTAgUjhBNzc5MV9DTEtfVlNQMV9EVTEgUjhBNzc5MV9DTEtfVlNQMV9EVTAKKwkJCQlSOEE3NzkxX0NMS19WU1AxX1MKIAkJCT47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPQotCQkJCSJqcHUiLCAidG11MSIsICJ0bXUzIiwgInRtdTIiLCAiY210MCIsICJ0bXUwIiwgInZzcDEtZHUxIiwKLQkJCQkidnNwMS1kdTAiLCAidnNwMS1zeSI7CisJCQkJInZjcDAiLCAidnBjMCIsICJqcHUiLCAic3NwMSIsICJ0bXUxIiwgIjNkZyIsCisJCQkJIjJkZG1hYyIsICJmZHAxLTEiLCAiZmRwMS0wIiwgInRtdTMiLCAidG11MiIsICJjbXQwIiwKKwkJCQkidG11MCIsICJ2c3AxLWR1MSIsICJ2c3AxLWR1MCIsICJ2c3AxLXN5IjsKIAkJfTsKIAkJbXN0cDJfY2xrczogbXN0cDJfY2xrc0BlNjE1MDEzOCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5MS1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CkBAIC05MjMsMjQgKzExMDgsMjggQEAKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkxLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTAxM2MgMCA0PiwgPDAgMHhlNjE1MDA0OCAwIDQ+OwogCQkJY2xvY2tzID0gPCZjcF9jbGs+LCA8JnNkMl9jbGs+LCA8JnNkMV9jbGs+LCA8JmNwZ19jbG9ja3MgUjhBNzc5MV9DTEtfU0QwPiwKLQkJCQkgPCZtbWMwX2Nsaz4sIDwmaHBfY2xrPiwgPCZtcF9jbGs+LCA8JmhwX2Nsaz4sIDwmbXBfY2xrPiwgPCZyY2xrX2Nsaz47CisJCQkJIDwmbW1jMF9jbGs+LCA8JmhwX2Nsaz4sIDwmbXBfY2xrPiwgPCZocF9jbGs+LCA8Jm1wX2Nsaz4sIDwmcmNsa19jbGs+LAorCQkJCSA8JmhwX2Nsaz4sIDwmaHBfY2xrPjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDwKIAkJCQlSOEE3NzkxX0NMS19UUFUwIFI4QTc3OTFfQ0xLX1NESEkyIFI4QTc3OTFfQ0xLX1NESEkxIFI4QTc3OTFfQ0xLX1NESEkwCiAJCQkJUjhBNzc5MV9DTEtfTU1DSUYwIFI4QTc3OTFfQ0xLX0lJQzAgUjhBNzc5MV9DTEtfUENJRUMgUjhBNzc5MV9DTEtfSUlDMQogCQkJCVI4QTc3OTFfQ0xLX1NTVVNCIFI4QTc3OTFfQ0xLX0NNVDEKKwkJCQlSOEE3NzkxX0NMS19VU0JETUFDMCBSOEE3NzkxX0NMS19VU0JETUFDMQogCQkJPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9CiAJCQkJInRwdTAiLCAic2RoaTIiLCAic2RoaTEiLCAic2RoaTAiLAotCQkJCSJtbWNpZjAiLCAiaTJjNyIsICJwY2llYyIsICJpMmM4IiwgInNzdXNiIiwgImNtdDEiOworCQkJCSJtbWNpZjAiLCAiaTJjNyIsICJwY2llYyIsICJpMmM4IiwgInNzdXNiIiwgImNtdDEiLAorCQkJCSJ1c2JkbWFjMCIsICJ1c2JkbWFjMSI7CiAJCX07CiAJCW1zdHA1X2Nsa3M6IG1zdHA1X2Nsa3NAZTYxNTAxNDQgewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTEtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwogCQkJcmVnID0gPDAgMHhlNjE1MDE0NCAwIDQ+LCA8MCAweGU2MTUwMDNjIDAgND47Ci0JCQljbG9ja3MgPSA8JmV4dGFsX2Nsaz4sIDwmcF9jbGs+OworCQkJY2xvY2tzID0gPCZocF9jbGs+LCA8JmhwX2Nsaz4sIDwmZXh0YWxfY2xrPiwgPCZwX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47Ci0JCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8UjhBNzc5MV9DTEtfVEhFUk1BTCBSOEE3NzkxX0NMS19QV00+OwotCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInRoZXJtYWwiLCAicHdtIjsKKwkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDxSOEE3NzkxX0NMS19BVURJT19ETUFDMCBSOEE3NzkxX0NMS19BVURJT19ETUFDMQorCQkJCQkJIFI4QTc3OTFfQ0xLX1RIRVJNQUwgUjhBNzc5MV9DTEtfUFdNPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhdWRtYWMwIiwgImF1ZG1hYzEiLCAidGhlcm1hbCIsICJwd20iOwogCQl9OwogCQltc3RwN19jbGtzOiBtc3RwN19jbGtzQGU2MTUwMTRjIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkxLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKQEAgLTEwODgsNiArMTI3NywxNiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwl4aGNpOiB1c2JAZWUwMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMseGhjaS1yOGE3NzkxIjsKKwkJcmVnID0gPDAgMHhlZTAwMDAwMCAwIDB4YzAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDEwMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTFfQ0xLX1NTVVNCPjsKKwkJcGh5cyA9IDwmdXNiMiAxPjsKKwkJcGh5LW5hbWVzID0gInVzYiI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXBjaTA6IHBjaUBlZTA5MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxwY2ktcjhhNzc5MSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CkBAIC0xMTA2LDYgKzEzMDUsMjAgQEAKIAkJaW50ZXJydXB0LW1hcCA9IDwweDAwMDAgMCAwIDEgJmdpYyAwIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkJIDB4MDgwMCAwIDAgMSAmZ2ljIDAgMTA4IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgxMDAwIDAgMCAyICZnaWMgMCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJdXNiQDAsMSB7CisJCQlyZWcgPSA8MHg4MDAgMCAwIDAgMD47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcGh5cyA9IDwmdXNiMCAwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQl9OworCisJCXVzYkAwLDIgeworCQkJcmVnID0gPDB4MTAwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IwIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CiAJfTsKIAogCXBjaTE6IHBjaUBlZTBkMDAwMCB7CkBAIC0xMTI2LDYgKzEzMzksMjAgQEAKIAkJaW50ZXJydXB0LW1hcCA9IDwweDAwMDAgMCAwIDEgJmdpYyAwIDExMyBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkJIDB4MDgwMCAwIDAgMSAmZ2ljIDAgMTEzIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgxMDAwIDAgMCAyICZnaWMgMCAxMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJdXNiQDAsMSB7CisJCQlyZWcgPSA8MHg4MDAgMCAwIDAgMD47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcGh5cyA9IDwmdXNiMiAwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQl9OworCisJCXVzYkAwLDIgeworCQkJcmVnID0gPDB4MTAwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IyIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CiAJfTsKIAogCXBjaWVjOiBwY2llQGZlMDAwMDAwIHsKQEAgLTExNTMsNyArMTM4MCw3IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCXJjYXJfc291bmQ6IHJjYXJfc291bmRAMHhlYzUwMDAwMCB7CisJcmNhcl9zb3VuZDogcmNhcl9zb3VuZEBlYzUwMDAwMCB7CiAJCSNzb3VuZC1kYWktY2VsbHMgPSA8MT47CiAJCWNvbXBhdGlibGUgPSAgInJlbmVzYXMscmNhcl9zb3VuZC1yOGE3NzkxIiwgInJlbmVzYXMscmNhcl9zb3VuZC1nZW4yIiwgInJlbmVzYXMscmNhcl9zb3VuZCI7CiAJCXJlZyA9CTwwIDB4ZWM1MDAwMDAgMCAweDEwMDA+LCAvKiBTQ1UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTQtYWx0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTQtYWx0LmR0cwppbmRleCA3OWQwNmVmMC4uZjJjZjc1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5NC1hbHQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTQtYWx0LmR0cwpAQCAtMjAsNyArMjAsOCBAQAogCX07CiAKIAljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDMCwzODQwMCBpZ25vcmVfbG9nbGV2ZWwgcncgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKKwkJYm9vdGFyZ3MgPSAiaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWYyOwogCX07CiAKIAltZW1vcnlANDAwMDAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5NC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5NC5kdHNpCmluZGV4IGQ0ZThiY2UuLjE5YzlkZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTQuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzk0LmR0c2kKQEAgLTgyLDYgKzgyLDE0IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjctdGltZXIiOworCQlpbnRlcnJ1cHRzID0gPDEgMTMgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPDEgMTQgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPDEgMTEgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPDEgMTAgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPjsKKwl9OworCiAJaXJxYzA6IGludGVycnVwdC1jb250cm9sbGVyQGU2MWMwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlycWMtcjhhNzc5NCIsICJyZW5lc2FzLGlycWMiOwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwpAQCAtNDUzLDE2ICs0NjEsMTkgQEAKIAkJbXN0cDFfY2xrczogbXN0cDFfY2xrc0BlNjE1MDEzNCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5NC1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CiAJCQlyZWcgPSA8MCAweGU2MTUwMTM0IDAgND4sIDwwIDB4ZTYxNTAwMzggMCA0PjsKLQkJCWNsb2NrcyA9IDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZwX2Nsaz4sIDwmcmNsa19jbGs+LAotCQkJCSA8JmNwX2Nsaz4sCi0JCQkJIDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz47CisJCQljbG9ja3MgPSA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZwX2Nsaz4sIDwmemdfY2xrPiwgPCZ6c19jbGs+LAorCQkJCSA8JnpzX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZyY2xrX2Nsaz4sIDwmY3BfY2xrPiwKKwkJCQkgPCZ6c19jbGs+LCA8JnpzX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8Ci0JCQkJUjhBNzc5NF9DTEtfVE1VMSBSOEE3Nzk0X0NMS19UTVUzIFI4QTc3OTRfQ0xLX1RNVTIKLQkJCQlSOEE3Nzk0X0NMS19DTVQwIFI4QTc3OTRfQ0xLX1RNVTAKKwkJCQlSOEE3Nzk0X0NMS19WQ1AwIFI4QTc3OTRfQ0xLX1ZQQzAgUjhBNzc5NF9DTEtfVE1VMQorCQkJCVI4QTc3OTRfQ0xLXzNERyBSOEE3Nzk0X0NMS18yRERNQUMgUjhBNzc5NF9DTEtfRkRQMV8wCisJCQkJUjhBNzc5NF9DTEtfVE1VMyBSOEE3Nzk0X0NMS19UTVUyIFI4QTc3OTRfQ0xLX0NNVDAKKwkJCQlSOEE3Nzk0X0NMS19UTVUwIFI4QTc3OTRfQ0xLX1ZTUDFfRFUwIFI4QTc3OTRfQ0xLX1ZTUDFfUwogCQkJPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9Ci0JCQkJInRtdTEiLCAidG11MyIsICJ0bXUyIiwgImNtdDAiLCAidG11MCI7CisJCQkJInZjcDAiLCAidnBjMCIsICJ0bXUxIiwgIjNkZyIsICIyZGRtYWMiLCAiZmRwMS0wIiwKKwkJCQkidG11MyIsICJ0bXUyIiwgImNtdDAiLCAidG11MCIsICJ2c3AxLWR1MCIsICJ2c3BzIjsKIAkJfTsKIAkJbXN0cDJfY2xrczogbXN0cDJfY2xrc0BlNjE1MDEzOCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5NC1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CkBAIC01MDksMTMgKzUyMCwxMyBAQAogCQltc3RwOF9jbGtzOiBtc3RwOF9jbGtzQGU2MTUwOTkwIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3Nzk0LW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTA5OTAgMCA0PiwgPDAgMHhlNjE1MDlhMCAwIDQ+OwotCQkJY2xvY2tzID0gPCZwX2Nsaz47CisJCQljbG9ja3MgPSA8JnpnX2Nsaz4sIDwmemdfY2xrPiwgPCZwX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8Ci0JCQkJUjhBNzc5NF9DTEtfRVRIRVIKKwkJCQlSOEE3Nzk0X0NMS19WSU4xIFI4QTc3OTRfQ0xLX1ZJTjAgUjhBNzc5NF9DTEtfRVRIRVIKIAkJCT47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPQotCQkJCSJldGhlciI7CisJCQkJInZpbjEiLCAidmluMCIsICJldGhlciI7CiAJCX07CiAJCW1zdHAxMV9jbGtzOiBtc3RwMTFfY2xrc0BlNjE1MDk5YyB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5NC1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3N3h4LWFhMTA0eGQxMi1wYW5lbC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzd4eC1hYTEwNHhkMTItcGFuZWwuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWNiNTBmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzd4eC1hYTEwNHhkMTItcGFuZWwuZHRzaQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29tbW9uIGZpbGUgZm9yIHRoZSBBQTEwNFhEMTIgcGFuZWwgY29ubmVjdGVkIHRvIFJlbmVzYXMgUi1DYXIgYm9hcmRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvIHsKKwlwYW5lbCB7CisJCWNvbXBhdGlibGUgPSAibWl0c3ViaXNoaSxhYTEwNHhkMTIiLCAicGFuZWwtZHBpIjsKKworCQl3aWR0aC1tbSA9IDwyMTA+OworCQloZWlnaHQtbW0gPSA8MTU4PjsKKworCQlwYW5lbC10aW1pbmcgeworCQkJLyogMTAyNHg3NjggQDY1SHogKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NTAwMDAwMD47CisJCQloYWN0aXZlID0gPDEwMjQ+OworCQkJdmFjdGl2ZSA9IDw3Njg+OworCQkJaHN5bmMtbGVuID0gPDEzNj47CisJCQloZnJvbnQtcG9yY2ggPSA8MjA+OworCQkJaGJhY2stcG9yY2ggPSA8MTYwPjsKKwkJCXZmcm9udC1wb3JjaCA9IDwzPjsKKwkJCXZiYWNrLXBvcmNoID0gPDI5PjsKKwkJCXZzeW5jLWxlbiA9IDw2PjsKKwkJfTsKKworCQlwb3J0IHsKKwkJCXBhbmVsX2luOiBlbmRwb2ludCB7CisJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZsdmRzX2Nvbm5lY3Rvcj47CisJCQl9OworCQl9OworCX07Cit9OworCismbHZkc19jb25uZWN0b3IgeworCXJlbW90ZS1lbmRwb2ludCA9IDwmcGFuZWxfaW4+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzA2NmEtYnFjdXJpZTIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1icWN1cmllMi5kdHMKaW5kZXggZDUzNDQ1MS4uYmFmMjFhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1icWN1cmllMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1icWN1cmllMi5kdHMKQEAgLTYwLDYgKzYwLDEwIEBACiAJfTsKIH07CiAKKyZjcHUwIHsKKwljcHUwLXN1cHBseSA9IDwmdmRkX2FybT47Cit9OworCiAmaTJjMSB7CiAJc3RhdHVzID0gIm9rYXkiOwogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1tYXJzYm9hcmQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1tYXJzYm9hcmQuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzMwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLW1hcnNib2FyZC5kdHMKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgUm9tYWluIFBlcmllciA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJyazMwNjZhLmR0c2kiCisKKy8geworCW1vZGVsID0gIk1hcnNCb2FyZCBSSzMwNjYiOworCWNvbXBhdGlibGUgPSAiaGFveXUsbWFyc2JvYXJkLXJrMzA2NiIsICJyb2NrY2hpcCxyazMwNjZhIjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDYwMDAwMDAwIDB4NDAwMDAwMDA+OworCX07CisKKwl2Y2Nfc2QwOiBzZG1tYy1yZWd1bGF0b3IgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInNkbW1jLXN1cHBseSI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BpbzMgNyBHUElPX0FDVElWRV9MT1c+OworCQlzdGFydHVwLWRlbGF5LXVzID0gPDEwMDAwMD47CisJCXZpbi1zdXBwbHkgPSA8JnZjY19pbz47CisJfTsKKworCXZzeXM6IHZzeXMtcmVndWxhdG9yIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJ2c3lzIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwl9OworfTsKKworJmkyYzEgeworCXN0YXR1cyA9ICJva2F5IjsKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCXRwczogdHBzQDJkIHsKKwkJcmVnID0gPDB4MmQ+OworCisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW82PjsKKwkJaW50ZXJydXB0cyA9IDw0IElSUV9UWVBFX0xFVkVMX0xPVz47CisKKwkJdmNjMS1zdXBwbHkgPSA8JnZzeXM+OworCQl2Y2MyLXN1cHBseSA9IDwmdnN5cz47CisJCXZjYzMtc3VwcGx5ID0gPCZ2c3lzPjsKKwkJdmNjNC1zdXBwbHkgPSA8JnZzeXM+OworCQl2Y2M1LXN1cHBseSA9IDwmdmNjX2lvPjsKKwkJdmNjNi1zdXBwbHkgPSA8JnZjY19pbz47CisJCXZjYzctc3VwcGx5ID0gPCZ2c3lzPjsKKwkJdmNjaW8tc3VwcGx5ID0gPCZ2c3lzPjsKKworCQlyZWd1bGF0b3JzIHsKKwkJCXZjY19ydGM6IHJlZ3VsYXRvckAwIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2NfcnRjIjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmNjX2lvOiByZWd1bGF0b3JAMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmNjX2lvIjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmRkX2FybTogcmVndWxhdG9yQDIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9hcm0iOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDYwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZjY19kZHI6IHJlZ3VsYXRvckAzIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2NfZGRyIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw2MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Y2MxOF9jaWY6IHJlZ3VsYXRvckA1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2MxOF9jaWYiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2ZGRfMTE6IHJlZ3VsYXRvckA2IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfMTEiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Y2NfMjU6IHJlZ3VsYXRvckA3IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2NfMjUiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Y2NfMTg6IHJlZ3VsYXRvckA4IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2NfMTgiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Y2MyNV9oZG1pOiByZWd1bGF0b3JAOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmNjMjVfaGRtaSI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZjY2FfMzM6IHJlZ3VsYXRvckAxMCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmNjYV8zMyI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZjY19ybWlpOiByZWd1bGF0b3JAMTEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZjY19ybWlpIjsKKwkJCX07CisKKwkJCXZjYzI4X2NpZjogcmVndWxhdG9yQDEyIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2MyOF9jaWYiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCQl9OworCX07Cit9OworCisvKiBtdXN0IGJlIGluY2x1ZGVkIGFmdGVyICZ0cHMgZ2V0cyBkZWZpbmVkICovCisjaW5jbHVkZSAidHBzNjU5MTAuZHRzaSIKKworJmVtYWMgeworCXN0YXR1cyA9ICJva2F5IjsKKworCXBoeSA9IDwmcGh5MD47CisJcGh5LXN1cHBseSA9IDwmdmNjX3JtaWk+OworCisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmVtYWNfeGZlcj4sIDwmZW1hY19tZGlvPiwgPCZwaHlfaW50PjsKKworCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJcmVnID0gPDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMT47CisJCWludGVycnVwdHMgPSA8MjYgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwl9OworfTsKKworJnBpbmN0cmwgeworCWxhbjg3MjBhIHsKKwkJcGh5X2ludDogcGh5LWludCB7CisJCQlyb2NrY2hpcCxwaW5zID0gPFJLX0dQSU8xIDI2IFJLX0ZVTkNfR1BJTyAmcGNmZ19wdWxsX25vbmU+OworCQl9OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQyIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3ZHQgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLmR0c2kKaW5kZXggYWQ5YzJkYi4uNDFmZmQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzA2NmEuZHRzaQpAQCAtMjYsMTEgKzI2LDIxIEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQllbmFibGUtbWV0aG9kID0gInJvY2tjaGlwLHJrMzA2Ni1zbXAiOwogCi0JCWNwdUAwIHsKKwkJY3B1MDogY3B1QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CiAJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CiAJCQlyZWcgPSA8MHgwPjsKKwkJCW9wZXJhdGluZy1wb2ludHMgPSA8CisJCQkJLyoga0h6ICAgIHVWICovCisJCQkJMTAwODAwMCAxMDc1MDAwCisJCQkJIDgxNjAwMCAxMDI1MDAwCisJCQkJIDYwMDAwMCAxMDI1MDAwCisJCQkJIDUwNDAwMCAxMDAwMDAwCisJCQkJIDMxMjAwMCAgOTc1MDAwCisJCQk+OworCQkJY2xvY2stbGF0ZW5jeSA9IDw0MDAwMD47CisJCQljbG9ja3MgPSA8JmNydSBBUk1DTEs+OwogCQl9OwogCQljcHVAMSB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwpAQCAtNTMsNiArNjMsNTEgQEAKIAkJfTsKIAl9OwogCisJaTJzMDogaTJzQDEwMTE4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMwNjYtaTJzIjsKKwkJcmVnID0gPDB4MTAxMTgwMDAgMHgyMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDMxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmaTJzMF9idXM+OworCQlkbWFzID0gPCZkbWFjMV9zIDQ+LCA8JmRtYWMxX3MgNT47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCWNsb2NrLW5hbWVzID0gImkyc19oY2xrIiwgImkyc19jbGsiOworCQljbG9ja3MgPSA8JmNydSBIQ0xLX0kyUzA+LCA8JmNydSBTQ0xLX0kyUzA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlpMnMxOiBpMnNAMTAxMWEwMDAgeworCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzA2Ni1pMnMiOworCQlyZWcgPSA8MHgxMDExYTAwMCAweDIwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZpMnMxX2J1cz47CisJCWRtYXMgPSA8JmRtYWMxX3MgNj4sIDwmZG1hYzFfcyA3PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJY2xvY2stbmFtZXMgPSAiaTJzX2hjbGsiLCAiaTJzX2NsayI7CisJCWNsb2NrcyA9IDwmY3J1IEhDTEtfSTJTMT4sIDwmY3J1IFNDTEtfSTJTMT47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWkyczI6IGkyc0AxMDExYzAwMCB7CisJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDY2LWkycyI7CisJCXJlZyA9IDwweDEwMTFjMDAwIDB4MjAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmkyczJfYnVzPjsKKwkJZG1hcyA9IDwmZG1hYzFfcyA5PiwgPCZkbWFjMV9zIDEwPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJY2xvY2stbmFtZXMgPSAiaTJzX2hjbGsiLCAiaTJzX2NsayI7CisJCWNsb2NrcyA9IDwmY3J1IEhDTEtfSTJTMj4sIDwmY3J1IFNDTEtfSTJTMj47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCWNydTogY2xvY2stY29udHJvbGxlckAyMDAwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDY2YS1jcnUiOwogCQlyZWcgPSA8MHgyMDAwMDAwMCAweDEwMDA+OwpAQCAtMTc5LDYgKzIzNCwyNCBAQAogCQkJYmlhcy1kaXNhYmxlOwogCQl9OwogCisJCWVtYWMgeworCQkJZW1hY194ZmVyOiBlbWFjLXhmZXIgeworCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzEgMTYgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT4sIC8qIG1hY19jbGsgKi8KKwkJCQkJCTxSS19HUElPMSAxNyBSS19GVU5DXzIgJnBjZmdfcHVsbF9ub25lPiwgLyogdHhfZW4gKi8KKwkJCQkJCTxSS19HUElPMSAxOCBSS19GVU5DXzIgJnBjZmdfcHVsbF9ub25lPiwgLyogdHhkMSAqLworCQkJCQkJPFJLX0dQSU8xIDE5IFJLX0ZVTkNfMiAmcGNmZ19wdWxsX25vbmU+LCAvKiB0eGQwICovCisJCQkJCQk8UktfR1BJTzEgMjAgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT4sIC8qIHJ4X2VyciAqLworCQkJCQkJPFJLX0dQSU8xIDIxIFJLX0ZVTkNfMiAmcGNmZ19wdWxsX25vbmU+LCAvKiBjcnNfZHZhbGlkICovCisJCQkJCQk8UktfR1BJTzEgMjIgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT4sIC8qIHJ4ZDEgKi8KKwkJCQkJCTxSS19HUElPMSAyMyBSS19GVU5DXzIgJnBjZmdfcHVsbF9ub25lPjsgLyogcnhkMCAqLworCQkJfTsKKworCQkJZW1hY19tZGlvOiBlbWFjLW1kaW8geworCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzEgMjQgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT4sIC8qIG1hY19tZCAqLworCQkJCQkJPFJLX0dQSU8xIDI1IFJLX0ZVTkNfMiAmcGNmZ19wdWxsX25vbmU+OyAvKiBtYWNfbWRjbGsgKi8KKwkJCX07CisJCX07CisKIAkJZW1tYyB7CiAJCQllbW1jX2NsazogZW1tYy1jbGsgewogCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzMgMzEgUktfRlVOQ18yICZwY2ZnX3B1bGxfZGVmYXVsdD47CkBAIC00MDUsNiArNDc4LDQyIEBACiAJCQkJCQk8UktfR1BJTzMgMjAgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD47CiAJCQl9OwogCQl9OworCisJCWkyczAgeworCQkJaTJzMF9idXM6IGkyczAtYnVzIHsKKwkJCQlyb2NrY2hpcCxwaW5zID0gPFJLX0dQSU8wIDcgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgOCBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCA5IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDEwIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDExIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDEyIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDEzIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDE0IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDE1IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+OworCQkJfTsKKwkJfTsKKworCQlpMnMxIHsKKwkJCWkyczFfYnVzOiBpMnMxLWJ1cyB7CisJCQkJcm9ja2NoaXAscGlucyA9IDxSS19HUElPMCAxNiBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAxNyBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAxOCBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAxOSBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAyMCBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAyMSBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PjsKKwkJCX07CisJCX07CisKKwkJaTJzMiB7CisJCQlpMnMyX2J1czogaTJzMi1idXMgeworCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzAgMjQgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMjUgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMjYgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMjcgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMjggUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMjkgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD47CisJCQl9OworCQl9OwogCX07CiB9OwogCkBAIC00OTYsMyArNjA1LDcgQEAKICZ3ZHQgewogCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDY2LXdkdCIsICJzbnBzLGR3LXdkdCI7CiB9OworCismZW1hYyB7CisJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMwNjYtZW1hYyI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LXJhZHhhcm9jay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yazMxODgtcmFkeGFyb2NrLmR0cwppbmRleCAxNTkxMGM5Li45YTA5NTc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMxODgtcmFkeGFyb2NrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMxODgtcmFkeGFyb2NrLmR0cwpAQCAtNDMsMTYgKzQzLDE5IEBACiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKIAogCQlncmVlbiB7CisJCQlsYWJlbCA9ICJyb2NrOmdyZWVuOnVzZXIxIjsKIAkJCWdwaW9zID0gPCZncGlvMCAxMiBHUElPX0FDVElWRV9MT1c+OwogCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOwogCQl9OwogCi0JCXllbGxvdyB7CisJCWJsdWUgeworCQkJbGFiZWwgPSAicm9jazpibHVlOnVzZXIyIjsKIAkJCWdwaW9zID0gPCZncGlvMCAxNCBHUElPX0FDVElWRV9MT1c+OwogCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOwogCQl9OwogCiAJCXNsZWVwIHsKKwkJCWxhYmVsID0gInJvY2s6cmVkOnBvd2VyIjsKIAkJCWdwaW9zID0gPCZncGlvMCAxNSAwPjsKIAkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKIAkJfTsKQEAgLTExOCw2ICsxMjEsMTAgQEAKIAl9OwogfTsKIAorJmNwdTAgeworCWNwdTAtc3VwcGx5ID0gPCZ2ZGRfYXJtPjsKK307CisKICZpMmMxIHsKIAlzdGF0dXMgPSAib2theSI7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CkBAIC0xNTksNyArMTY2LDcgQEAKIAkJCXZkZF9hcm06IFJFRzMgewogCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9BUk0iOwogCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg3NTAwMD47Ci0JCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CiAJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKIAkJCX07CiAKQEAgLTIzOSw2ICsyNDYsMTggQEAKIAlkaXNhYmxlLXdwOwogfTsKIAorJnB3bTEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwd20yIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcHdtMyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnBpbmN0cmwgewogCXBjZmdfb3V0cHV0X2xvdzogcGNmZy1vdXRwdXQtbG93IHsKIAkJb3V0cHV0LWxvdzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzE4OC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LmR0c2kKaW5kZXggZGRhYWRhNy4uMWQ0ZDc5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LmR0c2kKQEAgLTI2LDExICsyNiwyNCBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJZW5hYmxlLW1ldGhvZCA9ICJyb2NrY2hpcCxyazMwNjYtc21wIjsKIAotCQljcHVAMCB7CisJCWNwdTA6IGNwdUAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOwogCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwogCQkJcmVnID0gPDB4MD47CisJCQlvcGVyYXRpbmctcG9pbnRzID0gPAorCQkJCS8qIGtIeiAgICB1ViAqLworCQkJCTE2MDgwMDAgMTM1MDAwMAorCQkJCTE0MTYwMDAgMTI1MDAwMAorCQkJCTEyMDAwMDAgMTE1MDAwMAorCQkJCTEwMDgwMDAgMTA3NTAwMAorCQkJCSA4MTYwMDAgIDk3NTAwMAorCQkJCSA2MDAwMDAgIDk1MDAwMAorCQkJCSA1MDQwMDAgIDkyNTAwMAorCQkJCSAzMTIwMDAgIDg3NTAwMAorCQkJPjsKKwkJCWNsb2NrLWxhdGVuY3kgPSA8NDAwMDA+OworCQkJY2xvY2tzID0gPCZjcnUgQVJNQ0xLPjsKIAkJfTsKIAkJY3B1QDEgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKQEAgLTY1LDYgKzc4LDIxIEBACiAJCX07CiAJfTsKIAorCWkyczA6IGkyc0AxMDExYTAwMCB7CisJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMTg4LWkycyIsICJyb2NrY2hpcCxyazMwNjYtaTJzIjsKKwkJcmVnID0gPDB4MTAxMWEwMDAgMHgyMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDMyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmaTJzMF9idXM+OworCQlkbWFzID0gPCZkbWFjMV9zIDY+LCA8JmRtYWMxX3MgNz47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCWNsb2NrLW5hbWVzID0gImkyc19oY2xrIiwgImkyc19jbGsiOworCQljbG9ja3MgPSA8JmNydSBIQ0xLX0kyUzA+LCA8JmNydSBTQ0xLX0kyUzA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAljcnU6IGNsb2NrLWNvbnRyb2xsZXJAMjAwMDAwMDAgewogCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzE4OC1jcnUiOwogCQlyZWcgPSA8MHgyMDAwMDAwMCAweDEwMDA+OwpAQCAtODMsNyArMTExLDcgQEAKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCXJhbmdlczsKIAotCQlncGlvMDogZ3BpbzBAMHgyMDAwYTAwMCB7CisJCWdwaW8wOiBncGlvMEAyMDAwYTAwMCB7CiAJCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzE4OC1ncGlvLWJhbmswIjsKIAkJCXJlZyA9IDwweDIwMDBhMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA1NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTk2LDcgKzEyNCw3IEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwaW8xOiBncGlvMUAweDIwMDNjMDAwIHsKKwkJZ3BpbzE6IGdwaW8xQDIwMDNjMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAsZ3Bpby1iYW5rIjsKIAkJCXJlZyA9IDwweDIwMDNjMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA1NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTM5NSw2ICs0MjMsMTcgQEAKIAkJCQkJCTxSS19HUElPMyAyMCBSS19GVU5DXzEgJnBjZmdfcHVsbF9ub25lPjsKIAkJCX07CiAJCX07CisKKwkJaTJzMCB7CisJCQlpMnMwX2J1czogaTJzMC1idXMgeworCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzEgMTYgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8UktfR1BJTzEgMTcgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8UktfR1BJTzEgMTggUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8UktfR1BJTzEgMTkgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8UktfR1BJTzEgMjAgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8UktfR1BJTzEgMjEgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT47CisJCQl9OworCQl9OwogCX07CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLXJrODA4LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmItcms4MDguZHRzCmluZGV4IGZmNTIyZjguLmQ4Yzc3NWU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLXJrODA4LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLXJrODA4LmR0cwpAQCAtMTcsNiArMTcsMTAgQEAKIAljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1ldmItcms4MDgiLCAicm9ja2NoaXAscmszMjg4IjsKIH07CiAKKyZjcHUwIHsKKwljcHUwLXN1cHBseSA9IDwmdmRkX2NwdT47Cit9OworCiAmaTJjMCB7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJc3RhdHVzID0gIm9rYXkiOwpAQCAtNDQsNyArNDgsNyBAQAogCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NzUwMDAwPjsKLQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKIAkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfYXJtIjsKIAkJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmIuZHRzaQppbmRleCBjYjgzY2VhLi4zZTA2N2RkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi5kdHNpCkBAIC0xNDgsNiArMTQ4LDEyIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnRzYWRjIHsKKwlyb2NrY2hpcCxody10c2h1dC1tb2RlID0gPDA+OyAvKiB0c2h1dCBtb2RlIDA6Q1JVIDE6R1BJTyAqLworCXJvY2tjaGlwLGh3LXRzaHV0LXBvbGFyaXR5ID0gPDA+OyAvKiB0c2h1dCBwb2xhcml0eSAwOkxPVyAxOkhJR0ggKi8KKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmcGluY3RybCB7CiAJYmFja2xpZ2h0IHsKIAkJYmxfZW46IGJsLWVuIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC10aGVybWFsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODgtdGhlcm1hbC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OTUyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODgtdGhlcm1hbC5kdHNpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIFJLMzI4OCBTb0MgdGhlcm1hbAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLiwgTHRkCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3RoZXJtYWwvdGhlcm1hbC5oPgorCityZXNlcnZlX3RoZXJtYWw6IHJlc2VydmVfdGhlcm1hbCB7CisJcG9sbGluZy1kZWxheS1wYXNzaXZlID0gPDEwMDA+OyAvKiBtaWxsaXNlY29uZHMgKi8KKwlwb2xsaW5nLWRlbGF5ID0gPDUwMDA+OyAvKiBtaWxsaXNlY29uZHMgKi8KKworCXRoZXJtYWwtc2Vuc29ycyA9IDwmdHNhZGMgMD47Cit9OworCitjcHVfdGhlcm1hbDogY3B1X3RoZXJtYWwgeworCXBvbGxpbmctZGVsYXktcGFzc2l2ZSA9IDwxMDAwPjsgLyogbWlsbGlzZWNvbmRzICovCisJcG9sbGluZy1kZWxheSA9IDw1MDAwPjsgLyogbWlsbGlzZWNvbmRzICovCisKKwl0aGVybWFsLXNlbnNvcnMgPSA8JnRzYWRjIDE+OworCisJdHJpcHMgeworCQljcHVfYWxlcnQwOiBjcHVfYWxlcnQwIHsKKwkJCXRlbXBlcmF0dXJlID0gPDcwMDAwPjsgLyogbWlsbGljZWxzaXVzICovCisJCQloeXN0ZXJlc2lzID0gPDIwMDA+OyAvKiBtaWxsaWNlbHNpdXMgKi8KKwkJCXR5cGUgPSAicGFzc2l2ZSI7CisJCX07CisJCWNwdV9jcml0OiBjcHVfY3JpdCB7CisJCQl0ZW1wZXJhdHVyZSA9IDw5MDAwMD47IC8qIG1pbGxpY2Vsc2l1cyAqLworCQkJaHlzdGVyZXNpcyA9IDwyMDAwPjsgLyogbWlsbGljZWxzaXVzICovCisJCQl0eXBlID0gImNyaXRpY2FsIjsKKwkJfTsKKwl9OworCisJY29vbGluZy1tYXBzIHsKKwkJbWFwMCB7CisJCQl0cmlwID0gPCZjcHVfYWxlcnQwPjsKKwkJCWNvb2xpbmctZGV2aWNlID0KKwkJCQk8JmNwdTAgVEhFUk1BTF9OT19MSU1JVCBUSEVSTUFMX05PX0xJTUlUPjsKKwkJfTsKKwl9OworfTsKKworZ3B1X3RoZXJtYWw6IGdwdV90aGVybWFsIHsKKwlwb2xsaW5nLWRlbGF5LXBhc3NpdmUgPSA8MTAwMD47IC8qIG1pbGxpc2Vjb25kcyAqLworCXBvbGxpbmctZGVsYXkgPSA8NTAwMD47IC8qIG1pbGxpc2Vjb25kcyAqLworCisJdGhlcm1hbC1zZW5zb3JzID0gPCZ0c2FkYyAyPjsKKworCXRyaXBzIHsKKwkJZ3B1X2FsZXJ0MDogZ3B1X2FsZXJ0MCB7CisJCQl0ZW1wZXJhdHVyZSA9IDw3MDAwMD47IC8qIG1pbGxpY2Vsc2l1cyAqLworCQkJaHlzdGVyZXNpcyA9IDwyMDAwPjsgLyogbWlsbGljZWxzaXVzICovCisJCQl0eXBlID0gInBhc3NpdmUiOworCQl9OworCQlncHVfY3JpdDogZ3B1X2NyaXQgeworCQkJdGVtcGVyYXR1cmUgPSA8OTAwMDA+OyAvKiBtaWxsaWNlbHNpdXMgKi8KKwkJCWh5c3RlcmVzaXMgPSA8MjAwMD47IC8qIG1pbGxpY2Vsc2l1cyAqLworCQkJdHlwZSA9ICJjcml0aWNhbCI7CisJCX07CisJfTsKKworCWNvb2xpbmctbWFwcyB7CisJCW1hcDAgeworCQkJdHJpcCA9IDwmZ3B1X2FsZXJ0MD47CisJCQljb29saW5nLWRldmljZSA9CisJCQkJPCZjcHUwIFRIRVJNQUxfTk9fTElNSVQgVEhFUk1BTF9OT19MSU1JVD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMyODguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC5kdHNpCmluZGV4IDg3NGU2NmQuLmZkMTlmMDA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMyODguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODguZHRzaQpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waW5jdHJsL3JvY2tjaGlwLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svcmszMjg4LWNydS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3RoZXJtYWwvdGhlcm1hbC5oPgogI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCiAKIC8gewpAQCAtNDYsMjYgKzQ3LDUwIEBACiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJZW5hYmxlLW1ldGhvZCA9ICJyb2NrY2hpcCxyazMwNjYtc21wIjsKKwkJcm9ja2NoaXAscG11ID0gPCZwbXU+OwogCi0JCWNwdUA1MDAgeworCQljcHUwOiBjcHVANTAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTEyIjsKIAkJCXJlZyA9IDwweDUwMD47CisJCQlyZXNldHMgPSA8JmNydSBTUlNUX0NPUkUwPjsKKwkJCW9wZXJhdGluZy1wb2ludHMgPSA8CisJCQkJLyogS0h6ICAgIHVWICovCisJCQkJMTYwODAwMCAxMzUwMDAwCisJCQkJMTUxMjAwMCAxMzAwMDAwCisJCQkJMTQxNjAwMCAxMjAwMDAwCisJCQkJMTIwMDAwMCAxMTAwMDAwCisJCQkJMTAwODAwMCAxMDUwMDAwCisJCQkJIDgxNjAwMCAxMDAwMDAwCisJCQkJIDY5NjAwMCAgOTUwMDAwCisJCQkJIDYwMDAwMCAgOTAwMDAwCisJCQkJIDQwODAwMCAgOTAwMDAwCisJCQkJIDMxMjAwMCAgOTAwMDAwCisJCQkJIDIxNjAwMCAgOTAwMDAwCisJCQkJIDEyNjAwMCAgOTAwMDAwCisJCQk+OworCQkJI2Nvb2xpbmctY2VsbHMgPSA8Mj47IC8qIG1pbiBmb2xsb3dlZCBieSBtYXggKi8KKwkJCWNsb2NrLWxhdGVuY3kgPSA8NDAwMDA+OworCQkJY2xvY2tzID0gPCZjcnUgQVJNQ0xLPjsKIAkJfTsKIAkJY3B1QDUwMSB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExMiI7CiAJCQlyZWcgPSA8MHg1MDE+OworCQkJcmVzZXRzID0gPCZjcnUgU1JTVF9DT1JFMT47CiAJCX07CiAJCWNwdUA1MDIgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTIiOwogCQkJcmVnID0gPDB4NTAyPjsKKwkJCXJlc2V0cyA9IDwmY3J1IFNSU1RfQ09SRTI+OwogCQl9OwogCQljcHVANTAzIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTEyIjsKIAkJCXJlZyA9IDwweDUwMz47CisJCQlyZXNldHMgPSA8JmNydSBTUlNUX0NPUkUzPjsKIAkJfTsKIAl9OwogCkBAIC0xMTYsNiArMTQxLDcgQEAKIAogCXRpbWVyIHsKIAkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjctdGltZXIiOworCQlhcm0sY3B1LXJlZ2lzdGVycy1ub3QtZnctY29uZmlndXJlZDsKIAkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDEzIChHSUNfQ1BVX01BU0tfU0lNUExFKDQpIHwgSVJRX1RZUEVfTEVWRUxfSElHSCk+LAogCQkJICAgICA8R0lDX1BQSSAxNCAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0hJR0gpPiwKIAkJCSAgICAgPEdJQ19QUEkgMTEgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKT4sCkBAIC0xNzcsNiArMjAzLDggQEAKIAkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtc3BpIiwgInJvY2tjaGlwLHJrMzA2Ni1zcGkiOwogCQljbG9ja3MgPSA8JmNydSBTQ0xLX1NQSTA+LCA8JmNydSBQQ0xLX1NQSTA+OwogCQljbG9jay1uYW1lcyA9ICJzcGljbGsiLCAiYXBiX3BjbGsiOworCQlkbWFzID0gPCZkbWFjX3BlcmkgMTE+LCA8JmRtYWNfcGVyaSAxMj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCWludGVycnVwdHMgPSA8R0lDX1NQSSA0NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZzcGkwX2NsayAmc3BpMF90eCAmc3BpMF9yeCAmc3BpMF9jczA+OwpAQCAtMTkwLDYgKzIxOCw4IEBACiAJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4LXNwaSIsICJyb2NrY2hpcCxyazMwNjYtc3BpIjsKIAkJY2xvY2tzID0gPCZjcnUgU0NMS19TUEkxPiwgPCZjcnUgUENMS19TUEkxPjsKIAkJY2xvY2stbmFtZXMgPSAic3BpY2xrIiwgImFwYl9wY2xrIjsKKwkJZG1hcyA9IDwmZG1hY19wZXJpIDEzPiwgPCZkbWFjX3BlcmkgMTQ+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNDUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmc3BpMV9jbGsgJnNwaTFfdHggJnNwaTFfcnggJnNwaTFfY3MwPjsKQEAgLTIwMyw2ICsyMzMsOCBAQAogCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1zcGkiLCAicm9ja2NoaXAscmszMDY2LXNwaSI7CiAJCWNsb2NrcyA9IDwmY3J1IFNDTEtfU1BJMj4sIDwmY3J1IFBDTEtfU1BJMj47CiAJCWNsb2NrLW5hbWVzID0gInNwaWNsayIsICJhcGJfcGNsayI7CisJCWRtYXMgPSA8JmRtYWNfcGVyaSAxNT4sIDwmZG1hY19wZXJpIDE2PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDQ2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JnNwaTJfY2xrICZzcGkyX3R4ICZzcGkyX3J4ICZzcGkyX2NzMD47CkBAIC0zMjksNiArMzYxLDI1IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXRoZXJtYWwtem9uZXMgeworCQkjaW5jbHVkZSAicmszMjg4LXRoZXJtYWwuZHRzaSIKKwl9OworCisJdHNhZGM6IHRzYWRjQGZmMjgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtdHNhZGMiOworCQlyZWcgPSA8MHhmZjI4MDAwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZjcnUgU0NMS19UU0FEQz4sIDwmY3J1IFBDTEtfVFNBREM+OworCQljbG9jay1uYW1lcyA9ICJ0c2FkYyIsICJhcGJfcGNsayI7CisJCXJlc2V0cyA9IDwmY3J1IFNSU1RfVFNBREM+OworCQlyZXNldC1uYW1lcyA9ICJ0c2FkYy1hcGIiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8Jm90cF9vdXQ+OworCQkjdGhlcm1hbC1zZW5zb3ItY2VsbHMgPSA8MT47CisJCXJvY2tjaGlwLGh3LXRzaHV0LXRlbXAgPSA8OTUwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAl1c2JfaG9zdDBfZWhjaTogdXNiQGZmNTAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJnZW5lcmljLWVoY2kiOwogCQlyZWcgPSA8MHhmZjUwMDAwMCAweDEwMD47CkBAIC00MzksNiArNDkwLDE4IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCWJ1c19pbnRtZW1AZmY3MDAwMDAgeworCQljb21wYXRpYmxlID0gIm1taW8tc3JhbSI7CisJCXJlZyA9IDwweGZmNzAwMDAwIDB4MTgwMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlcyA9IDwwIDB4ZmY3MDAwMDAgMHgxODAwMD47CisJCXNtcC1zcmFtQDAgeworCQkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMwNjYtc21wLXNyYW0iOworCQkJcmVnID0gPDB4MDAgMHgxMD47CisJCX07CisJfTsKKwogCXBtdTogcG93ZXItbWFuYWdlbWVudEBmZjczMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4LXBtdSIsICJzeXNjb24iOwogCQlyZWcgPSA8MHhmZjczMDAwMCAweDEwMD47CkBAIC00NTUsNiArNTE4LDE2IEBACiAJCXJvY2tjaGlwLGdyZiA9IDwmZ3JmPjsKIAkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY3J1IFBMTF9HUExMPiwgPCZjcnUgUExMX0NQTEw+LAorCQkJCSAgPCZjcnUgUExMX05QTEw+LCA8JmNydSBBQ0xLX0NQVT4sCisJCQkJICA8JmNydSBIQ0xLX0NQVT4sIDwmY3J1IFBDTEtfQ1BVPiwKKwkJCQkgIDwmY3J1IEFDTEtfUEVSST4sIDwmY3J1IEhDTEtfUEVSST4sCisJCQkJICA8JmNydSBQQ0xLX1BFUkk+OworCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDw1OTQwMDAwMDA+LCA8NDAwMDAwMDAwPiwKKwkJCQkgICAgICAgPDUwMDAwMDAwMD4sIDwzMDAwMDAwMDA+LAorCQkJCSAgICAgICA8MTUwMDAwMDAwPiwgPDc1MDAwMDAwPiwKKwkJCQkgICAgICAgPDMwMDAwMDAwMD4sIDwxNTAwMDAwMDA+LAorCQkJCSAgICAgICA8NzUwMDAwMDA+OwogCX07CiAKIAlncmY6IHN5c2NvbkBmZjc3MDAwMCB7CkBAIC00ODQsNiArNTU3LDI0IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXZvcGJfbW11OiBpb21tdUBmZjkzMDMwMCB7CisJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAsaW9tbXUiOworCQlyZWcgPSA8MHhmZjkzMDMwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gInZvcGJfbW11IjsKKwkJI2lvbW11LWNlbGxzID0gPDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl2b3BsX21tdTogaW9tbXVAZmY5NDAzMDAgeworCQljb21wYXRpYmxlID0gInJvY2tjaGlwLGlvbW11IjsKKwkJcmVnID0gPDB4ZmY5NDAzMDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWludGVycnVwdC1uYW1lcyA9ICJ2b3BsX21tdSI7CisJCSNpb21tdS1jZWxscyA9IDwwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBmZmMwMTAwMCB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGdpYy00MDAiOwogCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTk0OCw2ICsxMDM5LDEyIEBACiAJCQl9OwogCQl9OwogCisJCXRzYWRjIHsKKwkJCW90cF9vdXQ6IG90cC1vdXQgeworCQkJCXJvY2tjaGlwLHBpbnMgPSA8MCAxMCBSS19GVU5DXzEgJnBjZmdfcHVsbF9ub25lPjsKKwkJCX07CisJCX07CisKIAkJcHdtMCB7CiAJCQlwd20wX3BpbjogcHdtMC1waW4gewogCQkJCXJvY2tjaGlwLHBpbnMgPSA8NyAwIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX25vbmU+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszeHh4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yazN4eHguZHRzaQppbmRleCA0OTk0NjhkLi5jNTRhOTcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazN4eHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazN4eHguZHRzaQpAQCAtMjksNiArMjksMTAgQEAKIAkJbXNoYzAgPSAmZW1tYzsKIAkJbXNoYzEgPSAmbW1jMDsKIAkJbXNoYzIgPSAmbW1jMTsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0MTsKKwkJc2VyaWFsMiA9ICZ1YXJ0MjsKKwkJc2VyaWFsMyA9ICZ1YXJ0MzsKIAkJc3BpMCA9ICZzcGkwOwogCQlzcGkxID0gJnNwaTE7CiAJfTsKQEAgLTE3MywxMCArMTc3LDkgQEAKIAkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazI5MjgtZHctbXNoYyI7CiAJCXJlZyA9IDwweDEwMjE0MDAwIDB4MTAwMD47CiAJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQogCQljbG9ja3MgPSA8JmNydSBIQ0xLX1NETU1DPiwgPCZjcnUgU0NMS19TRE1NQz47CiAJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOwotCisJCWZpZm8tZGVwdGggPSA8MjU2PjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0xODQsMTAgKzE4Nyw5IEBACiAJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmsyOTI4LWR3LW1zaGMiOwogCQlyZWcgPSA8MHgxMDIxODAwMCAweDEwMDA+OwogCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjQgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0KIAkJY2xvY2tzID0gPCZjcnUgSENMS19TRElPPiwgPCZjcnUgU0NMS19TRElPPjsKIAkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7Ci0KKwkJZmlmby1kZXB0aCA9IDwyNTY+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTE5NSwxMCArMTk3LDkgQEAKIAkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazI5MjgtZHctbXNoYyI7CiAJCXJlZyA9IDwweDEwMjFjMDAwIDB4MTAwMD47CiAJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQogCQljbG9ja3MgPSA8JmNydSBIQ0xLX0VNTUM+LCA8JmNydSBTQ0xLX0VNTUM+OwogCQljbG9jay1uYW1lcyA9ICJiaXUiLCAiY2l1IjsKLQorCQlmaWZvLWRlcHRoID0gPDI1Nj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzY3LDYgKzM2OCw4IEBACiAJCXJlZyA9IDwweDIwMDcwMDAwIDB4MTAwMD47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJZG1hcyA9IDwmZG1hYzIgMTA+LCA8JmRtYWMyIDExPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zNzgsNiArMzgxLDggQEAKIAkJcmVnID0gPDB4MjAwNzQwMDAgMHgxMDAwPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OworCQlkbWFzID0gPCZkbWFjMiAxMj4sIDwmZG1hYzIgMTM+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvczNjNjQxMC1taW5pNjQxMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zM2M2NDEwLW1pbmk2NDEwLmR0cwppbmRleCA1N2UwMGY5Li5hMjVkZWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zM2M2NDEwLW1pbmk2NDEwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zM2M2NDEwLW1pbmk2NDEwLmR0cwpAQCAtMTk4LDEwICsxOTgsNiBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKLSZwd20gewotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KICZwaW5jdHJsMCB7CiAJZ3Bpb19sZWRzOiBncGlvLWxlZHMgewogCQlzYW1zdW5nLHBpbnMgPSAiZ3BrLTQiLCAiZ3BrLTUiLCAiZ3BrLTYiLCAiZ3BrLTciOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvczNjNjR4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvczNjNjR4eC5kdHNpCmluZGV4IGZmNWJkYWEuLjBjY2I0MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3MzYzY0eHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zM2M2NHh4LmR0c2kKQEAgLTE3Miw3ICsxNzIsNiBAQAogCQkJY2xvY2tzID0gPCZjbG9ja3MgUENMS19QV00+OwogCQkJc2Ftc3VuZyxwd20tb3V0cHV0cyA9IDwwPiwgPDE+OwogCQkJI3B3bS1jZWxscyA9IDwzPjsKLQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKIAkJcGluY3RybDA6IHBpbmN0cmxAN2YwMDgwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc2g3M2EwLWt6bTlnLXJlZmVyZW5jZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zaDczYTAta3ptOWctcmVmZXJlbmNlLmR0cwppbmRleCAzMGVmOTdlLi45MzliZTEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zaDczYTAta3ptOWctcmVmZXJlbmNlLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zaDczYTAta3ptOWctcmVmZXJlbmNlLmR0cwpAQCAtNDAsNiArNDAsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0M0LDExNTIwMCByb290PS9kZXYvbmZzIGlwPWRoY3AgaWdub3JlX2xvZ2xldmVsIHJ3IjsKKwkJc3Rkb3V0LXBhdGggPSAmc2NpZmE0OwogCX07CiAKIAltZW1vcnkgewpAQCAtMTAwLDE5ICsxMDEsMjMgQEAKIAkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOwogCQlsZWQxIHsKIAkJCWdwaW9zID0gPCZwZmMgMjAgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxhYmVsID0gIkxFRDEiOwogCQl9OwogCQlsZWQyIHsKIAkJCWdwaW9zID0gPCZwZmMgMjEgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxhYmVsID0gIkxFRDIiOwogCQl9OwogCQlsZWQzIHsKIAkJCWdwaW9zID0gPCZwZmMgMjIgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxhYmVsID0gIkxFRDMiOwogCQl9OwogCQlsZWQ0IHsKIAkJCWdwaW9zID0gPCZwZmMgMjMgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxhYmVsID0gIkxFRDQiOwogCQl9OwogCX07CiAKLQlncGlvLWtleXMgeworCWtleWJvYXJkIHsKIAkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOwogCiAJCWJhY2sta2V5IHsKQEAgLTI1MCw3ICsyNTUsNyBAQAogCQl9OwogCX07CiAKLQlhazQ2NDg6IGFrNDY0OEAweDEyIHsKKwlhazQ2NDg6IGFrNDY0OEAxMiB7CiAJCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAiYXNhaGkta2FzZWksYWs0NjQ4IjsKIAkJcmVnID0gPDB4MTI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc2g3M2EwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zaDczYTAuZHRzaQppbmRleCAwMzBhNTkyLi5kOGRlZjVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zaDczYTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zaDczYTAuZHRzaQpAQCAtMTM4LDcgKzEzOCw3IEBACiAJaTJjMDogaTJjQGU2ODIwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXNoNzNhMCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDB4ZTY4MjAwMDAgMHg0MjU+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTY3IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTY4IElSUV9UWVBFX0xFVkVMX0hJR0gKQEAgLTE1MCw3ICsxNTAsNyBAQAogCWkyYzE6IGkyY0BlNjgyMjAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1zaDczYTAiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwweGU2ODIyMDAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDUxIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgNTIgSVJRX1RZUEVfTEVWRUxfSElHSApAQCAtMTYyLDcgKzE2Miw3IEBACiAJaTJjMjogaTJjQGU2ODI0MDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXNoNzNhMCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDB4ZTY4MjQwMDAgMHg0MjU+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTcxIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTcyIElSUV9UWVBFX0xFVkVMX0hJR0gKQEAgLTE3NCw3ICsxNzQsNyBAQAogCWkyYzM6IGkyY0BlNjgyNjAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1zaDczYTAiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwweGU2ODI2MDAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE4MyBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkgICAgICAwIDE4NCBJUlFfVFlQRV9MRVZFTF9ISUdICkBAIC0xODYsNyArMTg2LDcgQEAKIAlpMmM0OiBpMmNAZTY4MjgwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtc2g3M2EwIiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MHhlNjgyODAwMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxODcgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxODggSVJRX1RZUEVfTEVWRUxfSElHSApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYS5kdHNpCmluZGV4IDQ0NzJmZDkuLjI1MmMzZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2EuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhLmR0c2kKQEAgLTYzOSw2ICs2MzksMzMgQEAKIAkJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOwogCQl9OwogCisJCW9jcmFtOiBzcmFtQGZmZmYwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibW1pby1zcmFtIjsKKwkJCXJlZyA9IDwweGZmZmYwMDAwIDB4MTAwMDA+OworCQl9OworCisJCXNwaTA6IHNwaUBmZmYwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXNzaSI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4ZmZmMDAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNTQgND47CisJCQludW0tY3MgPSA8ND47CisJCQljbG9ja3MgPSA8JnNwaV9tX2Nsaz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNwaTE6IHNwaUBmZmYwMTAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXNzaSI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4ZmZmMDEwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNTYgND47CisJCQludW0tY3MgPSA8ND47CisJCQljbG9ja3MgPSA8JnNwaV9tX2Nsaz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCS8qIExvY2FsIHRpbWVyICovCiAJCXRpbWVyQGZmZmVjNjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS10d2QtdGltZXIiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9hcnJpYTEwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2FycmlhMTAuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTA1YzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9hcnJpYTEwLmR0c2kKQEAgLTAsMCArMSwzNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgQWx0ZXJhIENvcnBvcmF0aW9uIChDKSAyMDE0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorCisvIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZ21hYzA7CisJCWV0aGVybmV0MSA9ICZnbWFjMTsKKwkJZXRoZXJuZXQyID0gJmdtYWMyOworCQlzZXJpYWwwID0gJnVhcnQwOworCQlzZXJpYWwxID0gJnVhcnQxOworCQl0aW1lcjAgPSAmdGltZXIwOworCQl0aW1lcjEgPSAmdGltZXIxOworCQl0aW1lcjIgPSAmdGltZXIyOworCQl0aW1lcjMgPSAmdGltZXIzOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCQljcHVAMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwxPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKwl9OworCisJaW50YzogaW50Y0BmZmZmZDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJcmVnID0gPDB4ZmZmZmQwMDAgMHgxMDAwPiwKKwkJICAgICAgPDB4ZmZmZmMxMDAgMHgxMDA+OworCX07CisKKwlzb2MgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OworCQlyYW5nZXM7CisKKwkJYW1iYSB7CisJCQljb21wYXRpYmxlID0gImFybSxhbWJhLWJ1cyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzOworCisJCQlwZG1hOiBwZG1hQGZmZGExMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDMzMCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHhmZmRhMTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCA4MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8MCA4NCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8MCA4NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8MCA4NiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8MCA4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8MCA4OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8MCA4OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8MCA5MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCQkjZG1hLWNlbGxzID0gPDE+OworCQkJCSNkbWEtY2hhbm5lbHMgPSA8OD47CisJCQkJI2RtYS1yZXF1ZXN0cyA9IDwzMj47CisJCQl9OworCQl9OworCisJCWNsa21nckBmZmQwNDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhbHRyLGNsay1tZ3IiOworCQkJCXJlZyA9IDwweGZmZDA0MDAwIDB4MTAwMD47CisKKwkJCQljbG9ja3MgeworCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQkJb3NjMTogb3NjMSB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCQkJfTsKKworCQkJCQltYWluX3BsbDogbWFpbl9wbGwgeworCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCWNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLXBsbC1jbG9jayI7CisJCQkJCQljbG9ja3MgPSA8Jm9zYzE+OworCQkJCQl9OworCisJCQkJCXBlcmlwaF9wbGw6IHBlcmlwaF9wbGwgeworCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCWNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLXBsbC1jbG9jayI7CisJCQkJCQljbG9ja3MgPSA8Jm9zYzE+OworCQkJCQl9OworCQkJCX07CisJCX07CisKKwkJZ21hYzA6IGV0aGVybmV0QGZmODAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLXN0bW1hYyIsICJzbnBzLGR3bWFjLTMuNzJhIiwgInNucHMsZHdtYWMiOworCQkJcmVnID0gPDB4ZmY4MDAwMDAgMHgyMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA5MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWludGVycnVwdC1uYW1lcyA9ICJtYWNpcnEiOworCQkJLyogRmlsbGVkIGluIGJ5IGJvb3Rsb2FkZXIgKi8KKwkJCW1hYy1hZGRyZXNzID0gWzAwIDAwIDAwIDAwIDAwIDAwXTsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZ21hYzE6IGV0aGVybmV0QGZmODAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLXN0bW1hYyIsICJzbnBzLGR3bWFjLTMuNzJhIiwgInNucHMsZHdtYWMiOworCQkgICAgICAgIHJlZyA9IDwweGZmODAyMDAwIDB4MjAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgOTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlpbnRlcnJ1cHQtbmFtZXMgPSAibWFjaXJxIjsKKwkJCS8qIEZpbGxlZCBpbiBieSBib290bG9hZGVyICovCisJCQltYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWdtYWMyOiBldGhlcm5ldEBmZjgwNDAwMCB7CisJCQljb21wYXRpYmxlID0gImFsdHIsc29jZnBnYS1zdG1tYWMiLCAic25wcyxkd21hYy0zLjcyYSIsICJzbnBzLGR3bWFjIjsKKwkJCXJlZyA9IDwweGZmODA0MDAwIDB4MjAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgOTQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlpbnRlcnJ1cHQtbmFtZXMgPSAibWFjaXJxIjsKKwkJCS8qIEZpbGxlZCBpbiBieSBib290bG9hZGVyICovCisJCQltYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWdwaW8wOiBncGlvQGZmYzAyOTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJcmVnID0gPDB4ZmZjMDI5MDAgMHgxMDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJcG9ydGE6IGdwaW8tY29udHJvbGxlckAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8tcG9ydCI7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCXNucHMsbnItZ3Bpb3MgPSA8Mjk+OworCQkJCXJlZyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQl9OworCQl9OworCisJCWdwaW8xOiBncGlvQGZmYzAyYTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJcmVnID0gPDB4ZmZjMDJhMDAgMHgxMDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJcG9ydGI6IGdwaW8tY29udHJvbGxlckAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8tcG9ydCI7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCXNucHMsbnItZ3Bpb3MgPSA8Mjk+OworCQkJCXJlZyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQl9OworCQl9OworCisJCWdwaW8yOiBncGlvQGZmYzAyYjAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJcmVnID0gPDB4ZmZjMDJiMDAgMHgxMDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJcG9ydGM6IGdwaW8tY29udHJvbGxlckAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8tcG9ydCI7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCXNucHMsbnItZ3Bpb3MgPSA8Mjc+OworCQkJCXJlZyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQl9OworCQl9OworCisJCWkyYzA6IGkyY0BmZmMwMjIwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGRlc2lnbndhcmUtaTJjIjsKKwkJCXJlZyA9IDwweGZmYzAyMjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMDUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzE6IGkyY0BmZmMwMjMwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGRlc2lnbndhcmUtaTJjIjsKKwkJCXJlZyA9IDwweGZmYzAyMzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzI6IGkyY0BmZmMwMjQwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGRlc2lnbndhcmUtaTJjIjsKKwkJCXJlZyA9IDwweGZmYzAyNDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzM6IGkyY0BmZmMwMjUwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGRlc2lnbndhcmUtaTJjIjsKKwkJCXJlZyA9IDwweGZmYzAyNTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzQ6IGkyY0BmZmMwMjYwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGRlc2lnbndhcmUtaTJjIjsKKwkJCXJlZyA9IDwweGZmYzAyNjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCUwyOiBsMi1jYWNoZUBmZmZmZjAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDMxMC1jYWNoZSI7CisJCQlyZWcgPSA8MHhmZmZmZjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2FjaGUtdW5pZmllZDsKKwkJCWNhY2hlLWxldmVsID0gPDI+OworCQl9OworCisJCW1tYzogZHdtbWMwQGZmODA4MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsdHIsc29jZnBnYS1kdy1tc2hjIjsKKwkJCXJlZyA9IDwweGZmODA4MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgOTggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlmaWZvLWRlcHRoID0gPDB4NDAwPjsKKwkJfTsKKworCQlvY3JhbTogc3JhbUBmZmUwMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1taW8tc3JhbSI7CisJCQlyZWcgPSA8MHhmZmUwMDAwMCAweDQwMDAwPjsKKwkJfTsKKworCQlyc3Q6IHJzdG1nckBmZmQwNTAwMCB7CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsdHIscnN0LW1nciI7CisJCQlyZWcgPSA8MHhmZmQwNTAwMCAweDEwMD47CisJCX07CisKKwkJc3lzbWdyOiBzeXNtZ3JAZmZkMDYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbHRyLHN5cy1tZ3IiLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweGZmZDA2MDAwIDB4MzAwPjsKKwkJfTsKKworCQkvKiBMb2NhbCB0aW1lciAqLworCQl0aW1lckBmZmZmYzYwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktdHdkLXRpbWVyIjsKKwkJCXJlZyA9IDwweGZmZmZjNjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMyAweGYwND47CisJCX07CisKKwkJdGltZXIwOiB0aW1lcjBAZmZjMDI3MDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJcmVnID0gPDB4ZmZjMDI3MDAgMHgxMDA+OworCQl9OworCisJCXRpbWVyMTogdGltZXIxQGZmYzAyODAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJaW50ZXJydXB0cyA9IDwwIDExNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXJlZyA9IDwweGZmYzAyODAwIDB4MTAwPjsKKwkJfTsKKworCQl0aW1lcjI6IHRpbWVyMkBmZmQwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXRpbWVyIjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlyZWcgPSA8MHhmZmQwMDAwMCAweDEwMD47CisJCX07CisKKwkJdGltZXIzOiB0aW1lcjNAZmZkMDAxMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJcmVnID0gPDB4ZmZkMDEwMDAgMHgxMDA+OworCQl9OworCisJCXVhcnQwOiBzZXJpYWwwQGZmYzAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQlyZWcgPSA8MHhmZmMwMjAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTEwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJcmVnLXNoaWZ0ID0gPDI+OworCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQl9OworCisJCXVhcnQxOiBzZXJpYWwxQGZmYzAyMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQlyZWcgPSA8MHhmZmMwMjEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTExIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJcmVnLXNoaWZ0ID0gPDI+OworCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQl9OworCisJCXVzYnBoeTA6IHVzYnBoeUAwIHsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInVzYi1ub3AteGNlaXYiOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXVzYjA6IHVzYkBmZmIwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHdjMiI7CisJCQlyZWcgPSA8MHhmZmIwMDAwMCAweGZmZmY+OworCQkJaW50ZXJydXB0cyA9IDwwIDk1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJcGh5cyA9IDwmdXNicGh5MD47CisJCQlwaHktbmFtZXMgPSAidXNiMi1waHkiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2IxOiB1c2JAZmZiNDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3YzIiOworCQkJcmVnID0gPDB4ZmZiNDAwMDAgMHhmZmZmPjsKKwkJCWludGVycnVwdHMgPSA8MCA5NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXBoeXMgPSA8JnVzYnBoeTA+OworCQkJcGh5LW5hbWVzID0gInVzYjItcGh5IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJd2F0Y2hkb2cwOiB3YXRjaGRvZ0BmZmQwMDIwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctd2R0IjsKKwkJCXJlZyA9IDwweGZmZDAwMjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXdhdGNoZG9nMTogd2F0Y2hkb2dAZmZkMDAzMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LXdkdCI7CisJCQlyZWcgPSA8MHhmZmQwMDMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTIwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfYXJyaWExMF9zb2Nkay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2FycmlhMTBfc29jZGsuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwMTVjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2FycmlhMTBfc29jZGsuZHRzCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWx0ZXJhIENvcnBvcmF0aW9uIDx3d3cuYWx0ZXJhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgInNvY2ZwZ2FfYXJyaWExMC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJBbHRlcmEgU09DRlBHQSBBcnJpYSAxMCI7CisJY29tcGF0aWJsZSA9ICJhbHRyLHNvY2ZwZ2EtYXJyaWExMCIsICJhbHRyLHNvY2ZwZ2EiOworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdHdhaXQiOworCX07CisKKwltZW1vcnkgeworCQluYW1lID0gIm1lbW9yeSI7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAgMHg0MDAwMDAwMD47IC8qIDFHQiAqLworCX07CisKKwlzb2MgeworCQljbGttZ3JAZmZkMDQwMDAgeworCQkJY2xvY2tzIHsKKwkJCQlvc2MxIHsKKwkJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlzZXJpYWwwQGZmYzAyMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTUuZHRzaQppbmRleCAyOGMwNWU3Li4wNmRiOTUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2N5Y2xvbmU1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9jeWNsb25lNS5kdHNpCkBAIC00OSwzICs0OSw3IEBACiAJCX07CiAJfTsKIH07CisKKyZ3YXRjaGRvZzAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGUtZGJ4NXgwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtZGJ4NXgwLmR0c2kKaW5kZXggOWQyMzIzMC4uYmZkM2YxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLWRieDV4MC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1kYng1eDAuZHRzaQpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvbWZkL2RieDUwMC1wcmNtdS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2FybS91eDUwMF9wbV9kb21haW5zLmg+CiAjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKIAogLyB7CkBAIC00Myw2ICs0NCwxMCBAQAogCQkJaW50ZXJydXB0cyA9IDwwIDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCX07CiAKKwkJcG1fZG9tYWluczogcG1fZG9tYWluczAgeworCQkJY29tcGF0aWJsZSA9ICJzdGVyaWNzc29uLHV4NTAwLXBtLWRvbWFpbnMiOworCQkJI3Bvd2VyLWRvbWFpbi1jZWxscyA9IDwxPjsKKwkJfTsKIAogCQljbG9ja3MgewogCQkJY29tcGF0aWJsZSA9ICJzdGVyaWNzc29uLHU4NTAwLWNsa3MiOwpAQCAtNjM2LDYgKzY0MSw3IEBACiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDMgMz4sIDwmcHJjY19wY2xrIDMgMz47CiAJCQljbG9jay1uYW1lcyA9ICJpMmNjbGsiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJaTJjQDgwMTIyMDAwIHsKQEAgLTY1MSw2ICs2NTcsNyBAQAogCiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAxIDI+LCA8JnByY2NfcGNsayAxIDI+OwogCQkJY2xvY2stbmFtZXMgPSAiaTJjY2xrIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCWkyY0A4MDEyODAwMCB7CkBAIC02NjYsNiArNjczLDcgQEAKIAogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMSA2PiwgPCZwcmNjX3BjbGsgMSA2PjsKIAkJCWNsb2NrLW5hbWVzID0gImkyY2NsayIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQlpMmNAODAxMTAwMDAgewpAQCAtNjgxLDYgKzY4OSw3IEBACiAKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDIgMD4sIDwmcHJjY19wY2xrIDIgMD47CiAJCQljbG9jay1uYW1lcyA9ICJpMmNjbGsiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJaTJjQDgwMTJhMDAwIHsKQEAgLTY5Niw2ICs3MDUsNyBAQAogCiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAxIDk+LCA8JnByY2NfcGNsayAxIDEwPjsKIAkJCWNsb2NrLW5hbWVzID0gImkyY2NsayIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQlzc3BAODAwMDIwMDAgewpAQCAtNzA5LDYgKzcxOSw3IEBACiAJCQlkbWFzID0gPCZkbWEgOCAwIDB4Mj4sIC8qIExvZ2ljYWwgLSBEZXZUb01lbSAqLwogCQkJICAgICAgIDwmZG1hIDggMCAweDA+OyAvKiBMb2dpY2FsIC0gTWVtVG9EZXYgKi8KIAkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQlzc3BAODAwMDMwMDAgewpAQCAtNzIyLDYgKzczMyw3IEBACiAJCQlkbWFzID0gPCZkbWEgOSAwIDB4Mj4sIC8qIExvZ2ljYWwgLSBEZXZUb01lbSAqLwogCQkJICAgICAgIDwmZG1hIDkgMCAweDA+OyAvKiBMb2dpY2FsIC0gTWVtVG9EZXYgKi8KIAkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQlzcGlAODAxMWEwMDAgewpAQCAtNzM2LDYgKzc0OCw3IEBACiAJCQlkbWFzID0gPCZkbWEgMCAwIDB4Mj4sIC8qIExvZ2ljYWwgLSBEZXZUb01lbSAqLwogCQkJICAgICAgIDwmZG1hIDAgMCAweDA+OyAvKiBMb2dpY2FsIC0gTWVtVG9EZXYgKi8KIAkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQlzcGlAODAxMTIwMDAgewpAQCAtNzUwLDYgKzc2Myw3IEBACiAJCQlkbWFzID0gPCZkbWEgMzUgMCAweDI+LCAvKiBMb2dpY2FsIC0gRGV2VG9NZW0gKi8KIAkJCSAgICAgICA8JmRtYSAzNSAwIDB4MD47IC8qIExvZ2ljYWwgLSBNZW1Ub0RldiAqLwogCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCXNwaUA4MDExMTAwMCB7CkBAIC03NjQsNiArNzc4LDcgQEAKIAkJCWRtYXMgPSA8JmRtYSAzMyAwIDB4Mj4sIC8qIExvZ2ljYWwgLSBEZXZUb01lbSAqLwogCQkJICAgICAgIDwmZG1hIDMzIDAgMHgwPjsgLyogTG9naWNhbCAtIE1lbVRvRGV2ICovCiAJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJc3BpQDgwMTI5MDAwIHsKQEAgLTc3OCw2ICs3OTMsNyBAQAogCQkJZG1hcyA9IDwmZG1hIDQwIDAgMHgyPiwgLyogTG9naWNhbCAtIERldlRvTWVtICovCiAJCQkgICAgICAgPCZkbWEgNDAgMCAweDA+OyAvKiBMb2dpY2FsIC0gTWVtVG9EZXYgKi8KIAkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQl1YXJ0QDgwMTIwMDAwIHsKQEAgLTgzNiw2ICs4NTIsNyBAQAogCiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAxIDU+LCA8JnByY2NfcGNsayAxIDU+OwogCQkJY2xvY2stbmFtZXMgPSAic2RpIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpAQCAtODUxLDYgKzg2OCw3IEBACiAKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDIgND4sIDwmcHJjY19wY2xrIDIgNj47CiAJCQljbG9jay1uYW1lcyA9ICJzZGkiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC04NjYsNiArODg0LDcgQEAKIAogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMyA0PiwgPCZwcmNjX3BjbGsgMyA0PjsKIAkJCWNsb2NrLW5hbWVzID0gInNkaSIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTg4MSw2ICs5MDAsNyBAQAogCiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAyIDU+LCA8JnByY2NfcGNsayAyIDc+OwogCQkJY2xvY2stbmFtZXMgPSAic2RpIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpAQCAtODk2LDYgKzkxNiw3IEBACiAKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDIgMj4sIDwmcHJjY19wY2xrIDIgND47CiAJCQljbG9jay1uYW1lcyA9ICJzZGkiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC05MTEsNiArOTMyLDcgQEAKIAogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMyA3PiwgPCZwcmNjX3BjbGsgMyA3PjsKIAkJCWNsb2NrLW5hbWVzID0gInNkaSIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLW5oazE1LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLW5oazE1LmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGMwMGVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstbmhrMTUuZHRzCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogRGV2aWNlIFRyZWUgZm9yIHRoZSBTVC1Fcmljc3NvbiBOb21hZGlrIFM4ODE1IGJvYXJkCisgKiBQcm9kdWNlZCBieSBDYWxhbyBTeXN0ZW1zCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSAic3RlLW5vbWFkaWstc3RuODgxNS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJOb21hZGlrIFNUTjg4MTVOSEsiOworCWNvbXBhdGlibGUgPSAic3Qsbm9tYWRpay1uaGstMTUiOworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAicm9vdD0vZGV2L3JhbTAgY29uc29sZT10dHlBTUExLDExNTIwMG44IGVhcmx5cHJpbnRrIjsKKwl9OworCisJYWxpYXNlcyB7CisJCXN0bXBlLWkyYzAgPSAmc3RtcGUwOworCQlzdG1wZS1pMmMxID0gJnN0bXBlMTsKKwl9OworCisJcGluY3RybCB7CisJCXN0bXBlMjQwMV8xIHsKKwkJCXN0bXBlMjQwMV8xX25oa19tb2RlOiBzdG1wZTI0MDFfMV9uaGsgeworCQkJCW5oa19jZmcxIHsKKwkJCQkJc3RlLHBpbnMgPSAiR1BJTzc2X0IyMCI7IC8vIElSUSBsaW5lCisJCQkJCXN0ZSxpbnB1dCA9IDwwPjsKKwkJCQl9OworCQkJCW5oa19jZmcyIHsKKwkJCQkJc3RlLHBpbnMgPSAiR1BJTzc3X0I4IjsgLy8gcmVzZXQgbGluZQorCQkJCQlzdGUsb3V0cHV0ID0gPDE+OworCQkJCX07CisJCQl9OworCQl9OworCQlzdG1wZTI0MDFfMiB7CisJCQlzdG1wZTI0MDFfMl9uaGtfbW9kZTogc3RtcGUyNDAxXzJfbmhrIHsKKwkJCQluaGtfY2ZnMSB7CisJCQkJCXN0ZSxwaW5zID0gIkdQSU83OF9BOCI7IC8vIElSUSBsaW5lCisJCQkJCXN0ZSxpbnB1dCA9IDwwPjsKKwkJCQl9OworCQkJCW5oa19jZmcyIHsKKwkJCQkJc3RlLHBpbnMgPSAiR1BJTzc5X0M5IjsgLy8gcmVzZXQgbGluZQorCQkJCQlzdGUsb3V0cHV0ID0gPDE+OworCQkJCX07CisJCQl9OworCQl9OworCX07CisKKwlzcmNAMTAxZTAwMDAgeworCQkvKiBUaGVzZSBjaHJ5c3RhbCBvdXRwdXRzIGFyZSBub3QgdXNlZCBvbiB0aGlzIGJvYXJkICovCisJCWRpc2FibGUtc3h0YWxvOworCQlkaXNhYmxlLW14dGFsbzsKKwl9OworCisJLyogVGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJydXB0IGlzIHJvdXRlZCBvbiB0aGUgTkhLLTE1IGRlYnVnIGJvYXJkICovCisJZXh0ZXJuYWwtYnVzQDM0MDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDB4MzQwMDAwMDAgMHgxMDAwMDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXMgPSA8MCAweDM0MDAwMDAwIDB4MTAwMDAwMD47CisJCWV0aGVybmV0QDMwMCB7CisJCQljb21wYXRpYmxlID0gInNtc2MsbGFuOTFjMTExIjsKKwkJCXJlZyA9IDwweDMwMCAweDBmZDAwPjsKKwkJCXJlZy1pby13aWR0aCA9IDwyPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZzdG1wZV9ncGlvNDQgMTAgR1BJT19BQ1RJVkVfSElHSD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzdG1wZV9ncGlvNDQ+OworCQkJaW50ZXJydXB0cyA9IDwxMSBJUlFfVFlQRV9FREdFX1JJU0lORz47CisJCX07CisJfTsKKworCWkyYzAgeworCQlzdG1wZTA6IHN0bXBlMjQwMUA0MyB7CisJCQljb21wYXRpYmxlID0gInN0LHN0bXBlMjQwMSI7CisJCQlyZWcgPSA8MHg0Mz47CisJCQlyZXNldC1ncGlvcyA9IDwmZ3BpbzIgMTMgR1BJT19BQ1RJVkVfTE9XPjsgLy8gR1BJTzc3CisJCQlpbnRlcnJ1cHRzID0gPDEyIElSUV9UWVBFX0VER0VfRkFMTElORz47IC8vIEdQSU83NgorCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzI+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQl3YWtldXAtc291cmNlOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmc3RtcGUyNDAxXzFfbmhrX21vZGU+OworCQkJc3RtcGVfZ3BpbzQzOiBzdG1wZV9ncGlvIHsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0bXBlLWdwaW8iOworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCS8qIFNvbWUgcGlucyBpbiBhbHRlcm5hdGUgZnVuY3Rpb25zICovCisJCQkJc3Qsbm9yZXF1ZXN0LW1hc2sgPSA8MHhmMGYwMDI+OworCQkJfTsKKwkJCXN0bXBlX2tleXBhZCB7CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdG1wZS1rZXlwYWQiOworCQkJCWRlYm91bmNlLWludGVydmFsID0gPDY0PjsKKwkJCQlzdCxzY2FuLWNvdW50ID0gPDg+OworCQkJCXN0LG5vLWF1dG9yZXBlYXQ7CisJCQkJa2V5cGFkLG51bS1yb3dzID0gPDg+OworCQkJCWtleXBhZCxudW0tY29sdW1ucyA9IDw4PjsKKwkJCQlsaW51eCxrZXltYXAgPSA8MHgwMDAyMDA3MiAvLyBWb2wgZG93bgorCQkJCQkJMHgwMDAzMDA3MyAvLyBWb2wgdXAKKwkJCQkJCTB4MDEwMDAwOWUgLy8gQmFjaworCQkJCQkJMHgwMTAxMDBlMyAvLyBUViBvdXQKKwkJCQkJCTB4MDEwMjAwOTggLy8gTG9jaworCQkJCQkJMHgwMTAzMDEzYiAvLyBTdGFydAorCQkJCQkJMHgwMjAwMDBhMyAvLyBOZXh0CisJCQkJCQkweDAyMDEwMGE0IC8vIFBsYXkKKwkJCQkJCTB4MDIwMjAwYTUgLy8gUHJldgorCQkJCQkJMHgwMjAzMDE2MCAvLyBPSworCQkJCQkJMHgwMzAwMDA2OSAvLyBMZWZ0CisJCQkJCQkweDAzMDEwMDZhIC8vIFJpZ2h0CisJCQkJCQkweDAzMDIwMDY3IC8vIFVwCisJCQkJCQkweDAzMDMwMDZjPjsgLy8gRG93bgorCQkJfTsKKwkJfTsKKwkJc3RtcGUxOiBzdG1wZTI0MDFANDQgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdG1wZTI0MDEiOworCQkJcmVnID0gPDB4NDQ+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JmdwaW8yIDE1IEdQSU9fQUNUSVZFX0xPVz47IC8vIEdQSU83OQorCQkJaW50ZXJydXB0cyA9IDwxNCBJUlFfVFlQRV9FREdFX0ZBTExJTkc+OyAvLyBHUElPNzgKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8yPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJd2FrZXVwLXNvdXJjZTsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnN0bXBlMjQwMV8yX25oa19tb2RlPjsKKwkJCXN0bXBlX2dwaW80NDogc3RtcGVfZ3BpbyB7CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdG1wZS1ncGlvIjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCX07CisJCX07CisJfTsKKworCWFtYmEgeworCQltbWNzZDogc2RpQDEwMWY2MDAwIHsKKwkJCWNkLWdwaW9zID0gPCZzdG1wZV9ncGlvNDQgNyBHUElPX0FDVElWRV9MT1c+OworCQkJd3AtZ3Bpb3MgPSA8JnN0bXBlX2dwaW80NCAxOCBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwl9OworCisJLyogQ3VzdG9tIGJvYXJkIG5vZGUgd2l0aCBHUElPIHBpbnMgdG8gYWN0aXZlIGV0YyAqLworCXVzYi1zODgxNSB7CisJCS8qIFRoaXMgd2lsbCB0dXJuIG9mZiBTQVRBIHNvIHRoYXQgTU1DL1NEIGNhbiB0aHJpdmUgKi8KKwkJbW1jc2QtZ3BpbyB7CisJCQlncGlvcyA9IDwmc3RtcGVfZ3BpbzQ0IDIgMHgxPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLXM4ODE1LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLXM4ODE1LmR0cwppbmRleCA5MGQ4YjZjLi5lNDExZmY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1zODgxNS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstczg4MTUuZHRzCkBAIC00LDYgKzQsNyBAQAogICovCiAKIC9kdHMtdjEvOworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgogI2luY2x1ZGUgInN0ZS1ub21hZGlrLXN0bjg4MTUuZHRzaSIKIAogLyB7CkBAIC0xNCwxNCArMTUsNiBAQAogCQlib290YXJncyA9ICJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eUFNQTEsMTE1MjAwbjggZWFybHlwcmludGsiOwogCX07CiAKLQkvKiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcnJ1cHQgaXMgcm91dGVkIG9uIHRoZSBTODgxNSBib2FyZCAqLwotCWV4dGVybmFsLWJ1c0AzNDAwMDAwMCB7Ci0JCWV0aGVybmV0QDMwMCB7Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMz47Ci0JCQlpbnRlcnJ1cHRzID0gPDggMHgxPjsKLQkJfTsKLQl9OwotCiAJc3JjQDEwMWUwMDAwIHsKIAkJLyogVGhlc2UgY2hyeXN0YWwgZHJpdmVycyBhcmUgbm90IHVzZWQgb24gdGhpcyBib2FyZCAqLwogCQlkaXNhYmxlLXN4dGFsbzsKQEAgLTQ3LDYgKzQwLDE0IEBACiAJCQkJfTsKIAkJCX07CiAJCX07CisJCWdwaW9pMmMgeworCQkJZ3Bpb2kyY19kZWZhdWx0X21vZGU6IGdwaW9pMmNfZGVmYXVsdCB7CisJCQkJZ3Bpb2kyY19kZWZhdWx0X2NmZyB7CisJCQkJCXN0ZSxwaW5zID0gIkdQSU83M19DMjEiLCAiR1BJTzc0X0MyMCI7CisJCQkJCXN0ZSxpbnB1dCA9IDwwPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKIAkJdXNlci1sZWQgewogCQkJdXNlcl9sZWRfZGVmYXVsdF9tb2RlOiB1c2VyX2xlZF9kZWZhdWx0IHsKIAkJCQl1c2VyX2xlZF9kZWZhdWx0X2NmZyB7CkBAIC02NSw2ICs2Niw0NSBAQAogCQl9OwogCX07CiAKKwkvKiBFdGhlcm5ldCAqLworCWV4dGVybmFsLWJ1c0AzNDAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweDM0MDAwMDAwIDB4MTAwMDAwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMHgzNDAwMDAwMCAweDEwMDAwMDA+OworCQlldGhlcm5ldEAzMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkxYzExMSI7CisJCQlyZWcgPSA8MHgzMDAgMHgwZmQwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMz47CisJCQlpbnRlcnJ1cHRzID0gPDggSVJRX1RZUEVfRURHRV9SSVNJTkc+OworCQl9OworCX07CisKKwkvKiBHUElPIEkyQyBjb25uZWN0ZWQgdG8gdGhlIFVTQiBwb3J0aW9ucyBvZiB0aGUgU1R3NDgxMSBvbmx5ICovCisJZ3Bpby1pMmMgeworCQljb21wYXRpYmxlID0gImkyYy1ncGlvIjsKKwkJZ3Bpb3MgPSA8JmdwaW8yIDEwIDA+LCAvKiBzZGEgKi8KKwkJCTwmZ3BpbzIgOSAwPjsgLyogc2NsICovCisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZncGlvaTJjX2RlZmF1bHRfbW9kZT47CisKKwkJc3R3NDgxMUAyZCB7CisJCQkgICBjb21wYXRpYmxlID0gInN0LHN0dzQ4MTEtdXNiIjsKKwkJCSAgIHJlZyA9IDwweDJkPjsKKwkJfTsKKwl9OworCisKKwkvKiBDb25maWd1cmUgY2FyZCBkZXRlY3QgZm9yIHRoZSB1U0Qgc2xvdCAqLworCWFtYmEgeworCQltbWNzZDogc2RpQDEwMWY2MDAwIHsKKwkJCWNkLWdwaW9zID0gPCZncGlvMyAxNSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07CisKIAkvKiBDdXN0b20gYm9hcmQgbm9kZSB3aXRoIEdQSU8gcGlucyB0byBhY3RpdmUgZXRjICovCiAJdXNiLXM4ODE1IHsKIAkJLyogVGhpcyB3aWxsIGJpYXMgdGhlIE1NQy9TRCBjYXJkIGRldGVjdCBsaW5lICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1zdG44ODE1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1zdG44ODE1LmR0c2kKaW5kZXggZGJjZjUyMS4uZjQzNWZmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstc3RuODgxNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLXN0bjg4MTUuZHRzaQpAQCAtMTE3LDcgKzExNyw3IEBACiAJCQltbWNzZF9kZWZhdWx0X211eDogbW1jc2RfbXV4IHsKIAkJCQltbWNzZF9kZWZhdWx0X211eCB7CiAJCQkJCXN0ZSxmdW5jdGlvbiA9ICJtbWNzZCI7Ci0JCQkJCXN0ZSxwaW5zID0gIm1tY3NkX2FfMSI7CisJCQkJCXN0ZSxwaW5zID0gIm1tY3NkX2FfMSIsICJtbWNzZF9iXzEiOwogCQkJCX07CiAJCQl9OwogCQkJbW1jc2RfZGVmYXVsdF9tb2RlOiBtbWNzZF9kZWZhdWx0IHsKQEAgLTEyNyw5ICsxMjcsOSBAQAogCQkJCQlzdGUsb3V0cHV0ID0gPDA+OwogCQkJCX07CiAJCQkJbW1jc2RfZGVmYXVsdF9jZmcyIHsKLQkJCQkJLyogTUNDTURESVIsIE1DREFUMERJUiwgTUNEQVQzMURJUiAqLworCQkJCQkvKiBNQ0NNRERJUiwgTUNEQVQwRElSLCBNQ0RBVDMxRElSLCBNQ0RBVERJUjIgKi8KIAkJCQkJc3RlLHBpbnMgPSAiR1BJTzEwX0MxMSIsICJHUElPMTVfQTEyIiwKLQkJCQkJIkdQSU8xNl9DMTMiOworCQkJCQkiR1BJTzE2X0MxMyIsICJHUElPMjNfRDE1IjsKIAkJCQkJc3RlLG91dHB1dCA9IDwxPjsKIAkJCQl9OwogCQkJCW1tY3NkX2RlZmF1bHRfY2ZnMyB7CkBAIC0xNjksMjEgKzE2OSwxMSBAQAogCQkJCX07CiAJCQl9OwogCQl9OwotCQlpMmMyIHsKLQkJCWkyYzJfZGVmYXVsdF9tb2RlOiBpMmMyX2RlZmF1bHQgewotCQkJCWkyYzJfZGVmYXVsdF9jZmcgewotCQkJCQlzdGUscGlucyA9ICJHUElPNzNfQzIxIiwgIkdQSU83NF9DMjAiOwotCQkJCQlzdGUsaW5wdXQgPSA8MD47Ci0JCQkJfTsKLQkJCX07Ci0JCX07CiAJfTsKIAogCXNyYzogc3JjQDEwMWUwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzdGVyaWNzc29uLG5vbWFkaWstc3JjIjsKIAkJcmVnID0gPDB4MTAxZTAwMDAgMHgxMDAwPjsKLQkJZGlzYWJsZS1zeHRhbG87Ci0JCWRpc2FibGUtbXh0YWxvOwogCiAJCS8qCiAJCSAqIE1YVEFMICJNYWluIENocnlzdGFsIiBpcyBhIGNocnlzdGFsIG9zY2lsbGF0b3IgQDE5LjIgTUh6CkBAIC02ODMsMTggKzY3Myw2IEBACiAJCX07CiAJfTsKIAotCWV4dGVybmFsLWJ1c0AzNDAwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7Ci0JCXJlZyA9IDwweDM0MDAwMDAwIDB4MTAwMDAwMD47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmFuZ2VzID0gPDAgMHgzNDAwMDAwMCAweDEwMDAwMDA+OwotCQlldGhlcm5ldEAzMDAgewotCQkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkxYzExMSI7Ci0JCQlyZWcgPSA8MHgzMDAgMHgwZmQwMD47Ci0JCX07Ci0JfTsKLQogCS8qIEkyQzAgY29ubmVjdGVkIHRvIHRoZSBTVHc0ODExIHBvd2VyIG1hbmFnZW1lbnQgY2hpcCAqLwogCWkyYzAgewogCQljb21wYXRpYmxlID0gInN0LG5vbWFkaWstaTJjIiwgImFybSxwcmltZWNlbGwiOwpAQCAtNzQ5LDIyICs3MjcsNiBAQAogCQl9OwogCX07CiAKLQkvKiBJMkMyIGNvbm5lY3RlZCB0byB0aGUgVVNCIHBvcnRpb25zIG9mIHRoZSBTVHc0ODExIG9ubHkgKi8KLQlpMmMyIHsKLQkJY29tcGF0aWJsZSA9ICJpMmMtZ3BpbyI7Ci0JCWdwaW9zID0gPCZncGlvMiAxMCAwPiwgLyogc2RhICovCi0JCQk8JmdwaW8yIDkgMD47IC8qIHNjbCAqLwotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmaTJjMl9kZWZhdWx0X21vZGU+OwotCi0JCXN0dzQ4MTFAMmQgewotCQkJICAgY29tcGF0aWJsZSA9ICJzdCxzdHc0ODExLXVzYiI7Ci0JCQkgICByZWcgPSA8MHgyZD47Ci0JCX07Ci0JfTsKLQogCWFtYmEgewogCQljb21wYXRpYmxlID0gImFybSxhbWJhLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtODQ0LDcgKzgwNiw2IEBACiAJCQlidXMtd2lkdGggPSA8ND47CiAJCQljYXAtbW1jLWhpZ2hzcGVlZDsKIAkJCWNhcC1zZC1oaWdoc3BlZWQ7Ci0JCQljZC1ncGlvcyA9IDwmZ3BpbzMgMTUgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlwaW5jdHJsLTAgPSA8Jm1tY3NkX2RlZmF1bHRfbXV4PiwgPCZtbWNzZF9kZWZhdWx0X21vZGU+OwogCQkJdm1tYy1zdXBwbHkgPSA8JnZtbWNfcmVndWxhdG9yPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctYjIxMjAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1iMjEyMC5kdHMKaW5kZXggZmU2OWY5Mi4uMjYxZDVlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1iMjEyMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1iMjEyMC5kdHMKQEAgLTcsMTMgKzcsMTUgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAvZHRzLXYxLzsKLSNpbmNsdWRlICJzdGloNDA3LmR0c2kiCisjaW5jbHVkZSAic3RpaDQwNy1jbG9jay5kdHNpIgorI2luY2x1ZGUgInN0aWg0MDctZmFtaWx5LmR0c2kiCisjaW5jbHVkZSAic3RpaHh4eC1iMjEyMC5kdHNpIgogLyB7CiAJbW9kZWwgPSAiU1RpSDQwNyBCMjEyMCI7CiAJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LWIyMTIwIiwgInN0LHN0aWg0MDciOwogCiAJY2hvc2VuIHsKLQkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlBUzAsMTE1MjAwIjsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlBUzAsMTE1MjAwIGNsa19pZ25vcmVfdW51c2VkIjsKIAkJbGludXgsc3Rkb3V0LXBhdGggPSAmc2JjX3NlcmlhbDA7CiAJfTsKIApAQCAtMjYsNTMgKzI4LDQgQEAKIAkJdHR5QVMwID0gJnNiY19zZXJpYWwwOwogCX07CiAKLQlzb2MgewotCQlzYmNfc2VyaWFsMDogc2VyaWFsQDk1MzAwMDAgewotCQkJc3RhdHVzID0gIm9rYXkiOwotCQl9OwotCi0JCWxlZHMgewotCQkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOwotCQkJcmVkIHsKLQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQlsYWJlbCA9ICJGcm9udCBQYW5lbCBMRUQiOwotCQkJCWdwaW9zID0gPCZwaW80IDEgMD47Ci0JCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7Ci0JCQl9OwotCQkJZ3JlZW4gewotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWdwaW9zID0gPCZwaW8xIDMgMD47Ci0JCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOwotCQkJfTsKLQkJfTsKLQotCQlpMmNAOTg0MjAwMCB7Ci0JCQlzdGF0dXMgPSAib2theSI7Ci0JCX07Ci0KLQkJaTJjQDk4NDMwMDAgewotCQkJc3RhdHVzID0gIm9rYXkiOwotCQl9OwotCi0JCWkyY0A5ODQ0MDAwIHsKLQkJCXN0YXR1cyA9ICJva2F5IjsKLQkJfTsKLQotCQlpMmNAOTg0NTAwMCB7Ci0JCQlzdGF0dXMgPSAib2theSI7Ci0JCX07Ci0KLQkJaTJjQDk1NDAwMDAgewotCQkJc3RhdHVzID0gIm9rYXkiOwotCQl9OwotCi0JCS8qIFNTQzExIHRvIEhETUkgKi8KLQkJaTJjQDk1NDEwMDAgewotCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJLyogSERNSSBWMS4zYSBzdXBwb3J0cyBTdGFuZGFyZCBtb2RlIG9ubHkgKi8KLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwotCQkJc3QsaTJjLW1pbi1zY2wtcHVsc2Utd2lkdGgtdXMgPSA8MD47Ci0JCQlzdCxpMmMtbWluLXNkYS1wdWxzZS13aWR0aC11cyA9IDw1PjsKLQkJfTsKLQl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctY2xvY2suZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctY2xvY2suZHRzaQppbmRleCA4MDBmNDZmLi5lNjU3NDRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWNsb2NrLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1jbG9jay5kdHNpCkBAIC01LDggKzUsMTMgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MDctY2xrcy5oPgogLyB7CiAJY2xvY2tzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKIAkJLyoKIAkJICogRml4ZWQgMzBNSHogb3NjaWxsYXRvciBpbnB1dHMgdG8gU29DCiAJCSAqLwpAQCAtMTksMTAgKzI0LDU5IEBACiAJCS8qCiAJCSAqIEFSTSBQZXJpcGhlcmFsIGNsb2NrIGZvciB0aW1lcnMKIAkJICovCi0JCWFybV9wZXJpcGhfY2xrOiBhcm0tcGVyaXBoLWNsayB7CisJCWFybV9wZXJpcGhfY2xrOiBjbGstbS1hOS1wZXJpcGhzIHsKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDYwMDAwMDAwMD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisKKwkJCWNsb2NrcyA9IDwmY2xrX21fYTk+OworCQkJY2xvY2stZGl2ID0gPDI+OworCQkJY2xvY2stbXVsdCA9IDwxPjsKKwkJfTsKKworCQkvKgorCQkgKiBBOSBQTEwuCisJCSAqLworCQljbG9ja2dlbi1hOUA5MmIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MmIwMDAwIDB4ZmZmZj47CisKKwkJCWNsb2NrZ2VuX2E5X3BsbDogY2xvY2tnZW4tYTktcGxsIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBsbHMtYzMyLWE5IiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xvY2tnZW4tYTktcGxsLW9kZiI7CisJCQl9OworCQl9OworCisJCS8qCisJCSAqIEFSTSBDUFUgcmVsYXRlZCBjbG9ja3MuCisJCSAqLworCQljbGtfbV9hOTogY2xrLW0tYTlAOTJiMDAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctY2xrZ2VuLWE5LW11eCIsICJzdCxjbGtnZW4tbXV4IjsKKwkJCXJlZyA9IDwweDkyYjAwMDAgMHgxMDAwMD47CisKKwkJCWNsb2NrcyA9IDwmY2xvY2tnZW5fYTlfcGxsIDA+LAorCQkJCSA8JmNsb2NrZ2VuX2E5X3BsbCAwPiwKKwkJCQkgPCZjbGtfc19jMF9mbGV4Z2VuIDEzPiwKKwkJCQkgPCZjbGtfbV9hOV9leHQyZl9kaXYyPjsKKwkJfTsKKworCQkvKgorCQkgKiBBUk0gUGVyaXBoZXJhbCBjbG9jayBmb3IgdGltZXJzCisJCSAqLworCQljbGtfbV9hOV9leHQyZl9kaXYyOiBjbGstbS1hOS1leHQyZi1kaXYycyB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiAxMz47CisKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS1hOS1leHQyZi1kaXYyIjsKKworCQkJY2xvY2stZGl2ID0gPDI+OworCQkJY2xvY2stbXVsdCA9IDwxPjsKIAkJfTsKIAogCQkvKgpAQCAtMzUsNSArODksMjM4IEBACiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1pY24tcmVnLTAiOwogCQl9OworCisJCWNsb2NrZ2VuLWFAMDkwZmYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkwZmYwMDAgMHgxMDAwPjsKKworCQkJY2xrX3NfYTBfcGxsOiBjbGstcy1hMC1wbGwgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcGxscy1jMzItYTAiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1hMC1wbGwtb2ZkLTAiOworCQkJfTsKKworCQkJY2xrX3NfYTBfZmxleGdlbjogY2xrLXMtYTAtZmxleGdlbiB7CisJCQkJY29tcGF0aWJsZSA9ICJzdCxmbGV4Z2VuIjsKKworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfYTBfcGxsIDA+LAorCQkJCQkgPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1pYy1sbWkwIjsKKwkJCX07CisJCX07CisKKwkJY2xrX3NfYzBfcXVhZGZzOiBjbGstcy1jMC1xdWFkZnNAOTEwMzAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcXVhZGZzNjYwLUMiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweDkxMDMwMDAgMHgxMDAwPjsKKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYzAtZnMwLWNoMCIsCisJCQkJCSAgICAgImNsay1zLWMwLWZzMC1jaDEiLAorCQkJCQkgICAgICJjbGstcy1jMC1mczAtY2gyIiwKKwkJCQkJICAgICAiY2xrLXMtYzAtZnMwLWNoMyI7CisJCX07CisKKwkJY2xrX3NfYzA6IGNsb2NrZ2VuLWNAMDkxMDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkxMDMwMDAgMHgxMDAwPjsKKworCQkJY2xrX3NfYzBfcGxsMDogY2xrLXMtYzAtcGxsMCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1wbGxzLWMzMi1jMF8wIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYzAtcGxsMC1vZGYtMCI7CisJCQl9OworCisJCQljbGtfc19jMF9wbGwxOiBjbGstcy1jMC1wbGwxIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBsbHMtYzMyLWMwXzEiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1jMC1wbGwxLW9kZi0wIjsKKwkJCX07CisKKwkJCWNsa19zX2MwX2ZsZXhnZW46IGNsay1zLWMwLWZsZXhnZW4geworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGZsZXhnZW4iOworCisJCQkJY2xvY2tzID0gPCZjbGtfc19jMF9wbGwwIDA+LAorCQkJCQkgPCZjbGtfc19jMF9wbGwxIDA+LAorCQkJCQkgPCZjbGtfc19jMF9xdWFkZnMgMD4sCisJCQkJCSA8JmNsa19zX2MwX3F1YWRmcyAxPiwKKwkJCQkJIDwmY2xrX3NfYzBfcXVhZGZzIDI+LAorCQkJCQkgPCZjbGtfc19jMF9xdWFkZnMgMz4sCisJCQkJCSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLWljbi1ncHUiLAorCQkJCQkJICAgICAiY2xrLWZkbWEiLAorCQkJCQkJICAgICAiY2xrLW5hbmQiLAorCQkJCQkJICAgICAiY2xrLWh2YSIsCisJCQkJCQkgICAgICJjbGstcHJvYy1zdGZlIiwKKwkJCQkJCSAgICAgImNsay1wcm9jLXRwIiwKKwkJCQkJCSAgICAgImNsay1yeC1pY24tZG11IiwKKwkJCQkJCSAgICAgImNsay1yeC1pY24taHZhIiwKKwkJCQkJCSAgICAgImNsay1pY24tY3B1IiwKKwkJCQkJCSAgICAgImNsay10eC1pY24tZG11IiwKKwkJCQkJCSAgICAgImNsay1tbWMtMCIsCisJCQkJCQkgICAgICJjbGstbW1jLTEiLAorCQkJCQkJICAgICAiY2xrLWpwZWdkZWMiLAorCQkJCQkJICAgICAiY2xrLWV4dDJmYTkiLAorCQkJCQkJICAgICAiY2xrLWljLWJkaXNwLTAiLAorCQkJCQkJICAgICAiY2xrLWljLWJkaXNwLTEiLAorCQkJCQkJICAgICAiY2xrLXBwLWRtdSIsCisJCQkJCQkgICAgICJjbGstdmlkLWRtdSIsCisJCQkJCQkgICAgICJjbGstZHNzLWxwYyIsCisJCQkJCQkgICAgICJjbGstc3QyMzEtYXVkLTAiLAorCQkJCQkJICAgICAiY2xrLXN0MjMxLWdwLTEiLAorCQkJCQkJICAgICAiY2xrLXN0MjMxLWRtdSIsCisJCQkJCQkgICAgICJjbGstaWNuLWxtaSIsCisJCQkJCQkgICAgICJjbGstdHgtaWNuLWRpc3AtMSIsCisJCQkJCQkgICAgICJjbGstaWNuLXNiYyIsCisJCQkJCQkgICAgICJjbGstc3RmZS1mcmMyIiwKKwkJCQkJCSAgICAgImNsay1ldGgtcGh5IiwKKwkJCQkJCSAgICAgImNsay1ldGgtcmVmLXBoeWNsayIsCisJCQkJCQkgICAgICJjbGstZmxhc2gtcHJvbWlwIiwKKwkJCQkJCSAgICAgImNsay1tYWluLWRpc3AiLAorCQkJCQkJICAgICAiY2xrLWF1eC1kaXNwIiwKKwkJCQkJCSAgICAgImNsay1jb21wby1kdnAiOworCQkJfTsKKwkJfTsKKworCQljbGtfc19kMF9xdWFkZnM6IGNsay1zLWQwLXF1YWRmc0A5MTA0MDAwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1xdWFkZnM2NjAtRCIsICJzdCxxdWFkZnMiOworCQkJcmVnID0gPDB4OTEwNDAwMCAweDEwMDA+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1kMC1mczAtY2gwIiwKKwkJCQkJICAgICAiY2xrLXMtZDAtZnMwLWNoMSIsCisJCQkJCSAgICAgImNsay1zLWQwLWZzMC1jaDIiLAorCQkJCQkgICAgICJjbGstcy1kMC1mczAtY2gzIjsKKwkJfTsKKworCQljbG9ja2dlbi1kMEAwOTEwNDAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTEwNDAwMCAweDEwMDA+OworCisJCQljbGtfc19kMF9mbGV4Z2VuOiBjbGstcy1kMC1mbGV4Z2VuIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxmbGV4Z2VuIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfZDBfcXVhZGZzIDA+LAorCQkJCQkgPCZjbGtfc19kMF9xdWFkZnMgMT4sCisJCQkJCSA8JmNsa19zX2QwX3F1YWRmcyAyPiwKKwkJCQkJIDwmY2xrX3NfZDBfcXVhZGZzIDM+LAorCQkJCQkgPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1wY20tMCIsCisJCQkJCQkgICAgICJjbGstcGNtLTEiLAorCQkJCQkJICAgICAiY2xrLXBjbS0yIiwKKwkJCQkJCSAgICAgImNsay1zcGRpZmYiOworCQkJfTsKKwkJfTsKKworCQljbGtfc19kMl9xdWFkZnM6IGNsay1zLWQyLXF1YWRmc0A5MTA2MDAwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1xdWFkZnM2NjAtRCIsICJzdCxxdWFkZnMiOworCQkJcmVnID0gPDB4OTEwNjAwMCAweDEwMDA+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1kMi1mczAtY2gwIiwKKwkJCQkJICAgICAiY2xrLXMtZDItZnMwLWNoMSIsCisJCQkJCSAgICAgImNsay1zLWQyLWZzMC1jaDIiLAorCQkJCQkgICAgICJjbGstcy1kMi1mczAtY2gzIjsKKwkJfTsKKworCQljbGtfdG1kc291dF9oZG1pOiBjbGstdG1kc291dC1oZG1pIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQl9OworCisJCWNsb2NrZ2VuLWQyQHg5MTA2MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MTA2MDAwIDB4MTAwMD47CisKKwkJCWNsa19zX2QyX2ZsZXhnZW46IGNsay1zLWQyLWZsZXhnZW4geworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGZsZXhnZW4iOworCisJCQkJY2xvY2tzID0gPCZjbGtfc19kMl9xdWFkZnMgMD4sCisJCQkJCSA8JmNsa19zX2QyX3F1YWRmcyAxPiwKKwkJCQkJIDwmY2xrX3NfZDJfcXVhZGZzIDI+LAorCQkJCQkgPCZjbGtfc19kMl9xdWFkZnMgMz4sCisJCQkJCSA8JmNsa19zeXNpbj4sCisJCQkJCSA8JmNsa19zeXNpbj4sCisJCQkJCSA8JmNsa190bWRzb3V0X2hkbWk+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1waXgtbWFpbi1kaXNwIiwKKwkJCQkJCSAgICAgImNsay1waXgtcGlwIiwKKwkJCQkJCSAgICAgImNsay1waXgtZ2RwMSIsCisJCQkJCQkgICAgICJjbGstcGl4LWdkcDIiLAorCQkJCQkJICAgICAiY2xrLXBpeC1nZHAzIiwKKwkJCQkJCSAgICAgImNsay1waXgtZ2RwNCIsCisJCQkJCQkgICAgICJjbGstcGl4LWF1eC1kaXNwIiwKKwkJCQkJCSAgICAgImNsay1kZW5jIiwKKwkJCQkJCSAgICAgImNsay1waXgtaGRkYWMiLAorCQkJCQkJICAgICAiY2xrLWhkZGFjIiwKKwkJCQkJCSAgICAgImNsay1zZGRhYyIsCisJCQkJCQkgICAgICJjbGstcGl4LWR2byIsCisJCQkJCQkgICAgICJjbGstZHZvIiwKKwkJCQkJCSAgICAgImNsay1waXgtaGRtaSIsCisJCQkJCQkgICAgICJjbGstdG1kcy1oZG1pIiwKKwkJCQkJCSAgICAgImNsay1yZWYtaGRtaXBoeSI7CisJCQkJCQkgICAgIH07CisJCX07CisKKwkJY2xrX3NfZDNfcXVhZGZzOiBjbGstcy1kMy1xdWFkZnNAOTEwNzAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcXVhZGZzNjYwLUQiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweDkxMDcwMDAgMHgxMDAwPjsKKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtZDMtZnMwLWNoMCIsCisJCQkJCSAgICAgImNsay1zLWQzLWZzMC1jaDEiLAorCQkJCQkgICAgICJjbGstcy1kMy1mczAtY2gyIiwKKwkJCQkJICAgICAiY2xrLXMtZDMtZnMwLWNoMyI7CisJCX07CisKKwkJY2xvY2tnZW4tZDNAOTEwNzAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTEwNzAwMCAweDEwMDA+OworCisJCQljbGtfc19kM19mbGV4Z2VuOiBjbGstcy1kMy1mbGV4Z2VuIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxmbGV4Z2VuIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfZDNfcXVhZGZzIDA+LAorCQkJCQkgPCZjbGtfc19kM19xdWFkZnMgMT4sCisJCQkJCSA8JmNsa19zX2QzX3F1YWRmcyAyPiwKKwkJCQkJIDwmY2xrX3NfZDNfcXVhZGZzIDM+LAorCQkJCQkgPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zdGZlLWZyYzEiLAorCQkJCQkJICAgICAiY2xrLXRzb3V0LTAiLAorCQkJCQkJICAgICAiY2xrLXRzb3V0LTEiLAorCQkJCQkJICAgICAiY2xrLW1jaGkiLAorCQkJCQkJICAgICAiY2xrLXZzZW5zLWNvbXBvIiwKKwkJCQkJCSAgICAgImNsay1mcmMxLXJlbW90ZSIsCisJCQkJCQkgICAgICJjbGstbHBjLTAiLAorCQkJCQkJICAgICAiY2xrLWxwYy0xIjsKKwkJCX07CisJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWZhbWlseS5kdHNpCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDcuZHRzaQpyZW5hbWUgdG8gYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1mYW1pbHkuZHRzaQppbmRleCA0ZjkwMjRmLi4zZTMxZDMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1mYW1pbHkuZHRzaQpAQCAtNiw4ICs2LDggQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlICJzdGloNDA3LWNsb2NrLmR0c2kiCiAjaW5jbHVkZSAic3RpaDQwNy1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcmVzZXQtY29udHJvbGxlci9zdGloNDA3LXJlc2V0cy5oPgogLyB7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CkBAIC02Myw2ICs2MywyMSBAQAogCQlyYW5nZXM7CiAJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAKKwkJcG93ZXJkb3duOiBwb3dlcmRvd24tY29udHJvbGxlciB7CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcG93ZXJkb3duIjsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJfTsKKworCQlzb2Z0cmVzZXQ6IHNvZnRyZXNldC1jb250cm9sbGVyIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1zb2Z0cmVzZXQiOworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQl9OworCisJCXBpY29waHlyZXNldDogcGljb3BoeXJlc2V0LWNvbnRyb2xsZXIgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBpY29waHlyZXNldCI7CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCX07CisKIAkJc3lzY2ZnX3NiYzogc2JjLXN5c2NmZ0A5NjIwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1zYmMtc3lzY2ZnIiwgInN5c2NvbiI7CiAJCQlyZWcgPSA8MHg5NjIwMDAwIDB4MTAwMD47CkBAIC0xMDQsNyArMTE5LDcgQEAKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjIgSVJRX1RZUEVfTk9ORT47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3NlcmlhbDA+OwotCQkJY2xvY2tzID0gPCZjbGtfZXh0MmZfYTk+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19FWFQyRl9BOT47CiAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC0xMTUsNyArMTMwLDcgQEAKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjMgSVJRX1RZUEVfTk9ORT47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3NlcmlhbDE+OwotCQkJY2xvY2tzID0gPCZjbGtfZXh0MmZfYTk+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19FWFQyRl9BOT47CiAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC0xMjYsNyArMTQxLDcgQEAKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjQgSVJRX1RZUEVfTk9ORT47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3NlcmlhbDI+OwotCQkJY2xvY2tzID0gPCZjbGtfZXh0MmZfYTk+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19FWFQyRl9BOT47CiAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC0xNTgsNyArMTczLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAic3QsY29tbXMtc3NjNC1pMmMiOwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXJlZyA9IDwweDk4NDAwMDAgMHgxMTA+OwotCQkJY2xvY2tzID0gPCZjbGtfZXh0MmZfYTk+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19FWFQyRl9BOT47CiAJCQljbG9jay1uYW1lcyA9ICJzc2MiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMTcxLDcgKzE4Niw3IEBACiAJCQljb21wYXRpYmxlID0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCXJlZyA9IDwweDk4NDEwMDAgMHgxMTA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCWNsb2NrcyA9IDwmY2xrX2V4dDJmX2E5PjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfRVhUMkZfQTk+OwogCQkJY2xvY2stbmFtZXMgPSAic3NjIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTE4NCw3ICsxOTksNyBAQAogCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CiAJCQlyZWcgPSA8MHg5ODQyMDAwIDB4MTEwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTQgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gQ0xLX0VYVDJGX0E5PjsKIAkJCWNsb2NrLW5hbWVzID0gInNzYyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC0xOTcsNyArMjEyLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAic3QsY29tbXMtc3NjNC1pMmMiOwogCQkJcmVnID0gPDB4OTg0MzAwMCAweDExMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTE1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzID0gPCZjbGtfZXh0MmZfYTk+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19FWFQyRl9BOT47CiAJCQljbG9jay1uYW1lcyA9ICJzc2MiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMjEwLDcgKzIyNSw3IEBACiAJCQljb21wYXRpYmxlID0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCXJlZyA9IDwweDk4NDQwMDAgMHgxMTA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCWNsb2NrcyA9IDwmY2xrX2V4dDJmX2E5PjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfRVhUMkZfQTk+OwogCQkJY2xvY2stbmFtZXMgPSAic3NjIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTIyMyw3ICsyMzgsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CiAJCQlyZWcgPSA8MHg5ODQ1MDAwIDB4MTEwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTcgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gQ0xLX0VYVDJGX0E5PjsKIAkJCWNsb2NrLW5hbWVzID0gInNzYyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLWIyMTIwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAtYjIxMjAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNjFhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLWIyMTIwLmR0cwpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNUTWljcm9lbGVjdHJvbmljcyAoUiZEKSBMaW1pdGVkLgorICogQXV0aG9yOiBQZXRlciBHcmlmZmluIDxwZXRlci5ncmlmZmluQGxpbmFyby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworL2R0cy12MS87CisjaW5jbHVkZSAic3RpaDQxMC5kdHNpIgorI2luY2x1ZGUgInN0aWh4eHgtYjIxMjAuZHRzaSIKKy8geworCW1vZGVsID0gIlNUaUg0MTAgQjIxMjAiOworCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxMC1iMjEyMCIsICJzdCxzdGloNDEwIjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5QVMwLDExNTIwMCBjbGtfaWdub3JlX3VudXNlZCI7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gJnNiY19zZXJpYWwwOworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHg0MDAwMDAwMCAweDgwMDAwMDAwPjsKKwl9OworCisJYWxpYXNlcyB7CisJCXR0eUFTMCA9ICZzYmNfc2VyaWFsMDsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAtY2xvY2suZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAtY2xvY2suZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjU4MDNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC1jbG9jay5kdHNpCkBAIC0wLDAgKzEsMzM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNUTWljcm9lbGVjdHJvbmljcyBSJkQgTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9zdGloNDEwLWNsa3MuaD4KKy8geworCWNsb2NrcyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCisJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxMC1jbGsiLCAic2ltcGxlLWJ1cyI7CisKKwkJLyoKKwkJICogRml4ZWQgMzBNSHogb3NjaWxsYXRvciBpbnB1dHMgdG8gU29DCisJCSAqLworCQljbGtfc3lzaW46IGNsay1zeXNpbiB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMDAwMDAwMD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiQ0xLX1NZU0lOIjsKKwkJfTsKKworCQkvKgorCQkgKiBBUk0gUGVyaXBoZXJhbCBjbG9jayBmb3IgdGltZXJzCisJCSAqLworCQlhcm1fcGVyaXBoX2NsazogY2xrLW0tYTktcGVyaXBocyB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCQljbG9ja3MgPSA8JmNsa19tX2E5PjsKKwkJCWNsb2NrLWRpdiA9IDwyPjsKKwkJCWNsb2NrLW11bHQgPSA8MT47CisJCX07CisKKwkJLyoKKwkJICogQTkgUExMLgorCQkgKi8KKwkJY2xvY2tnZW4tYTlAOTJiMDAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTJiMDAwMCAweGZmZmY+OworCisJCQljbG9ja2dlbl9hOV9wbGw6IGNsb2NrZ2VuLWE5LXBsbCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1wbGxzLWMzMi1hOSIsICJzdCxjbGtnZW4tcGxscy1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsb2NrZ2VuLWE5LXBsbC1vZGYiOworCQkJfTsKKwkJfTsKKworCQkvKgorCQkgKiBBUk0gQ1BVIHJlbGF0ZWQgY2xvY2tzLgorCQkgKi8KKwkJY2xrX21fYTk6IGNsay1tLWE5QDkyYjAwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LWNsa2dlbi1hOS1tdXgiLCAic3QsY2xrZ2VuLW11eCI7CisJCQlyZWcgPSA8MHg5MmIwMDAwIDB4MTAwMDA+OworCisJCQljbG9ja3MgPSA8JmNsb2NrZ2VuX2E5X3BsbCAwPiwKKwkJCQkgPCZjbG9ja2dlbl9hOV9wbGwgMD4sCisJCQkJIDwmY2xrX3NfYzBfZmxleGdlbiAxMz4sCisJCQkJIDwmY2xrX21fYTlfZXh0MmZfZGl2Mj47CisJCX07CisKKwkJLyoKKwkJICogQVJNIFBlcmlwaGVyYWwgY2xvY2sgZm9yIHRpbWVycworCQkgKi8KKwkJY2xrX21fYTlfZXh0MmZfZGl2MjogY2xrLW0tYTktZXh0MmYtZGl2MnMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gMTM+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tYTktZXh0MmYtZGl2MiI7CisKKwkJCWNsb2NrLWRpdiA9IDwyPjsKKwkJCWNsb2NrLW11bHQgPSA8MT47CisJCX07CisKKwkJLyoKKwkJICogQm9vdGxvYWRlciBpbml0aWFsaXplZCBzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUgY2xvY2sgZm9yCisJCSAqIHNlcmlhbCBkZXZpY2VzLgorCQkgKi8KKwkJY2xrX2V4dDJmX2E5OiBjbG9ja2dlbi1jMEAxMyB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWljbi1yZWctMCI7CisJCX07CisKKwkJY2xvY2tnZW4tYUAwOTBmZjAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTBmZjAwMCAweDEwMDA+OworCisJCQljbGtfc19hMF9wbGw6IGNsay1zLWEwLXBsbCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1wbGxzLWMzMi1hMCIsICJzdCxjbGtnZW4tcGxscy1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWEwLXBsbC1vZmQtMCI7CisJCQl9OworCisJCQljbGtfc19hMF9mbGV4Z2VuOiBjbGstcy1hMC1mbGV4Z2VuIHsKKwkJCQljb21wYXRpYmxlID0gInN0LGZsZXhnZW4iOworCisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCisJCQkJY2xvY2tzID0gPCZjbGtfc19hMF9wbGwgMD4sCisJCQkJCSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLWljLWxtaTAiLAorCQkJCQkJICAgICAiY2xrLWljLWxtaTEiOworCQkJfTsKKwkJfTsKKworCQljbGtfc19jMF9xdWFkZnM6IGNsay1zLWMwLXF1YWRmc0A5MTAzMDAwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1xdWFkZnM2NjAtQyIsICJzdCxxdWFkZnMiOworCQkJcmVnID0gPDB4OTEwMzAwMCAweDEwMDA+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1jMC1mczAtY2gwIiwKKwkJCQkJICAgICAiY2xrLXMtYzAtZnMwLWNoMSIsCisJCQkJCSAgICAgImNsay1zLWMwLWZzMC1jaDIiLAorCQkJCQkgICAgICJjbGstcy1jMC1mczAtY2gzIjsKKwkJfTsKKworCQljbGtfc19jMDogY2xvY2tnZW4tY0AwOTEwMzAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTEwMzAwMCAweDEwMDA+OworCisJCQljbGtfc19jMF9wbGwwOiBjbGstcy1jMC1wbGwwIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBsbHMtYzMyLWMwXzAiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1jMC1wbGwwLW9kZi0wIjsKKwkJCX07CisKKwkJCWNsa19zX2MwX3BsbDE6IGNsay1zLWMwLXBsbDEgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcGxscy1jMzItYzBfMSIsICJzdCxjbGtnZW4tcGxscy1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWMwLXBsbDEtb2RmLTAiOworCQkJfTsKKworCQkJY2xrX3NfYzBfZmxleGdlbjogY2xrLXMtYzAtZmxleGdlbiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsZmxleGdlbiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2MwX3BsbDAgMD4sCisJCQkJCSA8JmNsa19zX2MwX3BsbDEgMD4sCisJCQkJCSA8JmNsa19zX2MwX3F1YWRmcyAwPiwKKwkJCQkJIDwmY2xrX3NfYzBfcXVhZGZzIDE+LAorCQkJCQkgPCZjbGtfc19jMF9xdWFkZnMgMj4sCisJCQkJCSA8JmNsa19zX2MwX3F1YWRmcyAzPiwKKwkJCQkJIDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstaWNuLWdwdSIsCisJCQkJCQkgICAgICJjbGstZmRtYSIsCisJCQkJCQkgICAgICJjbGstbmFuZCIsCisJCQkJCQkgICAgICJjbGstaHZhIiwKKwkJCQkJCSAgICAgImNsay1wcm9jLXN0ZmUiLAorCQkJCQkJICAgICAiY2xrLXByb2MtdHAiLAorCQkJCQkJICAgICAiY2xrLXJ4LWljbi1kbXUiLAorCQkJCQkJICAgICAiY2xrLXJ4LWljbi1odmEiLAorCQkJCQkJICAgICAiY2xrLWljbi1jcHUiLAorCQkJCQkJICAgICAiY2xrLXR4LWljbi1kbXUiLAorCQkJCQkJICAgICAiY2xrLW1tYy0wIiwKKwkJCQkJCSAgICAgImNsay1tbWMtMSIsCisJCQkJCQkgICAgICJjbGstanBlZ2RlYyIsCisJCQkJCQkgICAgICJjbGstZXh0MmZhOSIsCisJCQkJCQkgICAgICJjbGstaWMtYmRpc3AtMCIsCisJCQkJCQkgICAgICJjbGstaWMtYmRpc3AtMSIsCisJCQkJCQkgICAgICJjbGstcHAtZG11IiwKKwkJCQkJCSAgICAgImNsay12aWQtZG11IiwKKwkJCQkJCSAgICAgImNsay1kc3MtbHBjIiwKKwkJCQkJCSAgICAgImNsay1zdDIzMS1hdWQtMCIsCisJCQkJCQkgICAgICJjbGstc3QyMzEtZ3AtMSIsCisJCQkJCQkgICAgICJjbGstc3QyMzEtZG11IiwKKwkJCQkJCSAgICAgImNsay1pY24tbG1pIiwKKwkJCQkJCSAgICAgImNsay10eC1pY24tZGlzcC0xIiwKKwkJCQkJCSAgICAgImNsay1pY24tc2JjIiwKKwkJCQkJCSAgICAgImNsay1zdGZlLWZyYzIiLAorCQkJCQkJICAgICAiY2xrLWV0aC1waHkiLAorCQkJCQkJICAgICAiY2xrLWV0aC1yZWYtcGh5Y2xrIiwKKwkJCQkJCSAgICAgImNsay1mbGFzaC1wcm9taXAiLAorCQkJCQkJICAgICAiY2xrLW1haW4tZGlzcCIsCisJCQkJCQkgICAgICJjbGstYXV4LWRpc3AiLAorCQkJCQkJICAgICAiY2xrLWNvbXBvLWR2cCIsCisJCQkJCQkgICAgICJjbGstdHgtaWNuLWhhZGVzIiwKKwkJCQkJCSAgICAgImNsay1yeC1pY24taGFkZXMiLAorCQkJCQkJICAgICAiY2xrLWljbi1yZWctMTYiLAorCQkJCQkJICAgICAiY2xrLXBwLWhhZGVzIiwKKwkJCQkJCSAgICAgImNsay1jbHVzdC1oYWRlcyIsCisJCQkJCQkgICAgICJjbGstaHdwZS1oYWRlcyIsCisJCQkJCQkgICAgICJjbGstZmMtaGFkZXMiOworCQkJfTsKKwkJfTsKKworCQljbGtfc19kMF9xdWFkZnM6IGNsay1zLWQwLXF1YWRmc0A5MTA0MDAwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1xdWFkZnM2NjAtRCIsICJzdCxxdWFkZnMiOworCQkJcmVnID0gPDB4OTEwNDAwMCAweDEwMDA+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1kMC1mczAtY2gwIiwKKwkJCQkJICAgICAiY2xrLXMtZDAtZnMwLWNoMSIsCisJCQkJCSAgICAgImNsay1zLWQwLWZzMC1jaDIiLAorCQkJCQkgICAgICJjbGstcy1kMC1mczAtY2gzIjsKKwkJfTsKKworCQljbG9ja2dlbi1kMEAwOTEwNDAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTEwNDAwMCAweDEwMDA+OworCisJCQljbGtfc19kMF9mbGV4Z2VuOiBjbGstcy1kMC1mbGV4Z2VuIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxmbGV4Z2VuIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfZDBfcXVhZGZzIDA+LAorCQkJCQkgPCZjbGtfc19kMF9xdWFkZnMgMT4sCisJCQkJCSA8JmNsa19zX2QwX3F1YWRmcyAyPiwKKwkJCQkJIDwmY2xrX3NfZDBfcXVhZGZzIDM+LAorCQkJCQkgPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1wY20tMCIsCisJCQkJCQkgICAgICJjbGstcGNtLTEiLAorCQkJCQkJICAgICAiY2xrLXBjbS0yIiwKKwkJCQkJCSAgICAgImNsay1zcGRpZmYiLAorCQkJCQkJICAgICAiY2xrLXBjbXIxMC1tYXN0ZXIiLAorCQkJCQkJICAgICAiY2xrLXVzYjItcGh5IjsKKwkJCX07CisJCX07CisKKwkJY2xrX3NfZDJfcXVhZGZzOiBjbGstcy1kMi1xdWFkZnNAOTEwNjAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcXVhZGZzNjYwLUQiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweDkxMDYwMDAgMHgxMDAwPjsKKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtZDItZnMwLWNoMCIsCisJCQkJCSAgICAgImNsay1zLWQyLWZzMC1jaDEiLAorCQkJCQkgICAgICJjbGstcy1kMi1mczAtY2gyIiwKKwkJCQkJICAgICAiY2xrLXMtZDItZnMwLWNoMyI7CisJCX07CisKKwkJY2xrX3RtZHNvdXRfaGRtaTogY2xrLXRtZHNvdXQtaGRtaSB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJfTsKKworCQljbG9ja2dlbi1kMkB4OTEwNjAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTEwNjAwMCAweDEwMDA+OworCisJCQljbGtfc19kMl9mbGV4Z2VuOiBjbGstcy1kMi1mbGV4Z2VuIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxmbGV4Z2VuIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfZDJfcXVhZGZzIDA+LAorCQkJCQkgPCZjbGtfc19kMl9xdWFkZnMgMT4sCisJCQkJCSA8JmNsa19zX2QyX3F1YWRmcyAyPiwKKwkJCQkJIDwmY2xrX3NfZDJfcXVhZGZzIDM+LAorCQkJCQkgPCZjbGtfc3lzaW4+LAorCQkJCQkgPCZjbGtfc3lzaW4+LAorCQkJCQkgPCZjbGtfdG1kc291dF9oZG1pPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcGl4LW1haW4tZGlzcCIsCisJCQkJCQkgICAgICJjbGstcGl4LXBpcCIsCisJCQkJCQkgICAgICJjbGstcGl4LWdkcDEiLAorCQkJCQkJICAgICAiY2xrLXBpeC1nZHAyIiwKKwkJCQkJCSAgICAgImNsay1waXgtZ2RwMyIsCisJCQkJCQkgICAgICJjbGstcGl4LWdkcDQiLAorCQkJCQkJICAgICAiY2xrLXBpeC1hdXgtZGlzcCIsCisJCQkJCQkgICAgICJjbGstZGVuYyIsCisJCQkJCQkgICAgICJjbGstcGl4LWhkZGFjIiwKKwkJCQkJCSAgICAgImNsay1oZGRhYyIsCisJCQkJCQkgICAgICJjbGstc2RkYWMiLAorCQkJCQkJICAgICAiY2xrLXBpeC1kdm8iLAorCQkJCQkJICAgICAiY2xrLWR2byIsCisJCQkJCQkgICAgICJjbGstcGl4LWhkbWkiLAorCQkJCQkJICAgICAiY2xrLXRtZHMtaGRtaSIsCisJCQkJCQkgICAgICJjbGstcmVmLWhkbWlwaHkiOworCQkJCQkJICAgICB9OworCQl9OworCisJCWNsa19zX2QzX3F1YWRmczogY2xrLXMtZDMtcXVhZGZzQDkxMDcwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXF1YWRmczY2MC1EIiwgInN0LHF1YWRmcyI7CisJCQlyZWcgPSA8MHg5MTA3MDAwIDB4MTAwMD47CisKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWQzLWZzMC1jaDAiLAorCQkJCQkgICAgICJjbGstcy1kMy1mczAtY2gxIiwKKwkJCQkJICAgICAiY2xrLXMtZDMtZnMwLWNoMiIsCisJCQkJCSAgICAgImNsay1zLWQzLWZzMC1jaDMiOworCQl9OworCisJCWNsb2NrZ2VuLWQzQDkxMDcwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkxMDcwMDAgMHgxMDAwPjsKKworCQkJY2xrX3NfZDNfZmxleGdlbjogY2xrLXMtZDMtZmxleGdlbiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsZmxleGdlbiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2QzX3F1YWRmcyAwPiwKKwkJCQkJIDwmY2xrX3NfZDNfcXVhZGZzIDE+LAorCQkJCQkgPCZjbGtfc19kM19xdWFkZnMgMj4sCisJCQkJCSA8JmNsa19zX2QzX3F1YWRmcyAzPiwKKwkJCQkJIDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstc3RmZS1mcmMxIiwKKwkJCQkJCSAgICAgImNsay10c291dC0wIiwKKwkJCQkJCSAgICAgImNsay10c291dC0xIiwKKwkJCQkJCSAgICAgImNsay1tY2hpIiwKKwkJCQkJCSAgICAgImNsay12c2Vucy1jb21wbyIsCisJCQkJCQkgICAgICJjbGstZnJjMS1yZW1vdGUiLAorCQkJCQkJICAgICAiY2xrLWxwYy0wIiwKKwkJCQkJCSAgICAgImNsay1scGMtMSI7CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC1waW5jdHJsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLXBpbmN0cmwuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2U5ZGZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC1waW5jdHJsLmR0c2kKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3MgTGltaXRlZC4KKyAqIEF1dGhvcjogUGV0ZXIgR3JpZmZpbiA8cGV0ZXIuZ3JpZmZpbkBsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSAic3QtcGluY2ZnLmgiCisvIHsKKworCXNvYyB7CisJCXBpbi1jb250cm9sbGVyLXJlYXIgeworCisJCQl1c2IwIHsKKwkJCQlwaW5jdHJsX3VzYjA6IHVzYjItMCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJdXNiLW9jLWRldGVjdCA9IDwmcGlvMzUgMCBBTFQxIElOPjsKKwkJCQkJCXVzYi1wd3ItZW5hYmxlID0gPCZwaW8zNSAxIEFMVDEgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJdXNiMSB7CisJCQkJcGluY3RybF91c2IxOiB1c2IyLTEgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCXVzYi1vYy1kZXRlY3QgPSA8JnBpbzM1IDIgQUxUMSBJTj47CisJCQkJCQl1c2ItcHdyLWVuYWJsZSA9IDwmcGlvMzUgMyBBTFQxIE9VVD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1NjI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAuZHRzaQpAQCAtMCwwICsxLDE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNUTWljcm9lbGVjdHJvbmljcyBMaW1pdGVkLgorICogQXV0aG9yOiBQZXRlciBHcmlmZmluIDxwZXRlci5ncmlmZmluQGxpbmFyby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlICJzdGloNDEwLWNsb2NrLmR0c2kiCisjaW5jbHVkZSAic3RpaDQwNy1mYW1pbHkuZHRzaSIKKyNpbmNsdWRlICJzdGloNDEwLXBpbmN0cmwuZHRzaSIKKy8geworCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS1waW5jdHJsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LXBpbmN0cmwuZHRzaQppbmRleCA4NTA5YTAzLi4zNzkxYWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LXBpbmN0cmwuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LXBpbmN0cmwuZHRzaQpAQCAtMTEsMzMgKzExLDMzIEBACiAvIHsKIAogCWFsaWFzZXMgewotCQlncGlvMAk9ICZQSU8wOwotCQlncGlvMQk9ICZQSU8xOwotCQlncGlvMgk9ICZQSU8yOwotCQlncGlvMwk9ICZQSU8zOwotCQlncGlvNAk9ICZQSU80OwotCQlncGlvNQk9ICZQSU81OwotCQlncGlvNgk9ICZQSU82OwotCQlncGlvNwk9ICZQSU83OwotCQlncGlvOAk9ICZQSU84OwotCQlncGlvOQk9ICZQSU85OwotCQlncGlvMTAJPSAmUElPMTA7Ci0JCWdwaW8xMQk9ICZQSU8xMTsKLQkJZ3BpbzEyCT0gJlBJTzEyOwotCQlncGlvMTMJPSAmUElPMTM7Ci0JCWdwaW8xNAk9ICZQSU8xNDsKLQkJZ3BpbzE1CT0gJlBJTzE1OwotCQlncGlvMTYJPSAmUElPMTY7Ci0JCWdwaW8xNwk9ICZQSU8xNzsKLQkJZ3BpbzE4CT0gJlBJTzE4OwotCQlncGlvMTkJPSAmUElPMTAwOwotCQlncGlvMjAJPSAmUElPMTAxOwotCQlncGlvMjEJPSAmUElPMTAyOwotCQlncGlvMjIJPSAmUElPMTAzOwotCQlncGlvMjMJPSAmUElPMTA0OwotCQlncGlvMjQJPSAmUElPMTA1OwotCQlncGlvMjUJPSAmUElPMTA2OwotCQlncGlvMjYJPSAmUElPMTA3OworCQlncGlvMAk9ICZwaW8wOworCQlncGlvMQk9ICZwaW8xOworCQlncGlvMgk9ICZwaW8yOworCQlncGlvMwk9ICZwaW8zOworCQlncGlvNAk9ICZwaW80OworCQlncGlvNQk9ICZwaW81OworCQlncGlvNgk9ICZwaW82OworCQlncGlvNwk9ICZwaW83OworCQlncGlvOAk9ICZwaW84OworCQlncGlvOQk9ICZwaW85OworCQlncGlvMTAJPSAmcGlvMTA7CisJCWdwaW8xMQk9ICZwaW8xMTsKKwkJZ3BpbzEyCT0gJnBpbzEyOworCQlncGlvMTMJPSAmcGlvMTM7CisJCWdwaW8xNAk9ICZwaW8xNDsKKwkJZ3BpbzE1CT0gJnBpbzE1OworCQlncGlvMTYJPSAmcGlvMTY7CisJCWdwaW8xNwk9ICZwaW8xNzsKKwkJZ3BpbzE4CT0gJnBpbzE4OworCQlncGlvMTkJPSAmcGlvMTAwOworCQlncGlvMjAJPSAmcGlvMTAxOworCQlncGlvMjEJPSAmcGlvMTAyOworCQlncGlvMjIJPSAmcGlvMTAzOworCQlncGlvMjMJPSAmcGlvMTA0OworCQlncGlvMjQJPSAmcGlvMTA1OworCQlncGlvMjUJPSAmcGlvMTA2OworCQlncGlvMjYJPSAmcGlvMTA3OwogCX07CiAKIAlzb2MgewpAQCAtNTIsNyArNTIsNyBAQAogCQkJaW50ZXJydXB0LW5hbWVzCT0gImlycW11eCI7CiAJCQlyYW5nZXMgCQk9IDwwIDB4ZmU2MTAwMDAgMHg1MDAwPjsKIAotCQkJUElPMDogZ3Bpb0BmZTYxMDAwMCB7CisJCQlwaW8wOiBncGlvQGZlNjEwMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC02MCw3ICs2MCw3IEBACiAJCQkJcmVnCQk9IDwwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMCI7CiAJCQl9OwotCQkJUElPMTogZ3Bpb0BmZTYxMTAwMCB7CisJCQlwaW8xOiBncGlvQGZlNjExMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC02OCw3ICs2OCw3IEBACiAJCQkJcmVnCQk9IDwweDEwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xIjsKIAkJCX07Ci0JCQlQSU8yOiBncGlvQGZlNjEyMDAwIHsKKwkJCXBpbzI6IGdwaW9AZmU2MTIwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTc2LDcgKzc2LDcgQEAKIAkJCQlyZWcJCT0gPDB4MjAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzIiOwogCQkJfTsKLQkJCVBJTzM6IGdwaW9AZmU2MTMwMDAgeworCQkJcGlvMzogZ3Bpb0BmZTYxMzAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtODQsNyArODQsNyBAQAogCQkJCXJlZwkJPSA8MHgzMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMyI7CiAJCQl9OwotCQkJUElPNDogZ3Bpb0BmZTYxNDAwMCB7CisJCQlwaW80OiBncGlvQGZlNjE0MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC05Niw4ICs5Niw4IEBACiAJCQlzYmNfc2VyaWFsMSB7CiAJCQkJcGluY3RybF9zYmNfc2VyaWFsMTpzYmNfc2VyaWFsMSB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJdHgJPSA8JlBJTzIgNiBBTFQzIE9VVD47Ci0JCQkJCQlyeAk9IDwmUElPMiA3IEFMVDMgSU4+OworCQkJCQkJdHgJPSA8JnBpbzIgNiBBTFQzIE9VVD47CisJCQkJCQlyeAk9IDwmcGlvMiA3IEFMVDMgSU4+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMTA1LDE1ICsxMDUsMTUgQEAKIAkJCWtleXNjYW4gewogCQkJCXBpbmN0cmxfa2V5c2Nhbjoga2V5c2NhbiB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJa2V5aW4wID0gPCZQSU8wIDIgQUxUMiBJTj47Ci0JCQkJCQlrZXlpbjEgPSA8JlBJTzAgMyBBTFQyIElOPjsKLQkJCQkJCWtleWluMiA9IDwmUElPMCA0IEFMVDIgSU4+OwotCQkJCQkJa2V5aW4zID0gPCZQSU8yIDYgQUxUMiBJTj47CisJCQkJCQlrZXlpbjAgPSA8JnBpbzAgMiBBTFQyIElOPjsKKwkJCQkJCWtleWluMSA9IDwmcGlvMCAzIEFMVDIgSU4+OworCQkJCQkJa2V5aW4yID0gPCZwaW8wIDQgQUxUMiBJTj47CisJCQkJCQlrZXlpbjMgPSA8JnBpbzIgNiBBTFQyIElOPjsKIAotCQkJCQkJa2V5b3V0MCA9IDwmUElPMSA2IEFMVDIgT1VUPjsKLQkJCQkJCWtleW91dDEgPSA8JlBJTzEgNyBBTFQyIE9VVD47Ci0JCQkJCQlrZXlvdXQyID0gPCZQSU8wIDYgQUxUMiBPVVQ+OwotCQkJCQkJa2V5b3V0MyA9IDwmUElPMiA3IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDAgPSA8JnBpbzEgNiBBTFQyIE9VVD47CisJCQkJCQlrZXlvdXQxID0gPCZwaW8xIDcgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MiA9IDwmcGlvMCA2IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDMgPSA8JnBpbzIgNyBBTFQyIE9VVD47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0xMjEsOCArMTIxLDggQEAKIAkJCXNiY19pMmMwIHsKIAkJCQlwaW5jdHJsX3NiY19pMmMwX2RlZmF1bHQ6IHNiY19pMmMwLWRlZmF1bHQgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXNkYSA9IDwmUElPNCA2IEFMVDEgQklESVI+OwotCQkJCQkJc2NsID0gPCZQSU80IDUgQUxUMSBCSURJUj47CisJCQkJCQlzZGEgPSA8JnBpbzQgNiBBTFQxIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvNCA1IEFMVDEgQklESVI+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMTMwLDggKzEzMCw4IEBACiAJCQlzYmNfaTJjMSB7CiAJCQkJcGluY3RybF9zYmNfaTJjMV9kZWZhdWx0OiBzYmNfaTJjMS1kZWZhdWx0IHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlzZGEgPSA8JlBJTzMgMiBBTFQyIEJJRElSPjsKLQkJCQkJCXNjbCA9IDwmUElPMyAxIEFMVDIgQklESVI+OworCQkJCQkJc2RhID0gPCZwaW8zIDIgQUxUMiBCSURJUj47CisJCQkJCQlzY2wgPSA8JnBpbzMgMSBBTFQyIEJJRElSPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkJcmN7CiAJCQkJcGluY3RybF9pcjogaXIwIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlpciA9IDwmUElPNCAwIEFMVDIgSU4+OworCQkJCQkJaXIgPSA8JnBpbzQgMCBBTFQyIElOPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTE0Nyw0OSArMTQ3LDQ5IEBACiAJCQlnbWFjMSB7CiAJCQkJcGluY3RybF9taWkxOiBtaWkxIHsKIAkJCQkJCXN0LHBpbnMgewotCQkJCQkJIHR4ZDAgICA9IDwmUElPMCAwIEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSB0eGQxICAgPSA8JlBJTzAgMSBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgdHhkMiAgID0gPCZQSU8wIDIgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHR4ZDMgICA9IDwmUElPMCAzIEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSB0eGVyICAgPSA8JlBJTzAgNCBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgdHhlbiAgID0gPCZQSU8wIDUgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHR4Y2xrICA9IDwmUElPMCA2IEFMVDEgSU4gICBOSUNMSwkwCUNMS19BPjsKLQkJCQkJCSBjb2wgICAgPSA8JlBJTzAgNyBBTFQxIElOICAgQllQQVNTCTEwMDA+OwotCQkJCQkJIG1kaW8gICA9IDwmUElPMSAwIEFMVDEgT1VUICBCWVBBU1MJMD47Ci0JCQkJCQkgbWRjICAgID0gPCZQSU8xIDEgQUxUMSBPVVQgIE5JQ0xLCTAJQ0xLX0E+OwotCQkJCQkJIGNycyAgICA9IDwmUElPMSAyIEFMVDEgSU4gICBCWVBBU1MJMTAwMD47Ci0JCQkJCQkgbWRpbnQgID0gPCZQSU8xIDMgQUxUMSBJTiAgIEJZUEFTUwkwPjsKLQkJCQkJCSByeGQwICAgPSA8JlBJTzEgNCBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgcnhkMSAgID0gPCZQSU8xIDUgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHJ4ZDIgICA9IDwmUElPMSA2IEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSByeGQzICAgPSA8JlBJTzEgNyBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgcnhkdiAgID0gPCZQSU8yIDAgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHJ4X2VyICA9IDwmUElPMiAxIEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSByeGNsayAgPSA8JlBJTzIgMiBBTFQxIElOICAgTklDTEsJMAlDTEtfQT47Ci0JCQkJCQkgcGh5Y2xrID0gPCZQSU8yIDMgQUxUMSBJTiAgIE5JQ0xLCTEwMDAJQ0xLX0E+OworCQkJCQkJIHR4ZDAgICA9IDwmcGlvMCAwIEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSB0eGQxICAgPSA8JnBpbzAgMSBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgdHhkMiAgID0gPCZwaW8wIDIgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHR4ZDMgICA9IDwmcGlvMCAzIEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSB0eGVyICAgPSA8JnBpbzAgNCBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgdHhlbiAgID0gPCZwaW8wIDUgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHR4Y2xrICA9IDwmcGlvMCA2IEFMVDEgSU4gICBOSUNMSwkwCUNMS19BPjsKKwkJCQkJCSBjb2wgICAgPSA8JnBpbzAgNyBBTFQxIElOICAgQllQQVNTCTEwMDA+OworCQkJCQkJIG1kaW8gICA9IDwmcGlvMSAwIEFMVDEgT1VUICBCWVBBU1MJMD47CisJCQkJCQkgbWRjICAgID0gPCZwaW8xIDEgQUxUMSBPVVQgIE5JQ0xLCTAJQ0xLX0E+OworCQkJCQkJIGNycyAgICA9IDwmcGlvMSAyIEFMVDEgSU4gICBCWVBBU1MJMTAwMD47CisJCQkJCQkgbWRpbnQgID0gPCZwaW8xIDMgQUxUMSBJTiAgIEJZUEFTUwkwPjsKKwkJCQkJCSByeGQwICAgPSA8JnBpbzEgNCBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgcnhkMSAgID0gPCZwaW8xIDUgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHJ4ZDIgICA9IDwmcGlvMSA2IEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSByeGQzICAgPSA8JnBpbzEgNyBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgcnhkdiAgID0gPCZwaW8yIDAgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHJ4X2VyICA9IDwmcGlvMiAxIEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSByeGNsayAgPSA8JnBpbzIgMiBBTFQxIElOICAgTklDTEsJMAlDTEtfQT47CisJCQkJCQkgcGh5Y2xrID0gPCZwaW8yIDMgQUxUMSBJTiAgIE5JQ0xLCTEwMDAJQ0xLX0E+OwogCQkJCQl9OwogCQkJCX07CiAKIAkJCQlwaW5jdHJsX3JnbWlpMTogcmdtaWkxLTAgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCSB0eGQwID0JIDwmUElPMCAwIEFMVDEgT1VUIERFX0lPCTEwMDAJQ0xLX0E+OwotCQkJCQkJIHR4ZDEgPQkgPCZQSU8wIDEgQUxUMSBPVVQgREVfSU8JMTAwMAlDTEtfQT47Ci0JCQkJCQkgdHhkMiA9CSA8JlBJTzAgMiBBTFQxIE9VVCBERV9JTwkxMDAwCUNMS19BPjsKLQkJCQkJCSB0eGQzID0JIDwmUElPMCAzIEFMVDEgT1VUIERFX0lPCTEwMDAJQ0xLX0E+OwotCQkJCQkJIHR4ZW4gPQkgPCZQSU8wIDUgQUxUMSBPVVQgREVfSU8JMAlDTEtfQT47Ci0JCQkJCQkgdHhjbGsgPSA8JlBJTzAgNiBBTFQxIElOCU5JQ0xLCTAJQ0xLX0E+OwotCQkJCQkJIG1kaW8gPQkgPCZQSU8xIDAgQUxUMSBPVVQJQllQQVNTCTA+OwotCQkJCQkJIG1kYyA9CSA8JlBJTzEgMSBBTFQxIE9VVAlOSUNMSwkwCUNMS19BPjsKLQkJCQkJCSByeGQwID0JIDwmUElPMSA0IEFMVDEgSU4gREVfSU8JMAlDTEtfQT47Ci0JCQkJCQkgcnhkMSA9CSA8JlBJTzEgNSBBTFQxIElOIERFX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHJ4ZDIgPQkgPCZQSU8xIDYgQUxUMSBJTiBERV9JTwkwCUNMS19BPjsKLQkJCQkJCSByeGQzID0JIDwmUElPMSA3IEFMVDEgSU4gREVfSU8JMAlDTEtfQT47CisJCQkJCQkgdHhkMCA9CSA8JnBpbzAgMCBBTFQxIE9VVCBERV9JTwkxMDAwCUNMS19BPjsKKwkJCQkJCSB0eGQxID0JIDwmcGlvMCAxIEFMVDEgT1VUIERFX0lPCTEwMDAJQ0xLX0E+OworCQkJCQkJIHR4ZDIgPQkgPCZwaW8wIDIgQUxUMSBPVVQgREVfSU8JMTAwMAlDTEtfQT47CisJCQkJCQkgdHhkMyA9CSA8JnBpbzAgMyBBTFQxIE9VVCBERV9JTwkxMDAwCUNMS19BPjsKKwkJCQkJCSB0eGVuID0JIDwmcGlvMCA1IEFMVDEgT1VUIERFX0lPCTAJQ0xLX0E+OworCQkJCQkJIHR4Y2xrID0gPCZwaW8wIDYgQUxUMSBJTglOSUNMSwkwCUNMS19BPjsKKwkJCQkJCSBtZGlvID0JIDwmcGlvMSAwIEFMVDEgT1VUCUJZUEFTUwkwPjsKKwkJCQkJCSBtZGMgPQkgPCZwaW8xIDEgQUxUMSBPVVQJTklDTEsJMAlDTEtfQT47CisJCQkJCQkgcnhkMCA9CSA8JnBpbzEgNCBBTFQxIElOIERFX0lPCTAJQ0xLX0E+OworCQkJCQkJIHJ4ZDEgPQkgPCZwaW8xIDUgQUxUMSBJTiBERV9JTwkwCUNMS19BPjsKKwkJCQkJCSByeGQyID0JIDwmcGlvMSA2IEFMVDEgSU4gREVfSU8JMAlDTEtfQT47CisJCQkJCQkgcnhkMyA9CSA8JnBpbzEgNyBBTFQxIElOIERFX0lPCTAJQ0xLX0E+OwogCi0JCQkJCQkgcnhkdiA9CSAgPCZQSU8yIDAgQUxUMSBJTiBERV9JTwk1MDAJQ0xLX0E+OwotCQkJCQkJIHJ4Y2xrID0gIDwmUElPMiAyIEFMVDEgSU4JTklDTEsJMAlDTEtfQT47Ci0JCQkJCQkgcGh5Y2xrID0gPCZQSU8yIDMgQUxUNCBPVVQJTklDTEsJMAlDTEtfQj47CisJCQkJCQkgcnhkdiA9CSAgPCZwaW8yIDAgQUxUMSBJTiBERV9JTwk1MDAJQ0xLX0E+OworCQkJCQkJIHJ4Y2xrID0gIDwmcGlvMiAyIEFMVDEgSU4JTklDTEsJMAlDTEtfQT47CisJCQkJCQkgcGh5Y2xrID0gPCZwaW8yIDMgQUxUNCBPVVQJTklDTEsJMAlDTEtfQj47CiAKLQkJCQkJCSBjbGsxMjU9IDwmUElPMyA3IEFMVDQgSU4gCU5JQ0xLCTAJQ0xLX0E+OworCQkJCQkJIGNsazEyNT0gPCZwaW8zIDcgQUxUNCBJTiAJTklDTEsJMAlDTEtfQT47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJCWludGVycnVwdC1uYW1lcwk9ICJpcnFtdXgiOwogCQkJcmFuZ2VzCQk9IDwwIDB4ZmVlMDAwMDAgMHg4MDAwPjsKIAotCQkJUElPNTogZ3Bpb0BmZWUwMDAwMCB7CisJCQlwaW81OiBncGlvQGZlZTAwMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJCQlyZWcJCT0gPDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU81IjsKIAkJCX07Ci0JCQlQSU82OiBncGlvQGZlZTAxMDAwIHsKKwkJCXBpbzY6IGdwaW9AZmVlMDEwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQkJCXJlZwkJPSA8MHgxMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPNiI7CiAJCQl9OwotCQkJUElPNzogZ3Bpb0BmZWUwMjAwMCB7CisJCQlwaW83OiBncGlvQGZlZTAyMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yMzAsNyArMjMwLDcgQEAKIAkJCQlyZWcJCT0gPDB4MjAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzciOwogCQkJfTsKLQkJCVBJTzg6IGdwaW9AZmVlMDMwMDAgeworCQkJcGlvODogZ3Bpb0BmZWUwMzAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJCQkJcmVnCQk9IDwweDMwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU84IjsKIAkJCX07Ci0JCQlQSU85OiBncGlvQGZlZTA0MDAwIHsKKwkJCXBpbzk6IGdwaW9AZmVlMDQwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCQkJCXJlZwkJPSA8MHg0MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPOSI7CiAJCQl9OwotCQkJUElPMTA6IGdwaW9AZmVlMDUwMDAgeworCQkJcGlvMTA6IGdwaW9AZmVlMDUwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQkJCXJlZwkJPSA8MHg1MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTAiOwogCQkJfTsKLQkJCVBJTzExOiBncGlvQGZlZTA2MDAwIHsKKwkJCXBpbzExOiBncGlvQGZlZTA2MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yNjIsNyArMjYyLDcgQEAKIAkJCQlyZWcJCT0gPDB4NjAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzExIjsKIAkJCX07Ci0JCQlQSU8xMjogZ3Bpb0BmZWUwNzAwMCB7CisJCQlwaW8xMjogZ3Bpb0BmZWUwNzAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjc0LDggKzI3NCw4IEBACiAJCQlpMmMwIHsKIAkJCQlwaW5jdHJsX2kyYzBfZGVmYXVsdDogaTJjMC1kZWZhdWx0IHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlzZGEgPSA8JlBJTzkgMyBBTFQxIEJJRElSPjsKLQkJCQkJCXNjbCA9IDwmUElPOSAyIEFMVDEgQklESVI+OworCQkJCQkJc2RhID0gPCZwaW85IDMgQUxUMSBCSURJUj47CisJCQkJCQlzY2wgPSA8JnBpbzkgMiBBTFQxIEJJRElSPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTI4Myw4ICsyODMsOCBAQAogCQkJaTJjMSB7CiAJCQkJcGluY3RybF9pMmMxX2RlZmF1bHQ6IGkyYzEtZGVmYXVsdCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJc2RhID0gPCZQSU8xMiAxIEFMVDEgQklESVI+OwotCQkJCQkJc2NsID0gPCZQSU8xMiAwIEFMVDEgQklESVI+OworCQkJCQkJc2RhID0gPCZwaW8xMiAxIEFMVDEgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW8xMiAwIEFMVDEgQklESVI+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCQlpbnRlcnJ1cHQtbmFtZXMJPSAiaXJxbXV4IjsKIAkJCXJhbmdlcwkJPSA8MCAweGZlODIwMDAwIDB4ODAwMD47CiAKLQkJCVBJTzEzOiBncGlvQGZlODIwMDAwIHsKKwkJCXBpbzEzOiBncGlvQGZlODIwMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zMDksNyArMzA5LDcgQEAKIAkJCQlyZWcJCT0gPDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMyI7CiAJCQl9OwotCQkJUElPMTQ6IGdwaW9AZmU4MjEwMDAgeworCQkJcGlvMTQ6IGdwaW9AZmU4MjEwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTMxNyw3ICszMTcsNyBAQAogCQkJCXJlZwkJPSA8MHgxMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTQiOwogCQkJfTsKLQkJCVBJTzE1OiBncGlvQGZlODIyMDAwIHsKKwkJCXBpbzE1OiBncGlvQGZlODIyMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJCQlyZWcJCT0gPDB4MjAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzE1IjsKIAkJCX07Ci0JCQlQSU8xNjogZ3Bpb0BmZTgyMzAwMCB7CisJCQlwaW8xNjogZ3Bpb0BmZTgyMzAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJCQkJcmVnCQk9IDwweDMwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xNiI7CiAJCQl9OwotCQkJUElPMTc6IGdwaW9AZmU4MjQwMDAgeworCQkJcGlvMTc6IGdwaW9AZmU4MjQwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTM0MSw3ICszNDEsNyBAQAogCQkJCXJlZwkJPSA8MHg0MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTciOwogCQkJfTsKLQkJCVBJTzE4OiBncGlvQGZlODI1MDAwIHsKKwkJCXBpbzE4OiBncGlvQGZlODI1MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zNTMsOCArMzUzLDggQEAKIAkJCXNlcmlhbDIgewogCQkJCXBpbmN0cmxfc2VyaWFsMjogc2VyaWFsMi0wIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQl0eAk9IDwmUElPMTcgNCBBTFQyIE9VVD47Ci0JCQkJCQlyeAk9IDwmUElPMTcgNSBBTFQyIElOPjsKKwkJCQkJCXR4CT0gPCZwaW8xNyA0IEFMVDIgT1VUPjsKKwkJCQkJCXJ4CT0gPCZwaW8xNyA1IEFMVDIgSU4+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMzYyLDczICszNjIsOTQgQEAKIAkJCWdtYWMwewogCQkJCXBpbmN0cmxfbWlpMDogbWlpMCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkgbWRpbnQgPQk8JlBJTzEzIDYgQUxUMglJTglCWVBBU1MJCTA+OwotCQkJCQkgdHhlbiA9CQk8JlBJTzEzIDcgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCSBtZGludCA9CTwmcGlvMTMgNiBBTFQyCUlOCUJZUEFTUwkJMD47CisJCQkJCSB0eGVuID0JCTwmcGlvMTMgNyBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19BPjsKIAotCQkJCQkgdHhkMCA9CQk8JlBJTzE0IDAgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCSB0eGQxID0JCTwmUElPMTQgMSBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJIHR4ZDIgPQkJPCZQSU8xNCAyIEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0I+OwotCQkJCQkgdHhkMyA9CQk8JlBJTzE0IDMgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQj47CisJCQkJCSB0eGQwID0JCTwmcGlvMTQgMCBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJIHR4ZDEgPQkJPCZwaW8xNCAxIEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkgdHhkMiA9CQk8JnBpbzE0IDIgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQj47CisJCQkJCSB0eGQzID0JCTwmcGlvMTQgMyBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19CPjsKIAotCQkJCQkgdHhjbGsgPQk8JlBJTzE1IDAgQUxUMglJTglOSUNMSwkJMAlDTEtfQT47Ci0JCQkJCSB0eGVyID0JCTwmUElPMTUgMSBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJIGNycyA9CQk8JlBJTzE1IDIgQUxUMglJTglCWVBBU1MJCTEwMDA+OwotCQkJCQkgY29sID0JCTwmUElPMTUgMyBBTFQyCUlOCUJZUEFTUwkJMTAwMD47Ci0JCQkJCSBtZGlvICA9ICAgICAgICA8JlBJTzE1IDQgQUxUMglPVVQJQllQQVNTIAkzMDAwPjsKLQkJCQkJIG1kYyAgID0gICAgICAgIDwmUElPMTUgNSBBTFQyCU9VVCAgICAgTklDTEsgIAkwICAgIAlDTEtfQj47CisJCQkJCSB0eGNsayA9CTwmcGlvMTUgMCBBTFQyCUlOCU5JQ0xLCQkwCUNMS19BPjsKKwkJCQkJIHR4ZXIgPQkJPCZwaW8xNSAxIEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkgY3JzID0JCTwmcGlvMTUgMiBBTFQyCUlOCUJZUEFTUwkJMTAwMD47CisJCQkJCSBjb2wgPQkJPCZwaW8xNSAzIEFMVDIJSU4JQllQQVNTCQkxMDAwPjsKKwkJCQkJIG1kaW8gID0gICAgICAgIDwmcGlvMTUgNCBBTFQyCU9VVAlCWVBBU1MgCTMwMDA+OworCQkJCQkgbWRjICAgPSAgICAgICAgPCZwaW8xNSA1IEFMVDIJT1VUICAgICBOSUNMSyAgCTAgICAgCUNMS19CPjsKIAotCQkJCQkgcnhkMCA9CQk8JlBJTzE2IDAgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJIHJ4ZDEgPQkJPCZQSU8xNiAxIEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCSByeGQyID0JCTwmUElPMTYgMiBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkgcnhkMyA9CQk8JlBJTzE2IDMgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJIHJ4ZHYgPQkJPCZQSU8xNSA2IEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCSByeF9lciA9CTwmUElPMTUgNyBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkgcnhjbGsgPQk8JlBJTzE3IDAgQUxUMglJTglOSUNMSwkJMAlDTEtfQT47Ci0JCQkJCSBwaHljbGsgPQk8JlBJTzEzIDUgQUxUMglPVVQJTklDTEsJMTAwMAlDTEtfQT47CisJCQkJCSByeGQwID0JCTwmcGlvMTYgMCBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkgcnhkMSA9CQk8JnBpbzE2IDEgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJIHJ4ZDIgPQkJPCZwaW8xNiAyIEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCSByeGQzID0JCTwmcGlvMTYgMyBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkgcnhkdiA9CQk8JnBpbzE1IDYgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJIHJ4X2VyID0JPCZwaW8xNSA3IEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCSByeGNsayA9CTwmcGlvMTcgMCBBTFQyCUlOCU5JQ0xLCQkwCUNMS19BPjsKKwkJCQkJIHBoeWNsayA9CTwmcGlvMTMgNSBBTFQyCU9VVAlOSUNMSwkxMDAwCUNMS19BPjsKIAogCQkJCQl9OwogCQkJCX07CiAKIAkJCXBpbmN0cmxfZ21paTA6IGdtaWkwIHsKIAkJCQlzdCxwaW5zIHsKLQkJCQkJIG1kaW50ID0JPCZQSU8xMyA2CUFMVDIgSU4JCUJZUEFTUwkwPjsKLQkJCQkJIG1kaW8gID0gICAgICAgIDwmUElPMTUgNCAJQUxUMiBPVVQJQllQQVNTIAkzMDAwPjsKLQkJCQkJIG1kYyAgID0gICAgICAgIDwmUElPMTUgNSAJQUxUMiBPVVQgICAgCU5JQ0xLICAJMCAgICAJQ0xLX0I+OwotCQkJCQkgdHhlbiA9CQk8JlBJTzEzIDcJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQT47CisJCQkJCSBtZGludCA9CTwmcGlvMTMgNglBTFQyIElOCQlCWVBBU1MJMD47CisJCQkJCSBtZGlvICA9ICAgICAgICA8JnBpbzE1IDQgCUFMVDIgT1VUCUJZUEFTUyAJMzAwMD47CisJCQkJCSBtZGMgICA9ICAgICAgICA8JnBpbzE1IDUgCUFMVDIgT1VUICAgIAlOSUNMSyAgCTAgICAgCUNMS19CPjsKKwkJCQkJIHR4ZW4gPQkJPCZwaW8xMyA3CUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0E+OwogCi0JCQkJCSB0eGQwID0JCTwmUElPMTQgMAlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19BPjsKLQkJCQkJIHR4ZDEgPQkJPCZQSU8xNCAxCUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0E+OwotCQkJCQkgdHhkMiA9CQk8JlBJTzE0IDIJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47Ci0JCQkJCSB0eGQzID0JCTwmUElPMTQgMwlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKLQkJCQkJIHR4ZDQgPQkJPCZQSU8xNCA0CUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OwotCQkJCQkgdHhkNSA9CQk8JlBJTzE0IDUJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47Ci0JCQkJCSB0eGQ2ID0JCTwmUElPMTQgNglBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKLQkJCQkJIHR4ZDcgPQkJPCZQSU8xNCA3CUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OworCQkJCQkgdHhkMCA9CQk8JnBpbzE0IDAJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQT47CisJCQkJCSB0eGQxID0JCTwmcGlvMTQgMQlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19BPjsKKwkJCQkJIHR4ZDIgPQkJPCZwaW8xNCAyCUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OworCQkJCQkgdHhkMyA9CQk8JnBpbzE0IDMJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47CisJCQkJCSB0eGQ0ID0JCTwmcGlvMTQgNAlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKKwkJCQkJIHR4ZDUgPQkJPCZwaW8xNCA1CUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OworCQkJCQkgdHhkNiA9CQk8JnBpbzE0IDYJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47CisJCQkJCSB0eGQ3ID0JCTwmcGlvMTQgNwlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKIAotCQkJCQkgdHhjbGsgPQk8JlBJTzE1IDAJQUxUMiBJTgkJTklDTEsJMAlDTEtfQT47Ci0JCQkJCSB0eGVyID0JCTwmUElPMTUgMQlBTFQyIE9VVCAJU0VfTklDTEtfSU8JMzAwMAlDTEtfQT47Ci0JCQkJCSBjcnMgPQkJPCZQSU8xNSAyCUFMVDIgSU4JCUJZUEFTUwkxMDAwPjsKLQkJCQkJIGNvbCA9CQk8JlBJTzE1IDMJQUxUMiBJTgkJQllQQVNTCTEwMDA+OwotCQkJCQkgcnhkdiA9CQk8JlBJTzE1IDYJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47Ci0JCQkJCSByeF9lciA9CTwmUElPMTUgNwlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKKwkJCQkJIHR4Y2xrID0JPCZwaW8xNSAwCUFMVDIgSU4JCU5JQ0xLCTAJQ0xLX0E+OworCQkJCQkgdHhlciA9CQk8JnBpbzE1IDEJQUxUMiBPVVQgCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0E+OworCQkJCQkgY3JzID0JCTwmcGlvMTUgMglBTFQyIElOCQlCWVBBU1MJMTAwMD47CisJCQkJCSBjb2wgPQkJPCZwaW8xNSAzCUFMVDIgSU4JCUJZUEFTUwkxMDAwPjsKKwkJCQkJIHJ4ZHYgPQkJPCZwaW8xNSA2CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OworCQkJCQkgcnhfZXIgPQk8JnBpbzE1IDcJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CiAKLQkJCQkJIHJ4ZDAgPQkJPCZQSU8xNiAwCUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OwotCQkJCQkgcnhkMSA9CQk8JlBJTzE2IDEJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47Ci0JCQkJCSByeGQyID0JCTwmUElPMTYgMglBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKLQkJCQkJIHJ4ZDMgPQkJPCZQSU8xNiAzCUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OwotCQkJCQkgcnhkNCA9CQk8JlBJTzE2IDQJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47Ci0JCQkJCSByeGQ1ID0JCTwmUElPMTYgNQlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKLQkJCQkJIHJ4ZDYgPQkJPCZQSU8xNiA2CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OwotCQkJCQkgcnhkNyA9CQk8JlBJTzE2IDcJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CisJCQkJCSByeGQwID0JCTwmcGlvMTYgMAlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKKwkJCQkJIHJ4ZDEgPQkJPCZwaW8xNiAxCUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OworCQkJCQkgcnhkMiA9CQk8JnBpbzE2IDIJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CisJCQkJCSByeGQzID0JCTwmcGlvMTYgMwlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKKwkJCQkJIHJ4ZDQgPQkJPCZwaW8xNiA0CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OworCQkJCQkgcnhkNSA9CQk8JnBpbzE2IDUJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CisJCQkJCSByeGQ2ID0JCTwmcGlvMTYgNglBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKKwkJCQkJIHJ4ZDcgPQkJPCZwaW8xNiA3CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OwogCi0JCQkJCSByeGNsayA9CTwmUElPMTcgMAlBTFQyIElOCU5JQ0xLCTAJQ0xLX0E+OwotCQkJCQkgY2xrMTI1ID0JPCZQSU8xNyA2CUFMVDEgSU4JTklDTEsJMAlDTEtfQT47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeWNsayA9ICAgICAgIDwmUElPMTMgNSAgICAgICBBTFQ0IE9VVCBOSUNMSyAgIDAgICAgICAgQ0xLX0I+OworCQkJCQkgcnhjbGsgPQk8JnBpbzE3IDAJQUxUMiBJTglOSUNMSwkwCUNMS19BPjsKKwkJCQkJIGNsazEyNSA9CTwmcGlvMTcgNglBTFQxIElOCU5JQ0xLCTAJQ0xLX0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHljbGsgPSAgICAgICA8JnBpbzEzIDUgICAgICAgQUxUNCBPVVQgTklDTEsgICAwICAgICAgIENMS19CPjsKIAogCiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CisKKwkJCW1tYzAgeworCQkJCXBpbmN0cmxfbW1jMDogbW1jMCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJbW1jY2xrID0gPCZwaW8xMyA0IEFMVDQgQklESVJfUFUgTklDTEsgMCBDTEtfQj47CisJCQkJCQlkYXRhMCAgPSA8JnBpbzE0IDQgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhMSAgPSA8JnBpbzE0IDUgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhMiAgPSA8JnBpbzE0IDYgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhMyAgPSA8JnBpbzE0IDcgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQljbWQgICAgPSA8JnBpbzE1IDEgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQl3cCAgICAgPSA8JnBpbzE1IDMgQUxUNCBJTj47CisJCQkJCQlkYXRhNCAgPSA8JnBpbzE2IDQgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhNSAgPSA8JnBpbzE2IDUgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhNiAgPSA8JnBpbzE2IDYgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhNyAgPSA8JnBpbzE2IDcgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlwd3IgICAgPSA8JnBpbzE3IDEgQUxUNCBPVVQ+OworCQkJCQkJY2QgICAgID0gPCZwaW8xNyAyIEFMVDQgSU4+OworCQkJCQkJbGVkICAgID0gPCZwaW8xNyAzIEFMVDQgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlwaW4tY29udHJvbGxlci1sZWZ0IHsKQEAgLTQ0Miw3ICs0NjMsNyBAQAogCQkJaW50ZXJydXB0LW5hbWVzCT0gImlycW11eCI7CiAJCQlyYW5nZXMJCT0gPDAgMHhmZDZiMDAwMCAweDMwMDA+OwogCi0JCQlQSU8xMDA6IGdwaW9AZmQ2YjAwMDAgeworCQkJcGlvMTAwOiBncGlvQGZkNmIwMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC00NTAsNyArNDcxLDcgQEAKIAkJCQlyZWcJCT0gPDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDAiOwogCQkJfTsKLQkJCVBJTzEwMTogZ3Bpb0BmZDZiMTAwMCB7CisJCQlwaW8xMDE6IGdwaW9AZmQ2YjEwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTQ1OCw3ICs0NzksNyBAQAogCQkJCXJlZwkJPSA8MHgxMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTAxIjsKIAkJCX07Ci0JCQlQSU8xMDI6IGdwaW9AZmQ2YjIwMDAgeworCQkJcGlvMTAyOiBncGlvQGZkNmIyMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC00NzksNyArNTAwLDcgQEAKIAkJCWludGVycnVwdC1uYW1lcwk9ICJpcnFtdXgiOwogCQkJcmFuZ2VzCQk9IDwwIDB4ZmQzMzAwMDAgMHg1MDAwPjsKIAotCQkJUElPMTAzOiBncGlvQGZkMzMwMDAwIHsKKwkJCXBpbzEwMzogZ3Bpb0BmZDMzMDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNDg3LDcgKzUwOCw3IEBACiAJCQkJcmVnCQk9IDwwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTAzIjsKIAkJCX07Ci0JCQlQSU8xMDQ6IGdwaW9AZmQzMzEwMDAgeworCQkJcGlvMTA0OiBncGlvQGZkMzMxMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC00OTUsNyArNTE2LDcgQEAKIAkJCQlyZWcJCT0gPDB4MTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwNCI7CiAJCQl9OwotCQkJUElPMTA1OiBncGlvQGZkMzMyMDAwIHsKKwkJCXBpbzEwNTogZ3Bpb0BmZDMzMjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNTAzLDcgKzUyNCw3IEBACiAJCQkJcmVnCQk9IDwweDIwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDUiOwogCQkJfTsKLQkJCVBJTzEwNjogZ3Bpb0BmZDMzMzAwMCB7CisJCQlwaW8xMDY6IGdwaW9AZmQzMzMwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTUxMSw3ICs1MzIsNyBAQAogCQkJCXJlZwkJPSA8MHgzMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTA2IjsKIAkJCX07Ci0JCQlQSU8xMDc6IGdwaW9AZmQzMzQwMDAgeworCQkJcGlvMTA3OiBncGlvQGZkMzM0MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LmR0c2kKaW5kZXggYTBmNmY3NS4uOTE5OGMxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUuZHRzaQpAQCAtMjE4LDUgKzIxOCwxNyBAQAogCQkJcmVzZXRzCT0gPCZwb3dlcmRvd24gU1RJSDQxNV9LRVlTQ0FOX1BPV0VSRE9XTj4sCiAJCQkJICA8JnNvZnRyZXNldCBTVElINDE1X0tFWVNDQU5fU09GVFJFU0VUPjsKIAkJfTsKKworCQltbWMwOiBzZGhjaUBmZTgxZTAwMCB7CisJCQljb21wYXRpYmxlICAgICAgPSAic3Qsc2RoY2kiOworCQkJc3RhdHVzICAgICAgICAgID0gImRpc2FibGVkIjsKKwkJCXJlZyAgICAgICAgICAgICA9IDwweGZlODFlMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzICAgICAgPSA8R0lDX1NQSSAxNDUgSVJRX1RZUEVfTk9ORT47CisJCQlpbnRlcnJ1cHQtbmFtZXMgPSAibW1jaXJxIjsKKwkJCXBpbmN0cmwtbmFtZXMgICA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCAgICAgICA9IDwmcGluY3RybF9tbWMwPjsKKwkJCWNsb2NrLW5hbWVzICAgICA9ICJtbWMiOworCQkJY2xvY2tzICAgICAgICAgID0gPCZjbGtfc19hMV9scyAxPjsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1iMjAyMC5kdHMKaW5kZXggNGUyZGY2Ni4uMjAwYTgxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1iMjAyMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1iMjAyMC5kdHMKQEAgLTEyLDQgKzEyLDI2IEBACiAvIHsKIAltb2RlbCA9ICJTVGlINDE2IEIyMDIwIjsKIAljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtYjIwMjAiLCAic3Qsc3RpaDQxNiI7CisKKwlzb2MgeworCQltbWMxOiBzZGhjaUBmZTgxZjAwMCB7CisJCQlzdGF0dXMgICAgICAgPSAib2theSI7CisJCQlidXMtd2lkdGggICAgPSA8OD47CisJCQlub24tcmVtb3ZhYmxlOworCQl9OworCisJCW1pcGh5MzY1eF9waHk6IHBoeUBmZTM4MjAwMCB7CisJCQlwaHlfcG9ydDA6IHBvcnRAZmUzODIwMDAgeworCQkJCXN0LHNhdGEtZ2VuID0gPDM+OworCQkJfTsKKworCQkJcGh5X3BvcnQxOiBwb3J0QGZlMzhhMDAwIHsKKwkJCQlzdCxwY2llLXR4LXBvbC1pbnY7CisJCQl9OworCQl9OworCisJCXNhdGEwOiBzYXRhQGZlMzgwMDAweworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1iMjAyMGUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1iMjAyMGUuZHRzCmluZGV4IGJhMGZhMmMuLjk2MTc5OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjBlLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDIwZS5kdHMKQEAgLTE5LDE3ICsxOSwzNyBAQAogCQkJcmVkIHsKIAkJCQkjZ3Bpby1jZWxscwkJPSA8MT47CiAJCQkJbGFiZWwJCQk9ICJGcm9udCBQYW5lbCBMRUQiOwotCQkJCWdwaW9zCQkJPSA8JlBJTzQgMT47CisJCQkJZ3Bpb3MJCQk9IDwmcGlvNCAxPjsKIAkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIJPSAiaGVhcnRiZWF0IjsKIAkJCX07CiAJCQlncmVlbiB7Ci0JCQkJZ3Bpb3MJCQk9IDwmUElPMSAzPjsKKwkJCQlncGlvcwkJCT0gPCZwaW8xIDM+OwogCQkJCWRlZmF1bHQtc3RhdGUgCQk9ICJvZmYiOwogCQkJfTsKIAkJfTsKIAogCQlldGhlcm5ldDE6IGR3bWFjQGZlZjA4MDAwIHsKLQkJCXNucHMscmVzZXQtZ3BpbyA9IDwmUElPMCA3PjsKKwkJCXNucHMscmVzZXQtZ3BpbyA9IDwmcGlvMCA3PjsKKwkJfTsKKworCQltbWMxOiBzZGhjaUBmZTgxZjAwMCB7CisJCQlzdGF0dXMgICAgICAgPSAib2theSI7CisJCQlidXMtd2lkdGggICAgPSA8OD47CisJCQlub24tcmVtb3ZhYmxlOworCQl9OworCisJCW1pcGh5MzY1eF9waHk6IHBoeUBmZTM4MjAwMCB7CisJCQlwaHlfcG9ydDA6IHBvcnRAZmUzODIwMDAgeworCQkJCXN0LHNhdGEtZ2VuID0gPDM+OworCQkJfTsKKworCQkJcGh5X3BvcnQxOiBwb3J0QGZlMzhhMDAwIHsKKwkJCQlzdCxwY2llLXR4LXBvbC1pbnY7CisJCQl9OworCQl9OworCisJCXNhdGEwOiBzYXRhQGZlMzgwMDAweworCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1waW5jdHJsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LXBpbmN0cmwuZHRzaQppbmRleCBlZTZjMTE5Li45Y2NjZjJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LXBpbmN0cmwuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LXBpbmN0cmwuZHRzaQpAQCAtMTIsMzYgKzEyLDM2IEBACiAvIHsKIAogCWFsaWFzZXMgewotCQlncGlvMAk9ICZQSU8wOwotCQlncGlvMQk9ICZQSU8xOwotCQlncGlvMgk9ICZQSU8yOwotCQlncGlvMwk9ICZQSU8zOwotCQlncGlvNAk9ICZQSU80OwotCQlncGlvNQk9ICZQSU80MDsKLQkJZ3BpbzYJPSAmUElPNTsKLQkJZ3BpbzcJPSAmUElPNjsKLQkJZ3BpbzgJPSAmUElPNzsKLQkJZ3BpbzkJPSAmUElPODsKLQkJZ3BpbzEwCT0gJlBJTzk7Ci0JCWdwaW8xMQk9ICZQSU8xMDsKLQkJZ3BpbzEyCT0gJlBJTzExOwotCQlncGlvMTMJPSAmUElPMTI7Ci0JCWdwaW8xNAk9ICZQSU8zMDsKLQkJZ3BpbzE1CT0gJlBJTzMxOwotCQlncGlvMTYJPSAmUElPMTM7Ci0JCWdwaW8xNwk9ICZQSU8xNDsKLQkJZ3BpbzE4CT0gJlBJTzE1OwotCQlncGlvMTkJPSAmUElPMTY7Ci0JCWdwaW8yMAk9ICZQSU8xNzsKLQkJZ3BpbzIxCT0gJlBJTzE4OwotCQlncGlvMjIJPSAmUElPMTAwOwotCQlncGlvMjMJPSAmUElPMTAxOwotCQlncGlvMjQJPSAmUElPMTAyOwotCQlncGlvMjUJPSAmUElPMTAzOwotCQlncGlvMjYJPSAmUElPMTA0OwotCQlncGlvMjcJPSAmUElPMTA1OwotCQlncGlvMjgJPSAmUElPMTA2OwotCQlncGlvMjkJPSAmUElPMTA3OworCQlncGlvMAk9ICZwaW8wOworCQlncGlvMQk9ICZwaW8xOworCQlncGlvMgk9ICZwaW8yOworCQlncGlvMwk9ICZwaW8zOworCQlncGlvNAk9ICZwaW80OworCQlncGlvNQk9ICZwaW80MDsKKwkJZ3BpbzYJPSAmcGlvNTsKKwkJZ3BpbzcJPSAmcGlvNjsKKwkJZ3BpbzgJPSAmcGlvNzsKKwkJZ3BpbzkJPSAmcGlvODsKKwkJZ3BpbzEwCT0gJnBpbzk7CisJCWdwaW8xMQk9ICZwaW8xMDsKKwkJZ3BpbzEyCT0gJnBpbzExOworCQlncGlvMTMJPSAmcGlvMTI7CisJCWdwaW8xNAk9ICZwaW8zMDsKKwkJZ3BpbzE1CT0gJnBpbzMxOworCQlncGlvMTYJPSAmcGlvMTM7CisJCWdwaW8xNwk9ICZwaW8xNDsKKwkJZ3BpbzE4CT0gJnBpbzE1OworCQlncGlvMTkJPSAmcGlvMTY7CisJCWdwaW8yMAk9ICZwaW8xNzsKKwkJZ3BpbzIxCT0gJnBpbzE4OworCQlncGlvMjIJPSAmcGlvMTAwOworCQlncGlvMjMJPSAmcGlvMTAxOworCQlncGlvMjQJPSAmcGlvMTAyOworCQlncGlvMjUJPSAmcGlvMTAzOworCQlncGlvMjYJPSAmcGlvMTA0OworCQlncGlvMjcJPSAmcGlvMTA1OworCQlncGlvMjgJPSAmcGlvMTA2OworCQlncGlvMjkJPSAmcGlvMTA3OwogCX07CiAKIAlzb2MgewpAQCAtNTYsNyArNTYsNyBAQAogCQkJaW50ZXJydXB0LW5hbWVzCT0gImlycW11eCI7CiAJCQlyYW5nZXMJCT0gPDAgMHhmZTYxMDAwMCAweDYwMDA+OwogCi0JCQlQSU8wOiBncGlvQGZlNjEwMDAwIHsKKwkJCXBpbzA6IGdwaW9AZmU2MTAwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTY0LDcgKzY0LDcgQEAKIAkJCQlyZWcJCT0gPDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8wIjsKIAkJCX07Ci0JCQlQSU8xOiBncGlvQGZlNjExMDAwIHsKKwkJCXBpbzE6IGdwaW9AZmU2MTEwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTcyLDcgKzcyLDcgQEAKIAkJCQlyZWcJCT0gPDB4MTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEiOwogCQkJfTsKLQkJCVBJTzI6IGdwaW9AZmU2MTIwMDAgeworCQkJcGlvMjogZ3Bpb0BmZTYxMjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtODAsNyArODAsNyBAQAogCQkJCXJlZwkJPSA8MHgyMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMiI7CiAJCQl9OwotCQkJUElPMzogZ3Bpb0BmZTYxMzAwMCB7CisJCQlwaW8zOiBncGlvQGZlNjEzMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC04OCw3ICs4OCw3IEBACiAJCQkJcmVnCQk9IDwweDMwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8zIjsKIAkJCX07Ci0JCQlQSU80OiBncGlvQGZlNjE0MDAwIHsKKwkJCXBpbzQ6IGdwaW9AZmU2MTQwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTk2LDcgKzk2LDcgQEAKIAkJCQlyZWcJCT0gPDB4NDAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzQiOwogCQkJfTsKLQkJCVBJTzQwOiBncGlvQGZlNjE1MDAwIHsKKwkJCXBpbzQwOiBncGlvQGZlNjE1MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0xMDksMTUgKzEwOSwxNSBAQAogCQkJcmN7CiAJCQkJcGluY3RybF9pcjogaXIwIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlpciA9IDwmUElPNCAwIEFMVDIgSU4+OworCQkJCQkJaXIgPSA8JnBpbzQgMCBBTFQyIElOPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKIAkJCXNiY19zZXJpYWwxIHsKIAkJCQlwaW5jdHJsX3NiY19zZXJpYWwxOiBzYmNfc2VyaWFsMSB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJdHgJPSA8JlBJTzIgNiBBTFQzIE9VVD47Ci0JCQkJCQlyeAk9IDwmUElPMiA3IEFMVDMgSU4+OworCQkJCQkJdHgJPSA8JnBpbzIgNiBBTFQzIE9VVD47CisJCQkJCQlyeAk9IDwmcGlvMiA3IEFMVDMgSU4+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMTI1LDE1ICsxMjUsMTUgQEAKIAkJCWtleXNjYW4gewogCQkJCXBpbmN0cmxfa2V5c2Nhbjoga2V5c2NhbiB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJa2V5aW4wID0gPCZQSU8wIDIgQUxUMiBJTj47Ci0JCQkJCQlrZXlpbjEgPSA8JlBJTzAgMyBBTFQyIElOPjsKLQkJCQkJCWtleWluMiA9IDwmUElPMCA0IEFMVDIgSU4+OwotCQkJCQkJa2V5aW4zID0gPCZQSU8yIDYgQUxUMiBJTj47CisJCQkJCQlrZXlpbjAgPSA8JnBpbzAgMiBBTFQyIElOPjsKKwkJCQkJCWtleWluMSA9IDwmcGlvMCAzIEFMVDIgSU4+OworCQkJCQkJa2V5aW4yID0gPCZwaW8wIDQgQUxUMiBJTj47CisJCQkJCQlrZXlpbjMgPSA8JnBpbzIgNiBBTFQyIElOPjsKIAotCQkJCQkJa2V5b3V0MCA9IDwmUElPMSA2IEFMVDIgT1VUPjsKLQkJCQkJCWtleW91dDEgPSA8JlBJTzEgNyBBTFQyIE9VVD47Ci0JCQkJCQlrZXlvdXQyID0gPCZQSU8wIDYgQUxUMiBPVVQ+OwotCQkJCQkJa2V5b3V0MyA9IDwmUElPMiA3IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDAgPSA8JnBpbzEgNiBBTFQyIE9VVD47CisJCQkJCQlrZXlvdXQxID0gPCZwaW8xIDcgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MiA9IDwmcGlvMCA2IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDMgPSA8JnBpbzIgNyBBTFQyIE9VVD47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0xNDEsOCArMTQxLDE3IEBACiAJCQlzYmNfaTJjMCB7CiAJCQkJcGluY3RybF9zYmNfaTJjMF9kZWZhdWx0OiBzYmNfaTJjMC1kZWZhdWx0IHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlzZGEgPSA8JlBJTzQgNiBBTFQxIEJJRElSPjsKLQkJCQkJCXNjbCA9IDwmUElPNCA1IEFMVDEgQklESVI+OworCQkJCQkJc2RhID0gPCZwaW80IDYgQUxUMSBCSURJUj47CisJCQkJCQlzY2wgPSA8JnBpbzQgNSBBTFQxIEJJRElSPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJdXNiIHsKKwkJCQlwaW5jdHJsX3VzYjM6IHVzYjMgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCW9jLWRldGVjdCA9IDwmcGlvNDAgMCBBTFQxIElOPjsKKwkJCQkJCXB3ci1lbmFibGUgPSA8JnBpbzQwIDEgQUxUMSBPVVQ+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMTUwLDggKzE1OSw4IEBACiAJCQlzYmNfaTJjMSB7CiAJCQkJcGluY3RybF9zYmNfaTJjMV9kZWZhdWx0OiBzYmNfaTJjMS1kZWZhdWx0IHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlzZGEgPSA8JlBJTzMgMiBBTFQyIEJJRElSPjsKLQkJCQkJCXNjbCA9IDwmUElPMyAxIEFMVDIgQklESVI+OworCQkJCQkJc2RhID0gPCZwaW8zIDIgQUxUMiBCSURJUj47CisJCQkJCQlzY2wgPSA8JnBpbzMgMSBBTFQyIEJJRElSPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTE1OSw1MSArMTY4LDUxIEBACiAJCQlnbWFjMSB7CiAJCQkJcGluY3RybF9taWkxOiBtaWkxIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQl0eGQwID0gPCZQSU8wIDAgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQl0eGQxID0gPCZQSU8wIDEgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQl0eGQyID0gPCZQSU8wIDIgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQl0eGQzID0gPCZQSU8wIDMgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQl0eGVyID0gPCZQSU8wIDQgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQl0eGVuID0gPCZQSU8wIDUgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQl0eGNsayA9IDwmUElPMCA2IEFMVDEgSU4gTklDTEsgMCBDTEtfQT47Ci0JCQkJCQljb2wgPSAgIDwmUElPMCA3IEFMVDEgSU4gQllQQVNTIDEwMDA+OworCQkJCQkJdHhkMCA9IDwmcGlvMCAwIEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhkMSA9IDwmcGlvMCAxIEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhkMiA9IDwmcGlvMCAyIEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhkMyA9IDwmcGlvMCAzIEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhlciA9IDwmcGlvMCA0IEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhlbiA9IDwmcGlvMCA1IEFMVDEgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhjbGsgPSA8JnBpbzAgNiBBTFQxIElOIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJY29sID0gICA8JnBpbzAgNyBBTFQxIElOIEJZUEFTUyAxMDAwPjsKIAotCQkJCQkJbWRpbyA9ICA8JlBJTzEgMCBBTFQxIE9VVCBCWVBBU1MgMTUwMD47Ci0JCQkJCQltZGMgPSAgIDwmUElPMSAxIEFMVDEgT1VUIE5JQ0xLIDAgQ0xLX0E+OwotCQkJCQkJY3JzID0gICA8JlBJTzEgMiBBTFQxIElOIEJZUEFTUyAxMDAwPjsKLQkJCQkJCW1kaW50ID0gPCZQSU8xIDMgQUxUMSBJTiBCWVBBU1MgMD47Ci0JCQkJCQlyeGQwID0gIDwmUElPMSA0IEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeGQxID0gIDwmUElPMSA1IEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeGQyID0gIDwmUElPMSA2IEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeGQzID0gIDwmUElPMSA3IEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQltZGlvID0gIDwmcGlvMSAwIEFMVDEgT1VUIEJZUEFTUyAxNTAwPjsKKwkJCQkJCW1kYyA9ICAgPCZwaW8xIDEgQUxUMSBPVVQgTklDTEsgMCBDTEtfQT47CisJCQkJCQljcnMgPSAgIDwmcGlvMSAyIEFMVDEgSU4gQllQQVNTIDEwMDA+OworCQkJCQkJbWRpbnQgPSA8JnBpbzEgMyBBTFQxIElOIEJZUEFTUyAwPjsKKwkJCQkJCXJ4ZDAgPSAgPCZwaW8xIDQgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4ZDEgPSAgPCZwaW8xIDUgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4ZDIgPSAgPCZwaW8xIDYgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4ZDMgPSAgPCZwaW8xIDcgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKIAotCQkJCQkJcnhkdiA9ICA8JlBJTzIgMCBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhfZXIgPSA8JlBJTzIgMSBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhjbGsgPSA8JlBJTzIgMiBBTFQxIElOIE5JQ0xLIDAgQ0xLX0E+OwotCQkJCQkJcGh5Y2xrID0gPCZQSU8yIDMgQUxUMSBPVVQgTklDTEsgMCBDTEtfQT47CisJCQkJCQlyeGR2ID0gIDwmcGlvMiAwIEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeF9lciA9IDwmcGlvMiAxIEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeGNsayA9IDwmcGlvMiAyIEFMVDEgSU4gTklDTEsgMCBDTEtfQT47CisJCQkJCQlwaHljbGsgPSA8JnBpbzIgMyBBTFQxIE9VVCBOSUNMSyAwIENMS19BPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJCXBpbmN0cmxfcmdtaWkxOiByZ21paTEtMCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJdHhkMCA9ICA8JlBJTzAgMCBBTFQxIE9VVCBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJdHhkMSA9ICA8JlBJTzAgMSBBTFQxIE9VVCBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJdHhkMiA9ICA8JlBJTzAgMiBBTFQxIE9VVCBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJdHhkMyA9ICA8JlBJTzAgMyBBTFQxIE9VVCBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJdHhlbiA9ICA8JlBJTzAgNSBBTFQxIE9VVCBERV9JTyAwICAgQ0xLX0E+OwotCQkJCQkJdHhjbGsgPSA8JlBJTzAgNiBBTFQxIElOICBOSUNMSyAwICAgQ0xLX0E+OworCQkJCQkJdHhkMCA9ICA8JnBpbzAgMCBBTFQxIE9VVCBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJdHhkMSA9ICA8JnBpbzAgMSBBTFQxIE9VVCBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJdHhkMiA9ICA8JnBpbzAgMiBBTFQxIE9VVCBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJdHhkMyA9ICA8JnBpbzAgMyBBTFQxIE9VVCBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJdHhlbiA9ICA8JnBpbzAgNSBBTFQxIE9VVCBERV9JTyAwICAgQ0xLX0E+OworCQkJCQkJdHhjbGsgPSA8JnBpbzAgNiBBTFQxIElOICBOSUNMSyAwICAgQ0xLX0E+OwogCi0JCQkJCQltZGlvID0gPCZQSU8xIDAgQUxUMSBPVVQgQllQQVNTIDA+OwotCQkJCQkJbWRjICA9IDwmUElPMSAxIEFMVDEgT1VUIE5JQ0xLICAwIENMS19BPjsKLQkJCQkJCXJ4ZDAgPSA8JlBJTzEgNCBBTFQxIElOIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQlyeGQxID0gPCZQSU8xIDUgQUxUMSBJTiBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJcnhkMiA9IDwmUElPMSA2IEFMVDEgSU4gREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCXJ4ZDMgPSA8JlBJTzEgNyBBTFQxIElOIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQltZGlvID0gPCZwaW8xIDAgQUxUMSBPVVQgQllQQVNTIDA+OworCQkJCQkJbWRjICA9IDwmcGlvMSAxIEFMVDEgT1VUIE5JQ0xLICAwIENMS19BPjsKKwkJCQkJCXJ4ZDAgPSA8JnBpbzEgNCBBTFQxIElOIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQlyeGQxID0gPCZwaW8xIDUgQUxUMSBJTiBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJcnhkMiA9IDwmcGlvMSA2IEFMVDEgSU4gREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCXJ4ZDMgPSA8JnBpbzEgNyBBTFQxIElOIERFX0lPIDUwMCBDTEtfQT47CiAKLQkJCQkJCXJ4ZHYgICA9IDwmUElPMiAwIEFMVDEgSU4gIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQlyeGNsayAgPSA8JlBJTzIgMiBBTFQxIElOICBOSUNMSyAwICAgQ0xLX0E+OwotCQkJCQkJcGh5Y2xrID0gPCZQSU8yIDMgQUxUNCBPVVQgTklDTEsgMCAgIENMS19CPjsKKwkJCQkJCXJ4ZHYgICA9IDwmcGlvMiAwIEFMVDEgSU4gIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQlyeGNsayAgPSA8JnBpbzIgMiBBTFQxIElOICBOSUNMSyAwICAgQ0xLX0E+OworCQkJCQkJcGh5Y2xrID0gPCZwaW8yIDMgQUxUNCBPVVQgTklDTEsgMCAgIENMS19CPjsKIAotCQkJCQkJY2xrMTI1PSA8JlBJTzMgNyBBTFQ0IElOIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJY2xrMTI1PSA8JnBpbzMgNyBBTFQ0IElOIE5JQ0xLIDAgQ0xLX0E+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMjIwLDcgKzIyOSw3IEBACiAJCQlpbnRlcnJ1cHQtbmFtZXMJPSAiaXJxbXV4IjsKIAkJCXJhbmdlcwkJPSA8MCAweGZlZTAwMDAwIDB4MTAwMDA+OwogCi0JCQlQSU81OiBncGlvQGZlZTAwMDAwIHsKKwkJCXBpbzU6IGdwaW9AZmVlMDAwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTIyOCw3ICsyMzcsNyBAQAogCQkJCXJlZwkJPSA8MCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzUiOwogCQkJfTsKLQkJCVBJTzY6IGdwaW9AZmVlMDEwMDAgeworCQkJcGlvNjogZ3Bpb0BmZWUwMTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjM2LDcgKzI0NSw3IEBACiAJCQkJcmVnCQk9IDwweDEwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU82IjsKIAkJCX07Ci0JCQlQSU83OiBncGlvQGZlZTAyMDAwIHsKKwkJCXBpbzc6IGdwaW9AZmVlMDIwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI0NCw3ICsyNTMsNyBAQAogCQkJCXJlZwkJPSA8MHgyMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPNyI7CiAJCQl9OwotCQkJUElPODogZ3Bpb0BmZWUwMzAwMCB7CisJCQlwaW84OiBncGlvQGZlZTAzMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yNTIsNyArMjYxLDcgQEAKIAkJCQlyZWcJCT0gPDB4MzAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzgiOwogCQkJfTsKLQkJCVBJTzk6IGdwaW9AZmVlMDQwMDAgeworCQkJcGlvOTogZ3Bpb0BmZWUwNDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjYwLDcgKzI2OSw3IEBACiAJCQkJcmVnCQk9IDwweDQwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU85IjsKIAkJCX07Ci0JCQlQSU8xMDogZ3Bpb0BmZWUwNTAwMCB7CisJCQlwaW8xMDogZ3Bpb0BmZWUwNTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjY4LDcgKzI3Nyw3IEBACiAJCQkJcmVnCQk9IDwweDUwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMCI7CiAJCQl9OwotCQkJUElPMTE6IGdwaW9AZmVlMDYwMDAgeworCQkJcGlvMTE6IGdwaW9AZmVlMDYwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI3Niw3ICsyODUsNyBAQAogCQkJCXJlZwkJPSA8MHg2MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTEiOwogCQkJfTsKLQkJCVBJTzEyOiBncGlvQGZlZTA3MDAwIHsKKwkJCXBpbzEyOiBncGlvQGZlZTA3MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yODQsNyArMjkzLDcgQEAKIAkJCQlyZWcJCT0gPDB4NzAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEyIjsKIAkJCX07Ci0JCQlQSU8zMDogZ3Bpb0BmZWUwODAwMCB7CisJCQlwaW8zMDogZ3Bpb0BmZWUwODAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjkyLDcgKzMwMSw3IEBACiAJCQkJcmVnCQk9IDwweDgwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8zMCI7CiAJCQl9OwotCQkJUElPMzE6IGdwaW9AZmVlMDkwMDAgeworCQkJcGlvMzE6IGdwaW9AZmVlMDkwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTMwNCw3ICszMTMsNyBAQAogCQkJc2VyaWFsMi1vZSB7CiAJCQkJcGluY3RybF9zZXJpYWwyX29lOiBzZXJpYWwyLTEgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCW91dHB1dC1lbmFibGUJPSA8JlBJTzExIDMgQUxUMiBPVVQ+OworCQkJCQkJb3V0cHV0LWVuYWJsZQk9IDwmcGlvMTEgMyBBTFQyIE9VVD47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0zMTIsMTcgKzMyMSwyNyBAQAogCQkJaTJjMCB7CiAJCQkJcGluY3RybF9pMmMwX2RlZmF1bHQ6IGkyYzAtZGVmYXVsdCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJc2RhID0gPCZQSU85IDMgQUxUMSBCSURJUj47Ci0JCQkJCQlzY2wgPSA8JlBJTzkgMiBBTFQxIEJJRElSPjsKKwkJCQkJCXNkYSA9IDwmcGlvOSAzIEFMVDEgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW85IDIgQUxUMSBCSURJUj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CiAKKwkJCXVzYiB7CisJCQkJcGluY3RybF91c2IwOiB1c2IwIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQlvYy1kZXRlY3QgPSA8JnBpbzkgNCBBTFQxIElOPjsKKwkJCQkJCXB3ci1lbmFibGUgPSA8JnBpbzkgNSBBTFQxIE9VVD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwogCQkJaTJjMSB7CiAJCQkJcGluY3RybF9pMmMxX2RlZmF1bHQ6IGkyYzEtZGVmYXVsdCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJc2RhID0gPCZQSU8xMiAxIEFMVDEgQklESVI+OwotCQkJCQkJc2NsID0gPCZQSU8xMiAwIEFMVDEgQklESVI+OworCQkJCQkJc2RhID0gPCZwaW8xMiAxIEFMVDEgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW8xMiAwIEFMVDEgQklESVI+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMzMwLDEyICszNDksMTIgQEAKIAkJCWZzbSB7CiAJCQkJcGluY3RybF9mc206IGZzbSB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJc3BpLWZzbS1jbGsgID0gPCZQSU8xMiAyIEFMVDEgT1VUPjsKLQkJCQkJCXNwaS1mc20tY3MgICA9IDwmUElPMTIgMyBBTFQxIE9VVD47Ci0JCQkJCQlzcGktZnNtLW1vc2kgPSA8JlBJTzEyIDQgQUxUMSBPVVQ+OwotCQkJCQkJc3BpLWZzbS1taXNvID0gPCZQSU8xMiA1IEFMVDEgSU4+OwotCQkJCQkJc3BpLWZzbS1ob2wgID0gPCZQSU8xMiA2IEFMVDEgT1VUPjsKLQkJCQkJCXNwaS1mc20td3AgICA9IDwmUElPMTIgNyBBTFQxIE9VVD47CisJCQkJCQlzcGktZnNtLWNsayAgPSA8JnBpbzEyIDIgQUxUMSBPVVQ+OworCQkJCQkJc3BpLWZzbS1jcyAgID0gPCZwaW8xMiAzIEFMVDEgT1VUPjsKKwkJCQkJCXNwaS1mc20tbW9zaSA9IDwmcGlvMTIgNCBBTFQxIE9VVD47CisJCQkJCQlzcGktZnNtLW1pc28gPSA8JnBpbzEyIDUgQUxUMSBJTj47CisJCQkJCQlzcGktZnNtLWhvbCAgPSA8JnBpbzEyIDYgQUxUMSBPVVQ+OworCQkJCQkJc3BpLWZzbS13cCAgID0gPCZwaW8xMiA3IEFMVDEgT1VUPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTM1Miw3ICszNzEsNyBAQAogCQkJaW50ZXJydXB0LW5hbWVzCT0gImlycW11eCI7CiAJCQlyYW5nZXMgCQk9IDwwIDB4ZmU4MjAwMDAgMHg2MDAwPjsKIAotCQkJUElPMTM6IGdwaW9AZmU4MjAwMDAgeworCQkJcGlvMTM6IGdwaW9AZmU4MjAwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTM2MCw3ICszNzksNyBAQAogCQkJCXJlZwkJPSA8MCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEzIjsKIAkJCX07Ci0JCQlQSU8xNDogZ3Bpb0BmZTgyMTAwMCB7CisJCQlwaW8xNDogZ3Bpb0BmZTgyMTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzY4LDcgKzM4Nyw3IEBACiAJCQkJcmVnCQk9IDwweDEwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xNCI7CiAJCQl9OwotCQkJUElPMTU6IGdwaW9AZmU4MjIwMDAgeworCQkJcGlvMTU6IGdwaW9AZmU4MjIwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTM3Niw3ICszOTUsNyBAQAogCQkJCXJlZwkJPSA8MHgyMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTUiOwogCQkJfTsKLQkJCVBJTzE2OiBncGlvQGZlODIzMDAwIHsKKwkJCXBpbzE2OiBncGlvQGZlODIzMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zODQsNyArNDAzLDcgQEAKIAkJCQlyZWcJCT0gPDB4MzAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzE2IjsKIAkJCX07Ci0JCQlQSU8xNzogZ3Bpb0BmZTgyNDAwMCB7CisJCQlwaW8xNzogZ3Bpb0BmZTgyNDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzkyLDcgKzQxMSw3IEBACiAJCQkJcmVnCQk9IDwweDQwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xNyI7CiAJCQl9OwotCQkJUElPMTg6IGdwaW9AZmU4MjUwMDAgeworCQkJcGlvMTg6IGdwaW9AZmU4MjUwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTQwNSw4ICs0MjQsOCBAQAogCQkJc2VyaWFsMiB7CiAJCQkJcGluY3RybF9zZXJpYWwyOiBzZXJpYWwyLTAgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXR4CT0gPCZQSU8xNyA0IEFMVDIgT1VUPjsKLQkJCQkJCXJ4CT0gPCZQSU8xNyA1IEFMVDIgSU4+OworCQkJCQkJdHgJPSA8JnBpbzE3IDQgQUxUMiBPVVQ+OworCQkJCQkJcngJPSA8JnBpbzE3IDUgQUxUMiBJTj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC00MTQsMjggKzQzMywyOCBAQAogCQkJZ21hYzAgewogCQkJCXBpbmN0cmxfbWlpMDogbWlpMCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJbWRpbnQgPSA8JlBJTzEzIDYgQUxUMiBJTiAgQllQQVNTICAgICAgMD47Ci0JCQkJCQl0eGVuID0gIDwmUElPMTMgNyBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXR4ZDAgPSAgPCZQSU8xNCAwIEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJdHhkMSA9ICA8JlBJTzE0IDEgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQl0eGQyID0gIDwmUElPMTQgMiBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19CPjsKLQkJCQkJCXR4ZDMgPSAgPCZQSU8xNCAzIEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0I+OworCQkJCQkJbWRpbnQgPSA8JnBpbzEzIDYgQUxUMiBJTiAgQllQQVNTICAgICAgMD47CisJCQkJCQl0eGVuID0gIDwmcGlvMTMgNyBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXR4ZDAgPSAgPCZwaW8xNCAwIEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhkMSA9ICA8JnBpbzE0IDEgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGQyID0gIDwmcGlvMTQgMiBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19CPjsKKwkJCQkJCXR4ZDMgPSAgPCZwaW8xNCAzIEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0I+OwogCi0JCQkJCQl0eGNsayA9IDwmUElPMTUgMCBBTFQyIElOICBOSUNMSyAgICAgICAwIENMS19BPjsKLQkJCQkJCXR4ZXIgPSAgPCZQSU8xNSAxIEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJY3JzID0gPCZQSU8xNSAyIEFMVDIgSU4gIEJZUEFTUyAxMDAwPjsKLQkJCQkJCWNvbCA9IDwmUElPMTUgMyBBTFQyIElOICBCWVBBU1MgMTAwMD47Ci0JCQkJCQltZGlvPSA8JlBJTzE1IDQgQUxUMiBPVVQgQllQQVNTIDE1MDA+OwotCQkJCQkJbWRjID0gPCZQSU8xNSA1IEFMVDIgT1VUIE5JQ0xLICAwICAgIENMS19CPjsKKwkJCQkJCXR4Y2xrID0gPCZwaW8xNSAwIEFMVDIgSU4gIE5JQ0xLICAgICAgIDAgQ0xLX0E+OworCQkJCQkJdHhlciA9ICA8JnBpbzE1IDEgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQljcnMgPSA8JnBpbzE1IDIgQUxUMiBJTiAgQllQQVNTIDEwMDA+OworCQkJCQkJY29sID0gPCZwaW8xNSAzIEFMVDIgSU4gIEJZUEFTUyAxMDAwPjsKKwkJCQkJCW1kaW89IDwmcGlvMTUgNCBBTFQyIE9VVCBCWVBBU1MgMTUwMD47CisJCQkJCQltZGMgPSA8JnBpbzE1IDUgQUxUMiBPVVQgTklDTEsgIDAgICAgQ0xLX0I+OwogCi0JCQkJCQlyeGQwID0gIDwmUElPMTYgMCBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhkMSA9ICA8JlBJTzE2IDEgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4ZDIgPSAgPCZQSU8xNiAyIEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeGQzID0gIDwmUElPMTYgMyBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhkdiA9ICA8JlBJTzE1IDYgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4X2VyID0gPCZQSU8xNSA3IEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeGNsayA9IDwmUElPMTcgMCBBTFQyIElOIE5JQ0xLIDAgQ0xLX0E+OwotCQkJCQkJcGh5Y2xrID0gPCZQSU8xMyA1IEFMVDIgT1VUIE5JQ0xLIDAgQ0xLX0I+OworCQkJCQkJcnhkMCA9ICA8JnBpbzE2IDAgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4ZDEgPSAgPCZwaW8xNiAxIEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeGQyID0gIDwmcGlvMTYgMiBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhkMyA9ICA8JnBpbzE2IDMgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4ZHYgPSAgPCZwaW8xNSA2IEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeF9lciA9IDwmcGlvMTUgNyBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhjbGsgPSA8JnBpbzE3IDAgQUxUMiBJTiBOSUNMSyAwIENMS19BPjsKKwkJCQkJCXBoeWNsayA9IDwmcGlvMTMgNSBBTFQyIE9VVCBOSUNMSyAwIENMS19CPjsKIAkJCQkJfTsKIAkJCQl9OwogCkBAIC00NDUsMjUgKzQ2NCw3OSBAQAogCQkJCX07CiAJCQkJcGluY3RybF9yZ21paTA6IHJnbWlpMCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJIHBoeWNsayA9IDwmUElPMTMgIDUgQUxUNCBPVVQgTklDTEsgMCBDTEtfQj47Ci0JCQkJCQkgdHhlbiA9IDwmUElPMTMgNyBBTFQyIE9VVCBERV9JTyAwIENMS19BPjsKLQkJCQkJCSB0eGQwICA9IDwmUElPMTQgMCBBTFQyIE9VVCBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJIHR4ZDEgID0gPCZQSU8xNCAxIEFMVDIgT1VUIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQkgdHhkMiAgPSA8JlBJTzE0IDIgQUxUMiBPVVQgREVfSU8gNTAwIENMS19CPjsKLQkJCQkJCSB0eGQzICA9IDwmUElPMTQgMyBBTFQyIE9VVCBERV9JTyA1MDAgQ0xLX0I+OwotCQkJCQkJIHR4Y2xrID0gPCZQSU8xNSAwIEFMVDIgSU4gTklDTEsgMCBDTEtfQT47CisJCQkJCQkgcGh5Y2xrID0gPCZwaW8xMyAgNSBBTFQ0IE9VVCBOSUNMSyAwIENMS19CPjsKKwkJCQkJCSB0eGVuID0gPCZwaW8xMyA3IEFMVDIgT1VUIERFX0lPIDAgQ0xLX0E+OworCQkJCQkJIHR4ZDAgID0gPCZwaW8xNCAwIEFMVDIgT1VUIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQkgdHhkMSAgPSA8JnBpbzE0IDEgQUxUMiBPVVQgREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCSB0eGQyICA9IDwmcGlvMTQgMiBBTFQyIE9VVCBERV9JTyA1MDAgQ0xLX0I+OworCQkJCQkJIHR4ZDMgID0gPCZwaW8xNCAzIEFMVDIgT1VUIERFX0lPIDUwMCBDTEtfQj47CisJCQkJCQkgdHhjbGsgPSA8JnBpbzE1IDAgQUxUMiBJTiBOSUNMSyAwIENMS19BPjsKIAotCQkJCQkJIG1kaW8gPSA8JlBJTzE1IDQgQUxUMiBPVVQgQllQQVNTIDA+OwotCQkJCQkJIG1kYyA9IDwmUElPMTUgNSBBTFQyIE9VVCBOSUNMSyAwIENMS19CPjsKKwkJCQkJCSBtZGlvID0gPCZwaW8xNSA0IEFMVDIgT1VUIEJZUEFTUyAwPjsKKwkJCQkJCSBtZGMgPSA8JnBpbzE1IDUgQUxUMiBPVVQgTklDTEsgMCBDTEtfQj47CiAKLQkJCQkJCSByeGR2ID0gPCZQSU8xNSA2IEFMVDIgSU4gREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCSByeGQwID08JlBJTzE2IDAgQUxUMiBJTiBERV9JTwk1MDAgQ0xLX0E+OwotCQkJCQkJIHJ4ZDEgPTwmUElPMTYgMSBBTFQyIElOIERFX0lPCTUwMCBDTEtfQT47Ci0JCQkJCQkgcnhkMiA9PCZQSU8xNiAyIEFMVDIgSU4gREVfSU8JNTAwIENMS19BPjsKLQkJCQkJCSByeGQzICA9PCZQSU8xNiAzIEFMVDIgSU4gREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCSByeGNsayA9PCZQSU8xNyAwIEFMVDIgSU4gTklDTEsgMCBDTEtfQT47CisJCQkJCQkgcnhkdiA9IDwmcGlvMTUgNiBBTFQyIElOIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQkgcnhkMCA9PCZwaW8xNiAwIEFMVDIgSU4gREVfSU8JNTAwIENMS19BPjsKKwkJCQkJCSByeGQxID08JnBpbzE2IDEgQUxUMiBJTiBERV9JTwk1MDAgQ0xLX0E+OworCQkJCQkJIHJ4ZDIgPTwmcGlvMTYgMiBBTFQyIElOIERFX0lPCTUwMCBDTEtfQT47CisJCQkJCQkgcnhkMyAgPTwmcGlvMTYgMyBBTFQyIElOIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQkgcnhjbGsgPTwmcGlvMTcgMCBBTFQyIElOIE5JQ0xLIDAgQ0xLX0E+OwogCi0JCQkJCQkgY2xrMTI1PTwmUElPMTcgNiBBTFQxIElOIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJIGNsazEyNT08JnBpbzE3IDYgQUxUMSBJTiBOSUNMSyAwIENMS19BPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJbW1jMCB7CisJCQkJcGluY3RybF9tbWMwOiBtbWMwIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQltbWNjbGsgID0gPCZwaW8xMyA0IEFMVDQgQklESVJfUFUgTklDTEsgMCBDTEtfQj47CisJCQkJCQlkYXRhMCAgID0gPCZwaW8xNCA0IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTEgICA9IDwmcGlvMTQgNSBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGEyICAgPSA8JnBpbzE0IDYgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhMyAgID0gPCZwaW8xNCA3IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJY21kICAgICA9IDwmcGlvMTUgMSBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCXdwICAgICAgPSA8JnBpbzE1IDMgQUxUNCBJTj47CisJCQkJCQlkYXRhNCAgID0gPCZwaW8xNiA0IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTUgICA9IDwmcGlvMTYgNSBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGE2ICAgPSA8JnBpbzE2IDYgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhNyAgID0gPCZwaW8xNiA3IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJcHdyICAgICA9IDwmcGlvMTcgMSBBTFQ0IE9VVD47CisJCQkJCQljZCAgICAgID0gPCZwaW8xNyAyIEFMVDQgSU4+OworCQkJCQkJbGVkICAgICA9IDwmcGlvMTcgMyBBTFQ0IE9VVD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCQltbWMxIHsKKwkJCQlwaW5jdHJsX21tYzE6IG1tYzEgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCW1tY2NsayAgPSA8JnBpbzE1IDAgQUxUMyBCSURJUl9QVSBOSUNMSyAwIENMS19CPjsKKwkJCQkJCWRhdGEwICAgPSA8JnBpbzEzIDcgQUxUMyBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhMSAgID0gPCZwaW8xNCAxIEFMVDMgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTIgICA9IDwmcGlvMTQgMiBBTFQzIEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGEzICAgPSA8JnBpbzE0IDMgQUxUMyBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQljbWQgICAgID0gPCZwaW8xNSA0IEFMVDMgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTQgICA9IDwmcGlvMTUgNiBBTFQzIEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGE1ICAgPSA8JnBpbzE1IDcgQUxUMyBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhNiAgID0gPCZwaW8xNiAwIEFMVDMgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTcgICA9IDwmcGlvMTYgMSBBTFQzIEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCXB3ciAgICAgPSA8JnBpbzE2IDIgQUxUMyBPVVQ+OworCQkJCQkJbnJlc2V0ICA9IDwmcGlvMTMgNiBBTFQzIE9VVD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCXVzYiB7CisJCQkJcGluY3RybF91c2IxOiB1c2IxIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQlvYy1kZXRlY3QgPSA8JnBpbzE4IDAgQUxUMSBJTj47CisJCQkJCQlwd3ItZW5hYmxlID0gPCZwaW8xOCAxIEFMVDEgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJCXBpbmN0cmxfdXNiMjogdXNiMiB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJb2MtZGV0ZWN0ID0gPCZwaW8xOCAyIEFMVDEgSU4+OworCQkJCQkJcHdyLWVuYWJsZSA9IDwmcGlvMTggMyBBTFQxIE9VVD47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC00ODAsNyArNTUzLDcgQEAKIAkJCWludGVycnVwdC1uYW1lcwk9ICJpcnFtdXgiOwogCQkJcmFuZ2VzCQk9IDwwIDB4ZmQ2YjAwMDAgMHgzMDAwPjsKIAotCQkJUElPMTAwOiBncGlvQGZkNmIwMDAwIHsKKwkJCXBpbzEwMDogZ3Bpb0BmZDZiMDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNDg4LDcgKzU2MSw3IEBACiAJCQkJcmVnCQk9IDwwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTAwIjsKIAkJCX07Ci0JCQlQSU8xMDE6IGdwaW9AZmQ2YjEwMDAgeworCQkJcGlvMTAxOiBncGlvQGZkNmIxMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC00OTYsNyArNTY5LDcgQEAKIAkJCQlyZWcJCT0gPDB4MTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwMSI7CiAJCQl9OwotCQkJUElPMTAyOiBncGlvQGZkNmIyMDAwIHsKKwkJCXBpbzEwMjogZ3Bpb0BmZDZiMjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNTE3LDcgKzU5MCw3IEBACiAJCQlpbnRlcnJ1cHQtbmFtZXMJPSAiaXJxbXV4IjsKIAkJCXJhbmdlcwkJCT0gPDAgMHhmZDMzMDAwMCAweDUwMDA+OwogCi0JCQlQSU8xMDM6IGdwaW9AZmQzMzAwMDAgeworCQkJcGlvMTAzOiBncGlvQGZkMzMwMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC01MjUsNyArNTk4LDcgQEAKIAkJCQlyZWcJCT0gPDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDMiOwogCQkJfTsKLQkJCVBJTzEwNDogZ3Bpb0BmZDMzMTAwMCB7CisJCQlwaW8xMDQ6IGdwaW9AZmQzMzEwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTUzMyw3ICs2MDYsNyBAQAogCQkJCXJlZwkJPSA8MHgxMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTA0IjsKIAkJCX07Ci0JCQlQSU8xMDU6IGdwaW9AZmQzMzIwMDAgeworCQkJcGlvMTA1OiBncGlvQGZkMzMyMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC01NDEsNyArNjE0LDcgQEAKIAkJCQlyZWcJCT0gPDB4MjAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwNSI7CiAJCQl9OwotCQkJUElPMTA2OiBncGlvQGZkMzMzMDAwIHsKKwkJCXBpbzEwNjogZ3Bpb0BmZDMzMzAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNTUwLDcgKzYyMyw3IEBACiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwNiI7CiAJCQl9OwogCi0JCQlQSU8xMDc6IGdwaW9AZmQzMzQwMDAgeworCQkJcGlvMTA3OiBncGlvQGZkMzM0MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LmR0c2kKaW5kZXggODQ3NThkNy4uZmFkOTA3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYuZHRzaQpAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlICJzdGloNDF4LmR0c2kiCiAjaW5jbHVkZSAic3RpaDQxNi1jbG9jay5kdHNpIgogI2luY2x1ZGUgInN0aWg0MTYtcGluY3RybC5kdHNpIgorCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGh5L3BoeS1taXBoeTM2NXguaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcmVzZXQtY29udHJvbGxlci9zdGloNDE2LXJlc2V0cy5oPgogLyB7CkBAIC0yMzYsNSArMjM4LDIxMiBAQAogCQkJcmVzZXRzCT0gPCZwb3dlcmRvd24gU1RJSDQxNl9LRVlTQ0FOX1BPV0VSRE9XTj4sCiAJCQkJICA8JnNvZnRyZXNldCBTVElINDE2X0tFWVNDQU5fU09GVFJFU0VUPjsKIAkJfTsKKworCQl0ZW1wMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtc2FzLXRoZXJtYWwiOworCQkJY2xvY2stbmFtZXMgPSAidGhlcm1hbCI7CisJCQljbG9ja3MgPSA8JmNsb2NrZ2VuX2NfdmNjIDE0PjsKKworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXRlbXAxQGZkZmU4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1tcGUtdGhlcm1hbCI7CisJCQlyZWcgPSA8MHhmZGZlODAwMCAweDEwPjsKKwkJCWNsb2NrcyA9IDwmY2xvY2tnZW5fZSAzPjsKKwkJCWNsb2NrLW5hbWVzID0gInRoZXJtYWwiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIzIElSUV9UWVBFX0VER0VfUklTSU5HPjsKKworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCW1tYzA6IHNkaGNpQGZlODFlMDAwIHsKKwkJCWNvbXBhdGlibGUJPSAic3Qsc2RoY2kiOworCQkJc3RhdHVzCQk9ICJkaXNhYmxlZCI7CisJCQlyZWcJCT0gPDB4ZmU4MWUwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMJPSA8R0lDX1NQSSAxMjcgSVJRX1RZUEVfTk9ORT47CisJCQlpbnRlcnJ1cHQtbmFtZXMJPSAibW1jaXJxIjsKKwkJCXBpbmN0cmwtbmFtZXMJPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAJPSA8JnBpbmN0cmxfbW1jMD47CisJCQljbG9jay1uYW1lcwk9ICJtbWMiOworCQkJY2xvY2tzCQk9IDwmY2xrX3NfYTFfbHMgMT47CisJCX07CisKKwkJbW1jMTogc2RoY2lAZmU4MWYwMDAgeworCQkJY29tcGF0aWJsZQk9ICJzdCxzZGhjaSI7CisJCQlzdGF0dXMJCT0gImRpc2FibGVkIjsKKwkJCXJlZwkJPSA8MHhmZTgxZjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cwk9IDxHSUNfU1BJIDEyOCBJUlFfVFlQRV9OT05FPjsKKwkJCWludGVycnVwdC1uYW1lcwk9ICJtbWNpcnEiOworCQkJcGluY3RybC1uYW1lcwk9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMAk9IDwmcGluY3RybF9tbWMxPjsKKwkJCWNsb2NrLW5hbWVzCT0gIm1tYyI7CisJCQljbG9ja3MJCT0gPCZjbGtfc19hMV9scyA4PjsKKwkJfTsKKworCQltaXBoeTM2NXhfcGh5OiBwaHlAZmUzODIwMDAgeworCQkJY29tcGF0aWJsZSAgICAgID0gInN0LG1pcGh5MzY1eC1waHkiOworCQkJc3Qsc3lzY2ZnICAJPSA8JnN5c2NmZ19yZWFyPjsKKwkJCSNhZGRyZXNzLWNlbGxzCT0gPDE+OworCQkJI3NpemUtY2VsbHMJPSA8MT47CisJCQlyYW5nZXM7CisKKwkJCXBoeV9wb3J0MDogcG9ydEBmZTM4MjAwMCB7CisJCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCQlyZWcgPSA8MHhmZTM4MjAwMCAweDEwMD4sIDwweGZlMzk0MDAwIDB4MTAwPiwgPDB4ODI0IDB4ND47CisJCQkJcmVnLW5hbWVzID0gInNhdGEiLCAicGNpZSIsICJzeXNjZmciOworCQkJfTsKKworCQkJcGh5X3BvcnQxOiBwb3J0QGZlMzhhMDAwIHsKKwkJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweGZlMzhhMDAwIDB4MTAwPiwgPDB4ZmU4MDQwMDAgMHgxMDA+LCA8MHg4MjggMHg0PjsKKwkJCQlyZWctbmFtZXMgPSAic2F0YSIsICJwY2llIiwgInN5c2NmZyI7CisJCQl9OworCQl9OworCisJCXNhdGEwOiBzYXRhQGZlMzgwMDAwIHsKKwkJCWNvbXBhdGlibGUgICAgICA9ICJzdCxzdGktYWhjaSI7CisJCQlyZWcgICAgICAgICAgICAgPSA8MHhmZTM4MDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyAgICAgID0gPEdJQ19TUEkgMTU3IElSUV9UWVBFX05PTkU+OworCQkJaW50ZXJydXB0LW5hbWVzID0gImhvc3RjIjsKKwkJCXBoeXMJICAgICAgICA9IDwmcGh5X3BvcnQwIE1JUEhZX1RZUEVfU0FUQT47CisJCQlwaHktbmFtZXMgICAgICAgPSAic2F0YS1waHkiOworCQkJcmVzZXRzCSAgICAgICAgPSA8JnBvd2VyZG93biBTVElINDE2X1NBVEEwX1BPV0VSRE9XTj4sCisJCQkJCSAgPCZzb2Z0cmVzZXQgU1RJSDQxNl9TQVRBMF9TT0ZUUkVTRVQ+OworCQkJcmVzZXQtbmFtZXMgICAgID0gInB3ci1kd24iLCAic3ctcnN0IjsKKwkJCWNsb2NrLW5hbWVzICAgICA9ICJhaGNpX2NsayI7CisJCQljbG9ja3MJICAgICAgICA9IDwmY2xrX3NfYTBfbHMgQ0xLX0lDTl9SRUc+OworCisJCQlzdGF0dXMJICAgICAgICA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdXNiMl9waHk6IHBoeUAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi11c2ItcGh5IjsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQlzdCxzeXNjZmcgPSA8JnN5c2NmZ19yZWFyPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKwkJCWNsb2NrLW5hbWVzID0gIm9zY19waHkiOworCQl9OworCisJCWVoY2kwOiB1c2JAZmUxZmZlMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdC1laGNpLTMwMHgiOworCQkJcmVnID0gPDB4ZmUxZmZlMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0OCBJUlFfVFlQRV9OT05FPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNiMD47CisJCQljbG9ja3MgPSA8JmNsa19zX2ExX2xzIDA+LAorCQkJCSA8JmNsb2NrZ2VuX2IwIDA+OworCQkJY2xvY2stbmFtZXMgPSAiaWMiLCAiY2xrNDgiOworCQkJcGh5cyA9IDwmdXNiMl9waHk+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCQlyZXNldHMgPSA8JnBvd2VyZG93biBTVElINDE2X1VTQjBfUE9XRVJET1dOPiwKKwkJCQkgPCZzb2Z0cmVzZXQgU1RJSDQxNl9VU0IwX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJwb3dlciIsICJzb2Z0cmVzZXQiOworCQl9OworCisJCW9oY2kwOiB1c2JAZmUxZmZjMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdC1vaGNpLTMwMHgiOworCQkJcmVnID0gPDB4ZmUxZmZjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0OSBJUlFfVFlQRV9OT05FPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYTFfbHMgMD4sCisJCQkJIDwmY2xvY2tnZW5fYjAgMD47CisJCQljbG9jay1uYW1lcyA9ICJpYyIsICJjbGs0OCI7CisJCQlwaHlzID0gPCZ1c2IyX3BoeT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCXJlc2V0cyA9IDwmcG93ZXJkb3duIFNUSUg0MTZfVVNCMF9QT1dFUkRPV04+LAorCQkJCSA8JnNvZnRyZXNldCBTVElINDE2X1VTQjBfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInBvd2VyIiwgInNvZnRyZXNldCI7CisJCX07CisKKwkJZWhjaTE6IHVzYkBmZTIwM2UwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0LWVoY2ktMzAweCI7CisJCQlyZWcgPSA8MHhmZTIwM2UwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTUwIElSUV9UWVBFX05PTkU+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2IxPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYTFfbHMgMD4sCisJCQkJIDwmY2xvY2tnZW5fYjAgMD47CisJCQljbG9jay1uYW1lcyA9ICJpYyIsICJjbGs0OCI7CisJCQlwaHlzID0gPCZ1c2IyX3BoeT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJCXJlc2V0cyA9IDwmcG93ZXJkb3duIFNUSUg0MTZfVVNCMV9QT1dFUkRPV04+LAorCQkJCSA8JnNvZnRyZXNldCBTVElINDE2X1VTQjFfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInBvd2VyIiwgInNvZnRyZXNldCI7CisJCX07CisKKwkJb2hjaTE6IHVzYkBmZTIwM2MwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0LW9oY2ktMzAweCI7CisJCQlyZWcgPSA8MHhmZTIwM2MwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTUxIElSUV9UWVBFX05PTkU+OworCQkJY2xvY2tzID0gPCZjbGtfc19hMV9scyAwPiwKKwkJCQkgPCZjbG9ja2dlbl9iMCAwPjsKKwkJCWNsb2NrLW5hbWVzID0gImljIiwgImNsazQ4IjsKKwkJCXBoeXMgPSA8JnVzYjJfcGh5PjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQkJcmVzZXRzID0gPCZwb3dlcmRvd24gU1RJSDQxNl9VU0IxX1BPV0VSRE9XTj4sCisJCQkJIDwmc29mdHJlc2V0IFNUSUg0MTZfVVNCMV9TT0ZUUkVTRVQ+OworCQkJcmVzZXQtbmFtZXMgPSAicG93ZXIiLCAic29mdHJlc2V0IjsKKwkJfTsKKworCQllaGNpMjogdXNiQGZlMzAzZTAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3QtZWhjaS0zMDB4IjsKKwkJCXJlZyA9IDwweGZlMzAzZTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNTIgSVJRX1RZUEVfTk9ORT47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYjI+OworCQkJY2xvY2tzID0gPCZjbGtfc19hMV9scyAwPiwKKwkJCQkgPCZjbG9ja2dlbl9iMCAwPjsKKwkJCWNsb2NrLW5hbWVzID0gImljIiwgImNsazQ4IjsKKwkJCXBoeXMgPSA8JnVzYjJfcGh5PjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQkJcmVzZXRzID0gPCZwb3dlcmRvd24gU1RJSDQxNl9VU0IyX1BPV0VSRE9XTj4sCisJCQkJIDwmc29mdHJlc2V0IFNUSUg0MTZfVVNCMl9TT0ZUUkVTRVQ+OworCQkJcmVzZXQtbmFtZXMgPSAicG93ZXIiLCAic29mdHJlc2V0IjsKKwkJfTsKKworCQlvaGNpMjogdXNiQGZlMzAzYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3Qtb2hjaS0zMDB4IjsKKwkJCXJlZyA9IDwweGZlMzAzYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNTMgSVJRX1RZUEVfTk9ORT47CisJCQljbG9ja3MgPSA8JmNsa19zX2ExX2xzIDA+LAorCQkJCSA8JmNsb2NrZ2VuX2IwIDA+OworCQkJY2xvY2stbmFtZXMgPSAiaWMiLCAiY2xrNDgiOworCQkJcGh5cyA9IDwmdXNiMl9waHk+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCQlyZXNldHMgPSA8JnBvd2VyZG93biBTVElINDE2X1VTQjJfUE9XRVJET1dOPiwKKwkJCQkgPCZzb2Z0cmVzZXQgU1RJSDQxNl9VU0IyX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJwb3dlciIsICJzb2Z0cmVzZXQiOworCQl9OworCisJCWVoY2kzOiB1c2JAZmUzNDNlMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdC1laGNpLTMwMHgiOworCQkJcmVnID0gPDB4ZmUzNDNlMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE1NCBJUlFfVFlQRV9OT05FPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNiMz47CisJCQljbG9ja3MgPSA8JmNsa19zX2ExX2xzIDA+LAorCQkJCSA8JmNsb2NrZ2VuX2IwIDA+OworCQkJY2xvY2stbmFtZXMgPSAiaWMiLCAiY2xrNDgiOworCQkJcGh5cyA9IDwmdXNiMl9waHk+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCQlyZXNldHMgPSA8JnBvd2VyZG93biBTVElINDE2X1VTQjNfUE9XRVJET1dOPiwKKwkJCQkgPCZzb2Z0cmVzZXQgU1RJSDQxNl9VU0IzX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJwb3dlciIsICJzb2Z0cmVzZXQiOworCQl9OworCisJCW9oY2kzOiB1c2JAZmUzNDNjMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdC1vaGNpLTMwMHgiOworCQkJcmVnID0gPDB4ZmUzNDNjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE1NSBJUlFfVFlQRV9OT05FPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYTFfbHMgMD4sCisJCQkJIDwmY2xvY2tnZW5fYjAgMD47CisJCQljbG9jay1uYW1lcyA9ICJpYyIsICJjbGs0OCI7CisJCQlwaHlzID0gPCZ1c2IyX3BoeT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJCXJlc2V0cyA9IDwmcG93ZXJkb3duIFNUSUg0MTZfVVNCM19QT1dFUkRPV04+LAorCQkJCSA8JnNvZnRyZXNldCBTVElINDE2X1VTQjNfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInBvd2VyIiwgInNvZnRyZXNldCI7CisJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDAwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDAwLmR0c2kKaW5kZXggYjNkZDZjYS4uNWY5MWY0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAwMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMDAuZHRzaQpAQCAtMzUsNyArMzUsNyBAQAogCQkJZnBfbGVkIHsKIAkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKIAkJCQlsYWJlbAk9ICJGcm9udCBQYW5lbCBMRUQiOwotCQkJCWdwaW9zCT0gPCZQSU8xMDUgNz47CisJCQkJZ3Bpb3MJPSA8JnBpbzEwNSA3PjsKIAkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIJPSAiaGVhcnRiZWF0IjsKIAkJCX07CiAJCX07CkBAIC01NSw3ICs1NSw3IEBACiAJCQlwaHktbW9kZQkJPSAibWlpIjsKIAkJCXBpbmN0cmwtMAkJPSA8JnBpbmN0cmxfbWlpMD47CiAKLQkJCXNucHMscmVzZXQtZ3BpbyAJPSA8JlBJTzEwNiAyPjsKKwkJCXNucHMscmVzZXQtZ3BpbyAJPSA8JnBpbzEwNiAyPjsKIAkJCXNucHMscmVzZXQtYWN0aXZlLWxvdzsKIAkJCXNucHMscmVzZXQtZGVsYXlzLXVzIAk9IDwwIDEwMDAwIDEwMDAwPjsKIAkJfTsKQEAgLTY1LDcgKzY1LDcgQEAKIAkJCXBoeS1tb2RlCQk9ICJtaWkiOwogCQkJc3QsdHgtcmV0aW1lLXNyYwk9ICJ0eGNsayI7CiAKLQkJCXNucHMscmVzZXQtZ3BpbyAJPSA8JlBJTzQgNz47CisJCQlzbnBzLHJlc2V0LWdwaW8gCT0gPCZwaW80IDc+OwogCQkJc25wcyxyZXNldC1hY3RpdmUtbG93OwogCQkJc25wcyxyZXNldC1kZWxheXMtdXMgCT0gPDAgMTAwMDAgMTAwMDA+OwogCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAyMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAyMC5kdHNpCmluZGV4IGQ4YTg0MjkuLjQ4N2Q3ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMjAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDIwLmR0c2kKQEAgLTMyLDExICszMiwxMSBAQAogCQkJcmVkIHsKIAkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKIAkJCQlsYWJlbAk9ICJGcm9udCBQYW5lbCBMRUQiOwotCQkJCWdwaW9zCT0gPCZQSU80IDE+OworCQkJCWdwaW9zCT0gPCZwaW80IDE+OwogCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlcgk9ICJoZWFydGJlYXQiOwogCQkJfTsKIAkJCWdyZWVuIHsKLQkJCQlncGlvcwk9IDwmUElPNCA3PjsKKwkJCQlncGlvcwk9IDwmcGlvNCA3PjsKIAkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CiAJCQl9OwogCQl9OwpAQCAtNjgsMTEgKzY4LDE1IEBACiAJCQlwaHktbW9kZQkJPSAicmdtaWktaWQiOwogCQkJbWF4LXNwZWVkCQk9IDwxMDAwPjsKIAkJCXN0LHR4LXJldGltZS1zcmMJPSAiY2xrXzEyNSI7Ci0JCQlzbnBzLHJlc2V0LWdwaW8gCT0gPCZQSU8zIDA+OworCQkJc25wcyxyZXNldC1ncGlvIAk9IDwmcGlvMyAwPjsKIAkJCXNucHMscmVzZXQtYWN0aXZlLWxvdzsKIAkJCXNucHMscmVzZXQtZGVsYXlzLXVzIAk9IDwwIDEwMDAwIDEwMDAwPjsKIAogCQkJcGluY3RybC0wCT0gPCZwaW5jdHJsX3JnbWlpMT47CiAJCX07CisKKwkJbW1jMDogc2RoY2lAZmU4MWUwMDAgeworCQkJYnVzLXdpZHRoID0gPDg+OworCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAyMHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMjB4LmR0c2kKaW5kZXggZGYwMWMxMi4uZjc5N2EwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAyMHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDIweC5kdHNpCkBAIC04LDYgKzgsMTAgQEAKICAqLwogLyB7CiAJc29jIHsKKwkJbW1jMDogc2RoY2lAZmU4MWUwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCiAJCXNwaWZzbTogc3BpZnNtQGZlOTAyMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgICAgPSA8MT47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloeHh4LWIyMTIwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloeHh4LWIyMTIwLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3NGJkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWh4eHgtYjIxMjAuZHRzaQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNUTWljcm9lbGVjdHJvbmljcyAoUiZEKSBMaW1pdGVkLgorICogQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworLyB7CisJc29jIHsKKwkJc2JjX3NlcmlhbDA6IHNlcmlhbEA5NTMwMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlsZWRzIHsKKwkJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJCXJlZCB7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJbGFiZWwgPSAiRnJvbnQgUGFuZWwgTEVEIjsKKwkJCQlncGlvcyA9IDwmcGlvNCAxIDA+OworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOworCQkJfTsKKwkJCWdyZWVuIHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlncGlvcyA9IDwmcGlvMSAzIDA+OworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCX07CisKKwkJaTJjQDk4NDIwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyY0A5ODQzMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlpMmNAOTg0NDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJaTJjQDk4NDUwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyY0A5NTQwMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQkvKiBTU0MxMSB0byBIRE1JICovCisJCWkyY0A5NTQxMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCS8qIEhETUkgVjEuM2Egc3VwcG9ydHMgU3RhbmRhcmQgbW9kZSBvbmx5ICovCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwkJCXN0LGkyYy1taW4tc2NsLXB1bHNlLXdpZHRoLXVzID0gPDA+OworCQkJc3QsaTJjLW1pbi1zZGEtcHVsc2Utd2lkdGgtdXMgPSA8NT47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtYTEwMDAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWExMDAwLmR0cwppbmRleCA5ZTk5YWRlLi4zYmNmZDgxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWExMDAwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtYTEwMDAuZHRzCkBAIC0zLDEyICszLDQ4IEBACiAgKgogICogRW1pbGlvIEzDs3BleiA8ZW1pbGlvQGVsb3Blei5jb20uYXI+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtYmExMC10dmJveC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtYmExMC10dmJveC5kdHMKaW5kZXggMTc2M2NjNy4uZjNmMjk3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWJhMTAtdHZib3guZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1iYTEwLXR2Ym94LmR0cwpAQCAtMSwxMiArMSw0OCBAQAogLyoKICAqIENvcHlyaWdodCAyMDE0IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtY3ViaWVib2FyZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtY3ViaWVib2FyZC5kdHMKaW5kZXggM2NlNTZiZmIuLjZhMzEwZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1jdWJpZWJvYXJkLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtY3ViaWVib2FyZC5kdHMKQEAgLTIsMTIgKzIsNDggQEAKICAqIENvcHlyaWdodCAyMDEyIFN0ZWZhbiBSb2VzZQogICogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWhhY2tiZXJyeS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaGFja2JlcnJ5LmR0cwppbmRleCA4OTFlYTQ0Li5lZmMxMTYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaGFja2JlcnJ5LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaGFja2JlcnJ5LmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWluZXQ5N2Z2Mi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaW5ldDk3ZnYyLmR0cwppbmRleCA2YjBjMzc4Li4zZTI1ZWU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaW5ldDk3ZnYyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaW5ldDk3ZnYyLmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIERhdmlkIExhbnplbmT2cmZlciA8ZGF2aWQubGFuemVuZG9lcmZlckBvMnMuY2g+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtbWluaS14cGx1cy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtbWluaS14cGx1cy5kdHMKaW5kZXggYjllY2NlNi4uOGIzZjk3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLW1pbmkteHBsdXMuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1taW5pLXhwbHVzLmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLW9saW51eGluby1saW1lLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1vbGludXhpbm8tbGltZS5kdHMKaW5kZXggZDA0NmQ1Ni4uODhjZjFhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLW9saW51eGluby1saW1lLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtb2xpbnV4aW5vLWxpbWUuZHRzCkBAIC0xLDEyICsxLDQ4IEBACiAvKgogICogQ29weXJpZ2h0IDIwMTQgLSBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLXBjZHVpbm8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLXBjZHVpbm8uZHRzCmluZGV4IDY2NzViY2QuLmNlNTk5NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1wY2R1aW5vLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtcGNkdWluby5kdHMKQEAgLTIsMTIgKzIsNDggQEAKICAqIENvcHlyaWdodCAyMDE0IFpvbHRhbiBIRVJQQUkKICAqIFpvbHRhbiBIRVJQQUkgPHdpZ3lvcmlAdWlkMC5odT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLmR0c2kKaW5kZXggMzgwZjkxNC4uZTNhYjk0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLmR0c2kKQEAgLTI3LDYgKzI3LDIwIEBACiAJCXNlcmlhbDcgPSAmdWFydDc7CiAJfTsKIAorCWNob3NlbiB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCisJCWZyYW1lYnVmZmVyQDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc2ltcGxlLWZyYW1lYnVmZmVyIiwgInNpbXBsZS1mcmFtZWJ1ZmZlciI7CisJCQlhbGx3aW5uZXIscGlwZWxpbmUgPSAiZGVfYmUwLWxjZDAtaGRtaSI7CisJCQljbG9ja3MgPSA8JnBsbDUgMT4sIDwmYWhiX2dhdGVzIDM2PiwgPCZhaGJfZ2F0ZXMgNDM+LAorCQkJCSA8JmFoYl9nYXRlcyA0ND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCX07CisKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1vbGludXhpbm8tbWljcm8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1vbGludXhpbm8tbWljcm8uZHRzCmluZGV4IGVhOTUxOWQuLmZlM2M1NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLW9saW51eGluby1taWNyby5kdHMKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtcjctdHYtZG9uZ2xlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtcjctdHYtZG9uZ2xlLmR0cwppbmRleCA0M2E5Mzc2Li4xZmEyOTE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLXI3LXR2LWRvbmdsZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1yNy10di1kb25nbGUuZHRzCkBAIC0xLDEyICsxLDQ4IEBACiAvKgogICogQ29weXJpZ2h0IDIwMTQgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMuZHRzaQppbmRleCA1MzEyNzJjLi44MWFkNGI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy5kdHNpCkBAIC0yNCw2ICsyNCwyMCBAQAogCQlzZXJpYWwzID0gJnVhcnQzOwogCX07CiAKKwljaG9zZW4geworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKworCQlmcmFtZWJ1ZmZlckAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHNpbXBsZS1mcmFtZWJ1ZmZlciIsICJzaW1wbGUtZnJhbWVidWZmZXIiOworCQkJYWxsd2lubmVyLHBpcGVsaW5lID0gImRlX2JlMC1sY2QwLWhkbWkiOworCQkJY2xvY2tzID0gPCZwbGw1IDE+LCA8JmFoYl9nYXRlcyAzNj4sIDwmYWhiX2dhdGVzIDQzPiwKKwkJCQkgPCZhaGJfZ2F0ZXMgNDQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwl9OworCiAJY3B1cyB7CiAJCWNwdUAwIHsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtaHNnLWg3MDIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLWhzZy1oNzAyLmR0cwppbmRleCA4YjNjZDA5MC4uZWVlZDFmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLWhzZy1oNzAyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtaHNnLWg3MDIuZHRzCkBAIC02LDE4ICs2LDE4IEBACiAgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQogICogd2hvbGUuCiAgKgotICogIGEpIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKICAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQogICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAogICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLW1pY3JvLmR0cwppbmRleCBmYTQ0YjAyLi45MTZlZThiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLW1pY3JvLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLW1pY3JvLmR0cwpAQCAtMSwxNSArMSw0OSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDEyIE1heGltZSBSaXBhcmQKKyAqIENvcHlyaWdodCAyMDEyIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgogICogQ29weXJpZ2h0IDIwMTMgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KICAqCi0gKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLmR0cwppbmRleCA0Mjk5OTRlLi5lMzFkMjkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWFwcDQtZXZiMS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtYXBwNC1ldmIxLmR0cwppbmRleCAyYmJmODg2Li5jNzRhNjNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtYXBwNC1ldmIxLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtYXBwNC1ldmIxLmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGZyZWUtZWxlY3Ryb25zLmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1jb2xvbWJ1cy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtY29sb21idXMuZHRzCmluZGV4IDU0NmNmNmUuLmMzNmI0ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1jb2xvbWJ1cy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWNvbG9tYnVzLmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWh1bW1pbmdiaXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1odW1taW5nYmlyZC5kdHMKaW5kZXggZjE0MjA2NS4uNmU5MjRkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWh1bW1pbmdiaXJkLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtaHVtbWluZ2JpcmQuZHRzCkBAIC0zLDEyICszLDQ4IEBACiAgKgogICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtbTkuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLW05LmR0cwppbmRleCBiYzYxMTVkLi4zYWI1NDRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtbTkuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1tOS5kdHMKQEAgLTEsMTIgKzEsNDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAxNCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpAQCAtMzIsMTMgKzY4LDQwIEBACiAJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAKKwkJdXNicGh5OiBwaHlAMDFjMTk0MDAgeworCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJZWhjaTA6IHVzYkAwMWMxYTAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJZWhjaTE6IHVzYkAwMWMxYjAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKIAkJcGlvOiBwaW5jdHJsQDAxYzIwODAwIHsKKwkJCWxlZF9waW5zX205OiBsZWRfcGluc0AwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDEzIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKIAkJCW1tYzBfY2RfcGluX205OiBtbWMwX2NkX3BpbkAwIHsKIAkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDIyIjsKIAkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19pbiI7CiAJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OwogCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OwogCQkJfTsKKworCQkJdXNiMV92YnVzX3Bpbl9tOTogdXNiMV92YnVzX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQQzI3IjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CiAJCX07CiAKIAkJdWFydDA6IHNlcmlhbEAwMWMyODAwMCB7CkBAIC00Niw1ICsxMDksMzUgQEAKIAkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKIAkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKKworCQlnbWFjOiBldGhlcm5ldEAwMWMzMDAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZnbWFjX3BpbnNfbWlpX2E+OworCQkJcGh5ID0gPCZwaHkxPjsKKwkJCXBoeS1tb2RlID0gIm1paSI7CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQl9OworCQl9OworCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmxlZF9waW5zX205PjsKKworCQlibHVlIHsKKwkJCWxhYmVsID0gIm05OmJsdWU6dXNyIjsKKwkJCWdwaW9zID0gPCZwaW8gNyAxMyAwPjsKKwkJfTsKKwl9OworCisJcmVnX3VzYjFfdmJ1czogdXNiMS12YnVzIHsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ1c2IxX3ZidXNfcGluX205PjsKKwkJZ3BpbyA9IDwmcGlvIDIgMjcgMD47CisJCXN0YXR1cyA9ICJva2F5IjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLmR0c2kKaW5kZXggMmU2NTJlMi4uYTQwMDE3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLmR0c2kKQEAgLTgsMTggKzgsMTggQEAKICAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCiAgKiB3aG9sZS4KICAqCi0gKiAgYSkgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQogICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCiAgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCiAgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKICAqCkBAIC02Miw2ICs2MiwxOCBAQAogCQlldGhlcm5ldDAgPSAmZ21hYzsKIAl9OwogCisJY2hvc2VuIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJZnJhbWVidWZmZXJAMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzaW1wbGUtZnJhbWVidWZmZXIiLCAic2ltcGxlLWZyYW1lYnVmZmVyIjsKKwkJCWFsbHdpbm5lcixwaXBlbGluZSA9ICJkZV9iZTAtbGNkMC1oZG1pIjsKKwkJCWNsb2NrcyA9IDwmcGxsNiAwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKIAogCWNwdXMgewogCQllbmFibGUtbWV0aG9kID0gImFsbHdpbm5lcixzdW42aS1hMzEiOwpAQCAtMTMyLDExICsxNDQsMTEgQEAKIAkJfTsKIAogCQlwbGw2OiBjbGtAMDFjMjAwMjggewotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLXBsbDYtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMDI4IDB4ND47CiAJCQljbG9ja3MgPSA8Jm9zYzI0TT47Ci0JCQljbG9jay1vdXRwdXQtbmFtZXMgPSAicGxsNiI7CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAicGxsNiIsICJwbGw2eDIiOwogCQl9OwogCiAJCWNwdTogY3B1QDAxYzIwMDUwIHsKQEAgLTE2Niw3ICsxNzgsNyBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWFoYjEtbXV4LWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDA1NCAweDQ+OwotCQkJY2xvY2tzID0gPCZvc2MzMms+LCA8Jm9zYzI0TT4sIDwmYXhpPiwgPCZwbGw2PjsKKwkJCWNsb2NrcyA9IDwmb3NjMzJrPiwgPCZvc2MyNE0+LCA8JmF4aT4sIDwmcGxsNiAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhaGIxX211eCI7CiAJCX07CiAKQEAgLTIyMSw3ICsyMzMsNyBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLWFwYjEtbXV4LWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDA1OCAweDQ+OwotCQkJY2xvY2tzID0gPCZvc2MzMms+LCA8Jm9zYzI0TT4sIDwmcGxsNj4sIDwmcGxsNj47CisJCQljbG9ja3MgPSA8Jm9zYzMyaz4sIDwmb3NjMjRNPiwgPCZwbGw2IDA+LCA8JnBsbDYgMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYXBiMl9tdXgiOwogCQl9OwogCkBAIC0yNDgsNyArMjYwLDcgQEAKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tb2QwLWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDA4OCAweDQ+OwotCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDY+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDYgMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAibW1jMCI7CiAJCX07CiAKQEAgLTI1Niw3ICsyNjgsNyBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLW1vZDAtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMDhjIDB4ND47Ci0JCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNj47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNiAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJtbWMxIjsKIAkJfTsKIApAQCAtMjY0LDcgKzI3Niw3IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW9kMC1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwOTAgMHg0PjsKLQkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2IDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIm1tYzIiOwogCQl9OwogCkBAIC0yNzIsNyArMjg0LDcgQEAKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tb2QwLWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDA5NCAweDQ+OwotCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDY+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDYgMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAibW1jMyI7CiAJCX07CiAKQEAgLTI4MCw3ICsyOTIsNyBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLW1vZDAtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMGEwIDB4ND47Ci0JCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNj47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNiAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJzcGkwIjsKIAkJfTsKIApAQCAtMjg4LDcgKzMwMCw3IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW9kMC1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwYTQgMHg0PjsKLQkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2IDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInNwaTEiOwogCQl9OwogCkBAIC0yOTYsNyArMzA4LDcgQEAKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tb2QwLWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDBhOCAweDQ+OwotCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDY+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDYgMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic3BpMiI7CiAJCX07CiAKQEAgLTMwNCw3ICszMTYsNyBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLW1vZDAtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMGFjIDB4ND47Ci0JCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNj47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNiAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJzcGkzIjsKIAkJfTsKIApAQCAtMzY0LDcgKzM3Niw3IEBACiAKIAkJCS8qIERNQSBjb250cm9sbGVyIHJlcXVpcmVzIEFIQjEgY2xvY2tlZCBmcm9tIFBMTDYgKi8KIAkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmYWhiMV9tdXg+OwotCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmcGxsNj47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZwbGw2IDA+OwogCQl9OwogCiAJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CkBAIC04NDQsNyArODU2LDcgQEAKIAkJCWFyMTAwOiBhcjEwMF9jbGsgewogCQkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1hcjEwMC1jbGsiOwogCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCQljbG9ja3MgPSA8Jm9zYzMyaz4sIDwmb3NjMjRNPiwgPCZwbGw2PiwgPCZwbGw2PjsKKwkJCQljbG9ja3MgPSA8Jm9zYzMyaz4sIDwmb3NjMjRNPiwgPCZwbGw2IDA+LCA8JnBsbDYgMD47CiAJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFyMTAwIjsKIAkJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1iYW5hbmFwaS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtYmFuYW5hcGkuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZjEyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtYmFuYW5hcGkuZHRzCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KKyAqCisgKiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KKyAqCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy9kdHMtdjEvOworL2luY2x1ZGUvICJzdW43aS1hMjAuZHRzaSIKKy9pbmNsdWRlLyAic3VueGktY29tbW9uLXJlZ3VsYXRvcnMuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTGVNYWtlciBCYW5hbmEgUGkiOworCWNvbXBhdGlibGUgPSAibGVtYWtlcixiYW5hbmFwaSIsICJhbGx3aW5uZXIsc3VuN2ktYTIwIjsKKworCXNvY0AwMWMwMDAwMCB7CisJCXNwaTA6IHNwaUAwMWMwNTAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZzcGkwX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJbW1jMDogbW1jQDAxYzBmMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzBfcGluc19hPiwgPCZtbWMwX2NkX3Bpbl9iYW5hbmFwaT47CisJCQl2bW1jLXN1cHBseSA9IDwmcmVnX3ZjYzN2Mz47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljZC1ncGlvcyA9IDwmcGlvIDcgMTAgMD47IC8qIFBIMTAgKi8KKwkJCWNkLWludmVydGVkOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXVzYnBoeTogcGh5QDAxYzEzNDAwIHsKKwkJCXVzYjFfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IxX3ZidXM+OworCQkJdXNiMl92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjJfdmJ1cz47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJZWhjaTA6IHVzYkAwMWMxNDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJb2hjaTA6IHVzYkAwMWMxNDQwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJYWhjaTogc2F0YUAwMWMxODAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJZWhjaTE6IHVzYkAwMWMxYzAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJb2hjaTE6IHVzYkAwMWMxYzQwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJcGluY3RybEAwMWMyMDgwMCB7CisJCQltbWMwX2NkX3Bpbl9iYW5hbmFwaTogbW1jMF9jZF9waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgxMCI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9faW4iOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwxPjsKKwkJCX07CisKKwkJCWdtYWNfcG93ZXJfcGluX2JhbmFuYXBpOiBnbWFjX3Bvd2VyX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDIzIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKKwkJCWxlZF9waW5zX2JhbmFuYXBpOiBsZWRfcGluc0AwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDI0IjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJaXIwOiBpckAwMWMyMTgwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpcjBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1YXJ0MDogc2VyaWFsQDAxYzI4MDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnVhcnQwX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdWFydDM6IHNlcmlhbEAwMWMyOGMwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZ1YXJ0M19waW5zX2I+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXVhcnQ3OiBzZXJpYWxAMDFjMjljMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmdWFydDdfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlpMmMwOiBpMmNAMDFjMmFjMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjMF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQlheHAyMDk6IHBtaWNAMzQgeworCQkJCWNvbXBhdGlibGUgPSAieC1wb3dlcnMsYXhwMjA5IjsKKwkJCQlyZWcgPSA8MHgzND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbm1pX2ludGM+OworCQkJCWludGVycnVwdHMgPSA8MCA4PjsKKworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQl9OworCQl9OworCisJCWkyYzI6IGkyY0AwMWMyYjQwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmMyX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJZ21hYzogZXRoZXJuZXRAMDFjNTAwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmZ21hY19waW5zX3JnbWlpX2E+OworCQkJcGh5ID0gPCZwaHkxPjsKKwkJCXBoeS1tb2RlID0gInJnbWlpIjsKKwkJCXBoeS1zdXBwbHkgPSA8JnJlZ19nbWFjXzN2Mz47CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQl9OworCQl9OworCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmxlZF9waW5zX2JhbmFuYXBpPjsKKworCQlncmVlbiB7CisJCQlsYWJlbCA9ICJiYW5hbmFwaTpncmVlbjp1c3IiOworCQkJZ3Bpb3MgPSA8JnBpbyA3IDI0IDA+OworCQl9OworCX07CisKKwlyZWdfdXNiMV92YnVzOiB1c2IxLXZidXMgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXJlZ191c2IyX3ZidXM6IHVzYjItdmJ1cyB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJcmVnX2dtYWNfM3YzOiBnbWFjLTN2MyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZnbWFjX3Bvd2VyX3Bpbl9iYW5hbmFwaT47CisJCXJlZ3VsYXRvci1uYW1lID0gImdtYWMtM3YzIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlzdGFydHVwLWRlbGF5LXVzID0gPDEwMDAwMD47CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJZ3BpbyA9IDwmcGlvIDcgMjMgMD47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtY3ViaWV0cnVjay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtY3ViaWV0cnVjay5kdHMKaW5kZXggYTZjMWEzYy4uYTI4MWQyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWN1YmlldHJ1Y2suZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1jdWJpZXRydWNrLmR0cwpAQCAtNDAsNiArNDAsNyBAQAogCQl9OwogCiAJCXVzYnBoeTogcGh5QDAxYzEzNDAwIHsKKwkJCXVzYjBfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IwX3ZidXM+OwogCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CiAJCQl1c2IyX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKIAkJCXN0YXR1cyA9ICJva2F5IjsKQEAgLTkyLDYgKzkzLDEzIEBACiAJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OwogCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OwogCQkJfTsKKworCQkJdXNiMF92YnVzX3Bpbl9hOiB1c2IwX3ZidXNfcGluQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMTciOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKIAkJfTsKIAogCQlwd206IHB3bUAwMWMyMGUwMCB7CkBAIC0xODUsNiArMTkzLDEyIEBACiAJCXN0YXR1cyA9ICJva2F5IjsKIAl9OwogCisJcmVnX3VzYjBfdmJ1czogdXNiMC12YnVzIHsKKwkJcGluY3RybC0wID0gPCZ1c2IwX3ZidXNfcGluX2E+OworCQlncGlvID0gPCZwaW8gNyAxNyAwPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKIAlyZWdfdXNiMV92YnVzOiB1c2IxLXZidXMgewogCQlzdGF0dXMgPSAib2theSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1pMTItdHZib3guZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWkxMi10dmJveC5kdHMKaW5kZXggNmE2NzcxMi4uZjM4YmIxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWkxMi10dmJveC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWkxMi10dmJveC5kdHMKQEAgLTEsMTIgKzEsNDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAxNCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW0zLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1tMy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhlNTY4YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1tMy5kdHMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorICoKKyAqIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2R0cy12MS87CisvaW5jbHVkZS8gInN1bjdpLWEyMC5kdHNpIgorL2luY2x1ZGUvICJzdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJNZWxlIE0zIjsKKwljb21wYXRpYmxlID0gIm1lbGUsbTMiLCAiYWxsd2lubmVyLHN1bjdpLWEyMCI7CisKKwlzb2NAMDFjMDAwMDAgeworCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2E+LCA8Jm1tYzBfY2RfcGluX3JlZmVyZW5jZV9kZXNpZ24+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJY2QtZ3Bpb3MgPSA8JnBpbyA3IDEgMD47IC8qIFBIMSAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJbW1jMjogbW1jQDAxYzExMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzJfcGluc19hPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCW5vbi1yZW1vdmFibGU7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdXNicGh5OiBwaHlAMDFjMTM0MDAgeworCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CisJCQl1c2IyX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMDogdXNiQDAxYzE0MDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMDogdXNiQDAxYzE0NDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMTogdXNiQDAxYzFjMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMTogdXNiQDAxYzFjNDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlwaW5jdHJsQDAxYzIwODAwIHsKKwkJCWxlZF9waW5zX20zOiBsZWRfcGluc0AwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDIwIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJaXIwOiBpckAwMWMyMTgwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpcjBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1YXJ0MDogc2VyaWFsQDAxYzI4MDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnVhcnQwX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJaTJjMDogaTJjQDAxYzJhYzAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJYXhwMjA5OiBwbWljQDM0IHsKKwkJCQljb21wYXRpYmxlID0gIngtcG93ZXJzLGF4cDIwOSI7CisJCQkJcmVnID0gPDB4MzQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm5taV9pbnRjPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgOD47CisKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJfTsKKwkJfTsKKworCQlnbWFjOiBldGhlcm5ldEAwMWM1MDAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZnbWFjX3BpbnNfbWlpX2E+OworCQkJcGh5ID0gPCZwaHkxPjsKKwkJCXBoeS1tb2RlID0gIm1paSI7CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQl9OworCQl9OworCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmxlZF9waW5zX20zPjsKKworCQlibHVlIHsKKwkJCWxhYmVsID0gIm0zOmJsdWU6dXNyIjsKKwkJCWdwaW9zID0gPCZwaW8gNyAyMCAwPjsKKwkJfTsKKwl9OworCisJcmVnX3VzYjFfdmJ1czogdXNiMS12YnVzIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlyZWdfdXNiMl92YnVzOiB1c2IyLXZidXMgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1saW1lLmR0cwppbmRleCAxZWI4MTc1Li4zZjNmZjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1vbGludXhpbm8tbGltZS5kdHMKQEAgLTQsMTIgKzQsNDggQEAKICAqIENvcHlyaWdodCAyMDE0IC0gSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KICAqIENvcHlyaWdodCAoYykgMjAxNCBGVUtBVU1JIE5hb2tpIDxuYW9ic2RAZ21haWwuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1saW1lMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUyLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDM2NGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1saW1lMi5kdHMKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCAtIElhaW4gUGF0b24gPGlwYXRvbjBAZ21haWwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KKyAqCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy9kdHMtdjEvOworL2luY2x1ZGUvICJzdW43aS1hMjAuZHRzaSIKKy9pbmNsdWRlLyAic3VueGktY29tbW9uLXJlZ3VsYXRvcnMuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiT2xpbWV4IEEyMC1PTGludVhpbm8tTElNRTIiOworCWNvbXBhdGlibGUgPSAib2xpbWV4LGEyMC1vbGludXhpbm8tbGltZTIiLCAiYWxsd2lubmVyLHN1bjdpLWEyMCI7CisKKwlzb2NAMDFjMDAwMDAgeworCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2E+LCA8Jm1tYzBfY2RfcGluX3JlZmVyZW5jZV9kZXNpZ24+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJY2QtZ3Bpb3MgPSA8JnBpbyA3IDEgMD47IC8qIFBIMSAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdXNicGh5OiBwaHlAMDFjMTM0MDAgeworCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CisJCQl1c2IyX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMDogdXNiQDAxYzE0MDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMDogdXNiQDAxYzE0NDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlhaGNpOiBzYXRhQDAxYzE4MDAwIHsKKwkJCXRhcmdldC1zdXBwbHkgPSA8JnJlZ19haGNpXzV2PjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMTogdXNiQDAxYzFjMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMTogdXNiQDAxYzFjNDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlwaW5jdHJsQDAxYzIwODAwIHsKKwkJCWFoY2lfcHdyX3Bpbl9vbGludXhpbm9saW1lOiBhaGNpX3B3cl9waW5AMSB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEMzIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKKwkJCWxlZF9waW5zX29saW51eGlub2xpbWU6IGxlZF9waW5zQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMiI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MT47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCQl9OworCisJCXVhcnQwOiBzZXJpYWxAMDFjMjgwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlpMmMwOiBpMmNAMDFjMmFjMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjMF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQlheHAyMDk6IHBtaWNAMzQgeworCQkJCWNvbXBhdGlibGUgPSAieC1wb3dlcnMsYXhwMjA5IjsKKwkJCQlyZWcgPSA8MHgzND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbm1pX2ludGM+OworCQkJCWludGVycnVwdHMgPSA8MCA4PjsKKworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisKKwkJCQlhY2luLXN1cHBseSA9IDwmcmVnX2F4cF9pcHNvdXQ+OworCQkJCXZpbjItc3VwcGx5ID0gPCZyZWdfYXhwX2lwc291dD47CisJCQkJdmluMy1zdXBwbHkgPSA8JnJlZ19heHBfaXBzb3V0PjsKKwkJCQlsZG8yNGluLXN1cHBseSA9IDwmcmVnX2F4cF9pcHNvdXQ+OworCQkJCWxkbzNpbi1zdXBwbHkgPSA8JnJlZ19heHBfaXBzb3V0PjsKKworCQkJCXJlZ3VsYXRvcnMgeworCQkJCQl2ZGRfcnRjOiBsZG8xIHsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEzMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQl9OworCisJCQkJCWF2Y2M6IGxkbzIgeworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCX07CisKKwkJCQkJdmNjX2NzaTA6IGxkbzMgeworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NzAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDM1MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJfTsKKworCQkJCQl2Y2NfY3NpMTogbGRvNCB7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjUwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJfTsKKworCQkJCQl2ZGRfY3B1OiBkY2RjMiB7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjI3NTAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQl9OworCisJCQkJCXZkZF9pbnQ6IGRjZGMzIHsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDcwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzNTAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJaTJjMTogaTJjQDAxYzJiMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzFfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlnbWFjOiBldGhlcm5ldEAwMWM1MDAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZnbWFjX3BpbnNfcmdtaWlfYT47CisJCQlwaHkgPSA8JnBoeTE+OworCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJcmVnID0gPDE+OworCQkJfTsKKwkJfTsKKwl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZsZWRfcGluc19vbGludXhpbm9saW1lPjsKKworCQlncmVlbiB7CisJCQlsYWJlbCA9ICJhMjAtb2xpbnV4aW5vLWxpbWUyOmdyZWVuOnVzciI7CisJCQlncGlvcyA9IDwmcGlvIDcgMiAwPjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAib24iOworCQl9OworCX07CisKKwlyZWdfYWhjaV81djogYWhjaS01diB7CisJCXBpbmN0cmwtMCA9IDwmYWhjaV9wd3JfcGluX29saW51eGlub2xpbWU+OworCQlncGlvID0gPCZwaW8gMiAzIDA+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXJlZ191c2IxX3ZidXM6IHVzYjEtdmJ1cyB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJcmVnX3VzYjJfdmJ1czogdXNiMi12YnVzIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlyZWdfYXhwX2lwc291dDogYXhwX2lwc291dCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiYXhwLWlwc291dCI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1wY2R1aW5vMy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtcGNkdWlubzMuZHRzCmluZGV4IDA0NmRmYzAuLjhkY2E0OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1wY2R1aW5vMy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLXBjZHVpbm8zLmR0cwpAQCAtMiwxMiArMiw0OCBAQAogICogQ29weXJpZ2h0IDIwMTQgWm9sdGFuIEhFUlBBSQogICogWm9sdGFuIEhFUlBBSSA8d2lneW9yaUB1aWQwLmh1PgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAuZHRzaQppbmRleCA4MjA5N2M5Li44MmE1MjRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAuZHRzaQpAQCAtOCwxOCArOCwxOCBAQAogICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKICAqIHdob2xlLgogICoKLSAqICBhKSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCiAgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKICAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKICAqICAgICBNQSAwMjExMC0xMzAxIFVTQQogICoKQEAgLTY0LDYgKzY0LDIwIEBACiAJCXNlcmlhbDcgPSAmdWFydDc7CiAJfTsKIAorCWNob3NlbiB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCisJCWZyYW1lYnVmZmVyQDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc2ltcGxlLWZyYW1lYnVmZmVyIiwgInNpbXBsZS1mcmFtZWJ1ZmZlciI7CisJCQlhbGx3aW5uZXIscGlwZWxpbmUgPSAiZGVfYmUwLWxjZDAtaGRtaSI7CisJCQljbG9ja3MgPSA8JnBsbDUgMT4sIDwmYWhiX2dhdGVzIDM2PiwgPCZhaGJfZ2F0ZXMgNDM+LAorCQkJCSA8JmFoYl9nYXRlcyA0ND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCX07CisKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwpAQCAtNTUyLDggKzU2Niw4IEBACiAJCQlyZWctbmFtZXMgPSAicGh5X2N0cmwiLCAicG11MSIsICJwbXUyIjsKIAkJCWNsb2NrcyA9IDwmdXNiX2NsayA4PjsKIAkJCWNsb2NrLW5hbWVzID0gInVzYl9waHkiOwotCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDE+LCA8JnVzYl9jbGsgMj47Ci0JCQlyZXNldC1uYW1lcyA9ICJ1c2IxX3Jlc2V0IiwgInVzYjJfcmVzZXQiOworCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDA+LCA8JnVzYl9jbGsgMT4sIDwmdXNiX2NsayAyPjsKKwkJCXJlc2V0LW5hbWVzID0gInVzYjBfcmVzZXQiLCAidXNiMV9yZXNldCIsICJ1c2IyX3Jlc2V0IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKQEAgLTY3Nyw2ICs2OTEsMTMgQEAKIAkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKIAkJCX07CiAKKwkJCXVhcnQzX3BpbnNfYjogdWFydDNAMSB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgwIiwgIlBIMSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gInVhcnQzIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCiAJCQl1YXJ0NF9waW5zX2E6IHVhcnQ0QDAgewogCQkJCWFsbHdpbm5lcixwaW5zID0gIlBHMTAiLCAiUEcxMSI7CiAJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gInVhcnQ0IjsKQEAgLTc4NCw2ICs4MDUsMTMgQEAKIAkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKIAkJCX07CiAKKwkJCXNwaTBfcGluc19hOiBzcGkwQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBJMTAiLCAiUEkxMSIsICJQSTEyIiwgIlBJMTMiLCAiUEkxNCI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gInNwaTAiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKIAkJCXNwaTFfcGluc19hOiBzcGkxQDAgewogCQkJCWFsbHdpbm5lcixwaW5zID0gIlBJMTYiLCAiUEkxNyIsICJQSTE4IiwgIlBJMTkiOwogCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJzcGkxIjsKQEAgLTgxOSw2ICs4NDcsMTMgQEAKIAkJCQlhbGx3aW5uZXIscHVsbCA9IDwxPjsKIAkJCX07CiAKKwkJCW1tYzJfcGluc19hOiBtbWMyQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBDNiIsIlBDNyIsIlBDOCIsIlBDOSIsIlBDMTAiLCJQQzExIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAibW1jMiI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDI+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OworCQkJfTsKKwogCQkJbW1jM19waW5zX2E6IG1tYzNAMCB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEk0IiwiUEk1IiwiUEk2IiwiUEk3IiwiUEk4IiwiUEk5IjsKIAkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAibW1jMyI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMtaXBwby1xOGgtdjUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLWlwcG8tcThoLXY1LmR0cwppbmRleCBlOWI4Y2NhLi43ZjIxMTdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMtaXBwby1xOGgtdjUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy1pcHBvLXE4aC12NS5kdHMKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBDaGVuLVl1IFRzYWkgPHdlbnNAY3NpZS5vcmc+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCmluZGV4IDYxNDZlZjEuLjYwODZhZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCkBAIC04LDE4ICs4LDE4IEBACiAgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQogICogd2hvbGUuCiAgKgotICogIGEpIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKICAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQogICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAogICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOWktYTgwLW9wdGltdXMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOWktYTgwLW9wdGltdXMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjk0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAtb3B0aW11cy5kdHMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBDaGVuLVl1IFRzYWkKKyAqCisgKiBDaGVuLVl1IFRzYWkgPHdlbnNAY3NpZS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2R0cy12MS87CisvaW5jbHVkZS8gInN1bjlpLWE4MC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJNZXJyaWkgQTgwIE9wdGltdXMgQm9hcmQiOworCWNvbXBhdGlibGUgPSAibWVycmlpLGE4MC1vcHRpbXVzIiwgImFsbHdpbm5lcixzdW45aS1hODAiOworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiZWFybHlwcmludGsgY29uc29sZT10dHlTMCwxMTUyMDAiOworCX07CisKKwlzb2MgeworCQlwaW86IHBpbmN0cmxAMDYwMDA4MDAgeworCQkJaTJjM19waW5zX2E6IGkyYzNAMCB7CisJCQkJLyogRW5hYmxlIGludGVybmFsIHB1bGwtdXAgKi8KKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwxPjsKKwkJCX07CisKKwkJCWxlZF9waW5zX29wdGltdXM6IGxlZC1waW5zQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMCIsICJQSDEiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKworCQkJdWFydDRfcGluc19hOiB1YXJ0NEAwIHsKKwkJCQkvKiBFbmFibGUgaW50ZXJuYWwgcHVsbC11cCAqLworCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OworCQkJfTsKKwkJfTsKKworCQl1YXJ0MDogc2VyaWFsQDA3MDAwMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnVhcnQwX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdWFydDQ6IHNlcmlhbEAwNzAwMTAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZ1YXJ0NF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyYzM6IGkyY0AwNzAwMzQwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmMzX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmbGVkX3BpbnNfb3B0aW11cz47CisKKwkJLyogVGhlIExFRCBuYW1lcyBtYXRjaCB0aG9zZSBmb3VuZCBvbiB0aGUgYm9hcmQgKi8KKworCQlsZWQyIHsKKwkJCWxhYmVsID0gIm9wdGltdXM6bGVkMjp1c3IiOworCQkJZ3Bpb3MgPSA8JnBpbyA3IDEgMD47CisJCX07CisKKwkJLyogbGVkMyBpcyBvbiBQTTE1LCBpbiBSX1BJTyAqLworCisJCWxlZDQgeworCQkJbGFiZWwgPSAib3B0aW11czpsZWQ0OnVzciI7CisJCQlncGlvcyA9IDwmcGlvIDcgMCAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOWktYTgwLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0NzE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC5kdHNpCkBAIC0wLDAgKzEsNTE0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgQ2hlbi1ZdSBUc2FpCisgKgorICogQ2hlbi1ZdSBUc2FpIDx3ZW5zQGNzaWUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KKyAqCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy9pbmNsdWRlLyAic2tlbGV0b242NC5kdHNpIgorCisvIHsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDE7CisJCXNlcmlhbDIgPSAmdWFydDI7CisJCXNlcmlhbDMgPSAmdWFydDM7CisJCXNlcmlhbDQgPSAmdWFydDQ7CisJCXNlcmlhbDUgPSAmdWFydDU7CisJCXNlcmlhbDYgPSAmcl91YXJ0OworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdTA6IGNwdUAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MD47CisJCX07CisKKwkJY3B1MTogY3B1QDEgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgxPjsKKwkJfTsKKworCQljcHUyOiBjcHVAMiB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDI+OworCQl9OworCisJCWNwdTM6IGNwdUAzIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4Mz47CisJCX07CisKKwkJY3B1NDogY3B1QDEwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgxMDA+OworCQl9OworCisJCWNwdTU6IGNwdUAxMDEgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNSI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MTAxPjsKKwkJfTsKKworCQljcHU2OiBjcHVAMTAyIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDEwMj47CisJCX07CisKKwkJY3B1NzogY3B1QDEwMyB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgxMDM+OworCQl9OworCX07CisKKwltZW1vcnkgeworCQkvKiA4R0IgbWF4LiB3aXRoIExQQUUgKi8KKwkJcmVnID0gPDAgMHgyMDAwMDAwMCAweDAyIDA+OworCX07CisKKwljbG9ja3MgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCS8qCisJCSAqIG1hcCA2NCBiaXQgYWRkcmVzcyByYW5nZSBkb3duIHRvIDMyIGJpdHMsCisJCSAqIGFzIHRoZSBwZXJpcGhlcmFscyBhcmUgYWxsIHVuZGVyIDUxMk1CLgorCQkgKi8KKwkJcmFuZ2VzID0gPDAgMCAwIDB4MjAwMDAwMDA+OworCisJCW9zYzI0TTogb3NjMjRNX2NsayB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAib3NjMjRNIjsKKwkJfTsKKworCQlvc2MzMms6IG9zYzMya19jbGsgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIm9zYzMyayI7CisJCX07CisKKwkJcGxsNDogY2xrQDA2MDAwMDBjIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1wbGw0LWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDAwYyAweDQ+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInBsbDQiOworCQl9OworCisJCXBsbDEyOiBjbGtAMDYwMDAwMmMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLXBsbDQtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwMDJjIDB4ND47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAicGxsMTIiOworCQl9OworCisJCWd0X2NsazogY2xrQDA2MDAwMDVjIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1ndC1jbGsiOworCQkJcmVnID0gPDB4MDYwMDAwNWMgMHg0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw0PiwgPCZwbGwxMj4sIDwmcGxsMTI+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImd0IjsKKwkJfTsKKworCQlhaGIwOiBjbGtAMDYwMDAwNjAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFoYi1jbGsiOworCQkJcmVnID0gPDB4MDYwMDAwNjAgMHg0PjsKKwkJCWNsb2NrcyA9IDwmZ3RfY2xrPiwgPCZwbGw0PiwgPCZwbGwxMj4sIDwmcGxsMTI+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFoYjAiOworCQl9OworCisJCWFoYjE6IGNsa0AwNjAwMDA2NCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtYWhiLWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDA2NCAweDQ+OworCQkJY2xvY2tzID0gPCZndF9jbGs+LCA8JnBsbDQ+LCA8JnBsbDEyPiwgPCZwbGwxMj47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYWhiMSI7CisJCX07CisKKwkJYWhiMjogY2xrQDA2MDAwMDY4IHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1haGItY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwMDY4IDB4ND47CisJCQljbG9ja3MgPSA8Jmd0X2Nsaz4sIDwmcGxsND4sIDwmcGxsMTI+LCA8JnBsbDEyPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhaGIyIjsKKwkJfTsKKworCQlhcGIwOiBjbGtAMDYwMDAwNzAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFwYjAtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwMDcwIDB4ND47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsND47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYXBiMCI7CisJCX07CisKKwkJYXBiMTogY2xrQDA2MDAwMDc0IHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1hcGIxLWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDA3NCAweDQ+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDQ+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFwYjEiOworCQl9OworCisJCWNjaTQwMF9jbGs6IGNsa0AwNjAwMDA3OCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtZ3QtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwMDc4IDB4ND47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsND4sIDwmcGxsMTI+LCA8JnBsbDEyPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjY2k0MDAiOworCQl9OworCisJCWFoYjBfZ2F0ZXM6IGNsa0AwNjAwMDU4MCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtYWhiMC1nYXRlcy1jbGsiOworCQkJcmVnID0gPDB4MDYwMDA1ODAgMHg0PjsKKwkJCWNsb2NrcyA9IDwmYWhiMD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYWhiMF9mZCIsICJhaGIwX3ZlIiwgImFoYjBfZ3B1IiwKKwkJCQkJImFoYjBfc3MiLCAiYWhiMF9zZCIsICJhaGIwX25hbmQxIiwKKwkJCQkJImFoYjBfbmFuZDAiLCAiYWhiMF9zZHJhbSIsCisJCQkJCSJhaGIwX21pcGlfaHNpIiwgImFoYjBfc2F0YSIsICJhaGIwX3RzIiwKKwkJCQkJImFoYjBfc3BpMCIsImFoYjBfc3BpMSIsICJhaGIwX3NwaTIiLAorCQkJCQkiYWhiMF9zcGkzIjsKKwkJfTsKKworCQlhaGIxX2dhdGVzOiBjbGtAMDYwMDA1ODQgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFoYjEtZ2F0ZXMtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwNTg0IDB4ND47CisJCQljbG9ja3MgPSA8JmFoYjE+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFoYjFfdXNib3RnIiwgImFoYjFfdXNiaGNpIiwKKwkJCQkJImFoYjFfZ21hYyIsICJhaGIxX21zZ2JveCIsCisJCQkJCSJhaGIxX3NwaW5sb2NrIiwgImFoYjFfaHN0aW1lciIsCisJCQkJCSJhaGIxX2RtYSI7CisJCX07CisKKwkJYWhiMl9nYXRlczogY2xrQDA2MDAwNTg4IHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1haGIyLWdhdGVzLWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDU4OCAweDQ+OworCQkJY2xvY2tzID0gPCZhaGIyPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhaGIyX2xjZDAiLCAiYWhiMl9sY2QxIiwKKwkJCQkJImFoYjJfZWRwIiwgImFoYjJfY3NpIiwgImFoYjJfaGRtaSIsCisJCQkJCSJhaGIyX2RlIiwgImFoYjJfbXAiLCAiYWhiMl9taXBpX2RzaSI7CisJCX07CisKKwkJYXBiMF9nYXRlczogY2xrQDA2MDAwNTkwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1hcGIwLWdhdGVzLWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDU5MCAweDQ+OworCQkJY2xvY2tzID0gPCZhcGIwPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhcGIwX3NwZGlmIiwgImFwYjBfcGlvIiwKKwkJCQkJImFwYjBfYWM5NyIsICJhcGIwX2kyczAiLCAiYXBiMF9pMnMxIiwKKwkJCQkJImFwYjBfbHJhZGMiLCAiYXBiMF9ncGFkYyIsICJhcGIwX3R3ZCIsCisJCQkJCSJhcGIwX2NpcnR4IjsKKwkJfTsKKworCQlhcGIxX2dhdGVzOiBjbGtAMDYwMDA1OTQgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFwYjEtZ2F0ZXMtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwNTk0IDB4ND47CisJCQljbG9ja3MgPSA8JmFwYjE+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFwYjFfaTJjMCIsICJhcGIxX2kyYzEiLAorCQkJCQkiYXBiMV9pMmMyIiwgImFwYjFfaTJjMyIsICJhcGIxX2kyYzQiLAorCQkJCQkiYXBiMV91YXJ0MCIsICJhcGIxX3VhcnQxIiwKKwkJCQkJImFwYjFfdWFydDIiLCAiYXBiMV91YXJ0MyIsCisJCQkJCSJhcGIxX3VhcnQ0IiwgImFwYjFfdWFydDUiOworCQl9OworCX07CisKKwlzb2MgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCS8qCisJCSAqIG1hcCA2NCBiaXQgYWRkcmVzcyByYW5nZSBkb3duIHRvIDMyIGJpdHMsCisJCSAqIGFzIHRoZSBwZXJpcGhlcmFscyBhcmUgYWxsIHVuZGVyIDUxMk1CLgorCQkgKi8KKwkJcmFuZ2VzID0gPDAgMCAwIDB4MjAwMDAwMDA+OworCisJCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMDFjNDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3LWdpYyIsICJhcm0sY29ydGV4LWExNS1naWMiOworCQkJcmVnID0gPDB4MDFjNDEwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDAxYzQyMDAwIDB4MTAwMD4sCisJCQkgICAgICA8MHgwMWM0NDAwMCAweDIwMDA+LAorCQkJICAgICAgPDB4MDFjNDYwMDAgMHgyMDAwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWludGVycnVwdHMgPSA8MSA5IDB4ZjA0PjsKKwkJfTsKKworCQlhaGIwX3Jlc2V0czogcmVzZXRAMDYwMDA1YTAgeworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWNsb2NrLXJlc2V0IjsKKwkJCXJlZyA9IDwweDA2MDAwNWEwIDB4ND47CisJCX07CisKKwkJYWhiMV9yZXNldHM6IHJlc2V0QDA2MDAwNWE0IHsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1jbG9jay1yZXNldCI7CisJCQlyZWcgPSA8MHgwNjAwMDVhNCAweDQ+OworCQl9OworCisJCWFoYjJfcmVzZXRzOiByZXNldEAwNjAwMDVhOCB7CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtY2xvY2stcmVzZXQiOworCQkJcmVnID0gPDB4MDYwMDA1YTggMHg0PjsKKwkJfTsKKworCQlhcGIwX3Jlc2V0czogcmVzZXRAMDYwMDA1YjAgeworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWNsb2NrLXJlc2V0IjsKKwkJCXJlZyA9IDwweDA2MDAwNWIwIDB4ND47CisJCX07CisKKwkJYXBiMV9yZXNldHM6IHJlc2V0QDA2MDAwNWI0IHsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1jbG9jay1yZXNldCI7CisJCQlyZWcgPSA8MHgwNjAwMDViNCAweDQ+OworCQl9OworCisJCXRpbWVyQDA2MDAwYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC10aW1lciI7CisJCQlyZWcgPSA8MHgwNjAwMGMwMCAweGEwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxOCA0PiwKKwkJCQkgICAgIDwwIDE5IDQ+LAorCQkJCSAgICAgPDAgMjAgND4sCisJCQkJICAgICA8MCAyMSA0PiwKKwkJCQkgICAgIDwwIDIyIDQ+LAorCQkJCSAgICAgPDAgMjMgND47CisKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPjsKKwkJfTsKKworCQlwaW86IHBpbmN0cmxAMDYwMDA4MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLXBpbmN0cmwiOworCQkJcmVnID0gPDB4MDYwMDA4MDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExIDQ+LAorCQkJCSAgICAgPDAgMTUgND4sCisJCQkJICAgICA8MCAxNiA0PiwKKwkJCQkgICAgIDwwIDE3IDQ+LAorCQkJCSAgICAgPDAgMTIwIDQ+OworCQkJY2xvY2tzID0gPCZhcGIwX2dhdGVzIDU+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkjZ3Bpby1jZWxscyA9IDwzPjsKKworCQkJaTJjM19waW5zX2E6IGkyYzNAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEcxMCIsICJQRzExIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiaTJjMyI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKworCQkJdWFydDBfcGluc19hOiB1YXJ0MEAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDEyIiwgIlBIMTMiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJ1YXJ0MCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKworCQkJdWFydDRfcGluc19hOiB1YXJ0NEAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQRzEyIiwgIlBHMTMiLCAiUEcxNCIsICJQRzE1IjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAidWFydDQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJdWFydDA6IHNlcmlhbEAwNzAwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQkJcmVnID0gPDB4MDcwMDAwMDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDAgND47CisJCQlyZWctc2hpZnQgPSA8Mj47CisJCQlyZWctaW8td2lkdGggPSA8ND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMTY+OworCQkJcmVzZXRzID0gPCZhcGIxX3Jlc2V0cyAxNj47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQxOiBzZXJpYWxAMDcwMDA0MDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCXJlZyA9IDwweDA3MDAwNDAwIDB4NDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxIDQ+OworCQkJcmVnLXNoaWZ0ID0gPDI+OworCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDE3PjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMTc+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0Mjogc2VyaWFsQDA3MDAwODAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQlyZWcgPSA8MHgwNzAwMDgwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMiA0PjsKKwkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAxOD47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDE4PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdWFydDM6IHNlcmlhbEAwNzAwMGMwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQkJcmVnID0gPDB4MDcwMDBjMDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDMgND47CisJCQlyZWctc2hpZnQgPSA8Mj47CisJCQlyZWctaW8td2lkdGggPSA8ND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMTk+OworCQkJcmVzZXRzID0gPCZhcGIxX3Jlc2V0cyAxOT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQ0OiBzZXJpYWxAMDcwMDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCXJlZyA9IDwweDA3MDAxMDAwIDB4NDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA0IDQ+OworCQkJcmVnLXNoaWZ0ID0gPDI+OworCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDIwPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMjA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0NTogc2VyaWFsQDA3MDAxNDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQlyZWcgPSA8MHgwNzAwMTQwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNSA0PjsKKwkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAyMT47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDIxPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjMDogaTJjQDA3MDAyODAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1pMmMiOworCQkJcmVnID0gPDB4MDcwMDI4MDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDYgND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMD47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCX07CisKKwkJaTJjMTogaTJjQDA3MDAyYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1pMmMiOworCQkJcmVnID0gPDB4MDcwMDJjMDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDcgND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMT47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCX07CisKKwkJaTJjMjogaTJjQDA3MDAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1pMmMiOworCQkJcmVnID0gPDB4MDcwMDMwMDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDggND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMj47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDI+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCX07CisKKwkJaTJjMzogaTJjQDA3MDAzNDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1pMmMiOworCQkJcmVnID0gPDB4MDcwMDM0MDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDkgND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMz47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCX07CisKKwkJaTJjNDogaTJjQDA3MDAzODAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1pMmMiOworCQkJcmVnID0gPDB4MDcwMDM4MDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEwIDQ+OworCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDQ+OworCQkJcmVzZXRzID0gPCZhcGIxX3Jlc2V0cyA0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQl9OworCisJCXJfd2R0OiB3YXRjaGRvZ0AwODAwMTAwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtd2R0IjsKKwkJCXJlZyA9IDwweDA4MDAxMDAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwwIDM2IDQ+OworCQl9OworCisJCXJfdWFydDogc2VyaWFsQDA4MDAyODAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQlyZWcgPSA8MHgwODAwMjgwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzggND47CisJCQlyZWctc2hpZnQgPSA8Mj47CisJCQlyZWctaW8td2lkdGggPSA8ND47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VueGktY29tbW9uLXJlZ3VsYXRvcnMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bnhpLWNvbW1vbi1yZWd1bGF0b3JzLmR0c2kKaW5kZXggYzljNWIxMC4uZDg4NzY2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VueGktY29tbW9uLXJlZ3VsYXRvcnMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpCkBAIC0zLDEyICszLDQ4IEBACiAgKgogICogQ29weXJpZ2h0IDIwMTQgLSBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC8gewpAQCAtMjEsNiArNTcsMTMgQEAKIAkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKIAkJCX07CiAKKwkJCXVzYjBfdmJ1c19waW5fYTogdXNiMF92YnVzX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQQjkiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwogCQkJdXNiMV92YnVzX3Bpbl9hOiB1c2IxX3ZidXNfcGluQDAgewogCQkJCWFsbHdpbm5lcixwaW5zID0gIlBINiI7CiAJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKQEAgLTQ0LDExICs4NywyNCBAQAogCQlyZWd1bGF0b3ItbmFtZSA9ICJhaGNpLTV2IjsKIAkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CiAJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKIAkJZW5hYmxlLWFjdGl2ZS1oaWdoOwogCQlncGlvID0gPCZwaW8gMSA4IDA+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwlyZWdfdXNiMF92YnVzOiB1c2IwLXZidXMgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdXNiMF92YnVzX3Bpbl9hPjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidXNiMC12YnVzIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCWdwaW8gPSA8JnBpbyAxIDkgMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXJlZ191c2IxX3ZidXM6IHVzYjEtdmJ1cyB7CiAJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtY2FyZGh1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTMwLWNhcmRodS5kdHNpCmluZGV4IGExYjY4MmUuLmNiZjVhMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtY2FyZGh1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1jYXJkaHUuZHRzaQpAQCAtMTg5LDcgKzE4OSw3IEBACiAKIAkJLyogQUxTIGFuZCBQcm94aW1pdHkgc2Vuc29yICovCiAJCWlzbDI5MDI4QDQ0IHsKLQkJCWNvbXBhdGlibGUgPSAiaXNpbCxpc2wyOTAyOCI7CisJCQljb21wYXRpYmxlID0gImlzbCxpc2wyOTAyOCI7CiAJCQlyZWcgPSA8MHg0ND47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvPjsKIAkJCWludGVycnVwdHMgPSA8VEVHUkFfR1BJTyhMLCAwKSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmLWNvbGlicmktZXZhbC12My5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmYtY29saWJyaS1ldmFsLXYzLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhNDUyYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmLWNvbGlicmktZXZhbC12My5kdHNpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBUb3JhZGV4IEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvIHsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eUxQMCwxMTUyMDAiOworCX07CisKKwlyZWd1bGF0b3JzIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXN5c181djBfcmVnOiByZWd1bGF0b3JAMCB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MD47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICI1djAiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCX07CisKKwkJLyogVVNCSF9QRU4gKi8KKwkJdXNiaF92YnVzX3JlZzogcmVndWxhdG9yQDEgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2JoMV9yZWc+OworCQkJcmVnID0gPDE+OworCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiaF92YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZncGlvMyAxOSBHUElPX0FDVElWRV9MT1c+OworCQkJdmluLXN1cHBseSA9IDwmc3lzXzV2MF9yZWc+OworCQl9OworCX07Cit9OworCismYmwgeworCWJyaWdodG5lc3MtbGV2ZWxzID0gPDAgNCA4IDE2IDMyIDY0IDEyOCAyNTU+OworCWRlZmF1bHQtYnJpZ2h0bmVzcy1sZXZlbCA9IDw2PjsKKwlzdGF0dXMgID0gIm9rYXkiOworfTsKKworJmVzZGhjMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMxPjsKKwlidXMtd2lkdGggPSA8ND47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmZlYzEgeworCXBoeS1tb2RlID0gInJtaWkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYzE+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMwIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwkvKiBNNDFUME02IHJlYWwgdGltZSBjbG9jayBvbiBjYXJyaWVyIGJvYXJkICovCisJcnRjOiBtNDF0MG02QDY4IHsKKwkJY29tcGF0aWJsZSA9ICJzdCxtNDF0MDAiOworCQlyZWcgPSA8MHg2OD47CisJfTsKK307CisKKyZwd20wIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcHdtMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MiB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYmgxIHsKKwl2YnVzLXN1cHBseSA9IDwmdXNiaF92YnVzX3JlZz47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmYtY29saWJyaS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmYtY29saWJyaS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZjU3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy92Zi1jb2xpYnJpLmR0c2kKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBUb3JhZGV4IEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvIHsKKwlibDogYmFja2xpZ2h0IHsKKwkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKKwkJcHdtcyA9IDwmcHdtMCAwIDUwMDAwMDAgMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKK307CisKKyZhZGMwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismYWRjMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmVkbWEwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXNkaGMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lc2RoYzE+OworCWJ1cy13aWR0aCA9IDw0PjsKKwljZC1ncGlvcyA9IDwmZ3BpbzIgMTAgR1BJT19BQ1RJVkVfTE9XPjsKK307CisKKyZmZWMxIHsKKwlwaHktbW9kZSA9ICJybWlpIjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9mZWMxPjsKK307CisKKyZpMmMwIHsKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMwPjsKK307CisKKyZwd20wIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wd20wPjsKK307CisKKyZwd20xIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wd20xPjsKK307CisKKyZ1YXJ0MCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDA+OworfTsKKworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MT47Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQyPjsKK307CisKKyZ1c2JkZXYwIHsKKwlkaXNhYmxlLW92ZXItY3VycmVudDsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiaDEgeworCWRpc2FibGUtb3Zlci1jdXJyZW50OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JtaXNjMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYm1pc2MxIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNicGh5MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYnBoeTEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpb211eGMgeworCXZmNjEwLWNvbGlicmkgeworCQlwaW5jdHJsX2dwaW9fZXh0OiBncGlvX2V4dCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFREMTBfX0dQSU9fODkJMHgyMmVkIC8qIEVYVF9JT18wICovCisJCQkJVkY2MTBfUEFEX1BURDlfX0dQSU9fODgJCTB4MjJlZCAvKiBFWFRfSU9fMSAqLworCQkJCVZGNjEwX1BBRF9QVEQyNl9fR1BJT182OAkweDIyZWQgLyogRVhUX0lPXzIgKi8KKwkJCT47CisJCX07CisKKwkJcGluY3RybF9lc2RoYzE6IGVzZGhjMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFRBMjRfX0VTREhDMV9DTEsJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI1X19FU0RIQzFfQ01ECTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEEyNl9fRVNESEMxX0RBVDAJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI3X19FU0RIQzFfREFUMQkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRBMjhfX0VTREhDMV9EQVRBMgkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRBMjlfX0VTREhDMV9EQVQzCTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEIyMF9fR1BJT180MgkweDIxOWQKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9mZWMxOiBmZWMxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEM5X19FTkVUX1JNSUkxX01EQwkJMHgzMGQyCisJCQkJVkY2MTBfUEFEX1BUQzEwX19FTkVUX1JNSUkxX01ESU8JMHgzMGQzCisJCQkJVkY2MTBfUEFEX1BUQzExX19FTkVUX1JNSUkxX0NSUwkJMHgzMGQxCisJCQkJVkY2MTBfUEFEX1BUQzEyX19FTkVUX1JNSUlfUlhEMQkJMHgzMGQxCisJCQkJVkY2MTBfUEFEX1BUQzEzX19FTkVUX1JNSUkxX1JYRDAJMHgzMGQxCisJCQkJVkY2MTBfUEFEX1BUQzE0X19FTkVUX1JNSUkxX1JYRVIJMHgzMGQxCisJCQkJVkY2MTBfUEFEX1BUQzE1X19FTkVUX1JNSUkxX1RYRDEJMHgzMGQyCisJCQkJVkY2MTBfUEFEX1BUQzE2X19FTkVUX1JNSUkxX1RYRDAJMHgzMGQyCisJCQkJVkY2MTBfUEFEX1BUQzE3X19FTkVUX1JNSUkxX1RYRU4JMHgzMGQyCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfaTJjMDogaTJjMGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFRCMTRfX0kyQzBfU0NMCQkweDM3ZmYKKwkJCQlWRjYxMF9QQURfUFRCMTVfX0kyQzBfU0RBCQkweDM3ZmYKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9wd20wOiBwd20wZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEIwX19GVE0wX0NIMAkJMHgxMTgyCisJCQkJVkY2MTBfUEFEX1BUQjFfX0ZUTTBfQ0gxCQkweDExODIKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9wd20xOiBwd20xZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEI4X19GVE0xX0NIMAkJMHgxMTgyCisJCQkJVkY2MTBfUEFEX1BUQjlfX0ZUTTFfQ0gxCQkweDExODIKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MDogdWFydDBncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BUQjEwX19VQVJUMF9UWAkJMHgyMWEyCisJCQkJVkY2MTBfUEFEX1BUQjExX19VQVJUMF9SWAkJMHgyMWExCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdWFydDE6IHVhcnQxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEI0X19VQVJUMV9UWAkJMHgyMWEyCisJCQkJVkY2MTBfUEFEX1BUQjVfX1VBUlQxX1JYCQkweDIxYTEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MjogdWFydDJncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BURDBfX1VBUlQyX1RYCQkweDIxYTIKKwkJCQlWRjYxMF9QQURfUFREMV9fVUFSVDJfUlgJCTB4MjFhMQorCQkJCVZGNjEwX1BBRF9QVEQyX19VQVJUMl9SVFMJCTB4MjFhMgorCQkJCVZGNjEwX1BBRF9QVEQzX19VQVJUMl9DVFMJCTB4MjFhMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzYmgxX3JlZzogZ3Bpb191c2JfdmJ1cyB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFRENF9fR1BJT184MwkJCTB4MjJlZAorCQkJPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNTAwLWNvbGlicmktZXZhbC12My5kdHMgYi9hcmNoL2FybS9ib290L2R0cy92ZjUwMC1jb2xpYnJpLWV2YWwtdjMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzc4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjUwMC1jb2xpYnJpLWV2YWwtdjMuZHRzCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBUb3JhZGV4IEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJ2ZjUwMC1jb2xpYnJpLmR0c2kiCisjaW5jbHVkZSAidmYtY29saWJyaS1ldmFsLXYzLmR0c2kiCisKKy8geworCW1vZGVsID0gIlRvcmFkZXggQ29saWJyaSBWRjUwIG9uIENvbGlicmkgRXZhbHVhdGlvbiBCb2FyZCI7CisJY29tcGF0aWJsZSA9ICJ0b3JhZGV4LHZmNTAwLWNvbGlicmlfdmY1MC1vbi1ldmFsIiwgInRvcmFkZXgsdmY1MDAtY29saWJyaV92ZjUwIiwgImZzbCx2ZjUwMCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY1MDAtY29saWJyaS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY1MDAtY29saWJyaS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTM0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjUwMC1jb2xpYnJpLmR0c2kKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFRvcmFkZXggQUcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlICJ2ZjUwMC5kdHNpIgorI2luY2x1ZGUgInZmLWNvbGlicmkuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiVG9yYWRleCBDb2xpYnJpIFZGNTAgQ09NIjsKKwljb21wYXRpYmxlID0gInRvcmFkZXgsdmY2MTAtY29saWJyaV92ZjUwIiwgImZzbCx2ZjUwMCI7CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDgwMDAwMDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY1MDAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNTAwLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2NzAwNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNTAwLmR0c2kKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCisjaW5jbHVkZSAidmZ4eHguZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisKKy8geworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJYTVfY3B1OiBjcHVAMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDA+OworCQl9OworCX07CisKKwlzb2MgeworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKKworCQlhaXBzLWJ1c0A0MDAwMDAwMCB7CisKKwkJCWludGM6IGludGVycnVwdC1jb250cm9sbGVyQDQwMDAyMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktZ2ljIjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCXJlZyA9IDwweDQwMDAzMDAwIDB4MTAwMD4sCisJCQkJICAgICAgPDB4NDAwMDIxMDAgMHgxMDA+OworCQkJfTsKKworCQkJZ2xvYmFsX3RpbWVyOiB0aW1lckA0MDAwMjIwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdsb2JhbC10aW1lciI7CisJCQkJcmVnID0gPDB4NDAwMDIyMDAgMHgyMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDExIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfUExBVEZPUk1fQlVTPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZhZGMwIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTMgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismYWRjMSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDU0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJmNhbjAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA1OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZjYW4xIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTkgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZHNwaTAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZlZG1hMCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQk8R0lDX1NQSSA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCWludGVycnVwdC1uYW1lcyA9ICJlZG1hLXR4IiwgImVkbWEtZXJyIjsKK307CisKKyZlZG1hMSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJPEdJQ19TUEkgMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJaW50ZXJydXB0LW5hbWVzID0gImVkbWEtdHgiLCAiZWRtYS1lcnIiOworfTsKKworJmVzZGhjMSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJmZlYzAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA3OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZmZWMxIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzkgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZnRtIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNDQgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZ3BpbzEgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZ3BpbzIgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZ3BpbzMgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMDkgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZ3BpbzQgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTAgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZ3BpbzUgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismaTJjMCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDcxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnBpdCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnFzcGkwIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjQgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismc2FpMiB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVhcnQwIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNjEgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismdWFydDEgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA2MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZ1YXJ0MiB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDYzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVhcnQzIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNjQgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismdWFydDQgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZ1YXJ0NSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDY2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVzYmRldjAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZ1c2JoMSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVzYnBoeTAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA1MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZ1c2JwaHkxIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTEgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS1ldmFsLXYzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvbGlicmktZXZhbC12My5kdHMKaW5kZXggN2ZiMzA2Ni4uMTBlYmU5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS1ldmFsLXYzLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb2xpYnJpLWV2YWwtdjMuZHRzCkBAIC05LDM4ICs5LDkgQEAKIAogL2R0cy12MS87CiAjaW5jbHVkZSAidmY2MTAtY29saWJyaS5kdHNpIgorI2luY2x1ZGUgInZmLWNvbGlicmktZXZhbC12My5kdHNpIgogCiAvIHsKIAltb2RlbCA9ICJUb3JhZGV4IENvbGlicmkgVkY2MSBvbiBDb2xpYnJpIEV2YWx1YXRpb24gQm9hcmQiOwogCWNvbXBhdGlibGUgPSAidG9yYWRleCx2ZjYxMC1jb2xpYnJpX3ZmNjEtb24tZXZhbCIsICJ0b3JhZGV4LHZmNjEwLWNvbGlicmlfdmY2MSIsICJmc2wsdmY2MTAiOwotCi0JY2hvc2VuIHsKLQkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlMUDAsMTE1MjAwIjsKLQl9OwotfTsKLQotJmVzZGhjMSB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMxPjsKLQlidXMtd2lkdGggPSA8ND47Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJmZlYzEgewotCXBoeS1tb2RlID0gInJtaWkiOwotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYzE+OwotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KLSZ1YXJ0MCB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJnVhcnQxIHsKLQlzdGF0dXMgPSAib2theSI7Ci19OwotCi0mdWFydDIgewotCXN0YXR1cyA9ICJva2F5IjsKLX07Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvbGlicmkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvbGlicmkuZHRzaQppbmRleCAwY2Q4MzQzLi4xOWZlMDQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb2xpYnJpLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS5kdHNpCkBAIC04LDYgKzgsNyBAQAogICovCiAKICNpbmNsdWRlICJ2ZjYxMC5kdHNpIgorI2luY2x1ZGUgInZmLWNvbGlicmkuZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiVG9yYWRleCBDb2xpYnJpIFZGNjEgQ09NIjsKQEAgLTE2LDEwOCArMTcsOSBAQAogCW1lbW9yeSB7CiAJCXJlZyA9IDwweDgwMDAwMDAwIDB4MTAwMDAwMDA+OwogCX07Ci0KLQljbG9ja3MgewotCQllbmV0X2V4dCB7Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47Ci0JCX07Ci0JfTsKLQotfTsKLQotJmVzZGhjMSB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMxPjsKLQlidXMtd2lkdGggPSA8ND47Ci19OwotCi0mZmVjMSB7Ci0JcGh5LW1vZGUgPSAicm1paSI7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZmVjMT47CiB9OwogCiAmTDIgewogCWFybSxkYXRhLWxhdGVuY3kgPSA8MiAxIDI+OwogCWFybSx0YWctbGF0ZW5jeSA9IDwzIDIgMz47CiB9OwotCi0mdWFydDAgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQwPjsKLX07Ci0KLSZ1YXJ0MSB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDE+OwotfTsKLQotJnVhcnQyIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0Mj47Ci19OwotCi0mdXNiZGV2MCB7Ci0JZGlzYWJsZS1vdmVyLWN1cnJlbnQ7Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJnVzYmgxIHsKLQlkaXNhYmxlLW92ZXItY3VycmVudDsKLQlzdGF0dXMgPSAib2theSI7Ci19OwotCi0maW9tdXhjIHsKLQl2ZjYxMC1jb2xpYnJpIHsKLQkJcGluY3RybF9lc2RoYzE6IGVzZGhjMWdycCB7Ci0JCQlmc2wscGlucyA9IDwKLQkJCQlWRjYxMF9QQURfUFRBMjRfX0VTREhDMV9DTEsJMHgzMWVmCi0JCQkJVkY2MTBfUEFEX1BUQTI1X19FU0RIQzFfQ01ECTB4MzFlZgotCQkJCVZGNjEwX1BBRF9QVEEyNl9fRVNESEMxX0RBVDAJMHgzMWVmCi0JCQkJVkY2MTBfUEFEX1BUQTI3X19FU0RIQzFfREFUMQkweDMxZWYKLQkJCQlWRjYxMF9QQURfUFRBMjhfX0VTREhDMV9EQVRBMgkweDMxZWYKLQkJCQlWRjYxMF9QQURfUFRBMjlfX0VTREhDMV9EQVQzCTB4MzFlZgotCQkJCVZGNjEwX1BBRF9QVEIyMF9fR1BJT180MgkweDIxOWQKLQkJCT47Ci0JCX07Ci0KLQkJcGluY3RybF9mZWMxOiBmZWMxZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCVZGNjEwX1BBRF9QVEM5X19FTkVUX1JNSUkxX01EQwkJMHgzMGQyCi0JCQkJVkY2MTBfUEFEX1BUQzEwX19FTkVUX1JNSUkxX01ESU8JMHgzMGQzCi0JCQkJVkY2MTBfUEFEX1BUQzExX19FTkVUX1JNSUkxX0NSUwkJMHgzMGQxCi0JCQkJVkY2MTBfUEFEX1BUQzEyX19FTkVUX1JNSUlfUlhEMQkJMHgzMGQxCi0JCQkJVkY2MTBfUEFEX1BUQzEzX19FTkVUX1JNSUkxX1JYRDAJMHgzMGQxCi0JCQkJVkY2MTBfUEFEX1BUQzE0X19FTkVUX1JNSUkxX1JYRVIJMHgzMGQxCi0JCQkJVkY2MTBfUEFEX1BUQzE1X19FTkVUX1JNSUkxX1RYRDEJMHgzMGQyCi0JCQkJVkY2MTBfUEFEX1BUQzE2X19FTkVUX1JNSUkxX1RYRDAJMHgzMGQyCi0JCQkJVkY2MTBfUEFEX1BUQzE3X19FTkVUX1JNSUkxX1RYRU4JMHgzMGQyCi0JCQk+OwotCQl9OwotCi0JCXBpbmN0cmxfdWFydDA6IHVhcnQwZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCVZGNjEwX1BBRF9QVEIxMF9fVUFSVDBfVFgJCTB4MjFhMgotCQkJCVZGNjEwX1BBRF9QVEIxMV9fVUFSVDBfUlgJCTB4MjFhMQotCQkJPjsKLQkJfTsKLQotCQlwaW5jdHJsX3VhcnQxOiB1YXJ0MWdycCB7Ci0JCQlmc2wscGlucyA9IDwKLQkJCQlWRjYxMF9QQURfUFRCNF9fVUFSVDFfVFgJCTB4MjFhMgotCQkJCVZGNjEwX1BBRF9QVEI1X19VQVJUMV9SWAkJMHgyMWExCi0JCQk+OwotCQl9OwotCi0JCXBpbmN0cmxfdWFydDI6IHVhcnQyZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCVZGNjEwX1BBRF9QVEQwX19VQVJUMl9UWAkJMHgyMWEyCi0JCQkJVkY2MTBfUEFEX1BURDFfX1VBUlQyX1JYCQkweDIxYTEKLQkJCQlWRjYxMF9QQURfUFREMl9fVUFSVDJfUlRTCQkweDIxYTIKLQkJCQlWRjYxMF9QQURfUFREM19fVUFSVDJfQ1RTCQkweDIxYTEKLQkJCT47Ci0JCX07Ci0JfTsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb3NtaWMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29zbWljLmR0cwppbmRleCBkZTFiNDUzLi5mZDg3NThiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb3NtaWMuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvc21pYy5kdHMKQEAgLTIzLDE0ICsyMywxNiBAQAogCQlyZWcgPSA8MHg4MDAwMDAwMCAweDEwMDAwMDAwPjsKIAl9OwogCi0JY2xvY2tzIHsKLQkJZW5ldF9leHQgewotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OwotCQl9OworCWVuZXRfZXh0OiBlbmV0X2V4dCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47CiAJfTsKK307CiAKKyZjbGtzIHsKKwljbG9ja3MgPSA8JnN4b3NjPiwgPCZmeG9zYz4sIDwmZW5ldF9leHQ+OworCWNsb2NrLW5hbWVzID0gInN4b3NjIiwgImZ4b3NjIiwgImVuZXRfZXh0IjsKIH07CiAKICZlc2RoYzEgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtdHdyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLXR3ci5kdHMKaW5kZXggMTg5YjY5Ny4uYTBmNzYyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtdHdyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC10d3IuZHRzCkBAIC0yMiwxOCArMjIsMTYgQEAKIAkJcmVnID0gPDB4ODAwMDAwMDAgMHg4MDAwMDAwPjsKIAl9OwogCi0JY2xvY2tzIHsKLQkJYXVkaW9fZXh0IHsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0NTc2MDAwPjsKLQkJfTsKKwlhdWRpb19leHQ6IG1jbGtfb3NjIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDI0NTc2MDAwPjsKKwl9OwogCi0JCWVuZXRfZXh0IHsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKLQkJfTsKKwllbmV0X2V4dDogZXRoX29zYyB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47CiAJfTsKIAogCXJlZ3VsYXRvcnMgewpAQCAtOTUsNiArOTMsMTEgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismY2xrcyB7CisJY2xvY2tzID0gPCZzeG9zYz4sIDwmZnhvc2M+LCA8JmVuZXRfZXh0PiwgPCZhdWRpb19leHQ+OworCWNsb2NrLW5hbWVzID0gInN4b3NjIiwgImZ4b3NjIiwgImVuZXRfZXh0IiwgImF1ZGlvX2V4dCI7Cit9OworCiAmZHNwaTAgewogCWJ1cy1udW0gPSA8MD47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTExMiwxMCArMTE1LDE1IEBACiAJfTsKIH07CiAKKyZlZG1hMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJmVzZGhjMSB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMxPjsKIAlidXMtd2lkdGggPSA8ND47CisJY2QtZ3Bpb3MgPSA8JmdwaW81IDYgR1BJT19BQ1RJVkVfTE9XPjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCkBAIC0yODUsMyArMjkzLDE5IEBACiAJZGlzYWJsZS1vdmVyLWN1cnJlbnQ7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJnVzYm1pc2MwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNibWlzYzEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JwaHkwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNicGh5MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC5kdHNpCmluZGV4IDRkMmVjMzIuLjVmOGViMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAuZHRzaQpAQCAtNyw0ODEgKzcsMTkgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCi0jaW5jbHVkZSAidmY2MTAtcGluZnVuYy5oIgotI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLmg+Ci0jaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSAidmY1MDAuZHRzaSIKIAotLyB7Ci0JYWxpYXNlcyB7Ci0JCWNhbjAgPSAmY2FuMDsKLQkJY2FuMSA9ICZjYW4xOwotCQlzZXJpYWwwID0gJnVhcnQwOwotCQlzZXJpYWwxID0gJnVhcnQxOwotCQlzZXJpYWwyID0gJnVhcnQyOwotCQlzZXJpYWwzID0gJnVhcnQzOwotCQlzZXJpYWw0ID0gJnVhcnQ0OwotCQlzZXJpYWw1ID0gJnVhcnQ1OwotCQlncGlvMCA9ICZncGlvMTsKLQkJZ3BpbzEgPSAmZ3BpbzI7Ci0JCWdwaW8yID0gJmdwaW8zOwotCQlncGlvMyA9ICZncGlvNDsKLQkJZ3BpbzQgPSAmZ3BpbzU7Ci0JCXVzYnBoeTAgPSAmdXNicGh5MDsKLQkJdXNicGh5MSA9ICZ1c2JwaHkxOwotCX07CismYTVfY3B1IHsKKwluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47Cit9OwogCi0JY3B1cyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQljcHVAMCB7Ci0JCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUiOwotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwweDA+OwotCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwotCQl9OwotCX07Ci0KLQljbG9ja3MgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0KLQkJc3hvc2MgewotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OwotCQl9OwotCi0JCWZ4b3NjIHsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKLQkJfTsKLQl9OwotCi0Jc29jIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKLQkJcmFuZ2VzOwotCi0JCWFpcHMwOiBhaXBzLWJ1c0A0MDAwMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxhaXBzLWJ1cyIsICJzaW1wbGUtYnVzIjsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKLQkJCXJlZyA9IDwweDQwMDAwMDAwIDB4NzAwMDA+OwotCQkJcmFuZ2VzOwotCi0JCQlpbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlckA0MDAwMjAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7Ci0JCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKLQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCQlyZWcgPSA8MHg0MDAwMzAwMCAweDEwMDA+LAotCQkJCSAgICAgIDwweDQwMDAyMTAwIDB4MTAwPjsKLQkJCX07Ci0KLQkJCUwyOiBsMi1jYWNoZUA0MDAwNjAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOwotCQkJCXJlZyA9IDwweDQwMDA2MDAwIDB4MTAwMD47Ci0JCQkJY2FjaGUtdW5pZmllZDsKLQkJCQljYWNoZS1sZXZlbCA9IDwyPjsKLQkJCQlhcm0sZGF0YS1sYXRlbmN5ID0gPDEgMSAxPjsKLQkJCQlhcm0sdGFnLWxhdGVuY3kgPSA8MiAyIDI+OwotCQkJfTsKLQotCQkJZWRtYTA6IGRtYS1jb250cm9sbGVyQDQwMDE4MDAwIHsKLQkJCQkjZG1hLWNlbGxzID0gPDI+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWVkbWEiOwotCQkJCXJlZyA9IDwweDQwMDE4MDAwIDB4MjAwMD4sCi0JCQkJCTwweDQwMDI0MDAwIDB4MTAwMD4sCi0JCQkJCTwweDQwMDI1MDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDggSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkJCQk8MCA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWludGVycnVwdC1uYW1lcyA9ICJlZG1hLXR4IiwgImVkbWEtZXJyIjsKLQkJCQlkbWEtY2hhbm5lbHMgPSA8MzI+OwotCQkJCWNsb2NrLW5hbWVzID0gImRtYW11eDAiLCAiZG1hbXV4MSI7Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19ETUFNVVgwPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19ETUFNVVgxPjsKLQkJCX07Ci0KLQkJCWNhbjA6IGZsZXhjYW5ANDAwMjAwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWZsZXhjYW4iOwotCQkJCXJlZyA9IDwweDQwMDIwMDAwIDB4NDAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDU4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRkxFWENBTjA+LAotCQkJCQkgPCZjbGtzIFZGNjEwX0NMS19GTEVYQ0FOMD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCXVhcnQwOiBzZXJpYWxANDAwMjcwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7Ci0JCQkJcmVnID0gPDB4NDAwMjcwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNjEgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VQVJUMD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKLQkJCQlkbWFzID0gPCZlZG1hMCAwIDI+LAotCQkJCQk8JmVkbWEwIDAgMz47Ci0JCQkJZG1hLW5hbWVzID0gInJ4IiwidHgiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQl1YXJ0MTogc2VyaWFsQDQwMDI4MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1scHVhcnQiOwotCQkJCXJlZyA9IDwweDQwMDI4MDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDYyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVUFSVDE+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7Ci0JCQkJZG1hcyA9IDwmZWRtYTAgMCA0PiwKLQkJCQkJPCZlZG1hMCAwIDU+OwotCQkJCWRtYS1uYW1lcyA9ICJyeCIsInR4IjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJdWFydDI6IHNlcmlhbEA0MDAyOTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKLQkJCQlyZWcgPSA8MHg0MDAyOTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA2MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQyPjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciOwotCQkJCWRtYXMgPSA8JmVkbWEwIDAgNj4sCi0JCQkJCTwmZWRtYTAgMCA3PjsKLQkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCXVhcnQzOiBzZXJpYWxANDAwMmEwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7Ci0JCQkJcmVnID0gPDB4NDAwMmEwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNjQgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VQVJUMz47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKLQkJCQlkbWFzID0gPCZlZG1hMCAwIDg+LAotCQkJCQk8JmVkbWEwIDAgOT47Ci0JCQkJZG1hLW5hbWVzID0gInJ4IiwidHgiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQlkc3BpMDogZHNwaTBANDAwMmMwMDAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWRzcGkiOwotCQkJCXJlZyA9IDwweDQwMDJjMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDY3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRFNQSTA+OwotCQkJCWNsb2NrLW5hbWVzID0gImRzcGkiOwotCQkJCXNwaS1udW0tY2hpcHNlbGVjdHMgPSA8NT47Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCXNhaTI6IHNhaUA0MDAzMTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtc2FpIjsKLQkJCQlyZWcgPSA8MHg0MDAzMTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA4NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1NBSTI+OwotCQkJCWNsb2NrLW5hbWVzID0gInNhaSI7Ci0JCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKLQkJCQlkbWFzID0gPCZlZG1hMCAwIDIxPiwKLQkJCQkJPCZlZG1hMCAwIDIwPjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJcGl0OiBwaXRANDAwMzcwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXBpdCI7Ci0JCQkJcmVnID0gPDB4NDAwMzcwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgMzkgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19QSVQ+OwotCQkJCWNsb2NrLW5hbWVzID0gInBpdCI7Ci0JCQl9OwotCi0JCQlwd20wOiBwd21ANDAwMzgwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWZ0bS1wd20iOwotCQkJCSNwd20tY2VsbHMgPSA8Mz47Ci0JCQkJcmVnID0gPDB4NDAwMzgwMDAgMHgxMDAwPjsKLQkJCQljbG9jay1uYW1lcyA9ICJmdG1fc3lzIiwgImZ0bV9leHQiLAotCQkJCQkgICAgICAiZnRtX2ZpeCIsICJmdG1fY250X2Nsa19lbiI7Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19GVE0wPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0wX0VYVF9TRUw+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTBfRklYX1NFTD4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMF9FWFRfRklYX0VOPjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJYWRjMDogYWRjQDQwMDNiMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1hZGMiOwotCQkJCXJlZyA9IDwweDQwMDNiMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDUzIDB4MDQ+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfQURDMD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiYWRjIjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJd2RvZ0A0MDAzZTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtd2R0IiwgImZzbCxpbXgyMS13ZHQiOwotCQkJCXJlZyA9IDwweDQwMDNlMDAwIDB4MTAwMD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19XRFQ+OwotCQkJCWNsb2NrLW5hbWVzID0gIndkb2ciOwotCQkJfTsKLQotCQkJcXNwaTA6IHF1YWRzcGlANDAwNDQwMDAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXFzcGkiOwotCQkJCXJlZyA9IDwweDQwMDQ0MDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDI0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfUVNQSTBfRU4+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX1FTUEkwPjsKLQkJCQljbG9jay1uYW1lcyA9ICJxc3BpX2VuIiwgInFzcGkiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQlpb211eGM6IGlvbXV4Y0A0MDA0ODAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtaW9tdXhjIjsKLQkJCQlyZWcgPSA8MHg0MDA0ODAwMCAweDEwMDA+OwotCQkJCSNncGlvLXJhbmdlLWNlbGxzID0gPDM+OwotCQkJfTsKLQotCQkJZ3BpbzE6IGdwaW9ANDAwNDkwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOwotCQkJCXJlZyA9IDwweDQwMDQ5MDAwIDB4MTAwMCAweDQwMGZmMDAwIDB4NDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDAgMzI+OwotCQkJfTsKLQotCQkJZ3BpbzI6IGdwaW9ANDAwNGEwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOwotCQkJCXJlZyA9IDwweDQwMDRhMDAwIDB4MTAwMCAweDQwMGZmMDQwIDB4NDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDMyIDMyPjsKLQkJCX07Ci0KLQkJCWdwaW8zOiBncGlvQDQwMDRiMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1ncGlvIjsKLQkJCQlyZWcgPSA8MHg0MDA0YjAwMCAweDEwMDAgMHg0MDBmZjA4MCAweDQwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgMTA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWdwaW8tY29udHJvbGxlcjsKLQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJCWdwaW8tcmFuZ2VzID0gPCZpb211eGMgMCA2NCAzMj47Ci0JCQl9OwotCi0JCQlncGlvNDogZ3Bpb0A0MDA0YzAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZ3BpbyI7Ci0JCQkJcmVnID0gPDB4NDAwNGMwMDAgMHgxMDAwIDB4NDAwZmYwYzAgMHg0MD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDExMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQlncGlvLWNvbnRyb2xsZXI7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCQlncGlvLXJhbmdlcyA9IDwmaW9tdXhjIDAgOTYgMzI+OwotCQkJfTsKLQotCQkJZ3BpbzU6IGdwaW9ANDAwNGQwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOwotCQkJCXJlZyA9IDwweDQwMDRkMDAwIDB4MTAwMCAweDQwMGZmMTAwIDB4NDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAxMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDEyOCA3PjsKLQkJCX07Ci0KLQkJCWFuYXRvcDogYW5hdG9wQDQwMDUwMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1hbmF0b3AiLCAic3lzY29uIjsKLQkJCQlyZWcgPSA8MHg0MDA1MDAwMCAweDQwMD47Ci0JCQl9OwotCi0JCQl1c2JwaHkwOiB1c2JwaHlANDAwNTA4MDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYnBoeSI7Ci0JCQkJcmVnID0gPDB4NDAwNTA4MDAgMHg0MDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA1MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQlBIWTA+OwotCQkJCWZzbCxhbmF0b3AgPSA8JmFuYXRvcD47Ci0JCQl9OwotCi0JCQl1c2JwaHkxOiB1c2JwaHlANDAwNTBjMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYnBoeSI7Ci0JCQkJcmVnID0gPDB4NDAwNTBjMDAgMHg0MDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA1MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQlBIWTE+OwotCQkJCWZzbCxhbmF0b3AgPSA8JmFuYXRvcD47Ci0JCQl9OwotCi0JCQlpMmMwOiBpMmNANDAwNjYwMDAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWkyYyI7Ci0JCQkJcmVnID0gPDB4NDAwNjYwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID08MCA3MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0kyQzA+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7Ci0JCQkJZG1hcyA9IDwmZWRtYTAgMCA1MD4sCi0JCQkJCTwmZWRtYTAgMCA1MT47Ci0JCQkJZG1hLW5hbWVzID0gInJ4IiwidHgiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQljbGtzOiBjY21ANDAwNmIwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWNjbSI7Ci0JCQkJcmVnID0gPDB4NDAwNmIwMDAgMHgxMDAwPjsKLQkJCQkjY2xvY2stY2VsbHMgPSA8MT47Ci0JCQl9OwotCi0JCQl1c2JkZXYwOiB1c2JANDAwMzQwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYiIsICJmc2wsaW14MjctdXNiIjsKLQkJCQlyZWcgPSA8MHg0MDAzNDAwMCAweDgwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDc1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVVNCQzA+OwotCQkJCWZzbCx1c2JwaHkgPSA8JnVzYnBoeTA+OwotCQkJCWZzbCx1c2JtaXNjID0gPCZ1c2JtaXNjMCAwPjsKLQkJCQlkcl9tb2RlID0gInBlcmlwaGVyYWwiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQl1c2JtaXNjMDogdXNiQDQwMDM0ODAwIHsKLQkJCQkjaW5kZXgtY2VsbHMgPSA8MT47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNibWlzYyI7Ci0JCQkJcmVnID0gPDB4NDAwMzQ4MDAgMHgyMDA+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVVNCQzA+OwotCQkJfTsKLQkJfTsKLQotCQlhaXBzMTogYWlwcy1idXNANDAwODAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsYWlwcy1idXMiLCAic2ltcGxlLWJ1cyI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJcmVnID0gPDB4NDAwODAwMDAgMHg4MDAwMD47Ci0JCQlyYW5nZXM7Ci0KLQkJCWVkbWExOiBkbWEtY29udHJvbGxlckA0MDA5ODAwMCB7Ci0JCQkJI2RtYS1jZWxscyA9IDwyPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1lZG1hIjsKLQkJCQlyZWcgPSA8MHg0MDA5ODAwMCAweDIwMDA+LAotCQkJCQk8MHg0MDBhMTAwMCAweDEwMDA+LAotCQkJCQk8MHg0MDBhMjAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAxMCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCQkJCTwwIDExIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWludGVycnVwdC1uYW1lcyA9ICJlZG1hLXR4IiwgImVkbWEtZXJyIjsKLQkJCQlkbWEtY2hhbm5lbHMgPSA8MzI+OwotCQkJCWNsb2NrLW5hbWVzID0gImRtYW11eDAiLCAiZG1hbXV4MSI7Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19ETUFNVVgyPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19ETUFNVVgzPjsKLQkJCX07Ci0KLQkJCXVhcnQ0OiBzZXJpYWxANDAwYTkwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7Ci0JCQkJcmVnID0gPDB4NDAwYTkwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNjUgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VQVJUND47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJdWFydDU6IHNlcmlhbEA0MDBhYTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKLQkJCQlyZWcgPSA8MHg0MDBhYTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQ1PjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQlhZGMxOiBhZGNANDAwYmIwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWFkYyI7Ci0JCQkJcmVnID0gPDB4NDAwYmIwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNTQgMHgwND47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19BREMxPjsKLQkJCQljbG9jay1uYW1lcyA9ICJhZGMiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQllc2RoYzE6IGVzZGhjQDQwMGIyMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxpbXg1My1lc2RoYyI7Ci0JCQkJcmVnID0gPDB4NDAwYjIwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgMjggMHgwND47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19JUEdfQlVTPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19QTEFURk9STV9CVVM+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0VTREhDMT47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwZXIiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQl1c2JoMTogdXNiQDQwMGI0MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC11c2IiLCAiZnNsLGlteDI3LXVzYiI7Ci0JCQkJcmVnID0gPDB4NDAwYjQwMDAgMHg4MDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA3NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQkMxPjsKLQkJCQlmc2wsdXNicGh5ID0gPCZ1c2JwaHkxPjsKLQkJCQlmc2wsdXNibWlzYyA9IDwmdXNibWlzYzEgMD47Ci0JCQkJZHJfbW9kZSA9ICJob3N0IjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJdXNibWlzYzE6IHVzYkA0MDBiNDgwMCB7Ci0JCQkJI2luZGV4LWNlbGxzID0gPDE+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYm1pc2MiOwotCQkJCXJlZyA9IDwweDQwMGI0ODAwIDB4MjAwPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQkMxPjsKLQkJCX07Ci0KLQkJCWZ0bTogZnRtQDQwMGI4MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxmdG0tdGltZXIiOwotCQkJCXJlZyA9IDwweDQwMGI4MDAwIDB4MTAwMCAweDQwMGI5MDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDQ0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrLW5hbWVzID0gImZ0bS1ldnQiLCAiZnRtLXNyYyIsCi0JCQkJCSJmdG0tZXZ0LWNvdW50ZXItZW4iLCAiZnRtLXNyYy1jb3VudGVyLWVuIjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0ZUTTI+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTM+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTJfRVhUX0ZJWF9FTj4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNM19FWFRfRklYX0VOPjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJZmVjMDogZXRoZXJuZXRANDAwZDAwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLG12ZjYwMC1mZWMiOwotCQkJCXJlZyA9IDwweDQwMGQwMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDc4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRU5FVDA+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0VORVQwPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUPjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYWhiIiwgInB0cCI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCWZlYzE6IGV0aGVybmV0QDQwMGQxMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxtdmY2MDAtZmVjIjsKLQkJCQlyZWcgPSA8MHg0MDBkMTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA3OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0VORVQxPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUMT4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRU5FVD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwdHAiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQljYW4xOiBmbGV4Y2FuQDQwMGQ0MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1mbGV4Y2FuIjsKLQkJCQlyZWcgPSA8MHg0MDBkNDAwMCAweDQwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA1OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0ZMRVhDQU4xPiwKLQkJCQkJIDwmY2xrcyBWRjYxMF9DTEtfRkxFWENBTjE+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJwZXIiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCX07CismYWlwczAgeworCUwyOiBsMi1jYWNoZUA0MDAwNjAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzEwLWNhY2hlIjsKKwkJcmVnID0gPDB4NDAwMDYwMDAgMHgxMDAwPjsKKwkJY2FjaGUtdW5pZmllZDsKKwkJY2FjaGUtbGV2ZWwgPSA8Mj47CisJCWFybSxkYXRhLWxhdGVuY3kgPSA8MSAxIDE+OworCQlhcm0sdGFnLWxhdGVuY3kgPSA8MiAyIDI+OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmZ4eHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmeHh4LmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1OTY5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmeHh4LmR0c2kKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgInZmNjEwLXBpbmZ1bmMuaCIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay92ZjYxMC1jbG9jay5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorCisvIHsKKwlhbGlhc2VzIHsKKwkJY2FuMCA9ICZjYW4wOworCQljYW4xID0gJmNhbjE7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDE7CisJCXNlcmlhbDIgPSAmdWFydDI7CisJCXNlcmlhbDMgPSAmdWFydDM7CisJCXNlcmlhbDQgPSAmdWFydDQ7CisJCXNlcmlhbDUgPSAmdWFydDU7CisJCWdwaW8wID0gJmdwaW8xOworCQlncGlvMSA9ICZncGlvMjsKKwkJZ3BpbzIgPSAmZ3BpbzM7CisJCWdwaW8zID0gJmdwaW80OworCQlncGlvNCA9ICZncGlvNTsKKwkJdXNicGh5MCA9ICZ1c2JwaHkwOworCQl1c2JwaHkxID0gJnVzYnBoeTE7CisJfTsKKworCWZ4b3NjOiBmeG9zYyB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47CisJfTsKKworCXN4b3NjOiBzeG9zYyB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJfTsKKworCXNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzOworCisJCWFpcHMwOiBhaXBzLWJ1c0A0MDAwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxhaXBzLWJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXM7CisKKwkJCWVkbWEwOiBkbWEtY29udHJvbGxlckA0MDAxODAwMCB7CisJCQkJI2RtYS1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1lZG1hIjsKKwkJCQlyZWcgPSA8MHg0MDAxODAwMCAweDIwMDA+LAorCQkJCQk8MHg0MDAyNDAwMCAweDEwMDA+LAorCQkJCQk8MHg0MDAyNTAwMCAweDEwMDA+OworCQkJCWRtYS1jaGFubmVscyA9IDwzMj47CisJCQkJY2xvY2stbmFtZXMgPSAiZG1hbXV4MCIsICJkbWFtdXgxIjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0RNQU1VWDA+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0RNQU1VWDE+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQljYW4wOiBmbGV4Y2FuQDQwMDIwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1mbGV4Y2FuIjsKKwkJCQlyZWcgPSA8MHg0MDAyMDAwMCAweDQwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRkxFWENBTjA+LAorCQkJCQkgPCZjbGtzIFZGNjEwX0NMS19GTEVYQ0FOMD47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQwOiBzZXJpYWxANDAwMjcwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwMjcwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgMj4sCisJCQkJCTwmZWRtYTAgMCAzPjsKKwkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQxOiBzZXJpYWxANDAwMjgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwMjgwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQxPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgND4sCisJCQkJCTwmZWRtYTAgMCA1PjsKKwkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQyOiBzZXJpYWxANDAwMjkwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwMjkwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQyPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgNj4sCisJCQkJCTwmZWRtYTAgMCA3PjsKKwkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQzOiBzZXJpYWxANDAwMmEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwMmEwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQzPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgOD4sCisJCQkJCTwmZWRtYTAgMCA5PjsKKwkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWRzcGkwOiBkc3BpMEA0MDAyYzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZHNwaSI7CisJCQkJcmVnID0gPDB4NDAwMmMwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0RTUEkwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJkc3BpIjsKKwkJCQlzcGktbnVtLWNoaXBzZWxlY3RzID0gPDU+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlzYWkyOiBzYWlANDAwMzEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXNhaSI7CisJCQkJcmVnID0gPDB4NDAwMzEwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1NBSTI+OworCQkJCWNsb2NrLW5hbWVzID0gInNhaSI7CisJCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJCQlkbWFzID0gPCZlZG1hMCAwIDIxPiwKKwkJCQkJPCZlZG1hMCAwIDIwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJcGl0OiBwaXRANDAwMzcwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXBpdCI7CisJCQkJcmVnID0gPDB4NDAwMzcwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1BJVD47CisJCQkJY2xvY2stbmFtZXMgPSAicGl0IjsKKwkJCX07CisKKwkJCXB3bTA6IHB3bUA0MDAzODAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZnRtLXB3bSI7CisJCQkJI3B3bS1jZWxscyA9IDwzPjsKKwkJCQlyZWcgPSA8MHg0MDAzODAwMCAweDEwMDA+OworCQkJCWNsb2NrLW5hbWVzID0gImZ0bV9zeXMiLCAiZnRtX2V4dCIsCisJCQkJCSAgICAgICJmdG1fZml4IiwgImZ0bV9jbnRfY2xrX2VuIjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0ZUTTA+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTBfRVhUX1NFTD4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMF9GSVhfU0VMPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0wX0VYVF9GSVhfRU4+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlwd20xOiBwd21ANDAwMzkwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWZ0bS1wd20iOworCQkJCSNwd20tY2VsbHMgPSA8Mz47CisJCQkJcmVnID0gPDB4NDAwMzkwMDAgMHgxMDAwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJmdG1fc3lzIiwgImZ0bV9leHQiLAorCQkJCQkgICAgICAiZnRtX2ZpeCIsICJmdG1fY250X2Nsa19lbiI7CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19GVE0xPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0xX0VYVF9TRUw+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTFfRklYX1NFTD4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMV9FWFRfRklYX0VOPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJYWRjMDogYWRjQDQwMDNiMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1hZGMiOworCQkJCXJlZyA9IDwweDQwMDNiMDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19BREMwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhZGMiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl3ZG9nQDQwMDNlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC13ZHQiLCAiZnNsLGlteDIxLXdkdCI7CisJCQkJcmVnID0gPDB4NDAwM2UwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1dEVD47CisJCQkJY2xvY2stbmFtZXMgPSAid2RvZyI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXFzcGkwOiBxdWFkc3BpQDQwMDQ0MDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1xc3BpIjsKKwkJCQlyZWcgPSA8MHg0MDA0NDAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfUVNQSTBfRU4+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX1FTUEkwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJxc3BpX2VuIiwgInFzcGkiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlpb211eGM6IGlvbXV4Y0A0MDA0ODAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtaW9tdXhjIjsKKwkJCQlyZWcgPSA8MHg0MDA0ODAwMCAweDEwMDA+OworCQkJCSNncGlvLXJhbmdlLWNlbGxzID0gPDM+OworCQkJfTsKKworCQkJZ3BpbzE6IGdwaW9ANDAwNDkwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOworCQkJCXJlZyA9IDwweDQwMDQ5MDAwIDB4MTAwMCAweDQwMGZmMDAwIDB4NDA+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWdwaW8tcmFuZ2VzID0gPCZpb211eGMgMCAwIDMyPjsKKwkJCX07CisKKwkJCWdwaW8yOiBncGlvQDQwMDRhMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1ncGlvIjsKKwkJCQlyZWcgPSA8MHg0MDA0YTAwMCAweDEwMDAgMHg0MDBmZjA0MCAweDQwPjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlncGlvLXJhbmdlcyA9IDwmaW9tdXhjIDAgMzIgMzI+OworCQkJfTsKKworCQkJZ3BpbzM6IGdwaW9ANDAwNGIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOworCQkJCXJlZyA9IDwweDQwMDRiMDAwIDB4MTAwMCAweDQwMGZmMDgwIDB4NDA+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWdwaW8tcmFuZ2VzID0gPCZpb211eGMgMCA2NCAzMj47CisJCQl9OworCisJCQlncGlvNDogZ3Bpb0A0MDA0YzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZ3BpbyI7CisJCQkJcmVnID0gPDB4NDAwNGMwMDAgMHgxMDAwIDB4NDAwZmYwYzAgMHg0MD47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDk2IDMyPjsKKwkJCX07CisKKwkJCWdwaW81OiBncGlvQDQwMDRkMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1ncGlvIjsKKwkJCQlyZWcgPSA8MHg0MDA0ZDAwMCAweDEwMDAgMHg0MDBmZjEwMCAweDQwPjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlncGlvLXJhbmdlcyA9IDwmaW9tdXhjIDAgMTI4IDc+OworCQkJfTsKKworCQkJYW5hdG9wOiBhbmF0b3BANDAwNTAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWFuYXRvcCIsICJzeXNjb24iOworCQkJCXJlZyA9IDwweDQwMDUwMDAwIDB4NDAwPjsKKwkJCX07CisKKwkJCXVzYnBoeTA6IHVzYnBoeUA0MDA1MDgwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNicGh5IjsKKwkJCQlyZWcgPSA8MHg0MDA1MDgwMCAweDQwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JQSFkwPjsKKwkJCQlmc2wsYW5hdG9wID0gPCZhbmF0b3A+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl1c2JwaHkxOiB1c2JwaHlANDAwNTBjMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYnBoeSI7CisJCQkJcmVnID0gPDB4NDAwNTBjMDAgMHg0MDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVVNCUEhZMT47CisJCQkJZnNsLGFuYXRvcCA9IDwmYW5hdG9wPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJaTJjMDogaTJjQDQwMDY2MDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1pMmMiOworCQkJCXJlZyA9IDwweDQwMDY2MDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19JMkMwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgNTA+LAorCQkJCQk8JmVkbWEwIDAgNTE+OworCQkJCWRtYS1uYW1lcyA9ICJyeCIsInR4IjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJY2xrczogY2NtQDQwMDZiMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1jY20iOworCQkJCXJlZyA9IDwweDQwMDZiMDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZzeG9zYz4sIDwmZnhvc2M+OworCQkJCWNsb2NrLW5hbWVzID0gInN4b3NjIiwgImZ4b3NjIjsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQl9OworCisJCQl1c2JkZXYwOiB1c2JANDAwMzQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYiIsICJmc2wsaW14MjctdXNiIjsKKwkJCQlyZWcgPSA8MHg0MDAzNDAwMCAweDgwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JDMD47CisJCQkJZnNsLHVzYnBoeSA9IDwmdXNicGh5MD47CisJCQkJZnNsLHVzYm1pc2MgPSA8JnVzYm1pc2MwIDA+OworCQkJCWRyX21vZGUgPSAicGVyaXBoZXJhbCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVzYm1pc2MwOiB1c2JANDAwMzQ4MDAgeworCQkJCSNpbmRleC1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC11c2JtaXNjIjsKKwkJCQlyZWcgPSA8MHg0MDAzNDgwMCAweDIwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JDMD47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCX07CisKKwkJYWlwczE6IGFpcHMtYnVzQDQwMDgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGFpcHMtYnVzIiwgInNpbXBsZS1idXMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlczsKKworCQkJZWRtYTE6IGRtYS1jb250cm9sbGVyQDQwMDk4MDAwIHsKKwkJCQkjZG1hLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWVkbWEiOworCQkJCXJlZyA9IDwweDQwMDk4MDAwIDB4MjAwMD4sCisJCQkJCTwweDQwMGExMDAwIDB4MTAwMD4sCisJCQkJCTwweDQwMGEyMDAwIDB4MTAwMD47CisJCQkJZG1hLWNoYW5uZWxzID0gPDMyPjsKKwkJCQljbG9jay1uYW1lcyA9ICJkbWFtdXgwIiwgImRtYW11eDEiOworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRE1BTVVYMj4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRE1BTVVYMz47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQ0OiBzZXJpYWxANDAwYTkwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwYTkwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQ0PjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl1YXJ0NTogc2VyaWFsQDQwMGFhMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1scHVhcnQiOworCQkJCXJlZyA9IDwweDQwMGFhMDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VQVJUNT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJYWRjMTogYWRjQDQwMGJiMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1hZGMiOworCQkJCXJlZyA9IDwweDQwMGJiMDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19BREMxPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhZGMiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQllc2RoYzE6IGVzZGhjQDQwMGIyMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxpbXg1My1lc2RoYyI7CisJCQkJcmVnID0gPDB4NDAwYjIwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0lQR19CVVM+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX1BMQVRGT1JNX0JVUz4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRVNESEMxPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYWhiIiwgInBlciI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVzYmgxOiB1c2JANDAwYjQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYiIsICJmc2wsaW14MjctdXNiIjsKKwkJCQlyZWcgPSA8MHg0MDBiNDAwMCAweDgwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JDMT47CisJCQkJZnNsLHVzYnBoeSA9IDwmdXNicGh5MT47CisJCQkJZnNsLHVzYm1pc2MgPSA8JnVzYm1pc2MxIDA+OworCQkJCWRyX21vZGUgPSAiaG9zdCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVzYm1pc2MxOiB1c2JANDAwYjQ4MDAgeworCQkJCSNpbmRleC1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC11c2JtaXNjIjsKKwkJCQlyZWcgPSA8MHg0MDBiNDgwMCAweDIwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JDMT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWZ0bTogZnRtQDQwMGI4MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxmdG0tdGltZXIiOworCQkJCXJlZyA9IDwweDQwMGI4MDAwIDB4MTAwMCAweDQwMGI5MDAwIDB4MTAwMD47CisJCQkJY2xvY2stbmFtZXMgPSAiZnRtLWV2dCIsICJmdG0tc3JjIiwKKwkJCQkJImZ0bS1ldnQtY291bnRlci1lbiIsICJmdG0tc3JjLWNvdW50ZXItZW4iOworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRlRNMj4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMz4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMl9FWFRfRklYX0VOPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0zX0VYVF9GSVhfRU4+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlmZWMwOiBldGhlcm5ldEA0MDBkMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXZmNjAwLWZlYyI7CisJCQkJcmVnID0gPDB4NDAwZDAwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0VORVQwPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUMD4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRU5FVD47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwdHAiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlmZWMxOiBldGhlcm5ldEA0MDBkMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXZmNjAwLWZlYyI7CisJCQkJcmVnID0gPDB4NDAwZDEwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0VORVQxPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUMT4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRU5FVD47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwdHAiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQljYW4xOiBmbGV4Y2FuQDQwMGQ0MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1mbGV4Y2FuIjsKKwkJCQlyZWcgPSA8MHg0MDBkNDAwMCAweDQwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRkxFWENBTjE+LAorCQkJCQkgPCZjbGtzIFZGNjEwX0NMS19GTEVYQ0FOMT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtNzAwMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS03MDAwLmR0c2kKaW5kZXggY2UyZWY1Yi4uZWUzZTVkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS03MDAwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS03MDAwLmR0c2kKQEAgLTI0Myw3ICsyNDMsNiBAQAogCQkJY2xrYzogY2xrY0AxMDAgewogCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCQljb21wYXRpYmxlID0gInhsbngscHM3LWNsa2MiOwotCQkJCXBzLWNsay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQkJCWZjbGstZW5hYmxlID0gPDA+OwogCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhcm1wbGwiLCAiZGRycGxsIiwgImlvcGxsIiwgImNwdV82b3I0eCIsCiAJCQkJCQkiY3B1XzNvcjJ4IiwgImNwdV8yeCIsICJjcHVfMXgiLCAiZGRyMngiLCAiZGRyM3giLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS1wYXJhbGxlbGxhLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtcGFyYWxsZWxsYS5kdHMKaW5kZXggMDQyOWJiZC4uYWIxZGMwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS1wYXJhbGxlbGxhLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXBhcmFsbGVsbGEuZHRzCkBAIC0zNiw2ICszNiw3IEBACiAKICZjbGtjIHsKIAlmY2xrLWVuYWJsZSA9IDwweGY+OworCXBzLWNsay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogfTsKIAogJmdlbTAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16YzcwMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXpjNzAyLmR0cwppbmRleCA5NGUyY2RhLi4yODBmMDJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy96eW5xLXpjNzAyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXpjNzAyLmR0cwpAQCAtNDIsNiArNDIsMTAgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismY2xrYyB7CisJcHMtY2xrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Cit9OworCiAmZ2VtMCB7CiAJc3RhdHVzID0gIm9rYXkiOwogCXBoeS1tb2RlID0gInJnbWlpLWlkIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtemM3MDYuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16YzcwNi5kdHMKaW5kZXggYThiYmRmYi4uMzRmNzgxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16YzcwNi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16YzcwNi5kdHMKQEAgLTI5LDYgKzI5LDEwIEBACiAKIH07CiAKKyZjbGtjIHsKKwlwcy1jbGstZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKK307CisKICZnZW0wIHsKIAlzdGF0dXMgPSAib2theSI7CiAJcGh5LW1vZGUgPSAicmdtaWktaWQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16ZWQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16ZWQuZHRzCmluZGV4IDY5Nzc3OWEuLjFjN2NjOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtemVkLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXplZC5kdHMKQEAgLTI5LDYgKzI5LDEwIEBACiAKIH07CiAKKyZjbGtjIHsKKwlwcy1jbGstZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKK307CisKICZnZW0wIHsKIAlzdGF0dXMgPSAib2theSI7CiAJcGh5LW1vZGUgPSAicmdtaWktaWQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16eWJvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtenliby5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhMTJjZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtenliby5kdHMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgLSAyMDE0IFhpbGlueAorICogIENvcHlyaWdodCAoQykgMjAxMiBOYXRpb25hbCBJbnN0cnVtZW50cyBDb3JwLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy9kdHMtdjEvOworL2luY2x1ZGUvICJ6eW5xLTcwMDAuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiWnlucSBaWUJPIERldmVsb3BtZW50IEJvYXJkIjsKKwljb21wYXRpYmxlID0gImRpZ2lsZW50LHp5bnEtenlibyIsICJ4bG54LHp5bnEtNzAwMCI7CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwIDB4MjAwMDAwMDA+OworCX07CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVBTMCwxMTUyMDAgZWFybHlwcmludGsiOworCX07CisKK307CisKKyZjbGtjIHsKKwlwcy1jbGstZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKK307CisKKyZnZW0wIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGh5LW1vZGUgPSAicmdtaWktaWQiOworCXBoeS1oYW5kbGUgPSA8JmV0aGVybmV0X3BoeT47CisKKwlldGhlcm5ldF9waHk6IGV0aGVybmV0LXBoeUAwIHsKKwkJcmVnID0gPDA+OworCX07Cit9OworCismc2RoY2kwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZWRtYS5jIGIvYXJjaC9hcm0vY29tbW9uL2VkbWEuYwppbmRleCA3MjA0MWYwLi41NjYyYTg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vZWRtYS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9lZG1hLmMKQEAgLTI0NSw2ICsyNDUsOCBAQAogCS8qIGxpc3Qgb2YgY2hhbm5lbHMgd2l0aCBubyBldmVuIHRyaWdnZXI7IHRlcm1pbmF0ZWQgYnkgIi0xIiAqLwogCWNvbnN0IHM4CSpub2V2ZW50OwogCisJc3RydWN0IGVkbWFfc29jX2luZm8gKmluZm87CisKIAkvKiBUaGUgZWRtYV9pbnVzZSBiaXQgZm9yIGVhY2ggUGFSQU0gc2xvdCBpcyBjbGVhciB1bmxlc3MgdGhlCiAJICogY2hhbm5lbCBpcyBpbiB1c2UgLi4uIGJ5IEFSTSBvciBEU1AsIGZvciBRRE1BLCBvciB3aGF0ZXZlci4KIAkgKi8KQEAgLTI5Niw3ICsyOTgsNyBAQAogCQkJfigweDcgPDwgYml0KSwgcXVldWVfbm8gPDwgYml0KTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGFzc2lnbl9wcmlvcml0eV90b19xdWV1ZSh1bnNpZ25lZCBjdGxyLCBpbnQgcXVldWVfbm8sCitzdGF0aWMgdm9pZCBhc3NpZ25fcHJpb3JpdHlfdG9fcXVldWUodW5zaWduZWQgY3RsciwgaW50IHF1ZXVlX25vLAogCQlpbnQgcHJpb3JpdHkpCiB7CiAJaW50IGJpdCA9IHF1ZXVlX25vICogNDsKQEAgLTMxNSw3ICszMTcsNyBAQAogICogaW5jbHVkZWQgaW4gdGhhdCBwYXJ0aWN1bGFyIEVETUEgdmFyaWFudCAoRWcgOiBkbTY0NngpCiAgKgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbWFwX2RtYWNoX3BhcmFtKHVuc2lnbmVkIGN0bHIpCitzdGF0aWMgdm9pZCBtYXBfZG1hY2hfcGFyYW0odW5zaWduZWQgY3RscikKIHsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgRURNQV9NQVhfRE1BQ0g7IGkrKykKQEAgLTE3OTgsNiArMTgwMCw3IEBACiAJCQllZG1hX3dyaXRlX2FycmF5MihqLCBFRE1BX0RSQUUsIGksIDEsIDB4MCk7CiAJCQllZG1hX3dyaXRlX2FycmF5KGosIEVETUFfUVJBRSwgaSwgMHgwKTsKIAkJfQorCQllZG1hX2NjW2pdLT5pbmZvID0gaW5mb1tqXTsKIAkJYXJjaF9udW1fY2MrKzsKIAogCQllZG1hX2Rldl9pbmZvLmlkID0gajsKQEAgLTE4MDcsOSArMTgxMCw1NiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IGVkbWFfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaiA9IDA7IGogPCBhcmNoX251bV9jYzsgaisrKSB7CisJCXN0cnVjdCBlZG1hICpjYyA9IGVkbWFfY2Nbal07CisKKwkJczggKCpxdWV1ZV9wcmlvcml0eV9tYXBwaW5nKVsyXTsKKworCQlxdWV1ZV9wcmlvcml0eV9tYXBwaW5nID0gY2MtPmluZm8tPnF1ZXVlX3ByaW9yaXR5X21hcHBpbmc7CisKKwkJLyogRXZlbnQgcXVldWUgcHJpb3JpdHkgbWFwcGluZyAqLworCQlmb3IgKGkgPSAwOyBxdWV1ZV9wcmlvcml0eV9tYXBwaW5nW2ldWzBdICE9IC0xOyBpKyspCisJCQlhc3NpZ25fcHJpb3JpdHlfdG9fcXVldWUoaiwKKwkJCQkJCSBxdWV1ZV9wcmlvcml0eV9tYXBwaW5nW2ldWzBdLAorCQkJCQkJIHF1ZXVlX3ByaW9yaXR5X21hcHBpbmdbaV1bMV0pOworCisJCS8qCisJCSAqIE1hcCB0aGUgY2hhbm5lbCB0byBwYXJhbSBlbnRyeSBpZiBjaGFubmVsIG1hcHBpbmcgbG9naWMKKwkJICogZXhpc3QKKwkJICovCisJCWlmIChlZG1hX3JlYWQoaiwgRURNQV9DQ0NGRykgJiBDSE1BUF9FWElTVCkKKwkJCW1hcF9kbWFjaF9wYXJhbShqKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY2MtPm51bV9jaGFubmVsczsgaSsrKSB7CisJCQlpZiAodGVzdF9iaXQoaSwgY2MtPmVkbWFfaW51c2UpKSB7CisJCQkJLyogZW5zdXJlIGFjY2VzcyB0aHJvdWdoIHNoYWRvdyByZWdpb24gMCAqLworCQkJCWVkbWFfb3JfYXJyYXkyKGosIEVETUFfRFJBRSwgMCwgaSA+PiA1LAorCQkJCQkgICAgICAgQklUKGkgJiAweDFmKSk7CisKKwkJCQlzZXR1cF9kbWFfaW50ZXJydXB0KGksCisJCQkJCQkgICAgY2MtPmludHJfZGF0YVtpXS5jYWxsYmFjaywKKwkJCQkJCSAgICBjYy0+aW50cl9kYXRhW2ldLmRhdGEpOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGVkbWFfcG1fb3BzID0geworCVNFVF9MQVRFX1NZU1RFTV9TTEVFUF9QTV9PUFMoTlVMTCwgZWRtYV9wbV9yZXN1bWUpCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlZG1hX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJlZG1hIiwKKwkJLnBtCT0gJmVkbWFfcG1fb3BzLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBlZG1hX29mX2lkcywKIAl9LAogCS5wcm9iZSA9IGVkbWFfcHJvYmUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FwZTZldm1fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hcGU2ZXZtX2RlZmNvbmZpZwppbmRleCBiNTRiMjhmLi5kYjgxZDhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2FwZTZldm1fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXBlNmV2bV9kZWZjb25maWcKQEAgLTMzLDYgKzMzLDcgQEAKIENPTkZJR19WRlA9eQogQ09ORklHX05FT049eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxX2R0X2RlZmNvbmZpZwppbmRleCAzYjUxNWMxLi5hNjczNzVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MV9kdF9kZWZjb25maWcKQEAgLTgwLDYgKzgwLDcgQEAKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19NQUNCPXkKICMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldAorQ09ORklHX0RNOTAwMD15CiAjIENPTkZJR19ORVRfVkVORE9SX0ZBUkFEQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldApAQCAtMTEzLDYgKzExNCw3IEBACiBDT05GSUdfSU5QVVRfSk9ZREVWPXkKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfUVQxMDcwPXkKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CkBAIC0xODYsNiArMTg4LDcgQEAKIENPTkZJR19BVDkxX0FEQz15CiBDT05GSUdfUFdNPXkKIENPTkZJR19QV01fQVRNRUw9eQorQ09ORklHX1BXTV9BVE1FTF9UQ0I9eQogQ09ORklHX0VYVDRfRlM9eQogQ09ORklHX0ZBTk9USUZZPXkKIENPTkZJR19WRkFUX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjA1NzcxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19VU0VSX05TPXkKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQ9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKLUNPTkZJR19NQUNIX09ORUFSTT15Ci1DT05GSUdfTUFDSF9BVDkxUk05MjAwRUs9eQotQ09ORklHX01BQ0hfQ1NCMzM3PXkKLUNPTkZJR19NQUNIX0NTQjYzNz15Ci1DT05GSUdfTUFDSF9DQVJNRVZBPXkKLUNPTkZJR19NQUNIX0FURUI5MjAwPXkKLUNPTkZJR19NQUNIX0tCOTIwMD15Ci1DT05GSUdfTUFDSF9QSUNPVFVYMlhYPXkKLUNPTkZJR19NQUNIX0tBRkE9eQotQ09ORklHX01BQ0hfRUNCQVQ5MT15Ci1DT05GSUdfTUFDSF9ZTDkyMDA9eQotQ09ORklHX01BQ0hfQ1BVQVQ5MT15Ci1DT05GSUdfTUFDSF9FQ085MjA9eQotQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEPXkKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEwMAotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0NBUkQ9eQotQ09ORklHX0FUOTFfQ0Y9eQotQ09ORklHX0FFQUJJPXkKLSMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldAotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MTAwMDAwMDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MjAwNDAwMDAKLUNPTkZJR19LRVhFQz15Ci1DT05GSUdfQVVUT19aUkVMQUREUj15Ci1DT05GSUdfRlBFX05XRlBFPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9eQotQ09ORklHX0lQVjZfUFJJVkFDWT15Ci1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15Ci1DT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfREVWVE1QRlM9eQotQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKLSMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX0NGST15Ci1DT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15Ci1DT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QTEFUUkFNPXkKLUNPTkZJR19NVERfREFUQUZMQVNIPXkKLUNPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfQVRNRUw9eQotQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKLUNPTkZJR19NVERfVUJJPXkKLUNPTkZJR19NVERfVUJJX0dMVUVCST15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTUlJPXkKLUNPTkZJR19BUk1fQVQ5MV9FVEhFUj15Ci1DT05GSUdfREFWSUNPTV9QSFk9eQotQ09ORklHX1NNU0NfUEhZPXkKLUNPTkZJR19NSUNSRUxfUEhZPXkKLSMgQ09ORklHX1dMQU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX0VWREVWPXkKLUNPTkZJR19LRVlCT0FSRF9HUElPPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0FUTUVMPXkKLUNPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfR1BJTz15Ci1DT05GSUdfU1BJPXkKLUNPTkZJR19TUElfQVRNRUw9eQotQ09ORklHX0dQSU9fU1lTRlM9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci1DT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRz15Ci1DT05GSUdfRkI9eQotQ09ORklHX0ZCX01PREVfSEVMUEVSUz15Ci1DT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKLUNPTkZJR19GQl9TMUQxM1hYWD15Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GT05UUz15Ci1DT05GSUdfTE9HTz15Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9BVDkxPXkKLUNPTkZJR19VU0JfR19TRVJJQUw9eQotQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX0FUTUVMTUNJPXkKLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci1DT05GSUdfTEVEU19HUElPPXkKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMD15Ci1DT05GSUdfRVhUNF9GUz15Ci1DT05GSUdfQVVUT0ZTNF9GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1VCSUZTX0ZTPXkKLUNPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUj15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTkxTX1VURjg9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci1DT05GSUdfREVCVUdfTEw9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfQ1JZUFRPX1BDQkM9eQotQ09ORklHX0NSWVBUT19TSEExPXkKLUNPTkZJR19YWl9ERUNfQVJNVEhVTUI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MF85ZzIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjBfOWcyMF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZGEwNWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MF85ZzIwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxU0FNOTI2MD15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOTI2MEVLPXkKLUNPTkZJR19NQUNIX0NBTTYwPXkKLUNPTkZJR19NQUNIX1NBTTlfTDkyNjA9eQotQ09ORklHX01BQ0hfQUZFQjkyNjA9eQotQ09ORklHX01BQ0hfQ1BVOTI2MD15Ci1DT05GSUdfTUFDSF9GTEVYSUJJVFk9eQotQ09ORklHX01BQ0hfQVQ5MVNBTTlHMjBFSz15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOUcyMEVLXzJNTUM9eQotQ09ORklHX01BQ0hfQ1BVOUcyMD15Ci1DT05GSUdfTUFDSF9BQ01FTkVUVVNGT1hHMjA9eQotQ09ORklHX01BQ0hfUE9SVFVYRzIwPXkKLUNPTkZJR19NQUNIX1NUQU1QOUcyMD15Ci1DT05GSUdfTUFDSF9QQ09OVFJPTF9HMjA9eQotQ09ORklHX01BQ0hfR1NJQTE4Uz15Ci1DT05GSUdfTUFDSF9TTkFQUEVSXzkyNjA9eQotQ09ORklHX01BQ0hfQVQ5MVNBTTlfRFQ9eQotQ09ORklHX0FUOTFfU0xPV19DTE9DSz15Ci0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0FSTV9BUFBFTkRFRF9EVEI9eQotQ09ORklHX0FSTV9BVEFHX0RUQl9DT01QQVQ9eQotQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLUNPTkZJR19BVVRPX1pSRUxBRERSPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfREVWVE1QRlM9eQotQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9EQVRBRkxBU0g9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX1VCST15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfRUVQUk9NX0FUMjU9eQotQ09ORklHX1NDU0k9eQotQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTUFDQj15Ci0jIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfRkFSQURBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX01JQ1JFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX01JQ1JPQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU01TQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldAotQ09ORklHX1NNU0NfUEhZPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9HUElPPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQVRNRUw9eQotQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19HUElPPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9BVE1FTD15Ci1DT05GSUdfU1BJX1NQSURFVj15Ci1DT05GSUdfR1BJT19TWVNGUz15Ci1DT05GSUdfUE9XRVJfU1VQUExZPXkKLUNPTkZJR19QT1dFUl9SRVNFVD15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0c9eQotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9TRVFVRU5DRVI9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX01PTj15Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0FUOTE9eQotQ09ORklHX1VTQl9HX1NFUklBTD15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfQVRNRUxNQ0k9eQotQ09ORklHX01NQ19TUEk9eQotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLUNPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15Ci1DT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfRFJWX1JWMzAyOUMyPXkKLUNPTkZJR19SVENfRFJWX0FUOTFTQU05PXkKLUNPTkZJR19JSU89eQotQ09ORklHX0FUOTFfQURDPXkKLUNPTkZJR19FWFQ0X0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xNT15Ci1DT05GSUdfTkxTX1VURjg9eQotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0xMPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MV85ZzEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjFfOWcxMF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNTA1ZDguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MV85ZzEwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0jIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfS0VSTkVMX0xaTUE9eQotIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0FUOTE9eQotQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjE9eQotQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjFFSz15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOUcxMEVLPXkKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci1DT05GSUdfQUVBQkk9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMwLDExNTIwMCBpbml0cmQ9MHgyMTEwMDAwMCwzMTQ1NzI4IHJvb3Q9L2Rldi9yYW0wIHJ3IgotQ09ORklHX0FVVE9fWlJFTEFERFI9eQotQ09ORklHX1ZGUD15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExPXkKLUNPTkZJR19NQUM4MDIxMT15Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX0RFVlRNUEZTPXkKLUNPTkZJR19ERVZUTVBGU19NT1VOVD15Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfQVRNRUw9eQotQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfR0xVRUJJPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQVRNRUxfVENMSUI9eQotQ09ORklHX0FUTUVMX1NTQz15Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRE05MDAwPXkKLUNPTkZJR19VU0JfWkQxMjAxPW0KLUNPTkZJR19SVEw4MTg3PW0KLUNPTkZJR19MSUJFUlRBUz1tCi1DT05GSUdfTElCRVJUQVNfVVNCPW0KLUNPTkZJR19MSUJFUlRBU19TRElPPW0KLUNPTkZJR19MSUJFUlRBU19TUEk9bQotQ09ORklHX1JUMlgwMD1tCi1DT05GSUdfUlQyNTAwVVNCPW0KLUNPTkZJR19SVDczVVNCPW0KLUNPTkZJR19aRDEyMTFSVz1tCi1DT05GSUdfSU5QVVRfUE9MTERFVj1tCi0jIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MjQwCi1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9MzIwCi1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0dQSU89eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLUNPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTPXkKLUNPTkZJR19TRVJJQUxfQVRNRUw9eQotQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19HUElPPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9BVE1FTD15Ci1DT05GSUdfUE9XRVJfU1VQUExZPXkKLUNPTkZJR19QT1dFUl9SRVNFVD15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0c9eQotQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9BVE1FTD15Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLSMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9BVE1FTF9MQ0RDPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19TT1VORD15Ci1DT05GSUdfU05EPXkKLUNPTkZJR19TTkRfU0VRVUVOQ0VSPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPXkKLUNPTkZJR19TTkRfUENNX09TUz15Ci0jIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVJNIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQVQ3M0MyMTM9eQotQ09ORklHX1NORF9VU0JfQVVESU89bQotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9TVE9SQUdFPXkKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfQVQ5MT15Ci1DT05GSUdfVVNCX0dfU0VSSUFMPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19BVE1FTE1DST1tCi1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfR1BJTz15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfRFJWX0FUOTFTQU05PXkKLUNPTkZJR19NU0RPU19GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1VCSUZTX0ZTPXkKLUNPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUj15Ci1DT05GSUdfU1FVQVNIRlM9eQotQ09ORklHX1NRVUFTSEZTX0xaTz15Ci1DT05GSUdfU1FVQVNIRlNfWFo9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX05MU19JU084ODU5XzE1PXkKLUNPTkZJR19OTFNfVVRGOD15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M19kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNjcxYzkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M19kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0FUOTE9eQotQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjM9eQotQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjNFSz15Ci1DT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQ9eQotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDIxMTAwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCi1DT05GSUdfQVVUT19aUkVMQUREUj15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKLUNPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLUNPTkZJR19ORVRfSVBJUD15Ci1DT05GSUdfSVBfTVJPVVRFPXkKLUNPTkZJR19JUF9QSU1TTV9WMT15Ci1DT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj15Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX0RFVlRNUEZTPXkKLUNPTkZJR19ERVZUTVBGU19NT1VOVD15Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19ORlRMPXkKLUNPTkZJR19ORlRMX1JXPXkKLUNPTkZJR19NVERfREFUQUZMQVNIPXkKLUNPTkZJR19NVERfQkxPQ0syTVREPXkKLUNPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfQVRNRUw9eQotQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfR0xVRUJJPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19BVE1FTF9UQ0xJQj15Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTUFDQj15Ci1DT05GSUdfU01TQ19QSFk9eQotIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfUE9MTERFVj1tCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0dQSU89eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQVRNRUw9eQotQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19HUElPPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9BVE1FTD15Ci1DT05GSUdfR1BJT19TWVNGUz15Ci1DT05GSUdfUE9XRVJfU1VQUExZPXkKLUNPTkZJR19QT1dFUl9SRVNFVD15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0c9eQotQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9BVE1FTD15Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19TT1VORD15Ci1DT05GSUdfU05EPXkKLUNPTkZJR19TTkRfU0VRVUVOQ0VSPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPXkKLUNPTkZJR19TTkRfUENNX09TUz15Ci0jIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVJNIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQVRNRUxfQUM5N0M9eQotIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1VTQl9BVURJTz1tCi1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9TVE9SQUdFPXkKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfQVRNRUxfVVNCQT15Ci1DT05GSUdfVVNCX0dfU0VSSUFMPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX1NESU9fVUFSVD1tCi1DT05GSUdfTU1DX0FUTUVMTUNJPW0KLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci1DT05GSUdfTEVEU19HUElPPXkKLUNPTkZJR19MRURTX1BXTT15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfRFJWX0FUOTFTQU05PXkKLUNPTkZJR19QV009eQotQ09ORklHX1BXTV9BVE1FTD15Ci1DT05GSUdfRVhUNF9GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1VCSUZTX0ZTPXkKLUNPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUj15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjNfQUNMPXkKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19OTFNfVVRGOD15Ci1DT05GSUdfREVCVUdfVVNFUj15Ci1DT05GSUdfWFpfREVDPXkKLUNPTkZJR19GT05UUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05ZzQ1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlnNDVfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjZkMWExLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlnNDVfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLSMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXQVAgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxU0FNOUc0NT15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOU0xMEc0NUVLPXkKLUNPTkZJR19NQUNIX0FUOTFTQU05X0RUPXkKLUNPTkZJR19BVDkxX1NMT1dfQ0xPQ0s9eQotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9Im1lbT0xMjhNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDcxMTAwMDAwLDI1MTY1ODI0IHJvb3Q9L2Rldi9yYW0wIHJ3IgotQ09ORklHX0FVVE9fWlJFTEFERFI9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVRfNlJEPXkKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfREVWVE1QRlM9eQotQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKLSMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfREFUQUZMQVNIPXkKLUNPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfQVRNRUw9eQotQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfR0xVRUJJPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD00Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQVRNRUxfVENMSUI9eQotQ09ORklHX0FUTUVMX1NTQz15Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19NQUNCPXkKLUNPTkZJR19EQVZJQ09NX1BIWT15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfSk9ZREVWPXkKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfUVQxMDcwPXkKLUNPTkZJR19LRVlCT0FSRF9RVDIxNjA9eQotQ09ORklHX0tFWUJPQVJEX0dQSU89eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BVE1FTF9NWFQ9bQotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9BVE1FTD15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0dQSU89eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX0FUTUVMPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotQ09ORklHX1BPV0VSX1JFU0VUPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRz15Ci1DT05GSUdfRkI9eQotQ09ORklHX0ZCX0FUTUVMPXkKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9BVE1FTF9MQ0RDPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfUFdNPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19TT1VORD15Ci1DT05GSUdfU05EPXkKLUNPTkZJR19TTkRfU0VRVUVOQ0VSPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPXkKLUNPTkZJR19TTkRfUENNX09TUz15Ci0jIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVJNIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQVRNRUxfQUM5N0M9eQotIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9eQotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX0FDTT15Ci1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9BVE1FTF9VU0JBPXkKLUNPTkZJR19VU0JfR19NVUxUST15Ci1DT05GSUdfVVNCX0dfTVVMVElfQ0RDPXkKLUNPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX0FUTUVMTUNJPXkKLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci1DT05GSUdfTEVEU19HUElPPXkKLUNPTkZJR19MRURTX1BXTT15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfR1BJTz15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQotQ09ORklHX0RNQURFVklDRVM9eQotQ09ORklHX0FUX0hETUFDPXkKLUNPTkZJR19ETUFURVNUPW0KLSMgQ09ORklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0lJTz15Ci1DT05GSUdfQVQ5MV9BREM9eQotQ09ORklHX1BXTT15Ci1DT05GSUdfUFdNX0FUTUVMPXkKLUNPTkZJR19FWFQ0X0ZTPXkKLUNPTkZJR19GQU5PVElGWT15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1VCSUZTX0ZTPXkKLUNPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUj15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfU1RSSVBfQVNNX1NZTVM9eQotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci1DT05GSUdfREVCVUdfTEw9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1VTRVJfQVBJX0hBU0g9bQotQ09ORklHX0NSWVBUT19VU0VSX0FQSV9TS0NJUEhFUj1tCi0jIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotQ09ORklHX0ZPTlRTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05cmxfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzI2ZDM0NC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05cmxfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0FUOTE9eQotQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTD15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOVJMRUs9eQotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDIxMTAwMDAwLDE3MTA1MzYzIHJvb3Q9L2Rldi9yYW0wIHJ3IgotQ09ORklHX0FVVE9fWlJFTEFERFI9eQotQ09ORklHX05FVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX0RFVlRNUEZTPXkKLUNPTkZJR19ERVZUTVBGU19NT1VOVD15Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfREFUQUZMQVNIPXkKLUNPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfQVRNRUw9eQotQ09ORklHX01URF9VQkk9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTQKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTI0NTc2Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MzIwCi1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9MjQwCi1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQVRNRUw9eQotQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0dQSU89eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX0FUTUVMPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotQ09ORklHX1BPV0VSX1JFU0VUPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRz15Ci1DT05GSUdfRkI9eQotQ09ORklHX0ZCX0FUTUVMPXkKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfQVRNRUxfVVNCQT15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfQVRNRUxNQ0k9bQotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLUNPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfUFdNPXkKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQotQ09ORklHX0lJTz15Ci1DT05GSUdfQVQ5MV9BREM9eQotQ09ORklHX1BXTT15Ci1DT05GSUdfUFdNX0FUTUVMPXkKLUNPTkZJR19FWFQ0X0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX0NSQU1GUz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMTU9eQotQ09ORklHX05MU19VVEY4PXkKLUNPTkZJR19ERUJVR19JTkZPPXkKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19ERUJVR19MTD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTF4NDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxeDQwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1ZTkyMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTF4NDBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0VNQkVEREVEPXkKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRlVURVggaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJGRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCPXkKLSMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0FUOTE9eQotQ09ORklHX0FSQ0hfQVQ5MVg0MD15Ci1DT05GSUdfTUFDSF9BVDkxRUIwMT15Ci1DT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDA9eQotQ09ORklHX0NQVV9BUk03VERNST15Ci1DT05GSUdfU0VUX01FTV9QQVJBTT15Ci1DT05GSUdfRFJBTV9CQVNFPTB4MDEwMDAwMDAKLUNPTkZJR19EUkFNX1NJWkU9MHgwMDQwMDAwMAotQ09ORklHX0ZMQVNIX01FTV9CQVNFPTB4MDE0MDAwMDAKLUNPTkZJR19QUk9DRVNTT1JfSUQ9MHgxNDAwMDA0MAotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQklORk1UX0ZMQVQ9eQotIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotQ09ORklHX01URD15Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9SQU09eQotQ09ORklHX01URF9ST009eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLSMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotQ09ORklHX1JPTUZTX0ZTPXkKLSMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmNtX2RlZmNvbmZpZwppbmRleCBiYzYxNGY0Li44M2E4N2U0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2JjbV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iY21fZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw4IEBACiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19BUkNIX0JDTT15Ci1DT05GSUdfQVJDSF9CQ01fTU9CSUxFPXkKK0NPTkZJR19BUkNIX0JDTV8yMTY2ND15CitDT05GSUdfQVJDSF9CQ01fMjgxWFg9eQogQ09ORklHX0FSTV9USFVNQkVFPXkKIENPTkZJR19TTVA9eQogQ09ORklHX1BSRUVNUFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnCmluZGV4IGUyMWVmODMuLmM0MTk5MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWcKQEAgLTEzNCw2ICsxMzQsNyBAQAogQ09ORklHX1VTQl9EV0MzPXkKIENPTkZJR19VU0JfSFNJQ19VU0IzNTAzPXkKIENPTkZJR19NTUM9eQorQ09ORklHX01NQ19CTE9DS19NSU5PUlM9MTYKIENPTkZJR19NTUNfU0RIQ0k9eQogQ09ORklHX01NQ19TREhDSV9TM0M9eQogQ09ORklHX01NQ19TREhDSV9TM0NfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaGlzaV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2hpc2lfZGVmY29uZmlnCmluZGV4IDE3NzI1MDUuLjFmZTM2MjFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2hpc2lfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaGlzaV9kZWZjb25maWcKQEAgLTUsNiArNSw4IEBACiBDT05GSUdfUkRfTFpNQT15CiBDT05GSUdfQVJDSF9ISVNJPXkKIENPTkZJR19BUkNIX0hJM3h4eD15CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19DTURMSU5FX1BBUlRJVElPTj15CiBDT05GSUdfQVJDSF9ISVg1SEQyPXkKIENPTkZJR19BUkNIX0hJUDA0PXkKIENPTkZJR19TTVA9eQpAQCAtMTQsOCArMTYsMTEgQEAKIENPTkZJR19ISUdITUVNPXkKIENPTkZJR19BUk1fQVBQRU5ERURfRFRCPXkKIENPTkZJR19BUk1fQVRBR19EVEJfQ09NUEFUPXkKK0NPTkZJR19ORU9OPXkKIENPTkZJR19BUk1fQVRBR19EVEJfQ09NUEFUX0NNRExJTkVfRlJPTV9CT09UTE9BREVSPXkKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQorQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfUE5QPXkKQEAgLTI2LDYgKzMxLDcgQEAKIENPTkZJR19BVEE9eQogQ09ORklHX1NBVEFfQUhDSV9QTEFURk9STT15CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfSElYNUhEMl9HTUFDPXkKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVQUkVDQVRFRF9PUFRJT05TPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKQEAgLTM5LDggKzQ1LDEzIEBACiBDT05GSUdfU1BJPXkKIENPTkZJR19TUElfUEwwMjI9eQogQ09ORklHX1BJTkNUUkxfU0lOR0xFPXkKK0NPTkZJR19ERUJVR19HUElPPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKK0NPTkZJR19HUElPTElCPXkKIENPTkZJR19HUElPX0dFTkVSSUNfUExBVEZPUk09eQogQ09ORklHX1JFR1VMQVRPUl9HUElPPXkKK0NPTkZJR19NRkRfU1lTQ09OPXkKK0NPTkZJR19QT1dFUl9SRVNFVF9TWVNDT049eQogQ09ORklHX0RSTT15CiBDT05GSUdfRkJfU0lNUExFPXkKIENPTkZJR19VU0I9eQpAQCAtNDgsMTUgKzU5LDIxIEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9NWEM9eQogQ09ORklHX1VTQl9FSENJX0hDRF9QTEFURk9STT15CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUExBVEZPUk09eQogQ09ORklHX1VTQl9TVE9SQUdFPXkKIENPTkZJR19OT1BfVVNCX1hDRUlWPXkKIENPTkZJR19NTUM9eQogQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfTU1DX0RXPXkKK0NPTkZJR19NTUNfRFdfSURNQUM9eQorQ09ORklHX01NQ19EV19QTFRGTT15CiBDT05GSUdfUlRDX0RSVl9QTDAzMT15CiBDT05GSUdfRE1BREVWSUNFUz15CiBDT05GSUdfRFdfRE1BQz15CiBDT05GSUdfUEwzMzBfRE1BPXkKIENPTkZJR19QV009eQorQ09ORklHX1BIWV9ISVg1SEQyX1NBVEE9eQogQ09ORklHX0VYVDRfRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19ORlNfRlM9eQpAQCAtNjUsNiArODIsOCBAQAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19QUklOVEtfVElNRT15CiBDT05GSUdfREVCVUdfRlM9eQorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9DS1VQX0RFVEVDVE9SPXkKIENPTkZJR19WRlA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pbXhfdjZfdjdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pbXhfdjZfdjdfZGVmY29uZmlnCmluZGV4IDY3OTBmMWIuLmY3MDdjZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW14X3Y2X3Y3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lteF92Nl92N19kZWZjb25maWcKQEAgLTE2Myw3ICsxNjMsMTMgQEAKIENPTkZJR19HUElPX1NZU0ZTPXkKIENPTkZJR19HUElPX01DOVMwOERaNjA9eQogQ09ORklHX0dQSU9fU1RNUEU9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfR1BJT19GQU49eQorQ09ORklHX1RIRVJNQUw9eQorQ09ORklHX0NQVV9USEVSTUFMPXkKK0NPTkZJR19JTVhfVEhFUk1BTD15CitDT05GSUdfUE9XRVJfU1VQUExZPXkKK0NPTkZJR19QT1dFUl9SRVNFVD15CitDT05GSUdfUE9XRVJfUkVTRVRfSU1YPXkKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfSU1YMl9XRFQ9eQogQ09ORklHX01GRF9EQTkwNTJfSTJDPXkKQEAgLTIxMSw2ICsyMTcsNyBAQAogQ09ORklHX1NORF9TT0NfSU1YX1NHVEw1MDAwPXkKIENPTkZJR19TTkRfU09DX0lNWF9TUERJRj15CiBDT05GSUdfU05EX1NPQ19JTVhfTUMxMzc4Mz15CitDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMzWD15CiBDT05GSUdfU05EX1NJTVBMRV9DQVJEPXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9FSENJX0hDRD15CkBAIC0yMzksNiArMjQ2LDcgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTz15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQorQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKIENPTkZJR19SVENfRFJWX0lTTDEyMDg9eQogQ09ORklHX1JUQ19EUlZfUENGODU2Mz15CiBDT05GSUdfUlRDX0RSVl9NQzEzWFhYPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnCmluZGV4IGMxZjVhZGMuLjcxZjE0NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZwpAQCAtOCw2ICs4LDkgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX0FSQ0hfTVVMVElfVjRUPXkKK0NPTkZJR19BUkNIX01VTFRJX1Y1PXkKKyMgQ09ORklHX0FSQ0hfTVVMVElfVjcgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSU5URUdSQVRPUj15CiBDT05GSUdfQVJDSF9JTlRFR1JBVE9SX0FQPXkKIENPTkZJR19BUkNIX0lOVEVHUkFUT1JfQ1A9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZwppbmRleCA5MzJhZTQwLi4yMGEzZmY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZwpAQCAtMjAsNiArMjAsOSBAQAogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19BUkNIX0tFWVNUT05FPXkKIENPTkZJR19BUk1fTFBBRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfTVNJPXkKK0NPTkZJR19QQ0lfS0VZU1RPTkU9eQogQ09ORklHX1NNUD15CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfQUVBQkk9eQpAQCAtMTk0LDMgKzE5Nyw3IEBACiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD15CiBDT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQorQ09ORklHX0tFWVNUT05FX0lSUT15CitDT05GSUdfR1BJT19TWVNDT049eQorQ09ORklHX1RJX0RBVklOQ0lfTURJTz15CitDT05GSUdfTUFSVkVMTF9QSFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9rb2Vsc2NoX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva29lbHNjaF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzM2QxOWIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9rb2Vsc2NoX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE2Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfUEVSRl9FVkVOVFM9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX0FSQ0hfU0hNT0JJTEVfTEVHQUNZPXkKLUNPTkZJR19BUkNIX1I4QTc3OTE9eQotQ09ORklHX01BQ0hfS09FTFNDSD15Ci0jIENPTkZJR19TV1BfRU1VTEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEU9eQotQ09ORklHX1BMMzEwX0VSUkFUQV81ODgzNjk9eQotQ09ORklHX0FSTV9FUlJBVEFfNzU0MzIyPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9SQ0FSX0dFTjI9eQotQ09ORklHX1BDSV9SQ0FSX0dFTjJfUENJRT15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19TQ0hFRF9NQz15Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfQUVBQkk9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQVJNX0FQUEVOREVEX0RUQj15Ci1DT05GSUdfS0VYRUM9eQotQ09ORklHX0FVVE9fWlJFTEFERFI9eQotQ09ORklHX1ZGUD15Ci1DT05GSUdfTkVPTj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fUlVOVElNRT15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0RFVlRNUEZTPXkKLUNPTkZJR19ERVZUTVBGU19NT1VOVD15Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0FUQT15Ci1DT05GSUdfU0FUQV9SQ0FSPXkKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9NMjVQODA9eQotQ09ORklHX01URF9TUElfTk9SPXkKLUNPTkZJR19FRVBST01fQVQyND15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0FERU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfRkFSQURBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX01JQ1JFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX05BVFNFTUkgaXMgbm90IHNldAotQ09ORklHX1NIX0VUSD15Ci0jIENPTkZJR19ORVRfVkVORE9SX1NFRVEgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1dJWk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX1NIX1NDST15Ci1DT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz0yMAotQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfTVVYPXkKLUNPTkZJR19JMkNfU0hfTU9CSUxFPXkKLUNPTkZJR19JMkNfUkNBUj15Ci1DT05GSUdfU1BJPXkKLUNPTkZJR19TUElfUlNQST15Ci1DT05GSUdfU1BJX1NIX01TSU9GPXkKLUNPTkZJR19HUElPTElCPXkKLUNPTkZJR19HUElPX1JDQVI9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1RIRVJNQUw9eQotQ09ORklHX1JDQVJfVEhFUk1BTD15Ci1DT05GSUdfUkVHVUxBVE9SPXkKLUNPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRT15Ci1DT05GSUdfUkVHVUxBVE9SX0RBOTIxMD15Ci1DT05GSUdfUkVHVUxBVE9SX0dQSU89eQotQ09ORklHX01FRElBX1NVUFBPUlQ9eQotQ09ORklHX01FRElBX0NBTUVSQV9TVVBQT1JUPXkKLUNPTkZJR19WNExfUExBVEZPUk1fRFJJVkVSUz15Ci1DT05GSUdfU09DX0NBTUVSQT15Ci1DT05GSUdfU09DX0NBTUVSQV9QTEFURk9STT15Ci1DT05GSUdfVklERU9fUkNBUl9WSU49eQotIyBDT05GSUdfTUVESUFfU1VCRFJWX0FVVE9TRUxFQ1QgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX0FEVjcxODA9eQotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19TREhJPXkKLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci1DT05GSUdfTEVEU19HUElPPXkKLSMgQ09ORklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPXkKLSMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAotQ09ORklHX05GU19GUz15Ci1DT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tdWx0aV92NV9kZWZjb25maWcKaW5kZXggMDE4YmVmOS4uOWQ1Njc4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9tdWx0aV92NV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tdWx0aV92NV9kZWZjb25maWcKQEAgLTY3LDkgKzY3LDExIEBACiBDT05GSUdfU0FUQV9NVj15CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfTkVUX0RTQV9NVjg4RTYxMjNfNjFfNjU9eQorQ09ORklHX05FVF9EU0FfTVY4OEU2MTcxPXkKIENPTkZJR19NVjY0M1hYX0VUSD15CiBDT05GSUdfUjgxNjk9eQogQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19NV0w4Sz1tCiBDT05GSUdfTElCRVJUQVM9eQogQ09ORklHX0xJQkVSVEFTX1NESU89eQogQ09ORklHX0lOUFVUX0VWREVWPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWcKaW5kZXggOWQ3YTMyZi4uZDc4OTY1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWcKQEAgLTMsMTIgKzMsMTQgQEAKIENPTkZJR19JUlFfRE9NQUlOX0RFQlVHPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19DR1JPVVBTPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1BFUkZfRVZFTlRTPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX0NNRExJTkVfUEFSVElUSU9OPXkKIENPTkZJR19BUkNIX1ZJUlQ9eQogQ09ORklHX0FSQ0hfTVZFQlU9eQogQ09ORklHX01BQ0hfQVJNQURBXzM3MD15CkBAIC0xNyw3ICsxOSw5IEBACiBDT05GSUdfTUFDSF9BUk1BREFfWFA9eQogQ09ORklHX01BQ0hfRE9WRT15CiBDT05GSUdfQVJDSF9CQ009eQotQ09ORklHX0FSQ0hfQkNNX01PQklMRT15CitDT05GSUdfQVJDSF9CQ01fQ1lHTlVTPXkKK0NPTkZJR19BUkNIX0JDTV8yMTY2ND15CitDT05GSUdfQVJDSF9CQ01fMjgxWFg9eQogQ09ORklHX0FSQ0hfQkNNXzUzMDFYPXkKIENPTkZJR19BUkNIX0JSQ01TVEI9eQogQ09ORklHX0FSQ0hfQkVSTElOPXkKQEAgLTEyNCw4ICsxMjgsMTIgQEAKIENPTkZJR19DTUFfU0laRV9NQllURVM9NjQKIENPTkZJR19PTUFQX09DUDJTQ1A9eQogQ09ORklHX01URD15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX00yNVA4MD15CitDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9TUElfTk9SPXkKK0NPTkZJR19NVERfVUJJPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0FENTI1WF9EUE9UPXkKIENPTkZJR19BRDUyNVhfRFBPVF9JMkM9eQpAQCAtMTQ2LDYgKzE1NCw3IEBACiBDT05GSUdfU0FUQV9ISUdIQkFOSz15CiBDT05GSUdfU0FUQV9NVj15CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfSElYNUhEMl9HTUFDPXkKIENPTkZJR19TVU40SV9FTUFDPXkKIENPTkZJR19NQUNCPXkKIENPTkZJR19ORVRfQ0FMWEVEQV9YR01BQz15CkBAIC0xNjAsNiArMTY5LDcgQEAKIENPTkZJR19YSUxJTlhfRU1BQ0xJVEU9eQogQ09ORklHX0FUODAzWF9QSFk9eQogQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQogQ09ORklHX0lDUExVU19QSFk9eQogQ09ORklHX1VTQl9QRUdBU1VTPXkKIENPTkZJR19VU0JfVVNCTkVUPXkKQEAgLTIzNCw2ICsyNDQsNyBAQAogQ09ORklHX1NQSV9URUdSQTIwX1NGTEFTSD15CiBDT05GSUdfU1BJX1RFR1JBMjBfU0xJTks9eQogQ09ORklHX1NQSV9YSUxJTlg9eQorQ09ORklHX1NQSV9TUElERVY9eQogQ09ORklHX1BJTkNUUkxfQVMzNzIyPXkKIENPTkZJR19QSU5DVFJMX1BBTE1BUz15CiBDT05GSUdfUElOQ1RSTF9BUFE4MDg0PXkKQEAgLTI2MSw2ICsyNzIsNyBAQAogQ09ORklHX1NUX1RIRVJNQUxfTUVNTUFQPXkKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfWElMSU5YX1dBVENIRE9HPXkKK0NPTkZJR19BUk1fU1A4MDVfV0FUQ0hET0c9eQogQ09ORklHX09SSU9OX1dBVENIRE9HPXkKIENPTkZJR19TVU5YSV9XQVRDSERPRz15CiBDT05GSUdfTUVTT05fV0FUQ0hET0c9eQpAQCAtMjY4LDYgKzI4MCw3IEBACiBDT05GSUdfTUZEX0JDTTU5MFhYPXkKIENPTkZJR19NRkRfQ1JPU19FQz15CiBDT05GSUdfTUZEX0NST1NfRUNfU1BJPXkKK0NPTkZJR19NRkRfTUFYNzc2ODY9eQogQ09ORklHX01GRF9NQVg4OTA3PXkKIENPTkZJR19NRkRfU0VDX0NPUkU9eQogQ09ORklHX01GRF9TVE1QRT15CkBAIC0yNzksNyArMjkyLDEwIEBACiBDT05GSUdfUkVHVUxBVE9SX0FTMzcyMj15CiBDT05GSUdfUkVHVUxBVE9SX0JDTTU5MFhYPXkKIENPTkZJR19SRUdVTEFUT1JfR1BJTz15CitDT05GSUdfTUZEX1NZU0NPTj15CitDT05GSUdfUE9XRVJfUkVTRVRfU1lTQ09OPXkKIENPTkZJR19SRUdVTEFUT1JfTUFYODkwNz15CitDT05GSUdfUkVHVUxBVE9SX01BWDc3Njg2PXkKIENPTkZJR19SRUdVTEFUT1JfUEFMTUFTPXkKIENPTkZJR19SRUdVTEFUT1JfUzJNUFMxMT15CiBDT05GSUdfUkVHVUxBVE9SX1M1TTg3Njc9eQpAQCAtMzA4LDYgKzMyNCw4IEBACiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NORD15CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19TTkRfVVNCX0FVRElPPXkKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfU09DX1RFR1JBPXkKIENPTkZJR19TTkRfU09DX1RFR1JBX1JUNTY0MD15CkBAIC0zMjEsOSArMzM5LDExIEBACiBDT05GSUdfVVNCX1hIQ0lfTVZFQlU9eQogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfVEVHUkE9eQorQ09ORklHX1VTQl9FSENJX0hDRF9TVEk9eQogQ09ORklHX1VTQl9FSENJX0hDRF9QTEFURk9STT15CiBDT05GSUdfVVNCX0lTUDE3NjBfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9TVEk9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QTEFURk9STT15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9DSElQSURFQT15CkBAIC0zNTUsNiArMzc1LDggQEAKIENPTkZJR19NTUNfTVZTRElPPXkKIENPTkZJR19NTUNfU1VOWEk9eQogQ09ORklHX01NQ19EVz15CitDT05GSUdfTU1DX0RXX0lETUFDPXkKK0NPTkZJR19NTUNfRFdfUExURk09eQogQ09ORklHX01NQ19EV19FWFlOT1M9eQogQ09ORklHX01NQ19EV19ST0NLQ0hJUD15CiBDT05GSUdfTkVXX0xFRFM9eQpAQCAtMzc5LDYgKzQwMSw3IEBACiBDT05GSUdfUlRDX0RSVl9BUzM3MjI9eQogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKIENPTkZJR19SVENfRFJWX01BWDg5MDc9eQorQ09ORklHX1JUQ19EUlZfTUFYNzc2ODY9eQogQ09ORklHX1JUQ19EUlZfUEFMTUFTPXkKIENPTkZJR19SVENfRFJWX1RXTDQwMzA9eQogQ09ORklHX1JUQ19EUlZfVFBTNjU4Nlg9eQpAQCAtNDEzLDYgKzQzNiw3IEBACiBDT05GSUdfTlZFQ19QQVowMD15CiBDT05GSUdfUUNPTV9HU0JJPXkKIENPTkZJR19DT01NT05fQ0xLX1FDT009eQorQ09ORklHX0NPTU1PTl9DTEtfTUFYNzc2ODY9eQogQ09ORklHX0FQUV9NTUNDXzgwODQ9eQogQ09ORklHX01TTV9HQ0NfODY2MD15CiBDT05GSUdfTVNNX01NQ0NfODk2MD15CkBAIC00MjYsMTIgKzQ1MCwxOSBAQAogQ09ORklHX1BXTT15CiBDT05GSUdfUFdNX1RFR1JBPXkKIENPTkZJR19QV01fVlQ4NTAwPXkKK0NPTkZJR19QSFlfSElYNUhEMl9TQVRBPXkKIENPTkZJR19PTUFQX1VTQjI9eQogQ09ORklHX1RJX1BJUEUzPXkKIENPTkZJR19QSFlfTUlQSFkzNjVYPXkKK0NPTkZJR19QSFlfU1RJSDQxWF9VU0I9eQogQ09ORklHX1BIWV9TVU40SV9VU0I9eQogQ09ORklHX0VYVDRfRlM9eQorQ09ORklHX0FVVE9GUzRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19OVEZTX0ZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorQ09ORklHX1VCSUZTX0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfU1FVQVNIRlM9eQogQ09ORklHX1NRVUFTSEZTX0xaTz15CkBAIC00NDAsNiArNDcxLDkgQEAKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfVVRGOD15CiBDT05GSUdfUFJJTlRLX1RJTUU9eQogQ09ORklHX0RFQlVHX0ZTPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjVfZGVmY29uZmlnCmluZGV4IDIyMDU4ZTEuLjgyNGRlNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjVfZGVmY29uZmlnCkBAIC02Nyw5ICs2NywxMSBAQAogQ09ORklHX1NBVEFfTVY9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX05FVF9EU0FfTVY4OEU2MTIzXzYxXzY1PXkKK0NPTkZJR19ORVRfRFNBX01WODhFNjE3MT15CiBDT05GSUdfTVY2NDNYWF9FVEg9eQogQ09ORklHX1I4MTY5PXkKIENPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfTVdMOEs9bQogQ09ORklHX0xJQkVSVEFTPXkKIENPTkZJR19MSUJFUlRBU19TRElPPXkKIENPTkZJR19JTlBVVF9FVkRFVj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnCmluZGV4IGVkMGEwZDEuLjYyN2FjY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnCkBAIC00NSw2ICs0NSw3IEBACiBDT05GSUdfREVWVE1QRlM9eQogQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKIENPTkZJR19NVEQ9eQorQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQpAQCAtNTksMTAgKzYwLDEyIEBACiBDT05GSUdfQUhDSV9NVkVCVT15CiBDT05GSUdfU0FUQV9NVj15CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfTkVUX0RTQV9NVjg4RTYxNzE9eQogQ09ORklHX01WNjQzWFhfRVRIPXkKIENPTkZJR19NVk5FVEE9eQogQ09ORklHX01WUFAyPXkKIENPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfRklYRURfUEhZPXkKIENPTkZJR19NV0lGSUVYPXkKIENPTkZJR19NV0lGSUVYX1NESU89eQogQ09ORklHX0lOUFVUX0VWREVWPXkKQEAgLTcyLDYgKzc1LDcgQEAKIENPTkZJR19TRVJJQUxfODI1MF9EVz15CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKIENPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfTVY2NFhYWD15CiBDT05GSUdfU1BJPXkKIENPTkZJR19TUElfT1JJT049eQpAQCAtODUsNyArODksOSBAQAogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1NPQz15CiBDT05GSUdfU05EX0tJUktXT09EX1NPQz15Ci1DT05GSUdfU05EX0tJUktXT09EX1NPQ19BUk1BREEzNzBfREI9eQorQ09ORklHX1NORF9TT0NfQ1M0Mkw1MV9JMkM9eQorQ09ORklHX1NORF9TT0NfU1BESUY9eQorQ09ORklHX1NORF9TSU1QTEVfQ0FSRD15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfWEhDSV9IQ0Q9eQogQ09ORklHX1VTQl9YSENJX01WRUJVPXkKQEAgLTk2LDYgKzEwMiw3IEBACiBDT05GSUdfTU1DX1NESENJPXkKIENPTkZJR19NTUNfU0RIQ0lfUExURk09eQogQ09ORklHX01NQ19TREhDSV9ET1ZFPXkKK0NPTkZJR19NTUNfU0RIQ0lfUFhBVjM9eQogQ09ORklHX01NQ19NVlNESU89eQogQ09ORklHX0xFRFNfR1BJTz15CiBDT05GSUdfTEVEU19DTEFTUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZwppbmRleCAyNjNhZTM4Li43ZDJhZDMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKQEAgLTIwLDcgKzIwLDYgQEAKIENPTkZJR19BRUFCST15CiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19GUEVfTldGUEU9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKQEAgLTU3LDE0ICs1NiwxMiBAQAogQ09ORklHX01URF9PTkVOQU5EPXkKIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEU9eQogQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19TQ1NJPXkKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19DSFJfREVWX1NHPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15CiBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKQEAgLTgzLDIxICs4MCwyMSBAQAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKK0NPTkZJR19LRVlCT0FSRF9TVE1QRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKIENPTkZJR19IV19SQU5ET009eQotQ09ORklHX0hXX1JBTkRPTV9OT01BRElLPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0dQSU89eQotQ09ORklHX0kyQ19OT01BRElLPXkKIENPTkZJR19ERUJVR19HUElPPXkKK0NPTkZJR19HUElPX1NUTVBFPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfU1RNUEU9eQogQ09ORklHX1JFR1VMQVRPUj15CiBDT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15CiAjIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfQVJNTU1DST15CiBDT05GSUdfTkVXX0xFRFM9eQpAQCAtMTI1LDEyICsxMjIsMTIgQEAKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19JU084ODU5XzE1PXkKK0NPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19TSEExPXkKIENPTkZJR19DUllQVE9fREVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZwppbmRleCBiM2Y4NjY3Li4zZTA5Mjg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnCkBAIC0xMjksMTEgKzEyOSwyNyBAQAogQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CiBDT05GSUdfTUQ9eQogQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9BUkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NBREVOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX0ZBUkFEQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9ISVNJTElDT04gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAogQ09ORklHX0tTODg1MT15CiBDT05GSUdfS1M4ODUxX01MTD15CisjIENPTkZJR19ORVRfVkVORE9SX01JQ1JPQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9RVUFMQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQogQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0CiBDT05GSUdfVElfQ1BTVz15CisjIENPTkZJR19ORVRfVkVORE9SX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1dJWk5FVCBpcyBub3Qgc2V0CiBDT05GSUdfQVQ4MDNYX1BIWT15CiBDT05GSUdfU01TQ19QSFk9eQogQ09ORklHX1VTQl9VU0JORVQ9eQpAQCAtMTYxLDYgKzE3Nyw3IEBACiBDT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9bQorQ09ORklHX1RPVUNIU0NSRUVOX0VEVF9GVDVYMDY9bQogQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDU9bQogQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDc9bQogQ09ORklHX0lOUFVUX01JU0M9eQpAQCAtMjY0LDYgKzI4MSw4IEBACiBDT05GSUdfU05EX0RFQlVHPXkKIENPTkZJR19TTkRfVVNCX0FVRElPPW0KIENPTkZJR19TTkRfU09DPW0KK0NPTkZJR19TTkRfRURNQV9TT0M9bQorQ09ORklHX1NORF9BTTMzWFhfU09DX0VWTT1tCiBDT05GSUdfU05EX09NQVBfU09DPW0KIENPTkZJR19TTkRfT01BUF9TT0NfT01BUF9UV0w0MDMwPW0KIENPTkZJR19TTkRfT01BUF9TT0NfT01BUF9BQkVfVFdMNjA0MD1tCkBAIC0yNzEsNiArMjkwLDcgQEAKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CiBDT05GSUdfVVNCX01PTj15CitDT05GSUdfVVNCX1hIQ0lfSENEPW0KIENPTkZJR19VU0JfV0RNPXkKIENPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfVVNCX0RXQzM9bQpAQCAtMzA2LDYgKzMyNiw4IEBACiBDT05GSUdfRVhUQ09OPXkKIENPTkZJR19FWFRDT05fUEFMTUFTPXkKIENPTkZJR19QV009eQorQ09ORklHX1BXTV9USUVDQVA9eQorQ09ORklHX1BXTV9USUVIUlBXTT15CiBDT05GSUdfUFdNX1RXTD15CiBDT05GSUdfUFdNX1RXTF9MRUQ9eQogQ09ORklHX09NQVBfVVNCMj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtYTVfZGVmY29uZmlnCmluZGV4IGM5MDg5YzkuLmI1OGZiMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtYTVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtYTVfZGVmY29uZmlnCkBAIC0xMiw3ICsxMiw3IEBACiBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQ9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldApAQCAtMjAsNyArMjAsNiBAQAogQ09ORklHX1NPQ19TQU1fVjc9eQogQ09ORklHX1NPQ19TQU1BNUQzPXkKIENPTkZJR19TT0NfU0FNQTVEND15Ci1DT05GSUdfTUFDSF9TQU1BNV9EVD15CiBDT05GSUdfQUVBQkk9eQogQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFk9eQogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MApAQCAtMzAsNiArMjksOCBAQAogQ09ORklHX0tFWEVDPXkKIENPTkZJR19BVVRPX1pSRUxBRERSPXkKIENPTkZJR19WRlA9eQorQ09ORklHX05FT049eQorQ09ORklHX0tFUk5FTF9NT0RFX05FT049eQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX1BNX0RFQlVHPXkKQEAgLTE3NiwxMSArMTc3LDEzIEBACiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQogQ09ORklHX0RNQURFVklDRVM9eQorQ09ORklHX0FUX1hETUFDPXkKICMgQ09ORklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0lJTz15CiBDT05GSUdfQVQ5MV9BREM9eQogQ09ORklHX1BXTT15CiBDT05GSUdfUFdNX0FUTUVMPXkKK0NPTkZJR19QV01fQVRNRUxfVENCPXkKIENPTkZJR19FWFQ0X0ZTPXkKIENPTkZJR19GQU5PVElGWT15CiBDT05GSUdfVkZBVF9GUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NobW9iaWxlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2htb2JpbGVfZGVmY29uZmlnCmluZGV4IGQ3MzQ2YWQuLjYzZmI1MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2htb2JpbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2htb2JpbGVfZGVmY29uZmlnCkBAIC0xNyw3ICsxNyw2IEBACiBDT05GSUdfQVJDSF9SOEE3NzkwPXkKIENPTkZJR19BUkNIX1I4QTc3OTE9eQogQ09ORklHX0FSQ0hfUjhBNzc5ND15Ci1DT05GSUdfTUFDSF9LT0VMU0NIPXkKIENPTkZJR19NQUNIX0xBR0VSPXkKIENPTkZJR19NQUNIX01BUlpFTj15CiAjIENPTkZJR19TV1BfRU1VTEFURSBpcyBub3Qgc2V0CkBAIC0xMjYsNiArMTI1LDcgQEAKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfU09DX1NINF9GU0k9eQogQ09ORklHX1NORF9TT0NfUkNBUj15CitDT05GSUdfU05EX1NPQ19BSzQ2NDI9eQogQ09ORklHX1NORF9TT0NfV004OTc4PXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9FSENJX0hDRD15CkBAIC0xNDYsNiArMTQ2LDggQEAKIENPTkZJR19SVENfRFJWX1MzNTM5MEE9eQogQ09ORklHX0RNQURFVklDRVM9eQogQ09ORklHX1NIX0RNQUU9eQorQ09ORklHX1JDQVJfQVVETUFDX1BQPXkKK0NPTkZJR19SQ0FSX0RNQUM9eQogIyBDT05GSUdfSU9NTVVfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfUFdNPXkKIENPTkZJR19QV01fUkVORVNBU19UUFU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy90ZWdyYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3RlZ3JhX2RlZmNvbmZpZwppbmRleCA4ODhmYzE1Li40MDc1MGY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3RlZ3JhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3RlZ3JhX2RlZmNvbmZpZwpAQCAtOTcsMTAgKzk3LDggQEAKIENPTkZJR19BUERTOTgwMkFMUz15CiBDT05GSUdfSVNMMjkwMDM9eQogQ09ORklHX0VFUFJPTV9BVDI0PXkKLUNPTkZJR19TQ1NJPXkKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19CTEtfREVWX1NSPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogQ09ORklHX1NBVEFfQUhDST15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmgKaW5kZXggOTI3OTNiYS4uZDRlYmY1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaF90aW1lci5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaApAQCAtNzgsNiArNzgsMTUgQEAKIAlyZXR1cm4gdmFsOwogfQogCitzdGF0aWMgaW5saW5lIHU2NCBhcmNoX2NvdW50ZXJfZ2V0X2NudHBjdCh2b2lkKQoreworCXU2NCBjdmFsOworCisJaXNiKCk7CisJYXNtIHZvbGF0aWxlKCJtcnJjIHAxNSwgMCwgJVEwLCAlUjAsIGMxNCIgOiAiPXIiIChjdmFsKSk7CisJcmV0dXJuIGN2YWw7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTY0IGFyY2hfY291bnRlcl9nZXRfY250dmN0KHZvaWQpCiB7CiAJdTY0IGN2YWw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9maXJtd2FyZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZmlybXdhcmUuaAppbmRleCAyYzlmMTBkLi44OWFlZmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAkvKgogCSAqIEVudGVycyBDUFUgaWRsZSBtb2RlCiAJICovCi0JaW50ICgqZG9faWRsZSkodm9pZCk7CisJaW50ICgqZG9faWRsZSkodW5zaWduZWQgbG9uZyBtb2RlKTsKIAkvKgogCSAqIFNldHMgYm9vdCBhZGRyZXNzIG9mIHNwZWNpZmllZCBwaHlzaWNhbCBDUFUKIAkgKi8KQEAgLTQxLDYgKzQxLDE0IEBACiAJICogSW5pdGlhbGl6ZXMgTDIgY2FjaGUKIAkgKi8KIAlpbnQgKCpsMngwX2luaXQpKHZvaWQpOworCS8qCisJICogRW50ZXIgc3lzdGVtLXdpZGUgc3VzcGVuZC4KKwkgKi8KKwlpbnQgKCpzdXNwZW5kKSh2b2lkKTsKKwkvKgorCSAqIFJlc3RvcmUgc3RhdGUgb2YgcHJpdmlsZWdlZCBoYXJkd2FyZSBhZnRlciBzeXN0ZW0td2lkZSBzdXNwZW5kLgorCSAqLworCWludCAoKnJlc3VtZSkodm9pZCk7CiB9OwogCiAvKiBHbG9iYWwgcG9pbnRlciBmb3IgY3VycmVudCBmaXJtd2FyZV9vcHMgc3RydWN0dXJlLCBjYW4ndCBiZSBOVUxMLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMTgwNTY3NC4uZGI1OGRlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCkBAIC00NywxMyArNDcsMTMgQEAKICAqIEdlbmVyaWMgSU8gcmVhZC93cml0ZS4gIFRoZXNlIHBlcmZvcm0gbmF0aXZlLWVuZGlhbiBhY2Nlc3Nlcy4gIE5vdGUKICAqIHRoYXQgc29tZSBhcmNoaXRlY3R1cmVzIHdpbGwgd2FudCB0byByZS1kZWZpbmUgX19yYXdfe3JlYWQsd3JpdGV9dy4KICAqLwotZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzYih2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBieXRlbGVuKTsKLWV4dGVybiB2b2lkIF9fcmF3X3dyaXRlc3codm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7Ci1leHRlcm4gdm9pZCBfX3Jhd193cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwordm9pZCBfX3Jhd193cml0ZXNiKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGJ5dGVsZW4pOwordm9pZCBfX3Jhd193cml0ZXN3KHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOwordm9pZCBfX3Jhd193cml0ZXNsKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwogCi1leHRlcm4gdm9pZCBfX3Jhd19yZWFkc2IoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgYnl0ZWxlbik7Ci1leHRlcm4gdm9pZCBfX3Jhd19yZWFkc3coY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7Ci1leHRlcm4gdm9pZCBfX3Jhd19yZWFkc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Cit2b2lkIF9fcmF3X3JlYWRzYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBieXRlbGVuKTsKK3ZvaWQgX19yYXdfcmVhZHN3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOwordm9pZCBfX3Jhd19yZWFkc2woY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CiAKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CiAvKgpAQCAtNjksNiArNjksNyBAQAogICogd3JpdGViYWNrIGFkZHJlc3NpbmcgbW9kZXMgYXMgdGhlc2UgaW5jdXIgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZQogICogb3ZlcmhlYWQgKHRoZSBhZGRyZXNzIGdlbmVyYXRpb24gbXVzdCBiZSBlbXVsYXRlZCBpbiBzb2Z0d2FyZSkuCiAgKi8KKyNkZWZpbmUgX19yYXdfd3JpdGV3IF9fcmF3X3dyaXRldwogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRldyh1MTYgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJYXNtIHZvbGF0aWxlKCJzdHJoICUxLCAlMCIKQEAgLTc2LDYgKzc3LDcgQEAKIAkJICAgICA6ICJyIiAodmFsKSk7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZHcgX19yYXdfcmVhZHcKIHN0YXRpYyBpbmxpbmUgdTE2IF9fcmF3X3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1MTYgdmFsOwpAQCAtODYsNiArODgsNyBAQAogfQogI2VuZGlmCiAKKyNkZWZpbmUgX19yYXdfd3JpdGViIF9fcmF3X3dyaXRlYgogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1OCB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlhc20gdm9sYXRpbGUoInN0cmIgJTEsICUwIgpAQCAtOTMsNiArOTYsNyBAQAogCQkgICAgIDogInIiICh2YWwpKTsKIH0KIAorI2RlZmluZSBfX3Jhd193cml0ZWwgX19yYXdfd3JpdGVsCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVsKHUzMiB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlhc20gdm9sYXRpbGUoInN0ciAlMSwgJTAiCkBAIC0xMDAsNiArMTA0LDcgQEAKIAkJICAgICA6ICJyIiAodmFsKSk7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZGIgX19yYXdfcmVhZGIKIHN0YXRpYyBpbmxpbmUgdTggX19yYXdfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXU4IHZhbDsKQEAgLTEwOSw2ICsxMTQsNyBAQAogCXJldHVybiB2YWw7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZGwgX19yYXdfcmVhZGwKIHN0YXRpYyBpbmxpbmUgdTMyIF9fcmF3X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1MzIgdmFsOwpAQCAtMjY3LDIwICsyNzMsNiBAQAogI2RlZmluZSBpbnNsKHAsZCxsKQkJX19yYXdfcmVhZHNsKF9faW8ocCksZCxsKQogI2VuZGlmCiAKLSNkZWZpbmUgb3V0Yl9wKHZhbCxwb3J0KQlvdXRiKCh2YWwpLChwb3J0KSkKLSNkZWZpbmUgb3V0d19wKHZhbCxwb3J0KQlvdXR3KCh2YWwpLChwb3J0KSkKLSNkZWZpbmUgb3V0bF9wKHZhbCxwb3J0KQlvdXRsKCh2YWwpLChwb3J0KSkKLSNkZWZpbmUgaW5iX3AocG9ydCkJCWluYigocG9ydCkpCi0jZGVmaW5lIGlud19wKHBvcnQpCQlpbncoKHBvcnQpKQotI2RlZmluZSBpbmxfcChwb3J0KQkJaW5sKChwb3J0KSkKLQotI2RlZmluZSBvdXRzYl9wKHBvcnQsZnJvbSxsZW4pCW91dHNiKHBvcnQsZnJvbSxsZW4pCi0jZGVmaW5lIG91dHN3X3AocG9ydCxmcm9tLGxlbikJb3V0c3cocG9ydCxmcm9tLGxlbikKLSNkZWZpbmUgb3V0c2xfcChwb3J0LGZyb20sbGVuKQlvdXRzbChwb3J0LGZyb20sbGVuKQotI2RlZmluZSBpbnNiX3AocG9ydCx0byxsZW4pCWluc2IocG9ydCx0byxsZW4pCi0jZGVmaW5lIGluc3dfcChwb3J0LHRvLGxlbikJaW5zdyhwb3J0LHRvLGxlbikKLSNkZWZpbmUgaW5zbF9wKHBvcnQsdG8sbGVuKQlpbnNsKHBvcnQsdG8sbGVuKQotCiAvKgogICogU3RyaW5nIHZlcnNpb24gb2YgSU8gbWVtb3J5IGFjY2VzcyBvcHM6CiAgKi8KQEAgLTM0Nyw0MCArMzM5LDQyIEBACiAjZGVmaW5lIGlvdW5tYXAJCQkJX19hcm1faW91bm1hcAogCiAvKgotICogaW97cmVhZCx3cml0ZX17OCwxNiwzMn0gbWFjcm9zCisgKiBpb3tyZWFkLHdyaXRlfXsxNiwzMn1iZSgpIG1hY3JvcwogICovCi0jaWZuZGVmIGlvcmVhZDgKLSNkZWZpbmUgaW9yZWFkOChwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gX19yYXdfcmVhZGIocCk7IF9faW9ybWIoKTsgX192OyB9KQotI2RlZmluZSBpb3JlYWQxNihwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KV9fcmF3X3JlYWR3KHApKTsgX19pb3JtYigpOyBfX3Y7IH0pCi0jZGVmaW5lIGlvcmVhZDMyKHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBsZTMyX3RvX2NwdSgoX19mb3JjZSBfX2xlMzIpX19yYXdfcmVhZGwocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKKyNkZWZpbmUgaW9yZWFkMTZiZShwKQkJKHsgX191MTYgX192ID0gYmUxNl90b19jcHUoKF9fZm9yY2UgX19iZTE2KV9fcmF3X3JlYWR3KHApKTsgX19pb3JtYigpOyBfX3Y7IH0pCisjZGVmaW5lIGlvcmVhZDMyYmUocCkJCSh7IF9fdTMyIF9fdiA9IGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMilfX3Jhd19yZWFkbChwKSk7IF9faW9ybWIoKTsgX192OyB9KQogCi0jZGVmaW5lIGlvcmVhZDE2YmUocCkJKHsgdW5zaWduZWQgaW50IF9fdiA9IGJlMTZfdG9fY3B1KChfX2ZvcmNlIF9fYmUxNilfX3Jhd19yZWFkdyhwKSk7IF9faW9ybWIoKTsgX192OyB9KQotI2RlZmluZSBpb3JlYWQzMmJlKHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBiZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpX19yYXdfcmVhZGwocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKKyNkZWZpbmUgaW93cml0ZTE2YmUodixwKQkoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNiljcHVfdG9fYmUxNih2KSwgcCk7IH0pCisjZGVmaW5lIGlvd3JpdGUzMmJlKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpY3B1X3RvX2JlMzIodiksIHApOyB9KQogCi0jZGVmaW5lIGlvd3JpdGU4KHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWIodiwgcCk7IH0pCi0jZGVmaW5lIGlvd3JpdGUxNih2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGV3KChfX2ZvcmNlIF9fdTE2KWNwdV90b19sZTE2KHYpLCBwKTsgfSkKLSNkZWZpbmUgaW93cml0ZTMyKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpY3B1X3RvX2xlMzIodiksIHApOyB9KQotCi0jZGVmaW5lIGlvd3JpdGUxNmJlKHYscCkgKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZXcoKF9fZm9yY2UgX191MTYpY3B1X3RvX2JlMTYodiksIHApOyB9KQotI2RlZmluZSBpb3dyaXRlMzJiZSh2LHApICh7IF9faW93bWIoKTsgX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKWNwdV90b19iZTMyKHYpLCBwKTsgfSkKLQotI2RlZmluZSBpb3JlYWQ4X3JlcChwLGQsYykJX19yYXdfcmVhZHNiKHAsZCxjKQotI2RlZmluZSBpb3JlYWQxNl9yZXAocCxkLGMpCV9fcmF3X3JlYWRzdyhwLGQsYykKLSNkZWZpbmUgaW9yZWFkMzJfcmVwKHAsZCxjKQlfX3Jhd19yZWFkc2wocCxkLGMpCi0KLSNkZWZpbmUgaW93cml0ZThfcmVwKHAscyxjKQlfX3Jhd193cml0ZXNiKHAscyxjKQotI2RlZmluZSBpb3dyaXRlMTZfcmVwKHAscyxjKQlfX3Jhd193cml0ZXN3KHAscyxjKQotI2RlZmluZSBpb3dyaXRlMzJfcmVwKHAscyxjKQlfX3Jhd193cml0ZXNsKHAscyxjKQotCisjaWZuZGVmIGlvcG9ydF9tYXAKKyNkZWZpbmUgaW9wb3J0X21hcCBpb3BvcnRfbWFwCiBleHRlcm4gdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKTsKKyNlbmRpZgorI2lmbmRlZiBpb3BvcnRfdW5tYXAKKyNkZWZpbmUgaW9wb3J0X3VubWFwIGlvcG9ydF91bm1hcAogZXh0ZXJuIHZvaWQgaW9wb3J0X3VubWFwKHZvaWQgX19pb21lbSAqYWRkcik7CiAjZW5kaWYKIAogc3RydWN0IHBjaV9kZXY7CiAKKyNkZWZpbmUgcGNpX2lvdW5tYXAgcGNpX2lvdW5tYXAKIGV4dGVybiB2b2lkIHBjaV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcik7CiAKIC8qCisgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCisgKiBhY2Nlc3MKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvLmg+CisKKy8qCiAgKiBjYW4gdGhlIGhhcmR3YXJlIG1hcCB0aGlzIGludG8gb25lIHNlZ21lbnQgb3Igbm90LCBnaXZlbiBubyBvdGhlcgogICogY29uc3RyYWludHMuCiAgKi8KQEAgLTQwMiwxNyArMzk2LDYgQEAKICNlbmRpZgogCiAvKgotICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQotICogYWNjZXNzCi0gKi8KLSNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIocCkJX192YShwKQotCi0vKgotICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgotICovCi0jZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCi0KLS8qCiAgKiBSZWdpc3RlciBJU0EgbWVtb3J5IGFuZCBwb3J0IGxvY2F0aW9ucyBmb3IgZ2xpYmMgaW9wbC9pbmIvb3V0YgogICogZW11bGF0aW9uLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3BjaS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9wY2kuaAppbmRleCA3ZmM0Mjc4Li44MjkyYjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3BjaS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvcGNpLmgKQEAgLTIyLDYgKzIyLDkgQEAKICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKIAlpbnQJCWRvbWFpbjsKICNlbmRpZgorI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJc3RydWN0IG1zaV9jb250cm9sbGVyICptc2lfY3RybDsKKyNlbmRpZgogCXN0cnVjdCBwY2lfb3BzCSpvcHM7CiAJaW50CQlucl9jb250cm9sbGVyczsKIAl2b2lkCQkqKnByaXZhdGVfZGF0YTsKQEAgLTM2LDggKzM5LDYgQEAKIAkJCQkJICByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCiAJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCiAJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKTsKLQl2b2lkCQkoKmFkZF9idXMpKHN0cnVjdCBwY2lfYnVzICpidXMpOwotCXZvaWQJCSgqcmVtb3ZlX2J1cykoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiB9OwogCiAvKgpAQCAtNDcsNiArNDgsOSBAQAogI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOUwogCWludAkJZG9tYWluOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKm1zaV9jdHJsOworI2VuZGlmCiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCWludAkJYnVzbnI7CQkvKiBwcmltYXJ5IGJ1cyBudW1iZXIJCQkqLwogCXU2NAkJbWVtX29mZnNldDsJLyogYnVzLT5jcHUgbWVtb3J5IG1hcHBpbmcgb2Zmc2V0CSovCkBAIC02NSw4ICs2OSw2IEBACiAJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAogCQkJCQkgIHJlc291cmNlX3NpemVfdCBzaXplLAogCQkJCQkgIHJlc291cmNlX3NpemVfdCBhbGlnbik7Ci0Jdm9pZAkJKCphZGRfYnVzKShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKLQl2b2lkCQkoKnJlbW92ZV9idXMpKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCXZvaWQJCSpwcml2YXRlX2RhdGE7CS8qIHBsYXRmb3JtIGNvbnRyb2xsZXIgcHJpdmF0ZSBkYXRhCSovCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCmluZGV4IGU3MzEwMTguLjE4NGRlZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCkBAIC0yNzQsMTEgKzI3NCwxMyBAQAogICogdHJhbnNsYXRpb24gZm9yIHRyYW5zbGF0aW5nIERNQSBhZGRyZXNzZXMuICBVc2UgdGhlIGRyaXZlcgogICogRE1BIHN1cHBvcnQgLSBzZWUgZG1hLW1hcHBpbmcuaC4KICAqLworI2RlZmluZSB2aXJ0X3RvX3BoeXMgdmlydF90b19waHlzCiBzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHZpcnRfdG9fcGh5cyhjb25zdCB2b2xhdGlsZSB2b2lkICp4KQogewogCXJldHVybiBfX3ZpcnRfdG9fcGh5cygodW5zaWduZWQgbG9uZykoeCkpOwogfQogCisjZGVmaW5lIHBoeXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKIHN0YXRpYyBpbmxpbmUgdm9pZCAqcGh5c190b192aXJ0KHBoeXNfYWRkcl90IHgpCiB7CiAJcmV0dXJuICh2b2lkICopX19waHlzX3RvX3ZpcnQoeCk7CkBAIC0zMjIsMTEgKzMyNCwxMyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVklSVF9UT19CVVMKKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19idXMKIHN0YXRpYyBpbmxpbmUgX19kZXByZWNhdGVkIHVuc2lnbmVkIGxvbmcgdmlydF90b19idXModm9pZCAqeCkKIHsKIAlyZXR1cm4gX192aXJ0X3RvX2J1cygodW5zaWduZWQgbG9uZyl4KTsKIH0KIAorI2RlZmluZSBidXNfdG9fdmlydCBidXNfdG9fdmlydAogc3RhdGljIGlubGluZSBfX2RlcHJlY2F0ZWQgdm9pZCAqYnVzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyB4KQogewogCXJldHVybiAodm9pZCAqKV9fYnVzX3RvX3ZpcnQoeCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggYzNhODM2OS4uZDljZjEzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMTIsNyArMTIsNyBAQAogI2lmbmRlZiBfX0FSTV9QRVJGX0VWRU5UX0hfXwogI2RlZmluZSBfX0FSTV9QRVJGX0VWRU5UX0hfXwogCi0jaWZkZWYgQ09ORklHX0hXX1BFUkZfRVZFTlRTCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiBzdHJ1Y3QgcHRfcmVnczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwZXJmX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcG11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaAppbmRleCAwYjY0OGM1Li5iMTU5NmJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaApAQCAtMTUsNiArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAorI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisKIC8qCiAgKiBzdHJ1Y3QgYXJtX3BtdV9wbGF0ZGF0YSAtIEFSTSBQTVUgcGxhdGZvcm0gZGF0YQogICoKQEAgLTY2LDE5ICs2OCwyNSBAQAogCS8qCiAJICogVGhlIGV2ZW50cyB0aGF0IGFyZSBhY3RpdmUgb24gdGhlIFBNVSBmb3IgdGhlIGdpdmVuIGluZGV4LgogCSAqLwotCXN0cnVjdCBwZXJmX2V2ZW50CSoqZXZlbnRzOworCXN0cnVjdCBwZXJmX2V2ZW50CSpldmVudHNbQVJNUE1VX01BWF9IV0VWRU5UU107CiAKIAkvKgogCSAqIEEgMSBiaXQgZm9yIGFuIGluZGV4IGluZGljYXRlcyB0aGF0IHRoZSBjb3VudGVyIGlzIGJlaW5nIHVzZWQgZm9yCiAJICogYW4gZXZlbnQuIEEgMCBtZWFucyB0aGF0IHRoZSBjb3VudGVyIGNhbiBiZSB1c2VkLgogCSAqLwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICp1c2VkX21hc2s7CisJREVDTEFSRV9CSVRNQVAodXNlZF9tYXNrLCBBUk1QTVVfTUFYX0hXRVZFTlRTKTsKIAogCS8qCiAJICogSGFyZHdhcmUgbG9jayB0byBzZXJpYWxpemUgYWNjZXNzZXMgdG8gUE1VIHJlZ2lzdGVycy4gTmVlZGVkIGZvciB0aGUKIAkgKiByZWFkL21vZGlmeS93cml0ZSBzZXF1ZW5jZXMuCiAJICovCiAJcmF3X3NwaW5sb2NrX3QJCXBtdV9sb2NrOworCisJLyoKKwkgKiBXaGVuIHVzaW5nIHBlcmNwdSBJUlFzLCB3ZSBuZWVkIGEgcGVyY3B1IGRldl9pZC4gUGxhY2UgaXQgaGVyZSBhcyB3ZQorCSAqIGFscmVhZHkgaGF2ZSB0byBhbGxvY2F0ZSB0aGlzIHN0cnVjdCBwZXIgY3B1LgorCSAqLworCXN0cnVjdCBhcm1fcG11CQkqcGVyY3B1X3BtdTsKIH07CiAKIHN0cnVjdCBhcm1fcG11IHsKQEAgLTEwNyw3ICsxMTUsOCBAQAogCXN0cnVjdCBtdXRleAlyZXNlcnZlX211dGV4OwogCXU2NAkJbWF4X3BlcmlvZDsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwbGF0X2RldmljZTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cwkqKCpnZXRfaHdfZXZlbnRzKSh2b2lkKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cwlfX3BlcmNwdSAqaHdfZXZlbnRzOworCXN0cnVjdCBub3RpZmllcl9ibG9jawlob3RwbHVnX25iOwogfTsKIAogI2RlZmluZSB0b19hcm1fcG11KHApIChjb250YWluZXJfb2YocCwgc3RydWN0IGFybV9wbXUsIHBtdSkpCkBAIC0xMjcsNiArMTM2LDI3IEBACiAJCQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSwKIAkJICAgICB1MzIgcmF3X2V2ZW50X21hc2spOwogCitzdHJ1Y3QgcG11X3Byb2JlX2luZm8geworCXVuc2lnbmVkIGludCBjcHVpZDsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwlpbnQgKCppbml0KShzdHJ1Y3QgYXJtX3BtdSAqKTsKK307CisKKyNkZWZpbmUgUE1VX1BST0JFKF9jcHVpZCwgX21hc2ssIF9mbikJXAorewkJCQkJXAorCS5jcHVpZCA9IChfY3B1aWQpLAkJXAorCS5tYXNrID0gKF9tYXNrKSwJCVwKKwkuaW5pdCA9IChfZm4pLAkJCVwKK30KKworI2RlZmluZSBBUk1fUE1VX1BST0JFKF9jcHVpZCwgX2ZuKSBcCisJUE1VX1BST0JFKF9jcHVpZCwgQVJNX0NQVV9QQVJUX01BU0ssIF9mbikKKworI2RlZmluZSBBUk1fUE1VX1hTQ0FMRV9NQVNLCSgoMHhmZiA8PCAyNCkgfCBBUk1fQ1BVX1hTQ0FMRV9BUkNIX01BU0spCisKKyNkZWZpbmUgWFNDQUxFX1BNVV9QUk9CRShfdmVyc2lvbiwgX2ZuKSBcCisJUE1VX1BST0JFKEFSTV9DUFVfSU1QX0lOVEVMIDw8IDI0IHwgX3ZlcnNpb24sIEFSTV9QTVVfWFNDQUxFX01BU0ssIF9mbikKKwogI2VuZGlmIC8qIENPTkZJR19IV19QRVJGX0VWRU5UUyAqLwogCiAjZW5kaWYgLyogX19BUk1fUE1VX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9hc205MjYwLlMgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL2FzbTkyNjAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTJmODViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9hc205MjYwLlMKQEAgLTAsMCArMSwyOSBAQAorLyogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCisgKiAgTW9kaWZpZWQgZm9yIEFTTTkyNjAgYnkgT2xla3NpaiBSZW1lcGwgPGxpbnV4QHJlbXBlbC1wcml2YXQuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworCQkubWFjcm8JYWRkcnVhcnQsIHJwLCBydiwgdG1wCisJCWxkcglccnAsID0gQ09ORklHX0RFQlVHX1VBUlRfUEhZUworCQlsZHIJXHJ2LCA9IENPTkZJR19ERUJVR19VQVJUX1ZJUlQKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKwkJLmVuZG0KKworCQkubWFjcm8Jc2VuZHVhcnQscmQscngKKwkJc3RyCVxyZCwgW1xyeCwgIzB4NTBdCUAgVFhEQVRBCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4CisxMDAyOgkJbGRyCVxyZCwgW1xyeCwgIzB4NjBdCUAgU1RBVAorCQl0c3QJXHJkLCAjMSA8PCAyNwkJQCBUWEVNUFRZCisJCWJlcQkxMDAyYgkJCUAgd2FpdCB1bnRpbCB0cmFuc21pdCBkb25lCisJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL3JlbmVzYXMtc2NpZi5TIGIvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9yZW5lc2FzLXNjaWYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzgyMGE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9yZW5lc2FzLXNjaWYuUwpAQCAtMCwwICsxLDUyIEBACisvKgorICogUmVuZXNhcyBTQ0lGKEEpIGRlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqIEJhc2VkIG9uIHI4YTc3OTAuUworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2RlZmluZSBTQ0lGX1BIWVMJQ09ORklHX0RFQlVHX1VBUlRfUEhZUworI2RlZmluZSBTQ0lGX1ZJUlQJKChTQ0lGX1BIWVMgJiAweDAwZmZmZmZmKSB8IDB4ZmQwMDAwMDApCisKKyNpZiBDT05GSUdfREVCVUdfVUFSVF9QSFlTIDwgMHhlNmUwMDAwMAorLyogU0NJRkEgKi8KKyNkZWZpbmUgRlREUgkJMHgyMAorI2RlZmluZSBGU1IJCTB4MTQKKyNlbHNlCisvKiBTQ0lGICovCisjZGVmaW5lIEZURFIJCTB4MGMKKyNkZWZpbmUgRlNSCQkweDEwCisjZW5kaWYKKworI2RlZmluZSBUREZFCSgxIDw8IDUpCisjZGVmaW5lIFRFTkQJKDEgPDwgNikKKworCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2LCB0bXAKKwlsZHIJXHJwLCA9U0NJRl9QSFlTCisJbGRyCVxydiwgPVNDSUZfVklSVAorCS5lbmRtCisKKwkubWFjcm8Jd2FpdHVhcnQsIHJkLCByeAorMTAwMToJbGRyaAlccmQsIFtccngsICNGU1JdCisJdHN0CVxyZCwgI1RERkUKKwliZXEJMTAwMWIKKwkuZW5kbQorCisJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKKwlzdHJiCVxyZCwgW1xyeCwgI0ZURFJdCisJbGRyaAlccmQsIFtccngsICNGU1JdCisJYmljCVxyZCwgXHJkLCAjVEVORAorCXN0cmgJXHJkLCBbXHJ4LCAjRlNSXQorCS5lbmRtCisKKwkubWFjcm8JYnVzeXVhcnQsIHJkLCByeAorMTAwMToJbGRyaAlccmQsIFtccngsICNGU1JdCisJdHN0CVxyZCwgI1RFTkQKKwliZXEJMTAwMWIKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL3NhMTEwMC5TCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCnJlbmFtZSB0byBhcmNoL2FybS9pbmNsdWRlL2RlYnVnL3NhMTEwMC5TCmluZGV4IDUzMDc3MmQuLmEwYWU0ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvc2ExMTAwLlMKQEAgLTEsNCArMSw0IEBACi0vKiBhcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworLyogYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9zYTExMDAuUwogICoKICAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgogICoKQEAgLTEwLDcgKzEwLDEzIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAqLwotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBVVENSMwkJMHgwYworI2RlZmluZSBVVERSCQkweDE0CisjZGVmaW5lIFVUU1IxCQkweDIwCisjZGVmaW5lIFVUQ1IzX1RYRQkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IEVuYWJsZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVRTUjFfVEJZCTB4MDAwMDAwMDEJLyogVHJhbnNtaXR0ZXIgQnVzWSAocmVhZCkgICAgICAgICAqLworI2RlZmluZSBVVFNSMV9UTkYJMHgwMDAwMDAwNAkvKiBUcmFuc21pdCBGSUZPIE5vdCBGdWxsIChyZWFkKSAgICovCiAKIAkJLm1hY3JvCWFkZHJ1YXJ0LCBycCwgcnYsIHRtcAogCQltcmMJcDE1LCAwLCBccnAsIGMxLCBjMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IDM4ZGRkOWYuLjhkY2JlZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTgyLDcgKzgyLDcgQEAKIG9iai0kKENPTkZJR19DUFVfUEo0KQkJKz0gcGo0LWNwMC5vCiBvYmotJChDT05GSUdfQ1BVX1BKNEIpCQkrPSBwajQtY3AwLm8KIG9iai0kKENPTkZJR19JV01NWFQpCQkrPSBpd21teHQubwotb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkrPSBwZXJmX3JlZ3Mubworb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkrPSBwZXJmX3JlZ3MubyBwZXJmX2NhbGxjaGFpbi5vCiBvYmotJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfZXZlbnQubyBwZXJmX2V2ZW50X2NwdS5vCiBBRkxBR1NfaXdtbXh0Lm8JCQk6PSAtV2EsLW1jcHU9aXdtbXh0CiBvYmotJChDT05GSUdfQVJNX0NQVV9UT1BPTE9HWSkgICs9IHRvcG9sb2d5Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYyBiL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYwppbmRleCAxN2EyNmMxLi5kYWFmZjczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCkBAIC0xOCw2ICsxOCwxNSBAQAogCiBzdGF0aWMgaW50IGRlYnVnX3BjaTsKIAorI2lmZGVmIENPTkZJR19QQ0lfTVNJCitzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKnBjaWJpb3NfbXNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXNkYXRhID0gZGV2LT5idXMtPnN5c2RhdGE7CisKKwlyZXR1cm4gc3lzZGF0YS0+bXNpX2N0cmw7Cit9CisjZW5kaWYKKwogLyoKICAqIFdlIGNhbid0IHVzZSBwY2lfZ2V0X2RldmljZSgpIGhlcmUgc2luY2Ugd2UgYXJlCiAgKiBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4KQEAgLTM2MCwyMCArMzY5LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpYmlvc19maXh1cF9idXMpOwogCi12b2lkIHBjaWJpb3NfYWRkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyA9IGJ1cy0+c3lzZGF0YTsKLQlpZiAoc3lzLT5hZGRfYnVzKQotCQlzeXMtPmFkZF9idXMoYnVzKTsKLX0KLQotdm9pZCBwY2liaW9zX3JlbW92ZV9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBidXMtPnN5c2RhdGE7Ci0JaWYgKHN5cy0+cmVtb3ZlX2J1cykKLQkJc3lzLT5yZW1vdmVfYnVzKGJ1cyk7Ci19Ci0KIC8qCiAgKiBTd2l6emxlIHRoZSBkZXZpY2UgcGluIGVhY2ggdGltZSB3ZSBjcm9zcyBhIGJyaWRnZS4gIElmIGEgcGxhdGZvcm0gZG9lcwogICogbm90IHByb3ZpZGUgYSBzd2l6emxlIGZ1bmN0aW9uLCB3ZSBwZXJmb3JtIHRoZSBzdGFuZGFyZCBQQ0kgc3dpenpsaW5nLgpAQCAtNDcxLDEyICs0NjYsMTMgQEAKICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKIAkJc3lzLT5kb21haW4gID0gaHctPmRvbWFpbjsKICNlbmRpZgorI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJCXN5cy0+bXNpX2N0cmwgPSBody0+bXNpX2N0cmw7CisjZW5kaWYKIAkJc3lzLT5idXNuciAgID0gYnVzbnI7CiAJCXN5cy0+c3dpenpsZSA9IGh3LT5zd2l6emxlOwogCQlzeXMtPm1hcF9pcnEgPSBody0+bWFwX2lycTsKIAkJc3lzLT5hbGlnbl9yZXNvdXJjZSA9IGh3LT5hbGlnbl9yZXNvdXJjZTsKLQkJc3lzLT5hZGRfYnVzID0gaHctPmFkZF9idXM7Ci0JCXN5cy0+cmVtb3ZlX2J1cyA9IGh3LT5yZW1vdmVfYnVzOwogCQlJTklUX0xJU1RfSEVBRCgmc3lzLT5yZXNvdXJjZXMpOwogCiAJCWlmIChody0+cHJpdmF0ZV9kYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfY2FsbGNoYWluLmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTAyYWU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfY2FsbGNoYWluLmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBBUk0gY2FsbGNoYWluIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgcGljb0NoaXAgRGVzaWducywgTHRkLiwgSmFtaWUgSWxlcworICogQ29weXJpZ2h0IChDKSAyMDEwIEFSTSBMdGQuLCBXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25AYXJtLmNvbT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gdGhlIEFSTSBPUHJvZmlsZSBiYWNrdHJhY2UgY29kZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorCisvKgorICogVGhlIHJlZ2lzdGVycyB3ZSdyZSBpbnRlcmVzdGVkIGluIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSB2YXJpYWJsZQorICogbGVuZ3RoIHNhdmVkIHJlZ2lzdGVyIHN0cnVjdHVyZS4gVGhlIGZwIHBvaW50cyBhdCB0aGUgZW5kIG9mIHRoaXMKKyAqIHN0cnVjdHVyZSBzbyB0aGUgYWRkcmVzcyBvZiB0aGlzIHN0cnVjdCBpczoKKyAqIChzdHJ1Y3QgZnJhbWVfdGFpbCAqKSh4eHgtPmZwKS0xCisgKgorICogVGhpcyBjb2RlIGhhcyBiZWVuIGFkYXB0ZWQgZnJvbSB0aGUgQVJNIE9Qcm9maWxlIHN1cHBvcnQuCisgKi8KK3N0cnVjdCBmcmFtZV90YWlsIHsKKwlzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKmZwOworCXVuc2lnbmVkIGxvbmcgc3A7CisJdW5zaWduZWQgbG9uZyBscjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBHZXQgdGhlIHJldHVybiBhZGRyZXNzIGZvciBhIHNpbmdsZSBzdGFja2ZyYW1lIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZQorICogbmV4dCBmcmFtZSB0YWlsLgorICovCitzdGF0aWMgc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICoKK3VzZXJfYmFja3RyYWNlKHN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqdGFpbCwKKwkgICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgZnJhbWVfdGFpbCBidWZ0YWlsOworCXVuc2lnbmVkIGxvbmcgZXJyOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHRhaWwsIHNpemVvZihidWZ0YWlsKSkpCisJCXJldHVybiBOVUxMOworCisJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKwllcnIgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKCZidWZ0YWlsLCB0YWlsLCBzaXplb2YoYnVmdGFpbCkpOworCXBhZ2VmYXVsdF9lbmFibGUoKTsKKworCWlmIChlcnIpCisJCXJldHVybiBOVUxMOworCisJcGVyZl9jYWxsY2hhaW5fc3RvcmUoZW50cnksIGJ1ZnRhaWwubHIpOworCisJLyoKKwkgKiBGcmFtZSBwb2ludGVycyBzaG91bGQgc3RyaWN0bHkgcHJvZ3Jlc3MgYmFjayB1cCB0aGUgc3RhY2sKKwkgKiAodG93YXJkcyBoaWdoZXIgYWRkcmVzc2VzKS4KKwkgKi8KKwlpZiAodGFpbCArIDEgPj0gYnVmdGFpbC5mcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gYnVmdGFpbC5mcCAtIDE7Cit9CisKK3ZvaWQKK3BlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICp0YWlsOworCisJaWYgKHBlcmZfZ3Vlc3RfY2JzICYmIHBlcmZfZ3Vlc3RfY2JzLT5pc19pbl9ndWVzdCgpKSB7CisJCS8qIFdlIGRvbid0IHN1cHBvcnQgZ3Vlc3Qgb3MgY2FsbGNoYWluIG5vdyAqLworCQlyZXR1cm47CisJfQorCisJcGVyZl9jYWxsY2hhaW5fc3RvcmUoZW50cnksIHJlZ3MtPkFSTV9wYyk7CisKKwlpZiAoIWN1cnJlbnQtPm1tKQorCQlyZXR1cm47CisKKwl0YWlsID0gKHN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqKXJlZ3MtPkFSTV9mcCAtIDE7CisKKwl3aGlsZSAoKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKSAmJgorCSAgICAgICB0YWlsICYmICEoKHVuc2lnbmVkIGxvbmcpdGFpbCAmIDB4MykpCisJCXRhaWwgPSB1c2VyX2JhY2t0cmFjZSh0YWlsLCBlbnRyeSk7Cit9CisKKy8qCisgKiBHZXRzIGNhbGxlZCBieSB3YWxrX3N0YWNrZnJhbWUoKSBmb3IgZXZlcnkgc3RhY2tmcmFtZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAorICogd2hpc3QgdW53aW5kaW5nIHRoZSBzdGFja2ZyYW1lIGFuZCBpcyBsaWtlIGEgc3Vicm91dGluZSByZXR1cm4gc28gd2UgdXNlCisgKiB0aGUgUEMuCisgKi8KK3N0YXRpYyBpbnQKK2NhbGxjaGFpbl90cmFjZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnIsCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSA9IGRhdGE7CisJcGVyZl9jYWxsY2hhaW5fc3RvcmUoZW50cnksIGZyLT5wYyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3BlcmZfY2FsbGNoYWluX2tlcm5lbChzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc3RhY2tmcmFtZSBmcjsKKworCWlmIChwZXJmX2d1ZXN0X2NicyAmJiBwZXJmX2d1ZXN0X2Nicy0+aXNfaW5fZ3Vlc3QoKSkgeworCQkvKiBXZSBkb24ndCBzdXBwb3J0IGd1ZXN0IG9zIGNhbGxjaGFpbiBub3cgKi8KKwkJcmV0dXJuOworCX0KKworCWFybV9nZXRfY3VycmVudF9zdGFja2ZyYW1lKHJlZ3MsICZmcik7CisJd2Fsa19zdGFja2ZyYW1lKCZmciwgY2FsbGNoYWluX3RyYWNlLCBlbnRyeSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmIChwZXJmX2d1ZXN0X2NicyAmJiBwZXJmX2d1ZXN0X2Nicy0+aXNfaW5fZ3Vlc3QoKSkKKwkJcmV0dXJuIHBlcmZfZ3Vlc3RfY2JzLT5nZXRfZ3Vlc3RfaXAoKTsKKworCXJldHVybiBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworfQorCit1bnNpZ25lZCBsb25nIHBlcmZfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgbWlzYyA9IDA7CisKKwlpZiAocGVyZl9ndWVzdF9jYnMgJiYgcGVyZl9ndWVzdF9jYnMtPmlzX2luX2d1ZXN0KCkpIHsKKwkJaWYgKHBlcmZfZ3Vlc3RfY2JzLT5pc191c2VyX21vZGUoKSkKKwkJCW1pc2MgfD0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9VU0VSOworCQllbHNlCisJCQltaXNjIHw9IFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfS0VSTkVMOworCX0gZWxzZSB7CisJCWlmICh1c2VyX21vZGUocmVncykpCisJCQltaXNjIHw9IFBFUkZfUkVDT1JEX01JU0NfVVNFUjsKKwkJZWxzZQorCQkJbWlzYyB8PSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKKwl9CisKKwlyZXR1cm4gbWlzYzsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDI2NmNiYTQuLmUzNDkzNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtNywyMSArNywxOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEFSTSBMdGQuLCBXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25AYXJtLmNvbT4KICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gdGhlIHNwYXJjNjQgcGVyZiBldmVudCBjb2RlLCB3aGljaCBpcyBpbiB0dXJuIGJhc2VkCi0gKiBvbiB0aGUgeDg2IGNvZGUuIENhbGxjaGFpbiBjb2RlIGlzIGJhc2VkIG9uIHRoZSBBUk0gT1Byb2ZpbGUgYmFja3RyYWNlCi0gKiBjb2RlLgorICogb24gdGhlIHg4NiBjb2RlLgogICovCiAjZGVmaW5lIHByX2ZtdChmbXQpICJodyBwZXJmZXZlbnRzOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFkZXNjLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vcG11Lmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIAogc3RhdGljIGludAogYXJtcG11X21hcF9jYWNoZV9ldmVudChjb25zdCB1bnNpZ25lZCAoKmNhY2hlX21hcCkKQEAgLTgwLDggKzc3LDEyIEBACiAJCSB1MzIgcmF3X2V2ZW50X21hc2spCiB7CiAJdTY0IGNvbmZpZyA9IGV2ZW50LT5hdHRyLmNvbmZpZzsKKwlpbnQgdHlwZSA9IGV2ZW50LT5hdHRyLnR5cGU7CiAKLQlzd2l0Y2ggKGV2ZW50LT5hdHRyLnR5cGUpIHsKKwlpZiAodHlwZSA9PSBldmVudC0+cG11LT50eXBlKQorCQlyZXR1cm4gYXJtcG11X21hcF9yYXdfZXZlbnQocmF3X2V2ZW50X21hc2ssIGNvbmZpZyk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFBFUkZfVFlQRV9IQVJEV0FSRToKIAkJcmV0dXJuIGFybXBtdV9tYXBfaHdfZXZlbnQoZXZlbnRfbWFwLCBjb25maWcpOwogCWNhc2UgUEVSRl9UWVBFX0hXX0NBQ0hFOgpAQCAtMjAwLDcgKzIwMSw3IEBACiBhcm1wbXVfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBhcm1fcG11ICphcm1wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSBhcm1wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzID0gdGhpc19jcHVfcHRyKGFybXBtdS0+aHdfZXZlbnRzKTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKQEAgLTIxNyw3ICsyMTgsNyBAQAogYXJtcG11X2FkZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgYXJtX3BtdSAqYXJtcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzID0gYXJtcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmh3X2V2ZW50cyA9IHRoaXNfY3B1X3B0cihhcm1wbXUtPmh3X2V2ZW50cyk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJaW50IGlkeDsKIAlpbnQgZXJyID0gMDsKQEAgLTI3NCwxNCArMjc1LDEyIEBACiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKnNpYmxpbmcsICpsZWFkZXIgPSBldmVudC0+Z3JvdXBfbGVhZGVyOwogCXN0cnVjdCBwbXVfaHdfZXZlbnRzIGZha2VfcG11OwotCURFQ0xBUkVfQklUTUFQKGZha2VfdXNlZF9tYXNrLCBBUk1QTVVfTUFYX0hXRVZFTlRTKTsKIAogCS8qCiAJICogSW5pdGlhbGlzZSB0aGUgZmFrZSBQTVUuIFdlIG9ubHkgbmVlZCB0byBwb3B1bGF0ZSB0aGUKIAkgKiB1c2VkX21hc2sgZm9yIHRoZSBwdXJwb3NlcyBvZiB2YWxpZGF0aW9uLgogCSAqLwotCW1lbXNldChmYWtlX3VzZWRfbWFzaywgMCwgc2l6ZW9mKGZha2VfdXNlZF9tYXNrKSk7Ci0JZmFrZV9wbXUudXNlZF9tYXNrID0gZmFrZV91c2VkX21hc2s7CisJbWVtc2V0KCZmYWtlX3BtdS51c2VkX21hc2ssIDAsIHNpemVvZihmYWtlX3BtdS51c2VkX21hc2spKTsKIAogCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBsZWFkZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMwNSwxNyArMzA0LDIxIEBACiAJaW50IHJldDsKIAl1NjQgc3RhcnRfY2xvY2ssIGZpbmlzaF9jbG9jazsKIAotCWlmIChpcnFfaXNfcGVyY3B1KGlycSkpCi0JCWRldiA9ICoodm9pZCAqKilkZXY7Ci0JYXJtcG11ID0gZGV2OworCS8qCisJICogd2UgcmVxdWVzdCB0aGUgSVJRIHdpdGggYSAocG9zc2libHkgcGVyY3B1KSBzdHJ1Y3QgYXJtX3BtdSoqLCBidXQKKwkgKiB0aGUgaGFuZGxlcnMgZXhwZWN0IGEgc3RydWN0IGFybV9wbXUqLiBUaGUgcGVyY3B1X2lycSBmcmFtZXdvcmsgd2lsbAorCSAqIGRvIGFueSBuZWNlc3Nhcnkgc2hpZnRpbmcsIHdlIGp1c3QgbmVlZCB0byBwZXJmb3JtIHRoZSBmaXJzdAorCSAqIGRlcmVmZXJlbmNlLgorCSAqLworCWFybXBtdSA9ICoodm9pZCAqKilkZXY7CiAJcGxhdF9kZXZpY2UgPSBhcm1wbXUtPnBsYXRfZGV2aWNlOwogCXBsYXQgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwbGF0X2RldmljZS0+ZGV2KTsKIAogCXN0YXJ0X2Nsb2NrID0gc2NoZWRfY2xvY2soKTsKIAlpZiAocGxhdCAmJiBwbGF0LT5oYW5kbGVfaXJxKQotCQlyZXQgPSBwbGF0LT5oYW5kbGVfaXJxKGlycSwgZGV2LCBhcm1wbXUtPmhhbmRsZV9pcnEpOworCQlyZXQgPSBwbGF0LT5oYW5kbGVfaXJxKGlycSwgYXJtcG11LCBhcm1wbXUtPmhhbmRsZV9pcnEpOwogCWVsc2UKLQkJcmV0ID0gYXJtcG11LT5oYW5kbGVfaXJxKGlycSwgZGV2KTsKKwkJcmV0ID0gYXJtcG11LT5oYW5kbGVfaXJxKGlycSwgYXJtcG11KTsKIAlmaW5pc2hfY2xvY2sgPSBzY2hlZF9jbG9jaygpOwogCiAJcGVyZl9zYW1wbGVfZXZlbnRfdG9vayhmaW5pc2hfY2xvY2sgLSBzdGFydF9jbG9jayk7CkBAIC00NjgsNyArNDcxLDcgQEAKIHN0YXRpYyB2b2lkIGFybXBtdV9lbmFibGUoc3RydWN0IHBtdSAqcG11KQogewogCXN0cnVjdCBhcm1fcG11ICphcm1wbXUgPSB0b19hcm1fcG11KHBtdSk7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmh3X2V2ZW50cyA9IGFybXBtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSB0aGlzX2NwdV9wdHIoYXJtcG11LT5od19ldmVudHMpOwogCWludCBlbmFibGVkID0gYml0bWFwX3dlaWdodChod19ldmVudHMtPnVzZWRfbWFzaywgYXJtcG11LT5udW1fZXZlbnRzKTsKIAogCWlmIChlbmFibGVkKQpAQCAtNTMzLDEzMCArNTM2LDMgQEAKIAlyZXR1cm4gcGVyZl9wbXVfcmVnaXN0ZXIoJmFybXBtdS0+cG11LCBhcm1wbXUtPm5hbWUsIHR5cGUpOwogfQogCi0vKgotICogQ2FsbGNoYWluIGhhbmRsaW5nIGNvZGUuCi0gKi8KLQotLyoKLSAqIFRoZSByZWdpc3RlcnMgd2UncmUgaW50ZXJlc3RlZCBpbiBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUKLSAqIGxlbmd0aCBzYXZlZCByZWdpc3RlciBzdHJ1Y3R1cmUuIFRoZSBmcCBwb2ludHMgYXQgdGhlIGVuZCBvZiB0aGlzCi0gKiBzdHJ1Y3R1cmUgc28gdGhlIGFkZHJlc3Mgb2YgdGhpcyBzdHJ1Y3QgaXM6Ci0gKiAoc3RydWN0IGZyYW1lX3RhaWwgKikoeHh4LT5mcCktMQotICoKLSAqIFRoaXMgY29kZSBoYXMgYmVlbiBhZGFwdGVkIGZyb20gdGhlIEFSTSBPUHJvZmlsZSBzdXBwb3J0LgotICovCi1zdHJ1Y3QgZnJhbWVfdGFpbCB7Ci0Jc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICpmcDsKLQl1bnNpZ25lZCBsb25nIHNwOwotCXVuc2lnbmVkIGxvbmcgbHI7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0vKgotICogR2V0IHRoZSByZXR1cm4gYWRkcmVzcyBmb3IgYSBzaW5nbGUgc3RhY2tmcmFtZSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUKLSAqIG5leHQgZnJhbWUgdGFpbC4KLSAqLwotc3RhdGljIHN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqCi11c2VyX2JhY2t0cmFjZShzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKnRhaWwsCi0JICAgICAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkpCi17Ci0Jc3RydWN0IGZyYW1lX3RhaWwgYnVmdGFpbDsKLQl1bnNpZ25lZCBsb25nIGVycjsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB0YWlsLCBzaXplb2YoYnVmdGFpbCkpKQotCQlyZXR1cm4gTlVMTDsKLQotCXBhZ2VmYXVsdF9kaXNhYmxlKCk7Ci0JZXJyID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYygmYnVmdGFpbCwgdGFpbCwgc2l6ZW9mKGJ1ZnRhaWwpKTsKLQlwYWdlZmF1bHRfZW5hYmxlKCk7Ci0KLQlpZiAoZXJyKQotCQlyZXR1cm4gTlVMTDsKLQotCXBlcmZfY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBidWZ0YWlsLmxyKTsKLQotCS8qCi0JICogRnJhbWUgcG9pbnRlcnMgc2hvdWxkIHN0cmljdGx5IHByb2dyZXNzIGJhY2sgdXAgdGhlIHN0YWNrCi0JICogKHRvd2FyZHMgaGlnaGVyIGFkZHJlc3NlcykuCi0JICovCi0JaWYgKHRhaWwgKyAxID49IGJ1ZnRhaWwuZnApCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIGJ1ZnRhaWwuZnAgLSAxOwotfQotCi12b2lkCi1wZXJmX2NhbGxjaGFpbl91c2VyKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqdGFpbDsKLQotCWlmIChwZXJmX2d1ZXN0X2NicyAmJiBwZXJmX2d1ZXN0X2Nicy0+aXNfaW5fZ3Vlc3QoKSkgewotCQkvKiBXZSBkb24ndCBzdXBwb3J0IGd1ZXN0IG9zIGNhbGxjaGFpbiBub3cgKi8KLQkJcmV0dXJuOwotCX0KLQotCXBlcmZfY2FsbGNoYWluX3N0b3JlKGVudHJ5LCByZWdzLT5BUk1fcGMpOwotCi0JaWYgKCFjdXJyZW50LT5tbSkKLQkJcmV0dXJuOwotCi0JdGFpbCA9IChzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKilyZWdzLT5BUk1fZnAgLSAxOwotCi0Jd2hpbGUgKChlbnRyeS0+bnIgPCBQRVJGX01BWF9TVEFDS19ERVBUSCkgJiYKLQkgICAgICAgdGFpbCAmJiAhKCh1bnNpZ25lZCBsb25nKXRhaWwgJiAweDMpKQotCQl0YWlsID0gdXNlcl9iYWNrdHJhY2UodGFpbCwgZW50cnkpOwotfQotCi0vKgotICogR2V0cyBjYWxsZWQgYnkgd2Fsa19zdGFja2ZyYW1lKCkgZm9yIGV2ZXJ5IHN0YWNrZnJhbWUuIFRoaXMgd2lsbCBiZSBjYWxsZWQKLSAqIHdoaXN0IHVud2luZGluZyB0aGUgc3RhY2tmcmFtZSBhbmQgaXMgbGlrZSBhIHN1YnJvdXRpbmUgcmV0dXJuIHNvIHdlIHVzZQotICogdGhlIFBDLgotICovCi1zdGF0aWMgaW50Ci1jYWxsY2hhaW5fdHJhY2Uoc3RydWN0IHN0YWNrZnJhbWUgKmZyLAotCQl2b2lkICpkYXRhKQotewotCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkgPSBkYXRhOwotCXBlcmZfY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBmci0+cGMpOwotCXJldHVybiAwOwotfQotCi12b2lkCi1wZXJmX2NhbGxjaGFpbl9rZXJuZWwoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHN0YWNrZnJhbWUgZnI7Ci0KLQlpZiAocGVyZl9ndWVzdF9jYnMgJiYgcGVyZl9ndWVzdF9jYnMtPmlzX2luX2d1ZXN0KCkpIHsKLQkJLyogV2UgZG9uJ3Qgc3VwcG9ydCBndWVzdCBvcyBjYWxsY2hhaW4gbm93ICovCi0JCXJldHVybjsKLQl9Ci0KLQlhcm1fZ2V0X2N1cnJlbnRfc3RhY2tmcmFtZShyZWdzLCAmZnIpOwotCXdhbGtfc3RhY2tmcmFtZSgmZnIsIGNhbGxjaGFpbl90cmFjZSwgZW50cnkpOwotfQotCi11bnNpZ25lZCBsb25nIHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpZiAocGVyZl9ndWVzdF9jYnMgJiYgcGVyZl9ndWVzdF9jYnMtPmlzX2luX2d1ZXN0KCkpCi0JCXJldHVybiBwZXJmX2d1ZXN0X2Nicy0+Z2V0X2d1ZXN0X2lwKCk7Ci0KLQlyZXR1cm4gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKLX0KLQotdW5zaWduZWQgbG9uZyBwZXJmX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW50IG1pc2MgPSAwOwotCi0JaWYgKHBlcmZfZ3Vlc3RfY2JzICYmIHBlcmZfZ3Vlc3RfY2JzLT5pc19pbl9ndWVzdCgpKSB7Ci0JCWlmIChwZXJmX2d1ZXN0X2Nicy0+aXNfdXNlcl9tb2RlKCkpCi0JCQltaXNjIHw9IFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfVVNFUjsKLQkJZWxzZQotCQkJbWlzYyB8PSBQRVJGX1JFQ09SRF9NSVNDX0dVRVNUX0tFUk5FTDsKLQl9IGVsc2UgewotCQlpZiAodXNlcl9tb2RlKHJlZ3MpKQotCQkJbWlzYyB8PSBQRVJGX1JFQ09SRF9NSVNDX1VTRVI7Ci0JCWVsc2UKLQkJCW1pc2MgfD0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUw7Ci0JfQotCi0JcmV0dXJuIG1pc2M7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF9jcHUuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X2NwdS5jCmluZGV4IGViMmM0ZDU1Li5kZDlhY2M5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF9jcHUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF9jcHUuYwpAQCAtMzUsMTEgKzM1LDYgQEAKIC8qIFNldCBhdCBydW50aW1lIHdoZW4gd2Uga25vdyB3aGF0IENQVSB0eXBlIHdlIGFyZS4gKi8KIHN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhcm1fcG11ICosIHBlcmNwdV9wbXUpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2V2ZW50ICogW0FSTVBNVV9NQVhfSFdFVkVOVFNdLCBod19ldmVudHMpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcgW0JJVFNfVE9fTE9OR1MoQVJNUE1VX01BWF9IV0VWRU5UUyldLCB1c2VkX21hc2spOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwbXVfaHdfZXZlbnRzLCBjcHVfaHdfZXZlbnRzKTsKLQogLyoKICAqIERlc3BpdGUgdGhlIG5hbWVzLCB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBDUFUtc3BlY2lmaWMgYW5kIGFyZSB1c2VkCiAgKiBieSB0aGUgT1Byb2ZpbGUvcGVyZiBjb2RlLgpAQCAtNjksMTEgKzY0LDYgQEAKICNpbmNsdWRlICJwZXJmX2V2ZW50X3Y2LmMiCiAjaW5jbHVkZSAicGVyZl9ldmVudF92Ny5jIgogCi1zdGF0aWMgc3RydWN0IHBtdV9od19ldmVudHMgKmNwdV9wbXVfZ2V0X2NwdV9ldmVudHModm9pZCkKLXsKLQlyZXR1cm4gdGhpc19jcHVfcHRyKCZjcHVfaHdfZXZlbnRzKTsKLX0KLQogc3RhdGljIHZvaWQgY3B1X3BtdV9lbmFibGVfcGVyY3B1X2lycSh2b2lkICpkYXRhKQogewogCWludCBpcnEgPSAqKGludCAqKWRhdGE7CkBAIC05MiwyMCArODIsMjEgQEAKIHsKIAlpbnQgaSwgaXJxLCBpcnFzOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBtdV9kZXZpY2UgPSBjcHVfcG11LT5wbGF0X2RldmljZTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyBfX3BlcmNwdSAqaHdfZXZlbnRzID0gY3B1X3BtdS0+aHdfZXZlbnRzOwogCiAJaXJxcyA9IG1pbihwbXVfZGV2aWNlLT5udW1fcmVzb3VyY2VzLCBudW1fcG9zc2libGVfY3B1cygpKTsKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocG11X2RldmljZSwgMCk7CiAJaWYgKGlycSA+PSAwICYmIGlycV9pc19wZXJjcHUoaXJxKSkgewogCQlvbl9lYWNoX2NwdShjcHVfcG11X2Rpc2FibGVfcGVyY3B1X2lycSwgJmlycSwgMSk7Ci0JCWZyZWVfcGVyY3B1X2lycShpcnEsICZwZXJjcHVfcG11KTsKKwkJZnJlZV9wZXJjcHVfaXJxKGlycSwgJmh3X2V2ZW50cy0+cGVyY3B1X3BtdSk7CiAJfSBlbHNlIHsKIAkJZm9yIChpID0gMDsgaSA8IGlycXM7ICsraSkgewogCQkJaWYgKCFjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2NwdShpLCAmY3B1X3BtdS0+YWN0aXZlX2lycXMpKQogCQkJCWNvbnRpbnVlOwogCQkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwbXVfZGV2aWNlLCBpKTsKIAkJCWlmIChpcnEgPj0gMCkKLQkJCQlmcmVlX2lycShpcnEsIGNwdV9wbXUpOworCQkJCWZyZWVfaXJxKGlycSwgcGVyX2NwdV9wdHIoJmh3X2V2ZW50cy0+cGVyY3B1X3BtdSwgaSkpOwogCQl9CiAJfQogfQpAQCAtMTE0LDE5ICsxMDUsMjEgQEAKIHsKIAlpbnQgaSwgZXJyLCBpcnEsIGlycXM7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcG11X2RldmljZSA9IGNwdV9wbXUtPnBsYXRfZGV2aWNlOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzIF9fcGVyY3B1ICpod19ldmVudHMgPSBjcHVfcG11LT5od19ldmVudHM7CiAKIAlpZiAoIXBtdV9kZXZpY2UpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaXJxcyA9IG1pbihwbXVfZGV2aWNlLT5udW1fcmVzb3VyY2VzLCBudW1fcG9zc2libGVfY3B1cygpKTsKIAlpZiAoaXJxcyA8IDEpIHsKLQkJcHJpbnRrX29uY2UoInBlcmYvQVJNOiBObyBpcnFzIGZvciBQTVUgZGVmaW5lZCwgc2FtcGxpbmcgZXZlbnRzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcl93YXJuX29uY2UoInBlcmYvQVJNOiBObyBpcnFzIGZvciBQTVUgZGVmaW5lZCwgc2FtcGxpbmcgZXZlbnRzIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBtdV9kZXZpY2UsIDApOwogCWlmIChpcnEgPj0gMCAmJiBpcnFfaXNfcGVyY3B1KGlycSkpIHsKLQkJZXJyID0gcmVxdWVzdF9wZXJjcHVfaXJxKGlycSwgaGFuZGxlciwgImFybS1wbXUiLCAmcGVyY3B1X3BtdSk7CisJCWVyciA9IHJlcXVlc3RfcGVyY3B1X2lycShpcnEsIGhhbmRsZXIsICJhcm0tcG11IiwKKwkJCQkJICZod19ldmVudHMtPnBlcmNwdV9wbXUpOwogCQlpZiAoZXJyKSB7CiAJCQlwcl9lcnIoInVuYWJsZSB0byByZXF1ZXN0IElSUSVkIGZvciBBUk0gUE1VIGNvdW50ZXJzXG4iLAogCQkJCWlycSk7CkBAIC0xNTMsNyArMTQ2LDcgQEAKIAogCQkJZXJyID0gcmVxdWVzdF9pcnEoaXJxLCBoYW5kbGVyLAogCQkJCQkgIElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX05PX1RIUkVBRCwgImFybS1wbXUiLAotCQkJCQkgIGNwdV9wbXUpOworCQkJCQkgIHBlcl9jcHVfcHRyKCZod19ldmVudHMtPnBlcmNwdV9wbXUsIGkpKTsKIAkJCWlmIChlcnIpIHsKIAkJCQlwcl9lcnIoInVuYWJsZSB0byByZXF1ZXN0IElSUSVkIGZvciBBUk0gUE1VIGNvdW50ZXJzXG4iLAogCQkJCQlpcnEpOwpAQCAtMTY3LDE4ICsxNjAsNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY3B1X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQorLyoKKyAqIFBNVSBoYXJkd2FyZSBsb3NlcyBhbGwgY29udGV4dCB3aGVuIGEgQ1BVIGdvZXMgb2ZmbGluZS4KKyAqIFdoZW4gYSBDUFUgaXMgaG90cGx1Z2dlZCBiYWNrIGluLCBzaW5jZSBzb21lIGhhcmR3YXJlIHJlZ2lzdGVycyBhcmUKKyAqIFVOS05PV04gYXQgcmVzZXQsIHRoZSBQTVUgbXVzdCBiZSBleHBsaWNpdGx5IHJlc2V0IHRvIGF2b2lkIHJlYWRpbmcKKyAqIGp1bmsgdmFsdWVzIG91dCBvZiB0aGVtLgorICovCitzdGF0aWMgaW50IGNwdV9wbXVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCQkgIHZvaWQgKmhjcHUpCiB7CisJc3RydWN0IGFybV9wbXUgKnBtdSA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgYXJtX3BtdSwgaG90cGx1Z19uYik7CisKKwlpZiAoKGFjdGlvbiAmIH5DUFVfVEFTS1NfRlJPWkVOKSAhPSBDUFVfU1RBUlRJTkcpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWlmIChwbXUtPnJlc2V0KQorCQlwbXUtPnJlc2V0KHBtdSk7CisJZWxzZQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgaW50IGNwdV9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKK3sKKwlpbnQgZXJyOwogCWludCBjcHU7CisJc3RydWN0IHBtdV9od19ldmVudHMgX19wZXJjcHUgKmNwdV9od19ldmVudHM7CisKKwljcHVfaHdfZXZlbnRzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBwbXVfaHdfZXZlbnRzKTsKKwlpZiAoIWNwdV9od19ldmVudHMpCisJCXJldHVybiAtRU5PTUVNOworCisJY3B1X3BtdS0+aG90cGx1Z19uYi5ub3RpZmllcl9jYWxsID0gY3B1X3BtdV9ub3RpZnk7CisJZXJyID0gcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfcG11LT5ob3RwbHVnX25iKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9od19ldmVudHM7CisKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSAmcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBjcHUpOwotCQlldmVudHMtPmV2ZW50cyA9IHBlcl9jcHUoaHdfZXZlbnRzLCBjcHUpOwotCQlldmVudHMtPnVzZWRfbWFzayA9IHBlcl9jcHUodXNlZF9tYXNrLCBjcHUpOworCQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gcGVyX2NwdV9wdHIoY3B1X2h3X2V2ZW50cywgY3B1KTsKIAkJcmF3X3NwaW5fbG9ja19pbml0KCZldmVudHMtPnBtdV9sb2NrKTsKLQkJcGVyX2NwdShwZXJjcHVfcG11LCBjcHUpID0gY3B1X3BtdTsKKwkJZXZlbnRzLT5wZXJjcHVfcG11ID0gY3B1X3BtdTsKIAl9CiAKLQljcHVfcG11LT5nZXRfaHdfZXZlbnRzCT0gY3B1X3BtdV9nZXRfY3B1X2V2ZW50czsKKwljcHVfcG11LT5od19ldmVudHMJPSBjcHVfaHdfZXZlbnRzOwogCWNwdV9wbXUtPnJlcXVlc3RfaXJxCT0gY3B1X3BtdV9yZXF1ZXN0X2lycTsKIAljcHVfcG11LT5mcmVlX2lycQk9IGNwdV9wbXVfZnJlZV9pcnE7CiAKQEAgLTE4OSwzMiArMjE0LDIwIEBACiAJLyogSWYgbm8gaW50ZXJydXB0cyBhdmFpbGFibGUsIHNldCB0aGUgY29ycmVzcG9uZGluZyBjYXBhYmlsaXR5IGZsYWcgKi8KIAlpZiAoIXBsYXRmb3JtX2dldF9pcnEoY3B1X3BtdS0+cGxhdF9kZXZpY2UsIDApKQogCQljcHVfcG11LT5wbXUuY2FwYWJpbGl0aWVzIHw9IFBFUkZfUE1VX0NBUF9OT19JTlRFUlJVUFQ7CisKKwlyZXR1cm4gMDsKKworb3V0X2h3X2V2ZW50czoKKwlmcmVlX3BlcmNwdShjcHVfaHdfZXZlbnRzKTsKKwlyZXR1cm4gZXJyOwogfQogCi0vKgotICogUE1VIGhhcmR3YXJlIGxvc2VzIGFsbCBjb250ZXh0IHdoZW4gYSBDUFUgZ29lcyBvZmZsaW5lLgotICogV2hlbiBhIENQVSBpcyBob3RwbHVnZ2VkIGJhY2sgaW4sIHNpbmNlIHNvbWUgaGFyZHdhcmUgcmVnaXN0ZXJzIGFyZQotICogVU5LTk9XTiBhdCByZXNldCwgdGhlIFBNVSBtdXN0IGJlIGV4cGxpY2l0bHkgcmVzZXQgdG8gYXZvaWQgcmVhZGluZwotICoganVuayB2YWx1ZXMgb3V0IG9mIHRoZW0uCi0gKi8KLXN0YXRpYyBpbnQgY3B1X3BtdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKLQkJCSAgdm9pZCAqaGNwdSkKK3N0YXRpYyB2b2lkIGNwdV9wbXVfZGVzdHJveShzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKIHsKLQlpZiAoKGFjdGlvbiAmIH5DUFVfVEFTS1NfRlJPWkVOKSAhPSBDUFVfU1RBUlRJTkcpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCWlmIChjcHVfcG11ICYmIGNwdV9wbXUtPnJlc2V0KQotCQljcHVfcG11LT5yZXNldChjcHVfcG11KTsKLQllbHNlCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCXJldHVybiBOT1RJRllfT0s7CisJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9wbXUtPmhvdHBsdWdfbmIpOworCWZyZWVfcGVyY3B1KGNwdV9wbXUtPmh3X2V2ZW50cyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3B1X3BtdV9ob3RwbHVnX25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID0gY3B1X3BtdV9ub3RpZnksCi19OwotCiAvKgogICogUE1VIHBsYXRmb3JtIGRyaXZlciBhbmQgZGV2aWNldHJlZSBiaW5kaW5ncy4KICAqLwpAQCAtMjQxLDQ4ICsyNTQsMzQgQEAKIAl7fSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X3Byb2JlX2luZm8gcG11X3Byb2JlX3RhYmxlW10gPSB7CisJQVJNX1BNVV9QUk9CRShBUk1fQ1BVX1BBUlRfQVJNMTEzNiwgYXJtdjZfMTEzNl9wbXVfaW5pdCksCisJQVJNX1BNVV9QUk9CRShBUk1fQ1BVX1BBUlRfQVJNMTE1NiwgYXJtdjZfMTE1Nl9wbXVfaW5pdCksCisJQVJNX1BNVV9QUk9CRShBUk1fQ1BVX1BBUlRfQVJNMTE3NiwgYXJtdjZfMTE3Nl9wbXVfaW5pdCksCisJQVJNX1BNVV9QUk9CRShBUk1fQ1BVX1BBUlRfQVJNMTFNUENPUkUsIGFybXY2bXBjb3JlX3BtdV9pbml0KSwKKwlBUk1fUE1VX1BST0JFKEFSTV9DUFVfUEFSVF9DT1JURVhfQTgsIGFybXY3X2E4X3BtdV9pbml0KSwKKwlBUk1fUE1VX1BST0JFKEFSTV9DUFVfUEFSVF9DT1JURVhfQTksIGFybXY3X2E5X3BtdV9pbml0KSwKKwlYU0NBTEVfUE1VX1BST0JFKEFSTV9DUFVfWFNDQUxFX0FSQ0hfVjEsIHhzY2FsZTFwbXVfaW5pdCksCisJWFNDQUxFX1BNVV9QUk9CRShBUk1fQ1BVX1hTQ0FMRV9BUkNIX1YyLCB4c2NhbGUycG11X2luaXQpLAorCXsgLyogc2VudGluZWwgdmFsdWUgKi8gfQorfTsKKwogLyoKICAqIENQVSBQTVUgaWRlbnRpZmljYXRpb24gYW5kIHByb2JpbmcuCiAgKi8KIHN0YXRpYyBpbnQgcHJvYmVfY3VycmVudF9wbXUoc3RydWN0IGFybV9wbXUgKnBtdSkKIHsKIAlpbnQgY3B1ID0gZ2V0X2NwdSgpOworCXVuc2lnbmVkIGludCBjcHVpZCA9IHJlYWRfY3B1aWRfaWQoKTsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKKwljb25zdCBzdHJ1Y3QgcG11X3Byb2JlX2luZm8gKmluZm87CiAKIAlwcl9pbmZvKCJwcm9iaW5nIFBNVSBvbiBDUFUgJWRcbiIsIGNwdSk7CiAKLQlzd2l0Y2ggKHJlYWRfY3B1aWRfcGFydCgpKSB7Ci0JLyogQVJNIEx0ZCBDUFVzLiAqLwotCWNhc2UgQVJNX0NQVV9QQVJUX0FSTTExMzY6Ci0JCXJldCA9IGFybXY2XzExMzZfcG11X2luaXQocG11KTsKLQkJYnJlYWs7Ci0JY2FzZSBBUk1fQ1BVX1BBUlRfQVJNMTE1NjoKLQkJcmV0ID0gYXJtdjZfMTE1Nl9wbXVfaW5pdChwbXUpOwotCQlicmVhazsKLQljYXNlIEFSTV9DUFVfUEFSVF9BUk0xMTc2OgotCQlyZXQgPSBhcm12Nl8xMTc2X3BtdV9pbml0KHBtdSk7Ci0JCWJyZWFrOwotCWNhc2UgQVJNX0NQVV9QQVJUX0FSTTExTVBDT1JFOgotCQlyZXQgPSBhcm12Nm1wY29yZV9wbXVfaW5pdChwbXUpOwotCQlicmVhazsKLQljYXNlIEFSTV9DUFVfUEFSVF9DT1JURVhfQTg6Ci0JCXJldCA9IGFybXY3X2E4X3BtdV9pbml0KHBtdSk7Ci0JCWJyZWFrOwotCWNhc2UgQVJNX0NQVV9QQVJUX0NPUlRFWF9BOToKLQkJcmV0ID0gYXJtdjdfYTlfcG11X2luaXQocG11KTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlpZiAocmVhZF9jcHVpZF9pbXBsZW1lbnRvcigpID09IEFSTV9DUFVfSU1QX0lOVEVMKSB7Ci0JCQlzd2l0Y2ggKHhzY2FsZV9jcHVfYXJjaF92ZXJzaW9uKCkpIHsKLQkJCWNhc2UgQVJNX0NQVV9YU0NBTEVfQVJDSF9WMToKLQkJCQlyZXQgPSB4c2NhbGUxcG11X2luaXQocG11KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQVJNX0NQVV9YU0NBTEVfQVJDSF9WMjoKLQkJCQlyZXQgPSB4c2NhbGUycG11X2luaXQocG11KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQorCWZvciAoaW5mbyA9IHBtdV9wcm9iZV90YWJsZTsgaW5mby0+aW5pdCAhPSBOVUxMOyBpbmZvKyspIHsKKwkJaWYgKChjcHVpZCAmIGluZm8tPm1hc2spICE9IGluZm8tPmNwdWlkKQorCQkJY29udGludWU7CisJCXJldCA9IGluZm8tPmluaXQocG11KTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yOTksMTMgKzI5OCwxMyBAQAogCWludCByZXQgPSAtRU5PREVWOwogCiAJaWYgKGNwdV9wbXUpIHsKLQkJcHJfaW5mbygiYXR0ZW1wdCB0byByZWdpc3RlciBtdWx0aXBsZSBQTVUgZGV2aWNlcyEiKTsKKwkJcHJfaW5mbygiYXR0ZW1wdCB0byByZWdpc3RlciBtdWx0aXBsZSBQTVUgZGV2aWNlcyFcbiIpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKIAlwbXUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXJtX3BtdSksIEdGUF9LRVJORUwpOwogCWlmICghcG11KSB7Ci0JCXByX2luZm8oImZhaWxlZCB0byBhbGxvY2F0ZSBQTVUgZGV2aWNlISIpOworCQlwcl9pbmZvKCJmYWlsZWQgdG8gYWxsb2NhdGUgUE1VIGRldmljZSFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTMyMCwxOCArMzE5LDI0IEBACiAJfQogCiAJaWYgKHJldCkgewotCQlwcl9pbmZvKCJmYWlsZWQgdG8gcHJvYmUgUE1VISIpOworCQlwcl9pbmZvKCJmYWlsZWQgdG8gcHJvYmUgUE1VIVxuIik7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0JY3B1X3BtdV9pbml0KGNwdV9wbXUpOwotCXJldCA9IGFybXBtdV9yZWdpc3RlcihjcHVfcG11LCBQRVJGX1RZUEVfUkFXKTsKKwlyZXQgPSBjcHVfcG11X2luaXQoY3B1X3BtdSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKIAotCWlmICghcmV0KQotCQlyZXR1cm4gMDsKKwlyZXQgPSBhcm1wbXVfcmVnaXN0ZXIoY3B1X3BtdSwgLTEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Rlc3Ryb3k7CiAKKwlyZXR1cm4gMDsKKworb3V0X2Rlc3Ryb3k6CisJY3B1X3BtdV9kZXN0cm95KGNwdV9wbXUpOwogb3V0X2ZyZWU6Ci0JcHJfaW5mbygiZmFpbGVkIHRvIHJlZ2lzdGVyIFBNVSBkZXZpY2VzISIpOworCXByX2luZm8oImZhaWxlZCB0byByZWdpc3RlciBQTVUgZGV2aWNlcyFcbiIpOwogCWtmcmVlKHBtdSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM0OCwxNiArMzUzLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgcmVnaXN0ZXJfcG11X2RyaXZlcih2b2lkKQogewotCWludCBlcnI7Ci0KLQllcnIgPSByZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9wbXVfaG90cGx1Z19ub3RpZmllcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY3B1X3BtdV9kcml2ZXIpOwotCWlmIChlcnIpCi0JCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfcG11X2hvdHBsdWdfbm90aWZpZXIpOwotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjcHVfcG11X2RyaXZlcik7CiB9CiBkZXZpY2VfaW5pdGNhbGwocmVnaXN0ZXJfcG11X2RyaXZlcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF92Ni5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjYuYwppbmRleCBhYmZlYjA0Li5mMmZmZDVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF92Ni5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y2LmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBldnQsIGZsYWdzOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAlpZiAoQVJNVjZfQ1lDTEVfQ09VTlRFUiA9PSBpZHgpIHsKQEAgLTMwMCw3ICszMDAsNyBAQAogCXVuc2lnbmVkIGxvbmcgcG1jciA9IGFybXY2X3BtY3JfcmVhZCgpOwogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSAoc3RydWN0IGFybV9wbXUgKilkZXY7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmNwdWMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmNwdWMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKIAlpbnQgaWR4OwogCkBAIC0zNTYsNyArMzU2LDcgQEAKIHN0YXRpYyB2b2lkIGFybXY2cG11X3N0YXJ0KHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCXZhbCA9IGFybXY2X3BtY3JfcmVhZCgpOwpAQCAtMzY4LDcgKzM2OCw3IEBACiBzdGF0aWMgdm9pZCBhcm12NnBtdV9zdG9wKHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCXZhbCA9IGFybXY2X3BtY3JfcmVhZCgpOwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWwsIG1hc2ssIGV2dCwgZmxhZ3M7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCWludCBpZHggPSBod2MtPmlkeDsKIAogCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGlkeCkgewpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWwsIG1hc2ssIGZsYWdzLCBldnQgPSAwOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAlpZiAoQVJNVjZfQ1lDTEVfQ09VTlRFUiA9PSBpZHgpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y3LmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF92Ny5jCmluZGV4IDExNjc1OGIuLjg5OTM3NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y3LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjcuYwpAQCAtNTY0LDEzICs1NjQsMTEgQEAKIAlyZXR1cm4gcG1uYyAmIEJJVChBUk1WN19JRFhfVE9fQ09VTlRFUihpZHgpKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpbnQgaWR4KQorc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaW50IGlkeCkKIHsKIAl1MzIgY291bnRlciA9IEFSTVY3X0lEWF9UT19DT1VOVEVSKGlkeCk7CiAJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgNSIgOiA6ICJyIiAoY291bnRlcikpOwogCWlzYigpOwotCi0JcmV0dXJuIGlkeDsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgYXJtdjdwbXVfcmVhZF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKQEAgLTU4MCwxMyArNTc4LDE1IEBACiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCXUzMiB2YWx1ZSA9IDA7CiAKLQlpZiAoIWFybXY3X3BtbmNfY291bnRlcl92YWxpZChjcHVfcG11LCBpZHgpKQorCWlmICghYXJtdjdfcG1uY19jb3VudGVyX3ZhbGlkKGNwdV9wbXUsIGlkeCkpIHsKIAkJcHJfZXJyKCJDUFUldSByZWFkaW5nIHdyb25nIGNvdW50ZXIgJWRcbiIsCiAJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7Ci0JZWxzZSBpZiAoaWR4ID09IEFSTVY3X0lEWF9DWUNMRV9DT1VOVEVSKQorCX0gZWxzZSBpZiAoaWR4ID09IEFSTVY3X0lEWF9DWUNMRV9DT1VOVEVSKSB7CiAJCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDAiIDogIj1yIiAodmFsdWUpKTsKLQllbHNlIGlmIChhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGlkeCkgPT0gaWR4KQorCX0gZWxzZSB7CisJCWFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaWR4KTsKIAkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMiIgOiAiPXIiICh2YWx1ZSkpOworCX0KIAogCXJldHVybiB2YWx1ZTsKIH0KQEAgLTU5Nyw0NSArNTk3LDQzIEBACiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCi0JaWYgKCFhcm12N19wbW5jX2NvdW50ZXJfdmFsaWQoY3B1X3BtdSwgaWR4KSkKKwlpZiAoIWFybXY3X3BtbmNfY291bnRlcl92YWxpZChjcHVfcG11LCBpZHgpKSB7CiAJCXByX2VycigiQ1BVJXUgd3JpdGluZyB3cm9uZyBjb3VudGVyICVkXG4iLAogCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOwotCWVsc2UgaWYgKGlkeCA9PSBBUk1WN19JRFhfQ1lDTEVfQ09VTlRFUikKKwl9IGVsc2UgaWYgKGlkeCA9PSBBUk1WN19JRFhfQ1lDTEVfQ09VTlRFUikgewogCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6IDogInIiICh2YWx1ZSkpOwotCWVsc2UgaWYgKGFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaWR4KSA9PSBpZHgpCisJfSBlbHNlIHsKKwkJYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpOwogCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAyIiA6IDogInIiICh2YWx1ZSkpOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfd3JpdGVfZXZ0c2VsKGludCBpZHgsIHUzMiB2YWwpCiB7Ci0JaWYgKGFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaWR4KSA9PSBpZHgpIHsKLQkJdmFsICY9IEFSTVY3X0VWVFlQRV9NQVNLOwotCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6IDogInIiICh2YWwpKTsKLQl9CisJYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpOworCXZhbCAmPSBBUk1WN19FVlRZUEVfTUFTSzsKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6IDogInIiICh2YWwpKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19lbmFibGVfY291bnRlcihpbnQgaWR4KQorc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfZW5hYmxlX2NvdW50ZXIoaW50IGlkeCkKIHsKIAl1MzIgY291bnRlciA9IEFSTVY3X0lEWF9UT19DT1VOVEVSKGlkeCk7CiAJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgMSIgOiA6ICJyIiAoQklUKGNvdW50ZXIpKSk7Ci0JcmV0dXJuIGlkeDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19kaXNhYmxlX2NvdW50ZXIoaW50IGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm12N19wbW5jX2Rpc2FibGVfY291bnRlcihpbnQgaWR4KQogewogCXUzMiBjb3VudGVyID0gQVJNVjdfSURYX1RPX0NPVU5URVIoaWR4KTsKIAlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAyIiA6IDogInIiIChCSVQoY291bnRlcikpKTsKLQlyZXR1cm4gaWR4OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhcm12N19wbW5jX2VuYWJsZV9pbnRlbnMoaW50IGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm12N19wbW5jX2VuYWJsZV9pbnRlbnMoaW50IGlkeCkKIHsKIAl1MzIgY291bnRlciA9IEFSTVY3X0lEWF9UT19DT1VOVEVSKGlkeCk7CiAJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxNCwgMSIgOiA6ICJyIiAoQklUKGNvdW50ZXIpKSk7Ci0JcmV0dXJuIGlkeDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19kaXNhYmxlX2ludGVucyhpbnQgaWR4KQorc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfZGlzYWJsZV9pbnRlbnMoaW50IGlkeCkKIHsKIAl1MzIgY291bnRlciA9IEFSTVY3X0lEWF9UT19DT1VOVEVSKGlkeCk7CiAJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxNCwgMiIgOiA6ICJyIiAoQklUKGNvdW50ZXIpKSk7CkBAIC02NDMsOCArNjQxLDYgQEAKIAkvKiBDbGVhciB0aGUgb3ZlcmZsb3cgZmxhZyBpbiBjYXNlIGFuIGludGVycnVwdCBpcyBwZW5kaW5nLiAqLwogCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDMiIDogOiAiciIgKEJJVChjb3VudGVyKSkpOwogCWlzYigpOwotCi0JcmV0dXJuIGlkeDsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19nZXRyZXNldF9mbGFncyh2b2lkKQpAQCAtNjY3LDM0ICs2NjMsMzQgQEAKIAl1MzIgdmFsOwogCXVuc2lnbmVkIGludCBjbnQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJQTU5DIHJlZ2lzdGVycyBkdW1wOlxuIik7CisJcHJfaW5mbygiUE1OQyByZWdpc3RlcnMgZHVtcDpcbiIpOwogCiAJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgMCIgOiAiPXIiICh2YWwpKTsKLQlwcmludGsoS0VSTl9JTkZPICJQTU5DICA9MHglMDh4XG4iLCB2YWwpOworCXByX2luZm8oIlBNTkMgID0weCUwOHhcbiIsIHZhbCk7CiAKIAlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAxIiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIkNOVEVOUz0weCUwOHhcbiIsIHZhbCk7CisJcHJfaW5mbygiQ05URU5TPTB4JTA4eFxuIiwgdmFsKTsKIAogCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDEiIDogIj1yIiAodmFsKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiSU5URU5TPTB4JTA4eFxuIiwgdmFsKTsKKwlwcl9pbmZvKCJJTlRFTlM9MHglMDh4XG4iLCB2YWwpOwogCiAJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgMyIgOiAiPXIiICh2YWwpKTsKLQlwcmludGsoS0VSTl9JTkZPICJGTEFHUyA9MHglMDh4XG4iLCB2YWwpOworCXByX2luZm8oIkZMQUdTID0weCUwOHhcbiIsIHZhbCk7CiAKIAlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCA1IiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIlNFTEVDVD0weCUwOHhcbiIsIHZhbCk7CisJcHJfaW5mbygiU0VMRUNUPTB4JTA4eFxuIiwgdmFsKTsKIAogCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDAiIDogIj1yIiAodmFsKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQ0NOVCAgPTB4JTA4eFxuIiwgdmFsKTsKKwlwcl9pbmZvKCJDQ05UICA9MHglMDh4XG4iLCB2YWwpOwogCiAJZm9yIChjbnQgPSBBUk1WN19JRFhfQ09VTlRFUjA7CiAJCQljbnQgPD0gQVJNVjdfSURYX0NPVU5URVJfTEFTVChjcHVfcG11KTsgY250KyspIHsKIAkJYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihjbnQpOwogCQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAyIiA6ICI9ciIgKHZhbCkpOwotCQlwcmludGsoS0VSTl9JTkZPICJDTlRbJWRdIGNvdW50ID0weCUwOHhcbiIsCisJCXByX2luZm8oIkNOVFslZF0gY291bnQgPTB4JTA4eFxuIiwKIAkJCUFSTVY3X0lEWF9UT19DT1VOVEVSKGNudCksIHZhbCk7CiAJCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDEiIDogIj1yIiAodmFsKSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNOVFslZF0gZXZ0c2VsPTB4JTA4eFxuIiwKKwkJcHJfaW5mbygiQ05UWyVkXSBldnRzZWw9MHglMDh4XG4iLAogCQkJQVJNVjdfSURYX1RPX0NPVU5URVIoY250KSwgdmFsKTsKIAl9CiB9CkBAIC03MDUsNyArNzAxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAlpZiAoIWFybXY3X3BtbmNfY291bnRlcl92YWxpZChjcHVfcG11LCBpZHgpKSB7CkBAIC03NTEsNyArNzQ3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAlpZiAoIWFybXY3X3BtbmNfY291bnRlcl92YWxpZChjcHVfcG11LCBpZHgpKSB7CkBAIC03ODMsNyArNzc5LDcgQEAKIAl1MzIgcG1uYzsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gKHN0cnVjdCBhcm1fcG11ICopZGV2OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CiAJaW50IGlkeDsKIApAQCAtODQzLDcgKzgzOSw3IEBACiBzdGF0aWMgdm9pZCBhcm12N3BtdV9zdGFydChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAJLyogRW5hYmxlIGFsbCBjb3VudGVycyAqLwpAQCAtODU0LDcgKzg1MCw3IEBACiBzdGF0aWMgdm9pZCBhcm12N3BtdV9zdG9wKHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAkvKiBEaXNhYmxlIGFsbCBjb3VudGVycyAqLwpAQCAtMTI4Nyw3ICsxMjgzLDcgQEAKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCiAJLyogRGlzYWJsZSBjb3VudGVyIGFuZCBpbnRlcnJ1cHQgKi8KIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKQEAgLTEzMTMsNyArMTMwOSw3IEBACiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAogCS8qCiAJICogRW5hYmxlIGNvdW50ZXIgYW5kIGludGVycnVwdCwgYW5kIHNldCB0aGUgY291bnRlciB0byBjb3VudApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfeHNjYWxlLmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF94c2NhbGUuYwppbmRleCAwOGRhMGFmLi44YWY5ZjFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF94c2NhbGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF94c2NhbGUuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJdW5zaWduZWQgbG9uZyBwbW5jOwogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSAoc3RydWN0IGFybV9wbXUgKilkZXY7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmNwdWMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmNwdWMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKIAlpbnQgaWR4OwogCkBAIC0xOTgsNyArMTk4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZXZ0LCBmbGFnczsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJc3dpdGNoIChpZHgpIHsKQEAgLTIzNCw3ICsyMzQsNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBldnQsIGZsYWdzOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAlzd2l0Y2ggKGlkeCkgewpAQCAtMjg3LDcgKzI4Nyw3IEBACiBzdGF0aWMgdm9pZCB4c2NhbGUxcG11X3N0YXJ0KHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCXZhbCA9IHhzY2FsZTFwbXVfcmVhZF9wbW5jKCk7CkBAIC0yOTksNyArMjk5LDcgQEAKIHN0YXRpYyB2b2lkIHhzY2FsZTFwbXVfc3RvcChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAl2YWwgPSB4c2NhbGUxcG11X3JlYWRfcG1uYygpOwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJdW5zaWduZWQgbG9uZyBwbW5jLCBvZl9mbGFnczsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gKHN0cnVjdCBhcm1fcG11ICopZGV2OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CiAJaW50IGlkeDsKIApAQCAtNTM5LDcgKzUzOSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncywgaWVuLCBldnRzZWw7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCWludCBpZHggPSBod2MtPmlkeDsKIAogCWllbiA9IHhzY2FsZTJwbXVfcmVhZF9pbnRfZW5hYmxlKCk7CkBAIC01ODUsNyArNTg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBpZW4sIGV2dHNlbCwgb2ZfZmxhZ3M7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCWludCBpZHggPSBod2MtPmlkeDsKIAogCWllbiA9IHhzY2FsZTJwbXVfcmVhZF9pbnRfZW5hYmxlKCk7CkBAIC02NTEsNyArNjUxLDcgQEAKIHN0YXRpYyB2b2lkIHhzY2FsZTJwbXVfc3RhcnQoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAJdmFsID0geHNjYWxlMnBtdV9yZWFkX3BtbmMoKSAmIH5YU0NBTEVfUE1VX0NOVDY0OwpAQCAtNjYzLDcgKzY2Myw3IEBACiBzdGF0aWMgdm9pZCB4c2NhbGUycG11X3N0b3Aoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAJdmFsID0geHNjYWxlMnBtdV9yZWFkX3BtbmMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXNtOTI2MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1hc205MjYwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyM2JlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXNtOTI2MC9LY29uZmlnCkBAIC0wLDAgKzEsNiBAQAorY29uZmlnIE1BQ0hfQVNNOTI2MAorCWJvb2wgIkFscGhhc2NhbGUgQVNNOTI2MCIKKwlkZXBlbmRzIG9uIEFSQ0hfTVVMVElfVjUKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKKwloZWxwCisJICBTdXBwb3J0IGZvciBBbHBoYXNjYWxlIEFTTTkyNjAgYmFzZWQgcGxhdGZvcm0uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IDBlNmQ1NDguLjIzOTVjNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC0xNSwyNyArMTUsMTAgQEAKIGNvbmZpZyBIQVZFX0FUOTFfREJHVTIKIAlib29sCiAKLWNvbmZpZyBBVDkxX1VTRV9PTERfQ0xLCi0JYm9vbAotCi1jb25maWcgQVQ5MV9QTUNfVU5JVAotCWJvb2wKLQlkZWZhdWx0ICFBUkNIX0FUOTFYNDAKLQogY29uZmlnIENPTU1PTl9DTEtfQVQ5MQogCWJvb2wKLQlkZWZhdWx0IEFUOTFfUE1DX1VOSVQgJiYgVVNFX09GICYmICFBVDkxX1VTRV9PTERfQ0xLCiAJc2VsZWN0IENPTU1PTl9DTEsKIAotY29uZmlnIE9MRF9DTEtfQVQ5MQotCWJvb2wKLQlkZWZhdWx0IEFUOTFfUE1DX1VOSVQgJiYgQVQ5MV9VU0VfT0xEX0NMSwotCi1jb25maWcgT0xEX0lSUV9BVDkxCi0JYm9vbAotCXNlbGVjdCBNVUxUSV9JUlFfSEFORExFUgotCXNlbGVjdCBTUEFSU0VfSVJRCi0KIGNvbmZpZyBIQVZFX0FUOTFfU01ECiAJYm9vbAogCkBAIC00NCwyMCArMjcsMjIgQEAKIAogY29uZmlnIFNPQ19BVDkxU0FNOQogCWJvb2wKLQlzZWxlY3QgQVRNRUxfQUlDX0lSUSBpZiAhT0xEX0lSUV9BVDkxCisJc2VsZWN0IEFUTUVMX0FJQ19JUlEKKwlzZWxlY3QgQ09NTU9OX0NMS19BVDkxCiAJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKLQlzZWxlY3QgTUVNT1JZIGlmIFVTRV9PRgotCXNlbGVjdCBBVE1FTF9TRFJBTUMgaWYgVVNFX09GCisJc2VsZWN0IE1FTU9SWQorCXNlbGVjdCBBVE1FTF9TRFJBTUMKIAogY29uZmlnIFNPQ19TQU1BNQogCWJvb2wKIAlzZWxlY3QgQVRNRUxfQUlDNV9JUlEKKwlzZWxlY3QgQ09NTU9OX0NMS19BVDkxCiAJc2VsZWN0IENQVV9WNwogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCi0Jc2VsZWN0IFVTRV9PRgogCXNlbGVjdCBNRU1PUlkKIAlzZWxlY3QgQVRNRUxfU0RSQU1DCisJc2VsZWN0IFBIWUxJQiBpZiBORVRERVZJQ0VTCiAKIG1lbnUgIkF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAiCiAKQEAgLTY1LDE2ICs1MCw2IEBACiAKIAlwcm9tcHQgIkNvcmUgdHlwZSIKIAotY29uZmlnIEFSQ0hfQVQ5MVg0MAotCWJvb2wgIkFSTTcgQVQ5MVg0MCIKLQlkZXBlbmRzIG9uICFNTVUKLQlzZWxlY3QgQ1BVX0FSTTdURE1JCi0Jc2VsZWN0IEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCi0Jc2VsZWN0IE9MRF9JUlFfQVQ5MQotCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBvbmUgb2YgQXRtZWwncyBBVDkxWDQwIFNvQy4KLQogY29uZmlnIFNPQ19TQU1fVjRfVjUKIAlib29sICJBUk05IEFUOTFTQU05L0FUOTFSTTkyMDAiCiAJaGVscApAQCAtMTIyLDcgKzk3LDggQEAKIGlmIFNPQ19TQU1fVjRfVjUKIGNvbmZpZyBTT0NfQVQ5MVJNOTIwMAogCWJvb2wgIkFUOTFSTTkyMDAiCi0Jc2VsZWN0IEFUTUVMX0FJQ19JUlEgaWYgIU9MRF9JUlFfQVQ5MQorCXNlbGVjdCBBVE1FTF9BSUNfSVJRCisJc2VsZWN0IENPTU1PTl9DTEtfQVQ5MQogCXNlbGVjdCBDUFVfQVJNOTIwVAogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IEhBVkVfQVQ5MV9EQkdVMApAQCAtMTk4LDM3ICsxNzQsMTEgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZW5kaWYgIyBTT0NfU0FNX1Y0X1Y1CiAKLQotaWYgU09DX1NBTV9WNF9WNSB8fCBBUkNIX0FUOTFYNDAKLXNvdXJjZSBhcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZy5ub25fZHQKLWVuZGlmCi0KLWNvbW1lbnQgIkdlbmVyaWMgQm9hcmQgVHlwZSIKLQogY29uZmlnIE1BQ0hfQVQ5MVJNOTIwMF9EVAotCWJvb2wgIkF0bWVsIEFUOTFSTTkyMDAgRXZhbHVhdGlvbiBLaXRzIHdpdGggZGV2aWNlLXRyZWUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19BVDkxUk05MjAwCi0Jc2VsZWN0IFVTRV9PRgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRvIGV4cGVyaW1lbnQgZGV2aWNlLXRyZWUgd2l0aAotCSAgYW4gQXRtZWwgUk05MjAwIEV2YWx1YXRpb24gS2l0LgorCWRlZl9ib29sIFNPQ19BVDkxUk05MjAwCiAKIGNvbmZpZyBNQUNIX0FUOTFTQU05X0RUCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTSBFdmFsdWF0aW9uIEtpdHMgd2l0aCBkZXZpY2UtdHJlZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09DX0FUOTFTQU05Ci0Jc2VsZWN0IFVTRV9PRgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRvIGV4cGVyaW1lbnQgZGV2aWNlLXRyZWUgd2l0aAotCSAgYW4gQXRtZWwgRXZhbHVhdGlvbiBLaXQuCi0KLWNvbmZpZyBNQUNIX1NBTUE1X0RUCi0JYm9vbCAiQXRtZWwgU0FNQTUgRXZhbHVhdGlvbiBLaXRzIHdpdGggZGV2aWNlLXRyZWUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19TQU1BNQotCXNlbGVjdCBVU0VfT0YKLQlzZWxlY3QgUEhZTElCIGlmIE5FVERFVklDRVMKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byBleHBlcmltZW50IGRldmljZS10cmVlIHdpdGgKLQkgIGFuIEF0bWVsIEV2YWx1YXRpb24gS2l0LgorCWRlZl9ib29sIFNPQ19BVDkxU0FNOQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjUxLDcgKzIwMSw3IEBACiAgICAgICAgaW50ICJLZXJuZWwgSFogKGppZmZpZXMgcGVyIHNlY29uZCkiCiAgICAgICAgcmFuZ2UgMzIgMTAyNAogICAgICAgIGRlcGVuZHMgb24gQVJDSF9BVDkxCi0gICAgICAgZGVmYXVsdCAiMTI4IiBpZiBBUkNIX0FUOTFSTTkyMDAKKyAgICAgICBkZWZhdWx0ICIxMjgiIGlmIFNPQ19BVDkxUk05MjAwCiAgICAgICAgZGVmYXVsdCAiMTAwIgogICAgICAgIGhlbHAKIAkgIE9uIEFUOTFybTkyMDAgY2hpcHMgd2hlcmUgeW91J3JlIHVzaW5nIGEgc3lzdGVtIGNsb2NrIGRlcml2ZWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnLm5vbl9kdCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnLm5vbl9kdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhlODgyMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZy5ub25fZHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNDQgKzAsMCBAQAotbWVudSAiQXRtZWwgTm9uLURUIHdvcmxkIgotCi1jb25maWcgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECi0JYm9vbAotCi1jaG9pY2UKLQlwcm9tcHQgIkF0bWVsIEFUOTEgUHJvY2Vzc29yIERldmljZXMgZm9yIG5vbiBEVCBib2FyZHMiCi0JZGVwZW5kcyBvbiAhQVJDSF9BVDkxWDQwCi0KLWNvbmZpZyBBUkNIX0FUOTFfTk9ORQotCWJvb2wgIk5vbmUiCi0KLWNvbmZpZyBBUkNIX0FUOTFSTTkyMDAKLQlib29sICJBVDkxUk05MjAwIgotCXNlbGVjdCBTT0NfQVQ5MVJNOTIwMAotCXNlbGVjdCBBVDkxX1VTRV9PTERfQ0xLCi0Jc2VsZWN0IE9MRF9JUlFfQVQ5MQotCi1jb25maWcgQVJDSF9BVDkxU0FNOTI2MAotCWJvb2wgIkFUOTFTQU05MjYwIG9yIEFUOTFTQU05WEUgb3IgQVQ5MVNBTTlHMjAiCi0Jc2VsZWN0IFNPQ19BVDkxU0FNOTI2MAotCXNlbGVjdCBBVDkxX1VTRV9PTERfQ0xLCi0Jc2VsZWN0IE9MRF9JUlFfQVQ5MQotCi1jb25maWcgQVJDSF9BVDkxU0FNOTI2MQotCWJvb2wgIkFUOTFTQU05MjYxIG9yIEFUOTFTQU05RzEwIgotCXNlbGVjdCBTT0NfQVQ5MVNBTTkyNjEKLQlzZWxlY3QgQVQ5MV9VU0VfT0xEX0NMSwotCXNlbGVjdCBPTERfSVJRX0FUOTEKLQotY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjMKLQlib29sICJBVDkxU0FNOTI2MyIKLQlzZWxlY3QgU09DX0FUOTFTQU05MjYzCi0Jc2VsZWN0IEFUOTFfVVNFX09MRF9DTEsKLQlzZWxlY3QgT0xEX0lSUV9BVDkxCi0KLWNvbmZpZyBBUkNIX0FUOTFTQU05UkwKLQlib29sICJBVDkxU0FNOVJMIgotCXNlbGVjdCBTT0NfQVQ5MVNBTTlSTAotCXNlbGVjdCBBVDkxX1VTRV9PTERfQ0xLCi0Jc2VsZWN0IE9MRF9JUlFfQVQ5MQotCi1jb25maWcgQVJDSF9BVDkxU0FNOUc0NQotCWJvb2wgIkFUOTFTQU05RzQ1IgotCXNlbGVjdCBTT0NfQVQ5MVNBTTlHNDUKLQlzZWxlY3QgQVQ5MV9VU0VfT0xEX0NMSwotCXNlbGVjdCBPTERfSVJRX0FUOTEKLQotZW5kY2hvaWNlCi0KLWNvbmZpZyBBUkNIX0FUOTFTQU05RzIwCi0JYm9vbAotCXNlbGVjdCBBUkNIX0FUOTFTQU05MjYwCi0KLWNvbmZpZyBBUkNIX0FUOTFTQU05RzEwCi0JYm9vbAotCXNlbGVjdCBBUkNIX0FUOTFTQU05MjYxCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pZiBBUkNIX0FUOTFSTTkyMDAKLQotY29tbWVudCAiQVQ5MVJNOTIwMCBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9PTkVBUk0KLQlib29sICJBamVjbyAxQVJNIFNpbmdsZSBCb2FyZCBDb21wdXRlciIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEFqZWNvJ3MgMUFSTSBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIuCi0JICA8aHR0cDovL3d3dy5hamVjby5maS8+Ci0KLWNvbmZpZyBNQUNIX0FUOTFSTTkyMDBFSwotCWJvb2wgIkF0bWVsIEFUOTFSTTkyMDAtRUsgRXZhbHVhdGlvbiBLaXQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxUk05MjAwLUVLIEV2YWx1YXRpb24gS2l0LgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL2R5bi9wcm9kdWN0cy90b29sc19jYXJkLmFzcD90b29sX2lkPTM1MDc+Ci0KLWNvbmZpZyBNQUNIX0NTQjMzNwotCWJvb2wgIkNvZ2VudCBDU0IzMzciCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBDb2dlbnQncyBDU0IzMzcgYm9hcmQuCi0JICA8aHR0cDovL3d3dy5jb2djb21wLmNvbS9jc2JfY3NiMzM3Lmh0bT4KLQotY29uZmlnIE1BQ0hfQ1NCNjM3Ci0JYm9vbCAiQ29nZW50IENTQjYzNyIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIENvZ2VudCdzIENTQjYzNyBib2FyZC4KLQkgIDxodHRwOi8vd3d3LmNvZ2NvbXAuY29tL2NzYl9jc2I2MzcuaHRtPgotCi1jb25maWcgTUFDSF9DQVJNRVZBCi0JYm9vbCAiQ29uaXRlYyBBUk0mRVZBIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQ29uaXRlYydzIEFUOTFSTTkyMDAtTUNVLU1vZHVsZS4KLQkgIDxodHRwOi8vd3d3LmNvbml0ZWMubmV0L2VuZ2xpc2gvbGludXhib2FyZC5waHA+Ci0KLWNvbmZpZyBNQUNIX0FURUI5MjAwCi0JYm9vbCAiRW1iZXN0IEFURUI5MjAwIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgRW1iZXN0J3MgQVRFQjkyMDAgYm9hcmQuCi0JICA8aHR0cDovL3d3dy5lbWJlZGluZm8uY29tL2VuZ2xpc2gvcHJvZHVjdC9BVEVCOTIwMC5hc3A+Ci0KLWNvbmZpZyBNQUNIX0tCOTIwMAotCWJvb2wgIkt3aWtCeXRlIEtCOTIweCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEt3aWtCeXRlJ3MgS0I5MjB4IGJvYXJkLgotCSAgPGh0dHA6Ly93d3cua3dpa2J5dGUuY29tL0tCOTIwMi5odG1sPgotCi1jb25maWcgTUFDSF9QSUNPVFVYMlhYCi0JYm9vbCAicGljb3R1eCAyMDAiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhIHBpY290dXggMjAwLgotCSAgPGh0dHA6Ly93d3cucGljb3R1eC5jb20vPgotCi1jb25maWcgTUFDSF9LQUZBCi0JYm9vbCAiU3BlcnJ5LVN1biBLQUZBIGJvYXJkIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgU3BlcnJ5LVN1bidzIEtBRkEgYm9hcmQuCi0KLWNvbmZpZyBNQUNIX0VDQkFUOTEKLQlib29sICJlbVFiaXQgRUNCX0FUOTEgU0JDIgotCXNlbGVjdCBIQVZFX0FUOTFfREFUQUZMQVNIX0NBUkQKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGVtUWJpdCdzIEVDQl9BVDkxIGJvYXJkLgotCSAgPGh0dHA6Ly93aWtpLmVtcWJpdC5jb20vZnJlZS1lY2ItYXQ5MT4KLQotY29uZmlnIE1BQ0hfWUw5MjAwCi0JYm9vbCAidWNEcmFnb24gWUwtOTIwMCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRoZSB1Y0RyYWdvbiBZTC05MjAwIGJvYXJkLgotCi1jb25maWcgTUFDSF9DUFVBVDkxCi0JYm9vbCAiRXVrcmVhIENQVUFUOTEiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgRXVrcmVhIEVsZWN0cm9tYXRpcXVlJ3MKLQkgIENQVUFUOTEgYm9hcmQgPGh0dHA6Ly93d3cuZXVrcmVhLmNvbS8+LgotCi1jb25maWcgTUFDSF9FQ085MjAKLQlib29sICJlY285MjAiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgZWNvOTIwIGJvYXJkCi1lbmRpZgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaWYgQVJDSF9BVDkxU0FNOTI2MAotCi1jb21tZW50ICJBVDkxU0FNOTI2MCBWYXJpYW50cyIKLQotY29tbWVudCAiQVQ5MVNBTTkyNjAgLyBBVDkxU0FNOVhFIEJvYXJkIFR5cGUiCi0KLWNvbmZpZyBNQUNIX0FUOTFTQU05MjYwRUsKLQlib29sICJBdG1lbCBBVDkxU0FNOTI2MC1FSyAvIEFUOTFTQU05WEUgRXZhbHVhdGlvbiBLaXQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOTI2MC1FSyBvciBBVDkxU0FNOVhFIEV2YWx1YXRpb24gS2l0Ci0JICA8aHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Byb2R1Y3RzL3Rvb2xzX2NhcmQuYXNwP3Rvb2xfaWQ9MzkzMz4KLQotY29uZmlnIE1BQ0hfQ0FNNjAKLQlib29sICJLd2lrQnl0ZSBLQjkyNjAgKENBTTYwKSBib2FyZCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEt3aWtCeXRlJ3MgS0I5MjYwIChDQU02MCkgYm9hcmQgYmFzZWQgb24gdGhlIEF0bWVsIEFUOTFTQU05MjYwLgotCSAgPGh0dHA6Ly93d3cua3dpa2J5dGUuY29tL0tCOTI2MC5odG1sPgotCi1jb25maWcgTUFDSF9TQU05X0w5MjYwCi0JYm9vbCAiT2xpbWV4IFNBTTktTDkyNjAgYm9hcmQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgT2xpbWV4J3MgU0FNOS1MOTI2MCBib2FyZCBiYXNlZCBvbiB0aGUgQXRtZWwgQVQ5MVNBTTkyNjAuCi0JICA8aHR0cDovL3d3dy5vbGltZXguY29tL2Rldi9zYW05LUw5MjYwLmh0bWw+Ci0KLWNvbmZpZyBNQUNIX0FGRUI5MjYwCi0JYm9vbCAiQ3VzdG9tIGFmZWI5MjYwIGJvYXJkIHYxIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgY3VzdG9tIGFmZWI5MjYwIGJvYXJkIGJhc2VkIG9uCi0JICBvcGVuIGhhcmR3YXJlIGRlc2lnbi4gU2VsZWN0IHRoaXMgZm9yIHJldmlzaW9uIDEgb2YgdGhlIGJvYXJkLgotCSAgPHN2bjovLzE5NC44NS4yMzguMjIvaG9tZS91c2Vycy9nZW9yZ2Uvc3ZuL2FybTllYj4KLQkgIDxodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvYXJtOWZwZ2EtZXZvbHV0aW9uLWJvYXJkPgotCi1jb25maWcgTUFDSF9DUFU5MjYwCi0JYm9vbCAiRXVrcmVhIENQVTkyNjAgYm9hcmQiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhIEV1a3JlYSBFbGVjdHJvbWF0aXF1ZSdzCi0JICBDUFU5MjYwIEJvYXJkIDxodHRwOi8vd3d3LmV1a3JlYS5jb20vPgotCi1jb25maWcgTUFDSF9GTEVYSUJJVFkKLQlib29sICJGbGV4aWJpdHkgQ29ubmVjdCBib2FyZCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEZsZXhpYml0eSBDb25uZWN0IGJvYXJkCi0JICA8aHR0cDovL3d3dy5mbGV4aWJpdHkuY29tPgotCi1jb21tZW50ICJBVDkxU0FNOUcyMCBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxU0FNOUcyMEVLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgRXZhbHVhdGlvbiBLaXQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAotCSAgdGhhdCBlbWJlZHMgb25seSBvbmUgU0QvTU1DIHNsb3QuCi0KLWNvbmZpZyBNQUNIX0FUOTFTQU05RzIwRUtfMk1NQwotCWRlcGVuZHMgb24gTUFDSF9BVDkxU0FNOUcyMEVLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgRXZhbHVhdGlvbiBLaXQgd2l0aCAyIFNEL01NQyBTbG90cyIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGFuIEF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0Ci0JICB3aXRoIDIgU0QvTU1DIFNsb3RzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBBVDkxU0FNOUcyMC1FSyByZXYuIEMgYW5kCi0JICBvbndhcmRzLgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL3Rvb2xzL1NBTTlHMjAtRUsuYXNweD4KLQotY29uZmlnIE1BQ0hfQ1BVOUcyMAotCWJvb2wgIkV1a3JlYSBDUFU5RzIwIGJvYXJkIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYSBFdWtyZWEgRWxlY3Ryb21hdGlxdWUncwotCSAgQ1BVOUcyMCBCb2FyZCA8aHR0cDovL3d3dy5ldWtyZWEuY29tLz4KLQotY29uZmlnIE1BQ0hfUE9SVFVYRzIwCi0JYm9vbCAidGFza2l0IFBvcnR1eEcyMCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRhc2tpdCdzIFBvcnR1eEcyMC4KLQkgIDxodHRwOi8vd3d3LnRhc2tpdC5kZS9lbi8+Ci0KLWNvbmZpZyBNQUNIX1NUQU1QOUcyMAotCWJvb2wgInRhc2tpdCBTdGFtcDlHMjAgQ1BVIG1vZHVsZSIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRhc2tpdCdzIFN0YW1wOUcyMCBDUFUgbW9kdWxlIG9uIGl0cwotCSAgZXZhbHVhdGlvbiBib2FyZC4KLQkgIDxodHRwOi8vd3d3LnRhc2tpdC5kZS9lbi8+Ci0KLWNvbmZpZyBNQUNIX1BDT05UUk9MX0cyMAotCWJvb2wgIlBDb250cm9sIEcyMCBDUFUgbW9kdWxlIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgdGFza2l0J3MgU3RhbXA5RzIwIENQVSBtb2R1bGUgb24gdGhpcwotCSAgY2FycmllciBib2FyZCwgYmVpbmcgdGhlIGRlY2VudHJhbGl6ZWQgdW5pdCBvZiBhIGJ1aWxkaW5nIGF1dG9tYXRpb24KLQkgIHN5c3RlbTsgZmVhdHVyaW5nIG52cmFtLCBldGgtc3dpdGNoLCBpc28tcnM0ODUsIGRpc3BsYXksIGlvCi0KLWNvbmZpZyBNQUNIX0dTSUExOFMKLQlib29sICJHU19JQTE4X1MgYm9hcmQiCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBHU19JQTE4X1MgYm9hcmQKLQkgIHByb2R1Y2VkIGJ5IEdlb1NJRyBMdGQgY29tcGFueS4gVGhpcyBpcyBhbiBpbnRlcm5ldCBhY2NlbGVyb2dyYXBoLgotCSAgPGh0dHA6Ly93d3cuZ2Vvc2lnLmNvbT4KLQotY29uZmlnIE1BQ0hfU05BUFBFUl85MjYwCi0JYm9vbCAiQmx1ZXdhdGVyIFN5c3RlbXMgU25hcHBlciA5MjYwLzlHMjAgbW9kdWxlIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEJsdWV3YXRlciBTeXN0ZW1zIFNuYXBwZXIgOTI2MCBvcgotCSAgU25hcHBlciA5RzIwIG1vZHVsZXMuCi0JICA8aHR0cDovL3d3dy5ibHVld2F0ZXJzeXMuY29tLz4KLWVuZGlmCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pZiBBUkNIX0FUOTFTQU05MjYxCi0KLWNvbW1lbnQgIkFUOTFTQU05MjYxIEJvYXJkIFR5cGUiCi0KLWNvbmZpZyBNQUNIX0FUOTFTQU05MjYxRUsKLQlib29sICJBdG1lbCBBVDkxU0FNOTI2MS1FSyBFdmFsdWF0aW9uIEtpdCIKLQlzZWxlY3QgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05MjYxLUVLIEV2YWx1YXRpb24gS2l0LgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL2R5bi9wcm9kdWN0cy90b29sc19jYXJkLmFzcD90b29sX2lkPTM4MjA+Ci0KLWNvbW1lbnQgIkFUOTFTQU05RzEwIEJvYXJkIFR5cGUiCi0KLWNvbmZpZyBNQUNIX0FUOTFTQU05RzEwRUsKLQlib29sICJBdG1lbCBBVDkxU0FNOUcxMC1FSyBFdmFsdWF0aW9uIEtpdCIKLQlzZWxlY3QgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05RzEwLUVLIEV2YWx1YXRpb24gS2l0LgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL2R5bi9wcm9kdWN0cy90b29sc19jYXJkLmFzcD90b29sX2lkPTQ1ODg+Ci0KLWVuZGlmCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pZiBBUkNIX0FUOTFTQU05MjYzCi0KLWNvbW1lbnQgIkFUOTFTQU05MjYzIEJvYXJkIFR5cGUiCi0KLWNvbmZpZyBNQUNIX0FUOTFTQU05MjYzRUsKLQlib29sICJBdG1lbCBBVDkxU0FNOTI2My1FSyBFdmFsdWF0aW9uIEtpdCIKLQlzZWxlY3QgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05MjYzLUVLIEV2YWx1YXRpb24gS2l0LgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL2R5bi9wcm9kdWN0cy90b29sc19jYXJkLmFzcD90b29sX2lkPTQwNTc+Ci0KLWVuZGlmCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pZiBBUkNIX0FUOTFTQU05UkwKLQotY29tbWVudCAiQVQ5MVNBTTlSTCBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxU0FNOVJMRUsKLQlib29sICJBdG1lbCBBVDkxU0FNOVJMLUVLIEV2YWx1YXRpb24gS2l0IgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOVJMLUVLIEV2YWx1YXRpb24gS2l0LgotCi1lbmRpZgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaWYgQVJDSF9BVDkxU0FNOUc0NQotCi1jb21tZW50ICJBVDkxU0FNOUc0NSBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxU0FNOU0xMEc0NUVLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTlNMTBHNDUtRUsgRXZhbHVhdGlvbiBLaXRzIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOU0xMEc0NS1FSyBFdmFsdWF0aW9uIEtpdC4KLQkgIFRob3NlIGJvYXJkcyBjYW4gYmUgcG9wdWxhdGVkIHdpdGggYW55IFNvQyBvZiBBVDkxU0FNOUc0NSBvciBBVDkxU0FNOU0xMAotCSAgZmFtaWxpZXM6IEFUOTFTQU05RzQ1LCBBVDkxU0FNOUc0NiwgQVQ5MVNBTTlNMTAgYW5kIEFUOTFTQU05TTExLgotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL3Rvb2xzL1NBTTlNMTAtRzQ1LUVLLmFzcHg+Ci0KLWVuZGlmCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pZiBBUkNIX0FUOTFYNDAKLQotY29tbWVudCAiQVQ5MVg0MCBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxRUIwMQotCWJvb2wgIkF0bWVsIEFUOTFFQjAxIEV2YWx1YXRpb24gS2l0IgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxRUIwMSBFdmFsdWF0aW9uIEtpdC4KLQkgIEl0IGlzIGFsc28gYSBwb3B1bGFyIHRhcmdldCBmb3Igc2ltdWxhdG9ycyBzdWNoIGFzIEdEQidzCi0JICBBUk0gc2ltdWxhdG9yIChjb21tb25seSBrbm93biBhcyB0aGUgQVJNdWxhdG9yKSBhbmQgdGhlCi0JICBTa3lleWUgc2ltdWxhdG9yLgotCi1lbmRpZgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY29tbWVudCAiQVQ5MSBCb2FyZCBPcHRpb25zIgotCi1jb25maWcgTVREX0FUOTFfREFUQUZMQVNIX0NBUkQKLQlib29sICJFbmFibGUgRGF0YUZsYXNoIENhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgRGF0YUZsYXNoIGNhcmQuCi0KLWVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCAxYjlhZTAyLi43YjY0MjRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC0yLDEwICsyLDggQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCiAKLW9iai15CQk6PSBncGlvLm8gc2V0dXAubyBzeXNpcnFfbWFzay5vCitvYmoteQkJOj0gc2V0dXAubyBzeXNpcnFfbWFzay5vCiAKLW9iai0kKENPTkZJR19PTERfSVJRX0FUOTEpCSs9IGlycS5vCi1vYmotJChDT05GSUdfT0xEX0NMS19BVDkxKQkrPSBjbG9jay5vCiBvYmotJChDT05GSUdfU09DX0FUOTFTQU05KQkrPSBzYW05X3NtYy5vCiAKICMgQ1BVLXNwZWNpZmljIHN1cHBvcnQKQEAgLTIwLDczICsxOCwxMiBAQAogb2JqLSQoQ09ORklHX1NPQ19TQU1BNUQzKQkrPSBzYW1hNWQzLm8KIG9iai0kKENPTkZJR19TT0NfU0FNQTVENCkJKz0gc2FtYTVkNC5vCiAKLW9iai0kKENPTkZJR19BUkNIX0FUOTFSTTkyMDApCSs9IGF0OTFybTkyMDBfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCkJKz0gYXQ5MXNhbTkyNjBfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSkJKz0gYXQ5MXNhbTkyNjFfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MykJKz0gYXQ5MXNhbTkyNjNfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOVJMKQkrPSBhdDkxc2FtOXJsX2RldmljZXMubwotb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCSs9IGF0OTFzYW05ZzQ1X2RldmljZXMubwotb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVg0MCkJKz0gYXQ5MXg0MC5vIGF0OTF4NDBfdGltZS5vCi0KLSMgQVQ5MVJNOTIwMCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9PTkVBUk0pCSs9IGJvYXJkLTFhcm0ubwotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLKQkrPSBib2FyZC1ybTkyMDBlay5vCi1vYmotJChDT05GSUdfTUFDSF9DU0IzMzcpCSs9IGJvYXJkLWNzYjMzNy5vCi1vYmotJChDT05GSUdfTUFDSF9DU0I2MzcpCSs9IGJvYXJkLWNzYjYzNy5vCi1vYmotJChDT05GSUdfTUFDSF9DQVJNRVZBKQkrPSBib2FyZC1jYXJtZXZhLm8KLW9iai0kKENPTkZJR19NQUNIX0tCOTIwMCkJKz0gYm9hcmQta2I5MjAyLm8KLW9iai0kKENPTkZJR19NQUNIX0FURUI5MjAwKQkrPSBib2FyZC1lYjkyMDAubwotb2JqLSQoQ09ORklHX01BQ0hfS0FGQSkJCSs9IGJvYXJkLWthZmEubwotb2JqLSQoQ09ORklHX01BQ0hfUElDT1RVWDJYWCkJKz0gYm9hcmQtcGljb3R1eDIwMC5vCi1vYmotJChDT05GSUdfTUFDSF9FQ0JBVDkxKQkrPSBib2FyZC1lY2JhdDkxLm8KLW9iai0kKENPTkZJR19NQUNIX1lMOTIwMCkJKz0gYm9hcmQteWwtOTIwMC5vCi1vYmotJChDT05GSUdfTUFDSF9DUFVBVDkxKQkrPSBib2FyZC1jcHVhdDkxLm8KLW9iai0kKENPTkZJR19NQUNIX0VDTzkyMCkJKz0gYm9hcmQtZWNvOTIwLm8KLQotIyBBVDkxU0FNOTI2MCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOTI2MEVLKSArPSBib2FyZC1zYW05MjYwZWsubwotb2JqLSQoQ09ORklHX01BQ0hfQ0FNNjApCSs9IGJvYXJkLWNhbTYwLm8KLW9iai0kKENPTkZJR19NQUNIX1NBTTlfTDkyNjApCSs9IGJvYXJkLXNhbTktbDkyNjAubwotb2JqLSQoQ09ORklHX01BQ0hfQUZFQjkyNjApCSs9IGJvYXJkLWFmZWItOTI2MHYxLm8KLW9iai0kKENPTkZJR19NQUNIX0NQVTkyNjApCSs9IGJvYXJkLWNwdTlrcmVhLm8KLW9iai0kKENPTkZJR19NQUNIX0ZMRVhJQklUWSkJKz0gYm9hcmQtZmxleGliaXR5Lm8KLQotIyBBVDkxU0FNOTI2MSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOTI2MUVLKSArPSBib2FyZC1zYW05MjYxZWsubwotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHMTBFSykgKz0gYm9hcmQtc2FtOTI2MWVrLm8KLQotIyBBVDkxU0FNOTI2MyBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOTI2M0VLKSArPSBib2FyZC1zYW05MjYzZWsubwotCi0jIEFUOTFTQU05UkwgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlSTEVLKQkrPSBib2FyZC1zYW05cmxlay5vCi0KLSMgQVQ5MVNBTTlHMjAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHMjBFSykgKz0gYm9hcmQtc2FtOWcyMGVrLm8KLW9iai0kKENPTkZJR19NQUNIX0NQVTlHMjApCSs9IGJvYXJkLWNwdTlrcmVhLm8KLW9iai0kKENPTkZJR19NQUNIX1NUQU1QOUcyMCkJKz0gYm9hcmQtc3RhbXA5ZzIwLm8KLW9iai0kKENPTkZJR19NQUNIX1BPUlRVWEcyMCkJKz0gYm9hcmQtc3RhbXA5ZzIwLm8KLW9iai0kKENPTkZJR19NQUNIX1BDT05UUk9MX0cyMCkJKz0gYm9hcmQtcGNvbnRyb2wtZzIwLm8gYm9hcmQtc3RhbXA5ZzIwLm8KLW9iai0kKENPTkZJR19NQUNIX0dTSUExOFMpCSs9IGJvYXJkLWdzaWExOHMubyBib2FyZC1zdGFtcDlnMjAubwotCi0jIEFUOTFTQU05MjYwL0FUOTFTQU05RzIwIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKLW9iai0kKENPTkZJR19NQUNIX1NOQVBQRVJfOTI2MCkJKz0gYm9hcmQtc25hcHBlcjkyNjAubwotCi0jIEFUOTFTQU05RzQ1IGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKLW9iai0kKENPTkZJR19NQUNIX0FUOTFTQU05TTEwRzQ1RUspICs9IGJvYXJkLXNhbTltMTBnNDVlay5vCi0KICMgQVQ5MVNBTSBib2FyZCB3aXRoIGRldmljZS10cmVlCiBvYmotJChDT05GSUdfTUFDSF9BVDkxUk05MjAwX0RUKSArPSBib2FyZC1kdC1ybTkyMDAubwogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlfRFQpICs9IGJvYXJkLWR0LXNhbTkubwogCiAjIFNBTUE1IGJvYXJkIHdpdGggZGV2aWNlLXRyZWUKLW9iai0kKENPTkZJR19NQUNIX1NBTUE1X0RUKSArPSBib2FyZC1kdC1zYW1hNS5vCi0KLSMgQVQ5MVg0MCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9BVDkxRUIwMSkJKz0gYm9hcmQtZWIwMS5vCi0KLSMgRHJpdmVycwotb2JqLXkJCQkJKz0gbGVkcy5vCitvYmotJChDT05GSUdfU09DX1NBTUE1KQkJKz0gYm9hcmQtZHQtc2FtYTUubwogCiAjIFBvd2VyIE1hbmFnZW1lbnQKIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlLmJvb3QKaW5kZXggNTMwOWY5Yi4uMjllZDBmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlLmJvb3QKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlLmJvb3QKQEAgLTMsMTIgKzMsNiBAQAogIyAgIFBBUkFNU19QSFlTIG11c3QgYmUgd2l0aGluIDRNQiBvZiBaUkVMQUREUgogIyAgIElOSVRSRF9QSFlTIG11c3QgYmUgaW4gUkFNCiAKLWlmZXEgKCQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpLHkpCi0gICB6cmVsYWRkci15CSs9IDB4NzAwMDgwMDAKLXBhcmFtc19waHlzLXkJOj0gMHg3MDAwMDEwMAotaW5pdHJkX3BoeXMteQk6PSAweDcwNDEwMDAwCi1lbHNlCiAgICB6cmVsYWRkci15CSs9IDB4MjAwMDgwMDAKIHBhcmFtc19waHlzLXkJOj0gMHgyMDAwMDEwMAogaW5pdHJkX3BoeXMteQk6PSAweDIwNDEwMDAwCi1lbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFfYWljLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MV9haWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFlYTY2MS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MV9haWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfYWljLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5Ci0gKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKLSAqCi0gKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQUlDKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdpc3RlcnMuCi0gKiBCYXNlZCBvbiBBVDkxUk05MjAwIGRhdGFzaGVldCByZXZpc2lvbiBFLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBBVDkxX0FJQ19ICi0jZGVmaW5lIEFUOTFfQUlDX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIF9faW9tZW0gKmF0OTFfYWljX2Jhc2U7Ci0KLSNkZWZpbmUgYXQ5MV9haWNfcmVhZChmaWVsZCkgXAotCV9fcmF3X3JlYWRsKGF0OTFfYWljX2Jhc2UgKyBmaWVsZCkKLQotI2RlZmluZSBhdDkxX2FpY193cml0ZShmaWVsZCwgdmFsdWUpIFwKLQlfX3Jhd193cml0ZWwodmFsdWUsIGF0OTFfYWljX2Jhc2UgKyBmaWVsZCkKLSNlbHNlCi0uZXh0ZXJuIGF0OTFfYWljX2Jhc2UKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgaXJxIGxpbmVzIG1hbmFnZWQgYnkgQUlDICovCi0jZGVmaW5lIE5SX0FJQ19JUlFTCTMyCi0jZGVmaW5lIE5SX0FJQzVfSVJRUwkxMjgKLQotI2RlZmluZSBBVDkxX0FJQzVfU1NSCQkweDAJCQkvKiBTb3VyY2UgU2VsZWN0IFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSAJQVQ5MV9BSUM1X0lOVFNFTF9NU0sJKDB4N2YgPDwgMCkJCS8qIEludGVycnVwdCBMaW5lIFNlbGVjdGlvbiBNYXNrICovCi0KLSNkZWZpbmUgQVQ5MV9BSUNfSVJRX01JTl9QUklPUklUWQkwCi0jZGVmaW5lIEFUOTFfQUlDX0lSUV9NQVhfUFJJT1JJVFkJNwotCi0jZGVmaW5lIEFUOTFfQUlDX1NNUihuKQkJKChuKSAqIDQpCQkvKiBTb3VyY2UgTW9kZSBSZWdpc3RlcnMgMC0zMSAqLwotI2RlZmluZSBBVDkxX0FJQzVfU01SCQkweDQJCQkvKiBTb3VyY2UgTW9kZSBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUJCUFUOTFfQUlDX1BSSU9SCQkoNyA8PCAwKQkJLyogUHJpb3JpdHkgTGV2ZWwgKi8KLSNkZWZpbmUJCUFUOTFfQUlDX1NSQ1RZUEUJKDMgPDwgNSkJCS8qIEludGVycnVwdCBTb3VyY2UgVHlwZSAqLwotI2RlZmluZQkJCUFUOTFfQUlDX1NSQ1RZUEVfTE9XCQkoMCA8PCA1KQotI2RlZmluZQkJCUFUOTFfQUlDX1NSQ1RZUEVfRkFMTElORwkoMSA8PCA1KQotI2RlZmluZQkJCUFUOTFfQUlDX1NSQ1RZUEVfSElHSAkJKDIgPDwgNSkKLSNkZWZpbmUJCQlBVDkxX0FJQ19TUkNUWVBFX1JJU0lORwkJKDMgPDwgNSkKLQotI2RlZmluZSBBVDkxX0FJQ19TVlIobikJCSgweDgwICsgKChuKSAqIDQpKQkvKiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVycyAwLTMxICovCi0jZGVmaW5lIEFUOTFfQUlDNV9TVlIJCTB4OAkJCS8qIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDX0lWUgkJMHgxMDAJCQkvKiBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JVlIJCTB4MTAJCQkvKiBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19GVlIJCTB4MTA0CQkJLyogRmFzdCBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9GVlIJCTB4MTQJCQkvKiBGYXN0IEludGVycnVwdCBWZWN0b3IgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDX0lTUgkJMHgxMDgJCQkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JU1IJCTB4MTgJCQkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZQkJQVQ5MV9BSUNfSVJRSUQJCSgweDFmIDw8IDApCQkvKiBDdXJyZW50IEludGVycnVwdCBJZGVudGlmaWVyICovCi0KLSNkZWZpbmUgQVQ5MV9BSUNfSVBSCQkweDEwYwkJCS8qIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JUFIwCQkweDIwCQkJLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgMCBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0lQUjEJCTB4MjQJCQkvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAxIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQzVfSVBSMgkJMHgyOAkJCS8qIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIDIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JUFIzCQkweDJjCQkJLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgMyBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfSU1SCQkweDExMAkJCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JTVIJCTB4MzAJCQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfQ0lTUgkJMHgxMTQJCQkvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0NJU1IJCTB4MzQJCQkvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lCQlBVDkxX0FJQ19ORklRCQkoMSA8PCAwKQkJLyogbkZJUSBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfQUlDX05JUlEJCSgxIDw8IDEpCQkvKiBuSVJRIFN0YXR1cyAqLwotCi0jZGVmaW5lIEFUOTFfQUlDX0lFQ1IJCTB4MTIwCQkJLyogSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JRUNSCQkweDQwCQkJLyogSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19JRENSCQkweDEyNAkJCS8qIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0lEQ1IJCTB4NDQJCQkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19JQ0NSCQkweDEyOAkJCS8qIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JQ0NSCQkweDQ4CQkJLyogSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDX0lTQ1IJCTB4MTJjCQkJLyogSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JU0NSCQkweDRjCQkJLyogSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19FT0lDUgkJMHgxMzAJCQkvKiBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0VPSUNSCQkweDM4CQkJLyogRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19TUFUJCTB4MTM0CQkJLyogU3B1cmlvdXMgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FJQzVfU1BVCQkweDNjCQkJLyogU3B1cmlvdXMgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfRENSCQkweDEzOAkJCS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0RDUgkJMHg2YwkJCS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lCQlBVDkxX0FJQ19EQ1JfUFJPVAkoMSA8PCAwKQkJLyogUHJvdGVjdGlvbiBNb2RlICovCi0jZGVmaW5lCQlBVDkxX0FJQ19EQ1JfR01TSwkoMSA8PCAxKQkJLyogR2VuZXJhbCBNYXNrICovCi0KLSNkZWZpbmUgQVQ5MV9BSUNfRkZFUgkJMHgxNDAJCQkvKiBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyIFtTQU05IG9ubHldICovCi0jZGVmaW5lIEFUOTFfQUlDNV9GRkVSCQkweDUwCQkJLyogRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfRkZEUgkJMHgxNDQJCQkvKiBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3RlciBbU0FNOSBvbmx5XSAqLwotI2RlZmluZSBBVDkxX0FJQzVfRkZEUgkJMHg1NAkJCS8qIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19GRlNSCQkweDE0OAkJCS8qIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXIgW1NBTTkgb25seV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0ZGU1IJCTB4NTgJCQkvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyIFtBSUM1XSAqLwotCi12b2lkIGF0OTFfYWljX2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotdm9pZCBhdDkxX2FpYzVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFfdGMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxX3RjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YTMxN2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFfdGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3RjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKLSAqCi0gKiBUaW1lci9Db3VudGVyIFVuaXQgKFRDKSByZWdpc3RlcnMuCi0gKiBCYXNlZCBvbiBBVDkxUk05MjAwIGRhdGFzaGVldCByZXZpc2lvbiBFLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBBVDkxX1RDX0gKLSNkZWZpbmUgQVQ5MV9UQ19ICi0KLSNkZWZpbmUgQVQ5MV9UQ19CQ1IJCTB4YzAJCS8qIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfVENfU1lOQwkJKDEgPDwgMCkJLyogU3luY2hybyBDb21tYW5kICovCi0KLSNkZWZpbmUgQVQ5MV9UQ19CTVIJCTB4YzQJCS8qIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfVENfVEMwWEMwUwkJKDMgPDwgMCkJLyogRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzBYQzBTX1RDTEswCQkoMCA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfVEMwWEMwU19OT05FCQkoMSA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfVEMwWEMwU19USU9BMQkJKDIgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX1RDX1RDMFhDMFNfVElPQTIJCSgzIDw8IDApCi0jZGVmaW5lCQlBVDkxX1RDX1RDMVhDMVMJCSgzIDw8IDIpCS8qIEV4dGVybmFsIENsb2NrIFNpZ25hbCAxIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfVENfVEMxWEMxU19UQ0xLMQkJKDAgPDwgMikKLSNkZWZpbmUJCQlBVDkxX1RDX1RDMVhDMVNfTk9ORQkJKDEgPDwgMikKLSNkZWZpbmUJCQlBVDkxX1RDX1RDMVhDMVNfVElPQTAJCSgyIDw8IDIpCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzFYQzFTX1RJT0EyCQkoMyA8PCAyKQotI2RlZmluZQkJQVQ5MV9UQ19UQzJYQzJTCQkoMyA8PCA0KQkvKiBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCQlBVDkxX1RDX1RDMlhDMlNfVENMSzIJCSgwIDw8IDQpCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzJYQzJTX05PTkUJCSgxIDw8IDQpCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzJYQzJTX1RJT0EwCQkoMiA8PCA0KQotI2RlZmluZQkJCUFUOTFfVENfVEMyWEMyU19USU9BMQkJKDMgPDwgNCkKLQotCi0jZGVmaW5lIEFUOTFfVENfQ0NSCQkweDAwCQkvKiBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfVENfQ0xLRU4JCSgxIDw8IDApCS8qIENvdW50ZXIgQ2xvY2sgRW5hYmxlIENvbW1hbmQgKi8KLSNkZWZpbmUJCUFUOTFfVENfQ0xLRElTCQkoMSA8PCAxKQkvKiBDb3VudGVyIENMb2NrIERpc2FibGUgQ29tbWFuZCAqLwotI2RlZmluZQkJQVQ5MV9UQ19TV1RSRwkJKDEgPDwgMikJLyogU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kICovCi0KLSNkZWZpbmUgQVQ5MV9UQ19DTVIJCTB4MDQJCS8qIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9UQ19UQ0NMS1MJCSg3IDw8IDApCS8qIENhcHR1cmUvV2F2ZWZvcm0gTW9kZTogQ2xvY2sgU2VsZWN0aW9uICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19USU1FUl9DTE9DSzEJCSgwIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19USU1FUl9DTE9DSzIJCSgxIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19USU1FUl9DTE9DSzMJCSgyIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19USU1FUl9DTE9DSzQJCSgzIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19USU1FUl9DTE9DSzUJCSg0IDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19YQzAJCQkoNSA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfWEMxCQkJKDYgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX1RDX1hDMgkJCSg3IDw8IDApCi0jZGVmaW5lCQlBVDkxX1RDX0NMS0kJCSgxIDw8IDMpCS8qIENhcHR1cmUvV2F2ZWZvcm0gTW9kZTogQ2xvY2sgSW52ZXJ0ICovCi0jZGVmaW5lCQlBVDkxX1RDX0JVUlNUCQkoMyA8PCA0KQkvKiBDYXB0dXJlL1dhdmVmb3JtIE1vZGU6IEJ1cnN0IFNpZ25hbCBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCUFUOTFfVENfTERCU1RPUAkJKDEgPDwgNikJLyogQ2FwdHVyZSBNb2RlOiBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBUQiBMb2FkaW5nICovCi0jZGVmaW5lCQlBVDkxX1RDX0xEQkRJUwkJKDEgPDwgNykJLyogQ2FwdHVyZSBNb2RlOiBDb3VudGVyIENsb2NrIERpc2FibGUgd2l0aCBSQiBMb2FkaW5nICovCi0jZGVmaW5lCQlBVDkxX1RDX0VUUkdFREcJCSgzIDw8IDgpCS8qIENhcHR1cmUgTW9kZTogRXh0ZXJuYWwgVHJpZ2dlciBFZGdlIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJQVQ5MV9UQ19BQkVUUkcJCSgxIDw8IDEwKQkvKiBDYXB0dXJlIE1vZGU6IFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJQVQ5MV9UQ19DUENUUkcJCSgxIDw8IDE0KQkvKiBDYXB0dXJlIE1vZGU6IFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUgKi8KLSNkZWZpbmUJCUFUOTFfVENfV0FWRQkJKDEgPDwgMTUpCS8qIENhcHR1cmUvV2F2ZWZvcm0gbW9kZSAqLwotI2RlZmluZQkJQVQ5MV9UQ19MRFJBCQkoMyA8PCAxNikJLyogQ2FwdHVyZSBNb2RlOiBSQSBMb2FkaW5nIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJQVQ5MV9UQ19MRFJCCQkoMyA8PCAxOCkJLyogQ2FwdHVyZSBNb2RlOiBSQiBMb2FkaW5nIFNlbGVjdGlvbiAqLwotCi0jZGVmaW5lCQlBVDkxX1RDX0NQQ1NUT1AJCSgxIDw8ICA2KQkvKiBXYXZlZm9ybSBNb2RlOiBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlICovCi0jZGVmaW5lCQlBVDkxX1RDX0NQQ0RJUwkJKDEgPDwgIDcpCS8qIFdhdmVmb3JtIE1vZGU6IENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUgKi8KLSNkZWZpbmUJCUFUOTFfVENfRUVWVEVERwkJKDMgPDwgIDgpCS8qIFdhdmVmb3JtIE1vZGU6IEV4dGVybmFsIEV2ZW50IEVkZ2UgU2VsZWN0aW9uICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19FRVZURURHX05PTkUJCSgwIDw8IDgpCi0jZGVmaW5lCQkJQVQ5MV9UQ19FRVZURURHX1JJU0lORwkJKDEgPDwgOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRFREdfRkFMTElORwkJKDIgPDwgOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRFREdfQk9USAkJKDMgPDwgOCkKLSNkZWZpbmUJCUFUOTFfVENfRUVWVAkJKDMgPDwgMTApCS8qIFdhdmVmb3JtIE1vZGU6IEV4dGVybmFsIEV2ZW50IFNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfVENfRUVWVF9USU9CCQkoMCA8PCAxMCkKLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRfWEMwCQkoMSA8PCAxMCkKLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRfWEMxCQkoMiA8PCAxMCkKLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRfWEMyCQkoMyA8PCAxMCkKLSNkZWZpbmUJCUFUOTFfVENfRU5FVFJHCQkoMSA8PCAxMikJLyogV2F2ZWZvcm0gTW9kZTogRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBFbmFibGUgKi8KLSNkZWZpbmUJCUFUOTFfVENfV0FWRVNFTAkJKDMgPDwgMTMpCS8qIFdhdmVmb3JtIE1vZGU6IFdhdmVmb3JtIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfVENfV0FWRVNFTF9VUAkJKDAgPDwgMTMpCi0jZGVmaW5lCQkJQVQ5MV9UQ19XQVZFU0VMX1VQX0FVVE8JCSgyIDw8IDEzKQotI2RlZmluZQkJCUFUOTFfVENfV0FWRVNFTF9VUERPV04JCSgxIDw8IDEzKQotI2RlZmluZQkJCUFUOTFfVENfV0FWRVNFTF9VUERPV05fQVVUTwkoMyA8PCAxMykKLSNkZWZpbmUJCUFUOTFfVENfQUNQQQkJKDMgPDwgMTYpCS8qIFdhdmVmb3JtIE1vZGU6IFJBIENvbXBhcmUgRWZmZWN0IG9uIFRJT0EgKi8KLSNkZWZpbmUJCQlBVDkxX1RDX0FDUEFfTk9ORQkJKDAgPDwgMTYpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BQ1BBX1NFVAkJKDEgPDwgMTYpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BQ1BBX0NMRUFSCQkoMiA8PCAxNikKLSNkZWZpbmUJCQlBVDkxX1RDX0FDUEFfVE9HR0xFCQkoMyA8PCAxNikKLSNkZWZpbmUJCUFUOTFfVENfQUNQQwkJKDMgPDwgMTgpCS8qIFdhdmVmb3JtIE1vZGU6IFJDIENvbXByZSBFZmZlY3Qgb24gVElPQSAqLwotI2RlZmluZQkJCUFUOTFfVENfQUNQQ19OT05FCQkoMCA8PCAxOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0FDUENfU0VUCQkoMSA8PCAxOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0FDUENfQ0xFQVIJCSgyIDw8IDE4KQotI2RlZmluZQkJCUFUOTFfVENfQUNQQ19UT0dHTEUJCSgzIDw8IDE4KQotI2RlZmluZQkJQVQ5MV9UQ19BRUVWVAkJKDMgPDwgMjApCS8qIFdhdmVmb3JtIE1vZGU6IEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19BRUVWVF9OT05FCQkoMCA8PCAyMCkKLSNkZWZpbmUJCQlBVDkxX1RDX0FFRVZUX1NFVAkJKDEgPDwgMjApCi0jZGVmaW5lCQkJQVQ5MV9UQ19BRUVWVF9DTEVBUgkJKDIgPDwgMjApCi0jZGVmaW5lCQkJQVQ5MV9UQ19BRUVWVF9UT0dHTEUJCSgzIDw8IDIwKQotI2RlZmluZQkJQVQ5MV9UQ19BU1dUUkcJCSgzIDw8IDIyKQkvKiBXYXZlZm9ybSBNb2RlOiBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9BICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19BU1dUUkdfTk9ORQkJKDAgPDwgMjIpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BU1dUUkdfU0VUCQkoMSA8PCAyMikKLSNkZWZpbmUJCQlBVDkxX1RDX0FTV1RSR19DTEVBUgkJKDIgPDwgMjIpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BU1dUUkdfVE9HR0xFCQkoMyA8PCAyMikKLSNkZWZpbmUJCUFUOTFfVENfQkNQQgkJKDMgPDwgMjQpCS8qIFdhdmVmb3JtIE1vZGU6IFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0IgKi8KLSNkZWZpbmUJCQlBVDkxX1RDX0JDUEJfTk9ORQkJKDAgPDwgMjQpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BCX1NFVAkJKDEgPDwgMjQpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BCX0NMRUFSCQkoMiA8PCAyNCkKLSNkZWZpbmUJCQlBVDkxX1RDX0JDUEJfVE9HR0xFCQkoMyA8PCAyNCkKLSNkZWZpbmUJCUFUOTFfVENfQkNQQwkJKDMgPDwgMjYpCS8qIFdhdmVmb3JtIE1vZGU6IFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0IgKi8KLSNkZWZpbmUJCQlBVDkxX1RDX0JDUENfTk9ORQkJKDAgPDwgMjYpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BDX1NFVAkJKDEgPDwgMjYpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BDX0NMRUFSCQkoMiA8PCAyNikKLSNkZWZpbmUJCQlBVDkxX1RDX0JDUENfVE9HR0xFCQkoMyA8PCAyNikKLSNkZWZpbmUJCUFUOTFfVENfQkVFVlQJCSgzIDw8IDI4KQkvKiBXYXZlZm9ybSBNb2RlOiBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQiAqLwotI2RlZmluZQkJCUFUOTFfVENfQkVFVlRfTk9ORQkJKDAgPDwgMjgpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CRUVWVF9TRVQJCSgxIDw8IDI4KQotI2RlZmluZQkJCUFUOTFfVENfQkVFVlRfQ0xFQVIJCSgyIDw8IDI4KQotI2RlZmluZQkJCUFUOTFfVENfQkVFVlRfVE9HR0xFCQkoMyA8PCAyOCkKLSNkZWZpbmUJCUFUOTFfVENfQlNXVFJHCQkoMyA8PCAzMCkJLyogV2F2ZWZvcm0gTW9kZTogU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQiAqLwotI2RlZmluZQkJCUFUOTFfVENfQlNXVFJHX05PTkUJCSgwIDw8IDMwKQotI2RlZmluZQkJCUFUOTFfVENfQlNXVFJHX1NFVAkJKDEgPDwgMzApCi0jZGVmaW5lCQkJQVQ5MV9UQ19CU1dUUkdfQ0xFQVIJCSgyIDw8IDMwKQotI2RlZmluZQkJCUFUOTFfVENfQlNXVFJHX1RPR0dMRQkJKDMgPDwgMzApCi0KLSNkZWZpbmUgQVQ5MV9UQ19DVgkJMHgxMAkJLyogQ291bnRlciBWYWx1ZSAqLwotI2RlZmluZSBBVDkxX1RDX1JBCQkweDE0CQkvKiBSZWdpc3RlciBBICovCi0jZGVmaW5lIEFUOTFfVENfUkIJCTB4MTgJCS8qIFJlZ2lzdGVyIEIgKi8KLSNkZWZpbmUgQVQ5MV9UQ19SQwkJMHgxYwkJLyogUmVnaXN0ZXIgQyAqLwotCi0jZGVmaW5lIEFUOTFfVENfU1IJCTB4MjAJCS8qIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9UQ19DT1ZGUwkJKDEgPDwgIDApCS8qIENvdW50ZXIgT3ZlcmZsb3cgU3RhdHVzICovCi0jZGVmaW5lCQlBVDkxX1RDX0xPVlJTCQkoMSA8PCAgMSkJLyogTG9hZCBPdmVycnVuIFN0YXR1cyAqLwotI2RlZmluZQkJQVQ5MV9UQ19DUEFTCQkoMSA8PCAgMikJLyogUkEgQ29tcGFyZSBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfVENfQ1BCUwkJKDEgPDwgIDMpCS8qIFJCIENvbXBhcmUgU3RhdHVzICovCi0jZGVmaW5lCQlBVDkxX1RDX0NQQ1MJCSgxIDw8ICA0KQkvKiBSQyBDb21wYXJlIFN0YXR1cyAqLwotI2RlZmluZQkJQVQ5MV9UQ19MRFJBUwkJKDEgPDwgIDUpCS8qIFJBIExvYWRpbmcgU3RhdHVzICovCi0jZGVmaW5lCQlBVDkxX1RDX0xEUkJTCQkoMSA8PCAgNikJLyogUkIgTG9hZGluZyBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfVENfRVRSR1MJCSgxIDw8ICA3KQkvKiBFeHRlcm5hbCBUcmlnZ2VyIFN0YXR1cyAqLwotI2RlZmluZQkJQVQ5MV9UQ19DTEtTVEEJCSgxIDw8IDE2KQkvKiBDbG9jayBFbmFibGluZyBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfVENfTVRJT0EJCSgxIDw8IDE3KQkvKiBUSU9BIE1pcnJvciAqLwotI2RlZmluZQkJQVQ5MV9UQ19NVElPQgkJKDEgPDwgMTgpCS8qIFRJT0IgTWlycm9yICovCi0KLSNkZWZpbmUgQVQ5MV9UQ19JRVIJCTB4MjQJCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9UQ19JRFIJCTB4MjgJCS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfVENfSU1SCQkweDJjCQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMC5jCmluZGV4IDAzODcwMmUuLmI1MjkxNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDAuYwpAQCAtMTEsMjk2ICsxMSwxNSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX3N0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgInBtLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19PTERfQ0xLX0FUOTEpCi0jaW5jbHVkZSAiY2xvY2suaCIKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ2xvY2tzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgotICovCi1zdGF0aWMgc3RydWN0IGNsayB1ZGNfY2xrID0gewotCS5uYW1lCQk9ICJ1ZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVURQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgb2hjaV9jbGsgPSB7Ci0JLm5hbWUJCT0gIm9oY2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVUhQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgZXRoZXJfY2xrID0gewotCS5uYW1lCQk9ICJldGhlcl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9FTUFDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbW1jX2NsayA9IHsKLQkubmFtZQkJPSAibWNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX01DSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aV9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9UV0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1VTMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0Ml9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0Ml9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9VUzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDNfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVVMzLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpX2NsayA9IHsKLQkubmFtZQkJPSAic3BpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1NQSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1BJT0EsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9CX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9QSU9CLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0NfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfUElPQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0RfY2xrID0gewotCS5uYW1lCQk9ICJwaW9EX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1BJT0QsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MwX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9TU0MwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfU1NDMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzJfY2xrID0gewotCS5uYW1lCQk9ICJzc2MyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1NTQzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzBfY2xrID0gewotCS5uYW1lCQk9ICJ0YzBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVEMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NsayA9IHsKLQkubmFtZQkJPSAidGMxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1RDMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMl9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9UQzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzNfY2xrID0gewotCS5uYW1lCQk9ICJ0YzNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVEMzLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGM0X2NsayA9IHsKLQkubmFtZQkJPSAidGM0X2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1RDNCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjNV9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjNV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9UQzUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmcGlvQV9jbGssCi0JJnBpb0JfY2xrLAotCSZwaW9DX2NsaywKLQkmcGlvRF9jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJnVzYXJ0M19jbGssCi0JJm1tY19jbGssCi0JJnVkY19jbGssCi0JJnR3aV9jbGssCi0JJnNwaV9jbGssCi0JJnNzYzBfY2xrLAotCSZzc2MxX2NsaywKLQkmc3NjMl9jbGssCi0JJnRjMF9jbGssCi0JJnRjMV9jbGssCi0JJnRjMl9jbGssCi0JJnRjM19jbGssCi0JJnRjNF9jbGssCi0JJnRjNV9jbGssCi0JJm9oY2lfY2xrLAotCSZldGhlcl9jbGssCi0JLy8gaXJxMCAuLiBpcnE2Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcGVyaXBoX2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJhdG1lbF90Y2IuMSIsICZ0YzNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImF0bWVsX3RjYi4xIiwgJnRjNF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiYXRtZWxfdGNiLjEiLCAmdGM1X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMCIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMSIsICZzc2MxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMiIsICZzc2MyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmZDAwMDAuc3NjIiwgJnNzYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmZkNDAwMC5zc2MiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmQ4MDAwLnNzYyIsICZzc2MyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxcm05MjAwLjAiLCAmdHdpX2NsayksCi0JLyogZmFrZSBoY2xrIGNsb2NrICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MV9vaGNpIiwgJm9oY2lfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9BIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9CIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9DIiwgJnBpb0NfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9EIiwgJnBpb0RfY2xrKSwKLQkvKiB1c2FydCBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZmYyMDAuc2VyaWFsIiwgJm1jayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmMwMDAwLnNlcmlhbCIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmYzQwMDAuc2VyaWFsIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZjODAwMC5zZXJpYWwiLCAmdXNhcnQyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmNjMDAwLnNlcmlhbCIsICZ1c2FydDNfY2xrKSwKLQkvKiB0YyBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZmE0MDAwLnRpbWVyIiwgJnRjM19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiZmZmYTQwMDAudGltZXIiLCAmdGM0X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJmZmZhNDAwMC50aW1lciIsICZ0YzVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmZmZiNDAwMC5tbWMiLCAmbW1jX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImVtYWNfY2xrIiwgImZmZmJjMDAwLmV0aGVybmV0IiwgJmV0aGVyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmI4MDAwLmkyYyIsICZ0d2lfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICIzMDAwMDAub2hjaSIsICZvaGNpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9DX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmYTAwLmdwaW8iLCAmcGlvRF9jbGspLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHVzYXJ0X2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjAiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMSIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMiIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMyIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNCIsICZ1c2FydDNfY2xrKSwKLX07Ci0KLS8qCi0gKiBUaGUgZm91ciBwcm9ncmFtbWFibGUgY2xvY2tzLgotICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7Ci0JLm5hbWUJCT0gInBjazAiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7Ci0JLm5hbWUJCT0gInBjazEiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAxLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazIgPSB7Ci0JLm5hbWUJCT0gInBjazIiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAyLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazMgPSB7Ci0JLm5hbWUJCT0gInBjazMiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAzLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFybTkyMDBfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCWNsa2Rldl9hZGRfdGFibGUodXNhcnRfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRSh1c2FydF9jbG9ja3NfbG9va3VwcykpOwotCi0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotCWNsa19yZWdpc3RlcigmcGNrMik7Ci0JY2xrX3JlZ2lzdGVyKCZwY2szKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGF0OTFybTkyMDBfcmVnaXN0ZXJfY2xvY2tzIE5VTEwKLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEdQSU8KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXJtOTIwMF9ncGlvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5pZAkJPSBBVDkxUk05MjAwX0lEX1BJT0EsCi0JCS5yZWdiYXNlCT0gQVQ5MVJNOTIwMF9CQVNFX1BJT0EsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVJNOTIwMF9JRF9QSU9CLAotCQkucmVnYmFzZQk9IEFUOTFSTTkyMDBfQkFTRV9QSU9CLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFSTTkyMDBfSURfUElPQywKLQkJLnJlZ2Jhc2UJPSBBVDkxUk05MjAwX0JBU0VfUElPQywKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxUk05MjAwX0lEX1BJT0QsCi0JCS5yZWdiYXNlCT0gQVQ5MVJNOTIwMF9CQVNFX1BJT0QsCi0JfQotfTsKIAogc3RhdGljIHZvaWQgYXQ5MXJtOTIwMF9pZGxlKHZvaWQpCiB7CkBAIC0zMjksNzQgKzQ4LDE0IEBACiAJYXQ5MV9pbml0X3NyYW0oMCwgQVQ5MVJNOTIwMF9TUkFNX0JBU0UsIEFUOTFSTTkyMDBfU1JBTV9TSVpFKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFybTkyMDBfaW9yZW1hcF9yZWdpc3RlcnModm9pZCkKLXsKLQlhdDkxcm05MjAwX2lvcmVtYXBfc3QoQVQ5MVJNOTIwMF9CQVNFX1NUKTsKLQlhdDkxX2lvcmVtYXBfcmFtYygwLCBBVDkxUk05MjAwX0JBU0VfTUMsIDI1Nik7Ci0JYXQ5MV9wbV9zZXRfc3RhbmRieShhdDkxcm05MjAwX3N0YW5kYnkpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9pbml0aWFsaXplKHZvaWQpCiB7CiAJYXJtX3BtX2lkbGUgPSBhdDkxcm05MjAwX2lkbGU7CiAJYXJtX3BtX3Jlc3RhcnQgPSBhdDkxcm05MjAwX3Jlc3RhcnQ7Ci0KLQkvKiBJbml0aWFsaXplIEdQSU8gc3Vic3lzdGVtICovCi0JYXQ5MV9ncGlvX2luaXQoYXQ5MXJtOTIwMF9ncGlvLAotCQljcHVfaXNfYXQ5MXJtOTIwMF9iZ2EoKSA/IEFUOTFSTTkyMDBfQkdBIDogQVQ5MVJNOTIwMF9QUUZQKTsKIH0KIAogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEludGVycnVwdCBpbml0aWFsaXphdGlvbgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBkZWZhdWx0IGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMgKDAgPSBsb3dlc3QsIDcgPSBoaWdoZXN0KS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdDkxcm05MjAwX2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0gewotCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCi0JNywJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBDICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBEICovCi0JNSwJLyogVVNBUlQgMCAqLwotCTUsCS8qIFVTQVJUIDEgKi8KLQk1LAkvKiBVU0FSVCAyICovCi0JNSwJLyogVVNBUlQgMyAqLwotCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgKi8KLQkyLAkvKiBVU0IgRGV2aWNlIFBvcnQgKi8KLQk2LAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgKi8KLQk1LAkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDIgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDAgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDEgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDIgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDMgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDQgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDUgKi8KLQkyLAkvKiBVU0IgSG9zdCBwb3J0ICovCi0JMywJLyogRXRoZXJuZXQgTUFDICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTIpICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTMpICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTQpICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTUpICovCi0JMAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRNikgKi8KLX07Ci0KIEFUOTFfU09DX1NUQVJUKGF0OTFybTkyMDApCiAJLm1hcF9pbyA9IGF0OTFybTkyMDBfbWFwX2lvLAotCS5kZWZhdWx0X2lycV9wcmlvcml0eSA9IGF0OTFybTkyMDBfZGVmYXVsdF9pcnFfcHJpb3JpdHksCi0JLmV4dGVybl9pcnEgPSAoMSA8PCBBVDkxUk05MjAwX0lEX0lSUTApIHwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlExKQotCQkgICAgfCAoMSA8PCBBVDkxUk05MjAwX0lEX0lSUTIpIHwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlEzKQotCQkgICAgfCAoMSA8PCBBVDkxUk05MjAwX0lEX0lSUTQpIHwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlE1KQotCQkgICAgfCAoMSA8PCBBVDkxUk05MjAwX0lEX0lSUTYpLAotCS5pb3JlbWFwX3JlZ2lzdGVycyA9IGF0OTFybTkyMDBfaW9yZW1hcF9yZWdpc3RlcnMsCi0JLnJlZ2lzdGVyX2Nsb2NrcyA9IGF0OTFybTkyMDBfcmVnaXN0ZXJfY2xvY2tzLAogCS5pbml0ID0gYXQ5MXJtOTIwMF9pbml0aWFsaXplLAogQVQ5MV9TT0NfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZjFlYWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIxMiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfZGV2aWNlcy5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBUaGliYXV0IFZBUkVORSA8dmFyZW5ldEBwYXJpc2MtbGludXgub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9tYy5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9yYW1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIEhvc3QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCi1zdGF0aWMgdTY0IG9oY2lfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIHVzYmhfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9VSFBfQkFTRSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVUhQLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VIUCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfdXNiaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfb2hjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmb2hjaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYmhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVzYmhfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JoX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCS8qIEVuYWJsZSBvdmVyY3VycmVudCBub3RpZmljYXRpb24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydHM7IGkrKykgewotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5vdmVyY3VycmVudF9waW5baV0pKQotCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5vdmVyY3VycmVudF9waW5baV0sIDEpOwotCX0KLQotCXVzYmhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF91c2JoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgRGV2aWNlIChHYWRnZXQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9BVDkxX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB1ZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1ZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfVURQLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1VEUCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVURQLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VEUCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV91ZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKLQl9Ci0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cHVsbHVwX3BpbikpCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnB1bGx1cF9waW4sIDApOwotCi0JdWRjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfdWRjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VkYyhzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgRXRoZXJuZXQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUk1fQVQ5MV9FVEhFUikgfHwgZGVmaW5lZChDT05GSUdfQVJNX0FUOTFfRVRIRVJfTU9EVUxFKQotc3RhdGljIHU2NCBldGhfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBldGhfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldGhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfRU1BQywKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9FTUFDICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9FTUFDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX0VNQUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX2V0aF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfZXRoZXIiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmV0aF9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmV0aF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gZXRoX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXRoX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5waHlfaXJxX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5waHlfaXJxX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnBoeV9pcnFfcGluLCAxKTsKLQl9Ci0KLQkvKiBQaW5zIHVzZWQgZm9yIE1JSSBhbmQgUk1JSSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFTURJTyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTUsIDApOwkvKiBFTURDICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNCwgMCk7CS8qIEVSWEVSICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMywgMCk7CS8qIEVSWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAwKTsJLyogRVJYMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDApOwkvKiBFQ1JTX0VDUlNEViAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDApOwkvKiBFVFgxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAwKTsJLyogRVRYMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBOCwgMCk7CS8qIEVUWEVOICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE3LCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCi0KLQlpZiAoIWRhdGEtPmlzX3JtaWkpIHsKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxOSwgMCk7CS8qIEVSWENLICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTgsIDApOwkvKiBFQ09MICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTcsIDApOwkvKiBFUlhEViAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE2LCAwKTsJLyogRVJYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE1LCAwKTsJLyogRVJYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE0LCAwKTsJLyogRVRYRVIgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxMywgMCk7CS8qIEVUWDMgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMCk7CS8qIEVUWDIgKi8KLQl9Ci0KLQlldGhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF9ldGhfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENvbXBhY3QgRmxhc2ggLyBQQ01DSUEKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxX0NGKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxX0NGX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIGNmX2RhdGE7Ci0KLSNkZWZpbmUgQ0ZfQkFTRQkJQVQ5MV9DSElQU0VMRUNUXzQKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IENGX0JBU0UsCi0JCS8qIHRpZXMgdXAgQ1M0LCBDUzUgYW5kIENTNiAqLwotCQkuZW5kCT0gQ0ZfQkFTRSArICgweDMwMDAwMDAwIC0gMSksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEFORDE2QklULAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX2NmX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9jZiIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjZl9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY2ZfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjZl9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgaW50IGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JZGF0YS0+Y2hpcHNlbGVjdCA9IDQ7CQkvKiBjYW4gb25seSB1c2UgRUJJIENoaXBTZWxlY3QgNCAqLwotCi0JLyogQ0YgdGFrZXMgb3ZlciBDUzQsIENTNSwgQ1M2ICovCi0JY3NhID0gYXQ5MV9yYW1jX3JlYWQoMCwgQVQ5MV9FQklfQ1NBKTsKLQlhdDkxX3JhbWNfd3JpdGUoMCwgQVQ5MV9FQklfQ1NBLCBjc2EgfCBBVDkxX0VCSV9DUzRBX1NNQ19DT01QQUNURkxBU0gpOwotCi0JLyoKLQkgKiBTdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgdGltaW5nIGFkanVzdG1lbnRzLgotCSAqIFJFVklTSVQ6ICB0aGVzZSB0aW1pbmdzIGFyZSBpbiB0ZXJtcyBvZiBNQ0sgY3ljbGVzLCBzbwotCSAqIHdoZW4gTUNLIGNoYW5nZXMgKGNwdWZyZXEgZXRjKSBzbyBtdXN0IHRoZXNlIHZhbHVlcy4uLgotCSAqLwotCWF0OTFfcmFtY193cml0ZSgwLCBBVDkxX1NNQ19DU1IoNCksCi0JCQkJICBBVDkxX1NNQ19BQ1NTX1NURAotCQkJCXwgQVQ5MV9TTUNfREJXXzE2Ci0JCQkJfCBBVDkxX1NNQ19CQVQKLQkJCQl8IEFUOTFfU01DX1dTRU4KLQkJCQl8IEFUOTFfU01DX05XU18oMzIpCS8qIHdhaXQgc3RhdGVzICovCi0JCQkJfCBBVDkxX1NNQ19SV1NFVFVQXyg2KQkvKiBzZXR1cCB0aW1lICovCi0JCQkJfCBBVDkxX1NNQ19SV0hPTERfKDQpCS8qIGhvbGQgdGltZSAqLwotCSk7Ci0KLQkvKiBpbnB1dC9pcnEgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5pcnFfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmlycV9waW4sIDEpOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5pcnFfcGluLCAxKTsKLQl9Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKLQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5kZXRfcGluLCAxKTsKLQotCS8qIG91dHB1dHMsIGluaXRpYWxseSBvZmYgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52Y2NfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+dmNjX3BpbiwgMCk7Ci0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cnN0X3BpbiwgMCk7Ci0KLQkvKiBmb3JjZSBwb3dlcm9uIGRlZmF1bHRzIGZvciB0aGVzZSBwaW5zIC4uLiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CS8qIEEyNS9DRlJOVyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTAsIDApOwkvKiBOQ1M0L0NGQ1MgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogTkNTNS9DRkNFMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTIsIDApOwkvKiBOQ1M2L0NGQ0UyICovCi0KLQkvKiBuV0FJVCBpcyBfbm90XyBhIGRlZmF1bHQgc2V0dGluZyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNiwgMSk7CS8qIG5XQUlUICovCi0KLQljZl9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX2NmX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIE1NQyAvIFNECi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTU1DX0FUTUVMTUNJKQotc3RhdGljIHU2NCBtbWNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIG1tY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9NQ0ksCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9NQ0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfTUNJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9tbWNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbW1jX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBzbG90X2NvdW50ID0gMDsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUNJX01BWF9OUl9TTE9UUzsgaSsrKSB7Ci0KLQkJaWYgKCFkYXRhLT5zbG90W2ldLmJ1c193aWR0aCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGlucHV0L2lycSAqLwotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4pKSB7Ci0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbiwgMSk7Ci0JCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4sIDEpOwotCQl9Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbaV0ud3BfcGluKSkKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFtpXS53cF9waW4sIDEpOwotCi0JCXN3aXRjaCAoaSkgewotCQljYXNlIDA6CQkJCQkvKiBzbG90IEEgKi8KLQkJCS8qIENNRCAqLwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwgMSk7Ci0JCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAxKTsKLQkJCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIzLCAxKTsKLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjQsIDEpOwotCQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCNSwgMSk7Ci0JCQl9Ci0JCQlzbG90X2NvdW50Kys7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgkJCQkJLyogc2xvdCBCICovCi0JCQkvKiBDTUQgKi8KLQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOCwgMSk7Ci0JCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTksIDEpOwotCQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoID09IDQpIHsKLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAxKTsKLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTExLCAxKTsKLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAxKTsKLQkJCX0KLQkJCXNsb3RfY291bnQrKzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIkFUOTE6IFNEL01NQyBzbG90ICVkIG5vdCBhdmFpbGFibGVcbiIsIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNsb3RfY291bnQpIHsKLQkJCS8qIENMSyAqLwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNywgMCk7Ci0KLQkJCW1tY19kYXRhID0gKmRhdGE7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfbW1jX2RldmljZSk7Ci0JCX0KLQl9Ci0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBOQU5EIC8gU21hcnRNZWRpYQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7Ci0KLSNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IE5BTkRfQkFTRSwKLQkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX25hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9uYW5kIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbmFuZF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgaW50IGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyogZW5hYmxlIHRoZSBhZGRyZXNzIHJhbmdlIG9mIENTMyAqLwotCWNzYSA9IGF0OTFfcmFtY19yZWFkKDAsIEFUOTFfRUJJX0NTQSk7Ci0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfRUJJX0NTQSwgY3NhIHwgQVQ5MV9FQklfQ1MzQV9TTUNfU01BUlRNRURJQSk7Ci0KLQkvKiBzZXQgdGhlIGJ1cyBpbnRlcmZhY2UgY2hhcmFjdGVyaXN0aWNzICovCi0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfU01DX0NTUigzKSwgQVQ5MV9TTUNfQUNTU19TVEQgfCBBVDkxX1NNQ19EQldfOCB8IEFUOTFfU01DX1dTRU4KLQkJfCBBVDkxX1NNQ19OV1NfKDUpCi0JCXwgQVQ5MV9TTUNfVERGXygxKQotCQl8IEFUOTFfU01DX1JXU0VUVVBfKDApCS8qIHREUyBEYXRhIFNldCB1cCBUaW1lIDMwIC0gbnMgKi8KLQkJfCBBVDkxX1NNQ19SV0hPTERfKDEpCS8qIHRESCBEYXRhIEhvbGQgVGltZSAyMCAtIG5zICovCi0JKTsKLQotCS8qIGVuYWJsZSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5lbmFibGVfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7Ci0KLQkvKiByZWFkeS9idXN5IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnJkeV9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOwotCi0JLyogY2FyZCBkZXRlY3QgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZGV0X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEsIDApOwkJLyogU01PRSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMywgMCk7CQkvKiBTTVdFICovCi0KLQluYW5kX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfbmFuZF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRXSSAoaTJjKQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFByZWZlciB0aGUgR1BJTyBjb2RlIHNpbmNlIHRoZSBUV0kgY29udHJvbGxlciBpc24ndCByb2J1c3QKLSAqIChnZXRzIG92ZXJydW5zIGFuZCB1bmRlcnJ1bnMgdW5kZXIgbG9hZCkgYW5kIGNhbiBvbmx5IGlzc3VlCi0gKiByZXBlYXRlZCBTVEFSVHMgaW4gb25lIHNjZW5hcmlvICh0aGUgZHJpdmVyIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGVtKS4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKLQkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQTI1LAotCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnNjbF9waW4JCT0gQVQ5MV9QSU5fUEEyNiwKLQkuc2NsX2lzX29wZW5fZHJhaW4JPSAxLAotCS51ZGVsYXkJCQk9IDIsCQkvKiB+MTAwIGtIeiAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF90d2lfZGV2aWNlID0gewotCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAotCS5pZAkJCT0gMCwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmcGRhdGEsCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEEyNSwgMSk7CQkvKiBUV0QgKFNEQSkgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI1LCAxKTsKLQotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBMjYsIDEpOwkJLyogVFdDSyAoU0NMKSAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjYsIDEpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3R3aV9kZXZpY2UpOwotfQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0FUOTFfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHR3aV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9UV0ksCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVFdJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UV0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVFdJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF90d2lfZGV2aWNlID0gewotCS5uYW1lCQk9ICJpMmMtYXQ5MXJtOTIwMCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdHdpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JLyogcGlucyB1c2VkIGZvciBUV0kgaW50ZXJmYWNlICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNSwgMCk7CQkvKiBUV0QgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI1LCAxKTsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjYsIDApOwkJLyogVFdDSyAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjYsIDEpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3R3aV9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1BJCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1NQSSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9TUEkgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1NQSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9TUEksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3NwaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQTMsIEFUOTFfUElOX1BBNCwgQVQ5MV9QSU5fUEE1LCBBVDkxX1BJTl9QQTYgfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgY3NfcGluOwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAwKTsJLyogTUlTTyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMSwgMCk7CS8qIE1PU0kgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOwkvKiBTUENLICovCi0KLQkvKiBFbmFibGUgU1BJIGNoaXAtc2VsZWN0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9kZXZpY2VzOyBpKyspIHsKLQkJaWYgKGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhKQotCQkJY3NfcGluID0gKHVuc2lnbmVkIGxvbmcpIGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhOwotCQllbHNlCi0JCQljc19waW4gPSBzcGlfc3RhbmRhcmRfY3NbZGV2aWNlc1tpXS5jaGlwX3NlbGVjdF07Ci0KLQkJaWYgKGRldmljZXNbaV0uY2hpcF9zZWxlY3QgPT0gMCkJLyogZm9yIENTMCBlcnJhdGEgKi8KLQkJCWF0OTFfc2V0X0FfcGVyaXBoKGNzX3BpbiwgMCk7Ci0JCWVsc2UKLQkJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7Ci0KLQotCQkvKiBwYXNzIGNoaXAtc2VsZWN0IHBpbiB0byBkcml2ZXIgKi8KLQkJZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBjc19waW47Ci0JfQotCi0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3NwaV9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGltZXIvQ291bnRlciBibG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2IwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1RDQjAsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDMiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3RjYjBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHRjYjBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2IwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRjYjFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfVENCMSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9UQ0IxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDNCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEM1LAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDNSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfdGNiMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDEsCi0JLnJlc291cmNlCT0gdGNiMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYjFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfdGNiMF9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF90Y2IxX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKSB7IH0KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUlRDCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDBfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfUlRDLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1JUQyArIFNaXzI1NiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfcnRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9ydGMiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSBydGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3J0Y19kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFdhdGNoZG9nCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPR19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3dkdF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfd2R0IiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV93YXRjaGRvZyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF93ZHRfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNTQyAtLSBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQykgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDX01PRFVMRSkKLXN0YXRpYyB1NjQgc3NjMF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1NTQzAsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfU1NDMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfU1NDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9TU0MwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9zc2MwX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxcm05MjAwX3NzYyIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkuZG1hX21hc2sJCT0gJnNzYzBfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNzYzBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzc2MwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3NzYzBfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JEKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjUsIDEpOwotfQotCi1zdGF0aWMgdTY0IHNzYzFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9TU0MxLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1NTQzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1NTQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfU1NDMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfc3NjMV9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MxX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI2LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19USykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI3LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI5LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SSykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTEsIDEpOwotfQotCi1zdGF0aWMgdTY0IHNzYzJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9TU0MyLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1NTQzIgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1NTQzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfU1NDMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfc3NjMl9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDIsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MyX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMl9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE0LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTYsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE3LCAxKTsKLX0KLQotLyoKLSAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55Ci0gKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQotICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQotICogb24gdGhlIHNhbWUgc3lzdGVtIG1pZ2h0IGJlIHVzZWQgYnkgYSBjdXN0b20gZGF0YSBjYXB0dXJlIGRyaXZlci4KLSAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBOT1RFOiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gbWF0Y2hpbmcKLQkgKiAicGlucyIgdG8gd2hhdGV2ZXIgd2lsbCBiZSB1c2luZyBlYWNoIHBhcnRpY3VsYXIgY29udHJvbGxlci4KLQkgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBBVDkxUk05MjAwX0lEX1NTQzA6Ci0JCXBkZXYgPSAmYXQ5MXJtOTIwMF9zc2MwX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzBfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVDkxUk05MjAwX0lEX1NTQzE6Ci0JCXBkZXYgPSAmYXQ5MXJtOTIwMF9zc2MxX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzFfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVDkxUk05MjAwX0lEX1NTQzI6Ci0JCXBkZXYgPSAmYXQ5MXJtOTIwMF9zc2MyX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzJfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVBUlQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUwpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfREJHVSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9EQkdVICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMCwKLQkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCi19OwotCi1zdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfZGJndV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTMwLCAwKTsJCS8qIERSWEQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTMxLCAxKTsJCS8qIERUWEQgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9VUzAsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVVMwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVVMwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvZF9sb29rdXBfdGFibGUgdWFydDBfZ3Bpb3NfdGFibGUgPSB7Ci0JLmRldl9pZCA9ICJhdG1lbF91c2FydCIsCi0JLnRhYmxlID0gewotCQlHUElPX0xPT0tVUCgicGlvQSIsIDIxLCAicnRzIiwgR1BJT19BQ1RJVkVfTE9XKSwKLQkJeyB9LAotCX0sCi19OwotCi1zdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VhcnQwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDBfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDBfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTcsIDEpOwkJLyogVFhEMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTgsIDApOwkJLyogUlhEMCAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMCk7CS8qIENUUzAgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpIHsKLQkJLyoKLQkJICogQVQ5MVJNOTIwMCBFcnJhdGEgIzM5IC0gUlRTMCBpcyBub3QgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gUEEyMS4KLQkJICogV2UgbmVlZCB0byBkcml2ZSB0aGUgcGluIG1hbnVhbGx5LiBUaGUgc2VyaWFsIGRyaXZlciB3aWxsIGRyaXZlcgotCQkgKiB0aGlzIHRvIGhpZ2ggd2hlbiBpbml0aWFsaXppbmcuCi0JCSAqLwotCQlncGlvZF9hZGRfbG9va3VwX3RhYmxlKCZ1YXJ0MF9ncGlvc190YWJsZSk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1VTMSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9VUzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VTMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VhcnQxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAyLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDFfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjAsIDEpOwkJLyogVFhEMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjEsIDApOwkJLyogUlhEMSAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JJKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE4LCAwKTsJLyogUkkxICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RUUikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxOSwgMCk7CS8qIERUUjEgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfRENEKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIzLCAwKTsJLyogRENEMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjQsIDApOwkvKiBDVFMxICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RTUikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNSwgMCk7CS8qIERTUjEgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI2LCAwKTsJLyogUlRTMSAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1VTMiwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9VUzIgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VTMiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VhcnQyX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAzLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDJfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0Ml9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0Ml9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDJfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjIsIDApOwkJLyogUlhEMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjMsIDEpOwkJLyogVFhEMiAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEzMCwgMCk7CS8qIENUUzIgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTMxLCAwKTsJLyogUlRTMiAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1VTMywKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9VUzMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VTMywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0M19kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQzX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VhcnQzX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSA0LAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0M19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0M19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDNfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNSwgMSk7CQkvKiBUWEQzICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAwKTsJCS8qIFJYRDMgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CS8qIENUUzMgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjAsIDApOwkvKiBSVFMzICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXRkYXRhIGF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCi0KLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGF0bWVsX3VhcnRfZGF0YSAqcGRhdGE7Ci0KLQlzd2l0Y2ggKGlkKSB7Ci0JCWNhc2UgMDoJCS8qIERCR1UgKi8KLQkJCXBkZXYgPSAmYXQ5MXJtOTIwMF9kYmd1X2RldmljZTsKLQkJCWNvbmZpZ3VyZV9kYmd1X3BpbnMoKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFSTTkyMDBfSURfVVMwOgotCQkJcGRldiA9ICZhdDkxcm05MjAwX3VhcnQwX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDBfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFSTTkyMDBfSURfVVMxOgotCQkJcGRldiA9ICZhdDkxcm05MjAwX3VhcnQxX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFSTTkyMDBfSURfVVMyOgotCQkJcGRldiA9ICZhdDkxcm05MjAwX3VhcnQyX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDJfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFSTTkyMDBfSURfVVMzOgotCQkJcGRldiA9ICZhdDkxcm05MjAwX3VhcnQzX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDNfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuOwotCX0KLQlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXBkYXRhLT5udW0gPSBwb3J0bnI7CQkvKiB1cGRhdGUgdG8gbWFwcGVkIElEICovCi0KLQlpZiAocG9ydG5yIDwgQVRNRUxfTUFYX1VBUlQpCi0JCWF0OTFfdWFydHNbcG9ydG5yXSA9IHBkZXY7Ci19Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBVE1FTF9NQVhfVUFSVDsgaSsrKSB7Ci0JCWlmIChhdDkxX3VhcnRzW2ldKQotCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKGF0OTFfdWFydHNbaV0pOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykge30KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGVzZSBkZXZpY2VzIGFyZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKLSAqIHNldHVwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCi17Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0YygpOwotCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwotCWF0OTFfYWRkX2RldmljZV90YygpOwotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jCmluZGV4IDdmZDEzYWUuLjUxNzYxZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF90aW1lLmMKQEAgLTE4Myw3ICsxODMsNiBAQAogdm9pZCBfX2lvbWVtICphdDkxX3N0X2Jhc2U7CiBFWFBPUlRfU1lNQk9MX0dQTChhdDkxX3N0X2Jhc2UpOwogCi0jaWZkZWYgQ09ORklHX09GCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhdDkxcm05MjAwX3N0X3RpbWVyX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1zdCIgfSwKIAl7IC8qIHNlbnRpbmVsICovIH0KQEAgLTIxOSwyOCArMjE4LDYgQEAKIGVycjoKIAlyZXR1cm4gLUVJTlZBTDsKIH0KLSNlbHNlCi1zdGF0aWMgaW50IF9faW5pdCBvZl9hdDkxcm05MjAwX3N0X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLSNlbmRpZgotCi12b2lkIF9faW5pdCBhdDkxcm05MjAwX2lvcmVtYXBfc3QodTMyIGFkZHIpCi17Ci0jaWZkZWYgQ09ORklHX09GCi0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIGF0OTFybTkyMDBfc3RfdGltZXJfaWRzKTsKLQlpZiAobnApIHsKLQkJb2Zfbm9kZV9wdXQobnApOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JYXQ5MV9zdF9iYXNlID0gaW9yZW1hcChhZGRyLCAyNTYpOwotCWlmICghYXQ5MV9zdF9iYXNlKQotCQlwYW5pYygiSW1wb3NzaWJsZSB0byBpb3JlbWFwIFNUXG4iKTsKLX0KIAogLyoKICAqIFNUIChzeXN0ZW0gdGltZXIpIG1vZHVsZSBzdXBwb3J0cyBib3RoIGNsb2NrZXZlbnRzIGFuZCBjbG9ja3NvdXJjZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwLmMKaW5kZXggYWFiMWY5Ni4uNzgxMzdjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwLmMKQEAgLTEwLDMwNSArMTAsMTMgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay9hdDkxX3BtYy5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KICNpbmNsdWRlIDxtYWNoL2NwdS5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9kYmd1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAicG0uaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9QSU9BLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1BJT0IsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQ19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfUElPQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImFkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfQURDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhZGNfb3BfY2xrID0gewotCS5uYW1lCQk9ICJhZGNfb3BfY2xrIiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotCS5yYXRlX2h6CT0gNTAwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VUzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1VTMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfTUNJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKLQkubmFtZQkJPSAidWRjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VRFAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2lfY2xrID0gewotCS5uYW1lCQk9ICJ0d2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1RXSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2xrID0gewotCS5uYW1lCQk9ICJzcGkwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9TUEkwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1NQSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2NfY2xrID0gewotCS5uYW1lCQk9ICJzc2NfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1NTQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVEMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NsayA9IHsKLQkubmFtZQkJPSAidGMxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9UQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0gewotCS5uYW1lCQk9ICJ0YzJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1RDMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0gewotCS5uYW1lCQk9ICJvaGNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VSFAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtYWNiX2NsayA9IHsKLQkubmFtZQkJPSAicGNsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9FTUFDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgaXNpX2NsayA9IHsKLQkubmFtZQkJPSAiaXNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9JU0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDNfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1VTMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0NF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0NF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVVM0LAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQ1X2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQ1X2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VUzUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzNfY2xrID0gewotCS5uYW1lCQk9ICJ0YzNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1RDMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjNF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjNF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVEM0LAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGM1X2NsayA9IHsKLQkubmFtZQkJPSAidGM1X2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9UQzUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmcGlvQV9jbGssCi0JJnBpb0JfY2xrLAotCSZwaW9DX2NsaywKLQkmYWRjX2NsaywKLQkmYWRjX29wX2NsaywKLQkmdXNhcnQwX2NsaywKLQkmdXNhcnQxX2NsaywKLQkmdXNhcnQyX2NsaywKLQkmbW1jX2NsaywKLQkmdWRjX2NsaywKLQkmdHdpX2NsaywKLQkmc3BpMF9jbGssCi0JJnNwaTFfY2xrLAotCSZzc2NfY2xrLAotCSZ0YzBfY2xrLAotCSZ0YzFfY2xrLAotCSZ0YzJfY2xrLAotCSZvaGNpX2NsaywKLQkmbWFjYl9jbGssCi0JJmlzaV9jbGssCi0JJnVzYXJ0M19jbGssCi0JJnVzYXJ0NF9jbGssCi0JJnVzYXJ0NV9jbGssCi0JJnRjM19jbGssCi0JJnRjNF9jbGssCi0JJnRjNV9jbGssCi0JLy8gaXJxMCAuLiBpcnEyCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcGVyaXBoX2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JLyogT25lIGFkZGl0aW9uYWwgZmFrZSBjbG9jayBmb3IgbWFjYl9oY2xrICovCi0JQ0xLREVWX0NPTl9JRCgiaGNsayIsICZtYWNiX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjAiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImF0bWVsX3NwaS4xIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4xIiwgJnRjM19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiYXRtZWxfdGNiLjEiLCAmdGM0X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJhdG1lbF90Y2IuMSIsICZ0YzVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxcm05MjAwX3NzYy4wIiwgJnNzY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmJjMDAwLnNzYyIsICZzc2NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiaTJjLWF0OTFzYW05MjYwLjAiLCAmdHdpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOWcyMC4wIiwgJnR3aV9jbGspLAotCS8qIG1vcmUgdXNhcnQgbG9va3VwIHRhYmxlIGZvciBEVCBlbnRyaWVzICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmZmMjAwLnNlcmlhbCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZiMDAwMC5zZXJpYWwiLCAmdXNhcnQwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmI0MDAwLnNlcmlhbCIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmYjgwMDAuc2VyaWFsIiwgJnVzYXJ0Ml9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZkMDAwMC5zZXJpYWwiLCAmdXNhcnQzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmQ0MDAwLnNlcmlhbCIsICZ1c2FydDRfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZDgwMDAuc2VyaWFsIiwgJnVzYXJ0NV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZhYzAwMC5pMmMiLCAmdHdpX2NsayksCi0JLyogbW9yZSB0YyBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZmRjMDAwLnRpbWVyIiwgJnRjM19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiZmZmZGMwMDAudGltZXIiLCAmdGM0X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJmZmZkYzAwMC50aW1lciIsICZ0YzVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICI1MDAwMDAub2hjaSIsICZvaGNpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZmZmYTgwMDAubW1jIiwgJm1tY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImZmZmM4MDAwLnNwaSIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZmZmY2MwMDAuc3BpIiwgJnNwaTFfY2xrKSwKLQkvKiBmYWtlIGhjbGsgY2xvY2sgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxX29oY2kiLCAmb2hjaV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0EiLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0IiLCAmcGlvQl9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0MiLCAmcGlvQ19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjQwMC5ncGlvIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY2MDAuZ3BpbyIsICZwaW9CX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmODAwLmdwaW8iLCAmcGlvQ19jbGspLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHVzYXJ0X2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjAiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMSIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMiIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMyIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNCIsICZ1c2FydDNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNSIsICZ1c2FydDRfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNiIsICZ1c2FydDVfY2xrKSwKLX07Ci0KLS8qCi0gKiBUaGUgdHdvIHByb2dyYW1tYWJsZSBjbG9ja3MuCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjBfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCWNsa2Rldl9hZGRfdGFibGUodXNhcnRfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRSh1c2FydF9jbG9ja3NfbG9va3VwcykpOwotCi0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotfQotI2Vsc2UKLSNkZWZpbmUgYXQ5MXNhbTkyNjBfcmVnaXN0ZXJfY2xvY2tzIE5VTEwKLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEdQSU8KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXNhbTkyNjBfZ3Bpb1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkuaWQJCT0gQVQ5MVNBTTkyNjBfSURfUElPQSwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2MF9CQVNFX1BJT0EsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTkyNjBfSURfUElPQiwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2MF9CQVNFX1BJT0IsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTkyNjBfSURfUElPQywKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2MF9CQVNFX1BJT0MsCi0JfQotfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBBVDkxU0FNOTI2MCBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KQEAgLTM0MCwxMTkgKzQ4LDE0IEBACiAJCWF0OTFfaW5pdF9zcmFtKDAsIEFUOTFTQU05MjYwX1NSQU1fQkFTRSwgQVQ5MVNBTTkyNjBfU1JBTV9TSVpFKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYwX2lvcmVtYXBfcmVnaXN0ZXJzKHZvaWQpCi17Ci0JYXQ5MV9pb3JlbWFwX3JhbWMoMCwgQVQ5MVNBTTkyNjBfQkFTRV9TRFJBTUMsIDUxMik7Ci0JYXQ5MXNhbTkyNnhfaW9yZW1hcF9waXQoQVQ5MVNBTTkyNjBfQkFTRV9QSVQpOwotCWF0OTFzYW05X2lvcmVtYXBfc21jKDAsIEFUOTFTQU05MjYwX0JBU0VfU01DKTsKLQlhdDkxX2lvcmVtYXBfbWF0cml4KEFUOTFTQU05MjYwX0JBU0VfTUFUUklYKTsKLQlhdDkxX3BtX3NldF9zdGFuZGJ5KGF0OTFzYW05X3NkcmFtX3N0YW5kYnkpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjBfaW5pdGlhbGl6ZSh2b2lkKQogewogCWFybV9wbV9pZGxlID0gYXQ5MXNhbTlfaWRsZTsKIAogCWF0OTFfc3lzaXJxX21hc2tfcnR0KEFUOTFTQU05MjYwX0JBU0VfUlRUKTsKLQotCS8qIFJlZ2lzdGVyIEdQSU8gc3Vic3lzdGVtICovCi0JYXQ5MV9ncGlvX2luaXQoYXQ5MXNhbTkyNjBfZ3BpbywgMyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnN0Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2MF9CQVNFX1JTVEMsCi0JCS5lbmQgICAgPSBBVDkxU0FNOTI2MF9CQVNFX1JTVEMgKyBTWl8xNiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05MjYwX0JBU0VfU0RSQU1DLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjBfQkFTRV9TRFJBTUMgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJzdGNfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXNhbTkyNjAtcmVzZXQiLAotCS5yZXNvdXJjZSAgICAgICA9IHJzdGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUocnN0Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGR3Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2MF9CQVNFX1NIRFdDLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjBfQkFTRV9TSERXQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGR3Y19kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImF0OTEtcG93ZXJvZmYiLAotCS5yZXNvdXJjZSAgICAgICA9IHNoZHdjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNoZHdjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjBfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnN0Y19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2hkd2NfZGV2aWNlKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MXNhbTkyNjBfZGVmYXVsdF9pcnFfcHJpb3JpdHlbTlJfQUlDX0lSUVNdIF9faW5pdGRhdGEgPSB7Ci0JNywJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLQk3LAkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KLQkwLAkvKiBBbmFsb2ctdG8tRGlnaXRhbCBDb252ZXJ0ZXIgKi8KLQk1LAkvKiBVU0FSVCAwICovCi0JNSwJLyogVVNBUlQgMSAqLwotCTUsCS8qIFVTQVJUIDIgKi8KLQkwLAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCi0JMiwJLyogVVNCIERldmljZSBQb3J0ICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDAgKi8KLQk1LAkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMSAqLwotCTUsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyICovCi0JMCwKLQkwLAotCTAsCS8qIFRpbWVyIENvdW50ZXIgMCAqLwotCTAsCS8qIFRpbWVyIENvdW50ZXIgMSAqLwotCTAsCS8qIFRpbWVyIENvdW50ZXIgMiAqLwotCTIsCS8qIFVTQiBIb3N0IHBvcnQgKi8KLQkzLAkvKiBFdGhlcm5ldCAqLwotCTAsCS8qIEltYWdlIFNlbnNvciBJbnRlcmZhY2UgKi8KLQk1LAkvKiBVU0FSVCAzICovCi0JNSwJLyogVVNBUlQgNCAqLwotCTUsCS8qIFVTQVJUIDUgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDMgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDQgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDUgKi8KLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MF9pbml0X3RpbWUodm9pZCkKLXsKLQlhdDkxc2FtOTI2eF9waXRfaW5pdChOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTKTsKIH0KIAogQVQ5MV9TT0NfU1RBUlQoYXQ5MXNhbTkyNjApCiAJLm1hcF9pbyA9IGF0OTFzYW05MjYwX21hcF9pbywKLQkuZGVmYXVsdF9pcnFfcHJpb3JpdHkgPSBhdDkxc2FtOTI2MF9kZWZhdWx0X2lycV9wcmlvcml0eSwKLQkuZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05MjYwX0lEX0lSUTApIHwgKDEgPDwgQVQ5MVNBTTkyNjBfSURfSVJRMSkKLQkJICAgIHwgKDEgPDwgQVQ5MVNBTTkyNjBfSURfSVJRMiksCi0JLmlvcmVtYXBfcmVnaXN0ZXJzID0gYXQ5MXNhbTkyNjBfaW9yZW1hcF9yZWdpc3RlcnMsCi0JLnJlZ2lzdGVyX2Nsb2NrcyA9IGF0OTFzYW05MjYwX3JlZ2lzdGVyX2Nsb2NrcywKLQkucmVnaXN0ZXJfZGV2aWNlcyA9IGF0OTFzYW05MjYwX3JlZ2lzdGVyX2RldmljZXMsCiAJLmluaXQgPSBhdDkxc2FtOTI2MF9pbml0aWFsaXplLAotCS5pbml0X3RpbWUgPSBhdDkxc2FtOTI2MF9pbml0X3RpbWUsCiBBVDkxX1NPQ19FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjg4ZTBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzY0ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNiBBdG1lbAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXQ5MV9hZGMuaD4KLQotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjBfbWF0cml4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBIb3N0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX1VIUF9CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VIUCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVUhQLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91c2JoX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdXNiaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKLXsKLQlpbnQgaTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyogRW5hYmxlIG92ZXJjdXJyZW50IG5vdGlmaWNhdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSkpCi0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSwgMSk7Ci0JfQotCi0JdXNiaF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmhfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBEZXZpY2UgKEdhZGdldCkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0FUOTFfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIHVkY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVURQLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9VRFAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VRFAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VEUCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV91ZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKLQl9Ci0KLQkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBieSBVU0IgZGV2aWNlIHBlcmlwaGVyYWwgKi8KLQotCXVkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEV0aGVybmV0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDQikgfHwgZGVmaW5lZChDT05GSUdfTUFDQl9NT0RVTEUpCi1zdGF0aWMgdTY0IGV0aF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIGV0aF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV0aF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfRU1BQywKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfRU1BQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX0VNQUMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX0VNQUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF9ldGhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtYWNiIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cGh5X2lycV9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cGh5X2lycV9waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5waHlfaXJxX3BpbiwgMSk7Ci0JfQotCi0JLyogUGlucyB1c2VkIGZvciBNSUkgYW5kIFJNSUkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNywgMCk7CS8qIEVSWERWICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNCwgMCk7CS8qIEVSWDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE1LCAwKTsJLyogRVJYMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTgsIDApOwkvKiBFUlhFUiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFVFhFTiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTIsIDApOwkvKiBFVFgwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMywgMCk7CS8qIEVUWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAwKTsJLyogRU1ESU8gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAwKTsJLyogRU1EQyAqLwotCi0JaWYgKCFkYXRhLT5pc19ybWlpKSB7Ci0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjgsIDApOwkvKiBFQ1JTICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjksIDApOwkvKiBFQ09MICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDApOwkvKiBFUlgyICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjYsIDApOwkvKiBFUlgzICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjcsIDApOwkvKiBFUlhDSyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAwKTsJLyogRVRYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsJLyogRVRYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAwKTsJLyogRVRYRVIgKi8KLQl9Ci0KLQlldGhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfZXRoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBNTUMgLyBTRCBTbG90IGZvciBBdG1lbCBNQ0kgRHJpdmVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTU1DX0FUTUVMTUNJKQotc3RhdGljIHU2NCBtbWNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIG1tY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfTUNJLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9NQ0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9NQ0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX01DSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX21tY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX21jaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBtbWNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IHNsb3RfY291bnQgPSAwOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRNQ0lfTUFYX05SX1NMT1RTOyBpKyspIHsKLQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoKSB7Ci0JCQkvKiBpbnB1dC9pcnEgKi8KLQkJCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbikpIHsKLQkJCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbiwgMSk7Ci0JCQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+c2xvdFtpXS5kZXRlY3RfcGluLCAxKTsKLQkJCX0KLQkJCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbaV0ud3BfcGluKSkKLQkJCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbaV0ud3BfcGluLCAxKTsKLQotCQkJc3dpdGNoIChpKSB7Ci0JCQljYXNlIDA6Ci0JCQkJLyogQ01EICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE3LCAxKTsKLQkJCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAxKTsKLQkJCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgewotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDEpOwotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMSk7Ci0JCQkJfQotCQkJCXNsb3RfY291bnQrKzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQkvKiBDTUQgKi8KLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEsIDEpOwotCQkJCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTAsIDEpOwotCQkJCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNSwgMSk7Ci0JCQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNCwgMSk7Ci0JCQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMywgMSk7Ci0JCQkJfQotCQkJCXNsb3RfY291bnQrKzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCSJBVDkxOiBTRC9NTUMgc2xvdCAlZCBub3QgYXZhaWxhYmxlXG4iLCBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChzbG90X2NvdW50KSB7Ci0JCS8qIENMSyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTgsIDApOwotCi0JCW1tY19kYXRhID0gKmRhdGE7Ci0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfbW1jX2RldmljZSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIE5BTkQgLyBTbWFydE1lZGlhCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIG5hbmRfZGF0YTsKLQotI2RlZmluZSBOQU5EX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzMKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuYW5kX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gTkFORF9CQVNFLAotCQkuZW5kCT0gTkFORF9CQVNFICsgU1pfMjU2TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX0VDQywKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfRUNDICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfbmFuZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX25hbmQiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZuYW5kX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBuYW5kX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobmFuZF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JY3NhID0gYXQ5MV9tYXRyaXhfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOwotCWF0OTFfbWF0cml4X3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfQ1MzQV9TTUNfU01BUlRNRURJQSk7Ci0KLQkvKiBlbmFibGUgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZW5hYmxlX3BpbikpCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPmVuYWJsZV9waW4sIDEpOwotCi0JLyogcmVhZHkvYnVzeSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZHlfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5yZHlfcGluLCAxKTsKLQotCS8qIGNhcmQgZGV0ZWN0IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmRldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOwotCi0JbmFuZF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF9uYW5kX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVFdJIChpMmMpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogUHJlZmVyIHRoZSBHUElPIGNvZGUgc2luY2UgdGhlIFRXSSBjb250cm9sbGVyIGlzbid0IHJvYnVzdAotICogKGdldHMgb3ZlcnJ1bnMgYW5kIHVuZGVycnVucyB1bmRlciBsb2FkKSBhbmQgY2FuIG9ubHkgaXNzdWUKLSAqIHJlcGVhdGVkIFNUQVJUcyBpbiBvbmUgc2NlbmFyaW8gKHRoZSBkcml2ZXIgZG9lc24ndCB5ZXQgaGFuZGxlIHRoZW0pLgotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGEgPSB7Ci0JLnNkYV9waW4JCT0gQVQ5MV9QSU5fUEEyMywKLQkuc2RhX2lzX29wZW5fZHJhaW4JPSAxLAotCS5zY2xfcGluCQk9IEFUOTFfUElOX1BBMjQsCi0JLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKLQkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3R3aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCi0JLmlkCQkJPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZwZGF0YSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAxKTsJCS8qIFRXRCAoU0RBKSAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjMsIDEpOwotCi0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEEyNCwgMSk7CQkvKiBUV0NLIChTQ0wpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyNCwgMSk7Ci0KLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3R3aV9kZXZpY2UpOwotfQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0FUOTFfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHR3aV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVFdJLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9UV0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UV0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RXSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3R3aV9kZXZpY2UgPSB7Ci0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdHdpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JLyogSVAgdmVyc2lvbiBpcyBub3QgdGhlIHNhbWUgb24gOTI2MCBhbmQgZzIwICovCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcyMCgpKSB7Ci0JCWF0OTFzYW05MjYwX3R3aV9kZXZpY2UubmFtZSA9ICJpMmMtYXQ5MXNhbTlnMjAiOwotCX0gZWxzZSB7Ci0JCWF0OTFzYW05MjYwX3R3aV9kZXZpY2UubmFtZSA9ICJpMmMtYXQ5MXNhbTkyNjAiOwotCX0KLQotCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjMsIDApOwkJLyogVFdEICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMywgMSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsJCS8qIFRXQ0sgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI0LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfdHdpX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTUEkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgdTY0IHNwaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9TUEkwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9TUEkwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfU1BJMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfU1BJMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3NwaTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaTBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMF9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEEzLCBBVDkxX1BJTl9QQzExLCBBVDkxX1BJTl9QQzE2LCBBVDkxX1BJTl9QQzE3IH07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfU1BJMSwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfU1BJMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1NQSTEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1NQSTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF9zcGkxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfc3BpIiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzcGkxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTFfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BCMywgQVQ5MV9QSU5fUEM1LCBBVDkxX1BJTl9QQzQsIEFUOTFfUElOX1BDMyB9OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBjc19waW47Ci0Jc2hvcnQgZW5hYmxlX3NwaTAgPSAwOwotCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKLQotCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgewotCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCi0JCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7Ci0JCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQotCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQkJZWxzZQotCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQotCQlpZiAoIWdwaW9faXNfdmFsaWQoY3NfcGluKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChkZXZpY2VzW2ldLmJ1c19udW0gPT0gMCkKLQkJCWVuYWJsZV9zcGkwID0gMTsKLQkJZWxzZQotCQkJZW5hYmxlX3NwaTEgPSAxOwotCi0JCS8qIGVuYWJsZSBjaGlwLXNlbGVjdCBwaW4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoY3NfcGluLCAxKTsKLQotCQkvKiBwYXNzIGNoaXAtc2VsZWN0IHBpbiB0byBkcml2ZXIgKi8KLQkJZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBjc19waW47Ci0JfQotCi0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0KLQkvKiBDb25maWd1cmUgU1BJIGJ1cyhlcykgKi8KLQlpZiAoZW5hYmxlX3NwaTApIHsKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAwKTsJLyogU1BJMF9NSVNPICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMSwgMCk7CS8qIFNQSTBfTU9TSSAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOwkvKiBTUEkxX1NQQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3NwaTBfZGV2aWNlKTsKLQl9Ci0JaWYgKGVuYWJsZV9zcGkxKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMCwgMCk7CS8qIFNQSTFfTUlTTyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOwkvKiBTUEkxX01PU0kgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyLCAwKTsJLyogU1BJMV9TUENLICovCi0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF9zcGkxX2RldmljZSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGltZXIvQ291bnRlciBibG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2IwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9UQ0IwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9UQ0IwICsgU1pfMjU2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3RjYjBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHRjYjBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2IwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRjYjFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1RDQjEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1RDQjEgKyBTWl8yNTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEM0LAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDNSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEM1LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdGNiMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDEsCi0JLnJlc291cmNlCT0gdGNiMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYjFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3RjYjBfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3RjYjFfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBSVFQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnR0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9SVFQsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1JUVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfcnR0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9ydHQiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHJ0dF9yZXNvdXJjZXMsCi19OwotCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19SVENfRFJWX0FUOTFTQU05KQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0JYXQ5MXNhbTkyNjBfcnR0X2RldmljZS5uYW1lID0gInJ0Yy1hdDkxc2FtOSI7Ci0JLyoKLQkgKiBUaGUgc2Vjb25kIHJlc291cmNlIGlzIG5lZWRlZDoKLQkgKiBHUEJSIHdpbGwgc2VydmUgYXMgdGhlIHN0b3JhZ2UgZm9yIFJUQyB0aW1lIG9mZnNldAotCSAqLwotCWF0OTFzYW05MjYwX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDM7Ci0JcnR0X3Jlc291cmNlc1sxXS5zdGFydCA9IEFUOTFTQU05MjYwX0JBU0VfR1BCUiArCi0JCQkJIDQgKiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9HUEJSOwotCXJ0dF9yZXNvdXJjZXNbMV0uZW5kID0gcnR0X3Jlc291cmNlc1sxXS5zdGFydCArIDM7Ci0JcnR0X3Jlc291cmNlc1syXS5zdGFydCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci0JcnR0X3Jlc291cmNlc1syXS5lbmQgPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCS8qIE9ubHkgb25lIHJlc291cmNlIGlzIG5lZWRlZDogUlRUIG5vdCB1c2VkIGFzIFJUQyAqLwotCWF0OTFzYW05MjYwX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHQodm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0X3J0YygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfcnR0X2RldmljZSk7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBXYXRjaGRvZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9XRFQsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1dEVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfd2R0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV93ZHQiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3dkdF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1NDIC0tIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDKSB8fCBkZWZpbmVkKENPTkZJR19BVE1FTF9TU0NfTU9EVUxFKQotc3RhdGljIHU2NCBzc2NfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9TU0MsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1NTQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1NTQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfU1NDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfc3NjX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxcm05MjAwX3NzYyIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkuZG1hX21hc2sJCT0gJnNzY19kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3NzY19waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTcsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE2LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxOCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTksIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMSwgMSk7Ci19Ci0KLS8qCi0gKiBTU0MgY29udHJvbGxlcnMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggbGlicmFyeSBjb2RlLCBpbnN0ZWFkIG9mIGFueQotICoga2luZCBvZiBhbGwtc2luZ2luZy9hbGwtZGFuY2luZyBkcml2ZXIuICBGb3IgZXhhbXBsZSBvbmUgY291bGQgYmUKLSAqIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIEkyUyBhdWRpbyBjb2RlYydzIGRyaXZlciwgd2hpbGUgYW5vdGhlciBvbmUKLSAqIG9uIHRoZSBzYW1lIHN5c3RlbSBtaWdodCBiZSB1c2VkIGJ5IGEgY3VzdG9tIGRhdGEgY2FwdHVyZSBkcml2ZXIuCi0gKi8KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCS8qCi0JICogTk9URTogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIG1hdGNoaW5nCi0JICogInBpbnMiIHRvIHdoYXRldmVyIHdpbGwgYmUgdXNpbmcgZWFjaCBwYXJ0aWN1bGFyIGNvbnRyb2xsZXIuCi0JICovCi0Jc3dpdGNoIChpZCkgewotCWNhc2UgQVQ5MVNBTTkyNjBfSURfU1NDOgotCQlwZGV2ID0gJmF0OTFzYW05MjYwX3NzY19kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2NfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVBUlQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYmd1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9EQkdVLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9EQkdVICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMCwKLQkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCi19OwotCi1zdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX2RiZ3VfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZkYmd1X2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZGJndV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gZGJndV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiZ3VfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfZGJndV9waW5zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNCwgMCk7CQkvKiBEUlhEICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMSk7CQkvKiBEVFhEICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVVMwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MF9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF91YXJ0MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQwX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDEpOwkJLyogVFhEMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNSwgMCk7CQkvKiBSWEQwICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI2LCAwKTsJLyogUlRTMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjcsIDApOwkvKiBDVFMwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RUUikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNCwgMCk7CS8qIERUUjAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfRFNSKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIyLCAwKTsJLyogRFNSMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9EQ0QpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjMsIDApOwkvKiBEQ0QwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JJKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI1LCAwKTsJLyogUkkwICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMSwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF91YXJ0MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMiwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQxX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjYsIDEpOwkJLyogVFhEMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMCk7CQkvKiBSWEQxICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI4LCAwKTsJLyogUlRTMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjksIDApOwkvKiBDVFMxICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMiwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF91YXJ0Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMywKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjgsIDEpOwkJLyogVFhEMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOSwgMCk7CQkvKiBSWEQyICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTQsIDApOwkvKiBSVFMyICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE1LCAwKTsJLyogQ1RTMiAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzMsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTMywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDNfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0M19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdWFydDNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDQsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0M19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQzX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0M19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0M19waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMSk7CQkvKiBUWEQzICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMSwgMCk7CQkvKiBSWEQzICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzgsIDApOwkvKiBSVFMzICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMCwgMCk7CS8qIENUUzMgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0NF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVVM0LAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzQgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzQsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTNCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQ0X2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDRfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3VhcnQ0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSA1LAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDRfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0NF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0NF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDRfcGlucyh2b2lkKQotewotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMzEsIDEpOwkJLyogVFhENCAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMzAsIDApOwkJLyogUlhENCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQ1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzUsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTNSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTNSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVM1LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDVfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0NV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdWFydDVfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDYsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0NV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQ1X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0NV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQ1X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0NV9waW5zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMSk7CQkvKiBUWEQ1ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMywgMCk7CQkvKiBSWEQ1ICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXRkYXRhIGF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCi0KLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGF0bWVsX3VhcnRfZGF0YSAqcGRhdGE7Ci0KLQlzd2l0Y2ggKGlkKSB7Ci0JCWNhc2UgMDoJCS8qIERCR1UgKi8KLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjBfZGJndV9kZXZpY2U7Ci0JCQljb25maWd1cmVfZGJndV9waW5zKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MF9JRF9VUzA6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYwX3VhcnQwX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDBfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYwX0lEX1VTMToKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjBfdWFydDFfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0MV9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjBfSURfVVMyOgotCQkJcGRldiA9ICZhdDkxc2FtOTI2MF91YXJ0Ml9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQyX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MF9JRF9VUzM6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYwX3VhcnQzX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDNfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYwX0lEX1VTNDoKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjBfdWFydDRfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0NF9waW5zKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MF9JRF9VUzU6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYwX3VhcnQ1X2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDVfcGlucygpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JfQotCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JcGRhdGEtPm51bSA9IHBvcnRucjsJCS8qIHVwZGF0ZSB0byBtYXBwZWQgSUQgKi8KLQotCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKLQkJYXQ5MV91YXJ0c1twb3J0bnJdID0gcGRldjsKLX0KLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKLQkJaWYgKGF0OTFfdWFydHNbaV0pCi0JCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ0YvSURFCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUEFUQV9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19QQVRBX0FUOTFfTU9EVUxFKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfQVQ5MV9DRikgfHwgZGVmaW5lZChDT05GSUdfQVQ5MV9DRl9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIGNmMF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNmMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF80LAotCQkuZW5kCT0gQVQ5MV9DSElQU0VMRUNUXzQgKyBTWl8yNTZNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2YwX2RldmljZSA9IHsKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZjZjBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGNmMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNmMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgY2YxX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2YxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzUsCi0JCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfNSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjZjFfZGV2aWNlID0gewotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJmNmMV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY2YxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2YxX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXVuc2lnbmVkIGxvbmcgY3NhOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQljc2EgPSBhdDkxX21hdHJpeF9yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7Ci0KLQlzd2l0Y2ggKGRhdGEtPmNoaXBzZWxlY3QpIHsKLQljYXNlIDQ6Ci0JCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BDOCwgMCk7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOCwgMCk7Ci0JCWNzYSB8PSBBVDkxX01BVFJJWF9DUzRBX1NNQ19DRjE7Ci0JCWNmMF9kYXRhID0gKmRhdGE7Ci0JCXBkZXYgPSAmY2YwX2RldmljZTsKLQkJYnJlYWs7Ci0JY2FzZSA1OgotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQzksIDApOwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzksIDApOwotCQljc2EgfD0gQVQ5MV9NQVRSSVhfQ1M1QV9TTUNfQ0YyOwotCQljZjFfZGF0YSA9ICpkYXRhOwotCQlwZGV2ID0gJmNmMV9kZXZpY2U7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiQVQ5MSBDRjogYmFkIGNoaXAtc2VsZWN0IHJlcXVlc3RlZCAoJXUpXG4iLAotCQkgICAgICAgZGF0YS0+Y2hpcHNlbGVjdCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlhdDkxX21hdHJpeF93cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSk7Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yc3RfcGluKSkgewotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShkYXRhLT5yc3RfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cnN0X3BpbiwgMSk7Ci0JfQotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+aXJxX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5pcnFfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+aXJxX3BpbiwgMSk7Ci0JfQotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZGV0X3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+ZGV0X3BpbiwgMSk7Ci0JfQotCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEM2LCAwKTsgICAgIC8qIENGQ0UxICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEM3LCAwKTsgICAgIC8qIENGQ0UyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMCwgMCk7ICAgIC8qIENGUk5XICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNSwgMSk7ICAgIC8qIE5XQUlUICovCi0KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUEFUQV9BVDkxKSAmJiAoZGF0YS0+ZmxhZ3MgJiBBVDkxX0NGX1RSVUVfSURFKSkKLQkJcGRldi0+bmFtZSA9ICJwYXRhX2F0OTEiOwotCWVsc2UKLQkJcGRldi0+bmFtZSA9ICJhdDkxX2NmIjsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICogZGF0YSkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEFEQ3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19BVDkxX0FEQykKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSBhZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX0FEQywKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfQURDICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfQURDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9BREMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX2FkY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFzYW05MjYwLWFkYyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhZGNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGFkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFkY19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX2FkY190cmlnZ2VyIGF0OTFfYWRjX3RyaWdnZXJzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZSA9ICJ0aW1lci1jb3VudGVyLTAiLAotCQkudmFsdWUgPSAweDEsCi0JfSwKLQlbMV0gPSB7Ci0JCS5uYW1lID0gInRpbWVyLWNvdW50ZXItMSIsCi0JCS52YWx1ZSA9IDB4MywKLQl9LAotCVsyXSA9IHsKLQkJLm5hbWUgPSAidGltZXItY291bnRlci0yIiwKLQkJLnZhbHVlID0gMHg1LAotCX0sCi0JWzNdID0gewotCQkubmFtZSA9ICJleHRlcm5hbCIsCi0JCS52YWx1ZSA9IDB4ZCwKLQkJLmlzX2V4dGVybmFsID0gdHJ1ZSwKLQl9LAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FkYyhzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmICh0ZXN0X2JpdCgwLCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMCwgMCk7Ci0JaWYgKHRlc3RfYml0KDEsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsKLQlpZiAodGVzdF9iaXQoMiwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIsIDApOwotCWlmICh0ZXN0X2JpdCgzLCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMywgMCk7Ci0KLQlpZiAoZGF0YS0+dXNlX2V4dGVybmFsX3RyaWdnZXJzKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAwKTsKLQotCWRhdGEtPnN0YXJ0dXBfdGltZSA9IDEwOwotCWRhdGEtPnRyaWdnZXJfbnVtYmVyID0gNDsKLQlkYXRhLT50cmlnZ2VyX2xpc3QgPSBhdDkxX2FkY190cmlnZ2VyczsKLQotCWFkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX2FkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZGMoc3RydWN0IGF0OTFfYWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBUaGVzZSBkZXZpY2VzIGFyZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKLSAqIHNldHVwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCi17Ci0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCXJldHVybiAwOwotCi0JYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwotCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwotCWF0OTFfYWRkX2RldmljZV90YygpOwotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwppbmRleCBhOGJkMzU5Li5kMjk5NTNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwpAQCAtMTAsMjgyICsxMCwxMiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrL2F0OTFfcG1jLmg+Ci0KLSNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAicG0uaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENsb2NrcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBwZXJpcGhlcmFsIGNsb2Nrcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGlvQV9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0FfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1BJT0EsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9CX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfUElPQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0NfY2xrID0gewotCS5uYW1lCQk9ICJwaW9DX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9QSU9DLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQwX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9VUzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDFfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1VTMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0Ml9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0Ml9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfVVMyLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbW1jX2NsayA9IHsKLQkubmFtZQkJPSAibWNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9NQ0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1ZGNfY2xrID0gewotCS5uYW1lCQk9ICJ1ZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1VEUCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aV9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfVFdJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1NQSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkxX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfU1BJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0gewotCS5uYW1lCQk9ICJzc2MwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9TU0MwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1NTQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MyX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfU1NDMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfVEMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NsayA9IHsKLQkubmFtZQkJPSAidGMxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9UQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0gewotCS5uYW1lCQk9ICJ0YzJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1RDMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0gewotCS5uYW1lCQk9ICJvaGNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9VSFAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkubmFtZQkJPSAibGNkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfTENEQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLQotLyogSENsb2NrcyAqLwotc3RhdGljIHN0cnVjdCBjbGsgaGNrMCA9IHsKLQkubmFtZQkJPSAiaGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfSENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9TWVNURU0sCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgaGNrMSA9IHsKLQkubmFtZQkJPSAiaGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfSENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9TWVNURU0sCi0JLmlkCQk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FfY2xrLAotCSZwaW9CX2NsaywKLQkmcGlvQ19jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJm1tY19jbGssCi0JJnVkY19jbGssCi0JJnR3aV9jbGssCi0JJnNwaTBfY2xrLAotCSZzcGkxX2NsaywKLQkmc3NjMF9jbGssCi0JJnNzYzFfY2xrLAotCSZzc2MyX2NsaywKLQkmdGMwX2NsaywKLQkmdGMxX2NsaywKLQkmdGMyX2NsaywKLQkmb2hjaV9jbGssCi0JJmxjZGNfY2xrLAotCS8vIGlycTAgLi4gaXJxMgotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHBlcmlwaF9jbG9ja3NfbG9va3Vwc1tdID0gewotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0OTFzYW05MjYxLWxjZGZiLjAiLCAmaGNrMSksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MXNhbTlnMTAtbGNkZmIuMCIsICZoY2sxKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJhdG1lbF9zcGkuMCIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjEiLCAmc3BpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQxX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDJfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjAiLCAmc3NjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjEiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjIiLCAmc3NjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmJjMDAwLnNzYyIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmYzAwMDAuc3NjIiwgJnNzYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmZjNDAwMC5zc2MiLCAmc3NjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0OTFfb2hjaSIsICZoY2swKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiaTJjLWF0OTFzYW05MjYxLjAiLCAmdHdpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOWcxMC4wIiwgJnR3aV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0EiLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0IiLCAmcGlvQl9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0MiLCAmcGlvQ19jbGspLAotCS8qIG1vcmUgbG9va3VwIHRhYmxlIGZvciBEVCBlbnRyaWVzICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmZmMjAwLnNlcmlhbCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZiMDAwMC5zZXJpYWwiLCAmdXNhcnQwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmZiNDAwLnNlcmlhbCIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmOTQwMDAuc2VyaWFsIiwgJnVzYXJ0Ml9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQxX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDJfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjUwMDAwMC5vaGNpIiwgJmhjazApLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjYwMDAwMC5mYiIsICZoY2sxKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmZmZjODAwMC5zcGkiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImZmZmNjMDAwLnNwaSIsICZzcGkxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZmZmYTgwMDAubW1jIiwgJm1tY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZhYzAwMC5pMmMiLCAmdHdpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9DX2NsayksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgdXNhcnRfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4xIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4yIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4zIiwgJnVzYXJ0Ml9jbGspLAotfTsKLQotLyoKLSAqIFRoZSBmb3VyIHByb2dyYW1tYWJsZSBjbG9ja3MuCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDEsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMiA9IHsKLQkubmFtZQkJPSAicGNrMiIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDIsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMyA9IHsKLQkubmFtZQkJPSAicGNrMyIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDMsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjFfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCWNsa2Rldl9hZGRfdGFibGUodXNhcnRfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRSh1c2FydF9jbG9ja3NfbG9va3VwcykpOwotCi0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotCWNsa19yZWdpc3RlcigmcGNrMik7Ci0JY2xrX3JlZ2lzdGVyKCZwY2szKTsKLQotCWNsa19yZWdpc3RlcigmaGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZoY2sxKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGF0OTFzYW05MjYxX3JlZ2lzdGVyX2Nsb2NrcyBOVUxMCi0jZW5kaWYKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgR1BJTwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fYmFuayBhdDkxc2FtOTI2MV9ncGlvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2MV9JRF9QSU9BLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYxX0JBU0VfUElPQSwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2MV9JRF9QSU9CLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYxX0JBU0VfUElPQiwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2MV9JRF9QSU9DLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYxX0JBU0VfUElPQywKLQl9Ci19OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIEFUOTFTQU05MjYxIHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgpAQCAtMjk5LDExOSArMjksMTQgQEAKIAkJYXQ5MV9pbml0X3NyYW0oMCwgQVQ5MVNBTTkyNjFfU1JBTV9CQVNFLCBBVDkxU0FNOTI2MV9TUkFNX1NJWkUpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjFfaW9yZW1hcF9yZWdpc3RlcnModm9pZCkKLXsKLQlhdDkxX2lvcmVtYXBfcmFtYygwLCBBVDkxU0FNOTI2MV9CQVNFX1NEUkFNQywgNTEyKTsKLQlhdDkxc2FtOTI2eF9pb3JlbWFwX3BpdChBVDkxU0FNOTI2MV9CQVNFX1BJVCk7Ci0JYXQ5MXNhbTlfaW9yZW1hcF9zbWMoMCwgQVQ5MVNBTTkyNjFfQkFTRV9TTUMpOwotCWF0OTFfaW9yZW1hcF9tYXRyaXgoQVQ5MVNBTTkyNjFfQkFTRV9NQVRSSVgpOwotCWF0OTFfcG1fc2V0X3N0YW5kYnkoYXQ5MXNhbTlfc2RyYW1fc3RhbmRieSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MV9pbml0aWFsaXplKHZvaWQpCiB7CiAJYXJtX3BtX2lkbGUgPSBhdDkxc2FtOV9pZGxlOwogCiAJYXQ5MV9zeXNpcnFfbWFza19ydHQoQVQ5MVNBTTkyNjFfQkFTRV9SVFQpOwotCi0JLyogUmVnaXN0ZXIgR1BJTyBzdWJzeXN0ZW0gKi8KLQlhdDkxX2dwaW9faW5pdChhdDkxc2FtOTI2MV9ncGlvLCAzKTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSByc3RjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05MjYxX0JBU0VfUlNUQywKLQkJLmVuZCAgICA9IEFUOTFTQU05MjYxX0JBU0VfUlNUQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTkyNjFfQkFTRV9TRFJBTUMsCi0JCS5lbmQgICAgPSBBVDkxU0FNOTI2MV9CQVNFX1NEUkFNQyArIFNaXzUxMiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnN0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImF0OTEtc2FtOTI2MC1yZXNldCIsCi0JLnJlc291cmNlICAgICAgID0gcnN0Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShyc3RjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoZHdjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05MjYxX0JBU0VfU0hEV0MsCi0JCS5lbmQgICAgPSBBVDkxU0FNOTI2MV9CQVNFX1NIRFdDICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoZHdjX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiYXQ5MS1wb3dlcm9mZiIsCi0JLnJlc291cmNlICAgICAgID0gc2hkd2NfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc2hkd2NfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MV9yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyc3RjX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzaGR3Y19kZXZpY2UpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEludGVycnVwdCBpbml0aWFsaXphdGlvbgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBkZWZhdWx0IGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMgKDAgPSBsb3dlc3QsIDcgPSBoaWdoZXN0KS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdDkxc2FtOTI2MV9kZWZhdWx0X2lycV9wcmlvcml0eVtOUl9BSUNfSVJRU10gX19pbml0ZGF0YSA9IHsKLQk3LAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotCTcsCS8qIFN5c3RlbSBQZXJpcGhlcmFscyAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLwotCTAsCi0JNSwJLyogVVNBUlQgMCAqLwotCTUsCS8qIFVTQVJUIDEgKi8KLQk1LAkvKiBVU0FSVCAyICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAqLwotCTIsCS8qIFVTQiBEZXZpY2UgUG9ydCAqLwotCTYsCS8qIFR3by1XaXJlIEludGVyZmFjZSAqLwotCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDIgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDAgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDEgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDIgKi8KLQkyLAkvKiBVU0IgSG9zdCBwb3J0ICovCi0JMywJLyogTENEIENvbnRyb2xsZXIgKi8KLQkwLAotCTAsCi0JMCwKLQkwLAotCTAsCi0JMCwKLQkwLAotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYxX2luaXRfdGltZSh2b2lkKQotewotCWF0OTFzYW05MjZ4X3BpdF9pbml0KE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMpOwogfQogCiBBVDkxX1NPQ19TVEFSVChhdDkxc2FtOTI2MSkKIAkubWFwX2lvID0gYXQ5MXNhbTkyNjFfbWFwX2lvLAotCS5kZWZhdWx0X2lycV9wcmlvcml0eSA9IGF0OTFzYW05MjYxX2RlZmF1bHRfaXJxX3ByaW9yaXR5LAotCS5leHRlcm5faXJxID0gKDEgPDwgQVQ5MVNBTTkyNjFfSURfSVJRMCkgfCAoMSA8PCBBVDkxU0FNOTI2MV9JRF9JUlExKQotCQkgICAgfCAoMSA8PCBBVDkxU0FNOTI2MV9JRF9JUlEyKSwKLQkuaW9yZW1hcF9yZWdpc3RlcnMgPSBhdDkxc2FtOTI2MV9pb3JlbWFwX3JlZ2lzdGVycywKLQkucmVnaXN0ZXJfY2xvY2tzID0gYXQ5MXNhbTkyNjFfcmVnaXN0ZXJfY2xvY2tzLAotCS5yZWdpc3Rlcl9kZXZpY2VzID0gYXQ5MXNhbTkyNjFfcmVnaXN0ZXJfZGV2aWNlcywKIAkuaW5pdCA9IGF0OTFzYW05MjYxX2luaXRpYWxpemUsCi0JLmluaXRfdGltZSA9IGF0OTFzYW05MjYxX2luaXRfdGltZSwKIEFUOTFfU09DX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YmFhY2IuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDEwOTggKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IERhdmlkIEJyb3duZWxsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgotCi0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYxLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MV9tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFfbWF0cml4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIEhvc3QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCi1zdGF0aWMgdTY0IG9oY2lfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIHVzYmhfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfVUhQX0JBU0UsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9VSFBfQkFTRSArIFNaXzFNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVUhQLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9VSFAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV91c2JoX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdXNiaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKLXsKLQlpbnQgaTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyogRW5hYmxlIG92ZXJjdXJyZW50IG5vdGlmaWNhdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSkpCi0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSwgMSk7Ci0JfQotCi0JdXNiaF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV91c2JoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgRGV2aWNlIChHYWRnZXQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9BVDkxX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB1ZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1ZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1VEUCwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX0JBU0VfVURQICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVURQLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9VRFAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV91ZGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3VkYyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1ZGNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VkYyhzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnZidXNfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnZidXNfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+dmJ1c19waW4sIDEpOwotCX0KLQotCS8qIFB1bGx1cCBwaW4gaXMgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IFVTQiBkZXZpY2UgcGVyaXBoZXJhbCAqLwotCi0JdWRjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYxX3VkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBNTUMgLyBTRAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX01NQ19BVE1FTE1DSSkKLXN0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBtbWNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX01DSSwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfTUNJLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9NQ0ksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV9tbWNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbW1jX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGRhdGEtPnNsb3RbMF0uYnVzX3dpZHRoKSB7Ci0JCS8qIGlucHV0L2lycSAqLwotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90WzBdLmRldGVjdF9waW4pKSB7Ci0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbMF0uZGV0ZWN0X3BpbiwgMSk7Ci0JCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5zbG90WzBdLmRldGVjdF9waW4sIDEpOwotCQl9Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbMF0ud3BfcGluKSkKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFswXS53cF9waW4sIDEpOwotCi0JCS8qIENMSyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOwotCi0JCS8qIENNRCAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEsIDEpOwotCi0JCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAxKTsKLQkJaWYgKGRhdGEtPnNsb3RbMF0uYnVzX3dpZHRoID09IDQpIHsKLQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNCwgMSk7Ci0JCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTUsIDEpOwotCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAxKTsKLQkJfQotCi0JCW1tY19kYXRhID0gKmRhdGE7Ci0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfbW1jX2RldmljZSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIE5BTkQgLyBTbWFydE1lZGlhCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIG5hbmRfZGF0YTsKLQotI2RlZmluZSBOQU5EX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzMKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuYW5kX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTkFORF9CQVNFLAotCQkuZW5kCT0gTkFORF9CQVNFICsgU1pfMjU2TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0bWVsX25hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9uYW5kIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbmFuZF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBjc2E7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWNzYSA9IGF0OTFfbWF0cml4X3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKLQlhdDkxX21hdHJpeF93cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSB8IEFUOTFfTUFUUklYX0NTM0FfU01DX1NNQVJUTUVESUEpOwotCi0JLyogZW5hYmxlIHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmVuYWJsZV9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5lbmFibGVfcGluLCAxKTsKLQotCS8qIHJlYWR5L2J1c3kgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmR5X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cmR5X3BpbiwgMSk7Ci0KLQkvKiBjYXJkIGRldGVjdCBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5kZXRfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMCwgMCk7CQkvKiBOQU5ET0UgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEsIDApOwkJLyogTkFORFdFICovCi0KLQluYW5kX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0bWVsX25hbmRfZGV2aWNlKTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRXSSAoaTJjKQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFByZWZlciB0aGUgR1BJTyBjb2RlIHNpbmNlIHRoZSBUV0kgY29udHJvbGxlciBpc24ndCByb2J1c3QKLSAqIChnZXRzIG92ZXJydW5zIGFuZCB1bmRlcnJ1bnMgdW5kZXIgbG9hZCkgYW5kIGNhbiBvbmx5IGlzc3VlCi0gKiByZXBlYXRlZCBTVEFSVHMgaW4gb25lIHNjZW5hcmlvICh0aGUgZHJpdmVyIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGVtKS4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKLQkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQTcsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKLQkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQTgsCi0JLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKLQkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3R3aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCi0JLmlkCQkJPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZwZGF0YSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTcsIDEpOwkJLyogVFdEIChTREEpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEE3LCAxKTsKLQotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBOCwgMSk7CQkvKiBUV0NLIChTQ0wpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEE4LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfdHdpX2RldmljZSk7Ci19Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0kyQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MV9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHdpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9UV0ksCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1RXSSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1RXSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVFdJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfdHdpX2RldmljZSA9IHsKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0d2lfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0d2lfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQkvKiBJUCB2ZXJzaW9uIGlzIG5vdCB0aGUgc2FtZSBvbiA5MjYxIGFuZCBnMTAgKi8KLQlpZiAoY3B1X2lzX2F0OTFzYW05ZzEwKCkpIHsKLQkJYXQ5MXNhbTkyNjFfdHdpX2RldmljZS5uYW1lID0gImkyYy1hdDkxc2FtOWcxMCI7Ci0JCS8qIEkyQyBQSU8gbXVzdCBub3QgYmUgY29uZmlndXJlZCBhcyBvcGVuLWRyYWluIG9uIHRoaXMgY2hpcCAqLwotCX0gZWxzZSB7Ci0JCWF0OTFzYW05MjYxX3R3aV9kZXZpY2UubmFtZSA9ICJpMmMtYXQ5MXNhbTkyNjEiOwotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTcsIDEpOwotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTgsIDEpOwotCX0KLQotCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNywgMCk7CQkvKiBUV0QgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTgsIDApOwkJLyogVFdDSyAqLwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV90d2lfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNQSQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLXN0YXRpYyB1NjQgc3BpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1NQSTAsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1NQSTAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TUEkwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TUEkwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfc3BpMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaTBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGkwX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQTMsIEFUOTFfUElOX1BBNCwgQVQ5MV9QSU5fUEE1LCBBVDkxX1BJTl9QQTYgfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9TUEkxLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9TUEkxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1BJMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1BJMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3NwaTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaTFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMV9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEIyOCwgQVQ5MV9QSU5fUEEyNCwgQVQ5MV9QSU5fUEEyNSwgQVQ5MV9QSU5fUEEyNiB9OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBjc19waW47Ci0Jc2hvcnQgZW5hYmxlX3NwaTAgPSAwOwotCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKLQotCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgewotCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCi0JCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7Ci0JCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQotCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQkJZWxzZQotCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQotCQlpZiAoIWdwaW9faXNfdmFsaWQoY3NfcGluKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChkZXZpY2VzW2ldLmJ1c19udW0gPT0gMCkKLQkJCWVuYWJsZV9zcGkwID0gMTsKLQkJZWxzZQotCQkJZW5hYmxlX3NwaTEgPSAxOwotCi0JCS8qIGVuYWJsZSBjaGlwLXNlbGVjdCBwaW4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoY3NfcGluLCAxKTsKLQotCQkvKiBwYXNzIGNoaXAtc2VsZWN0IHBpbiB0byBkcml2ZXIgKi8KLQkJZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBjc19waW47Ci0JfQotCi0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0KLQkvKiBDb25maWd1cmUgU1BJIGJ1cyhlcykgKi8KLQlpZiAoZW5hYmxlX3NwaTApIHsKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAwKTsJLyogU1BJMF9NSVNPICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMSwgMCk7CS8qIFNQSTBfTU9TSSAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOwkvKiBTUEkwX1NQQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYxX3NwaTBfZGV2aWNlKTsKLQl9Ci0JaWYgKGVuYWJsZV9zcGkxKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMzAsIDApOwkvKiBTUEkxX01JU08gKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIzMSwgMCk7CS8qIFNQSTFfTU9TSSAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI5LCAwKTsJLyogU1BJMV9TUENLICovCi0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV9zcGkxX2RldmljZSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTENEIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBsY2RjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSBsY2RjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX0xDRENfQkFTRSwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX0xDRENfQkFTRSArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfTENEQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfTENEQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9JTlRTUkFNKQotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfU1JBTV9CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfU1JBTV9CQVNFICsgQVQ5MVNBTTkyNjFfU1JBTV9TSVpFIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLSNlbmRpZgotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9sY2RjX2RldmljZSA9IHsKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmxjZGNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZsY2RjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBsY2RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobGNkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKQotewotCWlmICghZGF0YSkgewotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcxMCgpKQotCQlhdDkxX2xjZGNfZGV2aWNlLm5hbWUgPSAiYXQ5MXNhbTlnMTAtbGNkZmIiOwotCWVsc2UKLQkJYXQ5MV9sY2RjX2RldmljZS5uYW1lID0gImF0OTFzYW05MjYxLWxjZGZiIjsKLQotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX1NUTikKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDApOyAgICAgLyogTENEVlNZTkMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOyAgICAgLyogTENESFNZTkMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIsIDApOyAgICAgLyogTENERE9UQ0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMsIDApOyAgICAgLyogTENEREVOICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAwKTsgICAgIC8qIExDRENDICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI1LCAwKTsgICAgIC8qIExDREQwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI2LCAwKTsgICAgIC8qIExDREQxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI3LCAwKTsgICAgIC8qIExDREQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAwKTsgICAgIC8qIExDREQzICovCi0jZWxzZQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CS8qIExDREhTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyLCAwKTsJLyogTENERE9UQ0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMsIDApOwkvKiBMQ0RERU4gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDApOwkvKiBMQ0RDQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMCk7CS8qIExDREQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAwKTsJLyogTENERDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkvKiBMQ0RENCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTAsIDApOwkvKiBMQ0RENSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTEsIDApOwkvKiBMQ0RENiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTIsIDApOwkvKiBMQ0RENyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTUsIDApOwkvKiBMQ0REMTAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE2LCAwKTsJLyogTENERDExICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNywgMCk7CS8qIExDREQxMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTgsIDApOwkvKiBMQ0REMTMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE5LCAwKTsJLyogTENERDE0ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMCwgMCk7CS8qIExDREQxNSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMjMsIDApOwkvKiBMQ0REMTggKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjI0LCAwKTsJLyogTENERDE5ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIyNSwgMCk7CS8qIExDREQyMCAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMjYsIDApOwkvKiBMQ0REMjEgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjI3LCAwKTsJLyogTENERDIyICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIyOCwgMCk7CS8qIExDREQyMyAqLwotI2VuZGlmCi0KLQlpZiAoQVJSQVlfU0laRShsY2RjX3Jlc291cmNlcykgPiAyKSB7Ci0JCXZvaWQgX19pb21lbSAqZmI7Ci0JCXN0cnVjdCByZXNvdXJjZSAqZmJfcmVzID0gJmxjZGNfcmVzb3VyY2VzWzJdOwotCQlzaXplX3QgZmJfbGVuID0gcmVzb3VyY2Vfc2l6ZShmYl9yZXMpOwotCi0JCWZiID0gaW9yZW1hcChmYl9yZXMtPnN0YXJ0LCBmYl9sZW4pOwotCQlpZiAoZmIpIHsKLQkJCW1lbXNldChmYiwgMCwgZmJfbGVuKTsKLQkJCWlvdW5tYXAoZmIpOwotCQl9Ci0JfQotCWxjZGNfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9sY2RjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUaW1lci9Db3VudGVyIGJsb2NrCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9UQ0IwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9UQ0IwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVEMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9UQzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1RDMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVEMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9UQzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1RDMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3RjYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdGNiX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV90Y2JfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBSVFQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnR0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9SVFQsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1JUVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV9ydHRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3J0dCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gcnR0X3Jlc291cmNlcywKLX07Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19SVENfRFJWX0FUOTFTQU05KQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0JYXQ5MXNhbTkyNjFfcnR0X2RldmljZS5uYW1lID0gInJ0Yy1hdDkxc2FtOSI7Ci0JLyoKLQkgKiBUaGUgc2Vjb25kIHJlc291cmNlIGlzIG5lZWRlZDoKLQkgKiBHUEJSIHdpbGwgc2VydmUgYXMgdGhlIHN0b3JhZ2UgZm9yIFJUQyB0aW1lIG9mZnNldAotCSAqLwotCWF0OTFzYW05MjYxX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDM7Ci0JcnR0X3Jlc291cmNlc1sxXS5zdGFydCA9IEFUOTFTQU05MjYxX0JBU0VfR1BCUiArCi0JCQkJIDQgKiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9HUEJSOwotCXJ0dF9yZXNvdXJjZXNbMV0uZW5kID0gcnR0X3Jlc291cmNlc1sxXS5zdGFydCArIDM7Ci0JcnR0X3Jlc291cmNlc1syXS5zdGFydCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci0JcnR0X3Jlc291cmNlc1syXS5lbmQgPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCS8qIE9ubHkgb25lIHJlc291cmNlIGlzIG5lZWRlZDogUlRUIG5vdCB1c2VkIGFzIFJUQyAqLwotCWF0OTFzYW05MjYxX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHQodm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0X3J0YygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfcnR0X2RldmljZSk7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBXYXRjaGRvZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9XRFQsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1dEVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfd2R0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV93ZHQiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYxX3dkdF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1NDIC0tIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDKSB8fCBkZWZpbmVkKENPTkZJR19BVE1FTF9TU0NfTU9EVUxFKQotc3RhdGljIHU2NCBzc2MwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYzBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzAsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfc3NjMF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MwX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjIsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIzLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjUsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI2LCAxKTsKLX0KLQotc3RhdGljIHU2NCBzc2MxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfc3NjMV9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MxX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExNywgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTgsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjEsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAxKTsKLX0KLQotc3RhdGljIHU2NCBzc2MyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYzJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzIsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1NTQzIgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9TU0MyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfc3NjMl9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDIsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MyX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMl9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjYsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI3LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyOCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjksIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzMwLCAxKTsKLX0KLQotLyoKLSAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55Ci0gKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQotICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQotICogb24gdGhlIHNhbWUgc3lzdGVtIG1pZ2h0IGJlIHVzZWQgYnkgYSBjdXN0b20gZGF0YSBjYXB0dXJlIGRyaXZlci4KLSAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBOT1RFOiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gbWF0Y2hpbmcKLQkgKiAicGlucyIgdG8gd2hhdGV2ZXIgd2lsbCBiZSB1c2luZyBlYWNoIHBhcnRpY3VsYXIgY29udHJvbGxlci4KLQkgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBBVDkxU0FNOTI2MV9JRF9TU0MwOgotCQlwZGV2ID0gJmF0OTFzYW05MjYxX3NzYzBfZGV2aWNlOwotCQljb25maWd1cmVfc3NjMF9waW5zKHBpbnMpOwotCQlicmVhazsKLQljYXNlIEFUOTFTQU05MjYxX0lEX1NTQzE6Ci0JCXBkZXYgPSAmYXQ5MXNhbTkyNjFfc3NjMV9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MxX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWNhc2UgQVQ5MVNBTTkyNjFfSURfU1NDMjoKLQkJcGRldiA9ICZhdDkxc2FtOTI2MV9zc2MyX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzJfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVBUlQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUwpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX0RCR1UsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX0RCR1UgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSBkYmd1X2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAwLAotCS51c2VfZG1hX3J4CT0gMCwJCS8qIERCR1Ugbm90IGNhcGFibGUgb2YgcmVjZWl2ZSBETUEgKi8KLX07Ci0KLXN0YXRpYyB1NjQgZGJndV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfZGJndV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDApOwkJLyogRFJYRCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDEpOwkJLyogRFRYRCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9VUzAsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1VTMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1VTMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVVMwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfdWFydDBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MF9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQwX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MF9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM4LCAxKTsJCS8qIFRYRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzksIDApOwkJLyogUlhEMCAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMCwgMCk7CS8qIFJUUzAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogQ1RTMCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9VUzEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1VTMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1VTMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVVMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfdWFydDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDIsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQxX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMiwgMSk7CQkvKiBUWEQxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMywgMCk7CQkvKiBSWEQxICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAwKTsJLyogUlRTMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDApOwkvKiBDVFMxICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1VTMiwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVVMyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9VUzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV91YXJ0Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMywKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE1LCAwKTsJCS8qIFJYRDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE0LCAxKTsJCS8qIFRYRDIgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTUsIDApOwkvKiBSVFMyKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE2LCAwKTsJLyogQ1RTMiAqLwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwotCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgKnBkYXRhOwotCi0Jc3dpdGNoIChpZCkgewotCQljYXNlIDA6CQkvKiBEQkdVICovCi0JCQlwZGV2ID0gJmF0OTFzYW05MjYxX2RiZ3VfZGV2aWNlOwotCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjFfSURfVVMwOgotCQkJcGRldiA9ICZhdDkxc2FtOTI2MV91YXJ0MF9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MV9JRF9VUzE6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYxX3VhcnQxX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYxX0lEX1VTMjoKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjFfdWFydDJfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JfQotCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JcGRhdGEtPm51bSA9IHBvcnRucjsJCS8qIHVwZGF0ZSB0byBtYXBwZWQgSUQgKi8KLQotCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKLQkJYXQ5MV91YXJ0c1twb3J0bnJdID0gcGRldjsKLX0KLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKLQkJaWYgKGF0OTFfdWFydHNbaV0pCi0JCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYwotICogc2V0dXAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3RjKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2My5jCmluZGV4IGZiZmYyMjguLmU3YWQxNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2My5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2My5jCkBAIC0xMCwzMDQgKzEwLDExIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KLQotI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2My5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAicG0uaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9QSU9BLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1BJT0IsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DREVfY2xrID0gewotCS5uYW1lCQk9ICJwaW9DREVfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1BJT0NERSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9VUzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1VTMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzBfY2xrID0gewotCS5uYW1lCQk9ICJtY2kwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9NQ0kwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX01DSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBjYW5fY2xrID0gewotCS5uYW1lCQk9ICJjYW5fY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX0NBTiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aV9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfVFdJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1NQSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkxX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfU1BJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0gewotCS5uYW1lCQk9ICJzc2MwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9TU0MwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1NTQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBhYzk3X2NsayA9IHsKLQkubmFtZQkJPSAiYWM5N19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfQUM5N0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0Y2JfY2xrID0gewotCS5uYW1lCQk9ICJ0Y2JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1RDQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGsgPSB7Ci0JLm5hbWUJCT0gInB3bV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfUFdNQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1hY2JfY2xrID0gewotCS5uYW1lCQk9ICJwY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX0VNQUMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lCQk9ICJkbWFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX0RNQSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3b2RnZV9jbGsgPSB7Ci0JLm5hbWUJCT0gIjJkZ2VfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEXzJER0UsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1ZGNfY2xrID0gewotCS5uYW1lCQk9ICJ1ZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1VEUCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGlzaV9jbGsgPSB7Ci0JLm5hbWUJCT0gImlzaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfSVNJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbGNkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImxjZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX0xDREMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBvaGNpX2NsayA9IHsKLQkubmFtZQkJPSAib2hjaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfVUhQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FfY2xrLAotCSZwaW9CX2NsaywKLQkmcGlvQ0RFX2NsaywKLQkmdXNhcnQwX2NsaywKLQkmdXNhcnQxX2NsaywKLQkmdXNhcnQyX2NsaywKLQkmbW1jMF9jbGssCi0JJm1tYzFfY2xrLAotCSZjYW5fY2xrLAotCSZ0d2lfY2xrLAotCSZzcGkwX2NsaywKLQkmc3BpMV9jbGssCi0JJnNzYzBfY2xrLAotCSZzc2MxX2NsaywKLQkmYWM5N19jbGssCi0JJnRjYl9jbGssCi0JJnB3bV9jbGssCi0JJm1hY2JfY2xrLAotCSZ0d29kZ2VfY2xrLAotCSZ1ZGNfY2xrLAotCSZpc2lfY2xrLAotCSZsY2RjX2NsaywKLQkmZG1hX2NsaywKLQkmb2hjaV9jbGssCi0JLy8gaXJxMCAuLiBpcnExCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcGVyaXBoX2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JLyogT25lIGFkZGl0aW9uYWwgZmFrZSBjbG9jayBmb3IgbWFjYl9oY2xrICovCi0JQ0xLREVWX0NPTl9JRCgiaGNsayIsICZtYWNiX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMCIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMSIsICZzc2MxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmOTgwMDAuc3NjIiwgJnNzYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmY5YzAwMC5zc2MiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0OTFzYW05MjYzLWxjZGZiLjAiLCAmbGNkY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImF0bWVsX21jaS4wIiwgJm1tYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJhdG1lbF9tY2kuMSIsICZtbWMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjAiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImF0bWVsX3NwaS4xIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjYl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJpMmMtYXQ5MXNhbTkyNjAuMCIsICZ0d2lfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiYXQ5MXNhbTlybC1wd20iLCAmcHdtX2NsayksCi0JLyogZmFrZSBoY2xrIGNsb2NrICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MV9vaGNpIiwgJm9oY2lfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9BIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9CIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9DIiwgJnBpb0NERV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0QiLCAmcGlvQ0RFX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvRSIsICZwaW9DREVfY2xrKSwKLQkvKiBtb3JlIHVzYXJ0IGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZWUwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmOGMwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmY5MDAwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZjk0MDAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQkvKiBtb3JlIHRjIGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZmZmN2MwMDAudGltZXIiLCAmdGNiX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYTAwMDAwLm9oY2kiLCAmb2hjaV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImZmZmE0MDAwLnNwaSIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZmZmYTgwMDAuc3BpIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmZmY4MDAwMC5tbWMiLCAmbW1jMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImZmZjg0MDAwLm1tYyIsICZtbWMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZjg4MDAwLmkyYyIsICZ0d2lfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmYyMDAuZ3BpbyIsICZwaW9BX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0NERV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjgwMC5ncGlvIiwgJnBpb0NERV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZmEwMC5ncGlvIiwgJnBpb0NERV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZiODAwMC5wd20iLCAmcHdtX2NsayksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgdXNhcnRfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4xIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4yIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4zIiwgJnVzYXJ0Ml9jbGspLAotfTsKLQotLyoKLSAqIFRoZSBmb3VyIHByb2dyYW1tYWJsZSBjbG9ja3MuCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDEsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMiA9IHsKLQkubmFtZQkJPSAicGNrMiIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDIsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMyA9IHsKLQkubmFtZQkJPSAicGNrMyIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDMsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCWNsa2Rldl9hZGRfdGFibGUodXNhcnRfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRSh1c2FydF9jbG9ja3NfbG9va3VwcykpOwotCi0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotCWNsa19yZWdpc3RlcigmcGNrMik7Ci0JY2xrX3JlZ2lzdGVyKCZwY2szKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGF0OTFzYW05MjYzX3JlZ2lzdGVyX2Nsb2NrcyBOVUxMCi0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBHUElPCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19iYW5rIGF0OTFzYW05MjYzX2dwaW9bXSBfX2luaXRkYXRhID0gewotCXsKLQkJLmlkCQk9IEFUOTFTQU05MjYzX0lEX1BJT0EsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTkyNjNfQkFTRV9QSU9BLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05MjYzX0lEX1BJT0IsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTkyNjNfQkFTRV9QSU9CLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05MjYzX0lEX1BJT0NERSwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2M19CQVNFX1BJT0MsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTkyNjNfSURfUElPQ0RFLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYzX0JBU0VfUElPRCwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2M19JRF9QSU9DREUsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTkyNjNfQkFTRV9QSU9FLAotCX0KLX07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTkyNjMgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCkBAIC0zMTksMTIxICsyNiwxNSBAQAogCWF0OTFfaW5pdF9zcmFtKDEsIEFUOTFTQU05MjYzX1NSQU0xX0JBU0UsIEFUOTFTQU05MjYzX1NSQU0xX1NJWkUpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfaW9yZW1hcF9yZWdpc3RlcnModm9pZCkKLXsKLQlhdDkxX2lvcmVtYXBfcmFtYygwLCBBVDkxU0FNOTI2M19CQVNFX1NEUkFNQzAsIDUxMik7Ci0JYXQ5MV9pb3JlbWFwX3JhbWMoMSwgQVQ5MVNBTTkyNjNfQkFTRV9TRFJBTUMxLCA1MTIpOwotCWF0OTFzYW05MjZ4X2lvcmVtYXBfcGl0KEFUOTFTQU05MjYzX0JBU0VfUElUKTsKLQlhdDkxc2FtOV9pb3JlbWFwX3NtYygwLCBBVDkxU0FNOTI2M19CQVNFX1NNQzApOwotCWF0OTFzYW05X2lvcmVtYXBfc21jKDEsIEFUOTFTQU05MjYzX0JBU0VfU01DMSk7Ci0JYXQ5MV9pb3JlbWFwX21hdHJpeChBVDkxU0FNOTI2M19CQVNFX01BVFJJWCk7Ci0JYXQ5MV9wbV9zZXRfc3RhbmRieShhdDkxc2FtOV9zZHJhbV9zdGFuZGJ5KTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYzX2luaXRpYWxpemUodm9pZCkKIHsKIAlhcm1fcG1faWRsZSA9IGF0OTFzYW05X2lkbGU7CiAKIAlhdDkxX3N5c2lycV9tYXNrX3J0dChBVDkxU0FNOTI2M19CQVNFX1JUVDApOwogCWF0OTFfc3lzaXJxX21hc2tfcnR0KEFUOTFTQU05MjYzX0JBU0VfUlRUMSk7Ci0KLQkvKiBSZWdpc3RlciBHUElPIHN1YnN5c3RlbSAqLwotCWF0OTFfZ3Bpb19pbml0KGF0OTFzYW05MjYzX2dwaW8sIDUpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJzdGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTkyNjNfQkFTRV9SU1RDLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjNfQkFTRV9SU1RDICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2M19CQVNFX1NEUkFNQzAsCi0JCS5lbmQgICAgPSBBVDkxU0FNOTI2M19CQVNFX1NEUkFNQzAgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJzdGNfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXNhbTkyNjAtcmVzZXQiLAotCS5yZXNvdXJjZSAgICAgICA9IHJzdGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUocnN0Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGR3Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2M19CQVNFX1NIRFdDLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjNfQkFTRV9TSERXQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGR3Y19kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImF0OTEtcG93ZXJvZmYiLAotCS5yZXNvdXJjZSAgICAgICA9IHNoZHdjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNoZHdjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnN0Y19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2hkd2NfZGV2aWNlKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MXNhbTkyNjNfZGVmYXVsdF9pcnFfcHJpb3JpdHlbTlJfQUlDX0lSUVNdIF9faW5pdGRhdGEgPSB7Ci0JNywJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkgKi8KLQk3LAkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMsIEQgYW5kIEUgKi8KLQkwLAotCTAsCi0JNSwJLyogVVNBUlQgMCAqLwotCTUsCS8qIFVTQVJUIDEgKi8KLQk1LAkvKiBVU0FSVCAyICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAwICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAxICovCi0JMywJLyogQ0FOICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDAgKi8KLQk1LAkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMSAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDAgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCi0JNSwJLyogQUM5NyBDb250cm9sbGVyICovCi0JMCwJLyogVGltZXIgQ291bnRlciAwLCAxIGFuZCAyICovCi0JMCwJLyogUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyICovCi0JMywJLyogRXRoZXJuZXQgKi8KLQkwLAotCTAsCS8qIDJEIEdyYXBoaWMgRW5naW5lICovCi0JMiwJLyogVVNCIERldmljZSBQb3J0ICovCi0JMCwJLyogSW1hZ2UgU2Vuc29yIEludGVyZmFjZSAqLwotCTMsCS8qIExEQyBDb250cm9sbGVyICovCi0JMCwJLyogRE1BIENvbnRyb2xsZXIgKi8KLQkwLAotCTIsCS8qIFVTQiBIb3N0IHBvcnQgKi8KLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkgKi8KLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMSkgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2M19pbml0X3RpbWUodm9pZCkKLXsKLQlhdDkxc2FtOTI2eF9waXRfaW5pdChOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTKTsKIH0KIAogQVQ5MV9TT0NfU1RBUlQoYXQ5MXNhbTkyNjMpCiAJLm1hcF9pbyA9IGF0OTFzYW05MjYzX21hcF9pbywKLQkuZGVmYXVsdF9pcnFfcHJpb3JpdHkgPSBhdDkxc2FtOTI2M19kZWZhdWx0X2lycV9wcmlvcml0eSwKLQkuZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05MjYzX0lEX0lSUTApIHwgKDEgPDwgQVQ5MVNBTTkyNjNfSURfSVJRMSksCi0JLmlvcmVtYXBfcmVnaXN0ZXJzID0gYXQ5MXNhbTkyNjNfaW9yZW1hcF9yZWdpc3RlcnMsCi0JLnJlZ2lzdGVyX2Nsb2NrcyA9IGF0OTFzYW05MjYzX3JlZ2lzdGVyX2Nsb2NrcywKLQkucmVnaXN0ZXJfZGV2aWNlcyA9IGF0OTFzYW05MjYzX3JlZ2lzdGVyX2RldmljZXMsCiAJLmluaXQgPSBhdDkxc2FtOTI2M19pbml0aWFsaXplLAotCS5pbml0X3RpbWUgPSBhdDkxc2FtOTI2M19pbml0X3RpbWUsCiBBVDkxX1NPQ19FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWYwZTJmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTM4ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYzX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBIb3N0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX1VIUF9CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VIUCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVUhQLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91c2JoX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdXNiaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKLXsKLQlpbnQgaTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyogRW5hYmxlIFZCdXMgY29udHJvbCBmb3IgVUhQIHBvcnRzICovCi0JZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRzOyBpKyspIHsKLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW5baV0pKQotCQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+dmJ1c19waW5baV0sCi0JCQkJCSAgICAgZGF0YS0+dmJ1c19waW5fYWN0aXZlX2xvd1tpXSk7Ci0JfQotCi0JLyogRW5hYmxlIG92ZXJjdXJyZW50IG5vdGlmaWNhdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSkpCi0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSwgMSk7Ci0JfQotCi0JdXNiaF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmhfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBEZXZpY2UgKEdhZGdldCkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0FUOTFfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIHVkY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVURQLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9VRFAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VRFAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VEUCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV91ZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKLQl9Ci0KLQkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBieSBVU0IgZGV2aWNlIHBlcmlwaGVyYWwgKi8KLQotCXVkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEV0aGVybmV0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDQikgfHwgZGVmaW5lZChDT05GSUdfTUFDQl9NT0RVTEUpCi1zdGF0aWMgdTY0IGV0aF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIGV0aF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV0aF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfRU1BQywKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfRU1BQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0VNQUMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0VNQUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19ldGhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtYWNiIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cGh5X2lycV9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cGh5X2lycV9waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5waHlfaXJxX3BpbiwgMSk7Ci0JfQotCi0JLyogUGlucyB1c2VkIGZvciBNSUkgYW5kIFJNSUkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIxLCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNSwgMCk7CS8qIEVSWERWICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNSwgMCk7CS8qIEVSWDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI2LCAwKTsJLyogRVJYMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjcsIDApOwkvKiBFUlhFUiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjgsIDApOwkvKiBFVFhFTiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjMsIDApOwkvKiBFVFgwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNCwgMCk7CS8qIEVUWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTMwLCAwKTsJLyogRU1ESU8gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI5LCAwKTsJLyogRU1EQyAqLwotCi0JaWYgKCFkYXRhLT5pc19ybWlpKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjIsIDApOwkvKiBFQ1JTICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjYsIDApOwkvKiBFQ09MICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjIsIDApOwkvKiBFUlgyICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjMsIDApOwkvKiBFUlgzICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjcsIDApOwkvKiBFUlhDSyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIwLCAwKTsJLyogRVRYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIxLCAwKTsJLyogRVRYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI0LCAwKTsJLyogRVRYRVIgKi8KLQl9Ci0KLQlldGhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfZXRoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBNTUMgLyBTRAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX01NQ19BVE1FTE1DSSkKLXN0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBtbWMwX2RhdGEsIG1tYzFfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9NQ0kwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9NQ0kwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfTUNJMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfTUNJMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX21tYzBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jMF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbW1jMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tYzBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfTUNJMSwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfTUNJMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX01DSTEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX01DSTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19tbWMxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbWNpIiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tYzFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG1tYzFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMxX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBzbG90X2NvdW50ID0gMDsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUNJX01BWF9OUl9TTE9UUzsgaSsrKSB7Ci0KLQkJaWYgKCFkYXRhLT5zbG90W2ldLmJ1c193aWR0aCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGlucHV0L2lycSAqLwotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4pKSB7Ci0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbiwKLQkJCQkJMSk7Ci0JCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4sCi0JCQkJCTEpOwotCQl9Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbaV0ud3BfcGluKSkKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFtpXS53cF9waW4sIDEpOwotCi0JCWlmIChtbWNfaWQgPT0gMCkgewkJCQkvKiBNQ0kwICovCi0JCQlzd2l0Y2ggKGkpIHsKLQkJCWNhc2UgMDoJCQkJCS8qIHNsb3QgQSAqLwotCQkJCS8qIENNRCAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMSwgMSk7Ci0JCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMCwgMSk7Ci0JCQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoID09IDQpIHsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzLCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE0LCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE1LCAxKTsKLQkJCQl9Ci0JCQkJc2xvdF9jb3VudCsrOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgkJCQkJLyogc2xvdCBCICovCi0JCQkJLyogQ01EICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNiwgMSk7Ci0JCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTcsIDEpOwotCQkJCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTgsIDEpOwotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMSk7Ci0JCQkJfQotCQkJCXNsb3RfY291bnQrKzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJBVDkxOiBTRC9NTUMgc2xvdCAlZCBub3QgYXZhaWxhYmxlXG4iLCBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChzbG90X2NvdW50KSB7Ci0JCQkJLyogQ0xLICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7Ci0KLQkJCQltbWMwX2RhdGEgPSAqZGF0YTsKLQkJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX21tYzBfZGV2aWNlKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChtbWNfaWQgPT0gMSkgewkJCS8qIE1DSTEgKi8KLQkJCXN3aXRjaCAoaSkgewotCQkJY2FzZSAwOgkJCQkJLyogc2xvdCBBICovCi0JCQkJLyogQ01EICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE3LCAxKTsKLQkJCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAxKTsKLQkJCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgewotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDEpOwotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMSk7Ci0JCQkJfQotCQkJCXNsb3RfY291bnQrKzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToJCQkJCS8qIHNsb3QgQiAqLwotCQkJCS8qIENNRCAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjEsIDEpOwotCQkJCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KLQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAxKTsKLQkJCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgewotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNCwgMSk7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDEpOwotCQkJCX0KLQkJCQlzbG90X2NvdW50Kys7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiQVQ5MTogU0QvTU1DIHNsb3QgJWQgbm90IGF2YWlsYWJsZVxuIiwgaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoc2xvdF9jb3VudCkgewotCQkJCS8qIENMSyAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNiwgMCk7Ci0KLQkJCQltbWMxX2RhdGEgPSAqZGF0YTsKLQkJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX21tYzFfZGV2aWNlKTsKLQkJCX0KLQkJfQotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ29tcGFjdCBGbGFzaCAoUENNQ0lBIG9yIElERSkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19QQVRBX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfQVQ5MV9NT0RVTEUpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BVDkxX0NGKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxX0NGX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgY2YwX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2YwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzQsCi0JCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfNCArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzhBTkQxNkJJVCwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjZjBfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJmNmMF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY2YwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2YwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBjZjFfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZjFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxX0NISVBTRUxFQ1RfNSwKLQkJLmVuZAk9IEFUOTFfQ0hJUFNFTEVDVF81ICsgU1pfMjU2TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEFORDE2QklULAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNmMV9kZXZpY2UgPSB7Ci0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmY2YxX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBjZjFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjZjFfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZWJpMF9jc2E7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBhc3NpZ24gQ1M0IG9yIENTNSB0byBTTUMgd2l0aCBDb21wYWN0IEZsYXNoIGxvZ2ljIHN1cHBvcnQsCi0JICogd2UgYXNzdW1lIFNNQyB0aW1pbmdzIGFyZSBjb25maWd1cmVkIGJ5IGJvYXJkIGNvZGUsCi0JICogZXhjZXB0IFRydWUgSURFIHdoZXJlIHRpbWluZ3MgYXJlIGNvbnRyb2xsZWQgYnkgZHJpdmVyCi0JICovCi0JZWJpMF9jc2EgPSBhdDkxX21hdHJpeF9yZWFkKEFUOTFfTUFUUklYX0VCSTBDU0EpOwotCXN3aXRjaCAoZGF0YS0+Y2hpcHNlbGVjdCkgewotCWNhc2UgNDoKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ2LCAwKTsgIC8qIEVCSTBfTkNTNC9DRkNTMCAqLwotCQllYmkwX2NzYSB8PSBBVDkxX01BVFJJWF9FQkkwX0NTNEFfU01DX0NGMTsKLQkJY2YwX2RhdGEgPSAqZGF0YTsKLQkJcGRldiA9ICZjZjBfZGV2aWNlOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENywgMCk7ICAvKiBFQkkwX05DUzUvQ0ZDUzEgKi8KLQkJZWJpMF9jc2EgfD0gQVQ5MV9NQVRSSVhfRUJJMF9DUzVBX1NNQ19DRjI7Ci0JCWNmMV9kYXRhID0gKmRhdGE7Ci0JCXBkZXYgPSAmY2YxX2RldmljZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJBVDkxIENGOiBiYWQgY2hpcC1zZWxlY3QgcmVxdWVzdGVkICgldSlcbiIsCi0JCSAgICAgICBkYXRhLT5jaGlwc2VsZWN0KTsKLQkJcmV0dXJuOwotCX0KLQlhdDkxX21hdHJpeF93cml0ZShBVDkxX01BVFJJWF9FQkkwQ1NBLCBlYmkwX2NzYSk7Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5kZXRfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5kZXRfcGluLCAxKTsKLQl9Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5pcnFfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmlycV9waW4sIDEpOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5pcnFfcGluLCAxKTsKLQl9Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52Y2NfcGluKSkKLQkJLyogaW5pdGlhbGx5IG9mZiAqLwotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT52Y2NfcGluLCAwKTsKLQotCS8qIGVuYWJsZSBFQkkgY29udHJvbGxlZCBwaW5zICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ1LCAxKTsgIC8qIE5XQUlUICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ4LCAwKTsgIC8qIENGQ0UxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ5LCAwKTsgIC8qIENGQ0UyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNCwgMCk7IC8qIENGTlJXICovCi0KLQlwZGV2LT5uYW1lID0gKGRhdGEtPmZsYWdzICYgQVQ5MV9DRl9UUlVFX0lERSkgPyAicGF0YV9hdDkxIiA6ICJhdDkxX2NmIjsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBOQU5EIC8gU21hcnRNZWRpYQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7Ci0KLSNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IE5BTkRfQkFTRSwKLQkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9FQ0MwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9FQ0MwICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfbmFuZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX25hbmQiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZuYW5kX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBuYW5kX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobmFuZF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JY3NhID0gYXQ5MV9tYXRyaXhfcmVhZChBVDkxX01BVFJJWF9FQkkwQ1NBKTsKLQlhdDkxX21hdHJpeF93cml0ZShBVDkxX01BVFJJWF9FQkkwQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9FQkkwX0NTM0FfU01DX1NNQVJUTUVESUEpOwotCi0JLyogZW5hYmxlIHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmVuYWJsZV9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5lbmFibGVfcGluLCAxKTsKLQotCS8qIHJlYWR5L2J1c3kgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmR5X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cmR5X3BpbiwgMSk7Ci0KLQkvKiBjYXJkIGRldGVjdCBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5kZXRfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKLQotCW5hbmRfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfbmFuZF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRXSSAoaTJjKQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFByZWZlciB0aGUgR1BJTyBjb2RlIHNpbmNlIHRoZSBUV0kgY29udHJvbGxlciBpc24ndCByb2J1c3QKLSAqIChnZXRzIG92ZXJydW5zIGFuZCB1bmRlcnJ1bnMgdW5kZXIgbG9hZCkgYW5kIGNhbiBvbmx5IGlzc3VlCi0gKiByZXBlYXRlZCBTVEFSVHMgaW4gb25lIHNjZW5hcmlvICh0aGUgZHJpdmVyIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGVtKS4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKLQkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQjQsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKLQkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQjUsCi0JLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKLQkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3R3aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCi0JLmlkCQkJPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZwZGF0YSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQjQsIDEpOwkJLyogVFdEIChTREEpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEI0LCAxKTsKLQotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BCNSwgMSk7CQkvKiBUV0NLIChTQ0wpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEI1LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfdHdpX2RldmljZSk7Ci19Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0kyQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MV9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHdpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9UV0ksCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1RXSSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1RXSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVFdJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfdHdpX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaTJjLWF0OTFzYW05MjYwIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0d2lfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0d2lfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQkvKiBwaW5zIHVzZWQgZm9yIFRXSSBpbnRlcmZhY2UgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDApOwkJLyogVFdEICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEI0LCAxKTsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNSwgMCk7CQkvKiBUV0NLICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEI1LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfdHdpX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTUEkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgdTY0IHNwaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9TUEkwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9TUEkwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1BJMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1BJMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3NwaTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaTBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMF9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEE1LCBBVDkxX1BJTl9QQTMsIEFUOTFfUElOX1BBNCwgQVQ5MV9QSU5fUEIxMSB9OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1NQSTEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1NQSTEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9TUEkxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9TUEkxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfc3BpMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaTFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGkxX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQjE1LCBBVDkxX1BJTl9QQjE2LCBBVDkxX1BJTl9QQjE3LCBBVDkxX1BJTl9QQjE4IH07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGNzX3BpbjsKLQlzaG9ydCBlbmFibGVfc3BpMCA9IDA7Ci0Jc2hvcnQgZW5hYmxlX3NwaTEgPSAwOwotCi0JLyogQ2hvb3NlIFNQSSBjaGlwLXNlbGVjdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfZGV2aWNlczsgaSsrKSB7Ci0JCWlmIChkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSkKLQkJCWNzX3BpbiA9ICh1bnNpZ25lZCBsb25nKSBkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YTsKLQkJZWxzZSBpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCi0JCQljc19waW4gPSBzcGkwX3N0YW5kYXJkX2NzW2RldmljZXNbaV0uY2hpcF9zZWxlY3RdOwotCQllbHNlCi0JCQljc19waW4gPSBzcGkxX3N0YW5kYXJkX2NzW2RldmljZXNbaV0uY2hpcF9zZWxlY3RdOwotCi0JCWlmICghZ3Bpb19pc192YWxpZChjc19waW4pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQotCQkJZW5hYmxlX3NwaTAgPSAxOwotCQllbHNlCi0JCQllbmFibGVfc3BpMSA9IDE7Ci0KLQkJLyogZW5hYmxlIGNoaXAtc2VsZWN0IHBpbiAqLwotCQlhdDkxX3NldF9ncGlvX291dHB1dChjc19waW4sIDEpOwotCi0JCS8qIHBhc3MgY2hpcC1zZWxlY3QgcGluIHRvIGRyaXZlciAqLwotCQlkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSA9ICh2b2lkICopIGNzX3BpbjsKLQl9Ci0KLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQotCS8qIENvbmZpZ3VyZSBTUEkgYnVzKGVzKSAqLwotCWlmIChlbmFibGVfc3BpMCkgewotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTAsIDApOwkvKiBTUEkwX01JU08gKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExLCAwKTsJLyogU1BJMF9NT1NJICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMiwgMCk7CS8qIFNQSTBfU1BDSyAqLwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfc3BpMF9kZXZpY2UpOwotCX0KLQlpZiAoZW5hYmxlX3NwaTEpIHsKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMCk7CS8qIFNQSTFfTUlTTyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEzLCAwKTsJLyogU1BJMV9NT1NJICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTQsIDApOwkvKiBTUEkxX1NQQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3NwaTFfZGV2aWNlKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBBQzk3Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQotc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9BQzk3QywKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9BQzk3QywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfQUM5N0MsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19hYzk3X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFjOTdfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGFjOTdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMCwgMCk7CS8qIEFDOTdGUyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CS8qIEFDOTdDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMiwgMCk7CS8qIEFDOTdUWCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMywgMCk7CS8qIEFDOTdSWCAqLwotCi0JLyogcmVzZXQgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZXNldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOwotCi0JYWM5N19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M19hYzk3X2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDQU4gQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0NBTl9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19DQU5fQVQ5MV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNhbl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfQ0FOLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9DQU4gKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9DQU4sCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0NBTiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX2Nhbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfY2FuIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gY2FuX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2FuX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2FuKHN0cnVjdCBhdDkxX2Nhbl9kYXRhICpkYXRhKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDApOwkvKiBDQU5UWCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBDQU5SWCAqLwotCWF0OTFzYW05MjYzX2Nhbl9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBkYXRhOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M19jYW5fZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2FuKHN0cnVjdCBhdDkxX2Nhbl9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTENEIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBsY2RjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSBsY2RjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0xDRENfQkFTRSwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0xDRENfQkFTRSArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfTENEQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfTENEQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfbGNkY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFzYW05MjYzLWxjZGZiIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmxjZGNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZsY2RjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBsY2RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobGNkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJLyogTENESFNZTkMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIsIDApOwkvKiBMQ0RET1RDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMywgMCk7CS8qIExDRERFTiAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCOSwgMCk7CS8qIExDRENDICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM2LCAwKTsJLyogTENERDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzcsIDApOwkvKiBMQ0REMyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOCwgMCk7CS8qIExDREQ0ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM5LCAwKTsJLyogTENERDUgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEwLCAwKTsJLyogTENERDYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogTENERDcgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE0LCAwKTsJLyogTENERDEwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNSwgMCk7CS8qIExDREQxMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTYsIDApOwkvKiBMQ0REMTIgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzEyLCAwKTsJLyogTENERDEzICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxOCwgMCk7CS8qIExDREQxNCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTksIDApOwkvKiBMQ0REMTUgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIyLCAwKTsJLyogTENERDE4ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyMywgMCk7CS8qIExDREQxOSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMjQsIDApOwkvKiBMQ0REMjAgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzE3LCAwKTsJLyogTENERDIxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyNiwgMCk7CS8qIExDREQyMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMjcsIDApOwkvKiBMQ0REMjMgKi8KLQotCWxjZGNfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9sY2RjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbWFnZSBTZW5zb3IgSW50ZXJmYWNlCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVklERU9fQVQ5MV9JU0kpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0FUOTFfSVNJX01PRFVMRSkKLQotc3RydWN0IHJlc291cmNlIGlzaV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfSVNJLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9JU0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9JU0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0lTSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX2lzaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfaXNpIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gaXNpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaXNpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaXNpKHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJYm9vbCB1c2VfcGNrX2FzX21jaykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTAsIDApOwkvKiBJU0lfRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTEsIDApOwkvKiBJU0lfRDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIsIDApOwkvKiBJU0lfRDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTMsIDApOwkvKiBJU0lfRDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTQsIDApOwkvKiBJU0lfRDQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTUsIDApOwkvKiBJU0lfRDUgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTYsIDApOwkvKiBJU0lfRDYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTcsIDApOwkvKiBJU0lfRDcgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTgsIDApOwkvKiBJU0lfUENLICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU5LCAwKTsJLyogSVNJX0hTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxMCwgMCk7CS8qIElTSV9WU1lOQyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BFMTIsIDApOwkvKiBJU0lfUEQ4ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEUxMywgMCk7CS8qIElTSV9QRDkgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRTE0LCAwKTsJLyogSVNJX1BEMTAgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRTE1LCAwKTsJLyogSVNJX1BEMTEgKi8KLQotCWlmICh1c2VfcGNrX2FzX21jaykgewotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRTExLCAwKTsJLyogSVNJX01DSyAoUENLMykgKi8KLQotCQkvKiBUT0RPOiByZWdpc3RlciB0aGUgUENLIGZvciBJU0lfTUNLIGFuZCBzZXQgaXRzIHBhcmVudCAqLwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaXNpKHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJYm9vbCB1c2VfcGNrX2FzX21jaykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGltZXIvQ291bnRlciBibG9jawotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIENPTkZJR19BVE1FTF9UQ0xJQgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRjYl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVENCMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1RDQiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVENCLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfdGNiX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdGNiIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0Y2JfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2JfcmVzb3VyY2VzKSwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19PRikKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRjYl9pZHNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtdGNiIiB9LAotCXsgLypzZW50aW5lbCovIH0KLX07Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKQotewotI2lmIGRlZmluZWQoQ09ORklHX09GKQotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCB0Y2JfaWRzKTsKLQlpZiAobnApIHsKLQkJb2Zfbm9kZV9wdXQobnApOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3RjYl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkgeyB9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFJUVAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydHQwX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9SVFQwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9SVFQwICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3J0dDBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3J0dCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gcnR0MF9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0dDFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1JUVDEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1JUVDEgKyBTWl8xNiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfcnR0IiwKLQkuaWQJCT0gMSwKLQkucmVzb3VyY2UJPSBydHQxX3Jlc291cmNlcywKLX07Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19SVENfRFJWX0FUOTFTQU05KQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0KLQlzd2l0Y2ggKENPTkZJR19SVENfRFJWX0FUOTFTQU05X1JUVCkgewotCWNhc2UgMDoKLQkJLyoKLQkJICogVGhlIHNlY29uZCByZXNvdXJjZSBpcyBuZWVkZWQgb25seSBmb3IgdGhlIGNob3NlbiBSVFQ6Ci0JCSAqIEdQQlIgd2lsbCBzZXJ2ZSBhcyB0aGUgc3RvcmFnZSBmb3IgUlRDIHRpbWUgb2Zmc2V0Ci0JCSAqLwotCQlhdDkxc2FtOTI2M19ydHQwX2RldmljZS5udW1fcmVzb3VyY2VzID0gMzsKLQkJYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci0JCXBkZXYgPSAmYXQ5MXNhbTkyNjNfcnR0MF9kZXZpY2U7Ci0JCXIgPSBydHQwX3Jlc291cmNlczsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlhdDkxc2FtOTI2M19ydHQwX2RldmljZS5udW1fcmVzb3VyY2VzID0gMTsKLQkJYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDM7Ci0JCXBkZXYgPSAmYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2U7Ci0JCXIgPSBydHQxX3Jlc291cmNlczsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJhdDkxc2FtOTI2Mzogb25seSBzdXBwb3J0cyAyIFJUVCAoJWQpXG4iLAotCQkgICAgICAgQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTlfUlRUKTsKLQkJcmV0dXJuOwotCX0KLQotCXBkZXYtPm5hbWUgPSAicnRjLWF0OTFzYW05IjsKLQlyWzFdLnN0YXJ0ID0gQVQ5MVNBTTkyNjNfQkFTRV9HUEJSICsgNCAqIENPTkZJR19SVENfRFJWX0FUOTFTQU05X0dQQlI7Ci0JclsxXS5lbmQgPSByWzFdLnN0YXJ0ICsgMzsKLQlyWzJdLnN0YXJ0ID0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUzsKLQlyWzJdLmVuZCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0JLyogT25seSBvbmUgcmVzb3VyY2UgaXMgbmVlZGVkOiBSVFQgbm90IHVzZWQgYXMgUlRDICovCi0JYXQ5MXNhbTkyNjNfcnR0MF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci0JYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHQodm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0X3J0YygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfcnR0MF9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfcnR0MV9kZXZpY2UpOwotfQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgV2F0Y2hkb2cKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPR19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHdkdF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfV0RULAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9XRFQgKyBTWl8xNiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3dkdF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfd2R0IiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M193ZHRfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFBXTQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFdNX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwd21fcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1BXTUMsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1BXTUMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9QV01DLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9QV01DLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfcHdtMF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXNhbTlybC1wd20iLAotCS5pZAk9IC0xLAotCS5yZXNvdXJjZQk9IHB3bV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB3bV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3B3bSh1MzIgbWFzaykKLXsKLQlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMCkpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCNywgMSk7CS8qIGVuYWJsZSBQV00wICovCi0KLQlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMSkpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCOCwgMSk7CS8qIGVuYWJsZSBQV00xICovCi0KLQlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMikpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjksIDEpOwkvKiBlbmFibGUgUFdNMiAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTMpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjI5LCAxKTsJLyogZW5hYmxlIFBXTTMgKi8KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfcHdtMF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9wd20odTMyIG1hc2spIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNTQyAtLSBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQykgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDX01PRFVMRSkKLXN0YXRpYyB1NjQgc3NjMF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9TU0MwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9TU0MwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1NDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1NDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3NzYzBfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFybTkyMDBfc3NjIiwKLQkuaWQJPSAwLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMF9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMF9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMiwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMywgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCNCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkYpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCNSwgMSk7Ci19Ci0KLXN0YXRpYyB1NjQgc3NjMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9TU0MxLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9TU0MxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1NDMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1NDMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3NzYzFfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFybTkyMDBfc3NjIiwKLQkuaWQJPSAxLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNiwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTAsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjExLCAxKTsKLX0KLQotLyoKLSAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55Ci0gKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQotICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQotICogb24gdGhlIHNhbWUgc3lzdGVtIG1pZ2h0IGJlIHVzZWQgYnkgYSBjdXN0b20gZGF0YSBjYXB0dXJlIGRyaXZlci4KLSAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBOT1RFOiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gbWF0Y2hpbmcKLQkgKiAicGlucyIgdG8gd2hhdGV2ZXIgd2lsbCBiZSB1c2luZyBlYWNoIHBhcnRpY3VsYXIgY29udHJvbGxlci4KLQkgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBBVDkxU0FNOTI2M19JRF9TU0MwOgotCQlwZGV2ID0gJmF0OTFzYW05MjYzX3NzYzBfZGV2aWNlOwotCQljb25maWd1cmVfc3NjMF9waW5zKHBpbnMpOwotCQlicmVhazsKLQljYXNlIEFUOTFTQU05MjYzX0lEX1NTQzE6Ci0JCXBkZXYgPSAmYXQ5MXNhbTkyNjNfc3NjMV9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MxX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVQVJUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX0RCR1UsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX0RCR1UgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSBkYmd1X2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAwLAotCS51c2VfZG1hX3J4CT0gMCwJCS8qIERCR1Ugbm90IGNhcGFibGUgb2YgcmVjZWl2ZSBETUEgKi8KLX07Ci0KLXN0YXRpYyB1NjQgZGJndV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfZGJndV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMwLCAwKTsJCS8qIERSWEQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMxLCAxKTsJCS8qIERUWEQgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVVMwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9VUzAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VUzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VTMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQwX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3VhcnQwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDBfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDBfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjYsIDEpOwkJLyogVFhEMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjcsIDApOwkJLyogUlhEMCAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwgMCk7CS8qIFJUUzAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAwKTsJLyogQ1RTMCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9VUzEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1VTMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VTMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVVMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfdWFydDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDIsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQxX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQwLCAxKTsJCS8qIFRYRDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEsIDApOwkJLyogUlhEMSAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQ3LCAwKTsJLyogUlRTMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BEOCwgMCk7CS8qIENUUzEgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVVMyLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9VUzIgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VUzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VTMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQyX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3VhcnQyX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAzLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDJfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0Ml9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0Ml9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDJfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMiwgMSk7CQkvKiBUWEQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQzLCAwKTsJCS8qIFJYRDIgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BENSwgMCk7CS8qIFJUUzIgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDYsIDApOwkvKiBDVFMyICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXRkYXRhIGF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCi0KLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGF0bWVsX3VhcnRfZGF0YSAqcGRhdGE7Ci0KLQlzd2l0Y2ggKGlkKSB7Ci0JCWNhc2UgMDoJCS8qIERCR1UgKi8KLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjNfZGJndV9kZXZpY2U7Ci0JCQljb25maWd1cmVfZGJndV9waW5zKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2M19JRF9VUzA6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYzX3VhcnQwX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDBfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYzX0lEX1VTMToKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjNfdWFydDFfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0MV9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjNfSURfVVMyOgotCQkJcGRldiA9ICZhdDkxc2FtOTI2M191YXJ0Ml9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQyX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQl9Ci0JcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlwZGF0YS0+bnVtID0gcG9ydG5yOwkJLyogdXBkYXRlIHRvIG1hcHBlZCBJRCAqLwotCi0JaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQotCQlhdDkxX3VhcnRzW3BvcnRucl0gPSBwZGV2OwotfQotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUFYX1VBUlQ7IGkrKykgewotCQlpZiAoYXQ5MV91YXJ0c1tpXSkKLQkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpIHt9Ci12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYwotICogc2V0dXAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlpZiAob2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3RjKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NS5jCmluZGV4IDQwNTQyN2UuLmI2MTE3YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NS5jCkBAIC0xMCwzNTYgKzEwLDEyIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay9hdDkxX3BtYy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05ZzQ1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJwbS5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfT0xEX0NMS19BVDkxKQotI2luY2x1ZGUgImNsb2NrLmgiCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENsb2NrcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBwZXJpcGhlcmFsIGNsb2Nrcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGlvQV9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0FfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1BJT0EsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9CX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfUElPQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0NfY2xrID0gewotCS5uYW1lCQk9ICJwaW9DX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9QSU9DLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvREVfY2xrID0gewotCS5uYW1lCQk9ICJwaW9ERV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfUElPREUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0cm5nX2NsayA9IHsKLQkubmFtZQkJPSAidHJuZ19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVFJORywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9VUzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1VTMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0M19jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0M19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVVMzLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbW1jMF9jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX01DSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kwX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVFdJMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aTFfY2xrID0gewotCS5uYW1lCQk9ICJ0d2kxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9UV0kxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1NQSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkxX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfU1BJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0gewotCS5uYW1lCQk9ICJzc2MwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9TU0MwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1NTQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0Y2IwX2NsayA9IHsKLQkubmFtZQkJPSAidGNiMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVENCLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcHdtX2NsayA9IHsKLQkubmFtZQkJPSAicHdtX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9QV01DLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHNjX2NsayA9IHsKLQkubmFtZQkJPSAidHNjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9UU0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lCQk9ICJkbWFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0RNQSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVocGhzX2NsayA9IHsKLQkubmFtZQkJPSAidWhwaHNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1VIUEhTLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbGNkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImxjZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0xDREMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBhYzk3X2NsayA9IHsKLQkubmFtZQkJPSAiYWM5N19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfQUM5N0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtYWNiX2NsayA9IHsKLQkubmFtZQkJPSAicGNsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9FTUFDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgaXNpX2NsayA9IHsKLQkubmFtZQkJPSAiaXNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9JU0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1ZHBoc19jbGsgPSB7Ci0JLm5hbWUJCT0gInVkcGhzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9VRFBIUywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2xrID0gewotCS5uYW1lCQk9ICJtY2kxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9NQ0kxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi0vKiBWaWRlbyBkZWNvZGVyIGNsb2NrIC0gT25seSBmb3Igc2FtOW0xMC9zYW05bTExICovCi1zdGF0aWMgc3RydWN0IGNsayB2ZGVjX2NsayA9IHsKLQkubmFtZQkJPSAidmRlY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVkRFQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWRjX29wX2NsayA9IHsKLQkubmFtZQkJPSAiYWRjX29wX2NsayIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLQkucmF0ZV9oegk9IDMwMDAwMCwKLX07Ci0KLS8qIEFFUy9UREVTL1NIQSBjbG9jayAtIE9ubHkgZm9yIHNhbTltMTEvc2FtOWc1NiAqLwotc3RhdGljIHN0cnVjdCBjbGsgYWVzdGRlc3NoYV9jbGsgPSB7Ci0JLm5hbWUJCT0gImFlc3RkZXNzaGFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0FFU1RERVNTSEEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmcGlvQV9jbGssCi0JJnBpb0JfY2xrLAotCSZwaW9DX2NsaywKLQkmcGlvREVfY2xrLAotCSZ0cm5nX2NsaywKLQkmdXNhcnQwX2NsaywKLQkmdXNhcnQxX2NsaywKLQkmdXNhcnQyX2NsaywKLQkmdXNhcnQzX2NsaywKLQkmbW1jMF9jbGssCi0JJnR3aTBfY2xrLAotCSZ0d2kxX2NsaywKLQkmc3BpMF9jbGssCi0JJnNwaTFfY2xrLAotCSZzc2MwX2NsaywKLQkmc3NjMV9jbGssCi0JJnRjYjBfY2xrLAotCSZwd21fY2xrLAotCSZ0c2NfY2xrLAotCSZkbWFfY2xrLAotCSZ1aHBoc19jbGssCi0JJmxjZGNfY2xrLAotCSZhYzk3X2NsaywKLQkmbWFjYl9jbGssCi0JJmlzaV9jbGssCi0JJnVkcGhzX2NsaywKLQkmbW1jMV9jbGssCi0JJmFkY19vcF9jbGssCi0JJmFlc3RkZXNzaGFfY2xrLAotCS8vIGlycTAKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBwZXJpcGhfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQkvKiBPbmUgYWRkaXRpb25hbCBmYWtlIGNsb2NrIGZvciBtYWNiX2hjbGsgKi8KLQlDTEtERVZfQ09OX0lEKCJoY2xrIiwgJm1hY2JfY2xrKSwKLQkvKiBPbmUgYWRkaXRpb25hbCBmYWtlIGNsb2NrIGZvciBvaGNpICovCi0JQ0xLREVWX0NPTl9JRCgib2hjaV9jbGsiLCAmdWhwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxc2FtOWc0NS1sY2RmYi4wIiwgJmxjZGNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxc2FtOWc0NWVzLWxjZGZiLjAiLCAmbGNkY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJlaGNpX2NsayIsICJhdG1lbC1laGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXRtZWxfdXNiYV91ZGMiLCAmdXRtaV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0bWVsX3VzYmFfdWRjIiwgJnVkcGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiYXRtZWxfbWNpLjAiLCAmbW1jMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImF0bWVsX21jaS4xIiwgJm1tYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJhdG1lbF9zcGkuMCIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjEiLCAmc3BpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGNiMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiYXRtZWxfdGNiLjEiLCAmdGNiMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJpMmMtYXQ5MXNhbTlnMTAuMCIsICZ0d2kwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOWcxMC4xIiwgJnR3aTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxc2FtOWc0NV9zc2MuMCIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXNhbTlnNDVfc3NjLjEiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZjljMDAwLnNzYyIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmYTAwMDAuc3NjIiwgJnNzYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiYXRtZWwtdHJuZyIsICZ0cm5nX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImF0bWVsX3NoYSIsICZhZXN0ZGVzc2hhX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImF0bWVsX3RkZXMiLCAmYWVzdGRlc3NoYV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJhdG1lbF9hZXMiLCAmYWVzdGRlc3NoYV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJhdDkxc2FtOXJsLXB3bSIsICZwd21fY2xrKSwKLQkvKiBtb3JlIHVzYXJ0IGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZWUwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmOGMwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmY5MDAwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZjk0MDAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmOTgwMDAuc2VyaWFsIiwgJnVzYXJ0M19jbGspLAotCS8qIG1vcmUgdGMgbG9va3VwIHRhYmxlIGZvciBEVCBlbnRyaWVzICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmZmY3YzAwMC50aW1lciIsICZ0Y2IwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmZmZkNDAwMC50aW1lciIsICZ0Y2IwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiNzAwMDAwLm9oY2kiLCAmdWhwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiZWhjaV9jbGsiLCAiODAwMDAwLmVoY2kiLCAmdWhwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmZmY4MDAwMC5tbWMiLCAmbW1jMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImZmZmQwMDAwLm1tYyIsICZtbWMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZjg0MDAwLmkyYyIsICZ0d2kwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZjg4MDAwLmkyYyIsICZ0d2kxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZmZmYTQwMDAuc3BpIiwgJnNwaTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmZmZhODAwMC5zcGkiLCAmc3BpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjYwMDAwMC5nYWRnZXQiLCAmdXRtaV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgIjYwMDAwMC5nYWRnZXQiLCAmdWRwaHNfY2xrKSwKLQkvKiBmYWtlIGhjbGsgY2xvY2sgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxX29oY2kiLCAmdWhwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmYyMDAuZ3BpbyIsICZwaW9BX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9ERV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZmEwMC5ncGlvIiwgJnBpb0RFX2NsayksCi0KLQlDTEtERVZfQ09OX0lEKCJwaW9BIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9CIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9DIiwgJnBpb0NfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9EIiwgJnBpb0RFX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvRSIsICZwaW9ERV9jbGspLAotCS8qIEZha2UgYWRjIGNsb2NrICovCi0JQ0xLREVWX0NPTl9JRCgiYWRjX2NsayIsICZ0c2NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYjgwMDAucHdtIiwgJnB3bV9jbGspLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHVzYXJ0X2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjAiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMSIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMiIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMyIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNCIsICZ1c2FydDNfY2xrKSwKLX07Ci0KLS8qCi0gKiBUaGUgdHdvIHByb2dyYW1tYWJsZSBjbG9ja3MuCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCWNsa2Rldl9hZGRfdGFibGUodXNhcnRfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRSh1c2FydF9jbG9ja3NfbG9va3VwcykpOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOW0xMCgpIHx8IGNwdV9pc19hdDkxc2FtOW0xMSgpKQotCQljbGtfcmVnaXN0ZXIoJnZkZWNfY2xrKTsKLQotCWNsa19yZWdpc3RlcigmcGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZwY2sxKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGF0OTFzYW05ZzQ1X3JlZ2lzdGVyX2Nsb2NrcyBOVUxMCi0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBHUElPCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19iYW5rIGF0OTFzYW05ZzQ1X2dwaW9bXSBfX2luaXRkYXRhID0gewotCXsKLQkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0EsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlHNDVfQkFTRV9QSU9BLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0IsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlHNDVfQkFTRV9QSU9CLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0MsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlHNDVfQkFTRV9QSU9DLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0RFLAotCQkucmVnYmFzZQk9IEFUOTFTQU05RzQ1X0JBU0VfUElPRCwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOUc0NV9JRF9QSU9ERSwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOUc0NV9CQVNFX1BJT0UsCi0JfQotfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBBVDkxU0FNOUc0NSBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KQEAgLTM3MCwxMjUgKzI2LDE1IEBACiAJYXQ5MV9pbml0X3NyYW0oMCwgQVQ5MVNBTTlHNDVfU1JBTV9CQVNFLCBBVDkxU0FNOUc0NV9TUkFNX1NJWkUpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW9yZW1hcF9yZWdpc3RlcnModm9pZCkKLXsKLQlhdDkxX2lvcmVtYXBfcmFtYygwLCBBVDkxU0FNOUc0NV9CQVNFX0REUlNEUkMxLCA1MTIpOwotCWF0OTFfaW9yZW1hcF9yYW1jKDEsIEFUOTFTQU05RzQ1X0JBU0VfRERSU0RSQzAsIDUxMik7Ci0JYXQ5MXNhbTkyNnhfaW9yZW1hcF9waXQoQVQ5MVNBTTlHNDVfQkFTRV9QSVQpOwotCWF0OTFzYW05X2lvcmVtYXBfc21jKDAsIEFUOTFTQU05RzQ1X0JBU0VfU01DKTsKLQlhdDkxX2lvcmVtYXBfbWF0cml4KEFUOTFTQU05RzQ1X0JBU0VfTUFUUklYKTsKLQlhdDkxX3BtX3NldF9zdGFuZGJ5KGF0OTFfZGRyX3N0YW5kYnkpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdGlhbGl6ZSh2b2lkKQogewogCWFybV9wbV9pZGxlID0gYXQ5MXNhbTlfaWRsZTsKIAogCWF0OTFfc3lzaXJxX21hc2tfcnRjKEFUOTFTQU05RzQ1X0JBU0VfUlRDKTsKIAlhdDkxX3N5c2lycV9tYXNrX3J0dChBVDkxU0FNOUc0NV9CQVNFX1JUVCk7Ci0KLQkvKiBSZWdpc3RlciBHUElPIHN1YnN5c3RlbSAqLwotCWF0OTFfZ3Bpb19pbml0KGF0OTFzYW05ZzQ1X2dwaW8sIDUpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJzdGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTlHNDVfQkFTRV9SU1RDLAotCQkuZW5kICAgID0gQVQ5MVNBTTlHNDVfQkFTRV9SU1RDICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOUc0NV9CQVNFX0REUlNEUkMxLAotCQkuZW5kICAgID0gQVQ5MVNBTTlHNDVfQkFTRV9ERFJTRFJDMSArIFNaXzUxMiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05RzQ1X0JBU0VfRERSU0RSQzAsCi0JCS5lbmQgICAgPSBBVDkxU0FNOUc0NV9CQVNFX0REUlNEUkMwICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByc3RjX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiYXQ5MS1zYW05ZzQ1LXJlc2V0IiwKLQkucmVzb3VyY2UgICAgICAgPSByc3RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHJzdGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hkd2NfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTlHNDVfQkFTRV9TSERXQywKLQkJLmVuZCAgICA9IEFUOTFTQU05RzQ1X0JBU0VfU0hEV0MgKyBTWl8xNiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hkd2NfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXBvd2Vyb2ZmIiwKLQkucmVzb3VyY2UgICAgICAgPSBzaGR3Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzaGR3Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05ZzQ1X3JlZ2lzdGVyX2RldmljZXModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJzdGNfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNoZHdjX2RldmljZSk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgSW50ZXJydXB0IGluaXRpYWxpemF0aW9uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAoMCA9IGxvd2VzdCwgNyA9IGhpZ2hlc3QpLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0OTFzYW05ZzQ1X2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0gewotCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCi0JNywJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBDICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBEIGFuZCBFICovCi0JMCwKLQk1LAkvKiBVU0FSVCAwICovCi0JNSwJLyogVVNBUlQgMSAqLwotCTUsCS8qIFVTQVJUIDIgKi8KLQk1LAkvKiBVU0FSVCAzICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAwICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDAgKi8KLQk2LAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLwotCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLwotCTAsCS8qIFRpbWVyIENvdW50ZXIgMCwgMSwgMiwgMywgNCBhbmQgNSAqLwotCTAsCS8qIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciAqLwotCTAsCS8qIFRvdWNoIFNjcmVlbiBDb250cm9sbGVyICovCi0JMCwJLyogRE1BIENvbnRyb2xsZXIgKi8KLQkyLAkvKiBVU0IgSG9zdCBIaWdoIFNwZWVkIHBvcnQgKi8KLQkzLAkvKiBMREMgQ29udHJvbGxlciAqLwotCTUsCS8qIEFDOTcgQ29udHJvbGxlciAqLwotCTMsCS8qIEV0aGVybmV0ICovCi0JMCwJLyogSW1hZ2UgU2Vuc29yIEludGVyZmFjZSAqLwotCTIsCS8qIFVTQiBEZXZpY2UgSGlnaCBzcGVlZCBwb3J0ICovCi0JMCwJLyogQUVTVERFU1NIQSBDcnlwdG8gSFcgQWNjZWxlcmF0b3JzICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAxICovCi0JMCwKLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOWc0NV9pbml0X3RpbWUodm9pZCkKLXsKLQlhdDkxc2FtOTI2eF9waXRfaW5pdChOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTKTsKIH0KIAogQVQ5MV9TT0NfU1RBUlQoYXQ5MXNhbTlnNDUpCiAJLm1hcF9pbyA9IGF0OTFzYW05ZzQ1X21hcF9pbywKLQkuZGVmYXVsdF9pcnFfcHJpb3JpdHkgPSBhdDkxc2FtOWc0NV9kZWZhdWx0X2lycV9wcmlvcml0eSwKLQkuZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05RzQ1X0lEX0lSUTApLAotCS5pb3JlbWFwX3JlZ2lzdGVycyA9IGF0OTFzYW05ZzQ1X2lvcmVtYXBfcmVnaXN0ZXJzLAotCS5yZWdpc3Rlcl9jbG9ja3MgPSBhdDkxc2FtOWc0NV9yZWdpc3Rlcl9jbG9ja3MsCi0JLnJlZ2lzdGVyX2RldmljZXMgPSBhdDkxc2FtOWc0NV9yZWdpc3Rlcl9kZXZpY2VzLAogCS5pbml0ID0gYXQ5MXNhbTlnNDVfaW5pdGlhbGl6ZSwKLQkuaW5pdF90aW1lID0gYXQ5MXNhbTlnNDVfaW5pdF90aW1lLAogQVQ5MV9TT0NfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhYjc4Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkxNSArMCwwIEBACi0vKgotICogIE9uLUNoaXAgZGV2aWNlcyBzZXR1cCBjb2RlIGZvciB0aGUgQVQ5MVNBTTlHNDUgZmFtaWx5Ci0gKgotICogIENvcHlyaWdodCAoQykgMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvYXRtZWwtbWNpLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9jcnlwdG8tYXRtZWwuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXQ5MV9hZGMuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlnNDVfbWF0cml4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtYXRtZWwuaD4KLSNpbmNsdWRlIDxtYWNoL2F0bWVsLW1jaS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgPG1lZGlhL2F0bWVsLWlzaS5oPgotCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBIRE1BQyAtIEFIQiBETUEgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUX0hETUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVF9IRE1BQ19NT0RVTEUpCi1zdGF0aWMgdTY0IGhkbWFjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhkbWFjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9ETUEsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX0RNQSArIFNaXzUxMiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0RNQSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfRE1BLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXRfaGRtYWNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxc2FtOWc0NV9kbWEiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmhkbWFjX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IGhkbWFjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGRtYWNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9oZG1hYyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXRfaGRtYWNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIEhvc3QgKE9IQ0kpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX29oY2lfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoX29oY2lfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9PSENJX0JBU0UsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9PSENJX0JBU0UgKyBTWl8xTSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VIUEhTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VSFBIUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfdXNiaF9vaGNpX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9vaGNpX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1c2JoX29oY2lfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JoX29oY2lfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoX29oY2koc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKQotewotCWludCBpOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQkvKiBFbmFibGUgVkJ1cyBjb250cm9sIGZvciBVSFAgcG9ydHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydHM7IGkrKykgewotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbltpXSkpCi0JCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT52YnVzX3BpbltpXSwKLQkJCQkJICAgICBkYXRhLT52YnVzX3Bpbl9hY3RpdmVfbG93W2ldKTsKLQl9Ci0KLQkvKiBFbmFibGUgb3ZlcmN1cnJlbnQgbm90aWZpY2F0aW9uICovCi0JZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRzOyBpKyspIHsKLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+b3ZlcmN1cnJlbnRfcGluW2ldKSkKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+b3ZlcmN1cnJlbnRfcGluW2ldLCAxKTsKLQl9Ci0KLQl1c2JoX29oY2lfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JoX29oY2lfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIEhvc3QgSFMgKEVIQ0kpCi0gKiAgTmVlZHMgYW4gT0hDSSBob3N0IGZvciBsb3cgYW5kIGZ1bGwgc3BlZWQgbWFuYWdlbWVudAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9FSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VIQ0lfSENEX01PRFVMRSkKLXN0YXRpYyB1NjQgZWhjaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgdXNiaF9laGNpX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9laGNpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfRUhDSV9CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfRUhDSV9CQVNFICsgU1pfMU0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VSFBIUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVUhQSFMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3VzYmhfZWhjaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsLWVoY2kiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmVoY2lfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1c2JoX2VoY2lfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVzYmhfZWhjaV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfZWhjaV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmhfZWhjaShzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCS8qIEVuYWJsZSBWQnVzIGNvbnRyb2wgZm9yIFVIUCBwb3J0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnZidXNfcGluW2ldKSkKLQkJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnZidXNfcGluW2ldLAotCQkJCQkgICAgIGRhdGEtPnZidXNfcGluX2FjdGl2ZV9sb3dbaV0pOwotCX0KLQotCXVzYmhfZWhjaV9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmhfZWhjaV9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoX2VoY2koc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgSFMgRGV2aWNlIChHYWRnZXQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0FUTUVMX1VTQkEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9BVE1FTF9VU0JBX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiYV91ZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9VRFBIU19GSUZPLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfVURQSFNfRklGTyArIFNaXzUxMksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VRFBIUywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVURQSFMgKyBTWl8xSyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VEUEhTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VRFBIUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLSNkZWZpbmUgRVAobmFtLCBpZHgsIG1heHBrdCwgbWF4YmssIGRtYSwgaXNvYykJCQlcCi0JW2lkeF0gPSB7CQkJCQkJXAotCQkubmFtZQkJPSBuYW0sCQkJCVwKLQkJLmluZGV4CQk9IGlkeCwJCQkJXAotCQkuZmlmb19zaXplCT0gbWF4cGt0LAkJCVwKLQkJLm5yX2JhbmtzCT0gbWF4YmssCQkJXAotCQkuY2FuX2RtYQk9IGRtYSwJCQkJXAotCQkuY2FuX2lzb2MJPSBpc29jLAkJCQlcCi0JfQotCi1zdGF0aWMgc3RydWN0IHVzYmFfZXBfZGF0YSB1c2JhX3VkY19lcFtdIF9faW5pdGRhdGEgPSB7Ci0JRVAoImVwMCIsIDAsIDY0LCAxLCAwLCAwKSwKLQlFUCgiZXAxIiwgMSwgMTAyNCwgMiwgMSwgMSksCi0JRVAoImVwMiIsIDIsIDEwMjQsIDIsIDEsIDEpLAotCUVQKCJlcDMiLCAzLCAxMDI0LCAzLCAxLCAwKSwKLQlFUCgiZXA0IiwgNCwgMTAyNCwgMywgMSwgMCksCi0JRVAoImVwNSIsIDUsIDEwMjQsIDMsIDEsIDEpLAotCUVQKCJlcDYiLCA2LCAxMDI0LCAzLCAxLCAxKSwKLX07Ci0KLSN1bmRlZiBFUAotCi0vKgotICogcGRhdGEgZG9lc24ndCBoYXZlIHJvb20gZm9yIGFueSBlbmRwb2ludHMsIHNvIHdlIG5lZWQgdG8KLSAqIGFwcGVuZCByb29tIGZvciB0aGUgb25lcyB3ZSBuZWVkIHJpZ2h0IGFmdGVyIGl0LgotICovCi1zdGF0aWMgc3RydWN0IHsKLQlzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhIHBkYXRhOwotCXN0cnVjdCB1c2JhX2VwX2RhdGEgZXBbN107Ci19IHVzYmFfdWRjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfdXNiYV91ZGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2JhX3VkYyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJnVzYmFfdWRjX2RhdGEucGRhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1c2JhX3VkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmFfdWRjX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiYShzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCXVzYmFfdWRjX2RhdGEucGRhdGEudmJ1c19waW4gPSAtRUlOVkFMOwotCXVzYmFfdWRjX2RhdGEucGRhdGEubnVtX2VwID0gQVJSQVlfU0laRSh1c2JhX3VkY19lcCk7Ci0JbWVtY3B5KHVzYmFfdWRjX2RhdGEuZXAsIHVzYmFfdWRjX2VwLCBzaXplb2YodXNiYV91ZGNfZXApKTsKLQotCWlmIChkYXRhICYmIGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+dmJ1c19waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT52YnVzX3BpbiwgMSk7Ci0JCXVzYmFfdWRjX2RhdGEucGRhdGEudmJ1c19waW4gPSBkYXRhLT52YnVzX3BpbjsKLQl9Ci0KLQkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBieSBVU0IgZGV2aWNlIHBlcmlwaGVyYWwgKi8KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JhX3VkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JhKHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEV0aGVybmV0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDQikgfHwgZGVmaW5lZChDT05GSUdfTUFDQl9NT0RVTEUpCi1zdGF0aWMgdTY0IGV0aF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIGV0aF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV0aF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfRU1BQywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfRU1BQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0VNQUMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0VNQUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9ldGhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtYWNiIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cGh5X2lycV9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cGh5X2lycV9waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5waHlfaXJxX3BpbiwgMSk7Ci0JfQotCi0JLyogUGlucyB1c2VkIGZvciBNSUkgYW5kIFJNSUkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMCk7CS8qIEVSWERWICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7CS8qIEVSWDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAwKTsJLyogRVJYMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFUlhFUiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBFVFhFTiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDApOwkvKiBFVFgwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMCk7CS8qIEVUWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAwKTsJLyogRU1ESU8gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogRU1EQyAqLwotCi0JaWYgKCFkYXRhLT5pc19ybWlpKSB7Ci0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjksIDApOwkvKiBFQ1JTICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMzAsIDApOwkvKiBFQ09MICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOCwgIDApOwkvKiBFUlgyICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOSwgIDApOwkvKiBFUlgzICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjgsIDApOwkvKiBFUlhDSyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTYsICAwKTsJLyogRVRYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTcsICAwKTsJLyogRVRYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsJLyogRVRYRVIgKi8KLQl9Ci0KLQlldGhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfZXRoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBNTUMgLyBTRAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJX01PRFVMRSkKLXN0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBtbWMwX2RhdGEsIG1tYzFfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9NQ0kwLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9NQ0kwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfTUNJMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfTUNJMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X21tYzBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jMF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbW1jMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tYzBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfTUNJMSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfTUNJMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX01DSTEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX01DSTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9tbWMxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbWNpIiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tYzFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG1tYzFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMxX3Jlc291cmNlcyksCi19OwotCi0vKiBDb25zaWRlciBvbmx5IG9uZSBzbG90IDogc2xvdCAwICovCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQkvKiBNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHVzYWJsZSBzbG90ICovCi0JaWYgKCFkYXRhLT5zbG90WzBdLmJ1c193aWR0aCkKLQkJcmV0dXJuOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRfSERNQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUX0hETUFDX01PRFVMRSkKLQl7Ci0Jc3RydWN0IGF0X2RtYV9zbGF2ZQkqYXRzbGF2ZTsKLQlzdHJ1Y3QgbWNpX2RtYV9kYXRhCSphbHRfYXRzbGF2ZTsKLQotCWFsdF9hdHNsYXZlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1jaV9kbWFfZGF0YSksIEdGUF9LRVJORUwpOwotCWF0c2xhdmUgPSAmYWx0X2F0c2xhdmUtPnNkYXRhOwotCi0JLyogRE1BIHNsYXZlIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLwotCWF0c2xhdmUtPmRtYV9kZXYgPSAmYXRfaGRtYWNfZGV2aWNlLmRldjsKLQlhdHNsYXZlLT5jZmcgPSBBVENfRklGT0NGR19IQUxGRklGTwotCQkJfCBBVENfU1JDX0gyU0VMX0hXIHwgQVRDX0RTVF9IMlNFTF9IVzsKLQlpZiAobW1jX2lkID09IDApCS8qIE1DSTAgKi8KLQkJYXRzbGF2ZS0+Y2ZnIHw9IEFUQ19TUkNfUEVSKEFUX0RNQV9JRF9NQ0kwKQotCQkJICAgICAgfCBBVENfRFNUX1BFUihBVF9ETUFfSURfTUNJMCk7Ci0KLQllbHNlCQkJLyogTUNJMSAqLwotCQlhdHNsYXZlLT5jZmcgfD0gQVRDX1NSQ19QRVIoQVRfRE1BX0lEX01DSTEpCi0JCQkgICAgICB8IEFUQ19EU1RfUEVSKEFUX0RNQV9JRF9NQ0kxKTsKLQotCWRhdGEtPmRtYV9zbGF2ZSA9IGFsdF9hdHNsYXZlOwotCX0KLSNlbmRpZgotCi0KLQkvKiBpbnB1dC9pcnEgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90WzBdLmRldGVjdF9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFswXS5kZXRlY3RfcGluLCAxKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+c2xvdFswXS5kZXRlY3RfcGluLCAxKTsKLQl9Ci0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+c2xvdFswXS53cF9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbMF0ud3BfcGluLCAxKTsKLQotCWlmIChtbWNfaWQgPT0gMCkgewkJLyogTUNJMCAqLwotCi0JCS8qIENMSyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTAsIDApOwotCi0JCS8qIENNRCAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDEpOwotCi0JCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgYW5kIG1heWJlIERBVDQuLkRBVDcgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAxKTsKLQkJaWYgKGRhdGEtPnNsb3RbMF0uYnVzX3dpZHRoID09IDQpIHsKLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMywgMSk7Ci0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTQsIDEpOwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE1LCAxKTsKLQkJCWlmIChkYXRhLT5zbG90WzBdLmJ1c193aWR0aCA9PSA4KSB7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAxKTsKLQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTcsIDEpOwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBOCwgMSk7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAxKTsKLQkJCX0KLQkJfQotCi0JCW1tYzBfZGF0YSA9ICpkYXRhOwotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X21tYzBfZGV2aWNlKTsKLQotCX0gZWxzZSB7CQkJLyogTUNJMSAqLwotCi0JCS8qIENMSyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTMxLCAwKTsKLQotCQkvKiBDTUQgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMiwgMSk7Ci0KLQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyBhbmQgbWF5YmUgREFUNC4uREFUNyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAxKTsKLQkJaWYgKGRhdGEtPnNsb3RbMF0uYnVzX3dpZHRoID09IDQpIHsKLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjQsIDEpOwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNSwgMSk7Ci0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI2LCAxKTsKLQkJCWlmIChkYXRhLT5zbG90WzBdLmJ1c193aWR0aCA9PSA4KSB7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNywgMSk7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwgMSk7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOSwgMSk7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzMCwgMSk7Ci0JCQl9Ci0JCX0KLQotCQltbWMxX2RhdGEgPSAqZGF0YTsKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9tbWMxX2RldmljZSk7Ci0KLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTkFORCAvIFNtYXJ0TWVkaWEKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgbmFuZF9kYXRhOwotCi0jZGVmaW5lIE5BTkRfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBOQU5EX0JBU0UsCi0JCS5lbmQJPSBOQU5EX0JBU0UgKyBTWl8yNTZNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfRUNDLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9FQ0MgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9uYW5kX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbmFuZCIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG5hbmRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuYW5kX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgY3NhOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQljc2EgPSBhdDkxX21hdHJpeF9yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7Ci0JYXQ5MV9tYXRyaXhfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9FQklfQ1MzQV9TTUNfU01BUlRNRURJQSk7Ci0KLQkvKiBlbmFibGUgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZW5hYmxlX3BpbikpCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPmVuYWJsZV9waW4sIDEpOwotCi0JLyogcmVhZHkvYnVzeSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZHlfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5yZHlfcGluLCAxKTsKLQotCS8qIGNhcmQgZGV0ZWN0IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmRldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOwotCi0JbmFuZF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9uYW5kX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVFdJIChpMmMpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogUHJlZmVyIHRoZSBHUElPIGNvZGUgc2luY2UgdGhlIFRXSSBjb250cm9sbGVyIGlzbid0IHJvYnVzdAotICogKGdldHMgb3ZlcnJ1bnMgYW5kIHVuZGVycnVucyB1bmRlciBsb2FkKSBhbmQgY2FuIG9ubHkgaXNzdWUKLSAqIHJlcGVhdGVkIFNUQVJUcyBpbiBvbmUgc2NlbmFyaW8gKHRoZSBkcml2ZXIgZG9lc24ndCB5ZXQgaGFuZGxlIHRoZW0pLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YV9pMmMwID0gewotCS5zZGFfcGluCQk9IEFUOTFfUElOX1BBMjAsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKLQkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQTIxLAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnVkZWxheQkJCT0gNSwJCS8qIH4xMDAga0h6ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90d2kwX2RldmljZSA9IHsKLQkubmFtZQkJCT0gImkyYy1ncGlvIiwKLQkuaWQJCQk9IDAsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhX2kyYzAsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGFfaTJjMSA9IHsKLQkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQjEwLAotCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnNjbF9waW4JCT0gQVQ5MV9QSU5fUEIxMSwKLQkuc2NsX2lzX29wZW5fZHJhaW4JPSAxLAotCS51ZGVsYXkJCQk9IDUsCQkvKiB+MTAwIGtIeiAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdHdpMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCi0JLmlkCQkJPSAxLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZwZGF0YV9pMmMxLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzaG9ydCBpMmNfaWQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oaTJjX2lkLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQotCWlmIChpMmNfaWQgPT0gMCkgewotCQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAxKTsJCS8qIFRXRCAoU0RBKSAqLwotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTIwLCAxKTsKLQotCQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAxKTsJCS8qIFRXQ0sgKFNDTCkgKi8KLQkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMSwgMSk7Ci0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90d2kwX2RldmljZSk7Ci0JfSBlbHNlIHsKLQkJYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMSk7CQkvKiBUV0QgKFNEQSkgKi8KLQkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEIxMCwgMSk7Ci0KLQkJYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEIxMSwgMSk7CQkvKiBUV0NLIChTQ0wpICovCi0JCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCMTEsIDEpOwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfdHdpMV9kZXZpY2UpOwotCX0KLX0KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfSTJDX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19BVDkxX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHdpMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVFdJMCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVFdJMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RXSTAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RXSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90d2kwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaTJjLWF0OTFzYW05ZzEwIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0d2kwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kxLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVFdJMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVFdJMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3R3aTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJpMmMtYXQ5MXNhbTlnMTAiLAotCS5pZAkJPSAxLAotCS5yZXNvdXJjZQk9IHR3aTFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0d2kxX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyhpMmNfaWQsIGRldmljZXMsIG5yX2RldmljZXMpOwotCi0JLyogcGlucyB1c2VkIGZvciBUV0kgaW50ZXJmYWNlICovCi0JaWYgKGkyY19pZCA9PSAwKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjAsIDApOwkJLyogVFdEICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjEsIDApOwkJLyogVFdDSyAqLwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfdHdpMF9kZXZpY2UpOwotCX0gZWxzZSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTAsIDApOwkJLyogVFdEICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTEsIDApOwkJLyogVFdDSyAqLwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfdHdpMV9kZXZpY2UpOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1BJCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1NQSTAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1NQSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9zcGkwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfc3BpIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzcGkwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTBfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BCMywgQVQ5MV9QSU5fUEIxOCwgQVQ5MV9QSU5fUEIxOSwgQVQ5MV9QSU5fUEQyNyB9OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1NQSTEsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1NQSTEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9TUEkxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9TUEkxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfc3BpMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaTFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGkxX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQjE3LCBBVDkxX1BJTl9QRDI4LCBBVDkxX1BJTl9QRDE4LCBBVDkxX1BJTl9QRDE5IH07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGNzX3BpbjsKLQlzaG9ydCBlbmFibGVfc3BpMCA9IDA7Ci0Jc2hvcnQgZW5hYmxlX3NwaTEgPSAwOwotCi0JLyogQ2hvb3NlIFNQSSBjaGlwLXNlbGVjdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfZGV2aWNlczsgaSsrKSB7Ci0JCWlmIChkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSkKLQkJCWNzX3BpbiA9ICh1bnNpZ25lZCBsb25nKSBkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YTsKLQkJZWxzZSBpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCi0JCQljc19waW4gPSBzcGkwX3N0YW5kYXJkX2NzW2RldmljZXNbaV0uY2hpcF9zZWxlY3RdOwotCQllbHNlCi0JCQljc19waW4gPSBzcGkxX3N0YW5kYXJkX2NzW2RldmljZXNbaV0uY2hpcF9zZWxlY3RdOwotCi0JCWlmICghZ3Bpb19pc192YWxpZChjc19waW4pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQotCQkJZW5hYmxlX3NwaTAgPSAxOwotCQllbHNlCi0JCQllbmFibGVfc3BpMSA9IDE7Ci0KLQkJLyogZW5hYmxlIGNoaXAtc2VsZWN0IHBpbiAqLwotCQlhdDkxX3NldF9ncGlvX291dHB1dChjc19waW4sIDEpOwotCi0JCS8qIHBhc3MgY2hpcC1zZWxlY3QgcGluIHRvIGRyaXZlciAqLwotCQlkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSA9ICh2b2lkICopIGNzX3BpbjsKLQl9Ci0KLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQotCS8qIENvbmZpZ3VyZSBTUEkgYnVzKGVzKSAqLwotCWlmIChlbmFibGVfc3BpMCkgewotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDApOwkvKiBTUEkwX01JU08gKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxLCAwKTsJLyogU1BJMF9NT1NJICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMiwgMCk7CS8qIFNQSTBfU1BDSyAqLwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfc3BpMF9kZXZpY2UpOwotCX0KLQlpZiAoZW5hYmxlX3NwaTEpIHsKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNCwgMCk7CS8qIFNQSTFfTUlTTyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE1LCAwKTsJLyogU1BJMV9NT1NJICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTYsIDApOwkvKiBTUEkxX1NQQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3NwaTFfZGV2aWNlKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBBQzk3Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQotc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9BQzk3QywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9BQzk3QywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUM5N0MsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9hYzk3X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFjOTdfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGFjOTdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEOCwgMCk7CS8qIEFDOTdGUyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEOSwgMCk7CS8qIEFDOTdDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENywgMCk7CS8qIEFDOTdUWCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENiwgMCk7CS8qIEFDOTdSWCAqLwotCi0JLyogcmVzZXQgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZXNldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOwotCi0JYWM5N19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9hYzk3X2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbWFnZSBTZW5zb3IgSW50ZXJmYWNlCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0FUTUVMX0lTSSkgfHwgZGVmaW5lZChDT05GSUdfVklERU9fQVRNRUxfSVNJX01PRFVMRSkKLXN0YXRpYyB1NjQgaXNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSBpc2lfZGF0YTsKLQotc3RydWN0IHJlc291cmNlIGlzaV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfSVNJLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9JU0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9JU0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0lTSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2lzaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX2lzaSIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkuZG1hX21hc2sJCT0gJmlzaV9kbWFtYXNrLAotCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZpc2lfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGlzaV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlzaV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGlzaV9tY2tfbG9va3Vwc1tdID0gewotCUNMS0RFVl9DT05fREVWX0lEKCJpc2lfbWNrIiwgImF0bWVsX2lzaS4wIiwgTlVMTCksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaXNpKHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJYm9vbCB1c2VfcGNrX2FzX21jaykKLXsKLQlzdHJ1Y3QgY2xrICpwY2s7Ci0Jc3RydWN0IGNsayAqcGFyZW50OwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0JaXNpX2RhdGEgPSAqZGF0YTsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjAsIDApOwkvKiBJU0lfRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIxLCAwKTsJLyogSVNJX0QxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMiwgMCk7CS8qIElTSV9EMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjMsIDApOwkvKiBJU0lfRDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI0LCAwKTsJLyogSVNJX0Q0ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNSwgMCk7CS8qIElTSV9ENSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjYsIDApOwkvKiBJU0lfRDYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI3LCAwKTsJLyogSVNJX0Q3ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyOCwgMCk7CS8qIElTSV9QQ0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMwLCAwKTsJLyogSVNJX0hTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyOSwgMCk7CS8qIElTSV9WU1lOQyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCOCwgMCk7CS8qIElTSV9QRDggKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkvKiBJU0lfUEQ5ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMCk7CS8qIElTSV9QRDEwICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxMSwgMCk7CS8qIElTSV9QRDExICovCi0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X2lzaV9kZXZpY2UpOwotCi0JaWYgKHVzZV9wY2tfYXNfbWNrKSB7Ci0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMzEsIDApOwkvKiBJU0lfTUNLIChQQ0sxKSAqLwotCi0JCXBjayA9IGNsa19nZXQoTlVMTCwgInBjazEiKTsKLQkJcGFyZW50ID0gY2xrX2dldChOVUxMLCAicGxsYSIpOwotCi0JCUJVR19PTihJU19FUlIocGNrKSB8fCBJU19FUlIocGFyZW50KSk7Ci0KLQkJaWYgKGNsa19zZXRfcGFyZW50KHBjaywgcGFyZW50KSkgewotCQkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0IFBDSydzIHBhcmVudFxuIik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBSZWdpc3RlciBQQ0sgYXMgSVNJX01DSyAqLwotCQkJaXNpX21ja19sb29rdXBzWzBdLmNsayA9IHBjazsKLQkJCWNsa2Rldl9hZGRfdGFibGUoaXNpX21ja19sb29rdXBzLAotCQkJCQlBUlJBWV9TSVpFKGlzaV9tY2tfbG9va3VwcykpOwotCQl9Ci0KLQkJY2xrX3B1dChwY2spOwotCQljbGtfcHV0KHBhcmVudCk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pc2koc3RydWN0IGlzaV9wbGF0Zm9ybV9kYXRhICpkYXRhLAotCQlib29sIHVzZV9wY2tfYXNfbWNrKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBMQ0QgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19GQl9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgdTY0IGxjZGNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIGxjZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsY2RjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfTENEQ19CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfTENEQ19CQVNFICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9MQ0RDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9MQ0RDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9sY2RjX2RldmljZSA9IHsKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmxjZGNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZsY2RjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBsY2RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobGNkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOWc0NWVzKCkpCi0JCWF0OTFfbGNkY19kZXZpY2UubmFtZSA9ICJhdDkxc2FtOWc0NWVzLWxjZGZiIjsKLQllbHNlCi0JCWF0OTFfbGNkY19kZXZpY2UubmFtZSA9ICJhdDkxc2FtOWc0NS1sY2RmYiI7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTAsIDApOwkvKiBMQ0REUFdSICovCi0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIsIDApOwkvKiBMQ0RDQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMywgMCk7CS8qIExDRFZTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU0LCAwKTsJLyogTENESFNZTkMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTUsIDApOwkvKiBMQ0RET1RDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFNiwgMCk7CS8qIExDRERFTiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFNywgMCk7CS8qIExDREQwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU4LCAwKTsJLyogTENERDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTksIDApOwkvKiBMQ0REMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTAsIDApOwkvKiBMQ0REMyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTEsIDApOwkvKiBMQ0RENCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTIsIDApOwkvKiBMQ0RENSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTMsIDApOwkvKiBMQ0RENiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTQsIDApOwkvKiBMQ0RENyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTUsIDApOwkvKiBMQ0REOCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTYsIDApOwkvKiBMQ0REOSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTcsIDApOwkvKiBMQ0REMTAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTE4LCAwKTsJLyogTENERDExICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxOSwgMCk7CS8qIExDREQxMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjAsIDApOwkvKiBMQ0REMTMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIxLCAwKTsJLyogTENERDE0ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyMiwgMCk7CS8qIExDREQxNSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjMsIDApOwkvKiBMQ0REMTYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI0LCAwKTsJLyogTENERDE3ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNSwgMCk7CS8qIExDREQxOCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjYsIDApOwkvKiBMQ0REMTkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI3LCAwKTsJLyogTENERDIwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyOCwgMCk7CS8qIExDREQyMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjksIDApOwkvKiBMQ0REMjIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTMwLCAwKTsJLyogTENERDIzICovCi0KLQlsY2RjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFfbGNkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGltZXIvQ291bnRlciBibG9jawotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIENPTkZJR19BVE1FTF9UQ0xJQgotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2IwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UQ0IwLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9UQ0IwICsgU1pfMjU2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVENCLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9UQ0IsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90Y2IwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdGNiIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0Y2IwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiMF9yZXNvdXJjZXMpLAotfTsKLQotLyogVENCMSBiZWdpbnMgd2l0aCBUQzMgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMSArIFNaXzI1NiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RDQiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVENCLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdGNiMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDEsCi0JLnJlc291cmNlCT0gdGNiMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYjFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3RjYjBfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3RjYjFfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBSVEMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfUlRDLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9SVEMgKyBTWl8yNTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9ydGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3J0YyIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHJ0Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydGModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3J0Y19kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEFEQyBhbmQgdG91Y2hzY3JlZW4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19BVDkxX0FEQykKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSBhZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1RTQywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVFNDICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVFNDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9UU0MsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfYWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MXNhbTlnNDUtYWRjIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmYWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBhZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfdHJpZ2dlciBhdDkxX2FkY190cmlnZ2Vyc1tdID0gewotCVswXSA9IHsKLQkJLm5hbWUgPSAiZXh0ZXJuYWwtcmlzaW5nIiwKLQkJLnZhbHVlID0gMSwKLQkJLmlzX2V4dGVybmFsID0gdHJ1ZSwKLQl9LAotCVsxXSA9IHsKLQkJLm5hbWUgPSAiZXh0ZXJuYWwtZmFsbGluZyIsCi0JCS52YWx1ZSA9IDIsCi0JCS5pc19leHRlcm5hbCA9IHRydWUsCi0JfSwKLQlbMl0gPSB7Ci0JCS5uYW1lID0gImV4dGVybmFsLWFueSIsCi0JCS52YWx1ZSA9IDMsCi0JCS5pc19leHRlcm5hbCA9IHRydWUsCi0JfSwKLQlbM10gPSB7Ci0JCS5uYW1lID0gImNvbnRpbnVvdXMiLAotCQkudmFsdWUgPSA2LAotCQkuaXNfZXh0ZXJuYWwgPSBmYWxzZSwKLQl9LAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FkYyhzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmICh0ZXN0X2JpdCgwLCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEQyMCwgMCk7Ci0JaWYgKHRlc3RfYml0KDEsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QRDIxLCAwKTsKLQlpZiAodGVzdF9iaXQoMiwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjIsIDApOwotCWlmICh0ZXN0X2JpdCgzLCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEQyMywgMCk7Ci0JaWYgKHRlc3RfYml0KDQsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QRDI0LCAwKTsKLQlpZiAodGVzdF9iaXQoNSwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjUsIDApOwotCWlmICh0ZXN0X2JpdCg2LCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEQyNiwgMCk7Ci0JaWYgKHRlc3RfYml0KDcsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QRDI3LCAwKTsKLQotCWlmIChkYXRhLT51c2VfZXh0ZXJuYWxfdHJpZ2dlcnMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMjgsIDApOwotCi0JZGF0YS0+c3RhcnR1cF90aW1lID0gNDA7Ci0JZGF0YS0+dHJpZ2dlcl9udW1iZXIgPSA0OwotCWRhdGEtPnRyaWdnZXJfbGlzdCA9IGF0OTFfYWRjX3RyaWdnZXJzOwotCi0JYWRjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFfYWRjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FkYyhzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFJUVAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydHRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1JUVCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfUlRUICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3J0dF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfcnR0IiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSBydHRfcmVzb3VyY2VzLAotfTsKLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTkpCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGModm9pZCkKLXsKLQlhdDkxc2FtOWc0NV9ydHRfZGV2aWNlLm5hbWUgPSAicnRjLWF0OTFzYW05IjsKLQkvKgotCSAqIFRoZSBzZWNvbmQgcmVzb3VyY2UgaXMgbmVlZGVkOgotCSAqIEdQQlIgd2lsbCBzZXJ2ZSBhcyB0aGUgc3RvcmFnZSBmb3IgUlRDIHRpbWUgb2Zmc2V0Ci0JICovCi0JYXQ5MXNhbTlnNDVfcnR0X2RldmljZS5udW1fcmVzb3VyY2VzID0gMzsKLQlydHRfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gQVQ5MVNBTTlHNDVfQkFTRV9HUEJSICsKLQkJCQkgNCAqIENPTkZJR19SVENfRFJWX0FUOTFTQU05X0dQQlI7Ci0JcnR0X3Jlc291cmNlc1sxXS5lbmQgPSBydHRfcmVzb3VyY2VzWzFdLnN0YXJ0ICsgMzsKLQlydHRfcmVzb3VyY2VzWzJdLnN0YXJ0ID0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUzsKLQlydHRfcmVzb3VyY2VzWzJdLmVuZCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0JLyogT25seSBvbmUgcmVzb3VyY2UgaXMgbmVlZGVkOiBSVFQgbm90IHVzZWQgYXMgUlRDICovCi0JYXQ5MXNhbTlnNDVfcnR0X2RldmljZS5udW1fcmVzb3VyY2VzID0gMTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dCh2b2lkKQotewotCWF0OTFfYWRkX2RldmljZV9ydHRfcnRjKCk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9ydHRfZGV2aWNlKTsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRSTkcKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19IV19SQU5ET01fQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0hXX1JBTkRPTV9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRybmdfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1RSTkcsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1RSTkcgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdHJuZ19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsLXRybmciLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB0cm5nX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHJuZ19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90cm5nKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90cm5nX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90cm5nKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBXYXRjaGRvZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9XRFQsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1dEVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfd2R0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV93ZHQiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3dkdF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUFdNCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19QV01fQVRNRUwpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHB3bV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfUFdNQywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfUFdNQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1BXTUMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1BXTUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9wd20wX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxc2FtOXJsLXB3bSIsCi0JLmlkCT0gLTEsCi0JLnJlc291cmNlCT0gcHdtX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHdtX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcHdtKHUzMiBtYXNrKQotewotCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00wKSkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQyNCwgMSk7CS8qIGVuYWJsZSBQV00wICovCi0KLQlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMSkpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BEMzEsIDEpOwkvKiBlbmFibGUgUFdNMSAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTIpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDI2LCAxKTsJLyogZW5hYmxlIFBXTTIgKi8KLQotCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00zKSkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQwLCAxKTsJLyogZW5hYmxlIFBXTTMgKi8KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfcHdtMF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9wd20odTMyIG1hc2spIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNTQyAtLSBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQykgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDX01PRFVMRSkKLXN0YXRpYyB1NjQgc3NjMF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MwLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfU1NDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfU1NDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3NzYzBfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFzYW05ZzQ1X3NzYyIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkuZG1hX21hc2sJCT0gJnNzYzBfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNzYzBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzc2MwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3NzYzBfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDAsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDIsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JEKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDQsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDUsIDEpOwotfQotCi1zdGF0aWMgdTY0IHNzYzFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU1NDMSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfU1NDMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1NTQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1NTQzEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9zc2MxX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxc2FtOWc0NV9zc2MiLAotCS5pZAk9IDEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MxX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTIsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxMSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDE1LCAxKTsKLX0KLQotLyoKLSAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55Ci0gKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQotICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQotICogb24gdGhlIHNhbWUgc3lzdGVtIG1pZ2h0IGJlIHVzZWQgYnkgYSBjdXN0b20gZGF0YSBjYXB0dXJlIGRyaXZlci4KLSAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBOT1RFOiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gbWF0Y2hpbmcKLQkgKiAicGlucyIgdG8gd2hhdGV2ZXIgd2lsbCBiZSB1c2luZyBlYWNoIHBhcnRpY3VsYXIgY29udHJvbGxlci4KLQkgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBBVDkxU0FNOUc0NV9JRF9TU0MwOgotCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X3NzYzBfZGV2aWNlOwotCQljb25maWd1cmVfc3NjMF9waW5zKHBpbnMpOwotCQlicmVhazsKLQljYXNlIEFUOTFTQU05RzQ1X0lEX1NTQzE6Ci0JCXBkZXYgPSAmYXQ5MXNhbTlnNDVfc3NjMV9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MxX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVQVJUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYmd1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9EQkdVLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9EQkdVICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMCwKLQkudXNlX2RtYV9yeAk9IDAsCi19OwotCi1zdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2RiZ3VfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZkYmd1X2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZGJndV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gZGJndV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiZ3VfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfZGJndV9waW5zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMiwgMCk7CQkvKiBEUlhEICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMywgMSk7CQkvKiBEVFhEICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVVMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VUzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MF9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV91YXJ0MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQwX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE5LCAxKTsJCS8qIFRYRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE4LCAwKTsJCS8qIFJYRDAgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTcsIDApOwkvKiBSVFMwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMCk7CS8qIENUUzAgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMxLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VUzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VTMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQxX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3VhcnQxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAyLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDFfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNCwgMSk7CQkvKiBUWEQxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI1LCAwKTsJCS8qIFJYRDEgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTYsIDApOwkvKiBSVFMxICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNywgMCk7CS8qIENUUzEgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMyLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzIgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VUzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VTMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQyX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3VhcnQyX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAzLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDJfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0Ml9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0Ml9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDJfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNiwgMSk7CQkvKiBUWEQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI3LCAwKTsJCS8qIFJYRDIgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CS8qIFJUUzIgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogQ1RTMiAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzMsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VTMywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVVMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDNfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0M19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdWFydDNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDQsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0M19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQzX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0M19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0M19waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAxKTsJCS8qIFRYRDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkJLyogUlhEMyAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CS8qIFJUUzMgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsJLyogQ1RTMyAqLwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwotCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgKnBkYXRhOwotCi0Jc3dpdGNoIChpZCkgewotCQljYXNlIDA6CQkvKiBEQkdVICovCi0JCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X2RiZ3VfZGV2aWNlOwotCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMwOgotCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0MF9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOUc0NV9JRF9VUzE6Ci0JCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X3VhcnQxX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05RzQ1X0lEX1VTMjoKLQkJCXBkZXYgPSAmYXQ5MXNhbTlnNDVfdWFydDJfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMzOgotCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0M19kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQzX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQl9Ci0JcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlwZGF0YS0+bnVtID0gcG9ydG5yOwkJLyogdXBkYXRlIHRvIG1hcHBlZCBJRCAqLwotCi0JaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQotCQlhdDkxX3VhcnRzW3BvcnRucl0gPSBwZGV2OwotfQotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUFYX1VBUlQ7IGkrKykgewotCQlpZiAoYXQ5MV91YXJ0c1tpXSkKLQkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpIHt9Ci12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTSEExL1NIQTI1NgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0NSWVBUT19ERVZfQVRNRUxfU0hBKSB8fCBkZWZpbmVkKENPTkZJR19DUllQVE9fREVWX0FUTUVMX1NIQV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoYV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU0hBLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9TSEEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9BRVNUREVTU0hBLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9BRVNUREVTU0hBLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfc2hhX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdG1lbF9zaGEiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSBzaGFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaGFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2hhKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9zaGFfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NoYSh2b2lkKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgREVTL1RERVMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUllQVE9fREVWX0FUTUVMX1RERVMpIHx8IGRlZmluZWQoQ09ORklHX0NSWVBUT19ERVZfQVRNRUxfVERFU19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRkZXNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1RERVMsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1RERVMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9BRVNUREVTU0hBLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9BRVNUREVTU0hBLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdGRlc19kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXRtZWxfdGRlcyIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHRkZXNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0ZGVzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RkZXModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3RkZXNfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RkZXModm9pZCkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEFFUwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0NSWVBUT19ERVZfQVRNRUxfQUVTKSB8fCBkZWZpbmVkKENPTkZJR19DUllQVE9fREVWX0FUTUVMX0FFU19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGNyeXB0b19wbGF0Zm9ybV9kYXRhIGFlc19kYXRhOwotc3RhdGljIHN0cnVjdCBjcnlwdG9fZG1hX2RhdGEgYWx0X2F0c2xhdmU7Ci1zdGF0aWMgdTY0IGFlc19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhZXNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX0FFUywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfQUVTICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUVTVERFU1NIQSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUVTVERFU1NIQSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2Flc19kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXRtZWxfYWVzIiwKLQkuaWQJCT0gLTEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZhZXNfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFlc19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gYWVzX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYWVzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2Flcyh2b2lkKQotewotCXN0cnVjdCBhdF9kbWFfc2xhdmUJKmF0c2xhdmU7Ci0KLQkvKiBETUEgVFggc2xhdmUgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCi0JYXRzbGF2ZSA9ICZhbHRfYXRzbGF2ZS50eGRhdGE7Ci0JYXRzbGF2ZS0+ZG1hX2RldiA9ICZhdF9oZG1hY19kZXZpY2UuZGV2OwotCWF0c2xhdmUtPmNmZyA9IEFUQ19GSUZPQ0ZHX0VOT1VHSFNQQUNFCXwgQVRDX1NSQ19IMlNFTF9IVyB8Ci0JCQkJCQlBVENfU1JDX1BFUihBVF9ETUFfSURfQUVTX1JYKTsKLQotCS8qIERNQSBSWCBzbGF2ZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KLQlhdHNsYXZlID0gJmFsdF9hdHNsYXZlLnJ4ZGF0YTsKLQlhdHNsYXZlLT5kbWFfZGV2ID0gJmF0X2hkbWFjX2RldmljZS5kZXY7Ci0JYXRzbGF2ZS0+Y2ZnID0gQVRDX0ZJRk9DRkdfRU5PVUdIU1BBQ0UJfCBBVENfRFNUX0gyU0VMX0hXIHwKLQkJCQkJCUFUQ19EU1RfUEVSKEFUX0RNQV9JRF9BRVNfVFgpOwotCi0JYWVzX2RhdGEuZG1hX3NsYXZlID0gJmFsdF9hdHNsYXZlOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfYWVzX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZXModm9pZCkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYwotICogc2V0dXAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlpZiAob2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfaGRtYWMoKTsKLQlhdDkxX2FkZF9kZXZpY2VfcnRjKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwotCWF0OTFfYWRkX2RldmljZV90cm5nKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3RjKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NoYSgpOwotCWF0OTFfYWRkX2RldmljZV90ZGVzKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX2FlcygpOwotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05bjEyLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTluMTIuYwppbmRleCBjODk4OGZlLi5kZWU1NjliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTluMTIuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTluMTIuYwpAQCAtNiwyMTkgKzYsMTEgQEAKICAqIExpY2Vuc2VkIHVuZGVyIEdQTHYyIG9yIGxhdGVyLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay9hdDkxX3BtYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOW4xMi5oPgotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0KLSNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfT0xEX0NMS19BVDkxKQotI2luY2x1ZGUgImNsb2NrLmgiCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENsb2NrcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBwZXJpcGhlcmFsIGNsb2Nrcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGlvQUJfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BQl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfUElPQUIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DRF9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0NEX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9QSU9DRCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVVNBUlQwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9VU0FSVDEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1VTQVJUMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0M19jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0M19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVVNBUlQzLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHdpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1RXSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVFdJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfTUNJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1NQSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkxX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfU1BJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQwX2NsayA9IHsKLQkubmFtZQkJPSAidWFydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1VBUlQwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfY2xrID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVUFSVDEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0Y2JfY2xrID0gewotCS5uYW1lCQk9ICJ0Y2JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1RDQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGsgPSB7Ci0JLm5hbWUJCT0gInB3bV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfUFdNLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgYWRjX2NsayA9IHsKLQkubmFtZQkJPSAiYWRjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9BREMsCi0JLnR5cGUJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jbGsgPSB7Ci0JLm5hbWUJCT0gImRtYV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfRE1BLAotCS50eXBlCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1aHBfY2xrID0gewotCS5uYW1lCQk9ICJ1aHAiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVUhQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWRwX2NsayA9IHsKLQkubmFtZQkJPSAidWRwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9VRFAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkubmFtZQkJPSAibGNkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfTENEQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzY19jbGsgPSB7Ci0JLm5hbWUJCT0gInNzY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfU1NDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FCX2NsaywKLQkmcGlvQ0RfY2xrLAotCSZ1c2FydDBfY2xrLAotCSZ1c2FydDFfY2xrLAotCSZ1c2FydDJfY2xrLAotCSZ1c2FydDNfY2xrLAotCSZ0d2kwX2NsaywKLQkmdHdpMV9jbGssCi0JJm1tY19jbGssCi0JJnNwaTBfY2xrLAotCSZzcGkxX2NsaywKLQkmbGNkY19jbGssCi0JJnVhcnQwX2NsaywKLQkmdWFydDFfY2xrLAotCSZ0Y2JfY2xrLAotCSZwd21fY2xrLAotCSZhZGNfY2xrLAotCSZkbWFfY2xrLAotCSZ1aHBfY2xrLAotCSZ1ZHBfY2xrLAotCSZzc2NfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHBlcmlwaF9jbG9ja3NfbG9va3Vwc1tdID0gewotCS8qIGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZjIwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwMWMwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmODAyMDAwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImY4MDI0MDAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwMjgwMDAuc2VyaWFsIiwgJnVzYXJ0M19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZjgwMDgwMDAudGltZXIiLCAmdGNiX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmODAwYzAwMC50aW1lciIsICZ0Y2JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmMDAwODAwMC5tbWMiLCAmbW1jX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImYwMDEwMDAwLnNzYyIsICZzc2NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiZG1hX2NsayIsICJmZmZmZWMwMC5kbWEtY29udHJvbGxlciIsICZkbWFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZjgwMTAwMDAuaTJjIiwgJnR3aTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZjgwMTQwMDAuaTJjIiwgJnR3aTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmMDAwMDAwMC5zcGkiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImYwMDA0MDAwLnNwaSIsICZzcGkxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQUJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY2MDAuZ3BpbyIsICZwaW9BQl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjgwMC5ncGlvIiwgJnBpb0NEX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmYTAwLmdwaW8iLCAmcGlvQ0RfY2xrKSwKLQkvKiBhZGRpdGlvbmFsIGZha2UgY2xvY2sgZm9yIG1hY2JfaGNsayAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjUwMDAwMC5vaGNpIiwgJnVocF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJvaGNpX2NsayIsICI1MDAwMDAub2hjaSIsICZ1aHBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZjgwMzQwMDAucHdtIiwgJnB3bV9jbGspLAotfTsKLQotLyoKLSAqIFRoZSB0d28gcHJvZ3JhbW1hYmxlIGNsb2Nrcy4KLSAqIFlvdSBtdXN0IGNvbmZpZ3VyZSBwaW4gbXVsdGlwbGV4aW5nIHRvIGJyaW5nIHRoZXNlIHNpZ25hbHMgb3V0LgotICovCi1zdGF0aWMgc3RydWN0IGNsayBwY2swID0gewotCS5uYW1lCQk9ICJwY2swIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0swLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwY2sxID0gewotCS5uYW1lCQk9ICJwY2sxIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0sxLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOW4xMl9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3MpOyBpKyspCi0JCWNsa19yZWdpc3RlcihwZXJpcGhfY2xvY2tzW2ldKTsKLQljbGtfcmVnaXN0ZXIoJnBjazApOwotCWNsa19yZWdpc3RlcigmcGNrMSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCi19Ci0jZWxzZQotI2RlZmluZSBhdDkxc2FtOW4xMl9yZWdpc3Rlcl9jbG9ja3MgTlVMTAotI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTlOMTIgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCkBAIC0yMzYsNiArMjgsNSBAQAogCiBBVDkxX1NPQ19TVEFSVChhdDkxc2FtOW4xMikKIAkubWFwX2lvID0gYXQ5MXNhbTluMTJfbWFwX2lvLAotCS5yZWdpc3Rlcl9jbG9ja3MgPSBhdDkxc2FtOW4xMl9yZWdpc3Rlcl9jbG9ja3MsCiAJLmluaXQgPSBhdDkxc2FtOW4xMl9pbml0aWFsaXplLAogQVQ5MV9TT0NfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmwuYwppbmRleCBmNTUzZTRlLi5mMjViOWFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsLmMKQEAgLTksMjg0ICs5LDE0IEBACiAgKiBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay9hdDkxX3BtYy5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfZGJndS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlybC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAicG0uaCIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfT0xEX0NMS19BVDkxKQotI2luY2x1ZGUgImNsb2NrLmgiCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1BJT0EsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9CX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9QSU9CLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0NfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfUElPQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0RfY2xrID0gewotCS5uYW1lCQk9ICJwaW9EX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1BJT0QsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1VTMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0Ml9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0Ml9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9VUzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDNfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVVMzLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbW1jX2NsayA9IHsKLQkubmFtZQkJPSAibWNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX01DSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aTBfY2xrID0gewotCS5uYW1lCQk9ICJ0d2kwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1RXSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9UV0kxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpX2NsayA9IHsKLQkubmFtZQkJPSAic3BpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1NQSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0gewotCS5uYW1lCQk9ICJzc2MwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1NTQzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MxX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9TU0MxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMwX2NsayA9IHsKLQkubmFtZQkJPSAidGMwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1RDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9UQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0gewotCS5uYW1lCQk9ICJ0YzJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVEMyLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcHdtX2NsayA9IHsKLQkubmFtZQkJPSAicHdtX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1BXTUMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0c2NfY2xrID0gewotCS5uYW1lCQk9ICJ0c2NfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVFNDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NsayA9IHsKLQkubmFtZQkJPSAiZG1hX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX0RNQSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVkcGhzX2NsayA9IHsKLQkubmFtZQkJPSAidWRwaHNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVURQSFMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkubmFtZQkJPSAibGNkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9MQ0RDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgYWM5N19jbGsgPSB7Ci0JLm5hbWUJCT0gImFjOTdfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfQUM5N0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBhZGNfb3BfY2xrID0gewotCS5uYW1lCQk9ICJhZGNfb3BfY2xrIiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotCS5yYXRlX2h6CT0gMTAwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmcGlvQV9jbGssCi0JJnBpb0JfY2xrLAotCSZwaW9DX2NsaywKLQkmcGlvRF9jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJnVzYXJ0M19jbGssCi0JJm1tY19jbGssCi0JJnR3aTBfY2xrLAotCSZ0d2kxX2NsaywKLQkmc3BpX2NsaywKLQkmc3NjMF9jbGssCi0JJnNzYzFfY2xrLAotCSZ0YzBfY2xrLAotCSZ0YzFfY2xrLAotCSZ0YzJfY2xrLAotCSZwd21fY2xrLAotCSZ0c2NfY2xrLAotCSZkbWFfY2xrLAotCSZ1ZHBoc19jbGssCi0JJmxjZGNfY2xrLAotCSZhYzk3X2NsaywKLQkmYWRjX29wX2NsaywKLQkvLyBpcnEwCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcGVyaXBoX2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MXNhbTlybC1sY2RmYi4wIiwgJmxjZGNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdG1lbF91c2JhX3VkYyIsICZ1dG1pX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXRtZWxfdXNiYV91ZGMiLCAmdWRwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxcm05MjAwX3NzYy4wIiwgJnNzYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxcm05MjAwX3NzYy4xIiwgJnNzYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmZjMDAwMC5zc2MiLCAmc3NjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmM0MDAwLnNzYyIsICZzc2MxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOWcyMC4wIiwgJnR3aTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiaTJjLWF0OTFzYW05ZzIwLjEiLCAmdHdpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJhdDkxc2FtOXJsLXB3bSIsICZwd21fY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9BIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9CIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9DIiwgJnBpb0NfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9EIiwgJnBpb0RfY2xrKSwKLQkvKiBtb3JlIGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZjIwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmYjAwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmYjQwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmZiODAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZmJjMDAuc2VyaWFsIiwgJnVzYXJ0M19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQxX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDJfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImZmZmE0MDAwLm1tYyIsICZtbWNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYTgwMDAuaTJjIiwgJnR3aTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYWMwMDAuaTJjIiwgJnR3aTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYzgwMDAucHdtIiwgJnB3bV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmYzgwMC5wd20iLCAmcHdtX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9DX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmYTAwLmdwaW8iLCAmcGlvRF9jbGspLAotCUNMS0RFVl9DT05fSUQoImFkY19jbGsiLCAmdHNjX2NsayksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgdXNhcnRfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4xIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4yIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4zIiwgJnVzYXJ0Ml9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC40IiwgJnVzYXJ0M19jbGspLAotfTsKLQotLyoKLSAqIFRoZSB0d28gcHJvZ3JhbW1hYmxlIGNsb2Nrcy4KLSAqIFlvdSBtdXN0IGNvbmZpZ3VyZSBwaW4gbXVsdGlwbGV4aW5nIHRvIGJyaW5nIHRoZXNlIHNpZ25hbHMgb3V0LgotICovCi1zdGF0aWMgc3RydWN0IGNsayBwY2swID0gewotCS5uYW1lCQk9ICJwY2swIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0swLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwY2sxID0gewotCS5uYW1lCQk9ICJwY2sxIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0sxLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOXJsX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrcyk7IGkrKykKLQkJY2xrX3JlZ2lzdGVyKHBlcmlwaF9jbG9ja3NbaV0pOwotCi0JY2xrZGV2X2FkZF90YWJsZShwZXJpcGhfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzX2xvb2t1cHMpKTsKLQljbGtkZXZfYWRkX3RhYmxlKHVzYXJ0X2Nsb2Nrc19sb29rdXBzLAotCQkJIEFSUkFZX1NJWkUodXNhcnRfY2xvY2tzX2xvb2t1cHMpKTsKLQotCWNsa19yZWdpc3RlcigmcGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZwY2sxKTsKLX0KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEdQSU8KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXNhbTlybF9ncGlvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5pZAkJPSBBVDkxU0FNOVJMX0lEX1BJT0EsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlSTF9CQVNFX1BJT0EsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTlSTF9JRF9QSU9CLAotCQkucmVnYmFzZQk9IEFUOTFTQU05UkxfQkFTRV9QSU9CLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05UkxfSURfUElPQywKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOVJMX0JBU0VfUElPQywKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOVJMX0lEX1BJT0QsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlSTF9CQVNFX1BJT0QsCi0JfQotfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBBVDkxU0FNOVJMIHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgpAQCAtMzA5LDEyMSArMzksMTUgQEAKIAlhdDkxX2luaXRfc3JhbSgwLCBBVDkxU0FNOVJMX1NSQU1fQkFTRSwgc3JhbV9zaXplKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05cmxfaW9yZW1hcF9yZWdpc3RlcnModm9pZCkKLXsKLQlhdDkxX2lvcmVtYXBfcmFtYygwLCBBVDkxU0FNOVJMX0JBU0VfU0RSQU1DLCA1MTIpOwotCWF0OTFzYW05MjZ4X2lvcmVtYXBfcGl0KEFUOTFTQU05UkxfQkFTRV9QSVQpOwotCWF0OTFzYW05X2lvcmVtYXBfc21jKDAsIEFUOTFTQU05UkxfQkFTRV9TTUMpOwotCWF0OTFfaW9yZW1hcF9tYXRyaXgoQVQ5MVNBTTlSTF9CQVNFX01BVFJJWCk7Ci0JYXQ5MV9wbV9zZXRfc3RhbmRieShhdDkxc2FtOV9zZHJhbV9zdGFuZGJ5KTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05cmxfaW5pdGlhbGl6ZSh2b2lkKQogewogCWFybV9wbV9pZGxlID0gYXQ5MXNhbTlfaWRsZTsKIAogCWF0OTFfc3lzaXJxX21hc2tfcnRjKEFUOTFTQU05UkxfQkFTRV9SVEMpOwogCWF0OTFfc3lzaXJxX21hc2tfcnR0KEFUOTFTQU05UkxfQkFTRV9SVFQpOwotCi0JLyogUmVnaXN0ZXIgR1BJTyBzdWJzeXN0ZW0gKi8KLQlhdDkxX2dwaW9faW5pdChhdDkxc2FtOXJsX2dwaW8sIDQpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJzdGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTlSTF9CQVNFX1JTVEMsCi0JCS5lbmQgICAgPSBBVDkxU0FNOVJMX0JBU0VfUlNUQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTlSTF9CQVNFX1NEUkFNQywKLQkJLmVuZCAgICA9IEFUOTFTQU05UkxfQkFTRV9TRFJBTUMgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJzdGNfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXNhbTkyNjAtcmVzZXQiLAotCS5yZXNvdXJjZSAgICAgICA9IHJzdGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUocnN0Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGR3Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOVJMX0JBU0VfU0hEV0MsCi0JCS5lbmQgICAgPSBBVDkxU0FNOVJMX0JBU0VfU0hEV0MgKyBTWl8xNiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hkd2NfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXBvd2Vyb2ZmIiwKLQkucmVzb3VyY2UgICAgICAgPSBzaGR3Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzaGR3Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05cmxfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnN0Y19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2hkd2NfZGV2aWNlKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MXNhbTlybF9kZWZhdWx0X2lycV9wcmlvcml0eVtOUl9BSUNfSVJRU10gX19pbml0ZGF0YSA9IHsKLQk3LAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotCTcsCS8qIFN5c3RlbSBQZXJpcGhlcmFscyAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgRCAqLwotCTUsCS8qIFVTQVJUIDAgKi8KLQk1LAkvKiBVU0FSVCAxICovCi0JNSwJLyogVVNBUlQgMiAqLwotCTUsCS8qIFVTQVJUIDMgKi8KLQkwLAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDAgKi8KLQk2LAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLwotCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDAgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCi0JMCwJLyogVGltZXIgQ291bnRlciAwICovCi0JMCwJLyogVGltZXIgQ291bnRlciAxICovCi0JMCwJLyogVGltZXIgQ291bnRlciAyICovCi0JMCwKLQkwLAkvKiBUb3VjaCBTY3JlZW4gQ29udHJvbGxlciAqLwotCTAsCS8qIERNQSBDb250cm9sbGVyICovCi0JMiwJLyogVVNCIERldmljZSBIaWdoIHNwZWVkIHBvcnQgKi8KLQkyLAkvKiBMQ0QgQ29udHJvbGxlciAqLwotCTYsCS8qIEFDOTcgQ29udHJvbGxlciAqLwotCTAsCi0JMCwKLQkwLAotCTAsCi0JMCwKLQkwLAotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlybF9pbml0X3RpbWUodm9pZCkKLXsKLQlhdDkxc2FtOTI2eF9waXRfaW5pdChOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTKTsKIH0KIAogQVQ5MV9TT0NfU1RBUlQoYXQ5MXNhbTlybCkKIAkubWFwX2lvID0gYXQ5MXNhbTlybF9tYXBfaW8sCi0JLmRlZmF1bHRfaXJxX3ByaW9yaXR5ID0gYXQ5MXNhbTlybF9kZWZhdWx0X2lycV9wcmlvcml0eSwKLQkuZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05UkxfSURfSVJRMCksCi0JLmlvcmVtYXBfcmVnaXN0ZXJzID0gYXQ5MXNhbTlybF9pb3JlbWFwX3JlZ2lzdGVycywKLSNpZiBkZWZpbmVkKENPTkZJR19PTERfQ0xLX0FUOTEpCi0JLnJlZ2lzdGVyX2Nsb2NrcyA9IGF0OTFzYW05cmxfcmVnaXN0ZXJfY2xvY2tzLAotI2VuZGlmCi0JLnJlZ2lzdGVyX2RldmljZXMgPSBhdDkxc2FtOXJsX3JlZ2lzdGVyX2RldmljZXMsCiAJLmluaXQgPSBhdDkxc2FtOXJsX2luaXRpYWxpemUsCi0JLmluaXRfdGltZSA9IGF0OTFzYW05cmxfaW5pdF90aW1lLAogQVQ5MV9TT0NfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZDFjOWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI2MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXJsLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXJsX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1hdG1lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXQ5MV9hZGMuaD4KLQotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEhETUFDIC0gQUhCIERNQSBDb250cm9sbGVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRfSERNQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUX0hETUFDX01PRFVMRSkKLXN0YXRpYyB1NjQgaGRtYWNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGRtYWNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfRE1BLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX0RNQSArIFNaXzUxMiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfRE1BLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX0RNQSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0X2hkbWFjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MXNhbTlybF9kbWEiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmhkbWFjX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IGhkbWFjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGRtYWNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9oZG1hYyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXRfaGRtYWNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBIUyBEZXZpY2UgKEdhZGdldCkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfQVRNRUxfVVNCQSkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0FUTUVMX1VTQkFfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYmFfdWRjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9VRFBIU19GSUZPLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9VRFBIU19GSUZPICsgU1pfNTEySyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVURQSFMsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVURQSFMgKyBTWl8xSyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVURQSFMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVURQSFMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi0jZGVmaW5lIEVQKG5hbSwgaWR4LCBtYXhwa3QsIG1heGJrLCBkbWEsIGlzb2MpCQkJXAotCVtpZHhdID0gewkJCQkJCVwKLQkJLm5hbWUJCT0gbmFtLAkJCQlcCi0JCS5pbmRleAkJPSBpZHgsCQkJCVwKLQkJLmZpZm9fc2l6ZQk9IG1heHBrdCwJCQlcCi0JCS5ucl9iYW5rcwk9IG1heGJrLAkJCVwKLQkJLmNhbl9kbWEJPSBkbWEsCQkJCVwKLQkJLmNhbl9pc29jCT0gaXNvYywJCQkJXAotCX0KLQotc3RhdGljIHN0cnVjdCB1c2JhX2VwX2RhdGEgdXNiYV91ZGNfZXBbXSBfX2luaXRkYXRhID0gewotCUVQKCJlcDAiLCAwLCA2NCwgMSwgMCwgMCksCi0JRVAoImVwMSIsIDEsIDEwMjQsIDIsIDEsIDEpLAotCUVQKCJlcDIiLCAyLCAxMDI0LCAyLCAxLCAxKSwKLQlFUCgiZXAzIiwgMywgMTAyNCwgMywgMSwgMCksCi0JRVAoImVwNCIsIDQsIDEwMjQsIDMsIDEsIDApLAotCUVQKCJlcDUiLCA1LCAxMDI0LCAzLCAxLCAxKSwKLQlFUCgiZXA2IiwgNiwgMTAyNCwgMywgMSwgMSksCi19OwotCi0jdW5kZWYgRVAKLQotLyoKLSAqIHBkYXRhIGRvZXNuJ3QgaGF2ZSByb29tIGZvciBhbnkgZW5kcG9pbnRzLCBzbyB3ZSBuZWVkIHRvCi0gKiBhcHBlbmQgcm9vbSBmb3IgdGhlIG9uZXMgd2UgbmVlZCByaWdodCBhZnRlciBpdC4KLSAqLwotc3RhdGljIHN0cnVjdCB7Ci0Jc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSBwZGF0YTsKLQlzdHJ1Y3QgdXNiYV9lcF9kYXRhIGVwWzddOwotfSB1c2JhX3VkY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3VzYmFfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNiYV91ZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZ1c2JhX3VkY19kYXRhLnBkYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdXNiYV91ZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JhX3VkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmEoc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQkvKgotCSAqIEludmFsaWQgcGlucyBhcmUgMCBvbiBBVDkxLCBidXQgdGhlIHVzYmEgZHJpdmVyIGlzIHNoYXJlZAotCSAqIHdpdGggQVZSMzIsIHdoaWNoIHVzZSBuZWdhdGl2ZSB2YWx1ZXMgaW5zdGVhZC4gT25jZS9pZgotCSAqIGdwaW9faXNfdmFsaWQoKSBpcyBwb3J0ZWQgdG8gQVQ5MSwgcmV2aXNpdCB0aGlzIGNvZGUuCi0JICovCi0JdXNiYV91ZGNfZGF0YS5wZGF0YS52YnVzX3BpbiA9IC1FSU5WQUw7Ci0JdXNiYV91ZGNfZGF0YS5wZGF0YS5udW1fZXAgPSBBUlJBWV9TSVpFKHVzYmFfdWRjX2VwKTsKLQltZW1jcHkodXNiYV91ZGNfZGF0YS5lcCwgdXNiYV91ZGNfZXAsIHNpemVvZih1c2JhX3VkY19lcCkpOwotCi0JaWYgKGRhdGEgJiYgZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKLQkJdXNiYV91ZGNfZGF0YS5wZGF0YS52YnVzX3BpbiA9IGRhdGEtPnZidXNfcGluOwotCX0KLQotCS8qIFB1bGx1cCBwaW4gaXMgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IFVTQiBkZXZpY2UgcGVyaXBoZXJhbCAqLwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmFfdWRjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmEoc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTU1DIC8gU0QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19NTUNfQVRNRUxNQ0kpCi1zdGF0aWMgdTY0IG1tY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgbW1jX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX01DSSwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9NQ0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX01DSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9NQ0ksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX21tY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX21jaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBtbWNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZGF0YS0+c2xvdFswXS5idXNfd2lkdGgpIHsKLQkJLyogaW5wdXQvaXJxICovCi0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbMF0uZGV0ZWN0X3BpbikpIHsKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFswXS5kZXRlY3RfcGluLCAxKTsKLQkJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnNsb3RbMF0uZGV0ZWN0X3BpbiwgMSk7Ci0JCX0KLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+c2xvdFswXS53cF9waW4pKQotCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90WzBdLndwX3BpbiwgMSk7Ci0KLQkJLyogQ0xLICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMiwgMCk7Ci0KLQkJLyogQ01EICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMSwgMSk7Ci0KLQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTAsIDEpOwotCQlpZiAoZGF0YS0+c2xvdFswXS5idXNfd2lkdGggPT0gNCkgewotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzLCAxKTsKLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNCwgMSk7Ci0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTUsIDEpOwotCQl9Ci0KLQkJbW1jX2RhdGEgPSAqZGF0YTsKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX21tY19kZXZpY2UpOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBOQU5EIC8gU21hcnRNZWRpYQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7Ci0KLSNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IE5BTkRfQkFTRSwKLQkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX0VDQywKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9FQ0MgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdG1lbF9uYW5kX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbmFuZCIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG5hbmRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuYW5kX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgY3NhOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQljc2EgPSBhdDkxX21hdHJpeF9yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7Ci0JYXQ5MV9tYXRyaXhfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBKTsKLQotCS8qIGVuYWJsZSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5lbmFibGVfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7Ci0KLQkvKiByZWFkeS9idXN5IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnJkeV9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOwotCi0JLyogY2FyZCBkZXRlY3QgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZGV0X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDApOwkJLyogTkFORE9FICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI1LCAwKTsJCS8qIE5BTkRXRSAqLwotCi0JbmFuZF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdG1lbF9uYW5kX2RldmljZSk7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUV0kgKGkyYykKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBQcmVmZXIgdGhlIEdQSU8gY29kZSBzaW5jZSB0aGUgVFdJIGNvbnRyb2xsZXIgaXNuJ3Qgcm9idXN0Ci0gKiAoZ2V0cyBvdmVycnVucyBhbmQgdW5kZXJydW5zIHVuZGVyIGxvYWQpIGFuZCBjYW4gb25seSBpc3N1ZQotICogcmVwZWF0ZWQgU1RBUlRzIGluIG9uZSBzY2VuYXJpbyAodGhlIGRyaXZlciBkb2Vzbid0IHlldCBoYW5kbGUgdGhlbSkuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGEgPSB7Ci0JLnNkYV9waW4JCT0gQVQ5MV9QSU5fUEEyMywKLQkuc2RhX2lzX29wZW5fZHJhaW4JPSAxLAotCS5zY2xfcGluCQk9IEFUOTFfUElOX1BBMjQsCi0JLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKLQkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfdHdpX2RldmljZSA9IHsKLQkubmFtZQkJCT0gImkyYy1ncGlvIiwKLQkuaWQJCQk9IDAsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBMjMsIDEpOwkJLyogVFdEIChTREEpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMywgMSk7Ci0KLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAxKTsJCS8qIFRXQ0sgKFNDTCkgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI0LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF90d2lfZGV2aWNlKTsKLX0KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfSTJDX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19BVDkxX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2lfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVFdJMCwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9UV0kwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9UV0kwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RXSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3R3aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImkyYy1hdDkxc2FtOWcyMCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdHdpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JLyogcGlucyB1c2VkIGZvciBUV0kgaW50ZXJmYWNlICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CQkvKiBUV0QgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTIzLCAxKTsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjQsIDApOwkJLyogVFdDSyAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjQsIDEpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX3R3aV9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1BJCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1NQSSwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9TUEkgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1NQSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9TUEksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3NwaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQTI4LCBBVDkxX1BJTl9QQjcsIEFUOTFfUElOX1BEOCwgQVQ5MV9QSU5fUEQ5IH07Ci0KLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgY3NfcGluOwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNSwgMCk7CS8qIE1JU08gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI2LCAwKTsJLyogTU9TSSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjcsIDApOwkvKiBTUENLICovCi0KLQkvKiBFbmFibGUgU1BJIGNoaXAtc2VsZWN0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9kZXZpY2VzOyBpKyspIHsKLQkJaWYgKGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhKQotCQkJY3NfcGluID0gKHVuc2lnbmVkIGxvbmcpIGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhOwotCQllbHNlCi0JCQljc19waW4gPSBzcGlfc3RhbmRhcmRfY3NbZGV2aWNlc1tpXS5jaGlwX3NlbGVjdF07Ci0KLQkJaWYgKCFncGlvX2lzX3ZhbGlkKGNzX3BpbikpCi0JCQljb250aW51ZTsKLQotCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7Ci0KLQkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCi0JCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOwotCX0KLQotCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF9zcGlfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEFDOTcKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3Q19NT0RVTEUpCi1zdGF0aWMgdTY0IGFjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgYWM5N19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGFjOTdfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfQUM5N0MsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX0FDOTdDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX0FDOTdDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9hYzk3X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFjOTdfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGFjOTdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMSwgMCk7CS8qIEFDOTdGUyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMiwgMCk7CS8qIEFDOTdDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMywgMCk7CS8qIEFDOTdUWCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENCwgMCk7CS8qIEFDOTdSWCAqLwotCi0JLyogcmVzZXQgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZXNldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOwotCi0JYWM5N19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX2FjOTdfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTENEIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBsY2RjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSBsY2RjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfTENEQ19CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9MQ0RDX0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfTENEQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9MQ0RDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9sY2RjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MXNhbTlybC1sY2RmYiIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZsY2RjX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbGNkY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbGNkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxjZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpIHsKLQkJcmV0dXJuOwotCX0KLQotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMSwgMCk7CS8qIExDRFBXUiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNSwgMCk7CS8qIExDREhTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM2LCAwKTsJLyogTENERE9UQ0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzcsIDApOwkvKiBMQ0RERU4gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMsIDApOwkvKiBMQ0RDQyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CS8qIExDREQzICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMCwgMCk7CS8qIExDREQ0ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMSwgMCk7CS8qIExDREQ1ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMiwgMCk7CS8qIExDREQ2ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMywgMCk7CS8qIExDREQ3ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxNSwgMCk7CS8qIExDREQxMSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTYsIDApOwkvKiBMQ0REMTIgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzE3LCAwKTsJLyogTENERDEzICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxOCwgMCk7CS8qIExDREQxNCAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTksIDApOwkvKiBMQ0REMTUgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIwLCAwKTsJLyogTENERDE4ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyMSwgMCk7CS8qIExDREQxOSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjIsIDApOwkvKiBMQ0REMjAgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIzLCAwKTsJLyogTENERDIxICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNCwgMCk7CS8qIExDREQyMiAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjUsIDApOwkvKiBMQ0REMjMgKi8KLQotCWxjZGNfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9sY2RjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUaW1lci9Db3VudGVyIGJsb2NrCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1RDQjAsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVEMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9UQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVEMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RDMiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9UQzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3RjYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdGNiX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX3RjYl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkgeyB9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEFEQyBhbmQgVG91Y2hzY3JlZW4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19BVDkxX0FEQykKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSBhZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVFNDLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1RTQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVFNDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RTQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9hZGNfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxc2FtOXJsLWFkYyIsCi0JLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiAgICAgICAgICAgID0gewotCQkucGxhdGZvcm1fZGF0YSAgPSAmYWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UgICAgICAgPSBhZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoYWRjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfYWRjX3RyaWdnZXIgYXQ5MV9hZGNfdHJpZ2dlcnNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lID0gImV4dGVybmFsLXJpc2luZyIsCi0JCS52YWx1ZSA9IDEsCi0JCS5pc19leHRlcm5hbCA9IHRydWUsCi0JfSwKLQlbMV0gPSB7Ci0JCS5uYW1lID0gImV4dGVybmFsLWZhbGxpbmciLAotCQkudmFsdWUgPSAyLAotCQkuaXNfZXh0ZXJuYWwgPSB0cnVlLAotCX0sCi0JWzJdID0gewotCQkubmFtZSA9ICJleHRlcm5hbC1hbnkiLAotCQkudmFsdWUgPSAzLAotCQkuaXNfZXh0ZXJuYWwgPSB0cnVlLAotCX0sCi0JWzNdID0gewotCQkubmFtZSA9ICJjb250aW51b3VzIiwKLQkJLnZhbHVlID0gNiwKLQkJLmlzX2V4dGVybmFsID0gZmFsc2UsCi0JfSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZGMoc3RydWN0IGF0OTFfYWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAodGVzdF9iaXQoMCwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAwKTsKLQlpZiAodGVzdF9iaXQoMSwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsKLQlpZiAodGVzdF9iaXQoMiwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAwKTsKLQlpZiAodGVzdF9iaXQoMywgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAwKTsKLQlpZiAodGVzdF9iaXQoNCwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDYsIDApOwotCWlmICh0ZXN0X2JpdCg1LCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENywgMCk7Ci0KLQlpZiAoZGF0YS0+dXNlX2V4dGVybmFsX3RyaWdnZXJzKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE1LCAwKTsKLQotCWRhdGEtPnN0YXJ0dXBfdGltZSA9IDQwOwotCWRhdGEtPnRyaWdnZXJfbnVtYmVyID0gNDsKLQlkYXRhLT50cmlnZ2VyX2xpc3QgPSBhdDkxX2FkY190cmlnZ2VyczsKLQotCWFkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX2FkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZGMoc3RydWN0IGF0OTFfYWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBSVEMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3J0Y19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfcnRjIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydGModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05cmxfcnRjX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydGModm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUlRUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0dF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9SVFQsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfUlRUICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfcnR0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9ydHQiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHJ0dF9yZXNvdXJjZXMsCi19OwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUlRDX0RSVl9BVDkxU0FNOSkKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCWF0OTFzYW05cmxfcnR0X2RldmljZS5uYW1lID0gInJ0Yy1hdDkxc2FtOSI7Ci0JLyoKLQkgKiBUaGUgc2Vjb25kIHJlc291cmNlIGlzIG5lZWRlZDoKLQkgKiBHUEJSIHdpbGwgc2VydmUgYXMgdGhlIHN0b3JhZ2UgZm9yIFJUQyB0aW1lIG9mZnNldAotCSAqLwotCWF0OTFzYW05cmxfcnR0X2RldmljZS5udW1fcmVzb3VyY2VzID0gMzsKLQlydHRfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gQVQ5MVNBTTlSTF9CQVNFX0dQQlIgKwotCQkJCSA0ICogQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTlfR1BCUjsKLQlydHRfcmVzb3VyY2VzWzFdLmVuZCA9IHJ0dF9yZXNvdXJjZXNbMV0uc3RhcnQgKyAzOwotCXJ0dF9yZXNvdXJjZXNbMl0uc3RhcnQgPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTOwotCXJ0dF9yZXNvdXJjZXNbMl0uZW5kID0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUzsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGModm9pZCkKLXsKLQkvKiBPbmx5IG9uZSByZXNvdXJjZSBpcyBuZWVkZWQ6IFJUVCBub3QgdXNlZCBhcyBSVEMgKi8KLQlhdDkxc2FtOXJsX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHQodm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0X3J0YygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF9ydHRfZGV2aWNlKTsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFdhdGNoZG9nCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0dfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3ZHRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfV0RULAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1dEVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF93ZHRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3dkdCIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHdkdF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHdkdF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV93YXRjaGRvZyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF93ZHRfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFBXTQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFdNX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwd21fcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfUFdNQywKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9QV01DICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9QV01DLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1BXTUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3B3bTBfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFzYW05cmwtcHdtIiwKLQkuaWQJPSAtMSwKLQkucmVzb3VyY2UJPSBwd21fcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShwd21fcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9wd20odTMyIG1hc2spCi17Ci0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTApKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjgsIDEpOwkvKiBlbmFibGUgUFdNMCAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTEpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjksIDEpOwkvKiBlbmFibGUgUFdNMSAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTIpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDUsIDEpOwkvKiBlbmFibGUgUFdNMiAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTMpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDgsIDEpOwkvKiBlbmFibGUgUFdNMyAqLwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX3B3bTBfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcHdtKHUzMiBtYXNrKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTU0MgLS0gU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVE1FTF9TU0MpIHx8IGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQ19NT0RVTEUpCi1zdGF0aWMgdTY0IHNzYzBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9TU0MwLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1NTQzAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1NTQzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfU1NDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfc3NjMF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MwX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19USykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMiwgMSk7Ci19Ci0KLXN0YXRpYyB1NjQgc3NjMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1NTQzEsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfU1NDMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfU1NDMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9TU0MxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9zc2MxX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxcm05MjAwX3NzYyIsCi0JLmlkCT0gMSwKLQkuZGV2CT0gewotCQkuZG1hX21hc2sJCT0gJnNzYzFfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNzYzFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzc2MxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3NzYzFfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RGKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19USykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEzMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JEKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE0LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SSykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAxKTsKLX0KLQotLyoKLSAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55Ci0gKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQotICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQotICogb24gdGhlIHNhbWUgc3lzdGVtIG1pZ2h0IGJlIHVzZWQgYnkgYSBjdXN0b20gZGF0YSBjYXB0dXJlIGRyaXZlci4KLSAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBOT1RFOiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gbWF0Y2hpbmcKLQkgKiAicGlucyIgdG8gd2hhdGV2ZXIgd2lsbCBiZSB1c2luZyBlYWNoIHBhcnRpY3VsYXIgY29udHJvbGxlci4KLQkgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBBVDkxU0FNOVJMX0lEX1NTQzA6Ci0JCXBkZXYgPSAmYXQ5MXNhbTlybF9zc2MwX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzBfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVDkxU0FNOVJMX0lEX1NTQzE6Ci0JCXBkZXYgPSAmYXQ5MXNhbTlybF9zc2MxX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzFfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVBUlQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUwpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfREJHVSwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9EQkdVICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMCwKLQkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCi19OwotCi1zdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfZGJndV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAwKTsJCS8qIERSWEQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAxKTsJCS8qIERUWEQgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzAsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9VUzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF91YXJ0MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQwX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTYsIDEpOwkJLyogVFhEMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNywgMCk7CQkvKiBSWEQwICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDApOwkvKiBSVFMwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMCk7CS8qIENUUzAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfRFNSKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDE0LCAwKTsJLyogRFNSMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9EVFIpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTUsIDApOwkvKiBEVFIwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RDRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNiwgMCk7CS8qIERDRDAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUkkpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTcsIDApOwkvKiBSSTAgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzEsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9VUzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF91YXJ0MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMiwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQxX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTExLCAxKTsJCS8qIFRYRDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAwKTsJCS8qIFJYRDEgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTgsIDApOwkvKiBSVFMxICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExOSwgMCk7CS8qIENUUzEgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzIsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9VUzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDJfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0Ml9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF91YXJ0Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMywKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAxKTsJCS8qIFRYRDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE0LCAwKTsJCS8qIFJYRDIgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjksIDApOwkvKiBSVFMyICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzMCwgMCk7CS8qIENUUzIgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzMsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMzICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9VUzMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDNfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0M19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF91YXJ0M19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gNCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQzX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQzX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQzX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDEpOwkJLyogVFhEMyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CQkvKiBSWEQzICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDQsIDApOwkvKiBSVFMzICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQzLCAwKTsJLyogQ1RTMyAqLwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwotCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgKnBkYXRhOwotCi0Jc3dpdGNoIChpZCkgewotCQljYXNlIDA6CQkvKiBEQkdVICovCi0JCQlwZGV2ID0gJmF0OTFzYW05cmxfZGJndV9kZXZpY2U7Ci0JCQljb25maWd1cmVfZGJndV9waW5zKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOVJMX0lEX1VTMDoKLQkJCXBkZXYgPSAmYXQ5MXNhbTlybF91YXJ0MF9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOVJMX0lEX1VTMToKLQkJCXBkZXYgPSAmYXQ5MXNhbTlybF91YXJ0MV9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQxX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOVJMX0lEX1VTMjoKLQkJCXBkZXYgPSAmYXQ5MXNhbTlybF91YXJ0Ml9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQyX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOVJMX0lEX1VTMzoKLQkJCXBkZXYgPSAmYXQ5MXNhbTlybF91YXJ0M19kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQzX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQl9Ci0JcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlwZGF0YS0+bnVtID0gcG9ydG5yOwkJLyogdXBkYXRlIHRvIG1hcHBlZCBJRCAqLwotCi0JaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQotCQlhdDkxX3VhcnRzW3BvcnRucl0gPSBwZGV2OwotfQotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUFYX1VBUlQ7IGkrKykgewotCQlpZiAoYXQ5MV91YXJ0c1tpXSkKLQkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpIHt9Ci12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlc2UgZGV2aWNlcyBhcmUgYWx3YXlzIHByZXNlbnQgYW5kIGRvbid0IG5lZWQgYW55IGJvYXJkLXNwZWNpZmljCi0gKiBzZXR1cC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCWF0OTFfYWRkX2RldmljZV9oZG1hYygpOwotCWF0OTFfYWRkX2RldmljZV9ydGMoKTsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3RjKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTl4NS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05eDUuYwppbmRleCAwMjgyNjhmZi4uZjBkNWE2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05eDUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTl4NS5jCkBAIC02LDMxNyArNiwxMSBAQAogICogTGljZW5zZWQgdW5kZXIgR1BMdjIgb3IgbGF0ZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrL2F0OTFfcG1jLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05eDUuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FCX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQUJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfUElPQUIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DRF9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0NEX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1BJT0NELAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc21kX2NsayA9IHsKLQkubmFtZQkJPSAic21kX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1NNRCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9VU0FSVDAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDFfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVVNBUlQxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQyX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VTQVJUMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLS8qIFVTQVJUMyBjbG9jayAtIE9ubHkgZm9yIHNhbTlnMjUvc2FtOXgyNSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQzX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VTQVJUMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aTBfY2xrID0gewotCS5uYW1lCQk9ICJ0d2kwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1RXSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9UV0kxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHdpMl9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aTJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVFdJMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzBfY2xrID0gewotCS5uYW1lCQk9ICJtY2kwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX01DSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkwX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9TUEkwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfU1BJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQwX2NsayA9IHsKLQkubmFtZQkJPSAidWFydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVUFSVDAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VBUlQxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGNiMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjYjBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVENCLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcHdtX2NsayA9IHsKLQkubmFtZQkJPSAicHdtX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1BXTSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImFkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9BREMsCi0JLnR5cGUJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFkY19vcF9jbGsgPSB7Ci0JLm5hbWUJCT0gImFkY19vcF9jbGsiLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi0JLnJhdGVfaHoJPSA1MDAwMDAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYTBfY2xrID0gewotCS5uYW1lCQk9ICJkbWEwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX0RNQTAsCi0JLnR5cGUJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYTFfY2xrID0gewotCS5uYW1lCQk9ICJkbWExX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX0RNQTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1aHBoc19jbGsgPSB7Ci0JLm5hbWUJCT0gInVocGhzIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVUhQSFMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1ZHBoc19jbGsgPSB7Ci0JLm5hbWUJCT0gInVkcGhzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VEUEhTLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotLyogZW1hYzAgY2xvY2sgLSBPbmx5IGZvciBzYW05ZzI1L3NhbTl4MjUvc2FtOWczNS9zYW05eDM1ICovCi1zdGF0aWMgc3RydWN0IGNsayBtYWNiMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInBjbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9FTUFDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLS8qIGxjZCBjbG9jayAtIE9ubHkgZm9yIHNhbTlnMTUvc2FtOWczNS9zYW05eDM1ICovCi1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkubmFtZQkJPSAibGNkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9MQ0RDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotLyogaXNpIGNsb2NrIC0gT25seSBmb3Igc2FtOWcyNSAqLwotc3RhdGljIHN0cnVjdCBjbGsgaXNpX2NsayA9IHsKLQkubmFtZQkJPSAiaXNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX0lTSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2xrID0gewotCS5uYW1lCQk9ICJtY2kxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX01DSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0vKiBlbWFjMSBjbG9jayAtIE9ubHkgZm9yIHNhbTl4MjUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1hY2IxX2NsayA9IHsKLQkubmFtZQkJPSAicGNsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX0VNQUMxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjX2NsayA9IHsKLQkubmFtZQkJPSAic3NjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1NTQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLS8qIGNhbjAgY2xvY2sgLSBPbmx5IGZvciBzYW05eDM1ICovCi1zdGF0aWMgc3RydWN0IGNsayBjYW4wX2NsayA9IHsKLQkubmFtZQkJPSAiY2FuMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9DQU4wLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotLyogY2FuMSBjbG9jayAtIE9ubHkgZm9yIHNhbTl4MzUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNhbjFfY2xrID0gewotCS5uYW1lCQk9ICJjYW4xX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX0NBTjEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmcGlvQUJfY2xrLAotCSZwaW9DRF9jbGssCi0JJnNtZF9jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJnR3aTBfY2xrLAotCSZ0d2kxX2NsaywKLQkmdHdpMl9jbGssCi0JJm1tYzBfY2xrLAotCSZzcGkwX2NsaywKLQkmc3BpMV9jbGssCi0JJnVhcnQwX2NsaywKLQkmdWFydDFfY2xrLAotCSZ0Y2IwX2NsaywKLQkmcHdtX2NsaywKLQkmYWRjX2NsaywKLQkmYWRjX29wX2NsaywKLQkmZG1hMF9jbGssCi0JJmRtYTFfY2xrLAotCSZ1aHBoc19jbGssCi0JJnVkcGhzX2NsaywKLQkmbW1jMV9jbGssCi0JJnNzY19jbGssCi0JLy8gaXJxMAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHBlcmlwaF9jbG9ja3NfbG9va3Vwc1tdID0gewotCS8qIGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZjIwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwMWMwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmODAyMDAwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImY4MDI0MDAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwMjgwMDAuc2VyaWFsIiwgJnVzYXJ0M19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmODA0MDAwMC5zZXJpYWwiLCAmdWFydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwNDQwMDAuc2VyaWFsIiwgJnVhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmODAwODAwMC50aW1lciIsICZ0Y2IwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmODAwYzAwMC50aW1lciIsICZ0Y2IwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZjAwMDgwMDAubW1jIiwgJm1tYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmMDAwYzAwMC5tbWMiLCAmbW1jMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJkbWFfY2xrIiwgImZmZmZlYzAwLmRtYS1jb250cm9sbGVyIiwgJmRtYTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiZG1hX2NsayIsICJmZmZmZWUwMC5kbWEtY29udHJvbGxlciIsICZkbWExX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZjAwMTAwMDAuc3NjIiwgJnNzY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmODAxMDAwMC5pMmMiLCAmdHdpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmODAxNDAwMC5pMmMiLCAmdHdpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmODAxODAwMC5pMmMiLCAmdHdpMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImYwMDAwMDAwLnNwaSIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZjAwMDQwMDAuc3BpIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY0MDAuZ3BpbyIsICZwaW9BQl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0FCX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmODAwLmdwaW8iLCAmcGlvQ0RfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmZhMDAuZ3BpbyIsICZwaW9DRF9jbGspLAotCS8qIGFkZGl0aW9uYWwgZmFrZSBjbG9jayBmb3IgbWFjYl9oY2xrICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiZjgwMmMwMDAuZXRoZXJuZXQiLCAmbWFjYjBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJmODAzMDAwMC5ldGhlcm5ldCIsICZtYWNiMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjYwMDAwMC5vaGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm9oY2lfY2xrIiwgIjYwMDAwMC5vaGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImVoY2lfY2xrIiwgIjcwMDAwMC5laGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiNTAwMDAwLmdhZGdldCIsICZ1dG1pX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiNTAwMDAwLmdhZGdldCIsICZ1ZHBoc19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmODAzNDAwMC5wd20iLCAmcHdtX2NsayksCi19OwotCi0vKgotICogVGhlIHR3byBwcm9ncmFtbWFibGUgY2xvY2tzLgotICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7Ci0JLm5hbWUJCT0gInBjazAiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7Ci0JLm5hbWUJCT0gInBjazEiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAxLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05eDVfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHBlcmlwaF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3NfbG9va3VwcykpOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcyNSgpCi0JfHwgY3B1X2lzX2F0OTFzYW05eDI1KCkpCi0JCWNsa19yZWdpc3RlcigmdXNhcnQzX2Nsayk7Ci0KLQlpZiAoY3B1X2lzX2F0OTFzYW05ZzI1KCkKLQl8fCBjcHVfaXNfYXQ5MXNhbTl4MjUoKQotCXx8IGNwdV9pc19hdDkxc2FtOWczNSgpCi0JfHwgY3B1X2lzX2F0OTFzYW05eDM1KCkpCi0JCWNsa19yZWdpc3RlcigmbWFjYjBfY2xrKTsKLQotCWlmIChjcHVfaXNfYXQ5MXNhbTlnMTUoKQotCXx8IGNwdV9pc19hdDkxc2FtOWczNSgpCi0JfHwgY3B1X2lzX2F0OTFzYW05eDM1KCkpCi0JCWNsa19yZWdpc3RlcigmbGNkY19jbGspOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcyNSgpKQotCQljbGtfcmVnaXN0ZXIoJmlzaV9jbGspOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOXgyNSgpKQotCQljbGtfcmVnaXN0ZXIoJm1hY2IxX2Nsayk7Ci0KLQlpZiAoY3B1X2lzX2F0OTFzYW05eDI1KCkKLQl8fCBjcHVfaXNfYXQ5MXNhbTl4MzUoKSkgewotCQljbGtfcmVnaXN0ZXIoJmNhbjBfY2xrKTsKLQkJY2xrX3JlZ2lzdGVyKCZjYW4xX2Nsayk7Ci0JfQotCi0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotfQotI2Vsc2UKLSNkZWZpbmUgYXQ5MXNhbTl4NV9yZWdpc3Rlcl9jbG9ja3MJTlVMTAotI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTl4NSBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KQEAgLTMzOCw2ICszMiw1IEBACiAKIEFUOTFfU09DX1NUQVJUKGF0OTFzYW05eDUpCiAJLm1hcF9pbyA9IGF0OTFzYW05eDVfbWFwX2lvLAotCS5yZWdpc3Rlcl9jbG9ja3MgPSBhdDkxc2FtOXg1X3JlZ2lzdGVyX2Nsb2NrcywKIAkuaW5pdCA9IGF0OTFzYW05eDVfaW5pdGlhbGl6ZSwKIEFUOTFfU09DX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTF4NDAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxeDQwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MjNmMWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTF4NDAuYworKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXg0MC5jCi0gKgotICogKEMpIENvcHlyaWdodCAyMDA3LCBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxeDQwLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3N0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0KLS8qCi0gKiBFeHBvcnQgdGhlIGNsb2NrIGZ1bmN0aW9ucyBmb3IgdGhlIEFUOTFYNDAuIFNvbWUgZXh0ZXJuYWwgY29kZSBjb21tb24KLSAqIHRvIGFsbCBBVDkxIGZhbWlseSBwYXJ0cyByZWx5cyBvbiB0aGlzLCBsaWtlIHRoZSBncGlvIGFuZCBzZXJpYWwgc3VwcG9ydC4KLSAqLwotaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiAwOwotfQotCi12b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLX0KLQotdW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBBVDkxWDQwX01BU1RFUl9DTE9DSzsKLX0KLQotc3RhdGljIHZvaWQgYXQ5MXg0MF9pZGxlKHZvaWQpCi17Ci0JLyoKLQkgKiBEaXNhYmxlIHRoZSBwcm9jZXNzb3IgY2xvY2suICBUaGUgcHJvY2Vzc29yIHdpbGwgYmUgYXV0b21hdGljYWxseQotCSAqIHJlLWVuYWJsZWQgYnkgYW4gaW50ZXJydXB0IG9yIGJ5IGEgcmVzZXQuCi0JICovCi0JX19yYXdfd3JpdGVsKEFUOTFfUFNfQ1JfQ1BVLCBBVDkxX0lPX1AyVihBVDkxX1BTX0NSKSk7Ci0JY3B1X2RvX2lkbGUoKTsKLX0KLQotdm9pZCBfX2luaXQgYXQ5MXg0MF9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKLXsKLQlhcm1fcG1faWRsZSA9IGF0OTF4NDBfaWRsZTsKLX0KLQotLyoKLSAqIFRoZSBkZWZhdWx0IGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMgKDAgPSBsb3dlc3QsIDcgPSBoaWdoZXN0KS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdDkxeDQwX2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0gewotCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCi0JMCwJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCi0JMCwJLyogVVNBUlQgMCAqLwotCTAsCS8qIFVTQVJUIDEgKi8KLQkyLAkvKiBUaW1lciBDb3VudGVyIDAgKi8KLQkyLAkvKiBUaW1lciBDb3VudGVyIDEgKi8KLQkyLAkvKiBUaW1lciBDb3VudGVyIDIgKi8KLQkwLAkvKiBXYXRjaGRvZyB0aW1lciAqLwotCTAsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLwotCTAsCS8qIFJlc2VydmVkICovCi0JMCwJLyogUmVzZXJ2ZWQgKi8KLQkwLAkvKiBSZXNlcnZlZCAqLwotCTAsCS8qIFJlc2VydmVkICovCi0JMCwJLyogUmVzZXJ2ZWQgKi8KLQkwLAkvKiBSZXNlcnZlZCAqLwotCTAsCS8qIFJlc2VydmVkICovCi0JMCwJLyogRXh0ZXJuYWwgSVJRMCAqLwotCTAsCS8qIEV4dGVybmFsIElSUTEgKi8KLQkwLAkvKiBFeHRlcm5hbCBJUlEyICovCi19OwotCi12b2lkIF9faW5pdCBhdDkxeDQwX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbTlJfQUlDX0lSUVNdKQotewotCXUzMiAgZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFYNDBfSURfSVJRMCkgfCAoMSA8PCBBVDkxWDQwX0lEX0lSUTEpCi0JCQl8ICgxIDw8IEFUOTFYNDBfSURfSVJRMik7Ci0JaWYgKCFwcmlvcml0eSkKLQkJcHJpb3JpdHkgPSBhdDkxeDQwX2RlZmF1bHRfaXJxX3ByaW9yaXR5OwotCi0JYXQ5MV9haWNfaW5pdChwcmlvcml0eSwgZXh0ZXJuX2lycSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXg0MF90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXg0MF90aW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZDBiZjIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTF4NDBfdGltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDkxeDQwX3RpbWUuYwotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNywgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxeDQwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV90Yy5oIgotCi0jZGVmaW5lIGF0OTFfdGNfcmVhZChmaWVsZCkgXAotCV9fcmF3X3JlYWRsKEFUOTFfSU9fUDJWKEFUOTFfVEMpICsgZmllbGQpCi0KLSNkZWZpbmUgYXQ5MV90Y193cml0ZShmaWVsZCwgdmFsdWUpIFwKLQlfX3Jhd193cml0ZWwodmFsdWUsIEFUOTFfSU9fUDJWKEFUOTFfVEMpICsgZmllbGQpCi0KLS8qCi0gKgkzIGNvdW50ZXIvdGltZXIgdW5pdHMgcHJlc2VudC4KLSAqLwotI2RlZmluZQlBVDkxX1RDX0NMSzBCQVNFCTAKLSNkZWZpbmUJQVQ5MV9UQ19DTEsxQkFTRQkweDQwCi0jZGVmaW5lCUFUOTFfVENfQ0xLMkJBU0UJMHg4MAotCi1zdGF0aWMgdTMyIGF0OTF4NDBfZ2V0dGltZW9mZnNldCh2b2lkKQotewotCXJldHVybiAoYXQ5MV90Y19yZWFkKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX0NWKSAqIDEwMDAwMDAgLwotCQkoQVQ5MVg0MF9NQVNURVJfQ0xPQ0sgLyAxMjgpKSAqIDEwMDA7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBhdDkxeDQwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JYXQ5MV90Y19yZWFkKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX1NSKTsKLQl0aW1lcl90aWNrKCk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBhdDkxeDQwX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiYXQ5MV90aWNrIiwKLQkuZmxhZ3MJCT0gSVJRRl9USU1FUiwKLQkuaGFuZGxlcgk9IGF0OTF4NDBfdGltZXJfaW50ZXJydXB0Ci19OwotCi12b2lkIF9faW5pdCBhdDkxeDQwX3RpbWVyX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQotCWFyY2hfZ2V0dGltZW9mZnNldCA9IGF0OTF4NDBfZ2V0dGltZW9mZnNldDsKLQotCWF0OTFfdGNfd3JpdGUoQVQ5MV9UQ19CQ1IsIDApOwotCXYgPSBhdDkxX3RjX3JlYWQoQVQ5MV9UQ19CTVIpOwotCXYgPSAodiAmIH5BVDkxX1RDX1RDMVhDMVMpIHwgQVQ5MV9UQ19UQzFYQzFTX05PTkU7Ci0JYXQ5MV90Y193cml0ZShBVDkxX1RDX0JNUiwgdik7Ci0KLQlhdDkxX3RjX3dyaXRlKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX0NDUiwgQVQ5MV9UQ19DTEtESVMpOwotCWF0OTFfdGNfd3JpdGUoQVQ5MV9UQ19DTEsxQkFTRSArIEFUOTFfVENfQ01SLCAoQVQ5MV9UQ19USU1FUl9DTE9DSzQgfCBBVDkxX1RDX0NQQ1RSRykpOwotCWF0OTFfdGNfd3JpdGUoQVQ5MV9UQ19DTEsxQkFTRSArIEFUOTFfVENfSURSLCAweGZmZmZmZmZmKTsKLQlhdDkxX3RjX3dyaXRlKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX1JDLCAoQVQ5MVg0MF9NQVNURVJfQ0xPQ0sgLyAxMjgpIC8gSFogLSAxKTsKLQlhdDkxX3RjX3dyaXRlKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX0lFUiwgKDE8PDQpKTsKLQotCXNldHVwX2lycShBVDkxWDQwX0lEX1RDMSwgJmF0OTF4NDBfdGltZXJfaXJxKTsKLQotCWF0OTFfdGNfd3JpdGUoQVQ5MV9UQ19DTEsxQkFTRSArIEFUOTFfVENfQ0NSLCAoQVQ5MV9UQ19TV1RSRyB8IEFUOTFfVENfQ0xLRU4pKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC0xYXJtLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtMWFybS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjZkYmNjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC0xYXJtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLTFhcm0uYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBvbmVhcm1faW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBvbmVhcm1fZXRoX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBvbmVhcm1fdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAxLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBvbmVhcm1fdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEMyLAotCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEMzLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG9uZWFybV9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEgKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCi0JCQkgICB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfCBBVE1FTF9VQVJUX0RDRAotCQkJICAgfCBBVE1FTF9VQVJUX1JJKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZvbmVhcm1fZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJm9uZWFybV91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZvbmVhcm1fdWRjX2RhdGEpOwotfQotCi1NQUNISU5FX1NUQVJUKE9ORUFSTSwgIkFqZWNvIDFBUk0gc2luZ2xlIGJvYXJkIGNvbXB1dGVyIikKLQkvKiBNYWludGFpbmVyOiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4gKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gb25lYXJtX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBvbmVhcm1fYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hZmViLTkyNjB2MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzZlMzVjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hZmViLTkyNjB2MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICogIENvcHlyaWdodCAoQykgMjAwNiBBdG1lbAotICogIENvcHlyaWdodCAoQykgMjAwOCBTZXJnZXkgTGFwaW4KLSAqCi0gKiBBIGN1c3RvbSBib2FyZCBkZXNpZ25lZCBhcyBvcGVuIGhhcmR3YXJlOyBQQ0JzIGFuZCB2YXJpb3VzIGluZm9ybWF0aW9uCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FybTlmcGdhLWV2b2x1dGlvbi1ib2FyZC8KLSAqIFN1YnZlcnNpb24gcmVwb3NpdG9yeTogc3ZuOi8vMTk0Ljg1LjIzOC4yMi9ob21lL3VzZXJzL2dlb3JnZS9zdm4vYXJtOWViCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBhZmViOTI2MF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSG9zdCBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBhZmViOTI2MF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgYWZlYjkyNjBfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM1LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBhZmViOTI2MF9zcGlfZGV2aWNlc1tdID0gewotCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAxLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi19OwotCi0KLS8qCi0gKiBNQUNCIEV0aGVybmV0IGRldmljZQotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGFmZWI5MjYwX21hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQTksCi0JLmlzX3JtaWkJPSAwLAotfTsKLQotCi0vKgotICogTkFORCBmbGFzaAotICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBhZmViOTI2MF9uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAiYm9vdGxvYWRlciIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9ICg2NDAgKiBTWl8xSyksCi0JfSwKLQl7Ci0JCS5uYW1lCT0gImtlcm5lbCIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gU1pfMk0sCi0JfSwKLQl7Ci0JCS5uYW1lCT0gInJvb3RmcyIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBhZmViOTI2MF9uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCi0JLmJ1c193aWR0aF8xNgk9IDAsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkucGFydHMJCT0gYWZlYjkyNjBfbmFuZF9wYXJ0aXRpb24sCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoYWZlYjkyNjBfbmFuZF9wYXJ0aXRpb24pLAotCS5kZXRfcGluCT0gLUVJTlZBTCwKLX07Ci0KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgYWZlYjkyNjBfbWNpMF9kYXRhID0gewotCS5zbG90WzFdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQzksCi0JCS53cF9waW4JCT0gQVQ5MV9QSU5fUEM0LAotCX0sCi19OwotCi0KLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGFmZWI5MjYwX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMjMiLCAweDFhKSwKLQl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCJmbTMxMzAiLCAweDY4KSwKLQl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCIyNGM2NCIsIDB4NTApLAotCX0sCi19OwotCi0vKgotICogSURFIChDRiBUcnVlIElERSBtb2RlKQotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBhZmViOTI2MF9jZl9kYXRhID0gewotCS5jaGlwc2VsZWN0ID0gNCwKLQkuaXJxX3BpbiAgICA9IEFUOTFfUElOX1BBNiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnZjY19waW4JPSAtRUlOVkFMLAotCS5yc3RfcGluICAgID0gQVQ5MV9QSU5fUEE3LAotCS5mbGFncyAgICAgID0gQVQ5MV9DRl9UUlVFX0lERSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhZmViOTI2MF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsCi0JCQkgICAgIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUgotCQkJICAgfCBBVE1FTF9VQVJUX0RDRCB8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLAotCQkJQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmFmZWI5MjYwX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmFmZWI5MjYwX3VkY19kYXRhKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGFmZWI5MjYwX3NwaV9kZXZpY2VzLAotCQkJQVJSQVlfU0laRShhZmViOTI2MF9zcGlfZGV2aWNlcykpOwotCS8qIE5BTkQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmYWZlYjkyNjBfbmFuZF9kYXRhKTsKLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmFmZWI5MjYwX21hY2JfZGF0YSk7Ci0KLQkvKiBTdGFuZGFyZCBmdW5jdGlvbidzIHBpbiBhc3NpZ25tZW50cyBhcmUgbm90Ci0JICogYXBwcm9wcmlhdGUgZm9yIHVzIGFuZCBnZW5lcmljIGNvZGUgcHJvdmlkZQotCSAqIG5vIEFQSSB0byBjb25maWd1cmUgdGhlc2UgcGlucyBhbnkgb3RoZXIgd2F5ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMCk7CS8qIEVUWDIgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTExLCAwKTsJLyogRVRYMyAqLwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmFmZWI5MjYwX21jaTBfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhhZmViOTI2MF9pMmNfZGV2aWNlcywKLQkJCUFSUkFZX1NJWkUoYWZlYjkyNjBfaTJjX2RldmljZXMpKTsKLQkvKiBBdWRpbyAqLwotCWF0OTFfYWRkX2RldmljZV9zc2MoQVQ5MVNBTTkyNjBfSURfU1NDLCBBVE1FTF9TU0NfVFgpOwotCS8qIElERSAqLwotCWF0OTFfYWRkX2RldmljZV9jZigmYWZlYjkyNjBfY2ZfZGF0YSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQUZFQjkyNjAsICJDdXN0b20gYWZlYjkyNjAgYm9hcmQiKQotCS8qIE1haW50YWluZXI6IFNlcmdleSBMYXBpbiA8c2xhcGluQG9zc2ZhbnMub3JnPiAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGFmZWI5MjYwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBhZmViOTI2MF9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FtNjAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU4MjdkZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FtNjAuYworKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogS3dpa0J5dGUgQ0FNNjAgKEtCOTI2MCkKLSAqCi0gKiBiYXNlZCBvbiBib2FyZC1zYW05MjYwZWsuYwotICogICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICogICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjYW02MF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEwIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDEwMDAwMDAwKTsKLX0KLQotLyoKLSAqIFVTQiBIb3N0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBjYW02MF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLQotLyoKLSAqIFNQSSBkZXZpY2VzLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSCkKLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjYW02MF9zcGlfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJPSAiQk9PVDEiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSA0ICogMTA1NiwKLQl9LAotCXsKLQkJLm5hbWUJPSAiQk9PVDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IDI1NiAqIDEwNTYsCi0JfSwKLQl7Ci0JCS5uYW1lCT0gImtlcm5lbCIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gMjIyMiAqIDEwNTYsCi0JfSwKLQl7Ci0JCS5uYW1lCT0gImZpbGUgc3lzdGVtIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgY2FtNjBfc3BpX2ZsYXNoX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUJCT0gInNwaV9mbGFzaCIsCi0JLnBhcnRzCQk9IGNhbTYwX3NwaV9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY2FtNjBfc3BpX3BhcnRpdGlvbnMpCi19OwotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY2FtNjBfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpCi0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNhbTYwX3NwaV9mbGFzaF9wbGF0Zm9ybV9kYXRhCi0JfSwKLSNlbmRpZgotfTsKLQotCi0vKgotICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgY2FtNjBfbWFjYl9kYXRhIF9faW5pdGRhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEI1LAotCS5pc19ybWlpCT0gMCwKLX07Ci0KLQotLyoKLSAqIE5BTkQgRmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgY2FtNjBfbmFuZF9wYXJ0aXRpb25bXSA9IHsKLQl7Ci0JCS5uYW1lCT0gIm5hbmRfZnMiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIGNhbTYwX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIxLAotCS5jbGUJCT0gMjIsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEE5LAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEE3LAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi0JLnBhcnRzCQk9IGNhbTYwX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGNhbTYwX25hbmRfcGFydGl0aW9uKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgY2FtNjBfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMSwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDEsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gMywKLQkubnJkX3B1bHNlCQk9IDMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDMsCi0JLm53ZV9wdWxzZQkJPSAzLAotCi0JLnJlYWRfY3ljbGUJCT0gNSwKLQkud3JpdGVfY3ljbGUJCT0gNSwKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKLQkudGRmX2N5Y2xlcwkJPSAyLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNhbTYwX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCAzLCAmY2FtNjBfbmFuZF9zbWNfY29uZmlnKTsKLQotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZjYW02MF9uYW5kX2RhdGEpOwotfQotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjYW02MF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShjYW02MF9zcGlfZGV2aWNlcywgQVJSQVlfU0laRShjYW02MF9zcGlfZGV2aWNlcykpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY2FtNjBfbWFjYl9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCS8qIGVuYWJsZSBVU0IgcG93ZXIgc3VwcGx5IGNpcmN1aXQgKi8KLQlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QQjE4LCAxKTsKLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmY2FtNjBfdXNiaF9kYXRhKTsKLQkvKiBOQU5EICovCi0JY2FtNjBfYWRkX2RldmljZV9uYW5kKCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQ0FNNjAsICJLd2lrQnl0ZSBDQU02MCIpCi0JLyogTWFpbnRhaW5lcjogS3dpa0J5dGUgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBjYW02MF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gY2FtNjBfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDczMTNkMy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwNSBQZWVyIEdlb3JnaQotICogIAkJICAgICAgIENvbml0ZWMgRGF0YXN5c3RlbXMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2FybWV2YV9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDIwLjAwMCBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgyMDAwMDAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY2FybWV2YV9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzQsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGNhcm1ldmFfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBjYXJtZXZhX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BEMTIsCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QRDksCi19OwotCi0vKiBGSVhNRTogdXNlciBkZXBlbmRlbnQgKi8KLS8vIHN0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIF9faW5pdGRhdGEgY2FybWV2YV9jZl9kYXRhID0gewotLy8JLmRldF9waW4JPSBBVDkxX1BJTl9QQjAsCi0vLwkucnN0X3Bpbgk9IEFUOTFfUElOX1BDNSwKLQkvLyAuaXJxX3Bpbgk9IC1FSU5WQUwsCi0JLy8gLnZjY19waW4JPSAtRUlOVkFMLAotLy8gfTsKLQotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGNhcm1ldmFfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQjEwLAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BDMTQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY2FybWV2YV9zcGlfZGV2aWNlc1tdID0gewotCXsgLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzID0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QgID0gMCwKLQkJLm1heF9zcGVlZF9oeiA9IDEwICogMTAwMCAqIDEwMDAsCi0JfSwKLQl7IC8qIFVzZXIgYWNjZXNzaWJsZSBzcGkgLSBjczEgKDI1MEtIeikgKi8KLQkJLm1vZGFsaWFzID0gInNwaS1jczEiLAotCQkuY2hpcF9zZWxlY3QgID0gMSwKLQkJLm1heF9zcGVlZF9oeiA9IDI1MCAqICAxMDAwLAotCX0sCi0JeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpIC0gY3MyICgxTUh6KSAqLwotCQkubW9kYWxpYXMgPSAic3BpLWNzMiIsCi0JCS5jaGlwX3NlbGVjdCAgPSAyLAotCQkubWF4X3NwZWVkX2h6ID0gMSAqIDEwMDAgKiAgMTAwMCwKLQl9LAotCXsgLyogVXNlciBhY2Nlc3NpYmxlIHNwaSAtIGNzMyAoMTBNSHopICovCi0JCS5tb2RhbGlhcyA9ICJzcGktY3MzIiwKLQkJLmNoaXBfc2VsZWN0ICA9IDMsCi0JCS5tYXhfc3BlZWRfaHogPSAxMCAqIDEwMDAgKiAgMTAwMCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjYXJtZXZhX2xlZHNbXSA9IHsKLQl7IC8qICJ1c2VyIGxlZCAxIiwgTEVEOSAqLwotCQkubmFtZQkJCT0gImxlZDkiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEEyMSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JeyAvKiAidXNlciBsZWQgMiIsIExFRDEwICovCi0JCS5uYW1lCQkJPSAibGVkMTAiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEEyNSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQl9LAotCXsgLyogInVzZXIgbGVkIDMiLCBMRUQxMSAqLwotCQkubmFtZQkJCT0gImxlZDExIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMjYsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JfSwKLQl7IC8qICJ1c2VyIGxlZCA0IiwgTEVEMTIgKi8KLQkJLm5hbWUJCQk9ICJsZWQxMiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTE4LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjYXJtZXZhX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMSwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJICAgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCSAgIHwgQVRNRUxfVUFSVF9SSSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY2FybWV2YV9ldGhfZGF0YSk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmY2FybWV2YV91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjYXJtZXZhX3VkY19kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoY2FybWV2YV9zcGlfZGV2aWNlcywgQVJSQVlfU0laRShjYXJtZXZhX3NwaV9kZXZpY2VzKSk7Ci0JLyogQ29tcGFjdCBGbGFzaCAqLwotLy8JYXQ5MV9hZGRfZGV2aWNlX2NmKCZjYXJtZXZhX2NmX2RhdGEpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmNhcm1ldmFfbWNpMF9kYXRhKTsKLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoY2FybWV2YV9sZWRzLCBBUlJBWV9TSVpFKGNhcm1ldmFfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKENBUk1FVkEsICJDYXJtZXZhIikKLQkvKiBNYWludGFpbmVyOiBDb25pdGVjIERhdGFzeXN0ZW1zICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGNhcm1ldmFfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGNhcm1ldmFfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHU5a3JlYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzFjODMxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHU5a3JlYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzg2ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICogIENvcHlyaWdodCAoQykgMjAwNiBBdG1lbAotICogIENvcHlyaWdodCAoQykgMjAwOSBFcmljIEJlbmFyZCAtIGVyaWNAZXVrcmVhLmNvbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYwX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9tYXRyaXguaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjcHU5a3JlYV9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSG9zdCBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgY3B1OWtyZWFfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM4LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY3B1OWtyZWFfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IC1FSU5WQUwsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotLyoKLSAqIE5BTkQgZmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV9uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCi0JLmJ1c193aWR0aF8xNgk9IDAsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi19OwotCi0jaWZkZWYgQ09ORklHX01BQ0hfQ1BVOTI2MAotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9uYW5kX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAxLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMSwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAotCS5ucmRfcHVsc2UJCT0gMywKLQkubmNzX3dyaXRlX3B1bHNlCT0gMywKLQkubndlX3B1bHNlCQk9IDMsCi0KLQkucmVhZF9jeWNsZQkJPSA1LAotCS53cml0ZV9jeWNsZQkJPSA1LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCXwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0RCV184LAotCS50ZGZfY3ljbGVzCQk9IDIsCi19OwotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgY3B1OWtyZWFfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMiwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDIsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gNCwKLQkubnJkX3B1bHNlCQk9IDQsCi0JLm5jc193cml0ZV9wdWxzZQk9IDQsCi0JLm53ZV9wdWxzZQkJPSA0LAotCi0JLnJlYWRfY3ljbGUJCT0gNywKLQkud3JpdGVfY3ljbGUJCT0gNywKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERQotCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKLQkudGRmX2N5Y2xlcwkJPSAzLAotfTsKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfYWRkX2RldmljZV9uYW5kKHZvaWQpCi17Ci0Jc2FtOV9zbWNfY29uZmlndXJlKDAsIDMsICZjcHU5a3JlYV9uYW5kX3NtY19jb25maWcpOwotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZjcHU5a3JlYV9uYW5kX2RhdGEpOwotfQotCi0vKgotICogTk9SIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGNwdWF0OTI2MF9ub3JfZGF0YSA9IHsKLQkud2lkdGgJCT0gMiwKLX07Ci0KLSNkZWZpbmUgTk9SX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKLSNkZWZpbmUgTk9SX1NJWkUJU1pfNjRNCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTk9SX0JBU0UsCi0JCS5lbmQJPSBOT1JfQkFTRSArIE5PUl9TSVpFIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3B1OWtyZWFfbm9yX2ZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY3B1YXQ5MjYwX25vcl9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbm9yX2ZsYXNoX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3Jlc291cmNlcyksCi19OwotCi0jaWZkZWYgQ09ORklHX01BQ0hfQ1BVOTI2MAotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9ub3Jfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDEwLAotCS5ucmRfcHVsc2UJCT0gMTAsCi0JLm5jc193cml0ZV9wdWxzZQk9IDYsCi0JLm53ZV9wdWxzZQkJPSA2LAotCi0JLnJlYWRfY3ljbGUJCT0gMTIsCi0JLndyaXRlX2N5Y2xlCQk9IDgsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUKLQkJCXwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0JBVF9XUklURQotCQkJfCBBVDkxX1NNQ19EQldfMTYsCi0JLnRkZl9jeWNsZXMJCT0gMiwKLX07Ci0jZWxzZQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9ub3Jfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDEzLAotCS5ucmRfcHVsc2UJCT0gMTMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDgsCi0JLm53ZV9wdWxzZQkJPSA4LAotCi0JLnJlYWRfY3ljbGUJCT0gMTUsCi0JLndyaXRlX2N5Y2xlCQk9IDEwLAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfV1JJVEUKLQkJCXwgQVQ5MV9TTUNfREJXXzE2LAotCS50ZGZfY3ljbGVzCQk9IDIsCi19OwotI2VuZGlmCi0KLXN0YXRpYyBfX2luaXQgdm9pZCBjcHU5a3JlYV9hZGRfZGV2aWNlX25vcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3NhOwotCi0JY3NhID0gYXQ5MV9tYXRyaXhfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOwotCWF0OTFfbWF0cml4X3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfVkRESU9NU0VMXzNfM1YpOwotCi0JLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDAgKE5PUikgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMCwgJmNwdTlrcmVhX25vcl9zbWNfY29uZmlnKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3B1OWtyZWFfbm9yX2ZsYXNoKTsKLX0KLQotLyoKLSAqIExFRHMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjcHU5a3JlYV9sZWRzW10gPSB7Ci0JewkvKiBMRUQxICovCi0JCS5uYW1lCQkJPSAiTEVEMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzExLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gInRpbWVyIiwKLQl9LAotCXsJLyogTEVEMiAqLwotCQkubmFtZQkJCT0gIkxFRDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxMiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiBMRUQzICovCi0JCS5uYW1lCQkJPSAiTEVEMyIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzcsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwKLQl7CS8qIExFRDQgKi8KLQkJLm5hbWUJCQk9ICJMRUQ0IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BDOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgY3B1OWtyZWFfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJkczEzMzkiLCAweDY4KSwKLQl9LAotfTsKLQotLyoKLSAqIEdQSU8gQnV0dG9ucwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gY3B1OWtyZWFfYnV0dG9uc1tdID0gewotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEMzLAotCQkuY29kZQkJPSBCVE5fMCwKLQkJLmRlc2MJCT0gIkJQMSIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjIwLAotCQkuY29kZQkJPSBCVE5fMSwKLQkJLmRlc2MJCT0gIkJQMiIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgY3B1OWtyZWFfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBjcHU5a3JlYV9idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoY3B1OWtyZWFfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjcHU5a3JlYV9idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNwdTlrcmVhX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjcHU5a3JlYV9hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BDMywgMSk7CS8qIEJQMSAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BDMywgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjIwLCAxKTsJLyogQlAyICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEIyMCwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNwdTlrcmVhX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBjcHU5a3JlYV9hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLX0KLSNlbmRpZgotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV9tY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BBMjksCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNwdTlrcmVhX2JvYXJkX2luaXQodm9pZCkKLXsKLQlhdDkxX3JlZ2lzdGVyX2RldmljZXMoKTsKLQotCS8qIE5PUiAqLwotCWNwdTlrcmVhX2FkZF9kZXZpY2Vfbm9yKCk7Ci0JLyogU2VyaWFsICovCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8Ci0JCUFUTUVMX1VBUlRfUlRTIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8Ci0JCUFUTUVMX1VBUlRfRENEIHwgQVRNRUxfVUFSVF9SSSk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzIuIChSeCwgVHgsIFJUUywgQ1RTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTIHwKLQkJQVRNRUxfVUFSVF9SVFMpOwotCi0JLyogVVNBUlQyIG9uIHR0eVMzLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMyLCAzLCBBVE1FTF9VQVJUX0NUUyB8Ci0JCUFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMyBvbiB0dHlTNC4gKFJ4LCBUeCkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMzLCA0LCAwKTsKLQotCS8qIFVTQVJUNCBvbiB0dHlTNS4gKFJ4LCBUeCkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVM0LCA1LCAwKTsKLQotCS8qIFVTQVJUNSBvbiB0dHlTNi4gKFJ4LCBUeCkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVM1LCA2LCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmY3B1OWtyZWFfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmY3B1OWtyZWFfdWRjX2RhdGEpOwotCS8qIE5BTkQgKi8KLQljcHU5a3JlYV9hZGRfZGV2aWNlX25hbmQoKTsKLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmNwdTlrcmVhX21hY2JfZGF0YSk7Ci0JLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmY3B1OWtyZWFfbWNpMF9kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGNwdTlrcmVhX2kyY19kZXZpY2VzLAotCQlBUlJBWV9TSVpFKGNwdTlrcmVhX2kyY19kZXZpY2VzKSk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGNwdTlrcmVhX2xlZHMsIEFSUkFZX1NJWkUoY3B1OWtyZWFfbGVkcykpOwotCS8qIFB1c2ggQnV0dG9ucyAqLwotCWNwdTlrcmVhX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotfQotCi0jaWZkZWYgQ09ORklHX01BQ0hfQ1BVOTI2MAotTUFDSElORV9TVEFSVChDUFVBVDkyNjAsICJFdWtyZWEgQ1BVOTI2MCIpCi0jZWxzZQotTUFDSElORV9TVEFSVChDUFVBVDlHMjAsICJFdWtyZWEgQ1BVOUcyMCIpCi0jZW5kaWYKLQkvKiBNYWludGFpbmVyOiBFcmljIEJlbmFyZCAtIEVVS1JFQSBFbGVjdHJvbWF0aXF1ZSAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGNwdTlrcmVhX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBjcHU5a3JlYV9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1YXQ5MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDk0MzUwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjcHVhdDkxX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQkJPSAibGVkMSIsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BDMCwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNwdWF0OTFfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBjcHVhdDkxX2V0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IC1FSU5WQUwsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGNwdWF0OTFfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAxLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBjcHVhdDkxX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDMTUsCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QQzE0LAotfTsKLQotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGNwdWF0OTFfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQzIsCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgY3B1YXQ5MV9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjcHVhdDkxX2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydAkJPSBBVDkxX0NISVBTRUxFQ1RfMCwKLQkuZW5kCQk9IEFUOTFfQ0hJUFNFTEVDVF8wICsgU1pfMTZNIC0gMSwKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjcHVhdDkxX25vcmZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZjcHVhdDkxX2ZsYXNoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSAmY3B1YXQ5MV9mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi19OwotCi0jaWZkZWYgQ09ORklHX01URF9QTEFUUkFNCi1zdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBhdDkxX3NyYW1fcGRhdGEgPSB7Ci0JLm1hcG5hbWUJPSAiU1JBTSIsCi0JLmJhbmt3aWR0aAk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGF0OTFfc3JhbV9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gQVQ5MVJNOTIwMF9TUkFNX0JBU0UsCi0JCS5lbmQgICA9IEFUOTFSTTkyMDBfU1JBTV9CQVNFICsgQVQ5MVJNOTIwMF9TUkFNX1NJWkUgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9zcmFtID0gewotCS5uYW1lCQk9ICJtdGQtcmFtIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSBhdDkxX3NyYW1fcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF0OTFfc3JhbV9yZXNvdXJjZSksCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmYXQ5MV9zcmFtX3BkYXRhLAotCX0sCi19OwotI2VuZGlmIC8qIE1URF9QTEFUUkFNICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmY3B1YXQ5MV9ub3JmbGFzaCwKLSNpZmRlZiBDT05GSUdfTVREX1BMQVRSQU0KLQkmYXQ5MV9zcmFtLAotI2VuZGlmIC8qIENPTkZJR19NVERfUExBVFJBTSAqLwotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNwdWF0OTFfYm9hcmRfaW5pdCh2b2lkKQotewotCS8qIFNlcmlhbCAqLwotCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCi0JLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwKLQkJQVRNRUxfVUFSVF9SVFMpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8Ci0JCUFUTUVMX1VBUlRfUlRTIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8Ci0JCUFUTUVMX1VBUlRfRENEIHwgQVRNRUxfVUFSVF9SSSk7Ci0KLQkvKiBVU0FSVDIgb24gdHR5UzMgKFJ4LCBUeCkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzIsIDMsIDApOwotCi0JLyogVVNBUlQzIG9uIHR0eVM0IChSeCwgVHgsIENUUywgUlRTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMywgNCwgQVRNRUxfVUFSVF9DVFMgfAotCQlBVE1FTF9VQVJUX1JUUyk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIExFRHMuICovCi0JYXQ5MV9ncGlvX2xlZHMoY3B1YXQ5MV9sZWRzLCBBUlJBWV9TSVpFKGNwdWF0OTFfbGVkcykpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY3B1YXQ5MV9ldGhfZGF0YSk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmY3B1YXQ5MV91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjcHVhdDkxX3VkY19kYXRhKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZjcHVhdDkxX21jaTBfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQkvKiBQbGF0Zm9ybSBkZXZpY2VzICovCi0JcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQ1BVQVQ5MSwgIkV1a3JlYSIpCi0JLyogTWFpbnRhaW5lcjogRXJpYyBCZW5hcmQgLSBFVUtSRUEgRWxlY3Ryb21hdGlxdWUgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gY3B1YXQ5MV9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gY3B1YXQ5MV9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUzNWE0NS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjc2IzMzdfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAzLjY4NjQgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMzY4NjQwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY3NiMzM3X2V0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDMiwKLQkuaXNfcm1paQk9IDAsCi0JLyogVGhlIENTQjMzNyBib290bG9hZGVyIHN0b3JlcyB0aGUgTUFDIHRoZSB3cm9uZy13YXkgYXJvdW5kICovCi0JLnJldl9ldGhfYWRkcgk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgY3NiMzM3X3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgY3NiMzM3X3VkY19kYXRhID0gewotCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEEyNCwKLQkudmJ1c19waW4JPSAtRUlOVkFMLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGNzYjMzN19pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oImRzMTMwNyIsIDB4NjgpLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBfX2luaXRkYXRhIGNzYjMzN19jZl9kYXRhID0gewotCS8qCi0JICogY29ubmVjdG9yIFA0IG9uIHRoZSBDU0IgMzM3IG1hdGVzIHRvCi0JICogY29ubmVjdG9yIFA4IG9uIHRoZSBDU0IgMzAwQ0YKLQkgKi8KLQotCS8qIENTQjMzNyBzcGVjaWZpYyAqLwotCS5kZXRfcGluCT0gQVQ5MV9QSU5fUEMzLAotCi0JLyogQ1NCMzAwQ0Ygc3BlY2lmaWMgKi8KLQkuaXJxX3Bpbgk9IEFUOTFfUElOX1BBMTksCi0JLnZjY19waW4JPSBBVDkxX1BJTl9QRDAsCi0JLnJzdF9waW4JPSBBVDkxX1BJTl9QRDIsCi19OwotCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY3NiMzM3X21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEQ1LAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BENiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBjc2IzMzdfc3BpX2RldmljZXNbXSA9IHsKLQl7CS8qIENBTiBjb250cm9sbGVyICovCi0JCS5tb2RhbGlhcwk9ICJzYWs4MmM5MDAiLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gNiAqIDEwMDAgKiAxMDAwLAotCX0sCi19OwotCi0jZGVmaW5lIENTQl9GTEFTSF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8wCi0jZGVmaW5lIENTQl9GTEFTSF9TSVpFCVNaXzhNCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjc2JfZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJCT0gInVNT04gZmxhc2giLAotCQkub2Zmc2V0CQk9IDAsCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogcmVhZCBvbmx5ICovCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgY3NiX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDIsCi0JLnBhcnRzCQk9IGNzYl9mbGFzaF9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY3NiX2ZsYXNoX3BhcnRpdGlvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjc2JfZmxhc2hfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBDU0JfRkxBU0hfQkFTRSwKLQkJLmVuZAk9IENTQl9GTEFTSF9CQVNFICsgQ1NCX0ZMQVNIX1NJWkUgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2JfZmxhc2ggPSB7Ci0JLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhID0gJmNzYl9mbGFzaF9kYXRhLAotCQkJfSwKLQkucmVzb3VyY2UJPSBjc2JfZmxhc2hfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjc2JfZmxhc2hfcmVzb3VyY2VzKSwKLX07Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMgKG9uIENTQjMwMCkKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGNzYjMwMF9idXR0b25zW10gPSB7Ci0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjI5LAotCQkuY29kZQkJPSBCVE5fMCwKLQkJLmRlc2MJCT0gInN3MCIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjI4LAotCQkuY29kZQkJPSBCVE5fMSwKLQkJLmRlc2MJCT0gInN3MSIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTIxLAotCQkuY29kZQkJPSBCVE5fMiwKLQkJLmRlc2MJCT0gInN3MiIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgY3NiMzAwX2J1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gY3NiMzAwX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShjc2IzMDBfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2IzMDBfYnV0dG9uX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZjc2IzMDBfYnV0dG9uX2RhdGEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNzYjMwMF9hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMjksIDEpOwkvKiBzdzAgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjI5LCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMjgsIDEpOwkvKiBzdzEgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjI4LCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMjEsIDEpOwkvKiBzdzIgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTIxLCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3NiMzAwX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBjc2IzMDBfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjc2JfbGVkc1tdID0gewotCXsJLyogImxlZDAiLCB5ZWxsb3cgKi8KLQkJLm5hbWUJCQk9ICJsZWQwIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiAibGVkMSIsIGdyZWVuICovCi0JCS5uYW1lCQkJPSAibGVkMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjEsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibW1jMCIsCi0JfSwKLQl7CS8qICJsZWQyIiwgeWVsbG93ICovCi0JCS5uYW1lCQkJPSAibGVkMiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaWRlLWRpc2siLAotCX0KLX07Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGNzYjMzN19ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMCAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZjc2IzMzdfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNzYjMzN191c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjc2IzMzdfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoY3NiMzM3X2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGNzYjMzN19pMmNfZGV2aWNlcykpOwotCS8qIENvbXBhY3QgRmxhc2ggKi8KLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMjIsIDEpOwkJLyogSU9JUzE2ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2NmKCZjc2IzMzdfY2ZfZGF0YSk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShjc2IzMzdfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoY3NiMzM3X3NwaV9kZXZpY2VzKSk7Ci0JLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmY3NiMzM3X21jaTBfZGF0YSk7Ci0JLyogTk9SIGZsYXNoICovCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjc2JfZmxhc2gpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhjc2JfbGVkcywgQVJSQVlfU0laRShjc2JfbGVkcykpOwotCS8qIFN3aXRjaGVzIG9uIENTQjMwMCAqLwotCWNzYjMwMF9hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLX0KLQotTUFDSElORV9TVEFSVChDU0IzMzcsICJDb2dlbnQgQ1NCMzM3IikKLQkvKiBNYWludGFpbmVyOiBCaWxsIEdhdGxpZmYgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gY3NiMzM3X2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBjc2IzMzdfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiNjM3LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiNjM3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZDAyN2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNzYjYzNy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiNjM3LmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjc2I2MzdfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAzLjY4NjQgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMzY4NjQwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY3NiNjM3X2V0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDMCwKLQkuaXNfcm1paQk9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgY3NiNjM3X3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgY3NiNjM3X3VkY19kYXRhID0gewotCS52YnVzX3BpbiAgICAgPSBBVDkxX1BJTl9QQjI4LAotCS5wdWxsdXBfcGluICAgPSBBVDkxX1BJTl9QQjEsCi19OwotCi0jZGVmaW5lIENTQl9GTEFTSF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8wCi0jZGVmaW5lIENTQl9GTEFTSF9TSVpFCVNaXzE2TQotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY3NiX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJ1TU9OIGZsYXNoIiwKLQkJLm9mZnNldAkJPSAwLAotCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIHJlYWQgb25seSAqLwotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGNzYl9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAyLAotCS5wYXJ0cwkJPSBjc2JfZmxhc2hfcGFydGl0aW9ucywKLQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGNzYl9mbGFzaF9wYXJ0aXRpb25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3NiX2ZsYXNoX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQ1NCX0ZMQVNIX0JBU0UsCi0JCS5lbmQJPSBDU0JfRkxBU0hfQkFTRSArIENTQl9GTEFTSF9TSVpFIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3NiX2ZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YSA9ICZjc2JfZmxhc2hfZGF0YSwKLQkJCX0sCi0JLnJlc291cmNlCT0gY3NiX2ZsYXNoX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3NiX2ZsYXNoX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGNzYl9sZWRzW10gPSB7Ci0JewkvKiAiZDEiLCByZWQgKi8KLQkJLm5hbWUJCQk9ICJkMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjIsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNzYjYzN19ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogTEVEKHMpICovCi0JYXQ5MV9ncGlvX2xlZHMoY3NiX2xlZHMsIEFSUkFZX1NJWkUoY3NiX2xlZHMpKTsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZjc2I2MzdfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNzYjYzN191c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjc2I2MzdfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShOVUxMLCAwKTsKLQkvKiBOT1IgZmxhc2ggKi8KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNzYl9mbGFzaCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQ1NCNjM3LCAiQ29nZW50IENTQjYzNyIpCi0JLyogTWFpbnRhaW5lcjogQmlsbCBHYXRsaWZmICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGNzYjYzN19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gY3NiNjM3X2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXJtOTIwMC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXJtOTIwMC5jCmluZGV4IDIyNjU2M2YuLjc2ZGZlOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1ybTkyMDAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtcm05MjAwLmMKQEAgLTIyLDE0ICsyMiwxMSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhdDkxcm05MjAwX2R0X3RpbWVyX2luaXQodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19DT01NT05fQ0xLKQogCW9mX2Nsa19pbml0KE5VTEwpOwotI2VuZGlmCiAJYXQ5MXJtOTIwMF90aW1lcl9pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW05LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtc2FtOS5jCmluZGV4IGQzMDQ4Y2MuLmY5OTI0NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW05LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbTkuYwpAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKmF0OTFfZHRfYm9hcmRfY29tcGF0W10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW1hNS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbWE1LmMKaW5kZXggMTI5ZTI5MS4uOGZiOWVmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbWE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbWE1LmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2FtYTVfZHRfZGV2aWNlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWIwMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWNmMGE2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWViMDEuYwotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNywgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MWViMDFfaW5pdF9pcnEodm9pZCkKLXsKLQlhdDkxeDQwX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFlYjAxX2luaXRfZWFybHkodm9pZCkKLXsKLQlhdDkxeDQwX2luaXRpYWxpemUoNDAwMDAwMDApOwotfQotCi1NQUNISU5FX1NUQVJUKEFUOTFFQjAxLCAiQXRtZWwgQVQ5MSBFQjAxIikKLQkvKiBNYWludGFpbmVyOiBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPiAqLwotCS5pbml0X3RpbWUJPSBhdDkxeDQwX3RpbWVyX2luaXQsCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gYXQ5MWViMDFfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxZWIwMV9pbml0X2lycSwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjkyMDAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjkyMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE0NTdhOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWI5MjAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjkyMDAuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZSwgYWRhcHRlZCBmb3IgQVRFQjkyMDAgZnJvbSBFbWJlc3QKLSAqICBieSBBbmRyZXcgUGF0cmlrYWxha2lzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBlYjkyMDBfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGViOTIwMF9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzQsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGViOTIwMF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGViOTIwMF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QRDQsCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QRDUsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBfX2luaXRkYXRhIGViOTIwMF9jZl9kYXRhID0gewotCS5pcnFfcGluCT0gLUVJTlZBTCwKLQkuZGV0X3Bpbgk9IEFUOTFfUElOX1BCMCwKLQkudmNjX3Bpbgk9IC1FSU5WQUwsCi0JLnJzdF9waW4JPSBBVDkxX1BJTl9QQzUsCi19OwotCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWI5MjAwX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gLUVJTlZBTCwKLQkJLndwX3BpbgkJPSAtRUlOVkFMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWI5MjAwX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygiMjRjNTEyIiwgMHg1MCksCi0JfSwKLX07Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGViOTIwMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzEsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCXwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8IEFUTUVMX1VBUlRfRENECi0JCQl8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQyIG9uIHR0eVMyLiAoUngsIFR4KSAtIElSREEgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzIsIDIsIDApOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmViOTIwMF9ldGhfZGF0YSk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWI5MjAwX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmViOTIwMF91ZGNfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhlYjkyMDBfaTJjX2RldmljZXMsIEFSUkFZX1NJWkUoZWI5MjAwX2kyY19kZXZpY2VzKSk7Ci0JLyogQ29tcGFjdCBGbGFzaCAqLwotCWF0OTFfYWRkX2RldmljZV9jZigmZWI5MjAwX2NmX2RhdGEpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoTlVMTCwgMCk7Ci0JLyogTU1DICovCi0JLyogb25seSBzdXBwb3J0cyAxIG9yIDQgYml0IGludGVyZmFjZSwgbm90IHdpcmVkIHRocm91Z2ggdG8gU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWI5MjAwX21jaTBfZGF0YSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQVRFQjkyMDAsICJFbWJlc3QgQVRFQjkyMDAiKQotCS5pbml0X3RpbWUJPSBhdDkxcm05MjAwX3RpbWVyX2luaXQsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBlYjkyMDBfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGViOTIwMF9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY2JhdDkxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNiYXQ5MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGUxMzczYy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNiYXQ5MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWNiYXQ5MS5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgZW1RYml0LmNvbS4KLSAqCi0gKiBXZSBzdGFydGVkIGZyb20gYm9hcmQtZGsuYywgd2hpY2ggaXMgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IGVjYl9hdDkxaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBlY2JfYXQ5MWV0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDNCwKLQkuaXNfcm1paQk9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZWNiX2F0OTF1c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBlY2JhdDkxX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gLUVJTlZBTCwKLQkJLndwX3BpbgkJPSAtRUlOVkFMLAotCX0sCi19OwotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NVERfREFUQUZMQVNIKQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgbXlfZmxhc2gwX3BhcnRpdGlvbnNbXSA9Ci17Ci0JewkvKiAweDg0MDAgKi8KLQkJLm5hbWUJPSAiRGFycmVsbC1sb2FkZXIiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSAxMiAqIDEwNTYsCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIlUtYm9vdCIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gMTEwICogMTA1NiwKLQl9LAotCXsJLyogMTMzNiAoMTY3IGJsb2NrcykgcGFnZXMgKiAxMDU2IGJ5dGVzID0gMHgxNTg3MDAgYnl0ZXMgKi8KLQkJLm5hbWUJPSAiVUJvb3QtZW52IiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSA4ICogMTA1NiwKLQl9LAotCXsJLyogMTMzNiAoMTY3IGJsb2NrcykgcGFnZXMgKiAxMDU2IGJ5dGVzID0gMHgxNTg3MDAgYnl0ZXMgKi8KLQkJLm5hbWUJPSAiS2VybmVsIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSAxNTM0ICogMTA1NiwKLQl9LAotCXsJLyogMTkwMjAwIC0gamZmczIgcm9vdCBmaWxlc3lzdGVtICovCi0JCS5uYW1lCT0gIkZpbGVzeXN0ZW0iLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCS8qIDI2IHNlY3RvcnMgKi8KLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBteV9mbGFzaDBfcGxhdGZvcm0gPSB7Ci0JLm5hbWUJCT0gIlJlbW92YWJsZSBmbGFzaCBjYXJkIiwKLQkucGFydHMJCT0gbXlfZmxhc2gwX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRShteV9mbGFzaDBfcGFydGl0aW9ucykKLX07Ci0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWNiX2F0OTFzcGlfZGV2aWNlc1tdID0gewotCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTAgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpCi0JCS5wbGF0Zm9ybV9kYXRhCT0gJm15X2ZsYXNoMF9wbGF0Zm9ybSwKLSNlbmRpZgotCX0sCi0JewkvKiBVc2VyIGFjY2Vzc2libGUgc3BpIC0gY3MxICgyNTBLSHopICovCi0JCS5tb2RhbGlhcwk9ICJzcGktY3MxIiwKLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDI1MCAqIDEwMDAsCi0JfSwKLQl7CS8qIFVzZXIgYWNjZXNzaWJsZSBzcGkgLSBjczIgKDFNSHopICovCi0JCS5tb2RhbGlhcwk9ICJzcGktY3MyIiwKLQkJLmNoaXBfc2VsZWN0CT0gMiwKLQkJLm1heF9zcGVlZF9oegk9IDEgKiAxMDAwICogMTAwMCwKLQl9LAotCXsJLyogVXNlciBhY2Nlc3NpYmxlIHNwaSAtIGNzMyAoMTBNSHopICovCi0JCS5tb2RhbGlhcwk9ICJzcGktY3MzIiwKLQkJLmNoaXBfc2VsZWN0CT0gMywKLQkJLm1heF9zcGVlZF9oegk9IDEwICogMTAwMCAqIDEwMDAsCi0JfSwKLX07Ci0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWNiX2xlZHNbXSA9IHsKLQl7CS8qIEQxICovCi0JCS5uYW1lCQkJPSAibGVkMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzcsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWNiX2F0OTFib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMwLCAxLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0KLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmVjYl9hdDkxZXRoX2RhdGEpOwotCi0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWNiX2F0OTF1c2JoX2RhdGEpOwotCi0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVjYmF0OTFfbWNpMF9kYXRhKTsKLQotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWNiX2F0OTFzcGlfZGV2aWNlcywgQVJSQVlfU0laRShlY2JfYXQ5MXNwaV9kZXZpY2VzKSk7Ci0KLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoZWNiX2xlZHMsIEFSUkFZX1NJWkUoZWNiX2xlZHMpKTsKLX0KLQotTUFDSElORV9TVEFSVChFQ0JBVDkxLCAiZW1RYml0J3MgRUNCX0FUOTEiKQotCS8qIE1haW50YWluZXI6IGVtUWJpdC5jb20gKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWNiX2F0OTFpbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWNiX2F0OTFib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY285MjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY285MjAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU3NTMyMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNvOTIwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9tYy5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9yYW1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBlY285MjBfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVjbzkyMF9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzIsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVjbzkyMF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGVjbzkyMF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQjEyLAotCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEIxMywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBlY285MjBfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gMSwKLQkJLmRldGVjdF9waW4JPSAtRUlOVkFMLAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVjbzkyMF9mbGFzaF9kYXRhID0gewotCS53aWR0aCAgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlY285MjBfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0ICAgICAgICAgID0gMHgxMTAwMDAwMCwKLQkuZW5kICAgICAgICAgICAgPSAweDExZmZmZmZmLAotCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWNvOTIwX2ZsYXNoID0gewotCS5uYW1lICAgICAgICAgICA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQgICAgICAgICAgICAgPSAwLAotCS5kZXYgICAgICAgICAgICA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgID0gJmVjbzkyMF9mbGFzaF9kYXRhLAotCX0sCi0JLnJlc291cmNlICAgICAgID0gJmVjbzkyMF9mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcyAgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBlY285MjBfc3BpX2RldmljZXNbXSA9IHsKLQl7CS8qIENBTiBjb250cm9sbGVyICovCi0JCS5tb2RhbGlhcwk9ICJ0bHY1NjM4IiwKLQkJLmNoaXBfc2VsZWN0CT0gMywKLQkJLm1heF9zcGVlZF9oegk9IDIwICogMTAwMCAqIDEwMDAsCi0JCS5tb2RlCQk9IFNQSV9DUEhBLAotCX0sCi19OwotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVjbzkyMF9sZWRzW10gPSB7Ci0JeyAgICAgICAvKiBEMSAqLwotCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJsZWQxIiwKLQkJLmdwaW8gICAgICAgICAgICAgICAgICAgPSBBVDkxX1BJTl9QQjAsCi0JCS5hY3RpdmVfbG93ICAgICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlciAgICAgICAgPSAiaGVhcnRiZWF0IiwKLQl9LAotCXsgICAgICAgLyogRDIgKi8KLQkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAibGVkMiIsCi0JCS5ncGlvICAgICAgICAgICAgICAgICAgID0gQVQ5MV9QSU5fUEIxLAotCQkuYWN0aXZlX2xvdyAgICAgICAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIgICAgICAgID0gInRpbWVyIiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWNvOTIwX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5ICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZlY285MjBfZXRoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZlY285MjBfdXNiaF9kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZlY285MjBfdWRjX2RhdGEpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWNvOTIwX21jaTBfZGF0YSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlY285MjBfZmxhc2gpOwotCi0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfU01DX0NTUig3KSwJQVQ5MV9TTUNfUldIT0xEXygxKQotCQkJCXwgQVQ5MV9TTUNfUldTRVRVUF8oMSkKLQkJCQl8IEFUOTFfU01DX0RCV184Ci0JCQkJfCBBVDkxX1NNQ19XU0VOCi0JCQkJfCBBVDkxX1NNQ19OV1NfKDE1KSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzYsIDEpOwotCi0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTIzLCAwKTsKLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTIzLCAxKTsKLQotLyogSW5pdGlhbGl6YXRpb24gb2YgdGhlIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciBmb3IgQ2hpcCBTZWxlY3QgMyAqLwotCWF0OTFfcmFtY193cml0ZSgwLCBBVDkxX1NNQ19DU1IoMyksCi0JCUFUOTFfU01DX0RCV18xNiAgfAkvKiAxNiBiaXQgKi8KLQkJQVQ5MV9TTUNfV1NFTiAgICB8Ci0JCUFUOTFfU01DX05XU18oNSkgfAkvKiB3YWl0IHN0YXRlcyAqLwotCQlBVDkxX1NNQ19UREZfKDEpCS8qIGZsb2F0IHRpbWUgKi8KLQkpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShlY285MjBfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWNvOTIwX3NwaV9kZXZpY2VzKSk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVjbzkyMF9sZWRzLCBBUlJBWV9TSVpFKGVjbzkyMF9sZWRzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoRUNPOTIwLCAiZWNvOTIwIikKLQkvKiBNYWludGFpbmVyOiBTYXNjaGEgSGF1ZXIgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWNvOTIwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBlY285MjBfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZmxleGliaXR5LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZmxleGliaXR5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YWE0YTIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWZsZXhpYml0eS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZmxleGliaXR5LmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRmxleGliaXR5Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBmbGV4aWJpdHlfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi0vKiBVU0IgSG9zdCBwb3J0ICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZmxleGliaXR5X3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotLyogVVNCIERldmljZSBwb3J0ICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBmbGV4aWJpdHlfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM1LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotLyogSTJDIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBmbGV4aWJpdHlfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJkczEzMDciLCAweDY4KSwKLQl9LAotfTsKLQotLyogU1BJIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZmxleGliaXR5X3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDEsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLX07Ci0KLS8qIE1DSSAoU0QvTU1DKSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGZsZXhpYml0eV9tY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BDOSwKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QQzQsCi0JfSwKLX07Ci0KLS8qIExFRHMgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmxleGliaXR5X2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMTpncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTEyLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjE6cmVkIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMTMsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMjpncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjI2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjI6cmVkIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMjcsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMzpncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzgsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMzpyZWQiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEM2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjQ6Z3JlZW4iLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI0LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjQ6cmVkIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCNSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZmxleGliaXR5X2JvYXJkX2luaXQodm9pZCkKLXsKLQlhdDkxX3JlZ2lzdGVyX2RldmljZXMoKTsKLQotCS8qIFNlcmlhbCAqLwotCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZmbGV4aWJpdHlfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmZmxleGliaXR5X3VkY19kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGZsZXhpYml0eV9pMmNfZGV2aWNlcywKLQkJQVJSQVlfU0laRShmbGV4aWJpdHlfaTJjX2RldmljZXMpKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGZsZXhpYml0eV9zcGlfZGV2aWNlcywKLQkJQVJSQVlfU0laRShmbGV4aWJpdHlfc3BpX2RldmljZXMpKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZmbGV4aWJpdHlfbWNpMF9kYXRhKTsKLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoZmxleGliaXR5X2xlZHMsIEFSUkFZX1NJWkUoZmxleGliaXR5X2xlZHMpKTsKLX0KLQotTUFDSElORV9TVEFSVChGTEVYSUJJVFksICJGbGV4aWJpdHkgQ29ubmVjdCIpCi0JLyogTWFpbnRhaW5lcjogTWF4aW0gT3NpcG92ICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZmxleGliaXR5X2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBmbGV4aWJpdHlfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZ3NpYTE4cy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWdzaWExOHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY1Y2M1NWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWdzaWExOHMuYworKysgL2Rldi9udWxsCkBAIC0xLDU4NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAxMCBDaHJpc3RpYW4gR2xpbmRrYW1wIDxjaHJpc3RpYW4uZ2xpbmRrYW1wQHRhc2tpdC5kZT4KLSAqICAgICAgICAgICAgICAgICAgICAgdGFza2l0IEdtYkgKLSAqICAgICAgICAgICAgICAgIDIwMTAgSWdvciBQbHlhdG92IDxwbHlhdG92QGdtYWlsLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgR2VvU0lHIEx0ZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3cxLWdwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvcGNmODU3eC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdzaWExOHMuaCIKLSNpbmNsdWRlICJzdGFtcDlnMjAuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX2luaXRfZWFybHkodm9pZCkKLXsKLQlzdGFtcDlnMjBfaW5pdF9lYXJseSgpOwotfQotCi0vKgotICogVHdvIFVTQiBIb3N0IHBvcnRzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSB1c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEEyMiwKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLS8qCi0gKiBNQUNCIEV0aGVybmV0IGRldmljZQotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQTI4LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLS8qCi0gKiBMRURzIGFuZCBHUE9zCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJCT0gImdwbzpzcGkxcmVzZXQiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxLAotCQkuYWN0aXZlX2xvdwkJPSAwLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JewotCQkubmFtZQkJCT0gImdwbzp0cmlnX25ldF9vdXQiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIyMCwKLQkJLmFjdGl2ZV9sb3cJCT0gMCwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsKLQkJLm5hbWUJCQk9ICJncG86dHJpZ19uZXRfZGlyIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTksCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAiZ3BvOmNoYXJnZV9kaXMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMyLAotCQkuYWN0aXZlX2xvdwkJPSAwLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JewotCQkubmFtZQkJCT0gImxlZDpldmVudCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE3LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JewotCQkubmFtZQkJCT0gImxlZDpsYW4iLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxOCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsKLQkJLm5hbWUJCQk9ICJsZWQ6ZXJyb3IiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxNiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09OLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBncGlvX2xlZF9pbmZvID0gewotCS5sZWRzCQk9IGdwaW9fbGVkcywKLQkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKGdwaW9fbGVkcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsZWRzID0gewotCS5uYW1lCT0gImxlZHMtZ3BpbyIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZncGlvX2xlZF9pbmZvLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX2xlZHNfaW5pdCh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbGVkcyk7Ci19Ci0KLS8qIFBDRjg1NzQgMHgyMCBHUElPIC0gVTEgb24gdGhlIEdTX0lBMTgtQ0JfVjMgYm9hcmQgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcGNmX2dwaW9fbGVkczFbXSA9IHsKLQl7IC8qIGJpdCAwICovCi0JCS5uYW1lCQkJPSAiZ3BvOmhkY19wb3dlciIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19IRENfUE9XRVIsCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCAxICovCi0JCS5uYW1lCQkJPSAiZ3BvOndpZmlfc2V0dXAiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fV0lGSV9TRVRVUCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsgLyogYml0IDIgKi8KLQkJLm5hbWUJCQk9ICJncG86d2lmaV9lbmFibGUiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fV0lGSV9FTkFCTEUsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCAzCSovCi0JCS5uYW1lCQkJPSAiZ3BvOndpZmlfcmVzZXQiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fV0lGSV9SRVNFVCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09OLAotCX0sCi0JLyogYml0IDQgdXNlZCBhcyBHUEkJKi8KLQl7IC8qIGJpdCA1ICovCi0JCS5uYW1lCQkJPSAiZ3BvOmdwc19zZXR1cCIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19HUFNfU0VUVVAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCA2ICovCi0JCS5uYW1lCQkJPSAiZ3BvOmdwc19zdGFuZGJ5IiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX0dQU19TVEFOREJZLAotCQkuYWN0aXZlX2xvdwkJPSAwLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfSwKLQl7IC8qIGJpdCA3ICovCi0JCS5uYW1lCQkJPSAiZ3BvOmdwc19wb3dlciIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19HUFNfUE9XRVIsCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHBjZl9ncGlvX2xlZF9pbmZvMSA9IHsKLQkubGVkcwkJPSBwY2ZfZ3Bpb19sZWRzMSwKLQkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHBjZl9ncGlvX2xlZHMxKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjZl9sZWRzMSA9IHsKLQkubmFtZQk9ICJsZWRzLWdwaW8iLCAvKiBHU19JQTE4LUNCX2JvYXJkICovCi0JLmlkCT0gMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZwY2ZfZ3Bpb19sZWRfaW5mbzEsCi0JfQotfTsKLQotLyogUENGODU3NCAweDIyIEdQSU8gLSBVMSBvbiB0aGUgR1NfMkdfT1BUMS1BX1YwIGJvYXJkIChBbGFybSkgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcGNmX2dwaW9fbGVkczJbXSA9IHsKLQl7IC8qIGJpdCAwICovCi0JCS5uYW1lCQkJPSAiZ3BvOmFsYXJtXzEiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fQUxBUk0xLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JeyAvKiBiaXQgMSAqLwotCQkubmFtZQkJCT0gImdwbzphbGFybV8yIiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX0FMQVJNMiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsgLyogYml0IDIgKi8KLQkJLm5hbWUJCQk9ICJncG86YWxhcm1fMyIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19BTEFSTTMsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCAzICovCi0JCS5uYW1lCQkJPSAiZ3BvOmFsYXJtXzQiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fQUxBUk00LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JLyogYml0cyA0LCA1LCA2IG5vdCB1c2VkICovCi0JeyAvKiBiaXQgNyAqLwotCQkubmFtZQkJCT0gImdwbzphbGFybV92X3JlbGF5X29uIiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX0FMQVJNX1ZfUkVMQVlfT04sCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBwY2ZfZ3Bpb19sZWRfaW5mbzIgPSB7Ci0JLmxlZHMJCT0gcGNmX2dwaW9fbGVkczIsCi0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShwY2ZfZ3Bpb19sZWRzMiksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY2ZfbGVkczIgPSB7Ci0JLm5hbWUJPSAibGVkcy1ncGlvIiwKLQkuaWQJPSAyLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnBjZl9ncGlvX2xlZF9pbmZvMiwKLQl9Ci19OwotCi0vKiBQQ0Y4NTc0IDB4MjQgR1BJTyBVMSBvbiB0aGUgR1NfMkctT1BUMjMtQV9WMCBib2FyZCAoTW9kZW0pICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHBjZl9ncGlvX2xlZHMzW10gPSB7Ci0JeyAvKiBiaXQgMCAqLwotCQkubmFtZQkJCT0gImdwbzptb2RlbV9wb3dlciIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19NT0RFTV9QT1dFUiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCQkvKiBiaXRzIDEgYW5kIDIgbm90IHVzZWQgKi8KLQl7IC8qIGJpdCAzICovCi0JCS5uYW1lCQkJPSAiZ3BvOm1vZGVtX3Jlc2V0IiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX01PREVNX1JFU0VULAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfSwKLQkJLyogYml0cyA0LCA1IGFuZCA2IG5vdCB1c2VkICovCi0JeyAvKiBiaXQgNyAqLwotCQkubmFtZQkJCT0gImdwbzp0cnhfcmVzZXQiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fVFJYX1JFU0VULAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHBjZl9ncGlvX2xlZF9pbmZvMyA9IHsKLQkubGVkcwkJPSBwY2ZfZ3Bpb19sZWRzMywKLQkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHBjZl9ncGlvX2xlZHMzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjZl9sZWRzMyA9IHsKLQkubmFtZQk9ICJsZWRzLWdwaW8iLAotCS5pZAk9IDMsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmcGNmX2dwaW9fbGVkX2luZm8zLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX3BjZl9sZWRzX2luaXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjZl9sZWRzMSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY2ZfbGVkczIpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNmX2xlZHMzKTsKLX0KLQotLyoKLSAqIFNQSSBidXNzZXMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZ3NpYTE4c19zcGlfZGV2aWNlc1tdID0gewotCXsgLyogVXNlciBhY2Nlc3NpYmxlIHNwaTAsIGNzMCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggTVNQIFJUQyAqLwotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmJ1c19udW0JPSAwLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gNTgwMDAwLAotCQkubW9kZQkJPSBTUElfTU9ERV8xLAotCX0sCi0JeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpMSwgY3MwIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBpbnQuIERTUCAqLwotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmJ1c19udW0JPSAxLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gNTYwMDAwMCwKLQkJLm1vZGUJCT0gU1BJX01PREVfMCwKLQl9LAotCXsgLyogVXNlciBhY2Nlc3NpYmxlIHNwaTEsIGNzMSB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggZXh0LiBEU1AgKi8KLQkJLm1vZGFsaWFzCT0gInNwaWRldiIsCi0JCS5idXNfbnVtCT0gMSwKLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDU2MDAwMDAsCi0JCS5tb2RlCQk9IFNQSV9NT0RFXzAsCi0JfSwKLQl7IC8qIFVzZXIgYWNjZXNzaWJsZSBzcGkxLCBjczIgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGV4dC4gRFNQICovCi0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAotCQkuYnVzX251bQk9IDEsCi0JCS5jaGlwX3NlbGVjdAk9IDIsCi0JCS5tYXhfc3BlZWRfaHoJPSA1NjAwMDAwLAotCQkubW9kZQkJPSBTUElfTU9ERV8wLAotCX0sCi0JeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpMSwgY3MzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBleHQuIERTUCAqLwotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmJ1c19udW0JPSAxLAotCQkuY2hpcF9zZWxlY3QJPSAzLAotCQkubWF4X3NwZWVkX2h6CT0gNTYwMDAwMCwKLQkJLm1vZGUJCT0gU1BJX01PREVfMCwKLQl9Ci19OwotCi0vKgotICogR1BJIEJ1dHRvbnMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGJ1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEdQSU9fVFJJR19ORVRfSU4sCi0JCS5jb2RlCQk9IEJUTl8xLAotCQkuZGVzYwkJPSAiVFJJR19ORVRfSU4iLAotCQkudHlwZQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CT0gMCwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JeyAvKiBTVzgwIG9uIHRoZSBHU19JQTE4X1MtTU4gYm9hcmQqLwotCQkuZ3BpbwkJPSBHUElPX0NBUkRfVU5NT1VOVF8wLAotCQkuY29kZQkJPSBCVE5fMiwKLQkJLmRlc2MJCT0gIkNhcmQgdW1vdW50IDAiLAotCQkudHlwZQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JeyAvKiBTVzc5IG9uIHRoZSBHU19JQTE4X1MtTU4gYm9hcmQqLwotCQkuZ3BpbwkJPSBHUElPX0NBUkRfVU5NT1VOVF8xLAotCQkuY29kZQkJPSBCVE5fMywKLQkJLmRlc2MJCT0gIkNhcmQgdW1vdW50IDEiLAotCQkudHlwZQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JeyAvKiBTVzI4MCBvbiB0aGUgR1NfSUExOC1DQiBib2FyZCovCi0JCS5ncGlvCQk9IEdQSU9fS0VZX1BPV0VSLAotCQkuY29kZQkJPSBLRVlfUE9XRVIsCi0JCS5kZXNjCQk9ICJQb3dlciBPZmYgQnV0dG9uIiwKLQkJLnR5cGUJCT0gRVZfS0VZLAotCQkuYWN0aXZlX2xvdwk9IDAsCi0JCS53YWtldXAJCT0gMSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGJ1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGJ1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYnV0dG9uX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZidXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZ3NpYTE4c19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEdQSU9fVFJJR19ORVRfSU4sIDEpOwotCWF0OTFfc2V0X2RlZ2xpdGNoKEdQSU9fVFJJR19ORVRfSU4sIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoR1BJT19DQVJEX1VOTU9VTlRfMCwgMSk7Ci0JYXQ5MV9zZXRfZGVnbGl0Y2goR1BJT19DQVJEX1VOTU9VTlRfMCwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChHUElPX0NBUkRfVU5NT1VOVF8xLCAxKTsKLQlhdDkxX3NldF9kZWdsaXRjaChHUElPX0NBUkRfVU5NT1VOVF8xLCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEdQSU9fS0VZX1BPV0VSLCAwKTsKLQlhdDkxX3NldF9kZWdsaXRjaChHUElPX0tFWV9QT1dFUiwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJ1dHRvbl9kZXZpY2UpOwotfQotCi0vKgotICogSTJDCi0gKi8KLXN0YXRpYyBpbnQgcGNmODU3NHhfMHgyMF9zZXR1cChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZ3BpbywKLQkJCQl1bnNpZ25lZCBpbnQgbmdwaW8sIHZvaWQgKmNvbnRleHQpCi17Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChncGlvICsgUENGX0dQSU9fRVRIX0RFVEVDVCwgImV0aF9kZXQiKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcl9lcnIoImVycm9yOiBjYW4ndCByZXF1ZXN0IEdQSU8lZFxuIiwKLQkJCWdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNUKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0Jc3RhdHVzID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3BpbyArIFBDRl9HUElPX0VUSF9ERVRFQ1QpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCXByX2VycigiZXJyb3I6IGNhbid0IHNldHVwIEdQSU8lZCBhcyBpbnB1dFxuIiwKLQkJCWdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNUKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0Jc3RhdHVzID0gZ3Bpb19leHBvcnQoZ3BpbyArIFBDRl9HUElPX0VUSF9ERVRFQ1QsIGZhbHNlKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcl9lcnIoImVycm9yOiBjYW4ndCBleHBvcnQgR1BJTyVkXG4iLAotCQkJZ3BpbyArIFBDRl9HUElPX0VUSF9ERVRFQ1QpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlzdGF0dXMgPSBncGlvX3N5c2ZzX3NldF9hY3RpdmVfbG93KGdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNULCAxKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcl9lcnIoImVycm9yOiBncGlvX3N5c2ZzX3NldCBhY3RpdmVfbG93KEdQSU8lZCwgMSlcbiIsCi0JCQlncGlvICsgUENGX0dQSU9fRVRIX0RFVEVDVCk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNmODU3NHhfMHgyMF90ZWFyZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZ3BpbywKLQkJCQkJdW5zaWduZWQgbmdwaW8sIHZvaWQgKmNvbnRleHQpCi17Ci0JZ3Bpb19mcmVlKGdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNUKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmMjBfcGRhdGEgPSB7Ci0JLmdwaW9fYmFzZQk9IEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCwKLQkubl9sYXRjaAk9ICgxIDw8IDQpLAotCS5zZXR1cAkJPSBwY2Y4NTc0eF8weDIwX3NldHVwLAotCS50ZWFyZG93bgk9IHBjZjg1NzR4XzB4MjBfdGVhcmRvd24sCi19OwotCi1zdGF0aWMgc3RydWN0IHBjZjg1N3hfcGxhdGZvcm1fZGF0YSBwY2YyMl9wZGF0YSA9IHsKLQkuZ3Bpb19iYXNlCT0gR1NfSUExOF9TX1BDRl9HUElPX0JBU0UxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmMjRfcGRhdGEgPSB7Ci0JLmdwaW9fYmFzZQk9IEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBnc2lhMThzX2kyY19kZXZpY2VzW10gPSB7Ci0JeyAvKiBVMSBvbiB0aGUgR1NfSUExOC1DQl9WMyBib2FyZCAqLwotCQlJMkNfQk9BUkRfSU5GTygicGNmODU3NCIsIDB4MjApLAotCQkucGxhdGZvcm1fZGF0YSA9ICZwY2YyMF9wZGF0YSwKLQl9LAotCXsgLyogVTEgb24gdGhlIEdTXzJHX09QVDEtQV9WMCBib2FyZCAoQWxhcm0pICovCi0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc0IiwgMHgyMiksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjIyX3BkYXRhLAotCX0sCi0JeyAvKiBVMSBvbiB0aGUgR1NfMkctT1BUMjMtQV9WMCBib2FyZCAoTW9kZW0pICovCi0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc0IiwgMHgyNCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjI0X3BkYXRhLAotCX0sCi0JeyAvKiBVMTYxIG9uIHRoZSBHU19JQTE4X1MtTU4gYm9hcmQgKi8KLQkJSTJDX0JPQVJEX0lORk8oIjI0YzEwMjQiLCAweDUwKSwKLQl9LAotCXsgLyogVTE2MiBvbiB0aGUgR1NfSUExOF9TLU1OIGJvYXJkICovCi0JCUkyQ19CT0FSRF9JTkZPKCIyNGMwMSIsIDB4NTMpLAotCX0sCi19OwotCi0vKgotICogQ29tcGFjdCBGbGFzaAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBfX2luaXRkYXRhIGdzaWExOHNfY2YxX2RhdGEgPSB7Ci0JLmlycV9waW4JPSBBVDkxX1BJTl9QQTI3LAotCS5kZXRfcGluCT0gQVQ5MV9QSU5fUEIzMCwKLQkudmNjX3Bpbgk9IC1FSU5WQUwsCi0JLnJzdF9waW4JPSBBVDkxX1BJTl9QQjMxLAotCS5jaGlwc2VsZWN0CT0gNSwKLQkuZmxhZ3MJCT0gQVQ5MV9DRl9UUlVFX0lERSwKLX07Ci0KLS8qIFBvd2VyIE9mZiBieSBSVEMgKi8KLXN0YXRpYyB2b2lkIGdzaWExOHNfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JcHJfbm90aWNlKCJQb3dlciBzdXBwbHkgd2lsbCBiZSBzd2l0Y2hlZCBvZmYgYXV0b21hdGljYWxseSBub3cgb3IgYWZ0ZXIgNjAgc2Vjb25kcyB3aXRob3V0IEFybURBUy5cbiIpOwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BBMjUsIDEpOwotCS8qIFNwaW4gdG8gZGVhdGguLi4gKi8KLQl3aGlsZSAoMSkKLQkJOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBnc2lhMThzX3Bvd2VyX29mZl9pbml0KHZvaWQpCi17Ci0JcG1fcG93ZXJfb2ZmID0gZ3NpYTE4c19wb3dlcl9vZmY7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKgotCSAqIFVTQVJUMCBvbiB0dHlTMSAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpLgotCSAqIFVzZWQgZm9yIEludGVybmFsIEFuYWxvZyBNb2RlbS4KLQkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLAotCQkJCUFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMgfAotCQkJCUFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfAotCQkJCUFUTUVMX1VBUlRfRENEIHwgQVRNRUxfVUFSVF9SSSk7Ci0JLyoKLQkgKiBVU0FSVDEgb24gdHR5UzIgKFJ4LCBUeCwgQ1RTLCBSVFMpLgotCSAqIFVzZWQgZm9yIEdQUyBvciBXaUZpIG9yIERhdGEgc3RyZWFtLgotCSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsCi0JCQkJQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JLyoKLQkgKiBVU0FSVDIgb24gdHR5UzMgKFJ4LCBUeCwgQ1RTLCBSVFMpLgotCSAqIFVzZWQgZm9yIEV4dGVybmFsIE1vZGVtLgotCSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzIsIDMsCi0JCQkJQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JLyoKLQkgKiBVU0FSVDMgb24gdHR5UzQgKFJ4LCBUeCwgUlRTKS4KLQkgKiBVc2VkIGZvciBSUy00ODUuCi0JICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMywgNCwgQVRNRUxfVUFSVF9SVFMpOwotCi0JLyoKLQkgKiBVU0FSVDQgb24gdHR5UzUgKFJ4LCBUeCkuCi0JICogVXNlZCBmb3IgVFJYNDMzIFJhZGlvIE1vZHVsZS4KLQkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVM0LCA1LCAwKTsKLQlzdGFtcDlnMjBfYm9hcmRfaW5pdCgpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZ1c2JoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnVkY19kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZtYWNiX2RhdGEpOwotCWdzaWExOHNfbGVkc19pbml0KCk7Ci0JZ3NpYTE4c19wY2ZfbGVkc19pbml0KCk7Ci0JZ3NpYTE4c19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGdzaWExOHNfaTJjX2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShnc2lhMThzX2kyY19kZXZpY2VzKSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX2NmKCZnc2lhMThzX2NmMV9kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGdzaWExOHNfc3BpX2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShnc2lhMThzX3NwaV9kZXZpY2VzKSk7Ci0JZ3NpYTE4c19wb3dlcl9vZmZfaW5pdCgpOwotfQotCi1NQUNISU5FX1NUQVJUKEdTSUExOFMsICJHU19JQTE4X1MiKQotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGdzaWExOHNfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGdzaWExOHNfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWthZmEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNiMWRmNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNiBTcGVycnktU3VuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQga2FmYV9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogU2V0IGNwdSB0eXBlOiBQUUZQICovCi0JYXQ5MXJtOTIwMF9zZXRfdHlwZShBUkNIX1JFVklTT05fOTIwMF9QUUZQKTsKLQotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGthZmFfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAotCS5pc19ybWlpCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBrYWZhX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMSwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEga2FmYV91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQjYsCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QQjcsCi19OwotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGthZmFfbGVkc1tdID0gewotCXsJLyogRDEgKi8KLQkJLm5hbWUJCQk9ICJsZWQxIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCNCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQga2FmYV9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEgKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZrYWZhX2V0aF9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZrYWZhX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmthZmFfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShOVUxMLCAwKTsKLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoa2FmYV9sZWRzLCBBUlJBWV9TSVpFKGthZmFfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKEtBRkEsICJTcGVycnktU3VuIEtBRkEiKQotCS8qIE1haW50YWluZXI6IFNlcmdlaSBTaGFyb25vdiAqLwotCS5pbml0X3RpbWUJPSBhdDkxcm05MjAwX3RpbWVyX2luaXQsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBrYWZhX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBrYWZhX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNThkMzYyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1rYjkyMDIuYworKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwNSBrYl9hZG1pbgotICogIAkJICAgICAgIEt3aWtCeXRlLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBrYjkyMDJfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTAgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTAwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGtiOTIwMl9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQjI5LAotCS5pc19ybWlpCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBrYjkyMDJfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAxLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBrYjkyMDJfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEIyNCwKLQkucHVsbHVwX3Bpbgk9IEFUOTFfUElOX1BCMjIsCi19OwotCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEga2I5MjAyX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEIyLAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGtiOTIwMl9uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAibmFuZF9mcyIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEga2I5MjAyX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIyLAotCS5jbGUJCT0gMjEsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMyOSwKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMjgsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkucGFydHMJCT0ga2I5MjAyX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGtiOTIwMl9uYW5kX3BhcnRpdGlvbiksCi19OwotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGtiOTIwMl9sZWRzW10gPSB7Ci0JewkvKiBEMSAqLwotCQkubmFtZQkJCT0gImxlZDEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiBEMiAqLwotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxOCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJ0aW1lciIsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGtiOTIwMl9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEgKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzAsIDEsIDApOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyIChSeCAmIFR4IG9ubHkpIC0gSVJEQSAob3B0aW9uYWwpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMxLCAyLCAwKTsKLQotCS8qIFVTQVJUMyBvbiB0dHlTMyAoUngsIFR4LCBDVFMsIFJUUykgLSBSUzQ4NSAob3B0aW9uYWwpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMzLCAzLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZrYjkyMDJfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmtiOTIwMl91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZrYjkyMDJfdWRjX2RhdGEpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmtiOTIwMl9tY2kwX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShOVUxMLCAwKTsKLQkvKiBOQU5EICovCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmtiOTIwMl9uYW5kX2RhdGEpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhrYjkyMDJfbGVkcywgQVJSQVlfU0laRShrYjkyMDJfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKEtCOTIwMCwgIktCOTIweCIpCi0JLyogTWFpbnRhaW5lcjogS3dpa0J5dGUsIEluYy4gKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0ga2I5MjAyX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBrYjkyMDJfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGNvbnRyb2wtZzIwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGNvbnRyb2wtZzIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMjZiOTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXBjb250cm9sLWcyMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzdGlhbiBHbGluZGthbXAgPGNocmlzdGlhbi5nbGluZGthbXBAdGFza2l0LmRlPgotICogICAgICAgICAgICAgICAgICAgICB0YXNraXQgR21iSAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotLyoKLSAqIGNvcGllZCBhbmQgYWRqdXN0ZWQgZnJvbSBib2FyZC1zdGFtcDlnMjAuYwotICogYnkgUGV0ZXIgR3NlbGxtYW5uIDxwZ3NlbGxtYW5uQHBvcnRuZXItZWxla3Ryb25pay5hdD4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdzEtZ3Bpby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzdGFtcDlnMjAuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjb250cm9sX2cyMF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0Jc3RhbXA5ZzIwX2luaXRfZWFybHkoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBwY29udHJvbF9zbWNfY29uZmlnWzJdID0geyB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDE2LAotCS5ucmRfc2V0dXAJCT0gMTgsCi0JLm5jc193cml0ZV9zZXR1cAk9IDE2LAotCS5ud2Vfc2V0dXAJCT0gMTgsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gNjMsCi0JLm5yZF9wdWxzZQkJPSA1NSwKLQkubmNzX3dyaXRlX3B1bHNlCT0gNjMsCi0JLm53ZV9wdWxzZQkJPSA1NSwKLQotCS5yZWFkX2N5Y2xlCQk9IDEyNywKLQkud3JpdGVfY3ljbGUJCT0gMTI3LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfU0VMRUNUCi0JCQl8IEFUOTFfU01DX0RCV184IHwgQVQ5MV9TTUNfUFNfNAotCQkJfCBBVDkxX1NNQ19UREZNT0RFLAotCS50ZGZfY3ljbGVzCQk9IDMsCi19LCB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAwLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMSwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSA4LAotCS5ucmRfcHVsc2UJCT0gOCwKLQkubmNzX3dyaXRlX3B1bHNlCT0gNSwKLQkubndlX3B1bHNlCQk9IDQsCi0KLQkucmVhZF9jeWNsZQkJPSA4LAotCS53cml0ZV9jeWNsZQkJPSA3LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfU0VMRUNUCi0JCQl8IEFUOTFfU01DX0RCV18xNiB8IEFUOTFfU01DX1BTXzgKLQkJCXwgQVQ5MV9TTUNfVERGTU9ERSwKLQkudGRmX2N5Y2xlcwkJPSAxLAotfSB9OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYWRkX2RldmljZV9wY29udHJvbCh2b2lkKQotewotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCA0IChJTyBjb21wYXRpYmxlIHRvIDgwNTEgIFg0ICkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgNCwgJnBjb250cm9sX3NtY19jb25maWdbMF0pOwotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCA3IChGZXJyb1JBTSAyNTZLaUJ4MTZiaXQgTVIyQTE2QSAgRDQgKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCA3LCAmcGNvbnRyb2xfc21jX2NvbmZpZ1sxXSk7Ci19Ci0KLQotLyoKLSAqIFVTQiBIb3N0IHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIHVzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotCi0vKgotICogVVNCIERldmljZSBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIHBjb250cm9sX2cyMF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQTIyLAkvKiBEZXRlY3QgKzVWIGJ1cyB2b2x0YWdlICovCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QQTQsCQkvKiBLLXN0YXRlLCBhY3RpdmUgbG93ICovCi19OwotCi0KLS8qCi0gKiBNQUNCIEV0aGVybmV0IGRldmljZQotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQTI4LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLQotLyoKLSAqIEkyQyBkZXZpY2VzOiBlZXByb20gYW5kIHBoeS9zd2l0Y2gKLSAqLwotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHBjb250cm9sX2cyMF9pMmNfZGV2aWNlc1tdID0gewotewkJLyogRDcgIGFkZHJlc3Mgd2lkdGg9MiwgOEtpQiAqLwotCUkyQ19CT0FSRF9JTkZPKCIyNGM2NCIsIDB4NTApCi19LCB7CQkvKiBEOCAgYWRkcmVzcyB3aWR0aD0xLCAxIGJ5dGUgaGFzIDMyIGJpdHMhICovCi0JSTJDX0JPQVJEX0lORk8oImxhbjkzMDMiLCAweDBhKQotfSwgfTsKLQotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHBjb250cm9sX2cyMF9sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJCT0gIkxFRDEiLAkvKiByZWQgIEg1ICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE4LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAkvKiBzdXBlcnZpc29yICovCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDIiLAkvKiB5ZWxsb3cgIEg3ICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE5LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1tYzAiLAkvKiBTRC1jYXJkIGFjdGl2aXR5ICovCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDMiLAkvKiBncmVlbiAgSDIgKi8KLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMjAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwJLyogYmxpbmt5ICovCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDQiLAkvKiByZWQgIEgzICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzYsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCS8qIGNvbm5lY3Rpb24gbG9zdCAqLwotCX0sIHsKLQkJLm5hbWUJCQk9ICJMRUQ1IiwJLyogeWVsbG93ICBINiAqLwotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEM3LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAkvKiB1bnNlbnQgZGF0YSAqLwotCX0sIHsKLQkJLm5hbWUJCQk9ICJMRUQ2IiwJLyogZ3JlZW4gIEgxICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzksCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCS8qIHNuYWZ1ICovCi0JfQotfTsKLQotCi0vKgotICogU1BJIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY29udHJvbF9nMjBfc3BpX2RldmljZXNbXSA9IHsKLQl7Ci0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAkvKiBITUkgcG9ydCAgWDQgKi8KLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDUwICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LCB7Ci0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAkvKiBwaWdneWJhY2sgIEEyICovCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSA1MCAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDEsCi0JfSwKLX07Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjb250cm9sX2cyMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUykgcGlnZ3liYWNrICBBMiAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTCi0JCQkJCQl8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgQ1RTLCBSVFMpIGlzb2xhdGVkIFJTNDg1ICBYNSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTCi0JCQkJCQl8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMiBvbiB0dHlTMy4gKFJ4LCBUeCkgIDliaXQtQnVzICBNdWx0aWRyb3AtbW9kZSAgWDQgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVM0LCAzLCAwKTsKLQlzdGFtcDlnMjBfYm9hcmRfaW5pdCgpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZ1c2JoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV9ldGgoJm1hY2JfZGF0YSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhwY29udHJvbF9nMjBfaTJjX2RldmljZXMsCi0JCUFSUkFZX1NJWkUocGNvbnRyb2xfZzIwX2kyY19kZXZpY2VzKSk7Ci0JYWRkX2RldmljZV9wY29udHJvbCgpOwotCWF0OTFfYWRkX2RldmljZV9zcGkocGNvbnRyb2xfZzIwX3NwaV9kZXZpY2VzLAotCQlBUlJBWV9TSVpFKHBjb250cm9sX2cyMF9zcGlfZGV2aWNlcykpOwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnBjb250cm9sX2cyMF91ZGNfZGF0YSk7Ci0JYXQ5MV9ncGlvX2xlZHMocGNvbnRyb2xfZzIwX2xlZHMsCi0JCUFSUkFZX1NJWkUocGNvbnRyb2xfZzIwX2xlZHMpKTsKLQkvKiBwaWdneWJhY2sgIEEyICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIzMSwgMSk7Ci19Ci0KLQotTUFDSElORV9TVEFSVChQQ09OVFJPTF9HMjAsICJQQ29udHJvbCBHMjAiKQotCS8qIE1haW50YWluZXI6IHBnc2VsbG1hbm5AcG9ydG5lci1lbGVrdHJvbmlrLmF0ICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gcGNvbnRyb2xfZzIwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBwY29udHJvbF9nMjBfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGljb3R1eDIwMC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXBpY290dXgyMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwZjJkNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGljb3R1eDIwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGljb3R1eDIwMC5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEtsZWluaGVueiBFbGVrdHJvbmlrIEdtYkgKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBwaWNvdHV4MjAwX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBwaWNvdHV4MjAwX2V0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDNCwKLQkuaXNfcm1paQk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgcGljb3R1eDIwMF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBwaWNvdHV4MjAwX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEIyNywKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QQTE3LAotCX0sCi19OwotCi0jZGVmaW5lIFBJQ09UVVgyMDBfRkxBU0hfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMAotI2RlZmluZSBQSUNPVFVYMjAwX0ZMQVNIX1NJWkUJU1pfNE0KLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGljb3R1eDIwMF9mbGFzaF9kYXRhID0gewotCS53aWR0aAk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBpY290dXgyMDBfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CQk9IFBJQ09UVVgyMDBfRkxBU0hfQkFTRSwKLQkuZW5kCQk9IFBJQ09UVVgyMDBfRkxBU0hfQkFTRSArIFBJQ09UVVgyMDBfRkxBU0hfU0laRSAtIDEsCi0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGljb3R1eDIwMF9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmcGljb3R1eDIwMF9mbGFzaF9kYXRhLAotCQkJfSwKLQkucmVzb3VyY2UJPSAmcGljb3R1eDIwMF9mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGljb3R1eDIwMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzEsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCSAgfCBBVE1FTF9VQVJUX1JJKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZwaWNvdHV4MjAwX2V0aF9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZwaWNvdHV4MjAwX3VzYmhfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQkvKiBNTUMgKi8KLQlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QQjIyLCAxKTsJLyogdGhpcyBNTUMgY2FyZCBzbG90IGNhbiBvcHRpb25hbGx5IHVzZSBTUEkgc2lnbmFsaW5nIChDUzMpLiAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJnBpY290dXgyMDBfbWNpMF9kYXRhKTsKLQkvKiBOT1IgRmxhc2ggKi8KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBpY290dXgyMDBfZmxhc2gpOwotfQotCi1NQUNISU5FX1NUQVJUKFBJQ09UVVgyWFgsICJwaWNvdHV4IDIwMCIpCi0JLyogTWFpbnRhaW5lcjogS2xlaW5oZW56IEVsZWt0cm9uaWsgR21iSCAqLwotCS5pbml0X3RpbWUJPSBhdDkxcm05MjAwX3RpbWVyX2luaXQsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBwaWNvdHV4MjAwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBwaWNvdHV4MjAwX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJtOTIwMGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcm05MjAwZWsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUzY2VhNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcm05MjAwZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJtOTIwMGVrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqCi0gKiAgRXBzb24gUzFEIGZyYW1lYnVmZmVyIGdsdWUgY29kZSBpczoKLSAqICAgICBDb3B5cmlnaHQgKEMpIDIwMDUgVGhpYmF1dCBWQVJFTkUgPHZhcmVuZXRAcGFyaXNjLWxpbnV4Lm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGVrX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BENCwKLQkucHVsbHVwX3Bpbgk9IEFUOTFfUElOX1BENSwKLX07Ci0KLSNpZm5kZWYgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJECi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQjI3LAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BBMTcsCi0JfQotfTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCX0sCi0jaWZkZWYgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJECi0JewkvKiBEYXRhRmxhc2ggY2FyZCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDMsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCX0sCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBla19pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oImljczE1MjMiLCAweDI2KSwKLQl9LAotCXsKLQkJSTJDX0JPQVJEX0lORk8oImRhYzM1NTAiLCAweDRkKSwKLQl9Ci19OwotCi0jZGVmaW5lIEVLX0ZMQVNIX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKLSNkZWZpbmUgRUtfRkxBU0hfU0laRQlTWl84TQotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBla19mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBla19mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJCT0gRUtfRkxBU0hfQkFTRSwKLQkuZW5kCQk9IEVLX0ZMQVNIX0JBU0UgKyBFS19GTEFTSF9TSVpFIC0gMSwKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfZmxhc2hfZGF0YSwKLQkJCX0sCi0JLnJlc291cmNlCT0gJmVrX2ZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogInVzZXIgbGVkIDEiLCBEUzIgKi8KLQkJLm5hbWUJCQk9ICJncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibW1jMCIsCi0JfSwKLQl7CS8qICJ1c2VyIGxlZCAyIiwgRFM0ICovCi0JCS5uYW1lCQkJPSAieWVsbG93IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiAidXNlciBsZWQgMyIsIERTNiAqLwotCQkubmFtZQkJCT0gInJlZCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjIsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMSwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJICAgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCSAgIHwgQVRNRUxfVUFSVF9SSSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmVrX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmVrX3VkY19kYXRhKTsKLQlhdDkxX3NldF9tdWx0aV9kcml2ZShla191ZGNfZGF0YS5wdWxsdXBfcGluLCAxKTsJLyogcHVsbHVwX3BpbiBpcyBjb25uZWN0ZWQgdG8gcmVzZXQgKi8KLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGVrX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX2kyY19kZXZpY2VzKSk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShla19zcGlfZGV2aWNlcywgQVJSQVlfU0laRShla19zcGlfZGV2aWNlcykpOwotI2lmZGVmIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCS8qIERhdGFGbGFzaCBjYXJkICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIyMiwgMCk7Ci0jZWxzZQotCS8qIE1NQyAqLwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BCMjIsIDEpOwkvKiB0aGlzIE1NQyBjYXJkIHNsb3QgY2FuIG9wdGlvbmFsbHkgdXNlIFNQSSBzaWduYWxpbmcgKENTMykuICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWtfbWNpMF9kYXRhKTsKLSNlbmRpZgotCS8qIE5PUiBGbGFzaCAqLwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfZmxhc2gpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLQkvKiBWR0EgKi8KLS8vCWVrX2FkZF9kZXZpY2VfdmlkZW8oKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxUk05MjAwRUssICJBdG1lbCBBVDkxUk05MjAwLUVLIikKLQkvKiBNYWludGFpbmVyOiBTQU4gUGVvcGxlL0F0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGVrX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOS1sOTI2MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjE2NmUzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgT2xpbWV4IEx0ZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotLyoKLSAqIFVTQiBIb3N0IHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVrX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotLyoKLSAqIFVTQiBEZXZpY2UgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBla191ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQzUsCi0JLnB1bGx1cF9waW4JPSAtRUlOVkFMLAkJLyogcHVsbC11cCBkcml2ZW4gYnkgVURDICovCi19OwotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotI2lmICFJU19FTkFCTEVEKENPTkZJR19NTUNfQVRNRUxNQ0kpCi0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDEsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRCkKLQl7CS8qIERhdGFGbGFzaCBjYXJkICovCi0JCS5tb2RhbGlhcwk9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDE1ICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LAotI2VuZGlmCi0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuaXNfcm1paQk9IDAsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJCb290bG9hZGVyIEFyZWEiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSAxMCAqIFNaXzFNLAotCX0sCi0JewotCQkubmFtZQk9ICJVc2VyIEFyZWEiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QQzEzLAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEMxNCwKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotCS5wYXJ0cwkJPSBla19uYW5kX3BhcnRpdGlvbiwKLQkubnVtX3BhcnRzCT0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbiksCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDMsCi0JLm5yZF9wdWxzZQkJPSAzLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAotCS5ud2VfcHVsc2UJCT0gMywKLQotCS5yZWFkX2N5Y2xlCQk9IDUsCi0JLndyaXRlX2N5Y2xlCQk9IDUsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCi0JLnRkZl9jeWNsZXMJCT0gMiwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJmVrX25hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla19tY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMV0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BDOCwKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QQzQsCi0JfSwKLX07Ci0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogRDEgKi8KLQkJLm5hbWUJCQk9ICJsZWQxIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiBEMiAqLwotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEE2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gInRpbWVyIiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCi0JCQkgICB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfCBBVE1FTF9VQVJUX0RDRAotCQkJICAgfCBBVE1FTF9VQVJUX1JJKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMSwgMiwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmVrX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmVrX3VkY19kYXRhKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7Ci0JLyogTkFORCAqLwotCWVrX2FkZF9kZXZpY2VfbmFuZCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZla19tY2kwX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKFNBTTlfTDkyNjAsICJPbGltZXggU0FNOS1MOTI2MCIpCi0JLyogTWFpbnRhaW5lcjogT2xpbWV4ICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjhhOTQ2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYwZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDM1NCArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2IEF0bWVsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2F0NzNjMjEzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDI0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9zeXN0ZW1fcmV2Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSG9zdCBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgZWtfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM1LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0vKgotICogQXVkaW8KLSAqLwotc3RhdGljIHN0cnVjdCBhdDczYzIxM19ib2FyZF9pbmZvIGF0NzNjMjEzX2RhdGEgPSB7Ci0JLnNzY19pZAkJPSAwLAotCS5zaG9ydG5hbWUJPSAiQVQ5MVNBTTkyNjAtRUsgZXh0ZXJuYWwgREFDIiwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVQ3M0MyMTMpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxM19NT0RVTEUpCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ3M2MyMTNfc2V0X2NsayhzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgY2xrICpwY2swOwotCXN0cnVjdCBjbGsgKnBsbGE7Ci0KLQlwY2swID0gY2xrX2dldChOVUxMLCAicGNrMCIpOwotCXBsbGEgPSBjbGtfZ2V0KE5VTEwsICJwbGxhIik7Ci0KLQkvKiBBVDczQzIxMyBNQ0sgQ2xvY2sgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzEsIDApOwkvKiBQQ0swICovCi0KLQljbGtfc2V0X3BhcmVudChwY2swLCBwbGxhKTsKLQljbGtfcHV0KHBsbGEpOwotCi0JaW5mby0+ZGFjX2NsayA9IHBjazA7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0NzNjMjEzX3NldF9jbGsoc3RydWN0IGF0NzNjMjEzX2JvYXJkX2luZm8gKmluZm8pIHt9Ci0jZW5kaWYKLQotLyoKLSAqIFNQSSBkZXZpY2VzLgotICovCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0jaWYgIUlTX0VOQUJMRUQoQ09ORklHX01NQ19BVE1FTE1DSSkKLQl7CS8qIERhdGFGbGFzaCBjaGlwICovCi0JCS5tb2RhbGlhcwk9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDE1ICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LAotI2lmIGRlZmluZWQoQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEKQotCXsJLyogRGF0YUZsYXNoIGNhcmQgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxMykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUNzNDMjEzX01PRFVMRSkKLQl7CS8qIEFUNzNDMjEzIERBQyAqLwotCQkubW9kYWxpYXMJPSAiYXQ3M2MyMTMiLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTAgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAxLAotCQkubW9kZQkJPSBTUElfTU9ERV8xLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhdDczYzIxM19kYXRhLAotCX0sCi0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzI1NkssCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIlBhcnRpdGlvbiAyIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIGVrX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIxLAotCS5jbGUJCT0gMjIsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkub25fZmxhc2hfYmJ0CT0gMSwKLQkucGFydHMJCT0gZWtfbmFuZF9wYXJ0aXRpb24sCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoZWtfbmFuZF9wYXJ0aXRpb24pLAotfTsKLQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBla19uYW5kX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAxLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMSwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAotCS5ucmRfcHVsc2UJCT0gMywKLQkubmNzX3dyaXRlX3B1bHNlCT0gMywKLQkubndlX3B1bHNlCQk9IDMsCi0KLQkucmVhZF9jeWNsZQkJPSA1LAotCS53cml0ZV9jeWNsZQkJPSA1LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKLQkudGRmX2N5Y2xlcwkJPSAyLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCWVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYgPSBib2FyZF9oYXZlX25hbmRfMTZiaXQoKTsKLQkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCi0JaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKLQllbHNlCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OwotCi0JLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCi0Jc2FtOV9zbWNfY29uZmlndXJlKDAsIDMsICZla19uYW5kX3NtY19jb25maWcpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Ci19Ci0KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWNpMF9kYXRhID0gewotCS5zbG90WzFdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSAtRUlOVkFMLAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLQotLyoKLSAqIExFRHMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7Ci0JewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMSB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHM1IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBNiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQl9LAotCXsJLyogInBvd2VyIiBsZWQsIHllbGxvdyAqLwotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTksCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi0vKgotICogSTJDIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYXQyNGM1MTIgPSB7Ci0JLmJ5dGVfbGVuCT0gU1pfNTEySyAvIDgsCi0JLnBhZ2Vfc2l6ZQk9IDEyOCwKLQkuZmxhZ3MJCT0gQVQyNF9GTEFHX0FERFIxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBla19pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oIjI0YzUxMiIsIDB4NTApLAotCQkucGxhdGZvcm1fZGF0YSA9ICZhdDI0YzUxMiwKLQl9LAotCS8qIG1vcmUgZGV2aWNlcyBjYW4gYmUgYWRkZWQgdXNpbmcgZXhwYW5zaW9uIGNvbm5lY3RvcnMgKi8KLX07Ci0KLQotLyoKLSAqIEdQSU8gQnV0dG9ucwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZWtfYnV0dG9uc1tdID0gewotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEEzMCwKLQkJLmNvZGUJCT0gQlROXzMsCi0JCS5kZXNjCQk9ICJCdXR0b24gMyIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTMxLAotCQkuY29kZQkJPSBCVE5fNCwKLQkJLmRlc2MJCT0gIkJ1dHRvbiA0IiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBla19idXR0b25fZGF0YSA9IHsKLQkuYnV0dG9ucwk9IGVrX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShla19idXR0b25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVrX2J1dHRvbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImdwaW8ta2V5cyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfYnV0dG9uX2RhdGEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQotewotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEzMCwgMSk7CS8qIGJ0bjMgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTMwLCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMzEsIDEpOwkvKiBidG40ICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEEzMSwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkge30KLSNlbmRpZgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8IEFUTUVMX1VBUlRfRENECi0JCQkgICB8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWtfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWtfdWRjX2RhdGEpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVrX21jaTBfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhla19pMmNfZGV2aWNlcywgQVJSQVlfU0laRShla19pMmNfZGV2aWNlcykpOwotCS8qIFNTQyAodG8gQVQ3M0MyMTMpICovCi0JYXQ3M2MyMTNfc2V0X2NsaygmYXQ3M2MyMTNfZGF0YSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwotCS8qIFB1c2ggQnV0dG9ucyAqLwotCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotfQotCi1NQUNISU5FX1NUQVJUKEFUOTFTQU05MjYwRUssICJBdG1lbCBBVDkxU0FNOTI2MC1FSyIpCi0JLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBla19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NWFkYTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9hdDczYzIxMy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLQotI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9zeXN0ZW1fcmV2Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLS8qCi0gKiBETTkwMDAgZXRoZXJuZXQgZGV2aWNlCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19ETTkwMDApCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRtOTAwMF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzIsCi0JCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfMiArIDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF8yICsgMHg0NCwKLQkJLmVuZAk9IEFUOTFfQ0hJUFNFTEVDVF8yICsgMHhGRiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LAotCVsyXSA9IHsKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKLQkJCXwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZG05MDAwX3BsYXRfZGF0YSBkbTkwMDBfcGxhdGRhdGEgPSB7Ci0JLmZsYWdzCQk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFkgfCBETTkwMDBfUExBVEZfTk9fRUVQUk9NLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG05MDAwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZG05MDAwIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZG05MDAwX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJPSBkbTkwMDBfcmVzb3VyY2UsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmRtOTAwMF9wbGF0ZGF0YSwKLQl9Ci19OwotCi0vKgotICogU01DIHRpbWluZ3MgZm9yIHRoZSBETTkwMDAuCi0gKiBOb3RlOiBUaGVzZSB0aW1pbmdzIHdlcmUgY2FsY3VsYXRlZCBmb3IgTUFTVEVSX0NMT0NLID0gMTAwMDAwMDAwIGFjY29yZGluZyB0byB0aGUgRE05MDAwIHRpbWluZ3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZG05MDAwX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAyLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMiwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSA4LAotCS5ucmRfcHVsc2UJCT0gNCwKLQkubmNzX3dyaXRlX3B1bHNlCT0gOCwKLQkubndlX3B1bHNlCQk9IDQsCi0KLQkucmVhZF9jeWNsZQkJPSAxNiwKLQkud3JpdGVfY3ljbGUJCT0gMTYsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfQkFUX1dSSVRFIHwgQVQ5MV9TTUNfREJXXzE2LAotCS50ZGZfY3ljbGVzCQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9kbTkwMDAodm9pZCkKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZG05MDAwX3Jlc291cmNlWzJdOwotCi0JLyogQ29uZmlndXJlIGNoaXAtc2VsZWN0IDIgKERNOTAwMCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMiwgJmRtOTAwMF9zbWNfY29uZmlnKTsKLQotCS8qIENvbmZpZ3VyZSBSZXNldCBzaWduYWwgYXMgb3V0cHV0ICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEMxMCwgMCk7Ci0KLQkvKiBDb25maWd1cmUgSW50ZXJydXB0IHBpbiBhcyBpbnB1dCwgbm8gcHVsbC11cCAqLwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEMxMSwgMCk7Ci0KLQlyLT5zdGFydCA9IHItPmVuZCA9IGdwaW9fdG9faXJxKEFUOTFfUElOX1BDMTEpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG05MDAwX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfZG05MDAwKHZvaWQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0RNOTAwMCAqLwotCi0KLS8qCi0gKiBVU0IgSG9zdCBQb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLQotLyoKLSAqIFVTQiBEZXZpY2UgUG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBla191ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQjI5LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0vKgotICogTkFORCBmbGFzaAotICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBla19uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDEiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSBTWl8yNTZLLAotCX0sCi0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMiIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBla19uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMiwKLQkuY2xlCQk9IDIxLAotCS5kZXRfcGluCT0gLUVJTlZBTCwKLQkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTUsCi0JLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi0JLm9uX2ZsYXNoX2JidAk9IDEsCi0JLnBhcnRzCQk9IGVrX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGVrX25hbmRfcGFydGl0aW9uKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMSwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDEsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gMywKLQkubnJkX3B1bHNlCQk9IDMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDMsCi0JLm53ZV9wdWxzZQkJPSAzLAotCi0JLnJlYWRfY3ljbGUJCT0gNSwKLQkud3JpdGVfY3ljbGUJCT0gNSwKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUsCi0JLnRkZl9jeWNsZXMJCT0gMiwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQlla19uYW5kX2RhdGEuYnVzX3dpZHRoXzE2ID0gYm9hcmRfaGF2ZV9uYW5kXzE2Yml0KCk7Ci0JLyogc2V0dXAgYnVzLXdpZHRoICg4IG9yIDE2KSAqLwotCWlmIChla19uYW5kX2RhdGEuYnVzX3dpZHRoXzE2KQotCQlla19uYW5kX3NtY19jb25maWcubW9kZSB8PSBBVDkxX1NNQ19EQldfMTY7Ci0JZWxzZQotCQlla19uYW5kX3NtY19jb25maWcubW9kZSB8PSBBVDkxX1NNQ19EQldfODsKLQotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCAzLCAmZWtfbmFuZF9zbWNfY29uZmlnKTsKLQotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOwotfQotCi0vKgotICogU1BJIHJlbGF0ZWQgZGV2aWNlcwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotCi0vKgotICogQURTNzg0NiBUb3VjaHNjcmVlbgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nl9NT0RVTEUpCi0KLXN0YXRpYyBpbnQgYWRzNzg0M19wZW5kb3duX3N0YXRlKHZvaWQpCi17Ci0JcmV0dXJuICFhdDkxX2dldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BDMik7CS8qIFRvdWNoc2NyZWVuIFBFTklSUSAqLwotfQotCi1zdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHNfaW5mbyA9IHsKLQkubW9kZWwJCQk9IDc4NDMsCi0JLnhfbWluCQkJPSAxNTAsCi0JLnhfbWF4CQkJPSAzODMwLAotCS55X21pbgkJCT0gMTkwLAotCS55X21heAkJCT0gMzgzMCwKLQkudnJlZl9kZWxheV91c2Vjcwk9IDEwMCwKLQkueF9wbGF0ZV9vaG1zCQk9IDQ1MCwKLQkueV9wbGF0ZV9vaG1zCQk9IDI1MCwKLQkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLAotCS5kZWJvdW5jZV9tYXgJCT0gMSwKLQkuZGVib3VuY2VfcmVwCQk9IDAsCi0JLmRlYm91bmNlX3RvbAkJPSAofjApLAotCS5nZXRfcGVuZG93bl9zdGF0ZQk9IGFkczc4NDNfcGVuZG93bl9zdGF0ZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX3RzKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyLCAxKTsJLyogRXh0ZXJuYWwgSVJRMCwgd2l0aCBwdWxsdXAgKi8KLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMTEsIDEpOwkvKiBUb3VjaHNjcmVlbiBCVVNZIHNpZ25hbCAqLwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX3RzKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyoKLSAqIEF1ZGlvCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyBhdDczYzIxM19kYXRhID0gewotCS5zc2NfaWQJCT0gMSwKLQkuc2hvcnRuYW1lCT0gIkFUOTFTQU05MjYxLzlHMTAtRUsgZXh0ZXJuYWwgREFDIiwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVQ3M0MyMTMpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxM19NT0RVTEUpCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ3M2MyMTNfc2V0X2NsayhzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgY2xrICpwY2syOwotCXN0cnVjdCBjbGsgKnBsbGE7Ci0KLQlwY2syID0gY2xrX2dldChOVUxMLCAicGNrMiIpOwotCXBsbGEgPSBjbGtfZ2V0KE5VTEwsICJwbGxhIik7Ci0KLQkvKiBBVDczQzIxMyBNQ0sgQ2xvY2sgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjMxLCAwKTsJLyogUENLMiAqLwotCi0JY2xrX3NldF9wYXJlbnQocGNrMiwgcGxsYSk7Ci0JY2xrX3B1dChwbGxhKTsKLQotCWluZm8tPmRhY19jbGsgPSBwY2syOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDczYzIxM19zZXRfY2xrKHN0cnVjdCBhdDczYzIxM19ib2FyZF9pbmZvICppbmZvKSB7fQotI2VuZGlmCi0KLS8qCi0gKiBTUEkgZGV2aWNlcwotICovCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLQl7Ci0JCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMiwKLQkJLm1heF9zcGVlZF9oegk9IDEyNTAwMCAqIDI2LAkvKiAobWF4IHNhbXBsZSByYXRlIEAgM1YpICogKGNtZCArIGRhdGEgKyBvdmVyaGVhZCkgKi8KLQkJLmJ1c19udW0JPSAwLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhZHNfaW5mbywKLQkJLmlycQkJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX0lSUTAsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBBVDkxX1BJTl9QQTI4LAkvKiBDUyBwaW4gKi8KLQl9LAotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCi0JewkvKiBEYXRhRmxhc2ggY2FyZCAtIGp1bXBlciAoSjEyKSBjb25maWd1cmFibGUgdG8gQ1MzIG9yIENTMCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDMsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxMykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUNzNDMjEzX01PRFVMRSkKLQl7CS8qIEFUNzNDMjEzIERBQyAqLwotCQkubW9kYWxpYXMJPSAiYXQ3M2MyMTMiLAotCQkuY2hpcF9zZWxlY3QJPSAzLAotCQkubWF4X3NwZWVkX2h6CT0gMTAgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCQkubW9kZQkJPSBTUElfTU9ERV8xLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhdDczYzIxM19kYXRhLAotCQkuY29udHJvbGxlcl9kYXRhID0gKHZvaWQqKSBBVDkxX1BJTl9QQTI5LAkvKiBkZWZhdWx0IGZvciBDUzMgaXMgUEE2LCBidXQgaXQgbXVzdCBiZSBQQTI5ICovCi0JfSwKLSNlbmRpZgotfTsKLQotI2Vsc2UgLyogQ09ORklHX1NQSV9BVE1FTF8qICovCi0vKiBzcGkwIGFuZCBtbWMvc2Qgc2hhcmUgdGhlIHNhbWUgUElPIHBpbnM6IGNhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgKi8KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICogZGV0X3Bpbiwgd3BfcGluIGFuZCB2Y2NfcGluIGFyZSBub3QgY29ubmVjdGVkCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IC1FSU5WQUwsCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotfTsKLQotI2VuZGlmIC8qIENPTkZJR19TUElfQVRNRUxfKiAqLwotCi0KLS8qCi0gKiBMQ0QgQ29udHJvbGxlcgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKLQotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX1NUTikKLQotLyogU1ROICovCi1zdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBhdDkxX3N0bl9tb2Rlc1tdID0gewotICAgICAgICB7Ci0JCS5uYW1lICAgICAgICAgICA9ICJTUDA2UTAwMiBAIDc1IiwKLQkJLnJlZnJlc2ggICAgICAgID0gNzUsCi0JCS54cmVzICAgICAgICAgICA9IDMyMCwgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gMjQwLAotCQkucGl4Y2xvY2sgICAgICAgPSBLSFoyUElDT1MoMTQ0MCksCi0KLQkJLmxlZnRfbWFyZ2luICAgID0gMSwgICAgICAgICAgICAucmlnaHRfbWFyZ2luICAgPSAxLAotCQkudXBwZXJfbWFyZ2luICAgPSAwLCAgICAgICAgICAgIC5sb3dlcl9tYXJnaW4gICA9IDAsCi0JCS5oc3luY19sZW4gICAgICA9IDEsICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMSwKLQotCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLQkJLnZtb2RlICAgICAgICAgID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLSAgICAgICAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfc3RuX21vbnNwZWNzID0gewotICAgICAgICAubWFudWZhY3R1cmVyICAgPSAiSElUIiwKLSAgICAgICAgLm1vbml0b3IgICAgICAgID0gIlNQMDZRMDAyIiwKLQotICAgICAgICAubW9kZWRiICAgICAgICAgPSBhdDkxX3N0bl9tb2RlcywKLSAgICAgICAgLm1vZGVkYl9sZW4gICAgID0gQVJSQVlfU0laRShhdDkxX3N0bl9tb2RlcyksCi0gICAgICAgIC5oZm1pbiAgICAgICAgICA9IDE1MDAwLAotICAgICAgICAuaGZtYXggICAgICAgICAgPSA2NDAwMCwKLSAgICAgICAgLnZmbWluICAgICAgICAgID0gNTAsCi0gICAgICAgIC52Zm1heCAgICAgICAgICA9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTkyNjFfREVGQVVMVF9TVE5fTENEQ09OMgkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9TVE5NT05PIFwKLQkJCQkJfCBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkUgXAotCQkJCQl8IEFUTUVMX0xDRENfSUZXSURUSF80IFwKLQkJCQkJfCBBVE1FTF9MQ0RDX1NDQU5NT0RfU0lOR0xFKQotCi1zdGF0aWMgdm9pZCBhdDkxX2xjZGNfc3RuX3Bvd2VyX2NvbnRyb2woc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpwZGF0YSwgaW50IG9uKQotewotCS8qIGJhY2tsaWdodCAqLwotCWlmIChvbikgewkvKiBwb3dlciB1cCAqLwotCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BDMTQsIDApOwotCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BDMTUsIDApOwotCX0gZWxzZSB7CS8qIHBvd2VyIGRvd24gKi8KLQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZShBVDkxX1BJTl9QQzE0LCAxKTsKLQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZShBVDkxX1BJTl9QQzE1LCAxKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmRlZmF1bHRfYnBwCQkJPSAxLAotCS5kZWZhdWx0X2RtYWNvbgkJCT0gQVRNRUxfTENEQ19ETUFFTiwKLQkuZGVmYXVsdF9sY2Rjb24yCQk9IEFUOTFTQU05MjYxX0RFRkFVTFRfU1ROX0xDRENPTjIsCi0JLmRlZmF1bHRfbW9uc3BlY3MJCT0gJmF0OTFmYl9kZWZhdWx0X3N0bl9tb25zcGVjcywKLQkuYXRtZWxfbGNkZmJfcG93ZXJfY29udHJvbAk9IGF0OTFfbGNkY19zdG5fcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLX07Ci0KLSNlbHNlCi0KLS8qIFRGVCAqLwotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7Ci0JewotCSAgICAgICAgLm5hbWUgICAgICAgICAgID0gIlRYMDlENTBWTTFDQ0EgQCA2MCIsCi0JCS5yZWZyZXNoCT0gNjAsCi0JCS54cmVzCQk9IDI0MCwJCS55cmVzCQk9IDMyMCwKLQkJLnBpeGNsb2NrCT0gS0haMlBJQ09TKDQ5NjUpLAotCi0JCS5sZWZ0X21hcmdpbgk9IDEsCQkucmlnaHRfbWFyZ2luCT0gMzMsCi0JCS51cHBlcl9tYXJnaW4JPSAxLAkJLmxvd2VyX21hcmdpbgk9IDAsCi0JCS5oc3luY19sZW4JPSA1LAkJLnZzeW5jX2xlbgk9IDEsCi0KLQkJLnN5bmMJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCi0JCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGZiX21vbnNwZWNzIGF0OTFmYl9kZWZhdWx0X3RmdF9tb25zcGVjcyA9IHsKLQkubWFudWZhY3R1cmVyCT0gIkhJVCIsCi0JLm1vbml0b3IgICAgICAgID0gIlRYMDlENTBWTTFDQ0EiLAotCi0JLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCi0JLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCi0JLmhmbWluCQk9IDE1MDAwLAotCS5oZm1heAkJPSA2NDAwMCwKLQkudmZtaW4JCT0gNTAsCi0JLnZmbWF4CQk9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTkyNjFfREVGQVVMVF9URlRfTENEQ09OMgkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9URlQgICAgXAotCQkJCQl8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRSkKLQotc3RhdGljIHZvaWQgYXQ5MV9sY2RjX3RmdF9wb3dlcl9jb250cm9sKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqcGRhdGEsIGludCBvbikKLXsKLQlpZiAob24pCi0JCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEExMiwgMCk7CS8qIHBvd2VyIHVwICovCi0JZWxzZQotCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BBMTIsIDEpOwkvKiBwb3dlciBkb3duICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmxjZGNvbl9pc19iYWNrbGlnaHQJCT0gdHJ1ZSwKLQkuZGVmYXVsdF9icHAJCQk9IDE2LAotCS5kZWZhdWx0X2RtYWNvbgkJCT0gQVRNRUxfTENEQ19ETUFFTiwKLQkuZGVmYXVsdF9sY2Rjb24yCQk9IEFUOTFTQU05MjYxX0RFRkFVTFRfVEZUX0xDRENPTjIsCi0JLmRlZmF1bHRfbW9uc3BlY3MJCT0gJmF0OTFmYl9kZWZhdWx0X3RmdF9tb25zcGVjcywKLQkuYXRtZWxfbGNkZmJfcG93ZXJfY29udHJvbAk9IGF0OTFfbGNkY190ZnRfcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLX07Ci0jZW5kaWYKLQotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGE7Ci0jZW5kaWYKLQotCi0vKgotICogR1BJTyBCdXR0b25zCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBla19idXR0b25zW10gPSB7Ci0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTI3LAotCQkuY29kZQkJPSBCVE5fMCwKLQkJLmRlc2MJCT0gIkJ1dHRvbiAwIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BBMjYsCi0JCS5jb2RlCQk9IEJUTl8xLAotCQkuZGVzYwkJPSAiQnV0dG9uIDEiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEEyNSwKLQkJLmNvZGUJCT0gQlROXzIsCi0JCS5kZXNjCQk9ICJCdXR0b24gMiIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTI0LAotCQkuY29kZQkJPSBCVE5fMywKLQkJLmRlc2MJCT0gIkJ1dHRvbiAzIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBla19idXR0b25fZGF0YSA9IHsKLQkuYnV0dG9ucwk9IGVrX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShla19idXR0b25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVrX2J1dHRvbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImdwaW8ta2V5cyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfYnV0dG9uX2RhdGEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQotewotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEyNywgMSk7CS8qIGJ0bjAgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTI3LCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMjYsIDEpOwkvKiBidG4xICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEEyNiwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTI1LCAxKTsJLyogYnRuMiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BBMjUsIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEyNCwgMSk7CS8qIGJ0bjMgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTI0LCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfYnV0dG9uX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKSB7fQotI2VuZGlmCi0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDEgdG8gYmUgZGVmaW5lZCAqLwotCQkubmFtZQkJCT0gImRzNyIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTE0LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCX0sCi0JewkvKiAidG9wIiBsZWQsIGdyZWVuLCB1c2VybGVkMiB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHM4IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMTMsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwKLQl7CS8qICJwb3dlciIgbGVkLCB5ZWxsb3cgKi8KLQkJLm5hbWUJCQk9ICJkczEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEEyMywKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0KLQlpZiAoY3B1X2lzX2F0OTFzYW05ZzEwKCkpCi0JCWVrX2xjZGNfZGF0YS5sY2Rfd2lyaW5nX21vZGUgPSBBVE1FTF9MQ0RDX1dJUklOR19SR0I7Ci0KLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZla191c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZla191ZGNfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogRE05MDAwIGV0aGVybmV0ICovCi0JZWtfYWRkX2RldmljZV9kbTkwMDAoKTsKLQotCS8qIHNwaTAgYW5kIG1tYy9zZCBzaGFyZSB0aGUgc2FtZSBQSU8gcGlucyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7Ci0JLyogVG91Y2hzY3JlZW4gKi8KLQlla19hZGRfZGV2aWNlX3RzKCk7Ci0JLyogU1NDICh0byBBVDczQzIxMykgKi8KLQlhdDczYzIxM19zZXRfY2xrKCZhdDczYzIxM19kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc3NjKEFUOTFTQU05MjYxX0lEX1NTQzEsIEFUTUVMX1NTQ19UWCk7Ci0jZWxzZQotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJm1jaTBfZGF0YSk7Ci0jZW5kaWYKLQkvKiBMQ0QgQ29udHJvbGxlciAqLwotCWF0OTFfYWRkX2RldmljZV9sY2RjKCZla19sY2RjX2RhdGEpOwotCS8qIFB1c2ggQnV0dG9ucyAqLwotCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxU0FNOTI2MUVLLCAiQXRtZWwgQVQ5MVNBTTkyNjEtRUsiKQotCS8qIE1haW50YWluZXI6IEF0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORAotCi1NQUNISU5FX1NUQVJUKEFUOTFTQU05RzEwRUssICJBdG1lbCBBVDkxU0FNOUcxMC1FSyIpCi0JLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBla19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NjY4MGYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0MjQuaD4KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotI2luY2x1ZGUgPGxpbnV4L3B3bS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHNfcHdtLmg+Ci0KLSNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvc3lzdGVtX3Jldi5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxNi4zNjcgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTYzNjc2NjApOwotfQotCi0vKgotICogVVNCIEhvc3QgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZWtfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHsgQVQ5MV9QSU5fUEEyNCwgQVQ5MV9QSU5fUEEyMSB9LAotCS52YnVzX3Bpbl9hY3RpdmVfbG93ID0gezEsIDF9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgZWtfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEEyNSwKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLQotLyoKLSAqIEFEUzc4NDYgVG91Y2hzY3JlZW4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDZfTU9EVUxFKQotc3RhdGljIGludCBhZHM3ODQzX3BlbmRvd25fc3RhdGUodm9pZCkKLXsKLQlyZXR1cm4gIWF0OTFfZ2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEExNSk7CS8qIFRvdWNoc2NyZWVuIFBFTklSUSAqLwotfQotCi1zdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHNfaW5mbyA9IHsKLQkubW9kZWwJCQk9IDc4NDMsCi0JLnhfbWluCQkJPSAxNTAsCi0JLnhfbWF4CQkJPSAzODMwLAotCS55X21pbgkJCT0gMTkwLAotCS55X21heAkJCT0gMzgzMCwKLQkudnJlZl9kZWxheV91c2Vjcwk9IDEwMCwKLQkueF9wbGF0ZV9vaG1zCQk9IDQ1MCwKLQkueV9wbGF0ZV9vaG1zCQk9IDI1MCwKLQkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLAotCS5kZWJvdW5jZV9tYXgJCT0gMSwKLQkuZGVib3VuY2VfcmVwCQk9IDAsCi0JLmRlYm91bmNlX3RvbAkJPSAofjApLAotCS5nZXRfcGVuZG93bl9zdGF0ZQk9IGFkczc4NDNfcGVuZG93bl9zdGF0ZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX3RzKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMSk7CS8qIEV4dGVybmFsIElSUTEsIHdpdGggcHVsbHVwICovCi0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTMxLCAxKTsJLyogVG91Y2hzY3JlZW4gQlVTWSBzaWduYWwgKi8KLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV90cyh2b2lkKSB7fQotI2VuZGlmCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotI2lmIGRlZmluZWQoQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEKQotCXsJLyogRGF0YUZsYXNoIGNhcmQgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLQl7Ci0JCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMywKLQkJLm1heF9zcGVlZF9oegk9IDEyNTAwMCAqIDI2LAkvKiAobWF4IHNhbXBsZSByYXRlIEAgM1YpICogKGNtZCArIGRhdGEgKyBvdmVyaGVhZCkgKi8KLQkJLmJ1c19udW0JPSAwLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhZHNfaW5mbywKLQkJLmlycQkJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0lSUTEsCi0JfSwKLSNlbmRpZgotfTsKLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtY2kxX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BFMTgsCi0JCS53cF9waW4JCT0gQVQ5MV9QSU5fUEUxOSwKLQl9LAotfTsKLQotCi0vKgotICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEUzMSwKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzY0TSwKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QQTIyLAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEQxNSwKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotCS5vbl9mbGFzaF9iYnQJPSAxLAotCS5wYXJ0cwkJPSBla19uYW5kX3BhcnRpdGlvbiwKLQkubnVtX3BhcnRzCT0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbiksCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDMsCi0JLm5yZF9wdWxzZQkJPSAzLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAotCS5ud2VfcHVsc2UJCT0gMywKLQotCS5yZWFkX2N5Y2xlCQk9IDUsCi0JLndyaXRlX2N5Y2xlCQk9IDUsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFLAotCS50ZGZfY3ljbGVzCQk9IDIsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9uYW5kKHZvaWQpCi17Ci0JZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNiA9IGJvYXJkX2hhdmVfbmFuZF8xNmJpdCgpOwotCS8qIHNldHVwIGJ1cy13aWR0aCAoOCBvciAxNikgKi8KLQlpZiAoZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNikKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzE2OwotCWVsc2UKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzg7Ci0KLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJmVrX25hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogSTJDIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYXQyNGM1MTIgPSB7Ci0JLmJ5dGVfbGVuCT0gU1pfNTEySyAvIDgsCi0JLnBhZ2Vfc2l6ZQk9IDEyOCwKLQkuZmxhZ3MJCT0gQVQyNF9GTEFHX0FERFIxNiwKLX07Ci0KLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVrX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygiMjRjNTEyIiwgMHg1MCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmF0MjRjNTEyLAotCX0sCi0JLyogbW9yZSBkZXZpY2VzIGNhbiBiZSBhZGRlZCB1c2luZyBleHBhbnNpb24gY29ubmVjdG9ycyAqLwotfTsKLQotLyoKLSAqIExDRCBDb250cm9sbGVyCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7Ci0JewotCQkubmFtZQkJPSAiVFgwOUQ1MFZNMUNDQSBAIDYwIiwKLQkJLnJlZnJlc2gJPSA2MCwKLQkJLnhyZXMJCT0gMjQwLAkJLnlyZXMJCT0gMzIwLAotCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoNDk2NSksCi0KLQkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAzMywKLQkJLnVwcGVyX21hcmdpbgk9IDEsCQkubG93ZXJfbWFyZ2luCT0gMCwKLQkJLmhzeW5jX2xlbgk9IDUsCQkudnN5bmNfbGVuCT0gMSwKLQotCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7Ci0JLm1hbnVmYWN0dXJlcgk9ICJISVQiLAotCS5tb25pdG9yCT0gIlRYMDlENzBWTTFDQ0EiLAotCi0JLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCi0JLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCi0JLmhmbWluCQk9IDE1MDAwLAotCS5oZm1heAkJPSA2NDAwMCwKLQkudmZtaW4JCT0gNTAsCi0JLnZmbWF4CQk9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTkyNjNfREVGQVVMVF9MQ0RDT04yIAkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9URlQgXAotCQkJCQl8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRSkKLQotc3RhdGljIHZvaWQgYXQ5MV9sY2RjX3Bvd2VyX2NvbnRyb2woc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpwZGF0YSwgaW50IG9uKQotewotCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEEzMCwgb24pOwotfQotCi0vKiBEcml2ZXIgZGF0YXMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmxjZGNvbl9pc19iYWNrbGlnaHQJCT0gdHJ1ZSwKLQkuZGVmYXVsdF9icHAJCQk9IDE2LAotCS5kZWZhdWx0X2RtYWNvbgkJCT0gQVRNRUxfTENEQ19ETUFFTiwKLQkuZGVmYXVsdF9sY2Rjb24yCQk9IEFUOTFTQU05MjYzX0RFRkFVTFRfTENEQ09OMiwKLQkuZGVmYXVsdF9tb25zcGVjcwkJPSAmYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MsCi0JLmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wJPSBhdDkxX2xjZGNfcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLX07Ci0KLSNlbHNlCi1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhOwotI2VuZGlmCi0KLQotLyoKLSAqIEdQSU8gQnV0dG9ucwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZWtfYnV0dG9uc1tdID0gewotCXsJLyogQlAxLCAibGVmdGNsaWMiICovCi0JCS5jb2RlCQk9IEJUTl9MRUZULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQzUsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLmRlc2MJCT0gImxlZnRfY2xpY2siLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLQl7CS8qIEJQMiwgInJpZ2h0Y2xpYyIgKi8KLQkJLmNvZGUJCT0gQlROX1JJR0hULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQzQsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLmRlc2MJCT0gInJpZ2h0X2NsaWNrIiwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBla19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQzUsIDEpOwkvKiBsZWZ0IGJ1dHRvbiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BDNSwgMSk7Ci0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEM0LCAxKTsJLyogcmlnaHQgYnV0dG9uICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEM0LCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfYnV0dG9uX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyoKLSAqIEFDOTcKLSAqIHJlc2V0X3BpbiBpcyBub3QgY29ubmVjdGVkOiBOUlNUCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBla19hYzk3X2RhdGEgPSB7Ci0JLnJlc2V0X3Bpbgk9IC1FSU5WQUwsCi19OwotCi0KLS8qCi0gKiBMRURzIC4uLiB0aGVzZSBjb3VsZCBhbGwgYmUgUFdNLWRyaXZlbiwgZm9yIHZhcmlhYmxlIGJyaWdodG5lc3MKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7Ci0JewkvKiAicmlnaHQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQyIChjb3VsZCBiZSBkcml2ZW4gYnkgcHdtMikgKi8KLQkJLm5hbWUJCQk9ICJkczIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMyOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJuYW5kLWRpc2siLAotCX0sCi0JewkvKiAicG93ZXIiIGxlZCwgeWVsbG93IChjb3VsZCBiZSBkcml2ZW4gYnkgcHdtMCkgKi8KLQkJLm5hbWUJCQk9ICJkczMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI3LAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JfSwKLSNpZiAhSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JewotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjgsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfQotI2VuZGlmCi19OwotCi0vKgotICogUFdNIExlZHMKLSAqLwotc3RhdGljIHN0cnVjdCBwd21fbG9va3VwIHB3bV9sb29rdXBbXSA9IHsKLQlQV01fTE9PS1VQKCJhdDkxc2FtOXJsLXB3bSIsIDEsICJsZWRzX3B3bSIsICJkczEiLAotCQkgICA1MDAwLCBQV01fUE9MQVJJVFlfSU5WRVJTRUQpLAotfTsKLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX0xFRFNfUFdNKQotc3RhdGljIHN0cnVjdCBsZWRfcHdtIHB3bV9sZWRzW10gPSB7Ci0JewotCQkubmFtZSA9ICJkczEiLAotCQkubWF4X2JyaWdodG5lc3MgPSAyNTUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbGVkX3B3bV9wbGF0Zm9ybV9kYXRhIHB3bV9kYXRhID0gewotCS5udW1fbGVkcyAgICAgICA9IEFSUkFZX1NJWkUocHdtX2xlZHMpLAotCS5sZWRzICAgICAgICAgICA9IHB3bV9sZWRzLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19wd20gPSB7Ci0JLm5hbWUgICA9ICJsZWRzX3B3bSIsCi0JLmlkICAgICA9IC0xLAotCS5kZXYgICAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnB3bV9kYXRhLAotCX0sCi19OwotI2VuZGlmCi0KLQotLyoKLSAqIENBTgotICovCi1zdGF0aWMgdm9pZCBzYW05MjYzZWtfdHJhbnNjZWl2ZXJfc3dpdGNoKGludCBvbikKLXsKLQlpZiAob24pIHsKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOCwgMSk7IC8qIENBTlJYRU4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOSwgMCk7IC8qIENBTlJTICovCi0JfSBlbHNlIHsKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOCwgMCk7IC8qIENBTlJYRU4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOSwgMSk7IC8qIENBTlJTICovCi0JfQotfQotCi1zdGF0aWMgc3RydWN0IGF0OTFfY2FuX2RhdGEgZWtfY2FuX2RhdGEgPSB7Ci0JLnRyYW5zY2VpdmVyX3N3aXRjaCA9IHNhbTkyNjNla190cmFuc2NlaXZlcl9zd2l0Y2gsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JJmxlZHNfcHdtLAotI2VuZGlmCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIFJUUywgQ1RTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2M19JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZla191c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZla191ZGNfZGF0YSk7Ci0JLyogU1BJICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEUyMCwgMSk7CQkvKiBzZWxlY3Qgc3BpMCBjbG9jayAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBUb3VjaHNjcmVlbiAqLwotCWVrX2FkZF9kZXZpY2VfdHMoKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDEsICZtY2kxX2RhdGEpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhla19pMmNfZGV2aWNlcywgQVJSQVlfU0laRShla19pMmNfZGV2aWNlcykpOwotCS8qIExDRCBDb250cm9sbGVyICovCi0JYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7Ci0JLyogUHVzaCBCdXR0b25zICovCi0JZWtfYWRkX2RldmljZV9idXR0b25zKCk7Ci0JLyogQUM5NyAqLwotCWF0OTFfYWRkX2RldmljZV9hYzk3KCZla19hYzk3X2RhdGEpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLQlwd21fYWRkX3RhYmxlKHB3bV9sb29rdXAsIEFSUkFZX1NJWkUocHdtX2xvb2t1cCkpOwotI2lmIElTX0VOQUJMRUQoQ09ORklHX0xFRFNfUFdNKQotCWF0OTFfYWRkX2RldmljZV9wd20oMSA8PCBBVDkxX1BXTTEpOwotI2VuZGlmCi0JLyogQ0FOICovCi0JYXQ5MV9hZGRfZGV2aWNlX2NhbigmZWtfY2FuX2RhdGEpOwotCS8qIE90aGVyIHBsYXRmb3JtIGRldmljZXMgKi8KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxU0FNOTI2M0VLLCAiQXRtZWwgQVQ5MVNBTTkyNjMtRUsiKQotCS8qIE1haW50YWluZXI6IEF0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWYwNzUyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDQyOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2F0NzNjMjEzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDkxX2FkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLSNpbmNsdWRlIDxtYWNoL3N5c3RlbV9yZXYuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLS8qCi0gKiBib2FyZCByZXZpc2lvbiBlbmNvZGluZwotICogYml0IDA6Ci0gKiAJMCA9PiAxIHNkL21tYyBzbG90Ci0gKiAJMSA9PiAyIHNkL21tYyBzbG90cyBjb25uZWN0b3JzIChib2FyZCBmcm9tIHJldmlzaW9uIEMpCi0gKi8KLSNkZWZpbmUgSEFWRV8yTU1DCSgxIDw8IDApCi1zdGF0aWMgaW50IGlubGluZSBla19oYXZlXzJtbWModm9pZCkKLXsKLQlyZXR1cm4gbWFjaGluZV9pc19hdDkxc2FtOWcyMGVrXzJtbWMoKSB8fCAoc3lzdGVtX3JldiAmIEhBVkVfMk1NQyk7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotLyoKLSAqIFVTQiBIb3N0IHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVrX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotLyoKLSAqIFVTQiBEZXZpY2UgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBla191ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQzUsCi0JLnB1bGx1cF9waW4JPSAtRUlOVkFMLAkJLyogcHVsbC11cCBkcml2ZW4gYnkgVURDICovCi19OwotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotI2lmICFJU19FTkFCTEVEKENPTkZJR19NTUNfQVRNRUxNQ0kpCi0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDEsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRCkKLQl7CS8qIERhdGFGbGFzaCBjYXJkICovCi0JCS5tb2RhbGlhcwk9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDE1ICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LAotI2VuZGlmCi0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuaXNfcm1paQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9tYWNiKHZvaWQpCi17Ci0JaWYgKGVrX2hhdmVfMm1tYygpKQotCQlla19tYWNiX2RhdGEucGh5X2lycV9waW4gPSBBVDkxX1BJTl9QQjA7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOwotfQotCi0vKgotICogTkFORCBmbGFzaAotICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBla19uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUgICA9ICJCb290c3RyYXAiLAotCQkub2Zmc2V0ID0gMCwKLQkJLnNpemUgICA9IDQgKiBTWl8xTSwKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDEiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IDYwICogU1pfMU0sCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIlBhcnRpdGlvbiAyIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi0vKiBkZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTMsCi0JLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAotCS5kZXRfcGluCT0gLUVJTlZBTCwKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotCS5vbl9mbGFzaF9iYnQJPSAxLAotCS5wYXJ0cwkJPSBla19uYW5kX3BhcnRpdGlvbiwKLQkubnVtX3BhcnRzCT0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbiksCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDIsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAyLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDQsCi0JLm5yZF9wdWxzZQkJPSA0LAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA0LAotCS5ud2VfcHVsc2UJCT0gNCwKLQotCS5yZWFkX2N5Y2xlCQk9IDcsCi0JLndyaXRlX2N5Y2xlCQk9IDcsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFLAotCS50ZGZfY3ljbGVzCQk9IDMsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9uYW5kKHZvaWQpCi17Ci0JZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNiA9IGJvYXJkX2hhdmVfbmFuZF8xNmJpdCgpOwotCS8qIHNldHVwIGJ1cy13aWR0aCAoOCBvciAxNikgKi8KLQlpZiAoZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNikKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzE2OwotCWVsc2UKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzg7Ci0KLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJmVrX25hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKiB3cF9waW4gYW5kIHZjY19waW4gYXJlIG5vdCBjb25uZWN0ZWQKLSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0gewotCS5zbG90WzFdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQzksCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9tbWModm9pZCkKLXsKLQlpZiAoZWtfaGF2ZV8ybW1jKCkpIHsKLQkJZWtfbW1jX2RhdGEuc2xvdFswXS5idXNfd2lkdGggPSA0OwotCQlla19tbWNfZGF0YS5zbG90WzBdLmRldGVjdF9waW4gPSBBVDkxX1BJTl9QQzI7Ci0JCWVrX21tY19kYXRhLnNsb3RbMF0ud3BfcGluID0gLTE7Ci0JfQotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVrX21tY19kYXRhKTsKLX0KLQotLyoKLSAqIExFRHMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7Ci0JewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMSB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHM1IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBNiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQl9LAotCXsJLyogInBvd2VyIiBsZWQsIHllbGxvdyAqLwotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTksCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9ncGlvX2xlZHModm9pZCkKLXsKLQlpZiAoZWtfaGF2ZV8ybW1jKCkpIHsKLQkJZWtfbGVkc1swXS5ncGlvID0gQVQ5MV9QSU5fUEI4OwotCQlla19sZWRzWzFdLmdwaW8gPSBBVDkxX1BJTl9QQjk7Ci0JfQotCi0JYXQ5MV9ncGlvX2xlZHMoZWtfbGVkcywgQVJSQVlfU0laRShla19sZWRzKSk7Ci19Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BBMzAsCi0JCS5jb2RlCQk9IEJUTl8zLAotCQkuZGVzYwkJPSAiQnV0dG9uIDMiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEEzMSwKLQkJLmNvZGUJCT0gQlROXzQsCi0JCS5kZXNjCQk9ICJCdXR0b24gNCIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBla19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMzAsIDEpOwkvKiBidG4zICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEEzMCwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTMxLCAxKTsJLyogYnRuNCAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BBMzEsIDEpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZla19idXR0b25fZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyoKLSAqIEFEQ3MKLSAqLwotCi1zdGF0aWMgc3RydWN0IGF0OTFfYWRjX2RhdGEgZWtfYWRjX2RhdGEgPSB7Ci0JLmNoYW5uZWxzX3VzZWQgPSBCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMikgfCBCSVQoMyksCi0JLnVzZV9leHRlcm5hbF90cmlnZ2VycyA9IHRydWUsCi0JLnZyZWYgPSAzMzAwLAotfTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFKSB8fCBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZWtfYXVkaW9fY29uc3VtZXJfc3VwcGxpZXNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJBVkREIiwgIjAtMDAxYiIpLAotCVJFR1VMQVRPUl9TVVBQTFkoIkhQVkREIiwgIjAtMDAxYiIpLAotCVJFR1VMQVRPUl9TVVBQTFkoIkRCVkREIiwgIjAtMDAxYiIpLAotCVJFR1VMQVRPUl9TVVBQTFkoIkRDVkREIiwgIjAtMDAxYiIpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGVrX2F2ZGRfcmVnX2luaXRfZGF0YSA9IHsKLQkuY29uc3RyYWludHMJPSB7Ci0JCS5uYW1lCT0gIjNWMyIsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi0JLmNvbnN1bWVyX3N1cHBsaWVzID0gZWtfYXVkaW9fY29uc3VtZXJfc3VwcGxpZXMsCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoZWtfYXVkaW9fY29uc3VtZXJfc3VwcGxpZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyBla192ZGRfcGRhdGEgPSB7Ci0JLnN1cHBseV9uYW1lCT0gImJvYXJkLTNWMyIsCi0JLm1pY3Jvdm9sdHMJPSAzMzAwMDAwLAotCS5ncGlvCQk9IC1FSU5WQUwsCi0JLmVuYWJsZWRfYXRfYm9vdCA9IDAsCi0JLmluaXRfZGF0YQk9ICZla19hdmRkX3JlZ19pbml0X2RhdGEsCi19Owotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWtfdm9sdGFnZV9yZWd1bGF0b3IgPSB7Ci0JLm5hbWUJCT0gInJlZy1maXhlZC12b2x0YWdlIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZla192ZGRfcGRhdGEsCi0JfSwKLX07Ci1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX3JlZ3VsYXRvcnModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX3ZvbHRhZ2VfcmVndWxhdG9yKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX3JlZ3VsYXRvcnModm9pZCkge30KLSNlbmRpZgotCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBla19pMmNfZGV2aWNlc1tdID0gewotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSTJDX0JPQVJEX0lORk8oIjI0YzUxMiIsIDB4NTApCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBJMkNfQk9BUkRfSU5GTygid204NzMxIiwgMHgxYikKLSAgICAgICAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNhbTlnMjBla19hdWRpb19kZXZpY2UgPSB7Ci0JLm5hbWUgICA9ICJhdDkxc2FtOWcyMGVrLWF1ZGlvIiwKLQkuaWQgICAgID0gLTEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9hdWRpbyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2FtOWcyMGVrX2F1ZGlvX2RldmljZSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8IEFUTUVMX1VBUlRfRENECi0JCQkgICB8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWtfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWtfdWRjX2RhdGEpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlla19hZGRfZGV2aWNlX21hY2IoKTsKLQkvKiBSZWd1bGF0b3JzICovCi0JZWtfYWRkX3JlZ3VsYXRvcnMoKTsKLQkvKiBNTUMgKi8KLQlla19hZGRfZGV2aWNlX21tYygpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoZWtfaTJjX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfaTJjX2RldmljZXMpKTsKLQkvKiBMRURzICovCi0JZWtfYWRkX2RldmljZV9ncGlvX2xlZHMoKTsKLQkvKiBQdXNoIEJ1dHRvbnMgKi8KLQlla19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLQkvKiBBRENzICovCi0JYXQ5MV9hZGRfZGV2aWNlX2FkYygmZWtfYWRjX2RhdGEpOwotCS8qIFBDSzAgcHJvdmlkZXMgTUNMSyB0byB0aGUgV004NzMxICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsKLQkvKiBTU0MgKGZvciBXTTg3MzEpICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7Ci0JZWtfYWRkX2RldmljZV9hdWRpbygpOwotfQotCi1NQUNISU5FX1NUQVJUKEFUOTFTQU05RzIwRUssICJBdG1lbCBBVDkxU0FNOUcyMC1FSyIpCi0JLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBla19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECi0KLU1BQ0hJTkVfU1RBUlQoQVQ5MVNBTTlHMjBFS18yTU1DLCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgMiBNTUMgU2xvdCBNb2QiKQotCS8qIE1haW50YWluZXI6IEF0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTE3YzdmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDUyNyArMCwwIEBACi0vKgotICogIEJvYXJkLXNwZWNpZmljIHNldHVwIGNvZGUgZm9yIHRoZSBBVDkxU0FNOU0xMEc0NSBFdmFsdWF0aW9uIEtpdCBmYW1pbHkKLSAqCi0gKiAgQ292ZXJzOiAqIEFUOTFTQU05RzQ1LUVLRVMgIGJvYXJkCi0gKiAgICAgICAgICAqIEFUOTFTQU05TTEwRzQ1LUVLIGJvYXJkCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvYXRtZWwtbWNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9wd20uaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzX3B3bS5oPgotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDkxX2FkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KLSNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXRtZWwtaXNpLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9zeXN0ZW1fcmV2Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSFMgSG9zdCBwb3J0IChjb21tb24gdG8gT0hDSSAmIEVIQ0kpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2hzX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0ge0FUOTFfUElOX1BEMSwgQVQ5MV9QSU5fUEQzfSwKLQkudmJ1c19waW5fYWN0aXZlX2xvdyA9IHsxLCAxfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi0KLS8qCi0gKiBVU0IgSFMgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla191c2JhX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BCMTksCi19OwotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi19OwotCi0KLS8qCi0gKiBNQ0kgKFNEL01NQykKLSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEQxMCwKLQkJLndwX3BpbgkJPSAtRUlOVkFMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbWNpMV9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QRDExLAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BEMjksCi0JfSwKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BENSwKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzY0TSwKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLS8qIGRldF9waW4gaXMgbm90IGNvbm5lY3RlZCAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBla19uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEM4LAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEMxNCwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkub25fZmxhc2hfYmJ0CT0gMSwKLQkucGFydHMJCT0gZWtfbmFuZF9wYXJ0aXRpb24sCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoZWtfbmFuZF9wYXJ0aXRpb24pLAotfTsKLQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBla19uYW5kX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAyLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMiwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSA0LAotCS5ucmRfcHVsc2UJCT0gNCwKLQkubmNzX3dyaXRlX3B1bHNlCT0gNCwKLQkubndlX3B1bHNlCQk9IDQsCi0KLQkucmVhZF9jeWNsZQkJPSA3LAotCS53cml0ZV9jeWNsZQkJPSA3LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKLQkudGRmX2N5Y2xlcwkJPSAzLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCWVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYgPSBib2FyZF9oYXZlX25hbmRfMTZiaXQoKTsKLQkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCi0JaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKLQllbHNlCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OwotCi0JLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCi0Jc2FtOV9zbWNfY29uZmlndXJlKDAsIDMsICZla19uYW5kX3NtY19jb25maWcpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Ci19Ci0KLQotLyoKLSAqICBJU0kKLSAqLwotc3RhdGljIHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGlzaV9kYXRhID0gewotCS5mcmF0ZQkJCT0gSVNJX0NGRzFfRlJBVEVfQ0FQVFVSRV9BTEwsCi0JLyogdG8gdXNlIGNvZGVjIGFuZCBwcmV2aWV3IHBhdGggc2ltdWx0YW5lb3VzbHkgKi8KLQkuZnVsbF9tb2RlCQk9IDEsCi0JLmRhdGFfd2lkdGhfZmxhZ3MJPSBJU0lfREFUQVdJRFRIXzggfCBJU0lfREFUQVdJRFRIXzEwLAotCS8qIElTSV9NQ0sgaXMgcHJvdmlkZWQgYnkgcHJvZ3JhbW1hYmxlIGNsb2NrIG9yIGV4dGVybmFsIGNsb2NrICovCi0JLm1ja19oegkJCT0gMjUwMDAwMDAsCi19OwotCi0KLS8qCi0gKiBzb2MtY2FtZXJhIE9WMjY0MAotICovCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0NBTUVSQV9PVjI2NDApIHx8IFwKLQlkZWZpbmVkKENPTkZJR19TT0NfQ0FNRVJBX09WMjY0MF9NT0RVTEUpCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc2lfY2FtZXJhX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICpsaW5rKQotewotCS8qIElTSSBib2FyZCBmb3IgZWsgdXNpbmcgZGVmYXVsdCA4LWJpdHMgY29ubmVjdGlvbiAqLwotCXJldHVybiBTT0NBTV9EQVRBV0lEVEhfODsKLX0KLQotc3RhdGljIGludCBpMmNfY2FtZXJhX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG9uKQotewotCS8qIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBjYW1lcmEgKi8KLQlwcl9kZWJ1ZygiJXM6ICVzIHRoZSBjYW1lcmFcbiIsIF9fZnVuY19fLCBvbiA/ICJFTkFCTEUiIDogIkRJU0FCTEUiKTsKLQlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QRDEzLCAhb24pOwotCi0JaWYgKCFvbikKLQkJZ290byBvdXQ7Ci0KLQkvKiBJZiBlbmFibGVkLCBnaXZlIGEgcmVzZXQgaW1wdWxzZSAqLwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BEMTIsIDApOwotCW1zbGVlcCgyMCk7Ci0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEQxMiwgMSk7Ci0JbXNsZWVwKDEwMCk7Ci0KLW91dDoKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfY2FtZXJhID0gewotCUkyQ19CT0FSRF9JTkZPKCJvdjI2NDAiLCAweDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua19vdjI2NDAgPSB7Ci0JLmJ1c19pZAkJCT0gMCwKLQkuYm9hcmRfaW5mbwkJPSAmaTJjX2NhbWVyYSwKLQkuaTJjX2FkYXB0ZXJfaWQJCT0gMCwKLQkucG93ZXIJCQk9IGkyY19jYW1lcmFfcG93ZXIsCi0JLnF1ZXJ5X2J1c19wYXJhbQk9IGlzaV9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXNpX292MjY0MCA9IHsKLQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rX292MjY0MCwKLQl9LAotfTsKLSNlbmRpZgotCi0KLS8qCi0gKiBMQ0QgQ29udHJvbGxlcgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGF0OTFfdGZ0X3ZnYV9tb2Rlc1tdID0gewotCXsKLQkJLm5hbWUgICAgICAgICAgID0gIkxHIiwKLQkJLnJlZnJlc2gJPSA2MCwKLQkJLnhyZXMJCT0gNDgwLAkJLnlyZXMJCT0gMjcyLAotCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoOTAwMCksCi0KLQkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAxLAotCQkudXBwZXJfbWFyZ2luCT0gNDAsCQkubG93ZXJfbWFyZ2luCT0gMSwKLQkJLmhzeW5jX2xlbgk9IDQ1LAkJLnZzeW5jX2xlbgk9IDEsCi0KLQkJLnN5bmMJCT0gMCwKLQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7Ci0JLm1hbnVmYWN0dXJlcgk9ICJMRyIsCi0JLm1vbml0b3IgICAgICAgID0gIkxCMDQzV1ExIiwKLQotCS5tb2RlZGIJCT0gYXQ5MV90ZnRfdmdhX21vZGVzLAotCS5tb2RlZGJfbGVuCT0gQVJSQVlfU0laRShhdDkxX3RmdF92Z2FfbW9kZXMpLAotCS5oZm1pbgkJPSAxNTAwMCwKLQkuaGZtYXgJCT0gMTc2NDAsCi0JLnZmbWluCQk9IDU3LAotCS52Zm1heAkJPSA2NywKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTlHNDVfREVGQVVMVF9MQ0RDT04yIAkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9URlQgXAotCQkJCQl8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRSkKLQotLyogRHJpdmVyIGRhdGFzICovCi1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhID0gewotCS5sY2Rjb25faXNfYmFja2xpZ2h0CQk9IHRydWUsCi0JLmRlZmF1bHRfYnBwCQkJPSAzMiwKLQkuZGVmYXVsdF9kbWFjb24JCQk9IEFUTUVMX0xDRENfRE1BRU4sCi0JLmRlZmF1bHRfbGNkY29uMgkJPSBBVDkxU0FNOUc0NV9ERUZBVUxUX0xDRENPTjIsCi0JLmRlZmF1bHRfbW9uc3BlY3MJCT0gJmF0OTFmYl9kZWZhdWx0X21vbnNwZWNzLAotCS5ndWFyZF90aW1lCQkJPSA5LAotCS5sY2Rfd2lyaW5nX21vZGUJCT0gQVRNRUxfTENEQ19XSVJJTkdfUkdCLAotfTsKLQotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGE7Ci0jZW5kaWYKLQotCi0vKgotICogQURDcyBhbmQgdG91Y2hzY3JlZW4KLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX2FkY19kYXRhIGVrX2FkY19kYXRhID0gewotCS5jaGFubmVsc191c2VkID0gQklUKDApIHwgQklUKDEpIHwgQklUKDIpIHwgQklUKDMpIHwgQklUKDQpIHwgQklUKDUpIHwgQklUKDYpIHwgQklUKDcpLAotCS51c2VfZXh0ZXJuYWxfdHJpZ2dlcnMgPSB0cnVlLAotCS52cmVmID0gMzMwMCwKLQkudG91Y2hzY3JlZW5fdHlwZSA9IEFUTUVMX0FEQ19UT1VDSFNDUkVFTl80V0lSRSwKLX07Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKLQl7CS8qIEJQMSwgImxlZnRjbGljIiAqLwotCQkuY29kZQkJPSBCVE5fTEVGVCwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEI2LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJsZWZ0X2NsaWNrIiwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewkvKiBCUDIsICJyaWdodGNsaWMiICovCi0JCS5jb2RlCQk9IEJUTl9SSUdIVCwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEI3LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJyaWdodF9jbGljayIsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCQkvKiBCUDMsICJqb3lzdGljayIgKi8KLQl7Ci0JCS5jb2RlCQk9IEtFWV9MRUZULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjE0LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJKb3lzdGljayBMZWZ0IiwKLQl9LAotCXsKLQkJLmNvZGUJCT0gS0VZX1JJR0hULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjE1LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJKb3lzdGljayBSaWdodCIsCi0JfSwKLQl7Ci0JCS5jb2RlCQk9IEtFWV9VUCwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxNiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkuZGVzYwkJPSAiSm95c3RpY2sgVXAiLAotCX0sCi0JewotCQkuY29kZQkJPSBLRVlfRE9XTiwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxNywKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkuZGVzYwkJPSAiSm95c3RpY2sgRG93biIsCi0JfSwKLQl7Ci0JCS5jb2RlCQk9IEtFWV9FTlRFUiwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxOCwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkuZGVzYwkJPSAiSm95c3RpY2sgUHJlc3MiLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGVrX2J1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gZWtfYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGVrX2J1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWtfYnV0dG9uX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZla19idXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShla19idXR0b25zKTsgaSsrKSB7Ci0JCWF0OTFfc2V0X0dQSU9fcGVyaXBoKGVrX2J1dHRvbnNbaV0uZ3BpbywgMSk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGVrX2J1dHRvbnNbaV0uZ3BpbywgMSk7Ci0JfQotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZla19idXR0b25fZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKgotICogQUM5NwotICogcmVzZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQ6IE5SU1QKLSAqLwotc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGVrX2FjOTdfZGF0YSA9IHsKLQkucmVzZXRfcGluCT0gLUVJTlZBTCwKLX07Ci0KLQotLyoKLSAqIExFRHMgLi4uIHRoZXNlIGNvdWxkIGFsbCBiZSBQV00tZHJpdmVuLCBmb3IgdmFyaWFibGUgYnJpZ2h0bmVzcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKLQl7CS8qICJ0b3AiIGxlZCwgcmVkLCBwb3dlcmxlZCAqLwotCQkubmFtZQkJCT0gImQ4IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMzAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9LAotCXsJLyogImxlZnQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQyLCBwd20zICovCi0JCS5uYW1lCQkJPSAiZDYiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQwLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCi0JfSwKLSNpZiAhSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JewkvKiAicmlnaHQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQxLCBwd20xICovCi0JCS5uYW1lCQkJPSAiZDciLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQzMSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJtbWMwIiwKLQl9LAotI2VuZGlmCi19OwotCi0KLS8qCi0gKiBQV00gTGVkcwotICovCi1zdGF0aWMgc3RydWN0IHB3bV9sb29rdXAgcHdtX2xvb2t1cFtdID0gewotCVBXTV9MT09LVVAoImF0OTFzYW05cmwtcHdtIiwgMSwgImxlZHNfcHdtIiwgImQ3IiwKLQkJICAgNTAwMCwgUFdNX1BPTEFSSVRZX0lOVkVSU0VEKSwKLX07Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19MRURTX1BXTSkKLXN0YXRpYyBzdHJ1Y3QgbGVkX3B3bSBwd21fbGVkc1tdID0gewotCXsJLyogInJpZ2h0IiBsZWQsIGdyZWVuLCB1c2VybGVkMSwgcHdtMSAqLwotCQkubmFtZSA9ICJkNyIsCi0JCS5tYXhfYnJpZ2h0bmVzcwk9IDI1NSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBsZWRfcHdtX3BsYXRmb3JtX2RhdGEgcHdtX2RhdGEgPSB7Ci0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShwd21fbGVkcyksCi0JLmxlZHMJCT0gcHdtX2xlZHMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsZWRzX3B3bSA9IHsKLQkubmFtZQk9ICJsZWRzX3B3bSIsCi0JLmlkCT0gLTEsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcHdtX2RhdGEsCi0JfSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19DQU1FUkFfT1YyNjQwKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfU09DX0NBTUVSQV9PVjI2NDBfTU9EVUxFKQotCSZpc2lfb3YyNjQwLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JJmxlZHNfcHdtLAotI2VuZGlmCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgbm90IGNvbm5lY3RlZCBvbiB0aGUgLUVLIGJvYXJkICovCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTlHNDVfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhTIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKCZla191c2JoX2hzX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91c2JoX2VoY2koJmVrX3VzYmhfaHNfZGF0YSk7Ci0JLyogVVNCIEhTIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91c2JhKCZla191c2JhX3VkY19kYXRhKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7Ci0JLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmbWNpMF9kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDEsICZtY2kxX2RhdGEpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYygwLCBOVUxMLCAwKTsKLQkvKiBJU0ksIHVzaW5nIHByb2dyYW1tYWJsZSBjbG9jayBhcyBJU0lfTUNLICovCi0JYXQ5MV9hZGRfZGV2aWNlX2lzaSgmaXNpX2RhdGEsIHRydWUpOwotCS8qIExDRCBDb250cm9sbGVyICovCi0JYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7Ci0JLyogQURDIGFuZCB0b3VjaHNjcmVlbiAqLwotCWF0OTFfYWRkX2RldmljZV9hZGMoJmVrX2FkY19kYXRhKTsKLQkvKiBQdXNoIEJ1dHRvbnMgKi8KLQlla19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLQkvKiBBQzk3ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2FjOTcoJmVrX2FjOTdfZGF0YSk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwotCXB3bV9hZGRfdGFibGUocHdtX2xvb2t1cCwgQVJSQVlfU0laRShwd21fbG9va3VwKSk7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JYXQ5MV9hZGRfZGV2aWNlX3B3bSgxIDw8IEFUOTFfUFdNMSk7Ci0jZW5kaWYKLQkvKiBPdGhlciBwbGF0Zm9ybSBkZXZpY2VzICovCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQVQ5MVNBTTlNMTBHNDVFSywgIkF0bWVsIEFUOTFTQU05TTEwRzQ1LUVLIikKLQkvKiBNYWludGFpbmVyOiBBdG1lbCAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGVrX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiY2EzMjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICogIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0OTFfYWRjLmg+Ci0KLSNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotCi0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSFMgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla191c2JhX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BBOCwKLX07Ci0KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQTE1LAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLQotLyoKLSAqIE5BTkQgZmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgZWtfbmFuZF9wYXJ0aXRpb25bXSA9IHsKLQl7Ci0JCS5uYW1lCT0gIlBhcnRpdGlvbiAxIiwKLQkJLm9mZnNldAk9IDAsCi0JCS5zaXplCT0gU1pfMjU2SywKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QRDE3LAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEI2LAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi0JLm9uX2ZsYXNoX2JidAk9IDEsCi0JLnBhcnRzCQk9IGVrX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGVrX25hbmRfcGFydGl0aW9uKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMSwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDEsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gMywKLQkubnJkX3B1bHNlCQk9IDMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDMsCi0JLm53ZV9wdWxzZQkJPSAzLAotCi0JLnJlYWRfY3ljbGUJCT0gNSwKLQkud3JpdGVfY3ljbGUJCT0gNSwKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKLQkudGRmX2N5Y2xlcwkJPSAyLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCAzLCAmZWtfbmFuZF9zbWNfY29uZmlnKTsKLQotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOwotfQotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcwotICovCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLX07Ci0KLQotLyoKLSAqIExDRCBDb250cm9sbGVyCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7Ci0JewotCQkubmFtZQkJPSAiVFgwOUQ1MFZNMUNDQSBAIDYwIiwKLQkJLnJlZnJlc2gJPSA2MCwKLQkJLnhyZXMJCT0gMjQwLAkJLnlyZXMJCT0gMzIwLAotCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoNDk2NSksCi0KLQkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAzMywKLQkJLnVwcGVyX21hcmdpbgk9IDEsCQkubG93ZXJfbWFyZ2luCT0gMCwKLQkJLmhzeW5jX2xlbgk9IDUsCQkudnN5bmNfbGVuCT0gMSwKLQotCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7Ci0JLm1hbnVmYWN0dXJlcgk9ICJISVQiLAotCS5tb25pdG9yCT0gIlRYMDlENTBWTTFDQ0EiLAotCi0JLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCi0JLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCi0JLmhmbWluCQk9IDE1MDAwLAotCS5oZm1heAkJPSA2NDAwMCwKLQkudmZtaW4JCT0gNTAsCi0JLnZmbWF4CQk9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTlSTF9ERUZBVUxUX0xDRENPTjIJKEFUTUVMX0xDRENfTUVNT1JfTElUVExFIFwKLQkJCQkJfCBBVE1FTF9MQ0RDX0RJU1RZUEVfVEZUIFwKLQkJCQkJfCBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkUpCi0KLXN0YXRpYyB2b2lkIGF0OTFfbGNkY19wb3dlcl9jb250cm9sKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqcGRhdGEsIGludCBvbikKLXsKLQlpZiAob24pCi0JCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEMxLCAwKTsJLyogcG93ZXIgdXAgKi8KLQllbHNlCi0JCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEMxLCAxKTsJLyogcG93ZXIgZG93biAqLwotfQotCi0vKiBEcml2ZXIgZGF0YXMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmxjZGNvbl9pc19iYWNrbGlnaHQgICAgICAgICAgICA9IHRydWUsCi0JLmRlZmF1bHRfYnBwCQkJPSAxNiwKLQkuZGVmYXVsdF9kbWFjb24JCQk9IEFUTUVMX0xDRENfRE1BRU4sCi0JLmRlZmF1bHRfbGNkY29uMgkJPSBBVDkxU0FNOVJMX0RFRkFVTFRfTENEQ09OMiwKLQkuZGVmYXVsdF9tb25zcGVjcwkJPSAmYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MsCi0JLmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wJPSBhdDkxX2xjZGNfcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLQkubGNkX3dpcmluZ19tb2RlCQk9IEFUTUVMX0xDRENfV0lSSU5HX1JHQiwKLX07Ci0KLSNlbHNlCi1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhOwotI2VuZGlmCi0KLQotLyoKLSAqIEFDOTcKLSAqIHJlc2V0X3BpbiBpcyBub3QgY29ubmVjdGVkOiBOUlNUCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBla19hYzk3X2RhdGEgPSB7Ci0JLnJlc2V0X3Bpbgk9IC1FSU5WQUwsCi19OwotCi0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDEgdG8gYmUgZGVmaW5lZCAqLwotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QRDE1LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCX0sCi0JewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMiB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHMyIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMTYsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwKLQl7CS8qICJwb3dlciIgbGVkLCB5ZWxsb3cgKi8KLQkJLm5hbWUJCQk9ICJkczMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQxNCwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0KLX07Ci0KLQotLyoKLSAqIEFEQyArIFRvdWNoc2NyZWVuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSBla19hZGNfZGF0YSA9IHsKLQkuY2hhbm5lbHNfdXNlZCA9IEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg1KSwKLQkudXNlX2V4dGVybmFsX3RyaWdnZXJzID0gdHJ1ZSwKLQkudnJlZiA9IDMzMDAsCi0JLnRvdWNoc2NyZWVuX3R5cGUgPSBBVE1FTF9BRENfVE9VQ0hTQ1JFRU5fNFdJUkUsCi19OwotCi0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BCMCwKLQkJLmNvZGUJCT0gQlROXzIsCi0JCS5kZXNjCQk9ICJSaWdodCBDbGljayIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjEsCi0JCS5jb2RlCQk9IEJUTl8xLAotCQkuZGVzYwkJPSAiTGVmdCBDbGljayIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBla19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMSwgMSk7CS8qIGJ0bjEgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjEsIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIwLCAxKTsJLyogYnRuMiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMCwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkge30KLSNlbmRpZgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05UkxfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhTICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmEoJmVrX3VzYmFfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogTkFORCAqLwotCWVrX2FkZF9kZXZpY2VfbmFuZCgpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZtY2kwX2RhdGEpOwotCS8qIExDRCBDb250cm9sbGVyICovCi0JYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7Ci0JLyogQUM5NyAqLwotCWF0OTFfYWRkX2RldmljZV9hYzk3KCZla19hYzk3X2RhdGEpOwotCS8qIFRvdWNoIFNjcmVlbiBDb250cm9sbGVyICsgQURDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2FkYygmZWtfYWRjX2RhdGEpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLQkvKiBQdXNoIEJ1dHRvbnMgKi8KLQlla19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxU0FNOVJMRUssICJBdG1lbCBBVDkxU0FNOVJMLUVLIikKLQkvKiBNYWludGFpbmVyOiBBdG1lbCAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGVrX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YWZmODQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAxMCBCbHVld2F0ZXIgU3lzdGVtIEx0ZAotICoKLSAqIEF1dGhvcjogQW5kcmUgUmVuYXVkIDxhbmRyZUBibHVld2F0ZXJzeXMuY29tPgotICogQXV0aG9yOiBSeWFuIE1hbGxvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvcGNhOTUzeC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLSNkZWZpbmUgU05BUFBFUjkyNjBfSU9fRVhQX0dQSU8oeCkJKE5SX0JVSUxUSU5fR1BJTyArICh4KSkKLQotc3RhdGljIHZvaWQgX19pbml0IHNuYXBwZXI5MjYwX2luaXRfZWFybHkodm9pZCkKLXsKLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgc25hcHBlcjkyNjBfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBzbmFwcGVyOTI2MF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JCT0gU05BUFBFUjkyNjBfSU9fRVhQX0dQSU8oNSksCi0JLnZidXNfYWN0aXZlX2xvdwk9IDEsCi0JLnZidXNfcG9sbGVkCQk9IDEsCi0JLnB1bGx1cF9waW4JCT0gLUVJTlZBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHNuYXBwZXI5MjYwX21hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSAtRUlOVkFMLAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX25hbmRfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJPSAiUHJlYm9vdCIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzEyOEssCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIkJvb3Rsb2FkZXIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQk9IFNaXzI1NkssCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIkVudmlyb25tZW50IiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJPSBTWl8xMjhLLAotCX0sCi0JewotCQkubmFtZQk9ICJLZXJuZWwiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQk9IFNaXzRNLAotCX0sCi0JewotCQkubmFtZQk9ICJGaWxlc3lzdGVtIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIxLAotCS5jbGUJCT0gMjIsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QQzEzLAotCS5wYXJ0cwkJPSBzbmFwcGVyOTI2MF9uYW5kX3BhcnRpdGlvbnMsCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoc25hcHBlcjkyNjBfbmFuZF9wYXJ0aXRpb25zKSwKLQkuYnVzX3dpZHRoXzE2CT0gMCwKLQkuZW5hYmxlX3Bpbgk9IC1FSU5WQUwsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDAsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAwLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDUsCi0JLm5yZF9wdWxzZQkJPSAyLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA1LAotCS5ud2VfcHVsc2UJCT0gMiwKLQotCS5yZWFkX2N5Y2xlCQk9IDcsCi0JLndyaXRlX2N5Y2xlCQk9IDcsCi0KLQkubW9kZQkJCT0gKEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwKLQkJCQkgICBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFKSwKLQkudGRmX2N5Y2xlcwkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgc25hcHBlcjkyNjBfaW9fZXhwYW5kZXJfZGF0YSA9IHsKLQkuZ3Bpb19iYXNlCQk9IFNOQVBQRVI5MjYwX0lPX0VYUF9HUElPKDApLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQkvKiBJTyBleHBhbmRlciAqLwotCQlJMkNfQk9BUkRfSU5GTygibWF4NzMxMiIsIDB4MjgpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZzbmFwcGVyOTI2MF9pb19leHBhbmRlcl9kYXRhLAotCX0sCi0JewotCQkvKiBBdWRpbyBjb2RlYyAqLwotCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMjMiLCAweDFhKSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX2kyY19pc2wxMjA4ID0gewotCQkvKiBSVEMgKi8KLQkJSTJDX0JPQVJEX0lORk8oImlzbDEyMDgiLCAweDZmKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzbmFwcGVyOTI2MF9hZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE0LCAwKTsKLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJnNuYXBwZXI5MjYwX25hbmRfc21jX2NvbmZpZyk7Ci0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJnNuYXBwZXI5MjYwX25hbmRfZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzbmFwcGVyOTI2MF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKHNuYXBwZXI5MjYwX2kyY19kZXZpY2VzLAotCQkJICAgIEFSUkFZX1NJWkUoc25hcHBlcjkyNjBfaTJjX2RldmljZXMpKTsKLQotCXNuYXBwZXI5MjYwX2kyY19pc2wxMjA4LmlycSA9IGdwaW9fdG9faXJxKEFUOTFfUElOX1BBMzEpOwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZzbmFwcGVyOTI2MF9pMmNfaXNsMTIwOCwgMSk7Ci0KLQkvKiBEZWJ1ZyBvbiB0dHlTMCAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsCi0JCQkgICBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLAotCQkJICAgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMiwgMywgMCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZzbmFwcGVyOTI2MF91c2JoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnNuYXBwZXI5MjYwX3VkY19kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZzbmFwcGVyOTI2MF9tYWNiX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV9zc2MoQVQ5MVNBTTkyNjBfSURfU1NDLCAoQVRNRUxfU1NDX1RGIHwgQVRNRUxfU1NDX1RLIHwKLQkJCQkJCSBBVE1FTF9TU0NfVEQgfCBBVE1FTF9TU0NfUkQpKTsKLQlzbmFwcGVyOTI2MF9hZGRfZGV2aWNlX25hbmQoKTsKLX0KLQotTUFDSElORV9TVEFSVChTTkFQUEVSXzkyNjAsICJCbHVld2F0ZXIgU3lzdGVtcyBTbmFwcGVyIDkyNjAvOUcyMCBtb2R1bGUiKQotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IHNuYXBwZXI5MjYwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBzbmFwcGVyOTI2MF9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc3RhbXA5ZzIwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc3RhbXA5ZzIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MjU2NDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXN0YW1wOWcyMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzdGlhbiBHbGluZGthbXAgPGNocmlzdGlhbi5nbGluZGthbXBAdGFza2l0LmRlPgotICogICAgICAgICAgICAgICAgICAgICB0YXNraXQgR21iSAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdzEtZ3Bpby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotdm9pZCBfX2luaXQgc3RhbXA5ZzIwX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotLyoKLSAqIE5BTkQgZmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBuYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCi0JLmJ1c193aWR0aF8xNgk9IDAsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIG5hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDIsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAyLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDQsCi0JLm5yZF9wdWxzZQkJPSA0LAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA0LAotCS5ud2VfcHVsc2UJCT0gNCwKLQotCS5yZWFkX2N5Y2xlCQk9IDcsCi0JLndyaXRlX2N5Y2xlCQk9IDcsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCi0JLnRkZl9jeWNsZXMJCT0gMywKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJm5hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKiBkZXRfcGluLCB3cF9waW4gYW5kIHZjY19waW4gYXJlIG5vdCBjb25uZWN0ZWQKLSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1tY19kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSAtMSwKLQkJLndwX3BpbgkJPSAtMSwKLQl9LAotfTsKLQotCi0vKgotICogVVNCIEhvc3QgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgcG9ydHV4ZzIwX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDNywKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIHN0YW1wOWcyMGV2Yl91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQTIyLAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0vKgotICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtYWNiX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEEyOCwKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcG9ydHV4ZzIwX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQkJPSAiTEVEMiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzUsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEM0LAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCX0sIHsKLQkJLm5hbWUJCQk9ICJMRUQ0IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BDMTAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHN0YW1wOWcyMGV2Yl9sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJCT0gIkQ4IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTgsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwgewotCQkubmFtZQkJCT0gIkQ5IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTksCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwgewotCQkubmFtZQkJCT0gIkQxMCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjIwLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JfQotfTsKLQotCi0vKgotICogU1BJIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwb3J0dXhnMjBfc3BpX2RldmljZXNbXSA9IHsKLQl7Ci0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwgewotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDEgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAxLAotCX0sCi19OwotCi0KLS8qCi0gKiBEYWxsYXMgMS1XaXJlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgdzFfZ3Bpb19wbGF0Zm9ybV9kYXRhIHcxX2dwaW9fcGRhdGEgPSB7Ci0JLnBpbgkJPSBBVDkxX1BJTl9QQTI5LAotCS5pc19vcGVuX2RyYWluCT0gMSwKLQkuZXh0X3B1bGx1cF9lbmFibGVfcGluCT0gLUVJTlZBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHcxX2RldmljZSA9IHsKLQkubmFtZQkJCT0gIncxLWdwaW8iLAotCS5pZAkJCT0gLTEsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJncxX2dwaW9fcGRhdGEsCi19OwotCi12b2lkIGFkZF93MSh2b2lkKQotewotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKHcxX2dwaW9fcGRhdGEucGluLCAxKTsKLQlhdDkxX3NldF9tdWx0aV9kcml2ZSh3MV9ncGlvX3BkYXRhLnBpbiwgMSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3MV9kZXZpY2UpOwotfQotCi0KLXZvaWQgX19pbml0IHN0YW1wOWcyMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIE5BTkQgKi8KLQlhZGRfZGV2aWNlX25hbmQoKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZtbWNfZGF0YSk7Ci0JLyogVzEgKi8KLQlhZGRfdzEoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBvcnR1eGcyMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJCQkJfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSCi0JCQkJCQl8IEFUTUVMX1VBUlRfRENEIHwgQVRNRUxfVUFSVF9SSSk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzIuIChSeCwgVHgsIENUUywgUlRTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOwotCi0JLyogVVNBUlQyIG9uIHR0eVMzLiAoUngsIFR4LCBDVFMsIFJUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMyLCAzLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUNCBvbiB0dHlTNS4gKFJ4LCBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzQsIDUsIDApOwotCi0JLyogVVNBUlQ1IG9uIHR0eVM2LiAoUngsIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTNSwgNiwgMCk7Ci0Jc3RhbXA5ZzIwX2JvYXJkX2luaXQoKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZ1c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZwb3J0dXhnMjBfdWRjX2RhdGEpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmbWFjYl9kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkocG9ydHV4ZzIwX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBvcnR1eGcyMF9zcGlfZGV2aWNlcykpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhwb3J0dXhnMjBfbGVkcywgQVJSQVlfU0laRShwb3J0dXhnMjBfbGVkcykpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc3RhbXA5ZzIwZXZiX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCi0JCQkJCQl8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IKLQkJCQkJCXwgQVRNRUxfVUFSVF9EQ0QgfCBBVE1FTF9VQVJUX1JJKTsKLQlzdGFtcDlnMjBfYm9hcmRfaW5pdCgpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJnVzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnN0YW1wOWcyMGV2Yl91ZGNfZGF0YSk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZtYWNiX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKHN0YW1wOWcyMGV2Yl9sZWRzLCBBUlJBWV9TSVpFKHN0YW1wOWcyMGV2Yl9sZWRzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoUE9SVFVYRzIwLCAidGFza2l0IFBvcnR1eEcyMCIpCi0JLyogTWFpbnRhaW5lcjogdGFza2l0IEdtYkggKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBzdGFtcDlnMjBfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IHBvcnR1eGcyMF9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKLQotTUFDSElORV9TVEFSVChTVEFNUDlHMjAsICJ0YXNraXQgU3RhbXA5RzIwIikKLQkvKiBNYWludGFpbmVyOiB0YXNraXQgR21iSCAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IHN0YW1wOWcyMF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gc3RhbXA5ZzIwZXZiX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC15bC05MjAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZmRiMGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYworKysgL2Rldi9udWxsCkBAIC0xLDU5NyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYwotICoKLSAqIEFkYXB0ZWQgZnJvbSB2YXJpb3VzIGJvYXJkIGZpbGVzIGluIGFyY2gvYXJtL21hY2gtYXQ5MQotICoKLSAqIE1vZGlmaWNhdGlvbnMgZm9yIFlMLTkyMDAgcGxhdGZvcm06Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IFMuIEJpcnRsZXMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IHlsOTIwMF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogU2V0IGNwdSB0eXBlOiBQUUZQICovCi0JYXQ5MXJtOTIwMF9zZXRfdHlwZShBUkNIX1JFVklTT05fOTIwMF9QUUZQKTsKLQotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHlsOTIwMF9sZWRzW10gPSB7Ci0JewkvKiBEMiAqLwotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxNywKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJ0aW1lciIsCi0JfSwKLQl7CS8qIEQzICovCi0JCS5uYW1lCQkJPSAibGVkMyIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JfSwKLQl7CS8qIEQ0ICovCi0JCS5uYW1lCQkJPSAibGVkNCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE1LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCX0sCi0JewkvKiBENSAqLwotCQkubmFtZQkJCT0gImxlZDUiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI4LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCX0KLX07Ci0KLS8qCi0gKiBFdGhlcm5ldAotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIHlsOTIwMF9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JCT0gQVQ5MV9QSU5fUEIyOCwKLQkuaXNfcm1paQkJPSAxLAotfTsKLQotLyoKLSAqIFVTQiBIb3N0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSB5bDkyMDBfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJCT0gMSwJLyogUFFGUCB2ZXJzaW9uIG9mIEFUOTFSTTkyMDAgKi8KLQkudmJ1c19waW4JCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIHlsOTIwMF91ZGNfZGF0YSA9IHsKLQkucHVsbHVwX3BpbgkJPSBBVDkxX1BJTl9QQzQsCi0JLnZidXNfcGluCQk9IEFUOTFfUElOX1BDNSwKLQkucHVsbHVwX2FjdGl2ZV9sb3cJPSAxLAkvKiBBY3RpdmUgTG93IGR1ZSB0byBQTlAgdHJhbnNpc3RvciAocGcgNykgKi8KLQotfTsKLQotLyoKLSAqIE1NQwotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgeWw5MjAwX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEI5LAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLS8qCi0gKiBOQU5EIEZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIHlsOTIwMF9uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAiQVQ5MSBOQU5EIHBhcnRpdGlvbiAxLCBib290IiwKLQkJLm9mZnNldAk9IDAsCi0JCS5zaXplCT0gU1pfMjU2SwotCX0sCi0JewotCQkubmFtZQk9ICJBVDkxIE5BTkQgcGFydGl0aW9uIDIsIGtlcm5lbCIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gKDIgKiBTWl8xTSkgLSBTWl8yNTZLCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIkFUOTEgTkFORCBwYXJ0aXRpb24gMywgZmlsZXN5c3RlbSIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gMTQgKiBTWl8xTQotCX0sCi0JewotCQkubmFtZQk9ICJBVDkxIE5BTkQgcGFydGl0aW9uIDQsIHN0b3JhZ2UiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IFNaXzE2TQotCX0sCi0JewotCQkubmFtZQk9ICJBVDkxIE5BTkQgcGFydGl0aW9uIDUsIGV4dC1mcyIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gU1pfMzJNCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSB5bDkyMDBfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gNiwKLQkuY2xlCQk9IDcsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxNCwJLyogUi8hQiAoU2hlZXQxMCkgKi8KLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTUsCS8qICFDRSAgKFNoZWV0MTApICovCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkucGFydHMJCT0geWw5MjAwX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKHlsOTIwMF9uYW5kX3BhcnRpdGlvbiksCi19OwotCi0vKgotICogTk9SIEZsYXNoCi0gKi8KLSNkZWZpbmUgWUw5MjAwX0ZMQVNIX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKLSNkZWZpbmUgWUw5MjAwX0ZMQVNIX1NJWkUJU1pfMTZNCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB5bDkyMDBfZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJCT0gIkJvb3Rsb2FkZXIiLAotCQkub2Zmc2V0CQk9IDAsCi0JCS5zaXplCQk9IFNaXzI1NkssCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJLZXJuZWwiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJCT0gKDIgKiBTWl8xTSkgLSBTWl8yNTZLCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJGaWxlc3lzdGVtIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSB5bDkyMDBfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gMiwKLQkucGFydHMJCT0geWw5MjAwX2ZsYXNoX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRSh5bDkyMDBfZmxhc2hfcGFydGl0aW9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHlsOTIwMF9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IFlMOTIwMF9GTEFTSF9CQVNFLAotCQkuZW5kCT0gWUw5MjAwX0ZMQVNIX0JBU0UgKyBZTDkyMDBfRkxBU0hfU0laRSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHlsOTIwMF9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmeWw5MjAwX2ZsYXNoX2RhdGEsCi0JCQl9LAotCS5yZXNvdXJjZQk9IHlsOTIwMF9mbGFzaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHlsOTIwMF9mbGFzaF9yZXNvdXJjZXMpLAotfTsKLQotLyoKLSAqIEkyQyAoVFdJKQotICovCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgeWw5MjAwX2kyY19kZXZpY2VzW10gPSB7Ci0JewkvKiBFRVBST00gKi8KLQkJSTJDX0JPQVJEX0lORk8oIjI0YzEyOCIsIDB4NTApLAotCX0KLX07Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24geWw5MjAwX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BBMjQsCi0JCS5jb2RlCQk9IEJUTl8yLAotCQkuZGVzYwkJPSAiU1cyIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BCMSwKLQkJLmNvZGUJCT0gQlROXzMsCi0JCS5kZXNjCQk9ICJTVzMiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIyLAotCQkuY29kZQkJPSBCVE5fNCwKLQkJLmRlc2MJCT0gIlNXNCIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjYsCi0JCS5jb2RlCQk9IEJUTl81LAotCQkuZGVzYwkJPSAiU1c1IiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSB5bDkyMDBfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSB5bDkyMDBfYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHlsOTIwMF9idXR0b25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHlsOTIwMF9idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnlsOTIwMF9idXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQotewotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEyNCwgMSk7CS8qIFNXMiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BBMjQsIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIxLCAxKTsJLyogU1czICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEIxLCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMiwgMSk7CS8qIFNXNCAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMiwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjYsIDEpOwkvKiBTVzUgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjYsIDEpOwotCi0JLyogRW5hYmxlIGJ1dHRvbnMgKFNoZWV0IDUpICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEI3LCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmeWw5MjAwX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCB5bDkyMDBfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyoKLSAqIFRvdWNoc2NyZWVuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLXN0YXRpYyBpbnQgYWRzNzg0M19wZW5kb3duX3N0YXRlKHZvaWQpCi17Ci0JcmV0dXJuICFhdDkxX2dldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BCMTEpOwkvKiBUb3VjaHNjcmVlbiBQRU5JUlEgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgYWRzX2luZm8gPSB7Ci0JLm1vZGVsCQkJPSA3ODQzLAotCS54X21pbgkJCT0gMTUwLAotCS54X21heAkJCT0gMzgzMCwKLQkueV9taW4JCQk9IDE5MCwKLQkueV9tYXgJCQk9IDM4MzAsCi0JLnZyZWZfZGVsYXlfdXNlY3MJPSAxMDAsCi0KLQkvKiBGb3IgYSA4IiB0b3VjaC1zY3JlZW4gKi8KLQkvLyAueF9wbGF0ZV9vaG1zCQk9IDYwMywKLQkvLyAueV9wbGF0ZV9vaG1zCQk9IDMzMiwKLQotCS8qIEZvciBhIDEwLjQiIHRvdWNoLXNjcmVlbiAqLwotCS8vIC54X3BsYXRlX29obXMJCT0gNjExLAotCS8vIC55X3BsYXRlX29obXMJCT0gMzI1LAotCi0JLnhfcGxhdGVfb2htcwkJPSA1NzYsCi0JLnlfcGxhdGVfb2htcwkJPSAzNjYsCi0KLQkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLCAvKiBnZW5lcmFsbHkgbm9uc2Vuc2Ugb24gdGhlIDc4NDMgKi8KLQkuZGVib3VuY2VfbWF4CQk9IDEsCi0JLmRlYm91bmNlX3JlcAkJPSAwLAotCS5kZWJvdW5jZV90b2wJCT0gKH4wKSwKLQkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQzX3BlbmRvd25fc3RhdGUsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfdHModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMTEsIDEpOwkvKiBUb3VjaHNjcmVlbiBpbnRlcnJ1cHQgcGluICovCi0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjEwLCAxKTsJLyogVG91Y2hzY3JlZW4gQlVTWSBzaWduYWwgLSBub3QgdXNlZCEgKi8KLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfdHModm9pZCkge30KLSNlbmRpZgotCi0vKgotICogU1BJIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyB5bDkyMDBfc3BpX2RldmljZXNbXSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLQl7CS8qIFRvdWNoc2NyZWVuICovCi0JCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDUwMDAgKiAyNiwKLQkJLnBsYXRmb3JtX2RhdGEJPSAmYWRzX2luZm8sCi0JCS5pcnEJCT0gQVQ5MV9QSU5fUEIxMSwKLQl9LAotI2VuZGlmCi0JewkvKiBDQU4gKi8KLQkJLm1vZGFsaWFzCT0gIm1jcDI1MTAiLAotCQkuY2hpcF9zZWxlY3QJPSAxLAotCQkubWF4X3NwZWVkX2h6CT0gMjUwMDAgKiAyNiwKLQkJLmlycQkJPSBBVDkxX1BJTl9QQzAsCi0JfQotfTsKLQotLyoKLSAqIExDRCAvIFZHQQotICoKLSAqIEVQU09OIFMxRDEzODA2IEZCIChkaXNjb250aW51ZWQgY2hpcCkKLSAqIEVQU09OIFMxRDEzNTA2IEZCCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9TMUQxM1hYWCkgfHwgZGVmaW5lZChDT05GSUdfRkJfUzFEMTNYWFhfTU9EVUxFKQotI2luY2x1ZGUgPHZpZGVvL3MxZDEzeHh4ZmIuaD4KLQotCi1zdGF0aWMgdm9pZCB5bDkyMDBfaW5pdF92aWRlbyh2b2lkKQotewotCS8qIE5XQUlUIFNpZ25hbCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNiwgMCk7Ci0KLQkvKiBJbml0aWFsaXphdGlvbiBvZiB0aGUgU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIGZvciBDaGlwIFNlbGVjdCAyICovCi0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfU01DX0NTUigyKSwgQVQ5MV9TTUNfREJXXzE2CQkvKiAxNiBiaXQgKi8KLQkJCXwgQVQ5MV9TTUNfV1NFTiB8IEFUOTFfU01DX05XU18oMHg0KQkvKiB3YWl0IHN0YXRlcyAqLwotCQkJfCBBVDkxX1NNQ19UREZfKDB4MTAwKQkJCS8qIGZsb2F0IHRpbWUgKi8KLQkpOwotfQotCi1zdGF0aWMgc3RydWN0IHMxZDEzeHh4ZmJfcmVndmFsIHlsOTIwMF9zMWRmYl9pbml0cmVnc1tdID0KLXsKLQl7UzFEUkVHX01JU0MsCQkJMHgwMH0sCS8qIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ09NX0RJU1BfTU9ERSwJCTB4MDF9LAkvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIsIExDRCBvbmx5Ki8KLQl7UzFEUkVHX0dQSU9fQ05GMCwJCTB4MDB9LAkvKiBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19HUElPX0NUTDAsCQkweDAwfSwJLyogR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ0xLX0NORiwJCTB4MTF9LAkvKiBNZW1vcnkgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfQ0xLX0NORiwJCTB4MTB9LAkvKiBMQ0QgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfQ0xLX0NORiwJCTB4MTJ9LAkvKiBDUlQvVFYgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19NUExVR19DTEtfQ05GLAkJMHgwMX0sCS8qIE1lZGlhUGx1ZyBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NQVTJNRU1fV1NUX1NFTCwJMHgwMn0sCS8qIENQVSBUbyBNZW1vcnkgV2FpdCBTdGF0ZSBTZWxlY3QgUmVnaXN0ZXIqLwotCXtTMURSRUdfTUVNX0NORiwJCTB4MDB9LAkvKiBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19TRFJBTV9SRUZfUkFURSwJCTB4MDR9LAkvKiBEUkFNIFJlZnJlc2ggUmF0ZSBSZWdpc3RlciwgTUNMSyBzb3VyY2UqLwotCXtTMURSRUdfU0RSQU1fVEMwLAkJMHgxMn0sCS8qIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfU0RSQU1fVEMxLAkJMHgwMn0sCS8qIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfUEFORUxfVFlQRSwJCTB4MjV9LAkvKiBQYW5lbCBUeXBlIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX01PRF9SQVRFLAkJMHgwMH0sCS8qIE1PRCBSYXRlIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9ESVNQX0hXSURUSCwJMHg0Rn0sCS8qIExDRCBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX05ESVNQX0hQRVIsCQkweDEzfSwJLyogTENEIEhvcml6b250YWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX1RGVF9GUExJTkVfU1RBUlQsCTB4MDF9LAkvKiBURlQgRlBMSU5FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX1RGVF9GUExJTkVfUFdJRFRILAkweDBjfSwJLyogVEZUIEZQTElORSBQdWxzZSBXaWR0aCBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfRElTUF9WSEVJR0hUMCwJMHhERn0sCS8qIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0xDRF9ESVNQX1ZIRUlHSFQxLAkweDAxfSwJLyogTENEIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfTENEX05ESVNQX1ZQRVIsCQkweDJjfSwJLyogTENEIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciovCi0Je1MxRFJFR19URlRfRlBGUkFNRV9TVEFSVCwJMHgwYX0sCS8qIFRGVCBGUEZSQU1FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX1RGVF9GUEZSQU1FX1BXSURUSCwJMHgwMn0sCS8qIFRGVCBGUEZSQU1FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9ESVNQX01PREUsCQkweDA1fSwJLyogTENEIERpc3BsYXkgTW9kZSBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfTUlTQywJCTB4MDF9LAkvKiBMQ0QgTWlzY2VsbGFuZW91cyBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfRElTUF9TVEFSVDAsCTB4MDB9LAkvKiBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfTENEX0RJU1BfU1RBUlQxLAkweDAwfSwJLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0xDRF9ESVNQX1NUQVJUMiwJMHgwMH0sCS8qIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiovCi0Je1MxRFJFR19MQ0RfTUVNX09GRjAsCQkweDgwfSwJLyogTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0xDRF9NRU1fT0ZGMSwJCTB4MDJ9LAkvKiBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfTENEX1BJWF9QQU4sCQkweDAzfSwJLyogTENEIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0RJU1BfRklGT19IVEMsCTB4MDB9LAkvKiBMQ0QgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0RJU1BfRklGT19MVEMsCTB4MDB9LAkvKiBMQ0QgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9IV0lEVEgsCTB4NEZ9LAkvKiBDUlQvVFYgSG9yaXpvbnRhbCBEaXNwbGF5IFdpZHRoIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9ORElTUF9IUEVSLAkJMHgxM30sCS8qIENSVC9UViBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfSFJUQ19TVEFSVCwJCTB4MDF9LAkvKiBDUlQvVFYgSFJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfSFJUQ19QV0lEVEgsCTB4MEJ9LAkvKiBDUlQvVFYgSFJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9WSEVJR0hUMCwJMHhERn0sCS8qIENSVC9UViBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0NSVF9ESVNQX1ZIRUlHSFQxLAkweDAxfSwJLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfQ1JUX05ESVNQX1ZQRVIsCQkweDJCfSwJLyogQ1JUL1RWIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfVlJUQ19TVEFSVCwJCTB4MDl9LAkvKiBDUlQvVFYgVlJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfVlJUQ19QV0lEVEgsCTB4MDF9LAkvKiBDUlQvVFYgVlJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciovCi0Je1MxRFJFR19UVl9PVVRfQ1RMLAkJMHgxOH0sCS8qIFRWIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyICovCi0Je1MxRFJFR19DUlRfRElTUF9NT0RFLAkJMHgwNX0sCS8qIENSVC9UViBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIsIDE2QlBQKi8KLQl7UzFEUkVHX0NSVF9ESVNQX1NUQVJUMCwJMHgwMH0sCS8qIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCovCi0Je1MxRFJFR19DUlRfRElTUF9TVEFSVDEsCTB4MDB9LAkvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfQ1JUX0RJU1BfU1RBUlQyLAkweDAwfSwJLyogQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KLQl7UzFEUkVHX0NSVF9NRU1fT0ZGMCwJCTB4ODB9LAkvKiBDUlQvVFYgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQ1JUX01FTV9PRkYxLAkJMHgwMn0sCS8qIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19DUlRfUElYX1BBTiwJCTB4MDB9LAkvKiBDUlQvVFYgUGl4ZWwgUGFubmluZyBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9GSUZPX0hUQywJMHgwMH0sCS8qIENSVC9UViBEaXNwbGF5IEZJRk8gSGlnaCBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9GSUZPX0xUQywJMHgwMH0sCS8qIENSVC9UViBEaXNwbGF5IEZJRk8gTG93IFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfQ1RMLAkJMHgwMH0sCS8qIExDRCBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9TVEFSVCwJCTB4MDF9LAkvKiBMQ0QgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfWFBPUzAsCQkweDAwfSwJLyogTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfTENEX0NVUl9YUE9TMSwJCTB4MDB9LAkvKiBMQ0QgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19MQ0RfQ1VSX1lQT1MwLAkJMHgwMH0sCS8qIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0xDRF9DVVJfWVBPUzEsCQkweDAwfSwJLyogTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfTENEX0NVUl9CQ1RMMCwJCTB4MDB9LAkvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9HQ1RMMCwJCTB4MDB9LAkvKiBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfUkNUTDAsCQkweDAwfSwJLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9CQ1RMMSwJCTB4MUZ9LAkvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9HQ1RMMSwJCTB4M0Z9LAkvKiBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfUkNUTDEsCQkweDFGfSwJLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9GSUZPX0hUQywJMHgwMH0sCS8qIExDRCBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfQ1RMLAkJMHgwMH0sCS8qIENSVC9UViBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9TVEFSVCwJCTB4MDF9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfWFBPUzAsCQkweDAwfSwJLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQ1JUX0NVUl9YUE9TMSwJCTB4MDB9LAkvKiBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19DUlRfQ1VSX1lQT1MwLAkJMHgwMH0sCS8qIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0NSVF9DVVJfWVBPUzEsCQkweDAwfSwJLyogQ1JUL1RWIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfQ1JUX0NVUl9CQ1RMMCwJCTB4MDB9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9HQ1RMMCwJCTB4MDB9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfUkNUTDAsCQkweDAwfSwJLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9CQ1RMMSwJCTB4MUZ9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9HQ1RMMSwJCTB4M0Z9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfUkNUTDEsCQkweDFGfSwJLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9GSUZPX0hUQywJMHgwMH0sCS8qIENSVC9UViBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0JCTFRfQ1RMMCwJCTB4MDB9LAkvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfQ1RMMSwJCTB4MDF9LAkvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfQ0NfRVhQLAkJMHgwMH0sCS8qIEJpdEJsdCBST1AgQ29kZS9Db2xvciBFeHBhbnNpb24gUmVnaXN0ZXIqLwotCXtTMURSRUdfQkJMVF9PUCwJCTB4MDB9LAkvKiBCaXRCbHQgT3BlcmF0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0JCTFRfU1JDX1NUQVJUMCwJMHgwMH0sCS8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfU1JDX1NUQVJUMSwJMHgwMH0sCS8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfU1JDX1NUQVJUMiwJMHgwMH0sCS8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KLQl7UzFEUkVHX0JCTFRfRFNUX1NUQVJUMCwJMHgwMH0sCS8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQkJMVF9EU1RfU1RBUlQxLAkweDAwfSwJLyogQml0Qmx0IERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19CQkxUX0RTVF9TVEFSVDIsCTB4MDB9LAkvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KLQl7UzFEUkVHX0JCTFRfTUVNX09GRjAsCQkweDAwfSwJLyogQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfTUVNX09GRjEsCQkweDAwfSwJLyogQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfV0lEVEgwLAkJMHgwMH0sCS8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfV0lEVEgxLAkJMHgwMH0sCS8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfSEVJR0hUMCwJCTB4MDB9LAkvKiBCaXRCbHQgSGVpZ2h0IFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQkJMVF9IRUlHSFQxLAkJMHgwMH0sCS8qIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19CQkxUX0JHQzAsCQkweDAwfSwJLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCovCi0Je1MxRFJFR19CQkxUX0JHQzEsCQkweDAwfSwJLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19CQkxUX0ZHQzAsCQkweDAwfSwJLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCovCi0Je1MxRFJFR19CQkxUX0ZHQzEsCQkweDAwfSwJLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19MS1VQX01PREUsCQkweDAwfSwJLyogTG9vay1VcCBUYWJsZSBNb2RlIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xLVVBfQUREUiwJCTB4MDB9LAkvKiBMb29rLVVwIFRhYmxlIEFkZHJlc3MgUmVnaXN0ZXIqLwotCXtTMURSRUdfUFNfQ05GLAkJCTB4MDB9LAkvKiBQb3dlciBTYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqLwotCXtTMURSRUdfUFNfU1RBVFVTLAkJMHgwMH0sCS8qIFBvd2VyIFNhdmUgU3RhdHVzIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NQVTJNRU1fV0RPR1QsCQkweDAwfSwJLyogQ1BVLXRvLU1lbW9yeSBBY2Nlc3MgV2F0Y2hkb2cgVGltZXIgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ09NX0RJU1BfTU9ERSwJCTB4MDF9LAkvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIsIExDRCBvbmx5Ki8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSB5bDkyMDBfczFkZmJfcGRhdGEgPSB7Ci0JLmluaXRyZWdzCQk9IHlsOTIwMF9zMWRmYl9pbml0cmVncywKLQkuaW5pdHJlZ3NzaXplCQk9IEFSUkFZX1NJWkUoeWw5MjAwX3MxZGZiX2luaXRyZWdzKSwKLQkucGxhdGZvcm1faW5pdF92aWRlbwk9IHlsOTIwMF9pbml0X3ZpZGVvLAotfTsKLQotI2RlZmluZSBZTDkyMDBfRkJfUkVHX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzcKLSNkZWZpbmUgWUw5MjAwX0ZCX1ZNRU1fQkFTRQlZTDkyMDBfRkJfUkVHX0JBU0UgKyBTWl8yTQotI2RlZmluZSBZTDkyMDBfRkJfVk1FTV9TSVpFCVNaXzJNCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgeWw5MjAwX3MxZGZiX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewkvKiB2aWRlbyBtZW0gKi8KLQkJLm5hbWUJPSAiczFkMTN4eHhmYiBtZW1vcnkiLAotCQkuc3RhcnQJPSBZTDkyMDBfRkJfVk1FTV9CQVNFLAotCQkuZW5kCT0gWUw5MjAwX0ZCX1ZNRU1fQkFTRSArIFlMOTIwMF9GQl9WTUVNX1NJWkUgLTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewkvKiB2aWRlbyByZWdpc3RlcnMgKi8KLQkJLm5hbWUJPSAiczFkMTN4eHhmYiByZWdpc3RlcnMiLAotCQkuc3RhcnQJPSBZTDkyMDBfRkJfUkVHX0JBU0UsCi0JCS5lbmQJPSBZTDkyMDBfRkJfUkVHX0JBU0UgKyBTWl81MTIgLTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgdTY0IHMxZGZiX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB5bDkyMDBfczFkZmJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzMWQxMzgwNmZiIiwKLQkuaWQJCT0gLTEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzMWRmYl9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkucGxhdGZvcm1fZGF0YQkJPSAmeWw5MjAwX3MxZGZiX3BkYXRhLAotCX0sCi0JLnJlc291cmNlCT0geWw5MjAwX3MxZGZiX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh5bDkyMDBfczFkZmJfcmVzb3VyY2UpLAotfTsKLQotdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfdmlkZW8odm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnlsOTIwMF9zMWRmYl9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IHlsOTIwMF9hZGRfZGV2aWNlX3ZpZGVvKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMSwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCXwgQVRNRUxfVUFSVF9SSSk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzIuIChSeCAmIFR4IG9ubHkgdG8gSlAzKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMCwgMiwgMCk7Ci0KLQkvKiBVU0FSVDMgb24gdHR5UzMuIChSeCwgVHgsIFJUUyAtIFJTNDg1IGludGVyZmFjZSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzMsIDMsIEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZ5bDkyMDBfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJnlsOTIwMF91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZ5bDkyMDBfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoeWw5MjAwX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKHlsOTIwMF9pMmNfZGV2aWNlcykpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJnlsOTIwMF9tY2kwX2RhdGEpOwotCS8qIE5BTkQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmeWw5MjAwX25hbmRfZGF0YSk7Ci0JLyogTk9SIEZsYXNoICovCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ5bDkyMDBfZmxhc2gpOwotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKHlsOTIwMF9zcGlfZGV2aWNlcywgQVJSQVlfU0laRSh5bDkyMDBfc3BpX2RldmljZXMpKTsKLQkvKiBUb3VjaHNjcmVlbiAqLwotCXlsOTIwMF9hZGRfZGV2aWNlX3RzKCk7Ci0jZW5kaWYKLQkvKiBMRURzLiAqLwotCWF0OTFfZ3Bpb19sZWRzKHlsOTIwMF9sZWRzLCBBUlJBWV9TSVpFKHlsOTIwMF9sZWRzKSk7Ci0JLyogUHVzaCBCdXR0b25zICovCi0JeWw5MjAwX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotCS8qIFZHQSAqLwotCXlsOTIwMF9hZGRfZGV2aWNlX3ZpZGVvKCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoWUw5MjAwLCAidUNkcmFnb24gWUwtOTIwMCIpCi0JLyogTWFpbnRhaW5lcjogUy5CaXJ0bGVzICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IHlsOTIwMF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0geWw5MjAwX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM2ZTlhNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBIUCBMYWJzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgZGF0YSBzdHJ1Y3R1cmVzIGZvdW5kIGluIHBsYXRmb3JtX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSwKLSAqIGFuZCBkZXNjcmliaW5nIGJvYXJkLXNwZWNpZmljIGRhdGEgbmVlZGVkIGJ5IGRyaXZlcnMuICBGb3IgZXhhbXBsZSwKLSAqIHdoaWNoIHBpbiBpcyB1c2VkIGZvciBhIGdpdmVuIEdQSU8gcm9sZS4KLSAqCi0gKiBJbiAyLjYsIGRyaXZlcnMgc2hvdWxkIHN0cm9uZ2x5IGF2b2lkIGJvYXJkLXNwZWNpZmljIGtub3dsZWRnZSBzbwotICogdGhhdCBzdXBwb3J0aW5nIG5ldyBib2FyZHMgbm9ybWFsbHkgd29uJ3QgcmVxdWlyZSBkcml2ZXIgcGF0Y2hlcy4KLSAqIE1vc3QgYm9hcmQtc3BlY2lmaWMga25vd2xlZGdlIHNob3VsZCBiZSBpbiBhcmNoLy4uLi9ib2FyZC0qLmMgZmlsZXMuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0JPQVJEX0gKLSNkZWZpbmUgX19BU01fQVJDSF9CT0FSRF9ICi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0bWVsLmg+Ci0KLSAvKiBVU0IgRGV2aWNlICovCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VkYyhzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSAqZGF0YSk7Ci0KLSAvKiBVU0IgSGlnaCBTcGVlZCBEZXZpY2UgKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiYShzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhICpkYXRhKTsKLQotIC8qIENvbXBhY3QgRmxhc2ggKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSk7Ci0KLSAvKiBNTUMgLyBTRCAqLwotICAvKiBhdG1lbC1tY2kgcGxhdGZvcm0gY29uZmlnICovCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSk7Ci0KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgKmRhdGEpOwotCi0gLyogVVNCIEhvc3QgKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpOwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoX29oY2koc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9laGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSk7Ci0KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKTsKLQotIC8qIEkyQyovCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUc0NSkKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcyk7Ci0jZWxzZQotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcyk7Ci0jZW5kaWYKLQotIC8qIFNQSSAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcyk7Ci0KLSAvKiBTZXJpYWwgKi8KLSNkZWZpbmUgQVRNRUxfVUFSVF9DVFMJMHgwMQotI2RlZmluZSBBVE1FTF9VQVJUX1JUUwkweDAyCi0jZGVmaW5lIEFUTUVMX1VBUlRfRFNSCTB4MDQKLSNkZWZpbmUgQVRNRUxfVUFSVF9EVFIJMHgwOAotI2RlZmluZSBBVE1FTF9VQVJUX0RDRAkweDEwCi0jZGVmaW5lIEFUTUVMX1VBUlRfUkkJMHgyMAotCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpOwotCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZTsKLQotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCk7Ci0KLS8qCi0gKiBQV00KLSAqLwotI2RlZmluZSBBVDkxX1BXTTAJMAotI2RlZmluZSBBVDkxX1BXTTEJMQotI2RlZmluZSBBVDkxX1BXTTIJMgotI2RlZmluZSBBVDkxX1BXTTMJMwotCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3B3bSh1MzIgbWFzayk7Ci0KLS8qCi0gKiBTU0MgLS0gYWNjZXNzZWQgdGhyb3VnaCBzc2NfcmVxdWVzdChpZCkuICBEcml2ZXJzIGRvbid0IGJpbmQgdG8gU1NDCi0gKiBwbGF0Zm9ybSBkZXZpY2VzLiAgVGhlaXIgU1NDIElEIGlzIHBhcnQgb2YgdGhlaXIgY29uZmlndXJhdGlvbiBkYXRhLAotICogYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBTU0Mgc2lnbmFscyB0aGV5IHNob3VsZCB1c2UuCi0gKi8KLSNkZWZpbmUgQVRNRUxfU1NDX1RLCTB4MDEKLSNkZWZpbmUgQVRNRUxfU1NDX1RGCTB4MDIKLSNkZWZpbmUgQVRNRUxfU1NDX1RECTB4MDQKLSNkZWZpbmUgQVRNRUxfU1NDX1RYCShBVE1FTF9TU0NfVEsgfCBBVE1FTF9TU0NfVEYgfCBBVE1FTF9TU0NfVEQpCi0KLSNkZWZpbmUgQVRNRUxfU1NDX1JLCTB4MTAKLSNkZWZpbmUgQVRNRUxfU1NDX1JGCTB4MjAKLSNkZWZpbmUgQVRNRUxfU1NDX1JECTB4NDAKLSNkZWZpbmUgQVRNRUxfU1NDX1JYCShBVE1FTF9TU0NfUksgfCBBVE1FTF9TU0NfUkYgfCBBVE1FTF9TU0NfUkQpCi0KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKTsKLQotIC8qIExDRCBDb250cm9sbGVyICovCi1zdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGE7Ci1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKTsKLQotIC8qIEFDOTcgKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSk7Ci0KLSAvKiBJU0kgKi8KLXN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaXNpKHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJYm9vbCB1c2VfcGNrX2FzX21jayk7Ci0KLS8qIENBTiAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jYW4oc3RydWN0IGF0OTFfY2FuX2RhdGEgKmRhdGEpOwotCi0gLyogTEVEcyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfZ3Bpb19sZWRzKHN0cnVjdCBncGlvX2xlZCAqbGVkcywgaW50IG5yKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjZmMTAyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsOTc3ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAotICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0KLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLQotdm9pZCBfX2lvbWVtICphdDkxX3BtY19iYXNlOwotRVhQT1JUX1NZTUJPTF9HUEwoYXQ5MV9wbWNfYmFzZSk7Ci0KLS8qCi0gKiBUaGVyZSdzIGEgbG90IG1vcmUgd2hpY2ggY2FuIGJlIGRvbmUgd2l0aCBjbG9ja3MsIGluY2x1ZGluZyBjcHVmcmVxCi0gKiBpbnRlZ3JhdGlvbiwgc2xvdyBjbG9jayBtb2RlIHN1cHBvcnQgKGZvciBzeXN0ZW0gc3VzcGVuZCksIGxldHRpbmcKLSAqIFBMTEIgYmUgdXNlZCBhdCBvdGhlciByYXRlcyAob24gYm9hcmRzIHRoYXQgZG9uJ3QgbmVlZCBVU0IpLCBldGMuCi0gKi8KLQotI2RlZmluZSBjbGtfaXNfcHJpbWFyeSh4KQkoKHgpLT50eXBlICYgQ0xLX1RZUEVfUFJJTUFSWSkKLSNkZWZpbmUgY2xrX2lzX3Byb2dyYW1tYWJsZSh4KQkoKHgpLT50eXBlICYgQ0xLX1RZUEVfUFJPR1JBTU1BQkxFKQotI2RlZmluZSBjbGtfaXNfcGVyaXBoZXJhbCh4KQkoKHgpLT50eXBlICYgQ0xLX1RZUEVfUEVSSVBIRVJBTCkKLSNkZWZpbmUgY2xrX2lzX3N5cyh4KQkJKCh4KS0+dHlwZSAmIENMS19UWVBFX1NZU1RFTSkKLQotCi0vKgotICogQ2hpcHMgaGF2ZSBzb21lIGtpbmQgb2YgY2xvY2tzIDogZ3JvdXAgdGhlbSBieSBmdW5jdGlvbmFsaXR5Ci0gKi8KLSNkZWZpbmUgY3B1X2hhc191dG1pKCkJCSggIGNwdV9pc19hdDkxc2FtOXJsKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKQotCi0jZGVmaW5lIGNwdV9oYXNfMTA1Nk1fcGxsYSgpCShjcHVfaXNfc2FtYTVkMygpKQotCi0jZGVmaW5lIGNwdV9oYXNfODAwTV9wbGxhKCkJKCAgY3B1X2lzX2F0OTFzYW05ZzIwKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTluMTIoKSkKLQotI2RlZmluZSBjcHVfaGFzXzMwME1fcGxsYSgpCShjcHVfaXNfYXQ5MXNhbTlnMTAoKSkKLQotI2RlZmluZSBjcHVfaGFzXzI0ME1fcGxsYSgpCShjcHVfaXNfYXQ5MXNhbTkyNjEoKSBcCi0JCQkJfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXJsKCkpCi0KLSNkZWZpbmUgY3B1X2hhc18yMTBNX3BsbGEoKQkoY3B1X2lzX2F0OTFzYW05MjYwKCkpCi0KLSNkZWZpbmUgY3B1X2hhc19wbGxiKCkJCSghKGNwdV9pc19hdDkxc2FtOXJsKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKSkKLQotI2RlZmluZSBjcHVfaGFzX3VwbGwoKQkJKGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKQotCi0vKiBVU0IgaG9zdCBIUyAmIEZTICovCi0jZGVmaW5lIGNwdV9oYXNfdWhwKCkJCSghY3B1X2lzX2F0OTFzYW05cmwoKSkKLQotLyogVVNCIGRldmljZSBGUyBvbmx5ICovCi0jZGVmaW5lIGNwdV9oYXNfdWRwZnMoKQkJKCEoY3B1X2lzX2F0OTFzYW05cmwoKSBcCi0JCQkJfHwgY3B1X2lzX2F0OTFzYW05ZzQ1KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXg1KCkgXAotCQkJCXx8IGNwdV9pc19zYW1hNWQzKCkpKQotCi0jZGVmaW5lIGNwdV9oYXNfcGxsYWRpdjIoKQkoY3B1X2lzX2F0OTFzYW05ZzQ1KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXg1KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOW4xMigpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKQotCi0jZGVmaW5lIGNwdV9oYXNfbWRpdjMoKQkJKGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTluMTIoKSBcCi0JCQkJfHwgY3B1X2lzX3NhbWE1ZDMoKSkKLQotI2RlZmluZSBjcHVfaGFzX2FsdF9wcmVzY2FsZXIoKQkoY3B1X2lzX2F0OTFzYW05eDUoKSBcCi0JCQkJfHwgY3B1X2lzX2F0OTFzYW05bjEyKCkgXAotCQkJCXx8IGNwdV9pc19zYW1hNWQzKCkpCi0KLXN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xrX2xvY2spOwotCi1zdGF0aWMgdTMyIGF0OTFfcGxsYl91c2JfaW5pdDsKLQotLyoKLSAqIEZvdXIgcHJpbWFyeSBjbG9jayBzb3VyY2VzOiAgdHdvIGNyeXN0YWwgb3NjaWxsYXRvcnMgKDMySywgbWFpbiksIGFuZAotICogdHdvIFBMTHMuICBQTExBIHVzdWFsbHkgcnVucyB0aGUgbWFzdGVyIGNsb2NrOyBhbmQgUExMQiBtdXN0IHJ1biBhdAotICogNDggTUh6ICh1bmxlc3Mgbm8gVVNCIGZ1bmN0aW9uIGNsb2NrcyBhcmUgbmVlZGVkKS4gIFRoZSBtYWluIGNsb2NrIGFuZAotICogYm90aCBQTExzIGFyZSB0dXJuZWQgb2ZmIHRvIHJ1biBpbiAic2xvdyBjbG9jayBtb2RlIiAoc3lzdGVtIHN1c3BlbmQpLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBjbGszMmsgPSB7Ci0JLm5hbWUJCT0gImNsazMyayIsCi0JLnJhdGVfaHoJPSBBVDkxX1NMT1dfQ0xPQ0ssCi0JLnVzZXJzCQk9IDEsCQkvKiBhbHdheXMgb24gKi8KLQkuaWQJCT0gMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUklNQVJZLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1haW5fY2xrID0gewotCS5uYW1lCQk9ICJtYWluIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19NT1NDUywJLyogaW4gUE1DX1NSICovCi0JLmlkCQk9IDEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJJTUFSWSwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwbGxhID0gewotCS5uYW1lCQk9ICJwbGxhIiwKLQkucGFyZW50CQk9ICZtYWluX2NsaywKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19MT0NLQSwJLyogaW4gUE1DX1NSICovCi0JLmlkCQk9IDIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJJTUFSWSB8IENMS19UWVBFX1BMTCwKLX07Ci0KLXN0YXRpYyB2b2lkIHBsbGJfbW9kZShzdHJ1Y3QgY2xrICpjbGssIGludCBpc19vbikKLXsKLQl1MzIJdmFsdWU7Ci0KLQlpZiAoaXNfb24pIHsKLQkJaXNfb24gPSBBVDkxX1BNQ19MT0NLQjsKLQkJdmFsdWUgPSBhdDkxX3BsbGJfdXNiX2luaXQ7Ci0JfSBlbHNlCi0JCXZhbHVlID0gMDsKLQotCS8vIFJFVklTSVQ6IEFkZCB3b3JrLWFyb3VuZCBmb3IgQVQ5MVJNOTIwMCBFcnJhdGEgIzI2ID8KLQlhdDkxX3BtY193cml0ZShBVDkxX0NLR1JfUExMQlIsIHZhbHVlKTsKLQotCWRvIHsKLQkJY3B1X3JlbGF4KCk7Ci0JfSB3aGlsZSAoKGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTE9DS0IpICE9IGlzX29uKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgcGxsYiA9IHsKLQkubmFtZQkJPSAicGxsYiIsCi0JLnBhcmVudAkJPSAmbWFpbl9jbGssCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfTE9DS0IsCS8qIGluIFBNQ19TUiAqLwotCS5tb2RlCQk9IHBsbGJfbW9kZSwKLQkuaWQJCT0gMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QUklNQVJZIHwgQ0xLX1RZUEVfUExMLAotfTsKLQotc3RhdGljIHZvaWQgcG1jX3N5c19tb2RlKHN0cnVjdCBjbGsgKmNsaywgaW50IGlzX29uKQotewotCWlmIChpc19vbikKLQkJYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgY2xrLT5wbWNfbWFzayk7Ci0JZWxzZQotCQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19TQ0RSLCBjbGstPnBtY19tYXNrKTsKLX0KLQotc3RhdGljIHZvaWQgcG1jX3Vja3JfbW9kZShzdHJ1Y3QgY2xrICpjbGssIGludCBpc19vbikKLXsKLQl1bnNpZ25lZCBpbnQgdWNrciA9IGF0OTFfcG1jX3JlYWQoQVQ5MV9DS0dSX1VDS1IpOwotCi0JaWYgKGlzX29uKSB7Ci0JCWlzX29uID0gQVQ5MV9QTUNfTE9DS1U7Ci0JCWF0OTFfcG1jX3dyaXRlKEFUOTFfQ0tHUl9VQ0tSLCB1Y2tyIHwgY2xrLT5wbWNfbWFzayk7Ci0JfSBlbHNlCi0JCWF0OTFfcG1jX3dyaXRlKEFUOTFfQ0tHUl9VQ0tSLCB1Y2tyICYgfihjbGstPnBtY19tYXNrKSk7Ci0KLQlkbyB7Ci0JCWNwdV9yZWxheCgpOwotCX0gd2hpbGUgKChhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1NSKSAmIEFUOTFfUE1DX0xPQ0tVKSAhPSBpc19vbik7Ci19Ci0KLS8qIFVTQiBmdW5jdGlvbiBjbG9ja3MgKFBMTEIgbXVzdCBiZSA0OCBNSHopICovCi1zdGF0aWMgc3RydWN0IGNsayB1ZHBjayA9IHsKLQkubmFtZQkJPSAidWRwY2siLAotCS5wYXJlbnQJCT0gJnBsbGIsCi0JLm1vZGUJCT0gcG1jX3N5c19tb2RlLAotfTsKLXN0cnVjdCBjbGsgdXRtaV9jbGsgPSB7Ci0JLm5hbWUJCT0gInV0bWlfY2xrIiwKLQkucGFyZW50CQk9ICZtYWluX2NsaywKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19VUExMRU4sCS8qIGluIENLR1JfVUNLUiAqLwotCS5tb2RlCQk9IHBtY191Y2tyX21vZGUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUExMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVocGNrID0gewotCS5uYW1lCQk9ICJ1aHBjayIsCi0JLyoucGFyZW50CQk9IC4uLiB3ZSBjaG9vc2UgcGFyZW50IGF0IHJ1bnRpbWUgKi8KLQkubW9kZQkJPSBwbWNfc3lzX21vZGUsCi19OwotCi0KLS8qCi0gKiBUaGUgbWFzdGVyIGNsb2NrIGlzIGRpdmlkZWQgZnJvbSB0aGUgQ1BVIGNsb2NrIChieSAxLTQpLiAgSXQncyB1c2VkIGZvcgotICogbWVtb3J5LCBpbnRlcmZhY2VzIHRvIG9uLWNoaXAgcGVyaXBoZXJhbHMsIHRoZSBBSUMsIGFuZCBzb21ldGltZXMgbW9yZQotICogKGUuZyBiYXVkIHJhdGUgZ2VuZXJhdGlvbikuICBJdCdzIHNvdXJjZWQgZnJvbSBvbmUgb2YgdGhlIHByaW1hcnkgY2xvY2tzLgotICovCi1zdHJ1Y3QgY2xrIG1jayA9IHsKLQkubmFtZQkJPSAibWNrIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19NQ0tSRFksCS8qIGluIFBNQ19TUiAqLwotfTsKLQotc3RhdGljIHZvaWQgcG1jX3BlcmlwaF9tb2RlKHN0cnVjdCBjbGsgKmNsaywgaW50IGlzX29uKQotewotCXUzMiByZWd2YWwgPSAwOwotCi0JLyoKLQkgKiBXaXRoIHNhbWE1ZDMgZGV2aWNlcywgd2UgYXJlIG1hbmFnaW5nIGNsb2NrIGRpdmlzaW9uIHNvIHdlIGhhdmUgdG8KLQkgKiB1c2UgdGhlIFBlcmlwaGVyYWwgQ29udHJvbCBSZWdpc3RlciBpbnRyb2R1Y2VkIGZyb20gYXQ5MXNhbTl4NQotCSAqIGRldmljZXMuCi0JICovCi0JaWYgKGNwdV9pc19zYW1hNWQzKCkpIHsKLQkJcmVndmFsIHw9IEFUOTFfUE1DX1BDUl9DTUQ7IC8qIHdyaXRlIGNvbW1hbmQgKi8KLQkJcmVndmFsIHw9IGNsay0+cGlkICYgQVQ5MV9QTUNfUENSX1BJRDsgLyogcGVyaXBoZXJhbCBzZWxlY3Rpb24gKi8KLQkJcmVndmFsIHw9IEFUOTFfUE1DX1BDUl9ESVYoY2xrLT5kaXYpOwotCQlpZiAoaXNfb24pCi0JCQlyZWd2YWwgfD0gQVQ5MV9QTUNfUENSX0VOOyAvKiBlbmFibGUgY2xvY2sgKi8KLQkJYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfUENSLCByZWd2YWwpOwotCX0gZWxzZSB7Ci0JCWlmIChpc19vbikKLQkJCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1BDRVIsIGNsay0+cG1jX21hc2spOwotCQllbHNlCi0JCQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19QQ0RSLCBjbGstPnBtY19tYXNrKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIF9faW5pdCAqYXQ5MV9jc3NfdG9fY2xrKHVuc2lnbmVkIGxvbmcgY3NzKQotewotCXN3aXRjaCAoY3NzKSB7Ci0JCWNhc2UgQVQ5MV9QTUNfQ1NTX1NMT1c6Ci0JCQlyZXR1cm4gJmNsazMyazsKLQkJY2FzZSBBVDkxX1BNQ19DU1NfTUFJTjoKLQkJCXJldHVybiAmbWFpbl9jbGs7Ci0JCWNhc2UgQVQ5MV9QTUNfQ1NTX1BMTEE6Ci0JCQlyZXR1cm4gJnBsbGE7Ci0JCWNhc2UgQVQ5MV9QTUNfQ1NTX1BMTEI6Ci0JCQlpZiAoY3B1X2hhc191cGxsKCkpCi0JCQkJLyogQ1NTX1BMTEIgPT0gQ1NTX1VQTEwgKi8KLQkJCQlyZXR1cm4gJnV0bWlfY2xrOwotCQkJZWxzZSBpZiAoY3B1X2hhc19wbGxiKCkpCi0JCQkJcmV0dXJuICZwbGxiOwotCQkJYnJlYWs7Ci0JCS8qIGFsdGVybmF0ZSBQTUM6IGNhbiB1c2UgbWFzdGVyIGNsb2NrICovCi0JCWNhc2UgQVQ5MV9QTUNfQ1NTX01BU1RFUjoKLQkJCXJldHVybiAmbWNrOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IHBtY19wcmVzY2FsZXJfZGl2aWRlcih1MzIgcmVnKQotewotCWlmIChjcHVfaGFzX2FsdF9wcmVzY2FsZXIoKSkgewotCQlyZXR1cm4gMSA8PCAoKHJlZyAmIEFUOTFfUE1DX0FMVF9QUkVTKSA+PiBQTUNfQUxUX1BSRVNfT0ZGU0VUKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gMSA8PCAoKHJlZyAmIEFUOTFfUE1DX1BSRVMpID4+IFBNQ19QUkVTX09GRlNFVCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGstPnBhcmVudCkKLQkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKLQlpZiAoY2xrLT51c2VycysrID09IDAgJiYgY2xrLT5tb2RlKQotCQljbGstPm1vZGUoY2xrLCAxKTsKLX0KLQotaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKLQlfX2Nsa19lbmFibGUoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKLQotc3RhdGljIHZvaWQgX19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JQlVHX09OKGNsay0+dXNlcnMgPT0gMCk7Ci0JaWYgKC0tY2xrLT51c2VycyA9PSAwICYmIGNsay0+bW9kZSkKLQkJY2xrLT5tb2RlKGNsaywgMCk7Ci0JaWYgKGNsay0+cGFyZW50KQotCQlfX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLX0KLQotdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOwotCV9fY2xrX2Rpc2FibGUoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7Ci0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCXVuc2lnbmVkIGxvbmcJcmF0ZTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOwotCWZvciAoOzspIHsKLQkJcmF0ZSA9IGNsay0+cmF0ZV9oejsKLQkJaWYgKHJhdGUgfHwgIWNsay0+cGFyZW50KQotCQkJYnJlYWs7Ci0JCWNsayA9IGNsay0+cGFyZW50OwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotCXJldHVybiByYXRlOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qCi0gKiBGb3Igbm93LCBvbmx5IHRoZSBwcm9ncmFtbWFibGUgY2xvY2tzIHN1cHBvcnQgcmVwYXJlbnRpbmcgKE1DSyBjb3VsZAotICogZG8gdGhpcyB0b28sIHdpdGggY2FyZSkgb3IgcmF0ZSBjaGFuZ2luZyAodGhlIFBMTHMgY291bGQgZG8gdGhpcyB0b28sCi0gKiBkaXR0byBNQ0sgYnV0IHRoYXQncyBtb3JlIGZvciBjcHVmcmVxKS4gIERyaXZlcnMgbWF5IHJlcGFyZW50IHRvIGdldAotICogYSBiZXR0ZXIgcmF0ZSBtYXRjaDsgd2UgZG9uJ3QuCi0gKi8KLQotbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCXVuc2lnbmVkCXByZXNjYWxlOwotCXVuc2lnbmVkIGxvbmcJYWN0dWFsOwotCXVuc2lnbmVkIGxvbmcJcHJldiA9IFVMT05HX01BWDsKLQotCWlmICghY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKLQotCWFjdHVhbCA9IGNsay0+cGFyZW50LT5yYXRlX2h6OwotCWZvciAocHJlc2NhbGUgPSAwOyBwcmVzY2FsZSA8IDc7IHByZXNjYWxlKyspIHsKLQkJaWYgKGFjdHVhbCA+IHJhdGUpCi0JCQlwcmV2ID0gYWN0dWFsOwotCi0JCWlmIChhY3R1YWwgJiYgYWN0dWFsIDw9IHJhdGUpIHsKLQkJCWlmICgocHJldiAtIHJhdGUpIDwgKHJhdGUgLSBhY3R1YWwpKSB7Ci0JCQkJYWN0dWFsID0gcHJldjsKLQkJCQlwcmVzY2FsZS0tOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJYWN0dWFsID4+PSAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIChwcmVzY2FsZSA8IDcpID8gYWN0dWFsIDogLUVOT0VOVDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOwotCi1pbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0JdW5zaWduZWQJcHJlc2NhbGU7Ci0JdW5zaWduZWQgbG9uZwlwcmVzY2FsZV9vZmZzZXQsIGNzc19tYXNrOwotCXVuc2lnbmVkIGxvbmcJYWN0dWFsOwotCi0JaWYgKCFjbGtfaXNfcHJvZ3JhbW1hYmxlKGNsaykpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChjbGstPnVzZXJzKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKGNwdV9oYXNfYWx0X3ByZXNjYWxlcigpKSB7Ci0JCXByZXNjYWxlX29mZnNldCA9IFBNQ19BTFRfUFJFU19PRkZTRVQ7Ci0JCWNzc19tYXNrID0gQVQ5MV9QTUNfQUxUX1BDS1JfQ1NTOwotCX0gZWxzZSB7Ci0JCXByZXNjYWxlX29mZnNldCA9IFBNQ19QUkVTX09GRlNFVDsKLQkJY3NzX21hc2sgPSBBVDkxX1BNQ19DU1M7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7Ci0KLQlhY3R1YWwgPSBjbGstPnBhcmVudC0+cmF0ZV9oejsKLQlmb3IgKHByZXNjYWxlID0gMDsgcHJlc2NhbGUgPCA3OyBwcmVzY2FsZSsrKSB7Ci0JCWlmIChhY3R1YWwgJiYgYWN0dWFsIDw9IHJhdGUpIHsKLQkJCXUzMglwY2tyOwotCi0JCQlwY2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19QQ0tSKGNsay0+aWQpKTsKLQkJCXBja3IgJj0gY3NzX21hc2s7CS8qIGtlZXAgY2xvY2sgc2VsZWN0aW9uICovCi0JCQlwY2tyIHw9IHByZXNjYWxlIDw8IHByZXNjYWxlX29mZnNldDsKLQkJCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1BDS1IoY2xrLT5pZCksIHBja3IpOwotCQkJY2xrLT5yYXRlX2h6ID0gYWN0dWFsOwotCQkJYnJlYWs7Ci0JCX0KLQkJYWN0dWFsID4+PSAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIChwcmVzY2FsZSA8IDcpID8gYWN0dWFsIDogLUVOT0VOVDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKLQotc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGstPnBhcmVudDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOwotCi1pbnQgY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotCWlmIChjbGstPnVzZXJzKQotCQlyZXR1cm4gLUVCVVNZOwotCWlmICghY2xrX2lzX3ByaW1hcnkocGFyZW50KSB8fCAhY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjcHVfaXNfYXQ5MXNhbTlybCgpICYmIHBhcmVudC0+aWQgPT0gQVQ5MV9QTUNfQ1NTX1BMTEIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7Ci0KLQljbGstPnJhdGVfaHogPSBwYXJlbnQtPnJhdGVfaHo7Ci0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0JYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfUENLUihjbGstPmlkKSwgcGFyZW50LT5pZCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7Ci0KLS8qIGVzdGFibGlzaCBQQ0swLi5QQ0tOIHBhcmVudGFnZSBhbmQgcmF0ZSAqLwotc3RhdGljIHZvaWQgX19pbml0IGluaXRfcHJvZ3JhbW1hYmxlX2Nsb2NrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlzdHJ1Y3QgY2xrCSpwYXJlbnQ7Ci0JdTMyCQlwY2tyOwotCXVuc2lnbmVkIGludAljc3NfbWFzazsKLQotCWlmIChjcHVfaGFzX2FsdF9wcmVzY2FsZXIoKSkKLQkJY3NzX21hc2sgPSBBVDkxX1BNQ19BTFRfUENLUl9DU1M7Ci0JZWxzZQotCQljc3NfbWFzayA9IEFUOTFfUE1DX0NTUzsKLQotCXBja3IgPSBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1BDS1IoY2xrLT5pZCkpOwotCXBhcmVudCA9IGF0OTFfY3NzX3RvX2NsayhwY2tyICYgY3NzX21hc2spOwotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCWNsay0+cmF0ZV9oeiA9IHBhcmVudC0+cmF0ZV9oeiAvIHBtY19wcmVzY2FsZXJfZGl2aWRlcihwY2tyKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0KLXN0YXRpYyBpbnQgYXQ5MV9jbGtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKLXsKLQl1MzIJCXNjc3IsIHBjc3IsIHBjc3IxID0gMCwgdWNrciA9IDAsIHNyOwotCXN0cnVjdCBjbGsJKmNsazsKLQotCXNjc3IgPSBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1NDU1IpOwotCXBjc3IgPSBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1BDU1IpOwotCWlmIChjcHVfaXNfc2FtYTVkMygpKQotCQlwY3NyMSA9IGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfUENTUjEpOwotCXNyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19TUik7Ci0Jc2VxX3ByaW50ZihzLCAiU0NTUiA9ICU4eFxuIiwgc2Nzcik7Ci0Jc2VxX3ByaW50ZihzLCAiUENTUiA9ICU4eFxuIiwgcGNzcik7Ci0JaWYgKGNwdV9pc19zYW1hNWQzKCkpCi0JCXNlcV9wcmludGYocywgIlBDU1IxID0gJTh4XG4iLCBwY3NyMSk7Ci0Jc2VxX3ByaW50ZihzLCAiTU9SICA9ICU4eFxuIiwgYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfTU9SKSk7Ci0Jc2VxX3ByaW50ZihzLCAiTUNGUiA9ICU4eFxuIiwgYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfTUNGUikpOwotCXNlcV9wcmludGYocywgIlBMTEEgPSAlOHhcbiIsIGF0OTFfcG1jX3JlYWQoQVQ5MV9DS0dSX1BMTEFSKSk7Ci0JaWYgKGNwdV9oYXNfcGxsYigpKQotCQlzZXFfcHJpbnRmKHMsICJQTExCID0gJTh4XG4iLCBhdDkxX3BtY19yZWFkKEFUOTFfQ0tHUl9QTExCUikpOwotCWlmIChjcHVfaGFzX3V0bWkoKSkgewotCQl1Y2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfVUNLUik7Ci0JCXNlcV9wcmludGYocywgIlVDS1IgPSAlOHhcbiIsIHVja3IpOwotCX0KLQlzZXFfcHJpbnRmKHMsICJNQ0tSID0gJTh4XG4iLCBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX01DS1IpKTsKLQlpZiAoY3B1X2hhc191cGxsKCkgfHwgY3B1X2lzX2F0OTFzYW05bjEyKCkpCi0JCXNlcV9wcmludGYocywgIlVTQiAgPSAlOHhcbiIsIGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfVVNCKSk7Ci0Jc2VxX3ByaW50ZihzLCAiU1IgICA9ICU4eFxuIiwgc3IpOwotCi0Jc2VxX3ByaW50ZihzLCAiXG4iKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWNoYXIJKnN0YXRlOwotCi0JCWlmIChjbGstPm1vZGUgPT0gcG1jX3N5c19tb2RlKSB7Ci0JCQlzdGF0ZSA9IChzY3NyICYgY2xrLT5wbWNfbWFzaykgPyAib24iIDogIm9mZiI7Ci0JCX0gZWxzZSBpZiAoY2xrLT5tb2RlID09IHBtY19wZXJpcGhfbW9kZSkgewotCQkJaWYgKGNwdV9pc19zYW1hNWQzKCkpIHsKLQkJCQl1MzIgcG1jX21hc2sgPSAxIDw8IChjbGstPnBpZCAlIDMyKTsKLQotCQkJCWlmIChjbGstPnBpZCA+IDMxKQotCQkJCQlzdGF0ZSA9IChwY3NyMSAmIHBtY19tYXNrKSA/ICJvbiIgOiAib2ZmIjsKLQkJCQllbHNlCi0JCQkJCXN0YXRlID0gKHBjc3IgJiBwbWNfbWFzaykgPyAib24iIDogIm9mZiI7Ci0JCQl9IGVsc2UgewotCQkJCXN0YXRlID0gKHBjc3IgJiBjbGstPnBtY19tYXNrKSA/ICJvbiIgOiAib2ZmIjsKLQkJCX0KLQkJfSBlbHNlIGlmIChjbGstPm1vZGUgPT0gcG1jX3Vja3JfbW9kZSkgewotCQkJc3RhdGUgPSAodWNrciAmIGNsay0+cG1jX21hc2spID8gIm9uIiA6ICJvZmYiOwotCQl9IGVsc2UgaWYgKGNsay0+cG1jX21hc2spIHsKLQkJCXN0YXRlID0gKHNyICYgY2xrLT5wbWNfbWFzaykgPyAib24iIDogIm9mZiI7Ci0JCX0gZWxzZSBpZiAoY2xrID09ICZjbGszMmsgfHwgY2xrID09ICZtYWluX2NsaykgewotCQkJc3RhdGUgPSAib24iOwotCQl9IGVsc2UgewotCQkJc3RhdGUgPSAiIjsKLQkJfQotCi0JCXNlcV9wcmludGYocywgIiUtMTBzIHVzZXJzPSUyZCAlLTNzICU5bHUgSHogJXNcbiIsCi0JCQljbGstPm5hbWUsIGNsay0+dXNlcnMsIHN0YXRlLCBjbGtfZ2V0X3JhdGUoY2xrKSwKLQkJCWNsay0+cGFyZW50ID8gY2xrLT5wYXJlbnQtPm5hbWUgOiAiIik7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfY2xrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGF0OTFfY2xrX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdDkxX2Nsa19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IGF0OTFfY2xrX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfY2xrX2RlYnVnZnNfaW5pdCh2b2lkKQotewotCS8qIC9zeXMva2VybmVsL2RlYnVnL2F0OTFfY2xrICovCi0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF0OTFfY2xrIiwgU19JRlJFRyB8IFNfSVJVR08sIE5VTEwsIE5VTEwsICZhdDkxX2Nsa19vcGVyYXRpb25zKTsKLQotCXJldHVybiAwOwotfQotcG9zdGNvcmVfaW5pdGNhbGwoYXQ5MV9jbGtfZGVidWdmc19pbml0KTsKLQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogUmVnaXN0ZXIgYSBuZXcgY2xvY2sgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2Nsa19hZGQoc3RydWN0IGNsayAqY2xrKQotewotCWxpc3RfYWRkX3RhaWwoJmNsay0+bm9kZSwgJmNsb2Nrcyk7Ci0KLQljbGstPmNsLmNvbl9pZCA9IGNsay0+bmFtZTsKLQljbGstPmNsLmNsayA9IGNsazsKLQljbGtkZXZfYWRkKCZjbGstPmNsKTsKLX0KLQotaW50IF9faW5pdCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGtfaXNfcGVyaXBoZXJhbChjbGspKSB7Ci0JCWlmICghY2xrLT5wYXJlbnQpCi0JCQljbGstPnBhcmVudCA9ICZtY2s7Ci0JCWlmIChjcHVfaXNfc2FtYTVkMygpKQotCQkJY2xrLT5yYXRlX2h6ID0gRElWX1JPVU5EX1VQKGNsay0+cGFyZW50LT5yYXRlX2h6LAotCQkJCQkJICAgIDEgPDwgY2xrLT5kaXYpOwotCQljbGstPm1vZGUgPSBwbWNfcGVyaXBoX21vZGU7Ci0JfQotCWVsc2UgaWYgKGNsa19pc19zeXMoY2xrKSkgewotCQljbGstPnBhcmVudCA9ICZtY2s7Ci0JCWNsay0+bW9kZSA9IHBtY19zeXNfbW9kZTsKLQl9Ci0JZWxzZSBpZiAoY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKSB7Ci0JCWNsay0+bW9kZSA9IHBtY19zeXNfbW9kZTsKLQkJaW5pdF9wcm9ncmFtbWFibGVfY2xvY2soY2xrKTsKLQl9Ci0KLQlhdDkxX2Nsa19hZGQoY2xrKTsKLQotCXJldHVybiAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB1MzIgX19pbml0IGF0OTFfcGxsX3JhdGUoc3RydWN0IGNsayAqcGxsLCB1MzIgZnJlcSwgdTMyIHJlZykKLXsKLQl1bnNpZ25lZCBtdWwsIGRpdjsKLQotCWRpdiA9IHJlZyAmIDB4ZmY7Ci0JaWYgKGNwdV9pc19zYW1hNWQzKCkpCi0JCW11bCA9IEFUOTFfUE1DM19NVUxfR0VUKHJlZyk7Ci0JZWxzZQotCQltdWwgPSBBVDkxX1BNQ19NVUxfR0VUKHJlZyk7Ci0KLQlpZiAoZGl2ICYmIG11bCkgewotCQlmcmVxIC89IGRpdjsKLQkJZnJlcSAqPSBtdWwgKyAxOwotCX0gZWxzZQotCQlmcmVxID0gMDsKLQotCXJldHVybiBmcmVxOwotfQotCi1zdGF0aWMgdTMyIF9faW5pdCBhdDkxX3VzYl9yYXRlKHN0cnVjdCBjbGsgKnBsbCwgdTMyIGZyZXEsIHUzMiByZWcpCi17Ci0JaWYgKHBsbCA9PSAmcGxsYiAmJiAocmVnICYgQVQ5MV9QTUNfVVNCOTZNKSkKLQkJcmV0dXJuIGZyZXEgLyAyOwotCWVsc2UgaWYgKHBsbCA9PSAmdXRtaV9jbGsgfHwgY3B1X2lzX2F0OTFzYW05bjEyKCkpCi0JCXJldHVybiBmcmVxIC8gKDEgKyAoKHJlZyAmIEFUOTFfUE1DX09IQ0lVU0JESVYpID4+IDgpKTsKLQllbHNlCi0JCXJldHVybiBmcmVxOwotfQotCi1zdGF0aWMgdW5zaWduZWQgX19pbml0IGF0OTFfcGxsX2NhbGModW5zaWduZWQgbWFpbl9mcmVxLCB1bnNpZ25lZCBvdXRfZnJlcSkKLXsKLQl1bnNpZ25lZCBpLCBkaXYgPSAwLCBtdWwgPSAwLCBkaWZmID0gMSA8PCAzMDsKLQl1bnNpZ25lZCByZXQgPSAob3V0X2ZyZXEgPiAxNTUwMDAwMDApID8gMHhiZTAwIDogMHgzZTAwOwotCi0JLyogUExMIG91dHB1dCBtYXggMjQwIE1IeiAob3IgMTgwIE1IeiBwZXIgZXJyYXRhKSAqLwotCWlmIChvdXRfZnJlcSA+IDI0MDAwMDAwMCkKLQkJZ290byBmYWlsOwotCi0JZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKSB7Ci0JCWludCBkaWZmMTsKLQkJdW5zaWduZWQgaW5wdXQsIG11bDE7Ci0KLQkJLyoKLQkJICogUExMIGlucHV0IGJldHdlZW4gMU1IeiBhbmQgMzJNSHogcGVyIHNwZWMsIGJ1dCBsb3dlcgotCQkgKiBmcmVxdWVuY2VzIHNlZW0gbmVjZXNzYXJ5IGluIHNvbWUgY2FzZXMgc28gYWxsb3cgMTAwSy4KLQkJICogV2FybmluZzogc29tZSBuZXdlciBwcm9kdWN0cyBuZWVkIDJNSHogbWluLgotCQkgKi8KLQkJaW5wdXQgPSBtYWluX2ZyZXEgLyBpOwotCQlpZiAoY3B1X2lzX2F0OTFzYW05ZzIwKCkgJiYgaW5wdXQgPCAyMDAwMDAwKQotCQkJY29udGludWU7Ci0JCWlmIChpbnB1dCA8IDEwMDAwMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoaW5wdXQgPiAzMjAwMDAwMCkKLQkJCWNvbnRpbnVlOwotCi0JCW11bDEgPSBvdXRfZnJlcSAvIGlucHV0OwotCQlpZiAoY3B1X2lzX2F0OTFzYW05ZzIwKCkgJiYgbXVsID4gNjMpCi0JCQljb250aW51ZTsKLQkJaWYgKG11bDEgPiAyMDQ4KQotCQkJY29udGludWU7Ci0JCWlmIChtdWwxIDwgMikKLQkJCWdvdG8gZmFpbDsKLQotCQlkaWZmMSA9IG91dF9mcmVxIC0gaW5wdXQgKiBtdWwxOwotCQlpZiAoZGlmZjEgPCAwKQotCQkJZGlmZjEgPSAtZGlmZjE7Ci0JCWlmIChkaWZmID4gZGlmZjEpIHsKLQkJCWRpZmYgPSBkaWZmMTsKLQkJCWRpdiA9IGk7Ci0JCQltdWwgPSBtdWwxOwotCQkJaWYgKGRpZmYgPT0gMCkKLQkJCQlicmVhazsKLQkJfQotCX0KLQlpZiAoaSA9PSAyNTYgJiYgZGlmZiA+IChvdXRfZnJlcSA+PiA1KSkKLQkJZ290byBmYWlsOwotCXJldHVybiByZXQgfCAoKG11bCAtIDEpIDw8IDE2KSB8IGRpdjsKLWZhaWw6Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjb25zdCBzdGFuZGFyZF9wbWNfY2xvY2tzW10gX19pbml0Y29uc3QgPSB7Ci0JLyogZm91ciBwcmltYXJ5IGNsb2NrcyAqLwotCSZjbGszMmssCi0JJm1haW5fY2xrLAotCSZwbGxhLAotCi0JLyogTUNLICovCi0JJm1jawotfTsKLQotLyogUExMQiBnZW5lcmF0ZWQgVVNCIGZ1bGwgc3BlZWQgY2xvY2sgaW5pdCAqLwotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfcGxsYl91c2Jmc19jbG9ja19pbml0KHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JLyoKLQkgKiBVU0IgY2xvY2sgaW5pdDogIGNob29zZSA0OCBNSHogUExMQiB2YWx1ZSwKLQkgKiBkaXNhYmxlIDQ4TUh6IGNsb2NrIGR1cmluZyB1c2IgcGVyaXBoZXJhbCBzdXNwZW5kLgotCSAqCi0JICogUkVWSVNJVDogIGFzc3VtZXMgTUNLIGRvZXNuJ3QgZGVyaXZlIGZyb20gUExMQiEKLQkgKi8KLQl1aHBjay5wYXJlbnQgPSAmcGxsYjsKLQotCXJlZyA9IGF0OTFfcGxsYl91c2JfaW5pdCA9IGF0OTFfcGxsX2NhbGMobWFpbl9jbG9jaywgNDgwMDAwMDAgKiAyKTsKLQlwbGxiLnJhdGVfaHogPSBhdDkxX3BsbF9yYXRlKCZwbGxiLCBtYWluX2Nsb2NrLCBhdDkxX3BsbGJfdXNiX2luaXQpOwotCWlmIChjcHVfaXNfYXQ5MXJtOTIwMCgpKSB7Ci0JCXJlZyA9IGF0OTFfcGxsYl91c2JfaW5pdCB8PSBBVDkxX1BNQ19VU0I5Nk07Ci0JCXVocGNrLnBtY19tYXNrID0gQVQ5MVJNOTIwMF9QTUNfVUhQOwotCQl1ZHBjay5wbWNfbWFzayA9IEFUOTFSTTkyMDBfUE1DX1VEUDsKLQkJYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgQVQ5MVJNOTIwMF9QTUNfTUNLVURQKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8Ci0JCSAgIGNwdV9pc19hdDkxc2FtOTI2MygpIHx8IGNwdV9pc19hdDkxc2FtOWcyMCgpIHx8Ci0JCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7Ci0JCXJlZyA9IGF0OTFfcGxsYl91c2JfaW5pdCB8PSBBVDkxX1BNQ19VU0I5Nk07Ci0JCXVocGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VIUDsKLQkJdWRwY2sucG1jX21hc2sgPSBBVDkxU0FNOTI2eF9QTUNfVURQOwotCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05bjEyKCkpIHsKLQkJLyogRGl2aWRlciBmb3IgVVNCIGNsb2NrIGlzIGluIFVTQiBjbG9jayByZWdpc3RlciBmb3IgOW4xMiAqLwotCQlyZWcgPSBBVDkxX1BNQ19VU0JTX1BMTEI7Ci0KLQkJLyogRm9yIFBMTEIgb3V0cHV0IDk2TSwgc2V0IHVzYiBkaXZpZGVyIDIgKFVTQkRJViArIDEpICovCi0JCXJlZyB8PSBBVDkxX1BNQ19PSENJVVNCRElWXzI7Ci0JCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1VTQiwgcmVnKTsKLQotCQkvKiBTdGlsbCBzZXR1cCBtYXNrcyAqLwotCQl1aHBjay5wbWNfbWFzayA9IEFUOTFTQU05MjZ4X1BNQ19VSFA7Ci0JCXVkcGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VEUDsKLQl9Ci0JYXQ5MV9wbWNfd3JpdGUoQVQ5MV9DS0dSX1BMTEJSLCAwKTsKLQotCXVkcGNrLnJhdGVfaHogPSBhdDkxX3VzYl9yYXRlKCZwbGxiLCBwbGxiLnJhdGVfaHosIHJlZyk7Ci0JdWhwY2sucmF0ZV9oeiA9IGF0OTFfdXNiX3JhdGUoJnBsbGIsIHBsbGIucmF0ZV9oeiwgcmVnKTsKLX0KLQotLyogVVBMTCBnZW5lcmF0ZWQgVVNCIGZ1bGwgc3BlZWQgY2xvY2sgaW5pdCAqLwotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfdXBsbF91c2Jmc19jbG9ja19pbml0KHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKLXsKLQkvKgotCSAqIFVTQiBjbG9jayBpbml0OiBjaG9vc2UgNDgwIE1IeiBmcm9tIFVQTEwsCi0JICovCi0JdW5zaWduZWQgaW50IHVzYnIgPSBBVDkxX1BNQ19VU0JTX1VQTEw7Ci0KLQkvKiBTZXR1cCBkaXZpZGVyIGJ5IDEwIHRvIHJlYWNoIDQ4IE1IeiAqLwotCXVzYnIgfD0gKCgxMCAtIDEpIDw8IDgpICYgQVQ5MV9QTUNfT0hDSVVTQkRJVjsKLQotCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1VTQiwgdXNicik7Ci0KLQkvKiBOb3cgc2V0IHVocGNrIHZhbHVlcyAqLwotCXVocGNrLnBhcmVudCA9ICZ1dG1pX2NsazsKLQl1aHBjay5wbWNfbWFzayA9IEFUOTFTQU05MjZ4X1BNQ19VSFA7Ci0JdWhwY2sucmF0ZV9oeiA9IGF0OTFfdXNiX3JhdGUoJnV0bWlfY2xrLCB1dG1pX2Nsay5yYXRlX2h6LCB1c2JyKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYXQ5MV9wbWNfaW5pdCh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCi17Ci0JdW5zaWduZWQgdG1wLCBmcmVxLCBtY2tyOwotCWludCBpOwotCWludCBwbGxfb3ZlcmNsb2NrID0gZmFsc2U7Ci0KLQkvKgotCSAqIFdoZW4gdGhlIGJvb3Rsb2FkZXIgaW5pdGlhbGl6ZWQgdGhlIG1haW4gb3NjaWxsYXRvciBjb3JyZWN0bHksCi0JICogdGhlcmUncyBubyBwcm9ibGVtIHVzaW5nIHRoZSBjeWNsZSBjb3VudGVyLiAgQnV0IGlmIGl0IGRpZG4ndCwKLQkgKiBvciB3aGVuIHVzaW5nIG9zY2lsbGF0b3IgYnlwYXNzIG1vZGUsIHdlIG11c3QgYmUgdG9sZCB0aGUgc3BlZWQKLQkgKiBvZiB0aGUgbWFpbiBjbG9jay4KLQkgKi8KLQlpZiAoIW1haW5fY2xvY2spIHsKLQkJZG8gewotCQkJdG1wID0gYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfTUNGUik7Ci0JCX0gd2hpbGUgKCEodG1wICYgQVQ5MV9QTUNfTUFJTlJEWSkpOwotCQltYWluX2Nsb2NrID0gKHRtcCAmIEFUOTFfUE1DX01BSU5GKSAqIChBVDkxX1NMT1dfQ0xPQ0sgLyAxNik7Ci0JfQotCW1haW5fY2xrLnJhdGVfaHogPSBtYWluX2Nsb2NrOwotCi0JLyogcmVwb3J0IGlmIFBMTEEgaXMgbW9yZSB0aGFuIG1pbGRseSBvdmVyY2xvY2tlZCAqLwotCXBsbGEucmF0ZV9oeiA9IGF0OTFfcGxsX3JhdGUoJnBsbGEsIG1haW5fY2xvY2ssIGF0OTFfcG1jX3JlYWQoQVQ5MV9DS0dSX1BMTEFSKSk7Ci0JaWYgKGNwdV9oYXNfMTA1Nk1fcGxsYSgpKSB7Ci0JCWlmIChwbGxhLnJhdGVfaHogPiAxMDU2MDAwMDAwKQotCQkJcGxsX292ZXJjbG9jayA9IHRydWU7Ci0JfSBlbHNlIGlmIChjcHVfaGFzXzgwME1fcGxsYSgpKSB7Ci0JCWlmIChwbGxhLnJhdGVfaHogPiA4MDAwMDAwMDApCi0JCQlwbGxfb3ZlcmNsb2NrID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKGNwdV9oYXNfMzAwTV9wbGxhKCkpIHsKLQkJaWYgKHBsbGEucmF0ZV9oeiA+IDMwMDAwMDAwMCkKLQkJCXBsbF9vdmVyY2xvY2sgPSB0cnVlOwotCX0gZWxzZSBpZiAoY3B1X2hhc18yNDBNX3BsbGEoKSkgewotCQlpZiAocGxsYS5yYXRlX2h6ID4gMjQwMDAwMDAwKQotCQkJcGxsX292ZXJjbG9jayA9IHRydWU7Ci0JfSBlbHNlIGlmIChjcHVfaGFzXzIxME1fcGxsYSgpKSB7Ci0JCWlmIChwbGxhLnJhdGVfaHogPiAyMTAwMDAwMDApCi0JCQlwbGxfb3ZlcmNsb2NrID0gdHJ1ZTsKLQl9IGVsc2UgewotCQlpZiAocGxsYS5yYXRlX2h6ID4gMjA5MDAwMDAwKQotCQkJcGxsX292ZXJjbG9jayA9IHRydWU7Ci0JfQotCWlmIChwbGxfb3ZlcmNsb2NrKQotCQlwcl9pbmZvKCJDbG9ja3M6IFBMTEEgb3ZlcmNsb2NrZWQsICVsZCBNSHpcbiIsIHBsbGEucmF0ZV9oeiAvIDEwMDAwMDApOwotCi0JaWYgKGNwdV9oYXNfcGxsYWRpdjIoKSkgewotCQltY2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19NQ0tSKTsKLQkJcGxsYS5yYXRlX2h6IC89ICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX1BMTEFESVYyKSA+PiAxMikpOwkvKiBwbGxhIGRpdmlzb3IgYnkgMiAqLwotCX0KLQotCWlmICghY3B1X2hhc19wbGxiKCkgJiYgY3B1X2hhc191cGxsKCkpIHsKLQkJLyogc2V0dXAgVVRNSSBjbG9jayBhcyB0aGUgZm91cnRoIHByaW1hcnkgY2xvY2sKLQkJICogKGluc3RlYWQgb2YgcGxsYikgKi8KLQkJdXRtaV9jbGsudHlwZSB8PSBDTEtfVFlQRV9QUklNQVJZOwotCQl1dG1pX2Nsay5pZCA9IDM7Ci0JfQotCi0KLQkvKgotCSAqIFVTQiBIUyBjbG9jayBpbml0Ci0JICovCi0JaWYgKGNwdV9oYXNfdXRtaSgpKSB7Ci0JCS8qCi0JCSAqIG11bHRpcGxpZXIgaXMgaGFyZC13aXJlZCB0byA0MAotCQkgKiAob2J0YWluIHRoZSBVU0IgSGlnaCBTcGVlZCA0ODAgTUh6IHdoZW4gaW5wdXQgaXMgMTIgTUh6KQotCQkgKi8KLQkJdXRtaV9jbGsucmF0ZV9oeiA9IDQwICogdXRtaV9jbGsucGFyZW50LT5yYXRlX2h6OwotCi0JCS8qIFVUTUkgYmlhcyBhbmQgUExMIGFyZSBtYW5hZ2VkIGF0IHRoZSBzYW1lIHRpbWUgKi8KLQkJaWYgKGNwdV9oYXNfdXBsbCgpKQotCQkJdXRtaV9jbGsucG1jX21hc2sgfD0gQVQ5MV9QTUNfQklBU0VOOwotCX0KLQotCS8qCi0JICogVVNCIEZTIGNsb2NrIGluaXQKLQkgKi8KLQlpZiAoY3B1X2hhc19wbGxiKCkpCi0JCWF0OTFfcGxsYl91c2Jmc19jbG9ja19pbml0KG1haW5fY2xvY2spOwotCWlmIChjcHVfaGFzX3VwbGwoKSkKLQkJLyogYXNzdW1lcyB0aGF0IHdlIGNob29zZSBVUExMIGZvciBVU0IgYW5kIG5vdCBQTExBICovCi0JCWF0OTFfdXBsbF91c2Jmc19jbG9ja19pbml0KG1haW5fY2xvY2spOwotCi0JLyoKLQkgKiBNQ0sgYW5kIENQVSBkZXJpdmUgZnJvbSBvbmUgb2YgdGhvc2UgcHJpbWFyeSBjbG9ja3MuCi0JICogRm9yIG5vdywgYXNzdW1lIHRoaXMgcGFyZW50YWdlIHdvbid0IGNoYW5nZS4KLQkgKi8KLQltY2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19NQ0tSKTsKLQltY2sucGFyZW50ID0gYXQ5MV9jc3NfdG9fY2xrKG1ja3IgJiBBVDkxX1BNQ19DU1MpOwotCWZyZXEgPSBtY2sucGFyZW50LT5yYXRlX2h6OwotCWZyZXEgLz0gcG1jX3ByZXNjYWxlcl9kaXZpZGVyKG1ja3IpOwkJCQkJLyogcHJlc2NhbGUgKi8KLQlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkgewotCQltY2sucmF0ZV9oeiA9IGZyZXEgLyAoMSArICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJLyogbWRpdiAqLwotCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05ZzIwKCkpIHsKLQkJbWNrLnJhdGVfaHogPSAobWNrciAmIEFUOTFfUE1DX01ESVYpID8KLQkJCWZyZXEgLyAoKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA+PiA3KSA6IGZyZXE7CS8qIG1kaXYgOyAoeCA+PiA3KSA9ICgoeCA+PiA4KSAqIDIpICovCi0JCWlmIChtY2tyICYgQVQ5MV9QTUNfUERJVikKLQkJCWZyZXEgLz0gMjsJCS8qIHByb2Nlc3NvciBjbG9jayBkaXZpc2lvbiAqLwotCX0gZWxzZSBpZiAoY3B1X2hhc19tZGl2MygpKSB7Ci0JCW1jay5yYXRlX2h6ID0gKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA9PSBBVDkxU0FNOV9QTUNfTURJVl8zID8KLQkJCWZyZXEgLyAzIDogZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJLyogbWRpdiAqLwotCX0gZWxzZSB7Ci0JCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJCS8qIG1kaXYgKi8KLQl9Ci0KLQlpZiAoY3B1X2hhc19hbHRfcHJlc2NhbGVyKCkpIHsKLQkJLyogUHJvZ3JhbW1hYmxlIGNsb2NrcyBjYW4gdXNlIE1DSyAqLwotCQltY2sudHlwZSB8PSBDTEtfVFlQRV9QUklNQVJZOwotCQltY2suaWQgPSA0OwotCX0KLQotCS8qIFJlZ2lzdGVyIHRoZSBQTUMncyBzdGFuZGFyZCBjbG9ja3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGFuZGFyZF9wbWNfY2xvY2tzKTsgaSsrKQotCQlhdDkxX2Nsa19hZGQoc3RhbmRhcmRfcG1jX2Nsb2Nrc1tpXSk7Ci0KLQlpZiAoY3B1X2hhc19wbGxiKCkpCi0JCWF0OTFfY2xrX2FkZCgmcGxsYik7Ci0KLQlpZiAoY3B1X2hhc191aHAoKSkKLQkJYXQ5MV9jbGtfYWRkKCZ1aHBjayk7Ci0KLQlpZiAoY3B1X2hhc191ZHBmcygpKQotCQlhdDkxX2Nsa19hZGQoJnVkcGNrKTsKLQotCWlmIChjcHVfaGFzX3V0bWkoKSkKLQkJYXQ5MV9jbGtfYWRkKCZ1dG1pX2Nsayk7Ci0KLQkvKiBNQ0sgYW5kIENQVSBjbG9jayBhcmUgImFsd2F5cyBvbiIgKi8KLQljbGtfZW5hYmxlKCZtY2spOwotCi0JcHJpbnRrKCJDbG9ja3M6IENQVSAldSBNSHosIG1hc3RlciAldSBNSHosIG1haW4gJXUuJTAzdSBNSHpcbiIsCi0JCWZyZXEgLyAxMDAwMDAwLCAodW5zaWduZWQpIG1jay5yYXRlX2h6IC8gMTAwMDAwMCwKLQkJKHVuc2lnbmVkKSBtYWluX2Nsb2NrIC8gMTAwMDAwMCwKLQkJKCh1bnNpZ25lZCkgbWFpbl9jbG9jayAlIDEwMDAwMDApIC8gMTAwMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX09GKQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcG1jX2lkc1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOWc0NS1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOW4xMi1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LXBtYyIgfSwKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDMtcG1jIiB9LAotCXsgLypzZW50aW5lbCovIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9zY19pZHNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLG9zYyIgfSwKLQl7IC8qc2VudGluZWwqLyB9Ci19OwotCi1pbnQgX19pbml0IGF0OTFfZHRfY2xvY2tfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdTMyIG1haW5fY2xvY2sgPSAwOwotCi0JbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgcG1jX2lkcyk7Ci0JaWYgKCFucCkKLQkJcGFuaWMoInVuYWJsZSB0byBmaW5kIGNvbXBhdGlibGUgcG1jIG5vZGUgaW4gZHRiXG4iKTsKLQotCWF0OTFfcG1jX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7Ci0JaWYgKCFhdDkxX3BtY19iYXNlKQotCQlwYW5pYygidW5hYmxlIHRvIG1hcCBwbWMgY3B1IHJlZ2lzdGVyc1xuIik7Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci0KLQkvKiByZXRyaWV2ZSB0aGUgZnJlcWVuY3kgb2YgZml4ZWQgY2xvY2tzIGZyb20gZGV2aWNlIHRyZWUgKi8KLQlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBvc2NfaWRzKTsKLQlpZiAobnApIHsKLQkJdTMyIHJhdGU7Ci0JCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjbG9jay1mcmVxdWVuY3kiLCAmcmF0ZSkpCi0JCQltYWluX2Nsb2NrID0gcmF0ZTsKLQl9Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci0KLQlyZXR1cm4gYXQ5MV9wbWNfaW5pdChtYWluX2Nsb2NrKTsKLX0KLSNlbmRpZgotCi1pbnQgX19pbml0IGF0OTFfY2xvY2tfaW5pdCh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCi17Ci0JYXQ5MV9wbWNfYmFzZSA9IGlvcmVtYXAoQVQ5MV9QTUMsIDI1Nik7Ci0JaWYgKCFhdDkxX3BtY19iYXNlKQotCQlwYW5pYygiSW1wb3NzaWJsZSB0byBpb3JlbWFwIEFUOTFfUE1DIDB4JXhcbiIsIEFUOTFfUE1DKTsKLQotCXJldHVybiBhdDkxX3BtY19pbml0KG1haW5fY2xvY2spOwotfQotCi0vKgotICogU2V2ZXJhbCB1bnVzZWQgY2xvY2tzIG1heSBiZSBhY3RpdmUuICBUdXJuIHRoZW0gb2ZmLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2Nsb2NrX3Jlc2V0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBwY2RyID0gMDsKLQl1bnNpZ25lZCBsb25nIHBjZHIxID0gMDsKLQl1bnNpZ25lZCBsb25nIHNjZHIgPSAwOwotCXN0cnVjdCBjbGsgKmNsazsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChjbGstPnVzZXJzID4gMCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjbGstPm1vZGUgPT0gcG1jX3BlcmlwaF9tb2RlKSB7Ci0JCQlpZiAoY3B1X2lzX3NhbWE1ZDMoKSkgewotCQkJCXUzMiBwbWNfbWFzayA9IDEgPDwgKGNsay0+cGlkICUgMzIpOwotCi0JCQkJaWYgKGNsay0+cGlkID4gMzEpCi0JCQkJCXBjZHIxIHw9IHBtY19tYXNrOwotCQkJCWVsc2UKLQkJCQkJcGNkciB8PSBwbWNfbWFzazsKLQkJCX0gZWxzZQotCQkJCXBjZHIgfD0gY2xrLT5wbWNfbWFzazsKLQkJfQotCi0JCWlmIChjbGstPm1vZGUgPT0gcG1jX3N5c19tb2RlKQotCQkJc2NkciB8PSBjbGstPnBtY19tYXNrOwotCi0JCXByX2RlYnVnKCJDbG9ja3M6IGRpc2FibGUgdW51c2VkICVzXG4iLCBjbGstPm5hbWUpOwotCX0KLQotCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1NDRFIsIHNjZHIpOwotCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1BDRFIsIHBjZHIpOwotCWlmIChjcHVfaXNfc2FtYTVkMygpKQotCQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19QQ0RSMSwgcGNkcjEpOwotCi0JcmV0dXJuIDA7Ci19Ci1sYXRlX2luaXRjYWxsKGF0OTFfY2xvY2tfcmVzZXQpOwotCi12b2lkIGF0OTFzYW05X2lkbGUodm9pZCkKLXsKLQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19TQ0RSLCBBVDkxX1BNQ19QQ0spOwotCWNwdV9kb19pZGxlKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOThhMzliLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+Ci0KLSNkZWZpbmUgQ0xLX1RZUEVfUFJJTUFSWQkweDEKLSNkZWZpbmUgQ0xLX1RZUEVfUExMCQkweDIKLSNkZWZpbmUgQ0xLX1RZUEVfUFJPR1JBTU1BQkxFCTB4NAotI2RlZmluZSBDTEtfVFlQRV9QRVJJUEhFUkFMCTB4OAotI2RlZmluZSBDTEtfVFlQRV9TWVNURU0JCTB4MTAKLQotCi1zdHJ1Y3QgY2xrIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JY29uc3QgY2hhcgkqbmFtZTsJCS8qIHVuaXF1ZSBjbG9jayBuYW1lICovCi0Jc3RydWN0IGNsa19sb29rdXAgY2w7Ci0JdW5zaWduZWQgbG9uZwlyYXRlX2h6OwotCXVuc2lnbmVkCWRpdjsJCS8qIHBhcmVudCBjbG9jayBkaXZpZGVyICovCi0Jc3RydWN0IGNsawkqcGFyZW50OwotCXVuc2lnbmVkCXBpZDsJCS8qIHBlcmlwaGVyYWwgSUQgKi8KLQl1MzIJCXBtY19tYXNrOwotCXZvaWQJCSgqbW9kZSkoc3RydWN0IGNsayAqLCBpbnQpOwotCXVuc2lnbmVkCWlkOjM7CQkvKiBQQ0swLi40LCBvciAzMmsvbWFpbi9hL2IgKi8KLQl1bnNpZ25lZAl0eXBlOwkJLyogY2xvY2sgdHlwZSAqLwotCXUxNgkJdXNlcnM7Ci19OwotCi0KLWV4dGVybiBpbnQgX19pbml0IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwotZXh0ZXJuIHN0cnVjdCBjbGsgbWNrOwotZXh0ZXJuIHN0cnVjdCBjbGsgdXRtaV9jbGs7Ci0KLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspCQkJXAotCXsJCQkJCQlcCi0JCS5jb25faWQgPSBfaWQsCQkJCVwKLQkJLmNsayA9IF9jbGssCQkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0xLREVWX0NPTl9ERVZfSUQoX2Nvbl9pZCwgX2Rldl9pZCwgX2NsaykJXAotCXsJCQkJCQlcCi0JCS5jb25faWQgPSBfY29uX2lkLAkJCVwKLQkJLmRldl9pZCA9IF9kZXZfaWQsCQkJXAotCQkuY2xrID0gX2NsaywJCQkJXAotCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCmluZGV4IDgxOTU5Y2YuLmQ1MzMyNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVQ5MV9HRU5FUklDX0gKICNkZWZpbmUgX0FUOTFfR0VORVJJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCkBAIC0yMyw3MSArMjIsMTkgQEAKIAogIC8qIFByb2Nlc3NvcnMgKi8KIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxcm05MjAwX3NldF90eXBlKGludCB0eXBlKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxeDQwX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxcm05MjAwX2R0X2luaXRpYWxpemUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9kdF9pbml0aWFsaXplKHZvaWQpOwogCiAgLyogSW50ZXJydXB0cyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7Ci1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MXg0MF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWljX2luaXQodW5zaWduZWQgaW50IHByaW9yaXR5W10sCi0JCQkJIHVuc2lnbmVkIGludCBleHRfaXJxX21hc2spOwotZXh0ZXJuIGludCAgX19pbml0IGF0OTFfYWljX29mX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCk7Ci1leHRlcm4gaW50ICBfX2luaXQgYXQ5MV9haWM1X29mX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9zeXNpcnFfbWFza19ydGModTMyIHJ0Y19iYXNlKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX3N5c2lycV9tYXNrX3J0dCh1MzIgcnR0X2Jhc2UpOwogCi0gLyogRGV2aWNlcyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKTsKLQogIC8qIFRpbWVyICovCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9pbml0X3RpbWUodm9pZCk7Ci1leHRlcm4gdm9pZCBhdDkxcm05MjAwX2lvcmVtYXBfc3QodTMyIGFkZHIpOwogZXh0ZXJuIHZvaWQgYXQ5MXJtOTIwMF90aW1lcl9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgYXQ5MXNhbTkyNnhfaW9yZW1hcF9waXQodTMyIGFkZHIpOwotZXh0ZXJuIHZvaWQgYXQ5MXNhbTkyNnhfcGl0X2luaXQoaW50IGlycSk7Ci1leHRlcm4gdm9pZCBhdDkxeDQwX3RpbWVyX2luaXQodm9pZCk7Ci0KLSAvKiBDbG9ja3MgKi8KLSNpZmRlZiBDT05GSUdfT0xEX0NMS19BVDkxCi1leHRlcm4gaW50IF9faW5pdCBhdDkxX2Nsb2NrX2luaXQodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKLWV4dGVybiBpbnQgX19pbml0IGF0OTFfZHRfY2xvY2tfaW5pdCh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW50IGlubGluZSBhdDkxX2Nsb2NrX2luaXQodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW50IGlubGluZSBhdDkxX2R0X2Nsb2NrX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi1zdHJ1Y3QgZGV2aWNlOwotCi0gLyogUG93ZXIgTWFuYWdlbWVudCAqLwotZXh0ZXJuIHZvaWQgYXQ5MV9pcnFfc3VzcGVuZCh2b2lkKTsKLWV4dGVybiB2b2lkIGF0OTFfaXJxX3Jlc3VtZSh2b2lkKTsKIAogLyogaWRsZSAqLwogZXh0ZXJuIHZvaWQgYXQ5MXNhbTlfaWRsZSh2b2lkKTsKIAogLyogTWF0cml4ICovCiBleHRlcm4gdm9pZCBhdDkxX2lvcmVtYXBfbWF0cml4KHUzMiBiYXNlX2FkZHIpOwotCi0vKiBSYW0gQ29udHJvbGVyICovCi1leHRlcm4gdm9pZCBhdDkxX2lvcmVtYXBfcmFtYyhpbnQgaWQsIHUzMiBhZGRyLCB1MzIgc2l6ZSk7Ci0KLSAvKiBHUElPICovCi0jZGVmaW5lIEFUOTFSTTkyMDBfUFFGUAkJMwkvKiBBVDkxUk05MjAwIFBRRlAgcGFja2FnZSBoYXMgMyBiYW5rcyAqLwotI2RlZmluZSBBVDkxUk05MjAwX0JHQQkJNAkvKiBBVDkxUk05MjAwIEJHQSBwYWNrYWdlIGhhcyA0IGJhbmtzICovCi0KLXN0cnVjdCBhdDkxX2dwaW9fYmFuayB7Ci0JdW5zaWduZWQgc2hvcnQgaWQ7CQkvKiBwZXJpcGhlcmFsIElEICovCi0JdW5zaWduZWQgbG9uZyByZWdiYXNlOwkJLyogb2Zmc2V0IGZyb20gc3lzdGVtIHBlcmlwaGVyYWwgYmFzZSAqLwotfTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2dwaW9faW5pdChzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgKiwgaW50IG5yX2JhbmtzKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2dwaW9faXJxX3NldHVwKHZvaWQpOwotZXh0ZXJuIGludCAgX19pbml0IGF0OTFfZ3Bpb19vZl9pcnFfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCQkgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50KTsKLQotZXh0ZXJuIHUzMiBhdDkxX2dldF9leHRlcm5faXJxKHZvaWQpOwotCiAjZW5kaWYgLyogX0FUOTFfR0VORVJJQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmMDVhYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsOTgyICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEhQIExhYnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9waW8uaD4KLQotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLSNkZWZpbmUgTUFYX05CX0dQSU9fUEVSX0JBTksJMzIKLQotc3RydWN0IGF0OTFfZ3Bpb19jaGlwIHsKLQlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwCSpuZXh0OwkJLyogQmFuayBzaGFyaW5nIHNhbWUgY2xvY2sgKi8KLQlpbnQJCQlwaW9jX2h3aXJxOwkvKiBQSU8gYmFuayBpbnRlcnJ1cHQgaWRlbnRpZmllciBvbiBBSUMgKi8KLQlpbnQJCQlwaW9jX3ZpcnE7CS8qIFBJTyBiYW5rIExpbnV4IHZpcnR1YWwgaW50ZXJydXB0ICovCi0JaW50CQkJcGlvY19pZHg7CS8qIFBJTyBiYW5rIGluZGV4ICovCi0Jdm9pZCBfX2lvbWVtCQkqcmVnYmFzZTsJLyogUElPIGJhbmsgdmlydHVhbCBhZGRyZXNzICovCi0Jc3RydWN0IGNsawkJKmNsb2NrOwkJLyogYXNzb2NpYXRlZCBjbG9jayAqLwotCXN0cnVjdCBpcnFfZG9tYWluCSpkb21haW47CS8qIGFzc29jaWF0ZWQgaXJxIGRvbWFpbiAqLwotfTsKLQotI2RlZmluZSB0b19hdDkxX2dwaW9fY2hpcChjKSBjb250YWluZXJfb2YoYywgc3RydWN0IGF0OTFfZ3Bpb19jaGlwLCBjaGlwKQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7Ci1zdGF0aWMgdm9pZCBhdDkxX2dwaW9saWJfZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKTsKLXN0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKLXN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOwotc3RhdGljIGludCBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOwotc3RhdGljIGludCBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQkgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKLXN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQl1bnNpZ25lZCBvZmZzZXQpOwotc3RhdGljIGludCBhdDkxX2dwaW9saWJfdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7Ci0KLSNkZWZpbmUgQVQ5MV9HUElPX0NISVAobmFtZSkJCQkJCQlcCi0JewkJCQkJCQkJXAotCQkuY2hpcCA9IHsJCQkJCQlcCi0JCQkubGFiZWwJCSAgPSBuYW1lLAkJCVwKLQkJCS5yZXF1ZXN0CSAgPSBhdDkxX2dwaW9saWJfcmVxdWVzdCwJXAotCQkJLmdldF9kaXJlY3Rpb24gICAgPSBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbiwgXAotCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX2lucHV0LCBcCi0JCQkuZGlyZWN0aW9uX291dHB1dCA9IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0LCBcCi0JCQkuZ2V0CQkgID0gYXQ5MV9ncGlvbGliX2dldCwJCVwKLQkJCS5zZXQJCSAgPSBhdDkxX2dwaW9saWJfc2V0LAkJXAotCQkJLmRiZ19zaG93CSAgPSBhdDkxX2dwaW9saWJfZGJnX3Nob3csCVwKLQkJCS50b19pcnEJCSAgPSBhdDkxX2dwaW9saWJfdG9faXJxLAlcCi0JCQkubmdwaW8JCSAgPSBNQVhfTkJfR1BJT19QRVJfQkFOSywJXAotCQl9LAkJCQkJCQlcCi0JfQotCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19jaGlwIGdwaW9fY2hpcFtdID0gewotCUFUOTFfR1BJT19DSElQKCJwaW9BIiksCi0JQVQ5MV9HUElPX0NISVAoInBpb0IiKSwKLQlBVDkxX0dQSU9fQ0hJUCgicGlvQyIpLAotCUFUOTFfR1BJT19DSElQKCJwaW9EIiksCi0JQVQ5MV9HUElPX0NISVAoInBpb0UiKSwKLX07Ci0KLXN0YXRpYyBpbnQgZ3Bpb19iYW5rczsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGF0OTFfZ3Bpb19jYXBzOwotCi0vKiBBbGwgUElPIGNvbnRyb2xsZXJzIHN1cHBvcnQgUElPMyBmZWF0dXJlcyAqLwotI2RlZmluZSBBVDkxX0dQSU9fQ0FQX1BJTzMJKDEgPDwgIDApCi0KLSNkZWZpbmUgaGFzX3BpbzMoKQkoYXQ5MV9ncGlvX2NhcHMgJiBBVDkxX0dQSU9fQ0FQX1BJTzMpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcGluX3RvX2NvbnRyb2xsZXIodW5zaWduZWQgcGluKQotewotCXBpbiAvPSBNQVhfTkJfR1BJT19QRVJfQkFOSzsKLQlpZiAobGlrZWx5KHBpbiA8IGdwaW9fYmFua3MpKQotCQlyZXR1cm4gZ3Bpb19jaGlwW3Bpbl0ucmVnYmFzZTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBpbl90b19tYXNrKHVuc2lnbmVkIHBpbikKLXsKLQlyZXR1cm4gMSA8PCAocGluICUgTUFYX05CX0dQSU9fUEVSX0JBTkspOwotfQotCi0KLXN0YXRpYyBjaGFyIHBlcmlwaGVyYWxfZnVuY3Rpb24odm9pZCBfX2lvbWVtICpwaW8sIHVuc2lnbmVkIG1hc2spCi17Ci0JY2hhcglyZXQgPSAnWCc7Ci0JdTgJc2VsZWN0OwotCi0JaWYgKHBpbykgewotCQlpZiAoaGFzX3BpbzMoKSkgewotCQkJc2VsZWN0ID0gISEoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjEpICYgbWFzayk7Ci0JCQlzZWxlY3QgfD0gKCEhKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IyKSAmIG1hc2spIDw8IDEpOwotCQkJcmV0ID0gJ0EnICsgc2VsZWN0OwotCQl9IGVsc2UgewotCQkJcmV0ID0gX19yYXdfcmVhZGwocGlvICsgUElPX0FCU1IpICYgbWFzayA/Ci0JCQkJCQkJJ0InIDogJ0EnOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIE5vdCBhbGwgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGFyZSBleHBvc2VkIHRocm91Z2ggdGhlc2UgY2FsbHM7IHRoZXkKLSAqIG9ubHkgZW5jYXBzdWxhdGUgdGhlIG1vc3QgY29tbW9uIGZlYXR1cmVzIGFuZCBtb2Rlcy4gIChTbyBpZiB5b3UKLSAqIHdhbnQgdG8gY2hhbmdlIHNpZ25hbHMgaW4gZ3JvdXBzLCBkbyBpdCBkaXJlY3RseS4pCi0gKgotICogQm9vdGxvYWRlcnMgd2lsbCB1c3VhbGx5IGhhbmRsZSBzb21lIG9mIHRoZSBwaW4gbXVsdGlwbGV4aW5nIHNldHVwLgotICogVGhlIGludGVudCBpcyBjZXJ0YWlubHkgdGhhdCBieSB0aGUgdGltZSBMaW51eCBpcyBmdWxseSBib290ZWQsIGFsbAotICogcGlucyBzaG91bGQgaGF2ZSBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlc2Ugc2V0dXAgY2FsbHMgc2hvdWxkCi0gKiBvbmx5IGJlIHVzZWQgYnkgYm9hcmQgc2V0dXAgcm91dGluZXMsIG9yIHBvc3NpYmx5IGluIGRyaXZlciBwcm9iZSgpLgotICoKLSAqIEZvciBib290bG9hZGVycyBkb2luZyBhbGwgdGhhdCBzZXR1cCwgdGhlc2UgY2FsbHMgY291bGQgYmUgaW5saW5lZAotICogYXMgTk9QcyBzbyBMaW51eCB3b24ndCBkdXBsaWNhdGUgYW55IHNldHVwIGNvZGUKLSAqLwotCi0KLS8qCi0gKiBtdXggdGhlIHBpbiB0byB0aGUgIkdQSU8iIHBlcmlwaGVyYWwgcm9sZS4KLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfR1BJT19wZXJpcGgodW5zaWduZWQgcGluLCBpbnQgdXNlX3B1bGx1cCkKLXsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7Ci0JdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7Ci0KLQlpZiAoIXBpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodXNlX3B1bGx1cCA/IFBJT19QVUVSIDogUElPX1BVRFIpKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BFUik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGF0OTFfc2V0X0dQSU9fcGVyaXBoKTsKLQotCi0vKgotICogbXV4IHRoZSBwaW4gdG8gdGhlICJBIiBpbnRlcm5hbCBwZXJpcGhlcmFsIHJvbGUuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X0FfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodXNlX3B1bGx1cCA/IFBJT19QVUVSIDogUElPX1BVRFIpKTsKLQlpZiAoaGFzX3BpbzMoKSkgewotCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjEpICYgfm1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjEpOwotCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjIpICYgfm1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjIpOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fQVNSKTsKLQl9Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRFIpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9BX3BlcmlwaCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSAiQiIgaW50ZXJuYWwgcGVyaXBoZXJhbCByb2xlLgotICovCi1pbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9CX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7Ci0JaWYgKGhhc19waW8zKCkpIHsKLQkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IxKSB8IG1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjEpOwotCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjIpICYgfm1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjIpOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fQlNSKTsKLQl9Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRFIpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9CX3BlcmlwaCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSAiQyIgaW50ZXJuYWwgcGVyaXBoZXJhbCByb2xlLgotICovCi1pbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9DX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvIHx8ICFoYXNfcGlvMygpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IxKSAmIH5tYXNrLCBwaW8gKyBQSU9fQUJDRFNSMSk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IyKSB8IG1hc2ssIHBpbyArIFBJT19BQkNEU1IyKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BEUik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGF0OTFfc2V0X0NfcGVyaXBoKTsKLQotCi0vKgotICogbXV4IHRoZSBwaW4gdG8gdGhlICJEIiBpbnRlcm5hbCBwZXJpcGhlcmFsIHJvbGUuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X0RfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8gfHwgIWhhc19waW8zKCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodXNlX3B1bGx1cCA/IFBJT19QVUVSIDogUElPX1BVRFIpKTsKLQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjEpIHwgbWFzaywgcGlvICsgUElPX0FCQ0RTUjEpOwotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChwaW8gKyBQSU9fQUJDRFNSMikgfCBtYXNrLCBwaW8gKyBQSU9fQUJDRFNSMik7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRFIpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9EX3BlcmlwaCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSBncGlvIGNvbnRyb2xsZXIgKGluc3RlYWQgb2YgIkEiLCAiQiIsICJDIgotICogb3IgIkQiIHBlcmlwaGVyYWwpLCBhbmQgY29uZmlndXJlIGl0IGZvciBhbiBpbnB1dC4KLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZ3Bpb19pbnB1dCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZ3Bpb19pbnB1dCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSBncGlvIGNvbnRyb2xsZXIgKGluc3RlYWQgb2YgIkEiLCAiQiIsICJDIgotICogb3IgIkQiIHBlcmlwaGVyYWwpLCBhbmQgY29uZmlndXJlIGl0IGZvciBhbiBvdXRwdXQuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2dwaW9fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BVRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodmFsdWUgPyBQSU9fU09EUiA6IFBJT19DT0RSKSk7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRVIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZ3Bpb19vdXRwdXQpOwotCi0KLS8qCi0gKiBlbmFibGUvZGlzYWJsZSB0aGUgZ2xpdGNoIGZpbHRlcjsgbW9zdGx5IHVzZWQgd2l0aCBJUlEgaGFuZGxpbmcuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2RlZ2xpdGNoKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChoYXNfcGlvMygpICYmIGlzX29uKQotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lGU0NEUik7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIChpc19vbiA/IFBJT19JRkVSIDogUElPX0lGRFIpKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZGVnbGl0Y2gpOwotCi0vKgotICogZW5hYmxlL2Rpc2FibGUgdGhlIGRlYm91bmNlIGZpbHRlcjsKLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZGVib3VuY2UodW5zaWduZWQgcGluLCBpbnQgaXNfb24sIGludCBkaXYpCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8gfHwgIWhhc19waW8zKCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGlzX29uKSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSUZTQ0VSKTsKLQkJX19yYXdfd3JpdGVsKGRpdiAmIFBJT19TQ0RSX0RJViwgcGlvICsgUElPX1NDRFIpOwotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lGRVIpOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSUZEUik7Ci0JfQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9kZWJvdW5jZSk7Ci0KLS8qCi0gKiBlbmFibGUvZGlzYWJsZSB0aGUgbXVsdGktZHJpdmVyOyBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIG91dHB1dCBhbmQKLSAqIGFsbG93cyB0aGUgb3V0cHV0IHBpbiB0byBydW4gYXMgYW4gb3BlbiBjb2xsZWN0b3Igb3V0cHV0LgotICovCi1pbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9tdWx0aV9kcml2ZSh1bnNpZ25lZCBwaW4sIGludCBpc19vbikKLXsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7Ci0JdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7Ci0KLQlpZiAoIXBpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKGlzX29uID8gUElPX01ERVIgOiBQSU9fTUREUikpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9tdWx0aV9kcml2ZSk7Ci0KLS8qCi0gKiBlbmFibGUvZGlzYWJsZSB0aGUgcHVsbC1kb3duLgotICogSWYgcHVsbC11cCBhbHJlYWR5IGVuYWJsZWQgd2hpbGUgY2FsbGluZyB0aGUgZnVuY3Rpb24sIHdlIGRpc2FibGUgaXQuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X3B1bGxkb3duKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvIHx8ICFoYXNfcGlvMygpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIERpc2FibGUgcHVsbC11cCBhbnl3YXkgKi8KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BVRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAoaXNfb24gPyBQSU9fUFBERVIgOiBQSU9fUFBERFIpKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfcHVsbGRvd24pOwotCi0vKgotICogZGlzYWJsZSBTY2htaXR0IHRyaWdnZXIKLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9kaXNhYmxlX3NjaG1pdHRfdHJpZyh1bnNpZ25lZCBwaW4pCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8gfHwgIWhhc19waW8zKCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19TQ0hNSVRUKSB8IG1hc2ssIHBpbyArIFBJT19TQ0hNSVRUKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9kaXNhYmxlX3NjaG1pdHRfdHJpZyk7Ci0KLS8qCi0gKiBhc3N1bWluZyB0aGUgcGluIGlzIG11eGVkIGFzIGEgZ3BpbyBvdXRwdXQsIHNldCBpdHMgdmFsdWUuCi0gKi8KLWludCBhdDkxX3NldF9ncGlvX3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHZhbHVlID8gUElPX1NPRFIgOiBQSU9fQ09EUikpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9ncGlvX3ZhbHVlKTsKLQotCi0vKgotICogcmVhZCB0aGUgcGluJ3MgdmFsdWUgKHdvcmtzIGV2ZW4gaWYgaXQncyBub3QgbXV4ZWQgYXMgYSBncGlvKS4KLSAqLwotaW50IGF0OTFfZ2V0X2dwaW9fdmFsdWUodW5zaWduZWQgcGluKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQl1MzIJCXBkc3I7Ci0KLQlpZiAoIXBpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcGRzciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19QRFNSKTsKLQlyZXR1cm4gKHBkc3IgJiBtYXNrKSAhPSAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX2dldF9ncGlvX3ZhbHVlKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHUzMiB3YWtldXBzW01BWF9HUElPX0JBTktTXTsKLXN0YXRpYyB1MzIgYmFja3Vwc1tNQVhfR1BJT19CQU5LU107Ci0KLXN0YXRpYyBpbnQgZ3Bpb19pcnFfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXVuc2lnbmVkCW1hc2sgPSAxIDw8IGQtPmh3aXJxOwotCXVuc2lnbmVkCWJhbmsgPSBhdDkxX2dwaW8tPnBpb2NfaWR4OwotCi0JaWYgKHVubGlrZWx5KGJhbmsgPj0gTUFYX0dQSU9fQkFOS1MpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzdGF0ZSkKLQkJd2FrZXVwc1tiYW5rXSB8PSBtYXNrOwotCWVsc2UKLQkJd2FrZXVwc1tiYW5rXSAmPSB+bWFzazsKLQotCWlycV9zZXRfaXJxX3dha2UoYXQ5MV9ncGlvLT5waW9jX3ZpcnEsIHN0YXRlKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGF0OTFfZ3Bpb19zdXNwZW5kKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7Ci0JCXZvaWQgX19pb21lbQkqcGlvID0gZ3Bpb19jaGlwW2ldLnJlZ2Jhc2U7Ci0KLQkJYmFja3Vwc1tpXSA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19JTVIpOwotCQlfX3Jhd193cml0ZWwoYmFja3Vwc1tpXSwgcGlvICsgUElPX0lEUik7Ci0JCV9fcmF3X3dyaXRlbCh3YWtldXBzW2ldLCBwaW8gKyBQSU9fSUVSKTsKLQotCQlpZiAoIXdha2V1cHNbaV0pIHsKLQkJCWNsa191bnByZXBhcmUoZ3Bpb19jaGlwW2ldLmNsb2NrKTsKLQkJCWNsa19kaXNhYmxlKGdwaW9fY2hpcFtpXS5jbG9jayk7Ci0JCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1BNX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiR1BJTy0lYyBtYXkgd2FrZSBmb3IgJTA4eFxuIiwgJ0EnK2ksIHdha2V1cHNbaV0pOwotI2VuZGlmCi0JCX0KLQl9Ci19Ci0KLXZvaWQgYXQ5MV9ncGlvX3Jlc3VtZSh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua3M7IGkrKykgewotCQl2b2lkIF9faW9tZW0JKnBpbyA9IGdwaW9fY2hpcFtpXS5yZWdiYXNlOwotCi0JCWlmICghd2FrZXVwc1tpXSkgewotCQkJaWYgKGNsa19wcmVwYXJlKGdwaW9fY2hpcFtpXS5jbG9jaykgPT0gMCkKLQkJCQljbGtfZW5hYmxlKGdwaW9fY2hpcFtpXS5jbG9jayk7Ci0JCX0KLQotCQlfX3Jhd193cml0ZWwod2FrZXVwc1tpXSwgcGlvICsgUElPX0lEUik7Ci0JCV9fcmF3X3dyaXRlbChiYWNrdXBzW2ldLCBwaW8gKyBQSU9fSUVSKTsKLQl9Ci19Ci0KLSNlbHNlCi0jZGVmaW5lIGdwaW9faXJxX3NldF93YWtlCU5VTEwKLSNlbmRpZgotCi0KLS8qIFNldmVyYWwgQUlDIGNvbnRyb2xsZXIgaXJxcyBhcmUgZGlzcGF0Y2hlZCB0aHJvdWdoIHRoaXMgR1BJTyBoYW5kbGVyLgotICogVG8gdXNlIGFueSBBVDkxX1BJTl8qIGFzIGFuIGV4dGVybmFsbHkgdHJpZ2dlcmVkIElSUSwgZmlyc3QgY2FsbAotICogYXQ5MV9zZXRfZ3Bpb19pbnB1dCgpIHRoZW4gbWF5YmUgZW5hYmxlIGl0cyBnbGl0Y2ggZmlsdGVyLgotICogVGhlbiBqdXN0IHJlcXVlc3RfaXJxKCkgd2l0aCB0aGUgcGluIElEOyBpdCB3b3JrcyBsaWtlIGFueSBBUk0gSVJRCi0gKiBoYW5kbGVyLgotICogRmlyc3QgaW1wbGVtZW50YXRpb24gYWx3YXlzIHRyaWdnZXJzIG9uIHJpc2luZyBhbmQgZmFsbGluZyBlZGdlcwotICogd2hlcmVhcyB0aGUgbmV3ZXIgUElPMyBjYW4gYmUgYWRkaXRpb25hbGx5IGNvbmZpZ3VyZWQgdG8gdHJpZ2dlciBvbgotICogbGV2ZWwsIGVkZ2Ugd2l0aCBhbnkgcG9sYXJpdHkuCi0gKgotICogQWx0ZXJuYXRpdmVseSwgY2VydGFpbiBwaW5zIG1heSBiZSB1c2VkIGRpcmVjdGx5IGFzIElSUTAuLklSUTYgYWZ0ZXIKLSAqIGNvbmZpZ3VyaW5nIHRoZW0gd2l0aCBhdDkxX3NldF9hX3BlcmlwaCgpIG9yIGF0OTFfc2V0X2JfcGVyaXBoKCkuCi0gKiBJUlEwLi5JUlE2IHNob3VsZCBiZSBjb25maWd1cmFibGUsIGUuZy4gbGV2ZWwgdnMgZWRnZSB0cmlnZ2VyaW5nLgotICovCi0KLXN0YXRpYyB2b2lkIGdwaW9faXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQJbWFzayA9IDEgPDwgZC0+aHdpcnE7Ci0KLQlpZiAocGlvKQotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lEUik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdwaW9faXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZAltYXNrID0gMSA8PCBkLT5od2lycTsKLQotCWlmIChwaW8pCi0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSUVSKTsKLX0KLQotc3RhdGljIGludCBncGlvX2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdHlwZSkKLXsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX05PTkU6Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotLyogQWx0ZXJuYXRlIGlycSB0eXBlIGZvciBQSU8zIHN1cHBvcnQgKi8KLXN0YXRpYyBpbnQgYWx0X2dwaW9faXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCB0eXBlKQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQJbWFzayA9IDEgPDwgZC0+aHdpcnE7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0VTUik7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUkVITFNSKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fRVNSKTsKLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19GRUxMU1IpOwotCQlicmVhazsKLQljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19MU1IpOwotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0ZFTExTUik7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19MU1IpOwotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1JFSExTUik7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgotCQkvKgotCQkgKiBkaXNhYmxlIGFkZGl0aW9uYWwgaW50ZXJydXB0IG1vZGVzOgotCQkgKiBmYWxsIGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvcgotCQkgKi8KLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19BSU1EUik7Ci0JCXJldHVybiAwOwotCWNhc2UgSVJRX1RZUEVfTk9ORToKLQlkZWZhdWx0OgotCQlwcl93YXJuKCJBVDkxOiBObyB0eXBlIGZvciBpcnEgJWRcbiIsIGdwaW9fdG9faXJxKGQtPmlycSkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBlbmFibGUgYWRkaXRpb25hbCBpbnRlcnJ1cHQgbW9kZXMgKi8KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0FJTUVSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGdwaW9faXJxY2hpcCA9IHsKLQkubmFtZQkJPSAiR1BJTyIsCi0JLmlycV9kaXNhYmxlCT0gZ3Bpb19pcnFfbWFzaywKLQkuaXJxX21hc2sJPSBncGlvX2lycV9tYXNrLAotCS5pcnFfdW5tYXNrCT0gZ3Bpb19pcnFfdW5tYXNrLAotCS8qIC5pcnFfc2V0X3R5cGUgaXMgc2V0IGR5bmFtaWNhbGx5ICovCi0JLmlycV9zZXRfd2FrZQk9IGdwaW9faXJxX3NldF93YWtlLAotfTsKLQotc3RhdGljIHZvaWQgZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKLQlzdHJ1Y3QgaXJxX2RhdGEgKmlkYXRhID0gaXJxX2Rlc2NfZ2V0X2lycV9kYXRhKGRlc2MpOwotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoaWRhdGEpOwotCXZvaWQgX19pb21lbQkqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOwotCXVuc2lnbmVkIGxvbmcJaXNyOwotCWludAkJbjsKLQotCWNoYWluZWRfaXJxX2VudGVyKGNoaXAsIGRlc2MpOwotCWZvciAoOzspIHsKLQkJLyogUmVhZGluZyBJU1IgYWNrcyBwZW5kaW5nIChlZGdlIHRyaWdnZXJlZCkgR1BJTyBpbnRlcnJ1cHRzLgotCQkgKiBXaGVuIHRoZXJlIG5vbmUgYXJlIHBlbmRpbmcsIHdlJ3JlIGZpbmlzaGVkIHVubGVzcyB3ZSBuZWVkCi0JCSAqIHRvIHByb2Nlc3MgbXVsdGlwbGUgYmFua3MgKGxpa2UgSURfUElPQ0RFIG9uIHNhbTkyNjMpLgotCQkgKi8KLQkJaXNyID0gX19yYXdfcmVhZGwocGlvICsgUElPX0lTUikgJiBfX3Jhd19yZWFkbChwaW8gKyBQSU9fSU1SKTsKLQkJaWYgKCFpc3IpIHsKLQkJCWlmICghYXQ5MV9ncGlvLT5uZXh0KQotCQkJCWJyZWFrOwotCQkJYXQ5MV9ncGlvID0gYXQ5MV9ncGlvLT5uZXh0OwotCQkJcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOwotCQkJY29udGludWU7Ci0JCX0KLQotCQluID0gZmluZF9maXJzdF9iaXQoJmlzciwgQklUU19QRVJfTE9ORyk7Ci0JCXdoaWxlIChuIDwgQklUU19QRVJfTE9ORykgewotCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYXQ5MV9ncGlvLT5kb21haW4sIG4pKTsKLQkJCW4gPSBmaW5kX25leHRfYml0KCZpc3IsIEJJVFNfUEVSX0xPTkcsIG4gKyAxKTsKLQkJfQotCX0KLQljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwotCS8qIG5vdyBpdCBtYXkgcmUtdHJpZ2dlciAqLwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmZGVmIENPTkZJR19ERUJVR19GUwotCi1zdGF0aWMgdm9pZCBncGlvX3ByaW50ZihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgX19pb21lbSAqcGlvLCB1bnNpZ25lZCBtYXNrKQotewotCWNoYXIJKnRyaWdnZXIgPSBOVUxMOwotCWNoYXIJKnBvbGFyaXR5ID0gTlVMTDsKLQotCWlmIChfX3Jhd19yZWFkbChwaW8gKyBQSU9fSU1SKSAmIG1hc2spIHsKLQkJaWYgKCFoYXNfcGlvMygpIHx8ICEoX19yYXdfcmVhZGwocGlvICsgUElPX0FJTU1SKSAmIG1hc2sgKSkgewotCQkJdHJpZ2dlciA9ICJlZGdlIjsKLQkJCXBvbGFyaXR5ID0gImJvdGgiOwotCQl9IGVsc2UgewotCQkJaWYgKF9fcmF3X3JlYWRsKHBpbyArIFBJT19FTFNSKSAmIG1hc2spIHsKLQkJCQl0cmlnZ2VyID0gImxldmVsIjsKLQkJCQlwb2xhcml0eSA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19GUkxIU1IpICYgbWFzayA/Ci0JCQkJCSJoaWdoIiA6ICJsb3ciOwotCQkJfSBlbHNlIHsKLQkJCQl0cmlnZ2VyID0gImVkZ2UiOwotCQkJCXBvbGFyaXR5ID0gX19yYXdfcmVhZGwocGlvICsgUElPX0ZSTEhTUikgJiBtYXNrID8KLQkJCQkJCSJyaXNpbmciIDogImZhbGxpbmciOwotCQkJfQotCQl9Ci0JCXNlcV9wcmludGYocywgIklSUTolcy0lc1x0IiwgdHJpZ2dlciwgcG9sYXJpdHkpOwotCX0gZWxzZSB7Ci0JCXNlcV9wcmludGYocywgIkdQSU86JXNcdFx0IiwKLQkJCQlfX3Jhd19yZWFkbChwaW8gKyBQSU9fUERTUikgJiBtYXNrID8gIjEiIDogIjAiKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYXQ5MV9ncGlvX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCi17Ci0JaW50IGJhbmssIGo7Ci0KLQkvKiBwcmludCBoZWFkaW5nICovCi0Jc2VxX3ByaW50ZihzLCAiUGluXHQiKTsKLQlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgZ3Bpb19iYW5rczsgYmFuaysrKSB7Ci0JCXNlcV9wcmludGYocywgIlBJTyVjXHRcdCIsICdBJyArIGJhbmspOwotCX07Ci0Jc2VxX3ByaW50ZihzLCAiXG5cbiIpOwotCi0JLyogcHJpbnQgcGluIHN0YXR1cyAqLwotCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCXNlcV9wcmludGYocywgIiVpOlx0Iiwgaik7Ci0KLQkJZm9yIChiYW5rID0gMDsgYmFuayA8IGdwaW9fYmFua3M7IGJhbmsrKykgewotCQkJdW5zaWduZWQJcGluICA9ICgzMiAqIGJhbmspICsgajsKLQkJCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQkJCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JCQlpZiAoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKQotCQkJCWdwaW9fcHJpbnRmKHMsIHBpbywgbWFzayk7Ci0JCQllbHNlCi0JCQkJc2VxX3ByaW50ZihzLCAiJWNcdFx0IiwKLQkJCQkJCXBlcmlwaGVyYWxfZnVuY3Rpb24ocGlvLCBtYXNrKSk7Ci0JCX0KLQotCQlzZXFfcHJpbnRmKHMsICJcbiIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhdDkxX2dwaW9fc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF0OTFfZ3Bpb19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IGF0OTFfZ3Bpb19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2dwaW9fZGVidWdmc19pbml0KHZvaWQpCi17Ci0JLyogL3N5cy9rZXJuZWwvZGVidWcvYXQ5MV9ncGlvICovCi0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF0OTFfZ3BpbyIsIFNfSUZSRUcgfCBTX0lSVUdPLCBOVUxMLCBOVUxMLCAmYXQ5MV9ncGlvX29wZXJhdGlvbnMpOwotCXJldHVybiAwOwotfQotcG9zdGNvcmVfaW5pdGNhbGwoYXQ5MV9ncGlvX2RlYnVnZnNfaW5pdCk7Ci0KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqIFRoaXMgbG9jayBjbGFzcyB0ZWxscyBsb2NrZGVwIHRoYXQgR1BJTyBpcnFzIGFyZSBpbiBhIGRpZmZlcmVudAotICogY2F0ZWdvcnkgdGhhbiB0aGVpciBwYXJlbnRzLCBzbyBpdCB3b24ndCByZXBvcnQgZmFsc2UgcmVjdXJzaW9uLgotICovCi1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGdwaW9fbG9ja19jbGFzczsKLQotLyoKLSAqIGlycWRvbWFpbiBpbml0aWFsaXphdGlvbjogcGlsZSB1cCBpcnFkb21haW5zIG9uIHRvcCBvZiBBSUMgcmFuZ2UKLSAqLwotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfZ3Bpb19pcnFkb21haW4oc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8pCi17Ci0JaW50IGlycV9iYXNlOwotCi0JaXJxX2Jhc2UgPSBpcnFfYWxsb2NfZGVzY3MoLTEsIDAsIGF0OTFfZ3Bpby0+Y2hpcC5uZ3BpbywgMCk7Ci0JaWYgKGlycV9iYXNlIDwgMCkKLQkJcGFuaWMoImF0OTFfZ3Bpby4lZDogZXJyb3IgJWQ6IGNvdWxkbid0IGFsbG9jYXRlIElSUSBudW1iZXJzLlxuIiwKLQkJCWF0OTFfZ3Bpby0+cGlvY19pZHgsIGlycV9iYXNlKTsKLQlhdDkxX2dwaW8tPmRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xlZ2FjeShOVUxMLCBhdDkxX2dwaW8tPmNoaXAubmdwaW8sCi0JCQkJCQkgIGlycV9iYXNlLCAwLAotCQkJCQkJICAmaXJxX2RvbWFpbl9zaW1wbGVfb3BzLCBOVUxMKTsKLQlpZiAoIWF0OTFfZ3Bpby0+ZG9tYWluKQotCQlwYW5pYygiYXQ5MV9ncGlvLiVkOiBjb3VsZG4ndCBhbGxvY2F0ZSBpcnEgZG9tYWluLlxuIiwKLQkJCWF0OTFfZ3Bpby0+cGlvY19pZHgpOwotfQotCi0vKgotICogQ2FsbGVkIGZyb20gdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBpbml0IHRvIGVuYWJsZSBHUElPIGludGVycnVwdCBzdXBwb3J0LgotICovCi12b2lkIF9faW5pdCBhdDkxX2dwaW9faXJxX3NldHVwKHZvaWQpCi17Ci0JdW5zaWduZWQJCXBpb2M7Ci0JaW50CQkJZ3Bpb19pcnFuYnIgPSAwOwotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcAkqdGhpcywgKnByZXY7Ci0KLQkvKiBTZXR1cCBwcm9wZXIgLmlycV9zZXRfdHlwZSBmdW5jdGlvbiAqLwotCWlmIChoYXNfcGlvMygpKQotCQlncGlvX2lycWNoaXAuaXJxX3NldF90eXBlID0gYWx0X2dwaW9faXJxX3R5cGU7Ci0JZWxzZQotCQlncGlvX2lycWNoaXAuaXJxX3NldF90eXBlID0gZ3Bpb19pcnFfdHlwZTsKLQotCWZvciAocGlvYyA9IDAsIHRoaXMgPSBncGlvX2NoaXAsIHByZXYgPSBOVUxMOwotCQkJcGlvYysrIDwgZ3Bpb19iYW5rczsKLQkJCXByZXYgPSB0aGlzLCB0aGlzKyspIHsKLQkJaW50IG9mZnNldDsKLQotCQlfX3Jhd193cml0ZWwofjAsIHRoaXMtPnJlZ2Jhc2UgKyBQSU9fSURSKTsKLQotCQkvKiBzZXR1cCBpcnEgZG9tYWluIGZvciB0aGlzIEdQSU8gY29udHJvbGxlciAqLwotCQlhdDkxX2dwaW9faXJxZG9tYWluKHRoaXMpOwotCi0JCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgdGhpcy0+Y2hpcC5uZ3Bpbzsgb2Zmc2V0KyspIHsKLQkJCXVuc2lnbmVkIGludCB2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyh0aGlzLT5kb21haW4sIG9mZnNldCk7Ci0JCQlpcnFfc2V0X2xvY2tkZXBfY2xhc3ModmlycSwgJmdwaW9fbG9ja19jbGFzcyk7Ci0KLQkJCS8qCi0JCQkgKiBDYW4gdXNlIHRoZSAic2ltcGxlIiBhbmQgbm90ICJlZGdlIiBoYW5kbGVyIHNpbmNlIGl0J3MKLQkJCSAqIHNob3J0ZXIsIGFuZCB0aGUgQUlDIGhhbmRsZXMgaW50ZXJydXB0cyBzYW5lbHkuCi0JCQkgKi8KLQkJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmZ3Bpb19pcnFjaGlwLAotCQkJCQkJIGhhbmRsZV9zaW1wbGVfaXJxKTsKLQkJCXNldF9pcnFfZmxhZ3ModmlycSwgSVJRRl9WQUxJRCk7Ci0JCQlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCB0aGlzKTsKLQotCQkJZ3Bpb19pcnFuYnIrKzsKLQkJfQotCi0JCS8qIFRoZSB0b3BsZXZlbCBoYW5kbGVyIGhhbmRsZXMgb25lIGJhbmsgb2YgR1BJT3MsIGV4Y2VwdAotCQkgKiBvbiBzb21lIFNvQyBpdCBjYW4gaGFuZGxlcyB1cCB0byB0aHJlZS4uLgotCQkgKiBXZSBvbmx5IHNldCB1cCB0aGUgaGFuZGxlciBmb3IgdGhlIGZpcnN0IG9mIHRoZSBsaXN0LgotCQkgKi8KLQkJaWYgKHByZXYgJiYgcHJldi0+bmV4dCA9PSB0aGlzKQotCQkJY29udGludWU7Ci0KLQkJdGhpcy0+cGlvY192aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKE5VTEwsIHRoaXMtPnBpb2NfaHdpcnEpOwotCQlpcnFfc2V0X2NoaXBfZGF0YSh0aGlzLT5waW9jX3ZpcnEsIHRoaXMpOwotCQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcih0aGlzLT5waW9jX3ZpcnEsIGdwaW9faXJxX2hhbmRsZXIpOwotCX0KLQlwcl9pbmZvKCJBVDkxOiAlZCBncGlvIGlycXMgaW4gJWQgYmFua3NcbiIsIGdwaW9faXJxbmJyLCBncGlvX2JhbmtzKTsKLX0KLQotLyogZ3Bpb2xpYiBzdXBwb3J0ICovCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOwotCXZvaWQgX19pb21lbSAqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOwotCXVuc2lnbmVkIG1hc2sgPSAxIDw8IG9mZnNldDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0JdTMyIG9zcjsKLQotCW9zciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19PU1IpOwotCXJldHVybiAhKG9zciAmIG1hc2spOwotfQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCQkJdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gdG9fYXQ5MV9ncGlvX2NoaXAoY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0OwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRFIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCi0JCQkJCSB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHZhbCA/IFBJT19TT0RSIDogUElPX0NPRFIpKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX09FUik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0JdTMyIHBkc3I7Ci0KLQlwZHNyID0gX19yYXdfcmVhZGwocGlvICsgUElPX1BEU1IpOwotCXJldHVybiAocGRzciAmIG1hc2spICE9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gdG9fYXQ5MV9ncGlvX2NoaXAoY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0OwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArICh2YWwgPyBQSU9fU09EUiA6IFBJT19DT0RSKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9kYmdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bmdwaW87IGkrKykgewotCQl1bnNpZ25lZCBwaW4gPSBjaGlwLT5iYXNlICsgaTsKLQkJdm9pZCBfX2lvbWVtICpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCQl1bnNpZ25lZCBtYXNrID0gcGluX3RvX21hc2socGluKTsKLQkJY29uc3QgY2hhciAqZ3Bpb19sYWJlbDsKLQotCQlncGlvX2xhYmVsID0gZ3Bpb2NoaXBfaXNfcmVxdWVzdGVkKGNoaXAsIGkpOwotCQlpZiAoZ3Bpb19sYWJlbCkgewotCQkJc2VxX3ByaW50ZihzLCAiWyVzXSBHUElPJXMlZDogIiwKLQkJCQkgICBncGlvX2xhYmVsLCBjaGlwLT5sYWJlbCwgaSk7Ci0JCQlpZiAoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKQotCQkJCXNlcV9wcmludGYocywgIltncGlvXSAlc1xuIiwKLQkJCQkJICAgYXQ5MV9nZXRfZ3Bpb192YWx1ZShwaW4pID8KLQkJCQkJICAgInNldCIgOiAiY2xlYXIiKTsKLQkJCWVsc2UKLQkJCQlzZXFfcHJpbnRmKHMsICJbcGVyaXBoICVjXVxuIiwKLQkJCQkJICAgcGVyaXBoZXJhbF9mdW5jdGlvbihwaW8sIG1hc2spKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBhdDkxX2dwaW9saWJfdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOwotCWludCB2aXJxOwotCi0JaWYgKG9mZnNldCA8IGNoaXAtPm5ncGlvKQotCQl2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKGF0OTFfZ3Bpby0+ZG9tYWluLCBvZmZzZXQpOwotCWVsc2UKLQkJdmlycSA9IC1FTlhJTzsKLQotCWRldl9kYmcoY2hpcC0+ZGV2LCAiJXM6IHJlcXVlc3QgSVJRIGZvciBHUElPICVkLCByZXR1cm4gJWRcbiIsCi0JCQkJY2hpcC0+bGFiZWwsIG9mZnNldCArIGNoaXAtPmJhc2UsIHZpcnEpOwotCXJldHVybiB2aXJxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2dwaW9fc2V0dXBfY2xrKGludCBpZHgpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSAmZ3Bpb19jaGlwW2lkeF07Ci0KLQkvKiByZXRyZWl2ZSBQSU8gY29udHJvbGxlcidzIGNsb2NrICovCi0JYXQ5MV9ncGlvLT5jbG9jayA9IGNsa19nZXRfc3lzKE5VTEwsIGF0OTFfZ3Bpby0+Y2hpcC5sYWJlbCk7Ci0JaWYgKElTX0VSUihhdDkxX2dwaW8tPmNsb2NrKSkgewotCQlwcl9lcnIoImF0OTFfZ3Bpby4lZCwgZmFpbGVkIHRvIGdldCBjbG9jaywgaWdub3JpbmcuXG4iLCBpZHgpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoY2xrX3ByZXBhcmUoYXQ5MV9ncGlvLT5jbG9jaykpCi0JCWdvdG8gY2xrX3ByZXBfZXJyOwotCi0JLyogZW5hYmxlIFBJTyBjb250cm9sbGVyJ3MgY2xvY2sgKi8KLQlpZiAoY2xrX2VuYWJsZShhdDkxX2dwaW8tPmNsb2NrKSkgewotCQlwcl9lcnIoImF0OTFfZ3Bpby4lZCwgZmFpbGVkIHRvIGVuYWJsZSBjbG9jaywgaWdub3JpbmcuXG4iLCBpZHgpOwotCQlnb3RvIGNsa19lcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWNsa19lcnI6Ci0JY2xrX3VucHJlcGFyZShhdDkxX2dwaW8tPmNsb2NrKTsKLWNsa19wcmVwX2VycjoKLQljbGtfcHV0KGF0OTFfZ3Bpby0+Y2xvY2spOwotZXJyOgotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9ncGlvX2luaXRfb25lKGludCBpZHgsIHUzMiByZWdiYXNlLCBpbnQgcGlvY19od2lycSkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9ICZncGlvX2NoaXBbaWR4XTsKLQotCWF0OTFfZ3Bpby0+Y2hpcC5iYXNlID0gaWR4ICogTUFYX05CX0dQSU9fUEVSX0JBTks7Ci0JYXQ5MV9ncGlvLT5waW9jX2h3aXJxID0gcGlvY19od2lycTsKLQlhdDkxX2dwaW8tPnBpb2NfaWR4ID0gaWR4OwotCi0JYXQ5MV9ncGlvLT5yZWdiYXNlID0gaW9yZW1hcChyZWdiYXNlLCA1MTIpOwotCWlmICghYXQ5MV9ncGlvLT5yZWdiYXNlKSB7Ci0JCXByX2VycigiYXQ5MV9ncGlvLiVkLCBmYWlsZWQgdG8gbWFwIHJlZ2lzdGVycywgaWdub3JpbmcuXG4iLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGF0OTFfZ3Bpb19zZXR1cF9jbGsoaWR4KSkKLQkJZ290byBpb3JlbWFwX2VycjsKLQotCWdwaW9fYmFua3MgPSBtYXgoZ3Bpb19iYW5rcywgaWR4ICsgMSk7Ci0JcmV0dXJuOwotCi1pb3JlbWFwX2VycjoKLQlpb3VubWFwKGF0OTFfZ3Bpby0+cmVnYmFzZSk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgZnJvbSB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGluaXQgdG8gZW5hYmxlIEdQSU8gcGluIHN1cHBvcnQuCi0gKi8KLXZvaWQgX19pbml0IGF0OTFfZ3Bpb19pbml0KHN0cnVjdCBhdDkxX2dwaW9fYmFuayAqZGF0YSwgaW50IG5yX2JhbmtzKQotewotCXVuc2lnbmVkIGk7Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8sICpsYXN0ID0gTlVMTDsKLQotCUJVR19PTihucl9iYW5rcyA+IE1BWF9HUElPX0JBTktTKTsKLQotCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfYmFua3M7IGkrKykKLQkJYXQ5MV9ncGlvX2luaXRfb25lKGksIGRhdGFbaV0ucmVnYmFzZSwgZGF0YVtpXS5pZCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7Ci0JCWF0OTFfZ3BpbyA9ICZncGlvX2NoaXBbaV07Ci0KLQkJLyoKLQkJICogR1BJTyBjb250cm9sbGVyIGFyZSBncm91cGVkIG9uIHNvbWUgU29DOgotCQkgKiBQSU9DLCBQSU9EIGFuZCBQSU9FIGNhbiBzaGFyZSB0aGUgc2FtZSBJUlEgbGluZQotCQkgKi8KLQkJaWYgKGxhc3QgJiYgbGFzdC0+cGlvY19od2lycSA9PSBhdDkxX2dwaW8tPnBpb2NfaHdpcnEpCi0JCQlsYXN0LT5uZXh0ID0gYXQ5MV9ncGlvOwotCQlsYXN0ID0gYXQ5MV9ncGlvOwotCi0JCWdwaW9jaGlwX2FkZCgmYXQ5MV9ncGlvLT5jaGlwKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVkNDY1YS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgSFAgTGFicwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9BVDkxUk05MjAwX0dQSU9fSAotI2RlZmluZSBfX0FTTV9BUkNIX0FUOTFSTTkyMDBfR1BJT19ICi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNkZWZpbmUgTUFYX0dQSU9fQkFOS1MJCTUKLSNkZWZpbmUgTlJfQlVJTFRJTl9HUElPCQkoTUFYX0dQSU9fQkFOS1MgKiAzMikKLQotLyogdGhlc2UgcGluIG51bWJlcnMgZG91YmxlIGFzIElSUSBudW1iZXJzLCBsaWtlIEFUOTF4eHhfSURfKiB2YWx1ZXMgKi8KLQotI2RlZmluZQlBVDkxX1BJTl9QQTAJKDB4MDAgKyAwKQotI2RlZmluZQlBVDkxX1BJTl9QQTEJKDB4MDAgKyAxKQotI2RlZmluZQlBVDkxX1BJTl9QQTIJKDB4MDAgKyAyKQotI2RlZmluZQlBVDkxX1BJTl9QQTMJKDB4MDAgKyAzKQotI2RlZmluZQlBVDkxX1BJTl9QQTQJKDB4MDAgKyA0KQotI2RlZmluZQlBVDkxX1BJTl9QQTUJKDB4MDAgKyA1KQotI2RlZmluZQlBVDkxX1BJTl9QQTYJKDB4MDAgKyA2KQotI2RlZmluZQlBVDkxX1BJTl9QQTcJKDB4MDAgKyA3KQotI2RlZmluZQlBVDkxX1BJTl9QQTgJKDB4MDAgKyA4KQotI2RlZmluZQlBVDkxX1BJTl9QQTkJKDB4MDAgKyA5KQotI2RlZmluZQlBVDkxX1BJTl9QQTEwCSgweDAwICsgMTApCi0jZGVmaW5lCUFUOTFfUElOX1BBMTEJKDB4MDAgKyAxMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEExMgkoMHgwMCArIDEyKQotI2RlZmluZQlBVDkxX1BJTl9QQTEzCSgweDAwICsgMTMpCi0jZGVmaW5lCUFUOTFfUElOX1BBMTQJKDB4MDAgKyAxNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEExNQkoMHgwMCArIDE1KQotI2RlZmluZQlBVDkxX1BJTl9QQTE2CSgweDAwICsgMTYpCi0jZGVmaW5lCUFUOTFfUElOX1BBMTcJKDB4MDAgKyAxNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEExOAkoMHgwMCArIDE4KQotI2RlZmluZQlBVDkxX1BJTl9QQTE5CSgweDAwICsgMTkpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjAJKDB4MDAgKyAyMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEEyMQkoMHgwMCArIDIxKQotI2RlZmluZQlBVDkxX1BJTl9QQTIyCSgweDAwICsgMjIpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjMJKDB4MDAgKyAyMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEEyNAkoMHgwMCArIDI0KQotI2RlZmluZQlBVDkxX1BJTl9QQTI1CSgweDAwICsgMjUpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjYJKDB4MDAgKyAyNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEEyNwkoMHgwMCArIDI3KQotI2RlZmluZQlBVDkxX1BJTl9QQTI4CSgweDAwICsgMjgpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjkJKDB4MDAgKyAyOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEEzMAkoMHgwMCArIDMwKQotI2RlZmluZQlBVDkxX1BJTl9QQTMxCSgweDAwICsgMzEpCi0KLSNkZWZpbmUJQVQ5MV9QSU5fUEIwCSgweDIwICsgMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxCSgweDIwICsgMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyCSgweDIwICsgMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEIzCSgweDIwICsgMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEI0CSgweDIwICsgNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEI1CSgweDIwICsgNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEI2CSgweDIwICsgNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEI3CSgweDIwICsgNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEI4CSgweDIwICsgOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEI5CSgweDIwICsgOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxMAkoMHgyMCArIDEwKQotI2RlZmluZQlBVDkxX1BJTl9QQjExCSgweDIwICsgMTEpCi0jZGVmaW5lCUFUOTFfUElOX1BCMTIJKDB4MjAgKyAxMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxMwkoMHgyMCArIDEzKQotI2RlZmluZQlBVDkxX1BJTl9QQjE0CSgweDIwICsgMTQpCi0jZGVmaW5lCUFUOTFfUElOX1BCMTUJKDB4MjAgKyAxNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxNgkoMHgyMCArIDE2KQotI2RlZmluZQlBVDkxX1BJTl9QQjE3CSgweDIwICsgMTcpCi0jZGVmaW5lCUFUOTFfUElOX1BCMTgJKDB4MjAgKyAxOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxOQkoMHgyMCArIDE5KQotI2RlZmluZQlBVDkxX1BJTl9QQjIwCSgweDIwICsgMjApCi0jZGVmaW5lCUFUOTFfUElOX1BCMjEJKDB4MjAgKyAyMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyMgkoMHgyMCArIDIyKQotI2RlZmluZQlBVDkxX1BJTl9QQjIzCSgweDIwICsgMjMpCi0jZGVmaW5lCUFUOTFfUElOX1BCMjQJKDB4MjAgKyAyNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyNQkoMHgyMCArIDI1KQotI2RlZmluZQlBVDkxX1BJTl9QQjI2CSgweDIwICsgMjYpCi0jZGVmaW5lCUFUOTFfUElOX1BCMjcJKDB4MjAgKyAyNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyOAkoMHgyMCArIDI4KQotI2RlZmluZQlBVDkxX1BJTl9QQjI5CSgweDIwICsgMjkpCi0jZGVmaW5lCUFUOTFfUElOX1BCMzAJKDB4MjAgKyAzMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIzMQkoMHgyMCArIDMxKQotCi0jZGVmaW5lCUFUOTFfUElOX1BDMAkoMHg0MCArIDApCi0jZGVmaW5lCUFUOTFfUElOX1BDMQkoMHg0MCArIDEpCi0jZGVmaW5lCUFUOTFfUElOX1BDMgkoMHg0MCArIDIpCi0jZGVmaW5lCUFUOTFfUElOX1BDMwkoMHg0MCArIDMpCi0jZGVmaW5lCUFUOTFfUElOX1BDNAkoMHg0MCArIDQpCi0jZGVmaW5lCUFUOTFfUElOX1BDNQkoMHg0MCArIDUpCi0jZGVmaW5lCUFUOTFfUElOX1BDNgkoMHg0MCArIDYpCi0jZGVmaW5lCUFUOTFfUElOX1BDNwkoMHg0MCArIDcpCi0jZGVmaW5lCUFUOTFfUElOX1BDOAkoMHg0MCArIDgpCi0jZGVmaW5lCUFUOTFfUElOX1BDOQkoMHg0MCArIDkpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTAJKDB4NDAgKyAxMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMxMQkoMHg0MCArIDExKQotI2RlZmluZQlBVDkxX1BJTl9QQzEyCSgweDQwICsgMTIpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTMJKDB4NDAgKyAxMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEMxNAkoMHg0MCArIDE0KQotI2RlZmluZQlBVDkxX1BJTl9QQzE1CSgweDQwICsgMTUpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTYJKDB4NDAgKyAxNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEMxNwkoMHg0MCArIDE3KQotI2RlZmluZQlBVDkxX1BJTl9QQzE4CSgweDQwICsgMTgpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTkJKDB4NDAgKyAxOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyMAkoMHg0MCArIDIwKQotI2RlZmluZQlBVDkxX1BJTl9QQzIxCSgweDQwICsgMjEpCi0jZGVmaW5lCUFUOTFfUElOX1BDMjIJKDB4NDAgKyAyMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyMwkoMHg0MCArIDIzKQotI2RlZmluZQlBVDkxX1BJTl9QQzI0CSgweDQwICsgMjQpCi0jZGVmaW5lCUFUOTFfUElOX1BDMjUJKDB4NDAgKyAyNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyNgkoMHg0MCArIDI2KQotI2RlZmluZQlBVDkxX1BJTl9QQzI3CSgweDQwICsgMjcpCi0jZGVmaW5lCUFUOTFfUElOX1BDMjgJKDB4NDAgKyAyOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyOQkoMHg0MCArIDI5KQotI2RlZmluZQlBVDkxX1BJTl9QQzMwCSgweDQwICsgMzApCi0jZGVmaW5lCUFUOTFfUElOX1BDMzEJKDB4NDAgKyAzMSkKLQotI2RlZmluZQlBVDkxX1BJTl9QRDAJKDB4NjAgKyAwKQotI2RlZmluZQlBVDkxX1BJTl9QRDEJKDB4NjAgKyAxKQotI2RlZmluZQlBVDkxX1BJTl9QRDIJKDB4NjAgKyAyKQotI2RlZmluZQlBVDkxX1BJTl9QRDMJKDB4NjAgKyAzKQotI2RlZmluZQlBVDkxX1BJTl9QRDQJKDB4NjAgKyA0KQotI2RlZmluZQlBVDkxX1BJTl9QRDUJKDB4NjAgKyA1KQotI2RlZmluZQlBVDkxX1BJTl9QRDYJKDB4NjAgKyA2KQotI2RlZmluZQlBVDkxX1BJTl9QRDcJKDB4NjAgKyA3KQotI2RlZmluZQlBVDkxX1BJTl9QRDgJKDB4NjAgKyA4KQotI2RlZmluZQlBVDkxX1BJTl9QRDkJKDB4NjAgKyA5KQotI2RlZmluZQlBVDkxX1BJTl9QRDEwCSgweDYwICsgMTApCi0jZGVmaW5lCUFUOTFfUElOX1BEMTEJKDB4NjAgKyAxMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQxMgkoMHg2MCArIDEyKQotI2RlZmluZQlBVDkxX1BJTl9QRDEzCSgweDYwICsgMTMpCi0jZGVmaW5lCUFUOTFfUElOX1BEMTQJKDB4NjAgKyAxNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQxNQkoMHg2MCArIDE1KQotI2RlZmluZQlBVDkxX1BJTl9QRDE2CSgweDYwICsgMTYpCi0jZGVmaW5lCUFUOTFfUElOX1BEMTcJKDB4NjAgKyAxNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEQxOAkoMHg2MCArIDE4KQotI2RlZmluZQlBVDkxX1BJTl9QRDE5CSgweDYwICsgMTkpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjAJKDB4NjAgKyAyMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQyMQkoMHg2MCArIDIxKQotI2RlZmluZQlBVDkxX1BJTl9QRDIyCSgweDYwICsgMjIpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjMJKDB4NjAgKyAyMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEQyNAkoMHg2MCArIDI0KQotI2RlZmluZQlBVDkxX1BJTl9QRDI1CSgweDYwICsgMjUpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjYJKDB4NjAgKyAyNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEQyNwkoMHg2MCArIDI3KQotI2RlZmluZQlBVDkxX1BJTl9QRDI4CSgweDYwICsgMjgpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjkJKDB4NjAgKyAyOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQzMAkoMHg2MCArIDMwKQotI2RlZmluZQlBVDkxX1BJTl9QRDMxCSgweDYwICsgMzEpCi0KLSNkZWZpbmUJQVQ5MV9QSU5fUEUwCSgweDgwICsgMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxCSgweDgwICsgMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyCSgweDgwICsgMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEUzCSgweDgwICsgMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEU0CSgweDgwICsgNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEU1CSgweDgwICsgNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEU2CSgweDgwICsgNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEU3CSgweDgwICsgNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEU4CSgweDgwICsgOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEU5CSgweDgwICsgOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxMAkoMHg4MCArIDEwKQotI2RlZmluZQlBVDkxX1BJTl9QRTExCSgweDgwICsgMTEpCi0jZGVmaW5lCUFUOTFfUElOX1BFMTIJKDB4ODAgKyAxMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxMwkoMHg4MCArIDEzKQotI2RlZmluZQlBVDkxX1BJTl9QRTE0CSgweDgwICsgMTQpCi0jZGVmaW5lCUFUOTFfUElOX1BFMTUJKDB4ODAgKyAxNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxNgkoMHg4MCArIDE2KQotI2RlZmluZQlBVDkxX1BJTl9QRTE3CSgweDgwICsgMTcpCi0jZGVmaW5lCUFUOTFfUElOX1BFMTgJKDB4ODAgKyAxOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxOQkoMHg4MCArIDE5KQotI2RlZmluZQlBVDkxX1BJTl9QRTIwCSgweDgwICsgMjApCi0jZGVmaW5lCUFUOTFfUElOX1BFMjEJKDB4ODAgKyAyMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyMgkoMHg4MCArIDIyKQotI2RlZmluZQlBVDkxX1BJTl9QRTIzCSgweDgwICsgMjMpCi0jZGVmaW5lCUFUOTFfUElOX1BFMjQJKDB4ODAgKyAyNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyNQkoMHg4MCArIDI1KQotI2RlZmluZQlBVDkxX1BJTl9QRTI2CSgweDgwICsgMjYpCi0jZGVmaW5lCUFUOTFfUElOX1BFMjcJKDB4ODAgKyAyNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyOAkoMHg4MCArIDI4KQotI2RlZmluZQlBVDkxX1BJTl9QRTI5CSgweDgwICsgMjkpCi0jZGVmaW5lCUFUOTFfUElOX1BFMzAJKDB4ODAgKyAzMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUzMQkoMHg4MCArIDMxKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotLyogc2V0dXAgc2V0dXAgcm91dGluZXMsIGNhbGxlZCBmcm9tIGJvYXJkIGluaXQgb3IgZHJpdmVyIHByb2JlKCkgKi8KLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9HUElPX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9BX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9CX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9DX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9EX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9ncGlvX2lucHV0KHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOwotZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2dwaW9fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9kZWdsaXRjaCh1bnNpZ25lZCBwaW4sIGludCBpc19vbik7Ci1leHRlcm4gaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZGVib3VuY2UodW5zaWduZWQgcGluLCBpbnQgaXNfb24sIGludCBkaXYpOwotZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X211bHRpX2RyaXZlKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9wdWxsZG93bih1bnNpZ25lZCBwaW4sIGludCBpc19vbik7Ci1leHRlcm4gaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9kaXNhYmxlX3NjaG1pdHRfdHJpZyh1bnNpZ25lZCBwaW4pOwotCi0vKiBjYWxsYWJsZSBhdCBhbnkgdGltZSAqLwotZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKTsKLWV4dGVybiBpbnQgYXQ5MV9nZXRfZ3Bpb192YWx1ZSh1bnNpZ25lZCBwaW4pOwotCi0vKiBjYWxsYWJsZSBvbmx5IGZyb20gY29yZSBwb3dlci1tYW5hZ2VtZW50IGNvZGUgKi8KLWV4dGVybiB2b2lkIGF0OTFfZ3Bpb19zdXNwZW5kKHZvaWQpOwotZXh0ZXJuIHZvaWQgYXQ5MV9ncGlvX3Jlc3VtZSh2b2lkKTsKLQotI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nc2lhMThzLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3NpYTE4cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDdjMTk0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nc2lhMThzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKiBCdXR0b25zICovCi0jZGVmaW5lIEdQSU9fVFJJR19ORVRfSU4JCUFUOTFfUElOX1BCMjEKLSNkZWZpbmUgR1BJT19DQVJEX1VOTU9VTlRfMAkJQVQ5MV9QSU5fUEIxMwotI2RlZmluZSBHUElPX0NBUkRfVU5NT1VOVF8xCQlBVDkxX1BJTl9QQjEyCi0jZGVmaW5lIEdQSU9fS0VZX1BPV0VSCQkJQVQ5MV9QSU5fUEEyNQotCi0vKiBQQ0Y4NTc0IDB4MjAgR1BJTyAtIFUxIG9uIHRoZSBHU19JQTE4LUNCX1YzIGJvYXJkICovCi0jZGVmaW5lIEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMAlOUl9CVUlMVElOX0dQSU8KLSNkZWZpbmUgUENGX0dQSU9fSERDX1BPV0VSCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UwICsgMCkKLSNkZWZpbmUgUENGX0dQSU9fV0lGSV9TRVRVUAkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDEpCi0jZGVmaW5lIFBDRl9HUElPX1dJRklfRU5BQkxFCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UwICsgMikKLSNkZWZpbmUgUENGX0dQSU9fV0lGSV9SRVNFVAkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDMpCi0jZGVmaW5lIFBDRl9HUElPX0VUSF9ERVRFQ1QJCTQgLyogdGhpcyBpcyBhIEdQSSAqLwotI2RlZmluZSBQQ0ZfR1BJT19HUFNfU0VUVVAJCShHU19JQTE4X1NfUENGX0dQSU9fQkFTRTAgKyA1KQotI2RlZmluZSBQQ0ZfR1BJT19HUFNfU1RBTkRCWQkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDYpCi0jZGVmaW5lIFBDRl9HUElPX0dQU19QT1dFUgkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDcpCi0KLS8qIFBDRjg1NzQgMHgyMiBHUElPIC0gVTEgb24gdGhlIEdTXzJHX09QVDEtQV9WMCBib2FyZCAoQWxhcm0pICovCi0jZGVmaW5lIEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UwICsgOCkKLSNkZWZpbmUgUENGX0dQSU9fQUxBUk0xCQkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMSArIDApCi0jZGVmaW5lIFBDRl9HUElPX0FMQVJNMgkJCShHU19JQTE4X1NfUENGX0dQSU9fQkFTRTEgKyAxKQotI2RlZmluZSBQQ0ZfR1BJT19BTEFSTTMJCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UxICsgMikKLSNkZWZpbmUgUENGX0dQSU9fQUxBUk00CQkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMSArIDMpCi0vKiBiaXRzIDQsIDUsIDYgbm90IHVzZWQgKi8KLSNkZWZpbmUgUENGX0dQSU9fQUxBUk1fVl9SRUxBWV9PTgkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UxICsgNykKLQotLyogUENGODU3NCAweDI0IEdQSU8gVTEgb24gdGhlIEdTXzJHLU9QVDIzLUFfVjAgYm9hcmQgKE1vZGVtKSAqLwotI2RlZmluZSBHU19JQTE4X1NfUENGX0dQSU9fQkFTRTIJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMSArIDgpCi0jZGVmaW5lIFBDRl9HUElPX01PREVNX1BPV0VSCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UyICsgMCkKLSNkZWZpbmUgUENGX0dQSU9fTU9ERU1fUkVTRVQJCShHU19JQTE4X1NfUENGX0dQSU9fQkFTRTIgKyAzKQotLyogYml0cyAxLCAyLCA0LCA1IG5vdCB1c2VkICovCi0jZGVmaW5lIFBDRl9HUElPX1RSWF9SRVNFVAkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMiArIDYpCi0vKiBiaXQgNyBub3QgdXNlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX2RiZ3UuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9kYmd1LmgKaW5kZXggM2I1OTQ4NS4uNDI5MjVlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX2RiZ3UuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfZGJndS5oCkBAIC0xNiw3ICsxNiw2IEBACiAjaWZuZGVmIEFUOTFfREJHVV9ICiAjZGVmaW5lIEFUOTFfREJHVV9ICiAKLSNpZiAhZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQogI2RlZmluZSBBVDkxX0RCR1VfQ1IJCSgweDAwKQkvKiBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIEFUOTFfREJHVV9NUgkJKDB4MDQpCS8qIE1vZGUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQVQ5MV9EQkdVX0lFUgkJKDB4MDgpCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KQEAgLTM0LDggKzMzLDYgQEAKICNkZWZpbmUgQVQ5MV9EQkdVX0ZOUgkJKDB4NDgpCS8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyIFtTQU05IG9ubHldICovCiAjZGVmaW5lCQlBVDkxX0RCR1VfRk5UUlNUCSgxIDw8IDApCQkvKiBGb3JjZSBOVFJTVCAqLwogCi0jZW5kaWYgLyogQVQ5MV9EQkdVICovCi0KIC8qCiAgKiBTb21lIEFUOTEgcGFydHMgdGhhdCBkb24ndCBoYXZlIGZ1bGwgREVCVUcgdW5pdHMgc3RpbGwgc3VwcG9ydCB0aGUgSUQKICAqIGFuZCBleHRlbnNpb25zIHJlZ2lzdGVyLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3JhbWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9yYW1jLmgKaW5kZXggZDhhZWIyNy4uZTQ0OTJiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3JhbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfcmFtYy5oCkBAIC0yNSw4ICsyNSw4IEBACiAjZGVmaW5lIEFUOTFfTUVNQ1RSTF9TRFJBTUMJMQogI2RlZmluZSBBVDkxX01FTUNUUkxfRERSU0RSCTIKIAotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9zZHJhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X2RkcnNkci5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc2RyYW1jLmg+CisjaW5jbHVkZSA8c29jL2F0OTEvYXQ5MXJtOTIwMF9zZHJhbWMuaD4KKyNpbmNsdWRlIDxzb2MvYXQ5MS9hdDkxc2FtOV9kZHJzZHIuaD4KKyNpbmNsdWRlIDxzb2MvYXQ5MS9hdDkxc2FtOV9zZHJhbWMuaD4KIAogI2VuZGlmIC8qIF9fQVQ5MV9SQU1DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxeDQwLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTF4NDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkY2EyYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTF4NDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTF4NDAuaAotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNywgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgQVQ5MVg0MF9ICi0jZGVmaW5lIEFUOTFYNDBfSAotCi0vKgotICoJSVJRIGxpc3QuCi0gKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9VU0FSVDAJMgkvKiBVU0FSVCBwb3J0IDAgKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9VU0FSVDEJMwkvKiBVU0FSVCBwb3J0IDEgKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9UQzAJCTQJLyogVGltZXIvQ291bnRlciAwICovCi0jZGVmaW5lIEFUOTFYNDBfSURfVEMxCQk1CS8qIFRpbWVyL0NvdW50ZXIgMSovCi0jZGVmaW5lIEFUOTFYNDBfSURfVEMyCQk2CS8qIFRpbWVyL0NvdW50ZXIgMiovCi0jZGVmaW5lIEFUOTFYNDBfSURfV0QJCTcJLyogV2F0Y2hkb2c/ICovCi0jZGVmaW5lIEFUOTFYNDBfSURfUElPQQkJOAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLQotI2RlZmluZSBBVDkxWDQwX0lEX0lSUTAJCTE2CS8qIEV4dGVybmFsIElSUSAwICovCi0jZGVmaW5lIEFUOTFYNDBfSURfSVJRMQkJMTcJLyogRXh0ZXJuYWwgSVJRIDEgKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9JUlEyCQkxOAkvKiBFeHRlcm5hbCBJUlEgMiAqLwotCi0vKgotICogU3lzdGVtIFBlcmlwaGVyYWxzCi0gKi8KLSNkZWZpbmUgQVQ5MV9CQVNFX1NZUwkweGZmYzAwMDAwCi0KLSNkZWZpbmUgQVQ5MV9FQkkJMHhmZmUwMDAwMAkvKiBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlICovCi0jZGVmaW5lIEFUOTFfU0YJCTB4ZmZmMDAwMDAJLyogU3BlY2lhbCBGdW5jdGlvbiAqLwotI2RlZmluZSBBVDkxX1VTQVJUMQkweGZmZmNjMDAwCS8qIFVTQVJUIDEgKi8KLSNkZWZpbmUgQVQ5MV9VU0FSVDAJMHhmZmZkMDAwMAkvKiBVU0FSVCAwICovCi0jZGVmaW5lIEFUOTFfVEMJCTB4ZmZmZTAwMDAJLyogVGltZXIgQ291bnRlciAqLwotI2RlZmluZSBBVDkxX1BJT0EJMHhmZmZmMDAwMAkvKiBQSU8gQ29udHJvbGxlciBBICovCi0jZGVmaW5lIEFUOTFfUFMJCTB4ZmZmZjQwMDAJLyogUG93ZXIgU2F2ZSAqLwotI2RlZmluZSBBVDkxX1dECQkweGZmZmY4MDAwCS8qIFdhdGNoZG9nIFRpbWVyICovCi0KLS8qCi0gKiBUaGUgQVQ5MXg0MCBzZXJpZXMgZG9lc24ndCBoYXZlIGEgZGVidWcgdW5pdCBsaWtlIHRoZSBvdGhlciBBVDkxIHBhcnRzLgotICogQnV0IGl0IGRvZXMgaGF2ZSBhIGNoaXAgaWRlbnRpZnkgcmVnaXN0ZXIgYW5kIGV4dGVuc2lvbiBJRCwgc28gZGVmaW5lIGF0Ci0gKiBsZWFzdCB0aGVzZSBoZXJlLgotICovCi0jZGVmaW5lIEFUOTFfREJHVV9DSURSCShBVDkxX1NGICsgMCkJLyogQ0lEUiBpbiBQUyBzZWdtZW50ICovCi0jZGVmaW5lIEFUOTFfREJHVV9FWElECShBVDkxX1NGICsgNCkJLyogRVhJRCBpbiBQUyBzZWdtZW50ICovCi0KLS8qCi0gKiBTdXBwb3J0IGRlZmluZXMgZm9yIHRoZSBzaW1wbGUgUG93ZXIgQ29udHJvbGxlciBtb2R1bGUuCi0gKi8KLSNkZWZpbmUJQVQ5MV9QU19DUgkoQVQ5MV9QUyArIDApCS8qIFBTIENvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJQVQ5MV9QU19DUl9DUFUJKDEgPDwgMCkJLyogQ1BVIGNsb2NrIGRpc2FibGUgYml0ICovCi0KLSNkZWZpbmUgQVQ5MVg0MF9NQVNURVJfQ0xPQ0sJNDAwMDAwMDAKLQotI2VuZGlmIC8qIEFUOTFYNDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXRtZWwtbWNpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNjllNDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgX19NQUNIX0FUTUVMX01DSV9ICi0jZGVmaW5lIF9fTUFDSF9BVE1FTF9NQ0lfSAotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtYXRtZWwuaD4KLQotLyoqCi0gKiBzdHJ1Y3QgbWNpX2RtYV9kYXRhIC0gRE1BIGRhdGEgZm9yIE1DSSBpbnRlcmZhY2UKLSAqLwotc3RydWN0IG1jaV9kbWFfZGF0YSB7Ci0Jc3RydWN0IGF0X2RtYV9zbGF2ZQlzZGF0YTsKLX07Ci0KLS8qIGFjY2Vzc29yIG1hY3JvcyAqLwotI2RlZmluZQlzbGF2ZV9kYXRhX3B0cihzKQkoJihzKS0+c2RhdGEpCi0jZGVmaW5lIGZpbmRfc2xhdmVfZGV2KHMpCSgocyktPnNkYXRhLmRtYV9kZXYpCi0KLSNlbmRpZiAvKiBfX01BQ0hfQVRNRUxfTUNJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IGIyN2U5Y2EuLjYxOTE0ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtNjIsNyArNjIsNiBAQAogI2RlZmluZSBBUkNIX0VYSURfU0FNQTVENDMJMHgwMDAwMDAwMwogI2RlZmluZSBBUkNIX0VYSURfU0FNQTVENDQJMHgwMDAwMDAwNAogCi0jZGVmaW5lIEFSQ0hfRkFNSUxZX0FUOTFYOTIJMHgwOTIwMDAwMAogI2RlZmluZSBBUkNIX0ZBTUlMWV9BVDkxU0FNOQkweDAxOTAwMDAwCiAjZGVmaW5lIEFSQ0hfRkFNSUxZX0FUOTFTQU05WEUJMHgwMjkwMDAwMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggYzEzNzk3My4uY2FjYmFhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMjQsOSArMjQsNiBAQAogLyogc2FtYTVkNCAqLwogI2RlZmluZSBBVDkxX0JBU0VfREJHVTIJMHhmYzA2OTAwMAogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQotI2luY2x1ZGUgPG1hY2gvYXQ5MXg0MC5oPgotI2Vsc2UKICNpbmNsdWRlIDxtYWNoL2F0OTFybTkyMDAuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYwLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MS5oPgpAQCAtNTEsOCArNDgsNiBAQAogICovCiAjZGVmaW5lIEFUOTFfQkFTRV9TWVMJMHhmZmZmYzAwMAogCi0jZW5kaWYKLQogLyoKICAqIE9uIHNhbWE1ZDQgdGhlcmUgaXMgbm8gc3lzdGVtIGNvbnRyb2xsZXIsIHdlIG1hcCBzb21lIG5lZWRlZCBwZXJpcGhlcmFscwogICovCkBAIC0xMzIsMTMgKzEyNyw4IEBACiAgKiBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZ2VuZXJpYyBzdXNwZW5kL3Jlc3VtZSBwYXRoLgogICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2lmZGVmIENPTkZJR19QSU5DVFJMX0FUOTEKIGV4dGVybiB2b2lkIGF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQodm9pZCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUodm9pZCkge30KLSNlbmRpZgogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBhY2IyZDg5MC4uNGViYjYwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTMxLDcgKzMxLDYgQEAKIAogdm9pZCBfX2lvbWVtICphdDkxX3VhcnQ7CiAKLSNpZiAhZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQogc3RhdGljIGNvbnN0IHUzMiB1YXJ0c19ybTkyMDBbXSA9IHsKIAlBVDkxX0JBU0VfREJHVTAsCiAJQVQ5MVJNOTIwMF9CQVNFX1VTMCwKQEAgLTE4OCwxMiArMTg3LDYgQEAKIAogCWF0OTFfdWFydCA9IE5VTEw7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCi17Ci0JYXQ5MV91YXJ0ID0gTlVMTDsKLX0KLSNlbmRpZgogCiAvKgogICogVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhlIHNlcmlhbCBwb3J0IGhhcyBhbHJlYWR5IGJlZW4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RiM2VjOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9pcnEuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgU0FOIFBlb3BsZQotICogIENvcHlyaWdodCAoQykgMjAwNCBBVE1FTAotICogIENvcHlyaWdodCAoQykgUmljayBCcm9uc29uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0KLSNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLQotdm9pZCBfX2lvbWVtICphdDkxX2FpY19iYXNlOwotc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluICphdDkxX2FpY19kb21haW47Ci1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICphdDkxX2FpY19ucDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbl9pcnFzID0gTlJfQUlDX0lSUVM7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgKndha2V1cHM7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyAqYmFja3VwczsKLQotI2RlZmluZSBzZXRfYmFja3VwKGJpdCkgc2V0X2JpdChiaXQsIGJhY2t1cHMpCi0jZGVmaW5lIGNsZWFyX2JhY2t1cChiaXQpIGNsZWFyX2JpdChiaXQsIGJhY2t1cHMpCi0KLXN0YXRpYyBpbnQgYXQ5MV9haWNfcG1faW5pdCh2b2lkKQotewotCWJhY2t1cHMgPSBremFsbG9jKEJJVFNfVE9fTE9OR1Mobl9pcnFzKSAqIHNpemVvZigqYmFja3VwcyksIEdGUF9LRVJORUwpOwotCWlmICghYmFja3VwcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl3YWtldXBzID0ga3phbGxvYyhCSVRTX1RPX0xPTkdTKG5faXJxcykgKiBzaXplb2YoKmJhY2t1cHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdha2V1cHMpIHsKLQkJa2ZyZWUoYmFja3Vwcyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfYWljX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdmFsdWUpCi17Ci0JaWYgKHVubGlrZWx5KGQtPmh3aXJxID49IG5faXJxcykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHZhbHVlKQotCQlzZXRfYml0KGQtPmh3aXJxLCB3YWtldXBzKTsKLQllbHNlCi0JCWNsZWFyX2JpdChkLT5od2lycSwgd2FrZXVwcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBhdDkxX2lycV9zdXNwZW5kKHZvaWQpCi17Ci0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfSURDUiwgKmJhY2t1cHMpOwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX0lFQ1IsICp3YWtldXBzKTsKLX0KLQotdm9pZCBhdDkxX2lycV9yZXN1bWUodm9pZCkKLXsKLQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19JRENSLCAqd2FrZXVwcyk7Ci0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfSUVDUiwgKmJhY2t1cHMpOwotfQotCi0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgYXQ5MV9haWNfcG1faW5pdCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIHNldF9iYWNrdXAoYml0KQotI2RlZmluZSBjbGVhcl9iYWNrdXAoYml0KQotI2RlZmluZSBhdDkxX2FpY19zZXRfd2FrZQlOVUxMCi0KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uX2lycV9lbnRyeQotYXQ5MV9haWNfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1MzIgaXJxbnI7Ci0JdTMyIGlycXN0YXQ7Ci0KLQlpcnFuciA9IGF0OTFfYWljX3JlYWQoQVQ5MV9BSUNfSVZSKTsKLQlpcnFzdGF0ID0gYXQ5MV9haWNfcmVhZChBVDkxX0FJQ19JU1IpOwotCi0JLyoKLQkgKiBJU1IgdmFsdWUgaXMgMCB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW50ZXJydXB0IG9yIHdoZW4gdGhlcmUgaXMKLQkgKiBhIHNwdXJpb3VzIGludGVycnVwdAotCSAqLwotCWlmICghaXJxc3RhdCkKLQkJYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRU9JQ1IsIDApOwotCWVsc2UKLQkJaGFuZGxlX0lSUShpcnFuciwgcmVncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfYWljX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQkvKiBEaXNhYmxlIGludGVycnVwdCBvbiBBSUMgKi8KLQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19JRENSLCAxIDw8IGQtPmh3aXJxKTsKLQkvKiBVcGRhdGUgSVNSIGNhY2hlICovCi0JY2xlYXJfYmFja3VwKGQtPmh3aXJxKTsKLX0KLQotc3RhdGljIHZvaWQgYXQ5MV9haWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JLyogRW5hYmxlIGludGVycnVwdCBvbiBBSUMgKi8KLQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19JRUNSLCAxIDw8IGQtPmh3aXJxKTsKLQkvKiBVcGRhdGUgSVNSIGNhY2hlICovCi0Jc2V0X2JhY2t1cChkLT5od2lycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfYWljX2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JLyoKLQkgKiBNYXJrIGVuZC1vZi1pbnRlcnJ1cHQgb24gQUlDLCB0aGUgY29udHJvbGxlciBkb2Vzbid0IGNhcmUgYWJvdXQKLQkgKiB0aGUgdmFsdWUgd3JpdHRlbi4gTW9yZW92ZXIgaXQncyBhIHdyaXRlLW9ubHkgcmVnaXN0ZXIuCi0JICovCi0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRU9JQ1IsIDApOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAqYXQ5MV9leHRlcm5faXJxOwotCi11MzIgYXQ5MV9nZXRfZXh0ZXJuX2lycSh2b2lkKQotewotCWlmICghYXQ5MV9leHRlcm5faXJxKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gKmF0OTFfZXh0ZXJuX2lycTsKLX0KLQotI2RlZmluZSBpc19leHRlcm5faXJxKGh3aXJxKSB0ZXN0X2JpdChod2lycSwgYXQ5MV9leHRlcm5faXJxKQotCi1zdGF0aWMgaW50IGF0OTFfYWljX2NvbXB1dGVfc3JjdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIHR5cGUpCi17Ci0JaW50IHNyY3R5cGU7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6Ci0JCXNyY3R5cGUgPSBBVDkxX0FJQ19TUkNUWVBFX0hJR0g7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6Ci0JCXNyY3R5cGUgPSBBVDkxX0FJQ19TUkNUWVBFX1JJU0lORzsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6Ci0JCWlmICgoZC0+aHdpcnEgPT0gQVQ5MV9JRF9GSVEpIHx8IGlzX2V4dGVybl9pcnEoZC0+aHdpcnEpKQkJLyogb25seSBzdXBwb3J0ZWQgb24gZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwotCQkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfTE9XOwotCQllbHNlCi0JCQlzcmN0eXBlID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JCWlmICgoZC0+aHdpcnEgPT0gQVQ5MV9JRF9GSVEpIHx8IGlzX2V4dGVybl9pcnEoZC0+aHdpcnEpKQkJLyogb25seSBzdXBwb3J0ZWQgb24gZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwotCQkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfRkFMTElORzsKLQkJZWxzZQotCQkJc3JjdHlwZSA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNyY3R5cGUgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiBzcmN0eXBlOwotfQotCi1zdGF0aWMgaW50IGF0OTFfYWljX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdHlwZSkKLXsKLQl1bnNpZ25lZCBpbnQgc21yOwotCWludCBzcmN0eXBlOwotCi0Jc3JjdHlwZSA9IGF0OTFfYWljX2NvbXB1dGVfc3JjdHlwZShkLCB0eXBlKTsKLQlpZiAoc3JjdHlwZSA8IDApCi0JCXJldHVybiBzcmN0eXBlOwotCi0Jc21yID0gYXQ5MV9haWNfcmVhZChBVDkxX0FJQ19TTVIoZC0+aHdpcnEpKSAmIH5BVDkxX0FJQ19TUkNUWVBFOwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX1NNUihkLT5od2lycSksIHNtciB8IHNyY3R5cGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYXQ5MV9haWNfY2hpcCA9IHsKLQkubmFtZQkJPSAiQUlDIiwKLQkuaXJxX21hc2sJPSBhdDkxX2FpY19tYXNrX2lycSwKLQkuaXJxX3VubWFzawk9IGF0OTFfYWljX3VubWFza19pcnEsCi0JLmlycV9zZXRfdHlwZQk9IGF0OTFfYWljX3NldF90eXBlLAotCS5pcnFfc2V0X3dha2UJPSBhdDkxX2FpY19zZXRfd2FrZSwKLQkuaXJxX2VvaQk9IGF0OTFfYWljX2VvaSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FpY19od19pbml0KHVuc2lnbmVkIGludCBzcHVfdmVjdG9yKQotewotCWludCBpOwotCi0JLyoKLQkgKiBQZXJmb3JtIDggRW5kIE9mIEludGVycnVwdCBDb21tYW5kIHRvIG1ha2Ugc3VyZSBBSUMKLQkgKiB3aWxsIG5vdCBMb2NrIG91dCBuSVJRCi0JICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRU9JQ1IsIDApOwotCi0JLyoKLQkgKiBTcHVyaW91cyBJbnRlcnJ1cHQgSUQgaW4gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyLgotCSAqIFdoZW4gdGhlcmUgaXMgbm8gY3VycmVudCBpbnRlcnJ1cHQsIHRoZSBJUlEgVmVjdG9yIFJlZ2lzdGVyCi0JICogcmVhZHMgdGhlIHZhbHVlIHN0b3JlZCBpbiBBSUNfU1BVCi0JICovCi0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfU1BVLCBzcHVfdmVjdG9yKTsKLQotCS8qIE5vIGRlYnVnZ2luZyBpbiBBSUM6IERlYnVnIChQcm90ZWN0KSBDb250cm9sIFJlZ2lzdGVyICovCi0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRENSLCAwKTsKLQotCS8qIERpc2FibGUgYW5kIGNsZWFyIGFsbCBpbnRlcnJ1cHRzIGluaXRpYWxseSAqLwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX0lEQ1IsIDB4RkZGRkZGRkYpOwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX0lDQ1IsIDB4RkZGRkZGRkYpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgQUlDIGludGVycnVwdCBjb250cm9sbGVyLgotICovCi12b2lkIF9faW5pdCBhdDkxX2FpY19pbml0KHVuc2lnbmVkIGludCAqcHJpb3JpdHksIHVuc2lnbmVkIGludCBleHRfaXJxX21hc2spCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IGlycV9iYXNlOwotCi0JYXQ5MV9leHRlcm5faXJxID0ga3phbGxvYyhCSVRTX1RPX0xPTkdTKG5faXJxcykKLQkJCQkgICogc2l6ZW9mKCphdDkxX2V4dGVybl9pcnEpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChhdDkxX2FpY19wbV9pbml0KCkgfHwgYXQ5MV9leHRlcm5faXJxID09IE5VTEwpCi0JCXBhbmljKCJVbmFibGUgdG8gYWxsb2NhdGUgYml0IG1hcHNcbiIpOwotCi0JKmF0OTFfZXh0ZXJuX2lycSA9IGV4dF9pcnFfbWFzazsKLQotCWF0OTFfYWljX2Jhc2UgPSBpb3JlbWFwKEFUOTFfQUlDLCA1MTIpOwotCWlmICghYXQ5MV9haWNfYmFzZSkKLQkJcGFuaWMoIlVuYWJsZSB0byBpb3JlbWFwIEFJQyByZWdpc3RlcnNcbiIpOwotCi0JLyogQWRkIGlycSBkb21haW4gZm9yIEFJQyAqLwotCWlycV9iYXNlID0gaXJxX2FsbG9jX2Rlc2NzKC0xLCAwLCBuX2lycXMsIDApOwotCWlmIChpcnFfYmFzZSA8IDApIHsKLQkJV0FSTigxLCAiQ2Fubm90IGFsbG9jYXRlIGlycV9kZXNjcywgYXNzdW1pbmcgcHJlLWFsbG9jYXRlZFxuIik7Ci0JCWlycV9iYXNlID0gMDsKLQl9Ci0JYXQ5MV9haWNfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGVnYWN5KGF0OTFfYWljX25wLCBuX2lycXMsCi0JCQkJCQlpcnFfYmFzZSwgMCwKLQkJCQkJCSZpcnFfZG9tYWluX3NpbXBsZV9vcHMsIE5VTEwpOwotCi0JaWYgKCFhdDkxX2FpY19kb21haW4pCi0JCXBhbmljKCJVbmFibGUgdG8gYWRkIEFJQyBpcnEgZG9tYWluXG4iKTsKLQotCWlycV9zZXRfZGVmYXVsdF9ob3N0KGF0OTFfYWljX2RvbWFpbik7Ci0KLQkvKgotCSAqIFRoZSBJVlIgaXMgdXNlZCBieSBtYWNybyBnZXRfaXJxbnJfYW5kX2Jhc2UgdG8gcmVhZCBhbmQgdmVyaWZ5LgotCSAqIFRoZSBpcnEgbnVtYmVyIGlzIE5SX0FJQ19JUlFTIHdoZW4gYSBzcHVyaW91cyBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBuX2lycXM7IGkrKykgewotCQkvKiBQdXQgaGFyZHdhcmUgaXJxIG51bWJlciBpbiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyOiAqLwotCQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19TVlIoaSksIE5SX0lSUVNfTEVHQUNZICsgaSk7Ci0JCS8qIEFjdGl2ZSBMb3cgaW50ZXJydXB0LCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJpb3JpdHkgKi8KLQkJYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfU01SKGkpLCBBVDkxX0FJQ19TUkNUWVBFX0xPVyB8IHByaW9yaXR5W2ldKTsKLQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKE5SX0lSUVNfTEVHQUNZICsgaSwgJmF0OTFfYWljX2NoaXAsIGhhbmRsZV9mYXN0ZW9pX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwotCX0KLQotCWF0OTFfYWljX2h3X2luaXQobl9pcnFzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvbGVkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjIyZTMzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9sZWRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogTEVEIGRyaXZlciBmb3IgQXRtZWwgQVQ5MS1iYXNlZCBib2FyZHMuCi0gKgotICogIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZSAoUHR5KSBMdGQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19ORVdfTEVEUykKLQotLyoKLSAqIE5ldyBjcm9zcy1wbGF0Zm9ybSBMRUQgc3VwcG9ydC4KLSAqLwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbGVkX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfZ3Bpb19sZWRzX2RldmljZSA9IHsKLQkubmFtZQkJCT0gImxlZHMtZ3BpbyIsCi0JLmlkCQkJPSAtMSwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmbGVkX2RhdGEsCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2dwaW9fbGVkcyhzdHJ1Y3QgZ3Bpb19sZWQgKmxlZHMsIGludCBucikKLXsKLQlpbnQgaTsKLQotCWlmICghbnIpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChsZWRzW2ldLmdwaW8sIGxlZHNbaV0uYWN0aXZlX2xvdyk7Ci0KLQlsZWRfZGF0YS5sZWRzID0gbGVkczsKLQlsZWRfZGF0YS5udW1fbGVkcyA9IG5yOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9ncGlvX2xlZHNfZGV2aWNlKTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfZ3Bpb19sZWRzKHN0cnVjdCBncGlvX2xlZCAqbGVkcywgaW50IG5yKSB7fQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKaW5kZXggNDA3M2FiNy4uOWIxNTE2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKQEAgLTI5LDEwICsyOSw4IEBACiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJwbS5oIgotI2luY2x1ZGUgImdwaW8uaCIKIAogc3RhdGljIHZvaWQgKCphdDkxX3BtX3N0YW5kYnkpKHZvaWQpOwogCkBAIC0xMzEsMjMgKzEyOSw3IEBACiAKIHN0YXRpYyBpbnQgYXQ5MV9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7Ci0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCWF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQoKTsKLQllbHNlCi0JCWF0OTFfZ3Bpb19zdXNwZW5kKCk7Ci0KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0xEX0lSUV9BVDkxKSAmJiBhdDkxX2FpY19iYXNlKSB7Ci0JCWF0OTFfaXJxX3N1c3BlbmQoKTsKLQotCQlwcl9kZWJ1ZygiQVQ5MTogUE0gLSB3YWtlIG1hc2sgJTA4eCwgcG0gc3RhdGUgJWRcbiIsCi0JCQkJLyogcmVtZW1iZXIgYWxsIHRoZSBhbHdheXMtd2FrZSBpcnFzICovCi0JCQkJKGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfUENTUikKLQkJCQkJCXwgKDEgPDwgQVQ5MV9JRF9GSVEpCi0JCQkJCQl8ICgxIDw8IEFUOTFfSURfU1lTKQotCQkJCQkJfCAoYXQ5MV9nZXRfZXh0ZXJuX2lycSgpKSkKLQkJCQkJJiBhdDkxX2FpY19yZWFkKEFUOTFfQUlDX0lNUiksCi0JCQkJc3RhdGUpOwotCX0KKwlhdDkxX3BpbmN0cmxfZ3Bpb19zdXNwZW5kKCk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJCS8qCkBAIC0yMTIsMjEgKzE5NCwxMCBAQAogCQkJZ290byBlcnJvcjsKIAl9CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0xEX0lSUV9BVDkxKSAmJiBhdDkxX2FpY19iYXNlKQotCQlwcl9kZWJ1ZygiQVQ5MTogUE0gLSB3YWtldXAgJTA4eFxuIiwKLQkJCSBhdDkxX2FpY19yZWFkKEFUOTFfQUlDX0lQUikgJgotCQkJIGF0OTFfYWljX3JlYWQoQVQ5MV9BSUNfSU1SKSk7Ci0KIGVycm9yOgogCXRhcmdldF9zdGF0ZSA9IFBNX1NVU1BFTkRfT047CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0xEX0lSUV9BVDkxKSAmJiBhdDkxX2FpY19iYXNlKQotCQlhdDkxX2lycV9yZXN1bWUoKTsKLQotCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQotCQlhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUoKTsKLQllbHNlCi0JCWF0OTFfZ3Bpb19yZXN1bWUoKTsKKwlhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uaAppbmRleCBjNTEwMWRjLi5kMmM4OTk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uaApAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogCiAjaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFybTkyMDBfc2RyYW1jLmg+CiAKICNpZmRlZiBDT05GSUdfUE0KIGV4dGVybiB2b2lkIGF0OTFfcG1fc2V0X3N0YW5kYnkodm9pZCAoKmF0OTFfc3RhbmRieSkodm9pZCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3NldHVwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvc2V0dXAuYwppbmRleCA5NjEwNzkyLi5jZTI1ZTg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvc2V0dXAuYwpAQCAtNDIsMzUgKzQyLDkgQEAKIAkJYXQ5MV9nZXRfc29jX3N1YnR5cGUoJmF0OTFfc29jX2luaXRkYXRhKSk7CiB9CiAKLXZvaWQgX19pbml0IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCh2b2lkKQotewotCWF0OTFfaW5pdF9pbnRlcnJ1cHRzKGF0OTFfYm9vdF9zb2MuZGVmYXVsdF9pcnFfcHJpb3JpdHkpOwotfQotCi12b2lkIF9faW5pdCBhdDkxX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgKnByaW9yaXR5KQotewotCS8qIEluaXRpYWxpemUgdGhlIEFJQyBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR19PTERfSVJRX0FUOTEpKQotCQlhdDkxX2FpY19pbml0KHByaW9yaXR5LCBhdDkxX2Jvb3Rfc29jLmV4dGVybl9pcnEpOwotCi0JLyogRW5hYmxlIEdQSU8gaW50ZXJydXB0cyAqLwotCWF0OTFfZ3Bpb19pcnFfc2V0dXAoKTsKLX0KLQogdm9pZCBfX2lvbWVtICphdDkxX3JhbWNfYmFzZVsyXTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0OTFfcmFtY19iYXNlKTsKIAotdm9pZCBfX2luaXQgYXQ5MV9pb3JlbWFwX3JhbWMoaW50IGlkLCB1MzIgYWRkciwgdTMyIHNpemUpCi17Ci0JaWYgKGlkIDwgMCB8fCBpZCA+IDEpIHsKLQkJcHJfZW1lcmcoIldyb25nIFJBTSBjb250cm9sbGVyIGlkICglZCksIGNhbm5vdCBjb250aW51ZVxuIiwgaWQpOwotCQlCVUcoKTsKLQl9Ci0JYXQ5MV9yYW1jX2Jhc2VbaWRdID0gaW9yZW1hcChhZGRyLCBzaXplKTsKLQlpZiAoIWF0OTFfcmFtY19iYXNlW2lkXSkKLQkJcGFuaWMocHJfZm10KCJJbXBvc3NpYmxlIHRvIGlvcmVtYXAgcmFtYy4lZCAweCV4XG4iKSwgaWQsIGFkZHIpOwotfQotCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNyYW1fZGVzY1syXSBfX2luaXRkYXRhOwogCiB2b2lkIF9faW5pdCBhdDkxX2luaXRfc3JhbShpbnQgYmFuaywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQpAQCAtNDE4LDcgKzM5Miw2IEBACiAJCXBhbmljKHByX2ZtdCgiSW1wb3NzaWJsZSB0byBpb3JlbWFwIGF0OTFfbWF0cml4X2Jhc2VcbiIpKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX09GKSAmJiAhZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcmFtY19pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtc2RyYW1jIiwgLmRhdGEgPSBhdDkxcm05MjAwX3N0YW5kYnkgfSwKIAl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLXNkcmFtYyIsIC5kYXRhID0gYXQ5MXNhbTlfc2RyYW1fc3RhbmRieSB9LApAQCAtNDYwLDEzICs0MzMsNiBAQAogewogCWF0OTFfZHRfcmFtYygpOwogCi0JLyogSW5pdCBjbG9jayBzdWJzeXN0ZW0gKi8KLQlhdDkxX2R0X2Nsb2NrX2luaXQoKTsKLQotCS8qIFJlZ2lzdGVyIHRoZSBwcm9jZXNzb3Itc3BlY2lmaWMgY2xvY2tzICovCi0JaWYgKGF0OTFfYm9vdF9zb2MucmVnaXN0ZXJfY2xvY2tzKQotCQlhdDkxX2Jvb3Rfc29jLnJlZ2lzdGVyX2Nsb2NrcygpOwotCiAJYXQ5MV9ib290X3NvYy5pbml0KCk7CiB9CiAKQEAgLTQ3NCwzOSArNDQwLDYgQEAKIHsKIAlhdDkxX2R0X3JhbWMoKTsKIAotCS8qIEluaXQgY2xvY2sgc3Vic3lzdGVtICovCi0JYXQ5MV9kdF9jbG9ja19pbml0KCk7Ci0KLQkvKiBSZWdpc3RlciB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGNsb2NrcyAqLwotCWlmIChhdDkxX2Jvb3Rfc29jLnJlZ2lzdGVyX2Nsb2NrcykKLQkJYXQ5MV9ib290X3NvYy5yZWdpc3Rlcl9jbG9ja3MoKTsKLQogCWlmIChhdDkxX2Jvb3Rfc29jLmluaXQpCiAJCWF0OTFfYm9vdF9zb2MuaW5pdCgpOwogfQotI2VuZGlmCi0KLXZvaWQgX19pbml0IGF0OTFfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCi17Ci0JYXQ5MV9ib290X3NvYy5pb3JlbWFwX3JlZ2lzdGVycygpOwotCi0JLyogSW5pdCBjbG9jayBzdWJzeXN0ZW0gKi8KLQlhdDkxX2Nsb2NrX2luaXQobWFpbl9jbG9jayk7Ci0KLQkvKiBSZWdpc3RlciB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGNsb2NrcyAqLwotCWF0OTFfYm9vdF9zb2MucmVnaXN0ZXJfY2xvY2tzKCk7Ci0KLQlhdDkxX2Jvb3Rfc29jLmluaXQoKTsKLQotCXBpbmN0cmxfcHJvdmlkZV9kdW1taWVzKCk7Ci19Ci0KLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQotewotCWF0OTFfYm9vdF9zb2MucmVnaXN0ZXJfZGV2aWNlcygpOwotfQotCi12b2lkIF9faW5pdCBhdDkxX2luaXRfdGltZSh2b2lkKQotewotCWF0OTFfYm9vdF9zb2MuaW5pdF90aW1lKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvc29jLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvc29jLmgKaW5kZXggOWE4ZmQ5Ny4uYWU2YzBiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL3NvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9zb2MuaApAQCAtNiwxNCArNiw4IEBACiAKIHN0cnVjdCBhdDkxX2luaXRfc29jIHsKIAlpbnQgYnVpbHRpbjsKLQl1MzIgZXh0ZXJuX2lycTsKLQl1bnNpZ25lZCBpbnQgKmRlZmF1bHRfaXJxX3ByaW9yaXR5OwogCXZvaWQgKCptYXBfaW8pKHZvaWQpOwotCXZvaWQgKCppb3JlbWFwX3JlZ2lzdGVycykodm9pZCk7Ci0Jdm9pZCAoKnJlZ2lzdGVyX2Nsb2Nrcykodm9pZCk7Ci0Jdm9pZCAoKnJlZ2lzdGVyX2RldmljZXMpKHZvaWQpOwogCXZvaWQgKCppbml0KSh2b2lkKTsKLQl2b2lkICgqaW5pdF90aW1lKSh2b2lkKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgYXQ5MV9pbml0X3NvYyBhdDkxX2Jvb3Rfc29jOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3N0YW1wOWcyMC5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3N0YW1wOWcyMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjJjMGFiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9zdGFtcDlnMjAuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfX01BQ0hfU1RBTVA5RzIwX0gKLSNkZWZpbmUgX19NQUNIX1NUQU1QOUcyMF9ICi0KLXZvaWQgc3RhbXA5ZzIwX2luaXRfZWFybHkodm9pZCk7Ci12b2lkIHN0YW1wOWcyMF9ib2FyZF9pbml0KHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWJjbS9LY29uZmlnCmluZGV4IDJhYmFkNzQuLmFhZWVjNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vS2NvbmZpZwpAQCAtNSw4ICs1LDU2IEBACiAKIGlmIEFSQ0hfQkNNCiAKK2NvbW1lbnQgIklQUk9DIGFyY2hpdGVjdGVkIFNvQ3MiCisKK2NvbmZpZyBBUkNIX0JDTV9JUFJPQworCWJvb2wKKwlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBDQUNIRV9MMlgwCisJc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBTTVAKKwlzZWxlY3QgSEFWRV9BUk1fVFdEIGlmIFNNUAorCXNlbGVjdCBBUk1fR0xPQkFMX1RJTUVSCisKKwlzZWxlY3QgQ0xLU1JDX01NSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgQVJNX0FNQkEKKwlzZWxlY3QgUElOQ1RSTAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIEJyb2FkY29tIElQUk9DIGFyY2hpdGVjdGVkIFNvQ3MuCisJICBUaGUgSVBST0MgY29tcGxleCBjb250YWlucyBvbmUgb3IgbW9yZSBBUk0gQ1BVcyBhbG9uZyB3aXRoIGNvbW1vbgorCSAgY29yZSBwZXJpcGVyYWxzLiBBcHBsaWNhdGlvbiBzcGVjaWZpYyBTb0NzIGFyZSBjcmVhdGVkIGJ5IGFkZGluZyBhCisJICB1QXJjaGl0ZWN0dXJlIGNvbnRhaW5pbmcgcGVyaXBoZXJhbHMgb3V0c2lkZSBvZiB0aGUgSVBST0MgY29tcGxleC4KKwkgIEN1cnJlbnRseSBzdXBwb3J0ZWQgU29DcyBhcmUgQ3lnbnVzLgorCitjb25maWcgQVJDSF9CQ01fQ1lHTlVTCisJYm9vbCAiQnJvYWRjb20gQ3lnbnVzIFN1cHBvcnQiIGlmIEFSQ0hfTVVMVElfVjcKKwlzZWxlY3QgQVJDSF9CQ01fSVBST0MKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEN5Z251cyBmYW1pbHksCisJICB3aGljaCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHZhcmlhbnRzOgorCSAgQkNNMTEzMDAsIEJDTTExMzIwLCBCQ00xMTM1MCwgQkNNMTEzNjAsCisJICBCQ001ODMwMCwgQkNNNTgzMDIsIEJDTTU4MzAzLCBCQ001ODMwNS4KKworY29uZmlnIEFSQ0hfQkNNXzUzMDFYCisJYm9vbCAiQnJvYWRjb20gQkNNNDcwWCAvIEJDTTUzMDFYIEFSTSBTb0MiIGlmIEFSQ0hfTVVMVElfVjcKKwlzZWxlY3QgQVJDSF9CQ01fSVBST0MKKwloZWxwCisJICBTdXBwb3J0IGZvciBCcm9hZGNvbSBCQ000NzBYIGFuZCBCQ001MzAxWCBTb0NzIHdpdGggQVJNIENQVSBjb3Jlcy4KKworCSAgVGhpcyBpcyBhIG5ldHdvcmsgU29DIGxpbmUgbW9zdGx5IHVzZWQgaW4gaG9tZSByb3V0ZXJzIGFuZAorCSAgd2lmaSBhY2Nlc3MgcG9pbnRzLCBpdCdzIGludGVybmFsIG5hbWUgaXMgTm9ydGhzdGFyLgorCSAgVGhpcyBpbmNsdXNlZCB0aGUgZm9sbG93aW5nIFNvQzogQkNNNTMwMTAsIEJDTTUzMDExLCBCQ001MzAxMiwKKwkgIEJDTTUzMDE0LCBCQ001MzAxNSwgQkNNNTMwMTYsIEJDTTUzMDE3LCBCQ001MzAxOCwgQkNNNDcwNywKKwkgIEJDTTQ3MDggYW5kIEJDTTQ3MDkuCisKKwkgIERvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgQkNNNDc2MCB3aGljaCBpcyBhIHRvdGFsbHkKKwkgIGRpZmZlcmVudCBTb0Mgb3Igd2l0aCB0aGUgb2xkZXIgQkNNNDdYWCBhbmQgQkNNNTNYWCBiYXNlZAorCSAgbmV0d29yayBTb0MgdXNpbmcgYSBNSVBTIENQVSwgdGhleSBhcmUgc3VwcG9ydGVkIGJ5IGFyY2gvbWlwcy9iY200N3h4CisKK2NvbW1lbnQgIktPTkEgYXJjaGl0ZWN0ZWQgU29DcyIKKwogY29uZmlnIEFSQ0hfQkNNX01PQklMRQotCWJvb2wgIkJyb2FkY29tIE1vYmlsZSBTb0MgU3VwcG9ydCIgaWYgQVJDSF9NVUxUSV9WNworCWJvb2wKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgQVJNX0VSUkFUQV83NTQzMjIKIAlzZWxlY3QgQVJNX0VSUkFUQV83NzU0MjAKQEAgLTE1LDE2ICs2MywxMyBAQAogCXNlbGVjdCBUSUNLX09ORVNIT1QKIAlzZWxlY3QgSEFWRV9BUk1fQVJDSF9USU1FUgogCXNlbGVjdCBQSU5DVFJMCisJc2VsZWN0IEFSQ0hfQkNNX01PQklMRV9TTVAgaWYgU01QCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gQnJvYWRjb20gbW9iaWxlIFNvQ3MuCiAKLWlmIEFSQ0hfQkNNX01PQklMRQotCi1tZW51ICJCcm9hZGNvbSBNb2JpbGUgU29DIFNlbGVjdGlvbiIKLQogY29uZmlnIEFSQ0hfQkNNXzI4MVhYCiAJYm9vbCAiQnJvYWRjb20gQkNNMjgxWFggU29DIGZhbWlseSIKLQlkZWZhdWx0IHkKKwlzZWxlY3QgQVJDSF9CQ01fTU9CSUxFCiAJc2VsZWN0IEhBVkVfU01QCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBCQ00yODFYWCBmYW1pbHksIHdoaWNoIGluY2x1ZGVzCkBAIC0zMyw3ICs3OCw3IEBACiAKIGNvbmZpZyBBUkNIX0JDTV8yMTY2NAogCWJvb2wgIkJyb2FkY29tIEJDTTIxNjY0IFNvQyBmYW1pbHkiCi0JZGVmYXVsdCB5CisJc2VsZWN0IEFSQ0hfQkNNX01PQklMRQogCXNlbGVjdCBIQVZFX1NNUAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQkNNMjE2NjQgZmFtaWx5LCB3aGljaCBpbmNsdWRlcwpAQCAtNDEsMTkgKzg2LDE4IEBACiAKIGNvbmZpZyBBUkNIX0JDTV9NT0JJTEVfTDJfQ0FDSEUKIAlib29sICJCcm9hZGNvbSBtb2JpbGUgU29DIGxldmVsIDIgY2FjaGUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChBUkNIX0JDTV8yODFYWCB8fCBBUkNIX0JDTV8yMTY2NCkKKwlkZXBlbmRzIG9uIEFSQ0hfQkNNX01PQklMRQogCWRlZmF1bHQgeQogCXNlbGVjdCBDQUNIRV9MMlgwCiAJc2VsZWN0IEFSQ0hfQkNNX01PQklMRV9TTUMKIAogY29uZmlnIEFSQ0hfQkNNX01PQklMRV9TTUMKIAlib29sCi0JZGVwZW5kcyBvbiBBUkNIX0JDTV8yODFYWCB8fCBBUkNIX0JDTV8yMTY2NAorCWRlcGVuZHMgb24gQVJDSF9CQ01fTU9CSUxFCiAKIGNvbmZpZyBBUkNIX0JDTV9NT0JJTEVfU01QCi0JYm9vbCAiQnJvYWRjb20gbW9iaWxlIFNvQyBTTVAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChBUkNIX0JDTV8yODFYWCB8fCBBUkNIX0JDTV8yMTY2NCkgJiYgU01QCi0JZGVmYXVsdCB5CisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9CQ01fTU9CSUxFCiAJc2VsZWN0IEhBVkVfQVJNX1NDVQogCXNlbGVjdCBBUk1fRVJSQVRBXzc2NDM2OQogCWhlbHAKQEAgLTYxLDkgKzEwNSw3IEBACiAJICBQcm92aWRlZCBhcyBhbiBvcHRpb24gc28gU01QIHN1cHBvcnQgZm9yIFNvQ3Mgb2YgdGhpcyB0eXBlCiAJICBjYW4gYmUgZGlzYWJsZWQgZm9yIGFuIFNNUC1lbmFibGVkIGtlcm5lbC4KIAotZW5kbWVudQotCi1lbmRpZgorY29tbWVudCAiT3RoZXIgQXJjaGl0ZWN0dXJlcyIKIAogY29uZmlnIEFSQ0hfQkNNMjgzNQogCWJvb2wgIkJyb2FkY29tIEJDTTI4MzUgZmFtaWx5IiBpZiBBUkNIX01VTFRJX1Y2CkBAIC03OCwyNyArMTIwLDYgQEAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQnJvYWRjb20gQkNNMjgzNSBTb0MuIFRoaXMgU29DIGlzCiAJICB1c2VkIGluIHRoZSBSYXNwYmVycnkgUGkgYW5kIFJva3UgMiBkZXZpY2VzLgogCi1jb25maWcgQVJDSF9CQ01fNTMwMVgKLQlib29sICJCcm9hZGNvbSBCQ000NzBYIC8gQkNNNTMwMVggQVJNIFNvQyIgaWYgQVJDSF9NVUxUSV9WNwotCXNlbGVjdCBBUk1fR0lDCi0Jc2VsZWN0IENBQ0hFX0wyWDAKLQlzZWxlY3QgSEFWRV9BUk1fU0NVIGlmIFNNUAotCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgU01QCi0Jc2VsZWN0IEFSTV9HTE9CQUxfVElNRVIKLQlzZWxlY3QgQ0xLU1JDX0FSTV9HTE9CQUxfVElNRVJfU0NIRURfQ0xPQ0sKLQloZWxwCi0JICBTdXBwb3J0IGZvciBCcm9hZGNvbSBCQ000NzBYIGFuZCBCQ001MzAxWCBTb0NzIHdpdGggQVJNIENQVSBjb3Jlcy4KLQotCSAgVGhpcyBpcyBhIG5ldHdvcmsgU29DIGxpbmUgbW9zdGx5IHVzZWQgaW4gaG9tZSByb3V0ZXJzIGFuZAotCSAgd2lmaSBhY2Nlc3MgcG9pbnRzLCBpdCdzIGludGVybmFsIG5hbWUgaXMgTm9ydGhzdGFyLgotCSAgVGhpcyBpbmNsdXNlZCB0aGUgZm9sbG93aW5nIFNvQzogQkNNNTMwMTAsIEJDTTUzMDExLCBCQ001MzAxMiwKLQkgIEJDTTUzMDE0LCBCQ001MzAxNSwgQkNNNTMwMTYsIEJDTTUzMDE3LCBCQ001MzAxOCwgQkNNNDcwNywKLQkgIEJDTTQ3MDggYW5kIEJDTTQ3MDkuCi0KLQkgIERvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgQkNNNDc2MCB3aGljaCBpcyBhIHRvdGFsbHkKLQkgIGRpZmZlcmVudCBTb0Mgb3Igd2l0aCB0aGUgb2xkZXIgQkNNNDdYWCBhbmQgQkNNNTNYWCBiYXNlZAotCSAgbmV0d29yayBTb0MgdXNpbmcgYSBNSVBTIENQVSwgdGhleSBhcmUgc3VwcG9ydGVkIGJ5IGFyY2gvbWlwcy9iY200N3h4Ci0KIGNvbmZpZyBBUkNIX0JDTV82M1hYCiAJYm9vbCAiQnJvYWRjb20gQkNNNjN4eCBEU0wgU29DIiBpZiBBUkNIX01VTFRJX1Y3CiAJZGVwZW5kcyBvbiBNTVUKQEAgLTExOCwxMyArMTM5LDExIEBACiAKIGNvbmZpZyBBUkNIX0JSQ01TVEIKIAlib29sICJCcm9hZGNvbSBCQ003WFhYIGJhc2VkIGJvYXJkcyIgaWYgQVJDSF9NVUxUSV9WNwotCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IEFSTV9HSUMKLQlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKLQlzZWxlY3QgSEFWRV9TTVAKIAlzZWxlY3QgSEFWRV9BUk1fQVJDSF9USU1FUgogCXNlbGVjdCBCUkNNU1RCX0dJU0JfQVJCCiAJc2VsZWN0IEJSQ01TVEJfTDJfSVJRCisJc2VsZWN0IEJDTTcxMjBfTDJfSVJRCiAJaGVscAogCSAgU2F5IFkgaWYgeW91IGludGVuZCB0byBydW4gdGhlIGtlcm5lbCBvbiBhIEJyb2FkY29tIEFSTS1iYXNlZCBTVEIKIAkgIGNoaXBzZXQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYmNtL01ha2VmaWxlCmluZGV4IDMwMGFlNGIuLjRjMzg2NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw5IEBACiAjIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAorIyBDeWdudXMKK29iai0kKENPTkZJR19BUkNIX0JDTV9DWUdOVVMpICs9ICBiY21fY3lnbnVzLm8KKwogIyBCQ00yODFYWAogb2JqLSQoQ09ORklHX0FSQ0hfQkNNXzI4MVhYKQkrPSBib2FyZF9iY20yODF4eC5vCiAKQEAgLTM4LDUgKzQxLDcgQEAKIG9iai0kKENPTkZJR19BUkNIX0JDTV82M1hYKQk6PSBiY202M3h4Lm8KIAogaWZlcSAoJChDT05GSUdfQVJDSF9CUkNNU1RCKSx5KQorQ0ZMQUdTX3BsYXRzbXAtYnJjbXN0Yi5vCSs9IC1tYXJjaD1hcm12Ny1hCiBvYmoteQkJCQkrPSBicmNtc3RiLm8KK29iai0kKENPTkZJR19TTVApCQkrPSBoZWFkc21wLWJyY21zdGIubyBwbGF0c21wLWJyY21zdGIubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtL2JjbV9jeWdudXMuYyBiL2FyY2gvYXJtL21hY2gtYmNtL2JjbV9jeWdudXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGRjNThiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vYmNtX2N5Z251cy5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCitzdGF0aWMgY29uc3QgY2hhciBjb25zdCAqYmNtX2N5Z251c19kdF9jb21wYXRbXSA9IHsKKwkiYnJjbSxjeWdudXMiLAorCU5VTEwsCit9OworCitEVF9NQUNISU5FX1NUQVJUKEJDTV9DWUdOVVNfRFQsICJCcm9hZGNvbSBDeWdudXMgU29DIikKKwkubDJjX2F1eF92YWwJPSAwLAorCS5sMmNfYXV4X21hc2sJPSB+MCwKKwkuZHRfY29tcGF0ID0gYmNtX2N5Z251c19kdF9jb21wYXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vYnJjbXN0Yi5oIGIvYXJjaC9hcm0vbWFjaC1iY20vYnJjbXN0Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMGMzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbS9icmNtc3RiLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JSQ01TVEJfSF9fCisjZGVmaW5lIF9fQlJDTVNUQl9IX18KKwordm9pZCBicmNtc3RiX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOworCisjZW5kaWYgLyogX19CUkNNU1RCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vaGVhZHNtcC1icmNtc3RiLlMgYi9hcmNoL2FybS9tYWNoLWJjbS9oZWFkc21wLWJyY21zdGIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTljMWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vaGVhZHNtcC1icmNtc3RiLlMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIFNNUCBib290IGNvZGUgZm9yIHNlY29uZGFyeSBDUFVzCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXRlZ3JhL2hlYWRzbXAuUworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOVklESUEsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisgICAgICAgIC5zZWN0aW9uICIudGV4dC5oZWFkIiwgImF4IgorCitFTlRSWShicmNtc3RiX3NlY29uZGFyeV9zdGFydHVwKQorICAgICAgICAvKgorICAgICAgICAgKiBFbnN1cmUgQ1BVIGlzIGluIGEgc2FuZSBzdGF0ZSBieSBkaXNhYmxpbmcgYWxsIElSUXMgYW5kIHN3aXRjaGluZworICAgICAgICAgKiBpbnRvIFNWQyBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0bW9kZQlQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERSwgcjAKKworICAgICAgICBibCAgICAgIHY3X2ludmFsaWRhdGVfbDEKKyAgICAgICAgYiAgICAgICBzZWNvbmRhcnlfc3RhcnR1cAorRU5EUFJPQyhicmNtc3RiX3NlY29uZGFyeV9zdGFydHVwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vcGxhdHNtcC1icmNtc3RiLmMgYi9hcmNoL2FybS9tYWNoLWJjbS9wbGF0c21wLWJyY21zdGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWM4N2EyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vcGxhdHNtcC1icmNtc3RiLmMKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisgKiBCcm9hZGNvbSBTVEIgQ1BVIFNNUCBhbmQgaG90cGx1ZyBzdXBwb3J0IGZvciBBUk0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY3AxNS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CisKKyNpbmNsdWRlICJicmNtc3RiLmgiCisKK2VudW0geworCVpPTkVfTUFOX0NMS0VOX01BU0sJCT0gQklUKDApLAorCVpPTkVfTUFOX1JFU0VUX0NOVExfTUFTSwk9IEJJVCgxKSwKKwlaT05FX01BTl9NRU1fUFdSX01BU0sJCT0gQklUKDQpLAorCVpPTkVfUkVTRVJWRURfMV9NQVNLCQk9IEJJVCg1KSwKKwlaT05FX01BTl9JU09fQ05UTF9NQVNLCQk9IEJJVCg2KSwKKwlaT05FX01BTlVBTF9DT05UUk9MX01BU0sJPSBCSVQoNyksCisJWk9ORV9QV1JfRE5fUkVRX01BU0sJCT0gQklUKDkpLAorCVpPTkVfUFdSX1VQX1JFUV9NQVNLCQk9IEJJVCgxMCksCisJWk9ORV9CTEtfUlNUX0FTU0VSVF9NQVNLCT0gQklUKDEyKSwKKwlaT05FX1BXUl9PRkZfU1RBVEVfTUFTSwkJPSBCSVQoMjUpLAorCVpPTkVfUFdSX09OX1NUQVRFX01BU0sJCT0gQklUKDI2KSwKKwlaT05FX0RQR19QV1JfU1RBVEVfTUFTSwkJPSBCSVQoMjgpLAorCVpPTkVfTUVNX1BXUl9TVEFURV9NQVNLCQk9IEJJVCgyOSksCisJWk9ORV9SRVNFVF9TVEFURV9NQVNLCQk9IEJJVCgzMSksCisJQ1BVMF9QV1JfWk9ORV9DVFJMX1JFRwkJPSAxLAorCUNQVV9SRVNFVF9DT05GSUdfUkVHCQk9IDIsCit9OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpjcHViaXVjdHJsX2Jsb2NrOworc3RhdGljIHZvaWQgX19pb21lbSAqaGlmX2NvbnRfYmxvY2s7CitzdGF0aWMgdTMyIGNwdTBfcHdyX3pvbmVfY3RybF9yZWc7CitzdGF0aWMgdTMyIGNwdV9yc3RfY2ZnX3JlZzsKK3N0YXRpYyB1MzIgaGlmX2NvbnRfcmVnOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisvKgorICogV2UgbXVzdCBxdWllc2NlIGEgZHlpbmcgQ1BVIGJlZm9yZSBpdCBjYW4gYmUga2lsbGVkIGJ5IHRoZSBib290IENQVS4gQmVjYXVzZQorICogb25lIG9yIG1vcmUgY2FjaGUgbWF5IGJlIGRpc2FibGVkLCB3ZSBtdXN0IGZsdXNoIHRvIGVuc3VyZSBjb2hlcmVuY3kuIFdlCisgKiBjYW5ub3QgdXNlIHRyYWRpdGlvbmwgY29tcGxldGlvbiBzdHJ1Y3R1cmVzIG9yIHNwaW5sb2NrcyBhcyB0aGV5IHJlbHkgb24KKyAqIGNvaGVyZW5jeS4KKyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoaW50LCBwZXJfY3B1X3N3X3N0YXRlKTsKKworc3RhdGljIGludCBwZXJfY3B1X3N3X3N0YXRlX3JkKHUzMiBjcHUpCit7CisJc3luY19jYWNoZV9yKFNISUZUX1BFUkNQVV9QVFIoJnBlcl9jcHVfc3dfc3RhdGUsIHBlcl9jcHVfb2Zmc2V0KGNwdSkpKTsKKwlyZXR1cm4gcGVyX2NwdShwZXJfY3B1X3N3X3N0YXRlLCBjcHUpOworfQorCitzdGF0aWMgdm9pZCBwZXJfY3B1X3N3X3N0YXRlX3dyKHUzMiBjcHUsIGludCB2YWwpCit7CisJZG1iKCk7CisJcGVyX2NwdShwZXJfY3B1X3N3X3N0YXRlLCBjcHUpID0gdmFsOworCXN5bmNfY2FjaGVfdyhTSElGVF9QRVJDUFVfUFRSKCZwZXJfY3B1X3N3X3N0YXRlLCBwZXJfY3B1X29mZnNldChjcHUpKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBlcl9jcHVfc3dfc3RhdGVfd3IodTMyIGNwdSwgaW50IHZhbCkgeyB9CisjZW5kaWYKKworc3RhdGljIHZvaWQgX19pb21lbSAqcHdyX2N0cmxfZ2V0X2Jhc2UodTMyIGNwdSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBjcHViaXVjdHJsX2Jsb2NrICsgY3B1MF9wd3Jfem9uZV9jdHJsX3JlZzsKKwliYXNlICs9IChjcHVfbG9naWNhbF9tYXAoY3B1KSAqIDQpOworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgdTMyIHB3cl9jdHJsX3JkKHUzMiBjcHUpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcHdyX2N0cmxfZ2V0X2Jhc2UoY3B1KTsKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChiYXNlKTsKK30KKworc3RhdGljIHZvaWQgcHdyX2N0cmxfd3IodTMyIGNwdSwgdTMyIHZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwd3JfY3RybF9nZXRfYmFzZShjcHUpOworCXdyaXRlbCh2YWwsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBjcHVfcnN0X2NmZ19zZXQodTMyIGNwdSwgaW50IHNldCkKK3sKKwl1MzIgdmFsOworCXZhbCA9IHJlYWRsX3JlbGF4ZWQoY3B1Yml1Y3RybF9ibG9jayArIGNwdV9yc3RfY2ZnX3JlZyk7CisJaWYgKHNldCkKKwkJdmFsIHw9IEJJVChjcHVfbG9naWNhbF9tYXAoY3B1KSk7CisJZWxzZQorCQl2YWwgJj0gfkJJVChjcHVfbG9naWNhbF9tYXAoY3B1KSk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBjcHViaXVjdHJsX2Jsb2NrICsgY3B1X3JzdF9jZmdfcmVnKTsKK30KKworc3RhdGljIHZvaWQgY3B1X3NldF9ib290X2FkZHIodTMyIGNwdSwgdW5zaWduZWQgbG9uZyBib290X2FkZHIpCit7CisJY29uc3QgaW50IHJlZ19vZnMgPSBjcHVfbG9naWNhbF9tYXAoY3B1KSAqIDg7CisJd3JpdGVsX3JlbGF4ZWQoMCwgaGlmX2NvbnRfYmxvY2sgKyBoaWZfY29udF9yZWcgKyByZWdfb2ZzKTsKKwl3cml0ZWxfcmVsYXhlZChib290X2FkZHIsIGhpZl9jb250X2Jsb2NrICsgaGlmX2NvbnRfcmVnICsgNCArIHJlZ19vZnMpOworfQorCitzdGF0aWMgdm9pZCBicmNtc3RiX2NwdV9ib290KHUzMiBjcHUpCit7CisJLyogTWFyayB0aGlzIENQVSBhcyAidXAiICovCisJcGVyX2NwdV9zd19zdGF0ZV93cihjcHUsIDEpOworCisJLyoKKwkgKiBTZXQgdGhlIHJlc2V0IHZlY3RvciB0byBwb2ludCB0byB0aGUgc2Vjb25kYXJ5X3N0YXJ0dXAKKwkgKiByb3V0aW5lCisJICovCisJY3B1X3NldF9ib290X2FkZHIoY3B1LCB2aXJ0X3RvX3BoeXMoYnJjbXN0Yl9zZWNvbmRhcnlfc3RhcnR1cCkpOworCisJLyogVW5oYWx0IHRoZSBjcHUgKi8KKwljcHVfcnN0X2NmZ19zZXQoY3B1LCAwKTsKK30KKworc3RhdGljIHZvaWQgYnJjbXN0Yl9jcHVfcG93ZXJfb24odTMyIGNwdSkKK3sKKwkvKgorCSAqIFRoZSBzZWNvbmRhcnkgY29yZXMgcG93ZXIgd2FzIGN1dCwgc28gd2UgbXVzdCBnbyB0aHJvdWdoCisJICogcG93ZXItb24gaW5pdGlhbGl6YXRpb24uCisJICovCisJdTMyIHRtcDsKKworCS8qIFJlcXVlc3Qgem9uZSBwb3dlciB1cCAqLworCXB3cl9jdHJsX3dyKGNwdSwgWk9ORV9QV1JfVVBfUkVRX01BU0spOworCisJLyogV2FpdCBmb3IgdGhlIHBvd2VyIHVwIEZTTSB0byBjb21wbGV0ZSAqLworCWRvIHsKKwkJdG1wID0gcHdyX2N0cmxfcmQoY3B1KTsKKwl9IHdoaWxlICghKHRtcCAmIFpPTkVfUFdSX09OX1NUQVRFX01BU0spKTsKK30KKworc3RhdGljIGludCBicmNtc3RiX2NwdV9nZXRfcG93ZXJfc3RhdGUodTMyIGNwdSkKK3sKKwlpbnQgdG1wID0gcHdyX2N0cmxfcmQoY3B1KTsKKwlyZXR1cm4gKHRtcCAmIFpPTkVfUkVTRVRfU1RBVEVfTUFTSykgPyAwIDogMTsKK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCitzdGF0aWMgdm9pZCBicmNtc3RiX2NwdV9kaWUodTMyIGNwdSkKK3sKKwl2N19leGl0X2NvaGVyZW5jeV9mbHVzaChhbGwpOworCisJcGVyX2NwdV9zd19zdGF0ZV93cihjcHUsIDApOworCisJLyogU2l0IGFuZCB3YWl0IHRvIGRpZSAqLworCXdmaSgpOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLi4uICovCisJd2hpbGUgKDEpCisJCTsKK30KKworc3RhdGljIGludCBicmNtc3RiX2NwdV9raWxsKHUzMiBjcHUpCit7CisJdTMyIHRtcDsKKworCXdoaWxlIChwZXJfY3B1X3N3X3N0YXRlX3JkKGNwdSkpCisJCTsKKworCS8qIFByb2dyYW0gem9uZSByZXNldCAqLworCXB3cl9jdHJsX3dyKGNwdSwgWk9ORV9SRVNFVF9TVEFURV9NQVNLIHwgWk9ORV9CTEtfUlNUX0FTU0VSVF9NQVNLIHwKKwkJCSAgICAgIFpPTkVfUFdSX0ROX1JFUV9NQVNLKTsKKworCS8qIFZlcmlmeSB6b25lIHJlc2V0ICovCisJdG1wID0gcHdyX2N0cmxfcmQoY3B1KTsKKwlpZiAoISh0bXAgJiBaT05FX1JFU0VUX1NUQVRFX01BU0spKQorCQlwcl9lcnIoIiVzOiBab25lIHJlc2V0IGJpdCBmb3IgQ1BVICVkIG5vdCBhc3NlcnRlZCFcbiIsCisJCQlfX2Z1bmNfXywgY3B1KTsKKworCS8qIFdhaXQgZm9yIHBvd2VyIGRvd24gKi8KKwlkbyB7CisJCXRtcCA9IHB3cl9jdHJsX3JkKGNwdSk7CisJfSB3aGlsZSAoISh0bXAgJiBaT05FX1BXUl9PRkZfU1RBVEVfTUFTSykpOworCisJLyogRmx1c2ggcGlwZWxpbmUgYmVmb3JlIHJlc2V0dGluZyBDUFUgKi8KKwltYigpOworCisJLyogQXNzZXJ0IHJlc2V0IG9uIHRoZSBDUFUgKi8KKwljcHVfcnN0X2NmZ19zZXQoY3B1LCAxKTsKKworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2hpZmNwdWJpdWN0cmxfcmVncyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWludCByYyA9IDA7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN5c2Nvbl9ucCA9IE5VTEw7CisKKwluYW1lID0gInN5c2Nvbi1jcHUiOworCisJc3lzY29uX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgbmFtZSwgMCk7CisJaWYgKCFzeXNjb25fbnApIHsKKwkJcHJfZXJyKCJjYW4ndCBmaW5kIHBoYW5kbGUgJXNcbiIsIG5hbWUpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwljcHViaXVjdHJsX2Jsb2NrID0gb2ZfaW9tYXAoc3lzY29uX25wLCAwKTsKKwlpZiAoIWNwdWJpdWN0cmxfYmxvY2spIHsKKwkJcHJfZXJyKCJpb21hcCBmYWlsZWQgZm9yIGNwdWJpdWN0cmxfYmxvY2tcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCBuYW1lLCBDUFUwX1BXUl9aT05FX0NUUkxfUkVHLAorCQkJCQkmY3B1MF9wd3Jfem9uZV9jdHJsX3JlZyk7CisJaWYgKHJjKSB7CisJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgMXN0IGVudHJ5IGZyb20gJXMgcHJvcGVydHkgKCVkKVxuIiwgbmFtZSwKKwkJCXJjKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgbmFtZSwgQ1BVX1JFU0VUX0NPTkZJR19SRUcsCisJCQkJCSZjcHVfcnN0X2NmZ19yZWcpOworCWlmIChyYykgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIDJuZCBlbnRyeSBmcm9tICVzIHByb3BlcnR5ICglZClcbiIsIG5hbWUsCisJCQlyYyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBjbGVhbnVwOworCX0KKworY2xlYW51cDoKKwlvZl9ub2RlX3B1dChzeXNjb25fbnApOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfaGlmY29udF9yZWdzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IHJjID0gMDsKKwljaGFyICpuYW1lOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3lzY29uX25wID0gTlVMTDsKKworCW5hbWUgPSAic3lzY29uLWNvbnQiOworCisJc3lzY29uX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgbmFtZSwgMCk7CisJaWYgKCFzeXNjb25fbnApIHsKKwkJcHJfZXJyKCJjYW4ndCBmaW5kIHBoYW5kbGUgJXNcbiIsIG5hbWUpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwloaWZfY29udF9ibG9jayA9IG9mX2lvbWFwKHN5c2Nvbl9ucCwgMCk7CisJaWYgKCFoaWZfY29udF9ibG9jaykgeworCQlwcl9lcnIoImlvbWFwIGZhaWxlZCBmb3IgaGlmX2NvbnRfYmxvY2tcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBPZmZzZXQgaXMgYXQgdG9wIG9mIGhpZl9jb250X2Jsb2NrICovCisJaGlmX2NvbnRfcmVnID0gMDsKKworY2xlYW51cDoKKwlvZl9ub2RlX3B1dChzeXNjb25fbnApOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGJyY21zdGJfY3B1X2N0cmxfc2V0dXAodW5zaWduZWQgaW50IG1heF9jcHVzKQoreworCWludCByYzsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWNoYXIgKm5hbWU7CisKKwluYW1lID0gImJyY20sYnJjbXN0Yi1zbXBib290IjsKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsIG5hbWUpOworCWlmICghbnApIHsKKwkJcHJfZXJyKCJjYW4ndCBmaW5kIGNvbXBhdGlibGUgbm9kZSAlc1xuIiwgbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlyYyA9IHNldHVwX2hpZmNwdWJpdWN0cmxfcmVncyhucCk7CisJaWYgKHJjKQorCQlyZXR1cm47CisKKwlyYyA9IHNldHVwX2hpZmNvbnRfcmVncyhucCk7CisJaWYgKHJjKQorCQlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgYnJjbXN0Yl9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCit7CisJLyogTWlzc2luZyB0aGUgYnJjbSxicmNtc3RiLXNtcGJvb3QgRFQgbm9kZT8gKi8KKwlpZiAoIWNwdWJpdWN0cmxfYmxvY2sgfHwgIWhpZl9jb250X2Jsb2NrKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEJyaW5nIHVwIHBvd2VyIHRvIHRoZSBjb3JlIGlmIG5lY2Vzc2FyeSAqLworCWlmIChicmNtc3RiX2NwdV9nZXRfcG93ZXJfc3RhdGUoY3B1KSA9PSAwKQorCQlicmNtc3RiX2NwdV9wb3dlcl9vbihjcHUpOworCisJYnJjbXN0Yl9jcHVfYm9vdChjcHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgYnJjbXN0Yl9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CisJLnNtcF9wcmVwYXJlX2NwdXMJPSBicmNtc3RiX2NwdV9jdHJsX3NldHVwLAorCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSBicmNtc3RiX2Jvb3Rfc2Vjb25kYXJ5LAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCS5jcHVfa2lsbAkJPSBicmNtc3RiX2NwdV9raWxsLAorCS5jcHVfZGllCQk9IGJyY21zdGJfY3B1X2RpZSwKKyNlbmRpZgorfTsKKworQ1BVX01FVEhPRF9PRl9ERUNMQVJFKGJyY21zdGJfc21wLCAiYnJjbSxicmFobWEtYjE1IiwgJmJyY21zdGJfc21wX29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJlcmxpbi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1iZXJsaW4vS2NvbmZpZwppbmRleCAyNGY4NWJlLi4zZTQwYTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJlcmxpbi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYmVybGluL0tjb25maWcKQEAgLTEsMTAgKzEsMTEgQEAKIG1lbnVjb25maWcgQVJDSF9CRVJMSU4KIAlib29sICJNYXJ2ZWxsIEJlcmxpbiBTb0NzIiBpZiBBUkNIX01VTFRJX1Y3CisJc2VsZWN0IEFSQ0hfSEFTX1JFU0VUX0NPTlRST0xMRVIKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgQVJNX0dJQwotCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IERXX0FQQl9JQ1RMCiAJc2VsZWN0IERXX0FQQl9USU1FUl9PRgorCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IFBJTkNUUkwKIAogaWYgQVJDSF9CRVJMSU4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYwppbmRleCA1NjIzMTMxLi5mOGY2MmZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4MzAtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODMwLWV2bS5jCkBAIC04MCw4ICs4MCw4IEBACiAJCQkJICAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCQkgICAgIk9IQ0kgb3Zlci1jdXJyZW50IGluZGljYXRvciIsIE5VTEwpOwogCQlpZiAoZXJyb3IpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgcmVxdWVzdCBJUlEgdG8gd2F0Y2ggIgotCQkJICAgICAgICJvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZXNcbiIsIF9fZnVuY19fKTsKKwkJCXByX2VycigiJXM6IGNvdWxkIG5vdCByZXF1ZXN0IElSUSB0byB3YXRjaCBvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZXNcbiIsCisJCQkgICAgICAgX19mdW5jX18pOwogCX0gZWxzZQogCQlmcmVlX2lycShpcnEsIE5VTEwpOwogCkBAIC0xNDUsOCArMTQ1LDcgQEAKIAkvKiBVU0JfUkVGQ0xLSU4gaXMgbm90IHVzZWQuICovCiAJcmV0ID0gZGF2aW5jaV9jZmdfcmVnKERBODMwX1VTQjBfRFJWVkJVUyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiJXM6IFVTQiAyLjAgUGluTXV4IHNldHVwIGZhaWxlZDogJWRcbiIsCi0JCQkgICBfX2Z1bmNfXywgcmV0KTsKKwkJcHJfd2FybigiJXM6IFVTQiAyLjAgUGluTXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCWVsc2UgewogCQkvKgogCQkgKiBUUFMyMDY1IHN3aXRjaCBAIDVWIHN1cHBsaWVzIDEgQSAoc3VzdGFpbnMgMS41IEEpLApAQCAtMTU0LDM3ICsxNTMsMzUgQEAKIAkJICovCiAJCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3VzYjIwKDEwMDAsIDMpOwogCQlpZiAocmV0KQotCQkJcHJfd2FybmluZygiJXM6IFVTQiAyLjAgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQkJICAgX19mdW5jX18sIHJldCk7CisJCQlwcl93YXJuKCIlczogVVNCIDIuMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKIAl9CiAKIAlyZXQgPSBkYXZpbmNpX2NmZ19yZWdfbGlzdChkYTgzMF9ldm1fdXNiMTFfcGlucyk7CiAJaWYgKHJldCkgewotCQlwcl93YXJuaW5nKCIlczogVVNCIDEuMSBQaW5NdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwKLQkJCSAgIF9fZnVuY19fLCByZXQpOworCQlwcl93YXJuKCIlczogVVNCIDEuMSBQaW5NdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAJCXJldHVybjsKIAl9CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoT05fQkRfVVNCX0RSViwgIk9OX0JEX1VTQl9EUlYiKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIFVTQiAxLjEgcG9ydCAiCi0JCSAgICAgICAicG93ZXIgY29udHJvbDogJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBHUElPIGZvciBVU0IgMS4xIHBvcnQgcG93ZXIgY29udHJvbDogJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcmV0KTsKIAkJcmV0dXJuOwogCX0KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT05fQkRfVVNCX0RSViwgMCk7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoT05fQkRfVVNCX09WQywgIk9OX0JEX1VTQl9PVkMiKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIFVTQiAxLjEgcG9ydCAiCi0JCSAgICAgICAib3Zlci1jdXJyZW50IGluZGljYXRvcjogJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBHUElPIGZvciBVU0IgMS4xIHBvcnQgb3Zlci1jdXJyZW50IGluZGljYXRvcjogJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcmV0KTsKIAkJcmV0dXJuOwogCX0KIAlncGlvX2RpcmVjdGlvbl9pbnB1dChPTl9CRF9VU0JfT1ZDKTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3VzYjExKCZkYTgzMF9ldm1fdXNiMTFfcGRhdGEpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoIiVzOiBVU0IgMS4xIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJICAgX19mdW5jX18sIHJldCk7CisJCXByX3dhcm4oIiVzOiBVU0IgMS4xIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIH0KIAogc3RhdGljIGNvbnN0IHNob3J0IGRhODMwX2V2bV9tY2FzcDFfcGluc1tdID0gewpAQCAtMjUyLDMxICsyNDksMjkgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2V2bV9tbWNfc2RfcGlucyk7CiAJaWYgKHJldCkgewotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogbW1jL3NkIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBtbWMvc2QgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCQlyZXR1cm47CiAJfQogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KERBODMwX01NQ1NEX1dQX1BJTiwgIk1NQyBXUCIpOwogCWlmIChyZXQpIHsKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAotCQkJICAgREE4MzBfTU1DU0RfV1BfUElOKTsKKwkJcHJfd2FybigiJXM6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAorCQkJX19mdW5jX18sIERBODMwX01NQ1NEX1dQX1BJTik7CiAJCXJldHVybjsKIAl9CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoREE4MzBfTU1DU0RfV1BfUElOKTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdChEQTgzMF9NTUNTRF9DRF9QSU4sICJNTUMgQ0RcbiIpOwogCWlmIChyZXQpIHsKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAotCQkJICAgREE4MzBfTU1DU0RfQ0RfUElOKTsKKwkJcHJfd2FybigiJXM6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAorCQkJX19mdW5jX18sIERBODMwX01NQ1NEX0NEX1BJTik7CiAJCXJldHVybjsKIAl9CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoREE4MzBfTU1DU0RfQ0RfUElOKTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX21tY3NkMCgmZGE4MzBfZXZtX21tY19jb25maWcpOwogCWlmIChyZXQpIHsKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IG1tYy9zZCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogbW1jL3NkIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAkJZ3Bpb19mcmVlKERBODMwX01NQ1NEX1dQX1BJTik7CiAJfQogfQpAQCAtNDA0LDIzICszOTksMjEgQEAKIAlpbnQgcmV0OwogCiAJaWYgKEhBU19NTUMpIHsKLQkJcHJfd2FybmluZygiV0FSTklORzogYm90aCBNTUMvU0QgYW5kIE5BTkQgYXJlICIKLQkJCQkiZW5hYmxlZCwgYnV0IHRoZXkgc2hhcmUgQUVNSUYgcGlucy5cbiIKLQkJCQkiXHREaXNhYmxlIE1NQy9TRCBmb3IgTkFORCBzdXBwb3J0LlxuIik7CisJCXByX3dhcm4oIldBUk5JTkc6IGJvdGggTU1DL1NEIGFuZCBOQU5EIGFyZSBlbmFibGVkLCBidXQgdGhleSBzaGFyZSBBRU1JRiBwaW5zXG4iCisJCQkiXHREaXNhYmxlIE1NQy9TRCBmb3IgTkFORCBzdXBwb3J0XG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2V2bV9lbWlmMjVfcGlucyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGVtaWYyNSBtdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogZW1pZjI1IG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGE4MzBfZXZtX25hbmRfZGV2aWNlKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogTkFORCBkZXZpY2Ugbm90IHJlZ2lzdGVyZWQuXG4iKTsKKwkJcHJfd2FybigiJXM6IE5BTkQgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZGF2aW5jaV9hZW1pZl9zZXR1cCgmZGE4MzBfZXZtX25hbmRfZGV2aWNlKSkKLQkJcHJfd2FybigiJXM6IENhbm5vdCBjb25maWd1cmUgQUVNSUYuXG4iLCBfX2Z1bmNfXyk7CisJCXByX3dhcm4oIiVzOiBDYW5ub3QgY29uZmlndXJlIEFFTUlGXG4iLCBfX2Z1bmNfXyk7CiAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQobXV4X21vZGUsIDEpOwogfQpAQCAtNDM1LDEyICs0MjgsMTEgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2xjZGNudGxfcGlucyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGxjZGNudGwgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsCi0JCQkJcmV0KTsKKwkJcHJfd2FybigiJXM6IGxjZGNudGwgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfbGNkYygmc2hhcnBfbGNkMDM1cTNkZzAxX3BkYXRhKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogbGNkIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oIiVzOiBsY2Qgc2V0dXAgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQobXV4X21vZGUsIDApOwogfQpAQCAtNTk4LDIyICs1OTAsMTkgQEAKIAogCXJldCA9IGRhODMwX3JlZ2lzdGVyX2dwaW8oKTsKIAlpZiAocmV0KQotCQlwcl93YXJuKCJkYTgzMF9ldm1faW5pdDogR1BJTyBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oIiVzOiBHUElPIGluaXQgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlyZXQgPSBkYTgzMF9yZWdpc3Rlcl9lZG1hKGRhODMwX2VkbWFfcnN2KTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlyZXQgPSBkYXZpbmNpX2NmZ19yZWdfbGlzdChkYTgzMF9pMmMwX3BpbnMpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODMwX2V2bV9pbml0OiBpMmMwIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBpMmMwIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX2kyYygwLCAmZGE4MzBfZXZtX2kyY18wX3BkYXRhKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogaTJjMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogaTJjMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlkYTgzMF9ldm1fdXNiX2luaXQoKTsKIApAQCAtNjIyLDE4ICs2MTEsMTYgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2NwZ21hY19waW5zKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogY3BnbWFjIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBjcGdtYWMgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfZW1hYygpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODMwX2V2bV9pbml0OiBlbWFjIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBlbWFjIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3dhdGNoZG9nKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IHdhdGNoZG9nIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiB3YXRjaGRvZyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCiAJZGF2aW5jaV9zZXJpYWxfaW5pdChkYTh4eF9zZXJpYWxfZGV2aWNlKTsKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBkYTgzMF9ldm1faTJjX2RldmljZXMsCkBAIC02NDEsOCArNjI4LDcgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2V2bV9tY2FzcDFfcGlucyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IG1jYXNwMSBtdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogbWNhc3AxIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCWRhOHh4X3JlZ2lzdGVyX21jYXNwKDEsICZkYTgzMF9ldm1fc25kX2RhdGEpOwogCkBAIC02NTAsMTggKzYzNiwxNyBAQAogCiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfcnRjKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IHJ0YyBzZXR1cCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlwcl93YXJuKCIlczogcnRjIHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCiAJcmV0ID0gc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGE4MzBldm1fc3BpX2luZm8sCiAJCQkJICAgICAgQVJSQVlfU0laRShkYTgzMGV2bV9zcGlfaW5mbykpOwogCWlmIChyZXQpCi0JCXByX3dhcm4oIiVzOiBzcGkgaW5mbyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sCi0JCQlyZXQpOworCQlwcl93YXJuKCIlczogc3BpIGluZm8gcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3NwaV9idXMoMCwgQVJSQVlfU0laRShkYTgzMGV2bV9zcGlfaW5mbykpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODMwX2V2bV9pbml0OiBzcGkgMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCSAgIHJldCk7CisJCXByX3dhcm4oIiVzOiBzcGkgMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jCmluZGV4IGZhMTE0MTUuLjZiNWE5N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMKQEAgLTQ1Miw4ICs0NTIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBEQTg1MF9OX1VJX1BCOyBpKyspIHsKIAkJYnV0dG9uID0gJmRhODUwX2V2bV91aV9rZXlzW2ldOwogCQlidXR0b24tPmNvZGUgPSBLRVlfRjggLSBpOwotCQlidXR0b24tPmRlc2MgPSAoY2hhciAqKQotCQkJCWRhODUwX2V2bV91aV9leHBbREE4NTBfRVZNX1VJX0VYUF9QQjggKyBpXTsKKwkJYnV0dG9uLT5kZXNjID0gZGE4NTBfZXZtX3VpX2V4cFtEQTg1MF9FVk1fVUlfRVhQX1BCOCArIGldOwogCQlidXR0b24tPmdwaW8gPSBncGlvICsgREE4NTBfRVZNX1VJX0VYUF9QQjggKyBpOwogCX0KIH0KQEAgLTYyOCwxNSArNjI3LDEzIEBACiAJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbjsKIAogCWJ1dHRvbiA9ICZkYTg1MF9ldm1fYmJfa2V5c1swXTsKLQlidXR0b24tPmRlc2MgPSAoY2hhciAqKQotCQlkYTg1MF9ldm1fYmJfZXhwW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9QQjFdOworCWJ1dHRvbi0+ZGVzYyA9IGRhODUwX2V2bV9iYl9leHBbREE4NTBfRVZNX0JCX0VYUF9VU0VSX1BCMV07CiAJYnV0dG9uLT5ncGlvID0gZ3BpbyArIERBODUwX0VWTV9CQl9FWFBfVVNFUl9QQjE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgREE4NTBfTl9CQl9VU0VSX1NXOyBpKyspIHsKIAkJYnV0dG9uID0gJmRhODUwX2V2bV9iYl9rZXlzW2kgKyAxXTsKIAkJYnV0dG9uLT5jb2RlID0gU1dfTElEICsgaTsKLQkJYnV0dG9uLT5kZXNjID0gKGNoYXIgKikKLQkJCQlkYTg1MF9ldm1fYmJfZXhwW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzEgKyBpXTsKKwkJYnV0dG9uLT5kZXNjID0gZGE4NTBfZXZtX2JiX2V4cFtEQTg1MF9FVk1fQkJfRVhQX1VTRVJfU1cxICsgaV07CiAJCWJ1dHRvbi0+Z3BpbyA9IGdwaW8gKyBEQTg1MF9FVk1fQkJfRVhQX1VTRVJfU1cxICsgaTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ0eC1ldm0uYwppbmRleCBlNTgzZTU4Li4xYTA4OThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NHgtZXZtLmMKQEAgLTc2Nyw5ICs3NjcsOCBAQAogCiAJaWYgKEhBU19BVEEpIHsKIAkJaWYgKEhBU19OQU5EIHx8IEhBU19OT1IpCi0JCQlwcl93YXJuaW5nKCJXQVJOSU5HOiBib3RoIElERSBhbmQgRmxhc2ggYXJlICIKLQkJCQkiZW5hYmxlZCwgYnV0IHRoZXkgc2hhcmUgQUVNSUYgcGlucy5cbiIKLQkJCQkiXHREaXNhYmxlIElERSBmb3IgTkFORC9OT1Igc3VwcG9ydC5cbiIpOworCQkJcHJfd2FybigiV0FSTklORzogYm90aCBJREUgYW5kIEZsYXNoIGFyZSBlbmFibGVkLCBidXQgdGhleSBzaGFyZSBBRU1JRiBwaW5zXG4iCisJCQkJIlx0RGlzYWJsZSBJREUgZm9yIE5BTkQvTk9SIHN1cHBvcnRcbiIpOwogCQlkYXZpbmNpX2luaXRfaWRlKCk7CiAJfSBlbHNlIGlmIChIQVNfTkFORCB8fCBIQVNfTk9SKSB7CiAJCWRhdmluY2lfY2ZnX3JlZyhETTY0NFhfSFBJRU5fRElTQUJMRSk7CkBAIC03ODAsMTMgKzc3OSwxMiBAQAogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYXZpbmNpX2V2bV9uYW5kZmxhc2hfZGV2aWNlKTsKIAogCQkJaWYgKGRhdmluY2lfYWVtaWZfc2V0dXAoJmRhdmluY2lfZXZtX25hbmRmbGFzaF9kZXZpY2UpKQotCQkJCXByX3dhcm4oIiVzOiBDYW5ub3QgY29uZmlndXJlIEFFTUlGLlxuIiwKKwkJCQlwcl93YXJuKCIlczogQ2Fubm90IGNvbmZpZ3VyZSBBRU1JRlxuIiwKIAkJCQkJX19mdW5jX18pOwogCiAJCQlldm1fbGVkc1s3XS5kZWZhdWx0X3RyaWdnZXIgPSAibmFuZC1kaXNrIjsKIAkJCWlmIChIQVNfTk9SKQotCQkJCXByX3dhcm5pbmcoIldBUk5JTkc6IGJvdGggTkFORCBhbmQgTk9SIGZsYXNoICIKLQkJCQkJImFyZSBlbmFibGVkOyBkaXNhYmxlIG9uZSBvZiB0aGVtLlxuIik7CisJCQkJcHJfd2FybigiV0FSTklORzogYm90aCBOQU5EIGFuZCBOT1IgZmxhc2ggYXJlIGVuYWJsZWQ7IGRpc2FibGUgb25lIG9mIHRoZW0uXG4iKTsKIAkJfSBlbHNlIGlmIChIQVNfTk9SKQogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYXZpbmNpX2V2bV9ub3JmbGFzaF9kZXZpY2UpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYwppbmRleCA5NmZjMDBhLi44Y2ZiZmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbWl0eW9tYXBsMTM4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jCkBAIC04LDYgKzgsOCBAQAogICogYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgIk1pdHlPTUFQTDEzODogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CkBAIC0xMDcsNyArMTA5LDcgQEAKIAogCXJldCA9IGRhODUwX3JlZ2lzdGVyX2NwdWZyZXEoInBsbDBfc3lzY2xrMyIpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImNwdWZyZXEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oImNwdWZyZXEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiB9CiAjZWxzZQogc3RhdGljIHZvaWQgbWl0eW9tYXBsMTM4X2NwdWZyZXFfaW5pdChjb25zdCBjaGFyICpwYXJ0bnVtKSB7IH0KQEAgLTEyMSwzMyArMTIzLDMxIEBACiAKIAlyZXQgPSBhLT5yZWFkKGEsIChjaGFyICopJmZhY3RvcnlfY29uZmlnLCAwLCBzaXplb2YoZmFjdG9yeV9jb25maWcpKTsKIAlpZiAocmV0ICE9IHNpemVvZihzdHJ1Y3QgZmFjdG9yeV9jb25maWcpKSB7Ci0JCXByX3dhcm5pbmcoIk1pdHlPTUFQTDEzODogUmVhZCBGYWN0b3J5IENvbmZpZyBGYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIlJlYWQgRmFjdG9yeSBDb25maWcgRmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBiYWRfY29uZmlnOwogCX0KIAogCWlmIChmYWN0b3J5X2NvbmZpZy5tYWdpYyAhPSBGQUNUT1JZX0NPTkZJR19NQUdJQykgewotCQlwcl93YXJuaW5nKCJNaXR5T01BUEwxMzg6IEZhY3RvcnkgQ29uZmlnIE1hZ2ljIFdyb25nICglWClcbiIsCi0JCQkJZmFjdG9yeV9jb25maWcubWFnaWMpOworCQlwcl93YXJuKCJGYWN0b3J5IENvbmZpZyBNYWdpYyBXcm9uZyAoJVgpXG4iLAorCQkJZmFjdG9yeV9jb25maWcubWFnaWMpOwogCQlnb3RvIGJhZF9jb25maWc7CiAJfQogCiAJaWYgKGZhY3RvcnlfY29uZmlnLnZlcnNpb24gIT0gRkFDVE9SWV9DT05GSUdfVkVSU0lPTikgewotCQlwcl93YXJuaW5nKCJNaXR5T01BUEwxMzg6IEZhY3RvcnkgQ29uZmlnIFZlcnNpb24gV3JvbmcgKCVYKVxuIiwKLQkJCQlmYWN0b3J5X2NvbmZpZy52ZXJzaW9uKTsKKwkJcHJfd2FybigiRmFjdG9yeSBDb25maWcgVmVyc2lvbiBXcm9uZyAoJVgpXG4iLAorCQkJZmFjdG9yeV9jb25maWcudmVyc2lvbik7CiAJCWdvdG8gYmFkX2NvbmZpZzsKIAl9CiAKLQlwcl9pbmZvKCJNaXR5T01BUEwxMzg6IEZvdW5kIE1BQyA9ICVwTVxuIiwgZmFjdG9yeV9jb25maWcubWFjKTsKKwlwcl9pbmZvKCJGb3VuZCBNQUMgPSAlcE1cbiIsIGZhY3RvcnlfY29uZmlnLm1hYyk7CiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZmFjdG9yeV9jb25maWcubWFjKSkKIAkJbWVtY3B5KHNvY19pbmZvLT5lbWFjX3BkYXRhLT5tYWNfYWRkciwKIAkJCWZhY3RvcnlfY29uZmlnLm1hYywgRVRIX0FMRU4pOwogCWVsc2UKLQkJcHJfd2FybmluZygiTWl0eU9NQVBMMTM4OiBJbnZhbGlkIE1BQyBmb3VuZCAiCi0JCQkJImluIGZhY3RvcnkgY29uZmlnIGJsb2NrXG4iKTsKKwkJcHJfd2FybigiSW52YWxpZCBNQUMgZm91bmQgaW4gZmFjdG9yeSBjb25maWcgYmxvY2tcbiIpOwogCiAJcGFydG51bSA9IGZhY3RvcnlfY29uZmlnLnBhcnRudW07Ci0JcHJfaW5mbygiTWl0eU9NQVBMMTM4OiBQYXJ0IE51bWJlciA9ICVzXG4iLCBwYXJ0bnVtKTsKKwlwcl9pbmZvKCJQYXJ0IE51bWJlciA9ICVzXG4iLCBwYXJ0bnVtKTsKIAogYmFkX2NvbmZpZzoKIAkvKiBkZWZhdWx0IG1heGltdW0gc3BlZWQgaXMgdmFsaWQgZm9yIGFsbCBwbGF0Zm9ybXMgKi8KQEAgLTQzNSw3ICs0MzUsNyBAQAogCQkJCSBBUlJBWV9TSVpFKG1pdHlvbWFwbDEzOF9kZXZpY2VzKSk7CiAKIAlpZiAoZGF2aW5jaV9hZW1pZl9zZXR1cCgmbWl0eW9tYXBsMTM4X25hbmRmbGFzaF9kZXZpY2UpKQotCQlwcl93YXJuKCIlczogQ2Fubm90IGNvbmZpZ3VyZSBBRU1JRi5cbiIsIF9fZnVuY19fKTsKKwkJcHJfd2FybigiJXM6IENhbm5vdCBjb25maWd1cmUgQUVNSUZcbiIsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIGNvbnN0IHNob3J0IG1pdHlvbWFwX21paV9waW5zW10gPSB7CkBAIC00NzgsNyArNDc4LDcgQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCXByX3dhcm5pbmcoIm1paS9ybWlpIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlwcl93YXJuKCJtaWkvcm1paSBtdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDg5LDcgKzQ4OSw3IEBACiAKIAlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9lbWFjKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZW1hYyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiZW1hYyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBkYXZpbmNpX3BtX2NvbmZpZyBkYTg1MF9wbV9wZGF0YSA9IHsKQEAgLTUxMSwyMSArNTExLDIxIEBACiAJLyogZm9yIG5vdywgbm8gc3BlY2lhbCBFRE1BIGNoYW5uZWxzIGFyZSByZXNlcnZlZCAqLwogCXJldCA9IGRhODUwX3JlZ2lzdGVyX2VkbWEoTlVMTCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3dhdGNoZG9nKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygid2F0Y2hkb2cgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oIndhdGNoZG9nIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCiAJZGF2aW5jaV9zZXJpYWxfaW5pdChkYTh4eF9zZXJpYWxfZGV2aWNlKTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX2kyYygwLCAmbWl0eW9tYXBfaTJjXzBfcGRhdGEpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImkyYzAgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oImkyYzAgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiAKIAlyZXQgPSBwbWljX3RwczY1MDIzX2luaXQoKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJUUFM2NTAyMyBQTUlDIGluaXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiVFBTNjUwMjMgUE1JQyBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CiAKIAltaXR5b21hcGwxMzhfc2V0dXBfbmFuZCgpOwogCkBAIC01MzcsMjIgKzUzNywyMSBAQAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3NwaV9idXMoMSwKIAkJCQkgICAgIEFSUkFZX1NJWkUobWl0eW9tYXBsMTM4X3NwaV9mbGFzaF9pbmZvKSk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygic3BpIDEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oInNwaSAxIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCiAJbWl0eW9tYXBsMTM4X2NvbmZpZ19lbWFjKCk7CiAKIAlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9ydGMoKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJydGMgc2V0dXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigicnRjIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7CiAKIAlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9jcHVpZGxlKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiY3B1aWRsZSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiY3B1aWRsZSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAogCXJldCA9IGRhODUwX3JlZ2lzdGVyX3BtKCZkYTg1MF9wbV9kZXZpY2UpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODUwX2V2bV9pbml0OiBzdXNwZW5kIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oInN1c3BlbmQgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW5ldXJvcy1vc2QyLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYwppbmRleCBiYjY4MGFmLi44ZmNkY2Y4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYwpAQCAtMTgzLDkgKzE4Myw4IEBACiAKIAlpZiAoSEFTX0FUQSkgewogCQlpZiAoSEFTX05BTkQpCi0JCQlwcl93YXJuaW5nKCJXQVJOSU5HOiBib3RoIElERSBhbmQgRmxhc2ggYXJlICIKLQkJCQkiZW5hYmxlZCwgYnV0IHRoZXkgc2hhcmUgQUVNSUYgcGlucy5cbiIKLQkJCQkiXHREaXNhYmxlIElERSBmb3IgTkFORC9OT1Igc3VwcG9ydC5cbiIpOworCQkJcHJfd2FybigiV0FSTklORzogYm90aCBJREUgYW5kIEZsYXNoIGFyZSBlbmFibGVkLCBidXQgdGhleSBzaGFyZSBBRU1JRiBwaW5zXG4iCisJCQkJIlx0RGlzYWJsZSBJREUgZm9yIE5BTkQvTk9SIHN1cHBvcnRcbiIpOwogCQlkYXZpbmNpX2luaXRfaWRlKCk7CiAJfSBlbHNlIGlmIChIQVNfTkFORCkgewogCQlkYXZpbmNpX2NmZ19yZWcoRE02NDRYX0hQSUVOX0RJU0FCTEUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYwppbmRleCA5ODVlNWZkLi5jNzBiYjBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYwpAQCAtNTY0LDcgKzU2NCw3IEBACiAKIAlyZWZjbGsgPSBjbGtfZ2V0KE5VTEwsICJyZWYiKTsKIAlpZiAoSVNfRVJSKHJlZmNsaykpIHsKLQkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGdldCByZWZlcmVuY2UgY2xvY2suXG4iLCBfX2Z1bmNfXyk7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBnZXQgcmVmZXJlbmNlIGNsb2NrXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBQVFJfRVJSKHJlZmNsayk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvbXV4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvbXV4LmMKaW5kZXggZjM0YThkYy4uYThlYjkwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9tdXguYwpAQCAtMTUsNiArMTUsOSBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cy4KICAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC00Niw3ICs0OSw3IEBACiAJfQogCiAJaWYgKGluZGV4ID49IHNvY19pbmZvLT5waW5tdXhfcGluc19udW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIHBpbiBtdXggaW5kZXg6ICVsdSAoJWx1KVxuIiwKKwkJcHJfZXJyKCJJbnZhbGlkIHBpbiBtdXggaW5kZXg6ICVsdSAoJWx1KVxuIiwKIAkJICAgICAgIGluZGV4LCBzb2NfaW5mby0+cGlubXV4X3BpbnNfbnVtKTsKIAkJZHVtcF9zdGFjaygpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU1LDcgKzU4LDcgQEAKIAljZmcgPSAmc29jX2luZm8tPnBpbm11eF9waW5zW2luZGV4XTsKIAogCWlmIChjZmctPm5hbWUgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIk5vIGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIGluZGV4XG4iKTsKKwkJcHJfZXJyKCJObyBlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBpbmRleFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODIsMTUgKzg1LDE1IEBACiAKIAlpZiAod2FybikgewogI2lmZGVmIENPTkZJR19EQVZJTkNJX01VWF9XQVJOSU5HUwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJNVVg6IGluaXRpYWxpemVkICVzXG4iLCBjZmctPm5hbWUpOworCQlwcl93YXJuKCJpbml0aWFsaXplZCAlc1xuIiwgY2ZnLT5uYW1lKTsKICNlbmRpZgogCX0KIAogI2lmZGVmIENPTkZJR19EQVZJTkNJX01VWF9ERUJVRwogCWlmIChjZmctPmRlYnVnIHx8IHdhcm4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTVVYOiBTZXR0aW5nIHJlZ2lzdGVyICVzXG4iLCBjZmctPm5hbWUpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIJICAgJXMgKDB4JTA4eCkgPSAweCUwOHggLT4gMHglMDh4XG4iLAotCQkgICAgICAgY2ZnLT5tdXhfcmVnX25hbWUsIGNmZy0+bXV4X3JlZywgcmVnX29yaWcsIHJlZyk7CisJCXByX3dhcm4oIlNldHRpbmcgcmVnaXN0ZXIgJXNcbiIsIGNmZy0+bmFtZSk7CisJCXByX3dhcm4oIiAgICVzICgweCUwOHgpID0gMHglMDh4IC0+IDB4JTA4eFxuIiwKKwkJCWNmZy0+bXV4X3JlZ19uYW1lLCBjZmctPm11eF9yZWcsIHJlZ19vcmlnLCByZWcpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RpbWUuYwppbmRleCAyNGFkMzBmLi4xNjBjOTYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS90aW1lLmMKQEAgLTM0Miw4ICszNDIsNiBAQAogCXN0cnVjdCBkYXZpbmNpX3NvY19pbmZvICpzb2NfaW5mbyA9ICZkYXZpbmNpX3NvY19pbmZvOwogCXVuc2lnbmVkIGludCBjbG9ja2V2ZW50X2lkOwogCXVuc2lnbmVkIGludCBjbG9ja3NvdXJjZV9pZDsKLQlzdGF0aWMgY2hhciBlcnJbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIKLQkJIiVzOiBjYW4ndCByZWdpc3RlciBjbG9ja3NvdXJjZSFcbiI7CiAJaW50IGk7CiAKIAljbG9ja2V2ZW50X2lkID0gc29jX2luZm8tPnRpbWVyX2luZm8tPmNsb2NrZXZlbnRfaWQ7CkBAIC0zNjQsMTIgKzM2MiwxMiBAQAogCiAJCS8qIE9ubHkgYm90dG9tIHRpbWVycyBjYW4gdXNlIGNvbXBhcmUgcmVncyAqLwogCQlpZiAoSVNfVElNRVJfVE9QKGNsb2NrZXZlbnRfaWQpKQotCQkJcHJfd2FybmluZygiZGF2aW5jaV90aW1lcl9pbml0OiBJbnZhbGlkIHVzZSIKLQkJCQkiIG9mIHN5c3RlbSB0aW1lcnMuICBSZXN1bHRzIHVucHJlZGljdGFibGUuXG4iKTsKKwkJCXByX3dhcm4oIiVzOiBJbnZhbGlkIHVzZSBvZiBzeXN0ZW0gdGltZXJzLiAgUmVzdWx0cyB1bnByZWRpY3RhYmxlLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCWVsc2UgaWYgKChkdGlwW2V2ZW50X3RpbWVyXS5jbXBfb2ZmID09IDApCiAJCQkJfHwgKGR0aXBbZXZlbnRfdGltZXJdLmNtcF9pcnEgPT0gMCkpCi0JCQlwcl93YXJuaW5nKCJkYXZpbmNpX3RpbWVyX2luaXQ6ICBJbnZhbGlkIHRpbWVyIGluc3RhbmNlIgotCQkJCSIgc2V0dXAuICBSZXN1bHRzIHVucHJlZGljdGFibGUuXG4iKTsKKwkJCXByX3dhcm4oIiVzOiBJbnZhbGlkIHRpbWVyIGluc3RhbmNlIHNldHVwLiAgUmVzdWx0cyB1bnByZWRpY3RhYmxlLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCWVsc2UgewogCQkJdGltZXJzW1RJRF9DTE9DS0VWRU5UXS5vcHRzIHw9IFRJTUVSX09QVFNfVVNFX0NPTVBBUkU7CiAJCQljbG9ja2V2ZW50X2RhdmluY2kuZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOwpAQCAtMzg5LDcgKzM4Nyw4IEBACiAJY2xvY2tzb3VyY2VfZGF2aW5jaS5uYW1lID0gaWRfdG9fbmFtZVtjbG9ja3NvdXJjZV9pZF07CiAJaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9kYXZpbmNpLAogCQkJCSAgICBkYXZpbmNpX2Nsb2NrX3RpY2tfcmF0ZSkpCi0JCXByaW50ayhlcnIsIGNsb2Nrc291cmNlX2RhdmluY2kubmFtZSk7CisJCXByX2VycigiJXM6IGNhbid0IHJlZ2lzdGVyIGNsb2Nrc291cmNlIVxuIiwKKwkJICAgICAgIGNsb2Nrc291cmNlX2RhdmluY2kubmFtZSk7CiAKIAlzY2hlZF9jbG9ja19yZWdpc3RlcihkYXZpbmNpX3JlYWRfc2NoZWRfY2xvY2ssIDMyLAogCQkJICBkYXZpbmNpX2Nsb2NrX3RpY2tfcmF0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggMTFiYjA3OS4uNjk5NzU3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMjksOSArMjksOSBAQAogdTE2IF9fcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIHUzMiBfX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CiAKLXZvaWQgX193cml0ZWIodTggIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKLXZvaWQgX193cml0ZXcodTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKLXZvaWQgX193cml0ZWwodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgX193cml0ZWIodTggIHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgX193cml0ZXcodTE2IHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgX193cml0ZWwodTMyIHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIAogLyoKICAqIEFyZ2gsIHNvbWVvbmUgZm9yZ290IHRoZSBJT0NTMTYgbGluZS4gIFdlIHRoZXJlZm9yZSBoYXZlIHRvIGhhbmRsZQpAQCAtNjIsMjAgKzYyLDMxIEBACiAjZGVmaW5lIHdyaXRldyh2LGIpCQlfX3dyaXRldyh2LGIpCiAjZGVmaW5lIHdyaXRlbCh2LGIpCQlfX3dyaXRlbCh2LGIpCiAKKyNkZWZpbmUgaW5zYiBpbnNiCiBleHRlcm4gdm9pZCBpbnNiKHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpidWYsIGludCBzeik7CisjZGVmaW5lIGluc3cgaW5zdwogZXh0ZXJuIHZvaWQgaW5zdyh1bnNpZ25lZCBpbnQgcG9ydCwgdm9pZCAqYnVmLCBpbnQgc3opOworI2RlZmluZSBpbnNsIGluc2wKIGV4dGVybiB2b2lkIGluc2wodW5zaWduZWQgaW50IHBvcnQsIHZvaWQgKmJ1ZiwgaW50IHN6KTsKIAorI2RlZmluZSBvdXRzYiBvdXRzYgogZXh0ZXJuIHZvaWQgb3V0c2IodW5zaWduZWQgaW50IHBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHN6KTsKKyNkZWZpbmUgb3V0c3cgb3V0c3cKIGV4dGVybiB2b2lkIG91dHN3KHVuc2lnbmVkIGludCBwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBzeik7CisjZGVmaW5lIG91dHNsIG91dHNsCiBleHRlcm4gdm9pZCBvdXRzbCh1bnNpZ25lZCBpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgc3opOwogCiAvKiBjYW4ndCBzdXBwb3J0IHdyaXRlc2IgYXRtICovCi1leHRlcm4gdm9pZCB3cml0ZXN3KHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOwotZXh0ZXJuIHZvaWQgd3JpdGVzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKKyNkZWZpbmUgd3JpdGVzdyB3cml0ZXN3CitleHRlcm4gdm9pZCB3cml0ZXN3KHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOworI2RlZmluZSB3cml0ZXNsIHdyaXRlc2wKK2V4dGVybiB2b2lkIHdyaXRlc2wodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CiAKIC8qIGNhbid0IHN1cHBvcnQgcmVhZHNiIGF0bSAqLwotZXh0ZXJuIHZvaWQgcmVhZHN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOwotZXh0ZXJuIHZvaWQgcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOworI2RlZmluZSByZWFkc3cgcmVhZHN3CitleHRlcm4gdm9pZCByZWFkc3coY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7CisKKyNkZWZpbmUgcmVhZHNsIHJlYWRzbAorZXh0ZXJuIHZvaWQgcmVhZHNsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pby5jIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lvLmMKaW5kZXggNzU2Y2MzNy4uYjU3OTgwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lvLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogRVhQT1JUX1NZTUJPTChfX3JlYWR3KTsKIEVYUE9SVF9TWU1CT0woX19yZWFkbCk7CiAKLXZvaWQgcmVhZHN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3ZvaWQgcmVhZHN3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CiAKQEAgLTExMiw3ICsxMTIsNyBAQAogfQogRVhQT1JUX1NZTUJPTChyZWFkc3cpOwogCi12b2lkIHJlYWRzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBsZW4pCit2b2lkIHJlYWRzbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCkBAIC0xMjIsNyArMTIyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocmVhZHNsKTsKIAotdm9pZCBfX3dyaXRlYih1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3ZvaWQgX193cml0ZWIodTggdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJX19yYXdfd3JpdGViKHZhbCwgYSk7CiB9CiAKLXZvaWQgX193cml0ZXcodTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQordm9pZCBfX3dyaXRldyh1MTYgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlfX3Jhd193cml0ZXcodmFsLCBhKTsKIH0KIAotdm9pZCBfX3dyaXRlbCh1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit2b2lkIF9fd3JpdGVsKHUzMiB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQAogRVhQT1JUX1NZTUJPTChfX3dyaXRldyk7CiBFWFBPUlRfU1lNQk9MKF9fd3JpdGVsKTsKIAotdm9pZCB3cml0ZXN3KHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKK3ZvaWQgd3JpdGVzdyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCkBAIC0xNjcsNyArMTY3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wod3JpdGVzdyk7CiAKLXZvaWQgd3JpdGVzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCit2b2lkIHdyaXRlc2wodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQogewogCXZvaWQgX19pb21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZG1hLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEuYwppbmRleCBkOGJmZDAyLi44OGE0YzliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEuYwpAQCAtNjYsMTEgKzY2LDE1IEBACiAJLm51bV9jaGFubmVscwkJPSBBUlJBWV9TSVpFKGVwOTN4eF9kbWFfbTJwX2NoYW5uZWxzKSwKIH07CiAKK3N0YXRpYyB1NjQgZXA5M3h4X2RtYV9tMnBfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9kbWFfbTJwX2RldmljZSA9IHsKIAkubmFtZQkJCT0gImVwOTN4eC1kbWEtbTJwIiwKIAkuaWQJCQk9IC0xLAogCS5kZXYJCQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZXA5M3h4X2RtYV9tMnBfZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmVwOTN4eF9kbWFfbTJwX2RhdGEsCisJCS5kbWFfbWFzawkJPSAmZXA5M3h4X2RtYV9tMnBfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKIAl9LAogfTsKIApAQCAtOTMsMTEgKzk3LDE1IEBACiAJLm51bV9jaGFubmVscwkJPSBBUlJBWV9TSVpFKGVwOTN4eF9kbWFfbTJtX2NoYW5uZWxzKSwKIH07CiAKK3N0YXRpYyB1NjQgZXA5M3h4X2RtYV9tMm1fbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9kbWFfbTJtX2RldmljZSA9IHsKIAkubmFtZQkJCT0gImVwOTN4eC1kbWEtbTJtIiwKIAkuaWQJCQk9IC0xLAogCS5kZXYJCQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZXA5M3h4X2RtYV9tMm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmVwOTN4eF9kbWFfbTJtX2RhdGEsCisJCS5kbWFfbWFzawkJPSAmZXA5M3h4X2RtYV9tMm1fbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL0tjb25maWcKaW5kZXggMmQwMjQwZi4uYjllM2YxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9LY29uZmlnCkBAIC0yNCw2ICsyNCw3IEBACiAJc2VsZWN0IFBNX0dFTkVSSUNfRE9NQUlOUyBpZiBQTV9SVU5USU1FCiAJc2VsZWN0IFM1UF9ERVZfTUZDCiAJc2VsZWN0IFNSQU0KKwlzZWxlY3QgTUZEX1NZU0NPTgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFNBTVNVTkcgRVhZTk9TIFNvQ3MgKEVYWU5PUzQvNSkKIApAQCAtNzUsNiArNzYsMTEgQEAKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIEFSQ0hfRVhZTk9TNAogCitjb25maWcgU09DX0VYWU5PUzQ0MTUKKwlib29sICJTQU1TVU5HIEVYWU5PUzQ0MTUiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX0VYWU5PUzQKKwogY29uZmlnIFNPQ19FWFlOT1M1MjUwCiAJYm9vbCAiU0FNU1VORyBFWFlOT1M1MjUwIgogCWRlZmF1bHQgeQpAQCAtMTIzLDQgKzEyOSw5IEBACiAJICBUaGlzIGlzIG5lZWRlZCB0byBwcm92aWRlIENQVSBhbmQgY2x1c3RlciBwb3dlciBtYW5hZ2VtZW50CiAJICBvbiBFeHlub3M1NDIwIGltcGxlbWVudGluZyBiaWcuTElUVExFLgogCitjb25maWcgRVhZTk9TX0NQVV9TVVNQRU5ECisJYm9vbAorCXNlbGVjdCBBUk1fQ1BVX1NVU1BFTkQKKwlkZWZhdWx0IFBNX1NMRUVQIHx8IEFSTV9FWFlOT1NfQ1BVSURMRQorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9NYWtlZmlsZQppbmRleCAyN2FlNjE0Li5iY2VmYjU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9NYWtlZmlsZQpAQCAtMTEsMTYgKzExLDE1IEBACiAKIG9iai0kKENPTkZJR19BUkNIX0VYWU5PUykJKz0gZXh5bm9zLm8gcG11Lm8gZXh5bm9zLXNtYy5vIGZpcm13YXJlLm8KIAotb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkJKz0gcG0ubyBzbGVlcC5vCitvYmotJChDT05GSUdfRVhZTk9TX0NQVV9TVVNQRU5EKSArPSBwbS5vIHNsZWVwLm8KK29iai0kKENPTkZJR19QTV9TTEVFUCkJCSs9IHN1c3BlbmQubwogb2JqLSQoQ09ORklHX1BNX0dFTkVSSUNfRE9NQUlOUykgKz0gcG1fZG9tYWlucy5vCiAKIG9iai0kKENPTkZJR19TTVApCQkrPSBwbGF0c21wLm8gaGVhZHNtcC5vCiAKLW9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJKz0gaG90cGx1Zy5vCi1DRkxBR1NfaG90cGx1Zy5vCQkrPSAtbWFyY2g9YXJtdjctYQotCiBwbHVzX3NlYyA6PSAkKGNhbGwgYXMtaW5zdHIsLmFyY2hfZXh0ZW5zaW9uIHNlYywrc2VjKQogQUZMQUdTX2V4eW5vcy1zbWMubwkJOj0tV2EsLW1hcmNoPWFybXY3LWEkKHBsdXNfc2VjKQorQUZMQUdTX3NsZWVwLm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYSQocGx1c19zZWMpCiAKIG9iai0kKENPTkZJR19FWFlOT1M1NDIwX01DUE0pCSs9IG1jcG0tZXh5bm9zLm8KIENGTEFHU19tY3BtLWV4eW5vcy5vCQkrPSAtbWFyY2g9YXJtdjctYQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9jb21tb24uaAppbmRleCA0N2I5MDRiLi44NjVmODc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9jb21tb24uaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfRVhZTk9TX0NPTU1PTl9ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9FWFlOT1NfQ09NTU9OX0gKIAotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNkZWZpbmUgRVhZTk9TMzI1MF9TT0NfSUQJMHhFMzQ3MjAwMApAQCAtMTExLDExICsxMTAsMTkgQEAKICNkZWZpbmUgc29jX2lzX2V4eW5vczUoKSAoc29jX2lzX2V4eW5vczUyNTAoKSB8fCBzb2NfaXNfZXh5bm9zNTQxMCgpIHx8IFwKIAkJCSAgc29jX2lzX2V4eW5vczU0MjAoKSB8fCBzb2NfaXNfZXh5bm9zNTgwMCgpKQogCitleHRlcm4gdTMyIGNwMTVfc2F2ZV9kaWFnOworZXh0ZXJuIHUzMiBjcDE1X3NhdmVfcG93ZXI7CisKIGV4dGVybiB2b2lkIF9faW9tZW0gKnN5c3JhbV9uc19iYXNlX2FkZHI7CiBleHRlcm4gdm9pZCBfX2lvbWVtICpzeXNyYW1fYmFzZV9hZGRyOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqcG11X2Jhc2VfYWRkcjsKIHZvaWQgZXh5bm9zX3N5c3JhbV9pbml0KHZvaWQpOwogCitlbnVtIHsKKwlGV19ET19JRExFX1NMRUVQLAorCUZXX0RPX0lETEVfQUZUUiwKK307CisKIHZvaWQgZXh5bm9zX2Zpcm13YXJlX2luaXQodm9pZCk7CiAKIGV4dGVybiB1MzIgZXh5bm9zX2dldF9laW50X3dha2VfbWFzayh2b2lkKTsKQEAgLTEyNywzNCArMTM0LDIwIEBACiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgZXh5bm9zX2NwdV9yZXN1bWUodm9pZCk7CitleHRlcm4gdm9pZCBleHlub3NfY3B1X3Jlc3VtZV9ucyh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBleHlub3Nfc21wX29wczsKIAotZXh0ZXJuIHZvaWQgZXh5bm9zX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7Ci0KLS8qIFBNVShQb3dlciBNYW5hZ2VtZW50IFVuaXQpIHN1cHBvcnQgKi8KLQotI2RlZmluZSBQTVVfVEFCTEVfRU5ECSgtMVUpCi0KLWVudW0gc3lzX3Bvd2VyZG93biB7Ci0JU1lTX0FGVFIsCi0JU1lTX0xQQSwKLQlTWVNfU0xFRVAsCi0JTlVNX1NZU19QT1dFUkRPV04sCi19OwotCi1zdHJ1Y3QgZXh5bm9zX3BtdV9jb25mIHsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCXVuc2lnbmVkIGludCB2YWxbTlVNX1NZU19QT1dFUkRPV05dOwotfTsKLQotZXh0ZXJuIHZvaWQgZXh5bm9zX3N5c19wb3dlcmRvd25fY29uZihlbnVtIHN5c19wb3dlcmRvd24gbW9kZSk7CiBleHRlcm4gdm9pZCBleHlub3NfY3B1X3Bvd2VyX2Rvd24oaW50IGNwdSk7CiBleHRlcm4gdm9pZCBleHlub3NfY3B1X3Bvd2VyX3VwKGludCBjcHUpOwogZXh0ZXJuIGludCAgZXh5bm9zX2NwdV9wb3dlcl9zdGF0ZShpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGV4eW5vc19jbHVzdGVyX3Bvd2VyX2Rvd24oaW50IGNsdXN0ZXIpOwogZXh0ZXJuIHZvaWQgZXh5bm9zX2NsdXN0ZXJfcG93ZXJfdXAoaW50IGNsdXN0ZXIpOwogZXh0ZXJuIGludCAgZXh5bm9zX2NsdXN0ZXJfcG93ZXJfc3RhdGUoaW50IGNsdXN0ZXIpOworZXh0ZXJuIHZvaWQgZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgZXh5bm9zX2NwdV9yZXN0b3JlX3JlZ2lzdGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgZXh5bm9zX3BtX2NlbnRyYWxfc3VzcGVuZCh2b2lkKTsKK2V4dGVybiBpbnQgZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKHZvaWQpOwogZXh0ZXJuIHZvaWQgZXh5bm9zX2VudGVyX2FmdHIodm9pZCk7CiAKIGV4dGVybiB2b2lkIHM1cF9pbml0X2NwdSh2b2lkIF9faW9tZW0gKmNwdWlkX2FkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLXBtdS5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLXBtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYWIwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9leHlub3MtcG11LmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBIZWFkZXIgZm9yIEVYWU5PUyBQTVUgRHJpdmVyIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19FWFlOT1NfUE1VX0gKKyNkZWZpbmUgX19FWFlOT1NfUE1VX0gKKworZW51bSBzeXNfcG93ZXJkb3duIHsKKwlTWVNfQUZUUiwKKwlTWVNfTFBBLAorCVNZU19TTEVFUCwKKwlOVU1fU1lTX1BPV0VSRE9XTiwKK307CisKK2V4dGVybiB2b2lkIGV4eW5vc19zeXNfcG93ZXJkb3duX2NvbmYoZW51bSBzeXNfcG93ZXJkb3duIG1vZGUpOworCisjZW5kaWYgLyogX19FWFlOT1NfUE1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2V4eW5vcy5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLmMKaW5kZXggNmIyODNlYi4uYzEzZDA4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLmMKQEAgLTQxLDQxICs0MSwxMSBAQAogCQkubGVuZ3RoCQk9IFNaXzY0SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfVElNRVIsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX1RJTUVSKSwKLQkJLmxlbmd0aAkJPSBTWl8xNkssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX1dBVENIRE9HLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9XQVRDSERPRyksCi0JCS5sZW5ndGgJCT0gU1pfNEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7CiAJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX1NST01DLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9TUk9NQyksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX1NZU1RJTUVSLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9TWVNUSU1FUiksCi0JCS5sZW5ndGgJCT0gU1pfNEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX0NPTUJJTkVSX0JBU0UsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0NPTUJJTkVSKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfR0lDX0NQVSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfR0lDX0NQVSksCi0JCS5sZW5ndGgJCT0gU1pfNjRLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9HSUNfRElTVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfR0lDX0RJU1QpLAotCQkubGVuZ3RoCQk9IFNaXzY0SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfQ01VLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9DTVUpLAogCQkubGVuZ3RoCQk9IFNaXzEyOEssCkBAIC04NiwxMSArNTYsNiBAQAogCQkubGVuZ3RoCQk9IFNaXzhLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9MMkNDLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9MMkNDKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfRE1DMCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfRE1DMCksCiAJCS5sZW5ndGgJCT0gU1pfNjRLLApAQCAtMTAwLDExICs2NSw2IEBACiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0RNQzEpLAogCQkubGVuZ3RoCQk9IFNaXzY0SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfVVNCX0hTUEhZLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9IU1BIWSksCi0JCS5sZW5ndGgJCT0gU1pfNEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LAogfTsKIApAQCAtMTE1LDE2ICs3NSw2IEBACiAJCS5sZW5ndGgJCT0gU1pfNjRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9USU1FUiwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzVfUEFfVElNRVIpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfV0FUQ0hET0csCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M1X1BBX1dBVENIRE9HKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfU1JPTUMsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M1X1BBX1NST01DKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKQEAgLTEzNywyOCArODcsNiBAQAogCX0sCiB9OwogCi1zdGF0aWMgdm9pZCBleHlub3NfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXUzMiB2YWwgPSAweDE7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gcG11X2Jhc2VfYWRkciArIEVYWU5PU19TV1JFU0VUOwotCi0JaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M1NDQwIikpIHsKLQkJdTMyIHN0YXR1czsKLQkJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAic2Ftc3VuZyxleHlub3M1NDQwLWNsb2NrIik7Ci0KLQkJYWRkciA9IG9mX2lvbWFwKG5wLCAwKSArIDB4YmM7Ci0JCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGFkZHIpOwotCi0JCWFkZHIgPSBvZl9pb21hcChucCwgMCkgKyAweGNjOwotCQl2YWwgPSBfX3Jhd19yZWFkbChhZGRyKTsKLQotCQl2YWwgPSAodmFsICYgMHhmZmZmMDAwMCkgfCAoc3RhdHVzICYgMHhmZmZmKTsKLQl9Ci0KLQlfX3Jhd193cml0ZWwodmFsLCBhZGRyKTsKLX0KLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zX2NwdWlkbGUgPSB7CiAJLm5hbWUgICAgICAgICAgICAgID0gImV4eW5vc19jcHVpZGxlIiwKICNpZmRlZiBDT05GSUdfQVJNX0VYWU5PU19DUFVJRExFCkBAIC0yNTIsNiArMTgwLDcgQEAKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wbXUiIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItcG11IiB9LAogCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDEyLXBtdSIgfSwKKwl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxNS1wbXUiIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtcG11IiB9LAogCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjYwLXBtdSIgfSwKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTQxMC1wbXUiIH0sCkBAIC0zMTgsNyArMjQ3LDEwIEBACiAJCWV4eW5vc19zeXNyYW1faW5pdCgpOwogCiAJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M0MjEwIikgfHwKLQkJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M1MjUwIikpCisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M0MjEyIikgfHwKKwkgICAgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M0NDEyIikgJiYKKwkgICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyx0cmF0czIiKSkgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczUyNTAiKSkKIAkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZleHlub3NfY3B1aWRsZSk7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJleHlub3MtY3B1ZnJlcSIsIC0xLCBOVUxMLCAwKTsKQEAgLTMzMyw2ICsyNjUsNyBAQAogCSJzYW1zdW5nLGV4eW5vczQyMTAiLAogCSJzYW1zdW5nLGV4eW5vczQyMTIiLAogCSJzYW1zdW5nLGV4eW5vczQ0MTIiLAorCSJzYW1zdW5nLGV4eW5vczQ0MTUiLAogCSJzYW1zdW5nLGV4eW5vczUiLAogCSJzYW1zdW5nLGV4eW5vczUyNTAiLAogCSJzYW1zdW5nLGV4eW5vczUyNjAiLApAQCAtMzc4LDcgKzMxMSw2IEBACiAJLmluaXRfbWFjaGluZQk9IGV4eW5vc19kdF9tYWNoaW5lX2luaXQsCiAJLmluaXRfbGF0ZQk9IGV4eW5vc19pbml0X2xhdGUsCiAJLmR0X2NvbXBhdAk9IGV4eW5vc19kdF9jb21wYXQsCi0JLnJlc3RhcnQJPSBleHlub3NfcmVzdGFydCwKIAkucmVzZXJ2ZQk9IGV4eW5vc19yZXNlcnZlLAogCS5kdF9maXh1cAk9IGV4eW5vc19kdF9maXh1cCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9maXJtd2FyZS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvZmlybXdhcmUuYwppbmRleCBlODc5N2JiLi43NjZmNTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9maXJtd2FyZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2Zpcm13YXJlLmMKQEAgLTE0LDE2ICsxNCw0NCBAQAogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAic21jLmgiCiAKLXN0YXRpYyBpbnQgZXh5bm9zX2RvX2lkbGUodm9pZCkKKyNkZWZpbmUgRVhZTk9TX1NMRUVQX01BR0lDCTB4MDAwMDBiYWQKKyNkZWZpbmUgRVhZTk9TX0FGVFJfTUFHSUMJMHhmY2JhMGQxMAorI2RlZmluZSBFWFlOT1NfQk9PVF9BRERSCTB4OAorI2RlZmluZSBFWFlOT1NfQk9PVF9GTEFHCTB4YworCitzdGF0aWMgdm9pZCBleHlub3Nfc2F2ZV9jcDE1KHZvaWQpCiB7Ci0JZXh5bm9zX3NtYyhTTUNfQ01EX1NMRUVQLCAwLCAwLCAwKTsKKwkvKiBTYXZlIFBvd2VyIGNvbnRyb2wgYW5kIERpYWdub3N0aWMgcmVnaXN0ZXJzICovCisJYXNtICgibXJjIHAxNSwgMCwgJTAsIGMxNSwgYzAsIDBcbiIKKwkgICAgICJtcmMgcDE1LCAwLCAlMSwgYzE1LCBjMCwgMVxuIgorCSAgICAgOiAiPXIiIChjcDE1X3NhdmVfcG93ZXIpLCAiPXIiIChjcDE1X3NhdmVfZGlhZykKKwkgICAgIDogOiAiY2MiKTsKK30KKworc3RhdGljIGludCBleHlub3NfZG9faWRsZSh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBGV19ET19JRExFX0FGVFI6CisJCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQorCQkJZXh5bm9zX3NhdmVfY3AxNSgpOworCQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKGV4eW5vc19jcHVfcmVzdW1lX25zKSwKKwkJCSAgICAgc3lzcmFtX25zX2Jhc2VfYWRkciArIDB4MjQpOworCQlfX3Jhd193cml0ZWwoRVhZTk9TX0FGVFJfTUFHSUMsIHN5c3JhbV9uc19iYXNlX2FkZHIgKyAweDIwKTsKKwkJZXh5bm9zX3NtYyhTTUNfQ01EX0NQVTBBRlRSLCAwLCAwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBGV19ET19JRExFX1NMRUVQOgorCQlleHlub3Nfc21jKFNNQ19DTURfU0xFRVAsIDAsIDAsIDApOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjksMTAgKzk3LDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXh5bm9zX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWZsdXNoX2NhY2hlX2FsbCgpOworCW91dGVyX2ZsdXNoX2FsbCgpOworCisJZXh5bm9zX3NtYyhTTUNfQ01EX1NMRUVQLCAwLCAwLCAwKTsKKworCXByX2luZm8oIkZhaWxlZCB0byBzdXNwZW5kIHRoZSBzeXN0ZW1cbiIpOworCXdyaXRlbCgwLCBzeXNyYW1fbnNfYmFzZV9hZGRyICsgRVhZTk9TX0JPT1RfRkxBRyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3N1c3BlbmQodm9pZCkKK3sKKwlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKKwkJZXh5bm9zX3NhdmVfY3AxNSgpOworCisJd3JpdGVsKEVYWU5PU19TTEVFUF9NQUdJQywgc3lzcmFtX25zX2Jhc2VfYWRkciArIEVYWU5PU19CT09UX0ZMQUcpOworCXdyaXRlbCh2aXJ0X3RvX3BoeXMoZXh5bm9zX2NwdV9yZXN1bWVfbnMpLAorCQlzeXNyYW1fbnNfYmFzZV9hZGRyICsgRVhZTk9TX0JPT1RfQUREUik7CisKKwlyZXR1cm4gY3B1X3N1c3BlbmQoMCwgZXh5bm9zX2NwdV9zdXNwZW5kKTsKK30KKworc3RhdGljIGludCBleHlub3NfcmVzdW1lKHZvaWQpCit7CisJd3JpdGVsKDAsIHN5c3JhbV9uc19iYXNlX2FkZHIgKyBFWFlOT1NfQk9PVF9GTEFHKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlX29wcyBleHlub3NfZmlybXdhcmVfb3BzID0gewotCS5kb19pZGxlCQk9IGV4eW5vc19kb19pZGxlLAorCS5kb19pZGxlCQk9IElTX0VOQUJMRUQoQ09ORklHX0VYWU5PU19DUFVfU1VTUEVORCkgPyBleHlub3NfZG9faWRsZSA6IE5VTEwsCiAJLnNldF9jcHVfYm9vdF9hZGRyCT0gZXh5bm9zX3NldF9jcHVfYm9vdF9hZGRyLAogCS5jcHVfYm9vdAkJPSBleHlub3NfY3B1X2Jvb3QsCisJLnN1c3BlbmQJCT0gSVNfRU5BQkxFRChDT05GSUdfUE1fU0xFRVApID8gZXh5bm9zX3N1c3BlbmQgOiBOVUxMLAorCS5yZXN1bWUJCQk9IElTX0VOQUJMRUQoQ09ORklHX0VYWU5PU19DUFVfU1VTUEVORCkgPyBleHlub3NfcmVzdW1lIDogTlVMTCwKIH07CiAKIHZvaWQgX19pbml0IGV4eW5vc19maXJtd2FyZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9ob3RwbHVnLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9ob3RwbHVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkODY5NjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvaG90cGx1Zy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqICBDbG9uZWQgZnJvbSBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZC4KLSAqICBBbGwgUmlnaHRzIFJlc2VydmVkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9jcDE1Lmg+Ci0jaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJyZWdzLXBtdS5oIgotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3B1X2xlYXZlX2xvd3Bvd2VyKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQlhc20gdm9sYXRpbGUoCi0JIm1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKLQkiCW9ycgklMCwgJTAsICUxXG4iCi0JIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCi0JIgltcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCi0JIglvcnIJJTAsICUwLCAlMlxuIgotCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgotCSAgOiAiPSZyIiAodikKLQkgIDogIklyIiAoQ1JfQyksICJJciIgKDB4NDApCi0JICA6ICJjYyIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSwgaW50ICpzcHVyaW91cykKLXsKLQl1MzIgbXBpZHIgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKLQl1MzIgY29yZV9pZCA9IE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKTsKLQotCWZvciAoOzspIHsKLQotCQkvKiBUdXJuIHRoZSBDUFUgb2ZmIG9uIG5leHQgV0ZJIGluc3RydWN0aW9uLiAqLwotCQlleHlub3NfY3B1X3Bvd2VyX2Rvd24oY29yZV9pZCk7Ci0KLQkJd2ZpKCk7Ci0KLQkJaWYgKHBlbl9yZWxlYXNlID09IGNvcmVfaWQpIHsKLQkJCS8qCi0JCQkgKiBPSywgcHJvcGVyIHdha2V1cCwgd2UncmUgZG9uZQotCQkJICovCi0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIEdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0Ci0JCSAqIGhhdmluZyBiZWVuIHdva2VuIHVwIC0gdGhpcyBzaG91bGRuJ3QgaGFwcGVuCi0JCSAqCi0JCSAqIEp1c3Qgbm90ZSBpdCBoYXBwZW5pbmcgLSB3aGVuIHdlJ3JlIHdva2VuLCB3ZSBjYW4gcmVwb3J0Ci0JCSAqIGl0cyBvY2N1cnJlbmNlLgotCQkgKi8KLQkJKCpzcHVyaW91cykrKzsKLQl9Ci19Ci0KLS8qCi0gKiBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIHRvIHNodXRkb3duIGEgQ1BVCi0gKgotICogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZAotICovCi12b2lkIF9fcmVmIGV4eW5vc19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCi17Ci0JaW50IHNwdXJpb3VzID0gMDsKLQotCXY3X2V4aXRfY29oZXJlbmN5X2ZsdXNoKGxvdWlzKTsKLQotCXBsYXRmb3JtX2RvX2xvd3Bvd2VyKGNwdSwgJnNwdXJpb3VzKTsKLQotCS8qCi0JICogYnJpbmcgdGhpcyBDUFUgYmFjayBpbnRvIHRoZSB3b3JsZCBvZiBjYWNoZQotCSAqIGNvaGVyZW5jeSwgYW5kIHRoZW4gcmVzdG9yZSBpbnRlcnJ1cHRzCi0JICovCi0JY3B1X2xlYXZlX2xvd3Bvd2VyKCk7Ci0KLQlpZiAoc3B1cmlvdXMpCi0JCXByX3dhcm4oIkNQVSV1OiAldSBzcHVyaW91cyB3YWtldXAgY2FsbHNcbiIsIGNwdSwgc3B1cmlvdXMpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IGYwYjdlOTIuLjFhZDNmNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTMwLDQwICszMCwxNyBAQAogI2RlZmluZSBFWFlOT1M0X1BBX0NNVQkJCTB4MTAwMzAwMDAKICNkZWZpbmUgRVhZTk9TNV9QQV9DTVUJCQkweDEwMDEwMDAwCiAKLSNkZWZpbmUgRVhZTk9TNF9QQV9TWVNUSU1FUgkJMHgxMDA1MDAwMAotCi0jZGVmaW5lIEVYWU5PUzRfUEFfV0FUQ0hET0cJCTB4MTAwNjAwMDAKLSNkZWZpbmUgRVhZTk9TNV9QQV9XQVRDSERPRwkJMHgxMDFEMDAwMAotCiAjZGVmaW5lIEVYWU5PUzRfUEFfRE1DMAkJCTB4MTA0MDAwMDAKICNkZWZpbmUgRVhZTk9TNF9QQV9ETUMxCQkJMHgxMDQxMDAwMAogCi0jZGVmaW5lIEVYWU5PUzRfUEFfQ09NQklORVIJCTB4MTA0NDAwMDAKLSNkZWZpbmUgRVhZTk9TNV9QQV9DT01CSU5FUgkJMHgxMDQ0MDAwMAotCi0jZGVmaW5lIEVYWU5PUzRfUEFfR0lDX0NQVQkJMHgxMDQ4MDAwMAotI2RlZmluZSBFWFlOT1M0X1BBX0dJQ19ESVNUCQkweDEwNDkwMDAwCi0jZGVmaW5lIEVYWU5PUzVfUEFfR0lDX0NQVQkJMHgxMDQ4MjAwMAotI2RlZmluZSBFWFlOT1M1X1BBX0dJQ19ESVNUCQkweDEwNDgxMDAwCi0KICNkZWZpbmUgRVhZTk9TNF9QQV9DT1JFUEVSSQkJMHgxMDUwMDAwMAogI2RlZmluZSBFWFlOT1M0X1BBX0wyQ0MJCQkweDEwNTAyMDAwCiAKICNkZWZpbmUgRVhZTk9TNF9QQV9TUk9NQwkJMHgxMjU3MDAwMAogI2RlZmluZSBFWFlOT1M1X1BBX1NST01DCQkweDEyMjUwMDAwCiAKLSNkZWZpbmUgRVhZTk9TNF9QQV9IU1BIWQkJMHgxMjVCMDAwMAotCi0jZGVmaW5lIEVYWU5PUzRfUEFfVUFSVAkJCTB4MTM4MDAwMDAKLSNkZWZpbmUgRVhZTk9TNV9QQV9VQVJUCQkJMHgxMkMwMDAwMAotCi0jZGVmaW5lIEVYWU5PUzRfUEFfVElNRVIJCTB4MTM5RDAwMDAKLSNkZWZpbmUgRVhZTk9TNV9QQV9USU1FUgkJMHgxMkREMDAwMAotCiAvKiBDb21wYXRpYmlsaXR5IFVBUlQgKi8KIAogI2RlZmluZSBFWFlOT1M1NDQwX1BBX1VBUlQwCQkweDAwMEIwMDAwCiAKLSNkZWZpbmUgUzNDX1ZBX1VBUlR4KHgpCQkJKFMzQ19WQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9tY3BtLWV4eW5vcy5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvbWNwbS1leHlub3MuYwppbmRleCBkYzlhNzY0Li5iMGQzYzJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9tY3BtLWV4eW5vcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL21jcG0tZXh5bm9zLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS9jcDE1Lmg+CkBAIC0zMCw2ICszMSw4IEBACiAjZGVmaW5lIEVYWU5PUzU0MjBfVVNFX0FSTV9DT1JFX0RPV05fU1RBVEUJQklUKDI5KQogI2RlZmluZSBFWFlOT1M1NDIwX1VTRV9MMl9DT01NT05fVVBfU1RBVEUJQklUKDMwKQogCitzdGF0aWMgdm9pZCBfX2lvbWVtICpuc19zcmFtX2Jhc2VfYWRkcjsKKwogLyoKICAqIFRoZSBjb21tb24gdjdfZXhpdF9jb2hlcmVuY3lfZmx1c2ggQVBJIGNvdWxkIG5vdCBiZSB1c2VkIGJlY2F1c2Ugb2YgdGhlCiAgKiBFcnJhdHVtIDc5OTI3MCB3b3JrYXJvdW5kLiBUaGlzIG1hY3JvIGlzIHRoZSBzYW1lIGFzIHRoZSBjb21tb24gb25lIChpbgpAQCAtMzE4LDEwICszMjEsMjYgQEAKIAl7fSwKIH07CiAKK3N0YXRpYyB2b2lkIGV4eW5vc19tY3BtX3NldHVwX2VudHJ5X3BvaW50KHZvaWQpCit7CisJLyoKKwkgKiBVLUJvb3QgU1BMIGlzIGhhcmRjb2RlZCB0byBqdW1wIHRvIHRoZSBzdGFydCBvZiBuc19zcmFtX2Jhc2VfYWRkcgorCSAqIGFzIHBhcnQgb2Ygc2Vjb25kYXJ5X2NwdV9zdGFydCgpLiAgTGV0J3MgcmVkaXJlY3QgaXQgdG8gdGhlCisJICogbWNwbV9lbnRyeV9wb2ludCgpLiBUaGlzIGlzIGRvbmUgZHVyaW5nIGJvdGggc2Vjb25kYXJ5IGJvb3QtdXAgYXMKKwkgKiB3ZWxsIGFzIHN5c3RlbSByZXN1bWUuCisJICovCisJX19yYXdfd3JpdGVsKDB4ZTU5ZjAwMDAsIG5zX3NyYW1fYmFzZV9hZGRyKTsgICAgIC8qIGxkciByMCwgW3BjLCAjMF0gKi8KKwlfX3Jhd193cml0ZWwoMHhlMTJmZmYxMCwgbnNfc3JhbV9iYXNlX2FkZHIgKyA0KTsgLyogYnggIHIwICovCisJX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhtY3BtX2VudHJ5X3BvaW50KSwgbnNfc3JhbV9iYXNlX2FkZHIgKyA4KTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBleHlub3NfbWNwbV9zeXNjb3JlX29wcyA9IHsKKwkucmVzdW1lCT0gZXh5bm9zX21jcG1fc2V0dXBfZW50cnlfcG9pbnQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBleHlub3NfbWNwbV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwotCXZvaWQgX19pb21lbSAqbnNfc3JhbV9iYXNlX2FkZHI7CiAJdW5zaWduZWQgaW50IHZhbHVlLCBpOwogCWludCByZXQ7CiAKQEAgLTM4NywxNiArNDA2LDkgQEAKIAkJcG11X3Jhd193cml0ZWwodmFsdWUsIEVYWU5PU19DT01NT05fT1BUSU9OKGkpKTsKIAl9CiAKLQkvKgotCSAqIFUtQm9vdCBTUEwgaXMgaGFyZGNvZGVkIHRvIGp1bXAgdG8gdGhlIHN0YXJ0IG9mIG5zX3NyYW1fYmFzZV9hZGRyCi0JICogYXMgcGFydCBvZiBzZWNvbmRhcnlfY3B1X3N0YXJ0KCkuICBMZXQncyByZWRpcmVjdCBpdCB0byB0aGUKLQkgKiBtY3BtX2VudHJ5X3BvaW50KCkuCi0JICovCi0JX19yYXdfd3JpdGVsKDB4ZTU5ZjAwMDAsIG5zX3NyYW1fYmFzZV9hZGRyKTsgICAgIC8qIGxkciByMCwgW3BjLCAjMF0gKi8KLQlfX3Jhd193cml0ZWwoMHhlMTJmZmYxMCwgbnNfc3JhbV9iYXNlX2FkZHIgKyA0KTsgLyogYnggIHIwICovCi0JX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhtY3BtX2VudHJ5X3BvaW50KSwgbnNfc3JhbV9iYXNlX2FkZHIgKyA4KTsKKwlleHlub3NfbWNwbV9zZXR1cF9lbnRyeV9wb2ludCgpOwogCi0JaW91bm1hcChuc19zcmFtX2Jhc2VfYWRkcik7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmV4eW5vc19tY3BtX3N5c2NvcmVfb3BzKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbGF0c21wLmMKaW5kZXggNDFhZTI4ZC4uN2ExZWJmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BsYXRzbXAuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2NwMTUuaD4KICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KICNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgpAQCAtMzMsNiArMzQsODggQEAKIAogZXh0ZXJuIHZvaWQgZXh5bm9zNF9zZWNvbmRhcnlfc3RhcnR1cCh2b2lkKTsKIAorLyoKKyAqIFNldCBvciBjbGVhciB0aGUgVVNFX0RFTEFZRURfUkVTRVRfQVNTRVJUSU9OIG9wdGlvbiwgc2V0IG9uIEV4eW5vczQgU29DcworICogZHVyaW5nIGhvdC0odW4pcGx1Z2dpbmcgQ1BVeC4KKyAqCisgKiBUaGUgZmVhdHVyZSBjYW4gYmUgY2xlYXJlZCBzYWZlbHkgZHVyaW5nIGZpcnN0IGJvb3Qgb2Ygc2Vjb25kYXJ5IENQVS4KKyAqCisgKiBFeHlub3M0IFNvQ3MgcmVxdWlyZSBzZXR0aW5nIFVTRV9ERUxBWUVEX1JFU0VUX0FTU0VSVElPTiBkdXJpbmcgcG93ZXJpbmcKKyAqIGRvd24gYSBDUFUgc28gdGhlIENQVSBpZGxlIGNsb2NrIGRvd24gZmVhdHVyZSBjb3VsZCBwcm9wZXJseSBkZXRlY3QgZ2xvYmFsCisgKiBpZGxlIHN0YXRlIHdoZW4gQ1BVeCBpcyBvZmYuCisgKi8KK3N0YXRpYyB2b2lkIGV4eW5vc19zZXRfZGVsYXllZF9yZXNldF9hc3NlcnRpb24odTMyIGNvcmVfaWQsIGJvb2wgZW5hYmxlKQoreworCWlmIChzb2NfaXNfZXh5bm9zNCgpKSB7CisJCXVuc2lnbmVkIGludCB0bXA7CisKKwkJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1NfQVJNX0NPUkVfT1BUSU9OKGNvcmVfaWQpKTsKKwkJaWYgKGVuYWJsZSkKKwkJCXRtcCB8PSBTNVBfVVNFX0RFTEFZRURfUkVTRVRfQVNTRVJUSU9OOworCQllbHNlCisJCQl0bXAgJj0gfihTNVBfVVNFX0RFTEFZRURfUkVTRVRfQVNTRVJUSU9OKTsKKwkJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1NfQVJNX0NPUkVfT1BUSU9OKGNvcmVfaWQpKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVfbGVhdmVfbG93cG93ZXIodTMyIGNvcmVfaWQpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwlhc20gdm9sYXRpbGUoCisJIm1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKKwkiCW9ycgklMCwgJTAsICUxXG4iCisJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCisJIgltcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCisJIglvcnIJJTAsICUwLCAlMlxuIgorCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgorCSAgOiAiPSZyIiAodikKKwkgIDogIklyIiAoQ1JfQyksICJJciIgKDB4NDApCisJICA6ICJjYyIpOworCisJIGV4eW5vc19zZXRfZGVsYXllZF9yZXNldF9hc3NlcnRpb24oY29yZV9pZCwgZmFsc2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSwgaW50ICpzcHVyaW91cykKK3sKKwl1MzIgbXBpZHIgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKwl1MzIgY29yZV9pZCA9IE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKTsKKworCWZvciAoOzspIHsKKworCQkvKiBUdXJuIHRoZSBDUFUgb2ZmIG9uIG5leHQgV0ZJIGluc3RydWN0aW9uLiAqLworCQlleHlub3NfY3B1X3Bvd2VyX2Rvd24oY29yZV9pZCk7CisKKwkJLyoKKwkJICogRXh5bm9zNCBTb0NzIHJlcXVpcmUgc2V0dGluZworCQkgKiBVU0VfREVMQVlFRF9SRVNFVF9BU1NFUlRJT04gc28gdGhlIENQVSBpZGxlCisJCSAqIGNsb2NrIGRvd24gZmVhdHVyZSBjb3VsZCBwcm9wZXJseSBkZXRlY3QKKwkJICogZ2xvYmFsIGlkbGUgc3RhdGUgd2hlbiBDUFV4IGlzIG9mZi4KKwkJICovCisJCWV4eW5vc19zZXRfZGVsYXllZF9yZXNldF9hc3NlcnRpb24oY29yZV9pZCwgdHJ1ZSk7CisKKwkJd2ZpKCk7CisKKwkJaWYgKHBlbl9yZWxlYXNlID09IGNvcmVfaWQpIHsKKwkJCS8qCisJCQkgKiBPSywgcHJvcGVyIHdha2V1cCwgd2UncmUgZG9uZQorCQkJICovCisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIEdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0CisJCSAqIGhhdmluZyBiZWVuIHdva2VuIHVwIC0gdGhpcyBzaG91bGRuJ3QgaGFwcGVuCisJCSAqCisJCSAqIEp1c3Qgbm90ZSBpdCBoYXBwZW5pbmcgLSB3aGVuIHdlJ3JlIHdva2VuLCB3ZSBjYW4gcmVwb3J0CisJCSAqIGl0cyBvY2N1cnJlbmNlLgorCQkgKi8KKwkJKCpzcHVyaW91cykrKzsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCisKIC8qKgogICogZXh5bm9zX2NvcmVfcG93ZXJfZG93biA6IHBvd2VyIGRvd24gdGhlIHNwZWNpZmllZCBjcHUKICAqIEBjcHUgOiB0aGUgY3B1IHRvIHBvd2VyIGRvd24KQEAgLTQzLDYgKzEyNiwxOCBAQAogICovCiB2b2lkIGV4eW5vc19jcHVfcG93ZXJfZG93bihpbnQgY3B1KQogeworCWlmIChjcHUgPT0gMCAmJiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczU0MjAiKSB8fAorCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInNhbXN1bmcsZXh5bm9zNTgwMCIpKSkgeworCQkvKgorCQkgKiBCeXBhc3MgcG93ZXIgZG93biBmb3IgQ1BVMCBkdXJpbmcgc3VzcGVuZC4gQ2hlY2sgZm9yCisJCSAqIHRoZSBTWVNfUFdSX1JFRyB2YWx1ZSB0byBkZWNpZGUgaWYgd2UgYXJlIHN1c3BlbmRpbmcKKwkJICogdGhlIHN5c3RlbS4KKwkJICovCisJCWludCB2YWwgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzVfQVJNX0NPUkUwX1NZU19QV1JfUkVHKTsKKworCQlpZiAoISh2YWwgJiBTNVBfQ09SRV9MT0NBTF9QV1JfRU4pKQorCQkJcmV0dXJuOworCX0KIAlwbXVfcmF3X3dyaXRlbCgwLCBFWFlOT1NfQVJNX0NPUkVfQ09ORklHVVJBVElPTihjcHUpKTsKIH0KIApAQCAtMTIxLDYgKzIxNiwyNiBAQAogfQogCiAvKgorICogU2V0IHdha2UgdXAgYnkgbG9jYWwgcG93ZXIgbW9kZSBhbmQgZXhlY3V0ZSBzb2Z0d2FyZSByZXNldCBmb3IgZ2l2ZW4gY29yZS4KKyAqCisgKiBDdXJyZW50bHkgdGhpcyBpcyBuZWVkZWQgb25seSB3aGVuIGJvb3Rpbmcgc2Vjb25kYXJ5IENQVSBvbiBFeHlub3MzMjUwLgorICovCitzdGF0aWMgdm9pZCBleHlub3NfY29yZV9yZXN0YXJ0KHUzMiBjb3JlX2lkKQoreworCXUzMiB2YWw7CisKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3MzMjUwIikpCisJCXJldHVybjsKKworCXZhbCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TX0FSTV9DT1JFX1NUQVRVUyhjb3JlX2lkKSk7CisJdmFsIHw9IFM1UF9DT1JFX1dBS0VVUF9GUk9NX0xPQ0FMX0NGRzsKKwlwbXVfcmF3X3dyaXRlbCh2YWwsIEVYWU5PU19BUk1fQ09SRV9TVEFUVVMoY29yZV9pZCkpOworCisJcHJfaW5mbygiQ1BVJXU6IFNvZnR3YXJlIHJlc2V0XG4iLCBjb3JlX2lkKTsKKwlwbXVfcmF3X3dyaXRlbChFWFlOT1NfQ09SRV9QT19SRVNFVChjb3JlX2lkKSwgRVhZTk9TX1NXUkVTRVQpOworfQorCisvKgogICogV3JpdGUgcGVuX3JlbGVhc2UgaW4gYSB3YXkgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIHZpc2libGUgdG8gYWxsCiAgKiBvYnNlcnZlcnMsIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIHRoZXkncmUgdGFraW5nIHBhcnQgaW4gY29oZXJlbmN5CiAgKiBvciBub3QuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGhvdHBsdWcgY29kZSB0byB3b3JrIHJlbGlhYmx5LgpAQCAtMTk2LDYgKzMxMSw5IEBACiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCX0KKworCWV4eW5vc19jb3JlX3Jlc3RhcnQoY29yZV9pZCk7CisKIAkvKgogCSAqIFNlbmQgdGhlIHNlY29uZGFyeSBDUFUgYSBzb2Z0IGludGVycnVwdCwgdGhlcmVieSBjYXVzaW5nCiAJICogdGhlIGJvb3QgbW9uaXRvciB0byByZWFkIHRoZSBzeXN0ZW0gd2lkZSBmbGFncyByZWdpc3RlciwKQEAgLTIzNyw2ICszNTUsOSBAQAogCQl1ZGVsYXkoMTApOwogCX0KIAorCS8qIE5vIGhhcm0gaWYgdGhpcyBpcyBjYWxsZWQgZHVyaW5nIGZpcnN0IGJvb3Qgb2Ygc2Vjb25kYXJ5IENQVSAqLworCWV4eW5vc19zZXRfZGVsYXllZF9yZXNldF9hc3NlcnRpb24oY29yZV9pZCwgZmFsc2UpOworCiAJLyoKIAkgKiBub3cgdGhlIHNlY29uZGFyeSBjb3JlIGlzIHN0YXJ0aW5nIHVwIGxldCBpdCBydW4gaXRzCiAJICogY2FsaWJyYXRpb25zLCB0aGVuIHdhaXQgZm9yIGl0IHRvIGZpbmlzaApAQCAtMzE4LDYgKzQzOSwzMyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorLyoKKyAqIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgdG8gc2h1dGRvd24gYSBDUFUKKyAqCisgKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCisgKi8KK3N0YXRpYyB2b2lkIGV4eW5vc19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IHNwdXJpb3VzID0gMDsKKwl1MzIgbXBpZHIgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKwl1MzIgY29yZV9pZCA9IE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKTsKKworCXY3X2V4aXRfY29oZXJlbmN5X2ZsdXNoKGxvdWlzKTsKKworCXBsYXRmb3JtX2RvX2xvd3Bvd2VyKGNwdSwgJnNwdXJpb3VzKTsKKworCS8qCisJICogYnJpbmcgdGhpcyBDUFUgYmFjayBpbnRvIHRoZSB3b3JsZCBvZiBjYWNoZQorCSAqIGNvaGVyZW5jeSwgYW5kIHRoZW4gcmVzdG9yZSBpbnRlcnJ1cHRzCisJICovCisJY3B1X2xlYXZlX2xvd3Bvd2VyKGNvcmVfaWQpOworCisJaWYgKHNwdXJpb3VzKQorCQlwcl93YXJuKCJDUFUldTogJXUgc3B1cmlvdXMgd2FrZXVwIGNhbGxzXG4iLCBjcHUsIHNwdXJpb3VzKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KKwogc3RydWN0IHNtcF9vcGVyYXRpb25zIGV4eW5vc19zbXBfb3BzIF9faW5pdGRhdGEgPSB7CiAJLnNtcF9pbml0X2NwdXMJCT0gZXh5bm9zX3NtcF9pbml0X2NwdXMsCiAJLnNtcF9wcmVwYXJlX2NwdXMJPSBleHlub3Nfc21wX3ByZXBhcmVfY3B1cywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbS5jCmluZGV4IGFiZWZhY2IuLjg2ZjNlY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcG0uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgogICogRVhZTk9TIC0gUG93ZXIgTWFuYWdlbWVudCBzdXBwb3J0CkBAIC0xNSwxMDkgKzE1LDQ1IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1X3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2FybS1naWMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAKICNpbmNsdWRlIDxwbGF0L3BtLWNvbW1vbi5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy1zcm9tLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiZXh5bm9zLXBtdS5oIgogI2luY2x1ZGUgInJlZ3MtcG11LmgiCiAjaW5jbHVkZSAicmVncy1zeXMuaCIKIAotLyoqCi0gKiBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxIC0gRXh5bm9zIEdJQyB0byBQTVUgSVJRIG1hcHBpbmcKLSAqIEBod2lycTogSGFyZHdhcmUgSVJRIHNpZ25hbCBvZiB0aGUgR0lDCi0gKiBAbWFzazogTWFzayBpbiBQTVUgd2FrZS11cCBtYXNrIHJlZ2lzdGVyCi0gKi8KLXN0cnVjdCBleHlub3Nfd2t1cF9pcnEgewotCXVuc2lnbmVkIGludCBod2lycTsKLQl1MzIgbWFzazsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBleHlub3M1X3N5c19zYXZlW10gPSB7Ci0JU0FWRV9JVEVNKEVYWU5PUzVfU1lTX0kyQ19DRkcpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGV4eW5vc19jb3JlX3NhdmVbXSA9IHsKLQkvKiBTUk9NIHNpZGUgKi8KLQlTQVZFX0lURU0oUzVQX1NST01fQlcpLAotCVNBVkVfSVRFTShTNVBfU1JPTV9CQzApLAotCVNBVkVfSVRFTShTNVBfU1JPTV9CQzEpLAotCVNBVkVfSVRFTShTNVBfU1JPTV9CQzIpLAotCVNBVkVfSVRFTShTNVBfU1JPTV9CQzMpLAotfTsKLQotLyoKLSAqIEdJQyB3YWtlLXVwIHN1cHBvcnQKLSAqLwotCi1zdGF0aWMgdTMyIGV4eW5vc19pcnF3YWtlX2ludG1hc2sgPSAweGZmZmZmZmZmOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc193a3VwX2lycSBleHlub3M0X3drdXBfaXJxW10gPSB7Ci0JeyA3NiwgQklUKDEpIH0sIC8qIFJUQyBhbGFybSAqLwotCXsgNzcsIEJJVCgyKSB9LCAvKiBSVEMgdGljayAqLwotCXsgLyogc2VudGluZWwgKi8gfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxIGV4eW5vczUyNTBfd2t1cF9pcnFbXSA9IHsKLQl7IDc1LCBCSVQoMSkgfSwgLyogUlRDIGFsYXJtICovCi0JeyA3NiwgQklUKDIpIH0sIC8qIFJUQyB0aWNrICovCi0JeyAvKiBzZW50aW5lbCAqLyB9LAotfTsKLQotc3RhdGljIGludCBleHlub3NfaXJxX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IHN0YXRlKQorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmV4eW5vc19ib290X3ZlY3Rvcl9hZGRyKHZvaWQpCiB7Ci0JY29uc3Qgc3RydWN0IGV4eW5vc193a3VwX2lycSAqd2t1cF9pcnE7Ci0KLQlpZiAoc29jX2lzX2V4eW5vczUyNTAoKSkKLQkJd2t1cF9pcnEgPSBleHlub3M1MjUwX3drdXBfaXJxOwotCWVsc2UKLQkJd2t1cF9pcnEgPSBleHlub3M0X3drdXBfaXJxOwotCi0Jd2hpbGUgKHdrdXBfaXJxLT5tYXNrKSB7Ci0JCWlmICh3a3VwX2lycS0+aHdpcnEgPT0gZGF0YS0+aHdpcnEpIHsKLQkJCWlmICghc3RhdGUpCi0JCQkJZXh5bm9zX2lycXdha2VfaW50bWFzayB8PSB3a3VwX2lycS0+bWFzazsKLQkJCWVsc2UKLQkJCQlleHlub3NfaXJxd2FrZV9pbnRtYXNrICY9IH53a3VwX2lycS0+bWFzazsKLQkJCXJldHVybiAwOwotCQl9Ci0JCSsrd2t1cF9pcnE7Ci0JfQotCi0JcmV0dXJuIC1FTk9FTlQ7CisJaWYgKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8xKQorCQlyZXR1cm4gcG11X2Jhc2VfYWRkciArIFM1UF9JTkZPUk03OworCWVsc2UgaWYgKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8wKQorCQlyZXR1cm4gc3lzcmFtX2Jhc2VfYWRkciArIDB4MjQ7CisJcmV0dXJuIHBtdV9iYXNlX2FkZHIgKyBTNVBfSU5GT1JNMDsKIH0KIAotI2RlZmluZSBFWFlOT1NfQk9PVF9WRUNUT1JfQUREUgkoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzEgPyBcCi0JCQlwbXVfYmFzZV9hZGRyICsgUzVQX0lORk9STTcgOiBcCi0JCQkoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzAgPyBcCi0JCQkoc3lzcmFtX2Jhc2VfYWRkciArIDB4MjQpIDogXAotCQkJcG11X2Jhc2VfYWRkciArIFM1UF9JTkZPUk0wKSkKLSNkZWZpbmUgRVhZTk9TX0JPT1RfVkVDVE9SX0ZMQUcJKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8xID8gXAotCQkJcG11X2Jhc2VfYWRkciArIFM1UF9JTkZPUk02IDogXAotCQkJKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8wID8gXAotCQkJKHN5c3JhbV9iYXNlX2FkZHIgKyAweDIwKSA6IFwKLQkJCXBtdV9iYXNlX2FkZHIgKyBTNVBfSU5GT1JNMSkpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqZXh5bm9zX2Jvb3RfdmVjdG9yX2ZsYWcodm9pZCkKK3sKKwlpZiAoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzEpCisJCXJldHVybiBwbXVfYmFzZV9hZGRyICsgUzVQX0lORk9STTY7CisJZWxzZSBpZiAoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzApCisJCXJldHVybiBzeXNyYW1fYmFzZV9hZGRyICsgMHgyMDsKKwlyZXR1cm4gcG11X2Jhc2VfYWRkciArIFM1UF9JTkZPUk0xOworfQogCiAjZGVmaW5lIFM1UF9DSEVDS19BRlRSICAweEZDQkEwRDEwCi0jZGVmaW5lIFM1UF9DSEVDS19TTEVFUCAweDAwMDAwQkFECiAKIC8qIEZvciBDb3J0ZXgtQTkgRGlhZ25vc3RpYyBhbmQgUG93ZXIgY29udHJvbCByZWdpc3RlciAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzYXZlX2FybV9yZWdpc3RlclsyXTsKIAotc3RhdGljIHZvaWQgZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKHZvaWQpCit2b2lkIGV4eW5vc19jcHVfc2F2ZV9yZWdpc3Rlcih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC0xMzQsNyArNzAsNyBAQAogCXNhdmVfYXJtX3JlZ2lzdGVyWzFdID0gdG1wOwogfQogCi1zdGF0aWMgdm9pZCBleHlub3NfY3B1X3Jlc3RvcmVfcmVnaXN0ZXIodm9pZCkKK3ZvaWQgZXh5bm9zX2NwdV9yZXN0b3JlX3JlZ2lzdGVyKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTE1Myw3ICs4OSw3IEBACiAJCSAgICAgIDogImNjIik7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19wbV9jZW50cmFsX3N1c3BlbmQodm9pZCkKK3ZvaWQgZXh5bm9zX3BtX2NlbnRyYWxfc3VzcGVuZCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC0xNjEsOSArOTcsMTMgQEAKIAl0bXAgPSBwbXVfcmF3X3JlYWRsKFM1UF9DRU5UUkFMX1NFUV9DT05GSUdVUkFUSU9OKTsKIAl0bXAgJj0gflM1UF9DRU5UUkFMX0xPV1BXUl9DRkc7CiAJcG11X3Jhd193cml0ZWwodG1wLCBTNVBfQ0VOVFJBTF9TRVFfQ09ORklHVVJBVElPTik7CisKKwkvKiBTZXR0aW5nIFNFUV9PUFRJT04gcmVnaXN0ZXIgKi8KKwlwbXVfcmF3X3dyaXRlbChTNVBfVVNFX1NUQU5EQllfV0ZJMCB8IFM1UF9VU0VfU1RBTkRCWV9XRkUwLAorCQkgICAgICAgUzVQX0NFTlRSQUxfU0VRX09QVElPTik7CiB9CiAKLXN0YXRpYyBpbnQgZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKHZvaWQpCitpbnQgZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTE5NCwxNyArMTM0LDI2IEBACiAKIHN0YXRpYyB2b2lkIGV4eW5vc19jcHVfc2V0X2Jvb3RfdmVjdG9yKGxvbmcgZmxhZ3MpCiB7Ci0JX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhleHlub3NfY3B1X3Jlc3VtZSksIEVYWU5PU19CT09UX1ZFQ1RPUl9BRERSKTsKLQlfX3Jhd193cml0ZWwoZmxhZ3MsIEVYWU5PU19CT09UX1ZFQ1RPUl9GTEFHKTsKKwlfX3Jhd193cml0ZWwodmlydF90b19waHlzKGV4eW5vc19jcHVfcmVzdW1lKSwKKwkJICAgICBleHlub3NfYm9vdF92ZWN0b3JfYWRkcigpKTsKKwlfX3Jhd193cml0ZWwoZmxhZ3MsIGV4eW5vc19ib290X3ZlY3Rvcl9mbGFnKCkpOwogfQogCiBzdGF0aWMgaW50IGV4eW5vc19hZnRyX2ZpbmlzaGVyKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CisJaW50IHJldDsKKwogCWV4eW5vc19zZXRfd2FrZXVwbWFzaygweDAwMDBmZjNlKTsKLQlleHlub3NfY3B1X3NldF9ib290X3ZlY3RvcihTNVBfQ0hFQ0tfQUZUUik7CiAJLyogU2V0IHZhbHVlIG9mIHBvd2VyIGRvd24gcmVnaXN0ZXIgZm9yIGFmdHIgbW9kZSAqLwogCWV4eW5vc19zeXNfcG93ZXJkb3duX2NvbmYoU1lTX0FGVFIpOwotCWNwdV9kb19pZGxlKCk7CisKKwlyZXQgPSBjYWxsX2Zpcm13YXJlX29wKGRvX2lkbGUsIEZXX0RPX0lETEVfQUZUUik7CisJaWYgKHJldCA9PSAtRU5PU1lTKSB7CisJCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQorCQkJZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKCk7CisJCWV4eW5vc19jcHVfc2V0X2Jvb3RfdmVjdG9yKFM1UF9DSEVDS19BRlRSKTsKKwkJY3B1X2RvX2lkbGUoKTsKKwl9CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTIxNCwxOTYgKzE2MywxNiBAQAogCWNwdV9wbV9lbnRlcigpOwogCiAJZXh5bm9zX3BtX2NlbnRyYWxfc3VzcGVuZCgpOwotCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQotCQlleHlub3NfY3B1X3NhdmVfcmVnaXN0ZXIoKTsKIAogCWNwdV9zdXNwZW5kKDAsIGV4eW5vc19hZnRyX2ZpbmlzaGVyKTsKIAogCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KSB7CiAJCXNjdV9lbmFibGUoUzVQX1ZBX1NDVSk7Ci0JCWV4eW5vc19jcHVfcmVzdG9yZV9yZWdpc3RlcigpOworCQlpZiAoY2FsbF9maXJtd2FyZV9vcChyZXN1bWUpID09IC1FTk9TWVMpCisJCQlleHlub3NfY3B1X3Jlc3RvcmVfcmVnaXN0ZXIoKTsKIAl9CiAKIAlleHlub3NfcG1fY2VudHJhbF9yZXN1bWUoKTsKIAogCWNwdV9wbV9leGl0KCk7CiB9Ci0KLXN0YXRpYyBpbnQgZXh5bm9zX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYXJnKQotewotI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCi0Jb3V0ZXJfZmx1c2hfYWxsKCk7Ci0jZW5kaWYKLQotCWlmIChzb2NfaXNfZXh5bm9zNTI1MCgpKQotCQlmbHVzaF9jYWNoZV9hbGwoKTsKLQotCS8qIGlzc3VlIHRoZSBzdGFuZGJ5IHNpZ25hbCBpbnRvIHRoZSBwbSB1bml0LiAqLwotCWNwdV9kb19pZGxlKCk7Ci0KLQlwcl9pbmZvKCJGYWlsZWQgdG8gc3VzcGVuZCB0aGUgc3lzdGVtXG4iKTsKLQlyZXR1cm4gMTsgLyogQWJvcnRpbmcgc3VzcGVuZCAqLwotfQotCi1zdGF0aWMgdm9pZCBleHlub3NfcG1fcHJlcGFyZSh2b2lkKQotewotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQkvKiBTZXQgd2FrZS11cCBtYXNrIHJlZ2lzdGVycyAqLwotCXBtdV9yYXdfd3JpdGVsKGV4eW5vc19nZXRfZWludF93YWtlX21hc2soKSwgUzVQX0VJTlRfV0FLRVVQX01BU0spOwotCXBtdV9yYXdfd3JpdGVsKGV4eW5vc19pcnF3YWtlX2ludG1hc2sgJiB+KDEgPDwgMzEpLCBTNVBfV0FLRVVQX01BU0spOwotCi0JczNjX3BtX2RvX3NhdmUoZXh5bm9zX2NvcmVfc2F2ZSwgQVJSQVlfU0laRShleHlub3NfY29yZV9zYXZlKSk7Ci0KLQlpZiAoc29jX2lzX2V4eW5vczUyNTAoKSkgewotCQlzM2NfcG1fZG9fc2F2ZShleHlub3M1X3N5c19zYXZlLCBBUlJBWV9TSVpFKGV4eW5vczVfc3lzX3NhdmUpKTsKLQkJLyogRGlzYWJsZSBVU0VfUkVURU5USU9OIG9mIEpQRUdfTUVNX09QVElPTiAqLwotCQl0bXAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzVfSlBFR19NRU1fT1BUSU9OKTsKLQkJdG1wICY9IH5FWFlOT1M1X09QVElPTl9VU0VfUkVURU5USU9OOwotCQlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzVfSlBFR19NRU1fT1BUSU9OKTsKLQl9Ci0KLQkvKiBTZXQgdmFsdWUgb2YgcG93ZXIgZG93biByZWdpc3RlciBmb3Igc2xlZXAgbW9kZSAqLwotCi0JZXh5bm9zX3N5c19wb3dlcmRvd25fY29uZihTWVNfU0xFRVApOwotCXBtdV9yYXdfd3JpdGVsKFM1UF9DSEVDS19TTEVFUCwgUzVQX0lORk9STTEpOwotCi0JLyogZW5zdXJlIGF0IGxlYXN0IElORk9STTAgaGFzIHRoZSByZXN1bWUgYWRkcmVzcyAqLwotCi0JcG11X3Jhd193cml0ZWwodmlydF90b19waHlzKGV4eW5vc19jcHVfcmVzdW1lKSwgUzVQX0lORk9STTApOwotfQotCi1zdGF0aWMgaW50IGV4eW5vc19wbV9zdXNwZW5kKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlleHlub3NfcG1fY2VudHJhbF9zdXNwZW5kKCk7Ci0KLQkvKiBTZXR0aW5nIFNFUV9PUFRJT04gcmVnaXN0ZXIgKi8KLQotCXRtcCA9IChTNVBfVVNFX1NUQU5EQllfV0ZJMCB8IFM1UF9VU0VfU1RBTkRCWV9XRkUwKTsKLQlwbXVfcmF3X3dyaXRlbCh0bXAsIFM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOwotCi0JaWYgKHJlYWRfY3B1aWRfcGFydCgpID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpCi0JCWV4eW5vc19jcHVfc2F2ZV9yZWdpc3RlcigpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4eW5vc19wbV9yZXN1bWUodm9pZCkKLXsKLQlpZiAoZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKCkpCi0JCWdvdG8gZWFybHlfd2FrZXVwOwotCi0JaWYgKHJlYWRfY3B1aWRfcGFydCgpID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpCi0JCWV4eW5vc19jcHVfcmVzdG9yZV9yZWdpc3RlcigpOwotCi0JLyogRm9yIHJlbGVhc2UgcmV0ZW50aW9uICovCi0KLQlwbXVfcmF3X3dyaXRlbCgoMSA8PCAyOCksIFM1UF9QQURfUkVUX01BVURJT19PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfR1BJT19PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfVUFSVF9PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfTU1DQV9PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfTU1DQl9PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfRUJJQV9PUFRJT04pOwotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfRUJJQl9PUFRJT04pOwotCi0JaWYgKHNvY19pc19leHlub3M1MjUwKCkpCi0JCXMzY19wbV9kb19yZXN0b3JlKGV4eW5vczVfc3lzX3NhdmUsCi0JCQlBUlJBWV9TSVpFKGV4eW5vczVfc3lzX3NhdmUpKTsKLQotCXMzY19wbV9kb19yZXN0b3JlX2NvcmUoZXh5bm9zX2NvcmVfc2F2ZSwgQVJSQVlfU0laRShleHlub3NfY29yZV9zYXZlKSk7Ci0KLQlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKLQkJc2N1X2VuYWJsZShTNVBfVkFfU0NVKTsKLQotZWFybHlfd2FrZXVwOgotCi0JLyogQ2xlYXIgU0xFRVAgbW9kZSBzZXQgaW4gSU5GT1JNMSAqLwotCXBtdV9yYXdfd3JpdGVsKDB4MCwgUzVQX0lORk9STTEpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGV4eW5vc19wbV9zeXNjb3JlX29wcyA9IHsKLQkuc3VzcGVuZAk9IGV4eW5vc19wbV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gZXh5bm9zX3BtX3Jlc3VtZSwKLX07Ci0KLS8qCi0gKiBTdXNwZW5kIE9wcwotICovCi0KLXN0YXRpYyBpbnQgZXh5bm9zX3N1c3BlbmRfZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQotewotCWludCByZXQ7Ci0KLQlzM2NfcG1fZGVidWdfaW5pdCgpOwotCi0JUzNDX1BNREJHKCIlczogc3VzcGVuZGluZyB0aGUgc3lzdGVtLi4uXG4iLCBfX2Z1bmNfXyk7Ci0KLQlTM0NfUE1EQkcoIiVzOiB3YWtldXAgbWFza3M6ICUwOHgsJTA4eFxuIiwgX19mdW5jX18sCi0JCQlleHlub3NfaXJxd2FrZV9pbnRtYXNrLCBleHlub3NfZ2V0X2VpbnRfd2FrZV9tYXNrKCkpOwotCi0JaWYgKGV4eW5vc19pcnF3YWtlX2ludG1hc2sgPT0gLTFVCi0JICAgICYmIGV4eW5vc19nZXRfZWludF93YWtlX21hc2soKSA9PSAtMVUpIHsKLQkJcHJfZXJyKCIlczogTm8gd2FrZS11cCBzb3VyY2VzIVxuIiwgX19mdW5jX18pOwotCQlwcl9lcnIoIiVzOiBBYm9ydGluZyBzbGVlcFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzM2NfcG1fc2F2ZV91YXJ0cygpOwotCWV4eW5vc19wbV9wcmVwYXJlKCk7Ci0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0JczNjX3BtX2NoZWNrX3N0b3JlKCk7Ci0KLQlyZXQgPSBjcHVfc3VzcGVuZCgwLCBleHlub3NfY3B1X3N1c3BlbmQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlzM2NfcG1fcmVzdG9yZV91YXJ0cygpOwotCi0JUzNDX1BNREJHKCIlczogd2FrZXVwIHN0YXQ6ICUwOHhcbiIsIF9fZnVuY19fLAotCQkJcG11X3Jhd19yZWFkbChTNVBfV0FLRVVQX1NUQVQpKTsKLQotCXMzY19wbV9jaGVja19yZXN0b3JlKCk7Ci0KLQlTM0NfUE1EQkcoIiVzOiByZXN1bWluZyB0aGUgc3lzdGVtLi4uXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBleHlub3Nfc3VzcGVuZF9wcmVwYXJlKHZvaWQpCi17Ci0JczNjX3BtX2NoZWNrX3ByZXBhcmUoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBleHlub3Nfc3VzcGVuZF9maW5pc2godm9pZCkKLXsKLQlzM2NfcG1fY2hlY2tfY2xlYW51cCgpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGV4eW5vc19zdXNwZW5kX29wcyA9IHsKLQkuZW50ZXIJCT0gZXh5bm9zX3N1c3BlbmRfZW50ZXIsCi0JLnByZXBhcmUJPSBleHlub3Nfc3VzcGVuZF9wcmVwYXJlLAotCS5maW5pc2gJCT0gZXh5bm9zX3N1c3BlbmRfZmluaXNoLAotCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAotfTsKLQotdm9pZCBfX2luaXQgZXh5bm9zX3BtX2luaXQodm9pZCkKLXsKLQl1MzIgdG1wOwotCi0JLyogUGxhdGZvcm0tc3BlY2lmaWMgR0lDIGNhbGxiYWNrICovCi0JZ2ljX2FyY2hfZXh0bi5pcnFfc2V0X3dha2UgPSBleHlub3NfaXJxX3NldF93YWtlOwotCi0JLyogQWxsIHdha2V1cCBkaXNhYmxlICovCi0JdG1wID0gcG11X3Jhd19yZWFkbChTNVBfV0FLRVVQX01BU0spOwotCXRtcCB8PSAoKDB4RkYgPDwgOCkgfCAoMHgxRiA8PCAxKSk7Ci0JcG11X3Jhd193cml0ZWwodG1wLCBTNVBfV0FLRVVQX01BU0spOwotCi0JcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmV4eW5vc19wbV9zeXNjb3JlX29wcyk7Ci0Jc3VzcGVuZF9zZXRfb3BzKCZleHlub3Nfc3VzcGVuZF9vcHMpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvcG11LmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbXUuYwppbmRleCBmZjlkMjNmLi5jMTU3NjFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbXUuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbXUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLwogICoKICAqIEVYWU5PUyAtIENQVSBQTVUoUG93ZXIgTWFuYWdlbWVudCBVbml0KSBzdXBwb3J0CkBAIC0xMCwxMiArMTAsMTM2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCi0jaW5jbHVkZSAiY29tbW9uLmgiCisKKyNpbmNsdWRlICJleHlub3MtcG11LmgiCiAjaW5jbHVkZSAicmVncy1wbXUuaCIKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfcG11X2NvbmYgKmV4eW5vc19wbXVfY29uZmlnOworI2RlZmluZSBQTVVfVEFCTEVfRU5ECSgtMVUpCisKK3N0cnVjdCBleHlub3NfcG11X2NvbmYgeworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdTggdmFsW05VTV9TWVNfUE9XRVJET1dOXTsKK307CisKK3N0cnVjdCBleHlub3NfcG11X2RhdGEgeworCWNvbnN0IHN0cnVjdCBleHlub3NfcG11X2NvbmYgKnBtdV9jb25maWc7CisJY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfY29uZiAqcG11X2NvbmZpZ19leHRyYTsKKworCXZvaWQgKCpwbXVfaW5pdCkodm9pZCk7CisJdm9pZCAoKnBvd2VyZG93bl9jb25mKShlbnVtIHN5c19wb3dlcmRvd24pOworCXZvaWQgKCpwb3dlcmRvd25fY29uZl9leHRyYSkoZW51bSBzeXNfcG93ZXJkb3duKTsKK307CisKK3N0cnVjdCBleHlub3NfcG11X2NvbnRleHQgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwljb25zdCBzdHJ1Y3QgZXh5bm9zX3BtdV9kYXRhICpwbXVfZGF0YTsKK307CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBtdV9iYXNlX2FkZHI7CitzdGF0aWMgc3RydWN0IGV4eW5vc19wbXVfY29udGV4dCAqcG11X2NvbnRleHQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbXVfcmF3X3dyaXRlbCh1MzIgdmFsLCB1MzIgb2Zmc2V0KQoreworCXdyaXRlbF9yZWxheGVkKHZhbCwgcG11X2Jhc2VfYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBtdV9yYXdfcmVhZGwodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChwbXVfYmFzZV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHN0cnVjdCBleHlub3NfcG11X2NvbmYgZXh5bm9zMzI1MF9wbXVfY29uZmlnW10gPSB7CisJLyogeyAub2Zmc2V0ID0gb2Zmc2V0LCAudmFsID0geyBBRlRSLCBXLUFGVFIsIFNMRUVQIH0gKi8KKwl7IEVYWU5PUzNfQVJNX0NPUkUwX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgyfSB9LAorCXsgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMF9MT0NBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMF9DRU5UUkFMX1NZU19QV1JfUkVHLCB7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0FSTV9DT1JFMV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4Mn0gfSwKKwl7IEVYWU5PUzNfRElTX0lSUV9BUk1fQ09SRTFfTE9DQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfRElTX0lSUV9BUk1fQ09SRTFfQ0VOVFJBTF9TWVNfUFdSX1JFRywgeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19JU1BfQVJNX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfRElTX0lSUV9JU1BfQVJNX0xPQ0FMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0RJU19JUlFfSVNQX0FSTV9DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0FSTV9DT01NT05fU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDJ9IH0sCisJeyBFWFlOT1MzX0FSTV9MMl9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDN9IH0sCisJeyBFWFlOT1MzX0NNVV9BQ0xLU1RPUF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1NDTEtTVE9QX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfUkVTRVRfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX0RSQU1fRlJFUV9ET1dOX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgxfSB9LAorCXsgRVhZTk9TM19ERFJQSFlfRExMT0ZGX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgxfSB9LAorCXsgRVhZTk9TM19MUEREUl9QSFlfRExMX0xPQ0tfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MX0gfSwKKwl7IEVYWU5PUzNfQ01VX0FDTEtTVE9QX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1NDTEtTVE9QX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX01QTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19CUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfVlBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX0VQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19VUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MX0gfSwKKwl7IEVYWU5PUzNfRVBMTFVTRVJfU1lTQ0xLX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19NUExMVVNFUl9TWVNDTEtfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0JQTExVU0VSX1NZU0NMS19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX0NMS1NUT1BfQ0FNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfQ0xLU1RPUF9NRkNfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0NNVV9DTEtTVE9QX0czRF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX0NMS1NUT1BfTENEMF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX0NMS1NUT1BfSVNQX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfQ0xLU1RPUF9NQVVESU9fU1lTX1BXUl9SRUcsCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX0NBTV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX01GQ19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX0czRF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX0xDRDBfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0NNVV9SRVNFVF9JU1BfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0NNVV9SRVNFVF9NQVVESU9fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX1RPUF9CVVNfU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfUkVURU5USU9OX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgxfSB9LAorCXsgRVhZTk9TM19UT1BfUFdSX1NZU19QV1JfUkVHLAkJCXsgMHgzLCAweDMsIDB4M30gfSwKKwl7IEVYWU5PUzNfVE9QX0JVU19DT1JFQkxLX1NZU19QV1JfUkVHLAkJeyAweDMsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfUkVURU5USU9OX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MX0gfSwKKwl7IEVYWU5PUzNfVE9QX1BXUl9DT1JFQkxLX1NZU19QV1JfUkVHLAkJeyAweDMsIDB4MywgMHgzfSB9LAorCXsgRVhZTk9TM19MT0dJQ19SRVNFVF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfT1NDQ0xLX0dBVEVfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDF9IH0sCisJeyBFWFlOT1MzX0xPR0lDX1JFU0VUX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfT1NDQ0xLX0dBVEVfQ09SRUJMS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MCwgMHgxfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX0RSQU1fU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9NQVVESU9fU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9HUElPX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9SRVRFTlRJT05fVUFSVF9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX01NQzBfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9NTUMxX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9SRVRFTlRJT05fTU1DMl9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX1NQSV9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX0VCSUFfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9FQklCX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9SRVRFTlRJT05fSlRBR19TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfSVNPTEFUSU9OX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfQUxWX1NFTF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfWFVTQlhUSV9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1hYVElfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19FWFRfUkVHVUxBVE9SX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19FWFRfUkVHVUxBVE9SX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfR1BJT19NT0RFX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19HUElPX01PREVfTUFVRElPX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfQVNCX1JFU0VUX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfQVNCX0lTT0xBVElPTl9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfQVNCX1JFU0VUX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfVE9QX0FTQl9JU09MQVRJT05fQ09SRUJMS19TWVNfUFdSX1JFRywgeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19DQU1fU1lTX1BXUl9SRUcsCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19NRkNfU1lTX1BXUl9SRUcsCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19HM0RfU1lTX1BXUl9SRUcsCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19MQ0QwX1NZU19QV1JfUkVHLAkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfSVNQX1NZU19QV1JfUkVHLAkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfTUFVRElPX1NZU19QV1JfUkVHLAkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1NZU0NMS19JU1BfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBQTVVfVEFCTEVfRU5ELH0sCit9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfY29uZiBleHlub3M0MjEwX3BtdV9jb25maWdbXSA9IHsKIAkvKiB7IC5vZmZzZXQgPSBvZmZzZXQsIC52YWwgPSB7IEFGVFIsIExQQSwgU0xFRVAgfSAqLwpAQCAtMjY0LDYgKzM4OCw3IEBACiAJeyBFWFlOT1M1X0lOVFJBTV9NRU1fU1lTX1BXUl9SRUcsCQl7IDB4MywgMHgwLCAweDB9IH0sCiAJeyBFWFlOT1M1X0lOVFJPTV9NRU1fU1lTX1BXUl9SRUcsCQl7IDB4MywgMHgwLCAweDB9IH0sCiAJeyBFWFlOT1M1X0pQRUdfTUVNX1NZU19QV1JfUkVHLAkJCXsgMHgzLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfSlBFR19NRU1fT1BUSU9OLAkJCXsgMHgxMCwgMHgxMCwgMHgwfSB9LAogCXsgRVhZTk9TNV9IU0lfTUVNX1NZU19QV1JfUkVHLAkJCXsgMHgzLCAweDAsIDB4MH0gfSwKIAl7IEVYWU5PUzVfTUNVSU9QX01FTV9TWVNfUFdSX1JFRywJCXsgMHgzLCAweDAsIDB4MH0gfSwKIAl7IEVYWU5PUzVfU0FUQV9NRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgwfSB9LApAQCAtMzE1LDYgKzQ0MCwxODkgQEAKIAl7IFBNVV9UQUJMRV9FTkQsfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZXh5bm9zX3BtdV9jb25mIGV4eW5vczU0MjBfcG11X2NvbmZpZ1tdID0geworCS8qIHsgLm9mZnNldCA9IG9mZnNldCwgLnZhbCA9IHsgQUZUUiwgTFBBLCBTTEVFUCB9ICovCisJeyBFWFlOT1M1X0FSTV9DT1JFMF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0RJU19JUlFfQVJNX0NPUkUwX0xPQ0FMX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9ESVNfSVJRX0FSTV9DT1JFMF9DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0FSTV9DT1JFMV9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0RJU19JUlFfQVJNX0NPUkUxX0xPQ0FMX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9ESVNfSVJRX0FSTV9DT1JFMV9DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0FSTV9DT1JFMl9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfQVJNX0NPUkUyX0xPQ0FMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfQVJNX0NPUkUyX0NFTlRSQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQVJNX0NPUkUzX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9BUk1fQ09SRTNfTE9DQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9BUk1fQ09SRTNfQ0VOVFJBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9LRkNfQ09SRTBfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMF9MT0NBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMF9DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0tGQ19DT1JFMV9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUxX0xPQ0FMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUxX0NFTlRSQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfS0ZDX0NPUkUyX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTJfTE9DQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTJfQ0VOVFJBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9LRkNfQ09SRTNfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFM19MT0NBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFM19DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0lTUF9BUk1fU1lTX1BXUl9SRUcsCQkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfRElTX0lSUV9JU1BfQVJNX0xPQ0FMX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9ESVNfSVJRX0lTUF9BUk1fQ0VOVFJBTF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQVJNX0NPTU1PTl9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0tGQ19DT01NT05fU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9BUk1fTDJfU1lTX1BXUl9SRUcsCQkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfS0ZDX0wyX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX0FDTEtTVE9QX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1NDTEtTVE9QX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfQ01VX1JFU0VUX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX0FDTEtTVE9QX1NZU01FTV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1NDTEtTVE9QX1NZU01FTV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfQ01VX1JFU0VUX1NZU01FTV9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X0RSQU1fRlJFUV9ET1dOX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfRERSUEhZX0RMTE9GRl9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDF9IH0sCisJeyBFWFlOT1M1X0REUlBIWV9ETExMT0NLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfQVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9NUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X1ZQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfRVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNV9CUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRFBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9JUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0tQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfTVBMTFVTRVJfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQlBMTFVTRVJfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUlBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9TUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X1RPUF9CVVNfU1lTX1BXUl9SRUcsCQkJCXsgMHgzLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfVE9QX1JFVEVOVElPTl9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDF9IH0sCisJeyBFWFlOT1M1X1RPUF9QV1JfU1lTX1BXUl9SRUcsCQkJCXsgMHgzLCAweDMsIDB4MH0gfSwKKwl7IEVYWU5PUzVfVE9QX0JVU19TWVNNRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9UT1BfUkVURU5USU9OX1NZU01FTV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfVE9QX1BXUl9TWVNNRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9MT0dJQ19SRVNFVF9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X09TQ0NMS19HQVRFX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MX0gfSwKKwl7IEVYWU5PUzVfTE9HSUNfUkVTRVRfU1lTTUVNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9PU0NDTEtfR0FURV9TWVNNRU1fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0lOVFJBTV9NRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgzfSB9LAorCXsgRVhZTk9TNTQyMF9JTlRST01fTUVNX1NZU19QV1JfUkVHLAkJCXsgMHgzLCAweDAsIDB4M30gfSwKKwl7IEVYWU5PUzVfUEFEX1JFVEVOVElPTl9EUkFNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9QQURfUkVURU5USU9OX01BVV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9KVEFHX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0RSQU1fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fVUFSVF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9NTUMwX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX01NQzFfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fTU1DMl9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9IU0lfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fRUJJQV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9FQklCX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX1NQSV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9EUkFNX0NPUkVCTEtfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfUEFEX0lTT0xBVElPTl9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X1BBRF9JU09MQVRJT05fU1lTTUVNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9QQURfQUxWX1NFTF9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X1hVU0JYVElfU1lTX1BXUl9SRUcsCQkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfWFhUSV9TWVNfUFdSX1JFRywJCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNV9FWFRfUkVHVUxBVE9SX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfR1BJT19NT0RFX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfR1BJT19NT0RFX1NZU01FTV9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X0dQSU9fTU9ERV9NQVVfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNV9UT1BfQVNCX1JFU0VUX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfVE9QX0FTQl9JU09MQVRJT05fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0dTQ0xfU1lTX1BXUl9SRUcsCQkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfSVNQX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X01GQ19TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9HM0RfU1lTX1BXUl9SRUcsCQkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTUDFfU1lTX1BXUl9SRUcsCQkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfTUFVX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHg3LCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0cyRF9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9NU0NfU1lTX1BXUl9SRUcsCQkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRlNZU19TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9GU1lTMl9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QU0dFTl9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QRVJJQ19TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9XQ09SRV9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfQ0xLU1RPUF9HU0NMX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX0NMS1NUT1BfSVNQX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX0NMS1NUT1BfTUZDX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX0NMS1NUT1BfRzNEX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfRElTUDFfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX01BVV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfRzJEX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9NU0NfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0ZTWVNfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX1BTR0VOX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9QRVJJQ19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfV0NPUkVfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NNVV9TWVNDTEtfR1NDTF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NNVV9TWVNDTEtfSVNQX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1NZU0NMS19NRkNfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfU1lTQ0xLX0czRF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRElTUDFfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfTUFVX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0cyRF9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19NU0NfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRlNZU19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19GU1lTMl9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19QU0dFTl9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19QRVJJQ19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19XQ09SRV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX0ZTWVMyX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfUkVTRVRfUFNHRU5fU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9SRVNFVF9QRVJJQ19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX1dDT1JFX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfUkVTRVRfR1NDTF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NNVV9SRVNFVF9JU1BfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfUkVTRVRfTUZDX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1JFU0VUX0czRF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9SRVNFVF9ESVNQMV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX01BVV9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9SRVNFVF9HMkRfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfUkVTRVRfTVNDX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX0ZTWVNfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBQTVVfVEFCTEVfRU5ELH0sCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGV4eW5vczMyNTBfbGlzdF9mZWVkW10gPSB7CisJRVhZTk9TM19BUk1fQ09SRV9PUFRJT04oMCksCisJRVhZTk9TM19BUk1fQ09SRV9PUFRJT04oMSksCisJRVhZTk9TM19BUk1fQ09SRV9PUFRJT04oMiksCisJRVhZTk9TM19BUk1fQ09SRV9PUFRJT04oMyksCisJRVhZTk9TM19BUk1fQ09NTU9OX09QVElPTiwKKwlFWFlOT1MzX1RPUF9QV1JfT1BUSU9OLAorCUVYWU5PUzNfQ09SRV9UT1BfUFdSX09QVElPTiwKKwlTNVBfQ0FNX09QVElPTiwKKwlTNVBfTUZDX09QVElPTiwKKwlTNVBfRzNEX09QVElPTiwKKwlTNVBfTENEMF9PUFRJT04sCisJUzVQX0lTUF9PUFRJT04sCit9OworCitzdGF0aWMgdm9pZCBleHlub3MzMjUwX3Bvd2VyZG93bl9jb25mX2V4dHJhKGVudW0gc3lzX3Bvd2VyZG93biBtb2RlKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBFbmFibGUgb25seSBTQ19GRUVEQkFDSyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV4eW5vczMyNTBfbGlzdF9mZWVkKTsgaSsrKSB7CisJCXRtcCA9IHBtdV9yYXdfcmVhZGwoZXh5bm9zMzI1MF9saXN0X2ZlZWRbaV0pOworCQl0bXAgJj0gfihFWFlOT1MzX09QVElPTl9VU0VfU0NfQ09VTlRFUik7CisJCXRtcCB8PSBFWFlOT1MzX09QVElPTl9VU0VfU0NfRkVFREJBQ0s7CisJCXBtdV9yYXdfd3JpdGVsKHRtcCwgZXh5bm9zMzI1MF9saXN0X2ZlZWRbaV0pOworCX0KKworCWlmIChtb2RlICE9IFNZU19TTEVFUCkKKwkJcmV0dXJuOworCisJcG11X3Jhd193cml0ZWwoWFVTQlhUSV9EVVJBVElPTiwgRVhZTk9TM19YVVNCWFRJX0RVUkFUSU9OKTsKKwlwbXVfcmF3X3dyaXRlbChYWFRJX0RVUkFUSU9OLCBFWFlOT1MzX1hYVElfRFVSQVRJT04pOworCXBtdV9yYXdfd3JpdGVsKEVYVF9SRUdVTEFUT1JfRFVSQVRJT04sIEVYWU5PUzNfRVhUX1JFR1VMQVRPUl9EVVJBVElPTik7CisJcG11X3Jhd193cml0ZWwoRVhUX1JFR1VMQVRPUl9DT1JFQkxLX0RVUkFUSU9OLAorCQkgICAgICAgRVhZTk9TM19FWFRfUkVHVUxBVE9SX0NPUkVCTEtfRFVSQVRJT04pOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGV4eW5vczVfbGlzdF9ib3RoX2NudF9mZWVkW10gPSB7CiAJRVhZTk9TNV9BUk1fQ09SRTBfT1BUSU9OLAogCUVYWU5PUzVfQVJNX0NPUkUxX09QVElPTiwKQEAgLTMyOSwxMyArNjM3LDgyIEBACiAJRVhZTk9TNV9UT1BfUFdSX1NZU01FTV9PUFRJT04sCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGV4eW5vczVfbGlzdF9kaWFibGVfd2ZpX3dmZVtdID0geworc3RhdGljIHVuc2lnbmVkIGludCBjb25zdCBleHlub3M1X2xpc3RfZGlzYWJsZV93Zmlfd2ZlW10gPSB7CiAJRVhZTk9TNV9BUk1fQ09SRTFfT1BUSU9OLAogCUVYWU5PUzVfRlNZU19BUk1fT1BUSU9OLAogCUVYWU5PUzVfSVNQX0FSTV9PUFRJT04sCiB9OwogCi1zdGF0aWMgdm9pZCBleHlub3M1X2luaXRfcG11KHZvaWQpCitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGV4eW5vczU0MjBfbGlzdF9kaXNhYmxlX3BtdV9yZWdbXSA9IHsKKwlFWFlOT1M1X0NNVV9DTEtTVE9QX0dTQ0xfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfQ0xLU1RPUF9JU1BfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfQ0xLU1RPUF9HM0RfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9ESVNQMV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX01BVV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0cyRF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX01TQ19TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0ZTWVNfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9QU0dFTl9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX1BFUklDX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfV0NPUkVfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfU1lTQ0xLX0dTQ0xfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfU1lTQ0xLX0lTUF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1X0NNVV9TWVNDTEtfRzNEX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1NZU0NMS19ESVNQMV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9TWVNDTEtfTUFVX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1NZU0NMS19HMkRfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX01TQ19TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRlNZU19TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRlNZUzJfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX1BTR0VOX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1NZU0NMS19QRVJJQ19TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9TWVNDTEtfV0NPUkVfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfRlNZUzJfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfUFNHRU5fU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfUEVSSUNfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfV0NPUkVfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfUkVTRVRfR1NDTF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1X0NNVV9SRVNFVF9JU1BfU1lTX1BXUl9SRUcsCisJRVhZTk9TNV9DTVVfUkVTRVRfRzNEX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1JFU0VUX0RJU1AxX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1JFU0VUX01BVV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9SRVNFVF9HMkRfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfTVNDX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1JFU0VUX0ZTWVNfU1lTX1BXUl9SRUcsCit9OworCitzdGF0aWMgdm9pZCBleHlub3M1X3Bvd2VyX29mZih2b2lkKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlwcl9pbmZvKCJQb3dlciBkb3duLlxuIik7CisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1NfUFNfSE9MRF9DT05UUk9MKTsKKwl0bXAgXj0gKDEgPDwgOCk7CisJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1NfUFNfSE9MRF9DT05UUk9MKTsKKworCS8qIFdhaXQgYSBsaXR0bGUgc28gd2UgZG9uJ3QgZ2l2ZSBhIGZhbHNlIHdhcm5pbmcgYmVsb3cgKi8KKwltZGVsYXkoMTAwKTsKKworCXByX2VycigiUG93ZXIgZG93biBmYWlsZWQsIHBsZWFzZSBwb3dlciBvZmYgc3lzdGVtIG1hbnVhbGx5LlxuIik7CisJd2hpbGUgKDEpCisJCTsKK30KKwordm9pZCBleHlub3M1NDIwX3Bvd2VyZG93bl9jb25mKGVudW0gc3lzX3Bvd2VyZG93biBtb2RlKQoreworCXUzMiB0aGlzX2NsdXN0ZXI7CisKKwl0aGlzX2NsdXN0ZXIgPSBNUElEUl9BRkZJTklUWV9MRVZFTChyZWFkX2NwdWlkX21waWRyKCksIDEpOworCisJLyoKKwkgKiBzZXQgdGhlIGNsdXN0ZXIgaWQgdG8gSVJPTSByZWdpc3RlciB0byBlbnN1cmUgdGhhdCB3ZSB3YWtlCisJICogdXAgd2l0aCB0aGUgY3VycmVudCBjbHVzdGVyLgorCSAqLworCXBtdV9yYXdfd3JpdGVsKHRoaXNfY2x1c3RlciwgRVhZTk9TX0lST01fREFUQTIpOworfQorCisKK3N0YXRpYyB2b2lkIGV4eW5vczVfcG93ZXJkb3duX2NvbmYoZW51bSBzeXNfcG93ZXJkb3duIG1vZGUpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IHRtcDsKQEAgLTM0Myw3ICs3MjAsNyBAQAogCS8qCiAJICogRW5hYmxlIGJvdGggU0NfRkVFREJBQ0sgYW5kIFNDX0NPVU5URVIKIAkgKi8KLQlmb3IgKGkgPSAwIDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zNV9saXN0X2JvdGhfY250X2ZlZWQpIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zNV9saXN0X2JvdGhfY250X2ZlZWQpOyBpKyspIHsKIAkJdG1wID0gcG11X3Jhd19yZWFkbChleHlub3M1X2xpc3RfYm90aF9jbnRfZmVlZFtpXSk7CiAJCXRtcCB8PSAoRVhZTk9TNV9VU0VfU0NfRkVFREJBQ0sgfAogCQkJRVhZTk9TNV9VU0VfU0NfQ09VTlRFUik7CkBAIC0zNjAsMTEgKzczNywxMSBAQAogCS8qCiAJICogRGlzYWJsZSBXRkkvV0ZFIG9uIFhYWF9PUFRJT04KIAkgKi8KLQlmb3IgKGkgPSAwIDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zNV9saXN0X2RpYWJsZV93Zmlfd2ZlKSA7IGkrKykgewotCQl0bXAgPSBwbXVfcmF3X3JlYWRsKGV4eW5vczVfbGlzdF9kaWFibGVfd2ZpX3dmZVtpXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zNV9saXN0X2Rpc2FibGVfd2ZpX3dmZSk7IGkrKykgeworCQl0bXAgPSBwbXVfcmF3X3JlYWRsKGV4eW5vczVfbGlzdF9kaXNhYmxlX3dmaV93ZmVbaV0pOwogCQl0bXAgJj0gfihFWFlOT1M1X09QVElPTl9VU0VfU1RBTkRCWVdGRSB8CiAJCQkgRVhZTk9TNV9PUFRJT05fVVNFX1NUQU5EQllXRkkpOwotCQlwbXVfcmF3X3dyaXRlbCh0bXAsIGV4eW5vczVfbGlzdF9kaWFibGVfd2ZpX3dmZVtpXSk7CisJCXBtdV9yYXdfd3JpdGVsKHRtcCwgZXh5bm9zNV9saXN0X2Rpc2FibGVfd2ZpX3dmZVtpXSk7CiAJfQogfQogCkBAIC0zNzIsNTEgKzc0OSwyNTcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChzb2NfaXNfZXh5bm9zNTI1MCgpKQotCQlleHlub3M1X2luaXRfcG11KCk7CisJY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfZGF0YSAqcG11X2RhdGEgPSBwbXVfY29udGV4dC0+cG11X2RhdGE7CiAKLQlmb3IgKGkgPSAwOyAoZXh5bm9zX3BtdV9jb25maWdbaV0ub2Zmc2V0ICE9IFBNVV9UQUJMRV9FTkQpIDsgaSsrKQotCQlwbXVfcmF3X3dyaXRlbChleHlub3NfcG11X2NvbmZpZ1tpXS52YWxbbW9kZV0sCi0JCQkJZXh5bm9zX3BtdV9jb25maWdbaV0ub2Zmc2V0KTsKKwlpZiAocG11X2RhdGEtPnBvd2VyZG93bl9jb25mKQorCQlwbXVfZGF0YS0+cG93ZXJkb3duX2NvbmYobW9kZSk7CiAKLQlpZiAoc29jX2lzX2V4eW5vczQ0MTIoKSkgewotCQlmb3IgKGkgPSAwOyBleHlub3M0NDEyX3BtdV9jb25maWdbaV0ub2Zmc2V0ICE9IFBNVV9UQUJMRV9FTkQgOyBpKyspCi0JCQlwbXVfcmF3X3dyaXRlbChleHlub3M0NDEyX3BtdV9jb25maWdbaV0udmFsW21vZGVdLAotCQkJCQlleHlub3M0NDEyX3BtdV9jb25maWdbaV0ub2Zmc2V0KTsKKwlpZiAocG11X2RhdGEtPnBtdV9jb25maWcpIHsKKwkJZm9yIChpID0gMDsgKHBtdV9kYXRhLT5wbXVfY29uZmlnW2ldLm9mZnNldCAhPSBQTVVfVEFCTEVfRU5EKTsgaSsrKQorCQkJcG11X3Jhd193cml0ZWwocG11X2RhdGEtPnBtdV9jb25maWdbaV0udmFsW21vZGVdLAorCQkJCQlwbXVfZGF0YS0+cG11X2NvbmZpZ1tpXS5vZmZzZXQpOworCX0KKworCWlmIChwbXVfZGF0YS0+cG93ZXJkb3duX2NvbmZfZXh0cmEpCisJCXBtdV9kYXRhLT5wb3dlcmRvd25fY29uZl9leHRyYShtb2RlKTsKKworCWlmIChwbXVfZGF0YS0+cG11X2NvbmZpZ19leHRyYSkgeworCQlmb3IgKGkgPSAwOyBwbXVfZGF0YS0+cG11X2NvbmZpZ19leHRyYVtpXS5vZmZzZXQgIT0gUE1VX1RBQkxFX0VORDsgaSsrKQorCQkJcG11X3Jhd193cml0ZWwocG11X2RhdGEtPnBtdV9jb25maWdfZXh0cmFbaV0udmFsW21vZGVdLAorCQkJCQlwbXVfZGF0YS0+cG11X2NvbmZpZ19leHRyYVtpXS5vZmZzZXQpOwogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgZXh5bm9zX3BtdV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBleHlub3MzMjUwX3BtdV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHZhbHVlOwogCi0JZXh5bm9zX3BtdV9jb25maWcgPSBleHlub3M0MjEwX3BtdV9jb25maWc7CisJLyoKKwkgKiBUbyBwcmV2ZW50IGZyb20gaXNzdWluZyBuZXcgYnVzIHJlcXVlc3QgZm9ybSBMMiBtZW1vcnkgc3lzdGVtCisJICogSWYgY29yZSBzdGF0dXMgaXMgcG93ZXIgZG93biwgc2hvdWxkIGJlIHNldCAnMScgdG8gTDIgcG93ZXIgZG93bgorCSAqLworCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1MzX0FSTV9DT01NT05fT1BUSU9OKTsKKwl2YWx1ZSB8PSBFWFlOT1MzX09QVElPTl9TS0lQX0RFQUNUSVZBVEVfQUNFQUNQX0lOX1BXRE47CisJcG11X3Jhd193cml0ZWwodmFsdWUsIEVYWU5PUzNfQVJNX0NPTU1PTl9PUFRJT04pOwogCi0JaWYgKHNvY19pc19leHlub3M0MjEwKCkpIHsKLQkJZXh5bm9zX3BtdV9jb25maWcgPSBleHlub3M0MjEwX3BtdV9jb25maWc7Ci0JCXByX2luZm8oIkVYWU5PUzQyMTAgUE1VIEluaXRpYWxpemVcbiIpOwotCX0gZWxzZSBpZiAoc29jX2lzX2V4eW5vczQyMTIoKSB8fCBzb2NfaXNfZXh5bm9zNDQxMigpKSB7Ci0JCWV4eW5vc19wbXVfY29uZmlnID0gZXh5bm9zNHgxMl9wbXVfY29uZmlnOwotCQlwcl9pbmZvKCJFWFlOT1M0eDEyIFBNVSBJbml0aWFsaXplXG4iKTsKLQl9IGVsc2UgaWYgKHNvY19pc19leHlub3M1MjUwKCkpIHsKLQkJLyoKLQkJICogV2hlbiBTWVNfV0RUUkVTRVQgaXMgc2V0LCB3YXRjaGRvZyB0aW1lciByZXNldCByZXF1ZXN0Ci0JCSAqIGlzIGlnbm9yZWQgYnkgcG93ZXIgbWFuYWdlbWVudCB1bml0LgotCQkgKi8KLQkJdmFsdWUgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzVfQVVUT19XRFRSRVNFVF9ESVNBQkxFKTsKLQkJdmFsdWUgJj0gfkVYWU5PUzVfU1lTX1dEVFJFU0VUOwotCQlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TNV9BVVRPX1dEVFJFU0VUX0RJU0FCTEUpOworCS8qIEVuYWJsZSBVU0VfU1RBTkRCWV9XRkkgZm9yIGFsbCBDT1JFICovCisJcG11X3Jhd193cml0ZWwoUzVQX1VTRV9TVEFOREJZX1dGSV9BTEwsIFM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOwogCi0JCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1M1X01BU0tfV0RUUkVTRVRfUkVRVUVTVCk7Ci0JCXZhbHVlICY9IH5FWFlOT1M1X1NZU19XRFRSRVNFVDsKLQkJcG11X3Jhd193cml0ZWwodmFsdWUsIEVYWU5PUzVfTUFTS19XRFRSRVNFVF9SRVFVRVNUKTsKKwkvKgorCSAqIFNldCBQU0hPTEQgcG9ydCBmb3Igb3V0cHV0IGhpZ2gKKwkgKi8KKwl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoUzVQX1BTX0hPTERfQ09OVFJPTCk7CisJdmFsdWUgfD0gUzVQX1BTX0hPTERfT1VUUFVUX0hJR0g7CisJcG11X3Jhd193cml0ZWwodmFsdWUsIFM1UF9QU19IT0xEX0NPTlRST0wpOwogCi0JCWV4eW5vc19wbXVfY29uZmlnID0gZXh5bm9zNTI1MF9wbXVfY29uZmlnOwotCQlwcl9pbmZvKCJFWFlOT1M1MjUwIFBNVSBJbml0aWFsaXplXG4iKTsKLQl9IGVsc2UgewotCQlwcl9pbmZvKCJFWFlOT1M6IFBNVSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkvKgorCSAqIEVuYWJsZSBzaWduYWwgZm9yIFBTSE9MRCBwb3J0CisJICovCisJdmFsdWUgPSBwbXVfcmF3X3JlYWRsKFM1UF9QU19IT0xEX0NPTlRST0wpOworCXZhbHVlIHw9IFM1UF9QU19IT0xEX0VOOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBTNVBfUFNfSE9MRF9DT05UUk9MKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zNTI1MF9wbXVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwkvKgorCSAqIFdoZW4gU1lTX1dEVFJFU0VUIGlzIHNldCwgd2F0Y2hkb2cgdGltZXIgcmVzZXQgcmVxdWVzdAorCSAqIGlzIGlnbm9yZWQgYnkgcG93ZXIgbWFuYWdlbWVudCB1bml0LgorCSAqLworCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1M1X0FVVE9fV0RUUkVTRVRfRElTQUJMRSk7CisJdmFsdWUgJj0gfkVYWU5PUzVfU1lTX1dEVFJFU0VUOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBFWFlOT1M1X0FVVE9fV0RUUkVTRVRfRElTQUJMRSk7CisKKwl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNV9NQVNLX1dEVFJFU0VUX1JFUVVFU1QpOworCXZhbHVlICY9IH5FWFlOT1M1X1NZU19XRFRSRVNFVDsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TNV9NQVNLX1dEVFJFU0VUX1JFUVVFU1QpOworfQorCitzdGF0aWMgdm9pZCBleHlub3M1NDIwX3BtdV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWludCBpOworCisJLyoKKwkgKiBTZXQgdGhlIENNVV9SRVNFVCwgQ01VX1NZU0NMSyBhbmQgQ01VX0NMS1NUT1AgcmVnaXN0ZXJzCisJICogZm9yIGxvY2FsIHBvd2VyIGJsb2NrcyB0byBMb3cgaW5pdGlhbGx5IGFzIHBlciBUYWJsZSA4LTQ6CisJICogIlN5c3RlbS1MZXZlbCBQb3dlci1Eb3duIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzIi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShleHlub3M1NDIwX2xpc3RfZGlzYWJsZV9wbXVfcmVnKTsgaSsrKQorCQlwbXVfcmF3X3dyaXRlbCgwLCBleHlub3M1NDIwX2xpc3RfZGlzYWJsZV9wbXVfcmVnW2ldKTsKKworCS8qIEVuYWJsZSBVU0VfU1RBTkRCWV9XRkkgZm9yIGFsbCBDT1JFICovCisJcG11X3Jhd193cml0ZWwoRVhZTk9TNTQyMF9VU0VfU1RBTkRCWV9XRklfQUxMLCBTNVBfQ0VOVFJBTF9TRVFfT1BUSU9OKTsKKworCXZhbHVlICA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TX0wyX09QVElPTigwKSk7CisJdmFsdWUgJj0gfkVYWU5PUzVfVVNFX1JFVEVOVElPTjsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TX0wyX09QVElPTigwKSk7CisKKwl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TX0wyX09QVElPTigxKSk7CisJdmFsdWUgJj0gfkVYWU5PUzVfVVNFX1JFVEVOVElPTjsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TX0wyX09QVElPTigxKSk7CisKKwkvKgorCSAqIElmIEwyX0NPTU1PTiBpcyB0dXJuZWQgb2ZmLCBjbG9ja3MgcmVsYXRlZCB0byBBVEIgYXN5bmMKKwkgKiBicmlkZ2UgYXJlIGdhdGVkLiBUaHVzLCB3aGVuIElTUCBwb3dlciBpcyBnYXRlZCwgTFBJCisJICogbWF5IGdldCBzdHVjay4KKwkgKi8KKwl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNTQyMF9MUElfTUFTSyk7CisJdmFsdWUgfD0gRVhZTk9TNTQyMF9BVEJfSVNQX0FSTTsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TNTQyMF9MUElfTUFTSyk7CisKKwl2YWx1ZSAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzU0MjBfTFBJX01BU0sxKTsKKwl2YWx1ZSB8PSBFWFlOT1M1NDIwX0FUQl9LRkM7CisJcG11X3Jhd193cml0ZWwodmFsdWUsIEVYWU5PUzU0MjBfTFBJX01BU0sxKTsKKworCS8qIFByZXZlbnQgaXNzdWUgb2YgbmV3IGJ1cyByZXF1ZXN0IGZyb20gTDIgbWVtb3J5ICovCisJdmFsdWUgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzU0MjBfQVJNX0NPTU1PTl9PUFRJT04pOworCXZhbHVlIHw9IEVYWU5PUzVfU0tJUF9ERUFDVElWQVRFX0FDRUFDUF9JTl9QV0ROOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBFWFlOT1M1NDIwX0FSTV9DT01NT05fT1BUSU9OKTsKKworCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX0tGQ19DT01NT05fT1BUSU9OKTsKKwl2YWx1ZSB8PSBFWFlOT1M1X1NLSVBfREVBQ1RJVkFURV9BQ0VBQ1BfSU5fUFdETjsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TNTQyMF9LRkNfQ09NTU9OX09QVElPTik7CisKKwkvKiBUaGlzIHNldHRpbmcgaXMgdG8gcmVkdWNlIHN1c3BlbmQvcmVzdW1lIHRpbWUgKi8KKwlwbXVfcmF3X3dyaXRlbChEVVJfV0FJVF9SRVNFVCwgRVhZTk9TNTQyMF9MT0dJQ19SRVNFVF9EVVJBVElPTjMpOworCisJLyogU2VyaWFsaXplZCBDUFUgd2FrZXVwIG9mIEVhZ2xlICovCisJcG11X3Jhd193cml0ZWwoU1BSRUFEX0VOQUJMRSwgRVhZTk9TNTQyMF9BUk1fSU5UUl9TUFJFQURfRU5BQkxFKTsKKworCXBtdV9yYXdfd3JpdGVsKFNQUkVBRF9VU0VfU1RBTkRXRkksCisJCQlFWFlOT1M1NDIwX0FSTV9JTlRSX1NQUkVBRF9VU0VfU1RBTkRCWVdGSSk7CisKKwlwbXVfcmF3X3dyaXRlbCgweDEsIEVYWU5PUzU0MjBfVVBfU0NIRURVTEVSKTsKKworCXBtX3Bvd2VyX29mZiA9IGV4eW5vczVfcG93ZXJfb2ZmOworCXByX2luZm8oIkVYWU5PUzU0MjAgUE1VIGluaXRpYWxpemVkXG4iKTsKK30KKworc3RhdGljIGludCBwbXVfcmVzdGFydF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQl1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZCkKK3sKKwlwbXVfcmF3X3dyaXRlbCgweDEsIEVYWU5PU19TV1JFU0VUKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfcG11X2RhdGEgZXh5bm9zMzI1MF9wbXVfZGF0YSA9IHsKKwkucG11X2NvbmZpZwk9IGV4eW5vczMyNTBfcG11X2NvbmZpZywKKwkucG11X2luaXQJPSBleHlub3MzMjUwX3BtdV9pbml0LAorCS5wb3dlcmRvd25fY29uZl9leHRyYQk9IGV4eW5vczMyNTBfcG93ZXJkb3duX2NvbmZfZXh0cmEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfZGF0YSBleHlub3M0MjEwX3BtdV9kYXRhID0geworCS5wbXVfY29uZmlnCT0gZXh5bm9zNDIxMF9wbXVfY29uZmlnLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfcG11X2RhdGEgZXh5bm9zNDIxMl9wbXVfZGF0YSA9IHsKKwkucG11X2NvbmZpZwk9IGV4eW5vczR4MTJfcG11X2NvbmZpZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3BtdV9kYXRhIGV4eW5vczQ0MTJfcG11X2RhdGEgPSB7CisJLnBtdV9jb25maWcJCT0gZXh5bm9zNHgxMl9wbXVfY29uZmlnLAorCS5wbXVfY29uZmlnX2V4dHJhCT0gZXh5bm9zNDQxMl9wbXVfY29uZmlnLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfcG11X2RhdGEgZXh5bm9zNTI1MF9wbXVfZGF0YSA9IHsKKwkucG11X2NvbmZpZwk9IGV4eW5vczUyNTBfcG11X2NvbmZpZywKKwkucG11X2luaXQJPSBleHlub3M1MjUwX3BtdV9pbml0LAorCS5wb3dlcmRvd25fY29uZgk9IGV4eW5vczVfcG93ZXJkb3duX2NvbmYsCit9OworCitzdGF0aWMgc3RydWN0IGV4eW5vc19wbXVfZGF0YSBleHlub3M1NDIwX3BtdV9kYXRhID0geworCS5wbXVfY29uZmlnCT0gZXh5bm9zNTQyMF9wbXVfY29uZmlnLAorCS5wbXVfaW5pdAk9IGV4eW5vczU0MjBfcG11X2luaXQsCisJLnBvd2VyZG93bl9jb25mCT0gZXh5bm9zNTQyMF9wb3dlcmRvd25fY29uZiwKK307CisKKy8qCisgKiBQTVUgcGxhdGZvcm0gZHJpdmVyIGFuZCBkZXZpY2V0cmVlIGJpbmRpbmdzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBleHlub3NfcG11X29mX2RldmljZV9pZHNbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zMzI1MC1wbXUiLAorCQkuZGF0YSA9ICZleHlub3MzMjUwX3BtdV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczQyMTBfcG11X2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItcG11IiwKKwkJLmRhdGEgPSAmZXh5bm9zNDIxMl9wbXVfZGF0YSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxMi1wbXUiLAorCQkuZGF0YSA9ICZleHlub3M0NDEyX3BtdV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczUyNTBfcG11X2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MjAtcG11IiwKKwkJLmRhdGEgPSAmZXh5bm9zNTQyMF9wbXVfZGF0YSwKKwl9LAorCXsgLypzZW50aW5lbCovIH0sCit9OworCisvKgorICogRXh5bm9zIFBNVSByZXN0YXJ0IG5vdGlmaWVyLCBoYW5kbGVzIHJlc3RhcnQgZnVuY3Rpb25hbGl0eQorICovCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBtdV9yZXN0YXJ0X2hhbmRsZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwbXVfcmVzdGFydF9ub3RpZnksCisJLnByaW9yaXR5ID0gMTI4LAorfTsKKworc3RhdGljIGludCBleHlub3NfcG11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlwbXVfYmFzZV9hZGRyID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHBtdV9iYXNlX2FkZHIpKQorCQlyZXR1cm4gUFRSX0VSUihwbXVfYmFzZV9hZGRyKTsKKworCXBtdV9jb250ZXh0ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCisJCQlzaXplb2Yoc3RydWN0IGV4eW5vc19wbXVfY29udGV4dCksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXBtdV9jb250ZXh0KSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJcG11X2NvbnRleHQtPmRldiA9IGRldjsKIAorCW1hdGNoID0gb2ZfbWF0Y2hfbm9kZShleHlub3NfcG11X29mX2RldmljZV9pZHMsIGRldi0+b2Zfbm9kZSk7CisKKwlwbXVfY29udGV4dC0+cG11X2RhdGEgPSBtYXRjaC0+ZGF0YTsKKworCWlmIChwbXVfY29udGV4dC0+cG11X2RhdGEtPnBtdV9pbml0KQorCQlwbXVfY29udGV4dC0+cG11X2RhdGEtPnBtdV9pbml0KCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwbXVfY29udGV4dCk7CisKKwlyZXQgPSByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJnBtdV9yZXN0YXJ0X2hhbmRsZXIpOworCWlmIChyZXQpCisJCWRldl93YXJuKGRldiwgImNhbid0IHJlZ2lzdGVyIHJlc3RhcnQgaGFuZGxlciBlcnI9JWRcbiIsIHJldCk7CisKKwlkZXZfZGJnKGRldiwgIkV4eW5vcyBQTVUgRHJpdmVyIHByb2JlIGRvbmVcbiIpOwogCXJldHVybiAwOwogfQotYXJjaF9pbml0Y2FsbChleHlub3NfcG11X2luaXQpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBleHlub3NfcG11X2RyaXZlciA9IHsKKwkuZHJpdmVyICA9IHsKKwkJLm5hbWUgICA9ICJleHlub3MtcG11IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGV4eW5vc19wbXVfb2ZfZGV2aWNlX2lkcywKKwl9LAorCS5wcm9iZSA9IGV4eW5vc19wbXVfcHJvYmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBleHlub3NfcG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZleHlub3NfcG11X2RyaXZlcik7CisKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKGV4eW5vc19wbXVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9yZWdzLXBtdS5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcmVncy1wbXUuaAppbmRleCA5NmExNTY5Li5iNWY0NDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9yZWdzLXBtdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3JlZ3MtcG11LmgKQEAgLTE5LDggKzE5LDI0IEBACiAjZGVmaW5lIFM1UF9DRU5UUkFMX1NFUV9PUFRJT04JCQkweDAyMDgKIAogI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZJMAkJCSgxIDw8IDE2KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZJMQkJCSgxIDw8IDE3KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZJMgkJCSgxIDw8IDE5KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZJMwkJCSgxIDw8IDIwKQogI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZFMAkJCSgxIDw8IDI0KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZFMQkJCSgxIDw8IDI1KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZFMgkJCSgxIDw8IDI3KQorI2RlZmluZSBTNVBfVVNFX1NUQU5EQllfV0ZFMwkJCSgxIDw8IDI4KQogCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRklfQUxMIFwKKwkoUzVQX1VTRV9TVEFOREJZX1dGSTAgfCBTNVBfVVNFX1NUQU5EQllfV0ZJMSB8IFwKKwkgUzVQX1VTRV9TVEFOREJZX1dGSTIgfCBTNVBfVVNFX1NUQU5EQllfV0ZJMyB8IFwKKwkgUzVQX1VTRV9TVEFOREJZX1dGRTAgfCBTNVBfVVNFX1NUQU5EQllfV0ZFMSB8IFwKKwkgUzVQX1VTRV9TVEFOREJZX1dGRTIgfCBTNVBfVVNFX1NUQU5EQllfV0ZFMykKKworI2RlZmluZSBTNVBfVVNFX0RFTEFZRURfUkVTRVRfQVNTRVJUSU9OCQlCSVQoMTIpCisKKyNkZWZpbmUgRVhZTk9TX0NPUkVfUE9fUkVTRVQobikJCQkoKDEgPDwgNCkgPDwgbikKKyNkZWZpbmUgRVhZTk9TX1dBS0VVUF9GUk9NX0xPV1BXUgkJKDEgPDwgMjgpCiAjZGVmaW5lIEVYWU5PU19TV1JFU0VUCQkJCTB4MDQwMAogI2RlZmluZSBFWFlOT1M1NDQwX1NXUkVTRVQJCQkweDAwQzQKIApAQCAtMzUsNiArNTEsNyBAQAogI2RlZmluZSBTNVBfSU5GT1JNNwkJCQkweDA4MUMKICNkZWZpbmUgUzVQX1BNVV9TUEFSRTMJCQkJMHgwOTBDCiAKKyNkZWZpbmUgRVhZTk9TX0lST01fREFUQTIJCQkweDA5ODgKICNkZWZpbmUgUzVQX0FSTV9DT1JFMF9MT1dQV1IJCQkweDEwMDAKICNkZWZpbmUgUzVQX0RJU19JUlFfQ09SRTAJCQkweDEwMDQKICNkZWZpbmUgUzVQX0RJU19JUlFfQ0VOVFJBTDAJCQkweDEwMDgKQEAgLTEwNiw2ICsxMjMsOCBAQAogCQkJKEVYWU5PU19BUk1fQ09SRTBfQ09ORklHVVJBVElPTiArICgweDgwICogKF9ucikpKQogI2RlZmluZSBFWFlOT1NfQVJNX0NPUkVfU1RBVFVTKF9ucikJCVwKIAkJCShFWFlOT1NfQVJNX0NPUkVfQ09ORklHVVJBVElPTihfbnIpICsgMHg0KQorI2RlZmluZSBFWFlOT1NfQVJNX0NPUkVfT1BUSU9OKF9ucikJCVwKKwkJCShFWFlOT1NfQVJNX0NPUkVfQ09ORklHVVJBVElPTihfbnIpICsgMHg4KQogCiAjZGVmaW5lIEVYWU5PU19BUk1fQ09NTU9OX0NPTkZJR1VSQVRJT04JCTB4MjUwMAogI2RlZmluZSBFWFlOT1NfQ09NTU9OX0NPTkZJR1VSQVRJT04oX25yKQlcCkBAIC0xMTUsNiArMTM0LDMxIEBACiAjZGVmaW5lIEVYWU5PU19DT01NT05fT1BUSU9OKF9ucikJCVwKIAkJCShFWFlOT1NfQ09NTU9OX0NPTkZJR1VSQVRJT04oX25yKSArIDB4OCkKIAorI2RlZmluZSBFWFlOT1NfQ09SRV9MT0NBTF9QV1JfRU4JCTB4MworCisjZGVmaW5lIEVYWU5PU19BUk1fQ09NTU9OX1NUQVRVUwkJMHgyNTA0CisjZGVmaW5lIEVYWU5PU19DT01NT05fT1BUSU9OKF9ucikJCVwKKwkJCShFWFlOT1NfQ09NTU9OX0NPTkZJR1VSQVRJT04oX25yKSArIDB4OCkKKworI2RlZmluZSBFWFlOT1NfQVJNX0wyX0NPTkZJR1VSQVRJT04JCTB4MjYwMAorI2RlZmluZSBFWFlOT1NfTDJfQ09ORklHVVJBVElPTihfbnIpCQlcCisJCQkoRVhZTk9TX0FSTV9MMl9DT05GSUdVUkFUSU9OICsgKChfbnIpICogMHg4MCkpCisjZGVmaW5lIEVYWU5PU19MMl9TVEFUVVMoX25yKQkJCVwKKwkJCShFWFlOT1NfTDJfQ09ORklHVVJBVElPTihfbnIpICsgMHg0KQorI2RlZmluZSBFWFlOT1NfTDJfT1BUSU9OKF9ucikJCQlcCisJCQkoRVhZTk9TX0wyX0NPTkZJR1VSQVRJT04oX25yKSArIDB4OCkKKyNkZWZpbmUgRVhZTk9TX0wyX0NPTU1PTl9QV1JfRU4JCQkweDMKKworI2RlZmluZSBFWFlOT1NfQVJNX0NPUkVfWF9TVEFUVVNfT0ZGU0VUCQkweDQKKworI2RlZmluZSBFWFlOT1M1X0FQTExfU1lTQ0xLX0NPTkZJR1VSQVRJT04JMHgyQTAwCisjZGVmaW5lIEVYWU5PUzVfQVBMTF9TWVNDTEtfU1RBVFVTCQkweDJBMDQKKworI2RlZmluZSBFWFlOT1M1X0FSTV9MMl9PUFRJT04JCQkweDI2MDgKKyNkZWZpbmUgRVhZTk9TNV9VU0VfUkVURU5USU9OCQkJQklUKDQpCisKKyNkZWZpbmUgRVhZTk9TNV9MMlJTVERJU0FCTEVfVkFMVUUJCUJJVCgzKQorCiAjZGVmaW5lIFM1UF9QQURfUkVUX01BVURJT19PUFRJT04JCTB4MzAyOAogI2RlZmluZSBTNVBfUEFEX1JFVF9HUElPX09QVElPTgkJCTB4MzEwOAogI2RlZmluZSBTNVBfUEFEX1JFVF9VQVJUX09QVElPTgkJCTB4MzEyOApAQCAtMTIzLDcgKzE2NywxOSBAQAogI2RlZmluZSBTNVBfUEFEX1JFVF9FQklBX09QVElPTgkJCTB4MzE4OAogI2RlZmluZSBTNVBfUEFEX1JFVF9FQklCX09QVElPTgkJCTB4MzFBOAogCisjZGVmaW5lIFM1UF9QU19IT0xEX0NPTlRST0wJCQkweDMzMEMKKyNkZWZpbmUgUzVQX1BTX0hPTERfRU4JCQkJKDEgPDwgMzEpCisjZGVmaW5lIFM1UF9QU19IT0xEX09VVFBVVF9ISUdICQkJKDMgPDwgOCkKKworI2RlZmluZSBTNVBfQ0FNX09QVElPTgkJCQkweDNDMDgKKyNkZWZpbmUgUzVQX01GQ19PUFRJT04JCQkJMHgzQzQ4CisjZGVmaW5lIFM1UF9HM0RfT1BUSU9OCQkJCTB4M0M2OAorI2RlZmluZSBTNVBfTENEMF9PUFRJT04JCQkJMHgzQzg4CisjZGVmaW5lIFM1UF9MQ0QxX09QVElPTgkJCQkweDNDQTgKKyNkZWZpbmUgUzVQX0lTUF9PUFRJT04JCQkJUzVQX0xDRDFfT1BUSU9OCisKICNkZWZpbmUgUzVQX0NPUkVfTE9DQUxfUFdSX0VOCQkJMHgzCisjZGVmaW5lIFM1UF9DT1JFX1dBS0VVUF9GUk9NX0xPQ0FMX0NGRwkJKDB4MyA8PCA4KQogCiAvKiBPbmx5IGZvciBFWFlOT1M0MjEwICovCiAjZGVmaW5lIFM1UF9DTVVfQ0xLU1RPUF9MQ0QxX0xPV1BXUgkweDExNTQKQEAgLTE4MiwxMSArMjM4LDExNiBAQAogI2RlZmluZSBTNVBfRElTX0lSUV9DT1JFMwkJCTB4MTAzNAogI2RlZmluZSBTNVBfRElTX0lSUV9DRU5UUkFMMwkJCTB4MTAzOAogCisvKiBPbmx5IGZvciBFWFlOT1MzWFhYICovCisjZGVmaW5lIEVYWU5PUzNfQVJNX0NPUkUwX1NZU19QV1JfUkVHCQkJMHgxMDAwCisjZGVmaW5lIEVYWU5PUzNfRElTX0lSUV9BUk1fQ09SRTBfTE9DQUxfU1lTX1BXUl9SRUcJMHgxMDA0CisjZGVmaW5lIEVYWU5PUzNfRElTX0lSUV9BUk1fQ09SRTBfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwMDgKKyNkZWZpbmUgRVhZTk9TM19BUk1fQ09SRTFfU1lTX1BXUl9SRUcJCQkweDEwMTAKKyNkZWZpbmUgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMV9MT0NBTF9TWVNfUFdSX1JFRwkweDEwMTQKKyNkZWZpbmUgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMV9DRU5UUkFMX1NZU19QV1JfUkVHCTB4MTAxOAorI2RlZmluZSBFWFlOT1MzX0lTUF9BUk1fU1lTX1BXUl9SRUcJCQkweDEwNTAKKyNkZWZpbmUgRVhZTk9TM19ESVNfSVJRX0lTUF9BUk1fTE9DQUxfU1lTX1BXUl9SRUcJMHgxMDU0CisjZGVmaW5lIEVYWU5PUzNfRElTX0lSUV9JU1BfQVJNX0NFTlRSQUxfU1lTX1BXUl9SRUcJMHgxMDU4CisjZGVmaW5lIEVYWU5PUzNfQVJNX0NPTU1PTl9TWVNfUFdSX1JFRwkJCTB4MTA4MAorI2RlZmluZSBFWFlOT1MzX0FSTV9MMl9TWVNfUFdSX1JFRwkJCTB4MTBDMAorI2RlZmluZSBFWFlOT1MzX0NNVV9BQ0xLU1RPUF9TWVNfUFdSX1JFRwkJMHgxMTAwCisjZGVmaW5lIEVYWU5PUzNfQ01VX1NDTEtTVE9QX1NZU19QV1JfUkVHCQkweDExMDQKKyNkZWZpbmUgRVhZTk9TM19DTVVfUkVTRVRfU1lTX1BXUl9SRUcJCQkweDExMEMKKyNkZWZpbmUgRVhZTk9TM19DTVVfQUNMS1NUT1BfQ09SRUJMS19TWVNfUFdSX1JFRwkweDExMTAKKyNkZWZpbmUgRVhZTk9TM19DTVVfU0NMS1NUT1BfQ09SRUJMS19TWVNfUFdSX1JFRwkweDExMTQKKyNkZWZpbmUgRVhZTk9TM19DTVVfUkVTRVRfQ09SRUJMS19TWVNfUFdSX1JFRwkJMHgxMTFDCisjZGVmaW5lIEVYWU5PUzNfQVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDExMjAKKyNkZWZpbmUgRVhZTk9TM19NUExMX1NZU0NMS19TWVNfUFdSX1JFRwkJCTB4MTEyNAorI2RlZmluZSBFWFlOT1MzX1ZQTExfU1lTQ0xLX1NZU19QV1JfUkVHCQkJMHgxMTI4CisjZGVmaW5lIEVYWU5PUzNfRVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDExMkMKKyNkZWZpbmUgRVhZTk9TM19NUExMVVNFUl9TWVNDTEtfU1lTX1BXUl9SRUcJCTB4MTEzMAorI2RlZmluZSBFWFlOT1MzX0JQTExVU0VSX1NZU0NMS19TWVNfUFdSX1JFRwkJMHgxMTM0CisjZGVmaW5lIEVYWU5PUzNfRVBMTFVTRVJfU1lTQ0xLX1NZU19QV1JfUkVHCQkweDExMzgKKyNkZWZpbmUgRVhZTk9TM19DTVVfQ0xLU1RPUF9DQU1fU1lTX1BXUl9SRUcJCTB4MTE0MAorI2RlZmluZSBFWFlOT1MzX0NNVV9DTEtTVE9QX01GQ19TWVNfUFdSX1JFRwkJMHgxMTQ4CisjZGVmaW5lIEVYWU5PUzNfQ01VX0NMS1NUT1BfRzNEX1NZU19QV1JfUkVHCQkweDExNEMKKyNkZWZpbmUgRVhZTk9TM19DTVVfQ0xLU1RPUF9MQ0QwX1NZU19QV1JfUkVHCQkweDExNTAKKyNkZWZpbmUgRVhZTk9TM19DTVVfQ0xLU1RPUF9JU1BfU1lTX1BXUl9SRUcJCTB4MTE1NAorI2RlZmluZSBFWFlOT1MzX0NNVV9DTEtTVE9QX01BVURJT19TWVNfUFdSX1JFRwkJMHgxMTU4CisjZGVmaW5lIEVYWU5PUzNfQ01VX1JFU0VUX0NBTV9TWVNfUFdSX1JFRwkJMHgxMTYwCisjZGVmaW5lIEVYWU5PUzNfQ01VX1JFU0VUX01GQ19TWVNfUFdSX1JFRwkJMHgxMTY4CisjZGVmaW5lIEVYWU5PUzNfQ01VX1JFU0VUX0czRF9TWVNfUFdSX1JFRwkJMHgxMTZDCisjZGVmaW5lIEVYWU5PUzNfQ01VX1JFU0VUX0xDRDBfU1lTX1BXUl9SRUcJCTB4MTE3MAorI2RlZmluZSBFWFlOT1MzX0NNVV9SRVNFVF9JU1BfU1lTX1BXUl9SRUcJCTB4MTE3NAorI2RlZmluZSBFWFlOT1MzX0NNVV9SRVNFVF9NQVVESU9fU1lTX1BXUl9SRUcJCTB4MTE3OAorI2RlZmluZSBFWFlOT1MzX1RPUF9CVVNfU1lTX1BXUl9SRUcJCQkweDExODAKKyNkZWZpbmUgRVhZTk9TM19UT1BfUkVURU5USU9OX1NZU19QV1JfUkVHCQkweDExODQKKyNkZWZpbmUgRVhZTk9TM19UT1BfUFdSX1NZU19QV1JfUkVHCQkJMHgxMTg4CisjZGVmaW5lIEVYWU5PUzNfVE9QX0JVU19DT1JFQkxLX1NZU19QV1JfUkVHCQkweDExOTAKKyNkZWZpbmUgRVhZTk9TM19UT1BfUkVURU5USU9OX0NPUkVCTEtfU1lTX1BXUl9SRUcJMHgxMTk0CisjZGVmaW5lIEVYWU5PUzNfVE9QX1BXUl9DT1JFQkxLX1NZU19QV1JfUkVHCQkweDExOTgKKyNkZWZpbmUgRVhZTk9TM19MT0dJQ19SRVNFVF9TWVNfUFdSX1JFRwkJCTB4MTFBMAorI2RlZmluZSBFWFlOT1MzX09TQ0NMS19HQVRFX1NZU19QV1JfUkVHCQkJMHgxMUE0CisjZGVmaW5lIEVYWU5PUzNfTE9HSUNfUkVTRVRfQ09SRUJMS19TWVNfUFdSX1JFRwkJMHgxMUIwCisjZGVmaW5lIEVYWU5PUzNfT1NDQ0xLX0dBVEVfQ09SRUJMS19TWVNfUFdSX1JFRwkJMHgxMUI0CisjZGVmaW5lIEVYWU5PUzNfUEFEX1JFVEVOVElPTl9EUkFNX1NZU19QV1JfUkVHCQkweDEyMDAKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX01BVURJT19TWVNfUFdSX1JFRwkweDEyMDQKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX1NQSV9TWVNfUFdSX1JFRwkJMHgxMjA4CisjZGVmaW5lIEVYWU5PUzNfUEFEX1JFVEVOVElPTl9NTUMyX1NZU19QV1JfUkVHCQkweDEyMTgKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX0dQSU9fU1lTX1BXUl9SRUcJCTB4MTIyMAorI2RlZmluZSBFWFlOT1MzX1BBRF9SRVRFTlRJT05fVUFSVF9TWVNfUFdSX1JFRwkJMHgxMjI0CisjZGVmaW5lIEVYWU5PUzNfUEFEX1JFVEVOVElPTl9NTUMwX1NZU19QV1JfUkVHCQkweDEyMjgKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX01NQzFfU1lTX1BXUl9SRUcJCTB4MTIyQworI2RlZmluZSBFWFlOT1MzX1BBRF9SRVRFTlRJT05fRUJJQV9TWVNfUFdSX1JFRwkJMHgxMjMwCisjZGVmaW5lIEVYWU5PUzNfUEFEX1JFVEVOVElPTl9FQklCX1NZU19QV1JfUkVHCQkweDEyMzQKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX0pUQUdfU1lTX1BXUl9SRUcJCTB4MTIzOAorI2RlZmluZSBFWFlOT1MzX1BBRF9JU09MQVRJT05fU1lTX1BXUl9SRUcJCTB4MTI0MAorI2RlZmluZSBFWFlOT1MzX1BBRF9BTFZfU0VMX1NZU19QV1JfUkVHCQkJMHgxMjYwCisjZGVmaW5lIEVYWU5PUzNfWFVTQlhUSV9TWVNfUFdSX1JFRwkJCTB4MTI4MAorI2RlZmluZSBFWFlOT1MzX1hYVElfU1lTX1BXUl9SRUcJCQkweDEyODQKKyNkZWZpbmUgRVhZTk9TM19FWFRfUkVHVUxBVE9SX1NZU19QV1JfUkVHCQkweDEyQzAKKyNkZWZpbmUgRVhZTk9TM19FWFRfUkVHVUxBVE9SX0NPUkVCTEtfU1lTX1BXUl9SRUcJMHgxMkM0CisjZGVmaW5lIEVYWU5PUzNfR1BJT19NT0RFX1NZU19QV1JfUkVHCQkJMHgxMzAwCisjZGVmaW5lIEVYWU5PUzNfR1BJT19NT0RFX01BVURJT19TWVNfUFdSX1JFRwkJMHgxMzQwCisjZGVmaW5lIEVYWU5PUzNfVE9QX0FTQl9SRVNFVF9TWVNfUFdSX1JFRwkJMHgxMzQ0CisjZGVmaW5lIEVYWU5PUzNfVE9QX0FTQl9JU09MQVRJT05fU1lTX1BXUl9SRUcJCTB4MTM0OAorI2RlZmluZSBFWFlOT1MzX1RPUF9BU0JfUkVTRVRfQ09SRUJMS19TWVNfUFdSX1JFRwkweDEzNTAKKyNkZWZpbmUgRVhZTk9TM19UT1BfQVNCX0lTT0xBVElPTl9DT1JFQkxLX1NZU19QV1JfUkVHCTB4MTM1NAorI2RlZmluZSBFWFlOT1MzX0NBTV9TWVNfUFdSX1JFRwkJCQkweDEzODAKKyNkZWZpbmUgRVhZTk9TM19NRkNfU1lTX1BXUl9SRUcJCQkJMHgxMzg4CisjZGVmaW5lIEVYWU5PUzNfRzNEX1NZU19QV1JfUkVHCQkJCTB4MTM4QworI2RlZmluZSBFWFlOT1MzX0xDRDBfU1lTX1BXUl9SRUcJCQkweDEzOTAKKyNkZWZpbmUgRVhZTk9TM19JU1BfU1lTX1BXUl9SRUcJCQkJMHgxMzk0CisjZGVmaW5lIEVYWU5PUzNfTUFVRElPX1NZU19QV1JfUkVHCQkJMHgxMzk4CisjZGVmaW5lIEVYWU5PUzNfRFJBTV9GUkVRX0RPV05fU1lTX1BXUl9SRUcJCTB4MTNCMAorI2RlZmluZSBFWFlOT1MzX0REUlBIWV9ETExPRkZfU1lTX1BXUl9SRUcJCTB4MTNCNAorI2RlZmluZSBFWFlOT1MzX0NNVV9TWVNDTEtfSVNQX1NZU19QV1JfUkVHCQkweDEzQjgKKyNkZWZpbmUgRVhZTk9TM19MUEREUl9QSFlfRExMX0xPQ0tfU1lTX1BXUl9SRUcJCTB4MTNDMAorI2RlZmluZSBFWFlOT1MzX0JQTExfU1lTQ0xLX1NZU19QV1JfUkVHCQkJMHgxM0M0CisjZGVmaW5lIEVYWU5PUzNfVVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDEzQzgKKworI2RlZmluZSBFWFlOT1MzX0FSTV9DT1JFMF9PUFRJT04JCQkweDIwMDgKKyNkZWZpbmUgRVhZTk9TM19BUk1fQ09SRV9PUFRJT04oX25yKQlcCisJCQkoRVhZTk9TM19BUk1fQ09SRTBfT1BUSU9OICsgKChfbnIpICogMHg4MCkpCisKKyNkZWZpbmUgRVhZTk9TM19BUk1fQ09NTU9OX09QVElPTgkJCTB4MjQwOAorI2RlZmluZSBFWFlOT1MzX1RPUF9QV1JfT1BUSU9OCQkJCTB4MkM0OAorI2RlZmluZSBFWFlOT1MzX0NPUkVfVE9QX1BXUl9PUFRJT04JCQkweDJDQTgKKyNkZWZpbmUgRVhZTk9TM19YVVNCWFRJX0RVUkFUSU9OCQkJMHgzNDFDCisjZGVmaW5lIEVYWU5PUzNfWFhUSV9EVVJBVElPTgkJCQkweDM0M0MKKyNkZWZpbmUgRVhZTk9TM19FWFRfUkVHVUxBVE9SX0RVUkFUSU9OCQkJMHgzNjFDCisjZGVmaW5lIEVYWU5PUzNfRVhUX1JFR1VMQVRPUl9DT1JFQkxLX0RVUkFUSU9OCQkweDM2M0MKKyNkZWZpbmUgWFVTQlhUSV9EVVJBVElPTgkJCQkweDAwMDAwQkI4CisjZGVmaW5lIFhYVElfRFVSQVRJT04JCQkJCVhVU0JYVElfRFVSQVRJT04KKyNkZWZpbmUgRVhUX1JFR1VMQVRPUl9EVVJBVElPTgkJCQkweDAwMDAxRDRDCisjZGVmaW5lIEVYVF9SRUdVTEFUT1JfQ09SRUJMS19EVVJBVElPTgkJCUVYVF9SRUdVTEFUT1JfRFVSQVRJT04KKworLyogZm9yIFhYWF9PUFRJT04gKi8KKyNkZWZpbmUgRVhZTk9TM19PUFRJT05fVVNFX1NDX0NPVU5URVIJCQkoMSA8PCAwKQorI2RlZmluZSBFWFlOT1MzX09QVElPTl9VU0VfU0NfRkVFREJBQ0sJCQkoMSA8PCAxKQorI2RlZmluZSBFWFlOT1MzX09QVElPTl9TS0lQX0RFQUNUSVZBVEVfQUNFQUNQX0lOX1BXRE4JKDEgPDwgNykKKwogLyogRm9yIEVYWU5PUzUgKi8KIAogI2RlZmluZSBFWFlOT1M1X0FVVE9fV0RUUkVTRVRfRElTQUJMRQkJCQkweDA0MDgKICNkZWZpbmUgRVhZTk9TNV9NQVNLX1dEVFJFU0VUX1JFUVVFU1QJCQkJMHgwNDBDCiAKKyNkZWZpbmUgRVhZTk9TNV9VU0VfUkVURU5USU9OCQkJQklUKDQpCiAjZGVmaW5lIEVYWU5PUzVfU1lTX1dEVFJFU0VUCQkJCQkoMSA8PCAyMCkKIAogI2RlZmluZSBFWFlOT1M1X0FSTV9DT1JFMF9TWVNfUFdSX1JFRwkJCQkweDEwMDAKQEAgLTMyNiw0ICs0ODcsMjA0IEBACiAJCSArIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKSk7CiB9CiAKKy8qIE9ubHkgZm9yIEVYWU5PUzU0MjAgKi8KKyNkZWZpbmUgRVhZTk9TNTQyMF9JU1BfQVJNX09QVElPTgkJCQkweDI0ODgKKyNkZWZpbmUgRVhZTk9TNTQyMF9MMlJTVERJU0FCTEVfVkFMVUUJCQkJQklUKDMpCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9MUElfTUFTSwkJCQkJMHgwMDA0CisjZGVmaW5lIEVYWU5PUzU0MjBfTFBJX01BU0sxCQkJCQkweDAwMDgKKyNkZWZpbmUgRVhZTk9TNTQyMF9VRlMJCQkJCQlCSVQoOCkKKyNkZWZpbmUgRVhZTk9TNTQyMF9BVEJfS0ZDCQkJCQlCSVQoMTMpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVRCX0lTUF9BUk0JCQkJCUJJVCgxOSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9FTVVMQVRJT04JCQkJCUJJVCgzMSkKKyNkZWZpbmUgQVRCX0lTUF9BUk0JCQkJCQlCSVQoMTIpCisjZGVmaW5lIEFUQl9LRkMJCQkJCQkJQklUKDEzKQorI2RlZmluZSBBVEJfTk9DCQkJCQkJCUJJVCgxNCkKKworI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9JTlRSX1NQUkVBRF9FTkFCTEUJCQkweDAxMDAKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fSU5UUl9TUFJFQURfVVNFX1NUQU5EQllXRkkJCTB4MDEwNAorI2RlZmluZSBFWFlOT1M1NDIwX1VQX1NDSEVEVUxFUgkJCQkJMHgwMTIwCisjZGVmaW5lIFNQUkVBRF9FTkFCTEUJCQkJCQkweEYKKyNkZWZpbmUgU1BSRUFEX1VTRV9TVEFORFdGSQkJCQkJMHhGCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9CQl9DT04xCQkJCQkweDA3ODQKKyNkZWZpbmUgRVhZTk9TNTQyMF9CQl9TRUxfRU4JCQkJCUJJVCgzMSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9CQl9QTU9TX0VOCQkJCQlCSVQoNykKKyNkZWZpbmUgRVhZTk9TNTQyMF9CQl8xMzAwWAkJCQkJMFhGCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fQ09SRTJfU1lTX1BXUl9SRUcJCQkweDEwMjAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0FSTV9DT1JFMl9MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDI0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9BUk1fQ09SRTJfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwMjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fQ09SRTNfU1lTX1BXUl9SRUcJCQkweDEwMzAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0FSTV9DT1JFM19MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDM0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9BUk1fQ09SRTNfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwMzgKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfQ09SRTBfU1lTX1BXUl9SRUcJCQkweDEwNDAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMF9MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDQ0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTBfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwNDgKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfQ09SRTFfU1lTX1BXUl9SRUcJCQkweDEwNTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMV9MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDU0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTFfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwNTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfQ09SRTJfU1lTX1BXUl9SRUcJCQkweDEwNjAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMl9MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDY0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTJfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwNjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfQ09SRTNfU1lTX1BXUl9SRUcJCQkweDEwNzAKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFM19MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDc0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTNfQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwNzgKKyNkZWZpbmUgRVhZTk9TNTQyMF9JU1BfQVJNX1NZU19QV1JfUkVHCQkJCTB4MTA5MAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU19JUlFfSVNQX0FSTV9MT0NBTF9TWVNfUFdSX1JFRwkJMHgxMDk0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9JU1BfQVJNX0NFTlRSQUxfU1lTX1BXUl9SRUcJCTB4MTA5OAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT01NT05fU1lTX1BXUl9SRUcJCQkweDEwQTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfQ09NTU9OX1NZU19QV1JfUkVHCQkJMHgxMEIwCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX0wyX1NZU19QV1JfUkVHCQkJCTB4MTBEMAorI2RlZmluZSBFWFlOT1M1NDIwX0RQTExfU1lTQ0xLX1NZU19QV1JfUkVHCQkJMHgxMTU4CisjZGVmaW5lIEVYWU5PUzU0MjBfSVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDExNUMKKyNkZWZpbmUgRVhZTk9TNTQyMF9LUExMX1NZU0NMS19TWVNfUFdSX1JFRwkJCTB4MTE2MAorI2RlZmluZSBFWFlOT1M1NDIwX1JQTExfU1lTQ0xLX1NZU19QV1JfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MTE3NAorI2RlZmluZSBFWFlOT1M1NDIwX1NQTExfU1lTQ0xLX1NZU19QV1JfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MTE3OAorI2RlZmluZSBFWFlOT1M1NDIwX0lOVFJBTV9NRU1fU1lTX1BXUl9SRUcgICAgICAgICAgICAgICAgICAgICAgIDB4MTFCOAorI2RlZmluZSBFWFlOT1M1NDIwX0lOVFJPTV9NRU1fU1lTX1BXUl9SRUcgICAgICAgICAgICAgICAgICAgICAgIDB4MTFCQworI2RlZmluZSBFWFlOT1M1NDIwX09ORU5BTkRYTF9NRU1fU1lTX1BXUgkJCTB4MTFDMAorI2RlZmluZSBFWFlOT1M1NDIwX1VTQkRFVl9NRU1fU1lTX1BXUgkJCQkweDExQ0MKKyNkZWZpbmUgRVhZTk9TNTQyMF9VU0JERVYxX01FTV9TWVNfUFdSCQkJCTB4MTFEMAorI2RlZmluZSBFWFlOT1M1NDIwX1NETU1DX01FTV9TWVNfUFdSCQkJCTB4MTFENAorI2RlZmluZSBFWFlOT1M1NDIwX0NTU1lTX01FTV9TWVNfUFdSCQkJCTB4MTFEOAorI2RlZmluZSBFWFlOT1M1NDIwX1NFQ1NTX01FTV9TWVNfUFdSCQkJCTB4MTFEQworI2RlZmluZSBFWFlOT1M1NDIwX1JPVEFUT1JfTUVNX1NZU19QV1IJCQkJMHgxMUUwCisjZGVmaW5lIEVYWU5PUzU0MjBfSU5UUkFNX01FTV9TWVNfUFdSCQkJCTB4MTFFNAorI2RlZmluZSBFWFlOT1M1NDIwX0lOVFJPTV9NRU1fU1lTX1BXUgkJCQkweDExRTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0pUQUdfU1lTX1BXUl9SRUcJCTB4MTIwOAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fRFJBTV9TWVNfUFdSX1JFRwkJMHgxMjEwCisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9VQVJUX1NZU19QV1JfUkVHCQkweDEyMTQKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX01NQzBfU1lTX1BXUl9SRUcJCTB4MTIxOAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fTU1DMV9TWVNfUFdSX1JFRwkJMHgxMjFDCisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9NTUMyX1NZU19QV1JfUkVHCQkweDEyMjAKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0hTSV9TWVNfUFdSX1JFRwkJMHgxMjI0CisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9FQklBX1NZU19QV1JfUkVHCQkweDEyMjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0VCSUJfU1lTX1BXUl9SRUcJCTB4MTIyQworI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fU1BJX1NZU19QV1JfUkVHCQkweDEyMzAKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0RSQU1fQ09SRUJMS19TWVNfUFdSX1JFRwkweDEyMzQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNQMV9TWVNfUFdSX1JFRwkJCQkweDE0MTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9NQVVfU1lTX1BXUl9SRUcJCQkJMHgxNDE0CisjZGVmaW5lIEVYWU5PUzU0MjBfRzJEX1NZU19QV1JfUkVHCQkJCTB4MTQxOAorI2RlZmluZSBFWFlOT1M1NDIwX01TQ19TWVNfUFdSX1JFRwkJCQkweDE0MUMKKyNkZWZpbmUgRVhZTk9TNTQyMF9GU1lTX1NZU19QV1JfUkVHCQkJCTB4MTQyMAorI2RlZmluZSBFWFlOT1M1NDIwX0ZTWVMyX1NZU19QV1JfUkVHCQkJCTB4MTQyNAorI2RlZmluZSBFWFlOT1M1NDIwX1BTR0VOX1NZU19QV1JfUkVHCQkJCTB4MTQyOAorI2RlZmluZSBFWFlOT1M1NDIwX1BFUklDX1NZU19QV1JfUkVHCQkJCTB4MTQyQworI2RlZmluZSBFWFlOT1M1NDIwX1dDT1JFX1NZU19QV1JfUkVHCQkJCTB4MTQzMAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0RJU1AxX1NZU19QV1JfUkVHCQkweDE0OTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9NQVVfU1lTX1BXUl9SRUcJCQkweDE0OTQKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9HMkRfU1lTX1BXUl9SRUcJCQkweDE0OTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9NU0NfU1lTX1BXUl9SRUcJCQkweDE0OUMKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9GU1lTX1NZU19QV1JfUkVHCQkJMHgxNEEwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfRlNZUzJfU1lTX1BXUl9SRUcJCTB4MTRBNAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX1BTR0VOX1NZU19QV1JfUkVHCQkweDE0QTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9QRVJJQ19TWVNfUFdSX1JFRwkJMHgxNEFDCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfV0NPUkVfU1lTX1BXUl9SRUcJCTB4MTRCMAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfVE9QUFdSX1NZU19QV1JfUkVHCQkweDE0QkMKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0RJU1AxX1NZU19QV1JfUkVHCQkJMHgxNEQwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19NQVVfU1lTX1BXUl9SRUcJCQkweDE0RDQKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0cyRF9TWVNfUFdSX1JFRwkJCTB4MTREOAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfTVNDX1NZU19QV1JfUkVHCQkJMHgxNERDCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19GU1lTX1NZU19QV1JfUkVHCQkJMHgxNEUwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19GU1lTMl9TWVNfUFdSX1JFRwkJCTB4MTRFNAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfUFNHRU5fU1lTX1BXUl9SRUcJCQkweDE0RTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX1BFUklDX1NZU19QV1JfUkVHCQkJMHgxNEVDCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19XQ09SRV9TWVNfUFdSX1JFRwkJCTB4MTRGMAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfU1lTTUVNX1RPUFBXUl9TWVNfUFdSX1JFRwkJMHgxNEY0CisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX0ZTWVMyX1NZU19QV1JfUkVHCQkJMHgxNTcwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX1BTR0VOX1NZU19QV1JfUkVHCQkJMHgxNTc0CisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX1BFUklDX1NZU19QV1JfUkVHCQkJMHgxNTc4CisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX1dDT1JFX1NZU19QV1JfUkVHCQkJMHgxNTdDCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX0RJU1AxX1NZU19QV1JfUkVHCQkJMHgxNTkwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX01BVV9TWVNfUFdSX1JFRwkJCTB4MTU5NAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9SRVNFVF9HMkRfU1lTX1BXUl9SRUcJCQkweDE1OTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfUkVTRVRfTVNDX1NZU19QV1JfUkVHCQkJMHgxNTlDCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX0ZTWVNfU1lTX1BXUl9SRUcJCQkweDE1QTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9TRlJfQVhJX0NHRElTMQkJCQkweDE1RTQKKyNkZWZpbmUgRVhZTk9TX0FSTV9DT1JFMl9DT05GSUdVUkFUSU9OCQkJCTB4MjEwMAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT1JFMl9PUFRJT04JCQkJMHgyMTA4CisjZGVmaW5lIEVYWU5PU19BUk1fQ09SRTNfQ09ORklHVVJBVElPTgkJCQkweDIxODAKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fQ09SRTNfT1BUSU9OCQkJCTB4MjE4OAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT01NT05fU1RBVFVTCQkJCTB4MjUwNAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT01NT05fT1BUSU9OCQkJCTB4MjUwOAorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19DT01NT05fU1RBVFVTCQkJCTB4MjU4NAorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19DT01NT05fT1BUSU9OCQkJCTB4MjU4OAorI2RlZmluZSBFWFlOT1M1NDIwX0xPR0lDX1JFU0VUX0RVUkFUSU9OMwkJCTB4MkQxQworCisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVF9HUElPX09QVElPTgkJCQkweDMwQzgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVUX1VBUlRfT1BUSU9OCQkJCTB4MzBFOAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRfTU1DQV9PUFRJT04JCQkJMHgzMTA4CisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVF9NTUNCX09QVElPTgkJCQkweDMxMjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVUX01NQ0NfT1BUSU9OCQkJCTB4MzE0OAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRfSFNJX09QVElPTgkJCQkweDMxNjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVUX1NQSV9PUFRJT04JCQkJMHgzMUM4CisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVF9EUkFNX0NPUkVCTEtfT1BUSU9OCQkJMHgzMUU4CisjZGVmaW5lIEVYWU5PU19QQURfUkVUX0RSQU1fT1BUSU9OCQkJCTB4MzAwOAorI2RlZmluZSBFWFlOT1NfUEFEX1JFVF9NQVVESU9fT1BUSU9OCQkJCTB4MzAyOAorI2RlZmluZSBFWFlOT1NfUEFEX1JFVF9KVEFHX09QVElPTgkJCQkweDMwNDgKKyNkZWZpbmUgRVhZTk9TX1BBRF9SRVRfR1BJT19PUFRJT04JCQkJMHgzMTA4CisjZGVmaW5lIEVYWU5PU19QQURfUkVUX1VBUlRfT1BUSU9OCQkJCTB4MzEyOAorI2RlZmluZSBFWFlOT1NfUEFEX1JFVF9NTUNBX09QVElPTgkJCQkweDMxNDgKKyNkZWZpbmUgRVhZTk9TX1BBRF9SRVRfTU1DQl9PUFRJT04JCQkJMHgzMTY4CisjZGVmaW5lIEVYWU5PU19QQURfUkVUX0VCSUFfT1BUSU9OCQkJCTB4MzE4OAorI2RlZmluZSBFWFlOT1NfUEFEX1JFVF9FQklCX09QVElPTgkJCQkweDMxQTgKKworI2RlZmluZSBFWFlOT1NfUFNfSE9MRF9DT05UUk9MCQkJCQkweDMzMEMKKworLyogRm9yIFNZU19QV1JfUkVHICovCisjZGVmaW5lIEVYWU5PU19TWVNfUFdSX0NGRwkJCQkJQklUKDApCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9NRkNfQ09ORklHVVJBVElPTgkJCQkweDQwNjAKKyNkZWZpbmUgRVhZTk9TNTQyMF9NRkNfU1RBVFVTCQkJCQkweDQwNjQKKyNkZWZpbmUgRVhZTk9TNTQyMF9NRkNfT1BUSU9OCQkJCQkweDQwNjgKKyNkZWZpbmUgRVhZTk9TNTQyMF9HM0RfQ09ORklHVVJBVElPTgkJCQkweDQwODAKKyNkZWZpbmUgRVhZTk9TNTQyMF9HM0RfU1RBVFVTCQkJCQkweDQwODQKKyNkZWZpbmUgRVhZTk9TNTQyMF9HM0RfT1BUSU9OCQkJCQkweDQwODgKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNQMF9DT05GSUdVUkFUSU9OCQkJCTB4NDBBMAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU1AwX1NUQVRVUwkJCQkJMHg0MEE0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTUDBfT1BUSU9OCQkJCQkweDQwQTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNQMV9DT05GSUdVUkFUSU9OCQkJCTB4NDBDMAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU1AxX1NUQVRVUwkJCQkJMHg0MEM0CisjZGVmaW5lIEVYWU5PUzU0MjBfRElTUDFfT1BUSU9OCQkJCQkweDQwQzgKKyNkZWZpbmUgRVhZTk9TNTQyMF9NQVVfQ09ORklHVVJBVElPTgkJCQkweDQwRTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9NQVVfU1RBVFVTCQkJCQkweDQwRTQKKyNkZWZpbmUgRVhZTk9TNTQyMF9NQVVfT1BUSU9OCQkJCQkweDQwRTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9GU1lTMl9PUFRJT04JCQkJCTB4NDE2OAorI2RlZmluZSBFWFlOT1M1NDIwX1BTR0VOX09QVElPTgkJCQkJMHg0MTg4CisKKy8qIEZvciBFWFlOT1NfQ0VOVFJBTF9TRVFfT1BUSU9OICovCisjZGVmaW5lIEVYWU5PUzVfVVNFX1NUQU5EQllXRklfQVJNX0NPUkUwCQkJQklUKDE2KQorI2RlZmluZSBFWFlOT1M1X1VTRV9TVEFOREJZV0ZJX0FSTV9DT1JFMQkJCUJVVCgxNykKKyNkZWZpbmUgRVhZTk9TNV9VU0VfU1RBTkRCWVdGRV9BUk1fQ09SRTAJCQlCSVQoMjQpCisjZGVmaW5lIEVYWU5PUzVfVVNFX1NUQU5EQllXRkVfQVJNX0NPUkUxCQkJQklUKDI1KQorCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTAJCQkJQklUKDQpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTEJCQkJQklUKDUpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTIJCQkJQklUKDYpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTMJCQkJQklUKDcpCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTAJCQkJQklUKDgpCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTEJCQkJQklUKDkpCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTIJCQkJQklUKDEwKQorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19VU0VfU1RBTkRCWV9XRkkzCQkJCUJJVCgxMSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZFMAkJCQlCSVQoMTYpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGRTEJCQkJQklUKDE3KQorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9VU0VfU1RBTkRCWV9XRkUyCQkJCUJJVCgxOCkKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZFMwkJCQlCSVQoMTkpCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGRTAJCQkJQklUKDIwKQorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19VU0VfU1RBTkRCWV9XRkUxCQkJCUJJVCgyMSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZFMgkJCQlCSVQoMjIpCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGRTMJCQkJQklUKDIzKQorCisjZGVmaW5lIERVUl9XQUlUX1JFU0VUCQkJCTB4RgorCisjZGVmaW5lIEVYWU5PUzU0MjBfVVNFX1NUQU5EQllfV0ZJX0FMTAkoRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZJMCAgICBcCisJCQkJCSB8IEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTEgIFwKKwkJCQkJIHwgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZJMiAgXAorCQkJCQkgfCBFWFlOT1M1NDIwX0FSTV9VU0VfU1RBTkRCWV9XRkkzICBcCisJCQkJCSB8IEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTAgIFwKKwkJCQkJIHwgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZJMSAgXAorCQkJCQkgfCBFWFlOT1M1NDIwX0tGQ19VU0VfU1RBTkRCWV9XRkkyICBcCisJCQkJCSB8IEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTMpCisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfUE1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9zbGVlcC5TCmluZGV4IDEwOGE0NWYuLmUzYzM3MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3Mvc2xlZXAuUwpAQCAtMTYsNiArMTYsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSAic21jLmgiCiAKICNkZWZpbmUgQ1BVX01BU0sJMHhmZjBmZmZmMAogI2RlZmluZSBDUFVfQ09SVEVYX0E5CTB4NDEwZmMwOTAKQEAgLTU1LDMgKzU2LDMwIEBACiAjZW5kaWYKIAliCWNwdV9yZXN1bWUKIEVORFBST0MoZXh5bm9zX2NwdV9yZXN1bWUpCisKKwkuYWxpZ24KKworRU5UUlkoZXh5bm9zX2NwdV9yZXN1bWVfbnMpCisJbXJjCXAxNSwgMCwgcjAsIGMwLCBjMCwgMAorCWxkcglyMSwgPUNQVV9NQVNLCisJYW5kCXIwLCByMCwgcjEKKwlsZHIJcjEsID1DUFVfQ09SVEVYX0E5CisJY21wCXIwLCByMQorCWJuZQlza2lwX2NwMTUKKworCWFkcglyMCwgY3AxNV9zYXZlX3Bvd2VyCisJbGRyCXIxLCBbcjBdCisJYWRyCXIwLCBjcDE1X3NhdmVfZGlhZworCWxkcglyMiwgW3IwXQorCW1vdglyMCwgI1NNQ19DTURfQzE1UkVTVU1FCisJZHNiCisJc21jCSMwCitza2lwX2NwMTU6CisJYgljcHVfcmVzdW1lCitFTkRQUk9DKGV4eW5vc19jcHVfcmVzdW1lX25zKQorCS5nbG9ibCBjcDE1X3NhdmVfZGlhZworY3AxNV9zYXZlX2RpYWc6CisJLmxvbmcJMAlAIGNwMTUgZGlhZ25vc3RpYworCS5nbG9ibCBjcDE1X3NhdmVfcG93ZXIKK2NwMTVfc2F2ZV9wb3dlcjoKKwkubG9uZwkwCUAgY3AxNSBwb3dlciBjb250cm9sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9zbWMuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NtYy5oCmluZGV4IDEzYTFkYzguLmY3YjgyZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NtYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NtYy5oCkBAIC0yNiw2ICsyNiwxMCBAQAogI2RlZmluZSBTTUNfQ01EX0wyWDBJTlZBTEwJKC0yNCkKICNkZWZpbmUgU01DX0NNRF9MMlgwREVCVUcJKC0yNSkKIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKwogZXh0ZXJuIHZvaWQgZXh5bm9zX3NtYyh1MzIgY21kLCB1MzIgYXJnMSwgdTMyIGFyZzIsIHUzMiBhcmczKTsKIAorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3N1c3BlbmQuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3N1c3BlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGU3ZGNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jCkBAIC0wLDAgKzEsNTY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRVhZTk9TIC0gU3VzcGVuZCBzdXBwb3J0CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1X3BtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2FybS1naWMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tY3BtLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorCisjaW5jbHVkZSA8cGxhdC9wbS1jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3JvbS5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicmVncy1wbXUuaCIKKyNpbmNsdWRlICJyZWdzLXN5cy5oIgorI2luY2x1ZGUgImV4eW5vcy1wbXUuaCIKKworI2RlZmluZSBTNVBfQ0hFQ0tfU0xFRVAgMHgwMDAwMEJBRAorCisjZGVmaW5lIFJFR19UQUJMRV9FTkQgKC0xVSkKKworI2RlZmluZSBFWFlOT1M1NDIwX0NQVV9TVEFURQkweDI4CisKKy8qKgorICogc3RydWN0IGV4eW5vc193a3VwX2lycSAtIEV4eW5vcyBHSUMgdG8gUE1VIElSUSBtYXBwaW5nCisgKiBAaHdpcnE6IEhhcmR3YXJlIElSUSBzaWduYWwgb2YgdGhlIEdJQworICogQG1hc2s6IE1hc2sgaW4gUE1VIHdha2UtdXAgbWFzayByZWdpc3RlcgorICovCitzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxIHsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJdTMyIG1hc2s7Cit9OworCitzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgZXh5bm9zNV9zeXNfc2F2ZVtdID0geworCVNBVkVfSVRFTShFWFlOT1M1X1NZU19JMkNfQ0ZHKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBleHlub3NfY29yZV9zYXZlW10gPSB7CisJLyogU1JPTSBzaWRlICovCisJU0FWRV9JVEVNKFM1UF9TUk9NX0JXKSwKKwlTQVZFX0lURU0oUzVQX1NST01fQkMwKSwKKwlTQVZFX0lURU0oUzVQX1NST01fQkMxKSwKKwlTQVZFX0lURU0oUzVQX1NST01fQkMyKSwKKwlTQVZFX0lURU0oUzVQX1NST01fQkMzKSwKK307CisKK3N0cnVjdCBleHlub3NfcG1fZGF0YSB7CisJY29uc3Qgc3RydWN0IGV4eW5vc193a3VwX2lycSAqd2t1cF9pcnE7CisJc3RydWN0IHNsZWVwX3NhdmUgKmV4dHJhX3NhdmU7CisJaW50IG51bV9leHRyYV9zYXZlOworCXVuc2lnbmVkIGludCB3YWtlX2Rpc2FibGVfbWFzazsKKwl1bnNpZ25lZCBpbnQgKnJlbGVhc2VfcmV0X3JlZ3M7CisKKwl2b2lkICgqcG1fcHJlcGFyZSkodm9pZCk7CisJdm9pZCAoKnBtX3Jlc3VtZV9wcmVwYXJlKSh2b2lkKTsKKwl2b2lkICgqcG1fcmVzdW1lKSh2b2lkKTsKKwlpbnQgKCpwbV9zdXNwZW5kKSh2b2lkKTsKKwlpbnQgKCpjcHVfc3VzcGVuZCkodW5zaWduZWQgbG9uZyk7Cit9OworCitzdHJ1Y3QgZXh5bm9zX3BtX2RhdGEgKnBtX2RhdGE7CisKK3N0YXRpYyBpbnQgZXh5bm9zNTQyMF9jcHVfc3RhdGU7CitzdGF0aWMgdW5zaWduZWQgaW50IGV4eW5vc19wbXVfc3BhcmUzOworCisvKgorICogR0lDIHdha2UtdXAgc3VwcG9ydAorICovCisKK3N0YXRpYyB1MzIgZXh5bm9zX2lycXdha2VfaW50bWFzayA9IDB4ZmZmZmZmZmY7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxIGV4eW5vczRfd2t1cF9pcnFbXSA9IHsKKwl7IDc2LCBCSVQoMSkgfSwgLyogUlRDIGFsYXJtICovCisJeyA3NywgQklUKDIpIH0sIC8qIFJUQyB0aWNrICovCisJeyAvKiBzZW50aW5lbCAqLyB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3Nfd2t1cF9pcnEgZXh5bm9zNTI1MF93a3VwX2lycVtdID0geworCXsgNzUsIEJJVCgxKSB9LCAvKiBSVEMgYWxhcm0gKi8KKwl7IDc2LCBCSVQoMikgfSwgLyogUlRDIHRpY2sgKi8KKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCit1bnNpZ25lZCBpbnQgZXh5bm9zX3JlbGVhc2VfcmV0X3JlZ3NbXSA9IHsKKwlTNVBfUEFEX1JFVF9NQVVESU9fT1BUSU9OLAorCVM1UF9QQURfUkVUX0dQSU9fT1BUSU9OLAorCVM1UF9QQURfUkVUX1VBUlRfT1BUSU9OLAorCVM1UF9QQURfUkVUX01NQ0FfT1BUSU9OLAorCVM1UF9QQURfUkVUX01NQ0JfT1BUSU9OLAorCVM1UF9QQURfUkVUX0VCSUFfT1BUSU9OLAorCVM1UF9QQURfUkVUX0VCSUJfT1BUSU9OLAorCVJFR19UQUJMRV9FTkQsCit9OworCit1bnNpZ25lZCBpbnQgZXh5bm9zNTQyMF9yZWxlYXNlX3JldF9yZWdzW10gPSB7CisJRVhZTk9TX1BBRF9SRVRfRFJBTV9PUFRJT04sCisJRVhZTk9TX1BBRF9SRVRfTUFVRElPX09QVElPTiwKKwlFWFlOT1NfUEFEX1JFVF9KVEFHX09QVElPTiwKKwlFWFlOT1M1NDIwX1BBRF9SRVRfR1BJT19PUFRJT04sCisJRVhZTk9TNTQyMF9QQURfUkVUX1VBUlRfT1BUSU9OLAorCUVYWU5PUzU0MjBfUEFEX1JFVF9NTUNBX09QVElPTiwKKwlFWFlOT1M1NDIwX1BBRF9SRVRfTU1DQl9PUFRJT04sCisJRVhZTk9TNTQyMF9QQURfUkVUX01NQ0NfT1BUSU9OLAorCUVYWU5PUzU0MjBfUEFEX1JFVF9IU0lfT1BUSU9OLAorCUVYWU5PU19QQURfUkVUX0VCSUFfT1BUSU9OLAorCUVYWU5PU19QQURfUkVUX0VCSUJfT1BUSU9OLAorCUVYWU5PUzU0MjBfUEFEX1JFVF9TUElfT1BUSU9OLAorCUVYWU5PUzU0MjBfUEFEX1JFVF9EUkFNX0NPUkVCTEtfT1BUSU9OLAorCVJFR19UQUJMRV9FTkQsCit9OworCitzdGF0aWMgaW50IGV4eW5vc19pcnFfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJY29uc3Qgc3RydWN0IGV4eW5vc193a3VwX2lycSAqd2t1cF9pcnE7CisKKwlpZiAoIXBtX2RhdGEtPndrdXBfaXJxKQorCQlyZXR1cm4gLUVOT0VOVDsKKwl3a3VwX2lycSA9IHBtX2RhdGEtPndrdXBfaXJxOworCisJd2hpbGUgKHdrdXBfaXJxLT5tYXNrKSB7CisJCWlmICh3a3VwX2lycS0+aHdpcnEgPT0gZGF0YS0+aHdpcnEpIHsKKwkJCWlmICghc3RhdGUpCisJCQkJZXh5bm9zX2lycXdha2VfaW50bWFzayB8PSB3a3VwX2lycS0+bWFzazsKKwkJCWVsc2UKKwkJCQlleHlub3NfaXJxd2FrZV9pbnRtYXNrICY9IH53a3VwX2lycS0+bWFzazsKKwkJCXJldHVybiAwOworCQl9CisJCSsrd2t1cF9pcnE7CisJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX2NwdV9kb19pZGxlKHZvaWQpCit7CisJLyogaXNzdWUgdGhlIHN0YW5kYnkgc2lnbmFsIGludG8gdGhlIHBtIHVuaXQuICovCisJY3B1X2RvX2lkbGUoKTsKKworCXByX2luZm8oIkZhaWxlZCB0byBzdXNwZW5kIHRoZSBzeXN0ZW1cbiIpOworCXJldHVybiAxOyAvKiBBYm9ydGluZyBzdXNwZW5kICovCit9CitzdGF0aWMgdm9pZCBleHlub3NfZmx1c2hfY2FjaGVfYWxsKHZvaWQpCit7CisJZmx1c2hfY2FjaGVfYWxsKCk7CisJb3V0ZXJfZmx1c2hfYWxsKCk7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWV4eW5vc19mbHVzaF9jYWNoZV9hbGwoKTsKKwlyZXR1cm4gZXh5bm9zX2NwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zNTQyMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwkvKiBNQ1BNIHdvcmtzIHdpdGggSFcgQ1BVIGlkZW50aWZpZXJzICovCisJdW5zaWduZWQgaW50IG1waWRyID0gcmVhZF9jcHVpZF9tcGlkcigpOworCXVuc2lnbmVkIGludCBjbHVzdGVyID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpOworCXVuc2lnbmVkIGludCBjcHUgPSBNUElEUl9BRkZJTklUWV9MRVZFTChtcGlkciwgMCk7CisKKwlfX3Jhd193cml0ZWwoMHgwLCBzeXNyYW1fYmFzZV9hZGRyICsgRVhZTk9TNTQyMF9DUFVfU1RBVEUpOworCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0VYWU5PUzU0MjBfTUNQTSkpIHsKKwkJbWNwbV9zZXRfZW50cnlfdmVjdG9yKGNwdSwgY2x1c3RlciwgZXh5bm9zX2NwdV9yZXN1bWUpOworCisJCS8qCisJCSAqIFJlc2lkZW5jeSB2YWx1ZSBwYXNzZWQgdG8gbWNwbV9jcHVfc3VzcGVuZCBiYWNrLWVuZAorCQkgKiBoYXMgdG8gYmUgZ2l2ZW4gY2xlYXIgc2VtYW50aWNzLiBTZXQgdG8gMCBhcyBhCisJCSAqIHRlbXBvcmFyeSB2YWx1ZS4KKwkJICovCisJCW1jcG1fY3B1X3N1c3BlbmQoMCk7CisJfQorCisJcHJfaW5mbygiRmFpbGVkIHRvIHN1c3BlbmQgdGhlIHN5c3RlbVxuIik7CisKKwkvKiByZXR1cm4gdmFsdWUgIT0gMCBtZWFucyBmYWlsdXJlICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vc19wbV9zZXRfd2FrZXVwX21hc2sodm9pZCkKK3sKKwkvKiBTZXQgd2FrZS11cCBtYXNrIHJlZ2lzdGVycyAqLworCXBtdV9yYXdfd3JpdGVsKGV4eW5vc19nZXRfZWludF93YWtlX21hc2soKSwgUzVQX0VJTlRfV0FLRVVQX01BU0spOworCXBtdV9yYXdfd3JpdGVsKGV4eW5vc19pcnF3YWtlX2ludG1hc2sgJiB+KDEgPDwgMzEpLCBTNVBfV0FLRVVQX01BU0spOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfcG1fZW50ZXJfc2xlZXBfbW9kZSh2b2lkKQoreworCS8qIFNldCB2YWx1ZSBvZiBwb3dlciBkb3duIHJlZ2lzdGVyIGZvciBzbGVlcCBtb2RlICovCisJZXh5bm9zX3N5c19wb3dlcmRvd25fY29uZihTWVNfU0xFRVApOworCXBtdV9yYXdfd3JpdGVsKFM1UF9DSEVDS19TTEVFUCwgUzVQX0lORk9STTEpOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfcG1fcHJlcGFyZSh2b2lkKQoreworCS8qIFNldCB3YWtlLXVwIG1hc2sgcmVnaXN0ZXJzICovCisJZXh5bm9zX3BtX3NldF93YWtldXBfbWFzaygpOworCisJczNjX3BtX2RvX3NhdmUoZXh5bm9zX2NvcmVfc2F2ZSwgQVJSQVlfU0laRShleHlub3NfY29yZV9zYXZlKSk7CisKKwkgaWYgKHBtX2RhdGEtPmV4dHJhX3NhdmUpCisJCXMzY19wbV9kb19zYXZlKHBtX2RhdGEtPmV4dHJhX3NhdmUsCisJCQkJcG1fZGF0YS0+bnVtX2V4dHJhX3NhdmUpOworCisJZXh5bm9zX3BtX2VudGVyX3NsZWVwX21vZGUoKTsKKworCS8qIGVuc3VyZSBhdCBsZWFzdCBJTkZPUk0wIGhhcyB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KKwlwbXVfcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoZXh5bm9zX2NwdV9yZXN1bWUpLCBTNVBfSU5GT1JNMCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vczU0MjBfcG1fcHJlcGFyZSh2b2lkKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBTZXQgd2FrZS11cCBtYXNrIHJlZ2lzdGVycyAqLworCWV4eW5vc19wbV9zZXRfd2FrZXVwX21hc2soKTsKKworCXMzY19wbV9kb19zYXZlKGV4eW5vc19jb3JlX3NhdmUsIEFSUkFZX1NJWkUoZXh5bm9zX2NvcmVfc2F2ZSkpOworCisJZXh5bm9zX3BtdV9zcGFyZTMgPSBwbXVfcmF3X3JlYWRsKFM1UF9QTVVfU1BBUkUzKTsKKwkvKgorCSAqIFRoZSBjcHUgc3RhdGUgbmVlZHMgdG8gYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIHNvIHRoYXQgdGhlCisJICogc2Vjb25kYXJ5IENQVXMgd2lsbCBlbnRlciBsb3cgcG93ZXIgc3RhcnQuIFRob3VnaCB0aGUgVS1Cb290CisJICogaXMgc2V0dGluZyB0aGUgY3B1IHN0YXRlIHdpdGggbG93IHBvd2VyIGZsYWcsIHRoZSBrZXJuZWwKKwkgKiBuZWVkcyB0byByZXN0b3JlIGl0IGJhY2sgaW4gY2FzZSwgdGhlIHByaW1hcnkgY3B1IGZhaWxzIHRvCisJICogc3VzcGVuZCBmb3IgYW55IHJlYXNvbi4KKwkgKi8KKwlleHlub3M1NDIwX2NwdV9zdGF0ZSA9IF9fcmF3X3JlYWRsKHN5c3JhbV9iYXNlX2FkZHIgKworCQkJCQkJRVhZTk9TNTQyMF9DUFVfU1RBVEUpOworCisJZXh5bm9zX3BtX2VudGVyX3NsZWVwX21vZGUoKTsKKworCS8qIGVuc3VyZSBhdCBsZWFzdCBJTkZPUk0wIGhhcyB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfRVhZTk9TNTQyMF9NQ1BNKSkKKwkJcG11X3Jhd193cml0ZWwodmlydF90b19waHlzKG1jcG1fZW50cnlfcG9pbnQpLCBTNVBfSU5GT1JNMCk7CisKKwl0bXAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzVfQVJNX0wyX09QVElPTik7CisJdG1wICY9IH5FWFlOT1M1X1VTRV9SRVRFTlRJT047CisJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1M1X0FSTV9MMl9PUFRJT04pOworCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX1NGUl9BWElfQ0dESVMxKTsKKwl0bXAgfD0gRVhZTk9TNTQyMF9VRlM7CisJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1M1NDIwX1NGUl9BWElfQ0dESVMxKTsKKworCXRtcCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNTQyMF9BUk1fQ09NTU9OX09QVElPTik7CisJdG1wICY9IH5FWFlOT1M1NDIwX0wyUlNURElTQUJMRV9WQUxVRTsKKwlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzU0MjBfQVJNX0NPTU1PTl9PUFRJT04pOworCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX0ZTWVMyX09QVElPTik7CisJdG1wIHw9IEVYWU5PUzU0MjBfRU1VTEFUSU9OOworCXBtdV9yYXdfd3JpdGVsKHRtcCwgRVhZTk9TNTQyMF9GU1lTMl9PUFRJT04pOworCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX1BTR0VOX09QVElPTik7CisJdG1wIHw9IEVYWU5PUzU0MjBfRU1VTEFUSU9OOworCXBtdV9yYXdfd3JpdGVsKHRtcCwgRVhZTk9TNTQyMF9QU0dFTl9PUFRJT04pOworfQorCisKK3N0YXRpYyBpbnQgZXh5bm9zX3BtX3N1c3BlbmQodm9pZCkKK3sKKwlleHlub3NfcG1fY2VudHJhbF9zdXNwZW5kKCk7CisKKwlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKKwkJZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleHlub3M1NDIwX3BtX3N1c3BlbmQodm9pZCkKK3sKKwl1MzIgdGhpc19jbHVzdGVyOworCisJZXh5bm9zX3BtX2NlbnRyYWxfc3VzcGVuZCgpOworCisJLyogU2V0dGluZyBTRVFfT1BUSU9OIHJlZ2lzdGVyICovCisKKwl0aGlzX2NsdXN0ZXIgPSBNUElEUl9BRkZJTklUWV9MRVZFTChyZWFkX2NwdWlkX21waWRyKCksIDEpOworCWlmICghdGhpc19jbHVzdGVyKQorCQlwbXVfcmF3X3dyaXRlbChFWFlOT1M1NDIwX0FSTV9VU0VfU1RBTkRCWV9XRkkwLAorCQkJCVM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOworCWVsc2UKKwkJcG11X3Jhd193cml0ZWwoRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZJMCwKKwkJCQlTNVBfQ0VOVFJBTF9TRVFfT1BUSU9OKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3BtX3JlbGVhc2VfcmV0ZW50aW9uKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyAocG1fZGF0YS0+cmVsZWFzZV9yZXRfcmVnc1tpXSAhPSBSRUdfVEFCTEVfRU5EKTsgaSsrKQorCQlwbXVfcmF3X3dyaXRlbChFWFlOT1NfV0FLRVVQX0ZST01fTE9XUFdSLAorCQkJCXBtX2RhdGEtPnJlbGVhc2VfcmV0X3JlZ3NbaV0pOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfcG1fcmVzdW1lKHZvaWQpCit7CisJdTMyIGNwdWlkID0gcmVhZF9jcHVpZF9wYXJ0KCk7CisKKwlpZiAoZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKCkpCisJCWdvdG8gZWFybHlfd2FrZXVwOworCisJLyogRm9yIHJlbGVhc2UgcmV0ZW50aW9uICovCisJZXh5bm9zX3BtX3JlbGVhc2VfcmV0ZW50aW9uKCk7CisKKwlpZiAocG1fZGF0YS0+ZXh0cmFfc2F2ZSkKKwkJczNjX3BtX2RvX3Jlc3RvcmVfY29yZShwbV9kYXRhLT5leHRyYV9zYXZlLAorCQkJCQlwbV9kYXRhLT5udW1fZXh0cmFfc2F2ZSk7CisKKwlzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKGV4eW5vc19jb3JlX3NhdmUsIEFSUkFZX1NJWkUoZXh5bm9zX2NvcmVfc2F2ZSkpOworCisJaWYgKGNwdWlkID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpCisJCXNjdV9lbmFibGUoUzVQX1ZBX1NDVSk7CisKKwlpZiAoY2FsbF9maXJtd2FyZV9vcChyZXN1bWUpID09IC1FTk9TWVMKKwkgICAgJiYgY3B1aWQgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKKwkJZXh5bm9zX2NwdV9yZXN0b3JlX3JlZ2lzdGVyKCk7CisKK2Vhcmx5X3dha2V1cDoKKworCS8qIENsZWFyIFNMRUVQIG1vZGUgc2V0IGluIElORk9STTEgKi8KKwlwbXVfcmF3X3dyaXRlbCgweDAsIFM1UF9JTkZPUk0xKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zNTQyMF9wcmVwYXJlX3BtX3Jlc3VtZSh2b2lkKQoreworCWlmIChJU19FTkFCTEVEKENPTkZJR19FWFlOT1M1NDIwX01DUE0pKQorCQlXQVJOX09OKG1jcG1fY3B1X3Bvd2VyZWRfdXAoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vczU0MjBfcG1fcmVzdW1lKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwkvKiBSZXN0b3JlIHRoZSBDUFUwIGxvdyBwb3dlciBzdGF0ZSByZWdpc3RlciAqLworCXRtcCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNV9BUk1fQ09SRTBfU1lTX1BXUl9SRUcpOworCXBtdV9yYXdfd3JpdGVsKHRtcCB8IFM1UF9DT1JFX0xPQ0FMX1BXUl9FTiwKKwkJRVhZTk9TNV9BUk1fQ09SRTBfU1lTX1BXUl9SRUcpOworCisJLyogUmVzdG9yZSB0aGUgc3lzcmFtIGNwdSBzdGF0ZSByZWdpc3RlciAqLworCV9fcmF3X3dyaXRlbChleHlub3M1NDIwX2NwdV9zdGF0ZSwKKwkJc3lzcmFtX2Jhc2VfYWRkciArIEVYWU5PUzU0MjBfQ1BVX1NUQVRFKTsKKworCXBtdV9yYXdfd3JpdGVsKEVYWU5PUzU0MjBfVVNFX1NUQU5EQllfV0ZJX0FMTCwKKwkJCVM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOworCisJaWYgKGV4eW5vc19wbV9jZW50cmFsX3Jlc3VtZSgpKQorCQlnb3RvIGVhcmx5X3dha2V1cDsKKworCS8qIEZvciByZWxlYXNlIHJldGVudGlvbiAqLworCWV4eW5vc19wbV9yZWxlYXNlX3JldGVudGlvbigpOworCisJcG11X3Jhd193cml0ZWwoZXh5bm9zX3BtdV9zcGFyZTMsIFM1UF9QTVVfU1BBUkUzKTsKKworCXMzY19wbV9kb19yZXN0b3JlX2NvcmUoZXh5bm9zX2NvcmVfc2F2ZSwgQVJSQVlfU0laRShleHlub3NfY29yZV9zYXZlKSk7CisKK2Vhcmx5X3dha2V1cDoKKworCXRtcCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNTQyMF9TRlJfQVhJX0NHRElTMSk7CisJdG1wICY9IH5FWFlOT1M1NDIwX1VGUzsKKwlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzU0MjBfU0ZSX0FYSV9DR0RJUzEpOworCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX0ZTWVMyX09QVElPTik7CisJdG1wICY9IH5FWFlOT1M1NDIwX0VNVUxBVElPTjsKKwlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzU0MjBfRlNZUzJfT1BUSU9OKTsKKworCXRtcCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNTQyMF9QU0dFTl9PUFRJT04pOworCXRtcCAmPSB+RVhZTk9TNTQyMF9FTVVMQVRJT047CisJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1M1NDIwX1BTR0VOX09QVElPTik7CisKKwkvKiBDbGVhciBTTEVFUCBtb2RlIHNldCBpbiBJTkZPUk0xICovCisJcG11X3Jhd193cml0ZWwoMHgwLCBTNVBfSU5GT1JNMSk7Cit9CisKKy8qCisgKiBTdXNwZW5kIE9wcworICovCisKK3N0YXRpYyBpbnQgZXh5bm9zX3N1c3BlbmRfZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWludCByZXQ7CisKKwlzM2NfcG1fZGVidWdfaW5pdCgpOworCisJUzNDX1BNREJHKCIlczogc3VzcGVuZGluZyB0aGUgc3lzdGVtLi4uXG4iLCBfX2Z1bmNfXyk7CisKKwlTM0NfUE1EQkcoIiVzOiB3YWtldXAgbWFza3M6ICUwOHgsJTA4eFxuIiwgX19mdW5jX18sCisJCQlleHlub3NfaXJxd2FrZV9pbnRtYXNrLCBleHlub3NfZ2V0X2VpbnRfd2FrZV9tYXNrKCkpOworCisJaWYgKGV4eW5vc19pcnF3YWtlX2ludG1hc2sgPT0gLTFVCisJICAgICYmIGV4eW5vc19nZXRfZWludF93YWtlX21hc2soKSA9PSAtMVUpIHsKKwkJcHJfZXJyKCIlczogTm8gd2FrZS11cCBzb3VyY2VzIVxuIiwgX19mdW5jX18pOworCQlwcl9lcnIoIiVzOiBBYm9ydGluZyBzbGVlcFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzM2NfcG1fc2F2ZV91YXJ0cygpOworCWlmIChwbV9kYXRhLT5wbV9wcmVwYXJlKQorCQlwbV9kYXRhLT5wbV9wcmVwYXJlKCk7CisJZmx1c2hfY2FjaGVfYWxsKCk7CisJczNjX3BtX2NoZWNrX3N0b3JlKCk7CisKKwlyZXQgPSBjYWxsX2Zpcm13YXJlX29wKHN1c3BlbmQpOworCWlmIChyZXQgPT0gLUVOT1NZUykKKwkJcmV0ID0gY3B1X3N1c3BlbmQoMCwgcG1fZGF0YS0+Y3B1X3N1c3BlbmQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAocG1fZGF0YS0+cG1fcmVzdW1lX3ByZXBhcmUpCisJCXBtX2RhdGEtPnBtX3Jlc3VtZV9wcmVwYXJlKCk7CisJczNjX3BtX3Jlc3RvcmVfdWFydHMoKTsKKworCVMzQ19QTURCRygiJXM6IHdha2V1cCBzdGF0OiAlMDh4XG4iLCBfX2Z1bmNfXywKKwkJCXBtdV9yYXdfcmVhZGwoUzVQX1dBS0VVUF9TVEFUKSk7CisKKwlzM2NfcG1fY2hlY2tfcmVzdG9yZSgpOworCisJUzNDX1BNREJHKCIlczogcmVzdW1pbmcgdGhlIHN5c3RlbS4uLlxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3N1c3BlbmRfcHJlcGFyZSh2b2lkKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIFJFVklTSVQ6IEl0IHdvdWxkIGJlIGJldHRlciBpZiBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMKKwkgKiAucHJlcGFyZSBoYW5kbGVyIGdldCB0aGUgc3VzcGVuZF9zdGF0ZV90IGFzIGEgcGFyYW1ldGVyIHRvCisJICogYXZvaWQgaGFyZC1jb2RpbmcgdGhlIHN1c3BlbmQgdG8gbWVtIHN0YXRlLiBJdCdzIHNhZmUgdG8gZG8KKwkgKiBpdCBub3cgb25seSBiZWNhdXNlIHRoZSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtIGZ1bmN0aW9uIGlzCisJICogdXNlZCBhcyB0aGUgLnZhbGlkIGNhbGxiYWNrIHVzZWQgdG8gY2hlY2sgaWYgYSBnaXZlbiBzdGF0ZQorCSAqIGlzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0gYW55d2F5cy4KKwkgKi8KKwlyZXQgPSByZWd1bGF0b3Jfc3VzcGVuZF9wcmVwYXJlKFBNX1NVU1BFTkRfTUVNKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiRmFpbGVkIHRvIHByZXBhcmUgcmVndWxhdG9ycyBmb3Igc3VzcGVuZCAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXMzY19wbV9jaGVja19wcmVwYXJlKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3N1c3BlbmRfZmluaXNoKHZvaWQpCit7CisJaW50IHJldDsKKworCXMzY19wbV9jaGVja19jbGVhbnVwKCk7CisKKwlyZXQgPSByZWd1bGF0b3Jfc3VzcGVuZF9maW5pc2goKTsKKwlpZiAocmV0KQorCQlwcl93YXJuKCJGYWlsZWQgdG8gcmVzdW1lIHJlZ3VsYXRvcnMgZnJvbSBzdXNwZW5kICglZClcbiIsIHJldCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgZXh5bm9zX3N1c3BlbmRfb3BzID0geworCS5lbnRlcgkJPSBleHlub3Nfc3VzcGVuZF9lbnRlciwKKwkucHJlcGFyZQk9IGV4eW5vc19zdXNwZW5kX3ByZXBhcmUsCisJLmZpbmlzaAkJPSBleHlub3Nfc3VzcGVuZF9maW5pc2gsCisJLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbV9kYXRhIGV4eW5vczRfcG1fZGF0YSA9IHsKKwkud2t1cF9pcnEJPSBleHlub3M0X3drdXBfaXJxLAorCS53YWtlX2Rpc2FibGVfbWFzayA9ICgoMHhGRiA8PCA4KSB8ICgweDFGIDw8IDEpKSwKKwkucmVsZWFzZV9yZXRfcmVncyA9IGV4eW5vc19yZWxlYXNlX3JldF9yZWdzLAorCS5wbV9zdXNwZW5kCT0gZXh5bm9zX3BtX3N1c3BlbmQsCisJLnBtX3Jlc3VtZQk9IGV4eW5vc19wbV9yZXN1bWUsCisJLnBtX3ByZXBhcmUJPSBleHlub3NfcG1fcHJlcGFyZSwKKwkuY3B1X3N1c3BlbmQJPSBleHlub3NfY3B1X3N1c3BlbmQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbV9kYXRhIGV4eW5vczUyNTBfcG1fZGF0YSA9IHsKKwkud2t1cF9pcnEJPSBleHlub3M1MjUwX3drdXBfaXJxLAorCS53YWtlX2Rpc2FibGVfbWFzayA9ICgoMHhGRiA8PCA4KSB8ICgweDFGIDw8IDEpKSwKKwkucmVsZWFzZV9yZXRfcmVncyA9IGV4eW5vc19yZWxlYXNlX3JldF9yZWdzLAorCS5leHRyYV9zYXZlCT0gZXh5bm9zNV9zeXNfc2F2ZSwKKwkubnVtX2V4dHJhX3NhdmUJPSBBUlJBWV9TSVpFKGV4eW5vczVfc3lzX3NhdmUpLAorCS5wbV9zdXNwZW5kCT0gZXh5bm9zX3BtX3N1c3BlbmQsCisJLnBtX3Jlc3VtZQk9IGV4eW5vc19wbV9yZXN1bWUsCisJLnBtX3ByZXBhcmUJPSBleHlub3NfcG1fcHJlcGFyZSwKKwkuY3B1X3N1c3BlbmQJPSBleHlub3NfY3B1X3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IGV4eW5vc19wbV9kYXRhIGV4eW5vczU0MjBfcG1fZGF0YSA9IHsKKwkud2t1cF9pcnEJPSBleHlub3M1MjUwX3drdXBfaXJxLAorCS53YWtlX2Rpc2FibGVfbWFzayA9ICgweDdGIDw8IDcpIHwgKDB4MUYgPDwgMSksCisJLnJlbGVhc2VfcmV0X3JlZ3MgPSBleHlub3M1NDIwX3JlbGVhc2VfcmV0X3JlZ3MsCisJLnBtX3Jlc3VtZV9wcmVwYXJlID0gZXh5bm9zNTQyMF9wcmVwYXJlX3BtX3Jlc3VtZSwKKwkucG1fcmVzdW1lCT0gZXh5bm9zNTQyMF9wbV9yZXN1bWUsCisJLnBtX3N1c3BlbmQJPSBleHlub3M1NDIwX3BtX3N1c3BlbmQsCisJLnBtX3ByZXBhcmUJPSBleHlub3M1NDIwX3BtX3ByZXBhcmUsCisJLmNwdV9zdXNwZW5kCT0gZXh5bm9zNTQyMF9jcHVfc3VzcGVuZCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGV4eW5vc19wbXVfb2ZfZGV2aWNlX2lkc1tdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczRfcG1fZGF0YSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1wbXUiLAorCQkuZGF0YSA9ICZleHlub3M0X3BtX2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTItcG11IiwKKwkJLmRhdGEgPSAmZXh5bm9zNF9wbV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczUyNTBfcG1fZGF0YSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTQyMC1wbXUiLAorCQkuZGF0YSA9ICZleHlub3M1NDIwX3BtX2RhdGEsCisJfSwKKwl7IC8qc2VudGluZWwqLyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBleHlub3NfcG1fc3lzY29yZV9vcHM7CisKK3ZvaWQgX19pbml0IGV4eW5vc19wbV9pbml0KHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJdTMyIHRtcDsKKworCW9mX2ZpbmRfbWF0Y2hpbmdfbm9kZV9hbmRfbWF0Y2goTlVMTCwgZXh5bm9zX3BtdV9vZl9kZXZpY2VfaWRzLCAmbWF0Y2gpOworCWlmICghbWF0Y2gpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gZmluZCBQTVUgbm9kZVxuIik7CisJCXJldHVybjsKKwl9CisJcG1fZGF0YSA9IChzdHJ1Y3QgZXh5bm9zX3BtX2RhdGEgKikgbWF0Y2gtPmRhdGE7CisKKwkvKiBQbGF0Zm9ybS1zcGVjaWZpYyBHSUMgY2FsbGJhY2sgKi8KKwlnaWNfYXJjaF9leHRuLmlycV9zZXRfd2FrZSA9IGV4eW5vc19pcnFfc2V0X3dha2U7CisKKwkvKiBBbGwgd2FrZXVwIGRpc2FibGUgKi8KKwl0bXAgPSBwbXVfcmF3X3JlYWRsKFM1UF9XQUtFVVBfTUFTSyk7CisJdG1wIHw9IHBtX2RhdGEtPndha2VfZGlzYWJsZV9tYXNrOworCXBtdV9yYXdfd3JpdGVsKHRtcCwgUzVQX1dBS0VVUF9NQVNLKTsKKworCWV4eW5vc19wbV9zeXNjb3JlX29wcy5zdXNwZW5kCT0gcG1fZGF0YS0+cG1fc3VzcGVuZDsKKwlleHlub3NfcG1fc3lzY29yZV9vcHMucmVzdW1lCT0gcG1fZGF0YS0+cG1fcmVzdW1lOworCisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmV4eW5vc19wbV9zeXNjb3JlX29wcyk7CisJc3VzcGVuZF9zZXRfb3BzKCZleHlub3Nfc3VzcGVuZF9vcHMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcKaW5kZXggMTFiMjk1Ny4uZTg2MjdlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnCkBAIC02MzMsMTIgKzYzMyw0MSBAQAogCWJvb2wgIlZ5YnJpZCBGYW1pbHkgVkY2MTAgc3VwcG9ydCIKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBQSU5DVFJMX1ZGNjEwCi0Jc2VsZWN0IFZGX1BJVF9USU1FUgogCXNlbGVjdCBQTDMxMF9FUlJBVEFfNzY5NDE5IGlmIENBQ0hFX0wyWDAKIAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSBWeWJyaWQgVkY2MTAgcHJvY2Vzc29yLgogCitjaG9pY2UKKwlwcm9tcHQgIkNsb2Nrc291cmNlIGZvciBzY2hlZHVsZXIgY2xvY2siCisJZGVwZW5kcyBvbiBTT0NfVkY2MTAKKwlkZWZhdWx0IFZGX1VTRV9BUk1fR0xPQkFMX1RJTUVSCisKKwljb25maWcgVkZfVVNFX0FSTV9HTE9CQUxfVElNRVIKKwkJYm9vbCAiVXNlIEFSTSBHbG9iYWwgVGltZXIiCisJCXNlbGVjdCBBUk1fR0xPQkFMX1RJTUVSCisJCXNlbGVjdCBDTEtTUkNfQVJNX0dMT0JBTF9USU1FUl9TQ0hFRF9DTE9DSworCQloZWxwCisJCSAgVXNlIHRoZSBBUk0gR2xvYmFsIFRpbWVyIGFzIGNsb2Nrc291cmNlCisKKwljb25maWcgVkZfVVNFX1BJVF9USU1FUgorCQlib29sICJVc2UgUElUIHRpbWVyIgorCQlzZWxlY3QgVkZfUElUX1RJTUVSCisJCWhlbHAKKwkJICBVc2UgU29DIFBlcmlvZGljIEludGVycnVwdCBUaW1lciAoUElUKSBhcyBjbG9ja3NvdXJjZQorCitlbmRjaG9pY2UKKworY29uZmlnIFNPQ19MUzEwMjFBCisJYm9vbCAiRnJlZXNjYWxlIExTMTAyMUEgc3VwcG9ydCIKKwlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBIQVZFX0FSTV9BUkNIX1RJTUVSCisJc2VsZWN0IFBDSV9ET01BSU5TIGlmIFBDSQorCXNlbGVjdCBaT05FX0RNQSBpZiBBUk1fTFBBRQorCisJaGVscAorCSAgVGhpcyBlbmFibGUgc3VwcG9ydCBmb3IgRnJlZXNjYWxlIExTMTAyMUEgcHJvY2Vzc29yLgorCiBlbmRpZgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtaW14L2RldmljZXMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUKaW5kZXggNmU0ZmNkOC4uZjVhYzY4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDcgQEAKIG9iai0kKENPTkZJR19TT0NfSU1YMzUpICs9IG1tLWlteDMubyBjcHUtaW14MzUubyBjbGstaW14MzUubyBlaGNpLWlteDM1Lm8gcG0taW14My5vCiAKIGlteDUtcG0tJChDT05GSUdfUE0pICs9IHBtLWlteDUubwotb2JqLSQoQ09ORklHX1NPQ19JTVg1KSArPSBjcHUtaW14NS5vIGNsay1pbXg1MS1pbXg1My5vICQoaW14NS1wbS15KQorb2JqLSQoQ09ORklHX1NPQ19JTVg1KSArPSBjcHUtaW14NS5vIGNsay1pbXg1MS1pbXg1My5vIGNsay1jcHUubyAkKGlteDUtcG0teSkKIAogb2JqLSQoQ09ORklHX0NPTU1PTl9DTEspICs9IGNsay1wbGx2MS5vIGNsay1wbGx2Mi5vIGNsay1wbGx2My5vIGNsay1nYXRlMi5vIFwKIAkJCSAgICBjbGstcGZkLm8gY2xrLWJ1c3kubyBjbGsubyBcCkBAIC04OSw3ICs4OSw3IEBACiBvYmotJChDT05GSUdfSEFWRV9JTVhfR1BDKSArPSBncGMubwogb2JqLSQoQ09ORklHX0hBVkVfSU1YX01NREMpICs9IG1tZGMubwogb2JqLSQoQ09ORklHX0hBVkVfSU1YX1NSQykgKz0gc3JjLm8KLWlmZGVmIENPTkZJR19TT0NfSU1YNgoraWZuZXEgKCQoQ09ORklHX1NPQ19JTVg2KSQoQ09ORklHX1NPQ19MUzEwMjFBKSwpCiBBRkxBR1NfaGVhZHNtcC5vIDo9LVdhLC1tYXJjaD1hcm12Ny1hCiBvYmotJChDT05GSUdfU01QKSArPSBoZWFkc21wLm8gcGxhdHNtcC5vCiBvYmotJChDT05GSUdfSE9UUExVR19DUFUpICs9IGhvdHBsdWcubwpAQCAtMTEwLDQgKzExMCw2IEBACiAKIG9iai0kKENPTkZJR19TT0NfVkY2MTApICs9IGNsay12ZjYxMC5vIG1hY2gtdmY2MTAubwogCitvYmotJChDT05GSUdfU09DX0xTMTAyMUEpICs9IG1hY2gtbHMxMDIxYS5vCisKIG9iai15ICs9IGRldmljZXMvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9hbmF0b3AuYyBiL2FyY2gvYXJtL21hY2gtaW14L2FuYXRvcC5jCmluZGV4IDgyNTlhNjIuLjdmMjYyZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2FuYXRvcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2FuYXRvcC5jCkBAIC0zMCw4ICszMCwxMSBAQAogI2RlZmluZSBBTkFESUdfRElHUFJPR19JTVg2U0wJMHgyODAKIAogI2RlZmluZSBCTV9BTkFESUdfUkVHXzJQNV9FTkFCTEVfV0VBS19MSU5SRUcJMHg0MDAwMAorI2RlZmluZSBCTV9BTkFESUdfUkVHXzJQNV9FTkFCTEVfUFVMTERPV04JMHg4CiAjZGVmaW5lIEJNX0FOQURJR19SRUdfQ09SRV9GRVRfT0RSSVZFCQkweDIwMDAwMDAwCiAjZGVmaW5lIEJNX0FOQURJR19BTkFfTUlTQzBfU1RPUF9NT0RFX0NPTkZJRwkweDEwMDAKKy8qIEJlbG93IE1JU0MwX0RJU0NPTl9ISUdIX1NOVlMgaXMgb25seSBmb3IgaS5NWDZTTCAqLworI2RlZmluZSBCTV9BTkFESUdfQU5BX01JU0MwX0RJU0NPTl9ISUdIX1NOVlMJMHgyMDAwCiAjZGVmaW5lIEJNX0FOQURJR19VU0JfQ0hSR19ERVRFQ1RfQ0hLX0NIUkdfQgkweDgwMDAwCiAjZGVmaW5lIEJNX0FOQURJR19VU0JfQ0hSR19ERVRFQ1RfRU5fQgkJMHgxMDAwMDAKIApAQCAtNTYsMTYgKzU5LDQzIEBACiAJCUJNX0FOQURJR19SRUdfQ09SRV9GRVRfT0RSSVZFKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlteF9hbmF0b3BfZW5hYmxlXzJwNV9wdWxsZG93bihib29sIGVuYWJsZSkKK3sKKwlyZWdtYXBfd3JpdGUoYW5hdG9wLCBBTkFESUdfUkVHXzJQNSArIChlbmFibGUgPyBSRUdfU0VUIDogUkVHX0NMUiksCisJCUJNX0FOQURJR19SRUdfMlA1X0VOQUJMRV9QVUxMRE9XTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbXhfYW5hdG9wX2Rpc2Nvbm5lY3RfaGlnaF9zbnZzKGJvb2wgZW5hYmxlKQoreworCXJlZ21hcF93cml0ZShhbmF0b3AsIEFOQURJR19BTkFfTUlTQzAgKyAoZW5hYmxlID8gUkVHX1NFVCA6IFJFR19DTFIpLAorCQlCTV9BTkFESUdfQU5BX01JU0MwX0RJU0NPTl9ISUdIX1NOVlMpOworfQorCiB2b2lkIGlteF9hbmF0b3BfcHJlX3N1c3BlbmQodm9pZCkKIHsKLQlpbXhfYW5hdG9wX2VuYWJsZV93ZWFrMnA1KHRydWUpOworCWlmIChpbXhfbW1kY19nZXRfZGRyX3R5cGUoKSA9PSBJTVhfRERSX1RZUEVfTFBERFIyKQorCQlpbXhfYW5hdG9wX2VuYWJsZV8ycDVfcHVsbGRvd24odHJ1ZSk7CisJZWxzZQorCQlpbXhfYW5hdG9wX2VuYWJsZV93ZWFrMnA1KHRydWUpOworCiAJaW14X2FuYXRvcF9lbmFibGVfZmV0X29kcml2ZSh0cnVlKTsKKworCWlmIChjcHVfaXNfaW14NnNsKCkpCisJCWlteF9hbmF0b3BfZGlzY29ubmVjdF9oaWdoX3NudnModHJ1ZSk7CiB9CiAKIHZvaWQgaW14X2FuYXRvcF9wb3N0X3Jlc3VtZSh2b2lkKQogeworCWlmIChpbXhfbW1kY19nZXRfZGRyX3R5cGUoKSA9PSBJTVhfRERSX1RZUEVfTFBERFIyKQorCQlpbXhfYW5hdG9wX2VuYWJsZV8ycDVfcHVsbGRvd24oZmFsc2UpOworCWVsc2UKKwkJaW14X2FuYXRvcF9lbmFibGVfd2VhazJwNShmYWxzZSk7CisKIAlpbXhfYW5hdG9wX2VuYWJsZV9mZXRfb2RyaXZlKGZhbHNlKTsKLQlpbXhfYW5hdG9wX2VuYWJsZV93ZWFrMnA1KGZhbHNlKTsKKworCWlmIChjcHVfaXNfaW14NnNsKCkpCisJCWlteF9hbmF0b3BfZGlzY29ubmVjdF9oaWdoX3NudnMoZmFsc2UpOworCiB9CiAKIHN0YXRpYyB2b2lkIGlteF9hbmF0b3BfdXNiX2NocmdfZGV0ZWN0X2Rpc2FibGUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1jcHUuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFjMzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWNwdS5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEx1Y2FzIFN0YWNoIDxsLnN0YWNoQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworc3RydWN0IGNsa19jcHUgeworCXN0cnVjdCBjbGtfaHcJaHc7CisJc3RydWN0IGNsawkqZGl2OworCXN0cnVjdCBjbGsJKm11eDsKKwlzdHJ1Y3QgY2xrCSpwbGw7CisJc3RydWN0IGNsawkqc3RlcDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNsa19jcHUgKnRvX2Nsa19jcHUoc3RydWN0IGNsa19odyAqaHcpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGNsa19jcHUsIGh3KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2NwdV9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IGNsa19jcHUgKmNwdSA9IHRvX2Nsa19jcHUoaHcpOworCisJcmV0dXJuIGNsa19nZXRfcmF0ZShjcHUtPmRpdik7Cit9CisKK3N0YXRpYyBsb25nIGNsa19jcHVfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnByYXRlKQoreworCXN0cnVjdCBjbGtfY3B1ICpjcHUgPSB0b19jbGtfY3B1KGh3KTsKKworCXJldHVybiBjbGtfcm91bmRfcmF0ZShjcHUtPnBsbCwgcmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgY2xrX2NwdV9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IGNsa19jcHUgKmNwdSA9IHRvX2Nsa19jcHUoaHcpOworCWludCByZXQ7CisKKwkvKiBzd2l0Y2ggdG8gUExMIGJ5cGFzcyBjbG9jayAqLworCXJldCA9IGNsa19zZXRfcGFyZW50KGNwdS0+bXV4LCBjcHUtPnN0ZXApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiByZXByb2dyYW0gUExMICovCisJcmV0ID0gY2xrX3NldF9yYXRlKGNwdS0+cGxsLCByYXRlKTsKKwlpZiAocmV0KSB7CisJCWNsa19zZXRfcGFyZW50KGNwdS0+bXV4LCBjcHUtPnBsbCk7CisJCXJldHVybiByZXQ7CisJfQorCS8qIHN3aXRjaCBiYWNrIHRvIFBMTCBjbG9jayAqLworCWNsa19zZXRfcGFyZW50KGNwdS0+bXV4LCBjcHUtPnBsbCk7CisKKwkvKiBFbnN1cmUgdGhlIGRpdmlkZXIgaXMgd2hhdCB3ZSBleHBlY3QgKi8KKwljbGtfc2V0X3JhdGUoY3B1LT5kaXYsIHJhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBjbGtfY3B1X29wcyA9IHsKKwkucmVjYWxjX3JhdGUJPSBjbGtfY3B1X3JlY2FsY19yYXRlLAorCS5yb3VuZF9yYXRlCT0gY2xrX2NwdV9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9IGNsa19jcHVfc2V0X3JhdGUsCit9OworCitzdHJ1Y3QgY2xrICppbXhfY2xrX2NwdShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKKwkJc3RydWN0IGNsayAqZGl2LCBzdHJ1Y3QgY2xrICptdXgsIHN0cnVjdCBjbGsgKnBsbCwKKwkJc3RydWN0IGNsayAqc3RlcCkKK3sKKwlzdHJ1Y3QgY2xrX2NwdSAqY3B1OworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OworCisJY3B1ID0ga3phbGxvYyhzaXplb2YoKmNwdSksIEdGUF9LRVJORUwpOworCWlmICghY3B1KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWNwdS0+ZGl2ID0gZGl2OworCWNwdS0+bXV4ID0gbXV4OworCWNwdS0+cGxsID0gcGxsOworCWNwdS0+c3RlcCA9IHN0ZXA7CisKKwlpbml0Lm5hbWUgPSBuYW1lOworCWluaXQub3BzID0gJmNsa19jcHVfb3BzOworCWluaXQuZmxhZ3MgPSAwOworCWluaXQucGFyZW50X25hbWVzID0gJnBhcmVudF9uYW1lOworCWluaXQubnVtX3BhcmVudHMgPSAxOworCisJY3B1LT5ody5pbml0ID0gJmluaXQ7CisKKwljbGsgPSBjbGtfcmVnaXN0ZXIoTlVMTCwgJmNwdS0+aHcpOworCWlmIChJU19FUlIoY2xrKSkKKwkJa2ZyZWUoY3B1KTsKKworCXJldHVybiBjbGs7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NTEtaW14NTMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jCmluZGV4IDcyZDY1MjEuLjBmN2U1MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jCkBAIC0xMjUsNiArMTI1LDggQEAKIHN0YXRpYyBjb25zdCBjaGFyICpzcGRpZl9zZWxbXSA9IHsgInBsbDFfc3ciLCAicGxsMl9zdyIsICJwbGwzX3N3IiwgInNwZGlmX3h0YWxfc2VsIiwgfTsKIHN0YXRpYyBjb25zdCBjaGFyICpzcGRpZjBfY29tX3NlbFtdID0geyAic3BkaWYwX3BvZGYiLCAic3NpMV9yb290X2dhdGUiLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKm14NTFfc3BkaWYxX2NvbV9zZWxbXSA9IHsgInNwZGlmMV9wb2RmIiwgInNzaTJfcm9vdF9nYXRlIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpzdGVwX3NlbHNbXSA9IHsgImxwX2FwbSIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqY3B1X3BvZGZfc2Vsc1tdID0geyAicGxsMV9zdyIsICJzdGVwX3NlbCIgfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgKmNsa1tJTVg1X0NMS19FTkRdOwogc3RhdGljIHN0cnVjdCBjbGtfb25lY2VsbF9kYXRhIGNsa19kYXRhOwpAQCAtMTkzLDcgKzE5NSw5IEBACiAJY2xrW0lNWDVfQ0xLX1VTQl9QSFlfUE9ERl0JPSBpbXhfY2xrX2RpdmlkZXIoInVzYl9waHlfcG9kZiIsICJ1c2JfcGh5X3ByZWQiLCBNWENfQ0NNX0NEQ0RSLCAwLCAzKTsKIAljbGtbSU1YNV9DTEtfVVNCX1BIWV9TRUxdCT0gaW14X2Nsa19tdXgoInVzYl9waHlfc2VsIiwgTVhDX0NDTV9DU0NNUjEsIDI2LCAxLAogCQkJCQkJdXNiX3BoeV9zZWxfc3RyLCBBUlJBWV9TSVpFKHVzYl9waHlfc2VsX3N0cikpOwotCWNsa1tJTVg1X0NMS19DUFVfUE9ERl0JCT0gaW14X2Nsa19kaXZpZGVyKCJjcHVfcG9kZiIsICJwbGwxX3N3IiwgTVhDX0NDTV9DQUNSUiwgMCwgMyk7CisJY2xrW0lNWDVfQ0xLX1NURVBfU0VMXQkJPSBpbXhfY2xrX211eCgic3RlcF9zZWwiLCBNWENfQ0NNX0NDU1IsIDcsIDIsIHN0ZXBfc2VscywgQVJSQVlfU0laRShzdGVwX3NlbHMpKTsKKwljbGtbSU1YNV9DTEtfQ1BVX1BPREZfU0VMXQk9IGlteF9jbGtfbXV4KCJjcHVfcG9kZl9zZWwiLCBNWENfQ0NNX0NDU1IsIDIsIDEsIGNwdV9wb2RmX3NlbHMsIEFSUkFZX1NJWkUoY3B1X3BvZGZfc2VscykpOworCWNsa1tJTVg1X0NMS19DUFVfUE9ERl0JCT0gaW14X2Nsa19kaXZpZGVyKCJjcHVfcG9kZiIsICJjcHVfcG9kZl9zZWwiLCBNWENfQ0NNX0NBQ1JSLCAwLCAzKTsKIAljbGtbSU1YNV9DTEtfRElfUFJFRF0JCT0gaW14X2Nsa19kaXZpZGVyKCJkaV9wcmVkIiwgInBsbDNfc3ciLCBNWENfQ0NNX0NEQ0RSLCA2LCAzKTsKIAljbGtbSU1YNV9DTEtfSUlNX0dBVEVdCQk9IGlteF9jbGtfZ2F0ZTIoImlpbV9nYXRlIiwgImlwZyIsIE1YQ19DQ01fQ0NHUjAsIDMwKTsKIAljbGtbSU1YNV9DTEtfVUFSVDFfSVBHX0dBVEVdCT0gaW14X2Nsa19nYXRlMigidWFydDFfaXBnX2dhdGUiLCAiaXBnIiwgTVhDX0NDTV9DQ0dSMSwgNik7CkBAIC01MzcsNiArNTQxLDExIEBACiAJY2xrW0lNWDVfQ0xLX0NLTzJdCQk9IGlteF9jbGtfZ2F0ZTIoImNrbzIiLCAiY2tvMl9wb2RmIiwgTVhDX0NDTV9DQ09TUiwgMjQpOwogCWNsa1tJTVg1X0NMS19TUERJRl9YVEFMX1NFTF0JPSBpbXhfY2xrX211eCgic3BkaWZfeHRhbF9zZWwiLCBNWENfQ0NNX0NTQ01SMSwgMiwgMiwKIAkJCQkJCW14NTNfc3BkaWZfeHRhbF9zZWwsIEFSUkFZX1NJWkUobXg1M19zcGRpZl94dGFsX3NlbCkpOworCWNsa1tJTVg1X0NMS19BUk1dCQk9IGlteF9jbGtfY3B1KCJhcm0iLCAiY3B1X3BvZGYiLAorCQkJCQkJY2xrW0lNWDVfQ0xLX0NQVV9QT0RGXSwKKwkJCQkJCWNsa1tJTVg1X0NMS19DUFVfUE9ERl9TRUxdLAorCQkJCQkJY2xrW0lNWDVfQ0xLX1BMTDFfU1ddLAorCQkJCQkJY2xrW0lNWDVfQ0xLX1NURVBfU0VMXSk7CiAKIAlpbXhfY2hlY2tfY2xvY2tzKGNsaywgQVJSQVlfU0laRShjbGspKTsKIApAQCAtNTUxLDYgKzU2MCw5IEBACiAJLyogbW92ZSBjYW4gYnVzIGNsayB0byAyNE1IeiAqLwogCWNsa19zZXRfcGFyZW50KGNsa1tJTVg1X0NMS19DQU5fU0VMXSwgY2xrW0lNWDVfQ0xLX0xQX0FQTV0pOwogCisJLyogbWFrZSBzdXJlIHN0ZXAgY2xvY2sgaXMgcnVubmluZyBmcm9tIDI0TUh6ICovCisJY2xrX3NldF9wYXJlbnQoY2xrW0lNWDVfQ0xLX1NURVBfU0VMXSwgY2xrW0lNWDVfQ0xLX0xQX0FQTV0pOworCiAJY2xrX3ByZXBhcmVfZW5hYmxlKGNsa1tJTVg1X0NMS19JSU1fR0FURV0pOwogCWlteF9wcmludF9zaWxpY29uX3JldigiaS5NWDUzIiwgbXg1M19yZXZpc2lvbigpKTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrW0lNWDVfQ0xLX0lJTV9HQVRFXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2cS5jCmluZGV4IDRlNzlkYTcuLjU5NTE2NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2cS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2cS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJcG9zdF9kaXZfdGFibGVbMl0uZGl2ID0gMTsKIAkJdmlkZW9fZGl2X3RhYmxlWzFdLmRpdiA9IDE7CiAJCXZpZGVvX2Rpdl90YWJsZVsyXS5kaXYgPSAxOwotCX07CisJfQogCiAJY2xrW0lNWDZRRExfUExMMV9CWVBBU1NfU1JDXSA9IGlteF9jbGtfbXV4KCJwbGwxX2J5cGFzc19zcmMiLCBiYXNlICsgMHgwMCwgMTQsIDIsIHBsbF9ieXBhc3Nfc3JjX3NlbHMsIEFSUkFZX1NJWkUocGxsX2J5cGFzc19zcmNfc2VscykpOwogCWNsa1tJTVg2UURMX1BMTDJfQllQQVNTX1NSQ10gPSBpbXhfY2xrX211eCgicGxsMl9ieXBhc3Nfc3JjIiwgYmFzZSArIDB4MzAsIDE0LCAyLCBwbGxfYnlwYXNzX3NyY19zZWxzLCBBUlJBWV9TSVpFKHBsbF9ieXBhc3Nfc3JjX3NlbHMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1wbGx2My5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXBsbHYzLmMKaW5kZXggNTdkZTc0ZC4uMGFkNmU1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXBsbHYzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXBsbHYzLmMKQEAgLTY5LDcgKzY5LDYgQEAKIHsKIAlzdHJ1Y3QgY2xrX3BsbHYzICpwbGwgPSB0b19jbGtfcGxsdjMoaHcpOwogCXUzMiB2YWw7Ci0JaW50IHJldDsKIAogCXZhbCA9IHJlYWRsX3JlbGF4ZWQocGxsLT5iYXNlKTsKIAlpZiAocGxsLT5wb3dlcnVwX3NldCkKQEAgLTc4LDExICs3Nyw3IEBACiAJCXZhbCAmPSB+Qk1fUExMX1BPV0VSOwogCXdyaXRlbF9yZWxheGVkKHZhbCwgcGxsLT5iYXNlKTsKIAotCXJldCA9IGNsa19wbGx2M193YWl0X2xvY2socGxsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNsa19wbGx2M193YWl0X2xvY2socGxsKTsKIH0KIAogc3RhdGljIHZvaWQgY2xrX3BsbHYzX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay12ZjYxMC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXZmNjEwLmMKaW5kZXggNDA5NjM3Mi4uNTkzN2RkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXZmNjEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXZmNjEwLmMKQEAgLTEyMCw2ICsxMjAsMTcgQEAKIAlWRjYxMF9DTEtfRERSX1NFTCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0IHZmNjEwX2dldF9maXhlZF9jbG9jaygKKwkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNjbV9ub2RlLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBjbGsgKmNsayA9IG9mX2Nsa19nZXRfYnlfbmFtZShjY21fbm9kZSwgbmFtZSk7CisKKwkvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlmIGRldmljZSB0cmVlIGlzIG1pc3NpbmcgY2xrcyBhc3NpZ25tZW50cyAqLworCWlmIChJU19FUlIoY2xrKSkKKwkJY2xrID0gaW14X29idGFpbl9maXhlZF9jbG9jayhuYW1lLCAwKTsKKwlyZXR1cm4gY2xrOworfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHZmNjEwX2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25vZGUpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKQEAgLTEzMCwxMyArMTQxLDEzIEBACiAJY2xrW1ZGNjEwX0NMS19TSVJDXzMyS10gPSBpbXhfY2xrX2ZpeGVkKCJzaXJjXzMyayIsIDMyMDAwKTsKIAljbGtbVkY2MTBfQ0xLX0ZJUkNdID0gaW14X2Nsa19maXhlZCgiZmlyYyIsIDI0MDAwMDAwKTsKIAotCWNsa1tWRjYxMF9DTEtfU1hPU0NdID0gaW14X29idGFpbl9maXhlZF9jbG9jaygic3hvc2MiLCAwKTsKLQljbGtbVkY2MTBfQ0xLX0ZYT1NDXSA9IGlteF9vYnRhaW5fZml4ZWRfY2xvY2soImZ4b3NjIiwgMCk7Ci0JY2xrW1ZGNjEwX0NMS19BVURJT19FWFRdID0gaW14X29idGFpbl9maXhlZF9jbG9jaygiYXVkaW9fZXh0IiwgMCk7Ci0JY2xrW1ZGNjEwX0NMS19FTkVUX0VYVF0gPSBpbXhfb2J0YWluX2ZpeGVkX2Nsb2NrKCJlbmV0X2V4dCIsIDApOworCWNsa1tWRjYxMF9DTEtfU1hPU0NdID0gdmY2MTBfZ2V0X2ZpeGVkX2Nsb2NrKGNjbV9ub2RlLCAic3hvc2MiKTsKKwljbGtbVkY2MTBfQ0xLX0ZYT1NDXSA9IHZmNjEwX2dldF9maXhlZF9jbG9jayhjY21fbm9kZSwgImZ4b3NjIik7CisJY2xrW1ZGNjEwX0NMS19BVURJT19FWFRdID0gdmY2MTBfZ2V0X2ZpeGVkX2Nsb2NrKGNjbV9ub2RlLCAiYXVkaW9fZXh0Iik7CisJY2xrW1ZGNjEwX0NMS19FTkVUX0VYVF0gPSB2ZjYxMF9nZXRfZml4ZWRfY2xvY2soY2NtX25vZGUsICJlbmV0X2V4dCIpOwogCiAJLyogQ2xvY2sgc291cmNlIGZyb20gZXh0ZXJuYWwgY2xvY2sgdmlhIExWRHMgUEFEICovCi0JY2xrW1ZGNjEwX0NMS19BTkFDTEsxXSA9IGlteF9vYnRhaW5fZml4ZWRfY2xvY2soImFuYWNsazEiLCAwKTsKKwljbGtbVkY2MTBfQ0xLX0FOQUNMSzFdID0gdmY2MTBfZ2V0X2ZpeGVkX2Nsb2NrKGNjbV9ub2RlLCAiYW5hY2xrMSIpOwogCiAJY2xrW1ZGNjEwX0NMS19GWE9TQ19IQUxGXSA9IGlteF9jbGtfZml4ZWRfZmFjdG9yKCJmeG9zY19oYWxmIiwgImZ4b3NjIiwgMSwgMik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLmgKaW5kZXggNGNkZjhiNi4uNWVmODJlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLmgKQEAgLTEzMSw0ICsxMzEsOCBAQAogCQkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwgbXVsdCwgZGl2KTsKIH0KIAorc3RydWN0IGNsayAqaW14X2Nsa19jcHUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCisJCXN0cnVjdCBjbGsgKmRpdiwgc3RydWN0IGNsayAqbXV4LCBzdHJ1Y3QgY2xrICpwbGwsCisJCXN0cnVjdCBjbGsgKnN0ZXApOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvY29tbW9uLmgKaW5kZXggMWRhYmY0My4uY2ZjZGI2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY29tbW9uLmgKQEAgLTYxLDcgKzYxLDYgQEAKIHZvaWQgbXhjX3NldF9jcHVfdHlwZSh1bnNpZ25lZCBpbnQgdHlwZSk7CiB2b2lkIG14Y19yZXN0YXJ0KGVudW0gcmVib290X21vZGUsIGNvbnN0IGNoYXIgKik7CiB2b2lkIG14Y19hcmNoX3Jlc2V0X2luaXQodm9pZCBfX2lvbWVtICopOwotdm9pZCBteGNfYXJjaF9yZXNldF9pbml0X2R0KHZvaWQpOwogaW50IG14NTFfcmV2aXNpb24odm9pZCk7CiBpbnQgbXg1M19yZXZpc2lvbih2b2lkKTsKIHZvaWQgaW14X3NldF9haXBzKHZvaWQgX19pb21lbSAqKTsKQEAgLTEwOCwxNCArMTA3LDE1IEBACiB2b2lkIGlteF9ncGNfcG9zdF9yZXN1bWUodm9pZCk7CiB2b2lkIGlteF9ncGNfbWFza19hbGwodm9pZCk7CiB2b2lkIGlteF9ncGNfcmVzdG9yZV9hbGwodm9pZCk7Ci12b2lkIGlteF9ncGNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKTsKLXZvaWQgaW14X2dwY19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCk7Cit2b2lkIGlteF9ncGNfaHdpcnFfbWFzayh1bnNpZ25lZCBpbnQgaHdpcnEpOwordm9pZCBpbXhfZ3BjX2h3aXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaHdpcnEpOwogdm9pZCBpbXhfYW5hdG9wX2luaXQodm9pZCk7CiB2b2lkIGlteF9hbmF0b3BfcHJlX3N1c3BlbmQodm9pZCk7CiB2b2lkIGlteF9hbmF0b3BfcG9zdF9yZXN1bWUodm9pZCk7CiBpbnQgaW14NnFfc2V0X2xwbShlbnVtIG14Y19jcHVfcHdyX21vZGUgbW9kZSk7CiB2b2lkIGlteDZxX3NldF9pbnRfbWVtX2Nsa19scG0oYm9vbCBlbmFibGUpOwogdm9pZCBpbXg2c2xfc2V0X3dhaXRfY2xrKGJvb2wgZW50ZXIpOworaW50IGlteF9tbWRjX2dldF9kZHJfdHlwZSh2b2lkKTsKIAogdm9pZCBpbXhfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKIGludCBpbXhfY3B1X2tpbGwodW5zaWduZWQgaW50IGNwdSk7CkBAIC0xNTcsNSArMTU3LDYgQEAKICNlbmRpZgogCiBleHRlcm4gc3RydWN0IHNtcF9vcGVyYXRpb25zIGlteF9zbXBfb3BzOworZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBsczEwMjFhX3NtcF9vcHM7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZ3BjLmMgYi9hcmNoL2FybS9tYWNoLWlteC9ncGMuYwppbmRleCA4MmVhNzRlLi41ZjM2MDJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9ncGMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9ncGMuYwpAQCAtNTYsMTQgKzU2LDE0IEBACiAKIHN0YXRpYyBpbnQgaW14X2dwY19pcnFfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgb24pCiB7Ci0JdW5zaWduZWQgaW50IGlkeCA9IGQtPmlycSAvIDMyIC0gMTsKKwl1bnNpZ25lZCBpbnQgaWR4ID0gZC0+aHdpcnEgLyAzMiAtIDE7CiAJdTMyIG1hc2s7CiAKIAkvKiBTYW5pdHkgY2hlY2sgZm9yIFNQSSBpcnEgKi8KLQlpZiAoZC0+aXJxIDwgMzIpCisJaWYgKGQtPmh3aXJxIDwgMzIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWFzayA9IDEgPDwgZC0+aXJxICUgMzI7CisJbWFzayA9IDEgPDwgZC0+aHdpcnEgJSAzMjsKIAlncGNfd2FrZV9pcnFzW2lkeF0gPSBvbiA/IGdwY193YWtlX2lycXNbaWR4XSB8IG1hc2sgOgogCQkJCSAgZ3BjX3dha2VfaXJxc1tpZHhdICYgfm1hc2s7CiAKQEAgLTkxLDM0ICs5MSw0NCBAQAogCQl3cml0ZWxfcmVsYXhlZChncGNfc2F2ZWRfaW1yc1tpXSwgcmVnX2ltcjEgKyBpICogNCk7CiB9CiAKLXZvaWQgaW14X2dwY19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3ZvaWQgaW14X2dwY19od2lycV91bm1hc2sodW5zaWduZWQgaW50IGh3aXJxKQogewogCXZvaWQgX19pb21lbSAqcmVnOwogCXUzMiB2YWw7CiAKLQkvKiBTYW5pdHkgY2hlY2sgZm9yIFNQSSBpcnEgKi8KLQlpZiAoZC0+aXJxIDwgMzIpCi0JCXJldHVybjsKLQotCXJlZyA9IGdwY19iYXNlICsgR1BDX0lNUjEgKyAoZC0+aXJxIC8gMzIgLSAxKSAqIDQ7CisJcmVnID0gZ3BjX2Jhc2UgKyBHUENfSU1SMSArIChod2lycSAvIDMyIC0gMSkgKiA0OwogCXZhbCA9IHJlYWRsX3JlbGF4ZWQocmVnKTsKLQl2YWwgJj0gfigxIDw8IGQtPmlycSAlIDMyKTsKKwl2YWwgJj0gfigxIDw8IGh3aXJxICUgMzIpOwogCXdyaXRlbF9yZWxheGVkKHZhbCwgcmVnKTsKIH0KIAotdm9pZCBpbXhfZ3BjX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3ZvaWQgaW14X2dwY19od2lycV9tYXNrKHVuc2lnbmVkIGludCBod2lycSkKIHsKIAl2b2lkIF9faW9tZW0gKnJlZzsKIAl1MzIgdmFsOwogCisJcmVnID0gZ3BjX2Jhc2UgKyBHUENfSU1SMSArIChod2lycSAvIDMyIC0gMSkgKiA0OworCXZhbCA9IHJlYWRsX3JlbGF4ZWQocmVnKTsKKwl2YWwgfD0gMSA8PCAoaHdpcnEgJSAzMik7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBpbXhfZ3BjX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQorewogCS8qIFNhbml0eSBjaGVjayBmb3IgU1BJIGlycSAqLwotCWlmIChkLT5pcnEgPCAzMikKKwlpZiAoZC0+aHdpcnEgPCAzMikKIAkJcmV0dXJuOwogCi0JcmVnID0gZ3BjX2Jhc2UgKyBHUENfSU1SMSArIChkLT5pcnEgLyAzMiAtIDEpICogNDsKLQl2YWwgPSByZWFkbF9yZWxheGVkKHJlZyk7Ci0JdmFsIHw9IDEgPDwgKGQtPmlycSAlIDMyKTsKLQl3cml0ZWxfcmVsYXhlZCh2YWwsIHJlZyk7CisJaW14X2dwY19od2lycV91bm1hc2soZC0+aHdpcnEpOworfQorCitzdGF0aWMgdm9pZCBpbXhfZ3BjX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwkvKiBTYW5pdHkgY2hlY2sgZm9yIFNQSSBpcnEgKi8KKwlpZiAoZC0+aHdpcnEgPCAzMikKKwkJcmV0dXJuOworCisJaW14X2dwY19od2lycV9tYXNrKGQtPmh3aXJxKTsKIH0KIAogdm9pZCBfX2luaXQgaW14X2dwY19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pbXgyNS1kdC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjUtZHQuYwppbmRleCBjZjgwMzJiLi4yNWRlZmJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9pbXgyNS1kdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDI1LWR0LmMKQEAgLTE3LDEzICsxNyw2IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAibXgyNS5oIgogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW14MjVfZHRfaW5pdCh2b2lkKQotewotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKLQotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbXgyNV9kdF9ib2FyZF9jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKIAkiZnNsLGlteDI1IiwKIAlOVUxMCkBAIC0zMyw3ICsyNiw1IEBACiAJLm1hcF9pbwkJPSBteDI1X21hcF9pbywKIAkuaW5pdF9lYXJseQk9IGlteDI1X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gbXgyNV9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lCT0gaW14MjVfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gaW14MjVfZHRfYm9hcmRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjctZHQuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDI3LWR0LmMKaW5kZXggZGM4ZjFhNi4uYmQ0MmQxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjctZHQuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgyNy1kdC5jCkBAIC0yMiw4ICsyMiw2IEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGRldmluZm8gPSB7IC5uYW1lID0gImNwdWZyZXEtZHQiLCB9OwogCi0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwotCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJmRldmluZm8pOwpAQCAtNDAsNSArMzgsNCBAQAogCS5pbml0X2lycQk9IG14MjdfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGlteDI3X2R0X2luaXQsCiAJLmR0X2NvbXBhdAk9IGlteDI3X2R0X2JvYXJkX2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lteDMxLWR0LmMgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgzMS1kdC5jCmluZGV4IDQxOGRiYzguLjMyMTAwMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2lteDMxLWR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzEtZHQuYwpAQCAtMTgsMTMgKzE4LDYgQEAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJteDMxLmgiCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpbXgzMV9kdF9pbml0KHZvaWQpCi17Ci0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwotCi0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlteDMxX2R0X2JvYXJkX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewogCSJmc2wsaW14MzEiLAogCU5VTEwKQEAgLTQwLDcgKzMzLDUgQEAKIAkuaW5pdF9lYXJseQk9IGlteDMxX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gbXgzMV9pbml0X2lycSwKIAkuaW5pdF90aW1lCT0gaW14MzFfZHRfdGltZXJfaW5pdCwKLQkuaW5pdF9tYWNoaW5lCT0gaW14MzFfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gaW14MzFfZHRfYm9hcmRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzUtZHQuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDM1LWR0LmMKaW5kZXggNTg0ZmJlMS4uZTkzOTYwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzUtZHQuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgzNS1kdC5jCkBAIC0yMCwxNCArMjAsNiBAQAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgIm14MzUuaCIKIAotc3RhdGljIHZvaWQgX19pbml0IGlteDM1X2R0X2luaXQodm9pZCkKLXsKLQlteGNfYXJjaF9yZXNldF9pbml0X2R0KCk7Ci0KLQlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwKLQkJCSAgICAgTlVMTCwgTlVMTCk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBpbXgzNV9pcnFfaW5pdCh2b2lkKQogewogCWlteF9pbml0X2wyY2FjaGUoKTsKQEAgLTQzLDcgKzM1LDUgQEAKIAkubWFwX2lvCQk9IG14MzVfbWFwX2lvLAogCS5pbml0X2Vhcmx5CT0gaW14MzVfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBpbXgzNV9pcnFfaW5pdCwKLQkuaW5pdF9tYWNoaW5lCT0gaW14MzVfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gaW14MzVfZHRfYm9hcmRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtaW14MzEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lvbXV4LWlteDMxLmMKaW5kZXggMTY1N2ZlNi4uZDZhMzA3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtaW14MzEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pb211eC1pbXgzMS5jCkBAIC00NCw5ICs0NCwxMSBAQAogLyoKICAqIHNldCB0aGUgbW9kZSBmb3IgYSBJT01VWCBwaW4uCiAgKi8KLWludCBteGNfaW9tdXhfbW9kZSh1bnNpZ25lZCBpbnQgcGluX21vZGUpCit2b2lkIG14Y19pb211eF9tb2RlKHVuc2lnbmVkIGludCBwaW5fbW9kZSkKIHsKLQl1MzIgZmllbGQsIGwsIG1vZGUsIHJldCA9IDA7CisJdTMyIGZpZWxkOworCXUzMiBsOworCXUzMiBtb2RlOwogCXZvaWQgX19pb21lbSAqcmVnOwogCiAJcmVnID0gSU9NVVhTV19NVVhfQ1RMICsgKHBpbl9tb2RlICYgSU9NVVhfUkVHX01BU0spOwpAQCAtNjEsOCArNjMsNiBAQAogCV9fcmF3X3dyaXRlbChsLCByZWcpOwogCiAJc3Bpbl91bmxvY2soJmdwaW9fbXV4X2xvY2spOwotCi0JcmV0dXJuIHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lvbXV4LW14My5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtbXgzLmgKaW5kZXggZjc5Zjc4YS4uMGE1YWRiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtbXgzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtbXgzLmgKQEAgLTE0NCw3ICsxNDQsNyBAQAogICogSXQgaXMgY2FsbGVkIGJ5IHRoZSBzZXR1cCBmdW5jdGlvbnMgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGFueW1vcmUuCiAgKiBJdCBpcyBoZXJlIHZpc2libGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAqLwotaW50IG14Y19pb211eF9tb2RlKHVuc2lnbmVkIGludCBwaW5fbW9kZSk7Cit2b2lkIG14Y19pb211eF9tb2RlKHVuc2lnbmVkIGludCBwaW5fbW9kZSk7CiAKICNkZWZpbmUgSU9NVVhfUEFETlVNX01BU0sJMHgxZmYKICNkZWZpbmUgSU9NVVhfR1BJT05VTV9TSElGVAk5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUwLmMKaW5kZXggYjFlNTZhOS4uZWNmNThiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTAuYwpAQCAtMTYsMTMgKzE2LDYgQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW14NTBfZHRfaW5pdCh2b2lkKQotewotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKLQotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbXg1MF9kdF9ib2FyZF9jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKIAkiZnNsLGlteDUwIiwKIAlOVUxMCkBAIC0zMCw3ICsyMyw1IEBACiAKIERUX01BQ0hJTkVfU1RBUlQoSU1YNTBfRFQsICJGcmVlc2NhbGUgaS5NWDUwIChEZXZpY2UgVHJlZSBTdXBwb3J0KSIpCiAJLmluaXRfaXJxCT0gdHppY19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lCT0gaW14NTBfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gaW14NTBfZHRfYm9hcmRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1MS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1MS5jCmluZGV4IDJjNWZjYWYuLmIwMTUxMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUxLmMKQEAgLTUzLDcgKzUzLDYgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gZGV2aW5mbyA9IHsgLm5hbWUgPSAiY3B1ZnJlcS1kdCIsIH07CiAKLQlteGNfYXJjaF9yZXNldF9pbml0X2R0KCk7CiAJaW14NTFfaXB1X21pcGlfc2V0dXAoKTsKIAlpbXhfc3JjX2luaXQoKTsKIApAQCAtNzgsNSArNzcsNCBAQAogCS5pbml0X21hY2hpbmUJPSBpbXg1MV9kdF9pbml0LAogCS5pbml0X2xhdGUJPSBpbXg1MV9pbml0X2xhdGUsCiAJLmR0X2NvbXBhdAk9IGlteDUxX2R0X2JvYXJkX2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTMuYwppbmRleCAwM2RkNmVhLi44NjMxNmE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1My5jCkBAIC0zMCw3ICszMCw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbXg1M19kdF9pbml0KHZvaWQpCiB7Ci0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwogCWlteF9zcmNfaW5pdCgpOwogCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwpAQCAtNDEsNiArNDAsOCBAQAogc3RhdGljIHZvaWQgX19pbml0IGlteDUzX2luaXRfbGF0ZSh2b2lkKQogewogCWlteDUzX3BtX2luaXQoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImNwdWZyZXEtZHQiLCAtMSwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW14NTNfZHRfYm9hcmRfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CkBAIC01NCw1ICs1NSw0IEBACiAJLmluaXRfbWFjaGluZQk9IGlteDUzX2R0X2luaXQsCiAJLmluaXRfbGF0ZQk9IGlteDUzX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gaW14NTNfZHRfYm9hcmRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2cS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2cS5jCmluZGV4IGQ1MWM2ZTkuLjUwNTdkNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDZxLmMKQEAgLTI2OCw4ICsyNjgsNiBAQAogCWlteF9wcmludF9zaWxpY29uX3JldihjcHVfaXNfaW14NmRsKCkgPyAiaS5NWDZETCIgOiAiaS5NWDZRIiwKIAkJCSAgICAgIGlteF9nZXRfc29jX3JldmlzaW9uKCkpOwogCi0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwotCiAJcGFyZW50ID0gaW14X3NvY19kZXZpY2VfaW5pdCgpOwogCWlmIChwYXJlbnQgPT0gTlVMTCkKIAkJcHJfd2FybigiZmFpbGVkIHRvIGluaXRpYWxpemUgc29jIGRldmljZVxuIik7CkBAIC00MDksNSArNDA3LDQgQEAKIAkuaW5pdF9tYWNoaW5lCT0gaW14NnFfaW5pdF9tYWNoaW5lLAogCS5pbml0X2xhdGUgICAgICA9IGlteDZxX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gaW14NnFfZHRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c2wuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnNsLmMKaW5kZXggZWQyNjNhMi4uMjRiZmFhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c2wuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDZzbC5jCkBAIC00OCw4ICs0OCw2IEBACiB7CiAJc3RydWN0IGRldmljZSAqcGFyZW50OwogCi0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwotCiAJcGFyZW50ID0gaW14X3NvY19kZXZpY2VfaW5pdCgpOwogCWlmIChwYXJlbnQgPT0gTlVMTCkKIAkJcHJfd2FybigiZmFpbGVkIHRvIGluaXRpYWxpemUgc29jIGRldmljZVxuIik7CkBAIC03NiwxMCArNzQsOCBAQAogfTsKIAogRFRfTUFDSElORV9TVEFSVChJTVg2U0wsICJGcmVlc2NhbGUgaS5NWDYgU29sb0xpdGUgKERldmljZSBUcmVlKSIpCi0JLm1hcF9pbwkJPSBkZWJ1Z19sbF9pb19pbml0LAogCS5pbml0X2lycQk9IGlteDZzbF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gaW14NnNsX2luaXRfbWFjaGluZSwKIAkuaW5pdF9sYXRlICAgICAgPSBpbXg2c2xfaW5pdF9sYXRlLAogCS5kdF9jb21wYXQJPSBpbXg2c2xfZHRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c3guYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnN4LmMKaW5kZXggM2RlM2I3My4uN2E5NmM2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c3guYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDZzeC5jCkBAIC04LDI0ICs4LDczIEBACiAKICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi9pbXg2cS1pb211eGMtZ3ByLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiY3B1aWRsZS5oIgogCitzdGF0aWMgaW50IGFyODAzMV9waHlfZml4dXAoc3RydWN0IHBoeV9kZXZpY2UgKmRldikKK3sKKwl1MTYgdmFsOworCisJLyogU2V0IFJHTUlJIElPIHZvbHRhZ2UgdG8gMS44ViAqLworCXBoeV93cml0ZShkZXYsIDB4MWQsIDB4MWYpOworCXBoeV93cml0ZShkZXYsIDB4MWUsIDB4OCk7CisKKwkvKiBpbnRyb2R1Y2UgdHggY2xvY2sgZGVsYXkgKi8KKwlwaHlfd3JpdGUoZGV2LCAweDFkLCAweDUpOworCXZhbCA9IHBoeV9yZWFkKGRldiwgMHgxZSk7CisJdmFsIHw9IDB4MDEwMDsKKwlwaHlfd3JpdGUoZGV2LCAweDFlLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgUEhZX0lEX0FSODAzMSAgIDB4MDA0ZGQwNzQKK3N0YXRpYyB2b2lkIF9faW5pdCBpbXg2c3hfZW5ldF9waHlfaW5pdCh2b2lkKQoreworCWlmIChJU19CVUlMVElOKENPTkZJR19QSFlMSUIpKQorCQlwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX3VpZChQSFlfSURfQVI4MDMxLCAweGZmZmZmZmZmLAorCQkJCQkgICBhcjgwMzFfcGh5X2ZpeHVwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGlteDZzeF9lbmV0X2Nsa19zZWwodm9pZCkKK3sKKwlzdHJ1Y3QgcmVnbWFwICpncHI7CisKKwlncHIgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9jb21wYXRpYmxlKCJmc2wsaW14NnN4LWlvbXV4Yy1ncHIiKTsKKwlpZiAoIUlTX0VSUihncHIpKSB7CisJCXJlZ21hcF91cGRhdGVfYml0cyhncHIsIElPTVVYQ19HUFIxLAorCQkJCSAgIElNWDZTWF9HUFIxX0ZFQ19DTE9DS19NVVhfU0VMX01BU0ssIDApOworCQlyZWdtYXBfdXBkYXRlX2JpdHMoZ3ByLCBJT01VWENfR1BSMSwKKwkJCQkgICBJTVg2U1hfR1BSMV9GRUNfQ0xPQ0tfUEFEX0RJUl9NQVNLLCAwKTsKKwl9IGVsc2UgeworCQlwcl9lcnIoImZhaWxlZCB0byBmaW5kIGZzbCxpbXg2c3gtaW9tdXgtZ3ByIHJlZ21hcFxuIik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW14NnN4X2VuZXRfaW5pdCh2b2lkKQoreworCWlteDZzeF9lbmV0X3BoeV9pbml0KCk7CisJaW14NnN4X2VuZXRfY2xrX3NlbCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgaW14NnN4X2luaXRfbWFjaGluZSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKIAotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKLQogCXBhcmVudCA9IGlteF9zb2NfZGV2aWNlX2luaXQoKTsKIAlpZiAocGFyZW50ID09IE5VTEwpCiAJCXByX3dhcm4oImZhaWxlZCB0byBpbml0aWFsaXplIHNvYyBkZXZpY2VcbiIpOwogCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIHBhcmVudCk7CiAKKwlpbXg2c3hfZW5ldF9pbml0KCk7CiAJaW14X2FuYXRvcF9pbml0KCk7CiAJaW14NnN4X3BtX2luaXQoKTsKIH0KQEAgLTUzLDEwICsxMDIsOCBAQAogfTsKIAogRFRfTUFDSElORV9TVEFSVChJTVg2U1gsICJGcmVlc2NhbGUgaS5NWDYgU29sb1ggKERldmljZSBUcmVlKSIpCi0JLm1hcF9pbwkJPSBkZWJ1Z19sbF9pb19pbml0LAogCS5pbml0X2lycQk9IGlteDZzeF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gaW14NnN4X2luaXRfbWFjaGluZSwKIAkuZHRfY29tcGF0CT0gaW14NnN4X2R0X2NvbXBhdCwKIAkuaW5pdF9sYXRlCT0gaW14NnN4X2luaXRfbGF0ZSwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbHMxMDIxYS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1sczEwMjFhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5Yzg1OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbHMxMDIxYS5jCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbHMxMDIxYV9kdF9jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKKwkiZnNsLGxzMTAyMWEiLAorCU5VTEwsCit9OworCitEVF9NQUNISU5FX1NUQVJUKExTMTAyMUEsICJGcmVlc2NhbGUgTFMxMDIxQSIpCisJLnNtcAkJPSBzbXBfb3BzKGxzMTAyMWFfc21wX29wcyksCisJLmR0X2NvbXBhdAk9IGxzMTAyMWFfZHRfY29tcGF0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtdmY2MTAuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtdmY2MTAuYwppbmRleCBlZTdlNTdiLi5jMTFhYjZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXZmNjEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC12ZjYxMC5jCkBAIC0xMiwxNCArMTIsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgogCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCB2ZjYxMF9pbml0X21hY2hpbmUodm9pZCkKLXsKLQlteGNfYXJjaF9yZXNldF9pbml0X2R0KCk7Ci0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZmNjEwX2R0X2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewogCSJmc2wsdmY2MTAiLAogCU5VTEwsCkBAIC0yOCw3ICsyMCw1IEBACiBEVF9NQUNISU5FX1NUQVJUKFZZQlJJRF9WRjYxMCwgIkZyZWVzY2FsZSBWeWJyaWQgVkY2MTAgKERldmljZSBUcmVlKSIpCiAJLmwyY19hdXhfdmFsCT0gMCwKIAkubDJjX2F1eF9tYXNrCT0gfjAsCi0JLmluaXRfbWFjaGluZSAgID0gdmY2MTBfaW5pdF9tYWNoaW5lLAogCS5kdF9jb21wYXQJPSB2ZjYxMF9kdF9jb21wYXQsCi0JLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMKaW5kZXggN2E5Njg2YS4uMzcyOWQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21tZGMuYwpAQCAtMjEsNiArMjEsMTIgQEAKICNkZWZpbmUgQlBfTU1EQ19NQVBTUl9QU0QJMAogI2RlZmluZSBCUF9NTURDX01BUFNSX1BTUwk0CiAKKyNkZWZpbmUgTU1EQ19NRE1JU0MJCTB4MTgKKyNkZWZpbmUgQk1fTU1EQ19NRE1JU0NfRERSX1RZUEUJMHgxOAorI2RlZmluZSBCUF9NTURDX01ETUlTQ19ERFJfVFlQRQkweDMKKworc3RhdGljIGludCBkZHJfdHlwZTsKKwogc3RhdGljIGludCBpbXhfbW1kY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKQEAgLTMxLDYgKzM3LDEyIEBACiAJbW1kY19iYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCVdBUk5fT04oIW1tZGNfYmFzZSk7CiAKKwlyZWcgPSBtbWRjX2Jhc2UgKyBNTURDX01ETUlTQzsKKwkvKiBHZXQgZGRyIHR5cGUgKi8KKwl2YWwgPSByZWFkbF9yZWxheGVkKHJlZyk7CisJZGRyX3R5cGUgPSAodmFsICYgQk1fTU1EQ19NRE1JU0NfRERSX1RZUEUpID4+CisJCSBCUF9NTURDX01ETUlTQ19ERFJfVFlQRTsKKwogCXJlZyA9IG1tZGNfYmFzZSArIE1NRENfTUFQU1I7CiAKIAkvKiBFbmFibGUgYXV0b21hdGljIHBvd2VyIHNhdmluZyAqLwpAQCAtNTEsNiArNjMsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGlteF9tbWRjX2dldF9kZHJfdHlwZSh2b2lkKQoreworCXJldHVybiBkZHJfdHlwZTsKK30KKwogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgaW14X21tZGNfZHRfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14NnEtbW1kYyIsIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9teGMuaCBiL2FyY2gvYXJtL21hY2gtaW14L214Yy5oCmluZGV4IDE3YTQxY2EuLjRjMTM0M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L214Yy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L214Yy5oCkBAIC01NSw2ICs1NSw4IEBACiAjZGVmaW5lIElNWF9DSElQX1JFVklTSU9OXzNfMwkJMHgzMwogI2RlZmluZSBJTVhfQ0hJUF9SRVZJU0lPTl9VTktOT1dOCTB4ZmYKIAorI2RlZmluZSBJTVhfRERSX1RZUEVfTFBERFIyCQkxCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiBleHRlcm4gdW5zaWduZWQgaW50IF9fbXhjX2NwdV90eXBlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLWlteC9wbGF0c21wLmMKaW5kZXggNzcxYmQyNS4uN2YyNzAwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L3BsYXRzbXAuYwpAQCAtMTEsNyArMTEsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9zbXBfc2N1Lmg+CkBAIC05NCwzICs5NywzMyBAQAogCS5jcHVfa2lsbAkJPSBpbXhfY3B1X2tpbGwsCiAjZW5kaWYKIH07CisKKyNkZWZpbmUgRENGR19DQ1NSX1NDUkFUQ0hSVzEJMHgyMDAKKworc3RhdGljIGludCBsczEwMjFhX2Jvb3Rfc2Vjb25kYXJ5KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKK3sKKwlhcmNoX3NlbmRfd2FrZXVwX2lwaV9tYXNrKGNwdW1hc2tfb2YoY3B1KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGxzMTAyMWFfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl2b2lkIF9faW9tZW0gKmRjZmdfYmFzZTsKKwl1bnNpZ25lZCBsb25nIHBhZGRyOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLGxzMTAyMWEtZGNmZyIpOworCWRjZmdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlCVUdfT04oIWRjZmdfYmFzZSk7CisKKwlwYWRkciA9IHZpcnRfdG9fcGh5cyhzZWNvbmRhcnlfc3RhcnR1cCk7CisJd3JpdGVsX3JlbGF4ZWQoY3B1X3RvX2JlMzIocGFkZHIpLCBkY2ZnX2Jhc2UgKyBEQ0ZHX0NDU1JfU0NSQVRDSFJXMSk7CisKKwlpb3VubWFwKGRjZmdfYmFzZSk7Cit9CisKK3N0cnVjdCBzbXBfb3BlcmF0aW9ucyAgbHMxMDIxYV9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CisJLnNtcF9wcmVwYXJlX2NwdXMJPSBsczEwMjFhX3NtcF9wcmVwYXJlX2NwdXMsCisJLnNtcF9ib290X3NlY29uZGFyeQk9IGxzMTAyMWFfYm9vdF9zZWNvbmRhcnksCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvcG0taW14Ni5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvcG0taW14Ni5jCmluZGV4IDVjM2FmOGYuLjVkMmMxYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L3BtLWlteDYuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9wbS1pbXg2LmMKQEAgLTg4LDcgKzg4LDcgQEAKIH07CiAKIHN0cnVjdCBpbXg2X3BtX3NvY2RhdGEgewotCXUzMiBjcHVfdHlwZTsKKwl1MzIgZGRyX3R5cGU7CiAJY29uc3QgY2hhciAqbW1kY19jb21wYXQ7CiAJY29uc3QgY2hhciAqc3JjX2NvbXBhdDsKIAljb25zdCBjaGFyICppb211eGNfY29tcGF0OwpAQCAtMTM4LDcgKzEzOCw2IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteDZfcG1fc29jZGF0YSBpbXg2cV9wbV9kYXRhIF9faW5pdGNvbnN0ID0gewotCS5jcHVfdHlwZSA9IE1YQ19DUFVfSU1YNlEsCiAJLm1tZGNfY29tcGF0ID0gImZzbCxpbXg2cS1tbWRjIiwKIAkuc3JjX2NvbXBhdCA9ICJmc2wsaW14NnEtc3JjIiwKIAkuaW9tdXhjX2NvbXBhdCA9ICJmc2wsaW14NnEtaW9tdXhjIiwKQEAgLTE0OCw3ICsxNDcsNiBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbXg2X3BtX3NvY2RhdGEgaW14NmRsX3BtX2RhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmNwdV90eXBlID0gTVhDX0NQVV9JTVg2REwsCiAJLm1tZGNfY29tcGF0ID0gImZzbCxpbXg2cS1tbWRjIiwKIAkuc3JjX2NvbXBhdCA9ICJmc2wsaW14NnEtc3JjIiwKIAkuaW9tdXhjX2NvbXBhdCA9ICJmc2wsaW14NmRsLWlvbXV4YyIsCkBAIC0xNTgsNyArMTU2LDYgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14Nl9wbV9zb2NkYXRhIGlteDZzbF9wbV9kYXRhIF9faW5pdGNvbnN0ID0gewotCS5jcHVfdHlwZSA9IE1YQ19DUFVfSU1YNlNMLAogCS5tbWRjX2NvbXBhdCA9ICJmc2wsaW14NnNsLW1tZGMiLAogCS5zcmNfY29tcGF0ID0gImZzbCxpbXg2c2wtc3JjIiwKIAkuaW9tdXhjX2NvbXBhdCA9ICJmc2wsaW14NnNsLWlvbXV4YyIsCkBAIC0xNjgsNyArMTY1LDYgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14Nl9wbV9zb2NkYXRhIGlteDZzeF9wbV9kYXRhIF9faW5pdGNvbnN0ID0gewotCS5jcHVfdHlwZSA9IE1YQ19DUFVfSU1YNlNYLAogCS5tbWRjX2NvbXBhdCA9ICJmc2wsaW14NnN4LW1tZGMiLAogCS5zcmNfY29tcGF0ID0gImZzbCxpbXg2c3gtc3JjIiwKIAkuaW9tdXhjX2NvbXBhdCA9ICJmc2wsaW14NnN4LWlvbXV4YyIsCkBAIC0xODcsNyArMTgzLDcgQEAKIHN0cnVjdCBpbXg2X2NwdV9wbV9pbmZvIHsKIAlwaHlzX2FkZHJfdCBwYmFzZTsgLyogVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgcG1faW5mby4gKi8KIAlwaHlzX2FkZHJfdCByZXN1bWVfYWRkcjsgLyogVGhlIHBoeXNpY2FsIHJlc3VtZSBhZGRyZXNzIGZvciBhc20gY29kZSAqLwotCXUzMiBjcHVfdHlwZTsKKwl1MzIgZGRyX3R5cGU7CiAJdTMyIHBtX2luZm9fc2l6ZTsgLyogU2l6ZSBvZiBwbV9pbmZvLiAqLwogCXN0cnVjdCBpbXg2X3BtX2Jhc2UgbW1kY19iYXNlOwogCXN0cnVjdCBpbXg2X3BtX2Jhc2Ugc3JjX2Jhc2U7CkBAIC0yNjEsNyArMjU3LDYgQEAKIAogaW50IGlteDZxX3NldF9scG0oZW51bSBteGNfY3B1X3B3cl9tb2RlIG1vZGUpCiB7Ci0Jc3RydWN0IGlycV9kYXRhICppb211eGNfaXJxX2RhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKDMyKTsKIAl1MzIgdmFsID0gcmVhZGxfcmVsYXhlZChjY21fYmFzZSArIENMUENSKTsKIAogCXZhbCAmPSB+Qk1fQ0xQQ1JfTFBNOwpAQCAtMzE2LDkgKzMxMSw5IEBACiAJICogMykgU29mdHdhcmUgc2hvdWxkIG1hc2sgSVJRICMzMiByaWdodCBhZnRlciBDQ00gTG93LVBvd2VyIG1vZGUKIAkgKiAgICBpcyBzZXQgKHNldCBiaXRzIDAtMSBvZiBDQ01fQ0xQQ1IpLgogCSAqLwotCWlteF9ncGNfaXJxX3VubWFzayhpb211eGNfaXJxX2RhdGEpOworCWlteF9ncGNfaHdpcnFfdW5tYXNrKDMyKTsKIAl3cml0ZWxfcmVsYXhlZCh2YWwsIGNjbV9iYXNlICsgQ0xQQ1IpOwotCWlteF9ncGNfaXJxX21hc2soaW9tdXhjX2lycV9kYXRhKTsKKwlpbXhfZ3BjX2h3aXJxX21hc2soMzIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjIsNyArNTE3LDcgQEAKIAkJZ290byBwbDMxMF9jYWNoZV9tYXBfZmFpbGVkOwogCX0KIAotCXBtX2luZm8tPmNwdV90eXBlID0gc29jZGF0YS0+Y3B1X3R5cGU7CisJcG1faW5mby0+ZGRyX3R5cGUgPSBpbXhfbW1kY19nZXRfZGRyX3R5cGUoKTsKIAlwbV9pbmZvLT5tbWRjX2lvX251bSA9IHNvY2RhdGEtPm1tZGNfaW9fbnVtOwogCW1tZGNfb2Zmc2V0X2FycmF5ID0gc29jZGF0YS0+bW1kY19pb19vZmZzZXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L3N1c3BlbmQtaW14Ni5TIGIvYXJjaC9hcm0vbWFjaC1pbXgvc3VzcGVuZC1pbXg2LlMKaW5kZXggY2E0ZWEyZC4uYjk5OTg3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvc3VzcGVuZC1pbXg2LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvc3VzcGVuZC1pbXg2LlMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqLwogI2RlZmluZSBQTV9JTkZPX1BCQVNFX09GRlNFVAkJCTB4MAogI2RlZmluZSBQTV9JTkZPX1JFU1VNRV9BRERSX09GRlNFVAkJMHg0Ci0jZGVmaW5lIFBNX0lORk9fQ1BVX1RZUEVfT0ZGU0VUCQkJMHg4CisjZGVmaW5lIFBNX0lORk9fRERSX1RZUEVfT0ZGU0VUCQkJMHg4CiAjZGVmaW5lIFBNX0lORk9fUE1fSU5GT19TSVpFX09GRlNFVAkJMHhDCiAjZGVmaW5lIFBNX0lORk9fTVg2UV9NTURDX1BfT0ZGU0VUCQkweDEwCiAjZGVmaW5lIFBNX0lORk9fTVg2UV9NTURDX1ZfT0ZGU0VUCQkweDE0CkBAIC0xMTAsNyArMTEwLDcgQEAKIAlsZHJlcQlyMTEsIFtyMCwgI1BNX0lORk9fTVg2UV9NTURDX1ZfT0ZGU0VUXQogCWxkcm5lCXIxMSwgW3IwLCAjUE1fSU5GT19NWDZRX01NRENfUF9PRkZTRVRdCiAKLQljbXAgCXIzLCAjTVhDX0NQVV9JTVg2U0wKKwljbXAJcjMsICNJTVhfRERSX1RZUEVfTFBERFIyCiAJYm5lCTRmCiAKIAkvKiByZXNldCByZWFkIEZJRk8sIFJTVF9SRF9GSUZPICovCkBAIC0xNTEsNyArMTUxLDcgQEAKIEVOVFJZKGlteDZfc3VzcGVuZCkKIAlsZHIJcjEsIFtyMCwgI1BNX0lORk9fUEJBU0VfT0ZGU0VUXQogCWxkcglyMiwgW3IwLCAjUE1fSU5GT19SRVNVTUVfQUREUl9PRkZTRVRdCi0JbGRyCXIzLCBbcjAsICNQTV9JTkZPX0NQVV9UWVBFX09GRlNFVF0KKwlsZHIJcjMsIFtyMCwgI1BNX0lORk9fRERSX1RZUEVfT0ZGU0VUXQogCWxkcglyNCwgW3IwLCAjUE1fSU5GT19QTV9JTkZPX1NJWkVfT0ZGU0VUXQogCiAJLyoKQEAgLTIwOSw4ICsyMDksOCBAQAogCWxkcglyNywgW3IwLCAjUE1fSU5GT19NTURDX0lPX05VTV9PRkZTRVRdCiAJbGRyCXI4LCA9UE1fSU5GT19NTURDX0lPX1ZBTF9PRkZTRVQKIAlhZGQJcjgsIHI4LCByMAotCS8qIGkuTVg2U0wncyBsYXN0IDMgSU9zIG5lZWQgc3BlY2lhbCBzZXR0aW5nICovCi0JY21wCXIzLCAjTVhDX0NQVV9JTVg2U0wKKwkvKiBMUEREUjIncyBsYXN0IDMgSU9zIG5lZWQgc3BlY2lhbCBzZXR0aW5nICovCisJY21wCXIzLCAjSU1YX0REUl9UWVBFX0xQRERSMgogCXN1YmVxCXI3LCByNywgIzB4Mwogc2V0X21tZGNfaW9fbHBtOgogCWxkcglyOSwgW3I4XSwgIzB4OApAQCAtMjE4LDcgKzIxOCw3IEBACiAJc3VicwlyNywgcjcsICMweDEKIAlibmUJc2V0X21tZGNfaW9fbHBtCiAKLQljbXAgCXIzLCAjTVhDX0NQVV9JTVg2U0wKKwljbXAgCXIzLCAjSU1YX0REUl9UWVBFX0xQRERSMgogCWJuZQlzZXRfbW1kY19pb19scG1fZG9uZQogCWxkcglyNiwgPTB4MTAwMAogCWxkcglyOSwgW3I4XSwgIzB4OApAQCAtMzI0LDcgKzMyNCw3IEBACiAJc3RyCXI3LCBbcjExLCAjTVg2UV9TUkNfR1BSMV0KIAlzdHIJcjcsIFtyMTEsICNNWDZRX1NSQ19HUFIyXQogCi0JbGRyCXIzLCBbcjAsICNQTV9JTkZPX0NQVV9UWVBFX09GRlNFVF0KKwlsZHIJcjMsIFtyMCwgI1BNX0lORk9fRERSX1RZUEVfT0ZGU0VUXQogCW1vdglyNSwgIzB4MQogCXJlc3VtZV9tbWRjCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L3N5c3RlbS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvc3lzdGVtLmMKaW5kZXggZDE0YzMzZi4uNTFjMzUwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvc3lzdGVtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvc3lzdGVtLmMKQEAgLTg5LDIxICs4OSw2IEBACiAJCWNsa19wcmVwYXJlKHdkb2dfY2xrKTsKIH0KIAotdm9pZCBfX2luaXQgbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsaW14MjEtd2R0Iik7Ci0Jd2RvZ19iYXNlID0gb2ZfaW9tYXAobnAsIDApOwotCVdBUk5fT04oIXdkb2dfYmFzZSk7Ci0KLQl3ZG9nX2NsayA9IG9mX2Nsa19nZXQobnAsIDApOwotCWlmIChJU19FUlIod2RvZ19jbGspKQotCQlwcl93YXJuKCIlczogZmFpbGVkIHRvIGdldCB3ZG9nIGNsb2NrXG4iLCBfX2Z1bmNfXyk7Ci0JZWxzZQotCQljbGtfcHJlcGFyZSh3ZG9nX2Nsayk7Ci19Ci0KICNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAogdm9pZCBfX2luaXQgaW14X2luaXRfbDJjYWNoZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvS2NvbmZpZwppbmRleCBjNDU1ZTk3Li4wMmQwODM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvS2NvbmZpZwpAQCAtMSwzICsxLDI2IEBACitjb25maWcgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiQVJNIEx0ZC4gSW50ZWdyYXRvciBmYW1pbHkiIGlmIChBUkNIX01VTFRJX1Y0VCB8fCBBUkNIX01VTFRJX1Y1IHx8IEFSQ0hfTVVMVElfVjYpCisJc2VsZWN0IEFSTV9BTUJBCisJc2VsZWN0IEFSTV9QQVRDSF9QSFlTX1ZJUlQgaWYgTU1VCisJc2VsZWN0IEFVVE9fWlJFTEFERFIKKwlzZWxlY3QgQ09NTU9OX0NMSworCXNlbGVjdCBDT01NT05fQ0xLX1ZFUlNBVElMRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEhBVkVfVENNCisJc2VsZWN0IElDU1QKKwlzZWxlY3QgTUZEX1NZU0NPTgorCXNlbGVjdCBNVUxUSV9JUlFfSEFORExFUgorCXNlbGVjdCBQTEFUX1ZFUlNBVElMRQorCXNlbGVjdCBQT1dFUl9SRVNFVAorCXNlbGVjdCBQT1dFUl9SRVNFVF9WRVJTQVRJTEUKKwlzZWxlY3QgUE9XRVJfU1VQUExZCisJc2VsZWN0IFNPQ19JTlRFR1JBVE9SX0NNCisJc2VsZWN0IFNQQVJTRV9JUlEKKwlzZWxlY3QgVVNFX09GCisJc2VsZWN0IFZFUlNBVElMRV9GUEdBX0lSUQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIEFSTSdzIEludGVncmF0b3IgcGxhdGZvcm0uCisKIGlmIEFSQ0hfSU5URUdSQVRPUgogCiBtZW51ICJJbnRlZ3JhdG9yIE9wdGlvbnMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvTWFrZWZpbGUKaW5kZXggZWM3NTlkZS4uMWViZTQ1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogIyBPYmplY3QgZmlsZSBsaXN0cy4KIAotb2JqLXkJCQkJCTo9IGNvcmUubyBsbS5vIGxlZHMubworb2JqLXkJCQkJCTo9IGNvcmUubyBsbS5vCiBvYmotJChDT05GSUdfQVJDSF9JTlRFR1JBVE9SX0FQKQkrPSBpbnRlZ3JhdG9yX2FwLm8KIG9iai0kKENPTkZJR19BUkNIX0lOVEVHUkFUT1JfQ1ApCSs9IGludGVncmF0b3JfY3AubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY20uaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbS5oCmluZGV4IDRlY2ZmN2IuLjViOGJhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjZGVmaW5lIENNX0NUUkxfTEVECQkJKDEgPDwgMCkKICNkZWZpbmUgQ01fQ1RSTF9uTUJERVQJCQkoMSA8PCAxKQogI2RlZmluZSBDTV9DVFJMX1JFTUFQCQkJKDEgPDwgMikKLSNkZWZpbmUgQ01fQ1RSTF9SRVNFVAkJCSgxIDw8IDMpCiAKIC8qCiAgKiBJbnRlZ3JhdG9yL0FQLFBQMiBzcGVjaWZpYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvbW1vbi5oCmluZGV4IGFkMGFjNTU0Li45NmM5ZGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvbW1vbi5oCkBAIC00LDUgKzQsMyBAQAogdm9pZCBpbnRlZ3JhdG9yX2luaXRfZWFybHkodm9pZCk7CiBpbnQgaW50ZWdyYXRvcl9pbml0KGJvb2wgaXNfY3ApOwogdm9pZCBpbnRlZ3JhdG9yX3Jlc2VydmUodm9pZCk7Ci12b2lkIGludGVncmF0b3JfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlLCBjb25zdCBjaGFyICopOwotdm9pZCBpbnRlZ3JhdG9yX2luaXRfc3lzZnMoc3RydWN0IGRldmljZSAqcGFyZW50LCB1MzIgaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKaW5kZXggZTNmM2FjYS4uOTQ4ODcyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCkBAIC02MCw0MCArNjAsNiBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICppbnRlZ3JhdG9yX2FyY2hfc3RyKHUzMiBpZCkKLXsKLQlzd2l0Y2ggKChpZCA+PiAxNikgJiAweGZmKSB7Ci0JY2FzZSAweDAwOgotCQlyZXR1cm4gIkFTQiBsaXR0bGUtZW5kaWFuIjsKLQljYXNlIDB4MDE6Ci0JCXJldHVybiAiQUhCIGxpdHRsZS1lbmRpYW4iOwotCWNhc2UgMHgwMzoKLQkJcmV0dXJuICJBSEItTGl0ZSBzeXN0ZW0gYnVzLCBiaS1lbmRpYW4iOwotCWNhc2UgMHgwNDoKLQkJcmV0dXJuICJBSEIiOwotCWNhc2UgMHgwODoKLQkJcmV0dXJuICJBSEIgc3lzdGVtIGJ1cywgQVNCIHByb2Nlc3NvciBidXMiOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAiVW5rbm93biI7Ci0JfQotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqaW50ZWdyYXRvcl9mcGdhX3N0cih1MzIgaWQpCi17Ci0Jc3dpdGNoICgoaWQgPj4gMTIpICYgMHhmKSB7Ci0JY2FzZSAweDAxOgotCQlyZXR1cm4gIlhDNDA2MiI7Ci0JY2FzZSAweDAyOgotCQlyZXR1cm4gIlhDNDA4NSI7Ci0JY2FzZSAweDAzOgotCQlyZXR1cm4gIlhWQzYwMCI7Ci0JY2FzZSAweDA0OgotCQlyZXR1cm4gIkVQTTcyNTZBRSAoQWx0ZXJhIFBMRCkiOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAiVW5rbm93biI7Ci0JfQotfQotCiB2b2lkIGNtX2NsZWFyX2lycXModm9pZCkKIHsKIAkvKiBkaXNhYmxlIGNvcmUgbW9kdWxlIElSUXMgKi8KQEAgLTEwOSw3ICs3NSw2IEBACiB2b2lkIGNtX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNtID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIGNtX21hdGNoKTsKLQl1MzIgdmFsOwogCiAJaWYgKCFjbSkgewogCQlwcl9jcml0KCJubyBjb3JlIG1vZHVsZSBub2RlIGZvdW5kIGluIGRldmljZSB0cmVlXG4iKTsKQEAgLTEyMSwxMyArODYsNiBAQAogCQlyZXR1cm47CiAJfQogCWNtX2NsZWFyX2lycXMoKTsKLQl2YWwgPSByZWFkbChjbV9iYXNlICsgSU5URUdSQVRPUl9IRFJfSURfT0ZGU0VUKTsKLQlwcl9pbmZvKCJEZXRlY3RlZCBBUk0gY29yZSBtb2R1bGU6XG4iKTsKLQlwcl9pbmZvKCIgICAgTWFudWZhY3R1cmVyOiAlMDJ4XG4iLCAodmFsID4+IDI0KSk7Ci0JcHJfaW5mbygiICAgIEFyY2hpdGVjdHVyZTogJXNcbiIsIGludGVncmF0b3JfYXJjaF9zdHIodmFsKSk7Ci0JcHJfaW5mbygiICAgIEZQR0E6ICVzXG4iLCBpbnRlZ3JhdG9yX2ZwZ2Ffc3RyKHZhbCkpOwotCXByX2luZm8oIiAgICBCdWlsZDogJTAyeFxuIiwgKHZhbCA+PiA0KSAmIDB4RkYpOwotCXByX2luZm8oIiAgICBSZXY6ICVjXG4iLCAoJ0EnICsgKHZhbCAmIDB4MDMpKSk7CiB9CiAKIC8qCkBAIC0xMzksNjQgKzk3LDMgQEAKIHsKIAltZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUKTsKIH0KLQotLyoKLSAqIFRvIHJlc2V0LCB3ZSBoaXQgdGhlIG9uLWJvYXJkIHJlc2V0IHJlZ2lzdGVyIGluIHRoZSBzeXN0ZW0gRlBHQQotICovCi12b2lkIGludGVncmF0b3JfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKLXsKLQljbV9jb250cm9sKENNX0NUUkxfUkVTRVQsIENNX0NUUkxfUkVTRVQpOwotfQotCi1zdGF0aWMgdTMyIGludGVncmF0b3JfaWQ7Ci0KLXN0YXRpYyBzc2l6ZV90IGludGNwX2dldF9tYW5mKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwMnhcbiIsIGludGVncmF0b3JfaWQgPj4gMjQpOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaW50Y3BfbWFuZl9hdHRyID0KLQlfX0FUVFIobWFudWZhY3R1cmVyLCAgU19JUlVHTywgaW50Y3BfZ2V0X21hbmYsICBOVUxMKTsKLQotc3RhdGljIHNzaXplX3QgaW50Y3BfZ2V0X2FyY2goc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGludGVncmF0b3JfYXJjaF9zdHIoaW50ZWdyYXRvcl9pZCkpOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaW50Y3BfYXJjaF9hdHRyID0KLQlfX0FUVFIoYXJjaGl0ZWN0dXJlLCAgU19JUlVHTywgaW50Y3BfZ2V0X2FyY2gsICBOVUxMKTsKLQotc3RhdGljIHNzaXplX3QgaW50Y3BfZ2V0X2ZwZ2Eoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGludGVncmF0b3JfZnBnYV9zdHIoaW50ZWdyYXRvcl9pZCkpOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaW50Y3BfZnBnYV9hdHRyID0KLQlfX0FUVFIoZnBnYSwgIFNfSVJVR08sIGludGNwX2dldF9mcGdhLCAgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90IGludGNwX2dldF9idWlsZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICAgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwMnhcbiIsIChpbnRlZ3JhdG9yX2lkID4+IDQpICYgMHhGRik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpbnRjcF9idWlsZF9hdHRyID0KLQlfX0FUVFIoYnVpbGQsICBTX0lSVUdPLCBpbnRjcF9nZXRfYnVpbGQsICBOVUxMKTsKLQotCi0KLXZvaWQgaW50ZWdyYXRvcl9pbml0X3N5c2ZzKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgdTMyIGlkKQotewotCWludGVncmF0b3JfaWQgPSBpZDsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUocGFyZW50LCAmaW50Y3BfbWFuZl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUocGFyZW50LCAmaW50Y3BfYXJjaF9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUocGFyZW50LCAmaW50Y3BfZnBnYV9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUocGFyZW50LCAmaW50Y3BfYnVpbGRfYXR0cik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjNjYzk5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqICBhcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2RlZmluZSBBTUJBX1VBUlRfRFIJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4MTYwMDAwMDApCi0jZGVmaW5lIEFNQkFfVUFSVF9MQ1JICSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDE2MDAwMDA4KQotI2RlZmluZSBBTUJBX1VBUlRfTENSTQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHgxNjAwMDAwYykKLSNkZWZpbmUgQU1CQV9VQVJUX0xDUkwJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4MTYwMDAwMTApCi0jZGVmaW5lIEFNQkFfVUFSVF9DUgkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHgxNjAwMDAxNCkKLSNkZWZpbmUgQU1CQV9VQVJUX0ZSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDE2MDAwMDE4KQotCi0vKgotICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCi0gKi8KLXN0YXRpYyB2b2lkIHB1dGMoaW50IGMpCi17Ci0Jd2hpbGUgKEFNQkFfVUFSVF9GUiAmICgxIDw8IDUpKQotCQliYXJyaWVyKCk7Ci0KLQlBTUJBX1VBUlRfRFIgPSBjOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKLXsKLQl3aGlsZSAoQU1CQV9VQVJUX0ZSICYgKDEgPDwgMykpCi0JCWJhcnJpZXIoKTsKLX0KLQotLyoKLSAqIG5vdGhpbmcgdG8gZG8KLSAqLwotI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYwppbmRleCA4Y2EyOTBiLi4zMDAwM2JhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMKQEAgLTI3LDIyICsyNywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2ttaS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxY2hpcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9jbGstaW50ZWdyYXRvci5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNfc29jLmg+CiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkX2Nsb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYXJtX3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC04OSwxMSArODIsNiBAQAogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFwX2lvX2Rlc2NbXSBfX2luaXRkYXRhIF9fbWF5YmVfdW51c2VkID0gewogCXsKLQkJLnZpcnR1YWwJPSBJT19BRERSRVNTKElOVEVHUkFUT1JfQ1RfQkFTRSksCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihJTlRFR1JBVE9SX0NUX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNaXzRLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7CiAJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhJTlRFR1JBVE9SX0lDX0JBU0UpLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oSU5URUdSQVRPUl9JQ19CQVNFKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKQEAgLTI1NywxODggKzI0NSwxMCBAQAogCS5zZXRfbWN0cmwgPSBpbnRlZ3JhdG9yX3VhcnRfc2V0X21jdHJsLAogfTsKIAotLyoKLSAqIFdoZXJlIGlzIHRoZSB0aW1lciAoVkEpPwotICovCi0jZGVmaW5lIFRJTUVSMF9WQV9CQVNFIF9faW9fYWRkcmVzcyhJTlRFR1JBVE9SX1RJTUVSMF9CQVNFKQotI2RlZmluZSBUSU1FUjFfVkFfQkFTRSBfX2lvX2FkZHJlc3MoSU5URUdSQVRPUl9USU1FUjFfQkFTRSkKLSNkZWZpbmUgVElNRVIyX1ZBX0JBU0UgX19pb19hZGRyZXNzKElOVEVHUkFUT1JfVElNRVIyX0JBU0UpCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3JlbG9hZDsKLQotc3RhdGljIHU2NCBub3RyYWNlIGludGVncmF0b3JfcmVhZF9zY2hlZF9jbG9jayh2b2lkKQotewotCXJldHVybiAtcmVhZGwoKHZvaWQgX19pb21lbSAqKSBUSU1FUjJfVkFfQkFTRSArIFRJTUVSX1ZBTFVFKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWdyYXRvcl9jbG9ja3NvdXJjZV9pbml0KHVuc2lnbmVkIGxvbmcgaW5yYXRlLAotCQkJCQl2b2lkIF9faW9tZW0gKmJhc2UpCi17Ci0JdTMyIGN0cmwgPSBUSU1FUl9DVFJMX0VOQUJMRSB8IFRJTUVSX0NUUkxfUEVSSU9ESUM7Ci0JdW5zaWduZWQgbG9uZyByYXRlID0gaW5yYXRlOwotCi0JaWYgKHJhdGUgPj0gMTUwMDAwMCkgewotCQlyYXRlIC89IDE2OwotCQljdHJsIHw9IFRJTUVSX0NUUkxfRElWMTY7Ci0JfQotCi0Jd3JpdGVsKDB4ZmZmZiwgYmFzZSArIFRJTUVSX0xPQUQpOwotCXdyaXRlbChjdHJsLCBiYXNlICsgVElNRVJfQ1RSTCk7Ci0KLQljbG9ja3NvdXJjZV9tbWlvX2luaXQoYmFzZSArIFRJTUVSX1ZBTFVFLCAidGltZXIyIiwKLQkJCXJhdGUsIDIwMCwgMTYsIGNsb2Nrc291cmNlX21taW9fcmVhZGxfZG93bik7Ci0Jc2NoZWRfY2xvY2tfcmVnaXN0ZXIoaW50ZWdyYXRvcl9yZWFkX3NjaGVkX2Nsb2NrLCAxNiwgcmF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKiBjbGtldnRfYmFzZTsKLQotLyoKLSAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIKLSAqLwotc3RhdGljIGlycXJldHVybl90IGludGVncmF0b3JfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSBkZXZfaWQ7Ci0KLQkvKiBjbGVhciB0aGUgaW50ZXJydXB0ICovCi0Jd3JpdGVsKDEsIGNsa2V2dF9iYXNlICsgVElNRVJfSU5UQ0xSKTsKLQotCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgdm9pZCBjbGtldnRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQl1MzIgY3RybCA9IHJlYWRsKGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCkgJiB+VElNRVJfQ1RSTF9FTkFCTEU7Ci0KLQkvKiBEaXNhYmxlIHRpbWVyICovCi0Jd3JpdGVsKGN0cmwsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQkvKiBFbmFibGUgdGhlIHRpbWVyIGFuZCBzdGFydCB0aGUgcGVyaW9kaWMgdGljayAqLwotCQl3cml0ZWwodGltZXJfcmVsb2FkLCBjbGtldnRfYmFzZSArIFRJTUVSX0xPQUQpOwotCQljdHJsIHw9IFRJTUVSX0NUUkxfUEVSSU9ESUMgfCBUSU1FUl9DVFJMX0VOQUJMRTsKLQkJd3JpdGVsKGN0cmwsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7Ci0JCWJyZWFrOwotCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKLQkJLyogTGVhdmUgdGhlIHRpbWVyIGRpc2FibGVkLCAuc2V0X25leHRfZXZlbnQgd2lsbCBlbmFibGUgaXQgKi8KLQkJY3RybCAmPSB+VElNRVJfQ1RSTF9QRVJJT0RJQzsKLQkJd3JpdGVsKGN0cmwsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7Ci0JCWJyZWFrOwotCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6Ci0JZGVmYXVsdDoKLQkJLyogSnVzdCBsZWF2ZSBpbiBkaXNhYmxlZCBzdGF0ZSAqLwotCQlicmVhazsKLQl9Ci0KLX0KLQotc3RhdGljIGludCBjbGtldnRfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCi17Ci0JdW5zaWduZWQgbG9uZyBjdHJsID0gcmVhZGwoY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKLQotCXdyaXRlbChjdHJsICYgflRJTUVSX0NUUkxfRU5BQkxFLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCXdyaXRlbChuZXh0LCBjbGtldnRfYmFzZSArIFRJTUVSX0xPQUQpOwotCXdyaXRlbChjdHJsIHwgVElNRVJfQ1RSTF9FTkFCTEUsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgaW50ZWdyYXRvcl9jbG9ja2V2ZW50ID0gewotCS5uYW1lCQk9ICJ0aW1lcjEiLAotCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKLQkuc2V0X21vZGUJPSBjbGtldnRfc2V0X21vZGUsCi0JLnNldF9uZXh0X2V2ZW50CT0gY2xrZXZ0X3NldF9uZXh0X2V2ZW50LAotCS5yYXRpbmcJCT0gMzAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaW50ZWdyYXRvcl90aW1lcl9pcnEgPSB7Ci0JLm5hbWUJCT0gInRpbWVyIiwKLQkuZmxhZ3MJCT0gSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKLQkuaGFuZGxlcgk9IGludGVncmF0b3JfdGltZXJfaW50ZXJydXB0LAotCS5kZXZfaWQJCT0gJmludGVncmF0b3JfY2xvY2tldmVudCwKLX07Ci0KLXN0YXRpYyB2b2lkIGludGVncmF0b3JfY2xvY2tldmVudF9pbml0KHVuc2lnbmVkIGxvbmcgaW5yYXRlLAotCQkJCXZvaWQgX19pb21lbSAqYmFzZSwgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGUgPSBpbnJhdGU7Ci0JdW5zaWduZWQgaW50IGN0cmwgPSAwOwotCi0JY2xrZXZ0X2Jhc2UgPSBiYXNlOwotCS8qIENhbGN1bGF0ZSBhbmQgcHJvZ3JhbSBhIGRpdmlzb3IgKi8KLQlpZiAocmF0ZSA+IDB4MTAwMDAwICogSFopIHsKLQkJcmF0ZSAvPSAyNTY7Ci0JCWN0cmwgfD0gVElNRVJfQ1RSTF9ESVYyNTY7Ci0JfSBlbHNlIGlmIChyYXRlID4gMHgxMDAwMCAqIEhaKSB7Ci0JCXJhdGUgLz0gMTY7Ci0JCWN0cmwgfD0gVElNRVJfQ1RSTF9ESVYxNjsKLQl9Ci0JdGltZXJfcmVsb2FkID0gcmF0ZSAvIEhaOwotCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCi0Jc2V0dXBfaXJxKGlycSwgJmludGVncmF0b3JfdGltZXJfaXJxKTsKLQljbG9ja2V2ZW50c19jb25maWdfYW5kX3JlZ2lzdGVyKCZpbnRlZ3JhdG9yX2Nsb2NrZXZlbnQsCi0JCQkJCXJhdGUsCi0JCQkJCTEsCi0JCQkJCTB4ZmZmZlUpOwotfQotCiB2b2lkIF9faW5pdCBhcF9pbml0X2Vhcmx5KHZvaWQpCiB7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhcF9vZl90aW1lcl9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlOwotCWNvbnN0IGNoYXIgKnBhdGg7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCWludCBlcnI7Ci0JaW50IGlycTsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0JdW5zaWduZWQgbG9uZyByYXRlOwotCi0Jb2ZfY2xrX2luaXQoTlVMTCk7Ci0KLQllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhvZl9hbGlhc2VzLAotCQkJCSJhcm0sdGltZXItcHJpbWFyeSIsICZwYXRoKTsKLQlpZiAoV0FSTl9PTihlcnIpKQotCQlyZXR1cm47Ci0Jbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKHBhdGgpOwotCWJhc2UgPSBvZl9pb21hcChub2RlLCAwKTsKLQlpZiAoV0FSTl9PTighYmFzZSkpCi0JCXJldHVybjsKLQotCWNsayA9IG9mX2Nsa19nZXQobm9kZSwgMCk7Ci0JQlVHX09OKElTX0VSUihjbGspKTsKLQljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKLQlyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7Ci0KLQl3cml0ZWwoMCwgYmFzZSArIFRJTUVSX0NUUkwpOwotCWludGVncmF0b3JfY2xvY2tzb3VyY2VfaW5pdChyYXRlLCBiYXNlKTsKLQotCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG9mX2FsaWFzZXMsCi0JCQkJImFybSx0aW1lci1zZWNvbmRhcnkiLCAmcGF0aCk7Ci0JaWYgKFdBUk5fT04oZXJyKSkKLQkJcmV0dXJuOwotCW5vZGUgPSBvZl9maW5kX25vZGVfYnlfcGF0aChwYXRoKTsKLQliYXNlID0gb2ZfaW9tYXAobm9kZSwgMCk7Ci0JaWYgKFdBUk5fT04oIWJhc2UpKQotCQlyZXR1cm47Ci0JaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7Ci0KLQljbGsgPSBvZl9jbGtfZ2V0KG5vZGUsIDApOwotCUJVR19PTihJU19FUlIoY2xrKSk7Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7Ci0JcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOwotCi0Jd3JpdGVsKDAsIGJhc2UgKyBUSU1FUl9DVFJMKTsKLQlpbnRlZ3JhdG9yX2Nsb2NrZXZlbnRfaW5pdChyYXRlLCBiYXNlLCBpcnEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgYXBfaW5pdF9pcnFfb2Yodm9pZCkKIHsKIAljbV9pbml0KCk7CkBAIC00NzcsMTAgKzI4Nyw2IEBACiAJdW5zaWduZWQgbG9uZyBzY19kZWM7CiAJc3RydWN0IGRldmljZV9ub2RlICpzeXNjb247CiAJc3RydWN0IGRldmljZV9ub2RlICplYmk7Ci0Jc3RydWN0IGRldmljZSAqcGFyZW50OwotCXN0cnVjdCBzb2NfZGV2aWNlICpzb2NfZGV2OwotCXN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSAqc29jX2Rldl9hdHRyOwotCXUzMiBhcF9zY19pZDsKIAlpbnQgaTsKIAogCXN5c2NvbiA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBhcF9zeXNjb25fbWF0Y2gpOwpAQCAtNTAwLDI4ICszMDYsNiBAQAogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLAogCQkJYXBfYXV4ZGF0YV9sb29rdXAsIE5VTEwpOwogCi0JYXBfc2NfaWQgPSByZWFkbChhcF9zeXNjb25fYmFzZSk7Ci0KLQlzb2NfZGV2X2F0dHIgPSBremFsbG9jKHNpemVvZigqc29jX2Rldl9hdHRyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzb2NfZGV2X2F0dHIpCi0JCXJldHVybjsKLQotCXNvY19kZXZfYXR0ci0+c29jX2lkID0gIlhWQyI7Ci0Jc29jX2Rldl9hdHRyLT5tYWNoaW5lID0gIkludGVncmF0b3IvQVAiOwotCXNvY19kZXZfYXR0ci0+ZmFtaWx5ID0gIkludGVncmF0b3IiOwotCXNvY19kZXZfYXR0ci0+cmV2aXNpb24gPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVjIiwKLQkJCQkJICAgJ0EnICsgKGFwX3NjX2lkICYgMHgwZikpOwotCi0Jc29jX2RldiA9IHNvY19kZXZpY2VfcmVnaXN0ZXIoc29jX2Rldl9hdHRyKTsKLQlpZiAoSVNfRVJSKHNvY19kZXYpKSB7Ci0JCWtmcmVlKHNvY19kZXZfYXR0ci0+cmV2aXNpb24pOwotCQlrZnJlZShzb2NfZGV2X2F0dHIpOwotCQlyZXR1cm47Ci0JfQotCi0JcGFyZW50ID0gc29jX2RldmljZV90b19kZXZpY2Uoc29jX2Rldik7Ci0JaW50ZWdyYXRvcl9pbml0X3N5c2ZzKHBhcmVudCwgYXBfc2NfaWQpOwotCiAJc2NfZGVjID0gcmVhZGwoYXBfc3lzY29uX2Jhc2UgKyBJTlRFR1JBVE9SX1NDX0RFQ19PRkZTRVQpOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJc3RydWN0IGxtX2RldmljZSAqbG1kZXY7CkBAIC01NTMsOCArMzM3LDYgQEAKIAkubWFwX2lvCQk9IGFwX21hcF9pbywKIAkuaW5pdF9lYXJseQk9IGFwX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gYXBfaW5pdF9pcnFfb2YsCi0JLmluaXRfdGltZQk9IGFwX29mX3RpbWVyX2luaXQsCiAJLmluaXRfbWFjaGluZQk9IGFwX2luaXRfb2YsCi0JLnJlc3RhcnQJPSBpbnRlZ3JhdG9yX3Jlc3RhcnQsCiAJLmR0X2NvbXBhdCAgICAgID0gYXBfZHRfYm9hcmRfY29tcGF0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCmluZGV4IGNjYTAyZWIuLmI1ZmI3MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c19zb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZF9jbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0yNzQsMTAgKzI3Myw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW50Y3BfaW5pdF9vZih2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3Bjb247Ci0Jc3RydWN0IGRldmljZSAqcGFyZW50OwotCXN0cnVjdCBzb2NfZGV2aWNlICpzb2NfZGV2OwotCXN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSAqc29jX2Rldl9hdHRyOwotCXUzMiBpbnRjcF9zY19pZDsKIAogCWNwY29uID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIGludGNwX3N5c2Nvbl9tYXRjaCk7CiAJaWYgKCFjcGNvbikKQEAgLTI4OSwyOCArMjg0LDYgQEAKIAogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLAogCQkJICAgICBpbnRjcF9hdXhkYXRhX2xvb2t1cCwgTlVMTCk7Ci0KLQlpbnRjcF9zY19pZCA9IHJlYWRsKGludGNwX2Nvbl9iYXNlKTsKLQotCXNvY19kZXZfYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCpzb2NfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNvY19kZXZfYXR0cikKLQkJcmV0dXJuOwotCi0Jc29jX2Rldl9hdHRyLT5zb2NfaWQgPSAiWENWIjsKLQlzb2NfZGV2X2F0dHItPm1hY2hpbmUgPSAiSW50ZWdyYXRvci9DUCI7Ci0Jc29jX2Rldl9hdHRyLT5mYW1pbHkgPSAiSW50ZWdyYXRvciI7Ci0Jc29jX2Rldl9hdHRyLT5yZXZpc2lvbiA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJWMiLAotCQkJCQkgICAnQScgKyAoaW50Y3Bfc2NfaWQgJiAweDBmKSk7Ci0KLQlzb2NfZGV2ID0gc29jX2RldmljZV9yZWdpc3Rlcihzb2NfZGV2X2F0dHIpOwotCWlmIChJU19FUlIoc29jX2RldikpIHsKLQkJa2ZyZWUoc29jX2Rldl9hdHRyLT5yZXZpc2lvbik7Ci0JCWtmcmVlKHNvY19kZXZfYXR0cik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwYXJlbnQgPSBzb2NfZGV2aWNlX3RvX2RldmljZShzb2NfZGV2KTsKLQlpbnRlZ3JhdG9yX2luaXRfc3lzZnMocGFyZW50LCBpbnRjcF9zY19pZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogaW50Y3BfZHRfYm9hcmRfY29tcGF0W10gPSB7CkBAIC0zMjQsNiArMjk3LDUgQEAKIAkuaW5pdF9lYXJseQk9IGludGNwX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gaW50Y3BfaW5pdF9pcnFfb2YsCiAJLmluaXRfbWFjaGluZQk9IGludGNwX2luaXRfb2YsCi0JLnJlc3RhcnQJPSBpbnRlZ3JhdG9yX3Jlc3RhcnQsCiAJLmR0X2NvbXBhdCAgICAgID0gaW50Y3BfZHRfYm9hcmRfY29tcGF0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbGVkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWRjYjU3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9sZWRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSAqIERyaXZlciBmb3IgdGhlIDQgdXNlciBMRURzIGZvdW5kIG9uIHRoZSBJbnRlZ3JhdG9yIEFQL0NQIGJhc2Vib2FyZAotICogQmFzZWQgb24gVmVyc2F0aWxlIGFuZCBSZWFsVmlldyBtYWNoaW5lIExFRCBjb2RlCi0gKgotICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCi0gKiBBdXRob3I6IEJyeWFuIFd1IDxicnlhbi53dUBjYW5vbmljYWwuY29tPgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLQotI2luY2x1ZGUgImhhcmR3YXJlLmgiCi0jaW5jbHVkZSAiY20uaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX05FV19MRURTKSAmJiBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTKQotCi0jZGVmaW5lIEFMUEhBX1JFRyBfX2lvX2FkZHJlc3MoSU5URUdSQVRPUl9EQkdfQkFTRSkKLSNkZWZpbmUgTEVEUkVHCShfX2lvX2FkZHJlc3MoSU5URUdSQVRPUl9EQkdfQkFTRSkgKyBJTlRFR1JBVE9SX0RCR19MRURTX09GRlNFVCkKLQotc3RydWN0IGludGVncmF0b3JfbGVkIHsKLQlzdHJ1Y3QgbGVkX2NsYXNzZGV2CWNkZXY7Ci0JdTgJCQltYXNrOwotfTsKLQotLyoKLSAqIFRoZSB0cmlnZ2VycyBsaW5lcyB1cCBiZWxvdyB3aWxsIG9ubHkgYmUgdXNlZCBpZiB0aGUKLSAqIExFRCB0cmlnZ2VycyBhcmUgY29tcGlsZWQgaW4uCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3QgY2hhciAqdHJpZ2dlcjsKLX0gaW50ZWdyYXRvcl9sZWRzW10gPSB7Ci0JeyAiaW50ZWdyYXRvcjpncmVlbjAiLCAiaGVhcnRiZWF0IiwgfSwKLQl7ICJpbnRlZ3JhdG9yOnllbGxvdyIsIH0sCi0JeyAiaW50ZWdyYXRvcjpyZWQiLCB9LAotCXsgImludGVncmF0b3I6Z3JlZW4xIiwgfSwKLQl7ICJpbnRlZ3JhdG9yOmNvcmVfbW9kdWxlIiwgImNwdTAiLCB9LAotfTsKLQotc3RhdGljIHZvaWQgaW50ZWdyYXRvcl9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYsCi0JCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGIpCi17Ci0Jc3RydWN0IGludGVncmF0b3JfbGVkICpsZWQgPSBjb250YWluZXJfb2YoY2RldiwKLQkJCQkJCSBzdHJ1Y3QgaW50ZWdyYXRvcl9sZWQsIGNkZXYpOwotCXUzMiByZWcgPSBfX3Jhd19yZWFkbChMRURSRUcpOwotCi0JaWYgKGIgIT0gTEVEX09GRikKLQkJcmVnIHw9IGxlZC0+bWFzazsKLQllbHNlCi0JCXJlZyAmPSB+bGVkLT5tYXNrOwotCi0Jd2hpbGUgKF9fcmF3X3JlYWRsKEFMUEhBX1JFRykgJiAxKQotCQljcHVfcmVsYXgoKTsKLQotCV9fcmF3X3dyaXRlbChyZWcsIExFRFJFRyk7Ci19Ci0KLXN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGludGVncmF0b3JfbGVkX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KQotewotCXN0cnVjdCBpbnRlZ3JhdG9yX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGNkZXYsCi0JCQkJCQkgc3RydWN0IGludGVncmF0b3JfbGVkLCBjZGV2KTsKLQl1MzIgcmVnID0gX19yYXdfcmVhZGwoTEVEUkVHKTsKLQotCXJldHVybiAocmVnICYgbGVkLT5tYXNrKSA/IExFRF9GVUxMIDogTEVEX09GRjsKLX0KLQotc3RhdGljIHZvaWQgY21fbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2LAotCQkJICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBiKQotewotCWlmIChiICE9IExFRF9PRkYpCi0JCWNtX2NvbnRyb2woQ01fQ1RSTF9MRUQsIENNX0NUUkxfTEVEKTsKLQllbHNlCi0JCWNtX2NvbnRyb2woQ01fQ1RSTF9MRUQsIDApOwotfQotCi1zdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBjbV9sZWRfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpCi17Ci0JdTMyIHJlZyA9IGNtX2dldCgpOwotCi0JcmV0dXJuIChyZWcgJiBDTV9DVFJMX0xFRCkgPyBMRURfRlVMTCA6IExFRF9PRkY7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGludGVncmF0b3JfbGVkc19pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbnRlZ3JhdG9yX2xlZHMpOyBpKyspIHsKLQkJc3RydWN0IGludGVncmF0b3JfbGVkICpsZWQ7Ci0KLQkJbGVkID0ga3phbGxvYyhzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpOwotCQlpZiAoIWxlZCkKLQkJCWJyZWFrOwotCi0KLQkJbGVkLT5jZGV2Lm5hbWUgPSBpbnRlZ3JhdG9yX2xlZHNbaV0ubmFtZTsKLQotCQlpZiAoaSA9PSA0KSB7IC8qIFNldHRpbmcgZm9yIExFRCBpbiBjb3JlIG1vZHVsZSAqLwotCQkJbGVkLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gY21fbGVkX3NldDsKLQkJCWxlZC0+Y2Rldi5icmlnaHRuZXNzX2dldCA9IGNtX2xlZF9nZXQ7Ci0JCX0gZWxzZSB7Ci0JCQlsZWQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBpbnRlZ3JhdG9yX2xlZF9zZXQ7Ci0JCQlsZWQtPmNkZXYuYnJpZ2h0bmVzc19nZXQgPSBpbnRlZ3JhdG9yX2xlZF9nZXQ7Ci0JCX0KLQotCQlsZWQtPmNkZXYuZGVmYXVsdF90cmlnZ2VyID0gaW50ZWdyYXRvcl9sZWRzW2ldLnRyaWdnZXI7Ci0JCWxlZC0+bWFzayA9IEJJVChpKTsKLQotCQlpZiAobGVkX2NsYXNzZGV2X3JlZ2lzdGVyKE5VTEwsICZsZWQtPmNkZXYpIDwgMCkgewotCQkJa2ZyZWUobGVkKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTaW5jZSB3ZSBtYXkgaGF2ZSB0cmlnZ2VycyBvbiBhbnkgc3Vic3lzdGVtLCBkZWZlciByZWdpc3RyYXRpb24KLSAqIHVudGlsIGFmdGVyIHN1YnN5c3RlbV9pbml0LgotICovCi1mc19pbml0Y2FsbChpbnRlZ3JhdG9yX2xlZHNfaW5pdCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9tc2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9tc2kuYwppbmRleCBlNzczMGNmLi45Zjg5ZTc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvbXNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L21zaS5jCkBAIC0xMjYsMTAgKzEyNiwxMCBAQAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb3AxM3h4X21zaV9jaGlwID0gewogCS5uYW1lID0gIlBDSS1NU0kiLAogCS5pcnFfYWNrID0gaW9wMTN4eF9tc2lfbm9wLAotCS5pcnFfZW5hYmxlID0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9kaXNhYmxlID0gbWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAorCS5pcnFfZW5hYmxlID0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV9tYXNrID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKIH07CiAKIGludCBhcmNoX3NldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKQEAgLTE1Myw3ICsxNTMsNyBAQAogCWlkID0gaW9wMTN4eF9jcHVfaWQoKTsKIAltc2cuZGF0YSA9IChpZCA8PCBJT1AxM1hYX01VX01JTVJfQ09SRV9TRUxFQ1QpIHwgKGlycSAmIDB4N2YpOwogCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJmlvcDEzeHhfbXNpX2NoaXAsIGhhbmRsZV9zaW1wbGVfaXJxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwppbmRleCBmYzRiN2IyLi44NTM3ZDRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOwogfQogCi1zdGF0aWMgdm9pZCBpeHA0eHhfaW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCitzdGF0aWMgdm9pZCBpeHA0eHhfaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJaWYgKCFpc19wY2lfbWVtb3J5KChfX2ZvcmNlIHUzMilhZGRyKSkKIAkJX19pb3VubWFwKGFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCA3ZDExOTc5Li42YTcyMjg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaW8uaApAQCAtNTgsNiArNTgsMTAgQEAKICNkZWZpbmUgd3JpdGV3KHYsIHApCQkJX19pbmRpcmVjdF93cml0ZXcodiwgcCkKICNkZWZpbmUgd3JpdGVsKHYsIHApCQkJX19pbmRpcmVjdF93cml0ZWwodiwgcCkKIAorI2RlZmluZSB3cml0ZWJfcmVsYXhlZCh2LCBwKQkJX19pbmRpcmVjdF93cml0ZWIodiwgcCkKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQodiwgcCkJCV9faW5kaXJlY3Rfd3JpdGV3KHYsIHApCisjZGVmaW5lIHdyaXRlbF9yZWxheGVkKHYsIHApCQlfX2luZGlyZWN0X3dyaXRlbCh2LCBwKQorCiAjZGVmaW5lIHdyaXRlc2IocCwgdiwgbCkJCV9faW5kaXJlY3Rfd3JpdGVzYihwLCB2LCBsKQogI2RlZmluZSB3cml0ZXN3KHAsIHYsIGwpCQlfX2luZGlyZWN0X3dyaXRlc3cocCwgdiwgbCkKICNkZWZpbmUgd3JpdGVzbChwLCB2LCBsKQkJX19pbmRpcmVjdF93cml0ZXNsKHAsIHYsIGwpCkBAIC02Niw2ICs3MCwxMCBAQAogI2RlZmluZSByZWFkdyhwKQkJCV9faW5kaXJlY3RfcmVhZHcocCkKICNkZWZpbmUgcmVhZGwocCkJCQlfX2luZGlyZWN0X3JlYWRsKHApCiAKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChwKQkJX19pbmRpcmVjdF9yZWFkYihwKQorI2RlZmluZSByZWFkd19yZWxheGVkKHApCQlfX2luZGlyZWN0X3JlYWR3KHApCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQocCkJCV9faW5kaXJlY3RfcmVhZGwocCkKKwogI2RlZmluZSByZWFkc2IocCwgdiwgbCkJCQlfX2luZGlyZWN0X3JlYWRzYihwLCB2LCBsKQogI2RlZmluZSByZWFkc3cocCwgdiwgbCkJCQlfX2luZGlyZWN0X3JlYWRzdyhwLCB2LCBsKQogI2RlZmluZSByZWFkc2wocCwgdiwgbCkJCQlfX2luZGlyZWN0X3JlYWRzbChwLCB2LCBsKQpAQCAtOTksNyArMTA3LDcgQEAKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwogCiAJaWYgKCFpc19wY2lfbWVtb3J5KGFkZHIpKSB7Ci0JCV9fcmF3X3dyaXRldyh2YWx1ZSwgYWRkcik7CisJCV9fcmF3X3dyaXRldyh2YWx1ZSwgcCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2NCw3ICsxNzIsNyBAQAogCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CiAKIAlpZiAoIWlzX3BjaV9tZW1vcnkoYWRkcikpCi0JCXJldHVybiBfX3Jhd19yZWFkdyhhZGRyKTsKKwkJcmV0dXJuIF9fcmF3X3JlYWR3KHApOwogCiAJbiA9IGFkZHIgJSA0OwogCWJ5dGVfZW5hYmxlcyA9ICgweGYgJiB+KEJJVChuKSB8IEJJVChuKzEpKSkgPDwgSVhQNFhYX1BDSV9OUF9DQkVfQkVTTDsKQEAgLTIyNiw2ICsyMzQsNyBAQAogICogSS9PIGZ1bmN0aW9ucy4KICAqLwogCisjZGVmaW5lIG91dGIgb3V0Ygogc3RhdGljIGlubGluZSB2b2lkIG91dGIodTggdmFsdWUsIHUzMiBhZGRyKQogewogCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CkBAIC0yMzUsMTIgKzI0NCwxNCBAQAogCWl4cDR4eF9wY2lfd3JpdGUoYWRkciwgYnl0ZV9lbmFibGVzIHwgTlBfQ01EX0lPV1JJVEUsIGRhdGEpOwogfQogCisjZGVmaW5lIG91dHNiIG91dHNiCiBzdGF0aWMgaW5saW5lIHZvaWQgb3V0c2IodTMyIGlvX2FkZHIsIGNvbnN0IHU4ICp2YWRkciwgdTMyIGNvdW50KQogewogCXdoaWxlIChjb3VudC0tKQogCQlvdXRiKCp2YWRkcisrLCBpb19hZGRyKTsKIH0KIAorI2RlZmluZSBvdXR3IG91dHcKIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXR3KHUxNiB2YWx1ZSwgdTMyIGFkZHIpCiB7CiAJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKQEAgLTI1MCwyMyArMjYxLDI3IEBACiAJaXhwNHh4X3BjaV93cml0ZShhZGRyLCBieXRlX2VuYWJsZXMgfCBOUF9DTURfSU9XUklURSwgZGF0YSk7CiB9CiAKKyNkZWZpbmUgb3V0c3cgb3V0c3cKIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzdyh1MzIgaW9fYWRkciwgY29uc3QgdTE2ICp2YWRkciwgdTMyIGNvdW50KQogewogCXdoaWxlIChjb3VudC0tKQogCQlvdXR3KGNwdV90b19sZTE2KCp2YWRkcisrKSwgaW9fYWRkcik7CiB9CiAKKyNkZWZpbmUgb3V0bCBvdXRsCiBzdGF0aWMgaW5saW5lIHZvaWQgb3V0bCh1MzIgdmFsdWUsIHUzMiBhZGRyKQogewogCWl4cDR4eF9wY2lfd3JpdGUoYWRkciwgTlBfQ01EX0lPV1JJVEUsIHZhbHVlKTsKIH0KIAorI2RlZmluZSBvdXRzbCBvdXRzbAogc3RhdGljIGlubGluZSB2b2lkIG91dHNsKHUzMiBpb19hZGRyLCBjb25zdCB1MzIgKnZhZGRyLCB1MzIgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCiAJCW91dGwoY3B1X3RvX2xlMzIoKnZhZGRyKyspLCBpb19hZGRyKTsKIH0KIAorI2RlZmluZSBpbmIgaW5iCiBzdGF0aWMgaW5saW5lIHU4IGluYih1MzIgYWRkcikKIHsKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwpAQCAtMjc4LDEyICsyOTMsMTQgQEAKIAlyZXR1cm4gZGF0YSA+PiAoOCpuKTsKIH0KIAorI2RlZmluZSBpbnNiIGluc2IKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnNiKHUzMiBpb19hZGRyLCB1OCAqdmFkZHIsIHUzMiBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKIAkJKnZhZGRyKysgPSBpbmIoaW9fYWRkcik7CiB9CiAKKyNkZWZpbmUgaW53IGludwogc3RhdGljIGlubGluZSB1MTYgaW53KHUzMiBhZGRyKQogewogCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CkBAIC0yOTUsMTIgKzMxMiwxNCBAQAogCXJldHVybiBkYXRhPj4oOCpuKTsKIH0KIAorI2RlZmluZSBpbnN3IGluc3cKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnN3KHUzMiBpb19hZGRyLCB1MTYgKnZhZGRyLCB1MzIgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCiAJCSp2YWRkcisrID0gbGUxNl90b19jcHUoaW53KGlvX2FkZHIpKTsKIH0KIAorI2RlZmluZSBpbmwgaW5sCiBzdGF0aWMgaW5saW5lIHUzMiBpbmwodTMyIGFkZHIpCiB7CiAJdTMyIGRhdGE7CkBAIC0zMTAsNiArMzI5LDcgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAorI2RlZmluZSBpbnNsIGluc2wKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnNsKHUzMiBpb19hZGRyLCB1MzIgKnZhZGRyLCB1MzIgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtleXN0b25lL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWtleXN0b25lL0tjb25maWcKaW5kZXggOThhMTU2YS4uZWE5NTVmNmRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtleXN0b25lL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1rZXlzdG9uZS9LY29uZmlnCkBAIC05LDYgKzksOCBAQAogCXNlbGVjdCBDT01NT05fQ0xLX0tFWVNUT05FCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQklHX0VORElBTgogCXNlbGVjdCBaT05FX0RNQSBpZiBBUk1fTFBBRQorCXNlbGVjdCBNSUdIVF9IQVZFX1BDSQorCXNlbGVjdCBQQ0lfRE9NQUlOUyBpZiBQQ0kKIAloZWxwCiAJICBTdXBwb3J0IGZvciBib2FyZHMgYmFzZWQgb24gdGhlIFRleGFzIEluc3RydW1lbnRzIEtleXN0b25lIGZhbWlseSBvZgogCSAgU29Dcy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbWVkaWF0ZWsvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbWVkaWF0ZWsvS2NvbmZpZwppbmRleCAyYzA0M2EyLi5mNzNmNTg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1lZGlhdGVrL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1tZWRpYXRlay9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIEFSQ0hfTUVESUFURUsKLQlib29sICJNZWRpYXRlayBNVDY1ODkgU29DIiBpZiBBUkNIX01VTFRJX1Y3CisJYm9vbCAiTWVkaWF0ZWsgTVQ2NXh4ICYgTVQ4MXh4IFNvQyIgaWYgQVJDSF9NVUxUSV9WNwogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IE1US19USU1FUgogCWhlbHAKLQkgIFN1cHBvcnQgZm9yIE1lZGlhdGVrIENvcnRleC1BNyBRdWFkLUNvcmUtU29DIE1UNjU4OS4KKwkgIFN1cHBvcnQgZm9yIE1lZGlhdGVrIE1UNjV4eCAmIE1UODF4eCBTb0NzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1lZGlhdGVrL21lZGlhdGVrLmMgYi9hcmNoL2FybS9tYWNoLW1lZGlhdGVrL21lZGlhdGVrLmMKaW5kZXggZjJhY2YwNy4uYTk1NDkwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tZWRpYXRlay9tZWRpYXRlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbWVkaWF0ZWsvbWVkaWF0ZWsuYwpAQCAtMTksNiArMTksOSBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1lZGlhdGVrX2JvYXJkX2R0X2NvbXBhdFtdID0gewogCSJtZWRpYXRlayxtdDY1ODkiLAorCSJtZWRpYXRlayxtdDY1OTIiLAorCSJtZWRpYXRlayxtdDgxMjciLAorCSJtZWRpYXRlayxtdDgxMzUiLAogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1lc29uL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW1lc29uL0tjb25maWcKaW5kZXggMmMxMTU0ZS4uMTgzMDFkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tZXNvbi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbWVzb24vS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAlib29sICJBbWxvZ2ljIE1lc29uIFNvQ3MiIGlmIEFSQ0hfTVVMVElfVjcKIAlzZWxlY3QgR0VORVJJQ19JUlFfQ0hJUAogCXNlbGVjdCBBUk1fR0lDCisJc2VsZWN0IENBQ0hFX0wyWDAKIAogaWYgQVJDSF9NRVNPTgogCkBAIC0xMCw0ICsxMSw5IEBACiAJZGVmYXVsdCBBUkNIX01FU09OCiAJc2VsZWN0IE1FU09ONl9USU1FUgogCitjb25maWcgTUFDSF9NRVNPTjgKKwlib29sICJBbWxvZ2ljIE1lc29uOCBTb0NzIHN1cHBvcnQiCisJZGVmYXVsdCBBUkNIX01FU09OCisJc2VsZWN0IE1FU09ONl9USU1FUgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tZXNvbi9tZXNvbi5jIGIvYXJjaC9hcm0vbWFjaC1tZXNvbi9tZXNvbi5jCmluZGV4IDVlZTA2NGYuLjVkNmFmZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbWVzb24vbWVzb24uYworKysgYi9hcmNoL2FybS9tYWNoLW1lc29uL21lc29uLmMKQEAgLTE2LDEyICsxNiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG02X2NvbW1vbl9ib2FyZF9jb21wYXRbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWVzb25fY29tbW9uX2JvYXJkX2NvbXBhdFtdID0gewogCSJhbWxvZ2ljLG1lc29uNiIsCisJImFtbG9naWMsbWVzb244IiwKIAlOVUxMLAogfTsKIAotRFRfTUFDSElORV9TVEFSVChBTUw4NzI2X01YLCAiQW1sb2dpYyBNZXNvbjYgcGxhdGZvcm0iKQotCS5kdF9jb21wYXQJPSBtNl9jb21tb25fYm9hcmRfY29tcGF0LAorRFRfTUFDSElORV9TVEFSVChNRVNPTiwgIkFtbG9naWMgTWVzb24gcGxhdGZvcm0iKQorCS5kdF9jb21wYXQJPSBtZXNvbl9jb21tb25fYm9hcmRfY29tcGF0LAorCS5sMmNfYXV4X3ZhbAk9IDAsCisJLmwyY19hdXhfbWFzawk9IH4wLAogTUFDSElORV9FTkQKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXZlYnUvTWFrZWZpbGUKaW5kZXggZTI0MTM2Yi4uYjRmMDE0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfTVZFQlVfQU5ZKQkgKz0gc3lzdGVtLWNvbnRyb2xsZXIubyBtdmVidS1zb2MtaWQubwogCiBpZmVxICgkKENPTkZJR19NQUNIX01WRUJVX1Y3KSx5KQotb2JqLXkJCQkJICs9IGNwdS1yZXNldC5vIGJvYXJkLXY3Lm8gY29oZXJlbmN5Lm8gY29oZXJlbmN5X2xsLm8gcG1zdS5vIHBtc3VfbGwubworb2JqLXkJCQkJICs9IGNwdS1yZXNldC5vIGJvYXJkLXY3Lm8gY29oZXJlbmN5Lm8gY29oZXJlbmN5X2xsLm8gcG1zdS5vIHBtc3VfbGwubyBwbS5vIHBtLWJvYXJkLm8KIG9iai0kKENPTkZJR19TTVApCQkgKz0gcGxhdHNtcC5vIGhlYWRzbXAubyBwbGF0c21wLWE5Lm8gaGVhZHNtcC1hOS5vCiBlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2FybWFkYS0zNzAteHAuaCBiL2FyY2gvYXJtL21hY2gtbXZlYnUvYXJtYWRhLTM3MC14cC5oCmluZGV4IDg0Y2Q5MGQuLmM1NWJiZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvYXJtYWRhLTM3MC14cC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvYXJtYWRhLTM3MC14cC5oCkBAIC0xNiwxNCArMTYsOCBAQAogI2RlZmluZSBfX01BQ0hfQVJNQURBXzM3MF9YUF9ICiAKICNpZmRlZiBDT05GSUdfU01QCi0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotCi0jZGVmaW5lIEFSTUFEQV9YUF9NQVhfQ1BVUyA0Ci0KIHZvaWQgYXJtYWRhX3hwX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBhcm1hZGFfeHBfc21wX29wczsKICNlbmRpZgogCi1pbnQgYXJtYWRhXzM3MF94cF9wbXN1X2lkbGVfZW50ZXIodW5zaWduZWQgbG9uZyBkZWVwaWRsZSk7Ci0KICNlbmRpZiAvKiBfX01BQ0hfQVJNQURBXzM3MF9YUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMKaW5kZXggZDBkMzlmMS4uODlhMTM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYwpAQCAtMTYsMTAgKzE2LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTU3LDYgKzU5LDU0IEBACiB9CiAKIC8qCisgKiBXaGVuIHJldHVybmluZyBmcm9tIHN1c3BlbmQsIHRoZSBwbGF0Zm9ybSBnb2VzIHRocm91Z2ggdGhlCisgKiBib290bG9hZGVyLCB3aGljaCBleGVjdXRlcyBpdHMgRERSMyB0cmFpbmluZyBjb2RlLiBUaGlzIGNvZGUgaGFzCisgKiB0aGUgdW5mb3J0dW5hdGUgaWRlYSBvZiB1c2luZyB0aGUgZmlyc3QgMTAgS0Igb2YgZWFjaCBEUkFNIGJhbmsgdG8KKyAqIGV4ZXJjaXNlIHRoZSBSQU0gYW5kIGNhbGN1bGF0ZSB0aGUgb3B0aW1hbCB0aW1pbmdzLiBUaGVyZWZvcmUsIHRoaXMKKyAqIGFyZWEgb2YgUkFNIGlzIG92ZXJ3cml0dGVuLCBhbmQgc2hvdWxkbid0IGJlIHVzZWQgYnkgdGhlIGtlcm5lbCBpZgorICogc3VzcGVuZC9yZXN1bWUgaXMgc3VwcG9ydGVkLgorICovCisKKyNpZmRlZiBDT05GSUdfU1VTUEVORAorI2RlZmluZSBNVkVCVV9ERFJfVFJBSU5JTkdfQVJFQV9TWiAoMTAgKiBTWl8xSykKK3N0YXRpYyBpbnQgX19pbml0IG12ZWJ1X3NjYW5fbWVtKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBjaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKKwljb25zdCBfX2JlMzIgKnJlZywgKmVuZHA7CisJaW50IGw7CisKKwlpZiAodHlwZSA9PSBOVUxMIHx8IHN0cmNtcCh0eXBlLCAibWVtb3J5IikpCisJCXJldHVybiAwOworCisJcmVnID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdXNhYmxlLW1lbW9yeSIsICZsKTsKKwlpZiAocmVnID09IE5VTEwpCisJCXJlZyA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgInJlZyIsICZsKTsKKwlpZiAocmVnID09IE5VTEwpCisJCXJldHVybiAwOworCisJZW5kcCA9IHJlZyArIChsIC8gc2l6ZW9mKF9fYmUzMikpOworCXdoaWxlICgoZW5kcCAtIHJlZykgPj0gKGR0X3Jvb3RfYWRkcl9jZWxscyArIGR0X3Jvb3Rfc2l6ZV9jZWxscykpIHsKKwkJdTY0IGJhc2UsIHNpemU7CisKKwkJYmFzZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9hZGRyX2NlbGxzLCAmcmVnKTsKKwkJc2l6ZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9zaXplX2NlbGxzLCAmcmVnKTsKKworCQltZW1ibG9ja19yZXNlcnZlKGJhc2UsIE1WRUJVX0REUl9UUkFJTklOR19BUkVBX1NaKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG12ZWJ1X21lbWJsb2NrX3Jlc2VydmUodm9pZCkKK3sKKwlvZl9zY2FuX2ZsYXRfZHQobXZlYnVfc2Nhbl9tZW0sIE5VTEwpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBtdmVidV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpIHt9CisjZW5kaWYKKworLyoKICAqIEVhcmx5IHZlcnNpb25zIG9mIEFybWFkYSAzNzUgU29DIGhhdmUgYSBidWcgd2hlcmUgdGhlIEJvb3RST00KICAqIGxlYXZlcyBhbiBleHRlcm5hbCBkYXRhIGFib3J0IHBlbmRpbmcuIFRoZSBrZXJuZWwgaXMgaGl0IGJ5IHRoaXMKICAqIGRhdGEgYWJvcnQgYXMgc29vbiBhcyBpdCBlbnRlcnMgdXNlcnNwYWNlLCBiZWNhdXNlIGl0IHVubWFza3MgdGhlCkBAIC0xMjQsNzYgKzE3NCwxMiBAQAogCXJldHVybjsKIH0KIAotI2RlZmluZSBBMzc1X1oxX1RIRVJNQUxfRklYVVBfT0ZGU0VUIDB4YwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdGhlcm1hbF9xdWlyayh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdTMyIGRldiwgcmV2OwotCWludCByZXM7Ci0KLQkvKgotCSAqIFRoZSBlYXJseSBTb0MgWjEgcmV2aXNpb24gbmVlZHMgYSBxdWlyayB0byBiZSBhcHBsaWVkIGluIG9yZGVyCi0JICogZm9yIHRoZSB0aGVybWFsIGNvbnRyb2xsZXIgdG8gd29yayBwcm9wZXJseS4gVGhpcyBxdWlyayBicmVha3MKLQkgKiB0aGUgdGhlcm1hbCBzdXBwb3J0IGlmIGFwcGxpZWQgb24gYSBTb0MgdGhhdCBkb2Vzbid0IG5lZWQgaXQsCi0JICogc28gd2UgZW5mb3JjZSB0aGUgU29DIHJldmlzaW9uIHRvIGJlIGtub3duLgotCSAqLwotCXJlcyA9IG12ZWJ1X2dldF9zb2NfaWQoJmRldiwgJnJldik7Ci0JaWYgKHJlcyA8IDAgfHwgKHJlcyA9PSAwICYmIHJldiA+IEFSTUFEQV8zNzVfWjFfUkVWKSkKLQkJcmV0dXJuOwotCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAibWFydmVsbCxhcm1hZGEzNzUtdGhlcm1hbCIpIHsKLQkJc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCQlfX2JlMzIgbmV3dmFsLCAqbmV3cHJvcCwgKm9sZHByb3A7Ci0JCWludCBsZW47Ci0KLQkJLyoKLQkJICogVGhlIHJlZ2lzdGVyIG9mZnNldCBpcyBhdCBhIHdyb25nIGxvY2F0aW9uLiBUaGlzIHF1aXJrCi0JCSAqIGNyZWF0ZXMgYSBuZXcgcmVnIHByb3BlcnR5IGFzIGEgY2xvbmUgb2YgdGhlIHByZXZpb3VzCi0JCSAqIG9uZSBhbmQgY29ycmVjdHMgdGhlIG9mZnNldC4KLQkJICovCi0JCW9sZHByb3AgPSAoX19iZTMyICopb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJmxlbik7Ci0JCWlmICghb2xkcHJvcCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIENyZWF0ZSBhIGR1cGxpY2F0ZSBvZiB0aGUgJ3JlZycgcHJvcGVydHkgKi8KLQkJcHJvcCA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9wKSwgR0ZQX0tFUk5FTCk7Ci0JCXByb3AtPmxlbmd0aCA9IGxlbjsKLQkJcHJvcC0+bmFtZSA9IGtzdHJkdXAoInJlZyIsIEdGUF9LRVJORUwpOwotCQlwcm9wLT52YWx1ZSA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQkJbWVtY3B5KHByb3AtPnZhbHVlLCBvbGRwcm9wLCBsZW4pOwotCi0JCS8qIEZpeHVwIHRoZSByZWdpc3RlciBvZmZzZXQgb2YgdGhlIHNlY29uZCBlbnRyeSAqLwotCQlvbGRwcm9wICs9IDI7Ci0JCW5ld3Byb3AgPSAoX19iZTMyICopcHJvcC0+dmFsdWUgKyAyOwotCQluZXd2YWwgPSBjcHVfdG9fYmUzMihiZTMyX3RvX2NwdSgqb2xkcHJvcCkgLQotCQkJCSAgICAgQTM3NV9aMV9USEVSTUFMX0ZJWFVQX09GRlNFVCk7Ci0JCSpuZXdwcm9wID0gbmV3dmFsOwotCQlvZl91cGRhdGVfcHJvcGVydHkobnAsIHByb3ApOwotCi0JCS8qCi0JCSAqIFRoZSB0aGVybWFsIGNvbnRyb2xsZXIgbmVlZHMgc29tZSBxdWlyayB0b28sIHNvIGxldCdzIGNoYW5nZQotCQkgKiB0aGUgY29tcGF0aWJsZSBzdHJpbmcgdG8gcmVmbGVjdCB0aGlzIGFuZCBhbGxvdyB0aGUgZHJpdmVyCi0JCSAqIHRoZSB0YWtlIHRoZSBuZWNlc3NhcnkgYWN0aW9uLgotCQkgKi8KLQkJcHJvcCA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9wKSwgR0ZQX0tFUk5FTCk7Ci0JCXByb3AtPm5hbWUgPSBrc3RyZHVwKCJjb21wYXRpYmxlIiwgR0ZQX0tFUk5FTCk7Ci0JCXByb3AtPmxlbmd0aCA9IHNpemVvZigibWFydmVsbCxhcm1hZGEzNzUtejEtdGhlcm1hbCIpOwotCQlwcm9wLT52YWx1ZSA9IGtzdHJkdXAoIm1hcnZlbGwsYXJtYWRhMzc1LXoxLXRoZXJtYWwiLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCW9mX3VwZGF0ZV9wcm9wZXJ0eShucCwgcHJvcCk7Ci0JfQotCXJldHVybjsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IG12ZWJ1X2R0X2luaXQodm9pZCkKIHsKIAlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJtYXJ2ZWxsLGFybWFkYXhwIikpCiAJCWkyY19xdWlyaygpOwotCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIm1hcnZlbGwsYTM3NS1kYiIpKSB7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgibWFydmVsbCxhMzc1LWRiIikpCiAJCWV4dGVybmFsX2Fib3J0X3F1aXJrKCk7Ci0JCXRoZXJtYWxfcXVpcmsoKTsKLQl9CiAKIAlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwgTlVMTCwgTlVMTCk7CiB9CkBAIC0yMDYsMTAgKzE5MiwxNiBAQAogRFRfTUFDSElORV9TVEFSVChBUk1BREFfMzcwX1hQX0RULCAiTWFydmVsbCBBcm1hZGEgMzcwL1hQIChEZXZpY2UgVHJlZSkiKQogCS5sMmNfYXV4X3ZhbAk9IDAsCiAJLmwyY19hdXhfbWFzawk9IH4wLAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgZmllbGQgKC5zbXApIGlzIHN0aWxsIG5lZWRlZCB0byBlbnN1cmUgYmFja3dhcmQKKyAqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgRGV2aWNlIFRyZWVzIHRoYXQgd2VyZSBub3Qgc3BlY2lmeWluZyB0aGUKKyAqIGNwdXMgZW5hYmxlLW1ldGhvZCBwcm9wZXJ0eS4KKyAqLwogCS5zbXAJCT0gc21wX29wcyhhcm1hZGFfeHBfc21wX29wcyksCiAJLmluaXRfbWFjaGluZQk9IG12ZWJ1X2R0X2luaXQsCiAJLmluaXRfaXJxICAgICAgID0gbXZlYnVfaW5pdF9pcnEsCiAJLnJlc3RhcnQJPSBtdmVidV9yZXN0YXJ0LAorCS5yZXNlcnZlICAgICAgICA9IG12ZWJ1X21lbWJsb2NrX3Jlc2VydmUsCiAJLmR0X2NvbXBhdAk9IGFybWFkYV8zNzBfeHBfZHRfY29tcGF0LAogTUFDSElORV9FTkQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMKaW5kZXggMDQ0YjUxMS4uMzU4NWNiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jCkBAIC0xLDUgKzEsNiBAQAogLyoKLSAqIENvaGVyZW5jeSBmYWJyaWMgKEF1cm9yYSkgc3VwcG9ydCBmb3IgQXJtYWRhIDM3MCBhbmQgWFAgcGxhdGZvcm1zLgorICogQ29oZXJlbmN5IGZhYnJpYyAoQXVyb3JhKSBzdXBwb3J0IGZvciBBcm1hZGEgMzcwLCAzNzUsIDM4eCBhbmQgWFAKKyAqIHBsYXRmb3Jtcy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWFydmVsbAogICoKQEAgLTExLDcgKzEyLDcgQEAKICAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqCi0gKiBUaGUgQXJtYWRhIDM3MCBhbmQgQXJtYWRhIFhQIFNPQ3MgaGF2ZSBhIGNvaGVyZW5jeSBmYWJyaWMgd2hpY2ggaXMKKyAqIFRoZSBBcm1hZGEgMzcwLCAzNzUsIDM4eCBhbmQgWFAgU09DcyBoYXZlIGEgY29oZXJlbmN5IGZhYnJpYyB3aGljaCBpcwogICogcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIGhhcmR3YXJlIGNvaGVyZW5jeSBiZXR3ZWVuIGFsbCBDUFVzIGFuZCBiZXR3ZWVuCiAgKiBDUFVzIGFuZCBJL08gbWFzdGVycy4gVGhpcyBmaWxlIGluaXRpYWxpemVzIHRoZSBjb2hlcmVuY3kgZmFicmljIGFuZAogICogc3VwcGxpZXMgYmFzaWMgcm91dGluZXMgZm9yIGNvbmZpZ3VyaW5nIGFuZCBjb250cm9sbGluZyBoYXJkd2FyZSBjb2hlcmVuY3kKQEAgLTI4LDEyICsyOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tYnVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlICJhcm1hZGEtMzcwLXhwLmgiCiAjaW5jbHVkZSAiY29oZXJlbmN5LmgiCiAjaW5jbHVkZSAibXZlYnUtc29jLWlkLmgiCiAKQEAgLTQyLDggKzQxLDYgQEAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmNvaGVyZW5jeV9jcHVfYmFzZTsKIAogLyogQ29oZXJlbmN5IGZhYnJpYyByZWdpc3RlcnMgKi8KLSNkZWZpbmUgQ09IRVJFTkNZX0ZBQlJJQ19DRkdfT0ZGU0VUCQkgICAweDQKLQogI2RlZmluZSBJT19TWU5DX0JBUlJJRVJfQ1RMX09GRlNFVAkJICAgMHgwCiAKIGVudW0gewpAQCAtNzksMTU3ICs3Niw4IEBACiAJcmV0dXJuIGxsX2VuYWJsZV9jb2hlcmVuY3koKTsKIH0KIAotLyoKLSAqIFRoZSBiZWxvdyBjb2RlIGltcGxlbWVudHMgdGhlIEkvTyBjb2hlcmVuY3kgd29ya2Fyb3VuZCBvbiBBcm1hZGEKLSAqIDM3NS4gVGhpcyB3b3JrYXJvdW5kIGNvbnNpc3RzIGluIHVzaW5nIHRoZSB0d28gY2hhbm5lbHMgb2YgdGhlCi0gKiBmaXJzdCBYT1IgZW5naW5lIHRvIHRyaWdnZXIgYSBYT1IgdHJhbnNhY3Rpb24gdGhhdCBzZXJ2ZXMgYXMgdGhlCi0gKiBJL08gY29oZXJlbmN5IGJhcnJpZXIuCi0gKi8KLQotc3RhdGljIHZvaWQgX19pb21lbSAqeG9yX2Jhc2UsICp4b3JfaGlnaF9iYXNlOwotc3RhdGljIGRtYV9hZGRyX3QgY29oZXJlbmN5X3dhX2J1Zl9waHlzW0NPTkZJR19OUl9DUFVTXTsKLXN0YXRpYyB2b2lkICpjb2hlcmVuY3lfd2FfYnVmW0NPTkZJR19OUl9DUFVTXTsKLXN0YXRpYyBib29sIGNvaGVyZW5jeV93YV9lbmFibGVkOwotCi0jZGVmaW5lIFhPUl9DT05GSUcoY2hhbikgICAgICAgICAgICAoMHgxMCArIChjaGFuICogNCkpCi0jZGVmaW5lIFhPUl9BQ1RJVkFUSU9OKGNoYW4pICAgICAgICAoMHgyMCArIChjaGFuICogNCkpCi0jZGVmaW5lIFdJTkRPV19CQVJfRU5BQkxFKGNoYW4pICAgICAoMHgyNDAgKyAoKGNoYW4pIDw8IDIpKQotI2RlZmluZSBXSU5ET1dfQkFTRSh3KSAgICAgICAgICAgICAgKDB4MjUwICsgKCh3KSA8PCAyKSkKLSNkZWZpbmUgV0lORE9XX1NJWkUodykgICAgICAgICAgICAgICgweDI3MCArICgodykgPDwgMikpCi0jZGVmaW5lIFdJTkRPV19SRU1BUF9ISUdIKHcpICAgICAgICAoMHgyOTAgKyAoKHcpIDw8IDIpKQotI2RlZmluZSBXSU5ET1dfT1ZFUlJJREVfQ1RSTChjaGFuKSAgKDB4MkEwICsgKChjaGFuKSA8PCAyKSkKLSNkZWZpbmUgWE9SX0RFU1RfUE9JTlRFUihjaGFuKSAgICAgICgweDJCMCArIChjaGFuICogNCkpCi0jZGVmaW5lIFhPUl9CTE9DS19TSVpFKGNoYW4pICAgICAgICAoMHgyQzAgKyAoY2hhbiAqIDQpKQotI2RlZmluZSBYT1JfSU5JVF9WQUxVRV9MT1cgICAgICAgICAgIDB4MkUwCi0jZGVmaW5lIFhPUl9JTklUX1ZBTFVFX0hJR0ggICAgICAgICAgMHgyRTQKLQotc3RhdGljIGlubGluZSB2b2lkIG12ZWJ1X2h3Y2NfYXJtYWRhMzc1X3N5bmNfaW9fYmFycmllcl93YSh2b2lkKQotewotCWludCBpZHggPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkvKiBXcml0ZSAnMScgdG8gdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGJ1ZmZlciAqLwotCXdyaXRlbCgweDEsIGNvaGVyZW5jeV93YV9idWZbaWR4XSk7Ci0KLQkvKiBXYWl0IHVudGlsIHRoZSBlbmdpbmUgaXMgaWRsZSAqLwotCXdoaWxlICgocmVhZGwoeG9yX2Jhc2UgKyBYT1JfQUNUSVZBVElPTihpZHgpKSA+PiA0KSAmIDB4MykKLQkJOwotCi0JZG1iKCk7Ci0KLQkvKiBUcmlnZ2VyIGNoYW5uZWwgKi8KLQl3cml0ZWwoMHgxLCB4b3JfYmFzZSArIFhPUl9BQ1RJVkFUSU9OKGlkeCkpOwotCi0JLyogUG9sbCB0aGUgZGF0YSB1bnRpbCBpdCBpcyBjbGVhcmVkIGJ5IHRoZSBYT1IgdHJhbnNhY3Rpb24gKi8KLQl3aGlsZSAocmVhZGwoY29oZXJlbmN5X3dhX2J1ZltpZHhdKSkKLQkJOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3NV9jb2hlcmVuY3lfaW5pdF93YSh2b2lkKQotewotCWNvbnN0IHN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gKmRyYW07Ci0Jc3RydWN0IGRldmljZV9ub2RlICp4b3Jfbm9kZTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnhvcl9zdGF0dXM7Ci0Jc3RydWN0IGNsayAqeG9yX2NsazsKLQl1MzIgd2luX2VuYWJsZSA9IDA7Ci0JaW50IGk7Ci0KLQlwcl93YXJuKCJlbmFibGluZyBjb2hlcmVuY3kgd29ya2Fyb3VuZCBmb3IgQXJtYWRhIDM3NSBaMSwgb25lIFhPUiBlbmdpbmUgZGlzYWJsZWRcbiIpOwotCi0JLyoKLQkgKiBTaW5jZSB0aGUgd29ya2Fyb3VuZCB1c2VzIG9uZSBYT1IgZW5naW5lLCB3ZSBncmFiIGEKLQkgKiByZWZlcmVuY2UgdG8gaXRzIERldmljZSBUcmVlIG5vZGUgZmlyc3QuCi0JICovCi0JeG9yX25vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAibWFydmVsbCxvcmlvbi14b3IiKTsKLQlCVUdfT04oIXhvcl9ub2RlKTsKLQotCS8qCi0JICogVGhlbiB3ZSBtYXJrIGl0IGFzIGRpc2FibGVkIHNvIHRoYXQgdGhlIHJlYWwgWE9SIGRyaXZlcgotCSAqIHdpbGwgbm90IHVzZSBpdC4KLQkgKi8KLQl4b3Jfc3RhdHVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHByb3BlcnR5KSwgR0ZQX0tFUk5FTCk7Ci0JQlVHX09OKCF4b3Jfc3RhdHVzKTsKLQotCXhvcl9zdGF0dXMtPnZhbHVlID0ga3N0cmR1cCgiZGlzYWJsZWQiLCBHRlBfS0VSTkVMKTsKLQlCVUdfT04oIXhvcl9zdGF0dXMtPnZhbHVlKTsKLQotCXhvcl9zdGF0dXMtPmxlbmd0aCA9IDg7Ci0JeG9yX3N0YXR1cy0+bmFtZSA9IGtzdHJkdXAoInN0YXR1cyIsIEdGUF9LRVJORUwpOwotCUJVR19PTigheG9yX3N0YXR1cy0+bmFtZSk7Ci0KLQlvZl91cGRhdGVfcHJvcGVydHkoeG9yX25vZGUsIHhvcl9zdGF0dXMpOwotCi0JLyoKLQkgKiBBbmQgd2UgcmVtYXAgdGhlIHJlZ2lzdGVycywgZ2V0IHRoZSBjbG9jaywgYW5kIGRvIHRoZQotCSAqIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgWE9SIGVuZ2luZS4KLQkgKi8KLQl4b3JfYmFzZSA9IG9mX2lvbWFwKHhvcl9ub2RlLCAwKTsKLQl4b3JfaGlnaF9iYXNlID0gb2ZfaW9tYXAoeG9yX25vZGUsIDEpOwotCi0JeG9yX2NsayA9IG9mX2Nsa19nZXRfYnlfbmFtZSh4b3Jfbm9kZSwgTlVMTCk7Ci0JQlVHX09OKCF4b3JfY2xrKTsKLQotCWNsa19wcmVwYXJlX2VuYWJsZSh4b3JfY2xrKTsKLQotCWRyYW0gPSBtdl9tYnVzX2RyYW1faW5mbygpOwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQl3cml0ZWwoMCwgeG9yX2Jhc2UgKyBXSU5ET1dfQkFTRShpKSk7Ci0JCXdyaXRlbCgwLCB4b3JfYmFzZSArIFdJTkRPV19TSVpFKGkpKTsKLQkJaWYgKGkgPCA0KQotCQkJd3JpdGVsKDAsIHhvcl9iYXNlICsgV0lORE9XX1JFTUFQX0hJR0goaSkpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkcmFtLT5udW1fY3M7IGkrKykgewotCQljb25zdCBzdHJ1Y3QgbWJ1c19kcmFtX3dpbmRvdyAqY3MgPSBkcmFtLT5jcyArIGk7Ci0JCXdyaXRlbCgoY3MtPmJhc2UgJiAweGZmZmYwMDAwKSB8Ci0JCSAgICAgICAoY3MtPm1idXNfYXR0ciA8PCA4KSB8Ci0JCSAgICAgICBkcmFtLT5tYnVzX2RyYW1fdGFyZ2V0X2lkLCB4b3JfYmFzZSArIFdJTkRPV19CQVNFKGkpKTsKLQkJd3JpdGVsKChjcy0+c2l6ZSAtIDEpICYgMHhmZmZmMDAwMCwgeG9yX2Jhc2UgKyBXSU5ET1dfU0laRShpKSk7Ci0KLQkJd2luX2VuYWJsZSB8PSAoMSA8PCBpKTsKLQkJd2luX2VuYWJsZSB8PSAzIDw8ICgxNiArICgyICogaSkpOwotCX0KLQotCXdyaXRlbCh3aW5fZW5hYmxlLCB4b3JfYmFzZSArIFdJTkRPV19CQVJfRU5BQkxFKDApKTsKLQl3cml0ZWwod2luX2VuYWJsZSwgeG9yX2Jhc2UgKyBXSU5ET1dfQkFSX0VOQUJMRSgxKSk7Ci0Jd3JpdGVsKDAsIHhvcl9iYXNlICsgV0lORE9XX09WRVJSSURFX0NUUkwoMCkpOwotCXdyaXRlbCgwLCB4b3JfYmFzZSArIFdJTkRPV19PVkVSUklERV9DVFJMKDEpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfTlJfQ1BVUzsgaSsrKSB7Ci0JCWNvaGVyZW5jeV93YV9idWZbaV0gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JCUJVR19PTighY29oZXJlbmN5X3dhX2J1ZltpXSk7Ci0KLQkJLyoKLQkJICogV2UgY2FuJ3QgdXNlIHRoZSBETUEgbWFwcGluZyBBUEksIHNpbmNlIHdlIGRvbid0Ci0JCSAqIGhhdmUgYSB2YWxpZCAnc3RydWN0IGRldmljZScgcG9pbnRlcgotCQkgKi8KLQkJY29oZXJlbmN5X3dhX2J1Zl9waHlzW2ldID0KLQkJCXZpcnRfdG9fcGh5cyhjb2hlcmVuY3lfd2FfYnVmW2ldKTsKLQkJQlVHX09OKCFjb2hlcmVuY3lfd2FfYnVmX3BoeXNbaV0pOwotCi0JCS8qCi0JCSAqIENvbmZpZ3VyZSB0aGUgWE9SIGVuZ2luZSBmb3IgbWVtc2V0IG9wZXJhdGlvbiwgd2l0aAotCQkgKiBhIDEyOCBieXRlcyBibG9jayBzaXplCi0JCSAqLwotCQl3cml0ZWwoMHg0NDQsIHhvcl9iYXNlICsgWE9SX0NPTkZJRyhpKSk7Ci0JCXdyaXRlbCgxMjgsIHhvcl9iYXNlICsgWE9SX0JMT0NLX1NJWkUoaSkpOwotCQl3cml0ZWwoY29oZXJlbmN5X3dhX2J1Zl9waHlzW2ldLAotCQkgICAgICAgeG9yX2Jhc2UgKyBYT1JfREVTVF9QT0lOVEVSKGkpKTsKLQl9Ci0KLQl3cml0ZWwoMHgwLCB4b3JfYmFzZSArIFhPUl9JTklUX1ZBTFVFX0xPVyk7Ci0Jd3JpdGVsKDB4MCwgeG9yX2Jhc2UgKyBYT1JfSU5JVF9WQUxVRV9ISUdIKTsKLQotCWNvaGVyZW5jeV93YV9lbmFibGVkID0gdHJ1ZTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIG12ZWJ1X2h3Y2Nfc3luY19pb19iYXJyaWVyKHZvaWQpCiB7Ci0JaWYgKGNvaGVyZW5jeV93YV9lbmFibGVkKSB7Ci0JCW12ZWJ1X2h3Y2NfYXJtYWRhMzc1X3N5bmNfaW9fYmFycmllcl93YSgpOwotCQlyZXR1cm47Ci0JfQotCiAJd3JpdGVsKDB4MSwgY29oZXJlbmN5X2NwdV9iYXNlICsgSU9fU1lOQ19CQVJSSUVSX0NUTF9PRkZTRVQpOwogCXdoaWxlIChyZWFkbChjb2hlcmVuY3lfY3B1X2Jhc2UgKyBJT19TWU5DX0JBUlJJRVJfQ1RMX09GRlNFVCkgJiAweDEpOwogfQpAQCAtMzYxLDI1ICsyMDksNDEgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCWludCB0eXBlOworCisJLyoKKwkgKiBUaGUgY29oZXJlbmN5IGZhYnJpYyBpcyBuZWVkZWQ6CisJICogLSBGb3IgY29oZXJlbmN5IGJldHdlZW4gcHJvY2Vzc29ycyBvbiBBcm1hZGEgWFAsIHNvIG9ubHkKKwkgKiAgIHdoZW4gU01QIGlzIGVuYWJsZWQuCisJICogLSBGb3IgY29oZXJlbmN5IGJldHdlZW4gdGhlIHByb2Nlc3NvciBhbmQgSS9PIGRldmljZXMsIGJ1dAorCSAqICAgdGhpcyBjb2hlcmVuY3kgcmVxdWlyZXMgbWFueSBwcmUtcmVxdWlzaXRlcyAod3JpdGUKKwkgKiAgIGFsbG9jYXRlIGNhY2hlIHBvbGljeSwgc2hhcmVhYmxlIHBhZ2VzLCBTTVAgYml0IHNldCkgdGhhdAorCSAqICAgYXJlIG9ubHkgbWVhbnQgaW4gU01QIHNpdHVhdGlvbnMuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IG9uIEFybWFkYSAzNzAsIHRoZXJlIGlzIGN1cnJlbnRseQorCSAqIG5vIHdheSB0byB1c2UgaGFyZHdhcmUgSS9PIGNvaGVyZW5jeSwgYmVjYXVzZSBldmVuIHdoZW4KKwkgKiBDT05GSUdfU01QIGlzIGVuYWJsZWQsIGlzX3NtcCgpIHJldHVybnMgZmFsc2UgZHVlIHRvIHRoZQorCSAqIEFybWFkYSAzNzAgYmVpbmcgYSBzaW5nbGUtY29yZSBwcm9jZXNzb3IuIFRvIGxpZnQgdGhpcworCSAqIGxpbWl0YXRpb24sIHdlIHdvdWxkIGhhdmUgdG8gZmluZCBhIHdheSB0byBtYWtlIHRoZSBjYWNoZQorCSAqIHBvbGljeSBzZXQgdG8gd3JpdGUtYWxsb2NhdGUgKG9uIGFsbCBBcm1hZGEgU29DcyksIGFuZCB0bworCSAqIHNldCB0aGUgc2hhcmVhYmxlIGF0dHJpYnV0ZSBpbiBwYWdlIHRhYmxlcyAob24gYWxsIEFybWFkYQorCSAqIFNvQ3MgZXhjZXB0IHRoZSBBcm1hZGEgMzcwKS4gVW5mb3J0dW5hdGVseSwgc3VjaCBkZWNpc2lvbnMKKwkgKiBhcmUgdGFrZW4gdmVyeSBlYXJseSBpbiB0aGUga2VybmVsIGJvb3QgcHJvY2VzcywgYXQgYSBwb2ludAorCSAqIHdoZXJlIHdlIGRvbid0IGtub3cgeWV0IG9uIHdoaWNoIFNvQyB3ZSBhcmUgcnVubmluZy4KKworCSAqLworCWlmICghaXNfc21wKCkpCisJCXJldHVybiBDT0hFUkVOQ1lfRkFCUklDX1RZUEVfTk9ORTsKIAogCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlX2FuZF9tYXRjaChOVUxMLCBvZl9jb2hlcmVuY3lfdGFibGUsICZtYXRjaCk7Ci0JaWYgKG5wKSB7Ci0JCWludCB0eXBlID0gKGludCkgbWF0Y2gtPmRhdGE7CisJaWYgKCFucCkKKwkJcmV0dXJuIENPSEVSRU5DWV9GQUJSSUNfVFlQRV9OT05FOwogCi0JCS8qIEFybWFkYSAzNzAvWFAgY29oZXJlbmN5IHdvcmtzIGluIGJvdGggVVAgYW5kIFNNUCAqLwotCQlpZiAodHlwZSA9PSBDT0hFUkVOQ1lfRkFCUklDX1RZUEVfQVJNQURBXzM3MF9YUCkKLQkJCXJldHVybiB0eXBlOworCXR5cGUgPSAoaW50KSBtYXRjaC0+ZGF0YTsKIAotCQkvKiBBcm1hZGEgMzc1IGNvaGVyZW5jeSB3b3JrcyBvbmx5IG9uIFNNUCAqLwotCQllbHNlIGlmICh0eXBlID09IENPSEVSRU5DWV9GQUJSSUNfVFlQRV9BUk1BREFfMzc1ICYmIGlzX3NtcCgpKQotCQkJcmV0dXJuIHR5cGU7CisJb2Zfbm9kZV9wdXQobnApOwogCi0JCS8qIEFybWFkYSAzODAgY29oZXJlbmN5IHdvcmtzIG9ubHkgb24gU01QICovCi0JCWVsc2UgaWYgKHR5cGUgPT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zODAgJiYgaXNfc21wKCkpCi0JCQlyZXR1cm4gdHlwZTsKLQl9Ci0KLQlyZXR1cm4gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX05PTkU7CisJcmV0dXJuIHR5cGU7CiB9CiAKIGludCBjb2hlcmVuY3lfYXZhaWxhYmxlKHZvaWQpCkBAIC00MDcsMjIgKzI3MSw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNvaGVyZW5jeV9sYXRlX2luaXQodm9pZCkKIHsKLQlpbnQgdHlwZSA9IGNvaGVyZW5jeV90eXBlKCk7Ci0KLQlpZiAodHlwZSA9PSBDT0hFUkVOQ1lfRkFCUklDX1RZUEVfTk9ORSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAodHlwZSA9PSBDT0hFUkVOQ1lfRkFCUklDX1RZUEVfQVJNQURBXzM3NSkgewotCQl1MzIgZGV2LCByZXY7Ci0KLQkJaWYgKG12ZWJ1X2dldF9zb2NfaWQoJmRldiwgJnJldikgPT0gMCAmJgotCQkgICAgcmV2ID09IEFSTUFEQV8zNzVfWjFfUkVWKQotCQkJYXJtYWRhXzM3NV9jb2hlcmVuY3lfaW5pdF93YSgpOwotCX0KLQotCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsCi0JCQkgICAgICAmbXZlYnVfaHdjY19uYik7Ci0KKwlpZiAoY29oZXJlbmN5X2F2YWlsYWJsZSgpKQorCQlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLAorCQkJCSAgICAgICZtdmVidV9od2NjX25iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3lfbGwuUyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5X2xsLlMKaW5kZXggZjVkODgxYi4uOGIyZmJjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3lfbGwuUworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeV9sbC5TCkBAIC0yNCw3ICsyNCwxMCBAQAogI2luY2x1ZGUgPGFzbS9jcDE1Lmg+CiAKIAkudGV4dAotLyogUmV0dXJucyB0aGUgY29oZXJlbmN5IGJhc2UgYWRkcmVzcyBpbiByMSAocjAgaXMgdW50b3VjaGVkKSAqLworLyoKKyAqIFJldHVybnMgdGhlIGNvaGVyZW5jeSBiYXNlIGFkZHJlc3MgaW4gcjEgKHIwIGlzIHVudG91Y2hlZCksIG9yIDAgaWYKKyAqIHRoZSBjb2hlcmVuY3kgZmFicmljIGlzIG5vdCBlbmFibGVkLgorICovCiBFTlRSWShsbF9nZXRfY29oZXJlbmN5X2Jhc2UpCiAJbXJjCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAogCXRzdAlyMSwgI0NSX00gQCBDaGVjayBNTVUgYml0IGVuYWJsZWQKQEAgLTMyLDggKzM1LDEzIEBACiAKIAkvKgogCSAqIE1NVSBpcyBkaXNhYmxlZCwgdXNlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjb2hlcmVuY3kKLQkgKiBiYXNlIGFkZHJlc3MuCisJICogYmFzZSBhZGRyZXNzLiBIb3dldmVyLCBpZiB0aGUgY29oZXJlbmN5IGZhYnJpYyBpc24ndCBtYXBwZWQKKwkgKiAoaS5lIGl0cyB2aXJ0dWFsIGFkZHJlc3MgaXMgemVybyksIGl0IG1lYW5zIGNvaGVyZW5jeSBpcworCSAqIG5vdCBlbmFibGVkLCBzbyB3ZSByZXR1cm4gMC4KIAkgKi8KKwlsZHIJcjEsID1jb2hlcmVuY3lfYmFzZQorCWNtcAlyMSwgIzAKKwliZXEJMmYKIAlhZHIJcjEsIDNmCiAJbGRyCXIzLCBbcjFdCiAJbGRyCXIxLCBbcjEsIHIzXQpAQCAtODUsNiArOTMsOSBAQAogCSAqLwogCW1vdiAJcjAsIGxyCiAJYmwJbGxfZ2V0X2NvaGVyZW5jeV9iYXNlCisJLyogQmFpbCBvdXQgaWYgdGhlIGNvaGVyZW5jeSBpcyBub3QgZW5hYmxlZCAqLworCWNtcAlyMSwgIzAKKwlyZXRlcQlyMAogCWJsCWxsX2dldF9jb2hlcmVuY3lfY3B1bWFzawogCW1vdiAJbHIsIHIwCiAJYWRkCXIwLCByMSwgI0FSTUFEQV9YUF9DRkJfQ0ZHX1JFR19PRkZTRVQKQEAgLTEwNyw2ICsxMTgsOSBAQAogCSAqLwogCW1vdiByMCwgbHIKIAlibAlsbF9nZXRfY29oZXJlbmN5X2Jhc2UKKwkvKiBCYWlsIG91dCBpZiB0aGUgY29oZXJlbmN5IGlzIG5vdCBlbmFibGVkICovCisJY21wCXIxLCAjMAorCXJldGVxCXIwCiAJYmwJbGxfZ2V0X2NvaGVyZW5jeV9jcHVtYXNrCiAJbW92IGxyLCByMAogCWFkZAlyMCwgcjEsICNBUk1BREFfWFBfQ0ZCX0NUTF9SRUdfT0ZGU0VUCkBAIC0xMzEsNiArMTQ1LDkgQEAKIAkgKi8KIAltb3YgCXIwLCBscgogCWJsCWxsX2dldF9jb2hlcmVuY3lfYmFzZQorCS8qIEJhaWwgb3V0IGlmIHRoZSBjb2hlcmVuY3kgaXMgbm90IGVuYWJsZWQgKi8KKwljbXAJcjEsICMwCisJcmV0ZXEJcjAKIAlibAlsbF9nZXRfY29oZXJlbmN5X2NwdW1hc2sKIAltb3YgCWxyLCByMAogCWFkZAlyMCwgcjEsICNBUk1BREFfWFBfQ0ZCX0NUTF9SRUdfT0ZGU0VUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb21tb24uaAppbmRleCAzY2NiNDBjLi4zZTBhY2ExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY29tbW9uLmgKQEAgLTI1LDQgKzI1LDYgQEAKIAogdm9pZCBfX2lvbWVtICptdmVidV9nZXRfc2N1X2Jhc2Uodm9pZCk7CiAKK2ludCBtdmVidV9wbV9pbml0KHZvaWQgKCpib2FyZF9wbV9lbnRlcikodm9pZCBfX2lvbWVtICpzZHJhbV9yZWcsIHUzMiBzcmNtZCkpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY3B1LXJlc2V0LmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NwdS1yZXNldC5jCmluZGV4IDYwZmI1MzcuLjRhMmNhZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY3B1LXJlc2V0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jcHUtcmVzZXQuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+Ci0jaW5jbHVkZSAiYXJtYWRhLTM3MC14cC5oIgogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpjcHVfcmVzZXRfYmFzZTsKIHN0YXRpYyBzaXplX3QgY3B1X3Jlc2V0X3NpemU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2hlYWRzbXAtYTkuUyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvaGVhZHNtcC1hOS5TCmluZGV4IGJlNTFjOTkuLjA4ZDVlZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvaGVhZHNtcC1hOS5TCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvaGVhZHNtcC1hOS5TCkBAIC0yMiw1ICsyMiw2IEBACiBFTlRSWShtdmVidV9jb3J0ZXhfYTlfc2Vjb25kYXJ5X3N0YXJ0dXApCiBBUk1fQkU4KHNldGVuZAliZSkKIAlibCAgICAgIHY3X2ludmFsaWRhdGVfbDEKKwlibAlhcm1hZGFfMzh4X3NjdV9wb3dlcl91cAogCWIJc2Vjb25kYXJ5X3N0YXJ0dXAKIEVORFBST0MobXZlYnVfY29ydGV4X2E5X3NlY29uZGFyeV9zdGFydHVwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbGF0c21wLWE5LmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAtYTkuYwppbmRleCA0N2E3MWE5Li4yZWMxYTQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAtYTkuYworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAtYTkuYwpAQCAtNDMsMjEgKzQzLDcwIEBACiAJZWxzZQogCQltdmVidV9wbXN1X3NldF9jcHVfYm9vdF9hZGRyKGh3X2NwdSwgbXZlYnVfY29ydGV4X2E5X3NlY29uZGFyeV9zdGFydHVwKTsKIAlzbXBfd21iKCk7CisKKwkvKgorCSAqIERvaW5nIHRoaXMgYmVmb3JlIGRlYXNzZXJ0aW5nIHRoZSBDUFVzIGlzIG5lZWRlZCB0byB3YWtlIHVwIENQVXMKKwkgKiBpbiB0aGUgb2ZmbGluZSBzdGF0ZSBhZnRlciB1c2luZyBDUFUgaG90cGx1Zy4KKwkgKi8KKwlhcmNoX3NlbmRfd2FrZXVwX2lwaV9tYXNrKGNwdW1hc2tfb2YoY3B1KSk7CisKIAlyZXQgPSBtdmVidV9jcHVfcmVzZXRfZGVhc3NlcnQoaHdfY3B1KTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiQ291bGQgbm90IHN0YXJ0IHRoZSBzZWNvbmRhcnkgQ1BVOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JYXJjaF9zZW5kX3dha2V1cF9pcGlfbWFzayhjcHVtYXNrX29mKGNwdSkpOwogCiAJcmV0dXJuIDA7CiB9CisvKgorICogV2hlbiBhIENQVSBpcyBicm91Z2h0IGJhY2sgb25saW5lLCBlaXRoZXIgdGhyb3VnaCBDUFUgaG90cGx1Zywgb3IKKyAqIGJlY2F1c2Ugb2YgdGhlIGJvb3Qgb2YgYSBrZXhlYydlZCBrZXJuZWwsIHRoZSBQTVNVIGNvbmZpZ3VyYXRpb24KKyAqIGZvciB0aGlzIENQVSBtaWdodCBiZSBpbiB0aGUgZGVlcCBpZGxlIHN0YXRlLCBwcmV2ZW50aW5nIHRoaXMgQ1BVCisgKiBmcm9tIHJlY2VpdmluZyBpbnRlcnJ1cHRzLiBIZXJlLCB3ZSB0aGVyZWZvcmUgdGFrZSBvdXQgdGhlIGN1cnJlbnQKKyAqIENQVSBmcm9tIHRoaXMgc3RhdGUsIHdoaWNoIHdhcyBlbnRlcmVkIGJ5IGFybWFkYV8zOHhfY3B1X2RpZSgpCisgKiBiZWxvdy4KKyAqLworc3RhdGljIHZvaWQgYXJtYWRhXzM4eF9zZWNvbmRhcnlfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KQoreworCW12ZWJ1X3Y3X3Btc3VfaWRsZV9leGl0KCk7Cit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyB2b2lkIGFybWFkYV8zOHhfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCS8qCisJICogQ1BVIGhvdHBsdWcgaXMgaW1wbGVtZW50ZWQgYnkgcHV0dGluZyBvZmZsaW5lIENQVXMgaW50byB0aGUKKwkgKiBkZWVwIGlkbGUgc2xlZXAgc3RhdGUuCisJICovCisJYXJtYWRhXzM4eF9kb19jcHVfc3VzcGVuZCh0cnVlKTsKK30KKworLyoKKyAqIFdlIG5lZWQgYSBkdW1teSBmdW5jdGlvbiwgc28gdGhhdCBwbGF0Zm9ybV9jYW5fY3B1X2hvdHBsdWcoKSBrbm93cworICogd2Ugc3VwcG9ydCBDUFUgaG90cGx1Zy4gSG93ZXZlciwgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IG5lZWQgdG8gZG8KKyAqIGFueXRoaW5nLCBiZWNhdXNlIENQVXMgZ29pbmcgb2ZmbGluZSBjYW4gZW50ZXIgdGhlIGRlZXAgaWRsZSBzdGF0ZQorICogYnkgdGhlbXNlbHZlcywgd2l0aG91dCBhbnkgaGVscCBmcm9tIGEgc3RpbGwgYWxpdmUgQ1BVLgorICovCitzdGF0aWMgaW50IGFybWFkYV8zOHhfY3B1X2tpbGwodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHNtcF9vcGVyYXRpb25zIG12ZWJ1X2NvcnRleF9hOV9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CiAJLnNtcF9ib290X3NlY29uZGFyeQk9IG12ZWJ1X2NvcnRleF9hOV9ib290X3NlY29uZGFyeSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgYXJtYWRhXzM4eF9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CisJLnNtcF9ib290X3NlY29uZGFyeQk9IG12ZWJ1X2NvcnRleF9hOV9ib290X3NlY29uZGFyeSwKKwkuc21wX3NlY29uZGFyeV9pbml0ICAgICA9IGFybWFkYV8zOHhfc2Vjb25kYXJ5X2luaXQsCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJLmNwdV9kaWUJCT0gYXJtYWRhXzM4eF9jcHVfZGllLAorCS5jcHVfa2lsbCAgICAgICAgICAgICAgID0gYXJtYWRhXzM4eF9jcHVfa2lsbCwKKyNlbmRpZgorfTsKKwogQ1BVX01FVEhPRF9PRl9ERUNMQVJFKG12ZWJ1X2FybWFkYV8zNzVfc21wLCAibWFydmVsbCxhcm1hZGEtMzc1LXNtcCIsCiAJCSAgICAgICZtdmVidV9jb3J0ZXhfYTlfc21wX29wcyk7CiBDUFVfTUVUSE9EX09GX0RFQ0xBUkUobXZlYnVfYXJtYWRhXzM4MF9zbXAsICJtYXJ2ZWxsLGFybWFkYS0zODAtc21wIiwKLQkJICAgICAgJm12ZWJ1X2NvcnRleF9hOV9zbXBfb3BzKTsKKwkJICAgICAgJmFybWFkYV8zOHhfc21wX29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcGxhdHNtcC5jCmluZGV4IDg5NWRjMzcuLjU4Y2M4YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcGxhdHNtcC5jCkBAIC0zMCwxMCArMzAsMTIgQEAKICNpbmNsdWRlICJwbXN1LmgiCiAjaW5jbHVkZSAiY29oZXJlbmN5LmgiCiAKKyNkZWZpbmUgQVJNQURBX1hQX01BWF9DUFVTIDQKKwogI2RlZmluZSBBWFBfQk9PVFJPTV9CQVNFIDB4ZmZmMDAwMDAKICNkZWZpbmUgQVhQX0JPT1RST01fU0laRSAweDEwMDAwMAogCi1zdGF0aWMgc3RydWN0IGNsayAqX19pbml0IGdldF9jcHVfY2xrKGludCBjcHUpCitzdGF0aWMgc3RydWN0IGNsayAqZ2V0X2NwdV9jbGsoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY2xrICpjcHVfY2xrOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZl9nZXRfY3B1X25vZGUoY3B1LCBOVUxMKTsKQEAgLTQ2LDI5ICs0OCwyOCBAQAogCXJldHVybiBjcHVfY2xrOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X3NlY29uZGFyeV9jcHVzX2Nsb2NrKHZvaWQpCitzdGF0aWMgdm9pZCBzZXRfc2Vjb25kYXJ5X2NwdV9jbG9jayh1bnNpZ25lZCBpbnQgY3B1KQogewotCWludCB0aGlzY3B1LCBjcHU7CisJaW50IHRoaXNjcHU7CiAJdW5zaWduZWQgbG9uZyByYXRlOwogCXN0cnVjdCBjbGsgKmNwdV9jbGs7CiAKLQl0aGlzY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXRoaXNjcHUgPSBnZXRfY3B1KCk7CisKIAljcHVfY2xrID0gZ2V0X2NwdV9jbGsodGhpc2NwdSk7CiAJaWYgKCFjcHVfY2xrKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCWNsa19wcmVwYXJlX2VuYWJsZShjcHVfY2xrKTsKIAlyYXRlID0gY2xrX2dldF9yYXRlKGNwdV9jbGspOwogCi0JLyogc2V0IGFsbCB0aGUgb3RoZXIgQ1BVIGNsayB0byB0aGUgc2FtZSByYXRlIHRoYW4gdGhlIGJvb3QgQ1BVICovCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpZiAoY3B1ID09IHRoaXNjcHUpCi0JCQljb250aW51ZTsKLQkJY3B1X2NsayA9IGdldF9jcHVfY2xrKGNwdSk7Ci0JCWlmICghY3B1X2NsaykKLQkJCXJldHVybjsKLQkJY2xrX3NldF9yYXRlKGNwdV9jbGssIHJhdGUpOwotCQljbGtfcHJlcGFyZV9lbmFibGUoY3B1X2Nsayk7Ci0JfQorCWNwdV9jbGsgPSBnZXRfY3B1X2NsayhjcHUpOworCWlmICghY3B1X2NsaykKKwkJZ290byBvdXQ7CisJY2xrX3NldF9yYXRlKGNwdV9jbGssIHJhdGUpOworCWNsa19wcmVwYXJlX2VuYWJsZShjcHVfY2xrKTsKKworb3V0OgorCXB1dF9jcHUoKTsKIH0KIAogc3RhdGljIGludCBhcm1hZGFfeHBfYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQpAQCAtNzgsNiArNzksNyBAQAogCXByX2luZm8oIkJvb3RpbmcgQ1BVICVkXG4iLCBjcHUpOwogCiAJaHdfY3B1ID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJc2V0X3NlY29uZGFyeV9jcHVfY2xvY2soaHdfY3B1KTsKIAltdmVidV9wbXN1X3NldF9jcHVfYm9vdF9hZGRyKGh3X2NwdSwgYXJtYWRhX3hwX3NlY29uZGFyeV9zdGFydHVwKTsKIAogCS8qCkBAIC0xMjYsNyArMTI4LDYgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwogCWludCBlcnI7CiAKLQlzZXRfc2Vjb25kYXJ5X2NwdXNfY2xvY2soKTsKIAlmbHVzaF9jYWNoZV9hbGwoKTsKIAlzZXRfY3B1X2NvaGVyZW50KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcG0tYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG0tYm9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGZkNGFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbS1ib2FyZC5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQm9hcmQtbGV2ZWwgc3VzcGVuZC9yZXN1bWUgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTWFydmVsbAorICoKKyAqIFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisjZGVmaW5lIEFSTUFEQV9YUF9HUF9QSUNfTlJfR1BJT1MgMworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpncGlvX2N0cmw7CitzdGF0aWMgaW50IHBpY19ncGlvc1tBUk1BREFfWFBfR1BfUElDX05SX0dQSU9TXTsKK3N0YXRpYyBpbnQgcGljX3Jhd19ncGlvc1tBUk1BREFfWFBfR1BfUElDX05SX0dQSU9TXTsKKworc3RhdGljIHZvaWQgbXZlYnVfYXJtYWRhX3hwX2dwX3BtX2VudGVyKHZvaWQgX19pb21lbSAqc2RyYW1fcmVnLCB1MzIgc3JjbWQpCit7CisJdTMyIHJlZywgYWNrY21kOworCWludCBpOworCisJLyogUHV0IDAwMSBhcyB2YWx1ZSBvbiB0aGUgR1BJT3MgKi8KKwlyZWcgPSByZWFkbChncGlvX2N0cmwpOworCWZvciAoaSA9IDA7IGkgPCBBUk1BREFfWFBfR1BfUElDX05SX0dQSU9TOyBpKyspCisJCXJlZyAmPSB+QklUKHBpY19yYXdfZ3Bpb3NbaV0pOworCXJlZyB8PSBCSVQocGljX3Jhd19ncGlvc1swXSk7CisJd3JpdGVsKHJlZywgZ3Bpb19jdHJsKTsKKworCS8qIFByZXBhcmUgd3JpdGluZyAxMTEgdG8gdGhlIEdQSU9zICovCisJYWNrY21kID0gcmVhZGwoZ3Bpb19jdHJsKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJNQURBX1hQX0dQX1BJQ19OUl9HUElPUzsgaSsrKQorCQlhY2tjbWQgfD0gQklUKHBpY19yYXdfZ3Bpb3NbaV0pOworCisJLyoKKwkgKiBXYWl0IGEgd2hpbGUsIHRoZSBQSUMgbmVlZHMgcXVpdGUgYSBiaXQgb2YgdGltZSBiZXR3ZWVuIHRoZQorCSAqIHR3byBHUElPIGNvbW1hbmRzLgorCSAqLworCW1kZWxheSgzMDAwKTsKKworCWFzbSB2b2xhdGlsZSAoCisJCS8qIEFsaWduIHRvIGEgY2FjaGUgbGluZSAqLworCQkiLmJhbGlnbiAzMlxuXHQiCisKKwkJLyogRW50ZXIgc2VsZiByZWZyZXNoICovCisJCSJzdHIgJVtzcmNtZF0sIFslW3NkcmFtX3JlZ11dXG5cdCIKKworCQkvKgorCQkgKiBXYWl0IDEwMCBjeWNsZXMgZm9yIEREUiB0byBlbnRlciBzZWxmIHJlZnJlc2gsIGJ5CisJCSAqIGRvaW5nIDUwIHRpbWVzIHR3byBpbnN0cnVjdGlvbnMuCisJCSAqLworCQkibW92IHIxLCAjNTBcblx0IgorCQkiMTogc3VicyByMSwgcjEsICMxXG5cdCIKKwkJImJuZSAxYlxuXHQiCisKKwkJLyogSXNzdWUgdGhlIGNvbW1hbmQgQUNLICovCisJCSJzdHIgJVthY2tjbWRdLCBbJVtncGlvX2N0cmxdXVxuXHQiCisKKwkJLyogVHJhcCB0aGUgcHJvY2Vzc29yICovCisJCSJiIC5cblx0IgorCQk6IDogW3NyY21kXSAiciIgKHNyY21kKSwgW3NkcmFtX3JlZ10gInIiIChzZHJhbV9yZWcpLAorCQkgIFthY2tjbWRdICJyIiAoYWNrY21kKSwgW2dwaW9fY3RybF0gInIiIChncGlvX2N0cmwpIDogInIxIik7Cit9CisKK3N0YXRpYyBpbnQgbXZlYnVfYXJtYWRhX3hwX2dwX3BtX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZ3Bpb19jdHJsX25wOworCWludCByZXQgPSAwLCBpOworCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIm1hcnZlbGwsYXhwLWdwIikpCisJCXJldHVybiAtRU5PREVWOworCisJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAicG1fcGljIik7CisJaWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJNQURBX1hQX0dQX1BJQ19OUl9HUElPUzsgaSsrKSB7CisJCWNoYXIgKm5hbWU7CisJCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgYXJnczsKKworCQlwaWNfZ3Bpb3NbaV0gPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgImN0cmwtZ3Bpb3MiLCBpKTsKKwkJaWYgKHBpY19ncGlvc1tpXSA8IDApIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInBpYy1waW4lZCIsIGkpOworCQlpZiAoIW5hbWUpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldCA9IGdwaW9fcmVxdWVzdChwaWNfZ3Bpb3NbaV0sIG5hbWUpOworCQlpZiAocmV0IDwgMCkgeworCQkJa2ZyZWUobmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwaWNfZ3Bpb3NbaV0sIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZ3Bpb19mcmVlKHBpY19ncGlvc1tpXSk7CisJCQlrZnJlZShuYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2ZpeGVkX2FyZ3MobnAsICJjdHJsLWdwaW9zIiwgMiwKKwkJCQkJCSAgICAgICBpLCAmYXJncyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlncGlvX2ZyZWUocGljX2dwaW9zW2ldKTsKKwkJCWtmcmVlKG5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlncGlvX2N0cmxfbnAgPSBhcmdzLm5wOworCQlwaWNfcmF3X2dwaW9zW2ldID0gYXJncy5hcmdzWzBdOworCX0KKworCWdwaW9fY3RybCA9IG9mX2lvbWFwKGdwaW9fY3RybF9ucCwgMCk7CisJaWYgKCFncGlvX2N0cmwpCisJCXJldHVybiAtRU5PTUVNOworCisJbXZlYnVfcG1faW5pdChtdmVidV9hcm1hZGFfeHBfZ3BfcG1fZW50ZXIpOworCitvdXQ6CisJb2Zfbm9kZV9wdXQobnApOworCXJldHVybiByZXQ7Cit9CisKK2xhdGVfaW5pdGNhbGwobXZlYnVfYXJtYWRhX3hwX2dwX3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NzNhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3BtLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBTdXNwZW5kL3Jlc3VtZSBzdXBwb3J0LiBDdXJyZW50bHkgc3VwcG9ydGluZyBBcm1hZGEgWFAgb25seS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTWFydmVsbAorICoKKyAqIFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcHVfcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL291dGVyY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorCisjaW5jbHVkZSAiY29oZXJlbmN5LmgiCisjaW5jbHVkZSAicG1zdS5oIgorCisjZGVmaW5lIFNEUkFNX0NPTkZJR19PRkZTICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICBTRFJBTV9DT05GSUdfU1JfTU9ERV9CSVQgICAgICAgICAgQklUKDI0KQorI2RlZmluZSBTRFJBTV9PUEVSQVRJT05fT0ZGUyAgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgIFNEUkFNX09QRVJBVElPTl9TRUxGX1JFRlJFU0ggICAgICAweDcKKyNkZWZpbmUgU0RSQU1fRExCX0VWSUNUSU9OX09GRlMgICAgICAgICAgICAweDMwYworI2RlZmluZSAgU0RSQU1fRExCX0VWSUNUSU9OX1RIUkVTSE9MRF9NQVNLIDB4ZmYKKworc3RhdGljIHZvaWQgKCptdmVidV9ib2FyZF9wbV9lbnRlcikodm9pZCBfX2lvbWVtICpzZHJhbV9yZWcsIHUzMiBzcmNtZCk7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpzZHJhbV9jdHJsOworCitzdGF0aWMgaW50IG12ZWJ1X3BtX3Bvd2VyZG93bih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJdTMyIHJlZywgc3JjbWQ7CisKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlvdXRlcl9mbHVzaF9hbGwoKTsKKworCS8qCisJICogSXNzdWUgYSBEYXRhIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyIGluc3RydWN0aW9uIHRvIGVuc3VyZQorCSAqIHRoYXQgYWxsIHN0YXRlIHNhdmluZyBoYXMgYmVlbiBjb21wbGV0ZWQuCisJICovCisJZHNiKCk7CisKKwkvKiBGbHVzaCB0aGUgRExCIGFuZCB3YWl0IH43IHVzZWMgKi8KKwlyZWcgPSByZWFkbChzZHJhbV9jdHJsICsgU0RSQU1fRExCX0VWSUNUSU9OX09GRlMpOworCXJlZyAmPSB+U0RSQU1fRExCX0VWSUNUSU9OX1RIUkVTSE9MRF9NQVNLOworCXdyaXRlbChyZWcsIHNkcmFtX2N0cmwgKyBTRFJBTV9ETEJfRVZJQ1RJT05fT0ZGUyk7CisKKwl1ZGVsYXkoNyk7CisKKwkvKiBTZXQgRFJBTSBpbiBiYXR0ZXJ5IGJhY2t1cCBtb2RlICovCisJcmVnID0gcmVhZGwoc2RyYW1fY3RybCArIFNEUkFNX0NPTkZJR19PRkZTKTsKKwlyZWcgJj0gflNEUkFNX0NPTkZJR19TUl9NT0RFX0JJVDsKKwl3cml0ZWwocmVnLCBzZHJhbV9jdHJsICsgU0RSQU1fQ09ORklHX09GRlMpOworCisJLyogUHJlcGFyZSB0byBnbyB0byBzZWxmLXJlZnJlc2ggKi8KKworCXNyY21kID0gcmVhZGwoc2RyYW1fY3RybCArIFNEUkFNX09QRVJBVElPTl9PRkZTKTsKKwlzcmNtZCAmPSB+MHgxRjsKKwlzcmNtZCB8PSBTRFJBTV9PUEVSQVRJT05fU0VMRl9SRUZSRVNIOworCisJbXZlYnVfYm9hcmRfcG1fZW50ZXIoc2RyYW1fY3RybCArIFNEUkFNX09QRVJBVElPTl9PRkZTLCBzcmNtZCk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBCT09UX0lORk9fQUREUiAgICAgIDB4MzAwMAorI2RlZmluZSBCT09UX01BR0lDX1dPUkQJICAgIDB4ZGVhZGIwMDIKKyNkZWZpbmUgQk9PVF9NQUdJQ19MSVNUX0VORCAweGZmZmZmZmZmCisKKy8qCisgKiBUaG9zZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIGJlZm9yZSBzd2l0Y2hpbmcgdGhlIGludGVybmFsIHJlZ2lzdGVyCisgKiBiYXNlLCB3aGljaCBpcyB3aHkgd2UgaGFyZGNvZGUgdGhlIDB4ZDAwMDAwMDAgYmFzZSBhZGRyZXNzLCB0aGUgb25lCisgKiB1c2VkIGJ5IHRoZSBTb0Mgb3V0IG9mIHJlc2V0LgorICovCisjZGVmaW5lIE1CVVNfV0lORE9XXzEyX0NUUkwgICAgICAgMHhkMDAyMDBiMAorI2RlZmluZSBNQlVTX0lOVEVSTkFMX1JFR19BRERSRVNTIDB4ZDAwMjAwODAKKworI2RlZmluZSBTRFJBTV9XSU5fQkFTRV9SRUcoeCkJKDB4MjAxODAgKyAoMHg4KngpKQorI2RlZmluZSBTRFJBTV9XSU5fQ1RSTF9SRUcoeCkJKDB4MjAxODQgKyAoMHg4KngpKQorCitzdGF0aWMgcGh5c19hZGRyX3QgbXZlYnVfaW50ZXJuYWxfcmVnX2Jhc2Uodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCV9fYmUzMiBpbl9hZGRyWzJdOworCisJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiaW50ZXJuYWwtcmVncyIpOworCUJVR19PTighbnApOworCisJLyoKKwkgKiBBc2sgdGhlIERUIHdoYXQgaXMgdGhlIGludGVybmFsIHJlZ2lzdGVyIGFkZHJlc3Mgb24gdGhpcworCSAqIHBsYXRmb3JtLiBJbiB0aGUgbXZlYnUtbWJ1cyBEVCBiaW5kaW5nLCAweGYwMDEwMDAwCisJICogY29ycmVzcG9uZHMgdG8gdGhlIGludGVybmFsIHJlZ2lzdGVyIHdpbmRvdy4KKwkgKi8KKwlpbl9hZGRyWzBdID0gY3B1X3RvX2JlMzIoMHhmMDAxMDAwMCk7CisJaW5fYWRkclsxXSA9IDB4MDsKKworCXJldHVybiBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgaW5fYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIG12ZWJ1X3BtX3N0b3JlX2Jvb3RpbmZvKHZvaWQpCit7CisJdTMyICpzdG9yZV9hZGRyOworCXBoeXNfYWRkcl90IHJlc3VtZV9wYzsKKworCXN0b3JlX2FkZHIgPSBwaHlzX3RvX3ZpcnQoQk9PVF9JTkZPX0FERFIpOworCXJlc3VtZV9wYyA9IHZpcnRfdG9fcGh5cyhhcm1hZGFfMzcwX3hwX2NwdV9yZXN1bWUpOworCisJLyoKKwkgKiBUaGUgYm9vdGxvYWRlciBleHBlY3RzIHRoZSBmaXJzdCB0d28gd29yZHMgdG8gYmUgYSBtYWdpYworCSAqIHZhbHVlIChCT09UX01BR0lDX1dPUkQpLCBmb2xsb3dlZCBieSB0aGUgYWRkcmVzcyBvZiB0aGUKKwkgKiByZXN1bWUgY29kZSB0byBqdW1wIHRvLiBUaGVuLCBpdCBleHBlY3RzIGEgc2VxdWVuY2Ugb2YKKwkgKiAoYWRkcmVzcywgdmFsdWUpIHBhaXJzLCB3aGljaCBjYW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZQorCSAqIHZhbHVlIG9mIGNlcnRhaW4gcmVnaXN0ZXJzLiBUaGlzIHNlcXVlbmNlIG11c3QgZW5kIHdpdGggdGhlCisJICogQk9PVF9NQUdJQ19MSVNUX0VORCBtYWdpYyB2YWx1ZS4KKwkgKi8KKworCXdyaXRlbChCT09UX01BR0lDX1dPUkQsIHN0b3JlX2FkZHIrKyk7CisJd3JpdGVsKHJlc3VtZV9wYywgc3RvcmVfYWRkcisrKTsKKworCS8qCisJICogU29tZSBwbGF0Zm9ybXMgcmVtYXAgdGhlaXIgaW50ZXJuYWwgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzCisJICogdG8gMHhmMTAwMDAwMC4gSG93ZXZlciwgb3V0IG9mIHJlc2V0LCB3aW5kb3cgMTIgc3RhcnRzIGF0CisJICogMHhmMDAwMDAwMCBhbmQgZW5kcyBhdCAweGY3ZmZmZmZmLCB3aGljaCB3b3VsZCBvdmVybGFwIHdpdGgKKwkgKiB0aGUgaW50ZXJuYWwgcmVnaXN0ZXJzLiBUaGVyZWZvcmUsIGRpc2FibGUgd2luZG93IDEyLgorCSAqLworCXdyaXRlbChNQlVTX1dJTkRPV18xMl9DVFJMLCBzdG9yZV9hZGRyKyspOworCXdyaXRlbCgweDAsIHN0b3JlX2FkZHIrKyk7CisKKwkvKgorCSAqIFNldCB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzIHRvIHRoZSB2YWx1ZQorCSAqIGV4cGVjdGVkIGJ5IExpbnV4LCBhcyByZWFkIGZyb20gdGhlIERldmljZSBUcmVlLgorCSAqLworCXdyaXRlbChNQlVTX0lOVEVSTkFMX1JFR19BRERSRVNTLCBzdG9yZV9hZGRyKyspOworCXdyaXRlbChtdmVidV9pbnRlcm5hbF9yZWdfYmFzZSgpLCBzdG9yZV9hZGRyKyspOworCisJLyoKKwkgKiBBc2sgdGhlIG12ZWJ1LW1idXMgZHJpdmVyIHRvIHN0b3JlIHRoZSBTRFJBTSB3aW5kb3cKKwkgKiBjb25maWd1cmF0aW9uLCB3aGljaCBoYXMgdG8gYmUgcmVzdG9yZWQgYnkgdGhlIGJvb3Rsb2FkZXIKKwkgKiBiZWZvcmUgcmUtZW50ZXJpbmcgdGhlIGtlcm5lbCBvbiByZXN1bWUuCisJICovCisJc3RvcmVfYWRkciArPSBtdmVidV9tYnVzX3NhdmVfY3B1X3RhcmdldChzdG9yZV9hZGRyKTsKKworCXdyaXRlbChCT09UX01BR0lDX0xJU1RfRU5ELCBzdG9yZV9hZGRyKTsKK30KKworc3RhdGljIGludCBtdmVidV9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfTUVNKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdV9wbV9lbnRlcigpOworCisJbXZlYnVfcG1fc3RvcmVfYm9vdGluZm8oKTsKKwljcHVfc3VzcGVuZCgwLCBtdmVidV9wbV9wb3dlcmRvd24pOworCisJb3V0ZXJfcmVzdW1lKCk7CisKKwltdmVidV92N19wbXN1X2lkbGVfZXhpdCgpOworCisJc2V0X2NwdV9jb2hlcmVudCgpOworCisJY3B1X3BtX2V4aXQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG12ZWJ1X3BtX29wcyA9IHsKKwkuZW50ZXIgPSBtdmVidV9wbV9lbnRlciwKKwkudmFsaWQgPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAorfTsKKworaW50IG12ZWJ1X3BtX2luaXQodm9pZCAoKmJvYXJkX3BtX2VudGVyKSh2b2lkIF9faW9tZW0gKnNkcmFtX3JlZywgdTMyIHNyY21kKSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCByZXNvdXJjZSByZXM7CisKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgibWFydmVsbCxhcm1hZGF4cCIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwKKwkJCQkgICAgICJtYXJ2ZWxsLGFybWFkYS14cC1zZHJhbS1jb250cm9sbGVyIik7CisJaWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcykpIHsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJnJlcyksCisJCQkJbnAtPmZ1bGxfbmFtZSkpIHsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNkcmFtX2N0cmwgPSBpb3JlbWFwKHJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcmVzKSk7CisJaWYgKCFzZHJhbV9jdHJsKSB7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJnJlcykpOworCQlvZl9ub2RlX3B1dChucCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW9mX25vZGVfcHV0KG5wKTsKKworCW12ZWJ1X2JvYXJkX3BtX2VudGVyID0gYm9hcmRfcG1fZW50ZXI7CisKKwlzdXNwZW5kX3NldF9vcHMoJm12ZWJ1X3BtX29wcyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1LmMKaW5kZXggYmJkODY2NC4uZDhhYjYwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1LmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdV9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEtZHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMzksNyArNDAsNiBAQAogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAiYXJtYWRhLTM3MC14cC5oIgogCiAKICNkZWZpbmUgUE1TVV9CQVNFX09GRlNFVCAgICAweDEwMApAQCAtMzEyLDcgKzMxMiw3IEBACiAJcmV0dXJuIGNwdV9zdXNwZW5kKGRlZXBpZGxlLCBhcm1hZGFfMzcwX3hwX3Btc3VfaWRsZV9lbnRlcik7CiB9CiAKLXN0YXRpYyBpbnQgYXJtYWRhXzM4eF9kb19jcHVfc3VzcGVuZCh1bnNpZ25lZCBsb25nIGRlZXBpZGxlKQoraW50IGFybWFkYV8zOHhfZG9fY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBkZWVwaWRsZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIApAQCAtNTcyLDYgKzU3MiwxMCBAQAogCXJldHVybiAwOwogfQogCitzdHJ1Y3QgY3B1ZnJlcV9kdF9wbGF0Zm9ybV9kYXRhIGNwdWZyZXFfZHRfcGQgPSB7CisJLmluZGVwZW5kZW50X2Nsb2NrcyA9IHRydWUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBhcm1hZGFfeHBfcG1zdV9jcHVmcmVxX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpAQCAtNjQ0LDcgKzY0OCw4IEBACiAJCX0KIAl9CiAKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJjcHVmcmVxLWR0IiwgLTEsIE5VTEwsIDApOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKE5VTEwsICJjcHVmcmVxLWR0IiwgLTEsCisJCQkJICAgICAgJmNwdWZyZXFfZHRfcGQsIHNpemVvZihjcHVmcmVxX2R0X3BkKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5oIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1LmgKaW5kZXggNmI1OGMxZi4uZWE3OTI2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1LmgKQEAgLTE3LDUgKzE3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c19hZGRyX3QgcmVzdW1lX2FkZHJfcmVnKTsKIAogdm9pZCBtdmVidV92N19wbXN1X2lkbGVfZXhpdCh2b2lkKTsKK3ZvaWQgYXJtYWRhXzM3MF94cF9jcHVfcmVzdW1lKHZvaWQpOwogCitpbnQgYXJtYWRhXzM3MF94cF9wbXN1X2lkbGVfZW50ZXIodW5zaWduZWQgbG9uZyBkZWVwaWRsZSk7CitpbnQgYXJtYWRhXzM4eF9kb19jcHVfc3VzcGVuZCh1bnNpZ25lZCBsb25nIGRlZXBpZGxlKTsKICNlbmRpZgkvKiBfX01BQ0hfMzcwX1hQX1BNU1VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1X2xsLlMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3VfbGwuUwppbmRleCBhOTQ1NzU2Li44ODY1MTIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3VfbGwuUworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3VfbGwuUwpAQCAtMTIsMTIgKzEyLDMyIEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KIAorCitFTlRSWShhcm1hZGFfMzh4X3NjdV9wb3dlcl91cCkKKwltcmMgICAgIHAxNSwgNCwgcjEsIGMxNSwgYzAJQCBnZXQgU0NVIGJhc2UgYWRkcmVzcworCW9ycglyMSwgcjEsICMweDgJCUAgU0NVIENQVSBQb3dlciBTdGF0dXMgUmVnaXN0ZXIKKwltcmMJMTUsIDAsIHIwLCBjcjAsIGNyMCwgNQlAIGdldCB0aGUgQ1BVIElECisJYW5kCXIwLCByMCwgIzE1CisJYWRkCXIxLCByMSwgcjAKKwltb3YJcjAsICMweDAKKwlzdHJiCXIwLCBbcjFdCQlAIHN3aXRjaCBTQ1UgcG93ZXIgc3RhdGUgdG8gTm9ybWFsIG1vZGUKKwlyZXQJbHIKK0VORFBST0MoYXJtYWRhXzM4eF9zY3VfcG93ZXJfdXApCisKIC8qCiAgKiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0aHJvdWdoIHdoaWNoIENQVXMgZXhpdGluZyBjcHVpZGxlIGRlZXAKICAqIGlkbGUgc3RhdGUgYXJlIGdvaW5nLgogICovCiBFTlRSWShhcm1hZGFfMzcwX3hwX2NwdV9yZXN1bWUpCiBBUk1fQkU4KHNldGVuZAliZSApCQkJQCBnbyBCRTggaWYgZW50ZXJlZCBMRQorCS8qCisJICogRGlzYWJsZSB0aGUgTU1VIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGVuYWJsZWQgaW4gQm9vdFJPTSBpZgorCSAqIHRoaXMgY29kZSBpcyB1c2VkIGluIHRoZSByZXN1bWUgcGF0aCBvZiBhIHN1c3BlbmQvcmVzdW1lCisJICogY3ljbGUuCisJICovCisJbXJjCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAorCWJpYwlyMSwgIzEKKwltY3IJcDE1LCAwLCByMSwgYzEsIGMwLCAwCiAJYmwJbGxfYWRkX2NwdV90b19zbXBfZ3JvdXAKIAlibAlsbF9lbmFibGVfY29oZXJlbmN5CiAJYgljcHVfcmVzdW1lCkBAIC0yNywxMyArNDcsNyBAQAogCS8qIGRvIHdlIG5lZWQgaXQgZm9yIEFybWFkYSAzOHgqLwogQVJNX0JFOChzZXRlbmQJYmUgKQkJCUAgZ28gQkU4IGlmIGVudGVyZWQgTEUKIAlibAl2N19pbnZhbGlkYXRlX2wxCi0JbXJjICAgICBwMTUsIDQsIHIxLCBjMTUsIGMwCUAgZ2V0IFNDVSBiYXNlIGFkZHJlc3MKLQlvcnIJcjEsIHIxLCAjMHg4CQlAIFNDVSBDUFUgUG93ZXIgU3RhdHVzIFJlZ2lzdGVyCi0JbXJjCTE1LCAwLCByMCwgY3IwLCBjcjAsIDUJQCBnZXQgdGhlIENQVSBJRAotCWFuZAlyMCwgcjAsICMxNQotCWFkZAlyMSwgcjEsIHIwCi0JbW92CXIwLCAjMHgwCi0Jc3RyYglyMCwgW3IxXQkJQCBzd2l0Y2ggU0NVIHBvd2VyIHN0YXRlIHRvIE5vcm1hbCBtb2RlCisJYmwJYXJtYWRhXzM4eF9zY3VfcG93ZXJfdXAKIAliCWNwdV9yZXN1bWUKIEVORFBST0MoYXJtYWRhXzM4eF9jcHVfcmVzdW1lKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jcHUtODgxNS5jCmluZGV4IDkxMTZjYTQuLjliZGE0NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jcHUtODgxNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jcHUtODgxNS5jCkBAIC0xNDQsNiArMTQ0LDcgQEAKIGRldmljZV9pbml0Y2FsbChjcHU4ODE1X21tY3NkX2luaXQpOwogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNwdTg4MTVfYm9hcmRfY29tcGF0W10gPSB7CisJInN0LG5vbWFkaWstbmhrLTE1IiwKIAkiY2FsYW9zeXN0ZW1zLHVzYi1zODgxNSIsCiAJTlVMTCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggZjRkMDZhZS4uNmUyNDkzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtNzksNyArNzksOSBAQAogCXNlbGVjdCBDTEtTUkNfTU1JTwogCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IE1BQ0hfT01BUF9HRU5FUklDCisJc2VsZWN0IE1FTU9SWQogCXNlbGVjdCBPTUFQX0RNX1RJTUVSCisJc2VsZWN0IE9NQVBfR1BNQwogCXNlbGVjdCBQSU5DVFJMCiAJc2VsZWN0IFNPQ19CVVMKIAlzZWxlY3QgVElfUFJJVl9FRE1BCkBAIC0yMzUsMTIgKzIzNyw2IEBACiAJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAotY29uZmlnIE1BQ0hfT01BUF8zNDMwU0RQCi0JYm9vbCAiT01BUCAzNDMwIFNEUCBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKLQlkZWZhdWx0IHkKLQlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgotCiBjb25maWcgTUFDSF9OT0tJQV9OODEwCiAgICAgICAgYm9vbAogCkBAIC0yODIsMTYgKzI3OCw2IEBACiAJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DVVMKIAotY29uZmlnIE1BQ0hfVEk4MTY4RVZNCi0JYm9vbCAiVEk4MTY4IEV2YWx1YXRpb24gTW9kdWxlIgotCWRlcGVuZHMgb24gU09DX1RJODFYWAotCWRlZmF1bHQgeQotCi1jb25maWcgTUFDSF9USTgxNDhFVk0KLQlib29sICJUSTgxNDggRXZhbHVhdGlvbiBNb2R1bGUiCi0JZGVwZW5kcyBvbiBTT0NfVEk4MVhYCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBPTUFQM19FTVUKIAlib29sICJPTUFQMyBkZWJ1Z2dpbmcgcGVyaXBoZXJhbHMiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQppbmRleCBkOWU5NDEyLi4wOGNjOTQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAJLUkkKHNyY3RyZWUpL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGlkLm8gaW8ubyBjb250cm9sLm8gbXV4Lm8gZGV2aWNlcy5vIGZiLm8gc2VyaWFsLm8gZ3BtYy5vIHRpbWVyLm8gcG0ubyBcCitvYmoteSA6PSBpZC5vIGlvLm8gY29udHJvbC5vIG11eC5vIGRldmljZXMubyBmYi5vIHNlcmlhbC5vIHRpbWVyLm8gcG0ubyBcCiAJIGNvbW1vbi5vIGdwaW8ubyBkbWEubyB3ZF90aW1lci5vIGRpc3BsYXkubyBpMmMubyBoZHExdy5vIG9tYXBfaHdtb2QubyBcCiAJIG9tYXBfZGV2aWNlLm8gc3JhbS5vIGRybS5vCiAKQEAgLTExMyw3ICsxMTMsNyBAQAogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBwcm0yeHh4XzN4eHgubyBwcm0yeHh4Lm8gY20yeHh4Lm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gcHJtMnh4eF8zeHh4Lm8gcHJtM3h4eC5vIGNtM3h4eC5vCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IHZjM3h4eF9kYXRhLm8gdnAzeHh4X2RhdGEubwotb21hcC1wcmNtLTQtNS1jb21tb24JCQk9ICBjbWluc3Q0NHh4Lm8gY200NHh4Lm8gcHJtNDR4eC5vIFwKK29tYXAtcHJjbS00LTUtY29tbW9uCQkJPSAgY21pbnN0NDR4eC5vIHBybTQ0eHgubyBcCiAJCQkJCSAgIHByY21fbXB1NDR4eC5vIHBybWluc3Q0NHh4Lm8gXAogCQkJCQkgICB2YzQ0eHhfZGF0YS5vIHZwNDR4eF9kYXRhLm8KIG9iai0kKENPTkZJR19BUkNIX09NQVA0KQkJKz0gJChvbWFwLXByY20tNC01LWNvbW1vbikKQEAgLTI0Niw3ICsyNDYsNiBAQAogb2JqLSQoQ09ORklHX01BQ0hfT01BUDNfVE9SUEVETykgICAgICAgICs9IGJvYXJkLW9tYXAzbG9naWMubwogb2JqLSQoQ09ORklHX01BQ0hfT1ZFUk8pCQkrPSBib2FyZC1vdmVyby5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBKQkrPSBib2FyZC1vbWFwM3BhbmRvcmEubwotb2JqLSQoQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQKQkJKz0gYm9hcmQtMzQzMHNkcC5vCiBvYmotJChDT05GSUdfTUFDSF9OT0tJQV9OOFgwKQkJKz0gYm9hcmQtbjh4MC5vCiBvYmotJChDT05GSUdfTUFDSF9OT0tJQV9SWDUxKQkJKz0gYm9hcmQtcng1MS5vIHNkcmFtLW5va2lhLm8KIG9iai0kKENPTkZJR19NQUNIX05PS0lBX1JYNTEpCQkrPSBib2FyZC1yeDUxLXBlcmlwaGVyYWxzLm8KQEAgLTI2MCw4ICsyNTksNiBAQAogb2JqLSQoQ09ORklHX01BQ0hfQ1JBTkVCT0FSRCkJCSs9IGJvYXJkLWFtMzUxN2NyYW5lLm8KIAogb2JqLSQoQ09ORklHX01BQ0hfU0JDMzUzMCkJCSs9IGJvYXJkLW9tYXAzc3RhbGtlci5vCi1vYmotJChDT05GSUdfTUFDSF9USTgxNjhFVk0pCQkrPSBib2FyZC10aTgxNjhldm0ubwotb2JqLSQoQ09ORklHX01BQ0hfVEk4MTQ4RVZNKQkJKz0gYm9hcmQtdGk4MTY4ZXZtLm8KIAogIyBQbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdCBjb2RlCiAKQEAgLTI4NCw5ICsyODEsNiBAQAogbmFuZC0kKENPTkZJR19NVERfTkFORF9PTUFQMikJCTo9IGdwbWMtbmFuZC5vCiBvYmoteQkJCQkJKz0gJChuYW5kLW0pICQobmFuZC15KQogCi1zbWM5MXgtJChDT05GSUdfU01DOTFYKQkJCTo9IGdwbWMtc21jOTF4Lm8KLW9iai15CQkJCQkrPSAkKHNtYzkxeC1tKSAkKHNtYzkxeC15KQotCiBzbXNjOTExeC0kKENPTkZJR19TTVNDOTExWCkJCTo9IGdwbWMtc21zYzkxMXgubwogb2JqLXkJCQkJCSs9ICQoc21zYzkxMXgtbSkgJChzbXNjOTExeC15KQogaWZuZXEgKCQoQ09ORklHX0hXU1BJTkxPQ0tfT01BUCksKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9hbTMzeHgtcmVzdGFydC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9hbTMzeHgtcmVzdGFydC5jCmluZGV4IGM4OGQ4ZGY3Li41YmFjZTZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2FtMzN4eC1yZXN0YXJ0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9hbTMzeHgtcmVzdGFydC5jCkBAIC05LDggKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzN4eC5oIgotI2luY2x1ZGUgInBybTMzeHguaCIKKyNpbmNsdWRlICJwcm0uaCIKIAogLyoqCiAgKiBhbTN4eF9yZXN0YXJ0IC0gdHJpZ2dlciBhIHNvZnR3YXJlIHJlc3RhcnQgb2YgdGhlIFNvQwpAQCAtMjQsMTIgKzIzLDUgQEAKIHsKIAkvKiBUT0RPOiBIYW5kbGUgbW9kZSBhbmQgY21kIGlmIG5lY2Vzc2FyeSAqLwogCi0JYW0zM3h4X3BybV9ybXdfcmVnX2JpdHMoQU0zM1hYX1JTVF9HTE9CQUxfV0FSTV9TV19NQVNLLAotCQkJCUFNMzNYWF9SU1RfR0xPQkFMX1dBUk1fU1dfTUFTSywKLQkJCQlBTTMzWFhfUFJNX0RFVklDRV9NT0QsCi0JCQkJQU0zM1hYX1BSTV9SU1RDVFJMX09GRlNFVCk7Ci0KLQkvKiBPQ1AgYmFycmllciAqLwotCSh2b2lkKWFtMzN4eF9wcm1fcmVhZF9yZWcoQU0zM1hYX1BSTV9ERVZJQ0VfTU9ELAotCQkJCSAgQU0zM1hYX1BSTV9SU1RDVFJMX09GRlNFVCk7CisJb21hcF9wcm1fcmVzZXRfc3lzdGVtKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjFhMzA0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMyICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cwotICoKLSAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKLSAqCi0gKiBJbml0aWFsIGNvZGU6IFN5ZWQgTW9oYW1tZWQgS2hhc2ltCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zcGktb21hcDItbWNzcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL29tYXAtdHdsNDAzMC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9waHkuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSA8bGludXgvb21hcC1kbWEuaD4KLSNpbmNsdWRlIDx2aWRlby9vbWFwZHNzLmg+Ci0jaW5jbHVkZSA8dmlkZW8vb21hcC1wYW5lbC1kYXRhLmg+Ci0KLSNpbmNsdWRlICJncG1jLmgiCi0jaW5jbHVkZSAiZ3BtYy1zbWM5MXguaCIKLQotI2luY2x1ZGUgInNvYy5oIgotI2luY2x1ZGUgImJvYXJkLWZsYXNoLmgiCi0jaW5jbHVkZSAibXV4LmgiCi0jaW5jbHVkZSAic2RyYW0tcWltb25kYS1oeWIxOG01MTIxNjBhZi02LmgiCi0jaW5jbHVkZSAiaHNtbWMuaCIKLSNpbmNsdWRlICJwbS5oIgotI2luY2x1ZGUgImNvbnRyb2wuaCIKLSNpbmNsdWRlICJjb21tb24tYm9hcmQtZGV2aWNlcy5oIgotCi0jZGVmaW5lIENPTkZJR19ESVNBQkxFX0hGQ0xLIDEKLQotI2RlZmluZSBTRFAzNDMwX1RTX0dQSU9fSVJRX1NEUFYxCTMKLSNkZWZpbmUgU0RQMzQzMF9UU19HUElPX0lSUV9TRFBWMgkyCi0KLSNkZWZpbmUgRU5BQkxFX1ZBVVgzX0RFRElDQVRFRAkweDAzCi0jZGVmaW5lIEVOQUJMRV9WQVVYM19ERVZfR1JQCTB4MjAKLQotI2RlZmluZSBUV0w0MDMwX01TRUNVUkVfR1BJTyAyMgotCi1zdGF0aWMgdWludDMyX3QgYm9hcmRfa2V5bWFwW10gPSB7Ci0JS0VZKDAsIDAsIEtFWV9MRUZUKSwKLQlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKLQlLRVkoMCwgMiwgS0VZX0EpLAotCUtFWSgwLCAzLCBLRVlfQiksCi0JS0VZKDAsIDQsIEtFWV9DKSwKLQlLRVkoMSwgMCwgS0VZX0RPV04pLAotCUtFWSgxLCAxLCBLRVlfVVApLAotCUtFWSgxLCAyLCBLRVlfRSksCi0JS0VZKDEsIDMsIEtFWV9GKSwKLQlLRVkoMSwgNCwgS0VZX0cpLAotCUtFWSgyLCAwLCBLRVlfRU5URVIpLAotCUtFWSgyLCAxLCBLRVlfSSksCi0JS0VZKDIsIDIsIEtFWV9KKSwKLQlLRVkoMiwgMywgS0VZX0spLAotCUtFWSgyLCA0LCBLRVlfMyksCi0JS0VZKDMsIDAsIEtFWV9NKSwKLQlLRVkoMywgMSwgS0VZX04pLAotCUtFWSgzLCAyLCBLRVlfTyksCi0JS0VZKDMsIDMsIEtFWV9QKSwKLQlLRVkoMywgNCwgS0VZX1EpLAotCUtFWSg0LCAwLCBLRVlfUiksCi0JS0VZKDQsIDEsIEtFWV80KSwKLQlLRVkoNCwgMiwgS0VZX1QpLAotCUtFWSg0LCAzLCBLRVlfVSksCi0JS0VZKDQsIDQsIEtFWV9EKSwKLQlLRVkoNSwgMCwgS0VZX1YpLAotCUtFWSg1LCAxLCBLRVlfVyksCi0JS0VZKDUsIDIsIEtFWV9MKSwKLQlLRVkoNSwgMywgS0VZX1MpLAotCUtFWSg1LCA0LCBLRVlfSCksCi0JMAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgYm9hcmRfbWFwX2RhdGEgPSB7Ci0JLmtleW1hcAkJCT0gYm9hcmRfa2V5bWFwLAotCS5rZXltYXBfc2l6ZQkJPSBBUlJBWV9TSVpFKGJvYXJkX2tleW1hcCksCi19OwotCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgc2RwMzQzMF9rcF9kYXRhID0gewotCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKLQkucm93cwkJPSA1LAotCS5jb2xzCQk9IDYsCi0JLnJlcAkJPSAxLAotfTsKLQotI2RlZmluZSBTRFAzNDMwX0xDRF9QQU5FTF9CQUNLTElHSFRfR1BJTwk4Ci0jZGVmaW5lIFNEUDM0MzBfTENEX1BBTkVMX0VOQUJMRV9HUElPCQk1Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZHAzNDMwX2Rpc3BsYXlfaW5pdCh2b2lkKQotewotCWludCByOwotCi0JLyoKLQkgKiB0aGUgYmFja2xpZ2h0IEdQSU8gZG9lc24ndCBkaXJlY3RseSBnbyB0byB0aGUgcGFuZWwsIGl0IGVuYWJsZXMKLQkgKiBhbiBpbnRlcm5hbCBjaXJjdWl0IG9uIDM0MzBzZHAgdG8gY3JlYXRlIHRoZSBzaWduYWwgVl9CS0xfMjhWLAotCSAqIHRoaXMgaXMgY29ubmVjdGVkIHRvIExFRCsgcGluIG9mIHRoZSBzaGFycCBwYW5lbC4gVGhpcyBHUElPCi0JICogaXMgbGVmdCBlbmFibGVkIGluIHRoZSBib2FyZCBmaWxlLCBhbmQgbm90IHBhc3NlZCB0byB0aGUgcGFuZWwKLQkgKiBhcyBwbGF0Zm9ybV9kYXRhLgotCSAqLwotCXIgPSBncGlvX3JlcXVlc3Rfb25lKFNEUDM0MzBfTENEX1BBTkVMX0JBQ0tMSUdIVF9HUElPLAotCQkJCUdQSU9GX09VVF9JTklUX0hJR0gsICJMQ0QgQmFja2xpZ2h0Iik7Ci0JaWYgKHIpCi0JCXByX2VycigiZmFpbGVkIHRvIGdldCBMQ0QgQmFja2xpZ2h0IEdQSU9cbiIpOwotCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGFuZWxfc2hhcnBfbHMwMzd2N2R3MDFfcGxhdGZvcm1fZGF0YSBzZHAzNDMwX2xjZF9wZGF0YSA9IHsKLQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJsY2QiLAotCS5zb3VyY2UgICAgICAgICAgICAgICAgID0gImRwaS4wIiwKLQotCS5kYXRhX2xpbmVzCQk9IDE2LAotCi0JLnJlc2JfZ3BpbwkJPSBTRFAzNDMwX0xDRF9QQU5FTF9FTkFCTEVfR1BJTywKLQkuaW5pX2dwaW8JCT0gLTEsCi0JLm1vX2dwaW8JCT0gLTEsCi0JLmxyX2dwaW8JCT0gLTEsCi0JLnVkX2dwaW8JCT0gLTEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHAzNDMwX2xjZF9kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgICAgICAgICAgPSAicGFuZWwtc2hhcnAtbHMwMzd2N2R3MDEiLAotCS5pZCAgICAgICAgICAgICAgICAgICAgID0gMCwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgICAgICA9ICZzZHAzNDMwX2xjZF9wZGF0YSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY29ubmVjdG9yX2R2aV9wbGF0Zm9ybV9kYXRhIHNkcDM0MzBfZHZpX2Nvbm5lY3Rvcl9wZGF0YSA9IHsKLQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJkdmkiLAotCS5zb3VyY2UgICAgICAgICAgICAgICAgID0gInRmcDQxMC4wIiwKLQkuaTJjX2J1c19udW0gICAgICAgICAgICA9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RwMzQzMF9kdmlfY29ubmVjdG9yX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJjb25uZWN0b3ItZHZpIiwKLQkuaWQgICAgICAgICAgICAgICAgICAgICA9IDAsCi0JLmRldi5wbGF0Zm9ybV9kYXRhICAgICAgPSAmc2RwMzQzMF9kdmlfY29ubmVjdG9yX3BkYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBlbmNvZGVyX3RmcDQxMF9wbGF0Zm9ybV9kYXRhIHNkcDM0MzBfdGZwNDEwX3BkYXRhID0gewotCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInRmcDQxMC4wIiwKLQkuc291cmNlICAgICAgICAgICAgICAgICA9ICJkcGkuMCIsCi0JLmRhdGFfbGluZXMgICAgICAgICAgICAgPSAyNCwKLQkucG93ZXJfZG93bl9ncGlvICAgICAgICA9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RwMzQzMF90ZnA0MTBfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInRmcDQxMCIsCi0JLmlkICAgICAgICAgICAgICAgICAgICAgPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YSAgICAgID0gJnNkcDM0MzBfdGZwNDEwX3BkYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBjb25uZWN0b3JfYXR2X3BsYXRmb3JtX2RhdGEgc2RwMzQzMF90dl9wZGF0YSA9IHsKLQkubmFtZSA9ICJ0diIsCi0JLnNvdXJjZSA9ICJ2ZW5jLjAiLAotCS5jb25uZWN0b3JfdHlwZSA9IE9NQVBfRFNTX1ZFTkNfVFlQRV9TVklERU8sCi0JLmludmVydF9wb2xhcml0eSA9IGZhbHNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RwMzQzMF90dl9jb25uZWN0b3JfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICAgICAgICAgID0gImNvbm5lY3Rvci1hbmFsb2ctdHYiLAotCS5pZCAgICAgICAgICAgICAgICAgICAgID0gMCwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgICAgICA9ICZzZHAzNDMwX3R2X3BkYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvIHNkcDM0MzBfZHNzX2RhdGEgPSB7Ci0JLmRlZmF1bHRfZGlzcGxheV9uYW1lID0gImxjZCIsCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gPSB7Ci0JewotCQkubW1jCQk9IDEsCi0JCS8qIDggYml0cyAoZGVmYXVsdCkgcmVxdWlyZXMgUzYuMyA9PSBPTiwKLQkJICogc28gdGhlIFNJTSBjYXJkIGlzbid0IHVzZWQ7IGVsc2UgNCBiaXRzLgotCQkgKi8KLQkJLmNhcHMJCT0gTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF84X0JJVF9EQVRBLAotCQkuZ3Bpb193cAk9IDQsCi0JCS5kZWZlcnJlZAk9IHRydWUsCi0JfSwKLQl7Ci0JCS5tbWMJCT0gMiwKLQkJLmNhcHMJCT0gTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF84X0JJVF9EQVRBLAotCQkuZ3Bpb193cAk9IDcsCi0JCS5kZWZlcnJlZAk9IHRydWUsCi0JfSwKLQl7fQkvKiBUZXJtaW5hdG9yICovCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfdHc0MDMwX3BkYXRhIG9tYXBfdHdsNDAzMF9hdWRpb19kYXRhID0gewotCS52b2ljZV9jb25uZWN0ZWQgPSB0cnVlLAotCS5jdXN0b21fcm91dGluZwk9IHRydWUsCi0KLQkuaGFzX2hzCQk9IE9NQVBfVFdMNDAzMF9MRUZUIHwgT01BUF9UV0w0MDMwX1JJR0hULAotCS5oYXNfaGYJCT0gT01BUF9UV0w0MDMwX0xFRlQgfCBPTUFQX1RXTDQwMzBfUklHSFQsCi0KLQkuaGFzX21haW5taWMJPSB0cnVlLAotCS5oYXNfc3VibWljCT0gdHJ1ZSwKLQkuaGFzX2hzbWljCT0gdHJ1ZSwKLQkuaGFzX2xpbmVpbgk9IE9NQVBfVFdMNDAzMF9MRUZUIHwgT01BUF9UV0w0MDMwX1JJR0hULAotfTsKLQotc3RhdGljIGludCBzZHAzNDMwX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCi17Ci0JLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpLAotCSAqIGdwaW8gKyAxIGlzICJtbWMxX2NkIiAoaW5wdXQvSVJRKQotCSAqLwotCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7Ci0JbW1jWzFdLmdwaW9fY2QgPSBncGlvICsgMTsKLQlvbWFwX2hzbW1jX2xhdGVfaW5pdChtbWMpOwotCi0JLyogZ3BpbyArIDcgaXMgInN1Yl9sY2RfZW5fYmtsIiAob3V0cHV0L1BXTTEpICovCi0JZ3Bpb19yZXF1ZXN0X29uZShncGlvICsgNywgR1BJT0ZfT1VUX0lOSVRfTE9XLCAic3ViX2xjZF9lbl9ia2wiKTsKLQotCS8qIGdwaW8gKyAxNSBpcyAic3ViX2xjZF9uUlNUIiAob3V0cHV0KSAqLwotCWdwaW9fcmVxdWVzdF9vbmUoZ3BpbyArIDE1LCBHUElPRl9PVVRfSU5JVF9MT1csICJzdWJfbGNkX25SU1QiKTsKLQotCW9tYXBfdHdsNDAzMF9hdWRpb19kYXRhLmphY2tfZGV0ZWN0ID0gZ3BpbyArIDI7Ci0Jb21hcF90d2w0MDMwX2F1ZGlvX2luaXQoIlNEUDM0MzAiLCAmb21hcF90d2w0MDMwX2F1ZGlvX2RhdGEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEgc2RwMzQzMF9ncGlvX2RhdGEgPSB7Ci0JLnB1bGxkb3ducwk9IEJJVCgyKSB8IEJJVCg2KSB8IEJJVCg4KSB8IEJJVCgxMykKLQkJCQl8IEJJVCgxNikgfCBCSVQoMTcpLAotCS5zZXR1cAkJPSBzZHAzNDMwX3R3bF9ncGlvX3NldHVwLAotfTsKLQotLyogcmVndWxhdG9yIGNvbnN1bWVyIG1hcHBpbmdzICovCi0KLS8qIGFkczc4NDYgb24gU1BJICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92YXV4M19zdXBwbGllc1tdID0gewotCVJFR1VMQVRPUl9TVVBQTFkoInZjYyIsICJzcGkxLjAiKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZtbWMxX3N1cHBsaWVzW10gPSB7Ci0JUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJvbWFwX2hzbW1jLjAiKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZzaW1fc3VwcGxpZXNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jX2F1eCIsICJvbWFwX2hzbW1jLjAiKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZtbWMyX3N1cHBsaWVzW10gPSB7Ci0JUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJvbWFwX2hzbW1jLjEiKSwKLX07Ci0KLS8qCi0gKiBBcHBseSBhbGwgdGhlIGZpeGVkIHZvbHRhZ2VzIHNpbmNlIG1vc3QgdmVyc2lvbnMgb2YgVS1Cb290Ci0gKiBkb24ndCBib3RoZXIgd2l0aCB0aGF0IGluaXRpYWxpemF0aW9uLgotICovCi0KLS8qIFZBVVgxIGZvciBtYWluYm9hcmQgKGlyZGEgYW5kIHN1Yi1sY2QpICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92YXV4MSA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5taW5fdVYJCQk9IDI4MDAwMDAsCi0JCS5tYXhfdVYJCQk9IDI4MDAwMDAsCi0JCS5hcHBseV91VgkJPSB0cnVlLAotCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAotCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCi0JCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKLQkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotfTsKLQotLyogVkFVWDIgZm9yIGNhbWVyYSBtb2R1bGUgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZhdXgyID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm1pbl91VgkJCT0gMjgwMDAwMCwKLQkJLm1heF91VgkJCT0gMjgwMDAwMCwKLQkJLmFwcGx5X3VWCQk9IHRydWUsCi0JCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCi0JCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKLQkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQotCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi19OwotCi0vKiBWQVVYMyBmb3IgTENEIGJvYXJkICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92YXV4MyA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5taW5fdVYJCQk9IDI4MDAwMDAsCi0JCS5tYXhfdVYJCQk9IDI4MDAwMDAsCi0JCS5hcHBseV91VgkJPSB0cnVlLAotCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAotCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCi0JCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKLQkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJCT0gQVJSQVlfU0laRShzZHAzNDMwX3ZhdXgzX3N1cHBsaWVzKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMJCT0gc2RwMzQzMF92YXV4M19zdXBwbGllcywKLX07Ci0KLS8qIFZBVVg0IGZvciBPTUFQIFZERF9DU0kyIChjYW1lcmEpICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92YXV4NCA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5taW5fdVYJCQk9IDE4MDAwMDAsCi0JCS5tYXhfdVYJCQk9IDE4MDAwMDAsCi0JCS5hcHBseV91VgkJPSB0cnVlLAotCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAotCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCi0JCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKLQkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotfTsKLQotLyogVk1NQzEgZm9yIE9NQVAgVkREX01NQzEgKGkvbykgYW5kIE1NQzEgY2FyZCAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdm1tYzEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubWluX3VWCQkJPSAxODUwMDAwLAotCQkubWF4X3VWCQkJPSAzMTUwMDAwLAotCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAotCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCi0JCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKLQkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKLQkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKHNkcDM0MzBfdm1tYzFfc3VwcGxpZXMpLAotCS5jb25zdW1lcl9zdXBwbGllcwk9IHNkcDM0MzBfdm1tYzFfc3VwcGxpZXMsCi19OwotCi0vKiBWTU1DMiBmb3IgTU1DMiBjYXJkICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92bW1jMiA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5taW5fdVYJCQk9IDE4NTAwMDAsCi0JCS5tYXhfdVYJCQk9IDE4NTAwMDAsCi0JCS5hcHBseV91VgkJPSB0cnVlLAotCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAotCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCi0JCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKLQkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKHNkcDM0MzBfdm1tYzJfc3VwcGxpZXMpLAotCS5jb25zdW1lcl9zdXBwbGllcwk9IHNkcDM0MzBfdm1tYzJfc3VwcGxpZXMsCi19OwotCi0vKiBWU0lNIGZvciBPTUFQIFZERF9NTUMxQSAoaS9vIGZvciBEQVQ0Li5EQVQ3KSAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdnNpbSA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5taW5fdVYJCQk9IDE4MDAwMDAsCi0JCS5tYXhfdVYJCQk9IDMwMDAwMDAsCi0JCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCi0JCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKLQkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQotCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQotCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUoc2RwMzQzMF92c2ltX3N1cHBsaWVzKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSBzZHAzNDMwX3ZzaW1fc3VwcGxpZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSBzZHAzNDMwX3R3bGRhdGEgPSB7Ci0JLyogcGxhdGZvcm1fZGF0YSBmb3IgY2hpbGRyZW4gZ29lcyBoZXJlICovCi0JLmdwaW8JCT0gJnNkcDM0MzBfZ3Bpb19kYXRhLAotCS5rZXlwYWQJCT0gJnNkcDM0MzBfa3BfZGF0YSwKLQotCS52YXV4MQkJPSAmc2RwMzQzMF92YXV4MSwKLQkudmF1eDIJCT0gJnNkcDM0MzBfdmF1eDIsCi0JLnZhdXgzCQk9ICZzZHAzNDMwX3ZhdXgzLAotCS52YXV4NAkJPSAmc2RwMzQzMF92YXV4NCwKLQkudm1tYzEJCT0gJnNkcDM0MzBfdm1tYzEsCi0JLnZtbWMyCQk9ICZzZHAzNDMwX3ZtbWMyLAotCS52c2ltCQk9ICZzZHAzNDMwX3ZzaW0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwMzQzMF9pMmNfaW5pdCh2b2lkKQotewotCS8qIGkyYzEgZm9yIFBNSUMgb25seSAqLwotCW9tYXAzX3BtaWNfZ2V0X2NvbmZpZygmc2RwMzQzMF90d2xkYXRhLAotCQkJVFdMX0NPTU1PTl9QREFUQV9VU0IgfCBUV0xfQ09NTU9OX1BEQVRBX0JDSSB8Ci0JCQlUV0xfQ09NTU9OX1BEQVRBX01BREMgfCBUV0xfQ09NTU9OX1BEQVRBX0FVRElPLAotCQkJVFdMX0NPTU1PTl9SRUdVTEFUT1JfVkRBQyB8IFRXTF9DT01NT05fUkVHVUxBVE9SX1ZQTEwyKTsKLQlzZHAzNDMwX3R3bGRhdGEudmRhYy0+Y29uc3RyYWludHMuYXBwbHlfdVYgPSB0cnVlOwotCXNkcDM0MzBfdHdsZGF0YS52cGxsMi0+Y29uc3RyYWludHMuYXBwbHlfdVYgPSB0cnVlOwotCXNkcDM0MzBfdHdsZGF0YS52cGxsMi0+Y29uc3RyYWludHMubmFtZSA9ICJWRFZJIjsKLQotCXNkcDM0MzBfdHdsZGF0YS5hdWRpby0+Y29kZWMtPmhzX2V4dG11dGUgPSAxOwotCXNkcDM0MzBfdHdsZGF0YS5hdWRpby0+Y29kZWMtPmhzX2V4dG11dGVfZ3BpbyA9IC1FSU5WQUw7Ci0KLQlvbWFwM19wbWljX2luaXQoInR3bDQwMzAiLCAmc2RwMzQzMF90d2xkYXRhKTsKLQotCS8qIGkyYzIgb24gY2FtZXJhIGNvbm5lY3RvciAoZm9yIHNlbnNvciBjb250cm9sKSBhbmQgb3B0aW9uYWwgaXNwMTMwMSAqLwotCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygyLCA0MDAsIE5VTEwsIDApOwotCS8qIGkyYzMgb24gZGlzcGxheSBjb25uZWN0b3IgKGZvciBEVkksIHRmcDQxMCkgKi8KLQlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgNDAwLCBOVUxMLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkgfHwgZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCBvbWFwX3NtYzkxeF9wbGF0Zm9ybV9kYXRhIGJvYXJkX3NtYzkxeF9kYXRhID0gewotCS5jcwkJPSAzLAotCS5mbGFncwkJPSBHUE1DX01VWF9BRERfREFUQSB8IEdQTUNfVElNSU5HU19TTUM5MUM5NiB8Ci0JCQkJSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYm9hcmRfc21jOTF4X2luaXQodm9pZCkKLXsKLQlpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkKLQkJYm9hcmRfc21jOTF4X2RhdGEuZ3Bpb19pcnEgPSA2OwotCWVsc2UKLQkJYm9hcmRfc21jOTF4X2RhdGEuZ3Bpb19pcnEgPSAyOTsKLQotCWdwbWNfc21jOTF4X2luaXQoJmJvYXJkX3NtYzkxeF9kYXRhKTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIGJvYXJkX3NtYzkxeF9pbml0KHZvaWQpCi17Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBlbmFibGVfYm9hcmRfd2FrZXVwX3NvdXJjZSh2b2lkKQotewotCS8qIFQyIGludGVycnVwdCBsaW5lIChrZXlwYWQpICovCi0Jb21hcF9tdXhfaW5pdF9zaWduYWwoInN5c19uaXJxIiwKLQkJT01BUF9XQUtFVVBfRU4gfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYmhzX3BoeV9kYXRhIHBoeV9kYXRhW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5wb3J0ID0gMSwKLQkJLnJlc2V0X2dwaW8gPSA1NywKLQkJLnZjY19ncGlvID0gLUVJTlZBTCwKLQl9LAotCXsKLQkJLnBvcnQgPSAyLAotCQkucmVzZXRfZ3BpbyA9IDYxLAotCQkudmNjX2dwaW8gPSAtRUlOVkFMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYmhzX29tYXBfcGxhdGZvcm1fZGF0YSB1c2Joc19iZGF0YSBfX2luaXRkYXRhID0gewotCi0JLnBvcnRfbW9kZVswXSA9IE9NQVBfRUhDSV9QT1JUX01PREVfUEhZLAotCS5wb3J0X21vZGVbMV0gPSBPTUFQX0VIQ0lfUE9SVF9NT0RFX1BIWSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfT01BUF9NVVgKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKLQl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAotfTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX211eAlOVUxMCi0jZW5kaWYKLQotLyoKLSAqIFNEUDM0MzAgVjIgQm9hcmQgQ1Mgb3JnYW5pemF0aW9uCi0gKiBEaWZmZXJlbnQgZnJvbSBTRFAzNDMwIFYxLiBOb3cgNCBzd2l0Y2hlcyB1c2VkIHRvIHNwZWNpZnkgQ1MKLSAqCi0gKiBTZWUgYWxzbyB0aGUgU3dpdGNoIFM4IHNldHRpbmdzIGluIHRoZSBjb21tZW50cy4KLSAqLwotc3RhdGljIGNoYXIgY2hpcF9zZWxfMzQzMFtdW0dQTUNfQ1NfTlVNXSA9IHsKLQl7UERDX05PUiwgUERDX05BTkQsIFBEQ19PTkVOQU5ELCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMTEgKi8KLQl7UERDX09ORU5BTkQsIFBEQ19OQU5ELCBQRENfTk9SLCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMTAgKi8KLQl7UERDX05BTkQsIFBEQ19PTkVOQU5ELCBQRENfTk9SLCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMDEgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzZHBfbm9yX3BhcnRpdGlvbnNbXSA9IHsKLQkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCi0JewotCQkubmFtZQkJPSAiQm9vdGxvYWRlci1OT1IiLAotCQkub2Zmc2V0CQk9IDAsCi0JCS5zaXplCQk9IFNaXzI1NkssCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQkvKiBib290bG9hZGVyIHBhcmFtcyBpbiB0aGUgbmV4dCBzZWN0b3IgKi8KLQl7Ci0JCS5uYW1lCQk9ICJQYXJhbXMtTk9SIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCS5zaXplCQk9IFNaXzI1NkssCi0JCS5tYXNrX2ZsYWdzCT0gMCwKLQl9LAotCS8qIGtlcm5lbCAqLwotCXsKLQkJLm5hbWUJCT0gIktlcm5lbC1OT1IiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJCT0gU1pfMk0sCi0JCS5tYXNrX2ZsYWdzCT0gMAotCX0sCi0JLyogZmlsZSBzeXN0ZW0gKi8KLQl7Ci0JCS5uYW1lCQk9ICJGaWxlc3lzdGVtLU5PUiIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAotCQkubWFza19mbGFncwk9IDAKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2RwX29uZW5hbmRfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJCT0gIlgtTG9hZGVyLU9uZU5BTkQiLAotCQkub2Zmc2V0CQk9IDAsCi0JCS5zaXplCQk9IDQgKiAoNjQgKiAyMDQ4KSwKLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LAotCXsKLQkJLm5hbWUJCT0gIlUtQm9vdC1PbmVOQU5EIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCS5zaXplCQk9IDIgKiAoNjQgKiAyMDQ4KSwKLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LAotCXsKLQkJLm5hbWUJCT0gIlUtQm9vdCBFbnZpcm9ubWVudC1PbmVOQU5EIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCS5zaXplCQk9IDEgKiAoNjQgKiAyMDQ4KSwKLQl9LAotCXsKLQkJLm5hbWUJCT0gIktlcm5lbC1PbmVOQU5EIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCS5zaXplCQk9IDE2ICogKDY0ICogMjA0OCksCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJGaWxlIFN5c3RlbS1PbmVOQU5EIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzZHBfbmFuZF9wYXJ0aXRpb25zW10gPSB7Ci0JLyogQWxsIHRoZSBwYXJ0aXRpb24gc2l6ZXMgYXJlIGxpc3RlZCBpbiB0ZXJtcyBvZiBOQU5EIGJsb2NrIHNpemUgKi8KLQl7Ci0JCS5uYW1lCQk9ICJYLUxvYWRlci1OQU5EIiwKLQkJLm9mZnNldAkJPSAwLAotCQkuc2l6ZQkJPSA0ICogKDY0ICogMjA0OCksCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJVLUJvb3QtTkFORCIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDgwMDAwICovCi0JCS5zaXplCQk9IDEwICogKDY0ICogMjA0OCksCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJCb290IEVudi1OQU5EIiwKLQotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgxYzAwMDAgKi8KLQkJLnNpemUJCT0gNiAqICg2NCAqIDIwNDgpLAotCX0sCi0JewotCQkubmFtZQkJPSAiS2VybmVsLU5BTkQiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyODAwMDAgKi8KLQkJLnNpemUJCT0gNDAgKiAoNjQgKiAyMDQ4KSwKLQl9LAotCXsKLQkJLm5hbWUJCT0gIkZpbGUgU3lzdGVtIC0gTkFORCIsCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDc4MDAwMCAqLwotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BhcnRpdGlvbnMgc2RwX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5wYXJ0cyA9IHNkcF9ub3JfcGFydGl0aW9ucywKLQkJLm5yX3BhcnRzID0gQVJSQVlfU0laRShzZHBfbm9yX3BhcnRpdGlvbnMpLAotCX0sCi0JewotCQkucGFydHMgPSBzZHBfb25lbmFuZF9wYXJ0aXRpb25zLAotCQkubnJfcGFydHMgPSBBUlJBWV9TSVpFKHNkcF9vbmVuYW5kX3BhcnRpdGlvbnMpLAotCX0sCi0JewotCQkucGFydHMgPSBzZHBfbmFuZF9wYXJ0aXRpb25zLAotCQkubnJfcGFydHMgPSBBUlJBWV9TSVpFKHNkcF9uYW5kX3BhcnRpdGlvbnMpLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF8zNDMwc2RwX2luaXQodm9pZCkKLXsKLQlpbnQgZ3Bpb19wZW5kb3duOwotCi0Jb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKLQlvbWFwX2hzbW1jX2luaXQobW1jKTsKLQlvbWFwMzQzMF9pMmNfaW5pdCgpOwotCW9tYXBfZGlzcGxheV9pbml0KCZzZHAzNDMwX2Rzc19kYXRhKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNkcDM0MzBfbGNkX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZHAzNDMwX3RmcDQxMF9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2RwMzQzMF9kdmlfY29ubmVjdG9yX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZHAzNDMwX3R2X2Nvbm5lY3Rvcl9kZXZpY2UpOwotCi0JaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApCi0JCWdwaW9fcGVuZG93biA9IFNEUDM0MzBfVFNfR1BJT19JUlFfU0RQVjI7Ci0JZWxzZQotCQlncGlvX3BlbmRvd24gPSBTRFAzNDMwX1RTX0dQSU9fSVJRX1NEUFYxOwotCW9tYXBfYWRzNzg0Nl9pbml0KDEsIGdwaW9fcGVuZG93biwgMzEwLCBOVUxMKTsKLQlvbWFwX3NlcmlhbF9pbml0KCk7Ci0Jb21hcF9zZHJjX2luaXQoaHliMThtNTEyMTYwYWY2X3NkcmNfcGFyYW1zLCBOVUxMKTsKLQl1c2JfYmluZF9waHkoIm11c2ItaGRyYy4wLmF1dG8iLCAwLCAidHdsNDAzMF91c2IiKTsKLQl1c2JfbXVzYl9pbml0KE5VTEwpOwotCWJvYXJkX3NtYzkxeF9pbml0KCk7Ci0JYm9hcmRfZmxhc2hfaW5pdChzZHBfZmxhc2hfcGFydGl0aW9ucywgY2hpcF9zZWxfMzQzMCwgMCk7Ci0Jc2RwMzQzMF9kaXNwbGF5X2luaXQoKTsKLQllbmFibGVfYm9hcmRfd2FrZXVwX3NvdXJjZSgpOwotCi0JdXNiaHNfaW5pdF9waHlzKHBoeV9kYXRhLCBBUlJBWV9TSVpFKHBoeV9kYXRhKSk7Ci0JdXNiaHNfaW5pdCgmdXNiaHNfYmRhdGEpOwotfQotCi1NQUNISU5FX1NUQVJUKE9NQVBfMzQzMFNEUCwgIk9NQVAzNDMwIDM0MzBTRFAgYm9hcmQiKQotCS8qIE1haW50YWluZXI6IFN5ZWQgS2hhc2ltIC0gVGV4YXMgSW5zdHJ1bWVudHMgSW5jICovCi0JLmF0YWdfb2Zmc2V0CT0gMHgxMDAsCi0JLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCi0JLmluaXRfZWFybHkJPSBvbWFwMzQzMF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IG9tYXAzX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUJPSBvbWFwXzM0MzBzZHBfaW5pdCwKLQkuaW5pdF9sYXRlCT0gb21hcDM0MzBfaW5pdF9sYXRlLAotCS5pbml0X3RpbWUJPSBvbWFwM19zeW5jMzJrX3RpbWVyX2luaXQsCi0JLnJlc3RhcnQJPSBvbWFwM3h4eF9yZXN0YXJ0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3Y3JhbmUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3Y3JhbmUuYwppbmRleCAyMTJjMzE2Li44MTY4ZGRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2NyYW5lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdjcmFuZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKaW5kZXggYzZkZjhlZWMuLjkxNzM4YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tb21hcC5oPgogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDI0Lmg+CkBAIC01MSw4ICs1Miw2IEBACiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCiAjaW5jbHVkZSAiaHNtbWMuaCIKICNpbmNsdWRlICJjb21tb24tYm9hcmQtZGV2aWNlcy5oIgotI2luY2x1ZGUgImdwbWMuaCIKLSNpbmNsdWRlICJncG1jLW5hbmQuaCIKIAogI2RlZmluZSBDTV9UMzVfR1BJT19QRU5ET1dOCQk1NwogI2RlZmluZSBTQl9UMzVfVVNCX0hVQl9SRVNFVF9HUElPCTE2NwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCmluZGV4IDhhMmMxNjcuLjc5NDc1NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLXYzMDIwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CkBAIC00MSw3ICs0Miw2IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL210ZC1uYW5kLW9tYXAyLmg+Ci0jaW5jbHVkZSAiZ3BtYy5oIgogCiAjaW5jbHVkZSAiYW0zNXh4LmgiCiAKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlICJoc21tYy5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAjaW5jbHVkZSAiYW0zNXh4LWVtYWMuaCIKLSNpbmNsdWRlICJncG1jLW5hbmQuaCIKIAogI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19HUElPX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgY21fdDM1MTdfbGVkc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5jCmluZGV4IDJkMjQ1YzIuLjcwYjIxY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMjMsOCArMjQsNiBAQAogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgImJvYXJkLWZsYXNoLmgiCi0jaW5jbHVkZSAiZ3BtYy1vbmVuYW5kLmgiCi0jaW5jbHVkZSAiZ3BtYy1uYW5kLmgiCiAKICNkZWZpbmUgUkVHX0ZQR0FfUkVWCQkJMHgxMAogI2RlZmluZSBSRUdfRlBHQV9ESVBfU1dJVENIX0lOUFVUMgkweDYwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmgKaW5kZXggMmZiNWQ0MS4uZWE5YWFlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guaApAQCAtMTIsNyArMTIsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSAiZ3BtYy5oIgogCiAjZGVmaW5lIFBEQ19OT1IJCTEKICNkZWZpbmUgUERDX05BTkQJMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW44eDAuYwppbmRleCA5Nzc2N2EyLi5iNjQ0M2E0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW44eDAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW44eDAuYwpAQCAtMjEsOCArMjEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zcGktb21hcDItbWNzcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL210ZC1vbmVuYW5kLW9tYXAyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tbWMtb21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9tZW5lbGF1cy5oPgogI2luY2x1ZGUgPHNvdW5kL3RsdjMyMGFpYzN4Lmg+CiAKQEAgLTMyLDcgKzMzLDYgQEAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJtbWMuaCIKICNpbmNsdWRlICJzb2MuaCIKLSNpbmNsdWRlICJncG1jLW9uZW5hbmQuaCIKICNpbmNsdWRlICJjb21tb24tYm9hcmQtZGV2aWNlcy5oIgogCiAjZGVmaW5lIFRVU0I2MDEwX0FTWU5DX0NTCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IGYzMjIwMTYuLjdmMTcwODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KICNpbmNsdWRlIDxsaW51eC93bDEyeHguaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CkBAIC01MSw3ICs1Miw2IEBACiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCiAjaW5jbHVkZSAiaHNtbWMuaCIKICNpbmNsdWRlICJjb21tb24tYm9hcmQtZGV2aWNlcy5oIgotI2luY2x1ZGUgImdwbWMtbmFuZC5oIgogCiAjZGVmaW5lIFBBTkRPUkFfV0lGSV9JUlFfR1BJTwkJMjEKICNkZWZpbmUgUEFORE9SQV9XSUZJX05SRVNFVF9HUElPCTIzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IGRkZmM4ZGYuLjAzNTAyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlci9pc3AxNzA0X2NoYXJnZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1vbWFwMi1tY3NwaS5oPgpAQCAtMzIsNyArMzMsNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSA8bGludXgvb21hcC1kbWEuaD4KLSNpbmNsdWRlICJncG1jLXNtYzkxeC5oIgogCiAjaW5jbHVkZSAiYm9hcmQtcng1MS5oIgogCkBAIC01NSw4ICs1NSw2IEBACiAjaW5jbHVkZSAib21hcC1wbS5oIgogI2luY2x1ZGUgImhzbW1jLmgiCiAjaW5jbHVkZSAiY29tbW9uLWJvYXJkLWRldmljZXMuaCIKLSNpbmNsdWRlICJncG1jLmgiCi0jaW5jbHVkZSAiZ3BtYy1vbmVuYW5kLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAib21hcC1zZWN1cmUuaCIKIApAQCAtNDg0LDcgKzQ4Miw3IEBACiAgKiBDdXJyZW50IGZsb3dzIHRvIGVNTUMgd2hlbiBlTU1DIGlzIG9mZiBhbmQgdGhlIGRhdGEgbGluZXMgYXJlIHB1bGxlZCB1cCwKICAqIHNvIHB1bGwgdGhlbSBkb3duLiBOLkIuIHdlIHB1bGwgOCBsaW5lcyBiZWNhdXNlIHdlIGFyZSB1c2luZyA4IGxpbmVzLgogICovCi1zdGF0aWMgdm9pZCByeDUxX21tYzJfcmVtdXgoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uKQorc3RhdGljIHZvaWQgcng1MV9tbWMyX3JlbXV4KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBvd2VyX29uKQogewogCWlmIChwb3dlcl9vbikKIAkJb21hcF9tdXhfd3JpdGVfYXJyYXkocGFydGl0aW9uLCByeDUxX21tYzJfb25fbXV4KTsKQEAgLTUwMCw3ICs0OTgsNiBAQAogCQkuY292ZXJfb25seQk9IHRydWUsCiAJCS5ncGlvX2NkCT0gMTYwLAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCi0JCS5wb3dlcl9zYXZpbmcJPSB0cnVlLAogCX0sCiAJewogCQkubmFtZQkJPSAiaW50ZXJuYWwiLApAQCAtNTEwLDcgKzUwNyw2IEBACiAJCS5ncGlvX2NkCT0gLUVJTlZBTCwKIAkJLmdwaW9fd3AJPSAtRUlOVkFMLAogCQkubm9ucmVtb3ZhYmxlCT0gdHJ1ZSwKLQkJLnBvd2VyX3NhdmluZwk9IHRydWUsCiAJCS5yZW11eAkJPSByeDUxX21tYzJfcmVtdXgsCiAJfSwKIAl7fQkvKiBUZXJtaW5hdG9yICovCkBAIC0xMTQ2LDMzICsxMTQyLDYgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkgfHwgZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCBvbWFwX3NtYzkxeF9wbGF0Zm9ybV9kYXRhIGJvYXJkX3NtYzkxeF9kYXRhID0gewotCS5jcwkJPSAxLAotCS5ncGlvX2lycQk9IDU0LAotCS5ncGlvX3B3cmR3bgk9IDg2LAotCS5ncGlvX3Jlc2V0CT0gMTY0LAotCS5mbGFncwkJPSBHUE1DX1RJTUlOR1NfU01DOTFDOTYgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYm9hcmRfc21jOTF4X2luaXQodm9pZCkKLXsKLQlvbWFwX211eF9pbml0X2dwaW8oNTQsIE9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKLQlvbWFwX211eF9pbml0X2dwaW8oODYsIE9NQVBfUElOX09VVFBVVCk7Ci0Jb21hcF9tdXhfaW5pdF9ncGlvKDE2NCwgT01BUF9QSU5fT1VUUFVUKTsKLQotCWdwbWNfc21jOTF4X2luaXQoJmJvYXJkX3NtYzkxeF9kYXRhKTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIGJvYXJkX3NtYzkxeF9pbml0KHZvaWQpCi17Ci19Ci0KLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IGdwaW8gcng1MV93bDEyNTFfZ3Bpb3NbXSBfX2luaXRkYXRhID0gewogCXsgUlg1MV9XTDEyNTFfSVJRX0dQSU8sCSAgR1BJT0ZfSU4sCQkid2wxMjUxIGlycSIJfSwKIH07CkBAIC0xMzAzLDcgKzEyNzIsNiBAQAogCXJ4NTFfaTJjX2luaXQoKTsKIAlyZWd1bGF0b3JfaGFzX2Z1bGxfY29uc3RyYWludHMoKTsKIAlncG1jX29uZW5hbmRfaW5pdChib2FyZF9vbmVuYW5kX2RhdGEpOwotCWJvYXJkX3NtYzkxeF9pbml0KCk7CiAJcng1MV9hZGRfZ3Bpb19rZXlzKCk7CiAJcng1MV9pbml0X3dsMTI1MSgpOwogCXJ4NTFfaW5pdF90c2MyMDA1KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXRpODE2OGV2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC10aTgxNjhldm0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI3M2MyOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXRpODE2OGV2bS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvZGUgZm9yIFRJODE2OC9USTgxNDggRVZNLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLiAtIGh0dHA6Ly93d3cudGkuY29tLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55Ci0gKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9tdXNiLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotCi1zdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKLQkuc2V0X3BoeV9wb3dlcgk9IHRpODF4eF9tdXNiX3BoeV9wb3dlciwKLQkuaW50ZXJmYWNlX3R5cGUJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAotCS5tb2RlICAgICAgICAgICA9IE1VU0JfT1RHLAotCS5wb3dlcgkJPSA1MDAsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdGk4MXh4X2V2bV9pbml0KHZvaWQpCi17Ci0Jb21hcF9zZXJpYWxfaW5pdCgpOwotCW9tYXBfc2RyY19pbml0KE5VTEwsIE5VTEwpOwotCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoVEk4MTY4RVZNLCAidGk4MTY4ZXZtIikKLQkvKiBNYWludGFpbmVyOiBUZXhhcyBJbnN0cnVtZW50cyAqLwotCS5hdGFnX29mZnNldAk9IDB4MTAwLAotCS5tYXBfaW8JCT0gdGk4MXh4X21hcF9pbywKLQkuaW5pdF9lYXJseQk9IHRpODF4eF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IHRpODF4eF9pbml0X2lycSwKLQkuaW5pdF90aW1lCT0gb21hcDNfc3luYzMya190aW1lcl9pbml0LAotCS5pbml0X21hY2hpbmUJPSB0aTgxeHhfZXZtX2luaXQsCi0JLmluaXRfbGF0ZQk9IHRpODF4eF9pbml0X2xhdGUsCi0JLnJlc3RhcnQJPSBvbWFwNDR4eF9yZXN0YXJ0LAotTUFDSElORV9FTkQKLQotTUFDSElORV9TVEFSVChUSTgxNDhFVk0sICJ0aTgxNDhldm0iKQotCS8qIE1haW50YWluZXI6IFRleGFzIEluc3RydW1lbnRzICovCi0JLmF0YWdfb2Zmc2V0CT0gMHgxMDAsCi0JLm1hcF9pbwkJPSB0aTgxeHhfbWFwX2lvLAotCS5pbml0X2Vhcmx5CT0gdGk4MXh4X2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gdGk4MXh4X2luaXRfaXJxLAotCS5pbml0X3RpbWUJPSBvbWFwM19zeW5jMzJrX3RpbWVyX2luaXQsCi0JLmluaXRfbWFjaGluZQk9IHRpODF4eF9ldm1faW5pdCwKLQkuaW5pdF9sYXRlCT0gdGk4MXh4X2luaXRfbGF0ZSwKLQkucmVzdGFydAk9IG9tYXA0NHh4X3Jlc3RhcnQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jY2xvY2szeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2Nsb2NrM3h4eF9kYXRhLmMKaW5kZXggZWI4Yzc1ZS4uNWM1ZWJiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jY2xvY2szeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NjbG9jazN4eHhfZGF0YS5jCkBAIC0yNTcsNiArMjU3LDkgQEAKIAkuZ2V0X3BhcmVudAk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAogCS5yZWNhbGNfcmF0ZQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIAkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5zZXRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50LAorCS5zZXRfcmF0ZV9hbmRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZV9hbmRfcGFyZW50LAorCS5kZXRlcm1pbmVfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAogfTsKIApAQCAtMzY3LDYgKzM3MCw5IEBACiAJLmdldF9wYXJlbnQJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKIAkucmVjYWxjX3JhdGUJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAzX2RwbGw0X3NldF9yYXRlLAorCS5zZXRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50LAorCS5zZXRfcmF0ZV9hbmRfcGFyZW50CT0gJm9tYXAzX2RwbGw0X3NldF9yYXRlX2FuZF9wYXJlbnQsCisJLmRldGVybWluZV9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kZXRlcm1pbmVfcmF0ZSwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggNTAwNTMwZC4uNmFkNWI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtMTcxLDcgKzE3MSw4IEBACiAJCV93YWl0X2lkbGVzdF9nZW5lcmljKGNsaywgaWRsZXN0X3JlZywgKDEgPDwgaWRsZXN0X2JpdCksCiAJCQkJICAgICBpZGxlc3RfdmFsLCBfX2Nsa19nZXRfbmFtZShjbGstPmh3LmNsaykpOwogCX0gZWxzZSB7Ci0JCWNtX3dhaXRfbW9kdWxlX3JlYWR5KHByY21fbW9kLCBpZGxlc3RfcmVnX2lkLCBpZGxlc3RfYml0KTsKKwkJb21hcF9jbV93YWl0X21vZHVsZV9yZWFkeSgwLCBwcmNtX21vZCwgaWRsZXN0X3JlZ19pZCwKKwkJCQkJICBpZGxlc3RfYml0KTsKIAl9OwogfQogCkBAIC03NzEsNCArNzcyLDggQEAKIAkJdGlfY2xrX2ZlYXR1cmVzLmNtX2lkbGVzdF92YWwgPSBPTUFQMjRYWF9DTV9JRExFU1RfVkFMOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQl0aV9jbGtfZmVhdHVyZXMuY21faWRsZXN0X3ZhbCA9IE9NQVAzNFhYX0NNX0lETEVTVF9WQUw7CisKKwkvKiBPbiBPTUFQMzQzMCBFUzEuMCwgRFBMTDQgY2FuJ3QgYmUgcmUtcHJvZ3JhbW1lZCAqLworCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkKKwkJdGlfY2xrX2ZlYXR1cmVzLmZsYWdzIHw9IFRJX0NMS19EUExMNF9ERU5ZX1JFUFJPR1JBTTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaAppbmRleCA0NTkyYTI3Li42NDEzMzdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCkBAIC0yMzQsNiArMjM0LDcgQEAKIH07CiAKICNkZWZpbmUgVElfQ0xLX0RQTExfSEFTX0ZSRVFTRUwJCSgxIDw8IDApCisjZGVmaW5lIFRJX0NMS19EUExMNF9ERU5ZX1JFUFJPR1JBTQkoMSA8PCAxKQogCiBleHRlcm4gc3RydWN0IHRpX2Nsa19mZWF0dXJlcyB0aV9jbGtfZmVhdHVyZXM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5jCmluZGV4IDBiMDJiNDEuLmE5ZTg2ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHguYwpAQCAtMzgsNiArMzgsMTggQEAKIAogLyogbmVlZGVkIGJ5IG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZSgpICovCiBzdHJ1Y3QgY2xrICpzZHJjX2lja19wLCAqYXJtX2Zja19wOworCisvKioKKyAqIG9tYXAzX2RwbGw0X3NldF9yYXRlIC0gc2V0IHJhdGUgZm9yIG9tYXAzIHBlci1kcGxsCisgKiBAaHc6IGNsb2NrIHRvIGNoYW5nZQorICogQHJhdGU6IHRhcmdldCByYXRlIGZvciBjbG9jaworICogQHBhcmVudF9yYXRlOiByYXRlIG9mIHRoZSBwYXJlbnQgY2xvY2sKKyAqCisgKiBDaGVjayBpZiB0aGUgY3VycmVudCBTb0Mgc3VwcG9ydHMgdGhlIHBlci1kcGxsIHJlcHJvZ3JhbSBvcGVyYXRpb24KKyAqIG9yIG5vdCwgYW5kIHRoZW4gZG8gdGhlIHJhdGUgY2hhbmdlIGlmIHN1cHBvcnRlZC4gUmV0dXJucyAtRUlOVkFMCisgKiBpZiBub3Qgc3VwcG9ydGVkLCAwIGZvciBzdWNjZXNzLCBhbmQgcG90ZW50aWFsIGVycm9yIGNvZGVzIGZyb20gdGhlCisgKiBjbG9jayByYXRlIGNoYW5nZS4KKyAqLwogaW50IG9tYXAzX2RwbGw0X3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKIHsKQEAgLTQ2LDcgKzU4LDcgQEAKIAkgKiBvbiAzNDMwRVMxIHByZXZlbnRzIHVzIGZyb20gY2hhbmdpbmcgRFBMTCBtdWx0aXBsaWVycyBvciBkaXZpZGVycwogCSAqIG9uIERQTEw0LgogCSAqLwotCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgeworCWlmICh0aV9jbGtfZmVhdHVyZXMuZmxhZ3MgJiBUSV9DTEtfRFBMTDRfREVOWV9SRVBST0dSQU0pIHsKIAkJcHJfZXJyKCJjbG9jazogRFBMTDQgY2Fubm90IGNoYW5nZSByYXRlIGR1ZSB0byBzaWxpY29uICdMaW1pdGF0aW9uIDIuNScgb24gMzQzMEVTMS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NCw2ICs2NiwzMCBAQAogCXJldHVybiBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoaHcsIHJhdGUsIHBhcmVudF9yYXRlKTsKIH0KIAorLyoqCisgKiBvbWFwM19kcGxsNF9zZXRfcmF0ZV9hbmRfcGFyZW50IC0gc2V0IHJhdGUgYW5kIHBhcmVudCBmb3Igb21hcDMgcGVyLWRwbGwKKyAqIEBodzogY2xvY2sgdG8gY2hhbmdlCisgKiBAcmF0ZTogdGFyZ2V0IHJhdGUgZm9yIGNsb2NrCisgKiBAcGFyZW50X3JhdGU6IHJhdGUgb2YgdGhlIHBhcmVudCBjbG9jaworICogQGluZGV4OiBwYXJlbnQgaW5kZXgsIDAgLSByZWZlcmVuY2UgY2xvY2ssIDEgLSBieXBhc3MgY2xvY2sKKyAqCisgKiBDaGVjayBpZiB0aGUgY3VycmVudCBTb0Mgc3VwcG9ydCB0aGUgcGVyLWRwbGwgcmVwcm9ncmFtIG9wZXJhdGlvbgorICogb3Igbm90LCBhbmQgdGhlbiBkbyB0aGUgcmF0ZSArIHBhcmVudCBjaGFuZ2UgaWYgc3VwcG9ydGVkLiBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIG5vdCBzdXBwb3J0ZWQsIDAgZm9yIHN1Y2Nlc3MsIGFuZCBwb3RlbnRpYWwgZXJyb3IgY29kZXMKKyAqIGZyb20gdGhlIGNsb2NrIHJhdGUgY2hhbmdlLgorICovCitpbnQgb21hcDNfZHBsbDRfc2V0X3JhdGVfYW5kX3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLCB1OCBpbmRleCkKK3sKKwlpZiAodGlfY2xrX2ZlYXR1cmVzLmZsYWdzICYgVElfQ0xLX0RQTEw0X0RFTllfUkVQUk9HUkFNKSB7CisJCXByX2VycigiY2xvY2s6IERQTEw0IGNhbm5vdCBjaGFuZ2UgcmF0ZSBkdWUgdG8gc2lsaWNvbiAnTGltaXRhdGlvbiAyLjUnIG9uIDM0MzBFUzEuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZV9hbmRfcGFyZW50KGh3LCByYXRlLCBwYXJlbnRfcmF0ZSwKKwkJCQkJCSAgICAgIGluZGV4KTsKK30KKwogdm9pZCBfX2luaXQgb21hcDNfY2xrX2xvY2tfZHBsbDUodm9pZCkKIHsKIAlzdHJ1Y3QgY2xrICpkcGxsNV9jbGs7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKaW5kZXggOTM0NzNmOS4uNjIyMmU4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaApAQCAtNDUsMTcgKzQ1LDI5IEBACiAgKiBzdHJ1Y3QgY21fbGxfZGF0YSAtIGZuIHB0cnMgdG8gcGVyLVNvQyBDTSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMKICAqIEBzcGxpdF9pZGxlc3RfcmVnOiBwdHIgdG8gdGhlIFNvQyBDTS1zcGVjaWZpYyBzcGxpdF9pZGxlc3RfcmVnIGltcGwKICAqIEB3YWl0X21vZHVsZV9yZWFkeTogcHRyIHRvIHRoZSBTb0MgQ00tc3BlY2lmaWMgd2FpdF9tb2R1bGVfcmVhZHkgaW1wbAorICogQHdhaXRfbW9kdWxlX2lkbGU6IHB0ciB0byB0aGUgU29DIENNLXNwZWNpZmljIHdhaXRfbW9kdWxlX2lkbGUgaW1wbAorICogQG1vZHVsZV9lbmFibGU6IHB0ciB0byB0aGUgU29DIENNLXNwZWNpZmljIG1vZHVsZV9lbmFibGUgaW1wbAorICogQG1vZHVsZV9kaXNhYmxlOiBwdHIgdG8gdGhlIFNvQyBDTS1zcGVjaWZpYyBtb2R1bGVfZGlzYWJsZSBpbXBsCiAgKi8KIHN0cnVjdCBjbV9sbF9kYXRhIHsKIAlpbnQgKCpzcGxpdF9pZGxlc3RfcmVnKSh2b2lkIF9faW9tZW0gKmlkbGVzdF9yZWcsIHMxNiAqcHJjbV9pbnN0LAogCQkJCXU4ICppZGxlc3RfcmVnX2lkKTsKLQlpbnQgKCp3YWl0X21vZHVsZV9yZWFkeSkoczE2IHByY21fbW9kLCB1OCBpZGxlc3RfaWQsIHU4IGlkbGVzdF9zaGlmdCk7CisJaW50ICgqd2FpdF9tb2R1bGVfcmVhZHkpKHU4IHBhcnQsIHMxNiBwcmNtX21vZCwgdTE2IGlkbGVzdF9yZWcsCisJCQkJIHU4IGlkbGVzdF9zaGlmdCk7CisJaW50ICgqd2FpdF9tb2R1bGVfaWRsZSkodTggcGFydCwgczE2IHByY21fbW9kLCB1MTYgaWRsZXN0X3JlZywKKwkJCQl1OCBpZGxlc3Rfc2hpZnQpOworCXZvaWQgKCptb2R1bGVfZW5hYmxlKSh1OCBtb2RlLCB1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2Zmcyk7CisJdm9pZCAoKm1vZHVsZV9kaXNhYmxlKSh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2Zmcyk7CiB9OwogCiBleHRlcm4gaW50IGNtX3NwbGl0X2lkbGVzdF9yZWcodm9pZCBfX2lvbWVtICppZGxlc3RfcmVnLCBzMTYgKnByY21faW5zdCwKIAkJCSAgICAgICB1OCAqaWRsZXN0X3JlZ19pZCk7Ci1leHRlcm4gaW50IGNtX3dhaXRfbW9kdWxlX3JlYWR5KHMxNiBwcmNtX21vZCwgdTggaWRsZXN0X2lkLCB1OCBpZGxlc3Rfc2hpZnQpOwotCitpbnQgb21hcF9jbV93YWl0X21vZHVsZV9yZWFkeSh1OCBwYXJ0LCBzMTYgcHJjbV9tb2QsIHUxNiBpZGxlc3RfcmVnLAorCQkJICAgICAgdTggaWRsZXN0X3NoaWZ0KTsKK2ludCBvbWFwX2NtX3dhaXRfbW9kdWxlX2lkbGUodTggcGFydCwgczE2IHByY21fbW9kLCB1MTYgaWRsZXN0X3JlZywKKwkJCSAgICAgdTggaWRsZXN0X3NoaWZ0KTsKK2ludCBvbWFwX2NtX21vZHVsZV9lbmFibGUodTggbW9kZSwgdTggcGFydCwgdTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpOworaW50IG9tYXBfY21fbW9kdWxlX2Rpc2FibGUodTggcGFydCwgdTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpOwogZXh0ZXJuIGludCBjbV9yZWdpc3RlcihzdHJ1Y3QgY21fbGxfZGF0YSAqY2xkKTsKIGV4dGVybiBpbnQgY21fdW5yZWdpc3RlcihzdHJ1Y3QgY21fbGxfZGF0YSAqY2xkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfNDR4eC5oCmluZGV4IDVhZThmZTMuLmE1OTQ5OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzQ0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV80NHh4LmgKQEAgLTI1LDggKzI1LDYgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMV80NFhYX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMV80NFhYX0gKIAotI2luY2x1ZGUgImNtXzQ0eHhfNTR4eC5oIgotCiAvKiBDTTEgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIE9NQVA0NDMwX0NNMV9CQVNFCQkweDRhMDA0MDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzU0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzU0eHguaAppbmRleCA5MGIzMzQ4Li5mZDI0NWRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV81NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfNTR4eC5oCkBAIC0yMiw4ICsyMiw2IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTFfNTRYWF9ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTFfNTRYWF9ICiAKLSNpbmNsdWRlICJjbV80NHh4XzU0eHguaCIKLQogLyogQ00xIGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBPTUFQNTRYWF9DTV9DT1JFX0FPTl9CQVNFCQkweDRhMDA0MDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzd4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfN3h4LmgKaW5kZXggY2E2ZmExZi4uMmYxYzA5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfN3h4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfN3h4LmgKQEAgLTIzLDggKzIzLDYgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMV83WFhfSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00xXzdYWF9ICiAKLSNpbmNsdWRlICJjbV80NHh4XzU0eHguaCIKLQogLyogQ00xIGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBEUkE3WFhfQ01fQ09SRV9BT05fQkFTRQkJMHg0YTAwNTAwMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl80NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl80NHh4LmgKaW5kZXggZWU1MTM2ZC4uNzUyMWFiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfNDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzQ0eHguaApAQCAtMjUsOCArMjUsNiBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00yXzQ0WFhfSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00yXzQ0WFhfSAogCi0jaW5jbHVkZSAiY21fNDR4eF81NHh4LmgiCi0KIC8qIENNMiBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgT01BUDQ0MzBfQ00yX0JBU0UJCTB4NGEwMDgwMDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfNTR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfNTR4eC5oCmluZGV4IDI2ODMyMzEuLmZmNDA0MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzU0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl81NHh4LmgKQEAgLTIxLDggKzIxLDYgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMl81NFhYX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMl81NFhYX0gKIAotI2luY2x1ZGUgImNtXzQ0eHhfNTR4eC5oIgotCiAvKiBDTTIgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIE9NQVA1NFhYX0NNX0NPUkVfQkFTRQkJMHg0YTAwODAwMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl83eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzd4eC5oCmluZGV4IGU5NjZlM2EuLmNlNjNmZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzd4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzd4eC5oCkBAIC0yMiw4ICsyMiw2IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTJfN1hYX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMl83WFhfSAogCi0jaW5jbHVkZSAiY21fNDR4eF81NHh4LmgiCi0KIC8qIENNMiBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgRFJBN1hYX0NNX0NPUkVfQkFTRQkJMHg0YTAwODAwMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHguYwppbmRleCA4YmU2ZWE1Li5hOTZkOTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4LmMKQEAgLTUzLDcgKzUzLDcgQEAKIAlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKHYsIG1vZHVsZSwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKIH0KIAotYm9vbCBvbWFwMnh4eF9jbV9pc19jbGtkbV9pbl9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3N0YXRpYyBib29sIG9tYXAyeHh4X2NtX2lzX2Nsa2RtX2luX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQogewogCXUzMiB2OwogCkBAIC02NCwxMiArNjQsMTIgQEAKIAlyZXR1cm4gKHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSA/IDEgOiAwOwogfQogCi12b2lkIG9tYXAyeHh4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3N0YXRpYyB2b2lkIG9tYXAyeHh4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKIHsKIAlfd3JpdGVfY2xrdHJjdHJsKE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTywgbW9kdWxlLCBtYXNrKTsKIH0KIAotdm9pZCBvbWFwMnh4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQorc3RhdGljIHZvaWQgb21hcDJ4eHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKIHsKIAlfd3JpdGVfY2xrdHJjdHJsKE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8sIG1vZHVsZSwgbWFzayk7CiB9CkBAIC0xNTAsNyArMTUwLDcgQEAKIAl2IHw9IG07CiAJb21hcDJfY21fd3JpdGVfbW9kX3JlZyh2LCBQTExfTU9ELCBDTV9DTEtFTik7CiAKLQlvbWFwMnh4eF9jbV93YWl0X21vZHVsZV9yZWFkeShQTExfTU9ELCAxLCBzdGF0dXNfYml0KTsKKwlvbWFwMnh4eF9jbV93YWl0X21vZHVsZV9yZWFkeSgwLCBQTExfTU9ELCAxLCBzdGF0dXNfYml0KTsKIAogCS8qCiAJICogUkVWSVNJVDogU2hvdWxkIHdlIHJldHVybiBhbiBlcnJvciBjb2RlIGlmCkBAIC0yMDQsOCArMjA0LDkgQEAKICAqIFhYWCBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVlZGVkIHVudGlsIGFic29sdXRlIHJlZ2lzdGVyIGFkZHJlc3NlcyBhcmUKICAqIHJlbW92ZWQgZnJvbSB0aGUgT01BUCBzdHJ1Y3QgY2xrIHJlY29yZHMuCiAgKi8KLWludCBvbWFwMnh4eF9jbV9zcGxpdF9pZGxlc3RfcmVnKHZvaWQgX19pb21lbSAqaWRsZXN0X3JlZywgczE2ICpwcmNtX2luc3QsCi0JCQkJIHU4ICppZGxlc3RfcmVnX2lkKQorc3RhdGljIGludCBvbWFwMnh4eF9jbV9zcGxpdF9pZGxlc3RfcmVnKHZvaWQgX19pb21lbSAqaWRsZXN0X3JlZywKKwkJCQkJczE2ICpwcmNtX2luc3QsCisJCQkJCXU4ICppZGxlc3RfcmVnX2lkKQogewogCXVuc2lnbmVkIGxvbmcgb2ZmczsKIAl1OCBpZGxlc3Rfb2ZmczsKQEAgLTIzOCw2ICsyMzksNyBAQAogCiAvKioKICAqIG9tYXAyeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gbGVhdmUgaWRsZSBvciBzdGFuZGJ5CisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24sIGlnbm9yZWQgZm9yIE9NQVAyCiAgKiBAcHJjbV9tb2Q6IFBSQ00gbW9kdWxlIG9mZnNldAogICogQGlkbGVzdF9pZDogQ01fSURMRVNUeCByZWdpc3RlciBJRCAoaS5lLiwgeCA9IDEsIDIsIDMpCiAgKiBAaWRsZXN0X3NoaWZ0OiBzaGlmdCBvZiB0aGUgYml0IGluIHRoZSBDTV9JRExFU1QqIHJlZ2lzdGVyIHRvIGNoZWNrCkBAIC0yNDYsNyArMjQ4LDggQEAKICAqIChAcHJjbV9tb2QsIEBpZGxlc3RfaWQsIEBpZGxlc3Rfc2hpZnQpIGlzIGNsb2NrZWQuICBSZXR1cm4gMCB1cG9uCiAgKiBzdWNjZXNzIG9yIC1FQlVTWSBpZiB0aGUgbW9kdWxlIGRvZXNuJ3QgZW5hYmxlIGluIHRpbWUuCiAgKi8KLWludCBvbWFwMnh4eF9jbV93YWl0X21vZHVsZV9yZWFkeShzMTYgcHJjbV9tb2QsIHU4IGlkbGVzdF9pZCwgdTggaWRsZXN0X3NoaWZ0KQoraW50IG9tYXAyeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHMxNiBwcmNtX21vZCwgdTE2IGlkbGVzdF9pZCwKKwkJCQkgIHU4IGlkbGVzdF9zaGlmdCkKIHsKIAlpbnQgZW5hID0gMCwgaSA9IDA7CiAJdTggY21faWRsZXN0X3JlZzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5oCmluZGV4IDg5MWQ4MWMuLmM4OTUwMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHguaApAQCAtNDYsOSArNDYsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIAotZXh0ZXJuIHZvaWQgb21hcDJ4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKLWV4dGVybiB2b2lkIG9tYXAyeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOwotCiBleHRlcm4gdm9pZCBvbWFwMnh4eF9jbV9zZXRfZHBsbF9kaXNhYmxlX2F1dG9pZGxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDJ4eHhfY21fc2V0X2RwbGxfYXV0b19sb3dfcG93ZXJfc3RvcCh2b2lkKTsKIApAQCAtNTcsMTEgKzU0LDggQEAKIGV4dGVybiB2b2lkIG9tYXAyeHh4X2NtX3NldF9hcGxsOTZfZGlzYWJsZV9hdXRvaWRsZSh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAyeHh4X2NtX3NldF9hcGxsOTZfYXV0b19sb3dfcG93ZXJfc3RvcCh2b2lkKTsKIAotZXh0ZXJuIGJvb2wgb21hcDJ4eHhfY21faXNfY2xrZG1faW5faHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOwotZXh0ZXJuIGludCBvbWFwMnh4eF9jbV93YWl0X21vZHVsZV9yZWFkeShzMTYgcHJjbV9tb2QsIHU4IGlkbGVzdF9pZCwKLQkJCQkJIHU4IGlkbGVzdF9zaGlmdCk7Ci1leHRlcm4gaW50IG9tYXAyeHh4X2NtX3NwbGl0X2lkbGVzdF9yZWcodm9pZCBfX2lvbWVtICppZGxlc3RfcmVnLAotCQkJCQlzMTYgKnByY21faW5zdCwgdTggKmlkbGVzdF9yZWdfaWQpOworaW50IG9tYXAyeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHMxNiBwcmNtX21vZCwgdTE2IGlkbGVzdF9pZCwKKwkJCQkgIHU4IGlkbGVzdF9zaGlmdCk7CiBleHRlcm4gaW50IG9tYXAyeHh4X2NtX2ZjbGtzX2FjdGl2ZSh2b2lkKTsKIGV4dGVybiBpbnQgb21hcDJ4eHhfY21fbXB1X3JldGVudGlvbl9hbGxvd2VkKHZvaWQpOwogZXh0ZXJuIHUzMiBvbWFwMnh4eF9jbV9nZXRfY29yZV9jbGtfc3JjKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zM3h4LmMKaW5kZXggYjNmOTllOS4uYjlhZDQ2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5jCkBAIC05NiwxMyArOTYsMTIgQEAKIC8qKgogICogX2Nsa2N0cmxfaWRsZXN0IC0gcmVhZCBhIENNXypfQ0xLQ1RSTCByZWdpc3RlcjsgbWFzayAmIHNoaWZ0IElETEVTVCBiaXRmaWVsZAogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQogICoKICAqIFJldHVybiB0aGUgSURMRVNUIGJpdGZpZWxkIG9mIGEgQ01fKl9DTEtDVFJMIHJlZ2lzdGVyLCBzaGlmdGVkIGRvd24gdG8KICAqIGJpdCAwLgogICovCi1zdGF0aWMgdTMyIF9jbGtjdHJsX2lkbGVzdCh1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyB1MzIgX2Nsa2N0cmxfaWRsZXN0KHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKQogewogCXUzMiB2ID0gYW0zM3h4X2NtX3JlYWRfcmVnKGluc3QsIGNsa2N0cmxfb2Zmcyk7CiAJdiAmPSBBTTMzWFhfSURMRVNUX01BU0s7CkBAIC0xMTMsMTcgKzExMiwxNiBAQAogLyoqCiAgKiBfaXNfbW9kdWxlX3JlYWR5IC0gY2FuIG1vZHVsZSByZWdpc3RlcnMgYmUgYWNjZXNzZWQgd2l0aG91dCBjYXVzaW5nIGFuIGFib3J0PwogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQogICoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kdWxlJ3MgQ01fKl9DTEtDVFJMLklETEVTVCBiaXRmaWVsZCBpcyBlaXRoZXIKICAqICpGVU5DVElPTkFMIG9yICpJTlRFUkZBQ0VfSURMRTsgZmFsc2Ugb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgYm9vbCBfaXNfbW9kdWxlX3JlYWR5KHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIGJvb2wgX2lzX21vZHVsZV9yZWFkeSh1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcykKIHsKIAl1MzIgdjsKIAotCXYgPSBfY2xrY3RybF9pZGxlc3QoaW5zdCwgY2RvZmZzLCBjbGtjdHJsX29mZnMpOworCXYgPSBfY2xrY3RybF9pZGxlc3QoaW5zdCwgY2xrY3RybF9vZmZzKTsKIAogCXJldHVybiAodiA9PSBDTEtDVFJMX0lETEVTVF9GVU5DVElPTkFMIHx8CiAJCXYgPT0gQ0xLQ1RSTF9JRExFU1RfSU5URVJGQUNFX0lETEUpID8gdHJ1ZSA6IGZhbHNlOwpAQCAtMTU4LDcgKzE1Niw3IEBACiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNsb2NrZG9tYWluIHJlZmVycmVkIHRvIGJ5IChAaW5zdCwgQGNkb2ZmcykKICAqIGlzIGluIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlLCBvciAwIG90aGVyd2lzZS4KICAqLwotYm9vbCBhbTMzeHhfY21faXNfY2xrZG1faW5faHdzdXAodTE2IGluc3QsIHUxNiBjZG9mZnMpCitzdGF0aWMgYm9vbCBhbTMzeHhfY21faXNfY2xrZG1faW5faHdzdXAodTE2IGluc3QsIHUxNiBjZG9mZnMpCiB7CiAJdTMyIHY7CiAKQEAgLTE3Nyw3ICsxNzUsNyBAQAogICogUHV0IGEgY2xvY2tkb21haW4gcmVmZXJyZWQgdG8gYnkgKEBpbnN0LCBAY2RvZmZzKSBpbnRvCiAgKiBoYXJkd2FyZS1zdXBlcnZpc2VkIGlkbGUgbW9kZS4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBhbTMzeHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKQorc3RhdGljIHZvaWQgYW0zM3h4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cCh1MTYgaW5zdCwgdTE2IGNkb2ZmcykKIHsKIAlfY2xrdHJjdHJsX3dyaXRlKE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTywgaW5zdCwgY2RvZmZzKTsKIH0KQEAgLTE5MSw3ICsxODksNyBAQAogICogc29mdHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUsIGkuZS4sIGNvbnRyb2xsZWQgbWFudWFsbHkgYnkgdGhlCiAgKiBMaW51eCBPTUFQIGNsb2NrZG9tYWluIGNvZGUuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgYW0zM3h4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAodTE2IGluc3QsIHUxNiBjZG9mZnMpCitzdGF0aWMgdm9pZCBhbTMzeHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cCh1MTYgaW5zdCwgdTE2IGNkb2ZmcykKIHsKIAlfY2xrdHJjdHJsX3dyaXRlKE9NQVAzNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8sIGluc3QsIGNkb2Zmcyk7CiB9CkBAIC0yMDQsNyArMjAyLDcgQEAKICAqIFB1dCBhIGNsb2NrZG9tYWluIHJlZmVycmVkIHRvIGJ5IChAaW5zdCwgQGNkb2ZmcykgaW50byBpZGxlCiAgKiBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgYW0zM3h4X2NtX2Nsa2RtX2ZvcmNlX3NsZWVwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKQorc3RhdGljIHZvaWQgYW0zM3h4X2NtX2Nsa2RtX2ZvcmNlX3NsZWVwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKQogewogCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1NMRUVQLCBpbnN0LCBjZG9mZnMpOwogfQpAQCAtMjE3LDcgKzIxNSw3IEBACiAgKiBUYWtlIGEgY2xvY2tkb21haW4gcmVmZXJyZWQgdG8gYnkgKEBpbnN0LCBAY2RvZmZzKSBvdXQgb2YgaWRsZSwKICAqIHdha2luZyBpdCB1cC4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBhbTMzeHhfY21fY2xrZG1fZm9yY2Vfd2FrZXVwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKQorc3RhdGljIHZvaWQgYW0zM3h4X2NtX2Nsa2RtX2ZvcmNlX3dha2V1cCh1MTYgaW5zdCwgdTE2IGNkb2ZmcykKIHsKIAlfY2xrdHJjdHJsX3dyaXRlKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9XQUtFVVAsIGluc3QsIGNkb2Zmcyk7CiB9CkBAIC0yMjgsMjAgKzIyNiwyMiBAQAogCiAvKioKICAqIGFtMzN4eF9jbV93YWl0X21vZHVsZV9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGJlIGluICdmdW5jJyBzdGF0ZQorICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uLCBpZ25vcmVkIGZvciBBTTMzeHgKICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKKyAqIEBiaXRfc2hpZnQ6IGJpdCBzaGlmdCBmb3IgdGhlIHJlZ2lzdGVyLCBpZ25vcmVkIGZvciBBTTMzeHgKICAqCiAgKiBXYWl0IGZvciB0aGUgbW9kdWxlIElETEVTVCB0byBiZSBmdW5jdGlvbmFsLiBJZiB0aGUgaWRsZSBzdGF0ZSBpcyBpbiBhbnkKICAqIHRoZSBub24gZnVuY3Rpb25hbCBzdGF0ZSAodHJhbnMsIGlkbGUgb3IgZGlzYWJsZWQpLCBtb2R1bGUgYW5kIHRodXMgdGhlCiAgKiBzeXNjb25maWcgY2Fubm90IGJlIGFjY2Vzc2VkIGFuZCB3aWxsIHByb2JhYmx5IGxlYWQgdG8gYW4gImltcHJlY2lzZQogICogZXh0ZXJuYWwgYWJvcnQiCiAgKi8KLWludCBhbTMzeHhfY21fd2FpdF9tb2R1bGVfcmVhZHkodTE2IGluc3QsIHMxNiBjZG9mZnMsIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgaW50IGFtMzN4eF9jbV93YWl0X21vZHVsZV9yZWFkeSh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcywKKwkJCQkgICAgICAgdTggYml0X3NoaWZ0KQogewogCWludCBpID0gMDsKIAotCW9tYXBfdGVzdF90aW1lb3V0KF9pc19tb2R1bGVfcmVhZHkoaW5zdCwgY2RvZmZzLCBjbGtjdHJsX29mZnMpLAorCW9tYXBfdGVzdF90aW1lb3V0KF9pc19tb2R1bGVfcmVhZHkoaW5zdCwgY2xrY3RybF9vZmZzKSwKIAkJCSAgTUFYX01PRFVMRV9SRUFEWV9USU1FLCBpKTsKIAogCXJldHVybiAoaSA8IE1BWF9NT0RVTEVfUkVBRFlfVElNRSkgPyAwIDogLUVCVVNZOwpAQCAtMjUwLDIyICsyNTAsMjQgQEAKIC8qKgogICogYW0zM3h4X2NtX3dhaXRfbW9kdWxlX2lkbGUgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBiZSBpbiAnZGlzYWJsZWQnCiAgKiBzdGF0ZQorICogQHBhcnQ6IENNIHBhcnRpdGlvbiwgaWdub3JlZCBmb3IgQU0zM3h4CiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCisgKiBAYml0X3NoaWZ0OiBiaXQgc2hpZnQgZm9yIHRoZSByZWdpc3RlciwgaWdub3JlZCBmb3IgQU0zM3h4CiAgKgogICogV2FpdCBmb3IgdGhlIG1vZHVsZSBJRExFU1QgdG8gYmUgZGlzYWJsZWQuIFNvbWUgUFJDTSB0cmFuc2l0aW9uLAogICogbGlrZSByZXNldCBhc3NlcnRpb24gb3IgcGFyZW50IGNsb2NrIGRlLWFjdGl2YXRpb24gbXVzdCB3YWl0IHRoZQogICogbW9kdWxlIHRvIGJlIGZ1bGx5IGRpc2FibGVkLgogICovCi1pbnQgYW0zM3h4X2NtX3dhaXRfbW9kdWxlX2lkbGUodTE2IGluc3QsIHMxNiBjZG9mZnMsIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgaW50IGFtMzN4eF9jbV93YWl0X21vZHVsZV9pZGxlKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzLAorCQkJCSAgICAgIHU4IGJpdF9zaGlmdCkKIHsKIAlpbnQgaSA9IDA7CiAKIAlpZiAoIWNsa2N0cmxfb2ZmcykKIAkJcmV0dXJuIDA7CiAKLQlvbWFwX3Rlc3RfdGltZW91dCgoX2Nsa2N0cmxfaWRsZXN0KGluc3QsIGNkb2ZmcywgY2xrY3RybF9vZmZzKSA9PQorCW9tYXBfdGVzdF90aW1lb3V0KChfY2xrY3RybF9pZGxlc3QoaW5zdCwgY2xrY3RybF9vZmZzKSA9PQogCQkJCUNMS0NUUkxfSURMRVNUX0RJU0FCTEVEKSwKIAkJCQlNQVhfTU9EVUxFX1JFQURZX1RJTUUsIGkpOwogCkBAIC0yNzUsMTMgKzI3NywxNCBAQAogLyoqCiAgKiBhbTMzeHhfY21fbW9kdWxlX2VuYWJsZSAtIEVuYWJsZSB0aGUgbW9kdWxlbW9kZSBpbnNpZGUgQ0xLQ1RSTAogICogQG1vZGU6IE1vZHVsZSBtb2RlIChTVyBvciBIVykKKyAqIEBwYXJ0OiBDTSBwYXJ0aXRpb24sIGlnbm9yZWQgZm9yIEFNMzN4eAogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQogICoKICAqIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBhbTMzeHhfY21fbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyB2b2lkIGFtMzN4eF9jbV9tb2R1bGVfZW5hYmxlKHU4IG1vZGUsIHU4IHBhcnQsIHUxNiBpbnN0LAorCQkJCSAgICB1MTYgY2xrY3RybF9vZmZzKQogewogCXUzMiB2OwogCkBAIC0yOTMsMTMgKzI5NiwxMyBAQAogCiAvKioKICAqIGFtMzN4eF9jbV9tb2R1bGVfZGlzYWJsZSAtIERpc2FibGUgdGhlIG1vZHVsZSBpbnNpZGUgQ0xLQ1RSTAorICogQHBhcnQ6IENNIHBhcnRpdGlvbiwgaWdub3JlZCBmb3IgQU0zM3h4CiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCiAgKgogICogTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIGFtMzN4eF9jbV9tb2R1bGVfZGlzYWJsZSh1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyB2b2lkIGFtMzN4eF9jbV9tb2R1bGVfZGlzYWJsZSh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcykKIHsKIAl1MzIgdjsKIApAQCAtMzYyLDMgKzM2NSwyMSBAQAogCS5jbGtkbV9jbGtfZW5hYmxlCT0gYW0zM3h4X2Nsa2RtX2Nsa19lbmFibGUsCiAJLmNsa2RtX2Nsa19kaXNhYmxlCT0gYW0zM3h4X2Nsa2RtX2Nsa19kaXNhYmxlLAogfTsKKworc3RhdGljIHN0cnVjdCBjbV9sbF9kYXRhIGFtMzN4eF9jbV9sbF9kYXRhID0geworCS53YWl0X21vZHVsZV9yZWFkeQk9ICZhbTMzeHhfY21fd2FpdF9tb2R1bGVfcmVhZHksCisJLndhaXRfbW9kdWxlX2lkbGUJPSAmYW0zM3h4X2NtX3dhaXRfbW9kdWxlX2lkbGUsCisJLm1vZHVsZV9lbmFibGUJCT0gJmFtMzN4eF9jbV9tb2R1bGVfZW5hYmxlLAorCS5tb2R1bGVfZGlzYWJsZQkJPSAmYW0zM3h4X2NtX21vZHVsZV9kaXNhYmxlLAorfTsKKworaW50IF9faW5pdCBhbTMzeHhfY21faW5pdCh2b2lkKQoreworCXJldHVybiBjbV9yZWdpc3RlcigmYW0zM3h4X2NtX2xsX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYW0zM3h4X2NtX2V4aXQodm9pZCkKK3sKKwljbV91bnJlZ2lzdGVyKCZhbTMzeHhfY21fbGxfZGF0YSk7Cit9CitfX2V4aXRjYWxsKGFtMzN4eF9jbV9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20zM3h4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5oCmluZGV4IGJkMjQ0MTcuLjA0NmI0YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20zM3h4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguaApAQCAtMzc0LDQxICszNzQsNiBAQAogCiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwotYm9vbCBhbTMzeHhfY21faXNfY2xrZG1faW5faHdzdXAodTE2IGluc3QsIHUxNiBjZG9mZnMpOwotdm9pZCBhbTMzeHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKTsKLXZvaWQgYW0zM3h4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAodTE2IGluc3QsIHUxNiBjZG9mZnMpOwotdm9pZCBhbTMzeHhfY21fY2xrZG1fZm9yY2Vfc2xlZXAodTE2IGluc3QsIHUxNiBjZG9mZnMpOwotdm9pZCBhbTMzeHhfY21fY2xrZG1fZm9yY2Vfd2FrZXVwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BTTMzWFgpIHx8IGRlZmluZWQoQ09ORklHX1NPQ19BTTQzWFgpCi1leHRlcm4gaW50IGFtMzN4eF9jbV93YWl0X21vZHVsZV9pZGxlKHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCQl1MTYgY2xrY3RybF9vZmZzKTsKLWV4dGVybiB2b2lkIGFtMzN4eF9jbV9tb2R1bGVfZW5hYmxlKHU4IG1vZGUsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCQl1MTYgY2xrY3RybF9vZmZzKTsKLWV4dGVybiB2b2lkIGFtMzN4eF9jbV9tb2R1bGVfZGlzYWJsZSh1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkJdTE2IGNsa2N0cmxfb2Zmcyk7Ci1leHRlcm4gaW50IGFtMzN4eF9jbV93YWl0X21vZHVsZV9yZWFkeSh1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkJdTE2IGNsa2N0cmxfb2Zmcyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgYW0zM3h4X2NtX3dhaXRfbW9kdWxlX2lkbGUodTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJCXUxNiBjbGtjdHJsX29mZnMpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYW0zM3h4X2NtX21vZHVsZV9lbmFibGUodTggbW9kZSwgdTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJCXUxNiBjbGtjdHJsX29mZnMpCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYW0zM3h4X2NtX21vZHVsZV9kaXNhYmxlKHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCQl1MTYgY2xrY3RybF9vZmZzKQotewotfQotc3RhdGljIGlubGluZSBpbnQgYW0zM3h4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCQl1MTYgY2xrY3RybF9vZmZzKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KK2ludCBhbTMzeHhfY21faW5pdCh2b2lkKTsKICNlbmRpZiAvKiBBU1NFTUJMRVIgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTN4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmMKaW5kZXggMTI5YTRlNy4uZWJlYWQ4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5jCkBAIC00Miw3ICs0Miw3IEBACiAJb21hcDJfY21fd3JpdGVfbW9kX3JlZyh2LCBtb2R1bGUsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CiB9CiAKLWJvb2wgb21hcDN4eHhfY21faXNfY2xrZG1faW5faHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCitzdGF0aWMgYm9vbCBvbWFwM3h4eF9jbV9pc19jbGtkbV9pbl9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKIHsKIAl1MzIgdjsKIApAQCAtNTMsMjIgKzUzLDIyIEBACiAJcmV0dXJuICh2ID09IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgPyAxIDogMDsKIH0KIAotdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCitzdGF0aWMgdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCiB7CiAJX3dyaXRlX2Nsa3RyY3RybChPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8sIG1vZHVsZSwgbWFzayk7CiB9CiAKLXZvaWQgb21hcDN4eHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCiB7CiAJX3dyaXRlX2Nsa3RyY3RybChPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPLCBtb2R1bGUsIG1hc2spOwogfQogCi12b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2ZvcmNlX3NsZWVwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQorc3RhdGljIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfc2xlZXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCiB7CiAJX3dyaXRlX2Nsa3RyY3RybChPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfU0xFRVAsIG1vZHVsZSwgbWFzayk7CiB9CiAKLXZvaWQgb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfd2FrZXVwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQorc3RhdGljIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfd2FrZXVwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQogewogCV93cml0ZV9jbGt0cmN0cmwoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1dBS0VVUCwgbW9kdWxlLCBtYXNrKTsKIH0KQEAgLTc5LDYgKzc5LDcgQEAKIAogLyoqCiAgKiBvbWFwM3h4eF9jbV93YWl0X21vZHVsZV9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGxlYXZlIGlkbGUgb3Igc3RhbmRieQorICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uLCBpZ25vcmVkIGZvciBPTUFQMwogICogQHByY21fbW9kOiBQUkNNIG1vZHVsZSBvZmZzZXQKICAqIEBpZGxlc3RfaWQ6IENNX0lETEVTVHggcmVnaXN0ZXIgSUQgKGkuZS4sIHggPSAxLCAyLCAzKQogICogQGlkbGVzdF9zaGlmdDogc2hpZnQgb2YgdGhlIGJpdCBpbiB0aGUgQ01fSURMRVNUKiByZWdpc3RlciB0byBjaGVjawpAQCAtODcsNyArODgsOCBAQAogICogKEBwcmNtX21vZCwgQGlkbGVzdF9pZCwgQGlkbGVzdF9zaGlmdCkgaXMgY2xvY2tlZC4gIFJldHVybiAwIHVwb24KICAqIHN1Y2Nlc3Mgb3IgLUVCVVNZIGlmIHRoZSBtb2R1bGUgZG9lc24ndCBlbmFibGUgaW4gdGltZS4KICAqLwotaW50IG9tYXAzeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHMxNiBwcmNtX21vZCwgdTggaWRsZXN0X2lkLCB1OCBpZGxlc3Rfc2hpZnQpCitzdGF0aWMgaW50IG9tYXAzeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHMxNiBwcmNtX21vZCwgdTE2IGlkbGVzdF9pZCwKKwkJCQkJIHU4IGlkbGVzdF9zaGlmdCkKIHsKIAlpbnQgZW5hID0gMCwgaSA9IDA7CiAJdTggY21faWRsZXN0X3JlZzsKQEAgLTExNiw4ICsxMTgsOSBAQAogICogWFhYIFRoaXMgZnVuY3Rpb24gaXMgb25seSBuZWVkZWQgdW50aWwgYWJzb2x1dGUgcmVnaXN0ZXIgYWRkcmVzc2VzIGFyZQogICogcmVtb3ZlZCBmcm9tIHRoZSBPTUFQIHN0cnVjdCBjbGsgcmVjb3Jkcy4KICAqLwotaW50IG9tYXAzeHh4X2NtX3NwbGl0X2lkbGVzdF9yZWcodm9pZCBfX2lvbWVtICppZGxlc3RfcmVnLCBzMTYgKnByY21faW5zdCwKLQkJCQkgdTggKmlkbGVzdF9yZWdfaWQpCitzdGF0aWMgaW50IG9tYXAzeHh4X2NtX3NwbGl0X2lkbGVzdF9yZWcodm9pZCBfX2lvbWVtICppZGxlc3RfcmVnLAorCQkJCQlzMTYgKnByY21faW5zdCwKKwkJCQkJdTggKmlkbGVzdF9yZWdfaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzOwogCXU4IGlkbGVzdF9vZmZzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTN4eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmgKaW5kZXggN2ExNmI1NS4uNzM0YTg1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTN4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5oCkBAIC02OCwxOCArNjgsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIAotZXh0ZXJuIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKLWV4dGVybiB2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOwotZXh0ZXJuIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfc2xlZXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOwotZXh0ZXJuIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfd2FrZXVwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKLQotZXh0ZXJuIGJvb2wgb21hcDN4eHhfY21faXNfY2xrZG1faW5faHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOwotZXh0ZXJuIGludCBvbWFwM3h4eF9jbV93YWl0X21vZHVsZV9yZWFkeShzMTYgcHJjbV9tb2QsIHU4IGlkbGVzdF9pZCwKLQkJCQkJIHU4IGlkbGVzdF9zaGlmdCk7Ci0KLWV4dGVybiBpbnQgb21hcDN4eHhfY21fc3BsaXRfaWRsZXN0X3JlZyh2b2lkIF9faW9tZW0gKmlkbGVzdF9yZWcsCi0JCQkJCXMxNiAqcHJjbV9pbnN0LCB1OCAqaWRsZXN0X3JlZ19pZCk7Ci0KIGV4dGVybiB2b2lkIG9tYXAzX2NtX3NhdmVfY29udGV4dCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAzX2NtX3Jlc3RvcmVfY29udGV4dCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAzX2NtX3NhdmVfc2NyYXRjaHBhZF9jb250ZW50cyh1MzIgKnB0cik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU1Y2M3Yi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIE9NQVA0IENNMSwgQ00yIG1vZHVsZSBsb3ctbGV2ZWwgZnVuY3Rpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCi0gKiBQYXVsIFdhbG1zbGV5Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgb25seSBieSB0aGUgY21pbnN0NDR4eC5jIGZpbGUuCi0gKiBYWFggUGVyaGFwcyB3ZSBzaG91bGQganVzdCBtb3ZlIHRoZW0gdGhlcmUgYW5kIG1ha2UgdGhlbSBzdGF0aWMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSAiY20uaCIKLSNpbmNsdWRlICJjbTFfNDR4eC5oIgotI2luY2x1ZGUgImNtMl80NHh4LmgiCi0KLS8qIENNMSBoYXJkd2FyZSBtb2R1bGUgbG93LWxldmVsIGZ1bmN0aW9ucyAqLwotCi0vKiBSZWFkIGEgcmVnaXN0ZXIgaW4gQ00xICovCi11MzIgb21hcDRfY20xX3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiByZWcpCi17Ci0JcmV0dXJuIHJlYWRsX3JlbGF4ZWQoY21fYmFzZSArIGluc3QgKyByZWcpOwotfQotCi0vKiBXcml0ZSBpbnRvIGEgcmVnaXN0ZXIgaW4gQ00xICovCi12b2lkIG9tYXA0X2NtMV93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IHJlZykKLXsKLQl3cml0ZWxfcmVsYXhlZCh2YWwsIGNtX2Jhc2UgKyBpbnN0ICsgcmVnKTsKLX0KLQotLyogUmVhZCBhIHJlZ2lzdGVyIGluIENNMiAqLwotdTMyIG9tYXA0X2NtMl9yZWFkX2luc3RfcmVnKHMxNiBpbnN0LCB1MTYgcmVnKQotewotCXJldHVybiByZWFkbF9yZWxheGVkKGNtMl9iYXNlICsgaW5zdCArIHJlZyk7Ci19Ci0KLS8qIFdyaXRlIGludG8gYSByZWdpc3RlciBpbiBDTTIgKi8KLXZvaWQgb21hcDRfY20yX3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgcmVnKQotewotCXdyaXRlbF9yZWxheGVkKHZhbCwgY20yX2Jhc2UgKyBpbnN0ICsgcmVnKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5oCmluZGV4IDMzODBiZWUuLjcyOGQwNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguaApAQCAtMjMsNCArMjMsNyBAQAogI2RlZmluZSBPTUFQNF9DTV9DTEtTVENUUkwJCQkJMHgwMDAwCiAjZGVmaW5lIE9NQVA0X0NNX1NUQVRJQ0RFUAkJCQkweDAwMDQKIAordm9pZCBvbWFwX2NtX2Jhc2VfaW5pdCh2b2lkKTsKK2ludCBvbWFwNF9jbV9pbml0KHZvaWQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY21fNDR4eF81NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtXzQ0eHhfNTR4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmIyMTE2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY21fNDR4eF81NHh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogT01BUDQ0eHggYW5kIE9NQVA1NHh4IENNMS9DTTIgZnVuY3Rpb24gcHJvdG90eXBlcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFBhdWwgV2FsbXNsZXkgKHBhdWxAcHdzYW4uY29tKQotICogUmFqZW5kcmEgTmF5YWsgKHJuYXlha0B0aS5jb20pCi0gKiBCZW5vaXQgQ291c3NvbiAoYi1jb3Vzc29uQHRpLmNvbSkKLSAqCi0gKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZSBkYXRhYmFzZXMuCi0gKiBXZSByZXNwZWN0ZnVsbHkgYXNrIHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIGJlIGNvb3JkaW5hdGVkCi0gKiB3aXRoIHRoZSBwdWJsaWMgbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcgbWFpbGluZyBsaXN0IGFuZCB0aGUKLSAqIGF1dGhvcnMgYWJvdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG9nZW5lcmF0aW9uIHNjcmlwdHMgYXJlIGtlcHQKLSAqIHVwLXRvLWRhdGUgd2l0aCB0aGUgZmlsZSBjb250ZW50cy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTV80NFhYXzU0WFhfSAotI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ01fNDRYWF81NVhYX0gKLQotLyogQ00xIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLWV4dGVybiB1MzIgb21hcDRfY20xX3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiBpZHgpOwotZXh0ZXJuIHZvaWQgb21hcDRfY20xX3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgaWR4KTsKLWV4dGVybiB1MzIgb21hcDRfY20xX3Jtd19pbnN0X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IGluc3QsIHMxNiBpZHgpOwotCi0vKiBDTTIgRnVuY3Rpb24gcHJvdG90eXBlcyAqLwotZXh0ZXJuIHUzMiBvbWFwNF9jbTJfcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IGlkeCk7Ci1leHRlcm4gdm9pZCBvbWFwNF9jbTJfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiBpZHgpOwotZXh0ZXJuIHUzMiBvbWFwNF9jbTJfcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IGlkeCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbV9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21fY29tbW9uLmMKaW5kZXggOGY2YzQ3MS4uOGZlMDJmY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY21fY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbV9jb21tb24uYwpAQCAtNzIsOSArNzIsMTAgQEAKIH0KIAogLyoqCi0gKiBjbV93YWl0X21vZHVsZV9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGxlYXZlIGlkbGUgb3Igc3RhbmRieQorICogb21hcF9jbV93YWl0X21vZHVsZV9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGxlYXZlIGlkbGUgb3Igc3RhbmRieQorICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uCiAgKiBAcHJjbV9tb2Q6IFBSQ00gbW9kdWxlIG9mZnNldAotICogQGlkbGVzdF9pZDogQ01fSURMRVNUeCByZWdpc3RlciBJRCAoaS5lLiwgeCA9IDEsIDIsIDMpCisgKiBAaWRsZXN0X3JlZzogQ01fSURMRVNUeCByZWdpc3RlcgogICogQGlkbGVzdF9zaGlmdDogc2hpZnQgb2YgdGhlIGJpdCBpbiB0aGUgQ01fSURMRVNUKiByZWdpc3RlciB0byBjaGVjawogICoKICAqIFdhaXQgZm9yIHRoZSBQUkNNIHRvIGluZGljYXRlIHRoYXQgdGhlIG1vZHVsZSBpZGVudGlmaWVkIGJ5CkBAIC04Myw3ICs4NCw4IEBACiAgKiBubyBwZXItU29DIHdhaXRfbW9kdWxlX3JlYWR5KCkgZnVuY3Rpb24gcG9pbnRlciBoYXMgYmVlbiByZWdpc3RlcmVkCiAgKiBvciBpZiB0aGUgaWRsZXN0IHJlZ2lzdGVyIGlzIHVua25vd24gb24gdGhlIFNvQy4KICAqLwotaW50IGNtX3dhaXRfbW9kdWxlX3JlYWR5KHMxNiBwcmNtX21vZCwgdTggaWRsZXN0X2lkLCB1OCBpZGxlc3Rfc2hpZnQpCitpbnQgb21hcF9jbV93YWl0X21vZHVsZV9yZWFkeSh1OCBwYXJ0LCBzMTYgcHJjbV9tb2QsIHUxNiBpZGxlc3RfcmVnLAorCQkJICAgICAgdTggaWRsZXN0X3NoaWZ0KQogewogCWlmICghY21fbGxfZGF0YS0+d2FpdF9tb2R1bGVfcmVhZHkpIHsKIAkJV0FSTl9PTkNFKDEsICJjbTogJXM6IG5vIGxvdy1sZXZlbCBmdW5jdGlvbiBkZWZpbmVkXG4iLApAQCAtOTEsNyArOTMsNzkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIGNtX2xsX2RhdGEtPndhaXRfbW9kdWxlX3JlYWR5KHByY21fbW9kLCBpZGxlc3RfaWQsIGlkbGVzdF9zaGlmdCk7CisJcmV0dXJuIGNtX2xsX2RhdGEtPndhaXRfbW9kdWxlX3JlYWR5KHBhcnQsIHByY21fbW9kLCBpZGxlc3RfcmVnLAorCQkJCQkgICAgIGlkbGVzdF9zaGlmdCk7Cit9CisKKy8qKgorICogb21hcF9jbV93YWl0X21vZHVsZV9pZGxlIC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gZW50ZXIgaWRsZSBvciBzdGFuZGJ5CisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24KKyAqIEBwcmNtX21vZDogUFJDTSBtb2R1bGUgb2Zmc2V0CisgKiBAaWRsZXN0X3JlZzogQ01fSURMRVNUeCByZWdpc3RlcgorICogQGlkbGVzdF9zaGlmdDogc2hpZnQgb2YgdGhlIGJpdCBpbiB0aGUgQ01fSURMRVNUKiByZWdpc3RlciB0byBjaGVjaworICoKKyAqIFdhaXQgZm9yIHRoZSBQUkNNIHRvIGluZGljYXRlIHRoYXQgdGhlIG1vZHVsZSBpZGVudGlmaWVkIGJ5CisgKiAoQHByY21fbW9kLCBAaWRsZXN0X2lkLCBAaWRsZXN0X3NoaWZ0KSBpcyBubyBsb25nZXIgY2xvY2tlZC4gIFJldHVybgorICogMCB1cG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiB0aGUgbW9kdWxlIGRvZXNuJ3QgZW5hYmxlIGluIHRpbWUsIG9yCisgKiAtRUlOVkFMIGlmIG5vIHBlci1Tb0Mgd2FpdF9tb2R1bGVfaWRsZSgpIGZ1bmN0aW9uIHBvaW50ZXIgaGFzIGJlZW4KKyAqIHJlZ2lzdGVyZWQgb3IgaWYgdGhlIGlkbGVzdCByZWdpc3RlciBpcyB1bmtub3duIG9uIHRoZSBTb0MuCisgKi8KK2ludCBvbWFwX2NtX3dhaXRfbW9kdWxlX2lkbGUodTggcGFydCwgczE2IHByY21fbW9kLCB1MTYgaWRsZXN0X3JlZywKKwkJCSAgICAgdTggaWRsZXN0X3NoaWZ0KQoreworCWlmICghY21fbGxfZGF0YS0+d2FpdF9tb2R1bGVfaWRsZSkgeworCQlXQVJOX09OQ0UoMSwgImNtOiAlczogbm8gbG93LWxldmVsIGZ1bmN0aW9uIGRlZmluZWRcbiIsCisJCQkgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGNtX2xsX2RhdGEtPndhaXRfbW9kdWxlX2lkbGUocGFydCwgcHJjbV9tb2QsIGlkbGVzdF9yZWcsCisJCQkJCSAgICBpZGxlc3Rfc2hpZnQpOworfQorCisvKioKKyAqIG9tYXBfY21fbW9kdWxlX2VuYWJsZSAtIGVuYWJsZSBhIG1vZHVsZQorICogQG1vZGU6IHRhcmdldCBtb2RlIGZvciB0aGUgbW9kdWxlCisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24KKyAqIEBpbnN0OiBQUkNNIGluc3RhbmNlCisgKiBAY2xrY3RybF9vZmZzOiBDTV9DTEtDVFJMIHJlZ2lzdGVyIG9mZnNldCBmb3IgdGhlIG1vZHVsZQorICoKKyAqIEVuYWJsZXMgY2xvY2tzIGZvciBhIG1vZHVsZSBpZGVudGlmaWVkIGJ5IChAcGFydCwgQGluc3QsIEBjbGtjdHJsX29mZnMpCisgKiBtYWtpbmcgaXRzIElPIHNwYWNlIGFjY2Vzc2libGUuIFJldHVybiAwIHVwb24gc3VjY2VzcywgLUVJTlZBTCBpZiBubworICogcGVyLVNvQyBtb2R1bGVfZW5hYmxlKCkgZnVuY3Rpb24gcG9pbnRlciBoYXMgYmVlbiByZWdpc3RlcmVkLgorICovCitpbnQgb21hcF9jbV9tb2R1bGVfZW5hYmxlKHU4IG1vZGUsIHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKQoreworCWlmICghY21fbGxfZGF0YS0+bW9kdWxlX2VuYWJsZSkgeworCQlXQVJOX09OQ0UoMSwgImNtOiAlczogbm8gbG93LWxldmVsIGZ1bmN0aW9uIGRlZmluZWRcbiIsCisJCQkgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY21fbGxfZGF0YS0+bW9kdWxlX2VuYWJsZShtb2RlLCBwYXJ0LCBpbnN0LCBjbGtjdHJsX29mZnMpOworCXJldHVybiAwOworfQorCisvKioKKyAqIG9tYXBfY21fbW9kdWxlX2Rpc2FibGUgLSBkaXNhYmxlIGEgbW9kdWxlCisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24KKyAqIEBpbnN0OiBQUkNNIGluc3RhbmNlCisgKiBAY2xrY3RybF9vZmZzOiBDTV9DTEtDVFJMIHJlZ2lzdGVyIG9mZnNldCBmb3IgdGhlIG1vZHVsZQorICoKKyAqIERpc2FibGVzIGNsb2NrcyBmb3IgYSBtb2R1bGUgaWRlbnRpZmllZCBieSAoQHBhcnQsIEBpbnN0LCBAY2xrY3RybF9vZmZzKQorICogbWFraW5ncyBpdHMgSU8gc3BhY2UgaW5hY2Nlc3NpYmxlLiBSZXR1cm4gMCB1cG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYKKyAqIG5vIHBlci1Tb0MgbW9kdWxlX2Rpc2FibGUoKSBmdW5jdGlvbiBwb2ludGVyIGhhcyBiZWVuIHJlZ2lzdGVyZWQuCisgKi8KK2ludCBvbWFwX2NtX21vZHVsZV9kaXNhYmxlKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKQoreworCWlmICghY21fbGxfZGF0YS0+bW9kdWxlX2Rpc2FibGUpIHsKKwkJV0FSTl9PTkNFKDEsICJjbTogJXM6IG5vIGxvdy1sZXZlbCBmdW5jdGlvbiBkZWZpbmVkXG4iLAorCQkJICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNtX2xsX2RhdGEtPm1vZHVsZV9kaXNhYmxlKHBhcnQsIGluc3QsIGNsa2N0cmxfb2Zmcyk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYwppbmRleCAxMmFjYTU2Li45NWE4Y2ZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNtMV80NHh4LmgiCiAjaW5jbHVkZSAiY20yXzQ0eHguaCIKICNpbmNsdWRlICJjbTQ0eHguaCIKLSNpbmNsdWRlICJjbWluc3Q0NHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAicHJjbTQ0eHguaCIKICNpbmNsdWRlICJwcm00NHh4LmgiCkBAIC03NCwxNyArNzMsMTggQEAKIAogLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KIAorc3RhdGljIHUzMiBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZyh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGlkeCk7CisKIC8qKgogICogX2Nsa2N0cmxfaWRsZXN0IC0gcmVhZCBhIENNXypfQ0xLQ1RSTCByZWdpc3RlcjsgbWFzayAmIHNoaWZ0IElETEVTVCBiaXRmaWVsZAogICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uIElEIHRoYXQgdGhlIENNX0NMS0NUUkwgcmVnaXN0ZXIgZXhpc3RzIGluCiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCiAgKgogICogUmV0dXJuIHRoZSBJRExFU1QgYml0ZmllbGQgb2YgYSBDTV8qX0NMS0NUUkwgcmVnaXN0ZXIsIHNoaWZ0ZWQgZG93biB0bwogICogYml0IDAuCiAgKi8KLXN0YXRpYyB1MzIgX2Nsa2N0cmxfaWRsZXN0KHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIHUzMiBfY2xrY3RybF9pZGxlc3QodTggcGFydCwgdTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpCiB7CiAJdTMyIHYgPSBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZyhwYXJ0LCBpbnN0LCBjbGtjdHJsX29mZnMpOwogCXYgJj0gT01BUDQ0MzBfSURMRVNUX01BU0s7CkBAIC05NiwyNiArOTYsMjMgQEAKICAqIF9pc19tb2R1bGVfcmVhZHkgLSBjYW4gbW9kdWxlIHJlZ2lzdGVycyBiZSBhY2Nlc3NlZCB3aXRob3V0IGNhdXNpbmcgYW4gYWJvcnQ/CiAgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24gSUQgdGhhdCB0aGUgQ01fQ0xLQ1RSTCByZWdpc3RlciBleGlzdHMgaW4KICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1vZHVsZSdzIENNXypfQ0xLQ1RSTC5JRExFU1QgYml0ZmllbGQgaXMgZWl0aGVyCiAgKiAqRlVOQ1RJT05BTCBvciAqSU5URVJGQUNFX0lETEU7IGZhbHNlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGJvb2wgX2lzX21vZHVsZV9yZWFkeSh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyBib29sIF9pc19tb2R1bGVfcmVhZHkodTggcGFydCwgdTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpCiB7CiAJdTMyIHY7CiAKLQl2ID0gX2Nsa2N0cmxfaWRsZXN0KHBhcnQsIGluc3QsIGNkb2ZmcywgY2xrY3RybF9vZmZzKTsKKwl2ID0gX2Nsa2N0cmxfaWRsZXN0KHBhcnQsIGluc3QsIGNsa2N0cmxfb2Zmcyk7CiAKIAlyZXR1cm4gKHYgPT0gQ0xLQ1RSTF9JRExFU1RfRlVOQ1RJT05BTCB8fAogCQl2ID09IENMS0NUUkxfSURMRVNUX0lOVEVSRkFDRV9JRExFKSA/IHRydWUgOiBmYWxzZTsKIH0KIAotLyogUHVibGljIGZ1bmN0aW9ucyAqLwotCiAvKiBSZWFkIGEgcmVnaXN0ZXIgaW4gYSBDTSBpbnN0YW5jZSAqLwotdTMyIG9tYXA0X2NtaW5zdF9yZWFkX2luc3RfcmVnKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgaWR4KQorc3RhdGljIHUzMiBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZyh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGlkeCkKIHsKIAlCVUdfT04ocGFydCA+PSBPTUFQNF9NQVhfUFJDTV9QQVJUSVRJT05TIHx8CiAJICAgICAgIHBhcnQgPT0gT01BUDQ0MzBfSU5WQUxJRF9QUkNNX1BBUlRJVElPTiB8fApAQCAtMTI0LDcgKzEyMSw3IEBACiB9CiAKIC8qIFdyaXRlIGludG8gYSByZWdpc3RlciBpbiBhIENNIGluc3RhbmNlICovCi12b2lkIG9tYXA0X2NtaW5zdF93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCB1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGlkeCkKK3N0YXRpYyB2b2lkIG9tYXA0X2NtaW5zdF93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCB1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGlkeCkKIHsKIAlCVUdfT04ocGFydCA+PSBPTUFQNF9NQVhfUFJDTV9QQVJUSVRJT05TIHx8CiAJICAgICAgIHBhcnQgPT0gT01BUDQ0MzBfSU5WQUxJRF9QUkNNX1BBUlRJVElPTiB8fApAQCAtMTMzLDggKzEzMCw4IEBACiB9CiAKIC8qIFJlYWQtbW9kaWZ5LXdyaXRlIGEgcmVnaXN0ZXIgaW4gQ00xLiBDYWxsZXIgbXVzdCBsb2NrICovCi11MzIgb21hcDRfY21pbnN0X3Jtd19pbnN0X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgdTggcGFydCwgdTE2IGluc3QsCi0JCQkJICAgczE2IGlkeCkKK3N0YXRpYyB1MzIgb21hcDRfY21pbnN0X3Jtd19pbnN0X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgdTggcGFydCwgdTE2IGluc3QsCisJCQkJCSAgczE2IGlkeCkKIHsKIAl1MzIgdjsKIApAQCAtMTQ2LDE3ICsxNDMsMTggQEAKIAlyZXR1cm4gdjsKIH0KIAotdTMyIG9tYXA0X2NtaW5zdF9zZXRfaW5zdF9yZWdfYml0cyh1MzIgYml0cywgdTggcGFydCwgdTE2IGluc3QsIHMxNiBpZHgpCitzdGF0aWMgdTMyIG9tYXA0X2NtaW5zdF9zZXRfaW5zdF9yZWdfYml0cyh1MzIgYml0cywgdTggcGFydCwgdTE2IGluc3QsIHMxNiBpZHgpCiB7CiAJcmV0dXJuIG9tYXA0X2NtaW5zdF9ybXdfaW5zdF9yZWdfYml0cyhiaXRzLCBiaXRzLCBwYXJ0LCBpbnN0LCBpZHgpOwogfQogCi11MzIgb21hcDRfY21pbnN0X2NsZWFyX2luc3RfcmVnX2JpdHModTMyIGJpdHMsIHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgaWR4KQorc3RhdGljIHUzMiBvbWFwNF9jbWluc3RfY2xlYXJfaW5zdF9yZWdfYml0cyh1MzIgYml0cywgdTggcGFydCwgdTE2IGluc3QsCisJCQkJCSAgICBzMTYgaWR4KQogewogCXJldHVybiBvbWFwNF9jbWluc3Rfcm13X2luc3RfcmVnX2JpdHMoYml0cywgMHgwLCBwYXJ0LCBpbnN0LCBpZHgpOwogfQogCi11MzIgb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWdfYml0cyh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGlkeCwgdTMyIG1hc2spCitzdGF0aWMgdTMyIG9tYXA0X2NtaW5zdF9yZWFkX2luc3RfcmVnX2JpdHModTggcGFydCwgdTE2IGluc3QsIHMxNiBpZHgsIHUzMiBtYXNrKQogewogCXUzMiB2OwogCkBAIC0yMDAsNyArMTk4LDcgQEAKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2xvY2tkb21haW4gcmVmZXJyZWQgdG8gYnkgKEBwYXJ0LCBAaW5zdCwgQGNkb2ZmcykKICAqIGlzIGluIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlLCBvciAwIG90aGVyd2lzZS4KICAqLwotYm9vbCBvbWFwNF9jbWluc3RfaXNfY2xrZG1faW5faHdzdXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpCitzdGF0aWMgYm9vbCBvbWFwNF9jbWluc3RfaXNfY2xrZG1faW5faHdzdXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpCiB7CiAJdTMyIHY7CiAKQEAgLTIyMCw3ICsyMTgsNyBAQAogICogUHV0IGEgY2xvY2tkb21haW4gcmVmZXJyZWQgdG8gYnkgKEBwYXJ0LCBAaW5zdCwgQGNkb2ZmcykgaW50bwogICogaGFyZHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2VuYWJsZV9od3N1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2ZmcykKK3N0YXRpYyB2b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9lbmFibGVfaHdzdXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpCiB7CiAJX2Nsa3RyY3RybF93cml0ZShPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8sIHBhcnQsIGluc3QsIGNkb2Zmcyk7CiB9CkBAIC0yMzUsNyArMjMzLDcgQEAKICAqIHNvZnR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlLCBpLmUuLCBjb250cm9sbGVkIG1hbnVhbGx5IGJ5IHRoZQogICogTGludXggT01BUCBjbG9ja2RvbWFpbiBjb2RlLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9kaXNhYmxlX2h3c3VwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKQorc3RhdGljIHZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2Rpc2FibGVfaHdzdXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpCiB7CiAJX2Nsa3RyY3RybF93cml0ZShPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPLCBwYXJ0LCBpbnN0LCBjZG9mZnMpOwogfQpAQCAtMjQ5LDcgKzI0Nyw3IEBACiAgKiBUYWtlIGEgY2xvY2tkb21haW4gcmVmZXJyZWQgdG8gYnkgKEBwYXJ0LCBAaW5zdCwgQGNkb2Zmcykgb3V0IG9mIGlkbGUsCiAgKiB3YWtpbmcgaXQgdXAuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2ZvcmNlX3dha2V1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2ZmcykKK3N0YXRpYyB2b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9mb3JjZV93YWtldXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpCiB7CiAJX2Nsa3RyY3RybF93cml0ZShPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQLCBwYXJ0LCBpbnN0LCBjZG9mZnMpOwogfQpAQCAtMjU4LDcgKzI1Niw3IEBACiAgKgogICovCiAKLXZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2ZvcmNlX3NsZWVwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKQorc3RhdGljIHZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2ZvcmNlX3NsZWVwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKQogewogCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1NMRUVQLCBwYXJ0LCBpbnN0LCBjZG9mZnMpOwogfQpAQCAtMjY3LDIzICsyNjUsMjMgQEAKICAqIG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGJlIGluICdmdW5jJyBzdGF0ZQogICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uIElEIHRoYXQgdGhlIENNX0NMS0NUUkwgcmVnaXN0ZXIgZXhpc3RzIGluCiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCisgKiBAYml0X3NoaWZ0OiBiaXQgc2hpZnQgZm9yIHRoZSByZWdpc3RlciwgaWdub3JlZCBmb3IgT01BUDQrCiAgKgogICogV2FpdCBmb3IgdGhlIG1vZHVsZSBJRExFU1QgdG8gYmUgZnVuY3Rpb25hbC4gSWYgdGhlIGlkbGUgc3RhdGUgaXMgaW4gYW55CiAgKiB0aGUgbm9uIGZ1bmN0aW9uYWwgc3RhdGUgKHRyYW5zLCBpZGxlIG9yIGRpc2FibGVkKSwgbW9kdWxlIGFuZCB0aHVzIHRoZQogICogc3lzY29uZmlnIGNhbm5vdCBiZSBhY2Nlc3NlZCBhbmQgd2lsbCBwcm9iYWJseSBsZWFkIHRvIGFuICJpbXByZWNpc2UKICAqIGV4dGVybmFsIGFib3J0IgogICovCi1pbnQgb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCSAgIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgaW50IG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9yZWFkeSh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcywKKwkJCQkJICB1OCBiaXRfc2hpZnQpCiB7CiAJaW50IGkgPSAwOwogCiAJaWYgKCFjbGtjdHJsX29mZnMpCiAJCXJldHVybiAwOwogCi0Jb21hcF90ZXN0X3RpbWVvdXQoX2lzX21vZHVsZV9yZWFkeShwYXJ0LCBpbnN0LCBjZG9mZnMsIGNsa2N0cmxfb2ZmcyksCisJb21hcF90ZXN0X3RpbWVvdXQoX2lzX21vZHVsZV9yZWFkeShwYXJ0LCBpbnN0LCBjbGtjdHJsX29mZnMpLAogCQkJICBNQVhfTU9EVUxFX1JFQURZX1RJTUUsIGkpOwogCiAJcmV0dXJuIChpIDwgTUFYX01PRFVMRV9SRUFEWV9USU1FKSA/IDAgOiAtRUJVU1k7CkBAIC0yOTQsMjEgKzI5MiwyMiBAQAogICogc3RhdGUKICAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbiBJRCB0aGF0IHRoZSBDTV9DTEtDVFJMIHJlZ2lzdGVyIGV4aXN0cyBpbgogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQorICogQGJpdF9zaGlmdDogQml0IHNoaWZ0IGZvciB0aGUgcmVnaXN0ZXIsIGlnbm9yZWQgZm9yIE9NQVA0KwogICoKICAqIFdhaXQgZm9yIHRoZSBtb2R1bGUgSURMRVNUIHRvIGJlIGRpc2FibGVkLiBTb21lIFBSQ00gdHJhbnNpdGlvbiwKICAqIGxpa2UgcmVzZXQgYXNzZXJ0aW9uIG9yIHBhcmVudCBjbG9jayBkZS1hY3RpdmF0aW9uIG11c3Qgd2FpdCB0aGUKICAqIG1vZHVsZSB0byBiZSBmdWxseSBkaXNhYmxlZC4KICAqLwotaW50IG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9pZGxlKHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIGludCBvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfaWRsZSh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcywKKwkJCQkJIHU4IGJpdF9zaGlmdCkKIHsKIAlpbnQgaSA9IDA7CiAKIAlpZiAoIWNsa2N0cmxfb2ZmcykKIAkJcmV0dXJuIDA7CiAKLQlvbWFwX3Rlc3RfdGltZW91dCgoX2Nsa2N0cmxfaWRsZXN0KHBhcnQsIGluc3QsIGNkb2ZmcywgY2xrY3RybF9vZmZzKSA9PQorCW9tYXBfdGVzdF90aW1lb3V0KChfY2xrY3RybF9pZGxlc3QocGFydCwgaW5zdCwgY2xrY3RybF9vZmZzKSA9PQogCQkJICAgQ0xLQ1RSTF9JRExFU1RfRElTQUJMRUQpLAogCQkJICBNQVhfTU9EVUxFX0RJU0FCTEVfVElNRSwgaSk7CiAKQEAgLTMyMCwxMyArMzE5LDEyIEBACiAgKiBAbW9kZTogTW9kdWxlIG1vZGUgKFNXIG9yIEhXKQogICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uIElEIHRoYXQgdGhlIENNX0NMS0NUUkwgcmVnaXN0ZXIgZXhpc3RzIGluCiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCiAgKgogICogTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXA0X2NtaW5zdF9tb2R1bGVfZW5hYmxlKHU4IG1vZGUsIHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJICAgIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgdm9pZCBvbWFwNF9jbWluc3RfbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1OCBwYXJ0LCB1MTYgaW5zdCwKKwkJCQkgICAgICAgdTE2IGNsa2N0cmxfb2ZmcykKIHsKIAl1MzIgdjsKIApAQCAtMzQwLDEzICszMzgsMTEgQEAKICAqIG9tYXA0X2NtaW5zdF9tb2R1bGVfZGlzYWJsZSAtIERpc2FibGUgdGhlIG1vZHVsZSBpbnNpZGUgQ0xLQ1RSTAogICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uIElEIHRoYXQgdGhlIENNX0NMS0NUUkwgcmVnaXN0ZXIgZXhpc3RzIGluCiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCiAgKgogICogTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXA0X2NtaW5zdF9tb2R1bGVfZGlzYWJsZSh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCSAgICAgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyB2b2lkIG9tYXA0X2NtaW5zdF9tb2R1bGVfZGlzYWJsZSh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcykKIHsKIAl1MzIgdjsKIApAQCAtNTEwLDMgKzUwNiwyMSBAQAogCS5jbGtkbV9jbGtfZW5hYmxlCT0gb21hcDRfY2xrZG1fY2xrX2VuYWJsZSwKIAkuY2xrZG1fY2xrX2Rpc2FibGUJPSBvbWFwNF9jbGtkbV9jbGtfZGlzYWJsZSwKIH07CisKK3N0YXRpYyBzdHJ1Y3QgY21fbGxfZGF0YSBvbWFwNHh4eF9jbV9sbF9kYXRhID0geworCS53YWl0X21vZHVsZV9yZWFkeQk9ICZvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfcmVhZHksCisJLndhaXRfbW9kdWxlX2lkbGUJPSAmb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX2lkbGUsCisJLm1vZHVsZV9lbmFibGUJCT0gJm9tYXA0X2NtaW5zdF9tb2R1bGVfZW5hYmxlLAorCS5tb2R1bGVfZGlzYWJsZQkJPSAmb21hcDRfY21pbnN0X21vZHVsZV9kaXNhYmxlLAorfTsKKworaW50IF9faW5pdCBvbWFwNF9jbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGNtX3JlZ2lzdGVyKCZvbWFwNHh4eF9jbV9sbF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXA0X2NtX2V4aXQodm9pZCkKK3sKKwljbV91bnJlZ2lzdGVyKCZvbWFwNHh4eF9jbV9sbF9kYXRhKTsKK30KK19fZXhpdGNhbGwob21hcDRfY21fZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjU2ZWE0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIE9NQVA0IENsb2NrIE1hbmFnZW1lbnQgKENNKSBmdW5jdGlvbiBwcm90b3R5cGVzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCi0gKiBQYXVsIFdhbG1zbGV5Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI2lmbmRlZiBfX0FSQ0hfQVNNX01BQ0hfT01BUDJfQ01JTlNUNDRYWF9ICi0jZGVmaW5lIF9fQVJDSF9BU01fTUFDSF9PTUFQMl9DTUlOU1Q0NFhYX0gKLQotYm9vbCBvbWFwNF9jbWluc3RfaXNfY2xrZG1faW5faHdzdXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpOwotdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZW5hYmxlX2h3c3VwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKTsKLXZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2Rpc2FibGVfaHdzdXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpOwotdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfc2xlZXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpOwotdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfd2FrZXVwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKTsKLWV4dGVybiBpbnQgb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKTsKLWV4dGVybiBpbnQgb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX2lkbGUodTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJCSB1MTYgY2xrY3RybF9vZmZzKTsKLWV4dGVybiB2b2lkIG9tYXA0X2NtaW5zdF9tb2R1bGVfZW5hYmxlKHU4IG1vZGUsIHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCSAgICAgICB1MTYgY2xrY3RybF9vZmZzKTsKLWV4dGVybiB2b2lkIG9tYXA0X2NtaW5zdF9tb2R1bGVfZGlzYWJsZSh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkJdTE2IGNsa2N0cmxfb2Zmcyk7Ci0vKgotICogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHdvdWxkIG5vdCBleHBvcnQgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucywKLSAqIGJ1dCB0aGlzIHdpbGwgcHJvYmFibHkgdGFrZSBzb21lIHRpbWUgdG8gZml4IHByb3Blcmx5Ci0gKi8KLXUzMiBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZyh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGlkeCk7Ci12b2lkIG9tYXA0X2NtaW5zdF93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCB1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGlkeCk7Ci11MzIgb21hcDRfY21pbnN0X3Jtd19pbnN0X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgdTggcGFydCwKLQkJCQkgICB1MTYgaW5zdCwgczE2IGlkeCk7Ci11MzIgb21hcDRfY21pbnN0X3NldF9pbnN0X3JlZ19iaXRzKHUzMiBiaXRzLCB1OCBwYXJ0LCB1MTYgaW5zdCwKLQkJCQkgICBzMTYgaWR4KTsKLXUzMiBvbWFwNF9jbWluc3RfY2xlYXJfaW5zdF9yZWdfYml0cyh1MzIgYml0cywgdTggcGFydCwgdTE2IGluc3QsCi0JCQkJICAgICBzMTYgaWR4KTsKLWV4dGVybiB1MzIgb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWdfYml0cyh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGlkeCwKLQkJCQkJICAgdTMyIG1hc2spOwotCi1leHRlcm4gdm9pZCBvbWFwX2NtX2Jhc2VfaW5pdCh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCmluZGV4IDMyNGYwMmIuLmE3YmM0Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCkBAIC00OSw3ICs0OSw3IEBACiAJICogVG8gYXZvaWQgY29kZSBydW5uaW5nIG9uIG90aGVyIE9NQVBzIGluCiAJICogbXVsdGktb21hcCBidWlsZHMKIAkgKi8KLQlpZiAoIShjcHVfaXNfb21hcDM0eHgoKSkpCisJaWYgKCEoY3B1X2lzX29tYXAzNHh4KCkpIHx8IG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc25wcmludGYob2hfbmFtZSwgTDNfTU9EVUxFU19NQVhfTEVOLCAibDNfbWFpbiIpOwpAQCAtNjcsNDAgKzY3LDYgQEAKIH0KIG9tYXBfcG9zdGNvcmVfaW5pdGNhbGwob21hcDNfbDNfaW5pdCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IG9tYXA0X2wzX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgb21hcF9od21vZCAqb2hbM107Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQljaGFyIG9oX25hbWVbTDNfTU9EVUxFU19NQVhfTEVOXTsKLQotCS8qIElmIGR0YiBpcyB0aGVyZSwgdGhlIGRldmljZXMgd2lsbCBiZSBjcmVhdGVkIGR5bmFtaWNhbGx5ICovCi0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyoKLQkgKiBUbyBhdm9pZCBjb2RlIHJ1bm5pbmcgb24gb3RoZXIgT01BUHMgaW4KLQkgKiBtdWx0aS1vbWFwIGJ1aWxkcwotCSAqLwotCWlmICghY3B1X2lzX29tYXA0NHh4KCkgJiYgIXNvY19pc19vbWFwNTR4eCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWZvciAoaSA9IDA7IGkgPCBMM19NT0RVTEVTOyBpKyspIHsKLQkJc25wcmludGYob2hfbmFtZSwgTDNfTU9EVUxFU19NQVhfTEVOLCAibDNfbWFpbl8lZCIsIGkrMSk7Ci0KLQkJb2hbaV0gPSBvbWFwX2h3bW9kX2xvb2t1cChvaF9uYW1lKTsKLQkJaWYgKCEob2hbaV0pKQotCQkJcHJfZXJyKCJjb3VsZCBub3QgbG9vayB1cCAlc1xuIiwgb2hfbmFtZSk7Ci0JfQotCi0JcGRldiA9IG9tYXBfZGV2aWNlX2J1aWxkX3NzKCJvbWFwX2wzX25vYyIsIDAsIG9oLCAzLCBOVUxMLCAwKTsKLQotCVdBUk4oSVNfRVJSKHBkZXYpLCAiY291bGQgbm90IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlc1xuIiwgb2hfbmFtZSk7Ci0KLQlyZXR1cm4gUFRSX1JFVChwZGV2KTsKLX0KLW9tYXBfcG9zdGNvcmVfaW5pdGNhbGwob21hcDRfbDNfaW5pdCk7Ci0KICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfVklERU9fT01BUDJfTU9EVUxFKQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAyY2FtX3Jlc291cmNlc1tdID0gewpAQCAtNDQ1LDMgKzQxMSwyOSBAQAogCXJldHVybiAwOwogfQogb21hcF9hcmNoX2luaXRjYWxsKG9tYXAyX2luaXRfZGV2aWNlcyk7CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfZ3BtY19pbml0KHZvaWQpCit7CisJc3RydWN0IG9tYXBfaHdtb2QgKm9oOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJY2hhciAqb2hfbmFtZSA9ICJncG1jIjsKKworCS8qCisJICogaWYgdGhlIGJvYXJkIGJvb3RzIHVwIHdpdGggYSBwb3B1bGF0ZWQgRFQsIGRvIG5vdAorCSAqIG1hbnVhbGx5IGFkZCB0aGUgZGV2aWNlIGZyb20gdGhpcyBpbml0Y2FsbAorCSAqLworCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9oID0gb21hcF9od21vZF9sb29rdXAob2hfbmFtZSk7CisJaWYgKCFvaCkgeworCQlwcl9lcnIoIkNvdWxkIG5vdCBsb29rIHVwICVzXG4iLCBvaF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGRldiA9IG9tYXBfZGV2aWNlX2J1aWxkKCJvbWFwLWdwbWMiLCAtMSwgb2gsIE5VTEwsIDApOworCVdBUk4oSVNfRVJSKHBkZXYpLCAiY291bGQgbm90IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlc1xuIiwgb2hfbmFtZSk7CisKKwlyZXR1cm4gUFRSX1JFVChwZGV2KTsKK30KK29tYXBfcG9zdGNvcmVfaW5pdGNhbGwob21hcF9ncG1jX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsM3h4eC5jCmluZGV4IGFjM2Q3ODkuLjIwZTEyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMKQEAgLTQ2MCwyNSArNDYwLDI0IEBACiAvKiBOb24tQ09SRSBEUExMIHJhdGUgc2V0IGNvZGUgKi8KIAogLyoqCi0gKiBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUgLSBzZXQgbm9uLWNvcmUgRFBMTCByYXRlCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKLSAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCisgKiBvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUgLSBkZXRlcm1pbmUgcmF0ZSBmb3IgYSBEUExMCisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGNsb2NrIHRvIGRldGVybWluZSByYXRlIGZvcgorICogQHJhdGU6IHRhcmdldCByYXRlIGZvciB0aGUgRFBMTAorICogQGJlc3RfcGFyZW50X3JhdGU6IHBvaW50ZXIgZm9yIHJldHVybmluZyBiZXN0IHBhcmVudCByYXRlCisgKiBAYmVzdF9wYXJlbnRfY2xrOiBwb2ludGVyIGZvciByZXR1cm5pbmcgYmVzdCBwYXJlbnQgY2xvY2sKICAqCi0gKiBTZXQgdGhlIERQTEwgQ0xLT1VUIHRvIHRoZSB0YXJnZXQgcmF0ZS4gIElmIHRoZSBEUExMIGNhbiBlbnRlcgotICogbG93LXBvd2VyIGJ5cGFzcywgYW5kIHRoZSB0YXJnZXQgcmF0ZSBpcyB0aGUgYnlwYXNzIHNvdXJjZSBjbG9jawotICogcmF0ZSwgdGhlbiBjb25maWd1cmUgdGhlIERQTEwgZm9yIGJ5cGFzcy4gIE90aGVyd2lzZSwgcm91bmQgdGhlCi0gKiB0YXJnZXQgcmF0ZSBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGFscmVhZHksIHRoZW4gcHJvZ3JhbSBhbmQgbG9jawotICogdGhlIERQTEwuICBSZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKiBEZXRlcm1pbmVzIHdoaWNoIERQTEwgbW9kZSB0byB1c2UgZm9yIHJlYWNoaW5nIGEgZGVzaXJlZCB0YXJnZXQgcmF0ZS4KKyAqIENoZWNrcyB3aGV0aGVyIHRoZSBEUExMIHNoYWxsIGJlIGluIGJ5cGFzcyBvciBsb2NrZWQgbW9kZSwgYW5kIGlmCisgKiBsb2NrZWQsIGNhbGN1bGF0ZXMgdGhlIE0sTiB2YWx1ZXMgZm9yIHRoZSBEUExMIHZpYSByb3VuZC1yYXRlLgorICogUmV0dXJucyBhIHBvc2l0aXZlIGNsb2NrIHJhdGUgd2l0aCBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciB2YWx1ZQorICogaW4gZmFpbHVyZS4KICAqLwotaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAotCQkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQorbG9uZyBvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqYmVzdF9wYXJlbnRfcmF0ZSwKKwkJCQkgICAgICAgc3RydWN0IGNsayAqKmJlc3RfcGFyZW50X2NsaykKIHsKIAlzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsayA9IHRvX2Nsa19od19vbWFwKGh3KTsKLQlzdHJ1Y3QgY2xrICpuZXdfcGFyZW50ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHJyYXRlOwotCXUxNiBmcmVxc2VsID0gMDsKIAlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQlpbnQgcmV0OwogCiAJaWYgKCFodyB8fCAhcmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00ODksNjEgKzQ4OCwxMjEgQEAKIAogCWlmIChfX2Nsa19nZXRfcmF0ZShkZC0+Y2xrX2J5cGFzcykgPT0gcmF0ZSAmJgogCSAgICAoZGQtPm1vZGVzICYgKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSkpIHsKLQkJcHJfZGVidWcoIiVzOiAlczogc2V0IHJhdGU6IGVudGVyaW5nIGJ5cGFzcy5cbiIsCi0JCQkgX19mdW5jX18sIF9fY2xrX2dldF9uYW1lKGh3LT5jbGspKTsKLQotCQlfX2Nsa19wcmVwYXJlKGRkLT5jbGtfYnlwYXNzKTsKLQkJY2xrX2VuYWJsZShkZC0+Y2xrX2J5cGFzcyk7Ci0JCXJldCA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7Ci0JCWlmICghcmV0KQotCQkJbmV3X3BhcmVudCA9IGRkLT5jbGtfYnlwYXNzOwotCQljbGtfZGlzYWJsZShkZC0+Y2xrX2J5cGFzcyk7Ci0JCV9fY2xrX3VucHJlcGFyZShkZC0+Y2xrX2J5cGFzcyk7CisJCSpiZXN0X3BhcmVudF9jbGsgPSBkZC0+Y2xrX2J5cGFzczsKIAl9IGVsc2UgewotCQlfX2Nsa19wcmVwYXJlKGRkLT5jbGtfcmVmKTsKLQkJY2xrX2VuYWJsZShkZC0+Y2xrX3JlZik7Ci0KLQkJLyogWFhYIHRoaXMgY2hlY2sgaXMgcHJvYmFibHkgcG9pbnRsZXNzIGluIHRoZSBDQ0YgY29udGV4dCAqLwotCQlpZiAoZGQtPmxhc3Rfcm91bmRlZF9yYXRlICE9IHJhdGUpIHsKLQkJCXJyYXRlID0gX19jbGtfcm91bmRfcmF0ZShody0+Y2xrLCByYXRlKTsKLQkJCWlmIChycmF0ZSAhPSByYXRlKSB7Ci0JCQkJcHJfd2FybigiJXM6ICVzOiBmaW5hbCByYXRlICVsdSBkb2VzIG5vdCBtYXRjaCBkZXNpcmVkIHJhdGUgJWx1XG4iLAotCQkJCQlfX2Z1bmNfXywgX19jbGtfZ2V0X25hbWUoaHctPmNsayksCi0JCQkJCXJyYXRlLCByYXRlKTsKLQkJCQlyYXRlID0gcnJhdGU7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoZGQtPmxhc3Rfcm91bmRlZF9yYXRlID09IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBGcmVxc2VsIGlzIGF2YWlsYWJsZSBvbmx5IG9uIE9NQVAzNDNYIGRldmljZXMgKi8KLQkJaWYgKHRpX2Nsa19mZWF0dXJlcy5mbGFncyAmIFRJX0NMS19EUExMX0hBU19GUkVRU0VMKSB7Ci0JCQlmcmVxc2VsID0gX29tYXAzX2RwbGxfY29tcHV0ZV9mcmVxc2VsKGNsaywKLQkJCQkJCWRkLT5sYXN0X3JvdW5kZWRfbik7Ci0JCQlXQVJOX09OKCFmcmVxc2VsKTsKLQkJfQotCi0JCXByX2RlYnVnKCIlczogJXM6IHNldCByYXRlOiBsb2NraW5nIHJhdGUgdG8gJWx1LlxuIiwKLQkJCSBfX2Z1bmNfXywgX19jbGtfZ2V0X25hbWUoaHctPmNsayksIHJhdGUpOwotCi0JCXJldCA9IG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtKGNsaywgZnJlcXNlbCk7Ci0JCWlmICghcmV0KQotCQkJbmV3X3BhcmVudCA9IGRkLT5jbGtfcmVmOwotCQljbGtfZGlzYWJsZShkZC0+Y2xrX3JlZik7Ci0JCV9fY2xrX3VucHJlcGFyZShkZC0+Y2xrX3JlZik7CisJCXJhdGUgPSBvbWFwMl9kcGxsX3JvdW5kX3JhdGUoaHcsIHJhdGUsIGJlc3RfcGFyZW50X3JhdGUpOworCQkqYmVzdF9wYXJlbnRfY2xrID0gZGQtPmNsa19yZWY7CiAJfQorCisJKmJlc3RfcGFyZW50X3JhdGUgPSByYXRlOworCisJcmV0dXJuIHJhdGU7Cit9CisKKy8qKgorICogb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQgLSBzZXQgcGFyZW50IGZvciBhIERQTEwgY2xvY2sKKyAqIEBodzogcG9pbnRlciB0byB0aGUgY2xvY2sgdG8gc2V0IHBhcmVudCBmb3IKKyAqIEBpbmRleDogcGFyZW50IGluZGV4IHRvIHNlbGVjdAorICoKKyAqIFNldHMgcGFyZW50IGZvciBhIERQTEwgY2xvY2suIFRoaXMgc2V0cyB0aGUgRFBMTCBpbnRvIGJ5cGFzcyBvcgorICogbG9ja2VkIG1vZGUuIFJldHVybnMgMCB3aXRoIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkKK3sKKwlzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsayA9IHRvX2Nsa19od19vbWFwKGh3KTsKKwlpbnQgcmV0OworCisJaWYgKCFodykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5kZXgpCisJCXJldCA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7CisJZWxzZQorCQlyZXQgPSBfb21hcDNfbm9uY29yZV9kcGxsX2xvY2soY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlIC0gc2V0IHJhdGUgZm9yIGEgRFBMTCBjbG9jaworICogQGh3OiBwb2ludGVyIHRvIHRoZSBjbG9jayB0byBzZXQgcGFyZW50IGZvcgorICogQHJhdGU6IHRhcmdldCByYXRlIGZvciB0aGUgY2xvY2sKKyAqIEBwYXJlbnRfcmF0ZTogcmF0ZSBvZiB0aGUgcGFyZW50IGNsb2NrCisgKgorICogU2V0cyByYXRlIGZvciBhIERQTEwgY2xvY2suIEZpcnN0IGNoZWNrcyBpZiB0aGUgY2xvY2sgcGFyZW50IGlzCisgKiByZWZlcmVuY2UgY2xvY2sgKGluIGJ5cGFzcyBtb2RlLCB0aGUgcmF0ZSBvZiB0aGUgY2xvY2sgY2FuJ3QgYmUKKyAqIGNoYW5nZWQpIGFuZCBwcm9jZWVkcyB3aXRoIHRoZSByYXRlIGNoYW5nZSBvcGVyYXRpb24uIFJldHVybnMgMAorICogd2l0aCBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBjbGtfaHdfb21hcCAqY2xrID0gdG9fY2xrX2h3X29tYXAoaHcpOworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOworCXUxNiBmcmVxc2VsID0gMDsKKwlpbnQgcmV0OworCisJaWYgKCFodyB8fCAhcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCWlmICghZGQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKF9fY2xrX2dldF9wYXJlbnQoaHctPmNsaykgIT0gZGQtPmNsa19yZWYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEZyZXFzZWwgaXMgYXZhaWxhYmxlIG9ubHkgb24gT01BUDM0M1ggZGV2aWNlcyAqLworCWlmICh0aV9jbGtfZmVhdHVyZXMuZmxhZ3MgJiBUSV9DTEtfRFBMTF9IQVNfRlJFUVNFTCkgeworCQlmcmVxc2VsID0gX29tYXAzX2RwbGxfY29tcHV0ZV9mcmVxc2VsKGNsaywgZGQtPmxhc3Rfcm91bmRlZF9uKTsKKwkJV0FSTl9PTighZnJlcXNlbCk7CisJfQorCisJcHJfZGVidWcoIiVzOiAlczogc2V0IHJhdGU6IGxvY2tpbmcgcmF0ZSB0byAlbHUuXG4iLCBfX2Z1bmNfXywKKwkJIF9fY2xrX2dldF9uYW1lKGh3LT5jbGspLCByYXRlKTsKKworCXJldCA9IG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtKGNsaywgZnJlcXNlbCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZV9hbmRfcGFyZW50IC0gc2V0IHJhdGUgYW5kIHBhcmVudCBmb3IgYSBEUExMIGNsb2NrCisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGNsb2NrIHRvIHNldCByYXRlIGFuZCBwYXJlbnQgZm9yCisgKiBAcmF0ZTogdGFyZ2V0IHJhdGUgZm9yIHRoZSBEUExMCisgKiBAcGFyZW50X3JhdGU6IGNsb2NrIHJhdGUgb2YgdGhlIERQTEwgcGFyZW50CisgKiBAaW5kZXg6IG5ldyBwYXJlbnQgaW5kZXggZm9yIHRoZSBEUExMLCAwIC0gcmVmZXJlbmNlLCAxIC0gYnlwYXNzCisgKgorICogU2V0cyByYXRlIGFuZCBwYXJlbnQgZm9yIGEgRFBMTCBjbG9jay4gSWYgbmV3IHBhcmVudCBpcyB0aGUgYnlwYXNzCisgKiBjbG9jaywgb25seSBzZWxlY3RzIHRoZSBwYXJlbnQuIE90aGVyd2lzZSBwcm9jZWVkcyB3aXRoIGEgcmF0ZQorICogY2hhbmdlLCBhcyB0aGlzIHdpbGwgZWZmZWN0aXZlbHkgYWxzbyBjaGFuZ2UgdGhlIHBhcmVudCBhcyB0aGUKKyAqIERQTEwgaXMgcHV0IGludG8gbG9ja2VkIG1vZGUuIFJldHVybnMgMCB3aXRoIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yCisgKiB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGVfYW5kX3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJICAgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLAorCQkJCQkgICB1OCBpbmRleCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFodyB8fCAhcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKgotCSogRklYTUUgLSB0aGlzIGlzIGFsbCB3cm9uZy4gIGNvbW1vbiBjb2RlIGhhbmRsZXMgcmVwYXJlbnRpbmcgYW5kCi0JKiBtaWdyYXRpbmcgcHJlcGFyZS9lbmFibGUgY291bnRzLiAgZHBsbHMgc2hvdWxkIGJlIGEgbXVsdGlwbGV4ZXIKLQkqIGNsb2NrIGFuZCB0aGlzIHNob3VsZCBiZSBhIHNldF9wYXJlbnQgb3BlcmF0aW9uIHNvIHRoYXQgYWxsIG9mIHRoYXQKLQkqIHN0dWZmIGlzIGluaGVyaXRlZCBmb3IgZnJlZQotCSovCisJICogY2xrLXJlZiBhdCBpbmRleFswXSwgaW4gd2hpY2ggY2FzZSB3ZSBvbmx5IG5lZWQgdG8gc2V0IHJhdGUsCisJICogdGhlIHBhcmVudCB3aWxsIGJlIGNoYW5nZWQgYXV0b21hdGljYWxseSB3aXRoIHRoZSBsb2NrIHNlcXVlbmNlLgorCSAqIFdpdGggY2xrLWJ5cGFzcyBjYXNlIHdlIG9ubHkgbmVlZCB0byBjaGFuZ2UgcGFyZW50LgorCSAqLworCWlmIChpbmRleCkKKwkJcmV0ID0gb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQoaHcsIGluZGV4KTsKKwllbHNlCisJCXJldCA9IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShodywgcmF0ZSwgcGFyZW50X3JhdGUpOwogCi0JaWYgKCFyZXQgJiYgY2xrX2dldF9wYXJlbnQoaHctPmNsaykgIT0gbmV3X3BhcmVudCkKLQkJX19jbGtfcmVwYXJlbnQoaHctPmNsaywgbmV3X3BhcmVudCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBEUExMIGF1dG9pZGxlIHJlYWQvc2V0IGNvZGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDQ0eHguYwppbmRleCA0NjEzZjFlLi41MzU4MjJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGw0NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsNDR4eC5jCkBAIC0yMDcsMyArMjA3LDQ0IEBACiAKIAlyZXR1cm4gZGQtPmxhc3Rfcm91bmRlZF9yYXRlOwogfQorCisvKioKKyAqIG9tYXA0X2RwbGxfcmVnbTR4ZW5fZGV0ZXJtaW5lX3JhdGUgLSBkZXRlcm1pbmUgcmF0ZSBmb3IgYSBEUExMCisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGNsb2NrIHRvIGRldGVybWluZSByYXRlIGZvcgorICogQHJhdGU6IHRhcmdldCByYXRlIGZvciB0aGUgRFBMTAorICogQGJlc3RfcGFyZW50X3JhdGU6IHBvaW50ZXIgZm9yIHJldHVybmluZyBiZXN0IHBhcmVudCByYXRlCisgKiBAYmVzdF9wYXJlbnRfY2xrOiBwb2ludGVyIGZvciByZXR1cm5pbmcgYmVzdCBwYXJlbnQgY2xvY2sKKyAqCisgKiBEZXRlcm1pbmVzIHdoaWNoIERQTEwgbW9kZSB0byB1c2UgZm9yIHJlYWNoaW5nIGEgZGVzaXJlZCByYXRlLgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIERQTEwgc2hhbGwgYmUgaW4gYnlwYXNzIG9yIGxvY2tlZCBtb2RlLCBhbmQgaWYKKyAqIGxvY2tlZCwgY2FsY3VsYXRlcyB0aGUgTSxOIHZhbHVlcyBmb3IgdGhlIERQTEwgdmlhIHJvdW5kLXJhdGUuCisgKiBSZXR1cm5zIGEgcG9zaXRpdmUgY2xvY2sgcmF0ZSB3aXRoIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIHZhbHVlCisgKiBpbiBmYWlsdXJlLgorICovCitsb25nIG9tYXA0X2RwbGxfcmVnbTR4ZW5fZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkJdW5zaWduZWQgbG9uZyAqYmVzdF9wYXJlbnRfcmF0ZSwKKwkJCQkJc3RydWN0IGNsayAqKmJlc3RfcGFyZW50X2NsaykKK3sKKwlzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsayA9IHRvX2Nsa19od19vbWFwKGh3KTsKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKworCWlmICghaHcgfHwgIXJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwlpZiAoIWRkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChfX2Nsa19nZXRfcmF0ZShkZC0+Y2xrX2J5cGFzcykgPT0gcmF0ZSAmJgorCSAgICAoZGQtPm1vZGVzICYgKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSkpIHsKKwkJKmJlc3RfcGFyZW50X2NsayA9IGRkLT5jbGtfYnlwYXNzOworCX0gZWxzZSB7CisJCXJhdGUgPSBvbWFwNF9kcGxsX3JlZ200eGVuX3JvdW5kX3JhdGUoaHcsIHJhdGUsCisJCQkJCQkgICAgICBiZXN0X3BhcmVudF9yYXRlKTsKKwkJKmJlc3RfcGFyZW50X2NsayA9IGRkLT5jbGtfcmVmOworCX0KKworCSpiZXN0X3BhcmVudF9yYXRlID0gcmF0ZTsKKworCXJldHVybiByYXRlOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKaW5kZXggY2I3NzY0MzEuLmQ1OTUxYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuYwpAQCAtMTIsMTQgKzEyLDEzIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbXRkLW5hbmQtb21hcDIuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKLSNpbmNsdWRlICJncG1jLmgiCiAjaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiZ3BtYy1uYW5kLmgiCiAKIC8qIG1pbmltdW0gc2l6ZSBmb3IgSU8gbWFwcGluZyAqLwogI2RlZmluZQlOQU5EX0lPX1NJWkUJNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1OWUxMjguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuaAotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYJX19PTUFQMl9HUE1DX05BTkRfSAotI2RlZmluZQlfX09NQVAyX0dQTUNfTkFORF9ICi0KLSNpbmNsdWRlICJncG1jLmgiCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tdGQtbmFuZC1vbWFwMi5oPgotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVREX05BTkRfT01BUDIpCi1leHRlcm4gaW50IGdwbWNfbmFuZF9pbml0KHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSAqZCwKLQkJCSAgc3RydWN0IGdwbWNfdGltaW5ncyAqZ3BtY190KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBncG1jX25hbmRfaW5pdChzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmQsCi0JCQkJIHN0cnVjdCBncG1jX3RpbWluZ3MgKmdwbWNfdCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1vbmVuYW5kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5jCmluZGV4IDhiNjg3NmMuLjUzZDE5N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1vbmVuYW5kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuYwpAQCAtMTUsMTQgKzE1LDEzIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmRfcmVncy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tdGQtb25lbmFuZC1vbWFwMi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAotI2luY2x1ZGUgImdwbWMuaCIKICNpbmNsdWRlICJzb2MuaCIKLSNpbmNsdWRlICJncG1jLW9uZW5hbmQuaCIKIAogI2RlZmluZQlPTkVOQU5EX0lPX1NJWkUJU1pfMTI4SwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2ZjIzYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoKLSAqICBhcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5oCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZglfX09NQVAyX0dQTUNfT05FTkFORF9ICi0jZGVmaW5lCV9fT01BUDJfR1BNQ19PTkVOQU5EX0gKLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbXRkLW9uZW5hbmQtb21hcDIuaD4KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKQotZXh0ZXJuIHZvaWQgZ3BtY19vbmVuYW5kX2luaXQoc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpkKTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX29uZW5hbmRfZGF0YQlOVUxMCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3BtY19vbmVuYW5kX2luaXQoc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpkKQotewotfQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWEwNjM1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1zbWM5MXguYworKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKiBDb250YWN0OglUb255IExpbmRncmVuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KLQotI2luY2x1ZGUgImdwbWMuaCIKLSNpbmNsdWRlICJncG1jLXNtYzkxeC5oIgotCi0jaW5jbHVkZSAic29jLmgiCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9zbWM5MXhfcGxhdGZvcm1fZGF0YSAqZ3BtY19jZmc7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ3BtY19zbWM5MXhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgZ3BtY19zbWM5MXhfaW5mbyA9IHsKLQkuZmxhZ3MJPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCB8IFNNQzkxWF9JT19TSElGVF8wLAotCS5sZWRhCT0gUlBDX0xFRF8xMDBfMTAsCi0JLmxlZGIJPSBSUENfTEVEX1RYX1JYLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZ3BtY19zbWM5MXhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbWM5MXgiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZ3BtY19zbWM5MXhfaW5mbywKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShncG1jX3NtYzkxeF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGdwbWNfc21jOTF4X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3BtY19zZXR0aW5ncyBzbWM5MXhfc2V0dGluZ3MgPSB7Ci0JLmRldmljZV93aWR0aCA9IEdQTUNfREVWV0lEVEhfMTZCSVQsCi19OwotCi0vKgotICogU2V0IHRoZSBncG1jIHRpbWluZ3MgZm9yIHNtYzkxYzk2LiBUaGUgdGltaW5ncyBhcmUgdGFrZW4KLSAqIGZyb20gdGhlIGRhdGEgc2hlZXQgYXZhaWxhYmxlIGF0OgotICogaHR0cDovL3d3dy5zbXNjLmNvbS9tYWluL2NhdGFsb2cvbGFuOTFjOTYuaHRtbAotICogUkVWSVNJVDogTGV2ZWwgc2hpZnRlcnMgY2FuIGFkZCBhdCBsZWFzdCB0byB0aGUgYWNjZXNzIGxhdGVuY3kuCi0gKi8KLXN0YXRpYyBpbnQgc21jOTFjOTZfZ3BtY19yZXRpbWUodm9pZCkKLXsKLQlzdHJ1Y3QgZ3BtY190aW1pbmdzIHQ7Ci0Jc3RydWN0IGdwbWNfZGV2aWNlX3RpbWluZ3MgZGV2X3Q7Ci0JY29uc3QgaW50IHQzID0gMTA7CS8qIEZpZ3VyZSAxMi4yIHJlYWQgYW5kIDEyLjQgd3JpdGUgKi8KLQljb25zdCBpbnQgdDRfciA9IDIwOwkvKiBGaWd1cmUgMTIuMiByZWFkICovCi0JY29uc3QgaW50IHQ0X3cgPSA1OwkvKiBGaWd1cmUgMTIuNCB3cml0ZSAqLwotCWNvbnN0IGludCB0NSA9IDI1OwkvKiBGaWd1cmUgMTIuMiByZWFkICovCi0JY29uc3QgaW50IHQ2ID0gMTU7CS8qIEZpZ3VyZSAxMi4yIHJlYWQgKi8KLQljb25zdCBpbnQgdDcgPSA1OwkvKiBGaWd1cmUgMTIuNCB3cml0ZSAqLwotCWNvbnN0IGludCB0OCA9IDU7CS8qIEZpZ3VyZSAxMi40IHdyaXRlICovCi0JY29uc3QgaW50IHQyMCA9IDE4NTsJLyogRmlndXJlIDEyLjIgcmVhZCBhbmQgMTIuNCB3cml0ZSAqLwotCi0JLyoKLQkgKiBGSVhNRTogQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIGFuZCBkYXRhIGJ1cyBtdXhlZCB0aW1pbmdzLgotCSAqIE5vdGUgdGhhdCBhdCBsZWFzdCBhZHZfcmRfb2ZmIG5lZWRzIHRvIGJlIGNoYW5nZWQgYWNjb3JkaW5nCi0JICogdG8gb21hcDM0MzAgVFJNIEZpZ3VyZSAxMS0xMS4gQXJlIHRoZSBzZHAgYm9hcmRzIHVzaW5nIHRoZQotCSAqIEZQR0EgaW4gYmV0d2VlbiBzbWM5MXggYW5kIG9tYXAgYXMgdGhlIHRpbWluZ3MgYXJlIGRpZmZlcmVudAotCSAqIGZyb20gYWJvdmU/Ci0JICovCi0JaWYgKGdwbWNfY2ZnLT5mbGFncyAmIEdQTUNfTVVYX0FERF9EQVRBKQotCQlyZXR1cm4gMDsKLQotCW1lbXNldCgmZGV2X3QsIDAsIHNpemVvZihkZXZfdCkpOwotCi0JZGV2X3QudF9vZWFzdSA9IHQzICogMTAwMDsKLQlkZXZfdC50X29lID0gdDUgKiAxMDAwOwotCWRldl90LnRfY2V6X3IgPSB0NF9yICogMTAwMDsKLQlkZXZfdC50X29leiA9IHQ2ICogMTAwMDsKLQlkZXZfdC50X3JkX2N5Y2xlID0gKHQyMCAtIHQzKSAqIDEwMDA7Ci0KLQlkZXZfdC50X3dlYXN1ID0gdDMgKiAxMDAwOwotCWRldl90LnRfd3BsID0gdDcgKiAxMDAwOwotCWRldl90LnRfd3BoID0gdDggKiAxMDAwOwotCWRldl90LnRfY2V6X3cgPSB0NF93ICogMTAwMDsKLQlkZXZfdC50X3dyX2N5Y2xlID0gKHQyMCAtIHQzKSAqIDEwMDA7Ci0KLQlncG1jX2NhbGNfdGltaW5ncygmdCwgJnNtYzkxeF9zZXR0aW5ncywgJmRldl90KTsKLQotCXJldHVybiBncG1jX2NzX3NldF90aW1pbmdzKGdwbWNfY2ZnLT5jcywgJnQpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBzbWM5MXggZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgR1BNQy4gTm90ZSB0aGF0IHdlCi0gKiBhc3N1bWUgdGhhdCBwaW4gbXVsdGlwbGV4aW5nIGlzIGRvbmUgaW4gdGhlIGJvYXJkLSouYyBmaWxlLAotICogb3IgaW4gdGhlIGJvb3Rsb2FkZXIuCi0gKi8KLXZvaWQgX19pbml0IGdwbWNfc21jOTF4X2luaXQoc3RydWN0IG9tYXBfc21jOTF4X3BsYXRmb3JtX2RhdGEgKmJvYXJkX2RhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBjc19tZW1fYmFzZTsKLQlpbnQgcmV0OwotCi0JZ3BtY19jZmcgPSBib2FyZF9kYXRhOwotCi0JaWYgKGdwbWNfY2ZnLT5mbGFncyAmIEdQTUNfVElNSU5HU19TTUM5MUM5NikKLQkJZ3BtY19jZmctPnJldGltZSA9IHNtYzkxYzk2X2dwbWNfcmV0aW1lOwotCi0JaWYgKGdwbWNfY3NfcmVxdWVzdChncG1jX2NmZy0+Y3MsIFNaXzE2TSwgJmNzX21lbV9iYXNlKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUE1DIG1lbSBmb3Igc21jOTF4XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWdwbWNfc21jOTF4X3Jlc291cmNlc1swXS5zdGFydCA9IGNzX21lbV9iYXNlICsgMHgzMDA7Ci0JZ3BtY19zbWM5MXhfcmVzb3VyY2VzWzBdLmVuZCA9IGNzX21lbV9iYXNlICsgMHgzMGY7Ci0JZ3BtY19zbWM5MXhfcmVzb3VyY2VzWzFdLmZsYWdzIHw9IChncG1jX2NmZy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSyk7Ci0KLQlpZiAoZ3BtY19jZmctPmZsYWdzICYgR1BNQ19NVVhfQUREX0RBVEEpCi0JCXNtYzkxeF9zZXR0aW5ncy5tdXhfYWRkX2RhdGEgPSBHUE1DX01VWF9BRDsKLQlpZiAoZ3BtY19jZmctPmZsYWdzICYgR1BNQ19SRUFEX01PTikKLQkJc21jOTF4X3NldHRpbmdzLndhaXRfb25fcmVhZCA9IHRydWU7Ci0JaWYgKGdwbWNfY2ZnLT5mbGFncyAmIEdQTUNfV1JJVEVfTU9OKQotCQlzbWM5MXhfc2V0dGluZ3Mud2FpdF9vbl93cml0ZSA9IHRydWU7Ci0JaWYgKGdwbWNfY2ZnLT53YWl0X3BpbikKLQkJc21jOTF4X3NldHRpbmdzLndhaXRfcGluID0gZ3BtY19jZmctPndhaXRfcGluOwotCXJldCA9IGdwbWNfY3NfcHJvZ3JhbV9zZXR0aW5ncyhncG1jX2NmZy0+Y3MsICZzbWM5MXhfc2V0dGluZ3MpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGZyZWUxOwotCi0JaWYgKGdwbWNfY2ZnLT5yZXRpbWUpIHsKLQkJcmV0ID0gZ3BtY19jZmctPnJldGltZSgpOwotCQlpZiAocmV0ICE9IDApCi0JCQlnb3RvIGZyZWUxOwotCX0KLQotCWlmIChncGlvX3JlcXVlc3Rfb25lKGdwbWNfY2ZnLT5ncGlvX2lycSwgR1BJT0ZfSU4sICJTTUM5MVggaXJxIikgPCAwKQotCQlnb3RvIGZyZWUxOwotCi0JZ3BtY19zbWM5MXhfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gZ3Bpb190b19pcnEoZ3BtY19jZmctPmdwaW9faXJxKTsKLQotCWlmIChncG1jX2NmZy0+Z3Bpb19wd3Jkd24pIHsKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShncG1jX2NmZy0+Z3Bpb19wd3Jkd24sCi0JCQkJICAgICAgIEdQSU9GX09VVF9JTklUX0xPVywgIlNNQzkxWCBwb3dlcmRvd24iKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZnJlZTI7Ci0JfQotCi0JaWYgKGdwbWNfY2ZnLT5ncGlvX3Jlc2V0KSB7Ci0JCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZ3BtY19jZmctPmdwaW9fcmVzZXQsCi0JCQkJICAgICAgIEdQSU9GX09VVF9JTklUX0xPVywgIlNNQzkxWCByZXNldCIpOwotCQlpZiAocmV0KQotCQkJZ290byBmcmVlMzsKLQotCQlncGlvX3NldF92YWx1ZShncG1jX2NmZy0+Z3Bpb19yZXNldCwgMSk7Ci0JCW1zbGVlcCgxMDApOwotCQlncGlvX3NldF92YWx1ZShncG1jX2NmZy0+Z3Bpb19yZXNldCwgMCk7Ci0JfQotCi0JaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZ3BtY19zbWM5MXhfZGV2aWNlKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgc21jOTF4IGRldmljZVxuIik7Ci0JCWdwaW9fZnJlZShncG1jX2NmZy0+Z3Bpb19yZXNldCk7Ci0JCWdvdG8gZnJlZTM7Ci0JfQotCi0JcmV0dXJuOwotCi1mcmVlMzoKLQlpZiAoZ3BtY19jZmctPmdwaW9fcHdyZHduKQotCQlncGlvX2ZyZWUoZ3BtY19jZmctPmdwaW9fcHdyZHduKTsKLWZyZWUyOgotCWdwaW9fZnJlZShncG1jX2NmZy0+Z3Bpb19pcnEpOwotZnJlZTE6Ci0JZ3BtY19jc19mcmVlKGdwbWNfY2ZnLT5jcyk7Ci0KLQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBpbml0aWFsaXplIHNtYzkxeFxuIik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtc21jOTF4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtc21jOTF4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NGZiZWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3BtYy1zbWM5MXguaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfR1BNQ19TTUM5MVhfSF9fCi0KLSNkZWZpbmUgR1BNQ19USU1JTkdTX1NNQzkxQzk2CSgxIDw8IDQpCi0jZGVmaW5lIEdQTUNfTVVYX0FERF9EQVRBCSgxIDw8IDUpIC8qIEdQTUNfQ09ORklHMV9NVVhBREREQVRBICovCi0jZGVmaW5lIEdQTUNfUkVBRF9NT04JCSgxIDw8IDYpIC8qIEdQTUNfQ09ORklHMV9XQUlUX1JFQURfTU9OICovCi0jZGVmaW5lIEdQTUNfV1JJVEVfTU9OCQkoMSA8PCA3KSAvKiBHUE1DX0NPTkZJRzFfV0FJVF9XUklURV9NT04gKi8KLQotc3RydWN0IG9tYXBfc21jOTF4X3BsYXRmb3JtX2RhdGEgewotCWludAljczsKLQlpbnQJZ3Bpb19pcnE7Ci0JaW50CWdwaW9fcHdyZHduOwotCWludAlncGlvX3Jlc2V0OwotCWludAl3YWl0X3BpbjsJLyogT3B0aW9uYWwgR1BNQ19DT05GSUcxX1dBSVRQSU5TRUxFQ1QgKi8KLQl1MzIJZmxhZ3M7Ci0JaW50CSgqcmV0aW1lKSh2b2lkKTsKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19TTUM5MVhfTU9EVUxFKQotCi1leHRlcm4gdm9pZCBncG1jX3NtYzkxeF9pbml0KHN0cnVjdCBvbWFwX3NtYzkxeF9wbGF0Zm9ybV9kYXRhICpkKTsKLQotI2Vsc2UKLQotI2RlZmluZSBib2FyZF9zbWM5MXhfZGF0YQlOVUxMCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncG1jX3NtYzkxeF9pbml0KHN0cnVjdCBvbWFwX3NtYzkxeF9wbGF0Zm9ybV9kYXRhICpkKQotewotfQotCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuaAppbmRleCA3MDdmNmQ1Li45Y2FhNDFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuaApAQCAtNiwyMjYgKzYsOSBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBEbyBub3QgaW5jbHVkZSB0aGlzIGZpbGUgaW4gYW55IG5ldyBjb2RlLCB0aGlzIHdpbGwgZ2V0IHJlbW92ZWQKKyAqIG9uY2Ugb21hcDMgYm9vdHMgaW4gZGV2aWNlIHRyZWUgb25seSBtb2RlLgorICoKICAqLwotCi0jaWZuZGVmIF9fT01BUDJfR1BNQ19ICi0jZGVmaW5lIF9fT01BUDJfR1BNQ19ICi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL210ZC1uYW5kLW9tYXAyLmg+Ci0KLS8qIE1heGltdW0gTnVtYmVyIG9mIENoaXAgU2VsZWN0cyAqLwotI2RlZmluZSBHUE1DX0NTX05VTQkJOAotCi0jZGVmaW5lIEdQTUNfQ1NfQ09ORklHMQkJMHgwMAotI2RlZmluZSBHUE1DX0NTX0NPTkZJRzIJCTB4MDQKLSNkZWZpbmUgR1BNQ19DU19DT05GSUczCQkweDA4Ci0jZGVmaW5lIEdQTUNfQ1NfQ09ORklHNAkJMHgwYwotI2RlZmluZSBHUE1DX0NTX0NPTkZJRzUJCTB4MTAKLSNkZWZpbmUgR1BNQ19DU19DT05GSUc2CQkweDE0Ci0jZGVmaW5lIEdQTUNfQ1NfQ09ORklHNwkJMHgxOAotI2RlZmluZSBHUE1DX0NTX05BTkRfQ09NTUFORAkweDFjCi0jZGVmaW5lIEdQTUNfQ1NfTkFORF9BRERSRVNTCTB4MjAKLSNkZWZpbmUgR1BNQ19DU19OQU5EX0RBVEEJMHgyNAotCi0vKiBDb250cm9sIENvbW1hbmRzICovCi0jZGVmaW5lIEdQTUNfQ09ORklHX1JEWV9CU1kJMHgwMDAwMDAwMQotI2RlZmluZSBHUE1DX0NPTkZJR19ERVZfU0laRQkweDAwMDAwMDAyCi0jZGVmaW5lIEdQTUNfQ09ORklHX0RFVl9UWVBFCTB4MDAwMDAwMDMKLSNkZWZpbmUgR1BNQ19TRVRfSVJRX1NUQVRVUwkweDAwMDAwMDA0Ci0jZGVmaW5lIEdQTUNfQ09ORklHX1dQCQkweDAwMDAwMDA1Ci0KLSNkZWZpbmUgR1BNQ19FTkFCTEVfSVJRCQkweDAwMDAwMDBkCi0KLS8qIEVDQyBjb21tYW5kcyAqLwotI2RlZmluZSBHUE1DX0VDQ19SRUFECQkwIC8qIFJlc2V0IEhhcmR3YXJlIEVDQyBmb3IgcmVhZCAqLwotI2RlZmluZSBHUE1DX0VDQ19XUklURQkJMSAvKiBSZXNldCBIYXJkd2FyZSBFQ0MgZm9yIHdyaXRlICovCi0jZGVmaW5lIEdQTUNfRUNDX1JFQURTWU4JMiAvKiBSZXNldCBiZWZvcmUgc3luZHJvbSBpcyByZWFkIGJhY2sgKi8KLQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JBUEJVUlNUX1NVUFAgICAgICgxIDw8IDMxKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRE1VTFRJUExFX1NVUFAgICgxIDw8IDMwKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRFRZUEVfQVNZTkMgICAgICgwIDw8IDI5KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRFRZUEVfU1lOQyAgICAgICgxIDw8IDI5KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JJVEVNVUxUSVBMRV9TVVBQICgxIDw8IDI4KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JJVEVUWVBFX0FTWU5DICAgICgwIDw8IDI3KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JJVEVUWVBFX1NZTkMgICAgICgxIDw8IDI3KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfQ0xLQUNUSVZBVElPTlRJTUUodmFsKSAoKHZhbCAmIDMpIDw8IDI1KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfUEFHRV9MRU4odmFsKSAgICAgICgodmFsICYgMykgPDwgMjMpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX1JFQURfTU9OICAgICAgKDEgPDwgMjIpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX1dSSVRFX01PTiAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX01PTl9JSU1FKHZhbCkgKCh2YWwgJiAzKSA8PCAxOCkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX1dBSVRfUElOX1NFTCh2YWwpICAoKHZhbCAmIDMpIDw8IDE2KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFU0laRSh2YWwpICAgICgodmFsICYgMykgPDwgMTIpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VTSVpFXzE2ICAgICAgR1BNQ19DT05GSUcxX0RFVklDRVNJWkUoMSkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVRZUEUodmFsKSAgICAoKHZhbCAmIDMpIDw8IDEwKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRV9OT1IgICAgIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFKDApCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9NVVhUWVBFKHZhbCkgICAgICAgKCh2YWwgJiAzKSA8PCA4KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfVElNRV9QQVJBX0dSQU4gICAgICgxIDw8IDQpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVih2YWwpICAgICAgKHZhbCAmIDMpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVjIgICAgICAgICAgKEdQTUNfQ09ORklHMV9GQ0xLX0RJVigxKSkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX0ZDTEtfRElWMyAgICAgICAgICAoR1BNQ19DT05GSUcxX0ZDTEtfRElWKDIpKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfRkNMS19ESVY0ICAgICAgICAgIChHUE1DX0NPTkZJRzFfRkNMS19ESVYoMykpCi0jZGVmaW5lIEdQTUNfQ09ORklHN19DU1ZBTElECQkoMSA8PCA2KQotCi0jZGVmaW5lIEdQTUNfREVWSUNFVFlQRV9OT1IJCTAKLSNkZWZpbmUgR1BNQ19ERVZJQ0VUWVBFX05BTkQJCTIKLSNkZWZpbmUgR1BNQ19DT05GSUdfV1JJVEVQUk9URUNUCTB4MDAwMDAwMTAKLSNkZWZpbmUgV1JfUkRfUElOX01PTklUT1JJTkcJCTB4MDA2MDAwMDAKLSNkZWZpbmUgR1BNQ19JUlFfRklGT0VWRU5URU5BQkxFCTB4MDEKLSNkZWZpbmUgR1BNQ19JUlFfQ09VTlRfRVZFTlQJCTB4MDIKLQotI2RlZmluZSBHUE1DX0JVUlNUXzQJCQk0CS8qIDQgd29yZCBidXJzdCAqLwotI2RlZmluZSBHUE1DX0JVUlNUXzgJCQk4CS8qIDggd29yZCBidXJzdCAqLwotI2RlZmluZSBHUE1DX0JVUlNUXzE2CQkJMTYJLyogMTYgd29yZCBidXJzdCAqLwotI2RlZmluZSBHUE1DX0RFVldJRFRIXzhCSVQJCTEJLyogOC1iaXQgZGV2aWNlIHdpZHRoICovCi0jZGVmaW5lIEdQTUNfREVWV0lEVEhfMTZCSVQJCTIJLyogMTYtYml0IGRldmljZSB3aWR0aCAqLwotI2RlZmluZSBHUE1DX01VWF9BQUQJCQkxCS8qIEFkZHItQWRkci1EYXRhIG11bHRpcGxleCAqLwotI2RlZmluZSBHUE1DX01VWF9BRAkJCTIJLyogQWRkci1EYXRhIG11bHRpcGxleCAqLwotCi0vKiBib29sIHR5cGUgdGltZSBzZXR0aW5ncyAqLwotc3RydWN0IGdwbWNfYm9vbF90aW1pbmdzIHsKLQlib29sIGN5Y2xlMmN5Y2xlZGlmZmNzZW47Ci0JYm9vbCBjeWNsZTJjeWNsZXNhbWVjc2VuOwotCWJvb2wgd2VfZXh0cmFfZGVsYXk7Ci0JYm9vbCBvZV9leHRyYV9kZWxheTsKLQlib29sIGFkdl9leHRyYV9kZWxheTsKLQlib29sIGNzX2V4dHJhX2RlbGF5OwotCWJvb2wgdGltZV9wYXJhX2dyYW51bGFyaXR5OwotfTsKLQotLyoKLSAqIE5vdGUgdGhhdCBhbGwgdmFsdWVzIGluIHRoaXMgc3RydWN0IGFyZSBpbiBuYW5vc2Vjb25kcyBleGNlcHQgc3luY19jbGsKLSAqICh3aGljaCBpcyBpbiBwaWNvc2Vjb25kcyksIHdoaWxlIHRoZSByZWdpc3RlciB2YWx1ZXMgYXJlIGluIGdwbWNfZmNrIGN5Y2xlcy4KLSAqLwotc3RydWN0IGdwbWNfdGltaW5ncyB7Ci0JLyogTWluaW11bSBjbG9jayBwZXJpb2QgZm9yIHN5bmNocm9ub3VzIG1vZGUgKGluIHBpY29zZWNvbmRzKSAqLwotCXUzMiBzeW5jX2NsazsKLQotCS8qIENoaXAtc2VsZWN0IHNpZ25hbCB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DU19DT05GSUcyICovCi0JdTMyIGNzX29uOwkJLyogQXNzZXJ0aW9uIHRpbWUgKi8KLQl1MzIgY3NfcmRfb2ZmOwkJLyogUmVhZCBkZWFzc2VydGlvbiB0aW1lICovCi0JdTMyIGNzX3dyX29mZjsJCS8qIFdyaXRlIGRlYXNzZXJ0aW9uIHRpbWUgKi8KLQotCS8qIEFEViBzaWduYWwgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ09ORklHMyAqLwotCXUzMiBhZHZfb247CQkvKiBBc3NlcnRpb24gdGltZSAqLwotCXUzMiBhZHZfcmRfb2ZmOwkJLyogUmVhZCBkZWFzc2VydGlvbiB0aW1lICovCi0JdTMyIGFkdl93cl9vZmY7CQkvKiBXcml0ZSBkZWFzc2VydGlvbiB0aW1lICovCi0KLQkvKiBXRSBzaWduYWxzIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NPTkZJRzQgKi8KLQl1MzIgd2Vfb247CQkvKiBXRSBhc3NlcnRpb24gdGltZSAqLwotCXUzMiB3ZV9vZmY7CQkvKiBXRSBkZWFzc2VydGlvbiB0aW1lICovCi0KLQkvKiBPRSBzaWduYWxzIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NPTkZJRzQgKi8KLQl1MzIgb2Vfb247CQkvKiBPRSBhc3NlcnRpb24gdGltZSAqLwotCXUzMiBvZV9vZmY7CQkvKiBPRSBkZWFzc2VydGlvbiB0aW1lICovCi0KLQkvKiBBY2Nlc3MgdGltZSBhbmQgY3ljbGUgdGltZSB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DT05GSUc1ICovCi0JdTMyIHBhZ2VfYnVyc3RfYWNjZXNzOwkvKiBNdWx0aXBsZSBhY2Nlc3Mgd29yZCBkZWxheSAqLwotCXUzMiBhY2Nlc3M7CQkvKiBTdGFydC1jeWNsZSB0byBmaXJzdCBkYXRhIHZhbGlkIGRlbGF5ICovCi0JdTMyIHJkX2N5Y2xlOwkJLyogVG90YWwgcmVhZCBjeWNsZSB0aW1lICovCi0JdTMyIHdyX2N5Y2xlOwkJLyogVG90YWwgd3JpdGUgY3ljbGUgdGltZSAqLwotCi0JdTMyIGJ1c190dXJuYXJvdW5kOwotCXUzMiBjeWNsZTJjeWNsZV9kZWxheTsKLQotCXUzMiB3YWl0X21vbml0b3Jpbmc7Ci0JdTMyIGNsa19hY3RpdmF0aW9uOwotCi0JLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSBvbiBPTUFQMzQzMCAqLwotCXUzMiB3cl9hY2Nlc3M7CQkvKiBXUkFDQ0VTU1RJTUUgKi8KLQl1MzIgd3JfZGF0YV9tdXhfYnVzOwkvKiBXUkRBVEFPTkFETVVYQlVTICovCi0KLQlzdHJ1Y3QgZ3BtY19ib29sX3RpbWluZ3MgYm9vbF90aW1pbmdzOwotfTsKLQotLyogRGV2aWNlIHRpbWluZ3MgaW4gcGljb3NlY29uZHMgKi8KLXN0cnVjdCBncG1jX2RldmljZV90aW1pbmdzIHsKLQl1MzIgdF9jZWFzdTsJLyogYWRkcmVzcyBzZXR1cCB0byBDUyB2YWxpZCAqLwotCXUzMiB0X2F2ZGFzdTsJLyogYWRkcmVzcyBzZXR1cCB0byBBRFYgdmFsaWQgKi8KLQkvKiBYWFg6IHRyeSB0byBjb21iaW5lIHRfYXZkcF9yICYgdF9hdmRwX3cuIElzc3VlIGlzCi0JICogb2YgdHVzYiB1c2luZyB0aGVzZSB0aW1pbmdzIGV2ZW4gZm9yIHN5bmMgd2hpbHN0Ci0JICogaWRlYWxseSBmb3IgYWR2X3JkLyh3cilfb2ZmIGl0IHNob3VsZCBoYXZlIGNvbnNpZGVyZWQKLQkgKiB0X2F2ZGggaW5zdGVhZC4gVGhpcyBpbmRpcmVjdGx5IG5lY2Vzc2l0YXRlcyByL3cKLQkgKiB2YXJpYXRpb25zIG9mIHRfYXZkcCBhcyBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG9uZQotCSAqIHN5bmMgJiBvdGhlciBhc3luYwotCSAqLwotCXUzMiB0X2F2ZHBfcjsJLyogQURWIGxvdyB0aW1lICh3aGF0IGFib3V0IHRfY2VyID8pICovCi0JdTMyIHRfYXZkcF93OwotCXUzMiB0X2FhdmRoOwkvKiBhZGRyZXNzIGhvbGQgdGltZSAqLwotCXUzMiB0X29lYXN1OwkvKiBhZGRyZXNzIHNldHVwIHRvIE9FIHZhbGlkICovCi0JdTMyIHRfYWE7CS8qIGFjY2VzcyB0aW1lIGZyb20gQURWIGFzc2VydGlvbiAqLwotCXUzMiB0X2lhYTsJLyogaW5pdGlhbCBhY2Nlc3MgdGltZSAqLwotCXUzMiB0X29lOwkvKiBhY2Nlc3MgdGltZSBmcm9tIE9FIGFzc2VydGlvbiAqLwotCXUzMiB0X2NlOwkvKiBhY2Nlc3MgdGltZSBmcm9tIENTIGFzZXJ0aW9uICovCi0JdTMyIHRfcmRfY3ljbGU7CS8qIHJlYWQgY3ljbGUgdGltZSAqLwotCXUzMiB0X2Nlel9yOwkvKiByZWFkIENTIGRlYXNzZXJ0aW9uIHRvIGhpZ2ggWiAqLwotCXUzMiB0X2Nlel93OwkvKiB3cml0ZSBDUyBkZWFzc2VydGlvbiB0byBoaWdoIFogKi8KLQl1MzIgdF9vZXo7CS8qIE9FIGRlYXNzZXJ0aW9uIHRvIGhpZ2ggWiAqLwotCXUzMiB0X3dlYXN1OwkvKiBhZGRyZXNzIHNldHVwIHRvIFdFIHZhbGlkICovCi0JdTMyIHRfd3BsOwkvKiB3cml0ZSBhc3NlcnRpb24gdGltZSAqLwotCXUzMiB0X3dwaDsJLyogd3JpdGUgZGVhc3NlcnRpb24gdGltZSAqLwotCXUzMiB0X3dyX2N5Y2xlOwkvKiB3cml0ZSBjeWNsZSB0aW1lICovCi0KLQl1MzIgY2xrOwotCXUzMiB0X2JhY2M7CS8qIGJ1cnN0IGFjY2VzcyB2YWxpZCBjbG9jayB0byBvdXRwdXQgZGVsYXkgKi8KLQl1MzIgdF9jZXM7CS8qIENTIHNldHVwIHRpbWUgdG8gY2xrICovCi0JdTMyIHRfYXZkczsJLyogQURWIHNldHVwIHRpbWUgdG8gY2xrICovCi0JdTMyIHRfYXZkaDsJLyogQURWIGhvbGQgdGltZSBmcm9tIGNsayAqLwotCXUzMiB0X2FjaDsJLyogYWRkcmVzcyBob2xkIHRpbWUgZnJvbSBjbGsgKi8KLQl1MzIgdF9yZHlvOwkvKiBjbGsgdG8gcmVhZHkgdmFsaWQgKi8KLQotCXUzMiB0X2NlX3JkeXo7CS8qIFhYWDogZGVzY3JpcHRpb24gPywgb3IgdXNlIHRfY2V6IGluc3RlYWQgKi8KLQl1MzIgdF9jZV9hdmQ7CS8qIENTIG9uIHRvIEFEViBvbiBkZWxheSAqLwotCi0JLyogWFhYOiBjaGVjayB0aGUgcG9zc2liaWxpdHkgb2YgY29tYmluaW5nCi0JICogY3ljX2FhdmhkX29lICYgY3ljX2FhdmRoX3dlCi0JICovCi0JdTggY3ljX2FhdmRoX29lOy8qIHJlYWQgYWRkcmVzcyBob2xkIHRpbWUgaW4gY3ljbGVzICovCi0JdTggY3ljX2FhdmRoX3dlOy8qIHdyaXRlIGFkZHJlc3MgaG9sZCB0aW1lIGluIGN5Y2xlcyAqLwotCXU4IGN5Y19vZTsJLyogYWNjZXNzIHRpbWUgZnJvbSBPRSBhc3NlcnRpb24gaW4gY3ljbGVzICovCi0JdTggY3ljX3dwbDsJLyogd3JpdGUgZGVhc3NlcnRpb24gdGltZSBpbiBjeWNsZXMgKi8KLQl1MzIgY3ljX2lhYTsJLyogaW5pdGlhbCBhY2Nlc3MgdGltZSBpbiBjeWNsZXMgKi8KLQotCS8qIGV4dHJhIGRlbGF5cyAqLwotCWJvb2wgY2VfeGRlbGF5OwotCWJvb2wgYXZkX3hkZWxheTsKLQlib29sIG9lX3hkZWxheTsKLQlib29sIHdlX3hkZWxheTsKLX07Ci0KLXN0cnVjdCBncG1jX3NldHRpbmdzIHsKLQlib29sIGJ1cnN0X3dyYXA7CS8qIGVuYWJsZXMgd3JhcCBidXJzdGluZyAqLwotCWJvb2wgYnVyc3RfcmVhZDsJLyogZW5hYmxlcyByZWFkIHBhZ2UvYnVyc3QgbW9kZSAqLwotCWJvb2wgYnVyc3Rfd3JpdGU7CS8qIGVuYWJsZXMgd3JpdGUgcGFnZS9idXJzdCBtb2RlICovCi0JYm9vbCBkZXZpY2VfbmFuZDsJLyogZGV2aWNlIGlzIE5BTkQgKi8KLQlib29sIHN5bmNfcmVhZDsJCS8qIGVuYWJsZXMgc3luY2hyb25vdXMgcmVhZHMgKi8KLQlib29sIHN5bmNfd3JpdGU7CS8qIGVuYWJsZXMgc3luY2hyb25vdXMgd3JpdGVzICovCi0JYm9vbCB3YWl0X29uX3JlYWQ7CS8qIG1vbml0b3Igd2FpdCBvbiByZWFkcyAqLwotCWJvb2wgd2FpdF9vbl93cml0ZTsJLyogbW9uaXRvciB3YWl0IG9uIHdyaXRlcyAqLwotCXUzMiBidXJzdF9sZW47CQkvKiBwYWdlL2J1cnN0IGxlbmd0aCAqLwotCXUzMiBkZXZpY2Vfd2lkdGg7CS8qIGRldmljZSBidXMgd2lkdGggKDggb3IgMTYgYml0KSAqLwotCXUzMiBtdXhfYWRkX2RhdGE7CS8qIG11bHRpcGxleCBhZGRyZXNzICYgZGF0YSAqLwotCXUzMiB3YWl0X3BpbjsJCS8qIHdhaXQtcGluIHRvIGJlIHVzZWQgKi8KLX07Ci0KLWV4dGVybiBpbnQgZ3BtY19jYWxjX3RpbWluZ3Moc3RydWN0IGdwbWNfdGltaW5ncyAqZ3BtY190LAotCQkJICAgICBzdHJ1Y3QgZ3BtY19zZXR0aW5ncyAqZ3BtY19zLAotCQkJICAgICBzdHJ1Y3QgZ3BtY19kZXZpY2VfdGltaW5ncyAqZGV2X3QpOwotCi1leHRlcm4gdm9pZCBncG1jX3VwZGF0ZV9uYW5kX3JlZyhzdHJ1Y3QgZ3BtY19uYW5kX3JlZ3MgKnJlZywgaW50IGNzKTsKLWV4dGVybiBpbnQgZ3BtY19nZXRfY2xpZW50X2lycSh1bnNpZ25lZCBpcnFfY29uZmlnKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBncG1jX3RpY2tzX3RvX25zKHVuc2lnbmVkIGludCB0aWNrcyk7Ci0KLWV4dGVybiB2b2lkIGdwbWNfY3Nfd3JpdGVfcmVnKGludCBjcywgaW50IGlkeCwgdTMyIHZhbCk7Ci1leHRlcm4gaW50IGdwbWNfY2FsY19kaXZpZGVyKHVuc2lnbmVkIGludCBzeW5jX2Nsayk7Ci1leHRlcm4gaW50IGdwbWNfY3Nfc2V0X3RpbWluZ3MoaW50IGNzLCBjb25zdCBzdHJ1Y3QgZ3BtY190aW1pbmdzICp0KTsKLWV4dGVybiBpbnQgZ3BtY19jc19wcm9ncmFtX3NldHRpbmdzKGludCBjcywgc3RydWN0IGdwbWNfc2V0dGluZ3MgKnApOwotZXh0ZXJuIGludCBncG1jX2NzX3JlcXVlc3QoaW50IGNzLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgKmJhc2UpOwotZXh0ZXJuIHZvaWQgZ3BtY19jc19mcmVlKGludCBjcyk7Ci1leHRlcm4gdm9pZCBvbWFwM19ncG1jX3NhdmVfY29udGV4dCh2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXAzX2dwbWNfcmVzdG9yZV9jb250ZXh0KHZvaWQpOwotZXh0ZXJuIGludCBncG1jX2NvbmZpZ3VyZShpbnQgY21kLCBpbnQgd3ZhbCk7Ci1leHRlcm4gdm9pZCBncG1jX3JlYWRfc2V0dGluZ3NfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkgIHN0cnVjdCBncG1jX3NldHRpbmdzICpwKTsKLQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKaW5kZXggMDdkNGM3Yi4uZGM2ZTc5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwpAQCAtMTQsMTQgKzE0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tb21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oPgogCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAib21hcF9kZXZpY2UuaCIKICNpbmNsdWRlICJvbWFwLXBtLmgiCiAKICNpbmNsdWRlICJtdXguaCIKLSNpbmNsdWRlICJtbWMuaCIKICNpbmNsdWRlICJoc21tYy5oIgogI2luY2x1ZGUgImNvbnRyb2wuaCIKIApAQCAtMzIsMjUgKzMzLDE0IEBACiAKICNkZWZpbmUgSFNNTUNfTkFNRV9MRU4JOQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgJiYgZGVmaW5lZChDT05GSUdfUE0pCi0KLXN0YXRpYyBpbnQgaHNtbWNfZ2V0X2NvbnRleHRfbG9zcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIG9tYXBfcG1fZ2V0X2Rldl9jb250ZXh0X2xvc3NfY291bnQoZGV2KTsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgaHNtbWNfZ2V0X2NvbnRleHRfbG9zcyBOVUxMCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgb21hcF9oc21tYzFfYmVmb3JlX3NldF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwKLQkJCQkgIGludCBwb3dlcl9vbiwgaW50IHZkZCkKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWMxX2JlZm9yZV9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgaW50IHBvd2VyX29uLCBpbnQgdmRkKQogewogCXUzMiByZWcsIHByb2dfaW87Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKLQlpZiAobW1jLT5zbG90c1swXS5yZW11eCkKLQkJbW1jLT5zbG90c1swXS5yZW11eChkZXYsIHNsb3QsIHBvd2VyX29uKTsKKwlpZiAobW1jLT5yZW11eCkKKwkJbW1jLT5yZW11eChkZXYsIHBvd2VyX29uKTsKIAogCS8qCiAJICogQXNzdW1lIHdlIHBvd2VyIGJvdGggT01BUCBWTU1DMSAoZm9yIENNRCwgQ0xLLCBEQVQwLi4zKSBhbmQgdGhlCkBAIC03Miw3ICs2Miw3IEBACiAJCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMSk7CiAJCX0KIAotCQlpZiAobW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykgeworCQlpZiAobW1jLT5pbnRlcm5hbF9jbG9jaykgewogCQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwogCQkJcmVnIHw9IE9NQVAyX01NQ1NESU8xQURQQ0xLSVNFTDsKIAkJCW9tYXBfY3RybF93cml0ZWwocmVnLCBPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKQEAgLTk2LDggKzg2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXBfaHNtbWMxX2FmdGVyX3NldF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwKLQkJCQkgaW50IHBvd2VyX29uLCBpbnQgdmRkKQorc3RhdGljIHZvaWQgb21hcF9oc21tYzFfYWZ0ZXJfc2V0X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCkKIHsKIAl1MzIgcmVnOwogCkBAIC0xMjAsMzQgKzEwOSwzMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaHNtbWMyX3NlbGVjdF9pbnB1dF9jbGtfc3JjKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMpCitzdGF0aWMgdm9pZCBoc21tYzJfc2VsZWN0X2lucHV0X2Nsa19zcmMoc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jKQogewogCXUzMiByZWc7CiAKIAlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoY29udHJvbF9kZXZjb25mMV9vZmZzZXQpOwotCWlmIChtbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrKQorCWlmIChtbWMtPmludGVybmFsX2Nsb2NrKQogCQlyZWcgfD0gT01BUDJfTU1DU0RJTzJBRFBDTEtJU0VMOwogCWVsc2UKIAkJcmVnICY9IH5PTUFQMl9NTUNTRElPMkFEUENMS0lTRUw7CiAJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0KTsKIH0KIAotc3RhdGljIHZvaWQgaHNtbWMyX2JlZm9yZV9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCi0JCQkJICAgaW50IHBvd2VyX29uLCBpbnQgdmRkKQorc3RhdGljIHZvaWQgaHNtbWMyX2JlZm9yZV9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBvd2VyX29uLCBpbnQgdmRkKQogewotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCi0JaWYgKG1tYy0+c2xvdHNbMF0ucmVtdXgpCi0JCW1tYy0+c2xvdHNbMF0ucmVtdXgoZGV2LCBzbG90LCBwb3dlcl9vbik7CisJaWYgKG1tYy0+cmVtdXgpCisJCW1tYy0+cmVtdXgoZGV2LCBwb3dlcl9vbik7CiAKIAlpZiAocG93ZXJfb24pCiAJCWhzbW1jMl9zZWxlY3RfaW5wdXRfY2xrX3NyYyhtbWMpOwogfQogCi1zdGF0aWMgaW50IGFtMzV4X2hzbW1jMl9zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwKLQkJCQkgIGludCBwb3dlcl9vbiwgaW50IHZkZCkKK3N0YXRpYyBpbnQgYW0zNXhfaHNtbWMyX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCkKIHsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAogCWlmIChwb3dlcl9vbikKIAkJaHNtbWMyX3NlbGVjdF9pbnB1dF9jbGtfc3JjKG1tYyk7CkBAIC0xNTUsMjMgKzE0MiwyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5vcF9tbWNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKLQkJCQkJCQlpbnQgdmRkKQorc3RhdGljIGludCBub3BfbW1jX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaHNtbWNfbXV4KHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWNfY29udHJvbGxlciwKLQkJCWludCBjb250cm9sbGVyX25yKQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaHNtbWNfbXV4KHN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEKKwkJCQkgICptbWNfY29udHJvbGxlciwgaW50IGNvbnRyb2xsZXJfbnIpCiB7Ci0JaWYgKGdwaW9faXNfdmFsaWQobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLnN3aXRjaF9waW4pICYmCi0JCShtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uc3dpdGNoX3BpbiA8IE9NQVBfTUFYX0dQSU9fTElORVMpKQotCQlvbWFwX211eF9pbml0X2dwaW8obW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLnN3aXRjaF9waW4sCi0JCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7Ci0JaWYgKGdwaW9faXNfdmFsaWQobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmdwaW9fd3ApICYmCi0JCShtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uZ3Bpb193cCA8IE9NQVBfTUFYX0dQSU9fTElORVMpKQotCQlvbWFwX211eF9pbml0X2dwaW8obW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmdwaW9fd3AsCi0JCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJaWYgKGdwaW9faXNfdmFsaWQobW1jX2NvbnRyb2xsZXItPnN3aXRjaF9waW4pICYmCisJICAgIChtbWNfY29udHJvbGxlci0+c3dpdGNoX3BpbiA8IE9NQVBfTUFYX0dQSU9fTElORVMpKQorCQlvbWFwX211eF9pbml0X2dwaW8obW1jX2NvbnRyb2xsZXItPnN3aXRjaF9waW4sCisJCQkJICAgT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwlpZiAoZ3Bpb19pc192YWxpZChtbWNfY29udHJvbGxlci0+Z3Bpb193cCkgJiYKKwkgICAgKG1tY19jb250cm9sbGVyLT5ncGlvX3dwIDwgT01BUF9NQVhfR1BJT19MSU5FUykpCisJCW9tYXBfbXV4X2luaXRfZ3BpbyhtbWNfY29udHJvbGxlci0+Z3Bpb193cCwKKwkJCQkgICBPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwogCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQlpZiAoY29udHJvbGxlcl9uciA9PSAwKSB7CiAJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2NsayIsCkBAIC0xODAsNyArMTY2LDcgQEAKIAkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwogCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQwIiwKIAkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotCQkJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5jYXBzICYKKwkJCWlmIChtbWNfY29udHJvbGxlci0+Y2FwcyAmCiAJCQkJKE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQSkpIHsKIAkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2RhdDEiLAogCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwpAQCAtMTg5LDcgKzE3NSw3IEBACiAJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQzIiwKIAkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAkJCX0KLQkJCWlmIChtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uY2FwcyAmCisJCQlpZiAobW1jX2NvbnRyb2xsZXItPmNhcHMgJgogCQkJCQkJTU1DX0NBUF84X0JJVF9EQVRBKSB7CiAJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQ0IiwKIAkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKQEAgLTIxNCw3ICsyMDAsNyBAQAogCQkJICogRm9yIDggd2lyZSBjb25maWd1cmF0aW9ucywgTGluZXMgREFUNCwgNSwgNiBhbmQgNwogCQkJICogbmVlZCB0byBiZSBtdXhlZCBpbiB0aGUgYm9hcmQtKi5jIGZpbGVzCiAJCQkgKi8KLQkJCWlmIChtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uY2FwcyAmCisJCQlpZiAobW1jX2NvbnRyb2xsZXItPmNhcHMgJgogCQkJCShNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEpKSB7CiAJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQxIiwKIAkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKQEAgLTIyMyw3ICsyMDksNyBAQAogCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0MyIsCiAJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CiAJCQl9Ci0JCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmNhcHMgJgorCQkJaWYgKG1tY19jb250cm9sbGVyLT5jYXBzICYKIAkJCQkJCQlNTUNfQ0FQXzhfQklUX0RBVEEpIHsKIAkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2RhdDQuc2RtbWMyX2RhdDQiLAogCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwpAQCAtMjQzLDcgKzIyOSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaHNtbWNfcGRhdGFfaW5pdChzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyAqYywKLQkJCQkJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYykKKwkJCQkJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jKQogewogCWNoYXIgKmhjX25hbWU7CiAKQEAgLTI1OSwzOCArMjQ1LDIyIEBACiAJZWxzZQogCQlzbnByaW50ZihoY19uYW1lLCAoSFNNTUNfTkFNRV9MRU4gKyAxKSwgIm1tYyVpc2xvdCVpIiwKIAkJCQkJCQkJYy0+bW1jLCAxKTsKLQltbWMtPnNsb3RzWzBdLm5hbWUgPSBoY19uYW1lOwotCW1tYy0+bnJfc2xvdHMgPSAxOwotCW1tYy0+c2xvdHNbMF0uY2FwcyA9IGMtPmNhcHM7Ci0JbW1jLT5zbG90c1swXS5wbV9jYXBzID0gYy0+cG1fY2FwczsKLQltbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrID0gIWMtPmV4dF9jbG9jazsKLQltbWMtPm1heF9mcmVxID0gYy0+bWF4X2ZyZXE7CisJbW1jLT5uYW1lID0gaGNfbmFtZTsKKwltbWMtPmNhcHMgPSBjLT5jYXBzOworCW1tYy0+aW50ZXJuYWxfY2xvY2sgPSAhYy0+ZXh0X2Nsb2NrOwogCW1tYy0+cmVnX29mZnNldCA9IDA7Ci0JbW1jLT5nZXRfY29udGV4dF9sb3NzX2NvdW50ID0gaHNtbWNfZ2V0X2NvbnRleHRfbG9zczsKIAotCW1tYy0+c2xvdHNbMF0uc3dpdGNoX3BpbiA9IGMtPmdwaW9fY2Q7Ci0JbW1jLT5zbG90c1swXS5ncGlvX3dwID0gYy0+Z3Bpb193cDsKKwltbWMtPnN3aXRjaF9waW4gPSBjLT5ncGlvX2NkOworCW1tYy0+Z3Bpb193cCA9IGMtPmdwaW9fd3A7CiAKLQltbWMtPnNsb3RzWzBdLnJlbXV4ID0gYy0+cmVtdXg7Ci0JbW1jLT5zbG90c1swXS5pbml0X2NhcmQgPSBjLT5pbml0X2NhcmQ7CisJbW1jLT5yZW11eCA9IGMtPnJlbXV4OworCW1tYy0+aW5pdF9jYXJkID0gYy0+aW5pdF9jYXJkOwogCiAJaWYgKGMtPmNvdmVyX29ubHkpCi0JCW1tYy0+c2xvdHNbMF0uY292ZXIgPSAxOworCQltbWMtPmNvdmVyID0gMTsKIAogCWlmIChjLT5ub25yZW1vdmFibGUpCi0JCW1tYy0+c2xvdHNbMF0ubm9ucmVtb3ZhYmxlID0gMTsKLQotCWlmIChjLT5wb3dlcl9zYXZpbmcpCi0JCW1tYy0+c2xvdHNbMF0ucG93ZXJfc2F2aW5nID0gMTsKLQotCWlmIChjLT5ub19vZmYpCi0JCW1tYy0+c2xvdHNbMF0ubm9fb2ZmID0gMTsKLQotCWlmIChjLT5ub19vZmZfaW5pdCkKLQkJbW1jLT5zbG90c1swXS5ub19yZWd1bGF0b3Jfb2ZmX2luaXQgPSBjLT5ub19vZmZfaW5pdDsKLQotCWlmIChjLT52Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXApCi0JCW1tYy0+c2xvdHNbMF0udmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwID0gMTsKKwkJbW1jLT5ub25yZW1vdmFibGUgPSAxOwogCiAJLyoKIAkgKiBOT1RFOiAgTU1DIHNsb3RzIHNob3VsZCBoYXZlIGEgVmNjIHJlZ3VsYXRvciBzZXQgdXAuCkBAIC0zMDAsNDIgKzI3MCw0MiBAQAogCSAqIHRlbXBvcmFyeSBIQUNLOiBvY3JfbWFzayBpbnN0ZWFkIG9mIGZpeGVkIHN1cHBseQogCSAqLwogCWlmIChzb2NfaXNfYW0zNXh4KCkpCi0JCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBNTUNfVkREXzE2NV8xOTUgfAorCQltbWMtPm9jcl9tYXNrID0gTU1DX1ZERF8xNjVfMTk1IHwKIAkJCQkJIE1NQ19WRERfMjZfMjcgfAogCQkJCQkgTU1DX1ZERF8yN18yOCB8CiAJCQkJCSBNTUNfVkREXzI5XzMwIHwKIAkJCQkJIE1NQ19WRERfMzBfMzEgfAogCQkJCQkgTU1DX1ZERF8zMV8zMjsKIAllbHNlCi0JCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBjLT5vY3JfbWFzazsKKwkJbW1jLT5vY3JfbWFzayA9IGMtPm9jcl9tYXNrOwogCiAJaWYgKCFzb2NfaXNfYW0zNXh4KCkpCi0JCW1tYy0+c2xvdHNbMF0uZmVhdHVyZXMgfD0gSFNNTUNfSEFTX1BCSUFTOworCQltbWMtPmZlYXR1cmVzIHw9IEhTTU1DX0hBU19QQklBUzsKIAogCXN3aXRjaCAoYy0+bW1jKSB7CiAJY2FzZSAxOgotCQlpZiAobW1jLT5zbG90c1swXS5mZWF0dXJlcyAmIEhTTU1DX0hBU19QQklBUykgeworCQlpZiAobW1jLT5mZWF0dXJlcyAmIEhTTU1DX0hBU19QQklBUykgewogCQkJLyogb24tY2hpcCBsZXZlbCBzaGlmdGluZyB2aWEgUEJJQVMwL1BCSUFTMSAqLwotCQkJbW1jLT5zbG90c1swXS5iZWZvcmVfc2V0X3JlZyA9CisJCQltbWMtPmJlZm9yZV9zZXRfcmVnID0KIAkJCQkJb21hcF9oc21tYzFfYmVmb3JlX3NldF9yZWc7Ci0JCQltbWMtPnNsb3RzWzBdLmFmdGVyX3NldF9yZWcgPQorCQkJbW1jLT5hZnRlcl9zZXRfcmVnID0KIAkJCQkJb21hcF9oc21tYzFfYWZ0ZXJfc2V0X3JlZzsKIAkJfQogCiAJCWlmIChzb2NfaXNfYW0zNXh4KCkpCi0JCQltbWMtPnNsb3RzWzBdLnNldF9wb3dlciA9IG5vcF9tbWNfc2V0X3Bvd2VyOworCQkJbW1jLT5zZXRfcG93ZXIgPSBub3BfbW1jX3NldF9wb3dlcjsKIAogCQkvKiBPTUFQMzYzMCBIU01NQzEgc3VwcG9ydHMgb25seSA0LWJpdCAqLwogCQlpZiAoY3B1X2lzX29tYXAzNjMwKCkgJiYKIAkJCQkoYy0+Y2FwcyAmIE1NQ19DQVBfOF9CSVRfREFUQSkpIHsKIAkJCWMtPmNhcHMgJj0gfk1NQ19DQVBfOF9CSVRfREFUQTsKIAkJCWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwotCQkJbW1jLT5zbG90c1swXS5jYXBzID0gYy0+Y2FwczsKKwkJCW1tYy0+Y2FwcyA9IGMtPmNhcHM7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAyOgogCQlpZiAoc29jX2lzX2FtMzV4eCgpKQotCQkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSBhbTM1eF9oc21tYzJfc2V0X3Bvd2VyOworCQkJbW1jLT5zZXRfcG93ZXIgPSBhbTM1eF9oc21tYzJfc2V0X3Bvd2VyOwogCiAJCWlmIChjLT5leHRfY2xvY2spCiAJCQljLT50cmFuc2NlaXZlciA9IDE7CkBAIC0zNDMsMTcgKzMxMywxNyBAQAogCQkJYy0+Y2FwcyAmPSB+TU1DX0NBUF84X0JJVF9EQVRBOwogCQkJYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAJCX0KLQkJaWYgKG1tYy0+c2xvdHNbMF0uZmVhdHVyZXMgJiBIU01NQ19IQVNfUEJJQVMpIHsKKwkJaWYgKG1tYy0+ZmVhdHVyZXMgJiBIU01NQ19IQVNfUEJJQVMpIHsKIAkJCS8qIG9mZi1jaGlwIGxldmVsIHNoaWZ0aW5nLCBvciBub25lICovCi0JCQltbWMtPnNsb3RzWzBdLmJlZm9yZV9zZXRfcmVnID0gaHNtbWMyX2JlZm9yZV9zZXRfcmVnOwotCQkJbW1jLT5zbG90c1swXS5hZnRlcl9zZXRfcmVnID0gTlVMTDsKKwkJCW1tYy0+YmVmb3JlX3NldF9yZWcgPSBoc21tYzJfYmVmb3JlX3NldF9yZWc7CisJCQltbWMtPmFmdGVyX3NldF9yZWcgPSBOVUxMOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMzoKIAljYXNlIDQ6CiAJY2FzZSA1OgotCQltbWMtPnNsb3RzWzBdLmJlZm9yZV9zZXRfcmVnID0gTlVMTDsKLQkJbW1jLT5zbG90c1swXS5hZnRlcl9zZXRfcmVnID0gTlVMTDsKKwkJbW1jLT5iZWZvcmVfc2V0X3JlZyA9IE5VTEw7CisJCW1tYy0+YWZ0ZXJfc2V0X3JlZyA9IE5VTEw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigiTU1DJWQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkIVxuIiwgYy0+bW1jKTsKQEAgLTM2OCw3ICszMzgsNyBAQAogdm9pZCBvbWFwX2hzbW1jX2xhdGVfaW5pdChzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyAqYykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWNfcGRhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jX3BkYXRhOwogCWludCByZXM7CiAKIAlpZiAob21hcF9oc21tY19kb25lICE9IDEpCkBAIC0zODgsOCArMzU4LDggQEAKIAkJaWYgKCFtbWNfcGRhdGEpCiAJCQljb250aW51ZTsKIAotCQltbWNfcGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSBjLT5ncGlvX2NkOwotCQltbWNfcGRhdGEtPnNsb3RzWzBdLmdwaW9fd3AgPSBjLT5ncGlvX3dwOworCQltbWNfcGRhdGEtPnN3aXRjaF9waW4gPSBjLT5ncGlvX2NkOworCQltbWNfcGRhdGEtPmdwaW9fd3AgPSBjLT5ncGlvX3dwOwogCiAJCXJlcyA9IG9tYXBfZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOwogCQlpZiAocmVzKQpAQCAtNDA4LDEyICszNzgsMTIgQEAKIAlzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJY2hhciBvaF9uYW1lW01BWF9PTUFQX01NQ19IV01PRF9OQU1FX0xFTl07Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tY19kYXRhOwotCXN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciAqbW1jX2Rldl9hdHRyOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tY19kYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyICptbWNfZGV2X2F0dHI7CiAJY2hhciAqbmFtZTsKIAlpbnQgcmVzOwogCi0JbW1jX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSksIEdGUF9LRVJORUwpOworCW1tY19kYXRhID0ga3phbGxvYyhzaXplb2YoKm1tY19kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtbWNfZGF0YSkgewogCQlwcl9lcnIoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1tYyBkZXZpY2UhXG4iKTsKIAkJcmV0dXJuOwpAQCAtNDYzLDcgKzQzMyw3IEBACiAJfQogCiAJcmVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIG1tY19kYXRhLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhKSk7CisJCQkgICAgICBzaXplb2Yoc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSkpOwogCWlmIChyZXMpIHsKIAkJcHJfZXJyKCJDb3VsZCBub3QgYWRkIHBkYXRhIGZvciAlc1xuIiwgbmFtZSk7CiAJCWdvdG8gcHV0X3BkZXY7CkBAIC00ODksNyArNDU5LDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogCiBmcmVlX25hbWU6Ci0Ja2ZyZWUobW1jX2RhdGEtPnNsb3RzWzBdLm5hbWUpOworCWtmcmVlKG1tY19kYXRhLT5uYW1lKTsKIAogZnJlZV9tbWM6CiAJa2ZyZWUobW1jX2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oCmluZGV4IDdmMmU3OTAuLjE0OGNkOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmgKQEAgLTEyLDI1ICsxMiwxOCBAQAogCXU4CW1tYzsJCS8qIGNvbnRyb2xsZXIgMS8yLzMgKi8KIAl1MzIJY2FwczsJCS8qIDQvOCB3aXJlcyBhbmQgYW55IGFkZGl0aW9uYWwgaG9zdAogCQkJCSAqIGNhcGFiaWxpdGllcyBPUidkIChyZWYuIGxpbnV4L21tYy9ob3N0LmgpICovCi0JdTMyCXBtX2NhcHM7CS8qIFBNIGNhcGFiaWxpdGllcyAqLwogCWJvb2wJdHJhbnNjZWl2ZXI7CS8qIE1NQy0yIG9wdGlvbiAqLwogCWJvb2wJZXh0X2Nsb2NrOwkvKiB1c2UgZXh0ZXJuYWwgcGluIGZvciBpbnB1dCBjbG9jayAqLwogCWJvb2wJY292ZXJfb25seTsJLyogTm8gY2FyZCBkZXRlY3QgLSBqdXN0IGNvdmVyIHN3aXRjaCAqLwogCWJvb2wJbm9ucmVtb3ZhYmxlOwkvKiBOb25yZW1vdmFibGUgZS5nLiBlTU1DICovCi0JYm9vbAlwb3dlcl9zYXZpbmc7CS8qIFRyeSB0byBzbGVlcCBvciBwb3dlciBvZmYgd2hlbiBwb3NzaWJsZSAqLwotCWJvb2wJbm9fb2ZmOwkJLyogcG93ZXJfc2F2aW5nIGFuZCBwb3dlciBpcyBub3QgdG8gZ28gb2ZmICovCi0JYm9vbAlub19vZmZfaW5pdDsJLyogbm8gcG93ZXIgb2ZmIHdoZW4gbm90IGluIE1NQyBzbGVlcCBzdGF0ZSAqLwotCWJvb2wJdmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwOyAvKiBSZWd1bGF0b3Igb2ZmIHJlbWFwcGVkIHRvIHNsZWVwICovCiAJYm9vbAlkZWZlcnJlZDsJLyogbW1jIG5lZWRzIGEgZGVmZXJyZWQgcHJvYmUgKi8KIAlpbnQJZ3Bpb19jZDsJLyogb3IgLUVJTlZBTCAqLwogCWludAlncGlvX3dwOwkvKiBvciAtRUlOVkFMICovCiAJY2hhcgkqbmFtZTsJCS8qIG9yIE5VTEwgZm9yIGRlZmF1bHQgKi8KIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwkvKiBtbWMgY29udHJvbGxlciBpbnN0YW5jZSAqLwogCWludAlvY3JfbWFzazsJLyogdGVtcG9yYXJ5IEhBQ0sgKi8KLQlpbnQJbWF4X2ZyZXE7CS8qIG1heGltdW0gY2xvY2ssIGlmIGNvbnN0cmFpbmVkIGJ5IGV4dGVybmFsCi0JCQkJICogY2lyY3VpdHJ5LCBvciAwIGZvciBkZWZhdWx0ICovCiAJLyogUmVtdXggKHBhZCBjb25maWd1cmF0aW9uKSB3aGVuIHBvd2VyaW5nIG9uL29mZiAqLwotCXZvaWQgKCpyZW11eCkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uKTsKKwl2b2lkICgqcmVtdXgpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBvd2VyX29uKTsKIAkvKiBpbml0IHNvbWUgc3BlY2lhbCBjYXJkICovCiAJdm9pZCAoKmluaXRfY2FyZCkoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggMDNjYmIxNi4uNGZjODM4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtNDUsMTMgKzQ1LDE1IEBACiAjaW5jbHVkZSAic3JhbS5oIgogI2luY2x1ZGUgImNtMnh4eC5oIgogI2luY2x1ZGUgImNtM3h4eC5oIgorI2luY2x1ZGUgImNtMzN4eC5oIgorI2luY2x1ZGUgImNtNDR4eC5oIgogI2luY2x1ZGUgInBybS5oIgogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAicHJjbV9tcHU0NHh4LmgiCiAjaW5jbHVkZSAicHJtaW5zdDQ0eHguaCIKLSNpbmNsdWRlICJjbWluc3Q0NHh4LmgiCiAjaW5jbHVkZSAicHJtMnh4eC5oIgogI2luY2x1ZGUgInBybTN4eHguaCIKKyNpbmNsdWRlICJwcm0zM3h4LmgiCiAjaW5jbHVkZSAicHJtNDR4eC5oIgogI2luY2x1ZGUgIm9wcDJ4eHguaCIKIApAQCAtNTY1LDYgKzU2Nyw4IEBACiAJb21hcDJfc2V0X2dsb2JhbHNfY20oQU0zM1hYX0w0X1dLX0lPX0FERFJFU1MoQU0zM1hYX1BSQ01fQkFTRSksIE5VTEwpOwogCW9tYXAzeHh4X2NoZWNrX3JldmlzaW9uKCk7CiAJYW0zM3h4X2NoZWNrX2ZlYXR1cmVzKCk7CisJYW0zM3h4X3BybV9pbml0KCk7CisJYW0zM3h4X2NtX2luaXQoKTsKIAlhbTMzeHhfcG93ZXJkb21haW5zX2luaXQoKTsKIAlhbTMzeHhfY2xvY2tkb21haW5zX2luaXQoKTsKIAlhbTMzeHhfaHdtb2RfaW5pdCgpOwpAQCAtNTkxLDYgKzU5NSw4IEBACiAJb21hcF9jbV9iYXNlX2luaXQoKTsKIAlvbWFwM3h4eF9jaGVja19yZXZpc2lvbigpOwogCWFtMzN4eF9jaGVja19mZWF0dXJlcygpOworCW9tYXA0NHh4X3BybV9pbml0KCk7CisJb21hcDRfY21faW5pdCgpOwogCWFtNDN4eF9wb3dlcmRvbWFpbnNfaW5pdCgpOwogCWFtNDN4eF9jbG9ja2RvbWFpbnNfaW5pdCgpOwogCWFtNDN4eF9od21vZF9pbml0KCk7CkBAIC02MjAsNiArNjI2LDcgQEAKIAlvbWFwX2NtX2Jhc2VfaW5pdCgpOwogCW9tYXA0eHh4X2NoZWNrX3JldmlzaW9uKCk7CiAJb21hcDR4eHhfY2hlY2tfZmVhdHVyZXMoKTsKKwlvbWFwNF9jbV9pbml0KCk7CiAJb21hcDRfcG1faW5pdF9lYXJseSgpOwogCW9tYXA0NHh4X3BybV9pbml0KCk7CiAJb21hcDQ0eHhfdm9sdGFnZWRvbWFpbnNfaW5pdCgpOwpAQCAtNjU1LDYgKzY2Miw3IEBACiAJb21hcF9jbV9iYXNlX2luaXQoKTsKIAlvbWFwNDR4eF9wcm1faW5pdCgpOwogCW9tYXA1eHh4X2NoZWNrX3JldmlzaW9uKCk7CisJb21hcDRfY21faW5pdCgpOwogCW9tYXA1NHh4X3ZvbHRhZ2Vkb21haW5zX2luaXQoKTsKIAlvbWFwNTR4eF9wb3dlcmRvbWFpbnNfaW5pdCgpOwogCW9tYXA1NHh4X2Nsb2NrZG9tYWluc19pbml0KCk7CkBAIC02ODYsNiArNjk0LDcgQEAKIAlvbWFwX2NtX2Jhc2VfaW5pdCgpOwogCW9tYXA0NHh4X3BybV9pbml0KCk7CiAJZHJhN3h4eF9jaGVja19yZXZpc2lvbigpOworCW9tYXA0X2NtX2luaXQoKTsKIAlkcmE3eHhfcG93ZXJkb21haW5zX2luaXQoKTsKIAlkcmE3eHhfY2xvY2tkb21haW5zX2luaXQoKTsKIAlkcmE3eHhfaHdtb2RfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLmgKaW5kZXggMGNkNGIwOC4uMzBkMzliOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy5oCkBAIC0xLDUgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tbWMtb21hcC5oPgogCiAjZGVmaW5lIE9NQVAyNFhYX05SX01NQwkJMgogI2RlZmluZSBPTUFQMjQyMF9NTUNfU0laRQlPTUFQMV9NTUNfU0laRQpAQCAtNywxNCArNSw2IEBACiAKICNkZWZpbmUgT01BUDRfTU1DX1JFR19PRkZTRVQJMHgxMDAKIAotI2lmIGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpCi12b2lkIG9tYXAyNDJ4X2luaXRfbW1jKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICoqbW1jX2RhdGEpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMjQyeF9pbml0X21tYyhzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqKm1tY19kYXRhKQotewotfQotI2VuZGlmCi0KIHN0cnVjdCBvbWFwX2h3bW9kOwogaW50IG9tYXBfbXNkaV9yZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtbXB1c3MtbG93cG93ZXIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1tcHVzcy1sb3dwb3dlci5jCmluZGV4IDY5NDRhZTMuLjc5ZjQ5ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1tcHVzcy1sb3dwb3dlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1tcHVzcy1sb3dwb3dlci5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIGludCBvbWFwNF9lbnRlcl9sb3dwb3dlcih1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGUpCiB7CiAJc3RydWN0IG9tYXA0X2NwdV9wbV9pbmZvICpwbV9pbmZvID0gJnBlcl9jcHUob21hcDRfcG1faW5mbywgY3B1KTsKLQl1bnNpZ25lZCBpbnQgc2F2ZV9zdGF0ZSA9IDA7CisJdW5zaWduZWQgaW50IHNhdmVfc3RhdGUgPSAwLCBjcHVfbG9naWNfc3RhdGUgPSBQV1JETV9QT1dFUl9SRVQ7CiAJdW5zaWduZWQgaW50IHdha2V1cF9jcHU7CiAKIAlpZiAob21hcF9yZXYoKSA9PSBPTUFQNDQzMF9SRVZfRVMxXzApCkBAIC0yMzksNiArMjM5LDcgQEAKIAkJc2F2ZV9zdGF0ZSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgUFdSRE1fUE9XRVJfT0ZGOgorCQljcHVfbG9naWNfc3RhdGUgPSBQV1JETV9QT1dFUl9PRkY7CiAJCXNhdmVfc3RhdGUgPSAxOwogCQlicmVhazsKIAljYXNlIFBXUkRNX1BPV0VSX1JFVDoKQEAgLTI3MCw2ICsyNzEsNyBAQAogCiAJY3B1X2NsZWFyX3ByZXZfbG9naWNfcHdyc3QoY3B1KTsKIAlwd3JkbV9zZXRfbmV4dF9wd3JzdChwbV9pbmZvLT5wd3JkbSwgcG93ZXJfc3RhdGUpOworCXB3cmRtX3NldF9sb2dpY19yZXRzdChwbV9pbmZvLT5wd3JkbSwgY3B1X2xvZ2ljX3N0YXRlKTsKIAlzZXRfY3B1X3dha2V1cF9hZGRyKGNwdSwgdmlydF90b19waHlzKG9tYXBfcG1fb3BzLnJlc3VtZSkpOwogCW9tYXBfcG1fb3BzLnNjdV9wcmVwYXJlKGNwdSwgcG93ZXJfc3RhdGUpOwogCWwyeDBfcHdyc3RfcHJlcGFyZShjcHUsIHNhdmVfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMi1yZXN0YXJ0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAyLXJlc3RhcnQuYwppbmRleCA2ODQyM2UyLi5kOTM3YjJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAyLXJlc3RhcnQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAyLXJlc3RhcnQuYwpAQCAtMTUsNyArMTUsNyBAQAogCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAicHJtMnh4eC5oIgorI2luY2x1ZGUgInBybS5oIgogCiAvKgogICogcmVzZXRfdmlydF9wcmNtX3NldF9jaywgcmVzZXRfc3lzX2NrOiBwb2ludGVycyB0byB0aGUgdmlydF9wcmNtX3NldApAQCAtNDAsOCArNDAsNyBAQAogCiAJLyogWFhYIFNob3VsZCBzYXZlIHRoZSBjbWQgYXJndW1lbnQgZm9yIHVzZSBhZnRlciB0aGUgcmVib290ICovCiAKLQlvbWFwMnh4eF9wcm1fZHBsbF9yZXNldCgpOyAvKiBuZXZlciByZXR1cm5zICovCi0Jd2hpbGUgKDEpOworCW9tYXBfcHJtX3Jlc2V0X3N5c3RlbSgpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDMtcmVzdGFydC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMy1yZXN0YXJ0LmMKaW5kZXggNWRlMmEwYy4uMTAzYTQ5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMy1yZXN0YXJ0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMy1yZXN0YXJ0LmMKQEAgLTE0LDEwICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCi0jaW5jbHVkZSAiaW9tYXAuaCIKLSNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJjb250cm9sLmgiCi0jaW5jbHVkZSAicHJtM3h4eC5oIgorI2luY2x1ZGUgInBybS5oIgogCiAvKiBHbG9iYWwgYWRkcmVzcyBiYXNlIHNldHVwIGNvZGUgKi8KIApAQCAtMzIsNiArMzAsNSBAQAogdm9pZCBvbWFwM3h4eF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCW9tYXAzX2N0cmxfd3JpdGVfYm9vdF9tb2RlKChjbWQgPyAodTgpKmNtZCA6IDApKTsKLQlvbWFwM3h4eF9wcm1fZHBsbDNfcmVzZXQoKTsgLyogbmV2ZXIgcmV0dXJucyAqLwotCXdoaWxlICgxKTsKKwlvbWFwX3BybV9yZXNldF9zeXN0ZW0oKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LWNvbW1vbi5jCmluZGV4IDE2YjIwY2UuLmI3Y2I0NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImlvbWFwLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAicHJtaW5zdDQ0eHguaCIKICNpbmNsdWRlICJwcmNtX21wdTQ0eHguaCIKICNpbmNsdWRlICJvbWFwNC1zYXItbGF5b3V0LmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LXJlc3RhcnQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtcmVzdGFydC5jCmluZGV4IDQxZGZkN2QuLmE5OWU3ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtcmVzdGFydC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtcmVzdGFydC5jCkBAIC05LDcgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlICJwcm1pbnN0NDR4eC5oIgorI2luY2x1ZGUgInBybS5oIgogCiAvKioKICAqIG9tYXA0NHh4X3Jlc3RhcnQgLSB0cmlnZ2VyIGEgc29mdHdhcmUgcmVzdGFydCBvZiB0aGUgU29DCkBAIC0yMiw3ICsyMiw1IEBACiB2b2lkIG9tYXA0NHh4X3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyogWFhYIFNob3VsZCBzYXZlICdjbWQnIGludG8gc2NyYXRjaHBhZCBmb3IgdXNlIGFmdGVyIHJlYm9vdCAqLwotCW9tYXA0X3BybWluc3RfZ2xvYmFsX3dhcm1fc3dfcmVzZXQoKTsgLyogbmV2ZXIgcmV0dXJucyAqLwotCXdoaWxlICgxKQotCQk7CisJb21hcF9wcm1fcmVzZXRfc3lzdGVtKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCmluZGV4IDcxNjI0N2UuLmNiYjkwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCkBAIC0xNTMsNyArMTUzLDYgQEAKICNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgogI2luY2x1ZGUgImNtMnh4eC5oIgogI2luY2x1ZGUgImNtM3h4eC5oIgotI2luY2x1ZGUgImNtaW5zdDQ0eHguaCIKICNpbmNsdWRlICJjbTMzeHguaCIKICNpbmNsdWRlICJwcm0uaCIKICNpbmNsdWRlICJwcm0zeHh4LmgiCkBAIC05NzksMzEgKzk3OCw5IEBACiAJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiAlczogJWRcbiIsCiAJCSBvaC0+bmFtZSwgX19mdW5jX18sIG9oLT5wcmNtLm9tYXA0Lm1vZHVsZW1vZGUpOwogCi0Jb21hcDRfY21pbnN0X21vZHVsZV9lbmFibGUob2gtPnByY20ub21hcDQubW9kdWxlbW9kZSwKLQkJCQkgICBvaC0+Y2xrZG0tPnByY21fcGFydGl0aW9uLAotCQkJCSAgIG9oLT5jbGtkbS0+Y21faW5zdCwKLQkJCQkgICBvaC0+Y2xrZG0tPmNsa2RtX29mZnMsCi0JCQkJICAgb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzKTsKLX0KLQotLyoqCi0gKiBfYW0zM3h4X2VuYWJsZV9tb2R1bGUgLSBlbmFibGUgQ0xLQ1RSTCBtb2R1bGVtb2RlIG9uIEFNMzNYWAotICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCi0gKgotICogRW5hYmxlcyB0aGUgUFJDTSBtb2R1bGUgbW9kZSByZWxhdGVkIHRvIHRoZSBod21vZCBAb2guCi0gKiBObyByZXR1cm4gdmFsdWUuCi0gKi8KLXN0YXRpYyB2b2lkIF9hbTMzeHhfZW5hYmxlX21vZHVsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCi17Ci0JaWYgKCFvaC0+Y2xrZG0gfHwgIW9oLT5wcmNtLm9tYXA0Lm1vZHVsZW1vZGUpCi0JCXJldHVybjsKLQotCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogJXM6ICVkXG4iLAotCQkgb2gtPm5hbWUsIF9fZnVuY19fLCBvaC0+cHJjbS5vbWFwNC5tb2R1bGVtb2RlKTsKLQotCWFtMzN4eF9jbV9tb2R1bGVfZW5hYmxlKG9oLT5wcmNtLm9tYXA0Lm1vZHVsZW1vZGUsIG9oLT5jbGtkbS0+Y21faW5zdCwKLQkJCQlvaC0+Y2xrZG0tPmNsa2RtX29mZnMsCi0JCQkJb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzKTsKKwlvbWFwX2NtX21vZHVsZV9lbmFibGUob2gtPnByY20ub21hcDQubW9kdWxlbW9kZSwKKwkJCSAgICAgIG9oLT5jbGtkbS0+cHJjbV9wYXJ0aXRpb24sCisJCQkgICAgICBvaC0+Y2xrZG0tPmNtX2luc3QsIG9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2Zmcyk7CiB9CiAKIC8qKgpAQCAtMTAyNiwzNSArMTAwMyw5IEBACiAJaWYgKG9oLT5mbGFncyAmIEhXTU9EX05PX0lETEVTVCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX2lkbGUob2gtPmNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKLQkJCQkJICAgICBvaC0+Y2xrZG0tPmNtX2luc3QsCi0JCQkJCSAgICAgb2gtPmNsa2RtLT5jbGtkbV9vZmZzLAotCQkJCQkgICAgIG9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2Zmcyk7Ci19Ci0KLS8qKgotICogX2FtMzN4eF93YWl0X3RhcmdldF9kaXNhYmxlIC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gYmUgZGlzYWJsZWQgb24gQU0zM1hYCi0gKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKLSAqCi0gKiBXYWl0IGZvciBhIG1vZHVsZSBAb2ggdG8gZW50ZXIgc2xhdmUgaWRsZS4gIFJldHVybnMgMCBpZiB0aGUgbW9kdWxlCi0gKiBkb2VzIG5vdCBoYXZlIGFuIElETEVTVCBiaXQgb3IgaWYgdGhlIG1vZHVsZSBzdWNjZXNzZnVsbHkgZW50ZXJzCi0gKiBzbGF2ZSBpZGxlOyBvdGhlcndpc2UsIHBhc3MgYWxvbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKLSAqIGFwcHJvcHJpYXRlICpfY20qX3dhaXRfbW9kdWxlX2lkbGUoKSBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBfYW0zM3h4X3dhaXRfdGFyZ2V0X2Rpc2FibGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQotewotCWlmICghb2gpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG9oLT5faW50X2ZsYWdzICYgX0hXTU9EX05PX01QVV9QT1JUKQotCQlyZXR1cm4gMDsKLQotCWlmIChvaC0+ZmxhZ3MgJiBIV01PRF9OT19JRExFU1QpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGFtMzN4eF9jbV93YWl0X21vZHVsZV9pZGxlKG9oLT5jbGtkbS0+Y21faW5zdCwKLQkJCQkJICAgICBvaC0+Y2xrZG0tPmNsa2RtX29mZnMsCi0JCQkJCSAgICAgb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzKTsKKwlyZXR1cm4gb21hcF9jbV93YWl0X21vZHVsZV9pZGxlKG9oLT5jbGtkbS0+cHJjbV9wYXJ0aXRpb24sCisJCQkJCW9oLT5jbGtkbS0+Y21faW5zdCwKKwkJCQkJb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzLCAwKTsKIH0KIAogLyoqCkBAIC0xODU5LDEwICsxODEwLDggQEAKIAogCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogJXNcbiIsIG9oLT5uYW1lLCBfX2Z1bmNfXyk7CiAKLQlvbWFwNF9jbWluc3RfbW9kdWxlX2Rpc2FibGUob2gtPmNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKLQkJCQkgICAgb2gtPmNsa2RtLT5jbV9pbnN0LAotCQkJCSAgICBvaC0+Y2xrZG0tPmNsa2RtX29mZnMsCi0JCQkJICAgIG9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2Zmcyk7CisJb21hcF9jbV9tb2R1bGVfZGlzYWJsZShvaC0+Y2xrZG0tPnByY21fcGFydGl0aW9uLCBvaC0+Y2xrZG0tPmNtX2luc3QsCisJCQkgICAgICAgb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzKTsKIAogCXYgPSBfb21hcDRfd2FpdF90YXJnZXRfZGlzYWJsZShvaCk7CiAJaWYgKHYpCkBAIC0xODczLDM2ICsxODIyLDYgQEAKIH0KIAogLyoqCi0gKiBfYW0zM3h4X2Rpc2FibGVfbW9kdWxlIC0gZW5hYmxlIENMS0NUUkwgbW9kdWxlbW9kZSBvbiBBTTMzWFgKLSAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgotICoKLSAqIERpc2FibGUgdGhlIFBSQ00gbW9kdWxlIG1vZGUgcmVsYXRlZCB0byB0aGUgaHdtb2QgQG9oLgotICogUmV0dXJuIEVJTlZBTCBpZiB0aGUgbW9kdWxlbW9kZSBpcyBub3Qgc3VwcG9ydGVkIGFuZCAwIGluIGNhc2Ugb2Ygc3VjY2Vzcy4KLSAqLwotc3RhdGljIGludCBfYW0zM3h4X2Rpc2FibGVfbW9kdWxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKLXsKLQlpbnQgdjsKLQotCWlmICghb2gtPmNsa2RtIHx8ICFvaC0+cHJjbS5vbWFwNC5tb2R1bGVtb2RlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogJXNcbiIsIG9oLT5uYW1lLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoX2FyZV9hbnlfaGFyZHJlc2V0X2xpbmVzX2Fzc2VydGVkKG9oKSkKLQkJcmV0dXJuIDA7Ci0KLQlhbTMzeHhfY21fbW9kdWxlX2Rpc2FibGUob2gtPmNsa2RtLT5jbV9pbnN0LCBvaC0+Y2xrZG0tPmNsa2RtX29mZnMsCi0JCQkJIG9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2Zmcyk7Ci0KLQl2ID0gX2FtMzN4eF93YWl0X3RhcmdldF9kaXNhYmxlKG9oKTsKLQlpZiAodikKLQkJcHJfd2Fybigib21hcF9od21vZDogJXM6IF93YWl0X3RhcmdldF9kaXNhYmxlIGZhaWxlZFxuIiwKLQkJCW9oLT5uYW1lKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKICAqIF9vY3Bfc29mdHJlc2V0IC0gcmVzZXQgYW4gb21hcF9od21vZCB2aWEgdGhlIE9DUF9TWVNDT05GSUcgYml0CiAgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKICAqCkBAIC0yMDY1LDEwICsxOTg0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb19jaGFpbl9sb2NrLCBmbGFncyk7CiAKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCW9tYXAzeHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbigpOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQlvbWFwNDR4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4oKTsKKwlvbWFwX3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbigpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fY2hhaW5fbG9jaywgZmxhZ3MpOwogfQpAQCAtMjcxOSwxMSArMjYzNSwzMyBAQAogCWlmIChvaC0+X3N0YXRlICE9IF9IV01PRF9TVEFURV9JTklUSUFMSVpFRCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAob2gtPnBhcmVudF9od21vZCkgeworCQlpbnQgcjsKKworCQlyID0gX2VuYWJsZShvaC0+cGFyZW50X2h3bW9kKTsKKwkJV0FSTihyLCAiaHdtb2Q6ICVzOiBzZXR1cDogZmFpbGVkIHRvIGVuYWJsZSBwYXJlbnQgaHdtb2QgJXNcbiIsCisJCSAgICAgb2gtPm5hbWUsIG9oLT5wYXJlbnRfaHdtb2QtPm5hbWUpOworCX0KKwogCV9zZXR1cF9pY2xrX2F1dG9pZGxlKG9oKTsKIAogCWlmICghX3NldHVwX3Jlc2V0KG9oKSkKIAkJX3NldHVwX3Bvc3RzZXR1cChvaCk7CiAKKwlpZiAob2gtPnBhcmVudF9od21vZCkgeworCQl1OCBwb3N0c2V0dXBfc3RhdGU7CisKKwkJcG9zdHNldHVwX3N0YXRlID0gb2gtPnBhcmVudF9od21vZC0+X3Bvc3RzZXR1cF9zdGF0ZTsKKworCQlpZiAocG9zdHNldHVwX3N0YXRlID09IF9IV01PRF9TVEFURV9JRExFKQorCQkJX2lkbGUob2gtPnBhcmVudF9od21vZCk7CisJCWVsc2UgaWYgKHBvc3RzZXR1cF9zdGF0ZSA9PSBfSFdNT0RfU1RBVEVfRElTQUJMRUQpCisJCQlfc2h1dGRvd24ob2gtPnBhcmVudF9od21vZCk7CisJCWVsc2UgaWYgKHBvc3RzZXR1cF9zdGF0ZSAhPSBfSFdNT0RfU1RBVEVfRU5BQkxFRCkKKwkJCVdBUk4oMSwgImh3bW9kOiAlczogdW5rbm93biBwb3N0c2V0dXAgc3RhdGUgJWQhIGRlZmF1bHRpbmcgdG8gZW5hYmxlZFxuIiwKKwkJCSAgICAgb2gtPnBhcmVudF9od21vZC0+bmFtZSwgcG9zdHNldHVwX3N0YXRlKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjgzMiwxMiArMjc3MCwxMCBAQAogCV9hbGxvY19saW5rcygmbWwsICZzbCk7CiAKIAltbC0+b2NwX2lmID0gb2k7Ci0JSU5JVF9MSVNUX0hFQUQoJm1sLT5ub2RlKTsKIAlsaXN0X2FkZCgmbWwtPm5vZGUsICZvaS0+bWFzdGVyLT5tYXN0ZXJfcG9ydHMpOwogCW9pLT5tYXN0ZXItPm1hc3RlcnNfY250Kys7CiAKIAlzbC0+b2NwX2lmID0gb2k7Ci0JSU5JVF9MSVNUX0hFQUQoJnNsLT5ub2RlKTsKIAlsaXN0X2FkZCgmc2wtPm5vZGUsICZvaS0+c2xhdmUtPnNsYXZlX3BvcnRzKTsKIAlvaS0+c2xhdmUtPnNsYXZlc19jbnQrKzsKIApAQCAtMjkyNyw3ICsyODYzLDcgQEAKIC8qIFN0YXRpYyBmdW5jdGlvbnMgaW50ZW5kZWQgb25seSBmb3IgdXNlIGluIHNvY19vcHMgZmllbGQgZnVuY3Rpb24gcG9pbnRlcnMgKi8KIAogLyoqCi0gKiBfb21hcDJ4eHhfd2FpdF90YXJnZXRfcmVhZHkgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBsZWF2ZSBzbGF2ZSBpZGxlCisgKiBfb21hcDJ4eHhfM3h4eF93YWl0X3RhcmdldF9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGxlYXZlIHNsYXZlIGlkbGUKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgogICoKICAqIFdhaXQgZm9yIGEgbW9kdWxlIEBvaCB0byBsZWF2ZSBzbGF2ZSBpZGxlLiAgUmV0dXJucyAwIGlmIHRoZSBtb2R1bGUKQEAgLTI5MzUsNyArMjg3MSw3IEBACiAgKiBzbGF2ZSBpZGxlOyBvdGhlcndpc2UsIHBhc3MgYWxvbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKICAqIGFwcHJvcHJpYXRlICpfY20qX3dhaXRfbW9kdWxlX3JlYWR5KCkgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyBpbnQgX29tYXAyeHh4X3dhaXRfdGFyZ2V0X3JlYWR5KHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKK3N0YXRpYyBpbnQgX29tYXAyeHh4XzN4eHhfd2FpdF90YXJnZXRfcmVhZHkoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewogCWlmICghb2gpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjk0OCwzNiArMjg4NCw5IEBACiAKIAkvKiBYWFggY2hlY2sgbW9kdWxlIFNJRExFTU9ERSwgaGFyZHJlc2V0IHN0YXR1cywgZW5hYmxlZCBjbG9ja3MgKi8KIAotCXJldHVybiBvbWFwMnh4eF9jbV93YWl0X21vZHVsZV9yZWFkeShvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywKLQkJCQkJICAgICBvaC0+cHJjbS5vbWFwMi5pZGxlc3RfcmVnX2lkLAotCQkJCQkgICAgIG9oLT5wcmNtLm9tYXAyLmlkbGVzdF9pZGxlX2JpdCk7Ci19Ci0KLS8qKgotICogX29tYXAzeHh4X3dhaXRfdGFyZ2V0X3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gbGVhdmUgc2xhdmUgaWRsZQotICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCi0gKgotICogV2FpdCBmb3IgYSBtb2R1bGUgQG9oIHRvIGxlYXZlIHNsYXZlIGlkbGUuICBSZXR1cm5zIDAgaWYgdGhlIG1vZHVsZQotICogZG9lcyBub3QgaGF2ZSBhbiBJRExFU1QgYml0IG9yIGlmIHRoZSBtb2R1bGUgc3VjY2Vzc2Z1bGx5IGxlYXZlcwotICogc2xhdmUgaWRsZTsgb3RoZXJ3aXNlLCBwYXNzIGFsb25nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlCi0gKiBhcHByb3ByaWF0ZSAqX2NtKl93YWl0X21vZHVsZV9yZWFkeSgpIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgaW50IF9vbWFwM3h4eF93YWl0X3RhcmdldF9yZWFkeShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCi17Ci0JaWYgKCFvaCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob2gtPmZsYWdzICYgSFdNT0RfTk9fSURMRVNUKQotCQlyZXR1cm4gMDsKLQotCWlmICghX2ZpbmRfbXB1X3J0X3BvcnQob2gpKQotCQlyZXR1cm4gMDsKLQotCS8qIFhYWCBjaGVjayBtb2R1bGUgU0lETEVNT0RFLCBoYXJkcmVzZXQgc3RhdHVzLCBlbmFibGVkIGNsb2NrcyAqLwotCi0JcmV0dXJuIG9tYXAzeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KG9oLT5wcmNtLm9tYXAyLm1vZHVsZV9vZmZzLAotCQkJCQkgICAgIG9oLT5wcmNtLm9tYXAyLmlkbGVzdF9yZWdfaWQsCi0JCQkJCSAgICAgb2gtPnByY20ub21hcDIuaWRsZXN0X2lkbGVfYml0KTsKKwlyZXR1cm4gb21hcF9jbV93YWl0X21vZHVsZV9yZWFkeSgwLCBvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywKKwkJCQkJIG9oLT5wcmNtLm9tYXAyLmlkbGVzdF9yZWdfaWQsCisJCQkJCSBvaC0+cHJjbS5vbWFwMi5pZGxlc3RfaWRsZV9iaXQpOwogfQogCiAvKioKQEAgLTMwMDIsMzcgKzI5MTEsOSBAQAogCiAJLyogWFhYIGNoZWNrIG1vZHVsZSBTSURMRU1PREUsIGhhcmRyZXNldCBzdGF0dXMgKi8KIAotCXJldHVybiBvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfcmVhZHkob2gtPmNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKLQkJCQkJICAgICAgb2gtPmNsa2RtLT5jbV9pbnN0LAotCQkJCQkgICAgICBvaC0+Y2xrZG0tPmNsa2RtX29mZnMsCi0JCQkJCSAgICAgIG9oLT5wcmNtLm9tYXA0LmNsa2N0cmxfb2Zmcyk7Ci19Ci0KLS8qKgotICogX2FtMzN4eF93YWl0X3RhcmdldF9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGxlYXZlIHNsYXZlIGlkbGUKLSAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgotICoKLSAqIFdhaXQgZm9yIGEgbW9kdWxlIEBvaCB0byBsZWF2ZSBzbGF2ZSBpZGxlLiAgUmV0dXJucyAwIGlmIHRoZSBtb2R1bGUKLSAqIGRvZXMgbm90IGhhdmUgYW4gSURMRVNUIGJpdCBvciBpZiB0aGUgbW9kdWxlIHN1Y2Nlc3NmdWxseSBsZWF2ZXMKLSAqIHNsYXZlIGlkbGU7IG90aGVyd2lzZSwgcGFzcyBhbG9uZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZQotICogYXBwcm9wcmlhdGUgKl9jbSpfd2FpdF9tb2R1bGVfcmVhZHkoKSBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBfYW0zM3h4X3dhaXRfdGFyZ2V0X3JlYWR5KHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKLXsKLQlpZiAoIW9oIHx8ICFvaC0+Y2xrZG0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG9oLT5mbGFncyAmIEhXTU9EX05PX0lETEVTVCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIV9maW5kX21wdV9ydF9wb3J0KG9oKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBYWFggY2hlY2sgbW9kdWxlIFNJRExFTU9ERSwgaGFyZHJlc2V0IHN0YXR1cyAqLwotCi0JcmV0dXJuIGFtMzN4eF9jbV93YWl0X21vZHVsZV9yZWFkeShvaC0+Y2xrZG0tPmNtX2luc3QsCi0JCQkJCSAgICAgIG9oLT5jbGtkbS0+Y2xrZG1fb2ZmcywKLQkJCQkJICAgICAgb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzKTsKKwlyZXR1cm4gb21hcF9jbV93YWl0X21vZHVsZV9yZWFkeShvaC0+Y2xrZG0tPnByY21fcGFydGl0aW9uLAorCQkJCQkgb2gtPmNsa2RtLT5jbV9pbnN0LAorCQkJCQkgb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzLCAwKTsKIH0KIAogLyoqCkBAIC0zMDQ5LDggKzI5MzAsOCBAQAogc3RhdGljIGludCBfb21hcDJfYXNzZXJ0X2hhcmRyZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsCiAJCQkJICAgc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gKm9ocmkpCiB7Ci0JcmV0dXJuIG9tYXAyX3BybV9hc3NlcnRfaGFyZHJlc2V0KG9oLT5wcmNtLm9tYXAyLm1vZHVsZV9vZmZzLAotCQkJCQkgIG9ocmktPnJzdF9zaGlmdCk7CisJcmV0dXJuIG9tYXBfcHJtX2Fzc2VydF9oYXJkcmVzZXQob2hyaS0+cnN0X3NoaWZ0LCAwLAorCQkJCQkgb2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsIDApOwogfQogCiAvKioKQEAgLTMwNjcsOSArMjk0OCw4IEBACiBzdGF0aWMgaW50IF9vbWFwMl9kZWFzc2VydF9oYXJkcmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oLAogCQkJCSAgICAgc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gKm9ocmkpCiB7Ci0JcmV0dXJuIG9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQob2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsCi0JCQkJCSAgICBvaHJpLT5yc3Rfc2hpZnQsCi0JCQkJCSAgICBvaHJpLT5zdF9zaGlmdCk7CisJcmV0dXJuIG9tYXBfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldChvaHJpLT5yc3Rfc2hpZnQsIG9ocmktPnN0X3NoaWZ0LCAwLAorCQkJCQkgICBvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywgMCwgMCk7CiB9CiAKIC8qKgpAQCAtMzA4Nyw4ICsyOTY3LDggQEAKIHN0YXRpYyBpbnQgX29tYXAyX2lzX2hhcmRyZXNldF9hc3NlcnRlZChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsCiAJCQkJCXN0cnVjdCBvbWFwX2h3bW9kX3JzdF9pbmZvICpvaHJpKQogewotCXJldHVybiBvbWFwMl9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKG9oLT5wcmNtLm9tYXAyLm1vZHVsZV9vZmZzLAotCQkJCQkgICAgICAgb2hyaS0+c3Rfc2hpZnQpOworCXJldHVybiBvbWFwX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQob2hyaS0+c3Rfc2hpZnQsIDAsCisJCQkJCSAgICAgIG9oLT5wcmNtLm9tYXAyLm1vZHVsZV9vZmZzLCAwKTsKIH0KIAogLyoqCkBAIC0zMTA5LDEwICsyOTg5LDEwIEBACiAJaWYgKCFvaC0+Y2xrZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIG9tYXA0X3BybWluc3RfYXNzZXJ0X2hhcmRyZXNldChvaHJpLT5yc3Rfc2hpZnQsCi0JCQkJb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fcGFydGl0aW9uLAotCQkJCW9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzKTsKKwlyZXR1cm4gb21hcF9wcm1fYXNzZXJ0X2hhcmRyZXNldChvaHJpLT5yc3Rfc2hpZnQsCisJCQkJCSBvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9wYXJ0aXRpb24sCisJCQkJCSBvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkgb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzKTsKIH0KIAogLyoqCkBAIC0zMTM2LDEwICszMDE2LDEwIEBACiAJaWYgKG9ocmktPnN0X3NoaWZ0KQogCQlwcl9lcnIoIm9tYXBfaHdtb2Q6ICVzOiAlczogaHdtb2QgZGF0YSBlcnJvcjogT01BUDQgZG9lcyBub3Qgc3VwcG9ydCBzdF9zaGlmdFxuIiwKIAkJICAgICAgIG9oLT5uYW1lLCBvaHJpLT5uYW1lKTsKLQlyZXR1cm4gb21hcDRfcHJtaW5zdF9kZWFzc2VydF9oYXJkcmVzZXQob2hyaS0+cnN0X3NoaWZ0LAotCQkJCW9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX3BhcnRpdGlvbiwKLQkJCQlvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJCW9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2Zmcyk7CisJcmV0dXJuIG9tYXBfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldChvaHJpLT5yc3Rfc2hpZnQsIDAsCisJCQkJCSAgIG9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJICAgb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJICAgb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzLCAwKTsKIH0KIAogLyoqCkBAIC0zMTYwLDEwICszMDQwLDExIEBACiAJaWYgKCFvaC0+Y2xrZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIG9tYXA0X3BybWluc3RfaXNfaGFyZHJlc2V0X2Fzc2VydGVkKG9ocmktPnJzdF9zaGlmdCwKLQkJCQlvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9wYXJ0aXRpb24sCi0JCQkJb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQlvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMpOworCXJldHVybiBvbWFwX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQob2hyaS0+cnN0X3NoaWZ0LAorCQkJCQkgICAgICBvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+CisJCQkJCSAgICAgIHByY21fcGFydGl0aW9uLAorCQkJCQkgICAgICBvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkgICAgICBvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMpOwogfQogCiAvKioKQEAgLTMxODIsOSArMzA2Myw5IEBACiAJCQkJICAgc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gKm9ocmkpCiAKIHsKLQlyZXR1cm4gYW0zM3h4X3BybV9hc3NlcnRfaGFyZHJlc2V0KG9ocmktPnJzdF9zaGlmdCwKLQkJCQlvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJCW9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2Zmcyk7CisJcmV0dXJuIG9tYXBfcHJtX2Fzc2VydF9oYXJkcmVzZXQob2hyaS0+cnN0X3NoaWZ0LCAwLAorCQkJCQkgb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJIG9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2Zmcyk7CiB9CiAKIC8qKgpAQCAtMzIwMiwxMSArMzA4MywxMCBAQAogc3RhdGljIGludCBfYW0zM3h4X2RlYXNzZXJ0X2hhcmRyZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsCiAJCQkJICAgICBzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyAqb2hyaSkKIHsKLQlyZXR1cm4gYW0zM3h4X3BybV9kZWFzc2VydF9oYXJkcmVzZXQob2hyaS0+cnN0X3NoaWZ0LAotCQkJCW9ocmktPnN0X3NoaWZ0LAotCQkJCW9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzLAotCQkJCW9oLT5wcmNtLm9tYXA0LnJzdHN0X29mZnMpOworCXJldHVybiBvbWFwX3BybV9kZWFzc2VydF9oYXJkcmVzZXQob2hyaS0+cnN0X3NoaWZ0LCBvaHJpLT5zdF9zaGlmdCwgMCwKKwkJCQkJICAgb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJICAgb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzLAorCQkJCQkgICBvaC0+cHJjbS5vbWFwNC5yc3RzdF9vZmZzKTsKIH0KIAogLyoqCkBAIC0zMjI0LDkgKzMxMDQsOSBAQAogc3RhdGljIGludCBfYW0zM3h4X2lzX2hhcmRyZXNldF9hc3NlcnRlZChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsCiAJCQkJCXN0cnVjdCBvbWFwX2h3bW9kX3JzdF9pbmZvICpvaHJpKQogewotCXJldHVybiBhbTMzeHhfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChvaHJpLT5yc3Rfc2hpZnQsCi0JCQkJb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQlvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMpOworCXJldHVybiBvbWFwX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQob2hyaS0+cnN0X3NoaWZ0LCAwLAorCQkJCQkgICAgICBvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkgICAgICBvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMpOwogfQogCiAvKiBQdWJsaWMgZnVuY3Rpb25zICovCkBAIC00MjM0LDEyICs0MTE0LDEyIEBACiB2b2lkIF9faW5pdCBvbWFwX2h3bW9kX2luaXQodm9pZCkKIHsKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJc29jX29wcy53YWl0X3RhcmdldF9yZWFkeSA9IF9vbWFwMnh4eF93YWl0X3RhcmdldF9yZWFkeTsKKwkJc29jX29wcy53YWl0X3RhcmdldF9yZWFkeSA9IF9vbWFwMnh4eF8zeHh4X3dhaXRfdGFyZ2V0X3JlYWR5OwogCQlzb2Nfb3BzLmFzc2VydF9oYXJkcmVzZXQgPSBfb21hcDJfYXNzZXJ0X2hhcmRyZXNldDsKIAkJc29jX29wcy5kZWFzc2VydF9oYXJkcmVzZXQgPSBfb21hcDJfZGVhc3NlcnRfaGFyZHJlc2V0OwogCQlzb2Nfb3BzLmlzX2hhcmRyZXNldF9hc3NlcnRlZCA9IF9vbWFwMl9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQ7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQlzb2Nfb3BzLndhaXRfdGFyZ2V0X3JlYWR5ID0gX29tYXAzeHh4X3dhaXRfdGFyZ2V0X3JlYWR5OworCQlzb2Nfb3BzLndhaXRfdGFyZ2V0X3JlYWR5ID0gX29tYXAyeHh4XzN4eHhfd2FpdF90YXJnZXRfcmVhZHk7CiAJCXNvY19vcHMuYXNzZXJ0X2hhcmRyZXNldCA9IF9vbWFwMl9hc3NlcnRfaGFyZHJlc2V0OwogCQlzb2Nfb3BzLmRlYXNzZXJ0X2hhcmRyZXNldCA9IF9vbWFwMl9kZWFzc2VydF9oYXJkcmVzZXQ7CiAJCXNvY19vcHMuaXNfaGFyZHJlc2V0X2Fzc2VydGVkID0gX29tYXAyX2lzX2hhcmRyZXNldF9hc3NlcnRlZDsKQEAgLTQyNTgsMTQgKzQxMzgsMTQgQEAKIAkJc29jX29wcy5lbmFibGVfbW9kdWxlID0gX29tYXA0X2VuYWJsZV9tb2R1bGU7CiAJCXNvY19vcHMuZGlzYWJsZV9tb2R1bGUgPSBfb21hcDRfZGlzYWJsZV9tb2R1bGU7CiAJCXNvY19vcHMud2FpdF90YXJnZXRfcmVhZHkgPSBfb21hcDRfd2FpdF90YXJnZXRfcmVhZHk7Ci0JCXNvY19vcHMuYXNzZXJ0X2hhcmRyZXNldCA9IF9hbTMzeHhfYXNzZXJ0X2hhcmRyZXNldDsKLQkJc29jX29wcy5kZWFzc2VydF9oYXJkcmVzZXQgPSBfYW0zM3h4X2RlYXNzZXJ0X2hhcmRyZXNldDsKLQkJc29jX29wcy5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQgPSBfYW0zM3h4X2lzX2hhcmRyZXNldF9hc3NlcnRlZDsKKwkJc29jX29wcy5hc3NlcnRfaGFyZHJlc2V0ID0gX29tYXA0X2Fzc2VydF9oYXJkcmVzZXQ7CisJCXNvY19vcHMuZGVhc3NlcnRfaGFyZHJlc2V0ID0gX29tYXA0X2RlYXNzZXJ0X2hhcmRyZXNldDsKKwkJc29jX29wcy5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQgPSBfb21hcDRfaXNfaGFyZHJlc2V0X2Fzc2VydGVkOwogCQlzb2Nfb3BzLmluaXRfY2xrZG0gPSBfaW5pdF9jbGtkbTsKIAl9IGVsc2UgaWYgKHNvY19pc19hbTMzeHgoKSkgewotCQlzb2Nfb3BzLmVuYWJsZV9tb2R1bGUgPSBfYW0zM3h4X2VuYWJsZV9tb2R1bGU7Ci0JCXNvY19vcHMuZGlzYWJsZV9tb2R1bGUgPSBfYW0zM3h4X2Rpc2FibGVfbW9kdWxlOwotCQlzb2Nfb3BzLndhaXRfdGFyZ2V0X3JlYWR5ID0gX2FtMzN4eF93YWl0X3RhcmdldF9yZWFkeTsKKwkJc29jX29wcy5lbmFibGVfbW9kdWxlID0gX29tYXA0X2VuYWJsZV9tb2R1bGU7CisJCXNvY19vcHMuZGlzYWJsZV9tb2R1bGUgPSBfb21hcDRfZGlzYWJsZV9tb2R1bGU7CisJCXNvY19vcHMud2FpdF90YXJnZXRfcmVhZHkgPSBfb21hcDRfd2FpdF90YXJnZXRfcmVhZHk7CiAJCXNvY19vcHMuYXNzZXJ0X2hhcmRyZXNldCA9IF9hbTMzeHhfYXNzZXJ0X2hhcmRyZXNldDsKIAkJc29jX29wcy5kZWFzc2VydF9oYXJkcmVzZXQgPSBfYW0zM3h4X2RlYXNzZXJ0X2hhcmRyZXNldDsKIAkJc29jX29wcy5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQgPSBfYW0zM3h4X2lzX2hhcmRyZXNldF9hc3NlcnRlZDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKaW5kZXggNTEyZjgwOS4uMzVjYTZlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKQEAgLTYzMyw2ICs2MzMsNyBAQAogICogQGZsYWdzOiBod21vZCBmbGFncyAoZG9jdW1lbnRlZCBiZWxvdykKICAqIEBfbG9jazogc3BpbmxvY2sgc2VyaWFsaXppbmcgb3BlcmF0aW9ucyBvbiB0aGlzIGh3bW9kCiAgKiBAbm9kZTogbGlzdCBub2RlIGZvciBod21vZCBsaXN0IChpbnRlcm5hbCB1c2UpCisgKiBAcGFyZW50X2h3bW9kOiAodGVtcG9yYXJ5KSBhIHBvaW50ZXIgdG8gdGhlIGhpZXJhcmNoaWNhbCBwYXJlbnQgb2YgdGhpcyBod21vZAogICoKICAqIEBtYWluX2NsayByZWZlcnMgdG8gdGhpcyBtb2R1bGUncyAibWFpbiBjbG9jaywiIHdoaWNoIGZvciBvdXIKICAqIHB1cnBvc2VzIGlzIGRlZmluZWQgYXMgInRoZSBmdW5jdGlvbmFsIGNsb2NrIG5lZWRlZCBmb3IgcmVnaXN0ZXIKQEAgLTY0Myw2ICs2NDQsMTIgQEAKICAqIHRoZSBvbWFwX2h3bW9kIGNvZGUgYW5kIHNob3VsZCBub3QgYmUgc2V0IGR1cmluZyBpbml0aWFsaXphdGlvbi4KICAqCiAgKiBAbWFzdGVycyBhbmQgQHNsYXZlcyBhcmUgbm93IGRlcHJlY2F0ZWQuCisgKgorICogQHBhcmVudF9od21vZCBpcyB0ZW1wb3Jhcnk7IHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIGZvciBpdCwgYXMgdGhpcworICogaW5mb3JtYXRpb24gc2hvdWxkIGFscmVhZHkgYmUgZXhwcmVzc2VkIGluIHRoZSBPQ1AgaW50ZXJmYWNlCisgKiBzdHJ1Y3R1cmVzLiAgQHBhcmVudF9od21vZCBpcyBwcmVzZW50IGFzIGEgd29ya2Fyb3VuZCB1bnRpbCB3ZSBpbXByb3ZlCisgKiBoYW5kbGluZyBmb3IgaHdtb2RzIHdpdGggbXVsdGlwbGUgcGFyZW50cyAoZS5nLiwgT01BUDQrIERTUyB3aXRoCisgKiBtdWx0aXBsZSByZWdpc3RlciB0YXJnZXRzIGFjcm9zcyBkaWZmZXJlbnQgaW50ZXJjb25uZWN0cykuCiAgKi8KIHN0cnVjdCBvbWFwX2h3bW9kIHsKIAljb25zdCBjaGFyCQkJKm5hbWU7CkBAIC02ODAsNiArNjg3LDcgQEAKIAl1OAkJCQlfaW50X2ZsYWdzOwogCXU4CQkJCV9zdGF0ZTsKIAl1OAkJCQlfcG9zdHNldHVwX3N0YXRlOworCXN0cnVjdCBvbWFwX2h3bW9kCQkqcGFyZW50X2h3bW9kOwogfTsKIAogc3RydWN0IG9tYXBfaHdtb2QgKm9tYXBfaHdtb2RfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCmluZGV4IGMyNTU1Y2IuLjc5MTI3YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKQEAgLTE1LDEyICsxNSwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvaTJjLW9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2Fzb2MtdGktbWNic3AuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2hzbW1jLW9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1vbWFwMi1tY3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L29tYXAtZG1hLmg+CiAjaW5jbHVkZSA8cGxhdC9kbXRpbWVyLmg+CiAKICNpbmNsdWRlICJvbWFwX2h3bW9kLmgiCi0jaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAibDNfMnh4eC5oIgogCiAjaW5jbHVkZSAic29jLmgiCkBAIC0zNzIsNyArMzcyLDcgQEAKIAl7IC5yb2xlID0gImRiY2siLCAuY2xrID0gIm1tY2hzZGIxX2ZjayIgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0gewogCS5mbGFncyA9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xULAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzMzeHhfNDN4eF9pcGJsb2NrX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zM3h4XzQzeHhfaXBibG9ja19kYXRhLmMKaW5kZXggYTU3OWI4OS4uY2FiYzU2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzMzeHhfNDN4eF9pcGJsb2NrX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMzN4eF80M3h4X2lwYmxvY2tfZGF0YS5jCkBAIC0xNSwxMCArMTUsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9ncGlvLW9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2hzbW1jLW9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1vbWFwMi1tY3NwaS5oPgogI2luY2x1ZGUgIm9tYXBfaHdtb2QuaCIKICNpbmNsdWRlICJpMmMuaCIKLSNpbmNsdWRlICJtbWMuaCIKICNpbmNsdWRlICJ3ZF90aW1lci5oIgogI2luY2x1ZGUgImNtMzN4eC5oIgogI2luY2x1ZGUgInBybTMzeHguaCIKQEAgLTgzNiw3ICs4MzYsNyBAQAogfTsKIAogLyogbW1jMCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBhbTMzeHhfbW1jMF9kZXZfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBhbTMzeHhfbW1jMF9kZXZfYXR0ciA9IHsKIAkuZmxhZ3MJCT0gT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQsCiB9OwogCkBAIC04NTQsNyArODU0LDcgQEAKIH07CiAKIC8qIG1tYzEgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgYW0zM3h4X21tYzFfZGV2X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIgYW0zM3h4X21tYzFfZGV2X2F0dHIgPSB7CiAJLmZsYWdzCQk9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xULAogfTsKIApAQCAtODcyLDcgKzg3Miw3IEBACiB9OwogCiAvKiBtbWMyICovCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIGFtMzN4eF9tbWMyX2Rldl9hdHRyID0geworc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIGFtMzN4eF9tbWMyX2Rldl9hdHRyID0gewogCS5mbGFncwkJPSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVCwKIH07CiBzdHJ1Y3Qgb21hcF9od21vZCBhbTMzeHhfbW1jMl9od21vZCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zM3h4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zM3h4X2RhdGEuYwppbmRleCA2YjQwNmNhLi4wY2Y3YjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMzN4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzMzeHhfZGF0YS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAicHJtMzN4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTMzeHguaCIKICNpbmNsdWRlICJpMmMuaCIKLSNpbmNsdWRlICJtbWMuaCIKICNpbmNsdWRlICJ3ZF90aW1lci5oIgogI2luY2x1ZGUgIm9tYXBfaHdtb2RfMzN4eF80M3h4X2NvbW1vbl9kYXRhLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYwppbmRleCAyYTc4YjA5Li4xMTQ2OGVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLW9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlci9zbWFydHJlZmxleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1vbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9oc21tYy1vbWFwLmg+CiAKICNpbmNsdWRlIDxsaW51eC9vbWFwLWRtYS5oPgogI2luY2x1ZGUgImwzXzN4eHguaCIKQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKIAogI2luY2x1ZGUgImkyYy5oIgotI2luY2x1ZGUgIm1tYy5oIgogI2luY2x1ZGUgIndkX3RpbWVyLmgiCiAjaW5jbHVkZSAic2VyaWFsLmgiCiAKQEAgLTE3ODYsMTIgKzE3ODYsMTIgQEAKIAl7IC5yb2xlID0gImRiY2siLCAuY2xrID0gIm9tYXBfMzJrX2ZjayIsIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKIAkuZmxhZ3MgPSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVCwKIH07CiAKIC8qIFNlZSAzNXh4IGVycmF0YSAyLjEuMS4xMjggaW4gU1BSWjI3OEYgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgbW1jMV9wcmVfZXMzX2Rldl9hdHRyID0geworc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIG1tYzFfcHJlX2VzM19kZXZfYXR0ciA9IHsKIAkuZmxhZ3MgPSAoT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQgfAogCQkgIE9NQVBfSFNNTUNfQlJPS0VOX01VTFRJQkxPQ0tfUkVBRCksCiB9OwpAQCAtMTg1NCw3ICsxODU0LDcgQEAKIH07CiAKIC8qIFNlZSAzNXh4IGVycmF0YSAyLjEuMS4xMjggaW4gU1BSWjI3OEYgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgbW1jMl9wcmVfZXMzX2Rldl9hdHRyID0geworc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIG1tYzJfcHJlX2VzM19kZXZfYXR0ciA9IHsKIAkuZmxhZ3MgPSBPTUFQX0hTTU1DX0JST0tFTl9NVUxUSUJMT0NLX1JFQUQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDN4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDN4eF9kYXRhLmMKaW5kZXggZmVhMDFhYS4uNWM2Yzg0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQzeHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80M3h4X2RhdGEuYwpAQCAtNDE3LDYgKzQxNywzNyBAQAogCX0sCiB9OwogCisvKgorICogJ2FkYy90c2MnIGNsYXNzCisgKiBUb3VjaFNjcmVlbiBDb250cm9sbGVyIChBbmFsb2ctVG8tRGlnaXRhbCBDb252ZXJ0ZXIpCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgYW00M3h4X2FkY190c2Nfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwLAorCS5zeXNjX29mZnMJPSAweDEwLAorCS5zeXNjX2ZsYWdzCT0gU1lTQ19IQVNfU0lETEVNT0RFLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgU0lETEVfU01BUlRfV0tVUCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBhbTQzeHhfYWRjX3RzY19od21vZF9jbGFzcyA9IHsKKwkubmFtZQkJPSAiYWRjX3RzYyIsCisJLnN5c2MJCT0gJmFtNDN4eF9hZGNfdHNjX3N5c2MsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2QgYW00M3h4X2FkY190c2NfaHdtb2QgPSB7CisJLm5hbWUJCT0gImFkY190c2MiLAorCS5jbGFzcwkJPSAmYW00M3h4X2FkY190c2NfaHdtb2RfY2xhc3MsCisJLmNsa2RtX25hbWUJPSAibDNzX3RzY19jbGtkbSIsCisJLm1haW5fY2xrCT0gImFkY190c2NfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwNCAgPSB7CisJCQkuY2xrY3RybF9vZmZzICAgPSBBTTQzWFhfQ01fV0tVUF9BRENfVFNDX0NMS0NUUkxfT0ZGU0VULAorCQkJLm1vZHVsZW1vZGUgICAgID0gTU9EVUxFTU9ERV9TV0NUUkwsCisJCX0sCisJfSwKK307CisKIC8qIGRzcyAqLwogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2QgYW00M3h4X2Rzc19jb3JlX2h3bW9kID0gewpAQCAtNTQ3LDYgKzU3OCwxMyBAQAogCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIGFtNDN4eF9sNF93a3VwX19hZGNfdHNjID0geworCS5tYXN0ZXIgICAgICAgICA9ICZhbTMzeHhfbDRfd2t1cF9od21vZCwKKwkuc2xhdmUgICAgICAgICAgPSAmYW00M3h4X2FkY190c2NfaHdtb2QsCisJLmNsayAgICAgICAgICAgID0gImRwbGxfY29yZV9tNF9kaXYyX2NrIiwKKwkudXNlciAgICAgICAgICAgPSBPQ1BfVVNFUl9NUFUsCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIGFtNDN4eF9sNF9oc19fY3BnbWFjMCA9IHsKIAkubWFzdGVyCQk9ICZhbTQzeHhfbDRfaHNfaHdtb2QsCiAJLnNsYXZlCQk9ICZhbTMzeHhfY3BnbWFjMF9od21vZCwKQEAgLTc4OSw2ICs4MjcsNyBAQAogCSZhbTQzeHhfbDRfd2t1cF9faTJjMSwKIAkmYW00M3h4X2w0X3drdXBfX2dwaW8wLAogCSZhbTQzeHhfbDRfd2t1cF9fd2RfdGltZXIxLAorCSZhbTQzeHhfbDRfd2t1cF9fYWRjX3RzYywKIAkmYW00M3h4X2wzX3NfX3FzcGksCiAJJmFtMzN4eF9sNF9wZXJfX2RjYW4wLAogCSZhbTMzeHhfbDRfcGVyX19kY2FuMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYwppbmRleCA0NGU1NjM0Li5jMzE0YjNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1vbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9oc21tYy1vbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXIvc21hcnRyZWZsZXguaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtb21hcC5oPgogCkBAIC0zOSw3ICs0MCw2IEBACiAjaW5jbHVkZSAicHJtNDR4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTQ0eHguaCIKICNpbmNsdWRlICJpMmMuaCIKLSNpbmNsdWRlICJtbWMuaCIKICNpbmNsdWRlICJ3ZF90aW1lci5oIgogCiAvKiBCYXNlIG9mZnNldCBmb3IgYWxsIE9NQVA0IGludGVycnVwdHMgZXh0ZXJuYWwgdG8gTVBVU1MgKi8KQEAgLTU4OSw2ICs1ODksNyBAQAogCQkub21hcDQgPSB7CiAJCQkuY2xrY3RybF9vZmZzID0gT01BUDRfQ01fRFNTX0RTU19DTEtDVFJMX09GRlNFVCwKIAkJCS5jb250ZXh0X29mZnMgPSBPTUFQNF9STV9EU1NfRFNTX0NPTlRFWFRfT0ZGU0VULAorCQkJLm1vZHVsZW1vZGUgICA9IE1PRFVMRU1PREVfU1dDVFJMLAogCQl9LAogCX0sCiAJLm9wdF9jbGtzCT0gZHNzX29wdF9jbGtzLApAQCAtNjQ3LDcgKzY0OCw4IEBACiAJCQkuY29udGV4dF9vZmZzID0gT01BUDRfUk1fRFNTX0RTU19DT05URVhUX09GRlNFVCwKIAkJfSwKIAl9LAotCS5kZXZfYXR0cgk9ICZvbWFwNDR4eF9kc3NfZGlzcGNfZGV2X2F0dHIKKwkuZGV2X2F0dHIJPSAmb21hcDQ0eHhfZHNzX2Rpc3BjX2Rldl9hdHRyLAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDQ0eHhfZHNzX2h3bW9kLAogfTsKIAogLyoKQEAgLTcwMSw2ICs3MDMsNyBAQAogCX0sCiAJLm9wdF9jbGtzCT0gZHNzX2RzaTFfb3B0X2Nsa3MsCiAJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZHNzX2RzaTFfb3B0X2Nsa3MpLAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDQ0eHhfZHNzX2h3bW9kLAogfTsKIAogLyogZHNzX2RzaTIgKi8KQEAgLTczMyw2ICs3MzYsNyBAQAogCX0sCiAJLm9wdF9jbGtzCT0gZHNzX2RzaTJfb3B0X2Nsa3MsCiAJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZHNzX2RzaTJfb3B0X2Nsa3MpLAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDQ0eHhfZHNzX2h3bW9kLAogfTsKIAogLyoKQEAgLTc5MCw2ICs3OTQsNyBAQAogCX0sCiAJLm9wdF9jbGtzCT0gZHNzX2hkbWlfb3B0X2Nsa3MsCiAJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZHNzX2hkbWlfb3B0X2Nsa3MpLAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDQ0eHhfZHNzX2h3bW9kLAogfTsKIAogLyoKQEAgLTgxOSw3ICs4MjQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZHNzX3JmYmlfb3B0X2Nsa3NbXSA9IHsKLQl7IC5yb2xlID0gImljayIsIC5jbGsgPSAiZHNzX2ZjayIgfSwKKwl7IC5yb2xlID0gImljayIsIC5jbGsgPSAibDNfZGl2X2NrIiB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Rzc19yZmJpX2h3bW9kID0gewpAQCAtODM2LDYgKzg0MSw3IEBACiAJfSwKIAkub3B0X2Nsa3MJPSBkc3NfcmZiaV9vcHRfY2xrcywKIAkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfcmZiaV9vcHRfY2xrcyksCisJLnBhcmVudF9od21vZAk9ICZvbWFwNDR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKgpAQCAtODU5LDYgKzg2NSw3IEBACiAJCQkuY29udGV4dF9vZmZzID0gT01BUDRfUk1fRFNTX0RTU19DT05URVhUX09GRlNFVCwKIAkJfSwKIAl9LAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDQ0eHhfZHNzX2h3bW9kLAogfTsKIAogLyoKQEAgLTE5NTIsNyArMTk1OSw3IEBACiB9OwogCiAvKiBtbWMxIGRldl9hdHRyICovCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKIAkuZmxhZ3MJPSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVCwKIH07CiAKQEAgLTM2NzEsNyArMzY3OCw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fZHNzID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKIAkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc19od21vZCwKLQkuY2xrCQk9ICJkc3NfZmNrIiwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAogCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc19kbWFfYWRkcnMsCiAJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKIH07CkBAIC0zNzA3LDcgKzM3MTQsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2Rzc19kaXNwYyA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfZGlzcGNfaHdtb2QsCi0JLmNsawkJPSAiZHNzX2ZjayIsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKIAkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfZGlzcGNfZG1hX2FkZHJzLAogCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCiB9OwpAQCAtMzc0Myw3ICszNzUwLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8yX19kc3NfZHNpMSA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfZHNpMV9od21vZCwKLQkuY2xrCQk9ICJkc3NfZmNrIiwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAogCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc19kc2kxX2RtYV9hZGRycywKIAkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAogfTsKQEAgLTM3NzksNyArMzc4Niw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fZHNzX2RzaTIgPSB7CiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX2RzaTJfaHdtb2QsCi0JLmNsawkJPSAiZHNzX2ZjayIsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKIAkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfZHNpMl9kbWFfYWRkcnMsCiAJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKIH07CkBAIC0zODE1LDcgKzM4MjIsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2Rzc19oZG1pID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKIAkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc19oZG1pX2h3bW9kLAotCS5jbGsJCT0gImRzc19mY2siLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCiAJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX2hkbWlfZG1hX2FkZHJzLAogCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCiB9OwpAQCAtMzg1MSw3ICszODU4LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8yX19kc3NfcmZiaSA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfcmZiaV9od21vZCwKLQkuY2xrCQk9ICJkc3NfZmNrIiwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAogCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc19yZmJpX2RtYV9hZGRycywKIAkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAogfTsKQEAgLTM4ODcsNyArMzg5NCw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fZHNzX3ZlbmMgPSB7CiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX3ZlbmNfaHdtb2QsCi0JLmNsawkJPSAiZHNzX2ZjayIsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKIAkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfdmVuY19kbWFfYWRkcnMsCiAJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNTR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNTR4eF9kYXRhLmMKaW5kZXggMTEwM2FhMC4uM2U5NTIzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzU0eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF81NHh4X2RhdGEuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tb21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyL3NtYXJ0cmVmbGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLW9tYXAuaD4KIApAQCAtMzMsNyArMzQsNiBAQAogI2luY2x1ZGUgImNtMl81NHh4LmgiCiAjaW5jbHVkZSAicHJtNTR4eC5oIgogI2luY2x1ZGUgImkyYy5oIgotI2luY2x1ZGUgIm1tYy5oIgogI2luY2x1ZGUgIndkX3RpbWVyLmgiCiAKIC8qIEJhc2Ugb2Zmc2V0IGZvciBhbGwgT01BUDUgaW50ZXJydXB0cyBleHRlcm5hbCB0byBNUFVTUyAqLwpAQCAtNDIxLDYgKzQyMSw3IEBACiAJLm9wdF9jbGtzCT0gZHNzX2Rpc3BjX29wdF9jbGtzLAogCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19kaXNwY19vcHRfY2xrcyksCiAJLmRldl9hdHRyCT0gJmRzc19kaXNwY19kZXZfYXR0ciwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA1NHh4X2Rzc19od21vZCwKIH07CiAKIC8qCkBAIC00NjIsNiArNDYzLDcgQEAKIAl9LAogCS5vcHRfY2xrcwk9IGRzc19kc2kxX2Ffb3B0X2Nsa3MsCiAJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZHNzX2RzaTFfYV9vcHRfY2xrcyksCisJLnBhcmVudF9od21vZAk9ICZvbWFwNTR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKiBkc3NfZHNpMV9jICovCkBAIC00ODIsNiArNDg0LDcgQEAKIAl9LAogCS5vcHRfY2xrcwk9IGRzc19kc2kxX2Nfb3B0X2Nsa3MsCiAJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZHNzX2RzaTFfY19vcHRfY2xrcyksCisJLnBhcmVudF9od21vZAk9ICZvbWFwNTR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKgpAQCAtNTIxLDYgKzUyNCw3IEBACiAJfSwKIAkub3B0X2Nsa3MJPSBkc3NfaGRtaV9vcHRfY2xrcywKIAkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfaGRtaV9vcHRfY2xrcyksCisJLnBhcmVudF9od21vZAk9ICZvbWFwNTR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKgpAQCAtNTYwLDYgKzU2NCw3IEBACiAJfSwKIAkub3B0X2Nsa3MJPSBkc3NfcmZiaV9vcHRfY2xrcywKIAkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfcmZiaV9vcHRfY2xrcyksCisJLnBhcmVudF9od21vZAk9ICZvbWFwNTR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKgpAQCAtMTI2OSw3ICsxMjc0LDcgQEAKIH07CiAKIC8qIG1tYzEgZGV2X2F0dHIgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0gewogCS5mbGFncwk9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xULAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzd4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfN3h4X2RhdGEuYwppbmRleCA1Njg0ZjExLi5mZmQ2NjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfN3h4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfN3h4X2RhdGEuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tb21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyL3NtYXJ0cmVmbGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLW9tYXAuaD4KIApAQCAtMzMsNyArMzQsNiBAQAogI2luY2x1ZGUgImNtMl83eHguaCIKICNpbmNsdWRlICJwcm03eHguaCIKICNpbmNsdWRlICJpMmMuaCIKLSNpbmNsdWRlICJtbWMuaCIKICNpbmNsdWRlICJ3ZF90aW1lci5oIgogI2luY2x1ZGUgInNvYy5oIgogCkBAIC0xMzAxLDcgKzEzMDEsNyBAQAogfTsKIAogLyogbW1jMSBkZXZfYXR0ciAqLwotc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0geworc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CiAJLmZsYWdzCT0gT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQsCiB9OwogCkBAIC0yMDc1LDYgKzIwNzUsNzAgQEAKIAl9LAogfTsKIAorLyogdWFydDcgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBkcmE3eHhfdWFydDdfaHdtb2QgPSB7CisJLm5hbWUJCT0gInVhcnQ3IiwKKwkuY2xhc3MJCT0gJmRyYTd4eF91YXJ0X2h3bW9kX2NsYXNzLAorCS5jbGtkbV9uYW1lCT0gImw0cGVyMl9jbGtkbSIsCisJLm1haW5fY2xrCT0gInVhcnQ3X2dmY2xrX211eCIsCisJLmZsYWdzCQk9IEhXTU9EX1NXU1VQX1NJRExFX0FDVCwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfb2ZmcyA9IERSQTdYWF9DTV9MNFBFUjJfVUFSVDdfQ0xLQ1RSTF9PRkZTRVQsCisJCQkuY29udGV4dF9vZmZzID0gRFJBN1hYX1JNX0w0UEVSMl9VQVJUN19DT05URVhUX09GRlNFVCwKKwkJCS5tb2R1bGVtb2RlICAgPSBNT0RVTEVNT0RFX1NXQ1RSTCwKKwkJfSwKKwl9LAorfTsKKworLyogdWFydDggKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBkcmE3eHhfdWFydDhfaHdtb2QgPSB7CisJLm5hbWUJCT0gInVhcnQ4IiwKKwkuY2xhc3MJCT0gJmRyYTd4eF91YXJ0X2h3bW9kX2NsYXNzLAorCS5jbGtkbV9uYW1lCT0gImw0cGVyMl9jbGtkbSIsCisJLm1haW5fY2xrCT0gInVhcnQ4X2dmY2xrX211eCIsCisJLmZsYWdzCQk9IEhXTU9EX1NXU1VQX1NJRExFX0FDVCwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfb2ZmcyA9IERSQTdYWF9DTV9MNFBFUjJfVUFSVDhfQ0xLQ1RSTF9PRkZTRVQsCisJCQkuY29udGV4dF9vZmZzID0gRFJBN1hYX1JNX0w0UEVSMl9VQVJUOF9DT05URVhUX09GRlNFVCwKKwkJCS5tb2R1bGVtb2RlICAgPSBNT0RVTEVNT0RFX1NXQ1RSTCwKKwkJfSwKKwl9LAorfTsKKworLyogdWFydDkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBkcmE3eHhfdWFydDlfaHdtb2QgPSB7CisJLm5hbWUJCT0gInVhcnQ5IiwKKwkuY2xhc3MJCT0gJmRyYTd4eF91YXJ0X2h3bW9kX2NsYXNzLAorCS5jbGtkbV9uYW1lCT0gImw0cGVyMl9jbGtkbSIsCisJLm1haW5fY2xrCT0gInVhcnQ5X2dmY2xrX211eCIsCisJLmZsYWdzCQk9IEhXTU9EX1NXU1VQX1NJRExFX0FDVCwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfb2ZmcyA9IERSQTdYWF9DTV9MNFBFUjJfVUFSVDlfQ0xLQ1RSTF9PRkZTRVQsCisJCQkuY29udGV4dF9vZmZzID0gRFJBN1hYX1JNX0w0UEVSMl9VQVJUOV9DT05URVhUX09GRlNFVCwKKwkJCS5tb2R1bGVtb2RlICAgPSBNT0RVTEVNT0RFX1NXQ1RSTCwKKwkJfSwKKwl9LAorfTsKKworLyogdWFydDEwICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2QgZHJhN3h4X3VhcnQxMF9od21vZCA9IHsKKwkubmFtZQkJPSAidWFydDEwIiwKKwkuY2xhc3MJCT0gJmRyYTd4eF91YXJ0X2h3bW9kX2NsYXNzLAorCS5jbGtkbV9uYW1lCT0gIndrdXBhb25fY2xrZG0iLAorCS5tYWluX2Nsawk9ICJ1YXJ0MTBfZ2ZjbGtfbXV4IiwKKwkuZmxhZ3MJCT0gSFdNT0RfU1dTVVBfU0lETEVfQUNULAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9vZmZzID0gRFJBN1hYX0NNX1dLVVBBT05fVUFSVDEwX0NMS0NUUkxfT0ZGU0VULAorCQkJLmNvbnRleHRfb2ZmcyA9IERSQTdYWF9STV9XS1VQQU9OX1VBUlQxMF9DT05URVhUX09GRlNFVCwKKwkJCS5tb2R1bGVtb2RlICAgPSBNT0RVTEVNT0RFX1NXQ1RSTCwKKwkJfSwKKwl9LAorfTsKKwogLyoKICAqICd1c2Jfb3RnX3NzJyBjbGFzcwogICoKQEAgLTMwOTUsNiArMzE1OSwzOCBAQAogCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCisvKiBsNF9wZXIyIC0+IHVhcnQ3ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIGRyYTd4eF9sNF9wZXIyX191YXJ0NyA9IHsKKwkubWFzdGVyCQk9ICZkcmE3eHhfbDRfcGVyMl9od21vZCwKKwkuc2xhdmUJCT0gJmRyYTd4eF91YXJ0N19od21vZCwKKwkuY2xrCQk9ICJsM19pY2xrX2RpdiIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0X3BlcjIgLT4gdWFydDggKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgZHJhN3h4X2w0X3BlcjJfX3VhcnQ4ID0geworCS5tYXN0ZXIJCT0gJmRyYTd4eF9sNF9wZXIyX2h3bW9kLAorCS5zbGF2ZQkJPSAmZHJhN3h4X3VhcnQ4X2h3bW9kLAorCS5jbGsJCT0gImwzX2ljbGtfZGl2IiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbDRfcGVyMiAtPiB1YXJ0OSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBkcmE3eHhfbDRfcGVyMl9fdWFydDkgPSB7CisJLm1hc3RlcgkJPSAmZHJhN3h4X2w0X3BlcjJfaHdtb2QsCisJLnNsYXZlCQk9ICZkcmE3eHhfdWFydDlfaHdtb2QsCisJLmNsawkJPSAibDNfaWNsa19kaXYiLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBsNF93a3VwIC0+IHVhcnQxMCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBkcmE3eHhfbDRfd2t1cF9fdWFydDEwID0geworCS5tYXN0ZXIJCT0gJmRyYTd4eF9sNF93a3VwX2h3bW9kLAorCS5zbGF2ZQkJPSAmZHJhN3h4X3VhcnQxMF9od21vZCwKKwkuY2xrCQk9ICJ3a3VwYW9uX2ljbGtfbXV4IiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKwogLyogbDRfcGVyMyAtPiB1c2Jfb3RnX3NzMSAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBkcmE3eHhfbDRfcGVyM19fdXNiX290Z19zczEgPSB7CiAJLm1hc3RlcgkJPSAmZHJhN3h4X2w0X3BlcjNfaHdtb2QsCkBAIC0zMjU5LDYgKzMzNTUsMTAgQEAKIAkmZHJhN3h4X2w0X3BlcjFfX3VhcnQ0LAogCSZkcmE3eHhfbDRfcGVyMV9fdWFydDUsCiAJJmRyYTd4eF9sNF9wZXIxX191YXJ0NiwKKwkmZHJhN3h4X2w0X3BlcjJfX3VhcnQ3LAorCSZkcmE3eHhfbDRfcGVyMl9fdWFydDgsCisJJmRyYTd4eF9sNF9wZXIyX191YXJ0OSwKKwkmZHJhN3h4X2w0X3drdXBfX3VhcnQxMCwKIAkmZHJhN3h4X2w0X3BlcjNfX3VzYl9vdGdfc3MxLAogCSZkcmE3eHhfbDRfcGVyM19fdXNiX290Z19zczIsCiAJJmRyYTd4eF9sNF9wZXIzX191c2Jfb3RnX3NzMywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwppbmRleCA1MDY0MGIzLi4xYTE5ZmEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCkBAIC0yMSw2ICsyMSw4IEBACiAgICoKICAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpAQCAtOTcsMTMgKzk5LDEzIEBACiAKIAkJb21hcF9jdHJsX3dyaXRlbChkZXZjb25mMiwgQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpOwogCi0JCXByX2luZm8oS0VSTl9JTkZPICJXYWl0aW5nIGZvciBQSFkgY2xvY2sgZ29vZC4uLlxuIik7CisJCXByX2luZm8oIldhaXRpbmcgZm9yIFBIWSBjbG9jayBnb29kLi4uXG4iKTsKIAkJd2hpbGUgKCEob21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKQogCQkJCSYgQ09ORjJfUEhZQ0xLR0QpKSB7CiAJCQljcHVfcmVsYXgoKTsKIAogCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCQlwcl9lcnIoS0VSTl9FUlIgIm11c2IgUEhZIGNsb2NrIGdvb2QgdGltZWQgb3V0XG4iKTsKKwkJCQlwcl9lcnIoIm11c2IgUEhZIGNsb2NrIGdvb2QgdGltZWQgb3V0XG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTQ1LDcgKzE0Nyw3IEBACiAJCWRldmNvbmYyIHw9IENPTkYyX05PX09WRVJSSURFOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcl9pbmZvKEtFUk5fSU5GTyAiVW5zdXBwb3J0ZWQgbW9kZSAldVxuIiwgbXVzYl9tb2RlKTsKKwkJcHJfaW5mbygiVW5zdXBwb3J0ZWQgbW9kZSAldVxuIiwgbXVzYl9tb2RlKTsKIAl9CiAKIAlvbWFwX2N0cmxfd3JpdGVsKGRldmNvbmYyLCBBTTM1WFhfQ09OVFJPTF9ERVZDT05GMik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1aXJrcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wZGF0YS1xdWlya3MuYwppbmRleCBjZWM5ZDZjLi4zZDdlZWUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1aXJrcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcGRhdGEtcXVpcmtzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC90aV93aWxpbmtfc3QuaD4KICNpbmNsdWRlIDxsaW51eC93bDEyeHguaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvcGluY3RybC1zaW5nbGUuaD4KQEAgLTEzMCwxNyArMTMxLDQ1IEBACiB7CiAJb21hcDNfc2JjX3QzeF91c2JfaHViX2luaXQoMTY3LCAic2ItdDM1IHVzYiBodWIiKTsKIAlsZWdhY3lfaW5pdF93bDEyeHgoV0wxMlhYX1JFRkNMT0NLXzM4LCAwLCAxMzYpOwotCW9tYXBfYWRzNzg0Nl9pbml0KDEsIDU3LCAwLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX3NiY190MzUzMF9sZWdhY3lfaW5pdCh2b2lkKQogewogCW9tYXAzX3NiY190M3hfdXNiX2h1Yl9pbml0KDE2NywgInNiLXQzNSB1c2IgaHViIik7Ci0Jb21hcF9hZHM3ODQ2X2luaXQoMSwgNTcsIDAsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfaWdlcDAwMjBfbGVnYWN5X2luaXQodm9pZCkKK3N0cnVjdCB0aV9zdF9wbGF0X2RhdGEgd2lsaW5rX3BkYXRhID0geworCS5uc2h1dGRvd25fZ3BpbyA9IDEzNywKKwkuZGV2X25hbWUgPSAiL2Rldi90dHlPMSIsCisJLmZsb3dfY250cmwgPSAxLAorCS5iYXVkX3JhdGUgPSAzMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB3bDE4eHhfZGV2aWNlID0geworCS5uYW1lCT0gImtpbSIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmd2lsaW5rX3BkYXRhLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJ0d2lsaW5rX2RldmljZSA9IHsKKwkubmFtZQk9ICJidHdpbGluayIsCisJLmlkCT0gLTEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfaWdlcDAwMjBfcmV2X2ZfbGVnYWN5X2luaXQodm9pZCkKIHsKKwlsZWdhY3lfaW5pdF93bDEyeHgoMCwgMCwgMTc3KTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndsMTh4eF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYnR3aWxpbmtfZGV2aWNlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2lnZXAwMDMwX3Jldl9nX2xlZ2FjeV9pbml0KHZvaWQpCit7CisJbGVnYWN5X2luaXRfd2wxMnh4KDAsIDAsIDEzNik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3bDE4eHhfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJ0d2lsaW5rX2RldmljZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19ldm1fbGVnYWN5X2luaXQodm9pZCkKQEAgLTIxOCw3ICsyNDcsNiBAQAogCWhzbW1jMl9pbnRlcm5hbF9pbnB1dF9jbGsoKTsKIAlvbWFwM19zYmNfdDM1MTdfd2lmaV9pbml0KCk7CiAJbGVnYWN5X2luaXRfd2wxMnh4KFdMMTJYWF9SRUZDTE9DS18zOCwgMCwgMTQ1KTsKLQlvbWFwX2Fkczc4NDZfaW5pdCgxLCA1NywgMCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfZXZtX2xlZ2FjeV9pbml0KHZvaWQpCkBAIC0zOTAsNyArNDE4LDggQEAKIAl7ICJub2tpYSxvbWFwMy1uOTAwIiwgbm9raWFfbjkwMF9sZWdhY3lfaW5pdCwgfSwKIAl7ICJub2tpYSxvbWFwMy1uOSIsIGhzbW1jMl9pbnRlcm5hbF9pbnB1dF9jbGssIH0sCiAJeyAibm9raWEsb21hcDMtbjk1MCIsIGhzbW1jMl9pbnRlcm5hbF9pbnB1dF9jbGssIH0sCi0JeyAiaXNlZSxvbWFwMy1pZ2VwMDAyMCIsIG9tYXAzX2lnZXAwMDIwX2xlZ2FjeV9pbml0LCB9LAorCXsgImlzZWUsb21hcDMtaWdlcDAwMjAtcmV2LWYiLCBvbWFwM19pZ2VwMDAyMF9yZXZfZl9sZWdhY3lfaW5pdCwgfSwKKwl7ICJpc2VlLG9tYXAzLWlnZXAwMDMwLXJldi1nIiwgb21hcDNfaWdlcDAwMzBfcmV2X2dfbGVnYWN5X2luaXQsIH0sCiAJeyAidGksb21hcDMtZXZtLTM3eHgiLCBvbWFwM19ldm1fbGVnYWN5X2luaXQsIH0sCiAJeyAidGksb21hcDMtem9vbTMiLCBvbWFwM196b29tX2xlZ2FjeV9pbml0LCB9LAogCXsgInRpLGFtMzUxNy1ldm0iLCBhbTM1MTdfZXZtX2xlZ2FjeV9pbml0LCB9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggMTc1NTY0Yy4uODg3MjFkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvb21hcC1kbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tb21hcC5oPgogCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3Bvd2VyLmg+CkBAIC00Myw3ICs0NCw2IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiY20zeHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCi0jaW5jbHVkZSAiZ3BtYy5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKICNpbmNsdWRlICJwcm0zeHh4LmgiCiAjaW5jbHVkZSAicG0uaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jCmluZGV4IDUwMzA5N2MuLmQ2OTdjZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYwpAQCAtMzcsNiArMzcsMTYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiB9OwogCisvKioKKyAqIHN0cnVjdCBzdGF0aWNfZGVwX21hcCAtIFN0YXRpYyBkZXBlbmRlbmN5IG1hcAorICogQGZyb206CWZyb20gY2xvY2tkb21haW4KKyAqIEB0bzoJCXRvIGNsb2NrZG9tYWluCisgICovCitzdHJ1Y3Qgc3RhdGljX2RlcF9tYXAgeworCWNvbnN0IGNoYXIgKmZyb207CisJY29uc3QgY2hhciAqdG87Cit9OworCiBzdGF0aWMgdTMyIGNwdV9zdXNwZW5kX3N0YXRlID0gUFdSRE1fUE9XRVJfT0ZGOwogCiBzdGF0aWMgTElTVF9IRUFEKHB3cnN0X2xpc3QpOwpAQCAtMTQ4LDk0ICsxNTgsNjEgQEAKIAlvbWFwX2RvX3dmaSgpOwogfQogCi0vKioKLSAqIG9tYXA0X2luaXRfc3RhdGljX2RlcHMgLSBBZGQgT01BUDQgc3RhdGljIGRlcGVuZGVuY2llcwotICoKLSAqIEFkZCBuZWVkZWQgc3RhdGljIGNsb2NrZG9tYWluIGRlcGVuZGVuY2llcyBvbiBPTUFQNCBkZXZpY2VzLgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgJ2Vycicgb24gZmFpbHVyZXMKKy8qCisgKiBUaGUgZHluYW1pYyBkZXBlbmRlbmN5IGJldHdlZW4gTVBVU1MgLT4gTUVNSUYgYW5kCisgKiBNUFVTUyAtPiBMNF9QRVIvTDNfKiBhbmQgRFVDQVRJIC0+IEwzXyogZG9lc24ndCB3b3JrIGFzCisgKiBleHBlY3RlZC4gVGhlIGhhcmR3YXJlIHJlY29tbWVuZGF0aW9uIGlzIHRvIGVuYWJsZSBzdGF0aWMKKyAqIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UgdG8gYXZvaWQgc3lzdGVtIGxvY2sgdXBzIG9yIHJhbmRvbSBjcmFzaGVzLgorICogVGhlIEw0IHdha2V1cCBkZXBlZGVuY3kgaXMgYWRkZWQgdG8gd29ya2Fyb3VuZCB0aGUgT0NQIHN5bmMgaGFyZHdhcmUKKyAqIEJVRyB3aXRoIDMySyBzeW5jdGltZXIgd2hpY2ggbGVhZCB0byBpbmNvcnJlY3QgdGltZXIgdmFsdWUgcmVhZAorICogZnJvbSB0aGUgMzJLIGNvdW50ZXIuIFRoZSBCVUcgYXBwbGllcyBmb3IgR1BUSU1FUjEgYW5kIFdEVDIgd2hpY2gKKyAqIGFyZSBwYXJ0IG9mIEw0IHdha2V1cCBjbG9ja2RvbWFpbi4KICAqLwotc3RhdGljIGlubGluZSBpbnQgb21hcDRfaW5pdF9zdGF0aWNfZGVwcyh2b2lkKQotewotCXN0cnVjdCBjbG9ja2RvbWFpbiAqZW1pZl9jbGtkbSwgKm1wdXNzX2Nsa2RtLCAqbDNfMV9jbGtkbTsKLQlzdHJ1Y3QgY2xvY2tkb21haW4gKmR1Y2F0aV9jbGtkbSwgKmwzXzJfY2xrZG07Ci0JaW50IHJldCA9IDA7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YXRpY19kZXBfbWFwIG9tYXA0X3N0YXRpY19kZXBfbWFwW10gPSB7CisJey5mcm9tID0gIm1wdXNzX2Nsa2RtIiwgLnRvID0gImwzX2VtaWZfY2xrZG0ifSwKKwl7LmZyb20gPSAibXB1c3NfY2xrZG0iLCAudG8gPSAibDNfMV9jbGtkbSJ9LAorCXsuZnJvbSA9ICJtcHVzc19jbGtkbSIsIC50byA9ICJsM18yX2Nsa2RtIn0sCisJey5mcm9tID0gImR1Y2F0aV9jbGtkbSIsIC50byA9ICJsM18xX2Nsa2RtIn0sCisJey5mcm9tID0gImR1Y2F0aV9jbGtkbSIsIC50byA9ICJsM18yX2Nsa2RtIn0sCisJey5mcm9tICA9IE5VTEx9IC8qIFRFUk1JTkFUSU9OICovCit9OwogCi0JaWYgKG9tYXBfcmV2KCkgPT0gT01BUDQ0MzBfUkVWX0VTMV8wKSB7Ci0JCVdBUk4oMSwgIlBvd2VyIE1hbmFnZW1lbnQgbm90IHN1cHBvcnRlZCBvbiBPTUFQNDQzMCBFUzEuMFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXByX2VycigiUG93ZXIgTWFuYWdlbWVudCBmb3IgVEkgT01BUDQuXG4iKTsKLQkvKgotCSAqIE9NQVA0IGNoaXAgUE0gY3VycmVudGx5IHdvcmtzIG9ubHkgd2l0aCBjZXJ0YWluIChuZXdlcikKLQkgKiB2ZXJzaW9ucyBvZiBib290bG9hZGVycy4gVGhpcyBpcyBkdWUgdG8gbWlzc2luZyBjb2RlIGluIHRoZQotCSAqIGtlcm5lbCB0byBwcm9wZXJseSByZXNldCBhbmQgaW5pdGlhbGl6ZSBzb21lIGRldmljZXMuCi0JICogaHR0cDovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9hcm0ta2VybmVsL21zZzIxODY0MS5odG1sCi0JICovCi0JcHJfd2FybigiT01BUDQgUE06IHUtYm9vdCA+PSB2MjAxMi4wNyBpcyByZXF1aXJlZCBmb3IgZnVsbCBQTSBzdXBwb3J0XG4iKTsKLQotCXJldCA9IHB3cmRtX2Zvcl9lYWNoKHB3cmRtc19zZXR1cCwgTlVMTCk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoIkZhaWxlZCB0byBzZXR1cCBwb3dlcmRvbWFpbnNcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qCi0JICogVGhlIGR5bmFtaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIE1QVVNTIC0+IE1FTUlGIGFuZAotCSAqIE1QVVNTIC0+IEw0X1BFUi9MM18qIGFuZCBEVUNBVEkgLT4gTDNfKiBkb2Vzbid0IHdvcmsgYXMKLQkgKiBleHBlY3RlZC4gVGhlIGhhcmR3YXJlIHJlY29tbWVuZGF0aW9uIGlzIHRvIGVuYWJsZSBzdGF0aWMKLQkgKiBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIHRvIGF2b2lkIHN5c3RlbSBsb2NrIHVwcyBvciByYW5kb20gY3Jhc2hlcy4KLQkgKiBUaGUgTDQgd2FrZXVwIGRlcGVkZW5jeSBpcyBhZGRlZCB0byB3b3JrYXJvdW5kIHRoZSBPQ1Agc3luYyBoYXJkd2FyZQotCSAqIEJVRyB3aXRoIDMySyBzeW5jdGltZXIgd2hpY2ggbGVhZCB0byBpbmNvcnJlY3QgdGltZXIgdmFsdWUgcmVhZAotCSAqIGZyb20gdGhlIDMySyBjb3VudGVyLiBUaGUgQlVHIGFwcGxpZXMgZm9yIEdQVElNRVIxIGFuZCBXRFQyIHdoaWNoCi0JICogYXJlIHBhcnQgb2YgTDQgd2FrZXVwIGNsb2NrZG9tYWluLgotCSAqLwotCW1wdXNzX2Nsa2RtID0gY2xrZG1fbG9va3VwKCJtcHVzc19jbGtkbSIpOwotCWVtaWZfY2xrZG0gPSBjbGtkbV9sb29rdXAoImwzX2VtaWZfY2xrZG0iKTsKLQlsM18xX2Nsa2RtID0gY2xrZG1fbG9va3VwKCJsM18xX2Nsa2RtIik7Ci0JbDNfMl9jbGtkbSA9IGNsa2RtX2xvb2t1cCgibDNfMl9jbGtkbSIpOwotCWR1Y2F0aV9jbGtkbSA9IGNsa2RtX2xvb2t1cCgiZHVjYXRpX2Nsa2RtIik7Ci0JaWYgKCghbXB1c3NfY2xrZG0pIHx8ICghZW1pZl9jbGtkbSkgfHwgKCFsM18xX2Nsa2RtKSB8fAotCQkoIWwzXzJfY2xrZG0pIHx8ICghZHVjYXRpX2Nsa2RtKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBjbGtkbV9hZGRfd2tkZXAobXB1c3NfY2xrZG0sIGVtaWZfY2xrZG0pOwotCXJldCB8PSBjbGtkbV9hZGRfd2tkZXAobXB1c3NfY2xrZG0sIGwzXzFfY2xrZG0pOwotCXJldCB8PSBjbGtkbV9hZGRfd2tkZXAobXB1c3NfY2xrZG0sIGwzXzJfY2xrZG0pOwotCXJldCB8PSBjbGtkbV9hZGRfd2tkZXAoZHVjYXRpX2Nsa2RtLCBsM18xX2Nsa2RtKTsKLQlyZXQgfD0gY2xrZG1fYWRkX3drZGVwKGR1Y2F0aV9jbGtkbSwgbDNfMl9jbGtkbSk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoIkZhaWxlZCB0byBhZGQgTVBVU1MgLT4gTDMvRU1JRi9MNFBFUiwgRFVDQVRJIC0+IEwzIHdha2V1cCBkZXBlbmRlbmN5XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhdGljX2RlcF9tYXAgb21hcDVfZHJhN19zdGF0aWNfZGVwX21hcFtdID0geworCXsuZnJvbSA9ICJtcHVfY2xrZG0iLCAudG8gPSAiZW1pZl9jbGtkbSJ9LAorCXsuZnJvbSAgPSBOVUxMfSAvKiBURVJNSU5BVElPTiAqLworfTsKIAogLyoqCi0gKiBvbWFwNV9kcmE3X2luaXRfc3RhdGljX2RlcHMgLSBJbml0IHN0YXRpYyBjbGtkbSBkZXBlbmRlbmNpZXMgb24gT01BUDUgYW5kCi0gKgkJCQkgRFJBNwotICoKLSAqIFRoZSBkeW5hbWljIGRlcGVuZGVuY3kgYmV0d2VlbiBNUFVTUyAtPiBFTUlGIGlzIGJyb2tlbiBhbmQgaGFzCi0gKiBub3Qgd29ya2VkIGFzIGV4cGVjdGVkLiBUaGUgaGFyZHdhcmUgcmVjb21tZW5kYXRpb24gaXMgdG8KLSAqIGVuYWJsZSBzdGF0aWMgZGVwZW5kZW5jaWVzIGZvciB0aGVzZSB0byBhdm9pZCBzeXN0ZW0KLSAqIGxvY2sgdXBzIG9yIHJhbmRvbSBjcmFzaGVzLgorICogb21hcDRwbHVzX2luaXRfc3RhdGljX2RlcHMoKSAtIEluaXRpYWxpemUgYSBzdGF0aWMgZGVwZW5kZW5jeSBtYXAKKyAqIEBtYXA6CU1hcHBpbmcgb2YgY2xvY2sgZG9tYWlucwogICovCi1zdGF0aWMgaW5saW5lIGludCBvbWFwNV9kcmE3X2luaXRfc3RhdGljX2RlcHModm9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXA0cGx1c19pbml0X3N0YXRpY19kZXBzKGNvbnN0IHN0cnVjdCBzdGF0aWNfZGVwX21hcCAqbWFwKQogewotCXN0cnVjdCBjbG9ja2RvbWFpbiAqbXB1c3NfY2xrZG0sICplbWlmX2Nsa2RtOwogCWludCByZXQ7CisJc3RydWN0IGNsb2NrZG9tYWluICpmcm9tLCAqdG87CiAKLQltcHVzc19jbGtkbSA9IGNsa2RtX2xvb2t1cCgibXB1X2Nsa2RtIik7Ci0JZW1pZl9jbGtkbSA9IGNsa2RtX2xvb2t1cCgiZW1pZl9jbGtkbSIpOwotCWlmICghbXB1c3NfY2xrZG0gfHwgIWVtaWZfY2xrZG0pCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghbWFwKQorCQlyZXR1cm4gMDsKIAotCXJldCA9IGNsa2RtX2FkZF93a2RlcChtcHVzc19jbGtkbSwgZW1pZl9jbGtkbSk7Ci0JaWYgKHJldCkKLQkJcHJfZXJyKCJGYWlsZWQgdG8gYWRkIE1QVVNTIC0+IEVNSUYgd2FrZXVwIGRlcGVuZGVuY3lcbiIpOworCXdoaWxlIChtYXAtPmZyb20pIHsKKwkJZnJvbSA9IGNsa2RtX2xvb2t1cChtYXAtPmZyb20pOworCQl0byA9IGNsa2RtX2xvb2t1cChtYXAtPnRvKTsKKwkJaWYgKCFmcm9tIHx8ICF0bykgeworCQkJcHJfZXJyKCJGYWlsZWQgbG9va3VwICVzIG9yICVzIGZvciB3YWtldXAgZGVwZW5kZW5jeVxuIiwKKwkJCSAgICAgICBtYXAtPmZyb20sIG1hcC0+dG8pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcmV0ID0gY2xrZG1fYWRkX3drZGVwKGZyb20sIHRvKTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWRkICVzIC0+ICVzIHdha2V1cCBkZXBlbmRlbmN5KCVkKVxuIiwKKwkJCSAgICAgICBtYXAtPmZyb20sIG1hcC0+dG8sIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CiAKLQlyZXR1cm4gcmV0OworCQltYXArKzsKKwl9OworCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjcyLDYgKzI0OSwxNSBAQAogCiAJcHJfaW5mbygiUG93ZXIgTWFuYWdlbWVudCBmb3IgVEkgT01BUDQrIGRldmljZXMuXG4iKTsKIAorCS8qCisJICogT01BUDQgY2hpcCBQTSBjdXJyZW50bHkgd29ya3Mgb25seSB3aXRoIGNlcnRhaW4gKG5ld2VyKQorCSAqIHZlcnNpb25zIG9mIGJvb3Rsb2FkZXJzLiBUaGlzIGlzIGR1ZSB0byBtaXNzaW5nIGNvZGUgaW4gdGhlCisJICoga2VybmVsIHRvIHByb3Blcmx5IHJlc2V0IGFuZCBpbml0aWFsaXplIHNvbWUgZGV2aWNlcy4KKwkgKiBodHRwOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2FybS1rZXJuZWwvbXNnMjE4NjQxLmh0bWwKKwkgKi8KKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCXByX3dhcm4oIk9NQVA0IFBNOiB1LWJvb3QgPj0gdjIwMTIuMDcgaXMgcmVxdWlyZWQgZm9yIGZ1bGwgUE0gc3VwcG9ydFxuIik7CisKIAlyZXQgPSBwd3JkbV9mb3JfZWFjaChwd3JkbXNfc2V0dXAsIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0dXAgcG93ZXJkb21haW5zLlxuIik7CkBAIC0yNzksOSArMjY1LDkgQEAKIAl9CiAKIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCi0JCXJldCA9IG9tYXA0X2luaXRfc3RhdGljX2RlcHMoKTsKKwkJcmV0ID0gb21hcDRwbHVzX2luaXRfc3RhdGljX2RlcHMob21hcDRfc3RhdGljX2RlcF9tYXApOwogCWVsc2UgaWYgKHNvY19pc19vbWFwNTR4eCgpIHx8IHNvY19pc19kcmE3eHgoKSkKLQkJcmV0ID0gb21hcDVfZHJhN19pbml0X3N0YXRpY19kZXBzKCk7CisJCXJldCA9IG9tYXA0cGx1c19pbml0X3N0YXRpY19kZXBzKG9tYXA1X2RyYTdfc3RhdGljX2RlcF9tYXApOwogCiAJaWYgKHJldCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byBpbml0aWFsaXNlIHN0YXRpYyBkZXBlbmRlbmNpZXMuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCmluZGV4IDQ4NDgwZDUuLjc3NzUyZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaApAQCAtMjksNiArMjksNyBAQAogICogUFJNX0hBU19WT0xUQUdFOiBoYXMgdm9sdGFnZSBkb21haW5zCiAgKi8KICNkZWZpbmUgUFJNX0hBU19JT19XQUtFVVAJKDEgPDwgMCkKKyNkZWZpbmUgUFJNX0hBU19WT0xUQUdFCQkoMSA8PCAxKQogCiAvKgogICogTUFYX01PRFVMRV9TT0ZUUkVTRVRfV0FJVDogTWF4aW11bSBtaWNyb3NlY29uZHMgdG8gd2FpdCBmb3IgT01BUApAQCAtMTI3LDYgKzEyOCw4IEBACiAgKiBAd2FzX2FueV9jb250ZXh0X2xvc3Rfb2xkOiBwdHIgdG8gdGhlIFNvQyBQUk0gY29udGV4dCBsb3NzIHRlc3QgZm4KICAqIEBjbGVhcl9jb250ZXh0X2xvc3NfZmxhZ3Nfb2xkOiBwdHIgdG8gdGhlIFNvQyBQUk0gY29udGV4dCBsb3NzIGZsYWcgY2xlYXIgZm4KICAqIEBsYXRlX2luaXQ6IHB0ciB0byB0aGUgbGF0ZSBpbml0IGZ1bmN0aW9uCisgKiBAYXNzZXJ0X2hhcmRyZXNldDogcHRyIHRvIHRoZSBTb0MgUFJNIGhhcmRyZXNldCBhc3NlcnQgaW1wbAorICogQGRlYXNzZXJ0X2hhcmRyZXNldDogcHRyIHRvIHRoZSBTb0MgUFJNIGhhcmRyZXNldCBkZWFzc2VydCBpbXBsCiAgKgogICogWFhYIEB3YXNfYW55X2NvbnRleHRfbG9zdF9vbGQgYW5kIEBjbGVhcl9jb250ZXh0X2xvc3NfZmxhZ3Nfb2xkIGFyZQogICogZGVwcmVjYXRlZC4KQEAgLTEzNiwxNCArMTM5LDI3IEBACiAJYm9vbCAoKndhc19hbnlfY29udGV4dF9sb3N0X29sZCkodTggcGFydCwgczE2IGluc3QsIHUxNiBpZHgpOwogCXZvaWQgKCpjbGVhcl9jb250ZXh0X2xvc3NfZmxhZ3Nfb2xkKSh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGlkeCk7CiAJaW50ICgqbGF0ZV9pbml0KSh2b2lkKTsKKwlpbnQgKCphc3NlcnRfaGFyZHJlc2V0KSh1OCBzaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsIHUxNiBvZmZzZXQpOworCWludCAoKmRlYXNzZXJ0X2hhcmRyZXNldCkodTggc2hpZnQsIHU4IHN0X3NoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwKKwkJCQkgIHUxNiBvZmZzZXQsIHUxNiBzdF9vZmZzZXQpOworCWludCAoKmlzX2hhcmRyZXNldF9hc3NlcnRlZCkodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLAorCQkJCSAgICAgdTE2IG9mZnNldCk7CisJdm9pZCAoKnJlc2V0X3N5c3RlbSkodm9pZCk7CiB9OwogCiBleHRlcm4gaW50IHBybV9yZWdpc3RlcihzdHJ1Y3QgcHJtX2xsX2RhdGEgKnBsZCk7CiBleHRlcm4gaW50IHBybV91bnJlZ2lzdGVyKHN0cnVjdCBwcm1fbGxfZGF0YSAqcGxkKTsKIAoraW50IG9tYXBfcHJtX2Fzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLCB1MTYgb2Zmc2V0KTsKK2ludCBvbWFwX3BybV9kZWFzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHN0X3NoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwKKwkJCQl1MTYgb2Zmc2V0LCB1MTYgc3Rfb2Zmc2V0KTsKK2ludCBvbWFwX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLCB1MTYgb2Zmc2V0KTsKIGV4dGVybiB1MzIgcHJtX3JlYWRfcmVzZXRfc291cmNlcyh2b2lkKTsKIGV4dGVybiBib29sIHBybV93YXNfYW55X2NvbnRleHRfbG9zdF9vbGQodTggcGFydCwgczE2IGluc3QsIHUxNiBpZHgpOwogZXh0ZXJuIHZvaWQgcHJtX2NsZWFyX2NvbnRleHRfbG9zc19mbGFnc19vbGQodTggcGFydCwgczE2IGluc3QsIHUxNiBpZHgpOwordm9pZCBvbWFwX3BybV9yZXNldF9zeXN0ZW0odm9pZCk7CisKK3ZvaWQgb21hcF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5jCmluZGV4IDg2OTU4MDUuLmFmMGYxNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICAqIFNldCB0aGUgRFBMTCByZXNldCBiaXQsIHdoaWNoIHNob3VsZCByZWJvb3QgdGhlIFNvQy4gIFRoaXMgaXMgdGhlCiAgKiByZWNvbW1lbmRlZCB3YXkgdG8gcmVzdGFydCB0aGUgU29DLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXAyeHh4X3BybV9kcGxsX3Jlc2V0KHZvaWQpCitzdGF0aWMgdm9pZCBvbWFwMnh4eF9wcm1fZHBsbF9yZXNldCh2b2lkKQogewogCW9tYXAyX3BybV9zZXRfbW9kX3JlZ19iaXRzKE9NQVBfUlNUX0RQTEwzX01BU0ssIFdLVVBfTU9ELAogCQkJCSAgIE9NQVAyX1JNX1JTVENUUkwpOwpAQCAtMjEyLDYgKzIxMiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHBybV9sbF9kYXRhIG9tYXAyeHh4X3BybV9sbF9kYXRhID0gewogCS5yZWFkX3Jlc2V0X3NvdXJjZXMgPSAmb21hcDJ4eHhfcHJtX3JlYWRfcmVzZXRfc291cmNlcywKKwkuYXNzZXJ0X2hhcmRyZXNldCA9ICZvbWFwMl9wcm1fYXNzZXJ0X2hhcmRyZXNldCwKKwkuZGVhc3NlcnRfaGFyZHJlc2V0ID0gJm9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQsCisJLmlzX2hhcmRyZXNldF9hc3NlcnRlZCA9ICZvbWFwMl9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkLAorCS5yZXNldF9zeXN0ZW0gPSAmb21hcDJ4eHhfcHJtX2RwbGxfcmVzZXQsCiB9OwogCiBpbnQgX19pbml0IG9tYXAyeHh4X3BybV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5oCmluZGV4IGQ3MzQxNDEuLjFkNTE2NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5oCkBAIC0xMjQsNyArMTI0LDYgQEAKIGV4dGVybiBpbnQgb21hcDJ4eHhfY2xrZG1fc2xlZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CiBleHRlcm4gaW50IG9tYXAyeHh4X2Nsa2RtX3dha2V1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKIAotZXh0ZXJuIHZvaWQgb21hcDJ4eHhfcHJtX2RwbGxfcmVzZXQodm9pZCk7CiB2b2lkIG9tYXAyeHh4X3BybV9jbGVhcl9tb2RfaXJxcyhzMTYgbW9kdWxlLCB1OCByZWdzLCB1MzIgd2tzdF9tYXNrKTsKIAogZXh0ZXJuIGludCBfX2luaXQgb21hcDJ4eHhfcHJtX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguYwppbmRleCBjMTNiNGUyLi5jYzMzNDFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmMKQEAgLTI0LDE0ICsyNCwxNiBAQAogLyoqCiAgKiBvbWFwMl9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkIC0gcmVhZCB0aGUgSFcgcmVzZXQgbGluZSBzdGF0ZSBvZgogICogc3VibW9kdWxlcyBjb250YWluZWQgaW4gdGhlIGh3bW9kIG1vZHVsZQotICogQHBybV9tb2Q6IFBSTSBzdWJtb2R1bGUgYmFzZSAoZS5nLiBDT1JFX01PRCkKICAqIEBzaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUgdG8gY2hlY2sKKyAqIEBwYXJ0OiBQUk0gcGFydGl0aW9uLCBpZ25vcmVkIGZvciBPTUFQMgorICogQHBybV9tb2Q6IFBSTSBzdWJtb2R1bGUgYmFzZSAoZS5nLiBDT1JFX01PRCkKKyAqIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCwgaWdub3JlZCBmb3IgT01BUDIKICAqCiAgKiBSZXR1cm5zIDEgaWYgdGhlIChzdWIpbW9kdWxlIGhhcmRyZXNldCBsaW5lIGlzIGN1cnJlbnRseSBhc3NlcnRlZCwKICAqIDAgaWYgdGhlIChzdWIpbW9kdWxlIGhhcmRyZXNldCBsaW5lIGlzIG5vdCBjdXJyZW50bHkgYXNzZXJ0ZWQsIG9yCiAgKiAtRUlOVkFMIGlmIGNhbGxlZCB3aGlsZSBydW5uaW5nIG9uIGEgbm9uLU9NQVAyLzMgY2hpcC4KICAqLwotaW50IG9tYXAyX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoczE2IHBybV9tb2QsIHU4IHNoaWZ0KQoraW50IG9tYXAyX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLCB1MTYgb2Zmc2V0KQogewogCXJldHVybiBvbWFwMl9wcm1fcmVhZF9tb2RfYml0c19zaGlmdChwcm1fbW9kLCBPTUFQMl9STV9SU1RDVFJMLAogCQkJCSAgICAgICAoMSA8PCBzaGlmdCkpOwpAQCAtMzksOCArNDEsMTAgQEAKIAogLyoqCiAgKiBvbWFwMl9wcm1fYXNzZXJ0X2hhcmRyZXNldCAtIGFzc2VydCB0aGUgSFcgcmVzZXQgbGluZSBvZiBhIHN1Ym1vZHVsZQotICogQHBybV9tb2Q6IFBSTSBzdWJtb2R1bGUgYmFzZSAoZS5nLiBDT1JFX01PRCkKICAqIEBzaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUgdG8gYXNzZXJ0CisgKiBAcGFydDogUFJNIHBhcnRpdGlvbiwgaWdub3JlZCBmb3IgT01BUDIKKyAqIEBwcm1fbW9kOiBQUk0gc3VibW9kdWxlIGJhc2UgKGUuZy4gQ09SRV9NT0QpCisgKiBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQsIGlnbm9yZWQgZm9yIE9NQVAyCiAgKgogICogU29tZSBJUHMgbGlrZSBkc3Agb3IgaXZhIGNvbnRhaW4gcHJvY2Vzc29ycyB0aGF0IHJlcXVpcmUgYW4gSFcKICAqIHJlc2V0IGxpbmUgdG8gYmUgYXNzZXJ0ZWQgLyBkZWFzc2VydGVkIGluIG9yZGVyIHRvIGZ1bGx5IGVuYWJsZSB0aGUKQEAgLTQ5LDcgKzUzLDcgQEAKICAqIHBsYWNlIHRoZSBzdWJtb2R1bGUgaW50byByZXNldC4gIFJldHVybnMgMCB1cG9uIHN1Y2Nlc3Mgb3IgLUVJTlZBTAogICogdXBvbiBhbiBhcmd1bWVudCBlcnJvci4KICAqLwotaW50IG9tYXAyX3BybV9hc3NlcnRfaGFyZHJlc2V0KHMxNiBwcm1fbW9kLCB1OCBzaGlmdCkKK2ludCBvbWFwMl9wcm1fYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsIHUxNiBvZmZzZXQpCiB7CiAJdTMyIG1hc2s7CiAKQEAgLTY0LDYgKzY4LDEwIEBACiAgKiBAcHJtX21vZDogUFJNIHN1Ym1vZHVsZSBiYXNlIChlLmcuIENPUkVfTU9EKQogICogQHJzdF9zaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUgdG8gZGVhc3NlcnQKICAqIEBzdF9zaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGZvciB0aGUgc3RhdHVzIG9mIHRoZSBkZWFzc2VydGVkIHN1Ym1vZHVsZQorICogQHBhcnQ6IFBSTSBwYXJ0aXRpb24sIG5vdCB1c2VkIGZvciBPTUFQMgorICogQHBybV9tb2Q6IFBSTSBzdWJtb2R1bGUgYmFzZSAoZS5nLiBDT1JFX01PRCkKKyAqIEByc3Rfb2Zmc2V0OiByZXNldCByZWdpc3RlciBvZmZzZXQsIG5vdCB1c2VkIGZvciBPTUFQMgorICogQHN0X29mZnNldDogcmVzZXQgc3RhdHVzIHJlZ2lzdGVyIG9mZnNldCwgbm90IHVzZWQgZm9yIE9NQVAyCiAgKgogICogU29tZSBJUHMgbGlrZSBkc3Agb3IgaXZhIGNvbnRhaW4gcHJvY2Vzc29ycyB0aGF0IHJlcXVpcmUgYW4gSFcKICAqIHJlc2V0IGxpbmUgdG8gYmUgYXNzZXJ0ZWQgLyBkZWFzc2VydGVkIGluIG9yZGVyIHRvIGZ1bGx5IGVuYWJsZSB0aGUKQEAgLTc0LDcgKzgyLDggQEAKICAqIC1FSU5WQUwgdXBvbiBhbiBhcmd1bWVudCBlcnJvciwgLUVFWElTVCBpZiB0aGUgc3VibW9kdWxlIHdhcyBhbHJlYWR5IG91dAogICogb2YgcmVzZXQsIG9yIC1FQlVTWSBpZiB0aGUgc3VibW9kdWxlIGRpZCBub3QgZXhpdCByZXNldCBwcm9tcHRseS4KICAqLwotaW50IG9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQoczE2IHBybV9tb2QsIHU4IHJzdF9zaGlmdCwgdTggc3Rfc2hpZnQpCitpbnQgb21hcDJfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCh1OCByc3Rfc2hpZnQsIHU4IHN0X3NoaWZ0LCB1OCBwYXJ0LAorCQkJCSBzMTYgcHJtX21vZCwgdTE2IHJzdF9vZmZzZXQsIHUxNiBzdF9vZmZzZXQpCiB7CiAJdTMyIHJzdCwgc3Q7CiAJaW50IGM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguaAppbmRleCAxYTNhOTYzLi5mNTdlMjliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmgKQEAgLTEwMCw5ICsxMDAsMTIgQEAKIH0KIAogLyogVGhlc2Ugb21hcDJfIFBSTSBmdW5jdGlvbnMgYXBwbHkgdG8gYm90aCBPTUFQMiBhbmQgMyAqLwotZXh0ZXJuIGludCBvbWFwMl9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHMxNiBwcm1fbW9kLCB1OCBzaGlmdCk7Ci1leHRlcm4gaW50IG9tYXAyX3BybV9hc3NlcnRfaGFyZHJlc2V0KHMxNiBwcm1fbW9kLCB1OCBzaGlmdCk7Ci1leHRlcm4gaW50IG9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQoczE2IHBybV9tb2QsIHU4IHJzdF9zaGlmdCwgdTggc3Rfc2hpZnQpOworaW50IG9tYXAyX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLCB1MTYgb2Zmc2V0KTsKK2ludCBvbWFwMl9wcm1fYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsCisJCQkgICAgICAgdTE2IG9mZnNldCk7CitpbnQgb21hcDJfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCh1OCByc3Rfc2hpZnQsIHU4IHN0X3NoaWZ0LCB1OCBwYXJ0LAorCQkJCSBzMTYgcHJtX21vZCwgdTE2IHJlc2V0X29mZnNldCwKKwkJCQkgdTE2IHN0X29mZnNldCk7CiAKIGV4dGVybiBpbnQgb21hcDJfcHdyZG1fc2V0X25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpOwogZXh0ZXJuIGludCBvbWFwMl9wd3JkbV9yZWFkX25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTMzeHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMzN4eC5jCmluZGV4IDYyNzA5Y2QuLjAyZjYyODYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTMzeHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTMzeHguYwpAQCAtMjMsMjAgKzIzLDI0IEBACiAjaW5jbHVkZSAicHJtMzN4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTMzeHguaCIKIAorI2RlZmluZSBBTTMzWFhfUFJNX1JTVENUUkxfT0ZGU0VUCQkweDAwMDAKKworI2RlZmluZSBBTTMzWFhfUlNUX0dMT0JBTF9XQVJNX1NXX01BU0sJCSgxIDw8IDApCisKIC8qIFJlYWQgYSByZWdpc3RlciBpbiBhIFBSTSBpbnN0YW5jZSAqLwotdTMyIGFtMzN4eF9wcm1fcmVhZF9yZWcoczE2IGluc3QsIHUxNiBpZHgpCitzdGF0aWMgdTMyIGFtMzN4eF9wcm1fcmVhZF9yZWcoczE2IGluc3QsIHUxNiBpZHgpCiB7CiAJcmV0dXJuIHJlYWRsX3JlbGF4ZWQocHJtX2Jhc2UgKyBpbnN0ICsgaWR4KTsKIH0KIAogLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIGEgUFJNIGluc3RhbmNlICovCi12b2lkIGFtMzN4eF9wcm1fd3JpdGVfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgaWR4KQorc3RhdGljIHZvaWQgYW0zM3h4X3BybV93cml0ZV9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiBpZHgpCiB7CiAJd3JpdGVsX3JlbGF4ZWQodmFsLCBwcm1fYmFzZSArIGluc3QgKyBpZHgpOwogfQogCiAvKiBSZWFkLW1vZGlmeS13cml0ZSBhIHJlZ2lzdGVyIGluIFBSTS4gQ2FsbGVyIG11c3QgbG9jayAqLwotdTMyIGFtMzN4eF9wcm1fcm13X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IGluc3QsIHMxNiBpZHgpCitzdGF0aWMgdTMyIGFtMzN4eF9wcm1fcm13X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IGluc3QsIHMxNiBpZHgpCiB7CiAJdTMyIHY7CiAKQEAgLTUyLDYgKzU2LDcgQEAKICAqIGFtMzN4eF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkIC0gcmVhZCB0aGUgSFcgcmVzZXQgbGluZSBzdGF0ZSBvZgogICogc3VibW9kdWxlcyBjb250YWluZWQgaW4gdGhlIGh3bW9kIG1vZHVsZQogICogQHNoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZSB0byBjaGVjaworICogQHBhcnQ6IFBSTSBwYXJ0aXRpb24sIGlnbm9yZWQgZm9yIEFNMzN4eAogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQogICogQHJzdGN0cmxfb2ZmczogUk1fUlNUQ1RSTCByZWdpc3RlciBhZGRyZXNzIG9mZnNldCBmb3IgdGhpcyBtb2R1bGUKICAqCkBAIC01OSw3ICs2NCw4IEBACiAgKiAwIGlmIHRoZSAoc3ViKW1vZHVsZSBoYXJkcmVzZXQgbGluZSBpcyBub3QgY3VycmVudGx5IGFzc2VydGVkLCBvcgogICogLUVJTlZBTCB1cG9uIHBhcmFtZXRlciBlcnJvci4KICAqLwotaW50IGFtMzN4eF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHU4IHNoaWZ0LCBzMTYgaW5zdCwgdTE2IHJzdGN0cmxfb2ZmcykKK3N0YXRpYyBpbnQgYW0zM3h4X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBpbnN0LAorCQkJCQkgICAgdTE2IHJzdGN0cmxfb2ZmcykKIHsKIAl1MzIgdjsKIApAQCAtNzMsNiArNzksNyBAQAogLyoqCiAgKiBhbTMzeHhfcHJtX2Fzc2VydF9oYXJkcmVzZXQgLSBhc3NlcnQgdGhlIEhXIHJlc2V0IGxpbmUgb2YgYSBzdWJtb2R1bGUKICAqIEBzaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUgdG8gYXNzZXJ0CisgKiBAcGFydDogQ00gcGFydGl0aW9uLCBpZ25vcmVkIGZvciBBTTMzeHgKICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKICAqIEByc3RjdHJsX3JlZzogUk1fUlNUQ1RSTCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzIG1vZHVsZQogICoKQEAgLTgzLDcgKzkwLDggQEAKICAqIHBsYWNlIHRoZSBzdWJtb2R1bGUgaW50byByZXNldC4gIFJldHVybnMgMCB1cG9uIHN1Y2Nlc3Mgb3IgLUVJTlZBTAogICogdXBvbiBhbiBhcmd1bWVudCBlcnJvci4KICAqLwotaW50IGFtMzN4eF9wcm1fYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgczE2IGluc3QsIHUxNiByc3RjdHJsX29mZnMpCitzdGF0aWMgaW50IGFtMzN4eF9wcm1fYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggcGFydCwgczE2IGluc3QsCisJCQkJICAgICAgIHUxNiByc3RjdHJsX29mZnMpCiB7CiAJdTMyIG1hc2sgPSAxIDw8IHNoaWZ0OwogCkBAIC05Niw2ICsxMDQsOCBAQAogICogYW0zM3h4X3BybV9kZWFzc2VydF9oYXJkcmVzZXQgLSBkZWFzc2VydCBhIHN1Ym1vZHVsZSBoYXJkcmVzZXQgbGluZSBhbmQKICAqIHdhaXQKICAqIEBzaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUgdG8gZGVhc3NlcnQKKyAqIEBzdF9zaGlmdDogcmVzZXQgc3RhdHVzIHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lCisgKiBAcGFydDogUFJNIHBhcnRpdGlvbiwgbm90IHVzZWQgZm9yIEFNMzN4eAogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQogICogQHJzdGN0cmxfcmVnOiBSTV9SU1RDVFJMIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXMgbW9kdWxlCiAgKiBAcnN0c3RfcmVnOiBSTV9SU1RTVCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzIG1vZHVsZQpAQCAtMTA5LDE0ICsxMTksMTUgQEAKICAqIC1FSU5WQUwgdXBvbiBhbiBhcmd1bWVudCBlcnJvciwgLUVFWElTVCBpZiB0aGUgc3VibW9kdWxlIHdhcyBhbHJlYWR5IG91dAogICogb2YgcmVzZXQsIG9yIC1FQlVTWSBpZiB0aGUgc3VibW9kdWxlIGRpZCBub3QgZXhpdCByZXNldCBwcm9tcHRseS4KICAqLwotaW50IGFtMzN4eF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBzdF9zaGlmdCwgczE2IGluc3QsCi0JCXUxNiByc3RjdHJsX29mZnMsIHUxNiByc3RzdF9vZmZzKQorc3RhdGljIGludCBhbTMzeHhfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggc3Rfc2hpZnQsIHU4IHBhcnQsCisJCQkJCSBzMTYgaW5zdCwgdTE2IHJzdGN0cmxfb2ZmcywKKwkJCQkJIHUxNiByc3RzdF9vZmZzKQogewogCWludCBjOwogCXUzMiBtYXNrID0gMSA8PCBzdF9zaGlmdDsKIAogCS8qIENoZWNrIHRoZSBjdXJyZW50IHN0YXR1cyB0byBhdm9pZCAgZGUtYXNzZXJ0aW5nIHRoZSBsaW5lIHR3aWNlICovCi0JaWYgKGFtMzN4eF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHNoaWZ0LCBpbnN0LCByc3RjdHJsX29mZnMpID09IDApCisJaWYgKGFtMzN4eF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHNoaWZ0LCAwLCBpbnN0LCByc3RjdHJsX29mZnMpID09IDApCiAJCXJldHVybiAtRUVYSVNUOwogCiAJLyogQ2xlYXIgdGhlIHJlc2V0IHN0YXR1cyBieSB3cml0aW5nIDEgdG8gdGhlIHN0YXR1cyBiaXQgKi8KQEAgLTEyOCw3ICsxMzksNyBAQAogCWFtMzN4eF9wcm1fcm13X3JlZ19iaXRzKG1hc2ssIDAsIGluc3QsIHJzdGN0cmxfb2Zmcyk7CiAKIAkvKiB3YWl0IHRoZSBzdGF0dXMgdG8gYmUgc2V0ICovCi0Jb21hcF90ZXN0X3RpbWVvdXQoYW0zM3h4X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoc3Rfc2hpZnQsIGluc3QsCisJb21hcF90ZXN0X3RpbWVvdXQoYW0zM3h4X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoc3Rfc2hpZnQsIDAsIGluc3QsCiAJCQkJCQkJICAgcnN0c3Rfb2ZmcyksCiAJCQkgIE1BWF9NT0RVTEVfSEFSRFJFU0VUX1dBSVQsIGMpOwogCkBAIC0zMjUsNiArMzM2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogYW0zM3h4X3BybV9nbG9iYWxfd2FybV9zd19yZXNldCAtIHJlYm9vdCB0aGUgZGV2aWNlIHZpYSB3YXJtIHJlc2V0CisgKgorICogSW1tZWRpYXRlbHkgcmVib290cyB0aGUgZGV2aWNlIHRocm91Z2ggd2FybSByZXNldC4KKyAqLworc3RhdGljIHZvaWQgYW0zM3h4X3BybV9nbG9iYWxfd2FybV9zd19yZXNldCh2b2lkKQoreworCWFtMzN4eF9wcm1fcm13X3JlZ19iaXRzKEFNMzNYWF9SU1RfR0xPQkFMX1dBUk1fU1dfTUFTSywKKwkJCQlBTTMzWFhfUlNUX0dMT0JBTF9XQVJNX1NXX01BU0ssCisJCQkJQU0zM1hYX1BSTV9ERVZJQ0VfTU9ELAorCQkJCUFNMzNYWF9QUk1fUlNUQ1RSTF9PRkZTRVQpOworCisJLyogT0NQIGJhcnJpZXIgKi8KKwkodm9pZClhbTMzeHhfcHJtX3JlYWRfcmVnKEFNMzNYWF9QUk1fREVWSUNFX01PRCwKKwkJCQkgIEFNMzNYWF9QUk1fUlNUQ1RSTF9PRkZTRVQpOworfQorCiBzdHJ1Y3QgcHdyZG1fb3BzIGFtMzN4eF9wd3JkbV9vcGVyYXRpb25zID0gewogCS5wd3JkbV9zZXRfbmV4dF9wd3JzdAkJPSBhbTMzeHhfcHdyZG1fc2V0X25leHRfcHdyc3QsCiAJLnB3cmRtX3JlYWRfbmV4dF9wd3JzdAkJPSBhbTMzeHhfcHdyZG1fcmVhZF9uZXh0X3B3cnN0LApAQCAtMzQyLDMgKzM3MCwyMSBAQAogCS5wd3JkbV93YWl0X3RyYW5zaXRpb24JCT0gYW0zM3h4X3B3cmRtX3dhaXRfdHJhbnNpdGlvbiwKIAkucHdyZG1faGFzX3ZvbHRkbQkJPSBhbTMzeHhfY2hlY2tfdmN2cCwKIH07CisKK3N0YXRpYyBzdHJ1Y3QgcHJtX2xsX2RhdGEgYW0zM3h4X3BybV9sbF9kYXRhID0geworCS5hc3NlcnRfaGFyZHJlc2V0CQk9IGFtMzN4eF9wcm1fYXNzZXJ0X2hhcmRyZXNldCwKKwkuZGVhc3NlcnRfaGFyZHJlc2V0CQk9IGFtMzN4eF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0LAorCS5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQJCT0gYW0zM3h4X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQsCisJLnJlc2V0X3N5c3RlbQkJCT0gYW0zM3h4X3BybV9nbG9iYWxfd2FybV9zd19yZXNldCwKK307CisKK2ludCBfX2luaXQgYW0zM3h4X3BybV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBybV9yZWdpc3RlcigmYW0zM3h4X3BybV9sbF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFtMzN4eF9wcm1fZXhpdCh2b2lkKQoreworCXBybV91bnJlZ2lzdGVyKCZhbTMzeHhfcHJtX2xsX2RhdGEpOworfQorX19leGl0Y2FsbChhbTMzeHhfcHJtX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTMzeHguaAppbmRleCA5Yjk5MThkLi45OGFjNDFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTMzeHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTMzeHguaApAQCAtMTE4LDE0ICsxMTgsNyBAQAogI2RlZmluZSBBTTMzWFhfUE1fQ0VGVVNFX1BXUlNUU1QJCUFNMzNYWF9QUk1fUkVHQUREUihBTTMzWFhfUFJNX0NFRlVTRV9NT0QsIDB4MDAwNCkKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi1leHRlcm4gdTMyIGFtMzN4eF9wcm1fcmVhZF9yZWcoczE2IGluc3QsIHUxNiBpZHgpOwotZXh0ZXJuIHZvaWQgYW0zM3h4X3BybV93cml0ZV9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiBpZHgpOwotZXh0ZXJuIHUzMiBhbTMzeHhfcHJtX3Jtd19yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgaWR4KTsKLWV4dGVybiB2b2lkIGFtMzN4eF9wcm1fZ2xvYmFsX3dhcm1fc3dfcmVzZXQodm9pZCk7Ci1leHRlcm4gaW50IGFtMzN4eF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHU4IHNoaWZ0LCBzMTYgaW5zdCwKLQkJdTE2IHJzdGN0cmxfb2Zmcyk7Ci1leHRlcm4gaW50IGFtMzN4eF9wcm1fYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgczE2IGluc3QsIHUxNiByc3RjdHJsX29mZnMpOwotZXh0ZXJuIGludCBhbTMzeHhfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggc3Rfc2hpZnQsIHMxNiBpbnN0LAotCQl1MTYgcnN0Y3RybF9vZmZzLCB1MTYgcnN0c3Rfb2Zmcyk7CitpbnQgYW0zM3h4X3BybV9pbml0KHZvaWQpOworCiAjZW5kaWYgLyogQVNTRU1CTEVSICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmMKaW5kZXggZmYwOGRhMy4uYzVlMDBjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmMKQEAgLTMwLDYgKzMwLDExIEBACiAjaW5jbHVkZSAiY20zeHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X3BybV9yZWFkX3BlbmRpbmdfaXJxcyh1bnNpZ25lZCBsb25nICpldmVudHMpOworc3RhdGljIHZvaWQgb21hcDN4eHhfcHJtX29jcF9iYXJyaWVyKHZvaWQpOworc3RhdGljIHZvaWQgb21hcDN4eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuKHUzMiAqc2F2ZWRfbWFzayk7CitzdGF0aWMgdm9pZCBvbWFwM3h4eF9wcm1fcmVzdG9yZV9pcnFlbih1MzIgKnNhdmVkX21hc2spOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfcHJjbV9pcnEgb21hcDNfcHJjbV9pcnFzW10gPSB7CiAJT01BUF9QUkNNX0lSUSgid2t1cCIsCTAsCTApLAogCU9NQVBfUFJDTV9JUlEoImlvIiwJOSwJMSksCkBAIC0xMzEsNyArMTM2LDcgQEAKICAqIHJlY29tbWVuZGVkIHdheSB0byByZXN0YXJ0IHRoZSBTb0MsIGNvbnNpZGVyaW5nIEVycmF0YSBpNTIwLiAgTm8KICAqIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwM3h4eF9wcm1fZHBsbDNfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X3BybV9kcGxsM19yZXNldCh2b2lkKQogewogCW9tYXAyX3BybV9zZXRfbW9kX3JlZ19iaXRzKE9NQVBfUlNUX0RQTEwzX01BU0ssIE9NQVAzNDMwX0dSX01PRCwKIAkJCQkgICBPTUFQMl9STV9SU1RDVFJMKTsKQEAgLTE0Nyw3ICsxNTIsNyBAQAogICogTVBVIElSUXMsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGludG8gdGhlIHUzMiBwb2ludGVkIHRvIGJ5IEBldmVudHMuCiAgKiBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDN4eHhfcHJtX3JlYWRfcGVuZGluZ19pcnFzKHVuc2lnbmVkIGxvbmcgKmV2ZW50cykKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X3BybV9yZWFkX3BlbmRpbmdfaXJxcyh1bnNpZ25lZCBsb25nICpldmVudHMpCiB7CiAJdTMyIG1hc2ssIHN0OwogCkBAIC0xNjYsNyArMTcxLDcgQEAKICAqIGJsb2NrLCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYWZ0ZXIgYWNrbm93bGVkZ2luZyBvciBjbGVhcmluZyBJUlEKICAqIGJpdHMuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDN4eHhfcHJtX29jcF9iYXJyaWVyKHZvaWQpCitzdGF0aWMgdm9pZCBvbWFwM3h4eF9wcm1fb2NwX2JhcnJpZXIodm9pZCkKIHsKIAlvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKE9DUF9NT0QsIE9NQVAzX1BSTV9SRVZJU0lPTl9PRkZTRVQpOwogfQpAQCAtMTgyLDcgKzE4Nyw3IEBACiAgKiByZXR1cm5pbmc7IG90aGVyd2lzZSwgc3B1cmlvdXMgaW50ZXJydXB0cyBtaWdodCBvY2N1ci4gIE5vIHJldHVybgogICogdmFsdWUuCiAgKi8KLXZvaWQgb21hcDN4eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuKHUzMiAqc2F2ZWRfbWFzaykKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X3BybV9zYXZlX2FuZF9jbGVhcl9pcnFlbih1MzIgKnNhdmVkX21hc2spCiB7CiAJc2F2ZWRfbWFza1swXSA9IG9tYXAyX3BybV9yZWFkX21vZF9yZWcoT0NQX01PRCwKIAkJCQkJICAgICAgIE9NQVAzX1BSTV9JUlFFTkFCTEVfTVBVX09GRlNFVCk7CkBAIC0yMDIsNyArMjA3LDcgQEAKICAqIGJhcnJpZXIgc2hvdWxkIGJlIG5lZWRlZCBoZXJlOyBhbnkgcGVuZGluZyBQUk0gaW50ZXJydXB0cyB3aWxsIGZpcmUKICAqIG9uY2UgdGhlIHdyaXRlcyByZWFjaCB0aGUgUFJNLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXAzeHh4X3BybV9yZXN0b3JlX2lycWVuKHUzMiAqc2F2ZWRfbWFzaykKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X3BybV9yZXN0b3JlX2lycWVuKHUzMiAqc2F2ZWRfbWFzaykKIHsKIAlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyhzYXZlZF9tYXNrWzBdLCBPQ1BfTU9ELAogCQkJCU9NQVAzX1BSTV9JUlFFTkFCTEVfTVBVX09GRlNFVCk7CkBAIC0zNzUsNyArMzgwLDcgQEAKICAqIFRoZSBTVF9JT19DSEFJTiBiaXQgZG9lcyBub3QgZXhpc3QgaW4gMzQzMCBiZWZvcmUgZXMzLjEuIFRoZSBvbmx5CiAgKiB0aGluZyB3ZSBjYW4gZG8gaXMgdG9nZ2xlIEVOX0lPIGJpdCBmb3IgZWFybGllciBvbWFwcy4KICAqLwotdm9pZCBvbWFwMzQzMF9wcmVfZXMzXzFfcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCkKK3N0YXRpYyB2b2lkIG9tYXAzNDMwX3ByZV9lczNfMV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKQogewogCW9tYXAyX3BybV9jbGVhcl9tb2RfcmVnX2JpdHMoT01BUDM0MzBfRU5fSU9fTUFTSywgV0tVUF9NT0QsCiAJCQkJICAgICBQTV9XS0VOKTsKQEAgLTM5Myw3ICszOTgsNyBAQAogICogZGVhc3NlcnRpbmcgV1VDTEtJTiBhbmQgY2xlYXJpbmcgdGhlIFNUX0lPX0NIQUlOIFdLU1QgYml0LiAgTm8KICAqIHJldHVybiB2YWx1ZS4gVGhlc2UgcmVnaXN0ZXJzIGFyZSBvbmx5IGF2YWlsYWJsZSBpbiAzNDMwIGVzMy4xIGFuZCBsYXRlci4KICAqLwotdm9pZCBvbWFwM19wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCkKK3N0YXRpYyB2b2lkIG9tYXAzX3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKQogewogCWludCBpID0gMDsKIApAQCAtNDE2LDE1ICs0MjEsNiBAQAogfQogCiAvKioKLSAqIG9tYXAzeHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbiAtIHJlY29uZmlndXJlIEkvTyBjaGFpbgotICovCi12b2lkIG9tYXAzeHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKQotewotCWlmIChvbWFwM19wcmNtX2lycV9zZXR1cC5yZWNvbmZpZ3VyZV9pb19jaGFpbikKLQkJb21hcDNfcHJjbV9pcnFfc2V0dXAucmVjb25maWd1cmVfaW9fY2hhaW4oKTsKLX0KLQotLyoqCiAgKiBvbWFwM3h4eF9wcm1fZW5hYmxlX2lvX3dha2V1cCAtIGVuYWJsZSB3YWtldXAgZXZlbnRzIGZyb20gSS9PIHdha2V1cCBsYXRjaGVzCiAgKgogICogQWN0aXZhdGVzIHRoZSBJL08gd2FrZXVwIGV2ZW50IGxhdGNoZXMgYW5kIGFsbG93cyBldmVudHMgbG9nZ2VkIGJ5CkBAIC02NjQsNiArNjYwLDEwIEBACiBzdGF0aWMgc3RydWN0IHBybV9sbF9kYXRhIG9tYXAzeHh4X3BybV9sbF9kYXRhID0gewogCS5yZWFkX3Jlc2V0X3NvdXJjZXMgPSAmb21hcDN4eHhfcHJtX3JlYWRfcmVzZXRfc291cmNlcywKIAkubGF0ZV9pbml0ID0gJm9tYXAzeHh4X3BybV9sYXRlX2luaXQsCisJLmFzc2VydF9oYXJkcmVzZXQgPSAmb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQsCisJLmRlYXNzZXJ0X2hhcmRyZXNldCA9ICZvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0LAorCS5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQgPSAmb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCwKKwkucmVzZXRfc3lzdGVtID0gJm9tYXAzeHh4X3BybV9kcGxsM19yZXNldCwKIH07CiAKIGludCBfX2luaXQgb21hcDN4eHhfcHJtX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtM3h4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmgKaW5kZXggYmMzN2Q0Mi4uY2ZkZTNmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmgKQEAgLTE0NCwyMiArMTQ0LDYgQEAKIGV4dGVybiB2b2lkIG9tYXAzX3BybV92Y3ZwX3dyaXRlKHUzMiB2YWwsIHU4IG9mZnNldCk7CiBleHRlcm4gdTMyIG9tYXAzX3BybV92Y3ZwX3Jtdyh1MzIgbWFzaywgdTMyIGJpdHMsIHU4IG9mZnNldCk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwotdm9pZCBvbWFwM3h4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXAzeHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKQotewotfQotI2VuZGlmCi0KLS8qIFBSTSBpbnRlcnJ1cHQtcmVsYXRlZCBmdW5jdGlvbnMgKi8KLWV4dGVybiB2b2lkIG9tYXAzeHh4X3BybV9yZWFkX3BlbmRpbmdfaXJxcyh1bnNpZ25lZCBsb25nICpldmVudHMpOwotZXh0ZXJuIHZvaWQgb21hcDN4eHhfcHJtX29jcF9iYXJyaWVyKHZvaWQpOwotZXh0ZXJuIHZvaWQgb21hcDN4eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuKHUzMiAqc2F2ZWRfbWFzayk7Ci1leHRlcm4gdm9pZCBvbWFwM3h4eF9wcm1fcmVzdG9yZV9pcnFlbih1MzIgKnNhdmVkX21hc2spOwotCi1leHRlcm4gdm9pZCBvbWFwM3h4eF9wcm1fZHBsbDNfcmVzZXQodm9pZCk7Ci0KIGV4dGVybiBpbnQgX19pbml0IG9tYXAzeHh4X3BybV9pbml0KHZvaWQpOwogZXh0ZXJuIHUzMiBvbWFwM3h4eF9wcm1fZ2V0X3Jlc2V0X3NvdXJjZXModm9pZCk7CiBpbnQgb21hcDN4eHhfcHJtX2NsZWFyX21vZF9pcnFzKHMxNiBtb2R1bGUsIHU4IHJlZ3MsIHUzMiBpZ25vcmVfYml0cyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5jCmluZGV4IDA5NThkMDcuLmNjMTcwZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5jCkBAIC0zMiw2ICszMiwxMiBAQAogCiAvKiBTdGF0aWMgZGF0YSAqLwogCitzdGF0aWMgdm9pZCBvbWFwNDR4eF9wcm1fcmVhZF9wZW5kaW5nX2lycXModW5zaWduZWQgbG9uZyAqZXZlbnRzKTsKK3N0YXRpYyB2b2lkIG9tYXA0NHh4X3BybV9vY3BfYmFycmllcih2b2lkKTsKK3N0YXRpYyB2b2lkIG9tYXA0NHh4X3BybV9zYXZlX2FuZF9jbGVhcl9pcnFlbih1MzIgKnNhdmVkX21hc2spOworc3RhdGljIHZvaWQgb21hcDQ0eHhfcHJtX3Jlc3RvcmVfaXJxZW4odTMyICpzYXZlZF9tYXNrKTsKK3N0YXRpYyB2b2lkIG9tYXA0NHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX3ByY21faXJxIG9tYXA0X3ByY21faXJxc1tdID0gewogCU9NQVBfUFJDTV9JUlEoImlvIiwgICAgIDksICAgICAgMSksCiB9OwpAQCAtODAsMTkgKzg2LDE5IEBACiAvKiBQUk0gbG93LWxldmVsIGZ1bmN0aW9ucyAqLwogCiAvKiBSZWFkIGEgcmVnaXN0ZXIgaW4gYSBDTS9QUk0gaW5zdGFuY2UgaW4gdGhlIFBSTSBtb2R1bGUgKi8KLXUzMiBvbWFwNF9wcm1fcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IHJlZykKK3N0YXRpYyB1MzIgb21hcDRfcHJtX3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiByZWcpCiB7CiAJcmV0dXJuIHJlYWRsX3JlbGF4ZWQocHJtX2Jhc2UgKyBpbnN0ICsgcmVnKTsKIH0KIAogLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIGEgQ00vUFJNIGluc3RhbmNlIGluIHRoZSBQUk0gbW9kdWxlICovCi12b2lkIG9tYXA0X3BybV93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IHJlZykKK3N0YXRpYyB2b2lkIG9tYXA0X3BybV93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IHJlZykKIHsKIAl3cml0ZWxfcmVsYXhlZCh2YWwsIHBybV9iYXNlICsgaW5zdCArIHJlZyk7CiB9CiAKIC8qIFJlYWQtbW9kaWZ5LXdyaXRlIGEgcmVnaXN0ZXIgaW4gYSBQUk0gbW9kdWxlLiBDYWxsZXIgbXVzdCBsb2NrICovCi11MzIgb21hcDRfcHJtX3Jtd19pbnN0X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IGluc3QsIHMxNiByZWcpCitzdGF0aWMgdTMyIG9tYXA0X3BybV9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgcmVnKQogewogCXUzMiB2OwogCkBAIC0yMDcsNyArMjEzLDcgQEAKICAqIE1QVSBJUlFzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIHRoZSB0d28gdTMycyBwb2ludGVkIHRvIGJ5IEBldmVudHMuCiAgKiBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDQ0eHhfcHJtX3JlYWRfcGVuZGluZ19pcnFzKHVuc2lnbmVkIGxvbmcgKmV2ZW50cykKK3N0YXRpYyB2b2lkIG9tYXA0NHh4X3BybV9yZWFkX3BlbmRpbmdfaXJxcyh1bnNpZ25lZCBsb25nICpldmVudHMpCiB7CiAJZXZlbnRzWzBdID0gX3JlYWRfcGVuZGluZ19pcnFfcmVnKE9NQVA0X1BSTV9JUlFFTkFCTEVfTVBVX09GRlNFVCwKIAkJCQkJICBPTUFQNF9QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQpOwpAQCAtMjI0LDcgKzIzMCw3IEBACiAgKiBibG9jaywgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGFmdGVyIGFja25vd2xlZGdpbmcgb3IgY2xlYXJpbmcgSVJRCiAgKiBiaXRzLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXA0NHh4X3BybV9vY3BfYmFycmllcih2b2lkKQorc3RhdGljIHZvaWQgb21hcDQ0eHhfcHJtX29jcF9iYXJyaWVyKHZvaWQpCiB7CiAJb21hcDRfcHJtX3JlYWRfaW5zdF9yZWcoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfSU5TVCwKIAkJCQlPTUFQNF9SRVZJU0lPTl9QUk1fT0ZGU0VUKTsKQEAgLTI0MSw3ICsyNDcsNyBAQAogICogaW50ZXJydXB0cyByZWFjaGVzIHRoZSBQUk0gYmVmb3JlIHJldHVybmluZzsgb3RoZXJ3aXNlLCBzcHVyaW91cwogICogaW50ZXJydXB0cyBtaWdodCBvY2N1ci4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwNDR4eF9wcm1fc2F2ZV9hbmRfY2xlYXJfaXJxZW4odTMyICpzYXZlZF9tYXNrKQorc3RhdGljIHZvaWQgb21hcDQ0eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuKHUzMiAqc2F2ZWRfbWFzaykKIHsKIAlzYXZlZF9tYXNrWzBdID0KIAkJb21hcDRfcHJtX3JlYWRfaW5zdF9yZWcoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfSU5TVCwKQEAgLTI3MCw3ICsyNzYsNyBAQAogICogTm8gT0NQIGJhcnJpZXIgc2hvdWxkIGJlIG5lZWRlZCBoZXJlOyBhbnkgcGVuZGluZyBQUk0gaW50ZXJydXB0cyB3aWxsIGZpcmUKICAqIG9uY2UgdGhlIHdyaXRlcyByZWFjaCB0aGUgUFJNLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXA0NHh4X3BybV9yZXN0b3JlX2lycWVuKHUzMiAqc2F2ZWRfbWFzaykKK3N0YXRpYyB2b2lkIG9tYXA0NHh4X3BybV9yZXN0b3JlX2lycWVuKHUzMiAqc2F2ZWRfbWFzaykKIHsKIAlvbWFwNF9wcm1fd3JpdGVfaW5zdF9yZWcoc2F2ZWRfbWFza1swXSwgT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfSU5TVCwKIAkJCQkgT01BUDRfUFJNX0lSUUVOQUJMRV9NUFVfT0ZGU0VUKTsKQEAgLTI4Nyw3ICsyOTMsNyBAQAogICogZGVhc3NlcnRpbmcgV1VDTEtJTiBhbmQgd2FpdGluZyBmb3IgV1VDTEtPVVQgdG8gYmUgZGVhc3NlcnRlZC4KICAqIE5vIHJldHVybiB2YWx1ZS4gWFhYIEFyZSB0aGUgZmluYWwgdHdvIHN0ZXBzIG5lY2Vzc2FyeT8KICAqLwotdm9pZCBvbWFwNDR4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCkKK3N0YXRpYyB2b2lkIG9tYXA0NHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKQogewogCWludCBpID0gMDsKIAlzMzIgaW5zdCA9IG9tYXA0X3BybXN0X2dldF9wcm1fZGV2X2luc3QoKTsKQEAgLTY1MiwxMSArNjU4LDEwIEBACiAKIHN0YXRpYyBpbnQgb21hcDRfY2hlY2tfdmN2cCh2b2lkKQogewotCS8qIE5vIFZDL1ZQIG9uIGRyYTd4eCBkZXZpY2VzICovCi0JaWYgKHNvY19pc19kcmE3eHgoKSkKLQkJcmV0dXJuIDA7CisJaWYgKHBybV9mZWF0dXJlcyAmIFBSTV9IQVNfVk9MVEFHRSkKKwkJcmV0dXJuIDE7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IHB3cmRtX29wcyBvbWFwNF9wd3JkbV9vcGVyYXRpb25zID0gewpAQCAtNjg5LDYgKzY5NCwxMCBAQAogCS53YXNfYW55X2NvbnRleHRfbG9zdF9vbGQgPSAmb21hcDQ0eHhfcHJtX3dhc19hbnlfY29udGV4dF9sb3N0X29sZCwKIAkuY2xlYXJfY29udGV4dF9sb3NzX2ZsYWdzX29sZCA9ICZvbWFwNDR4eF9wcm1fY2xlYXJfY29udGV4dF9sb3NzX2ZsYWdzX29sZCwKIAkubGF0ZV9pbml0ID0gJm9tYXA0NHh4X3BybV9sYXRlX2luaXQsCisJLmFzc2VydF9oYXJkcmVzZXQJPSBvbWFwNF9wcm1pbnN0X2Fzc2VydF9oYXJkcmVzZXQsCisJLmRlYXNzZXJ0X2hhcmRyZXNldAk9IG9tYXA0X3BybWluc3RfZGVhc3NlcnRfaGFyZHJlc2V0LAorCS5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQJPSBvbWFwNF9wcm1pbnN0X2lzX2hhcmRyZXNldF9hc3NlcnRlZCwKKwkucmVzZXRfc3lzdGVtCQk9IG9tYXA0X3BybWluc3RfZ2xvYmFsX3dhcm1fc3dfcmVzZXQsCiB9OwogCiBpbnQgX19pbml0IG9tYXA0NHh4X3BybV9pbml0KHZvaWQpCkBAIC02OTYsNiArNzA1LDkgQEAKIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkgfHwgc29jX2lzX29tYXA1NHh4KCkgfHwgc29jX2lzX2RyYTd4eCgpKQogCQlwcm1fZmVhdHVyZXMgfD0gUFJNX0hBU19JT19XQUtFVVA7CiAKKwlpZiAoIXNvY19pc19kcmE3eHgoKSkKKwkJcHJtX2ZlYXR1cmVzIHw9IFBSTV9IQVNfVk9MVEFHRTsKKwogCXJldHVybiBwcm1fcmVnaXN0ZXIoJm9tYXA0NHh4X3BybV9sbF9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4XzU0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eF81NHh4LmgKaW5kZXggOGQ5NWFhNS4uZjc1MTI1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4XzU0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHhfNTR4eC5oCkBAIC0yNiwxMCArMjYsNiBAQAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKLWV4dGVybiB1MzIgb21hcDRfcHJtX3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiBpZHgpOwotZXh0ZXJuIHZvaWQgb21hcDRfcHJtX3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgaWR4KTsKLWV4dGVybiB1MzIgb21hcDRfcHJtX3Jtd19pbnN0X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IGluc3QsIHMxNiBpZHgpOwotCiAvKiBPTUFQNC9PTUFQNS1zcGVjaWZpYyBWUCBmdW5jdGlvbnMgKi8KIHUzMiBvbWFwNF9wcm1fdnBfY2hlY2tfdHhkb25lKHU4IHZwX2lkKTsKIHZvaWQgb21hcDRfcHJtX3ZwX2NsZWFyX3R4ZG9uZSh1OCB2cF9pZCk7CkBAIC00MiwyMSArMzgsNiBAQAogZXh0ZXJuIHZvaWQgb21hcDRfcHJtX3ZjdnBfd3JpdGUodTMyIHZhbCwgdTggb2Zmc2V0KTsKIGV4dGVybiB1MzIgb21hcDRfcHJtX3ZjdnBfcm13KHUzMiBtYXNrLCB1MzIgYml0cywgdTggb2Zmc2V0KTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpIHx8IGRlZmluZWQoQ09ORklHX1NPQ19PTUFQNSkgfHwgXAotCWRlZmluZWQoQ09ORklHX1NPQ19EUkE3WFgpIHx8IGRlZmluZWQoQ09ORklHX1NPQ19BTTQzWFgpCi12b2lkIG9tYXA0NHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcDQ0eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpCi17Ci19Ci0jZW5kaWYKLQotLyogUFJNIGludGVycnVwdC1yZWxhdGVkIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIHZvaWQgb21hcDQ0eHhfcHJtX3JlYWRfcGVuZGluZ19pcnFzKHVuc2lnbmVkIGxvbmcgKmV2ZW50cyk7Ci1leHRlcm4gdm9pZCBvbWFwNDR4eF9wcm1fb2NwX2JhcnJpZXIodm9pZCk7Ci1leHRlcm4gdm9pZCBvbWFwNDR4eF9wcm1fc2F2ZV9hbmRfY2xlYXJfaXJxZW4odTMyICpzYXZlZF9tYXNrKTsKLWV4dGVybiB2b2lkIG9tYXA0NHh4X3BybV9yZXN0b3JlX2lycWVuKHUzMiAqc2F2ZWRfbWFzayk7Ci0KIGV4dGVybiBpbnQgX19pbml0IG9tYXA0NHh4X3BybV9pbml0KHZvaWQpOwogZXh0ZXJuIHUzMiBvbWFwNDR4eF9wcm1fZ2V0X3Jlc2V0X3NvdXJjZXModm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1fY29tbW9uLmMKaW5kZXggZWUyYjUyMi4uNzc5OTQwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1fY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1fY29tbW9uLmMKQEAgLTQyMyw2ICs0MjMsMTA1IEBACiB9CiAKIC8qKgorICogb21hcF9wcm1fYXNzZXJ0X2hhcmRyZXNldCAtIGFzc2VydCBoYXJkcmVzZXQgZm9yIGFuIElQIGJsb2NrCisgKiBAc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lCisgKiBAcGFydDogUFJNIHBhcnRpdGlvbgorICogQHBybV9tb2Q6IFBSTSBzdWJtb2R1bGUgYmFzZSBvciBpbnN0YW5jZSBvZmZzZXQKKyAqIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldAorICoKKyAqIEFzc2VydHMgYSBoYXJkd2FyZSByZXNldCBsaW5lIGZvciBhbiBJUCBibG9jay4KKyAqLworaW50IG9tYXBfcHJtX2Fzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLCB1MTYgb2Zmc2V0KQoreworCWlmICghcHJtX2xsX2RhdGEtPmFzc2VydF9oYXJkcmVzZXQpIHsKKwkJV0FSTl9PTkNFKDEsICJwcm06ICVzOiBubyBtYXBwaW5nIGZ1bmN0aW9uIGRlZmluZWRcbiIsCisJCQkgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHBybV9sbF9kYXRhLT5hc3NlcnRfaGFyZHJlc2V0KHNoaWZ0LCBwYXJ0LCBwcm1fbW9kLCBvZmZzZXQpOworfQorCisvKioKKyAqIG9tYXBfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCAtIGRlYXNzZXJ0IGhhcmRyZXNldCBmb3IgYW4gSVAgYmxvY2sKKyAqIEBzaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUKKyAqIEBzdF9zaGlmdDogcmVzZXQgc3RhdHVzIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lCisgKiBAcGFydDogUFJNIHBhcnRpdGlvbgorICogQHBybV9tb2Q6IFBSTSBzdWJtb2R1bGUgYmFzZSBvciBpbnN0YW5jZSBvZmZzZXQKKyAqIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldAorICogQHN0X29mZnNldDogc3RhdHVzIHJlZ2lzdGVyIG9mZnNldAorICoKKyAqIERlYXNzZXJ0cyBhIGhhcmR3YXJlIHJlc2V0IGxpbmUgZm9yIGFuIElQIGJsb2NrLgorICovCitpbnQgb21hcF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBzdF9zaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsCisJCQkJdTE2IG9mZnNldCwgdTE2IHN0X29mZnNldCkKK3sKKwlpZiAoIXBybV9sbF9kYXRhLT5kZWFzc2VydF9oYXJkcmVzZXQpIHsKKwkJV0FSTl9PTkNFKDEsICJwcm06ICVzOiBubyBtYXBwaW5nIGZ1bmN0aW9uIGRlZmluZWRcbiIsCisJCQkgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHBybV9sbF9kYXRhLT5kZWFzc2VydF9oYXJkcmVzZXQoc2hpZnQsIHN0X3NoaWZ0LCBwYXJ0LCBwcm1fbW9kLAorCQkJCQkgICAgICAgb2Zmc2V0LCBzdF9vZmZzZXQpOworfQorCisvKioKKyAqIG9tYXBfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCAtIGNoZWNrIHRoZSBoYXJkcmVzZXQgc3RhdHVzIGZvciBhbiBJUCBibG9jaworICogQHNoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZQorICogQHBhcnQ6IFBSTSBwYXJ0aXRpb24KKyAqIEBwcm1fbW9kOiBQUk0gc3VibW9kdWxlIGJhc2Ugb3IgaW5zdGFuY2Ugb2Zmc2V0CisgKiBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQKKyAqCisgKiBDaGVja3MgaWYgYSBoYXJkd2FyZSByZXNldCBsaW5lIGZvciBhbiBJUCBibG9jayBpcyBlbmFibGVkIG9yIG5vdC4KKyAqLworaW50IG9tYXBfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCh1OCBzaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsIHUxNiBvZmZzZXQpCit7CisJaWYgKCFwcm1fbGxfZGF0YS0+aXNfaGFyZHJlc2V0X2Fzc2VydGVkKSB7CisJCVdBUk5fT05DRSgxLCAicHJtOiAlczogbm8gbWFwcGluZyBmdW5jdGlvbiBkZWZpbmVkXG4iLAorCQkJICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBwcm1fbGxfZGF0YS0+aXNfaGFyZHJlc2V0X2Fzc2VydGVkKHNoaWZ0LCBwYXJ0LCBwcm1fbW9kLCBvZmZzZXQpOworfQorCisvKioKKyAqIG9tYXBfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluIC0gY2xlYXIgbGF0Y2hlcyBhbmQgcmVjb25maWd1cmUgSS9PIGNoYWluCisgKgorICogQ2xlYXIgYW55IHByZXZpb3VzbHktbGF0Y2hlZCBJL08gd2FrZXVwIGV2ZW50cyBhbmQgZW5zdXJlIHRoYXQgdGhlCisgKiBJL08gd2FrZXVwIGdhdGVzIGFyZSBhbGlnbmVkIHdpdGggdGhlIGN1cnJlbnQgbXV4IHNldHRpbmdzLgorICogQ2FsbHMgU29DIHNwZWNpZmljIEkvTyBjaGFpbiByZWNvbmZpZ3VyZSBmdW5jdGlvbiBpZiBhdmFpbGFibGUsCisgKiBvdGhlcndpc2UgZG9lcyBub3RoaW5nLgorICovCit2b2lkIG9tYXBfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpCit7CisJaWYgKCFwcmNtX2lycV9zZXR1cCB8fCAhcHJjbV9pcnFfc2V0dXAtPnJlY29uZmlndXJlX2lvX2NoYWluKQorCQlyZXR1cm47CisKKwlwcmNtX2lycV9zZXR1cC0+cmVjb25maWd1cmVfaW9fY2hhaW4oKTsKK30KKworLyoqCisgKiBvbWFwX3BybV9yZXNldF9zeXN0ZW0gLSB0cmlnZ2VyIGdsb2JhbCBTVyByZXNldAorICoKKyAqIFRyaWdnZXJzIFNvQyBzcGVjaWZpYyBnbG9iYWwgd2FybSByZXNldCB0byByZWJvb3QgdGhlIGRldmljZS4KKyAqLwordm9pZCBvbWFwX3BybV9yZXNldF9zeXN0ZW0odm9pZCkKK3sKKwlpZiAoIXBybV9sbF9kYXRhLT5yZXNldF9zeXN0ZW0pIHsKKwkJV0FSTl9PTkNFKDEsICJwcm06ICVzOiBubyBtYXBwaW5nIGZ1bmN0aW9uIGRlZmluZWRcbiIsCisJCQkgIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCXBybV9sbF9kYXRhLT5yZXNldF9zeXN0ZW0oKTsKKworCXdoaWxlICgxKQorCQljcHVfcmVsYXgoKTsKK30KKworLyoqCiAgKiBwcm1fcmVnaXN0ZXIgLSByZWdpc3RlciBwZXItU29DIGxvdy1sZXZlbCBkYXRhIHdpdGggdGhlIFBSTQogICogQHBsZDogbG93LWxldmVsIHBlci1Tb0MgT01BUCBQUk0gZGF0YSAmIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHJlZ2lzdGVyCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5jCmluZGV4IDIyNWUwMjUuLjhhZGY3YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmMKQEAgLTE0OCw4ICsxNDgsMTIgQEAKIC8qKgogICogb21hcDRfcHJtaW5zdF9kZWFzc2VydF9oYXJkcmVzZXQgLSBkZWFzc2VydCBhIHN1Ym1vZHVsZSBoYXJkcmVzZXQgbGluZSBhbmQKICAqIHdhaXQKLSAqIEByc3RjdHJsX3JlZzogUk1fUlNUQ1RSTCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzIG1vZHVsZQogICogQHNoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZSB0byBkZWFzc2VydAorICogQHN0X3NoaWZ0OiBzdGF0dXMgYml0IG9mZnNldCwgbm90IHVzZWQgZm9yIE9NQVA0KworICogQHBhcnQ6IFBSTSBwYXJ0aXRpb24KKyAqIEBpbnN0OiBQUk0gaW5zdGFuY2Ugb2Zmc2V0CisgKiBAcnN0Y3RybF9vZmZzOiByZXNldCByZWdpc3RlciBvZmZzZXQKKyAqIEBzdF9vZmZzOiByZXNldCBzdGF0dXMgcmVnaXN0ZXIgb2Zmc2V0LCBub3QgdXNlZCBmb3IgT01BUDQrCiAgKgogICogU29tZSBJUHMgbGlrZSBkc3AsIGlwdSBvciBpdmEgY29udGFpbiBwcm9jZXNzb3JzIHRoYXQgcmVxdWlyZSBhbiBIVwogICogcmVzZXQgbGluZSB0byBiZSBhc3NlcnRlZCAvIGRlYXNzZXJ0ZWQgaW4gb3JkZXIgdG8gZnVsbHkgZW5hYmxlIHRoZQpAQCAtMTYwLDggKzE2NCw4IEBACiAgKiAtRUlOVkFMIHVwb24gYW4gYXJndW1lbnQgZXJyb3IsIC1FRVhJU1QgaWYgdGhlIHN1Ym1vZHVsZSB3YXMgYWxyZWFkeSBvdXQKICAqIG9mIHJlc2V0LCBvciAtRUJVU1kgaWYgdGhlIHN1Ym1vZHVsZSBkaWQgbm90IGV4aXQgcmVzZXQgcHJvbXB0bHkuCiAgKi8KLWludCBvbWFwNF9wcm1pbnN0X2RlYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggcGFydCwgczE2IGluc3QsCi0JCQkJICAgICB1MTYgcnN0Y3RybF9vZmZzKQoraW50IG9tYXA0X3BybWluc3RfZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBzdF9zaGlmdCwgdTggcGFydCwgczE2IGluc3QsCisJCQkJICAgICB1MTYgcnN0Y3RybF9vZmZzLCB1MTYgc3Rfb2ZmcykKIHsKIAlpbnQgYzsKIAl1MzIgbWFzayA9IDEgPDwgc2hpZnQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmgKaW5kZXggNTgzYWEzNy4uZmIxYzlkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguaApAQCAtMzAsOCArMzAsOSBAQAogCQkJCQkgICAgICAgdTE2IHJzdGN0cmxfb2Zmcyk7CiBleHRlcm4gaW50IG9tYXA0X3BybWluc3RfYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggcGFydCwgczE2IGluc3QsCiAJCQkJCSAgdTE2IHJzdGN0cmxfb2Zmcyk7Ci1leHRlcm4gaW50IG9tYXA0X3BybWluc3RfZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgaW5zdCwKLQkJCQkJICAgIHUxNiByc3RjdHJsX29mZnMpOworaW50IG9tYXA0X3BybWluc3RfZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBzdF9zaGlmdCwgdTggcGFydCwKKwkJCQkgICAgIHMxNiBpbnN0LCB1MTYgcnN0Y3RybF9vZmZzLAorCQkJCSAgICAgdTE2IHJzdHN0X29mZnMpOwogCiBleHRlcm4gdm9pZCBvbWFwX3BybV9iYXNlX2luaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IGEzODhmOGMuLjU3ZGVlMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtMjYzLDkgKzI2Myw2IEBACiAJb21hcF91cC5kbWFfcnhfdGltZW91dCA9IGluZm8tPmRtYV9yeF90aW1lb3V0OwogCW9tYXBfdXAuZG1hX3J4X3BvbGxfcmF0ZSA9IGluZm8tPmRtYV9yeF9wb2xsX3JhdGU7CiAJb21hcF91cC5hdXRvc3VzcGVuZF90aW1lb3V0ID0gaW5mby0+YXV0b3N1c3BlbmRfdGltZW91dDsKLQlvbWFwX3VwLkRUUl9ncGlvID0gaW5mby0+RFRSX2dwaW87Ci0Jb21hcF91cC5EVFJfaW52ZXJ0ZWQgPSBpbmZvLT5EVFJfaW52ZXJ0ZWQ7Ci0Jb21hcF91cC5EVFJfcHJlc2VudCA9IGluZm8tPkRUUl9wcmVzZW50OwogCiAJcGRhdGEgPSAmb21hcF91cDsKIAlwZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBvbWFwX3VhcnRfcG9ydF9pbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCmluZGV4IGU2NjkwYTQuLjgzZWZlOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwpAQCAtNCw2ICs0LDE3IEBACiAKIGNvbW1lbnQgIkludGVsL01hcnZlbGwgRGV2IFBsYXRmb3JtcyAoc29ydGVkIGJ5IGhhcmR3YXJlIHJlbGVhc2UgdGltZSkiCiAKK2NvbmZpZyBNQUNIX1BYQTI3WF9EVAorCWJvb2wgIlN1cHBvcnQgUFhBMjd4IHBsYXRmb3JtcyBmcm9tIGRldmljZSB0cmVlIgorCXNlbGVjdCBDUFVfUFhBMjd4CisJc2VsZWN0IFBPV0VSX1NVUFBMWQorCXNlbGVjdCBQWEEyN3gKKwlzZWxlY3QgVVNFX09GCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIFBYQTI3eCBiYXNlZCBwbGF0Zm9ybXMgdXNpbmcKKwkgIHRoZSBkZXZpY2UgdHJlZS4gTmVlZG4ndCBzZWxlY3QgYW55IG90aGVyIG1hY2hpbmUgd2hpbGUKKwkgIE1BQ0hfUFhBMjdYX0RUIGlzIGVuYWJsZWQuCisKIGNvbmZpZyBNQUNIX1BYQTNYWF9EVAogCWJvb2wgIlN1cHBvcnQgUFhBM3h4IHBsYXRmb3JtcyBmcm9tIGRldmljZSB0cmVlIgogCXNlbGVjdCBDUFVfUFhBMzAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IDJmZTE4MjQuLmViMGJmNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0yMSw2ICsyMSw3IEBACiAKICMgRGV2aWNlIFRyZWUgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfUFhBM1hYX0RUKQkrPSBweGEtZHQubworb2JqLSQoQ09ORklHX01BQ0hfUFhBMjdYX0RUKQkrPSBweGEtZHQubwogCiAjIEludGVsL01hcnZlbGwgRGV2IFBsYXRmb3Jtcwogb2JqLSQoQ09ORklHX0FSQ0hfTFVCQk9DSykJKz0gbHViYm9jay5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKaW5kZXggNjkxNWE5Zi4uNTE1MzFlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwpAQCAtMzc4LDcgKzM3OCw3IEBACiAKIAllcnIgPSBncGlvX3JlcXVlc3QoR1BJTzExX05BTkRfQ1MsICJOQU5EIENTIik7CiAJaWYgKGVycikgewotCQlwcl93YXJuaW5nKCJFTS1YMjcwOiBmYWlsZWQgdG8gcmVxdWVzdCBOQU5EIENTIGdwaW9cbiIpOworCQlwcl93YXJuKCJFTS1YMjcwOiBmYWlsZWQgdG8gcmVxdWVzdCBOQU5EIENTIGdwaW9cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zODYsNyArMzg2LDcgQEAKIAogCWVyciA9IGdwaW9fcmVxdWVzdChuYW5kX3JiLCAiTkFORCBSL0IiKTsKIAlpZiAoZXJyKSB7Ci0JCXByX3dhcm5pbmcoIkVNLVgyNzA6IGZhaWxlZCB0byByZXF1ZXN0IE5BTkQgUi9CIGdwaW9cbiIpOworCQlwcl93YXJuKCJFTS1YMjcwOiBmYWlsZWQgdG8gcmVxdWVzdCBOQU5EIFIvQiBncGlvXG4iKTsKIAkJZ3Bpb19mcmVlKEdQSU8xMV9OQU5EX0NTKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaAppbmRleCA4OTYzOTg0Li43YTlmYTFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCkBAIC0xMywxMSArMTMsMTEgQEAKIAogc3RydWN0IGlycV9kYXRhOwogCi1leHRlcm4gdm9pZCBweGFfdGltZXJfaW5pdCh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgX19pbml0IHB4YV9tYXBfaW8odm9pZCk7Ci0KIGV4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCBpbmZvKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGFfZHRfaXJxX2luaXQoaW50ICgqZm4pKHN0cnVjdCBpcnFfZGF0YSAqLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCkpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBweGFfdGltZXJfaW5pdCh2b2lkKTsKIAogI2RlZmluZSBTRVRfQkFOSyhfX25yLF9fc3RhcnQsX19zaXplKSBcCiAJbWktPmJhbmtbX19ucl0uc3RhcnQgPSAoX19zdGFydCksIFwKQEAgLTI1LDI5ICsyNSwyMSBAQAogCiAjZGVmaW5lIEFSUkFZX0FORF9TSVpFKHgpCSh4KSwgQVJSQVlfU0laRSh4KQogCi0jaWZkZWYgQ09ORklHX1BYQTI1eAotZXh0ZXJuIHVuc2lnbmVkIHB4YTI1eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50KTsKLSNlbHNlCi0jZGVmaW5lIHB4YTI1eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooeCkJCSgwKQotI2VuZGlmCisjZGVmaW5lIHB4YTI1eF9oYW5kbGVfaXJxIGljaXBfaGFuZGxlX2lycQorZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI1eF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGEyNXhfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI2eF9pbml0X2lycSh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19QWEEyN3gKLWV4dGVybiB1bnNpZ25lZCBweGEyN3hfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCk7Ci0jZWxzZQotI2RlZmluZSBweGEyN3hfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KHgpCQkoMCkKLSNlbmRpZgorI2RlZmluZSBweGEyN3hfaGFuZGxlX2lycSBpY2hwX2hhbmRsZV9pcnEKK2V4dGVybiB2b2lkIF9faW5pdCBweGEyN3hfZHRfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdW5zaWduZWQJcHhhMjd4X2dldF9jbGtfZnJlcXVlbmN5X2toeihpbnQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI3eF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGEyN3hfbWFwX2lvKHZvaWQpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfUFhBMjV4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEyN3gpCi1leHRlcm4gdm9pZCBweGEyeHhfY2xlYXJfcmVzZXRfc3RhdHVzKHVuc2lnbmVkIGludCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHB4YTJ4eF9jbGVhcl9yZXNldF9zdGF0dXModW5zaWduZWQgaW50IG1hc2spIHt9Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19QWEEzeHgKLWV4dGVybiB1bnNpZ25lZCBweGEzeHhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCk7Ci0jZWxzZQotI2RlZmluZSBweGEzeHhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KHgpCQkoMCkKLSNlbmRpZgorI2RlZmluZSBweGEzeHhfaGFuZGxlX2lycSBpY2hwX2hhbmRsZV9pcnEKK2V4dGVybiB2b2lkIF9faW5pdCBweGEzeHhfZHRfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhM3h4X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTN4eF9tYXBfaW8odm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3Qgc3lzY29yZV9vcHMgcHhhX2lycV9zeXNjb3JlX29wczsKIGV4dGVybiBzdHJ1Y3Qgc3lzY29yZV9vcHMgcHhhMnh4X21mcF9zeXNjb3JlX29wczsKQEAgLTU5LDMgKzUxLDMwIEBACiB2b2lkIF9faW5pdCBweGFfc2V0X2h3dWFydF9pbmZvKHZvaWQgKmluZm8pOwogCiB2b2lkIHB4YV9yZXN0YXJ0KGVudW0gcmVib290X21vZGUsIGNvbnN0IGNoYXIgKik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19QWEEyNXgpIHx8IGRlZmluZWQoQ09ORklHX1BYQTI3eCkKK2V4dGVybiB2b2lkIHB4YTJ4eF9jbGVhcl9yZXNldF9zdGF0dXModW5zaWduZWQgaW50KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcHhhMnh4X2NsZWFyX3Jlc2V0X3N0YXR1cyh1bnNpZ25lZCBpbnQgbWFzaykge30KKyNlbmRpZgorCisvKgorICogT25jZSBmdWxseSBjb252ZXJ0ZWQgdG8gdGhlIGNsb2NrIGZyYW1ld29yaywgYWxsIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUKKyAqIHJlbW92ZWQsIGFuZCByZXBsYWNlZCB3aXRoIGEgY2xrX2dldChOVUxMLCAiY29yZSIpLgorICovCisjaWZkZWYgQ09ORklHX1BYQTI1eAorZXh0ZXJuIHVuc2lnbmVkIHB4YTI1eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50KTsKKyNlbHNlCisjZGVmaW5lIHB4YTI1eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooeCkJCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisjZWxzZQorI2RlZmluZSBweGEyN3hfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KHgpCQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BYQTN4eAorZXh0ZXJuIHVuc2lnbmVkCXB4YTN4eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50KTsKKyNlbHNlCisjZGVmaW5lIHB4YTN4eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooeCkJCSgwKQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKaW5kZXggMDBiOTJkYS4uZjZjNzZhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYwpAQCAtMTQwLDggKzE0MCw3IEBACiAJaW50IHRpbWVvdXQgPSA1MDA7CiAKIAlpZiAoIShPU0NDICYgT1NDQ19PT0spKQotCQlwcl93YXJuaW5nKCIzMmtIeiBjbG9jayB3YXMgbm90IG9uLiBCb290bG9hZGVyIG1heSBuZWVkIHRvICIKLQkJCQkiYmUgdXBkYXRlZFxuIik7CisJCXByX3dhcm4oIjMya0h6IGNsb2NrIHdhcyBub3Qgb24uIEJvb3Rsb2FkZXIgbWF5IG5lZWQgdG8gYmUgdXBkYXRlZFxuIik7CiAJZWxzZQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyNXguaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyNXguaAppbmRleCAzYWMwYmFhLi41YTM0MTc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI1eC5oCkBAIC02LDEyICs2LDQgQEAKICNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAotZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI1eF9tYXBfaW8odm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgcHhhMjV4X2luaXRfaXJxKHZvaWQpOwotI2lmZGVmIENPTkZJR19DUFVfUFhBMjZ4Ci1leHRlcm4gdm9pZCBfX2luaXQgcHhhMjZ4X2luaXRfaXJxKHZvaWQpOwotI2VuZGlmCi0KLSNkZWZpbmUgcHhhMjV4X2hhbmRsZV9pcnEJaWNpcF9oYW5kbGVfaXJxCi0KICNlbmRpZiAvKiBfX01BQ0hfUFhBMjV4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyN3guaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyN3guaAppbmRleCA3Y2ZmNjQwLi41OTliOTI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjd4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eC5oCkBAIC0xOSwxMSArMTksNyBAQAogI2RlZmluZSBBUkJfQ09SRV9QQVJLCQkoMTw8MjQpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGNvcmUgd2hlbiBpZGxlICovCiAjZGVmaW5lIEFSQl9MT0NLX0ZMQUcJCSgxPDwyMykJICAgLyogT25seSBMb2NraW5nIG1hc3RlcnMgZ2FpbiBhY2Nlc3MgdG8gdGhlIGJ1cyAqLwogCi1leHRlcm4gdm9pZCBfX2luaXQgcHhhMjd4X21hcF9pbyh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCBweGEyN3hfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gaW50IF9faW5pdCBweGEyN3hfc2V0X3B3cm1vZGUodW5zaWduZWQgaW50IG1vZGUpOwogZXh0ZXJuIHZvaWQgcHhhMjd4X2NwdV9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOwogCi0jZGVmaW5lIHB4YTI3eF9oYW5kbGVfaXJxCWljaHBfaGFuZGxlX2lycQotCiAjZW5kaWYgLyogX19NQUNIX1BYQTI3eF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LmgKaW5kZXggNmRkN2ZhMS4uYjQxNDNmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHguaApAQCAtNSw5ICs1LDQgQEAKICNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAKLWV4dGVybiB2b2lkIF9faW5pdCBweGEzeHhfbWFwX2lvKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IHB4YTN4eF9pbml0X2lycSh2b2lkKTsKLQotI2RlZmluZSBweGEzeHhfaGFuZGxlX2lycQlpY2hwX2hhbmRsZV9pcnEKLQogI2VuZGlmIC8qIF9fTUFDSF9QWEEzWFhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCmluZGV4IGVmMDQyNmEuLjY2NmI3ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKQEAgLTkzLDggKzkzLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogd2FybmluZyBhbmQgZmFsbCB0aHJvdWdoLCB0cmVhdCBhcyBNRlBfTFBNX0RFRkFVTFQgKi8KLQkJcHJfd2FybmluZygiJXM6IEdQSU8lZDogdW5zdXBwb3J0ZWQgbG93IHBvd2VyIG1vZGVcbiIsCi0JCQkJX19mdW5jX18sIGdwaW8pOworCQlwcl93YXJuKCIlczogR1BJTyVkOiB1bnN1cHBvcnRlZCBsb3cgcG93ZXIgbW9kZVxuIiwKKwkJCV9fZnVuY19fLCBncGlvKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMDcsMTQgKzEwNywxMiBAQAogCSAqIGNvbmZpZ3VyYXRpb25zIG9mIHRob3NlIHBpbnMgbm90IGFibGUgdG8gd2FrZXVwCiAJICovCiAJaWYgKChjICYgTUZQX0xQTV9DQU5fV0FLRVVQKSAmJiAhZ3Bpb19kZXNjW2dwaW9dLmNhbl93YWtldXApIHsKLQkJcHJfd2FybmluZygiJXM6IEdQSU8lZCB1bmFibGUgdG8gd2FrZXVwXG4iLAotCQkJCV9fZnVuY19fLCBncGlvKTsKKwkJcHJfd2FybigiJXM6IEdQSU8lZCB1bmFibGUgdG8gd2FrZXVwXG4iLCBfX2Z1bmNfXywgZ3Bpbyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICgoYyAmIE1GUF9MUE1fQ0FOX1dBS0VVUCkgJiYgaXNfb3V0KSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBvdXRwdXQgR1BJTyVkIHVuYWJsZSB0byB3YWtldXBcbiIsCi0JCQkJX19mdW5jX18sIGdwaW8pOworCQlwcl93YXJuKCIlczogb3V0cHV0IEdQSU8lZCB1bmFibGUgdG8gd2FrZXVwXG4iLCBfX2Z1bmNfXywgZ3Bpbyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTI2LDcgKzEyNCw3IEBACiAJaW50IGdwaW8gPSBtZnBfdG9fZ3BpbyhtZnApOwogCiAJaWYgKChtZnAgPiBNRlBfUElOX0dQSU8xMjcpIHx8ICFncGlvX2Rlc2NbZ3Bpb10udmFsaWQpIHsKLQkJcHJfd2FybmluZygiJXM6IEdQSU8lZCBpcyBpbnZhbGlkIHBpblxuIiwgX19mdW5jX18sIGdwaW8pOworCQlwcl93YXJuKCIlczogR1BJTyVkIGlzIGludmFsaWQgcGluXG4iLCBfX2Z1bmNfXywgZ3Bpbyk7CiAJCXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKaW5kZXggMTMxOTkxNi4uMjkwMTliZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCiAJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygicG9vZGxlOiBVbmFibGUgdG8gcmVnaXN0ZXIgTG9Db01vIGRldmljZVxuIik7CisJCXByX3dhcm4oInBvb2RsZTogVW5hYmxlIHRvIHJlZ2lzdGVyIExvQ29NbyBkZXZpY2VcbiIpOwogCiAJcHhhX3NldF9mYl9pbmZvKCZwb29kbGVfbG9jb21vX2RldmljZS5kZXYsICZwb29kbGVfZmJfaW5mbyk7CiAJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhLWR0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEtZHQuYwppbmRleCBmNmEyYzRiLi43ZTBlNWJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEtZHQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEtZHQuYwpAQCAtMTUsMTMgKzE1LDEwIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTN4eC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAjaWZkZWYgQ09ORklHX1BYQTN4eAotZXh0ZXJuIHZvaWQgX19pbml0IHB4YTN4eF9kdF9pbml0X2lycSh2b2lkKTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZfYXV4ZGF0YSBweGEzeHhfYXV4ZGF0YV9sb29rdXBbXSBfX2luaXRjb25zdCA9IHsKIAlPRl9ERVZfQVVYREFUQSgibXJ2bCxweGEtdWFydCIsCQkweDQwMTAwMDAwLCAicHhhMnh4LXVhcnQuMCIsIE5VTEwpLAogCU9GX0RFVl9BVVhEQVRBKCJtcnZsLHB4YS11YXJ0IiwJCTB4NDAyMDAwMDAsICJweGEyeHgtdWFydC4xIiwgTlVMTCksCkBAIC02MSwzICs1OCwxOCBAQAogCS5kdF9jb21wYXQJPSBweGEzeHhfZHRfYm9hcmRfY29tcGF0LAogTUFDSElORV9FTkQKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BYQTI3eAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBweGEyN3hfZHRfYm9hcmRfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CisJIm1hcnZlbGwscHhhMjcwIiwKKwlOVUxMLAorfTsKKworRFRfTUFDSElORV9TVEFSVChQWEEyN1hfRFQsICJNYXJ2ZWxsIFBYQTJ4eCAoRGV2aWNlIFRyZWUgU3VwcG9ydCkiKQorCS5tYXBfaW8JCT0gcHhhMjd4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyN3hfZHRfaW5pdF9pcnEsCisJLmhhbmRsZV9pcnEJPSBweGEyN3hfaGFuZGxlX2lycSwKKwkucmVzdGFydAk9IHB4YV9yZXN0YXJ0LAorCS5kdF9jb21wYXQJPSBweGEyN3hfZHRfYm9hcmRfY29tcGF0LAorTUFDSElORV9FTkQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCBiMDQwZDdkLi5hZjQyM2E0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMzk4LDYgKzM5OCwxMiBAQAogCXB4YV9pbml0X2lycSgzNCwgcHhhMjd4X3NldF93YWtlKTsKIH0KIAordm9pZCBfX2luaXQgcHhhMjd4X2R0X2luaXRfaXJxKHZvaWQpCit7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSkKKwkJcHhhX2R0X2lycV9pbml0KHB4YTI3eF9zZXRfd2FrZSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcHhhMjd4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsJLyogTWVtIEN0bCAqLwogCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVNNRU1DX1ZJUlQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHgtdWxwaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LXVscGkuYwppbmRleCBlMzI5Y2NlLi42MTQwMDNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHgtdWxwaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC11bHBpLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAkJY3B1X3JlbGF4KCk7CiAJfQogCi0JcHJfd2FybmluZygiJXM6IFVMUEkgYWNjZXNzIHRpbWVkIG91dCFcbiIsIF9fZnVuY19fKTsKKwlwcl93YXJuKCIlczogVUxQSSBhY2Nlc3MgdGltZWQgb3V0IVxuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CkBAIC04NCw3ICs4NCw3IEBACiAJaW50IGVycjsKIAogCWlmIChweGEzMTBfdWxwaV9nZXRfcGh5bW9kZSgpICE9IFNZTkNIKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBQSFkgaXMgbm90IGluIFNZTkNIIG1vZGUhXG4iLCBfX2Z1bmNfXyk7CisJCXByX3dhcm4oIiVzOiBQSFkgaXMgbm90IGluIFNZTkNIIG1vZGUhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0xMDEsNyArMTAxLDcgQEAKIHN0YXRpYyBpbnQgcHhhMzEwX3VscGlfd3JpdGUoc3RydWN0IHVzYl9waHkgKm90ZywgdTMyIHZhbCwgdTMyIHJlZykKIHsKIAlpZiAocHhhMzEwX3VscGlfZ2V0X3BoeW1vZGUoKSAhPSBTWU5DSCkgewotCQlwcl93YXJuaW5nKCIlczogUEhZIGlzIG5vdCBpbiBTWU5DSCBtb2RlIVxuIiwgX19mdW5jX18pOworCQlwcl93YXJuKCIlczogUEhZIGlzIG5vdCBpbiBTWU5DSCBtb2RlIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcmF1bWZlbGQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMKaW5kZXggODM4NmRjMy4uYTc2MmIyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcmF1bWZlbGQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jCkBAIC01MjEsNyArNTIxLDcgQEAKIAkJCQkiVzEgZXh0ZXJuYWwgcHVsbHVwIGVuYWJsZSIpOwogCiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fVzFfUFVMTFVQX0VOQUJMRVxuIik7CisJCXByX3dhcm4oIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fVzFfUFVMTFVQX0VOQUJMRVxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19XMV9QVUxMVVBfRU5BQkxFLCAwKTsKIApAQCAtNjAwLDcgKzYwMCw3IEBACiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19URlRfVkFfRU4sICJkaXNwbGF5IFZBIGVuYWJsZSIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1RGVF9WQV9FTlxuIik7CisJCXByX3dhcm4oIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fVEZUX1ZBX0VOXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1RGVF9WQV9FTiwgMSk7CiAKQEAgLTYwOCw3ICs2MDgsNyBAQAogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRElTUExBWV9FTkFCTEUsICJkaXNwbGF5IGVuYWJsZSIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX0RJU1BMQVlfRU5BQkxFXG4iKTsKKwkJcHJfd2FybigiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19ESVNQTEFZX0VOQUJMRVxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19ESVNQTEFZX0VOQUJMRSwgMSk7CiAKQEAgLTgxNCwxNyArODE0LDE3IEBACiAJLyogU2V0IFBFTjIgaGlnaCB0byBlbmFibGUgbWF4aW11bSBjaGFyZ2UgY3VycmVudCAqLwogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0NIUkdfUEVOMiwgIkNIUkdfUEVOMiIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX0NIUkdfUEVOMlxuIik7CisJCXByX3dhcm4oIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fQ0hSR19QRU4yXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0NIUkdfUEVOMiwgMSk7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19DSEFSR0VfRENfT0ssICJDQUJMRV9EQ19PSyIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX0NIQVJHRV9EQ19PS1xuIik7CisJCXByX3dhcm4oIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fQ0hBUkdFX0RDX09LXG4iKTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0NIQVJHRV9VU0JfU1VTUCwgIkNIQVJHRV9VU0JfU1VTUCIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX0NIQVJHRV9VU0JfU1VTUFxuIik7CisJCXByX3dhcm4oIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fQ0hBUkdFX1VTQl9TVVNQXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0NIQVJHRV9VU0JfU1VTUCwgMCk7CiAKQEAgLTk3NiwxOSArOTc2LDE5IEBACiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19DT0RFQ19SRVNFVCwgImNzNDI3MCByZXNldCIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVxdWVzdCBHUElPX0NPREVDX1JFU0VUXG4iKTsKKwkJcHJfd2FybigidW5hYmxlIHRvIHJlcXVlc3QgR1BJT19DT0RFQ19SRVNFVFxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19DT0RFQ19SRVNFVCwgMSk7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19TUERJRl9SRVNFVCwgImFrNDEwNCBzL3BkaWYgcmVzZXQiKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlcXVlc3QgR1BJT19TUERJRl9SRVNFVFxuIik7CisJCXByX3dhcm4oInVuYWJsZSB0byByZXF1ZXN0IEdQSU9fU1BESUZfUkVTRVRcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fU1BESUZfUkVTRVQsIDEpOwogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTUNMS19SRVNFVCwgIk1DTEsgcmVzZXQiKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlcXVlc3QgR1BJT19NQ0xLX1JFU0VUXG4iKTsKKwkJcHJfd2FybigidW5hYmxlIHRvIHJlcXVlc3QgR1BJT19NQ0xLX1JFU0VUXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX01DTEtfUkVTRVQsIDEpOwogCkBAIC0xMDE5LDIwICsxMDE5LDIwIEBACiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19XMldfUkVTRVQsICJXaTJXaSByZXNldCIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1cyV19SRVNFVFxuIik7CisJCXByX3dhcm4oIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fVzJXX1JFU0VUXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1cyV19SRVNFVCwgMCk7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19XMldfUEROLCAiV2kyV2kgcG93ZXJ1cCIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1cyV19QRE5cbiIpOworCQlwcl93YXJuKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1cyV19QRE5cbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fVzJXX1BETiwgMCk7CiAKIAkvKiB0aGlzIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCBvZmYgdGhlIGRldmljZSAqLwogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1NIVVRET1dOX1NVUFBMWSwgInN1cHBseSBzaHV0ZG93biIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1NIVVRET1dOX1NVUFBMWVxuIik7CisJCXByX3dhcm4oIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fU0hVVERPV05fU1VQUExZXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1NIVVRET1dOX1NVUFBMWSwgMCk7CiAKQEAgLTEwNTEsNyArMTA1MSw3IEBACiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19TSFVURE9XTl9CQVRULCAiYmF0dGVyeSBzaHV0ZG93biIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1NIVVRET1dOX0JBVFRcbiIpOworCQlwcl93YXJuKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1NIVVRET1dOX0JBVFRcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fU0hVVERPV05fQkFUVCwgMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCBjMTU4YTZlLi43NzgwZDFmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyL2dwaW8tY2hhcmdlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KQEAgLTM2MSw0NCArMzYxLDE3IEBACiAvKgogICogVG9zYSBBQyBJTgogICovCi1zdGF0aWMgaW50IHRvc2FfcG93ZXJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldCA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fQUNfSU4sICJhYyBpbiIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX2dwaW9fcmVxOwotCi0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoVE9TQV9HUElPX0FDX0lOKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9ncGlvX2luOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9ncGlvX2luOgotCWdwaW9fZnJlZShUT1NBX0dQSU9fQUNfSU4pOwotZXJyX2dwaW9fcmVxOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHRvc2FfcG93ZXJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19BQ19JTik7Ci19Ci0KLXN0YXRpYyBpbnQgdG9zYV9wb3dlcl9hY19vbmxpbmUodm9pZCkKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoVE9TQV9HUElPX0FDX0lOKSA9PSAwOwotfQotCiBzdGF0aWMgY2hhciAqdG9zYV9hY19zdXBwbGllZF90b1tdID0gewogCSJtYWluLWJhdHRlcnkiLAogCSJiYWNrdXAtYmF0dGVyeSIsCiAJImphY2tldC1iYXR0ZXJ5IiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGRhX3Bvd2VyX3BkYXRhIHRvc2FfcG93ZXJfZGF0YSA9IHsKLQkuaW5pdAkJCT0gdG9zYV9wb3dlcl9pbml0LAotCS5pc19hY19vbmxpbmUJCT0gdG9zYV9wb3dlcl9hY19vbmxpbmUsCi0JLmV4aXQJCQk9IHRvc2FfcG93ZXJfZXhpdCwKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGFyZ2VyX3BsYXRmb3JtX2RhdGEgdG9zYV9wb3dlcl9kYXRhID0geworCS5uYW1lCQkJPSAiY2hhcmdlciIsCisJLnR5cGUJCQk9IFBPV0VSX1NVUFBMWV9UWVBFX01BSU5TLAorCS5ncGlvCQkJPSBUT1NBX0dQSU9fQUNfSU4sCisJLmdwaW9fYWN0aXZlX2xvdwk9IDEsCiAJLnN1cHBsaWVkX3RvCQk9IHRvc2FfYWNfc3VwcGxpZWRfdG8sCiAJLm51bV9zdXBwbGljYW50cwk9IEFSUkFZX1NJWkUodG9zYV9hY19zdXBwbGllZF90byksCiB9OwpAQCAtNDE1LDcgKzM4OCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0b3NhX3Bvd2VyX2RldmljZSA9IHsKLQkubmFtZQkJCT0gInBkYS1wb3dlciIsCisJLm5hbWUJCQk9ICJncGlvLWNoYXJnZXIiLAogCS5pZAkJCT0gLTEsCiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnRvc2FfcG93ZXJfZGF0YSwKIAkucmVzb3VyY2UJCT0gdG9zYV9wb3dlcl9yZXNvdXJjZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCA5ZGIyMDI5Li41NjU5MjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC0xLDYgKzEsMTkgQEAKIG1lbnUgIlJlYWxWaWV3IHBsYXRmb3JtIHR5cGUiCiAJZGVwZW5kcyBvbiBBUkNIX1JFQUxWSUVXCiAKK2NvbmZpZyBSRUFMVklFV19EVAorCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcoUikgRGV2aWNlIFRyZWUgYmFzZWQgYm9vdCIKKwlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBNRkRfU1lTQ09OCisJc2VsZWN0IFBPV0VSX1JFU0VUCisJc2VsZWN0IFBPV0VSX1JFU0VUX1ZFUlNBVElMRQorCXNlbGVjdCBQT1dFUl9TVVBQTFkKKwlzZWxlY3QgU09DX1JFQUxWSUVXCisJc2VsZWN0IFVTRV9PRgorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgYm9vdGluZyB0aGUgQVJNKFIpIFJlYWxWaWV3KFIpIGV2YWx1YXRpb24KKwkgIGJvYXJkcyB1c2luZyBhIGRldmljZSB0cmVlIG1hY2hpbmUgZGVzY3JpcHRpb24uCisKIGNvbmZpZyBNQUNIX1JFQUxWSUVXX0VCCiAJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBFbXVsYXRpb24gQmFzZWJvYXJkIgogCXNlbGVjdCBBUk1fR0lDCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9NYWtlZmlsZQppbmRleCA1NDFmYTRjLi5lMDdmZGY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUKQEAgLTMsNiArMyw3IEBACiAjCiAKIG9iai15CQkJCQk6PSBjb3JlLm8KK29iai0kKENPTkZJR19SRUFMVklFV19EVCkJCSs9IHJlYWx2aWV3LWR0Lm8KIG9iai0kKENPTkZJR19NQUNIX1JFQUxWSUVXX0VCKQkJKz0gcmVhbHZpZXdfZWIubwogb2JqLSQoQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMU1QKQkrPSByZWFsdmlld19wYjExbXAubwogb2JqLSQoQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMTc2KQkrPSByZWFsdmlld19wYjExNzYubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlldy1kdC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlldy1kdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjhiODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3LWR0LmMKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBMaW5hcm8gTHRkLgorICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CisjaW5jbHVkZSAiY29yZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqcmVhbHZpZXdfZHRfcGxhdGZvcm1fY29tcGF0W10gX19pbml0Y29uc3QgPSB7CisJImFybSxyZWFsdmlldy1lYiIsCisJImFybSxyZWFsdmlldy1wYjExNzYiLAorCSJhcm0scmVhbHZpZXctcGIxMW1wIiwKKwkiYXJtLHJlYWx2aWV3LXBiYTgiLAorCSJhcm0scmVhbHZpZXctcGJ4IiwKKwlOVUxMLAorfTsKKworRFRfTUFDSElORV9TVEFSVChSRUFMVklFV19EVCwgIkFSTSBSZWFsVmlldyBNYWNoaW5lIChEZXZpY2UgVHJlZSBTdXBwb3J0KSIpCisjaWZkZWYgQ09ORklHX1pPTkVfRE1BCisJLmRtYV96b25lX3NpemUJPSBTWl8yNTZNLAorI2VuZGlmCisJLmR0X2NvbXBhdAk9IHJlYWx2aWV3X2R0X3BsYXRmb3JtX2NvbXBhdCwKKwkubDJjX2F1eF92YWwgPSAweDAsCisJLmwyY19hdXhfbWFzayA9IH4weDAsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9oZWFkc21wLlMgYi9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL2hlYWRzbXAuUwppbmRleCA3MzIwNmUzLi40NmMyMmRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL2hlYWRzbXAuUworKysgYi9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL2hlYWRzbXAuUwpAQCAtMTYsNyArMTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKIEVOVFJZKHJvY2tjaGlwX3NlY29uZGFyeV9zdGFydHVwKQotCWJsCXY3X2ludmFsaWRhdGVfbDEKKwltcmMJcDE1LCAwLCByMCwgYzAsIGMwLCAwCUAgcmVhZCBtYWluIElEIHJlZ2lzdGVyCisJbGRyCXIxLCA9MHgwMDAwMGMwOQkJQCBDb3J0ZXgtQTkgcHJpbWFyeSBwYXJ0IG51bWJlcgorCXRlcQlyMCwgcjEKKwliZXEJdjdfaW52YWxpZGF0ZV9sMQogCWIJc2Vjb25kYXJ5X3N0YXJ0dXAKIEVORFBST0Mocm9ja2NoaXBfc2Vjb25kYXJ5X3N0YXJ0dXApCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9wbGF0c21wLmMKaW5kZXggMTg5Njg0Zi4uZjI2ZmNkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9wbGF0c21wLmMKQEAgLTE5LDcgKzE5LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NwMTUuaD4KICNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgpAQCAtMzcsMjMgKzQxLDc4IEBACiAKICNkZWZpbmUgUE1VX1BXUkROX1NDVQkJNAogCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpwbXVfYmFzZV9hZGRyOworc3RhdGljIHN0cnVjdCByZWdtYXAgKnBtdTsKIAotc3RhdGljIGlubGluZSBib29sIHBtdV9wb3dlcl9kb21haW5faXNfb24oaW50IHBkKQorc3RhdGljIGludCBwbXVfcG93ZXJfZG9tYWluX2lzX29uKGludCBwZCkKIHsKLQlyZXR1cm4gIShyZWFkbF9yZWxheGVkKHBtdV9iYXNlX2FkZHIgKyBQTVVfUFdSRE5fU1QpICYgQklUKHBkKSk7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnbWFwX3JlYWQocG11LCBQTVVfUFdSRE5fU1QsICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuICEodmFsICYgQklUKHBkKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBtdV9zZXRfcG93ZXJfZG9tYWluKGludCBwZCwgYm9vbCBvbikKK3N0cnVjdCByZXNldF9jb250cm9sICpyb2NrY2hpcF9nZXRfY29yZV9yZXNldChpbnQgY3B1KQogewotCXUzMiB2YWwgPSByZWFkbF9yZWxheGVkKHBtdV9iYXNlX2FkZHIgKyBQTVVfUFdSRE5fQ09OKTsKLQlpZiAob24pCi0JCXZhbCAmPSB+QklUKHBkKTsKLQllbHNlCi0JCXZhbCB8PSAgQklUKHBkKTsKLQl3cml0ZWwodmFsLCBwbXVfYmFzZV9hZGRyICsgUE1VX1BXUkROX0NPTik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZ2V0X2NwdV9kZXZpY2UoY3B1KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCi0Jd2hpbGUgKHBtdV9wb3dlcl9kb21haW5faXNfb24ocGQpICE9IG9uKSB7IH0KKwkvKiBUaGUgY3B1IGRldmljZSBpcyBvbmx5IGF2YWlsYWJsZSBhZnRlciB0aGUgaW5pdGlhbCBjb3JlIGJyaW5ndXAgKi8KKwlpZiAoZGV2KQorCQlucCA9IGRldi0+b2Zfbm9kZTsKKwllbHNlCisJCW5wID0gb2ZfZ2V0X2NwdV9ub2RlKGNwdSwgMCk7CisKKwlyZXR1cm4gb2ZfcmVzZXRfY29udHJvbF9nZXQobnAsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHBtdV9zZXRfcG93ZXJfZG9tYWluKGludCBwZCwgYm9vbCBvbikKK3sKKwl1MzIgdmFsID0gKG9uKSA/IDAgOiBCSVQocGQpOworCWludCByZXQ7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gc29mdCByZXNldCB0aGUgY3B1IHdoZW4gd2UgdHVybiBvZmYgdGhlIGNwdSBwb3dlciBkb21haW4sCisJICogb3IgZWxzZSB0aGUgYWN0aXZlIHByb2Nlc3NvcnMgbWlnaHQgYmUgc3RhbGxlZCB3aGVuIHRoZSBpbmRpdmlkdWFsCisJICogcHJvY2Vzc29yIGlzIHBvd2VyZWQgZG93bi4KKwkgKi8KKwlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgIT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkgeworCQlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0YyA9IHJvY2tjaGlwX2dldF9jb3JlX3Jlc2V0KHBkKTsKKworCQlpZiAoSVNfRVJSKHJzdGMpKSB7CisJCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgZ2V0IHJlc2V0IGNvbnRyb2wgZm9yIGNvcmUgJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHBkKTsKKwkJCXJldHVybiBQVFJfRVJSKHJzdGMpOworCQl9CisKKwkJaWYgKG9uKQorCQkJcmVzZXRfY29udHJvbF9kZWFzc2VydChyc3RjKTsKKwkJZWxzZQorCQkJcmVzZXRfY29udHJvbF9hc3NlcnQocnN0Yyk7CisKKwkJcmVzZXRfY29udHJvbF9wdXQocnN0Yyk7CisJfQorCisJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHBtdSwgUE1VX1BXUkROX0NPTiwgQklUKHBkKSwgdmFsKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgdXBkYXRlIHBvd2VyIGRvbWFpblxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IC0xOworCXdoaWxlIChyZXQgIT0gb24pIHsKKwkJcmV0ID0gcG11X3Bvd2VyX2RvbWFpbl9pc19vbihwZCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgcmVhZCBwb3dlciBkb21haW4gc3RhdGVcbiIsCisJCQkJIF9fZnVuY19fKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTYzLDcgKzEyMiw5IEBACiBzdGF0aWMgaW50IF9fY3B1aW5pdCByb2NrY2hpcF9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LAogCQkJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKIHsKLQlpZiAoIXNyYW1fYmFzZV9hZGRyIHx8ICFwbXVfYmFzZV9hZGRyKSB7CisJaW50IHJldDsKKworCWlmICghc3JhbV9iYXNlX2FkZHIgfHwgIXBtdSkgewogCQlwcl9lcnIoIiVzOiBzcmFtIG9yIHBtdSBtaXNzaW5nIGZvciBjcHUgYm9vdFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOWElPOwogCX0KQEAgLTc1LDcgKzEzNiwyNCBAQAogCX0KIAogCS8qIHN0YXJ0IHRoZSBjb3JlICovCi0JcG11X3NldF9wb3dlcl9kb21haW4oMCArIGNwdSwgdHJ1ZSk7CisJcmV0ID0gcG11X3NldF9wb3dlcl9kb21haW4oMCArIGNwdSwgdHJ1ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgIT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkgeworCQkvKiBXZSBjb21tdW5pY2F0ZSB3aXRoIHRoZSBib290cm9tIHRvIGFjdGl2ZSB0aGUgY3B1cyBvdGhlcgorCQkgKiB0aGFuIGNwdTAsIGFmdGVyIGEgYmxvYiBvZiBpbml0aWFsaXplIGNvZGUsIHRoZXkgd2lsbAorCQkgKiBzdGF5IGF0IHdmZSBzdGF0ZSwgb25jZSB0aGV5IGFyZSBhY3RpdmVkLCB0aGV5IHdpbGwgY2hlY2sKKwkJICogdGhlIG1haWxib3g6CisJCSAqIHNyYW1fYmFzZV9hZGRyICsgNDogMHhkZWFkYmVhZgorCQkgKiBzcmFtX2Jhc2VfYWRkciArIDg6IHN0YXJ0IGFkZHJlc3MgZm9yIHBjCisJCSAqICovCisJCXVkZWxheSgxMCk7CisJCXdyaXRlbCh2aXJ0X3RvX3BoeXMocm9ja2NoaXBfc2Vjb25kYXJ5X3N0YXJ0dXApLAorCQkJc3JhbV9iYXNlX2FkZHIgKyA4KTsKKwkJd3JpdGVsKDB4REVBREJFQUYsIHNyYW1fYmFzZV9hZGRyICsgNCk7CisJCWRzYl9zZXYoKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMCw4ICsxODgsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzcmFtX2Jhc2VfYWRkciA9IG9mX2lvbWFwKG5vZGUsIDApOwotCiAJLyogc2V0IHRoZSBib290IGZ1bmN0aW9uIGZvciB0aGUgc3JhbSBjb2RlICovCiAJcm9ja2NoaXBfYm9vdF9mbiA9IHZpcnRfdG9fcGh5cyhyb2NrY2hpcF9zZWNvbmRhcnlfc3RhcnR1cCk7CiAKQEAgLTEyNSw1NSArMjAxLDExNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgcm9ja2NoaXBfcG11X3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gMzIsCisJLnZhbF9iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcm9ja2NoaXBfc21wX3ByZXBhcmVfcG11KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCXZvaWQgX19pb21lbSAqcG11X2Jhc2U7CisKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgdmlhIHNtcF9vcHMtPnNtcF9wcmVwYXJlX2NwdSgpLgorCSAqIFRoYXQgb25seSBoYXBwZW5zIGlmIGEgIi9jcHVzIiBkZXZpY2UgdHJlZSBub2RlIGV4aXN0cworCSAqIGFuZCBoYXMgYW4gImVuYWJsZS1tZXRob2QiIHByb3BlcnR5IHRoYXQgc2VsZWN0cyB0aGUgU01QCisJICogb3BlcmF0aW9ucyBkZWZpbmVkIGhlcmVpbi4KKwkgKi8KKwlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jcHVzIik7CisKKwlwbXUgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5vZGUsICJyb2NrY2hpcCxwbXUiKTsKKwlvZl9ub2RlX3B1dChub2RlKTsKKwlpZiAoIUlTX0VSUihwbXUpKQorCQlyZXR1cm4gMDsKKworCXBtdSA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUoInJvY2tjaGlwLHJrMzA2Ni1wbXUiKTsKKwlpZiAoIUlTX0VSUihwbXUpKQorCQlyZXR1cm4gMDsKKworCS8qIGZhbGxiYWNrLCBjcmVhdGUgb3VyIG93biByZWdtYXAgZm9yIHRoZSBwbXUgYXJlYSAqLworCXBtdSA9IE5VTEw7CisJbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJyb2NrY2hpcCxyazMwNjYtcG11Iik7CisJaWYgKCFub2RlKSB7CisJCXByX2VycigiJXM6IGNvdWxkIG5vdCBmaW5kIHBtdSBkdCBub2RlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBtdV9iYXNlID0gb2ZfaW9tYXAobm9kZSwgMCk7CisJaWYgKCFwbXVfYmFzZSkgeworCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgbWFwIHBtdSByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG11ID0gcmVnbWFwX2luaXRfbW1pbyhOVUxMLCBwbXVfYmFzZSwgJnJvY2tjaGlwX3BtdV9yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKHBtdSkpIHsKKwkJaW50IHJldCA9IFBUUl9FUlIocG11KTsKKworCQlpb3VubWFwKHBtdV9iYXNlKTsKKwkJcG11ID0gTlVMTDsKKwkJcHJfZXJyKCIlczogcmVnbWFwIGluaXQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByb2NrY2hpcF9zbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImFybSxjb3J0ZXgtYTktc2N1Iik7Ci0JaWYgKCFub2RlKSB7Ci0JCXByX2VycigiJXM6IG1pc3Npbmcgc2N1XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzY3VfYmFzZV9hZGRyID0gb2ZfaW9tYXAobm9kZSwgMCk7Ci0JaWYgKCFzY3VfYmFzZV9hZGRyKSB7Ci0JCXByX2VycigiJXM6IGNvdWxkIG5vdCBtYXAgc2N1IHJlZ2lzdGVyc1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCiAJbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJyb2NrY2hpcCxyazMwNjYtc21wLXNyYW0iKTsKIAlpZiAoIW5vZGUpIHsKIAkJcHJfZXJyKCIlczogY291bGQgbm90IGZpbmQgc3JhbSBkdCBub2RlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAocm9ja2NoaXBfc21wX3ByZXBhcmVfc3JhbShub2RlKSkKLQkJcmV0dXJuOwotCi0Jbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJyb2NrY2hpcCxyazMwNjYtcG11Iik7Ci0JaWYgKCFub2RlKSB7Ci0JCXByX2VycigiJXM6IGNvdWxkIG5vdCBmaW5kIHBtdSBkdCBub2RlXG4iLCBfX2Z1bmNfXyk7CisJc3JhbV9iYXNlX2FkZHIgPSBvZl9pb21hcChub2RlLCAwKTsKKwlpZiAoIXNyYW1fYmFzZV9hZGRyKSB7CisJCXByX2VycigiJXM6IGNvdWxkIG5vdCBtYXAgc3JhbSByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCXBtdV9iYXNlX2FkZHIgPSBvZl9pb21hcChub2RlLCAwKTsKLQlpZiAoIXBtdV9iYXNlX2FkZHIpIHsKLQkJcHJfZXJyKCIlczogY291bGQgbm90IG1hcCBwbXUgcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKHJvY2tjaGlwX3NtcF9wcmVwYXJlX3BtdSgpKQogCQlyZXR1cm47CisKKwlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkgeworCQlpZiAocm9ja2NoaXBfc21wX3ByZXBhcmVfc3JhbShub2RlKSkKKwkJCXJldHVybjsKKworCQkvKiBlbmFibGUgdGhlIFNDVSBwb3dlciBkb21haW4gKi8KKwkJcG11X3NldF9wb3dlcl9kb21haW4oUE1VX1BXUkROX1NDVSwgdHJ1ZSk7CisKKwkJbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJhcm0sY29ydGV4LWE5LXNjdSIpOworCQlpZiAoIW5vZGUpIHsKKwkJCXByX2VycigiJXM6IG1pc3Npbmcgc2N1XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm47CisJCX0KKworCQlzY3VfYmFzZV9hZGRyID0gb2ZfaW9tYXAobm9kZSwgMCk7CisJCWlmICghc2N1X2Jhc2VfYWRkcikgeworCQkJcHJfZXJyKCIlczogY291bGQgbm90IG1hcCBzY3UgcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKgorCQkgKiBXaGlsZSB0aGUgbnVtYmVyIG9mIGNwdXMgaXMgZ2F0aGVyZWQgZnJvbSBkdCwgYWxzbyBnZXQgdGhlCisJCSAqIG51bWJlciBvZiBjb3JlcyBmcm9tIHRoZSBzY3UgdG8gdmVyaWZ5IHRoaXMgdmFsdWUgd2hlbgorCQkgKiBib290aW5nIHRoZSBjb3Jlcy4KKwkJICovCisJCW5jb3JlcyA9IHNjdV9nZXRfY29yZV9jb3VudChzY3VfYmFzZV9hZGRyKTsKKwkJcHJfZXJyKCIlczogbmNvcmVzICVkXG4iLCBfX2Z1bmNfXywgbmNvcmVzKTsKKworCQlzY3VfZW5hYmxlKHNjdV9iYXNlX2FkZHIpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBsMmN0bHI7CisKKwkJYXNtICgibXJjIHAxNSwgMSwgJTAsIGM5LCBjMCwgMlxuIiA6ICI9ciIgKGwyY3RscikpOworCQluY29yZXMgPSAoKGwyY3RsciA+PiAyNCkgJiAweDMpICsgMTsKIAl9CiAKLQkvKiBlbmFibGUgdGhlIFNDVSBwb3dlciBkb21haW4gKi8KLQlwbXVfc2V0X3Bvd2VyX2RvbWFpbihQTVVfUFdSRE5fU0NVLCB0cnVlKTsKLQotCS8qCi0JICogV2hpbGUgdGhlIG51bWJlciBvZiBjcHVzIGlzIGdhdGhlcmVkIGZyb20gZHQsIGFsc28gZ2V0IHRoZSBudW1iZXIKLQkgKiBvZiBjb3JlcyBmcm9tIHRoZSBzY3UgdG8gdmVyaWZ5IHRoaXMgdmFsdWUgd2hlbiBib290aW5nIHRoZSBjb3Jlcy4KLQkgKi8KLQluY29yZXMgPSBzY3VfZ2V0X2NvcmVfY291bnQoc2N1X2Jhc2VfYWRkcik7Ci0KLQlzY3VfZW5hYmxlKHNjdV9iYXNlX2FkZHIpOwotCiAJLyogTWFrZSBzdXJlIHRoYXQgYWxsIGNvcmVzIGV4Y2VwdCB0aGUgZmlyc3QgYXJlIHJlYWxseSBvZmYgKi8KIAlmb3IgKGkgPSAxOyBpIDwgbmNvcmVzOyBpKyspCiAJCXBtdV9zZXRfcG93ZXJfZG9tYWluKDAgKyBpLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3JvY2tjaGlwLmMgYi9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3JvY2tjaGlwLmMKaW5kZXggOGFiOWUwZS4uZDIyNmI3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9yb2NrY2hpcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcm9ja2NoaXAuYwpAQCAtMjQsNiArMjQsMTIgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgogI2luY2x1ZGUgImNvcmUuaCIKIAorc3RhdGljIHZvaWQgX19pbml0IHJvY2tjaGlwX2R0X2luaXQodm9pZCkKK3sKKwlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwgTlVMTCwgTlVMTCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiY3B1ZnJlcS1kdCIsIDAsIE5VTEwsIDApOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJvY2tjaGlwX2JvYXJkX2R0X2NvbXBhdFtdID0gewogCSJyb2NrY2hpcCxyazI5MjgiLAogCSJyb2NrY2hpcCxyazMwNjZhIiwKQEAgLTM3LDQgKzQzLDUgQEAKIAkubDJjX2F1eF92YWwJPSAwLAogCS5sMmNfYXV4X21hc2sJPSB+MCwKIAkuZHRfY29tcGF0CT0gcm9ja2NoaXBfYm9hcmRfZHRfY29tcGF0LAorCS5pbml0X21hY2hpbmUJPSByb2NrY2hpcF9kdF9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BjaS1uYW5vZW5naW5lLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jCmluZGV4IGZmMDJlMmRhLi5iNzA0NDMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BjaS1uYW5vZW5naW5lLmMKQEAgLTMzLDEyICszMywxMiBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhuYW5vX2xvY2spOwogCiBzdGF0aWMgaW50IG5hbm9lbmdpbmVfZ2V0X3BjaV9hZGRyZXNzKHN0cnVjdCBwY2lfYnVzICpidXMsCi0JdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHVuc2lnbmVkIGxvbmcgKmFkZHJlc3MpCisJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHZvaWQgX19pb21lbSAqKmFkZHJlc3MpCiB7CiAJaW50IHJldCA9IFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIAl1bnNpZ25lZCBpbnQgYnVzbnIgPSBidXMtPm51bWJlcjsKIAotCSphZGRyZXNzID0gTkFOT19QQ0lfQ09ORklHX1NQQUNFX1ZJUlQgKworCSphZGRyZXNzID0gKHZvaWQgX19pb21lbSAqKU5BTk9fUENJX0NPTkZJR19TUEFDRV9WSVJUICsKIAkJKChidXMtPm51bWJlciA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiB+MykpOwogCiAJcmV0ID0gKGJ1c25yID4gMjU1IHx8IGRldmZuID4gMjU1IHx8IHdoZXJlID4gMjU1KSA/CkBAIC01MSw3ICs1MSw3IEBACiAJaW50IHNpemUsIHUzMiAqdmFsKQogewogCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXZvaWQgX19pb21lbSAqYWRkcmVzczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB2OwogCkBAIC04NSw3ICs4NSw3IEBACiAJaW50IHNpemUsIHUzMiB2YWwpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJdm9pZCBfX2lvbWVtICphZGRyZXNzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgc2hpZnQ7CiAJdTMyIHY7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKaW5kZXggMjFmNDU3Yi4uMWI0ZmFmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZwpAQCAtMSw1ICsxLDYgQEAKIGNvbmZpZyBBUkNIX1NITU9CSUxFCiAJYm9vbAorCXNlbGVjdCBaT05FX0RNQSBpZiBBUk1fTFBBRQogCiBjb25maWcgUE1fUkNBUgogCWJvb2wKQEAgLTE4LDYgKzE5LDcgQEAKIAlzZWxlY3QgUE1fUkNBUiBpZiBQTSB8fCBTTVAKIAlzZWxlY3QgUkVORVNBU19JUlFDCiAJc2VsZWN0IFNZU19TVVBQT1JUU19TSF9DTVQKKwlzZWxlY3QgUENJX0RPTUFJTlMgaWYgUENJCiAKIGNvbmZpZyBBUkNIX1JNT0JJTEUKIAlib29sCkBAIC0zNiw3ICszOCw2IEBACiAJc2VsZWN0IE5PX0lPUE9SVF9NQVAKIAlzZWxlY3QgUElOQ1RSTAogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgotCXNlbGVjdCBBUkNIX0hBU19PUFAKIAogaWYgQVJDSF9TSE1PQklMRV9NVUxUSQogCkBAIC03MywxMSArNzQsNiBAQAogCiBjb21tZW50ICJSZW5lc2FzIEFSTSBTb0NzIEJvYXJkIFR5cGUiCiAKLWNvbmZpZyBNQUNIX0tPRUxTQ0gKLQlib29sICJLb2Vsc2NoIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9SOEE3NzkxCi0Jc2VsZWN0IE1JQ1JFTF9QSFkgaWYgU0hfRVRICi0KIGNvbmZpZyBNQUNIX0xBR0VSCiAJYm9vbCAiTGFnZXIgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX1I4QTc3OTAKQEAgLTE0NSwxNCArMTQxLDYgQEAKIAlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKIAlzZWxlY3QgQVJDSF9ETUFfQUREUl9UXzY0QklUIGlmIEFSTV9MUEFFCiAKLWNvbmZpZyBBUkNIX1I4QTc3OTEKLQlib29sICJSLUNhciBNMi1XIChSOEE3NzkxMCkiCi0Jc2VsZWN0IEFSQ0hfUkNBUl9HRU4yCi0Jc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCi0Jc2VsZWN0IEFSTV9HSUMKLQlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKLQlzZWxlY3QgQVJDSF9ETUFfQUREUl9UXzY0QklUIGlmIEFSTV9MUEFFCi0KIGNvbW1lbnQgIlJlbmVzYXMgQVJNIFNvQ3MgQm9hcmQgVHlwZSIKIAogY29uZmlnIE1BQ0hfQVBFNkVWTQpAQCAtMjI3LDEyICsyMTUsNiBAQAogCXNlbGVjdCBNSUNSRUxfUEhZIGlmIFNIX0VUSAogCXNlbGVjdCBTTkRfU09DX0FLNDY0MiBpZiBTTkRfU0lNUExFX0NBUkQKIAotY29uZmlnIE1BQ0hfS09FTFNDSAotCWJvb2wgIktvZWxzY2ggYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX1I4QTc3OTEKLQlzZWxlY3QgVVNFX09GCi0Jc2VsZWN0IE1JQ1JFTF9QSFkgaWYgU0hfRVRICi0KIGNvbmZpZyBNQUNIX0taTTlHCiAJYm9vbCAiS1pNLUE5LUdUIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9TSDczQTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlCmluZGV4IGUyMGYyNzguLmI1NWNhYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZQpAQCAtMTksOCArMTksOCBAQAogb2JqLSQoQ09ORklHX0FSQ0hfUjdTNzIxMDApCSs9IHNldHVwLXI3czcyMTAwLm8KIAogIyBDbG9jayBvYmplY3RzCi1vYmoteQkJCQkrPSBjbG9jay5vCiBpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEsKK29iai15CQkJCSs9IGNsb2NrLm8KIG9iai0kKENPTkZJR19BUkNIX1NINzM3MikJKz0gY2xvY2stc2g3MzcyLm8KIG9iai0kKENPTkZJR19BUkNIX1NINzNBMCkJKz0gY2xvY2stc2g3M2EwLm8KIG9iai0kKENPTkZJR19BUkNIX1I4QTczQTQpCSs9IGNsb2NrLXI4YTczYTQubwpAQCAtMjgsNyArMjgsNiBAQAogb2JqLSQoQ09ORklHX0FSQ0hfUjhBNzc3OCkJKz0gY2xvY2stcjhhNzc3OC5vCiBvYmotJChDT05GSUdfQVJDSF9SOEE3Nzc5KQkrPSBjbG9jay1yOGE3Nzc5Lm8KIG9iai0kKENPTkZJR19BUkNIX1I4QTc3OTApCSs9IGNsb2NrLXI4YTc3OTAubwotb2JqLSQoQ09ORklHX0FSQ0hfUjhBNzc5MSkJKz0gY2xvY2stcjhhNzc5MS5vCiBlbmRpZgogCiAjIENQVSByZXNldCB2ZWN0b3IgaGFuZGxpbmcgb2JqZWN0cwpAQCAtMzYsNiArMzUsNyBAQAogCiAjIFNoYXJlZCBTb0MgZmFtaWx5IG9iamVjdHMKIG9iai0kKENPTkZJR19BUkNIX1JDQVJfR0VOMikJKz0gc2V0dXAtcmNhci1nZW4yLm8gcGxhdHNtcC1hcG11Lm8gJChjcHUteSkKK0NGTEFHU19zZXR1cC1yY2FyLWdlbjIubwkrPSAtbWFyY2g9YXJtdjctYQogCiAjIFNNUCBvYmplY3RzCiBzbXAteQkJCQk6PSAkKGNwdS15KQpAQCAtNTcsNyArNTcsNiBAQAogCiAjIEJvYXJkIG9iamVjdHMKIGlmZGVmIENPTkZJR19BUkNIX1NITU9CSUxFX01VTFRJCi1vYmotJChDT05GSUdfTUFDSF9LT0VMU0NIKQkrPSBib2FyZC1rb2Vsc2NoLXJlZmVyZW5jZS5vCiBvYmotJChDT05GSUdfTUFDSF9MQUdFUikJKz0gYm9hcmQtbGFnZXItcmVmZXJlbmNlLm8KIG9iai0kKENPTkZJR19NQUNIX01BUlpFTikJKz0gYm9hcmQtbWFyemVuLXJlZmVyZW5jZS5vCiBlbHNlCkBAIC02OSw3ICs2OCw2IEBACiBvYmotJChDT05GSUdfTUFDSF9NQVJaRU4pCSs9IGJvYXJkLW1hcnplbi5vCiBvYmotJChDT05GSUdfTUFDSF9MQUdFUikJKz0gYm9hcmQtbGFnZXIubwogb2JqLSQoQ09ORklHX01BQ0hfQVJNQURJTExPODAwRVZBKQkrPSBib2FyZC1hcm1hZGlsbG84MDBldmEubwotb2JqLSQoQ09ORklHX01BQ0hfS09FTFNDSCkJKz0gYm9hcmQta29lbHNjaC5vCiBvYmotJChDT05GSUdfTUFDSF9LWk05RykJKz0gYm9hcmQta3ptOWcubwogb2JqLSQoQ09ORklHX01BQ0hfS1pNOUdfUkVGRVJFTkNFKQkrPSBib2FyZC1rem05Zy1yZWZlcmVuY2UubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUuYm9vdAppbmRleCBkZTlhMjM4Li41N2QwMGVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlLmJvb3QKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZS5ib290CkBAIC01LDcgKzUsNiBAQAogbG9hZGFkZHItJChDT05GSUdfTUFDSF9BUk1BRElMTE84MDBFVkEpICs9IDB4NDAwMDgwMDAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfQk9DS1cpICs9IDB4NjAwMDgwMDAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfQk9DS1dfUkVGRVJFTkNFKSArPSAweDYwMDA4MDAwCi1sb2FkYWRkci0kKENPTkZJR19NQUNIX0tPRUxTQ0gpICs9IDB4NDAwMDgwMDAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfS1pNOUcpICs9IDB4NDEwMDgwMDAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfS1pNOUdfUkVGRVJFTkNFKSArPSAweDQxMDA4MDAwCiBsb2FkYWRkci0kKENPTkZJR19NQUNIX0xBR0VSKSArPSAweDQwMDA4MDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwZTZldm0tcmVmZXJlbmNlLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwZTZldm0tcmVmZXJlbmNlLmMKaW5kZXggYTY1MDNkOC4uM2I2ODM3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcGU2ZXZtLXJlZmVyZW5jZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS1yZWZlcmVuY2UuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpAQCAtNDgsNyArNDQsNiBAQAogCWNsa19wdXQocGFyZW50KTsKIAljbGtfcHV0KG1wKTsKIAotCXI4YTczYTRfYWRkX2R0X2RldmljZXMoKTsKIAlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwgTlVMTCwgTlVMTCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcGU2ZXZtLmMKaW5kZXggYjIyMmY2OC4uNjZmNjc4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcGU2ZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcGU2ZXZtLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXJtYWRpbGxvODAwZXZhLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFybWFkaWxsbzgwMGV2YS5jCmluZGV4IGU3MDk4MzUuLjZkOTQ5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXJtYWRpbGxvODAwZXZhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcm1hZGlsbG84MDBldmEuYwpAQCAtMTIsNTMgKzEyLDQ4IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zdDEyMzJfcGRhdGEuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgotI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3B3bS5oPgotI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZ3Bpby1yZWd1bGF0b3IuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NoX2V0aC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9yZW5lc2FzX3VzYmhzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2hfbW1jaWYuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2hfbW9iaWxlX3NkaGkuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc3QxMjMyX3BkYXRhLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHdtLmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZ3Bpby1yZWd1bGF0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2V0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9yZW5lc2FzX3VzYmhzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKLSNpbmNsdWRlIDxtZWRpYS9tdDl0MTEyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgotI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+Ci0jaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KLSNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfaGRtaS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bWVkaWEvbXQ5dDExMi5oPgorI2luY2x1ZGUgPG1lZGlhL3NoX21vYmlsZV9jZXUuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAjaW5jbHVkZSA8c291bmQvc2hfZnNpLmg+CiAjaW5jbHVkZSA8c291bmQvc2ltcGxlX2NhcmQuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfaGRtaS5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJpcnFzLmgiCkBAIC0xMjM0LDggKzEyMjksMTUgQEAKIAlzdGF0aWMgc3RydWN0IHBtX2RvbWFpbl9kZXZpY2UgZG9tYWluX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCQl7ICJBNExDIiwgJmxjZGMwX2RldmljZSB9LAogCQl7ICJBNExDIiwgJmhkbWlfbGNkY19kZXZpY2UgfSwKKwkJeyAiQTRNUCIsICZoZG1pX2RldmljZSB9LAorCQl7ICJBNE1QIiwgJmZzaV9kZXZpY2UgfSwKKwkJeyAiQTRSIiwgICZjZXUwX2RldmljZSB9LAorCQl7ICJBNFMiLCAgJnNoX2V0aF9kZXZpY2UgfSwKKwkJeyAiQTNTUCIsICZwd21fZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmc2RoaTBfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmc2hfbW1jaWZfZGV2aWNlIH0sCiAJfTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1c2IgPSBOVUxMOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVzYiA9IE5VTEwsICpzZGhpMSA9IE5VTEw7CiAKIAlyZWd1bGF0b3JfcmVnaXN0ZXJfYWx3YXlzX29uKDAsICJmaXhlZC0zLjNWIiwgZml4ZWQzdjNfcG93ZXJfY29uc3VtZXJzLAogCQkJCSAgICAgQVJSQVlfU0laRShmaXhlZDN2M19wb3dlcl9jb25zdW1lcnMpLCAzMzAwMDAwKTsKQEAgLTEzMDQsNiArMTMwNiw3IEBACiAKIAkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Y2Nfc2RoaTEpOwogCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNkaGkxX2RldmljZSk7CisJCXNkaGkxID0gJnNkaGkxX2RldmljZTsKIAl9CiAKIApAQCAtMTMyNCw2ICsxMzI3LDggQEAKIAkJCQkgICAgICAgQVJSQVlfU0laRShkb21haW5fZGV2aWNlcykpOwogCWlmICh1c2IpCiAJCXJtb2JpbGVfYWRkX2RldmljZV90b19kb21haW4oIkEzU1AiLCB1c2IpOworCWlmIChzZGhpMSkKKwkJcm1vYmlsZV9hZGRfZGV2aWNlX3RvX2RvbWFpbigiQTNTUCIsIHNkaGkxKTsKIAogCXI4YTc3NDBfcG1faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy1yZWZlcmVuY2UuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYm9ja3ctcmVmZXJlbmNlLmMKaW5kZXggNzljNDc4NC4uZDY0OWFkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy1yZWZlcmVuY2UuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWJvY2t3LXJlZmVyZW5jZS5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy5jCmluZGV4IDFjZjJjNzUuLmYyN2I1YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYm9ja3cuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWJvY2t3LmMKQEAgLTEzLDEwICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWtvZWxzY2gtcmVmZXJlbmNlLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWtvZWxzY2gtcmVmZXJlbmNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWE1NDAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rb2Vsc2NoLXJlZmVyZW5jZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0gKiBLb2Vsc2NoIGJvYXJkIHN1cHBvcnQgLSBSZWZlcmVuY2UgRFQgaW1wbGVtZW50YXRpb24KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgIFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAxMyAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyAgTWFnbnVzIERhbW0KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvcmNhci1kdS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJpcnFzLmgiCi0jaW5jbHVkZSAicjhhNzc5MS5oIgotI2luY2x1ZGUgInJjYXItZ2VuMi5oIgotCi0vKiBEVSAqLwotc3RhdGljIHN0cnVjdCByY2FyX2R1X2VuY29kZXJfZGF0YSBrb2Vsc2NoX2R1X2VuY29kZXJzW10gPSB7Ci0JewotCQkudHlwZSA9IFJDQVJfRFVfRU5DT0RFUl9OT05FLAotCQkub3V0cHV0ID0gUkNBUl9EVV9PVVRQVVRfTFZEUzAsCi0JCS5jb25uZWN0b3IubHZkcy5wYW5lbCA9IHsKLQkJCS53aWR0aF9tbSA9IDIxMCwKLQkJCS5oZWlnaHRfbW0gPSAxNTgsCi0JCQkubW9kZSA9IHsKLQkJCQkucGl4ZWxjbG9jayA9IDY1MDAwMDAwLAotCQkJCS5oYWN0aXZlID0gMTAyNCwKLQkJCQkuaGZyb250X3BvcmNoID0gMjAsCi0JCQkJLmhiYWNrX3BvcmNoID0gMTYwLAotCQkJCS5oc3luY19sZW4gPSAxMzYsCi0JCQkJLnZhY3RpdmUgPSA3NjgsCi0JCQkJLnZmcm9udF9wb3JjaCA9IDMsCi0JCQkJLnZiYWNrX3BvcmNoID0gMjksCi0JCQkJLnZzeW5jX2xlbiA9IDYsCi0JCQl9LAotCQl9LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjYXJfZHVfcGxhdGZvcm1fZGF0YSBrb2Vsc2NoX2R1X3BkYXRhID0gewotCS5lbmNvZGVycyA9IGtvZWxzY2hfZHVfZW5jb2RlcnMsCi0JLm51bV9lbmNvZGVycyA9IEFSUkFZX1NJWkUoa29lbHNjaF9kdV9lbmNvZGVycyksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIGR1X3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCURFRklORV9SRVNfTUVNKDB4ZmViMDAwMDAsIDB4NDAwMDApLAotCURFRklORV9SRVNfTUVNX05BTUVEKDB4ZmViOTAwMDAsIDB4MWMsICJsdmRzLjAiKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI1NikpLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMjY4KSksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQga29lbHNjaF9hZGRfZHVfZGV2aWNlKHZvaWQpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGluZm8gPSB7Ci0JCS5uYW1lID0gInJjYXItZHUtcjhhNzc5MSIsCi0JCS5pZCA9IC0xLAotCQkucmVzID0gZHVfcmVzb3VyY2VzLAotCQkubnVtX3JlcyA9IEFSUkFZX1NJWkUoZHVfcmVzb3VyY2VzKSwKLQkJLmRhdGEgPSAma29lbHNjaF9kdV9wZGF0YSwKLQkJLnNpemVfZGF0YSA9IHNpemVvZihrb2Vsc2NoX2R1X3BkYXRhKSwKLQkJLmRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9OwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJmluZm8pOwotfQotCi0vKgotICogVGhpcyBpcyBhIHJlYWxseSBjcnVkZSBoYWNrIHRvIHByb3ZpZGUgY2xrZGV2IHN1cHBvcnQgdG8gcGxhdGZvcm0KLSAqIGRldmljZXMgdW50aWwgdGhleSBnZXQgbW92ZWQgdG8gRFQuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX25hbWUgY2xrX25hbWVzW10gX19pbml0Y29uc3QgPSB7Ci0JeyAiZHUwIiwgImR1LjAiLCAicmNhci1kdS1yOGE3NzkxIiB9LAotCXsgImR1MSIsICJkdS4xIiwgInJjYXItZHUtcjhhNzc5MSIgfSwKLQl7ICJsdmRzMCIsICJsdmRzLjAiLCAicmNhci1kdS1yOGE3NzkxIiB9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGtvZWxzY2hfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlzaG1vYmlsZV9jbGtfd29ya2Fyb3VuZChjbGtfbmFtZXMsIEFSUkFZX1NJWkUoY2xrX25hbWVzKSwgZmFsc2UpOwotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLQotCWtvZWxzY2hfYWRkX2R1X2RldmljZSgpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtvZWxzY2hfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGNvbnN0ID0gewotCSJyZW5lc2FzLGtvZWxzY2giLAotCSJyZW5lc2FzLGtvZWxzY2gtcmVmZXJlbmNlIiwKLQlOVUxMLAotfTsKLQotRFRfTUFDSElORV9TVEFSVChLT0VMU0NIX0RULCAia29lbHNjaCIpCi0JLnNtcAkJPSBzbXBfb3BzKHI4YTc3OTFfc21wX29wcyksCi0JLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAotCS5pbml0X3RpbWUJPSByY2FyX2dlbjJfdGltZXJfaW5pdCwKLQkuaW5pdF9tYWNoaW5lCT0ga29lbHNjaF9hZGRfc3RhbmRhcmRfZGV2aWNlcywKLQkuaW5pdF9sYXRlCT0gc2htb2JpbGVfaW5pdF9sYXRlLAotCS5yZXNlcnZlCT0gcmNhcl9nZW4yX3Jlc2VydmUsCi0JLmR0X2NvbXBhdAk9IGtvZWxzY2hfYm9hcmRzX2NvbXBhdF9kdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWtvZWxzY2guYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta29lbHNjaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTExYjVjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta29lbHNjaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTI3ICswLDAgQEAKLS8qCi0gKiBLb2Vsc2NoIGJvYXJkIHN1cHBvcnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgIFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDEzICBNYWdudXMgRGFtbQotICogQ29weXJpZ2h0IChDKSAyMDE0ICBDb2dlbnQgRW1iZWRkZWQsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tYy9zaF9tb2JpbGVfc2RoaS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1yY2FyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9yY2FyLWR1Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9ncGlvLXJlZ3VsYXRvci5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvc2hfZXRoLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3JzcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImlycXMuaCIKLSNpbmNsdWRlICJyOGE3NzkxLmgiCi0jaW5jbHVkZSAicmNhci1nZW4yLmgiCi0KLS8qIERVICovCi1zdGF0aWMgc3RydWN0IHJjYXJfZHVfZW5jb2Rlcl9kYXRhIGtvZWxzY2hfZHVfZW5jb2RlcnNbXSA9IHsKLQl7Ci0JCS50eXBlID0gUkNBUl9EVV9FTkNPREVSX05PTkUsCi0JCS5vdXRwdXQgPSBSQ0FSX0RVX09VVFBVVF9MVkRTMCwKLQkJLmNvbm5lY3Rvci5sdmRzLnBhbmVsID0gewotCQkJLndpZHRoX21tID0gMjEwLAotCQkJLmhlaWdodF9tbSA9IDE1OCwKLQkJCS5tb2RlID0gewotCQkJCS5waXhlbGNsb2NrID0gNjUwMDAwMDAsCi0JCQkJLmhhY3RpdmUgPSAxMDI0LAotCQkJCS5oZnJvbnRfcG9yY2ggPSAyMCwKLQkJCQkuaGJhY2tfcG9yY2ggPSAxNjAsCi0JCQkJLmhzeW5jX2xlbiA9IDEzNiwKLQkJCQkudmFjdGl2ZSA9IDc2OCwKLQkJCQkudmZyb250X3BvcmNoID0gMywKLQkJCQkudmJhY2tfcG9yY2ggPSAyOSwKLQkJCQkudnN5bmNfbGVuID0gNiwKLQkJCX0sCi0JCX0sCi0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmNhcl9kdV9wbGF0Zm9ybV9kYXRhIGtvZWxzY2hfZHVfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmVuY29kZXJzID0ga29lbHNjaF9kdV9lbmNvZGVycywKLQkubnVtX2VuY29kZXJzID0gQVJSQVlfU0laRShrb2Vsc2NoX2R1X2VuY29kZXJzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgZHVfcmVzb3VyY2VzW10gX19pbml0Y29uc3QgPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhmZWIwMDAwMCwgMHg0MDAwMCksCi0JREVGSU5FX1JFU19NRU1fTkFNRUQoMHhmZWI5MDAwMCwgMHgxYywgImx2ZHMuMCIpLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMjU2KSksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyNjgpKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBrb2Vsc2NoX2FkZF9kdV9kZXZpY2Uodm9pZCkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gaW5mbyA9IHsKLQkJLm5hbWUgPSAicmNhci1kdS1yOGE3NzkxIiwKLQkJLmlkID0gLTEsCi0JCS5yZXMgPSBkdV9yZXNvdXJjZXMsCi0JCS5udW1fcmVzID0gQVJSQVlfU0laRShkdV9yZXNvdXJjZXMpLAotCQkuZGF0YSA9ICZrb2Vsc2NoX2R1X3BkYXRhLAotCQkuc2l6ZV9kYXRhID0gc2l6ZW9mKGtvZWxzY2hfZHVfcGRhdGEpLAotCQkuZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCX07Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgmaW5mbyk7Ci19Ci0KLS8qIEV0aGVyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNoX2V0aF9wbGF0X2RhdGEgZXRoZXJfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLnBoeQkJCT0gMHgxLAotCS5waHlfaXJxCQk9IGlycV9waW4oMCksCi0JLmVkbWFjX2VuZGlhbgkJPSBFRE1BQ19MSVRUTEVfRU5ESUFOLAotCS5waHlfaW50ZXJmYWNlCQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLAotCS5ldGhlcl9saW5rX2FjdGl2ZV9sb3cJPSAxLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBldGhlcl9yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQlERUZJTkVfUkVTX01FTSgweGVlNzAwMDAwLCAweDQwMCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgxNjIpKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gZXRoZXJfaW5mbyBfX2luaXRjb25zdCA9IHsKLQkubmFtZQkJPSAicjhhNzc5MS1ldGhlciIsCi0JLmlkCQk9IC0xLAotCS5yZXMJCT0gZXRoZXJfcmVzb3VyY2VzLAotCS5udW1fcmVzCT0gQVJSQVlfU0laRShldGhlcl9yZXNvdXJjZXMpLAotCS5kYXRhCQk9ICZldGhlcl9wZGF0YSwKLQkuc2l6ZV9kYXRhCT0gc2l6ZW9mKGV0aGVyX3BkYXRhKSwKLQkuZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotfTsKLQotLyogTEVEUyAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBrb2Vsc2NoX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJsZWQ4IiwKLQkJLmdwaW8JCT0gUkNBUl9HUF9QSU4oMiwgMjEpLAotCQkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PTiwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJsZWQ3IiwKLQkJLmdwaW8JCT0gUkNBUl9HUF9QSU4oMiwgMjApLAotCQkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PTiwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJsZWQ2IiwKLQkJLmdwaW8JCT0gUkNBUl9HUF9QSU4oMiwgMTkpLAotCQkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PTiwKLQl9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGtvZWxzY2hfbGVkc19wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkubGVkcwkJPSBrb2Vsc2NoX2xlZHMsCi0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShrb2Vsc2NoX2xlZHMpLAotfTsKLQotLyogR1BJTyBLRVkgKi8KLSNkZWZpbmUgR1BJT19LRVkoYywgZywgZCwgLi4uKSBcCi0JeyAuY29kZSA9IGMsIC5ncGlvID0gZywgLmRlc2MgPSBkLCAuYWN0aXZlX2xvdyA9IDEsIFwKLQkgIC53YWtldXAgPSAxLCAuZGVib3VuY2VfaW50ZXJ2YWwgPSAyMCB9Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBncGlvX2J1dHRvbnNbXSA9IHsKLQlHUElPX0tFWShLRVlfNCwJCVJDQVJfR1BfUElOKDUsIDMpLAkiU1cyLXBpbjQiKSwKLQlHUElPX0tFWShLRVlfMywJCVJDQVJfR1BfUElOKDUsIDIpLAkiU1cyLXBpbjMiKSwKLQlHUElPX0tFWShLRVlfMiwJCVJDQVJfR1BfUElOKDUsIDEpLAkiU1cyLXBpbjIiKSwKLQlHUElPX0tFWShLRVlfMSwJCVJDQVJfR1BfUElOKDUsIDApLAkiU1cyLXBpbjEiKSwKLQlHUElPX0tFWShLRVlfRywJCVJDQVJfR1BfUElOKDcsIDYpLAkiU1czNiIpLAotCUdQSU9fS0VZKEtFWV9GLAkJUkNBUl9HUF9QSU4oNywgNSksCSJTVzM1IiksCi0JR1BJT19LRVkoS0VZX0UsCQlSQ0FSX0dQX1BJTig3LCA0KSwJIlNXMzQiKSwKLQlHUElPX0tFWShLRVlfRCwJCVJDQVJfR1BfUElOKDcsIDMpLAkiU1czMyIpLAotCUdQSU9fS0VZKEtFWV9DLAkJUkNBUl9HUF9QSU4oNywgMiksCSJTVzMyIiksCi0JR1BJT19LRVkoS0VZX0IsCQlSQ0FSX0dQX1BJTig3LCAxKSwJIlNXMzEiKSwKLQlHUElPX0tFWShLRVlfQSwJCVJDQVJfR1BfUElOKDcsIDApLAkiU1czMCIpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBrb2Vsc2NoX2tleXNfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmJ1dHRvbnMJPSBncGlvX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShncGlvX2J1dHRvbnMpLAotfTsKLQotLyogUVNQSSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBxc3BpX3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCURFRklORV9SRVNfTUVNKDB4ZTZiMTAwMDAsIDB4MTAwMCksCi0JREVGSU5FX1JFU19JUlFfTkFNRUQoZ2ljX3NwaSgxODQpLCAibXV4IiksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJzcGlfcGxhdF9kYXRhIHFzcGlfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLm51bV9jaGlwc2VsZWN0ID0gMSwKLX07Ci0KLS8qIFNQSSBGbGFzaCBtZW1vcnkgKFNwYW5zaW9uIFMyNUZMNTEyU0FHTUZJRzExIDY0IE1pQikgKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzcGlfZmxhc2hfcGFydFtdID0gewotCXsKLQkJLm5hbWUJCT0gImxvYWRlciIsCi0JCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKLQkJLnNpemUJCT0gNTEyICogMTAyNCwKLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAotCX0sCi0JewotCQkubmFtZQkJPSAiYm9vdGVudiIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSA1MTIgKiAxMDI0LAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJkYXRhIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBzcGlfZmxhc2hfZGF0YSA9IHsKLQkubmFtZQkJPSAibTI1cDgwIiwKLQkucGFydHMJCT0gc3BpX2ZsYXNoX3BhcnQsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRShzcGlfZmxhc2hfcGFydCksCi0JLnR5cGUJCT0gInMyNWZsNTEycyIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNwaV9pbmZvW10gX19pbml0Y29uc3QgPSB7Ci0JewotCQkubW9kYWxpYXMJPSAibTI1cDgwIiwKLQkJLnBsYXRmb3JtX2RhdGEJPSAmc3BpX2ZsYXNoX2RhdGEsCi0JCS5tb2RlCQk9IFNQSV9NT0RFXzAgfCBTUElfVFhfUVVBRCB8IFNQSV9SWF9RVUFELAotCQkubWF4X3NwZWVkX2h6CT0gMzAwMDAwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQl9LAotfTsKLQotLyogU0FUQTAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2Ugc2F0YTBfcmVzb3VyY2VzW10gX19pbml0Y29uc3QgPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhlZTMwMDAwMCwgMHgyMDAwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDEwNSkpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBzYXRhMF9pbmZvIF9faW5pdGNvbnN0ID0gewotCS5uYW1lCQk9ICJzYXRhLXI4YTc3OTEiLAotCS5pZAkJPSAwLAotCS5yZXMJCT0gc2F0YTBfcmVzb3VyY2VzLAotCS5udW1fcmVzCT0gQVJSQVlfU0laRShzYXRhMF9yZXNvdXJjZXMpLAotCS5kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi19OwotCi0vKiBJMkMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgaTJjX3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCS8qIEkyQzAgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTA4MDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI4NykpLAotCS8qIEkyQzEgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTE4MDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI4OCkpLAotCS8qIEkyQzIgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTMwMDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI4NikpLAotCS8qIEkyQzMgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTQwMDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI5MCkpLAotCS8qIEkyQzQgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTIwMDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDE5KSksCi0JLyogSTJDNSAqLwotCURFRklORV9SRVNfTUVNKDB4RTY1MjgwMDAsIDB4NDApLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMjApKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBrb2Vsc2NoX2FkZF9pMmModW5zaWduZWQgaWR4KQotewotCXVuc2lnbmVkIHJlc19pZHggPSBpZHggKiAyOwotCi0JQlVHX09OKHJlc19pZHggPj0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzKSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJpMmMtcmNhcl9nZW4yIiwgaWR4LAotCQkJCQlpMmNfcmVzb3VyY2VzICsgcmVzX2lkeCwgMik7Ci19Ci0KLSNkZWZpbmUgU0RISV9SRUdVTEFUT1IoaWR4LCB2ZGRfcGluLCB2Y2NxX3BpbikJCQkJXAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHZjY19zZGhpIyNpZHgjI19jb25zdW1lciA9CVwKLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgInNoX21vYmlsZV9zZGhpLiIgI2lkeCk7CQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmNjX3NkaGkjI2lkeCMjX2luaXRfZGF0YSA9IHsJCVwKLQkuY29uc3RyYWludHMgPSB7CQkJCQkJXAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywJCVwKLQl9LAkJCQkJCQkJXAotCS5jb25zdW1lcl9zdXBwbGllcwk9ICZ2Y2Nfc2RoaSMjaWR4IyNfY29uc3VtZXIsCQlcCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCQkJCQlcCi19OwkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgdmNjX3NkaGkjI2lkeCMjX2luZm8gX19pbml0Y29uc3QgPSB7XAotCS5zdXBwbHlfbmFtZQk9ICJTREhJIiAjaWR4ICJWY2MiLAkJCQlcCi0JLm1pY3Jvdm9sdHMJPSAzMzAwMDAwLAkJCQkJXAotCS5ncGlvCQk9IHZkZF9waW4sCQkJCQlcCi0JLmVuYWJsZV9oaWdoCT0gMSwJCQkJCQlcCi0JLmluaXRfZGF0YQk9ICZ2Y2Nfc2RoaSMjaWR4IyNfaW5pdF9kYXRhLAkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHZjY3Ffc2RoaSMjaWR4IyNfY29uc3VtZXIgPQlcCi0JUkVHVUxBVE9SX1NVUFBMWSgidnFtbWMiLCAic2hfbW9iaWxlX3NkaGkuIiAjaWR4KTsJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2Y2NxX3NkaGkjI2lkeCMjX2luaXRfZGF0YSA9IHsJXAotCS5jb25zdHJhaW50cyA9IHsJCQkJCQlcCi0JCS5pbnB1dF91Vgk9IDMzMDAwMDAsCQkJCVwKLQkJLm1pbl91VgkJPSAxODAwMDAwLAkJCQlcCi0JCS5tYXhfdVYJCT0gMzMwMDAwMCwJCQkJXAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAkJXAotCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCQlcCi0JfSwJCQkJCQkJCVwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSAmdmNjcV9zZGhpIyNpZHgjI19jb25zdW1lciwJCVwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwJCQkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBncGlvIHZjY3Ffc2RoaSMjaWR4IyNfZ3BpbyA9CQkJCVwKLQl7IHZjY3FfcGluLCBHUElPRl9PVVRfSU5JVF9ISUdILCAidmNjcS1zZGhpIiAjaWR4IH07CQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3RydWN0IGdwaW9fcmVndWxhdG9yX3N0YXRlIHZjY3Ffc2RoaSMjaWR4IyNfc3RhdGVzW10gPSB7CVwKLQl7IC52YWx1ZSA9IDE4MDAwMDAsIC5ncGlvcyA9IDAgfSwJCQkJXAotCXsgLnZhbHVlID0gMzMwMDAwMCwgLmdwaW9zID0gMSB9LAkJCQlcCi19OwkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19yZWd1bGF0b3JfY29uZmlnIHZjY3Ffc2RoaSMjaWR4IyNfaW5mbyBfX2luaXRjb25zdCA9IHtcCi0JLnN1cHBseV9uYW1lCT0gInZxbW1jIiwJCQkJCVwKLQkuZ3Bpb3MJCT0gJnZjY3Ffc2RoaSMjaWR4IyNfZ3BpbywJCQlcCi0JLm5yX2dwaW9zCT0gMSwJCQkJCQlcCi0JLnN0YXRlcwkJPSB2Y2NxX3NkaGkjI2lkeCMjX3N0YXRlcywJCQlcCi0JLm5yX3N0YXRlcwk9IEFSUkFZX1NJWkUodmNjcV9zZGhpIyNpZHgjI19zdGF0ZXMpLAkJXAotCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCi0JLmluaXRfZGF0YQk9ICZ2Y2NxX3NkaGkjI2lkeCMjX2luaXRfZGF0YSwJCQlcCi19OwotCi1TREhJX1JFR1VMQVRPUigwLCBSQ0FSX0dQX1BJTig3LCAxNyksIFJDQVJfR1BfUElOKDIsIDEyKSk7Ci1TREhJX1JFR1VMQVRPUigxLCBSQ0FSX0dQX1BJTig3LCAxOCksIFJDQVJfR1BfUElOKDIsIDEzKSk7Ci1TREhJX1JFR1VMQVRPUigyLCBSQ0FSX0dQX1BJTig3LCAxOSksIFJDQVJfR1BfUElOKDIsIDI2KSk7Ci0KLS8qIFNESEkwICovCi1zdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2RoaTBfaW5mbyBfX2luaXRkYXRhID0gewotCS50bWlvX2NhcHMJPSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RJT19JUlEgfAotCQkJICBNTUNfQ0FQX1BPV0VSX09GRl9DQVJELAotCS50bWlvX2ZsYWdzCT0gVE1JT19NTUNfSEFTX0lETEVfV0FJVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2RoaTBfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKLQlERUZJTkVfUkVTX01FTSgweGVlMTAwMDAwLCAweDIwMCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgxNjUpKSwKLX07Ci0KLS8qIFNESEkxICovCi1zdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2RoaTFfaW5mbyBfX2luaXRkYXRhID0gewotCS50bWlvX2NhcHMJPSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RJT19JUlEgfAotCQkJICBNTUNfQ0FQX1BPV0VSX09GRl9DQVJELAotCS50bWlvX2ZsYWdzCT0gVE1JT19NTUNfSEFTX0lETEVfV0FJVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2RoaTFfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKLQlERUZJTkVfUkVTX01FTSgweGVlMTQwMDAwLCAweDEwMCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgxNjcpKSwKLX07Ci0KLS8qIFNESEkyICovCi1zdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2RoaTJfaW5mbyBfX2luaXRkYXRhID0gewotCS50bWlvX2NhcHMJPSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RJT19JUlEgfAotCQkJICBNTUNfQ0FQX1BPV0VSX09GRl9DQVJELAotCS50bWlvX2ZsYWdzCT0gVE1JT19NTUNfSEFTX0lETEVfV0FJVCB8Ci0JCQkgIFRNSU9fTU1DX1dSUFJPVEVDVF9ESVNBQkxFLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzZGhpMl9yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0gewotCURFRklORV9SRVNfTUVNKDB4ZWUxNjAwMDAsIDB4MTAwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDE2OCkpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jdHJsX21hcCBrb2Vsc2NoX3BpbmN0cmxfbWFwW10gPSB7Ci0JLyogRFUgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyY2FyLWR1LXI4YTc3OTEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgImR1X3JnYjY2NiIsICJkdSIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInJjYXItZHUtcjhhNzc5MSIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiZHVfc3luYyIsICJkdSIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInJjYXItZHUtcjhhNzc5MSIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiZHVfY2xrX291dF8wIiwgImR1IiksCi0JLyogRXRoZXIgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyOGE3NzkxLWV0aGVyIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJldGhfbGluayIsICJldGgiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyOGE3NzkxLWV0aGVyIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJldGhfbWRpbyIsICJldGgiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyOGE3NzkxLWV0aGVyIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJldGhfcm1paSIsICJldGgiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyOGE3NzkxLWV0aGVyIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJpbnRjX2lycTAiLCAiaW50YyIpLAotCS8qIFFTUEkgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJxc3BpLjAiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInFzcGlfY3RybCIsICJxc3BpIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgicXNwaS4wIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJxc3BpX2RhdGE0IiwgInFzcGkiKSwKLQkvKiBTQ0lGMCAoQ04xOTogREVCVUcgU0VSSUFMMCkgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJzaC1zY2kuNiIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2NpZjBfZGF0YV9kIiwgInNjaWYwIiksCi0JLyogU0NJRjEgKENOMjA6IERFQlVHIFNFUklBTDEpICovCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2gtc2NpLjciLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNjaWYxX2RhdGFfZCIsICJzY2lmMSIpLAotCS8qIEkyQzEgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJpMmMtcmNhcl9nZW4yLjEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgImkyYzFfZSIsICJpMmMxIiksCi0JLyogSTJDMiAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoImkyYy1yY2FyX2dlbjIuMiIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiaTJjMiIsICJpMmMyIiksCi0JLyogSTJDNCAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoImkyYy1yY2FyX2dlbjIuNCIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiaTJjNF9jIiwgImkyYzQiKSwKLQkvKiBTREhJMCAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjAiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkwX2RhdGE0IiwgInNkaGkwIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2hfbW9iaWxlX3NkaGkuMCIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2RoaTBfY3RybCIsICJzZGhpMCIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjAiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkwX2NkIiwgInNkaGkwIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2hfbW9iaWxlX3NkaGkuMCIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2RoaTBfd3AiLCAic2RoaTAiKSwKLQkvKiBTREhJMiAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkxX2RhdGE0IiwgInNkaGkxIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2hfbW9iaWxlX3NkaGkuMSIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2RoaTFfY3RybCIsICJzZGhpMSIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkxX2NkIiwgInNkaGkxIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2hfbW9iaWxlX3NkaGkuMSIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2RoaTFfd3AiLCAic2RoaTEiKSwKLQkvKiBTREhJMiAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjIiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkyX2RhdGE0IiwgInNkaGkyIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2hfbW9iaWxlX3NkaGkuMiIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2RoaTJfY3RybCIsICJzZGhpMiIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjIiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkyX2NkIiwgInNkaGkyIiksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQga29lbHNjaF9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCXI4YTc3OTFfY2xvY2tfaW5pdCgpOwotCXBpbmN0cmxfcmVnaXN0ZXJfbWFwcGluZ3Moa29lbHNjaF9waW5jdHJsX21hcCwKLQkJCQkgIEFSUkFZX1NJWkUoa29lbHNjaF9waW5jdHJsX21hcCkpOwotCXI4YTc3OTFfcGlubXV4X2luaXQoKTsKLQlyOGE3NzkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKCk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJmV0aGVyX2luZm8pOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKE5VTEwsICJsZWRzLWdwaW8iLCAtMSwKLQkJCQkgICAgICAma29lbHNjaF9sZWRzX3BkYXRhLAotCQkJCSAgICAgIHNpemVvZihrb2Vsc2NoX2xlZHNfcGRhdGEpKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAiZ3Bpby1rZXlzIiwgLTEsCi0JCQkJICAgICAgJmtvZWxzY2hfa2V5c19wZGF0YSwKLQkJCQkgICAgICBzaXplb2Yoa29lbHNjaF9rZXlzX3BkYXRhKSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsICJxc3BpIiwgMCwKLQkJCQkJICBxc3BpX3Jlc291cmNlcywKLQkJCQkJICBBUlJBWV9TSVpFKHFzcGlfcmVzb3VyY2VzKSwKLQkJCQkJICAmcXNwaV9wZGF0YSwgc2l6ZW9mKHFzcGlfcGRhdGEpKTsKLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfaW5mbywgQVJSQVlfU0laRShzcGlfaW5mbykpOwotCi0Ja29lbHNjaF9hZGRfZHVfZGV2aWNlKCk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgmc2F0YTBfaW5mbyk7Ci0KLQlrb2Vsc2NoX2FkZF9pMmMoMSk7Ci0Ja29lbHNjaF9hZGRfaTJjKDIpOwotCWtvZWxzY2hfYWRkX2kyYyg0KTsKLQlrb2Vsc2NoX2FkZF9pMmMoNSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAicmVnLWZpeGVkLXZvbHRhZ2UiLCAwLAotCQkJCSAgICAgICZ2Y2Nfc2RoaTBfaW5mbywgc2l6ZW9mKHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZykpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKE5VTEwsICJyZWctZml4ZWQtdm9sdGFnZSIsIDEsCi0JCQkJICAgICAgJnZjY19zZGhpMV9pbmZvLCBzaXplb2Yoc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnKSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoTlVMTCwgInJlZy1maXhlZC12b2x0YWdlIiwgMiwKLQkJCQkgICAgICAmdmNjX3NkaGkyX2luZm8sIHNpemVvZihzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcpKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAiZ3Bpby1yZWd1bGF0b3IiLCAwLAotCQkJCSAgICAgICZ2Y2NxX3NkaGkwX2luZm8sIHNpemVvZihzdHJ1Y3QgZ3Bpb19yZWd1bGF0b3JfY29uZmlnKSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoTlVMTCwgImdwaW8tcmVndWxhdG9yIiwgMSwKLQkJCQkgICAgICAmdmNjcV9zZGhpMV9pbmZvLCBzaXplb2Yoc3RydWN0IGdwaW9fcmVndWxhdG9yX2NvbmZpZykpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKE5VTEwsICJncGlvLXJlZ3VsYXRvciIsIDIsCi0JCQkJICAgICAgJnZjY3Ffc2RoaTJfaW5mbywgc2l6ZW9mKHN0cnVjdCBncGlvX3JlZ3VsYXRvcl9jb25maWcpKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAic2hfbW9iaWxlX3NkaGkiLCAwLAotCQkJCQkgIHNkaGkwX3Jlc291cmNlcywgQVJSQVlfU0laRShzZGhpMF9yZXNvdXJjZXMpLAotCQkJCQkgICZzZGhpMF9pbmZvLCBzaXplb2Yoc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8pKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAic2hfbW9iaWxlX3NkaGkiLCAxLAotCQkJCQkgIHNkaGkxX3Jlc291cmNlcywgQVJSQVlfU0laRShzZGhpMV9yZXNvdXJjZXMpLAotCQkJCQkgICZzZGhpMV9pbmZvLCBzaXplb2Yoc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8pKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAic2hfbW9iaWxlX3NkaGkiLCAyLAotCQkJCQkgIHNkaGkyX3Jlc291cmNlcywgQVJSQVlfU0laRShzZGhpMl9yZXNvdXJjZXMpLAotCQkJCQkgICZzZGhpMl9pbmZvLCBzaXplb2Yoc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8pKTsKLQotfQotCi0vKgotICogRXRoZXIgTEVEcyBvbiB0aGUgS29lbHNjaCBib2FyZCBhcmUgbmFtZWQgTElOSyBhbmQgQUNUSVZFIHdoaWNoIGNvcnJlc3BvbmRzCi0gKiB0byBub24tZGVmYXVsdCAwMSBzZXR0aW5nIG9mIHRoZSBNaWNyZWwgS1NaODA0MSBQSFkgY29udHJvbCByZWdpc3RlciAxIGJpdHMKLSAqIDE0LTE1LiBXZSBoYXZlIHRvIHNldCB0aGVtIGJhY2sgdG8gMDEgZnJvbSB0aGUgZGVmYXVsdCAwMCB2YWx1ZSBlYWNoIHRpbWUKLSAqIHRoZSBQSFkgaXMgcmVzZXQuIEl0J3MgYWxzbyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgUEhZJ3MgTEVEMCBzaWduYWwgaXMKLSAqIGNvbm5lY3RlZCB0byBTb0MncyBFVEhfTElOSyBzaWduYWwgYW5kIGluIHRoZSBQSFkncyBkZWZhdWx0IG1vZGUgaXQgd2lsbAotICogYm91bmNlIG9uIGFuZCBvZmYgYWZ0ZXIgZWFjaCBwYWNrZXQsIHdoaWNoIHdlIGFwcGFyZW50bHkgd2FudCB0byBhdm9pZC4KLSAqLwotc3RhdGljIGludCBrb2Vsc2NoX2tzejgwNDFfZml4dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKLXsKLQl1MTYgcGh5Y3RybDEgPSBwaHlfcmVhZChwaHlkZXYsIDB4MWUpOwotCi0JcGh5Y3RybDEgJj0gfjB4YzAwMDsKLQlwaHljdHJsMSB8PSAweDQwMDA7Ci0JcmV0dXJuIHBoeV93cml0ZShwaHlkZXYsIDB4MWUsIHBoeWN0cmwxKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGtvZWxzY2hfaW5pdCh2b2lkKQotewotCWtvZWxzY2hfYWRkX3N0YW5kYXJkX2RldmljZXMoKTsKLQotCWlycV9zZXRfaXJxX3R5cGUoaXJxX3BpbigwKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQotCWlmIChJU19FTkFCTEVEKENPTkZJR19QSFlMSUIpKQotCQlwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX2lkKCJyOGE3NzkxLWV0aGVyLWZmOjAxIiwKLQkJCQkJICBrb2Vsc2NoX2tzejgwNDFfZml4dXApOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtvZWxzY2hfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGNvbnN0ID0gewotCSJyZW5lc2FzLGtvZWxzY2giLAotCU5VTEwsCi19OwotCi1EVF9NQUNISU5FX1NUQVJUKEtPRUxTQ0hfRFQsICJrb2Vsc2NoIikKLQkuc21wCQk9IHNtcF9vcHMocjhhNzc5MV9zbXBfb3BzKSwKLQkuaW5pdF9lYXJseQk9IHNobW9iaWxlX2luaXRfZGVsYXksCi0JLmluaXRfdGltZQk9IHJjYXJfZ2VuMl90aW1lcl9pbml0LAotCS5pbml0X21hY2hpbmUJPSBrb2Vsc2NoX2luaXQsCi0JLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKLQkucmVzZXJ2ZQk9IHJjYXJfZ2VuMl9yZXNlcnZlLAotCS5kdF9jb21wYXQJPSBrb2Vsc2NoX2JvYXJkc19jb21wYXRfZHQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rem05Zy1yZWZlcmVuY2UuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta3ptOWctcmVmZXJlbmNlLmMKaW5kZXggZDljZGY5YS4uMmU4MmU0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rem05Zy1yZWZlcmVuY2UuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWt6bTlnLXJlZmVyZW5jZS5jCkBAIC0xNCwxMCArMTQsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNDMsNiArMzksMTMgQEAKICNlbmRpZgogfQogCisjZGVmaW5lIFJFU0NOVDIgSU9NRU0oMHhlNjE4ODAyMCkKK3N0YXRpYyB2b2lkIGt6bTlnX3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJLyogRG8gc29mdCBwb3dlciBvbiByZXNldCAqLworCXdyaXRlbCgoMSA8PCAzMSksIFJFU0NOVDIpOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqa3ptOWdfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGRhdGEgPSB7CiAJInJlbmVzYXMsa3ptOWctcmVmZXJlbmNlIiwKIAlOVUxMLApAQCAtNTQsNSArNTcsNiBAQAogCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKIAkuaW5pdF9tYWNoaW5lCT0ga3ptX2luaXQsCiAJLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKKwkucmVzdGFydAk9IGt6bTlnX3Jlc3RhcnQsCiAJLmR0X2NvbXBhdAk9IGt6bTlnX2JvYXJkc19jb21wYXRfZHQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rem05Zy5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rem05Zy5jCmluZGV4IDc3ZTM2ZmEuLjdjOWI2M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta3ptOWcuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWt6bTlnLmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLXJlZmVyZW5jZS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci1yZWZlcmVuY2UuYwppbmRleCBiYzRiNDgzLi5mYTA2YmRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLXJlZmVyZW5jZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXItcmVmZXJlbmNlLmMKQEAgLTEyLDEwMCArMTIsMTcgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3JjYXItZHUuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAiaXJxcy5oIgogI2luY2x1ZGUgInI4YTc3OTAuaCIKICNpbmNsdWRlICJyY2FyLWdlbjIuaCIKIAotLyogRFUgKi8KLXN0YXRpYyBzdHJ1Y3QgcmNhcl9kdV9lbmNvZGVyX2RhdGEgbGFnZXJfZHVfZW5jb2RlcnNbXSA9IHsKLQl7Ci0JCS50eXBlID0gUkNBUl9EVV9FTkNPREVSX1ZHQSwKLQkJLm91dHB1dCA9IFJDQVJfRFVfT1VUUFVUX0RQQUQwLAotCX0sIHsKLQkJLnR5cGUgPSBSQ0FSX0RVX0VOQ09ERVJfTk9ORSwKLQkJLm91dHB1dCA9IFJDQVJfRFVfT1VUUFVUX0xWRFMxLAotCQkuY29ubmVjdG9yLmx2ZHMucGFuZWwgPSB7Ci0JCQkud2lkdGhfbW0gPSAyMTAsCi0JCQkuaGVpZ2h0X21tID0gMTU4LAotCQkJLm1vZGUgPSB7Ci0JCQkJLnBpeGVsY2xvY2sgPSA2NTAwMDAwMCwKLQkJCQkuaGFjdGl2ZSA9IDEwMjQsCi0JCQkJLmhmcm9udF9wb3JjaCA9IDIwLAotCQkJCS5oYmFja19wb3JjaCA9IDE2MCwKLQkJCQkuaHN5bmNfbGVuID0gMTM2LAotCQkJCS52YWN0aXZlID0gNzY4LAotCQkJCS52ZnJvbnRfcG9yY2ggPSAzLAotCQkJCS52YmFja19wb3JjaCA9IDI5LAotCQkJCS52c3luY19sZW4gPSA2LAotCQkJfSwKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY2FyX2R1X3BsYXRmb3JtX2RhdGEgbGFnZXJfZHVfcGRhdGEgPSB7Ci0JLmVuY29kZXJzID0gbGFnZXJfZHVfZW5jb2RlcnMsCi0JLm51bV9lbmNvZGVycyA9IEFSUkFZX1NJWkUobGFnZXJfZHVfZW5jb2RlcnMpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBkdV9yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQlERUZJTkVfUkVTX01FTSgweGZlYjAwMDAwLCAweDcwMDAwKSwKLQlERUZJTkVfUkVTX01FTV9OQU1FRCgweGZlYjkwMDAwLCAweDFjLCAibHZkcy4wIiksCi0JREVGSU5FX1JFU19NRU1fTkFNRUQoMHhmZWI5NDAwMCwgMHgxYywgImx2ZHMuMSIpLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMjU2KSksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyNjgpKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI2OSkpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGxhZ2VyX2FkZF9kdV9kZXZpY2Uodm9pZCkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gaW5mbyA9IHsKLQkJLm5hbWUgPSAicmNhci1kdS1yOGE3NzkwIiwKLQkJLmlkID0gLTEsCi0JCS5yZXMgPSBkdV9yZXNvdXJjZXMsCi0JCS5udW1fcmVzID0gQVJSQVlfU0laRShkdV9yZXNvdXJjZXMpLAotCQkuZGF0YSA9ICZsYWdlcl9kdV9wZGF0YSwKLQkJLnNpemVfZGF0YSA9IHNpemVvZihsYWdlcl9kdV9wZGF0YSksCi0JCS5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi0JfTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZpbmZvKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgYSByZWFsbHkgY3J1ZGUgaGFjayB0byBwcm92aWRlIGNsa2RldiBzdXBwb3J0IHRvIHBsYXRmb3JtCi0gKiBkZXZpY2VzIHVudGlsIHRoZXkgZ2V0IG1vdmVkIHRvIERULgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19uYW1lIGNsa19uYW1lc1tdIF9faW5pdGNvbnN0ID0gewotCXsgImR1MCIsICJkdS4wIiwgInJjYXItZHUtcjhhNzc5MCIgfSwKLQl7ICJkdTEiLCAiZHUuMSIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCi0JeyAiZHUyIiwgImR1LjIiLCAicmNhci1kdS1yOGE3NzkwIiB9LAotCXsgImx2ZHMwIiwgImx2ZHMuMCIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCi0JeyAibHZkczEiLCAibHZkcy4xIiwgInJjYXItZHUtcjhhNzc5MCIgfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBsYWdlcl9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCXNobW9iaWxlX2Nsa193b3JrYXJvdW5kKGNsa19uYW1lcywgQVJSQVlfU0laRShjbGtfbmFtZXMpLCBmYWxzZSk7Ci0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwotCi0JbGFnZXJfYWRkX2R1X2RldmljZSgpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqbGFnZXJfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGRhdGEgPSB7CiAJInJlbmVzYXMsbGFnZXIiLAogCSJyZW5lc2FzLGxhZ2VyLXJlZmVyZW5jZSIsCkBAIC0xMTYsNyArMzMsNiBAQAogCS5zbXAJCT0gc21wX29wcyhyOGE3NzkwX3NtcF9vcHMpLAogCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKIAkuaW5pdF90aW1lCT0gcmNhcl9nZW4yX3RpbWVyX2luaXQsCi0JLmluaXRfbWFjaGluZQk9IGxhZ2VyX2FkZF9zdGFuZGFyZF9kZXZpY2VzLAogCS5pbml0X2xhdGUJPSBzaG1vYmlsZV9pbml0X2xhdGUsCiAJLnJlc2VydmUJPSByY2FyX2dlbjJfcmVzZXJ2ZSwKIAkuZHRfY29tcGF0CT0gbGFnZXJfYm9hcmRzX2NvbXBhdF9kdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXIuYwppbmRleCA1NzEzMjdiLi5iNDcyNjJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKaW5kZXggY2E1ZDM0Yi4uZWQxMDg3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwpAQCAtMTYsMTAgKzE2LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hcnplbi1yZWZlcmVuY2UuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFyemVuLXJlZmVyZW5jZS5jCmluZGV4IDM4ZDljZGQuLmIxNWViOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFyemVuLXJlZmVyZW5jZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFyemVuLXJlZmVyZW5jZS5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9jbGsvc2htb2JpbGUuaD4KQEAgLTI2LDcgKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCi0jaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJpcnFzLmgiCiAjaW5jbHVkZSAicjhhNzc3OS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYXJ6ZW4uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFyemVuLmMKaW5kZXggY2UzM2Q3OC4uOTk0ZGM3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYXJ6ZW4uYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hcnplbi5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzNhNC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3M2E0LmMKaW5kZXggYzIzMzBlYS4uMWNmNDRkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3M2E0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3M2E0LmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc0MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzQwLmMKaW5kZXggMTlkZjljYi4uOWNhYzgyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzQwLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc3OC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc4LmMKaW5kZXggNjc5ODBhMC4uZTg1MTBjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc4LmMKQEAgLTE3LDEwICsxNyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc5LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYwppbmRleCBjNTFmOWRiLi5mYThhYjJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzkwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTAuYwppbmRleCBmNjIyNjUyLi5mOWJiYzVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTAuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzkxLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUzYjIzMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTEuYworKysgL2Rldi9udWxsCkBAIC0xLDM0MiArMCwwIEBACi0vKgotICogcjhhNzc5MSBjbG9jayBmcmFtZXdvcmsgc3VwcG9ydAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyAgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IChDKSAyMDEzICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDEzICBNYWdudXMgRGFtbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zaF9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgInJjYXItZ2VuMi5oIgotCi0vKgotICogICBNRAkJRVhUQUwJCVBMTDAJUExMMQlQTEwzCi0gKiAxNCAxMyAxOQkoTUh6KQkJKjEJKjEKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAwICAwICAwCTE1IHggMQkJeDE3Mi8yCXgyMDgvMgl4MTA2Ci0gKiAwICAwICAxCTE1IHggMQkJeDE3Mi8yCXgyMDgvMgl4ODgKLSAqIDAgIDEgIDAJMjAgeCAxCQl4MTMwLzIJeDE1Ni8yCXg4MAotICogMCAgMSAgMQkyMCB4IDEJCXgxMzAvMgl4MTU2LzIJeDY2Ci0gKiAxICAwICAwCTI2IC8gMgkJeDIwMC8yCXgyNDAvMgl4MTIyCi0gKiAxICAwICAxCTI2IC8gMgkJeDIwMC8yCXgyNDAvMgl4MTAyCi0gKiAxICAxICAwCTMwIC8gMgkJeDE3Mi8yCXgyMDgvMgl4MTA2Ci0gKiAxICAxICAxCTMwIC8gMgkJeDE3Mi8yCXgyMDgvMgl4ODgKLSAqCi0gKiAqMSA6CVRhYmxlIDcuNiBpbmRpY2F0ZXMgVkNPIG91cHV0IChQTEx4ID0gVkNPLzIpCi0gKglzZWUgInAxIC8gMiIgb24gUjhBNzc5MV9DTE9DS19ST09UKCkgYmVsb3cKLSAqLwotCi0jZGVmaW5lIENQR19CQVNFIDB4ZTYxNTAwMDAKLSNkZWZpbmUgQ1BHX0xFTiAweDEwMDAKLQotI2RlZmluZSBTTVNUUENSMAkweEU2MTUwMTMwCi0jZGVmaW5lIFNNU1RQQ1IxCTB4RTYxNTAxMzQKLSNkZWZpbmUgU01TVFBDUjIJMHhlNjE1MDEzOAotI2RlZmluZSBTTVNUUENSMwkweEU2MTUwMTNDCi0jZGVmaW5lIFNNU1RQQ1I1CTB4RTYxNTAxNDQKLSNkZWZpbmUgU01TVFBDUjcJMHhlNjE1MDE0YwotI2RlZmluZSBTTVNUUENSOAkweEU2MTUwOTkwCi0jZGVmaW5lIFNNU1RQQ1I5CTB4RTYxNTA5OTQKLSNkZWZpbmUgU01TVFBDUjEwCTB4RTYxNTA5OTgKLSNkZWZpbmUgU01TVFBDUjExCTB4RTYxNTA5OUMKLQotI2RlZmluZSBNU1RQU1IxCQlJT01FTSgweGU2MTUwMDM4KQotI2RlZmluZSBNU1RQU1IyCQlJT01FTSgweGU2MTUwMDQwKQotI2RlZmluZSBNU1RQU1IzCQlJT01FTSgweGU2MTUwMDQ4KQotI2RlZmluZSBNU1RQU1I1CQlJT01FTSgweGU2MTUwMDNjKQotI2RlZmluZSBNU1RQU1I3CQlJT01FTSgweGU2MTUwMWM0KQotI2RlZmluZSBNU1RQU1I4CQlJT01FTSgweGU2MTUwOWEwKQotI2RlZmluZSBNU1RQU1I5CQlJT01FTSgweGU2MTUwOWE0KQotI2RlZmluZSBNU1RQU1IxMQlJT01FTSgweGU2MTUwOWFjKQotCi0jZGVmaW5lIFNEQ0tDUgkJMHhFNjE1MDA3NAotI2RlZmluZSBTRDFDS0NSCQkweEU2MTUwMDc4Ci0jZGVmaW5lIFNEMkNLQ1IJCTB4RTYxNTAyNmMKLSNkZWZpbmUgTU1DMENLQ1IJMHhFNjE1MDI0MAotI2RlZmluZSBNTUMxQ0tDUgkweEU2MTUwMjQ0Ci0jZGVmaW5lIFNTUENLQ1IJCTB4RTYxNTAyNDgKLSNkZWZpbmUgU1NQUlNDS0NSCTB4RTYxNTAyNEMKLQotc3RhdGljIHN0cnVjdCBjbGtfbWFwcGluZyBjcGdfbWFwcGluZyA9IHsKLQkucGh5cyAgID0gQ1BHX0JBU0UsCi0JLmxlbiAgICA9IENQR19MRU4sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBleHRhbF9jbGsgPSB7Ci0JLyogLnJhdGUgd2lsbCBiZSB1cGRhdGVkIG9uIHI4YTc3OTFfY2xvY2tfaW5pdCgpICovCi0JLm1hcHBpbmcJPSAmY3BnX21hcHBpbmcsCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX2Nsa19vcHMgZm9sbG93cGFyZW50X2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwk9IGZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtYWluX2NsayA9IHsKLQkvKiAucGFyZW50IHdpbGwgYmUgc2V0IHI4YTczYTRfY2xvY2tfaW5pdCAqLwotCS5vcHMJPSAmZm9sbG93cGFyZW50X2Nsa19vcHMsCi19OwotCi0vKgotICogY2xvY2sgcmF0aW8gb2YgdGhlc2UgY2xvY2sgd2lsbCBiZSB1cGRhdGVkCi0gKiBvbiByOGE3NzkxX2Nsb2NrX2luaXQoKQotICovCi1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKHBsbDFfY2xrLAkJbWFpbl9jbGssCTEsIDEpOwotU0hfRklYRURfUkFUSU9fQ0xLX1NFVChwbGwzX2NsaywJCW1haW5fY2xrLAkxLCAxKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQocXNwaV9jbGssCQlwbGwxX2NsaywJMSwgMSk7Ci0KLS8qIGZpeGVkIHJhdGlvIGNsb2NrICovCi1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKGV4dGFsX2RpdjJfY2xrLAkJZXh0YWxfY2xrLAkxLCAyKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoY3BfY2xrLAkJCWV4dGFsX2NsaywJMSwgMik7Ci0KLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQocGxsMV9kaXYyX2NsaywJCXBsbDFfY2xrLAkxLCAyKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoaHBfY2xrLAkJCXBsbDFfY2xrLAkxLCAxMik7Ci1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKHBfY2xrLAkJCXBsbDFfY2xrLAkxLCAyNCk7Ci1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKHJjbGtfY2xrLAkJcGxsMV9jbGssCTEsICg0OCAqIDEwMjQpKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQobXBfY2xrLAkJCXBsbDFfZGl2Ml9jbGssCTEsIDE1KTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoemdfY2xrLAkJCXBsbDFfY2xrLAkxLCAzKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoenhfY2xrLAkJCXBsbDFfY2xrLAkxLCAzKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoenNfY2xrLAkJCXBsbDFfY2xrLAkxLCA2KTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKm1haW5fY2xrc1tdID0gewotCSZleHRhbF9jbGssCi0JJmV4dGFsX2RpdjJfY2xrLAotCSZtYWluX2NsaywKLQkmcGxsMV9jbGssCi0JJnBsbDFfZGl2Ml9jbGssCi0JJnBsbDNfY2xrLAotCSZocF9jbGssCi0JJnBfY2xrLAotCSZxc3BpX2NsaywKLQkmcmNsa19jbGssCi0JJm1wX2NsaywKLQkmY3BfY2xrLAotCSZ6Z19jbGssCi0JJnp4X2NsaywKLQkmenNfY2xrLAotfTsKLQotLyogU0RISSAoRElWNCkgY2xvY2sgKi8KLXN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAxOCwgMjQsIDAsIDM2LCA0OCwgMTAgfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKLQkuZGl2aXNvcnMgPSBkaXZpc29ycywKLQkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKLQkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKLX07Ci0KLWVudW0gewotCURJVjRfU0RILCBESVY0X1NEMCwKLQlESVY0X05SCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkaXY0X2Nsa3NbRElWNF9OUl0gPSB7Ci0JW0RJVjRfU0RIXSA9IFNIX0NMS19ESVY0KCZwbGwxX2NsaywgU0RDS0NSLCA4LCAweDBkZmYsIENMS19FTkFCTEVfT05fSU5JVCksCi0JW0RJVjRfU0QwXSA9IFNIX0NMS19ESVY0KCZwbGwxX2NsaywgU0RDS0NSLCA0LCAweDFkZjAsIENMS19FTkFCTEVfT05fSU5JVCksCi19OwotCi0vKiBESVY2IGNsb2NrcyAqLwotZW51bSB7Ci0JRElWNl9TRDEsIERJVjZfU0QyLAotCURJVjZfTlIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRpdjZfY2xrc1tESVY2X05SXSA9IHsKLQlbRElWNl9TRDFdCT0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIFNEMUNLQ1IsIDApLAotCVtESVY2X1NEMl0JPSBTSF9DTEtfRElWNigmcGxsMV9kaXYyX2NsaywgU0QyQ0tDUiwgMCksCi19OwotCi0vKiBNU1RQICovCi1lbnVtIHsKLQlNU1RQMTEwOCwgTVNUUDExMDcsIE1TVFAxMTA2LAotCU1TVFA5MzEsIE1TVFA5MzAsIE1TVFA5MjksIE1TVFA5MjgsIE1TVFA5MjcsIE1TVFA5MjUsCi0JTVNUUDkxNywKLQlNU1RQODE1LCBNU1RQODE0LAotCU1TVFA4MTMsCi0JTVNUUDgxMSwgTVNUUDgxMCwgTVNUUDgwOSwKLQlNU1RQNzI2LCBNU1RQNzI0LCBNU1RQNzIzLCBNU1RQNzIxLCBNU1RQNzIwLAotCU1TVFA3MTksIE1TVFA3MTgsIE1TVFA3MTUsIE1TVFA3MTQsCi0JTVNUUDUyMiwKLQlNU1RQMzE0LCBNU1RQMzEyLCBNU1RQMzExLAotCU1TVFAyMTYsIE1TVFAyMDcsIE1TVFAyMDYsCi0JTVNUUDIwNCwgTVNUUDIwMywgTVNUUDIwMiwKLQlNU1RQMTI0LAotCU1TVFBfTlIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1zdHBfY2xrc1tNU1RQX05SXSA9IHsKLQlbTVNUUDExMDhdID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjExLCA4LCBNU1RQU1IxMSwgMCksIC8qIFNDSUZBNSAqLwotCVtNU1RQMTEwN10gPSBTSF9DTEtfTVNUUDMyX1NUUygmbXBfY2xrLCBTTVNUUENSMTEsIDcsIE1TVFBTUjExLCAwKSwgLyogU0NJRkE0ICovCi0JW01TVFAxMTA2XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZtcF9jbGssIFNNU1RQQ1IxMSwgNiwgTVNUUFNSMTEsIDApLCAvKiBTQ0lGQTMgKi8KLQlbTVNUUDkzMV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmaHBfY2xrLCBTTVNUUENSOSwgMzEsIE1TVFBTUjksIDApLCAvKiBJMkMwICovCi0JW01TVFA5MzBdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmhwX2NsaywgU01TVFBDUjksIDMwLCBNU1RQU1I5LCAwKSwgLyogSTJDMSAqLwotCVtNU1RQOTI5XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZocF9jbGssIFNNU1RQQ1I5LCAyOSwgTVNUUFNSOSwgMCksIC8qIEkyQzIgKi8KLQlbTVNUUDkyOF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmaHBfY2xrLCBTTVNUUENSOSwgMjgsIE1TVFBTUjksIDApLCAvKiBJMkMzICovCi0JW01TVFA5MjddID0gU0hfQ0xLX01TVFAzMl9TVFMoJmhwX2NsaywgU01TVFBDUjksIDI3LCBNU1RQU1I5LCAwKSwgLyogSTJDNCAqLwotCVtNU1RQOTI1XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZocF9jbGssIFNNU1RQQ1I5LCAyNSwgTVNUUFNSOSwgMCksIC8qIEkyQzUgKi8KLQlbTVNUUDkxN10gPSBTSF9DTEtfTVNUUDMyX1NUUygmcXNwaV9jbGssIFNNU1RQQ1I5LCAxNywgTVNUUFNSOSwgMCksIC8qIFFTUEkgKi8KLQlbTVNUUDgxNV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmenNfY2xrLCBTTVNUUENSOCwgMTUsIE1TVFBTUjgsIDApLCAvKiBTQVRBMCAqLwotCVtNU1RQODE0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZ6c19jbGssIFNNU1RQQ1I4LCAxNCwgTVNUUFNSOCwgMCksIC8qIFNBVEExICovCi0JW01TVFA4MTNdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSOCwgMTMsIE1TVFBTUjgsIDApLCAvKiBFdGhlciAqLwotCVtNU1RQODExXSA9IFNIX0NMS19NU1RQMzJfU1RTKCZ6Z19jbGssIFNNU1RQQ1I4LCAxMSwgTVNUUFNSOCwgMCksIC8qIFZJTjAgKi8KLQlbTVNUUDgxMF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmemdfY2xrLCBTTVNUUENSOCwgMTAsIE1TVFBTUjgsIDApLCAvKiBWSU4xICovCi0JW01TVFA4MDldID0gU0hfQ0xLX01TVFAzMl9TVFMoJnpnX2NsaywgU01TVFBDUjgsIDksIE1TVFBTUjgsIDApLCAvKiBWSU4yICovCi0JW01TVFA3MjZdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnp4X2NsaywgU01TVFBDUjcsIDI2LCBNU1RQU1I3LCAwKSwgLyogTFZEUzAgKi8KLQlbTVNUUDcyNF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmenhfY2xrLCBTTVNUUENSNywgMjQsIE1TVFBTUjcsIDApLCAvKiBEVTAgKi8KLQlbTVNUUDcyM10gPSBTSF9DTEtfTVNUUDMyX1NUUygmenhfY2xrLCBTTVNUUENSNywgMjMsIE1TVFBTUjcsIDApLCAvKiBEVTEgKi8KLQlbTVNUUDcyMV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmcF9jbGssIFNNU1RQQ1I3LCAyMSwgTVNUUFNSNywgMCksIC8qIFNDSUYwICovCi0JW01TVFA3MjBdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSNywgMjAsIE1TVFBTUjcsIDApLCAvKiBTQ0lGMSAqLwotCVtNU1RQNzE5XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjcsIDE5LCBNU1RQU1I3LCAwKSwgLyogU0NJRjIgKi8KLQlbTVNUUDcxOF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmcF9jbGssIFNNU1RQQ1I3LCAxOCwgTVNUUFNSNywgMCksIC8qIFNDSUYzICovCi0JW01TVFA3MTVdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSNywgMTUsIE1TVFBTUjcsIDApLCAvKiBTQ0lGNCAqLwotCVtNU1RQNzE0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjcsIDE0LCBNU1RQU1I3LCAwKSwgLyogU0NJRjUgKi8KLQlbTVNUUDUyMl0gPSBTSF9DTEtfTVNUUDMyX1NUUygmZXh0YWxfY2xrLCBTTVNUUENSNSwgMjIsIE1TVFBTUjUsIDApLCAvKiBUaGVybWFsICovCi0JW01TVFAzMTRdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmRpdjRfY2xrc1tESVY0X1NEMF0sIFNNU1RQQ1IzLCAxNCwgTVNUUFNSMywgMCksIC8qIFNESEkwICovCi0JW01TVFAzMTJdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmRpdjZfY2xrc1tESVY2X1NEMV0sIFNNU1RQQ1IzLCAxMiwgTVNUUFNSMywgMCksIC8qIFNESEkxICovCi0JW01TVFAzMTFdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmRpdjZfY2xrc1tESVY2X1NEMl0sIFNNU1RQQ1IzLCAxMSwgTVNUUFNSMywgMCksIC8qIFNESEkyICovCi0JW01TVFAyMTZdID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjIsIDE2LCBNU1RQU1IyLCAwKSwgLyogU0NJRkIyICovCi0JW01TVFAyMDddID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjIsIDcsIE1TVFBTUjIsIDApLCAvKiBTQ0lGQjEgKi8KLQlbTVNUUDIwNl0gPSBTSF9DTEtfTVNUUDMyX1NUUygmbXBfY2xrLCBTTVNUUENSMiwgNiwgTVNUUFNSMiwgMCksIC8qIFNDSUZCMCAqLwotCVtNU1RQMjA0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZtcF9jbGssIFNNU1RQQ1IyLCA0LCBNU1RQU1IyLCAwKSwgLyogU0NJRkEwICovCi0JW01TVFAyMDNdID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjIsIDMsIE1TVFBTUjIsIDApLCAvKiBTQ0lGQTEgKi8KLQlbTVNUUDIwMl0gPSBTSF9DTEtfTVNUUDMyX1NUUygmbXBfY2xrLCBTTVNUUENSMiwgMiwgTVNUUFNSMiwgMCksIC8qIFNDSUZBMiAqLwotCVtNU1RQMTI0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZyY2xrX2NsaywgU01TVFBDUjEsIDI0LCBNU1RQU1IxLCAwKSwgLyogQ01UMCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKLQotCS8qIG1haW4gY2xvY2tzICovCi0JQ0xLREVWX0NPTl9JRCgiZXh0YWwiLAkJJmV4dGFsX2NsayksCi0JQ0xLREVWX0NPTl9JRCgiZXh0YWxfZGl2MiIsCSZleHRhbF9kaXYyX2NsayksCi0JQ0xLREVWX0NPTl9JRCgibWFpbiIsCQkmbWFpbl9jbGspLAotCUNMS0RFVl9DT05fSUQoInBsbDEiLAkJJnBsbDFfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwbGwxX2RpdjIiLAkmcGxsMV9kaXYyX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGxsMyIsCQkmcGxsM19jbGspLAotCUNMS0RFVl9DT05fSUQoInpnIiwJCSZ6Z19jbGspLAotCUNMS0RFVl9DT05fSUQoInpzIiwJCSZ6c19jbGspLAotCUNMS0RFVl9DT05fSUQoImhwIiwJCSZocF9jbGspLAotCUNMS0RFVl9DT05fSUQoInAiLAkJJnBfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJxc3BpIiwJCSZxc3BpX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicmNsayIsCQkmcmNsa19jbGspLAotCUNMS0RFVl9DT05fSUQoIm1wIiwJCSZtcF9jbGspLAotCUNMS0RFVl9DT05fSUQoImNwIiwJCSZjcF9jbGspLAotCUNMS0RFVl9DT05fSUQoInBlcmlwaGVyYWxfY2xrIiwgJmhwX2NsayksCi0KLQkvKiBNU1RQICovCi0JQ0xLREVWX0lDS19JRCgibHZkcy4wIiwgInJjYXItZHUtcjhhNzc5MSIsICZtc3RwX2Nsa3NbTVNUUDcyNl0pLAotCUNMS0RFVl9JQ0tfSUQoImR1LjAiLCAicmNhci1kdS1yOGE3NzkxIiwgJm1zdHBfY2xrc1tNU1RQNzI0XSksCi0JQ0xLREVWX0lDS19JRCgiZHUuMSIsICJyY2FyLWR1LXI4YTc3OTEiLCAmbXN0cF9jbGtzW01TVFA3MjNdKSwKLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMCIsICZtc3RwX2Nsa3NbTVNUUDIwNF0pLCAvKiBTQ0lGQTAgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbTVNUUDIwM10pLCAvKiBTQ0lGQTEgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMiIsICZtc3RwX2Nsa3NbTVNUUDIwNl0pLCAvKiBTQ0lGQjAgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMyIsICZtc3RwX2Nsa3NbTVNUUDIwN10pLCAvKiBTQ0lGQjEgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuNCIsICZtc3RwX2Nsa3NbTVNUUDIxNl0pLCAvKiBTQ0lGQjIgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuNSIsICZtc3RwX2Nsa3NbTVNUUDIwMl0pLCAvKiBTQ0lGQTIgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuNiIsICZtc3RwX2Nsa3NbTVNUUDcyMV0pLCAvKiBTQ0lGMCAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS43IiwgJm1zdHBfY2xrc1tNU1RQNzIwXSksIC8qIFNDSUYxICovCi0JQ0xLREVWX0RFVl9JRCgic2gtc2NpLjgiLCAmbXN0cF9jbGtzW01TVFA3MTldKSwgLyogU0NJRjIgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuOSIsICZtc3RwX2Nsa3NbTVNUUDcxOF0pLCAvKiBTQ0lGMyAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4xMCIsICZtc3RwX2Nsa3NbTVNUUDcxNV0pLCAvKiBTQ0lGNCAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4xMSIsICZtc3RwX2Nsa3NbTVNUUDcxNF0pLCAvKiBTQ0lGNSAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4xMiIsICZtc3RwX2Nsa3NbTVNUUDExMDZdKSwgLyogU0NJRkEzICovCi0JQ0xLREVWX0RFVl9JRCgic2gtc2NpLjEzIiwgJm1zdHBfY2xrc1tNU1RQMTEwN10pLCAvKiBTQ0lGQTQgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMTQiLCAmbXN0cF9jbGtzW01TVFAxMTA4XSksIC8qIFNDSUZBNSAqLwotCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9zZGhpLjAiLCAmbXN0cF9jbGtzW01TVFAzMTRdKSwKLQlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4xIiwgJm1zdHBfY2xrc1tNU1RQMzEyXSksCi0JQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX3NkaGkuMiIsICZtc3RwX2Nsa3NbTVNUUDMxMV0pLAotCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1jbXQtNDgtZ2VuMi4wIiwgJm1zdHBfY2xrc1tNU1RQMTI0XSksCi0JQ0xLREVWX0RFVl9JRCgicXNwaS4wIiwgJm1zdHBfY2xrc1tNU1RQOTE3XSksCi0JQ0xLREVWX0RFVl9JRCgicmNhcl90aGVybWFsIiwgJm1zdHBfY2xrc1tNU1RQNTIyXSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4wIiwgJm1zdHBfY2xrc1tNU1RQOTMxXSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4xIiwgJm1zdHBfY2xrc1tNU1RQOTMwXSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4yIiwgJm1zdHBfY2xrc1tNU1RQOTI5XSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4zIiwgJm1zdHBfY2xrc1tNU1RQOTI4XSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi40IiwgJm1zdHBfY2xrc1tNU1RQOTI3XSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi41IiwgJm1zdHBfY2xrc1tNU1RQOTI1XSksCi0JQ0xLREVWX0RFVl9JRCgicjhhNzc5MS1ldGhlciIsICZtc3RwX2Nsa3NbTVNUUDgxM10pLCAvKiBFdGhlciAqLwotCUNMS0RFVl9ERVZfSUQoInI4YTc3OTEtdmluLjAiLCAmbXN0cF9jbGtzW01TVFA4MTFdKSwKLQlDTEtERVZfREVWX0lEKCJyOGE3NzkxLXZpbi4xIiwgJm1zdHBfY2xrc1tNU1RQODEwXSksCi0JQ0xLREVWX0RFVl9JRCgicjhhNzc5MS12aW4uMiIsICZtc3RwX2Nsa3NbTVNUUDgwOV0pLAotCUNMS0RFVl9ERVZfSUQoInNhdGEtcjhhNzc5MS4wIiwgJm1zdHBfY2xrc1tNU1RQODE1XSksCi0JQ0xLREVWX0RFVl9JRCgic2F0YS1yOGE3NzkxLjEiLCAmbXN0cF9jbGtzW01TVFA4MTRdKSwKLX07Ci0KLSNkZWZpbmUgUjhBNzc5MV9DTE9DS19ST09UKGUsIG0sIHAwLCBwMSwgcDMwLCBwMzEpCQlcCi0JZXh0YWxfY2xrLnJhdGUJPSBlICogMTAwMCAqIDEwMDA7CQkJXAotCW1haW5fY2xrLnBhcmVudAk9IG07CQkJCQlcCi0JU0hfQ0xLX1NFVF9SQVRJTygmcGxsMV9jbGtfcmF0aW8sIHAxIC8gMiwgMSk7CQlcCi0JaWYgKG1vZGUgJiBNRCgxOSkpCQkJCQlcCi0JCVNIX0NMS19TRVRfUkFUSU8oJnBsbDNfY2xrX3JhdGlvLCBwMzEsIDEpOwlcCi0JZWxzZQkJCQkJCQlcCi0JCVNIX0NMS19TRVRfUkFUSU8oJnBsbDNfY2xrX3JhdGlvLCBwMzAsIDEpCi0KLQotdm9pZCBfX2luaXQgcjhhNzc5MV9jbG9ja19pbml0KHZvaWQpCi17Ci0JdTMyIG1vZGUgPSByY2FyX2dlbjJfcmVhZF9tb2RlX3BpbnMoKTsKLQlpbnQgaywgcmV0ID0gMDsKLQotCXN3aXRjaCAobW9kZSAmIChNRCgxNCkgfCBNRCgxMykpKSB7Ci0JY2FzZSAwOgotCQlSOEE3NzkxX0NMT0NLX1JPT1QoMTUsICZleHRhbF9jbGssIDE3MiwgMjA4LCAxMDYsIDg4KTsKLQkJYnJlYWs7Ci0JY2FzZSBNRCgxMyk6Ci0JCVI4QTc3OTFfQ0xPQ0tfUk9PVCgyMCwgJmV4dGFsX2NsaywgMTMwLCAxNTYsIDgwLCA2Nik7Ci0JCWJyZWFrOwotCWNhc2UgTUQoMTQpOgotCQlSOEE3NzkxX0NMT0NLX1JPT1QoMjYsICZleHRhbF9kaXYyX2NsaywgMjAwLCAyNDAsIDEyMiwgMTAyKTsKLQkJYnJlYWs7Ci0JY2FzZSBNRCgxMykgfCBNRCgxNCk6Ci0JCVI4QTc3OTFfQ0xPQ0tfUk9PVCgzMCwgJmV4dGFsX2RpdjJfY2xrLCAxNzIsIDIwOCwgMTA2LCA4OCk7Ci0JCWJyZWFrOwotCX0KLQotCWlmICgobW9kZSAmIChNRCgzKSB8IE1EKDIpIHwgTUQoMSkpKSA9PSBNRCgyKSkKLQkJU0hfQ0xLX1NFVF9SQVRJTygmcXNwaV9jbGtfcmF0aW8sIDEsIDE2KTsKLQllbHNlCi0JCVNIX0NMS19TRVRfUkFUSU8oJnFzcGlfY2xrX3JhdGlvLCAxLCAyMCk7Ci0KLQlmb3IgKGsgPSAwOyAhcmV0ICYmIChrIDwgQVJSQVlfU0laRShtYWluX2Nsa3MpKTsgaysrKQotCQlyZXQgPSBjbGtfcmVnaXN0ZXIobWFpbl9jbGtzW2tdKTsKLQotCWlmICghcmV0KQotCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKLQotCWlmICghcmV0KQotCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIERJVjZfTlIpOwotCi0JaWYgKCFyZXQpCi0JCXJldCA9IHNoX2Nsa19tc3RwX3JlZ2lzdGVyKG1zdHBfY2xrcywgTVNUUF9OUik7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwotCi0JaWYgKCFyZXQpCi0JCXNobW9iaWxlX2Nsa19pbml0KCk7Ci0JZWxzZQotCQlnb3RvIGVwYW5pYzsKLQotCXJldHVybjsKLQotZXBhbmljOgotCXBhbmljKCJmYWlsZWQgdG8gc2V0dXAgcjhhNzc5MSBjbG9ja3NcbiIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKaW5kZXggNzA3MTY3Ni4uM2JjOTJmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYwppbmRleCAwMmE2ZjQ1Li42YjRjMWYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suYwppbmRleCA4MDZmOTQwLi4zNGYwNTZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay5jCkBAIC0xNCw0MSArMTQsMTMgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKICAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaWZkZWYgQ09ORklHX0NPTU1PTl9DTEsKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KLSNpbmNsdWRlICJjbG9jay5oIgotCi12b2lkIF9faW5pdCBzaG1vYmlsZV9jbGtfd29ya2Fyb3VuZChjb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa3MsCi0JCQkJICAgIGludCBucl9jbGtzLCBib29sIGVuYWJsZSkKLXsKLQljb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa247Ci0Jc3RydWN0IGNsayAqY2xrOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX2Nsa3M7ICsraSkgewotCQljbGtuID0gY2xrcyArIGk7Ci0JCWNsayA9IGNsa19nZXQoTlVMTCwgY2xrbi0+Y2xrKTsKLQkJaWYgKCFJU19FUlIoY2xrKSkgewotCQkJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssIGNsa24tPmNvbl9pZCwgY2xrbi0+ZGV2X2lkKTsKLQkJCWlmIChlbmFibGUpCi0JCQkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7Ci0JCQljbGtfcHV0KGNsayk7Ci0JCX0KLQl9Ci19Ci0KLSNlbHNlIC8qIENPTkZJR19DT01NT05fQ0xLICovCiAjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgogCkBAIC04NCw1ICs1NiwzIEBACiB7CiB9CiBFWFBPUlRfU1lNQk9MKF9fY2xrX3B1dCk7Ci0KLSNlbmRpZiAvKiBDT05GSUdfQ09NTU9OX0NMSyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay5oCmluZGV4IDMxYjY0MTcuLmNmMzU1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmgKQEAgLTEsMTkgKzEsNiBAQAogI2lmbmRlZiBDTE9DS19ICiAjZGVmaW5lIENMT0NLX0gKIAotI2lmZGVmIENPTkZJR19DT01NT05fQ0xLCi0vKiB0ZW1wb3JhcnkgY2xvY2sgY29uZmlndXJhdGlvbiBoZWxwZXIgZm9yIHBsYXRmb3JtIGRldmljZXMgKi8KLQotc3RydWN0IGNsa19uYW1lIHsKLQljb25zdCBjaGFyICpjbGs7Ci0JY29uc3QgY2hhciAqY29uX2lkOwotCWNvbnN0IGNoYXIgKmRldl9pZDsKLX07Ci0KLXZvaWQgc2htb2JpbGVfY2xrX3dvcmthcm91bmQoY29uc3Qgc3RydWN0IGNsa19uYW1lICpjbGtzLCBpbnQgbnJfY2xrcywKLQkJCSAgICAgYm9vbCBlbmFibGUpOwotCi0jZWxzZSAvKiBDT05GSUdfQ09NTU9OX0NMSyAqLwogLyogbGVnYWN5IGNsb2NrIGltcGxlbWVudGF0aW9uICovCiAKIHN0cnVjdCBjbGs7CkBAIC01Miw1ICszOSw0IEBACiAJKHApLT5kaXYgPSBkOwlcCiB9IHdoaWxlICgwKQogCi0jZW5kaWYgLyogQ09ORklHX0NPTU1PTl9DTEsgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29tbW9uLmgKaW5kZXggNzIwODdjNy4uMzA5MDI1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2NvbW1vbi5oCkBAIC0xOSwxMSArMTksNiBAQAogZXh0ZXJuIHZvaWQgc2htb2JpbGVfc21wX3NjdV9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKIGV4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9zY3VfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKIGV4dGVybiBpbnQgc2htb2JpbGVfc21wX3NjdV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOwotZXh0ZXJuIGludCBzaG1vYmlsZV9zbXBfYXBtdV9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LAotCQkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKTsKLWV4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9hcG11X2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7Ci1leHRlcm4gaW50IHNobW9iaWxlX3NtcF9hcG11X2NwdV9raWxsKHVuc2lnbmVkIGludCBjcHUpOwogc3RydWN0IGNsazsKIGV4dGVybiBpbnQgc2htb2JpbGVfY2xrX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBzaG1vYmlsZV9oYW5kbGVfaXJxX2ludGMoc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2NvbnNvbGUuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jCmluZGV4IGYyZTc5ZjIuLmUzMjljY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9oZWFkc21wLXNjdS5TIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9oZWFkc21wLXNjdS5TCmluZGV4IGY0NWRkZTcuLjY5ZGY4YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaGVhZHNtcC1zY3UuUworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2hlYWRzbXAtc2N1LlMKQEAgLTEyLDExICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jCmluZGV4IGUyYWYwMGIuLjFjY2Y0OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMKaW5kZXggNDQ0NTdhOS4uOWUzNjE4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYwpAQCAtMTEsMTAgKzExLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BsYXRzbXAtYXBtdS5jCmluZGV4IDJjMDY4MTAuLmY0ODNiNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbGF0c21wLWFwbXUuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBTTVAgc3VwcG9ydCBmb3IgU29DcyB3aXRoIEFQTVUKICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgIFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KICAqIENvcHlyaWdodCAoQykgMjAxMyAgTWFnbnVzIERhbW0KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjIsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicGxhdHNtcC1hcG11LmgiCiAKIHN0YXRpYyBzdHJ1Y3QgewogCXZvaWQgX19pb21lbSAqaW9tZW07CkBAIC04MywyOCArODUsMTUgQEAKIAlwcl9kZWJ1ZygiYXBtdSBpb3JlbWFwICVkICVkICVwclxuIiwgY3B1LCBiaXQsIHJlcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgewotCXN0cnVjdCByZXNvdXJjZSBpb21lbTsKLQlpbnQgY3B1c1s0XTsKLX0gYXBtdV9jb25maWdbXSA9IHsKLQl7Ci0JCS5pb21lbSA9IERFRklORV9SRVNfTUVNKDB4ZTYxNTIwMDAsIDB4ODgpLAotCQkuY3B1cyA9IHsgMCwgMSwgMiwgMyB9LAotCX0sCi0JewotCQkuaW9tZW0gPSBERUZJTkVfUkVTX01FTSgweGU2MTUxMDAwLCAweDg4KSwKLQkJLmNwdXMgPSB7IDB4MTAwLCAweDEwMSwgMHgxMDIsIDB4MTAzIH0sCi0JfQotfTsKLQotc3RhdGljIHZvaWQgYXBtdV9wYXJzZV9jZmcodm9pZCAoKmZuKShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IGNwdSwgaW50IGJpdCkpCitzdGF0aWMgdm9pZCBhcG11X3BhcnNlX2NmZyh2b2lkICgqZm4pKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgY3B1LCBpbnQgYml0KSwKKwkJCSAgIHN0cnVjdCByY2FyX2FwbXVfY29uZmlnICphcG11X2NvbmZpZywgaW50IG51bSkKIHsKIAl1MzIgaWQ7CiAJaW50IGs7CiAJaW50IGJpdCwgaW5kZXg7CiAJYm9vbCBpc19hbGxvd2VkOwogCi0JZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoYXBtdV9jb25maWcpOyBrKyspIHsKKwlmb3IgKGsgPSAwOyBrIDwgbnVtOyBrKyspIHsKIAkJLyogb25seSBlbmFibGUgdGhlIGNsdXN0ZXIgdGhhdCBpbmNsdWRlcyB0aGUgYm9vdCBDUFUgKi8KIAkJaXNfYWxsb3dlZCA9IGZhbHNlOwogCQlmb3IgKGJpdCA9IDA7IGJpdCA8IEFSUkFZX1NJWkUoYXBtdV9jb25maWdba10uY3B1cyk7IGJpdCsrKSB7CkBAIC0xMjgsMTQgKzExNywxNiBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQgc2htb2JpbGVfc21wX2FwbXVfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3ZvaWQgX19pbml0IHNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMsCisJCQkJCSAgIHN0cnVjdCByY2FyX2FwbXVfY29uZmlnICphcG11X2NvbmZpZywKKwkJCQkJICAgaW50IG51bSkKIHsKIAkvKiBpbnN0YWxsIGJvb3QgY29kZSBzaGFyZWQgYnkgYWxsIENQVXMgKi8KIAlzaG1vYmlsZV9ib290X2ZuID0gdmlydF90b19waHlzKHNobW9iaWxlX3NtcF9ib290KTsKIAlzaG1vYmlsZV9ib290X2FyZyA9IE1QSURSX0hXSURfQklUTUFTSzsKIAogCS8qIHBlcmZvcm0gcGVyLWNwdSBzZXR1cCAqLwotCWFwbXVfcGFyc2VfY2ZnKGFwbXVfaW5pdF9jcHUpOworCWFwbXVfcGFyc2VfY2ZnKGFwbXVfaW5pdF9jcHUsIGFwbXVfY29uZmlnLCBudW0pOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbGF0c21wLWFwbXUuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1MTJjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIHJtb2JpbGUgYXBtdSBkZWZpbml0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0ICBSZW5lc2FzIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIFBMQVRTTVBfQVBNVV9ICisjZGVmaW5lIFBMQVRTTVBfQVBNVV9ICisKK3N0cnVjdCByY2FyX2FwbXVfY29uZmlnIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgaW9tZW07CisJaW50IGNwdXNbNF07Cit9OworCitleHRlcm4gdm9pZCBzaG1vYmlsZV9zbXBfYXBtdV9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzLAorCQkJCQkgICBzdHJ1Y3QgcmNhcl9hcG11X2NvbmZpZyAqYXBtdV9jb25maWcsCisJCQkJCSAgIGludCBudW0pOworZXh0ZXJuIGludCBzaG1vYmlsZV9zbXBfYXBtdV9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKTsKK2V4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9hcG11X2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaW50IHNobW9iaWxlX3NtcF9hcG11X2NwdV9raWxsKHVuc2lnbmVkIGludCBjcHUpOworCisjZW5kaWYgLyogUExBVFNNUF9BUE1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcG0tcjhhNzc0MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1yOGE3NzQwLmMKaW5kZXggZTNmMTQ2NC4uYWMyZWVjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1yOGE3NzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1yOGE3NzQwLmMKQEAgLTE0LDEwICsxNCwxMCBAQAogI2luY2x1ZGUgInBtLXJtb2JpbGUuaCIKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiAhZGVmaW5lZChDT05GSUdfQVJDSF9NVUxUSVBMQVRGT1JNKQotc3RhdGljIGludCByOGE3NzQwX3BkX2E0c19zdXNwZW5kKHZvaWQpCitzdGF0aWMgaW50IHI4YTc3NDBfcGRfYTNzbV9zdXNwZW5kKHZvaWQpCiB7CiAJLyoKLQkgKiBUaGUgQTRTIGRvbWFpbiBjb250YWlucyB0aGUgQ1BVIGNvcmUgYW5kIHRoZXJlZm9yZSBpdCBzaG91bGQKKwkgKiBUaGUgQTNTTSBkb21haW4gY29udGFpbnMgdGhlIENQVSBjb3JlIGFuZCB0aGVyZWZvcmUgaXQgc2hvdWxkCiAJICogb25seSBiZSB0dXJuZWQgb2ZmIGlmIHRoZSBDUFUgaXMgbm90IGluIHVzZS4KIAkgKi8KIAlyZXR1cm4gLUVCVVNZOwpAQCAtMzIsMjkgKzMyLDY1IEBACiAJcmV0dXJuIGNvbnNvbGVfc3VzcGVuZF9lbmFibGVkID8gMCA6IC1FQlVTWTsKIH0KIAorc3RhdGljIGludCByOGE3NzQwX3BkX2Q0X3N1c3BlbmQodm9pZCkKK3sKKwkvKgorCSAqIFRoZSBENCBkb21haW4gY29udGFpbnMgdGhlIENvcmVzaWdodC1FVE0gaGFyZHdhcmUgYmxvY2sgYW5kCisJICogdGhlcmVmb3JlIGl0IHNob3VsZCBvbmx5IGJlIHR1cm5lZCBvZmYgaWYgdGhlIGRlYnVnIG1vZHVsZSBpcworCSAqIG5vdCBpbiB1c2UuCisJICovCisJcmV0dXJuIC1FQlVTWTsKK30KKwogc3RhdGljIHN0cnVjdCBybW9iaWxlX3BtX2RvbWFpbiByOGE3NzQwX3BtX2RvbWFpbnNbXSA9IHsKIAl7CiAJCS5nZW5wZC5uYW1lCT0gIkE0TEMiLAogCQkuYml0X3NoaWZ0CT0gMSwKIAl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkE0TVAiLAorCQkuYml0X3NoaWZ0CT0gMiwKKwl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkQ0IiwKKwkJLmJpdF9zaGlmdAk9IDMsCisJCS5nb3YJCT0gJnBtX2RvbWFpbl9hbHdheXNfb25fZ292LAorCQkuc3VzcGVuZAk9IHI4YTc3NDBfcGRfZDRfc3VzcGVuZCwKKwl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkE0UiIsCisJCS5iaXRfc2hpZnQJPSA1LAorCX0sIHsKKwkJLmdlbnBkLm5hbWUJPSAiQTNSViIsCisJCS5iaXRfc2hpZnQJPSA2LAorCX0sIHsKIAkJLmdlbnBkLm5hbWUJPSAiQTRTIiwKIAkJLmJpdF9zaGlmdAk9IDEwLAotCQkuZ292CQk9ICZwbV9kb21haW5fYWx3YXlzX29uX2dvdiwKIAkJLm5vX2RlYnVnCT0gdHJ1ZSwKLQkJLnN1c3BlbmQJPSByOGE3NzQwX3BkX2E0c19zdXNwZW5kLAogCX0sIHsKIAkJLmdlbnBkLm5hbWUJPSAiQTNTUCIsCiAJCS5iaXRfc2hpZnQJPSAxMSwKIAkJLmdvdgkJPSAmcG1fZG9tYWluX2Fsd2F5c19vbl9nb3YsCiAJCS5ub19kZWJ1Zwk9IHRydWUsCiAJCS5zdXNwZW5kCT0gcjhhNzc0MF9wZF9hM3NwX3N1c3BlbmQsCisJfSwgeworCQkuZ2VucGQubmFtZQk9ICJBM1NNIiwKKwkJLmJpdF9zaGlmdAk9IDEyLAorCQkuZ292CQk9ICZwbV9kb21haW5fYWx3YXlzX29uX2dvdiwKKwkJLnN1c3BlbmQJPSByOGE3NzQwX3BkX2Ezc21fc3VzcGVuZCwKKwl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkEzU0ciLAorCQkuYml0X3NoaWZ0CT0gMTMsCisJfSwgeworCQkuZ2VucGQubmFtZQk9ICJBNFNVIiwKKwkJLmJpdF9zaGlmdAk9IDIwLAogCX0sCiB9OwogCiB2b2lkIF9faW5pdCByOGE3NzQwX2luaXRfcG1fZG9tYWlucyh2b2lkKQogewogCXJtb2JpbGVfaW5pdF9kb21haW5zKHI4YTc3NDBfcG1fZG9tYWlucywgQVJSQVlfU0laRShyOGE3NzQwX3BtX2RvbWFpbnMpKTsKKwlwbV9nZW5wZF9hZGRfc3ViZG9tYWluX25hbWVzKCJBNFIiLCAiQTNSViIpOwogCXBtX2dlbnBkX2FkZF9zdWJkb21haW5fbmFtZXMoIkE0UyIsICJBM1NQIik7CisJcG1fZ2VucGRfYWRkX3N1YmRvbWFpbl9uYW1lcygiQTRTIiwgIkEzU00iKTsKKwlwbV9nZW5wZF9hZGRfc3ViZG9tYWluX25hbWVzKCJBNFMiLCAiQTNTRyIpOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAmJiAhQ09ORklHX0FSQ0hfTVVMVElQTEFURk9STSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTczYTQuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzNhNC5oCmluZGV4IDVmYWZkNmYuLjcwZGNkODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzNhNC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzNhNC5oCkBAIC0xMSw3ICsxMSw2IEBACiB9OwogCiB2b2lkIHI4YTczYTRfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7Ci12b2lkIHI4YTczYTRfYWRkX2R0X2RldmljZXModm9pZCk7CiB2b2lkIHI4YTczYTRfY2xvY2tfaW5pdCh2b2lkKTsKIHZvaWQgcjhhNzNhNF9waW5tdXhfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yOGE3NzQwLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NDAuaAppbmRleCBmMzY5YjRiLi5jYTc4MDVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NDAuaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NDAuaApAQCAtMTAsMTAgKzEwLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaWZuZGVmIF9fQVNNX1I4QTc3NDBfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NzguaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc3OC5oCmluZGV4IGY0MDc2YTUuLmY2NGZlZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc3OC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc3OC5oCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaWZuZGVmIF9fQVNNX1I4QTc3NzhfSF9fCiAjZGVmaW5lIF9fQVNNX1I4QTc3NzhfSF9fCkBAIC03MSw3ICs2Nyw2IEBACiBleHRlcm4gdm9pZCByOGE3Nzc4X2FkZF9kdF9kZXZpY2VzKHZvaWQpOwogCiBleHRlcm4gdm9pZCByOGE3Nzc4X2luaXRfbGF0ZSh2b2lkKTsKLWV4dGVybiB2b2lkIHI4YTc3NzhfaW5pdF9kZWxheSh2b2lkKTsKIGV4dGVybiB2b2lkIHI4YTc3NzhfaW5pdF9pcnFfZHQodm9pZCk7CiBleHRlcm4gdm9pZCByOGE3Nzc4X2Nsb2NrX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCByOGE3Nzc4X2luaXRfaXJxX2V4dHBpbihpbnQgaXJsbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3OTEuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc5MS5oCmluZGV4IGMxYmY3YWIuLjZjZjExZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc5MS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc5MS5oCkBAIC0xLDkgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9SOEE3NzkxX0hfXwogI2RlZmluZSBfX0FTTV9SOEE3NzkxX0hfXwogCi12b2lkIHI4YTc3OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7Ci12b2lkIHI4YTc3OTFfY2xvY2tfaW5pdCh2b2lkKTsKLXZvaWQgcjhhNzc5MV9waW5tdXhfaW5pdCh2b2lkKTsKIHZvaWQgcjhhNzc5MV9wbV9pbml0KHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyByOGE3NzkxX3NtcF9vcHM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtZW1ldjIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtZW1ldjIuYwppbmRleCBiMDZhOWU4Li5hYWQ5N2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLWVtZXYyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1lbWV2Mi5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yN3M3MjEwMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yN3M3MjEwMC5jCmluZGV4IDQxMjIxMDQuLjE3MTE3NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjdzNzIxMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI3czcyMTAwLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3M2E0LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTczYTQuYwppbmRleCA1M2Y0MGI3Li5jMjc2ODIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTczYTQuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTczYTQuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTgwLDE4ICsxNzYsMTMgQEAKIAlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDEyMCkpLAogfTsKIAotI2RlZmluZSByOGE3NzkwX3JlZ2lzdGVyX2NtdChpZHgpCQkJCQlcCisjZGVmaW5lIHI4YTczYTRfcmVnaXN0ZXJfY210KGlkeCkJCQkJCVwKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgInNoLWNtdC00OC1nZW4yIiwJXAogCQkJCQkgIGlkeCwgY210IyNpZHgjI19yZXNvdXJjZXMsCVwKIAkJCQkJICBBUlJBWV9TSVpFKGNtdCMjaWR4IyNfcmVzb3VyY2VzKSwgXAogCQkJCQkgICZjbXQjI2lkeCMjX3BsYXRmb3JtX2RhdGEsCVwKIAkJCQkJICBzaXplb2Yoc3RydWN0IHNoX3RpbWVyX2NvbmZpZykpCiAKLXZvaWQgX19pbml0IHI4YTczYTRfYWRkX2R0X2RldmljZXModm9pZCkKLXsKLQlyOGE3NzkwX3JlZ2lzdGVyX2NtdCgxKTsKLX0KLQogLyogRE1BICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnIGRtYV9zbGF2ZXNbXSA9IHsKIAl7CkBAIC0yODIsNyArMjczLDcgQEAKIAogdm9pZCBfX2luaXQgcjhhNzNhNF9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQogewotCXI4YTczYTRfYWRkX2R0X2RldmljZXMoKTsKKwlyOGE3M2E0X3JlZ2lzdGVyX2NtdCgxKTsKIAlyOGE3M2E0X3JlZ2lzdGVyX3NjaWYoMCk7CiAJcjhhNzNhNF9yZWdpc3Rlcl9zY2lmKDEpOwogCXI4YTczYTRfcmVnaXN0ZXJfc2NpZigyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc0MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKaW5kZXggODg5NGUxYi4uNzlhZDkzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC03MSw2ICs2Nyw3IEBACiAKIHZvaWQgX19pbml0IHI4YTc3NDBfbWFwX2lvKHZvaWQpCiB7CisJZGVidWdfbGxfaW9faW5pdCgpOwogCWlvdGFibGVfaW5pdChyOGE3NzQwX2lvX2Rlc2MsIEFSUkFZX1NJWkUocjhhNzc0MF9pb19kZXNjKSk7CiB9CiAKQEAgLTc0Niw2ICs3NDMsMTIgQEAKIHZvaWQgX19pbml0IHI4YTc3NDBfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKIHsKIAlzdGF0aWMgc3RydWN0IHBtX2RvbWFpbl9kZXZpY2UgZG9tYWluX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCQl7ICJBNFIiLCAgJnRtdTBfZGV2aWNlIH0sCisJCXsgIkE0UiIsICAmaTJjMF9kZXZpY2UgfSwKKwkJeyAiQTRTIiwgICZpcnFwaW4wX2RldmljZSB9LAorCQl7ICJBNFMiLCAgJmlycXBpbjFfZGV2aWNlIH0sCisJCXsgIkE0UyIsICAmaXJxcGluMl9kZXZpY2UgfSwKKwkJeyAiQTRTIiwgICZpcnFwaW4zX2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWYwX2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWYxX2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWYyX2RldmljZSB9LApAQCAtNzU2LDYgKzc1OSwxMSBAQAogCQl7ICJBM1NQIiwgJnNjaWY3X2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWY4X2RldmljZSB9LAogCQl7ICJBM1NQIiwgJmkyYzFfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmaXBtbXVfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmZG1hMF9kZXZpY2UgfSwKKwkJeyAiQTNTUCIsICZkbWExX2RldmljZSB9LAorCQl7ICJBM1NQIiwgJmRtYTJfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmdXNiX2RtYV9kZXZpY2UgfSwKIAl9OwogCiAJLyogSTJDIHdvcmstYXJvdW5kICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OC5jCmluZGV4IDg1ZmUwMTYuLjE3MGJkMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OC5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI5Miw4ICsyODgsNiBAQAogCQlsMngwX2luaXQoYmFzZSwgMHgwMDQwMDAwMCwgMHhjMjBmMGZmZik7CiAJfQogI2VuZGlmCi0KLQlyOGE3Nzc4X3JlZ2lzdGVyX3RtdSgwKTsKIH0KIAogLyogSFBCLURNQSAqLwpAQCAtNTAxLDYgKzQ5NSw3IEBACiB2b2lkIF9faW5pdCByOGE3Nzc4X2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCiB7CiAJcjhhNzc3OF9hZGRfZHRfZGV2aWNlcygpOworCXI4YTc3NzhfcmVnaXN0ZXJfdG11KDApOwogCXI4YTc3NzhfcmVnaXN0ZXJfc2NpZigwKTsKIAlyOGE3Nzc4X3JlZ2lzdGVyX3NjaWYoMSk7CiAJcjhhNzc3OF9yZWdpc3Rlcl9zY2lmKDIpOwpAQCAtNTcyLDExICs1NjcsNiBAQAogCQkJJmlycXBpbl9wbGF0Zm9ybV9kYXRhLCBzaXplb2YoaXJxcGluX3BsYXRmb3JtX2RhdGEpKTsKIH0KIAotdm9pZCBfX2luaXQgcjhhNzc3OF9pbml0X2RlbGF5KHZvaWQpCi17Ci0Jc2htb2JpbGVfaW5pdF9kZWxheSgpOwotfQotCiAjaWZkZWYgQ09ORklHX1VTRV9PRgogI2RlZmluZSBJTlQyU01TS0NSMAkweDgyMjg4IC8qIDB4ZmU3ODIyODggKi8KICNkZWZpbmUgSU5UMlNNU0tDUjEJMHg4MjI4YyAvKiAweGZlNzgyMjhjICovCkBAIC02MDgsNyArNTk4LDcgQEAKIH07CiAKIERUX01BQ0hJTkVfU1RBUlQoUjhBNzc3OF9EVCwgIkdlbmVyaWMgUjhBNzc3OCAoRmxhdHRlbmVkIERldmljZSBUcmVlKSIpCi0JLmluaXRfZWFybHkJPSByOGE3Nzc4X2luaXRfZGVsYXksCisJLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAogCS5pbml0X2lycQk9IHI4YTc3NzhfaW5pdF9pcnFfZHQsCiAJLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gcjhhNzc3OF9jb21wYXRfZHQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzkuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCmluZGV4IDEzNjA3OGEuLjYxNTZkMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTIsMTQgKzQ4LDE0IEBACiAjaW5jbHVkZSAicjhhNzc3OS5oIgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHI4YTc3NzlfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogMk0gZW50aXR5IG1hcCBmb3IgMHhmMDAwMDAwMCAoTVBDT1JFKSAqLworCS8qIDJNIGlkZW50aXR5IG1hcHBpbmcgZm9yIDB4ZjAwMDAwMDAgKE1QQ09SRSkgKi8KIAl7CiAJCS52aXJ0dWFsCT0gMHhmMDAwMDAwMCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4ZjAwMDAwMDApLAogCQkubGVuZ3RoCQk9IFNaXzJNLAogCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECiAJfSwKLQkvKiAxNk0gZW50aXR5IG1hcCBmb3IgMHhmZXh4eHh4eCAoRE1BQy1TL0hQQlJFRy9JTlRDMi9MUkFNL0RCU0MpICovCisJLyogMTZNIGlkZW50aXR5IG1hcHBpbmcgZm9yIDB4ZmV4eHh4eHggKERNQUMtUy9IUEJSRUcvSU5UQzIvTFJBTS9EQlNDKSAqLwogCXsKIAkJLnZpcnR1YWwJPSAweGZlMDAwMDAwLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oMHhmZTAwMDAwMCksCkBAIC03MCw2ICs2Niw3IEBACiAKIHZvaWQgX19pbml0IHI4YTc3NzlfbWFwX2lvKHZvaWQpCiB7CisJZGVidWdfbGxfaW9faW5pdCgpOwogCWlvdGFibGVfaW5pdChyOGE3Nzc5X2lvX2Rlc2MsIEFSUkFZX1NJWkUocjhhNzc3OV9pb19kZXNjKSk7CiB9CiAKQEAgLTY4Myw3ICs2ODAsNyBAQAogCiAJLyogRWFybHkgc2VyaWFsIGNvbnNvbGUgc2V0dXAgaXMgbm90IGluY2x1ZGVkIGhlcmUgZHVlIHRvCiAJICogbWVtb3J5IG1hcCBjb2xsaXNpb25zLiBUaGUgU0NJRiBzZXJpYWwgcG9ydHMgaW4gcjhhNzc3OQotCSAqIGFyZSBkaWZmaWN1bHQgdG8gZW50aXR5IG1hcCAxOjEgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIHRoZQorCSAqIGFyZSBkaWZmaWN1bHQgdG8gaWRlbnRpdHkgbWFwIDE6MSBkdWUgdG8gY29sbGlzaW9uIHdpdGggdGhlCiAJICogdmlydHVhbCBtZW1vcnkgcmFuZ2UgdXNlZCBieSB0aGUgY29oZXJlbnQgRE1BIGNvZGUgb24gQVJNLgogCSAqCiAJICogQW55b25lIHdhbnRpbmcgdG8gZGVidWcgZWFybHkgY2FuIHJlbW92ZSBVUEZfSU9SRU1BUCBmcm9tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3OTAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MC5jCmluZGV4IDg3N2ZkZWIuLmVjN2Q5N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MC5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKaW5kZXggMzVkNzg2My4uZWY4ZWIzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKQEAgLTEzLDE5OCArMTMsMTYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tcmNhci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaXJxLXJlbmVzYXMtaXJxYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImlycXMuaCIKICNpbmNsdWRlICJyOGE3NzkxLmgiCiAjaW5jbHVkZSAicmNhci1nZW4yLmgiCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgcGZjX3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCURFRklORV9SRVNfTUVNKDB4ZTYwNjAwMDAsIDB4MjUwKSwKLX07Ci0KLSNkZWZpbmUgcjhhNzc5MV9yZWdpc3Rlcl9wZmMoKQkJCQkJCVwKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJwZmMtcjhhNzc5MSIsIC0xLCBwZmNfcmVzb3VyY2VzLCBcCi0JCQkJCUFSUkFZX1NJWkUocGZjX3Jlc291cmNlcykpCi0KLSNkZWZpbmUgUjhBNzc5MV9HUElPKGlkeCwgYmFzZSwgbnIpCQkJCQlcCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIHI4YTc3OTFfZ3BpbyMjaWR4IyNfcmVzb3VyY2VzW10gX19pbml0Y29uc3QgPSB7IFwKLQlERUZJTkVfUkVTX01FTSgoYmFzZSksIDB4NTApLAkJCQkJXAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoNCArIChpZHgpKSksCQkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX3JjYXJfY29uZmlnCQkJCQlcCi1yOGE3NzkxX2dwaW8jI2lkeCMjX3BsYXRmb3JtX2RhdGEgX19pbml0Y29uc3QgPSB7CQkJXAotCS5ncGlvX2Jhc2UJPSAzMiAqIChpZHgpLAkJCQkJXAotCS5pcnFfYmFzZQk9IDAsCQkJCQkJXAotCS5udW1iZXJfb2ZfcGlucwk9IChuciksCQkJCQkJXAotCS5wY3RsX25hbWUJPSAicGZjLXI4YTc3OTEiLAkJCQlcCi0JLmhhc19ib3RoX2VkZ2VfdHJpZ2dlciA9IDEsCQkJCQlcCi19OwkJCQkJCQkJCVwKLQotUjhBNzc5MV9HUElPKDAsIDB4ZTYwNTAwMDAsIDMyKTsKLVI4QTc3OTFfR1BJTygxLCAweGU2MDUxMDAwLCAzMik7Ci1SOEE3NzkxX0dQSU8oMiwgMHhlNjA1MjAwMCwgMzIpOwotUjhBNzc5MV9HUElPKDMsIDB4ZTYwNTMwMDAsIDMyKTsKLVI4QTc3OTFfR1BJTyg0LCAweGU2MDU0MDAwLCAzMik7Ci1SOEE3NzkxX0dQSU8oNSwgMHhlNjA1NTAwMCwgMzIpOwotUjhBNzc5MV9HUElPKDYsIDB4ZTYwNTU0MDAsIDMyKTsKLVI4QTc3OTFfR1BJTyg3LCAweGU2MDU1ODAwLCAyNik7Ci0KLSNkZWZpbmUgcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKGlkeCkJCQkJCVwKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgImdwaW9fcmNhciIsIGlkeCwJXAotCQlyOGE3NzkxX2dwaW8jI2lkeCMjX3Jlc291cmNlcywJCQkJXAotCQlBUlJBWV9TSVpFKHI4YTc3OTFfZ3BpbyMjaWR4IyNfcmVzb3VyY2VzKSwJCVwKLQkJJnI4YTc3OTFfZ3BpbyMjaWR4IyNfcGxhdGZvcm1fZGF0YSwJCQlcCi0JCXNpemVvZihyOGE3NzkxX2dwaW8jI2lkeCMjX3BsYXRmb3JtX2RhdGEpKQotCi12b2lkIF9faW5pdCByOGE3NzkxX3Bpbm11eF9pbml0KHZvaWQpCi17Ci0JcjhhNzc5MV9yZWdpc3Rlcl9wZmMoKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX2dwaW8oMCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKDEpOwotCXI4YTc3OTFfcmVnaXN0ZXJfZ3BpbygyKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX2dwaW8oMyk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKDQpOwotCXI4YTc3OTFfcmVnaXN0ZXJfZ3Bpbyg1KTsKLQlyOGE3NzkxX3JlZ2lzdGVyX2dwaW8oNik7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKDcpOwotfQotCi0jZGVmaW5lIF9fUjhBNzc5MV9TQ0lGKHNjaWZfdHlwZSwgaW5kZXgsIGJhc2VhZGRyLCBpcnEpCQkJXAotc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYjI2luZGV4IyNfcGxhdGZvcm1fZGF0YSA9IHsJCVwKLQkudHlwZQkJPSBzY2lmX3R5cGUsCQkJCQlcCi0JLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX0lPUkVNQVAsCQlcCi0JLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUsCQkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzY2lmIyNpbmRleCMjX3Jlc291cmNlc1tdID0gewkJCVwKLQlERUZJTkVfUkVTX01FTShiYXNlYWRkciwgMHgxMDApLAkJCQlcCi0JREVGSU5FX1JFU19JUlEoaXJxKSwJCQkJCQlcCi19Ci0KLSNkZWZpbmUgUjhBNzc5MV9TQ0lGKGluZGV4LCBiYXNlYWRkciwgaXJxKQkJCQlcCi0JX19SOEE3NzkxX1NDSUYoUE9SVF9TQ0lGLCBpbmRleCwgYmFzZWFkZHIsIGlycSkKLQotI2RlZmluZSBSOEE3NzkxX1NDSUZBKGluZGV4LCBiYXNlYWRkciwgaXJxKQkJCQlcCi0JX19SOEE3NzkxX1NDSUYoUE9SVF9TQ0lGQSwgaW5kZXgsIGJhc2VhZGRyLCBpcnEpCi0KLSNkZWZpbmUgUjhBNzc5MV9TQ0lGQihpbmRleCwgYmFzZWFkZHIsIGlycSkJCQkJXAotCV9fUjhBNzc5MV9TQ0lGKFBPUlRfU0NJRkIsIGluZGV4LCBiYXNlYWRkciwgaXJxKQotCi1SOEE3NzkxX1NDSUZBKDAsICAweGU2YzQwMDAwLCBnaWNfc3BpKDE0NCkpOyAvKiBTQ0lGQTAgKi8KLVI4QTc3OTFfU0NJRkEoMSwgIDB4ZTZjNTAwMDAsIGdpY19zcGkoMTQ1KSk7IC8qIFNDSUZBMSAqLwotUjhBNzc5MV9TQ0lGQigyLCAgMHhlNmMyMDAwMCwgZ2ljX3NwaSgxNDgpKTsgLyogU0NJRkIwICovCi1SOEE3NzkxX1NDSUZCKDMsICAweGU2YzMwMDAwLCBnaWNfc3BpKDE0OSkpOyAvKiBTQ0lGQjEgKi8KLVI4QTc3OTFfU0NJRkIoNCwgIDB4ZTZjZTAwMDAsIGdpY19zcGkoMTUwKSk7IC8qIFNDSUZCMiAqLwotUjhBNzc5MV9TQ0lGQSg1LCAgMHhlNmM2MDAwMCwgZ2ljX3NwaSgxNTEpKTsgLyogU0NJRkEyICovCi1SOEE3NzkxX1NDSUYoNiwgICAweGU2ZTYwMDAwLCBnaWNfc3BpKDE1MikpOyAvKiBTQ0lGMCAqLwotUjhBNzc5MV9TQ0lGKDcsICAgMHhlNmU2ODAwMCwgZ2ljX3NwaSgxNTMpKTsgLyogU0NJRjEgKi8KLVI4QTc3OTFfU0NJRig4LCAgIDB4ZTZlNTgwMDAsIGdpY19zcGkoMjIpKTsgLyogU0NJRjIgKi8KLVI4QTc3OTFfU0NJRig5LCAgIDB4ZTZlYTgwMDAsIGdpY19zcGkoMjMpKTsgLyogU0NJRjMgKi8KLVI4QTc3OTFfU0NJRigxMCwgIDB4ZTZlZTAwMDAsIGdpY19zcGkoMjQpKTsgLyogU0NJRjQgKi8KLVI4QTc3OTFfU0NJRigxMSwgIDB4ZTZlZTgwMDAsIGdpY19zcGkoMjUpKTsgLyogU0NJRjUgKi8KLVI4QTc3OTFfU0NJRkEoMTIsIDB4ZTZjNzAwMDAsIGdpY19zcGkoMjkpKTsgLyogU0NJRkEzICovCi1SOEE3NzkxX1NDSUZBKDEzLCAweGU2Yzc4MDAwLCBnaWNfc3BpKDMwKSk7IC8qIFNDSUZBNCAqLwotUjhBNzc5MV9TQ0lGQSgxNCwgMHhlNmM4MDAwMCwgZ2ljX3NwaSgzMSkpOyAvKiBTQ0lGQTUgKi8KLQotI2RlZmluZSByOGE3NzkxX3JlZ2lzdGVyX3NjaWYoaW5kZXgpCQkJCQkgICAgICAgXAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAic2gtc2NpIiwgaW5kZXgsICAJICAgICAgIFwKLQkJCQkJICBzY2lmIyNpbmRleCMjX3Jlc291cmNlcywJICAgICAgIFwKLQkJCQkJICBBUlJBWV9TSVpFKHNjaWYjI2luZGV4IyNfcmVzb3VyY2VzKSwgXAotCQkJCQkgICZzY2lmIyNpbmRleCMjX3BsYXRmb3JtX2RhdGEsCSAgICAgICBcCi0JCQkJCSAgc2l6ZW9mKHNjaWYjI2luZGV4IyNfcGxhdGZvcm1fZGF0YSkpCi0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbHNfbWFzayA9IDB4NjAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDBfcmVzb3VyY2VzW10gPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhmZmNhMDAwMCwgMHgxMDA0KSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDE0MikpLAotfTsKLQotI2RlZmluZSByOGE3NzkxX3JlZ2lzdGVyX2NtdChpZHgpCQkJCQlcCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsICJzaC1jbXQtNDgtZ2VuMiIsCVwKLQkJCQkJICBpZHgsIGNtdCMjaWR4IyNfcmVzb3VyY2VzLAlcCi0JCQkJCSAgQVJSQVlfU0laRShjbXQjI2lkeCMjX3Jlc291cmNlcyksIFwKLQkJCQkJICAmY210IyNpZHgjI19wbGF0Zm9ybV9kYXRhLAlcCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBzaF90aW1lcl9jb25maWcpKQotCi1zdGF0aWMgc3RydWN0IHJlbmVzYXNfaXJxY19jb25maWcgaXJxYzBfZGF0YSA9IHsKLQkuaXJxX2Jhc2UgPSBpcnFfcGluKDApLCAvKiBJUlEwIC0+IElSUTkgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJxYzBfcmVzb3VyY2VzW10gPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhlNjFjMDAwMCwgMHgyMDApLCAvKiBJUlFDIEV2ZW50IERldGVjdG9yIEJsb2NrXzAgKi8KLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDApKSwgLyogSVJRMCAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMSkpLCAvKiBJUlExICovCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyKSksIC8qIElSUTIgKi8KLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDMpKSwgLyogSVJRMyAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTIpKSwgLyogSVJRNCAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTMpKSwgLyogSVJRNSAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTQpKSwgLyogSVJRNiAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTUpKSwgLyogSVJRNyAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTYpKSwgLyogSVJROCAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTcpKSwgLyogSVJROSAqLwotfTsKLQotI2RlZmluZSByOGE3NzkxX3JlZ2lzdGVyX2lycWMoaWR4KQkJCQkJXAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAicmVuZXNhc19pcnFjIiwJCVwKLQkJCQkJICBpZHgsIGlycWMjI2lkeCMjX3Jlc291cmNlcywJXAotCQkJCQkgIEFSUkFZX1NJWkUoaXJxYyMjaWR4IyNfcmVzb3VyY2VzKSwgXAotCQkJCQkgICZpcnFjIyNpZHgjI19kYXRhLAkJXAotCQkJCQkgIHNpemVvZihzdHJ1Y3QgcmVuZXNhc19pcnFjX2NvbmZpZykpCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGhlcm1hbF9yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQlERUZJTkVfUkVTX01FTSgweGU2MWYwMDAwLCAweDE0KSwKLQlERUZJTkVfUkVTX01FTSgweGU2MWYwMTAwLCAweDM4KSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDY5KSksCi19OwotCi0jZGVmaW5lIHI4YTc3OTFfcmVnaXN0ZXJfdGhlcm1hbCgpCQkJCQlcCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicmNhcl90aGVybWFsIiwgLTEsCQlcCi0JCQkJCXRoZXJtYWxfcmVzb3VyY2VzLAkJXAotCQkJCQlBUlJBWV9TSVpFKHRoZXJtYWxfcmVzb3VyY2VzKSkKLQotdm9pZCBfX2luaXQgcjhhNzc5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigwKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMSk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDIpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigzKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoNCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDUpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZig2KTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoNyk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDgpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZig5KTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMTApOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigxMSk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDEyKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMTMpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigxNCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9jbXQoMCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9pcnFjKDApOwotCXI4YTc3OTFfcmVnaXN0ZXJfdGhlcm1hbCgpOwotfQotCi0jaWZkZWYgQ09ORklHX1VTRV9PRgogc3RhdGljIGNvbnN0IGNoYXIgKnI4YTc3OTFfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGRhdGEgPSB7CiAJInJlbmVzYXMscjhhNzc5MSIsCiAJTlVMTCwKQEAgLTIxOCw0ICszNiwzIEBACiAJLnJlc2VydmUJPSByY2FyX2dlbjJfcmVzZXJ2ZSwKIAkuZHRfY29tcGF0CT0gcjhhNzc5MV9ib2FyZHNfY29tcGF0X2R0LAogTUFDSElORV9FTkQKLSNlbmRpZiAvKiBDT05GSUdfVVNFX09GICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yY2FyLWdlbjIuYwppbmRleCA0MmQ1YjQzLi4zZGQ2ZWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcmNhci1nZW4yLmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEzICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgogICogQ29weXJpZ2h0IChDKSAyMDEzICBNYWdudXMgRGFtbQorICogQ29weXJpZ2h0IChDKSAyMDE0ICBVbHJpY2ggSGVjaHQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEyLDEwICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Nsay9zaG1vYmlsZS5oPgpAQCAtMjQsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1jb250aWd1b3VzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlICJjb21tb24uaCIKQEAgLTU0LDM3ICs1Miw2MSBAQAogewogI2lmIGRlZmluZWQoQ09ORklHX0FSTV9BUkNIX1RJTUVSKSB8fCBkZWZpbmVkKENPTkZJR19DT01NT05fQ0xLKQogCXUzMiBtb2RlID0gcmNhcl9nZW4yX3JlYWRfbW9kZV9waW5zKCk7CisJYm9vbCBpc19lMiA9IChib29sKW9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCSJyZW5lc2FzLHI4YTc3OTQiKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19BUk1fQVJDSF9USU1FUgogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlpbnQgZXh0YWxfbWh6ID0gMDsKIAl1MzIgZnJlcTsKIAotCS8qIEF0IExpbnV4IGJvb3QgdGltZSB0aGUgcjhhNzc5MCBhcmNoIHRpbWVyIGNvbWVzIHVwCi0JICogd2l0aCB0aGUgY291bnRlciBkaXNhYmxlZC4gTW9yZW92ZXIsIGl0IG1heSBhbHNvIHJlcG9ydAotCSAqIGEgcG90ZW50aWFsbHkgaW5jb3JyZWN0IGZpeGVkIDEzIE1IeiBmcmVxdWVuY3kuIFRvIGJlCi0JICogY29ycmVjdCB0aGVzZSByZWdpc3RlcnMgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHVzZSB0aGUKLQkgKiBmcmVxdWVuY3kgRVhUQUwgLyAyIHdoaWNoIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBNRCBwaW5zLgotCSAqLworCWlmIChpc19lMikgeworCQlmcmVxID0gMjYwMDAwMDAwIC8gODsJLyogWlMgLyA4ICovCisJCS8qIENOVFZPRkYgaGFzIHRvIGJlIGluaXRpYWxpemVkIGVpdGhlciBmcm9tIG5vbi1zZWN1cmUKKwkJICogSHlwZXJ2aXNvciBtb2RlIG9yIHNlY3VyZSBNb25pdG9yIG1vZGUgd2l0aCBTQ1IuTlM9PTEuCisJCSAqIElmIFRydXN0Wm9uZSBpcyBlbmFibGVkIHRoZW4gaXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlCisJCSAqIHNlY3VyZSBjb2RlLgorCQkgKi8KKwkJYXNtIHZvbGF0aWxlKAorCQkiCWNwcwkweDE2XG4iCisJCSIJbXJjCXAxNSwgMCwgcjEsIGMxLCBjMSwgMFxuIgorCQkiCW9ycglyMCwgcjEsICMxXG4iCisJCSIJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMSwgMFxuIgorCQkiCWlzYlxuIgorCQkiCW1vdglyMCwgIzBcbiIKKwkJIgltY3JyCXAxNSwgNCwgcjAsIHIwLCBjMTRcbiIKKwkJIglpc2JcbiIKKwkJIgltY3IJcDE1LCAwLCByMSwgYzEsIGMxLCAwXG4iCisJCSIJaXNiXG4iCisJCSIJY3BzCTB4MTNcbiIKKwkJCTogOiA6ICJyMCIsICJyMSIpOworCX0gZWxzZSB7CisJCS8qIEF0IExpbnV4IGJvb3QgdGltZSB0aGUgcjhhNzc5MCBhcmNoIHRpbWVyIGNvbWVzIHVwCisJCSAqIHdpdGggdGhlIGNvdW50ZXIgZGlzYWJsZWQuIE1vcmVvdmVyLCBpdCBtYXkgYWxzbyByZXBvcnQKKwkJICogYSBwb3RlbnRpYWxseSBpbmNvcnJlY3QgZml4ZWQgMTMgTUh6IGZyZXF1ZW5jeS4gVG8gYmUKKwkJICogY29ycmVjdCB0aGVzZSByZWdpc3RlcnMgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHVzZSB0aGUKKwkJICogZnJlcXVlbmN5IEVYVEFMIC8gMiB3aGljaCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgTUQgcGlucy4KKwkJICovCiAKLQlzd2l0Y2ggKG1vZGUgJiAoTUQoMTQpIHwgTUQoMTMpKSkgewotCWNhc2UgMDoKLQkJZXh0YWxfbWh6ID0gMTU7Ci0JCWJyZWFrOwotCWNhc2UgTUQoMTMpOgotCQlleHRhbF9taHogPSAyMDsKLQkJYnJlYWs7Ci0JY2FzZSBNRCgxNCk6Ci0JCWV4dGFsX21oeiA9IDI2OwotCQlicmVhazsKLQljYXNlIE1EKDEzKSB8IE1EKDE0KToKLQkJZXh0YWxfbWh6ID0gMzA7Ci0JCWJyZWFrOworCQlzd2l0Y2ggKG1vZGUgJiAoTUQoMTQpIHwgTUQoMTMpKSkgeworCQljYXNlIDA6CisJCQlleHRhbF9taHogPSAxNTsKKwkJCWJyZWFrOworCQljYXNlIE1EKDEzKToKKwkJCWV4dGFsX21oeiA9IDIwOworCQkJYnJlYWs7CisJCWNhc2UgTUQoMTQpOgorCQkJZXh0YWxfbWh6ID0gMjY7CisJCQlicmVhazsKKwkJY2FzZSBNRCgxMykgfCBNRCgxNCk6CisJCQlleHRhbF9taHogPSAzMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogVGhlIGFyY2ggdGltZXIgZnJlcXVlbmN5IGVxdWFscyBFWFRBTCAvIDIgKi8KKwkJZnJlcSA9IGV4dGFsX21oeiAqICgxMDAwMDAwIC8gMik7CiAJfQogCi0JLyogVGhlIGFyY2ggdGltZXIgZnJlcXVlbmN5IGVxdWFscyBFWFRBTCAvIDIgKi8KLQlmcmVxID0gZXh0YWxfbWh6ICogKDEwMDAwMDAgLyAyKTsKLQogCS8qIFJlbWFwICJhcm1nY250IGFkZHJlc3MgbWFwIiBzcGFjZSAqLwogCWJhc2UgPSBpb3JlbWFwKDB4ZTYwODAwMDAsIFBBR0VfU0laRSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Mi5jCmluZGV4IGQ2NDZjOGQuLjQ1OGEyY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQ3LDcgKzQzLDcgQEAKICNpbmNsdWRlICJzaDczNzIuaCIKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzaDczNzJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogY3JlYXRlIGEgMToxIGVudGl0eSBtYXAgZm9yIDB4ZTZ4eHh4eHgKKwkvKiBjcmVhdGUgYSAxOjEgaWRlbnRpdHkgbWFwcGluZyBmb3IgMHhlNnh4eHh4eAogCSAqIHVzZWQgYnkgQ1BHQSwgSU5UQyBhbmQgUEZDLgogCSAqLwogCXsKQEAgLTYwLDYgKzU2LDcgQEAKIAogdm9pZCBfX2luaXQgc2g3MzcyX21hcF9pbyh2b2lkKQogeworCWRlYnVnX2xsX2lvX2luaXQoKTsKIAlpb3RhYmxlX2luaXQoc2g3MzcyX2lvX2Rlc2MsIEFSUkFZX1NJWkUoc2g3MzcyX2lvX2Rlc2MpKTsKIH0KIApAQCAtMTAxMiw2ICsxMDA5LDcgQEAKIAkuaW5pdF9pcnEJPSBzaDczNzJfaW5pdF9pcnEsCiAJLmhhbmRsZV9pcnEJPSBzaG1vYmlsZV9oYW5kbGVfaXJxX2ludGMsCiAJLmluaXRfbWFjaGluZQk9IHNoNzM3Ml9hZGRfc3RhbmRhcmRfZGV2aWNlc19kdCwKKwkuaW5pdF9sYXRlCT0gc2htb2JpbGVfaW5pdF9sYXRlLAogCS5kdF9jb21wYXQJPSBzaDczNzJfYm9hcmRzX2NvbXBhdF9kdCwKIE1BQ0hJTkVfRU5ECiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzNhMC5jCmluZGV4IDMyODY1N2QuLjkzZWJlMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3M2EwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczYTAuYwpAQCAtMTMsMTAgKzEzLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQ2LDcgKzQyLDcgQEAKICNpbmNsdWRlICJzaDczYTAuaCIKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzaDczYTBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogY3JlYXRlIGEgMToxIGVudGl0eSBtYXAgZm9yIDB4ZTZ4eHh4eHgKKwkvKiBjcmVhdGUgYSAxOjEgaWRlbnRpdHkgbWFwcGluZyBmb3IgMHhlNnh4eHh4eAogCSAqIHVzZWQgYnkgQ1BHQSwgSU5UQyBhbmQgUEZDLgogCSAqLwogCXsKQEAgLTU5LDYgKzU1LDcgQEAKIAogdm9pZCBfX2luaXQgc2g3M2EwX21hcF9pbyh2b2lkKQogeworCWRlYnVnX2xsX2lvX2luaXQoKTsKIAlpb3RhYmxlX2luaXQoc2g3M2EwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoc2g3M2EwX2lvX2Rlc2MpKTsKIH0KIApAQCAtNzYwLDE3ICs3NTcsMTIgQEAKIAkJCSAgICBBUlJBWV9TSVpFKHNoNzNhMF9sYXRlX2RldmljZXMpKTsKIH0KIAotdm9pZCBfX2luaXQgc2g3M2EwX2luaXRfZGVsYXkodm9pZCkKLXsKLQlzaG1vYmlsZV9pbml0X2RlbGF5KCk7Ci19Ci0KIC8qIGRvIG5vdGhpbmcgZm9yICFDT05GSUdfU01QIG9yICFDT05GSUdfSEFWRV9UV0QgKi8KIHZvaWQgX19pbml0IF9fd2VhayBzaDczYTBfcmVnaXN0ZXJfdHdkKHZvaWQpIHsgfQogCiB2b2lkIF9faW5pdCBzaDczYTBfZWFybHl0aW1lcl9pbml0KHZvaWQpCiB7Ci0Jc2g3M2EwX2luaXRfZGVsYXkoKTsKKwlzaG1vYmlsZV9pbml0X2RlbGF5KCk7CiAJc2g3M2EwX2Nsb2NrX2luaXQoKTsKIAlzaG1vYmlsZV9lYXJseXRpbWVyX2luaXQoKTsKIAlzaDczYTBfcmVnaXN0ZXJfdHdkKCk7CkBAIC03OTUsNiArNzg3LDEzIEBACiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogfQogCisjZGVmaW5lIFJFU0NOVDIgSU9NRU0oMHhlNjE4ODAyMCkKK3N0YXRpYyB2b2lkIHNoNzNhMF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCS8qIERvIHNvZnQgcG93ZXIgb24gcmVzZXQgKi8KKwl3cml0ZWwoKDEgPDwgMzEpLCBSRVNDTlQyKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKnNoNzNhMF9ib2FyZHNfY29tcGF0X2R0W10gX19pbml0ZGF0YSA9IHsKIAkicmVuZXNhcyxzaDczYTAiLAogCU5VTEwsCkBAIC04MDMsOSArODAyLDEwIEBACiBEVF9NQUNISU5FX1NUQVJUKFNINzNBMF9EVCwgIkdlbmVyaWMgU0g3M0EwIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpIikKIAkuc21wCQk9IHNtcF9vcHMoc2g3M2EwX3NtcF9vcHMpLAogCS5tYXBfaW8JCT0gc2g3M2EwX21hcF9pbywKLQkuaW5pdF9lYXJseQk9IHNoNzNhMF9pbml0X2RlbGF5LAorCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKIAkuaW5pdF9tYWNoaW5lCT0gc2g3M2EwX2FkZF9zdGFuZGFyZF9kZXZpY2VzX2R0LAogCS5pbml0X2xhdGUJPSBzaG1vYmlsZV9pbml0X2xhdGUsCisJLnJlc3RhcnQJPSBzaDczYTBfcmVzdGFydCwKIAkuZHRfY29tcGF0CT0gc2g3M2EwX2JvYXJkc19jb21wYXRfZHQsCiBNQUNISU5FX0VORAogI2VuZGlmIC8qIENPTkZJR19VU0VfT0YgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2g3M2EwLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NoNzNhMC5oCmluZGV4IDM1OWI1ODIuLmYwMzdjNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2g3M2EwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zaDczYTAuaApAQCAtNzEsNyArNzEsNiBAQAogI2RlZmluZSBTSDczQTBfUElOVDBfSVJRKGlycSkgKChpcnEpICsgNzAwKQogI2RlZmluZSBTSDczQTBfUElOVDFfSVJRKGlycSkgKChpcnEpICsgNzMyKQogCi1leHRlcm4gdm9pZCBzaDczYTBfaW5pdF9kZWxheSh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzNhMF9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzNhMF9pbml0X2lycV9kdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzNhMF9tYXBfaW8odm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NsZWVwLXNoNzM3Mi5TIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbGVlcC1zaDczNzIuUwppbmRleCA5NzgyODYyLi4xNDZiOGRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NsZWVwLXNoNzM3Mi5TCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2xlZXAtc2g3MzcyLlMKQEAgLTIyLDExICsyMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtZW1ldjIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLWVtZXYyLmMKaW5kZXggNmZmMWRmMS4uYmFmZjNiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtZW1ldjIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1lbWV2Mi5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc3OS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc3OS5jCmluZGV4IDMxMDBlMzUuLjNmNzYxZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXI4YTc3NzkuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3Nzc5LmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkwLmMKaW5kZXggMjMxMTY5NC4uOWMzZGExMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc5MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXI4YTc3OTAuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicGxhdHNtcC1hcG11LmgiCiAjaW5jbHVkZSAicG0tcmNhci5oIgogI2luY2x1ZGUgInI4YTc3OTAuaCIKIApAQCAtMzQsMTAgKzM1LDIzIEBACiAJLmlzcl9iaXQgPSAyMSwgLyogQ0E3LVNDVSAqLwogfTsKIAorc3RhdGljIHN0cnVjdCByY2FyX2FwbXVfY29uZmlnIHI4YTc3OTBfYXBtdV9jb25maWdbXSA9IHsKKwl7CisJCS5pb21lbSA9IERFRklORV9SRVNfTUVNKDB4ZTYxNTIwMDAsIDB4ODgpLAorCQkuY3B1cyA9IHsgMCwgMSwgMiwgMyB9LAorCX0sCisJeworCQkuaW9tZW0gPSBERUZJTkVfUkVTX01FTSgweGU2MTUxMDAwLCAweDg4KSwKKwkJLmNwdXMgPSB7IDB4MTAwLCAweDAxMDEsIDB4MTAyLCAweDEwMyB9LAorCX0KK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCByOGE3NzkwX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewogCS8qIGxldCBBUE1VIGNvZGUgaW5zdGFsbCBkYXRhIHJlbGF0ZWQgdG8gc2htb2JpbGVfYm9vdF92ZWN0b3IgKi8KLQlzaG1vYmlsZV9zbXBfYXBtdV9wcmVwYXJlX2NwdXMobWF4X2NwdXMpOworCXNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyhtYXhfY3B1cywKKwkJCQkgICAgICAgcjhhNzc5MF9hcG11X2NvbmZpZywKKwkJCQkgICAgICAgQVJSQVlfU0laRShyOGE3NzkwX2FwbXVfY29uZmlnKSk7CiAKIAkvKiB0dXJuIG9uIHBvd2VyIHRvIFNDVSAqLwogCXI4YTc3OTBfcG1faW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc5MS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc5MS5jCmluZGV4IGY3NDMzODYuLjdlNDllMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXI4YTc3OTEuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkxLmMKQEAgLTIxLDEzICsyMSwyMyBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicGxhdHNtcC1hcG11LmgiCiAjaW5jbHVkZSAicjhhNzc5MS5oIgogI2luY2x1ZGUgInJjYXItZ2VuMi5oIgogCitzdGF0aWMgc3RydWN0IHJjYXJfYXBtdV9jb25maWcgcjhhNzc5MV9hcG11X2NvbmZpZ1tdID0geworCXsKKwkJLmlvbWVtID0gREVGSU5FX1JFU19NRU0oMHhlNjE1MjAwMCwgMHg4OCksCisJCS5jcHVzID0geyAwLCAxIH0sCisJfQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHI4YTc3OTFfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CiAJLyogbGV0IEFQTVUgY29kZSBpbnN0YWxsIGRhdGEgcmVsYXRlZCB0byBzaG1vYmlsZV9ib290X3ZlY3RvciAqLwotCXNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7CisJc2htb2JpbGVfc21wX2FwbXVfcHJlcGFyZV9jcHVzKG1heF9jcHVzLAorCQkJCSAgICAgICByOGE3NzkxX2FwbXVfY29uZmlnLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKHI4YTc3OTFfYXBtdV9jb25maWcpKTsKIAogCXI4YTc3OTFfcG1faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1zaDczYTAuYwppbmRleCAyMmQ4Zjg3Li5jMTZkYmZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1zaDczYTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1zaDczYTAuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYwppbmRleCA4N2M2YmUxLi5mMWQwMjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS90aW1lci5jCkBAIC0xMiwxMSArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CkBAIC00NSw2ICs0MCw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpucCwgKmNwdXM7CiAJYm9vbCBpc19hN19hOF9hOSA9IGZhbHNlOwogCWJvb2wgaXNfYTE1ID0gZmFsc2U7CisJYm9vbCBoYXNfYXJjaF90aW1lciA9IGZhbHNlOwogCXUzMiBtYXhfZnJlcSA9IDA7CiAKIAljcHVzID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jcHVzIik7CkBAIC01NywxMiArNTMsMTYgQEAKIAkJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNsb2NrLWZyZXF1ZW5jeSIsICZmcmVxKSkKIAkJCW1heF9mcmVxID0gbWF4KG1heF9mcmVxLCBmcmVxKTsKIAotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhcm0sY29ydGV4LWE3IikgfHwKLQkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYXJtLGNvcnRleC1hOCIpIHx8Ci0JCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTkiKSkKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYXJtLGNvcnRleC1hOCIpIHx8CisJCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTkiKSkgewogCQkJaXNfYTdfYThfYTkgPSB0cnVlOwotCQllbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTE1IikpCisJCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhcm0sY29ydGV4LWE3IikpIHsKKwkJCWlzX2E3X2E4X2E5ID0gdHJ1ZTsKKwkJCWhhc19hcmNoX3RpbWVyID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTE1IikpIHsKIAkJCWlzX2ExNSA9IHRydWU7CisJCQloYXNfYXJjaF90aW1lciA9IHRydWU7CisJCX0KIAl9CiAKIAlvZl9ub2RlX3B1dChjcHVzKTsKQEAgLTcwLDEwICs3MCwxMiBAQAogCWlmICghbWF4X2ZyZXEpCiAJCXJldHVybjsKIAotCWlmIChpc19hN19hOF9hOSkKLQkJc2htb2JpbGVfc2V0dXBfZGVsYXlfaHoobWF4X2ZyZXEsIDEsIDMpOwotCWVsc2UgaWYgKGlzX2ExNSAmJiAhSVNfRU5BQkxFRChDT05GSUdfQVJNX0FSQ0hfVElNRVIpKQotCQlzaG1vYmlsZV9zZXR1cF9kZWxheV9oeihtYXhfZnJlcSwgMiwgNCk7CisJaWYgKCFoYXNfYXJjaF90aW1lciB8fCAhSVNfRU5BQkxFRChDT05GSUdfQVJNX0FSQ0hfVElNRVIpKSB7CisJCWlmIChpc19hN19hOF9hOSkKKwkJCXNobW9iaWxlX3NldHVwX2RlbGF5X2h6KG1heF9mcmVxLCAxLCAzKTsKKwkJZWxzZSBpZiAoaXNfYTE1KQorCQkJc2htb2JpbGVfc2V0dXBfZGVsYXlfaHoobWF4X2ZyZXEsIDIsIDQpOworCX0KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNobW9iaWxlX2xhdGVfdGltZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1zb2NmcGdhL2NvcmUuaAppbmRleCA2MGM0NDNkLi40ODNjYjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc29jZnBnYS9jb3JlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgX19NQUNIX0NPUkVfSAogCiAjZGVmaW5lIFNPQ0ZQR0FfUlNUTUdSX0NUUkwJMHgwNAorI2RlZmluZSBTT0NGUEdBX1JTVE1HUl9NT0RNUFVSU1QJMHgxMAogI2RlZmluZSBTT0NGUEdBX1JTVE1HUl9NT0RQRVJSU1QJMHgxNAogI2RlZmluZSBTT0NGUEdBX1JTVE1HUl9CUkdNT0RSU1QJMHgxYwogCkBAIC0yOCw2ICsyOSw4IEBACiAjZGVmaW5lIFJTVE1HUl9DVFJMX1NXQ09MRFJTVFJFUQkweDEJLyogQ29sZCBSZXNldCAqLwogI2RlZmluZSBSU1RNR1JfQ1RSTF9TV1dBUk1SU1RSRVEJMHgyCS8qIFdhcm0gUmVzZXQgKi8KIAorI2RlZmluZSBSU1RNR1JfTVBVTU9EUlNUX0NQVTEJCTB4MiAgICAgLyogQ1BVMSBSZXNldCAqLworCiBleHRlcm4gdm9pZCBzb2NmcGdhX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqc29jZnBnYV9zY3VfYmFzZV9hZGRyOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1zb2NmcGdhL3BsYXRzbXAuYwppbmRleCAxNmNhOTdiLi5jNjRkODliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc29jZnBnYS9wbGF0c21wLmMKQEAgLTM0LDE3ICszNCwyMSBAQAogCWludCB0cmFtcG9saW5lX3NpemUgPSAmc2Vjb25kYXJ5X3RyYW1wb2xpbmVfZW5kIC0gJnNlY29uZGFyeV90cmFtcG9saW5lOwogCiAJaWYgKHNvY2ZwZ2FfY3B1MXN0YXJ0X2FkZHIpIHsKKwkJLyogVGhpcyB3aWxsIHB1dCBDUFUgIzEgaW50byByZXNldC4gKi8KKwkJd3JpdGVsKFJTVE1HUl9NUFVNT0RSU1RfQ1BVMSwKKwkJICAgICAgIHJzdF9tYW5hZ2VyX2Jhc2VfYWRkciArIFNPQ0ZQR0FfUlNUTUdSX01PRE1QVVJTVCk7CisKIAkJbWVtY3B5KHBoeXNfdG9fdmlydCgwKSwgJnNlY29uZGFyeV90cmFtcG9saW5lLCB0cmFtcG9saW5lX3NpemUpOwogCi0JCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoc29jZnBnYV9zZWNvbmRhcnlfc3RhcnR1cCksCi0JCQkoc3lzX21hbmFnZXJfYmFzZV9hZGRyICsgKHNvY2ZwZ2FfY3B1MXN0YXJ0X2FkZHIgJiAweDAwMDAwMGZmKSkpOworCQl3cml0ZWwodmlydF90b19waHlzKHNvY2ZwZ2Ffc2Vjb25kYXJ5X3N0YXJ0dXApLAorCQkgICAgICAgc3lzX21hbmFnZXJfYmFzZV9hZGRyICsgKHNvY2ZwZ2FfY3B1MXN0YXJ0X2FkZHIgJiAweDAwMDAwMGZmKSk7CiAKIAkJZmx1c2hfY2FjaGVfYWxsKCk7CiAJCXNtcF93bWIoKTsKIAkJb3V0ZXJfY2xlYW5fcmFuZ2UoMCwgdHJhbXBvbGluZV9zaXplKTsKIAotCQkvKiBUaGlzIHdpbGwgcmVsZWFzZSBDUFUgIzEgb3V0IG9mIHJlc2V0LiovCi0JCV9fcmF3X3dyaXRlbCgwLCByc3RfbWFuYWdlcl9iYXNlX2FkZHIgKyAweDEwKTsKKwkJLyogVGhpcyB3aWxsIHJlbGVhc2UgQ1BVICMxIG91dCBvZiByZXNldC4gKi8KKwkJd3JpdGVsKDAsIHJzdF9tYW5hZ2VyX2Jhc2VfYWRkciArIFNPQ0ZQR0FfUlNUTUdSX01PRE1QVVJTVCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04NiwxMCArOTAsOSBAQAogICovCiBzdGF0aWMgdm9pZCBzb2NmcGdhX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKIHsKLQljcHVfZG9faWRsZSgpOwotCi0JLyogV2Ugc2hvdWxkIGhhdmUgbmV2ZXIgcmV0dXJuZWQgZnJvbSBpZGxlICovCi0JcGFuaWMoImNwdSAlZCB1bmV4cGVjdGVkbHkgZXhpdCBmcm9tIHNodXRkb3duXG4iLCBjcHUpOworCS8qIERvIFdGSS4gSWYgd2Ugd2FrZSB1cCBlYXJseSwgZ28gYmFjayBpbnRvIFdGSSAqLworCXdoaWxlICgxKQorCQljcHVfZG9faWRsZSgpOwogfQogCiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgc29jZnBnYV9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXN0aS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zdGkvS2NvbmZpZwppbmRleCA4NzhlOWVjLi44ODI1YmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXN0aS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtc3RpL0tjb25maWcKQEAgLTQyLDQgKzQyLDE0IEBACiAJICBhbmQgb3RoZXIgZGlnaXRhbCBhdWRpby92aWRlbyBhcHBsaWNhdGlvbnMgdXNpbmcgRmxhdHRlbmVkIERldmljZQogCSAgVHJlZXMuCiAKK2NvbmZpZyBTT0NfU1RJSDQwNworCWJvb2wgIlNUaUg0MDcgU1RNaWNyb2VsZWN0cm9uaWNzIENvbnN1bWVyIEVsZWN0cm9uaWNzIGZhbWlseSIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgU1RJSDQwN19SRVNFVAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBTVE1pY3JvZWxlY3Ryb25pY3MgRGlnaXRhbCBDb25zdW1lcgorCSAgRWxlY3Ryb25pY3MgZmFtaWx5IFN0aUg0MDcgcGFydHMsIHRhcmdldHRlZCBhdCBzZXQtdG9wLWJveAorCSAgYW5kIG90aGVyIGRpZ2l0YWwgYXVkaW8vdmlkZW8gYXBwbGljYXRpb25zIHVzaW5nIEZsYXR0ZW5lZCBEZXZpY2UKKwkgIFRyZWVzLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zdW54aS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9LY29uZmlnCmluZGV4IDFhYWExZTEuLmE3NzYwNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3VueGkvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXN1bnhpL0tjb25maWcKQEAgLTQyLDQgKzQyLDExIEBACiAJc2VsZWN0IE1GRF9TVU42SV9QUkNNCiAJc2VsZWN0IFJFU0VUX0NPTlRST0xMRVIKIAorY29uZmlnIE1BQ0hfU1VOOUkKKwlib29sICJBbGx3aW5uZXIgKHN1bjlpKSBTb0NzIHN1cHBvcnQiCisJZGVmYXVsdCBBUkNIX1NVTlhJCisJc2VsZWN0IEFSQ0hfSEFTX1JFU0VUX0NPTlRST0xMRVIKKwlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBSRVNFVF9DT05UUk9MTEVSCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXN1bnhpL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtc3VueGkvcGxhdHNtcC5jCmluZGV4IGM1MzA3N2IuLmU0NGQwMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3VueGkvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3VueGkvcGxhdHNtcC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHNtcF9vcGVyYXRpb25zIHN1bjZpX3NtcF9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgc3VuNmlfc21wX29wcyBfX2luaXRkYXRhID0gewogCS5zbXBfcHJlcGFyZV9jcHVzCT0gc3VuNmlfc21wX3ByZXBhcmVfY3B1cywKIAkuc21wX2Jvb3Rfc2Vjb25kYXJ5CT0gc3VuNmlfc21wX2Jvb3Rfc2Vjb25kYXJ5LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3VueGkvc3VueGkuYyBiL2FyY2gvYXJtL21hY2gtc3VueGkvc3VueGkuYwppbmRleCBkNzU5OGFlLi4xZjk4Njc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXN1bnhpL3N1bnhpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9zdW54aS5jCkBAIC02MywzICs2MywxMiBAQAogRFRfTUFDSElORV9TVEFSVChTVU44SV9EVCwgIkFsbHdpbm5lciBzdW44aSAoQTIzKSBGYW1pbHkiKQogCS5kdF9jb21wYXQJPSBzdW44aV9ib2FyZF9kdF9jb21wYXQsCiBNQUNISU5FX0VORAorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN1bjlpX2JvYXJkX2R0X2NvbXBhdFtdID0geworCSJhbGx3aW5uZXIsc3VuOWktYTgwIiwKKwlOVUxMLAorfTsKKworRFRfTUFDSElORV9TVEFSVChTVU45SV9EVCwgIkFsbHdpbm5lciBzdW45aSBGYW1pbHkiKQorCS5kdF9jb21wYXQJPSBzdW45aV9ib2FyZF9kdF9jb21wYXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9LY29uZmlnCmluZGV4IDA5NTM5OTYuLmQwYmU5YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJYm9vbCAiTlZJRElBIFRlZ3JhIiBpZiBBUkNIX01VTFRJX1Y3CiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfVFJVU1RFRF9GT1VOREFUSU9OUworCXNlbGVjdCBBUk1fQU1CQQogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IENMS1NSQ19NTUlPCiAJc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBTTVAKQEAgLTU5LDEyICs2MCw0IEBACiAJICBTdXBwb3J0IGZvciBOVklESUEgVGVncmEgVDEyNCBwcm9jZXNzb3IgZmFtaWx5LCBiYXNlZCBvbiB0aGUKIAkgIEFSTSBDb3J0ZXhBMTVNUCBDUFUKIAotY29uZmlnIFRFR1JBX0FIQgotCWJvb2wgIkVuYWJsZSBBSEIgZHJpdmVyIGZvciBOVklESUEgVGVncmEgU29DcyIKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBBZGRzIEFIQiBjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkgZm9yIE5WSURJQSBUZWdyYSBTb0NzLAotCSAgd2hpY2ggY29udHJvbHMgQUhCIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gYW5kIHNvbWUKLQkgIHBlcmZvcm1hbmNlIHBhcmFtZXRlcnMocHJpb3JpdHksIHByZWZlY2ggc2l6ZSkuCi0KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2NwdWlkbGUtdGVncmExMTQuYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTExNC5jCmluZGV4IGUzZWJkY2UuLjQyNWI2YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTExNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTExNC5jCkBAIC00OSw3ICs0OSw3IEBACiAJY2FsbF9maXJtd2FyZV9vcChwcmVwYXJlX2lkbGUpOwogCiAJLyogRG8gc3VzcGVuZCBieSBvdXJzZWx2ZXMgaWYgdGhlIGZpcm13YXJlIGRvZXMgbm90IGltcGxlbWVudCBpdCAqLwotCWlmIChjYWxsX2Zpcm13YXJlX29wKGRvX2lkbGUpID09IC1FTk9TWVMpCisJaWYgKGNhbGxfZmlybXdhcmVfb3AoZG9faWRsZSwgMCkgPT0gLUVOT1NZUykKIAkJY3B1X3N1c3BlbmQoMCwgdGVncmEzMF9zbGVlcF9jcHVfc2Vjb25kYXJ5X2ZpbmlzaCk7CiAKIAljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRVhJVCwgJmRldi0+Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvcmVzZXQtaGFuZGxlci5TIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9yZXNldC1oYW5kbGVyLlMKaW5kZXggN2IyYmFhYi4uNzFiZTRhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9yZXNldC1oYW5kbGVyLlMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9yZXNldC1oYW5kbGVyLlMKQEAgLTUxLDYgKzUxLDcgQEAKICBUSFVNQigJaXQJbmUgKQogCWJuZQljcHVfcmVzdW1lCQkJQCBubwogCisJdGVncmFfZ2V0X3NvY19pZCBURUdSQV9BUEJfTUlTQ19CQVNFLCByNgogCS8qIEFyZSB3ZSBvbiBUZWdyYTIwPyAqLwogCWNtcAlyNiwgI1RFR1JBMjAKIAliZXEJMWYJCQkJQCBZZXMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9kdW1teXNwaWNoaXAuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9kdW1teXNwaWNoaXAuYwppbmRleCBlYzAyODNjLi4xMzE5OTY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jCkBAIC04MCw4ICs4MCw4IEBACiAJCSJpbiA4Yml0IG1vZGVcbiIpOwogCXN0YXR1cyA9IHNwaV93OHI4KHNwaSwgMHhBQSk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpcGxlIHRlc3QgMTogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCAxOiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxOiBTVUNDRVNTIVxuIik7CiAKQEAgLTg5LDggKzg5LDggQEAKIAkJImluIDhiaXQgbW9kZSAoZnVsbCBGSUZPKVxuIik7CiAJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgOCwgJnJ4YnVmWzBdLCA4KTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMjogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpICIKLQkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDI6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgMjogU1VDQ0VTUyFcbiIpOwogCkBAIC05OCw4ICs5OCw4IEBACiAJCSJpbiA4Yml0IG1vZGUgKHNlZSBpZiB3ZSBvdmVyZmxvdyBGSUZPKVxuIik7CiAJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgMTQsICZyeGJ1ZlswXSwgMTQpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAzOiBGQUlMVVJFOiBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgIgotCQkJICAgIihwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLCBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCAzOiBGQUlMVVJFOiBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgMzogU1VDQ0VTUyFcbiIpOwogCkBAIC0xMDcsMTQgKzEwNywxNCBAQAogCQkiYnl0ZXMgZ2FyYmFnZSB3aXRoIHNwaV9yZWFkKCkgaW4gOGJpdCBtb2RlXG4iKTsKIAlzdGF0dXMgPSBzcGlfd3JpdGUoc3BpLCAmdHhidWZbMF0sIDgpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNCBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOwogCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJnJ4YnVmWzBdLCA4KTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQgc3RlcCAyOiBTVUNDRVNTIVxuIik7CiAKQEAgLTEyMiwxNiArMTIyLDE0IEBACiAJCSIxNCBieXRlcyBnYXJiYWdlIHdpdGggc3BpX3JlYWQoKSBpbiA4Yml0IG1vZGVcbiIpOwogCXN0YXR1cyA9IHNwaV93cml0ZShzcGksICZ0eGJ1ZlswXSwgMTQpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA1IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKLQkJCSAgIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgNSBzdGVwIDE6IFNVQ0NFU1MhXG4iKTsKIAlzdGF0dXMgPSBzcGlfcmVhZChzcGksICZyeGJ1ZlswXSwgMTQpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA1IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAotCQkJICAgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNSBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDU6IFNVQ0NFU1MhXG4iKTsKIApAQCAtMTQwLDE2ICsxMzgsMTQgQEAKIAkJRE1BX1RFU1RfU0laRSwgRE1BX1RFU1RfU0laRSk7CiAJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJmJpZ3R4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKLQkJCSAgIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDYgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgNiBzdGVwIDE6IFNVQ0NFU1MhXG4iKTsKIAlzdGF0dXMgPSBzcGlfcmVhZChzcGksICZiaWdyeGJ1Zl92aXJ0dWFsWzBdLCBETUFfVEVTVF9TSVpFKTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNiBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKLQkJCSAgIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDYgc3RlcCAyOiBGQUlMVVJFOiBzcGlfcmVhZCgpIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2OiBTVUNDRVNTIVxuIik7CiAKQEAgLTE2OSwxOCArMTY1LDE3IEBACiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDc6IFNVQ0NFU1MhIChleHBlY3RlZCBmYWlsdXJlIHdpdGggIgogCQkJInN0YXR1cyBFSU8pXG4iKTsKIAllbHNlIGlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaXBsZSB0ZXN0IDc6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNzogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKLQkJcHJfd2FybmluZygiU2lwbGUgdGVzdCA3OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKLQkJCSAgICJzdWNjZWVkZWQgYnV0IGl0IHdhcyBleHBlY3RlZCB0byBmYWlsIVxuIik7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDc6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgc3VjY2VlZGVkIGJ1dCBpdCB3YXMgZXhwZWN0ZWQgdG8gZmFpbCFcbiIpOwogCiAJcHJfaW5mbygiU2ltcGxlIHRlc3QgODogd3JpdGUgOCBieXRlcywgcmVhZCBiYWNrIDggYnl0ZXMgZ2FyYmFnZSAiCiAJCSJpbiAxNmJpdCBtb2RlIChmdWxsIEZJRk8pXG4iKTsKIAlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCA4LCAmcnhidWZbMF0sIDgpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA4OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgODogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA4OiBTVUNDRVNTIVxuIik7CiAKQEAgLTE4OCw4ICsxODMsOCBAQAogCQkiaW4gMTZiaXQgbW9kZSAoc2VlIGlmIHdlIG92ZXJmbG93IEZJRk8pXG4iKTsKIAlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCAxNCwgJnJ4YnVmWzBdLCAxNCk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDk6IEZBSUxVUkU6IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAiCi0JCQkgICAiKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDk6IEZBSUxVUkU6IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA5OiBTVUNDRVNTIVxuIik7CiAKQEAgLTE5OCwxNyArMTkzLDE1IEBACiAJICAgICAgIERNQV9URVNUX1NJWkUsIERNQV9URVNUX1NJWkUpOwogCXN0YXR1cyA9IHNwaV93cml0ZShzcGksICZiaWd0eGJ1Zl92aXJ0dWFsWzBdLCBETUFfVEVTVF9TSVpFKTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMTAgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAotCQkJICAgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgMTAgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgMTAgc3RlcCAxOiBTVUNDRVNTIVxuIik7CiAKIAlzdGF0dXMgPSBzcGlfcmVhZChzcGksICZiaWdyeGJ1Zl92aXJ0dWFsWzBdLCBETUFfVEVTVF9TSVpFKTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMTAgc3RlcCAyOiBGQUlMVVJFOiBzcGlfcmVhZCgpICIKLQkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCi0JCQkgICBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDEwOiBTVUNDRVNTIVxuIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvS2NvbmZpZwppbmRleCA2OTllODYwLi5jOWFjMTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9LY29uZmlnCkBAIC0zMiw2ICszMiw3IEBACiAJc2VsZWN0IFBJTkNUUkxfQUI4NTQwCiAJc2VsZWN0IFJFR1VMQVRPUgogCXNlbGVjdCBSRUdVTEFUT1JfREI4NTAwX1BSQ01VCisJc2VsZWN0IFBNX0dFTkVSSUNfRE9NQUlOUyBpZiBQTQogCiBjb25maWcgTUFDSF9NT1A1MDAKIAlib29sICJVODUwMCBEZXZlbG9wbWVudCBwbGF0Zm9ybSwgTU9QNTAwIHZlcnNpb25zIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtdXg1MDAvTWFrZWZpbGUKaW5kZXggOTc0MWRlOTUuLjQ0MThhNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9NYWtlZmlsZQpAQCAtOSw1ICs5LDYgQEAKIAkJCQlib2FyZC1tb3A1MDAtYXVkaW8ubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHBsYXRzbXAubyBoZWFkc21wLm8KIG9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJKz0gaG90cGx1Zy5vCitvYmotJChDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TKSArPSBwbV9kb21haW5zLm8KIAogQ0ZMQUdTX2hvdHBsdWcubwkJKz0gLW1hcmNoPWFybXY3LWEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvcG0uYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvcG0uYwppbmRleCBiODBhOWEyLi4yY2I1ODdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9wbS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hcm0tdXg1MDAtcG0uaD4KIAogI2luY2x1ZGUgImRiODUwMC1yZWdzLmgiCisjaW5jbHVkZSAicG1fZG9tYWlucy5oIgogCiAvKiBBUk0gV0ZJIFN0YW5kYnkgc2lnbmFsIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBSQ01fQVJNX1dGSV9TVEFOREJZICAgIChwcmNtdV9iYXNlICsgMHgxMzApCkBAIC0xOTEsNCArMTkyLDcgQEAKIAogCS8qIFNldCB1cCB1eDUwMCBzdXNwZW5kIGNhbGxiYWNrcy4gKi8KIAlzdXNwZW5kX3NldF9vcHMoVVg1MDBfU1VTUEVORF9PUFMpOworCisJLyogSW5pdGlhbGl6ZSB1eDUwMCBwb3dlciBkb21haW5zICovCisJdXg1MDBfcG1fZG9tYWluc19pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL3BtX2RvbWFpbnMuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvcG1fZG9tYWlucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGI1YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL3BtX2RvbWFpbnMuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMdGQuCisgKgorICogQXV0aG9yOiBVbGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz4KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICoKKyAqIEltcGxlbWVudHMgUE0gZG9tYWlucyB1c2luZyB0aGUgZ2VuZXJpYyBQTSBkb21haW4gZm9yIHV4NTAwLgorICovCisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcG1fZG9tYWluLmg+CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9hcm0vdXg1MDBfcG1fZG9tYWlucy5oPgorI2luY2x1ZGUgInBtX2RvbWFpbnMuaCIKKworc3RhdGljIGludCBwZF9wb3dlcl9vZmYoc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpkb21haW4pCit7CisJLyoKKwkgKiBIYW5kbGUgdGhlIGdhdGluZyBvZiB0aGUgUE0gZG9tYWluIHJlZ3VsYXRvciBoZXJlLgorCSAqCisJICogRHJpdmVycy9zdWJzeXN0ZW1zIGhhbmRsaW5nIGRldmljZXMgaW4gdGhlIFBNIGRvbWFpbiBuZWVkcyB0byBwZXJmb3JtCisJICogcmVnaXN0ZXIgY29udGV4dCBzYXZlL3Jlc3RvcmUgZnJvbSB0aGVpciByZXNwZWN0aXZlIHJ1bnRpbWUgUE0KKwkgKiBjYWxsYmFja3MsIHRvIGJlIGFibGUgdG8gZW5hYmxlIFBNIGRvbWFpbiBnYXRpbmcvdW5nYXRpbmcuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGRfcG93ZXJfb24oc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpkb21haW4pCit7CisJLyoKKwkgKiBIYW5kbGUgdGhlIHVuZ2F0aW5nIG9mIHRoZSBQTSBkb21haW4gcmVndWxhdG9yIGhlcmUuCisJICoKKwkgKiBEcml2ZXJzL3N1YnN5c3RlbXMgaGFuZGxpbmcgZGV2aWNlcyBpbiB0aGUgUE0gZG9tYWluIG5lZWRzIHRvIHBlcmZvcm0KKwkgKiByZWdpc3RlciBjb250ZXh0IHNhdmUvcmVzdG9yZSBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgcnVudGltZSBQTQorCSAqIGNhbGxiYWNrcywgdG8gYmUgYWJsZSB0byBlbmFibGUgUE0gZG9tYWluIGdhdGluZy91bmdhdGluZy4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiB1eDUwMF9wbV9kb21haW5fdmFwZSA9IHsKKwkubmFtZSA9ICJWQVBFIiwKKwkucG93ZXJfb2ZmID0gcGRfcG93ZXJfb2ZmLAorCS5wb3dlcl9vbiA9IHBkX3Bvd2VyX29uLAorfTsKKworc3RhdGljIHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqdXg1MDBfcG1fZG9tYWluc1tOUl9ET01BSU5TXSA9IHsKKwlbRE9NQUlOX1ZBUEVdID0gJnV4NTAwX3BtX2RvbWFpbl92YXBlLAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdXg1MDBfcG1fZG9tYWluX21hdGNoZXNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInN0ZXJpY3Nzb24sdXg1MDAtcG0tZG9tYWlucyIsIH0sCisJeyB9LAorfTsKKworaW50IF9faW5pdCB1eDUwMF9wbV9kb21haW5zX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBnZW5wZF9vbmVjZWxsX2RhdGEgKmdlbnBkX2RhdGE7CisJaW50IGk7CisKKwlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCB1eDUwMF9wbV9kb21haW5fbWF0Y2hlcyk7CisJaWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlnZW5wZF9kYXRhID0ga3phbGxvYyhzaXplb2YoKmdlbnBkX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdlbnBkX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJZ2VucGRfZGF0YS0+ZG9tYWlucyA9IHV4NTAwX3BtX2RvbWFpbnM7CisJZ2VucGRfZGF0YS0+bnVtX2RvbWFpbnMgPSBBUlJBWV9TSVpFKHV4NTAwX3BtX2RvbWFpbnMpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodXg1MDBfcG1fZG9tYWlucyk7ICsraSkKKwkJcG1fZ2VucGRfaW5pdCh1eDUwMF9wbV9kb21haW5zW2ldLCBOVUxMLCBmYWxzZSk7CisKKwlvZl9nZW5wZF9hZGRfcHJvdmlkZXJfb25lY2VsbChucCwgZ2VucGRfZGF0YSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL3BtX2RvbWFpbnMuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvcG1fZG9tYWlucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2M2QzYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL3BtX2RvbWFpbnMuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMdGQuCisgKgorICogQXV0aG9yOiBVbGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz4KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICovCisKKyNpZm5kZWYgX19NQUNIX1VYNTAwX1BNX0RPTUFJTlNfSAorI2RlZmluZSBfX01BQ0hfVVg1MDBfUE1fRE9NQUlOU19ICisKKyNpZmRlZiBDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TCitleHRlcm4gaW50IF9faW5pdCB1eDUwMF9wbV9kb21haW5zX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgdXg1MDBfcG1fZG9tYWluc19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZwppbmRleCBiMmNmYmExNmMuLmQ2YjE2ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL0tjb25maWcKQEAgLTE2LDYgKzE2LDcgQEAKIAlzZWxlY3QgUE9XRVJfUkVTRVQKIAlzZWxlY3QgUE9XRVJfUkVTRVRfVkVYUFJFU1MKIAlzZWxlY3QgUE9XRVJfU1VQUExZCisJc2VsZWN0IFJFR1VMQVRPUiBpZiBNTUNfQVJNTU1DSQogCXNlbGVjdCBSRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpZiBSRUdVTEFUT1IKIAlzZWxlY3QgVkVYUFJFU1NfQ09ORklHCiAJc2VsZWN0IFZFWFBSRVNTX1NZU0NGRwpAQCAtNDksOSArNTAsNiBAQAogCSAgYnVpbGQgYSB3b3JraW5nIGtlcm5lbCwgeW91IG11c3QgYWxzbyBlbmFibGUgcmVsZXZhbnQgY29yZQogCSAgdGlsZSBzdXBwb3J0IG9yIEZsYXR0ZW5lZCBEZXZpY2UgVHJlZSBiYXNlZCBzdXBwb3J0IG9wdGlvbnMuCiAKLWNvbmZpZyBBUkNIX1ZFWFBSRVNTX0NBOVg0Ci0JYm9vbCAiVmVyc2F0aWxlIEV4cHJlc3MgQ29ydGV4LUE5eDQgdGlsZSIKLQogY29uZmlnIEFSQ0hfVkVYUFJFU1NfRENTQ0IKIAlib29sICJEdWFsIENsdXN0ZXIgU3lzdGVtIENvbnRyb2wgQmxvY2sgKERDU0NCKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gTUNQTQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvTWFrZWZpbGUKaW5kZXggZmM2NDliYy4uZjVjMTAwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL01ha2VmaWxlCkBAIC0xLDExICsxLDEwIEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwotY2NmbGFncy0kKENPTkZJR19BUkNIX01VTFRJUExBVEZPUk0pIDo9IC1JJChzcmN0cmVlKS8kKHNyYykvaW5jbHVkZSBcCitjY2ZsYWdzLSQoQ09ORklHX0FSQ0hfTVVMVElQTEFURk9STSkgOj0gXAogCS1JJChzcmN0cmVlKS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9pbmNsdWRlCiAKIG9iai15CQkJCQk6PSB2Mm0ubwotb2JqLSQoQ09ORklHX0FSQ0hfVkVYUFJFU1NfQ0E5WDQpCSs9IGN0LWNhOXg0Lm8KIG9iai0kKENPTkZJR19BUkNIX1ZFWFBSRVNTX0RDU0NCKQkrPSBkY3NjYi5vCWRjc2NiX3NldHVwLm8KIENGTEFHU19kY3NjYi5vCQkJCSs9IC1tYXJjaD1hcm12Ny1hCiBDRkxBR1NfUkVNT1ZFX2Rjc2NiLm8JCQk9IC1wZwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jb3JlLmggYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2NvcmUuaAppbmRleCAxNTJmYWQ5Li4yYTExZDNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2NvcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2NvcmUuaApAQCAtMSwxMiArMSw1IEBACi0vKiAyTUIgbGFyZ2UgYXJlYSBmb3IgbW90aGVyYm9hcmQncyBwZXJpcGhlcmFscyBzdGF0aWMgbWFwcGluZyAqLwotI2RlZmluZSBWMk1fUEVSSVBIIDB4ZjgwMDAwMDAKLQotLyogVGlsZSdzIHBlcmlwaGVyYWxzIHN0YXRpYyBtYXBwaW5ncyBzaG91bGQgc3RhcnQgaGVyZSAqLwotI2RlZmluZSBWMlRfUEVSSVBIIDB4ZjgyMDAwMDAKLQogYm9vbCB2ZXhwcmVzc19zbXBfaW5pdF9vcHModm9pZCk7CiAKLWV4dGVybiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMJdmV4cHJlc3Nfc21wX29wczsKIGV4dGVybiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMJdmV4cHJlc3Nfc21wX2R0X29wczsKIAogZXh0ZXJuIHZvaWQgdmV4cHJlc3NfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY3QtY2E5eDQuYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY3QtY2E5eDQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdiZWEwNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2N0LWNhOXg0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAqIFZlcnNhdGlsZSBFeHByZXNzIENvcmUgVGlsZSBDb3J0ZXggQTl4NCBTdXBwb3J0Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgotI2luY2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvdmlkZW8tY2xjZC12ZXJzYXRpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXhwcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KLSNpbmNsdWRlIDxhc20vc21wX3R3ZC5oPgotCi0jaW5jbHVkZSA8bWFjaC9jdC1jYTl4NC5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3RpbWVyLXNwLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0KLSNpbmNsdWRlICJjb3JlLmgiCi0KLSNpbmNsdWRlIDxtYWNoL21vdGhlcmJvYXJkLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgY3RfY2E5eDRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkudmlydHVhbCAgICAgICAgPSBWMlRfUEVSSVBILAotCQkucGZuICAgICAgICAgICAgPSBfX3BoeXNfdG9fcGZuKENUX0NBOVg0X01QSUMpLAotCQkubGVuZ3RoICAgICAgICAgPSBTWl84SywKLQkJLnR5cGUgICAgICAgICAgID0gTVRfREVWSUNFLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3RfY2E5eDRfbWFwX2lvKHZvaWQpCi17Ci0JaW90YWJsZV9pbml0KGN0X2NhOXg0X2lvX2Rlc2MsIEFSUkFZX1NJWkUoY3RfY2E5eDRfaW9fZGVzYykpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2E5eDRfbDJfaW5pdCh2b2lkKQotewotI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCi0Jdm9pZCBfX2lvbWVtICpsMngwX2Jhc2UgPSBpb3JlbWFwKENUX0NBOVg0X0wyQ0MsIFNaXzRLKTsKLQotCWlmIChsMngwX2Jhc2UpIHsKLQkJLyogc2V0IFJBTSBsYXRlbmNpZXMgdG8gMSBjeWNsZSBmb3IgdGhpcyBjb3JlIHRpbGUuICovCi0JCXdyaXRlbCgwLCBsMngwX2Jhc2UgKyBMMzEwX1RBR19MQVRFTkNZX0NUUkwpOwotCQl3cml0ZWwoMCwgbDJ4MF9iYXNlICsgTDMxMF9EQVRBX0xBVEVOQ1lfQ1RSTCk7Ci0KLQkJbDJ4MF9pbml0KGwyeDBfYmFzZSwgMHgwMDQwMDAwMCwgMHhmZTBmZmZmZik7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJMMkM6IHVuYWJsZSB0byBtYXAgTDIgY2FjaGUgY29udHJvbGxlclxuIik7Ci0JfQotI2VuZGlmCi19Ci0KLSNpZmRlZiBDT05GSUdfSEFWRV9BUk1fVFdECi1zdGF0aWMgREVGSU5FX1RXRF9MT0NBTF9USU1FUih0d2RfbG9jYWxfdGltZXIsIEE5X01QQ09SRV9UV0QsIElSUV9MT0NBTFRJTUVSKTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNhOXg0X3R3ZF9pbml0KHZvaWQpCi17Ci0JaW50IGVyciA9IHR3ZF9sb2NhbF90aW1lcl9yZWdpc3RlcigmdHdkX2xvY2FsX3RpbWVyKTsKLQlpZiAoZXJyKQotCQlwcl9lcnIoInR3ZF9sb2NhbF90aW1lcl9yZWdpc3RlciBmYWlsZWQgJWRcbiIsIGVycik7Ci19Ci0jZWxzZQotI2RlZmluZSBjYTl4NF90d2RfaW5pdCgpCWRvIHt9IHdoaWxlKDApCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGN0X2NhOXg0X2luaXRfaXJxKHZvaWQpCi17Ci0JZ2ljX2luaXQoMCwgMjksIGlvcmVtYXAoQTlfTVBDT1JFX0dJQ19ESVNULCBTWl80SyksCi0JCSBpb3JlbWFwKEE5X01QQ09SRV9HSUNfQ1BVLCBTWl8yNTYpKTsKLQljYTl4NF90d2RfaW5pdCgpOwotCWNhOXg0X2wyX2luaXQoKTsKLX0KLQotc3RhdGljIGludCBjdF9jYTl4NF9jbGNkX3NldHVwKHN0cnVjdCBjbGNkX2ZiICpmYikKLXsKLQl1bnNpZ25lZCBsb25nIGZyYW1lc2l6ZSA9IDEwMjQgKiA3NjggKiAyOwotCi0JZmItPnBhbmVsID0gdmVyc2F0aWxlX2NsY2RfZ2V0X3BhbmVsKCJYVkdBIik7Ci0JaWYgKCFmYi0+cGFuZWwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHZlcnNhdGlsZV9jbGNkX3NldHVwX2RtYShmYiwgZnJhbWVzaXplKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGNkX2JvYXJkIGN0X2NhOXg0X2NsY2RfZGF0YSA9IHsKLQkubmFtZQkJPSAiQ1QtQ0E5WDQiLAotCS5jYXBzCQk9IENMQ0RfQ0FQXzU1NTEgfCBDTENEX0NBUF81NjUsCi0JLmNoZWNrCQk9IGNsY2RmYl9jaGVjaywKLQkuZGVjb2RlCQk9IGNsY2RmYl9kZWNvZGUsCi0JLnNldHVwCQk9IGN0X2NhOXg0X2NsY2Rfc2V0dXAsCi0JLm1tYXAJCT0gdmVyc2F0aWxlX2NsY2RfbW1hcF9kbWEsCi0JLnJlbW92ZQkJPSB2ZXJzYXRpbGVfY2xjZF9yZW1vdmVfZG1hLAotfTsKLQotc3RhdGljIEFNQkFfQUhCX0RFVklDRShjbGNkLCAiY3Q6Y2xjZCIsIDAsIENUX0NBOVg0X0NMQ0RDLCBJUlFfQ1RfQ0E5WDRfQ0xDREMsICZjdF9jYTl4NF9jbGNkX2RhdGEpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRShkbWMsICJjdDpkbWMiLCAwLCBDVF9DQTlYNF9ETUMsIElSUV9DVF9DQTlYNF9ETUMsIE5VTEwpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRShzbWMsICJjdDpzbWMiLCAwLCBDVF9DQTlYNF9TTUMsIElSUV9DVF9DQTlYNF9TTUMsIE5VTEwpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRShncGlvLCAiY3Q6Z3BpbyIsIDAsIENUX0NBOVg0X0dQSU8sIElSUV9DVF9DQTlYNF9HUElPLCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqY3RfY2E5eDRfYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKLQkmY2xjZF9kZXZpY2UsCi0JJmRtY19kZXZpY2UsCi0JJnNtY19kZXZpY2UsCi0JJmdwaW9fZGV2aWNlLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwbXVfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTAsCi0JCS5lbmQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTEsCi0JCS5lbmQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTIsCi0JCS5lbmQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkuc3RhcnQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTMsCi0JCS5lbmQJPSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwbXVfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhcm0tcG11IiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHBtdV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHBtdV9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgb3NjMV9sb29rdXAgPSB7Ci0JLmRldl9pZAkJPSAiY3Q6Y2xjZCIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvc2MxX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmV4cHJlc3Mtb3NjIiwKLQkuaWQJCT0gMSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gKHN0cnVjdCByZXNvdXJjZSBbXSkgewotCQlWRVhQUkVTU19SRVNfRlVOQygweGYsIDEpLAotCX0sCi0JLmRldi5wbGF0Zm9ybV9kYXRhID0gJm9zYzFfbG9va3VwLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGN0X2NhOXg0X2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0X2NhOXg0X2FtYmFfZGV2cyk7IGkrKykKLQkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoY3RfY2E5eDRfYW1iYV9kZXZzW2ldLCAmaW9tZW1fcmVzb3VyY2UpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwbXVfZGV2aWNlKTsKLQl2ZXhwcmVzc19zeXNjZmdfZGV2aWNlX3JlZ2lzdGVyKCZvc2MxX2RldmljZSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdm9pZCAqY3RfY2E5eDRfc2N1X2Jhc2UgX19pbml0ZGF0YTsKLQotc3RhdGljIHZvaWQgX19pbml0IGN0X2NhOXg0X2luaXRfY3B1X21hcCh2b2lkKQotewotCWludCBpLCBuY29yZXM7Ci0KLQljdF9jYTl4NF9zY3VfYmFzZSA9IGlvcmVtYXAoQTlfTVBDT1JFX1NDVSwgU1pfMTI4KTsKLQlpZiAoV0FSTl9PTighY3RfY2E5eDRfc2N1X2Jhc2UpKQotCQlyZXR1cm47Ci0KLQluY29yZXMgPSBzY3VfZ2V0X2NvcmVfY291bnQoY3RfY2E5eDRfc2N1X2Jhc2UpOwotCi0JaWYgKG5jb3JlcyA+IG5yX2NwdV9pZHMpIHsKLQkJcHJfd2FybigiU01QOiAldSBjb3JlcyBncmVhdGVyIHRoYW4gbWF4aW11bSAoJXUpLCBjbGlwcGluZ1xuIiwKLQkJCW5jb3JlcywgbnJfY3B1X2lkcyk7Ci0JCW5jb3JlcyA9IG5yX2NwdV9pZHM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG5jb3JlczsgKytpKQotCQlzZXRfY3B1X3Bvc3NpYmxlKGksIHRydWUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3RfY2E5eDRfc21wX2VuYWJsZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0Jc2N1X2VuYWJsZShjdF9jYTl4NF9zY3VfYmFzZSk7Ci19Ci0jZW5kaWYKLQotc3RydWN0IGN0X2Rlc2MgY3RfY2E5eDRfZGVzYyBfX2luaXRkYXRhID0gewotCS5pZAkJPSBWMk1fQ1RfSURfQ0E5LAotCS5uYW1lCQk9ICJDQTl4NCIsCi0JLm1hcF9pbwkJPSBjdF9jYTl4NF9tYXBfaW8sCi0JLmluaXRfaXJxCT0gY3RfY2E5eDRfaW5pdF9pcnEsCi0JLmluaXRfdGlsZQk9IGN0X2NhOXg0X2luaXQsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5pbml0X2NwdV9tYXAJPSBjdF9jYTl4NF9pbml0X2NwdV9tYXAsCi0JLnNtcF9lbmFibGUJPSBjdF9jYTl4NF9zbXBfZW5hYmxlLAotI2VuZGlmCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvY3QtY2E5eDQuaCBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2N0LWNhOXg0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YWNmODQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvY3QtY2E5eDQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSNpZm5kZWYgX19NQUNIX0NUX0NBOVg0X0gKLSNkZWZpbmUgX19NQUNIX0NUX0NBOVg0X0gKLQotLyoKLSAqIFBoeXNpY2FsIGJhc2UgYWRkcmVzc2VzCi0gKi8KLSNkZWZpbmUgQ1RfQ0E5WDRfQ0xDREMJCSgweDEwMDIwMDAwKQotI2RlZmluZSBDVF9DQTlYNF9BWElSQU0JCSgweDEwMDYwMDAwKQotI2RlZmluZSBDVF9DQTlYNF9ETUMJCSgweDEwMGUwMDAwKQotI2RlZmluZSBDVF9DQTlYNF9TTUMJCSgweDEwMGUxMDAwKQotI2RlZmluZSBDVF9DQTlYNF9TQ0MJCSgweDEwMGUyMDAwKQotI2RlZmluZSBDVF9DQTlYNF9TUDgwNF9USU1FUgkoMHgxMDBlNDAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfU1A4MDVfV0RUCSgweDEwMGU1MDAwKQotI2RlZmluZSBDVF9DQTlYNF9UWlBDCQkoMHgxMDBlNjAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfR1BJTwkJKDB4MTAwZTgwMDApCi0jZGVmaW5lIENUX0NBOVg0X0ZBU1RBWEkJKDB4MTAwZTkwMDApCi0jZGVmaW5lIENUX0NBOVg0X1NMT1dBWEkJKDB4MTAwZWEwMDApCi0jZGVmaW5lIENUX0NBOVg0X1RaQVNDCQkoMHgxMDBlYzAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfQ09SRVNJR0hUCSgweDEwMjAwMDAwKQotI2RlZmluZSBDVF9DQTlYNF9NUElDCQkoMHgxZTAwMDAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfU1lTVElNRVIJKDB4MWUwMDQwMDApCi0jZGVmaW5lIENUX0NBOVg0X1NZU1dEVAkJKDB4MWUwMDcwMDApCi0jZGVmaW5lIENUX0NBOVg0X0wyQ0MJCSgweDFlMDBhMDAwKQotCi0jZGVmaW5lIEE5X01QQ09SRV9TQ1UJCShDVF9DQTlYNF9NUElDICsgMHgwMDAwKQotI2RlZmluZSBBOV9NUENPUkVfR0lDX0NQVQkoQ1RfQ0E5WDRfTVBJQyArIDB4MDEwMCkKLSNkZWZpbmUgQTlfTVBDT1JFX0dJVAkJKENUX0NBOVg0X01QSUMgKyAweDAyMDApCi0jZGVmaW5lIEE5X01QQ09SRV9UV0QJCShDVF9DQTlYNF9NUElDICsgMHgwNjAwKQotI2RlZmluZSBBOV9NUENPUkVfR0lDX0RJU1QJKENUX0NBOVg0X01QSUMgKyAweDEwMDApCi0KLS8qCi0gKiBJbnRlcnJ1cHRzLiAgVGhvc2UgaW4ge30gYXJlIGZvciBBTUJBIGRldmljZXMKLSAqLwotI2RlZmluZSBJUlFfQ1RfQ0E5WDRfQ0xDREMJeyA3NiB9Ci0jZGVmaW5lIElSUV9DVF9DQTlYNF9ETUMJeyAwIH0KLSNkZWZpbmUgSVJRX0NUX0NBOVg0X1NNQwl7IDc3LCA3OCB9Ci0jZGVmaW5lIElSUV9DVF9DQTlYNF9USU1FUjAJODAKLSNkZWZpbmUgSVJRX0NUX0NBOVg0X1RJTUVSMQk4MQotI2RlZmluZSBJUlFfQ1RfQ0E5WDRfR1BJTwl7IDgyIH0KLSNkZWZpbmUgSVJRX0NUX0NBOVg0X1BNVV9DUFUwCTkyCi0jZGVmaW5lIElSUV9DVF9DQTlYNF9QTVVfQ1BVMQk5MwotI2RlZmluZSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTIJOTQKLSNkZWZpbmUgSVJRX0NUX0NBOVg0X1BNVV9DUFUzCTk1Ci0KLWV4dGVybiBzdHJ1Y3QgY3RfZGVzYyBjdF9jYTl4NF9kZXNjOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGE4YzE3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvaXJxcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGY3Zjc4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2RlZmluZSBJUlFfTE9DQUxUSU1FUgkJMjkKLSNkZWZpbmUgSVJRX0xPQ0FMV0RPRwkJMzAKLQotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQotI2RlZmluZSBOUl9JUlFTCTI1NgotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9tb3RoZXJib2FyZC5oIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvbW90aGVyYm9hcmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhhYmM4Yi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9tb3RoZXJib2FyZC5oCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotI2lmbmRlZiBfX01BQ0hfTU9USEVSQk9BUkRfSAotI2RlZmluZSBfX01BQ0hfTU9USEVSQk9BUkRfSAotCi0vKgotICogUGh5c2ljYWwgYWRkcmVzc2VzLCBvZmZzZXQgZnJvbSBWMk1fUEFfQ1MwLTMKLSAqLwotI2RlZmluZSBWMk1fTk9SMAkJKFYyTV9QQV9DUzApCi0jZGVmaW5lIFYyTV9OT1IxCQkoVjJNX1BBX0NTMSkKLSNkZWZpbmUgVjJNX1NSQU0JCShWMk1fUEFfQ1MyKQotI2RlZmluZSBWMk1fVklERU9fU1JBTQkJKFYyTV9QQV9DUzMgKyAweDAwMDAwMDAwKQotI2RlZmluZSBWMk1fTEFOOTExOAkJKFYyTV9QQV9DUzMgKyAweDAyMDAwMDAwKQotI2RlZmluZSBWMk1fSVNQMTc2MQkJKFYyTV9QQV9DUzMgKyAweDAzMDAwMDAwKQotCi0vKgotICogUGh5c2ljYWwgYWRkcmVzc2VzLCBvZmZzZXQgZnJvbSBWMk1fUEFfQ1M3Ci0gKi8KLSNkZWZpbmUgVjJNX1NZU1JFR1MJCShWMk1fUEFfQ1M3ICsgMHgwMDAwMDAwMCkKLSNkZWZpbmUgVjJNX1NZU0NUTAkJKFYyTV9QQV9DUzcgKyAweDAwMDAxMDAwKQotI2RlZmluZSBWMk1fU0VSSUFMX0JVU19QQ0kJKFYyTV9QQV9DUzcgKyAweDAwMDAyMDAwKQotCi0jZGVmaW5lIFYyTV9BQUNJCQkoVjJNX1BBX0NTNyArIDB4MDAwMDQwMDApCi0jZGVmaW5lIFYyTV9NTUNJCQkoVjJNX1BBX0NTNyArIDB4MDAwMDUwMDApCi0jZGVmaW5lIFYyTV9LTUkwCQkoVjJNX1BBX0NTNyArIDB4MDAwMDYwMDApCi0jZGVmaW5lIFYyTV9LTUkxCQkoVjJNX1BBX0NTNyArIDB4MDAwMDcwMDApCi0KLSNkZWZpbmUgVjJNX1VBUlQwCQkoVjJNX1BBX0NTNyArIDB4MDAwMDkwMDApCi0jZGVmaW5lIFYyTV9VQVJUMQkJKFYyTV9QQV9DUzcgKyAweDAwMDBhMDAwKQotI2RlZmluZSBWMk1fVUFSVDIJCShWMk1fUEFfQ1M3ICsgMHgwMDAwYjAwMCkKLSNkZWZpbmUgVjJNX1VBUlQzCQkoVjJNX1BBX0NTNyArIDB4MDAwMGMwMDApCi0KLSNkZWZpbmUgVjJNX1dEVAkJCShWMk1fUEFfQ1M3ICsgMHgwMDAwZjAwMCkKLQotI2RlZmluZSBWMk1fVElNRVIwMQkJKFYyTV9QQV9DUzcgKyAweDAwMDExMDAwKQotI2RlZmluZSBWMk1fVElNRVIyMwkJKFYyTV9QQV9DUzcgKyAweDAwMDEyMDAwKQotCi0jZGVmaW5lIFYyTV9TRVJJQUxfQlVTX0RWSQkoVjJNX1BBX0NTNyArIDB4MDAwMTYwMDApCi0jZGVmaW5lIFYyTV9SVEMJCQkoVjJNX1BBX0NTNyArIDB4MDAwMTcwMDApCi0KLSNkZWZpbmUgVjJNX0NGCQkJKFYyTV9QQV9DUzcgKyAweDAwMDFhMDAwKQotI2RlZmluZSBWMk1fQ0xDRAkJKFYyTV9QQV9DUzcgKyAweDAwMDFmMDAwKQotCi0KLS8qCi0gKiBJbnRlcnJ1cHRzLiAgVGhvc2UgaW4ge30gYXJlIGZvciBBTUJBIGRldmljZXMKLSAqLwotI2RlZmluZSBJUlFfVjJNX1dEVAkJeyAoMzIgKyAwKSB9Ci0jZGVmaW5lIElSUV9WMk1fVElNRVIwCQkoMzIgKyAyKQotI2RlZmluZSBJUlFfVjJNX1RJTUVSMQkJKDMyICsgMikKLSNkZWZpbmUgSVJRX1YyTV9USU1FUjIJCSgzMiArIDMpCi0jZGVmaW5lIElSUV9WMk1fVElNRVIzCQkoMzIgKyAzKQotI2RlZmluZSBJUlFfVjJNX1JUQwkJeyAoMzIgKyA0KSB9Ci0jZGVmaW5lIElSUV9WMk1fVUFSVDAJCXsgKDMyICsgNSkgfQotI2RlZmluZSBJUlFfVjJNX1VBUlQxCQl7ICgzMiArIDYpIH0KLSNkZWZpbmUgSVJRX1YyTV9VQVJUMgkJeyAoMzIgKyA3KSB9Ci0jZGVmaW5lIElSUV9WMk1fVUFSVDMJCXsgKDMyICsgOCkgfQotI2RlZmluZSBJUlFfVjJNX01NQ0kJCXsgKDMyICsgOSksICgzMiArIDEwKSB9Ci0jZGVmaW5lIElSUV9WMk1fQUFDSQkJeyAoMzIgKyAxMSkgfQotI2RlZmluZSBJUlFfVjJNX0tNSTAJCXsgKDMyICsgMTIpIH0KLSNkZWZpbmUgSVJRX1YyTV9LTUkxCQl7ICgzMiArIDEzKSB9Ci0jZGVmaW5lIElSUV9WMk1fQ0xDRAkJeyAoMzIgKyAxNCkgfQotI2RlZmluZSBJUlFfVjJNX0xBTjkxMTgJCSgzMiArIDE1KQotI2RlZmluZSBJUlFfVjJNX0lTUDE3NjEJCSgzMiArIDE2KQotI2RlZmluZSBJUlFfVjJNX1BDSUUJCSgzMiArIDE3KQotCi0KLS8qCi0gKiBDb3JlIHRpbGUgSURzCi0gKi8KLSNkZWZpbmUgVjJNX0NUX0lEX0NBOQkJMHgwYzAwMDE5MQotI2RlZmluZSBWMk1fQ1RfSURfVU5TVVBQT1JURUQJMHhmZjAwMDE5MQotI2RlZmluZSBWMk1fQ1RfSURfTUFTSwkJMHhmZjAwMGZmZgotCi1zdHJ1Y3QgY3RfZGVzYyB7Ci0JdTMyCQkJaWQ7Ci0JY29uc3QgY2hhcgkJKm5hbWU7Ci0Jdm9pZAkJCSgqbWFwX2lvKSh2b2lkKTsKLQl2b2lkCQkJKCppbml0X2Vhcmx5KSh2b2lkKTsKLQl2b2lkCQkJKCppbml0X2lycSkodm9pZCk7Ci0Jdm9pZAkJCSgqaW5pdF90aWxlKSh2b2lkKTsKLSNpZmRlZiBDT05GSUdfU01QCi0Jdm9pZAkJCSgqaW5pdF9jcHVfbWFwKSh2b2lkKTsKLQl2b2lkCQkJKCpzbXBfZW5hYmxlKSh1bnNpZ25lZCBpbnQpOwotI2VuZGlmCi19OwotCi1leHRlcm4gc3RydWN0IGN0X2Rlc2MgKmN0X2Rlc2M7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYwppbmRleCBhMWYzODA0Li44MzE4OGNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYwpAQCAtMTksNDggKzE5LDEwIEBACiAjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvbW90aGVyYm9hcmQuaD4KLQogI2luY2x1ZGUgPHBsYXQvcGxhdHNtcC5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgogCi0vKgotICogSW5pdGlhbGlzZSB0aGUgQ1BVIHBvc3NpYmxlIG1hcCBlYXJseSAtIHRoaXMgZGVzY3JpYmVzIHRoZSBDUFVzCi0gKiB3aGljaCBtYXkgYmUgcHJlc2VudCBvciBiZWNvbWUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgdmV4cHJlc3Nfc21wX2luaXRfY3B1cyh2b2lkKQotewotCWN0X2Rlc2MtPmluaXRfY3B1X21hcCgpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgdmV4cHJlc3Nfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0JLyoKLQkgKiBJbml0aWFsaXNlIHRoZSBwcmVzZW50IG1hcCwgd2hpY2ggZGVzY3JpYmVzIHRoZSBzZXQgb2YgQ1BVcwotCSAqIGFjdHVhbGx5IHBvcHVsYXRlZCBhdCB0aGUgcHJlc2VudCB0aW1lLgotCSAqLwotCWN0X2Rlc2MtPnNtcF9lbmFibGUobWF4X2NwdXMpOwotCi0JLyoKLQkgKiBXcml0ZSB0aGUgYWRkcmVzcyBvZiBzZWNvbmRhcnkgc3RhcnR1cCBpbnRvIHRoZQotCSAqIHN5c3RlbS13aWRlIGZsYWdzIHJlZ2lzdGVyLiBUaGUgYm9vdCBtb25pdG9yIHdhaXRzCi0JICogdW50aWwgaXQgcmVjZWl2ZXMgYSBzb2Z0IGludGVycnVwdCwgYW5kIHRoZW4gdGhlCi0JICogc2Vjb25kYXJ5IENQVSBicmFuY2hlcyB0byB0aGlzIGFkZHJlc3MuCi0JICovCi0JdmV4cHJlc3NfZmxhZ3Nfc2V0KHZpcnRfdG9fcGh5cyh2ZXJzYXRpbGVfc2Vjb25kYXJ5X3N0YXJ0dXApKTsKLX0KLQotc3RydWN0IHNtcF9vcGVyYXRpb25zIF9faW5pdGRhdGEgdmV4cHJlc3Nfc21wX29wcyA9IHsKLQkuc21wX2luaXRfY3B1cwkJPSB2ZXhwcmVzc19zbXBfaW5pdF9jcHVzLAotCS5zbXBfcHJlcGFyZV9jcHVzCT0gdmV4cHJlc3Nfc21wX3ByZXBhcmVfY3B1cywKLQkuc21wX3NlY29uZGFyeV9pbml0CT0gdmVyc2F0aWxlX3NlY29uZGFyeV9pbml0LAotCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSB2ZXJzYXRpbGVfYm9vdF9zZWNvbmRhcnksCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0JLmNwdV9kaWUJCT0gdmV4cHJlc3NfY3B1X2RpZSwKLSNlbmRpZgotfTsKLQogYm9vbCBfX2luaXQgdmV4cHJlc3Nfc21wX2luaXRfb3BzKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX01DUE0KQEAgLTc5LDggKzQxLDYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19PRikKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmV4cHJlc3Nfc21wX2R0X3NjdV9tYXRjaFtdIF9faW5pdGNvbnN0ID0gewogCXsgLmNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNS1zY3UiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1zY3UiLCB9LApAQCAtMTEyLDUgKzcyLDMgQEAKIAkuY3B1X2RpZQkJPSB2ZXhwcmVzc19jcHVfZGllLAogI2VuZGlmCiB9OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCmluZGV4IDZmZjY4MWEuLmEwNDAwZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYwpAQCAtMSwzODAgKzEsNyBAQAotLyoKLSAqIFZlcnNhdGlsZSBFeHByZXNzIFYyTSBNb3RoZXJib2FyZCBTdXBwb3J0Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgotI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvaXNwMTc2MC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2ZpeGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXhwcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdGltZXIuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS90aW1lci1zcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9jdC1jYTl4NC5oPgotI2luY2x1ZGUgPG1hY2gvbW90aGVyYm9hcmQuaD4KLQotI2luY2x1ZGUgPHBsYXQvc2NoZWRfY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L3BsYXRzbXAuaD4KIAogI2luY2x1ZGUgImNvcmUuaCIKIAotI2RlZmluZSBWMk1fUEFfQ1MwCTB4NDAwMDAwMDAKLSNkZWZpbmUgVjJNX1BBX0NTMQkweDQ0MDAwMDAwCi0jZGVmaW5lIFYyTV9QQV9DUzIJMHg0ODAwMDAwMAotI2RlZmluZSBWMk1fUEFfQ1MzCTB4NGMwMDAwMDAKLSNkZWZpbmUgVjJNX1BBX0NTNwkweDEwMDAwMDAwCi0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdjJtX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBWMk1fUEVSSVBILAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oVjJNX1BBX0NTNyksCi0JCS5sZW5ndGgJCT0gU1pfMTI4SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdjJtX3NwODA0X2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxKQotewotCWlmIChXQVJOX09OKCFiYXNlIHx8IGlycSA9PSBOT19JUlEpKQotCQlyZXR1cm47Ci0KLQlzcDgwNF9jbG9ja3NvdXJjZV9pbml0KGJhc2UgKyBUSU1FUl8yX0JBU0UsICJ2Mm0tdGltZXIxIik7Ci0Jc3A4MDRfY2xvY2tldmVudHNfaW5pdChiYXNlICsgVElNRVJfMV9CQVNFLCBpcnEsICJ2Mm0tdGltZXIwIik7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2Mm1fcGNpZV9pMmNfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gVjJNX1NFUklBTF9CVVNfUENJLAotCS5lbmQJPSBWMk1fU0VSSUFMX0JVU19QQ0kgKyBTWl80SyAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2Mm1fcGNpZV9pMmNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJ2ZXJzYXRpbGUtaTJjIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gJnYybV9wY2llX2kyY19yZXNvdXJjZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdjJtX2RkY19pMmNfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gVjJNX1NFUklBTF9CVVNfRFZJLAotCS5lbmQJPSBWMk1fU0VSSUFMX0JVU19EVkkgKyBTWl80SyAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2Mm1fZGRjX2kyY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInZlcnNhdGlsZS1pMmMiLAotCS5pZAkJPSAxLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmdjJtX2RkY19pMmNfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHYybV9ldGhfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBWMk1fTEFOOTExOCwKLQkJLmVuZAk9IFYyTV9MQU45MTE4ICsgU1pfNjRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJPSBJUlFfVjJNX0xBTjkxMTgsCi0JCS5lbmQJPSBJUlFfVjJNX0xBTjkxMTgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyB2Mm1fZXRoX2NvbmZpZyA9IHsKLQkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklULAotCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0hJR0gsCi0JLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfUFVTSF9QVUxMLAotCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9ldGhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbXNjOTExeCIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHYybV9ldGhfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2Mm1fZXRoX3Jlc291cmNlcyksCi0JLmRldi5wbGF0Zm9ybV9kYXRhID0gJnYybV9ldGhfY29uZmlnLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHYybV9ldGhfc3VwcGxpZXNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJ2ZGR2YXJpbyIsICJzbXNjOTExeCIpLAotCVJFR1VMQVRPUl9TVVBQTFkoInZkZDMzYSIsICJzbXNjOTExeCIpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2Mm1fdXNiX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gVjJNX0lTUDE3NjEsCi0JCS5lbmQJPSBWMk1fSVNQMTc2MSArIFNaXzEyOEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IElSUV9WMk1fSVNQMTc2MSwKLQkJLmVuZAk9IElSUV9WMk1fSVNQMTc2MSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXNwMTc2MF9wbGF0Zm9ybV9kYXRhIHYybV91c2JfY29uZmlnID0gewotCS5pc19pc3AxNzYxCQk9IHRydWUsCi0JLmJ1c193aWR0aF8xNgkJPSBmYWxzZSwKLQkucG9ydDFfb3RnCQk9IHRydWUsCi0JLmFuYWxvZ19vYwkJPSBmYWxzZSwKLQkuZGFja19wb2xhcml0eV9oaWdoCT0gZmFsc2UsCi0JLmRyZXFfcG9sYXJpdHlfaGlnaAk9IGZhbHNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdjJtX3VzYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImlzcDE3NjAiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB2Mm1fdXNiX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodjJtX3VzYl9yZXNvdXJjZXMpLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ2Mm1fdXNiX2NvbmZpZywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHYybV9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2Mm1fZmxhc2hfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBWMk1fTk9SMCwKLQkJLmVuZAk9IFYyTV9OT1IwICsgU1pfNjRNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJPSBWMk1fTk9SMSwKLQkJLmVuZAk9IFYyTV9OT1IxICsgU1pfNjRNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9mbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB2Mm1fZmxhc2hfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2Mm1fZmxhc2hfcmVzb3VyY2VzKSwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdjJtX2ZsYXNoX2RhdGEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBhdGFfcGxhdGZvcm1faW5mbyB2Mm1fcGF0YV9kYXRhID0gewotCS5pb3BvcnRfc2hpZnQJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2Mm1fcGF0YV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IFYyTV9DRiwKLQkJLmVuZAk9IFYyTV9DRiArIDB4ZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CT0gVjJNX0NGICsgMHgxMDAsCi0JCS5lbmQJPSBWMk1fQ0YgKyBTWl80SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2Mm1fY2ZfZGV2aWNlID0gewotCS5uYW1lCQk9ICJwYXRhX3BsYXRmb3JtIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gdjJtX3BhdGFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2Mm1fcGF0YV9yZXNvdXJjZXMpLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ2Mm1fcGF0YV9kYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgdjJtX21tY2lfZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLnN0YXR1cwkJPSB2ZXhwcmVzc19nZXRfbWNpX2NhcmRpbiwKLQkuZ3Bpb19jZAk9IC0xLAotCS5ncGlvX3dwCT0gLTEsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHYybV9zeXNyZWdfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBWMk1fU1lTUkVHUywKLQkJLmVuZAk9IFYyTV9TWVNSRUdTICsgMHhmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2Mm1fc3lzcmVnX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmV4cHJlc3Mtc3lzcmVnIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gdjJtX3N5c3JlZ19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHYybV9zeXNyZWdfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9tdXhmcGdhX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmV4cHJlc3MtbXV4ZnBnYSIsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9IChzdHJ1Y3QgcmVzb3VyY2UgW10pIHsKLQkJVkVYUFJFU1NfUkVTX0ZVTkMoMCwgNyksCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdjJtX3NodXRkb3duX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmV4cHJlc3Mtc2h1dGRvd24iLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAoc3RydWN0IHJlc291cmNlIFtdKSB7Ci0JCVZFWFBSRVNTX1JFU19GVU5DKDAsIDgpLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9yZWJvb3RfZGV2aWNlID0gewotCS5uYW1lCQk9ICJ2ZXhwcmVzcy1yZWJvb3QiLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAoc3RydWN0IHJlc291cmNlIFtdKSB7Ci0JCVZFWFBSRVNTX1JFU19GVU5DKDAsIDkpLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9kdmltb2RlX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmV4cHJlc3MtZHZpbW9kZSIsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9IChzdHJ1Y3QgcmVzb3VyY2UgW10pIHsKLQkJVkVYUFJFU1NfUkVTX0ZVTkMoMCwgMTEpLAotCX0KLX07Ci0KLXN0YXRpYyBBTUJBX0FQQl9ERVZJQ0UoYWFjaSwgICJtYjphYWNpIiwgIDAsIFYyTV9BQUNJLCBJUlFfVjJNX0FBQ0ksIE5VTEwpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRShtbWNpLCAgIm1iOm1tY2kiLCAgMCwgVjJNX01NQ0ksIElSUV9WMk1fTU1DSSwgJnYybV9tbWNpX2RhdGEpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRShrbWkwLCAgIm1iOmttaTAiLCAgMCwgVjJNX0tNSTAsIElSUV9WMk1fS01JMCwgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKGttaTEsICAibWI6a21pMSIsICAwLCBWMk1fS01JMSwgSVJRX1YyTV9LTUkxLCBOVUxMKTsKLXN0YXRpYyBBTUJBX0FQQl9ERVZJQ0UodWFydDAsICJtYjp1YXJ0MCIsIDAsIFYyTV9VQVJUMCwgSVJRX1YyTV9VQVJUMCwgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKHVhcnQxLCAibWI6dWFydDEiLCAwLCBWMk1fVUFSVDEsIElSUV9WMk1fVUFSVDEsIE5VTEwpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRSh1YXJ0MiwgIm1iOnVhcnQyIiwgMCwgVjJNX1VBUlQyLCBJUlFfVjJNX1VBUlQyLCBOVUxMKTsKLXN0YXRpYyBBTUJBX0FQQl9ERVZJQ0UodWFydDMsICJtYjp1YXJ0MyIsIDAsIFYyTV9VQVJUMywgSVJRX1YyTV9VQVJUMywgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKHdkdCwgICAibWI6d2R0IiwgICAwLCBWMk1fV0RULCBJUlFfVjJNX1dEVCwgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKHJ0YywgICAibWI6cnRjIiwgICAwLCBWMk1fUlRDLCBJUlFfVjJNX1JUQywgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKnYybV9hbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewotCSZhYWNpX2RldmljZSwKLQkmbW1jaV9kZXZpY2UsCi0JJmttaTBfZGV2aWNlLAotCSZrbWkxX2RldmljZSwKLQkmdWFydDBfZGV2aWNlLAotCSZ1YXJ0MV9kZXZpY2UsCi0JJnVhcnQyX2RldmljZSwKLQkmdWFydDNfZGV2aWNlLAotCSZ3ZHRfZGV2aWNlLAotCSZydGNfZGV2aWNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHYybV90aW1lcl9pbml0KHZvaWQpCi17Ci0JdmV4cHJlc3NfY2xrX2luaXQoaW9yZW1hcChWMk1fU1lTQ1RMLCBTWl80SykpOwotCXYybV9zcDgwNF9pbml0KGlvcmVtYXAoVjJNX1RJTUVSMDEsIFNaXzRLKSwgSVJRX1YyTV9USU1FUjApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgdjJtX2luaXRfZWFybHkodm9pZCkKLXsKLQlpZiAoY3RfZGVzYy0+aW5pdF9lYXJseSkKLQkJY3RfZGVzYy0+aW5pdF9lYXJseSgpOwotCXZlcnNhdGlsZV9zY2hlZF9jbG9ja19pbml0KHZleHByZXNzX2dldF8yNG1oel9jbG9ja19iYXNlKCksIDI0MDAwMDAwKTsKLX0KLQotc3RydWN0IGN0X2Rlc2MgKmN0X2Rlc2M7Ci0KLXN0YXRpYyBzdHJ1Y3QgY3RfZGVzYyAqY3RfZGVzY3NbXSBfX2luaXRkYXRhID0gewotI2lmZGVmIENPTkZJR19BUkNIX1ZFWFBSRVNTX0NBOVg0Ci0JJmN0X2NhOXg0X2Rlc2MsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1fcG9wdWxhdGVfY3RfZGVzYyh2b2lkKQotewotCWludCBpOwotCXUzMiBjdXJyZW50X3RpbGVfaWQ7Ci0KLQljdF9kZXNjID0gTlVMTDsKLQljdXJyZW50X3RpbGVfaWQgPSB2ZXhwcmVzc19nZXRfcHJvY2lkKFZFWFBSRVNTX1NJVEVfTUFTVEVSKQotCQkJCSYgVjJNX0NUX0lEX01BU0s7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdF9kZXNjcykgJiYgIWN0X2Rlc2M7ICsraSkKLQkJaWYgKGN0X2Rlc2NzW2ldLT5pZCA9PSBjdXJyZW50X3RpbGVfaWQpCi0JCQljdF9kZXNjID0gY3RfZGVzY3NbaV07Ci0KLQlpZiAoIWN0X2Rlc2MpCi0JCXBhbmljKCJ2ZXhwcmVzczogdGhpcyBrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBjb3JlIHRpbGUgSUQgMHglMDh4IHdoZW4gYm9vdGluZyB2aWEgQVRBR3MuXG4iCi0JCSAgICAgICJZb3UgbWF5IG5lZWQgYSBkZXZpY2UgdHJlZSBibG9iIG9yIGEgZGlmZmVyZW50IGtlcm5lbCB0byBib290IG9uIHRoaXMgYm9hcmQuXG4iLAotCQkgICAgICBjdXJyZW50X3RpbGVfaWQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgdjJtX21hcF9pbyh2b2lkKQotewotCWlvdGFibGVfaW5pdCh2Mm1faW9fZGVzYywgQVJSQVlfU0laRSh2Mm1faW9fZGVzYykpOwotCXZleHByZXNzX3N5c3JlZ19lYXJseV9pbml0KGlvcmVtYXAoVjJNX1NZU1JFR1MsIFNaXzRLKSk7Ci0JdjJtX3BvcHVsYXRlX2N0X2Rlc2MoKTsKLQljdF9kZXNjLT5tYXBfaW8oKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHYybV9pbml0X2lycSh2b2lkKQotewotCWN0X2Rlc2MtPmluaXRfaXJxKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1faW5pdCh2b2lkKQotewotCWludCBpOwotCi0JcmVndWxhdG9yX3JlZ2lzdGVyX2ZpeGVkKDAsIHYybV9ldGhfc3VwcGxpZXMsCi0JCQlBUlJBWV9TSVpFKHYybV9ldGhfc3VwcGxpZXMpKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdjJtX3N5c3JlZ19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdjJtX3BjaWVfaTJjX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fZGRjX2kyY19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdjJtX2ZsYXNoX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fY2ZfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnYybV9ldGhfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnYybV91c2JfZGV2aWNlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHYybV9hbWJhX2RldnMpOyBpKyspCi0JCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKHYybV9hbWJhX2RldnNbaV0sICZpb21lbV9yZXNvdXJjZSk7Ci0KLQl2ZXhwcmVzc19zeXNjZmdfZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fbXV4ZnBnYV9kZXZpY2UpOwotCXZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoJnYybV9zaHV0ZG93bl9kZXZpY2UpOwotCXZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoJnYybV9yZWJvb3RfZGV2aWNlKTsKLQl2ZXhwcmVzc19zeXNjZmdfZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fZHZpbW9kZV9kZXZpY2UpOwotCi0JY3RfZGVzYy0+aW5pdF90aWxlKCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoVkVYUFJFU1MsICJBUk0tVmVyc2F0aWxlIEV4cHJlc3MiKQotCS5hdGFnX29mZnNldAk9IDB4MTAwLAotCS5zbXAJCT0gc21wX29wcyh2ZXhwcmVzc19zbXBfb3BzKSwKLQkubWFwX2lvCQk9IHYybV9tYXBfaW8sCi0JLmluaXRfZWFybHkJPSB2Mm1faW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSB2Mm1faW5pdF9pcnEsCi0JLmluaXRfdGltZQk9IHYybV90aW1lcl9pbml0LAotCS5pbml0X21hY2hpbmUJPSB2Mm1faW5pdCwKLU1BQ0hJTkVfRU5ECi0KLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1fZHRfaW5pdCh2b2lkKQotewotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2Mm1fZHRfbWF0Y2hbXSBfX2luaXRjb25zdCA9IHsKIAkiYXJtLHZleHByZXNzIiwKIAlOVUxMLApAQCAtMzg2LDUgKzEzLDQgQEAKIAkubDJjX2F1eF9tYXNrCT0gMHhmZTBmZmZmZiwKIAkuc21wCQk9IHNtcF9vcHModmV4cHJlc3Nfc21wX2R0X29wcyksCiAJLnNtcF9pbml0CT0gc21wX2luaXRfb3BzKHZleHByZXNzX3NtcF9pbml0X29wcyksCi0JLmluaXRfbWFjaGluZQk9IHYybV9kdF9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtenlucS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtenlucS9NYWtlZmlsZQppbmRleCBjODVmYjNmLi5iMDNhOTdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXp5bnEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC16eW5xL01ha2VmaWxlCkBAIC00LDYgKzQsNCBAQAogCiAjIENvbW1vbiBzdXBwb3J0CiBvYmoteQkJCQk6PSBjb21tb24ubyBzbGNyLm8gcG0ubwotQ0ZMQUdTX1JFTU9WRV9ob3RwbHVnLm8JCT0tbWFyY2g9YXJtdjZrCi1DRkxBR1NfaG90cGx1Zy5vIAkJPS1XYSwtbWFyY2g9YXJtdjctYSAtbWNwdT1jb3J0ZXgtYTkKIG9iai0kKENPTkZJR19TTVApCQkrPSBoZWFkc21wLm8gcGxhdHNtcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmgKaW5kZXggMmJjNzEyNy4uMzgyYzYwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtenlucS9jb21tb24uaApAQCAtMjksNyArMjksNiBAQAogZXh0ZXJuIHUzMiB6eW5xX3NsY3JfZ2V0X2RldmljZV9pZCh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiB2b2lkIHNlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogZXh0ZXJuIGNoYXIgenlucV9zZWNvbmRhcnlfdHJhbXBvbGluZTsKIGV4dGVybiBjaGFyIHp5bnFfc2Vjb25kYXJ5X3RyYW1wb2xpbmVfanVtcDsKIGV4dGVybiBjaGFyIHp5bnFfc2Vjb25kYXJ5X3RyYW1wb2xpbmVfZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC16eW5xL2hvdHBsdWcuYyBiL2FyY2gvYXJtL21hY2gtenlucS9ob3RwbHVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ODVjODkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC16eW5xL2hvdHBsdWcuYworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBYaWxpbngKLSAqCi0gKiBiYXNlZCBvbiBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBBUk0gTHRkLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggN2ViOTRlNi4uYWI5MDZiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0yMSw3ICsyMSw3IEBACiAKICMgQVJNNzIwVAogY29uZmlnIENQVV9BUk03MjBUCi0JYm9vbCAiU3VwcG9ydCBBUk03MjBUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk03MjBUIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjRUICYmIEFSQ0hfSU5URUdSQVRPUikKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0xWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CkBAIC0zOSw3ICszOSw3IEBACiAKICMgQVJNNzQwVAogY29uZmlnIENQVV9BUk03NDBUCi0JYm9vbCAiU3VwcG9ydCBBUk03NDBUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk03NDBUIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjRUICYmIEFSQ0hfSU5URUdSQVRPUikKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0xWNFQKQEAgLTcxLDcgKzcxLDcgQEAKIAogIyBBUk05MjBUCiBjb25maWcgQ1BVX0FSTTkyMFQKLQlib29sICJTdXBwb3J0IEFSTTkyMFQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKKwlib29sICJTdXBwb3J0IEFSTTkyMFQgcHJvY2Vzc29yIiBpZiAoQVJDSF9NVUxUSV9WNFQgJiYgQVJDSF9JTlRFR1JBVE9SKQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVApAQCAtODksNyArODksNyBAQAogCiAjIEFSTTkyMlQKIGNvbmZpZyBDUFVfQVJNOTIyVAotCWJvb2wgIlN1cHBvcnQgQVJNOTIyVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNOTIyVCBwcm9jZXNzb3IiIGlmIChBUkNIX01VTFRJX1Y0VCAmJiBBUkNIX0lOVEVHUkFUT1IpCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogIyBBUk05MjZUCiBjb25maWcgQ1BVX0FSTTkyNlQKLQlib29sICJTdXBwb3J0IEFSTTkyNlQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQgorCWJvb2wgIlN1cHBvcnQgQVJNOTI2VCBwcm9jZXNzb3IiIGlmICghQVJDSF9NVUxUSVBMQVRGT1JNIHx8IEFSQ0hfTVVMVElfVjUpICYmIChBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQikKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VEoKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKQEAgLTE2Myw3ICsxNjMsNyBAQAogCiAjIEFSTTk0MFQKIGNvbmZpZyBDUFVfQVJNOTQwVAotCWJvb2wgIlN1cHBvcnQgQVJNOTQwVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNOTQwVCBwcm9jZXNzb3IiIGlmIChBUkNIX01VTFRJX1Y0VCAmJiBBUkNIX0lOVEVHUkFUT1IpCiAJZGVwZW5kcyBvbiAhTU1VCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9OT01NVQpAQCAtMTgxLDcgKzE4MSw3IEBACiAKICMgQVJNOTQ2RS1TCiBjb25maWcgQ1BVX0FSTTk0NkUKLQlib29sICJTdXBwb3J0IEFSTTk0NkUtUyBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNOTQ2RS1TIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjUgJiYgQVJDSF9JTlRFR1JBVE9SKQogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9OT01NVQpAQCAtMTk4LDcgKzE5OCw3IEBACiAKICMgQVJNMTAyMCAtIG5lZWRzIHZhbGlkYXRpbmcKIGNvbmZpZyBDUFVfQVJNMTAyMAotCWJvb2wgIlN1cHBvcnQgQVJNMTAyMFQgKHJldiAwKSBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNMTAyMFQgKHJldiAwKSBwcm9jZXNzb3IiIGlmIChBUkNIX01VTFRJX1Y1ICYmIEFSQ0hfSU5URUdSQVRPUikKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVApAQCAtMjE2LDcgKzIxNiw3IEBACiAKICMgQVJNMTAyMEUgLSBuZWVkcyB2YWxpZGF0aW5nCiBjb25maWcgQ1BVX0FSTTEwMjBFCi0JYm9vbCAiU3VwcG9ydCBBUk0xMDIwRSBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNMTAyMEUgcHJvY2Vzc29yIiBpZiAoQVJDSF9NVUxUSV9WNSAmJiBBUkNIX0lOVEVHUkFUT1IpCiAJZGVwZW5kcyBvbiBuCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKQEAgLTIyOSw3ICsyMjksNyBAQAogCiAjIEFSTTEwMjJFCiBjb25maWcgQ1BVX0FSTTEwMjIKLQlib29sICJTdXBwb3J0IEFSTTEwMjJFIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk0xMDIyRSBwcm9jZXNzb3IiIGlmIChBUkNIX01VTFRJX1Y1ICYmIEFSQ0hfSU5URUdSQVRPUikKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAKICMgQVJNMTAyNkVKLVMKIGNvbmZpZyBDUFVfQVJNMTAyNgotCWJvb2wgIlN1cHBvcnQgQVJNMTAyNkVKLVMgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKKwlib29sICJTdXBwb3J0IEFSTTEwMjZFSi1TIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjUgJiYgQVJDSF9JTlRFR1JBVE9SKQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUICMgQnV0IG5lZWQgSmF6ZWxsZSwgYnV0IEVWNVRKIGlnbm9yZXMgYml0IDEwCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCkBAIC0zNTgsNyArMzU4LDcgQEAKIAogIyBBUk12NgogY29uZmlnIENQVV9WNgotCWJvb2wgIlN1cHBvcnQgQVJNIFY2IHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgTUFDSF9SRUFMVklFV19QQlgKKwlib29sICJTdXBwb3J0IEFSTSBWNiBwcm9jZXNzb3IiIGlmICghQVJDSF9NVUxUSVBMQVRGT1JNIHx8IEFSQ0hfTVVMVElfVjYpICYmIChBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWCkKIAlzZWxlY3QgQ1BVXzMydjYKIAlzZWxlY3QgQ1BVX0FCUlRfRVY2CiAJc2VsZWN0IENQVV9DQUNIRV9WNgpAQCAtMzcxLDcgKzM3MSw3IEBACiAKICMgQVJNdjZrCiBjb25maWcgQ1BVX1Y2SwotCWJvb2wgIlN1cHBvcnQgQVJNIFY2SyBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IE1BQ0hfUkVBTFZJRVdfUEJYCisJYm9vbCAiU3VwcG9ydCBBUk0gVjZLIHByb2Nlc3NvciIgaWYgKCFBUkNIX01VTFRJUExBVEZPUk0gfHwgQVJDSF9NVUxUSV9WNikgJiYgKEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IE1BQ0hfUkVBTFZJRVdfUEJYKQogCXNlbGVjdCBDUFVfMzJ2NgogCXNlbGVjdCBDUFVfMzJ2NksKIAlzZWxlY3QgQ1BVX0FCUlRfRVY2CkBAIC0zODUsNyArMzg1LDcgQEAKIAogIyBBUk12NwogY29uZmlnIENQVV9WNwotCWJvb2wgIlN1cHBvcnQgQVJNIFY3IHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgTUFDSF9SRUFMVklFV19QQlgKKwlib29sICJTdXBwb3J0IEFSTSBWNyBwcm9jZXNzb3IiIGlmICghQVJDSF9NVUxUSVBMQVRGT1JNIHx8IEFSQ0hfTVVMVElfVjcpICYmIChBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWCkKIAlzZWxlY3QgQ1BVXzMydjZLCiAJc2VsZWN0IENQVV8zMnY3CiAJc2VsZWN0IENQVV9BQlJUX0VWNwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYwppbmRleCBlMDQ4ZjYxLi4xNGY2ZTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYwpAQCAtNTA1LDkgKzUwNSw5IEBACiAJdTMyIG1hc2sgPSBkLT5tYXNrOwogCiAJaXJxX2djX2xvY2soZ2MpOwotCXJlZ192YWwgPSBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLm1hc2spOworCXJlZ192YWwgPSBpcnFfcmVnX3JlYWRsKGdjLCBjdC0+cmVncy5tYXNrKTsKIAlyZWdfdmFsIHw9IG1hc2s7Ci0JaXJxX3JlZ193cml0ZWwocmVnX3ZhbCwgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MubWFzayk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIHJlZ192YWwsIGN0LT5yZWdzLm1hc2spOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogCkBAIC01MTksOSArNTE5LDkgQEAKIAl1MzIgcmVnX3ZhbDsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlyZWdfdmFsID0gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5tYXNrKTsKKwlyZWdfdmFsID0gaXJxX3JlZ19yZWFkbChnYywgY3QtPnJlZ3MubWFzayk7CiAJcmVnX3ZhbCAmPSB+bWFzazsKLQlpcnFfcmVnX3dyaXRlbChyZWdfdmFsLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5tYXNrKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgcmVnX3ZhbCwgY3QtPnJlZ3MubWFzayk7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9NYWtlZmlsZQppbmRleCBmMGEwMDg0Li44Nzc0NmMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL01ha2VmaWxlCkBAIC0zNSw2ICszNSw3IEBACiAjIFBNIHN1cHBvcnQKIAogb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkJKz0gcG0tY29tbW9uLm8KK29iai0kKENPTkZJR19FWFlOT1NfQ1BVX1NVU1BFTkQpICs9IHBtLWNvbW1vbi5vCiBvYmotJChDT05GSUdfU0FNU1VOR19QTSkJKz0gcG0ubwogb2JqLSQoQ09ORklHX1NBTVNVTkdfUE1fR1BJTykJKz0gcG0tZ3Bpby5vCiBvYmotJChDT05GSUdfU0FNU1VOR19QTV9DSEVDSykJKz0gcG0tY2hlY2subwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9tYXAtczVwLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L21hcC1zNXAuaAppbmRleCBmNWI5ZDNmLi5mNWNmMmJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L21hcC1zNXAuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L21hcC1zNXAuaApAQCAtMTUsNDMgKzE1LDIyIEBACiAKICNkZWZpbmUgUzVQX1ZBX0NISVBJRAkJUzNDX0FERFIoMHgwMjAwMDAwMCkKICNkZWZpbmUgUzVQX1ZBX0NNVQkJUzNDX0FERFIoMHgwMjEwMDAwMCkKLSNkZWZpbmUgUzVQX1ZBX0dQSU8JCVMzQ19BRERSKDB4MDIyMDAwMDApCi0jZGVmaW5lIFM1UF9WQV9HUElPMQkJUzVQX1ZBX0dQSU8KLSNkZWZpbmUgUzVQX1ZBX0dQSU8yCQlTM0NfQUREUigweDAyMjQwMDAwKQotI2RlZmluZSBTNVBfVkFfR1BJTzMJCVMzQ19BRERSKDB4MDIyODAwMDApCiAKLSNkZWZpbmUgUzVQX1ZBX1NZU1JBTQkJUzNDX0FERFIoMHgwMjQwMDAwMCkKLSNkZWZpbmUgUzVQX1ZBX1NZU1JBTV9OUwlTM0NfQUREUigweDAyNDEwMDAwKQogI2RlZmluZSBTNVBfVkFfRE1DMAkJUzNDX0FERFIoMHgwMjQ0MDAwMCkKICNkZWZpbmUgUzVQX1ZBX0RNQzEJCVMzQ19BRERSKDB4MDI0ODAwMDApCiAjZGVmaW5lIFM1UF9WQV9TUk9NQwkJUzNDX0FERFIoMHgwMjRDMDAwMCkKIAotI2RlZmluZSBTNVBfVkFfU1lTVElNRVIJCVMzQ19BRERSKDB4MDI1MDAwMDApCi0jZGVmaW5lIFM1UF9WQV9MMkNDCQlTM0NfQUREUigweDAyNjAwMDAwKQotCi0jZGVmaW5lIFM1UF9WQV9DT01CSU5FUl9CQVNFCVMzQ19BRERSKDB4MDI3MDAwMDApCi0jZGVmaW5lIFM1UF9WQV9DT01CSU5FUih4KQkoUzVQX1ZBX0NPTUJJTkVSX0JBU0UgKyAoKHgpID4+IDIpICogMHgxMCkKLQogI2RlZmluZSBTNVBfVkFfQ09SRVBFUklfQkFTRQlTM0NfQUREUigweDAyODAwMDAwKQogI2RlZmluZSBTNVBfVkFfQ09SRVBFUkkoeCkJKFM1UF9WQV9DT1JFUEVSSV9CQVNFICsgKHgpKQogI2RlZmluZSBTNVBfVkFfU0NVCQlTNVBfVkFfQ09SRVBFUkkoMHgwKQogI2RlZmluZSBTNVBfVkFfVFdECQlTNVBfVkFfQ09SRVBFUkkoMHg2MDApCiAKLSNkZWZpbmUgUzVQX1ZBX0dJQ19DUFUJCVMzQ19BRERSKDB4MDI4MTAwMDApCi0jZGVmaW5lIFM1UF9WQV9HSUNfRElTVAkJUzNDX0FERFIoMHgwMjgyMDAwMCkKLQogI2RlZmluZSBWQV9WSUMoeCkJCShTM0NfVkFfSVJRICsgKCh4KSAqIDB4MTAwMDApKQogI2RlZmluZSBWQV9WSUMwCQkJVkFfVklDKDApCiAjZGVmaW5lIFZBX1ZJQzEJCQlWQV9WSUMoMSkKICNkZWZpbmUgVkFfVklDMgkJCVZBX1ZJQygyKQogI2RlZmluZSBWQV9WSUMzCQkJVkFfVklDKDMpCiAKLSNkZWZpbmUgUzVQX1ZBX1VBUlQoeCkJCShTM0NfVkFfVUFSVCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQotI2RlZmluZSBTNVBfVkFfVUFSVDAJCVM1UF9WQV9VQVJUKDApCi0jZGVmaW5lIFM1UF9WQV9VQVJUMQkJUzVQX1ZBX1VBUlQoMSkKLSNkZWZpbmUgUzVQX1ZBX1VBUlQyCQlTNVBfVkFfVUFSVCgyKQotI2RlZmluZSBTNVBfVkFfVUFSVDMJCVM1UF9WQV9VQVJUKDMpCi0KICNpZm5kZWYgUzNDX1VBUlRfT0ZGU0VUCiAjZGVmaW5lIFMzQ19VQVJUX09GRlNFVAkJKDB4NDAwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvS2NvbmZpZwppbmRleCBhMzAxY2EyLi40OWI4ZWY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL0tjb25maWcKQEAgLTQsNiArNCw2IEBACiAJYm9vbAogCiBjb25maWcgUExBVF9WRVJTQVRJTEVfU0NIRURfQ0xPQ0sKLQlkZWZfYm9vbCB5CisJYm9vbAogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IDk1MzJmOGQuLjZiMWViZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZworKysgYi9hcmNoL2FybTY0L0tjb25maWcKQEAgLTI0LDkgKzI0LDkgQEAKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QgaWYgU01QCiAJc2VsZWN0IEdFTkVSSUNfQ1BVX0FVVE9QUk9CRQogCXNlbGVjdCBHRU5FUklDX0VBUkxZX0lPUkVNQVAKLQlzZWxlY3QgR0VORVJJQ19JT01BUAogCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQogCXNlbGVjdCBHRU5FUklDX0lSUV9TSE9XCisJc2VsZWN0IEdFTkVSSUNfUENJX0lPTUFQCiAJc2VsZWN0IEdFTkVSSUNfU0NIRURfQ0xPQ0sKIAlzZWxlY3QgR0VORVJJQ19TTVBfSURMRV9USFJFQUQKIAlzZWxlY3QgR0VORVJJQ19TVFJOQ1BZX0ZST01fVVNFUgpAQCAtMzQsMTMgKzM0LDE2IEBACiAJc2VsZWN0IEdFTkVSSUNfVElNRV9WU1lTQ0FMTAogCXNlbGVjdCBIQU5ETEVfRE9NQUlOX0lSUQogCXNlbGVjdCBIQVJESVJRU19TV19SRVNFTkQKKwlzZWxlY3QgSEFWRV9BTElHTkVEX1NUUlVDVF9QQUdFIGlmIFNMVUIKIAlzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTAogCXNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTAogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgorCXNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVIKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBIQVZFX0JQRl9KSVQKIAlzZWxlY3QgSEFWRV9DX1JFQ09SRE1DT1VOVAogCXNlbGVjdCBIQVZFX0NDX1NUQUNLUFJPVEVDVE9SCisJc2VsZWN0IEhBVkVfQ01QWENIR19ET1VCTEUKIAlzZWxlY3QgSEFWRV9ERUJVR19CVUdWRVJCT1NFCiAJc2VsZWN0IEhBVkVfREVCVUdfS01FTUxFQUsKIAlzZWxlY3QgSEFWRV9ETUFfQVBJX0RFQlVHCkBAIC0xNDIsNiArMTQ1LDExIEBACiAKIG1lbnUgIlBsYXRmb3JtIHNlbGVjdGlvbiIKIAorY29uZmlnIEFSQ0hfU0VBVFRMRQorCWJvb2wgIkFNRCBTZWF0dGxlIFNvQyBGYW1pbHkiCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEFNRCBTZWF0dGxlIFNPQyBGYW1pbHkKKwogY29uZmlnIEFSQ0hfVEhVTkRFUgogCWJvb2wgIkNhdml1bSBJbmMuIFRodW5kZXIgU29DIEZhbWlseSIKIAloZWxwCkBAIC0xNjYsOSArMTc0LDYgQEAKIAogbWVudSAiQnVzIHN1cHBvcnQiCiAKLWNvbmZpZyBBUk1fQU1CQQotCWJvb2wKLQogY29uZmlnIFBDSQogCWJvb2wgIlBDSSBzdXBwb3J0IgogCWhlbHAKQEAgLTE5Myw2ICsxOTgsMTE0IEBACiAKIG1lbnUgIktlcm5lbCBGZWF0dXJlcyIKIAorbWVudSAiQVJNIGVycmF0YSB3b3JrYXJvdW5kcyB2aWEgdGhlIGFsdGVybmF0aXZlcyBmcmFtZXdvcmsiCisKK2NvbmZpZyBBUk02NF9FUlJBVFVNXzgyNjMxOQorCWJvb2wgIkNvcnRleC1BNTM6IDgyNjMxOTogU3lzdGVtIG1pZ2h0IGRlYWRsb2NrIGlmIGEgd3JpdGUgY2Fubm90IGNvbXBsZXRlIHVudGlsIHJlYWQgZGF0YSBpcyBhY2NlcHRlZCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVuY2UgdG8gd29yayBhcm91bmQgQVJNCisJICBlcnJhdHVtIDgyNjMxOSBvbiBDb3J0ZXgtQTUzIHBhcnRzIHVwIHRvIHIwcDIgd2l0aCBhbiBBTUJBIDQgQUNFIG9yCisJICBBWEkgbWFzdGVyIGludGVyZmFjZSBhbmQgYW4gTDIgY2FjaGUuCisKKwkgIElmIGEgQ29ydGV4LUE1MyB1c2VzIGFuIEFNQkEgQVhJNCBBQ0UgaW50ZXJmYWNlIHRvIG90aGVyIHByb2Nlc3NvcnMKKwkgIGFuZCBpcyB1bmFibGUgdG8gYWNjZXB0IGEgY2VydGFpbiB3cml0ZSB2aWEgdGhpcyBpbnRlcmZhY2UsIGl0IHdpbGwKKwkgIG5vdCBwcm9ncmVzcyBvbiByZWFkIGRhdGEgcHJlc2VudGVkIG9uIHRoZSByZWFkIGRhdGEgY2hhbm5lbCBhbmQgdGhlCisJICBzeXN0ZW0gY2FuIGRlYWRsb2NrLgorCisJICBUaGUgd29ya2Fyb3VuZCBwcm9tb3RlcyBkYXRhIGNhY2hlIGNsZWFuIGluc3RydWN0aW9ucyB0bworCSAgZGF0YSBjYWNoZSBjbGVhbi1hbmQtaW52YWxpZGF0ZS4KKwkgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBlbmFibGUgdGhlIHdvcmthcm91bmQsCisJICBhcyBpdCBkZXBlbmRzIG9uIHRoZSBhbHRlcm5hdGl2ZSBmcmFtZXdvcmssIHdoaWNoIHdpbGwgb25seSBwYXRjaAorCSAgdGhlIGtlcm5lbCBpZiBhbiBhZmZlY3RlZCBDUFUgaXMgZGV0ZWN0ZWQuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBBUk02NF9FUlJBVFVNXzgyNzMxOQorCWJvb2wgIkNvcnRleC1BNTM6IDgyNzMxOTogRGF0YSBjYWNoZSBjbGVhbiBpbnN0cnVjdGlvbnMgbWlnaHQgY2F1c2Ugb3ZlcmxhcHBpbmcgdHJhbnNhY3Rpb25zIHRvIHRoZSBpbnRlcmNvbm5lY3QiCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhbiBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVlbmNlIHRvIHdvcmsgYXJvdW5kIEFSTQorCSAgZXJyYXR1bSA4MjczMTkgb24gQ29ydGV4LUE1MyBwYXJ0cyB1cCB0byByMHAyIHdpdGggYW4gQU1CQSA1IENISQorCSAgbWFzdGVyIGludGVyZmFjZSBhbmQgYW4gTDIgY2FjaGUuCisKKwkgIFVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyB0aGlzIGVycmF0dW0gY2FuIGNhdXNlIGEgY2xlYW4gbGluZSBldmljdGlvbgorCSAgdG8gb2NjdXIgYXQgdGhlIHNhbWUgdGltZSBhcyBhbm90aGVyIHRyYW5zYWN0aW9uIHRvIHRoZSBzYW1lIGFkZHJlc3MKKwkgIG9uIHRoZSBBTUJBIDUgQ0hJIGludGVyZmFjZSwgd2hpY2ggY2FuIGNhdXNlIGRhdGEgY29ycnVwdGlvbiBpZiB0aGUKKwkgIGludGVyY29ubmVjdCByZW9yZGVycyB0aGUgdHdvIHRyYW5zYWN0aW9ucy4KKworCSAgVGhlIHdvcmthcm91bmQgcHJvbW90ZXMgZGF0YSBjYWNoZSBjbGVhbiBpbnN0cnVjdGlvbnMgdG8KKwkgIGRhdGEgY2FjaGUgY2xlYW4tYW5kLWludmFsaWRhdGUuCisJICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgZW5hYmxlIHRoZSB3b3JrYXJvdW5kLAorCSAgYXMgaXQgZGVwZW5kcyBvbiB0aGUgYWx0ZXJuYXRpdmUgZnJhbWV3b3JrLCB3aGljaCB3aWxsIG9ubHkgcGF0Y2gKKwkgIHRoZSBrZXJuZWwgaWYgYW4gYWZmZWN0ZWQgQ1BVIGlzIGRldGVjdGVkLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgQVJNNjRfRVJSQVRVTV84MjQwNjkKKwlib29sICJDb3J0ZXgtQTUzOiA4MjQwNjk6IENhY2hlIGxpbmUgbWlnaHQgbm90IGJlIG1hcmtlZCBhcyBjbGVhbiBhZnRlciBhIENsZWFuU2hhcmVkIHNub29wIgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZSB0byB3b3JrIGFyb3VuZCBBUk0KKwkgIGVycmF0dW0gODI0MDY5IG9uIENvcnRleC1BNTMgcGFydHMgdXAgdG8gcjBwMiB3aGVuIGl0IGlzIGNvbm5lY3RlZAorCSAgdG8gYSBjb2hlcmVudCBpbnRlcmNvbm5lY3QuCisKKwkgIElmIGEgQ29ydGV4LUE1MyBwcm9jZXNzb3IgaXMgZXhlY3V0aW5nIGEgc3RvcmUgb3IgcHJlZmV0Y2ggZm9yCisJICB3cml0ZSBpbnN0cnVjdGlvbiBhdCB0aGUgc2FtZSB0aW1lIGFzIGEgcHJvY2Vzc29yIGluIGFub3RoZXIKKwkgIGNsdXN0ZXIgaXMgZXhlY3V0aW5nIGEgY2FjaGUgbWFpbnRlbmFuY2Ugb3BlcmF0aW9uIHRvIHRoZSBzYW1lCisJICBhZGRyZXNzLCB0aGVuIHRoaXMgZXJyYXR1bSBtaWdodCBjYXVzZSBhIGNsZWFuIGNhY2hlIGxpbmUgdG8gYmUKKwkgIGluY29ycmVjdGx5IG1hcmtlZCBhcyBkaXJ0eS4KKworCSAgVGhlIHdvcmthcm91bmQgcHJvbW90ZXMgZGF0YSBjYWNoZSBjbGVhbiBpbnN0cnVjdGlvbnMgdG8KKwkgIGRhdGEgY2FjaGUgY2xlYW4tYW5kLWludmFsaWRhdGUuCisJICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgb3B0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGVuYWJsZSB0aGUKKwkgIHdvcmthcm91bmQsIGFzIGl0IGRlcGVuZHMgb24gdGhlIGFsdGVybmF0aXZlIGZyYW1ld29yaywgd2hpY2ggd2lsbAorCSAgb25seSBwYXRjaCB0aGUga2VybmVsIGlmIGFuIGFmZmVjdGVkIENQVSBpcyBkZXRlY3RlZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIEFSTTY0X0VSUkFUVU1fODE5NDcyCisJYm9vbCAiQ29ydGV4LUE1MzogODE5NDcyOiBTdG9yZSBleGNsdXNpdmUgaW5zdHJ1Y3Rpb25zIG1pZ2h0IGNhdXNlIGRhdGEgY29ycnVwdGlvbiIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVuY2UgdG8gd29yayBhcm91bmQgQVJNCisJICBlcnJhdHVtIDgxOTQ3MiBvbiBDb3J0ZXgtQTUzIHBhcnRzIHVwIHRvIHIwcDEgd2l0aCBhbiBMMiBjYWNoZQorCSAgcHJlc2VudCB3aGVuIGl0IGlzIGNvbm5lY3RlZCB0byBhIGNvaGVyZW50IGludGVyY29ubmVjdC4KKworCSAgSWYgdGhlIHByb2Nlc3NvciBpcyBleGVjdXRpbmcgYSBsb2FkIGFuZCBzdG9yZSBleGNsdXNpdmUgc2VxdWVuY2UgYXQKKwkgIHRoZSBzYW1lIHRpbWUgYXMgYSBwcm9jZXNzb3IgaW4gYW5vdGhlciBjbHVzdGVyIGlzIGV4ZWN1dGluZyBhIGNhY2hlCisJICBtYWludGVuYW5jZSBvcGVyYXRpb24gdG8gdGhlIHNhbWUgYWRkcmVzcywgdGhlbiB0aGlzIGVycmF0dW0gbWlnaHQKKwkgIGNhdXNlIGRhdGEgY29ycnVwdGlvbi4KKworCSAgVGhlIHdvcmthcm91bmQgcHJvbW90ZXMgZGF0YSBjYWNoZSBjbGVhbiBpbnN0cnVjdGlvbnMgdG8KKwkgIGRhdGEgY2FjaGUgY2xlYW4tYW5kLWludmFsaWRhdGUuCisJICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgZW5hYmxlIHRoZSB3b3JrYXJvdW5kLAorCSAgYXMgaXQgZGVwZW5kcyBvbiB0aGUgYWx0ZXJuYXRpdmUgZnJhbWV3b3JrLCB3aGljaCB3aWxsIG9ubHkgcGF0Y2gKKwkgIHRoZSBrZXJuZWwgaWYgYW4gYWZmZWN0ZWQgQ1BVIGlzIGRldGVjdGVkLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgQVJNNjRfRVJSQVRVTV84MzIwNzUKKwlib29sICJDb3J0ZXgtQTU3OiA4MzIwNzU6IHBvc3NpYmxlIGRlYWRsb2NrIG9uIG1peGluZyBleGNsdXNpdmUgbWVtb3J5IGFjY2Vzc2VzIHdpdGggZGV2aWNlIGxvYWRzIgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZSB0byB3b3JrIGFyb3VuZCBBUk0KKwkgIGVycmF0dW0gODMyMDc1IG9uIENvcnRleC1BNTcgcGFydHMgdXAgdG8gcjFwMi4KKworCSAgQWZmZWN0ZWQgQ29ydGV4LUE1NyBwYXJ0cyBtaWdodCBkZWFkbG9jayB3aGVuIGV4Y2x1c2l2ZSBsb2FkL3N0b3JlCisJICBpbnN0cnVjdGlvbnMgdG8gV3JpdGUtQmFjayBtZW1vcnkgYXJlIG1peGVkIHdpdGggRGV2aWNlIGxvYWRzLgorCisJICBUaGUgd29ya2Fyb3VuZCBpcyB0byBwcm9tb3RlIGRldmljZSBsb2FkcyB0byB1c2UgTG9hZC1BY3F1aXJlCisJICBzZW1hbnRpY3MuCisJICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgZW5hYmxlIHRoZSB3b3JrYXJvdW5kLAorCSAgYXMgaXQgZGVwZW5kcyBvbiB0aGUgYWx0ZXJuYXRpdmUgZnJhbWV3b3JrLCB3aGljaCB3aWxsIG9ubHkgcGF0Y2gKKwkgIHRoZSBrZXJuZWwgaWYgYW4gYWZmZWN0ZWQgQ1BVIGlzIGRldGVjdGVkLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitlbmRtZW51CisKKwogY2hvaWNlCiAJcHJvbXB0ICJQYWdlIHNpemUiCiAJZGVmYXVsdCBBUk02NF80S19QQUdFUwpAQCAtMzQ1LDYgKzQ1OCwxOSBAQAogCiBzb3VyY2UgIm1tL0tjb25maWciCiAKK2NvbmZpZyBTRUNDT01QCisJYm9vbCAiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGNvbXB1dGUgdW50cnVzdGVkIGJ5dGVjb2RlIgorCS0tLWhlbHAtLS0KKwkgIFRoaXMga2VybmVsIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBudW1iZXIgY3J1bmNoaW5nIGFwcGxpY2F0aW9ucworCSAgdGhhdCBtYXkgbmVlZCB0byBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSBkdXJpbmcgdGhlaXIKKwkgIGV4ZWN1dGlvbi4gQnkgdXNpbmcgcGlwZXMgb3Igb3RoZXIgdHJhbnNwb3J0cyBtYWRlIGF2YWlsYWJsZSB0bworCSAgdGhlIHByb2Nlc3MgYXMgZmlsZSBkZXNjcmlwdG9ycyBzdXBwb3J0aW5nIHRoZSByZWFkL3dyaXRlCisJICBzeXNjYWxscywgaXQncyBwb3NzaWJsZSB0byBpc29sYXRlIHRob3NlIGFwcGxpY2F0aW9ucyBpbgorCSAgdGhlaXIgb3duIGFkZHJlc3Mgc3BhY2UgdXNpbmcgc2VjY29tcC4gT25jZSBzZWNjb21wIGlzCisJICBlbmFibGVkIHZpYSBwcmN0bChQUl9TRVRfU0VDQ09NUCksIGl0IGNhbm5vdCBiZSBkaXNhYmxlZAorCSAgYW5kIHRoZSB0YXNrIGlzIG9ubHkgYWxsb3dlZCB0byBleGVjdXRlIGEgZmV3IHNhZmUgc3lzY2FsbHMKKwkgIGRlZmluZWQgYnkgZWFjaCBzZWNjb21wIG1vZGUuCisKIGNvbmZpZyBYRU5fRE9NMAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFhFTgpAQCAtMzYxLDYgKzQ4Nyw1OCBAQAogCWRlZmF1bHQgIjE0IiBpZiAoQVJNNjRfNjRLX1BBR0VTICYmIFRSQU5TUEFSRU5UX0hVR0VQQUdFKQogCWRlZmF1bHQgIjExIgogCittZW51Y29uZmlnIEFSTVY4X0RFUFJFQ0FURUQKKwlib29sICJFbXVsYXRlIGRlcHJlY2F0ZWQvb2Jzb2xldGUgQVJNdjggaW5zdHJ1Y3Rpb25zIgorCWRlcGVuZHMgb24gQ09NUEFUCisJaGVscAorCSAgTGVnYWN5IHNvZnR3YXJlIHN1cHBvcnQgbWF5IHJlcXVpcmUgY2VydGFpbiBpbnN0cnVjdGlvbnMKKwkgIHRoYXQgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgb3Igb2Jzb2xldGVkIGluIHRoZSBhcmNoaXRlY3R1cmUuCisKKwkgIEVuYWJsZSB0aGlzIGNvbmZpZyB0byBlbmFibGUgc2VsZWN0aXZlIGVtdWxhdGlvbiBvZiB0aGVzZQorCSAgZmVhdHVyZXMuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkKKworaWYgQVJNVjhfREVQUkVDQVRFRAorCitjb25maWcgU1dQX0VNVUxBVElPTgorCWJvb2wgIkVtdWxhdGUgU1dQL1NXUEIgaW5zdHJ1Y3Rpb25zIgorCWhlbHAKKwkgIEFSTXY4IG9ic29sZXRlcyB0aGUgdXNlIG9mIEEzMiBTV1AvU1dQQiBpbnN0cnVjdGlvbnMgc3VjaCB0aGF0CisJICB0aGV5IGFyZSBhbHdheXMgdW5kZWZpbmVkLiBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzb2Z0d2FyZQorCSAgZW11bGF0aW9uIG9mIHRoZXNlIGluc3RydWN0aW9ucyBmb3IgdXNlcnNwYWNlIHVzaW5nIExEWFIvU1RYUi4KKworCSAgSW4gc29tZSBvbGRlciB2ZXJzaW9ucyBvZiBnbGliYyBbPD0yLjhdIFNXUCBpcyB1c2VkIGR1cmluZyBmdXRleAorCSAgdHJ5bG9jaygpIG9wZXJhdGlvbnMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBjb2RlIHdpbGwgbm90CisJICBiZSBwcmVlbXB0ZWQuIFRoaXMgaW52YWxpZCBhc3N1bXB0aW9uIG1heSBiZSBtb3JlIGxpa2VseSB0byBmYWlsCisJICB3aXRoIFNXUCBlbXVsYXRpb24gZW5hYmxlZCwgbGVhZGluZyB0byBkZWFkbG9jayBvZiB0aGUgdXNlcgorCSAgYXBwbGljYXRpb24uCisKKwkgIE5PVEU6IHdoZW4gYWNjZXNzaW5nIHVuY2FjaGVkIHNoYXJlZCByZWdpb25zLCBMRFhSL1NUWFIgcmVseQorCSAgb24gYW4gZXh0ZXJuYWwgdHJhbnNhY3Rpb24gbW9uaXRvcmluZyBibG9jayBjYWxsZWQgYSBnbG9iYWwKKwkgIG1vbml0b3IgdG8gbWFpbnRhaW4gdXBkYXRlIGF0b21pY2l0eS4gSWYgeW91ciBzeXN0ZW0gZG9lcyBub3QKKwkgIGltcGxlbWVudCBhIGdsb2JhbCBtb25pdG9yLCB0aGlzIG9wdGlvbiBjYW4gY2F1c2UgcHJvZ3JhbXMgdGhhdAorCSAgcGVyZm9ybSBTV1Agb3BlcmF0aW9ucyB0byB1bmNhY2hlZCBtZW1vcnkgdG8gZGVhZGxvY2suCisKKwkgIElmIHVuc3VyZSwgc2F5IFkKKworY29uZmlnIENQMTVfQkFSUklFUl9FTVVMQVRJT04KKwlib29sICJFbXVsYXRlIENQMTUgQmFycmllciBpbnN0cnVjdGlvbnMiCisJaGVscAorCSAgVGhlIENQMTUgYmFycmllciBpbnN0cnVjdGlvbnMgLSBDUDE1SVNCLCBDUDE1RFNCLCBhbmQKKwkgIENQMTVETUIgLSBhcmUgZGVwcmVjYXRlZCBpbiBBUk12OCAoYW5kIEFSTXY3KS4gSXQgaXMKKwkgIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgSVNCLCBEU0IsIGFuZCBETUIKKwkgIGluc3RydWN0aW9ucyBpbnN0ZWFkLgorCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgdGhlc2UKKwkgIGluc3RydWN0aW9ucyBmb3IgQUFyY2gzMiB1c2Vyc3BhY2UgY29kZS4gV2hlbiB0aGlzIG9wdGlvbiBpcworCSAgZW5hYmxlZCwgQ1AxNSBiYXJyaWVyIHVzYWdlIGlzIHRyYWNlZCB3aGljaCBjYW4gaGVscAorCSAgaWRlbnRpZnkgc29mdHdhcmUgdGhhdCBuZWVkcyB1cGRhdGluZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWQorCitlbmRpZgorCiBlbmRtZW51CiAKIG1lbnUgIkJvb3Qgb3B0aW9ucyIKQEAgLTQwMSw2ICs1NzksMTcgQEAKIAkgIGFsbG93IHRoZSBrZXJuZWwgdG8gYmUgYm9vdGVkIGFzIGFuIEVGSSBhcHBsaWNhdGlvbi4gVGhpcwogCSAgaXMgb25seSB1c2VmdWwgb24gc3lzdGVtcyB0aGF0IGhhdmUgVUVGSSBmaXJtd2FyZS4KIAorY29uZmlnIERNSQorCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBTTUJJT1MgKERNSSkgdGFibGVzIgorCWRlcGVuZHMgb24gRUZJCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBlbmFibGVzIFNNQklPUy9ETUkgZmVhdHVyZSBmb3Igc3lzdGVtcy4KKworCSAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgb24gc3lzdGVtcyB0aGF0IGhhdmUgVUVGSSBmaXJtd2FyZS4KKwkgIEhvd2V2ZXIsIGV2ZW4gd2l0aCB0aGlzIG9wdGlvbiwgdGhlIHJlc3VsdGFudCBrZXJuZWwgc2hvdWxkCisJICBjb250aW51ZSB0byBib290IG9uIGV4aXN0aW5nIG5vbi1VRUZJIHBsYXRmb3Jtcy4KKwogZW5kbWVudQogCiBtZW51ICJVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMiCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcuZGVidWcgYi9hcmNoL2FybTY0L0tjb25maWcuZGVidWcKaW5kZXggMGExMjkzMy4uNWZkZDZkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZy5kZWJ1ZwpAQCAtNiw2ICs2LDE4IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgQVJNNjRfUFREVU1QCisJYm9vbCAiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmcyIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCXNlbGVjdCBERUJVR19GUworICAgICAgICBoZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHNob3cgdGhlIGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IGluIGEKKwkgIGRlYnVnZnMgZmlsZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldmVsb3BlcnMKKwkgIHdobyBhcmUgd29ya2luZyBpbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYXJlYXMgb2YgdGhlIGtlcm5lbC4KKwkgIEl0IGlzIHByb2JhYmx5IG5vdCBhIGdvb2QgaWRlYSB0byBlbmFibGUgdGhpcyBmZWF0dXJlIGluIGEgcHJvZHVjdGlvbgorCSAga2VybmVsLgorCSAgSWYgaW4gZG91YnQsIHNheSAiTiIKKwogY29uZmlnIFNUUklDVF9ERVZNRU0KIAlib29sICJGaWx0ZXIgYWNjZXNzIHRvIC9kZXYvbWVtIgogCWRlcGVuZHMgb24gTU1VCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L01ha2VmaWxlIGIvYXJjaC9hcm02NC9NYWtlZmlsZQppbmRleCAyMDkwMWZmLi4xYzQzY2VjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtNjQvTWFrZWZpbGUKQEAgLTcwLDggKzcwLDEzIEBACiAlLmR0Yjogc2NyaXB0cwogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkvZHRzICQoYm9vdCkvZHRzLyRACiAKLWR0YnM6IHNjcmlwdHMKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpL2R0cyBkdGJzCitQSE9OWSArPSBkdGJzIGR0YnNfaW5zdGFsbAorCitkdGJzOiBwcmVwYXJlIHNjcmlwdHMKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpL2R0cworCitkdGJzX2luc3RhbGw6CisJJChRKSQoTUFLRSkgJChkdGJpbnN0KT0kKGJvb3QpL2R0cwogCiBQSE9OWSArPSB2ZHNvX2luc3RhbGwKIHZkc29faW5zdGFsbDoKQEAgLTg1LDYgKzkwLDcgQEAKICAgZWNobyAgJyogSW1hZ2UuZ3ogICAgICAtIENvbXByZXNzZWQga2VybmVsIGltYWdlIChhcmNoLyQoQVJDSCkvYm9vdC9JbWFnZS5neiknCiAgIGVjaG8gICcgIEltYWdlICAgICAgICAgLSBVbmNvbXByZXNzZWQga2VybmVsIGltYWdlIChhcmNoLyQoQVJDSCkvYm9vdC9JbWFnZSknCiAgIGVjaG8gICcqIGR0YnMgICAgICAgICAgLSBCdWlsZCBkZXZpY2UgdHJlZSBibG9icyBmb3IgZW5hYmxlZCBib2FyZHMnCisgIGVjaG8gICcgIGR0YnNfaW5zdGFsbCAgLSBJbnN0YWxsIGR0YnMgdG8gJChJTlNUQUxMX0RUQlNfUEFUSCknCiAgIGVjaG8gICcgIGluc3RhbGwgICAgICAgLSBJbnN0YWxsIHVuY29tcHJlc3NlZCBrZXJuZWwnCiAgIGVjaG8gICcgIHppbnN0YWxsICAgICAgLSBJbnN0YWxsIGNvbXByZXNzZWQga2VybmVsJwogICBlY2hvICAnICAgICAgICAgICAgICAgICAgSW5zdGFsbCB1c2luZyAoeW91cikgfi9iaW4vaW5zdGFsbGtlcm5lbCBvcicKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvTWFrZWZpbGUgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL01ha2VmaWxlCmluZGV4IGY4MDAxYTYuLjNiOGQ0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9NYWtlZmlsZQpAQCAtMSwxMCArMSw4IEBACi1kdGItJChDT05GSUdfQVJDSF9USFVOREVSKSArPSB0aHVuZGVyLTg4eHguZHRiCi1kdGItJChDT05GSUdfQVJDSF9WRVhQUkVTUykgKz0gcnRzbV92ZS1hZW12OGEuZHRiIGZvdW5kYXRpb24tdjguZHRiCi1kdGItJChDT05GSUdfQVJDSF9YR0VORSkgKz0gYXBtLW11c3RhbmcuZHRiCitkdHMtZGlycyArPSBhbWQKK2R0cy1kaXJzICs9IGFwbQorZHRzLWRpcnMgKz0gYXJtCitkdHMtZGlycyArPSBjYXZpdW0KIAotdGFyZ2V0cyArPSBkdGJzCi10YXJnZXRzICs9ICQoZHRiLXkpCi0KLWR0YnM6ICQoYWRkcHJlZml4ICQob2JqKS8sICQoZHRiLXkpKQotCi1jbGVhbi1maWxlcyA6PSAqLmR0YgorYWx3YXlzCQk6PSAkKGR0Yi15KQorc3ViZGlyLXkJOj0gJChkdHMtZGlycykKK2NsZWFuLWZpbGVzCTo9ICouZHRiCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZGY3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK2R0Yi0kKENPTkZJR19BUkNIX1NFQVRUTEUpICs9IGFtZC1vdmVyZHJpdmUuZHRiCisKK2Fsd2F5cwkJOj0gJChkdGIteSkKK3N1YmRpci15CTo9ICQoZHRzLWRpcnMpCitjbGVhbi1maWxlcwk6PSAqLmR0YgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvYW1kLW92ZXJkcml2ZS5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9hbWQtb3ZlcmRyaXZlLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjRhM2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvYW1kLW92ZXJkcml2ZS5kdHMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIERUUyBmaWxlIGZvciBBTUQgU2VhdHRsZSBPdmVyZHJpdmUgRGV2ZWxvcG1lbnQgQm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICovCisKKy9kdHMtdjEvOworCisvaW5jbHVkZS8gImFtZC1zZWF0dGxlLXNvYy5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJBTUQgU2VhdHRsZSBEZXZlbG9wbWVudCBCb2FyZCAoT3ZlcmRyaXZlKSI7CisJY29tcGF0aWJsZSA9ICJhbWQsc2VhdHRsZS1vdmVyZHJpdmUiLCAiYW1kLHNlYXR0bGUiOworCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmc2VyaWFsMDsKKwkJbGludXgscGNpLXByb2JlLW9ubHk7CisJfTsKK307CisKKyZjY3AwIHsKKwlzdGF0dXMgPSAib2siOworfTsKKworJmdwaW8wIHsKKwlzdGF0dXMgPSAib2siOworfTsKKworJmdwaW8xIHsKKwlzdGF0dXMgPSAib2siOworfTsKKworJmkyYzAgeworCXN0YXR1cyA9ICJvayI7Cit9OworCismcGNpZTAgeworCXN0YXR1cyA9ICJvayI7Cit9OworCismc3BpMCB7CisJc3RhdHVzID0gIm9rIjsKK307CisKKyZzcGkxIHsKKwlzdGF0dXMgPSAib2siOworCXNkY2FyZDA6IHNkY2FyZEAwIHsKKwkJY29tcGF0aWJsZSA9ICJtbWMtc3BpLXNsb3QiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDIwMDAwMDAwPjsKKwkJdm9sdGFnZS1yYW5nZXMgPSA8MzIwMCAzNDAwPjsKKwkJZ3Bpb3MgPSA8JmdwaW8wIDcgMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8wPjsKKwkJaW50ZXJydXB0cyA9IDw3IDM+OworCQlwbDAyMixoaWVyYXJjaHkgPSA8MD47CisJCXBsMDIyLGludGVyZmFjZSA9IDwwPjsKKwkJcGwwMjIsY29tLW1vZGUgPSA8MHgwPjsKKwkJcGwwMjIscngtbGV2ZWwtdHJpZyA9IDwwPjsKKwkJcGwwMjIsdHgtbGV2ZWwtdHJpZyA9IDwwPjsKKwl9OworfTsKKworJnYybTAgeworCWFybSxtc2ktYmFzZS1zcGkgPSA8NjQ+OworCWFybSxtc2ktbnVtLXNwaXMgPSA8MjU2PjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9hbWQtc2VhdHRsZS1jbGtzLmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9hbWQtc2VhdHRsZS1jbGtzLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyM2M0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL2FtZC1zZWF0dGxlLWNsa3MuZHRzaQpAQCAtMCwwICsxLDU0IEBACisvKgorICogRFRTIGZpbGUgZm9yIEFNRCBTZWF0dGxlIENsb2NrcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKi8KKworCWFkbDNjbGtfMTAwbWh6OiBjbGsxMDBtaHpfMCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYWRsM2Nsa18xMDBtaHoiOworCX07CisKKwljY3BjbGtfMzc1bWh6OiBjbGszNzVtaHogeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8Mzc1MDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNjcGNsa18zNzVtaHoiOworCX07CisKKwlzYXRhY2xrXzMzM21oejogY2xrMzMzbWh6IHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJzYXRhY2xrXzMzM21oeiI7CisJfTsKKworCXBjaWVjbGtfNTAwbWh6OiBjbGs1MDBtaHpfMCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAicGNpZWNsa181MDBtaHoiOworCX07CisKKwlkbWFjbGtfNTAwbWh6OiBjbGs1MDBtaHpfMSB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiZG1hY2xrXzUwMG1oeiI7CisJfTsKKworCW1pc2NjbGtfMjUwbWh6OiBjbGsyNTBtaHpfNCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAibWlzY2Nsa18yNTBtaHoiOworCX07CisKKwl1YXJ0c3BpY2xrXzEwMG1oejogY2xrMTAwbWh6XzEgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gInVhcnRzcGljbGtfMTAwbWh6IjsKKwl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvYW1kLXNlYXR0bGUtc29jLmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9hbWQtc2VhdHRsZS1zb2MuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODc0ZDkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvYW1kLXNlYXR0bGUtc29jLmR0c2kKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBEVFMgZmlsZSBmb3IgQU1EIFNlYXR0bGUgU29DCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqLworCisvIHsKKwljb21wYXRpYmxlID0gImFtZCxzZWF0dGxlIjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWMwPjsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKKworCWdpYzA6IGludGVycnVwdC1jb250cm9sbGVyQGUxMTAxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sZ2ljLTQwMCIsICJhcm0sY29ydGV4LWExNS1naWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlyZWcgPSA8MHgwIDB4ZTExMTAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MHgwIDB4ZTExMmYwMDAgMCAweDIwMDA+LAorCQkgICAgICA8MHgwIDB4ZTExNDAwMDAgMCAweDEwMDAwPiwKKwkJICAgICAgPDB4MCAweGUxMTYwMDAwIDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPSA8MSA5IDB4ZjA0PjsKKwkJcmFuZ2VzID0gPDAgMCAwIDB4ZTExMDAwMDAgMCAweDEwMDAwMD47CisJCXYybTA6IHYybUBlMDA4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxnaWMtdjJtLWZyYW1lIjsKKwkJCW1zaS1jb250cm9sbGVyOworCQkJcmVnID0gPDB4MCAweDAwMDgwMDAwIDAgMHgxMDAwPjsKKwkJfTsKKwl9OworCisJdGltZXIgeworCQljb21wYXRpYmxlID0gImFybSxhcm12OC10aW1lciI7CisJCWludGVycnVwdHMgPSA8MSAxMyAweGZmMDQ+LAorCQkJICAgICA8MSAxNCAweGZmMDQ+LAorCQkJICAgICA8MSAxMSAweGZmMDQ+LAorCQkJICAgICA8MSAxMCAweGZmMDQ+OworCX07CisKKwlwbXUgeworCQljb21wYXRpYmxlID0gImFybSxhcm12OC1wbXV2MyI7CisJCWludGVycnVwdHMgPSA8MCA3IDQ+LAorCQkJICAgICA8MCA4IDQ+LAorCQkJICAgICA8MCA5IDQ+LAorCQkJICAgICA8MCAxMCA0PiwKKwkJCSAgICAgPDAgMTEgND4sCisJCQkgICAgIDwwIDEyIDQ+LAorCQkJICAgICA8MCAxMyA0PiwKKwkJCSAgICAgPDAgMTQgND47CisJfTsKKworCXNtYjA6IHNtYiB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCisJCS8qIEREUiByYW5nZSBpcyA0MC1iaXQgYWRkcmVzc2luZyAqLworCQlkbWEtcmFuZ2VzID0gPDB4ODAgMHgwIDB4ODAgMHgwIDB4N2YgMHhmZmZmZmZmZj47CisKKwkJL2luY2x1ZGUvICJhbWQtc2VhdHRsZS1jbGtzLmR0c2kiCisKKwkJc2F0YTA6IHNhdGFAZTAzMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3Yy1haGNpIjsKKwkJCXJlZyA9IDwwIDB4ZTAzMDAwMDAgMCAweDgwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzU1IDQ+OworCQkJY2xvY2tzID0gPCZzYXRhY2xrXzMzM21oej47CisJCQlkbWEtY29oZXJlbnQ7CisJCX07CisKKwkJaTJjMDogaTJjQGUxMDAwMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQljb21wYXRpYmxlID0gInNucHMsZGVzaWdud2FyZS1pMmMiOworCQkJcmVnID0gPDAgMHhlMTAwMDAwMCAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzU3IDQ+OworCQkJY2xvY2tzID0gPCZ1YXJ0c3BpY2xrXzEwMG1oej47CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQGUxMDEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDAgMHhlMTAxMDAwMCAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzI4IDQ+OworCQkJY2xvY2tzID0gPCZ1YXJ0c3BpY2xrXzEwMG1oej4sIDwmdWFydHNwaWNsa18xMDBtaHo+OworCQkJY2xvY2stbmFtZXMgPSAidWFydGNsayIsICJhcGJfcGNsayI7CisJCX07CisKKwkJc3BpMDogc3NwQGUxMDIwMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAyMiIsICJhcm0scHJpbWVjZWxsIjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJcmVnID0gPDAgMHhlMTAyMDAwMCAwIDB4MTAwMD47CisJCQlzcGktY29udHJvbGxlcjsKKwkJCWludGVycnVwdHMgPSA8MCAzMzAgND47CisJCQljbG9ja3MgPSA8JnVhcnRzcGljbGtfMTAwbWh6PjsKKwkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJfTsKKworCQlzcGkxOiBzc3BAZTEwMzAwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDIyIiwgImFybSxwcmltZWNlbGwiOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MCAweGUxMDMwMDAwIDAgMHgxMDAwPjsKKwkJCXNwaS1jb250cm9sbGVyOworCQkJaW50ZXJydXB0cyA9IDwwIDMyOSA0PjsKKwkJCWNsb2NrcyA9IDwmdWFydHNwaWNsa18xMDBtaHo+OworCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJbnVtLWNzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlncGlvMDogZ3Bpb0BlMTA0MDAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwwIDB4ZTEwNDAwMDAgMCAweDEwMDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJaW50ZXJydXB0cyA9IDwwIDM1OSA0PjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCWNsb2NrcyA9IDwmdWFydHNwaWNsa18xMDBtaHo+OworCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQl9OworCisJCWdwaW8xOiBncGlvQGUxMDUwMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJcmVnID0gPDAgMHhlMTA1MDAwMCAwIDB4MTAwMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlpbnRlcnJ1cHRzID0gPDAgMzU4IDQ+OworCQkJY2xvY2tzID0gPCZ1YXJ0c3BpY2xrXzEwMG1oej47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKwkJY2NwMDogY2NwQGUwMTAwMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQljb21wYXRpYmxlID0gImFtZCxjY3Atc2VhdHRsZS12MWEiOworCQkJcmVnID0gPDAgMHhlMDEwMDAwMCAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDMgND47CisJCQlkbWEtY29oZXJlbnQ7CisJCX07CisKKwkJcGNpZTA6IHBjaWVAZjAwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJwY2ktaG9zdC1lY2FtLWdlbmVyaWMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJYnVzLXJhbmdlID0gPDAgMHg3Zj47CisJCQltc2ktcGFyZW50ID0gPCZ2Mm0wPjsKKwkJCXJlZyA9IDwwIDB4ZjAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCQlpbnRlcnJ1cHQtbWFwID0KKwkJCQk8MHgxMDAwIDB4MCAweDAgMHgxICZnaWMwIDB4MCAweDAgMHgwIDB4MTIwIDB4MT4sCisJCQkJPDB4MTAwMCAweDAgMHgwIDB4MiAmZ2ljMCAweDAgMHgwIDB4MCAweDEyMSAweDE+LAorCQkJCTwweDEwMDAgMHgwIDB4MCAweDMgJmdpYzAgMHgwIDB4MCAweDAgMHgxMjIgMHgxPiwKKwkJCQk8MHgxMDAwIDB4MCAweDAgMHg0ICZnaWMwIDB4MCAweDAgMHgwIDB4MTIzIDB4MT47CisKKwkJCWRtYS1jb2hlcmVudDsKKwkJCWRtYS1yYW5nZXMgPSA8MHg0MzAwMDAwMCAweDgwIDB4MCAweDgwIDB4MCAweDdmIDB4ZmZmZmZmZmY+OworCQkJcmFuZ2VzID0KKwkJCQkvKiBJL08gTWVtb3J5IChzaXplPTY0SykgKi8KKwkJCQk8MHgwMTAwMDAwMCAweDAwIDB4MDAwMDAwMDAgMHgwMCAweGVmZmYwMDAwIDB4MDAgMHgwMDAxMDAwMD4sCisJCQkJLyogMzItYml0IE1NSU8gKHNpemU9MkcpICovCisJCQkJPDB4MDIwMDAwMDAgMHgwMCAweDQwMDAwMDAwIDB4MDAgMHg0MDAwMDAwMCAweDAwIDB4ODAwMDAwMDA+LAorCQkJCS8qIDY0LWJpdCBNTUlPIChzaXplPSAxMjRHKSAqLworCQkJCTwweDAzMDAwMDAwIDB4MDEgMHgwMDAwMDAwMCAweDAxIDB4MDAwMDAwMDAgMHg3ZiAweDAwMDAwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXBtL01ha2VmaWxlIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcG0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhZmFiYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXBtL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorZHRiLSQoQ09ORklHX0FSQ0hfWEdFTkUpICs9IGFwbS1tdXN0YW5nLmR0YgorCithbHdheXMJCTo9ICQoZHRiLXkpCitzdWJkaXIteQk6PSAkKGR0cy1kaXJzKQorY2xlYW4tZmlsZXMJOj0gKi5kdGIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXBtLW11c3RhbmcuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcG0vYXBtLW11c3RhbmcuZHRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS1tdXN0YW5nLmR0cwpyZW5hbWUgdG8gYXJjaC9hcm02NC9ib290L2R0cy9hcG0vYXBtLW11c3RhbmcuZHRzCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS1zdG9ybS5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcG0vYXBtLXN0b3JtLmR0c2kKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtNjQvYm9vdC9kdHMvYXBtLXN0b3JtLmR0c2kKcmVuYW1lIHRvIGFyY2gvYXJtNjQvYm9vdC9kdHMvYXBtL2FwbS1zdG9ybS5kdHNpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMWEwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKK2R0Yi0kKENPTkZJR19BUkNIX1ZFWFBSRVNTKSArPSBmb3VuZGF0aW9uLXY4LmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfVkVYUFJFU1MpICs9IGp1bm8uZHRiCitkdGItJChDT05GSUdfQVJDSF9WRVhQUkVTUykgKz0gcnRzbV92ZS1hZW12OGEuZHRiCisKK2Fsd2F5cwkJOj0gJChkdGIteSkKK3N1YmRpci15CTo9ICQoZHRzLWRpcnMpCitjbGVhbi1maWxlcwk6PSAqLmR0YgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9mb3VuZGF0aW9uLXY4LmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2ZvdW5kYXRpb24tdjguZHRzCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvYXJtNjQvYm9vdC9kdHMvZm91bmRhdGlvbi12OC5kdHMKcmVuYW1lIHRvIGFyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2ZvdW5kYXRpb24tdjguZHRzCmluZGV4IDRhMDYwOTAuLjI3ZjMyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvZm91bmRhdGlvbi12OC5kdHMKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vZm91bmRhdGlvbi12OC5kdHMKQEAgLTc4LDEwICs3OCwxMCBAQAogCiAJdGltZXIgewogCQljb21wYXRpYmxlID0gImFybSxhcm12OC10aW1lciI7Ci0JCWludGVycnVwdHMgPSA8MSAxMyAweGZmMDE+LAotCQkJICAgICA8MSAxNCAweGZmMDE+LAotCQkJICAgICA8MSAxMSAweGZmMDE+LAotCQkJICAgICA8MSAxMCAweGZmMDE+OworCQlpbnRlcnJ1cHRzID0gPDEgMTMgMHhmMDg+LAorCQkJICAgICA8MSAxNCAweGYwOD4sCisJCQkgICAgIDwxIDExIDB4ZjA4PiwKKwkJCSAgICAgPDEgMTAgMHhmMDg+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLWNsb2Nrcy5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby1jbG9ja3MuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTJiNTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby1jbG9ja3MuZHRzaQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQVJNIEp1bm8gUGxhdGZvcm0gY2xvY2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgQVJNIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBhIGR1YWwgR1BMdjIgb3IgQlNEIGxpY2Vuc2UuCisgKgorICovCisKKwkvKiBTb0MgZml4ZWQgY2xvY2tzICovCisJc29jX3VhcnRjbGs6IHJlZmNsazcyNzM4a2h6IHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDcyNzM4MDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAianVubzp1YXJ0Y2xrIjsKKwl9OworCisJc29jX3VzYjQ4bWh6OiBjbGs0OG1oeiB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGs0OG1oeiI7CisJfTsKKworCXNvY19zbWM1MG1oejogY2xrNTBtaHogeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic21jX2NsayI7CisJfTsKKworCXNvY19yZWZjbGsxMDBtaHo6IHJlZmNsazEwMG1oeiB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYXBiX3BjbGsiOworCX07CisKKwlzb2NfZmF4aWNsazogcmVmY2xrNTMzbWh6IHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDUzMzAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJmYXhpX2NsayI7CisJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2p1bm8tbW90aGVyYm9hcmQuZHRzaSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2p1bm8tbW90aGVyYm9hcmQuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTM4Yjk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby1tb3RoZXJib2FyZC5kdHNpCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQVJNIEp1bm8gUGxhdGZvcm0gbW90aGVyYm9hcmQgcGVyaXBoZXJhbHMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBBUk0gTHRkCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIGEgZHVhbCBHUEx2MiBvciBCU0QgbGljZW5zZS4KKyAqCisgKi8KKworCQltYl9jbGsyNG1oejogY2xrMjRtaHogeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjQwMDAwMDA+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImp1bm9fbWI6Y2xrMjRtaHoiOworCQl9OworCisJCW1iX2NsazI1bWh6OiBjbGsyNW1oeiB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAianVub19tYjpjbGsyNW1oeiI7CisJCX07CisKKwkJbW90aGVyYm9hcmQgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sdmV4cHJlc3MsdjJwLXAxIiwgInNpbXBsZS1idXMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47ICAvKiBTTUIgY2hpcHNlbGVjdCBudW1iZXIgYW5kIG9mZnNldCAqLworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJcmFuZ2VzOworCQkJbW9kZWwgPSAiVjJNLUp1bm8iOworCQkJYXJtLGhiaSA9IDwweDI1Mj47CisJCQlhcm0sdmV4cHJlc3Msc2l0ZSA9IDwwPjsKKwkJCWFybSx2Mm0tbWVtb3J5LW1hcCA9ICJyczEiOworCisJCQltYl9maXhlZF8zdjM6IGZpeGVkcmVndWxhdG9yQDAgeworCQkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJNQ0NfU0JfM1YzIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJZXRoZXJuZXRAMiwwMDAwMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkxMTgiLCAic21zYyxsYW45MTE1IjsKKwkJCQlyZWcgPSA8MiAweDAwMDAwMDAwIDB4MTAwMDA+OworCQkJCWludGVycnVwdHMgPSA8Mz47CisJCQkJcGh5LW1vZGUgPSAibWlpIjsKKwkJCQlyZWctaW8td2lkdGggPSA8ND47CisJCQkJc21zYyxpcnEtYWN0aXZlLWhpZ2g7CisJCQkJc21zYyxpcnEtcHVzaC1wdWxsOworCQkJCWNsb2NrcyA9IDwmbWJfY2xrMjVtaHo+OworCQkJCXZkZDMzYS1zdXBwbHkgPSA8Jm1iX2ZpeGVkXzN2Mz47CisJCQkJdmRkdmFyaW8tc3VwcGx5ID0gPCZtYl9maXhlZF8zdjM+OworCQkJfTsKKworCQkJdXNiQDUsMDAwMDAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAibnhwLHVzYi1pc3AxNzYzIjsKKwkJCQlyZWcgPSA8NSAweDAwMDAwMDAwIDB4MjAwMDA+OworCQkJCWJ1cy13aWR0aCA9IDwxNj47CisJCQkJaW50ZXJydXB0cyA9IDw0PjsKKwkJCX07CisKKwkJCWlvZnBnYUAzLDAwMDAwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxhbWJhLWJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQlyYW5nZXMgPSA8MCAzIDAgMHgyMDAwMDA+OworCisJCQkJbW1jaUAwNTAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxwbDE4MCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MDUwMDAwIDB4MTAwMD47CisJCQkJCWludGVycnVwdHMgPSA8NT47CisJCQkJCS8qIGNkLWdwaW9zID0gPCZ2Mm1fbW1jX2dwaW9zIDAgMD47CisJCQkJCXdwLWdwaW9zID0gPCZ2Mm1fbW1jX2dwaW9zIDEgMD47ICovCisJCQkJCW1heC1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OworCQkJCQl2bW1jLXN1cHBseSA9IDwmbWJfZml4ZWRfM3YzPjsKKwkJCQkJY2xvY2tzID0gPCZtYl9jbGsyNG1oej4sIDwmc29jX3NtYzUwbWh6PjsKKwkJCQkJY2xvY2stbmFtZXMgPSAibWNsayIsICJhcGJfcGNsayI7CisJCQkJfTsKKworCQkJCWttaUAwNjAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxwbDA1MCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MDYwMDAwIDB4MTAwMD47CisJCQkJCWludGVycnVwdHMgPSA8OD47CisJCQkJCWNsb2NrcyA9IDwmbWJfY2xrMjRtaHo+LCA8JnNvY19zbWM1MG1oej47CisJCQkJCWNsb2NrLW5hbWVzID0gIktNSVJFRkNMSyIsICJhcGJfcGNsayI7CisJCQkJfTsKKworCQkJCWttaUAwNzAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxwbDA1MCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MDcwMDAwIDB4MTAwMD47CisJCQkJCWludGVycnVwdHMgPSA8OD47CisJCQkJCWNsb2NrcyA9IDwmbWJfY2xrMjRtaHo+LCA8JnNvY19zbWM1MG1oej47CisJCQkJCWNsb2NrLW5hbWVzID0gIktNSVJFRkNMSyIsICJhcGJfcGNsayI7CisJCQkJfTsKKworCQkJCXdkdEAwZjAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxzcDgwNSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MGYwMDAwIDB4MTAwMDA+OworCQkJCQlpbnRlcnJ1cHRzID0gPDc+OworCQkJCQljbG9ja3MgPSA8Jm1iX2NsazI0bWh6PiwgPCZzb2Nfc21jNTBtaHo+OworCQkJCQljbG9jay1uYW1lcyA9ICJ3ZG9nY2xrIiwgImFwYl9wY2xrIjsKKwkJCQl9OworCisJCQkJdjJtX3RpbWVyMDE6IHRpbWVyQDExMDAwMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXJtLHNwODA0IiwgImFybSxwcmltZWNlbGwiOworCQkJCQlyZWcgPSA8MHgxMTAwMDAgMHgxMDAwMD47CisJCQkJCWludGVycnVwdHMgPSA8OT47CisJCQkJCWNsb2NrcyA9IDwmbWJfY2xrMjRtaHo+LCA8JnNvY19zbWM1MG1oej47CisJCQkJCWNsb2NrLW5hbWVzID0gInRpbWNsa2VuMSIsICJhcGJfcGNsayI7CisJCQkJfTsKKworCQkJCXYybV90aW1lcjIzOiB0aW1lckAxMjAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxzcDgwNCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MTIwMDAwIDB4MTAwMDA+OworCQkJCQlpbnRlcnJ1cHRzID0gPDk+OworCQkJCQljbG9ja3MgPSA8Jm1iX2NsazI0bWh6PiwgPCZzb2Nfc21jNTBtaHo+OworCQkJCQljbG9jay1uYW1lcyA9ICJ0aW1jbGtlbjEiLCAiYXBiX3BjbGsiOworCQkJCX07CisKKwkJCQlydGNAMTcwMDAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMzEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJCXJlZyA9IDwweDE3MDAwMCAweDEwMDAwPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwwPjsKKwkJCQkJY2xvY2tzID0gPCZzb2Nfc21jNTBtaHo+OworCQkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJfTsKKwkJCX07CisJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2p1bm8uZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMzA3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIEFSTSBMdGQuIEp1bm8gUGxhdGZvcm0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBBUk0gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBhIGR1YWwgR1BMdjIgb3IgQlNEIGxpY2Vuc2UuCisgKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisKKy8geworCW1vZGVsID0gIkFSTSBKdW5vIGRldmVsb3BtZW50IGJvYXJkIChyMCkiOworCWNvbXBhdGlibGUgPSAiYXJtLGp1bm8iLCAiYXJtLHZleHByZXNzIjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmc29jX3VhcnQwOworCX07CisKKwljaG9zZW4geworCQlzdGRvdXQtcGF0aCA9ICZzb2NfdWFydDA7CisJfTsKKworCXBzY2kgeworCQljb21wYXRpYmxlID0gImFybSxwc2NpLTAuMiI7CisJCW1ldGhvZCA9ICJzbWMiOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCUE1N18wOiBjcHVAMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTU3IiwiYXJtLGFybXY4IjsKKwkJCXJlZyA9IDwweDAgMHgwPjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQl9OworCisJCUE1N18xOiBjcHVAMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTU3IiwiYXJtLGFybXY4IjsKKwkJCXJlZyA9IDwweDAgMHgxPjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQl9OworCisJCUE1M18wOiBjcHVAMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiLCJhcm0sYXJtdjgiOworCQkJcmVnID0gPDB4MCAweDEwMD47CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJfTsKKworCQlBNTNfMTogY3B1QDEwMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIiwiYXJtLGFybXY4IjsKKwkJCXJlZyA9IDwweDAgMHgxMDE+OworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCX07CisKKwkJQTUzXzI6IGNwdUAxMDIgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyIsImFybSxhcm12OCI7CisJCQlyZWcgPSA8MHgwIDB4MTAyPjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQl9OworCisJCUE1M18zOiBjcHVAMTAzIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiLCJhcm0sYXJtdjgiOworCQkJcmVnID0gPDB4MCAweDEwMz47CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJfTsKKwl9OworCisJbWVtb3J5QDgwMDAwMDAwIHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJLyogbGFzdCAxNk1CIG9mIHRoZSBmaXJzdCBtZW1vcnkgYXJlYSBpcyByZXNlcnZlZCBmb3Igc2VjdXJlIHdvcmxkIHVzZSBieSBmaXJtd2FyZSAqLworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDdmMDAwMDAwPiwKKwkJICAgICAgPDB4MDAwMDAwMDggMHg4MDAwMDAwMCAweDEgMHg4MDAwMDAwMD47CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMmMwMDEwMDAgeworCQljb21wYXRpYmxlID0gImFybSxnaWMtNDAwIiwgImFybSxjb3J0ZXgtYTE1LWdpYyI7CisJCXJlZyA9IDwweDAgMHgyYzAxMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwweDAgMHgyYzAyZjAwMCAwIDB4MjAwMD4sCisJCSAgICAgIDwweDAgMHgyYzA0ZjAwMCAwIDB4MjAwMD4sCisJCSAgICAgIDwweDAgMHgyYzA2ZjAwMCAwIDB4MjAwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDkgKEdJQ19DUFVfTUFTS19TSU1QTEUoNikgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKT47CisJfTsKKworCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtdGltZXIiOworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTMgKEdJQ19DUFVfTUFTS19TSU1QTEUoNikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPEdJQ19QUEkgMTQgKEdJQ19DUFVfTUFTS19TSU1QTEUoNikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPEdJQ19QUEkgMTEgKEdJQ19DUFVfTUFTS19TSU1QTEUoNikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCSAgICAgPEdJQ19QUEkgMTAgKEdJQ19DUFVfTUFTS19TSU1QTEUoNikgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPjsKKwl9OworCisJcG11IHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtcG11djMiOworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDIyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyNiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMzAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDAyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJL2luY2x1ZGUvICJqdW5vLWNsb2Nrcy5kdHNpIgorCisJZG1hQDdmZjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwzMzAiLCAiYXJtLHByaW1lY2VsbCI7CisJCXJlZyA9IDwweDAgMHg3ZmYwMDAwMCAwIDB4MTAwMD47CisJCSNkbWEtY2VsbHMgPSA8MT47CisJCSNkbWEtY2hhbm5lbHMgPSA8OD47CisJCSNkbWEtcmVxdWVzdHMgPSA8MzI+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDg5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSA5MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgOTEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMTA5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMTAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDExMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZzb2NfZmF4aWNsaz47CisJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwl9OworCisJc29jX3VhcnQwOiB1YXJ0QDdmZjgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwwMTEiLCAiYXJtLHByaW1lY2VsbCI7CisJCXJlZyA9IDwweDAgMHg3ZmY4MDAwMCAweDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDgzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnNvY191YXJ0Y2xrPiwgPCZzb2NfcmVmY2xrMTAwbWh6PjsKKwkJY2xvY2stbmFtZXMgPSAidWFydGNsayIsICJhcGJfcGNsayI7CisJfTsKKworCWkyY0A3ZmZhMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCXJlZyA9IDwweDAgMHg3ZmZhMDAwMCAweDAgMHgxMDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTA0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwkJaTJjLXNkYS1ob2xkLXRpbWUtbnMgPSA8NTAwPjsKKwkJY2xvY2tzID0gPCZzb2Nfc21jNTBtaHo+OworCisJCWR2aTA6IGR2aS10cmFuc21pdHRlckA3MCB7CisJCQljb21wYXRpYmxlID0gIm54cCx0ZGE5OTh4IjsKKwkJCXJlZyA9IDwweDcwPjsKKwkJfTsKKworCQlkdmkxOiBkdmktdHJhbnNtaXR0ZXJANzEgeworCQkJY29tcGF0aWJsZSA9ICJueHAsdGRhOTk4eCI7CisJCQlyZWcgPSA8MHg3MT47CisJCX07CisJfTsKKworCW9oY2lAN2ZmYjAwMDAgeworCQljb21wYXRpYmxlID0gImdlbmVyaWMtb2hjaSI7CisJCXJlZyA9IDwweDAgMHg3ZmZiMDAwMCAweDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmc29jX3VzYjQ4bWh6PjsKKwl9OworCisJZWhjaUA3ZmZjMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZ2VuZXJpYy1laGNpIjsKKwkJcmVnID0gPDB4MCAweDdmZmMwMDAwIDB4MCAweDEwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZzb2NfdXNiNDhtaHo+OworCX07CisKKwltZW1vcnktY29udHJvbGxlckA3ZmZkMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzU0IiwgImFybSxwcmltZWNlbGwiOworCQlyZWcgPSA8MCAweDdmZmQwMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSA4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZzb2Nfc21jNTBtaHo+OworCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJfTsKKworCXNtYiB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMCAwIDB4MDgwMDAwMDAgMHgwNDAwMDAwMD4sCisJCQkgPDEgMCAwIDB4MTQwMDAwMDAgMHgwNDAwMDAwMD4sCisJCQkgPDIgMCAwIDB4MTgwMDAwMDAgMHgwNDAwMDAwMD4sCisJCQkgPDMgMCAwIDB4MWMwMDAwMDAgMHgwNDAwMDAwMD4sCisJCQkgPDQgMCAwIDB4MGMwMDAwMDAgMHgwNDAwMDAwMD4sCisJCQkgPDUgMCAwIDB4MTAwMDAwMDAgMHgwNDAwMDAwMD47CisKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAxNT47CisJCWludGVycnVwdC1tYXAgPSA8MCAwICAwICZnaWMgMCAgNjggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAgMSAmZ2ljIDAgIDY5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgIDIgJmdpYyAwICA3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwICAzICZnaWMgMCAxNjAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAgNCAmZ2ljIDAgMTYxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgIDUgJmdpYyAwIDE2MiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwICA2ICZnaWMgMCAxNjMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAgNyAmZ2ljIDAgMTY0IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgIDggJmdpYyAwIDE2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwICA5ICZnaWMgMCAxNjYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAxMCAmZ2ljIDAgMTY3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgMTEgJmdpYyAwIDE2OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwIDEyICZnaWMgMCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJL2luY2x1ZGUvICJqdW5vLW1vdGhlcmJvYXJkLmR0c2kiCisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3J0c21fdmUtYWVtdjhhLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL3J0c21fdmUtYWVtdjhhLmR0cwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2Jvb3QvZHRzL3J0c21fdmUtYWVtdjhhLmR0cwpyZW5hbWUgdG8gYXJjaC9hcm02NC9ib290L2R0cy9hcm0vcnRzbV92ZS1hZW12OGEuZHRzCmluZGV4IDU3MjAwNWUuLmVmYzU5YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcnRzbV92ZS1hZW12OGEuZHRzCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL3J0c21fdmUtYWVtdjhhLmR0cwpAQCAtODEsMTAgKzgxLDEwIEBACiAKIAl0aW1lciB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY4LXRpbWVyIjsKLQkJaW50ZXJydXB0cyA9IDwxIDEzIDB4ZmYwMT4sCi0JCQkgICAgIDwxIDE0IDB4ZmYwMT4sCi0JCQkgICAgIDwxIDExIDB4ZmYwMT4sCi0JCQkgICAgIDwxIDEwIDB4ZmYwMT47CisJCWludGVycnVwdHMgPSA8MSAxMyAweGYwOD4sCisJCQkgICAgIDwxIDE0IDB4ZjA4PiwKKwkJCSAgICAgPDEgMTEgMHhmMDg+LAorCQkJICAgICA8MSAxMCAweGYwOD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcnRzbV92ZS1tb3RoZXJib2FyZC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vcnRzbV92ZS1tb3RoZXJib2FyZC5kdHNpCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2Jvb3QvZHRzL3J0c21fdmUtbW90aGVyYm9hcmQuZHRzaQpyZW5hbWUgdG8gYXJjaC9hcm02NC9ib290L2R0cy9hcm0vcnRzbV92ZS1tb3RoZXJib2FyZC5kdHNpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2Nhdml1bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvY2F2aXVtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGY4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2Nhdml1bS9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK2R0Yi0kKENPTkZJR19BUkNIX1RIVU5ERVIpICs9IHRodW5kZXItODh4eC5kdGIKKworYWx3YXlzCQk6PSAkKGR0Yi15KQorc3ViZGlyLXkJOj0gJChkdHMtZGlycykKK2NsZWFuLWZpbGVzCTo9ICouZHRiCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3RodW5kZXItODh4eC5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2Nhdml1bS90aHVuZGVyLTg4eHguZHRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2Jvb3QvZHRzL3RodW5kZXItODh4eC5kdHMKcmVuYW1lIHRvIGFyY2gvYXJtNjQvYm9vdC9kdHMvY2F2aXVtL3RodW5kZXItODh4eC5kdHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvdGh1bmRlci04OHh4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2Nhdml1bS90aHVuZGVyLTg4eHguZHRzaQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm02NC9ib290L2R0cy90aHVuZGVyLTg4eHguZHRzaQpyZW5hbWUgdG8gYXJjaC9hcm02NC9ib290L2R0cy9jYXZpdW0vdGh1bmRlci04OHh4LmR0c2kKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvaW5jbHVkZS9kdC1iaW5kaW5ncyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvaW5jbHVkZS9kdC1iaW5kaW5ncwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4wOGMwMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9pbmNsdWRlL2R0LWJpbmRpbmdzCkBAIC0wLDAgKzEgQEAKKy4uLy4uLy4uLy4uLy4uL2luY2x1ZGUvZHQtYmluZGluZ3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2NyeXB0by9LY29uZmlnIGIvYXJjaC9hcm02NC9jcnlwdG8vS2NvbmZpZwppbmRleCA1NTYyNjUyLi5hMzhiMDJjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2NyeXB0by9LY29uZmlnCisrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL0tjb25maWcKQEAgLTI3LDIwICsyNywxOSBAQAogCXRyaXN0YXRlICJBRVMgY29yZSBjaXBoZXIgdXNpbmcgQVJNdjggQ3J5cHRvIEV4dGVuc2lvbnMiCiAJZGVwZW5kcyBvbiBBUk02NCAmJiBLRVJORUxfTU9ERV9ORU9OCiAJc2VsZWN0IENSWVBUT19BTEdBUEkKLQlzZWxlY3QgQ1JZUFRPX0FFUwogCiBjb25maWcgQ1JZUFRPX0FFU19BUk02NF9DRV9DQ00KIAl0cmlzdGF0ZSAiQUVTIGluIENDTSBtb2RlIHVzaW5nIEFSTXY4IENyeXB0byBFeHRlbnNpb25zIgogCWRlcGVuZHMgb24gQVJNNjQgJiYgS0VSTkVMX01PREVfTkVPTgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCi0Jc2VsZWN0IENSWVBUT19BRVMKKwlzZWxlY3QgQ1JZUFRPX0FFU19BUk02NF9DRQogCXNlbGVjdCBDUllQVE9fQUVBRAogCiBjb25maWcgQ1JZUFRPX0FFU19BUk02NF9DRV9CTEsKIAl0cmlzdGF0ZSAiQUVTIGluIEVDQi9DQkMvQ1RSL1hUUyBtb2RlcyB1c2luZyBBUk12OCBDcnlwdG8gRXh0ZW5zaW9ucyIKIAlkZXBlbmRzIG9uIEFSTTY0ICYmIEtFUk5FTF9NT0RFX05FT04KIAlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgotCXNlbGVjdCBDUllQVE9fQUVTCisJc2VsZWN0IENSWVBUT19BRVNfQVJNNjRfQ0UKIAlzZWxlY3QgQ1JZUFRPX0FCTEtfSEVMUEVSCiAKIGNvbmZpZyBDUllQVE9fQUVTX0FSTTY0X05FT05fQkxLCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2UtY2NtLWdsdWUuYyBiL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1jY20tZ2x1ZS5jCmluZGV4IDllNmNkZGU5Li4wYWM3M2I4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2UtY2NtLWdsdWUuYworKysgYi9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2UtY2NtLWdsdWUuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCisjaW5jbHVkZSAiYWVzLWNlLXNldGtleS5oIgorCiBzdGF0aWMgaW50IG51bV9yb3VuZHMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgpCiB7CiAJLyoKQEAgLTQ4LDcgKzUwLDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eCh0Zm0pOwogCWludCByZXQ7CiAKLQlyZXQgPSBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoY3R4LCBpbl9rZXksIGtleV9sZW4pOworCXJldCA9IGNlX2Flc19leHBhbmRrZXkoY3R4LCBpbl9rZXksIGtleV9sZW4pOwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLWNpcGhlci5jIGIvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLWNpcGhlci5jCmluZGV4IDIwNzVlMWEuLmNlNDc3OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1jaXBoZXIuYworKysgYi9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2UtY2lwaGVyLmMKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAorI2luY2x1ZGUgImFlcy1jZS1zZXRrZXkuaCIKKwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTeW5jaHJvbm91cyBBRVMgY2lwaGVyIHVzaW5nIEFSTXY4IENyeXB0byBFeHRlbnNpb25zIik7CiBNT0RVTEVfQVVUSE9SKCJBcmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKQEAgLTEyNCw2ICsxMjYsMTE0IEBACiAJa2VybmVsX25lb25fZW5kKCk7CiB9CiAKKy8qCisgKiBhZXNfc3ViKCkgLSB1c2UgdGhlIGFlc2UgaW5zdHJ1Y3Rpb24gdG8gcGVyZm9ybSB0aGUgQUVTIHNib3ggc3Vic3RpdHV0aW9uCisgKiAgICAgICAgICAgICBvbiBlYWNoIGJ5dGUgaW4gJ2lucHV0JworICovCitzdGF0aWMgdTMyIGFlc19zdWIodTMyIGlucHV0KQoreworCXUzMiByZXQ7CisKKwlfX2FzbV9fKCJkdXAJdjEuNHMsICV3W2luXQkJOyIKKwkJIm1vdmkJdjAuMTZiLCAjMAkJOyIKKwkJImFlc2UJdjAuMTZiLCB2MS4xNmIJCTsiCisJCSJ1bW92CSV3W291dF0sIHYwLjRzWzBdCTsiCisKKwk6CVtvdXRdCSI9ciIocmV0KQorCToJW2luXQkiciIoaW5wdXQpCisJOgkJInYwIiwidjEiKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZV9hZXNfZXhwYW5ka2V5KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqaW5fa2V5LAorCQkgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCS8qCisJICogVGhlIEFFUyBrZXkgc2NoZWR1bGUgcm91bmQgY29uc3RhbnRzCisJICovCisJc3RhdGljIHU4IGNvbnN0IHJjb25bXSA9IHsKKwkJMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwKKwl9OworCisJdTMyIGt3b3JkcyA9IGtleV9sZW4gLyBzaXplb2YodTMyKTsKKwlzdHJ1Y3QgYWVzX2Jsb2NrICprZXlfZW5jLCAqa2V5X2RlYzsKKwlpbnQgaSwgajsKKworCWlmIChrZXlfbGVuICE9IEFFU19LRVlTSVpFXzEyOCAmJgorCSAgICBrZXlfbGVuICE9IEFFU19LRVlTSVpFXzE5MiAmJgorCSAgICBrZXlfbGVuICE9IEFFU19LRVlTSVpFXzI1NikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoY3R4LT5rZXlfZW5jLCBpbl9rZXksIGtleV9sZW4pOworCWN0eC0+a2V5X2xlbmd0aCA9IGtleV9sZW47CisKKwlrZXJuZWxfbmVvbl9iZWdpbl9wYXJ0aWFsKDIpOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocmNvbik7IGkrKykgeworCQl1MzIgKnJraSA9IGN0eC0+a2V5X2VuYyArIChpICoga3dvcmRzKTsKKwkJdTMyICpya28gPSBya2kgKyBrd29yZHM7CisKKwkJcmtvWzBdID0gcm9yMzIoYWVzX3N1Yihya2lba3dvcmRzIC0gMV0pLCA4KSBeIHJjb25baV0gXiBya2lbMF07CisJCXJrb1sxXSA9IHJrb1swXSBeIHJraVsxXTsKKwkJcmtvWzJdID0gcmtvWzFdIF4gcmtpWzJdOworCQlya29bM10gPSBya29bMl0gXiBya2lbM107CisKKwkJaWYgKGtleV9sZW4gPT0gQUVTX0tFWVNJWkVfMTkyKSB7CisJCQlpZiAoaSA+PSA3KQorCQkJCWJyZWFrOworCQkJcmtvWzRdID0gcmtvWzNdIF4gcmtpWzRdOworCQkJcmtvWzVdID0gcmtvWzRdIF4gcmtpWzVdOworCQl9IGVsc2UgaWYgKGtleV9sZW4gPT0gQUVTX0tFWVNJWkVfMjU2KSB7CisJCQlpZiAoaSA+PSA2KQorCQkJCWJyZWFrOworCQkJcmtvWzRdID0gYWVzX3N1Yihya29bM10pIF4gcmtpWzRdOworCQkJcmtvWzVdID0gcmtvWzRdIF4gcmtpWzVdOworCQkJcmtvWzZdID0gcmtvWzVdIF4gcmtpWzZdOworCQkJcmtvWzddID0gcmtvWzZdIF4gcmtpWzddOworCQl9CisJfQorCisJLyoKKwkgKiBHZW5lcmF0ZSB0aGUgZGVjcnlwdGlvbiBrZXlzIGZvciB0aGUgRXF1aXZhbGVudCBJbnZlcnNlIENpcGhlci4KKwkgKiBUaGlzIGludm9sdmVzIHJldmVyc2luZyB0aGUgb3JkZXIgb2YgdGhlIHJvdW5kIGtleXMsIGFuZCBhcHBseWluZworCSAqIHRoZSBJbnZlcnNlIE1peCBDb2x1bW5zIHRyYW5zZm9ybWF0aW9uIG9uIGFsbCBidXQgdGhlIGZpcnN0IGFuZAorCSAqIHRoZSBsYXN0IG9uZS4KKwkgKi8KKwlrZXlfZW5jID0gKHN0cnVjdCBhZXNfYmxvY2sgKiljdHgtPmtleV9lbmM7CisJa2V5X2RlYyA9IChzdHJ1Y3QgYWVzX2Jsb2NrICopY3R4LT5rZXlfZGVjOworCWogPSBudW1fcm91bmRzKGN0eCk7CisKKwlrZXlfZGVjWzBdID0ga2V5X2VuY1tqXTsKKwlmb3IgKGkgPSAxLCBqLS07IGogPiAwOyBpKyssIGotLSkKKwkJX19hc21fXygibGQxCXt2MC4xNmJ9LCAlW2luXQkJOyIKKwkJCSJhZXNpbWMJdjEuMTZiLCB2MC4xNmIJCTsiCisJCQkic3QxCXt2MS4xNmJ9LCAlW291dF0JOyIKKworCQk6CVtvdXRdCSI9USIoa2V5X2RlY1tpXSkKKwkJOglbaW5dCSJRIihrZXlfZW5jW2pdKQorCQk6CQkidjAiLCJ2MSIpOworCWtleV9kZWNbaV0gPSBrZXlfZW5jWzBdOworCisJa2VybmVsX25lb25fZW5kKCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNlX2Flc19leHBhbmRrZXkpOworCitpbnQgY2VfYWVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LAorCQkgIHVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2VfYWVzX2V4cGFuZGtleShjdHgsIGluX2tleSwga2V5X2xlbik7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJdGZtLT5jcnRfZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MKGNlX2Flc19zZXRrZXkpOworCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzX2FsZyA9IHsKIAkuY3JhX25hbWUJCT0gImFlcyIsCiAJLmNyYV9kcml2ZXJfbmFtZQk9ICJhZXMtY2UiLApAQCAtMTM1LDcgKzI0NSw3IEBACiAJLmNyYV9jaXBoZXIgPSB7CiAJCS5jaWFfbWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAogCQkuY2lhX21heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKLQkJLmNpYV9zZXRrZXkJCT0gY3J5cHRvX2Flc19zZXRfa2V5LAorCQkuY2lhX3NldGtleQkJPSBjZV9hZXNfc2V0a2V5LAogCQkuY2lhX2VuY3J5cHQJCT0gYWVzX2NpcGhlcl9lbmNyeXB0LAogCQkuY2lhX2RlY3J5cHQJCT0gYWVzX2NpcGhlcl9kZWNyeXB0CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLXNldGtleS5oIGIvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLXNldGtleS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOGE2NDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2Utc2V0a2V5LmgKQEAgLTAsMCArMSw1IEBACisKK2ludCBjZV9hZXNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCisJCSAgdW5zaWduZWQgaW50IGtleV9sZW4pOworaW50IGNlX2Flc19leHBhbmRrZXkoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksCisJCSAgICAgdW5zaWduZWQgaW50IGtleV9sZW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWdsdWUuYyBiL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1nbHVlLmMKaW5kZXggNzljZDkxMS4uODAxYWFlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWdsdWUuYworKysgYi9hcmNoL2FybTY0L2NyeXB0by9hZXMtZ2x1ZS5jCkBAIC0xNiw5ICsxNiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZlYXR1cmUuaD4KIAorI2luY2x1ZGUgImFlcy1jZS1zZXRrZXkuaCIKKwogI2lmZGVmIFVTRV9WOF9DUllQVE9fRVhURU5TSU9OUwogI2RlZmluZSBNT0RFCQkJImNlIgogI2RlZmluZSBQUklPCQkJMzAwCisjZGVmaW5lIGFlc19zZXRrZXkJCWNlX2Flc19zZXRrZXkKKyNkZWZpbmUgYWVzX2V4cGFuZGtleQkJY2VfYWVzX2V4cGFuZGtleQogI2RlZmluZSBhZXNfZWNiX2VuY3J5cHQJCWNlX2Flc19lY2JfZW5jcnlwdAogI2RlZmluZSBhZXNfZWNiX2RlY3J5cHQJCWNlX2Flc19lY2JfZGVjcnlwdAogI2RlZmluZSBhZXNfY2JjX2VuY3J5cHQJCWNlX2Flc19jYmNfZW5jcnlwdApAQCAtMzAsNiArMzQsOCBAQAogI2Vsc2UKICNkZWZpbmUgTU9ERQkJCSJuZW9uIgogI2RlZmluZSBQUklPCQkJMjAwCisjZGVmaW5lIGFlc19zZXRrZXkJCWNyeXB0b19hZXNfc2V0X2tleQorI2RlZmluZSBhZXNfZXhwYW5ka2V5CQljcnlwdG9fYWVzX2V4cGFuZF9rZXkKICNkZWZpbmUgYWVzX2VjYl9lbmNyeXB0CQluZW9uX2Flc19lY2JfZW5jcnlwdAogI2RlZmluZSBhZXNfZWNiX2RlY3J5cHQJCW5lb25fYWVzX2VjYl9kZWNyeXB0CiAjZGVmaW5lIGFlc19jYmNfZW5jcnlwdAkJbmVvbl9hZXNfY2JjX2VuY3J5cHQKQEAgLTc5LDEwICs4NSwxMCBAQAogCXN0cnVjdCBjcnlwdG9fYWVzX3h0c19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJaW50IHJldDsKIAotCXJldCA9IGNyeXB0b19hZXNfZXhwYW5kX2tleSgmY3R4LT5rZXkxLCBpbl9rZXksIGtleV9sZW4gLyAyKTsKKwlyZXQgPSBhZXNfZXhwYW5ka2V5KCZjdHgtPmtleTEsIGluX2tleSwga2V5X2xlbiAvIDIpOwogCWlmICghcmV0KQotCQlyZXQgPSBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoJmN0eC0+a2V5MiwgJmluX2tleVtrZXlfbGVuIC8gMl0sCi0JCQkJCSAgICBrZXlfbGVuIC8gMik7CisJCXJldCA9IGFlc19leHBhbmRrZXkoJmN0eC0+a2V5MiwgJmluX2tleVtrZXlfbGVuIC8gMl0sCisJCQkJICAgIGtleV9sZW4gLyAyKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKQEAgLTI4OCw3ICsyOTQsNyBAQAogCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAogCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAogCQkuaXZzaXplCQk9IEFFU19CTE9DS19TSVpFLAotCQkuc2V0a2V5CQk9IGNyeXB0b19hZXNfc2V0X2tleSwKKwkJLnNldGtleQkJPSBhZXNfc2V0a2V5LAogCQkuZW5jcnlwdAk9IGVjYl9lbmNyeXB0LAogCQkuZGVjcnlwdAk9IGVjYl9kZWNyeXB0LAogCX0sCkBAIC0zMDYsNyArMzEyLDcgQEAKIAkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKIAkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKIAkJLml2c2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKLQkJLnNldGtleQkJPSBjcnlwdG9fYWVzX3NldF9rZXksCisJCS5zZXRrZXkJCT0gYWVzX3NldGtleSwKIAkJLmVuY3J5cHQJPSBjYmNfZW5jcnlwdCwKIAkJLmRlY3J5cHQJPSBjYmNfZGVjcnlwdCwKIAl9LApAQCAtMzI0LDcgKzMzMCw3IEBACiAJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCiAJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCiAJCS5pdnNpemUJCT0gQUVTX0JMT0NLX1NJWkUsCi0JCS5zZXRrZXkJCT0gY3J5cHRvX2Flc19zZXRfa2V5LAorCQkuc2V0a2V5CQk9IGFlc19zZXRrZXksCiAJCS5lbmNyeXB0CT0gY3RyX2VuY3J5cHQsCiAJCS5kZWNyeXB0CT0gY3RyX2VuY3J5cHQsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUtYXNtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLWFzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOWE2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLWFzbS5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX19BU01fQUxURVJOQVRJVkVfQVNNX0gKKyNkZWZpbmUgX19BU01fQUxURVJOQVRJVkVfQVNNX0gKKworI2lmZGVmIF9fQVNTRU1CTFlfXworCisubWFjcm8gYWx0aW5zdHJ1Y3Rpb25fZW50cnkgb3JpZ19vZmZzZXQgYWx0X29mZnNldCBmZWF0dXJlIG9yaWdfbGVuIGFsdF9sZW4KKwkud29yZCBcb3JpZ19vZmZzZXQgLSAuCisJLndvcmQgXGFsdF9vZmZzZXQgLSAuCisJLmh3b3JkIFxmZWF0dXJlCisJLmJ5dGUgXG9yaWdfbGVuCisJLmJ5dGUgXGFsdF9sZW4KKy5lbmRtCisKKy5tYWNybyBhbHRlcm5hdGl2ZV9pbnNuIGluc24xIGluc24yIGNhcAorNjYxOglcaW5zbjEKKzY2MjoJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgorCWFsdGluc3RydWN0aW9uX2VudHJ5IDY2MWIsIDY2M2YsIFxjYXAsIDY2MmItNjYxYiwgNjY0Zi02NjNmCisJLnBvcHNlY3Rpb24KKwkucHVzaHNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiCis2NjM6CVxpbnNuMgorNjY0OgkucG9wc2VjdGlvbgorCS5pZiAoKDY2NGItNjYzYikgIT0gKDY2MmItNjYxYikpCisJCS5lcnJvciAiQWx0ZXJuYXRpdmVzIGluc3RydWN0aW9uIGxlbmd0aCBtaXNtYXRjaCIKKwkuZW5kaWYKKy5lbmRtCisKKyNlbmRpZiAgLyogIF9fQVNTRU1CTFlfXyAgKi8KKworI2VuZGlmIC8qIF9fQVNNX0FMVEVSTkFUSVZFX0FTTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI2MWYwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9fQVNNX0FMVEVSTkFUSVZFX0gKKyNkZWZpbmUgX19BU01fQUxURVJOQVRJVkVfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworc3RydWN0IGFsdF9pbnN0ciB7CisJczMyIG9yaWdfb2Zmc2V0OwkvKiBvZmZzZXQgdG8gb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KKwlzMzIgYWx0X29mZnNldDsJCS8qIG9mZnNldCB0byByZXBsYWNlbWVudCBpbnN0cnVjdGlvbiAqLworCXUxNiBjcHVmZWF0dXJlOwkJLyogY3B1ZmVhdHVyZSBiaXQgc2V0IGZvciByZXBsYWNlbWVudCAqLworCXU4ICBvcmlnX2xlbjsJCS8qIHNpemUgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24ocykgKi8KKwl1OCAgYWx0X2xlbjsJCS8qIHNpemUgb2YgbmV3IGluc3RydWN0aW9uKHMpLCA8PSBvcmlnX2xlbiAqLworfTsKKwordm9pZCBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsKHZvaWQpOwordm9pZCBhcHBseV9hbHRlcm5hdGl2ZXModm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpOwordm9pZCBmcmVlX2FsdGVybmF0aXZlc19tZW1vcnkodm9pZCk7CisKKyNkZWZpbmUgQUxUSU5TVFJfRU5UUlkoZmVhdHVyZSkJCQkJCQkgICAgICBcCisJIiAud29yZCA2NjFiIC0gLlxuIgkJCQkvKiBsYWJlbCAgICAgICAgICAgKi8gXAorCSIgLndvcmQgNjYzZiAtIC5cbiIJCQkJLyogbmV3IGluc3RydWN0aW9uICovIFwKKwkiIC5od29yZCAiIF9fc3RyaW5naWZ5KGZlYXR1cmUpICJcbiIJCS8qIGZlYXR1cmUgYml0ICAgICAqLyBcCisJIiAuYnl0ZSA2NjJiLTY2MWJcbiIJCQkJLyogc291cmNlIGxlbiAgICAgICovIFwKKwkiIC5ieXRlIDY2NGYtNjYzZlxuIgkJCQkvKiByZXBsYWNlbWVudCBsZW4gKi8KKworLyogYWx0ZXJuYXRpdmUgYXNzZW1ibHkgcHJpbWl0aXZlOiAqLworI2RlZmluZSBBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUpCQkJXAorCSI2NjE6XG5cdCIJCQkJCQkJXAorCW9sZGluc3RyICJcbiIJCQkJCQkJXAorCSI2NjI6XG4iCQkJCQkJCVwKKwkiLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIJCQkJXAorCUFMVElOU1RSX0VOVFJZKGZlYXR1cmUpCQkJCQkJXAorCSIucG9wc2VjdGlvblxuIgkJCQkJCQlcCisJIi5wdXNoc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsIFwiYVwiXG4iCQkJXAorCSI2NjM6XG5cdCIJCQkJCQkJXAorCW5ld2luc3RyICJcbiIJCQkJCQkJXAorCSI2NjQ6XG5cdCIJCQkJCQkJXAorCSIucG9wc2VjdGlvblxuXHQiCQkJCQkJXAorCSIuaWYgKCg2NjRiLTY2M2IpICE9ICg2NjJiLTY2MWIpKVxuXHQiCQkJCVwKKwkiCS5lcnJvciBcIkFsdGVybmF0aXZlcyBpbnN0cnVjdGlvbiBsZW5ndGggbWlzbWF0Y2hcIlxuXHQiXAorCSIuZW5kaWZcbiIKKworI2VuZGlmIC8qIF9fQVNNX0FMVEVSTkFUSVZFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYXJjaF90aW1lci5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmgKaW5kZXggZjE5MDk3MS4uYjFmYTRlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmgKQEAgLTEwNCw2ICsxMDQsMTUgQEAKIAlhc20gdm9sYXRpbGUoIm1zcgljbnRrY3RsX2VsMSwgJTAiIDogOiAiciIgKGNudGtjdGwpKTsKIH0KIAorc3RhdGljIGlubGluZSB1NjQgYXJjaF9jb3VudGVyX2dldF9jbnRwY3Qodm9pZCkKK3sKKwkvKgorCSAqIEFBcmNoNjQga2VybmVsIGFuZCB1c2VyIHNwYWNlIG1hbmRhdGUgdGhlIHVzZSBvZiBDTlRWQ1QuCisJICovCisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTY0IGFyY2hfY291bnRlcl9nZXRfY250dmN0KHZvaWQpCiB7CiAJdTY0IGN2YWw7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NhY2hlLmgKaW5kZXggODhjYzA1Yi4uYmRlNDQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMzIsNiArMzIsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLi5yZWFkX21vc3RseSIpKSkKKwogc3RhdGljIGlubGluZSBpbnQgY2FjaGVfbGluZV9zaXplKHZvaWQpCiB7CiAJdTMyIGN3ZyA9IGNhY2hlX3R5cGVfY3dnKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDY4OWI2MzcuLjdhZTMxYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC03Myw3ICs3Myw3IEBACiBleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIF9fZmx1c2hfZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IGxlbik7Ci1leHRlcm4gdm9pZCBfX2ZsdXNoX2NhY2hlX3VzZXJfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIGxvbmcgX19mbHVzaF9jYWNoZV91c2VyX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jbXB4Y2hnLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NtcHhjaGcuaAppbmRleCBkZGI5ZDc4Li5jYjk1OTMwIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NtcHhjaGcuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NtcHhjaGcuaApAQCAtMTksNiArMTksNyBAQAogI2RlZmluZSBfX0FTTV9DTVBYQ0hHX0gKIAogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L21tZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKQEAgLTE1Miw2ICsxNTMsNTEgQEAKIAlyZXR1cm4gb2xkdmFsOwogfQogCisjZGVmaW5lIHN5c3RlbV9oYXNfY21weGNoZ19kb3VibGUoKSAgICAgMQorCitzdGF0aWMgaW5saW5lIGludCBfX2NtcHhjaGdfZG91YmxlKHZvbGF0aWxlIHZvaWQgKnB0cjEsIHZvbGF0aWxlIHZvaWQgKnB0cjIsCisJCXVuc2lnbmVkIGxvbmcgb2xkMSwgdW5zaWduZWQgbG9uZyBvbGQyLAorCQl1bnNpZ25lZCBsb25nIG5ldzEsIHVuc2lnbmVkIGxvbmcgbmV3MiwgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBsb29wLCBsb3N0OworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSA4OgorCQlWTV9CVUdfT04oKHVuc2lnbmVkIGxvbmcgKilwdHIyIC0gKHVuc2lnbmVkIGxvbmcgKilwdHIxICE9IDEpOworCQlkbyB7CisJCQlhc20gdm9sYXRpbGUoIi8vIF9fY21weGNoZ19kb3VibGU4XG4iCisJCQkiCWxkeHAJJTAsICUxLCAlMlxuIgorCQkJIgllb3IJJTAsICUwLCAlM1xuIgorCQkJIgllb3IJJTEsICUxLCAlNFxuIgorCQkJIglvcnIJJTEsICUwLCAlMVxuIgorCQkJIgltb3YJJXcwLCAjMFxuIgorCQkJIgljYm56CSUxLCAxZlxuIgorCQkJIglzdHhwCSV3MCwgJTUsICU2LCAlMlxuIgorCQkJIjE6XG4iCisJCQkJOiAiPSZyIihsb29wKSwgIj0mciIobG9zdCksICIrUSIgKCoodTY0ICopcHRyMSkKKwkJCQk6ICJyIiAob2xkMSksICJyIihvbGQyKSwgInIiKG5ldzEpLCAiciIobmV3MikpOworCQl9IHdoaWxlIChsb29wKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVJTERfQlVHKCk7CisJfQorCisJcmV0dXJuICFsb3N0OworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2NtcHhjaGdfZG91YmxlX21iKHZvbGF0aWxlIHZvaWQgKnB0cjEsIHZvbGF0aWxlIHZvaWQgKnB0cjIsCisJCQl1bnNpZ25lZCBsb25nIG9sZDEsIHVuc2lnbmVkIGxvbmcgb2xkMiwKKwkJCXVuc2lnbmVkIGxvbmcgbmV3MSwgdW5zaWduZWQgbG9uZyBuZXcyLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJc21wX21iKCk7CisJcmV0ID0gX19jbXB4Y2hnX2RvdWJsZShwdHIxLCBwdHIyLCBvbGQxLCBvbGQyLCBuZXcxLCBuZXcyLCBzaXplKTsKKwlzbXBfbWIoKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NtcHhjaGdfbWIodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKIHsKQEAgLTE4Miw2ICsyMjgsMzMgQEAKIAlfX3JldDsgXAogfSkKIAorI2RlZmluZSBjbXB4Y2hnX2RvdWJsZShwdHIxLCBwdHIyLCBvMSwgbzIsIG4xLCBuMikgXAorKHtcCisJaW50IF9fcmV0O1wKKwlfX3JldCA9IF9fY21weGNoZ19kb3VibGVfbWIoKHB0cjEpLCAocHRyMiksICh1bnNpZ25lZCBsb25nKShvMSksIFwKKwkJCSh1bnNpZ25lZCBsb25nKShvMiksICh1bnNpZ25lZCBsb25nKShuMSksIFwKKwkJCSh1bnNpZ25lZCBsb25nKShuMiksIHNpemVvZigqKHB0cjEpKSk7XAorCV9fcmV0OyBcCit9KQorCisjZGVmaW5lIGNtcHhjaGdfZG91YmxlX2xvY2FsKHB0cjEsIHB0cjIsIG8xLCBvMiwgbjEsIG4yKSBcCisoe1wKKwlpbnQgX19yZXQ7XAorCV9fcmV0ID0gX19jbXB4Y2hnX2RvdWJsZSgocHRyMSksIChwdHIyKSwgKHVuc2lnbmVkIGxvbmcpKG8xKSwgXAorCQkJKHVuc2lnbmVkIGxvbmcpKG8yKSwgKHVuc2lnbmVkIGxvbmcpKG4xKSwgXAorCQkJKHVuc2lnbmVkIGxvbmcpKG4yKSwgc2l6ZW9mKCoocHRyMSkpKTtcCisJX19yZXQ7IFwKK30pCisKKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ18xKHB0ciwgbywgbikgY21weGNoZ19sb2NhbChyYXdfY3B1X3B0cigmKHB0cikpLCBvLCBuKQorI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzIocHRyLCBvLCBuKSBjbXB4Y2hnX2xvY2FsKHJhd19jcHVfcHRyKCYocHRyKSksIG8sIG4pCisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfNChwdHIsIG8sIG4pIGNtcHhjaGdfbG9jYWwocmF3X2NwdV9wdHIoJihwdHIpKSwgbywgbikKKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ184KHB0ciwgbywgbikgY21weGNoZ19sb2NhbChyYXdfY3B1X3B0cigmKHB0cikpLCBvLCBuKQorCisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfZG91YmxlXzgocHRyMSwgcHRyMiwgbzEsIG8yLCBuMSwgbjIpIFwKKwljbXB4Y2hnX2RvdWJsZV9sb2NhbChyYXdfY3B1X3B0cigmKHB0cjEpKSwgcmF3X2NwdV9wdHIoJihwdHIyKSksIFwKKwkJCQlvMSwgbzIsIG4xLCBuMikKKwogI2RlZmluZSBjbXB4Y2hnNjQocHRyLG8sbikJCWNtcHhjaGcoKHB0ciksKG8pLChuKSkKICNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0cixvLG4pCWNtcHhjaGdfbG9jYWwoKHB0ciksKG8pLChuKSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jb21wYXQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY29tcGF0LmgKaW5kZXggNTZkZTVhYS4uM2ZiMDUzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jb21wYXQuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NvbXBhdC5oCkBAIC0yMDUsNiArMjA1LDEzIEBACiAJCQljb21wYXRfbG9uZ190IF9iYW5kOwkvKiBQT0xMX0lOLCBQT0xMX09VVCwgUE9MTF9NU0cgKi8KIAkJCWludCBfZmQ7CiAJCX0gX3NpZ3BvbGw7CisKKwkJLyogU0lHU1lTICovCisJCXN0cnVjdCB7CisJCQljb21wYXRfdXB0cl90IF9jYWxsX2FkZHI7IC8qIGNhbGxpbmcgdXNlciBpbnNuICovCisJCQlpbnQgX3N5c2NhbGw7CS8qIHRyaWdnZXJpbmcgc3lzdGVtIGNhbGwgbnVtYmVyICovCisJCQljb21wYXRfdWludF90IF9hcmNoOwkvKiBBVURJVF9BUkNIXyogb2Ygc3lzY2FsbCAqLworCQl9IF9zaWdzeXM7CiAJfSBfc2lmaWVsZHM7CiB9IGNvbXBhdF9zaWdpbmZvX3Q7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IDA1NjQ0MzAuLmFjZTcwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1LmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHUuaApAQCAtMzAsNiArMzAsOCBAQAogCXUzMgkJcmVnX2RjemlkOwogCXUzMgkJcmVnX21pZHI7CiAKKwl1NjQJCXJlZ19pZF9hYTY0ZGZyMDsKKwl1NjQJCXJlZ19pZF9hYTY0ZGZyMTsKIAl1NjQJCXJlZ19pZF9hYTY0aXNhcjA7CiAJdTY0CQlyZWdfaWRfYWE2NGlzYXIxOwogCXU2NAkJcmVnX2lkX2FhNjRtbWZyMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggY2Q0YWMwNS4uMDc1NDdjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKQEAgLTIxLDkgKzIxLDM4IEBACiAjZGVmaW5lIE1BWF9DUFVfRkVBVFVSRVMJKDggKiBzaXplb2YoZWxmX2h3Y2FwKSkKICNkZWZpbmUgY3B1X2ZlYXR1cmUoeCkJCWlsb2cyKEhXQ0FQXyAjIyB4KQogCisjZGVmaW5lIEFSTTY0X1dPUktBUk9VTkRfQ0xFQU5fQ0FDSEUJCTAKKyNkZWZpbmUgQVJNNjRfV09SS0FST1VORF9ERVZJQ0VfTE9BRF9BQ1FVSVJFCTEKKworI2RlZmluZSBBUk02NF9OQ0FQUwkJCQkyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiBERUNMQVJFX0JJVE1BUChjcHVfaHdjYXBzLCBBUk02NF9OQ0FQUyk7CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBjcHVfaGF2ZV9mZWF0dXJlKHVuc2lnbmVkIGludCBudW0pCiB7CiAJcmV0dXJuIGVsZl9od2NhcCAmICgxVUwgPDwgbnVtKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGNwdXNfaGF2ZV9jYXAodW5zaWduZWQgaW50IG51bSkKK3sKKwlpZiAobnVtID49IEFSTTY0X05DQVBTKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRlc3RfYml0KG51bSwgY3B1X2h3Y2Fwcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVzX3NldF9jYXAodW5zaWduZWQgaW50IG51bSkKK3sKKwlpZiAobnVtID49IEFSTTY0X05DQVBTKQorCQlwcl93YXJuKCJBdHRlbXB0IHRvIHNldCBhbiBpbGxlZ2FsIENQVSBjYXBhYmlsaXR5ICglZCA+PSAlZClcbiIsCisJCQludW0sIEFSTTY0X05DQVBTKTsKKwllbHNlCisJCV9fc2V0X2JpdChudW0sIGNwdV9od2NhcHMpOworfQorCit2b2lkIGNoZWNrX2xvY2FsX2NwdV9lcnJhdGEodm9pZCk7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdXR5cGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1dHlwZS5oCmluZGV4IDM3OWQwYjguLjhhZGI5ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1dHlwZS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1dHlwZS5oCkBAIC01Nyw2ICs1NywxMSBAQAogI2RlZmluZSBNSURSX0lNUExFTUVOVE9SKG1pZHIpCVwKIAkoKChtaWRyKSAmIE1JRFJfSU1QTEVNRU5UT1JfTUFTSykgPj4gTUlEUl9JTVBMRU1FTlRPUl9TSElGVCkKIAorI2RlZmluZSBNSURSX0NQVV9QQVJUKGltcCwgcGFydG51bSkgXAorCSgoKGltcCkJCQk8PCBNSURSX0lNUExFTUVOVE9SX1NISUZUKSB8IFwKKwkoMHhmCQkJPDwgTUlEUl9BUkNISVRFQ1RVUkVfU0hJRlQpIHwgXAorCSgocGFydG51bSkJCTw8IE1JRFJfUEFSVE5VTV9TSElGVCkpCisKICNkZWZpbmUgQVJNX0NQVV9JTVBfQVJNCQkweDQxCiAjZGVmaW5lIEFSTV9DUFVfSU1QX0FQTQkJMHg1MAogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtaS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9kbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQzN2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9kbWkuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9kbWkuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZC4KKyAqIFdyaXR0ZW4gYnk6IFlpIExpICh5aS5saUBsaW5hcm8ub3JnKQorICoKKyAqIGJhc2VkIG9uIGFyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWkuaAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19BU01fRE1JX0gKKyNkZWZpbmUgX19BU01fRE1JX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisvKgorICogQWNjb3JkaW5nIHRvIHNlY3Rpb24gMi4zLjYgb2YgdGhlIFVFRkkgc3BlYywgdGhlIGZpcm13YXJlIHNob3VsZCBub3QKKyAqIHJlcXVlc3QgYSB2aXJ0dWFsIG1hcHBpbmcgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGVzIHN1Y2ggYXMgU01CSU9TLgorICogVGhpcyBtZWFucyB3ZSBoYXZlIHRvIG1hcCB0aGVtIGJlZm9yZSB1c2UuCisgKi8KKyNkZWZpbmUgZG1pX2Vhcmx5X3JlbWFwKHgsIGwpCQlpb3JlbWFwX2NhY2hlKHgsIGwpCisjZGVmaW5lIGRtaV9lYXJseV91bm1hcCh4LCBsKQkJaW91bm1hcCh4KQorI2RlZmluZSBkbWlfcmVtYXAoeCwgbCkJCQlpb3JlbWFwX2NhY2hlKHgsIGwpCisjZGVmaW5lIGRtaV91bm1hcCh4KQkJCWlvdW5tYXAoeCkKKyNkZWZpbmUgZG1pX2FsbG9jKGwpCQkJa3phbGxvYyhsLCBHRlBfS0VSTkVMKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDVmN2JmZTYuLjllZjZlY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZml4bWFwLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtMzEsNiArMzEsNyBAQAogICoKICAqLwogZW51bSBmaXhlZF9hZGRyZXNzZXMgeworCUZJWF9IT0xFLAogCUZJWF9FQVJMWUNPTl9NRU1fQkFTRSwKIAlfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAogCkBAIC01NiwxMCArNTcsMTEgQEAKIAogI2RlZmluZSBGSVhNQVBfUEFHRV9JTyAgICAgX19wZ3Byb3QoUFJPVF9ERVZJQ0VfbkduUkUpCiAKLWV4dGVybiB2b2lkIF9fZWFybHlfc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsCi0JCQkgICAgICAgcGh5c19hZGRyX3QgcGh5cywgcGdwcm90X3QgZmxhZ3MpOwordm9pZCBfX2luaXQgZWFybHlfZml4bWFwX2luaXQodm9pZCk7CiAKLSNkZWZpbmUgX19zZXRfZml4bWFwIF9fZWFybHlfc2V0X2ZpeG1hcAorI2RlZmluZSBfX2Vhcmx5X3NldF9maXhtYXAgX19zZXRfZml4bWFwCisKK2V4dGVybiB2b2lkIF9fc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QpOwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZml4bWFwLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHdjYXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHdjYXAuaAppbmRleCAwMjRjNDYxLi4wYWQ3MzUxIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h3Y2FwLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9od2NhcC5oCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIENPTVBBVF9IV0NBUF9JRElWQQkoMSA8PCAxNykKICNkZWZpbmUgQ09NUEFUX0hXQ0FQX0lESVZUCSgxIDw8IDE4KQogI2RlZmluZSBDT01QQVRfSFdDQVBfSURJVgkoQ09NUEFUX0hXQ0FQX0lESVZBfENPTVBBVF9IV0NBUF9JRElWVCkKKyNkZWZpbmUgQ09NUEFUX0hXQ0FQX0xQQUUJKDEgPDwgMjApCiAjZGVmaW5lIENPTVBBVF9IV0NBUF9FVlRTVFJNCSgxIDw8IDIxKQogCiAjZGVmaW5lIENPTVBBVF9IV0NBUDJfQUVTCSgxIDw8IDApCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCmluZGV4IDU2YTllNjMuLmUyZmYzMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCkBAIC0zNTQsNiArMzU0LDE2IEBACiBpbnQgYWFyY2g2NF9pbnNuX3BhdGNoX3RleHRfbm9zeW5jKHZvaWQgKmFkZHIsIHUzMiBpbnNuKTsKIGludCBhYXJjaDY0X2luc25fcGF0Y2hfdGV4dF9zeW5jKHZvaWQgKmFkZHJzW10sIHUzMiBpbnNuc1tdLCBpbnQgY250KTsKIGludCBhYXJjaDY0X2luc25fcGF0Y2hfdGV4dCh2b2lkICphZGRyc1tdLCB1MzIgaW5zbnNbXSwgaW50IGNudCk7CisKK2Jvb2wgYWFyY2gzMl9pbnNuX2lzX3dpZGUodTMyIGluc24pOworCisjZGVmaW5lIEEzMl9STl9PRkZTRVQJMTYKKyNkZWZpbmUgQTMyX1JUX09GRlNFVAkxMgorI2RlZmluZSBBMzJfUlQyX09GRlNFVAkgMAorCit1MzIgYWFyY2gzMl9pbnNuX2V4dHJhY3RfcmVnX251bSh1MzIgaW5zbiwgaW50IG9mZnNldCk7Cit1MzIgYWFyY2gzMl9pbnNuX21jcl9leHRyYWN0X29wYzIodTMyIGluc24pOwordTMyIGFhcmNoMzJfaW5zbl9tY3JfZXh0cmFjdF9jcm0odTMyIGluc24pOwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYJLyogX19BU01fSU5TTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNzlmMWQ1MTkuLjk0OWM0MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lvLmgKQEAgLTI4LDU3ICsyOCw4MCBAQAogI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vZWFybHlfaW9yZW1hcC5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAKICNpbmNsdWRlIDx4ZW4veGVuLmg+CiAKIC8qCiAgKiBHZW5lcmljIElPIHJlYWQvd3JpdGUuICBUaGVzZSBwZXJmb3JtIG5hdGl2ZS1lbmRpYW4gYWNjZXNzZXMuCiAgKi8KKyNkZWZpbmUgX19yYXdfd3JpdGViIF9fcmF3X3dyaXRlYgogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1OCB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlhc20gdm9sYXRpbGUoInN0cmIgJXcwLCBbJTFdIiA6IDogInIiICh2YWwpLCAiciIgKGFkZHIpKTsKIH0KIAorI2RlZmluZSBfX3Jhd193cml0ZXcgX19yYXdfd3JpdGV3CiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGV3KHUxNiB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlhc20gdm9sYXRpbGUoInN0cmggJXcwLCBbJTFdIiA6IDogInIiICh2YWwpLCAiciIgKGFkZHIpKTsKIH0KIAorI2RlZmluZSBfX3Jhd193cml0ZWwgX19yYXdfd3JpdGVsCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVsKHUzMiB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlhc20gdm9sYXRpbGUoInN0ciAldzAsIFslMV0iIDogOiAiciIgKHZhbCksICJyIiAoYWRkcikpOwogfQogCisjZGVmaW5lIF9fcmF3X3dyaXRlcSBfX3Jhd193cml0ZXEKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXEodTY0IHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCWFzbSB2b2xhdGlsZSgic3RyICUwLCBbJTFdIiA6IDogInIiICh2YWwpLCAiciIgKGFkZHIpKTsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkYiBfX3Jhd19yZWFkYgogc3RhdGljIGlubGluZSB1OCBfX3Jhd19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdTggdmFsOwotCWFzbSB2b2xhdGlsZSgibGRyYiAldzAsIFslMV0iIDogIj1yIiAodmFsKSA6ICJyIiAoYWRkcikpOworCWFzbSB2b2xhdGlsZShBTFRFUk5BVElWRSgibGRyYiAldzAsIFslMV0iLAorCQkJCSAibGRhcmIgJXcwLCBbJTFdIiwKKwkJCQkgQVJNNjRfV09SS0FST1VORF9ERVZJQ0VfTE9BRF9BQ1FVSVJFKQorCQkgICAgIDogIj1yIiAodmFsKSA6ICJyIiAoYWRkcikpOwogCXJldHVybiB2YWw7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZHcgX19yYXdfcmVhZHcKIHN0YXRpYyBpbmxpbmUgdTE2IF9fcmF3X3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1MTYgdmFsOwotCWFzbSB2b2xhdGlsZSgibGRyaCAldzAsIFslMV0iIDogIj1yIiAodmFsKSA6ICJyIiAoYWRkcikpOworCisJYXNtIHZvbGF0aWxlKEFMVEVSTkFUSVZFKCJsZHJoICV3MCwgWyUxXSIsCisJCQkJICJsZGFyaCAldzAsIFslMV0iLAorCQkJCSBBUk02NF9XT1JLQVJPVU5EX0RFVklDRV9MT0FEX0FDUVVJUkUpCisJCSAgICAgOiAiPXIiICh2YWwpIDogInIiIChhZGRyKSk7CiAJcmV0dXJuIHZhbDsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkbCBfX3Jhd19yZWFkbAogc3RhdGljIGlubGluZSB1MzIgX19yYXdfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXUzMiB2YWw7Ci0JYXNtIHZvbGF0aWxlKCJsZHIgJXcwLCBbJTFdIiA6ICI9ciIgKHZhbCkgOiAiciIgKGFkZHIpKTsKKwlhc20gdm9sYXRpbGUoQUxURVJOQVRJVkUoImxkciAldzAsIFslMV0iLAorCQkJCSAibGRhciAldzAsIFslMV0iLAorCQkJCSBBUk02NF9XT1JLQVJPVU5EX0RFVklDRV9MT0FEX0FDUVVJUkUpCisJCSAgICAgOiAiPXIiICh2YWwpIDogInIiIChhZGRyKSk7CiAJcmV0dXJuIHZhbDsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkcSBfX3Jhd19yZWFkcQogc3RhdGljIGlubGluZSB1NjQgX19yYXdfcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXU2NCB2YWw7Ci0JYXNtIHZvbGF0aWxlKCJsZHIgJTAsIFslMV0iIDogIj1yIiAodmFsKSA6ICJyIiAoYWRkcikpOworCWFzbSB2b2xhdGlsZShBTFRFUk5BVElWRSgibGRyICUwLCBbJTFdIiwKKwkJCQkgImxkYXIgJTAsIFslMV0iLAorCQkJCSBBUk02NF9XT1JLQVJPVU5EX0RFVklDRV9MT0FEX0FDUVVJUkUpCisJCSAgICAgOiAiPXIiICh2YWwpIDogInIiIChhZGRyKSk7CiAJcmV0dXJuIHZhbDsKIH0KIApAQCAtMTI1LDk0ICsxNDgsNiBAQAogI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJKFNaXzMyTSAtIDEpCiAjZGVmaW5lIFBDSV9JT0JBU0UJCSgodm9pZCBfX2lvbWVtICopKE1PRFVMRVNfVkFERFIgLSBTWl8zMk0pKQogCi1zdGF0aWMgaW5saW5lIHU4IGluYih1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIHJlYWRiKGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgaW53KHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gcmVhZHcoYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBpbmwodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiByZWFkbChhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRiKHU4IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl3cml0ZWIoYiwgYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0dyh1MTYgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXdyaXRldyhiLCBhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRsKHUzMiBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jd3JpdGVsKGIsIGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotI2RlZmluZSBpbmJfcChhZGRyKQlpbmIoYWRkcikKLSNkZWZpbmUgaW53X3AoYWRkcikJaW53KGFkZHIpCi0jZGVmaW5lIGlubF9wKGFkZHIpCWlubChhZGRyKQotCi0jZGVmaW5lIG91dGJfcCh4LCBhZGRyKQlvdXRiKCh4KSwgKGFkZHIpKQotI2RlZmluZSBvdXR3X3AoeCwgYWRkcikJb3V0dygoeCksIChhZGRyKSkKLSNkZWZpbmUgb3V0bF9wKHgsIGFkZHIpCW91dGwoKHgpLCAoYWRkcikpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnNiKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCi17Ci0JdTggKmJ1ZiA9IGJ1ZmZlcjsKLQl3aGlsZSAoY291bnQtLSkKLQkJKmJ1ZisrID0gX19yYXdfcmVhZGIoYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5zdyh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQotewotCXUxNiAqYnVmID0gYnVmZmVyOwotCXdoaWxlIChjb3VudC0tKQotCQkqYnVmKysgPSBfX3Jhd19yZWFkdyhhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCi17Ci0JdTMyICpidWYgPSBidWZmZXI7Ci0Jd2hpbGUgKGNvdW50LS0pCi0JCSpidWYrKyA9IF9fcmF3X3JlYWRsKGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG91dHNiKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCi17Ci0JY29uc3QgdTggKmJ1ZiA9IGJ1ZmZlcjsKLQl3aGlsZSAoY291bnQtLSkKLQkJX19yYXdfd3JpdGViKCpidWYrKywgYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0c3codW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKLXsKLQljb25zdCB1MTYgKmJ1ZiA9IGJ1ZmZlcjsKLQl3aGlsZSAoY291bnQtLSkKLQkJX19yYXdfd3JpdGV3KCpidWYrKywgYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0c2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKLXsKLQljb25zdCB1MzIgKmJ1ZiA9IGJ1ZmZlcjsKLQl3aGlsZSAoY291bnQtLSkKLQkJX19yYXdfd3JpdGVsKCpidWYrKywgYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi0jZGVmaW5lIGluc2JfcChwb3J0LHRvLGxlbikJaW5zYihwb3J0LHRvLGxlbikKLSNkZWZpbmUgaW5zd19wKHBvcnQsdG8sbGVuKQlpbnN3KHBvcnQsdG8sbGVuKQotI2RlZmluZSBpbnNsX3AocG9ydCx0byxsZW4pCWluc2wocG9ydCx0byxsZW4pCi0KLSNkZWZpbmUgb3V0c2JfcChwb3J0LGZyb20sbGVuKQlvdXRzYihwb3J0LGZyb20sbGVuKQotI2RlZmluZSBvdXRzd19wKHBvcnQsZnJvbSxsZW4pCW91dHN3KHBvcnQsZnJvbSxsZW4pCi0jZGVmaW5lIG91dHNsX3AocG9ydCxmcm9tLGxlbikJb3V0c2wocG9ydCxmcm9tLGxlbikKLQogLyoKICAqIFN0cmluZyB2ZXJzaW9uIG9mIEkvTyBtZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnMuCiAgKi8KQEAgLTIzNiwxOCArMTcxLDE0IEBACiAjZGVmaW5lIGlvcmVtYXBfd2MoYWRkciwgc2l6ZSkJCV9faW9yZW1hcCgoYWRkciksIChzaXplKSwgX19wZ3Byb3QoUFJPVF9OT1JNQUxfTkMpKQogI2RlZmluZSBpb3VubWFwCQkJCV9faW91bm1hcAogCi0jZGVmaW5lIEFSQ0hfSEFTX0lPUkVNQVBfV0MKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgotCiAvKgotICogTW9yZSByZXN0cmljdGl2ZSBhZGRyZXNzIHJhbmdlIGNoZWNraW5nIHRoYW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KLSAqIChQSFlTX09GRlNFVCBhbmQgUEhZU19NQVNLIHRha2VuIGludG8gYWNjb3VudCkuCisgKiBpb3tyZWFkLHdyaXRlfXsxNiwzMn1iZSgpIG1hY3JvcwogICovCi0jZGVmaW5lIEFSQ0hfSEFTX1ZBTElEX1BIWVNfQUREUl9SQU5HRQotZXh0ZXJuIGludCB2YWxpZF9waHlzX2FkZHJfcmFuZ2UocGh5c19hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUpOwotZXh0ZXJuIGludCB2YWxpZF9tbWFwX3BoeXNfYWRkcl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgc2l6ZV90IHNpemUpOworI2RlZmluZSBpb3JlYWQxNmJlKHApCQkoeyBfX3UxNiBfX3YgPSBiZTE2X3RvX2NwdSgoX19mb3JjZSBfX2JlMTYpX19yYXdfcmVhZHcocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKKyNkZWZpbmUgaW9yZWFkMzJiZShwKQkJKHsgX191MzIgX192ID0gYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKV9fcmF3X3JlYWRsKHApKTsgX19pb3JtYigpOyBfX3Y7IH0pCiAKLWV4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwZm4pOworI2RlZmluZSBpb3dyaXRlMTZiZSh2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGV3KChfX2ZvcmNlIF9fdTE2KWNwdV90b19iZTE2KHYpLCBwKTsgfSkKKyNkZWZpbmUgaW93cml0ZTMyYmUodixwKQkoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRlbCgoX19mb3JjZSBfX3UzMiljcHVfdG9fYmUzMih2KSwgcCk7IH0pCiAKIC8qCiAgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCkBAIC0yNjAsNiArMTkxLDE4IEBACiAgKi8KICNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKIAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvLmg+CisKKy8qCisgKiBNb3JlIHJlc3RyaWN0aXZlIGFkZHJlc3MgcmFuZ2UgY2hlY2tpbmcgdGhhbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICogKFBIWVNfT0ZGU0VUIGFuZCBQSFlTX01BU0sgdGFrZW4gaW50byBhY2NvdW50KS4KKyAqLworI2RlZmluZSBBUkNIX0hBU19WQUxJRF9QSFlTX0FERFJfUkFOR0UKK2V4dGVybiBpbnQgdmFsaWRfcGh5c19hZGRyX3JhbmdlKHBoeXNfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQgdmFsaWRfbW1hcF9waHlzX2FkZHJfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHNpemVfdCBzaXplKTsKKworZXh0ZXJuIGludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBmbik7CisKIHN0cnVjdCBiaW9fdmVjOwogZXh0ZXJuIGJvb2wgeGVuX2Jpb3ZlY19waHlzX21lcmdlYWJsZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqdmVjMSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqdmVjMik7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCBlMWY3ZWNkLi45NGM1MzY3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTMsNyArMyw4IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcnEuaD4KIAotZXh0ZXJuIHZvaWQgKCpoYW5kbGVfYXJjaF9pcnEpKHN0cnVjdCBwdF9yZWdzICopOworc3RydWN0IHB0X3JlZ3M7CisKIGV4dGVybiB2b2lkIG1pZ3JhdGVfaXJxcyh2b2lkKTsKIGV4dGVybiB2b2lkIHNldF9oYW5kbGVfaXJxKHZvaWQgKCpoYW5kbGVfaXJxKShzdHJ1Y3QgcHRfcmVncyAqKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmgKaW5kZXggN2ZkM2UyNy4uOGFmYjg2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpZm5kZWYgX19BUk02NF9LVk1fQVJNX0hfXwogI2RlZmluZSBfX0FSTTY0X0tWTV9BUk1fSF9fCiAKKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKIC8qIEh5cCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChIQ1IpIGJpdHMgKi8KQEAgLTE2MCw5ICsxNjEsOSBAQAogI2VuZGlmCiAKICNkZWZpbmUgVlRUQlJfQkFERFJfU0hJRlQgKFZUVEJSX1ggLSAxKQotI2RlZmluZSBWVFRCUl9CQUREUl9NQVNLICAoKCgxTExVIDw8IChQSFlTX01BU0tfU0hJRlQgLSBWVFRCUl9YKSkgLSAxKSA8PCBWVFRCUl9CQUREUl9TSElGVCkKLSNkZWZpbmUgVlRUQlJfVk1JRF9TSElGVCAgKDQ4TExVKQotI2RlZmluZSBWVFRCUl9WTUlEX01BU0sJICAoMHhmZkxMVSA8PCBWVFRCUl9WTUlEX1NISUZUKQorI2RlZmluZSBWVFRCUl9CQUREUl9NQVNLICAoKChVTCgxKSA8PCAoUEhZU19NQVNLX1NISUZUIC0gVlRUQlJfWCkpIC0gMSkgPDwgVlRUQlJfQkFERFJfU0hJRlQpCisjZGVmaW5lIFZUVEJSX1ZNSURfU0hJRlQgIChVTCg0OCkpCisjZGVmaW5lIFZUVEJSX1ZNSURfTUFTSwkgIChVTCgweEZGKSA8PCBWVFRCUl9WTUlEX1NISUZUKQogCiAvKiBIeXAgU3lzdGVtIFRyYXAgUmVnaXN0ZXIgKi8KICNkZWZpbmUgSFNUUl9FTDJfVFRFRQkoMSA8PCAxNikKQEAgLTE4NSwxMyArMTg2LDEzIEBACiAKIC8qIEV4Y2VwdGlvbiBTeW5kcm9tZSBSZWdpc3RlciAoRVNSKSBiaXRzICovCiAjZGVmaW5lIEVTUl9FTDJfRUNfU0hJRlQJKDI2KQotI2RlZmluZSBFU1JfRUwyX0VDCQkoMHgzZlUgPDwgRVNSX0VMMl9FQ19TSElGVCkKLSNkZWZpbmUgRVNSX0VMMl9JTAkJKDFVIDw8IDI1KQorI2RlZmluZSBFU1JfRUwyX0VDCQkoVUwoMHgzZikgPDwgRVNSX0VMMl9FQ19TSElGVCkKKyNkZWZpbmUgRVNSX0VMMl9JTAkJKFVMKDEpIDw8IDI1KQogI2RlZmluZSBFU1JfRUwyX0lTUwkJKEVTUl9FTDJfSUwgLSAxKQogI2RlZmluZSBFU1JfRUwyX0lTVl9TSElGVAkoMjQpCi0jZGVmaW5lIEVTUl9FTDJfSVNWCQkoMVUgPDwgRVNSX0VMMl9JU1ZfU0hJRlQpCisjZGVmaW5lIEVTUl9FTDJfSVNWCQkoVUwoMSkgPDwgRVNSX0VMMl9JU1ZfU0hJRlQpCiAjZGVmaW5lIEVTUl9FTDJfU0FTX1NISUZUCSgyMikKLSNkZWZpbmUgRVNSX0VMMl9TQVMJCSgzVSA8PCBFU1JfRUwyX1NBU19TSElGVCkKKyNkZWZpbmUgRVNSX0VMMl9TQVMJCShVTCgzKSA8PCBFU1JfRUwyX1NBU19TSElGVCkKICNkZWZpbmUgRVNSX0VMMl9TU0UJCSgxIDw8IDIxKQogI2RlZmluZSBFU1JfRUwyX1NSVF9TSElGVAkoMTYpCiAjZGVmaW5lIEVTUl9FTDJfU1JUX01BU0sJKDB4MWYgPDwgRVNSX0VMMl9TUlRfU0hJRlQpCkBAIC0yMDUsMTYgKzIwNiwxNiBAQAogI2RlZmluZSBFU1JfRUwyX0ZTQ19UWVBFCSgweDNjKQogCiAjZGVmaW5lIEVTUl9FTDJfQ1ZfU0hJRlQJKDI0KQotI2RlZmluZSBFU1JfRUwyX0NWCQkoMVUgPDwgRVNSX0VMMl9DVl9TSElGVCkKKyNkZWZpbmUgRVNSX0VMMl9DVgkJKFVMKDEpIDw8IEVTUl9FTDJfQ1ZfU0hJRlQpCiAjZGVmaW5lIEVTUl9FTDJfQ09ORF9TSElGVAkoMjApCi0jZGVmaW5lIEVTUl9FTDJfQ09ORAkJKDB4ZlUgPDwgRVNSX0VMMl9DT05EX1NISUZUKQorI2RlZmluZSBFU1JfRUwyX0NPTkQJCShVTCgweGYpIDw8IEVTUl9FTDJfQ09ORF9TSElGVCkKIAogCiAjZGVmaW5lIEZTQ19GQVVMVAkoMHgwNCkKICNkZWZpbmUgRlNDX1BFUk0JKDB4MGMpCiAKIC8qIEh5cCBQcmVmZXRjaCBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyIChIUEZBUi9IREZBUikgKi8KLSNkZWZpbmUgSFBGQVJfTUFTSwkofjB4RlVMKQorI2RlZmluZSBIUEZBUl9NQVNLCSh+VUwoMHhmKSkKIAogI2RlZmluZSBFU1JfRUwyX0VDX1VOS05PV04JKDB4MDApCiAjZGVmaW5lIEVTUl9FTDJfRUNfV0ZJCQkoMHgwMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbWVtb3J5LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21lbW9yeS5oCmluZGV4IGE2MmNkMDcuLjY0ODZiMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbWVtb3J5LmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tZW1vcnkuaApAQCAtMTIwLDExICsxMjAsMTMgQEAKICAqIHRyYW5zbGF0aW9uIGZvciB0cmFuc2xhdGluZyBETUEgYWRkcmVzc2VzLiAgVXNlIHRoZSBkcml2ZXIKICAqIERNQSBzdXBwb3J0IC0gc2VlIGRtYS1tYXBwaW5nLmguCiAgKi8KKyNkZWZpbmUgdmlydF90b19waHlzIHZpcnRfdG9fcGh5cwogc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCB2aXJ0X3RvX3BoeXMoY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCkKIHsKIAlyZXR1cm4gX192aXJ0X3RvX3BoeXMoKHVuc2lnbmVkIGxvbmcpKHgpKTsKIH0KIAorI2RlZmluZSBwaHlzX3RvX3ZpcnQgcGh5c190b192aXJ0CiBzdGF0aWMgaW5saW5lIHZvaWQgKnBoeXNfdG9fdmlydChwaHlzX2FkZHJfdCB4KQogewogCXJldHVybiAodm9pZCAqKShfX3BoeXNfdG9fdmlydCh4KSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL29wY29kZXMuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vb3Bjb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjAzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL29wY29kZXMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Li4vLi4vYXJtL2luY2x1ZGUvYXNtL29wY29kZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDUyNzllNTcuLjA5ZGEyNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtNDQsNiArNDQsMjIxIEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKKyNkZWZpbmUgUEVSQ1BVX09QKG9wLCBhc21fb3ApCQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcGVyY3B1XyMjb3Aodm9pZCAqcHRyLAkJCVwKKwkJCXVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgc2l6ZSkJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgbG9vcCwgcmV0OwkJCQkJXAorCQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlkbyB7CQkJCQkJCVwKKwkJCWFzbSAoIi8vX19wZXJfY3B1XyIgI29wICJfMVxuIgkJCVwKKwkJCSJsZHhyYgkgICV3W3JldF0sICVbcHRyXVxuIgkJCVwKKwkJCSNhc21fb3AgIiAld1tyZXRdLCAld1tyZXRdLCAld1t2YWxdXG4iCQlcCisJCQkic3R4cmIJICAld1tsb29wXSwgJXdbcmV0XSwgJVtwdHJdXG4iCQlcCisJCQk6IFtsb29wXSAiPSZyIiAobG9vcCksIFtyZXRdICI9JnIiIChyZXQpLAlcCisJCQkgIFtwdHJdICIrUSIoKih1OCAqKXB0cikJCQlcCisJCQk6IFt2YWxdICJJciIgKHZhbCkpOwkJCQlcCisJCX0gd2hpbGUgKGxvb3ApOwkJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCQlcCisJCWRvIHsJCQkJCQkJXAorCQkJYXNtICgiLy9fX3Blcl9jcHVfIiAjb3AgIl8yXG4iCQkJXAorCQkJImxkeHJoCSAgJXdbcmV0XSwgJVtwdHJdXG4iCQkJXAorCQkJI2FzbV9vcCAiICV3W3JldF0sICV3W3JldF0sICV3W3ZhbF1cbiIJCVwKKwkJCSJzdHhyaAkgICV3W2xvb3BdLCAld1tyZXRdLCAlW3B0cl1cbiIJCVwKKwkJCTogW2xvb3BdICI9JnIiIChsb29wKSwgW3JldF0gIj0mciIgKHJldCksCVwKKwkJCSAgW3B0cl0gICIrUSIoKih1MTYgKilwdHIpCQkJXAorCQkJOiBbdmFsXSAiSXIiICh2YWwpKTsJCQkJXAorCQl9IHdoaWxlIChsb29wKTsJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlkbyB7CQkJCQkJCVwKKwkJCWFzbSAoIi8vX19wZXJfY3B1XyIgI29wICJfNFxuIgkJCVwKKwkJCSJsZHhyCSAgJXdbcmV0XSwgJVtwdHJdXG4iCQkJXAorCQkJI2FzbV9vcCAiICV3W3JldF0sICV3W3JldF0sICV3W3ZhbF1cbiIJCVwKKwkJCSJzdHhyCSAgJXdbbG9vcF0sICV3W3JldF0sICVbcHRyXVxuIgkJXAorCQkJOiBbbG9vcF0gIj0mciIgKGxvb3ApLCBbcmV0XSAiPSZyIiAocmV0KSwJXAorCQkJICBbcHRyXSAiK1EiKCoodTMyICopcHRyKQkJCVwKKwkJCTogW3ZhbF0gIklyIiAodmFsKSk7CQkJCVwKKwkJfSB3aGlsZSAobG9vcCk7CQkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgODoJCQkJCQkJCVwKKwkJZG8gewkJCQkJCQlcCisJCQlhc20gKCIvL19fcGVyX2NwdV8iICNvcCAiXzhcbiIJCQlcCisJCQkibGR4cgkgICVbcmV0XSwgJVtwdHJdXG4iCQkJXAorCQkJI2FzbV9vcCAiICVbcmV0XSwgJVtyZXRdLCAlW3ZhbF1cbiIJCVwKKwkJCSJzdHhyCSAgJXdbbG9vcF0sICVbcmV0XSwgJVtwdHJdXG4iCQlcCisJCQk6IFtsb29wXSAiPSZyIiAobG9vcCksIFtyZXRdICI9JnIiIChyZXQpLAlcCisJCQkgIFtwdHJdICIrUSIoKih1NjQgKilwdHIpCQkJXAorCQkJOiBbdmFsXSAiSXIiICh2YWwpKTsJCQkJXAorCQl9IHdoaWxlIChsb29wKTsJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlCVUlMRF9CVUcoKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30KKworUEVSQ1BVX09QKGFkZCwgYWRkKQorUEVSQ1BVX09QKGFuZCwgYW5kKQorUEVSQ1BVX09QKG9yLCBvcnIpCisjdW5kZWYgUEVSQ1BVX09QCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3BlcmNwdV9yZWFkKHZvaWQgKnB0ciwgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXJldCA9IEFDQ0VTU19PTkNFKCoodTggKilwdHIpOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldCA9IEFDQ0VTU19PTkNFKCoodTE2ICopcHRyKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyZXQgPSBBQ0NFU1NfT05DRSgqKHUzMiAqKXB0cik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcmV0ID0gQUNDRVNTX09OQ0UoKih1NjQgKilwdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUlMRF9CVUcoKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHVfd3JpdGUodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlBQ0NFU1NfT05DRSgqKHU4ICopcHRyKSA9ICh1OCl2YWw7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJQUNDRVNTX09OQ0UoKih1MTYgKilwdHIpID0gKHUxNil2YWw7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJQUNDRVNTX09OQ0UoKih1MzIgKilwdHIpID0gKHUzMil2YWw7CisJCWJyZWFrOworCWNhc2UgODoKKwkJQUNDRVNTX09OQ0UoKih1NjQgKilwdHIpID0gKHU2NCl2YWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVSUxEX0JVRygpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcGVyY3B1X3hjaGcodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCQkJCWludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcmV0LCBsb29wOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlkbyB7CisJCQlhc20gKCIvL19fcGVyY3B1X3hjaGdfMVxuIgorCQkJImxkeHJiICV3W3JldF0sICVbcHRyXVxuIgorCQkJInN0eHJiICV3W2xvb3BdLCAld1t2YWxdLCAlW3B0cl1cbiIKKwkJCTogW2xvb3BdICI9JnIiKGxvb3ApLCBbcmV0XSAiPSZyIihyZXQpLAorCQkJICBbcHRyXSAiK1EiKCoodTggKilwdHIpCisJCQk6IFt2YWxdICJyIiAodmFsKSk7CisJCX0gd2hpbGUgKGxvb3ApOworCQlicmVhazsKKwljYXNlIDI6CisJCWRvIHsKKwkJCWFzbSAoIi8vX19wZXJjcHVfeGNoZ18yXG4iCisJCQkibGR4cmggJXdbcmV0XSwgJVtwdHJdXG4iCisJCQkic3R4cmggJXdbbG9vcF0sICV3W3ZhbF0sICVbcHRyXVxuIgorCQkJOiBbbG9vcF0gIj0mciIobG9vcCksIFtyZXRdICI9JnIiKHJldCksCisJCQkgIFtwdHJdICIrUSIoKih1MTYgKilwdHIpCisJCQk6IFt2YWxdICJyIiAodmFsKSk7CisJCX0gd2hpbGUgKGxvb3ApOworCQlicmVhazsKKwljYXNlIDQ6CisJCWRvIHsKKwkJCWFzbSAoIi8vX19wZXJjcHVfeGNoZ180XG4iCisJCQkibGR4ciAld1tyZXRdLCAlW3B0cl1cbiIKKwkJCSJzdHhyICV3W2xvb3BdLCAld1t2YWxdLCAlW3B0cl1cbiIKKwkJCTogW2xvb3BdICI9JnIiKGxvb3ApLCBbcmV0XSAiPSZyIihyZXQpLAorCQkJICBbcHRyXSAiK1EiKCoodTMyICopcHRyKQorCQkJOiBbdmFsXSAiciIgKHZhbCkpOworCQl9IHdoaWxlIChsb29wKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlkbyB7CisJCQlhc20gKCIvL19fcGVyY3B1X3hjaGdfOFxuIgorCQkJImxkeHIgJVtyZXRdLCAlW3B0cl1cbiIKKwkJCSJzdHhyICV3W2xvb3BdLCAlW3ZhbF0sICVbcHRyXVxuIgorCQkJOiBbbG9vcF0gIj0mciIobG9vcCksIFtyZXRdICI9JnIiKHJldCksCisJCQkgIFtwdHJdICIrUSIoKih1NjQgKilwdHIpCisJCQk6IFt2YWxdICJyIiAodmFsKSk7CisJCX0gd2hpbGUgKGxvb3ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUlMRF9CVUcoKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIF9wZXJjcHVfYWRkKHBjcCwgdmFsKSBcCisJX19wZXJjcHVfYWRkKHJhd19jcHVfcHRyKCYocGNwKSksIHZhbCwgc2l6ZW9mKHBjcCkpCisKKyNkZWZpbmUgX3BlcmNwdV9hZGRfcmV0dXJuKHBjcCwgdmFsKSAodHlwZW9mKHBjcCkpIChfcGVyY3B1X2FkZChwY3AsIHZhbCkpCisKKyNkZWZpbmUgX3BlcmNwdV9hbmQocGNwLCB2YWwpIFwKKwlfX3BlcmNwdV9hbmQocmF3X2NwdV9wdHIoJihwY3ApKSwgdmFsLCBzaXplb2YocGNwKSkKKworI2RlZmluZSBfcGVyY3B1X29yKHBjcCwgdmFsKSBcCisJX19wZXJjcHVfb3IocmF3X2NwdV9wdHIoJihwY3ApKSwgdmFsLCBzaXplb2YocGNwKSkKKworI2RlZmluZSBfcGVyY3B1X3JlYWQocGNwKSAodHlwZW9mKHBjcCkpCVwKKwkoX19wZXJjcHVfcmVhZChyYXdfY3B1X3B0cigmKHBjcCkpLCBzaXplb2YocGNwKSkpCisKKyNkZWZpbmUgX3BlcmNwdV93cml0ZShwY3AsIHZhbCkgXAorCV9fcGVyY3B1X3dyaXRlKHJhd19jcHVfcHRyKCYocGNwKSksICh1bnNpZ25lZCBsb25nKSh2YWwpLCBzaXplb2YocGNwKSkKKworI2RlZmluZSBfcGVyY3B1X3hjaGcocGNwLCB2YWwpICh0eXBlb2YocGNwKSkgXAorCShfX3BlcmNwdV94Y2hnKHJhd19jcHVfcHRyKCYocGNwKSksICh1bnNpZ25lZCBsb25nKSh2YWwpLCBzaXplb2YocGNwKSkpCisKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzEocGNwLCB2YWwpIF9wZXJjcHVfYWRkKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfMihwY3AsIHZhbCkgX3BlcmNwdV9hZGQocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FkZF80KHBjcCwgdmFsKSBfcGVyY3B1X2FkZChwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzgocGNwLCB2YWwpIF9wZXJjcHVfYWRkKHBjcCwgdmFsKQorCisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fMShwY3AsIHZhbCkgX3BlcmNwdV9hZGRfcmV0dXJuKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzIocGNwLCB2YWwpIF9wZXJjcHVfYWRkX3JldHVybihwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl80KHBjcCwgdmFsKSBfcGVyY3B1X2FkZF9yZXR1cm4ocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fOChwY3AsIHZhbCkgX3BlcmNwdV9hZGRfcmV0dXJuKHBjcCwgdmFsKQorCisjZGVmaW5lIHRoaXNfY3B1X2FuZF8xKHBjcCwgdmFsKSBfcGVyY3B1X2FuZChwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYW5kXzIocGNwLCB2YWwpIF9wZXJjcHVfYW5kKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hbmRfNChwY3AsIHZhbCkgX3BlcmNwdV9hbmQocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKSBfcGVyY3B1X2FuZChwY3AsIHZhbCkKKworI2RlZmluZSB0aGlzX2NwdV9vcl8xKHBjcCwgdmFsKSBfcGVyY3B1X29yKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9vcl8yKHBjcCwgdmFsKSBfcGVyY3B1X29yKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9vcl80KHBjcCwgdmFsKSBfcGVyY3B1X29yKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9vcl84KHBjcCwgdmFsKSBfcGVyY3B1X29yKHBjcCwgdmFsKQorCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApIF9wZXJjcHVfcmVhZChwY3ApCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMihwY3ApIF9wZXJjcHVfcmVhZChwY3ApCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfNChwY3ApIF9wZXJjcHVfcmVhZChwY3ApCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApIF9wZXJjcHVfcmVhZChwY3ApCisKKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMShwY3AsIHZhbCkgX3BlcmNwdV93cml0ZShwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMihwY3AsIHZhbCkgX3BlcmNwdV93cml0ZShwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfNChwY3AsIHZhbCkgX3BlcmNwdV93cml0ZShwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbCkgX3BlcmNwdV93cml0ZShwY3AsIHZhbCkKKworI2RlZmluZSB0aGlzX2NwdV94Y2hnXzEocGNwLCB2YWwpIF9wZXJjcHVfeGNoZyhwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfeGNoZ18yKHBjcCwgdmFsKSBfcGVyY3B1X3hjaGcocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfNChwY3AsIHZhbCkgX3BlcmNwdV94Y2hnKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV94Y2hnXzgocGNwLCB2YWwpIF9wZXJjcHVfeGNoZyhwY3AsIHZhbCkKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgogCiAjZW5kaWYgLyogX19BU01fUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggZDViZWQwMi4uZTIwZGYzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTI2LDExICsyNiwxMyBAQAogCiAjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCQlkbyB7IH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgUEdBTExPQ19HRlAJKEdGUF9LRVJORUwgfCBfX0dGUF9OT1RSQUNLIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTykKKwogI2lmIENPTkZJR19BUk02NF9QR1RBQkxFX0xFVkVMUyA+IDIKIAogc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiAocG1kX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCk7CisJcmV0dXJuIChwbWRfdCAqKV9fZ2V0X2ZyZWVfcGFnZShQR0FMTE9DX0dGUCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCkKQEAgLTUwLDcgKzUyLDcgQEAKIAogc3RhdGljIGlubGluZSBwdWRfdCAqcHVkX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiAocHVkX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCk7CisJcmV0dXJuIChwdWRfdCAqKV9fZ2V0X2ZyZWVfcGFnZShQR0FMTE9DX0dGUCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCkKQEAgLTY5LDggKzcxLDYgQEAKIGV4dGVybiBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIGV4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKIAotI2RlZmluZSBQR0FMTE9DX0dGUAkoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PVFJBQ0sgfCBfX0dGUF9SRVBFQVQgfCBfX0dGUF9aRVJPKQotCiBzdGF0aWMgaW5saW5lIHB0ZV90ICoKIHB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NlY2NvbXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2VjY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NmZhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NlY2NvbXAuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZWNjb21wLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTGluYXJvIExpbWl0ZWQKKyAqIEF1dGhvcjogQUtBU0hJIFRha2FoaXJvIDx0YWthaGlyby5ha2FzaGlAbGluYXJvLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9BU01fU0VDQ09NUF9ICisjZGVmaW5lIF9BU01fU0VDQ09NUF9ICisKKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkXzMyCQlfX05SX2NvbXBhdF9yZWFkCisjZGVmaW5lIF9fTlJfc2VjY29tcF93cml0ZV8zMgkJX19OUl9jb21wYXRfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIJCV9fTlJfY29tcGF0X2V4aXQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybl8zMglfX05SX2NvbXBhdF9ydF9zaWdyZXR1cm4KKyNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWNjb21wLmg+CisKKyNlbmRpZiAvKiBfQVNNX1NFQ0NPTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggYTgyYzBjNS4uYzAyOGZlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xOSwxMCArMTksNiBAQAogI2lmbmRlZiBfX0FTTV9UTEJfSAogI2RlZmluZSBfX0FTTV9UTEJfSAogCi0jZGVmaW5lICBfX3RsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeSBfX3RsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCkBAIC0zNyw3MSArMzMsMjIgQEAKICNkZWZpbmUgdGxiX3JlbW92ZV9lbnRyeSh0bGIsIGVudHJ5KQl0bGJfcmVtb3ZlX3BhZ2UodGxiLCBlbnRyeSkKICNlbmRpZiAvKiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRSAqLwogCi0vKgotICogVGhlcmUncyB0aHJlZSB3YXlzIHRoZSBUTEIgc2hvb3Rkb3duIGNvZGUgaXMgdXNlZDoKLSAqICAxLiBVbm1hcHBpbmcgYSByYW5nZSBvZiB2bWFzLiAgU2VlIHphcF9wYWdlX3JhbmdlKCksIHVubWFwX3JlZ2lvbigpLgotICogICAgIHRsYi0+ZnVsbG1tID0gMCwgYW5kIHRsYl9zdGFydF92bWEvdGxiX2VuZF92bWEgd2lsbCBiZSBjYWxsZWQuCi0gKiAgMi4gVW5tYXBwaW5nIGFsbCB2bWFzLiAgU2VlIGV4aXRfbW1hcCgpLgotICogICAgIHRsYi0+ZnVsbG1tID0gMSwgYW5kIHRsYl9zdGFydF92bWEvdGxiX2VuZF92bWEgd2lsbCBiZSBjYWxsZWQuCi0gKiAgICAgUGFnZSB0YWJsZXMgd2lsbCBiZSBmcmVlZC4KLSAqICAzLiBVbm1hcHBpbmcgYXJndW1lbnQgcGFnZXMuICBTZWUgc2hpZnRfYXJnX3BhZ2VzKCkuCi0gKiAgICAgdGxiLT5mdWxsbW0gPSAwLCBidXQgdGxiX3N0YXJ0X3ZtYS90bGJfZW5kX3ZtYSB3aWxsIG5vdCBiZSBjYWxsZWQuCi0gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKwogc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQogewogCWlmICh0bGItPmZ1bGxtbSkgewogCQlmbHVzaF90bGJfbW0odGxiLT5tbSk7Ci0JfSBlbHNlIGlmICh0bGItPmVuZCA+IDApIHsKKwl9IGVsc2UgewogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qgdm1hID0geyAudm1fbW0gPSB0bGItPm1tLCB9OwogCQlmbHVzaF90bGJfcmFuZ2UoJnZtYSwgdGxiLT5zdGFydCwgdGxiLT5lbmQpOwotCQl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOwotCQl0bGItPmVuZCA9IDA7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX2FkZF9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQl0bGItPnN0YXJ0ID0gbWluKHRsYi0+c3RhcnQsIGFkZHIpOwotCQl0bGItPmVuZCA9IG1heCh0bGItPmVuZCwgYWRkciArIFBBR0VfU0laRSk7Ci0JfQotfQotCi0vKgotICogTWVtb3JpemUgdGhlIHJhbmdlIGZvciB0aGUgVExCIGZsdXNoLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVtb3ZlX3RsYl9lbnRyeShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdGVfdCAqcHRlcCwKLQkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOwotfQotCi0vKgotICogSW4gdGhlIGNhc2Ugb2YgdGxiIHZtYSBoYW5kbGluZywgd2UgY2FuIG9wdGltaXNlIHRoZXNlIGF3YXkgaW4gdGhlCi0gKiBjYXNlIHdoZXJlIHdlJ3JlIGRvaW5nIGEgZnVsbCBNTSBmbHVzaC4gIFdoZW4gd2UncmUgZG9pbmcgYSBtdW5tYXAsCi0gKiB0aGUgdm1hcyBhcmUgYWRqdXN0ZWQgdG8gb25seSBjb3ZlciB0aGUgcmVnaW9uIHRvIGJlIHRvcm4gZG93bi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRsYl9zdGFydF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKLQkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOwotCQl0bGItPmVuZCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX2VuZF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKLQkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlpZiAoIXRsYi0+ZnVsbG1tKQotCQl0bGJfZmx1c2godGxiKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwdGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcGd0YWJsZV9wYWdlX2R0b3IocHRlKTsKLQl0bGJfYWRkX2ZsdXNoKHRsYiwgYWRkcik7CiAJdGxiX3JlbW92ZV9lbnRyeSh0bGIsIHB0ZSk7CiB9CiAKQEAgLTEwOSw3ICs1Niw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZHAsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOwogCXRsYl9yZW1vdmVfZW50cnkodGxiLCB2aXJ0X3RvX3BhZ2UocG1kcCkpOwogfQogI2VuZGlmCkBAIC0xMTgsMTUgKzY0LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B1ZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdWRfdCAqcHVkcCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl0bGJfYWRkX2ZsdXNoKHRsYiwgYWRkcik7CiAJdGxiX3JlbW92ZV9lbnRyeSh0bGIsIHZpcnRfdG9fcGFnZShwdWRwKSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWRwLAotCQkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXRsYl9hZGRfZmx1c2godGxiLCBhZGRyZXNzKTsKLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RyYXBzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RyYXBzLmgKaW5kZXggMTBjYThmZi4uMjMyZTRiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90cmFwcy5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdHJhcHMuaApAQCAtMTgsNiArMTgsMjIgQEAKICNpZm5kZWYgX19BU01fVFJBUF9ICiAjZGVmaW5lIF9fQVNNX1RSQVBfSAogCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IHVuZGVmX2hvb2sgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwl1MzIgaW5zdHJfbWFzazsKKwl1MzIgaW5zdHJfdmFsOworCXU2NCBwc3RhdGVfbWFzazsKKwl1NjQgcHN0YXRlX3ZhbDsKKwlpbnQgKCpmbikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpbnN0cik7Cit9OworCit2b2lkIHJlZ2lzdGVyX3VuZGVmX2hvb2soc3RydWN0IHVuZGVmX2hvb2sgKmhvb2spOwordm9pZCB1bnJlZ2lzdGVyX3VuZGVmX2hvb2soc3RydWN0IHVuZGVmX2hvb2sgKmhvb2spOworCiBzdGF0aWMgaW5saW5lIGludCBpbl9leGNlcHRpb25fdGV4dCh1bnNpZ25lZCBsb25nIHB0cikKIHsKIAlleHRlcm4gY2hhciBfX2V4Y2VwdGlvbl90ZXh0X3N0YXJ0W107CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA2ZDJiZjQxLi40OWM5YWVmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTMxLDYgKzMxLDkgQEAKICAqIENvbXBhdCBzeXNjYWxsIG51bWJlcnMgdXNlZCBieSB0aGUgQUFyY2g2NCBrZXJuZWwuCiAgKi8KICNkZWZpbmUgX19OUl9jb21wYXRfcmVzdGFydF9zeXNjYWxsCTAKKyNkZWZpbmUgX19OUl9jb21wYXRfZXhpdAkJMQorI2RlZmluZSBfX05SX2NvbXBhdF9yZWFkCQkzCisjZGVmaW5lIF9fTlJfY29tcGF0X3dyaXRlCQk0CiAjZGVmaW5lIF9fTlJfY29tcGF0X3NpZ3JldHVybgkJMTE5CiAjZGVmaW5lIF9fTlJfY29tcGF0X3J0X3NpZ3JldHVybgkxNzMKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQzMi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQzMi5oCmluZGV4IDlkZmRhYzQuLjg4OTNjZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkMzIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZDMyLmgKQEAgLTc4Nyw3ICs3ODcsOCBAQAogX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0YXR0ciwgc3lzX3NjaGVkX2dldGF0dHIpCiAjZGVmaW5lIF9fTlJfcmVuYW1lYXQyIDM4MgogX19TWVNDQUxMKF9fTlJfcmVuYW1lYXQyLCBzeXNfcmVuYW1lYXQyKQotCQkJLyogMzgzIGZvciBzZWNjb21wICovCisjZGVmaW5lIF9fTlJfc2VjY29tcCAzODMKK19fU1lTQ0FMTChfX05SX3NlY2NvbXAsIHN5c19zZWNjb21wKQogI2RlZmluZSBfX05SX2dldHJhbmRvbSAzODQKIF9fU1lTQ0FMTChfX05SX2dldHJhbmRvbSwgc3lzX2dldHJhbmRvbSkKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUgMzg1CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlCmluZGV4IDViZDAyOWIuLmVhYTc3ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogQ1BQRkxBR1Nfdm1saW51eC5sZHMJOj0gLURURVhUX09GRlNFVD0kKFRFWFRfT0ZGU0VUKQogQUZMQUdTX2hlYWQubwkJOj0gLURURVhUX09GRlNFVD0kKFRFWFRfT0ZGU0VUKQogQ0ZMQUdTX2VmaS1zdHViLm8gCTo9IC1EVEVYVF9PRkZTRVQ9JChURVhUX09GRlNFVCkKK0NGTEFHU19hcm12OF9kZXByZWNhdGVkLm8gOj0gLUkkKHNyYykKIAogQ0ZMQUdTX1JFTU9WRV9mdHJhY2UubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9pbnNuLm8gPSAtcGcKQEAgLTE1LDEwICsxNiwxMSBAQAogCQkJICAgZW50cnktZnBzaW1kLm8gcHJvY2Vzcy5vIHB0cmFjZS5vIHNldHVwLm8gc2lnbmFsLm8JXAogCQkJICAgc3lzLm8gc3RhY2t0cmFjZS5vIHRpbWUubyB0cmFwcy5vIGlvLm8gdmRzby5vCVwKIAkJCSAgIGh5cC1zdHViLm8gcHNjaS5vIGNwdV9vcHMubyBpbnNuLm8gcmV0dXJuX2FkZHJlc3MubwlcCi0JCQkgICBjcHVpbmZvLm8KKwkJCSAgIGNwdWluZm8ubyBjcHVfZXJyYXRhLm8gYWx0ZXJuYXRpdmUubwogCiBhcm02NC1vYmotJChDT05GSUdfQ09NUEFUKQkJKz0gc3lzMzIubyBrdXNlcjMyLm8gc2lnbmFsMzIubyAJXAotCQkJCQkgICBzeXNfY29tcGF0Lm8KKwkJCQkJICAgc3lzX2NvbXBhdC5vIAkJCVwKKwkJCQkJICAgLi4vLi4vYXJtL2tlcm5lbC9vcGNvZGVzLm8KIGFybTY0LW9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpCSs9IGZ0cmFjZS5vIGVudHJ5LWZ0cmFjZS5vCiBhcm02NC1vYmotJChDT05GSUdfTU9EVUxFUykJCSs9IGFybTY0a3N5bXMubyBtb2R1bGUubwogYXJtNjQtb2JqLSQoQ09ORklHX1NNUCkJCQkrPSBzbXAubyBzbXBfc3Bpbl90YWJsZS5vIHRvcG9sb2d5Lm8KQEAgLTMxLDYgKzMzLDcgQEAKIGFybTY0LW9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYi5vCiBhcm02NC1vYmotJChDT05GSUdfRUZJKQkJCSs9IGVmaS5vIGVmaS1zdHViLm8gZWZpLWVudHJ5Lm8KIGFybTY0LW9iai0kKENPTkZJR19QQ0kpCQkJKz0gcGNpLm8KK2FybTY0LW9iai0kKENPTkZJR19BUk1WOF9ERVBSRUNBVEVEKQkrPSBhcm12OF9kZXByZWNhdGVkLm8KIAogb2JqLXkJCQkJCSs9ICQoYXJtNjQtb2JqLXkpIHZkc28vCiBvYmotbQkJCQkJKz0gJChhcm02NC1vYmotbSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzgyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBhbHRlcm5hdGl2ZSBydW50aW1lIHBhdGNoaW5nCisgKiBpbnNwaXJlZCBieSB0aGUgeDg2IHZlcnNpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQVJNIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgImFsdGVybmF0aXZlczogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CisKK2V4dGVybiBzdHJ1Y3QgYWx0X2luc3RyIF9fYWx0X2luc3RydWN0aW9uc1tdLCBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kW107CisKK3N0cnVjdCBhbHRfcmVnaW9uIHsKKwlzdHJ1Y3QgYWx0X2luc3RyICpiZWdpbjsKKwlzdHJ1Y3QgYWx0X2luc3RyICplbmQ7Cit9OworCitzdGF0aWMgaW50IF9fYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKmFsdF9yZWdpb24pCit7CisJc3RydWN0IGFsdF9pbnN0ciAqYWx0OworCXN0cnVjdCBhbHRfcmVnaW9uICpyZWdpb24gPSBhbHRfcmVnaW9uOworCXU4ICpvcmlncHRyLCAqcmVwbHB0cjsKKworCWZvciAoYWx0ID0gcmVnaW9uLT5iZWdpbjsgYWx0IDwgcmVnaW9uLT5lbmQ7IGFsdCsrKSB7CisJCWlmICghY3B1c19oYXZlX2NhcChhbHQtPmNwdWZlYXR1cmUpKQorCQkJY29udGludWU7CisKKwkJQlVHX09OKGFsdC0+YWx0X2xlbiA+IGFsdC0+b3JpZ19sZW4pOworCisJCXByX2luZm9fb25jZSgicGF0Y2hpbmcga2VybmVsIGNvZGVcbiIpOworCisJCW9yaWdwdHIgPSAodTggKikmYWx0LT5vcmlnX29mZnNldCArIGFsdC0+b3JpZ19vZmZzZXQ7CisJCXJlcGxwdHIgPSAodTggKikmYWx0LT5hbHRfb2Zmc2V0ICsgYWx0LT5hbHRfb2Zmc2V0OworCQltZW1jcHkob3JpZ3B0ciwgcmVwbHB0ciwgYWx0LT5hbHRfbGVuKTsKKwkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1aW50cHRyX3Qpb3JpZ3B0ciwKKwkJCQkgICAodWludHB0cl90KShvcmlncHRyICsgYWx0LT5hbHRfbGVuKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKQoreworCXN0cnVjdCBhbHRfcmVnaW9uIHJlZ2lvbiA9IHsKKwkJLmJlZ2luCT0gX19hbHRfaW5zdHJ1Y3Rpb25zLAorCQkuZW5kCT0gX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCwKKwl9OworCisJLyogYmV0dGVyIG5vdCB0cnkgY29kZSBwYXRjaGluZyBvbiBhIGxpdmUgU01QIHN5c3RlbSAqLworCXN0b3BfbWFjaGluZShfX2FwcGx5X2FsdGVybmF0aXZlcywgJnJlZ2lvbiwgTlVMTCk7Cit9CisKK3ZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBhbHRfcmVnaW9uIHJlZ2lvbiA9IHsKKwkJLmJlZ2luCT0gc3RhcnQsCisJCS5lbmQJPSBzdGFydCArIGxlbmd0aCwKKwl9OworCisJX19hcHBseV9hbHRlcm5hdGl2ZXMoJnJlZ2lvbik7Cit9CisKK3ZvaWQgZnJlZV9hbHRlcm5hdGl2ZXNfbWVtb3J5KHZvaWQpCit7CisJZnJlZV9yZXNlcnZlZF9hcmVhKF9fYWx0X2luc3RydWN0aW9ucywgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCwKKwkJCSAgIDAsICJhbHRlcm5hdGl2ZXMiKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2FybXY4X2RlcHJlY2F0ZWQuYyBiL2FyY2gvYXJtNjQva2VybmVsL2FybXY4X2RlcHJlY2F0ZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzYzNjcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvYXJtdjhfZGVwcmVjYXRlZC5jCkBAIC0wLDAgKzEsNTUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNCBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorCisjaW5jbHVkZSA8YXNtL2luc24uaD4KKyNpbmNsdWRlIDxhc20vb3Bjb2Rlcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgInRyYWNlLWV2ZW50cy1lbXVsYXRpb24uaCIKKworLyoKKyAqIFRoZSBydW50aW1lIHN1cHBvcnQgZm9yIGRlcHJlY2F0ZWQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjYW4gYmUgaW4gb25lIG9mCisgKiBmb2xsb3dpbmcgdGhyZWUgc3RhdGVzIC0KKyAqCisgKiAwID0gdW5kZWYKKyAqIDEgPSBlbXVsYXRlIChzb2Z0d2FyZSBlbXVsYXRpb24pCisgKiAyID0gaHcgKHN1cHBvcnRlZCBpbiBoYXJkd2FyZSkKKyAqLworZW51bSBpbnNuX2VtdWxhdGlvbl9tb2RlIHsKKwlJTlNOX1VOREVGLAorCUlOU05fRU1VTEFURSwKKwlJTlNOX0hXLAorfTsKKworZW51bSBsZWdhY3lfaW5zbl9zdGF0dXMgeworCUlOU05fREVQUkVDQVRFRCwKKwlJTlNOX09CU09MRVRFLAorfTsKKworc3RydWN0IGluc25fZW11bGF0aW9uX29wcyB7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJZW51bSBsZWdhY3lfaW5zbl9zdGF0dXMJc3RhdHVzOworCXN0cnVjdCB1bmRlZl9ob29rCSpob29rczsKKwlpbnQJCQkoKnNldF9od19tb2RlKShib29sIGVuYWJsZSk7Cit9OworCitzdHJ1Y3QgaW5zbl9lbXVsYXRpb24geworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzICpvcHM7CisJaW50IGN1cnJlbnRfbW9kZTsKKwlpbnQgbWluOworCWludCBtYXg7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKGluc25fZW11bGF0aW9uKTsKK3N0YXRpYyBpbnQgbnJfaW5zbl9lbXVsYXRlZDsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGluc25fZW11bGF0aW9uX2xvY2spOworCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9lbXVsYXRpb25faG9va3Moc3RydWN0IGluc25fZW11bGF0aW9uX29wcyAqb3BzKQoreworCXN0cnVjdCB1bmRlZl9ob29rICpob29rOworCisJQlVHX09OKCFvcHMtPmhvb2tzKTsKKworCWZvciAoaG9vayA9IG9wcy0+aG9va3M7IGhvb2stPmluc3RyX21hc2s7IGhvb2srKykKKwkJcmVnaXN0ZXJfdW5kZWZfaG9vayhob29rKTsKKworCXByX25vdGljZSgiUmVnaXN0ZXJlZCAlcyBlbXVsYXRpb24gaGFuZGxlclxuIiwgb3BzLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2VtdWxhdGlvbl9ob29rcyhzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzICpvcHMpCit7CisJc3RydWN0IHVuZGVmX2hvb2sgKmhvb2s7CisKKwlCVUdfT04oIW9wcy0+aG9va3MpOworCisJZm9yIChob29rID0gb3BzLT5ob29rczsgaG9vay0+aW5zdHJfbWFzazsgaG9vaysrKQorCQl1bnJlZ2lzdGVyX3VuZGVmX2hvb2soaG9vayk7CisKKwlwcl9ub3RpY2UoIlJlbW92ZWQgJXMgZW11bGF0aW9uIGhhbmRsZXJcbiIsIG9wcy0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2luc25fZW11bGF0aW9uX21vZGUoc3RydWN0IGluc25fZW11bGF0aW9uICppbnNuLAorCQkJCSAgICAgICBlbnVtIGluc25fZW11bGF0aW9uX21vZGUgcHJldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocHJldikgeworCWNhc2UgSU5TTl9VTkRFRjogLyogTm90aGluZyB0byBiZSBkb25lICovCisJCWJyZWFrOworCWNhc2UgSU5TTl9FTVVMQVRFOgorCQlyZW1vdmVfZW11bGF0aW9uX2hvb2tzKGluc24tPm9wcyk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9IVzoKKwkJaWYgKGluc24tPm9wcy0+c2V0X2h3X21vZGUpIHsKKwkJCWluc24tPm9wcy0+c2V0X2h3X21vZGUoZmFsc2UpOworCQkJcHJfbm90aWNlKCJEaXNhYmxlZCAlcyBzdXBwb3J0XG4iLCBpbnNuLT5vcHMtPm5hbWUpOworCQl9CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaW5zbi0+Y3VycmVudF9tb2RlKSB7CisJY2FzZSBJTlNOX1VOREVGOgorCQlicmVhazsKKwljYXNlIElOU05fRU1VTEFURToKKwkJcmVnaXN0ZXJfZW11bGF0aW9uX2hvb2tzKGluc24tPm9wcyk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9IVzoKKwkJaWYgKGluc24tPm9wcy0+c2V0X2h3X21vZGUgJiYgaW5zbi0+b3BzLT5zZXRfaHdfbW9kZSh0cnVlKSkKKwkJCXByX25vdGljZSgiRW5hYmxlZCAlcyBzdXBwb3J0XG4iLCBpbnNuLT5vcHMtPm5hbWUpOworCQllbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9pbnNuX2VtdWxhdGlvbihzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzICpvcHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaW5zbl9lbXVsYXRpb24gKmluc247CisKKwlpbnNuID0ga3phbGxvYyhzaXplb2YoKmluc24pLCBHRlBfS0VSTkVMKTsKKwlpbnNuLT5vcHMgPSBvcHM7CisJaW5zbi0+bWluID0gSU5TTl9VTkRFRjsKKworCXN3aXRjaCAob3BzLT5zdGF0dXMpIHsKKwljYXNlIElOU05fREVQUkVDQVRFRDoKKwkJaW5zbi0+Y3VycmVudF9tb2RlID0gSU5TTl9FTVVMQVRFOworCQlpbnNuLT5tYXggPSBJTlNOX0hXOworCQlicmVhazsKKwljYXNlIElOU05fT0JTT0xFVEU6CisJCWluc24tPmN1cnJlbnRfbW9kZSA9IElOU05fVU5ERUY7CisJCWluc24tPm1heCA9IElOU05fRU1VTEFURTsKKwkJYnJlYWs7CisJfQorCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpbnNuX2VtdWxhdGlvbl9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmluc24tPm5vZGUsICZpbnNuX2VtdWxhdGlvbik7CisJbnJfaW5zbl9lbXVsYXRlZCsrOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnNuX2VtdWxhdGlvbl9sb2NrLCBmbGFncyk7CisKKwkvKiBSZWdpc3RlciBhbnkgaGFuZGxlcnMgaWYgcmVxdWlyZWQgKi8KKwl1cGRhdGVfaW5zbl9lbXVsYXRpb25fbW9kZShpbnNuLCBJTlNOX1VOREVGKTsKK30KKworc3RhdGljIGludCBlbXVsYXRpb25fcHJvY19oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCisJCQkJICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsCisJCQkJICBsb2ZmX3QgKnBwb3MpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGluc25fZW11bGF0aW9uICppbnNuID0gKHN0cnVjdCBpbnNuX2VtdWxhdGlvbiAqKSB0YWJsZS0+ZGF0YTsKKwllbnVtIGluc25fZW11bGF0aW9uX21vZGUgcHJldl9tb2RlID0gaW5zbi0+Y3VycmVudF9tb2RlOworCisJdGFibGUtPmRhdGEgPSAmaW5zbi0+Y3VycmVudF9tb2RlOworCXJldCA9IHByb2NfZG9pbnR2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKworCWlmIChyZXQgfHwgIXdyaXRlIHx8IHByZXZfbW9kZSA9PSBpbnNuLT5jdXJyZW50X21vZGUpCisJCWdvdG8gcmV0OworCisJcmV0ID0gdXBkYXRlX2luc25fZW11bGF0aW9uX21vZGUoaW5zbiwgcHJldl9tb2RlKTsKKwlpZiAocmV0KSB7CisJCS8qIE1vZGUgY2hhbmdlIGZhaWxlZCwgcmV2ZXJ0IHRvIHByZXZpb3VzIG1vZGUuICovCisJCWluc24tPmN1cnJlbnRfbW9kZSA9IHByZXZfbW9kZTsKKwkJdXBkYXRlX2luc25fZW11bGF0aW9uX21vZGUoaW5zbiwgSU5TTl9VTkRFRik7CisJfQorcmV0OgorCXRhYmxlLT5kYXRhID0gaW5zbjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBjdGxfYWJpW10gPSB7CisJeworCQkucHJvY25hbWUgPSAiYWJpIiwKKwkJLm1vZGUgPSAwNTU1LAorCX0sCisJeyB9Cit9OworCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9pbnNuX2VtdWxhdGlvbl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqdGFibGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSA9IDA7CisJc3RydWN0IGluc25fZW11bGF0aW9uICppbnNuOworCXN0cnVjdCBjdGxfdGFibGUgKmluc25zX3N5c2N0bCwgKnN5c2N0bDsKKworCWluc25zX3N5c2N0bCA9IGt6YWxsb2Moc2l6ZW9mKCpzeXNjdGwpICogKG5yX2luc25fZW11bGF0ZWQgKyAxKSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpbnNuX2VtdWxhdGlvbl9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnNuLCAmaW5zbl9lbXVsYXRpb24sIG5vZGUpIHsKKwkJc3lzY3RsID0gJmluc25zX3N5c2N0bFtpXTsKKworCQlzeXNjdGwtPm1vZGUgPSAwNjQ0OworCQlzeXNjdGwtPm1heGxlbiA9IHNpemVvZihpbnQpOworCisJCXN5c2N0bC0+cHJvY25hbWUgPSBpbnNuLT5vcHMtPm5hbWU7CisJCXN5c2N0bC0+ZGF0YSA9IGluc247CisJCXN5c2N0bC0+ZXh0cmExID0gJmluc24tPm1pbjsKKwkJc3lzY3RsLT5leHRyYTIgPSAmaW5zbi0+bWF4OworCQlzeXNjdGwtPnByb2NfaGFuZGxlciA9IGVtdWxhdGlvbl9wcm9jX2hhbmRsZXI7CisJCWkrKzsKKwl9CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc25fZW11bGF0aW9uX2xvY2ssIGZsYWdzKTsKKworCXRhYmxlLT5jaGlsZCA9IGluc25zX3N5c2N0bDsKKwlyZWdpc3Rlcl9zeXNjdGxfdGFibGUodGFibGUpOworfQorCisvKgorICogIEltcGxlbWVudCBlbXVsYXRpb24gb2YgdGhlIFNXUC9TV1BCIGluc3RydWN0aW9ucyB1c2luZyBsb2FkLWV4Y2x1c2l2ZSBhbmQKKyAqICBzdG9yZS1leGNsdXNpdmUuCisgKgorICogIFN5bnRheCBvZiBTV1B7Qn0gaW5zdHJ1Y3Rpb246IFNXUHtCfTxjPiA8UnQ+LCA8UnQyPiwgWzxSbj5dCisgKiAgV2hlcmU6IFJ0ICA9IGRlc3RpbmF0aW9uCisgKgkgICBSdDIgPSBzb3VyY2UKKyAqCSAgIFJuICA9IGFkZHJlc3MKKyAqLworCisvKgorICogRXJyb3ItY2hlY2tpbmcgU1dQIG1hY3JvcyBpbXBsZW1lbnRlZCB1c2luZyBsZHhye2J9L3N0eHJ7Yn0KKyAqLworI2RlZmluZSBfX3VzZXJfc3dwWF9hc20oZGF0YSwgYWRkciwgcmVzLCB0ZW1wLCBCKQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSIJbW92CQkldzIsICV3MVxuIgkJCVwKKwkiMDoJbGR4ciJCIgkJJXcxLCBbJTNdXG4iCQkJXAorCSIxOglzdHhyIkIiCQkldzAsICV3MiwgWyUzXVxuIgkJXAorCSIJY2J6CQkldzAsIDJmXG4iCQkJXAorCSIJbW92CQkldzAsICV3NFxuIgkJCVwKKwkiMjpcbiIJCQkJCQkJXAorCSIJLnB1c2hzZWN0aW9uCSAuZml4dXAsXCJheFwiXG4iCQlcCisJIgkuYWxpZ24JCTJcbiIJCQkJXAorCSIzOgltb3YJCSV3MCwgJXc1XG4iCQkJXAorCSIJYgkJMmJcbiIJCQkJXAorCSIJLnBvcHNlY3Rpb24iCQkJCQlcCisJIgkucHVzaHNlY3Rpb24JIF9fZXhfdGFibGUsXCJhXCJcbiIJCVwKKwkiCS5hbGlnbgkJM1xuIgkJCQlcCisJIgkucXVhZAkJMGIsIDNiXG4iCQkJXAorCSIJLnF1YWQJCTFiLCAzYlxuIgkJCVwKKwkiCS5wb3BzZWN0aW9uIgkJCQkJXAorCTogIj0mciIgKHJlcyksICIrciIgKGRhdGEpLCAiPSZyIiAodGVtcCkJCVwKKwk6ICJyIiAoYWRkciksICJpIiAoLUVBR0FJTiksICJpIiAoLUVGQVVMVCkJCVwKKwk6ICJtZW1vcnkiKQorCisjZGVmaW5lIF9fdXNlcl9zd3BfYXNtKGRhdGEsIGFkZHIsIHJlcywgdGVtcCkgXAorCV9fdXNlcl9zd3BYX2FzbShkYXRhLCBhZGRyLCByZXMsIHRlbXAsICIiKQorI2RlZmluZSBfX3VzZXJfc3dwYl9hc20oZGF0YSwgYWRkciwgcmVzLCB0ZW1wKSBcCisJX191c2VyX3N3cFhfYXNtKGRhdGEsIGFkZHIsIHJlcywgdGVtcCwgImIiKQorCisvKgorICogQml0IDIyIG9mIHRoZSBpbnN0cnVjdGlvbiBlbmNvZGluZyBkaXN0aW5ndWlzaGVzIGJldHdlZW4KKyAqIHRoZSBTV1AgYW5kIFNXUEIgdmFyaWFudHMgKGJpdCBzZXQgbWVhbnMgU1dQQikuCisgKi8KKyNkZWZpbmUgVFlQRV9TV1BCICgxIDw8IDIyKQorCisvKgorICogU2V0IHVwIHByb2Nlc3MgaW5mbyB0byBzaWduYWwgc2VnbWVudGF0aW9uIGZhdWx0IC0gY2FsbGVkIG9uIGFjY2VzcyBlcnJvci4KKyAqLworc3RhdGljIHZvaWQgc2V0X3NlZ2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc2lnaW5mb190IGluZm87CisKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJaWYgKGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKSA9PSBOVUxMKQorCQlpbmZvLnNpX2NvZGUgPSBTRUdWX01BUEVSUjsKKwllbHNlCisJCWluZm8uc2lfY29kZSA9IFNFR1ZfQUNDRVJSOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpbmZvLnNpX3NpZ25vID0gU0lHU0VHVjsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2FkZHIgID0gKHZvaWQgKikgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKKworCXByX2RlYnVnKCJTV1B7Qn0gZW11bGF0aW9uOiBhY2Nlc3MgY2F1c2VkIG1lbW9yeSBhYm9ydCFcbiIpOworCWFybTY0X25vdGlmeV9kaWUoIklsbGVnYWwgbWVtb3J5IGFjY2VzcyIsIHJlZ3MsICZpbmZvLCAwKTsKK30KKworc3RhdGljIGludCBlbXVsYXRlX3N3cFgodW5zaWduZWQgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGludCAqZGF0YSwKKwkJCXVuc2lnbmVkIGludCB0eXBlKQoreworCXVuc2lnbmVkIGludCByZXMgPSAwOworCisJaWYgKCh0eXBlICE9IFRZUEVfU1dQQikgJiYgKGFkZHJlc3MgJiAweDMpKSB7CisJCS8qIFNXUCB0byB1bmFsaWduZWQgYWRkcmVzcyBub3QgcGVybWl0dGVkICovCisJCXByX2RlYnVnKCJTV1AgaW5zdHJ1Y3Rpb24gb24gdW5hbGlnbmVkIHBvaW50ZXIhXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCWlmICh0eXBlID09IFRZUEVfU1dQQikKKwkJCV9fdXNlcl9zd3BiX2FzbSgqZGF0YSwgYWRkcmVzcywgcmVzLCB0ZW1wKTsKKwkJZWxzZQorCQkJX191c2VyX3N3cF9hc20oKmRhdGEsIGFkZHJlc3MsIHJlcywgdGVtcCk7CisKKwkJaWYgKGxpa2VseShyZXMgIT0gLUVBR0FJTikgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlicmVhazsKKworCQljb25kX3Jlc2NoZWQoKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogc3dwX2hhbmRsZXIgbG9ncyB0aGUgaWQgb2YgY2FsbGluZyBwcm9jZXNzLCBkaXNzZWN0cyB0aGUgaW5zdHJ1Y3Rpb24sIHNhbml0eQorICogY2hlY2tzIHRoZSBtZW1vcnkgbG9jYXRpb24sIGNhbGxzIGVtdWxhdGVfc3dwWCBmb3IgdGhlIGFjdHVhbCBvcGVyYXRpb24gYW5kCisgKiBkZWFscyB3aXRoIGZpeHVwL2Vycm9yIGhhbmRsaW5nIGJlZm9yZSByZXR1cm5pbmcKKyAqLworc3RhdGljIGludCBzd3BfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIGluc3RyKQoreworCXUzMiBkZXN0cmVnLCBkYXRhLCB0eXBlLCBhZGRyZXNzID0gMDsKKwlpbnQgcm4sIHJ0MiwgcmVzID0gMDsKKworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTLCAxLCByZWdzLCByZWdzLT5wYyk7CisKKwl0eXBlID0gaW5zdHIgJiBUWVBFX1NXUEI7CisKKwlzd2l0Y2ggKGFybV9jaGVja19jb25kaXRpb24oaW5zdHIsIHJlZ3MtPnBzdGF0ZSkpIHsKKwljYXNlIEFSTV9PUENPREVfQ09ORFRFU1RfUEFTUzoKKwkJYnJlYWs7CisJY2FzZSBBUk1fT1BDT0RFX0NPTkRURVNUX0ZBSUw6CisJCS8qIENvbmRpdGlvbiBmYWlsZWQgLSByZXR1cm4gdG8gbmV4dCBpbnN0cnVjdGlvbiAqLworCQlnb3RvIHJldDsKKwljYXNlIEFSTV9PUENPREVfQ09ORFRFU1RfVU5DT05EOgorCQkvKiBJZiB1bmNvbmRpdGlvbmFsIGVuY29kaW5nIC0gbm90IGEgU1dQLCB1bmRlZiAqLworCQlyZXR1cm4gLUVGQVVMVDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlybiA9IGFhcmNoMzJfaW5zbl9leHRyYWN0X3JlZ19udW0oaW5zdHIsIEEzMl9STl9PRkZTRVQpOworCXJ0MiA9IGFhcmNoMzJfaW5zbl9leHRyYWN0X3JlZ19udW0oaW5zdHIsIEEzMl9SVDJfT0ZGU0VUKTsKKworCWFkZHJlc3MgPSAodTMyKXJlZ3MtPnVzZXJfcmVncy5yZWdzW3JuXTsKKwlkYXRhCT0gKHUzMilyZWdzLT51c2VyX3JlZ3MucmVnc1tydDJdOworCWRlc3RyZWcgPSBhYXJjaDMyX2luc25fZXh0cmFjdF9yZWdfbnVtKGluc3RyLCBBMzJfUlRfT0ZGU0VUKTsKKworCXByX2RlYnVnKCJhZGRyIGluIHIlZC0+MHglMDh4LCBkZXN0IGlzIHIlZCwgc291cmNlIGluIHIlZC0+MHglMDh4KVxuIiwKKwkJcm4sIGFkZHJlc3MsIGRlc3RyZWcsCisJCWFhcmNoMzJfaW5zbl9leHRyYWN0X3JlZ19udW0oaW5zdHIsIEEzMl9SVDJfT0ZGU0VUKSwgZGF0YSk7CisKKwkvKiBDaGVjayBhY2Nlc3MgaW4gcmVhc29uYWJsZSBhY2Nlc3MgcmFuZ2UgZm9yIGJvdGggU1dQIGFuZCBTV1BCICovCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAoYWRkcmVzcyAmIH4zKSwgNCkpIHsKKwkJcHJfZGVidWcoIlNXUHtCfSBlbXVsYXRpb246IGFjY2VzcyB0byAweCUwOHggbm90IGFsbG93ZWQhXG4iLAorCQkJYWRkcmVzcyk7CisJCWdvdG8gZmF1bHQ7CisJfQorCisJcmVzID0gZW11bGF0ZV9zd3BYKGFkZHJlc3MsICZkYXRhLCB0eXBlKTsKKwlpZiAocmVzID09IC1FRkFVTFQpCisJCWdvdG8gZmF1bHQ7CisJZWxzZSBpZiAocmVzID09IDApCisJCXJlZ3MtPnVzZXJfcmVncy5yZWdzW2Rlc3RyZWddID0gZGF0YTsKKworcmV0OgorCWlmICh0eXBlID09IFRZUEVfU1dQQikKKwkJdHJhY2VfaW5zdHJ1Y3Rpb25fZW11bGF0aW9uKCJzd3BiIiwgcmVncy0+cGMpOworCWVsc2UKKwkJdHJhY2VfaW5zdHJ1Y3Rpb25fZW11bGF0aW9uKCJzd3AiLCByZWdzLT5wYyk7CisKKwlwcl93YXJuX3JhdGVsaW1pdGVkKCJcIiVzXCIgKCVsZCkgdXNlcyBvYnNvbGV0ZSBTV1B7Qn0gaW5zdHJ1Y3Rpb24gYXQgMHglbGx4XG4iLAorCQkJY3VycmVudC0+Y29tbSwgKHVuc2lnbmVkIGxvbmcpY3VycmVudC0+cGlkLCByZWdzLT5wYyk7CisKKwlyZWdzLT5wYyArPSA0OworCXJldHVybiAwOworCitmYXVsdDoKKwlzZXRfc2VnZmF1bHQocmVncywgYWRkcmVzcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE9ubHkgZW11bGF0ZSBTV1AvU1dQQiBleGVjdXRlZCBpbiBBUk0gc3RhdGUvVXNlciBtb2RlLgorICogVGhlIGtlcm5lbCBtdXN0IGJlIFNXUCBmcmVlIGFuZCBTV1B7Qn0gZG9lcyBub3QgZXhpc3QgaW4gVGh1bWIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdW5kZWZfaG9vayBzd3BfaG9va3NbXSA9IHsKKwl7CisJCS5pbnN0cl9tYXNrCT0gMHgwZmIwMGZmMCwKKwkJLmluc3RyX3ZhbAk9IDB4MDEwMDAwOTAsCisJCS5wc3RhdGVfbWFzawk9IENPTVBBVF9QU1JfTU9ERV9NQVNLLAorCQkucHN0YXRlX3ZhbAk9IENPTVBBVF9QU1JfTU9ERV9VU1IsCisJCS5mbgkJPSBzd3BfaGFuZGxlcgorCX0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGluc25fZW11bGF0aW9uX29wcyBzd3Bfb3BzID0geworCS5uYW1lID0gInN3cCIsCisJLnN0YXR1cyA9IElOU05fT0JTT0xFVEUsCisJLmhvb2tzID0gc3dwX2hvb2tzLAorCS5zZXRfaHdfbW9kZSA9IE5VTEwsCit9OworCitzdGF0aWMgaW50IGNwMTViYXJyaWVyX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpbnN0cikKK3sKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUywgMSwgcmVncywgcmVncy0+cGMpOworCisJc3dpdGNoIChhcm1fY2hlY2tfY29uZGl0aW9uKGluc3RyLCByZWdzLT5wc3RhdGUpKSB7CisJY2FzZSBBUk1fT1BDT0RFX0NPTkRURVNUX1BBU1M6CisJCWJyZWFrOworCWNhc2UgQVJNX09QQ09ERV9DT05EVEVTVF9GQUlMOgorCQkvKiBDb25kaXRpb24gZmFpbGVkIC0gcmV0dXJuIHRvIG5leHQgaW5zdHJ1Y3Rpb24gKi8KKwkJZ290byByZXQ7CisJY2FzZSBBUk1fT1BDT0RFX0NPTkRURVNUX1VOQ09ORDoKKwkJLyogSWYgdW5jb25kaXRpb25hbCBlbmNvZGluZyAtIG5vdCBhIGJhcnJpZXIgaW5zdHJ1Y3Rpb24gKi8KKwkJcmV0dXJuIC1FRkFVTFQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChhYXJjaDMyX2luc25fbWNyX2V4dHJhY3RfY3JtKGluc3RyKSkgeworCWNhc2UgMTA6CisJCS8qCisJCSAqIGRtYiAtIG1jciBwMTUsIDAsIFJ0LCBjNywgYzEwLCA1CisJCSAqIGRzYiAtIG1jciBwMTUsIDAsIFJ0LCBjNywgYzEwLCA0CisJCSAqLworCQlpZiAoYWFyY2gzMl9pbnNuX21jcl9leHRyYWN0X29wYzIoaW5zdHIpID09IDUpIHsKKwkJCWRtYihzeSk7CisJCQl0cmFjZV9pbnN0cnVjdGlvbl9lbXVsYXRpb24oCisJCQkJIm1jciBwMTUsIDAsIFJ0LCBjNywgYzEwLCA1IDsgZG1iIiwgcmVncy0+cGMpOworCQl9IGVsc2UgeworCQkJZHNiKHN5KTsKKwkJCXRyYWNlX2luc3RydWN0aW9uX2VtdWxhdGlvbigKKwkJCQkibWNyIHAxNSwgMCwgUnQsIGM3LCBjMTAsIDQgOyBkc2IiLCByZWdzLT5wYyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSA1OgorCQkvKgorCQkgKiBpc2IgLSBtY3IgcDE1LCAwLCBSdCwgYzcsIGM1LCA0CisJCSAqCisJCSAqIFRha2luZyBhbiBleGNlcHRpb24gb3IgcmV0dXJuaW5nIGZyb20gb25lIGFjdHMgYXMgYW4KKwkJICogaW5zdHJ1Y3Rpb24gYmFycmllci4gU28gbm8gZXhwbGljaXQgYmFycmllciBuZWVkZWQgaGVyZS4KKwkJICovCisJCXRyYWNlX2luc3RydWN0aW9uX2VtdWxhdGlvbigKKwkJCSJtY3IgcDE1LCAwLCBSdCwgYzcsIGM1LCA0IDsgaXNiIiwgcmVncy0+cGMpOworCQlicmVhazsKKwl9CisKK3JldDoKKwlwcl93YXJuX3JhdGVsaW1pdGVkKCJcIiVzXCIgKCVsZCkgdXNlcyBkZXByZWNhdGVkIENQMTUgQmFycmllciBpbnN0cnVjdGlvbiBhdCAweCVsbHhcbiIsCisJCQljdXJyZW50LT5jb21tLCAodW5zaWduZWQgbG9uZyljdXJyZW50LT5waWQsIHJlZ3MtPnBjKTsKKworCXJlZ3MtPnBjICs9IDQ7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgU0NUTFJfRUwxX0NQMTVCRU4gKDEgPDwgNSkKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ19zY3Rscl9lbDEodTMyIGNsZWFyLCB1MzIgc2V0KQoreworCXUzMiB2YWw7CisKKwlhc20gdm9sYXRpbGUoIm1ycyAlMCwgc2N0bHJfZWwxIiA6ICI9ciIgKHZhbCkpOworCXZhbCAmPSB+Y2xlYXI7CisJdmFsIHw9IHNldDsKKwlhc20gdm9sYXRpbGUoIm1zciBzY3Rscl9lbDEsICUwIiA6IDogInIiICh2YWwpKTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX2NwMTVfYmVuKHZvaWQgKmluZm8pCit7CisJY29uZmlnX3NjdGxyX2VsMSgwLCBTQ1RMUl9FTDFfQ1AxNUJFTik7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfY3AxNV9iZW4odm9pZCAqaW5mbykKK3sKKwljb25maWdfc2N0bHJfZWwxKFNDVExSX0VMMV9DUDE1QkVOLCAwKTsKK30KKworc3RhdGljIGludCBjcHVfaG90cGx1Z19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpiLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9TVEFSVElORzoKKwljYXNlIENQVV9TVEFSVElOR19GUk9aRU46CisJCWVuYWJsZV9jcDE1X2JlbihOVUxMKTsKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCWNhc2UgQ1BVX0RZSU5HOgorCWNhc2UgQ1BVX0RZSU5HX0ZST1pFTjoKKwkJZGlzYWJsZV9jcDE1X2JlbihOVUxMKTsKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3B1X2hvdHBsdWdfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjcHVfaG90cGx1Z19ub3RpZnksCit9OworCitzdGF0aWMgaW50IGNwMTVfYmFycmllcl9zZXRfaHdfbW9kZShib29sIGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKSB7CisJCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X2hvdHBsdWdfbm90aWZpZXIpOworCQlvbl9lYWNoX2NwdShlbmFibGVfY3AxNV9iZW4sIE5VTEwsIHRydWUpOworCX0gZWxzZSB7CisJCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfaG90cGx1Z19ub3RpZmllcik7CisJCW9uX2VhY2hfY3B1KGRpc2FibGVfY3AxNV9iZW4sIE5VTEwsIHRydWUpOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IHVuZGVmX2hvb2sgY3AxNV9iYXJyaWVyX2hvb2tzW10gPSB7CisJeworCQkuaW5zdHJfbWFzawk9IDB4MGZmZjBmZGYsCisJCS5pbnN0cl92YWwJPSAweDBlMDcwZjlhLAorCQkucHN0YXRlX21hc2sJPSBDT01QQVRfUFNSX01PREVfTUFTSywKKwkJLnBzdGF0ZV92YWwJPSBDT01QQVRfUFNSX01PREVfVVNSLAorCQkuZm4JCT0gY3AxNWJhcnJpZXJfaGFuZGxlciwKKwl9LAorCXsKKwkJLmluc3RyX21hc2sJPSAweDBmZmYwZmZmLAorCQkuaW5zdHJfdmFsCT0gMHgwZTA3MGY5NSwKKwkJLnBzdGF0ZV9tYXNrCT0gQ09NUEFUX1BTUl9NT0RFX01BU0ssCisJCS5wc3RhdGVfdmFsCT0gQ09NUEFUX1BTUl9NT0RFX1VTUiwKKwkJLmZuCQk9IGNwMTViYXJyaWVyX2hhbmRsZXIsCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzIGNwMTVfYmFycmllcl9vcHMgPSB7CisJLm5hbWUgPSAiY3AxNV9iYXJyaWVyIiwKKwkuc3RhdHVzID0gSU5TTl9ERVBSRUNBVEVELAorCS5ob29rcyA9IGNwMTVfYmFycmllcl9ob29rcywKKwkuc2V0X2h3X21vZGUgPSBjcDE1X2JhcnJpZXJfc2V0X2h3X21vZGUsCit9OworCisvKgorICogSW52b2tlZCBhcyBsYXRlX2luaXRjYWxsLCBzaW5jZSBub3QgbmVlZGVkIGJlZm9yZSBpbml0IHNwYXduZWQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGFybXY4X2RlcHJlY2F0ZWRfaW5pdCh2b2lkKQoreworCWlmIChJU19FTkFCTEVEKENPTkZJR19TV1BfRU1VTEFUSU9OKSkKKwkJcmVnaXN0ZXJfaW5zbl9lbXVsYXRpb24oJnN3cF9vcHMpOworCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NQMTVfQkFSUklFUl9FTVVMQVRJT04pKQorCQlyZWdpc3Rlcl9pbnNuX2VtdWxhdGlvbigmY3AxNV9iYXJyaWVyX29wcyk7CisKKwlyZWdpc3Rlcl9pbnNuX2VtdWxhdGlvbl9zeXNjdGwoY3RsX2FiaSk7CisKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChhcm12OF9kZXByZWNhdGVkX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjI2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb250YWlucyBDUFUgc3BlY2lmaWMgZXJyYXRhIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFSTSBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJhbHRlcm5hdGl2ZXM6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisKKyNkZWZpbmUgTUlEUl9DT1JURVhfQTUzIE1JRFJfQ1BVX1BBUlQoQVJNX0NQVV9JTVBfQVJNLCBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E1MykKKyNkZWZpbmUgTUlEUl9DT1JURVhfQTU3IE1JRFJfQ1BVX1BBUlQoQVJNX0NQVV9JTVBfQVJNLCBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E1NykKKworLyoKKyAqIEFkZCBhIHN0cnVjdCBvciBhbm90aGVyIGRhdGF0eXBlIHRvIHRoZSB1bmlvbiBiZWxvdyBpZiB5b3UgbmVlZAorICogZGlmZmVyZW50IG1lYW5zIHRvIGRldGVjdCBhbiBhZmZlY3RlZCBDUFUuCisgKi8KK3N0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIHsKKwljb25zdCBjaGFyICpkZXNjOworCXUxNiBjYXBhYmlsaXR5OworCWJvb2wgKCppc19hZmZlY3RlZCkoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKik7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyIG1pZHJfbW9kZWw7CisJCQl1MzIgbWlkcl9yYW5nZV9taW4sIG1pZHJfcmFuZ2VfbWF4OworCQl9OworCX07Cit9OworCisjZGVmaW5lIENQVV9NT0RFTF9NQVNLIChNSURSX0lNUExFTUVOVE9SX01BU0sgfCBNSURSX1BBUlROVU1fTUFTSyB8IFwKKwkJCU1JRFJfQVJDSElURUNUVVJFX01BU0spCisKK3N0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkCitpc19hZmZlY3RlZF9taWRyX3JhbmdlKHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSkKK3sKKwl1MzIgbWlkciA9IHJlYWRfY3B1aWRfaWQoKTsKKworCWlmICgobWlkciAmIENQVV9NT0RFTF9NQVNLKSAhPSBlbnRyeS0+bWlkcl9tb2RlbCkKKwkJcmV0dXJuIGZhbHNlOworCisJbWlkciAmPSBNSURSX1JFVklTSU9OX01BU0sgfCBNSURSX1ZBUklBTlRfTUFTSzsKKworCXJldHVybiAobWlkciA+PSBlbnRyeS0+bWlkcl9yYW5nZV9taW4gJiYgbWlkciA8PSBlbnRyeS0+bWlkcl9yYW5nZV9tYXgpOworfQorCisjZGVmaW5lIE1JRFJfUkFOR0UobW9kZWwsIG1pbiwgbWF4KSBcCisJLmlzX2FmZmVjdGVkID0gaXNfYWZmZWN0ZWRfbWlkcl9yYW5nZSwgXAorCS5taWRyX21vZGVsID0gbW9kZWwsIFwKKwkubWlkcl9yYW5nZV9taW4gPSBtaW4sIFwKKwkubWlkcl9yYW5nZV9tYXggPSBtYXgKKworc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZXJyYXRhW10gPSB7CisjaWYJZGVmaW5lZChDT05GSUdfQVJNNjRfRVJSQVRVTV84MjYzMTkpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19BUk02NF9FUlJBVFVNXzgyNzMxOSkgfHwgXAorCWRlZmluZWQoQ09ORklHX0FSTTY0X0VSUkFUVU1fODI0MDY5KQorCXsKKwkvKiBDb3J0ZXgtQTUzIHIwcFswMTJdICovCisJCS5kZXNjID0gIkFSTSBlcnJhdGEgODI2MzE5LCA4MjczMTksIDgyNDA2OSIsCisJCS5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF9DTEVBTl9DQUNIRSwKKwkJTUlEUl9SQU5HRShNSURSX0NPUlRFWF9BNTMsIDB4MDAsIDB4MDIpLAorCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJNNjRfRVJSQVRVTV84MTk0NzIKKwl7CisJLyogQ29ydGV4LUE1MyByMHBbMDFdICovCisJCS5kZXNjID0gIkFSTSBlcnJhdGEgODE5NDcyIiwKKwkJLmNhcGFiaWxpdHkgPSBBUk02NF9XT1JLQVJPVU5EX0NMRUFOX0NBQ0hFLAorCQlNSURSX1JBTkdFKE1JRFJfQ09SVEVYX0E1MywgMHgwMCwgMHgwMSksCisJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUk02NF9FUlJBVFVNXzgzMjA3NQorCXsKKwkvKiBDb3J0ZXgtQTU3IHIwcDAgLSByMXAyICovCisJCS5kZXNjID0gIkFSTSBlcnJhdHVtIDgzMjA3NSIsCisJCS5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF9ERVZJQ0VfTE9BRF9BQ1FVSVJFLAorCQlNSURSX1JBTkdFKE1JRFJfQ09SVEVYX0E1NywgMHgwMCwgMHgxMiksCisJfSwKKyNlbmRpZgorCXsKKwl9Cit9OworCit2b2lkIGNoZWNrX2xvY2FsX2NwdV9lcnJhdGEodm9pZCkKK3sKKwlzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY3B1cyA9IGFybTY0X2VycmF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGNwdXNbaV0uZGVzYzsgaSsrKSB7CisJCWlmICghY3B1c1tpXS5pc19hZmZlY3RlZCgmY3B1c1tpXSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWNwdXNfaGF2ZV9jYXAoY3B1c1tpXS5jYXBhYmlsaXR5KSkKKwkJCXByX2luZm8oImVuYWJsaW5nIHdvcmthcm91bmQgZm9yICVzXG4iLCBjcHVzW2ldLmRlc2MpOworCQljcHVzX3NldF9jYXAoY3B1c1tpXS5jYXBhYmlsaXR5KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMKaW5kZXggNTA0ZmRhYS4uNTdiNjQxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1aW5mby5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWluZm8uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZXR5cGUuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CkBAIC0xMTEsNiArMTEyLDE1IEBACiAJZGlmZiB8PSBDSEVDSyhjbnRmcnEsIGJvb3QsIGN1ciwgY3B1KTsKIAogCS8qCisJICogVGhlIGtlcm5lbCB1c2VzIHNlbGYtaG9zdGVkIGRlYnVnIGZlYXR1cmVzIGFuZCBleHBlY3RzIENQVXMgdG8KKwkgKiBzdXBwb3J0IGlkZW50aWNhbCBkZWJ1ZyBmZWF0dXJlcy4gV2UgcHJlc2VudGx5IG5lZWQgQ1RYX0NNUHMsIFdSUHMsCisJICogYW5kIEJSUHMgdG8gYmUgaWRlbnRpY2FsLgorCSAqIElEX0FBNjRERlIxIGlzIGN1cnJlbnRseSBSRVMwLgorCSAqLworCWRpZmYgfD0gQ0hFQ0soaWRfYWE2NGRmcjAsIGJvb3QsIGN1ciwgY3B1KTsKKwlkaWZmIHw9IENIRUNLKGlkX2FhNjRkZnIxLCBib290LCBjdXIsIGNwdSk7CisKKwkvKgogCSAqIEV2ZW4gaW4gYmlnLkxJVFRMRSwgcHJvY2Vzc29ycyBzaG91bGQgYmUgaWRlbnRpY2FsIGluc3RydWN0aW9uLXNldAogCSAqIHdpc2UuCiAJICovCkBAIC0xNDMsNyArMTUzLDEyIEBACiAJZGlmZiB8PSBDSEVDSyhpZF9pc2FyMywgYm9vdCwgY3VyLCBjcHUpOwogCWRpZmYgfD0gQ0hFQ0soaWRfaXNhcjQsIGJvb3QsIGN1ciwgY3B1KTsKIAlkaWZmIHw9IENIRUNLKGlkX2lzYXI1LCBib290LCBjdXIsIGNwdSk7Ci0JZGlmZiB8PSBDSEVDSyhpZF9tbWZyMCwgYm9vdCwgY3VyLCBjcHUpOworCS8qCisJICogUmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlIEF1eFJlZyBmaWVsZCwgdGhlIEFJRlNSLCBBREZTUiwgYW5kCisJICogQUNUTFIgZm9ybWF0cyBjb3VsZCBkaWZmZXIgYWNyb3NzIENQVXMgYW5kIHRoZXJlZm9yZSB3b3VsZCBoYXZlIHRvCisJICogYmUgdHJhcHBlZCBmb3IgdmlydHVhbGl6YXRpb24gYW55d2F5LgorCSAqLworCWRpZmYgfD0gQ0hFQ0tfTUFTSyhpZF9tbWZyMCwgMHhmZjBmZmZmZiwgYm9vdCwgY3VyLCBjcHUpOwogCWRpZmYgfD0gQ0hFQ0soaWRfbW1mcjEsIGJvb3QsIGN1ciwgY3B1KTsKIAlkaWZmIHw9IENIRUNLKGlkX21tZnIyLCBib290LCBjdXIsIGNwdSk7CiAJZGlmZiB8PSBDSEVDSyhpZF9tbWZyMywgYm9vdCwgY3VyLCBjcHUpOwpAQCAtMTU1LDcgKzE3MCw3IEBACiAJICogcHJldGVuZCB0byBzdXBwb3J0IHRoZW0uCiAJICovCiAJV0FSTl9UQUlOVF9PTkNFKGRpZmYsIFRBSU5UX0NQVV9PVVRfT0ZfU1BFQywKLQkJCSJVbnN1cHBvcnRlZCBDUFUgZmVhdHVyZSB2YXJpYXRpb24uIik7CisJCQkiVW5zdXBwb3J0ZWQgQ1BVIGZlYXR1cmUgdmFyaWF0aW9uLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5mb19zdG9yZV9jcHUoc3RydWN0IGNwdWluZm9fYXJtNjQgKmluZm8pCkBAIC0xNjUsNiArMTgwLDggQEAKIAlpbmZvLT5yZWdfZGN6aWQgPSByZWFkX2NwdWlkKERDWklEX0VMMCk7CiAJaW5mby0+cmVnX21pZHIgPSByZWFkX2NwdWlkX2lkKCk7CiAKKwlpbmZvLT5yZWdfaWRfYWE2NGRmcjAgPSByZWFkX2NwdWlkKElEX0FBNjRERlIwX0VMMSk7CisJaW5mby0+cmVnX2lkX2FhNjRkZnIxID0gcmVhZF9jcHVpZChJRF9BQTY0REZSMV9FTDEpOwogCWluZm8tPnJlZ19pZF9hYTY0aXNhcjAgPSByZWFkX2NwdWlkKElEX0FBNjRJU0FSMF9FTDEpOwogCWluZm8tPnJlZ19pZF9hYTY0aXNhcjEgPSByZWFkX2NwdWlkKElEX0FBNjRJU0FSMV9FTDEpOwogCWluZm8tPnJlZ19pZF9hYTY0bW1mcjAgPSByZWFkX2NwdWlkKElEX0FBNjRNTUZSMF9FTDEpOwpAQCAtMTg2LDYgKzIwMyw4IEBACiAJaW5mby0+cmVnX2lkX3BmcjEgPSByZWFkX2NwdWlkKElEX1BGUjFfRUwxKTsKIAogCWNwdWluZm9fZGV0ZWN0X2ljYWNoZV9wb2xpY3koaW5mbyk7CisKKwljaGVja19sb2NhbF9jcHVfZXJyYXRhKCk7CiB9CiAKIHZvaWQgY3B1aW5mb19zdG9yZV9jcHUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2VmaS1lbnRyeS5TIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLWVudHJ5LlMKaW5kZXggZDE4YTQ0OS4uOGNlOWIwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZWZpLWVudHJ5LlMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLWVudHJ5LlMKQEAgLTYxLDcgKzYxLDggQEAKIAkgKi8KIAltb3YJeDIwLCB4MAkJLy8gRFRCIGFkZHJlc3MKIAlsZHIJeDAsIFtzcCwgIzE2XQkvLyByZWxvY2F0ZWQgX3RleHQgYWRkcmVzcwotCW1vdgl4MjEsIHgwCisJbGRyCXgyMSwgPXN0ZXh0X29mZnNldAorCWFkZAl4MjEsIHgwLCB4MjEKIAogCS8qCiAJICogQ2FsY3VsYXRlIHNpemUgb2YgdGhlIGtlcm5lbCBJbWFnZSAoc2FtZSBmb3Igb3JpZ2luYWwgYW5kIGNvcHkpLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9lZmkuYwppbmRleCA5NWM0OWViLi42ZmFjMjUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9lZmkuYwpAQCAtMTEsNiArMTEsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KQEAgLTExMiw4ICsxMTMsNiBAQAogCQllZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gJiAweGZmZmYsIHZlbmRvcik7CiAKIAlyZXR2YWwgPSBlZmlfY29uZmlnX2luaXQoTlVMTCk7Ci0JaWYgKHJldHZhbCA9PSAwKQotCQlzZXRfYml0KEVGSV9DT05GSUdfVEFCTEVTLCAmZWZpLmZsYWdzKTsKIAogb3V0OgogCWVhcmx5X21lbXVubWFwKGVmaS5zeXN0YWIsICBzaXplb2YoZWZpX3N5c3RlbV90YWJsZV90KSk7CkBAIC0xMjUsMTcgKzEyNCwxNyBAQAogICovCiBzdGF0aWMgX19pbml0IGludCBpc19yZXNlcnZlX3JlZ2lvbihlZmlfbWVtb3J5X2Rlc2NfdCAqbWQpCiB7Ci0JaWYgKCFpc19ub3JtYWxfcmFtKG1kKSkKKwlzd2l0Y2ggKG1kLT50eXBlKSB7CisJY2FzZSBFRklfTE9BREVSX0NPREU6CisJY2FzZSBFRklfTE9BREVSX0RBVEE6CisJY2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOgorCWNhc2UgRUZJX0JPT1RfU0VSVklDRVNfREFUQToKKwljYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOgogCQlyZXR1cm4gMDsKLQotCWlmIChtZC0+YXR0cmlidXRlICYgRUZJX01FTU9SWV9SVU5USU1FKQotCQlyZXR1cm4gMTsKLQotCWlmIChtZC0+dHlwZSA9PSBFRklfQUNQSV9SRUNMQUlNX01FTU9SWSB8fAotCSAgICBtZC0+dHlwZSA9PSBFRklfUkVTRVJWRURfVFlQRSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIGlzX25vcm1hbF9yYW0obWQpOwogfQogCiBzdGF0aWMgX19pbml0IHZvaWQgcmVzZXJ2ZV9yZWdpb25zKHZvaWQpCkBAIC00NzEsMyArNDcwLDE3IEBACiAJcmV0dXJuIC0xOwogfQogZWFybHlfaW5pdGNhbGwoYXJtNjRfZW50ZXJfdmlydHVhbF9tb2RlKTsKKworc3RhdGljIGludCBfX2luaXQgYXJtNjRfZG1pX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIE9uIGFybTY0LCBETUkgZGVwZW5kcyBvbiBVRUZJLCBhbmQgZG1pX3NjYW5fbWFjaGluZSgpIG5lZWRzIHRvCisJICogYmUgY2FsbGVkIGVhcmx5IGJlY2F1c2UgZG1pX2lkX2luaXQoKSwgd2hpY2ggaXMgYW4gYXJjaF9pbml0Y2FsbAorCSAqIGl0c2VsZiwgZGVwZW5kcyBvbiBkbWlfc2Nhbl9tYWNoaW5lKCkgaGF2aW5nIGJlZW4gY2FsbGVkIGFscmVhZHkuCisJICovCisJZG1pX3NjYW5fbWFjaGluZSgpOworCWlmIChkbWlfYXZhaWxhYmxlKQorCQlkbWlfc2V0X2R1bXBfc3RhY2tfYXJjaF9kZXNjKCk7CisJcmV0dXJuIDA7Cit9Citjb3JlX2luaXRjYWxsKGFybTY0X2RtaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5LWZ0cmFjZS5TIGIvYXJjaC9hcm02NC9rZXJuZWwvZW50cnktZnRyYWNlLlMKaW5kZXggMzhlNzA0ZS4uMDhjYWZjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZW50cnktZnRyYWNlLlMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZW50cnktZnRyYWNlLlMKQEAgLTk4LDggKzk4LDggQEAKIEVOVFJZKF9tY291bnQpCiAJbWNvdW50X2VudGVyCiAKLQlsZHIJeDAsID1mdHJhY2VfdHJhY2VfZnVuY3Rpb24KLQlsZHIJeDIsIFt4MF0KKwlhZHJwCXgwLCBmdHJhY2VfdHJhY2VfZnVuY3Rpb24KKwlsZHIJeDIsIFt4MCwgIzpsbzEyOmZ0cmFjZV90cmFjZV9mdW5jdGlvbl0KIAlhZHIJeDAsIGZ0cmFjZV9zdHViCiAJY21wCXgwLCB4MgkJCS8vIGlmIChmdHJhY2VfdHJhY2VfZnVuY3Rpb24KIAliLmVxCXNraXBfZnRyYWNlX2NhbGwJLy8gICAgICE9IGZ0cmFjZV9zdHViKSB7CkBAIC0xMTUsMTQgKzExNSwxNSBAQAogCW1jb3VudF9leGl0CQkJLy8gICByZXR1cm47CiAJCQkJCS8vIH0KIHNraXBfZnRyYWNlX2NhbGw6Ci0JbGRyCXgxLCA9ZnRyYWNlX2dyYXBoX3JldHVybgotCWxkcgl4MiwgW3gxXQkJLy8gICBpZiAoKGZ0cmFjZV9ncmFwaF9yZXR1cm4KLQljbXAJeDAsIHgyCQkJLy8gICAgICAgICE9IGZ0cmFjZV9zdHViKQotCWIubmUJZnRyYWNlX2dyYXBoX2NhbGxlcgorCWFkcnAJeDEsIGZ0cmFjZV9ncmFwaF9yZXR1cm4KKwlsZHIJeDIsIFt4MSwgIzpsbzEyOmZ0cmFjZV9ncmFwaF9yZXR1cm5dCisJY21wCXgwLCB4MgkJCS8vICAgaWYgKChmdHJhY2VfZ3JhcGhfcmV0dXJuCisJYi5uZQlmdHJhY2VfZ3JhcGhfY2FsbGVyCS8vICAgICAgICAhPSBmdHJhY2Vfc3R1YikKIAotCWxkcgl4MSwgPWZ0cmFjZV9ncmFwaF9lbnRyeQkvLyAgICAgfHwgKGZ0cmFjZV9ncmFwaF9lbnRyeQotCWxkcgl4MiwgW3gxXQkJLy8gICAgICAgICE9IGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViKSkKLQlsZHIJeDAsID1mdHJhY2VfZ3JhcGhfZW50cnlfc3R1YgorCWFkcnAJeDEsIGZ0cmFjZV9ncmFwaF9lbnRyeQkvLyAgICAgfHwgKGZ0cmFjZV9ncmFwaF9lbnRyeQorCWFkcnAJeDAsIGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViIC8vICAgICAhPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YikpCisJbGRyCXgyLCBbeDEsICM6bG8xMjpmdHJhY2VfZ3JhcGhfZW50cnldCisJYWRkCXgwLCB4MCwgIzpsbzEyOmZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViCiAJY21wCXgwLCB4MgogCWIubmUJZnRyYWNlX2dyYXBoX2NhbGxlcgkvLyAgICAgZnRyYWNlX2dyYXBoX2NhbGxlcigpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9hcm02NC9rZXJuZWwvZW50cnkuUwppbmRleCA3MjZiOTEwLi5mZDRmYTM3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5LlMKQEAgLTY0LDI1ICs2NCwyNiBAQAogI2RlZmluZSBCQURfRVJST1IJMwogCiAJLm1hY3JvCWtlcm5lbF9lbnRyeSwgZWwsIHJlZ3NpemUgPSA2NAotCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSBTX0xSCS8vIHJvb20gZm9yIExSLCBTUCwgU1BTUiwgRUxSCisJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQogCS5pZglccmVnc2l6ZSA9PSAzMgogCW1vdgl3MCwgdzAJCQkJLy8gemVybyB1cHBlciAzMiBiaXRzIG9mIHgwCiAJLmVuZGlmCi0JcHVzaAl4MjgsIHgyOQotCXB1c2gJeDI2LCB4MjcKLQlwdXNoCXgyNCwgeDI1Ci0JcHVzaAl4MjIsIHgyMwotCXB1c2gJeDIwLCB4MjEKLQlwdXNoCXgxOCwgeDE5Ci0JcHVzaAl4MTYsIHgxNwotCXB1c2gJeDE0LCB4MTUKLQlwdXNoCXgxMiwgeDEzCi0JcHVzaAl4MTAsIHgxMQotCXB1c2gJeDgsIHg5Ci0JcHVzaAl4NiwgeDcKLQlwdXNoCXg0LCB4NQotCXB1c2gJeDIsIHgzCi0JcHVzaAl4MCwgeDEKKwlzdHAJeDAsIHgxLCBbc3AsICMxNiAqIDBdCisJc3RwCXgyLCB4MywgW3NwLCAjMTYgKiAxXQorCXN0cAl4NCwgeDUsIFtzcCwgIzE2ICogMl0KKwlzdHAJeDYsIHg3LCBbc3AsICMxNiAqIDNdCisJc3RwCXg4LCB4OSwgW3NwLCAjMTYgKiA0XQorCXN0cAl4MTAsIHgxMSwgW3NwLCAjMTYgKiA1XQorCXN0cAl4MTIsIHgxMywgW3NwLCAjMTYgKiA2XQorCXN0cAl4MTQsIHgxNSwgW3NwLCAjMTYgKiA3XQorCXN0cAl4MTYsIHgxNywgW3NwLCAjMTYgKiA4XQorCXN0cAl4MTgsIHgxOSwgW3NwLCAjMTYgKiA5XQorCXN0cAl4MjAsIHgyMSwgW3NwLCAjMTYgKiAxMF0KKwlzdHAJeDIyLCB4MjMsIFtzcCwgIzE2ICogMTFdCisJc3RwCXgyNCwgeDI1LCBbc3AsICMxNiAqIDEyXQorCXN0cAl4MjYsIHgyNywgW3NwLCAjMTYgKiAxM10KKwlzdHAJeDI4LCB4MjksIFtzcCwgIzE2ICogMTRdCisKIAkuaWYJXGVsID09IDAKIAltcnMJeDIxLCBzcF9lbDAKIAlnZXRfdGhyZWFkX2luZm8gdHNrCQkJLy8gRW5zdXJlIE1EU0NSX0VMMS5TUyBpcyBjbGVhciwKQEAgLTExOCwzMyArMTE5LDMxIEBACiAJLmlmCVxlbCA9PSAwCiAJY3RfdXNlcl9lbnRlcgogCWxkcgl4MjMsIFtzcCwgI1NfU1BdCQkvLyBsb2FkIHJldHVybiBzdGFjayBwb2ludGVyCi0JLmVuZGlmCi0JLmlmCVxyZXQKLQlsZHIJeDEsIFtzcCwgI1NfWDFdCQkJLy8gcHJlc2VydmUgeDAgKHN5c2NhbGwgcmV0dXJuKQotCWFkZAlzcCwgc3AsIFNfWDIKLQkuZWxzZQotCXBvcAl4MCwgeDEKLQkuZW5kaWYKLQlwb3AJeDIsIHgzCQkJCS8vIGxvYWQgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycwotCXBvcAl4NCwgeDUKLQlwb3AJeDYsIHg3Ci0JcG9wCXg4LCB4OQotCW1zcgllbHJfZWwxLCB4MjEJCQkvLyBzZXQgdXAgdGhlIHJldHVybiBkYXRhCi0JbXNyCXNwc3JfZWwxLCB4MjIKLQkuaWYJXGVsID09IDAKIAltc3IJc3BfZWwwLCB4MjMKIAkuZW5kaWYKLQlwb3AJeDEwLCB4MTEKLQlwb3AJeDEyLCB4MTMKLQlwb3AJeDE0LCB4MTUKLQlwb3AJeDE2LCB4MTcKLQlwb3AJeDE4LCB4MTkKLQlwb3AJeDIwLCB4MjEKLQlwb3AJeDIyLCB4MjMKLQlwb3AJeDI0LCB4MjUKLQlwb3AJeDI2LCB4MjcKLQlwb3AJeDI4LCB4MjkKLQlsZHIJbHIsIFtzcF0sICNTX0ZSQU1FX1NJWkUgLSBTX0xSCS8vIGxvYWQgTFIgYW5kIHJlc3RvcmUgU1AKKwltc3IJZWxyX2VsMSwgeDIxCQkJLy8gc2V0IHVwIHRoZSByZXR1cm4gZGF0YQorCW1zcglzcHNyX2VsMSwgeDIyCisJLmlmCVxyZXQKKwlsZHIJeDEsIFtzcCwgI1NfWDFdCQkJLy8gcHJlc2VydmUgeDAgKHN5c2NhbGwgcmV0dXJuKQorCS5lbHNlCisJbGRwCXgwLCB4MSwgW3NwLCAjMTYgKiAwXQorCS5lbmRpZgorCWxkcAl4MiwgeDMsIFtzcCwgIzE2ICogMV0KKwlsZHAJeDQsIHg1LCBbc3AsICMxNiAqIDJdCisJbGRwCXg2LCB4NywgW3NwLCAjMTYgKiAzXQorCWxkcAl4OCwgeDksIFtzcCwgIzE2ICogNF0KKwlsZHAJeDEwLCB4MTEsIFtzcCwgIzE2ICogNV0KKwlsZHAJeDEyLCB4MTMsIFtzcCwgIzE2ICogNl0KKwlsZHAJeDE0LCB4MTUsIFtzcCwgIzE2ICogN10KKwlsZHAJeDE2LCB4MTcsIFtzcCwgIzE2ICogOF0KKwlsZHAJeDE4LCB4MTksIFtzcCwgIzE2ICogOV0KKwlsZHAJeDIwLCB4MjEsIFtzcCwgIzE2ICogMTBdCisJbGRwCXgyMiwgeDIzLCBbc3AsICMxNiAqIDExXQorCWxkcAl4MjQsIHgyNSwgW3NwLCAjMTYgKiAxMl0KKwlsZHAJeDI2LCB4MjcsIFtzcCwgIzE2ICogMTNdCisJbGRwCXgyOCwgeDI5LCBbc3AsICMxNiAqIDE0XQorCWxkcglsciwgW3NwLCAjU19MUl0KKwlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCQkvLyByZXN0b3JlIHNwCiAJZXJldAkJCQkJLy8gcmV0dXJuIHRvIGtlcm5lbAogCS5lbmRtCiAKQEAgLTE2OCw3ICsxNjcsOCBAQAogICogSW50ZXJydXB0IGhhbmRsaW5nLgogICovCiAJLm1hY3JvCWlycV9oYW5kbGVyCi0JbGRyCXgxLCBoYW5kbGVfYXJjaF9pcnEKKwlhZHJwCXgxLCBoYW5kbGVfYXJjaF9pcnEKKwlsZHIJeDEsIFt4MSwgIzpsbzEyOmhhbmRsZV9hcmNoX2lycV0KIAltb3YJeDAsIHNwCiAJYmxyCXgxCiAJLmVuZG0KQEAgLTQ1NSw4ICs0NTUsOCBAQAogCWJpYwl4MCwgeDI2LCAjKDB4ZmYgPDwgNTYpCiAJbW92CXgxLCB4MjUKIAltb3YJeDIsIHNwCi0JYWRyCWxyLCByZXRfdG9fdXNlcgotCWIJZG9fbWVtX2Fib3J0CisJYmwJZG9fbWVtX2Fib3J0CisJYglyZXRfdG9fdXNlcgogZWwwX2lhOgogCS8qCiAJICogSW5zdHJ1Y3Rpb24gYWJvcnQgaGFuZGxpbmcKQEAgLTQ2OCw4ICs0NjgsOCBAQAogCW1vdgl4MCwgeDI2CiAJb3JyCXgxLCB4MjUsICMxIDw8IDI0CQkvLyB1c2UgcmVzZXJ2ZWQgSVNTIGJpdCBmb3IgaW5zdHJ1Y3Rpb24gYWJvcnRzCiAJbW92CXgyLCBzcAotCWFkcglsciwgcmV0X3RvX3VzZXIKLQliCWRvX21lbV9hYm9ydAorCWJsCWRvX21lbV9hYm9ydAorCWIJcmV0X3RvX3VzZXIKIGVsMF9mcHNpbWRfYWNjOgogCS8qCiAJICogRmxvYXRpbmcgUG9pbnQgb3IgQWR2YW5jZWQgU0lNRCBhY2Nlc3MKQEAgLTQ3OCw4ICs0NzgsOCBAQAogCWN0X3VzZXJfZXhpdAogCW1vdgl4MCwgeDI1CiAJbW92CXgxLCBzcAotCWFkcglsciwgcmV0X3RvX3VzZXIKLQliCWRvX2Zwc2ltZF9hY2MKKwlibAlkb19mcHNpbWRfYWNjCisJYglyZXRfdG9fdXNlcgogZWwwX2Zwc2ltZF9leGM6CiAJLyoKIAkgKiBGbG9hdGluZyBQb2ludCBvciBBZHZhbmNlZCBTSU1EIGV4Y2VwdGlvbgpAQCAtNDg4LDggKzQ4OCw4IEBACiAJY3RfdXNlcl9leGl0CiAJbW92CXgwLCB4MjUKIAltb3YJeDEsIHNwCi0JYWRyCWxyLCByZXRfdG9fdXNlcgotCWIJZG9fZnBzaW1kX2V4YworCWJsCWRvX2Zwc2ltZF9leGMKKwliCXJldF90b191c2VyCiBlbDBfc3BfcGM6CiAJLyoKIAkgKiBTdGFjayBvciBQQyBhbGlnbm1lbnQgZXhjZXB0aW9uIGhhbmRsaW5nCkBAIC01MDAsOCArNTAwLDggQEAKIAltb3YJeDAsIHgyNgogCW1vdgl4MSwgeDI1CiAJbW92CXgyLCBzcAotCWFkcglsciwgcmV0X3RvX3VzZXIKLQliCWRvX3NwX3BjX2Fib3J0CisJYmwJZG9fc3BfcGNfYWJvcnQKKwliCXJldF90b191c2VyCiBlbDBfdW5kZWY6CiAJLyoKIAkgKiBVbmRlZmluZWQgaW5zdHJ1Y3Rpb24KQEAgLTUxMCw4ICs1MTAsOCBAQAogCWVuYWJsZV9kYmdfYW5kX2lycQogCWN0X3VzZXJfZXhpdAogCW1vdgl4MCwgc3AKLQlhZHIJbHIsIHJldF90b191c2VyCi0JYglkb191bmRlZmluc3RyCisJYmwJZG9fdW5kZWZpbnN0cgorCWIJcmV0X3RvX3VzZXIKIGVsMF9kYmc6CiAJLyoKIAkgKiBEZWJ1ZyBleGNlcHRpb24gaGFuZGxpbmcKQEAgLTUzMCw4ICs1MzAsOCBAQAogCW1vdgl4MCwgc3AKIAltb3YJeDEsICNCQURfU1lOQwogCW1ycwl4MiwgZXNyX2VsMQotCWFkcglsciwgcmV0X3RvX3VzZXIKLQliCWJhZF9tb2RlCisJYmwJYmFkX21vZGUKKwliCXJldF90b191c2VyCiBFTkRQUk9DKGVsMF9zeW5jKQogCiAJLmFsaWduCTYKQEAgLTY1MywxNCArNjUzLDE1IEBACiAJbGRyCXgxNiwgW3RzaywgI1RJX0ZMQUdTXQkJLy8gY2hlY2sgZm9yIHN5c2NhbGwgaG9va3MKIAl0c3QJeDE2LCAjX1RJRl9TWVNDQUxMX1dPUksKIAliLm5lCV9fc3lzX3RyYWNlCi0JYWRyCWxyLCByZXRfZmFzdF9zeXNjYWxsCQkvLyByZXR1cm4gYWRkcmVzcwogCWNtcCAgICAgc2Nubywgc2NfbnIgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB1cHBlciBzeXNjYWxsIGxpbWl0CiAJYi5ocwluaV9zeXMKIAlsZHIJeDE2LCBbc3RibCwgc2NubywgbHNsICMzXQkvLyBhZGRyZXNzIGluIHRoZSBzeXNjYWxsIHRhYmxlCi0JYnIJeDE2CQkJCS8vIGNhbGwgc3lzXyogcm91dGluZQorCWJscgl4MTYJCQkJLy8gY2FsbCBzeXNfKiByb3V0aW5lCisJYglyZXRfZmFzdF9zeXNjYWxsCiBuaV9zeXM6CiAJbW92CXgwLCBzcAotCWIJZG9fbmlfc3lzY2FsbAorCWJsCWRvX25pX3N5c2NhbGwKKwliCXJldF9mYXN0X3N5c2NhbGwKIEVORFBST0MoZWwwX3N2YykKIAogCS8qCkBAIC02NjgsMjYgKzY2OSwzOCBAQAogCSAqIHN3aXRjaGVzLCBhbmQgd2FpdGluZyBmb3Igb3VyIHBhcmVudCB0byByZXNwb25kLgogCSAqLwogX19zeXNfdHJhY2U6Ci0JbW92CXgwLCBzcAorCW1vdgl3MCwgIy0xCQkJCS8vIHNldCBkZWZhdWx0IGVycm5vIGZvcgorCWNtcCAgICAgc2NubywgeDAJCQkvLyB1c2VyLWlzc3VlZCBzeXNjYWxsKC0xKQorCWIubmUJMWYKKwltb3YJeDAsICMtRU5PU1lTCisJc3RyCXgwLCBbc3AsICNTX1gwXQorMToJbW92CXgwLCBzcAogCWJsCXN5c2NhbGxfdHJhY2VfZW50ZXIKLQlhZHIJbHIsIF9fc3lzX3RyYWNlX3JldHVybgkJLy8gcmV0dXJuIGFkZHJlc3MKKwljbXAJdzAsICMtMQkJCQkvLyBza2lwIHRoZSBzeXNjYWxsPworCWIuZXEJX19zeXNfdHJhY2VfcmV0dXJuX3NraXBwZWQKIAl1eHR3CXNjbm8sIHcwCQkJLy8gc3lzY2FsbCBudW1iZXIgKHBvc3NpYmx5IG5ldykKIAltb3YJeDEsIHNwCQkJCS8vIHBvaW50ZXIgdG8gcmVncwogCWNtcAlzY25vLCBzY19ucgkJCS8vIGNoZWNrIHVwcGVyIHN5c2NhbGwgbGltaXQKLQliLmhzCW5pX3N5cworCWIuaHMJX19uaV9zeXNfdHJhY2UKIAlsZHAJeDAsIHgxLCBbc3BdCQkJLy8gcmVzdG9yZSB0aGUgc3lzY2FsbCBhcmdzCiAJbGRwCXgyLCB4MywgW3NwLCAjU19YMl0KIAlsZHAJeDQsIHg1LCBbc3AsICNTX1g0XQogCWxkcAl4NiwgeDcsIFtzcCwgI1NfWDZdCiAJbGRyCXgxNiwgW3N0YmwsIHNjbm8sIGxzbCAjM10JLy8gYWRkcmVzcyBpbiB0aGUgc3lzY2FsbCB0YWJsZQotCWJyCXgxNgkJCQkvLyBjYWxsIHN5c18qIHJvdXRpbmUKKwlibHIJeDE2CQkJCS8vIGNhbGwgc3lzXyogcm91dGluZQogCiBfX3N5c190cmFjZV9yZXR1cm46Ci0Jc3RyCXgwLCBbc3BdCQkJLy8gc2F2ZSByZXR1cm5lZCB4MAorCXN0cgl4MCwgW3NwLCAjU19YMF0JCQkvLyBzYXZlIHJldHVybmVkIHgwCitfX3N5c190cmFjZV9yZXR1cm5fc2tpcHBlZDoKIAltb3YJeDAsIHNwCiAJYmwJc3lzY2FsbF90cmFjZV9leGl0CiAJYglyZXRfdG9fdXNlcgogCitfX25pX3N5c190cmFjZToKKwltb3YJeDAsIHNwCisJYmwJZG9fbmlfc3lzY2FsbAorCWIJX19zeXNfdHJhY2VfcmV0dXJuCisKIC8qCiAgKiBTcGVjaWFsIHN5c3RlbSBjYWxsIHdyYXBwZXJzLgogICovCkBAIC02OTUsNiArNzA4LDMgQEAKIAltb3YJeDAsIHNwCiAJYglzeXNfcnRfc2lncmV0dXJuCiBFTkRQUk9DKHN5c19ydF9zaWdyZXR1cm5fd3JhcHBlcikKLQotRU5UUlkoaGFuZGxlX2FyY2hfaXJxKQotCS5xdWFkCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvYXJtNjQva2VybmVsL2hlYWQuUwppbmRleCAwYTZlNGY5Li44Y2U4OGUwIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvaGVhZC5TCkBAIC0xMzIsNiArMTMyLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VGSQorCS5nbG9ibAlzdGV4dF9vZmZzZXQKKwkuc2V0CXN0ZXh0X29mZnNldCwgc3RleHQgLSBlZmlfaGVhZAogCS5hbGlnbiAzCiBwZV9oZWFkZXI6CiAJLmFzY2lpCSJQRSIKQEAgLTE1NSwxMiArMTU3LDEyIEBACiAJLmxvbmcJMAkJCQkvLyBTaXplT2ZJbml0aWFsaXplZERhdGEKIAkubG9uZwkwCQkJCS8vIFNpemVPZlVuaW5pdGlhbGl6ZWREYXRhCiAJLmxvbmcJZWZpX3N0dWJfZW50cnkgLSBlZmlfaGVhZAkvLyBBZGRyZXNzT2ZFbnRyeVBvaW50Ci0JLmxvbmcJc3RleHQgLSBlZmlfaGVhZAkJLy8gQmFzZU9mQ29kZQorCS5sb25nCXN0ZXh0X29mZnNldAkJCS8vIEJhc2VPZkNvZGUKIAogZXh0cmFfaGVhZGVyX2ZpZWxkczoKIAkucXVhZAkwCQkJCS8vIEltYWdlQmFzZQotCS5sb25nCTB4MjAJCQkJLy8gU2VjdGlvbkFsaWdubWVudAotCS5sb25nCTB4OAkJCQkvLyBGaWxlQWxpZ25tZW50CisJLmxvbmcJMHgxMDAwCQkJCS8vIFNlY3Rpb25BbGlnbm1lbnQKKwkubG9uZwlQRUNPRkZfRklMRV9BTElHTk1FTlQJCS8vIEZpbGVBbGlnbm1lbnQKIAkuc2hvcnQJMAkJCQkvLyBNYWpvck9wZXJhdGluZ1N5c3RlbVZlcnNpb24KIAkuc2hvcnQJMAkJCQkvLyBNaW5vck9wZXJhdGluZ1N5c3RlbVZlcnNpb24KIAkuc2hvcnQJMAkJCQkvLyBNYWpvckltYWdlVmVyc2lvbgpAQCAtMTcyLDcgKzE3NCw3IEBACiAJLmxvbmcJX2VuZCAtIGVmaV9oZWFkCQkJLy8gU2l6ZU9mSW1hZ2UKIAogCS8vIEV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBrZXJuZWwgaW1hZ2UgaXMgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBoZWFkZXIKLQkubG9uZwlzdGV4dCAtIGVmaV9oZWFkCQkvLyBTaXplT2ZIZWFkZXJzCisJLmxvbmcJc3RleHRfb2Zmc2V0CQkJLy8gU2l6ZU9mSGVhZGVycwogCS5sb25nCTAJCQkJLy8gQ2hlY2tTdW0KIAkuc2hvcnQJMHhhCQkJCS8vIFN1YnN5c3RlbSAoRUZJIGFwcGxpY2F0aW9uKQogCS5zaG9ydAkwCQkJCS8vIERsbENoYXJhY3RlcmlzdGljcwpAQCAtMjE3LDE2ICsyMTksMjQgQEAKIAkuYnl0ZQkwCiAJLmJ5dGUJMCAgICAgICAgCQkvLyBlbmQgb2YgMCBwYWRkaW5nIG9mIHNlY3Rpb24gbmFtZQogCS5sb25nCV9lbmQgLSBzdGV4dAkJLy8gVmlydHVhbFNpemUKLQkubG9uZwlzdGV4dCAtIGVmaV9oZWFkCS8vIFZpcnR1YWxBZGRyZXNzCisJLmxvbmcJc3RleHRfb2Zmc2V0CQkvLyBWaXJ0dWFsQWRkcmVzcwogCS5sb25nCV9lZGF0YSAtIHN0ZXh0CQkvLyBTaXplT2ZSYXdEYXRhCi0JLmxvbmcJc3RleHQgLSBlZmlfaGVhZAkvLyBQb2ludGVyVG9SYXdEYXRhCisJLmxvbmcJc3RleHRfb2Zmc2V0CQkvLyBQb2ludGVyVG9SYXdEYXRhCiAKIAkubG9uZwkwCQkvLyBQb2ludGVyVG9SZWxvY2F0aW9ucyAoMCBmb3IgZXhlY3V0YWJsZXMpCiAJLmxvbmcJMAkJLy8gUG9pbnRlclRvTGluZU51bWJlcnMgKDAgZm9yIGV4ZWN1dGFibGVzKQogCS5zaG9ydAkwCQkvLyBOdW1iZXJPZlJlbG9jYXRpb25zICAoMCBmb3IgZXhlY3V0YWJsZXMpCiAJLnNob3J0CTAJCS8vIE51bWJlck9mTGluZU51bWJlcnMgICgwIGZvciBleGVjdXRhYmxlcykKIAkubG9uZwkweGUwNTAwMDIwCS8vIENoYXJhY3RlcmlzdGljcyAoc2VjdGlvbiBmbGFncykKLQkuYWxpZ24gNQorCisJLyoKKwkgKiBFRkkgd2lsbCBsb2FkIHN0ZXh0IG9ud2FyZHMgYXQgdGhlIDRrIHNlY3Rpb24gYWxpZ25tZW50CisJICogZGVzY3JpYmVkIGluIHRoZSBQRS9DT0ZGIGhlYWRlci4gVG8gZW5zdXJlIHRoYXQgaW5zdHJ1Y3Rpb24KKwkgKiBzZXF1ZW5jZXMgdXNpbmcgYW4gYWRycCBhbmQgYSA6bG8xMjogaW1tZWRpYXRlIHdpbGwgZnVuY3Rpb24KKwkgKiBjb3JyZWN0bHkgYXQgdGhpcyBhbGlnbm1lbnQsIHdlIG11c3QgZW5zdXJlIHRoYXQgc3RleHQgaXMKKwkgKiBwbGFjZWQgYXQgYSA0ayBib3VuZGFyeSBpbiB0aGUgSW1hZ2UgdG8gYmVnaW4gd2l0aC4KKwkgKi8KKwkuYWxpZ24gMTIKICNlbmRpZgogCiBFTlRSWShzdGV4dCkKQEAgLTIzOCw3ICsyNDgsMTMgQEAKIAltb3YJeDAsIHgyMgogCWJsCWxvb2t1cF9wcm9jZXNzb3JfdHlwZQogCW1vdgl4MjMsIHgwCQkJCS8vIHgyMz1jdXJyZW50IGNwdV90YWJsZQotCWNiegl4MjMsIF9fZXJyb3JfcAkJCS8vIGludmFsaWQgcHJvY2Vzc29yICh4MjM9MCk/CisJLyoKKwkgKiBfX2Vycm9yX3AgbWF5IGVuZCB1cCBvdXQgb2YgcmFuZ2UgZm9yIGNieiBpZiB0ZXh0IGFyZWFzIGFyZQorCSAqIGFsaWduZWQgdXAgdG8gc2VjdGlvbiBzaXplcy4KKwkgKi8KKwljYm56CXgyMywgMWYJCQkJLy8gaW52YWxpZCBwcm9jZXNzb3IgKHgyMz0wKT8KKwliCV9fZXJyb3JfcAorMToKIAlibAlfX3ZldF9mZHQKIAlibAlfX2NyZWF0ZV9wYWdlX3RhYmxlcwkJLy8geDI1PVRUQlIwLCB4MjY9VFRCUjEKIAkvKgpAQCAtMjUwLDI0NyArMjY2LDMxIEBACiAJICovCiAJbGRyCXgyNywgX19zd2l0Y2hfZGF0YQkJLy8gYWRkcmVzcyB0byBqdW1wIHRvIGFmdGVyCiAJCQkJCQkvLyBNTVUgaGFzIGJlZW4gZW5hYmxlZAotCWFkcglsciwgX19lbmFibGVfbW11CQkvLyByZXR1cm4gKFBJQykgYWRkcmVzcworCWFkcnAJbHIsIF9fZW5hYmxlX21tdQkJLy8gcmV0dXJuIChQSUMpIGFkZHJlc3MKKwlhZGQJbHIsIGxyLCAjOmxvMTI6X19lbmFibGVfbW11CiAJbGRyCXgxMiwgW3gyMywgI0NQVV9JTkZPX1NFVFVQXQogCWFkZAl4MTIsIHgxMiwgeDI4CQkJLy8gX192aXJ0X3RvX3BoeXMKIAlicgl4MTIJCQkJLy8gaW5pdGlhbGlzZSBwcm9jZXNzb3IKIEVORFBST0Moc3RleHQpCiAKIC8qCi0gKiBJZiB3ZSdyZSBmb3J0dW5hdGUgZW5vdWdoIHRvIGJvb3QgYXQgRUwyLCBlbnN1cmUgdGhhdCB0aGUgd29ybGQgaXMKLSAqIHNhbmUgYmVmb3JlIGRyb3BwaW5nIHRvIEVMMS4KLSAqCi0gKiBSZXR1cm5zIGVpdGhlciBCT09UX0NQVV9NT0RFX0VMMSBvciBCT09UX0NQVV9NT0RFX0VMMiBpbiB4MjAgaWYKLSAqIGJvb3RlZCBpbiBFTDEgb3IgRUwyIHJlc3BlY3RpdmVseS4KKyAqIERldGVybWluZSB2YWxpZGl0eSBvZiB0aGUgeDIxIEZEVCBwb2ludGVyLgorICogVGhlIGR0YiBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkIGFuZCBsaXZlIGluIHRoZSBmaXJzdCA1MTJNIG9mIG1lbW9yeS4KICAqLwotRU5UUlkoZWwyX3NldHVwKQotCW1ycwl4MCwgQ3VycmVudEVMCi0JY21wCXgwLCAjQ3VycmVudEVMX0VMMgorX192ZXRfZmR0OgorCXRzdAl4MjEsICMweDcKIAliLm5lCTFmCi0JbXJzCXgwLCBzY3Rscl9lbDIKLUNQVV9CRSgJb3JyCXgwLCB4MCwgIygxIDw8IDI1KQkpCS8vIFNldCB0aGUgRUUgYml0IGZvciBFTDIKLUNQVV9MRSgJYmljCXgwLCB4MCwgIygxIDw8IDI1KQkpCS8vIENsZWFyIHRoZSBFRSBiaXQgZm9yIEVMMgotCW1zcglzY3Rscl9lbDIsIHgwCi0JYgkyZgotMToJbXJzCXgwLCBzY3Rscl9lbDEKLUNQVV9CRSgJb3JyCXgwLCB4MCwgIygzIDw8IDI0KQkpCS8vIFNldCB0aGUgRUUgYW5kIEUwRSBiaXRzIGZvciBFTDEKLUNQVV9MRSgJYmljCXgwLCB4MCwgIygzIDw8IDI0KQkpCS8vIENsZWFyIHRoZSBFRSBhbmQgRTBFIGJpdHMgZm9yIEVMMQotCW1zcglzY3Rscl9lbDEsIHgwCi0JbW92CXcyMCwgI0JPT1RfQ1BVX01PREVfRUwxCQkvLyBUaGlzIGNwdSBib290ZWQgaW4gRUwxCi0JaXNiCisJY21wCXgyMSwgeDI0CisJYi5sdAkxZgorCW1vdgl4MCwgIygxIDw8IDI5KQorCWFkZAl4MCwgeDAsIHgyNAorCWNtcAl4MjEsIHgwCisJYi5nZQkxZgogCXJldAotCi0JLyogSHlwIGNvbmZpZ3VyYXRpb24uICovCi0yOgltb3YJeDAsICMoMSA8PCAzMSkJCQkvLyA2NC1iaXQgRUwxCi0JbXNyCWhjcl9lbDIsIHgwCi0KLQkvKiBHZW5lcmljIHRpbWVycy4gKi8KLQltcnMJeDAsIGNudGhjdGxfZWwyCi0Jb3JyCXgwLCB4MCwgIzMJCQkvLyBFbmFibGUgRUwxIHBoeXNpY2FsIHRpbWVycwotCW1zcgljbnRoY3RsX2VsMiwgeDAKLQltc3IJY250dm9mZl9lbDIsIHh6cgkJLy8gQ2xlYXIgdmlydHVhbCBvZmZzZXQKLQotI2lmZGVmIENPTkZJR19BUk1fR0lDX1YzCi0JLyogR0lDdjMgc3lzdGVtIHJlZ2lzdGVyIGFjY2VzcyAqLwotCW1ycwl4MCwgaWRfYWE2NHBmcjBfZWwxCi0JdWJmeAl4MCwgeDAsICMyNCwgIzQKLQljbXAJeDAsICMxCi0JYi5uZQkzZgotCi0JbXJzX3MJeDAsIElDQ19TUkVfRUwyCi0Jb3JyCXgwLCB4MCwgI0lDQ19TUkVfRUwyX1NSRQkvLyBTZXQgSUNDX1NSRV9FTDIuU1JFPT0xCi0Jb3JyCXgwLCB4MCwgI0lDQ19TUkVfRUwyX0VOQUJMRQkvLyBTZXQgSUNDX1NSRV9FTDIuRW5hYmxlPT0xCi0JbXNyX3MJSUNDX1NSRV9FTDIsIHgwCi0JaXNiCQkJCQkvLyBNYWtlIHN1cmUgU1JFIGlzIG5vdyBzZXQKLQltc3JfcwlJQ0hfSENSX0VMMiwgeHpyCQkvLyBSZXNldCBJQ0NfSENSX0VMMiB0byBkZWZhdWx0cwotCi0zOgotI2VuZGlmCi0KLQkvKiBQb3B1bGF0ZSBJRCByZWdpc3RlcnMuICovCi0JbXJzCXgwLCBtaWRyX2VsMQotCW1ycwl4MSwgbXBpZHJfZWwxCi0JbXNyCXZwaWRyX2VsMiwgeDAKLQltc3IJdm1waWRyX2VsMiwgeDEKLQotCS8qIHNjdGxyX2VsMSAqLwotCW1vdgl4MCwgIzB4MDgwMAkJCS8vIFNldC9jbGVhciBSRVN7MSwwfSBiaXRzCi1DUFVfQkUoCW1vdmsJeDAsICMweDMzZDAsIGxzbCAjMTYJKQkvLyBTZXQgRUUgYW5kIEUwRSBvbiBCRSBzeXN0ZW1zCi1DUFVfTEUoCW1vdmsJeDAsICMweDMwZDAsIGxzbCAjMTYJKQkvLyBDbGVhciBFRSBhbmQgRTBFIG9uIExFIHN5c3RlbXMKLQltc3IJc2N0bHJfZWwxLCB4MAotCi0JLyogQ29wcm9jZXNzb3IgdHJhcHMuICovCi0JbW92CXgwLCAjMHgzM2ZmCi0JbXNyCWNwdHJfZWwyLCB4MAkJCS8vIERpc2FibGUgY29wcm8uIHRyYXBzIHRvIEVMMgotCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCW1zcgloc3RyX2VsMiwgeHpyCQkJLy8gRGlzYWJsZSBDUDE1IHRyYXBzIHRvIEVMMgotI2VuZGlmCi0KLQkvKiBTdGFnZS0yIHRyYW5zbGF0aW9uICovCi0JbXNyCXZ0dGJyX2VsMiwgeHpyCi0KLQkvKiBIeXBlcnZpc29yIHN0dWIgKi8KLQlhZHIJeDAsIF9faHlwX3N0dWJfdmVjdG9ycwotCW1zcgl2YmFyX2VsMiwgeDAKLQotCS8qIHNwc3IgKi8KLQltb3YJeDAsICMoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgUFNSX0FfQklUIHwgUFNSX0RfQklUIHxcCi0JCSAgICAgIFBTUl9NT0RFX0VMMWgpCi0JbXNyCXNwc3JfZWwyLCB4MAotCW1zcgllbHJfZWwyLCBscgotCW1vdgl3MjAsICNCT09UX0NQVV9NT0RFX0VMMgkJLy8gVGhpcyBDUFUgYm9vdGVkIGluIEVMMgotCWVyZXQKLUVORFBST0MoZWwyX3NldHVwKQotCi0vKgotICogU2V0cyB0aGUgX19ib290X2NwdV9tb2RlIGZsYWcgZGVwZW5kaW5nIG9uIHRoZSBDUFUgYm9vdCBtb2RlIHBhc3NlZAotICogaW4geDIwLiBTZWUgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmggZm9yIG1vcmUgaW5mby4KLSAqLwotRU5UUlkoc2V0X2NwdV9ib290X21vZGVfZmxhZykKLQlsZHIJeDEsID1fX2Jvb3RfY3B1X21vZGUJCS8vIENvbXB1dGUgX19ib290X2NwdV9tb2RlCi0JYWRkCXgxLCB4MSwgeDI4Ci0JY21wCXcyMCwgI0JPT1RfQ1BVX01PREVfRUwyCi0JYi5uZQkxZgotCWFkZAl4MSwgeDEsICM0Ci0xOglzdHIJdzIwLCBbeDFdCQkJLy8gVGhpcyBDUFUgaGFzIGJvb3RlZCBpbiBFTDEKLQlkbWIJc3kKLQlkYwlpdmFjLCB4MQkJCS8vIEludmFsaWRhdGUgcG90ZW50aWFsbHkgc3RhbGUgY2FjaGUgbGluZQorMToKKwltb3YJeDIxLCAjMAogCXJldAotRU5EUFJPQyhzZXRfY3B1X2Jvb3RfbW9kZV9mbGFnKQotCi0vKgotICogV2UgbmVlZCB0byBmaW5kIG91dCB0aGUgQ1BVIGJvb3QgbW9kZSBsb25nIGFmdGVyIGJvb3QsIHNvIHdlIG5lZWQgdG8KLSAqIHN0b3JlIGl0IGluIGEgd3JpdGFibGUgdmFyaWFibGUuCi0gKgotICogVGhpcyBpcyBub3QgaW4gLmJzcywgYmVjYXVzZSB3ZSBzZXQgaXQgc3VmZmljaWVudGx5IGVhcmx5IHRoYXQgdGhlIGJvb3QtdGltZQotICogemVyb2luZyBvZiAuYnNzIHdvdWxkIGNsb2JiZXIgaXQuCi0gKi8KLQkucHVzaHNlY3Rpb24JLmRhdGEuLmNhY2hlbGluZV9hbGlnbmVkCi1FTlRSWShfX2Jvb3RfY3B1X21vZGUpCi0JLmFsaWduCUwxX0NBQ0hFX1NISUZUCi0JLmxvbmcJQk9PVF9DUFVfTU9ERV9FTDIKLQkubG9uZwkwCi0JLnBvcHNlY3Rpb24KLQotI2lmZGVmIENPTkZJR19TTVAKLQkuYWxpZ24JMwotMToJLnF1YWQJLgotCS5xdWFkCXNlY29uZGFyeV9ob2xkaW5nX3Blbl9yZWxlYXNlCi0KLQkvKgotCSAqIFRoaXMgcHJvdmlkZXMgYSAiaG9sZGluZyBwZW4iIGZvciBwbGF0Zm9ybXMgdG8gaG9sZCBhbGwgc2Vjb25kYXJ5Ci0JICogY29yZXMgYXJlIGhlbGQgdW50aWwgd2UncmUgcmVhZHkgZm9yIHRoZW0gdG8gaW5pdGlhbGlzZS4KLQkgKi8KLUVOVFJZKHNlY29uZGFyeV9ob2xkaW5nX3BlbikKLQlibAllbDJfc2V0dXAJCQkvLyBEcm9wIHRvIEVMMSwgdzIwPWNwdV9ib290X21vZGUKLQlibAlfX2NhbGNfcGh5c19vZmZzZXQJCS8vIHgyND1QSFlTX09GRlNFVCwgeDI4PVBIWVNfT0ZGU0VULVBBR0VfT0ZGU0VUCi0JYmwJc2V0X2NwdV9ib290X21vZGVfZmxhZwotCW1ycwl4MCwgbXBpZHJfZWwxCi0JbGRyICAgICB4MSwgPU1QSURSX0hXSURfQklUTUFTSwotCWFuZAl4MCwgeDAsIHgxCi0JYWRyCXgxLCAxYgotCWxkcAl4MiwgeDMsIFt4MV0KLQlzdWIJeDEsIHgxLCB4MgotCWFkZAl4MywgeDMsIHgxCi1wZW46CWxkcgl4NCwgW3gzXQotCWNtcAl4NCwgeDAKLQliLmVxCXNlY29uZGFyeV9zdGFydHVwCi0Jd2ZlCi0JYglwZW4KLUVORFBST0Moc2Vjb25kYXJ5X2hvbGRpbmdfcGVuKQotCi0JLyoKLQkgKiBTZWNvbmRhcnkgZW50cnkgcG9pbnQgdGhhdCBqdW1wcyBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwuIE9ubHkgdG8KLQkgKiBiZSB1c2VkIHdoZXJlIENQVXMgYXJlIGJyb3VnaHQgb25saW5lIGR5bmFtaWNhbGx5IGJ5IHRoZSBrZXJuZWwuCi0JICovCi1FTlRSWShzZWNvbmRhcnlfZW50cnkpCi0JYmwJZWwyX3NldHVwCQkJLy8gRHJvcCB0byBFTDEKLQlibAlfX2NhbGNfcGh5c19vZmZzZXQJCS8vIHgyND1QSFlTX09GRlNFVCwgeDI4PVBIWVNfT0ZGU0VULVBBR0VfT0ZGU0VUCi0JYmwJc2V0X2NwdV9ib290X21vZGVfZmxhZwotCWIJc2Vjb25kYXJ5X3N0YXJ0dXAKLUVORFBST0Moc2Vjb25kYXJ5X2VudHJ5KQotCi1FTlRSWShzZWNvbmRhcnlfc3RhcnR1cCkKLQkvKgotCSAqIENvbW1vbiBlbnRyeSBwb2ludCBmb3Igc2Vjb25kYXJ5IENQVXMuCi0JICovCi0JbXJzCXgyMiwgbWlkcl9lbDEJCQkvLyB4MjI9Y3B1aWQKLQltb3YJeDAsIHgyMgotCWJsCWxvb2t1cF9wcm9jZXNzb3JfdHlwZQotCW1vdgl4MjMsIHgwCQkJCS8vIHgyMz1jdXJyZW50IGNwdV90YWJsZQotCWNiegl4MjMsIF9fZXJyb3JfcAkJCS8vIGludmFsaWQgcHJvY2Vzc29yICh4MjM9MCk/Ci0KLQlwZ3RibAl4MjUsIHgyNiwgeDI4CQkJLy8geDI1PVRUQlIwLCB4MjY9VFRCUjEKLQlsZHIJeDEyLCBbeDIzLCAjQ1BVX0lORk9fU0VUVVBdCi0JYWRkCXgxMiwgeDEyLCB4MjgJCQkvLyBfX3ZpcnRfdG9fcGh5cwotCWJscgl4MTIJCQkJLy8gaW5pdGlhbGlzZSBwcm9jZXNzb3IKLQotCWxkcgl4MjEsID1zZWNvbmRhcnlfZGF0YQotCWxkcgl4MjcsID1fX3NlY29uZGFyeV9zd2l0Y2hlZAkvLyBhZGRyZXNzIHRvIGp1bXAgdG8gYWZ0ZXIgZW5hYmxpbmcgdGhlIE1NVQotCWIJX19lbmFibGVfbW11Ci1FTkRQUk9DKHNlY29uZGFyeV9zdGFydHVwKQotCi1FTlRSWShfX3NlY29uZGFyeV9zd2l0Y2hlZCkKLQlsZHIJeDAsIFt4MjFdCQkJLy8gZ2V0IHNlY29uZGFyeV9kYXRhLnN0YWNrCi0JbW92CXNwLCB4MAotCW1vdgl4MjksICMwCi0JYglzZWNvbmRhcnlfc3RhcnRfa2VybmVsCi1FTkRQUk9DKF9fc2Vjb25kYXJ5X3N3aXRjaGVkKQotI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KLQotLyoKLSAqIFNldHVwIGNvbW1vbiBiaXRzIGJlZm9yZSBmaW5hbGx5IGVuYWJsaW5nIHRoZSBNTVUuIEVzc2VudGlhbGx5IHRoaXMgaXMganVzdAotICogbG9hZGluZyB0aGUgcGFnZSB0YWJsZSBwb2ludGVyIGFuZCB2ZWN0b3IgYmFzZSByZWdpc3RlcnMuCi0gKgotICogT24gZW50cnkgdG8gdGhpcyBjb2RlLCB4MCBtdXN0IGNvbnRhaW4gdGhlIFNDVExSX0VMMSB2YWx1ZSBmb3IgdHVybmluZyBvbgotICogdGhlIE1NVS4KLSAqLwotX19lbmFibGVfbW11OgotCWxkcgl4NSwgPXZlY3RvcnMKLQltc3IJdmJhcl9lbDEsIHg1Ci0JbXNyCXR0YnIwX2VsMSwgeDI1CQkJLy8gbG9hZCBUVEJSMAotCW1zcgl0dGJyMV9lbDEsIHgyNgkJCS8vIGxvYWQgVFRCUjEKLQlpc2IKLQliCV9fdHVybl9tbXVfb24KLUVORFBST0MoX19lbmFibGVfbW11KQotCi0vKgotICogRW5hYmxlIHRoZSBNTVUuIFRoaXMgY29tcGxldGVseSBjaGFuZ2VzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHZpc2libGUgbWVtb3J5Ci0gKiBzcGFjZS4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggdGhpcy4KLSAqCi0gKiAgeDAgID0gc3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXIKLSAqICB4MjcgPSAqdmlydHVhbCogYWRkcmVzcyB0byBqdW1wIHRvIHVwb24gY29tcGxldGlvbgotICoKLSAqIG90aGVyIHJlZ2lzdGVycyBkZXBlbmQgb24gdGhlIGZ1bmN0aW9uIGNhbGxlZCB1cG9uIGNvbXBsZXRpb24KLSAqCi0gKiBXZSBhbGlnbiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvIHRoZSBzbWFsbGVzdCBwb3dlciBvZiB0d28gbGFyZ2VyIHRoYW4gaXQgdG8KLSAqIGVuc3VyZSBpdCBmaXRzIHdpdGhpbiBhIHNpbmdsZSBibG9jayBtYXAgZW50cnkuIE90aGVyd2lzZSB3ZXJlIFBIWVNfT0ZGU0VUCi0gKiBjbG9zZSB0byB0aGUgZW5kIG9mIGEgNTEyTUIgb3IgMUdCIGJsb2NrIHdlIG1pZ2h0IHJlcXVpcmUgYW4gYWRkaXRpb25hbAotICogdGFibGUgdG8gbWFwIHRoZSBlbnRpcmUgZnVuY3Rpb24uCi0gKi8KLQkuYWxpZ24JNAotX190dXJuX21tdV9vbjoKLQltc3IJc2N0bHJfZWwxLCB4MAotCWlzYgotCWJyCXgyNwotRU5EUFJPQyhfX3R1cm5fbW11X29uKQotCi0vKgotICogQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiBwaHlzaWNhbCBtZW1vcnkuCi0gKi8KLV9fY2FsY19waHlzX29mZnNldDoKLQlhZHIJeDAsIDFmCi0JbGRwCXgxLCB4MiwgW3gwXQotCXN1Ygl4MjgsIHgwLCB4MQkJCS8vIHgyOCA9IFBIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQKLQlhZGQJeDI0LCB4MiwgeDI4CQkJLy8geDI0ID0gUEhZU19PRkZTRVQKLQlyZXQKLUVORFBST0MoX19jYWxjX3BoeXNfb2Zmc2V0KQotCi0JLmFsaWduIDMKLTE6CS5xdWFkCS4KLQkucXVhZAlQQUdFX09GRlNFVAotCitFTkRQUk9DKF9fdmV0X2ZkdCkKIC8qCiAgKiBNYWNybyB0byBjcmVhdGUgYSB0YWJsZSBlbnRyeSB0byB0aGUgbmV4dCBwYWdlLgogICoKQEAgLTY2OSw2ICs0NjksMjQ3IEBACiBFTkRQUk9DKF9fbW1hcF9zd2l0Y2hlZCkKIAogLyoKKyAqIGVuZCBlYXJseSBoZWFkIHNlY3Rpb24sIGJlZ2luIGhlYWQgY29kZSB0aGF0IGlzIGFsc28gdXNlZCBmb3IKKyAqIGhvdHBsdWcgYW5kIG5lZWRzIHRvIGhhdmUgdGhlIHNhbWUgcHJvdGVjdGlvbnMgYXMgdGhlIHRleHQgcmVnaW9uCisgKi8KKwkuc2VjdGlvbiAiLnRleHQiLCJheCIKKy8qCisgKiBJZiB3ZSdyZSBmb3J0dW5hdGUgZW5vdWdoIHRvIGJvb3QgYXQgRUwyLCBlbnN1cmUgdGhhdCB0aGUgd29ybGQgaXMKKyAqIHNhbmUgYmVmb3JlIGRyb3BwaW5nIHRvIEVMMS4KKyAqCisgKiBSZXR1cm5zIGVpdGhlciBCT09UX0NQVV9NT0RFX0VMMSBvciBCT09UX0NQVV9NT0RFX0VMMiBpbiB4MjAgaWYKKyAqIGJvb3RlZCBpbiBFTDEgb3IgRUwyIHJlc3BlY3RpdmVseS4KKyAqLworRU5UUlkoZWwyX3NldHVwKQorCW1ycwl4MCwgQ3VycmVudEVMCisJY21wCXgwLCAjQ3VycmVudEVMX0VMMgorCWIubmUJMWYKKwltcnMJeDAsIHNjdGxyX2VsMgorQ1BVX0JFKAlvcnIJeDAsIHgwLCAjKDEgPDwgMjUpCSkJLy8gU2V0IHRoZSBFRSBiaXQgZm9yIEVMMgorQ1BVX0xFKAliaWMJeDAsIHgwLCAjKDEgPDwgMjUpCSkJLy8gQ2xlYXIgdGhlIEVFIGJpdCBmb3IgRUwyCisJbXNyCXNjdGxyX2VsMiwgeDAKKwliCTJmCisxOgltcnMJeDAsIHNjdGxyX2VsMQorQ1BVX0JFKAlvcnIJeDAsIHgwLCAjKDMgPDwgMjQpCSkJLy8gU2V0IHRoZSBFRSBhbmQgRTBFIGJpdHMgZm9yIEVMMQorQ1BVX0xFKAliaWMJeDAsIHgwLCAjKDMgPDwgMjQpCSkJLy8gQ2xlYXIgdGhlIEVFIGFuZCBFMEUgYml0cyBmb3IgRUwxCisJbXNyCXNjdGxyX2VsMSwgeDAKKwltb3YJdzIwLCAjQk9PVF9DUFVfTU9ERV9FTDEJCS8vIFRoaXMgY3B1IGJvb3RlZCBpbiBFTDEKKwlpc2IKKwlyZXQKKworCS8qIEh5cCBjb25maWd1cmF0aW9uLiAqLworMjoJbW92CXgwLCAjKDEgPDwgMzEpCQkJLy8gNjQtYml0IEVMMQorCW1zcgloY3JfZWwyLCB4MAorCisJLyogR2VuZXJpYyB0aW1lcnMuICovCisJbXJzCXgwLCBjbnRoY3RsX2VsMgorCW9ycgl4MCwgeDAsICMzCQkJLy8gRW5hYmxlIEVMMSBwaHlzaWNhbCB0aW1lcnMKKwltc3IJY250aGN0bF9lbDIsIHgwCisJbXNyCWNudHZvZmZfZWwyLCB4enIJCS8vIENsZWFyIHZpcnR1YWwgb2Zmc2V0CisKKyNpZmRlZiBDT05GSUdfQVJNX0dJQ19WMworCS8qIEdJQ3YzIHN5c3RlbSByZWdpc3RlciBhY2Nlc3MgKi8KKwltcnMJeDAsIGlkX2FhNjRwZnIwX2VsMQorCXViZngJeDAsIHgwLCAjMjQsICM0CisJY21wCXgwLCAjMQorCWIubmUJM2YKKworCW1yc19zCXgwLCBJQ0NfU1JFX0VMMgorCW9ycgl4MCwgeDAsICNJQ0NfU1JFX0VMMl9TUkUJLy8gU2V0IElDQ19TUkVfRUwyLlNSRT09MQorCW9ycgl4MCwgeDAsICNJQ0NfU1JFX0VMMl9FTkFCTEUJLy8gU2V0IElDQ19TUkVfRUwyLkVuYWJsZT09MQorCW1zcl9zCUlDQ19TUkVfRUwyLCB4MAorCWlzYgkJCQkJLy8gTWFrZSBzdXJlIFNSRSBpcyBub3cgc2V0CisJbXNyX3MJSUNIX0hDUl9FTDIsIHh6cgkJLy8gUmVzZXQgSUNDX0hDUl9FTDIgdG8gZGVmYXVsdHMKKworMzoKKyNlbmRpZgorCisJLyogUG9wdWxhdGUgSUQgcmVnaXN0ZXJzLiAqLworCW1ycwl4MCwgbWlkcl9lbDEKKwltcnMJeDEsIG1waWRyX2VsMQorCW1zcgl2cGlkcl9lbDIsIHgwCisJbXNyCXZtcGlkcl9lbDIsIHgxCisKKwkvKiBzY3Rscl9lbDEgKi8KKwltb3YJeDAsICMweDA4MDAJCQkvLyBTZXQvY2xlYXIgUkVTezEsMH0gYml0cworQ1BVX0JFKAltb3ZrCXgwLCAjMHgzM2QwLCBsc2wgIzE2CSkJLy8gU2V0IEVFIGFuZCBFMEUgb24gQkUgc3lzdGVtcworQ1BVX0xFKAltb3ZrCXgwLCAjMHgzMGQwLCBsc2wgIzE2CSkJLy8gQ2xlYXIgRUUgYW5kIEUwRSBvbiBMRSBzeXN0ZW1zCisJbXNyCXNjdGxyX2VsMSwgeDAKKworCS8qIENvcHJvY2Vzc29yIHRyYXBzLiAqLworCW1vdgl4MCwgIzB4MzNmZgorCW1zcgljcHRyX2VsMiwgeDAJCQkvLyBEaXNhYmxlIGNvcHJvLiB0cmFwcyB0byBFTDIKKworI2lmZGVmIENPTkZJR19DT01QQVQKKwltc3IJaHN0cl9lbDIsIHh6cgkJCS8vIERpc2FibGUgQ1AxNSB0cmFwcyB0byBFTDIKKyNlbmRpZgorCisJLyogU3RhZ2UtMiB0cmFuc2xhdGlvbiAqLworCW1zcgl2dHRicl9lbDIsIHh6cgorCisJLyogSHlwZXJ2aXNvciBzdHViICovCisJYWRycAl4MCwgX19oeXBfc3R1Yl92ZWN0b3JzCisJYWRkCXgwLCB4MCwgIzpsbzEyOl9faHlwX3N0dWJfdmVjdG9ycworCW1zcgl2YmFyX2VsMiwgeDAKKworCS8qIHNwc3IgKi8KKwltb3YJeDAsICMoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgUFNSX0FfQklUIHwgUFNSX0RfQklUIHxcCisJCSAgICAgIFBTUl9NT0RFX0VMMWgpCisJbXNyCXNwc3JfZWwyLCB4MAorCW1zcgllbHJfZWwyLCBscgorCW1vdgl3MjAsICNCT09UX0NQVV9NT0RFX0VMMgkJLy8gVGhpcyBDUFUgYm9vdGVkIGluIEVMMgorCWVyZXQKK0VORFBST0MoZWwyX3NldHVwKQorCisvKgorICogU2V0cyB0aGUgX19ib290X2NwdV9tb2RlIGZsYWcgZGVwZW5kaW5nIG9uIHRoZSBDUFUgYm9vdCBtb2RlIHBhc3NlZAorICogaW4geDIwLiBTZWUgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmggZm9yIG1vcmUgaW5mby4KKyAqLworRU5UUlkoc2V0X2NwdV9ib290X21vZGVfZmxhZykKKwlsZHIJeDEsID1fX2Jvb3RfY3B1X21vZGUJCS8vIENvbXB1dGUgX19ib290X2NwdV9tb2RlCisJYWRkCXgxLCB4MSwgeDI4CisJY21wCXcyMCwgI0JPT1RfQ1BVX01PREVfRUwyCisJYi5uZQkxZgorCWFkZAl4MSwgeDEsICM0CisxOglzdHIJdzIwLCBbeDFdCQkJLy8gVGhpcyBDUFUgaGFzIGJvb3RlZCBpbiBFTDEKKwlkbWIJc3kKKwlkYwlpdmFjLCB4MQkJCS8vIEludmFsaWRhdGUgcG90ZW50aWFsbHkgc3RhbGUgY2FjaGUgbGluZQorCXJldAorRU5EUFJPQyhzZXRfY3B1X2Jvb3RfbW9kZV9mbGFnKQorCisvKgorICogV2UgbmVlZCB0byBmaW5kIG91dCB0aGUgQ1BVIGJvb3QgbW9kZSBsb25nIGFmdGVyIGJvb3QsIHNvIHdlIG5lZWQgdG8KKyAqIHN0b3JlIGl0IGluIGEgd3JpdGFibGUgdmFyaWFibGUuCisgKgorICogVGhpcyBpcyBub3QgaW4gLmJzcywgYmVjYXVzZSB3ZSBzZXQgaXQgc3VmZmljaWVudGx5IGVhcmx5IHRoYXQgdGhlIGJvb3QtdGltZQorICogemVyb2luZyBvZiAuYnNzIHdvdWxkIGNsb2JiZXIgaXQuCisgKi8KKwkucHVzaHNlY3Rpb24JLmRhdGEuLmNhY2hlbGluZV9hbGlnbmVkCitFTlRSWShfX2Jvb3RfY3B1X21vZGUpCisJLmFsaWduCUwxX0NBQ0hFX1NISUZUCisJLmxvbmcJQk9PVF9DUFVfTU9ERV9FTDIKKwkubG9uZwkwCisJLnBvcHNlY3Rpb24KKworI2lmZGVmIENPTkZJR19TTVAKKwkuYWxpZ24JMworMToJLnF1YWQJLgorCS5xdWFkCXNlY29uZGFyeV9ob2xkaW5nX3Blbl9yZWxlYXNlCisKKwkvKgorCSAqIFRoaXMgcHJvdmlkZXMgYSAiaG9sZGluZyBwZW4iIGZvciBwbGF0Zm9ybXMgdG8gaG9sZCBhbGwgc2Vjb25kYXJ5CisJICogY29yZXMgYXJlIGhlbGQgdW50aWwgd2UncmUgcmVhZHkgZm9yIHRoZW0gdG8gaW5pdGlhbGlzZS4KKwkgKi8KK0VOVFJZKHNlY29uZGFyeV9ob2xkaW5nX3BlbikKKwlibAllbDJfc2V0dXAJCQkvLyBEcm9wIHRvIEVMMSwgdzIwPWNwdV9ib290X21vZGUKKwlibAlfX2NhbGNfcGh5c19vZmZzZXQJCS8vIHgyND1QSFlTX09GRlNFVCwgeDI4PVBIWVNfT0ZGU0VULVBBR0VfT0ZGU0VUCisJYmwJc2V0X2NwdV9ib290X21vZGVfZmxhZworCW1ycwl4MCwgbXBpZHJfZWwxCisJbGRyICAgICB4MSwgPU1QSURSX0hXSURfQklUTUFTSworCWFuZAl4MCwgeDAsIHgxCisJYWRyCXgxLCAxYgorCWxkcAl4MiwgeDMsIFt4MV0KKwlzdWIJeDEsIHgxLCB4MgorCWFkZAl4MywgeDMsIHgxCitwZW46CWxkcgl4NCwgW3gzXQorCWNtcAl4NCwgeDAKKwliLmVxCXNlY29uZGFyeV9zdGFydHVwCisJd2ZlCisJYglwZW4KK0VORFBST0Moc2Vjb25kYXJ5X2hvbGRpbmdfcGVuKQorCisJLyoKKwkgKiBTZWNvbmRhcnkgZW50cnkgcG9pbnQgdGhhdCBqdW1wcyBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwuIE9ubHkgdG8KKwkgKiBiZSB1c2VkIHdoZXJlIENQVXMgYXJlIGJyb3VnaHQgb25saW5lIGR5bmFtaWNhbGx5IGJ5IHRoZSBrZXJuZWwuCisJICovCitFTlRSWShzZWNvbmRhcnlfZW50cnkpCisJYmwJZWwyX3NldHVwCQkJLy8gRHJvcCB0byBFTDEKKwlibAlfX2NhbGNfcGh5c19vZmZzZXQJCS8vIHgyND1QSFlTX09GRlNFVCwgeDI4PVBIWVNfT0ZGU0VULVBBR0VfT0ZGU0VUCisJYmwJc2V0X2NwdV9ib290X21vZGVfZmxhZworCWIJc2Vjb25kYXJ5X3N0YXJ0dXAKK0VORFBST0Moc2Vjb25kYXJ5X2VudHJ5KQorCitFTlRSWShzZWNvbmRhcnlfc3RhcnR1cCkKKwkvKgorCSAqIENvbW1vbiBlbnRyeSBwb2ludCBmb3Igc2Vjb25kYXJ5IENQVXMuCisJICovCisJbXJzCXgyMiwgbWlkcl9lbDEJCQkvLyB4MjI9Y3B1aWQKKwltb3YJeDAsIHgyMgorCWJsCWxvb2t1cF9wcm9jZXNzb3JfdHlwZQorCW1vdgl4MjMsIHgwCQkJCS8vIHgyMz1jdXJyZW50IGNwdV90YWJsZQorCWNiegl4MjMsIF9fZXJyb3JfcAkJCS8vIGludmFsaWQgcHJvY2Vzc29yICh4MjM9MCk/CisKKwlwZ3RibAl4MjUsIHgyNiwgeDI4CQkJLy8geDI1PVRUQlIwLCB4MjY9VFRCUjEKKwlsZHIJeDEyLCBbeDIzLCAjQ1BVX0lORk9fU0VUVVBdCisJYWRkCXgxMiwgeDEyLCB4MjgJCQkvLyBfX3ZpcnRfdG9fcGh5cworCWJscgl4MTIJCQkJLy8gaW5pdGlhbGlzZSBwcm9jZXNzb3IKKworCWxkcgl4MjEsID1zZWNvbmRhcnlfZGF0YQorCWxkcgl4MjcsID1fX3NlY29uZGFyeV9zd2l0Y2hlZAkvLyBhZGRyZXNzIHRvIGp1bXAgdG8gYWZ0ZXIgZW5hYmxpbmcgdGhlIE1NVQorCWIJX19lbmFibGVfbW11CitFTkRQUk9DKHNlY29uZGFyeV9zdGFydHVwKQorCitFTlRSWShfX3NlY29uZGFyeV9zd2l0Y2hlZCkKKwlsZHIJeDAsIFt4MjFdCQkJLy8gZ2V0IHNlY29uZGFyeV9kYXRhLnN0YWNrCisJbW92CXNwLCB4MAorCW1vdgl4MjksICMwCisJYglzZWNvbmRhcnlfc3RhcnRfa2VybmVsCitFTkRQUk9DKF9fc2Vjb25kYXJ5X3N3aXRjaGVkKQorI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KKworLyoKKyAqIFNldHVwIGNvbW1vbiBiaXRzIGJlZm9yZSBmaW5hbGx5IGVuYWJsaW5nIHRoZSBNTVUuIEVzc2VudGlhbGx5IHRoaXMgaXMganVzdAorICogbG9hZGluZyB0aGUgcGFnZSB0YWJsZSBwb2ludGVyIGFuZCB2ZWN0b3IgYmFzZSByZWdpc3RlcnMuCisgKgorICogT24gZW50cnkgdG8gdGhpcyBjb2RlLCB4MCBtdXN0IGNvbnRhaW4gdGhlIFNDVExSX0VMMSB2YWx1ZSBmb3IgdHVybmluZyBvbgorICogdGhlIE1NVS4KKyAqLworX19lbmFibGVfbW11OgorCWxkcgl4NSwgPXZlY3RvcnMKKwltc3IJdmJhcl9lbDEsIHg1CisJbXNyCXR0YnIwX2VsMSwgeDI1CQkJLy8gbG9hZCBUVEJSMAorCW1zcgl0dGJyMV9lbDEsIHgyNgkJCS8vIGxvYWQgVFRCUjEKKwlpc2IKKwliCV9fdHVybl9tbXVfb24KK0VORFBST0MoX19lbmFibGVfbW11KQorCisvKgorICogRW5hYmxlIHRoZSBNTVUuIFRoaXMgY29tcGxldGVseSBjaGFuZ2VzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHZpc2libGUgbWVtb3J5CisgKiBzcGFjZS4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggdGhpcy4KKyAqCisgKiAgeDAgID0gc3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXIKKyAqICB4MjcgPSAqdmlydHVhbCogYWRkcmVzcyB0byBqdW1wIHRvIHVwb24gY29tcGxldGlvbgorICoKKyAqIG90aGVyIHJlZ2lzdGVycyBkZXBlbmQgb24gdGhlIGZ1bmN0aW9uIGNhbGxlZCB1cG9uIGNvbXBsZXRpb24KKyAqCisgKiBXZSBhbGlnbiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvIHRoZSBzbWFsbGVzdCBwb3dlciBvZiB0d28gbGFyZ2VyIHRoYW4gaXQgdG8KKyAqIGVuc3VyZSBpdCBmaXRzIHdpdGhpbiBhIHNpbmdsZSBibG9jayBtYXAgZW50cnkuIE90aGVyd2lzZSB3ZXJlIFBIWVNfT0ZGU0VUCisgKiBjbG9zZSB0byB0aGUgZW5kIG9mIGEgNTEyTUIgb3IgMUdCIGJsb2NrIHdlIG1pZ2h0IHJlcXVpcmUgYW4gYWRkaXRpb25hbAorICogdGFibGUgdG8gbWFwIHRoZSBlbnRpcmUgZnVuY3Rpb24uCisgKi8KKwkuYWxpZ24JNAorX190dXJuX21tdV9vbjoKKwltc3IJc2N0bHJfZWwxLCB4MAorCWlzYgorCWJyCXgyNworRU5EUFJPQyhfX3R1cm5fbW11X29uKQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiBwaHlzaWNhbCBtZW1vcnkuCisgKi8KK19fY2FsY19waHlzX29mZnNldDoKKwlhZHIJeDAsIDFmCisJbGRwCXgxLCB4MiwgW3gwXQorCXN1Ygl4MjgsIHgwLCB4MQkJCS8vIHgyOCA9IFBIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQKKwlhZGQJeDI0LCB4MiwgeDI4CQkJLy8geDI0ID0gUEhZU19PRkZTRVQKKwlyZXQKK0VORFBST0MoX19jYWxjX3BoeXNfb2Zmc2V0KQorCisJLmFsaWduIDMKKzE6CS5xdWFkCS4KKwkucXVhZAlQQUdFX09GRlNFVAorCisvKgogICogRXhjZXB0aW9uIGhhbmRsaW5nLiBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2UgY2FuJ3QgcHJvY2VlZC4gV2Ugb3VnaHQgdG8KICAqIHRlbGwgdGhlIHVzZXIsIGJ1dCBzaW5jZSB3ZSBkb24ndCBoYXZlIGFueSBndWFyYW50ZWUgdGhhdCB3ZSdyZSBldmVuCiAgKiBydW5uaW5nIG9uIHRoZSByaWdodCBhcmNoaXRlY3R1cmUsIHdlIGRvIHZpcnR1YWxseSBub3RoaW5nLgpAQCAtNzE1LDIyICs3NTYsMyBAQAogCS5xdWFkCS4KIAkucXVhZAljcHVfdGFibGUKIAkuc2l6ZQlfX2xvb2t1cF9wcm9jZXNzb3JfdHlwZV9kYXRhLCAuIC0gX19sb29rdXBfcHJvY2Vzc29yX3R5cGVfZGF0YQotCi0vKgotICogRGV0ZXJtaW5lIHZhbGlkaXR5IG9mIHRoZSB4MjEgRkRUIHBvaW50ZXIuCi0gKiBUaGUgZHRiIG11c3QgYmUgOC1ieXRlIGFsaWduZWQgYW5kIGxpdmUgaW4gdGhlIGZpcnN0IDUxMk0gb2YgbWVtb3J5LgotICovCi1fX3ZldF9mZHQ6Ci0JdHN0CXgyMSwgIzB4NwotCWIubmUJMWYKLQljbXAJeDIxLCB4MjQKLQliLmx0CTFmCi0JbW92CXgwLCAjKDEgPDwgMjkpCi0JYWRkCXgwLCB4MCwgeDI0Ci0JY21wCXgyMSwgeDAKLQliLmdlCTFmCi0JcmV0Ci0xOgotCW1vdgl4MjEsICMwCi0JcmV0Ci1FTkRQUk9DKF9fdmV0X2ZkdCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2luc24uYyBiL2FyY2gvYXJtNjQva2VybmVsL2luc24uYwppbmRleCA4Y2QyN2ZlLi43ZTkzMjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9pbnNuLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvaW5zbi5jCkBAIC05NjAsMyArOTYwLDI5IEBACiAKIAlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7CiB9CisKK2Jvb2wgYWFyY2gzMl9pbnNuX2lzX3dpZGUodTMyIGluc24pCit7CisJcmV0dXJuIGluc24gPj0gMHhlODAwOworfQorCisvKgorICogTWFjcm9zL2RlZmluZXMgZm9yIGV4dHJhY3RpbmcgcmVnaXN0ZXIgbnVtYmVycyBmcm9tIGluc3RydWN0aW9uLgorICovCit1MzIgYWFyY2gzMl9pbnNuX2V4dHJhY3RfcmVnX251bSh1MzIgaW5zbiwgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKGluc24gJiAoMHhmIDw8IG9mZnNldCkpID4+IG9mZnNldDsKK30KKworI2RlZmluZSBPUEMyX01BU0sJMHg3CisjZGVmaW5lIE9QQzJfT0ZGU0VUCTUKK3UzMiBhYXJjaDMyX2luc25fbWNyX2V4dHJhY3Rfb3BjMih1MzIgaW5zbikKK3sKKwlyZXR1cm4gKGluc24gJiAoT1BDMl9NQVNLIDw8IE9QQzJfT0ZGU0VUKSkgPj4gT1BDMl9PRkZTRVQ7Cit9CisKKyNkZWZpbmUgQ1JNX01BU0sJMHhmCit1MzIgYWFyY2gzMl9pbnNuX21jcl9leHRyYWN0X2NybSh1MzIgaW5zbikKK3sKKwlyZXR1cm4gaW5zbiAmIENSTV9NQVNLOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvaW8uYyBiL2FyY2gvYXJtNjQva2VybmVsL2lvLmMKaW5kZXggN2QzN2VhZC4uMzU0YmUyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvaW8uYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9pby5jCkBAIC0yNSwxMiArMjUsMjYgQEAKICAqLwogdm9pZCBfX21lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGNoYXIgKnQgPSB0bzsKLQl3aGlsZSAoY291bnQpIHsKLQkJY291bnQtLTsKLQkJKnQgPSByZWFkYihmcm9tKTsKLQkJdCsrOworCXdoaWxlIChjb3VudCAmJiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZnJvbSwgOCkgfHwKKwkJCSAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl0bywgOCkpKSB7CisJCSoodTggKil0byA9IF9fcmF3X3JlYWRiKGZyb20pOwogCQlmcm9tKys7CisJCXRvKys7CisJCWNvdW50LS07CisJfQorCisJd2hpbGUgKGNvdW50ID49IDgpIHsKKwkJKih1NjQgKil0byA9IF9fcmF3X3JlYWRxKGZyb20pOworCQlmcm9tICs9IDg7CisJCXRvICs9IDg7CisJCWNvdW50IC09IDg7CisJfQorCisJd2hpbGUgKGNvdW50KSB7CisJCSoodTggKil0byA9IF9fcmF3X3JlYWRiKGZyb20pOworCQlmcm9tKys7CisJCXRvKys7CisJCWNvdW50LS07CiAJfQogfQogRVhQT1JUX1NZTUJPTChfX21lbWNweV9mcm9taW8pOwpAQCAtNDAsMTIgKzU0LDI2IEBACiAgKi8KIHZvaWQgX19tZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgY291bnQpCiB7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZiA9IGZyb207Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCWNvdW50LS07Ci0JCXdyaXRlYigqZiwgdG8pOwotCQlmKys7CisJd2hpbGUgKGNvdW50ICYmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl0bywgOCkgfHwKKwkJCSAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylmcm9tLCA4KSkpIHsKKwkJX19yYXdfd3JpdGViKCoodm9sYXRpbGUgdTggKilmcm9tLCB0byk7CisJCWZyb20rKzsKIAkJdG8rKzsKKwkJY291bnQtLTsKKwl9CisKKwl3aGlsZSAoY291bnQgPj0gOCkgeworCQlfX3Jhd193cml0ZXEoKih2b2xhdGlsZSB1NjQgKilmcm9tLCB0byk7CisJCWZyb20gKz0gODsKKwkJdG8gKz0gODsKKwkJY291bnQgLT0gODsKKwl9CisKKwl3aGlsZSAoY291bnQpIHsKKwkJX19yYXdfd3JpdGViKCoodm9sYXRpbGUgdTggKilmcm9tLCB0byk7CisJCWZyb20rKzsKKwkJdG8rKzsKKwkJY291bnQtLTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKF9fbWVtY3B5X3RvaW8pOwpAQCAtNTUsMTAgKzgzLDI4IEBACiAgKi8KIHZvaWQgX19tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGludCBjLCBzaXplX3QgY291bnQpCiB7Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCWNvdW50LS07Ci0JCXdyaXRlYihjLCBkc3QpOworCXU2NCBxYyA9ICh1OCljOworCisJcWMgfD0gcWMgPDwgODsKKwlxYyB8PSBxYyA8PCAxNjsKKwlxYyB8PSBxYyA8PCAzMjsKKworCXdoaWxlIChjb3VudCAmJiAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylkc3QsIDgpKSB7CisJCV9fcmF3X3dyaXRlYihjLCBkc3QpOwogCQlkc3QrKzsKKwkJY291bnQtLTsKKwl9CisKKwl3aGlsZSAoY291bnQgPj0gOCkgeworCQlfX3Jhd193cml0ZXEocWMsIGRzdCk7CisJCWRzdCArPSA4OworCQljb3VudCAtPSA4OworCX0KKworCXdoaWxlIChjb3VudCkgeworCQlfX3Jhd193cml0ZWIoYywgZHN0KTsKKwkJZHN0Kys7CisJCWNvdW50LS07CiAJfQogfQogRVhQT1JUX1NZTUJPTChfX21lbXNldF9pbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtNjQva2VybmVsL2lycS5jCmluZGV4IDA3MWE2ZWMuLjI0MGI3NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2lycS5jCkBAIC00MCw2ICs0MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgKCpoYW5kbGVfYXJjaF9pcnEpKHN0cnVjdCBwdF9yZWdzICopID0gTlVMTDsKKwogdm9pZCBfX2luaXQgc2V0X2hhbmRsZV9pcnEodm9pZCAoKmhhbmRsZV9pcnEpKHN0cnVjdCBwdF9yZWdzICopKQogewogCWlmIChoYW5kbGVfYXJjaF9pcnEpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9qdW1wX2xhYmVsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9qdW1wX2xhYmVsLmMKaW5kZXggMjYzYTE2Ni4uNGYxZmVjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvanVtcF9sYWJlbC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2p1bXBfbGFiZWwuYwpAQCAtMjIsOSArMjIsOCBAQAogCiAjaWZkZWYgSEFWRV9KVU1QX0xBQkVMCiAKLXN0YXRpYyB2b2lkIF9fYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnksCi0JCQkJCWVudW0ganVtcF9sYWJlbF90eXBlIHR5cGUsCi0JCQkJCWJvb2wgaXNfc3RhdGljKQordm9pZCBhcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgICBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKQogewogCXZvaWQgKmFkZHIgPSAodm9pZCAqKWVudHJ5LT5jb2RlOwogCXUzMiBpbnNuOwpAQCAtMzcsMjIgKzM2LDE4IEBACiAJCWluc24gPSBhYXJjaDY0X2luc25fZ2VuX25vcCgpOwogCX0KIAotCWlmIChpc19zdGF0aWMpCi0JCWFhcmNoNjRfaW5zbl9wYXRjaF90ZXh0X25vc3luYyhhZGRyLCBpbnNuKTsKLQllbHNlCi0JCWFhcmNoNjRfaW5zbl9wYXRjaF90ZXh0KCZhZGRyLCAmaW5zbiwgMSk7Ci19Ci0KLXZvaWQgYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnksCi0JCQkgICAgICAgZW51bSBqdW1wX2xhYmVsX3R5cGUgdHlwZSkKLXsKLQlfX2FyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm0oZW50cnksIHR5cGUsIGZhbHNlKTsKKwlhYXJjaDY0X2luc25fcGF0Y2hfdGV4dCgmYWRkciwgJmluc24sIDEpOwogfQogCiB2b2lkIGFyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm1fc3RhdGljKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwKIAkJCQkgICAgICBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKQogewotCV9fYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShlbnRyeSwgdHlwZSwgdHJ1ZSk7CisJLyoKKwkgKiBXZSB1c2UgdGhlIGFyY2hpdGVjdGVkIEE2NCBOT1AgaW4gYXJjaF9zdGF0aWNfYnJhbmNoLCBzbyB0aGVyZSdzIG5vCisJICogbmVlZCB0byBwYXRjaCBhbiBpZGVudGljYWwgQTY0IE5PUCBvdmVyIHRoZSB0b3Agb2YgaXQgaGVyZS4gVGhlIGNvcmUKKwkgKiB3aWxsIGNhbGwgYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybSBmcm9tIGEgbW9kdWxlIG5vdGlmaWVyIGlmIHRoZQorCSAqIE5PUCBuZWVkcyB0byBiZSByZXBsYWNlZCBieSBhIGJyYW5jaC4KKwkgKi8KIH0KIAogI2VuZGlmCS8qIEhBVkVfSlVNUF9MQUJFTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYwppbmRleCAxZWIxY2M5Li5mZDAyN2IxIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vaW5zbi5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAjZGVmaW5lCUFBUkNINjRfSU5TTl9JTU1fTU9WTloJCUFBUkNINjRfSU5TTl9JTU1fTUFYCiAjZGVmaW5lCUFBUkNINjRfSU5TTl9JTU1fTU9WSwkJQUFSQ0g2NF9JTlNOX0lNTV8xNgpAQCAtMzk0LDMgKzM5NSwyMCBAQAogCSAgICAgICBtZS0+bmFtZSwgKGludClFTEY2NF9SX1RZUEUocmVsW2ldLnJfaW5mbyksIHZhbCk7CiAJcmV0dXJuIC1FTk9FWEVDOwogfQorCitpbnQgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsCisJCSAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKKwkJICAgIHN0cnVjdCBtb2R1bGUgKm1lKQoreworCWNvbnN0IEVsZl9TaGRyICpzLCAqc2U7CisJY29uc3QgY2hhciAqc2Vjc3RycyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKKworCWZvciAocyA9IHNlY2hkcnMsIHNlID0gc2VjaGRycyArIGhkci0+ZV9zaG51bTsgcyA8IHNlOyBzKyspIHsKKwkJaWYgKHN0cmNtcCgiLmFsdGluc3RydWN0aW9ucyIsIHNlY3N0cnMgKyBzLT5zaF9uYW1lKSA9PSAwKSB7CisJCQlhcHBseV9hbHRlcm5hdGl2ZXMoKHZvaWQgKilzLT5zaF9hZGRyLCBzLT5zaF9zaXplKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FybTY0L2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggYWEyOWVjYi4uMjVhNTMwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTY5LDggKzE2OSwxNCBAQAogCQlyZXQgPSAxOwogCX0KIAotCWlmIChsZWZ0ID4gKHM2NClhcm1wbXUtPm1heF9wZXJpb2QpCi0JCWxlZnQgPSBhcm1wbXUtPm1heF9wZXJpb2Q7CisJLyoKKwkgKiBMaW1pdCB0aGUgbWF4aW11bSBwZXJpb2QgdG8gcHJldmVudCB0aGUgY291bnRlciB2YWx1ZQorCSAqIGZyb20gb3ZlcnRha2luZyB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBwcm9ncmFtLiBJbgorCSAqIGVmZmVjdCB3ZSBhcmUgcmVkdWNpbmcgbWF4X3BlcmlvZCB0byBhY2NvdW50IGZvcgorCSAqIGludGVycnVwdCBsYXRlbmN5IChhbmQgd2UgYXJlIGJlaW5nIHZlcnkgY29uc2VydmF0aXZlKS4KKwkgKi8KKwlpZiAobGVmdCA+IChhcm1wbXUtPm1heF9wZXJpb2QgPj4gMSkpCisJCWxlZnQgPSBhcm1wbXUtPm1heF9wZXJpb2QgPj4gMTsKIAogCWxvY2FsNjRfc2V0KCZod2MtPnByZXZfY291bnQsICh1NjQpLWxlZnQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IDhhNGFlOGUuLmQ4ODJiODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY2NvbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KQEAgLTU1MSw2ICs1NTIsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHN5c3RlbV9jYWxsX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkJICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkJICAgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJaW50IHN5c2NhbGxubyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpLT5zeXNjYWxsbm87CisKKwlyZXR1cm4gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkgICAmc3lzY2FsbG5vLCAwLCAtMSk7Cit9CisKK3N0YXRpYyBpbnQgc3lzdGVtX2NhbGxfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCQkgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQkgICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlpbnQgc3lzY2FsbG5vLCByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsICZzeXNjYWxsbm8sIDAsIC0xKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdGFza19wdF9yZWdzKHRhcmdldCktPnN5c2NhbGxubyA9IHN5c2NhbGxubzsKKwlyZXR1cm4gcmV0OworfQorCiBlbnVtIGFhcmNoNjRfcmVnc2V0IHsKIAlSRUdTRVRfR1BSLAogCVJFR1NFVF9GUFIsCkBAIC01NTksNiArNTg2LDcgQEAKIAlSRUdTRVRfSFdfQlJFQUssCiAJUkVHU0VUX0hXX1dBVENILAogI2VuZGlmCisJUkVHU0VUX1NZU1RFTV9DQUxMLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBhYXJjaDY0X3JlZ3NldHNbXSA9IHsKQEAgLTYwOCw2ICs2MzYsMTQgQEAKIAkJLnNldCA9IGh3X2JyZWFrX3NldCwKIAl9LAogI2VuZGlmCisJW1JFR1NFVF9TWVNURU1fQ0FMTF0gPSB7CisJCS5jb3JlX25vdGVfdHlwZSA9IE5UX0FSTV9TWVNURU1fQ0FMTCwKKwkJLm4gPSAxLAorCQkuc2l6ZSA9IHNpemVvZihpbnQpLAorCQkuYWxpZ24gPSBzaXplb2YoaW50KSwKKwkJLmdldCA9IHN5c3RlbV9jYWxsX2dldCwKKwkJLnNldCA9IHN5c3RlbV9jYWxsX3NldCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfYWFyY2g2NF92aWV3ID0gewpAQCAtMTExNCw2ICsxMTUwLDEwIEBACiAKIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJLyogRG8gdGhlIHNlY3VyZSBjb21wdXRpbmcgY2hlY2sgZmlyc3Q7IGZhaWx1cmVzIHNob3VsZCBiZSBmYXN0LiAqLworCWlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpCisJCXJldHVybiAtMTsKKwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKIAkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VOVEVSKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmMKaW5kZXggMjQzNzE5Ni4uYjgwOTkxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jCkBAIC00MywxMiArNDMsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdV9vcHMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTcyLDEzICs3NCwxNSBAQAogCQkJCSBDT01QQVRfSFdDQVBfRkFTVF9NVUxUfENPTVBBVF9IV0NBUF9FRFNQfFwKIAkJCQkgQ09NUEFUX0hXQ0FQX1RMU3xDT01QQVRfSFdDQVBfVkZQfFwKIAkJCQkgQ09NUEFUX0hXQ0FQX1ZGUHYzfENPTVBBVF9IV0NBUF9WRlB2NHxcCi0JCQkJIENPTVBBVF9IV0NBUF9ORU9OfENPTVBBVF9IV0NBUF9JRElWKQorCQkJCSBDT01QQVRfSFdDQVBfTkVPTnxDT01QQVRfSFdDQVBfSURJVnxcCisJCQkJIENPTVBBVF9IV0NBUF9MUEFFKQogdW5zaWduZWQgaW50IGNvbXBhdF9lbGZfaHdjYXAgX19yZWFkX21vc3RseSA9IENPTVBBVF9FTEZfSFdDQVBfREVGQVVMVDsKIHVuc2lnbmVkIGludCBjb21wYXRfZWxmX2h3Y2FwMiBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAKK0RFQ0xBUkVfQklUTUFQKGNwdV9od2NhcHMsIEFSTTY0X05DQVBTKTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9uYW1lOwotc3RhdGljIGNvbnN0IGNoYXIgKm1hY2hpbmVfbmFtZTsKIHBoeXNfYWRkcl90IF9fZmR0X3BvaW50ZXIgX19pbml0ZGF0YTsKIAogLyoKQEAgLTExNiwxMiArMTIwLDE2IEBACiAKIHZvaWQgX19pbml0IHNtcF9zZXR1cF9wcm9jZXNzb3JfaWQodm9pZCkKIHsKKwl1NjQgbXBpZHIgPSByZWFkX2NwdWlkX21waWRyKCkgJiBNUElEUl9IV0lEX0JJVE1BU0s7CisJY3B1X2xvZ2ljYWxfbWFwKDApID0gbXBpZHI7CisKIAkvKgogCSAqIGNsZWFyIF9fbXlfY3B1X29mZnNldCBvbiBib290IENQVSB0byBhdm9pZCBoYW5nIGNhdXNlZCBieQogCSAqIHVzaW5nIHBlcmNwdSB2YXJpYWJsZSBlYXJseSwgZm9yIGV4YW1wbGUsIGxvY2tkZXAgd2lsbAogCSAqIGFjY2VzcyBwZXJjcHUgdmFyaWFibGUgaW5zaWRlIGxvY2tfcmVsZWFzZQogCSAqLwogCXNldF9teV9jcHVfb2Zmc2V0KDApOworCXByX2luZm8oIkJvb3RpbmcgTGludXggb24gcGh5c2ljYWwgQ1BVIDB4JWx4XG4iLCAodW5zaWduZWQgbG9uZyltcGlkcik7CiB9CiAKIGJvb2wgYXJjaF9tYXRjaF9jcHVfcGh5c19pZChpbnQgY3B1LCB1NjQgcGh5c19pZCkKQEAgLTMxMSw3ICszMTksNyBAQAogCQkJY3B1X3JlbGF4KCk7CiAJfQogCi0JbWFjaGluZV9uYW1lID0gb2ZfZmxhdF9kdF9nZXRfbWFjaGluZV9uYW1lKCk7CisJZHVtcF9zdGFja19zZXRfYXJjaF9kZXNjKCIlcyAoRFQpIiwgb2ZfZmxhdF9kdF9nZXRfbWFjaGluZV9uYW1lKCkpOwogfQogCiAvKgpAQCAtMzc2LDYgKzM4NCw3IEBACiAKIAkqY21kbGluZV9wID0gYm9vdF9jb21tYW5kX2xpbmU7CiAKKwllYXJseV9maXhtYXBfaW5pdCgpOwogCWVhcmx5X2lvcmVtYXBfaW5pdCgpOwogCiAJcGFyc2VfZWFybHlfcGFyYW0oKTsKQEAgLTM5OCw3ICs0MDcsNiBAQAogCiAJcHNjaV9pbml0KCk7CiAKLQljcHVfbG9naWNhbF9tYXAoMCkgPSByZWFkX2NwdWlkX21waWRyKCkgJiBNUElEUl9IV0lEX0JJVE1BU0s7CiAJY3B1X3JlYWRfYm9vdGNwdV9vcHMoKTsKICNpZmRlZiBDT05GSUdfU01QCiAJc21wX2luaXRfY3B1cygpOwpAQCAtNDQ3LDE0ICs0NTUsNTAgQEAKIAlOVUxMCiB9OwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGNvbnN0IGNoYXIgKmNvbXBhdF9od2NhcF9zdHJbXSA9IHsKKwkic3dwIiwKKwkiaGFsZiIsCisJInRodW1iIiwKKwkiMjZiaXQiLAorCSJmYXN0bXVsdCIsCisJImZwYSIsCisJInZmcCIsCisJImVkc3AiLAorCSJqYXZhIiwKKwkiaXdtbXh0IiwKKwkiY3J1bmNoIiwKKwkidGh1bWJlZSIsCisJIm5lb24iLAorCSJ2ZnB2MyIsCisJInZmcHYzZDE2IiwKKwkidGxzIiwKKwkidmZwdjQiLAorCSJpZGl2YSIsCisJImlkaXZ0IiwKKwkidmZwZDMyIiwKKwkibHBhZSIsCisJImV2dHN0cm0iCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29tcGF0X2h3Y2FwMl9zdHJbXSA9IHsKKwkiYWVzIiwKKwkicG11bGwiLAorCSJzaGExIiwKKwkic2hhMiIsCisJImNyYzMyIiwKKwlOVUxMCit9OworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKwogc3RhdGljIGludCBjX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBpOwotCi0Jc2VxX3ByaW50ZihtLCAiUHJvY2Vzc29yXHQ6ICVzIHJldiAlZCAoJXMpXG4iLAotCQkgICBjcHVfbmFtZSwgcmVhZF9jcHVpZF9pZCgpICYgMTUsIEVMRl9QTEFURk9STSk7CisJaW50IGksIGo7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJc3RydWN0IGNwdWluZm9fYXJtNjQgKmNwdWluZm8gPSAmcGVyX2NwdShjcHVfZGF0YSwgaSk7CisJCXUzMiBtaWRyID0gY3B1aW5mby0+cmVnX21pZHI7CisKIAkJLyoKIAkJICogZ2xpYmMgcmVhZHMgL3Byb2MvY3B1aW5mbyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZgogCQkgKiBvbmxpbmUgcHJvY2Vzc29ycywgbG9va2luZyBmb3IgbGluZXMgYmVnaW5uaW5nIHdpdGgKQEAgLTQ2MywyNSArNTA3LDM5IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCQlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdDogJWRcbiIsIGkpOwogI2VuZGlmCisKKwkJLyoKKwkJICogRHVtcCBvdXQgdGhlIGNvbW1vbiBwcm9jZXNzb3IgZmVhdHVyZXMgaW4gYSBzaW5nbGUgbGluZS4KKwkJICogVXNlcnNwYWNlIHNob3VsZCByZWFkIHRoZSBod2NhcHMgd2l0aCBnZXRhdXh2YWwoQVRfSFdDQVApCisJCSAqIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gcGFyc2UgdGhpcywgYnV0IHRoZXJlJ3MgYSBib2R5IG9mCisJCSAqIHNvZnR3YXJlIHdoaWNoIGRvZXMgYWxyZWFkeSAoYXQgbGVhc3QgZm9yIDMyLWJpdCkuCisJCSAqLworCQlzZXFfcHV0cyhtLCAiRmVhdHVyZXNcdDoiKTsKKwkJaWYgKHBlcnNvbmFsaXR5KGN1cnJlbnQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMikgeworI2lmZGVmIENPTkZJR19DT01QQVQKKwkJCWZvciAoaiA9IDA7IGNvbXBhdF9od2NhcF9zdHJbal07IGorKykKKwkJCQlpZiAoY29tcGF0X2VsZl9od2NhcCAmICgxIDw8IGopKQorCQkJCQlzZXFfcHJpbnRmKG0sICIgJXMiLCBjb21wYXRfaHdjYXBfc3RyW2pdKTsKKworCQkJZm9yIChqID0gMDsgY29tcGF0X2h3Y2FwMl9zdHJbal07IGorKykKKwkJCQlpZiAoY29tcGF0X2VsZl9od2NhcDIgJiAoMSA8PCBqKSkKKwkJCQkJc2VxX3ByaW50ZihtLCAiICVzIiwgY29tcGF0X2h3Y2FwMl9zdHJbal0pOworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKwkJfSBlbHNlIHsKKwkJCWZvciAoaiA9IDA7IGh3Y2FwX3N0cltqXTsgaisrKQorCQkJCWlmIChlbGZfaHdjYXAgJiAoMSA8PCBqKSkKKwkJCQkJc2VxX3ByaW50ZihtLCAiICVzIiwgaHdjYXBfc3RyW2pdKTsKKwkJfQorCQlzZXFfcHV0cyhtLCAiXG4iKTsKKworCQlzZXFfcHJpbnRmKG0sICJDUFUgaW1wbGVtZW50ZXJcdDogMHglMDJ4XG4iLAorCQkJICAgTUlEUl9JTVBMRU1FTlRPUihtaWRyKSk7CisJCXNlcV9wcmludGYobSwgIkNQVSBhcmNoaXRlY3R1cmU6IDhcbiIpOworCQlzZXFfcHJpbnRmKG0sICJDUFUgdmFyaWFudFx0OiAweCV4XG4iLCBNSURSX1ZBUklBTlQobWlkcikpOworCQlzZXFfcHJpbnRmKG0sICJDUFUgcGFydFx0OiAweCUwM3hcbiIsIE1JRFJfUEFSVE5VTShtaWRyKSk7CisJCXNlcV9wcmludGYobSwgIkNQVSByZXZpc2lvblx0OiAlZFxuXG4iLCBNSURSX1JFVklTSU9OKG1pZHIpKTsKIAl9CiAKLQkvKiBkdW1wIG91dCB0aGUgcHJvY2Vzc29yIGZlYXR1cmVzICovCi0Jc2VxX3B1dHMobSwgIkZlYXR1cmVzXHQ6ICIpOwotCi0JZm9yIChpID0gMDsgaHdjYXBfc3RyW2ldOyBpKyspCi0JCWlmIChlbGZfaHdjYXAgJiAoMSA8PCBpKSkKLQkJCXNlcV9wcmludGYobSwgIiVzICIsIGh3Y2FwX3N0cltpXSk7Ci0KLQlzZXFfcHJpbnRmKG0sICJcbkNQVSBpbXBsZW1lbnRlclx0OiAweCUwMnhcbiIsIHJlYWRfY3B1aWRfaWQoKSA+PiAyNCk7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BVIGFyY2hpdGVjdHVyZTogQUFyY2g2NFxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BVIHZhcmlhbnRcdDogMHgleFxuIiwgKHJlYWRfY3B1aWRfaWQoKSA+PiAyMCkgJiAxNSk7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BVIHBhcnRcdDogMHglMDN4XG4iLCAocmVhZF9jcHVpZF9pZCgpID4+IDQpICYgMHhmZmYpOwotCXNlcV9wcmludGYobSwgIkNQVSByZXZpc2lvblx0OiAlZFxuIiwgcmVhZF9jcHVpZF9pZCgpICYgMTUpOwotCi0Jc2VxX3B1dHMobSwgIlxuIik7Ci0KLQlzZXFfcHJpbnRmKG0sICJIYXJkd2FyZVx0OiAlc1xuIiwgbWFjaGluZV9uYW1lKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwzMi5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsMzIuYwppbmRleCAxYjlhZDAyLi41YTFiYTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwzMi5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbDMyLmMKQEAgLTE4Niw2ICsxODYsMTIgQEAKIAkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7CiAJCWVyciB8PSBfX3B1dF91c2VyKChjb21wYXRfdXB0cl90KSh1bnNpZ25lZCBsb25nKWZyb20tPnNpX3B0ciwgJnRvLT5zaV9wdHIpOwogCQlicmVhazsKKwljYXNlIF9fU0lfU1lTOgorCQllcnIgfD0gX19wdXRfdXNlcigoY29tcGF0X3VwdHJfdCkodW5zaWduZWQgbG9uZykKKwkJCQlmcm9tLT5zaV9jYWxsX2FkZHIsICZ0by0+c2lfY2FsbF9hZGRyKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfc3lzY2FsbCwgJnRvLT5zaV9zeXNjYWxsKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfYXJjaCwgJnRvLT5zaV9hcmNoKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDogLyogdGhpcyBpcyBqdXN0IGluIGNhc2UgZm9yIG5vdyAuLi4gKi8KIAkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfcGlkLCAmdG8tPnNpX3BpZCk7CiAJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3VpZCwgJnRvLT5zaV91aWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2xlZXAuUyBiL2FyY2gvYXJtNjQva2VybmVsL3NsZWVwLlMKaW5kZXggYTU2NGI0NC4uZWRlMTg2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2xlZXAuUworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zbGVlcC5TCkBAIC0xNDcsMTQgKzE0NywxMiBAQAogCXJldAogRU5EUFJPQyhjcHVfcmVzdW1lX2FmdGVyX21tdSkKIAotCS5kYXRhCiBFTlRSWShjcHVfcmVzdW1lKQogCWJsCWVsMl9zZXR1cAkJLy8gaWYgaW4gRUwyIGRyb3AgdG8gRUwxIGNsZWFubHkKICNpZmRlZiBDT05GSUdfU01QCiAJbXJzCXgxLCBtcGlkcl9lbDEKLQlhZHIJeDQsIG1waWRyX2hhc2hfcHRyCi0JbGRyCXg1LCBbeDRdCi0JYWRkCXg4LCB4NCwgeDUJCS8vIHg4ID0gc3RydWN0IG1waWRyX2hhc2ggcGh5cyBhZGRyZXNzCisJYWRycAl4OCwgbXBpZHJfaGFzaAorCWFkZCB4OCwgeDgsICM6bG8xMjptcGlkcl9oYXNoIC8vIHg4ID0gc3RydWN0IG1waWRyX2hhc2ggcGh5cyBhZGRyZXNzCiAgICAgICAgIC8qIHJldHJpZXZlIG1waWRyX2hhc2ggbWVtYmVycyB0byBjb21wdXRlIHRoZSBoYXNoICovCiAJbGRyCXgyLCBbeDgsICNNUElEUl9IQVNIX01BU0tdCiAJbGRwCXczLCB3NCwgW3g4LCAjTVBJRFJfSEFTSF9TSElGVFNdCkBAIC0xNjQsMTQgKzE2MiwxNSBAQAogI2Vsc2UKIAltb3YJeDcsIHh6cgogI2VuZGlmCi0JYWRyCXgwLCBzbGVlcF9zYXZlX3NwCisJYWRycAl4MCwgc2xlZXBfc2F2ZV9zcAorCWFkZAl4MCwgeDAsICM6bG8xMjpzbGVlcF9zYXZlX3NwCiAJbGRyCXgwLCBbeDAsICNTTEVFUF9TQVZFX1NQX1BIWVNdCiAJbGRyCXgwLCBbeDAsIHg3LCBsc2wgIzNdCiAJLyogbG9hZCBzcCBmcm9tIGNvbnRleHQgKi8KIAlsZHIJeDIsIFt4MCwgI0NQVV9DVFhfU1BdCi0JYWRyCXgxLCBzbGVlcF9pZG1hcF9waHlzCisJYWRycAl4MSwgc2xlZXBfaWRtYXBfcGh5cwogCS8qIGxvYWQgcGh5c2ljYWwgYWRkcmVzcyBvZiBpZGVudGl0eSBtYXAgcGFnZSB0YWJsZSBpbiB4MSAqLwotCWxkcgl4MSwgW3gxXQorCWxkcgl4MSwgW3gxLCAjOmxvMTI6c2xlZXBfaWRtYXBfcGh5c10KIAltb3YJc3AsIHgyCiAJLyoKIAkgKiBjcHVfZG9fcmVzdW1lIGV4cGVjdHMgeDAgdG8gY29udGFpbiBjb250ZXh0IHBoeXNpY2FsIGFkZHJlc3MKQEAgLTE4MCwyNiArMTc5LDMgQEAKIAlibAljcHVfZG9fcmVzdW1lCQkvLyBQQyByZWxhdGl2ZSBqdW1wLCBNTVUgb2ZmCiAJYgljcHVfcmVzdW1lX21tdQkJLy8gUmVzdW1lIE1NVSwgbmV2ZXIgcmV0dXJucwogRU5EUFJPQyhjcHVfcmVzdW1lKQotCi0JLmFsaWduIDMKLW1waWRyX2hhc2hfcHRyOgotCS8qCi0JICogb2Zmc2V0IG9mIG1waWRyX2hhc2ggc3ltYm9sIGZyb20gY3VycmVudCBsb2NhdGlvbgotCSAqIHVzZWQgdG8gb2J0YWluIHJ1bi10aW1lIG1waWRyX2hhc2ggYWRkcmVzcyB3aXRoIE1NVSBvZmYKLSAgICAgICAgICovCi0JLnF1YWQJbXBpZHJfaGFzaCAtIC4KLS8qCi0gKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGlkZW50aXR5IG1hcHBlZCBwYWdlIHRhYmxlcwotICovCi0JLnR5cGUJc2xlZXBfaWRtYXBfcGh5cywgI29iamVjdAotRU5UUlkoc2xlZXBfaWRtYXBfcGh5cykKLQkucXVhZAkwCi0vKgotICogc3RydWN0IHNsZWVwX3NhdmVfc3AgewotICoJcGh5c19hZGRyX3QgKnNhdmVfcHRyX3N0YXNoOwotICoJcGh5c19hZGRyX3Qgc2F2ZV9wdHJfc3Rhc2hfcGh5czsKLSAqIH07Ci0gKi8KLQkudHlwZQlzbGVlcF9zYXZlX3NwLCAjb2JqZWN0Ci1FTlRSWShzbGVlcF9zYXZlX3NwKQotCS5zcGFjZQlTTEVFUF9TQVZFX1NQX1NaCS8vIHN0cnVjdCBzbGVlcF9zYXZlX3NwCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jCmluZGV4IGIwNmQxZDkuLjdhZTZlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFfd29yay5oPgogCisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgpAQCAtMzA5LDYgKzMxMCw3IEBACiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKIAlwcl9pbmZvKCJTTVA6IFRvdGFsIG9mICVkIHByb2Nlc3NvcnMgYWN0aXZhdGVkLlxuIiwgbnVtX29ubGluZV9jcHVzKCkpOworCWFwcGx5X2FsdGVybmF0aXZlc19hbGwoKTsKIH0KIAogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3N1c3BlbmQuYyBiL2FyY2gvYXJtNjQva2VybmVsL3N1c3BlbmQuYwppbmRleCAxM2FkNGRiLi4zNzcxYjcyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zdXNwZW5kLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc3VzcGVuZC5jCkBAIC0xMjYsOCArMTI2LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1leHRlcm4gc3RydWN0IHNsZWVwX3NhdmVfc3Agc2xlZXBfc2F2ZV9zcDsKLWV4dGVybiBwaHlzX2FkZHJfdCBzbGVlcF9pZG1hcF9waHlzOworc3RydWN0IHNsZWVwX3NhdmVfc3Agc2xlZXBfc2F2ZV9zcDsKK3BoeXNfYWRkcl90IHNsZWVwX2lkbWFwX3BoeXM7CiAKIHN0YXRpYyBpbnQgX19pbml0IGNwdV9zdXNwZW5kX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3N5c19jb21wYXQuYyBiL2FyY2gvYXJtNjQva2VybmVsL3N5c19jb21wYXQuYwppbmRleCBkYzQ3ZTUzLi4yOGM1MTFiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNfY29tcGF0LmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzX2NvbXBhdC5jCkBAIC0yOCwyOSArMjgsMzkgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotc3RhdGljIGlubGluZSB2b2lkCi1kb19jb21wYXRfY2FjaGVfb3AodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGludCBmbGFncykKK3N0YXRpYyBsb25nCitfX2RvX2NvbXBhdF9jYWNoZV9vcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPmFjdGl2ZV9tbTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlsb25nIHJldDsKIAotCWlmIChlbmQgPCBzdGFydCB8fCBmbGFncykKLQkJcmV0dXJuOworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBjaHVuayA9IG1pbihQQUdFX1NJWkUsIGVuZCAtIHN0YXJ0KTsKIAotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOwotCWlmICh2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZCkgewotCQlpZiAoc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KQotCQkJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwotCQlpZiAoZW5kID4gdm1hLT52bV9lbmQpCi0JCQllbmQgPSB2bWEtPnZtX2VuZDsKLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJX19mbHVzaF9jYWNoZV91c2VyX3JhbmdlKHN0YXJ0ICYgUEFHRV9NQVNLLCBQQUdFX0FMSUdOKGVuZCkpOwotCQlyZXR1cm47Ci0JfQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAwOworCisJCXJldCA9IF9fZmx1c2hfY2FjaGVfdXNlcl9yYW5nZShzdGFydCwgc3RhcnQgKyBjaHVuayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWNvbmRfcmVzY2hlZCgpOworCQlzdGFydCArPSBjaHVuazsKKwl9IHdoaWxlIChzdGFydCA8IGVuZCk7CisKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBsb25nCitkb19jb21wYXRfY2FjaGVfb3AodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGludCBmbGFncykKK3sKKwlpZiAoZW5kIDwgc3RhcnQgfHwgZmxhZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHN0YXJ0LCBlbmQgLSBzdGFydCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIF9fZG9fY29tcGF0X2NhY2hlX29wKHN0YXJ0LCBlbmQpOworfQogLyoKICAqIEhhbmRsZSBhbGwgdW5yZWNvZ25pc2VkIHN5c3RlbSBjYWxscy4KICAqLwpAQCAtNzQsOCArODQsNyBAQAogCSAqIHRoZSBzcGVjaWZpZWQgcmVnaW9uKS4KIAkgKi8KIAljYXNlIF9fQVJNX05SX2NvbXBhdF9jYWNoZWZsdXNoOgotCQlkb19jb21wYXRfY2FjaGVfb3AocmVncy0+cmVnc1swXSwgcmVncy0+cmVnc1sxXSwgcmVncy0+cmVnc1syXSk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gZG9fY29tcGF0X2NhY2hlX29wKHJlZ3MtPnJlZ3NbMF0sIHJlZ3MtPnJlZ3NbMV0sIHJlZ3MtPnJlZ3NbMl0pOwogCiAJY2FzZSBfX0FSTV9OUl9jb21wYXRfc2V0X3RsczoKIAkJY3VycmVudC0+dGhyZWFkLnRwX3ZhbHVlID0gcmVncy0+cmVnc1swXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL2FybTY0L2tlcm5lbC90b3BvbG9neS5jCmluZGV4IGI2ZWUyNmIuLmZjYjhmN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMjU1LDEyICsyNTUsMTUgQEAKIAkJLyogTXVsdGlwcm9jZXNzb3Igc3lzdGVtIDogTXVsdGktdGhyZWFkcyBwZXIgY29yZSAqLwogCQljcHVpZF90b3BvLT50aHJlYWRfaWQgID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDApOwogCQljcHVpZF90b3BvLT5jb3JlX2lkICAgID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpOwotCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDIpOworCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDIpIHwKKwkJCQkJIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAzKSA8PCA4OwogCX0gZWxzZSB7CiAJCS8qIE11bHRpcHJvY2Vzc29yIHN5c3RlbSA6IFNpbmdsZS10aHJlYWQgcGVyIGNvcmUgKi8KIAkJY3B1aWRfdG9wby0+dGhyZWFkX2lkICA9IC0xOwogCQljcHVpZF90b3BvLT5jb3JlX2lkICAgID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDApOwotCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpOworCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpIHwKKwkJCQkJIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAyKSA8PCA4IHwKKwkJCQkJIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAzKSA8PCAxNjsKIAl9CiAKIAlwcl9kZWJ1ZygiQ1BVJXU6IGNsdXN0ZXIgJWQgY29yZSAlZCB0aHJlYWQgJWQgbXBpZHIgJSMwMTZsbHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC90cmFjZS1ldmVudHMtZW11bGF0aW9uLmggYi9hcmNoL2FybTY0L2tlcm5lbC90cmFjZS1ldmVudHMtZW11bGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxZGQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3RyYWNlLWV2ZW50cy1lbXVsYXRpb24uaApAQCAtMCwwICsxLDM1IEBACisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBlbXVsYXRpb24KKworI2lmICFkZWZpbmVkKF9UUkFDRV9FTVVMQVRJT05fSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1RSQUNFX0VNVUxBVElPTl9ICisKKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKK1RSQUNFX0VWRU5UKGluc3RydWN0aW9uX2VtdWxhdGlvbiwKKworCVRQX1BST1RPKGNvbnN0IGNoYXIgKmluc3RyLCB1NjQgYWRkciksCisJVFBfQVJHUyhpbnN0ciwgYWRkciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX3N0cmluZyhpbnN0ciwgaW5zdHIpCisJCV9fZmllbGQodTY0LCBhZGRyKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKGluc3RyLCBpbnN0cik7CisJCV9fZW50cnktPmFkZHIgPSBhZGRyOworCSksCisKKwlUUF9wcmludGsoImluc3RyPVwiJXNcIiBhZGRyPTB4JWxseCIsIF9fZ2V0X3N0cihpbnN0ciksIF9fZW50cnktPmFkZHIpCispOworCisjZW5kaWYgLyogX1RSQUNFX0VNVUxBVElPTl9IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSAorI3VuZGVmIFRSQUNFX0lOQ0xVREVfRklMRQorI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEggLgorCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSB0cmFjZS1ldmVudHMtZW11bGF0aW9uCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYwppbmRleCBkZTFiMDg1Li4wYTgwMWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMKQEAgLTI1OSw2ICsyNTksNjkgQEAKIAl9CiB9CiAKK3N0YXRpYyBMSVNUX0hFQUQodW5kZWZfaG9vayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyh1bmRlZl9sb2NrKTsKKwordm9pZCByZWdpc3Rlcl91bmRlZl9ob29rKHN0cnVjdCB1bmRlZl9ob29rICpob29rKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnVuZGVmX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmaG9vay0+bm9kZSwgJnVuZGVmX2hvb2spOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bmRlZl9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgdW5yZWdpc3Rlcl91bmRlZl9ob29rKHN0cnVjdCB1bmRlZl9ob29rICpob29rKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnVuZGVmX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmaG9vay0+bm9kZSk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVuZGVmX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjYWxsX3VuZGVmX2hvb2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVuZGVmX2hvb2sgKmhvb2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaW5zdHI7CisJaW50ICgqZm4pKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgaW5zdHIpID0gTlVMTDsKKwl2b2lkIF9fdXNlciAqcGMgPSAodm9pZCBfX3VzZXIgKilpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCXJldHVybiAxOworCisJaWYgKGNvbXBhdF90aHVtYl9tb2RlKHJlZ3MpKSB7CisJCS8qIDE2LWJpdCBUaHVtYiBpbnN0cnVjdGlvbiAqLworCQlpZiAoZ2V0X3VzZXIoaW5zdHIsICh1MTYgX191c2VyICopcGMpKQorCQkJZ290byBleGl0OworCQlpbnN0ciA9IGxlMTZfdG9fY3B1KGluc3RyKTsKKwkJaWYgKGFhcmNoMzJfaW5zbl9pc193aWRlKGluc3RyKSkgeworCQkJdTMyIGluc3RyMjsKKworCQkJaWYgKGdldF91c2VyKGluc3RyMiwgKHUxNiBfX3VzZXIgKikocGMgKyAyKSkpCisJCQkJZ290byBleGl0OworCQkJaW5zdHIyID0gbGUxNl90b19jcHUoaW5zdHIyKTsKKwkJCWluc3RyID0gKGluc3RyIDw8IDE2KSB8IGluc3RyMjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIDMyLWJpdCBBUk0gaW5zdHJ1Y3Rpb24gKi8KKwkJaWYgKGdldF91c2VyKGluc3RyLCAodTMyIF9fdXNlciAqKXBjKSkKKwkJCWdvdG8gZXhpdDsKKwkJaW5zdHIgPSBsZTMyX3RvX2NwdShpbnN0cik7CisJfQorCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ1bmRlZl9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCAmdW5kZWZfaG9vaywgbm9kZSkKKwkJaWYgKChpbnN0ciAmIGhvb2stPmluc3RyX21hc2spID09IGhvb2stPmluc3RyX3ZhbCAmJgorCQkJKHJlZ3MtPnBzdGF0ZSAmIGhvb2stPnBzdGF0ZV9tYXNrKSA9PSBob29rLT5wc3RhdGVfdmFsKQorCQkJZm4gPSBob29rLT5mbjsKKworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bmRlZl9sb2NrLCBmbGFncyk7CitleGl0OgorCXJldHVybiBmbiA/IGZuKHJlZ3MsIGluc3RyKSA6IDE7Cit9CisKIGFzbWxpbmthZ2Ugdm9pZCBfX2V4Y2VwdGlvbiBkb191bmRlZmluc3RyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXNpZ2luZm9fdCBpbmZvOwpAQCAtMjY4LDYgKzMzMSw5IEBACiAJaWYgKCFhYXJjaDMyX2JyZWFrX2hhbmRsZXIocmVncykpCiAJCXJldHVybjsKIAorCWlmIChjYWxsX3VuZGVmX2hvb2socmVncykgPT0gMCkKKwkJcmV0dXJuOworCiAJaWYgKHNob3dfdW5oYW5kbGVkX3NpZ25hbHMgJiYgdW5oYW5kbGVkX3NpZ25hbChjdXJyZW50LCBTSUdJTEwpICYmCiAJICAgIHByaW50a19yYXRlbGltaXQoKSkgewogCQlwcl9pbmZvKCIlc1slZF06IHVuZGVmaW5lZCBpbnN0cnVjdGlvbjogcGM9JXBcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm02NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBlZGY4NzE1Li45OTY1ZWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTExLDggKzExLDkgQEAKIAogI2luY2x1ZGUgImltYWdlLmgiCiAKLSNkZWZpbmUgQVJNX0VYSVRfS0VFUCh4KQotI2RlZmluZSBBUk1fRVhJVF9ESVNDQVJEKHgpCXgKKy8qIC5leGl0LnRleHQgbmVlZGVkIGluIGNhc2Ugb2YgYWx0ZXJuYXRpdmUgcGF0Y2hpbmcgKi8KKyNkZWZpbmUgQVJNX0VYSVRfS0VFUCh4KQl4CisjZGVmaW5lIEFSTV9FWElUX0RJU0NBUkQoeCkKIAogT1VUUFVUX0FSQ0goYWFyY2g2NCkKIEVOVFJZKF90ZXh0KQpAQCAtMzIsNiArMzMsMjIgQEAKIAkqKC5oeXAudGV4dCkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX2h5cF90ZXh0X2VuZCkgPSAuOwogCisvKgorICogVGhlIHNpemUgb2YgdGhlIFBFL0NPRkYgc2VjdGlvbiB0aGF0IGNvdmVycyB0aGUga2VybmVsIGltYWdlLCB3aGljaAorICogcnVucyBmcm9tIHN0ZXh0IHRvIF9lZGF0YSwgbXVzdCBiZSBhIHJvdW5kIG11bHRpcGxlIG9mIHRoZSBQRS9DT0ZGCisgKiBGaWxlQWxpZ25tZW50LCB3aGljaCB3ZSBzZXQgdG8gaXRzIG1pbmltdW0gdmFsdWUgb2YgMHgyMDAuICdzdGV4dCcKKyAqIGl0c2VsZiBpcyA0IEtCIGFsaWduZWQsIHNvIHBhZGRpbmcgb3V0IF9lZGF0YSB0byBhIDB4MjAwIGFsaWduZWQKKyAqIGJvdW5kYXJ5IHNob3VsZCBiZSBzdWZmaWNpZW50LgorICovCitQRUNPRkZfRklMRV9BTElHTk1FTlQgPSAweDIwMDsKKworI2lmZGVmIENPTkZJR19FRkkKKyNkZWZpbmUgUEVDT0ZGX0VEQVRBX1BBRERJTkcJXAorCS5wZWNvZmZfZWRhdGFfcGFkZGluZyA6IHsgQllURSgwKTsgLiA9IEFMSUdOKFBFQ09GRl9GSUxFX0FMSUdOTUVOVCk7IH0KKyNlbHNlCisjZGVmaW5lIFBFQ09GRl9FREFUQV9QQURESU5HCisjZW5kaWYKKwogU0VDVElPTlMKIHsKIAkvKgpAQCAtMTAwLDkgKzExNywyMSBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9faW5pdF9lbmQgPSAuOwogCisJLiA9IEFMSUdOKDQpOworCS5hbHRpbnN0cnVjdGlvbnMgOiB7CisJCV9fYWx0X2luc3RydWN0aW9ucyA9IC47CisJCSooLmFsdGluc3RydWN0aW9ucykKKwkJX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCA9IC47CisJfQorCS5hbHRpbnN0cl9yZXBsYWNlbWVudCA6IHsKKwkJKiguYWx0aW5zdHJfcmVwbGFjZW1lbnQpCisJfQorCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX2RhdGEgPSAuOwogCV9zZGF0YSA9IC47CiAJUldfREFUQV9TRUNUSU9OKDY0LCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQorCVBFQ09GRl9FREFUQV9QQURESU5HCiAJX2VkYXRhID0gLjsKIAogCUJTU19TRUNUSU9OKDAsIDAsIDApCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAuUyBiL2FyY2gvYXJtNjQva3ZtL2h5cC5TCmluZGV4IGI3MmFhOWYuLmZiZTkwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC5TCisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC5TCkBAIC03NjEsMTAgKzc2MSwxMCBAQAogLm1hY3JvIGFjdGl2YXRlX3RyYXBzCiAJbGRyICAgICB4MiwgW3gwLCAjVkNQVV9IQ1JfRUwyXQogCW1zciAgICAgaGNyX2VsMiwgeDIKLQlsZHIJeDIsID0oQ1BUUl9FTDJfVFRBKQorCW1vdgl4MiwgI0NQVFJfRUwyX1RUQQogCW1zcgljcHRyX2VsMiwgeDIKIAotCWxkcgl4MiwgPSgxIDw8IDE1KQkvLyBUcmFwIENQMTUgQ3I9MTUKKwltb3YJeDIsICMoMSA8PCAxNSkJLy8gVHJhcCBDUDE1IENyPTE1CiAJbXNyCWhzdHJfZWwyLCB4MgogCiAJbXJzCXgyLCBtZGNyX2VsMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvbW0vTWFrZWZpbGUKaW5kZXggYzU2MTc5ZS4uNzczZDM3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L21tL01ha2VmaWxlCkBAIC0zLDMgKzMsNCBAQAogCQkJCSAgIGlvcmVtYXAubyBtbWFwLm8gcGdkLm8gbW11Lm8gXAogCQkJCSAgIGNvbnRleHQubyBwcm9jLm8gcGFnZWF0dHIubwogb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkJKz0gaHVnZXRsYnBhZ2Uubworb2JqLSQoQ09ORklHX0FSTTY0X1BURFVNUCkJKz0gZHVtcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2NhY2hlLlMgYi9hcmNoL2FybTY0L21tL2NhY2hlLlMKaW5kZXggMjM2NjM4My4uMjU2MGUxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9jYWNoZS5TCisrKyBiL2FyY2gvYXJtNjQvbW0vY2FjaGUuUwpAQCAtMTcsOSArMTcsMTIgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgogCiAjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKIApAQCAtMTM4LDkgKzE0MSwxMiBAQAogCWFkZAl4NCwgeDQsIHgyCiAJY21wCXg0LCB4MQogCWIubG8JMWIKLTk6CQkJCQkJLy8gaWdub3JlIGFueSBmYXVsdGluZyBjYWNoZSBvcGVyYXRpb24KIAlkc2IJaXNoCiAJaXNiCisJbW92CXgwLCAjMAorCXJldAorOToKKwltb3YJeDAsICMtRUZBVUxUCiAJcmV0CiBFTkRQUk9DKGZsdXNoX2ljYWNoZV9yYW5nZSkKIEVORFBST0MoX19mbHVzaF9jYWNoZV91c2VyX3JhbmdlKQpAQCAtMjEwLDcgKzIxNiw3IEBACiAJZGNhY2hlX2xpbmVfc2l6ZSB4MiwgeDMKIAlzdWIJeDMsIHgyLCAjMQogCWJpYwl4MCwgeDAsIHgzCi0xOglkYwljdmFjLCB4MAkJCS8vIGNsZWFuIEQgLyBVIGxpbmUKKzE6CWFsdGVybmF0aXZlX2luc24gImRjIGN2YWMsIHgwIiwgImRjIGNpdmFjLCB4MCIsIEFSTTY0X1dPUktBUk9VTkRfQ0xFQU5fQ0FDSEUKIAlhZGQJeDAsIHgwLCB4MgogCWNtcAl4MCwgeDEKIAliLmxvCTFiCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2R1bXAuYyBiL2FyY2gvYXJtNjQvbW0vZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNjk2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L21tL2R1bXAuYwpAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBEZWJ1ZyBoZWxwZXIgdG8gZHVtcCB0aGUgY3VycmVudCBrZXJuZWwgcGFnZXRhYmxlcyBvZiB0aGUgc3lzdGVtCisgKiBzbyB0aGF0IHdlIGNhbiBzZWUgd2hhdCB0aGUgdmFyaW91cyBtZW1vcnkgcmFuZ2VzIGFyZSBzZXQgdG8uCisgKgorICogRGVyaXZlZCBmcm9tIHg4NiBhbmQgYXJtIGltcGxlbWVudGF0aW9uOgorICogKEMpIENvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yOiBBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBsaW51eC5pbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworI2RlZmluZSBMT1dFU1RfQUREUgkoVUwoMHhmZmZmZmZmZmZmZmZmZmZmKSA8PCBWQV9CSVRTKQorCitzdHJ1Y3QgYWRkcl9tYXJrZXIgeworCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzczsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworZW51bSBhZGRyZXNzX21hcmtlcnNfaWR4IHsKKwlWTUFMTE9DX1NUQVJUX05SID0gMCwKKwlWTUFMTE9DX0VORF9OUiwKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKKwlWTUVNTUFQX1NUQVJUX05SLAorCVZNRU1NQVBfRU5EX05SLAorI2VuZGlmCisJUENJX1NUQVJUX05SLAorCVBDSV9FTkRfTlIsCisJRklYQUREUl9TVEFSVF9OUiwKKwlGSVhBRERSX0VORF9OUiwKKwlNT0RVTEVTX1NUQVJUX05SLAorCU1PRFVFTFNfRU5EX05SLAorCUtFUk5FTF9TUEFDRV9OUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYWRkcl9tYXJrZXIgYWRkcmVzc19tYXJrZXJzW10gPSB7CisJeyBWTUFMTE9DX1NUQVJULAkidm1hbGxvYygpIEFyZWEiIH0sCisJeyBWTUFMTE9DX0VORCwJCSJ2bWFsbG9jKCkgRW5kIiB9LAorI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUAorCXsgMCwJCQkidm1lbW1hcCBzdGFydCIgfSwKKwl7IDAsCQkJInZtZW1tYXAgZW5kIiB9LAorI2VuZGlmCisJeyAodW5zaWduZWQgbG9uZykgUENJX0lPQkFTRSwJCSJQQ0kgSS9PIHN0YXJ0IiB9LAorCXsgKHVuc2lnbmVkIGxvbmcpIFBDSV9JT0JBU0UgKyBTWl8xNk0sCSJQQ0kgSS9PIGVuZCIgfSwKKwl7IEZJWEFERFJfU1RBUlQsCSJGaXhtYXAgc3RhcnQiIH0sCisJeyBGSVhBRERSX1RPUCwJCSJGaXhtYXAgZW5kIiB9LAorCXsgTU9EVUxFU19WQUREUiwJIk1vZHVsZXMgc3RhcnQiIH0sCisJeyBNT0RVTEVTX0VORCwJCSJNb2R1bGVzIGVuZCIgfSwKKwl7IFBBR0VfT0ZGU0VULAkJIktlcm5lbCBNYXBwaW5nIiB9LAorCXsgLTEsCQkJTlVMTCB9LAorfTsKKworc3RydWN0IHBnX3N0YXRlIHsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKKwljb25zdCBzdHJ1Y3QgYWRkcl9tYXJrZXIgKm1hcmtlcjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3M7CisJdW5zaWduZWQgbGV2ZWw7CisJdTY0IGN1cnJlbnRfcHJvdDsKK307CisKK3N0cnVjdCBwcm90X2JpdHMgeworCXU2NAkJbWFzazsKKwl1NjQJCXZhbDsKKwljb25zdCBjaGFyCSpzZXQ7CisJY29uc3QgY2hhcgkqY2xlYXI7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RfYml0cyBwdGVfYml0c1tdID0geworCXsKKwkJLm1hc2sJPSBQVEVfVVNFUiwKKwkJLnZhbAk9IFBURV9VU0VSLAorCQkuc2V0CT0gIlVTUiIsCisJCS5jbGVhcgk9ICIgICAiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfUkRPTkxZLAorCQkudmFsCT0gUFRFX1JET05MWSwKKwkJLnNldAk9ICJybyIsCisJCS5jbGVhcgk9ICJSVyIsCisJfSwgeworCQkubWFzawk9IFBURV9QWE4sCisJCS52YWwJPSBQVEVfUFhOLAorCQkuc2V0CT0gIk5YIiwKKwkJLmNsZWFyCT0gInggIiwKKwl9LCB7CisJCS5tYXNrCT0gUFRFX1NIQVJFRCwKKwkJLnZhbAk9IFBURV9TSEFSRUQsCisJCS5zZXQJPSAiU0hEIiwKKwkJLmNsZWFyCT0gIiAgICIsCisJfSwgeworCQkubWFzawk9IFBURV9BRiwKKwkJLnZhbAk9IFBURV9BRiwKKwkJLnNldAk9ICJBRiIsCisJCS5jbGVhcgk9ICIgICIsCisJfSwgeworCQkubWFzawk9IFBURV9ORywKKwkJLnZhbAk9IFBURV9ORywKKwkJLnNldAk9ICJORyIsCisJCS5jbGVhcgk9ICIgICIsCisJfSwgeworCQkubWFzawk9IFBURV9VWE4sCisJCS52YWwJPSBQVEVfVVhOLAorCQkuc2V0CT0gIlVYTiIsCisJfSwgeworCQkubWFzawk9IFBURV9BVFRSSU5EWF9NQVNLLAorCQkudmFsCT0gUFRFX0FUVFJJTkRYKE1UX0RFVklDRV9uR25SbkUpLAorCQkuc2V0CT0gIkRFVklDRS9uR25SbkUiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfQVRUUklORFhfTUFTSywKKwkJLnZhbAk9IFBURV9BVFRSSU5EWChNVF9ERVZJQ0VfbkduUkUpLAorCQkuc2V0CT0gIkRFVklDRS9uR25SRSIsCisJfSwgeworCQkubWFzawk9IFBURV9BVFRSSU5EWF9NQVNLLAorCQkudmFsCT0gUFRFX0FUVFJJTkRYKE1UX0RFVklDRV9HUkUpLAorCQkuc2V0CT0gIkRFVklDRS9HUkUiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfQVRUUklORFhfTUFTSywKKwkJLnZhbAk9IFBURV9BVFRSSU5EWChNVF9OT1JNQUxfTkMpLAorCQkuc2V0CT0gIk1FTS9OT1JNQUwtTkMiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfQVRUUklORFhfTUFTSywKKwkJLnZhbAk9IFBURV9BVFRSSU5EWChNVF9OT1JNQUwpLAorCQkuc2V0CT0gIk1FTS9OT1JNQUwiLAorCX0KK307CisKK3N0cnVjdCBwZ19sZXZlbCB7CisJY29uc3Qgc3RydWN0IHByb3RfYml0cyAqYml0czsKKwlzaXplX3QgbnVtOworCXU2NCBtYXNrOworfTsKKworc3RhdGljIHN0cnVjdCBwZ19sZXZlbCBwZ19sZXZlbFtdID0geworCXsKKwl9LCB7IC8qIHBnZCAqLworCQkuYml0cwk9IHB0ZV9iaXRzLAorCQkubnVtCT0gQVJSQVlfU0laRShwdGVfYml0cyksCisJfSwgeyAvKiBwdWQgKi8KKwkJLmJpdHMJPSBwdGVfYml0cywKKwkJLm51bQk9IEFSUkFZX1NJWkUocHRlX2JpdHMpLAorCX0sIHsgLyogcG1kICovCisJCS5iaXRzCT0gcHRlX2JpdHMsCisJCS5udW0JPSBBUlJBWV9TSVpFKHB0ZV9iaXRzKSwKKwl9LCB7IC8qIHB0ZSAqLworCQkuYml0cwk9IHB0ZV9iaXRzLAorCQkubnVtCT0gQVJSQVlfU0laRShwdGVfYml0cyksCisJfSwKK307CisKK3N0YXRpYyB2b2lkIGR1bXBfcHJvdChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBjb25zdCBzdHJ1Y3QgcHJvdF9iaXRzICpiaXRzLAorCQkJc2l6ZV90IG51bSkKK3sKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrLCBiaXRzKyspIHsKKwkJY29uc3QgY2hhciAqczsKKworCQlpZiAoKHN0LT5jdXJyZW50X3Byb3QgJiBiaXRzLT5tYXNrKSA9PSBiaXRzLT52YWwpCisJCQlzID0gYml0cy0+c2V0OworCQllbHNlCisJCQlzID0gYml0cy0+Y2xlYXI7CisKKwkJaWYgKHMpCisJCQlzZXFfcHJpbnRmKHN0LT5zZXEsICIgJXMiLCBzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5vdGVfcGFnZShzdHJ1Y3QgcGdfc3RhdGUgKnN0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxldmVsLAorCQkJCXU2NCB2YWwpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgdW5pdHNbXSA9ICJLTUdUUEUiOworCXU2NCBwcm90ID0gdmFsICYgcGdfbGV2ZWxbbGV2ZWxdLm1hc2s7CisKKwlpZiAoYWRkciA8IExPV0VTVF9BRERSKQorCQlyZXR1cm47CisKKwlpZiAoIXN0LT5sZXZlbCkgeworCQlzdC0+bGV2ZWwgPSBsZXZlbDsKKwkJc3QtPmN1cnJlbnRfcHJvdCA9IHByb3Q7CisJCXN0LT5zdGFydF9hZGRyZXNzID0gYWRkcjsKKwkJc2VxX3ByaW50ZihzdC0+c2VxLCAiLS0tWyAlcyBdLS0tXG4iLCBzdC0+bWFya2VyLT5uYW1lKTsKKwl9IGVsc2UgaWYgKHByb3QgIT0gc3QtPmN1cnJlbnRfcHJvdCB8fCBsZXZlbCAhPSBzdC0+bGV2ZWwgfHwKKwkJICAgYWRkciA+PSBzdC0+bWFya2VyWzFdLnN0YXJ0X2FkZHJlc3MpIHsKKwkJY29uc3QgY2hhciAqdW5pdCA9IHVuaXRzOworCQl1bnNpZ25lZCBsb25nIGRlbHRhOworCisJCWlmIChzdC0+Y3VycmVudF9wcm90KSB7CisJCQlzZXFfcHJpbnRmKHN0LT5zZXEsICIweCUxNmx4LTB4JTE2bHggICAiLAorCQkJCSAgIHN0LT5zdGFydF9hZGRyZXNzLCBhZGRyKTsKKworCQkJZGVsdGEgPSAoYWRkciAtIHN0LT5zdGFydF9hZGRyZXNzKSA+PiAxMDsKKwkJCXdoaWxlICghKGRlbHRhICYgMTAyMykgJiYgdW5pdFsxXSkgeworCQkJCWRlbHRhID4+PSAxMDsKKwkJCQl1bml0Kys7CisJCQl9CisJCQlzZXFfcHJpbnRmKHN0LT5zZXEsICIlOWx1JWMiLCBkZWx0YSwgKnVuaXQpOworCQkJaWYgKHBnX2xldmVsW3N0LT5sZXZlbF0uYml0cykKKwkJCQlkdW1wX3Byb3Qoc3QsIHBnX2xldmVsW3N0LT5sZXZlbF0uYml0cywKKwkJCQkJICBwZ19sZXZlbFtzdC0+bGV2ZWxdLm51bSk7CisJCQlzZXFfcHV0cyhzdC0+c2VxLCAiXG4iKTsKKwkJfQorCisJCWlmIChhZGRyID49IHN0LT5tYXJrZXJbMV0uc3RhcnRfYWRkcmVzcykgeworCQkJc3QtPm1hcmtlcisrOworCQkJc2VxX3ByaW50ZihzdC0+c2VxLCAiLS0tWyAlcyBdLS0tXG4iLCBzdC0+bWFya2VyLT5uYW1lKTsKKwkJfQorCisJCXN0LT5zdGFydF9hZGRyZXNzID0gYWRkcjsKKwkJc3QtPmN1cnJlbnRfcHJvdCA9IHByb3Q7CisJCXN0LT5sZXZlbCA9IGxldmVsOworCX0KKworCWlmIChhZGRyID49IHN0LT5tYXJrZXJbMV0uc3RhcnRfYWRkcmVzcykgeworCQlzdC0+bWFya2VyKys7CisJCXNlcV9wcmludGYoc3QtPnNlcSwgIi0tLVsgJXMgXS0tLVxuIiwgc3QtPm1hcmtlci0+bmFtZSk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIHdhbGtfcHRlKHN0cnVjdCBwZ19zdGF0ZSAqc3QsIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQpCit7CisJcHRlX3QgKnB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgMCk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUFRFOyBpKyssIHB0ZSsrKSB7CisJCWFkZHIgPSBzdGFydCArIGkgKiBQQUdFX1NJWkU7CisJCW5vdGVfcGFnZShzdCwgYWRkciwgNCwgcHRlX3ZhbCgqcHRlKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3YWxrX3BtZChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQoreworCXBtZF90ICpwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgMCk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUE1EOyBpKyssIHBtZCsrKSB7CisJCWFkZHIgPSBzdGFydCArIGkgKiBQTURfU0laRTsKKwkJaWYgKHBtZF9ub25lKCpwbWQpIHx8IHBtZF9zZWN0KCpwbWQpIHx8IHBtZF9iYWQoKnBtZCkpCisJCQlub3RlX3BhZ2Uoc3QsIGFkZHIsIDMsIHBtZF92YWwoKnBtZCkpOworCQllbHNlCisJCQl3YWxrX3B0ZShzdCwgcG1kLCBhZGRyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdhbGtfcHVkKHN0cnVjdCBwZ19zdGF0ZSAqc3QsIHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgc3RhcnQpCit7CisJcHVkX3QgKnB1ZCA9IHB1ZF9vZmZzZXQocGdkLCAwKTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVUQ7IGkrKywgcHVkKyspIHsKKwkJYWRkciA9IHN0YXJ0ICsgaSAqIFBVRF9TSVpFOworCQlpZiAocHVkX25vbmUoKnB1ZCkgfHwgcHVkX3NlY3QoKnB1ZCkgfHwgcHVkX2JhZCgqcHVkKSkKKwkJCW5vdGVfcGFnZShzdCwgYWRkciwgMiwgcHVkX3ZhbCgqcHVkKSk7CisJCWVsc2UKKwkJCXdhbGtfcG1kKHN0LCBwdWQsIGFkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgd2Fsa19wZ2Qoc3RydWN0IHBnX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQpCit7CisJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXQobW0sIDApOworCXVuc2lnbmVkIGk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BHRDsgaSsrLCBwZ2QrKykgeworCQlhZGRyID0gc3RhcnQgKyBpICogUEdESVJfU0laRTsKKwkJaWYgKHBnZF9ub25lKCpwZ2QpIHx8IHBnZF9iYWQoKnBnZCkpCisJCQlub3RlX3BhZ2Uoc3QsIGFkZHIsIDEsIHBnZF92YWwoKnBnZCkpOworCQllbHNlCisJCQl3YWxrX3B1ZChzdCwgcGdkLCBhZGRyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBwZ19zdGF0ZSBzdCA9IHsKKwkJLnNlcSA9IG0sCisJCS5tYXJrZXIgPSBhZGRyZXNzX21hcmtlcnMsCisJfTsKKworCXdhbGtfcGdkKCZzdCwgJmluaXRfbW0sIExPV0VTVF9BRERSKTsKKworCW5vdGVfcGFnZSgmc3QsIDAsIDAsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB0ZHVtcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwdGR1bXBfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB0ZHVtcF9mb3BzID0geworCS5vcGVuCQk9IHB0ZHVtcF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHB0ZHVtcF9pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqcGU7CisJdW5zaWduZWQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBnX2xldmVsKTsgaSsrKQorCQlpZiAocGdfbGV2ZWxbaV0uYml0cykKKwkJCWZvciAoaiA9IDA7IGogPCBwZ19sZXZlbFtpXS5udW07IGorKykKKwkJCQlwZ19sZXZlbFtpXS5tYXNrIHw9IHBnX2xldmVsW2ldLmJpdHNbal0ubWFzazsKKworCWFkZHJlc3NfbWFya2Vyc1tWTUVNTUFQX1NUQVJUX05SXS5zdGFydF9hZGRyZXNzID0KKwkJCQkodW5zaWduZWQgbG9uZyl2aXJ0X3RvX3BhZ2UoUEFHRV9PRkZTRVQpOworCWFkZHJlc3NfbWFya2Vyc1tWTUVNTUFQX0VORF9OUl0uc3RhcnRfYWRkcmVzcyA9CisJCQkJKHVuc2lnbmVkIGxvbmcpdmlydF90b19wYWdlKGhpZ2hfbWVtb3J5KTsKKworCXBlID0gZGVidWdmc19jcmVhdGVfZmlsZSgia2VybmVsX3BhZ2VfdGFibGVzIiwgMDQwMCwgTlVMTCwgTlVMTCwKKwkJCQkgJnB0ZHVtcF9mb3BzKTsKKwlyZXR1cm4gcGUgPyAwIDogLUVOT01FTTsKK30KK2RldmljZV9pbml0Y2FsbChwdGR1bXBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmMKaW5kZXggNDFjYjZkMy4uYzExY2QyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJImxldmVsIDEgYWRkcmVzcyBzaXplIGZhdWx0Igl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJsZXZlbCAyIGFkZHJlc3Mgc2l6ZSBmYXVsdCIJfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkibGV2ZWwgMyBhZGRyZXNzIHNpemUgZmF1bHQiCX0sCi0JeyBkb190cmFuc2xhdGlvbl9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJpbnB1dCBhZGRyZXNzIHJhbmdlIGZhdWx0Igl9LAorCXsgZG9fdHJhbnNsYXRpb25fZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkibGV2ZWwgMCB0cmFuc2xhdGlvbiBmYXVsdCIJfSwKIAl7IGRvX3RyYW5zbGF0aW9uX2ZhdWx0LAlTSUdTRUdWLCBTRUdWX01BUEVSUiwJImxldmVsIDEgdHJhbnNsYXRpb24gZmF1bHQiCX0sCiAJeyBkb190cmFuc2xhdGlvbl9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJsZXZlbCAyIHRyYW5zbGF0aW9uIGZhdWx0Igl9LAogCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJsZXZlbCAzIHRyYW5zbGF0aW9uIGZhdWx0Igl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuYwppbmRleCA0OTQyOTdjLi5iYWM0OTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2luaXQuYworKysgYi9hcmNoL2FybTY0L21tL2luaXQuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KIAogI2luY2x1ZGUgIm1tLmgiCiAKQEAgLTMyNSw2ICszMjYsNyBAQAogdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKIHsKIAlmcmVlX2luaXRtZW1fZGVmYXVsdCgwKTsKKwlmcmVlX2FsdGVybmF0aXZlc19tZW1vcnkoKTsKIH0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pb3JlbWFwLmMgYi9hcmNoL2FybTY0L21tL2lvcmVtYXAuYwppbmRleCA0YTA3NjMwLi5jYmI5OWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2lvcmVtYXAuYworKysgYi9hcmNoL2FybTY0L21tL2lvcmVtYXAuYwpAQCAtMTAzLDk3ICsxMDMsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woaW9yZW1hcF9jYWNoZSk7CiAKLXN0YXRpYyBwdGVfdCBibV9wdGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZF9ic3M7Ci0jaWYgQ09ORklHX0FSTTY0X1BHVEFCTEVfTEVWRUxTID4gMgotc3RhdGljIHBtZF90IGJtX3BtZFtQVFJTX1BFUl9QTURdIF9fcGFnZV9hbGlnbmVkX2JzczsKLSNlbmRpZgotI2lmIENPTkZJR19BUk02NF9QR1RBQkxFX0xFVkVMUyA+IDMKLXN0YXRpYyBwdWRfdCBibV9wdWRbUFRSU19QRVJfUFVEXSBfX3BhZ2VfYWxpZ25lZF9ic3M7Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSBwdWRfdCAqIF9faW5pdCBlYXJseV9pb3JlbWFwX3B1ZCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcGdkX3QgKnBnZDsKLQotCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKLQlCVUdfT04ocGdkX25vbmUoKnBnZCkgfHwgcGdkX2JhZCgqcGdkKSk7Ci0KLQlyZXR1cm4gcHVkX29mZnNldChwZ2QsIGFkZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHBtZF90ICogX19pbml0IGVhcmx5X2lvcmVtYXBfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlwdWRfdCAqcHVkID0gZWFybHlfaW9yZW1hcF9wdWQoYWRkcik7Ci0KLQlCVUdfT04ocHVkX25vbmUoKnB1ZCkgfHwgcHVkX2JhZCgqcHVkKSk7Ci0KLQlyZXR1cm4gcG1kX29mZnNldChwdWQsIGFkZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90ICogX19pbml0IGVhcmx5X2lvcmVtYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlwbWRfdCAqcG1kID0gZWFybHlfaW9yZW1hcF9wbWQoYWRkcik7Ci0KLQlCVUdfT04ocG1kX25vbmUoKnBtZCkgfHwgcG1kX2JhZCgqcG1kKSk7Ci0KLQlyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKLX0KLQorLyoKKyAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIGVhcmx5X2ZpeG1hcF9pbml0CisgKi8KIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfaW5pdCh2b2lkKQogewotCXBnZF90ICpwZ2Q7Ci0JcHVkX3QgKnB1ZDsKLQlwbWRfdCAqcG1kOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGZpeF90b192aXJ0KEZJWF9CVE1BUF9CRUdJTik7Ci0KLQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7Ci0JcGdkX3BvcHVsYXRlKCZpbml0X21tLCBwZ2QsIGJtX3B1ZCk7Ci0JcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOwotCXB1ZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcHVkLCBibV9wbWQpOwotCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKLQlwbWRfcG9wdWxhdGVfa2VybmVsKCZpbml0X21tLCBwbWQsIGJtX3B0ZSk7Ci0KLQkvKgotCSAqIFRoZSBib290LWlvcmVtYXAgcmFuZ2Ugc3BhbnMgbXVsdGlwbGUgcG1kcywgZm9yIHdoaWNoCi0JICogd2UgYXJlIG5vdCBwcmVwYXJlZDoKLQkgKi8KLQlCVUlMRF9CVUdfT04oKF9fZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSA+PiBQTURfU0hJRlQpCi0JCSAgICAgIT0gKF9fZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkgPj4gUE1EX1NISUZUKSk7Ci0KLQlpZiAocG1kICE9IGVhcmx5X2lvcmVtYXBfcG1kKGZpeF90b192aXJ0KEZJWF9CVE1BUF9FTkQpKSkgewotCQlXQVJOX09OKDEpOwotCQlwcl93YXJuKCJwbWQgJXAgIT0gJXBcbiIsCi0JCQlwbWQsIGVhcmx5X2lvcmVtYXBfcG1kKGZpeF90b192aXJ0KEZJWF9CVE1BUF9FTkQpKSk7Ci0JCXByX3dhcm4oImZpeF90b192aXJ0KEZJWF9CVE1BUF9CRUdJTik6ICUwOGx4XG4iLAotCQkJZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSk7Ci0JCXByX3dhcm4oImZpeF90b192aXJ0KEZJWF9CVE1BUF9FTkQpOiAgICUwOGx4XG4iLAotCQkJZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkpOwotCi0JCXByX3dhcm4oIkZJWF9CVE1BUF9FTkQ6ICAgICAgICVkXG4iLCBGSVhfQlRNQVBfRU5EKTsKLQkJcHJfd2FybigiRklYX0JUTUFQX0JFR0lOOiAgICAgJWRcbiIsCi0JCQlGSVhfQlRNQVBfQkVHSU4pOwotCX0KLQogCWVhcmx5X2lvcmVtYXBfc2V0dXAoKTsKIH0KLQotdm9pZCBfX2luaXQgX19lYXJseV9zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKLQkJCSAgICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBmbGFncykKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBfX2ZpeF90b192aXJ0KGlkeCk7Ci0JcHRlX3QgKnB0ZTsKLQotCWlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzKSB7Ci0JCUJVRygpOwotCQlyZXR1cm47Ci0JfQotCi0JcHRlID0gZWFybHlfaW9yZW1hcF9wdGUoYWRkcik7Ci0KLQlpZiAocGdwcm90X3ZhbChmbGFncykpCi0JCXNldF9wdGUocHRlLCBwZm5fcHRlKHBoeXMgPj4gUEFHRV9TSElGVCwgZmxhZ3MpKTsKLQllbHNlIHsKLQkJcHRlX2NsZWFyKCZpbml0X21tLCBhZGRyLCBwdGUpOwotCQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIrUEFHRV9TSVpFKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tLmggYi9hcmNoL2FybTY0L21tL21tLmgKaW5kZXggZDUxOWY0Zi4uNTBjMzM1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9tbS5oCisrKyBiL2FyY2gvYXJtNjQvbW0vbW0uaApAQCAtMSwyICsxIEBACiBleHRlcm4gdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IGFybTY0X3N3aW90bGJfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW1hcC5jIGIvYXJjaC9hcm02NC9tbS9tbWFwLmMKaW5kZXggMWQ3MzY2Mi4uNTQ5MjJkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9tbWFwLmMKKysrIGIvYXJjaC9hcm02NC9tbS9tbWFwLmMKQEAgLTQ3LDIyICs0NywxNCBAQAogCXJldHVybiBzeXNjdGxfbGVnYWN5X3ZhX2xheW91dDsKIH0KIAotLyoKLSAqIFNpbmNlIGdldF9yYW5kb21faW50KCkgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSB3aXRoaW4gYSAxIGppZmZ5IHdpbmRvdywgd2UKLSAqIHdpbGwgYWxtb3N0IGFsd2F5cyBnZXQgdGhlIHNhbWUgcmFuZG9taXNhdGlvbiBmb3IgdGhlIHN0YWNrIGFuZCBtbWFwCi0gKiByZWdpb24uIFRoaXMgd2lsbCBtZWFuIHRoZSByZWxhdGl2ZSBkaXN0YW5jZSBiZXR3ZWVuIHN0YWNrIGFuZCBtbWFwIHdpbGwgYmUKLSAqIHRoZSBzYW1lLgotICoKLSAqIFRvIGF2b2lkIHRoaXMgd2UgY2FuIHNoaWZ0IHRoZSByYW5kb21uZXNzIGJ5IDEgYml0LgotICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtbWFwX3JuZCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcm5kID0gMDsKIAogCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkKLQkJcm5kID0gKGxvbmcpZ2V0X3JhbmRvbV9pbnQoKSAmIChTVEFDS19STkRfTUFTSyA+PiAxKTsKKwkJcm5kID0gKGxvbmcpZ2V0X3JhbmRvbV9pbnQoKSAmIFNUQUNLX1JORF9NQVNLOwogCi0JcmV0dXJuIHJuZCA8PCAoUEFHRV9TSElGVCArIDEpOworCXJldHVybiBybmQgPDwgUEFHRV9TSElGVDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW1hcF9iYXNlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuYwppbmRleCBmNGY4YjUwLi42MDMyZjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CkBAIC00NjMsMyArNDY0LDk2IEBACiB7CiB9CiAjZW5kaWYJLyogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQICovCisKK3N0YXRpYyBwdGVfdCBibV9wdGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisjaWYgQ09ORklHX0FSTTY0X1BHVEFCTEVfTEVWRUxTID4gMgorc3RhdGljIHBtZF90IGJtX3BtZFtQVFJTX1BFUl9QTURdIF9fcGFnZV9hbGlnbmVkX2JzczsKKyNlbmRpZgorI2lmIENPTkZJR19BUk02NF9QR1RBQkxFX0xFVkVMUyA+IDMKK3N0YXRpYyBwdWRfdCBibV9wdWRbUFRSU19QRVJfUFVEXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisjZW5kaWYKKworc3RhdGljIGlubGluZSBwdWRfdCAqIGZpeG1hcF9wdWQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CisKKwlCVUdfT04ocGdkX25vbmUoKnBnZCkgfHwgcGdkX2JhZCgqcGdkKSk7CisKKwlyZXR1cm4gcHVkX29mZnNldChwZ2QsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHBtZF90ICogZml4bWFwX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcHVkX3QgKnB1ZCA9IGZpeG1hcF9wdWQoYWRkcik7CisKKwlCVUdfT04ocHVkX25vbmUoKnB1ZCkgfHwgcHVkX2JhZCgqcHVkKSk7CisKKwlyZXR1cm4gcG1kX29mZnNldChwdWQsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICogZml4bWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcG1kX3QgKnBtZCA9IGZpeG1hcF9wbWQoYWRkcik7CisKKwlCVUdfT04ocG1kX25vbmUoKnBtZCkgfHwgcG1kX2JhZCgqcG1kKSk7CisKKwlyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKK30KKwordm9pZCBfX2luaXQgZWFybHlfZml4bWFwX2luaXQodm9pZCkKK3sKKwlwZ2RfdCAqcGdkOworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBGSVhBRERSX1NUQVJUOworCisJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOworCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdkLCBibV9wdWQpOworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgYm1fcG1kKTsKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBibV9wdGUpOworCisJLyoKKwkgKiBUaGUgYm9vdC1pb3JlbWFwIHJhbmdlIHNwYW5zIG11bHRpcGxlIHBtZHMsIGZvciB3aGljaAorCSAqIHdlIGFyZSBub3QgcHJlcGFydGVkOgorCSAqLworCUJVSUxEX0JVR19PTigoX19maXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pID4+IFBNRF9TSElGVCkKKwkJICAgICAhPSAoX19maXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSA+PiBQTURfU0hJRlQpKTsKKworCWlmICgocG1kICE9IGZpeG1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSkpCisJICAgICB8fCBwbWQgIT0gZml4bWFwX3BtZChmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSkpIHsKKwkJV0FSTl9PTigxKTsKKwkJcHJfd2FybigicG1kICVwICE9ICVwLCAlcFxuIiwKKwkJCXBtZCwgZml4bWFwX3BtZChmaXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pKSwKKwkJCWZpeG1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkpKTsKKwkJcHJfd2FybigiZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKTogJTA4bHhcbiIsCisJCQlmaXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pKTsKKwkJcHJfd2FybigiZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCk6ICAgJTA4bHhcbiIsCisJCQlmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSk7CisKKwkJcHJfd2FybigiRklYX0JUTUFQX0VORDogICAgICAgJWRcbiIsIEZJWF9CVE1BUF9FTkQpOworCQlwcl93YXJuKCJGSVhfQlRNQVBfQkVHSU46ICAgICAlZFxuIiwgRklYX0JUTUFQX0JFR0lOKTsKKwl9Cit9CisKK3ZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKKwkJCSAgICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBfX2ZpeF90b192aXJ0KGlkeCk7CisJcHRlX3QgKnB0ZTsKKworCWlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzKSB7CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCisJcHRlID0gZml4bWFwX3B0ZShhZGRyKTsKKworCWlmIChwZ3Byb3RfdmFsKGZsYWdzKSkgeworCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwaHlzID4+IFBBR0VfU0hJRlQsIGZsYWdzKSk7CisJfSBlbHNlIHsKKwkJcHRlX2NsZWFyKCZpbml0X21tLCBhZGRyLCBwdGUpOworCQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIrUEFHRV9TSVpFKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BnZC5jIGIvYXJjaC9hcm02NC9tbS9wZ2QuYwppbmRleCA2NjgyYjM2Li43MWNhMTA0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL3BnZC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vcGdkLmMKQEAgLTM1LDkgKzM1LDkgQEAKIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJaWYgKFBHRF9TSVpFID09IFBBR0VfU0laRSkKLQkJcmV0dXJuIChwZ2RfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJcmV0dXJuIChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFnZShQR0FMTE9DX0dGUCk7CiAJZWxzZQotCQlyZXR1cm4ga21lbV9jYWNoZV96YWxsb2MocGdkX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MocGdkX2NhY2hlLCBQR0FMTE9DX0dGUCk7CiB9CiAKIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDQxZjFlM2UuLmVkYmEwNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC02MCw3ICs2MCw3IEBACiAJY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nOwogCWludCBpZHg7CiAJaW50IHRtcF91c2VkOwotCWludCBib2R5X29mZnNldDsKKwlpbnQgZXBpbG9ndWVfb2Zmc2V0OwogCWludCAqb2Zmc2V0OwogCXUzMiAqaW1hZ2U7CiB9OwpAQCAtMTMwLDggKzEzMCw4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGVwaWxvZ3VlX29mZnNldChjb25zdCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQogewotCWludCB0byA9IGN0eC0+b2Zmc2V0W2N0eC0+cHJvZy0+bGVuIC0gMV07Ci0JaW50IGZyb20gPSBjdHgtPmlkeCAtIGN0eC0+Ym9keV9vZmZzZXQ7CisJaW50IHRvID0gY3R4LT5lcGlsb2d1ZV9vZmZzZXQ7CisJaW50IGZyb20gPSBjdHgtPmlkeDsKIAogCXJldHVybiB0byAtIGZyb207CiB9CkBAIC00NjMsNiArNDYzLDggQEAKIAl9CiAJLyogZnVuY3Rpb24gcmV0dXJuICovCiAJY2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6CisJCS8qIE9wdGltaXphdGlvbjogd2hlbiBsYXN0IGluc3RydWN0aW9uIGlzIEVYSVQsCisJCSAgIHNpbXBseSBmYWxsdGhyb3VnaCB0byBlcGlsb2d1ZS4gKi8KIAkJaWYgKGkgPT0gY3R4LT5wcm9nLT5sZW4gLSAxKQogCQkJYnJlYWs7CiAJCWptcF9vZmZzZXQgPSBlcGlsb2d1ZV9vZmZzZXQoY3R4KTsKQEAgLTY4NSwxMSArNjg3LDEzIEBACiAKIAkvKiAxLiBJbml0aWFsIGZha2UgcGFzcyB0byBjb21wdXRlIGN0eC0+aWR4LiAqLwogCi0JLyogRmFrZSBwYXNzIHRvIGZpbGwgaW4gY3R4LT5vZmZzZXQuICovCisJLyogRmFrZSBwYXNzIHRvIGZpbGwgaW4gY3R4LT5vZmZzZXQgYW5kIGN0eC0+dG1wX3VzZWQuICovCiAJaWYgKGJ1aWxkX2JvZHkoJmN0eCkpCiAJCWdvdG8gb3V0OwogCiAJYnVpbGRfcHJvbG9ndWUoJmN0eCk7CisKKwljdHguZXBpbG9ndWVfb2Zmc2V0ID0gY3R4LmlkeDsKIAlidWlsZF9lcGlsb2d1ZSgmY3R4KTsKIAogCS8qIE5vdyB3ZSBrbm93IHRoZSBhY3R1YWwgaW1hZ2Ugc2l6ZS4gKi8KQEAgLTcwNiw3ICs3MTAsNiBAQAogCiAJYnVpbGRfcHJvbG9ndWUoJmN0eCk7CiAKLQljdHguYm9keV9vZmZzZXQgPSBjdHguaWR4OwogCWlmIChidWlsZF9ib2R5KCZjdHgpKSB7CiAJCWJwZl9qaXRfYmluYXJ5X2ZyZWUoaGVhZGVyKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCmluZGV4IDM3Yjc1NjAuLmNjOTJjZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9hdG1lbF91c2JhX3VkYy5oPgogCi0jaW5jbHVkZSA8bWFjaC9hdG1lbC1tY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL21tYy1hdG1lbC1tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1lbC1tY2kuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYXRtZWwtbWNpLmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFkN2Y0Yi4uMDAwMDAwMAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgX19NQUNIX0FUTUVMX01DSV9ICi0jZGVmaW5lIF9fTUFDSF9BVE1FTF9NQ0lfSAotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtZHcuaD4KLQotLyoqCi0gKiBzdHJ1Y3QgbWNpX2RtYV9kYXRhIC0gRE1BIGRhdGEgZm9yIE1DSSBpbnRlcmZhY2UKLSAqLwotc3RydWN0IG1jaV9kbWFfZGF0YSB7Ci0Jc3RydWN0IGR3X2RtYV9zbGF2ZQlzZGF0YTsKLX07Ci0KLS8qIGFjY2Vzc29yIG1hY3JvcyAqLwotI2RlZmluZQlzbGF2ZV9kYXRhX3B0cihzKQkoJihzKS0+c2RhdGEpCi0jZGVmaW5lIGZpbmRfc2xhdmVfZGV2KHMpCSgocyktPnNkYXRhLmRtYV9kZXYpCi0KLSNlbmRpZiAvKiBfX01BQ0hfQVRNRUxfTUNJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZTU5ZGJhMS4uNzUyYTNmNCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTExMiw2ICsxMTIsOSBAQAogCWVsc2UKIAkJKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKSBhZGRyID0gYjsKIH0KKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQoYiwgYWRkcikgd3JpdGViKGIsIGFkZHIpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKGIsIGFkZHIpIHdyaXRldyhiLCBhZGRyKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZChiLCBhZGRyKSB3cml0ZWwoYiwgYWRkcikKICNkZWZpbmUgX19yYXdfd3JpdGViIHdyaXRlYgogI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CiAjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDhjYjUwYTIuLjk5YmI3ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vaW8uaApAQCAtMjQzLDYgKzI0Myw5IEBACiAJCV9fZmx1c2hfUENJX3dyaXRlcygpOwogfQogCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkIHdyaXRlYgorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCB3cml0ZXcKKyNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQgd3JpdGVsCiAKIC8qIFZhbHVlcyBmb3Igbm9jYWNoZWZsYWcgYW5kIGNtb2RlICovCiAjZGVmaW5lIElPTUFQX0ZVTExfQ0FDSElORwkJMApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW8uaAppbmRleCBiZWUwYWNkLi44MGE3ZTM0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW8uaApAQCAtMzkzLDYgKzM5MywxMCBAQAogI2RlZmluZSB3cml0ZXcodixhKQlfX3dyaXRldygodiksIChhKSkKICNkZWZpbmUgd3JpdGVsKHYsYSkJX193cml0ZWwoKHYpLCAoYSkpCiAjZGVmaW5lIHdyaXRlcSh2LGEpCV9fd3JpdGVxKCh2KSwgKGEpKQorI2RlZmluZSB3cml0ZWJfcmVsYXhlZCh2LGEpCV9fd3JpdGViKCh2KSwgKGEpKQorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCh2LGEpCV9fd3JpdGV3KCh2KSwgKGEpKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZCh2LGEpCV9fd3JpdGVsKCh2KSwgKGEpKQorI2RlZmluZSB3cml0ZXFfcmVsYXhlZCh2LGEpCV9fd3JpdGVxKCh2KSwgKGEpKQogI2RlZmluZSBfX3Jhd193cml0ZWIJd3JpdGViCiAjZGVmaW5lIF9fcmF3X3dyaXRldwl3cml0ZXcKICNkZWZpbmUgX19yYXdfd3JpdGVsCXdyaXRlbApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggNDQ5YzhjMC4uMTAzYmVkYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0zNjUsMTUgKzM2NSwxNSBAQAogfQogCiAjZGVmaW5lIEFSQ0hfSEFTX1RSQU5TTEFURV9NRU1fUFRSCTEKLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgKgoteGxhdGVfZGV2X21lbV9wdHIgKHVuc2lnbmVkIGxvbmcgcCkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgKgoreGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgcCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQljaGFyICogcHRyOworCXZvaWQgKnB0cjsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShwID4+IFBBR0VfU0hJRlQpOwogCWlmIChQYWdlVW5jYWNoZWQocGFnZSkpCi0JCXB0ciA9IChjaGFyICopcCArIF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7CisJCXB0ciA9ICh2b2lkICopcCArIF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7CiAJZWxzZQogCQlwdHIgPSBfX3ZhKHApOwogCkBAIC0zODMsMTUgKzM4MywxNSBAQAogLyoKICAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBrZXJuZWwgbWVtb3J5IHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBjaGFyICoKLXhsYXRlX2Rldl9rbWVtX3B0ciAoY2hhciAqIHApCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkICoKK3hsYXRlX2Rldl9rbWVtX3B0cih2b2lkICpwKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCWNoYXIgKiBwdHI7CisJdm9pZCAqcHRyOwogCiAJcGFnZSA9IHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZylwKTsKIAlpZiAoUGFnZVVuY2FjaGVkKHBhZ2UpKQotCQlwdHIgPSAoY2hhciAqKV9fcGEocCkgKyBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOworCQlwdHIgPSAodm9pZCAqKV9fcGEocCkgKyBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOwogCWVsc2UKIAkJcHRyID0gcDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vc2lnaW5mby5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vc2lnaW5mby5oCmluZGV4IDRlYTYyMjUuLmJjZTliYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL3VhcGkvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS91YXBpL2FzbS9zaWdpbmZvLmgKQEAgLTYzLDYgKzYzLDEwIEBACiAJCQl1bnNpZ25lZCBpbnQgX2ZsYWdzOwkvKiBzZWUgYmVsb3cgKi8KIAkJCXVuc2lnbmVkIGxvbmcgX2lzcjsJLyogaXNyICovCiAJCQlzaG9ydCBfYWRkcl9sc2I7CS8qIGxzYiBvZiBmYXVsdGluZyBhZGRyZXNzICovCisJCQlzdHJ1Y3QgeworCQkJCXZvaWQgX191c2VyICpfbG93ZXI7CisJCQkJdm9pZCBfX3VzZXIgKl91cHBlcjsKKwkJCX0gX2FkZHJfYm5kOwogCQl9IF9zaWdmYXVsdDsKIAogCQkvKiBTSUdQT0xMICovCkBAIC0xMTAsOSArMTE0LDkgQEAKIC8qCiAgKiBTSUdTRUdWIHNpX2NvZGVzCiAgKi8KLSNkZWZpbmUgX19TRUdWX1BTVEtPVkYJKF9fU0lfRkFVTFR8MykJLyogcGFyYWdyYXBoIHN0YWNrIG92ZXJmbG93ICovCisjZGVmaW5lIF9fU0VHVl9QU1RLT1ZGCShfX1NJX0ZBVUxUfDQpCS8qIHBhcmFncmFwaCBzdGFjayBvdmVyZmxvdyAqLwogI3VuZGVmIE5TSUdTRUdWCi0jZGVmaW5lIE5TSUdTRUdWCTMKKyNkZWZpbmUgTlNJR1NFR1YJNAogCiAjdW5kZWYgTlNJR1RSQVAKICNkZWZpbmUgTlNJR1RSQVAJNApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCmluZGV4IDhjMzczMGMuLjhhZTM2ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlkYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihpcnFfdG9fdmVjdG9yKGlycSkpOwogCW1zZy5kYXRhID0gZGF0YTsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCWNwdW1hc2tfY29weShpZGF0YS0+YWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7CiAKIAlyZXR1cm4gMDsKQEAgLTcxLDcgKzcxLDcgQEAKIAkJTVNJX0RBVEFfREVMSVZFUllfRklYRUQgfAogCQlNU0lfREFUQV9WRUNUT1IodmVjdG9yKTsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZpYTY0X21zaV9jaGlwLCBoYW5kbGVfZWRnZV9pcnEpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDIsOCArMTAyLDggQEAKICAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpYTY0X21zaV9jaGlwID0gewogCS5uYW1lCQkJPSAiUENJLU1TSSIsCi0JLmlycV9tYXNrCQk9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX21hc2sJCT0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzawkJPSBwY2lfbXNpX3VubWFza19pcnEsCiAJLmlycV9hY2sJCT0gaWE2NF9hY2tfbXNpX2lycSwKICNpZmRlZiBDT05GSUdfU01QCiAJLmlycV9zZXRfYWZmaW5pdHkJPSBpYTY0X3NldF9tc2lfaXJxX2FmZmluaXR5LApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9tc2lfc24uYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvbXNpX3NuLmMKaW5kZXggNDQ2ZTc3OS4uYTBlYjI3YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9tc2lfc24uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL21zaV9zbi5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAltc2cuZGF0YSA9IDB4MTAwICsgaXJxOwogCiAJaXJxX3NldF9tc2lfZGVzYyhpcnEsIGVudHJ5KTsKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmc25fbXNpX2NoaXAsIGhhbmRsZV9lZGdlX2lycSk7CiAKIAlyZXR1cm4gMDsKQEAgLTIwNSw3ICsyMDUsNyBAQAogCW1zZy5hZGRyZXNzX2hpID0gKHUzMikoYnVzX2FkZHIgPj4gMzIpOwogCW1zZy5hZGRyZXNzX2xvID0gKHUzMikoYnVzX2FkZHIgJiAweDAwMDAwMDAwZmZmZmZmZmYpOwogCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAJY3B1bWFza19jb3B5KGRhdGEtPmFmZmluaXR5LCBjcHVfbWFzayk7CiAKIAlyZXR1cm4gMDsKQEAgLTIyOCw4ICsyMjgsOCBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNuX21zaV9jaGlwID0gewogCS5uYW1lCQkJPSAiUENJLU1TSSIsCi0JLmlycV9tYXNrCQk9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX21hc2sJCT0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzawkJPSBwY2lfbXNpX3VubWFza19pcnEsCiAJLmlycV9hY2sJCT0gc25fYWNrX21zaV9pcnEsCiAjaWZkZWYgQ09ORklHX1NNUAogCS5pcnFfc2V0X2FmZmluaXR5CT0gc25fc2V0X21zaV9pcnFfYWZmaW5pdHksCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDQwMTBmMWYuLjZlNzc4N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oCkBAIC0xNjEsNiArMTYxLDkgQEAKICNkZWZpbmUgX19yYXdfd3JpdGViIHdyaXRlYgogI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CiAjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQgd3JpdGViCisjZGVmaW5lIHdyaXRld19yZWxheGVkIHdyaXRldworI2RlZmluZSB3cml0ZWxfcmVsYXhlZCB3cml0ZWwKIAogI2RlZmluZSBpb3JlYWQ4IHJlYWQKICNkZWZpbmUgaW9yZWFkMTYgcmVhZHcKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwppbmRleCAwMWE2MjE2Li4xOTJiMDBmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCkBAIC04NTgsNiArODU4LDI0IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19BVEFSSV9FVEhFUk5FQyAqLwogCisjaWZkZWYgQ09ORklHX0FUQVJJX1NDU0kKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgYXRhcmlfc2NzaV9zdF9yc3JjW10gX19pbml0Y29uc3QgPSB7CisJeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0ID0gSVJRX01GUF9GU0NTSSwKKwkJLmVuZCAgID0gSVJRX01GUF9GU0NTSSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBhdGFyaV9zY3NpX3R0X3JzcmNbXSBfX2luaXRjb25zdCA9IHsKKwl7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBJUlFfVFRfTUZQX1NDU0ksCisJCS5lbmQgICA9IElSUV9UVF9NRlBfU0NTSSwKKwl9LAorfTsKKyNlbmRpZgorCiBpbnQgX19pbml0IGF0YXJpX3BsYXRmb3JtX2luaXQodm9pZCkKIHsKIAlpbnQgcnYgPSAwOwpAQCAtODkyLDYgKzkxMCwxNSBAQAogCX0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FUQVJJX1NDU0kKKwlpZiAoQVRBUklIV19QUkVTRU5UKFNUX1NDU0kpKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJhdGFyaV9zY3NpIiwgLTEsCisJCQlhdGFyaV9zY3NpX3N0X3JzcmMsIEFSUkFZX1NJWkUoYXRhcmlfc2NzaV9zdF9yc3JjKSk7CisJZWxzZSBpZiAoQVRBUklIV19QUkVTRU5UKFRUX1NDU0kpKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJhdGFyaV9zY3NpIiwgLTEsCisJCQlhdGFyaV9zY3NpX3R0X3JzcmMsIEFSUkFZX1NJWkUoYXRhcmlfc2NzaV90dF9yc3JjKSk7CisjZW5kaWYKKwogCXJldHVybiBydjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3N0ZG1hLmMgYi9hcmNoL202OGsvYXRhcmkvc3RkbWEuYwppbmRleCBkZGJmNDNjLi5lNWE2NjU5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvc3RkbWEuYworKysgYi9hcmNoL202OGsvYXRhcmkvc3RkbWEuYwpAQCAtNTksNiArNTksMzEgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvZiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKKy8qKgorICogc3RkbWFfdHJ5X2xvY2sgLSBhdHRlbXB0IHRvIGFjcXVpcmUgU1QgRE1BIGludGVycnVwdCAibG9jayIKKyAqIEBoYW5kbGVyOiBpbnRlcnJ1cHQgaGFuZGxlciB0byB1c2UgYWZ0ZXIgYWNxdWlzaXRpb24KKyAqCisgKiBSZXR1cm5zICEwIGlmIGxvY2sgd2FzIGFjcXVpcmVkOyBvdGhlcndpc2UgMC4KKyAqLworCitpbnQgc3RkbWFfdHJ5X2xvY2soaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKHN0ZG1hX2xvY2tlZCkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXN0ZG1hX2xvY2tlZCAgID0gMTsKKwlzdGRtYV9pc3IgICAgICA9IGhhbmRsZXI7CisJc3RkbWFfaXNyX2RhdGEgPSBkYXRhOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0woc3RkbWFfdHJ5X2xvY2spOworCiAKIC8qCiAgKiBGdW5jdGlvbjogdm9pZCBzdGRtYV9sb2NrKCBpc3JmdW5jIGlzciwgdm9pZCAqZGF0YSApCkBAIC03OCwxOSArMTAzLDEwIEBACiAKIHZvaWQgc3RkbWFfbG9jayhpcnFfaGFuZGxlcl90IGhhbmRsZXIsIHZvaWQgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsJCS8qIHByb3RlY3QgbG9jayAqLwotCiAJLyogU2luY2UgdGhlIERNQSBpcyB1c2VkIGZvciBmaWxlIHN5c3RlbSBwdXJwb3Nlcywgd2UKIAkgaGF2ZSB0byBzbGVlcCB1bmludGVycnVwdGlibGUgKHRoZXJlIG1heSBiZSBsb2NrZWQKIAkgYnVmZmVycykgKi8KLQl3YWl0X2V2ZW50KHN0ZG1hX3dhaXQsICFzdGRtYV9sb2NrZWQpOwotCi0Jc3RkbWFfbG9ja2VkICAgPSAxOwotCXN0ZG1hX2lzciAgICAgID0gaGFuZGxlcjsKLQlzdGRtYV9pc3JfZGF0YSA9IGRhdGE7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXdhaXRfZXZlbnQoc3RkbWFfd2FpdCwgc3RkbWFfdHJ5X2xvY2soaGFuZGxlciwgZGF0YSkpOwogfQogRVhQT1JUX1NZTUJPTChzdGRtYV9sb2NrKTsKIApAQCAtMTIyLDIyICsxMzgsMjUgQEAKIEVYUE9SVF9TWU1CT0woc3RkbWFfcmVsZWFzZSk7CiAKIAotLyoKLSAqIEZ1bmN0aW9uOiBpbnQgc3RkbWFfb3RoZXJzX3dhaXRpbmcoIHZvaWQgKQorLyoqCisgKiBzdGRtYV9pc19sb2NrZWRfYnkgLSBhbGxvdyBsb2NrIGhvbGRlciB0byBjaGVjayB3aGV0aGVyIGl0IG5lZWRzIHRvIHJlbGVhc2UuCisgKiBAaGFuZGxlcjogaW50ZXJydXB0IGhhbmRsZXIgcHJldmlvdXNseSB1c2VkIHRvIGFjcXVpcmUgbG9jay4KICAqCi0gKiBQdXJwb3NlOiBDaGVjayBpZiBzb21lb25lIHdhaXRzIGZvciB0aGUgU1QtRE1BIGxvY2suCi0gKgotICogSW5wdXRzOiBub25lCi0gKgotICogUmV0dXJuczogMCBpZiBubyBvbmUgaXMgd2FpdGluZywgIT0gMCBvdGhlcndpc2UKLSAqCisgKiBSZXR1cm5zICEwIGlmIGxvY2tlZCBmb3IgdGhlIGdpdmVuIGhhbmRsZXI7IDAgb3RoZXJ3aXNlLgogICovCiAKLWludCBzdGRtYV9vdGhlcnNfd2FpdGluZyh2b2lkKQoraW50IHN0ZG1hX2lzX2xvY2tlZF9ieShpcnFfaGFuZGxlcl90IGhhbmRsZXIpCiB7Ci0JcmV0dXJuIHdhaXRxdWV1ZV9hY3RpdmUoJnN0ZG1hX3dhaXQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXN1bHQgPSBzdGRtYV9sb2NrZWQgJiYgKHN0ZG1hX2lzciA9PSBoYW5kbGVyKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmVzdWx0OwogfQotRVhQT1JUX1NZTUJPTChzdGRtYV9vdGhlcnNfd2FpdGluZyk7CitFWFBPUlRfU1lNQk9MKHN0ZG1hX2lzX2xvY2tlZF9ieSk7CiAKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaV9zdGRtYS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpX3N0ZG1hLmgKaW5kZXggOGUzODliNy4uZDI0ZTM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpX3N0ZG1hLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpX3N0ZG1hLmgKQEAgLTgsMTEgKzgsMTEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK2ludCBzdGRtYV90cnlfbG9jayhpcnFfaGFuZGxlcl90LCB2b2lkICopOwogdm9pZCBzdGRtYV9sb2NrKGlycV9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqZGF0YSk7CiB2b2lkIHN0ZG1hX3JlbGVhc2UoIHZvaWQgKTsKLWludCBzdGRtYV9vdGhlcnNfd2FpdGluZyggdm9pZCApOwogaW50IHN0ZG1hX2lzbG9ja2VkKCB2b2lkICk7Ci12b2lkICpzdGRtYV9sb2NrZWRfYnkoIHZvaWQgKTsKK2ludCBzdGRtYV9pc19sb2NrZWRfYnkoaXJxX2hhbmRsZXJfdCk7CiB2b2lkIHN0ZG1hX2luaXQoIHZvaWQgKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiogRW5kIG9mIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGM3MGNjOTEuLmJjY2Q1YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pby5oCkBAIC0zLDMgKzMsMTEgQEAKICNlbHNlCiAjaW5jbHVkZSA8YXNtL2lvX21tLmg+CiAjZW5kaWYKKworI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpCXJlYWRiKGFkZHIpCisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikJcmVhZHcoYWRkcikKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKQlyZWFkbChhZGRyKQorCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkKGIsIGFkZHIpCXdyaXRlYihiLCBhZGRyKQorI2RlZmluZSB3cml0ZXdfcmVsYXhlZChiLCBhZGRyKQl3cml0ZXcoYiwgYWRkcikKKyNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQoYiwgYWRkcikJd3JpdGVsKGIsIGFkZHIpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9fbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pb19uby5oCmluZGV4IGJlNGI1YTguLmE5M2M4Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pb19uby5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pb19uby5oCkBAIC00MCwxMCArNDAsNiBAQAogI2RlZmluZSByZWFkbChhZGRyKSBcCiAgICAgKHsgdW5zaWduZWQgaW50IF9fdiA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoYWRkcikpOyBfX3Y7IH0pCiAKLSNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQotI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCi0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKLQogI2RlZmluZSB3cml0ZWIoYixhZGRyKSAodm9pZCkoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYWRkcikpID0gKGIpKQogI2RlZmluZSB3cml0ZXcoYixhZGRyKSAodm9pZCkoKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKGFkZHIpKSA9IChiKSkKICNkZWZpbmUgd3JpdGVsKGIsYWRkcikgKHZvaWQpKCgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoYWRkcikpID0gKGIpKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCmluZGV4IGQzMjNiMmMuLjI5YzdjNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKQEAgLTUzLDYgKzUzLDEwIEBACiAjZGVmaW5lIE1BQ19TQ1NJX1FVQURSQQkJMgogI2RlZmluZSBNQUNfU0NTSV9RVUFEUkEyCTMKICNkZWZpbmUgTUFDX1NDU0lfUVVBRFJBMwk0CisjZGVmaW5lIE1BQ19TQ1NJX0lJRlgJCTUKKyNkZWZpbmUgTUFDX1NDU0lfRFVPCQk2CisjZGVmaW5lIE1BQ19TQ1NJX0NDTAkJNworI2RlZmluZSBNQUNfU0NTSV9MQVRFCQk4CiAKICNkZWZpbmUgTUFDX0lERV9OT05FCQkwCiAjZGVmaW5lIE1BQ19JREVfUVVBRFJBCQkxCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwppbmRleCBhNDcxZWFiLi5lOWMzNzU2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKQEAgLTI3OCw3ICsyNzgsNyBAQAogCQkubmFtZQkJPSAiSUlmeCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfSU9QLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9JSUZYLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9JT1AsCkBAIC0zMjksNyArMzI5LDcgQEAKIAkJLm5hbWUJCT0gIkNvbG9yIENsYXNzaWMiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0NDTCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTMzOCw3ICszMzgsNyBAQAogCQkubmFtZQkJPSAiQ29sb3IgQ2xhc3NpYyBJSSIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfQ0NMLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNTI2LDcgKzUyNiw3IEBACiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA1MjAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0NDTCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTUzNSw3ICs1MzUsNyBAQAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNTUwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9DQ0wsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC01NjcsNyArNTY3LDcgQEAKIAkJLm5hbWUJCT0gIlRWIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9DQ0wsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC03MTIsNyArNzEyLDcgQEAKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxOTAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9MQVRFLAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX0JBQk9PTiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLApAQCAtNzIyLDcgKzcyMiw3IEBACiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgNTIwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfTEFURSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKQEAgLTc0MCw3ICs3NDAsNyBAQAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyMTAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfRFVPLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTc0OSw3ICs3NDksNyBAQAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyMzAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfRFVPLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTc1OCw3ICs3NTgsNyBAQAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNTAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfRFVPLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTc2Nyw3ICs3NjcsNyBAQAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNzBjIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0RVTywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC03NzYsNyArNzc2LDcgQEAKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjgwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0RVTywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC03ODUsNyArNzg1LDcgQEAKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjgwYyIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9EVU8sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtOTI5LDYgKzkyOSw3MCBAQAogCS5yZXNvdXJjZQk9ICZzd2ltX3JzcmMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIG1hY19zY3NpX2lpZnhfcnNyY1tdIF9faW5pdGNvbnN0ID0geworCXsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IElSUV9NQUNfU0NTSSwKKwkJLmVuZCAgID0gSVJRX01BQ19TQ1NJLAorCX0sIHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IDB4NTAwMDgwMDAsCisJCS5lbmQgICA9IDB4NTAwMDlGRkYsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgbWFjX3Njc2lfZHVvX3JzcmNbXSBfX2luaXRjb25zdCA9IHsKKwl7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSAweEZFRTAyMDAwLAorCQkuZW5kICAgPSAweEZFRTAzRkZGLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIG1hY19zY3NpX29sZF9yc3JjW10gX19pbml0Y29uc3QgPSB7CisJeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0ID0gSVJRX01BQ19TQ1NJLAorCQkuZW5kICAgPSBJUlFfTUFDX1NDU0ksCisJfSwgeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gMHg1MDAxMDAwMCwKKwkJLmVuZCAgID0gMHg1MDAxMUZGRiwKKwl9LCB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSAweDUwMDA2MDAwLAorCQkuZW5kICAgPSAweDUwMDA3RkZGLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIG1hY19zY3NpX2xhdGVfcnNyY1tdIF9faW5pdGNvbnN0ID0geworCXsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IElSUV9NQUNfU0NTSSwKKwkJLmVuZCAgID0gSVJRX01BQ19TQ1NJLAorCX0sIHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IDB4NTAwMTAwMDAsCisJCS5lbmQgICA9IDB4NTAwMTFGRkYsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgbWFjX3Njc2lfY2NsX3JzcmNbXSBfX2luaXRjb25zdCA9IHsKKwl7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBJUlFfTUFDX1NDU0ksCisJCS5lbmQgICA9IElSUV9NQUNfU0NTSSwKKwl9LCB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSAweDUwRjEwMDAwLAorCQkuZW5kICAgPSAweDUwRjExRkZGLAorCX0sIHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IDB4NTBGMDYwMDAsCisJCS5lbmQgICA9IDB4NTBGMDdGRkYsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVzcF8wX3BkZXYgPSB7CiAJLm5hbWUJCT0gIm1hY19lc3AiLAogCS5pZAkJPSAwLApAQCAtMTAwMCw2ICsxMDY0LDYwIEBACiAJCSAgICAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX1E5NTApKQogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlc3BfMV9wZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBNQUNfU0NTSV9JSUZYOgorCQkvKiBBZGRyZXNzZXMgZnJvbSBUaGUgR3VpZGUgdG8gTWFjIEZhbWlseSBIYXJkd2FyZS4KKwkJICogJDUwMDAgODAwMCAtICQ1MDAwIDlGRkY6IFNDU0kgRE1BCisJCSAqICQ1MDAwIEMwMDAgLSAkNTAwMCBERkZGOiBBbHRlcm5hdGUgU0NTSSAoRE1BKQorCQkgKiAkNTAwMCBFMDAwIC0gJDUwMDAgRkZGRjogQWx0ZXJuYXRlIFNDU0kgKEhzaykKKwkJICogVGhlIFNDU0kgRE1BIGN1c3RvbSBJQyBlbWJlZHMgdGhlIDUzQzgwIGNvcmUuIG1hY19zY3NpIGRvZXMKKwkJICogbm90IG1ha2UgdXNlIG9mIGl0cyBETUEgb3IgaGFyZHdhcmUgaGFuZHNoYWtpbmcgbG9naWMuCisJCSAqLworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJtYWNfc2NzaSIsIDAsCisJCQltYWNfc2NzaV9paWZ4X3JzcmMsIEFSUkFZX1NJWkUobWFjX3Njc2lfaWlmeF9yc3JjKSk7CisJCWJyZWFrOworCWNhc2UgTUFDX1NDU0lfRFVPOgorCQkvKiBBZGRyZXNzZXMgZnJvbSB0aGUgRHVvIERvY2sgSUkgRGV2ZWxvcGVyIE5vdGUuCisJCSAqICRGRUUwIDIwMDAgLSAkRkVFMCAzRkZGOiBub3JtYWwgbW9kZQorCQkgKiAkRkVFMCA0MDAwIC0gJEZFRTAgNUZGRjogcHNldWRvIERNQSB3aXRob3V0IC9EUlEKKwkJICogJEZFRTAgNjAwMCAtICRGRUUwIDdGRkY6IHBzZXVkbyBETUEgd2l0aCAvRFJRCisJCSAqIFRoZSBOZXRCU0QgY29kZSBpbmRpY2F0ZXMgdGhhdCBib3RoIDUzODAgY2hpcHMgc2hhcmUKKwkJICogYW4gSVJRICg/KSB3aGljaCB3b3VsZCBuZWVkIGNhcmVmdWwgaGFuZGxpbmcgKHNlZSBtYWNfZXNwKS4KKwkJICovCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm1hY19zY3NpIiwgMSwKKwkJCW1hY19zY3NpX2R1b19yc3JjLCBBUlJBWV9TSVpFKG1hY19zY3NpX2R1b19yc3JjKSk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgTUFDX1NDU0lfT0xEOgorCQkvKiBBZGRyZXNzZXMgZnJvbSBEZXZlbG9wZXIgTm90ZXMgZm9yIER1byBTeXN0ZW0sCisJCSAqIFBvd2VyQm9vayAxODAgJiAxNjAsIDE0MCAmIDE3MCwgTWFjaW50b3NoIElJc2kKKwkJICogYW5kIGFsc28gZnJvbSBUaGUgR3VpZGUgdG8gTWFjIEZhbWlseSBIYXJkd2FyZSBmb3IKKwkJICogU0UvMzAsIElJLCBJSXgsIElJY3gsIElJY2kuCisJCSAqICQ1MDAwIDYwMDAgLSAkNTAwMCA3RkZGOiBwc2V1ZG8tRE1BIHdpdGggL0RSUQorCQkgKiAkNTAwMSAwMDAwIC0gJDUwMDEgMUZGRjogbm9ybWFsIG1vZGUKKwkJICogJDUwMDEgMjAwMCAtICQ1MDAxIDNGRkY6IHBzZXVkby1ETUEgd2l0aG91dCAvRFJRCisJCSAqIEdNRkggc2F5cyB0aGF0ICQ1MDAwIDAwMDAgLSAkNTBGRiBGRkZGICJ3cmFwcworCQkgKiAkNTAwMCAwMDAwIC0gJDUwMDEgRkZGRiBlaWdodCB0aW1lcyIgKCEpCisJCSAqIG1lc3Mub3JnIHNheXMgSUljaSBhbmQgQ29sb3IgQ2xhc3NpYyBkbyBub3QgYWxpYXMKKwkJICogSS9PIGFkZHJlc3Mgc3BhY2UuCisJCSAqLworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJtYWNfc2NzaSIsIDAsCisJCQltYWNfc2NzaV9vbGRfcnNyYywgQVJSQVlfU0laRShtYWNfc2NzaV9vbGRfcnNyYykpOworCQlicmVhazsKKwljYXNlIE1BQ19TQ1NJX0xBVEU6CisJCS8qIFBETUEgbG9naWMgaW4gNjgwNDAgUG93ZXJCb29rcyBpcyBzb21laG93IGRpZmZlcmVudCB0bworCQkgKiAnMDMwIG1vZGVscy4gSXQncyBwcm9iYWJseSBtb3JlIGxpa2UgUXVhZHJhcyAoc2VlIG1hY19lc3ApLgorCQkgKi8KKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibWFjX3Njc2kiLCAwLAorCQkJbWFjX3Njc2lfbGF0ZV9yc3JjLCBBUlJBWV9TSVpFKG1hY19zY3NpX2xhdGVfcnNyYykpOworCQlicmVhazsKKwljYXNlIE1BQ19TQ1NJX0NDTDoKKwkJLyogQWRkcmVzc2VzIGZyb20gdGhlIENvbG9yIENsYXNzaWMgRGV2ZWxvcGVyIE5vdGUuCisJCSAqICQ1MEYwIDYwMDAgLSAkNTBGMCA3RkZGOiBTQ1NJIGhhbmRzaGFrZQorCQkgKiAkNTBGMSAwMDAwIC0gJDUwRjEgMUZGRjogU0NTSQorCQkgKiAkNTBGMSAyMDAwIC0gJDUwRjEgM0ZGRjogU0NTSSBETUEKKwkJICovCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm1hY19zY3NpIiwgMCwKKwkJCW1hY19zY3NpX2NjbF9yc3JjLCBBUlJBWV9TSVpFKG1hY19zY3NpX2NjbF9yc3JjKSk7CisJCWJyZWFrOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vaW5pdC5jIGIvYXJjaC9tNjhrL21tL2luaXQuYwppbmRleCBhY2FmZjZhLi5iMDlhM2NiIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vaW5pdC5jCisrKyBiL2FyY2gvbTY4ay9tbS9pbml0LmMKQEAgLTk0LDcgKzk0LDYgQEAKIAloaWdoX21lbW9yeSA9ICh2b2lkICopIGVuZF9tZW07CiAKIAllbXB0eV96ZXJvX3BhZ2UgPSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7Ci0JbWVtc2V0KGVtcHR5X3plcm9fcGFnZSwgMCwgUEFHRV9TSVpFKTsKIAogCS8qCiAJICogU2V0IHVwIFNGQy9ERkMgcmVnaXN0ZXJzICh1c2VyIGRhdGEgc3BhY2UpLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMgYi9hcmNoL202OGsvc3VuMy9jb25maWcuYwppbmRleCBmNTllYzU4Li5hOGI5NDJiIDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuMy9jb25maWcuYworKysgYi9hcmNoL202OGsvc3VuMy9jb25maWcuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0yNyw2ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGluZXMuaD4KICNpbmNsdWRlIDxhc20vaWRwcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2ludGVyc2lsLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTY5LDMgKzE3MSw2MSBAQAogICAgICAgICBpbnRlcnNpbF9jbGVhcigpOwogfQogCisjaWZkZWYgQ09ORklHX1NVTjNfU0NTSQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIHN1bjNfc2NzaV92bWVfcnNyY1tdIF9faW5pdGNvbnN0ID0geworCXsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IFNVTjNfVkVDX1ZNRVNDU0kwLAorCQkuZW5kICAgPSBTVU4zX1ZFQ19WTUVTQ1NJMCwKKwl9LCB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSAweGZmMjAwMDAwLAorCQkuZW5kICAgPSAweGZmMjAwMDIxLAorCX0sIHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IFNVTjNfVkVDX1ZNRVNDU0kxLAorCQkuZW5kICAgPSBTVU4zX1ZFQ19WTUVTQ1NJMSwKKwl9LCB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSAweGZmMjA0MDAwLAorCQkuZW5kICAgPSAweGZmMjA0MDIxLAorCX0sCit9OworCisvKgorICogSW50OiBsZXZlbCAyIGF1dG92ZWN0b3IKKyAqIElPOiB0eXBlIDEsIGJhc2UgMHgwMDE0MDAwMCwgNSBiaXRzIHBoeXMgc3BhY2U6IEE8NC4uMD4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBzdW4zX3Njc2lfcnNyY1tdIF9faW5pdGNvbnN0ID0geworCXsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IDIsCisJCS5lbmQgICA9IDIsCisJfSwgeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gMHgwMDE0MDAwMCwKKwkJLmVuZCAgID0gMHgwMDE0MDAxZiwKKwl9LAorfTsKKworaW50IF9faW5pdCBzdW4zX3BsYXRmb3JtX2luaXQodm9pZCkKK3sKKwlzd2l0Y2ggKGlkcHJvbS0+aWRfbWFjaHR5cGUpIHsKKwljYXNlIFNNX1NVTjMgfCBTTV8zXzE2MDoKKwljYXNlIFNNX1NVTjMgfCBTTV8zXzI2MDoKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgic3VuM19zY3NpX3ZtZSIsIC0xLAorCQkJc3VuM19zY3NpX3ZtZV9yc3JjLCBBUlJBWV9TSVpFKHN1bjNfc2NzaV92bWVfcnNyYykpOworCQlicmVhazsKKwljYXNlIFNNX1NVTjMgfCBTTV8zXzUwOgorCWNhc2UgU01fU1VOMyB8IFNNXzNfNjA6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInN1bjNfc2NzaSIsIC0xLAorCQkJc3VuM19zY3NpX3JzcmMsIEFSUkFZX1NJWkUoc3VuM19zY3NpX3JzcmMpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHN1bjNfcGxhdGZvcm1faW5pdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaAppbmRleCA0MzM3NTFiLi45NDBmNWZjIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaApAQCAtNjksMTIgKzY5LDQgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvLmg+CiAKLSNkZWZpbmUgcmVhZGJfcmVsYXhlZAlyZWFkYgotI2RlZmluZSByZWFkd19yZWxheGVkCXJlYWR3Ci0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQJcmVhZGwKLQotI2RlZmluZSB3cml0ZWJfcmVsYXhlZAl3cml0ZWIKLSNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQJd3JpdGV3Ci0jZGVmaW5lIHdyaXRlbF9yZWxheGVkCXdyaXRlbAotCiAjZW5kaWYgLyogX0FTTV9NSUNST0JMQVpFX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90bGIuaAppbmRleCA4YWE5NzgxLi45OWI2ZGVkIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xNCw3ICsxNCw2IEBACiAjZGVmaW5lIHRsYl9mbHVzaCh0bGIpCWZsdXNoX3RsYl9tbSgodGxiKS0+bW0pCiAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CiAKICNpZmRlZiBDT05GSUdfTU1VCiAjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCQlkbyB7IH0gd2hpbGUgKDApCkBAIC0yMiw0ICsyMSw2IEBACiAjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGUsIGFkZHJlc3MpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKICNlbmRpZiAvKiBfQVNNX01JQ1JPQkxBWkVfVExCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NpZ2luZm8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NpZ2luZm8uaAppbmRleCBlODExNzQ0Li5kMDhmODNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zaWdpbmZvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc2lnaW5mby5oCkBAIC05Miw2ICs5MiwxMCBAQAogCQkJaW50IF90cmFwbm87CS8qIFRSQVAgIyB3aGljaCBjYXVzZWQgdGhlIHNpZ25hbCAqLwogI2VuZGlmCiAJCQlzaG9ydCBfYWRkcl9sc2I7CisJCQlzdHJ1Y3QgeworCQkJCXZvaWQgX191c2VyICpfbG93ZXI7CisJCQkJdm9pZCBfX3VzZXIgKl91cHBlcjsKKwkJCX0gX2FkZHJfYm5kOwogCQl9IF9zaWdmYXVsdDsKIAogCQkvKiBTSUdQT0xMLCBTSUdYRlNaIChUbyBkbyAuLi4pCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9tc2ktb2N0ZW9uLmMgYi9hcmNoL21pcHMvcGNpL21zaS1vY3Rlb24uYwppbmRleCA2M2JiZTA3Li5jZmZhYWY0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL21zaS1vY3Rlb24uYworKysgYi9hcmNoL21pcHMvcGNpL21zaS1vY3Rlb24uYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgZGV2LT5tc2lfY2FwICsgUENJX01TSV9GTEFHUywgY29udHJvbCk7CiAKIAlpcnFfc2V0X21zaV9kZXNjKGlycSwgZGVzYyk7Ci0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvbXNpLXhscC5jIGIvYXJjaC9taXBzL3BjaS9tc2kteGxwLmMKaW5kZXggZjdhYzNlZC4uNmE0MGYyNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9tc2kteGxwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9tc2kteGxwLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogCiAJbXNpeHZlYyA9IG5sbV9pcnFfbXNpeHZlYyhkLT5pcnEpOwogCWxpbmsgPSBubG1faXJxX21zaXhsaW5rKG1zaXh2ZWMpOwotCW1hc2tfbXNpX2lycShkKTsKKwlwY2lfbXNpX21hc2tfaXJxKGQpOwogCW1kID0gaXJxX2RhdGFfZ2V0X2lycV9oYW5kbGVyX2RhdGEoZCk7CiAKIAkvKiBBY2sgTVNJIG9uIGJyaWRnZSAqLwpAQCAtMjM5LDEwICsyMzksMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4bHBfbXNpeF9jaGlwID0gewogCS5uYW1lCQk9ICJYTFAtTVNJWCIsCi0JLmlycV9lbmFibGUJPSB1bm1hc2tfbXNpX2lycSwKLQkuaXJxX2Rpc2FibGUJPSBtYXNrX21zaV9pcnEsCisJLmlycV9lbmFibGUJPSBwY2lfbXNpX3VubWFza19pcnEsCisJLmlycV9kaXNhYmxlCT0gcGNpX21zaV9tYXNrX2lycSwKIAkuaXJxX21hc2tfYWNrCT0geGxwX21zaXhfbWFza19hY2ssCi0JLmlycV91bm1hc2sJPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX3VubWFzawk9IHBjaV9tc2lfdW5tYXNrX2lycSwKIH07CiAKIHZvaWQgYXJjaF90ZWFyZG93bl9tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXdyaXRlX21zaV9tc2coeGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coeGlycSwgJm1zZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0Jd3JpdGVfbXNpX21zZyh4aXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyh4aXJxLCAmbXNnKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2kteGxyLmMgYi9hcmNoL21pcHMvcGNpL3BjaS14bHIuYwppbmRleCAwZGRlODAzLi4yNmQyZGFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS14bHIuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS14bHIuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaAppbmRleCBlNmVkMGQ4Li44OTdiYTNjIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaApAQCAtNjcsNiArNjcsMTAgQEAKICNkZWZpbmUgX19yYXdfd3JpdGV3IHdyaXRldwogI2RlZmluZSBfX3Jhd193cml0ZWwgd3JpdGVsCiAKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQgd3JpdGViCisjZGVmaW5lIHdyaXRld19yZWxheGVkIHdyaXRldworI2RlZmluZSB3cml0ZWxfcmVsYXhlZCB3cml0ZWwKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIHRyYWRpdGlvbmFsIGlucHV0L291dHB1dCBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvS2NvbmZpZyBiL2FyY2gvbmlvczIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzYxYWNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9LY29uZmlnCkBAIC0wLDAgKzEsMjA2IEBACitjb25maWcgTklPUzIKKwlkZWZfYm9vbCB5CisJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCisJc2VsZWN0IENMS1NSQ19PRgorCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0CisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgR0VORVJJQ19DUFVfREVWSUNFUworCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQorCXNlbGVjdCBHRU5FUklDX0lSUV9TSE9XCisJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKKwlzZWxlY3QgSVJRX0RPTUFJTgorCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQQorCXNlbGVjdCBPRgorCXNlbGVjdCBPRl9FQVJMWV9GTEFUVFJFRQorCXNlbGVjdCBTT0NfQlVTCisJc2VsZWN0IFNQQVJTRV9JUlEKKwlzZWxlY3QgVVNCX0FSQ0hfSEFTX0hDRCBpZiBVU0JfU1VQUE9SVAorCitjb25maWcgR0VORVJJQ19DU1VNCisJZGVmX2Jvb2wgeQorCitjb25maWcgR0VORVJJQ19IV0VJR0hUCisJZGVmX2Jvb2wgeQorCitjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBOT19JT1BPUlRfTUFQCisJZGVmX2Jvb2wgeQorCitjb25maWcgSEFTX0RNQQorCWRlZl9ib29sIHkKKworY29uZmlnIEZQVQorCWRlZl9ib29sIG4KKworY29uZmlnIFNXQVAKKwlkZWZfYm9vbCBuCisKK2NvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCisJZGVmX2Jvb2wgeQorCitjb25maWcgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAorCWRlZl9ib29sIG4KKworc291cmNlICJpbml0L0tjb25maWciCisKK21lbnUgIktlcm5lbCBmZWF0dXJlcyIKKworc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0IgorCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKK3NvdXJjZSAia2VybmVsL0tjb25maWcuaHoiCisKK3NvdXJjZSAibW0vS2NvbmZpZyIKKworY29uZmlnIEZPUkNFX01BWF9aT05FT1JERVIKKwlpbnQgIk1heGltdW0gem9uZSBvcmRlciIKKwlyYW5nZSA5IDIwCisJZGVmYXVsdCAiMTEiCisJaGVscAorCSAgVGhlIGtlcm5lbCBtZW1vcnkgYWxsb2NhdG9yIGRpdmlkZXMgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeQorCSAgYmxvY2tzIGludG8gInpvbmVzIiwgd2hlcmUgZWFjaCB6b25lIGlzIGEgcG93ZXIgb2YgdHdvIG51bWJlciBvZgorCSAgcGFnZXMuICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byB0aGF0IHRoZSBrZXJuZWwKKwkgIGtlZXBzIGluIHRoZSBtZW1vcnkgYWxsb2NhdG9yLiAgSWYgeW91IG5lZWQgdG8gYWxsb2NhdGUgdmVyeSBsYXJnZQorCSAgYmxvY2tzIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnksIHRoZW4geW91IG1heSBuZWVkIHRvCisJICBpbmNyZWFzZSB0aGlzIHZhbHVlLgorCisJICBUaGlzIGNvbmZpZyBvcHRpb24gaXMgYWN0dWFsbHkgbWF4aW11bSBvcmRlciBwbHVzIG9uZS4gRm9yIGV4YW1wbGUsCisJICBhIHZhbHVlIG9mIDExIG1lYW5zIHRoYXQgdGhlIGxhcmdlc3QgZnJlZSBtZW1vcnkgYmxvY2sgaXMgMl4xMCBwYWdlcy4KKworZW5kbWVudQorCitzb3VyY2UgImFyY2gvbmlvczIvcGxhdGZvcm0vS2NvbmZpZy5wbGF0Zm9ybSIKKworbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgorCitjb25maWcgTU1VCisJZGVmX2Jvb2wgeQorCitjb25maWcgTlJfQ1BVUworCWludAorCWRlZmF1bHQgIjEiCisKK2NvbmZpZyBOSU9TMl9BTElHTk1FTlRfVFJBUAorCWJvb2wgIkNhdGNoIGFsaWdubWVudCB0cmFwIgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIE5pb3MgSUkgQ1BVcyBjYW5ub3QgZmV0Y2gvc3RvcmUgZGF0YSB3aGljaCBpcyBub3QgYnVzIGFsaWduZWQsCisJICBpLmUuLCBhIDIgb3IgNCBieXRlIGZldGNoIG11c3Qgc3RhcnQgYXQgYW4gYWRkcmVzcyBkaXZpc2libGUgYnkKKwkgIDIgb3IgNC4gQW55IG5vbi1hbGlnbmVkIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgdHJhcHBlZCBhbmQKKwkgIGVtdWxhdGVkIGluIHNvZnR3YXJlIGlmIHlvdSBzYXkgWSBoZXJlLCB3aGljaCBoYXMgYSBwZXJmb3JtYW5jZQorCSAgaW1wYWN0LgorCitjb21tZW50ICJCb290IG9wdGlvbnMiCisKK2NvbmZpZyBDTURMSU5FX0JPT0wKKwlib29sICJEZWZhdWx0IGJvb3Rsb2FkZXIga2VybmVsIGFyZ3VtZW50cyIKKwlkZWZhdWx0IHkKKworY29uZmlnIENNRExJTkUKKwlzdHJpbmcgIkRlZmF1bHQga2VybmVsIGNvbW1hbmQgc3RyaW5nIgorCWRlZmF1bHQgIiIKKwlkZXBlbmRzIG9uIENNRExJTkVfQk9PTAorCWhlbHAKKwkgIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IGZvciB0aGUgYm9vdCBsb2FkZXIgdG8KKwkgIHBhc3MgYXJndW1lbnRzIHRvIHRoZSBrZXJuZWwuIEZvciB0aGVzZSBwbGF0Zm9ybXMsIHlvdSBjYW4gc3VwcGx5CisJICBzb21lIGNvbW1hbmQtbGluZSBvcHRpb25zIGF0IGJ1aWxkIHRpbWUgYnkgZW50ZXJpbmcgdGhlbSBoZXJlLiAgSW4KKwkgIG90aGVyIGNhc2VzIHlvdSBjYW4gc3BlY2lmeSBrZXJuZWwgYXJncyBzbyB0aGF0IHlvdSBkb24ndCBoYXZlCisJICB0byBzZXQgdGhlbSB1cCBpbiBib2FyZCBwcm9tIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgorCitjb25maWcgQ01ETElORV9GT1JDRQorCWJvb2wgIkZvcmNlIGRlZmF1bHQga2VybmVsIGNvbW1hbmQgc3RyaW5nIgorCWRlcGVuZHMgb24gQ01ETElORV9CT09MCisJaGVscAorCSAgU2V0IHRoaXMgdG8gaGF2ZSBhcmd1bWVudHMgZnJvbSB0aGUgZGVmYXVsdCBrZXJuZWwgY29tbWFuZCBzdHJpbmcKKwkgIG92ZXJyaWRlIHRob3NlIHBhc3NlZCBieSB0aGUgYm9vdCBsb2FkZXIuCisKK2NvbmZpZyBOSU9TMl9DTURMSU5FX0lHTk9SRV9EVEIKKwlib29sICJJZ25vcmUga2VybmVsIGNvbW1hbmQgc3RyaW5nIGZyb20gRFRCIgorCWRlcGVuZHMgb24gQ01ETElORV9CT09MCisJZGVwZW5kcyBvbiAhQ01ETElORV9GT1JDRQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNldCB0aGlzIHRvIGlnbm9yZSB0aGUgYm9vdGFyZ3MgcHJvcGVydHkgZnJvbSB0aGUgZGV2aWNldHJlZSdzCisJICBjaG9zZW4gbm9kZSBhbmQgZmFsbCBiYWNrIHRvIENNRExJTkUgaWYgbm90aGluZyBpcyBwYXNzZWQuCisKK2NvbmZpZyBOSU9TMl9QQVNTX0NNRExJTkUKKwlib29sICJQYXNzZWQga2VybmVsIGNvbW1hbmQgbGluZSBmcm9tIHUtYm9vdCIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBVc2UgYm9vdGFyZ3MgZW52IHZhcmlhYmxlIGZyb20gdS1ib290IGZvciBrZXJuZWwgY29tbWFuZCBsaW5lLgorCSAgd2lsbCBvdmVycmlkZSAiRGVmYXVsdCBrZXJuZWwgY29tbWFuZCBzdHJpbmciLgorCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCisKK2VuZG1lbnUKKworbWVudSAiQWR2YW5jZWQgc2V0dXAiCisKK2NvbmZpZyBBRFZBTkNFRF9PUFRJT05TCisJYm9vbCAiUHJvbXB0IGZvciBhZHZhbmNlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIgorCWhlbHAKKworY29tbWVudCAiRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkIgorCWRlcGVuZHMgb24gIUFEVkFOQ0VEX09QVElPTlMKKworY29uZmlnIE5JT1MyX0tFUk5FTF9NTVVfUkVHSU9OX0JBU0VfQk9PTAorCWJvb2wgIlNldCBjdXN0b20ga2VybmVsIE1NVSByZWdpb24gYmFzZSBhZGRyZXNzIgorCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGtlcm5lbCBNTVUgcmVnaW9uLgorCisJICBTYXkgTiBoZXJlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKK2NvbmZpZyBOSU9TMl9LRVJORUxfTU1VX1JFR0lPTl9CQVNFCisJaGV4ICJWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUga2VybmVsIE1NVSByZWdpb24gIiBpZiBOSU9TMl9LRVJORUxfTU1VX1JFR0lPTl9CQVNFX0JPT0wKKwlkZWZhdWx0ICIweDgwMDAwMDAwIgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB2aXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUga2VybmVsIE1NVSByZWdpb24uCisKK2NvbmZpZyBOSU9TMl9LRVJORUxfUkVHSU9OX0JBU0VfQk9PTAorCWJvb2wgIlNldCBjdXN0b20ga2VybmVsIHJlZ2lvbiBiYXNlIGFkZHJlc3MiCisJZGVwZW5kcyBvbiBBRFZBTkNFRF9PUFRJT05TCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUga2VybmVsIHJlZ2lvbi4KKworCSAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCitjb25maWcgTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFCisJaGV4ICJWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUga2VybmVsIHJlZ2lvbiAiIGlmIE5JT1MyX0tFUk5FTF9SRUdJT05fQkFTRV9CT09MCisJZGVmYXVsdCAiMHhjMDAwMDAwMCIKKworY29uZmlnIE5JT1MyX0lPX1JFR0lPTl9CQVNFX0JPT0wKKwlib29sICJTZXQgY3VzdG9tIEkvTyByZWdpb24gYmFzZSBhZGRyZXNzIgorCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIEkvTyByZWdpb24uCisKKwkgIFNheSBOIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKworY29uZmlnIE5JT1MyX0lPX1JFR0lPTl9CQVNFCisJaGV4ICJWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUgSS9PIHJlZ2lvbiIgaWYgTklPUzJfSU9fUkVHSU9OX0JBU0VfQk9PTAorCWRlZmF1bHQgIjB4ZTAwMDAwMDAiCisKK2VuZG1lbnUKKworbWVudSAiRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMiCisKK3NvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCisKK2VuZG1lbnUKKworc291cmNlICJuZXQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL0tjb25maWciCisKK3NvdXJjZSAiZnMvS2NvbmZpZyIKKworc291cmNlICJhcmNoL25pb3MyL0tjb25maWcuZGVidWciCisKK3NvdXJjZSAic2VjdXJpdHkvS2NvbmZpZyIKKworc291cmNlICJjcnlwdG8vS2NvbmZpZyIKKworc291cmNlICJsaWIvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvbmlvczIvS2NvbmZpZy5kZWJ1ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDRlNmJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9LY29uZmlnLmRlYnVnCkBAIC0wLDAgKzEsMTcgQEAKK21lbnUgIktlcm5lbCBoYWNraW5nIgorCitjb25maWcgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAorCWRlZl9ib29sIHkKKworc291cmNlICJsaWIvS2NvbmZpZy5kZWJ1ZyIKKworY29uZmlnIERFQlVHX1NUQUNLX1VTQUdFCisJYm9vbCAiRW5hYmxlIHN0YWNrIHV0aWxpemF0aW9uIGluc3RydW1lbnRhdGlvbiIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWhlbHAKKwkgIEVuYWJsZXMgdGhlIGRpc3BsYXkgb2YgdGhlIG1pbmltdW0gYW1vdW50IG9mIGZyZWUgc3RhY2sgd2hpY2ggZWFjaAorCSAgdGFzayBoYXMgZXZlciBoYWQgYXZhaWxhYmxlIGluIHRoZSBzeXNycS1UIGFuZCBzeXNycS1QIGRlYnVnIG91dHB1dC4KKworCSAgVGhpcyBvcHRpb24gd2lsbCBzbG93IGRvd24gcHJvY2VzcyBjcmVhdGlvbiBzb21ld2hhdC4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9NYWtlZmlsZSBiL2FyY2gvbmlvczIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0MmM5ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL01ha2VmaWxlCkBAIC0wLDAgKzEsNzMgQEAKKyMKKyMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMTk5NCwgOTUsIDk2LCAyMDAzIGJ5IFdpbmQgUml2ZXIgU3lzdGVtcworIyBXcml0dGVuIGJ5IEZyZWRyaWsgTWFya3N0cm9tCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSB0aGUgZ2xvYmFsIG1ha2VmaWxlIHNvIHRoYXQgeW91IGNhbiBhZGQgeW91ciBvd24KKyMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzIGFuZCBkZXBlbmRlbmNpZXMuIFJlbWVtYmVyIHRvIGRvIGhhdmUgYWN0aW9ucworIyBmb3IgImFyY2hjbGVhbiIgY2xlYW5pbmcgdXAgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgorIworIyBOaW9zMiBwb3J0IGJ5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMgdHJvdWdoOgorIyAgIGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKworVVRTX1NZU05BTUUgPSBMaW51eAorCitleHBvcnQgTU1VCisKK0xJQkdDQwkJOj0gJChzaGVsbCAkKENDKSAkKEtCVUlMRF9DRkxBR1MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lKQorCitLQlVJTERfQ0ZMQUdTICs9IC1waXBlIC1EX19saW51eF9fIC1EX19FTEZfXworS0JVSUxEX0NGTEFHUyArPSAkKGlmICQoQ09ORklHX05JT1MyX0hXX01VTF9TVVBQT1JUKSwtbWh3LW11bCwtbW5vLWh3LW11bCkKK0tCVUlMRF9DRkxBR1MgKz0gJChpZiAkKENPTkZJR19OSU9TMl9IV19NVUxYX1NVUFBPUlQpLC1taHctbXVseCwtbW5vLWh3LW11bHgpCitLQlVJTERfQ0ZMQUdTICs9ICQoaWYgJChDT05GSUdfTklPUzJfSFdfRElWX1NVUFBPUlQpLC1taHctZGl2LC1tbm8taHctZGl2KQorS0JVSUxEX0NGTEFHUyArPSAkKGlmICQoQ09ORklHX05JT1MyX0ZQVV9TVVBQT1JUKSwtbWN1c3RvbS1mcHUtY2ZnPTYwLTEsKQorCitLQlVJTERfQ0ZMQUdTICs9IC1mbm8tb3B0aW1pemUtc2libGluZy1jYWxscworS0JVSUxEX0NGTEFHUyArPSAtRFVUU19TWVNOQU1FPVwiJChVVFNfU1lTTkFNRSlcIgorS0JVSUxEX0NGTEFHUyArPSAtZm5vLWJ1aWx0aW4KK0tCVUlMRF9DRkxBR1MgKz0gLUcgMAorCitoZWFkLXkJCTo9IGFyY2gvbmlvczIva2VybmVsL2hlYWQubworbGlicy15CQkrPSBhcmNoL25pb3MyL2xpYi8gJChMSUJHQ0MpCitjb3JlLXkJCSs9IGFyY2gvbmlvczIva2VybmVsLyBhcmNoL25pb3MyL21tLworY29yZS15CQkrPSBhcmNoL25pb3MyL3BsYXRmb3JtLworCitJTlNUQUxMX1BBVEggPz0gL3RmdHBib290CituaW9zMi1ib290IDo9IGFyY2gvJChBUkNIKS9ib290CitCT09UX1RBUkdFVFMgPSB2bUltYWdlIHpJbWFnZQorUEhPTlkgKz0gJChCT09UX1RBUkdFVFMpIGluc3RhbGwKK0tCVUlMRF9JTUFHRSA6PSAkKG5pb3MyLWJvb3QpL3ZtSW1hZ2UKKworaWZuZXEgKCQoQ09ORklHX05JT1MyX0RUQl9TT1VSQ0UpLCIiKQorCWNvcmUteQkrPSAkKG5pb3MyLWJvb3QpLworZW5kaWYKKworYWxsOiB2bUltYWdlCisKK2FyY2hjbGVhbjoKKwkkKFEpJChNQUtFKSAkKGNsZWFuKT0kKG5pb3MyLWJvb3QpCisKKyUuZHRiOgorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQobmlvczItYm9vdCkgJChuaW9zMi1ib290KS8kQAorCitkdGJzOgorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQobmlvczItYm9vdCkgJChuaW9zMi1ib290KS8kQAorCiskKEJPT1RfVEFSR0VUUyk6IHZtbGludXgKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG5pb3MyLWJvb3QpICQobmlvczItYm9vdCkvJEAKKworaW5zdGFsbDoKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG5pb3MyLWJvb3QpIEJPT1RJTUFHRT0kKEtCVUlMRF9JTUFHRSkgaW5zdGFsbAorCitkZWZpbmUgYXJjaGhlbHAKKyAgZWNobyAgJyogdm1JbWFnZSAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoJChLQlVJTERfSU1BR0UpKScKKyAgZWNobyAgJyAgaW5zdGFsbCAgICAgICAgIC0gSW5zdGFsbCBrZXJuZWwgdXNpbmcnCisgIGVjaG8gICcgICAgICAgICAgICAgICAgICAgICAoeW91cikgfi9iaW4vJChJTlNUQUxMS0VSTkVMKSBvcicKKyAgZWNobyAgJyAgICAgICAgICAgICAgICAgICAgIChkaXN0cmlidXRpb24pIC9zYmluLyQoSU5TVEFMTEtFUk5FTCkgb3InCisgIGVjaG8gICcgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIHRvICQkKElOU1RBTExfUEFUSCknCisgIGVjaG8gICcgIGR0YnMgICAgICAgICAgICAtIEJ1aWxkIGRldmljZSB0cmVlIGJsb2JzIGZvciBlbmFibGVkIGJvYXJkcycKK2VuZGVmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL25pb3MyL2Jvb3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzOTJkYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvYm9vdC9NYWtlZmlsZQpAQCAtMCwwICsxLDUyIEBACisjCisjIGFyY2gvbmlvczIvYm9vdC9NYWtlZmlsZQorIworIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisKK1VJTUFHRV9MT0FEQUREUiA9ICQoc2hlbGwgJChOTSkgdm1saW51eCB8IGF3ayAnJCRORiA9PSAiX3N0ZXh0IiB7cHJpbnQgJCQxfScpCitVSU1BR0VfRU5UUllBRERSID0gJChzaGVsbCAkKE5NKSB2bWxpbnV4IHwgYXdrICckJE5GID09ICJfc3RhcnQiIHtwcmludCAkJDF9JykKK1VJTUFHRV9DT01QUkVTU0lPTiA9IGd6aXAKKworT0JKQ09QWUZMQUdTX3ZtbGludXguYmluIDo9IC1PIGJpbmFyeQorCit0YXJnZXRzICs9IHZtbGludXguYmluIHZtbGludXguZ3ogdm1JbWFnZQorCiskKG9iaikvdm1saW51eC5iaW46IHZtbGludXggRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCiskKG9iaikvdm1saW51eC5nejogJChvYmopL3ZtbGludXguYmluIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsZ3ppcCkKKworJChvYmopL3ZtSW1hZ2U6ICQob2JqKS92bWxpbnV4Lmd6CisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlKQorCUAkKGtlY2hvKSAnS2VybmVsOiAkQCBpcyByZWFkeScKKworIyBSdWxlIHRvIGJ1aWxkIGRldmljZSB0cmVlIGJsb2JzCitEVEJfU1JDIDo9ICQocGF0c3Vic3QgIiUiLCUsJChDT05GSUdfTklPUzJfRFRCX1NPVVJDRSkpCisKKyMgTWFrZSBzdXJlIHRoZSBnZW5lcmF0ZWQgZHRiIGdldHMgcmVtb3ZlZCBkdXJpbmcgY2xlYW4KK2V4dHJhLSQoQ09ORklHX05JT1MyX0RUQl9TT1VSQ0VfQk9PTCkgKz0gc3lzdGVtLmR0YgorCiskKG9iaikvc3lzdGVtLmR0YjogJChEVEJfU1JDKSBGT1JDRQorCSQoY2FsbCBjbWQsZHRjKQorCisjIEVuc3VyZSBzeXN0ZW0uZHRiIGV4aXN0cworJChvYmopL2xpbmtlZF9kdGIubzogJChvYmopL3N5c3RlbS5kdGIKKworb2JqLSQoQ09ORklHX05JT1MyX0RUQl9TT1VSQ0VfQk9PTCkgKz0gbGlua2VkX2R0Yi5vCisKK3RhcmdldHMgKz0gJChkdGIteSkKKworIyBSdWxlIHRvIGJ1aWxkIGRldmljZSB0cmVlIGJsb2JzIHdpdGggbWFrZSBjb21tYW5kCiskKG9iaikvJS5kdGI6ICQoc3JjKS9kdHMvJS5kdHMgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsZHRjKQorCiskKG9iaikvZHRiczogJChhZGRwcmVmaXggJChvYmopLywgJChkdGIteSkpCisKK2NsZWFuLWZpbGVzIDo9ICouZHRiCisKK2luc3RhbGw6CisJc2ggJChzcmN0cmVlKS8kKHNyYykvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpICQoQk9PVElNQUdFKSBTeXN0ZW0ubWFwICIkKElOU1RBTExfUEFUSCkiCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2Jvb3QvZHRzLzNjMTIwX2RldmJvYXJkLmR0cyBiL2FyY2gvbmlvczIvYm9vdC9kdHMvM2MxMjBfZGV2Ym9hcmQuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYzUxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2Jvb3QvZHRzLzNjMTIwX2RldmJvYXJkLmR0cwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHNvcGMyZHRzLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJhbHRyLHFzeXNfZ2hyZF8zYzEyMCI7CisJY29tcGF0aWJsZSA9ICJhbHRyLHFzeXNfZ2hyZF8zYzEyMCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdTogY3B1QDB4MCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhbHRyLG5pb3MyLTEuMCI7CisJCQlyZWcgPSA8MHgwMDAwMDAwMD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTI1MDAwMDAwPjsKKwkJCWRjYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCQlpY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCQlhbHRyLGltcGxlbWVudGF0aW9uID0gImZhc3QiOworCQkJYWx0cixwaWQtbnVtLWJpdHMgPSA8OD47CisJCQlhbHRyLHRsYi1udW0td2F5cyA9IDwxNj47CisJCQlhbHRyLHRsYi1udW0tZW50cmllcyA9IDwxMjg+OworCQkJYWx0cix0bGItcHRyLXN6ID0gPDc+OworCQkJYWx0cixoYXMtZGl2ID0gPDE+OworCQkJYWx0cixoYXMtbXVsID0gPDE+OworCQkJYWx0cixyZXNldC1hZGRyID0gPDB4YzI4MDAwMDA+OworCQkJYWx0cixmYXN0LXRsYi1taXNzLWFkZHIgPSA8MHhjN2ZmZjQwMD47CisJCQlhbHRyLGV4Y2VwdGlvbi1hZGRyID0gPDB4ZDAwMDAwMjA+OworCQkJYWx0cixoYXMtaW5pdGRhID0gPDE+OworCQkJYWx0cixoYXMtbW11ID0gPDE+OworCQl9OworCX07CisKKwltZW1vcnlAMCB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDEwMDAwMDAwIDB4MDgwMDAwMDA+LAorCQkJPDB4MDdmZmY0MDAgMHgwMDAwMDQwMD47CisJfTsKKworCXNvcGNAMCB7CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCXJhbmdlczsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImFsdHIsYXZhbG9uIiwgInNpbXBsZS1idXMiOworCQlidXMtZnJlcXVlbmN5ID0gPDEyNTAwMDAwMD47CisKKwkJcGJfY3B1X3RvX2lvOiBicmlkZ2VAMHg4MDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlyZWcgPSA8MHgwODAwMDAwMCAweDAwODAwMDAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXMgPSA8MHgwMDAwMjAwMCAweDA4MDAyMDAwIDB4MDAwMDIwMDA+LAorCQkJCTwweDAwMDA0MDAwIDB4MDgwMDQwMDAgMHgwMDAwMDQwMD4sCisJCQkJPDB4MDAwMDQ0MDAgMHgwODAwNDQwMCAweDAwMDAwMDQwPiwKKwkJCQk8MHgwMDAwNDgwMCAweDA4MDA0ODAwIDB4MDAwMDAwNDA+LAorCQkJCTwweDAwMDA0YzgwIDB4MDgwMDRjODAgMHgwMDAwMDAyMD4sCisJCQkJPDB4MDAwMDRkNTAgMHgwODAwNGQ1MCAweDAwMDAwMDA4PiwKKwkJCQk8MHgwMDAwODAwMCAweDA4MDA4MDAwIDB4MDAwMDAwMjA+LAorCQkJCTwweDAwNDAwMDAwIDB4MDg0MDAwMDAgMHgwMDAwMDAyMD47CisKKwkJCXRpbWVyXzFtczogdGltZXJAMHg0MDAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYWx0cix0aW1lci0xLjAiOworCQkJCXJlZyA9IDwweDAwNDAwMDAwIDB4MDAwMDAwMjA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmNwdT47CisJCQkJaW50ZXJydXB0cyA9IDwxMT47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEyNTAwMDAwMD47CisJCQl9OworCisJCQl0aW1lcl8wOiB0aW1lckAweDgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYWx0cix0aW1lci0xLjAiOworCQkJCXJlZyA9IDwgMHgwMDAwODAwMCAweDAwMDAwMDIwID47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmNwdSA+OworCQkJCWludGVycnVwdHMgPSA8IDUgPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8IDEyNTAwMDAwMCA+OworCQkJfTsKKworCQkJanRhZ191YXJ0OiBzZXJpYWxAMHg0ZDUwIHsKKwkJCQljb21wYXRpYmxlID0gImFsdHIsanVhcnQtMS4wIjsKKwkJCQlyZWcgPSA8MHgwMDAwNGQ1MCAweDAwMDAwMDA4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZjcHU+OworCQkJCWludGVycnVwdHMgPSA8MT47CisJCQl9OworCisJCQl0c2VfbWFjOiBldGhlcm5ldEAweDQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYWx0cix0c2UtMS4wIjsKKwkJCQlyZWcgPSA8MHgwMDAwNDAwMCAweDAwMDAwNDAwPiwKKwkJCQkJPDB4MDAwMDQ0MDAgMHgwMDAwMDA0MD4sCisJCQkJCTwweDAwMDA0ODAwIDB4MDAwMDAwNDA+LAorCQkJCQk8MHgwMDAwMjAwMCAweDAwMDAyMDAwPjsKKwkJCQlyZWctbmFtZXMgPSAiY29udHJvbF9wb3J0IiwgInJ4X2NzciIsICJ0eF9jc3IiLCAiczEiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmNwdT47CisJCQkJaW50ZXJydXB0cyA9IDwyIDM+OworCQkJCWludGVycnVwdC1uYW1lcyA9ICJyeF9pcnEiLCAidHhfaXJxIjsKKwkJCQlyeC1maWZvLWRlcHRoID0gPDgxOTI+OworCQkJCXR4LWZpZm8tZGVwdGggPSA8ODE5Mj47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MTUxOD47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQkJcGh5LW1vZGUgPSAicmdtaWktaWQiOworCQkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJCXRzZV9tYWNfbWRpbzogbWRpbyB7CisJCQkJCWNvbXBhdGlibGUgPSAiYWx0cix0c2UtbWRpbyI7CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDE4IHsKKwkJCQkJCXJlZyA9IDwxOD47CisJCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQl1YXJ0OiBzZXJpYWxAMHg0YzgwIHsKKwkJCQljb21wYXRpYmxlID0gImFsdHIsdWFydC0xLjAiOworCQkJCXJlZyA9IDwweDAwMDA0YzgwIDB4MDAwMDAwMjA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmNwdT47CisJCQkJaW50ZXJydXB0cyA9IDwxMD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwxMTUyMDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2MjUwMDAwMD47CisJCQl9OworCQl9OworCisJCWNmaV9mbGFzaF82NG06IGZsYXNoQDB4MCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA0MDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AODAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwMDgwMDAwMCAweDAxZTAwMDAwPjsKKwkJCQlsYWJlbCA9ICJKRkZTMiBGaWxlc3lzdGVtIjsKKwkJCX07CisJCX07CisJfTsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImRlYnVnIGNvbnNvbGU9dHR5SjAsMTE1MjAwIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvYm9vdC9pbnN0YWxsLnNoIGIvYXJjaC9uaW9zMi9ib290L2luc3RhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiM2Y0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvYm9vdC9pbnN0YWxsLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIENvcHlyaWdodCAoQykgMTk5NSBieSBMaW51cyBUb3J2YWxkcworIworIyBBZGFwdGVkIGZyb20gY29kZSBpbiBhcmNoL2kzODYvYm9vdC9NYWtlZmlsZSBieSBILiBQZXRlciBBbnZpbgorIworIyAibWFrZSBpbnN0YWxsIiBzY3JpcHQgZm9yIG5pb3MyIGFyY2hpdGVjdHVyZQorIworIyBBcmd1bWVudHM6CisjICAgJDEgLSBrZXJuZWwgdmVyc2lvbgorIyAgICQyIC0ga2VybmVsIGltYWdlIGZpbGUKKyMgICAkMyAtIGtlcm5lbCBtYXAgZmlsZQorIyAgICQ0IC0gZGVmYXVsdCBpbnN0YWxsIHBhdGggKGJsYW5rIGlmIHJvb3QgZGlyZWN0b3J5KQorIworCit2ZXJpZnkgKCkgeworCWlmIFsgISAtZiAiJDEiIF07IHRoZW4KKwkJZWNobyAiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE+JjIKKwkJZWNobyAiICoqKiBNaXNzaW5nIGZpbGU6ICQxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE+JjIKKwkJZWNobyAnICoqKiBZb3UgbmVlZCB0byBydW4gIm1ha2UiIGJlZm9yZSAibWFrZSBpbnN0YWxsIi4nIDE+JjIKKwkJZWNobyAiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE+JjIKKwkJZXhpdCAxCisJZmkKK30KKworIyBNYWtlIHN1cmUgdGhlIGZpbGVzIGFjdHVhbGx5IGV4aXN0Cit2ZXJpZnkgIiQyIgordmVyaWZ5ICIkMyIKKworIyBVc2VyIG1heSBoYXZlIGEgY3VzdG9tIGluc3RhbGwgc2NyaXB0CisKK2lmIFsgLXggfi9iaW4vJHtJTlNUQUxMS0VSTkVMfSBdOyB0aGVuIGV4ZWMgfi9iaW4vJHtJTlNUQUxMS0VSTkVMfSAiJEAiOyBmaQoraWYgWyAteCAvc2Jpbi8ke0lOU1RBTExLRVJORUx9IF07IHRoZW4gZXhlYyAvc2Jpbi8ke0lOU1RBTExLRVJORUx9ICIkQCI7IGZpCisKKyMgRGVmYXVsdCBpbnN0YWxsIC0gc2FtZSBhcyBtYWtlIHpsaWxvCisKK2lmIFsgLWYgJDQvdm1saW51eiBdOyB0aGVuCisJbXYgJDQvdm1saW51eiAkNC92bWxpbnV6Lm9sZAorZmkKKworaWYgWyAtZiAkNC9TeXN0ZW0ubWFwIF07IHRoZW4KKwltdiAkNC9TeXN0ZW0ubWFwICQ0L1N5c3RlbS5vbGQKK2ZpCisKK2NhdCAkMiA+ICQ0L3ZtbGludXoKK2NwICQzICQ0L1N5c3RlbS5tYXAKKworc3luYwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9ib290L2xpbmtlZF9kdGIuUyBiL2FyY2gvbmlvczIvYm9vdC9saW5rZWRfZHRiLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxZjkyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvYm9vdC9saW5rZWRfZHRiLlMKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKy5zZWN0aW9uIC5kdGIuaW5pdC5yb2RhdGEsImEiCisuaW5jYmluICJhcmNoL25pb3MyL2Jvb3Qvc3lzdGVtLmR0YiIKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvY29uZmlncy8zYzEyMF9kZWZjb25maWcgYi9hcmNoL25pb3MyL2NvbmZpZ3MvM2MxMjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NTQxZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2NvbmZpZ3MvM2MxMjBfZGVmY29uZmlnCkBAIC0wLDAgKzEsNzcgQEAKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19OT19IWl9JRExFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfU0lHTkFMRkQgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJGRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVkVOVEZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NMQUI9eQorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX05JT1MyX01FTV9CQVNFPTB4MTAwMDAwMDAKK0NPTkZJR19OSU9TMl9IV19NVUxfU1VQUE9SVD15CitDT05GSUdfTklPUzJfSFdfRElWX1NVUFBPUlQ9eQorQ09ORklHX0NVU1RPTV9DQUNIRV9TRVRUSU5HUz15CitDT05GSUdfTklPUzJfRENBQ0hFX1NJWkU9MHg4MDAwCitDT05GSUdfTklPUzJfSUNBQ0hFX1NJWkU9MHg4MDAwCisjIENPTkZJR19OSU9TMl9DTURMSU5FX0lHTk9SRV9EVEIgaXMgbm90IHNldAorQ09ORklHX05JT1MyX1BBU1NfQ01ETElORT15CitDT05GSUdfTkVUPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX0RFVlRNUEZTPXkKK0NPTkZJR19ERVZUTVBGU19NT1VOVD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorQ09ORklHX01URD15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9QSFlTTUFQX09GPXkKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0FMVEVSQV9UU0U9eQorQ09ORklHX01BUlZFTExfUEhZPXkKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0FMVEVSQV9KVEFHVUFSVD15CitDT05GSUdfU0VSSUFMX0FMVEVSQV9KVEFHVUFSVF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQUxURVJBX1VBUlQ9eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX1NVTlJQQ19ERUJVRz15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxNjBiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vS2J1aWxkCkBAIC0wLDAgKzEsNjYgQEAKK2dlbmVyaWMteSArPSBhdG9taWMuaAorZ2VuZXJpYy15ICs9IGF1eHZlYy5oCitnZW5lcmljLXkgKz0gYmFycmllci5oCitnZW5lcmljLXkgKz0gYml0b3BzLmgKK2dlbmVyaWMteSArPSBiaXRzcGVybG9uZy5oCitnZW5lcmljLXkgKz0gYnVnLmgKK2dlbmVyaWMteSArPSBidWdzLmgKK2dlbmVyaWMteSArPSBjbGtkZXYuaAorZ2VuZXJpYy15ICs9IGNwdXRpbWUuaAorZ2VuZXJpYy15ICs9IGN1cnJlbnQuaAorZ2VuZXJpYy15ICs9IGRldmljZS5oCitnZW5lcmljLXkgKz0gZGl2NjQuaAorZ2VuZXJpYy15ICs9IGRtYS5oCitnZW5lcmljLXkgKz0gZW1lcmdlbmN5LXJlc3RhcnQuaAorZ2VuZXJpYy15ICs9IGVycm5vLmgKK2dlbmVyaWMteSArPSBleGVjLmgKK2dlbmVyaWMteSArPSBmYi5oCitnZW5lcmljLXkgKz0gZmNudGwuaAorZ2VuZXJpYy15ICs9IGZ0cmFjZS5oCitnZW5lcmljLXkgKz0gZnV0ZXguaAorZ2VuZXJpYy15ICs9IGhhcmRpcnEuaAorZ2VuZXJpYy15ICs9IGhhc2guaAorZ2VuZXJpYy15ICs9IGh3X2lycS5oCitnZW5lcmljLXkgKz0gaW9jdGwuaAorZ2VuZXJpYy15ICs9IGlvY3Rscy5oCitnZW5lcmljLXkgKz0gaXBjYnVmLmgKK2dlbmVyaWMteSArPSBpcnFfcmVncy5oCitnZW5lcmljLXkgKz0gaXJxX3dvcmsuaAorZ2VuZXJpYy15ICs9IGtkZWJ1Zy5oCitnZW5lcmljLXkgKz0ga21hcF90eXBlcy5oCitnZW5lcmljLXkgKz0ga3ZtX3BhcmEuaAorZ2VuZXJpYy15ICs9IGxvY2FsLmgKK2dlbmVyaWMteSArPSBtY3Nfc3BpbmxvY2suaAorZ2VuZXJpYy15ICs9IG1tYW4uaAorZ2VuZXJpYy15ICs9IG1vZHVsZS5oCitnZW5lcmljLXkgKz0gbXNnYnVmLmgKK2dlbmVyaWMteSArPSBwYXJhbS5oCitnZW5lcmljLXkgKz0gcGNpLmgKK2dlbmVyaWMteSArPSBwZXJjcHUuaAorZ2VuZXJpYy15ICs9IHBvbGwuaAorZ2VuZXJpYy15ICs9IHBvc2l4X3R5cGVzLmgKK2dlbmVyaWMteSArPSBwcmVlbXB0LmgKK2dlbmVyaWMteSArPSByZXNvdXJjZS5oCitnZW5lcmljLXkgKz0gc2NhdHRlcmxpc3QuaAorZ2VuZXJpYy15ICs9IHNlY3Rpb25zLmgKK2dlbmVyaWMteSArPSBzZWdtZW50LmgKK2dlbmVyaWMteSArPSBzZW1idWYuaAorZ2VuZXJpYy15ICs9IHNlcmlhbC5oCitnZW5lcmljLXkgKz0gc2htYnVmLmgKK2dlbmVyaWMteSArPSBzaG1wYXJhbS5oCitnZW5lcmljLXkgKz0gc2lnaW5mby5oCitnZW5lcmljLXkgKz0gc2lnbmFsLmgKK2dlbmVyaWMteSArPSBzb2NrZXQuaAorZ2VuZXJpYy15ICs9IHNvY2tpb3MuaAorZ2VuZXJpYy15ICs9IHNwaW5sb2NrLmgKK2dlbmVyaWMteSArPSBzdGF0LmgKK2dlbmVyaWMteSArPSBzdGF0ZnMuaAorZ2VuZXJpYy15ICs9IHRlcm1iaXRzLmgKK2dlbmVyaWMteSArPSB0ZXJtaW9zLmgKK2dlbmVyaWMteSArPSB0b3BvbG9neS5oCitnZW5lcmljLXkgKz0gdHJhY2VfY2xvY2suaAorZ2VuZXJpYy15ICs9IHR5cGVzLmgKK2dlbmVyaWMteSArPSB1bmFsaWduZWQuaAorZ2VuZXJpYy15ICs9IHVzZXIuaAorZ2VuZXJpYy15ICs9IHZnYS5oCitnZW5lcmljLXkgKz0geG9yLmgKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vYXNtLW1hY3Jvcy5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9hc20tbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmYTJlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vYXNtLW1hY3Jvcy5oCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogTWFjcm8gdXNlZCB0byBzaW1wbGlmeSBjb2RpbmcgbXVsdGktbGluZSBhc3NlbWJsZXIuCisgKiBTb21lIG9mIHRoZSBiaXQgdGVzdCBtYWNybyBjYW4gc2ltcGxpZnkgZG93biB0byBvbmUgbGluZQorICogZGVwZW5kaW5nIG9uIHRoZSBtYXNrIHZhbHVlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKi8KKyNpZm5kZWYgX0FTTV9OSU9TMl9BU01NQUNST1NfSAorI2RlZmluZSBfQVNNX05JT1MyX0FTTU1BQ1JPU19ICisvKgorICogQU5EcyByZWcyIHdpdGggbWFzayBhbmQgcGxhY2VzIHRoZSByZXN1bHQgaW4gcmVnMS4KKyAqCisgKiBZb3UgY2Fubm5vdCB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBBTkRJMzIJcmVnMSwgcmVnMiwgbWFzaworLmlmIFxtYXNrICYgMHhmZmZmCisJLmlmIFxtYXNrICYgMHhmZmZmMDAwMAorCQltb3ZoaQlccmVnMSwgJWhpKFxtYXNrKQorCQltb3Z1aQlccmVnMSwgJWxvKFxtYXNrKQorCQlhbmQJXHJlZzEsIFxyZWcxLCBccmVnMgorCS5lbHNlCisJCWFuZGkJXHJlZzEsIFxyZWcyLCAlbG8oXG1hc2spCisJLmVuZGlmCisuZWxzZQorCWFuZGhpCVxyZWcxLCBccmVnMiwgJWhpKFxtYXNrKQorLmVuZGlmCisuZW5kbQorCisvKgorICogT1JzIHJlZzIgd2l0aCBtYXNrIGFuZCBwbGFjZXMgdGhlIHJlc3VsdCBpbiByZWcxLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gT1JJMzIJcmVnMSwgcmVnMiwgbWFzaworLmlmIFxtYXNrICYgMHhmZmZmCisJLmlmIFxtYXNrICYgMHhmZmZmMDAwMAorCQlvcmhpCVxyZWcxLCBccmVnMiwgJWhpKFxtYXNrKQorCQlvcmkJXHJlZzEsIFxyZWcyLCAlbG8oXG1hc2spCisJLmVsc2UKKwkJb3JpCVxyZWcxLCBccmVnMiwgJWxvKFxtYXNrKQorCS5lbmRpZgorLmVsc2UKKwlvcmhpCVxyZWcxLCBccmVnMiwgJWhpKFxtYXNrKQorLmVuZGlmCisuZW5kbQorCisvKgorICogWE9ScyByZWcyIHdpdGggbWFzayBhbmQgcGxhY2VzIHRoZSByZXN1bHQgaW4gcmVnMS4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIFhPUkkzMglyZWcxLCByZWcyLCBtYXNrCisuaWYgXG1hc2sgJiAweGZmZmYKKwkuaWYgXG1hc2sgJiAweGZmZmYwMDAwCisJCXhvcmhpCVxyZWcxLCBccmVnMiwgJWhpKFxtYXNrKQorCQl4b3JpCVxyZWcxLCBccmVnMSwgJWxvKFxtYXNrKQorCS5lbHNlCisJCXhvcmkJXHJlZzEsIFxyZWcyLCAlbG8oXG1hc2spCisJLmVuZGlmCisuZWxzZQorCXhvcmhpCVxyZWcxLCBccmVnMiwgJWhpKFxtYXNrKQorLmVuZGlmCisuZW5kbQorCisvKgorICogVGhpcyBpcyBhIHN1cHBvcnQgbWFjcm8gZm9yIEJUQlogJiBCVEJOWi4gIEl0IGNoZWNrcworICogdGhlIGJpdCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQgMzIgdmFsdWUuCisgKgorICogSXQgaXMgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVAlyZWcxLCByZWcyLCBiaXQKKy5pZiBcYml0ID4gMzEKKwkuZXJyCisuZWxzZQorCS5pZiBcYml0IDwgMTYKKwkJYW5kaQlccmVnMSwgXHJlZzIsICgxIDw8IFxiaXQpCisJLmVsc2UKKwkJYW5kaGkJXHJlZzEsIFxyZWcyLCAoMSA8PCAoXGJpdCAtIDE2KSkKKwkuZW5kaWYKKy5lbmRpZgorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXQgaW4gcmVnMiBhbmQgYnJhbmNoZXMgdG8gbGFiZWwgaWYgdGhlCisgKiBiaXQgaXMgemVyby4gIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRCWglyZWcxLCByZWcyLCBiaXQsIGxhYmVsCisJQlQJXHJlZzEsIFxyZWcyLCBcYml0CisJYmVxCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCBicmFuY2hlcyB0byBsYWJlbCBpZiB0aGUKKyAqIGJpdCBpcyBub24temVyby4gIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRCTloJcmVnMSwgcmVnMiwgYml0LCBsYWJlbAorCUJUCVxyZWcxLCBccmVnMiwgXGJpdAorCWJuZQlccmVnMSwgcjAsIFxsYWJlbAorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXQgaW4gcmVnMiBhbmQgdGhlbiBjb21wbGltZW50cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4KKyAqCisgKiBJdCBpcyBOT1Qgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVEMJcmVnMSwgcmVnMiwgYml0CisuaWYgXGJpdCA+IDMxCisJLmVycgorLmVsc2UKKwkuaWYgXGJpdCA8IDE2CisJCWFuZGkJXHJlZzEsIFxyZWcyLCAoMSA8PCBcYml0KQorCQl4b3JpCVxyZWcyLCBccmVnMiwgKDEgPDwgXGJpdCkKKwkuZWxzZQorCQlhbmRoaQlccmVnMSwgXHJlZzIsICgxIDw8IChcYml0IC0gMTYpKQorCQl4b3JoaQlccmVnMiwgXHJlZzIsICgxIDw8IChcYml0IC0gMTYpKQorCS5lbmRpZgorLmVuZGlmCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCB0aGVuIHNldHMgdGhlIGJpdCBpbiByZWcyLgorICogVGhlIHJlc3VsdCBvZiB0aGUgYml0IHRlc3QgaXMgc3RvcmVkIGluIHJlZzEuCisgKgorICogSXQgaXMgTk9UIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRTCXJlZzEsIHJlZzIsIGJpdAorLmlmIFxiaXQgPiAzMQorCS5lcnIKKy5lbHNlCisJLmlmIFxiaXQgPCAxNgorCQlhbmRpCVxyZWcxLCBccmVnMiwgKDEgPDwgXGJpdCkKKwkJb3JpCVxyZWcyLCBccmVnMiwgKDEgPDwgXGJpdCkKKwkuZWxzZQorCQlhbmRoaQlccmVnMSwgXHJlZzIsICgxIDw8IChcYml0IC0gMTYpKQorCQlvcmhpCVxyZWcyLCBccmVnMiwgKDEgPDwgKFxiaXQgLSAxNikpCisJLmVuZGlmCisuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIHRoZW4gcmVzZXRzIHRoZSBiaXQgaW4gcmVnMi4KKyAqIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLgorICoKKyAqIEl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUUglyZWcxLCByZWcyLCBiaXQKKy5pZiBcYml0ID4gMzEKKwkuZXJyCisuZWxzZQorCS5pZiBcYml0IDwgMTYKKwkJYW5kaQlccmVnMSwgXHJlZzIsICgxIDw8IFxiaXQpCisJCWFuZGkJXHJlZzIsIFxyZWcyLCAlbG8ofigxIDw8IFxiaXQpKQorCS5lbHNlCisJCWFuZGhpCVxyZWcxLCBccmVnMiwgKDEgPDwgKFxiaXQgLSAxNikpCisJCWFuZGhpCVxyZWcyLCBccmVnMiwgJWxvKH4oMSA8PCAoXGJpdCAtIDE2KSkpCisJLmVuZGlmCisuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIHRoZW4gY29tcGxpbWVudHMgdGhlIGJpdCBpbiByZWcyLgorICogVGhlIHJlc3VsdCBvZiB0aGUgYml0IHRlc3QgaXMgc3RvcmVkIGluIHJlZzEuICBJZiB0aGUKKyAqIG9yaWdpbmFsIGJpdCB3YXMgemVybyBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBOT1Qgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVENCWglyZWcxLCByZWcyLCBiaXQsIGxhYmVsCisJQlRDCVxyZWcxLCBccmVnMiwgXGJpdAorCWJlcQlccmVnMSwgcjAsIFxsYWJlbAorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXQgaW4gcmVnMiBhbmQgdGhlbiBjb21wbGltZW50cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4gIElmIHRoZQorICogb3JpZ2luYWwgYml0IHdhcyBub24temVybyBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBOT1Qgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVENCTloJcmVnMSwgcmVnMiwgYml0LCBsYWJlbAorCUJUQwlccmVnMSwgXHJlZzIsIFxiaXQKKwlibmUJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIHRoZW4gc2V0cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4gIElmIHRoZQorICogb3JpZ2luYWwgYml0IHdhcyB6ZXJvIGl0IGJyYW5jaGVzIHRvIGxhYmVsLgorICoKKyAqIEl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUU0JaCXJlZzEsIHJlZzIsIGJpdCwgbGFiZWwKKwlCVFMJXHJlZzEsIFxyZWcyLCBcYml0CisJYmVxCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCB0aGVuIHNldHMgdGhlIGJpdCBpbiByZWcyLgorICogVGhlIHJlc3VsdCBvZiB0aGUgYml0IHRlc3QgaXMgc3RvcmVkIGluIHJlZzEuICBJZiB0aGUKKyAqIG9yaWdpbmFsIGJpdCB3YXMgbm9uLXplcm8gaXQgYnJhbmNoZXMgdG8gbGFiZWwuCisgKgorICogSXQgaXMgTk9UIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRTQk5aCXJlZzEsIHJlZzIsIGJpdCwgbGFiZWwKKwlCVFMJXHJlZzEsIFxyZWcyLCBcYml0CisJYm5lCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCB0aGVuIHJlc2V0cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4gIElmIHRoZQorICogb3JpZ2luYWwgYml0IHdhcyB6ZXJvIGl0IGJyYW5jaGVzIHRvIGxhYmVsLgorICoKKyAqIEl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUUkJaCXJlZzEsIHJlZzIsIGJpdCwgbGFiZWwKKwlCVFIJXHJlZzEsIFxyZWcyLCBcYml0CisJYm5lCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCB0aGVuIHJlc2V0cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4gIElmIHRoZQorICogb3JpZ2luYWwgYml0IHdhcyBub24temVybyBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBOT1Qgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVFJCTloJcmVnMSwgcmVnMiwgYml0LCBsYWJlbAorCUJUUglccmVnMSwgXHJlZzIsIFxiaXQKKwlibmUJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0cyBpbiBtYXNrIGFnYWluc3QgcmVnMiBzdG9yZXMgdGhlIHJlc3VsdCBpbiByZWcxLgorICogSWYgdGhlIGFsbCB0aGUgYml0cyBpbiB0aGUgbWFzayBhcmUgemVybyBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIFRTVEJaCXJlZzEsIHJlZzIsIG1hc2ssIGxhYmVsCisJQU5ESTMyCVxyZWcxLCBccmVnMiwgXG1hc2sKKwliZXEJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0cyBpbiBtYXNrIGFnYWluc3QgcmVnMiBzdG9yZXMgdGhlIHJlc3VsdCBpbiByZWcxLgorICogSWYgdGhlIGFueSBvZiB0aGUgYml0cyBpbiB0aGUgbWFzayBhcmUgMSBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIFRTVEJOWglyZWcxLCByZWcyLCBtYXNrLCBsYWJlbAorCUFOREkzMglccmVnMSwgXHJlZzIsIFxtYXNrCisJYm5lCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogUHVzaGVzIHJlZyBvbnRvIHRoZSBzdGFjay4KKyAqLworCisubWFjcm8gUFVTSAlyZWcKKwlhZGRpCXNwLCBzcCwgLTQKKwlzdHcJXHJlZywgMChzcCkKKy5lbmRtCisKKy8qCisgKiBQb3BzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGludG8gcmVnLgorICovCisKKy5tYWNybyBQT1AJcmVnCisJbGR3CVxyZWcsIDAoc3ApCisJYWRkaQlzcCwgc3AsIDQKKy5lbmRtCisKKworI2VuZGlmIC8qIF9BU01fTklPUzJfQVNNTUFDUk9TX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjlmNWUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogIENvcHlyaWdodCAoQykgMjAwOSBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGdlbmVyYXRlZC9hc20tb2Zmc2V0cy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTNjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NhY2hlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfQ0FDSEVfSAorI2RlZmluZSBfQVNNX05JT1MyX0NBQ0hFX0gKKworI2RlZmluZSBOSU9TMl9EQ0FDSEVfU0laRQlDT05GSUdfTklPUzJfRENBQ0hFX1NJWkUKKyNkZWZpbmUgTklPUzJfSUNBQ0hFX1NJWkUJQ09ORklHX05JT1MyX0lDQUNIRV9TSVpFCisjZGVmaW5lIE5JT1MyX0RDQUNIRV9MSU5FX1NJWkUJQ09ORklHX05JT1MyX0RDQUNIRV9MSU5FX1NJWkUKKyNkZWZpbmUgTklPUzJfSUNBQ0hFX0xJTkVfU0hJRlQJNQorI2RlZmluZSBOSU9TMl9JQ0FDSEVfTElORV9TSVpFCSgxIDw8IE5JT1MyX0lDQUNIRV9MSU5FX1NISUZUKQorCisvKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLworI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJTklPUzJfSUNBQ0hFX0xJTkVfU0hJRlQKKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMJCU5JT1MyX0lDQUNIRV9MSU5FX1NJWkUKKworI2RlZmluZSBBUkNIX0RNQV9NSU5BTElHTglMMV9DQUNIRV9CWVRFUworCisjZGVmaW5lIF9fY2FjaGVsaW5lX2FsaWduZWQKKyNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmFiYmE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9BU01fTklPUzJfQ0FDSEVGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgorCisvKgorICogVGhpcyBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcGFnZSBwb2ludGVkIHRvIGJ5IGEgcHRlIGlzIGNsZWFuCisgKiBhbmQgZG9lcyBub3QgcmVxdWlyZSBjbGVhbmluZyBiZWZvcmUgcmV0dXJuaW5nIGl0IHRvIHRoZSB1c2VyLgorICovCisjZGVmaW5lIFBHX2RjYWNoZV9jbGVhbiBQR19hcmNoXzEKKworc3RydWN0IG1tX3N0cnVjdDsKKworZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfZHVwX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCXVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdm1hZGRyLAorCXVuc2lnbmVkIGxvbmcgcGZuKTsKKyNkZWZpbmUgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFIDEKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKKworZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZmx1c2hfZGNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfZGNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCisKK2V4dGVybiB2b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQl1bnNpZ25lZCBsb25nIHVzZXJfdmFkZHIsCisJCQkJdm9pZCAqZHN0LCB2b2lkICpzcmMsIGludCBsZW4pOworZXh0ZXJuIHZvaWQgY29weV9mcm9tX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJdW5zaWduZWQgbG9uZyB1c2VyX3ZhZGRyLAorCQkJCXZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgbGVuKTsKKworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzFmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TX0NIRUNLU1VNX0gKKyNkZWZpbmUgX0FTTV9OSU9TX0NIRUNLU1VNX0gKKworLyogVGFrZSB0aGVzZSBmcm9tIGxpYi9jaGVja3N1bS5jICovCitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHkoY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sCisJCQkJX193c3VtIHN1bSk7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisJCQkJCWludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqY3N1bV9lcnIpOworI2RlZmluZSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYywgZHN0LCBsZW4sIHN1bSkJXAorCWNzdW1fcGFydGlhbF9jb3B5KChzcmMpLCAoZHN0KSwgKGxlbiksIChzdW0pKQorCitleHRlcm4gX19zdW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKTsKK2V4dGVybiBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKTsKKworLyoKKyAqIEZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCisgKi8KK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImFkZAklMCwgJTEsICUwXG4iCisJCSJjbXBsdHUJcjgsICUwLCAlMVxuIgorCQkic3JsaQklMCwgJTAsIDE2XG4iCisJCSJhZGQJJTAsICUwLCByOFxuIgorCQkibm9yCSUwLCAlMCwgJTBcbiIKKwkJOiAiPXIiIChzdW0pCisJCTogInIiIChzdW0gPDwgMTYpLCAiMCIgKHN1bSkKKwkJOiAicjgiKTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikgc3VtOworfQorCisvKgorICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKKyAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCisgKi8KKyNkZWZpbmUgY3N1bV90Y3B1ZHBfbm9mb2xkIGNzdW1fdGNwdWRwX25vZm9sZAorc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCQl1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQlfX3dzdW0gc3VtKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiYWRkCSUwLCAlMSwgJTBcbiIKKwkJImNtcGx0dQlyOCwgJTAsICUxXG4iCisJCSJhZGQJJTAsICUwLCByOFxuIgkvKiBhZGQgY2FycnkgKi8KKwkJImFkZAklMCwgJTIsICUwXG4iCisJCSJjbXBsdHUJcjgsICUwLCAlMlxuIgorCQkiYWRkCSUwLCAlMCwgcjhcbiIJLyogYWRkIGNhcnJ5ICovCisJCSJhZGQJJTAsICUzLCAlMFxuIgorCQkiY21wbHR1CXI4LCAlMCwgJTNcbiIKKwkJImFkZAklMCwgJTAsIHI4XG4iCS8qIGFkZCBjYXJyeSAqLworCQk6ICI9ciIgKHN1bSksICI9ciIgKHNhZGRyKQorCQk6ICJyIiAoZGFkZHIpLCAiciIgKChudG9ocyhsZW4pIDw8IDE2KSArIChwcm90byAqIDI1NikpLAorCQkgICIwIiAoc3VtKSwKKwkJICAiMSIgKHNhZGRyKQorCQk6ICJyOCIpOworCisJcmV0dXJuIHN1bTsKK30KKworc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCQl1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtKSk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX05JT1NfQ0hFQ0tTVU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jbXB4Y2hnLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NtcHhjaGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTkzODcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9DTVBYQ0hHX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9DTVBYQ0hHX0gKKworI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisKKyNkZWZpbmUgeGNoZyhwdHIsIHgpCVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHgpLCAocHRyKSwgc2l6ZW9mKCoocHRyKSkpKQorCitzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CisjZGVmaW5lIF9feGcoeCkJCSgodm9sYXRpbGUgc3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0ciwKKwkJCQkJaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyB0bXAsIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCSJsZGIJJTAsICUyXG4iCisJCQkic3RiCSUxLCAlMlxuIgorCQkJOiAiPSZyIiAodG1wKQorCQkJOiAiciIgKHgpLCAibSIgKCpfX3hnKHB0cikpCisJCQk6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCSJsZGgJJTAsICUyXG4iCisJCQkic3RoCSUxLCAlMlxuIgorCQkJOiAiPSZyIiAodG1wKQorCQkJOiAiciIgKHgpLCAibSIgKCpfX3hnKHB0cikpCisJCQk6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCSJsZHcJJTAsICUyXG4iCisJCQkic3R3CSUxLCAlMlxuIgorCQkJOiAiPSZyIiAodG1wKQorCQkJOiAiciIgKHgpLCAibSIgKCpfX3hnKHB0cikpCisJCQk6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiB0bXA7Cit9CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jbXB4Y2hnLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY21weGNoZy1sb2NhbC5oPgorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9DTVBYQ0hHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vY3B1aW5mby5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jcHVpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4ZmNhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vY3B1aW5mby5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0NQVUlORk9fSAorI2RlZmluZSBfQVNNX05JT1MyX0NQVUlORk9fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGNwdWluZm8geworCS8qIENvcmUgQ1BVIGNvbmZpZ3VyYXRpb24gKi8KKwljaGFyIGNwdV9pbXBsWzEyXTsKKwl1MzIgY3B1X2Nsb2NrX2ZyZXE7CisJdTMyIG1tdTsKKwl1MzIgaGFzX2RpdjsKKwl1MzIgaGFzX211bDsKKwl1MzIgaGFzX211bHg7CisKKwkvKiBDUFUgY2FjaGVzICovCisJdTMyIGljYWNoZV9saW5lX3NpemU7CisJdTMyIGljYWNoZV9zaXplOworCXUzMiBkY2FjaGVfbGluZV9zaXplOworCXUzMiBkY2FjaGVfc2l6ZTsKKworCS8qIFRMQiAqLworCXUzMiB0bGJfcGlkX251bV9iaXRzOwkvKiBudW1iZXIgb2YgYml0cyB1c2VkIGZvciB0aGUgUElEIGluIFRMQk1JU0MgKi8KKwl1MzIgdGxiX251bV93YXlzOworCXUzMiB0bGJfbnVtX3dheXNfbG9nMjsKKwl1MzIgdGxiX251bV9lbnRyaWVzOworCXUzMiB0bGJfbnVtX2xpbmVzOworCXUzMiB0bGJfcHRyX3N6OworCisJLyogQWRkcmVzc2VzICovCisJdTMyIHJlc2V0X2FkZHI7CisJdTMyIGV4Y2VwdGlvbl9hZGRyOworCXUzMiBmYXN0X3RsYl9taXNzX2V4Y19hZGRyOworfTsKKworZXh0ZXJuIHN0cnVjdCBjcHVpbmZvIGNwdWluZm87CisKK2V4dGVybiB2b2lkIHNldHVwX2NwdWluZm8odm9pZCk7CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX0NQVUlORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9kZWxheS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OGU0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2RlbGF5LmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9ERUxBWV9ICisjZGVmaW5lIF9BU01fTklPUzJfREVMQVlfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZGVsYXkuaD4KKworLyogVW5kZWZpbmVkIGZ1bmN0aW9ucyB0byBnZXQgY29tcGlsZS10aW1lIGVycm9ycyAqLworZXh0ZXJuIHZvaWQgX19iYWRfdWRlbGF5KHZvaWQpOworZXh0ZXJuIHZvaWQgX19iYWRfbmRlbGF5KHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX0RFTEFZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTU2NzIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9ETUFfTUFQUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3N5bmNfZm9yX2RldmljZSh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCisJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9GUk9NX0RFVklDRToKKwkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdmFkZHIsCisJCQkodW5zaWduZWQgbG9uZykodmFkZHIgKyBzaXplKSk7CisJCWJyZWFrOworCWNhc2UgRE1BX1RPX0RFVklDRToKKwkJLyoKKwkJICogV2UganVzdCBuZWVkIHRvIGZsdXNoIHRoZSBjYWNoZXMgaGVyZSAsIGJ1dCBOaW9zMiBmbHVzaAorCQkgKiBpbnN0cnVjdGlvbiB3aWxsIGRvIGJvdGggd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlLgorCQkgKi8KKwljYXNlIERNQV9CSURJUkVDVElPTkFMOiAvKiBmbHVzaCBhbmQgaW52YWxpZGF0ZSAqLworCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdmFkZHIsCisJCQkodW5zaWduZWQgbG9uZykodmFkZHIgKyBzaXplKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3N5bmNfZm9yX2NwdSh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCisJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9CSURJUkVDVElPTkFMOgorCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyl2YWRkciwKKwkJCSh1bnNpZ25lZCBsb25nKSh2YWRkciArIHNpemUpKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKKyNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQorI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorCit2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpOworCit2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwKKwkJCQkJc2l6ZV90IHNpemUsCisJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJX19kbWFfc3luY19mb3JfZGV2aWNlKHB0ciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlyZXR1cm4gdmlydF90b19waHlzKHB0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworfQorCitleHRlcm4gaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKKwlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCitzdGF0aWMgaW5saW5lIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQorCQlyZXR1cm4gLUVJTzsKKworCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisqIGRtYV9hbGxvY19ub25jb2hlcmVudCgpIHJldHVybnMgbm9uLWNhY2hlYWJsZSBtZW1vcnksIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0bworKiBkbyBhbnkgZmx1c2hpbmcgaGVyZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCisJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cit9CisKKy8qIGRyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jICovCitleHRlcm4gaW50IGRtYV9jb21tb25fbW1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQl2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBkbWFfY29tbW9uX2dldF9zZ3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNnX3RhYmxlICpzZ3QsCisJCXZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQlzaXplX3Qgc2l6ZSk7CisKKyNkZWZpbmUgZG1hX21tYXBfY29oZXJlbnQoZCwgdiwgYywgaCwgcykgZG1hX2NvbW1vbl9tbWFwKGQsIHYsIGMsIGgsIHMpCisjZGVmaW5lIGRtYV9nZXRfc2d0YWJsZShkLCB0LCB2LCBoLCBzKSBkbWFfY29tbW9uX2dldF9zZ3RhYmxlKGQsIHQsIHYsIGgsIHMpCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDY1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9FTEZfSAorI2RlZmluZSBfQVNNX05JT1MyX0VMRl9ICisKKyNpbmNsdWRlIDx1YXBpL2FzbS9lbGYuaD4KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNX0FMVEVSQV9OSU9TMikKKworI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCisKKyNkZWZpbmUgQ09SRV9EVU1QX1VTRV9SRUdTRVQKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KKworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UJCTB4RDAwMDAwMDBVTAorCisvKiByZWdzIGlzIHN0cnVjdCBwdF9yZWdzLCBwcl9yZWcgaXMgZWxmX2dyZWdzZXRfdCAod2hpY2ggaXMKKyAgIG5vdyBzdHJ1Y3RfdXNlcl9yZWdzLCB0aGV5IGFyZSBkaWZmZXJlbnQpICovCisKKyNkZWZpbmUgQVJDSF9IQVNfU0VUVVBfQURESVRJT05BTF9QQUdFUwkxCitzdHJ1Y3QgbGludXhfYmlucHJtOworZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwlpbnQgdXNlc19pbnRlcnApOworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQkJCQlcCit7IGRvIHsJCQkJCQkJCQlcCisJLyogQmxlZWNoLiAqLwkJCQkJCQlcCisJcHJfcmVnWzBdICA9IHJlZ3MtPnI4OwkJCQkJCVwKKwlwcl9yZWdbMV0gID0gcmVncy0+cjk7CQkJCQkJXAorCXByX3JlZ1syXSAgPSByZWdzLT5yMTA7CQkJCQkJXAorCXByX3JlZ1szXSAgPSByZWdzLT5yMTE7CQkJCQkJXAorCXByX3JlZ1s0XSAgPSByZWdzLT5yMTI7CQkJCQkJXAorCXByX3JlZ1s1XSAgPSByZWdzLT5yMTM7CQkJCQkJXAorCXByX3JlZ1s2XSAgPSByZWdzLT5yMTQ7CQkJCQkJXAorCXByX3JlZ1s3XSAgPSByZWdzLT5yMTU7CQkJCQkJXAorCXByX3JlZ1s4XSAgPSByZWdzLT5yMTsJCQkJCQlcCisJcHJfcmVnWzldICA9IHJlZ3MtPnIyOwkJCQkJCVwKKwlwcl9yZWdbMTBdID0gcmVncy0+cjM7CQkJCQkJXAorCXByX3JlZ1sxMV0gPSByZWdzLT5yNDsJCQkJCQlcCisJcHJfcmVnWzEyXSA9IHJlZ3MtPnI1OwkJCQkJCVwKKwlwcl9yZWdbMTNdID0gcmVncy0+cjY7CQkJCQkJXAorCXByX3JlZ1sxNF0gPSByZWdzLT5yNzsJCQkJCQlcCisJcHJfcmVnWzE1XSA9IHJlZ3MtPm9yaWdfcjI7CQkJCQlcCisJcHJfcmVnWzE2XSA9IHJlZ3MtPnJhOwkJCQkJCVwKKwlwcl9yZWdbMTddID0gcmVncy0+ZnA7CQkJCQkJXAorCXByX3JlZ1sxOF0gPSByZWdzLT5zcDsJCQkJCQlcCisJcHJfcmVnWzE5XSA9IHJlZ3MtPmdwOwkJCQkJCVwKKwlwcl9yZWdbMjBdID0gcmVncy0+ZXN0YXR1czsJCQkJCVwKKwlwcl9yZWdbMjFdID0gcmVncy0+ZWE7CQkJCQkJXAorCXByX3JlZ1syMl0gPSByZWdzLT5vcmlnX3I3OwkJCQkJXAorCXsJCQkJCQkJCVwKKwkJc3RydWN0IHN3aXRjaF9zdGFjayAqc3cgPSAoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKilyZWdzKSAtIDE7IFwKKwkJcHJfcmVnWzIzXSA9IHN3LT5yMTY7CQkJCQlcCisJCXByX3JlZ1syNF0gPSBzdy0+cjE3OwkJCQkJXAorCQlwcl9yZWdbMjVdID0gc3ctPnIxODsJCQkJCVwKKwkJcHJfcmVnWzI2XSA9IHN3LT5yMTk7CQkJCQlcCisJCXByX3JlZ1syN10gPSBzdy0+cjIwOwkJCQkJXAorCQlwcl9yZWdbMjhdID0gc3ctPnIyMTsJCQkJCVwKKwkJcHJfcmVnWzI5XSA9IHN3LT5yMjI7CQkJCQlcCisJCXByX3JlZ1szMF0gPSBzdy0+cjIzOwkJCQkJXAorCQlwcl9yZWdbMzFdID0gc3ctPmZwOwkJCQkJXAorCQlwcl9yZWdbMzJdID0gc3ctPmdwOwkJCQkJXAorCQlwcl9yZWdbMzNdID0gc3ctPnJhOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApOyB9CisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gICovCisKKyNkZWZpbmUgRUxGX0hXQ0FQCSgwKQorCisvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKKworI2VuZGlmIC8qIF9BU01fTklPUzJfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZW50cnkuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjM3ZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9lbnRyeS5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0VOVFJZX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9FTlRSWV9ICisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisKKy8qCisgKiBTdGFuZGFyZCBOaW9zMiBpbnRlcnJ1cHQgZW50cnkgYW5kIGV4aXQgbWFjcm9zLgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICovCisubWFjcm8gU0FWRV9BTEwKKwlyZGN0bAlyMjQsIGVzdGF0dXMKKwlhbmRpCXIyNCwgcjI0LCBFU1RBVFVTX0VVCisJYmVxCXIyNCwgcjAsIDFmIC8qIEluIHN1cGVydmlzb3IgbW9kZSwgYWxyZWFkeSBvbiBrZXJuZWwgc3RhY2sgKi8KKworCW1vdmlhCXIyNCwgX2N1cnJlbnRfdGhyZWFkCS8qIFN3aXRjaCB0byBjdXJyZW50IGtlcm5lbCBzdGFjayAqLworCWxkdwlyMjQsIDAocjI0KQkJLyogdXNpbmcgdGhlIHRocmVhZF9pbmZvICovCisJYWRkaQlyMjQsIHIyNCwgVEhSRUFEX1NJWkUtUFRfUkVHU19TSVpFCisJc3R3CXNwLCBQVF9TUChyMjQpCQkvKiBTYXZlIHVzZXIgc3RhY2sgYmVmb3JlIGNoYW5naW5nICovCisJbW92CXNwLCByMjQKKwlicgkyZgorCisxIDoJbW92CXIyNCwgc3AKKwlhZGRpCXNwLCBzcCwgLVBUX1JFR1NfU0laRQkvKiBCYWNrdXAgdGhlIGtlcm5lbCBzdGFjayBwb2ludGVyICovCisJc3R3CXIyNCwgUFRfU1Aoc3ApCisyIDoJc3R3CXIxLCBQVF9SMShzcCkKKwlzdHcJcjIsIFBUX1IyKHNwKQorCXN0dwlyMywgUFRfUjMoc3ApCisJc3R3CXI0LCBQVF9SNChzcCkKKwlzdHcJcjUsIFBUX1I1KHNwKQorCXN0dwlyNiwgUFRfUjYoc3ApCisJc3R3CXI3LCBQVF9SNyhzcCkKKwlzdHcJcjgsIFBUX1I4KHNwKQorCXN0dwlyOSwgUFRfUjkoc3ApCisJc3R3CXIxMCwgUFRfUjEwKHNwKQorCXN0dwlyMTEsIFBUX1IxMShzcCkKKwlzdHcJcjEyLCBQVF9SMTIoc3ApCisJc3R3CXIxMywgUFRfUjEzKHNwKQorCXN0dwlyMTQsIFBUX1IxNChzcCkKKwlzdHcJcjE1LCBQVF9SMTUoc3ApCisJc3R3CXIyLCBQVF9PUklHX1IyKHNwKQorCXN0dwlyNywgUFRfT1JJR19SNyhzcCkKKworCXN0dwlyYSwgUFRfUkEoc3ApCisJc3R3CWZwLCBQVF9GUChzcCkKKwlzdHcJZ3AsIFBUX0dQKHNwKQorCXJkY3RsCXIyNCwgZXN0YXR1cworCXN0dwlyMjQsIFBUX0VTVEFUVVMoc3ApCisJc3R3CWVhLCBQVF9FQShzcCkKKy5lbmRtCisKKy5tYWNybyBSRVNUT1JFX0FMTAorCWxkdwlyMSwgUFRfUjEoc3ApCQkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLworCWxkdwlyMiwgUFRfUjIoc3ApCisJbGR3CXIzLCBQVF9SMyhzcCkKKwlsZHcJcjQsIFBUX1I0KHNwKQorCWxkdwlyNSwgUFRfUjUoc3ApCisJbGR3CXI2LCBQVF9SNihzcCkKKwlsZHcJcjcsIFBUX1I3KHNwKQorCWxkdwlyOCwgUFRfUjgoc3ApCisJbGR3CXI5LCBQVF9SOShzcCkKKwlsZHcJcjEwLCBQVF9SMTAoc3ApCisJbGR3CXIxMSwgUFRfUjExKHNwKQorCWxkdwlyMTIsIFBUX1IxMihzcCkKKwlsZHcJcjEzLCBQVF9SMTMoc3ApCisJbGR3CXIxNCwgUFRfUjE0KHNwKQorCWxkdwlyMTUsIFBUX1IxNShzcCkKKwlsZHcJcmEsIFBUX1JBKHNwKQorCWxkdwlmcCwgUFRfRlAoc3ApCisJbGR3CWdwLCBQVF9HUChzcCkKKwlsZHcJcjI0LCBQVF9FU1RBVFVTKHNwKQorCXdyY3RsCWVzdGF0dXMsIHIyNAorCWxkdwllYSwgUFRfRUEoc3ApCisJbGR3CXNwLCBQVF9TUChzcCkJCS8qIFJlc3RvcmUgc3AgbGFzdCAqLworLmVuZG0KKworLm1hY3JvCVNBVkVfU1dJVENIX1NUQUNLCisJYWRkaQlzcCwgc3AsIC1TV0lUQ0hfU1RBQ0tfU0laRQorCXN0dwlyMTYsIFNXX1IxNihzcCkKKwlzdHcJcjE3LCBTV19SMTcoc3ApCisJc3R3CXIxOCwgU1dfUjE4KHNwKQorCXN0dwlyMTksIFNXX1IxOShzcCkKKwlzdHcJcjIwLCBTV19SMjAoc3ApCisJc3R3CXIyMSwgU1dfUjIxKHNwKQorCXN0dwlyMjIsIFNXX1IyMihzcCkKKwlzdHcJcjIzLCBTV19SMjMoc3ApCisJc3R3CWZwLCBTV19GUChzcCkKKwlzdHcJZ3AsIFNXX0dQKHNwKQorCXN0dwlyYSwgU1dfUkEoc3ApCisuZW5kbQorCisubWFjcm8JUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlsZHcJcjE2LCBTV19SMTYoc3ApCisJbGR3CXIxNywgU1dfUjE3KHNwKQorCWxkdwlyMTgsIFNXX1IxOChzcCkKKwlsZHcJcjE5LCBTV19SMTkoc3ApCisJbGR3CXIyMCwgU1dfUjIwKHNwKQorCWxkdwlyMjEsIFNXX1IyMShzcCkKKwlsZHcJcjIyLCBTV19SMjIoc3ApCisJbGR3CXIyMywgU1dfUjIzKHNwKQorCWxkdwlmcCwgU1dfRlAoc3ApCisJbGR3CWdwLCBTV19HUChzcCkKKwlsZHcJcmEsIFNXX1JBKHNwKQorCWFkZGkJc3AsIHNwLCBTV0lUQ0hfU1RBQ0tfU0laRQorLmVuZG0KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9BU01fTklPUzJfRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMDJiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9JT19ICisjZGVmaW5lIF9BU01fTklPUzJfSU9fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1iaXRzLmg+CisKKy8qIFBDSSBpcyBub3Qgc3VwcG9ydGVkIGluIG5pb3MyLCBzZXQgdGhpcyB0byAwLiAqLworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAwCisKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKQlyZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpCXJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikJcmVhZGwoYWRkcikKKworI2RlZmluZSB3cml0ZWJfcmVsYXhlZCh4LCBhZGRyKQl3cml0ZWIoeCwgYWRkcikKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQoeCwgYWRkcikJd3JpdGV3KHgsIGFkZHIpCisjZGVmaW5lIHdyaXRlbF9yZWxheGVkKHgsIGFkZHIpCXdyaXRlbCh4LCBhZGRyKQorCitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJdW5zaWduZWQgbG9uZyBjYWNoZWZsYWcpOworZXh0ZXJuIHZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLAorCQkJCQkJdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19pb3VubWFwKGFkZHIpOworfQorCisvKiBQYWdlcyB0byBwaHlzaWNhbCBhZGRyZXNzLi4uICovCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQl2aXJ0X3RvX3BoeXMocGFnZV90b192aXJ0KHBhZ2UpKQorI2RlZmluZSBwYWdlX3RvX2J1cyhwYWdlKQlwYWdlX3RvX3ZpcnQocGFnZSkKKworLyogTWFjcm9zIHVzZWQgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBtYXBwaW5ncy4gKi8KKyNkZWZpbmUgcGh5c190b192aXJ0KHZhZGRyKQlcCisJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh2YWRkcikgfCBDT05GSUdfTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFKSkKKy8qIENsZWFyIHRvcCAzIGJpdHMgKi8KKyNkZWZpbmUgdmlydF90b19waHlzKHZhZGRyKQlcCisJKCh1bnNpZ25lZCBsb25nKSgodW5zaWduZWQgbG9uZykodmFkZHIpICYgfjB4RTAwMDAwMDApKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW8uaD4KKworI2VuZGlmIC8qIF9BU01fTklPUzJfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0MGZkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfSVJRX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9JUlFfSAorCisjZGVmaW5lIE5JT1MyX0NQVV9OUl9JUlFTCTMyCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lycWZsYWdzLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhYjkyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworI2lmbmRlZiBfQVNNX0lSUUZMQUdTX0gKKyNkZWZpbmUgX0FTTV9JUlFGTEFHU19ICisKKyNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhcmNoX2xvY2FsX3NhdmVfZmxhZ3Modm9pZCkKK3sKKwlyZXR1cm4gUkRDVEwoQ1RMX1NUQVRVUyk7Cit9CisKKy8qCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBBTEwgc3RhdHVzIHJlZ2lzdGVyIGZsYWdzLCBub3Qgb25seSB0aGUgaW50ZXJydXB0CisgKiBtYXNrIGZsYWcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2xvY2FsX2lycV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJV1JDVEwoQ1RMX1NUQVRVUywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmbGFncyA9IGFyY2hfbG9jYWxfc2F2ZV9mbGFncygpOworCWFyY2hfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MgJiB+U1RBVFVTX1BJRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2xvY2FsX2lycV9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZmxhZ3MgPSBhcmNoX2xvY2FsX3NhdmVfZmxhZ3MoKTsKKwlhcmNoX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzIHwgU1RBVFVTX1BJRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaXJxc19kaXNhYmxlZF9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiAoZmxhZ3MgJiBTVEFUVVNfUElFKSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcmNoX2lycXNfZGlzYWJsZWQodm9pZCkKK3sKKwlyZXR1cm4gYXJjaF9pcnFzX2Rpc2FibGVkX2ZsYWdzKGFyY2hfbG9jYWxfc2F2ZV9mbGFncygpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfbG9jYWxfaXJxX3NhdmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZmxhZ3MgPSBhcmNoX2xvY2FsX3NhdmVfZmxhZ3MoKTsKKwlhcmNoX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzICYgflNUQVRVU19QSUUpOworCXJldHVybiBmbGFnczsKK30KKworI2VuZGlmIC8qIF9BU01fSVJRRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9saW5rYWdlLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGM2ZGVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9saW5rYWdlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0xJTktBR0VfSAorI2RlZmluZSBfQVNNX05JT1MyX0xJTktBR0VfSAorCisvKiBUaGlzIGZpbGUgaXMgcmVxdWlyZWQgYnkgaW5jbHVkZS9saW51eC9saW5rYWdlLmggKi8KKyNkZWZpbmUgX19BTElHTiAuYWxpZ24gNAorI2RlZmluZSBfX0FMSUdOX1NUUiAiLmFsaWduIDQiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDljMGIxMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbW11LmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9NTVVfSAorI2RlZmluZSBfQVNNX05JT1MyX01NVV9ICisKKy8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X3Q7CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0YjRiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqCisgKiBiYXNlZCBvbiBNSVBTIGFzbS9tbXVfY29udGV4dC5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9NTVVfQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbV9ob29rcy5oPgorCitleHRlcm4gdm9pZCBtbXVfY29udGV4dF9pbml0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3BpZF9mcm9tX2NvbnRleHQobW1fY29udGV4dF90ICpjdHgpOworCisvKgorICogRm9yIHRoZSBmYXN0IHRsYiBtaXNzIGhhbmRsZXJzLCB3ZSBrZWVwIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBwZ2QuCisgKiBwcm9jZXNzb3IuCisgKi8KK2V4dGVybiBwZ2RfdCAqcGdkX2N1cnJlbnQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBjb250ZXh0IHJlbGF0ZWQgaW5mbyBmb3IgYSBuZXcgbW1fc3RydWN0IGluc3RhbmNlLgorICoKKyAqIFNldCBhbGwgbmV3IGNvbnRleHRzIHRvIDAsIHRoYXQgd2F5IHRoZSBnZW5lcmF0aW9uIHdpbGwgbmV2ZXIgbWF0Y2gKKyAqIHRoZSBjdXJyZW50bHkgcnVubmluZyBnZW5lcmF0aW9uIHdoZW4gdGhpcyBjb250ZXh0IGlzIHN3aXRjaGVkIGluLgorICovCitzdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwltbS0+Y29udGV4dCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEZXN0cm95IGNvbnRleHQgcmVsYXRlZCBpbmZvIGZvciBhbiBtbV9zdHJ1Y3QgdGhhdCBpcyBhYm91dAorICogdG8gYmUgcHV0IHRvIHJlc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKK3ZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRlYWN0aXZhdGVfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKKy8qCisgKiBBZnRlciB3ZSBoYXZlIHNldCBjdXJyZW50LT5tbSB0byBhIG5ldyB2YWx1ZSwgdGhpcyBhY3RpdmF0ZXMKKyAqIHRoZSBjb250ZXh0IGZvciB0aGUgbmV3IG1tIHNvIHdlIHNlZSB0aGUgbmV3IG1hcHBpbmdzLgorICovCit2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpOworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL211dGV4LmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2MTAxYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbXV0ZXguaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmg+CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMzJkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBNTVUgc3VwcG9ydCBiYXNlZCBvbiBhc20vcGFnZS5oIGZyb20gbWlwcyB3aGljaCBpczoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAxOTk5LCAyMDAwLCAwMyBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1BBR0VfSAorI2RlZmluZSBfQVNNX05JT1MyX1BBR0VfSAorCisjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKworLyoKKyAqIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplCisgKi8KKyNkZWZpbmUgUEFHRV9TSElGVAkxMgorI2RlZmluZSBQQUdFX1NJWkUJKF9BQygxLCBVTCkgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRSAtIDEpKQorCisvKgorICogUEFHRV9PRkZTRVQgLS0gdGhlIGZpcnN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2Ugb2YgbWVtb3J5LgorICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUCVwKKwkoQ09ORklHX05JT1MyX01FTV9CQVNFICsgQ09ORklHX05JT1MyX0tFUk5FTF9SRUdJT05fQkFTRSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFRoaXMgZ2l2ZXMgdGhlIHBoeXNpY2FsIFJBTSBvZmZzZXQuCisgKi8KKyNkZWZpbmUgUEhZU19PRkZTRVQJCUNPTkZJR19OSU9TMl9NRU1fQkFTRQorCisvKgorICogSXQncyBub3JtYWxseSBkZWZpbmVkIG9ubHkgZm9yIEZMQVRNRU0gY29uZmlnIGJ1dCBpdCdzCisgKiB1c2VkIGluIG91ciBlYXJseSBtZW0gaW5pdCBjb2RlIGZvciBhbGwgbWVtb3J5IG1vZGVscy4KKyAqIFNvIGFsd2F5cyBkZWZpbmUgaXQuCisgKi8KKyNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQlQRk5fVVAoUEhZU19PRkZTRVQpCisKKyNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHBhZ2UpLCAwLCBQQUdFX1NJWkUpCisjZGVmaW5lIGNvcHlfcGFnZSh0bywgZnJvbSkJbWVtY3B5KCh0byksIChmcm9tKSwgUEFHRV9TSVpFKQorCitzdHJ1Y3QgcGFnZTsKKworZXh0ZXJuIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnZ0bywgdm9pZCAqdmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkJc3RydWN0IHBhZ2UgKnRvKTsKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2UgdXNlIG9mIEMgdHlwZS1jaGVja2luZy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OworCisjZGVmaW5lIHB0ZV92YWwoeCkJKCh4KS5wdGUpCisjZGVmaW5lIHBnZF92YWwoeCkJKCh4KS5wZ2QpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCisKKyNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSkKKyNkZWZpbmUgX19wZ2QoeCkJKChwZ2RfdCkgeyAoeCkgfSkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2VuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9zaXplOworCitleHRlcm4gc3RydWN0IHBhZ2UgKm1lbV9tYXA7CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyMgZGVmaW5lIF9fcGEoeCkJCVwKKwkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUEFHRV9PRkZTRVQgKyBQSFlTX09GRlNFVCkKKyMgZGVmaW5lIF9fdmEoeCkJCVwKKwkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpICsgUEFHRV9PRkZTRVQgLSBQSFlTX09GRlNFVCkpCisKKyNkZWZpbmUgcGFnZV90b192aXJ0KHBhZ2UpCVwKKwkoKCgocGFnZSkgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKSArIFBBR0VfT0ZGU0VUKQorCisjIGRlZmluZSBwZm5fdG9fa2FkZHIocGZuKQlfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpCisjIGRlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pID49IEFSQ0hfUEZOX09GRlNFVCAmJglcCisJCQkJCShwZm4pIDwgbWF4X21hcG5yKQorCisjIGRlZmluZSB2aXJ0X3RvX3BhZ2UodmFkZHIpCXBmbl90b19wYWdlKFBGTl9ET1dOKHZpcnRfdG9fcGh5cyh2YWRkcikpKQorIyBkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKHZhZGRyKQlwZm5fdmFsaWQoUEZOX0RPV04odmlydF90b19waHlzKHZhZGRyKSkpCisKKyMgZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgXAorCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjIGRlZmluZSBVTkNBQ19BRERSKGFkZHIpCVwKKwkoKHZvaWQgKikoKHVuc2lnbmVkKShhZGRyKSB8IENPTkZJR19OSU9TMl9JT19SRUdJT05fQkFTRSkpCisjIGRlZmluZSBDQUNfQUREUihhZGRyKQkJXAorCSgodm9pZCAqKSgoKHVuc2lnbmVkKShhZGRyKSAmIH5DT05GSUdfTklPUzJfSU9fUkVHSU9OX0JBU0UpIHwJXAorCQlDT05GSUdfTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFKSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ2V0b3JkZXIuaD4KKworI2VuZGlmIC8qIF9BU01fTklPUzJfUEFHRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMjk4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IC0gMjAwMSwgMjAwMyBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1BHQUxMT0NfSAorI2RlZmluZSBfQVNNX05JT1MyX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCisJcHRlX3QgKnB0ZSkKK3sKKwlzZXRfcG1kKHBtZCwgX19wbWQoKHVuc2lnbmVkIGxvbmcpcHRlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCisJcGd0YWJsZV90IHB0ZSkKK3sKKwlzZXRfcG1kKHBtZCwgX19wbWQoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHB0ZSkpKTsKK30KKyNkZWZpbmUgcG1kX3BndGFibGUocG1kKSBwbWRfcGFnZShwbWQpCisKKy8qCisgKiBJbml0aWFsaXplIGEgbmV3IHBtZCB0YWJsZSB3aXRoIGludmFsaWQgcG9pbnRlcnMuCisgKi8KK2V4dGVybiB2b2lkIHBtZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSwgdW5zaWduZWQgbG9uZyBwYWdldGFibGUpOworCitleHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKK3sKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBnZCwgUEdEX09SREVSKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXB0ZV90ICpwdGU7CisKKwlwdGUgPSAocHRlX3QgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPLAorCQkJCQlQVEVfT1JERVIpOworCisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IHBhZ2UgKnB0ZTsKKworCXB0ZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQsIFBURV9PUkRFUik7CisJaWYgKHB0ZSkgeworCQlpZiAoIXBndGFibGVfcGFnZV9jdG9yKHB0ZSkpIHsKKwkJCV9fZnJlZV9wYWdlKHB0ZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQljbGVhcl9oaWdocGFnZShwdGUpOworCX0KKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdGVfdCAqcHRlKQoreworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcHRlLCBQVEVfT1JERVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlICpwdGUpCit7CisJcGd0YWJsZV9wYWdlX2R0b3IocHRlKTsKKwlfX2ZyZWVfcGFnZXMocHRlLCBQVEVfT1JERVIpOworfQorCisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKQkJCQlcCisJZG8gewkJCQkJCQlcCisJCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7CQkJCVwKKwkJdGxiX3JlbW92ZV9wYWdlKCh0bGIpLCAocHRlKSk7CQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOWU3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9QR1RBQkxFX0JJVFNfSAorI2RlZmluZSBfQVNNX05JT1MyX1BHVEFCTEVfQklUU19ICisKKy8qCisgKiBUaGVzZSBhcmUgYWN0dWFsIGhhcmR3YXJlIGRlZmluZWQgcHJvdGVjdGlvbiBiaXRzIGluIHRoZSB0bGJhY2MgcmVnaXN0ZXIKKyAqIHdoaWNoIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKiAzMSAzMCAuLi4gMjYgMjUgMjQgMjMgMjIgMjEgMjAgMTkgMTggLi4uICAxICAwCisgKiBpZ25vcmVkLi4uLi4uLi4gIEMgIFIgIFcgIFggIEcgUEZOLi4uLi4uLi4uLi4uCisgKi8KKyNkZWZpbmUgX1BBR0VfR0xPQkFMCSgxPDwyMCkKKyNkZWZpbmUgX1BBR0VfRVhFQwkoMTw8MjEpCisjZGVmaW5lIF9QQUdFX1dSSVRFCSgxPDwyMikKKyNkZWZpbmUgX1BBR0VfUkVBRAkoMTw8MjMpCisjZGVmaW5lIF9QQUdFX0NBQ0hFRAkoMTw8MjQpCS8qIEM6IGRhdGEgYWNjZXNzIGNhY2hlYWJsZSAqLworCisvKgorICogU29mdHdhcmUgZGVmaW5lZCBiaXRzLiBUaGV5IGFyZSBpZ25vcmVkIGJ5IHRoZSBoYXJkd2FyZSBhbmQgYWx3YXlzIHJlYWQgYmFjaworICogYXMgemVybywgYnV0IGNhbiBiZSB3cml0dGVuIGFzIG5vbi16ZXJvLgorICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJKDE8PDI1KQkvKiBQVEUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkoMTw8MjYpCS8qIHBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkoMTw8MjcpCS8qIGRpcnR5IHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkoMTw8MjgpCS8qIFBURSB1c2VkIGZvciBmaWxlIG1hcHBpbmcgb3Igc3dhcCAqLworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9QR1RBQkxFX0JJVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2JhZmZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICoKKyAqIEJhc2VkIG9uIGFzbS9wZ3RhYmxlLTMyLmggZnJvbSBtaXBzIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAyMDAwLCAyMDAzIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfUEdUQUJMRV9ICisjZGVmaW5lIF9BU01fTklPUzJfUEdUQUJMRV9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWJpdHMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+CisKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKworI2RlZmluZSBWTUFMTE9DX1NUQVJUCQlDT05GSUdfTklPUzJfS0VSTkVMX01NVV9SRUdJT05fQkFTRQorI2RlZmluZSBWTUFMTE9DX0VORAkJKENPTkZJR19OSU9TMl9LRVJORUxfUkVHSU9OX0JBU0UgLSAxKQorCitzdHJ1Y3QgbW1fc3RydWN0OworCisvKiBIZWxwZXIgbWFjcm8gKi8KKyNkZWZpbmUgTUtQKHgsIHcsIHIpIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9DQUNIRUQgfAkJXAorCQkJCSgoeCkgPyBfUEFHRV9FWEVDIDogMCkgfAkJXAorCQkJCSgocikgPyBfUEFHRV9SRUFEIDogMCkgfAkJXAorCQkJCSgodykgPyBfUEFHRV9XUklURSA6IDApKQorLyoKKyAqIFRoZXNlIGFyZSB0aGUgbWFjcm9zIHRoYXQgZ2VuZXJpYyBrZXJuZWwgY29kZSBuZWVkcworICogKHRvIHBvcHVsYXRlIHByb3RlY3Rpb25fbWFwW10pCisgKi8KKworLyogUmVtb3ZlIFcgYml0IG9uIHByaXZhdGUgcGFnZXMgZm9yIENPVyBzdXBwb3J0ICovCisjZGVmaW5lIF9fUDAwMAlNS1AoMCwgMCwgMCkKKyNkZWZpbmUgX19QMDAxCU1LUCgwLCAwLCAxKQorI2RlZmluZSBfX1AwMTAJTUtQKDAsIDAsIDApCS8qIENPVyAqLworI2RlZmluZSBfX1AwMTEJTUtQKDAsIDAsIDEpCS8qIENPVyAqLworI2RlZmluZSBfX1AxMDAJTUtQKDEsIDAsIDApCisjZGVmaW5lIF9fUDEwMQlNS1AoMSwgMCwgMSkKKyNkZWZpbmUgX19QMTEwCU1LUCgxLCAwLCAwKQkvKiBDT1cgKi8KKyNkZWZpbmUgX19QMTExCU1LUCgxLCAwLCAxKQkvKiBDT1cgKi8KKworLyogU2hhcmVkIHBhZ2VzIGNhbiBoYXZlIGV4YWN0IEhXIG1hcHBpbmcgKi8KKyNkZWZpbmUgX19TMDAwCU1LUCgwLCAwLCAwKQorI2RlZmluZSBfX1MwMDEJTUtQKDAsIDAsIDEpCisjZGVmaW5lIF9fUzAxMAlNS1AoMCwgMSwgMCkKKyNkZWZpbmUgX19TMDExCU1LUCgwLCAxLCAxKQorI2RlZmluZSBfX1MxMDAJTUtQKDEsIDAsIDApCisjZGVmaW5lIF9fUzEwMQlNS1AoMSwgMCwgMSkKKyNkZWZpbmUgX19TMTEwCU1LUCgxLCAxLCAwKQorI2RlZmluZSBfX1MxMTEJTUtQKDEsIDEsIDEpCisKKy8qIFVzZWQgYWxsIG92ZXIgdGhlIGtlcm5lbCAqLworI2RlZmluZSBQQUdFX0tFUk5FTCBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQ0FDSEVEIHwgX1BBR0VfUkVBRCB8IFwKKwkJCSAgICAgX1BBR0VfV1JJVEUgfCBfUEFHRV9FWEVDIHwgX1BBR0VfR0xPQkFMKQorCisjZGVmaW5lIFBBR0VfU0hBUkVEIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9DQUNIRUQgfCBfUEFHRV9SRUFEIHwgXAorCQkJICAgICBfUEFHRV9XUklURSB8IF9QQUdFX0FDQ0VTU0VEKQorCisjZGVmaW5lIFBBR0VfQ09QWSBNS1AoMCwgMCwgMSkKKworI2RlZmluZSBQR0RfT1JERVIJMAorI2RlZmluZSBQVEVfT1JERVIJMAorCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkoKFBBR0VfU0laRSA8PCBQR0RfT1JERVIpIC8gc2l6ZW9mKHBnZF90KSkKKyNkZWZpbmUgUFRSU19QRVJfUFRFCSgoUEFHRV9TSVpFIDw8IFBURV9PUkRFUikgLyBzaXplb2YocHRlX3QpKQorCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECVwKKwkoQ09ORklHX05JT1MyX0tFUk5FTF9NTVVfUkVHSU9OX0JBU0UgLyBQR0RJUl9TSVpFKQorCisjZGVmaW5lIFBHRElSX1NISUZUCTIyCisjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQorCisvKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07CisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQorCitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKK2V4dGVybiBwdGVfdCBpbnZhbGlkX3B0ZV90YWJsZVtQQUdFX1NJWkUvc2l6ZW9mKHB0ZV90KV07CisKKy8qCisgKiAocG1kcyBhcmUgZm9sZGVkIGludG8gcHVkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKKyAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwdHIsIHBtZF90IHBtZHZhbCkKK3sKKwlwbWRwdHItPnB1ZC5wZ2QucGdkID0gcG1kdmFsLnB1ZC5wZ2QucGdkOworfQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHIpCQkoKChhZGRyKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdEIC0gMSkpCisjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHIpCSgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcikpCisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQlcCisJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfV1JJVEU7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQlcCisJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQlcCisJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJCVwKKwl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIDA7IH0KKworI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkIHBncHJvdF9ub25jYWNoZWQKKworc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwZ3Byb3Rfbm9uY2FjaGVkKHBncHJvdF90IF9wcm90KQoreworCXVuc2lnbmVkIGxvbmcgcHJvdCA9IHBncHJvdF92YWwoX3Byb3QpOworCisJcHJvdCAmPSB+X1BBR0VfQ0FDSEVEOworCisJcmV0dXJuIF9fcGdwcm90KHByb3QpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCit7CisJcmV0dXJuICEocHRlX3ZhbChwdGUpICYgfihfUEFHRV9HTE9CQUx8MHhmKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkJXAorCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQ7IH0KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KKyAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KKyAqLworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX1dSSVRFOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfRElSVFk7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfQUNDRVNTRUQ7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRFOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9ESVJUWTsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKQl7IHJldHVybiBwdGU7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyBtYXNrID0gX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgX1BBR0VfRVhFQzsKKworCXB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiB+bWFzaykgfCAocGdwcm90X3ZhbChuZXdwcm90KSAmIG1hc2spOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9wcmVzZW50KHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gKHBtZF92YWwocG1kKSAhPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGUpCisJCQkmJiAocG1kX3ZhbChwbWQpICE9IDBVTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfY2xlYXIocG1kX3QgKnBtZHApCit7CisJcG1kX3ZhbCgqcG1kcCkgPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7Cit9CisKKyNkZWZpbmUgcHRlX3BmbihwdGUpCQkocHRlX3ZhbChwdGUpICYgMHhmZmZmZikKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCShfX3B0ZShwZm4gfCBwZ3Byb3RfdmFsKHByb3QpKSkKKyNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJKHBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkpCisKKy8qCisgKiBTdG9yZSBhIGxpbnV4IFBURSBpbnRvIHRoZSBsaW51eCBwYWdlIHRhYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKQoreworCSpwdGVwID0gcHRldmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHBhZGRyID0gcGFnZV90b192aXJ0KHB0ZV9wYWdlKHB0ZXZhbCkpOworCisJZmx1c2hfZGNhY2hlX3JhbmdlKHBhZGRyLCBwYWRkciArIFBBR0VfU0laRSk7CisJc2V0X3B0ZShwdGVwLCBwdGV2YWwpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbWRfbm9uZShwbWRfdCBwbWQpCit7CisJcmV0dXJuIChwbWRfdmFsKHBtZCkgPT0KKwkJKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlKSB8fCAocG1kX3ZhbChwbWQpID09IDBVTCk7Cit9CisKKyNkZWZpbmUgcG1kX2JhZChwbWQpCShwbWRfdmFsKHBtZCkgJiB+UEFHRV9NQVNLKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcHRlX3QgbnVsbDsKKworCXB0ZV92YWwobnVsbCkgPSAoYWRkciA+PiBQQUdFX1NISUZUKSAmIDB4ZjsKKworCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIG51bGwpOworCWZsdXNoX3RsYl9vbmUoYWRkcik7Cit9CisKKy8qCisgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAorICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KKyAqLworI2RlZmluZSBta19wdGUocGFnZSwgcHJvdCkJKHBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIHByb3QpKQorCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpCWRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisjZGVmaW5lIHBtZF9waHlzKHBtZCkJCXZpcnRfdG9fcGh5cygodm9pZCAqKXBtZF92YWwocG1kKSkKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKQkJKHBmbl90b19wYWdlKHBtZF9waHlzKHBtZCkgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHBtZF9wYWdlX3ZhZGRyKHBtZCkJcG1kX3ZhbChwbWQpCisKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyKQkJCVwKKwkoKHB0ZV90ICopIHBhZ2VfYWRkcmVzcyhwbWRfcGFnZSgqZGlyKSkgKwlcCisJICgoKGFkZHIpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcikJcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcikKKworLyogR2V0IHRoZSBhZGRyZXNzIHRvIHRoZSBQVEUgZm9yIGEgdmFkZHIgaW4gc3BlY2lmaWMgZGlyZWN0b3J5ICovCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcikJCQlcCisJKChwdGVfdCAqKSBwbWRfcGFnZV92YWRkcigqKGRpcikpICsJCVwKKwkgKCgoYWRkcikgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpKQorCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisJcHJfZXJyKCIlczolZDogYmFkIHB0ZSAlMDhseC5cbiIsIFwKKwkJX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkgXAorCXByX2VycigiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBcCisJCV9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKKworLyoKKyAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeSAobXVzdCBiZSAhcHRlX25vbmUocHRlKSAmJiAhcHRlX3ByZXNlbnQocHRlKQorICogJiYgIXB0ZV9maWxlKHB0ZSkpOgorICoKKyAqIDMxIDMwIDI5IDI4IDI3IDI2IDI1IDI0IDIzIDIyIDIxIDIwIDE5IDE4IC4uLiAgMSAgMAorICogIDAgIDAgIDAgIDAgdHlwZS4gIDAgIDAgIDAgIDAgIDAgIDAgb2Zmc2V0Li4uLi4uLi4uCisgKgorICogVGhpcyBnaXZlcyB1cyB1cCB0byAyKioyID0gNCBzd2FwIGZpbGVzIGFuZCAyKioyMCAqIDRLID0gNEcgcGVyIHN3YXAgZmlsZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIG9mZnNldCBmaWVsZCBpcyBhbHdheXMgbm9uLXplcm8sIHRodXMgIXB0ZV9ub25lKHB0ZSkgaXMgYWx3YXlzCisgKiB0cnVlLgorICovCisjZGVmaW5lIF9fc3dwX3R5cGUoc3dwKQkJKCgoc3dwKS52YWwgPj4gMjYpICYgMHgzKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoc3dwKQkoKHN3cCkudmFsICYgMHhmZmZmZikKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2ZmKQkoKHN3cF9lbnRyeV90KSB7ICgoKHR5cGUpICYgMHgzKSA8PCAyNikgXAorCQkJCQkJIHwgKChvZmYpICYgMHhmZmZmZikgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHN3cCkJKChwdGVfdCkgeyAoc3dwKS52YWwgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKworLyogRW5jb2RlIGFuZCBkZWNvZGUgYSBub25saW5lYXIgZmlsZSBtYXBwaW5nIGVudHJ5ICovCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI1CisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgJiAweDFmZmZmZmYpCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCV9fcHRlKCgob2ZmKSAmIDB4MWZmZmZmZikgfCBfUEFHRV9GSUxFKQorCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkJKDEpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisKKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IG1tdV9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGUpOworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZDM0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgS2VuIEhpbGwgKGtoaWxsQG1pY3JvdHJvbml4LmNvbSkKKyAqICAgICAgICAgICAgICAgICAgICBWaWMgUGhpbGxpcHMgKHZpY0BtaWNyb3Ryb25peC5jb20pCisgKgorICogYmFzZWQgb24gU1BBUkMgYXNtL3Byb2Nlc3Nvcl8zMi5oIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBEYXZpZCBTLiBNaWxsZXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9QUk9DRVNTT1JfSAorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIE5JT1MyX0ZMQUdfS1RIUkVBRAkweDAwMDAwMDAxCS8qIHRhc2sgaXMgYSBrZXJuZWwgdGhyZWFkICovCisKKyNkZWZpbmUgTklPUzJfT1BfTk9QCQkweDE4ODNhCisjZGVmaW5lIE5JT1MyX09QX0JSRUFLCQkweDNkYTAzYQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFNUQUNLX1RPUAlUQVNLX1NJWkUKKyNkZWZpbmUgU1RBQ0tfVE9QX01BWAlTVEFDS19UT1AKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyogS3VzZXIgaGVscGVycyBpcyBtYXBwZWQgdG8gdGhpcyB1c2VyIHNwYWNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgS1VTRVJfQkFTRQkJMHgxMDAwCisjZGVmaW5lIEtVU0VSX1NJWkUJCShQQUdFX1NJWkUpCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgorICovCisjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgX19sYWJlbF9fIF9sOyBfbDogJiZfbDsgfSkKKworIyBkZWZpbmUgVEFTS19TSVpFCQkweDdGRkYwMDAwVUwKKyMgZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkoUEFHRV9BTElHTihUQVNLX1NJWkUgLyAzKSkKKworLyogVGhlIE5pb3MgcHJvY2Vzc29yIHNwZWNpZmljIHRocmVhZCBzdHJ1Y3QuICovCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJc3RydWN0IHB0X3JlZ3MgKmtyZWdzOworCisJLyogQ29udGV4dCBzd2l0Y2ggc2F2ZWQga2VybmVsIHN0YXRlLiAqLworCXVuc2lnbmVkIGxvbmcga3NwOworCXVuc2lnbmVkIGxvbmcga3BzcjsKK307CisKKyNkZWZpbmUgSU5JVF9NTUFQIFwKKwl7ICZpbml0X21tLCAoMCksICgwKSwgX19wZ3Byb3QoMHgwKSwgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB9CisKKyMgZGVmaW5lIElOSVRfVEhSRUFEIHsJCQlcCisJLmtyZWdzCT0gTlVMTCwJCQlcCisJLmtzcAk9IDAsCQkJXAorCS5rcHNyCT0gMCwJCQlcCit9CisKK2V4dGVybiB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBwYywKKwkJCXVuc2lnbmVkIGxvbmcgc3ApOworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKy8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLworc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKQoreworfQorCisvKiBGcmVlIGN1cnJlbnQgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyBldGMuLiAqLworc3RhdGljIGlubGluZSB2b2lkIGV4aXRfdGhyZWFkKHZvaWQpCit7Cit9CisKKy8qIFJldHVybiBzYXZlZCBQQyBvZiBhIGJsb2NrZWQgdGhyZWFkLiAqLworI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModHNrKQkoKHRzayktPnRocmVhZC5rcmVncy0+ZWEpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisvKiBQcmVwYXJlIHRvIGNvcHkgdGhyZWFkIHN0YXRlIC0gdW5sYXp5IGFsbCBsYXp5IHN0YXR1cyAqLworI2RlZmluZSBwcmVwYXJlX3RvX2NvcHkodHNrKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgdGFza19wdF9yZWdzKHApIFwKKwkoKHN0cnVjdCBwdF9yZWdzICopKFRIUkVBRF9TSVpFICsgdGFza19zdGFja19wYWdlKHApKSAtIDEpCisKKy8qIFVzZWQgYnkgcHJvY2ZzICovCisjZGVmaW5lIEtTVEtfRUlQKHRzaykJKCh0c2spLT50aHJlYWQua3JlZ3MtPmVhKQorI2RlZmluZSBLU1RLX0VTUCh0c2spCSgodHNrKS0+dGhyZWFkLmtyZWdzLT5zcCkKKworI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKKyNkZWZpbmUgY3B1X3JlbGF4X2xvd2xhdGVuY3koKSAgY3B1X3JlbGF4KCkKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYjFjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIGJhc2VkIG9uIG02OGsgYXNtL3Byb2Nlc3Nvci5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1BUUkFDRV9ICisjZGVmaW5lIF9BU01fTklPUzJfUFRSQUNFX0gKKworI2luY2x1ZGUgPHVhcGkvYXNtL3B0cmFjZS5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSB1c2VyX21vZGUocmVncykJKCgocmVncyktPmVzdGF0dXMgJiBFU1RBVFVTX0VVKSkKKworI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCSgocmVncyktPnJhKQorI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpCQlpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCisjZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5zcCkKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKKworI2RlZmluZSBjdXJyZW50X3B0X3JlZ3MoKSBcCisJKChzdHJ1Y3QgcHRfcmVncyAqKSgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkgKyBUSFJFQURfU0laRSlcCisJCS0gMSkKKworaW50IGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIodm9pZCk7Cit2b2lkIGRvX3N5c2NhbGxfdHJhY2VfZXhpdCh2b2lkKTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNX05JT1MyX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3JlZ2lzdGVycy5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTViY2UxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9yZWdpc3RlcnMuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9SRUdJU1RFUlNfSAorI2RlZmluZSBfQVNNX05JT1MyX1JFR0lTVEVSU19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL2NwdWluZm8uaD4KKyNlbmRpZgorCisvKiBjb250cm9sIHJlZ2lzdGVyIG51bWJlcnMgKi8KKyNkZWZpbmUgQ1RMX1NUQVRVUwkwCisjZGVmaW5lIENUTF9FU1RBVFVTCTEKKyNkZWZpbmUgQ1RMX0JTVEFUVVMJMgorI2RlZmluZSBDVExfSUVOQUJMRQkzCisjZGVmaW5lIENUTF9JUEVORElORwk0CisjZGVmaW5lIENUTF9DUFVJRAk1CisjZGVmaW5lIENUTF9SU1YxCTYKKyNkZWZpbmUgQ1RMX0VYQ0VQVElPTgk3CisjZGVmaW5lIENUTF9QVEVBRERSCTgKKyNkZWZpbmUgQ1RMX1RMQkFDQwk5CisjZGVmaW5lIENUTF9UTEJNSVNDCTEwCisjZGVmaW5lIENUTF9SU1YyCTExCisjZGVmaW5lIENUTF9CQURBRERSCTEyCisjZGVmaW5lIENUTF9DT05GSUcJMTMKKyNkZWZpbmUgQ1RMX01QVUJBU0UJMTQKKyNkZWZpbmUgQ1RMX01QVUFDQwkxNQorCisvKiBhY2Nlc3MgY29udHJvbCByZWdpc3RlcnMgdXNpbmcgR0NDIGJ1aWx0aW5zICovCisjZGVmaW5lIFJEQ1RMKHIpCV9fYnVpbHRpbl9yZGN0bChyKQorI2RlZmluZSBXUkNUTChyLCB2KQlfX2J1aWx0aW5fd3JjdGwociwgdikKKworLyogc3RhdHVzIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgU1RBVFVTX1BJRQkoMSA8PCAwKQkvKiBwcm9jZXNzb3IgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBTVEFUVVNfVQkoMSA8PCAxKQkvKiB1c2VyIG1vZGUgKi8KKyNkZWZpbmUgU1RBVFVTX0VICSgxIDw8IDIpCS8qIEV4Y2VwdGlvbiBtb2RlICovCisKKy8qIGVzdGF0dXMgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBFU1RBVFVTX0VQSUUJKDEgPDwgMCkJLyogcHJvY2Vzc29yIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgRVNUQVRVU19FVQkoMSA8PCAxKQkvKiB1c2VyIG1vZGUgKi8KKyNkZWZpbmUgRVNUQVRVU19FSAkoMSA8PCAyKQkvKiBFeGNlcHRpb24gbW9kZSAqLworCisvKiB0bGJtaXNjIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgVExCTUlTQ19QSURfU0hJRlQJNAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgVExCTUlTQ19QSURfTUFTSwkoKDFVTCA8PCBjcHVpbmZvLnRsYl9waWRfbnVtX2JpdHMpIC0gMSkKKyNlbmRpZgorI2RlZmluZSBUTEJNSVNDX1dBWV9NQVNLCTB4ZgorI2RlZmluZSBUTEJNSVNDX1dBWV9TSElGVAkyMAorCisjZGVmaW5lIFRMQk1JU0NfUElECShUTEJNSVNDX1BJRF9NQVNLIDw8IFRMQk1JU0NfUElEX1NISUZUKQkvKiBUTEIgUElEICovCisjZGVmaW5lIFRMQk1JU0NfV0UJKDEgPDwgMTgpCS8qIFRMQiB3cml0ZSBlbmFibGUgKi8KKyNkZWZpbmUgVExCTUlTQ19SRAkoMSA8PCAxOSkJLyogVExCIHJlYWQgKi8KKyNkZWZpbmUgVExCTUlTQ19XQVkJKFRMQk1JU0NfV0FZX01BU0sgPDwgVExCTUlTQ19XQVlfU0hJRlQpIC8qIFRMQiB3YXkgKi8KKworI2VuZGlmIC8qIF9BU01fTklPUzJfUkVHSVNURVJTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2JmOGNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1NFVFVQX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9TRVRVUF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZXR1cC5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2lmZGVmIF9fS0VSTkVMX18KKworZXh0ZXJuIGNoYXIgZXhjZXB0aW9uX2hhbmRsZXJfaG9va1tdOworZXh0ZXJuIGNoYXIgZmFzdF9oYW5kbGVyW107CitleHRlcm4gY2hhciBmYXN0X2hhbmRsZXJfZW5kW107CisKK2V4dGVybiB2b2lkIHBhZ2V0YWJsZV9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCBzZXR1cF9lYXJseV9wcmludGsodm9pZCk7CisKKyNlbmRpZi8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fTklPUzJfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zaWduYWwuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjZjExZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc2lnbmFsLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCBBbHRlcmEgQ29ycG9yYXRpb24gKEMpIDIwMTMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworI2lmbmRlZiBfTklPUzJfU0lHTkFMX0gKKyNkZWZpbmUgX05JT1MyX1NJR05BTF9ICisKKyNpbmNsdWRlIDx1YXBpL2FzbS9zaWduYWwuaD4KKworI2VuZGlmCS8qIF9OSU9TMl9TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkZDU3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3RyaW5nLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9TVFJJTkdfSAorI2RlZmluZSBfQVNNX05JT1MyX1NUUklOR19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCisKK2V4dGVybiB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBjb3VudCk7CitleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKmQsIGNvbnN0IHZvaWQgKnMsIHNpemVfdCBjb3VudCk7CitleHRlcm4gdm9pZCAqbWVtbW92ZSh2b2lkICpkLCBjb25zdCB2b2lkICpzLCBzaXplX3QgY291bnQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9TVFJJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3YjNmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9BU01fTklPUzJfU1dJVENIX1RPX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9TV0lUQ0hfVE9fSAorCisvKgorICogc3dpdGNoX3RvKG4pIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBwdHIsIGZpcnN0IGNoZWNraW5nIHRoYXQKKyAqIHB0ciBpc24ndCB0aGUgY3VycmVudCB0YXNrLCBpbiB3aGljaCBjYXNlIGl0IGRvZXMgbm90aGluZy4gIFRoaXMKKyAqIGFsc28gY2xlYXJzIHRoZSBUUy1mbGFnIGlmIHRoZSB0YXNrIHdlIHN3aXRjaGVkIHRvIGhhcyB1c2VkIHRoZQorICogbWF0aCBjby1wcm9jZXNzb3IgbGF0ZXN0LgorICovCisjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KQkJCVwKK3sJCQkJCQkJXAorCXZvaWQgKl9sYXN0OwkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJXAorCQkibW92CXI0LCAlMVxuIgkJCVwKKwkJIm1vdglyNSwgJTJcbiIJCQlcCisJCSJjYWxsCXJlc3VtZVxuIgkJCVwKKwkJIm1vdgklMCxyNFxuIgkJCVwKKwkJOiAiPXIiIChfbGFzdCkJCQkJXAorCQk6ICJyIiAocHJldiksICJyIiAobmV4dCkJCVwKKwkJOiAicjQiLCAicjUiLCAicjciLCAicjgiLCAicmEiKTsJXAorCShsYXN0KSA9IF9sYXN0OwkJCQkJXAorfQorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9TV0lUQ0hfVE9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGUyMjA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgQWx0ZXJhIENvcnBvcmF0aW9uIChDKSA8MjAxND4uIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX19BU01fTklPUzJfU1lTQ0FMTF9IX18KKyNkZWZpbmUgX19BU01fTklPUzJfU1lTQ0FMTF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIHJlZ3MtPnIyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9yb2xsYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+cjIgPSByZWdzLT5vcmlnX3IyOworCXJlZ3MtPnI3ID0gcmVncy0+b3JpZ19yNzsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X2Vycm9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+cjcgPyByZWdzLT5yMiA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5yMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlcnJvciwgbG9uZyB2YWwpCit7CisJaWYgKGVycm9yKSB7CisJCS8qIGVycm9yIDwgMCwgYnV0IG5pb3MyIHVzZXMgPiAwIHJldHVybiB2YWx1ZSAqLworCQlyZWdzLT5yMiA9IC1lcnJvcjsKKwkJcmVncy0+cjcgPSAxOworCX0gZWxzZSB7CisJCXJlZ3MtPnIyID0gdmFsOworCQlyZWdzLT5yNyA9IDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9nZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAorCXVuc2lnbmVkIGxvbmcgKmFyZ3MpCit7CisJQlVHX09OKGkgKyBuID4gNik7CisKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIDA6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yNDsKKwljYXNlIDE6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yNTsKKwljYXNlIDI6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yNjsKKwljYXNlIDM6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yNzsKKwljYXNlIDQ6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yODsKKwljYXNlIDU6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSphcmdzKysgPSByZWdzLT5yOTsKKwljYXNlIDY6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAorCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmFyZ3MpCit7CisJQlVHX09OKGkgKyBuID4gNik7CisKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIDA6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI0ID0gKmFyZ3MrKzsKKwljYXNlIDE6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI1ID0gKmFyZ3MrKzsKKwljYXNlIDI6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI2ID0gKmFyZ3MrKzsKKwljYXNlIDM6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI3ID0gKmFyZ3MrKzsKKwljYXNlIDQ6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI4ID0gKmFyZ3MrKzsKKwljYXNlIDU6CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCXJlZ3MtPnI5ID0gKmFyZ3MrKzsKKwljYXNlIDY6CisJCWlmICghbikKKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3N5c2NhbGxzLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0NWQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3lzY2FsbHMuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IEFsdGVyYSBDb3Jwb3JhdGlvbiAoQykgMjAxMy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisjaWZuZGVmIF9fQVNNX05JT1MyX1NZU0NBTExTX0gKKyNkZWZpbmUgX19BU01fTklPUzJfU1lTQ0FMTFNfSAorCitpbnQgc3lzX2NhY2hlZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQl1bnNpZ25lZCBpbnQgb3ApOworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3lzY2FsbHMuaD4KKworI2VuZGlmIC8qIF9fQVNNX05JT1MyX1NZU0NBTExTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI2NjU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogTmlvc0lJIGxvdy1sZXZlbCB0aHJlYWQgaW5mb3JtYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogQmFzZWQgb24gYXNtL3RocmVhZF9pbmZvX25vLmggZnJvbSBtNjhrIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9USFJFQURfSU5GT19ICisjZGVmaW5lIF9BU01fTklPUzJfVEhSRUFEX0lORk9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogU2l6ZSBvZiB0aGUga2VybmVsIHN0YWNrIGZvciBlYWNoIHByb2Nlc3MuCisgKi8KKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJMQorI2RlZmluZSBUSFJFQURfU0laRQkJODE5MiAvKiAyICogUEFHRV9TSVpFICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNlZzsKK30gbW1fc2VnbWVudF90OworCisvKgorICogbG93IGxldmVsIHRhc2sgZGF0YSB0aGF0IGVudHJ5LlMgbmVlZHMgaW1tZWRpYXRlIGFjY2VzcyB0bworICogLSB0aGlzIHN0cnVjdCBzaG91bGQgZml0IGVudGlyZWx5IGluc2lkZSBvZiBvbmUgY2FjaGUgbGluZQorICogLSB0aGlzIHN0cnVjdCBzaGFyZXMgdGhlIHN1cGVydmlzb3Igc3RhY2sgcGFnZXMKKyAqIC0gaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBjaGFuZ2VkLCB0aGUgYXNzZW1ibHkgY29uc3RhbnRzCisgKiAgIG11c3QgYWxzbyBiZSBjaGFuZ2VkCisgKi8KK3N0cnVjdCB0aHJlYWRfaW5mbyB7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwkJLyogbWFpbiB0YXNrIHN0cnVjdHVyZSAqLworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLworCV9fdTMyCQkJY3B1OwkJLyogY3VycmVudCBDUFUgKi8KKwlpbnQJCQlwcmVlbXB0X2NvdW50OwkvKiAwID0+IHByZWVtcHRhYmxlLDwwID0+IEJVRyAqLworCW1tX3NlZ21lbnRfdAkJYWRkcl9saW1pdDsJLyogdGhyZWFkIGFkZHJlc3Mgc3BhY2U6CisJCQkJCQkgIDAtMHg3RkZGRkZGRiBmb3IgdXNlci10aGVhZAorCQkJCQkJICAwLTB4RkZGRkZGRkYgZm9yIGtlcm5lbC10aHJlYWQKKwkJCQkJCSovCisJc3RydWN0IHJlc3RhcnRfYmxvY2sJcmVzdGFydF9ibG9jazsKKwlzdHJ1Y3QgcHRfcmVncwkJKnJlZ3M7Cit9OworCisvKgorICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBwcmVlbXB0X2NvdW50IG5lZWRzIHRvIGJlIDEgaW5pdGlhbGx5LCB1bnRpbCB0aGUgc2NoZWR1bGVyIGlzIGZ1bmN0aW9uYWwuCisgKi8KKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXAorewkJCQkJCVwKKwkudGFzawkJPSAmdHNrLAkJCVwKKwkuZXhlY19kb21haW4JPSAmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAorCS5mbGFncwkJPSAwLAkJCVwKKwkuY3B1CQk9IDAsCQkJXAorCS5wcmVlbXB0X2NvdW50CT0gSU5JVF9QUkVFTVBUX0NPVU5ULAlcCisJLmFkZHJfbGltaXQJPSBLRVJORUxfRFMsCQlcCisJLnJlc3RhcnRfYmxvY2sJPSB7CQkJXAorCQkuZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwsCVwKKwl9LAkJCQkJXAorfQorCisjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQorI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCisKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgc3AgYXNtKCJzcCIpOworCisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKikoc3AgJiB+KFRIUkVBRF9TSVpFIC0gMSkpOworfQorI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIHRocmVhZCBpbmZvcm1hdGlvbiBmbGFncworICogLSB0aGVzZSBhcmUgcHJvY2VzcyBzdGF0ZSBmbGFncyB0aGF0IHZhcmlvdXMgYXNzZW1ibHkgZmlsZXMgbWF5IG5lZWQgdG8KKyAqICAgYWNjZXNzCisgKiAtIHBlbmRpbmcgd29yay10by1iZS1kb25lIGZsYWdzIGFyZSBpbiBMU1cKKyAqIC0gb3RoZXIgZmxhZ3MgaW4gTVNXCisgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkxCS8qIHJlc3VtcHRpb24gbm90aWZpY2F0aW9uIHJlcXVlc3RlZCAqLworI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLworI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLworI2RlZmluZSBUSUZfTUVNRElFCQk0CS8qIGlzIHRlcm1pbmF0aW5nIGR1ZSB0byBPT00ga2lsbGVyICovCisjZGVmaW5lIFRJRl9TRUNDT01QCQk1CS8qIHNlY3VyZSBjb21wdXRpbmcgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfQVVESVQJNgkvKiBzeXNjYWxsIGF1ZGl0aW5nIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTkJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLworCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNgkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcKKwkJCQkJICAgVElGX05FRURfUkVTQ0hFRCAqLworCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKKyNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxIDw8IFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxIDw8IFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMSA8PCBUSUZfTkVFRF9SRVNDSEVEKQorI2RlZmluZSBfVElGX1NFQ0NPTVAJCSgxIDw8IFRJRl9TRUNDT01QKQorI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVQJKDEgPDwgVElGX1NZU0NBTExfQVVESVQpCisjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDEgPDwgVElGX1BPTExJTkdfTlJGTEFHKQorCisvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCisjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCisKKy8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1LXNwYWNlICovCisjIGRlZmluZSBfVElGX0FMTFdPUktfTUFTSwkweDAwMDBGRkZGCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdGltZXguaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjJhYmIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90aW1leC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIENvcHlyaWdodCBBbHRlcmEgQ29ycG9yYXRpb24gKEMpIDIwMTQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfVElNRVhfSAorI2RlZmluZSBfQVNNX05JT1MyX1RJTUVYX0gKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGN5Y2xlc190OworCitleHRlcm4gY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2JjNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90bGIuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9UTEJfSAorI2RlZmluZSBfQVNNX05JT1MyX1RMQl9ICisKKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKKworZXh0ZXJuIHZvaWQgc2V0X21tdV9waWQodW5zaWduZWQgbG9uZyBwaWQpOworCisvKgorICogTmlvc0lJIGRvZXNuJ3QgbmVlZCBhbnkgc3BlY2lhbCBwZXItcHRlIG9yIHBlci12bWEgaGFuZGxpbmcsIGV4Y2VwdAorICogd2UgbmVlZCB0byBmbHVzaCBjYWNoZSBmb3IgdGhlIGFyZWEgdG8gYmUgdW5tYXBwZWQuCisgKi8KKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKCF0bGItPmZ1bGxtbSkJCQkJXAorCQkJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7IFwKKwl9ICB3aGlsZSAoMCkKKworI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykJZG8geyB9IHdoaWxlICgwKQorCisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOTY1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfVExCRkxVU0hfSAorI2RlZmluZSBfQVNNX05JT1MyX1RMQkZMVVNIX0gKKworc3RydWN0IG1tX3N0cnVjdDsKKworLyoKKyAqIFRMQiBmbHVzaGluZzoKKyAqCisgKiAgLSBmbHVzaF90bGJfYWxsKCkgZmx1c2hlcyBhbGwgcHJvY2Vzc2VzIFRMQiBlbnRyaWVzCisgKiAgLSBmbHVzaF90bGJfbW0obW0pIGZsdXNoZXMgdGhlIHNwZWNpZmllZCBtbSBjb250ZXh0IFRMQiBlbnRyaWVzCisgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQorICogIC0gZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCisgKiAgLSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBrZXJuZWwgcGFnZXMKKyAqLworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkgICAgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgdmFkZHIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWZsdXNoX3RsYl9vbmUoYWRkcik7Cit9CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdHJhcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmE0ODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90cmFwcy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1RSQVBTX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9UUkFQU19ICisKKyNkZWZpbmUgVFJBUF9JRF9TWVNDQUxMCQkwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit2b2lkIF9leGNlcHRpb24oaW50IHNpZ25vLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcik7CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fTklPUzJfVFJBUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2VkYzBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zIGZvciBOaW9zIElJCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEsIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfVUFDQ0VTU19ICisjZGVmaW5lIF9BU01fTklPUzJfVUFDQ0VTU19ICisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIFZFUklGWV9SRUFECTAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFCTEKKworLyoKKyAqIFRoZSBleGNlcHRpb24gdGFibGUgY29uc2lzdHMgb2YgcGFpcnMgb2YgYWRkcmVzc2VzOiB0aGUgZmlyc3QgaXMgdGhlCisgKiBhZGRyZXNzIG9mIGFuIGluc3RydWN0aW9uIHRoYXQgaXMgYWxsb3dlZCB0byBmYXVsdCwgYW5kIHRoZSBzZWNvbmQgaXMKKyAqIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBwcm9ncmFtIHNob3VsZCBjb250aW51ZS4gIE5vIHJlZ2lzdGVycyBhcmUKKyAqIG1vZGlmaWVkLCBzbyBpdCBpcyBlbnRpcmVseSB1cCB0byB0aGUgY29udGludWF0aW9uIGNvZGUgdG8gZmlndXJlIG91dAorICogd2hhdCB0byBkby4KKyAqCisgKiBBbGwgdGhlIHJvdXRpbmVzIGJlbG93IHVzZSBiaXRzIG9mIGZpeHVwIGNvZGUgdGhhdCBhcmUgb3V0IG9mIGxpbmUKKyAqIHdpdGggdGhlIG1haW4gaW5zdHJ1Y3Rpb24gcGF0aC4gIFRoaXMgbWVhbnMgd2hlbiBldmVyeXRoaW5nIGlzIHdlbGwsCisgKiB3ZSBkb24ndCBldmVuIGhhdmUgdG8ganVtcCBvdmVyIHRoZW0uICBGdXJ0aGVyLCB0aGV5IGRvIG5vdCBpbnRydWRlCisgKiBvbiBvdXIgY2FjaGUgb3IgdGxiIGVudHJpZXMuCisgKi8KK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgaW5zbjsKKwl1bnNpZ25lZCBsb25nIGZpeHVwOworfTsKKworZXh0ZXJuIGludCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKgorICogU2VnbWVudCBzdHVmZgorICovCisjZGVmaW5lIE1BS0VfTU1fU0VHKHMpCQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKKyNkZWZpbmUgVVNFUl9EUwkJCU1BS0VfTU1fU0VHKDB4ODAwMDAwMDBVTCkKKyNkZWZpbmUgS0VSTkVMX0RTCQlNQUtFX01NX1NFRygwKQorCisjZGVmaW5lIGdldF9kcygpCQkoS0VSTkVMX0RTKQorCisjZGVmaW5lIGdldF9mcygpCQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KQorI2RlZmluZSBzZXRfZnMoc2VnKQkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCA9IChzZWcpKQorCisjZGVmaW5lIHNlZ21lbnRfZXEoYSwgYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworI2RlZmluZSBfX2FjY2Vzc19vayhhZGRyLCBsZW4pCQkJXAorCSgoKHNpZ25lZCBsb25nKSgoKGxvbmcpZ2V0X2ZzKCkuc2VnKSAmCVwKKwkJKChsb25nKShhZGRyKSB8ICgoKGxvbmcpKGFkZHIpKSArIChsZW4pKSB8IChsZW4pKSkpID09IDApCisKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsIGFkZHIsIGxlbikJCVwKKwlsaWtlbHkoX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpKGFkZHIpLCAodW5zaWduZWQgbG9uZykobGVuKSkpCisKKyMgZGVmaW5lIF9fRVhfVEFCTEVfU0VDVElPTgkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCisvKgorICogWmVybyBVc2Vyc3BhY2UKKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sCisJCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIG4pCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMTogICAgIHN0YiAgICAgemVybywgMCglMSlcbiIKKwkJIiAgICAgICBhZGRpICAgICUwLCAlMCwgLTFcbiIKKwkJIiAgICAgICBhZGRpICAgICUxLCAlMSwgMVxuIgorCQkiICAgICAgIGJuZSAgICAgJTAsIHplcm8sIDFiXG4iCisJCSIyOlxuIgorCQlfX0VYX1RBQkxFX1NFQ1RJT04KKwkJIi53b3JkICAxYiwgMmJcbiIKKwkJIi5wcmV2aW91c1xuIgorCQk6ICI9ciIgKG4pLCAiPXIiICh0bykKKwkJOiAiMCIgKG4pLCAiMSIgKHRvKQorCSk7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjbGVhcl91c2VyKHZvaWQgX191c2VyICp0bywKKwkJCQkJCSAgICB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikpCisJCXJldHVybiBuOworCXJldHVybiBfX2NsZWFyX3VzZXIodG8sIG4pOworfQorCitleHRlcm4gbG9uZyBfX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwKKwkJCQl1bnNpZ25lZCBsb25nIG4pOworZXh0ZXJuIGxvbmcgX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOworCitzdGF0aWMgaW5saW5lIGxvbmcgY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorCQkJCXVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJvbSwgbikpCisJCXJldHVybiBuOworCXJldHVybiBfX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCisJCQkJdW5zaWduZWQgbG9uZyBuKQoreworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQorCQlyZXR1cm4gbjsKKwlyZXR1cm4gX19jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pOworfQorCitleHRlcm4gbG9uZyBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpfX3RvLCBjb25zdCBjaGFyIF9fdXNlciAqX19mcm9tLAorCQkJCWxvbmcgX19sZW4pOworZXh0ZXJuIGxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzLCBsb25nIG4pOworCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMJX19jb3B5X2Zyb21fdXNlcgorI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYwkJX19jb3B5X3RvX3VzZXIKKworLyogT3B0aW1pemVkIG1hY3JvcyAqLworI2RlZmluZSBfX2dldF91c2VyX2FzbSh2YWwsIGluc24sIGFkZHIsIGVycikJCQkJXAorewkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIiAgICAgICBtb3ZpICAgICUwLCAlM1xuIgkJCQkJXAorCSIxOiAgICIgaW5zbiAiICUxLCAwKCUyKVxuIgkJCQkJXAorCSIgICAgICAgbW92aSAgICAgJTAsIDBcbiIJCQkJCVwKKwkiMjpcbiIJCQkJCQkJCVwKKwkiICAgICAgIC5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQkJXAorCSIgICAgICAgLndvcmQgMWIsIDJiXG4iCQkJCQkJXAorCSIgICAgICAgLnByZXZpb3VzIgkJCQkJCVwKKwk6ICI9JnIiIChlcnIpLCAiPXIiICh2YWwpCQkJCQlcCisJOiAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpKTsJCQkJCVwKK30KKworI2RlZmluZSBfX2dldF91c2VyX3Vua25vd24odmFsLCBzaXplLCBwdHIsIGVycikgZG8gewkJCVwKKwllcnIgPSAwOwkJCQkJCQlcCisJaWYgKGNvcHlfZnJvbV91c2VyKCYodmFsKSwgcHRyLCBzaXplKSkgewkJCVwKKwkJZXJyID0gLUVGQVVMVDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19nZXRfdXNlcl9jb21tb24odmFsLCBzaXplLCBwdHIsIGVycikJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCWNhc2UgMToJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20odmFsLCAibGRidSIsIHB0ciwgZXJyKTsJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh2YWwsICJsZGh1IiwgcHRyLCBlcnIpOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKHZhbCwgImxkdyIsIHB0ciwgZXJyKTsJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX2dldF91c2VyX3Vua25vd24odmFsLCBzaXplLCBwdHIsIGVycik7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyID0gLUVGQVVMVDsJCQkJCVwKKwljb25zdCBfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX2d1X3B0ciA9IChwdHIpOwkJXAorCXVuc2lnbmVkIGxvbmcgX19ndV92YWw7CQkJCQkJXAorCV9fZ2V0X3VzZXJfY29tbW9uKF9fZ3VfdmFsLCBzaXplb2YoKihwdHIpKSwgX19ndV9wdHIsIF9fZ3VfZXJyKTtcCisJKHgpID0gKF9fdHlwZW9mX18oeCkpX19ndV92YWw7CQkJCQlcCisJX19ndV9lcnI7CQkJCQkJCVwKKwl9KQorCisjZGVmaW5lIGdldF91c2VyKHgsIHB0cikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fZ3VfZXJyID0gLUVGQVVMVDsJCQkJCVwKKwljb25zdCBfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX2d1X3B0ciA9IChwdHIpOwkJXAorCXVuc2lnbmVkIGxvbmcgX19ndV92YWwgPSAwOwkJCQkJXAorCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICBfX2d1X3B0ciwgc2l6ZW9mKCpfX2d1X3B0cikpKQlcCisJCV9fZ2V0X3VzZXJfY29tbW9uKF9fZ3VfdmFsLCBzaXplb2YoKl9fZ3VfcHRyKSwJCVwKKwkJCV9fZ3VfcHRyLCBfX2d1X2Vycik7CQkJCVwKKwkoeCkgPSAoX190eXBlb2ZfXyh4KSlfX2d1X3ZhbDsJCQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX3B1dF91c2VyX2FzbSh2YWwsIGluc24sIHB0ciwgZXJyKQkJCQlcCit7CQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiICAgICAgIG1vdmkgICAgJTAsICUzXG4iCQkJCQlcCisJIjE6ICAgIiBpbnNuICIgJTEsIDAoJTIpXG4iCQkJCQlcCisJIiAgICAgICBtb3ZpICAgICAlMCwgMFxuIgkJCQkJXAorCSIyOlxuIgkJCQkJCQkJXAorCSIgICAgICAgLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisJIiAgICAgICAud29yZCAxYiwgMmJcbiIJCQkJCQlcCisJIiAgICAgICAucHJldmlvdXNcbiIJCQkJCQlcCisJOiAiPSZyIiAoZXJyKQkJCQkJCQlcCisJOiAiciIgKHZhbCksICJyIiAocHRyKSwgImkiICgtRUZBVUxUKSk7CQkJCVwKK30KKworI2RlZmluZSBwdXRfdXNlcih4LCBwdHIpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJbG9uZyBfX3B1X2VyciA9IC1FRkFVTFQ7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wdV9wdHIgPSAocHRyKTsJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcHVfdmFsID0gKF9fdHlwZW9mKCpwdHIpKSh4KTsJCVwKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgX19wdV9wdHIsIHNpemVvZigqX19wdV9wdHIpKSkgewlcCisJCXN3aXRjaCAoc2l6ZW9mKCpfX3B1X3B0cikpIHsJCQkJXAorCQljYXNlIDE6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfYXNtKF9fcHVfdmFsLCAic3RiIiwgX19wdV9wdHIsIF9fcHVfZXJyKTsgXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDI6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfYXNtKF9fcHVfdmFsLCAic3RoIiwgX19wdV9wdHIsIF9fcHVfZXJyKTsgXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDQ6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfYXNtKF9fcHVfdmFsLCAic3R3IiwgX19wdV9wdHIsIF9fcHVfZXJyKTsgXAorCQkJYnJlYWs7CQkJCQkJXAorCQlkZWZhdWx0OgkJCQkJCVwKKwkJCS8qIFhYWDogVGhpcyBsb29rcyB3cm9uZy4uLiAqLwkJCVwKKwkJCV9fcHVfZXJyID0gMDsJCQkJCVwKKwkJCWlmIChjb3B5X3RvX3VzZXIoX19wdV9wdHIsICYoX19wdV92YWwpLAkJXAorCQkJCXNpemVvZigqX19wdV9wdHIpKSkJCQlcCisJCQkJX19wdV9lcnIgPSAtRUZBVUxUOwkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJfQkJCQkJCQlcCisJfQkJCQkJCQkJXAorCV9fcHVfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKSBwdXRfdXNlcih4LCBwdHIpCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1VBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS91Y29udGV4dC5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODc2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fTklPUzJfVUNPTlRFWFRfSAorCit0eXBlZGVmIGludCBncmVnX3Q7CisjZGVmaW5lIE5HUkVHIDMyCit0eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbTkdSRUddOworCitzdHJ1Y3QgbWNvbnRleHQgeworCWludCB2ZXJzaW9uOworCWdyZWdzZXRfdCBncmVnczsKK307CisKKyNkZWZpbmUgTUNPTlRFWFRfVkVSU0lPTiAyCisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlzdHJ1Y3QgbWNvbnRleHQJICB1Y19tY29udGV4dDsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vS2J1aWxkIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL0tidWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA3Y2EzZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vS2J1aWxkCkBAIC0wLDAgKzEsNCBAQAoraW5jbHVkZSBpbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQorCitoZWFkZXIteSArPSBlbGYuaAoraGVhZGVyLXkgKz0gdWNvbnRleHQuaApkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL2J5dGVvcmRlci5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYjVkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgIFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAgIE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfQllURU9SREVSX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9CWVRFT1JERVJfSAorCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vZWxmLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViOTFhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9lbGYuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKworI2lmbmRlZiBfVUFQSV9BU01fTklPUzJfRUxGX0gKKyNkZWZpbmUgX1VBUElfQVNNX05JT1MyX0VMRl9ICisKKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKworLyogUmVsb2NhdGlvbiB0eXBlcyAqLworI2RlZmluZSBSX05JT1MyX05PTkUJCTAKKyNkZWZpbmUgUl9OSU9TMl9TMTYJCTEKKyNkZWZpbmUgUl9OSU9TMl9VMTYJCTIKKyNkZWZpbmUgUl9OSU9TMl9QQ1JFTDE2CQkzCisjZGVmaW5lIFJfTklPUzJfQ0FMTDI2CQk0CisjZGVmaW5lIFJfTklPUzJfSU1NNQkJNQorI2RlZmluZSBSX05JT1MyX0NBQ0hFX09QWAk2CisjZGVmaW5lIFJfTklPUzJfSU1NNgkJNworI2RlZmluZSBSX05JT1MyX0lNTTgJCTgKKyNkZWZpbmUgUl9OSU9TMl9ISTE2CQk5CisjZGVmaW5lIFJfTklPUzJfTE8xNgkJMTAKKyNkZWZpbmUgUl9OSU9TMl9ISUFESjE2CQkxMQorI2RlZmluZSBSX05JT1MyX0JGRF9SRUxPQ18zMgkxMgorI2RlZmluZSBSX05JT1MyX0JGRF9SRUxPQ18xNgkxMworI2RlZmluZSBSX05JT1MyX0JGRF9SRUxPQ184CTE0CisjZGVmaW5lIFJfTklPUzJfR1BSRUwJCTE1CisjZGVmaW5lIFJfTklPUzJfR05VX1ZUSU5IRVJJVAkxNgorI2RlZmluZSBSX05JT1MyX0dOVV9WVEVOVFJZCTE3CisjZGVmaW5lIFJfTklPUzJfVUpNUAkJMTgKKyNkZWZpbmUgUl9OSU9TMl9DSk1QCQkxOQorI2RlZmluZSBSX05JT1MyX0NBTExSCQkyMAorI2RlZmluZSBSX05JT1MyX0FMSUdOCQkyMQorLyogS2VlcCB0aGlzIHRoZSBsYXN0IGVudHJ5LiAgKi8KKyNkZWZpbmUgUl9OSU9TMl9OVU0JCTIyCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRwlcCisJKChzaXplb2Yoc3RydWN0IHB0X3JlZ3MpICsgc2l6ZW9mKHN0cnVjdCBzd2l0Y2hfc3RhY2spKSAvCVwKKwkJc2l6ZW9mKGVsZl9ncmVnX3QpKQordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9mcHJlZ3NldF90OworCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fQUxURVJBX05JT1MyCisKKyNlbmRpZiAvKiBfVUFQSV9BU01fTklPUzJfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9wdHJhY2UuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNhN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3B0cmFjZS5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogYmFzZWQgb24gbTY4ayBhc20vcHJvY2Vzc29yLmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9VQVBJX0FTTV9OSU9TMl9QVFJBQ0VfSAorI2RlZmluZSBfVUFQSV9BU01fTklPUzJfUFRSQUNFX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFJlZ2lzdGVyIG51bWJlcnMgdXNlZCBieSAncHRyYWNlJyBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UuCisgKi8KKworLyogR1AgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBUUl9SMAkJMAorI2RlZmluZSBQVFJfUjEJCTEKKyNkZWZpbmUgUFRSX1IyCQkyCisjZGVmaW5lIFBUUl9SMwkJMworI2RlZmluZSBQVFJfUjQJCTQKKyNkZWZpbmUgUFRSX1I1CQk1CisjZGVmaW5lIFBUUl9SNgkJNgorI2RlZmluZSBQVFJfUjcJCTcKKyNkZWZpbmUgUFRSX1I4CQk4CisjZGVmaW5lIFBUUl9SOQkJOQorI2RlZmluZSBQVFJfUjEwCQkxMAorI2RlZmluZSBQVFJfUjExCQkxMQorI2RlZmluZSBQVFJfUjEyCQkxMgorI2RlZmluZSBQVFJfUjEzCQkxMworI2RlZmluZSBQVFJfUjE0CQkxNAorI2RlZmluZSBQVFJfUjE1CQkxNQorI2RlZmluZSBQVFJfUjE2CQkxNgorI2RlZmluZSBQVFJfUjE3CQkxNworI2RlZmluZSBQVFJfUjE4CQkxOAorI2RlZmluZSBQVFJfUjE5CQkxOQorI2RlZmluZSBQVFJfUjIwCQkyMAorI2RlZmluZSBQVFJfUjIxCQkyMQorI2RlZmluZSBQVFJfUjIyCQkyMgorI2RlZmluZSBQVFJfUjIzCQkyMworI2RlZmluZSBQVFJfUjI0CQkyNAorI2RlZmluZSBQVFJfUjI1CQkyNQorI2RlZmluZSBQVFJfR1AJCTI2CisjZGVmaW5lIFBUUl9TUAkJMjcKKyNkZWZpbmUgUFRSX0ZQCQkyOAorI2RlZmluZSBQVFJfRUEJCTI5CisjZGVmaW5lIFBUUl9CQQkJMzAKKyNkZWZpbmUgUFRSX1JBCQkzMQorLyogQ29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFRSX1BDCQkzMgorI2RlZmluZSBQVFJfU1RBVFVTCTMzCisjZGVmaW5lIFBUUl9FU1RBVFVTCTM0CisjZGVmaW5lIFBUUl9CU1RBVFVTCTM1CisjZGVmaW5lIFBUUl9JRU5BQkxFCTM2CisjZGVmaW5lIFBUUl9JUEVORElORwkzNworI2RlZmluZSBQVFJfQ1BVSUQJMzgKKyNkZWZpbmUgUFRSX0NUTDYJMzkKKyNkZWZpbmUgUFRSX0NUTDcJNDAKKyNkZWZpbmUgUFRSX1BURUFERFIJNDEKKyNkZWZpbmUgUFRSX1RMQkFDQwk0MgorI2RlZmluZSBQVFJfVExCTUlTQwk0MworCisjZGVmaW5lIE5VTV9QVFJBQ0VfUkVHIChQVFJfVExCTUlTQyArIDEpCisKKy8qIHRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCisgICBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbC4KKworICAgVGhlcmUgaXMgYSBmYWtlX3JlZ3MgaW4gc2V0dXAuYyB0aGF0IGhhcyB0byBtYXRjaCBwdF9yZWdzLiovCisKK3N0cnVjdCBwdF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nICByODsJCS8qIHI4LXIxNSBDYWxsZXItc2F2ZWQgR1AgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyAgcjk7CisJdW5zaWduZWQgbG9uZyAgcjEwOworCXVuc2lnbmVkIGxvbmcgIHIxMTsKKwl1bnNpZ25lZCBsb25nICByMTI7CisJdW5zaWduZWQgbG9uZyAgcjEzOworCXVuc2lnbmVkIGxvbmcgIHIxNDsKKwl1bnNpZ25lZCBsb25nICByMTU7CisJdW5zaWduZWQgbG9uZyAgcjE7CQkvKiBBc3NlbWJsZXIgdGVtcG9yYXJ5ICovCisJdW5zaWduZWQgbG9uZyAgcjI7CQkvKiBSZXR2YWwgTFMgMzJiaXRzICovCisJdW5zaWduZWQgbG9uZyAgcjM7CQkvKiBSZXR2YWwgTVMgMzJiaXRzICovCisJdW5zaWduZWQgbG9uZyAgcjQ7CQkvKiByNC1yNyBSZWdpc3RlciBhcmd1bWVudHMgKi8KKwl1bnNpZ25lZCBsb25nICByNTsKKwl1bnNpZ25lZCBsb25nICByNjsKKwl1bnNpZ25lZCBsb25nICByNzsKKwl1bnNpZ25lZCBsb25nICBvcmlnX3IyOwkJLyogQ29weSBvZiByMiA/PyAqLworCXVuc2lnbmVkIGxvbmcgIHJhOwkJLyogUmV0dXJuIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nICBmcDsJCS8qIEZyYW1lIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nICBzcDsJCS8qIFN0YWNrIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nICBncDsJCS8qIEdsb2JhbCBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZyAgZXN0YXR1czsKKwl1bnNpZ25lZCBsb25nICBlYTsJCS8qIEV4Y2VwdGlvbiByZXR1cm4gYWRkcmVzcyAocGMpICovCisJdW5zaWduZWQgbG9uZyAgb3JpZ19yNzsKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBleHRlbmRlZCBzdGFjayB1c2VkIGJ5IHNpZ25hbCBoYW5kbGVycyBhbmQgdGhlIGNvbnRleHQKKyAqIHN3aXRjaGVyOiBpdCdzIHB1c2hlZCBhZnRlciB0aGUgbm9ybWFsICJzdHJ1Y3QgcHRfcmVncyIuCisgKi8KK3N0cnVjdCBzd2l0Y2hfc3RhY2sgeworCXVuc2lnbmVkIGxvbmcgIHIxNjsJCS8qIHIxNi1yMjMgQ2FsbGVlLXNhdmVkIEdQIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcgIHIxNzsKKwl1bnNpZ25lZCBsb25nICByMTg7CisJdW5zaWduZWQgbG9uZyAgcjE5OworCXVuc2lnbmVkIGxvbmcgIHIyMDsKKwl1bnNpZ25lZCBsb25nICByMjE7CisJdW5zaWduZWQgbG9uZyAgcjIyOworCXVuc2lnbmVkIGxvbmcgIHIyMzsKKwl1bnNpZ25lZCBsb25nICBmcDsKKwl1bnNpZ25lZCBsb25nICBncDsKKwl1bnNpZ25lZCBsb25nICByYTsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfVUFQSV9BU01fTklPUzJfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOGJiNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc2lnY29udGV4dC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9TSUdDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9TSUdDT05URVhUX0gKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworc3RydWN0IHNpZ2NvbnRleHQgeworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJdW5zaWduZWQgbG9uZyAgc2NfbWFzazsJLyogb2xkIHNpZ21hc2sgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3NpZ25hbC5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOWVlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc2lnbmFsLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCBBbHRlcmEgQ29ycG9yYXRpb24gKEMpIDIwMTMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworI2lmbmRlZiBfQVNNX05JT1MyX1NJR05BTF9ICisjZGVmaW5lIF9BU01fTklPUzJfU0lHTkFMX0gKKworI2RlZmluZSBTQV9SRVNUT1JFUiAweDA0MDAwMDAwCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc3dhYi5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3N3YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGUyMmViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3N3YWIuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDExIFB5cmFtaWQgVGVjaG5pY2FsIENvbnN1bHRhbnRzLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1NXQUJfSAorI2RlZmluZSBfQVNNX05JT1MyX1NXQUJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zd2FiLmg+CisKKyNpZmRlZiBDT05GSUdfTklPUzJfQ0lfU1dBQl9TVVBQT1JUCisjaWZkZWYgX19HTlVDX18KKworI2RlZmluZSBfX25pb3MyX3N3YWIoeCkJCVwKKwlfX2J1aWx0aW5fY3VzdG9tX2luaShDT05GSUdfTklPUzJfQ0lfU1dBQl9OTywgKHgpKQorCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGNvbnN0KSkgX191MTYgX19hcmNoX3N3YWIxNihfX3UxNiB4KQoreworCXJldHVybiAoX191MTYpIF9fbmlvczJfc3dhYigoKF9fdTMyKSB4KSA8PCAxNik7Cit9CisjZGVmaW5lIF9fYXJjaF9zd2FiMTYgX19hcmNoX3N3YWIxNgorCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGNvbnN0KSkgX191MzIgX19hcmNoX3N3YWIzMihfX3UzMiB4KQoreworCXJldHVybiAoX191MzIpIF9fbmlvczJfc3dhYih4KTsKK30KKyNkZWZpbmUgX19hcmNoX3N3YWIzMiBfX2FyY2hfc3dhYjMyCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworI2VuZGlmIC8qIENPTkZJR19OSU9TMl9DSV9TV0FCX1NVUFBPUlQgKi8KKworI2VuZGlmIC8qIF9BU01fTklPUzJfU1dBQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiZjc5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyAjZGVmaW5lIHN5c19tbWFwMiBzeXNfbW1hcF9wZ29mZgorCisvKiBVc2UgdGhlIHN0YW5kYXJkIEFCSSBmb3Igc3lzY2FsbHMgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91bmlzdGQuaD4KKworLyogQWRkaXRpb25hbCBOaW9zIElJIHNwZWNpZmljIHN5c2NhbGxzLiAqLworI2RlZmluZSBfX05SX2NhY2hlZmx1c2ggKF9fTlJfYXJjaF9zcGVjaWZpY19zeXNjYWxsKQorX19TWVNDQUxMKF9fTlJfY2FjaGVmbHVzaCwgc3lzX2NhY2hlZmx1c2gpCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbmlvczIva2VybmVsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZTc2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9NYWtlZmlsZQpAQCAtMCwwICsxLDI0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbmlvczIgbGludXgga2VybmVsLgorIworCitleHRyYS15CSs9IGhlYWQubworZXh0cmEteQkrPSB2bWxpbnV4LmxkcworCitvYmoteQkrPSBjcHVpbmZvLm8KK29iai15CSs9IGVudHJ5Lm8KK29iai15CSs9IGluc25lbXUubworb2JqLXkJKz0gaXJxLm8KK29iai15CSs9IG5pb3MyX2tzeW1zLm8KK29iai15CSs9IHByb2Nlc3Mubworb2JqLXkJKz0gcHJvbS5vCitvYmoteQkrPSBwdHJhY2Uubworb2JqLXkJKz0gc2V0dXAubworb2JqLXkJKz0gc2lnbmFsLm8KK29iai15CSs9IHN5c19uaW9zMi5vCitvYmoteQkrPSBzeXNjYWxsX3RhYmxlLm8KK29iai15CSs9IHRpbWUubworb2JqLXkJKz0gdHJhcHMubworCitvYmotJChDT05GSUdfTU9EVUxFUykJCQkrPSBtb2R1bGUubworb2JqLSQoQ09ORklHX05JT1MyX0FMSUdOTUVOVF9UUkFQKQkrPSBtaXNhbGlnbmVkLm8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9hc20tb2Zmc2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZWU3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KKworaW50IG1haW4odm9pZCkKK3sKKwkvKiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKi8KKwlPRkZTRVQoVEFTS19USFJFQUQsIHRhc2tfc3RydWN0LCB0aHJlYWQpOworCUJMQU5LKCk7CisKKwkvKiBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqLworCU9GRlNFVChUSFJFQURfS1NQLCB0aHJlYWRfc3RydWN0LCBrc3ApOworCU9GRlNFVChUSFJFQURfS1BTUiwgdGhyZWFkX3N0cnVjdCwga3Bzcik7CisJQkxBTksoKTsKKworCS8qIHN0cnVjdCBwdF9yZWdzICovCisJT0ZGU0VUKFBUX09SSUdfUjIsIHB0X3JlZ3MsIG9yaWdfcjIpOworCU9GRlNFVChQVF9PUklHX1I3LCBwdF9yZWdzLCBvcmlnX3I3KTsKKworCU9GRlNFVChQVF9SMSwgcHRfcmVncywgcjEpOworCU9GRlNFVChQVF9SMiwgcHRfcmVncywgcjIpOworCU9GRlNFVChQVF9SMywgcHRfcmVncywgcjMpOworCU9GRlNFVChQVF9SNCwgcHRfcmVncywgcjQpOworCU9GRlNFVChQVF9SNSwgcHRfcmVncywgcjUpOworCU9GRlNFVChQVF9SNiwgcHRfcmVncywgcjYpOworCU9GRlNFVChQVF9SNywgcHRfcmVncywgcjcpOworCU9GRlNFVChQVF9SOCwgcHRfcmVncywgcjgpOworCU9GRlNFVChQVF9SOSwgcHRfcmVncywgcjkpOworCU9GRlNFVChQVF9SMTAsIHB0X3JlZ3MsIHIxMCk7CisJT0ZGU0VUKFBUX1IxMSwgcHRfcmVncywgcjExKTsKKwlPRkZTRVQoUFRfUjEyLCBwdF9yZWdzLCByMTIpOworCU9GRlNFVChQVF9SMTMsIHB0X3JlZ3MsIHIxMyk7CisJT0ZGU0VUKFBUX1IxNCwgcHRfcmVncywgcjE0KTsKKwlPRkZTRVQoUFRfUjE1LCBwdF9yZWdzLCByMTUpOworCU9GRlNFVChQVF9FQSwgcHRfcmVncywgZWEpOworCU9GRlNFVChQVF9SQSwgcHRfcmVncywgcmEpOworCU9GRlNFVChQVF9GUCwgcHRfcmVncywgZnApOworCU9GRlNFVChQVF9TUCwgcHRfcmVncywgc3ApOworCU9GRlNFVChQVF9HUCwgcHRfcmVncywgZ3ApOworCU9GRlNFVChQVF9FU1RBVFVTLCBwdF9yZWdzLCBlc3RhdHVzKTsKKwlERUZJTkUoUFRfUkVHU19TSVpFLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlCTEFOSygpOworCisJLyogc3RydWN0IHN3aXRjaF9zdGFjayAqLworCU9GRlNFVChTV19SMTYsIHN3aXRjaF9zdGFjaywgcjE2KTsKKwlPRkZTRVQoU1dfUjE3LCBzd2l0Y2hfc3RhY2ssIHIxNyk7CisJT0ZGU0VUKFNXX1IxOCwgc3dpdGNoX3N0YWNrLCByMTgpOworCU9GRlNFVChTV19SMTksIHN3aXRjaF9zdGFjaywgcjE5KTsKKwlPRkZTRVQoU1dfUjIwLCBzd2l0Y2hfc3RhY2ssIHIyMCk7CisJT0ZGU0VUKFNXX1IyMSwgc3dpdGNoX3N0YWNrLCByMjEpOworCU9GRlNFVChTV19SMjIsIHN3aXRjaF9zdGFjaywgcjIyKTsKKwlPRkZTRVQoU1dfUjIzLCBzd2l0Y2hfc3RhY2ssIHIyMyk7CisJT0ZGU0VUKFNXX0ZQLCBzd2l0Y2hfc3RhY2ssIGZwKTsKKwlPRkZTRVQoU1dfR1AsIHN3aXRjaF9zdGFjaywgZ3ApOworCU9GRlNFVChTV19SQSwgc3dpdGNoX3N0YWNrLCByYSk7CisJREVGSU5FKFNXSVRDSF9TVEFDS19TSVpFLCBzaXplb2Yoc3RydWN0IHN3aXRjaF9zdGFjaykpOworCUJMQU5LKCk7CisKKwkvKiBzdHJ1Y3QgdGhyZWFkX2luZm8gKi8KKwlPRkZTRVQoVElfRkxBR1MsIHRocmVhZF9pbmZvLCBmbGFncyk7CisJT0ZGU0VUKFRJX1BSRUVNUFRfQ09VTlQsIHRocmVhZF9pbmZvLCBwcmVlbXB0X2NvdW50KTsKKwlCTEFOSygpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9jcHVpbmZvLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9jcHVpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkNWJiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL2NwdWluZm8uYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBCYXNlZCBvbiBjcHVpbmZvLmMgZnJvbSBtaWNyb2JsYXplCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorCitzdHJ1Y3QgY3B1aW5mbyBjcHVpbmZvOworCisjZGVmaW5lIGVycl9jcHUoeCkgXAorCXByX2VycigiRVJST1I6IE5pb3MgSUkgIiB4ICIgZGlmZmVyZW50IGZvciBrZXJuZWwgYW5kIERUU1xuIikKKworc3RhdGljIGlubGluZSB1MzIgZmNwdShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSwgY29uc3QgY2hhciAqbikKK3sKKwl1MzIgdmFsID0gMDsKKworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKGNwdSwgbiwgJnZhbCk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBmY3B1X2hhcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSwgY29uc3QgY2hhciAqbikKK3sKKwlyZXR1cm4gb2ZfZ2V0X3Byb3BlcnR5KGNwdSwgbiwgTlVMTCkgPyAxIDogMDsKK30KKwordm9pZCBfX2luaXQgc2V0dXBfY3B1aW5mbyh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1OworCWNvbnN0IGNoYXIgKnN0cjsKKwlpbnQgbGVuOworCisJY3B1ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOworCWlmICghY3B1KQorCQlwYW5pYygiJXM6IE5vIENQVSBmb3VuZCBpbiBkZXZpY2V0cmVlIVxuIiwgX19mdW5jX18pOworCisJaWYgKCFmY3B1X2hhcyhjcHUsICJhbHRyLGhhcy1pbml0ZGEiKSkKKwkJcGFuaWMoImluaXRkYSBpbnN0cnVjdGlvbiBpcyB1bmltcGxlbWVudGVkLiBQbGVhc2UgdXBkYXRlIHlvdXIgIgorCQkJImhhcmR3YXJlIHN5c3RlbSB0byBoYXZlIG1vcmUgdGhhbiA0LWJ5dGUgbGluZSBkYXRhICIKKwkJCSJjYWNoZVxuIik7CisKKwljcHVpbmZvLmNwdV9jbG9ja19mcmVxID0gZmNwdShjcHUsICJjbG9jay1mcmVxdWVuY3kiKTsKKworCXN0ciA9IG9mX2dldF9wcm9wZXJ0eShjcHUsICJhbHRyLGltcGxlbWVudGF0aW9uIiwgJmxlbik7CisJaWYgKHN0cikKKwkJc3RybGNweShjcHVpbmZvLmNwdV9pbXBsLCBzdHIsIHNpemVvZihjcHVpbmZvLmNwdV9pbXBsKSk7CisJZWxzZQorCQlzdHJjcHkoY3B1aW5mby5jcHVfaW1wbCwgIjx1bmtub3duPiIpOworCisJY3B1aW5mby5oYXNfZGl2ID0gZmNwdV9oYXMoY3B1LCAiYWx0cixoYXMtZGl2Iik7CisJY3B1aW5mby5oYXNfbXVsID0gZmNwdV9oYXMoY3B1LCAiYWx0cixoYXMtbXVsIik7CisJY3B1aW5mby5oYXNfbXVseCA9IGZjcHVfaGFzKGNwdSwgImFsdHIsaGFzLW11bHgiKTsKKworCWlmIChJU19FTkFCTEVEKENPTkZJR19OSU9TMl9IV19ESVZfU1VQUE9SVCkgJiYgIWNwdWluZm8uaGFzX2RpdikKKwkJZXJyX2NwdSgiRElWIik7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTklPUzJfSFdfTVVMX1NVUFBPUlQpICYmICFjcHVpbmZvLmhhc19tdWwpCisJCWVycl9jcHUoIk1VTCIpOworCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX05JT1MyX0hXX01VTFhfU1VQUE9SVCkgJiYgIWNwdWluZm8uaGFzX211bHgpCisJCWVycl9jcHUoIk1VTFgiKTsKKworCWNwdWluZm8udGxiX251bV93YXlzID0gZmNwdShjcHUsICJhbHRyLHRsYi1udW0td2F5cyIpOworCWlmICghY3B1aW5mby50bGJfbnVtX3dheXMpCisJCXBhbmljKCJhbHRyLHRsYi1udW0td2F5cyBjYW4ndCBiZSAwLiBQbGVhc2UgY2hlY2sgeW91ciBoYXJkd2FyZSAiCisJCQkic3lzdGVtXG4iKTsKKwljcHVpbmZvLmljYWNoZV9saW5lX3NpemUgPSBmY3B1KGNwdSwgImljYWNoZS1saW5lLXNpemUiKTsKKwljcHVpbmZvLmljYWNoZV9zaXplID0gZmNwdShjcHUsICJpY2FjaGUtc2l6ZSIpOworCWlmIChDT05GSUdfTklPUzJfSUNBQ0hFX1NJWkUgIT0gY3B1aW5mby5pY2FjaGVfc2l6ZSkKKwkJcHJfd2FybigiV2FybmluZzogaWNhY2hlIHNpemUgY29uZmlndXJhdGlvbiBtaXNtYXRjaCAiCisJCSIoMHgleCB2cyAweCV4KSBvZiBDT05GSUdfTklPUzJfSUNBQ0hFX1NJWkUgdnMgIgorCQkiZGV2aWNlIHRyZWUgaWNhY2hlLXNpemVcbiIsCisJCUNPTkZJR19OSU9TMl9JQ0FDSEVfU0laRSwgY3B1aW5mby5pY2FjaGVfc2l6ZSk7CisKKwljcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgPSBmY3B1KGNwdSwgImRjYWNoZS1saW5lLXNpemUiKTsKKwlpZiAoQ09ORklHX05JT1MyX0RDQUNIRV9MSU5FX1NJWkUgIT0gY3B1aW5mby5kY2FjaGVfbGluZV9zaXplKQorCQlwcl93YXJuKCJXYXJuaW5nOiBkY2FjaGUgbGluZSBzaXplIGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2ggIgorCQkiKDB4JXggdnMgMHgleCkgb2YgQ09ORklHX05JT1MyX0RDQUNIRV9MSU5FX1NJWkUgdnMgIgorCQkiZGV2aWNlIHRyZWUgZGNhY2hlLWxpbmUtc2l6ZVxuIiwKKwkJQ09ORklHX05JT1MyX0RDQUNIRV9MSU5FX1NJWkUsIGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSk7CisJY3B1aW5mby5kY2FjaGVfc2l6ZSA9IGZjcHUoY3B1LCAiZGNhY2hlLXNpemUiKTsKKwlpZiAoQ09ORklHX05JT1MyX0RDQUNIRV9TSVpFICE9IGNwdWluZm8uZGNhY2hlX3NpemUpCisJCXByX3dhcm4oIldhcm5pbmc6IGRjYWNoZSBzaXplIGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2ggIgorCQkJIigweCV4IHZzIDB4JXgpIG9mIENPTkZJR19OSU9TMl9EQ0FDSEVfU0laRSB2cyAiCisJCQkiZGV2aWNlIHRyZWUgZGNhY2hlLXNpemVcbiIsCisJCQlDT05GSUdfTklPUzJfRENBQ0hFX1NJWkUsIGNwdWluZm8uZGNhY2hlX3NpemUpOworCisJY3B1aW5mby50bGJfcGlkX251bV9iaXRzID0gZmNwdShjcHUsICJhbHRyLHBpZC1udW0tYml0cyIpOworCWNwdWluZm8udGxiX251bV93YXlzX2xvZzIgPSBpbG9nMihjcHVpbmZvLnRsYl9udW1fd2F5cyk7CisJY3B1aW5mby50bGJfbnVtX2VudHJpZXMgPSBmY3B1KGNwdSwgImFsdHIsdGxiLW51bS1lbnRyaWVzIik7CisJY3B1aW5mby50bGJfbnVtX2xpbmVzID0gY3B1aW5mby50bGJfbnVtX2VudHJpZXMgLyBjcHVpbmZvLnRsYl9udW1fd2F5czsKKwljcHVpbmZvLnRsYl9wdHJfc3ogPSBmY3B1KGNwdSwgImFsdHIsdGxiLXB0ci1zeiIpOworCisJY3B1aW5mby5yZXNldF9hZGRyID0gZmNwdShjcHUsICJhbHRyLHJlc2V0LWFkZHIiKTsKKwljcHVpbmZvLmV4Y2VwdGlvbl9hZGRyID0gZmNwdShjcHUsICJhbHRyLGV4Y2VwdGlvbi1hZGRyIik7CisJY3B1aW5mby5mYXN0X3RsYl9taXNzX2V4Y19hZGRyID0gZmNwdShjcHUsICJhbHRyLGZhc3QtdGxiLW1pc3MtYWRkciIpOworfQorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKworLyoKKyAqIEdldCBDUFUgaW5mb3JtYXRpb24gZm9yIHVzZSBieSB0aGUgcHJvY2ZzLgorICovCitzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJaW50IGNvdW50ID0gMDsKKwljb25zdCB1MzIgY2xvY2tmcmVxID0gY3B1aW5mby5jcHVfY2xvY2tfZnJlcTsKKworCWNvdW50ID0gc2VxX3ByaW50ZihtLAorCQkJIkNQVTpcdFx0TmlvcyBJSS8lc1xuIgorCQkJIk1NVTpcdFx0JXNcbiIKKwkJCSJGUFU6XHRcdG5vbmVcbiIKKwkJCSJDbG9ja2luZzpcdCV1LiUwMnUgTUh6XG4iCisJCQkiQm9nb01pcHM6XHQlbHUuJTAybHVcbiIKKwkJCSJDYWxpYnJhdGlvbjpcdCVsdSBsb29wc1xuIiwKKwkJCWNwdWluZm8uY3B1X2ltcGwsCisJCQljcHVpbmZvLm1tdSA/ICJwcmVzZW50IiA6ICJub25lIiwKKwkJCWNsb2NrZnJlcSAvIDEwMDAwMDAsIChjbG9ja2ZyZXEgLyAxMDAwMDApICUgMTAsCisJCQkobG9vcHNfcGVyX2ppZmZ5ICogSFopIC8gNTAwMDAwLAorCQkJKChsb29wc19wZXJfamlmZnkgKiBIWikgLyA1MDAwKSAlIDEwMCwKKwkJCShsb29wc19wZXJfamlmZnkgKiBIWikpOworCisJY291bnQgKz0gc2VxX3ByaW50ZihtLAorCQkJIkhXOlxuIgorCQkJIiBNVUw6XHRcdCVzXG4iCisJCQkiIE1VTFg6XHRcdCVzXG4iCisJCQkiIERJVjpcdFx0JXNcbiIsCisJCQljcHVpbmZvLmhhc19tdWwgPyAieWVzIiA6ICJubyIsCisJCQljcHVpbmZvLmhhc19tdWx4ID8gInllcyIgOiAibm8iLAorCQkJY3B1aW5mby5oYXNfZGl2ID8gInllcyIgOiAibm8iKTsKKworCWNvdW50ICs9IHNlcV9wcmludGYobSwKKwkJCSJJY2FjaGU6XHRcdCV1a0IsIGxpbmUgbGVuZ3RoOiAldVxuIiwKKwkJCWNwdWluZm8uaWNhY2hlX3NpemUgPj4gMTAsCisJCQljcHVpbmZvLmljYWNoZV9saW5lX3NpemUpOworCisJY291bnQgKz0gc2VxX3ByaW50ZihtLAorCQkJIkRjYWNoZTpcdFx0JXVrQiwgbGluZSBsZW5ndGg6ICV1XG4iLAorCQkJY3B1aW5mby5kY2FjaGVfc2l6ZSA+PiAxMCwKKwkJCWNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSk7CisKKwljb3VudCArPSBzZXFfcHJpbnRmKG0sCisJCQkiVExCOlx0XHQldSB3YXlzLCAldSBlbnRyaWVzLCAldSBQSUQgYml0c1xuIiwKKwkJCWNwdWluZm8udGxiX251bV93YXlzLAorCQkJY3B1aW5mby50bGJfbnVtX2VudHJpZXMsCisJCQljcHVpbmZvLnRsYl9waWRfbnVtX2JpdHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpjcHVpbmZvX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJdW5zaWduZWQgbG9uZyBpID0gKnBvczsKKworCXJldHVybiBpIDwgbnVtX3Bvc3NpYmxlX2NwdXMoKSA/ICh2b2lkICopIChpICsgMSkgOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqY3B1aW5mb19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJKysqcG9zOworCXJldHVybiBjcHVpbmZvX3N0YXJ0KG0sIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNwdWluZm9fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CisKK2NvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wID0geworCS5zdGFydAk9IGNwdWluZm9fc3RhcnQsCisJLm5leHQJPSBjcHVpbmZvX25leHQsCisJLnN0b3AJPSBjcHVpbmZvX3N0b3AsCisJLnNob3cJPSBzaG93X2NwdWluZm8KK307CisKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbmlvczIva2VybmVsL2VudHJ5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiY2ExNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL2VudHJ5LlMKQEAgLTAsMCArMSw1NTUgQEAKKy8qCisgKiBsaW51eC9hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKgorICogSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiwgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggIEQuIEplZmYgRGlvbm5lIDxqZWZmQGxpbmVvLmNhPiwKKyAqICAgICAgICAgICAgICAgICAgICAgIEtlbm5ldGggQWxiYW5vd3NraSA8a2phaGRzQGtqYWhkcy5jb20+LAorICogIENvcHlyaWdodCAoQykgMjAwMCAgTGluZW8gSW5jLiAod3d3LmxpbmVvLmNvbSkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgIE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIExpbnV4L202OGsgc3VwcG9ydCBieSBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogNjgwNjAgZml4ZXMgYnkgSmVzcGVyIFNrb3YKKyAqIENvbGRGaXJlIHN1cHBvcnQgYnkgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqIDUzMDcgZml4ZXMgYnkgRGF2aWQgVy4gTWlsbGVyCisgKiBsaW51eCAyLjQgc3VwcG9ydCBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1Ac25hcGdlYXIuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zeXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1tYWNyb3MuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vZW50cnkuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisubWFjcm8gR0VUX1RIUkVBRF9JTkZPIHJlZworLmlmIFRIUkVBRF9TSVpFICYgMHhmZmZmMDAwMAorCWFuZGhpCVxyZWcsIHNwLCAlaGkofihUSFJFQURfU0laRS0xKSkKKy5lbHNlCisJYWRkaQlccmVnLCByMCwgJWxvKH4oVEhSRUFEX1NJWkUtMSkpCisJYW5kCVxyZWcsIFxyZWcsIHNwCisuZW5kaWYKKy5lbmRtCisKKy5tYWNybwlrdXNlcl9jbXB4Y2hnX2NoZWNrCisJLyoKKwkgKiBNYWtlIHN1cmUgb3VyIHVzZXIgc3BhY2UgYXRvbWljIGhlbHBlciBpcyByZXN0YXJ0ZWQgaWYgaXQgd2FzCisJICogaW50ZXJydXB0ZWQgaW4gYSBjcml0aWNhbCByZWdpb24uCisJICogZWEtNCA9IGFkZHJlc3Mgb2YgaW50ZXJydXB0ZWQgaW5zbiAoZWEgbXVzdCBiZSBwcmVzZXJ2ZWQpLgorCSAqIHNwID0gc2F2ZWQgcmVncy4KKwkgKiBjbXB4Y2hnX2xkdyA9IGZpcnN0IGNyaXRpY2FsIGluc24sIGNtcHhjaGdfc3R3ID0gbGFzdCBjcml0aWNhbCBpbnNuLgorCSAqIElmIGVhIDw9IGNtcHhjaGdfc3R3IGFuZCBlYSA+IGNtcHhjaGdfbGR3IHRoZW4gc2F2ZWQgRUEgaXMgc2V0IHRvCisJICogY21weGNoZ19sZHcgKyA0LgorCSovCisJLyogZXQgPSBjbXB4Y2hnX3N0dyArIDQgKi8KKwltb3Z1aSAgIGV0LCAoS1VTRVJfQkFTRSArIDQgKyAoY21weGNoZ19zdHcgLSBfX2t1c2VyX2hlbHBlcl9zdGFydCkpCisJYmd0dQllYSwgZXQsIDFmCisKKwlzdWJpCWV0LCBldCwgKGNtcHhjaGdfc3R3IC0gY21weGNoZ19sZHcpIC8qIGV0ID0gY21weGNoZ19sZHcgKyA0ICovCisJYmx0dQllYSwgZXQsIDFmCisJc3R3CWV0LCBQVF9FQShzcCkJLyogZml4IHVwIEVBICovCisJbW92CWVhLCBldAorMToKKy5lbmRtCisKKy5zZWN0aW9uIC5yb2RhdGEKKy5hbGlnbiA0CitleGNlcHRpb25fdGFibGU6CisJLndvcmQgdW5oYW5kbGVkX2V4Y2VwdGlvbgkvKiAwIC0gUmVzZXQgKi8KKwkud29yZCB1bmhhbmRsZWRfZXhjZXB0aW9uCS8qIDEgLSBQcm9jZXNzb3Itb25seSBSZXNldCAqLworCS53b3JkIGV4dGVybmFsX2ludGVycnVwdAkvKiAyIC0gSW50ZXJydXB0ICovCisJLndvcmQgaGFuZGxlX3RyYXAJCS8qIDMgLSBUcmFwIEluc3RydWN0aW9uICovCisKKwkud29yZCBpbnN0cnVjdGlvbl90cmFwCQkvKiA0IC0gVW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbiAqLworCS53b3JkIGhhbmRsZV9pbGxlZ2FsCQkvKiA1IC0gSWxsZWdhbCBpbnN0cnVjdGlvbiAqLworCS53b3JkIGhhbmRsZV91bmFsaWduZWQJCS8qIDYgLSBNaXNhbGlnbmVkIGRhdGEgYWNjZXNzICovCisJLndvcmQgaGFuZGxlX3VuYWxpZ25lZAkJLyogNyAtIE1pc2FsaWduZWQgZGVzdGluYXRpb24gYWRkcmVzcyAqLworCisJLndvcmQgaGFuZGxlX2RpdmVycm9yCQkvKiA4IC0gRGl2aXNpb24gZXJyb3IgKi8KKwkud29yZCBwcm90ZWN0aW9uX2V4Y2VwdGlvbl9iYQkvKiA5IC0gU3VwZXJ2aXNvci1vbmx5IGluc3RyLiBhZGRyZXNzICovCisJLndvcmQgcHJvdGVjdGlvbl9leGNlcHRpb25faW5zdHIgLyogMTAgLSBTdXBlcnZpc29yIG9ubHkgaW5zdHJ1Y3Rpb24gKi8KKwkud29yZCBwcm90ZWN0aW9uX2V4Y2VwdGlvbl9iYQkvKiAxMSAtIFN1cGVydmlzb3Igb25seSBkYXRhIGFkZHJlc3MgKi8KKworCS53b3JkIHVuaGFuZGxlZF9leGNlcHRpb24JLyogMTIgLSBEb3VibGUgVExCIG1pc3MgKGRhdGEpICovCisJLndvcmQgcHJvdGVjdGlvbl9leGNlcHRpb25fcHRlCS8qIDEzIC0gVExCIHBlcm1pc3Npb24gdmlvbGF0aW9uICh4KSAqLworCS53b3JkIHByb3RlY3Rpb25fZXhjZXB0aW9uX3B0ZQkvKiAxNCAtIFRMQiBwZXJtaXNzaW9uIHZpb2xhdGlvbiAocikgKi8KKwkud29yZCBwcm90ZWN0aW9uX2V4Y2VwdGlvbl9wdGUJLyogMTUgLSBUTEIgcGVybWlzc2lvbiB2aW9sYXRpb24gKHcpICovCisKKwkud29yZCB1bmhhbmRsZWRfZXhjZXB0aW9uCS8qIDE2IC0gTVBVIHJlZ2lvbiB2aW9sYXRpb24gKi8KKwordHJhcF90YWJsZToKKwkud29yZAloYW5kbGVfc3lzdGVtX2NhbGwJLyogMCAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDEgICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyICAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMyAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDQgICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiA1ICAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogNiAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDcgICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiA4ICAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogOSAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDEwICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAxMSAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMTIgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDEzICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAxNCAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMTUgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDE2ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAxNyAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMTggKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDE5ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyMCAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMjEgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDIyICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyMyAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMjQgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDI1ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyNiAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMjcgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDI4ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyOSAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMzAgKi8KKwkud29yZAloYW5kbGVfYnJlYWtwb2ludAkvKiAzMSAqLworCisudGV4dAorLnNldCBub2F0Cisuc2V0IG5vYnJlYWsKKworRU5UUlkoaW50aGFuZGxlcikKKwlTQVZFX0FMTAorCisJa3VzZXJfY21weGNoZ19jaGVjaworCisJLyogQ2xlYXIgRUggYml0IGJlZm9yZSB3ZSBnZXQgYSBuZXcgZXhjcGV0aW9uIGluIHRoZSBrZXJuZWwKKwkgKiBhbmQgYWZ0ZXIgd2UgaGF2ZSBzYXZlZCBpdCB0byB0aGUgZXhjZXB0aW9uIGZyYW1lLiBUaGlzIGlzIGRvbmUKKwkgKiB3aGV0aGVyIGl0J3MgdHJhcCwgdGxiLW1pc3Mgb3IgaW50ZXJydXB0LiBJZiB3ZSBkb24ndCBkbyB0aGlzCisJICogZXN0YXR1cyBpcyBub3QgdXBkYXRlZCB0aGUgbmV4dCBleGNlcHRpb24uCisJICovCisJcmRjdGwJcjI0LCBzdGF0dXMKKwltb3ZpCXI5LCAlbG8oflNUQVRVU19FSCkKKwlhbmQJcjI0LCByMjQsIHI5CisJd3JjdGwJc3RhdHVzLCByMjQKKworCS8qIFJlYWQgY2F1c2UgYW5kIHZlY3RvciBhbmQgYnJhbmNoIHRvIHRoZSBhc3NvY2lhdGVkIGhhbmRsZXIgKi8KKwltb3YJcjQsIHNwCisJcmRjdGwJcjUsIGV4Y2VwdGlvbgorCW1vdmlhCXI5LCBleGNlcHRpb25fdGFibGUKKwlhZGQJcjI0LCByOSwgcjUKKwlsZHcJcjI0LCAwKHIyNCkKKwlqbXAJcjI0CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIYW5kbGUgdHJhcHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitFTlRSWShoYW5kbGVfdHJhcCkKKwlsZHcJcjI0LCAtNChlYSkJLyogaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZWQgdGhlIGV4Y2VwdGlvbiAqLworCXNybGkJcjI0LCByMjQsIDQKKwlhbmRpCXIyNCwgcjI0LCAweDdjCisJbW92aWEJcjksdHJhcF90YWJsZQorCWFkZAlyMjQsIHIyNCwgcjkKKwlsZHcJcjI0LCAwKHIyNCkKKwlqbXAJcjI0CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIYW5kbGUgc3lzdGVtIGNhbGxzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworRU5UUlkoaGFuZGxlX3N5c3RlbV9jYWxsKQorCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJcmRjdGwJcjEwLCBzdGF0dXMKKwlvcmkJcjEwLCByMTAsIFNUQVRVU19QSUUKKwl3cmN0bAlzdGF0dXMsIHIxMAorCisJLyogUmVsb2FkIHJlZ2lzdGVycyBkZXN0cm95ZWQgYnkgY29tbW9uIGNvZGUuICovCisJbGR3CXI0LCBQVF9SNChzcCkKKwlsZHcJcjUsIFBUX1I1KHNwKQorCitsb2NhbF9yZXN0YXJ0OgorCS8qIENoZWNrIHRoYXQgdGhlIHJlcXVlc3RlZCBzeXN0ZW0gY2FsbCBpcyB3aXRoaW4gbGltaXRzICovCisJbW92dWkJcjEsIF9fTlJfc3lzY2FsbHMKKwliZ2V1CXIyLCByMSwgcmV0X2ludnN5c2NhbGwKKwlzbGxpCXIxLCByMiwgMgorCW1vdmhpCXIxMSwgJWhpYWRqKHN5c19jYWxsX3RhYmxlKQorCWFkZAlyMSwgcjEsIHIxMQorCWxkdwlyMSwgJWxvKHN5c19jYWxsX3RhYmxlKShyMSkKKwliZXEJcjEsIHIwLCByZXRfaW52c3lzY2FsbAorCisJLyogQ2hlY2sgaWYgd2UgYXJlIGJlaW5nIHRyYWNlZCAqLworCUdFVF9USFJFQURfSU5GTyByMTEKKwlsZHcJcjExLFRJX0ZMQUdTKHIxMSkKKwlCVEJOWiAgIHIxMSxyMTEsVElGX1NZU0NBTExfVFJBQ0UsdHJhY2VkX3N5c3RlbV9jYWxsCisKKwkvKiBFeGVjdXRlIHRoZSBzeXN0ZW0gY2FsbCAqLworCWNhbGxyCXIxCisKKwkvKiBJZiB0aGUgc3lzY2FsbCByZXR1cm5zIGEgbmVnYXRpdmUgcmVzdWx0OgorCSAqICAgU2V0IHI3IHRvIDEgdG8gaW5kaWNhdGUgZXJyb3IsCisJICogICBOZWdhdGUgcjIgdG8gZ2V0IGEgcG9zaXRpdmUgZXJyb3IgY29kZQorCSAqIElmIHRoZSBzeXNjYWxsIHJldHVybnMgemVybyBvciBhIHBvc2l0aXZlIHZhbHVlOgorCSAqICAgU2V0IHI3IHRvIDAuCisJICogVGhlIHNpZ3JldHVybiBzeXN0ZW0gY2FsbHMgd2lsbCBza2lwIHRoZSBjb2RlIGJlbG93IGJ5CisJICogYWRkaW5nIHRvIHJlZ2lzdGVyIHJhLiBUbyBhdm9pZCBkZXN0cm95aW5nIHJlZ2lzdGVycworCSAqLwordHJhbnNsYXRlX3JjX2FuZF9yZXQ6CisJbW92aQlyMSwgMAorCWJnZQlyMiwgemVybywgM2YKKwlzdWIJcjIsIHplcm8sIHIyCisJbW92aQlyMSwgMQorMzoKKwlzdHcJcjIsIFBUX1IyKHNwKQorCXN0dwlyMSwgUFRfUjcoc3ApCitlbmRfdHJhbnNsYXRlX3JjX2FuZF9yZXQ6CisKK3JldF9mcm9tX2V4Y2VwdGlvbjoKKwlsZHcJcjEsIFBUX0VTVEFUVVMoc3ApCisJLyogaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscyAqLworCVRTVEJOWglyMSwgcjEsIEVTVEFUVVNfRVUsIEx1c2VyX3JldHVybgorCityZXN0b3JlX2FsbDoKKwlyZGN0bAlyMTAsIHN0YXR1cwkJCS8qIGRpc2FibGUgaW50cnMgKi8KKwlhbmRpCXIxMCwgcjEwLCAlbG8oflNUQVRVU19QSUUpCisJd3JjdGwJc3RhdHVzLCByMTAKKwlSRVNUT1JFX0FMTAorCWVyZXQKKworCS8qIElmIHRoZSBzeXNjYWxsIG51bWJlciB3YXMgaW52YWxpZCByZXR1cm4gRU5PU1lTICovCityZXRfaW52c3lzY2FsbDoKKwltb3ZpCXIyLCAtRU5PU1lTCisJYnIJdHJhbnNsYXRlX3JjX2FuZF9yZXQKKworCS8qIFRoaXMgaW1wbGVtZW50cyB0aGUgc2FtZSBhcyBhYm92ZSwgZXhjZXB0IGl0IGNhbGxzCisJICogZG9fc3lzY2FsbF90cmFjZV9lbnRlciBhbmQgZG9fc3lzY2FsbF90cmFjZV9leGl0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisJICogc3lzY2FsbCBpbiBvcmRlciBmb3IgdXRpbGl0aWVzIGxpa2Ugc3RyYWNlIGFuZCBnZGIgdG8gd29yay4KKwkgKi8KK3RyYWNlZF9zeXN0ZW1fY2FsbDoKKwlTQVZFX1NXSVRDSF9TVEFDSworCWNhbGwJZG9fc3lzY2FsbF90cmFjZV9lbnRlcgorCVJFU1RPUkVfU1dJVENIX1NUQUNLCisKKwkvKiBDcmVhdGUgc3lzdGVtIGNhbGwgcmVnaXN0ZXIgYXJndW1lbnRzLiBUaGUgNXRoIGFuZCA2dGgKKwkgICBhcmd1bWVudHMgb24gc3RhY2sgYXJlIGFscmVhZHkgaW4gcGxhY2UgYXQgdGhlIGJlZ2lubmluZworCSAgIG9mIHB0X3JlZ3MuICovCisJbGR3CXIyLCBQVF9SMihzcCkKKwlsZHcJcjQsIFBUX1I0KHNwKQorCWxkdwlyNSwgUFRfUjUoc3ApCisJbGR3CXI2LCBQVF9SNihzcCkKKwlsZHcJcjcsIFBUX1I3KHNwKQorCisJLyogRmV0Y2ggdGhlIHN5c2NhbGwgZnVuY3Rpb24sIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIGJvdW5kYXJpZXMKKwkgKiBzaW5jZSB0aGlzIGlzIGFscmVhZHkgZG9uZS4KKwkgKi8KKwlzbGxpCXIxLCByMiwgMgorCW1vdmhpCXIxMSwlaGlhZGooc3lzX2NhbGxfdGFibGUpCisJYWRkCXIxLCByMSwgcjExCisJbGR3CXIxLCAlbG8oc3lzX2NhbGxfdGFibGUpKHIxKQorCisJY2FsbHIJcjEKKworCS8qIElmIHRoZSBzeXNjYWxsIHJldHVybnMgYSBuZWdhdGl2ZSByZXN1bHQ6CisJICogICBTZXQgcjcgdG8gMSB0byBpbmRpY2F0ZSBlcnJvciwKKwkgKiAgIE5lZ2F0ZSByMiB0byBnZXQgYSBwb3NpdGl2ZSBlcnJvciBjb2RlCisJICogSWYgdGhlIHN5c2NhbGwgcmV0dXJucyB6ZXJvIG9yIGEgcG9zaXRpdmUgdmFsdWU6CisJICogICBTZXQgcjcgdG8gMC4KKwkgKiBUaGUgc2lncmV0dXJuIHN5c3RlbSBjYWxscyB3aWxsIHNraXAgdGhlIGNvZGUgYmVsb3cgYnkKKwkgKiBhZGRpbmcgdG8gcmVnaXN0ZXIgcmEuIFRvIGF2b2lkIGRlc3Ryb3lpbmcgcmVnaXN0ZXJzCisJICovCit0cmFuc2xhdGVfcmNfYW5kX3JldDI6CisJbW92aQlyMSwgMAorCWJnZQlyMiwgemVybywgNGYKKwlzdWIJcjIsIHplcm8sIHIyCisJbW92aQlyMSwgMQorNDoKKwlzdHcJcjIsIFBUX1IyKHNwKQorCXN0dwlyMSwgUFRfUjcoc3ApCitlbmRfdHJhbnNsYXRlX3JjX2FuZF9yZXQyOgorCVNBVkVfU1dJVENIX1NUQUNLCisJY2FsbAlkb19zeXNjYWxsX3RyYWNlX2V4aXQKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCitMdXNlcl9yZXR1cm46CisJR0VUX1RIUkVBRF9JTkZPCXIxMQkJCS8qIGdldCB0aHJlYWRfaW5mbyBwb2ludGVyICovCisJbGR3CXIxMCwgVElfRkxBR1MocjExKQkJLyogZ2V0IHRocmVhZF9pbmZvLT5mbGFncyAqLworCUFOREkzMglyMTEsIHIxMCwgX1RJRl9XT1JLX01BU0sKKwliZXEJcjExLCByMCwgcmVzdG9yZV9hbGwJCS8qIE5vdGhpbmcgdG8gZG8gKi8KKwlCVEJaCXIxLCByMTAsIFRJRl9ORUVEX1JFU0NIRUQsIExzaWduYWxfcmV0dXJuCisKKwkvKiBSZXNjaGVkdWxlIHdvcmsgKi8KKwljYWxsCXNjaGVkdWxlCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK0xzaWduYWxfcmV0dXJuOgorCUFOREkzMglyMSwgcjEwLCBfVElGX1NJR1BFTkRJTkcgfCBfVElGX05PVElGWV9SRVNVTUUKKwliZXEJcjEsIHIwLCByZXN0b3JlX2FsbAorCW1vdglyNCwgc3AJCQkvKiBwdF9yZWdzICovCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwljYWxsCWRvX25vdGlmeV9yZXN1bWUKKwliZXEJcjIsIHIwLCBub193b3JrX3BlbmRpbmcKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCS8qIHByZXBhcmUgcmVzdGFydCBzeXNjYWxsIGhlcmUgd2l0aG91dCBsZWF2aW5nIGtlcm5lbCAqLworCWxkdwlyMiwgUFRfUjIoc3ApCS8qIHJlbG9hZCBzeXNjYWxsIG51bWJlciBpbiByMiAqLworCWxkdyAJcjQsIFBUX1I0KHNwKQkvKiByZWxvYWQgc3lzY2FsbCBhcmd1bWVudHMgcjQtcjkgKi8KKwlsZHcgCXI1LCBQVF9SNShzcCkKKwlsZHcgCXI2LCBQVF9SNihzcCkKKwlsZHcgCXI3LCBQVF9SNyhzcCkKKwlsZHcgCXI4LCBQVF9SOChzcCkKKwlsZHcgCXI5LCBQVF9SOShzcCkKKwlicglsb2NhbF9yZXN0YXJ0CS8qIHJlc3RhcnQgc3lzY2FsbCAqLworCitub193b3JrX3BlbmRpbmc6CisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlicglyZXRfZnJvbV9leGNlcHRpb24KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIYW5kbGUgZXh0ZXJuYWwgaW50ZXJydXB0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisvKgorICogVGhpcyBpcyB0aGUgZ2VuZXJpYyBpbnRlcnJ1cHQgaGFuZGxlciAoZm9yIGFsbCBoYXJkd2FyZSBpbnRlcnJ1cHQKKyAqIHNvdXJjZXMpLiBJdCBmaWd1cmVzIG91dCB0aGUgdmVjdG9yIG51bWJlciBhbmQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlCisgKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGRpcmVjdGx5LgorICovCitleHRlcm5hbF9pbnRlcnJ1cHQ6CisJcmRjdGwJcjEyLCBpcGVuZGluZworCXJkY3RsCXI5LCBpZW5hYmxlCisJYW5kCXIxMiwgcjEyLCByOQorCS8qIHNraXAgaWYgbm8gaW50ZXJydXB0IGlzIHBlbmRpbmcgKi8KKwliZXEJcjEyLCByMCwgcmV0X2Zyb21faW50ZXJydXB0CisKKwltb3ZpCXIyNCwgLTEKKwlzdHcJcjI0LCBQVF9PUklHX1IyKHNwKQorCisJLyoKKwkgKiBQcm9jZXNzIGFuIGV4dGVybmFsIGhhcmR3YXJlIGludGVycnVwdC4KKwkgKi8KKworCWFkZGkJZWEsIGVhLCAtNAkvKiByZS1pc3N1ZSB0aGUgaW50ZXJydXB0ZWQgaW5zdHJ1Y3Rpb24gKi8KKwlzdHcJZWEsIFBUX0VBKHNwKQorMjoJbW92aQlyNCwgJWxvKC0xKQkvKiBTdGFydCBmcm9tIGJpdCBwb3NpdGlvbiAwLAorCQkJCQloaWdoZXN0IHByaW9yaXR5ICovCisJCQkJLyogVGhpcyBpcyB0aGUgSVJRICMgZm9yIGhhbmRsZXIgY2FsbCAqLworMToJYW5kaQlyMTAsIHIxMiwgMQkvKiBJc29sYXRlIGJpdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAqLworCXNybGkJcjEyLCByMTIsIDEJLyogc2hpZnQgY291bnQgaXMgY29zdGx5IHdpdGhvdXQgaGFyZHdhcmUKKwkJCQkJbXVsdGlwbGllciAqLworCWFkZGkJcjQsIHI0LCAxCisJYmVxCXIxMCwgcjAsIDFiCisJbW92CXI1LCBzcAkJLyogU2V0dXAgcHRfcmVncyBwb2ludGVyIGZvciBoYW5kbGVyIGNhbGwgKi8KKwljYWxsCWRvX0lSUQorCXJkY3RsCXIxMiwgaXBlbmRpbmcJLyogY2hlY2sgYWdhaW4gaWYgaXJxIHN0aWxsIHBlbmRpbmcgKi8KKwlyZGN0bAlyOSwgaWVuYWJsZQkvKiBJc29sYXRlIHBvc3NpYmxlIGludGVycnVwdHMgKi8KKwlhbmQJcjEyLCByMTIsIHI5CisJYm5lCXIxMiwgcjAsIDJiCisJLyogYnIJcmV0X2Zyb21faW50ZXJydXB0ICovIC8qIGZhbGwgdGhyb3VnaCB0byByZXRfZnJvbV9pbnRlcnJ1cHQgKi8KKworRU5UUlkocmV0X2Zyb21faW50ZXJydXB0KQorCWxkdwlyMSwgUFRfRVNUQVRVUyhzcCkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCAqLworCVRTVEJOWglyMSwgcjEsIEVTVEFUVVNfRVUsIEx1c2VyX3JldHVybgorCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwlHRVRfVEhSRUFEX0lORk8JcjEKKwlsZHcJcjQsIFRJX1BSRUVNUFRfQ09VTlQocjEpCisJYm5lCXI0LCByMCwgcmVzdG9yZV9hbGwKKworbmVlZF9yZXNjaGVkOgorCWxkdwlyNCwgVElfRkxBR1MocjEpCQkvKiA/IE5lZWQgcmVzY2hlZCBzZXQgKi8KKwlCVEJaCXIxMCwgcjQsIFRJRl9ORUVEX1JFU0NIRUQsIHJlc3RvcmVfYWxsCisJbGR3CXI0LCBQVF9FU1RBVFVTKHNwKQkvKiA/IEludGVycnVwdHMgb2ZmICovCisJYW5kaQlyMTAsIHI0LCBFU1RBVFVTX0VQSUUKKwliZXEJcjEwLCByMCwgcmVzdG9yZV9hbGwKKwltb3ZpYQlyNCwgUFJFRU1QVF9BQ1RJVkUKKwlzdHcJcjQsIFRJX1BSRUVNUFRfQ09VTlQocjEpCisJcmRjdGwJcjEwLCBzdGF0dXMJCS8qIGVuYWJsZSBpbnRycyBhZ2FpbiAqLworCW9yaQlyMTAsIHIxMCAsU1RBVFVTX1BJRQorCXdyY3RsCXN0YXR1cywgcjEwCisJUFVTSAlyMQorCWNhbGwJc2NoZWR1bGUKKwlQT1AJcjEKKwltb3YJcjQsIHIwCisJc3R3CXI0LCBUSV9QUkVFTVBUX0NPVU5UKHIxKQorCXJkY3RsCXIxMCwgc3RhdHVzCQkvKiBkaXNhYmxlIGludHJzICovCisJYW5kaQlyMTAsIHIxMCwgJWxvKH5TVEFUVVNfUElFKQorCXdyY3RsCXN0YXR1cywgcjEwCisJYnIJbmVlZF9yZXNjaGVkCisjZWxzZQorCWJyCXJlc3RvcmVfYWxsCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBIGZldyBzeXNjYWxsIHdyYXBwZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworLyoKKyAqIGludCBjbG9uZSh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIG5ld3NwLAorICoJCWludCBfX3VzZXIgKiBwYXJlbnRfdGlkcHRyLCBpbnQgX191c2VyICogY2hpbGRfdGlkcHRyLAorICoJCWludCB0bHNfdmFsKQorICovCitFTlRSWShzeXNfY2xvbmUpCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwlhZGRpCXNwLCBzcCwgLTQKKwlzdHcJcjcsIDAoc3ApCS8qIFBhc3MgNXRoIGFyZyB0aHJ1IHN0YWNrICovCisJbW92CXI3LCByNgkJLyogNHRoIGFyZyBpcyAzcmQgb2YgY2xvbmUoKSAqLworCW1vdglyNiwgemVybwkvKiAzcmQgYXJnIGFsd2F5cyAwICovCisJY2FsbAlkb19mb3JrCisJYWRkaQlzcCwgc3AsIDQKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCXJldAorCitFTlRSWShzeXNfcnRfc2lncmV0dXJuKQorCVNBVkVfU1dJVENIX1NUQUNLCisJbW92CXI0LCBzcAorCWNhbGwJZG9fcnRfc2lncmV0dXJuCisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlhZGRpCXJhLCByYSwgKGVuZF90cmFuc2xhdGVfcmNfYW5kX3JldCAtIHRyYW5zbGF0ZV9yY19hbmRfcmV0KQorCXJldAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgZmV3IG90aGVyIHdyYXBwZXJzIGFuZCBzdHVicworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3Byb3RlY3Rpb25fZXhjZXB0aW9uX3B0ZToKKwlyZGN0bAlyNiwgcHRlYWRkcgorCXNsbGkJcjYsIHI2LCAxMAorCWNhbGwJZG9fcGFnZV9mYXVsdAorCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCitwcm90ZWN0aW9uX2V4Y2VwdGlvbl9iYToKKwlyZGN0bAlyNiwgYmFkYWRkcgorCWNhbGwJZG9fcGFnZV9mYXVsdAorCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCitwcm90ZWN0aW9uX2V4Y2VwdGlvbl9pbnN0cjoKKwljYWxsCWhhbmRsZV9zdXBlcnZpc29yX2luc3RyCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK2hhbmRsZV9icmVha3BvaW50OgorCWNhbGwJYnJlYWtwb2ludF9jCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKKyNpZmRlZiBDT05GSUdfTklPUzJfQUxJR05NRU5UX1RSQVAKK2hhbmRsZV91bmFsaWduZWQ6CisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwljYWxsCWhhbmRsZV91bmFsaWduZWRfYworCVJFU1RPUkVfU1dJVENIX1NUQUNLCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisjZWxzZQoraGFuZGxlX3VuYWxpZ25lZDoKKwljYWxsCWhhbmRsZV91bmFsaWduZWRfYworCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorI2VuZGlmCisKK2hhbmRsZV9pbGxlZ2FsOgorCWNhbGwJaGFuZGxlX2lsbGVnYWxfYworCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCitoYW5kbGVfZGl2ZXJyb3I6CisJY2FsbAloYW5kbGVfZGl2ZXJyb3JfYworCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCisvKgorICogQmV3YXJlIC0gd2hlbiBlbnRlcmluZyByZXN1bWUsIHByZXYgKHRoZSBjdXJyZW50IHRhc2spIGlzCisgKiBpbiByNCwgbmV4dCAodGhlIG5ldyB0YXNrKSBpcyBpbiByNSwgZG9uJ3QgY2hhbmdlIHRoZXNlCisgKiByZWdpc3RlcnMuCisgKi8KK0VOVFJZKHJlc3VtZSkKKworCXJkY3RsCXI3LCBzdGF0dXMJCQkvKiBzYXZlIHRocmVhZCBzdGF0dXMgcmVnICovCisJc3R3CXI3LCBUQVNLX1RIUkVBRCArIFRIUkVBRF9LUFNSKHI0KQorCisJYW5kaQlyNywgcjcsICVsbyh+U1RBVFVTX1BJRSkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJd3JjdGwJc3RhdHVzLCByNworCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwlzdHcJc3AsIFRBU0tfVEhSRUFEICsgVEhSRUFEX0tTUChyNCkvKiBzYXZlIGtlcm5lbCBzdGFjayBwb2ludGVyICovCisJbGR3CXNwLCBUQVNLX1RIUkVBRCArIFRIUkVBRF9LU1AocjUpLyogcmVzdG9yZSBuZXcgdGhyZWFkIHN0YWNrICovCisJbW92aWEJcjI0LCBfY3VycmVudF90aHJlYWQJCS8qIHNhdmUgdGhyZWFkICovCisJR0VUX1RIUkVBRF9JTkZPIHIxCisJc3R3CXIxLCAwKHIyNCkKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCisJbGR3CXI3LCBUQVNLX1RIUkVBRCArIFRIUkVBRF9LUFNSKHI1KS8qIHJlc3RvcmUgdGhyZWFkIHN0YXR1cyByZWcgKi8KKwl3cmN0bAlzdGF0dXMsIHI3CisJcmV0CisKK0VOVFJZKHJldF9mcm9tX2ZvcmspCisJY2FsbAlzY2hlZHVsZV90YWlsCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK0VOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpCisJY2FsbAlzY2hlZHVsZV90YWlsCisJbW92CXI0LHIxNwkvKiBhcmcgKi8KKwljYWxscglyMTYJLyogZnVuY3Rpb24gKi8KKwlicglyZXRfZnJvbV9leGNlcHRpb24KKworLyoKKyAqIEtlcm5lbCB1c2VyIGhlbHBlcnMuCisgKgorICogRWFjaCBzZWdtZW50IGlzIDY0LWJ5dGUgYWxpZ25lZCBhbmQgd2lsbCBiZSBtYXBwZWQgdG8gdGhlIDxVc2VyIHNwYWNlPi4KKyAqIE5ldyBzZWdtZW50cyAoaWYgZXZlciBuZWVkZWQpIG11c3QgYmUgYWRkZWQgYWZ0ZXIgdGhlIGV4aXN0aW5nIG9uZXMuCisgKiBUaGlzIG1lY2hhbmlzbSBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciB0aGluZ3MgdGhhdCBhcmUgcmVhbGx5IHNtYWxsIGFuZAorICoganVzdGlmaWVkLCBhbmQgbm90IGJlIGFidXNlZCBmcmVlbHkuCisgKgorICovCisKKyAvKiBGaWxsaW5nIHBhZHMgd2l0aCB1bmRlZmluZWQgaW5zdHJ1Y3Rpb25zLiAqLworLm1hY3JvCWt1c2VyX3BhZCBzeW0gc2l6ZQorCS5pZgkoKC4gLSBcc3ltKSAmIDMpCisJLnJlcHQJKDQgLSAoLiAtIFxzeW0pICYgMykKKwkuYnl0ZQkwCisJLmVuZHIKKwkuZW5kaWYKKwkucmVwdAkoKFxzaXplIC0gKC4gLSBcc3ltKSkgLyA0KQorCS53b3JkCTB4ZGVhZGJlZWYKKwkuZW5kcgorLmVuZG0KKworCS5hbGlnbgk2CisJLmdsb2JsCV9fa3VzZXJfaGVscGVyX3N0YXJ0CitfX2t1c2VyX2hlbHBlcl9zdGFydDoKKworX19rdXNlcl9oZWxwZXJfdmVyc2lvbjoJCQkJLyogQCAweDEwMDAgKi8KKwkud29yZAkoKF9fa3VzZXJfaGVscGVyX2VuZCAtIF9fa3VzZXJfaGVscGVyX3N0YXJ0KSA+PiA2KQorCitfX2t1c2VyX2NtcHhjaGc6CQkJCS8qIEAgMHgxMDA0ICovCisJLyoKKwkgKiByNCBwb2ludGVyIHRvIGV4Y2hhbmdlIHZhcmlhYmxlCisJICogcjUgb2xkIHZhbHVlCisJICogcjYgbmV3IHZhbHVlCisJICovCitjbXB4Y2hnX2xkdzoKKwlsZHcJcjIsIDAocjQpCQkJLyogbG9hZCBjdXJyZW50IHZhbHVlICovCisJc3ViCXIyLCByMiwgcjUJCQkvKiBjb21wYXJlIHdpdGggb2xkIHZhbHVlICovCisJYm5lCXIyLCB6ZXJvLCBjbXB4Y2hnX3JldAorCisJLyogV2UgaGFkIGEgbWF0Y2gsIHN0b3JlIHRoZSBuZXcgdmFsdWUgKi8KK2NtcHhjaGdfc3R3OgorCXN0dwlyNiwgMChyNCkKK2NtcHhjaGdfcmV0OgorCXJldAorCisJa3VzZXJfcGFkIF9fa3VzZXJfY21weGNoZywgNjQKKworCS5nbG9ibAlfX2t1c2VyX3NpZ3RyYW1wCitfX2t1c2VyX3NpZ3RyYW1wOgorCW1vdmkJcjIsIF9fTlJfcnRfc2lncmV0dXJuCisJdHJhcAorCisJa3VzZXJfcGFkIF9fa3VzZXJfc2lndHJhbXAsIDY0CisKKwkuZ2xvYmwJX19rdXNlcl9oZWxwZXJfZW5kCitfX2t1c2VyX2hlbHBlcl9lbmQ6CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9oZWFkLlMgYi9hcmNoL25pb3MyL2tlcm5lbC9oZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyY2U0YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL2hlYWQuUwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICogQ29weXJpZ2h0IChDKSAyMDAxIFZpYyBQaGlsbGlwcywgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogQmFzZWQgb24gaGVhZC5TIGZvciBBbHRlcmEncyBFeGNhbGlidXIgZGV2ZWxvcG1lbnQgYm9hcmQgd2l0aCBuaW9zIHByb2Nlc3NvcgorICoKKyAqIEJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgRXhjYWxpYnVyIHNkayBkaXN0cmlidXRpb246CisgKglOQV9NZW1vcnlNYXAucywgTlJfSnVtcFRvU3RhcnQucywgTlJfU2V0dXAucywgTlJfQ1dQTWFuYWdlci5zCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW1hY3Jvcy5oPgorCisvKgorICogWkVST19QQUdFIGlzIGEgc3BlY2lhbCBwYWdlIHRoYXQgaXMgdXNlZCBmb3IgemVyby1pbml0aWFsaXplZAorICogZGF0YSBhbmQgQ09XLgorICovCisuZGF0YQorLmdsb2JhbCBlbXB0eV96ZXJvX3BhZ2UKKy5hbGlnbiAxMgorZW1wdHlfemVyb19wYWdlOgorCS5zcGFjZQlQQUdFX1NJWkUKKworLyoKKyAqIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgYXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBuaW9zJworICogU1RBVFVTIHJlZ2lzdGVyIHRvIGVtdWxhdGUgYSB1c2VyL3N1cGVydmlzb3IgbW9kZS4KKyAqLworCS5kYXRhCisJLmFsaWduCTIKKwkuc2V0IG5vYXQKKworCS5nbG9iYWwgX2N1cnJlbnRfdGhyZWFkCitfY3VycmVudF90aHJlYWQ6CisJLmxvbmcJMAorLyoKKyAqIElucHV0KHMpOiBwYXNzZWQgZnJvbSB1LWJvb3QKKyAqICAgcjQgLSBPcHRpb25hbCBwb2ludGVyIHRvIGEgYm9hcmQgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICogICByNSAtIE9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIHBoeXNpY2FsIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGluaXQgUkFNCisgKiAgICAgICAgZGlzay4KKyAqICAgcjYgLSBPcHRpb25hbCBwb2ludGVyIHRvIHRoZSBwaHlzaWNhbCBlbmRpbmcgYWRkcmVzcyBvZiB0aGUgaW5pdCBSQU0KKyAqICAgICAgICBkaXNrLgorICogICByNyAtIE9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIHBoeXNpY2FsIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgYW55IGtlcm5lbAorICogICAgICAgIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLgorICovCisKKy8qCisgKiBGaXJzdCBleGVjdXRhYmxlIGNvZGUgLSBkZXRlY3RlZCBhbmQganVtcGVkIHRvIGJ5IHRoZSBST00gYm9vdHN0cmFwCisgKiBpZiB0aGUgY29kZSByZXNpZGVzIGluIGZsYXNoIChsb29rcyBmb3IgIk5pb3MiIGF0IG9mZnNldCAweDBjIGZyb20KKyAqIHRoZSBwb3RlbnRpYWwgZXhlY3V0YWJsZSBpbWFnZSkuCisgKi8KKwlfX0hFQUQKK0VOVFJZKF9zdGFydCkKKwl3cmN0bAlzdGF0dXMsIHIwCQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKworCS8qIEluaXRpYWxpemUgYWxsIGNhY2hlIGxpbmVzIHdpdGhpbiB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8KKwltb3ZpYQlyMSwgTklPUzJfSUNBQ0hFX1NJWkUKKwltb3Z1aQlyMiwgTklPUzJfSUNBQ0hFX0xJTkVfU0laRQorCitpY2FjaGVfaW5pdDoKKwlpbml0aQlyMQorCXN1YglyMSwgcjEsIHIyCisJYmd0CXIxLCByMCwgaWNhY2hlX2luaXQKKwlicgkxZgorCisJLyoKKwkgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIENvZGUgaW4ganVtcAorCSAqIHRvIG91ciBoYW5kbGVyCisJICovCitFTlRSWShleGNlcHRpb25faGFuZGxlcl9ob29rKQorCW1vdmlhCXIyNCwgaW50aGFuZGxlcgorCWptcAlyMjQKKworRU5UUlkoZmFzdF9oYW5kbGVyKQorCW5leHRwYyBldAoraGVscGVyOgorCXN0dwlyMywgcjNzYXZlIC0gaGVscGVyKGV0KQorCisJcmRjdGwJcjMgLCBwdGVhZGRyCisJc3JsaQlyMywgcjMsIDEyCisJc2xsaQlyMywgcjMsIDIKKwltb3ZpYQlldCwgcGdkX2N1cnJlbnQKKworCWxkdwlldCwgMChldCkKKwlhZGQJcjMsIGV0LCByMworCWxkdwlldCwgMChyMykKKworCXJkY3RsCXIzLCBwdGVhZGRyCisJYW5kaQlyMywgcjMsIDB4ZmZmCisJYWRkCWV0LCByMywgZXQKKwlsZHcJZXQsIDAoZXQpCisJd3JjdGwJdGxiYWNjLCBldAorCW5leHRwYwlldAoraGVscGVyMjoKKwlsZHcJcjMsIHIzc2F2ZSAtIGhlbHBlcjIoZXQpCisJc3ViaQllYSwgZWEsIDQKKwllcmV0CityM3NhdmU6CisJLndvcmQgMHgwCitFTlRSWShmYXN0X2hhbmRsZXJfZW5kKQorCisxOgorCS8qCisJICogQWZ0ZXIgdGhlIGluc3RydWN0aW9uIGNhY2hlIGlzIGluaXRpYWxpemVkLCB0aGUgZGF0YSBjYWNoZSBtdXN0CisJICogYWxzbyBiZSBpbml0aWFsaXplZC4KKwkgKi8KKwltb3ZpYQlyMSwgTklPUzJfRENBQ0hFX1NJWkUKKwltb3Z1aQlyMiwgTklPUzJfRENBQ0hFX0xJTkVfU0laRQorCitkY2FjaGVfaW5pdDoKKwlpbml0ZAkwKHIxKQorCXN1YglyMSwgcjEsIHIyCisJYmd0CXIxLCByMCwgZGNhY2hlX2luaXQKKworCW5leHRwYwlyMQkJCS8qIEZpbmQgb3V0IHdoZXJlIHdlIGFyZSAqLworY2hrYWRyOgorCW1vdmlhCXIyLCBjaGthZHIKKwliZXEJcjEsIHIyLGZpbmlzaF9tb3ZlCS8qIFdlIGFyZSBydW5uaW5nIGluIFJBTSBkb25lICovCisJYWRkaQlyMSwgcjEsKF9zdGFydCAtIGNoa2FkcikJLyogU291cmNlICovCisJbW92aWEJcjIsIF9zdGFydAkJLyogRGVzdGluYXRpb24gKi8KKwltb3ZpYQlyMywgX19ic3Nfc3RhcnQJCS8qIEVuZCBvZiBjb3B5ICovCisKK2xvb3BfbW92ZToJCQkJLyogcjE6IHNyYywgcjI6IGRlc3QsIHIzOiBsYXN0IGRlc3QgKi8KKwlsZHcJcjgsIDAocjEpCQkvKiBsb2FkIGEgd29yZCBmcm9tIFtyMV0gKi8KKwlzdHcJcjgsIDAocjIpCQkvKiBzdG9yZSBhIHdvcmQgdG8gZGVzdCBbcjJdICovCisJZmx1c2hkCTAocjIpCQkJLyogRmx1c2ggY2FjaGUgZm9yIHNhZmV0eSAqLworCWFkZGkgCXIxLCByMSwgNAkJLyogaW5jIHRoZSBzcmMgYWRkciAqLworCWFkZGkJcjIsIHIyLCA0CQkvKiBpbmMgdGhlIGRlc3QgYWRkciAqLworCWJsdAlyMiwgcjMsIGxvb3BfbW92ZQorCisJbW92aWEJcjEsIGZpbmlzaF9tb3ZlCQkvKiBWTUEoX3N0YXJ0KS0+bDEgKi8KKwlqbXAJcjEJCQkvKiBqbXAgdG8gX3N0YXJ0ICovCisKK2ZpbmlzaF9tb3ZlOgorCisJLyogTWFzayBvZmYgYWxsIHBvc3NpYmxlIGludGVycnVwdHMgKi8KKwl3cmN0bAlpZW5hYmxlLCByMAorCisJLyogQ2xlYXIgLmJzcyAqLworCW1vdmlhCXIyLCBfX2Jzc19zdGFydAorCW1vdmlhCXIxLCBfX2Jzc19zdG9wCisxOgorCXN0YglyMCwgMChyMikKKwlhZGRpCXIyLCByMiwgMQorCWJuZQlyMSwgcjIsIDFiCisKKwltb3ZpYQlyMSwgaW5pdF90aHJlYWRfdW5pb24JLyogc2V0IHN0YWNrIGF0IHRvcCBvZiB0aGUgdGFzayB1bmlvbiAqLworCWFkZGkJc3AsIHIxLCBUSFJFQURfU0laRQorCW1vdmlhCXIyLCBfY3VycmVudF90aHJlYWQJLyogUmVtZW1iZXIgY3VycmVudCB0aHJlYWQgKi8KKwlzdHcJcjEsIDAocjIpCisKKwltb3ZpYQlyMSwgbmlvczJfYm9vdF9pbml0CS8qIHNhdmUgYXJncyByNC1yNyBwYXNzZWQgZnJvbSB1LWJvb3QgKi8KKwljYWxscglyMQorCisJbW92aWEJcjEsIHN0YXJ0X2tlcm5lbAkvKiBjYWxsIHN0YXJ0X2tlcm5lbCBhcyBhIHN1YnJvdXRpbmUgKi8KKwljYWxscglyMQorCisJLyogSWYgd2UgcmV0dXJuIGZyb20gc3RhcnRfa2VybmVsLCBicmVhayB0byB0aGUgb2NpIGRlYnVnZ2VyIGFuZAorCSAqIGJ1Z2dlcmVkIHdlIGFyZS4KKwkgKi8KKwlicmVhaworCisJLyogRW5kIG9mIHN0YXJ0dXAgY29kZSAqLworLnNldCBhdApkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvaW5zbmVtdS5TIGIvYXJjaC9uaW9zMi9rZXJuZWwvaW5zbmVtdS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmI2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9pbnNuZW11LlMKQEAgLTAsMCArMSw1OTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vZW50cnkuaD4KKworLnNldCBub2F0Cisuc2V0IG5vYnJlYWsKKworLyoKKyogRXhwbGljaXRseSBhbGxvdyB0aGUgdXNlIG9mIHIxICh0aGUgYXNzZW1ibGVyIHRlbXBvcmFyeSByZWdpc3RlcikKKyogd2l0aGluIHRoaXMgY29kZS4gVGhpcyByZWdpc3RlciBpcyBub3JtYWxseSByZXNlcnZlZCBmb3IgdGhlIHVzZSBvZgorKiB0aGUgY29tcGlsZXIuCisqLworCitFTlRSWShpbnN0cnVjdGlvbl90cmFwKQorCWxkdwlyMSwgUFRfUjEoc3ApCQkvLyBSZXN0b3JlIHJlZ2lzdGVycworCWxkdwlyMiwgUFRfUjIoc3ApCisJbGR3CXIzLCBQVF9SMyhzcCkKKwlsZHcJcjQsIFBUX1I0KHNwKQorCWxkdwlyNSwgUFRfUjUoc3ApCisJbGR3CXI2LCBQVF9SNihzcCkKKwlsZHcJcjcsIFBUX1I3KHNwKQorCWxkdwlyOCwgUFRfUjgoc3ApCisJbGR3CXI5LCBQVF9SOShzcCkKKwlsZHcJcjEwLCBQVF9SMTAoc3ApCisJbGR3CXIxMSwgUFRfUjExKHNwKQorCWxkdwlyMTIsIFBUX1IxMihzcCkKKwlsZHcJcjEzLCBQVF9SMTMoc3ApCisJbGR3CXIxNCwgUFRfUjE0KHNwKQorCWxkdwlyMTUsIFBUX1IxNShzcCkKKwlsZHcJcmEsIFBUX1JBKHNwKQorCWxkdwlmcCwgUFRfRlAoc3ApCisJbGR3CWdwLCBQVF9HUChzcCkKKwlsZHcJZXQsIFBUX0VTVEFUVVMoc3ApCisJd3JjdGwJZXN0YXR1cywgZXQKKwlsZHcJZWEsIFBUX0VBKHNwKQorCWxkdwlldCwgUFRfU1Aoc3ApCQkvKiBiYWNrdXAgc3AgaW4gZXQgKi8KKworCWFkZGkJc3AsIHNwLCBQVF9SRUdTX1NJWkUKKworCS8qIElOU1RSVUNUSU9OIEVNVUxBVElPTgorCSogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSoKKwkqIE5pb3MgSUkgcHJvY2Vzc29ycyBnZW5lcmF0ZSBleGNlcHRpb25zIGZvciB1bmltcGxlbWVudGVkIGluc3RydWN0aW9ucy4KKwkqIFRoZSByb3V0aW5lcyBiZWxvdyBlbXVsYXRlIHRoZXNlIGluc3RydWN0aW9ucy4gIERlcGVuZGluZyBvbiB0aGUKKwkqIHByb2Nlc3NvciBjb3JlLCB0aGUgb25seSBpbnN0cnVjdGlvbnMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGVtdWxhdGVkCisJKiBhcmUgZGl2LCBkaXZ1LCBtdWwsIG11bGksIG11bHhzcywgbXVseHN1LCBhbmQgbXVseHV1LgorCSoKKwkqIFRoZSBlbXVsYXRpb25zIG1hdGNoIHRoZSBpbnN0cnVjdGlvbnMsIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZworCSogbGltaXRhdGlvbnM6CisJKgorCSogMSkgVGhlIGVtdWxhdGlvbiByb3V0aW5lcyBkbyBub3QgZW11bGF0ZSB0aGUgdXNlIG9mIHRoZSBleGNlcHRpb24KKwkqICAgIHRlbXBvcmFyeSByZWdpc3RlciAoZXQpIGFzIGEgc291cmNlIG9wZXJhbmQgYmVjYXVzZSB0aGUgZXhjZXB0aW9uCisJKiAgICBoYW5kbGVyIGFscmVhZHkgaGFzIG1vZGlmaWVkIGl0LgorCSoKKwkqIDIpIFRoZSByb3V0aW5lcyBkbyBub3QgZW11bGF0ZSB0aGUgdXNlIG9mIHRoZSBzdGFjayBwb2ludGVyIChzcCkgb3IKKwkqICAgIHRoZSBleGNlcHRpb24gcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIgKGVhKSBhcyBhIGRlc3RpbmF0aW9uIGJlY2F1c2UKKwkqICAgIG1vZGlmeWluZyB0aGVzZSByZWdpc3RlcnMgY3Jhc2hlcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgb3IgdGhlCisJKiAgICBpbnRlcnJ1cHRlZCByb3V0aW5lLgorCSoKKwkqIERldGFpbGVkIERlc2lnbgorCSogLS0tLS0tLS0tLS0tLS0tCisJKgorCSogVGhlIGVtdWxhdGlvbiByb3V0aW5lcyBleHBlY3QgdGhlIGNvbnRlbnRzIG9mIGludGVnZXIgcmVnaXN0ZXJzIHIwLXIzMQorCSogdG8gYmUgb24gdGhlIHN0YWNrIGF0IGFkZHJlc3NlcyBzcCwgNChzcCksIDgoc3ApLCAuLi4gMTI0KHNwKS4gIFRoZQorCSogcm91dGluZXMgcmV0cmlldmUgc291cmNlIG9wZXJhbmRzIGZyb20gdGhlIHN0YWNrIGFuZCBtb2RpZnkgdGhlCisJKiBkZXN0aW5hdGlvbiByZWdpc3RlcidzIHZhbHVlIG9uIHRoZSBzdGFjayBwcmlvciB0byB0aGUgZW5kIG9mIHRoZQorCSogZXhjZXB0aW9uIGhhbmRsZXIuICBUaGVuIGFsbCByZWdpc3RlcnMgZXhjZXB0IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlcgorCSogYXJlIHJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcy4KKwkqCisJKiBUaGUgaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZXMgdGhlIGV4Y2VwdGlvbiBpcyBmb3VuZCBhdCBhZGRyZXNzIC00KGVhKS4KKwkqIFRoZSBpbnN0cnVjdGlvbidzIE9QIGFuZCBPUFggZmllbGRzIGlkZW50aWZ5IHRoZSBvcGVyYXRpb24gdG8gYmUKKwkqIHBlcmZvcm1lZC4KKwkqCisJKiBPbmUgaW5zdHJ1Y3Rpb24sIG11bGksIGlzIGFuIEktdHlwZSBpbnN0cnVjdGlvbiB0aGF0IGlzIGlkZW50aWZpZWQgYnkKKwkqIGFuIE9QIGZpZWxkIG9mIDB4MjQuCisJKgorCSogbXVsaSAgIEFBQUFBLEJCQkJCLElJSUlJSUlJSUlJSUlJSUksLTB4MjQtCisJKiAgICAgICAgICAgMjcgICAgMjIgICAgICAgICAgICAgICAgNiAgICAgIDAgICAgPC0tIExTQiBvZiBmaWVsZAorCSoKKwkqIFRoZSByZW1haW5pbmcgZW11bGF0ZWQgaW5zdHJ1Y3Rpb25zIGFyZSBSLXR5cGUgYW5kIGhhdmUgYW4gT1AgZmllbGQKKwkqIG9mIDB4M2EuICBUaGVpciBPUFggZmllbGRzIGlkZW50aWZ5IHRoZW0uCisJKgorCSogUi10eXBlIEFBQUFBLEJCQkJCLENDQ0NDLFhYWFhYWCxOTk5OTiwtMHgzYS0KKwkqICAgICAgICAgICAyNyAgICAyMiAgICAxNyAgICAgMTEgICAgIDYgICAgICAwICA8LS0gTFNCIG9mIGZpZWxkCisJKgorCSoKKwkqIE9wY29kZSBFbmNvZGluZy4gIG11bGkgaXMgaWRlbnRpZmllZCBieSBpdHMgT1AgdmFsdWUuICBUaGVuIE9QWCAmIDB4MDIKKwkqIGlzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSBkaXZpc2lvbiBvcGNvZGVzIGFuZCB0aGUKKwkqIHJlbWFpbmluZyBtdWx0aXBsaWNhdGlvbiBvcGNvZGVzLgorCSoKKwkqIEluc3RydWN0aW9uICAgT1AgICAgICBPUFggICAgT1BYICYgMHgwMgorCSogLS0tLS0tLS0tLS0gICAtLS0tICAgIC0tLS0gICAtLS0tLS0tLS0tCisJKiBtdWxpICAgICAgICAgIDB4MjQKKwkqIGRpdnUgICAgICAgICAgMHgzYSAgICAweDI0ICAgICAgICAgMAorCSogZGl2ICAgICAgICAgICAweDNhICAgIDB4MjUgICAgICAgICAwCisJKiBtdWwgICAgICAgICAgIDB4M2EgICAgMHgyNyAgICAgICE9IDAKKwkqIG11bHh1dSAgICAgICAgMHgzYSAgICAweDA3ICAgICAgIT0gMAorCSogbXVseHN1ICAgICAgICAweDNhICAgIDB4MTcgICAgICAhPSAwCisJKiBtdWx4c3MgICAgICAgIDB4M2EgICAgMHgxZiAgICAgICE9IDAKKwkqLworCisKKwkvKgorCSogU2F2ZSBldmVyeXRoaW5nIG9uIHRoZSBzdGFjayB0byBtYWtlIGl0IGVhc3kgZm9yIHRoZSBlbXVsYXRpb24KKwkqIHJvdXRpbmVzIHRvIHJldHJpZXZlIHRoZSBzb3VyY2UgcmVnaXN0ZXIgb3BlcmFuZHMuCisJKi8KKworCWFkZGkgc3AsIHNwLCAtMTI4CisJc3R3IHplcm8sIDAoc3ApCS8qIFNhdmUgemVybyBvbiBzdGFjayB0byBhdm9pZCBzcGVjaWFsIGNhc2UgZm9yIHIwLiAqLworCXN0dyByMSwgNChzcCkKKwlzdHcgcjIsICA4KHNwKQorCXN0dyByMywgMTIoc3ApCisJc3R3IHI0LCAxNihzcCkKKwlzdHcgcjUsIDIwKHNwKQorCXN0dyByNiwgMjQoc3ApCisJc3R3IHI3LCAyOChzcCkKKwlzdHcgcjgsIDMyKHNwKQorCXN0dyByOSwgMzYoc3ApCisJc3R3IHIxMCwgNDAoc3ApCisJc3R3IHIxMSwgNDQoc3ApCisJc3R3IHIxMiwgNDgoc3ApCisJc3R3IHIxMywgNTIoc3ApCisJc3R3IHIxNCwgNTYoc3ApCisJc3R3IHIxNSwgNjAoc3ApCisJc3R3IHIxNiwgNjQoc3ApCisJc3R3IHIxNywgNjgoc3ApCisJc3R3IHIxOCwgNzIoc3ApCisJc3R3IHIxOSwgNzYoc3ApCisJc3R3IHIyMCwgODAoc3ApCisJc3R3IHIyMSwgODQoc3ApCisJc3R3IHIyMiwgODgoc3ApCisJc3R3IHIyMywgOTIoc3ApCisJCS8qIERvbid0IGJvdGhlciB0byBzYXZlIGV0LiAgSXQncyBhbHJlYWR5IGJlZW4gY2hhbmdlZC4gKi8KKwlyZGN0bCByNSwgZXN0YXR1cworCXN0dyByNSwgIDEwMChzcCkKKworCXN0dyBncCwgMTA0KHNwKQorCXN0dyBldCwgMTA4KHNwKQkvKiBldCBjb250YWlucyBwcmV2aW91cyBzcCB2YWx1ZS4gKi8KKwlzdHcgZnAsIDExMihzcCkKKwlzdHcgZWEsIDExNihzcCkKKwlzdHcgcmEsIDEyMChzcCkKKworCisJLyoKKwkqIFNwbGl0IHRoZSBpbnN0cnVjdGlvbiBpbnRvIGl0cyBmaWVsZHMuICBXZSBuZWVkIDQqQSwgNCpCLCBhbmQgNCpDIGFzCisJKiBvZmZzZXRzIHRvIHRoZSBzdGFjayBwb2ludGVyIGZvciBhY2Nlc3MgdG8gdGhlIHN0b3JlZCByZWdpc3RlciB2YWx1ZXMuCisJKi8KKwlsZHcgcjIsLTQoZWEpCS8qIHIyID0gQUFBQUEsQkJCQkIsSUlJSUlJSUlJSUlJSUlJSSxQUFBQUFAgKi8KKwlyb2xpIHIzLCByMiwgNwkvKiByMyA9IEJCQixJSUlJSUlJSUlJSUlJSUlJLFBQUFBQUCxBQUFBQSxCQiAqLworCXJvbGkgcjQsIHIzLCAzCS8qIHI0ID0gSUlJSUlJSUlJSUlJSUlJSSxQUFBQUFAsQUFBQUEsQkJCQkIgKi8KKwlyb2xpIHI1LCByNCwgMgkvKiByNSA9IElJSUlJSUlJSUlJSUlJLFBQUFBQUCxBQUFBQSxCQkJCQixJSSAqLworCXNyYWkgcjQsIHI0LCAxNgkvKiByNCA9IChzaWduLWV4dGVuZGVkKSBJTU0xNiAqLworCXJvbGkgcjYsIHI1LCA1CS8qIHI2ID0gWFhYWCxOTk5OTixQUFBQUFAsQUFBQUEsQkJCQkIsQ0NDQ0MsWFggKi8KKwlhbmRpIHIyLCByMiwgMHgzZgkvKiByMiA9IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLFBQUFBQUCAqLworCWFuZGkgcjMsIHIzLCAweDdjCS8qIHIzID0gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxBQUFBQSwwMCAqLworCWFuZGkgcjUsIHI1LCAweDdjCS8qIHI1ID0gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxCQkJCQiwwMCAqLworCWFuZGkgcjYsIHI2LCAweDdjCS8qIHI2ID0gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxDQ0NDQywwMCAqLworCisJLyogTm93CisJKiByMiA9IE9QCisJKiByMyA9IDQqQQorCSogcjQgPSBJTU0xNiAoc2lnbiBleHRlbmRlZCkKKwkqIHI1ID0gNCpCCisJKiByNiA9IDQqQworCSovCisKKwkvKgorCSogR2V0IHRoZSBvcGVyYW5kcy4KKwkqCisJKiBJdCBpcyBuZWNlc3NhcnkgdG8gY2hlY2sgZm9yIG11bGkgYmVjYXVzZSBpdCB1c2VzIGFuIEktdHlwZQorCSogaW5zdHJ1Y3Rpb24gZm9ybWF0LCB3aGlsZSB0aGUgb3RoZXIgaW5zdHJ1Y3Rpb25zIGFyZSBoYXZlIGFuIFItdHlwZQorCSogZm9ybWF0LgorCSoKKwkqICBQcmVwYXJlIGZvciBlaXRoZXIgbXVsdGlwbGljYXRpb24gb3IgZGl2aXNpb24gbG9vcC4KKwkqICBUaGV5IGJvdGggbG9vcCAzMiB0aW1lcy4KKwkqLworCW1vdmkgcjE0LCAzMgorCisJYWRkICByMywgcjMsIHNwCQkvKiByMyA9IGFkZHJlc3Mgb2YgQS1vcGVyYW5kLiAqLworCWxkdyAgcjMsIDAocjMpCQkvKiByMyA9IEEtb3BlcmFuZC4gKi8KKwltb3ZpIHI3LCAweDI0CQkvKiBtdWxpIG9wY29kZSAoSS10eXBlIGluc3RydWN0aW9uIGZvcm1hdCkgKi8KKwliZXEgcjIsIHI3LCBtdWxfaW1tZWQgLyogbXVsaSBkb2Vzbid0IHVzZSB0aGUgQiByZWdpc3RlciBhcyBhIHNvdXJjZSAqLworCisJYWRkICByNSwgcjUsIHNwCQkvKiByNSA9IGFkZHJlc3Mgb2YgQi1vcGVyYW5kLiAqLworCWxkdyAgcjUsIDAocjUpCQkvKiByNSA9IEItb3BlcmFuZC4gKi8KKwkJCQkvKiByNCA9IFNTU1NTU1NTU1NTU1NTU1MsLS0tLS1JTU0xNi0tLS0tLSAqLworCQkJCS8qIElNTTE2IG5vdCBuZWVkZWQsIGFsaWduIE9QWCBwb3J0aW9uICovCisJCQkJLyogcjQgPSBTU1NTU1NTU1NTU1NTU1NTLENDQ0NDLC1PUFgtLSwwMDAwMCAqLworCXNybGkgcjQsIHI0LCA1CQkvKiByNCA9IDAwMDAwLFNTU1NTU1NTU1NTU1NTU1MsQ0NDQ0MsLU9QWC0tICovCisJYW5kaSByNCwgcjQsIDB4M2YJLyogcjQgPSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwtT1BYLS0gKi8KKworCS8qIE5vdworCSogcjIgPSBPUAorCSogcjMgPSBzcmMxCisJKiByNSA9IHNyYzIKKwkqIHI0ID0gT1BYIChubyBsb25nZXIgY2FuIGJlIG11bGkpCisJKiByNiA9IDQqQworCSovCisKKworCS8qCisJKiAgTXVsdGlwbHkgb3IgRGl2aWRlPworCSovCisJYW5kaSByNywgcjQsIDB4MDIJLyogRm9yIFItdHlwZSBtdWx0aXBseSBpbnN0cnVjdGlvbnMsCisJCQkJICAgT1BYICYgMHgwMiAhPSAwICovCisJYm5lIHI3LCB6ZXJvLCBtdWx0aXBseQorCisKKwkvKiBESVZJU0lPTgorCSoKKwkqIERpdmlkZSBhbiB1bnNpZ25lZCBkaXZpZGVuZCBieSBhbiB1bnNpZ25lZCBkaXZpc29yIHVzaW5nCisJKiBhIHNoaWZ0LWFuZC1zdWJ0cmFjdCBhbGdvcml0aG0uICBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cworCSogNDMgZGl2IDcgPSA2IGZvciA4LWJpdCBpbnRlZ2Vycy4gIFRoaXMgY2xhc3NpYyBhbGdvcml0aG0gdXNlcyBhCisJKiBzaW5nbGUgcmVnaXN0ZXIgdG8gc3RvcmUgYm90aCB0aGUgZGl2aWRlbmQgYW5kIHRoZSBxdW90aWVudCwKKwkqIGFsbG93aW5nIGJvdGggdmFsdWVzIHRvIGJlIHNoaWZ0ZWQgd2l0aCBhIHNpbmdsZSBpbnN0cnVjdGlvbi4KKwkqCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5kZXIgZGl2aWRlbmQ6cXVvdGllbnQKKwkqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLQorCSogICBpbml0aWFsaXplICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwICAgICAwMDEwMTAxMToKKwkqICAgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMCAgICAgMDEwMTAxMTpfCisJKiAgIHJlbWFpbmRlciA+PSBkaXZpc29yPyBubyAgICAgMDAwMDAwMDAgICAgIDAxMDEwMTE6MAorCSogICBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwICAgICAxMDEwMTE6MF8KKwkqICAgcmVtYWluZGVyID49IGRpdmlzb3I/IG5vICAgICAwMDAwMDAwMCAgICAgMTAxMDExOjAwCisJKiAgIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDEgICAgIDAxMDExOjAwXworCSogICByZW1haW5kZXIgPj0gZGl2aXNvcj8gbm8gICAgIDAwMDAwMDAxICAgICAwMTAxMTowMDAKKwkqICAgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAxMCAgICAgMTAxMTowMDBfCisJKiAgIHJlbWFpbmRlciA+PSBkaXZpc29yPyBubyAgICAgMDAwMDAwMTAgICAgIDEwMTE6MDAwMAorCSogICBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMTAxICAgICAwMTE6MDAwMF8KKwkqICAgcmVtYWluZGVyID49IGRpdmlzb3I/IG5vICAgICAwMDAwMDEwMSAgICAgMDExOjAwMDAwCisJKiAgIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDEwMTAgICAgIDExOjAwMDAwXworCSogICByZW1haW5kZXIgPj0gZGl2aXNvcj8geWVzICAgIDAwMDAxMDEwICAgICAxMTowMDAwMDEKKwkqICAgICAgIHJlbWFpbmRlciAtPSBkaXZpc29yICAgLSAwMDAwMDExMQorCSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMTEgICAgIDExOjAwMDAwMQorCSogICBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMTExICAgICAxOjAwMDAwMV8KKwkqICAgcmVtYWluZGVyID49IGRpdmlzb3I/IHllcyAgICAwMDAwMDExMSAgICAgMTowMDAwMDExCisJKiAgICAgICByZW1haW5kZXIgLT0gZGl2aXNvciAgIC0gMDAwMDAxMTEKKwkqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLQorCSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwICAgICAxOjAwMDAwMTEKKwkqICAgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMSAgICAgOjAwMDAwMTFfCisJKiAgIHJlbWFpbmRlciA+PSBkaXZpc29yPyBubyAgICAgMDAwMDAwMDEgICAgIDowMDAwMDExMAorCSoKKwkqIFRoZSBxdW90aWVudCBpcyAwMDAwMDExMC4KKwkqLworCitkaXZpZGU6CisJLyoKKwkqICBQcmVwYXJlIGZvciBkaXZpc2lvbiBieSBhc3N1bWluZyB0aGUgcmVzdWx0CisJKiAgaXMgdW5zaWduZWQsIGFuZCBzdG9yaW5nIGl0cyAic2lnbiIgYXMgMC4KKwkqLworCW1vdmkgcjE3LCAwCisKKworCS8qIFdoaWNoIGRpdmlzaW9uIG9wY29kZT8gKi8KKwl4b3JpIHI3LCByNCwgMHgyNQkJLyogT1BYIG9mIGRpdiAqLworCWJuZSByNywgemVybywgdW5zaWduZWRfZGl2aXNpb24KKworCisJLyoKKwkqICBPUFggaXMgZGl2LiAgRGV0ZXJtaW5lIGFuZCBzdG9yZSB0aGUgc2lnbiBvZiB0aGUgcXVvdGllbnQuCisJKiAgVGhlbiB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBib3RoIG9wZXJhbmRzLgorCSovCisJeG9yIHIxNywgcjMsIHI1CQkvKiBNU0IgY29udGFpbnMgc2lnbiBvZiBxdW90aWVudCAqLworCWJnZSByMyx6ZXJvLGRpdmlkZW5kX2lzX25vbm5lZ2F0aXZlCisJc3ViIHIzLCB6ZXJvLCByMwkvKiAtcjMgKi8KK2RpdmlkZW5kX2lzX25vbm5lZ2F0aXZlOgorCWJnZSByNSwgemVybywgZGl2aXNvcl9pc19ub25uZWdhdGl2ZQorCXN1YiByNSwgemVybywgcjUJLyogLXI1ICovCitkaXZpc29yX2lzX25vbm5lZ2F0aXZlOgorCisKK3Vuc2lnbmVkX2RpdmlzaW9uOgorCS8qIEluaXRpYWxpemUgdGhlIHVuc2lnbmVkLWRpdmlzaW9uIGxvb3AuICovCisJbW92aSByMTMsIDAJLyogcmVtYWluZGVyID0gMCAqLworCisJLyogTm93CisJKiByMyA9IGRpdmlkZW5kIDogcXVvdGllbnQKKwkqIHI0ID0gMHgyNSBmb3IgZGl2LCAweDI0IGZvciBkaXZ1CisJKiByNSA9IGRpdmlzb3IKKwkqIHIxMyA9IHJlbWFpbmRlcgorCSogcjE0ID0gbG9vcCBjb3VudGVyIChhbHJlYWR5IGluaXRpYWxpemVkIHRvIDMyKQorCSogcjE3ID0gTVNCIGNvbnRhaW5zIHNpZ24gb2YgcXVvdGllbnQKKwkqLworCisKKwkvKgorCSogICBmb3IgKGNvdW50ID0gMzI7IGNvdW50ID4gMDsgLS1jb3VudCkKKwkqICAgeworCSovCitkaXZpZGVfbG9vcDoKKworCS8qCisJKiAgICAgICBEaXZpc2lvbjoKKwkqCisJKiAgICAgICAocmVtYWluZGVyOmRpdmlkZW5kOnF1b3RpZW50KSA8PD0gMTsKKwkqLworCXNsbGkgcjEzLCByMTMsIDEKKwljbXBsdCByNywgcjMsIHplcm8JLyogcjcgPSBNU0Igb2YgcjMgKi8KKwlvciByMTMsIHIxMywgcjcKKwlzbGxpIHIzLCByMywgMQorCisKKwkvKgorCSogICAgICAgaWYgKHJlbWFpbmRlciA+PSBkaXZpc29yKQorCSogICAgICAgeworCSogICAgICAgICAgIHNldCBMU0Igb2YgcXVvdGllbnQKKwkqICAgICAgICAgICByZW1haW5kZXIgLT0gZGl2aXNvcjsKKwkqICAgICAgIH0KKwkqLworCWJsdHUgcjEzLCByNSwgZGl2X3NraXAKKwlvcmkgcjMsIHIzLCAxCisJc3ViIHIxMywgcjEzLCByNQorZGl2X3NraXA6CisKKwkvKgorCSogICB9CisJKi8KKwlzdWJpIHIxNCwgcjE0LCAxCisJYm5lIHIxNCwgemVybywgZGl2aWRlX2xvb3AKKworCisJLyogTm93CisJKiByMyA9IHF1b3RpZW50CisJKiByNCA9IDB4MjUgZm9yIGRpdiwgMHgyNCBmb3IgZGl2dQorCSogcjYgPSA0KkMKKwkqIHIxNyA9IE1TQiBjb250YWlucyBzaWduIG9mIHF1b3RpZW50CisJKi8KKworCisJLyoKKwkqICBDb25kaXRpb25hbGx5IG5lZ2F0ZSBzaWduZWQgcXVvdGllbnQuICBJZiBxdW90aWVudCBpcyB1bnNpZ25lZCwKKwkqICB0aGUgc2lnbiBhbHJlYWR5IGlzIGluaXRpYWxpemVkIHRvIDAuCisJKi8KKwliZ2UgcjE3LCB6ZXJvLCBxdW90aWVudF9pc19ub25uZWdhdGl2ZQorCXN1YiByMywgemVybywgcjMJCS8qIC1yMyAqLworCXF1b3RpZW50X2lzX25vbm5lZ2F0aXZlOgorCisKKwkvKgorCSogIEZpbmFsIHF1b3RpZW50IGlzIGluIHIzLgorCSovCisJYWRkIHI2LCByNiwgc3AKKwlzdHcgcjMsIDAocjYpCS8qIHdyaXRlIHF1b3RpZW50IHRvIHN0YWNrICovCisJYnIgcmVzdG9yZV9yZWdpc3RlcnMKKworCisKKworCS8qIE1VTFRJUExJQ0FUSU9OCisJKgorCSogQSAicHJvZHVjdCIgaXMgdGhlIG51bWJlciB0aGF0IG9uZSBnZXRzIGJ5IHN1bW1pbmcgYSAibXVsdGlwbGljYW5kIgorCSogc2V2ZXJhbCB0aW1lcy4gIFRoZSAibXVsdGlwbGllciIgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIHRoZQorCSogbXVsdGlwbGljYW5kIHRoYXQgYXJlIHN1bW1lZC4KKwkqCisJKiBBY3R1YWwgbXVsdGlwbGljYXRpb24gYWxnb3JpdGhtcyBkb24ndCB1c2UgcmVwZWF0ZWQgYWRkaXRpb24sIGhvd2V2ZXIuCisJKiBTaGlmdC1hbmQtYWRkIGFsZ29yaXRobXMgZ2V0IHRoZSBzYW1lIGFuc3dlciBhcyByZXBlYXRlZCBhZGRpdGlvbiwgYW5kCisJKiB0aGV5IGFyZSBmYXN0ZXIuICBUbyBjb21wdXRlIHRoZSBsb3dlciBoYWxmIG9mIGEgcHJvZHVjdCAocHBwcCBiZWxvdykKKwkqIG9uZSBzaGlmdHMgdGhlIHByb2R1Y3QgbGVmdCBiZWZvcmUgYWRkaW5nIGluIGVhY2ggb2YgdGhlIHBhcnRpYWwKKwkqIHByb2R1Y3RzIChhICogbW1tbSkgdGhyb3VnaCAoZCAqIG1tbW0pLgorCSoKKwkqIFRvIGNvbXB1dGUgdGhlIHVwcGVyIGhhbGYgb2YgYSBwcm9kdWN0IChQUFBQIGJlbG93KSwgb25lIGFkZHMgaW4gdGhlCisJKiBwYXJ0aWFsIHByb2R1Y3RzIChkICogbW1tbSkgdGhyb3VnaCAoYSAqIG1tbW0pLCBlYWNoIHRpbWUgZm9sbG93aW5nCisJKiB0aGUgYWRkIGJ5IGEgcmlnaHQgc2hpZnQgb2YgdGhlIHByb2R1Y3QuCisJKgorCSogICAgIG1tbW0KKwkqICAgKiBhYmNkCisJKiAgIC0tLS0tLQorCSogICAgICMjIyMgID0gZCAqIG1tbW0KKwkqICAgICMjIyMgICA9IGMgKiBtbW1tCisJKiAgICMjIyMgICAgPSBiICogbW1tbQorCSogICMjIyMgICAgID0gYSAqIG1tbW0KKwkqIC0tLS0tLS0tCisJKiBQUFBQcHBwcAorCSoKKwkqIFRoZSBleGFtcGxlIGFib3ZlIHNob3dzIDQgcGFydGlhbCBwcm9kdWN0cy4gIENvbXB1dGluZyBhY3R1YWwgTmlvcyBJSQorCSogcHJvZHVjdHMgcmVxdWlyZXMgMzIgcGFydGlhbHMuCisJKgorCSogSXQgaXMgcG9zc2libGUgdG8gY29tcHV0ZSB0aGUgcmVzdWx0IG9mIG11bHhzdSBmcm9tIHRoZSByZXN1bHQgb2YKKwkqIG11bHh1dSBiZWNhdXNlIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVzdWx0cyBvZiB0aGVzZSB0d28KKwkqIG9wY29kZXMgaXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJ0aWFsIHByb2R1Y3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBzaWduCisJKiBiaXQgb2YgckEuCisJKgorCSogICBtdWx4c3UgPSBtdWx4dXUgLSAockEgPCAwKSA/IHJCIDogMDsKKwkqCisJKiBJdCBpcyBwb3NzaWJsZSB0byBjb21wdXRlIHRoZSByZXN1bHQgb2YgbXVseHNzIGZyb20gdGhlIHJlc3VsdCBvZgorCSogbXVseHN1IGJlY2F1c2UgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZXN1bHRzIG9mIHRoZXNlIHR3bworCSogb3Bjb2RlcyBpcyB0aGUgdmFsdWUgb2YgdGhlIHBhcnRpYWwgcHJvZHVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNpZ24KKwkqIGJpdCBvZiByQi4KKwkqCisJKiAgIG11bHhzcyA9IG11bHhzdSAtIChyQiA8IDApID8gckEgOiAwOworCSoKKwkqLworCittdWxfaW1tZWQ6CisJLyogT3Bjb2RlIGlzIG11bGkuICBDaGFuZ2UgaXQgaW50byBtdWwgZm9yIHJlbWFpbmRlciBvZiBhbGdvcml0aG0uICovCisJbW92IHI2LCByNQkJLyogRmllbGQgQiBpcyBkZXN0IHJlZ2lzdGVyLCBub3QgZmllbGQgQy4gKi8KKwltb3YgcjUsIHI0CQkvKiBGaWVsZCBJTU0xNiBpcyBzcmMyLCBub3QgZmllbGQgQi4gKi8KKwltb3ZpIHI0LCAweDI3CQkvKiBPUFggb2YgbXVsIGlzIDB4MjcgKi8KKworbXVsdGlwbHk6CisJLyogSW5pdGlhbGl6ZSB0aGUgbXVsdGlwbGljYXRpb24gbG9vcC4gKi8KKwltb3ZpIHI5LCAwCS8qIG11bF9wcm9kdWN0ICAgID0gMCAqLworCW1vdmkgcjEwLCAwCS8qIG11bHh1dV9wcm9kdWN0ID0gMCAqLworCW1vdiByMTEsIHI1CS8qIHNhdmUgb3JpZ2luYWwgbXVsdGlwbGllciBmb3IgbXVseHN1IGFuZCBtdWx4c3MgKi8KKwltb3YgcjEyLCByNQkvKiBtdWx4dXVfbXVsdGlwbGllciAod2lsbCBiZSBzaGlmdGVkKSAqLworCW1vdmkgcjE2LCAxCS8qIHVzZWQgdG8gY3JlYXRlICJyb3JpIEIsQSwxIiBmcm9tICJyb3IgQixBLHIxNiIgKi8KKworCS8qIE5vdworCSogcjMgPSBtdWx0aXBsaWNhbmQKKwkqIHI1ID0gbXVsX211bHRpcGxpZXIKKwkqIHI2ID0gNCAqIGRlc3RfcmVnaXN0ZXIgKHVzZWQgbGF0ZXIgYXMgb2Zmc2V0IHRvIHNwKQorCSogcjcgPSB0ZW1wCisJKiByOSA9IG11bF9wcm9kdWN0CisJKiByMTAgPSBtdWx4dXVfcHJvZHVjdAorCSogcjExID0gb3JpZ2luYWwgbXVsdGlwbGllcgorCSogcjEyID0gbXVseHV1X211bHRpcGxpZXIKKwkqIHIxNCA9IGxvb3AgY291bnRlciAoYWxyZWFkeSBpbml0aWFsaXplZCkKKwkqIHIxNiA9IDEKKwkqLworCisKKwkvKgorCSogICBmb3IgKGNvdW50ID0gMzI7IGNvdW50ID4gMDsgLS1jb3VudCkKKwkqICAgeworCSovCittdWx0aXBseV9sb29wOgorCisJLyoKKwkqICAgICAgIG11bF9wcm9kdWN0IDw8PSAxOworCSogICAgICAgbHNiID0gbXVsdGlwbGllciAmIDE7CisJKi8KKwlzbGxpIHI5LCByOSwgMQorCWFuZGkgcjcsIHIxMiwgMQorCisJLyoKKwkqICAgICAgIGlmIChsc2IgPT0gMSkKKwkqICAgICAgIHsKKwkqICAgICAgICAgICBtdWx4dXVfcHJvZHVjdCArPSBtdWx0aXBsaWNhbmQ7CisJKiAgICAgICB9CisJKi8KKwliZXEgcjcsIHplcm8sIG11bHhfc2tpcAorCWFkZCByMTAsIHIxMCwgcjMKKwljbXBsdHUgcjcsIHIxMCwgcjMgLyogU2F2ZSB0aGUgY2FycnkgZnJvbSB0aGUgTVNCIG9mIG11bHh1dV9wcm9kdWN0LiAqLworCXJvciByNywgcjcsIHIxNgkvKiByNyA9IDB4ODAwMDAwMDAgb24gY2FycnksIG9yIGVsc2UgMHgwMDAwMDAwMCAqLworbXVseF9za2lwOgorCisJLyoKKwkqICAgICAgIGlmIChNU0Igb2YgbXVsX211bHRpcGxpZXIgPT0gMSkKKwkqICAgICAgIHsKKwkqICAgICAgICAgICBtdWxfcHJvZHVjdCArPSBtdWx0aXBsaWNhbmQ7CisJKiAgICAgICB9CisJKi8KKwliZ2UgcjUsIHplcm8sIG11bF9za2lwCisJYWRkIHI5LCByOSwgcjMKK211bF9za2lwOgorCisJLyoKKwkqICAgICAgIG11bHh1dV9wcm9kdWN0ID4+PSAxOyAgICAgICAgICAgbG9naWNhbCBzaGlmdAorCSogICAgICAgbXVsX211bHRpcGxpZXIgPDw9IDE7ICAgICAgICAgICBkb25lIHdpdGggTVNCCisJKiAgICAgICBtdWx4X211bHRpcGxpZXIgPj49IDE7ICAgICAgICAgIGRvbmUgd2l0aCBMU0IKKwkqLworCXNybGkgcjEwLCByMTAsIDEKKwlvciByMTAsIHIxMCwgcjcJCS8qIE9SIGluIHRoZSBzYXZlZCBjYXJyeSBiaXQuICovCisJc2xsaSByNSwgcjUsIDEKKwlzcmxpIHIxMiwgcjEyLCAxCisKKworCS8qCisJKiAgIH0KKwkqLworCXN1YmkgcjE0LCByMTQsIDEKKwlibmUgcjE0LCB6ZXJvLCBtdWx0aXBseV9sb29wCisKKworCS8qCisJKiAgTXVsdGlwbHkgZW11bGF0aW9uIGxvb3AgZG9uZS4KKwkqLworCisJLyogTm93CisJKiByMyA9IG11bHRpcGxpY2FuZAorCSogcjQgPSBPUFgKKwkqIHI2ID0gNCAqIGRlc3RfcmVnaXN0ZXIgKHVzZWQgbGF0ZXIgYXMgb2Zmc2V0IHRvIHNwKQorCSogcjcgPSB0ZW1wCisJKiByOSA9IG11bF9wcm9kdWN0CisJKiByMTAgPSBtdWx4dXVfcHJvZHVjdAorCSogcjExID0gb3JpZ2luYWwgbXVsdGlwbGllcgorCSovCisKKworCS8qIENhbGN1bGF0ZSBhZGRyZXNzIGZvciByZXN1bHQgZnJvbSA0ICogZGVzdF9yZWdpc3RlciAqLworCWFkZCByNiwgcjYsIHNwCisKKworCS8qCisJKiBTZWxlY3QvY29tcHV0ZSB0aGUgcmVzdWx0IGJhc2VkIG9uIE9QWC4KKwkqLworCisKKwkvKiBPUFggPT0gbXVsPyAgVGhlbiBzdG9yZS4gKi8KKwl4b3JpIHI3LCByNCwgMHgyNworCWJlcSByNywgemVybywgc3RvcmVfcHJvZHVjdAorCisJLyogSXQncyBvbmUgb2YgdGhlIG11bHguLiBvcGNvZGVzLiAgTW92ZSBvdmVyIHRoZSByZXN1bHQuICovCisJbW92IHI5LCByMTAKKworCS8qIE9QWCA9PSBtdWx4dXU/ICBUaGVuIHN0b3JlLiAqLworCXhvcmkgcjcsIHI0LCAweDA3CisJYmVxIHI3LCB6ZXJvLCBzdG9yZV9wcm9kdWN0CisKKwkvKiBDb21wdXRlIG11bHhzdQorCSAqCisJICogbXVseHN1ID0gbXVseHV1IC0gKHJBIDwgMCkgPyByQiA6IDA7CisJICovCisJYmdlIHIzLCB6ZXJvLCBtdWx4c3Vfc2tpcAorCXN1YiByOSwgcjksIHIxMQorbXVseHN1X3NraXA6CisKKwkvKiBPUFggPT0gbXVseHN1PyAgVGhlbiBzdG9yZS4gKi8KKwl4b3JpIHI3LCByNCwgMHgxNworCWJlcSByNywgemVybywgc3RvcmVfcHJvZHVjdAorCisJLyogQ29tcHV0ZSBtdWx4c3MKKwkgKgorCSAqIG11bHhzcyA9IG11bHhzdSAtIChyQiA8IDApID8gckEgOiAwOworCSAqLworCWJnZSByMTEsemVybyxtdWx4c3Nfc2tpcAorCXN1YiByOSwgcjksIHIzCittdWx4c3Nfc2tpcDoKKwkvKiBBdCB0aGlzIHBvaW50LCBhc3N1bWUgdGhhdCBPUFggaXMgbXVseHNzLCBzbyBzdG9yZSovCisKKworc3RvcmVfcHJvZHVjdDoKKwlzdHcgcjksIDAocjYpCisKKworcmVzdG9yZV9yZWdpc3RlcnM6CisJCQkvKiBObyBuZWVkIHRvIHJlc3RvcmUgcjAuICovCisJbGR3IHI1LCAxMDAoc3ApCisJd3JjdGwgZXN0YXR1cywgcjUKKworCWxkdyByMSwgNChzcCkKKwlsZHcgcjIsIDgoc3ApCisJbGR3IHIzLCAxMihzcCkKKwlsZHcgcjQsIDE2KHNwKQorCWxkdyByNSwgMjAoc3ApCisJbGR3IHI2LCAyNChzcCkKKwlsZHcgcjcsIDI4KHNwKQorCWxkdyByOCwgMzIoc3ApCisJbGR3IHI5LCAzNihzcCkKKwlsZHcgcjEwLCA0MChzcCkKKwlsZHcgcjExLCA0NChzcCkKKwlsZHcgcjEyLCA0OChzcCkKKwlsZHcgcjEzLCA1MihzcCkKKwlsZHcgcjE0LCA1NihzcCkKKwlsZHcgcjE1LCA2MChzcCkKKwlsZHcgcjE2LCA2NChzcCkKKwlsZHcgcjE3LCA2OChzcCkKKwlsZHcgcjE4LCA3MihzcCkKKwlsZHcgcjE5LCA3NihzcCkKKwlsZHcgcjIwLCA4MChzcCkKKwlsZHcgcjIxLCA4NChzcCkKKwlsZHcgcjIyLCA4OChzcCkKKwlsZHcgcjIzLCA5MihzcCkKKwkJCS8qIERvZXMgbm90IG5lZWQgdG8gcmVzdG9yZSBldCAqLworCWxkdyBncCwgMTA0KHNwKQorCisJbGR3IGZwLCAxMTIoc3ApCisJbGR3IGVhLCAxMTYoc3ApCisJbGR3IHJhLCAxMjAoc3ApCisJbGR3IHNwLCAxMDgoc3ApCS8qIGxhc3QgcmVzdG9yZSBzcCAqLworCWVyZXQKKworLnNldCBhdAorLnNldCBicmVhawpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvaXJxLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWI3NGFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvaXJxLmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogYmFzZWQgb24gaXJxLmMgZnJvbSBtNjhrIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworc3RhdGljIHUzMiBpZW5hYmxlOworCithc21saW5rYWdlIHZvaWQgZG9fSVJRKGludCBod2lycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKm9sZHJlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CisJaW50IGlycTsKKworCWlycV9lbnRlcigpOworCWlycSA9IGlycV9maW5kX21hcHBpbmcoTlVMTCwgaHdpcnEpOworCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCWlycV9leGl0KCk7CisKKwlzZXRfaXJxX3JlZ3Mob2xkcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoaXBfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlpZW5hYmxlIHw9ICgxIDw8IGQtPmh3aXJxKTsKKwlXUkNUTChDVExfSUVOQUJMRSwgaWVuYWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoaXBfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJaWVuYWJsZSAmPSB+KDEgPDwgZC0+aHdpcnEpOworCVdSQ1RMKENUTF9JRU5BQkxFLCBpZW5hYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJOSU9TMi1JTlRDIiwKKwkuaXJxX3VubWFzawk9IGNoaXBfdW5tYXNrLAorCS5pcnFfbWFzawk9IGNoaXBfbWFzaywKK307CisKK3N0YXRpYyBpbnQgaXJxX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJaXJxX2h3X251bWJlcl90IGh3X2lycV9udW0pCit7CisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZtX2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9kb21haW5fb3BzIGlycV9vcHMgPSB7CisJLm1hcAk9IGlycV9tYXAsCisJLnhsYXRlCT0gaXJxX2RvbWFpbl94bGF0ZV9vbmVjZWxsLAorfTsKKwordm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYWx0cixuaW9zMi0xLjAiKTsKKwlpZiAoIW5vZGUpCisJCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYWx0cixuaW9zMi0xLjEiKTsKKworCUJVR19PTighbm9kZSk7CisKKwlkb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIobm9kZSwgTklPUzJfQ1BVX05SX0lSUVMsICZpcnFfb3BzLCBOVUxMKTsKKwlCVUdfT04oIWRvbWFpbik7CisKKwlpcnFfc2V0X2RlZmF1bHRfaG9zdChkb21haW4pOworCW9mX25vZGVfcHV0KG5vZGUpOworCS8qIExvYWQgdGhlIGluaXRpYWwgaWVuYWJsZSB2YWx1ZSAqLworCWllbmFibGUgPSBSRENUTChDVExfSUVOQUJMRSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9taXNhbGlnbmVkLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9taXNhbGlnbmVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU1OTA3YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL21pc2FsaWduZWQuYwpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqICBsaW51eC9hcmNoL25pb3MyL2tlcm5lbC9taXNhbGlnbmVkLmMKKyAqCisgKiAgYmFzaWMgZW11bGF0aW9uIGZvciBtaXMtYWxpZ25lZCBhY2Nlc3NlcyBvbiB0aGUgTklPUyBJSSBjcHUKKyAqICBtb2RlbGxlZCBhZnRlciB0aGUgdmVyc2lvbiBmb3IgYXJtIGluIGFybS9hbGlnbm1lbnQuYworICoKKyAqICBCcmFkIFBhcmtlciA8YnJhZEBoZWVsdG9lLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQW1iaWVudCBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoYykgMjAxMCBBbHRlcmEgQ29ycG9yYXRpb24sIFNhbiBKb3NlLCBDYWxpZm9ybmlhLCBVU0EuCisgKiAgQ29weXJpZ2h0IChjKSAyMDEwIEFycm93IEVsZWN0cm9uaWNzLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YKKyAqIHRoaXMgYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworLyogaW5zdHJ1Y3Rpb25zIHdlIGVtdWxhdGUgKi8KKyNkZWZpbmUgSU5TVF9MREhVCTB4MGIKKyNkZWZpbmUgSU5TVF9TVEgJMHgwZAorI2RlZmluZSBJTlNUX0xESAkweDBmCisjZGVmaW5lIElOU1RfU1RXCTB4MTUKKyNkZWZpbmUgSU5TVF9MRFcJMHgxNworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYV91c2VyLCBtYV9rZXJuLCBtYV9za2lwcGVkLCBtYV9oYWxmLCBtYV93b3JkOworCitzdGF0aWMgdW5zaWduZWQgaW50IG1hX3VzZXJtb2RlOworI2RlZmluZSBVTV9XQVJOCQkweDAxCisjZGVmaW5lIFVNX0ZJWFVQCTB4MDIKKyNkZWZpbmUgVU1fU0lHTkFMCTB4MDQKKyNkZWZpbmUgS01fV0FSTgkJMHgwOAorCisvKiBzZWUgYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wdHJhY2UuaCAqLworc3RhdGljIHU4IHN5c19zdGFja19mcmFtZV9yZWdfb2Zmc2V0W10gPSB7CisJLyogc3RydWN0IHB0X3JlZ3MgKi8KKwk4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAwLAorCS8qIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKi8KKwkxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKK3N0YXRpYyBpbnQgcmVnX29mZnNldHNbMzJdOworCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfcmVnX3ZhbChzdHJ1Y3QgcHRfcmVncyAqZnAsIGludCByZWcpCit7CisJdTggKnAgPSAoKHU4ICopZnApICsgcmVnX29mZnNldHNbcmVnXTsKKworCXJldHVybiAqKHUzMiAqKXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcmVnX3ZhbChzdHJ1Y3QgcHRfcmVncyAqZnAsIGludCByZWcsIHUzMiB2YWwpCit7CisJdTggKnAgPSAoKHU4ICopZnApICsgcmVnX29mZnNldHNbcmVnXTsKKwkqKHUzMiAqKXAgPSB2YWw7Cit9CisKKy8qCisgKiAobWlzKWFsaWdubWVudCBoYW5kbGVyCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfdW5hbGlnbmVkX2Moc3RydWN0IHB0X3JlZ3MgKmZwLCBpbnQgY2F1c2UpCit7CisJdTMyIGlzbiwgYWRkciwgdmFsOworCWludCBpbl9rZXJuZWw7CisJdTggYSwgYiwgZDAsIGQxLCBkMiwgZDM7CisJdTE2IGltbTE2OworCXVuc2lnbmVkIGludCBmYXVsdDsKKworCS8qIGJhY2sgdXAgb25lIGluc3RydWN0aW9uICovCisJZnAtPmVhIC09IDQ7CisKKwlpZiAoZml4dXBfZXhjZXB0aW9uKGZwKSkgeworCQltYV9za2lwcGVkKys7CisJCXJldHVybjsKKwl9CisKKwlpbl9rZXJuZWwgPSAhdXNlcl9tb2RlKGZwKTsKKworCWlzbiA9ICoodW5zaWduZWQgbG9uZyAqKShmcC0+ZWEpOworCisJZmF1bHQgPSAwOworCisJLyogZG8gZml4dXAgaWYgaW4ga2VybmVsIG9yIG1vZGUgdHVybmVkIG9uICovCisJaWYgKGluX2tlcm5lbCB8fCAobWFfdXNlcm1vZGUgJiBVTV9GSVhVUCkpIHsKKwkJLyogZGVjb21wb3NlIGluc3RydWN0aW9uICovCisJCWEgPSAoaXNuID4+IDI3KSAmIDB4MWY7CisJCWIgPSAoaXNuID4+IDIyKSAmIDB4MWY7CisJCWltbTE2ID0gKGlzbiA+PiA2KSAmIDB4ZmZmZjsKKwkJYWRkciA9IGdldF9yZWdfdmFsKGZwLCBhKSArIGltbTE2OworCisJCS8qIGRvIGZpeHVwIHRvIHNhdmVkIHJlZ2lzdGVycyAqLworCQlzd2l0Y2ggKGlzbiAmIDB4M2YpIHsKKwkJY2FzZSBJTlNUX0xESFU6CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQwLCAodTggKikoYWRkciswKSk7CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQxLCAodTggKikoYWRkcisxKSk7CisJCQl2YWwgPSAoZDEgPDwgOCkgfCBkMDsKKwkJCXB1dF9yZWdfdmFsKGZwLCBiLCB2YWwpOworCQkJbWFfaGFsZisrOworCQkJYnJlYWs7CisJCWNhc2UgSU5TVF9TVEg6CisJCQl2YWwgPSBnZXRfcmVnX3ZhbChmcCwgYik7CisJCQlkMSA9IHZhbCA+PiA4OworCQkJZDAgPSB2YWwgPj4gMDsKKworCQkJcHJfZGVidWcoInN0aDogcmE9JWQgKCUwOHgpIHJiPSVkICglMDh4KSwgaW1tMTYgJTA0eCBhZGRyICUwOHggdmFsICUwOHhcbiIsCisJCQkJYSwgZ2V0X3JlZ192YWwoZnAsIGEpLAorCQkJCWIsIGdldF9yZWdfdmFsKGZwLCBiKSwKKwkJCQlpbW0xNiwgYWRkciwgdmFsKTsKKworCQkJaWYgKGluX2tlcm5lbCkgeworCQkJCSoodTggKikoYWRkciswKSA9IGQwOworCQkJCSoodTggKikoYWRkcisxKSA9IGQxOworCQkJfSBlbHNlIHsKKwkJCQlmYXVsdCB8PSBfX3B1dF91c2VyKGQwLCAodTggKikoYWRkciswKSk7CisJCQkJZmF1bHQgfD0gX19wdXRfdXNlcihkMSwgKHU4ICopKGFkZHIrMSkpOworCQkJfQorCQkJbWFfaGFsZisrOworCQkJYnJlYWs7CisJCWNhc2UgSU5TVF9MREg6CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQwLCAodTggKikoYWRkciswKSk7CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQxLCAodTggKikoYWRkcisxKSk7CisJCQl2YWwgPSAoc2hvcnQpKChkMSA8PCA4KSB8IGQwKTsKKwkJCXB1dF9yZWdfdmFsKGZwLCBiLCB2YWwpOworCQkJbWFfaGFsZisrOworCQkJYnJlYWs7CisJCWNhc2UgSU5TVF9TVFc6CisJCQl2YWwgPSBnZXRfcmVnX3ZhbChmcCwgYik7CisJCQlkMyA9IHZhbCA+PiAyNDsKKwkJCWQyID0gdmFsID4+IDE2OworCQkJZDEgPSB2YWwgPj4gODsKKwkJCWQwID0gdmFsID4+IDA7CisJCQlpZiAoaW5fa2VybmVsKSB7CisJCQkJKih1OCAqKShhZGRyKzApID0gZDA7CisJCQkJKih1OCAqKShhZGRyKzEpID0gZDE7CisJCQkJKih1OCAqKShhZGRyKzIpID0gZDI7CisJCQkJKih1OCAqKShhZGRyKzMpID0gZDM7CisJCQl9IGVsc2UgeworCQkJCWZhdWx0IHw9IF9fcHV0X3VzZXIoZDAsICh1OCAqKShhZGRyKzApKTsKKwkJCQlmYXVsdCB8PSBfX3B1dF91c2VyKGQxLCAodTggKikoYWRkcisxKSk7CisJCQkJZmF1bHQgfD0gX19wdXRfdXNlcihkMiwgKHU4ICopKGFkZHIrMikpOworCQkJCWZhdWx0IHw9IF9fcHV0X3VzZXIoZDMsICh1OCAqKShhZGRyKzMpKTsKKwkJCX0KKwkJCW1hX3dvcmQrKzsKKwkJCWJyZWFrOworCQljYXNlIElOU1RfTERXOgorCQkJZmF1bHQgfD0gX19nZXRfdXNlcihkMCwgKHU4ICopKGFkZHIrMCkpOworCQkJZmF1bHQgfD0gX19nZXRfdXNlcihkMSwgKHU4ICopKGFkZHIrMSkpOworCQkJZmF1bHQgfD0gX19nZXRfdXNlcihkMiwgKHU4ICopKGFkZHIrMikpOworCQkJZmF1bHQgfD0gX19nZXRfdXNlcihkMywgKHU4ICopKGFkZHIrMykpOworCQkJdmFsID0gKGQzIDw8IDI0KSB8IChkMiA8PCAxNikgfCAoZDEgPDwgOCkgfCBkMDsKKwkJCXB1dF9yZWdfdmFsKGZwLCBiLCB2YWwpOworCQkJbWFfd29yZCsrOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlhZGRyID0gUkRDVEwoQ1RMX0JBREFERFIpOworCWNhdXNlID4+PSAyOworCisJaWYgKGZhdWx0KSB7CisJCWlmIChpbl9rZXJuZWwpIHsKKwkJCXByX2VycigiZmF1bHQgZHVyaW5nIGtlcm5lbCBtaXNhbGlnbmVkIGZpeHVwIEAgJSNseDsgYWRkciAweCUwOHg7IGlzbj0weCUwOHhcbiIsCisJCQkJZnAtPmVhLCAodW5zaWduZWQgaW50KWFkZHIsCisJCQkJKHVuc2lnbmVkIGludClpc24pOworCQl9IGVsc2UgeworCQkJcHJfZXJyKCJmYXVsdCBkdXJpbmcgdXNlciBtaXNhbGlnbmVkIGZpeHVwIEAgJSNseDsgaXNuPSUwOHggYWRkcj0weCUwOHggc3A9MHglMDhseCBwaWQ9JWRcbiIsCisJCQkJZnAtPmVhLAorCQkJCSh1bnNpZ25lZCBpbnQpaXNuLCBhZGRyLCBmcC0+c3AsCisJCQkJY3VycmVudC0+cGlkKTsKKworCQkJX2V4Y2VwdGlvbihTSUdTRUdWLCBmcCwgU0VHVl9NQVBFUlIsIGZwLT5lYSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIGtlcm5lbCBtb2RlIC0KKwkgKiAgbm90ZSBleGNlcHRpb24gYW5kIHNraXAgYmFkIGluc3RydWN0aW9uIChyZXR1cm4pCisJICovCisJaWYgKGluX2tlcm5lbCkgeworCQltYV9rZXJuKys7CisJCWZwLT5lYSArPSA0OworCisJCWlmIChtYV91c2VybW9kZSAmIEtNX1dBUk4pIHsKKwkJCXByX2Vycigia2VybmVsIHVuYWxpZ25lZCBhY2Nlc3MgQCAlI2x4OyBCQURBRERSIDB4JTA4eDsgY2F1c2U9JWQsIGlzbj0weCUwOHhcbiIsCisJCQkJZnAtPmVhLAorCQkJCSh1bnNpZ25lZCBpbnQpYWRkciwgY2F1c2UsCisJCQkJKHVuc2lnbmVkIGludClpc24pOworCQkJLyogc2hvd19yZWdzKGZwKTsgKi8KKwkJfQorCisJCXJldHVybjsKKwl9CisKKwltYV91c2VyKys7CisKKwkvKgorCSAqIHVzZXIgbW9kZSAtCisJICogIHBvc3NpYmx5IHdhcm4sCisJICogIHBvc3NpYmx5IHNlbmQgU0lHQlVTIHNpZ25hbCB0byBwcm9jZXNzCisJICovCisJaWYgKG1hX3VzZXJtb2RlICYgVU1fV0FSTikgeworCQlwcl9lcnIoInVzZXIgdW5hbGlnbmVkIGFjY2VzcyBAICUjbHg7IGlzbj0weCUwOGx4IGVhPTB4JTA4bHggcmE9MHglMDhseCBzcD0weCUwOGx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgKHVuc2lnbmVkIGxvbmcpaXNuLAorCQkJZnAtPmVhLCBmcC0+cmEsIGZwLT5zcCk7CisJfQorCisJaWYgKG1hX3VzZXJtb2RlICYgVU1fU0lHTkFMKQorCQlfZXhjZXB0aW9uKFNJR0JVUywgZnAsIEJVU19BRFJBTE4sIGZwLT5lYSk7CisJZWxzZQorCQlmcC0+ZWEgKz0gNDsJLyogZWxzZSBhZHZhbmNlICovCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtaXNhbGlnbmVkX2NhbGNfcmVnX29mZnNldHModm9pZCkKK3sKKwlpbnQgaSwgciwgb2Zmc2V0OworCisJLyogcHJlLWNhbGMgb2Zmc2V0cyBvZiByZWdpc3RlcnMgb24gc3lzIGNhbGwgc3RhY2sgZnJhbWUgKi8KKwlvZmZzZXQgPSAwOworCisJLyogc3RydWN0IHB0X3JlZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlyID0gc3lzX3N0YWNrX2ZyYW1lX3JlZ19vZmZzZXRbaV07CisJCXJlZ19vZmZzZXRzW3JdID0gb2Zmc2V0OworCQlvZmZzZXQgKz0gNDsKKwl9CisKKwkvKiBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICovCisJb2Zmc2V0ID0gLXNpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKTsKKwlmb3IgKGkgPSAxNjsgaSA8IDMyOyBpKyspIHsKKwkJciA9IHN5c19zdGFja19mcmFtZV9yZWdfb2Zmc2V0W2ldOworCQlyZWdfb2Zmc2V0c1tyXSA9IG9mZnNldDsKKwkJb2Zmc2V0ICs9IDQ7CisJfQorfQorCisKK3N0YXRpYyBpbnQgX19pbml0IG1pc2FsaWduZWRfaW5pdCh2b2lkKQoreworCS8qIGRlZmF1bHQgbW9kZSAtIHNpbGVudCBmaXggKi8KKwltYV91c2VybW9kZSA9IFVNX0ZJWFVQIHwgS01fV0FSTjsKKworCW1pc2FsaWduZWRfY2FsY19yZWdfb2Zmc2V0cygpOworCisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsKG1pc2FsaWduZWRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvbmlvczIva2VybmVsL21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTI0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9tb2R1bGUuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIEtlcm5lbCBtb2R1bGUgc3VwcG9ydCBmb3IgTmlvcyBJSS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKiAgIFdyaXR0ZW4gYnkgV2VudGFvIFh1IDx4dXdlbnRhb0BtaWNyb3Ryb25peC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMgUnVzdHkgUnVzc2VsbAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKy8qCisgKiBNb2R1bGVzIHNob3VsZCBOT1QgYmUgYWxsb2NhdGVkIHdpdGgga21hbGxvYyBmb3IgKG9idmlvdXMpIHJlYXNvbnMuCisgKiBCdXQgd2UgZG8gaXQgZm9yIG5vdyB0byBhdm9pZCByZWxvY2F0aW9uIGlzc3Vlcy4gQ0FMTDI2L1BDUkVMMjYgY2Fubm90IHJlYWNoCisgKiBmcm9tIDB4ODAwMDAwMDAgKHZtYWxsb2MgYXJlYSkgdG8gMHhjMDAwMDAwMDAgKGtlcm5lbCkgKGttYWxsb2MgcmV0dXJucworICogYWRkcmVzc2VzIGluIDB4YzAwMDAwMDApCisgKi8KK3ZvaWQgKm1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Cit9CisKKy8qIEZyZWUgbWVtb3J5IHJldHVybmVkIGZyb20gbW9kdWxlX2FsbG9jICovCit2b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3sKKwlrZnJlZShtb2R1bGVfcmVnaW9uKTsKK30KKworaW50IGFwcGx5X3JlbG9jYXRlX2FkZChFbGYzMl9TaGRyICpzZWNoZHJzLCBjb25zdCBjaGFyICpzdHJ0YWIsCisJCQl1bnNpZ25lZCBpbnQgc3ltaW5kZXgsIHVuc2lnbmVkIGludCByZWxzZWMsCisJCQlzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJdW5zaWduZWQgaW50IGk7CisJRWxmMzJfUmVsYSAqcmVsYSA9ICh2b2lkICopc2VjaGRyc1tyZWxzZWNdLnNoX2FkZHI7CisKKwlwcl9kZWJ1ZygiQXBwbHlpbmcgcmVsb2NhdGUgc2VjdGlvbiAldSB0byAldVxuIiwgcmVsc2VjLAorCQkgc2VjaGRyc1tyZWxzZWNdLnNoX2luZm8pOworCisJZm9yIChpID0gMDsgaSA8IHNlY2hkcnNbcmVsc2VjXS5zaF9zaXplIC8gc2l6ZW9mKCpyZWxhKTsgaSsrKSB7CisJCS8qIFRoaXMgaXMgd2hlcmUgdG8gbWFrZSB0aGUgY2hhbmdlICovCisJCXVpbnQzMl90IHdvcmQ7CisJCXVpbnQzMl90ICpsb2MKKwkJCT0gKCh2b2lkICopc2VjaGRyc1tzZWNoZHJzW3JlbHNlY10uc2hfaW5mb10uc2hfYWRkcgorCQkJICAgKyByZWxhW2ldLnJfb2Zmc2V0KTsKKwkJLyogVGhpcyBpcyB0aGUgc3ltYm9sIGl0IGlzIHJlZmVycmluZyB0by4gIE5vdGUgdGhhdCBhbGwKKwkJICAgdW5kZWZpbmVkIHN5bWJvbHMgaGF2ZSBiZWVuIHJlc29sdmVkLiAgKi8KKwkJRWxmMzJfU3ltICpzeW0KKwkJCT0gKChFbGYzMl9TeW0gKilzZWNoZHJzW3N5bWluZGV4XS5zaF9hZGRyCisJCQkJKyBFTEYzMl9SX1NZTShyZWxhW2ldLnJfaW5mbykpOworCQl1aW50MzJfdCB2ID0gc3ltLT5zdF92YWx1ZSArIHJlbGFbaV0ucl9hZGRlbmQ7CisKKwkJcHJfZGVidWcoInJlbHR5cGUgJWQgMHgleCBuYW1lOjwlcz5cbiIsCisJCQlFTEYzMl9SX1RZUEUocmVsYVtpXS5yX2luZm8pLAorCQkJcmVsYVtpXS5yX29mZnNldCwgc3RydGFiICsgc3ltLT5zdF9uYW1lKTsKKworCQlzd2l0Y2ggKEVMRjMyX1JfVFlQRShyZWxhW2ldLnJfaW5mbykpIHsKKwkJY2FzZSBSX05JT1MyX05PTkU6CisJCQlicmVhazsKKwkJY2FzZSBSX05JT1MyX0JGRF9SRUxPQ18zMjoKKwkJCSpsb2MgKz0gdjsKKwkJCWJyZWFrOworCQljYXNlIFJfTklPUzJfUENSRUwxNjoKKwkJCXYgLT0gKHVpbnQzMl90KWxvYyArIDQ7CisJCQlpZiAoKGludDMyX3QpdiA+IDB4N2ZmZiB8fAorCQkJCShpbnQzMl90KXYgPCAtKGludDMyX3QpMHg4MDAwKSB7CisJCQkJcHJfZXJyKCJtb2R1bGUgJXM6IHJlbG9jYXRpb24gb3ZlcmZsb3dcbiIsCisJCQkJCW1vZC0+bmFtZSk7CisJCQkJcmV0dXJuIC1FTk9FWEVDOworCQkJfQorCQkJd29yZCA9ICpsb2M7CisJCQkqbG9jID0gKCgoKHdvcmQgPj4gMjIpIDw8IDE2KSB8ICh2ICYgMHhmZmZmKSkgPDwgNikgfAorCQkJCSh3b3JkICYgMHgzZik7CisJCQlicmVhazsKKwkJY2FzZSBSX05JT1MyX0NBTEwyNjoKKwkJCWlmICh2ICYgMykgeworCQkJCXByX2VycigibW9kdWxlICVzOiBkYW5nZXJvdXMgcmVsb2NhdGlvblxuIiwKKwkJCQkJbW9kLT5uYW1lKTsKKwkJCQlyZXR1cm4gLUVOT0VYRUM7CisJCQl9CisJCQlpZiAoKHYgPj4gMjgpICE9ICgodWludDMyX3QpbG9jID4+IDI4KSkgeworCQkJCXByX2VycigibW9kdWxlICVzOiByZWxvY2F0aW9uIG92ZXJmbG93XG4iLAorCQkJCQltb2QtPm5hbWUpOworCQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCX0KKwkJCSpsb2MgPSAoKmxvYyAmIDB4M2YpIHwgKCh2ID4+IDIpIDw8IDYpOworCQkJYnJlYWs7CisJCWNhc2UgUl9OSU9TMl9ISTE2OgorCQkJd29yZCA9ICpsb2M7CisJCQkqbG9jID0gKCgoKHdvcmQgPj4gMjIpIDw8IDE2KSB8CisJCQkJKCh2ID4+IDE2KSAmIDB4ZmZmZikpIDw8IDYpIHwgKHdvcmQgJiAweDNmKTsKKwkJCWJyZWFrOworCQljYXNlIFJfTklPUzJfTE8xNjoKKwkJCXdvcmQgPSAqbG9jOworCQkJKmxvYyA9ICgoKCh3b3JkID4+IDIyKSA8PCAxNikgfCAodiAmIDB4ZmZmZikpIDw8IDYpIHwKKwkJCQkJKHdvcmQgJiAweDNmKTsKKwkJCWJyZWFrOworCQljYXNlIFJfTklPUzJfSElBREoxNjoKKwkJCXsKKwkJCQlFbGYzMl9BZGRyIHdvcmQyOworCisJCQkJd29yZCA9ICpsb2M7CisJCQkJd29yZDIgPSAoKHYgPj4gMTYpICsgKCh2ID4+IDE1KSAmIDEpKSAmIDB4ZmZmZjsKKwkJCQkqbG9jID0gKCgoKHdvcmQgPj4gMjIpIDw8IDE2KSB8IHdvcmQyKSA8PCA2KSB8CisJCQkJCQkod29yZCAmIDB4M2YpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByX2VycigibW9kdWxlICVzOiBVbmtub3duIHJlbG9jOiAldVxuIiwKKwkJCQltb2QtPm5hbWUsIEVMRjMyX1JfVFlQRShyZWxhW2ldLnJfaW5mbykpOworCQkJcmV0dXJuIC1FTk9FWEVDOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisJCQlzdHJ1Y3QgbW9kdWxlICptZSkKK3sKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL25pb3MyX2tzeW1zLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9uaW9zMl9rc3ltcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMmY1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9uaW9zMl9rc3ltcy5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKy8qIHN0cmluZyBmdW5jdGlvbnMgKi8KKworRVhQT1JUX1NZTUJPTChtZW1jcHkpOworRVhQT1JUX1NZTUJPTChtZW1zZXQpOworRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKKworLyoKKyAqIGxpYmdjYyBmdW5jdGlvbnMgLSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZQorICogY29tcGlsZXIuLi4gIChwcm90b3R5cGVzIGFyZSBub3QgY29ycmVjdCB0aG91Z2gsIGJ1dCB0aGF0CisgKiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgc2luY2UgdGhleSdyZSBub3QgdmVyc2lvbmVkKS4KKyAqLworI2RlZmluZSBERUNMQVJFX0VYUE9SVChuYW1lKQlleHRlcm4gdm9pZCBuYW1lKHZvaWQpOyBFWFBPUlRfU1lNQk9MKG5hbWUpCisKK0RFQ0xBUkVfRVhQT1JUKF9fZ2NjX2JjbXApOworREVDTEFSRV9FWFBPUlQoX19kaXZzaTMpOworREVDTEFSRV9FWFBPUlQoX19tb2RkaTMpOworREVDTEFSRV9FWFBPUlQoX19tb2RzaTMpOworREVDTEFSRV9FWFBPUlQoX191ZGl2bW9kZGk0KTsKK0RFQ0xBUkVfRVhQT1JUKF9fdWRpdnNpMyk7CitERUNMQVJFX0VYUE9SVChfX3Vtb2RkaTMpOworREVDTEFSRV9FWFBPUlQoX191bW9kc2kzKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbXVsZGkzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTA3NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogQXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2NwdWluZm8uaD4KKworYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7Cithc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTsKKwordm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOworCit2b2lkIGFyY2hfY3B1X2lkbGUodm9pZCkKK3sKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKKy8qCisgKiBUaGUgZGV2ZWxvcG1lbnQgYm9hcmRzIGhhdmUgbm8gd2F5IHRvIHB1bGwgYSBib2FyZCByZXNldC4gSnVzdCBqdW1wIHRvIHRoZQorICogY3B1IHJlc2V0IGFkZHJlc3MgYW5kIGxldCB0aGUgYm9vdCBsb2FkZXIgb3IgdGhlIGNvZGUgaW4gaGVhZC5TIHRha2UgY2FyZSBvZgorICogcmVzZXR0aW5nIHBlcmlwaGVyYWxzLgorICovCit2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICpfX3VudXNlZCkKK3sKKwlwcl9ub3RpY2UoIk1hY2hpbmUgcmVzdGFydCAoJTA4eCkuLi5cbiIsIGNwdWluZm8ucmVzZXRfYWRkcik7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJImptcAklMFxuXHQiCisJOgorCTogInIiIChjcHVpbmZvLnJlc2V0X2FkZHIpCisJOiAicjQiKTsKK30KKwordm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKK3sKKwlwcl9ub3RpY2UoIk1hY2hpbmUgaGFsdC4uLlxuIik7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlmb3IgKDs7KQorCQk7Cit9CisKKy8qCisgKiBUaGVyZSBpcyBubyB3YXkgdG8gcG93ZXIgb2ZmIHRoZSBkZXZlbG9wbWVudCBib2FyZHMuIFNvIGp1c3Qgc3BpbiBmb3Igbm93LiBJZgorICogd2UgZXZlciBoYXZlIGEgd2F5IG9mIHJlc2V0dGluZyBhIGJvYXJkIHVzaW5nIGEgR1BJTyB3ZSBzaG91bGQgYWRkIHRoYXQgaGVyZS4KKyAqLwordm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQoreworCXByX25vdGljZSgiTWFjaGluZSBwb3dlciBvZmYuLi5cbiIpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJZm9yICg7OykKKwkJOworfQorCit2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwcl9ub3RpY2UoIlxuIik7CisJc2hvd19yZWdzX3ByaW50X2luZm8oS0VSTl9ERUZBVUxUKTsKKworCXByX25vdGljZSgicjE6ICUwOGx4IHIyOiAlMDhseCByMzogJTA4bHggcjQ6ICUwOGx4XG4iLAorCQlyZWdzLT5yMSwgIHJlZ3MtPnIyLCAgcmVncy0+cjMsICByZWdzLT5yNCk7CisKKwlwcl9ub3RpY2UoInI1OiAlMDhseCByNjogJTA4bHggcjc6ICUwOGx4IHI4OiAlMDhseFxuIiwKKwkJcmVncy0+cjUsICByZWdzLT5yNiwgIHJlZ3MtPnI3LCAgcmVncy0+cjgpOworCisJcHJfbm90aWNlKCJyOTogJTA4bHggcjEwOiAlMDhseCByMTE6ICUwOGx4IHIxMjogJTA4bHhcbiIsCisJCXJlZ3MtPnI5LCAgcmVncy0+cjEwLCByZWdzLT5yMTEsIHJlZ3MtPnIxMik7CisKKwlwcl9ub3RpY2UoInIxMzogJTA4bHggcjE0OiAlMDhseCByMTU6ICUwOGx4XG4iLAorCQlyZWdzLT5yMTMsIHJlZ3MtPnIxNCwgcmVncy0+cjE1KTsKKworCXByX25vdGljZSgicmE6ICUwOGx4IGZwOiAgJTA4bHggc3A6ICUwOGx4IGdwOiAlMDhseFxuIiwKKwkJcmVncy0+cmEsICByZWdzLT5mcCwgIHJlZ3MtPnNwLCAgcmVncy0+Z3ApOworCisJcHJfbm90aWNlKCJlYTogJTA4bHggZXN0YXR1czogJTA4bHhcbiIsCisJCXJlZ3MtPmVhLCAgcmVncy0+ZXN0YXR1cyk7Cit9CisKK3ZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCit7CisJc2V0X2ZzKFVTRVJfRFMpOworfQorCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKKwkJdW5zaWduZWQgbG9uZyB1c3AsIHVuc2lnbmVkIGxvbmcgYXJnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVncyA9IHRhc2tfcHRfcmVncyhwKTsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdGFjazsKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpjaGlsZHN0YWNrID0KKwkJKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopY2hpbGRyZWdzKSAtIDE7CisKKwlpZiAodW5saWtlbHkocC0+ZmxhZ3MgJiBQRl9LVEhSRUFEKSkgeworCQltZW1zZXQoY2hpbGRzdGFjaywgMCwKKwkJCXNpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKSArIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCisJCWNoaWxkc3RhY2stPnIxNiA9IHVzcDsJCS8qIGZuICovCisJCWNoaWxkc3RhY2stPnIxNyA9IGFyZzsKKwkJY2hpbGRzdGFjay0+cmEgPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fa2VybmVsX3RocmVhZDsKKwkJY2hpbGRyZWdzLT5lc3RhdHVzID0gU1RBVFVTX1BJRTsKKwkJY2hpbGRyZWdzLT5zcCA9ICh1bnNpZ25lZCBsb25nKSBjaGlsZHN0YWNrOworCisJCXAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZykgY2hpbGRzdGFjazsKKwkJcC0+dGhyZWFkLmtyZWdzID0gY2hpbGRyZWdzOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZWdzID0gY3VycmVudF9wdF9yZWdzKCk7CisJKmNoaWxkcmVncyA9ICpyZWdzOworCWNoaWxkcmVncy0+cjIgPSAwOwkvKiBTZXQgdGhlIHJldHVybiB2YWx1ZSBmb3IgdGhlIGNoaWxkLiAqLworCWNoaWxkcmVncy0+cjcgPSAwOworCisJc3RhY2sgPSAoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikgcmVncykgLSAxOworCSpjaGlsZHN0YWNrID0gKnN0YWNrOworCWNoaWxkc3RhY2stPnJhID0gKHVuc2lnbmVkIGxvbmcpcmV0X2Zyb21fZm9yazsKKwlwLT50aHJlYWQua3JlZ3MgPSBjaGlsZHJlZ3M7CisJcC0+dGhyZWFkLmtzcCA9ICh1bnNpZ25lZCBsb25nKSBjaGlsZHN0YWNrOworCisJaWYgKHVzcCkKKwkJY2hpbGRyZWdzLT5zcCA9IHVzcDsKKworCS8qIEluaXRpYWxpemUgdGxzIHJlZ2lzdGVyLiAqLworCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykKKwkJY2hpbGRzdGFjay0+cjIzID0gcmVncy0+cjg7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCUdlbmVyaWMgZHVtcGluZyBjb2RlLiBVc2VkIGZvciBwYW5pYyBhbmQgZGVidWcuCisgKi8KK3ZvaWQgZHVtcChzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJdW5zaWduZWQgbG9uZwkqc3A7CisJdW5zaWduZWQgY2hhcgkqdHA7CisJaW50CQlpOworCisJcHJfZW1lcmcoIlxuQ1VSUkVOVCBQUk9DRVNTOlxuXG4iKTsKKwlwcl9lbWVyZygiQ09NTT0lcyBQSUQ9JWRcbiIsIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisKKwlpZiAoY3VycmVudC0+bW0pIHsKKwkJcHJfZW1lcmcoIlRFWFQ9JTA4eC0lMDh4IERBVEE9JTA4eC0lMDh4IEJTUz0lMDh4LSUwOHhcbiIsCisJCQkoaW50KSBjdXJyZW50LT5tbS0+c3RhcnRfY29kZSwKKwkJCShpbnQpIGN1cnJlbnQtPm1tLT5lbmRfY29kZSwKKwkJCShpbnQpIGN1cnJlbnQtPm1tLT5zdGFydF9kYXRhLAorCQkJKGludCkgY3VycmVudC0+bW0tPmVuZF9kYXRhLAorCQkJKGludCkgY3VycmVudC0+bW0tPmVuZF9kYXRhLAorCQkJKGludCkgY3VycmVudC0+bW0tPmJyayk7CisJCXByX2VtZXJnKCJVU0VSLVNUQUNLPSUwOHggIEtFUk5FTC1TVEFDSz0lMDh4XG5cbiIsCisJCQkoaW50KSBjdXJyZW50LT5tbS0+c3RhcnRfc3RhY2ssCisJCQkoaW50KSgoKHVuc2lnbmVkIGxvbmcpIGN1cnJlbnQpICsgVEhSRUFEX1NJWkUpKTsKKwl9CisKKwlwcl9lbWVyZygiUEM6ICUwOGx4XG4iLCBmcC0+ZWEpOworCXByX2VtZXJnKCJTUjogJTA4bHggICAgU1A6ICUwOGx4XG4iLAorCQkobG9uZykgZnAtPmVzdGF0dXMsIChsb25nKSBmcCk7CisKKwlwcl9lbWVyZygicjE6ICUwOGx4ICAgIHIyOiAlMDhseCAgICByMzogJTA4bHhcbiIsCisJCWZwLT5yMSwgZnAtPnIyLCBmcC0+cjMpOworCisJcHJfZW1lcmcoInI0OiAlMDhseCAgICByNTogJTA4bHggICAgcjY6ICUwOGx4ICAgIHI3OiAlMDhseFxuIiwKKwkJZnAtPnI0LCBmcC0+cjUsIGZwLT5yNiwgZnAtPnI3KTsKKwlwcl9lbWVyZygicjg6ICUwOGx4ICAgIHI5OiAlMDhseCAgICByMTA6ICUwOGx4ICAgIHIxMTogJTA4bHhcbiIsCisJCWZwLT5yOCwgZnAtPnI5LCBmcC0+cjEwLCBmcC0+cjExKTsKKwlwcl9lbWVyZygicjEyOiAlMDhseCAgcjEzOiAlMDhseCAgICByMTQ6ICUwOGx4ICAgIHIxNTogJTA4bHhcbiIsCisJCWZwLT5yMTIsIGZwLT5yMTMsIGZwLT5yMTQsIGZwLT5yMTUpOworCXByX2VtZXJnKCJvcjI6ICUwOGx4ICAgcmE6ICUwOGx4ICAgICBmcDogJTA4bHggICAgc3A6ICUwOGx4XG4iLAorCQlmcC0+b3JpZ19yMiwgZnAtPnJhLCBmcC0+ZnAsIGZwLT5zcCk7CisJcHJfZW1lcmcoIlxuVVNQOiAlMDh4ICAgVFJBUEZSQU1FOiAlMDh4XG4iLAorCQkodW5zaWduZWQgaW50KSBmcC0+c3AsICh1bnNpZ25lZCBpbnQpIGZwKTsKKworCXByX2VtZXJnKCJcbkNPREU6Iik7CisJdHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgZnAtPmVhKSAtIDB4MjA7CisJZm9yIChzcCA9ICh1bnNpZ25lZCBsb25nICopIHRwLCBpID0gMDsgKGkgPCAweDQwKTsgIGkgKz0gNCkgeworCQlpZiAoKGkgJSAweDEwKSA9PSAwKQorCQkJcHJfZW1lcmcoIlxuJTA4eDogIiwgKGludCkgKHRwICsgaSkpOworCQlwcl9lbWVyZygiJTA4eCAiLCAoaW50KSAqc3ArKyk7CisJfQorCXByX2VtZXJnKCJcbiIpOworCisJcHJfZW1lcmcoIlxuS0VSTkVMIFNUQUNLOiIpOworCXRwID0gKCh1bnNpZ25lZCBjaGFyICopIGZwKSAtIDB4NDA7CisJZm9yIChzcCA9ICh1bnNpZ25lZCBsb25nICopIHRwLCBpID0gMDsgKGkgPCAweGMwKTsgaSArPSA0KSB7CisJCWlmICgoaSAlIDB4MTApID09IDApCisJCQlwcl9lbWVyZygiXG4lMDh4OiAiLCAoaW50KSAodHAgKyBpKSk7CisJCXByX2VtZXJnKCIlMDh4ICIsIChpbnQpICpzcCsrKTsKKwl9CisJcHJfZW1lcmcoIlxuIik7CisJcHJfZW1lcmcoIlxuIik7CisKKwlwcl9lbWVyZygiXG5VU0VSIFNUQUNLOiIpOworCXRwID0gKHVuc2lnbmVkIGNoYXIgKikgKGZwLT5zcCAtIDB4MTApOworCWZvciAoc3AgPSAodW5zaWduZWQgbG9uZyAqKSB0cCwgaSA9IDA7IChpIDwgMHg4MCk7IGkgKz0gNCkgeworCQlpZiAoKGkgJSAweDEwKSA9PSAwKQorCQkJcHJfZW1lcmcoIlxuJTA4eDogIiwgKGludCkgKHRwICsgaSkpOworCQlwcl9lbWVyZygiJTA4eCAiLCAoaW50KSAqc3ArKyk7CisJfQorCXByX2VtZXJnKCJcblxuIik7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZwLCBwYzsKKwl1bnNpZ25lZCBsb25nIHN0YWNrX3BhZ2U7CisJaW50IGNvdW50ID0gMDsKKworCWlmICghcCB8fCBwID09IGN1cnJlbnQgfHwgcC0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKQorCQlyZXR1cm4gMDsKKworCXN0YWNrX3BhZ2UgPSAodW5zaWduZWQgbG9uZylwOworCWZwID0gKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcC0+dGhyZWFkLmtzcCktPmZwOwkvKiA7ZGd0MiAqLworCWRvIHsKKwkJaWYgKGZwIDwgc3RhY2tfcGFnZStzaXplb2Yoc3RydWN0IHRhc2tfc3RydWN0KSB8fAorCQkJZnAgPj0gODE4NCtzdGFja19wYWdlKQkvKiA7ZGd0Mjt0bXAgKi8KKwkJCXJldHVybiAwOworCQlwYyA9ICgodW5zaWduZWQgbG9uZyAqKWZwKVsxXTsKKwkJaWYgKCFpbl9zY2hlZF9mdW5jdGlvbnMocGMpKQorCQkJcmV0dXJuIHBjOworCQlmcCA9ICoodW5zaWduZWQgbG9uZyAqKSBmcDsKKwl9IHdoaWxlIChjb3VudCsrIDwgMTYpOwkJLyogO2RndDI7dG1wICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEbyBuZWNlc3Nhcnkgc2V0dXAgdG8gc3RhcnQgdXAgYSBuZXdseSBleGVjdXRlZCB0aHJlYWQuCisgKiBXaWxsIHN0YXJ0dXAgaW4gdXNlciBtb2RlIChzdGF0dXNfZXh0ZW5zaW9uID0gMCkuCisgKi8KK3ZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIHNwKQoreworCW1lbXNldCgodm9pZCAqKSByZWdzLCAwLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlyZWdzLT5lc3RhdHVzID0gRVNUQVRVU19FUElFIHwgRVNUQVRVU19FVTsKKwlyZWdzLT5lYSA9IHBjOworCXJlZ3MtPnNwID0gc3A7Cit9CisKKyNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CisKKy8qIEZpbGwgaW4gdGhlIEZQVSBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLiAqLworaW50IGR1bXBfZnB1KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBlbGZfZnByZWdzZXRfdCAqcikKK3sKKwlyZXR1cm4gMDsgLyogTmlvczIgaGFzIG5vIEZQVSBhbmQgdGh1cyBubyBGUFUgcmVnaXN0ZXJzICovCit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9wcm9tLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9wcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyMmQzMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3Byb20uYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogRGV2aWNlIHRyZWUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogQmFzZWQgb24gTUlQUyBzdXBwb3J0IGZvciBDT05GSUdfT0YgZGV2aWNlIHRyZWUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBDaXNjbyBTeXN0ZW1zIEluYy4gPGRlZGlhb0BjaXNjby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKwordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9hZGRfbWVtb3J5X2FyY2godTY0IGJhc2UsIHU2NCBzaXplKQoreworCXU2NCBrZXJuZWxfc3RhcnQgPSAodTY0KXZpcnRfdG9fcGh5cyhfdGV4dCk7CisKKwlpZiAoIW1lbW9yeV9zaXplICYmCisJICAgIChrZXJuZWxfc3RhcnQgPj0gYmFzZSkgJiYgKGtlcm5lbF9zdGFydCA8IChiYXNlICsgc2l6ZSkpKQorCQltZW1vcnlfc2l6ZSA9IHNpemU7CisKK30KKwordm9pZCAqIF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHU2NCBzaXplLCB1NjQgYWxpZ24pCit7CisJcmV0dXJuIGFsbG9jX2Jvb3RtZW1fYWxpZ24oc2l6ZSwgYWxpZ24pOworfQorCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2RldnRyZWUodm9pZCAqcGFyYW1zKQoreworCV9fYmUzMiAqZHRiID0gKHUzMiAqKV9fZHRiX3N0YXJ0OworI2lmIGRlZmluZWQoQ09ORklHX05JT1MyX0RUQl9BVF9QSFlTX0FERFIpCisJaWYgKGJlMzJfdG9fY3B1cCgoX19iZTMyICopQ09ORklHX05JT1MyX0RUQl9QSFlTX0FERFIpID09CisJCSBPRl9EVF9IRUFERVIpIHsKKwkJcGFyYW1zID0gKHZvaWQgKilDT05GSUdfTklPUzJfRFRCX1BIWVNfQUREUjsKKwkJZWFybHlfaW5pdF9kdF9zY2FuKHBhcmFtcyk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpZiAoYmUzMl90b19jcHUoKF9fYmUzMikgKmR0YikgPT0gT0ZfRFRfSEVBREVSKQorCQlwYXJhbXMgPSAodm9pZCAqKV9fZHRiX3N0YXJ0OworCisJZWFybHlfaW5pdF9kdF9zY2FuKHBhcmFtcyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbmlvczIva2VybmVsL3B0cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MWRkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9wdHJhY2UuYwpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyLmg+CisKK3N0YXRpYyBpbnQgZ2VucmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCWNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKHRhcmdldCk7CisJY29uc3Qgc3RydWN0IHN3aXRjaF9zdGFjayAqc3cgPSAoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MgLSAxOworCWludCByZXQgPSAwOworCisjZGVmaW5lIFJFR19PX1pFUk9fUkFOR0UoU1RBUlQsIEVORCkJCVwKKwlpZiAoIXJldCkJCQkJCVwKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dF96ZXJvKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCBcCisJCQlTVEFSVCAqIDQsIChFTkQgKiA0KSArIDQpOworCisjZGVmaW5lIFJFR19PX09ORShQVFIsIExPQykJXAorCWlmICghcmV0KQkJCVwKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwgUFRSLCBcCisJCQlMT0MgKiA0LCAoTE9DICogNCkgKyA0KTsKKworI2RlZmluZSBSRUdfT19SQU5HRShQVFIsIFNUQVJULCBFTkQpCVwKKwlpZiAoIXJldCkJCQkJXAorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCBQVFIsIFwKKwkJCVNUQVJUICogNCwgKEVORCAqIDQpICsgNCk7CisKKwlSRUdfT19aRVJPX1JBTkdFKFBUUl9SMCwgUFRSX1IwKTsKKwlSRUdfT19SQU5HRSgmcmVncy0+cjEsIFBUUl9SMSwgUFRSX1I3KTsKKwlSRUdfT19SQU5HRSgmcmVncy0+cjgsIFBUUl9SOCwgUFRSX1IxNSk7CisJUkVHX09fUkFOR0Uoc3csIFBUUl9SMTYsIFBUUl9SMjMpOworCVJFR19PX1pFUk9fUkFOR0UoUFRSX1IyNCwgUFRSX1IyNSk7IC8qIGV0IGFuZCBidCAqLworCVJFR19PX09ORSgmcmVncy0+Z3AsIFBUUl9HUCk7CisJUkVHX09fT05FKCZyZWdzLT5zcCwgUFRSX1NQKTsKKwlSRUdfT19PTkUoJnJlZ3MtPmZwLCBQVFJfRlApOworCVJFR19PX09ORSgmcmVncy0+ZWEsIFBUUl9FQSk7CisJUkVHX09fWkVST19SQU5HRShQVFJfQkEsIFBUUl9CQSk7CisJUkVHX09fT05FKCZyZWdzLT5yYSwgUFRSX1JBKTsKKwlSRUdfT19PTkUoJnJlZ3MtPmVhLCBQVFJfUEMpOyAvKiB1c2UgZWEgZm9yIFBDICovCisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXRfemVybygmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJIFBUUl9TVEFUVVMgKiA0LCAtMSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2V0IHRoZSB0aHJlYWQgc3RhdGUgZnJvbSBhIHJlZ3NldCBwYXNzZWQgaW4gdmlhIHB0cmFjZQorICovCitzdGF0aWMgaW50IGdlbnJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgICAgICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpOworCWNvbnN0IHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKilyZWdzIC0gMTsKKwlpbnQgcmV0ID0gMDsKKworI2RlZmluZSBSRUdfSUdOT1JFX1JBTkdFKFNUQVJULCBFTkQpCQlcCisJaWYgKCFyZXQpCQkJCQlcCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbl9pZ25vcmUoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsIFwKKwkJCVNUQVJUICogNCwgKEVORCAqIDQpICsgNCk7CisKKyNkZWZpbmUgUkVHX0lOX09ORShQVFIsIExPQykJXAorCWlmICghcmV0KQkJCVwKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCBcCisJCQkodm9pZCAqKShQVFIpLCBMT0MgKiA0LCAoTE9DICogNCkgKyA0KTsKKworI2RlZmluZSBSRUdfSU5fUkFOR0UoUFRSLCBTVEFSVCwgRU5EKQlcCisJaWYgKCFyZXQpCQkJCVwKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCBcCisJCQkodm9pZCAqKShQVFIpLCBTVEFSVCAqIDQsIChFTkQgKiA0KSArIDQpOworCisJUkVHX0lHTk9SRV9SQU5HRShQVFJfUjAsIFBUUl9SMCk7CisJUkVHX0lOX1JBTkdFKCZyZWdzLT5yMSwgUFRSX1IxLCBQVFJfUjcpOworCVJFR19JTl9SQU5HRSgmcmVncy0+cjgsIFBUUl9SOCwgUFRSX1IxNSk7CisJUkVHX0lOX1JBTkdFKHN3LCBQVFJfUjE2LCBQVFJfUjIzKTsKKwlSRUdfSUdOT1JFX1JBTkdFKFBUUl9SMjQsIFBUUl9SMjUpOyAvKiBldCBhbmQgYnQgKi8KKwlSRUdfSU5fT05FKCZyZWdzLT5ncCwgUFRSX0dQKTsKKwlSRUdfSU5fT05FKCZyZWdzLT5zcCwgUFRSX1NQKTsKKwlSRUdfSU5fT05FKCZyZWdzLT5mcCwgUFRSX0ZQKTsKKwlSRUdfSU5fT05FKCZyZWdzLT5lYSwgUFRSX0VBKTsKKwlSRUdfSUdOT1JFX1JBTkdFKFBUUl9CQSwgUFRSX0JBKTsKKwlSRUdfSU5fT05FKCZyZWdzLT5yYSwgUFRSX1JBKTsKKwlSRUdfSU5fT05FKCZyZWdzLT5lYSwgUFRSX1BDKTsgLyogdXNlIGVhIGZvciBQQyAqLworCWlmICghcmV0KQorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW5faWdub3JlKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgUFRSX1NUQVRVUyAqIDQsIC0xKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZWZpbmUgdGhlIHJlZ2lzdGVyIHNldHMgYXZhaWxhYmxlIG9uIE5pb3MyIHVuZGVyIExpbnV4CisgKi8KK2VudW0gbmlvczJfcmVnc2V0IHsKKwlSRUdTRVRfR0VORVJBTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgbmlvczJfcmVnc2V0c1tdID0geworCVtSRUdTRVRfR0VORVJBTF0gPSB7CisJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1BSU1RBVFVTLAorCQkubiA9IE5VTV9QVFJBQ0VfUkVHLAorCQkuc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLmFsaWduID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkuZ2V0ID0gZ2VucmVnc19nZXQsCisJCS5zZXQgPSBnZW5yZWdzX3NldCwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgbmlvczJfdXNlcl92aWV3ID0geworCS5uYW1lID0gIm5pb3MyIiwKKwkuZV9tYWNoaW5lID0gRUxGX0FSQ0gsCisJLmVpX29zYWJpID0gRUxGX09TQUJJLAorCS5yZWdzZXRzID0gbmlvczJfcmVnc2V0cywKKwkubiA9IEFSUkFZX1NJWkUobmlvczJfcmVnc2V0cykKK307CisKK2NvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp0YXNrX3VzZXJfcmVnc2V0X3ZpZXcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiAmbmlvczJfdXNlcl92aWV3OworfQorCit2b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisKK30KKworbG9uZyBhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlyZXR1cm4gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOworfQorCithc21saW5rYWdlIGludCBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHZvaWQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCisJCXJldCA9IHRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9lbnRyeSh0YXNrX3B0X3JlZ3MoY3VycmVudCkpOworCisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSB2b2lkIGRvX3N5c2NhbGxfdHJhY2VfZXhpdCh2b2lkKQoreworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKKwkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2V4aXQodGFza19wdF9yZWdzKGN1cnJlbnQpLCAwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3NldHVwLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMzEyMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogTmlvczItc3BlY2lmaWMgcGFydHMgb2Ygc3lzdGVtIHNldHVwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDAxIFZpYyBQaGlsbGlwcyA8dmljQG1pY3JvdHJvbml4LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KKworI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9jcHVpbmZvLmg+CisKK3Vuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0OworRVhQT1JUX1NZTUJPTChtZW1vcnlfc3RhcnQpOworCit1bnNpZ25lZCBsb25nIG1lbW9yeV9lbmQ7CitFWFBPUlRfU1lNQk9MKG1lbW9yeV9lbmQpOworCit1bnNpZ25lZCBsb25nIG1lbW9yeV9zaXplOworCitzdGF0aWMgc3RydWN0IHB0X3JlZ3MgZmFrZV9yZWdzID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkJCQkwLCAwLCAwLCAwLCAwLCAwLAorCQkJCQkwfTsKKworLyogQ29weSBhIHNob3J0IGhvb2sgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgdG8gdGhlIGV4Y2VwdGlvbiBhZGRyZXNzICovCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9leGNlcHRpb25faGFuZGxlcih1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgc3RhcnQgPSAodW5zaWduZWQgaW50KSBleGNlcHRpb25faGFuZGxlcl9ob29rOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCB0bXAgPSAwOworCisJaWYgKHN0YXJ0ID09IGFkZHIpIHsKKwkJLyogVGhlIENQVSBleGNlcHRpb24gYWRkcmVzcyBhbHJlYWR5IHBvaW50cyB0byB0aGUgaGFuZGxlci4gKi8KKwkJcmV0dXJuOworCX0KKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJImxkdwklMiwwKCUwKVxuIgorCQkic3R3CSUyLDAoJTEpXG4iCisJCSJsZHcJJTIsNCglMClcbiIKKwkJInN0dwklMiw0KCUxKVxuIgorCQkibGR3CSUyLDgoJTApXG4iCisJCSJzdHcJJTIsOCglMSlcbiIKKwkJImZsdXNoZAkwKCUxKVxuIgorCQkiZmx1c2hkCTQoJTEpXG4iCisJCSJmbHVzaGQJOCglMSlcbiIKKwkJImZsdXNoaSAlMVxuIgorCQkiYWRkaQklMSwlMSw0XG4iCisJCSJmbHVzaGkgJTFcbiIKKwkJImFkZGkJJTEsJTEsNFxuIgorCQkiZmx1c2hpICUxXG4iCisJCSJmbHVzaHBcbiIKKwkJOiAvKiBubyBvdXRwdXQgcmVnaXN0ZXJzICovCisJCTogInIiIChzdGFydCksICJyIiAoYWRkciksICJyIiAodG1wKQorCQk6ICJtZW1vcnkiCisJKTsKK30KKworLyogQ29weSB0aGUgZmFzdCBUTEIgbWlzcyBoYW5kbGVyICovCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9mYXN0X3RsYl9taXNzX2hhbmRsZXIodW5zaWduZWQgaW50IGFkZHIpCit7CisJdW5zaWduZWQgaW50IHN0YXJ0ID0gKHVuc2lnbmVkIGludCkgZmFzdF9oYW5kbGVyOworCXVuc2lnbmVkIGludCBlbmQgPSAodW5zaWduZWQgaW50KSBmYXN0X2hhbmRsZXJfZW5kOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCB0bXAgPSAwOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMTpcbiIKKwkJIglsZHcJJTMsMCglMClcbiIKKwkJIglzdHcJJTMsMCglMSlcbiIKKwkJIglmbHVzaGQJMCglMSlcbiIKKwkJIglmbHVzaGkJJTFcbiIKKwkJIglmbHVzaHBcbiIKKwkJIglhZGRpCSUwLCUwLDRcbiIKKwkJIglhZGRpCSUxLCUxLDRcbiIKKwkJIglibmUJJTAsJTIsMWJcbiIKKwkJOiAvKiBubyBvdXRwdXQgcmVnaXN0ZXJzICovCisJCTogInIiIChzdGFydCksICJyIiAoYWRkciksICJyIiAoZW5kKSwgInIiICh0bXApCisJCTogIm1lbW9yeSIKKwkpOworfQorCisvKgorICogc2F2ZSBhcmdzIHBhc3NlZCBmcm9tIHUtYm9vdCwgY2FsbGVkIGZyb20gaGVhZC5TCisgKgorICogQHI0OiBOSU9TIG1hZ2ljCisgKiBAcjU6IGluaXRyZCBzdGFydAorICogQHI2OiBpbml0cmQgZW5kIG9yIGZkdAorICogQHI3OiBrZXJuZWwgY29tbWFuZCBsaW5lCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbmlvczJfYm9vdF9pbml0KHVuc2lnbmVkIHI0LCB1bnNpZ25lZCByNSwgdW5zaWduZWQgcjYsCisJCQkJICAgICAgIHVuc2lnbmVkIHI3KQoreworCXVuc2lnbmVkIGR0Yl9wYXNzZWQgPSAwOworCWNoYXIgY21kbGluZV9wYXNzZWRbQ09NTUFORF9MSU5FX1NJWkVdID0geyAwLCB9OworCisjaWYgZGVmaW5lZChDT05GSUdfTklPUzJfUEFTU19DTURMSU5FKQorCWlmIChyNCA9PSAweDUzNGY0OTRlKSB7IC8qIHI0IGlzIG1hZ2ljIE5JT1MgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOSVRSRCkKKwkJaWYgKHI1KSB7IC8qIGluaXRyYW1mcyAqLworCQkJaW5pdHJkX3N0YXJ0ID0gcjU7CisJCQlpbml0cmRfZW5kID0gcjY7CisJCX0KKyNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgKi8KKwkJZHRiX3Bhc3NlZCA9IHI2OworCisJCWlmIChyNykKKwkJCXN0cm5jcHkoY21kbGluZV9wYXNzZWQsIChjaGFyICopcjcsIENPTU1BTkRfTElORV9TSVpFKTsKKwl9CisjZW5kaWYKKworCWVhcmx5X2luaXRfZGV2dHJlZSgodm9pZCAqKWR0Yl9wYXNzZWQpOworCisjaWZuZGVmIENPTkZJR19DTURMSU5FX0ZPUkNFCisJaWYgKGNtZGxpbmVfcGFzc2VkWzBdKQorCQlzdHJuY3B5KGJvb3RfY29tbWFuZF9saW5lLCBjbWRsaW5lX3Bhc3NlZCwgQ09NTUFORF9MSU5FX1NJWkUpOworI2lmZGVmIENPTkZJR19OSU9TMl9DTURMSU5FX0lHTk9SRV9EVEIKKwllbHNlCisJCXN0cm5jcHkoYm9vdF9jb21tYW5kX2xpbmUsIENPTkZJR19DTURMSU5FLCBDT01NQU5EX0xJTkVfU0laRSk7CisjZW5kaWYKKyNlbmRpZgorfQorCit2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCit7CisJaW50IGJvb3RtYXBfc2l6ZTsKKworCWNvbnNvbGVfdmVyYm9zZSgpOworCisJbWVtb3J5X3N0YXJ0ID0gUEFHRV9BTElHTigodW5zaWduZWQgbG9uZylfX3BhKF9lbmQpKTsKKwltZW1vcnlfZW5kID0gKHVuc2lnbmVkIGxvbmcpIENPTkZJR19OSU9TMl9NRU1fQkFTRSArIG1lbW9yeV9zaXplOworCisJaW5pdF9tbS5zdGFydF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpIF9zdGV4dDsKKwlpbml0X21tLmVuZF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpIF9ldGV4dDsKKwlpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpIF9lZGF0YTsKKwlpbml0X21tLmJyayA9ICh1bnNpZ25lZCBsb25nKSBfZW5kOworCWluaXRfdGFzay50aHJlYWQua3JlZ3MgPSAmZmFrZV9yZWdzOworCisJLyogS2VlcCBhIGNvcHkgb2YgY29tbWFuZCBsaW5lICovCisJKmNtZGxpbmVfcCA9IGJvb3RfY29tbWFuZF9saW5lOworCisJbWluX2xvd19wZm4gPSBQRk5fVVAobWVtb3J5X3N0YXJ0KTsKKwltYXhfbG93X3BmbiA9IFBGTl9ET1dOKG1lbW9yeV9lbmQpOworCW1heF9tYXBuciA9IG1heF9sb3dfcGZuOworCisJLyoKKwkgKiBnaXZlIGFsbCB0aGUgbWVtb3J5IHRvIHRoZSBib290bWFwIGFsbG9jYXRvciwgIHRlbGwgaXQgdG8gcHV0IHRoZQorCSAqIGJvb3QgbWVtX21hcCBhdCB0aGUgc3RhcnQgb2YgbWVtb3J5CisJICovCisJcHJfZGVidWcoImluaXRfYm9vdG1lbV9ub2RlKD8sJSNseCwgJSN4LCAlI2x4KVxuIiwKKwkJbWluX2xvd19wZm4sIFBGTl9ET1dOKFBIWVNfT0ZGU0VUKSwgbWF4X2xvd19wZm4pOworCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwKKwkJCQkJbWluX2xvd19wZm4sIFBGTl9ET1dOKFBIWVNfT0ZGU0VUKSwKKwkJCQkJbWF4X2xvd19wZm4pOworCisJLyoKKwkgKiBmcmVlIHRoZSB1c2FibGUgbWVtb3J5LCAgd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgZG8gbm90IGZyZWUKKwkgKiB0aGUgYm9vdG1lbSBiaXRtYXAgc28gd2UgdGhlbiByZXNlcnZlIGl0IGFmdGVyIGZyZWVpbmcgaXQgOi0pCisJICovCisJcHJfZGVidWcoImZyZWVfYm9vdG1lbSglI2x4LCAlI2x4KVxuIiwKKwkJbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kIC0gbWVtb3J5X3N0YXJ0KTsKKwlmcmVlX2Jvb3RtZW0obWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kIC0gbWVtb3J5X3N0YXJ0KTsKKworCS8qCisJICogUmVzZXJ2ZSB0aGUgYm9vdG1lbSBiaXRtYXAgaXRzZWxmIGFzIHdlbGwuIFdlIGRvIHRoaXMgaW4gdHdvCisJICogc3RlcHMgKGZpcnN0IHN0ZXAgd2FzIGluaXRfYm9vdG1lbSgpKSBiZWNhdXNlIHRoaXMgY2F0Y2hlcworCSAqIHRoZSAodmVyeSB1bmxpa2VseSkgY2FzZSBvZiB1cyBhY2NpZGVudGFsbHkgaW5pdGlhbGl6aW5nIHRoZQorCSAqIGJvb3RtZW0gYWxsb2NhdG9yIHdpdGggYW4gaW52YWxpZCBSQU0gYXJlYS4KKwkgKgorCSAqIEFyZ3VtZW50cyBhcmUgc3RhcnQsIHNpemUKKwkgKi8KKwlwcl9kZWJ1ZygicmVzZXJ2ZV9ib290bWVtKCUjbHgsICUjeClcbiIsIG1lbW9yeV9zdGFydCwgYm9vdG1hcF9zaXplKTsKKwlyZXNlcnZlX2Jvb3RtZW0obWVtb3J5X3N0YXJ0LCBib290bWFwX3NpemUsIEJPT1RNRU1fREVGQVVMVCk7CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKwlpZiAoaW5pdHJkX3N0YXJ0KSB7CisJCXJlc2VydmVfYm9vdG1lbSh2aXJ0X3RvX3BoeXMoKHZvaWQgKilpbml0cmRfc3RhcnQpLAorCQkJCWluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQsIEJPT1RNRU1fREVGQVVMVCk7CisJfQorI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLworCisJdW5mbGF0dGVuX2FuZF9jb3B5X2RldmljZV90cmVlKCk7CisKKwlzZXR1cF9jcHVpbmZvKCk7CisKKwljb3B5X2V4Y2VwdGlvbl9oYW5kbGVyKGNwdWluZm8uZXhjZXB0aW9uX2FkZHIpOworCisJbW11X2luaXQoKTsKKworCWNvcHlfZmFzdF90bGJfbWlzc19oYW5kbGVyKGNwdWluZm8uZmFzdF90bGJfbWlzc19leGNfYWRkcik7CisKKwkvKgorCSAqIEluaXRpYWxpemUgTU1VIGNvbnRleHQgaGFuZGxpbmcgaGVyZSBiZWNhdXNlIGRhdGEgZnJvbSBjcHVpbmZvIGlzCisJICogbmVlZGVkIGZvciB0aGlzLgorCSAqLworCW1tdV9jb250ZXh0X2luaXQoKTsKKworCS8qCisJICogZ2V0IGttYWxsb2MgaW50byBnZWFyCisJICovCisJcGFnaW5nX2luaXQoKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1ZUKSAmJiBkZWZpbmVkKENPTkZJR19EVU1NWV9DT05TT0xFKQorCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDI3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9zaWduYWwuYwpAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KKworI2luY2x1ZGUgPGFzbS91Y29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKyNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCisKKy8qCisgKiBEbyBhIHNpZ25hbCByZXR1cm47IHVuZG8gdGhlIHNpZ25hbCBzdGFjay4KKyAqCisgKiBLZWVwIHRoZSByZXR1cm4gY29kZSBvbiB0aGUgc3RhY2sgcXVhZHdvcmQgYWxpZ25lZCEKKyAqIFRoYXQgbWFrZXMgdGhlIGNhY2hlIGZsdXNoIGJlbG93IGVhc2llci4KKyAqLworCitzdHJ1Y3QgcnRfc2lnZnJhbWUgeworCXN0cnVjdCBzaWdpbmZvIGluZm87CisJc3RydWN0IHVjb250ZXh0IHVjOworfTsKKworc3RhdGljIGlubGluZSBpbnQgcnRfcmVzdG9yZV91Y29udGV4dChzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJc3RydWN0IHN3aXRjaF9zdGFjayAqc3csCisJCQkJCXN0cnVjdCB1Y29udGV4dCAqdWMsIGludCAqcHIyKQoreworCWludCB0ZW1wOworCWdyZWdfdCAqZ3JlZ3MgPSB1Yy0+dWNfbWNvbnRleHQuZ3JlZ3M7CisJaW50IGVycjsKKworCS8qIEFsd2F5cyBtYWtlIGFueSBwZW5kaW5nIHJlc3RhcnRlZCBzeXN0ZW0gY2FsbHMgcmV0dXJuIC1FSU5UUiAqLworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jay5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKKworCWVyciA9IF9fZ2V0X3VzZXIodGVtcCwgJnVjLT51Y19tY29udGV4dC52ZXJzaW9uKTsKKwlpZiAodGVtcCAhPSBNQ09OVEVYVF9WRVJTSU9OKQorCQlnb3RvIGJhZGZyYW1lOworCS8qIHJlc3RvcmUgcGFzc2VkIHJlZ2lzdGVycyAqLworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIxLCAmZ3JlZ3NbMF0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIyLCAmZ3JlZ3NbMV0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIzLCAmZ3JlZ3NbMl0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI0LCAmZ3JlZ3NbM10pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI1LCAmZ3JlZ3NbNF0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI2LCAmZ3JlZ3NbNV0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI3LCAmZ3JlZ3NbNl0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI4LCAmZ3JlZ3NbN10pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnI5LCAmZ3JlZ3NbOF0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIxMCwgJmdyZWdzWzldKTsKKwllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5yMTEsICZncmVnc1sxMF0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIxMiwgJmdyZWdzWzExXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjEzLCAmZ3JlZ3NbMTJdKTsKKwllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5yMTQsICZncmVnc1sxM10pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIxNSwgJmdyZWdzWzE0XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIxNiwgJmdyZWdzWzE1XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIxNywgJmdyZWdzWzE2XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIxOCwgJmdyZWdzWzE3XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIxOSwgJmdyZWdzWzE4XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIyMCwgJmdyZWdzWzE5XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIyMSwgJmdyZWdzWzIwXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIyMiwgJmdyZWdzWzIxXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPnIyMywgJmdyZWdzWzIyXSk7CisJLyogZ3JlZ3NbMjNdIGlzIGhhbmRsZWQgYmVsb3cgKi8KKwllcnIgfD0gX19nZXRfdXNlcihzdy0+ZnAsICZncmVnc1syNF0pOyAgLyogVmVyaWZ5LCBzaG91bGQgdGhpcyBiZQorCQkJCQkJCXNldHRhYmxlICovCisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPmdwLCAmZ3JlZ3NbMjVdKTsgIC8qIFZlcmlmeSwgc2hvdWxkIHRoaXMgYmUKKwkJCQkJCQlzZXR0YWJsZSAqLworCisJZXJyIHw9IF9fZ2V0X3VzZXIodGVtcCwgJmdyZWdzWzI2XSk7ICAvKiBOb3QgcmVhbGx5IG5lY2Vzc2FyeSBubyB1c2VyCisJCQkJCQkJc2V0dGFibGUgYml0cyAqLworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPmVhLCAmZ3JlZ3NbMjddKTsKKworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnJhLCAmZ3JlZ3NbMjNdKTsKKwllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5zcCwgJmdyZWdzWzI4XSk7CisKKwlyZWdzLT5vcmlnX3IyID0gLTE7CQkvKiBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzICovCisKKwllcnIgfD0gcmVzdG9yZV9hbHRzdGFjaygmdWMtPnVjX3N0YWNrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGJhZGZyYW1lOworCisJKnByMiA9IHJlZ3MtPnIyOworCXJldHVybiBlcnI7CisKK2JhZGZyYW1lOgorCXJldHVybiAxOworfQorCithc21saW5rYWdlIGludCBkb19ydF9zaWdyZXR1cm4oc3RydWN0IHN3aXRjaF9zdGFjayAqc3cpCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikoc3cgKyAxKTsKKwkvKiBWZXJpZnksIGNhbiB3ZSBmb2xsb3cgdGhlIHN0YWNrIGJhY2sgKi8KKwlzdHJ1Y3QgcnRfc2lnZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSAqKSByZWdzLT5zcDsKKwlzaWdzZXRfdCBzZXQ7CisJaW50IHJ2YWw7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKKwkJZ290byBiYWRmcmFtZTsKKworCWlmIChfX2NvcHlfZnJvbV91c2VyKCZzZXQsICZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2l6ZW9mKHNldCkpKQorCQlnb3RvIGJhZGZyYW1lOworCisJc2V0X2N1cnJlbnRfYmxvY2tlZCgmc2V0KTsKKworCWlmIChydF9yZXN0b3JlX3Vjb250ZXh0KHJlZ3MsIHN3LCAmZnJhbWUtPnVjLCAmcnZhbCkpCisJCWdvdG8gYmFkZnJhbWU7CisKKwlyZXR1cm4gcnZhbDsKKworYmFkZnJhbWU6CisJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBydF9zZXR1cF91Y29udGV4dChzdHJ1Y3QgdWNvbnRleHQgKnVjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcmVncyAtIDE7CisJZ3JlZ190ICpncmVncyA9IHVjLT51Y19tY29udGV4dC5ncmVnczsKKwlpbnQgZXJyID0gMDsKKworCWVyciB8PSBfX3B1dF91c2VyKE1DT05URVhUX1ZFUlNJT04sICZ1Yy0+dWNfbWNvbnRleHQudmVyc2lvbik7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEsICZncmVnc1swXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjIsICZncmVnc1sxXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjMsICZncmVnc1syXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjQsICZncmVnc1szXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjUsICZncmVnc1s0XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjYsICZncmVnc1s1XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjcsICZncmVnc1s2XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjgsICZncmVnc1s3XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjksICZncmVnc1s4XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEwLCAmZ3JlZ3NbOV0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxMSwgJmdyZWdzWzEwXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEyLCAmZ3JlZ3NbMTFdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTMsICZncmVnc1sxMl0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxNCwgJmdyZWdzWzEzXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjE1LCAmZ3JlZ3NbMTRdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjE2LCAmZ3JlZ3NbMTVdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjE3LCAmZ3JlZ3NbMTZdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjE4LCAmZ3JlZ3NbMTddKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjE5LCAmZ3JlZ3NbMThdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjIwLCAmZ3JlZ3NbMTldKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjIxLCAmZ3JlZ3NbMjBdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjIyLCAmZ3JlZ3NbMjFdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+cjIzLCAmZ3JlZ3NbMjJdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yYSwgJmdyZWdzWzIzXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3ctPmZwLCAmZ3JlZ3NbMjRdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+Z3AsICZncmVnc1syNV0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmVhLCAmZ3JlZ3NbMjddKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5zcCwgJmdyZWdzWzI4XSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpnZXRfc2lnZnJhbWUoc3RydWN0IGtzaWduYWwgKmtzaWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCSBzaXplX3QgZnJhbWVfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHVzcDsKKworCS8qIERlZmF1bHQgdG8gdXNpbmcgbm9ybWFsIHN0YWNrLiAgKi8KKwl1c3AgPSByZWdzLT5zcDsKKworCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLworCXVzcCA9IHNpZ3NwKHVzcCwga3NpZyk7CisKKwkvKiBWZXJpZnksIGlzIGl0IDMyIG9yIDY0IGJpdCBhbGlnbmVkICovCisJcmV0dXJuICh2b2lkICopKCh1c3AgLSBmcmFtZV9zaXplKSAmIC04VUwpOworfQorCitzdGF0aWMgaW50IHNldHVwX3J0X2ZyYW1lKHN0cnVjdCBrc2lnbmFsICprc2lnLCBzaWdzZXRfdCAqc2V0LAorCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcnRfc2lnZnJhbWUgKmZyYW1lOworCWludCBlcnIgPSAwOworCisJZnJhbWUgPSBnZXRfc2lnZnJhbWUoa3NpZywgcmVncywgc2l6ZW9mKCpmcmFtZSkpOworCisJaWYgKGtzaWctPmthLnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKKwkJZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyKCZmcmFtZS0+aW5mbywgJmtzaWctPmluZm8pOworCisJLyogQ3JlYXRlIHRoZSB1Y29udGV4dC4gICovCisJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19saW5rKTsKKwllcnIgfD0gX19zYXZlX2FsdHN0YWNrKCZmcmFtZS0+dWMudWNfc3RhY2ssIHJlZ3MtPnNwKTsKKwllcnIgfD0gcnRfc2V0dXBfdWNvbnRleHQoJmZyYW1lLT51YywgcmVncyk7CisJZXJyIHw9IGNvcHlfdG9fdXNlcigmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKKworCWlmIChlcnIpCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OworCisJLyogU2V0IHVwIHRvIHJldHVybiBmcm9tIHVzZXJzcGFjZTsganVtcCB0byBmaXhlZCBhZGRyZXNzIHNpZ3JldHVybgorCSAgIHRyYW1wb2xpbmUgb24ga3VzZXIgcGFnZS4gICovCisJcmVncy0+cmEgPSAodW5zaWduZWQgbG9uZykgKDB4MTA0MCk7CisKKwkvKiBTZXQgdXAgcmVnaXN0ZXJzIGZvciBzaWduYWwgaGFuZGxlciAqLworCXJlZ3MtPnNwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOworCXJlZ3MtPnI0ID0gKHVuc2lnbmVkIGxvbmcpIGtzaWctPnNpZzsKKwlyZWdzLT5yNSA9ICh1bnNpZ25lZCBsb25nKSAmZnJhbWUtPmluZm87CisJcmVncy0+cjYgPSAodW5zaWduZWQgbG9uZykgJmZyYW1lLT51YzsKKwlyZWdzLT5lYSA9ICh1bnNpZ25lZCBsb25nKSBrc2lnLT5rYS5zYS5zYV9oYW5kbGVyOworCXJldHVybiAwOworCitnaXZlX3NpZ3NlZ3Y6CisJZm9yY2Vfc2lnc2Vndihrc2lnLT5zaWcsIGN1cnJlbnQpOworCXJldHVybiAtRUZBVUxUOworfQorCisvKgorICogT0ssIHdlJ3JlIGludm9raW5nIGEgaGFuZGxlcgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfc2lnbmFsKHN0cnVjdCBrc2lnbmFsICprc2lnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgcmV0OworCXNpZ3NldF90ICpvbGRzZXQgPSBzaWdtYXNrX3RvX3NhdmUoKTsKKworCS8qIHNldCB1cCB0aGUgc3RhY2sgZnJhbWUgKi8KKwlyZXQgPSBzZXR1cF9ydF9mcmFtZShrc2lnLCBvbGRzZXQsIHJlZ3MpOworCisJc2lnbmFsX3NldHVwX2RvbmUocmV0LCBrc2lnLCAwKTsKK30KKworc3RhdGljIGludCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHJldHZhbCA9IDAsIGNvbnRpbnVlX2FkZHIgPSAwLCByZXN0YXJ0X2FkZHIgPSAwOworCWludCByZXN0YXJ0ID0gMDsKKwlzdHJ1Y3Qga3NpZ25hbCBrc2lnOworCisJY3VycmVudC0+dGhyZWFkLmtyZWdzID0gcmVnczsKKworCS8qCisJICogSWYgd2Ugd2VyZSBmcm9tIGEgc3lzdGVtIGNhbGwsIGNoZWNrIGZvciBzeXN0ZW0gY2FsbCByZXN0YXJ0aW5nLi4uCisJICovCisJaWYgKHJlZ3MtPm9yaWdfcjIgPj0gMCkgeworCQljb250aW51ZV9hZGRyID0gcmVncy0+ZWE7CisJCXJlc3RhcnRfYWRkciA9IGNvbnRpbnVlX2FkZHIgLSA0OworCQlyZXR2YWwgPSByZWdzLT5yMjsKKworCQkvKgorCQkgKiBQcmVwYXJlIGZvciBzeXN0ZW0gY2FsbCByZXN0YXJ0LiBXZSBkbyB0aGlzIGhlcmUgc28gdGhhdCBhCisJCSAqIGRlYnVnZ2VyIHdpbGwgc2VlIHRoZSBhbHJlYWR5IGNoYW5nZWQgUEMuCisJCSAqLworCQlzd2l0Y2ggKHJldHZhbCkgeworCQljYXNlIEVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKKwkJCXJlc3RhcnQgPSAtMjsKKwkJY2FzZSBFUkVTVEFSVE5PSEFORDoKKwkJY2FzZSBFUkVTVEFSVFNZUzoKKwkJY2FzZSBFUkVTVEFSVE5PSU5UUjoKKwkJCXJlc3RhcnQrKzsKKwkJCXJlZ3MtPnIyID0gcmVncy0+b3JpZ19yMjsKKwkJCXJlZ3MtPnI3ID0gcmVncy0+b3JpZ19yNzsKKwkJCXJlZ3MtPmVhID0gcmVzdGFydF9hZGRyOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZ2V0X3NpZ25hbCgma3NpZykpIHsKKwkJLyogaGFuZGxlciAqLworCQlpZiAodW5saWtlbHkocmVzdGFydCAmJiByZWdzLT5lYSA9PSByZXN0YXJ0X2FkZHIpKSB7CisJCQlpZiAocmV0dmFsID09IEVSRVNUQVJUTk9IQU5EIHx8CisJCQkgICAgcmV0dmFsID09IEVSRVNUQVJUX1JFU1RBUlRCTE9DSyB8fAorCQkJICAgICAocmV0dmFsID09IEVSRVNUQVJUU1lTCisJCQkJJiYgIShrc2lnLmthLnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkpKSB7CisJCQkJcmVncy0+cjIgPSBFSU5UUjsKKwkJCQlyZWdzLT5yNyA9IDE7CisJCQkJcmVncy0+ZWEgPSBjb250aW51ZV9hZGRyOworCQkJfQorCQl9CisJCWhhbmRsZV9zaWduYWwoJmtzaWcsIHJlZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE5vIGhhbmRsZXIgcHJlc2VudAorCSAqLworCWlmICh1bmxpa2VseShyZXN0YXJ0KSAmJiByZWdzLT5lYSA9PSByZXN0YXJ0X2FkZHIpIHsKKwkJcmVncy0+ZWEgPSBjb250aW51ZV9hZGRyOworCQlyZWdzLT5yMiA9IF9fTlJfcmVzdGFydF9zeXNjYWxsOworCX0KKworCS8qCisJKiBJZiB0aGVyZSdzIG5vIHNpZ25hbCB0byBkZWxpdmVyLCB3ZSBqdXN0IHB1dCB0aGUgc2F2ZWQgc2lnbWFzayBiYWNrLgorCSovCisJcmVzdG9yZV9zYXZlZF9zaWdtYXNrKCk7CisKKwlyZXR1cm4gcmVzdGFydDsKK30KKworYXNtbGlua2FnZSBpbnQgZG9fbm90aWZ5X3Jlc3VtZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwkvKgorCSAqIFdlIHdhbnQgdGhlIGNvbW1vbiBjYXNlIHRvIGdvIGZhc3QsIHdoaWNoIGlzIHdoeSB3ZSBtYXkgaW4gY2VydGFpbgorCSAqIGNhc2VzIGdldCBoZXJlIGZyb20ga2VybmVsIG1vZGUuIEp1c3QgcmV0dXJuIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcKKwkgKiBpZiBzby4KKwkgKi8KKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORykpIHsKKwkJaW50IHJlc3RhcnQgPSBkb19zaWduYWwocmVncyk7CisKKwkJaWYgKHVubGlrZWx5KHJlc3RhcnQpKSB7CisJCQkvKgorCQkJICogUmVzdGFydCB3aXRob3V0IGhhbmRsZXJzLgorCQkJICogRGVhbCB3aXRoIGl0IHdpdGhvdXQgbGVhdmluZworCQkJICogdGhlIGtlcm5lbCBzcGFjZS4KKwkJCSAqLworCQkJcmV0dXJuIHJlc3RhcnQ7CisJCX0KKwl9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9OT1RJRllfUkVTVU1FKSkKKwkJdHJhY2Vob29rX25vdGlmeV9yZXN1bWUocmVncyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3N5c19uaW9zMi5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvc3lzX25pb3MyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzOTBlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3N5c19uaW9zMi5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCisvKiBzeXNfY2FjaGVmbHVzaCAtLSBmbHVzaCB0aGUgcHJvY2Vzc29yIGNhY2hlLiAqLworYXNtbGlua2FnZSBpbnQgc3lzX2NhY2hlZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQl1bnNpZ25lZCBpbnQgb3ApCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCisJLyogV2Ugb25seSBzdXBwb3J0IG9wIDAgbm93LCByZXR1cm4gZXJyb3IgaWYgb3AgaXMgbm9uLXplcm8uKi8KKwlpZiAob3ApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2hlY2sgZm9yIG92ZXJmbG93ICovCisJaWYgKGFkZHIgKyBsZW4gPCBhZGRyKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qCisJICogVmVyaWZ5IHRoYXQgdGhlIHNwZWNpZmllZCBhZGRyZXNzIHJlZ2lvbiBhY3R1YWxseSBiZWxvbmdzCisJICogdG8gdGhpcyBwcm9jZXNzLgorCSAqLworCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKKwlpZiAodm1hID09IE5VTEwgfHwgYWRkciA8IHZtYS0+dm1fc3RhcnQgfHwgYWRkciArIGxlbiA+IHZtYS0+dm1fZW5kKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbik7CisKKwlyZXR1cm4gMDsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX2dldHBhZ2VzaXplKHZvaWQpCit7CisJcmV0dXJuIFBBR0VfU0laRTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3N5c2NhbGxfdGFibGUuYyBiL2FyY2gvbmlvczIva2VybmVsL3N5c2NhbGxfdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmU2YWMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvc3lzY2FsbF90YWJsZS5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgQWx0ZXJhIENvcnBvcmF0aW9uIChDKSAyMDEzLiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KKworI3VuZGVmIF9fU1lTQ0FMTAorI2RlZmluZSBfX1NZU0NBTEwobnIsIGNhbGwpIFtucl0gPSAoY2FsbCksCisKK3ZvaWQgKnN5c19jYWxsX3RhYmxlW19fTlJfc3lzY2FsbHNdID0geworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KK307CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC90aW1lLmMgYi9hcmNoL25pb3MyL2tlcm5lbC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0NTQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3RpbWUuYwpAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNkZWZpbmUgQUxURVJBX1RJTUVSX1NUQVRVU19SRUcJCTAKKyNkZWZpbmUgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHCTQKKyNkZWZpbmUgQUxURVJBX1RJTUVSX1BFUklPRExfUkVHCTgKKyNkZWZpbmUgQUxURVJBX1RJTUVSX1BFUklPREhfUkVHCTEyCisjZGVmaW5lIEFMVEVSQV9USU1FUl9TTkFQTF9SRUcJCTE2CisjZGVmaW5lIEFMVEVSQV9USU1FUl9TTkFQSF9SRUcJCTIwCisKKyNkZWZpbmUgQUxURVJBX1RJTUVSX0NPTlRST0xfSVRPX01TSwkoMHgxKQorI2RlZmluZSBBTFRFUkFfVElNRVJfQ09OVFJPTF9DT05UX01TSwkoMHgyKQorI2RlZmluZSBBTFRFUkFfVElNRVJfQ09OVFJPTF9TVEFSVF9NU0sJKDB4NCkKKyNkZWZpbmUgQUxURVJBX1RJTUVSX0NPTlRST0xfU1RPUF9NU0sJKDB4OCkKKworc3RydWN0IG5pb3MyX3RpbWVyIHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdW5zaWduZWQgbG9uZyBmcmVxOworfTsKKworc3RydWN0IG5pb3MyX2Nsb2NrZXZlbnRfZGV2IHsKKwlzdHJ1Y3QgbmlvczJfdGltZXIgdGltZXI7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjZWQ7Cit9OworCitzdHJ1Y3QgbmlvczJfY2xvY2tzb3VyY2UgeworCXN0cnVjdCBuaW9zMl90aW1lciB0aW1lcjsKKwlzdHJ1Y3QgY2xvY2tzb3VyY2UgY3M7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuaW9zMl9jbG9ja2V2ZW50X2RldiAqCisJdG9fbmlvczJfY2xrZXZlbnQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXJldHVybiBjb250YWluZXJfb2YoZXZ0LCBzdHJ1Y3QgbmlvczJfY2xvY2tldmVudF9kZXYsIGNlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5pb3MyX2Nsb2Nrc291cmNlICoKKwl0b19uaW9zMl9jbGtzb3VyY2Uoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNzLCBzdHJ1Y3QgbmlvczJfY2xvY2tzb3VyY2UsIGNzKTsKK30KKworc3RhdGljIHUxNiB0aW1lcl9yZWFkdyhzdHJ1Y3QgbmlvczJfdGltZXIgKnRpbWVyLCB1MzIgb2ZmcykKK3sKKwlyZXR1cm4gcmVhZHcodGltZXItPmJhc2UgKyBvZmZzKTsKK30KKworc3RhdGljIHZvaWQgdGltZXJfd3JpdGV3KHN0cnVjdCBuaW9zMl90aW1lciAqdGltZXIsIHUxNiB2YWwsIHUzMiBvZmZzKQoreworCXdyaXRldyh2YWwsIHRpbWVyLT5iYXNlICsgb2Zmcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX3RpbWVyc25hcHNob3Qoc3RydWN0IG5pb3MyX3RpbWVyICp0aW1lcikKK3sKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCisJdGltZXJfd3JpdGV3KHRpbWVyLCAwLCBBTFRFUkFfVElNRVJfU05BUExfUkVHKTsKKwljb3VudCA9IHRpbWVyX3JlYWR3KHRpbWVyLCBBTFRFUkFfVElNRVJfU05BUEhfUkVHKSA8PCAxNiB8CisJCXRpbWVyX3JlYWR3KHRpbWVyLCBBTFRFUkFfVElNRVJfU05BUExfUkVHKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGN5Y2xlX3QgbmlvczJfdGltZXJfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXN0cnVjdCBuaW9zMl9jbG9ja3NvdXJjZSAqbmlvczJfY3MgPSB0b19uaW9zMl9jbGtzb3VyY2UoY3MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGNvdW50OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNvdW50ID0gcmVhZF90aW1lcnNuYXBzaG90KCZuaW9zMl9jcy0+dGltZXIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIENvdW50ZXIgaXMgY291bnRpbmcgZG93biAqLworCXJldHVybiB+Y291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmlvczJfY2xvY2tzb3VyY2UgbmlvczJfY3MgPSB7CisJLmNzID0geworCQkubmFtZQk9ICJuaW9zMi1jbGtzcmMiLAorCQkucmF0aW5nCT0gMjUwLAorCQkucmVhZAk9IG5pb3MyX3RpbWVyX3JlYWQsCisJCS5tYXNrCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJCS5mbGFncwk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorCX0sCit9OworCitjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCit7CisJcmV0dXJuIG5pb3MyX3RpbWVyX3JlYWQoJm5pb3MyX2NzLmNzKTsKK30KKworc3RhdGljIHZvaWQgbmlvczJfdGltZXJfc3RhcnQoc3RydWN0IG5pb3MyX3RpbWVyICp0aW1lcikKK3sKKwl1MTYgY3RybDsKKworCWN0cmwgPSB0aW1lcl9yZWFkdyh0aW1lciwgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKKwljdHJsIHw9IEFMVEVSQV9USU1FUl9DT05UUk9MX1NUQVJUX01TSzsKKwl0aW1lcl93cml0ZXcodGltZXIsIGN0cmwsIEFMVEVSQV9USU1FUl9DT05UUk9MX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIG5pb3MyX3RpbWVyX3N0b3Aoc3RydWN0IG5pb3MyX3RpbWVyICp0aW1lcikKK3sKKwl1MTYgY3RybDsKKworCWN0cmwgPSB0aW1lcl9yZWFkdyh0aW1lciwgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKKwljdHJsIHw9IEFMVEVSQV9USU1FUl9DT05UUk9MX1NUT1BfTVNLOworCXRpbWVyX3dyaXRldyh0aW1lciwgY3RybCwgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKK30KKworc3RhdGljIHZvaWQgbmlvczJfdGltZXJfY29uZmlnKHN0cnVjdCBuaW9zMl90aW1lciAqdGltZXIsIHVuc2lnbmVkIGxvbmcgcGVyaW9kLAorCWVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlKQoreworCXUxNiBjdHJsOworCisJLyogVGhlIHRpbWVyJ3MgYWN0dWFsIHBlcmlvZCBpcyBvbmUgY3ljbGUgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZQorCSAqIHN0b3JlZCBpbiB0aGUgcGVyaW9kIHJlZ2lzdGVyLiAqLworCSBwZXJpb2QtLTsKKworCWN0cmwgPSB0aW1lcl9yZWFkdyh0aW1lciwgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKKwkvKiBzdG9wIGNvdW50ZXIgKi8KKwl0aW1lcl93cml0ZXcodGltZXIsIGN0cmwgfCBBTFRFUkFfVElNRVJfQ09OVFJPTF9TVE9QX01TSywKKwkJQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKKworCS8qIHdyaXRlIG5ldyBjb3VudCAqLworCXRpbWVyX3dyaXRldyh0aW1lciwgcGVyaW9kLCBBTFRFUkFfVElNRVJfUEVSSU9ETF9SRUcpOworCXRpbWVyX3dyaXRldyh0aW1lciwgcGVyaW9kID4+IDE2LCBBTFRFUkFfVElNRVJfUEVSSU9ESF9SRUcpOworCisJY3RybCB8PSBBTFRFUkFfVElNRVJfQ09OVFJPTF9TVEFSVF9NU0sgfCBBTFRFUkFfVElNRVJfQ09OVFJPTF9JVE9fTVNLOworCWlmIChtb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQorCQljdHJsIHw9IEFMVEVSQV9USU1FUl9DT05UUk9MX0NPTlRfTVNLOworCWVsc2UKKwkJY3RybCAmPSB+QUxURVJBX1RJTUVSX0NPTlRST0xfQ09OVF9NU0s7CisJdGltZXJfd3JpdGV3KHRpbWVyLCBjdHJsLCBBTFRFUkFfVElNRVJfQ09OVFJPTF9SRUcpOworfQorCitzdGF0aWMgaW50IG5pb3MyX3RpbWVyX3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXN0cnVjdCBuaW9zMl9jbG9ja2V2ZW50X2RldiAqbmlvczJfY2VkID0gdG9fbmlvczJfY2xrZXZlbnQoZXZ0KTsKKworCW5pb3MyX3RpbWVyX2NvbmZpZygmbmlvczJfY2VkLT50aW1lciwgZGVsdGEsIGV2dC0+bW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmlvczJfdGltZXJfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgcGVyaW9kOworCXN0cnVjdCBuaW9zMl9jbG9ja2V2ZW50X2RldiAqbmlvczJfY2VkID0gdG9fbmlvczJfY2xrZXZlbnQoZXZ0KTsKKwlzdHJ1Y3QgbmlvczJfdGltZXIgKnRpbWVyID0gJm5pb3MyX2NlZC0+dGltZXI7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlwZXJpb2QgPSBESVZfUk9VTkRfVVAodGltZXItPmZyZXEsIEhaKTsKKwkJbmlvczJfdGltZXJfY29uZmlnKHRpbWVyLCBwZXJpb2QsIENMT0NLX0VWVF9NT0RFX1BFUklPRElDKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJCW5pb3MyX3RpbWVyX3N0b3AodGltZXIpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJbmlvczJfdGltZXJfc3RhcnQodGltZXIpOworCQlicmVhazsKKwl9Cit9CisKK2lycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKikgZGV2X2lkOworCXN0cnVjdCBuaW9zMl9jbG9ja2V2ZW50X2RldiAqbmlvczJfY2VkID0gdG9fbmlvczJfY2xrZXZlbnQoZXZ0KTsKKworCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgY29uZGl0aW9uICovCisJdGltZXJfd3JpdGV3KCZuaW9zMl9jZWQtPnRpbWVyLCAwLCBBTFRFUkFfVElNRVJfU1RBVFVTX1JFRyk7CisJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuaW9zMl90aW1lcl9nZXRfYmFzZV9hbmRfZnJlcShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCXZvaWQgX19pb21lbSAqKmJhc2UsIHUzMiAqZnJlcSkKK3sKKwkqYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlpZiAoISpiYXNlKQorCQlwYW5pYygiVW5hYmxlIHRvIG1hcCByZWcgZm9yICVzXG4iLCBucC0+bmFtZSk7CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjbG9jay1mcmVxdWVuY3kiLCBmcmVxKSkKKwkJcGFuaWMoIlVuYWJsZSB0byBnZXQgJXMgY2xvY2sgZnJlcXVlbmN5XG4iLCBucC0+bmFtZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmlvczJfY2xvY2tldmVudF9kZXYgbmlvczJfY2UgPSB7CisJLmNlZCA9IHsKKwkJLm5hbWUgPSAibmlvczItY2xrZXZlbnQiLAorCQkuZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJCS5yYXRpbmcgPSAyNTAsCisJCS5zaGlmdCA9IDMyLAorCQkuc2V0X25leHRfZXZlbnQgPSBuaW9zMl90aW1lcl9zZXRfbmV4dF9ldmVudCwKKwkJLnNldF9tb2RlID0gbmlvczJfdGltZXJfc2V0X21vZGUsCisJfSwKK307CisKK3N0YXRpYyBfX2luaXQgdm9pZCBuaW9zMl9jbG9ja2V2ZW50X2luaXQoc3RydWN0IGRldmljZV9ub2RlICp0aW1lcikKK3sKKwl2b2lkIF9faW9tZW0gKmlvYmFzZTsKKwl1MzIgZnJlcTsKKwlpbnQgaXJxOworCisJbmlvczJfdGltZXJfZ2V0X2Jhc2VfYW5kX2ZyZXEodGltZXIsICZpb2Jhc2UsICZmcmVxKTsKKworCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHRpbWVyLCAwKTsKKwlpZiAoIWlycSkKKwkJcGFuaWMoIlVuYWJsZSB0byBwYXJzZSB0aW1lciBpcnFcbiIpOworCisJbmlvczJfY2UudGltZXIuYmFzZSA9IGlvYmFzZTsKKwluaW9zMl9jZS50aW1lci5mcmVxID0gZnJlcTsKKworCW5pb3MyX2NlLmNlZC5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKKwluaW9zMl9jZS5jZWQuaXJxID0gaXJxOworCisJbmlvczJfdGltZXJfc3RvcCgmbmlvczJfY2UudGltZXIpOworCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0ICovCisJdGltZXJfd3JpdGV3KCZuaW9zMl9jZS50aW1lciwgMCwgQUxURVJBX1RJTUVSX1NUQVRVU19SRUcpOworCisJaWYgKHJlcXVlc3RfaXJxKGlycSwgdGltZXJfaW50ZXJydXB0LCBJUlFGX1RJTUVSLCB0aW1lci0+bmFtZSwKKwkJJm5pb3MyX2NlLmNlZCkpCisJCXBhbmljKCJVbmFibGUgdG8gc2V0dXAgdGltZXIgaXJxXG4iKTsKKworCWNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIoJm5pb3MyX2NlLmNlZCwgZnJlcSwgMSwgVUxPTkdfTUFYKTsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIG5pb3MyX2Nsb2Nrc291cmNlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICp0aW1lcikKK3sKKwl1bnNpZ25lZCBpbnQgY3RybDsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZTsKKwl1MzIgZnJlcTsKKworCW5pb3MyX3RpbWVyX2dldF9iYXNlX2FuZF9mcmVxKHRpbWVyLCAmaW9iYXNlLCAmZnJlcSk7CisKKwluaW9zMl9jcy50aW1lci5iYXNlID0gaW9iYXNlOworCW5pb3MyX2NzLnRpbWVyLmZyZXEgPSBmcmVxOworCisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJm5pb3MyX2NzLmNzLCBmcmVxKTsKKworCXRpbWVyX3dyaXRldygmbmlvczJfY3MudGltZXIsIFVTSFJUX01BWCwgQUxURVJBX1RJTUVSX1BFUklPRExfUkVHKTsKKwl0aW1lcl93cml0ZXcoJm5pb3MyX2NzLnRpbWVyLCBVU0hSVF9NQVgsIEFMVEVSQV9USU1FUl9QRVJJT0RIX1JFRyk7CisKKwkvKiBpbnRlcnJ1cHQgZGlzYWJsZSArIGNvbnRpbnVvdXMgKyBzdGFydCAqLworCWN0cmwgPSBBTFRFUkFfVElNRVJfQ09OVFJPTF9DT05UX01TSyB8IEFMVEVSQV9USU1FUl9DT05UUk9MX1NUQVJUX01TSzsKKwl0aW1lcl93cml0ZXcoJm5pb3MyX2NzLnRpbWVyLCBjdHJsLCBBTFRFUkFfVElNRVJfQ09OVFJPTF9SRUcpOworCisJLyogQ2FsaWJyYXRlIHRoZSBkZWxheSBsb29wIGRpcmVjdGx5ICovCisJbHBqX2ZpbmUgPSBmcmVxIC8gSFo7Cit9CisKKy8qCisgKiBUaGUgZmlyc3QgdGltZXIgaW5zdGFuY2Ugd2lsbCB1c2UgYXMgYSBjbG9ja2V2ZW50LiBJZiB0aGVyZSBhcmUgdHdvIG9yCisgKiBtb3JlIGluc3RhbmNlcywgdGhlIHNlY29uZCBvbmUgZ2V0cyB1c2VkIGFzIGNsb2Nrc291cmNlIGFuZCBhbGwKKyAqIG90aGVycyBhcmUgdW51c2VkLgorKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBuaW9zMl90aW1lX2luaXQoc3RydWN0IGRldmljZV9ub2RlICp0aW1lcikKK3sKKwlzdGF0aWMgaW50IG51bV9jYWxsZWQ7CisKKwlzd2l0Y2ggKG51bV9jYWxsZWQpIHsKKwljYXNlIDA6CisJCW5pb3MyX2Nsb2NrZXZlbnRfaW5pdCh0aW1lcik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbmlvczJfY2xvY2tzb3VyY2VfaW5pdCh0aW1lcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW51bV9jYWxsZWQrKzsKK30KKwordm9pZCByZWFkX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwl0cy0+dHZfc2VjID0gbWt0aW1lKDIwMDcsIDEsIDEsIDAsIDAsIDApOworCXRzLT50dl9uc2VjID0gMDsKK30KKwordm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCit7CisJY2xvY2tzb3VyY2Vfb2ZfaW5pdCgpOworfQorCitDTE9DS1NPVVJDRV9PRl9ERUNMQVJFKG5pb3MyX3RpbWVyLCAiYWx0cix0aW1lci0xLjAiLCBuaW9zMl90aW1lX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbmlvczIva2VybmVsL3RyYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiOTc2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC90cmFwcy5jCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogSGFyZHdhcmUgZXhjZXB0aW9uIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDAxIFZpYyBQaGlsbGlwcworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworc3RhdGljIERFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CisKK3ZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQoreworCWNvbnNvbGVfdmVyYm9zZSgpOworCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKKwlwcl93YXJuKCJPb3BzOiAlcywgc2lnOiAlbGRcbiIsIHN0ciwgZXJyKTsKKwlzaG93X3JlZ3MocmVncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZkaWVfbG9jayk7CisJLyoKKwkgKiBkb19leGl0KCkgc2hvdWxkIHRha2UgY2FyZSBvZiBwYW5pYydpbmcgZnJvbSBhbiBpbnRlcnJ1cHQKKwkgKiBjb250ZXh0IHNvIHdlIGRvbid0IGhhbmRsZSBpdCBoZXJlCisJICovCisJZG9fZXhpdChlcnIpOworfQorCit2b2lkIF9leGNlcHRpb24oaW50IHNpZ25vLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzaWdpbmZvX3QgaW5mbzsKKworCWlmICghdXNlcl9tb2RlKHJlZ3MpKQorCQlkaWUoIkV4Y2VwdGlvbiBpbiBrZXJuZWwgbW9kZSIsIHJlZ3MsIHNpZ25vKTsKKworCWluZm8uc2lfc2lnbm8gPSBzaWdubzsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2NvZGUgPSBjb2RlOworCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKSBhZGRyOworCWZvcmNlX3NpZ19pbmZvKHNpZ25vLCAmaW5mbywgY3VycmVudCk7Cit9CisKKy8qCisgKiBUaGUgc2hvd19zdGFjayBpcyBhbiBleHRlcm5hbCBBUEkgd2hpY2ggd2UgZG8gbm90IHVzZSBvdXJzZWx2ZXMuCisgKi8KKworaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDQ4OworCit2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzdGFjaykKK3sKKwl1bnNpZ25lZCBsb25nICplbmRzdGFjaywgYWRkcjsKKwlpbnQgaTsKKworCWlmICghc3RhY2spIHsKKwkJaWYgKHRhc2spCisJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLmtzcDsKKwkJZWxzZQorCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSZzdGFjazsKKwl9CisKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHN0YWNrOworCWVuZHN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikgUEFHRV9BTElHTihhZGRyKTsKKworCXByX2VtZXJnKCJTdGFjayBmcm9tICUwOGx4OiIsICh1bnNpZ25lZCBsb25nKXN0YWNrKTsKKwlmb3IgKGkgPSAwOyBpIDwga3N0YWNrX2RlcHRoX3RvX3ByaW50OyBpKyspIHsKKwkJaWYgKHN0YWNrICsgMSA+IGVuZHN0YWNrKQorCQkJYnJlYWs7CisJCWlmIChpICUgOCA9PSAwKQorCQkJcHJfZW1lcmcoIlxuICAgICAgICIpOworCQlwcl9lbWVyZygiICUwOGx4IiwgKnN0YWNrKyspOworCX0KKworCXByX2VtZXJnKCJcbkNhbGwgVHJhY2U6Iik7CisJaSA9IDA7CisJd2hpbGUgKHN0YWNrICsgMSA8PSBlbmRzdGFjaykgeworCQlhZGRyID0gKnN0YWNrKys7CisJCS8qCisJCSAqIElmIHRoZSBhZGRyZXNzIGlzIGVpdGhlciBpbiB0aGUgdGV4dCBzZWdtZW50IG9mIHRoZQorCQkgKiBrZXJuZWwsIG9yIGluIHRoZSByZWdpb24gd2hpY2ggY29udGFpbnMgdm1hbGxvYydlZAorCQkgKiBtZW1vcnksIGl0ICptYXkqIGJlIHRoZSBhZGRyZXNzIG9mIGEgY2FsbGluZworCQkgKiByb3V0aW5lOyBpZiBzbywgcHJpbnQgaXQgc28gdGhhdCBzb21lb25lIHRyYWNpbmcKKwkJICogZG93biB0aGUgY2F1c2Ugb2YgdGhlIGNyYXNoIHdpbGwgYmUgYWJsZSB0byBmaWd1cmUKKwkJICogb3V0IHRoZSBjYWxsIHBhdGggdGhhdCB3YXMgdGFrZW4uCisJCSAqLworCQlpZiAoKChhZGRyID49ICh1bnNpZ25lZCBsb25nKSBfc3RleHQpICYmCisJCSAgICAgKGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpIF9ldGV4dCkpKSB7CisJCQlpZiAoaSAlIDQgPT0gMCkKKwkJCQlwcl9lbWVyZygiXG4gICAgICAgIik7CisJCQlwcl9lbWVyZygiIFs8JTA4bHg+XSIsIGFkZHIpOworCQkJaSsrOworCQl9CisJfQorCXByX2VtZXJnKCJcbiIpOworfQorCit2b2lkIF9faW5pdCB0cmFwX2luaXQodm9pZCkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KK30KKworLyogQnJlYWtwb2ludCBoYW5kbGVyICovCithc21saW5rYWdlIHZvaWQgYnJlYWtwb2ludF9jKHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwkvKgorCSAqIFRoZSBicmVha3BvaW50IGVudHJ5IGNvZGUgaGFzIG1vdmVkIHRoZSBQQyBvbiBieSA0IGJ5dGVzLCBzbyB3ZSBtdXN0CisJICogbW92ZSBpdCBiYWNrLiBUaGlzIGNvdWxkIGJlIGRvbmUgb24gdGhlIGhvc3QgYnV0IHdlIGRvIGl0IGhlcmUKKwkgKiBiZWNhdXNlIG1vbml0b3IuUyBvZiBKVEFHIGdkYnNlcnZlciBkb2VzIGl0IHRvby4KKwkgKi8KKwlmcC0+ZWEgLT0gNDsKKwlfZXhjZXB0aW9uKFNJR1RSQVAsIGZwLCBUUkFQX0JSS1BULCBmcC0+ZWEpOworfQorCisjaWZuZGVmIENPTkZJR19OSU9TMl9BTElHTk1FTlRfVFJBUAorLyogQWxpZ25tZW50IGV4Y2VwdGlvbiBoYW5kbGVyICovCithc21saW5rYWdlIHZvaWQgaGFuZGxlX3VuYWxpZ25lZF9jKHN0cnVjdCBwdF9yZWdzICpmcCwgaW50IGNhdXNlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IFJEQ1RMKENUTF9CQURBRERSKTsKKworCWNhdXNlID4+PSAyOworCWZwLT5lYSAtPSA0OworCisJaWYgKGZpeHVwX2V4Y2VwdGlvbihmcCkpCisJCXJldHVybjsKKworCWlmICghdXNlcl9tb2RlKGZwKSkgeworCQlwcl9hbGVydCgiVW5hbGlnbmVkIGFjY2VzcyBmcm9tIGtlcm5lbCBtb2RlLCB0aGlzIG1pZ2h0IGJlIGEgaGFyZHdhcmVcbiIpOworCQlwcl9hbGVydCgicHJvYmxlbSwgZHVtcCByZWdpc3RlcnMgYW5kIHJlc3RhcnQgdGhlIGluc3RydWN0aW9uXG4iKTsKKwkJcHJfYWxlcnQoIiAgQkFEQUREUiAweCUwOGx4XG4iLCBhZGRyKTsKKwkJcHJfYWxlcnQoIiAgY2F1c2UgICAlZFxuIiwgY2F1c2UpOworCQlwcl9hbGVydCgiICBvcC1jb2RlIDB4JTA4bHhcbiIsICoodW5zaWduZWQgbG9uZyAqKShmcC0+ZWEpKTsKKwkJc2hvd19yZWdzKGZwKTsKKwkJcmV0dXJuOworCX0KKworCV9leGNlcHRpb24oU0lHQlVTLCBmcCwgQlVTX0FEUkFMTiwgYWRkcik7Cit9CisjZW5kaWYgLyogQ09ORklHX05JT1MyX0FMSUdOTUVOVF9UUkFQICovCisKKy8qIElsbGVnYWwgaW5zdHJ1Y3Rpb24gaGFuZGxlciAqLworYXNtbGlua2FnZSB2b2lkIGhhbmRsZV9pbGxlZ2FsX2Moc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWZwLT5lYSAtPSA0OworCV9leGNlcHRpb24oU0lHSUxMLCBmcCwgSUxMX0lMTE9QQywgZnAtPmVhKTsKK30KKworLyogU3VwZXJ2aXNvciBpbnN0cnVjdGlvbiBoYW5kbGVyICovCithc21saW5rYWdlIHZvaWQgaGFuZGxlX3N1cGVydmlzb3JfaW5zdHIoc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWZwLT5lYSAtPSA0OworCV9leGNlcHRpb24oU0lHSUxMLCBmcCwgSUxMX1BSVk9QQywgZnAtPmVhKTsKK30KKworLyogRGl2aXNpb24gZXJyb3IgaGFuZGxlciAqLworYXNtbGlua2FnZSB2b2lkIGhhbmRsZV9kaXZlcnJvcl9jKHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlmcC0+ZWEgLT0gNDsKKwlfZXhjZXB0aW9uKFNJR0ZQRSwgZnAsIEZQRV9JTlRESVYsIGZwLT5lYSk7Cit9CisKKy8qIFVuaGFuZGxlZCBleGNlcHRpb24gaGFuZGxlciAqLworYXNtbGlua2FnZSB2b2lkIHVuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjYXVzZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBSRENUTChDVExfQkFEQUREUik7CisKKwljYXVzZSAvPSA0OworCisJcHJfZW1lcmcoIlVuaGFuZGxlZCBleGNlcHRpb24gIyVkIGluICVzIG1vZGUgKGJhZGFkZHI9MHglMDhseClcbiIsCisJCQljYXVzZSwgdXNlcl9tb2RlKHJlZ3MpID8gInVzZXIiIDogImtlcm5lbCIsIGFkZHIpOworCisJcmVncy0+ZWEgLT0gNDsKKwlzaG93X3JlZ3MocmVncyk7CisKKwlwcl9lbWVyZygib3Bjb2RlOiAweCUwOGx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgKikocmVncy0+ZWEpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL25pb3MyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNmZhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhvbWFzIENob3UgPHRob21hc0B3eXRyb24uY29tLnR3PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVuaW9zMiIsICJlbGYzMi1saXR0bGVuaW9zMiIsICJlbGYzMi1saXR0bGVuaW9zMiIpCisKK09VVFBVVF9BUkNIKG5pb3MpCitFTlRSWShfc3RhcnQpCS8qIERlZmluZWQgaW4gaGVhZC5TICovCisKK2ppZmZpZXMgPSBqaWZmaWVzXzY0OworCitTRUNUSU9OUworeworCS4gPSBDT05GSUdfTklPUzJfTUVNX0JBU0UgfCBDT05GSUdfTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFOworCisJX3RleHQgPSAuOworCV9zdGV4dCA9IC47CisJSEVBRF9URVhUX1NFQ1RJT04KKwkudGV4dCA6IHsKKwkJVEVYVF9URVhUCisJCVNDSEVEX1RFWFQKKwkJTE9DS19URVhUCisJCUlSUUVOVFJZX1RFWFQKKwkJS1BST0JFU19URVhUCisJfSA9MAorCV9ldGV4dCA9IC47CisKKwkuZ290IDogeworCQkqKC5nb3QucGx0KQorCQkqKC5pZ290LnBsdCkKKwkJKiguZ290KQorCQkqKC5pZ290KQorCX0KKworCUVYQ0VQVElPTl9UQUJMRShMMV9DQUNIRV9CWVRFUykKKworCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9faW5pdF9iZWdpbiA9IC47CisJSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQorCUlOSVRfREFUQV9TRUNUSU9OKFBBR0VfU0laRSkKKwlQRVJDUFVfU0VDVElPTihMMV9DQUNIRV9CWVRFUykKKwlfX2luaXRfZW5kID0gLjsKKworCV9zZGF0YSA9IC47CisJUk9fREFUQV9TRUNUSU9OKFBBR0VfU0laRSkKKwlSV19EQVRBX1NFQ1RJT04oTDFfQ0FDSEVfQllURVMsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCisJX2VkYXRhID0gLjsKKworCUJTU19TRUNUSU9OKDAsIDAsIDApCisJX2VuZCA9IC47CisKKwlTVEFCU19ERUJVRworCURXQVJGX0RFQlVHCisJTk9URVMKKworCURJU0NBUkRTCit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2xpYi9NYWtlZmlsZSBiL2FyY2gvbmlvczIvbGliL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NzI1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2xpYi9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIE5pb3MyLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuCisjCisKK2xpYi15ICs9IGRlbGF5Lm8KK2xpYi15ICs9IG1lbWNweS5vCitsaWIteSArPSBtZW1tb3ZlLm8KK2xpYi15ICs9IG1lbXNldC5vCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2xpYi9kZWxheS5jIGIvYXJjaC9uaW9zMi9saWIvZGVsYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODgxMTljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9saWIvZGVsYXkuYwpAQCAtMCwwICsxLDUyIEBACisvKiBDb3B5cmlnaHQgQWx0ZXJhIENvcnBvcmF0aW9uIChDKSAyMDE0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdGltZXguaD4KKwordm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgY3ljbGVzKQoreworCWN5Y2xlc190IHN0YXJ0ID0gZ2V0X2N5Y2xlcygpOworCisJd2hpbGUgKChnZXRfY3ljbGVzKCkgLSBzdGFydCkgPCBjeWNsZXMpCisJCWNwdV9yZWxheCgpOworfQorRVhQT1JUX1NZTUJPTChfX2RlbGF5KTsKKwordm9pZCBfX2NvbnN0X3VkZWxheSh1bnNpZ25lZCBsb25nIHhsb29wcykKK3sKKwl1NjQgbG9vcHM7CisKKwlsb29wcyA9ICh1NjQpeGxvb3BzICogbG9vcHNfcGVyX2ppZmZ5ICogSFo7CisKKwlfX2RlbGF5KGxvb3BzID4+IDMyKTsKK30KK0VYUE9SVF9TWU1CT0woX19jb25zdF91ZGVsYXkpOworCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJX19jb25zdF91ZGVsYXkodXNlY3MgKiAweDEwQzdVTCk7IC8qIDIqKjMyIC8gMTAwMDAwMCAocm91bmRlZCB1cCkgKi8KK30KK0VYUE9SVF9TWU1CT0woX191ZGVsYXkpOworCit2b2lkIF9fbmRlbGF5KHVuc2lnbmVkIGxvbmcgbnNlY3MpCit7CisJX19jb25zdF91ZGVsYXkobnNlY3MgKiAweDVVTCk7IC8qIDIqKjMyIC8gMTAwMDAwMDAwMCAocm91bmRlZCB1cCkgKi8KK30KK0VYUE9SVF9TWU1CT0woX19uZGVsYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9saWIvbWVtY3B5LmMgYi9hcmNoL25pb3MyL2xpYi9tZW1jcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzE1ZjVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9saWIvbWVtY3B5LmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qIEV4dHJhY3RlZCBmcm9tIEdMSUJDIG1lbWNweS5jIGFuZCBtZW1jb3B5LmgsIHdoaWNoIGlzOgorICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk3LCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBUb3Jiam9ybiBHcmFubHVuZCAodGVnZUBzaWNzLnNlKS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogVHlwZSB0byB1c2UgZm9yIGFsaWduZWQgbWVtb3J5IG9wZXJhdGlvbnMuCisgICBUaGlzIHNob3VsZCBub3JtYWxseSBiZSB0aGUgYmlnZ2VzdCB0eXBlIHN1cHBvcnRlZCBieSBhIHNpbmdsZSBsb2FkCisgICBhbmQgc3RvcmUuICAqLworI2RlZmluZQlvcF90CXVuc2lnbmVkIGxvbmcgaW50CisjZGVmaW5lIE9QU0laCShzaXplb2Yob3BfdCkpCisKKy8qIE9wdGltYWwgdHlwZSBmb3Igc3RvcmluZyBieXRlcyBpbiByZWdpc3RlcnMuICAqLworI2RlZmluZQlyZWdfY2hhcgljaGFyCisKKyNkZWZpbmUgTUVSR0UodzAsIHNoXzEsIHcxLCBzaF8yKSAoKCh3MCkgPj4gKHNoXzEpKSB8ICgodzEpIDw8IChzaF8yKSkpCisKKy8qIENvcHkgZXhhY3RseSBOQllURVMgYnl0ZXMgZnJvbSBTUkNfQlAgdG8gRFNUX0JQLAorICAgd2l0aG91dCBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgYWxpZ25tZW50IG9mIHRoZSBwb2ludGVycy4gICovCisjZGVmaW5lIEJZVEVfQ09QWV9GV0QoZHN0X2JwLCBzcmNfYnAsIG5ieXRlcykJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlzaXplX3QgX19uYnl0ZXMgPSAobmJ5dGVzKTsJCQkJCVwKKwl3aGlsZSAoX19uYnl0ZXMgPiAwKSB7CQkJCQkJXAorCQl1bnNpZ25lZCBjaGFyIF9feCA9ICgodW5zaWduZWQgY2hhciAqKSBzcmNfYnApWzBdOwlcCisJCXNyY19icCArPSAxOwkJCQkJCVwKKwkJX19uYnl0ZXMgLT0gMTsJCQkJCQlcCisJCSgodW5zaWduZWQgY2hhciAqKSBkc3RfYnApWzBdID0gX194OwkJCVwKKwkJZHN0X2JwICs9IDE7CQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIENvcHkgKnVwIHRvKiBOQllURVMgYnl0ZXMgZnJvbSBTUkNfQlAgdG8gRFNUX0JQLCB3aXRoCisgICB0aGUgYXNzdW1wdGlvbiB0aGF0IERTVF9CUCBpcyBhbGlnbmVkIG9uIGFuIE9QU0laIG11bHRpcGxlLiAgSWYKKyAgIG5vdCBhbGwgYnl0ZXMgY291bGQgYmUgZWFzaWx5IGNvcGllZCwgc3RvcmUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcworICAgaW4gTkJZVEVTX0xFRlQsIG90aGVyd2lzZSBzdG9yZSAwLiAgKi8KKy8qIGV4dGVybiB2b2lkIF93b3JkY29weV9md2RfYWxpZ25lZCBfX1AgKChsb25nIGludCwgbG9uZyBpbnQsIHNpemVfdCkpOyAqLworLyogZXh0ZXJuIHZvaWQgX3dvcmRjb3B5X2Z3ZF9kZXN0X2FsaWduZWQgX19QICgobG9uZyBpbnQsIGxvbmcgaW50LCBzaXplX3QpKTsgKi8KKyNkZWZpbmUgV09SRF9DT1BZX0ZXRChkc3RfYnAsIHNyY19icCwgbmJ5dGVzX2xlZnQsIG5ieXRlcykJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHNyY19icCAlIE9QU0laID09IDApCQkJCQlcCisJCV93b3JkY29weV9md2RfYWxpZ25lZChkc3RfYnAsIHNyY19icCwgKG5ieXRlcykgLyBPUFNJWik7XAorCWVsc2UJCQkJCQkJCVwKKwkJX3dvcmRjb3B5X2Z3ZF9kZXN0X2FsaWduZWQoZHN0X2JwLCBzcmNfYnAsIChuYnl0ZXMpIC8gT1BTSVopO1wKKwlzcmNfYnAgKz0gKG5ieXRlcykgJiAtT1BTSVo7CQkJCQlcCisJZHN0X2JwICs9IChuYnl0ZXMpICYgLU9QU0laOwkJCQkJXAorCShuYnl0ZXNfbGVmdCkgPSAobmJ5dGVzKSAlIE9QU0laOwkJCQlcCit9IHdoaWxlICgwKQorCisKKy8qIFRocmVzaG9sZCB2YWx1ZSBmb3Igd2hlbiB0byBlbnRlciB0aGUgdW5yb2xsZWQgbG9vcHMuICAqLworI2RlZmluZQlPUF9UX1RIUkVTCTE2CisKKy8qIF93b3JkY29weV9md2RfYWxpZ25lZCAtLSBDb3B5IGJsb2NrIGJlZ2lubmluZyBhdCBTUkNQIHRvCisgICBibG9jayBiZWdpbm5pbmcgYXQgRFNUUCB3aXRoIExFTiBgb3BfdCcgd29yZHMgKG5vdCBMRU4gYnl0ZXMhKS4KKyAgIEJvdGggU1JDUCBhbmQgRFNUUCBzaG91bGQgYmUgYWxpZ25lZCBmb3IgbWVtb3J5IG9wZXJhdGlvbnMgb24gYG9wX3Qncy4gICovCisvKiBzdHJlYW0tbGluZWQgKHJlYWQgeDggKyB3cml0ZSB4OCkgKi8KK3N0YXRpYyB2b2lkIF93b3JkY29weV9md2RfYWxpZ25lZChsb25nIGludCBkc3RwLCBsb25nIGludCBzcmNwLCBzaXplX3QgbGVuKQoreworCXdoaWxlIChsZW4gPiA3KSB7CisJCXJlZ2lzdGVyIG9wX3QgYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3OworCisJCWEwID0gKChvcF90ICopIHNyY3ApWzBdOworCQlhMSA9ICgob3BfdCAqKSBzcmNwKVsxXTsKKwkJYTIgPSAoKG9wX3QgKikgc3JjcClbMl07CisJCWEzID0gKChvcF90ICopIHNyY3ApWzNdOworCQlhNCA9ICgob3BfdCAqKSBzcmNwKVs0XTsKKwkJYTUgPSAoKG9wX3QgKikgc3JjcClbNV07CisJCWE2ID0gKChvcF90ICopIHNyY3ApWzZdOworCQlhNyA9ICgob3BfdCAqKSBzcmNwKVs3XTsKKwkJKChvcF90ICopIGRzdHApWzBdID0gYTA7CisJCSgob3BfdCAqKSBkc3RwKVsxXSA9IGExOworCQkoKG9wX3QgKikgZHN0cClbMl0gPSBhMjsKKwkJKChvcF90ICopIGRzdHApWzNdID0gYTM7CisJCSgob3BfdCAqKSBkc3RwKVs0XSA9IGE0OworCQkoKG9wX3QgKikgZHN0cClbNV0gPSBhNTsKKwkJKChvcF90ICopIGRzdHApWzZdID0gYTY7CisJCSgob3BfdCAqKSBkc3RwKVs3XSA9IGE3OworCisJCXNyY3AgKz0gOCAqIE9QU0laOworCQlkc3RwICs9IDggKiBPUFNJWjsKKwkJbGVuIC09IDg7CisJfQorCXdoaWxlIChsZW4gPiAwKSB7CisJCSoob3BfdCAqKWRzdHAgPSAqKG9wX3QgKilzcmNwOworCisJCXNyY3AgKz0gT1BTSVo7CisJCWRzdHAgKz0gT1BTSVo7CisJCWxlbiAtPSAxOworCX0KK30KKworLyogX3dvcmRjb3B5X2Z3ZF9kZXN0X2FsaWduZWQgLS0gQ29weSBibG9jayBiZWdpbm5pbmcgYXQgU1JDUCB0bworICAgYmxvY2sgYmVnaW5uaW5nIGF0IERTVFAgd2l0aCBMRU4gYG9wX3QnIHdvcmRzIChub3QgTEVOIGJ5dGVzISkuCisgICBEU1RQIHNob3VsZCBiZSBhbGlnbmVkIGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBgb3BfdCdzLCBidXQgU1JDUCBtdXN0CisgICAqbm90KiBiZSBhbGlnbmVkLiAgKi8KKy8qIHN0cmVhbS1saW5lZCAocmVhZCB4NCArIHdyaXRlIHg0KSAqLworc3RhdGljIHZvaWQgX3dvcmRjb3B5X2Z3ZF9kZXN0X2FsaWduZWQobG9uZyBpbnQgZHN0cCwgbG9uZyBpbnQgc3JjcCwKKwkJCQkJc2l6ZV90IGxlbikKK3sKKwlvcF90IGFwOworCWludCBzaF8xLCBzaF8yOworCisJLyogQ2FsY3VsYXRlIGhvdyB0byBzaGlmdCBhIHdvcmQgcmVhZCBhdCB0aGUgbWVtb3J5IG9wZXJhdGlvbgorCWFsaWduZWQgc3JjcCB0byBtYWtlIGl0IGFsaWduZWQgZm9yIGNvcHkuICovCisKKwlzaF8xID0gOCAqIChzcmNwICUgT1BTSVopOworCXNoXzIgPSA4ICogT1BTSVogLSBzaF8xOworCisJLyogTWFrZSBTUkNQIGFsaWduZWQgYnkgcm91bmRpbmcgaXQgZG93biB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgb3BfdCcKKwlpdCBwb2ludHMgaW4gdGhlIG1pZGRsZSBvZi4gKi8KKwlzcmNwICY9IC1PUFNJWjsKKwlhcCA9ICgob3BfdCAqKSBzcmNwKVswXTsKKwlzcmNwICs9IE9QU0laOworCisJd2hpbGUgKGxlbiA+IDMpIHsKKwkJb3BfdCBhMCwgYTEsIGEyLCBhMzsKKworCQlhMCA9ICgob3BfdCAqKSBzcmNwKVswXTsKKwkJYTEgPSAoKG9wX3QgKikgc3JjcClbMV07CisJCWEyID0gKChvcF90ICopIHNyY3ApWzJdOworCQlhMyA9ICgob3BfdCAqKSBzcmNwKVszXTsKKwkJKChvcF90ICopIGRzdHApWzBdID0gTUVSR0UoYXAsIHNoXzEsIGEwLCBzaF8yKTsKKwkJKChvcF90ICopIGRzdHApWzFdID0gTUVSR0UoYTAsIHNoXzEsIGExLCBzaF8yKTsKKwkJKChvcF90ICopIGRzdHApWzJdID0gTUVSR0UoYTEsIHNoXzEsIGEyLCBzaF8yKTsKKwkJKChvcF90ICopIGRzdHApWzNdID0gTUVSR0UoYTIsIHNoXzEsIGEzLCBzaF8yKTsKKworCQlhcCA9IGEzOworCQlzcmNwICs9IDQgKiBPUFNJWjsKKwkJZHN0cCArPSA0ICogT1BTSVo7CisJCWxlbiAtPSA0OworCX0KKwl3aGlsZSAobGVuID4gMCkgeworCQlyZWdpc3RlciBvcF90IGEwOworCisJCWEwID0gKChvcF90ICopIHNyY3ApWzBdOworCQkoKG9wX3QgKikgZHN0cClbMF0gPSBNRVJHRShhcCwgc2hfMSwgYTAsIHNoXzIpOworCisJCWFwID0gYTA7CisJCXNyY3AgKz0gT1BTSVo7CisJCWRzdHAgKz0gT1BTSVo7CisJCWxlbiAtPSAxOworCX0KK30KKwordm9pZCAqbWVtY3B5KHZvaWQgKmRzdHBwLCBjb25zdCB2b2lkICpzcmNwcCwgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGludCBkc3RwID0gKGxvbmcgaW50KSBkc3RwcDsKKwl1bnNpZ25lZCBsb25nIGludCBzcmNwID0gKGxvbmcgaW50KSBzcmNwcDsKKworCS8qIENvcHkgZnJvbSB0aGUgYmVnaW5uaW5nIHRvIHRoZSBlbmQuICAqLworCisJLyogSWYgdGhlcmUgbm90IHRvbyBmZXcgYnl0ZXMgdG8gY29weSwgdXNlIHdvcmQgY29weS4gICovCisJaWYgKGxlbiA+PSBPUF9UX1RIUkVTKSB7CisJCS8qIENvcHkganVzdCBhIGZldyBieXRlcyB0byBtYWtlIERTVFAgYWxpZ25lZC4gICovCisJCWxlbiAtPSAoLWRzdHApICUgT1BTSVo7CisJCUJZVEVfQ09QWV9GV0QoZHN0cCwgc3JjcCwgKC1kc3RwKSAlIE9QU0laKTsKKworCQkvKiBDb3B5IHdob2xlIHBhZ2VzIGZyb20gU1JDUCB0byBEU1RQIGJ5IHZpcnR1YWwgYWRkcmVzcworCQkgICBtYW5pcHVsYXRpb24sIGFzIG11Y2ggYXMgcG9zc2libGUuICAqLworCisJCS8qIFBBR0VfQ09QWV9GV0RfTUFZQkUgKGRzdHAsIHNyY3AsIGxlbiwgbGVuKTsgKi8KKworCQkvKiBDb3B5IGZyb20gU1JDUCB0byBEU1RQIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIGtub3duCisJCSAgIGFsaWdubWVudCBvZiBEU1RQLiBOdW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGlzIHB1dCBpbiB0aGUKKwkJICAgdGhpcmQgYXJndW1lbnQsIGkuZS4gaW4gTEVOLiAgVGhpcyBudW1iZXIgbWF5IHZhcnkgZnJvbQorCQkgICBtYWNoaW5lIHRvIG1hY2hpbmUuICovCisKKwkJV09SRF9DT1BZX0ZXRChkc3RwLCBzcmNwLCBsZW4sIGxlbik7CisKKwkJLyogRmFsbCBvdXQgYW5kIGNvcHkgdGhlIHRhaWwuICovCisJfQorCisJLyogVGhlcmUgYXJlIGp1c3QgYSBmZXcgYnl0ZXMgdG8gY29weS4gIFVzZSBieXRlIG1lbW9yeSBvcGVyYXRpb25zLiAqLworCUJZVEVfQ09QWV9GV0QoZHN0cCwgc3JjcCwgbGVuKTsKKworCXJldHVybiBkc3RwcDsKK30KKwordm9pZCAqbWVtY3B5Yih2b2lkICpkc3RwcCwgY29uc3Qgdm9pZCAqc3JjcHAsIHVuc2lnbmVkIGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGludCBkc3RwID0gKGxvbmcgaW50KSBkc3RwcDsKKwl1bnNpZ25lZCBsb25nIGludCBzcmNwID0gKGxvbmcgaW50KSBzcmNwcDsKKworCUJZVEVfQ09QWV9GV0QoZHN0cCwgc3JjcCwgbGVuKTsKKworCXJldHVybiBkc3RwcDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbGliL21lbW1vdmUuYyBiL2FyY2gvbmlvczIvbGliL21lbW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjVlZjUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9saWIvbWVtbW92ZS5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2lmZGVmIF9fSEFWRV9BUkNIX01FTU1PVkUKK3ZvaWQgKm1lbW1vdmUodm9pZCAqZCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgZHN0LCBzcmM7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gZDsKKworCWlmIChkIDwgcykgeworCQlkc3QgPSAodW5zaWduZWQgbG9uZykgZDsKKwkJc3JjID0gKHVuc2lnbmVkIGxvbmcpIHM7CisKKwkJaWYgKChjb3VudCA8IDgpIHx8ICgoZHN0IF4gc3JjKSAmIDMpKQorCQkJZ290byByZXN0dXA7CisKKwkJaWYgKGRzdCAmIDEpIHsKKwkJCSooY2hhciAqKWRzdCsrID0gKihjaGFyICopc3JjKys7CisJCQljb3VudC0tOworCQl9CisJCWlmIChkc3QgJiAyKSB7CisJCQkqKHNob3J0ICopZHN0ID0gKihzaG9ydCAqKXNyYzsKKwkJCXNyYyArPSAyOworCQkJZHN0ICs9IDI7CisJCQljb3VudCAtPSAyOworCQl9CisJCXdoaWxlIChjb3VudCA+IDMpIHsKKwkJCSoobG9uZyAqKWRzdCA9ICoobG9uZyAqKXNyYzsKKwkJCXNyYyArPSA0OworCQkJZHN0ICs9IDQ7CisJCQljb3VudCAtPSA0OworCQl9CityZXN0dXA6CisJCXdoaWxlIChjb3VudC0tKQorCQkJKihjaGFyICopZHN0KysgPSAqKGNoYXIgKilzcmMrKzsKKwl9IGVsc2UgeworCQlkc3QgPSAodW5zaWduZWQgbG9uZykgZCArIGNvdW50OworCQlzcmMgPSAodW5zaWduZWQgbG9uZykgcyArIGNvdW50OworCisJCWlmICgoY291bnQgPCA4KSB8fCAoKGRzdCBeIHNyYykgJiAzKSkKKwkJCWdvdG8gcmVzdGRvd247CisKKwkJaWYgKGRzdCAmIDEpIHsKKwkJCXNyYy0tOworCQkJZHN0LS07CisJCQljb3VudC0tOworCQkJKihjaGFyICopZHN0ID0gKihjaGFyICopc3JjOworCQl9CisJCWlmIChkc3QgJiAyKSB7CisJCQlzcmMgLT0gMjsKKwkJCWRzdCAtPSAyOworCQkJY291bnQgLT0gMjsKKwkJCSooc2hvcnQgKilkc3QgPSAqKHNob3J0ICopc3JjOworCQl9CisJCXdoaWxlIChjb3VudCA+IDMpIHsKKwkJCXNyYyAtPSA0OworCQkJZHN0IC09IDQ7CisJCQljb3VudCAtPSA0OworCQkJKihsb25nICopZHN0ID0gKihsb25nICopc3JjOworCQl9CityZXN0ZG93bjoKKwkJd2hpbGUgKGNvdW50LS0pIHsKKwkJCXNyYy0tOworCQkJZHN0LS07CisJCQkqKGNoYXIgKilkc3QgPSAqKGNoYXIgKilzcmM7CisJCX0KKwl9CisKKwlyZXR1cm4gZDsKK30KKyNlbmRpZiAvKiBfX0hBVkVfQVJDSF9NRU1NT1ZFICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2xpYi9tZW1zZXQuYyBiL2FyY2gvbmlvczIvbGliL21lbXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZTk3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2xpYi9tZW1zZXQuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpZmRlZiBfX0hBVkVfQVJDSF9NRU1TRVQKK3ZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgc2l6ZV90IGNvdW50KQoreworCWludCBkZXN0cHRyLCBjaGFyY250LCBkd29yZGNudCwgZmlsbDhyZWcsIHdya3JlZ2E7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gczsKKworCWMgJj0gMHhGRjsKKworCWlmIChjb3VudCA8PSA4KSB7CisJCWNoYXIgKnhzID0gKGNoYXIgKikgczsKKworCQl3aGlsZSAoY291bnQtLSkKKwkJCSp4cysrID0gYzsKKwkJcmV0dXJuIHM7CisJfQorCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkvKiBmaWxsOCAlMywgJTUgKGMgJiAweGZmKSAqLworCQkiCXNsbGkJJTQsICU1LCA4XG4iCisJCSIJb3IJJTQsICU0LCAlNVxuIgorCQkiCXNsbGkgICAgJTMsICU0LCAxNlxuIgorCQkiCW9yCSUzLCAlMywgJTRcbiIKKwkJLyogV29yZC1hbGlnbiAlMCAocykgaWYgbmVjZXNzYXJ5ICovCisJCSIJYW5kaQklNCwgJTAsIDB4MDFcbiIKKwkJIgliZXEJJTQsIHplcm8sIDFmXG4iCisJCSIJYWRkaQklMSwgJTEsIC0xXG4iCisJCSIJc3RiCSUzLCAwKCUwKVxuIgorCQkiCWFkZGkJJTAsICUwLCAxXG4iCisJCSIxOgltb3YJJTIsICUxXG4iCisJCS8qIER3b3JkLWFsaWduICUwIChzKSBpZiBuZWNlc3NhcnkgKi8KKwkJIglhbmRpCSU0LCAlMCwgMHgwMlxuIgorCQkiCWJlcQklNCwgemVybywgMmZcbiIKKwkJIglhZGRpCSUxLCAlMSwgLTJcbiIKKwkJIglzdGgJJTMsIDAoJTApXG4iCisJCSIJYWRkaQklMCwgJTAsIDJcbiIKKwkJIgltb3YJJTIsICUxXG4iCisJCS8qICUxIGFuZCAlMiBhcmUgaG93IG1hbnkgbW9yZSBieXRlcyB0byBzZXQgKi8KKwkJIjI6CXNybGkJJTIsICUyLCAyXG4iCisJCS8qICUyIGlzIGhvdyBtYW55IGR3b3JkcyB0byBzZXQgKi8KKwkJIjM6CXN0dwklMywgMCglMClcbiIKKwkJIglhZGRpCSUwLCAlMCwgNFxuIgorCQkiCWFkZGkgICAgJTIsICUyLCAtMVxuIgorCQkiCWJuZQklMiwgemVybywgM2JcbiIKKwkJLyogc3RvcmUgcmVzaWR1YWwgd29yZCBhbmQvb3IgYnl0ZSBpZiBuZWNlc3NhcnkgKi8KKwkJIglhbmRpCSU0LCAlMSwgMHgwMlxuIgorCQkiCWJlcQklNCwgemVybywgNGZcbiIKKwkJIglzdGgJJTMsIDAoJTApXG4iCisJCSIJYWRkaQklMCwgJTAsIDJcbiIKKwkJLyogc3RvcmUgcmVzaWR1YWwgYnl0ZSBpZiBuZWNlc3NhcnkgKi8KKwkJIjQ6CWFuZGkJJTQsICUxLCAweDAxXG4iCisJCSIJYmVxCSU0LCB6ZXJvLCA1ZlxuIgorCQkiCXN0YgklMywgMCglMClcbiIKKwkJIjU6XG4iCisJCTogIj1yIiAoZGVzdHB0ciksCS8qICUwICBPdXRwdXQgKi8KKwkJICAiPXIiIChjaGFyY250KSwJLyogJTEgIE91dHB1dCAqLworCQkgICI9ciIgKGR3b3JkY250KSwJLyogJTIgIE91dHB1dCAqLworCQkgICI9ciIgKGZpbGw4cmVnKSwJLyogJTMgIE91dHB1dCAqLworCQkgICI9ciIgKHdya3JlZ2EpCS8qICU0ICBPdXRwdXQgKi8KKwkJOiAiciIgKGMpLAkJLyogJTUgIElucHV0ICovCisJCSAgIjAiIChzKSwJCS8qICUwICBJbnB1dC9PdXRwdXQgKi8KKwkJICAiMSIgKGNvdW50KQkJLyogJTEgIElucHV0L091dHB1dCAqLworCQk6ICJtZW1vcnkiCQkvKiBjbG9iYmVyZWQgKi8KKwkpOworCisJcmV0dXJuIHM7Cit9CisjZW5kaWYgLyogX19IQVZFX0FSQ0hfTUVNU0VUICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL01ha2VmaWxlIGIvYXJjaC9uaW9zMi9tbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2JkMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTmlvczItc3BlY2lmaWMgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VyLgorIworCitvYmoteQkrPSBjYWNoZWZsdXNoLm8KK29iai15CSs9IGRtYS1tYXBwaW5nLm8KK29iai15CSs9IGV4dGFibGUubworb2JqLXkJKz0gZmF1bHQubworb2JqLXkJKz0gaW5pdC5vCitvYmoteQkrPSBpb3JlbWFwLm8KK29iai15CSs9IG1tdV9jb250ZXh0Lm8KK29iai15CSs9IHBndGFibGUubworb2JqLXkJKz0gdGxiLm8KK29iai15CSs9IHVhY2Nlc3MubwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9jYWNoZWZsdXNoLmMgYi9hcmNoL25pb3MyL21tL2NhY2hlZmx1c2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWU0ODJiNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vY2FjaGVmbHVzaC5jCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlzdGFydCAmPSB+KGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCWVuZCArPSAoY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7CisJZW5kICY9IH4oY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7CisKKwlpZiAoZW5kID4gc3RhcnQgKyBjcHVpbmZvLmRjYWNoZV9zaXplKQorCQllbmQgPSBzdGFydCArIGNwdWluZm8uZGNhY2hlX3NpemU7CisKKwlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUpIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgICBmbHVzaGRhIDAoJTApXG4iCisJCQkJCTogLyogT3V0cHV0cyAqLworCQkJCQk6IC8qIElucHV0cyAgKi8gInIiKGFkZHIpCisJCQkJCS8qIDogTm8gY2xvYmJlciAqLyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9hbGwodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJc3RhcnQgJj0gfihjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKKwllbmQgKz0gKGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCWVuZCAmPSB+KGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCisJaWYgKGVuZCA+IHN0YXJ0ICsgY3B1aW5mby5kY2FjaGVfc2l6ZSkKKwkJZW5kID0gc3RhcnQgKyBjcHVpbmZvLmRjYWNoZV9zaXplOworCisJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gY3B1aW5mby5kY2FjaGVfbGluZV9zaXplKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiICAgZmx1c2hkIDAoJTApXG4iCisJCQkJCTogLyogT3V0cHV0cyAqLworCQkJCQk6IC8qIElucHV0cyAgKi8gInIiKGFkZHIpCisJCQkJCS8qIDogTm8gY2xvYmJlciAqLyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2ludmFsaWRhdGVfZGNhY2hlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCXN0YXJ0ICY9IH4oY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7CisJZW5kICs9IChjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKKwllbmQgJj0gfihjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKKworCWlmIChlbmQgPiBzdGFydCArIGNwdWluZm8uZGNhY2hlX3NpemUpCisJCWVuZCA9IHN0YXJ0ICsgY3B1aW5mby5kY2FjaGVfc2l6ZTsKKworCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSkgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiAgIGluaXRkYSAwKCUwKVxuIgorCQkJCQk6IC8qIE91dHB1dHMgKi8KKwkJCQkJOiAvKiBJbnB1dHMgICovICJyIihhZGRyKQorCQkJCQkvKiA6IE5vIGNsb2JiZXIgKi8pOworCX0KK30KKworc3RhdGljIHZvaWQgX19mbHVzaF9pY2FjaGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJc3RhcnQgJj0gfihjcHVpbmZvLmljYWNoZV9saW5lX3NpemUgLSAxKTsKKwllbmQgKz0gKGNwdWluZm8uaWNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCWVuZCAmPSB+KGNwdWluZm8uaWNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCisJaWYgKGVuZCA+IHN0YXJ0ICsgY3B1aW5mby5pY2FjaGVfc2l6ZSkKKwkJZW5kID0gc3RhcnQgKyBjcHVpbmZvLmljYWNoZV9zaXplOworCisJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gY3B1aW5mby5pY2FjaGVfbGluZV9zaXplKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiICAgZmx1c2hpICUwXG4iCisJCQkJCTogLyogT3V0cHV0cyAqLworCQkJCQk6IC8qIElucHV0cyAgKi8gInIiKGFkZHIpCisJCQkJCS8qIDogTm8gY2xvYmJlciAqLyk7CisJfQorCV9fYXNtX18gX192b2xhdGlsZSgiIGZsdXNocFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX2FsaWFzZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+YWN0aXZlX21tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudDsKKwlwZ29mZl90IHBnb2ZmOworCisJcGdvZmYgPSBwYWdlLT5pbmRleDsKKworCWZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZyk7CisJdm1hX2ludGVydmFsX3RyZWVfZm9yZWFjaChtcG50LCAmbWFwcGluZy0+aV9tbWFwLCBwZ29mZiwgcGdvZmYpIHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisKKwkJaWYgKG1wbnQtPnZtX21tICE9IG1tKQorCQkJY29udGludWU7CisJCWlmICghKG1wbnQtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpKQorCQkJY29udGludWU7CisKKwkJb2Zmc2V0ID0gKHBnb2ZmIC0gbXBudC0+dm1fcGdvZmYpIDw8IFBBR0VfU0hJRlQ7CisJCWZsdXNoX2NhY2hlX3BhZ2UobXBudCwgbXBudC0+dm1fc3RhcnQgKyBvZmZzZXQsCisJCQlwYWdlX3RvX3BmbihwYWdlKSk7CisJfQorCWZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTsKK30KKwordm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCkKK3sKKwlfX2ZsdXNoX2RjYWNoZV9hbGwoMCwgY3B1aW5mby5kY2FjaGVfc2l6ZSk7CisJX19mbHVzaF9pY2FjaGUoMCwgY3B1aW5mby5pY2FjaGVfc2l6ZSk7Cit9CisKK3ZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJZmx1c2hfY2FjaGVfYWxsKCk7Cit9CisKK3ZvaWQgZmx1c2hfY2FjaGVfZHVwX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWZsdXNoX2NhY2hlX2FsbCgpOworfQorCit2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlfX2ZsdXNoX2ljYWNoZShzdGFydCwgZW5kKTsKK30KKwordm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJX19mbHVzaF9kY2FjaGUoc3RhcnQsIGVuZCk7Cit9CitFWFBPUlRfU1lNQk9MKGZsdXNoX2RjYWNoZV9yYW5nZSk7CisKK3ZvaWQgaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJX19pbnZhbGlkYXRlX2RjYWNoZShzdGFydCwgZW5kKTsKK30KK0VYUE9SVF9TWU1CT0woaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UpOworCit2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJdW5zaWduZWQgbG9uZyBlbmQpCit7CisJX19mbHVzaF9kY2FjaGUoc3RhcnQsIGVuZCk7CisJaWYgKHZtYSA9PSBOVUxMIHx8ICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpCisJCV9fZmx1c2hfaWNhY2hlKHN0YXJ0LCBlbmQpOworfQorCit2b2lkIGZsdXNoX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCisJX19mbHVzaF9pY2FjaGUoc3RhcnQsIGVuZCk7Cit9CisKK3ZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIsCisJCQl1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hZGRyOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisKKwlfX2ZsdXNoX2RjYWNoZShzdGFydCwgZW5kKTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCisJCV9fZmx1c2hfaWNhY2hlKHN0YXJ0LCBlbmQpOworfQorCit2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCisJLyoKKwkgKiBUaGUgemVybyBwYWdlIGlzIG5ldmVyIHdyaXR0ZW4gdG8sIHNvIG5ldmVyIGhhcyBhbnkgZGlydHkKKwkgKiBjYWNoZSBsaW5lcywgYW5kIHRoZXJlZm9yZSBuZXZlciBuZWVkcyB0byBiZSBmbHVzaGVkLgorCSAqLworCWlmIChwYWdlID09IFpFUk9fUEFHRSgwKSkKKwkJcmV0dXJuOworCisJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKKworCS8qIEZsdXNoIHRoaXMgcGFnZSBpZiB0aGVyZSBhcmUgYWxpYXNlcy4gKi8KKwlpZiAobWFwcGluZyAmJiAhbWFwcGluZ19tYXBwZWQobWFwcGluZykpIHsKKwkJY2xlYXJfYml0KFBHX2RjYWNoZV9jbGVhbiwgJnBhZ2UtPmZsYWdzKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOworCisJCV9fZmx1c2hfZGNhY2hlX2FsbChzdGFydCwgc3RhcnQgKyBQQUdFX1NJWkUpOworCQlpZiAobWFwcGluZykKKwkJCWZsdXNoX2FsaWFzZXMobWFwcGluZywgIHBhZ2UpOworCQlzZXRfYml0KFBHX2RjYWNoZV9jbGVhbiwgJnBhZ2UtPmZsYWdzKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGZsdXNoX2RjYWNoZV9wYWdlKTsKKwordm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGUpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKCpwdGUpOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJaWYgKCFwZm5fdmFsaWQocGZuKSkKKwkJcmV0dXJuOworCisJLyoKKwkqIFRoZSB6ZXJvIHBhZ2UgaXMgbmV2ZXIgd3JpdHRlbiB0bywgc28gbmV2ZXIgaGFzIGFueSBkaXJ0eQorCSogY2FjaGUgbGluZXMsIGFuZCB0aGVyZWZvcmUgbmV2ZXIgbmVlZHMgdG8gYmUgZmx1c2hlZC4KKwkqLworCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCWlmIChwYWdlID09IFpFUk9fUEFHRSgwKSkKKwkJcmV0dXJuOworCisJaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkgJiYKKwkgICAgICF0ZXN0X2FuZF9zZXRfYml0KFBHX2RjYWNoZV9jbGVhbiwgJnBhZ2UtPmZsYWdzKSkgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZV90b192aXJ0KHBhZ2UpOworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKworCQlfX2ZsdXNoX2RjYWNoZShzdGFydCwgc3RhcnQgKyBQQUdFX1NJWkUpOworCisJCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CisJCWlmIChtYXBwaW5nKQorCQkJZmx1c2hfYWxpYXNlcyhtYXBwaW5nLCBwYWdlKTsKKwl9Cit9CisKK3ZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdnRvLCB2b2lkICp2ZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwKKwkJICAgIHN0cnVjdCBwYWdlICp0bykKK3sKKwlfX2ZsdXNoX2RjYWNoZSh2YWRkciwgdmFkZHIgKyBQQUdFX1NJWkUpOworCWNvcHlfcGFnZSh2dG8sIHZmcm9tKTsKKwlfX2ZsdXNoX2RjYWNoZSgodW5zaWduZWQgbG9uZyl2dG8sICh1bnNpZ25lZCBsb25nKXZ0byArIFBBR0VfU0laRSk7Cit9CisKK3ZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCV9fZmx1c2hfZGNhY2hlKHZhZGRyLCB2YWRkciArIFBBR0VfU0laRSk7CisJY2xlYXJfcGFnZShhZGRyKTsKKwlfX2ZsdXNoX2RjYWNoZSgodW5zaWduZWQgbG9uZylhZGRyLCAodW5zaWduZWQgbG9uZylhZGRyICsgUEFHRV9TSVpFKTsKK30KKwordm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXVuc2lnbmVkIGxvbmcgdXNlcl92YWRkciwKKwkJCXZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgbGVuKQoreworCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB1c2VyX3ZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7CisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworCV9fZmx1c2hfZGNhY2hlKCh1bnNpZ25lZCBsb25nKXNyYywgKHVuc2lnbmVkIGxvbmcpc3JjICsgbGVuKTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCisJCV9fZmx1c2hfaWNhY2hlKCh1bnNpZ25lZCBsb25nKXNyYywgKHVuc2lnbmVkIGxvbmcpc3JjICsgbGVuKTsKK30KKwordm9pZCBjb3B5X3RvX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQl1bnNpZ25lZCBsb25nIHVzZXJfdmFkZHIsCisJCQl2b2lkICpkc3QsIHZvaWQgKnNyYywgaW50IGxlbikKK3sKKwlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdXNlcl92YWRkciwgcGFnZV90b19wZm4ocGFnZSkpOworCW1lbWNweShkc3QsIHNyYywgbGVuKTsKKwlfX2ZsdXNoX2RjYWNoZSgodW5zaWduZWQgbG9uZylkc3QsICh1bnNpZ25lZCBsb25nKWRzdCArIGxlbik7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQorCQlfX2ZsdXNoX2ljYWNoZSgodW5zaWduZWQgbG9uZylkc3QsICh1bnNpZ25lZCBsb25nKWRzdCArIGxlbik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL25pb3MyL21tL2RtYS1tYXBwaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1ZGE3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vZG1hLW1hcHBpbmcuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICoKKyAqIEJhc2VkIG9uIERNQSBjb2RlIGZyb20gTUlQUy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworCit2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApCit7CisJdm9pZCAqcmV0OworCisJLyogaWdub3JlIHJlZ2lvbiBzcGVjaWZpZXJzICovCisJZ2ZwICY9IH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSk7CisKKwkvKiBvcHRpbWl6ZWQgcGFnZSBjbGVhcmluZyAqLworCWdmcCB8PSBfX0dGUF9aRVJPOworCisJaWYgKGRldiA9PSBOVUxMIHx8IChkZXYtPmNvaGVyZW50X2RtYV9tYXNrIDwgMHhmZmZmZmZmZikpCisJCWdmcCB8PSBHRlBfRE1BOworCisJcmV0ID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhnZnAsIGdldF9vcmRlcihzaXplKSk7CisJaWYgKHJldCAhPSBOVUxMKSB7CisJCSpkbWFfaGFuZGxlID0gdmlydF90b19waHlzKHJldCk7CisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZykgcmV0LAorCQkJKHVuc2lnbmVkIGxvbmcpIHJldCArIHNpemUpOworCQlyZXQgPSBVTkNBQ19BRERSKHJldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZG1hX2FsbG9jX2NvaGVyZW50KTsKKwordm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwKKwkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgQ0FDX0FERFIoKHVuc2lnbmVkIGxvbmcpIHZhZGRyKTsKKworCWZyZWVfcGFnZXMoYWRkciwgZ2V0X29yZGVyKHNpemUpKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX2ZyZWVfY29oZXJlbnQpOworCitpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludCBpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJZm9yX2VhY2hfc2coc2csIHNnLCBuZW50cywgaSkgeworCQl2b2lkICphZGRyOworCisJCWFkZHIgPSBzZ192aXJ0KHNnKTsKKwkJaWYgKGFkZHIpIHsKKwkJCV9fZG1hX3N5bmNfZm9yX2RldmljZShhZGRyLCBzZy0+bGVuZ3RoLCBkaXJlY3Rpb24pOworCQkJc2ctPmRtYV9hZGRyZXNzID0gc2dfcGh5cyhzZyk7CisJCX0KKwl9CisKKwlyZXR1cm4gbmVudHM7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2cpOworCitkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXZvaWQgKmFkZHI7CisKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisKKwlhZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0OworCV9fZG1hX3N5bmNfZm9yX2RldmljZShhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworCisJcmV0dXJuIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKK30KK0VYUE9SVF9TWU1CT0woZG1hX21hcF9wYWdlKTsKKwordm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAorCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKworCV9fZG1hX3N5bmNfZm9yX2NwdShwaHlzX3RvX3ZpcnQoZG1hX2FkZHJlc3MpLCBzaXplLCBkaXJlY3Rpb24pOworfQorRVhQT1JUX1NZTUJPTChkbWFfdW5tYXBfcGFnZSk7CisKK3ZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5od2VudHJpZXMsCisJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXZvaWQgKmFkZHI7CisJaW50IGk7CisKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisKKwlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3NnKHNnLCBzZywgbmh3ZW50cmllcywgaSkgeworCQlhZGRyID0gc2dfdmlydChzZyk7CisJCWlmIChhZGRyKQorCQkJX19kbWFfc3luY19mb3JfY3B1KGFkZHIsIHNnLT5sZW5ndGgsIGRpcmVjdGlvbik7CisJfQorfQorRVhQT1JUX1NZTUJPTChkbWFfdW5tYXBfc2cpOworCit2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKworCV9fZG1hX3N5bmNfZm9yX2NwdShwaHlzX3RvX3ZpcnQoZG1hX2hhbmRsZSksIHNpemUsIGRpcmVjdGlvbik7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KTsKKwordm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKworCV9fZG1hX3N5bmNfZm9yX2RldmljZShwaHlzX3RvX3ZpcnQoZG1hX2hhbmRsZSksIHNpemUsIGRpcmVjdGlvbik7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKTsKKwordm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJX19kbWFfc3luY19mb3JfY3B1KHBoeXNfdG9fdmlydChkbWFfaGFuZGxlKSwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpOworCit2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisKKwlfX2RtYV9zeW5jX2Zvcl9kZXZpY2UocGh5c190b192aXJ0KGRtYV9oYW5kbGUpLCBzaXplLCBkaXJlY3Rpb24pOworfQorRVhQT1JUX1NZTUJPTChkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSk7CisKK3ZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludCBpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJLyogTWFrZSBzdXJlIHRoYXQgZ2NjIGRvZXNuJ3QgbGVhdmUgdGhlIGVtcHR5IGxvb3AgYm9keS4gICovCisJZm9yX2VhY2hfc2coc2csIHNnLCBuZWxlbXMsIGkpCisJCV9fZG1hX3N5bmNfZm9yX2NwdShzZ192aXJ0KHNnKSwgc2ctPmxlbmd0aCwgZGlyZWN0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2dfZm9yX2NwdSk7CisKK3ZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludCBpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJLyogTWFrZSBzdXJlIHRoYXQgZ2NjIGRvZXNuJ3QgbGVhdmUgdGhlIGVtcHR5IGxvb3AgYm9keS4gICovCisJZm9yX2VhY2hfc2coc2csIHNnLCBuZWxlbXMsIGkpCisJCV9fZG1hX3N5bmNfZm9yX2RldmljZShzZ192aXJ0KHNnKSwgc2ctPmxlbmd0aCwgZGlyZWN0aW9uKTsKKworfQorRVhQT1JUX1NZTUJPTChkbWFfc3luY19zZ19mb3JfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vZXh0YWJsZS5jIGIvYXJjaC9uaW9zMi9tbS9leHRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyZmM1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vZXh0YWJsZS5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCitpbnQgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpeHVwOworCisJZml4dXAgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5lYSk7CisJaWYgKGZpeHVwKSB7CisJCXJlZ3MtPmVhID0gZml4dXAtPmZpeHVwOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vZmF1bHQuYyBiL2FyY2gvbmlvczIvbW0vZmF1bHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWEwYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9mYXVsdC5jCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqICAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICoKKyAqIGJhc2VkIG9uIGFyY2gvbWlwcy9tbS9mYXVsdC5jIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFJhbGYgQmFlY2hsZQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKworI2RlZmluZSBFWENfU1VQRVJWX0lOU05fQUNDRVNTCTkgIC8qIFN1cGVydmlzb3Igb25seSBpbnN0cnVjdGlvbiBhZGRyZXNzICovCisjZGVmaW5lIEVYQ19TVVBFUlZfREFUQV9BQ0NFU1MJMTEgLyogU3VwZXJ2aXNvciBvbmx5IGRhdGEgYWRkcmVzcyAqLworI2RlZmluZSBFWENfWF9QUk9URUNUSU9OX0ZBVUxUCTEzIC8qIFRMQiBwZXJtaXNzaW9uIHZpb2xhdGlvbiAoeCkgKi8KKyNkZWZpbmUgRVhDX1JfUFJPVEVDVElPTl9GQVVMVAkxNCAvKiBUTEIgcGVybWlzc2lvbiB2aW9sYXRpb24gKHIpICovCisjZGVmaW5lIEVYQ19XX1BST1RFQ1RJT05fRkFVTFQJMTUgLyogVExCIHBlcm1pc3Npb24gdmlvbGF0aW9uICh3KSAqLworCisvKgorICogVGhpcyByb3V0aW5lIGhhbmRsZXMgcGFnZSBmYXVsdHMuICBJdCBkZXRlcm1pbmVzIHRoZSBhZGRyZXNzLAorICogYW5kIHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBwYXNzZXMgaXQgb2ZmIHRvIG9uZSBvZiB0aGUgYXBwcm9wcmlhdGUKKyAqIHJvdXRpbmVzLgorICovCithc21saW5rYWdlIHZvaWQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBjYXVzZSwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07CisJaW50IGNvZGUgPSBTRUdWX01BUEVSUjsKKwlpbnQgZmF1bHQ7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKworCWNhdXNlID4+PSAyOworCisJLyogUmVzdGFydCB0aGUgaW5zdHJ1Y3Rpb24gKi8KKwlyZWdzLT5lYSAtPSA0OworCisJLyoKKwkgKiBXZSBmYXVsdC1pbiBrZXJuZWwtc3BhY2UgdmlydHVhbCBtZW1vcnkgb24tZGVtYW5kLiBUaGUKKwkgKiAncmVmZXJlbmNlJyBwYWdlIHRhYmxlIGlzIGluaXRfbW0ucGdkLgorCSAqCisJICogTk9URSEgV2UgTVVTVCBOT1QgdGFrZSBhbnkgbG9ja3MgZm9yIHRoaXMgY2FzZS4gV2UgbWF5CisJICogYmUgaW4gYW4gaW50ZXJydXB0IG9yIGEgY3JpdGljYWwgcmVnaW9uLCBhbmQgc2hvdWxkCisJICogb25seSBjb3B5IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBtYXN0ZXIgcGFnZSB0YWJsZSwKKwkgKiBub3RoaW5nIG1vcmUuCisJICovCisJaWYgKHVubGlrZWx5KGFkZHJlc3MgPj0gVk1BTExPQ19TVEFSVCAmJiBhZGRyZXNzIDw9IFZNQUxMT0NfRU5EKSkgeworCQlpZiAodXNlcl9tb2RlKHJlZ3MpKQorCQkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKKwkJZWxzZQorCQkJZ290byB2bWFsbG9jX2ZhdWx0OworCX0KKworCWlmICh1bmxpa2VseShhZGRyZXNzID49IFRBU0tfU0laRSkpCisJCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7CisKKwkvKgorCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCBvciBoYXZlIG5vIHVzZXIKKwkgKiBjb250ZXh0LCB3ZSBtdXN0IG5vdCB0YWtlIHRoZSBmYXVsdC4uCisJICovCisJaWYgKGluX2F0b21pYygpIHx8ICFtbSkKKwkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKKworCWlmICh1c2VyX21vZGUocmVncykpCisJCWZsYWdzIHw9IEZBVUxUX0ZMQUdfVVNFUjsKKworCWlmICghZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpIHsKKwkJaWYgKCF1c2VyX21vZGUocmVncykgJiYgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPmVhKSkKKwkJCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7CisJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl9CisKKwl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcmVzcyk7CisJaWYgKCF2bWEpCisJCWdvdG8gYmFkX2FyZWE7CisJaWYgKHZtYS0+dm1fc3RhcnQgPD0gYWRkcmVzcykKKwkJZ290byBnb29kX2FyZWE7CisJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpCisJCWdvdG8gYmFkX2FyZWE7CisJaWYgKGV4cGFuZF9zdGFjayh2bWEsIGFkZHJlc3MpKQorCQlnb3RvIGJhZF9hcmVhOworLyoKKyAqIE9rLCB3ZSBoYXZlIGEgZ29vZCB2bV9hcmVhIGZvciB0aGlzIG1lbW9yeSBhY2Nlc3MsIHNvCisgKiB3ZSBjYW4gaGFuZGxlIGl0Li4KKyAqLworZ29vZF9hcmVhOgorCWNvZGUgPSBTRUdWX0FDQ0VSUjsKKworCXN3aXRjaCAoY2F1c2UpIHsKKwljYXNlIEVYQ19TVVBFUlZfSU5TTl9BQ0NFU1M6CisJCWdvdG8gYmFkX2FyZWE7CisJY2FzZSBFWENfU1VQRVJWX0RBVEFfQUNDRVNTOgorCQlnb3RvIGJhZF9hcmVhOworCWNhc2UgRVhDX1hfUFJPVEVDVElPTl9GQVVMVDoKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpKQorCQkJZ290byBiYWRfYXJlYTsKKwkJYnJlYWs7CisJY2FzZSBFWENfUl9QUk9URUNUSU9OX0ZBVUxUOgorCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkpCisJCQlnb3RvIGJhZF9hcmVhOworCQlicmVhazsKKwljYXNlIEVYQ19XX1BST1RFQ1RJT05fRkFVTFQ6CisJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCisJCQlnb3RvIGJhZF9hcmVhOworCQlmbGFncyA9IEZBVUxUX0ZMQUdfV1JJVEU7CisJCWJyZWFrOworCX0KKworc3Vydml2ZToKKwkvKgorCSAqIElmIGZvciBhbnkgcmVhc29uIGF0IGFsbCB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGZhdWx0LAorCSAqIG1ha2Ugc3VyZSB3ZSBleGl0IGdyYWNlZnVsbHkgcmF0aGVyIHRoYW4gZW5kbGVzc2x5IHJlZG8KKwkgKiB0aGUgZmF1bHQuCisJICovCisJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgZmxhZ3MpOworCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgeworCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCisJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQorCQkJZ290byBkb19zaWdidXM7CisJCUJVRygpOworCX0KKwlpZiAoZmF1bHQgJiBWTV9GQVVMVF9NQUpPUikKKwkJdHNrLT5tYWpfZmx0Kys7CisJZWxzZQorCQl0c2stPm1pbl9mbHQrKzsKKworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuOworCisvKgorICogU29tZXRoaW5nIHRyaWVkIHRvIGFjY2VzcyBtZW1vcnkgdGhhdCBpc24ndCBpbiBvdXIgbWVtb3J5IG1hcC4uCisgKiBGaXggaXQsIGJ1dCBjaGVjayBpZiBpdCdzIGtlcm5lbCBvciB1c2VyIGZpcnN0Li4KKyAqLworYmFkX2FyZWE6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKworYmFkX2FyZWFfbm9zZW1hcGhvcmU6CisJLyogVXNlciBtb2RlIGFjY2Vzc2VzIGp1c3QgY2F1c2UgYSBTSUdTRUdWICovCisJaWYgKHVzZXJfbW9kZShyZWdzKSkgeworCQlwcl9hbGVydCgiJXM6IHVuaGFuZGxlZCBwYWdlIGZhdWx0ICglZCkgYXQgMHglMDhseCwgIgorCQkJImNhdXNlICVsZFxuIiwgY3VycmVudC0+Y29tbSwgU0lHU0VHViwgYWRkcmVzcywgY2F1c2UpOworCQlzaG93X3JlZ3MocmVncyk7CisJCV9leGNlcHRpb24oU0lHU0VHViwgcmVncywgY29kZSwgYWRkcmVzcyk7CisJCXJldHVybjsKKwl9CisKK25vX2NvbnRleHQ6CisJLyogQXJlIHdlIHByZXBhcmVkIHRvIGhhbmRsZSB0aGlzIGtlcm5lbCBmYXVsdD8gKi8KKwlpZiAoZml4dXBfZXhjZXB0aW9uKHJlZ3MpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE9vcHMuIFRoZSBrZXJuZWwgdHJpZWQgdG8gYWNjZXNzIHNvbWUgYmFkIHBhZ2UuIFdlJ2xsIGhhdmUgdG8KKwkgKiB0ZXJtaW5hdGUgdGhpbmdzIHdpdGggZXh0cmVtZSBwcmVqdWRpY2UuCisJICovCisJYnVzdF9zcGlubG9ja3MoMSk7CisKKwlwcl9hbGVydCgiVW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgJXMgYXQgdmlydHVhbCBhZGRyZXNzICUwOGx4IiwKKwkJYWRkcmVzcyA8IFBBR0VfU0laRSA/ICJOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UiIDoKKwkJInBhZ2luZyByZXF1ZXN0IiwgYWRkcmVzcyk7CisJcHJfYWxlcnQoImVhID0gJTA4bHgsIHJhID0gJTA4bHgsIGNhdXNlID0gJWxkXG4iLCByZWdzLT5lYSwgcmVncy0+cmEsCisJCWNhdXNlKTsKKwlwYW5pYygiT29wcyIpOworCXJldHVybjsKKworLyoKKyAqIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBzb21lIG90aGVyIHRoaW5nIGhhcHBlbmVkIHRvIHVzIHRoYXQgbWFkZQorICogdXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUgcGFnZSBmYXVsdCBncmFjZWZ1bGx5LgorICovCitvdXRfb2ZfbWVtb3J5OgorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJaWYgKGlzX2dsb2JhbF9pbml0KHRzaykpIHsKKwkJeWllbGQoKTsKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlnb3RvIHN1cnZpdmU7CisJfQorCWlmICghdXNlcl9tb2RlKHJlZ3MpKQorCQlnb3RvIG5vX2NvbnRleHQ7CisJcGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTsKKwlyZXR1cm47CisKK2RvX3NpZ2J1czoKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJLyogS2VybmVsIG1vZGU/IEhhbmRsZSBleGNlcHRpb25zIG9yIGRpZSAqLworCWlmICghdXNlcl9tb2RlKHJlZ3MpKQorCQlnb3RvIG5vX2NvbnRleHQ7CisKKwlfZXhjZXB0aW9uKFNJR0JVUywgcmVncywgQlVTX0FEUkVSUiwgYWRkcmVzcyk7CisJcmV0dXJuOworCit2bWFsbG9jX2ZhdWx0OgorCXsKKwkJLyoKKwkJICogU3luY2hyb25pemUgdGhpcyB0YXNrJ3MgdG9wIGxldmVsIHBhZ2UtdGFibGUKKwkJICogd2l0aCB0aGUgJ3JlZmVyZW5jZScgcGFnZSB0YWJsZS4KKwkJICoKKwkJICogRG8gX25vdF8gdXNlICJ0c2siIGhlcmUuIFdlIG1pZ2h0IGJlIGluc2lkZQorCQkgKiBhbiBpbnRlcnJ1cHQgaW4gdGhlIG1pZGRsZSBvZiBhIHRhc2sgc3dpdGNoLi4KKwkJICovCisJCWludCBvZmZzZXQgPSBwZ2RfaW5kZXgoYWRkcmVzcyk7CisJCXBnZF90ICpwZ2QsICpwZ2RfazsKKwkJcHVkX3QgKnB1ZCwgKnB1ZF9rOworCQlwbWRfdCAqcG1kLCAqcG1kX2s7CisJCXB0ZV90ICpwdGVfazsKKworCQlwZ2QgPSBwZ2RfY3VycmVudCArIG9mZnNldDsKKwkJcGdkX2sgPSBpbml0X21tLnBnZCArIG9mZnNldDsKKworCQlpZiAoIXBnZF9wcmVzZW50KCpwZ2RfaykpCisJCQlnb3RvIG5vX2NvbnRleHQ7CisJCXNldF9wZ2QocGdkLCAqcGdkX2spOworCisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwkJcHVkX2sgPSBwdWRfb2Zmc2V0KHBnZF9rLCBhZGRyZXNzKTsKKwkJaWYgKCFwdWRfcHJlc2VudCgqcHVkX2spKQorCQkJZ290byBub19jb250ZXh0OworCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CisJCXBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcmVzcyk7CisJCWlmICghcG1kX3ByZXNlbnQoKnBtZF9rKSkKKwkJCWdvdG8gbm9fY29udGV4dDsKKwkJc2V0X3BtZChwbWQsICpwbWRfayk7CisKKwkJcHRlX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfaywgYWRkcmVzcyk7CisJCWlmICghcHRlX3ByZXNlbnQoKnB0ZV9rKSkKKwkJCWdvdG8gbm9fY29udGV4dDsKKworCQlmbHVzaF90bGJfb25lKGFkZHJlc3MpOworCQlyZXR1cm47CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9pbml0LmMgYi9hcmNoL25pb3MyL21tL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzVjNzVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9pbml0LmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICogICBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqCisgKiBiYXNlZCBvbiBhcmNoL202OGsvbW0vaW5pdC5jCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2NwdWluZm8uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKK3BnZF90ICpwZ2RfY3VycmVudDsKKworLyoKKyAqIHBhZ2luZ19pbml0KCkgY29udGludWVzIHRoZSB2aXJ0dWFsIG1lbW9yeSBlbnZpcm9ubWVudCBzZXR1cCB3aGljaAorICogd2FzIGJlZ3VuIGJ5IHRoZSBjb2RlIGluIGFyY2gvaGVhZC5TLgorICogVGhlIHBhcmFtZXRlcnMgYXJlIHBvaW50ZXJzIHRvIHdoZXJlIHRvIHN0aWNrIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nCisgKiBhZGRyZXNzZXMgb2YgYXZhaWxhYmxlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeS4KKyAqLwordm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKKworCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOworCisJcGFnZXRhYmxlX2luaXQoKTsKKwlwZ2RfY3VycmVudCA9IHN3YXBwZXJfcGdfZGlyOworCisJem9uZXNfc2l6ZVtaT05FX05PUk1BTF0gPSBtYXhfbWFwbnI7CisKKwkvKiBwYXNzIHRoZSBtZW1vcnkgZnJvbSB0aGUgYm9vdG1lbSBhbGxvY2F0b3IgdG8gdGhlIG1haW4gYWxsb2NhdG9yICovCisJZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7CisKKwlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZW1wdHlfemVyb19wYWdlLAorCQkJKHVuc2lnbmVkIGxvbmcpZW1wdHlfemVyb19wYWdlICsgUEFHRV9TSVpFKTsKK30KKwordm9pZCBfX2luaXQgbWVtX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZF9tZW0gICA9IG1lbW9yeV9lbmQ7IC8qIHRoaXMgbXVzdCBub3QgaW5jbHVkZQorCQkJCQkJa2VybmVsIHN0YWNrIGF0IHRvcCAqLworCisJcHJfZGVidWcoIm1lbV9pbml0OiBzdGFydD0lbHgsIGVuZD0lbHhcbiIsIG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZCk7CisKKwllbmRfbWVtICY9IFBBR0VfTUFTSzsKKwloaWdoX21lbW9yeSA9IF9fdmEoZW5kX21lbSk7CisKKwkvKiB0aGlzIHdpbGwgcHV0IGFsbCBtZW1vcnkgb250byB0aGUgZnJlZWxpc3RzICovCisJZnJlZV9hbGxfYm9vdG1lbSgpOworCW1lbV9pbml0X3ByaW50X2luZm8oTlVMTCk7Cit9CisKK3ZvaWQgX19pbml0IG1tdV9pbml0KHZvaWQpCit7CisJZmx1c2hfdGxiX2FsbCgpOworfQorCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECit2b2lkIF9faW5pdCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJZnJlZV9yZXNlcnZlZF9hcmVhKCh2b2lkICopc3RhcnQsICh2b2lkICopZW5kLCAtMSwgImluaXRyZCIpOworfQorI2VuZGlmCisKK3ZvaWQgX19pbml0X3JlZm9rIGZyZWVfaW5pdG1lbSh2b2lkKQoreworCWZyZWVfaW5pdG1lbV9kZWZhdWx0KC0xKTsKK30KKworI2RlZmluZSBfX3BhZ2VfYWxpZ25lZChvcmRlcikgX19hbGlnbmVkKFBBR0VfU0laRSA8PCAob3JkZXIpKQorcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXSBfX3BhZ2VfYWxpZ25lZChQR0RfT1JERVIpOworcHRlX3QgaW52YWxpZF9wdGVfdGFibGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZChQVEVfT1JERVIpOworc3RhdGljIHN0cnVjdCBwYWdlICprdXNlcl9wYWdlWzFdOworCitzdGF0aWMgaW50IGFsbG9jX2t1c2VyX3BhZ2Uodm9pZCkKK3sKKwlleHRlcm4gY2hhciBfX2t1c2VyX2hlbHBlcl9zdGFydFtdLCBfX2t1c2VyX2hlbHBlcl9lbmRbXTsKKwlpbnQga3VzZXJfc3ogPSBfX2t1c2VyX2hlbHBlcl9lbmQgLSBfX2t1c2VyX2hlbHBlcl9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHZwYWdlOworCisJdnBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CisJaWYgKCF2cGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBDb3B5IGt1c2VyIGhlbHBlcnMgKi8KKwltZW1jcHkoKHZvaWQgKil2cGFnZSwgX19rdXNlcl9oZWxwZXJfc3RhcnQsIGt1c2VyX3N6KTsKKworCWZsdXNoX2ljYWNoZV9yYW5nZSh2cGFnZSwgdnBhZ2UgKyBLVVNFUl9TSVpFKTsKKwlrdXNlcl9wYWdlWzBdID0gdmlydF90b19wYWdlKHZwYWdlKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChhbGxvY19rdXNlcl9wYWdlKTsKKworaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgdXNlc19pbnRlcnApCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlpbnQgcmV0OworCisJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKworCS8qIE1hcCBrdXNlciBoZWxwZXJzIHRvIHVzZXIgc3BhY2UgYWRkcmVzcyAqLworCXJldCA9IGluc3RhbGxfc3BlY2lhbF9tYXBwaW5nKG1tLCBLVVNFUl9CQVNFLCBLVVNFUl9TSVpFLAorCQkJCSAgICAgIFZNX1JFQUQgfCBWTV9FWEVDIHwgVk1fTUFZUkVBRCB8CisJCQkJICAgICAgVk1fTUFZRVhFQywga3VzZXJfcGFnZSk7CisKKwl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKworCXJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNoYXIgKmFyY2hfdm1hX25hbWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuICh2bWEtPnZtX3N0YXJ0ID09IEtVU0VSX0JBU0UpID8gIltrdXNlcl0iIDogTlVMTDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vaW9yZW1hcC5jIGIvYXJjaC9uaW9zMi9tbS9pb3JlbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyODE3NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vaW9yZW1hcC5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqICAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtYXBfYXJlYV9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCisJCQkJdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwl1bnNpZ25lZCBsb25nIHBmbjsKKwlwZ3Byb3RfdCBwZ3Byb3QgPSBfX3BncHJvdChfUEFHRV9HTE9CQUwgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRAorCQkJCXwgX1BBR0VfV1JJVEUgfCBmbGFncyk7CisKKwlhZGRyZXNzICY9IH5QTURfTUFTSzsKKwllbmQgPSBhZGRyZXNzICsgc2l6ZTsKKwlpZiAoZW5kID4gUE1EX1NJWkUpCisJCWVuZCA9IFBNRF9TSVpFOworCWlmIChhZGRyZXNzID49IGVuZCkKKwkJQlVHKCk7CisJcGZuID0gUEZOX0RPV04ocGh5c19hZGRyKTsKKwlkbyB7CisJCWlmICghcHRlX25vbmUoKnB0ZSkpIHsKKwkJCXByX2VycigicmVtYXBfYXJlYV9wdGU6IHBhZ2UgYWxyZWFkeSBleGlzdHNcbiIpOworCQkJQlVHKCk7CisJCX0KKwkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBwZ3Byb3QpKTsKKwkJYWRkcmVzcyArPSBQQUdFX1NJWkU7CisJCXBmbisrOworCQlwdGUrKzsKKwl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJlbWFwX2FyZWFfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAorCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisKKwlhZGRyZXNzICY9IH5QR0RJUl9NQVNLOworCWVuZCA9IGFkZHJlc3MgKyBzaXplOworCWlmIChlbmQgPiBQR0RJUl9TSVpFKQorCQllbmQgPSBQR0RJUl9TSVpFOworCXBoeXNfYWRkciAtPSBhZGRyZXNzOworCWlmIChhZGRyZXNzID49IGVuZCkKKwkJQlVHKCk7CisJZG8geworCQlwdGVfdCAqcHRlID0gcHRlX2FsbG9jX2tlcm5lbChwbWQsIGFkZHJlc3MpOworCisJCWlmICghcHRlKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXJlbWFwX2FyZWFfcHRlKHB0ZSwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywgYWRkcmVzcyArIHBoeXNfYWRkciwKKwkJCWZsYWdzKTsKKwkJYWRkcmVzcyA9IChhZGRyZXNzICsgUE1EX1NJWkUpICYgUE1EX01BU0s7CisJCXBtZCsrOworCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCisJCQkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWludCBlcnJvcjsKKwlwZ2RfdCAqZGlyOworCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkcmVzcyArIHNpemU7CisKKwlwaHlzX2FkZHIgLT0gYWRkcmVzczsKKwlkaXIgPSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKTsKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlpZiAoYWRkcmVzcyA+PSBlbmQpCisJCUJVRygpOworCWRvIHsKKwkJcHVkX3QgKnB1ZDsKKwkJcG1kX3QgKnBtZDsKKworCQllcnJvciA9IC1FTk9NRU07CisJCXB1ZCA9IHB1ZF9hbGxvYygmaW5pdF9tbSwgZGlyLCBhZGRyZXNzKTsKKwkJaWYgKCFwdWQpCisJCQlicmVhazsKKwkJcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwdWQsIGFkZHJlc3MpOworCQlpZiAoIXBtZCkKKwkJCWJyZWFrOworCQlpZiAocmVtYXBfYXJlYV9wbWQocG1kLCBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzLAorCQkJcGh5c19hZGRyICsgYWRkcmVzcywgZmxhZ3MpKQorCQkJYnJlYWs7CisJCWVycm9yID0gMDsKKwkJYWRkcmVzcyA9IChhZGRyZXNzICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOworCQlkaXIrKzsKKwl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7CisJZmx1c2hfdGxiX2FsbCgpOworCXJldHVybiBlcnJvcjsKK30KKworI2RlZmluZSBJU19NQVBQQUJMRV9VTkNBQ0hFQUJMRShhZGRyKSAoYWRkciA8IDB4MjAwMDAwMDBVTCkKKworLyoKKyAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCisgKi8KK3ZvaWQgX19pb21lbSAqX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQl1bnNpZ25lZCBsb25nIGNhY2hlZmxhZykKK3sKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyOworCXZvaWQgKmFkZHI7CisKKwkvKiBEb24ndCBhbGxvdyB3cmFwYXJvdW5kIG9yIHplcm8gc2l6ZSAqLworCWxhc3RfYWRkciA9IHBoeXNfYWRkciArIHNpemUgLSAxOworCisJaWYgKCFzaXplIHx8IGxhc3RfYWRkciA8IHBoeXNfYWRkcikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZyAqLworCWlmIChwaHlzX2FkZHIgPiBQSFlTX09GRlNFVCAmJiBwaHlzX2FkZHIgPCB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKSB7CisJCWNoYXIgKnRfYWRkciwgKnRfZW5kOworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQl0X2FkZHIgPSBfX3ZhKHBoeXNfYWRkcik7CisJCXRfZW5kID0gdF9hZGRyICsgKHNpemUgLSAxKTsKKwkJZm9yIChwYWdlID0gdmlydF90b19wYWdlKHRfYWRkcik7CisJCQlwYWdlIDw9IHZpcnRfdG9fcGFnZSh0X2VuZCk7IHBhZ2UrKykKKwkJCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpKQorCQkJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogTWFwIHVuY2FjaGVkIG9iamVjdHMgaW4gdGhlIGxvdyBwYXJ0IG9mIGFkZHJlc3Mgc3BhY2UgdG8KKwkgKiBDT05GSUdfTklPUzJfSU9fUkVHSU9OX0JBU0UKKwkgKi8KKwlpZiAoSVNfTUFQUEFCTEVfVU5DQUNIRUFCTEUocGh5c19hZGRyKSAmJgorCSAgICBJU19NQVBQQUJMRV9VTkNBQ0hFQUJMRShsYXN0X2FkZHIpICYmCisJICAgICEoY2FjaGVmbGFnICYgX1BBR0VfQ0FDSEVEKSkKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoQ09ORklHX05JT1MyX0lPX1JFR0lPTl9CQVNFICsgcGh5c19hZGRyKTsKKworCS8qIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkICovCisJb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKKwlwaHlzX2FkZHIgJj0gUEFHRV9NQVNLOworCXNpemUgPSBQQUdFX0FMSUdOKGxhc3RfYWRkciArIDEpIC0gcGh5c19hZGRyOworCisJLyogT2ssIGdvIGZvciBpdCAqLworCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKTsKKwlpZiAoIWFyZWEpCisJCXJldHVybiBOVUxMOworCWFkZHIgPSBhcmVhLT5hZGRyOworCWlmIChyZW1hcF9hcmVhX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBhZGRyLCBwaHlzX2FkZHIsIHNpemUsCisJCWNhY2hlZmxhZykpIHsKKwkJdnVubWFwKGFkZHIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgKG9mZnNldCArIChjaGFyICopYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKF9faW9yZW1hcCk7CisKKy8qCisgKiBfX2lvdW5tYXAgdW5tYXBzIG5lYXJseSBldmVyeXRoaW5nLCBzbyBiZSBjYXJlZnVsCisgKiBpdCBkb2Vzbid0IGZyZWUgY3VycmVudGx5IHBvaW50ZXIvcGFnZSB0YWJsZXMgYW55bW9yZSBidXQgaXQKKyAqIHdhc24ndCB1c2VkIGFueXdheSBhbmQgbWlnaHQgYmUgYWRkZWQgbGF0ZXIuCisgKi8KK3ZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlzdHJ1Y3Qgdm1fc3RydWN0ICpwOworCisJaWYgKCh1bnNpZ25lZCBsb25nKSBhZGRyID4gQ09ORklHX05JT1MyX0lPX1JFR0lPTl9CQVNFKQorCQlyZXR1cm47CisKKwlwID0gcmVtb3ZlX3ZtX2FyZWEoKHZvaWQgKikgKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpIGFkZHIpKTsKKwlpZiAoIXApCisJCXByX2VycigiaW91bm1hcDogYmFkIGFkZHJlc3MgJXBcbiIsIGFkZHIpOworCWtmcmVlKHApOworfQorRVhQT1JUX1NZTUJPTChfX2lvdW5tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9tbXVfY29udGV4dC5jIGIvYXJjaC9uaW9zMi9tbS9tbXVfY29udGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDZiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL21tL21tdV9jb250ZXh0LmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBNTVUgY29udGV4dCBoYW5kbGluZy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICogICBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKworLyogVGhlIHBpZHMgcG9zaXRpb24gYW5kIG1hc2sgaW4gY29udGV4dCAqLworI2RlZmluZSBQSURfU0hJRlQJMAorI2RlZmluZSBQSURfQklUUwkoY3B1aW5mby50bGJfcGlkX251bV9iaXRzKQorI2RlZmluZSBQSURfTUFTSwkoKDFVTCA8PCBQSURfQklUUykgLSAxKQorCisvKiBUaGUgdmVyc2lvbnMgcG9zaXRpb24gYW5kIG1hc2sgaW4gY29udGV4dCAqLworI2RlZmluZSBWRVJTSU9OX0JJVFMJKDMyIC0gUElEX0JJVFMpCisjZGVmaW5lIFZFUlNJT05fU0hJRlQJKFBJRF9TSElGVCArIFBJRF9CSVRTKQorI2RlZmluZSBWRVJTSU9OX01BU0sJKCgxVUwgPDwgVkVSU0lPTl9CSVRTKSAtIDEpCisKKy8qIFJldHVybiB0aGUgdmVyc2lvbiBwYXJ0IG9mIGEgY29udGV4dCAqLworI2RlZmluZSBDVFhfVkVSU0lPTihjKQkoKChjKSA+PiBWRVJTSU9OX1NISUZUKSAmIFZFUlNJT05fTUFTSykKKworLyogUmV0dXJuIHRoZSBwaWQgcGFydCBvZiBhIGNvbnRleHQgKi8KKyNkZWZpbmUgQ1RYX1BJRChjKQkoKChjKSA+PiBQSURfU0hJRlQpICYgUElEX01BU0spCisKKy8qIFZhbHVlIG9mIHRoZSBmaXJzdCBjb250ZXh0ICh2ZXJzaW9uIDEsIHBpZCAwKSAqLworI2RlZmluZSBGSVJTVF9DVFgJKCgxVUwgPDwgVkVSU0lPTl9TSElGVCkgfCAoMCA8PCBQSURfU0hJRlQpKQorCitzdGF0aWMgbW1fY29udGV4dF90IG5leHRfbW11X2NvbnRleHQ7CisKKy8qCisgKiBJbml0aWFsaXplIE1NVSBjb250ZXh0IG1hbmFnZW1lbnQgc3R1ZmYuCisgKi8KK3ZvaWQgX19pbml0IG1tdV9jb250ZXh0X2luaXQodm9pZCkKK3sKKwkvKiBXZSBuZWVkIHRvIHNldCB0aGlzIGhlcmUgYmVjYXVzZSB0aGUgdmFsdWUgZGVwZW5kcyBvbiBydW50aW1lIGRhdGEKKwkgKiBmcm9tIGNwdWluZm8gKi8KKwluZXh0X21tdV9jb250ZXh0ID0gRklSU1RfQ1RYOworfQorCisvKgorICogU2V0IG5ldyBjb250ZXh0IChwaWQpLCBrZWVwIHdheQorICovCitzdGF0aWMgdm9pZCBzZXRfY29udGV4dChtbV9jb250ZXh0X3QgY29udGV4dCkKK3sKKwlzZXRfbW11X3BpZChDVFhfUElEKGNvbnRleHQpKTsKK30KKworc3RhdGljIG1tX2NvbnRleHRfdCBnZXRfbmV3X2NvbnRleHQodm9pZCkKK3sKKwkvKiBSZXR1cm4gdGhlIG5leHQgcGlkICovCisJbmV4dF9tbXVfY29udGV4dCArPSAoMVVMIDw8IFBJRF9TSElGVCk7CisKKwkvKiBJZiB0aGUgcGlkIGZpZWxkIHdyYXBzIGFyb3VuZCB3ZSBpbmNyZWFzZSB0aGUgdmVyc2lvbiBhbmQKKwkgKiBmbHVzaCB0aGUgdGxiICovCisJaWYgKHVubGlrZWx5KENUWF9QSUQobmV4dF9tbXVfY29udGV4dCkgPT0gMCkpIHsKKwkJLyogVmVyc2lvbiBpcyBpbmNyZW1lbnRlZCBzaW5jZSB0aGUgcGlkIGluY3JlbWVudCBhYm92ZQorCQkgKiBvdmVyZmxvd3MgaW5mbyB2ZXJzaW9uICovCisJCWZsdXNoX2NhY2hlX2FsbCgpOworCQlmbHVzaF90bGJfYWxsKCk7CisJfQorCisJLyogSWYgdGhlIHZlcnNpb24gd3JhcHMgd2Ugc3RhcnQgb3ZlciB3aXRoIHRoZSBmaXJzdCBnZW5lcmF0aW9uLCB3ZSBkbworCSAqIG5vdCBuZWVkIHRvIGZsdXNoIHRoZSB0bGIgaGVyZSBzaW5jZSBpdCdzIGFsd2F5cyBkb25lIGFib3ZlICovCisJaWYgKHVubGlrZWx5KENUWF9WRVJTSU9OKG5leHRfbW11X2NvbnRleHQpID09IDApKQorCQluZXh0X21tdV9jb250ZXh0ID0gRklSU1RfQ1RYOworCisJcmV0dXJuIG5leHRfbW11X2NvbnRleHQ7Cit9CisKK3ZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBJZiB0aGUgcHJvY2VzcyBjb250ZXh0IHdlIGFyZSBzd2FwcGluZyBpbiBoYXMgYSBkaWZmZXJlbnQgY29udGV4dAorCSAqIGdlbmVyYXRpb24gdGhlbiB3ZSBoYXZlIGl0IHNob3VsZCBnZXQgYSBuZXcgZ2VuZXJhdGlvbi9waWQgKi8KKwlpZiAodW5saWtlbHkoQ1RYX1ZFUlNJT04obmV4dC0+Y29udGV4dCkgIT0KKwkJQ1RYX1ZFUlNJT04obmV4dF9tbXVfY29udGV4dCkpKQorCQluZXh0LT5jb250ZXh0ID0gZ2V0X25ld19jb250ZXh0KCk7CisKKwkvKiBTYXZlIHRoZSBjdXJyZW50IHBnZCBzbyB0aGUgZmFzdCB0bGIgaGFuZGxlciBjYW4gZmluZCBpdCAqLworCXBnZF9jdXJyZW50ID0gbmV4dC0+cGdkOworCisJLyogU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgKi8KKwlzZXRfY29udGV4dChuZXh0LT5jb250ZXh0KTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIEFmdGVyIHdlIGhhdmUgc2V0IGN1cnJlbnQtPm1tIHRvIGEgbmV3IHZhbHVlLCB0aGlzIGFjdGl2YXRlcworICogdGhlIGNvbnRleHQgZm9yIHRoZSBuZXcgbW0gc28gd2Ugc2VlIHRoZSBuZXcgbWFwcGluZ3MuCisgKi8KK3ZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKK3sKKwluZXh0LT5jb250ZXh0ID0gZ2V0X25ld19jb250ZXh0KCk7CisJc2V0X2NvbnRleHQobmV4dC0+Y29udGV4dCk7CisJcGdkX2N1cnJlbnQgPSBuZXh0LT5wZ2Q7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3BpZF9mcm9tX2NvbnRleHQobW1fY29udGV4dF90ICpjb250ZXh0KQoreworCXJldHVybiBDVFhfUElEKCgqY29udGV4dCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9wZ3RhYmxlLmMgYi9hcmNoL25pb3MyL21tL3BndGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWUyNGEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9wZ3RhYmxlLmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorCisvKiBwdGVhZGRyOgorICogICBwdGJhc2UgfCB2cG4qIHwgemVybworICogICAzMS0yMiAgfCAyMS0yIHwgMS0wCisgKgorICogICAqdnBuIGlzIHByZXNlcnZlZCBvbiBkb3VibGUgZmF1bHQKKyAqCisgKiB0bGJhY2M6CisgKiAgIElHICAgfCpmbGFnc3wgcGZuCisgKiAgIDMxLTI1fDI0LTIwIHwgMTktMAorICoKKyAqICAgKmNyd3hnCisgKgorICogdGxibWlzYzoKKyAqICAgcmVzdiAgfHdheSAgIHxyZCB8IHdlfHBpZCB8ZGJsfGJhZHxwZXJtfGQKKyAqICAgMzEtMjQgfDIzLTIwIHwxOSB8IDIwfDE3LTR8MyAgfDIgIHwxICAgfDAKKyAqCisgKi8KKworLyoKKyAqIEluaXRpYWxpemUgYSBuZXcgcGdkIC8gcG1kIHRhYmxlIHdpdGggaW52YWxpZCBwb2ludGVycy4KKyAqLworc3RhdGljIHZvaWQgcGdkX2luaXQocGdkX3QgKnBnZCkKK3sKKwl1bnNpZ25lZCBsb25nICpwID0gKHVuc2lnbmVkIGxvbmcgKikgcGdkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFVTRVJfUFRSU19QRVJfUEdEOyBpICs9IDgpIHsKKwkJcFtpICsgMF0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7CisJCXBbaSArIDFdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlOworCQlwW2kgKyAyXSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZTsKKwkJcFtpICsgM10gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7CisJCXBbaSArIDRdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlOworCQlwW2kgKyA1XSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZTsKKwkJcFtpICsgNl0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7CisJCXBbaSArIDddID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlOworCX0KK30KKworcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlwZ2RfdCAqcmV0LCAqaW5pdDsKKworCXJldCA9IChwZ2RfdCAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIFBHRF9PUkRFUik7CisJaWYgKHJldCkgeworCQlpbml0ID0gcGdkX29mZnNldCgmaW5pdF9tbSwgMFVMKTsKKwkJcGdkX2luaXQocmV0KTsKKwkJbWVtY3B5KHJldCArIFVTRVJfUFRSU19QRVJfUEdELCBpbml0ICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJCSAgICAgICAoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX2luaXQgcGFnZXRhYmxlX2luaXQodm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHRoZSBlbnRpcmUgcGdkLiAgKi8KKwlwZ2RfaW5pdChzd2FwcGVyX3BnX2Rpcik7CisJcGdkX2luaXQoc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BUUlNfUEVSX1BHRCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL3RsYi5jIGIvYXJjaC9uaW9zMi9tbS90bGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjEwMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS90bGIuYwpAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIE5pb3MyIFRMQiBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICogICBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCisjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2NwdWluZm8uaD4KKworI2RlZmluZSBUTEJfSU5ERVhfTUFTSwkJXAorCSgoKCgxVUwgPDwgKGNwdWluZm8udGxiX3B0cl9zeiAtIGNwdWluZm8udGxiX251bV93YXlzX2xvZzIpKSkgLSAxKSBcCisJCTw8IFBBR0VfU0hJRlQpCisKKy8qIFVzZWQgYXMgaWxsZWdhbCBQSFlTX0FERFIgZm9yIFRMQiBtYXBwaW5ncworICovCisjZGVmaW5lIE1BWF9QSFlTX0FERFIgMAorCitzdGF0aWMgdm9pZCBnZXRfbWlzY19hbmRfcGlkKHVuc2lnbmVkIGxvbmcgKm1pc2MsIHVuc2lnbmVkIGxvbmcgKnBpZCkKK3sKKwkqbWlzYyAgPSBSRENUTChDVExfVExCTUlTQyk7CisJKm1pc2MgJj0gKFRMQk1JU0NfUElEIHwgVExCTUlTQ19XQVkpOworCSpwaWQgID0gKm1pc2MgJiBUTEJNSVNDX1BJRDsKK30KKworLyoKKyAqIEFsbCBlbnRyaWVzIGNvbW1vbiB0byBhIG1tIHNoYXJlIGFuIGFzaWQuICBUbyBlZmZlY3RpdmVseSBmbHVzaCB0aGVzZQorICogZW50cmllcywgd2UganVzdCBidW1wIHRoZSBhc2lkLgorICovCit2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAoY3VycmVudC0+bW0gPT0gbW0pCisJCWZsdXNoX3RsYl9hbGwoKTsKKwllbHNlCisJCW1lbXNldCgmbW0tPmNvbnRleHQsIDAsIHNpemVvZihtbV9jb250ZXh0X3QpKTsKK30KKworLyoKKyAqIFRoaXMgb25lIGlzIG9ubHkgdXNlZCBmb3IgcGFnZXMgd2l0aCB0aGUgZ2xvYmFsIGJpdCBzZXQgc28gd2UgZG9uJ3QgY2FyZQorICogbXVjaCBhYm91dCB0aGUgQVNJRC4KKyAqLwordm9pZCBmbHVzaF90bGJfb25lX3BpZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbW11X3BpZCkKK3sKKwl1bnNpZ25lZCBpbnQgd2F5OworCXVuc2lnbmVkIGxvbmcgb3JnX21pc2MsIHBpZF9taXNjOworCisJcHJfZGVidWcoIkZsdXNoIHRsYi1lbnRyeSBmb3IgdmFkZHI9JSNseFxuIiwgYWRkcik7CisKKwkvKiByZW1lbWJlciBwaWQvd2F5IHVudGlsIHdlIHJldHVybi4gKi8KKwlnZXRfbWlzY19hbmRfcGlkKCZvcmdfbWlzYywgJnBpZF9taXNjKTsKKworCVdSQ1RMKENUTF9QVEVBRERSLCAoYWRkciA+PiBQQUdFX1NISUZUKSA8PCAyKTsKKworCWZvciAod2F5ID0gMDsgd2F5IDwgY3B1aW5mby50bGJfbnVtX3dheXM7IHdheSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgcHRlYWRkcjsKKwkJdW5zaWduZWQgbG9uZyB0bGJtaXNjOworCQl1bnNpZ25lZCBsb25nIHBpZDsKKworCQl0bGJtaXNjID0gcGlkX21pc2MgfCBUTEJNSVNDX1JEIHwgKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCVdSQ1RMKENUTF9UTEJNSVNDLCB0bGJtaXNjKTsKKwkJcHRlYWRkciA9IFJEQ1RMKENUTF9QVEVBRERSKTsKKwkJdGxibWlzYyA9IFJEQ1RMKENUTF9UTEJNSVNDKTsKKwkJcGlkID0gKHRsYm1pc2MgPj4gVExCTUlTQ19QSURfU0hJRlQpICYgVExCTUlTQ19QSURfTUFTSzsKKwkJaWYgKCgoKChwdGVhZGRyID4+IDIpICYgMHhmZmZmZikpID09IChhZGRyID4+IFBBR0VfU0hJRlQpKSAmJgorCQkJCXBpZCA9PSBtbXVfcGlkKSB7CisJCQl1bnNpZ25lZCBsb25nIHZhZGRyID0gQ09ORklHX05JT1MyX0lPX1JFR0lPTl9CQVNFICsKKwkJCQkoKFBBR0VfU0laRSAqIGNwdWluZm8udGxiX251bV9saW5lcykgKiB3YXkpICsKKwkJCQkoYWRkciAmIFRMQl9JTkRFWF9NQVNLKTsKKwkJCXByX2RlYnVnKCJGbHVzaCBlbnRyeSBieSB3cml0aW5nICUjbHggd2F5PSVkbCBwaWQ9JWxkXG4iLAorCQkJCXZhZGRyLCB3YXksIChwaWRfbWlzYyA+PiBUTEJNSVNDX1BJRF9TSElGVCkpOworCisJCQlXUkNUTChDVExfUFRFQUREUiwgKHZhZGRyID4+IDEyKSA8PCAyKTsKKwkJCXRsYm1pc2MgPSBwaWRfbWlzYyB8IFRMQk1JU0NfV0UgfAorCQkJCSh3YXkgPDwgVExCTUlTQ19XQVlfU0hJRlQpOworCQkJV1JDVEwoQ1RMX1RMQk1JU0MsIHRsYm1pc2MpOworCQkJV1JDVEwoQ1RMX1RMQkFDQywgKE1BWF9QSFlTX0FERFIgPj4gUEFHRV9TSElGVCkpOworCQl9CisJfQorCisJV1JDVEwoQ1RMX1RMQk1JU0MsIG9yZ19taXNjKTsKK30KKwordm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQl1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1tdV9waWQgPSBnZXRfcGlkX2Zyb21fY29udGV4dCgmdm1hLT52bV9tbS0+Y29udGV4dCk7CisKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJZmx1c2hfdGxiX29uZV9waWQoc3RhcnQsIG1tdV9waWQpOworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJfQorfQorCit2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCWZsdXNoX3RsYl9vbmUoc3RhcnQpOworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJfQorfQorCisvKgorICogVGhpcyBvbmUgaXMgb25seSB1c2VkIGZvciBwYWdlcyB3aXRoIHRoZSBnbG9iYWwgYml0IHNldCBzbyB3ZSBkb24ndCBjYXJlCisgKiBtdWNoIGFib3V0IHRoZSBBU0lELgorICovCit2b2lkIGZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGludCB3YXk7CisJdW5zaWduZWQgbG9uZyBvcmdfbWlzYywgcGlkX21pc2M7CisKKwlwcl9kZWJ1ZygiRmx1c2ggdGxiLWVudHJ5IGZvciB2YWRkcj0lI2x4XG4iLCBhZGRyKTsKKworCS8qIHJlbWVtYmVyIHBpZC93YXkgdW50aWwgd2UgcmV0dXJuLiAqLworCWdldF9taXNjX2FuZF9waWQoJm9yZ19taXNjLCAmcGlkX21pc2MpOworCisJV1JDVEwoQ1RMX1BURUFERFIsIChhZGRyID4+IFBBR0VfU0hJRlQpIDw8IDIpOworCisJZm9yICh3YXkgPSAwOyB3YXkgPCBjcHVpbmZvLnRsYl9udW1fd2F5czsgd2F5KyspIHsKKwkJdW5zaWduZWQgbG9uZyBwdGVhZGRyOworCQl1bnNpZ25lZCBsb25nIHRsYm1pc2M7CisKKwkJdGxibWlzYyA9IHBpZF9taXNjIHwgVExCTUlTQ19SRCB8ICh3YXkgPDwgVExCTUlTQ19XQVlfU0hJRlQpOworCQlXUkNUTChDVExfVExCTUlTQywgdGxibWlzYyk7CisJCXB0ZWFkZHIgPSBSRENUTChDVExfUFRFQUREUik7CisJCXRsYm1pc2MgPSBSRENUTChDVExfVExCTUlTQyk7CisKKwkJaWYgKCgoKHB0ZWFkZHIgPj4gMikgJiAweGZmZmZmKSkgPT0gKGFkZHIgPj4gUEFHRV9TSElGVCkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBDT05GSUdfTklPUzJfSU9fUkVHSU9OX0JBU0UgKworCQkJCSgoUEFHRV9TSVpFICogY3B1aW5mby50bGJfbnVtX2xpbmVzKSAqIHdheSkgKworCQkJCShhZGRyICYgVExCX0lOREVYX01BU0spOworCisJCQlwcl9kZWJ1ZygiRmx1c2ggZW50cnkgYnkgd3JpdGluZyAlI2x4IHdheT0lZGwgcGlkPSVsZFxuIiwKKwkJCQl2YWRkciwgd2F5LCAocGlkX21pc2MgPj4gVExCTUlTQ19QSURfU0hJRlQpKTsKKworCQkJdGxibWlzYyA9IHBpZF9taXNjIHwgVExCTUlTQ19XRSB8CisJCQkJKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCQlXUkNUTChDVExfUFRFQUREUiwgKHZhZGRyID4+IDEyKSA8PCAyKTsKKwkJCVdSQ1RMKENUTF9UTEJNSVNDLCB0bGJtaXNjKTsKKwkJCVdSQ1RMKENUTF9UTEJBQ0MsIChNQVhfUEhZU19BRERSID4+IFBBR0VfU0hJRlQpKTsKKwkJfQorCX0KKworCVdSQ1RMKENUTF9UTEJNSVNDLCBvcmdfbWlzYyk7Cit9CisKK3ZvaWQgZHVtcF90bGJfbGluZSh1bnNpZ25lZCBsb25nIGxpbmUpCit7CisJdW5zaWduZWQgaW50IHdheTsKKwl1bnNpZ25lZCBsb25nIG9yZ19taXNjOworCisJcHJfZGVidWcoImR1bXAgdGxiLWVudHJpZXMgZm9yIGxpbmU9JSNseCAoYWRkciAlMDhseClcbiIsIGxpbmUsCisJCWxpbmUgPDwgKFBBR0VfU0hJRlQgKyBjcHVpbmZvLnRsYl9udW1fd2F5c19sb2cyKSk7CisKKwkvKiByZW1lbWJlciBwaWQvd2F5IHVudGlsIHdlIHJldHVybiAqLworCW9yZ19taXNjID0gKFJEQ1RMKENUTF9UTEJNSVNDKSAmIChUTEJNSVNDX1BJRCB8IFRMQk1JU0NfV0FZKSk7CisKKwlXUkNUTChDVExfUFRFQUREUiwgbGluZSA8PCAyKTsKKworCWZvciAod2F5ID0gMDsgd2F5IDwgY3B1aW5mby50bGJfbnVtX3dheXM7IHdheSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgcHRlYWRkcjsKKwkJdW5zaWduZWQgbG9uZyB0bGJtaXNjOworCQl1bnNpZ25lZCBsb25nIHRsYmFjYzsKKworCQlXUkNUTChDVExfVExCTUlTQywgVExCTUlTQ19SRCB8ICh3YXkgPDwgVExCTUlTQ19XQVlfU0hJRlQpKTsKKwkJcHRlYWRkciA9IFJEQ1RMKENUTF9QVEVBRERSKTsKKwkJdGxibWlzYyA9IFJEQ1RMKENUTF9UTEJNSVNDKTsKKwkJdGxiYWNjID0gUkRDVEwoQ1RMX1RMQkFDQyk7CisKKwkJaWYgKCh0bGJhY2MgPDwgUEFHRV9TSElGVCkgIT0gKE1BWF9QSFlTX0FERFIgJiBQQUdFX01BU0spKSB7CisJCQlwcl9kZWJ1ZygiLS0gd2F5OiUwMnggdnBuOjB4JTA4bHggcGh5czoweCUwOGx4IHBpZDoweCUwMmx4IGZsYWdzOiVjJWMlYyVjJWNcbiIsCisJCQkJd2F5LAorCQkJCShwdGVhZGRyIDw8IChQQUdFX1NISUZULTIpKSwKKwkJCQkodGxiYWNjIDw8IFBBR0VfU0hJRlQpLAorCQkJCSgodGxibWlzYyA+PiBUTEJNSVNDX1BJRF9TSElGVCkgJgorCQkJCVRMQk1JU0NfUElEX01BU0spLAorCQkJCSh0bGJhY2MgJiBfUEFHRV9SRUFEID8gJ3InIDogJy0nKSwKKwkJCQkodGxiYWNjICYgX1BBR0VfV1JJVEUgPyAndycgOiAnLScpLAorCQkJCSh0bGJhY2MgJiBfUEFHRV9FWEVDID8gJ3gnIDogJy0nKSwKKwkJCQkodGxiYWNjICYgX1BBR0VfR0xPQkFMID8gJ2cnIDogJy0nKSwKKwkJCQkodGxiYWNjICYgX1BBR0VfQ0FDSEVEID8gJ2MnIDogJy0nKSk7CisJCX0KKwl9CisKKwlXUkNUTChDVExfVExCTUlTQywgb3JnX21pc2MpOworfQorCit2b2lkIGR1bXBfdGxiKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3B1aW5mby50bGJfbnVtX2xpbmVzOyBpKyspCisJCWR1bXBfdGxiX2xpbmUoaSk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX3BpZCh1bnNpZ25lZCBsb25nIHBpZCkKK3sKKwl1bnNpZ25lZCBpbnQgbGluZTsKKwl1bnNpZ25lZCBpbnQgd2F5OworCXVuc2lnbmVkIGxvbmcgb3JnX21pc2MsIHBpZF9taXNjOworCisJLyogcmVtZW1iZXIgcGlkL3dheSB1bnRpbCB3ZSByZXR1cm4gKi8KKwlnZXRfbWlzY19hbmRfcGlkKCZvcmdfbWlzYywgJnBpZF9taXNjKTsKKworCWZvciAobGluZSA9IDA7IGxpbmUgPCBjcHVpbmZvLnRsYl9udW1fbGluZXM7IGxpbmUrKykgeworCQlXUkNUTChDVExfUFRFQUREUiwgbGluZSA8PCAyKTsKKworCQlmb3IgKHdheSA9IDA7IHdheSA8IGNwdWluZm8udGxiX251bV93YXlzOyB3YXkrKykgeworCQkJdW5zaWduZWQgbG9uZyBwdGVhZGRyOworCQkJdW5zaWduZWQgbG9uZyB0bGJtaXNjOworCQkJdW5zaWduZWQgbG9uZyB0bGJhY2M7CisKKwkJCXRsYm1pc2MgPSBwaWRfbWlzYyB8IFRMQk1JU0NfUkQgfAorCQkJCSh3YXkgPDwgVExCTUlTQ19XQVlfU0hJRlQpOworCQkJV1JDVEwoQ1RMX1RMQk1JU0MsIHRsYm1pc2MpOworCQkJcHRlYWRkciA9IFJEQ1RMKENUTF9QVEVBRERSKTsKKwkJCXRsYm1pc2MgPSBSRENUTChDVExfVExCTUlTQyk7CisJCQl0bGJhY2MgPSBSRENUTChDVExfVExCQUNDKTsKKworCQkJaWYgKCgodGxibWlzYz4+VExCTUlTQ19QSURfU0hJRlQpICYgVExCTUlTQ19QSURfTUFTSykKKwkJCQk9PSBwaWQpIHsKKwkJCQl0bGJtaXNjID0gcGlkX21pc2MgfCBUTEJNSVNDX1dFIHwKKwkJCQkJKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCQkJV1JDVEwoQ1RMX1RMQk1JU0MsIHRsYm1pc2MpOworCQkJCVdSQ1RMKENUTF9UTEJBQ0MsCisJCQkJCShNQVhfUEhZU19BRERSID4+IFBBR0VfU0hJRlQpKTsKKwkJCX0KKwkJfQorCisJCVdSQ1RMKENUTF9UTEJNSVNDLCBvcmdfbWlzYyk7CisJfQorfQorCit2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhZGRyID0gQ09ORklHX05JT1MyX0lPX1JFR0lPTl9CQVNFOworCXVuc2lnbmVkIGludCB3YXk7CisJdW5zaWduZWQgbG9uZyBvcmdfbWlzYywgcGlkX21pc2MsIHRsYm1pc2M7CisKKwkvKiByZW1lbWJlciBwaWQvd2F5IHVudGlsIHdlIHJldHVybiAqLworCWdldF9taXNjX2FuZF9waWQoJm9yZ19taXNjLCAmcGlkX21pc2MpOworCXBpZF9taXNjIHw9IFRMQk1JU0NfV0U7CisKKwkvKiBNYXAgZWFjaCBUTEIgZW50cnkgdG8gcGh5c2NhbCBhZGRyZXNzIDAgd2l0aCBuby1hY2Nlc3MgYW5kIGEKKwkgICBiYWQgcHRiYXNlICovCisJZm9yICh3YXkgPSAwOyB3YXkgPCBjcHVpbmZvLnRsYl9udW1fd2F5czsgd2F5KyspIHsKKwkJdGxibWlzYyA9IHBpZF9taXNjIHwgKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCWZvciAoaSA9IDA7IGkgPCBjcHVpbmZvLnRsYl9udW1fbGluZXM7IGkrKykgeworCQkJV1JDVEwoQ1RMX1BURUFERFIsICgodmFkZHIpID4+IFBBR0VfU0hJRlQpIDw8IDIpOworCQkJV1JDVEwoQ1RMX1RMQk1JU0MsIHRsYm1pc2MpOworCQkJV1JDVEwoQ1RMX1RMQkFDQywgKE1BWF9QSFlTX0FERFIgPj4gUEFHRV9TSElGVCkpOworCQkJdmFkZHIgKz0gMVVMIDw8IDEyOworCQl9CisJfQorCisJLyogcmVzdG9yZSBwaWQvd2F5ICovCisJV1JDVEwoQ1RMX1RMQk1JU0MsIG9yZ19taXNjKTsKK30KKwordm9pZCBzZXRfbW11X3BpZCh1bnNpZ25lZCBsb25nIHBpZCkKK3sKKwlXUkNUTChDVExfVExCTUlTQywgKFJEQ1RMKENUTF9UTEJNSVNDKSAmIFRMQk1JU0NfV0FZKSB8CisJCSgocGlkICYgVExCTUlTQ19QSURfTUFTSykgPDwgVExCTUlTQ19QSURfU0hJRlQpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vdWFjY2Vzcy5jIGIvYXJjaC9uaW9zMi9tbS91YWNjZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2M2UxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vdWFjY2Vzcy5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworYXNtKCIuZ2xvYmFsCV9fY29weV9mcm9tX3VzZXJcbiIKKwkiICAgLnR5cGUgX19jb3B5X2Zyb21fdXNlciwgQGZ1bmN0aW9uXG4iCisJIl9fY29weV9mcm9tX3VzZXI6XG4iCisJIiAgIG1vdmkgIHIyLDdcbiIKKwkiICAgbW92ICAgcjMscjRcbiIKKwkiICAgYmdlICAgcjIscjYsMWZcbiIKKwkiICAgeG9yICAgcjIscjQscjVcbiIKKwkiICAgYW5kaSAgcjIscjIsM1xuIgorCSIgICBtb3ZpICByNywzXG4iCisJIiAgIGJlcSAgIHIyLHplcm8sNGZcbiIKKwkiMTogYWRkaSAgcjYscjYsLTFcbiIKKwkiICAgbW92aSAgcjIsLTFcbiIKKwkiICAgYmVxICAgcjYscjIsM2ZcbiIKKwkiICAgbW92ICAgcjcscjJcbiIKKwkiMjogbGRidSAgcjIsMChyNSlcbiIKKwkiICAgYWRkaSAgcjYscjYsLTFcbiIKKwkiICAgYWRkaSAgcjUscjUsMVxuIgorCSIgICBzdGIgICByMiwwKHIzKVxuIgorCSIgICBhZGRpICByMyxyMywxXG4iCisJIiAgIGJuZSAgIHI2LHI3LDJiXG4iCisJIjM6XG4iCisJIiAgIGFkZGkgIHIyLHI2LDFcbiIKKwkiICAgcmV0XG4iCisJIjEzOm1vdiAgIHIyLHI2XG4iCisJIiAgIHJldFxuIgorCSI0OiBhbmRpICByMixyNCwxXG4iCisJIiAgIGNtcGVxIHIyLHIyLHplcm9cbiIKKwkiICAgYmVxICAgcjIsemVybyw3ZlxuIgorCSI1OiBhbmRpICByMixyMywyXG4iCisJIiAgIGJlcSAgIHIyLHplcm8sNmZcbiIKKwkiOTogbGRodSAgcjIsMChyNSlcbiIKKwkiICAgYWRkaSAgcjYscjYsLTJcbiIKKwkiICAgYWRkaSAgcjUscjUsMlxuIgorCSIgICBzdGggICByMiwwKHIzKVxuIgorCSIgICBhZGRpICByMyxyMywyXG4iCisJIjY6IGJnZSAgIHI3LHI2LDFiXG4iCisJIjEwOmxkdyAgIHIyLDAocjUpXG4iCisJIiAgIGFkZGkgIHI2LHI2LC00XG4iCisJIiAgIGFkZGkgIHI1LHI1LDRcbiIKKwkiICAgc3R3ICAgcjIsMChyMylcbiIKKwkiICAgYWRkaSAgcjMscjMsNFxuIgorCSIgICBiciAgICA2YlxuIgorCSI3OiBsZGJ1ICByMiwwKHI1KVxuIgorCSIgICBhZGRpICByNixyNiwtMVxuIgorCSIgICBhZGRpICByNSxyNSwxXG4iCisJIiAgIGFkZGkgIHIzLHI0LDFcbiIKKwkiICAgc3RiICAgcjIsMChyNClcbiIKKwkiICAgYnIgICAgNWJcbiIKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSIud29yZCAyYiwzYlxuIgorCSIud29yZCA5YiwxM2JcbiIKKwkiLndvcmQgMTBiLDEzYlxuIgorCSIud29yZCA3YiwxM2JcbiIKKwkiLnByZXZpb3VzXG4iCisJKTsKK0VYUE9SVF9TWU1CT0woX19jb3B5X2Zyb21fdXNlcik7CisKK2FzbSgKKwkiICAgLmdsb2JhbCBfX2NvcHlfdG9fdXNlclxuIgorCSIgICAudHlwZSBfX2NvcHlfdG9fdXNlciwgQGZ1bmN0aW9uXG4iCisJIl9fY29weV90b191c2VyOlxuIgorCSIgICBtb3ZpICByMiw3XG4iCisJIiAgIG1vdiAgIHIzLHI0XG4iCisJIiAgIGJnZSAgIHIyLHI2LDFmXG4iCisJIiAgIHhvciAgIHIyLHI0LHI1XG4iCisJIiAgIGFuZGkgIHIyLHIyLDNcbiIKKwkiICAgbW92aSAgcjcsM1xuIgorCSIgICBiZXEgICByMix6ZXJvLDRmXG4iCisJLyogQmFpbCBpZiB3ZSB0cnkgdG8gY29weSB6ZXJvIGJ5dGVzICAqLworCSIxOiBhZGRpICByNixyNiwtMVxuIgorCSIgICBtb3ZpICByMiwtMVxuIgorCSIgICBiZXEgICByNixyMiwzZlxuIgorCS8qIENvcHkgYnl0ZSBieSBieXRlIGZvciBzbWFsbCBjb3BpZXMgYW5kIGlmIHNyY15kc3QgIT0gMCAqLworCSIgICBtb3YgICByNyxyMlxuIgorCSIyOiBsZGJ1ICByMiwwKHI1KVxuIgorCSIgICBhZGRpICByNSxyNSwxXG4iCisJIjk6IHN0YiAgIHIyLDAocjMpXG4iCisJIiAgIGFkZGkgIHI2LHI2LC0xXG4iCisJIiAgIGFkZGkgIHIzLHIzLDFcbiIKKwkiICAgYm5lICAgcjYscjcsMmJcbiIKKwkiMzogYWRkaSAgcjIscjYsMVxuIgorCSIgICByZXRcbiIKKwkiMTM6bW92ICAgcjIscjZcbiIKKwkiICAgcmV0XG4iCisJLyogIElmICd0bycgaXMgYW4gb2RkIGFkZHJlc3MgYnl0ZSBjb3B5ICovCisJIjQ6IGFuZGkgIHIyLHI0LDFcbiIKKwkiICAgY21wZXEgcjIscjIsemVyb1xuIgorCSIgICBiZXEgICByMix6ZXJvLDdmXG4iCisJLyogSWYgJ3RvJyBpcyBub3QgZGl2aWRlYWJsZSBieSBmb3VyIGNvcHkgaGFsZndvcmRzICovCisJIjU6IGFuZGkgIHIyLHIzLDJcbiIKKwkiICAgYmVxICAgcjIsemVybyw2ZlxuIgorCSIgICBsZGh1ICByMiwwKHI1KVxuIgorCSIgICBhZGRpICByNSxyNSwyXG4iCisJIjEwOnN0aCAgIHIyLDAocjMpXG4iCisJIiAgIGFkZGkgIHI2LHI2LC0yXG4iCisJIiAgIGFkZGkgIHIzLHIzLDJcbiIKKwkvKiBDb3B5IHdvcmRzICovCisJIjY6IGJnZSAgIHI3LHI2LDFiXG4iCisJIiAgIGxkdyAgIHIyLDAocjUpXG4iCisJIiAgIGFkZGkgIHI1LHI1LDRcbiIKKwkiMTE6c3R3ICAgcjIsMChyMylcbiIKKwkiICAgYWRkaSAgcjYscjYsLTRcbiIKKwkiICAgYWRkaSAgcjMscjMsNFxuIgorCSIgICBiciAgICA2YlxuIgorCS8qIENvcHkgcmVtYWluaW5nIGJ5dGVzICovCisJIjc6IGxkYnUgIHIyLDAocjUpXG4iCisJIiAgIGFkZGkgIHI1LHI1LDFcbiIKKwkiICAgYWRkaSAgcjMscjQsMVxuIgorCSIxMjogc3RiICByMiwwKHI0KVxuIgorCSIgICBhZGRpICByNixyNiwtMVxuIgorCSIgICBiciAgICA1YlxuIgorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJIi53b3JkIDliLDNiXG4iCisJIi53b3JkIDEwYiwxM2JcbiIKKwkiLndvcmQgMTFiLDEzYlxuIgorCSIud29yZCAxMmIsMTNiXG4iCisJIi5wcmV2aW91c1xuIik7CitFWFBPUlRfU1lNQk9MKF9fY29weV90b191c2VyKTsKKworbG9uZyBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpfX3RvLCBjb25zdCBjaGFyIF9fdXNlciAqX19mcm9tLCBsb25nIF9fbGVuKQoreworCWludCBsID0gc3Rybmxlbl91c2VyKF9fZnJvbSwgX19sZW4pOworCWludCBpc196dCA9IDE7CisKKwlpZiAobCA+IF9fbGVuKSB7CisJCWlzX3p0ID0gMDsKKwkJbCA9IF9fbGVuOworCX0KKworCWlmIChsID09IDAgfHwgY29weV9mcm9tX3VzZXIoX190bywgX19mcm9tLCBsKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoaXNfenQpCisJCWwtLTsKKwlyZXR1cm4gbDsKK30KKworbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnMsIGxvbmcgbikKK3sKKwlsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWNoYXIgYzsKKworCQlpZiAoZ2V0X3VzZXIoYywgcyArIGkpID09IC1FRkFVTFQpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGMgPT0gMCkKKwkJCXJldHVybiBpICsgMTsKKwl9CisJcmV0dXJuIG4gKyAxOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9wbGF0Zm9ybS9LY29uZmlnLnBsYXRmb3JtIGIvYXJjaC9uaW9zMi9wbGF0Zm9ybS9LY29uZmlnLnBsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTVkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL3BsYXRmb3JtL0tjb25maWcucGxhdGZvcm0KQEAgLTAsMCArMSwxMjkgQEAKK21lbnUgIlBsYXRmb3JtIG9wdGlvbnMiCisKK2NvbW1lbnQgIk1lbW9yeSBzZXR0aW5ncyIKKworY29uZmlnIE5JT1MyX01FTV9CQVNFCisJaGV4ICJNZW1vcnkgYmFzZSBhZGRyZXNzIgorCWRlZmF1bHQgIjB4MDAwMDAwMDAiCisJaGVscAorCSAgVGhpcyBpcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHRoYXQgdGhlIGtlcm5lbCB3aWxsIHJ1bgorCSAgZnJvbS4gVGhpcyBhZGRyZXNzIGlzIHVzZWQgdG8gbGluayB0aGUga2VybmVsIGFuZCBzZXR1cCBpbml0aWFsIG1lbW9yeQorCSAgbWFuYWdlbWVudC4gWW91IHNob3VsZCB0YWtlIHRoZSByYXcgbWVtb3J5IGFkZHJlc3Mgd2l0aG91dCBhbnkgTU1VCisJICBvciBjYWNoZSBiaXRzIHNldC4KKwkgIFBsZWFzZSBub3QgdGhhdCB0aGlzIGFkZHJlc3MgaXMgdXNlZCBkaXJlY3RseSBzbyB5b3UgaGF2ZSB0byBtYW51YWxseQorCSAgZG8gYWRkcmVzcyB0cmFuc2xhdGlvbiBpZiBpdCdzIGNvbm5lY3RlZCB0byBhIGJyaWRnZS4KKworY29tbWVudCAiRGV2aWNlIHRyZWUiCisKK2NvbmZpZyBOSU9TMl9EVEJfQVRfUEhZU19BRERSCisJYm9vbCAiRFRCIGF0IHBoeXNpY2FsIGFkZHJlc3MiCisJZGVmYXVsdCBuCisJaGVscAorCSAgV2hlbiBlbmFibGVkIHlvdSBjYW4gc2VsZWN0IGEgcGh5c2ljYWwgYWRkcmVzcyB0byBsb2FkIHRoZSBkdGIgZnJvbS4KKwkgIE5vcm1hbGx5IHRoaXMgYWRkcmVzcyBpcyBwYXNzZWQgYnkgYSBib290bG9hZGVyIHN1Y2ggYXMgdS1ib290IGJ1dAorCSAgdXNpbmcgdGhpcyB5b3UgY2FuIHVzZSBhIGRldmljZXRyZWUgd2l0aG91dCBhIGJvb3Rsb2FkZXIuCisJICBUaGlzIHdheSB5b3UgY2FuIHN0b3JlIGEgZGV2aWNldHJlZSBpbiBOT1IgZmxhc2ggb3IgYW4gb25jaGlwIHJvbS4KKwkgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBhZGRyZXNzIGlzIHVzZWQgZGlyZWN0bHkgc28geW91IGhhdmUgdG8gbWFudWFsbHkKKwkgIGRvIGFkZHJlc3MgdHJhbnNsYXRpb24gaWYgaXQncyBjb25uZWN0ZWQgdG8gYSBicmlkZ2UuIEFsc28gdGFrZSBpbnRvCisJICBhY2NvdW50IHRoYXQgd2hlbiB1c2luZyBhbiBNTVUgeW91J2QgaGF2ZSB0byBhZCAweEMwMDAwMDAwIHRvIHlvdXIKKwkgIGFkZHJlc3MKKworY29uZmlnIE5JT1MyX0RUQl9QSFlTX0FERFIKKwloZXggIkRUQiBBZGRyZXNzIgorCWRlcGVuZHMgb24gTklPUzJfRFRCX0FUX1BIWVNfQUREUgorCWRlZmF1bHQgIjB4QzAwMDAwMDAiCisJaGVscAorCSAgUGh5c2ljYWwgYWRkcmVzcyBvZiBhIGR0YiBibG9iLgorCitjb25maWcgTklPUzJfRFRCX1NPVVJDRV9CT09MCisJYm9vbCAiQ29tcGlsZSBhbmQgbGluayBkZXZpY2UgdHJlZSBpbnRvIGtlcm5lbCBpbWFnZSIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGR0cyAoZGV2aWNlIHRyZWUgc291cmNlKSBmaWxlCisJICB3aGljaCB3aWxsIGJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW50byB0aGUga2VybmVsIGltYWdlLgorCitjb25maWcgTklPUzJfRFRCX1NPVVJDRQorCXN0cmluZyAiRGV2aWNlIHRyZWUgc291cmNlIGZpbGUiCisJZGVwZW5kcyBvbiBOSU9TMl9EVEJfU09VUkNFX0JPT0wKKwlkZWZhdWx0ICIiCisJaGVscAorCSAgQWJzb2x1dGUgcGF0aCB0byB0aGUgZGV2aWNlIHRyZWUgc291cmNlIChkdHMpIGZpbGUgZGVzY3JpYmluZyB5b3VyCisJICBzeXN0ZW0uCisKK2NvbW1lbnQgIk5pb3MgSUkgaW5zdHJ1Y3Rpb25zIgorCitjb25maWcgTklPUzJfSFdfTVVMX1NVUFBPUlQKKwlib29sICJFbmFibGUgTVVMIGluc3RydWN0aW9uIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNldCB0byB0cnVlIGlmIHlvdSBjb25maWd1cmVkIHRoZSBOaW9zIElJIHRvIGluY2x1ZGUgdGhlIE1VTAorCSAgaW5zdHJ1Y3Rpb24uICBUaGlzIHdpbGwgZW5hYmxlIHRoZSAtbWh3LW11bCBjb21waWxlciBmbGFnLgorCitjb25maWcgTklPUzJfSFdfTVVMWF9TVVBQT1JUCisJYm9vbCAiRW5hYmxlIE1VTFggaW5zdHJ1Y3Rpb24iCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2V0IHRvIHRydWUgaWYgeW91IGNvbmZpZ3VyZWQgdGhlIE5pb3MgSUkgdG8gaW5jbHVkZSB0aGUgTVVMWAorCSAgaW5zdHJ1Y3Rpb24uICBFbmFibGVzIHRoZSAtbWh3LW11bHggY29tcGlsZXIgZmxhZy4KKworY29uZmlnIE5JT1MyX0hXX0RJVl9TVVBQT1JUCisJYm9vbCAiRW5hYmxlIERJViBpbnN0cnVjdGlvbiIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTZXQgdG8gdHJ1ZSBpZiB5b3UgY29uZmlndXJlZCB0aGUgTmlvcyBJSSB0byBpbmNsdWRlIHRoZSBESVYKKwkgIGluc3RydWN0aW9uLiAgRW5hYmxlcyB0aGUgLW1ody1kaXYgY29tcGlsZXIgZmxhZy4KKworY29uZmlnIE5JT1MyX0ZQVV9TVVBQT1JUCisJYm9vbCAiQ3VzdG9tIGZsb2F0aW5nIHBvaW50IGluc3RyIHN1cHBvcnQiCisJZGVmYXVsdCBuCisJaGVscAorCSAgRW5hYmxlcyB0aGUgLW1jdXN0b20tZnB1LWNmZz02MC0xIGNvbXBpbGVyIGZsYWcuCisKK2NvbmZpZyBOSU9TMl9DSV9TV0FCX1NVUFBPUlQKKwlib29sICJCeXRlc3dhcCBjdXN0b20gaW5zdHJ1Y3Rpb24iCisJZGVmYXVsdCBuCisJaGVscAorCSAgVXNlIHRoZSBieXRlc3dhcCAoZW5kaWFuIGNvbnZlcnRlcikgTmlvcyBJSSBjdXN0b20gaW5zdHJ1Y3Rpb24gcHJvdmlkZWQKKwkgIGJ5IEFsdGVyYSBhbmQgd2hpY2ggY2FuIGJlIGVuYWJsZWQgaW4gUVNZUyBidWlsZGVyLiBUaGlzIGFjY2VsZXJhdGVzCisJICBlbmRpYW4gY29udmVyc2lvbnMgaW4gdGhlIGtlcm5lbCAoZS5nLiBudG9ocykuCisKK2NvbmZpZyBOSU9TMl9DSV9TV0FCX05PCisJaW50ICJCeXRlc3dhcCBjdXN0b20gaW5zdHJ1Y3Rpb24gbnVtYmVyIiBpZiBOSU9TMl9DSV9TV0FCX1NVUFBPUlQKKwlkZWZhdWx0IDAKKwloZWxwCisJICBOdW1iZXIgb2YgdGhlIGluc3RydWN0aW9uIGFzIGNvbmZpZ3VyZWQgaW4gUVNZUyBCdWlsZGVyLgorCitjb21tZW50ICJDYWNoZSBzZXR0aW5ncyIKKworY29uZmlnIENVU1RPTV9DQUNIRV9TRVRUSU5HUworCWJvb2wgIkN1c3RvbSBjYWNoZSBzZXR0aW5ncyIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHR3ZWFrIHRoZSBjYWNoZSBzZXR0aW5ncyB1c2VkIGR1cmluZyBlYXJseQorCSAgYm9vdCAod2hlcmUgdGhlIGluZm9ybWF0aW9uIGZyb20gZGV2aWNlIHRyZWUgaXMgbm90IHlldCBhdmFpbGFibGUpLgorCSAgVGhlcmUgc2hvdWxkIGJlIG5vIHJlYXNvbiB0byBjaGFuZ2UgdGhlc2UgdmFsdWVzLiBMaW51eCB3aWxsIHdvcmsKKwkgIHBlcmZlY3RseSBmaW5lLCBldmVuIGlmIHRoZSBOaW9zIElJIGlzIGNvbmZpZ3VyZWQgd2l0aCBzbWFsbGVyIGNhY2hlcy4KKworCSAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCitjb25maWcgTklPUzJfRENBQ0hFX1NJWkUKKwloZXggIkQtQ2FjaGUgc2l6ZSIgaWYgQ1VTVE9NX0NBQ0hFX1NFVFRJTkdTCisJcmFuZ2UgMHgyMDAgMHgxMDAwMAorCWRlZmF1bHQgIjB4ODAwIgorCWhlbHAKKwkgIE1heGltdW0gcG9zc2libGUgZGF0YSBjYWNoZSBzaXplLgorCitjb25maWcgTklPUzJfRENBQ0hFX0xJTkVfU0laRQorCWhleCAiRC1DYWNoZSBsaW5lIHNpemUiIGlmIENVU1RPTV9DQUNIRV9TRVRUSU5HUworCXJhbmdlIDB4MTAgMHgyMAorCWRlZmF1bHQgIjB4MjAiCisJaGVscAorCSAgTWluaW11bSBwb3NzaWJsZSBkYXRhIGNhY2hlIGxpbmUgc2l6ZS4KKworY29uZmlnIE5JT1MyX0lDQUNIRV9TSVpFCisJaGV4ICJJLUNhY2hlIHNpemUiIGlmIENVU1RPTV9DQUNIRV9TRVRUSU5HUworCXJhbmdlIDB4MjAwIDB4MTAwMDAKKwlkZWZhdWx0ICIweDEwMDAiCisJaGVscAorCSAgTWF4aW11bSBwb3NzaWJsZSBpbnN0cnVjdGlvbiBjYWNoZSBzaXplLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL3BsYXRmb3JtL01ha2VmaWxlIGIvYXJjaC9uaW9zMi9wbGF0Zm9ybS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjM2NGYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9wbGF0Zm9ybS9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteSArPSBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL3BsYXRmb3JtL3BsYXRmb3JtLmMgYi9hcmNoL25pb3MyL3BsYXRmb3JtL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ODc3MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvcGxhdGZvcm0vcGxhdGZvcm0uYwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDExIFRob21hcyBDaG91CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgV2FsdGVyIEdvb3NzZW5zCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzX3NvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKK3N0YXRpYyBpbnQgX19pbml0IG5pb3MyX3NvY19kZXZpY2VfaW5pdCh2b2lkKQoreworCXN0cnVjdCBzb2NfZGV2aWNlICpzb2NfZGV2OworCXN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSAqc29jX2Rldl9hdHRyOworCWNvbnN0IGNoYXIgKm1hY2hpbmU7CisKKwlzb2NfZGV2X2F0dHIgPSBremFsbG9jKHNpemVvZigqc29jX2Rldl9hdHRyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY19kZXZfYXR0cikgeworCQltYWNoaW5lID0gb2ZfZmxhdF9kdF9nZXRfbWFjaGluZV9uYW1lKCk7CisJCWlmIChtYWNoaW5lKQorCQkJc29jX2Rldl9hdHRyLT5tYWNoaW5lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcyIsCisJCQkJCQltYWNoaW5lKTsKKworCQlzb2NfZGV2X2F0dHItPmZhbWlseSA9ICJOaW9zIElJIjsKKworCQlzb2NfZGV2ID0gc29jX2RldmljZV9yZWdpc3Rlcihzb2NfZGV2X2F0dHIpOworCQlpZiAoSVNfRVJSKHNvY19kZXYpKSB7CisJCQlrZnJlZShzb2NfZGV2X2F0dHItPm1hY2hpbmUpOworCQkJa2ZyZWUoc29jX2Rldl9hdHRyKTsKKwkJfQorCX0KKworCXJldHVybiBvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwKKwkJTlVMTCwgTlVMTCk7Cit9CisKK2RldmljZV9pbml0Y2FsbChuaW9zMl9zb2NfZGV2aWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMWY2ZDJhZS4uOGNkMGFiZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pby5oCkBAIC0yMTcsMTAgKzIxNywxNCBAQAogI2RlZmluZSB3cml0ZWwJd3JpdGVsCiAjZGVmaW5lIHdyaXRlcQl3cml0ZXEKIAotI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQotI2RlZmluZSByZWFkcV9yZWxheGVkKGFkZHIpIHJlYWRxKGFkZHIpCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikJcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKQlyZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpCXJlYWRsKGFkZHIpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYWRkcikJcmVhZHEoYWRkcikKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQoYiwgYWRkcikJd3JpdGViKGIsIGFkZHIpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKHcsIGFkZHIpCXdyaXRldyh3LCBhZGRyKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZChsLCBhZGRyKQl3cml0ZWwobCwgYWRkcikKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQocSwgYWRkcikJd3JpdGVxKHEsIGFkZHIpCiAKICNkZWZpbmUgbW1pb3diKCkgZG8geyB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDk3ZDM4NjkuLjllYWYzMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCkBAIC02MTcsMTAgKzYxNywxNCBAQAogLyoKICAqIFdlIGRvbid0IGRvIHJlbGF4ZWQgb3BlcmF0aW9ucyB5ZXQsIGF0IGxlYXN0IG5vdCB3aXRoIHRoaXMgc2VtYW50aWMKICAqLwotI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQotI2RlZmluZSByZWFkcV9yZWxheGVkKGFkZHIpIHJlYWRxKGFkZHIpCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikJcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKQlyZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpCXJlYWRsKGFkZHIpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYWRkcikJcmVhZHEoYWRkcikKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQodiwgYWRkcikJd3JpdGViKHYsIGFkZHIpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKHYsIGFkZHIpCXdyaXRldyh2LCBhZGRyKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZCh2LCBhZGRyKQl3cml0ZWwodiwgYWRkcikKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQodiwgYWRkcikJd3JpdGVxKHYsIGFkZHIpCiAKICNpZmRlZiBDT05GSUdfUFBDMzIKICNkZWZpbmUgbW1pb3diKCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb21tdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKaW5kZXggNDI2MzJjNy4uOWNmYTM3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKQEAgLTEzNywxMyArMTM3LDE2IEBACiAJaW9tbXVfYWRkX2RldmljZShkZXYpOwogfQogCi1leHRlcm4gaW50IGlvbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAotCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCi0JCQl1bnNpZ25lZCBsb25nIG1hc2ssIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKLWV4dGVybiB2b2lkIGlvbW11X3VubWFwX3NnKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKLQkJCSAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKK2V4dGVybiBpbnQgcHBjX2lvbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAorCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgbWFzaywKKwkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworZXh0ZXJuIHZvaWQgcHBjX2lvbW11X3VubWFwX3NnKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAorCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJICAgICAgIGludCBuZWxlbXMsCisJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKIAogZXh0ZXJuIHZvaWQgKmlvbW11X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCiAJCQkJICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGU5YTlmNjAuLmZjM2VlMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMyw3ICszLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgogCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKIGV4dGVybiB2b2lkIHRsYl9mbHVzaF9wZ3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CkBAIC0xNCw2ICsxMyw4IEBACiB9CiAjZW5kaWYgLyogIUNPTkZJR19QUENfQk9PSzNFICovCiAKK2V4dGVybiB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpOworCiAjaWZkZWYgQ09ORklHX1BQQzY0CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MtNjQuaD4KICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggZTJiNDI4Yi4uMjA3MzNmYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGIuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeQlfX3RsYl9yZW1vdmVfdGxiX2VudHJ5CiAKIGV4dGVybiB2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMKaW5kZXggNTRkMDExNi4uNGM2OGJmZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCkBAIC02MCwxNiArNjAsMTYgQEAKIAkJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JcmV0dXJuIGlvbW11X21hcF9zZyhkZXYsIGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNnbGlzdCwgbmVsZW1zLAotCQkJICAgIGRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOworCXJldHVybiBwcGNfaW9tbXVfbWFwX3NnKGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2dsaXN0LCBuZWxlbXMsCisJCQkJZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYV9pb21tdV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAogCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCWlvbW11X3VubWFwX3NnKGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNnbGlzdCwgbmVsZW1zLCBkaXJlY3Rpb24sCi0JCSAgICAgICBhdHRycyk7CisJcHBjX2lvbW11X3VubWFwX3NnKGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNnbGlzdCwgbmVsZW1zLAorCQkJICAgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIC8qIFdlIHN1cHBvcnQgRE1BIHRvL2Zyb20gYW55IG1lbW9yeSBwYWdlIHZpYSB0aGUgaW9tbXUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwppbmRleCBhMTA2NDJhLi5hODNjZjVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCkBAIC00MjgsMTAgKzQyOCwxMCBAQAogCQlwcGNfbWQudGNlX2ZsdXNoKHRibCk7CiB9CiAKLWludCBpb21tdV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKLQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAotCQkgdW5zaWduZWQgbG9uZyBtYXNrLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCSBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK2ludCBwcGNfaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCisJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCisJCSAgICAgdW5zaWduZWQgbG9uZyBtYXNrLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJZG1hX2FkZHJfdCBkbWFfbmV4dCA9IDAsIGRtYV9hZGRyOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqcywgKm91dHMsICpzZWdzdGFydDsKQEAgLTUzOSw3ICs1MzksNyBAQAogCiAJREJHKCJtYXBwZWQgJWQgZWxlbWVudHM6XG4iLCBvdXRjb3VudCk7CiAKLQkvKiBGb3IgdGhlIHNha2Ugb2YgaW9tbXVfdW5tYXBfc2csIHdlIGNsZWFyIG91dCB0aGUgbGVuZ3RoIGluIHRoZQorCS8qIEZvciB0aGUgc2FrZSBvZiBwcGNfaW9tbXVfdW5tYXBfc2csIHdlIGNsZWFyIG91dCB0aGUgbGVuZ3RoIGluIHRoZQogCSAqIG5leHQgZW50cnkgb2YgdGhlIHNnbGlzdCBpZiB3ZSBkaWRuJ3QgZmlsbCB0aGUgbGlzdCBjb21wbGV0ZWx5CiAJICovCiAJaWYgKG91dGNvdW50IDwgaW5jb3VudCkgewpAQCAtNTcyLDkgKzU3Miw5IEBACiB9CiAKIAotdm9pZCBpb21tdV91bm1hcF9zZyhzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit2b2lkIHBwY19pb21tdV91bm1hcF9zZyhzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCmluZGV4IDdlNzBhZTkuLjZhNGE1ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCkBAIC01MTcsOCArNTE3LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2h1Z2VwZDsgaSsrLCBocGRwKyspCiAJCWhwZHAtPnBkID0gMDsKIAotCXRsYi0+bmVlZF9mbHVzaCA9IDE7Ci0KICNpZmRlZiBDT05GSUdfUFBDX0ZTTF9CT09LM0UKIAlodWdlcGRfZnJlZSh0bGIsIGh1Z2VwdGUpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKaW5kZXggODYyYjMyNy4uMDg4Mzk5NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogCiAJCWlycV9zZXRfbXNpX2Rlc2ModmlycSwgZW50cnkpOwogCQltc2cuZGF0YSA9IHZpcnE7Ci0JCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzAxLDkgKzMwMSw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpY19pcnFfY2hpcCA9IHsKLQkuaXJxX21hc2sJPSBtYXNrX21zaV9pcnEsCi0JLmlycV91bm1hc2sJPSB1bm1hc2tfbXNpX2lycSwKLQkuaXJxX3NodXRkb3duCT0gbWFza19tc2lfaXJxLAorCS5pcnFfbWFzawk9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sJPSBwY2lfbXNpX3VubWFza19pcnEsCisJLmlycV9zaHV0ZG93bgk9IHBjaV9tc2lfbWFza19pcnEsCiAJLm5hbWUJCT0gIkFYT04tTVNJIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKaW5kZXggMmI5MGZmOC4uYzdjODcyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKQEAgLTYyMSw4ICs2MjEsOSBAQAogCWlmIChpb21tdV9maXhlZF9pc193ZWFrID09IGRtYV9nZXRfYXR0cihETUFfQVRUUl9XRUFLX09SREVSSU5HLCBhdHRycykpCiAJCXJldHVybiBkbWFfZGlyZWN0X29wcy5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbiwgYXR0cnMpOwogCWVsc2UKLQkJcmV0dXJuIGlvbW11X21hcF9zZyhkZXYsIGNlbGxfZ2V0X2lvbW11X3RhYmxlKGRldiksIHNnLCBuZW50cywKLQkJCQkgICAgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CisJCXJldHVybiBwcGNfaW9tbXVfbWFwX3NnKGRldiwgY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KSwgc2csCisJCQkJCW5lbnRzLCBkZXZpY2VfdG9fbWFzayhkZXYpLAorCQkJCQlkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIAogc3RhdGljIHZvaWQgZG1hX2ZpeGVkX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKQEAgLTYzMiw4ICs2MzMsOCBAQAogCWlmIChpb21tdV9maXhlZF9pc193ZWFrID09IGRtYV9nZXRfYXR0cihETUFfQVRUUl9XRUFLX09SREVSSU5HLCBhdHRycykpCiAJCWRtYV9kaXJlY3Rfb3BzLnVubWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24sIGF0dHJzKTsKIAllbHNlCi0JCWlvbW11X3VubWFwX3NnKGNlbGxfZ2V0X2lvbW11X3RhYmxlKGRldiksIHNnLCBuZW50cywgZGlyZWN0aW9uLAotCQkJICAgICAgIGF0dHJzKTsKKwkJcHBjX2lvbW11X3VubWFwX3NnKGNlbGxfZ2V0X2lvbW11X3RhYmxlKGRldiksIHNnLCBuZW50cywKKwkJCQkgICBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIAogc3RhdGljIGludCBkbWFfZml4ZWRfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtc2Vuc29yLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1zZW5zb3IuYwppbmRleCAxMDI3MWFkLi40YWI2N2VmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1zZW5zb3IuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1zZW5zb3IuYwpAQCAtMjAsNyArMjAsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL29wYWwuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogCiBzdGF0aWMgREVGSU5FX01VVEVYKG9wYWxfc2Vuc29yX211dGV4KTsKIApAQCAtNjQsMyArNjYsMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwob3BhbF9nZXRfc2Vuc29yX2RhdGEpOworCitzdGF0aWMgX19pbml0IGludCBvcGFsX3NlbnNvcl9pbml0KHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNlbnNvcjsKKworCXNlbnNvciA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvaWJtLG9wYWwvc2Vuc29ycyIpOworCWlmICghc2Vuc29yKSB7CisJCXByX2VycigiT3BhbCBub2RlICdzZW5zb3JzJyBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwZGV2ID0gb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShzZW5zb3IsICJvcGFsLXNlbnNvciIsIE5VTEwpOworCW9mX25vZGVfcHV0KHNlbnNvcik7CisKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHBkZXYpOworfQorbWFjaGluZV9zdWJzeXNfaW5pdGNhbGwocG93ZXJudiwgb3BhbF9zZW5zb3JfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmMKaW5kZXggNGIyMGYyYy4uNTQwZmM2ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYwpAQCAtOTAsNyArOTAsNyBAQAogCQkJcmV0dXJuIHJjOwogCQl9CiAJCWlycV9zZXRfbXNpX2Rlc2ModmlycSwgZW50cnkpOwotCQl3cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOworCQlwY2lfd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKaW5kZXggOGI5MDllOS4uNjkxYTE1NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCWlycV9zZXRfbXNpX2Rlc2ModmlycSwgZW50cnkpOwogCiAJCS8qIFJlYWQgY29uZmlnIHNwYWNlIGJhY2sgc28gd2UgY2FuIHJlc3RvcmUgYWZ0ZXIgcmVzZXQgKi8KLQkJX19yZWFkX21zaV9tc2coZW50cnksICZtc2cpOworCQlfX3BjaV9yZWFkX21zaV9tc2coZW50cnksICZtc2cpOwogCQllbnRyeS0+bXNnID0gbXNnOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYwppbmRleCBkYTA4ZWQwLi43YWVkOGQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYwpAQCAtODIsOCArODIsOCBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZnNsX21zaV9jaGlwID0gewotCS5pcnFfbWFzawk9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzawk9IHVubWFza19tc2lfaXJxLAorCS5pcnFfbWFzawk9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sJPSBwY2lfbXNpX3VubWFza19pcnEsCiAJLmlycV9hY2sJPSBmc2xfbXNpX2VuZF9pcnEsCiAJLmlycV9wcmludF9jaGlwID0gZnNsX21zaV9wcmludF9jaGlwLAogfTsKQEAgLTI0Miw3ICsyNDIsNyBAQAogCQlpcnFfc2V0X21zaV9kZXNjKHZpcnEsIGVudHJ5KTsKIAogCQlmc2xfY29tcG9zZV9tc2lfbXNnKHBkZXYsIGh3aXJxLCAmbXNnLCBtc2lfZGF0YSk7Ci0JCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOwogCX0KIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKaW5kZXggMTVkY2NkMy4uNDVjMTE0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCkBAIC00Miw3ICs0Miw3IEBACiBzdGF0aWMgdm9pZCBtcGljX3Bhc2VtaV9tc2lfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewogCXByX2RlYnVnKCJtcGljX3Bhc2VtaV9tc2lfbWFza19pcnEgJWRcbiIsIGRhdGEtPmlycSk7Ci0JbWFza19tc2lfaXJxKGRhdGEpOworCXBjaV9tc2lfbWFza19pcnEoZGF0YSk7CiAJbXBpY19tYXNrX2lycShkYXRhKTsKIH0KIApAQCAtNTAsNyArNTAsNyBAQAogewogCXByX2RlYnVnKCJtcGljX3Bhc2VtaV9tc2lfdW5tYXNrX2lycSAlZFxuIiwgZGF0YS0+aXJxKTsKIAltcGljX3VubWFza19pcnEoZGF0YSk7Ci0JdW5tYXNrX21zaV9pcnEoZGF0YSk7CisJcGNpX21zaV91bm1hc2tfaXJxKGRhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1waWNfcGFzZW1pX21zaV9jaGlwID0gewpAQCAtMTM2LDcgKzEzNiw3IEBACiAJCSAqIHJlZ2lzdGVyIHRvIGdlbmVyYXRlIE1TSSBbNTEyLi4uMTAyM10KIAkJICovCiAJCW1zZy5kYXRhID0gaHdpcnEtMHgyMDA7Ci0JCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYwppbmRleCA2MjNkN2ZiLi4wZGZmMWNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYwpAQCAtMjUsMTQgKzI1LDE0IEBACiAKIHN0YXRpYyB2b2lkIG1waWNfdTNtc2lfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCW1hc2tfbXNpX2lycShkYXRhKTsKKwlwY2lfbXNpX21hc2tfaXJxKGRhdGEpOwogCW1waWNfbWFza19pcnEoZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1waWNfdTNtc2lfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CiAJbXBpY191bm1hc2tfaXJxKGRhdGEpOwotCXVubWFza19tc2lfaXJxKGRhdGEpOworCXBjaV9tc2lfdW5tYXNrX2lycShkYXRhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGljX3UzbXNpX2NoaXAgPSB7CkBAIC0xNzEsNyArMTcxLDcgQEAKIAkJcHJpbnRrKCJ1M21zaTogYWxsb2NhdGVkIHZpcnEgMHgleCAoaHcgMHgleCkgYWRkciAweCVseFxuIiwKIAkJCSAgdmlycSwgaHdpcnEsICh1bnNpZ25lZCBsb25nKWFkZHIpOwogCQltc2cuZGF0YSA9IGh3aXJxOwotCQl3cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOworCQlwY2lfd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKIAogCQlod2lycSsrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X2hzdGFfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9oc3RhX21zaS5jCmluZGV4IGE2YTRkYmQuLjkwODEwNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X2hzdGFfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfaHN0YV9tc2kuYwpAQCAtODUsNyArODUsNyBAQAogCQkJbXNpX2JpdG1hcF9mcmVlX2h3aXJxcygmcHBjNHh4X2hzdGFfbXNpLmJtcCwgaXJxLCAxKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXdyaXRlX21zaV9tc2coaHdpcnEsICZtc2cpOworCQlwY2lfd3JpdGVfbXNpX21zZyhod2lycSwgJm1zZyk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X21zaS5jCmluZGV4IDIyYjUyMDAuLjUxOGVhYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X21zaS5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogCQlpcnFfc2V0X21zaV9kZXNjKHZpcnEsIGVudHJ5KTsKIAkJbXNnLmRhdGEgPSBpbnRfbm87Ci0JCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3Mtb3BhbC5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1vcGFsLmMKaW5kZXggM2M2ZWUxYi4uNGJhNTU0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1vcGFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1vcGFsLmMKQEAgLTczLDcgKzczLDcgQEAKIAkgKiBhdCB0aGF0IGxldmVsLCBzbyB3ZSBkbyBpdCBoZXJlIGJ5IGhhbmQuCiAJICovCiAJaWYgKGQtPm1zaV9kZXNjKQotCQl1bm1hc2tfbXNpX2lycShkKTsKKwkJcGNpX21zaV91bm1hc2tfaXJxKGQpOwogI2VuZGlmCiAKIAkvKiB1bm1hc2sgaXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3MtcnRhcy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1ydGFzLmMKaW5kZXggOTM2NTc1ZC4uYmM4MTMzNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3MtcnRhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3MtcnRhcy5jCkBAIC03Niw3ICs3Niw3IEBACiAJICogYXQgdGhhdCBsZXZlbCwgc28gd2UgZG8gaXQgaGVyZSBieSBoYW5kLgogCSAqLwogCWlmIChkLT5tc2lfZGVzYykKLQkJdW5tYXNrX21zaV9pcnEoZCk7CisJCXBjaV9tc2lfdW5tYXNrX2lycShkKTsKICNlbmRpZgogCS8qIHVubWFzayBpdCAqLwogCWljc19ydGFzX3VubWFza19pcnEoZCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGNkNmI5ZWUuLjZhZDkwMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5oCkBAIC0xMyw5ICsxMywxMCBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BjaV9pby5oPgogCi12b2lkICp4bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMpOwogI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0ciB4bGF0ZV9kZXZfbWVtX3B0cgotdm9pZCB1bnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgcGh5cywgdm9pZCAqYWRkcik7Cit2b2lkICp4bGF0ZV9kZXZfbWVtX3B0cihwaHlzX2FkZHJfdCBwaHlzKTsKKyNkZWZpbmUgdW54bGF0ZV9kZXZfbWVtX3B0ciB1bnhsYXRlX2Rldl9tZW1fcHRyCit2b2lkIHVueGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqYWRkcik7CiAKIC8qCiAgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCkBAIC02MCwxMSArNjEsNiBAQAogI2RlZmluZSBfX3Jhd193cml0ZWwJenBjaV93cml0ZV91MzIKICNkZWZpbmUgX19yYXdfd3JpdGVxCXpwY2lfd3JpdGVfdTY0CiAKLSNkZWZpbmUgcmVhZGJfcmVsYXhlZAlyZWFkYgotI2RlZmluZSByZWFkd19yZWxheGVkCXJlYWR3Ci0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQJcmVhZGwKLSNkZWZpbmUgcmVhZHFfcmVsYXhlZAlyZWFkcQotCiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggMzgxNWJmZS4uZjQ5YjcxOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTEyMCw0ICsxMjAsMTUgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfdW5tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9icHJtX21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKK30KKwogI2VuZGlmIC8qIF9fUzM5MF9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vbWFjY2Vzcy5jIGIvYXJjaC9zMzkwL21tL21hY2Nlc3MuYwppbmRleCAyYTJlMzU0Li4yZWIzNGJkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vbWFjY2Vzcy5jCisrKyBiL2FyY2gvczM5MC9tbS9tYWNjZXNzLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogICogRm9yIHN3YXBwZWQgcHJlZml4IHBhZ2VzIGEgbmV3IGJ1ZmZlciBpcyByZXR1cm5lZCB0aGF0IGNvbnRhaW5zIGEgY29weSBvZgogICogdGhlIGFic29sdXRlIG1lbW9yeS4gVGhlIGJ1ZmZlciBzaXplIGlzIG1heGltdW0gb25lIHBhZ2UgbGFyZ2UuCiAgKi8KLXZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgYWRkcikKK3ZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IGFkZHIpCiB7CiAJdm9pZCAqYm91bmNlID0gKHZvaWQgKikgYWRkcjsKIAl1bnNpZ25lZCBsb25nIHNpemU7CkBAIC0xOTcsNyArMTk3LDcgQEAKIC8qCiAgKiBGcmVlIGNvbnZlcnRlZCBidWZmZXIgZm9yIC9kZXYvbWVtIGFjY2VzcyAoaWYgbmVjZXNzYXJ5KQogICovCi12b2lkIHVueGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWYpCit2b2lkIHVueGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgYWRkciwgdm9pZCAqYnVmKQogewogCWlmICgodm9pZCAqKSBhZGRyICE9IGJ1ZikKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3BjaS9wY2kuYyBiL2FyY2gvczM5MC9wY2kvcGNpLmMKaW5kZXggMmZhN2IxNC4uZDU5YzgyNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL3BjaS9wY2kuYworKysgYi9hcmNoL3MzOTAvcGNpL3BjaS5jCkBAIC01MCw4ICs1MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgenBjaV9pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJ6UENJIiwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX21hc2sgPSBwY2lfbXNpX21hc2tfaXJxLAogfTsKIAogc3RhdGljIERFQ0xBUkVfQklUTUFQKHpwY2lfZG9tYWluLCBaUENJX05SX0RFVklDRVMpOwpAQCAtNDAzLDcgKzQwMyw3IEBACiAJCW1zZy5kYXRhID0gaHdpcnE7CiAJCW1zZy5hZGRyZXNzX2xvID0gemRldi0+bXNpX2FkZHIgJiAweGZmZmZmZmZmOwogCQltc2cuYWRkcmVzc19oaSA9IHpkZXYtPm1zaV9hZGRyID4+IDMyOwotCQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAJCWFpcnFfaXZfc2V0X2RhdGEoemRldi0+YWlidiwgaHdpcnEsIGlycSk7CiAJCWh3aXJxKys7CiAJfQpAQCAtNDQ4LDkgKzQ0OCw5IEBACiAJLyogUmVsZWFzZSBNU0kgaW50ZXJydXB0cyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkobXNpLCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKIAkJaWYgKG1zaS0+bXNpX2F0dHJpYi5pc19tc2l4KQotCQkJZGVmYXVsdF9tc2l4X21hc2tfaXJxKG1zaSwgMSk7CisJCQlfX3BjaV9tc2l4X2Rlc2NfbWFza19pcnEobXNpLCAxKTsKIAkJZWxzZQotCQkJZGVmYXVsdF9tc2lfbWFza19pcnEobXNpLCAxLCAxKTsKKwkJCV9fcGNpX21zaV9kZXNjX21hc2tfaXJxKG1zaSwgMSwgMSk7CiAJCWlycV9zZXRfbXNpX2Rlc2MobXNpLT5pcnEsIE5VTEwpOwogCQlpcnFfZnJlZV9kZXNjKG1zaS0+aXJxKTsKIAkJbXNpLT5tc2cuYWRkcmVzc19sbyA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzMyLmgKaW5kZXggOWY1MzI5MC4uNDA3YWMxNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb18zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9fMzIuaApAQCAtNCwxMCArNCw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+ICAvKiBzdHJ1Y3QgcmVzb3VyY2UgKi8KIAotI2RlZmluZSByZWFkYl9yZWxheGVkKF9fYWRkcikJcmVhZGIoX19hZGRyKQotI2RlZmluZSByZWFkd19yZWxheGVkKF9fYWRkcikJcmVhZHcoX19hZGRyKQotI2RlZmluZSByZWFkbF9yZWxheGVkKF9fYWRkcikJcmVhZGwoX19hZGRyKQotCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAogI2RlZmluZSBtZW1zZXRfaW8oZCxjLHN6KSAgICAgX21lbXNldF9pbyhkLGMsc3opCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzY0LmgKaW5kZXggODBiNTRiMy4uOWI2NzJiZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb182NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9fNjQuaApAQCAtMTAxLDYgKzEwMSw3IEBACiAgKiB0aGUgY2FjaGUgYnkgdXNpbmcgQVNJX1BIWVNfQllQQVNTX0VDX0VfTAogICovCiAjZGVmaW5lIHJlYWRiIHJlYWRiCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQgcmVhZGIKIHN0YXRpYyBpbmxpbmUgdTggcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewl1OCByZXQ7CiAKQEAgLTExMiw2ICsxMTMsNyBAQAogfQogCiAjZGVmaW5lIHJlYWR3IHJlYWR3CisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQgcmVhZHcKIHN0YXRpYyBpbmxpbmUgdTE2IHJlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsJdTE2IHJldDsKIApAQCAtMTI0LDYgKzEyNiw3IEBACiB9CiAKICNkZWZpbmUgcmVhZGwgcmVhZGwKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZCByZWFkbAogc3RhdGljIGlubGluZSB1MzIgcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewl1MzIgcmV0OwogCkBAIC0xMzYsNiArMTM5LDcgQEAKIH0KIAogI2RlZmluZSByZWFkcSByZWFkcQorI2RlZmluZSByZWFkcV9yZWxheGVkIHJlYWRxCiBzdGF0aWMgaW5saW5lIHU2NCByZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CXU2NCByZXQ7CiAKQEAgLTE0OCw2ICsxNTIsNyBAQAogfQogCiAjZGVmaW5lIHdyaXRlYiB3cml0ZWIKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQgd3JpdGViCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGViKHU4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGViICovIgpAQCAtMTU3LDYgKzE2Miw3IEBACiB9CiAKICNkZWZpbmUgd3JpdGV3IHdyaXRldworI2RlZmluZSB3cml0ZXdfcmVsYXhlZCB3cml0ZXcKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXcodTE2IHcsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGV3ICovIgpAQCAtMTY2LDYgKzE3Miw3IEBACiB9CiAKICNkZWZpbmUgd3JpdGVsIHdyaXRlbAorI2RlZmluZSB3cml0ZWxfcmVsYXhlZCB3cml0ZWwKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWwodTMyIGwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGVsICovIgpAQCAtMTc1LDYgKzE4Miw3IEBACiB9CiAKICNkZWZpbmUgd3JpdGVxIHdyaXRlcQorI2RlZmluZSB3cml0ZXFfcmVsYXhlZCB3cml0ZXEKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXEodTY0IHEsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGVxICovIgpAQCAtMTgzLDcgKzE5MSw2IEBACiAJCQkgICAgIDogIm1lbW9yeSIpOwogfQogCi0KICNkZWZpbmUgaW5iIGluYgogc3RhdGljIGlubGluZSB1OCBpbmIodW5zaWduZWQgbG9uZyBhZGRyKQogewpAQCAtMjY0LDExICsyNzEsNiBAQAogCW91dHNsKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpcG9ydCwgYnVmLCBjb3VudCk7CiB9CiAKLSNkZWZpbmUgcmVhZGJfcmVsYXhlZChfX2FkZHIpCXJlYWRiKF9fYWRkcikKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZChfX2FkZHIpCXJlYWR3KF9fYWRkcikKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChfX2FkZHIpCXJlYWRsKF9fYWRkcikKLSNkZWZpbmUgcmVhZHFfcmVsYXhlZChfX2FkZHIpCXJlYWRxKF9fYWRkcikKLQogLyogVmFsaWQgSS9PIFNwYWNlIHJlZ2lvbnMgYXJlIGFueXdoZXJlLCBiZWNhdXNlIGVhY2ggUENJIGJ1cyBzdXBwb3J0ZWQKICAqIGNhbiBsaXZlIGluIGFuIGFyYml0cmFyeSBhcmVhIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfbXNpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfbXNpLmMKaW5kZXggNTgwNjUxYS4uODRlMTZkOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX21zaS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9tc2kuYwpAQCAtMTExLDEwICsxMTEsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfaXJxID0gewogCS5uYW1lCQk9ICJQQ0ktTVNJIiwKLQkuaXJxX21hc2sJPSBtYXNrX21zaV9pcnEsCi0JLmlycV91bm1hc2sJPSB1bm1hc2tfbXNpX2lycSwKLQkuaXJxX2VuYWJsZQk9IHVubWFza19tc2lfaXJxLAotCS5pcnFfZGlzYWJsZQk9IG1hc2tfbXNpX2lycSwKKwkuaXJxX21hc2sJPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZW5hYmxlCT0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZQk9IHBjaV9tc2lfbWFza19pcnEsCiAJLyogWFhYIGFmZmluaXR5IFhYWCAqLwogfTsKIApAQCAtMTYxLDcgKzE2MSw3IEBACiAJbXNnLmRhdGEgPSBtc2k7CiAKIAlpcnFfc2V0X21zaV9kZXNjKCppcnFfcCwgZW50cnkpOwotCXdyaXRlX21zaV9tc2coKmlycV9wLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZygqaXJxX3AsICZtc2cpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggOWZlNDM0OS4uZDM3MjY0MSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTI0MSw2ICsyNDEsMTAgQEAKICNkZWZpbmUgcmVhZHdfcmVsYXhlZCByZWFkdwogI2RlZmluZSByZWFkbF9yZWxheGVkIHJlYWRsCiAjZGVmaW5lIHJlYWRxX3JlbGF4ZWQgcmVhZHEKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQgd3JpdGViCisjZGVmaW5lIHdyaXRld19yZWxheGVkIHdyaXRldworI2RlZmluZSB3cml0ZWxfcmVsYXhlZCB3cml0ZWwKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQgd3JpdGVxCiAKICNkZWZpbmUgaW9yZWFkOCByZWFkYgogI2RlZmluZSBpb3JlYWQxNiByZWFkdwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9wY2lfZ3guYyBiL2FyY2gvdGlsZS9rZXJuZWwvcGNpX2d4LmMKaW5kZXggZTM5ZjljNS4uZTcxN2FmMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvcGNpX2d4LmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9wY2lfZ3guYwpAQCAtMTQ1Myw3ICsxNDUzLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGlsZWd4X21zaV9zdGFydHVwKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpZiAoZC0+bXNpX2Rlc2MpCi0JCXVubWFza19tc2lfaXJxKGQpOworCQlwY2lfbXNpX3VubWFza19pcnEoZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NjUsMTQgKzE0NjUsMTQgQEAKIAogc3RhdGljIHZvaWQgdGlsZWd4X21zaV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQltYXNrX21zaV9pcnEoZCk7CisJcGNpX21zaV9tYXNrX2lycShkKTsKIAlfX2luc25fbXRzcHIoU1BSX0lQSV9NQVNLX1NFVF9LLCAxVUwgPDwgZC0+aXJxKTsKIH0KIAogc3RhdGljIHZvaWQgdGlsZWd4X21zaV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCV9faW5zbl9tdHNwcihTUFJfSVBJX01BU0tfUkVTRVRfSywgMVVMIDw8IGQtPmlycSk7Ci0JdW5tYXNrX21zaV9pcnEoZCk7CisJcGNpX21zaV91bm1hc2tfaXJxKGQpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRpbGVneF9tc2lfY2hpcCA9IHsKQEAgLTE1OTAsNyArMTU5MCw3IEBACiAJbXNnLmFkZHJlc3NfaGkgPSBtc2lfYWRkciA+PiAzMjsKIAltc2cuYWRkcmVzc19sbyA9IG1zaV9hZGRyICYgMHhmZmZmZmZmZjsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZ0aWxlZ3hfbXNpX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOwogCWlycV9zZXRfaGFuZGxlcl9kYXRhKGlycSwgY29udHJvbGxlcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBhYTRhNzQzLi45NDE1MjdlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xMCw3ICsxMCwyNiBAQAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogZXh0ZXJuIHZvaWQgdW1sX3NldHVwX3N0dWJzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKy8qCisgKiBOZWVkZWQgc2luY2Ugd2UgZG8gbm90IHVzZSB0aGUgYXNtLWdlbmVyaWMvbW1faG9va3MuaDoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVtbF9zZXR1cF9zdHVicyhtbSk7Cit9CiBleHRlcm4gdm9pZCBhcmNoX2V4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9icHJtX21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKK30KKy8qCisgKiBlbmQgYXNtLWdlbmVyaWMvbW1faG9va3MuaCBmdW5jdGlvbnMKKyAqLwogCiAjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCiAKQEAgLTQxLDExICs2MCw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JdW1sX3NldHVwX3N0dWJzKG1tKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAKIAkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewpkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggZWY0NzBhNy4uMWNiNTIyMCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC04Niw0ICs4NiwxNSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2Jwcm1fbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IDQxYTUwM2MuLmJlYTNhMDE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTI0OCw2ICsyNDgsMTAgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBJTlRFTF9JT01NVSAmJiBBQ1BJCiAKK2NvbmZpZyBYODZfSU5URUxfTVBYCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTAorCiBjb25maWcgWDg2XzMyX1NNUAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBTTVAKQEAgLTk4OCw2ICs5OTIsMjQgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBYODZfMTZCSVQgJiYgWDg2XzY0CiAKK2NvbmZpZyBYODZfVlNZU0NBTExfRU1VTEFUSU9OCisgICAgICAgYm9vbCAiRW5hYmxlIHZzeXNjYWxsIGVtdWxhdGlvbiIgaWYgRVhQRVJUCisgICAgICAgZGVmYXVsdCB5CisgICAgICAgZGVwZW5kcyBvbiBYODZfNjQKKyAgICAgICAtLS1oZWxwLS0tCisJIFRoaXMgZW5hYmxlcyBlbXVsYXRpb24gb2YgdGhlIGxlZ2FjeSB2c3lzY2FsbCBwYWdlLiAgRGlzYWJsaW5nCisJIGl0IGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBib290aW5nIHdpdGggdnN5c2NhbGw9bm9uZSwgZXhjZXB0CisJIHRoYXQgaXQgd2lsbCBhbHNvIGRpc2FibGUgdGhlIGhlbHBmdWwgd2FybmluZyBpZiBhIHByb2dyYW0KKwkgdHJpZXMgdG8gdXNlIGEgdnN5c2NhbGwuICBXaXRoIHRoaXMgb3B0aW9uIHNldCB0byBOLCBvZmZlbmRpbmcKKwkgcHJvZ3JhbXMgd2lsbCBqdXN0IHNlZ2ZhdWx0LCBjaXRpbmcgYWRkcmVzc2VzIG9mIHRoZSBmb3JtCisJIDB4ZmZmZmZmZmZmZjYwMD8wMC4KKworCSBUaGlzIG9wdGlvbiBpcyByZXF1aXJlZCBieSBtYW55IHByb2dyYW1zIGJ1aWx0IGJlZm9yZSAyMDEzLCBhbmQKKwkgY2FyZSBzaG91bGQgYmUgdXNlZCBldmVuIHdpdGggbmV3ZXIgcHJvZ3JhbXMgaWYgc2V0IHRvIE4uCisKKwkgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHNhdmVzIGFib3V0IDdLIG9mIGtlcm5lbCBzaXplIGFuZAorCSBwb3NzaWJseSA0SyBvZiBhZGRpdGlvbmFsIHJ1bnRpbWUgcGFnZXRhYmxlIG1lbW9yeS4KKwogY29uZmlnIFRPU0hJQkEKIAl0cmlzdGF0ZSAiVG9zaGliYSBMYXB0b3Agc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFg4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDQ1YWJjMzYuLmQ5OTkzOTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTMsNiArMywxOCBAQAogIwogIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXggaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAogIworIyB2bWxpbnV6IGlzOgorIwlkZWNvbXByZXNzaW9uIGNvZGUgKCoubykKKyMJYXNtIGdsb2JhbHMgKHBpZ2d5LlMpLCBpbmNsdWRpbmc6CisjCQl2bWxpbnV4LmJpbi4oZ3p8YnoyfGx6bWF8Li4uKQorIworIyB2bWxpbnV4LmJpbiBpczoKKyMJdm1saW51eCBzdHJpcHBlZCBvZiBkZWJ1Z2dpbmcgYW5kIGNvbW1lbnRzCisjIHZtbGludXguYmluLmFsbCBpczoKKyMJdm1saW51eC5iaW4gKyB2bWxpbnV4LnJlbG9jcworIyB2bWxpbnV4LmJpbi4oZ3p8YnoyfGx6bWF8Li4uKSBpczoKKyMJKHNlZSBzY3JpcHRzL01ha2VmaWxlLmxpYiBzaXplX2FwcGVuZCkKKyMJY29tcHJlc3NlZCB2bWxpbnV4LmJpbi5hbGwgKyB1MzIgc2l6ZSBvZiB2bWxpbnV4LmJpbi5hbGwKIAogdGFyZ2V0cyA6PSB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIFwKIAl2bWxpbnV4LmJpbi54eiB2bWxpbnV4LmJpbi5sem8gdm1saW51eC5iaW4ubHo0CkBAIC0zNSw3ICs0Nyw4IEBACiAKICQob2JqKS9lYm9vdC5vOiBLQlVJTERfQ0ZMQUdTICs9IC1mc2hvcnQtd2NoYXIgLW1uby1yZWQtem9uZQogCi12bWxpbnV4LW9ianMtJChDT05GSUdfRUZJX1NUVUIpICs9ICQob2JqKS9lYm9vdC5vICQob2JqKS9lZmlfc3R1Yl8kKEJJVFMpLm8KK3ZtbGludXgtb2Jqcy0kKENPTkZJR19FRklfU1RVQikgKz0gJChvYmopL2Vib290Lm8gJChvYmopL2VmaV9zdHViXyQoQklUUykubyBcCisJJChvYmp0cmVlKS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2xpYi5hCiAKICQob2JqKS92bWxpbnV4OiAkKHZtbGludXgtb2Jqcy15KSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vib290LmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3QuYwppbmRleCAxYWNmNjA1Li45MmI5YTVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3QuYworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3QuYwpAQCAtMjEsOCArMjEsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBlZmlfY29uZmlnICplZmlfZWFybHk7CiAKLSNkZWZpbmUgZWZpX2NhbGxfZWFybHkoZiwgLi4uKQkJCQkJCVwKLQllZmlfZWFybHktPmNhbGwoZWZpX2Vhcmx5LT5mLCBfX1ZBX0FSR1NfXyk7CitfX3B1cmUgY29uc3Qgc3RydWN0IGVmaV9jb25maWcgKl9fZWZpX2Vhcmx5KHZvaWQpCit7CisJcmV0dXJuIGVmaV9lYXJseTsKK30KIAogI2RlZmluZSBCT09UX1NFUlZJQ0VTKGJpdHMpCQkJCQkJXAogc3RhdGljIHZvaWQgc2V0dXBfYm9vdF9zZXJ2aWNlcyMjYml0cyhzdHJ1Y3QgZWZpX2NvbmZpZyAqYykJCVwKQEAgLTI4NSw4ICsyODcsNiBAQAogCX0KIH0KIAotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMiCi0KIHN0YXRpYyB2b2lkIGZpbmRfYml0cyh1bnNpZ25lZCBsb25nIG1hc2ssIHU4ICpwb3MsIHU4ICpzaXplKQogewogCXU4IGZpcnN0LCBsZW47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3QuaCBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5oCmluZGV4IGM4OGMzMWUuLmQ0ODdlNzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5oCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5oCkBAIC0xMDMsMjAgKzEwMyw0IEBACiAJdm9pZCAqYmx0OwogfTsKIAotc3RydWN0IGVmaV9jb25maWcgewotCXU2NCBpbWFnZV9oYW5kbGU7Ci0JdTY0IHRhYmxlOwotCXU2NCBhbGxvY2F0ZV9wb29sOwotCXU2NCBhbGxvY2F0ZV9wYWdlczsKLQl1NjQgZ2V0X21lbW9yeV9tYXA7Ci0JdTY0IGZyZWVfcG9vbDsKLQl1NjQgZnJlZV9wYWdlczsKLQl1NjQgbG9jYXRlX2hhbmRsZTsKLQl1NjQgaGFuZGxlX3Byb3RvY29sOwotCXU2NCBleGl0X2Jvb3Rfc2VydmljZXM7Ci0JdTY0IHRleHRfb3V0cHV0OwotCWVmaV9zdGF0dXNfdCAoKmNhbGwpKHVuc2lnbmVkIGxvbmcsIC4uLik7Ci0JYm9vbCBpczY0OwotfSBfX3BhY2tlZDsKLQogI2VuZGlmIC8qIEJPT1RfQ09NUFJFU1NFRF9FQk9PVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAzMGRkNTlhLi5kY2MxYzUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCiAJLyoKIAkgKiBQcm9jZXNzIHJlbG9jYXRpb25zOiAzMiBiaXQgcmVsb2NhdGlvbnMgZmlyc3QgdGhlbiA2NCBiaXQgYWZ0ZXIuCi0JICogVHdvIHNldHMgb2YgYmluYXJ5IHJlbG9jYXRpb25zIGFyZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBrZXJuZWwKKwkgKiBUaHJlZSBzZXRzIG9mIGJpbmFyeSByZWxvY2F0aW9ucyBhcmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUga2VybmVsCiAJICogYmVmb3JlIGNvbXByZXNzaW9uLiBFYWNoIHJlbG9jYXRpb24gdGFibGUgZW50cnkgaXMgdGhlIGtlcm5lbAogCSAqIGFkZHJlc3Mgb2YgdGhlIGxvY2F0aW9uIHdoaWNoIG5lZWRzIHRvIGJlIHVwZGF0ZWQgc3RvcmVkIGFzIGEKIAkgKiAzMi1iaXQgdmFsdWUgd2hpY2ggaXMgc2lnbiBleHRlbmRlZCB0byA2NCBiaXRzLgpAQCAtMjcwLDYgKzI3MCw4IEBACiAJICoga2VybmVsIGJpdHMuLi4KIAkgKiAwIC0gemVybyB0ZXJtaW5hdG9yIGZvciA2NCBiaXQgcmVsb2NhdGlvbnMKIAkgKiA2NCBiaXQgcmVsb2NhdGlvbiByZXBlYXRlZAorCSAqIDAgLSB6ZXJvIHRlcm1pbmF0b3IgZm9yIGludmVyc2UgMzIgYml0IHJlbG9jYXRpb25zCisJICogMzIgYml0IGludmVyc2UgcmVsb2NhdGlvbiByZXBlYXRlZAogCSAqIDAgLSB6ZXJvIHRlcm1pbmF0b3IgZm9yIDMyIGJpdCByZWxvY2F0aW9ucwogCSAqIDMyIGJpdCByZWxvY2F0aW9uIHJlcGVhdGVkCiAJICoKQEAgLTI4Niw2ICsyODgsMTYgQEAKIAkJKih1aW50MzJfdCAqKXB0ciArPSBkZWx0YTsKIAl9CiAjaWZkZWYgQ09ORklHX1g4Nl82NAorCXdoaWxlICgqLS1yZWxvYykgeworCQlsb25nIGV4dGVuZGVkID0gKnJlbG9jOworCQlleHRlbmRlZCArPSBtYXA7CisKKwkJcHRyID0gKHVuc2lnbmVkIGxvbmcpZXh0ZW5kZWQ7CisJCWlmIChwdHIgPCBtaW5fYWRkciB8fCBwdHIgPiBtYXhfYWRkcikKKwkJCWVycm9yKCJpbnZlcnNlIDMyLWJpdCByZWxvY2F0aW9uIG91dHNpZGUgb2Yga2VybmVsIVxuIik7CisKKwkJKihpbnQzMl90ICopcHRyIC09IGRlbHRhOworCX0KIAlmb3IgKHJlbG9jLS07ICpyZWxvYzsgcmVsb2MtLSkgewogCQlsb25nIGV4dGVuZGVkID0gKnJlbG9jOwogCQlleHRlbmRlZCArPSBtYXA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwppbmRleCAzMmQyZTcwLi40MTk4MTlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKQEAgLTgsNiArOCw3IEBACiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKIENPTkZJR19UQVNLX1hBQ0NUPXkKIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQorQ09ORklHX0ZIQU5ETEU9eQogQ09ORklHX0FVRElUPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZyBiL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZwppbmRleCBhNDgxZGQ0Li40YzMxMWRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKKysrIGIvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCkBAIC03LDYgKzcsNyBAQAogQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CiBDT05GSUdfVEFTS19YQUNDVD15CiBDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HPXkKK0NPTkZJR19GSEFORExFPXkKIENPTkZJR19BVURJVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggOTg2M2VlMy4uNDdjOGUzMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNSw2NSArNSw2IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zcGVjaWFsX2luc25zLmg+CiAKLSNpZmRlZiBDT05GSUdfWDg2X1BBVAotLyoKLSAqIFg4NiBQQVQgdXNlcyBwYWdlIGZsYWdzIFdDIGFuZCBVbmNhY2hlZCB0b2dldGhlciB0byBrZWVwIHRyYWNrIG9mCi0gKiBtZW1vcnkgdHlwZSBvZiBwYWdlcyB0aGF0IGhhdmUgYmFja2luZyBwYWdlIHN0cnVjdC4gWDg2IFBBVCBzdXBwb3J0cyAzCi0gKiBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzLCBfUEFHRV9DQUNIRV9XQiwgX1BBR0VfQ0FDSEVfV0MgYW5kCi0gKiBfUEFHRV9DQUNIRV9VQ19NSU5VUyBhbmQgZm91cnRoIHN0YXRlIHdoZXJlIHBhZ2UncyBtZW1vcnkgdHlwZSBoYXMgbm90Ci0gKiBiZWVuIGNoYW5nZWQgZnJvbSBpdHMgZGVmYXVsdCAodmFsdWUgb2YgLTEgdXNlZCB0byBkZW5vdGUgdGhpcykuCi0gKiBOb3RlIHdlIGRvIG5vdCBzdXBwb3J0IF9QQUdFX0NBQ0hFX1VDIGhlcmUuCi0gKi8KLQotI2RlZmluZSBfUEdNVF9ERUZBVUxUCQkwCi0jZGVmaW5lIF9QR01UX1dDCQkoMVVMIDw8IFBHX2FyY2hfMSkKLSNkZWZpbmUgX1BHTVRfVUNfTUlOVVMJCSgxVUwgPDwgUEdfdW5jYWNoZWQpCi0jZGVmaW5lIF9QR01UX1dCCQkoMVVMIDw8IFBHX3VuY2FjaGVkIHwgMVVMIDw8IFBHX2FyY2hfMSkKLSNkZWZpbmUgX1BHTVRfTUFTSwkJKDFVTCA8PCBQR191bmNhY2hlZCB8IDFVTCA8PCBQR19hcmNoXzEpCi0jZGVmaW5lIF9QR01UX0NMRUFSX01BU0sJKH5fUEdNVF9NQVNLKQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3BhZ2VfbWVtdHlwZShzdHJ1Y3QgcGFnZSAqcGcpCi17Ci0JdW5zaWduZWQgbG9uZyBwZ19mbGFncyA9IHBnLT5mbGFncyAmIF9QR01UX01BU0s7Ci0KLQlpZiAocGdfZmxhZ3MgPT0gX1BHTVRfREVGQVVMVCkKLQkJcmV0dXJuIC0xOwotCWVsc2UgaWYgKHBnX2ZsYWdzID09IF9QR01UX1dDKQotCQlyZXR1cm4gX1BBR0VfQ0FDSEVfV0M7Ci0JZWxzZSBpZiAocGdfZmxhZ3MgPT0gX1BHTVRfVUNfTUlOVVMpCi0JCXJldHVybiBfUEFHRV9DQUNIRV9VQ19NSU5VUzsKLQllbHNlCi0JCXJldHVybiBfUEFHRV9DQUNIRV9XQjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX21lbXR5cGUoc3RydWN0IHBhZ2UgKnBnLCB1bnNpZ25lZCBsb25nIG1lbXR5cGUpCi17Ci0JdW5zaWduZWQgbG9uZyBtZW10eXBlX2ZsYWdzID0gX1BHTVRfREVGQVVMVDsKLQl1bnNpZ25lZCBsb25nIG9sZF9mbGFnczsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFnczsKLQotCXN3aXRjaCAobWVtdHlwZSkgewotCWNhc2UgX1BBR0VfQ0FDSEVfV0M6Ci0JCW1lbXR5cGVfZmxhZ3MgPSBfUEdNVF9XQzsKLQkJYnJlYWs7Ci0JY2FzZSBfUEFHRV9DQUNIRV9VQ19NSU5VUzoKLQkJbWVtdHlwZV9mbGFncyA9IF9QR01UX1VDX01JTlVTOwotCQlicmVhazsKLQljYXNlIF9QQUdFX0NBQ0hFX1dCOgotCQltZW10eXBlX2ZsYWdzID0gX1BHTVRfV0I7Ci0JCWJyZWFrOwotCX0KLQotCWRvIHsKLQkJb2xkX2ZsYWdzID0gcGctPmZsYWdzOwotCQluZXdfZmxhZ3MgPSAob2xkX2ZsYWdzICYgX1BHTVRfQ0xFQVJfTUFTSykgfCBtZW10eXBlX2ZsYWdzOwotCX0gd2hpbGUgKGNtcHhjaGcoJnBnLT5mbGFncywgb2xkX2ZsYWdzLCBuZXdfZmxhZ3MpICE9IG9sZF9mbGFncyk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9wYWdlX21lbXR5cGUoc3RydWN0IHBhZ2UgKnBnKSB7IHJldHVybiAtMTsgfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX21lbXR5cGUoc3RydWN0IHBhZ2UgKnBnLCB1bnNpZ25lZCBsb25nIG1lbXR5cGUpIHsgfQotI2VuZGlmCi0KIC8qCiAgKiBUaGUgc2V0X21lbW9yeV8qIEFQSSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdmFyaW91cyBhdHRyaWJ1dGVzIG9mIGEgdmlydHVhbAogICogYWRkcmVzcyByYW5nZS4gVGhlIGF0dHJpYnV0ZXMgaW5jbHVkZToKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rpc2FibGVkLWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kaXNhYmxlZC1mZWF0dXJlcy5oCmluZGV4IDk3NTM0YTcuLmYyMjZkZjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rpc2FibGVkLWZlYXR1cmVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGlzYWJsZWQtZmVhdHVyZXMuaApAQCAtMTAsNiArMTAsMTIgQEAKICAqIGNwdV9mZWF0dXJlX2VuYWJsZWQoKS4KICAqLwogCisjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9NUFgKKyMgZGVmaW5lIERJU0FCTEVfTVBYCTAKKyNlbHNlCisjIGRlZmluZSBESVNBQkxFX01QWAkoMTw8KFg4Nl9GRUFUVVJFX01QWCAmIDMxKSkKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogIyBkZWZpbmUgRElTQUJMRV9WTUUJCSgxPDwoWDg2X0ZFQVRVUkVfVk1FICYgMzEpKQogIyBkZWZpbmUgRElTQUJMRV9LNl9NVFJSCSgxPDwoWDg2X0ZFQVRVUkVfSzZfTVRSUiAmIDMxKSkKQEAgLTM0LDYgKzQwLDYgQEAKICNkZWZpbmUgRElTQUJMRURfTUFTSzYJMAogI2RlZmluZSBESVNBQkxFRF9NQVNLNwkwCiAjZGVmaW5lIERJU0FCTEVEX01BU0s4CTAKLSNkZWZpbmUgRElTQUJMRURfTUFTSzkJMAorI2RlZmluZSBESVNBQkxFRF9NQVNLOQkoRElTQUJMRV9NUFgpCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9ESVNBQkxFRF9GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oCmluZGV4IDliMTE3NTcuLjI1YmNlNDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oCkBAIC0xNTgsNiArMTU4LDMwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0VGSV9NSVhFRCAqLwogCisKKy8qIGFyY2ggc3BlY2lmaWMgZGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgc3R1YiBjb2RlICovCisKK3N0cnVjdCBlZmlfY29uZmlnIHsKKwl1NjQgaW1hZ2VfaGFuZGxlOworCXU2NCB0YWJsZTsKKwl1NjQgYWxsb2NhdGVfcG9vbDsKKwl1NjQgYWxsb2NhdGVfcGFnZXM7CisJdTY0IGdldF9tZW1vcnlfbWFwOworCXU2NCBmcmVlX3Bvb2w7CisJdTY0IGZyZWVfcGFnZXM7CisJdTY0IGxvY2F0ZV9oYW5kbGU7CisJdTY0IGhhbmRsZV9wcm90b2NvbDsKKwl1NjQgZXhpdF9ib290X3NlcnZpY2VzOworCXU2NCB0ZXh0X291dHB1dDsKKwllZmlfc3RhdHVzX3QgKCpjYWxsKSh1bnNpZ25lZCBsb25nLCAuLi4pOworCWJvb2wgaXM2NDsKK30gX19wYWNrZWQ7CisKK19fcHVyZSBjb25zdCBzdHJ1Y3QgZWZpX2NvbmZpZyAqX19lZmlfZWFybHkodm9pZCk7CisKKyNkZWZpbmUgZWZpX2NhbGxfZWFybHkoZiwgLi4uKQkJCQkJCVwKKwlfX2VmaV9lYXJseSgpLT5jYWxsKF9fZWZpX2Vhcmx5KCktPmYsIF9fVkFfQVJHU19fKTsKKwogZXh0ZXJuIGJvb2wgZWZpX3JlYm9vdF9yZXF1aXJlZCh2b2lkKTsKIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mYi5oCmluZGV4IDI1MTlkMDYuLmMzZGQ1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaApAQCAtOCw4ICs4LDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZmJfcGdwcm90ZWN0KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQl1bnNpZ25lZCBsb25nIG9mZikKIHsKKwl1bnNpZ25lZCBsb25nIHByb3Q7CisKKwlwcm90ID0gcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJiB+X1BBR0VfQ0FDSEVfTUFTSzsKIAlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQotCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9QQ0Q7CisJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpID0KKwkJCXByb3QgfCBjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKTsKIH0KIAogZXh0ZXJuIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IGZmYjE3MzMuLmY4MGQ3MDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC02OSw3ICs2OSw5IEBACiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCUZJWF9IT0xFLAogI2Vsc2UKKyNpZmRlZiBDT05GSUdfWDg2X1ZTWVNDQUxMX0VNVUxBVElPTgogCVZTWVNDQUxMX1BBR0UgPSAoRklYQUREUl9UT1AgLSBWU1lTQ0FMTF9BRERSKSA+PiBQQUdFX1NISUZULAorI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX0NMT0NLCiAJUFZDTE9DS19GSVhNQVBfQkVHSU4sCiAJUFZDTE9DS19GSVhNQVBfRU5EID0gUFZDTE9DS19GSVhNQVBfQkVHSU4rUFZDTE9DS19WU1lTQ0FMTF9OUl9QQUdFUy0xLApAQCAtMTM2LDkgKzEzOCw3IEBACiBleHRlcm4gdm9pZCByZXNlcnZlX3RvcF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZSk7CiAKICNkZWZpbmUgRklYQUREUl9TSVpFCShfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIEZJWEFERFJfQk9PVF9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgRklYQUREUl9TVEFSVAkJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TSVpFKQotI2RlZmluZSBGSVhBRERSX0JPT1RfU1RBUlQJKEZJWEFERFJfVE9QIC0gRklYQUREUl9CT09UX1NJWkUpCiAKIGV4dGVybiBpbnQgZml4bWFwc19zZXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaAppbmRleCAzMDJhMzIzLi4wNGU5ZDAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCkBAIC0zOCwxNyArMzgsMjAgQEAKIC8qCiAgKiBPcmRlcmluZyBpczoKICAqCi0gKiBGSVhBRERSX1RPUAotICogCQkJZml4ZWRfYWRkcmVzc2VzCi0gKiBGSVhBRERSX1NUQVJUCi0gKiAJCQl0ZW1wIGZpeGVkIGFkZHJlc3NlcwotICogRklYQUREUl9CT09UX1NUQVJUCi0gKiAJCQlQZXJzaXN0ZW50IGttYXAgYXJlYQotICogUEtNQVBfQkFTRQotICogVk1BTExPQ19FTkQKLSAqIAkJCVZtYWxsb2MgYXJlYQotICogVk1BTExPQ19TVEFSVAotICogaGlnaF9tZW1vcnkKKyAqIGhpZ2ggbWVtb3J5IG9uOgkJCSAgICAgICAgICAgICAgaGlnaF9tZW1vcnkgb2ZmOgorICogICAgRklYQUREUl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYQUREUl9UT1AKKyAqICAgICAgICBmaXhlZCBhZGRyZXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZCBhZGRyZXNzZXMKKyAqICAgIEZJWEFERFJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWEFERFJfU1RBUlQKKyAqICAgICAgICB0ZW1wIGZpeGVkIGFkZHJlc3Nlcy9wZXJzaXN0ZW50IGttYXAgYXJlYSAgICAgIFZNQUxMT0NfRU5ECisgKiAgICBQS01BUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCBmaXhlZCBhZGRyZXNzZXMvdm1hbGxvYyBhcmVhCisgKiAgICBWTUFMTE9DX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWTUFMTE9DX1NUQVJUCisgKiAgICAgICAgdm1hbGxvYyBhcmVhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoX21lbW9yeQorICogICAgVk1BTExPQ19TVEFSVAorICogICAgaGlnaF9tZW1vcnkKKyAqCisgKiBUaGUgdGVtcCBmaXhlZCBhcmVhIGlzIG9ubHkgdXNlZCBkdXJpbmcgYm9vdCBmb3IgZWFybHlfaW9yZW1hcCgpLCBhbmQKKyAqIGl0IGlzIHVudXNlZCB3aGVuIHRoZSBpb3JlbWFwKCkgaXMgZnVuY3Rpb25hbC4gdm1hbGxvYy9wa21hcCBhcmVhIGJlY29tZQorICogYXZhaWxhYmxlIGFmdGVyIGVhcmx5IGJvb3Qgc28gdGhlIHRlbXAgZml4ZWQgYXJlYSBpcyBhdmFpbGFibGUgZm9yIHJlLXVzZS4KICAqLwogI2RlZmluZSBMQVNUX1BLTUFQX01BU0sgKExBU1RfUEtNQVAtMSkKICNkZWZpbmUgUEtNQVBfTlIodmlydCkgICgodmlydC1QS01BUF9CQVNFKSA+PiBQQUdFX1NISUZUKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5zbi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5zbi5oCmluZGV4IDQ4ZWIzMGEuLjQ3ZjI5YjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luc24uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnNuLmgKQEAgLTY1LDYgKzY1LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHg4Nl82NDsKIAogCWNvbnN0IGluc25fYnl0ZV90ICprYWRkcjsJLyoga2VybmVsIGFkZHJlc3Mgb2YgaW5zbiB0byBhbmFseXplICovCisJY29uc3QgaW5zbl9ieXRlX3QgKmVuZF9rYWRkcjsJLyoga2VybmVsIGFkZHJlc3Mgb2YgbGFzdCBpbnNuIGluIGJ1ZmZlciAqLwogCWNvbnN0IGluc25fYnl0ZV90ICpuZXh0X2J5dGU7CiB9OwogCkBAIC05Niw3ICs5Nyw3IEBACiAjZGVmaW5lIFg4Nl9WRVhfUCh2ZXgpCSgodmV4KSAmIDB4MDMpCQkvKiBWRVgzIEJ5dGUyLCBWRVgyIEJ5dGUxICovCiAjZGVmaW5lIFg4Nl9WRVhfTV9NQVgJMHgxZgkJCS8qIFZFWDMuTSBNYXhpbXVtIHZhbHVlICovCiAKLWV4dGVybiB2b2lkIGluc25faW5pdChzdHJ1Y3QgaW5zbiAqaW5zbiwgY29uc3Qgdm9pZCAqa2FkZHIsIGludCB4ODZfNjQpOworZXh0ZXJuIHZvaWQgaW5zbl9pbml0KHN0cnVjdCBpbnNuICppbnNuLCBjb25zdCB2b2lkICprYWRkciwgaW50IGJ1Zl9sZW4sIGludCB4ODZfNjQpOwogZXh0ZXJuIHZvaWQgaW5zbl9nZXRfcHJlZml4ZXMoc3RydWN0IGluc24gKmluc24pOwogZXh0ZXJuIHZvaWQgaW5zbl9nZXRfb3Bjb2RlKHN0cnVjdCBpbnNuICppbnNuKTsKIGV4dGVybiB2b2lkIGluc25fZ2V0X21vZHJtKHN0cnVjdCBpbnNuICppbnNuKTsKQEAgLTExNSwxMiArMTE2LDEzIEBACiBleHRlcm4gaW50IGluc25fcmlwX3JlbGF0aXZlKHN0cnVjdCBpbnNuICppbnNuKTsKIAogLyogSW5pdCBpbnNuIGZvciBrZXJuZWwgdGV4dCAqLwotc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbF9pbnNuX2luaXQoc3RydWN0IGluc24gKmluc24sIGNvbnN0IHZvaWQgKmthZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbF9pbnNuX2luaXQoc3RydWN0IGluc24gKmluc24sCisJCQkJICAgIGNvbnN0IHZvaWQgKmthZGRyLCBpbnQgYnVmX2xlbikKIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JaW5zbl9pbml0KGluc24sIGthZGRyLCAxKTsKKwlpbnNuX2luaXQoaW5zbiwga2FkZHIsIGJ1Zl9sZW4sIDEpOwogI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwotCWluc25faW5pdChpbnNuLCBrYWRkciwgMCk7CisJaW5zbl9pbml0KGluc24sIGthZGRyLCBidWZfbGVuLCAwKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaAppbmRleCBiODIzN2Q4Li4zNGE1YjkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKQEAgLTc0LDYgKzc0LDkgQEAKICNkZWZpbmUgX19yYXdfcmVhZHcgX19yZWFkdwogI2RlZmluZSBfX3Jhd19yZWFkbCBfX3JlYWRsCiAKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQodiwgYSkgX193cml0ZWIodiwgYSkKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQodiwgYSkgX193cml0ZXcodiwgYSkKKyNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQodiwgYSkgX193cml0ZWwodiwgYSkKICNkZWZpbmUgX19yYXdfd3JpdGViIF9fd3JpdGViCiAjZGVmaW5lIF9fcmF3X3dyaXRldyBfX3dyaXRldwogI2RlZmluZSBfX3Jhd193cml0ZWwgX193cml0ZWwKQEAgLTg2LDYgKzg5LDcgQEAKIGJ1aWxkX21taW9fd3JpdGUod3JpdGVxLCAicSIsIHVuc2lnbmVkIGxvbmcsICJyIiwgOiJtZW1vcnkiKQogCiAjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYSkJcmVhZHEoYSkKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQodiwgYSkJd3JpdGVxKHYsIGEpCiAKICNkZWZpbmUgX19yYXdfcmVhZHEoYSkJCXJlYWRxKGEpCiAjZGVmaW5lIF9fcmF3X3dyaXRlcSh2YWwsIGFkZHIpCXdyaXRlcSh2YWwsIGFkZHIpCkBAIC0zMTAsMTEgKzMxNCwxMSBAQAogQlVJTERJTyh3LCB3LCBzaG9ydCkKIEJVSUxESU8obCwgLCBpbnQpCiAKLWV4dGVybiB2b2lkICp4bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMpOwotZXh0ZXJuIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgKmFkZHIpOworZXh0ZXJuIHZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IHBoeXMpOworZXh0ZXJuIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cihwaHlzX2FkZHJfdCBwaHlzLCB2b2lkICphZGRyKTsKIAogZXh0ZXJuIGludCBpb3JlbWFwX2NoYW5nZV9hdHRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQl1bnNpZ25lZCBsb25nIHByb3RfdmFsKTsKKwkJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY20pOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF93YyhyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiBleHRlcm4gYm9vbCBpc19lYXJseV9pb3JlbWFwX3B0ZXAocHRlX3QgKnB0ZXApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAppbmRleCA5NThiOTBmLi41MWIyNmU4OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKQEAgLTM0LDYgKzM0LDEwIEBACiAjZGVmaW5lIE1DSV9TVEFUVVNfUwkgKDFVTEw8PDU2KSAgLyogU2lnbmFsZWQgbWFjaGluZSBjaGVjayAqLwogI2RlZmluZSBNQ0lfU1RBVFVTX0FSCSAoMVVMTDw8NTUpICAvKiBBY3Rpb24gcmVxdWlyZWQgKi8KIAorLyogQU1ELXNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgTUNJX1NUQVRVU19ERUZFUlJFRAkoMVVMTDw8NDQpICAvKiBkZWNsYXJlIGFuIHVuY29ycmVjdGVkIGVycm9yICovCisjZGVmaW5lIE1DSV9TVEFUVVNfUE9JU09OCSgxVUxMPDw0MykgIC8qIGFjY2VzcyBwb2lzb25vdXMgZGF0YSAqLworCiAvKgogICogTm90ZSB0aGF0IHRoZSBmdWxsIE1DQUNPRCBmaWVsZCBvZiBJQTMyX01DaV9TVEFUVVMgTVNSIGlzCiAgKiBiaXRzIDE1OjAuICBCdXQgYml0IDEyIGlzIHRoZSAnRicgYml0LCBkZWZpbmVkIGZvciBjb3JyZWN0ZWQKQEAgLTc4LDcgKzgyLDYgQEAKIC8qIFNvZnR3YXJlIGRlZmluZWQgYmFua3MgKi8KICNkZWZpbmUgTUNFX0VYVEVOREVEX0JBTksJMTI4CiAjZGVmaW5lIE1DRV9USEVSTUFMX0JBTksJKE1DRV9FWFRFTkRFRF9CQU5LICsgMCkKLSNkZWZpbmUgSzhfTUNFX1RIUkVTSE9MRF9CQVNFICAgKE1DRV9FWFRFTkRFRF9CQU5LICsgMSkKIAogI2RlZmluZSBNQ0VfTE9HX0xFTiAzMgogI2RlZmluZSBNQ0VfTE9HX1NJR05BVFVSRQkiTUFDSElORUNIRUNLIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaAppbmRleCA2NGRjMzYyLi4yMDFiNTIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaApAQCAtNzgsNiArNzgsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGxvYWRfdWNvZGVfYnNwKHZvaWQpOwogZXh0ZXJuIHZvaWQgbG9hZF91Y29kZV9hcCh2b2lkKTsKIGV4dGVybiBpbnQgX19pbml0IHNhdmVfbWljcm9jb2RlX2luX2luaXRyZCh2b2lkKTsKK3ZvaWQgcmVsb2FkX2Vhcmx5X21pY3JvY29kZSh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGxvYWRfdWNvZGVfYnNwKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF91Y29kZV9hcCh2b2lkKSB7fQpAQCAtODUsNiArODYsNyBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSB2b2lkIHJlbG9hZF9lYXJseV9taWNyb2NvZGUodm9pZCkge30KICNlbmRpZgogCiAjZW5kaWYgLyogX0FTTV9YODZfTUlDUk9DT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9hbWQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9hbWQuaAppbmRleCBiN2IxMGI4Li5hZjkzNTM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGVfYW1kLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlX2FtZC5oCkBAIC01OSw3ICs1OSw3IEBACiAKIGV4dGVybiBpbnQgX19hcHBseV9taWNyb2NvZGVfYW1kKHN0cnVjdCBtaWNyb2NvZGVfYW1kICptY19hbWQpOwogZXh0ZXJuIGludCBhcHBseV9taWNyb2NvZGVfYW1kKGludCBjcHUpOwotZXh0ZXJuIGVudW0gdWNvZGVfc3RhdGUgbG9hZF9taWNyb2NvZGVfYW1kKHU4IGZhbWlseSwgY29uc3QgdTggKmRhdGEsIHNpemVfdCBzaXplKTsKK2V4dGVybiBlbnVtIHVjb2RlX3N0YXRlIGxvYWRfbWljcm9jb2RlX2FtZChpbnQgY3B1LCB1OCBmYW1pbHksIGNvbnN0IHU4ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CiAKICNkZWZpbmUgUEFUQ0hfTUFYX1NJWkUgUEFHRV9TSVpFCiBleHRlcm4gdTggYW1kX3Vjb2RlX3BhdGNoW1BBVENIX01BWF9TSVpFXTsKQEAgLTY4LDEwICs2OCwxMiBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGxvYWRfdWNvZGVfYW1kX2JzcCh2b2lkKTsKIGV4dGVybiB2b2lkIGxvYWRfdWNvZGVfYW1kX2FwKHZvaWQpOwogZXh0ZXJuIGludCBfX2luaXQgc2F2ZV9taWNyb2NvZGVfaW5faW5pdHJkX2FtZCh2b2lkKTsKK3ZvaWQgcmVsb2FkX3Vjb2RlX2FtZCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGxvYWRfdWNvZGVfYW1kX2JzcCh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGxvYWRfdWNvZGVfYW1kX2FwKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIGludCBfX2luaXQgc2F2ZV9taWNyb2NvZGVfaW5faW5pdHJkX2FtZCh2b2lkKSB7IHJldHVybiAtRUlOVkFMOyB9Cit2b2lkIHJlbG9hZF91Y29kZV9hbWQodm9pZCkge30KICNlbmRpZgogCiAjZW5kaWYgLyogX0FTTV9YODZfTUlDUk9DT0RFX0FNRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGVfaW50ZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9pbnRlbC5oCmluZGV4IGJiZTI5NmUuLmRkNGMyMDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9pbnRlbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9pbnRlbC5oCkBAIC02OCwxMSArNjgsMTMgQEAKIGV4dGVybiB2b2lkIGxvYWRfdWNvZGVfaW50ZWxfYXAodm9pZCk7CiBleHRlcm4gdm9pZCBzaG93X3Vjb2RlX2luZm9fZWFybHkodm9pZCk7CiBleHRlcm4gaW50IF9faW5pdCBzYXZlX21pY3JvY29kZV9pbl9pbml0cmRfaW50ZWwodm9pZCk7Cit2b2lkIHJlbG9hZF91Y29kZV9pbnRlbCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIF9faW5pdCB2b2lkIGxvYWRfdWNvZGVfaW50ZWxfYnNwKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF91Y29kZV9pbnRlbF9hcCh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIHNob3dfdWNvZGVfaW5mb19lYXJseSh2b2lkKSB7fQogc3RhdGljIGlubGluZSBpbnQgX19pbml0IHNhdmVfbWljcm9jb2RlX2luX2luaXRyZF9pbnRlbCh2b2lkKSB7IHJldHVybiAtRUlOVkFMOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVsb2FkX3Vjb2RlX2ludGVsKHZvaWQpIHt9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01JQ1JPQ09ERV9JTlRFTF9FQVJMWSkgJiYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCAxNjZhZjJhLi40MDI2OWEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTEwLDkgKzEwLDggQEAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2luY2x1ZGUgPGFzbS9tcHguaD4KICNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1faG9va3MuaD4KLQogc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCiAJCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpCiB7CkBAIC01Myw3ICs1MiwxNiBAQAogCQkvKiBTdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLwogCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2socHJldikpOwogCi0JCS8qIExvYWQgdGhlIExEVCwgaWYgdGhlIExEVCBpcyBkaWZmZXJlbnQ6ICovCisJCS8qCisJCSAqIExvYWQgdGhlIExEVCwgaWYgdGhlIExEVCBpcyBkaWZmZXJlbnQuCisJCSAqCisJCSAqIEl0J3MgcG9zc2libGUgbGVhdmVfbW0ocHJldikgaGFzIGJlZW4gY2FsbGVkLiAgSWYgc28sCisJCSAqIHRoZW4gcHJldi0+Y29udGV4dC5sZHQgY291bGQgYmUgb3V0IG9mIHN5bmMgd2l0aCB0aGUKKwkJICogTERUIGRlc2NyaXB0b3Igb3IgdGhlIExEVCByZWdpc3Rlci4gIFRoaXMgY2FuIG9ubHkgaGFwcGVuCisJCSAqIGlmIHByZXYtPmNvbnRleHQubGR0IGlzIG5vbi1udWxsLCBzaW5jZSB3ZSBuZXZlciBmcmVlCisJCSAqIGFuIExEVC4gIEJ1dCBMRFRzIGNhbid0IGJlIHNoYXJlZCBhY3Jvc3MgbW1zLCBzbworCQkgKiBwcmV2LT5jb250ZXh0LmxkdCB3b24ndCBiZSBlcXVhbCB0byBuZXh0LT5jb250ZXh0LmxkdC4KKwkJICovCiAJCWlmICh1bmxpa2VseShwcmV2LT5jb250ZXh0LmxkdCAhPSBuZXh0LT5jb250ZXh0LmxkdCkpCiAJCQlsb2FkX0xEVF9ub2xvY2soJm5leHQtPmNvbnRleHQpOwogCX0KQEAgLTEwMiw0ICsxMTAsMjcgQEAKIH0gd2hpbGUgKDApCiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0sCisJCQkJIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXBhcmF2aXJ0X2FyY2hfZHVwX21tYXAob2xkbW0sIG1tKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXBhcmF2aXJ0X2FyY2hfZXhpdF9tbWFwKG1tKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfYnBybV9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwltcHhfbW1faW5pdChtbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3VubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCW1weF9ub3RpZnlfdW5tYXAobW0sIHZtYSwgc3RhcnQsIGVuZCk7Cit9CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21weC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTJhMTNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXB4LmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgX0FTTV9YODZfTVBYX0gKKyNkZWZpbmUgX0FTTV9YODZfTVBYX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9pbnNuLmg+CisKKy8qCisgKiBOVUxMIGlzIHRoZW9yZXRpY2FsbHkgYSB2YWxpZCBwbGFjZSB0byBwdXQgdGhlIGJvdW5kcworICogZGlyZWN0b3J5LCBzbyBwb2ludCB0aGlzIGF0IGFuIGludmFsaWQgYWRkcmVzcy4KKyAqLworI2RlZmluZSBNUFhfSU5WQUxJRF9CT1VORFNfRElSCSgodm9pZCBfX3VzZXIgKiktMSkKKyNkZWZpbmUgTVBYX0JORENGR19FTkFCTEVfRkxBRwkweDEKKyNkZWZpbmUgTVBYX0JEX0VOVFJZX1ZBTElEX0ZMQUcJMHgxCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisKKy8qIHVwcGVyIDI4IGJpdHMgWzQ3OjIwXSBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIGluIDY0LWJpdCB1c2VkIHRvCisgKiBpbmRleCBpbnRvIGJvdW5kcyBkaXJlY3RvcnkgKEJEKS4KKyAqLworI2RlZmluZSBNUFhfQkRfRU5UUllfT0ZGU0VUCTI4CisjZGVmaW5lIE1QWF9CRF9FTlRSWV9TSElGVAkzCisvKiBiaXRzIFsxOTozXSBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIGluIDY0LWJpdCB1c2VkIHRvIGluZGV4IGludG8KKyAqIGJvdW5kcyB0YWJsZSAoQlQpLgorICovCisjZGVmaW5lIE1QWF9CVF9FTlRSWV9PRkZTRVQJMTcKKyNkZWZpbmUgTVBYX0JUX0VOVFJZX1NISUZUCTUKKyNkZWZpbmUgTVBYX0lHTl9CSVRTCQkzCisjZGVmaW5lIE1QWF9CRF9FTlRSWV9UQUlMCTMKKworI2Vsc2UKKworI2RlZmluZSBNUFhfQkRfRU5UUllfT0ZGU0VUCTIwCisjZGVmaW5lIE1QWF9CRF9FTlRSWV9TSElGVAkyCisjZGVmaW5lIE1QWF9CVF9FTlRSWV9PRkZTRVQJMTAKKyNkZWZpbmUgTVBYX0JUX0VOVFJZX1NISUZUCTQKKyNkZWZpbmUgTVBYX0lHTl9CSVRTCQkyCisjZGVmaW5lIE1QWF9CRF9FTlRSWV9UQUlMCTIKKworI2VuZGlmCisKKyNkZWZpbmUgTVBYX0JEX1NJWkVfQllURVMgKDFVTDw8KE1QWF9CRF9FTlRSWV9PRkZTRVQrTVBYX0JEX0VOVFJZX1NISUZUKSkKKyNkZWZpbmUgTVBYX0JUX1NJWkVfQllURVMgKDFVTDw8KE1QWF9CVF9FTlRSWV9PRkZTRVQrTVBYX0JUX0VOVFJZX1NISUZUKSkKKworI2RlZmluZSBNUFhfQk5EU1RBX1RBSUwJCTIKKyNkZWZpbmUgTVBYX0JORENGR19UQUlMCQkxMgorI2RlZmluZSBNUFhfQk5EU1RBX0FERFJfTUFTSwkofigoMVVMPDxNUFhfQk5EU1RBX1RBSUwpLTEpKQorI2RlZmluZSBNUFhfQk5EQ0ZHX0FERFJfTUFTSwkofigoMVVMPDxNUFhfQk5EQ0ZHX1RBSUwpLTEpKQorI2RlZmluZSBNUFhfQlRfQUREUl9NQVNLCSh+KCgxVUw8PE1QWF9CRF9FTlRSWV9UQUlMKS0xKSkKKworI2RlZmluZSBNUFhfQk5EQ0ZHX0FERFJfTUFTSwkofigoMVVMPDxNUFhfQk5EQ0ZHX1RBSUwpLTEpKQorI2RlZmluZSBNUFhfQk5EU1RBX0VSUk9SX0NPREUJMHgzCisKKyNkZWZpbmUgTVBYX0JEX0VOVFJZX01BU0sJKCgxPDxNUFhfQkRfRU5UUllfT0ZGU0VUKS0xKQorI2RlZmluZSBNUFhfQlRfRU5UUllfTUFTSwkoKDE8PE1QWF9CVF9FTlRSWV9PRkZTRVQpLTEpCisjZGVmaW5lIE1QWF9HRVRfQkRfRU5UUllfT0ZGU0VUKGFkZHIpCSgoKChhZGRyKT4+KE1QWF9CVF9FTlRSWV9PRkZTRVQrIFwKKwkJTVBYX0lHTl9CSVRTKSkgJiBNUFhfQkRfRU5UUllfTUFTSykgPDwgTVBYX0JEX0VOVFJZX1NISUZUKQorI2RlZmluZSBNUFhfR0VUX0JUX0VOVFJZX09GRlNFVChhZGRyKQkoKCgoYWRkcik+Pk1QWF9JR05fQklUUykgJiBcCisJCU1QWF9CVF9FTlRSWV9NQVNLKSA8PCBNUFhfQlRfRU5UUllfU0hJRlQpCisKKyNpZmRlZiBDT05GSUdfWDg2X0lOVEVMX01QWAorc2lnaW5mb190ICptcHhfZ2VuZXJhdGVfc2lnaW5mbyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQlzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c2F2ZV9idWYpOworaW50IG1weF9oYW5kbGVfYmRfZmF1bHQoc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKTsKK3N0YXRpYyBpbmxpbmUgaW50IGtlcm5lbF9tYW5hZ2luZ19tcHhfdGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiAobW0tPmJkX2FkZHIgIT0gTVBYX0lOVkFMSURfQk9VTkRTX0RJUik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbXB4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJLyoKKwkgKiBOVUxMIGlzIHRoZW9yZXRpY2FsbHkgYSB2YWxpZCBwbGFjZSB0byBwdXQgdGhlIGJvdW5kcworCSAqIGRpcmVjdG9yeSwgc28gcG9pbnQgdGhpcyBhdCBhbiBpbnZhbGlkIGFkZHJlc3MuCisJICovCisJbW0tPmJkX2FkZHIgPSBNUFhfSU5WQUxJRF9CT1VORFNfRElSOworfQordm9pZCBtcHhfbm90aWZ5X3VubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc2lnaW5mb190ICptcHhfZ2VuZXJhdGVfc2lnaW5mbyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJICAgICAgc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKQoreworCXJldHVybiBOVUxMOworfQorc3RhdGljIGlubGluZSBpbnQgbXB4X2hhbmRsZV9iZF9mYXVsdChzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c2F2ZV9idWYpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIGludCBrZXJuZWxfbWFuYWdpbmdfbXB4X3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtcHhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtcHhfbm90aWZ5X3VubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl9JTlRFTF9NUFggKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X01QWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKaW5kZXggZjQwOGNhZi4uYjNiZWJmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaApAQCAtMzksNiArMzksOCBAQAogCiAjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwogCi0jZGVmaW5lIF9fSEFWRV9BUkNIX0dBVEVfQVJFQSAxCisjaWZkZWYgQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04KKyMgZGVmaW5lIF9fSEFWRV9BUkNIX0dBVEVfQVJFQSAxCisjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X1BBR0VfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggY2Q2ZTE2MS4uMzI0NDRhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC0zMzAsMTMgKzMzMCwxMyBAQAogCVBWT1BfVkNBTEwyKHB2X21tdV9vcHMuYWN0aXZhdGVfbW0sIHByZXYsIG5leHQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKLQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKKwkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLmR1cF9tbWFwLCBvbGRtbSwgbW0pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9leGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYXJjaF9leGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJUFZPUF9WQ0FMTDEocHZfbW11X29wcy5leGl0X21tYXAsIG1tKTsKIH0KQEAgLTk4Niw1ICs5ODYsMTUgQEAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbHNlICAvKiBDT05GSUdfUEFSQVZJUlQgKi8KICMgZGVmaW5lIGRlZmF1bHRfYmFubmVyIHg4Nl9pbml0X25vb3AKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKKwkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FyY2hfZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qICFDT05GSUdfUEFSQVZJUlQgKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9QQVJBVklSVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCmluZGV4IGUyYzE2NjguLjkxYmM0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCkBAIC0xMSwxNiArMTEsMTcgQEAKICNlbmRpZgogCiBleHRlcm4gdm9pZCBwYXRfaW5pdCh2b2lkKTsKK3ZvaWQgcGF0X2luaXRfY2FjaGVfbW9kZXModm9pZCk7CiAKIGV4dGVybiBpbnQgcmVzZXJ2ZV9tZW10eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwKLQkJdW5zaWduZWQgbG9uZyByZXFfdHlwZSwgdW5zaWduZWQgbG9uZyAqcmV0X3R5cGUpOworCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSByZXFfcGNtLCBlbnVtIHBhZ2VfY2FjaGVfbW9kZSAqcmV0X3BjbSk7CiBleHRlcm4gaW50IGZyZWVfbWVtdHlwZSh1NjQgc3RhcnQsIHU2NCBlbmQpOwogCiBleHRlcm4gaW50IGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHU2NCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCXVuc2lnbmVkIGxvbmcgZmxhZyk7CisJCWVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSk7CiAKIGludCBpb19yZXNlcnZlX21lbXR5cGUocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgZW5kLAotCQkJdW5zaWduZWQgbG9uZyAqdHlwZSk7CisJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSAqcGNtKTsKIAogdm9pZCBpb19mcmVlX21lbXR5cGUocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgZW5kKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAppbmRleCBmZDQ3MjE4Li5lMGJhNjZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtNjQsNyArNjQsNyBAQAogI2RlZmluZSBfX3BlcmNwdV9wcmVmaXgJCSIiCiAjZW5kaWYKIAotI2RlZmluZSBfX3BlcmNwdV9hcmcoeCkJCV9fcGVyY3B1X3ByZWZpeCAiJVAiICN4CisjZGVmaW5lIF9fcGVyY3B1X2FyZyh4KQkJX19wZXJjcHVfcHJlZml4ICIlIiAjeAogCiAvKgogICogSW5pdGlhbGl6ZWQgcG9pbnRlcnMgdG8gcGVyLWNwdSB2YXJpYWJsZXMgbmVlZGVkIGZvciB0aGUgYm9vdApAQCAtMTc5LDI5ICsxNzksNTggQEAKIAl9CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIHBlcmNwdV9mcm9tX29wKG9wLCB2YXIsIGNvbnN0cmFpbnQpCQlcCisjZGVmaW5lIHBlcmNwdV9mcm9tX29wKG9wLCB2YXIpCQkJCVwKICh7CQkJCQkJCVwKIAl0eXBlb2YodmFyKSBwZm9fcmV0X187CQkJCVwKIAlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCVwKIAljYXNlIDE6CQkJCQkJXAogCQlhc20ob3AgImIgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9cSIgKHBmb19yZXRfXykJCQlcCi0JCSAgICA6IGNvbnN0cmFpbnQpOwkJCVwKKwkJICAgIDogIm0iICh2YXIpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgMjoJCQkJCQlcCiAJCWFzbShvcCAidyAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKIAkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKLQkJICAgIDogY29uc3RyYWludCk7CQkJXAorCQkgICAgOiAibSIgKHZhcikpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCiAJY2FzZSA0OgkJCQkJCVwKIAkJYXNtKG9wICJsICJfX3BlcmNwdV9hcmcoMSkiLCUwIgkJXAogCQkgICAgOiAiPXIiIChwZm9fcmV0X18pCQkJXAotCQkgICAgOiBjb25zdHJhaW50KTsJCQlcCisJCSAgICA6ICJtIiAodmFyKSk7CQkJXAogCQlicmVhazsJCQkJCVwKIAljYXNlIDg6CQkJCQkJXAogCQlhc20ob3AgInEgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9ciIgKHBmb19yZXRfXykJCQlcCi0JCSAgICA6IGNvbnN0cmFpbnQpOwkJCVwKKwkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJXAorCX0JCQkJCQlcCisJcGZvX3JldF9fOwkJCQkJXAorfSkKKworI2RlZmluZSBwZXJjcHVfc3RhYmxlX29wKG9wLCB2YXIpCQkJXAorKHsJCQkJCQkJXAorCXR5cGVvZih2YXIpIHBmb19yZXRfXzsJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJXAorCWNhc2UgMToJCQkJCQlcCisJCWFzbShvcCAiYiAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1xIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgMjoJCQkJCQlcCisJCWFzbShvcCAidyAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgNDoJCQkJCQlcCisJCWFzbShvcCAibCAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgODoJCQkJCQlcCisJCWFzbShvcCAicSAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJXAogCX0JCQkJCQlcCkBAIC0zNTksMTEgKzM4OCwxMSBAQAogICogcGVyLXRocmVhZCB2YXJpYWJsZXMgaW1wbGVtZW50ZWQgYXMgcGVyLWNwdSB2YXJpYWJsZXMgYW5kIHRodXMKICAqIHN0YWJsZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXNwZWN0aXZlIHRhc2suCiAgKi8KLSNkZWZpbmUgdGhpc19jcHVfcmVhZF9zdGFibGUodmFyKQlwZXJjcHVfZnJvbV9vcCgibW92IiwgdmFyLCAicCIgKCYodmFyKSkpCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfc3RhYmxlKHZhcikJcGVyY3B1X3N0YWJsZV9vcCgibW92IiwgdmFyKQogCi0jZGVmaW5lIHJhd19jcHVfcmVhZF8xKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCi0jZGVmaW5lIHJhd19jcHVfcmVhZF8yKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCi0jZGVmaW5lIHJhd19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIHJhd19jcHVfcmVhZF8xKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCisjZGVmaW5lIHJhd19jcHVfcmVhZF8yKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCisjZGVmaW5lIHJhd19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCiAKICNkZWZpbmUgcmF3X2NwdV93cml0ZV8xKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIHJhd19jcHVfd3JpdGVfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQpAQCAtMzgxLDkgKzQxMCw5IEBACiAjZGVmaW5lIHJhd19jcHVfeGNoZ18yKHBjcCwgdmFsKQlwZXJjcHVfeGNoZ19vcChwY3AsIHZhbCkKICNkZWZpbmUgcmF3X2NwdV94Y2hnXzQocGNwLCB2YWwpCXBlcmNwdV94Y2hnX29wKHBjcCwgdmFsKQogCi0jZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQotI2RlZmluZSB0aGlzX2NwdV9yZWFkXzIocGNwKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIChwY3ApLCAibSIocGNwKSkKLSNkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgcGNwKQorI2RlZmluZSB0aGlzX2NwdV9yZWFkXzIocGNwKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBjcCkKKyNkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCiAjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCkBAIC00MzUsNyArNDY0LDcgQEAKICAqIDMyIGJpdCBtdXN0IGZhbGwgYmFjayB0byBnZW5lcmljIG9wZXJhdGlvbnMuCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIHJhd19jcHVfcmVhZF84KHBjcCkJCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQorI2RlZmluZSByYXdfY3B1X3JlYWRfOChwY3ApCQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBjcCkKICNkZWZpbmUgcmF3X2NwdV93cml0ZV84KHBjcCwgdmFsKQkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQogI2RlZmluZSByYXdfY3B1X2FkZF84KHBjcCwgdmFsKQkJCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKICNkZWZpbmUgcmF3X2NwdV9hbmRfOChwY3AsIHZhbCkJCQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCkBAIC00NDQsNyArNDczLDcgQEAKICNkZWZpbmUgcmF3X2NwdV94Y2hnXzgocGNwLCBudmFsKQkJcGVyY3B1X3hjaGdfb3AocGNwLCBudmFsKQogI2RlZmluZSByYXdfY3B1X2NtcHhjaGdfOChwY3AsIG92YWwsIG52YWwpCXBlcmNwdV9jbXB4Y2hnX29wKHBjcCwgb3ZhbCwgbnZhbCkKIAotI2RlZmluZSB0aGlzX2NwdV9yZWFkXzgocGNwKQkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApCQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBjcCkKICNkZWZpbmUgdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbCkJCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfYWRkXzgocGNwLCB2YWwpCQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCiAjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKQkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQpAQCAtNTIyLDcgKzU1MSw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CiAKIC8qIFdlIGNhbiB1c2UgdGhpcyBkaXJlY3RseSBmb3IgbG9jYWwgQ1BVIChmYXN0ZXIpLiAqLwotREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHRoaXNfY3B1X29mZik7CitERUNMQVJFX1BFUl9DUFVfUkVBRF9NT1NUTFkodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKTsKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCmluZGV4IDhkZmM5ZmQuLmRjMGY2ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTE3Nyw2ICsxNzcsOSBAQAogI2RlZmluZSBJQlNfQ0FQU19CUk5UUkdUCQkoMVU8PDUpCiAjZGVmaW5lIElCU19DQVBTX09QQ05URVhUCQkoMVU8PDYpCiAjZGVmaW5lIElCU19DQVBTX1JJUElOVkFMSURDSEsJCSgxVTw8NykKKyNkZWZpbmUgSUJTX0NBUFNfT1BCUk5GVVNFCQkoMVU8PDgpCisjZGVmaW5lIElCU19DQVBTX0ZFVENIQ1RMRVhURAkJKDFVPDw5KQorI2RlZmluZSBJQlNfQ0FQU19PUERBVEE0CQkoMVU8PDEwKQogCiAjZGVmaW5lIElCU19DQVBTX0RFRkFVTFQJCShJQlNfQ0FQU19BVkFJTAkJXAogCQkJCQkgfCBJQlNfQ0FQU19GRVRDSFNBTQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYWE5N2EwNy4uYzExMmVhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtOSw5ICs5LDEwIEBACiAvKgogICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyBVQy0KICAqLwotI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCQkJCQlcCi0JKChib290X2NwdV9kYXRhLng4NiA+IDMpCQkJCVwKLQkgPyAoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX0NBQ0hFX1VDX01JTlVTKSkJXAorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCQkJCQkJXAorCSgoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQkJCQkJXAorCSA/IChfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwJCQkJCVwKKwkJICAgICBjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKSkpCVwKIAkgOiAocHJvdCkpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC00MDQsOCArNDA1LDggQEAKICNkZWZpbmUgY2Fub25fcGdwcm90KHApIF9fcGdwcm90KG1hc3NhZ2VfcGdwcm90KHApKQogCiBzdGF0aWMgaW5saW5lIGludCBpc19uZXdfbWVtdHlwZV9hbGxvd2VkKHU2NCBwYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQkgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzKQorCQkJCQkgZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtLAorCQkJCQkgZW51bSBwYWdlX2NhY2hlX21vZGUgbmV3X3BjbSkKIHsKIAkvKgogCSAqIFBBVCB0eXBlIGlzIGFsd2F5cyBXQiBmb3IgdW50cmFja2VkIHJhbmdlcywgc28gbm8gbmVlZCB0byBjaGVjay4KQEAgLTQxOSwxMCArNDIwLDEwIEBACiAJICogLSByZXF1ZXN0IGlzIHVuY2FjaGVkLCByZXR1cm4gY2Fubm90IGJlIHdyaXRlLWJhY2sKIAkgKiAtIHJlcXVlc3QgaXMgd3JpdGUtY29tYmluZSwgcmV0dXJuIGNhbm5vdCBiZSB3cml0ZS1iYWNrCiAJICovCi0JaWYgKChmbGFncyA9PSBfUEFHRV9DQUNIRV9VQ19NSU5VUyAmJgotCSAgICAgbmV3X2ZsYWdzID09IF9QQUdFX0NBQ0hFX1dCKSB8fAotCSAgICAoZmxhZ3MgPT0gX1BBR0VfQ0FDSEVfV0MgJiYKLQkgICAgIG5ld19mbGFncyA9PSBfUEFHRV9DQUNIRV9XQikpIHsKKwlpZiAoKHBjbSA9PSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTICYmCisJICAgICBuZXdfcGNtID09IF9QQUdFX0NBQ0hFX01PREVfV0IpIHx8CisJICAgIChwY20gPT0gX1BBR0VfQ0FDSEVfTU9ERV9XQyAmJgorCSAgICAgbmV3X3BjbSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dCKSkgewogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaAppbmRleCBlZDU5MDNiLi45ZmIyZjJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIExBU1RfUEtNQVAgMTAyNAogI2VuZGlmCiAKLSNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfQk9PVF9TVEFSVCAtIFBBR0VfU0laRSAqIChMQVNUX1BLTUFQICsgMSkpCVwKKyNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfU1RBUlQgLSBQQUdFX1NJWkUgKiAoTEFTVF9QS01BUCArIDEpKQlcCiAJCSAgICAmIFBNRF9NQVNLKQogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjRfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjRfdHlwZXMuaAppbmRleCA3MTY2ZTI1Li42MDJiNjAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0X3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NF90eXBlcy5oCkBAIC02Myw2ICs2Myw4IEBACiAjZGVmaW5lIE1PRFVMRVNfTEVOICAgKE1PRFVMRVNfRU5EIC0gTU9EVUxFU19WQUREUikKICNkZWZpbmUgRVNQRklYX1BHRF9FTlRSWSBfQUMoLTIsIFVMKQogI2RlZmluZSBFU1BGSVhfQkFTRV9BRERSIChFU1BGSVhfUEdEX0VOVFJZIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBFRklfVkFfU1RBUlQJICggLTQgKiAoX0FDKDEsIFVMKSA8PCAzMCkpCisjZGVmaW5lIEVGSV9WQV9FTkQJICgtNjggKiAoX0FDKDEsIFVMKSA8PCAzMCkpCiAKICNkZWZpbmUgRUFSTFlfRFlOQU1JQ19QQUdFX1RBQkxFUwk2NAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKaW5kZXggMDc3ODk2NC4uYWY0NDdmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaApAQCAtMTI4LDExICsxMjgsMjggQEAKIAkJCSBfUEFHRV9TT0ZUX0RJUlRZIHwgX1BBR0VfTlVNQSkKICNkZWZpbmUgX0hQQUdFX0NIR19NQVNLIChfUEFHRV9DSEdfTUFTSyB8IF9QQUdFX1BTRSB8IF9QQUdFX05VTUEpCiAKLSNkZWZpbmUgX1BBR0VfQ0FDSEVfTUFTSwkoX1BBR0VfUENEIHwgX1BBR0VfUFdUKQotI2RlZmluZSBfUEFHRV9DQUNIRV9XQgkJKDApCi0jZGVmaW5lIF9QQUdFX0NBQ0hFX1dDCQkoX1BBR0VfUFdUKQotI2RlZmluZSBfUEFHRV9DQUNIRV9VQ19NSU5VUwkoX1BBR0VfUENEKQotI2RlZmluZSBfUEFHRV9DQUNIRV9VQwkJKF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKy8qCisgKiBUaGUgY2FjaGUgbW9kZXMgZGVmaW5lZCBoZXJlIGFyZSB1c2VkIHRvIHRyYW5zbGF0ZSBiZXR3ZWVuIHB1cmUgU1cgdXNhZ2UKKyAqIGFuZCB0aGUgSFcgZGVmaW5lZCBjYWNoZSBtb2RlIGJpdHMgYW5kL29yIFBBVCBlbnRyaWVzLgorICoKKyAqIFRoZSByZXN1bHRpbmcgYml0cyBmb3IgUFdULCBQQ0QgYW5kIFBBVCBzaG91bGQgYmUgY2hvc2VuIGluIGEgd2F5CisgKiB0byBoYXZlIHRoZSBXQiBtb2RlIGF0IGluZGV4IDAgKGFsbCBiaXRzIGNsZWFyKS4gVGhpcyBpcyB0aGUgZGVmYXVsdAorICogcmlnaHQgbm93IGFuZCBsaWtlbHkgd291bGQgYnJlYWsgdG9vIG11Y2ggaWYgY2hhbmdlZC4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2VudW0gcGFnZV9jYWNoZV9tb2RlIHsKKwlfUEFHRV9DQUNIRV9NT0RFX1dCID0gMCwKKwlfUEFHRV9DQUNIRV9NT0RFX1dDID0gMSwKKwlfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTID0gMiwKKwlfUEFHRV9DQUNIRV9NT0RFX1VDID0gMywKKwlfUEFHRV9DQUNIRV9NT0RFX1dUID0gNCwKKwlfUEFHRV9DQUNIRV9NT0RFX1dQID0gNSwKKwlfUEFHRV9DQUNIRV9NT0RFX05VTSA9IDgKK307CisjZW5kaWYKKworI2RlZmluZSBfUEFHRV9DQUNIRV9NQVNLCShfUEFHRV9QQVQgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCisjZGVmaW5lIF9QQUdFX05PQ0FDSEUJCShjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1VDKSkKIAogI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKICNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8IFwKQEAgLTE1Niw0MSArMTczLDI3IEBACiAKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9STwkJKF9fUEFHRV9LRVJORUwgJiB+X1BBR0VfUlcpCiAjZGVmaW5lIF9fUEFHRV9LRVJORUxfUlgJCShfX1BBR0VfS0VSTkVMX0VYRUMgJiB+X1BBR0VfUlcpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfRVhFQ19OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfV0MJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfQ0FDSEVfV0MpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfTk9DQUNIRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfVUNfTUlOVVMJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfUENEKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX05PQ0FDSEUJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfTk9DQUNIRSkKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9WU1lTQ0FMTAkJKF9fUEFHRV9LRVJORUxfUlggfCBfUEFHRV9VU0VSKQogI2RlZmluZSBfX1BBR0VfS0VSTkVMX1ZWQVIJCShfX1BBR0VfS0VSTkVMX1JPIHwgX1BBR0VfVVNFUikKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9WVkFSX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfVlZBUiB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QU0UpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX0NBQ0hFX1VDIHwgX1BBR0VfUFNFKQogI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMJKF9fUEFHRV9LRVJORUxfRVhFQyB8IF9QQUdFX1BTRSkKIAogI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPCQkoX19QQUdFX0tFUk5FTCkKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9JT19OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX05PQ0FDSEUpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMJKF9fUEFHRV9LRVJORUxfVUNfTUlOVVMpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fV0MJCShfX1BBR0VfS0VSTkVMX1dDKQogCiAjZGVmaW5lIFBBR0VfS0VSTkVMCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTCkKICNkZWZpbmUgUEFHRV9LRVJORUxfUk8JCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1JPKQogI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0VYRUMpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1JYCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9SWCkKLSNkZWZpbmUgUEFHRV9LRVJORUxfV0MJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1dDKQogI2RlZmluZSBQQUdFX0tFUk5FTF9OT0NBQ0hFCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX05PQ0FDSEUpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX1VDX01JTlVTCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1VDX01JTlVTKQotI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9FWEVDX05PQ0FDSEUpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0xBUkdFKQotI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRSkKICNkZWZpbmUgUEFHRV9LRVJORUxfTEFSR0VfRVhFQwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDKQogI2RlZmluZSBQQUdFX0tFUk5FTF9WU1lTQ0FMTAkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9WU1lTQ0FMTCkKICNkZWZpbmUgUEFHRV9LRVJORUxfVlZBUgkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9WVkFSKQotI2RlZmluZSBQQUdFX0tFUk5FTF9WVkFSX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9WVkFSX05PQ0FDSEUpCiAKICNkZWZpbmUgUEFHRV9LRVJORUxfSU8JCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPKQogI2RlZmluZSBQQUdFX0tFUk5FTF9JT19OT0NBQ0hFCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX05PQ0FDSEUpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0lPX1VDX01JTlVTCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX1VDX01JTlVTKQotI2RlZmluZSBQQUdFX0tFUk5FTF9JT19XQwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9JT19XQykKIAogLyogICAgICAgICB4d3IgKi8KICNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQpAQCAtMzQxLDYgKzM0NCw1OSBAQAogI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQogI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKIAorZXh0ZXJuIHVpbnQxNl90IF9fY2FjaGVtb2RlMnB0ZV90YmxbX1BBR0VfQ0FDSEVfTU9ERV9OVU1dOworZXh0ZXJuIHVpbnQ4X3QgX19wdGUyY2FjaGVtb2RlX3RibFs4XTsKKworI2RlZmluZSBfX3B0ZTJjbV9pZHgoY2IpCQkJCVwKKwkoKCgoY2IpID4+IChfUEFHRV9CSVRfUEFUIC0gMikpICYgNCkgfAkJXAorCSAoKChjYikgPj4gKF9QQUdFX0JJVF9QQ0QgLSAxKSkgJiAyKSB8CQlcCisJICgoKGNiKSA+PiBfUEFHRV9CSVRfUFdUKSAmIDEpKQorI2RlZmluZSBfX2NtX2lkeDJwdGUoaSkJCQkJCVwKKwkoKCgoaSkgJiA0KSA8PCAoX1BBR0VfQklUX1BBVCAtIDIpKSB8CQlcCisJICgoKGkpICYgMikgPDwgKF9QQUdFX0JJVF9QQ0QgLSAxKSkgfAkJXAorCSAoKChpKSAmIDEpIDw8IF9QQUdFX0JJVF9QV1QpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2FjaGVtb2RlMnByb3R2YWwoZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtKQoreworCWlmIChsaWtlbHkocGNtID09IDApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gX19jYWNoZW1vZGUycHRlX3RibFtwY21dOworfQorc3RhdGljIGlubGluZSBwZ3Byb3RfdCBjYWNoZW1vZGUycGdwcm90KGVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSkKK3sKKwlyZXR1cm4gX19wZ3Byb3QoY2FjaGVtb2RlMnByb3R2YWwocGNtKSk7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gcGFnZV9jYWNoZV9tb2RlIHBncHJvdDJjYWNoZW1vZGUocGdwcm90X3QgcGdwcm90KQoreworCXVuc2lnbmVkIGxvbmcgbWFza2VkOworCisJbWFza2VkID0gcGdwcm90X3ZhbChwZ3Byb3QpICYgX1BBR0VfQ0FDSEVfTUFTSzsKKwlpZiAobGlrZWx5KG1hc2tlZCA9PSAwKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIF9fcHRlMmNhY2hlbW9kZV90YmxbX19wdGUyY21faWR4KG1hc2tlZCldOworfQorc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwZ3Byb3RfNGtfMl9sYXJnZShwZ3Byb3RfdCBwZ3Byb3QpCit7CisJcGdwcm90X3QgbmV3OworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJdmFsID0gcGdwcm90X3ZhbChwZ3Byb3QpOworCXBncHJvdF92YWwobmV3KSA9ICh2YWwgJiB+KF9QQUdFX1BBVCB8IF9QQUdFX1BBVF9MQVJHRSkpIHwKKwkJKCh2YWwgJiBfUEFHRV9QQVQpIDw8IChfUEFHRV9CSVRfUEFUX0xBUkdFIC0gX1BBR0VfQklUX1BBVCkpOworCXJldHVybiBuZXc7Cit9CitzdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9sYXJnZV8yXzRrKHBncHJvdF90IHBncHJvdCkKK3sKKwlwZ3Byb3RfdCBuZXc7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwl2YWwgPSBwZ3Byb3RfdmFsKHBncHJvdCk7CisJcGdwcm90X3ZhbChuZXcpID0gKHZhbCAmIH4oX1BBR0VfUEFUIHwgX1BBR0VfUEFUX0xBUkdFKSkgfAorCQkJICAoKHZhbCAmIF9QQUdFX1BBVF9MQVJHRSkgPj4KKwkJCSAgIChfUEFHRV9CSVRfUEFUX0xBUkdFIC0gX1BBR0VfQklUX1BBVCkpOworCXJldHVybiBuZXc7Cit9CisKIAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmVlbXB0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmVlbXB0LmgKaW5kZXggNDAwODczNC4uOGYzMjcxODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByZWVtcHQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmVlbXB0LmgKQEAgLTMwLDkgKzMwLDYgQEAKIC8qCiAgKiBtdXN0IGJlIG1hY3JvcyB0byBhdm9pZCBoZWFkZXIgcmVjdXJzaW9uIGhlbGwKICAqLwotI2RlZmluZSB0YXNrX3ByZWVtcHRfY291bnQocCkgXAotCSh0YXNrX3RocmVhZF9pbmZvKHApLT5zYXZlZF9wcmVlbXB0X2NvdW50ICYgflBSRUVNUFRfTkVFRF9SRVNDSEVEKQotCiAjZGVmaW5lIGluaXRfdGFza19wcmVlbXB0X2NvdW50KHApIGRvIHsgXAogCXRhc2tfdGhyZWFkX2luZm8ocCktPnNhdmVkX3ByZWVtcHRfY291bnQgPSBQUkVFTVBUX0RJU0FCTEVEOyBcCiB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBlYjcxZWM3Li5hMDkyYTBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTI3LDcgKzEyNyw3IEBACiAJLyogSW5kZXggaW50byBwZXJfY3B1IGxpc3Q6ICovCiAJdTE2CQkJY3B1X2luZGV4OwogCXUzMgkJCW1pY3JvY29kZTsKLX0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oU01QX0NBQ0hFX0JZVEVTKSkpOworfTsKIAogI2RlZmluZSBYODZfVkVORE9SX0lOVEVMCTAKICNkZWZpbmUgWDg2X1ZFTkRPUl9DWVJJWAkxCkBAIC0xNTEsNyArMTUxLDcgQEAKIGV4dGVybiBfX3UzMgkJCWNwdV9jYXBzX3NldFtOQ0FQSU5UU107CiAKICNpZmRlZiBDT05GSUdfU01QCi1ERUNMQVJFX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CitERUNMQVJFX1BFUl9DUFVfUkVBRF9NT1NUTFkoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CiAjZGVmaW5lIGNwdV9kYXRhKGNwdSkJCXBlcl9jcHUoY3B1X2luZm8sIGNwdSkKICNlbHNlCiAjZGVmaW5lIGNwdV9pbmZvCQlib290X2NwdV9kYXRhCkBAIC0zNzQsMTMgKzM3NCwxNCBAQAogCXU4IHJlc2VydmVkWzEyOF07CiB9OwogCi1zdHJ1Y3QgYm5kcmVnc19zdHJ1Y3QgewotCXU2NCBibmRyZWdzWzhdOworc3RydWN0IGJuZHJlZyB7CisJdTY0IGxvd2VyX2JvdW5kOworCXU2NCB1cHBlcl9ib3VuZDsKIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCBibmRjc3Jfc3RydWN0IHsKLQl1NjQgY2ZnX3JlZ191OwotCXU2NCBzdGF0dXNfcmVnOworc3RydWN0IGJuZGNzciB7CisJdTY0IGJuZGNmZ3U7CisJdTY0IGJuZHN0YXR1czsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCB4c2F2ZV9oZHJfc3RydWN0IHsKQEAgLTM5NCw4ICszOTUsOCBAQAogCXN0cnVjdCB4c2F2ZV9oZHJfc3RydWN0IHhzYXZlX2hkcjsKIAlzdHJ1Y3QgeW1taF9zdHJ1Y3QgeW1taDsKIAlzdHJ1Y3QgbHdwX3N0cnVjdCBsd3A7Ci0Jc3RydWN0IGJuZHJlZ3Nfc3RydWN0IGJuZHJlZ3M7Ci0Jc3RydWN0IGJuZGNzcl9zdHJ1Y3QgYm5kY3NyOworCXN0cnVjdCBibmRyZWcgYm5kcmVnWzRdOworCXN0cnVjdCBibmRjc3IgYm5kY3NyOwogCS8qIG5ldyBwcm9jZXNzb3Igc3RhdGUgZXh0ZW5zaW9ucyB3aWxsIGdvIGhlcmUgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCwgYWxpZ25lZCAoNjQpKSk7CiAKQEAgLTg5Myw3ICs4OTQsMTMgQEAKIAogI2Vsc2UKIC8qCi0gKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZS4gNDdiaXRzIG1pbnVzIG9uZSBndWFyZCBwYWdlLgorICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemUuIDQ3Yml0cyBtaW51cyBvbmUgZ3VhcmQgcGFnZS4gIFRoZSBndWFyZAorICogcGFnZSBpcyBuZWNlc3Nhcnkgb24gSW50ZWwgQ1BVczogaWYgYSBTWVNDQUxMIGluc3RydWN0aW9uIGlzIGF0CisgKiB0aGUgaGlnaGVzdCBwb3NzaWJsZSBjYW5vbmljYWwgdXNlcnNwYWNlIGFkZHJlc3MsIHRoZW4gdGhhdAorICogc3lzY2FsbCB3aWxsIGVudGVyIHRoZSBrZXJuZWwgd2l0aCBhIG5vbi1jYW5vbmljYWwgcmV0dXJuCisgKiBhZGRyZXNzLCBhbmQgU1lTUkVUIHdpbGwgZXhwbG9kZSBkYW5nZXJvdXNseS4gIFdlIGF2b2lkIHRoaXMKKyAqIHBhcnRpY3VsYXIgcHJvYmxlbSBieSBwcmV2ZW50aW5nIGFueXRoaW5nIGZyb20gYmVpbmcgbWFwcGVkCisgKiBhdCB0aGUgbWF4aW11bSBjYW5vbmljYWwgYWRkcmVzcy4KICAqLwogI2RlZmluZSBUQVNLX1NJWkVfTUFYCSgoMVVMIDw8IDQ3KSAtIFBBR0VfU0laRSkKIApAQCAtOTUzLDYgKzk2MCwyNCBAQAogZXh0ZXJuIGludCBnZXRfdHNjX21vZGUodW5zaWduZWQgbG9uZyBhZHIpOwogZXh0ZXJuIGludCBzZXRfdHNjX21vZGUodW5zaWduZWQgaW50IHZhbCk7CiAKKy8qIFJlZ2lzdGVyL3VucmVnaXN0ZXIgYSBwcm9jZXNzJyBNUFggcmVsYXRlZCByZXNvdXJjZSAqLworI2RlZmluZSBNUFhfRU5BQkxFX01BTkFHRU1FTlQodHNrKQltcHhfZW5hYmxlX21hbmFnZW1lbnQoKHRzaykpCisjZGVmaW5lIE1QWF9ESVNBQkxFX01BTkFHRU1FTlQodHNrKQltcHhfZGlzYWJsZV9tYW5hZ2VtZW50KCh0c2spKQorCisjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9NUFgKK2V4dGVybiBpbnQgbXB4X2VuYWJsZV9tYW5hZ2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiBpbnQgbXB4X2Rpc2FibGVfbWFuYWdlbWVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbXB4X2VuYWJsZV9tYW5hZ2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGlubGluZSBpbnQgbXB4X2Rpc2FibGVfbWFuYWdlbWVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfWDg2X0lOVEVMX01QWCAqLworCiBleHRlcm4gdTE2IGFtZF9nZXRfbmJfaWQoaW50IGNwdSk7CiAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgaHlwZXJ2aXNvcl9jcHVpZF9iYXNlKGNvbnN0IGNoYXIgKnNpZywgdWludDMyX3QgbGVhdmVzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggOTI5NTAxNi4uYTRlZmU0NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xODMsOCArMTgzLDIwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrX3dhaXQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewotCXdoaWxlIChhcmNoX3NwaW5faXNfbG9ja2VkKGxvY2spKQorCV9fdGlja2V0X3QgaGVhZCA9IEFDQ0VTU19PTkNFKGxvY2stPnRpY2tldHMuaGVhZCk7CisKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBfX3Jhd190aWNrZXRzIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPnRpY2tldHMpOworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGNoZWNrICJ1bmxvY2tlZCIgaW4gYSBsb29wLCB0bXAuaGVhZCA9PSBoZWFkCisJCSAqIGNhbiBiZSBmYWxzZSBwb3NpdGl2ZSBiZWNhdXNlIG9mIG92ZXJmbG93LgorCQkgKi8KKwkJaWYgKHRtcC5oZWFkID09ICh0bXAudGFpbCAmIH5USUNLRVRfU0xPV1BBVEhfRkxBRykgfHwKKwkJICAgIHRtcC5oZWFkICE9IGhlYWQpCisJCQlicmVhazsKKwogCQljcHVfcmVsYXgoKTsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCmluZGV4IGQ3ZjNiM2IuLjc1MWJmNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCkBAIC03OSwxMiArNzksMTIgQEAKICNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KIAogLyogZnJhbWUgcG9pbnRlciBtdXN0IGJlIGxhc3QgZm9yIGdldF93Y2hhbiAqLwotI2RlZmluZSBTQVZFX0NPTlRFWFQgICAgInB1c2hmIDsgcHVzaHEgJSVyYnAgOyBtb3ZxICUlcnNpLCUlcmJwXG5cdCIKLSNkZWZpbmUgUkVTVE9SRV9DT05URVhUICJtb3ZxICUlcmJwLCUlcnNpIDsgcG9wcSAlJXJicCA7IHBvcGZcdCIKKyNkZWZpbmUgU0FWRV9DT05URVhUICAgICJwdXNocSAlJXJicCA7IG1vdnEgJSVyc2ksJSVyYnBcblx0IgorI2RlZmluZSBSRVNUT1JFX0NPTlRFWFQgIm1vdnEgJSVyYnAsJSVyc2kgOyBwb3BxICUlcmJwXHQiCiAKICNkZWZpbmUgX19FWFRSQV9DTE9CQkVSICBcCiAJLCAicmN4IiwgInJieCIsICJyZHgiLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIsIFwKLQkgICJyMTIiLCAicjEzIiwgInIxNCIsICJyMTUiCisJICAicjEyIiwgInIxMyIsICJyMTQiLCAicjE1IiwgImZsYWdzIgogCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCiAjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeQkJCQkJCQkgIFwKQEAgLTEwMCw3ICsxMDAsMTEgQEAKICNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5X2lwYXJhbQogI2VuZGlmCS8qIENDX1NUQUNLUFJPVEVDVE9SICovCiAKLS8qIFNhdmUgcmVzdG9yZSBmbGFncyB0byBjbGVhciBoYW5kbGUgbGVha2luZyBOVCAqLworLyoKKyAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2F2ZSBvciByZXN0b3JlIGZsYWdzLCBiZWNhdXNlIGZsYWdzIGFyZSBhbHdheXMKKyAqIGNsZWFuIGluIGtlcm5lbCBtb2RlLCB3aXRoIHRoZSBwb3NzaWJsZSBleGNlcHRpb24gb2YgSU9QTC4gIEtlcm5lbCBJT1BMCisgKiBoYXMgbm8gZWZmZWN0LgorICovCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KSBcCiAJYXNtIHZvbGF0aWxlKFNBVkVfQ09OVEVYVAkJCQkJICBcCiAJICAgICAibW92cSAlJXJzcCwlUFt0aHJlYWRyc3BdKCVbcHJldl0pXG5cdCIgLyogc2F2ZSBSU1AgKi8JICBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9iYXUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oCmluZGV4IDJkNjBhNzguLmZjODA4YjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oCkBAIC0zMyw4ICszMyw4IEBACiAgKiBFYWNoIG9mIHRoZSBkZXNjcmlwdG9ycyBpcyA2NCBieXRlcyBpbiBzaXplICg4KjY0ID0gNTEyIGJ5dGVzIGluIGEgc2V0KS4KICAqLwogCi0jZGVmaW5lIE1BWF9DUFVTX1BFUl9VVkhVQgkJNjQKLSNkZWZpbmUgTUFYX0NQVVNfUEVSX1NPQ0tFVAkJMzIKKyNkZWZpbmUgTUFYX0NQVVNfUEVSX1VWSFVCCQkxMjgKKyNkZWZpbmUgTUFYX0NQVVNfUEVSX1NPQ0tFVAkJNjQKICNkZWZpbmUgQURQX1NaCQkJCTY0IC8qIGhhcmR3YXJlLXByb3ZpZGVkIG1heC4gKi8KICNkZWZpbmUgVVZfQ1BVU19QRVJfQVMJCQkzMiAvKiBoYXJkd2FyZS1wcm92aWRlZCBtYXguICovCiAjZGVmaW5lIElURU1TX1BFUl9ERVNDCQkJOApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmd0b2QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZndG9kLmgKaW5kZXggM2MzMzY2Yy4uZTdlOTY4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmd0b2QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z3RvZC5oCkBAIC03MCw0ICs3MCwyMyBAQAogCSsrcy0+c2VxOwogfQogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCisjZGVmaW5lIFZHRVRDUFVfQ1BVX01BU0sgMHhmZmYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19nZXRjcHUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcDsKKworCS8qCisJICogTG9hZCBwZXIgQ1BVIGRhdGEgZnJvbSBHRFQuICBMU0wgaXMgZmFzdGVyIHRoYW4gUkRUU0NQIGFuZAorCSAqIHdvcmtzIG9uIGFsbCBDUFVzLgorCSAqLworCWFzbSgibHNsICUxLCUwIiA6ICI9ciIgKHApIDogInIiIChfX1BFUl9DUFVfU0VHKSk7CisKKwlyZXR1cm4gcDsKK30KKworI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KKwogI2VuZGlmIC8qIF9BU01fWDg2X1ZHVE9EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZzeXNjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92c3lzY2FsbC5oCmluZGV4IDJhNDZjYTcuLjZiYTY2ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZzeXNjYWxsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdnN5c2NhbGwuaApAQCAtNCwxNSArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgogI2luY2x1ZGUgPHVhcGkvYXNtL3ZzeXNjYWxsLmg+CiAKLSNkZWZpbmUgVkdFVENQVV9SRFRTQ1AJMQotI2RlZmluZSBWR0VUQ1BVX0xTTAkyCi0KLS8qIGtlcm5lbCBzcGFjZSAod3JpdGVhYmxlKSAqLwotZXh0ZXJuIGludCB2Z2V0Y3B1X21vZGU7Ci1leHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKLQotI2luY2x1ZGUgPGFzbS92dmFyLmg+Ci0KKyNpZmRlZiBDT05GSUdfWDg2X1ZTWVNDQUxMX0VNVUxBVElPTgogZXh0ZXJuIHZvaWQgbWFwX3ZzeXNjYWxsKHZvaWQpOwogCiAvKgpAQCAtMjAsMjUgKzEyLDEyIEBACiAgKiBSZXR1cm5zIHRydWUgaWYgaGFuZGxlZC4KICAqLwogZXh0ZXJuIGJvb2wgZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQotI2RlZmluZSBWR0VUQ1BVX0NQVV9NQVNLIDB4ZmZmCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fZ2V0Y3B1KHZvaWQpCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1hcF92c3lzY2FsbCh2b2lkKSB7fQorc3RhdGljIGlubGluZSBib29sIGVtdWxhdGVfdnN5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQl1bnNpZ25lZCBpbnQgcDsKLQotCWlmIChWVkFSKHZnZXRjcHVfbW9kZSkgPT0gVkdFVENQVV9SRFRTQ1ApIHsKLQkJLyogTG9hZCBwZXIgQ1BVIGRhdGEgZnJvbSBSRFRTQ1AgKi8KLQkJbmF0aXZlX3JlYWRfdHNjcCgmcCk7Ci0JfSBlbHNlIHsKLQkJLyogTG9hZCBwZXIgQ1BVIGRhdGEgZnJvbSBHRFQgKi8KLQkJYXNtKCJsc2wgJTEsJTAiIDogIj1yIiAocCkgOiAiciIgKF9fUEVSX0NQVV9TRUcpKTsKLQl9Ci0KLQlyZXR1cm4gcDsKKwlyZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9WU1lTQ0FMTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92dmFyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92dmFyLmgKaW5kZXggNWQyYjlhZC4uM2YzMmRmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdnZhci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Z2YXIuaApAQCAtNDQsOCArNDQsNiBAQAogCiAvKiBERUNMQVJFX1ZWQVIob2Zmc2V0LCB0eXBlLCBuYW1lKSAqLwogCi1ERUNMQVJFX1ZWQVIoMCwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZywgamlmZmllcykKLURFQ0xBUkVfVlZBUigxNiwgaW50LCB2Z2V0Y3B1X21vZGUpCiBERUNMQVJFX1ZWQVIoMTI4LCBzdHJ1Y3QgdnN5c2NhbGxfZ3RvZF9kYXRhLCB2c3lzY2FsbF9ndG9kX2RhdGEpCiAKICN1bmRlZiBERUNMQVJFX1ZWQVIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCmluZGV4IGU0NWU0ZGEuLmY1OGE5YzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaApAQCAtMTcyLDcgKzE3Miw2IEBACiAKIHN0cnVjdCBwY2lfZGV2Owogc3RydWN0IG1zaV9tc2c7Ci1zdHJ1Y3QgbXNpX2Rlc2M7CiAKIHN0cnVjdCB4ODZfbXNpX29wcyB7CiAJaW50ICgqc2V0dXBfbXNpX2lycXMpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSk7CkBAIC0xODMsOCArMTgyLDYgQEAKIAl2b2lkICgqdGVhcmRvd25fbXNpX2lycXMpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCXZvaWQgKCpyZXN0b3JlX21zaV9pcnFzKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAlpbnQgICgqc2V0dXBfaHBldF9tc2kpKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBpZCk7Ci0JdTMyICgqbXNpX21hc2tfaXJxKShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZyk7Ci0JdTMyICgqbXNpeF9tYXNrX2lycSkoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgZmxhZyk7CiB9OwogCiBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL21zci1pbmRleC5oCmluZGV4IGUyMTMzMWNlLi44ZjAyZjY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vbXNyLWluZGV4LmgKQEAgLTIwNiw2ICsyMDYsNyBAQAogI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BfUkVHX01BU0sJKCgxVUw8PE1TUl9BTUQ2NF9JQlNPUF9SRUdfQ09VTlQpLTEpCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNDVEwJCTB4YzAwMTEwM2EKICNkZWZpbmUgTVNSX0FNRDY0X0lCU0JSVEFSR0VUCQkweGMwMDExMDNiCisjZGVmaW5lIE1TUl9BTUQ2NF9JQlNPUERBVEE0CQkweGMwMDExMDNkCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNfUkVHX0NPVU5UX01BWAk4IC8qIGluY2x1ZGVzIE1TUl9BTUQ2NF9JQlNCUlRBUkdFVCAqLwogCiAvKiBGYW0gMTZoIE1TUnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQppbmRleCA4ZjFlNzc0Li41ZDQ1MDJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCkBAIC0yOCw4ICsyOCw3IEBACiBvYmotJChDT05GSUdfWDg2XzY0KQkrPSBzeXNfeDg2XzY0Lm8geDg2NjRfa3N5bXNfNjQubwogb2JqLSQoQ09ORklHX1g4Nl82NCkJKz0gbWNvdW50XzY0Lm8KIG9iai15CQkJKz0gc3lzY2FsbF8kKEJJVFMpLm8gdnN5c2NhbGxfZ3RvZC5vCi1vYmotJChDT05GSUdfWDg2XzY0KQkrPSB2c3lzY2FsbF82NC5vCi1vYmotJChDT05GSUdfWDg2XzY0KQkrPSB2c3lzY2FsbF9lbXVfNjQubworb2JqLSQoQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04pCSs9IHZzeXNjYWxsXzY0Lm8gdnN5c2NhbGxfZW11XzY0Lm8KIG9iai0kKENPTkZJR19YODZfRVNQRklYNjQpCSs9IGVzcGZpeF82NC5vCiBvYmotJChDT05GSUdfU1lTRlMpCSs9IGtzeXNmcy5vCiBvYmoteQkJCSs9IGJvb3RmbGFnLm8gZTgyMC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMKaW5kZXggZjA0ZGJiMy4uNWNhZWQxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9uYi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfbmIuYwpAQCAtMjEsNiArMjEsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YzKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX00xMEhfRjMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMykgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NNjBIX05CX0YzKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTZIX05CX0YzKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTZIX00zMEhfTkJfRjMpIH0sCiAJe30KQEAgLTMwLDYgKzMxLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWRfbmJfbGlua19pZHNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GNCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0Y0KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX002MEhfTkJfRjQpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTkJfRjQpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTTMwSF9OQl9GNCkgfSwKIAl7fQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19udW1hY2hpcC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19udW1hY2hpcC5jCmluZGV4IDQxMjhiNWYuLmMyZmQyMWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbnVtYWNoaXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX251bWFjaGlwLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaWQ7CiAKIAlyZG1zcmwoTVNSX0ZBTTEwSF9OT0RFX0lELCB2YWx1ZSk7Ci0JaWQgPSAoKHggPj4gMjQpICYgMHhmZlUpIHwgKCh2YWx1ZSA8PCAyKSAmIDB4M2YwMFUpOworCWlkID0gKCh4ID4+IDI0KSAmIDB4ZmZVKSB8ICgodmFsdWUgPDwgMikgJiAweGZmMDBVKTsKIAogCXJldHVybiBpZDsKIH0KQEAgLTE0NSw3ICsxNDUsNyBAQAogCiBzdGF0aWMgdm9pZCBudW1hY2hpcF9zZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCiB7Ci0JX19kZWZhdWx0X3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9TRUxGLCB2ZWN0b3IsIEFQSUNfREVTVF9QSFlTSUNBTCk7CisJYXBpY193cml0ZShBUElDX1NFTEZfSVBJLCB2ZWN0b3IpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBudW1hY2hpcF9wcm9iZSh2b2lkKQpAQCAtMTUzLDIwICsxNTMsOCBAQAogCXJldHVybiBhcGljID09ICZhcGljX251bWFjaGlwOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWFwX2NzcnModm9pZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPICJOdW1hQ2hpcDogTWFwcGluZyBsb2NhbCBDU1Igc3BhY2UgKCUwMTZsbHggLSAlMDE2bGx4KVxuIiwKLQkJTlVNQUNISVBfTENTUl9CQVNFLCBOVU1BQ0hJUF9MQ1NSX0JBU0UgKyBOVU1BQ0hJUF9MQ1NSX1NJWkUgLSAxKTsKLQlpbml0X2V4dHJhX21hcHBpbmdfdWMoTlVNQUNISVBfTENTUl9CQVNFLCBOVU1BQ0hJUF9MQ1NSX1NJWkUpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiTnVtYUNoaXA6IE1hcHBpbmcgZ2xvYmFsIENTUiBzcGFjZSAoJTAxNmxseCAtICUwMTZsbHgpXG4iLAotCQlOVU1BQ0hJUF9HQ1NSX0JBU0UsIE5VTUFDSElQX0dDU1JfQkFTRSArIE5VTUFDSElQX0dDU1JfU0laRSAtIDEpOwotCWluaXRfZXh0cmFfbWFwcGluZ191YyhOVU1BQ0hJUF9HQ1NSX0JBU0UsIE5VTUFDSElQX0dDU1JfU0laRSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGZpeHVwX2NwdV9pZChzdHJ1Y3QgY3B1aW5mb194ODYgKmMsIGludCBub2RlKQogewotCiAJaWYgKGMtPnBoeXNfcHJvY19pZCAhPSBub2RlKSB7CiAJCWMtPnBoeXNfcHJvY19pZCA9IG5vZGU7CiAJCXBlcl9jcHUoY3B1X2xsY19pZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IG5vZGU7CkBAIC0xNzUsMTkgKzE2MywxNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBudW1hY2hpcF9zeXN0ZW1faW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGludCB2YWw7Ci0KIAlpZiAoIW51bWFjaGlwX3N5c3RlbSkKIAkJcmV0dXJuIDA7CiAKKwlpbml0X2V4dHJhX21hcHBpbmdfdWMoTlVNQUNISVBfTENTUl9CQVNFLCBOVU1BQ0hJUF9MQ1NSX1NJWkUpOworCWluaXRfZXh0cmFfbWFwcGluZ191YyhOVU1BQ0hJUF9HQ1NSX0JBU0UsIE5VTUFDSElQX0dDU1JfU0laRSk7CisKIAl4ODZfY3B1aW5pdC5maXh1cF9jcHVfaWQgPSBmaXh1cF9jcHVfaWQ7CiAJeDg2X2luaXQucGNpLmFyY2hfaW5pdCA9IHBjaV9udW1hY2hpcF9pbml0OwogCi0JbWFwX2NzcnMoKTsKLQotCXZhbCA9IHJlYWRfbGNzcihDU1JfRzBfTk9ERV9JRFMpOwotCXByaW50ayhLRVJOX0lORk8gIk51bWFDaGlwOiBMb2NhbCBOb2RlSUQgPSAlMDh4XG4iLCB2YWwpOwotCiAJcmV0dXJuIDA7CiB9CiBlYXJseV9pbml0Y2FsbChudW1hY2hpcF9zeXN0ZW1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggMTE4M2Q1NC4uN2ZmZTBhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMzE1OCw3ICszMTU4LDcgQEAKIAltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVF9JRF9NQVNLOwogCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSUQoZGVzdCk7CiAKLQlfX3dyaXRlX21zaV9tc2coZGF0YS0+bXNpX2Rlc2MsICZtc2cpOworCV9fcGNpX3dyaXRlX21zaV9tc2coZGF0YS0+bXNpX2Rlc2MsICZtc2cpOwogCiAJcmV0dXJuIElSUV9TRVRfTUFTS19PS19OT0NPUFk7CiB9CkBAIC0zMTY5LDggKzMxNjksOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zaV9jaGlwID0gewogCS5uYW1lCQkJPSAiUENJLU1TSSIsCi0JLmlycV91bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9tYXNrCQk9IG1hc2tfbXNpX2lycSwKKwkuaXJxX3VubWFzawkJPSBwY2lfbXNpX3VubWFza19pcnEsCisJLmlycV9tYXNrCQk9IHBjaV9tc2lfbWFza19pcnEsCiAJLmlycV9hY2sJCT0gYWNrX2FwaWNfZWRnZSwKIAkuaXJxX3NldF9hZmZpbml0eQk9IG1zaV9zZXRfYWZmaW5pdHksCiAJLmlycV9yZXRyaWdnZXIJCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCkBAIC0zMTk2LDcgKzMxOTYsNyBAQAogCSAqIE1TSSBtZXNzYWdlIGRlbm90ZXMgYSBjb250aWd1b3VzIGdyb3VwIG9mIElSUXMsIHdyaXR0ZW4gZm9yIDB0aCBJUlEuCiAJICovCiAJaWYgKCFpcnFfb2Zmc2V0KQotCQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAKIAlzZXR1cF9yZW1hcHBlZF9pcnEoaXJxLCBpcnFfY2ZnKGlycSksIGNoaXApOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCmluZGV4IGU3Yzc5OGIuLjRmOTM1OWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCkBAIC00OCw3ICs0OCw2IEBACiAKICNkZWZpbmUgRU5UUlkoZW50cnkpIE9GRlNFVChwdF9yZWdzXyAjIyBlbnRyeSwgcHRfcmVncywgZW50cnkpCiAJRU5UUlkoYngpOwotCUVOVFJZKGJ4KTsKIAlFTlRSWShjeCk7CiAJRU5UUlkoZHgpOwogCUVOVFJZKHNwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDgxM2QyOWQuLjE1YzVkZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtNTY2LDYgKzU2NiwxNyBAQAogCiAJaWYgKCFjLT54ODZfbW9kZWxfaWRbMF0pCiAJCXN0cmNweShjLT54ODZfbW9kZWxfaWQsICJIYW1tZXIiKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwkvKgorCSAqIERpc2FibGUgVExCIGZsdXNoIGZpbHRlciBieSBzZXR0aW5nIEhXQ1IuRkZESVMgb24gSzgKKwkgKiBiaXQgNiBvZiBtc3IgQzAwMV8wMDE1CisJICoKKwkgKiBFcnJhdGEgNjMgZm9yIFNILUIzIHN0ZXBwaW5ncworCSAqIEVycmF0YSAxMjIgZm9yIGFsbCBzdGVwcGluZ3MgKEYrIGhhdmUgaXQgZGlzYWJsZWQgYnkgZGVmYXVsdCkKKwkgKi8KKwltc3Jfc2V0X2JpdChNU1JfSzdfSFdDUiwgNik7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9hbWRfZ2goc3RydWN0IGNwdWluZm9feDg2ICpjKQpAQCAtNjM2LDE4ICs2NDcsNiBAQAogewogCXUzMiBkdW1teTsKIAotI2lmZGVmIENPTkZJR19TTVAKLQkvKgotCSAqIERpc2FibGUgVExCIGZsdXNoIGZpbHRlciBieSBzZXR0aW5nIEhXQ1IuRkZESVMgb24gSzgKLQkgKiBiaXQgNiBvZiBtc3IgQzAwMV8wMDE1Ci0JICoKLQkgKiBFcnJhdGEgNjMgZm9yIFNILUIzIHN0ZXBwaW5ncwotCSAqIEVycmF0YSAxMjIgZm9yIGFsbCBzdGVwcGluZ3MgKEYrIGhhdmUgaXQgZGlzYWJsZWQgYnkgZGVmYXVsdCkKLQkgKi8KLQlpZiAoYy0+eDg2ID09IDB4ZikKLQkJbXNyX3NldF9iaXQoTVNSX0s3X0hXQ1IsIDYpOwotI2VuZGlmCi0KIAllYXJseV9pbml0X2FtZChjKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCBjZmE5YjViLi5jNjA0OTY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTk1OCwxNCArOTU4LDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19YODZfNjQKLXN0YXRpYyB2b2lkIHZnZXRjcHVfc2V0X21vZGUodm9pZCkKLXsKLQlpZiAoY3B1X2hhcygmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfUkRUU0NQKSkKLQkJdmdldGNwdV9tb2RlID0gVkdFVENQVV9SRFRTQ1A7Ci0JZWxzZQotCQl2Z2V0Y3B1X21vZGUgPSBWR0VUQ1BVX0xTTDsKLX0KLQogI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgogLyogTWF5IG5vdCBiZSBfX2luaXQ6IGNhbGxlZCBkdXJpbmcgcmVzdW1lICovCiBzdGF0aWMgdm9pZCBzeXNjYWxsMzJfY3B1X2luaXQodm9pZCkKQEAgLTEwMDgsOCArMTAwMCw2IEBACiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCXN5c2VudGVyX3NldHVwKCk7CiAJZW5hYmxlX3NlcF9jcHUoKTsKLSNlbHNlCi0JdmdldGNwdV9zZXRfbW9kZSgpOwogI2VuZGlmCiAJY3B1X2RldGVjdF90bGIoJmJvb3RfY3B1X2RhdGEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWludGVybmFsLmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW50ZXJuYWwuaAppbmRleCAwOWVkZDBiLi4xMGI0NjkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW50ZXJuYWwuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW50ZXJuYWwuaApAQCAtMyw2ICszLDggQEAKIAogZW51bSBzZXZlcml0eV9sZXZlbCB7CiAJTUNFX05PX1NFVkVSSVRZLAorCU1DRV9ERUZFUlJFRF9TRVZFUklUWSwKKwlNQ0VfVUNOQV9TRVZFUklUWSA9IE1DRV9ERUZFUlJFRF9TRVZFUklUWSwKIAlNQ0VfS0VFUF9TRVZFUklUWSwKIAlNQ0VfU09NRV9TRVZFUklUWSwKIAlNQ0VfQU9fU0VWRVJJVFksCkBAIC0yMSw3ICsyMyw3IEBACiAJY2hhcgkJCWF0dHJuYW1lW0FUVFJfTEVOXTsJLyogYXR0cmlidXRlIG5hbWUgKi8KIH07CiAKLWludCBtY2Vfc2V2ZXJpdHkoc3RydWN0IG1jZSAqYSwgaW50IHRvbGVyYW50LCBjaGFyICoqbXNnKTsKK2ludCBtY2Vfc2V2ZXJpdHkoc3RydWN0IG1jZSAqYSwgaW50IHRvbGVyYW50LCBjaGFyICoqbXNnLCBib29sIGlzX2V4Y3ApOwogc3RydWN0IGRlbnRyeSAqbWNlX2dldF9kZWJ1Z2ZzX2Rpcih2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBtY2VfYmFuayAqbWNlX2JhbmtzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLXNldmVyaXR5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2Utc2V2ZXJpdHkuYwppbmRleCBjMzcwZTFjLi44YmI0MzMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2Utc2V2ZXJpdHkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2Utc2V2ZXJpdHkuYwpAQCAtMzEsNiArMzEsNyBAQAogCiBlbnVtIGNvbnRleHQgeyBJTl9LRVJORUwgPSAxLCBJTl9VU0VSID0gMiB9OwogZW51bSBzZXIgeyBTRVJfUkVRVUlSRUQgPSAxLCBOT19TRVIgPSAyIH07CitlbnVtIGV4Y2VwdGlvbiB7IEVYQ1BfQ09OVEVYVCA9IDEsIE5PX0VYQ1AgPSAyIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2V2ZXJpdHkgewogCXU2NCBtYXNrOwpAQCAtNDAsNiArNDEsNyBAQAogCXVuc2lnbmVkIGNoYXIgbWNncmVzOwogCXVuc2lnbmVkIGNoYXIgc2VyOwogCXVuc2lnbmVkIGNoYXIgY29udGV4dDsKKwl1bnNpZ25lZCBjaGFyIGV4Y3A7CiAJdW5zaWduZWQgY2hhciBjb3ZlcmVkOwogCWNoYXIgKm1zZzsKIH0gc2V2ZXJpdGllc1tdID0gewpAQCAtNDgsNiArNTAsOCBAQAogI2RlZmluZSAgVVNFUgkJLmNvbnRleHQgPSBJTl9VU0VSCiAjZGVmaW5lICBTRVIJCS5zZXIgPSBTRVJfUkVRVUlSRUQKICNkZWZpbmUgIE5PU0VSCQkuc2VyID0gTk9fU0VSCisjZGVmaW5lICBFWENQCQkuZXhjcCA9IEVYQ1BfQ09OVEVYVAorI2RlZmluZSAgTk9FWENQCQkuZXhjcCA9IE5PX0VYQ1AKICNkZWZpbmUgIEJJVENMUih4KQkubWFzayA9IHgsIC5yZXN1bHQgPSAwCiAjZGVmaW5lICBCSVRTRVQoeCkJLm1hc2sgPSB4LCAucmVzdWx0ID0geAogI2RlZmluZSAgTUNHTUFTSyh4LCB5KQkubWNnbWFzayA9IHgsIC5tY2dyZXMgPSB5CkBAIC02Miw3ICs2Niw3IEBACiAJCSksCiAJTUNFU0VWKAogCQlOTywgIk5vdCBlbmFibGVkIiwKLQkJQklUQ0xSKE1DSV9TVEFUVVNfRU4pCisJCUVYQ1AsIEJJVENMUihNQ0lfU1RBVFVTX0VOKQogCQkpLAogCU1DRVNFVigKIAkJUEFOSUMsICJQcm9jZXNzb3IgY29udGV4dCBjb3JydXB0IiwKQEAgLTcxLDE2ICs3NSwyMCBAQAogCS8qIFdoZW4gTUNJUCBpcyBub3Qgc2V0IHNvbWV0aGluZyBpcyB2ZXJ5IGNvbmZ1c2VkICovCiAJTUNFU0VWKAogCQlQQU5JQywgIk1DSVAgbm90IHNldCBpbiBNQ0EgaGFuZGxlciIsCi0JCU1DR01BU0soTUNHX1NUQVRVU19NQ0lQLCAwKQorCQlFWENQLCBNQ0dNQVNLKE1DR19TVEFUVVNfTUNJUCwgMCkKIAkJKSwKIAkvKiBOZWl0aGVyIHJldHVybiBub3QgZXJyb3IgSVAgLS0gbm8gY2hhbmNlIHRvIHJlY292ZXIgLT4gUEFOSUMgKi8KIAlNQ0VTRVYoCiAJCVBBTklDLCAiTmVpdGhlciByZXN0YXJ0IG5vciBlcnJvciBJUCIsCi0JCU1DR01BU0soTUNHX1NUQVRVU19SSVBWfE1DR19TVEFUVVNfRUlQViwgMCkKKwkJRVhDUCwgTUNHTUFTSyhNQ0dfU1RBVFVTX1JJUFZ8TUNHX1NUQVRVU19FSVBWLCAwKQogCQkpLAogCU1DRVNFVigKIAkJUEFOSUMsICJJbiBrZXJuZWwgYW5kIG5vIHJlc3RhcnQgSVAiLAotCQlLRVJORUwsIE1DR01BU0soTUNHX1NUQVRVU19SSVBWLCAwKQorCQlFWENQLCBLRVJORUwsIE1DR01BU0soTUNHX1NUQVRVU19SSVBWLCAwKQorCQkpLAorCU1DRVNFVigKKwkJREVGRVJSRUQsICJEZWZlcnJlZCBlcnJvciIsCisJCU5PU0VSLCBNQVNLKE1DSV9TVEFUVVNfVUN8TUNJX1NUQVRVU19ERUZFUlJFRHxNQ0lfU1RBVFVTX1BPSVNPTiwgTUNJX1NUQVRVU19ERUZFUlJFRCkKIAkJKSwKIAlNQ0VTRVYoCiAJCUtFRVAsICJDb3JyZWN0ZWQgZXJyb3IiLApAQCAtODksNyArOTcsNyBAQAogCiAJLyogaWdub3JlIE9WRVIgZm9yIFVDTkEgKi8KIAlNQ0VTRVYoCi0JCUtFRVAsICJVbmNvcnJlY3RlZCBubyBhY3Rpb24gcmVxdWlyZWQiLAorCQlVQ05BLCAiVW5jb3JyZWN0ZWQgbm8gYWN0aW9uIHJlcXVpcmVkIiwKIAkJU0VSLCBNQVNLKE1DSV9VQ19TQVIsIE1DSV9TVEFUVVNfVUMpCiAJCSksCiAJTUNFU0VWKApAQCAtMTc4LDggKzE4Niw5IEBACiAJcmV0dXJuICgobS0+Y3MgJiAzKSA9PSAzKSA/IElOX1VTRVIgOiBJTl9LRVJORUw7CiB9CiAKLWludCBtY2Vfc2V2ZXJpdHkoc3RydWN0IG1jZSAqbSwgaW50IHRvbGVyYW50LCBjaGFyICoqbXNnKQoraW50IG1jZV9zZXZlcml0eShzdHJ1Y3QgbWNlICptLCBpbnQgdG9sZXJhbnQsIGNoYXIgKiptc2csIGJvb2wgaXNfZXhjcCkKIHsKKwllbnVtIGV4Y2VwdGlvbiBleGNwID0gKGlzX2V4Y3AgPyBFWENQX0NPTlRFWFQgOiBOT19FWENQKTsKIAllbnVtIGNvbnRleHQgY3R4ID0gZXJyb3JfY29udGV4dChtKTsKIAlzdHJ1Y3Qgc2V2ZXJpdHkgKnM7CiAKQEAgLTE5NCw2ICsyMDMsOCBAQAogCQkJY29udGludWU7CiAJCWlmIChzLT5jb250ZXh0ICYmIGN0eCAhPSBzLT5jb250ZXh0KQogCQkJY29udGludWU7CisJCWlmIChzLT5leGNwICYmIGV4Y3AgIT0gcy0+ZXhjcCkKKwkJCWNvbnRpbnVlOwogCQlpZiAobXNnKQogCQkJKm1zZyA9IHMtPm1zZzsKIAkJcy0+Y292ZXJlZCA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCmluZGV4IDYxYTk2NjhjZS4uZDJjNjExNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKQEAgLTI5MiwxMCArMjkyLDEwIEBACiAKICNkZWZpbmUgUEFOSUNfVElNRU9VVCA1IC8qIDUgc2Vjb25kcyAqLwogCi1zdGF0aWMgYXRvbWljX3QgbWNlX3BhbmljZWQ7CitzdGF0aWMgYXRvbWljX3QgbWNlX3Bhbmlja2VkOwogCiBzdGF0aWMgaW50IGZha2VfcGFuaWM7Ci1zdGF0aWMgYXRvbWljX3QgbWNlX2Zha2VfcGFuaWNlZDsKK3N0YXRpYyBhdG9taWNfdCBtY2VfZmFrZV9wYW5pY2tlZDsKIAogLyogUGFuaWMgaW4gcHJvZ3Jlc3MuIEVuYWJsZSBpbnRlcnJ1cHRzIGFuZCB3YWl0IGZvciBmaW5hbCBJUEkgKi8KIHN0YXRpYyB2b2lkIHdhaXRfZm9yX3BhbmljKHZvaWQpCkBAIC0zMTksNyArMzE5LDcgQEAKIAkJLyoKIAkJICogTWFrZSBzdXJlIG9ubHkgb25lIENQVSBydW5zIGluIG1hY2hpbmUgY2hlY2sgcGFuaWMKIAkJICovCi0JCWlmIChhdG9taWNfaW5jX3JldHVybigmbWNlX3BhbmljZWQpID4gMSkKKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZtY2VfcGFuaWNrZWQpID4gMSkKIAkJCXdhaXRfZm9yX3BhbmljKCk7CiAJCWJhcnJpZXIoKTsKIApAQCAtMzI3LDcgKzMyNyw3IEBACiAJCWNvbnNvbGVfdmVyYm9zZSgpOwogCX0gZWxzZSB7CiAJCS8qIERvbid0IGxvZyB0b28gbXVjaCBmb3IgZmFrZSBwYW5pYyAqLwotCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJm1jZV9mYWtlX3BhbmljZWQpID4gMSkKKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZtY2VfZmFrZV9wYW5pY2tlZCkgPiAxKQogCQkJcmV0dXJuOwogCX0KIAkvKiBGaXJzdCBwcmludCBjb3JyZWN0ZWQgb25lcyB0aGF0IGFyZSBzdGlsbCB1bmxvZ2dlZCAqLwpAQCAtNTc1LDYgKzU3NSwzNyBAQAogCX0KIH0KIAorc3RhdGljIGJvb2wgbWVtb3J5X2Vycm9yKHN0cnVjdCBtY2UgKm0pCit7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmJvb3RfY3B1X2RhdGE7CisKKwlpZiAoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgeworCQkvKgorCQkgKiBjb21pbmcgc29vbgorCQkgKi8KKwkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSBpZiAoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CisJCS8qCisJCSAqIEludGVsIFNETSBWb2x1bWUgM0IgLSAxNS45LjIgQ29tcG91bmQgRXJyb3IgQ29kZXMKKwkJICoKKwkJICogQml0IDcgb2YgdGhlIE1DQUNPRCBmaWVsZCBvZiBJQTMyX01DaV9TVEFUVVMgaXMgdXNlZCBmb3IKKwkJICogaW5kaWNhdGluZyBhIG1lbW9yeSBlcnJvci4gQml0IDggaXMgdXNlZCBmb3IgaW5kaWNhdGluZyBhCisJCSAqIGNhY2hlIGhpZXJhcmNoeSBlcnJvci4gVGhlIGNvbWJpbmF0aW9uIG9mIGJpdCAyIGFuZCBiaXQgMworCQkgKiBpcyB1c2VkIGZvciBpbmRpY2F0aW5nIGEgYGdlbmVyaWMnIGNhY2hlIGhpZXJhcmNoeSBlcnJvcgorCQkgKiBCdXQgd2UgY2FuJ3QganVzdCBibGluZGx5IGNoZWNrIHRoZSBhYm92ZSBiaXRzLCBiZWNhdXNlIGlmCisJCSAqIGJpdCAxMSBpcyBzZXQsIHRoZW4gaXQgaXMgYSBidXMvaW50ZXJjb25uZWN0IGVycm9yIC0gYW5kCisJCSAqIGVpdGhlciB3YXkgdGhlIGFib3ZlIGJpdHMganVzdCBnaXZlcyBtb3JlIGRldGFpbCBvbiB3aGF0CisJCSAqIGJ1cy9pbnRlcmNvbm5lY3QgZXJyb3IgaGFwcGVuZWQuIE5vdGUgdGhhdCBiaXQgMTIgY2FuIGJlCisJCSAqIGlnbm9yZWQsIGFzIGl0J3MgdGhlICJmaWx0ZXIiIGJpdC4KKwkJICovCisJCXJldHVybiAobS0+c3RhdHVzICYgMHhlZjgwKSA9PSBCSVQoNykgfHwKKwkJICAgICAgIChtLT5zdGF0dXMgJiAweGVmMDApID09IEJJVCg4KSB8fAorCQkgICAgICAgKG0tPnN0YXR1cyAmIDB4ZWZmYykgPT0gMHhjOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogREVGSU5FX1BFUl9DUFUodW5zaWduZWQsIG1jZV9wb2xsX2NvdW50KTsKIAogLyoKQEAgLTU5NSw2ICs2MjYsNyBAQAogdm9pZCBtYWNoaW5lX2NoZWNrX3BvbGwoZW51bSBtY3BfZmxhZ3MgZmxhZ3MsIG1jZV9iYW5rc190ICpiKQogewogCXN0cnVjdCBtY2UgbTsKKwlpbnQgc2V2ZXJpdHk7CiAJaW50IGk7CiAKIAl0aGlzX2NwdV9pbmMobWNlX3BvbGxfY291bnQpOwpAQCAtNjMwLDYgKzY2MiwyMCBAQAogCiAJCWlmICghKGZsYWdzICYgTUNQX1RJTUVTVEFNUCkpCiAJCQltLnRzYyA9IDA7CisKKwkJc2V2ZXJpdHkgPSBtY2Vfc2V2ZXJpdHkoJm0sIG1jYV9jZmcudG9sZXJhbnQsIE5VTEwsIGZhbHNlKTsKKworCQkvKgorCQkgKiBJbiB0aGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIGFkZHJlc3MgYWZ0ZXIgYWxsLAorCQkgKiBkbyBub3QgYWRkIGl0IGludG8gdGhlIHJpbmcgYnVmZmVyLgorCQkgKi8KKwkJaWYgKHNldmVyaXR5ID09IE1DRV9ERUZFUlJFRF9TRVZFUklUWSAmJiBtZW1vcnlfZXJyb3IoJm0pKSB7CisJCQlpZiAobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX0FERFJWKSB7CisJCQkJbWNlX3JpbmdfYWRkKG0uYWRkciA+PiBQQUdFX1NISUZUKTsKKwkJCQltY2Vfc2NoZWR1bGVfd29yaygpOworCQkJfQorCQl9CisKIAkJLyoKIAkJICogRG9uJ3QgZ2V0IHRoZSBJUCBoZXJlIGJlY2F1c2UgaXQncyB1bmxpa2VseSB0bwogCQkgKiBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGFjdHVhbCBlcnJvciBsb2NhdGlvbi4KQEAgLTY2OCw3ICs3MTQsOCBAQAogCQkJaWYgKHF1aXJrX25vX3dheV9vdXQpCiAJCQkJcXVpcmtfbm9fd2F5X291dChpLCBtLCByZWdzKTsKIAkJfQotCQlpZiAobWNlX3NldmVyaXR5KG0sIG1jYV9jZmcudG9sZXJhbnQsIG1zZykgPj0gTUNFX1BBTklDX1NFVkVSSVRZKQorCQlpZiAobWNlX3NldmVyaXR5KG0sIG1jYV9jZmcudG9sZXJhbnQsIG1zZywgdHJ1ZSkgPj0KKwkJICAgIE1DRV9QQU5JQ19TRVZFUklUWSkKIAkJCXJldCA9IDE7CiAJfQogCXJldHVybiByZXQ7CkBAIC02OTcsNyArNzQ0LDcgQEAKIAkgKiBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlLgogCSAqLwogCXJtYigpOwotCWlmIChhdG9taWNfcmVhZCgmbWNlX3BhbmljZWQpKQorCWlmIChhdG9taWNfcmVhZCgmbWNlX3Bhbmlja2VkKSkKIAkJd2FpdF9mb3JfcGFuaWMoKTsKIAlpZiAoIW1jYV9jZmcubW9uYXJjaF90aW1lb3V0KQogCQlnb3RvIG91dDsKQEAgLTc1NCw3ICs4MDEsNyBAQAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaW50IHNldmVyaXR5ID0gbWNlX3NldmVyaXR5KCZwZXJfY3B1KG1jZXNfc2VlbiwgY3B1KSwKIAkJCQkJICAgIG1jYV9jZmcudG9sZXJhbnQsCi0JCQkJCSAgICAmbm1zZyk7CisJCQkJCSAgICAmbm1zZywgdHJ1ZSk7CiAJCWlmIChzZXZlcml0eSA+IGdsb2JhbF93b3JzdCkgewogCQkJbXNnID0gbm1zZzsKIAkJCWdsb2JhbF93b3JzdCA9IHNldmVyaXR5OwpAQCAtMTA5NSwxMyArMTE0MiwxNCBAQAogCQkgKi8KIAkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0ssIExPQ0tERVBfTk9XX1VOUkVMSUFCTEUpOwogCi0JCXNldmVyaXR5ID0gbWNlX3NldmVyaXR5KCZtLCBjZmctPnRvbGVyYW50LCBOVUxMKTsKKwkJc2V2ZXJpdHkgPSBtY2Vfc2V2ZXJpdHkoJm0sIGNmZy0+dG9sZXJhbnQsIE5VTEwsIHRydWUpOwogCiAJCS8qCi0JCSAqIFdoZW4gbWFjaGluZSBjaGVjayB3YXMgZm9yIGNvcnJlY3RlZCBoYW5kbGVyIGRvbid0IHRvdWNoLAotCQkgKiB1bmxlc3Mgd2UncmUgcGFuaWNpbmcuCisJCSAqIFdoZW4gbWFjaGluZSBjaGVjayB3YXMgZm9yIGNvcnJlY3RlZC9kZWZlcnJlZCBoYW5kbGVyIGRvbid0CisJCSAqIHRvdWNoLCB1bmxlc3Mgd2UncmUgcGFuaWNpbmcuCiAJCSAqLwotCQlpZiAoc2V2ZXJpdHkgPT0gTUNFX0tFRVBfU0VWRVJJVFkgJiYgIW5vX3dheV9vdXQpCisJCWlmICgoc2V2ZXJpdHkgPT0gTUNFX0tFRVBfU0VWRVJJVFkgfHwKKwkJICAgICBzZXZlcml0eSA9PSBNQ0VfVUNOQV9TRVZFUklUWSkgJiYgIW5vX3dheV9vdXQpCiAJCQljb250aW51ZTsKIAkJX19zZXRfYml0KGksIHRvY2xlYXIpOwogCQlpZiAoc2V2ZXJpdHkgPT0gTUNFX05PX1NFVkVSSVRZKSB7CkBAIC0yNTIwLDcgKzI1NjgsNyBAQAogc3RhdGljIHZvaWQgbWNlX3Jlc2V0KHZvaWQpCiB7CiAJY3B1X21pc3NpbmcgPSAwOwotCWF0b21pY19zZXQoJm1jZV9mYWtlX3BhbmljZWQsIDApOworCWF0b21pY19zZXQoJm1jZV9mYWtlX3Bhbmlja2VkLCAwKTsKIAlhdG9taWNfc2V0KCZtY2VfZXhlY3V0aW5nLCAwKTsKIAlhdG9taWNfc2V0KCZtY2VfY2FsbGluLCAwKTsKIAlhdG9taWNfc2V0KCZnbG9iYWxfbndvLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYwppbmRleCA1ZDQ5OTlmLi5mMWMzNzY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCkBAIC0yMTIsMTIgKzIxMiwxMiBAQAogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdTMyIGxvdyA9IDAsIGhpZ2ggPSAwLCBhZGRyZXNzID0gMDsKIAl1bnNpZ25lZCBpbnQgYmFuaywgYmxvY2s7Ci0JaW50IG9mZnNldCA9IC0xOworCWludCBvZmZzZXQgPSAtMSwgbmV3OwogCiAJZm9yIChiYW5rID0gMDsgYmFuayA8IG1jYV9jZmcuYmFua3M7ICsrYmFuaykgewogCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCBOUl9CTE9DS1M7ICsrYmxvY2spIHsKIAkJCWlmIChibG9jayA9PSAwKQotCQkJCWFkZHJlc3MgPSBNU1JfSUEzMl9NQzBfTUlTQyArIGJhbmsgKiA0OworCQkJCWFkZHJlc3MgPSBNU1JfSUEzMl9NQ3hfTUlTQyhiYW5rKTsKIAkJCWVsc2UgaWYgKGJsb2NrID09IDEpIHsKIAkJCQlhZGRyZXNzID0gKGxvdyAmIE1BU0tfQkxLUFRSX0xPKSA+PiAyMTsKIAkJCQlpZiAoIWFkZHJlc3MpCkBAIC0yNDcsMTMgKzI0NywxOCBAQAogCQkJYi5hZGRyZXNzCQk9IGFkZHJlc3M7CiAJCQliLmludGVycnVwdF9jYXBhYmxlCT0gbHZ0X2ludGVycnVwdF9zdXBwb3J0ZWQoYmFuaywgaGlnaCk7CiAKLQkJCWlmIChiLmludGVycnVwdF9jYXBhYmxlKSB7Ci0JCQkJaW50IG5ldyA9IChoaWdoICYgTUFTS19MVlRPRkZfSEkpID4+IDIwOwotCQkJCW9mZnNldCAgPSBzZXR1cF9BUElDX21jZShvZmZzZXQsIG5ldyk7Ci0JCQl9CisJCQlpZiAoIWIuaW50ZXJydXB0X2NhcGFibGUpCisJCQkJZ290byBpbml0OwogCisJCQluZXcJPSAoaGlnaCAmIE1BU0tfTFZUT0ZGX0hJKSA+PiAyMDsKKwkJCW9mZnNldCAgPSBzZXR1cF9BUElDX21jZShvZmZzZXQsIG5ldyk7CisKKwkJCWlmICgob2Zmc2V0ID09IG5ldykgJiYKKwkJCSAgICAobWNlX3RocmVzaG9sZF92ZWN0b3IgIT0gYW1kX3RocmVzaG9sZF9pbnRlcnJ1cHQpKQorCQkJCW1jZV90aHJlc2hvbGRfdmVjdG9yID0gYW1kX3RocmVzaG9sZF9pbnRlcnJ1cHQ7CisKK2luaXQ6CiAJCQltY2VfdGhyZXNob2xkX2Jsb2NrX2luaXQoJmIsIG9mZnNldCk7Ci0JCQltY2VfdGhyZXNob2xkX3ZlY3RvciA9IGFtZF90aHJlc2hvbGRfaW50ZXJydXB0OwogCQl9CiAJfQogfQpAQCAtMjcwLDE4ICsyNzUsMTcgQEAKIHN0YXRpYyB2b2lkIGFtZF90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpCiB7CiAJdTMyIGxvdyA9IDAsIGhpZ2ggPSAwLCBhZGRyZXNzID0gMDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGludCBiYW5rLCBibG9jazsKIAlzdHJ1Y3QgbWNlIG07CiAKLQltY2Vfc2V0dXAoJm0pOwotCiAJLyogYXNzdW1lIGZpcnN0IGJhbmsgY2F1c2VkIGl0ICovCiAJZm9yIChiYW5rID0gMDsgYmFuayA8IG1jYV9jZmcuYmFua3M7ICsrYmFuaykgewotCQlpZiAoIShwZXJfY3B1KGJhbmtfbWFwLCBtLmNwdSkgJiAoMSA8PCBiYW5rKSkpCisJCWlmICghKHBlcl9jcHUoYmFua19tYXAsIGNwdSkgJiAoMSA8PCBiYW5rKSkpCiAJCQljb250aW51ZTsKIAkJZm9yIChibG9jayA9IDA7IGJsb2NrIDwgTlJfQkxPQ0tTOyArK2Jsb2NrKSB7CiAJCQlpZiAoYmxvY2sgPT0gMCkgewotCQkJCWFkZHJlc3MgPSBNU1JfSUEzMl9NQzBfTUlTQyArIGJhbmsgKiA0OworCQkJCWFkZHJlc3MgPSBNU1JfSUEzMl9NQ3hfTUlTQyhiYW5rKTsKIAkJCX0gZWxzZSBpZiAoYmxvY2sgPT0gMSkgewogCQkJCWFkZHJlc3MgPSAobG93ICYgTUFTS19CTEtQVFJfTE8pID4+IDIxOwogCQkJCWlmICghYWRkcmVzcykKQEAgLTMwOSwyMSArMzEzLDIwIEBACiAJCQkgKiBMb2cgdGhlIG1hY2hpbmUgY2hlY2sgdGhhdCBjYXVzZWQgdGhlIHRocmVzaG9sZAogCQkJICogZXZlbnQuCiAJCQkgKi8KLQkJCW1hY2hpbmVfY2hlY2tfcG9sbChNQ1BfVElNRVNUQU1QLAotCQkJCQl0aGlzX2NwdV9wdHIoJm1jZV9wb2xsX2JhbmtzKSk7Ci0KLQkJCWlmIChoaWdoICYgTUFTS19PVkVSRkxPV19ISSkgewotCQkJCXJkbXNybChhZGRyZXNzLCBtLm1pc2MpOwotCQkJCXJkbXNybChNU1JfSUEzMl9NQzBfU1RBVFVTICsgYmFuayAqIDQsCi0JCQkJICAgICAgIG0uc3RhdHVzKTsKLQkJCQltLmJhbmsgPSBLOF9NQ0VfVEhSRVNIT0xEX0JBU0UKLQkJCQkgICAgICAgKyBiYW5rICogTlJfQkxPQ0tTCi0JCQkJICAgICAgICsgYmxvY2s7Ci0JCQkJbWNlX2xvZygmbSk7Ci0JCQkJcmV0dXJuOwotCQkJfQorCQkJaWYgKGhpZ2ggJiBNQVNLX09WRVJGTE9XX0hJKQorCQkJCWdvdG8gbG9nOwogCQl9CiAJfQorCXJldHVybjsKKworbG9nOgorCW1jZV9zZXR1cCgmbSk7CisJcmRtc3JsKE1TUl9JQTMyX01DeF9TVEFUVVMoYmFuayksIG0uc3RhdHVzKTsKKwltLm1pc2MgPSAoKHU2NCloaWdoIDw8IDMyKSB8IGxvdzsKKwltLmJhbmsgPSBiYW5rOworCW1jZV9sb2coJm0pOworCisJd3Jtc3JsKE1TUl9JQTMyX01DeF9TVEFUVVMoYmFuayksIDApOwogfQogCiAvKgpAQCAtNjE3LDggKzYyMCw3IEBACiAJCX0KIAl9CiAKLQllcnIgPSBhbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2tzKGNwdSwgYmFuaywgMCwKLQkJCQkJTVNSX0lBMzJfTUMwX01JU0MgKyBiYW5rICogNCk7CisJZXJyID0gYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrcyhjcHUsIGJhbmssIDAsIE1TUl9JQTMyX01DeF9NSVNDKGJhbmspKTsKIAlpZiAoIWVycikKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvYW1kLmMKaW5kZXggOGZmZmQ4NC4uYmZiYmU2MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvYW1kLmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCXJldHVybiBVQ09ERV9PSzsKIH0KIAotZW51bSB1Y29kZV9zdGF0ZSBsb2FkX21pY3JvY29kZV9hbWQodTggZmFtaWx5LCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IHNpemUpCitlbnVtIHVjb2RlX3N0YXRlIGxvYWRfbWljcm9jb2RlX2FtZChpbnQgY3B1LCB1OCBmYW1pbHksIGNvbnN0IHU4ICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKIAllbnVtIHVjb2RlX3N0YXRlIHJldDsKIApAQCAtMzkwLDggKzM5MCw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19NSUNST0NPREVfQU1EX0VBUkxZKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCiAJLyogc2F2ZSBCU1AncyBtYXRjaGluZyBwYXRjaCBmb3IgZWFybHkgbG9hZCAqLwotCWlmIChjcHVfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCkpLmNwdV9pbmRleCA9PSBib290X2NwdV9kYXRhLmNwdV9pbmRleCkgewotCQlzdHJ1Y3QgdWNvZGVfcGF0Y2ggKnAgPSBmaW5kX3BhdGNoKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJaWYgKGNwdV9kYXRhKGNwdSkuY3B1X2luZGV4ID09IGJvb3RfY3B1X2RhdGEuY3B1X2luZGV4KSB7CisJCXN0cnVjdCB1Y29kZV9wYXRjaCAqcCA9IGZpbmRfcGF0Y2goY3B1KTsKIAkJaWYgKHApIHsKIAkJCW1lbXNldChhbWRfdWNvZGVfcGF0Y2gsIDAsIFBBVENIX01BWF9TSVpFKTsKIAkJCW1lbWNweShhbWRfdWNvZGVfcGF0Y2gsIHAtPmRhdGEsIG1pbl90KHUzMiwga3NpemUocC0+ZGF0YSksCkBAIC00NDQsNyArNDQ0LDcgQEAKIAkJZ290byBmd19yZWxlYXNlOwogCX0KIAotCXJldCA9IGxvYWRfbWljcm9jb2RlX2FtZChjLT54ODYsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJcmV0ID0gbG9hZF9taWNyb2NvZGVfYW1kKGNwdSwgYy0+eDg2LCBmdy0+ZGF0YSwgZnctPnNpemUpOwogCiAgZndfcmVsZWFzZToKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZF9lYXJseS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvYW1kX2Vhcmx5LmMKaW5kZXggMDY2NzQ0Ny4uNzM3NzM3ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvYW1kX2Vhcmx5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvYW1kX2Vhcmx5LmMKQEAgLTM4OSw3ICszODksNyBAQAogCWVheCAgID0gY3B1aWRfZWF4KDB4MDAwMDAwMDEpOwogCWVheCAgID0gKChlYXggPj4gOCkgJiAweGYpICsgKChlYXggPj4gMjApICYgMHhmZik7CiAKLQlyZXQgPSBsb2FkX21pY3JvY29kZV9hbWQoZWF4LCBjb250YWluZXIsIGNvbnRhaW5lcl9zaXplKTsKKwlyZXQgPSBsb2FkX21pY3JvY29kZV9hbWQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBlYXgsIGNvbnRhaW5lciwgY29udGFpbmVyX3NpemUpOwogCWlmIChyZXQgIT0gVUNPREVfT0spCiAJCXJldHZhbCA9IC1FSU5WQUw7CiAKQEAgLTQwMiwzICs0MDIsMjEgQEAKIAogCXJldHVybiByZXR2YWw7CiB9CisKK3ZvaWQgcmVsb2FkX3Vjb2RlX2FtZCh2b2lkKQoreworCXN0cnVjdCBtaWNyb2NvZGVfYW1kICptYzsKKwl1MzIgcmV2LCBlYXg7CisKKwlyZG1zcihNU1JfQU1ENjRfUEFUQ0hfTEVWRUwsIHJldiwgZWF4KTsKKworCW1jID0gKHN0cnVjdCBtaWNyb2NvZGVfYW1kICopYW1kX3Vjb2RlX3BhdGNoOworCisJaWYgKG1jICYmIHJldiA8IG1jLT5oZHIucGF0Y2hfaWQpIHsKKwkJaWYgKCFfX2FwcGx5X21pY3JvY29kZV9hbWQobWMpKSB7CisJCQl1Y29kZV9uZXdfcmV2ID0gbWMtPmhkci5wYXRjaF9pZDsKKwkJCXByX2luZm8oIm1pY3JvY29kZTogcmVsb2FkIHBhdGNoX2xldmVsPTB4JTA4eFxuIiwKKwkJCQl1Y29kZV9uZXdfcmV2KTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmUuYwppbmRleCAwOGZlNmU4Li4xNWMyOTA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZS5jCkBAIC00NjUsMTYgKzQ2NSw4IEBACiAKIAlpZiAodWNpLT52YWxpZCAmJiB1Y2ktPm1jKQogCQltaWNyb2NvZGVfb3BzLT5hcHBseV9taWNyb2NvZGUoY3B1KTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJZWxzZSBpZiAoIXVjaS0+bWMpCi0JCS8qCi0JCSAqIFdlIG1pZ2h0IHJlc3VtZSBhbmQgbm90IGhhdmUgYXBwbGllZCBsYXRlIG1pY3JvY29kZSBidXQgc3RpbGwKLQkJICogaGF2ZSBhIG5ld2VyIHBhdGNoIHN0YXNoZWQgZnJvbSB0aGUgZWFybHkgbG9hZGVyLiBXZSBkb24ndAotCQkgKiBoYXZlIGl0IGluIHVjaS0+bWMgc28gd2UgaGF2ZSB0byBsb2FkIGl0IHRoZSBzYW1lIHdheSB3ZSdyZQotCQkgKiBhcHBseWluZyBwYXRjaGVzIGVhcmx5IG9uIHRoZSBBUHMuCi0JCSAqLwotCQlsb2FkX3Vjb2RlX2FwKCk7Ci0jZW5kaWYKKwkJcmVsb2FkX2Vhcmx5X21pY3JvY29kZSgpOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIG1jX3N5c2NvcmVfb3BzID0gewpAQCAtNTU5LDcgKzU1MSw3IEBACiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwogCWludCBlcnJvcjsKIAotCWlmIChkaXNfdWNvZGVfbGRyKQorCWlmIChwYXJhdmlydF9lbmFibGVkKCkgfHwgZGlzX3Vjb2RlX2xkcikKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZV9lYXJseS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZV9lYXJseS5jCmluZGV4IDJjMDE3ZjIuLmQ0NWRmNGJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlX2Vhcmx5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZV9lYXJseS5jCkBAIC0xNzYsMyArMTc2LDI0IEBACiAKIAlyZXR1cm4gMDsKIH0KKwordm9pZCByZWxvYWRfZWFybHlfbWljcm9jb2RlKHZvaWQpCit7CisJaW50IHZlbmRvciwgeDg2OworCisJdmVuZG9yID0geDg2X3ZlbmRvcigpOworCXg4NiA9IHg4Nl9mYW1pbHkoKTsKKworCXN3aXRjaCAodmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQlpZiAoeDg2ID49IDYpCisJCQlyZWxvYWRfdWNvZGVfaW50ZWwoKTsKKwkJYnJlYWs7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJaWYgKHg4NiA+PSAweDEwKQorCQkJcmVsb2FkX3Vjb2RlX2FtZCgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9pbnRlbF9lYXJseS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvaW50ZWxfZWFybHkuYwppbmRleCBiODgzNDNmLi5lYzlkZjZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9pbnRlbF9lYXJseS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2ludGVsX2Vhcmx5LmMKQEAgLTY1MCw4ICs2NTAsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgYXBwbHlfbWljcm9jb2RlX2Vhcmx5KHN0cnVjdCBtY19zYXZlZF9kYXRhICptY19zYXZlZF9kYXRhLAotCQkJCSBzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSkKK3N0YXRpYyBpbnQgYXBwbHlfbWljcm9jb2RlX2Vhcmx5KHN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpLCBib29sIGVhcmx5KQogewogCXN0cnVjdCBtaWNyb2NvZGVfaW50ZWwgKm1jX2ludGVsOwogCXVuc2lnbmVkIGludCB2YWxbMl07CkBAIC02ODAsNyArNjc5LDEwIEBACiAjZW5kaWYKIAl1Y2ktPmNwdV9zaWcucmV2ID0gdmFsWzFdOwogCi0JcHJpbnRfdWNvZGUodWNpKTsKKwlpZiAoZWFybHkpCisJCXByaW50X3Vjb2RlKHVjaSk7CisJZWxzZQorCQlwcmludF91Y29kZV9pbmZvKHVjaSwgbWNfaW50ZWwtPmhkci5kYXRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzE1LDEyICs3MTcsMTcgQEAKIAkJICAgICAgdW5zaWduZWQgbG9uZyBpbml0cmRfZW5kX2Vhcmx5LAogCQkgICAgICBzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSkKIHsKKwllbnVtIHVjb2RlX3N0YXRlIHJldDsKKwogCWNvbGxlY3RfY3B1X2luZm9fZWFybHkodWNpKTsKIAlzY2FuX21pY3JvY29kZShpbml0cmRfc3RhcnRfZWFybHksIGluaXRyZF9lbmRfZWFybHksIG1jX3NhdmVkX2RhdGEsCiAJCSAgICAgICBtY19zYXZlZF9pbl9pbml0cmQsIHVjaSk7Ci0JbG9hZF9taWNyb2NvZGUobWNfc2F2ZWRfZGF0YSwgbWNfc2F2ZWRfaW5faW5pdHJkLAotCQkgICAgICAgaW5pdHJkX3N0YXJ0X2Vhcmx5LCB1Y2kpOwotCWFwcGx5X21pY3JvY29kZV9lYXJseShtY19zYXZlZF9kYXRhLCB1Y2kpOworCisJcmV0ID0gbG9hZF9taWNyb2NvZGUobWNfc2F2ZWRfZGF0YSwgbWNfc2F2ZWRfaW5faW5pdHJkLAorCQkJICAgICBpbml0cmRfc3RhcnRfZWFybHksIHVjaSk7CisKKwlpZiAocmV0ID09IFVDT0RFX09LKQorCQlhcHBseV9taWNyb2NvZGVfZWFybHkodWNpLCB0cnVlKTsKIH0KIAogdm9pZCBfX2luaXQKQEAgLTc0OSw3ICs3NTYsOCBAQAogCWluaXRyZF9lbmRfZWFybHkgPSBpbml0cmRfc3RhcnRfZWFybHkgKyByYW1kaXNrX3NpemU7CiAKIAlfbG9hZF91Y29kZV9pbnRlbF9ic3AoJm1jX3NhdmVkX2RhdGEsIG1jX3NhdmVkX2luX2luaXRyZCwKLQkJCSAgICAgIGluaXRyZF9zdGFydF9lYXJseSwgaW5pdHJkX2VuZF9lYXJseSwgJnVjaSk7CisJCQkgICAgICBpbml0cmRfc3RhcnRfZWFybHksIGluaXRyZF9lbmRfZWFybHksCisJCQkgICAgICAmdWNpKTsKICNlbmRpZgogfQogCkBAIC03ODMsNSArNzkxLDIzIEBACiAJY29sbGVjdF9jcHVfaW5mb19lYXJseSgmdWNpKTsKIAlsb2FkX21pY3JvY29kZShtY19zYXZlZF9kYXRhX3AsIG1jX3NhdmVkX2luX2luaXRyZF9wLAogCQkgICAgICAgaW5pdHJkX3N0YXJ0X2FkZHIsICZ1Y2kpOwotCWFwcGx5X21pY3JvY29kZV9lYXJseShtY19zYXZlZF9kYXRhX3AsICZ1Y2kpOworCWFwcGx5X21pY3JvY29kZV9lYXJseSgmdWNpLCB0cnVlKTsKK30KKwordm9pZCByZWxvYWRfdWNvZGVfaW50ZWwodm9pZCkKK3sKKwlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gdWNpOworCWVudW0gdWNvZGVfc3RhdGUgcmV0OworCisJaWYgKCFtY19zYXZlZF9kYXRhLm1jX3NhdmVkX2NvdW50KQorCQlyZXR1cm47CisKKwljb2xsZWN0X2NwdV9pbmZvX2Vhcmx5KCZ1Y2kpOworCisJcmV0ID0gZ2VuZXJpY19sb2FkX21pY3JvY29kZV9lYXJseShtY19zYXZlZF9kYXRhLm1jX3NhdmVkLAorCQkJCQkgICBtY19zYXZlZF9kYXRhLm1jX3NhdmVkX2NvdW50LCAmdWNpKTsKKwlpZiAocmV0ICE9IFVDT0RFX09LKQorCQlyZXR1cm47CisKKwlhcHBseV9taWNyb2NvZGVfZWFybHkoJnVjaSwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuaAppbmRleCBmYzVlYjM5Li40ZTZjZGIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuaApAQCAtMjUzLDYgKzI1MywxMCBAQAogI2RlZmluZSBJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVChjLCBuKQlcCiAJRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBJTlRFTF9BUkNIX0VWRU5UX01BU0spCiAKKy8qIExpa2UgVUVWRU5UX0NPTlNUUkFJTlQsIGJ1dCBtYXRjaCBmbGFncyB0b28gKi8KKyNkZWZpbmUgSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoYywgbikJXAorCUVWRU5UX0NPTlNUUkFJTlQoYywgbiwgSU5URUxfQVJDSF9FVkVOVF9NQVNLfFg4Nl9BTExfRVZFTlRfRkxBR1MpCisKICNkZWZpbmUgSU5URUxfUExEX0NPTlNUUkFJTlQoYywgbikJXAogCV9fRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBJTlRFTF9BUkNIX0VWRU5UX01BU0t8WDg2X0FMTF9FVkVOVF9GTEFHUywgXAogCQkJICAgSFdFSUdIVChuKSwgMCwgUEVSRl9YODZfRVZFTlRfUEVCU19MRExBVCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWRfaWJzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kX2licy5jCmluZGV4IGNiYjFiZTNlLi5hNjFmNWM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kX2licy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWRfaWJzLmMKQEAgLTU2NSw2ICs1NjUsMjEgQEAKIAkJCQkgICAgICAgcGVyZl9pYnMtPm9mZnNldF9tYXgsCiAJCQkJICAgICAgIG9mZnNldCArIDEpOwogCX0gd2hpbGUgKG9mZnNldCA8IG9mZnNldF9tYXgpOworCWlmIChldmVudC0+YXR0ci5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykgeworCQkvKgorCQkgKiBSZWFkIElic0JyVGFyZ2V0IGFuZCBJYnNPcERhdGE0IHNlcGFyYXRlbHkKKwkJICogZGVwZW5kaW5nIG9uIHRoZWlyIGF2YWlsYWJpbGl0eS4KKwkJICogQ2FuJ3QgYWRkIHRvIG9mZnNldF9tYXggYXMgdGhleSBhcmUgc3RhZ2dlcmVkCisJCSAqLworCQlpZiAoaWJzX2NhcHMgJiBJQlNfQ0FQU19CUk5UUkdUKSB7CisJCQlyZG1zcmwoTVNSX0FNRDY0X0lCU0JSVEFSR0VULCAqYnVmKyspOworCQkJc2l6ZSsrOworCQl9CisJCWlmIChpYnNfY2FwcyAmIElCU19DQVBTX09QREFUQTQpIHsKKwkJCXJkbXNybChNU1JfQU1ENjRfSUJTT1BEQVRBNCwgKmJ1ZisrKTsKKwkJCXNpemUrKzsKKwkJfQorCX0KIAlpYnNfZGF0YS5zaXplID0gc2l6ZW9mKHU2NCkgKiBzaXplOwogCiAJcmVncyA9ICppcmVnczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9kcy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMKaW5kZXggNDYyMTFiYy4uM2M4OTVkNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMKQEAgLTU1MiwxOCArNTUyLDE4IEBACiAgKiBQRUJTCiAgKi8KIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2NvcmUyX3BlYnNfZXZlbnRfY29uc3RyYWludHNbXSA9IHsKLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAwYzAsIDB4MSksIC8qIElOU1RfUkVUSVJFRC5BTlkgKi8KLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweGZlYzEsIDB4MSksIC8qIFg4N19PUFNfUkVUSVJFRC5BTlkgKi8KLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAwYzUsIDB4MSksIC8qIEJSX0lOU1RfUkVUSVJFRC5NSVNQUkVEICovCi0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgxZmM3LCAweDEpLCAvKiBTSU1EX0lOU1RfUkVUVVJFRC5BTlkgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4MSksICAgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MDBjMCwgMHgxKSwgLyogSU5TVF9SRVRJUkVELkFOWSAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4ZmVjMSwgMHgxKSwgLyogWDg3X09QU19SRVRJUkVELkFOWSAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MDBjNSwgMHgxKSwgLyogQlJfSU5TVF9SRVRJUkVELk1JU1BSRUQgKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDFmYzcsIDB4MSksIC8qIFNJTURfSU5TVF9SRVRVUkVELkFOWSAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHgxKSwgICAgLyogTUVNX0xPQURfUkVUSVJFRC4qICovCiAJRVZFTlRfQ09OU1RSQUlOVF9FTkQKIH07CiAKIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2F0b21fcGVic19ldmVudF9jb25zdHJhaW50c1tdID0gewotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDBjMCwgMHgxKSwgLyogSU5TVF9SRVRJUkVELkFOWSAqLwotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDBjNSwgMHgxKSwgLyogTUlTUFJFRElDVEVEX0JSQU5DSF9SRVRJUkVEICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweDEpLCAgICAvKiBNRU1fTE9BRF9SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDAwYzAsIDB4MSksIC8qIElOU1RfUkVUSVJFRC5BTlkgKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDAwYzUsIDB4MSksIC8qIE1JU1BSRURJQ1RFRF9CUkFOQ0hfUkVUSVJFRCAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHgxKSwgICAgLyogTUVNX0xPQURfUkVUSVJFRC4qICovCiAJRVZFTlRfQ09OU1RSQUlOVF9FTkQKIH07CiAKQEAgLTU3NywzNiArNTc3LDM2IEBACiAKIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX25laGFsZW1fcGVic19ldmVudF9jb25zdHJhaW50c1tdID0gewogCUlOVEVMX1BMRF9DT05TVFJBSU5UKDB4MTAwYiwgMHhmKSwgICAgICAvKiBNRU1fSU5TVF9SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MGYsIDB4ZiksICAgIC8qIE1FTV9VTkNPUkVfUkVUSVJFRC4qICovCi0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMTBjLCAweGYpLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsIDB4ZiksICAgIC8qIElOU1RfUkVUSVJFRC5BTlkgKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4MGYsIDB4ZiksICAgIC8qIE1FTV9VTkNPUkVfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMTBjLCAweGYpLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4YzAsIDB4ZiksICAgIC8qIElOU1RfUkVUSVJFRC5BTlkgKi8KIAlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzIsIDB4ZiksICAgIC8qIFVPUFNfUkVUSVJFRC4qICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGM0LCAweGYpLCAgICAvKiBCUl9JTlNUX1JFVElSRUQuKiAqLwotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDJjNSwgMHhmKSwgLyogQlJfTUlTUF9SRVRJUkVELk5FQVJfQ0FMTCAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjNywgMHhmKSwgICAgLyogU1NFWF9VT1BTX1JFVElSRUQuKiAqLwotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MjBjOCwgMHhmKSwgLyogSVRMQl9NSVNTX1JFVElSRUQgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4ZiksICAgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhmNywgMHhmKSwgICAgLyogRlBfQVNTSVNULiogKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4YzQsIDB4ZiksICAgIC8qIEJSX0lOU1RfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMmM1LCAweGYpLCAvKiBCUl9NSVNQX1JFVElSRUQuTkVBUl9DQUxMICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGM3LCAweGYpLCAgICAvKiBTU0VYX1VPUFNfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgyMGM4LCAweGYpLCAvKiBJVExCX01JU1NfUkVUSVJFRCAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHhmKSwgICAgLyogTUVNX0xPQURfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGY3LCAweGYpLCAgICAvKiBGUF9BU1NJU1QuKiAqLwogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCiBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF93ZXN0bWVyZV9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7CiAJSU5URUxfUExEX0NPTlNUUkFJTlQoMHgxMDBiLCAweGYpLCAgICAgIC8qIE1FTV9JTlNUX1JFVElSRUQuKiAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgwZiwgMHhmKSwgICAgLyogTUVNX1VOQ09SRV9SRVRJUkVELiogKi8KLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAxMGMsIDB4ZiksIC8qIE1FTV9TVE9SRV9SRVRJUkVELkRUTEJfTUlTUyAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjMCwgMHhmKSwgICAgLyogSU5TVFJfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweDBmLCAweGYpLCAgICAvKiBNRU1fVU5DT1JFX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MDEwYywgMHhmKSwgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAweGYpLCAgICAvKiBJTlNUUl9SRVRJUkVELiogKi8KIAlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzIsIDB4ZiksICAgIC8qIFVPUFNfUkVUSVJFRC4qICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGM0LCAweGYpLCAgICAvKiBCUl9JTlNUX1JFVElSRUQuKiAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjNSwgMHhmKSwgICAgLyogQlJfTUlTUF9SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzcsIDB4ZiksICAgIC8qIFNTRVhfVU9QU19SRVRJUkVELiogKi8KLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDIwYzgsIDB4ZiksIC8qIElUTEJfTUlTU19SRVRJUkVEICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweGYpLCAgICAvKiBNRU1fTE9BRF9SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4ZjcsIDB4ZiksICAgIC8qIEZQX0FTU0lTVC4qICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGM0LCAweGYpLCAgICAvKiBCUl9JTlNUX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjNSwgMHhmKSwgICAgLyogQlJfTUlTUF9SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4YzcsIDB4ZiksICAgIC8qIFNTRVhfVU9QU19SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDIwYzgsIDB4ZiksIC8qIElUTEJfTUlTU19SRVRJUkVEICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweGYpLCAgICAvKiBNRU1fTE9BRF9SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4ZjcsIDB4ZiksICAgIC8qIEZQX0FTU0lTVC4qICovCiAJRVZFTlRfQ09OU1RSQUlOVF9FTkQKIH07CiAKIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3NuYl9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7Ci0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMWMwLCAweDIpLCAvKiBJTlNUX1JFVElSRUQuUFJFQ0RJU1QgKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDAxYzAsIDB4MiksIC8qIElOU1RfUkVUSVJFRC5QUkVDRElTVCAqLwogCUlOVEVMX1BMRF9DT05TVFJBSU5UKDB4MDFjZCwgMHg4KSwgICAgLyogTUVNX1RSQU5TX1JFVElSRUQuTEFUX0FCT1ZFX1RIUiAqLwogCUlOVEVMX1BTVF9DT05TVFJBSU5UKDB4MDJjZCwgMHg4KSwgICAgLyogTUVNX1RSQU5TX1JFVElSRUQuUFJFQ0lTRV9TVE9SRVMgKi8KIAkvKiBVT1BTX1JFVElSRUQuQUxMLCBpbnY9MSwgY21hc2s9MTYgKGN5Y2xlczpwKS4gKi8KQEAgLTYxNyw3ICs2MTcsNyBAQAogfTsKIAogc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfaXZiX3BlYnNfZXZlbnRfY29uc3RyYWludHNbXSA9IHsKLSAgICAgICAgSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMWMwLCAweDIpLCAvKiBJTlNUX1JFVElSRUQuUFJFQ0RJU1QgKi8KKyAgICAgICAgSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMWMwLCAweDIpLCAvKiBJTlNUX1JFVElSRUQuUFJFQ0RJU1QgKi8KICAgICAgICAgSU5URUxfUExEX0NPTlNUUkFJTlQoMHgwMWNkLCAweDgpLCAgICAvKiBNRU1fVFJBTlNfUkVUSVJFRC5MQVRfQUJPVkVfVEhSICovCiAJSU5URUxfUFNUX0NPTlNUUkFJTlQoMHgwMmNkLCAweDgpLCAgICAvKiBNRU1fVFJBTlNfUkVUSVJFRC5QUkVDSVNFX1NUT1JFUyAqLwogCS8qIFVPUFNfUkVUSVJFRC5BTEwsIGludj0xLCBjbWFzaz0xNiAoY3ljbGVzOnApLiAqLwpAQCAtNjI4LDcgKzYyOCw3IEBACiB9OwogCiBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9oc3dfcGVic19ldmVudF9jb25zdHJhaW50c1tdID0gewotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDFjMCwgMHgyKSwgLyogSU5TVF9SRVRJUkVELlBSRUNESVNUICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMWMwLCAweDIpLCAvKiBJTlNUX1JFVElSRUQuUFJFQ0RJU1QgKi8KIAlJTlRFTF9QTERfQ09OU1RSQUlOVCgweDAxY2QsIDB4ZiksICAgIC8qIE1FTV9UUkFOU19SRVRJUkVELiogKi8KIAkvKiBVT1BTX1JFVElSRUQuQUxMLCBpbnY9MSwgY21hc2s9MTYgKGN5Y2xlczpwKS4gKi8KIAlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4MTA4MDAxYzIsIDB4ZiksCkBAIC03MjQsNiArNzI0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlwID0gcmVncy0+aXA7CiAJaW50IGlzXzY0Yml0ID0gMDsKIAl2b2lkICprYWRkcjsKKwlpbnQgc2l6ZTsKIAogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCB0byBmaXh1cCBpZiB0aGUgUEVCUyBhc3Npc3QgaXMgZmF1bHQgbGlrZQpAQCAtNzU4LDExICs3NTksMTIgQEAKIAkJcmV0dXJuIDE7CiAJfQogCisJc2l6ZSA9IGlwIC0gdG87CiAJaWYgKCFrZXJuZWxfaXAoaXApKSB7Ci0JCWludCBzaXplLCBieXRlczsKKwkJaW50IGJ5dGVzOwogCQl1OCAqYnVmID0gdGhpc19jcHVfcmVhZChpbnNuX2J1ZmZlcik7CiAKLQkJc2l6ZSA9IGlwIC0gdG87IC8qIE11c3QgZml0IG91ciBidWZmZXIsIHNlZSBhYm92ZSAqLworCQkvKiAnc2l6ZScgbXVzdCBmaXQgb3VyIGJ1ZmZlciwgc2VlIGFib3ZlICovCiAJCWJ5dGVzID0gY29weV9mcm9tX3VzZXJfbm1pKGJ1ZiwgKHZvaWQgX191c2VyICopdG8sIHNpemUpOwogCQlpZiAoYnl0ZXMgIT0gMCkKIAkJCXJldHVybiAwOwpAQCAtNzgwLDExICs3ODIsMjAgQEAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJCWlzXzY0Yml0ID0ga2VybmVsX2lwKHRvKSB8fCAhdGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMik7CiAjZW5kaWYKLQkJaW5zbl9pbml0KCZpbnNuLCBrYWRkciwgaXNfNjRiaXQpOworCQlpbnNuX2luaXQoJmluc24sIGthZGRyLCBzaXplLCBpc182NGJpdCk7CiAJCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGVyZSB3YXMgbm90IGEgcHJvYmxlbSBkZWNvZGluZyB0aGUKKwkJICogaW5zdHJ1Y3Rpb24gYW5kIGdldHRpbmcgdGhlIGxlbmd0aC4gIFRoaXMgaXMKKwkJICogZG91Ymx5IGltcG9ydGFudCBiZWNhdXNlIHdlIGhhdmUgYW4gaW5maW5pdGUKKwkJICogbG9vcCBpZiBpbnNuLmxlbmd0aD0wLgorCQkgKi8KKwkJaWYgKCFpbnNuLmxlbmd0aCkKKwkJCWJyZWFrOwogCiAJCXRvICs9IGluc24ubGVuZ3RoOwogCQlrYWRkciArPSBpbnNuLmxlbmd0aDsKKwkJc2l6ZSAtPSBpbnNuLmxlbmd0aDsKIAl9IHdoaWxlICh0byA8IGlwKTsKIAogCWlmICh0byA9PSBpcCkgewpAQCAtODg2LDYgKzg5NywyOSBAQAogCXJlZ3MuYnAgPSBwZWJzLT5icDsKIAlyZWdzLnNwID0gcGVicy0+c3A7CiAKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIpIHsKKwkJcmVncy5heCA9IHBlYnMtPmF4OworCQlyZWdzLmJ4ID0gcGVicy0+Yng7CisJCXJlZ3MuY3ggPSBwZWJzLT5jeDsKKwkJcmVncy5keCA9IHBlYnMtPmR4OworCQlyZWdzLnNpID0gcGVicy0+c2k7CisJCXJlZ3MuZGkgPSBwZWJzLT5kaTsKKwkJcmVncy5icCA9IHBlYnMtPmJwOworCQlyZWdzLnNwID0gcGVicy0+c3A7CisKKwkJcmVncy5mbGFncyA9IHBlYnMtPmZsYWdzOworI2lmbmRlZiBDT05GSUdfWDg2XzMyCisJCXJlZ3MucjggPSBwZWJzLT5yODsKKwkJcmVncy5yOSA9IHBlYnMtPnI5OworCQlyZWdzLnIxMCA9IHBlYnMtPnIxMDsKKwkJcmVncy5yMTEgPSBwZWJzLT5yMTE7CisJCXJlZ3MucjEyID0gcGVicy0+cjEyOworCQlyZWdzLnIxMyA9IHBlYnMtPnIxMzsKKwkJcmVncy5yMTQgPSBwZWJzLT5yMTQ7CisJCXJlZ3MucjE1ID0gcGVicy0+cjE1OworI2VuZGlmCisJfQorCiAJaWYgKGV2ZW50LT5hdHRyLnByZWNpc2VfaXAgPiAxICYmIHg4Nl9wbXUuaW50ZWxfY2FwLnBlYnNfZm9ybWF0ID49IDIpIHsKIAkJcmVncy5pcCA9IHBlYnMtPnJlYWxfaXA7CiAJCXJlZ3MuZmxhZ3MgfD0gUEVSRl9FRkxBR1NfRVhBQ1Q7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfbGJyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfbGJyLmMKaW5kZXggNDVmYTczMC4uNThmMWE5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2xici5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9sYnIuYwpAQCAtNDY1LDcgKzQ2NSw3IEBACiB7CiAJc3RydWN0IGluc24gaW5zbjsKIAl2b2lkICphZGRyOwotCWludCBieXRlcywgc2l6ZSA9IE1BWF9JTlNOX1NJWkU7CisJaW50IGJ5dGVzX3JlYWQsIGJ5dGVzX2xlZnQ7CiAJaW50IHJldCA9IFg4Nl9CUl9OT05FOwogCWludCBleHQsIHRvX3BsbSwgZnJvbV9wbG07CiAJdTggYnVmW01BWF9JTlNOX1NJWkVdOwpAQCAtNDkzLDggKzQ5MywxMCBAQAogCQkJcmV0dXJuIFg4Nl9CUl9OT05FOwogCiAJCS8qIG1heSBmYWlsIGlmIHRleHQgbm90IHByZXNlbnQgKi8KLQkJYnl0ZXMgPSBjb3B5X2Zyb21fdXNlcl9ubWkoYnVmLCAodm9pZCBfX3VzZXIgKilmcm9tLCBzaXplKTsKLQkJaWYgKGJ5dGVzICE9IDApCisJCWJ5dGVzX2xlZnQgPSBjb3B5X2Zyb21fdXNlcl9ubWkoYnVmLCAodm9pZCBfX3VzZXIgKilmcm9tLAorCQkJCQkJTUFYX0lOU05fU0laRSk7CisJCWJ5dGVzX3JlYWQgPSBNQVhfSU5TTl9TSVpFIC0gYnl0ZXNfbGVmdDsKKwkJaWYgKCFieXRlc19yZWFkKQogCQkJcmV0dXJuIFg4Nl9CUl9OT05FOwogCiAJCWFkZHIgPSBidWY7CkBAIC01MDUsMTAgKzUwNywxOSBAQAogCQkgKiBFbnN1cmUgd2UgZG9uJ3QgYmxpbmR5IHJlYWQgYW55IGFkZHJlc3MgYnkgdmFsaWRhdGluZyBpdCBpcwogCQkgKiBhIGtub3duIHRleHQgYWRkcmVzcy4KIAkJICovCi0JCWlmIChrZXJuZWxfdGV4dF9hZGRyZXNzKGZyb20pKQorCQlpZiAoa2VybmVsX3RleHRfYWRkcmVzcyhmcm9tKSkgewogCQkJYWRkciA9ICh2b2lkICopZnJvbTsKLQkJZWxzZQorCQkJLyoKKwkJCSAqIEFzc3VtZSB3ZSBjYW4gZ2V0IHRoZSBtYXhpbXVtIHBvc3NpYmxlIHNpemUKKwkJCSAqIHdoZW4gZ3JhYmJpbmcga2VybmVsIGRhdGEuICBUaGlzIGlzIG5vdAorCQkJICogX3N0cmljdGx5XyB0cnVlIHNpbmNlIHdlIGNvdWxkIHBvc3NpYmx5IGJlCisJCQkgKiBleGVjdXRpbmcgdXAgbmV4dCB0byBhIG1lbW9yeSBob2xlLCBidXQKKwkJCSAqIGl0IGlzIHZlcnkgdW5saWtlbHkgdG8gYmUgYSBwcm9ibGVtLgorCQkJICovCisJCQlieXRlc19yZWFkID0gTUFYX0lOU05fU0laRTsKKwkJfSBlbHNlIHsKIAkJCXJldHVybiBYODZfQlJfTk9ORTsKKwkJfQogCX0KIAogCS8qCkBAIC01MTgsOCArNTI5LDEwIEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWlzNjQgPSBrZXJuZWxfaXAoKHVuc2lnbmVkIGxvbmcpYWRkcikgfHwgIXRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpOwogI2VuZGlmCi0JaW5zbl9pbml0KCZpbnNuLCBhZGRyLCBpczY0KTsKKwlpbnNuX2luaXQoJmluc24sIGFkZHIsIGJ5dGVzX3JlYWQsIGlzNjQpOwogCWluc25fZ2V0X29wY29kZSgmaW5zbik7CisJaWYgKCFpbnNuLm9wY29kZS5nb3QpCisJCXJldHVybiBYODZfQlJfQUJPUlQ7CiAKIAlzd2l0Y2ggKGluc24ub3Bjb2RlLmJ5dGVzWzBdKSB7CiAJY2FzZSAweGY6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlX3NuYmVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlX3NuYmVwLmMKaW5kZXggZjllZDQyOS4uNzQ1YjE1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZV9zbmJlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmVfc25iZXAuYwpAQCAtNDQ5LDcgKzQ0OSwxMSBAQAogc3RhdGljIHN0cnVjdCB1bmNvcmVfZXZlbnRfZGVzYyBzbmJlcF91bmNvcmVfaW1jX2V2ZW50c1tdID0gewogCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNsb2NrdGlja3MsICAgICAgImV2ZW50PTB4ZmYsdW1hc2s9MHgwMCIpLAogCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF9yZWFkLCAgImV2ZW50PTB4MDQsdW1hc2s9MHgwMyIpLAorCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF9yZWFkLnNjYWxlLCAiNi4xMDM1MTU2MjVlLTUiKSwKKwlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfcmVhZC51bml0LCAiTWlCIiksCiAJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3dyaXRlLCAiZXZlbnQ9MHgwNCx1bWFzaz0weDBjIiksCisJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3dyaXRlLnNjYWxlLCAiNi4xMDM1MTU2MjVlLTUiKSwKKwlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfd3JpdGUudW5pdCwgIk1pQiIpLAogCXsgLyogZW5kOiBhbGwgemVyb2VzICovIH0sCiB9OwogCkBAIC0yMDM2LDcgKzIwNDAsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgdW5jb3JlX2V2ZW50X2Rlc2MgaHN3ZXBfdW5jb3JlX2ltY19ldmVudHNbXSA9IHsKIAlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjbG9ja3RpY2tzLCAgICAgICJldmVudD0weDAwLHVtYXNrPTB4MDAiKSwKIAlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfcmVhZCwgICJldmVudD0weDA0LHVtYXNrPTB4MDMiKSwKKwlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfcmVhZC5zY2FsZSwgIjYuMTAzNTE1NjI1ZS01IiksCisJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3JlYWQudW5pdCwgIk1pQiIpLAogCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF93cml0ZSwgImV2ZW50PTB4MDQsdW1hc2s9MHgwYyIpLAorCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF93cml0ZS5zY2FsZSwgIjYuMTAzNTE1NjI1ZS01IiksCisJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3dyaXRlLnVuaXQsICJNaUIiKSwKIAl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwppbmRleCA1NDMzNjU4Li5lN2Q4Yzc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwpAQCAtNzIsNyArNzIsNyBAQAogCWlmIChjLT54ODZfbWFzayB8fCBjLT5jcHVpZF9sZXZlbCA+PSAwKQogCQlzZXFfcHJpbnRmKG0sICJzdGVwcGluZ1x0OiAlZFxuIiwgYy0+eDg2X21hc2spOwogCWVsc2UKLQkJc2VxX3ByaW50ZihtLCAic3RlcHBpbmdcdDogdW5rbm93blxuIik7CisJCXNlcV9wdXRzKG0sICJzdGVwcGluZ1x0OiB1bmtub3duXG4iKTsKIAlpZiAoYy0+bWljcm9jb2RlKQogCQlzZXFfcHJpbnRmKG0sICJtaWNyb2NvZGVcdDogMHgleFxuIiwgYy0+bWljcm9jb2RlKTsKIApAQCAtOTIsMTIgKzkyLDEyIEBACiAJc2hvd19jcHVpbmZvX2NvcmUobSwgYywgY3B1KTsKIAlzaG93X2NwdWluZm9fbWlzYyhtLCBjKTsKIAotCXNlcV9wcmludGYobSwgImZsYWdzXHRcdDoiKTsKKwlzZXFfcHV0cyhtLCAiZmxhZ3NcdFx0OiIpOwogCWZvciAoaSA9IDA7IGkgPCAzMipOQ0FQSU5UUzsgaSsrKQogCQlpZiAoY3B1X2hhcyhjLCBpKSAmJiB4ODZfY2FwX2ZsYWdzW2ldICE9IE5VTEwpCiAJCQlzZXFfcHJpbnRmKG0sICIgJXMiLCB4ODZfY2FwX2ZsYWdzW2ldKTsKIAotCXNlcV9wcmludGYobSwgIlxuYnVnc1x0XHQ6Iik7CisJc2VxX3B1dHMobSwgIlxuYnVnc1x0XHQ6Iik7CiAJZm9yIChpID0gMDsgaSA8IDMyKk5CVUdJTlRTOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGJ1Z19iaXQgPSAzMipOQ0FQSU5UUyArIGk7CiAKQEAgLTExOCw3ICsxMTgsNyBAQAogCXNlcV9wcmludGYobSwgImFkZHJlc3Mgc2l6ZXNcdDogJXUgYml0cyBwaHlzaWNhbCwgJXUgYml0cyB2aXJ0dWFsXG4iLAogCQkgICBjLT54ODZfcGh5c19iaXRzLCBjLT54ODZfdmlydF9iaXRzKTsKIAotCXNlcV9wcmludGYobSwgInBvd2VyIG1hbmFnZW1lbnQ6Iik7CisJc2VxX3B1dHMobSwgInBvd2VyIG1hbmFnZW1lbnQ6Iik7CiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKIAkJaWYgKGMtPng4Nl9wb3dlciAmICgxIDw8IGkpKSB7CiAJCQlpZiAoaSA8IEFSUkFZX1NJWkUoeDg2X3Bvd2VyX2ZsYWdzKSAmJgpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCX0KIAl9CiAKLQlzZXFfcHJpbnRmKG0sICJcblxuIik7CisJc2VxX3B1dHMobSwgIlxuXG4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdWlkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwppbmRleCAzMjI1YWU2Yy4uODM3NDFhNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiAJZGV2ID0gZGV2aWNlX2NyZWF0ZShjcHVpZF9jbGFzcywgTlVMTCwgTUtERVYoQ1BVSURfTUFKT1IsIGNwdSksIE5VTEwsCiAJCQkgICAgImNwdSVkIiwgY3B1KTsKLQlyZXR1cm4gSVNfRVJSKGRldikgPyBQVFJfRVJSKGRldikgOiAwOworCXJldHVybiBQVFJfRVJSX09SX1pFUk8oZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgY3B1aWRfZGV2aWNlX2Rlc3Ryb3koaW50IGNwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lc3BmaXhfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9lc3BmaXhfNjQuYwppbmRleCA5NGQ4NTdmLi5mNWQwNzMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZXNwZml4XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2VzcGZpeF82NC5jCkBAIC0xMjIsOSArMTIyLDYgQEAKIHZvaWQgX19pbml0IGluaXRfZXNwZml4X2JzcCh2b2lkKQogewogCXBnZF90ICpwZ2RfcDsKLQlwdGV2YWxfdCBwdGVtYXNrOwotCi0JcHRlbWFzayA9IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOwogCiAJLyogSW5zdGFsbCB0aGUgZXNwZml4IHB1ZCBpbnRvIHRoZSBrZXJuZWwgcGFnZSBkaXJlY3RvcnkgKi8KIAlwZ2RfcCA9ICZpbml0X2xldmVsNF9wZ3RbcGdkX2luZGV4KEVTUEZJWF9CQVNFX0FERFIpXTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCA5MjJkMjg1Li42MzA3YTBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC01OSw3OCArNTksNzggQEAKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJOTUkiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5fX25taV9jb3VudCk7Ci0Jc2VxX3ByaW50ZihwLCAiICBOb24tbWFza2FibGUgaW50ZXJydXB0c1xuIik7CisJc2VxX3B1dHMocCwgIiAgTm9uLW1hc2thYmxlIGludGVycnVwdHNcbiIpOwogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkxPQyIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfdGltZXJfaXJxcyk7Ci0Jc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKIAogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlNQVSIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9zcHVyaW91c19jb3VudCk7Ci0Jc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJQTUkiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3BlcmZfaXJxcyk7Ci0Jc2VxX3ByaW50ZihwLCAiICBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW50ZXJydXB0c1xuIik7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiSVdJIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+YXBpY19pcnFfd29ya19pcnFzKTsKLQlzZXFfcHJpbnRmKHAsICIgIElSUSB3b3JrIGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIElSUSB3b3JrIGludGVycnVwdHNcbiIpOwogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlJUUiIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmljcl9yZWFkX3JldHJ5X2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIEFQSUMgSUNSIHJlYWQgcmV0cmllc1xuIik7CisJc2VxX3B1dHMocCwgIiAgQVBJQyBJQ1IgcmVhZCByZXRyaWVzXG4iKTsKICNlbmRpZgogCWlmICh4ODZfcGxhdGZvcm1faXBpX2NhbGxiYWNrKSB7CiAJCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlBMVCIpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+eDg2X3BsYXRmb3JtX2lwaXMpOwotCQlzZXFfcHJpbnRmKHAsICIgIFBsYXRmb3JtIGludGVycnVwdHNcbiIpOworCQlzZXFfcHV0cyhwLCAiICBQbGF0Zm9ybSBpbnRlcnJ1cHRzXG4iKTsKIAl9CiAjaWZkZWYgQ09ORklHX1NNUAogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlJFUyIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9yZXNjaGVkX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIFJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1xuIik7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiQ0FMIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX2NhbGxfY291bnQgLQogCQkJCQlpcnFfc3RhdHMoaiktPmlycV90bGJfY291bnQpOwotCXNlcV9wcmludGYocCwgIiAgRnVuY3Rpb24gY2FsbCBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcbiIpOwogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlRMQiIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV90bGJfY291bnQpOwotCXNlcV9wcmludGYocCwgIiAgVExCIHNob290ZG93bnNcbiIpOworCXNlcV9wdXRzKHAsICIgIFRMQiBzaG9vdGRvd25zXG4iKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfVEhFUk1BTF9WRUNUT1IKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUUk0iKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhlcm1hbF9jb3VudCk7Ci0Jc2VxX3ByaW50ZihwLCAiICBUaGVybWFsIGV2ZW50IGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIFRoZXJtYWwgZXZlbnQgaW50ZXJydXB0c1xuIik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X01DRV9USFJFU0hPTEQKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUSFIiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhyZXNob2xkX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIFRocmVzaG9sZCBBUElDIGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIFRocmVzaG9sZCBBUElDIGludGVycnVwdHNcbiIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJNQ0UiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgcGVyX2NwdShtY2VfZXhjZXB0aW9uX2NvdW50LCBqKSk7Ci0Jc2VxX3ByaW50ZihwLCAiICBNYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnNcbiIpOworCXNlcV9wdXRzKHAsICIgIE1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uc1xuIik7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiTUNQIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHBlcl9jcHUobWNlX3BvbGxfY291bnQsIGopKTsKLQlzZXFfcHJpbnRmKHAsICIgIE1hY2hpbmUgY2hlY2sgcG9sbHNcbiIpOworCXNlcV9wdXRzKHAsICIgIE1hY2hpbmUgY2hlY2sgcG9sbHNcbiIpOwogI2VuZGlmCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSFlQRVJWKSB8fCBkZWZpbmVkKENPTkZJR19YRU4pCiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVEhSIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX2h2X2NhbGxiYWNrX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIEh5cGVydmlzb3IgY2FsbGJhY2sgaW50ZXJydXB0c1xuIik7CisJc2VxX3B1dHMocCwgIiAgSHlwZXJ2aXNvciBjYWxsYmFjayBpbnRlcnJ1cHRzXG4iKTsKICNlbmRpZgogCXNlcV9wcmludGYocCwgIiUqczogJTEwdVxuIiwgcHJlYywgIkVSUiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmMKaW5kZXggNjdlNmQxOWUuLmY3ZTNjZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL2NvcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogCQkgKiBub3JtYWxseSB1c2VkLCB3ZSBqdXN0IGdvIHRocm91Z2ggaWYgdGhlcmUgaXMgbm8ga3Byb2JlLgogCQkgKi8KIAkJX19hZGRyID0gcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oYnVmLCBhZGRyKTsKLQkJa2VybmVsX2luc25faW5pdCgmaW5zbiwgKHZvaWQgKilfX2FkZHIpOworCQlrZXJuZWxfaW5zbl9pbml0KCZpbnNuLCAodm9pZCAqKV9fYWRkciwgTUFYX0lOU05fU0laRSk7CiAJCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CiAKIAkJLyoKQEAgLTMzMCw4ICszMzAsMTAgQEAKIHsKIAlzdHJ1Y3QgaW5zbiBpbnNuOwogCWtwcm9iZV9vcGNvZGVfdCBidWZbTUFYX0lOU05fU0laRV07CisJdW5zaWduZWQgbG9uZyByZWNvdmVyZWRfaW5zbiA9CisJCXJlY292ZXJfcHJvYmVkX2luc3RydWN0aW9uKGJ1ZiwgKHVuc2lnbmVkIGxvbmcpc3JjKTsKIAotCWtlcm5lbF9pbnNuX2luaXQoJmluc24sICh2b2lkICopcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oYnVmLCAodW5zaWduZWQgbG9uZylzcmMpKTsKKwlrZXJuZWxfaW5zbl9pbml0KCZpbnNuLCAodm9pZCAqKXJlY292ZXJlZF9pbnNuLCBNQVhfSU5TTl9TSVpFKTsKIAlpbnNuX2dldF9sZW5ndGgoJmluc24pOwogCS8qIEFub3RoZXIgc3Vic3lzdGVtIHB1dHMgYSBicmVha3BvaW50LCBmYWlsZWQgdG8gcmVjb3ZlciAqLwogCWlmIChpbnNuLm9wY29kZS5ieXRlc1swXSA9PSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKQpAQCAtMzQyLDcgKzM0NCw3IEBACiAJaWYgKGluc25fcmlwX3JlbGF0aXZlKCZpbnNuKSkgewogCQlzNjQgbmV3ZGlzcDsKIAkJdTggKmRpc3A7Ci0JCWtlcm5lbF9pbnNuX2luaXQoJmluc24sIGRlc3QpOworCQlrZXJuZWxfaW5zbl9pbml0KCZpbnNuLCBkZXN0LCBpbnNuLmxlbmd0aCk7CiAJCWluc25fZ2V0X2Rpc3BsYWNlbWVudCgmaW5zbik7CiAJCS8qCiAJCSAqIFRoZSBjb3BpZWQgaW5zdHJ1Y3Rpb24gdXNlcyB0aGUgJXJpcC1yZWxhdGl2ZSBhZGRyZXNzaW5nCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9vcHQuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL29wdC5jCmluZGV4IGYxMzE0ZDAuLjdjNTIzYmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL29wdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL29wdC5jCkBAIC0yNTEsMTMgKzI1MSwxNSBAQAogCS8qIERlY29kZSBpbnN0cnVjdGlvbnMgKi8KIAlhZGRyID0gcGFkZHIgLSBvZmZzZXQ7CiAJd2hpbGUgKGFkZHIgPCBwYWRkciAtIG9mZnNldCArIHNpemUpIHsgLyogRGVjb2RlIHVudGlsIGZ1bmN0aW9uIGVuZCAqLworCQl1bnNpZ25lZCBsb25nIHJlY292ZXJlZF9pbnNuOwogCQlpZiAoc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMoYWRkcikpCiAJCQkvKgogCQkJICogU2luY2Ugc29tZSBmaXh1cCBjb2RlIHdpbGwganVtcHMgaW50byB0aGlzIGZ1bmN0aW9uLAogCQkJICogd2UgY2FuJ3Qgb3B0aW1pemUga3Byb2JlIGluIHRoaXMgZnVuY3Rpb24uCiAJCQkgKi8KIAkJCXJldHVybiAwOwotCQlrZXJuZWxfaW5zbl9pbml0KCZpbnNuLCAodm9pZCAqKXJlY292ZXJfcHJvYmVkX2luc3RydWN0aW9uKGJ1ZiwgYWRkcikpOworCQlyZWNvdmVyZWRfaW5zbiA9IHJlY292ZXJfcHJvYmVkX2luc3RydWN0aW9uKGJ1ZiwgYWRkcik7CisJCWtlcm5lbF9pbnNuX2luaXQoJmluc24sICh2b2lkICopcmVjb3ZlcmVkX2luc24sIE1BWF9JTlNOX1NJWkUpOwogCQlpbnNuX2dldF9sZW5ndGgoJmluc24pOwogCQkvKiBBbm90aGVyIHN1YnN5c3RlbSBwdXRzIGEgYnJlYWtwb2ludCAqLwogCQlpZiAoaW5zbi5vcGNvZGUuYnl0ZXNbMF0gPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwppbmRleCBjOTYwM2FjLi4xMTNlNzA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21zci5jCkBAIC0yMiw2ICsyMiw4IEBACiAgKiBhbiBTTVAgYm94IHdpbGwgZGlyZWN0IHRoZSBhY2Nlc3MgdG8gQ1BVICVkLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTUwLDExICs1MiwxMSBAQAogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaCAob3JpZykgewotCWNhc2UgMDoKKwljYXNlIFNFRUtfU0VUOgogCQlmaWxlLT5mX3BvcyA9IG9mZnNldDsKIAkJcmV0ID0gZmlsZS0+Zl9wb3M7CiAJCWJyZWFrOwotCWNhc2UgMToKKwljYXNlIFNFRUtfQ1VSOgogCQlmaWxlLT5mX3BvcyArPSBvZmZzZXQ7CiAJCXJldCA9IGZpbGUtPmZfcG9zOwogCQlicmVhazsKQEAgLTIwNiw3ICsyMDgsNyBAQAogCiAJZGV2ID0gZGV2aWNlX2NyZWF0ZShtc3JfY2xhc3MsIE5VTEwsIE1LREVWKE1TUl9NQUpPUiwgY3B1KSwgTlVMTCwKIAkJCSAgICAibXNyJWQiLCBjcHUpOwotCXJldHVybiBJU19FUlIoZGV2KSA/IFBUUl9FUlIoZGV2KSA6IDA7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBtc3JfZGV2aWNlX2Rlc3Ryb3koaW50IGNwdSkKQEAgLTI0OCw4ICsyNTAsNyBAQAogCWkgPSAwOwogCiAJaWYgKF9fcmVnaXN0ZXJfY2hyZGV2KE1TUl9NQUpPUiwgMCwgTlJfQ1BVUywgImNwdS9tc3IiLCAmbXNyX2ZvcHMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXNyOiB1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBtc3JcbiIsCi0JCSAgICAgICBNU1JfTUFKT1IpOworCQlwcl9lcnIoInVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIG1zclxuIiwgTVNSX01BSk9SKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGFiMDhhYTIuLmFiNDczNGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC05NjAsNiArOTYwLDggQEAKIAlpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpIF9lZGF0YTsKIAlpbml0X21tLmJyayA9IF9icmtfZW5kOwogCisJbXB4X21tX2luaXQoJmluaXRfbW0pOworCiAJY29kZV9yZXNvdXJjZS5zdGFydCA9IF9fcGFfc3ltYm9sKF90ZXh0KTsKIAljb2RlX3Jlc291cmNlLmVuZCA9IF9fcGFfc3ltYm9sKF9ldGV4dCktMTsKIAlkYXRhX3Jlc291cmNlLnN0YXJ0ID0gX19wYV9zeW1ib2woX2V0ZXh0KTsKQEAgLTExOTAsOSArMTE5Miw3IEBACiAKIAl0Ym9vdF9wcm9iZSgpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogCW1hcF92c3lzY2FsbCgpOwotI2VuZGlmCiAKIAlnZW5lcmljX2FwaWNfcHJvYmUoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCmluZGV4IDVjZGZmMDMuLmU0ZmNiODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgQk9PVF9QRVJDUFVfT0ZGU0VUIDAKICNlbmRpZgogCi1ERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpID0gQk9PVF9QRVJDUFVfT0ZGU0VUOworREVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFkodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKSA9IEJPT1RfUEVSQ1BVX09GRlNFVDsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTCh0aGlzX2NwdV9vZmYpOwogCiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDY2OGQ4ZjIuLjdhOGY1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtOTksNyArOTksNyBAQAogREVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFkoY3B1bWFza192YXJfdCwgY3B1X2xsY19zaGFyZWRfbWFwKTsKIAogLyogUGVyIENQVSBib2dvbWlwcyBhbmQgb3RoZXIgcGFyYW1ldGVycyAqLwotREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CitERUZJTkVfUEVSX0NQVV9SRUFEX01PU1RMWShzdHJ1Y3QgY3B1aW5mb194ODYsIGNwdV9pbmZvKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfaW5mbyk7CiAKIGF0b21pY190IGluaXRfZGVhc3NlcnRlZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNmYi5jIGIvYXJjaC94ODYva2VybmVsL3N5c2ZiLmMKaW5kZXggMTkzZWMyYy4uMTYwMzg2ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c2ZiLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3N5c2ZiLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogCXBkID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsIG5hbWUsIDAsCiAJCQkJCSAgICAgICBOVUxMLCAwLCBzaSwgc2l6ZW9mKCpzaSkpOwotCXJldHVybiBJU19FUlIocGQpID8gUFRSX0VSUihwZCkgOiAwOworCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocGQpOwogfQogCiAvKiBtdXN0IGV4ZWN1dGUgYWZ0ZXIgUENJIHN1YnN5c3RlbSBmb3IgRUZJIHF1aXJrcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c2ZiX3NpbXBsZWZiLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzZmJfc2ltcGxlZmIuYwppbmRleCA4NjE3OWQ0Li43NjRhMjlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzZmJfc2ltcGxlZmIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzZmJfc2ltcGxlZmIuYwpAQCAtODgsOCArODgsNSBAQAogCiAJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgInNpbXBsZS1mcmFtZWJ1ZmZlciIsIDAsCiAJCQkJCSAgICAgICAmcmVzLCAxLCBtb2RlLCBzaXplb2YoKm1vZGUpKTsKLQlpZiAoSVNfRVJSKHBkKSkKLQkJcmV0dXJuIFBUUl9FUlIocGQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jIGIvYXJjaC94ODYva2VybmVsL3RpbWUuYwppbmRleCAwZmEyOTYwLi4yNWFkYzBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotX192aXNpYmxlIERFRklORV9WVkFSKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcsIGppZmZpZXMpID0gSU5JVElBTF9KSUZGSUVTOworX192aXNpYmxlIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgamlmZmllcyBfX2NhY2hlbGluZV9hbGlnbmVkID0gSU5JVElBTF9KSUZGSUVTOwogI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggZGU4MDFmMi4uYTlhZTIwNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hfdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vbXB4Lmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAjaW5jbHVkZSA8YXNtL3g4Nl9pbml0Lmg+CkBAIC0yMjgsNyArMjI5LDYgQEAKIAogRE9fRVJST1IoWDg2X1RSQVBfREUsICAgICBTSUdGUEUsICAiZGl2aWRlIGVycm9yIiwJCWRpdmlkZV9lcnJvcikKIERPX0VSUk9SKFg4Nl9UUkFQX09GLCAgICAgU0lHU0VHViwgIm92ZXJmbG93IiwJCQlvdmVyZmxvdykKLURPX0VSUk9SKFg4Nl9UUkFQX0JSLCAgICAgU0lHU0VHViwgImJvdW5kcyIsCQkJYm91bmRzKQogRE9fRVJST1IoWDg2X1RSQVBfVUQsICAgICBTSUdJTEwsICAiaW52YWxpZCBvcGNvZGUiLAkJaW52YWxpZF9vcCkKIERPX0VSUk9SKFg4Nl9UUkFQX09MRF9NRiwgU0lHRlBFLCAgImNvcHJvY2Vzc29yIHNlZ21lbnQgb3ZlcnJ1biIsY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKQogRE9fRVJST1IoWDg2X1RSQVBfVFMsICAgICBTSUdTRUdWLCAiaW52YWxpZCBUU1MiLAkJaW52YWxpZF9UU1MpCkBAIC0yODYsNiArMjg2LDg5IEBACiB9CiAjZW5kaWYKIAorZG90cmFwbGlua2FnZSB2b2lkIGRvX2JvdW5kcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c2F2ZV9idWY7CisJZW51bSBjdHhfc3RhdGUgcHJldl9zdGF0ZTsKKwlzdHJ1Y3QgYm5kY3NyICpibmRjc3I7CisJc2lnaW5mb190ICppbmZvOworCisJcHJldl9zdGF0ZSA9IGV4Y2VwdGlvbl9lbnRlcigpOworCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCAiYm91bmRzIiwgcmVncywgZXJyb3JfY29kZSwKKwkJCVg4Nl9UUkFQX0JSLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJZ290byBleGl0OworCWNvbmRpdGlvbmFsX3N0aShyZWdzKTsKKworCWlmICghdXNlcl9tb2RlKHJlZ3MpKQorCQlkaWUoImJvdW5kcyIsIHJlZ3MsIGVycm9yX2NvZGUpOworCisJaWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01QWCkpIHsKKwkJLyogVGhlIGV4Y2VwdGlvbiBpcyBub3QgZnJvbSBJbnRlbCBNUFggKi8KKwkJZ290byBleGl0X3RyYXA7CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIGxvb2sgYXQgQk5EU1RBVFVTIHRvIHJlc29sdmUgdGhpcyBleGNlcHRpb24uCisJICogSXQgaXMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUsIHRob3VnaCwgc28gd2UgbmVlZCB0bworCSAqIGRvIGFuIHhzYXZlIGFuZCB0aGVuIHB1bGwgaXQgb3V0IG9mIHRoZSB4c2F2ZSBidWZmZXIuCisJICovCisJZnB1X3NhdmVfaW5pdCgmdHNrLT50aHJlYWQuZnB1KTsKKwl4c2F2ZV9idWYgPSAmKHRzay0+dGhyZWFkLmZwdS5zdGF0ZS0+eHNhdmUpOworCWJuZGNzciA9IGdldF94c2F2ZV9hZGRyKHhzYXZlX2J1ZiwgWFNUQVRFX0JORENTUik7CisJaWYgKCFibmRjc3IpCisJCWdvdG8gZXhpdF90cmFwOworCisJLyoKKwkgKiBUaGUgZXJyb3IgY29kZSBmaWVsZCBvZiB0aGUgQk5EU1RBVFVTIHJlZ2lzdGVyIGNvbW11bmljYXRlcyBzdGF0dXMKKwkgKiBpbmZvcm1hdGlvbiBvZiBhIGJvdW5kIHJhbmdlIGV4Y2VwdGlvbiAjQlIgb3Igb3BlcmF0aW9uIGludm9sdmluZworCSAqIGJvdW5kIGRpcmVjdG9yeS4KKwkgKi8KKwlzd2l0Y2ggKGJuZGNzci0+Ym5kc3RhdHVzICYgTVBYX0JORFNUQV9FUlJPUl9DT0RFKSB7CisJY2FzZSAyOgkvKiBCb3VuZCBkaXJlY3RvcnkgaGFzIGludmFsaWQgZW50cnkuICovCisJCWlmIChtcHhfaGFuZGxlX2JkX2ZhdWx0KHhzYXZlX2J1ZikpCisJCQlnb3RvIGV4aXRfdHJhcDsKKwkJYnJlYWs7IC8qIFN1Y2Nlc3MsIGl0IHdhcyBoYW5kbGVkICovCisJY2FzZSAxOiAvKiBCb3VuZCB2aW9sYXRpb24uICovCisJCWluZm8gPSBtcHhfZ2VuZXJhdGVfc2lnaW5mbyhyZWdzLCB4c2F2ZV9idWYpOworCQlpZiAoUFRSX0VSUihpbmZvKSkgeworCQkJLyoKKwkJCSAqIFdlIGZhaWxlZCB0byBkZWNvZGUgdGhlIE1QWCBpbnN0cnVjdGlvbi4gIEFjdCBhcyBpZgorCQkJICogdGhlIGV4Y2VwdGlvbiB3YXMgbm90IGNhdXNlZCBieSBNUFguCisJCQkgKi8KKwkJCWdvdG8gZXhpdF90cmFwOworCQl9CisJCS8qCisJCSAqIFN1Y2Nlc3MsIHdlIGRlY29kZWQgdGhlIGluc3RydWN0aW9uIGFuZCByZXRyaWV2ZWQKKwkJICogYW4gJ2luZm8nIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3MgYmVpbmcgYWNjZXNzZWQKKwkJICogd2hpY2ggY2F1c2VkIHRoZSBleGNlcHRpb24uICBUaGlzIGluZm9ybWF0aW9uCisJCSAqIGFsbG93cyBhbmQgYXBwbGljYXRpb24gdG8gcG9zc2libHkgaGFuZGxlIHRoZQorCQkgKiAjQlIgZXhjZXB0aW9uIGl0c2VsZi4KKwkJICovCisJCWRvX3RyYXAoWDg2X1RSQVBfQlIsIFNJR1NFR1YsICJib3VuZHMiLCByZWdzLCBlcnJvcl9jb2RlLCBpbmZvKTsKKwkJa2ZyZWUoaW5mbyk7CisJCWJyZWFrOworCWNhc2UgMDogLyogTm8gZXhjZXB0aW9uIGNhdXNlZCBieSBJbnRlbCBNUFggb3BlcmF0aW9ucy4gKi8KKwkJZ290byBleGl0X3RyYXA7CisJZGVmYXVsdDoKKwkJZGllKCJib3VuZHMiLCByZWdzLCBlcnJvcl9jb2RlKTsKKwl9CisKK2V4aXQ6CisJZXhjZXB0aW9uX2V4aXQocHJldl9zdGF0ZSk7CisJcmV0dXJuOworZXhpdF90cmFwOgorCS8qCisJICogVGhpcyBwYXRoIG91dCBpcyBmb3IgYWxsIHRoZSBjYXNlcyB3aGVyZSB3ZSBjb3VsZCBub3QKKwkgKiBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBpbiBzb21lIHdheSAobGlrZSBhbGxvY2F0aW5nIGEKKwkgKiB0YWJsZSBvciB0ZWxsaW5nIHVzZXJzcGFjZSBhYm91dCBpdC4gIFdlIHdpbGwgYWxzbyBlbmQKKwkgKiB1cCBoZXJlIGlmIHRoZSBrZXJuZWwgaGFzIE1QWCB0dXJuZWQgb2ZmIGF0IGNvbXBpbGUKKwkgKiB0aW1lLi4KKwkgKi8KKwlkb190cmFwKFg4Nl9UUkFQX0JSLCBTSUdTRUdWLCAiYm91bmRzIiwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7CisJZXhjZXB0aW9uX2V4aXQocHJldl9zdGF0ZSk7Cit9CisKIGRvdHJhcGxpbmthZ2Ugdm9pZAogZG9fZ2VuZXJhbF9wcm90ZWN0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CkBAIC0zODcsNyArNDcwLDcgQEAKICAqIGZvciBzY2hlZHVsaW5nIG9yIHNpZ25hbCBoYW5kbGluZy4gVGhlIGFjdHVhbCBzdGFjayBzd2l0Y2ggaXMgZG9uZSBpbgogICogZW50cnkuUwogICovCi1hc21saW5rYWdlIF9fdmlzaWJsZSBzdHJ1Y3QgcHRfcmVncyAqc3luY19yZWdzKHN0cnVjdCBwdF9yZWdzICplcmVncykKK2FzbWxpbmthZ2UgX192aXNpYmxlIG5vdHJhY2Ugc3RydWN0IHB0X3JlZ3MgKnN5bmNfcmVncyhzdHJ1Y3QgcHRfcmVncyAqZXJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBlcmVnczsKIAkvKiBEaWQgYWxyZWFkeSBzeW5jICovCkBAIC00MTMsNyArNDk2LDcgQEAKIAlzdHJ1Y3QgcHRfcmVncyByZWdzOwogfTsKIAotYXNtbGlua2FnZSBfX3Zpc2libGUKK2FzbWxpbmthZ2UgX192aXNpYmxlIG5vdHJhY2UKIHN0cnVjdCBiYWRfaXJldF9zdGFjayAqZml4dXBfYmFkX2lyZXQoc3RydWN0IGJhZF9pcmV0X3N0YWNrICpzKQogewogCS8qCkBAIC00MzYsNiArNTE5LDcgQEAKIAlCVUdfT04oIXVzZXJfbW9kZV92bSgmbmV3X3N0YWNrLT5yZWdzKSk7CiAJcmV0dXJuIG5ld19zdGFjazsKIH0KK05PS1BST0JFX1NZTUJPTChmaXh1cF9iYWRfaXJldCk7CiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91cHJvYmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXByb2Jlcy5jCmluZGV4IDVkMWNiZmUuLjhiOTZhOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC91cHJvYmVzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Vwcm9iZXMuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiB7CiAJdTMyIHZvbGF0aWxlICpnb29kX2luc25zOwogCi0JaW5zbl9pbml0KGluc24sIGF1cHJvYmUtPmluc24sIHg4Nl82NCk7CisJaW5zbl9pbml0KGluc24sIGF1cHJvYmUtPmluc24sIHNpemVvZihhdXByb2JlLT5pbnNuKSwgeDg2XzY0KTsKIAkvKiBoYXMgdGhlIHNpZGUtZWZmZWN0IG9mIHByb2Nlc3NpbmcgdGhlIGVudGlyZSBpbnN0cnVjdGlvbiAqLwogCWluc25fZ2V0X2xlbmd0aChpbnNuKTsKIAlpZiAoV0FSTl9PTl9PTkNFKCFpbnNuX2NvbXBsZXRlKGluc24pKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNDllZGYyZC4uMDBiZjMwMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE4Niw2ICsxODYsOCBAQAogCSAqIHN0YXJ0IGFub3RoZXIgc2VnbWVudCAtIGluaXQuCiAJICovCiAJUEVSQ1BVX1ZBRERSKElOVEVSTk9ERV9DQUNIRV9CWVRFUywgMCwgOnBlcmNwdSkKKwlBU1NFUlQoU0laRU9GKC5kYXRhLi5wZXJjcHUpIDwgQ09ORklHX1BIWVNJQ0FMX1NUQVJULAorCSAgICAgICAicGVyLUNQVSBkYXRhIHRvbyBsYXJnZSAtIGluY3JlYXNlIENPTkZJR19QSFlTSUNBTF9TVEFSVCIpCiAjZW5kaWYKIAogCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF82NC5jIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKaW5kZXggOTU3Nzc5Zi4uMmRjYzZmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKQEAgLTEsNTkgKzEsNDMgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBBbmR5IEx1dG9taXJza2kgPGx1dG9AYW1hY2FwaXRhbC5uZXQ+CisgKgorICogQmFzZWQgb24gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHdoaWNoIGlzOgogICogIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWEgQXJjYW5nZWxpIDxhbmRyZWFAc3VzZS5kZT4gU3VTRQogICogIENvcHlyaWdodCAyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KICAqCi0gKiAgWyBOT1RFOiB0aGlzIG1lY2hhbmlzbSBpcyBub3cgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgdkRTTy4gXQorICogIFBhcnRzIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGhhdmUgYmVlbiBtb3ZlZCB0byBhcmNoL3g4Ni92ZHNvL3ZtYS5jCiAgKgotICogIFRoYW5rcyB0byBocGFAdHJhbnNtZXRhLmNvbSBmb3Igc29tZSB1c2VmdWwgaGludC4KLSAqICBTcGVjaWFsIHRoYW5rcyB0byBJbmdvIE1vbG5hciBmb3IgaGlzIGVhcmx5IGV4cGVyaWVuY2Ugd2l0aAotICogIGEgZGlmZmVyZW50IHZzeXNjYWxsIGltcGxlbWVudGF0aW9uIGZvciBMaW51eC9JQTMyIGFuZCBmb3IgdGhlIG5hbWUuCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB2c3lzY2FsbCBlbXVsYXRpb24uICB2c3lzY2FsbHMgYXJlIGEgbGVnYWN5IEFCSToKKyAqIFVzZXJzcGFjZSBjYW4gcmVxdWVzdCBjZXJ0YWluIGtlcm5lbCBzZXJ2aWNlcyBieSBjYWxsaW5nIGZpeGVkCisgKiBhZGRyZXNzZXMuICBUaGlzIGNvbmNlcHQgaXMgcHJvYmxlbWF0aWM6CiAgKgotICogIHZzeXNjYWxsIDEgaXMgbG9jYXRlZCBhdCAtMTBNYnl0ZSwgdnN5c2NhbGwgMiBpcyBsb2NhdGVkCi0gKiAgYXQgdmlydHVhbCBhZGRyZXNzIC0xME1ieXRlKzEwMjRieXRlcyBldGMuLi4gVGhlcmUgYXJlIGF0IG1heCA0Ci0gKiAgdnN5c2NhbGxzLiBPbmUgdnN5c2NhbGwgY2FuIHJlc2VydmUgbW9yZSB0aGFuIDEgc2xvdCB0byBhdm9pZAotICogIGp1bXBpbmcgb3V0IG9mIGxpbmUgaWYgbmVjZXNzYXJ5LiBXZSBjYW5ub3QgYWRkIG1vcmUgd2l0aCB0aGlzCi0gKiAgbWVjaGFuaXNtIGJlY2F1c2Ugb2xkZXIga2VybmVscyB3b24ndCByZXR1cm4gLUVOT1NZUy4KKyAqIC0gSXQgaW50ZXJmZXJlcyB3aXRoIEFTTFIuCisgKiAtIEl0J3MgYXdrd2FyZCB0byB3cml0ZSBjb2RlIHRoYXQgbGl2ZXMgaW4ga2VybmVsIGFkZHJlc3NlcyBidXQgaXMKKyAqICAgY2FsbGFibGUgYnkgdXNlcnNwYWNlIGF0IGZpeGVkIGFkZHJlc3Nlcy4KKyAqIC0gVGhlIHdob2xlIGNvbmNlcHQgaXMgaW1wb3NzaWJsZSBmb3IgMzItYml0IGNvbXBhdCB1c2Vyc3BhY2UuCisgKiAtIFVNTCBjYW5ub3QgZWFzaWx5IHZpcnR1YWxpemUgYSB2c3lzY2FsbC4KICAqCi0gKiAgTm90ZTogdGhlIGNvbmNlcHQgY2xhc2hlcyB3aXRoIHVzZXIgbW9kZSBsaW51eC4gIFVNTCB1c2VycyBzaG91bGQKLSAqICB1c2UgdGhlIHZEU08uCisgKiBBcyBvZiBtaWQtMjAxNCwgSSBiZWxpZXZlIHRoYXQgdGhlcmUgaXMgbm8gbmV3IHVzZXJzcGFjZSBjb2RlIHRoYXQKKyAqIHdpbGwgdXNlIGEgdnN5c2NhbGwgaWYgdGhlIHZEU08gaXMgcHJlc2VudC4gIEkgaG9wZSB0aGF0IHRoZXJlIHdpbGwKKyAqIHNvb24gYmUgbm8gbmV3IHVzZXJzcGFjZSBjb2RlIHRoYXQgd2lsbCBldmVyIHVzZSBhIHZzeXNjYWxsLgorICoKKyAqIFRoZSBjb2RlIGluIHRoaXMgZmlsZSBlbXVsYXRlcyB2c3lzY2FsbHMgd2hlbiBub3RpZmllZCBvZiBhIHBhZ2UKKyAqIGZhdWx0IHRvIGEgdnN5c2NhbGwgYWRkcmVzcy4KICAqLwogCi0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10Ci0KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVrZWVwZXJfaW50ZXJuYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9nZXRjcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAKICNpbmNsdWRlIDxhc20vdnN5c2NhbGwuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9jb21wYXQuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS90b3BvbG9neS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlICJ2c3lzY2FsbF90cmFjZS5oIgogCi1ERUZJTkVfVlZBUihpbnQsIHZnZXRjcHVfbW9kZSk7Ci0KIHN0YXRpYyBlbnVtIHsgRU1VTEFURSwgTkFUSVZFLCBOT05FIH0gdnN5c2NhbGxfbW9kZSA9IEVNVUxBVEU7CiAKIHN0YXRpYyBpbnQgX19pbml0IHZzeXNjYWxsX3NldHVwKGNoYXIgKnN0cikKQEAgLTIyMiw2ICsyMDYsNyBAQAogCQkJCSAgInNlY2NvbXAgdHJpZWQgdG8gY2hhbmdlIHN5c2NhbGwgbnIgb3IgaXAiKTsKIAkJZG9fZXhpdChTSUdTWVMpOwogCX0KKwlyZWdzLT5vcmlnX2F4ID0gLTE7CiAJaWYgKHRtcCkKIAkJZ290byBkb19yZXQ7ICAvKiBza2lwIHJlcXVlc3RlZCAqLwogCkBAIC0yODQsNDYgKzI2OSw1NCBAQAogfQogCiAvKgotICogQXNzdW1lIF9faW5pdGNhbGwgZXhlY3V0ZXMgYmVmb3JlIGFsbCB1c2VyIHNwYWNlLiBIb3BlZnVsbHkga21vZAotICogZG9lc24ndCB2aW9sYXRlIHRoYXQuIFdlJ2xsIGZpbmQgb3V0IGlmIGl0IGRvZXMuCisgKiBBIHBzZXVkbyBWTUEgdG8gYWxsb3cgcHRyYWNlIGFjY2VzcyBmb3IgdGhlIHZzeXNjYWxsIHBhZ2UuICBUaGlzIG9ubHkKKyAqIGNvdmVycyB0aGUgNjRiaXQgdnN5c2NhbGwgcGFnZSBub3cuIDMyYml0IGhhcyBhIHJlYWwgVk1BIG5vdyBhbmQgZG9lcworICogbm90IG5lZWQgc3BlY2lhbCBoYW5kbGluZyBhbnltb3JlOgogICovCi1zdGF0aWMgdm9pZCB2c3lzY2FsbF9zZXRfY3B1KGludCBjcHUpCitzdGF0aWMgY29uc3QgY2hhciAqZ2F0ZV92bWFfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQl1bnNpZ25lZCBsb25nIGQ7Ci0JdW5zaWduZWQgbG9uZyBub2RlID0gMDsKLSNpZmRlZiBDT05GSUdfTlVNQQotCW5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOworCXJldHVybiAiW3ZzeXNjYWxsXSI7Cit9CitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdhdGVfdm1hX29wcyA9IHsKKwkubmFtZSA9IGdhdGVfdm1hX25hbWUsCit9Oworc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCBnYXRlX3ZtYSA9IHsKKwkudm1fc3RhcnQJPSBWU1lTQ0FMTF9BRERSLAorCS52bV9lbmQJCT0gVlNZU0NBTExfQUREUiArIFBBR0VfU0laRSwKKwkudm1fcGFnZV9wcm90CT0gUEFHRV9SRUFET05MWV9FWEVDLAorCS52bV9mbGFncwk9IFZNX1JFQUQgfCBWTV9FWEVDLAorCS52bV9vcHMJCT0gJmdhdGVfdm1hX29wcywKK307CisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X2dhdGVfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgorCWlmICghbW0gfHwgbW0tPmNvbnRleHQuaWEzMl9jb21wYXQpCisJCXJldHVybiBOVUxMOwogI2VuZGlmCi0JaWYgKGNwdV9oYXMoJmNwdV9kYXRhKGNwdSksIFg4Nl9GRUFUVVJFX1JEVFNDUCkpCi0JCXdyaXRlX3JkdHNjcF9hdXgoKG5vZGUgPDwgMTIpIHwgY3B1KTsKLQotCS8qCi0JICogU3RvcmUgY3B1IG51bWJlciBpbiBsaW1pdCBzbyB0aGF0IGl0IGNhbiBiZSBsb2FkZWQgcXVpY2tseQotCSAqIGluIHVzZXIgc3BhY2UgaW4gdmdldGNwdS4gKDEyIGJpdHMgZm9yIHRoZSBDUFUgYW5kIDggYml0cyBmb3IgdGhlIG5vZGUpCi0JICovCi0JZCA9IDB4MGY0MDAwMDAwMDAwMFVMTDsKLQlkIHw9IGNwdTsKLQlkIHw9IChub2RlICYgMHhmKSA8PCAxMjsKLQlkIHw9IChub2RlID4+IDQpIDw8IDQ4OwotCi0Jd3JpdGVfZ2R0X2VudHJ5KGdldF9jcHVfZ2R0X3RhYmxlKGNwdSksIEdEVF9FTlRSWV9QRVJfQ1BVLCAmZCwgREVTQ1RZUEVfUyk7CisJaWYgKHZzeXNjYWxsX21vZGUgPT0gTk9ORSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuICZnYXRlX3ZtYTsKIH0KIAotc3RhdGljIHZvaWQgY3B1X3ZzeXNjYWxsX2luaXQodm9pZCAqYXJnKQoraW50IGluX2dhdGVfYXJlYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCS8qIHByZWVtcHRpb24gc2hvdWxkIGJlIGFscmVhZHkgb2ZmICovCi0JdnN5c2NhbGxfc2V0X2NwdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGdldF9nYXRlX3ZtYShtbSk7CisKKwlpZiAoIXZtYSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKGFkZHIgPj0gdm1hLT52bV9zdGFydCkgJiYgKGFkZHIgPCB2bWEtPnZtX2VuZCk7CiB9CiAKLXN0YXRpYyBpbnQKLWNwdV92c3lzY2FsbF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCisvKgorICogVXNlIHRoaXMgd2hlbiB5b3UgaGF2ZSBubyByZWxpYWJsZSBtbSwgdHlwaWNhbGx5IGZyb20gaW50ZXJydXB0CisgKiBjb250ZXh0LiBJdCBpcyBsZXNzIHJlbGlhYmxlIHRoYW4gdXNpbmcgYSB0YXNrJ3MgbW0gYW5kIG1heSBnaXZlCisgKiBmYWxzZSBwb3NpdGl2ZXMuCisgKi8KK2ludCBpbl9nYXRlX2FyZWFfbm9fbW0odW5zaWduZWQgbG9uZyBhZGRyKQogewotCWxvbmcgY3B1ID0gKGxvbmcpYXJnOwotCi0JaWYgKGFjdGlvbiA9PSBDUFVfT05MSU5FIHx8IGFjdGlvbiA9PSBDUFVfT05MSU5FX0ZST1pFTikKLQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgY3B1X3ZzeXNjYWxsX2luaXQsIE5VTEwsIDEpOwotCi0JcmV0dXJuIE5PVElGWV9ET05FOworCXJldHVybiB2c3lzY2FsbF9tb2RlICE9IE5PTkUgJiYgKGFkZHIgJiBQQUdFX01BU0spID09IFZTWVNDQUxMX0FERFI7CiB9CiAKIHZvaWQgX19pbml0IG1hcF92c3lzY2FsbCh2b2lkKQpAQCAtMzMxLDI0ICszMjQsMTIgQEAKIAlleHRlcm4gY2hhciBfX3ZzeXNjYWxsX3BhZ2U7CiAJdW5zaWduZWQgbG9uZyBwaHlzYWRkcl92c3lzY2FsbCA9IF9fcGFfc3ltYm9sKCZfX3ZzeXNjYWxsX3BhZ2UpOwogCi0JX19zZXRfZml4bWFwKFZTWVNDQUxMX1BBR0UsIHBoeXNhZGRyX3ZzeXNjYWxsLAotCQkgICAgIHZzeXNjYWxsX21vZGUgPT0gTkFUSVZFCi0JCSAgICAgPyBQQUdFX0tFUk5FTF9WU1lTQ0FMTAotCQkgICAgIDogUEFHRV9LRVJORUxfVlZBUik7CisJaWYgKHZzeXNjYWxsX21vZGUgIT0gTk9ORSkKKwkJX19zZXRfZml4bWFwKFZTWVNDQUxMX1BBR0UsIHBoeXNhZGRyX3ZzeXNjYWxsLAorCQkJICAgICB2c3lzY2FsbF9tb2RlID09IE5BVElWRQorCQkJICAgICA/IFBBR0VfS0VSTkVMX1ZTWVNDQUxMCisJCQkgICAgIDogUEFHRV9LRVJORUxfVlZBUik7CisKIAlCVUlMRF9CVUdfT04oKHVuc2lnbmVkIGxvbmcpX19maXhfdG9fdmlydChWU1lTQ0FMTF9QQUdFKSAhPQogCQkgICAgICh1bnNpZ25lZCBsb25nKVZTWVNDQUxMX0FERFIpOwogfQotCi1zdGF0aWMgaW50IF9faW5pdCB2c3lzY2FsbF9pbml0KHZvaWQpCi17Ci0JY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2JlZ2luKCk7Ci0KLQlvbl9lYWNoX2NwdShjcHVfdnN5c2NhbGxfaW5pdCwgTlVMTCwgMSk7Ci0JLyogbm90aWZpZXIgcHJpb3JpdHkgPiBLVk0gKi8KLQlfX2hvdGNwdV9ub3RpZmllcihjcHVfdnN5c2NhbGxfbm90aWZpZXIsIDMwKTsKLQotCWNwdV9ub3RpZmllcl9yZWdpc3Rlcl9kb25lKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLV9faW5pdGNhbGwodnN5c2NhbGxfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCmluZGV4IGU0OGI2NzQuLjIzNGIwNzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCkBAIC0xMTYsOCArMTE2LDYgQEAKIAkudGVhcmRvd25fbXNpX2lycXMJPSBkZWZhdWx0X3RlYXJkb3duX21zaV9pcnFzLAogCS5yZXN0b3JlX21zaV9pcnFzCT0gZGVmYXVsdF9yZXN0b3JlX21zaV9pcnFzLAogCS5zZXR1cF9ocGV0X21zaQkJPSBkZWZhdWx0X3NldHVwX2hwZXRfbXNpLAotCS5tc2lfbWFza19pcnEJCT0gZGVmYXVsdF9tc2lfbWFza19pcnEsCi0JLm1zaXhfbWFza19pcnEJCT0gZGVmYXVsdF9tc2l4X21hc2tfaXJxLAogfTsKIAogLyogTVNJIGFyY2ggc3BlY2lmaWMgaG9va3MgKi8KQEAgLTE0MCwxNCArMTM4LDYgQEAKIHsKIAl4ODZfbXNpLnJlc3RvcmVfbXNpX2lycXMoZGV2KTsKIH0KLXUzMiBhcmNoX21zaV9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZykKLXsKLQlyZXR1cm4geDg2X21zaS5tc2lfbWFza19pcnEoZGVzYywgbWFzaywgZmxhZyk7Ci19Ci11MzIgYXJjaF9tc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCi17Ci0JcmV0dXJuIHg4Nl9tc2kubXNpeF9tYXNrX2lycShkZXNjLCBmbGFnKTsKLX0KICNlbmRpZgogCiBzdHJ1Y3QgeDg2X2lvX2FwaWNfb3BzIHg4Nl9pb19hcGljX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9pbnNuLmMgYi9hcmNoL3g4Ni9saWIvaW5zbi5jCmluZGV4IDU0ZmNmZmUuLjI0ODA5NzhiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvaW5zbi5jCisrKyBiL2FyY2gveDg2L2xpYi9pbnNuLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyogVmVyaWZ5IG5leHQgc2l6ZW9mKHQpIGJ5dGVzIGNhbiBiZSBvbiB0aGUgc2FtZSBpbnN0cnVjdGlvbiAqLwogI2RlZmluZSB2YWxpZGF0ZV9uZXh0KHQsIGluc24sIG4pCVwKLQkoKGluc24pLT5uZXh0X2J5dGUgKyBzaXplb2YodCkgKyBuIC0gKGluc24pLT5rYWRkciA8PSBNQVhfSU5TTl9TSVpFKQorCSgoaW5zbiktPm5leHRfYnl0ZSArIHNpemVvZih0KSArIG4gPCAoaW5zbiktPmVuZF9rYWRkcikKIAogI2RlZmluZSBfX2dldF9uZXh0KHQsIGluc24pCVwKIAkoeyB0IHIgPSAqKHQqKWluc24tPm5leHRfYnl0ZTsgaW5zbi0+bmV4dF9ieXRlICs9IHNpemVvZih0KTsgcjsgfSkKQEAgLTUwLDEwICs1MCwxMSBAQAogICogQGthZGRyOglhZGRyZXNzIChpbiBrZXJuZWwgbWVtb3J5KSBvZiBpbnN0cnVjdGlvbiAob3IgY29weSB0aGVyZW9mKQogICogQHg4Nl82NDoJITAgZm9yIDY0LWJpdCBrZXJuZWwgb3IgNjQtYml0IGFwcAogICovCi12b2lkIGluc25faW5pdChzdHJ1Y3QgaW5zbiAqaW5zbiwgY29uc3Qgdm9pZCAqa2FkZHIsIGludCB4ODZfNjQpCit2b2lkIGluc25faW5pdChzdHJ1Y3QgaW5zbiAqaW5zbiwgY29uc3Qgdm9pZCAqa2FkZHIsIGludCBidWZfbGVuLCBpbnQgeDg2XzY0KQogewogCW1lbXNldChpbnNuLCAwLCBzaXplb2YoKmluc24pKTsKIAlpbnNuLT5rYWRkciA9IGthZGRyOworCWluc24tPmVuZF9rYWRkciA9IGthZGRyICsgYnVmX2xlbjsKIAlpbnNuLT5uZXh0X2J5dGUgPSBrYWRkcjsKIAlpbnNuLT54ODZfNjQgPSB4ODZfNjQgPyAxIDogMDsKIAlpbnNuLT5vcG5kX2J5dGVzID0gNDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL01ha2VmaWxlIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKaW5kZXggNmExOWFkOS4uZWNmZGM0NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKQEAgLTMwLDMgKzMwLDUgQEAKIG9iai0kKENPTkZJR19OVU1BX0VNVSkJCSs9IG51bWFfZW11bGF0aW9uLm8KIAogb2JqLSQoQ09ORklHX01FTVRFU1QpCQkrPSBtZW10ZXN0Lm8KKworb2JqLSQoQ09ORklHX1g4Nl9JTlRFTF9NUFgpCSs9IG1weC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jCmluZGV4IDk1YTQyN2UuLmYwY2VkZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jCisrKyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jCkBAIC03Niw2ICs3Niw5IEBACiAjIGlmZGVmIENPTkZJR19YODZfRVNQRklYNjQKIAl7IEVTUEZJWF9CQVNFX0FERFIsCSJFU1BmaXggQXJlYSIsIDE2IH0sCiAjIGVuZGlmCisjIGlmZGVmIENPTkZJR19FRkkKKwl7IEVGSV9WQV9FTkQsCQkiRUZJIFJ1bnRpbWUgU2VydmljZXMiIH0sCisjIGVuZGlmCiAJeyBfX1NUQVJUX0tFUk5FTF9tYXAsICAgIkhpZ2ggS2VybmVsIE1hcHBpbmciIH0sCiAJeyBNT0RVTEVTX1ZBRERSLCAgICAgICAgIk1vZHVsZXMiIH0sCiAJeyBNT0RVTEVTX0VORCwgICAgICAgICAgIkVuZCBNb2R1bGVzIiB9LApAQCAtMTI2LDcgKzEyOSw3IEBACiAKIAlpZiAoIXBncHJvdF92YWwocHJvdCkpIHsKIAkJLyogTm90IHByZXNlbnQgKi8KLQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CiAJfSBlbHNlIHsKIAkJaWYgKHByICYgX1BBR0VfVVNFUikKIAkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgIlVTUiAiKTsKQEAgLTE0NSwxOCArMTQ4LDE2IEBACiAJCWVsc2UKIAkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgIiAgICAiKTsKIAotCQkvKiBCaXQgOSBoYXMgYSBkaWZmZXJlbnQgbWVhbmluZyBvbiBsZXZlbCAzIHZzIDQgKi8KLQkJaWYgKGxldmVsIDw9IDMpIHsKLQkJCWlmIChwciAmIF9QQUdFX1BTRSkKLQkJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICJQU0UgIik7Ci0JCQllbHNlCi0JCQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiICAgICIpOwotCQl9IGVsc2UgewotCQkJaWYgKHByICYgX1BBR0VfUEFUKQotCQkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgInBhdCAiKTsKLQkJCWVsc2UKLQkJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICIgICAgIik7Ci0JCX0KKwkJLyogQml0IDcgaGFzIGEgZGlmZmVyZW50IG1lYW5pbmcgb24gbGV2ZWwgMyB2cyA0ICovCisJCWlmIChsZXZlbCA8PSAzICYmIHByICYgX1BBR0VfUFNFKQorCQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiUFNFICIpOworCQllbHNlCisJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICIgICAgIik7CisJCWlmICgobGV2ZWwgPT0gNCAmJiBwciAmIF9QQUdFX1BBVCkgfHwKKwkJICAgICgobGV2ZWwgPT0gMyB8fCBsZXZlbCA9PSAyKSAmJiBwciAmIF9QQUdFX1BBVF9MQVJHRSkpCisJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICJwYXQgIik7CisJCWVsc2UKKwkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgIiAgICAiKTsKIAkJaWYgKHByICYgX1BBR0VfR0xPQkFMKQogCQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiR0xCICIpOwogCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmMKaW5kZXggNjZkYmEzNi4uODJiNDFkNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2L21tL2luaXQuYwpAQCAtMjcsNiArMjcsMzUgQEAKIAogI2luY2x1ZGUgIm1tX2ludGVybmFsLmgiCiAKKy8qCisgKiBUYWJsZXMgdHJhbnNsYXRpbmcgYmV0d2VlbiBwYWdlX2NhY2hlX3R5cGVfdCBhbmQgcHRlIGVuY29kaW5nLgorICogTWluaW1hbCBzdXBwb3J0ZWQgbW9kZXMgYXJlIGRlZmluZWQgc3RhdGljYWxseSwgbW9kaWZpZWQgaWYgbW9yZSBzdXBwb3J0ZWQKKyAqIGNhY2hlIG1vZGVzIGFyZSBhdmFpbGFibGUuCisgKiBJbmRleCBpbnRvIF9fY2FjaGVtb2RlMnB0ZV90YmwgaXMgdGhlIGNhY2hlbW9kZS4KKyAqIEluZGV4IGludG8gX19wdGUyY2FjaGVtb2RlX3RibCBhcmUgdGhlIGNhY2hpbmcgYXR0cmlidXRlIGJpdHMgb2YgdGhlIHB0ZQorICogKF9QQUdFX1BXVCwgX1BBR0VfUENELCBfUEFHRV9QQVQpIGF0IGluZGV4IGJpdCBwb3NpdGlvbnMgMCwgMSwgMi4KKyAqLwordWludDE2X3QgX19jYWNoZW1vZGUycHRlX3RibFtfUEFHRV9DQUNIRV9NT0RFX05VTV0gPSB7CisJW19QQUdFX0NBQ0hFX01PREVfV0JdCQk9IDAsCisJW19QQUdFX0NBQ0hFX01PREVfV0NdCQk9IF9QQUdFX1BXVCwKKwlbX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VU10JPSBfUEFHRV9QQ0QsCisJW19QQUdFX0NBQ0hFX01PREVfVUNdCQk9IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCwKKwlbX1BBR0VfQ0FDSEVfTU9ERV9XVF0JCT0gX1BBR0VfUENELAorCVtfUEFHRV9DQUNIRV9NT0RFX1dQXQkJPSBfUEFHRV9QQ0QsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoX19jYWNoZW1vZGUycHRlX3RibCk7Cit1aW50OF90IF9fcHRlMmNhY2hlbW9kZV90YmxbOF0gPSB7CisJW19fcHRlMmNtX2lkeCgwKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1dCLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUFdUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1dDLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUENEKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUFdUIHwgX1BBR0VfUENEKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1VDLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUEFUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1dCLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUFdUIHwgX1BBR0VfUEFUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1dDLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUENEIHwgX1BBR0VfUEFUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUFdUIHwgX1BBR0VfUENEIHwgX1BBR0VfUEFUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1VDLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9fcHRlMmNhY2hlbW9kZV90YmwpOworCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHBndF9idWZfc3RhcnQ7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHBndF9idWZfZW5kOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBwZ3RfYnVmX3RvcDsKQEAgLTY4NywzICs3MTYsMTEgQEAKIAlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKIH0KIAordm9pZCB1cGRhdGVfY2FjaGVfbW9kZV9lbnRyeSh1bnNpZ25lZCBlbnRyeSwgZW51bSBwYWdlX2NhY2hlX21vZGUgY2FjaGUpCit7CisJLyogZW50cnkgMCBNVVNUIGJlIFdCIChoYXJkd2lyZWQgdG8gc3BlZWQgdXAgdHJhbnNsYXRpb25zKSAqLworCUJVR19PTighZW50cnkgJiYgY2FjaGUgIT0gX1BBR0VfQ0FDSEVfTU9ERV9XQik7CisKKwlfX2NhY2hlbW9kZTJwdGVfdGJsW2NhY2hlXSA9IF9fY21faWR4MnB0ZShlbnRyeSk7CisJX19wdGUyY2FjaGVtb2RlX3RibFtlbnRyeV0gPSBjYWNoZTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCA0ZTVkZmVjLi4zMGViMDVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC01Miw3ICs1Miw2IEBACiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKICNpbmNsdWRlICJtbV9pbnRlcm5hbC5oIgpAQCAtMzM4LDEyICszMzcsMTUgQEAKICAqIENyZWF0ZSBsYXJnZSBwYWdlIHRhYmxlIG1hcHBpbmdzIGZvciBhIHJhbmdlIG9mIHBoeXNpY2FsIGFkZHJlc3Nlcy4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IF9faW5pdF9leHRyYV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQkJcGdwcm90X3QgcHJvdCkKKwkJCQkJZW51bSBwYWdlX2NhY2hlX21vZGUgY2FjaGUpCiB7CiAJcGdkX3QgKnBnZDsKIAlwdWRfdCAqcHVkOwogCXBtZF90ICpwbWQ7CisJcGdwcm90X3QgcHJvdDsKIAorCXBncHJvdF92YWwocHJvdCkgPSBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX0xBUkdFKSB8CisJCXBncHJvdF92YWwocGdwcm90XzRrXzJfbGFyZ2UoY2FjaGVtb2RlMnBncHJvdChjYWNoZSkpKTsKIAlCVUdfT04oKHBoeXMgJiB+UE1EX01BU0spIHx8IChzaXplICYgflBNRF9NQVNLKSk7CiAJZm9yICg7IHNpemU7IHBoeXMgKz0gUE1EX1NJWkUsIHNpemUgLT0gUE1EX1NJWkUpIHsKIAkJcGdkID0gcGdkX29mZnNldF9rKCh1bnNpZ25lZCBsb25nKV9fdmEocGh5cykpOwpAQCAtMzY2LDEyICszNjgsMTIgQEAKIAogdm9pZCBfX2luaXQgaW5pdF9leHRyYV9tYXBwaW5nX3diKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplKQogewotCV9faW5pdF9leHRyYV9tYXBwaW5nKHBoeXMsIHNpemUsIFBBR0VfS0VSTkVMX0xBUkdFKTsKKwlfX2luaXRfZXh0cmFfbWFwcGluZyhwaHlzLCBzaXplLCBfUEFHRV9DQUNIRV9NT0RFX1dCKTsKIH0KIAogdm9pZCBfX2luaXQgaW5pdF9leHRyYV9tYXBwaW5nX3VjKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplKQogewotCV9faW5pdF9leHRyYV9tYXBwaW5nKHBoeXMsIHNpemUsIFBBR0VfS0VSTkVMX0xBUkdFX05PQ0FDSEUpOworCV9faW5pdF9leHRyYV9tYXBwaW5nKHBoeXMsIHNpemUsIF9QQUdFX0NBQ0hFX01PREVfVUMpOwogfQogCiAvKgpAQCAtMTIwMiw2NiArMTIwNCwxNSBAQAogCXJldHVybiBwZm5fdmFsaWQocHRlX3BmbigqcHRlKSk7CiB9CiAKLS8qCi0gKiBBIHBzZXVkbyBWTUEgdG8gYWxsb3cgcHRyYWNlIGFjY2VzcyBmb3IgdGhlIHZzeXNjYWxsIHBhZ2UuICBUaGlzIG9ubHkKLSAqIGNvdmVycyB0aGUgNjRiaXQgdnN5c2NhbGwgcGFnZSBub3cuIDMyYml0IGhhcyBhIHJlYWwgVk1BIG5vdyBhbmQgZG9lcwotICogbm90IG5lZWQgc3BlY2lhbCBoYW5kbGluZyBhbnltb3JlOgotICovCi1zdGF0aWMgY29uc3QgY2hhciAqZ2F0ZV92bWFfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlyZXR1cm4gIlt2c3lzY2FsbF0iOwotfQotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnYXRlX3ZtYV9vcHMgPSB7Ci0JLm5hbWUgPSBnYXRlX3ZtYV9uYW1lLAotfTsKLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgZ2F0ZV92bWEgPSB7Ci0JLnZtX3N0YXJ0CT0gVlNZU0NBTExfQUREUiwKLQkudm1fZW5kCQk9IFZTWVNDQUxMX0FERFIgKyBQQUdFX1NJWkUsCi0JLnZtX3BhZ2VfcHJvdAk9IFBBR0VfUkVBRE9OTFlfRVhFQywKLQkudm1fZmxhZ3MJPSBWTV9SRUFEIHwgVk1fRVhFQywKLQkudm1fb3BzCQk9ICZnYXRlX3ZtYV9vcHMsCi19OwotCi1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9nYXRlX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLSNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KLQlpZiAoIW1tIHx8IG1tLT5jb250ZXh0LmlhMzJfY29tcGF0KQotCQlyZXR1cm4gTlVMTDsKLSNlbmRpZgotCXJldHVybiAmZ2F0ZV92bWE7Ci19Ci0KLWludCBpbl9nYXRlX2FyZWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGdldF9nYXRlX3ZtYShtbSk7Ci0KLQlpZiAoIXZtYSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gKGFkZHIgPj0gdm1hLT52bV9zdGFydCkgJiYgKGFkZHIgPCB2bWEtPnZtX2VuZCk7Ci19Ci0KLS8qCi0gKiBVc2UgdGhpcyB3aGVuIHlvdSBoYXZlIG5vIHJlbGlhYmxlIG1tLCB0eXBpY2FsbHkgZnJvbSBpbnRlcnJ1cHQKLSAqIGNvbnRleHQuIEl0IGlzIGxlc3MgcmVsaWFibGUgdGhhbiB1c2luZyBhIHRhc2sncyBtbSBhbmQgbWF5IGdpdmUKLSAqIGZhbHNlIHBvc2l0aXZlcy4KLSAqLwotaW50IGluX2dhdGVfYXJlYV9ub19tbSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIChhZGRyICYgUEFHRV9NQVNLKSA9PSBWU1lTQ0FMTF9BRERSOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwcm9iZV9tZW1vcnlfYmxvY2tfc2l6ZSh2b2lkKQogewogCS8qIHN0YXJ0IGZyb20gMmcgKi8KIAl1bnNpZ25lZCBsb25nIGJ6ID0gMVVMPDwzMTsKIAotI2lmZGVmIENPTkZJR19YODZfVVYKLQlpZiAoaXNfdXZfc3lzdGVtKCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVVY6IG1lbW9yeSBibG9jayBzaXplIDJHQlxuIik7CisJaWYgKHRvdGFscmFtX3BhZ2VzID49ICg2NFVMTCA8PCAoMzAgLSBQQUdFX1NISUZUKSkpIHsKKwkJcHJfaW5mbygiVXNpbmcgMkdCIG1lbW9yeSBibG9jayBzaXplIGZvciBsYXJnZS1tZW1vcnkgc3lzdGVtXG4iKTsKIAkJcmV0dXJuIDJVTCAqIDEwMjQgKiAxMDI0ICogMTAyNDsKIAl9Ci0jZW5kaWYKIAogCS8qIGxlc3MgdGhhbiA2NGcgaW5zdGFsbGVkICovCiAJaWYgKChtYXhfcGZuIDw8IFBBR0VfU0hJRlQpIDwgKDE2VUwgPDwgMzIpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW9tYXBfMzIuYyBiL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKaW5kZXggN2IxNzliNDkuLjljYTM1ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW9tYXBfMzIuYwpAQCAtMzMsMTcgKzMzLDE3IEBACiAKIGludCBpb21hcF9jcmVhdGVfd2MocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnByb3QpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnID0gX1BBR0VfQ0FDSEVfV0M7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtID0gX1BBR0VfQ0FDSEVfTU9ERV9XQzsKIAlpbnQgcmV0OwogCiAJaWYgKCFpc19pb19tYXBwaW5nX3Bvc3NpYmxlKGJhc2UsIHNpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IGlvX3Jlc2VydmVfbWVtdHlwZShiYXNlLCBiYXNlICsgc2l6ZSwgJmZsYWcpOworCXJldCA9IGlvX3Jlc2VydmVfbWVtdHlwZShiYXNlLCBiYXNlICsgc2l6ZSwgJnBjbSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCSpwcm90ID0gX19wZ3Byb3QoX19QQUdFX0tFUk5FTCB8IGZsYWcpOworCSpwcm90ID0gX19wZ3Byb3QoX19QQUdFX0tFUk5FTCB8IGNhY2hlbW9kZTJwcm90dmFsKHBjbSkpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfY3JlYXRlX3djKTsKQEAgLTgyLDggKzgyLDEwIEBACiAJICogTVRSUiBpcyBVQyBvciBXQy4gIFVDX01JTlVTIGdldHMgdGhlIHJlYWwgaW50ZW50aW9uLCBvZiB0aGUKIAkgKiB1c2VyLCB3aGljaCBpcyAiV0MgaWYgdGhlIE1UUlIgaXMgV0MsIFVDIGlmIHlvdSBjYW4ndCBkbyB0aGF0LiIKIAkgKi8KLQlpZiAoIXBhdF9lbmFibGVkICYmIHBncHJvdF92YWwocHJvdCkgPT0gcGdwcm90X3ZhbChQQUdFX0tFUk5FTF9XQykpCi0JCXByb3QgPSBQQUdFX0tFUk5FTF9VQ19NSU5VUzsKKwlpZiAoIXBhdF9lbmFibGVkICYmIHBncHJvdF92YWwocHJvdCkgPT0KKwkgICAgKF9fUEFHRV9LRVJORUwgfCBjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1dDKSkpCisJCXByb3QgPSBfX3BncHJvdChfX1BBR0VfS0VSTkVMIHwKKwkJCQljYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKSk7CiAKIAlyZXR1cm4gKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIGttYXBfYXRvbWljX3Byb3RfcGZuKHBmbiwgcHJvdCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggYWY3OGU1MC4uZmRmNjE3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtMjksMjAgKzI5LDIwIEBACiAgKiBjb25mbGljdHMuCiAgKi8KIGludCBpb3JlbWFwX2NoYW5nZV9hdHRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHByb3RfdmFsKQorCQkJZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtKQogewogCXVuc2lnbmVkIGxvbmcgbnJwYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKIAlpbnQgZXJyOwogCi0Jc3dpdGNoIChwcm90X3ZhbCkgewotCWNhc2UgX1BBR0VfQ0FDSEVfVUM6CisJc3dpdGNoIChwY20pIHsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfVUM6CiAJZGVmYXVsdDoKIAkJZXJyID0gX3NldF9tZW1vcnlfdWModmFkZHIsIG5ycGFnZXMpOwogCQlicmVhazsKLQljYXNlIF9QQUdFX0NBQ0hFX1dDOgorCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQzoKIAkJZXJyID0gX3NldF9tZW1vcnlfd2ModmFkZHIsIG5ycGFnZXMpOwogCQlicmVhazsKLQljYXNlIF9QQUdFX0NBQ0hFX1dCOgorCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQjoKIAkJZXJyID0gX3NldF9tZW1vcnlfd2IodmFkZHIsIG5ycGFnZXMpOwogCQlicmVhazsKIAl9CkBAIC03NSwxNCArNzUsMTQgQEAKICAqIGNhbGxlciBzaG91bGRuJ3QgbmVlZCB0byBrbm93IHRoYXQgc21hbGwgZGV0YWlsLgogICovCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpfX2lvcmVtYXBfY2FsbGVyKHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsCi0JCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBwcm90X3ZhbCwgdm9pZCAqY2FsbGVyKQorCQl1bnNpZ25lZCBsb25nIHNpemUsIGVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSwgdm9pZCAqY2FsbGVyKQogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB2YWRkcjsKIAlyZXNvdXJjZV9zaXplX3QgcGZuLCBsYXN0X3BmbiwgbGFzdF9hZGRyOwogCWNvbnN0IHJlc291cmNlX3NpemVfdCB1bmFsaWduZWRfcGh5c19hZGRyID0gcGh5c19hZGRyOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgdW5hbGlnbmVkX3NpemUgPSBzaXplOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7Ci0JdW5zaWduZWQgbG9uZyBuZXdfcHJvdF92YWw7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgbmV3X3BjbTsKIAlwZ3Byb3RfdCBwcm90OwogCWludCByZXR2YWw7CiAJdm9pZCBfX2lvbWVtICpyZXRfYWRkcjsKQEAgLTEzNCwzOCArMTM0LDQwIEBACiAJc2l6ZSA9IFBBR0VfQUxJR04obGFzdF9hZGRyKzEpIC0gcGh5c19hZGRyOwogCiAJcmV0dmFsID0gcmVzZXJ2ZV9tZW10eXBlKHBoeXNfYWRkciwgKHU2NClwaHlzX2FkZHIgKyBzaXplLAotCQkJCQkJcHJvdF92YWwsICZuZXdfcHJvdF92YWwpOworCQkJCQkJcGNtLCAmbmV3X3BjbSk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9FUlIgImlvcmVtYXAgcmVzZXJ2ZV9tZW10eXBlIGZhaWxlZCAlZFxuIiwgcmV0dmFsKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKHByb3RfdmFsICE9IG5ld19wcm90X3ZhbCkgewotCQlpZiAoIWlzX25ld19tZW10eXBlX2FsbG93ZWQocGh5c19hZGRyLCBzaXplLAotCQkJCQkgICAgcHJvdF92YWwsIG5ld19wcm90X3ZhbCkpIHsKKwlpZiAocGNtICE9IG5ld19wY20pIHsKKwkJaWYgKCFpc19uZXdfbWVtdHlwZV9hbGxvd2VkKHBoeXNfYWRkciwgc2l6ZSwgcGNtLCBuZXdfcGNtKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCSJpb3JlbWFwIGVycm9yIGZvciAweCVsbHgtMHglbGx4LCByZXF1ZXN0ZWQgMHglbHgsIGdvdCAweCVseFxuIiwKKwkJImlvcmVtYXAgZXJyb3IgZm9yIDB4JWxseC0weCVsbHgsIHJlcXVlc3RlZCAweCV4LCBnb3QgMHgleFxuIiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkciwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKShwaHlzX2FkZHIgKyBzaXplKSwKLQkJCQlwcm90X3ZhbCwgbmV3X3Byb3RfdmFsKTsKKwkJCQlwY20sIG5ld19wY20pOwogCQkJZ290byBlcnJfZnJlZV9tZW10eXBlOwogCQl9Ci0JCXByb3RfdmFsID0gbmV3X3Byb3RfdmFsOworCQlwY20gPSBuZXdfcGNtOwogCX0KIAotCXN3aXRjaCAocHJvdF92YWwpIHsKLQljYXNlIF9QQUdFX0NBQ0hFX1VDOgorCXByb3QgPSBQQUdFX0tFUk5FTF9JTzsKKwlzd2l0Y2ggKHBjbSkgeworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9VQzoKIAlkZWZhdWx0OgotCQlwcm90ID0gUEFHRV9LRVJORUxfSU9fTk9DQUNIRTsKKwkJcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfAorCQkJCWNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUMpKTsKIAkJYnJlYWs7Ci0JY2FzZSBfUEFHRV9DQUNIRV9VQ19NSU5VUzoKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX0lPX1VDX01JTlVTOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUzoKKwkJcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfAorCQkJCWNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpKTsKIAkJYnJlYWs7Ci0JY2FzZSBfUEFHRV9DQUNIRV9XQzoKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX0lPX1dDOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQzoKKwkJcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfAorCQkJCWNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfV0MpKTsKIAkJYnJlYWs7Ci0JY2FzZSBfUEFHRV9DQUNIRV9XQjoKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX0lPOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQjoKIAkJYnJlYWs7CiAJfQogCkBAIC0xNzgsNyArMTgwLDcgQEAKIAlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgYXJlYS0+YWRkcjsKIAotCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwaHlzX2FkZHIsIHNpemUsIHByb3RfdmFsKSkKKwlpZiAoa2VybmVsX21hcF9zeW5jX21lbXR5cGUocGh5c19hZGRyLCBzaXplLCBwY20pKQogCQlnb3RvIGVycl9mcmVlX2FyZWE7CiAKIAlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKHZhZGRyLCB2YWRkciArIHNpemUsIHBoeXNfYWRkciwgcHJvdCkpCkBAIC0yMjcsMTQgKzIyOSwxNCBAQAogewogCS8qCiAJICogSWRlYWxseSwgdGhpcyBzaG91bGQgYmU6Ci0JICoJcGF0X2VuYWJsZWQgPyBfUEFHRV9DQUNIRV9VQyA6IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCSAqCXBhdF9lbmFibGVkID8gX1BBR0VfQ0FDSEVfTU9ERV9VQyA6IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAJICoKIAkgKiBUaWxsIHdlIGZpeCBhbGwgWCBkcml2ZXJzIHRvIHVzZSBpb3JlbWFwX3djKCksIHdlIHdpbGwgdXNlCiAJICogVUMgTUlOVVMuCiAJICovCi0JdW5zaWduZWQgbG9uZyB2YWwgPSBfUEFHRV9DQUNIRV9VQ19NSU5VUzsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY20gPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOwogCi0JcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCB2YWwsCisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCBwY20sCiAJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woaW9yZW1hcF9ub2NhY2hlKTsKQEAgLTI1Miw3ICsyNTQsNyBAQAogdm9pZCBfX2lvbWVtICppb3JlbWFwX3djKHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAocGF0X2VuYWJsZWQpCi0JCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgX1BBR0VfQ0FDSEVfV0MsCisJCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgX1BBR0VfQ0FDSEVfTU9ERV9XQywKIAkJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAllbHNlCiAJCXJldHVybiBpb3JlbWFwX25vY2FjaGUocGh5c19hZGRyLCBzaXplKTsKQEAgLTI2MSw3ICsyNjMsNyBAQAogCiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfY2FjaGUocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgX1BBR0VfQ0FDSEVfV0IsCisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCBfUEFHRV9DQUNIRV9NT0RFX1dCLAogCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGlvcmVtYXBfY2FjaGUpOwpAQCAtMjY5LDcgKzI3MSw4IEBACiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJdW5zaWduZWQgbG9uZyBwcm90X3ZhbCkKIHsKLQlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHIsIHNpemUsIChwcm90X3ZhbCAmIF9QQUdFX0NBQ0hFX01BU0spLAorCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwKKwkJCQlwZ3Byb3QyY2FjaGVtb2RlKF9fcGdwcm90KHByb3RfdmFsKSksCiAJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woaW9yZW1hcF9wcm90KTsKQEAgLTMyNyw3ICszMzAsNyBAQAogICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQogICogYWNjZXNzCiAgKi8KLXZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgcGh5cykKK3ZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IHBoeXMpCiB7CiAJdm9pZCAqYWRkcjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGh5cyAmIFBBR0VfTUFTSzsKQEAgLTM0Myw3ICszNDYsNyBAQAogCXJldHVybiBhZGRyOwogfQogCi12b2lkIHVueGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBwaHlzLCB2b2lkICphZGRyKQordm9pZCB1bnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IHBoeXMsIHZvaWQgKmFkZHIpCiB7CiAJaWYgKHBhZ2VfaXNfcmFtKHBoeXMgPj4gUEFHRV9TSElGVCkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21tX2ludGVybmFsLmggYi9hcmNoL3g4Ni9tbS9tbV9pbnRlcm5hbC5oCmluZGV4IDZiNTYzYTEuLjYyNDc0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21tX2ludGVybmFsLmgKKysrIGIvYXJjaC94ODYvbW0vbW1faW50ZXJuYWwuaApAQCAtMTYsNCArMTYsNiBAQAogCiBleHRlcm4gaW50IGFmdGVyX2Jvb3RtZW07CiAKK3ZvaWQgdXBkYXRlX2NhY2hlX21vZGVfZW50cnkodW5zaWduZWQgZW50cnksIGVudW0gcGFnZV9jYWNoZV9tb2RlIGNhY2hlKTsKKwogI2VuZGlmCS8qIF9fWDg2X01NX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21weC5jIGIvYXJjaC94ODYvbW0vbXB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlYmY1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L21tL21weC5jCkBAIC0wLDAgKzEsOTI4IEBACisvKgorICogbXB4LmMgLSBNZW1vcnkgUHJvdGVjdGlvbiBlWHRlbnNpb25zCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIFFpYW93ZWkgUmVuIDxxaWFvd2VpLnJlbkBpbnRlbC5jb20+CisgKiBEYXZlIEhhbnNlbiA8ZGF2ZS5oYW5zZW5AaW50ZWwuY29tPgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQvc3lzY3RsLmg+CisKKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorI2luY2x1ZGUgPGFzbS9pbnNuLmg+CisjaW5jbHVkZSA8YXNtL21tYW4uaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vbXB4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9mcHUtaW50ZXJuYWwuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKm1weF9tYXBwaW5nX25hbWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuICJbbXB4XSI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXB4X3ZtYV9vcHMgPSB7CisJLm5hbWUgPSBtcHhfbWFwcGluZ19uYW1lLAorfTsKKworc3RhdGljIGludCBpc19tcHhfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiAodm1hLT52bV9vcHMgPT0gJm1weF92bWFfb3BzKTsKK30KKworLyoKKyAqIFRoaXMgaXMgcmVhbGx5IGEgc2ltcGxpZmllZCAidm1fbW1hcCIuIGl0IG9ubHkgaGFuZGxlcyBNUFgKKyAqIGJvdW5kcyB0YWJsZXMgKHRoZSBib3VuZHMgZGlyZWN0b3J5IGlzIHVzZXItYWxsb2NhdGVkKS4KKyAqCisgKiBMYXRlciBvbiwgd2UgdXNlIHRoZSB2bWEtPnZtX29wcyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGVzZQorICogVk1Bcy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXB4X21tYXAodW5zaWduZWQgbG9uZyBsZW4pCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBwZ29mZjsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXZtX2ZsYWdzX3Qgdm1fZmxhZ3M7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwkvKiBPbmx5IGJvdW5kcyB0YWJsZSBhbmQgYm91bmRzIGRpcmVjdG9yeSBjYW4gYmUgYWxsb2NhdGVkIGhlcmUgKi8KKwlpZiAobGVuICE9IE1QWF9CRF9TSVpFX0JZVEVTICYmIGxlbiAhPSBNUFhfQlRfU0laRV9CWVRFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCisJLyogVG9vIG1hbnkgbWFwcGluZ3M/ICovCisJaWYgKG1tLT5tYXBfY291bnQgPiBzeXNjdGxfbWF4X21hcF9jb3VudCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBPYnRhaW4gdGhlIGFkZHJlc3MgdG8gbWFwIHRvLiB3ZSB2ZXJpZnkgKG9yIHNlbGVjdCkgaXQgYW5kIGVuc3VyZQorCSAqIHRoYXQgaXQgcmVwcmVzZW50cyBhIHZhbGlkIHNlY3Rpb24gb2YgdGhlIGFkZHJlc3Mgc3BhY2UuCisJICovCisJYWRkciA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIDAsIGxlbiwgMCwgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFKTsKKwlpZiAoYWRkciAmIH5QQUdFX01BU0spIHsKKwkJcmV0ID0gYWRkcjsKKwkJZ290byBvdXQ7CisJfQorCisJdm1fZmxhZ3MgPSBWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9NUFggfAorCQkJbW0tPmRlZl9mbGFncyB8IFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUM7CisKKwkvKiBTZXQgcGdvZmYgYWNjb3JkaW5nIHRvIGFkZHIgZm9yIGFub25fdm1hICovCisJcGdvZmYgPSBhZGRyID4+IFBBR0VfU0hJRlQ7CisKKwlyZXQgPSBtbWFwX3JlZ2lvbihOVUxMLCBhZGRyLCBsZW4sIHZtX2ZsYWdzLCBwZ29mZik7CisJaWYgKElTX0VSUl9WQUxVRShyZXQpKQorCQlnb3RvIG91dDsKKworCXZtYSA9IGZpbmRfdm1hKG1tLCByZXQpOworCWlmICghdm1hKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwl2bWEtPnZtX29wcyA9ICZtcHhfdm1hX29wczsKKworCWlmICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwkJbW1fcG9wdWxhdGUocmV0LCBsZW4pOworCQlyZXR1cm4gcmV0OworCX0KKworb3V0OgorCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiByZXQ7Cit9CisKK2VudW0gcmVnX3R5cGUgeworCVJFR19UWVBFX1JNID0gMCwKKwlSRUdfVFlQRV9JTkRFWCwKKwlSRUdfVFlQRV9CQVNFLAorfTsKKworc3RhdGljIGludCBnZXRfcmVnX29mZnNldChzdHJ1Y3QgaW5zbiAqaW5zbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkgIGVudW0gcmVnX3R5cGUgdHlwZSkKK3sKKwlpbnQgcmVnbm8gPSAwOworCisJc3RhdGljIGNvbnN0IGludCByZWdvZmZbXSA9IHsKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGF4KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGN4KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGR4KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGJ4KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNwKSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGJwKSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNpKSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGRpKSwKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByOCksCisJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByOSksCisJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMTApLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjExKSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHIxMiksCisJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMTMpLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjE0KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHIxNSksCisjZW5kaWYKKwl9OworCWludCBucl9yZWdpc3RlcnMgPSBBUlJBWV9TSVpFKHJlZ29mZik7CisJLyoKKwkgKiBEb24ndCBwb3NzaWJseSBkZWNvZGUgYSAzMi1iaXQgaW5zdHJ1Y3Rpb25zIGFzCisJICogcmVhZGluZyBhIDY0LWJpdC1vbmx5IHJlZ2lzdGVyLgorCSAqLworCWlmIChJU19FTkFCTEVEKENPTkZJR19YODZfNjQpICYmICFpbnNuLT54ODZfNjQpCisJCW5yX3JlZ2lzdGVycyAtPSA4OworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBSRUdfVFlQRV9STToKKwkJcmVnbm8gPSBYODZfTU9EUk1fUk0oaW5zbi0+bW9kcm0udmFsdWUpOworCQlpZiAoWDg2X1JFWF9CKGluc24tPnJleF9wcmVmaXgudmFsdWUpID09IDEpCisJCQlyZWdubyArPSA4OworCQlicmVhazsKKworCWNhc2UgUkVHX1RZUEVfSU5ERVg6CisJCXJlZ25vID0gWDg2X1NJQl9JTkRFWChpbnNuLT5zaWIudmFsdWUpOworCQlpZiAoWDg2X1JFWF9YKGluc24tPnJleF9wcmVmaXgudmFsdWUpID09IDEpCisJCQlyZWdubyArPSA4OworCQlicmVhazsKKworCWNhc2UgUkVHX1RZUEVfQkFTRToKKwkJcmVnbm8gPSBYODZfU0lCX0JBU0UoaW5zbi0+c2liLnZhbHVlKTsKKwkJaWYgKFg4Nl9SRVhfQihpbnNuLT5yZXhfcHJlZml4LnZhbHVlKSA9PSAxKQorCQkJcmVnbm8gKz0gODsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcl9lcnIoImludmFsaWQgcmVnaXN0ZXIgdHlwZSIpOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJlZ25vID4gbnJfcmVnaXN0ZXJzKSB7CisJCVdBUk5fT05DRSgxLCAiZGVjb2RlZCBhbiBpbnN0cnVjdGlvbiB3aXRoIGFuIGludmFsaWQgcmVnaXN0ZXIiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiByZWdvZmZbcmVnbm9dOworfQorCisvKgorICogcmV0dXJuIHRoZSBhZGRyZXNzIGJlaW5nIHJlZmVyZW5jZWQgYmUgaW5zdHJ1Y3Rpb24KKyAqIGZvciBybT0zIHJldHVybmluZyB0aGUgY29udGVudCBvZiB0aGUgcm0gcmVnCisgKiBmb3Igcm0hPTMgY2FsY3VsYXRlcyB0aGUgYWRkcmVzcyB1c2luZyBTSUIgYW5kIERpc3AKKyAqLworc3RhdGljIHZvaWQgX191c2VyICptcHhfZ2V0X2FkZHJfcmVmKHN0cnVjdCBpbnNuICppbnNuLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGJhc2UsIGluZHg7CisJaW50IGFkZHJfb2Zmc2V0LCBiYXNlX29mZnNldCwgaW5keF9vZmZzZXQ7CisJaW5zbl9ieXRlX3Qgc2liOworCisJaW5zbl9nZXRfbW9kcm0oaW5zbik7CisJaW5zbl9nZXRfc2liKGluc24pOworCXNpYiA9IGluc24tPnNpYi52YWx1ZTsKKworCWlmIChYODZfTU9EUk1fTU9EKGluc24tPm1vZHJtLnZhbHVlKSA9PSAzKSB7CisJCWFkZHJfb2Zmc2V0ID0gZ2V0X3JlZ19vZmZzZXQoaW5zbiwgcmVncywgUkVHX1RZUEVfUk0pOworCQlpZiAoYWRkcl9vZmZzZXQgPCAwKQorCQkJZ290byBvdXRfZXJyOworCQlhZGRyID0gcmVnc19nZXRfcmVnaXN0ZXIocmVncywgYWRkcl9vZmZzZXQpOworCX0gZWxzZSB7CisJCWlmIChpbnNuLT5zaWIubmJ5dGVzKSB7CisJCQliYXNlX29mZnNldCA9IGdldF9yZWdfb2Zmc2V0KGluc24sIHJlZ3MsIFJFR19UWVBFX0JBU0UpOworCQkJaWYgKGJhc2Vfb2Zmc2V0IDwgMCkKKwkJCQlnb3RvIG91dF9lcnI7CisKKwkJCWluZHhfb2Zmc2V0ID0gZ2V0X3JlZ19vZmZzZXQoaW5zbiwgcmVncywgUkVHX1RZUEVfSU5ERVgpOworCQkJaWYgKGluZHhfb2Zmc2V0IDwgMCkKKwkJCQlnb3RvIG91dF9lcnI7CisKKwkJCWJhc2UgPSByZWdzX2dldF9yZWdpc3RlcihyZWdzLCBiYXNlX29mZnNldCk7CisJCQlpbmR4ID0gcmVnc19nZXRfcmVnaXN0ZXIocmVncywgaW5keF9vZmZzZXQpOworCQkJYWRkciA9IGJhc2UgKyBpbmR4ICogKDEgPDwgWDg2X1NJQl9TQ0FMRShzaWIpKTsKKwkJfSBlbHNlIHsKKwkJCWFkZHJfb2Zmc2V0ID0gZ2V0X3JlZ19vZmZzZXQoaW5zbiwgcmVncywgUkVHX1RZUEVfUk0pOworCQkJaWYgKGFkZHJfb2Zmc2V0IDwgMCkKKwkJCQlnb3RvIG91dF9lcnI7CisJCQlhZGRyID0gcmVnc19nZXRfcmVnaXN0ZXIocmVncywgYWRkcl9vZmZzZXQpOworCQl9CisJCWFkZHIgKz0gaW5zbi0+ZGlzcGxhY2VtZW50LnZhbHVlOworCX0KKwlyZXR1cm4gKHZvaWQgX191c2VyICopYWRkcjsKK291dF9lcnI6CisJcmV0dXJuICh2b2lkIF9fdXNlciAqKS0xOworfQorCitzdGF0aWMgaW50IG1weF9pbnNuX2RlY29kZShzdHJ1Y3QgaW5zbiAqaW5zbiwKKwkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGNoYXIgYnVmW01BWF9JTlNOX1NJWkVdOworCWludCB4ODZfNjQgPSAhdGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMik7CisJaW50IG5vdF9jb3BpZWQ7CisJaW50IG5yX2NvcGllZDsKKworCW5vdF9jb3BpZWQgPSBjb3B5X2Zyb21fdXNlcihidWYsICh2b2lkIF9fdXNlciAqKXJlZ3MtPmlwLCBzaXplb2YoYnVmKSk7CisJbnJfY29waWVkID0gc2l6ZW9mKGJ1ZikgLSBub3RfY29waWVkOworCS8qCisJICogVGhlIGRlY29kZXIgX3Nob3VsZF8gZmFpbCBuaWNlbHkgaWYgd2UgcGFzcyBpdCBhIHNob3J0IGJ1ZmZlci4KKwkgKiBCdXQsIGxldCdzIG5vdCBkZXBlbmQgb24gdGhhdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBJZiB3ZQorCSAqIGRpZCBub3QgZ2V0IGFueXRoaW5nLCBqdXN0IGVycm9yIG91dCBub3cuCisJICovCisJaWYgKCFucl9jb3BpZWQpCisJCXJldHVybiAtRUZBVUxUOworCWluc25faW5pdChpbnNuLCBidWYsIG5yX2NvcGllZCwgeDg2XzY0KTsKKwlpbnNuX2dldF9sZW5ndGgoaW5zbik7CisJLyoKKwkgKiBjb3B5X2Zyb21fdXNlcigpIHRyaWVzIHRvIGdldCBhcyBtYW55IGJ5dGVzIGFzIHdlIGNvdWxkIHNlZSBpbgorCSAqIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGluc3RydWN0aW9uLiAgSWYgdGhlIGluc3RydWN0aW9uIHdlIGFyZQorCSAqIGFmdGVyIGlzIHNob3J0ZXIgdGhhbiB0aGF0IF9hbmRfIHdlIGF0dGVtcHQgdG8gY29weSBmcm9tCisJICogc29tZXRoaW5nIHVucmVhZGFibGUsIHdlIG1pZ2h0IGdldCBhIHNob3J0IHJlYWQuICBUaGlzIGlzIE9LCisJICogYXMgbG9uZyBhcyB0aGUgcmVhZCBkaWQgbm90IHN0b3AgaW4gdGhlIG1pZGRsZSBvZiB0aGUKKwkgKiBpbnN0cnVjdGlvbi4gIENoZWNrIHRvIHNlZSBpZiB3ZSBnb3QgYSBwYXJ0aWFsIGluc3RydWN0aW9uLgorCSAqLworCWlmIChucl9jb3BpZWQgPCBpbnNuLT5sZW5ndGgpCisJCXJldHVybiAtRUZBVUxUOworCisJaW5zbl9nZXRfb3Bjb2RlKGluc24pOworCS8qCisJICogV2Ugb25seSBfcmVhbGx5XyBuZWVkIHRvIGRlY29kZSBibmRjbC9ibmRjbi9ibmRjdQorCSAqIEVycm9yIG91dCBvbiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChpbnNuLT5vcGNvZGUuYnl0ZXNbMF0gIT0gMHgwZikKKwkJZ290byBiYWRfb3Bjb2RlOworCWlmICgoaW5zbi0+b3Bjb2RlLmJ5dGVzWzFdICE9IDB4MWEpICYmCisJICAgIChpbnNuLT5vcGNvZGUuYnl0ZXNbMV0gIT0gMHgxYikpCisJCWdvdG8gYmFkX29wY29kZTsKKworCXJldHVybiAwOworYmFkX29wY29kZToKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIElmIGEgYm91bmRzIG92ZXJmbG93IG9jY3VycyB0aGVuIGEgI0JSIGlzIGdlbmVyYXRlZC4gVGhpcworICogZnVuY3Rpb24gZGVjb2RlcyBNUFggaW5zdHJ1Y3Rpb25zIHRvIGdldCB2aW9sYXRpb24gYWRkcmVzcworICogYW5kIHNldCB0aGlzIGFkZHJlc3MgaW50byBleHRlbmRlZCBzdHJ1Y3Qgc2lnaW5mby4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBzdXBlciBwcmVjaXNlIHdheSBvZiBkb2luZyB0aGlzLgorICogVXNlcnNwYWNlIGNvdWxkIGhhdmUsIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB3cml0dGVuCisgKiBhbnl0aGluZyBpdCB3YW50cyBpbiB0byB0aGUgaW5zdHJ1Y3Rpb25zLiAgV2UgY2FuIG5vdAorICogdHJ1c3QgYW55dGhpbmcgYWJvdXQgaXQuICBUaGV5IG1pZ2h0IG5vdCBiZSB2YWxpZAorICogaW5zdHJ1Y3Rpb25zIG9yIG1pZ2h0IGVuY29kZSBpbnZhbGlkIHJlZ2lzdGVycywgZXRjLi4uCisgKgorICogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBrZnJlZSgpIHRoZSByZXR1cm5lZCBzaWdpbmZvX3QuCisgKi8KK3NpZ2luZm9fdCAqbXB4X2dlbmVyYXRlX3NpZ2luZm8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKQoreworCXN0cnVjdCBibmRyZWcgKmJuZHJlZ3MsICpibmRyZWc7CisJc2lnaW5mb190ICppbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaW5zbiBpbnNuOworCXVpbnQ4X3QgYm5kcmVnbm87CisJaW50IGVycjsKKworCWVyciA9IG1weF9pbnNuX2RlY29kZSgmaW5zbiwgcmVncyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJLyoKKwkgKiBXZSBrbm93IGF0IHRoaXMgcG9pbnQgdGhhdCB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGgKKwkgKiBNUFggaW5zdHJ1Y3Rpb25zLgorCSAqLworCWluc25fZ2V0X21vZHJtKCZpbnNuKTsKKwlibmRyZWdubyA9IFg4Nl9NT0RSTV9SRUcoaW5zbi5tb2RybS52YWx1ZSk7CisJaWYgKGJuZHJlZ25vID4gMykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCS8qIGdldCB0aGUgYm5kcmVncyBfYXJlYV8gb2YgdGhlIHhzYXZlIHN0cnVjdHVyZSAqLworCWJuZHJlZ3MgPSBnZXRfeHNhdmVfYWRkcih4c2F2ZV9idWYsIFhTVEFURV9CTkRSRUdTKTsKKwlpZiAoIWJuZHJlZ3MpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb3V0OworCX0KKwkvKiBub3cgZ28gc2VsZWN0IHRoZSBpbmRpdmlkdWFsIHJlZ2lzdGVyIGluIHRoZSBzZXQgb2YgNCAqLworCWJuZHJlZyA9ICZibmRyZWdzW2JuZHJlZ25vXTsKKworCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCS8qCisJICogVGhlIHJlZ2lzdGVycyBhcmUgYWx3YXlzIDY0LWJpdCwgYnV0IHRoZSB1cHBlciAzMgorCSAqIGJpdHMgYXJlIGlnbm9yZWQgaW4gMzItYml0IG1vZGUuICBBbHNvLCBub3RlIHRoYXQgdGhlCisJICogdXBwZXIgYm91bmRzIGFyZSBhcmNoaXRlY3R1cmFsbHkgcmVwcmVzZW50ZWQgaW4gMSdzCisJICogY29tcGxlbWVudCBmb3JtLgorCSAqCisJICogVGhlICd1bnNpZ25lZCBsb25nJyBjYXN0IGlzIGJlY2F1c2UgdGhlIGNvbXBpbGVyCisJICogY29tcGxhaW5zIHdoZW4gY2FzdGluZyBmcm9tIGludGVnZXJzIHRvIGRpZmZlcmVudC1zaXplCisJICogcG9pbnRlcnMuCisJICovCisJaW5mby0+c2lfbG93ZXIgPSAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylibmRyZWctPmxvd2VyX2JvdW5kOworCWluZm8tPnNpX3VwcGVyID0gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpfmJuZHJlZy0+dXBwZXJfYm91bmQ7CisJaW5mby0+c2lfYWRkcl9sc2IgPSAwOworCWluZm8tPnNpX3NpZ25vID0gU0lHU0VHVjsKKwlpbmZvLT5zaV9lcnJubyA9IDA7CisJaW5mby0+c2lfY29kZSA9IFNFR1ZfQk5ERVJSOworCWluZm8tPnNpX2FkZHIgPSBtcHhfZ2V0X2FkZHJfcmVmKCZpbnNuLCByZWdzKTsKKwkvKgorCSAqIFdlIHdlcmUgbm90IGFibGUgdG8gZXh0cmFjdCBhbiBhZGRyZXNzIGZyb20gdGhlIGluc3RydWN0aW9uLAorCSAqIHByb2JhYmx5IGJlY2F1c2UgdGhlcmUgd2FzIHNvbWV0aGluZyBpbnZhbGlkIGluIGl0LgorCSAqLworCWlmIChpbmZvLT5zaV9hZGRyID09ICh2b2lkICopLTEpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb3V0OworCX0KKwlyZXR1cm4gaW5mbzsKK2Vycl9vdXQ6CisJLyogaW5mbyBtaWdodCBiZSBOVUxMLCBidXQga2ZyZWUoKSBoYW5kbGVzIHRoYXQgKi8KKwlrZnJlZShpbmZvKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgX191c2VyIHZvaWQgKnRhc2tfZ2V0X2JvdW5kc19kaXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IGJuZGNzciAqYm5kY3NyOworCisJaWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01QWCkpCisJCXJldHVybiBNUFhfSU5WQUxJRF9CT1VORFNfRElSOworCisJLyoKKwkgKiBUaGUgYm91bmRzIGRpcmVjdG9yeSBwb2ludGVyIGlzIHN0b3JlZCBpbiBhIHJlZ2lzdGVyCisJICogb25seSBhY2Nlc3NpYmxlIGlmIHdlIGZpcnN0IGRvIGFuIHhzYXZlLgorCSAqLworCWZwdV9zYXZlX2luaXQoJnRzay0+dGhyZWFkLmZwdSk7CisJYm5kY3NyID0gZ2V0X3hzYXZlX2FkZHIoJnRzay0+dGhyZWFkLmZwdS5zdGF0ZS0+eHNhdmUsIFhTVEFURV9CTkRDU1IpOworCWlmICghYm5kY3NyKQorCQlyZXR1cm4gTVBYX0lOVkFMSURfQk9VTkRTX0RJUjsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSByZWdpc3RlciBsb29rcyB2YWxpZCBieSBjaGVja2luZyB0aGUKKwkgKiBlbmFibGUgYml0LgorCSAqLworCWlmICghKGJuZGNzci0+Ym5kY2ZndSAmIE1QWF9CTkRDRkdfRU5BQkxFX0ZMQUcpKQorCQlyZXR1cm4gTVBYX0lOVkFMSURfQk9VTkRTX0RJUjsKKworCS8qCisJICogTGFzdGx5LCBtYXNrIG9mZiB0aGUgbG93IGJpdHMgdXNlZCBmb3IgY29uZmlndXJhdGlvbgorCSAqIGZsYWdzLCBhbmQgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBib3VuZHMgdGFibGUuCisJICovCisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKQorCQkoYm5kY3NyLT5ibmRjZmd1ICYgTVBYX0JORENGR19BRERSX01BU0spOworfQorCitpbnQgbXB4X2VuYWJsZV9tYW5hZ2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXZvaWQgX191c2VyICpiZF9iYXNlID0gTVBYX0lOVkFMSURfQk9VTkRTX0RJUjsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIHJ1bnRpbWUgaW4gdGhlIHVzZXJzcGFjZSB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW9uIG9mCisJICogdGhlIGJvdW5kcyBkaXJlY3RvcnkuIFRoZW4sIGl0IHdpbGwgc2F2ZSB0aGUgYmFzZSBvZiB0aGUgYm91bmRzCisJICogZGlyZWN0b3J5IGludG8gWFNBVkUvWFJTVE9SIFNhdmUgQXJlYSBhbmQgZW5hYmxlIE1QWCB0aHJvdWdoCisJICogWFJTVE9SIGluc3RydWN0aW9uLgorCSAqCisJICogZnB1X3hzYXZlKCkgaXMgZXhwZWN0ZWQgdG8gYmUgdmVyeSBleHBlbnNpdmUuIFN0b3JpbmcgdGhlIGJvdW5kcworCSAqIGRpcmVjdG9yeSBoZXJlIG1lYW5zIHRoYXQgd2UgZG8gbm90IGhhdmUgdG8gZG8geHNhdmUgaW4gdGhlIHVubWFwCisJICogcGF0aDsgd2UgY2FuIGp1c3QgdXNlIG1tLT5iZF9hZGRyIGluc3RlYWQuCisJICovCisJYmRfYmFzZSA9IHRhc2tfZ2V0X2JvdW5kc19kaXIodHNrKTsKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCW1tLT5iZF9hZGRyID0gYmRfYmFzZTsKKwlpZiAobW0tPmJkX2FkZHIgPT0gTVBYX0lOVkFMSURfQk9VTkRTX0RJUikKKwkJcmV0ID0gLUVOWElPOworCisJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IG1weF9kaXNhYmxlX21hbmFnZW1lbnQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKworCWlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9NUFgpKQorCQlyZXR1cm4gLUVOWElPOworCisJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwltbS0+YmRfYWRkciA9IE1QWF9JTlZBTElEX0JPVU5EU19ESVI7CisJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXaXRoIDMyLWJpdCBtb2RlLCBNUFhfQlRfU0laRV9CWVRFUyBpcyA0TUIsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoCisgKiBib3VuZHMgdGFibGUgaXMgMTZLQi4gV2l0aCA2NC1iaXQgbW9kZSwgTVBYX0JUX1NJWkVfQllURVMgaXMgMkdCLAorICogYW5kIHRoZSBzaXplIG9mIGVhY2ggYm91bmRzIHRhYmxlIGlzIDRNQi4KKyAqLworc3RhdGljIGludCBhbGxvY2F0ZV9idChsb25nIF9fdXNlciAqYmRfZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyBleHBlY3RlZF9vbGRfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGFjdHVhbF9vbGRfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGJ0X2FkZHI7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIENhcnZlIHRoZSB2aXJ0dWFsIHNwYWNlIG91dCBvZiB1c2Vyc3BhY2UgZm9yIHRoZSBuZXcKKwkgKiBib3VuZHMgdGFibGU6CisJICovCisJYnRfYWRkciA9IG1weF9tbWFwKE1QWF9CVF9TSVpFX0JZVEVTKTsKKwlpZiAoSVNfRVJSKCh2b2lkICopYnRfYWRkcikpCisJCXJldHVybiBQVFJfRVJSKCh2b2lkICopYnRfYWRkcik7CisJLyoKKwkgKiBTZXQgdGhlIHZhbGlkIGZsYWcgKGtpbmRhIGxpa2UgX1BBR0VfUFJFU0VOVCBpbiBhIHB0ZSkKKwkgKi8KKwlidF9hZGRyID0gYnRfYWRkciB8IE1QWF9CRF9FTlRSWV9WQUxJRF9GTEFHOworCisJLyoKKwkgKiBHbyBwb2tlIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXcgYm91bmRzIHRhYmxlIGluIHRvIHRoZQorCSAqIGJvdW5kcyBkaXJlY3RvcnkgZW50cnkgb3V0IGluIHVzZXJzcGFjZSBtZW1vcnkuICBOb3RlOgorCSAqIHdlIG1heSByYWNlIHdpdGggYW5vdGhlciBDUFUgaW5zdGFudGlhdGluZyB0aGUgc2FtZSB0YWJsZS4KKwkgKiBJbiB0aGF0IGNhc2UgdGhlIGNtcHhjaGcgd2lsbCBzZWUgYW4gdW5leHBlY3RlZAorCSAqICdhY3R1YWxfb2xkX3ZhbCcuCisJICoKKwkgKiBUaGlzIGNhbiBmYXVsdCwgYnV0IHRoYXQncyBPSyBiZWNhdXNlIHdlIGRvIG5vdCBob2xkCisJICogbW1hcF9zZW0gYXQgdGhpcyBwb2ludCwgdW5saWtlIHNvbWUgb2YgdGhlIG90aGVyIHBhcnQKKwkgKiBvZiB0aGUgTVBYIGNvZGUgdGhhdCBoYXZlIHRvIHBhZ2VmYXVsdF9kaXNhYmxlKCkuCisJICovCisJcmV0ID0gdXNlcl9hdG9taWNfY21weGNoZ19pbmF0b21pYygmYWN0dWFsX29sZF92YWwsIGJkX2VudHJ5LAorCQkJCQkgICBleHBlY3RlZF9vbGRfdmFsLCBidF9hZGRyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bm1hcDsKKworCS8qCisJICogVGhlIHVzZXJfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMoKSB3aWxsIG9ubHkgcmV0dXJuIG5vbnplcm8KKwkgKiBmb3IgZmF1bHRzLCAqbm90KiBpZiB0aGUgY21weGNoZyBpdHNlbGYgZmFpbHMuICBOb3cgd2UgbXVzdAorCSAqIHZlcmlmeSB0aGF0IHRoZSBjbXB4Y2hnIGl0c2VsZiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorCSAqLworCS8qCisJICogV2UgZXhwZWN0ZWQgYW4gZW1wdHkgJ2V4cGVjdGVkX29sZF92YWwnLCBidXQgaW5zdGVhZCBmb3VuZAorCSAqIGFuIGFwcGFyZW50bHkgdmFsaWQgZW50cnkuICBBc3N1bWUgd2UgcmFjZWQgd2l0aCBhbm90aGVyCisJICogdGhyZWFkIHRvIGluc3RhbnRpYXRlIHRoaXMgdGFibGUgYW5kIGRlc2NsYXJlIHN1Y2NlY3NzLgorCSAqLworCWlmIChhY3R1YWxfb2xkX3ZhbCAmIE1QWF9CRF9FTlRSWV9WQUxJRF9GTEFHKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0X3VubWFwOworCX0KKwkvKgorCSAqIFdlIGZvdW5kIGEgbm9uLWVtcHR5IGJkX2VudHJ5IGJ1dCBpdCBkaWQgbm90IGhhdmUgdGhlCisJICogVkFMSURfRkxBRyBzZXQuICBSZXR1cm4gYW4gZXJyb3Igd2hpY2ggd2lsbCByZXN1bHQgaW4KKwkgKiBhIFNFR1Ygc2luY2UgdGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHNvbWVib2R5IHNjcmliYmxlZAorCSAqIHNvbWUgaW52YWxpZCBkYXRhIGluIHRvIGEgYm91bmRzIHRhYmxlLgorCSAqLworCWlmIChleHBlY3RlZF9vbGRfdmFsICE9IGFjdHVhbF9vbGRfdmFsKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubWFwOworCX0KKwlyZXR1cm4gMDsKK291dF91bm1hcDoKKwl2bV9tdW5tYXAoYnRfYWRkciAmIE1QWF9CVF9BRERSX01BU0ssIE1QWF9CVF9TSVpFX0JZVEVTKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV2hlbiBhIEJORFNUWCBpbnN0cnVjdGlvbiBhdHRlbXB0cyB0byBzYXZlIGJvdW5kcyB0byBhIGJvdW5kcworICogdGFibGUsIGl0IHdpbGwgZmlyc3QgYXR0ZW1wdCB0byBsb29rIHVwIHRoZSB0YWJsZSBpbiB0aGUKKyAqIGZpcnN0LWxldmVsIGJvdW5kcyBkaXJlY3RvcnkuICBJZiBpdCBkb2VzIG5vdCBmaW5kIGEgdGFibGUgaW4KKyAqIHRoZSBkaXJlY3RvcnksIGEgI0JSIGlzIGdlbmVyYXRlZCBhbmQgd2UgZ2V0IGhlcmUgaW4gb3JkZXIgdG8KKyAqIGFsbG9jYXRlIGEgbmV3IHRhYmxlLgorICoKKyAqIFdpdGggMzItYml0IG1vZGUsIHRoZSBzaXplIG9mIEJEIGlzIDRNQiwgYW5kIHRoZSBzaXplIG9mIGVhY2gKKyAqIGJvdW5kIHRhYmxlIGlzIDE2S0IuIFdpdGggNjQtYml0IG1vZGUsIHRoZSBzaXplIG9mIEJEIGlzIDJHQiwKKyAqIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIGJvdW5kIHRhYmxlIGlzIDRNQi4KKyAqLworc3RhdGljIGludCBkb19tcHhfYnRfZmF1bHQoc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKQoreworCXVuc2lnbmVkIGxvbmcgYmRfZW50cnksIGJkX2Jhc2U7CisJc3RydWN0IGJuZGNzciAqYm5kY3NyOworCisJYm5kY3NyID0gZ2V0X3hzYXZlX2FkZHIoeHNhdmVfYnVmLCBYU1RBVEVfQk5EQ1NSKTsKKwlpZiAoIWJuZGNzcikKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyoKKwkgKiBNYXNrIG9mZiB0aGUgcHJlc2VydmUgYW5kIGVuYWJsZSBiaXRzCisJICovCisJYmRfYmFzZSA9IGJuZGNzci0+Ym5kY2ZndSAmIE1QWF9CTkRDRkdfQUREUl9NQVNLOworCS8qCisJICogVGhlIGhhcmR3YXJlIHByb3ZpZGVzIHRoZSBhZGRyZXNzIG9mIHRoZSBtaXNzaW5nIG9yIGludmFsaWQKKwkgKiBlbnRyeSB2aWEgQk5EU1RBVFVTLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGdvIGxvb2sgaXQgdXAuCisJICovCisJYmRfZW50cnkgPSBibmRjc3ItPmJuZHN0YXR1cyAmIE1QWF9CTkRTVEFfQUREUl9NQVNLOworCS8qCisJICogTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZW50cnkgaXMgd2l0aGluIHdoZXJlIHdlIHRoaW5rCisJICogdGhlIGRpcmVjdG9yeSBpcy4KKwkgKi8KKwlpZiAoKGJkX2VudHJ5IDwgYmRfYmFzZSkgfHwKKwkgICAgKGJkX2VudHJ5ID49IGJkX2Jhc2UgKyBNUFhfQkRfU0laRV9CWVRFUykpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGFsbG9jYXRlX2J0KChsb25nIF9fdXNlciAqKWJkX2VudHJ5KTsKK30KKworaW50IG1weF9oYW5kbGVfYmRfZmF1bHQoc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKQoreworCS8qCisJICogVXNlcnNwYWNlIG5ldmVyIGFza2VkIHVzIHRvIG1hbmFnZSB0aGUgYm91bmRzIHRhYmxlcywKKwkgKiBzbyByZWZ1c2UgdG8gaGVscC4KKwkgKi8KKwlpZiAoIWtlcm5lbF9tYW5hZ2luZ19tcHhfdGFibGVzKGN1cnJlbnQtPm1tKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZG9fbXB4X2J0X2ZhdWx0KHhzYXZlX2J1ZikpIHsKKwkJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOworCQkvKgorCQkgKiBUaGUgZm9yY2Vfc2lnKCkgaXMgZXNzZW50aWFsbHkgImhhbmRsaW5nIiB0aGlzCisJCSAqIGV4Y2VwdGlvbiwgc28gd2UgZG8gbm90IHBhc3MgdXAgdGhlIGVycm9yCisJCSAqIGZyb20gZG9fbXB4X2J0X2ZhdWx0KCkuCisJCSAqLworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEEgdGhpbiB3cmFwcGVyIGFyb3VuZCBnZXRfdXNlcl9wYWdlcygpLiAgUmV0dXJucyAwIGlmIHRoZQorICogZmF1bHQgd2FzIHJlc29sdmVkIG9yIC1lcnJubyBpZiBub3QuCisgKi8KK3N0YXRpYyBpbnQgbXB4X3Jlc29sdmVfZmF1bHQobG9uZyBfX3VzZXIgKmFkZHIsIGludCB3cml0ZSkKK3sKKwlsb25nIGd1cF9yZXQ7CisJaW50IG5yX3BhZ2VzID0gMTsKKwlpbnQgZm9yY2UgPSAwOworCisJZ3VwX3JldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCAodW5zaWduZWQgbG9uZylhZGRyLAorCQkJCSBucl9wYWdlcywgd3JpdGUsIGZvcmNlLCBOVUxMLCBOVUxMKTsKKwkvKgorCSAqIGdldF91c2VyX3BhZ2VzKCkgcmV0dXJucyBudW1iZXIgb2YgcGFnZXMgZ290dGVuLgorCSAqIDAgbWVhbnMgd2UgZmFpbGVkIHRvIGZhdWx0IGluIGFuZCBnZXQgYW55dGhpbmcsCisJICogcHJvYmFibHkgYmVjYXVzZSAnYWRkcicgaXMgYmFkLgorCSAqLworCWlmICghZ3VwX3JldCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJLyogT3RoZXIgZXJyb3IsIHJldHVybiBpdCAqLworCWlmIChndXBfcmV0IDwgMCkKKwkJcmV0dXJuIGd1cF9yZXQ7CisJLyogbXVzdCBoYXZlIGd1cCdkIGEgcGFnZSBhbmQgZ3VwX3JldD4wLCBzdWNjZXNzICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgdGhlIGJhc2Ugb2YgYm91bmRzIHRhYmxlcyBwb2ludGVkIGJ5IHNwZWNpZmljIGJvdW5kcworICogZGlyZWN0b3J5IGVudHJ5LgorICovCitzdGF0aWMgaW50IGdldF9idF9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJbG9uZyBfX3VzZXIgKmJkX2VudHJ5LCB1bnNpZ25lZCBsb25nICpidF9hZGRyKQoreworCWludCByZXQ7CisJaW50IHZhbGlkX2JpdDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCAoYmRfZW50cnkpLCBzaXplb2YoKmJkX2VudHJ5KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJd2hpbGUgKDEpIHsKKwkJaW50IG5lZWRfd3JpdGUgPSAwOworCisJCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisJCXJldCA9IGdldF91c2VyKCpidF9hZGRyLCBiZF9lbnRyeSk7CisJCXBhZ2VmYXVsdF9lbmFibGUoKTsKKwkJaWYgKCFyZXQpCisJCQlicmVhazsKKwkJaWYgKHJldCA9PSAtRUZBVUxUKQorCQkJcmV0ID0gbXB4X3Jlc29sdmVfZmF1bHQoYmRfZW50cnksIG5lZWRfd3JpdGUpOworCQkvKgorCQkgKiBJZiB3ZSBjb3VsZCBub3QgcmVzb2x2ZSB0aGUgZmF1bHQsIGNvbnNpZGVyIGl0CisJCSAqIHVzZXJzcGFjZSdzIGZhdWx0IGFuZCBlcnJvciBvdXQuCisJCSAqLworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwl2YWxpZF9iaXQgPSAqYnRfYWRkciAmIE1QWF9CRF9FTlRSWV9WQUxJRF9GTEFHOworCSpidF9hZGRyICY9IE1QWF9CVF9BRERSX01BU0s7CisKKwkvKgorCSAqIFdoZW4gdGhlIGtlcm5lbCBpcyBtYW5hZ2luZyBib3VuZHMgdGFibGVzLCBhIGJvdW5kcyBkaXJlY3RvcnkKKwkgKiBlbnRyeSB3aWxsIGVpdGhlciBoYXZlIGEgdmFsaWQgYWRkcmVzcyAocGx1cyB0aGUgdmFsaWQgYml0KQorCSAqICpPUiogYmUgY29tcGxldGVseSBlbXB0eS4gSWYgd2Ugc2VlIGEgIXZhbGlkIGVudHJ5ICphbmQqIHNvbWUKKwkgKiBkYXRhIGluIHRoZSBhZGRyZXNzIGZpZWxkLCB3ZSBrbm93IHNvbWV0aGluZyBpcyB3cm9uZy4gVGhpcworCSAqIC1FSU5WQUwgcmV0dXJuIHdpbGwgY2F1c2UgYSBTSUdTRUdWLgorCSAqLworCWlmICghdmFsaWRfYml0ICYmICpidF9hZGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKgorCSAqIERvIHdlIGhhdmUgYW4gY29tcGxldGVseSB6ZXJvZWQgYnQgZW50cnk/ICBUaGF0IGlzIE9LLiAgSXQKKwkgKiBqdXN0IG1lYW5zIHRoZXJlIHdhcyBubyBib3VuZHMgdGFibGUgZm9yIHRoaXMgbWVtb3J5LiAgTWFrZQorCSAqIHN1cmUgdG8gZGlzdGluZ3Vpc2ggdGhpcyBmcm9tIC1FSU5WQUwsIHdoaWNoIHdpbGwgY2F1c2UKKwkgKiBhIFNFR1YuCisJICovCisJaWYgKCF2YWxpZF9iaXQpCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBiYWNraW5nIHBoeXNpY2FsIHBhZ2VzIG9mIGJvdW5kcyB0YWJsZSAnYnRfYWRkcicuCisgKiBBc3N1bWUgc3RhcnQuLi5lbmQgaXMgd2l0aGluIHRoYXQgYm91bmRzIHRhYmxlLgorICovCitzdGF0aWMgaW50IHphcF9idF9lbnRyaWVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQl1bnNpZ25lZCBsb25nIGJ0X2FkZHIsCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgYWRkciwgbGVuOworCisJLyoKKwkgKiBGaW5kIHRoZSBmaXJzdCBvdmVybGFwcGluZyB2bWEuIElmIHZtYS0+dm1fc3RhcnQgPiBzdGFydCwgdGhlcmUKKwkgKiB3aWxsIGJlIGEgaG9sZSBpbiB0aGUgYm91bmRzIHRhYmxlLiBUaGlzIC1FSU5WQUwgcmV0dXJuIHdpbGwKKwkgKiBjYXVzZSBhIFNJR1NFR1YuCisJICovCisJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKKwlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gc3RhcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBBIE5VTUEgcG9saWN5IG9uIGEgVk1fTVBYIFZNQSBjb3VsZCBjYXVzZSB0aGlzIGJvdWRzIHRhYmxlIHRvCisJICogYmUgc3BsaXQuIFNvIHdlIG5lZWQgdG8gbG9vayBhY3Jvc3MgdGhlIGVudGlyZSAnc3RhcnQgLT4gZW5kJworCSAqIHJhbmdlIG9mIHRoaXMgYm91bmRzIHRhYmxlLCBmaW5kIGFsbCBvZiB0aGUgVk1fTVBYIFZNQXMsIGFuZAorCSAqIHphcCBvbmx5IHRob3NlLgorCSAqLworCWFkZHIgPSBzdGFydDsKKwl3aGlsZSAodm1hICYmIHZtYS0+dm1fc3RhcnQgPCBlbmQpIHsKKwkJLyoKKwkJICogV2UgZm9sbG93ZWQgYSBib3VuZHMgZGlyZWN0b3J5IGVudHJ5IGRvd24KKwkJICogaGVyZS4gIElmIHdlIGZpbmQgYSBub24tTVBYIFZNQSwgdGhhdCdzIGJhZCwKKwkJICogc28gc3RvcCBpbW1lZGlhdGVseSBhbmQgcmV0dXJuIGFuIGVycm9yLiAgVGhpcworCQkgKiBwcm9iYWJseSByZXN1bHRzIGluIGEgU0lHU0VHVi4KKwkJICovCisJCWlmICghaXNfbXB4X3ZtYSh2bWEpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbGVuID0gbWluKHZtYS0+dm1fZW5kLCBlbmQpIC0gYWRkcjsKKwkJemFwX3BhZ2VfcmFuZ2Uodm1hLCBhZGRyLCBsZW4sIE5VTEwpOworCisJCXZtYSA9IHZtYS0+dm1fbmV4dDsKKwkJYWRkciA9IHZtYS0+dm1fc3RhcnQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdW5tYXBfc2luZ2xlX2J0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQlsb25nIF9fdXNlciAqYmRfZW50cnksIHVuc2lnbmVkIGxvbmcgYnRfYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGVjdGVkX29sZF92YWwgPSBidF9hZGRyIHwgTVBYX0JEX0VOVFJZX1ZBTElEX0ZMQUc7CisJdW5zaWduZWQgbG9uZyBhY3R1YWxfb2xkX3ZhbCA9IDA7CisJaW50IHJldDsKKworCXdoaWxlICgxKSB7CisJCWludCBuZWVkX3dyaXRlID0gMTsKKworCQlwYWdlZmF1bHRfZGlzYWJsZSgpOworCQlyZXQgPSB1c2VyX2F0b21pY19jbXB4Y2hnX2luYXRvbWljKCZhY3R1YWxfb2xkX3ZhbCwgYmRfZW50cnksCisJCQkJCQkgICBleHBlY3RlZF9vbGRfdmFsLCAwKTsKKwkJcGFnZWZhdWx0X2VuYWJsZSgpOworCQlpZiAoIXJldCkKKwkJCWJyZWFrOworCQlpZiAocmV0ID09IC1FRkFVTFQpCisJCQlyZXQgPSBtcHhfcmVzb2x2ZV9mYXVsdChiZF9lbnRyeSwgbmVlZF93cml0ZSk7CisJCS8qCisJCSAqIElmIHdlIGNvdWxkIG5vdCByZXNvbHZlIHRoZSBmYXVsdCwgY29uc2lkZXIgaXQKKwkJICogdXNlcnNwYWNlJ3MgZmF1bHQgYW5kIGVycm9yIG91dC4KKwkJICovCisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwkvKgorCSAqIFRoZSBjbXB4Y2hnIHdhcyBwZXJmb3JtZWQsIGNoZWNrIHRoZSByZXN1bHRzLgorCSAqLworCWlmIChhY3R1YWxfb2xkX3ZhbCAhPSBleHBlY3RlZF9vbGRfdmFsKSB7CisJCS8qCisJCSAqIFNvbWVvbmUgZWxzZSByYWNlZCB3aXRoIHVzIHRvIHVubWFwIHRoZSB0YWJsZS4KKwkJICogVGhlcmUgd2FzIG5vIGJvdW5kcyB0YWJsZSBwb2ludGVkIHRvIGJ5IHRoZQorCQkgKiBkaXJlY3RvcnksIHNvIGRlY2xhcmUgc3VjY2Vzcy4gIFNvbWVib2R5IGZyZWVkCisJCSAqIGl0LgorCQkgKi8KKwkJaWYgKCFhY3R1YWxfb2xkX3ZhbCkKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBTb21ldGhpbmcgbWVzc2VkIHdpdGggdGhlIGJvdW5kcyBkaXJlY3RvcnkKKwkJICogZW50cnkuICBXZSBob2xkIG1tYXBfc2VtIGZvciByZWFkIG9yIHdyaXRlCisJCSAqIGhlcmUsIHNvIGl0IGNvdWxkIG5vdCBiZSBhIF9uZXdfIGJvdW5kcyB0YWJsZQorCQkgKiB0aGF0IHNvbWVvbmUganVzdCBhbGxvY2F0ZWQuICBTb21ldGhpbmcgaXMKKwkJICogd3JvbmcsIHNvIHBhc3MgdXAgdGhlIGVycm9yIGFuZCBTSUdTRUdWLgorCQkgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBOb3RlLCB3ZSBhcmUgbGlrZWx5IGJlaW5nIGNhbGxlZCB1bmRlciBkb19tdW5tYXAoKSBhbHJlYWR5LiBUbworCSAqIGF2b2lkIHJlY3Vyc2lvbiwgZG9fbXVubWFwKCkgd2lsbCBjaGVjayB3aGV0aGVyIGl0IGNvbWVzCisJICogZnJvbSBvbmUgYm91bmRzIHRhYmxlIHRocm91Z2ggVk1fTVBYIGZsYWcuCisJICovCisJcmV0dXJuIGRvX211bm1hcChtbSwgYnRfYWRkciwgTVBYX0JUX1NJWkVfQllURVMpOworfQorCisvKgorICogSWYgdGhlIGJvdW5kcyB0YWJsZSBwb2ludGVkIGJ5IGJvdW5kcyBkaXJlY3RvcnkgJ2JkX2VudHJ5JyBpcworICogbm90IHNoYXJlZCwgdW5tYXAgdGhpcyB3aG9sZSBib3VuZHMgdGFibGUuIE90aGVyd2lzZSwgb25seSBmcmVlCisgKiB0aG9zZSBiYWNraW5nIHBoeXNpY2FsIHBhZ2VzIG9mIGJvdW5kcyB0YWJsZSBlbnRyaWVzIGNvdmVyZWQKKyAqIGluIHRoaXMgdmlydHVhbCBhZGRyZXNzIHJlZ2lvbiBzdGFydC4uLmVuZC4KKyAqLworc3RhdGljIGludCB1bm1hcF9zaGFyZWRfYnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCWxvbmcgX191c2VyICpiZF9lbnRyeSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgcHJldl9zaGFyZWQsIGJvb2wgbmV4dF9zaGFyZWQpCit7CisJdW5zaWduZWQgbG9uZyBidF9hZGRyOworCWludCByZXQ7CisKKwlyZXQgPSBnZXRfYnRfYWRkcihtbSwgYmRfZW50cnksICZidF9hZGRyKTsKKwkvKgorCSAqIFdlIGNvdWxkIHNlZSBhbiAiZXJyb3IiIHJldCBmb3Igbm90LXByZXNlbnQgYm91bmRzCisJICogdGFibGVzIChub3QgcmVhbGx5IGFuIGVycm9yKSwgb3IgYWN0dWFsIGVycm9ycywgYnV0CisJICogc3RvcCB1bm1hcHBpbmcgZWl0aGVyIHdheS4KKwkgKi8KKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHByZXZfc2hhcmVkICYmIG5leHRfc2hhcmVkKQorCQlyZXQgPSB6YXBfYnRfZW50cmllcyhtbSwgYnRfYWRkciwKKwkJCQlidF9hZGRyK01QWF9HRVRfQlRfRU5UUllfT0ZGU0VUKHN0YXJ0KSwKKwkJCQlidF9hZGRyK01QWF9HRVRfQlRfRU5UUllfT0ZGU0VUKGVuZCkpOworCWVsc2UgaWYgKHByZXZfc2hhcmVkKQorCQlyZXQgPSB6YXBfYnRfZW50cmllcyhtbSwgYnRfYWRkciwKKwkJCQlidF9hZGRyK01QWF9HRVRfQlRfRU5UUllfT0ZGU0VUKHN0YXJ0KSwKKwkJCQlidF9hZGRyK01QWF9CVF9TSVpFX0JZVEVTKTsKKwllbHNlIGlmIChuZXh0X3NoYXJlZCkKKwkJcmV0ID0gemFwX2J0X2VudHJpZXMobW0sIGJ0X2FkZHIsIGJ0X2FkZHIsCisJCQkJYnRfYWRkcitNUFhfR0VUX0JUX0VOVFJZX09GRlNFVChlbmQpKTsKKwllbHNlCisJCXJldCA9IHVubWFwX3NpbmdsZV9idChtbSwgYmRfZW50cnksIGJ0X2FkZHIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEEgdmlydHVhbCBhZGRyZXNzIHJlZ2lvbiBiZWluZyBtdW5tYXAoKWVkIG1pZ2h0IHNoYXJlIGJvdW5kcyB0YWJsZQorICogd2l0aCBhZGphY2VudCBWTUFzLiBXZSBvbmx5IG5lZWQgdG8gZnJlZSB0aGUgYmFja2luZyBwaHlzaWNhbAorICogbWVtb3J5IG9mIHRoZXNlIHNoYXJlZCBib3VuZHMgdGFibGVzIGVudHJpZXMgY292ZXJlZCBpbiB0aGlzIHZpcnR1YWwKKyAqIGFkZHJlc3MgcmVnaW9uLgorICovCitzdGF0aWMgaW50IHVubWFwX2VkZ2VfYnRzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbnQgcmV0OworCWxvbmcgX191c2VyICpiZGVfc3RhcnQsICpiZGVfZW5kOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgKm5leHQ7CisJYm9vbCBwcmV2X3NoYXJlZCA9IGZhbHNlLCBuZXh0X3NoYXJlZCA9IGZhbHNlOworCisJYmRlX3N0YXJ0ID0gbW0tPmJkX2FkZHIgKyBNUFhfR0VUX0JEX0VOVFJZX09GRlNFVChzdGFydCk7CisJYmRlX2VuZCA9IG1tLT5iZF9hZGRyICsgTVBYX0dFVF9CRF9FTlRSWV9PRkZTRVQoZW5kLTEpOworCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIGJkZV9zdGFydCBhbmQgYmRlX2VuZCBhcmUgc2hhcmVkIHdpdGggYWRqYWNlbnQKKwkgKiBWTUFzLgorCSAqCisJICogV2UgYWxyZWFkeSB1bmxpa2VkIHRoZSBWTUFzIGZyb20gdGhlIG1tJ3MgcmJ0cmVlIHNvICdzdGFydCcKKwkgKiBpcyBndWFyYW50ZWVkIHRvIGJlIGluIGEgaG9sZS4gVGhpcyBnZXRzIHVzIHRoZSBmaXJzdCBWTUEKKwkgKiBiZWZvcmUgdGhlIGhvbGUgaW4gdG8gJ3ByZXYnIGFuZCB0aGUgbmV4dCBWTUEgYWZ0ZXIgdGhlIGhvbGUKKwkgKiBpbiB0byAnbmV4dCcuCisJICovCisJbmV4dCA9IGZpbmRfdm1hX3ByZXYobW0sIHN0YXJ0LCAmcHJldik7CisJaWYgKHByZXYgJiYgKG1tLT5iZF9hZGRyICsgTVBYX0dFVF9CRF9FTlRSWV9PRkZTRVQocHJldi0+dm1fZW5kLTEpKQorCQkJPT0gYmRlX3N0YXJ0KQorCQlwcmV2X3NoYXJlZCA9IHRydWU7CisJaWYgKG5leHQgJiYgKG1tLT5iZF9hZGRyICsgTVBYX0dFVF9CRF9FTlRSWV9PRkZTRVQobmV4dC0+dm1fc3RhcnQpKQorCQkJPT0gYmRlX2VuZCkKKwkJbmV4dF9zaGFyZWQgPSB0cnVlOworCisJLyoKKwkgKiBUaGlzIHZpcnR1YWwgYWRkcmVzcyByZWdpb24gYmVpbmcgbXVubWFwKCllZCBpcyBvbmx5CisJICogY292ZXJlZCBieSBvbmUgYm91bmRzIHRhYmxlLgorCSAqCisJICogSW4gdGhpcyBjYXNlLCBpZiB0aGlzIHRhYmxlIGlzIGFsc28gc2hhcmVkIHdpdGggYWRqYWNlbnQKKwkgKiBWTUFzLCBvbmx5IHBhcnQgb2YgdGhlIGJhY2tpbmcgcGh5c2ljYWwgbWVtb3J5IG9mIHRoZSBib3VuZHMKKwkgKiB0YWJsZSBuZWVkIGJlIGZyZWVlZC4gT3RoZXJ3aXNlIHRoZSB3aG9sZSBib3VuZHMgdGFibGUgbmVlZAorCSAqIGJlIHVubWFwcGVkLgorCSAqLworCWlmIChiZGVfc3RhcnQgPT0gYmRlX2VuZCkgeworCQlyZXR1cm4gdW5tYXBfc2hhcmVkX2J0KG1tLCBiZGVfc3RhcnQsIHN0YXJ0LCBlbmQsCisJCQkJcHJldl9zaGFyZWQsIG5leHRfc2hhcmVkKTsKKwl9CisKKwkvKgorCSAqIElmIG1vcmUgdGhhbiBvbmUgYm91bmRzIHRhYmxlcyBhcmUgY292ZXJlZCBpbiB0aGlzIHZpcnR1YWwKKwkgKiBhZGRyZXNzIHJlZ2lvbiBiZWluZyBtdW5tYXAoKWVkLCB3ZSBuZWVkIHRvIHNlcGFyYXRlbHkgY2hlY2sKKwkgKiB3aGV0aGVyIGJkZV9zdGFydCBhbmQgYmRlX2VuZCBhcmUgc2hhcmVkIHdpdGggYWRqYWNlbnQgVk1Bcy4KKwkgKi8KKwlyZXQgPSB1bm1hcF9zaGFyZWRfYnQobW0sIGJkZV9zdGFydCwgc3RhcnQsIGVuZCwgcHJldl9zaGFyZWQsIGZhbHNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IHVubWFwX3NoYXJlZF9idChtbSwgYmRlX2VuZCwgc3RhcnQsIGVuZCwgZmFsc2UsIG5leHRfc2hhcmVkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXB4X3VubWFwX3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaW50IHJldDsKKwlsb25nIF9fdXNlciAqYmRfZW50cnksICpiZGVfc3RhcnQsICpiZGVfZW5kOworCXVuc2lnbmVkIGxvbmcgYnRfYWRkcjsKKworCS8qCisJICogIkVkZ2UiIGJvdW5kcyB0YWJsZXMgYXJlIHRob3NlIHdoaWNoIGFyZSBiZWluZyB1c2VkIGJ5IHRoZSByZWdpb24KKwkgKiAoc3RhcnQgLT4gZW5kKSwgYnV0IHRoYXQgbWF5IGJlIHNoYXJlZCB3aXRoIGFkamFjZW50IGFyZWFzLiAgSWYgdGhleQorCSAqIHR1cm4gb3V0IHRvIGJlIGNvbXBsZXRlbHkgdW5zaGFyZWQsIHRoZXkgd2lsbCBiZSBmcmVlZC4gIElmIHRoZXkgYXJlCisJICogc2hhcmVkLCB3ZSB3aWxsIGZyZWUgdGhlIGJhY2tpbmcgc3RvcmUgKGxpa2UgYW4gTUFEVl9ET05UTkVFRCkgZm9yCisJICogYXJlYXMgdXNlZCBieSB0aGlzIHJlZ2lvbi4KKwkgKi8KKwlyZXQgPSB1bm1hcF9lZGdlX2J0cyhtbSwgc3RhcnQsIGVuZCk7CisJc3dpdGNoIChyZXQpIHsKKwkJLyogbm9uLXByZXNlbnQgdGFibGVzIGFyZSBPSyAqLworCQljYXNlIDA6CisJCWNhc2UgLUVOT0VOVDoKKwkJCS8qIFN1Y2Nlc3MsIG9yIG5vIHRhYmxlcyB0byB1bm1hcCAqLworCQkJYnJlYWs7CisJCWNhc2UgLUVJTlZBTDoKKwkJY2FzZSAtRUZBVUxUOgorCQlkZWZhdWx0OgorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIE9ubHkgdW5tYXAgdGhlIGJvdW5kcyB0YWJsZSB0aGF0IGFyZQorCSAqICAgMS4gZnVsbHkgY292ZXJlZAorCSAqICAgMi4gbm90IGF0IHRoZSBlZGdlcyBvZiB0aGUgbWFwcGluZywgZXZlbiBpZiBmdWxsIGFsaWduZWQKKwkgKi8KKwliZGVfc3RhcnQgPSBtbS0+YmRfYWRkciArIE1QWF9HRVRfQkRfRU5UUllfT0ZGU0VUKHN0YXJ0KTsKKwliZGVfZW5kID0gbW0tPmJkX2FkZHIgKyBNUFhfR0VUX0JEX0VOVFJZX09GRlNFVChlbmQtMSk7CisJZm9yIChiZF9lbnRyeSA9IGJkZV9zdGFydCArIDE7IGJkX2VudHJ5IDwgYmRlX2VuZDsgYmRfZW50cnkrKykgeworCQlyZXQgPSBnZXRfYnRfYWRkcihtbSwgYmRfZW50cnksICZidF9hZGRyKTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJCWNhc2UgMDoKKwkJCQlicmVhazsKKwkJCWNhc2UgLUVOT0VOVDoKKwkJCQkvKiBObyB0YWJsZSBoZXJlLCB0cnkgdGhlIG5leHQgb25lICovCisJCQkJY29udGludWU7CisJCQljYXNlIC1FSU5WQUw6CisJCQljYXNlIC1FRkFVTFQ6CisJCQlkZWZhdWx0OgorCQkJCS8qCisJCQkJICogTm90ZTogd2UgYXJlIGJlaW5nIHN0cmljdCBoZXJlLgorCQkJCSAqIEFueSB0aW1lIHdlIHJ1biBpbiB0byBhbiBpc3N1ZQorCQkJCSAqIHVubWFwcGluZyB0YWJsZXMsIHdlIHN0b3AgYW5kCisJCQkJICogU0lHU0VHVi4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gdW5tYXBfc2luZ2xlX2J0KG1tLCBiZF9lbnRyeSwgYnRfYWRkcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogRnJlZSB1bnVzZWQgYm91bmRzIHRhYmxlcyBjb3ZlcmVkIGluIGEgdmlydHVhbCBhZGRyZXNzIHJlZ2lvbiBiZWluZworICogbXVubWFwKCllZC4gQXNzdW1lIGVuZCA+IHN0YXJ0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgZG9fbXVubWFwKCksIGFuZCB0aGUgVk1BcyBjb3ZlcmluZworICogdGhlIHZpcnR1YWwgYWRkcmVzcyByZWdpb24gc3RhcnQuLi5lbmQgaGF2ZSBhbHJlYWR5IGJlZW4gc3BsaXQgaWYKKyAqIG5lY2Vzc2FyeSwgYW5kIHRoZSAndm1hJyBpcyB0aGUgZmlyc3Qgdm1hIGluIHRoaXMgcmFuZ2UgKHN0YXJ0IC0+IGVuZCkuCisgKi8KK3ZvaWQgbXB4X25vdGlmeV91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIFJlZnVzZSB0byBkbyBhbnl0aGluZyB1bmxlc3MgdXNlcnNwYWNlIGhhcyBhc2tlZAorCSAqIHRoZSBrZXJuZWwgdG8gaGVscCBtYW5hZ2UgdGhlIGJvdW5kcyB0YWJsZXMsCisJICovCisJaWYgKCFrZXJuZWxfbWFuYWdpbmdfbXB4X3RhYmxlcyhjdXJyZW50LT5tbSkpCisJCXJldHVybjsKKwkvKgorCSAqIFRoaXMgd2lsbCBsb29rIGFjcm9zcyB0aGUgZW50aXJlICdzdGFydCAtPiBlbmQnIHJhbmdlLAorCSAqIGFuZCBmaW5kIGFsbCBvZiB0aGUgbm9uLVZNX01QWCBWTUFzLgorCSAqCisJICogVG8gYXZvaWQgcmVjdXJzaW9uLCBpZiBhIFZNX01QWCB2bWEgaXMgZm91bmQgaW4gdGhlIHJhbmdlCisJICogKHN0YXJ0LT5lbmQpLCB3ZSB3aWxsIG5vdCBjb250aW51ZSBmb2xsb3ctdXAgd29yay4gVGhpcworCSAqIHJlY3Vyc2lvbiByZXByZXNlbnRzIGhhdmluZyBib3VuZHMgdGFibGVzIGZvciBib3VuZHMgdGFibGVzLAorCSAqIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkuIEJlaW5nIHN0cmljdCBhYm91dCBpdCBoZXJlCisJICogaGVscHMgZW5zdXJlIHRoYXQgd2UgZG8gbm90IGhhdmUgYW4gZXhwbG9pdGFibGUgc3RhY2sgb3ZlcmZsb3cuCisJICovCisJZG8geworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX01QWCkKKwkJCXJldHVybjsKKwkJdm1hID0gdm1hLT52bV9uZXh0OworCX0gd2hpbGUgKHZtYSAmJiB2bWEtPnZtX3N0YXJ0IDwgZW5kKTsKKworCXJldCA9IG1weF91bm1hcF90YWJsZXMobW0sIHN0YXJ0LCBlbmQpOworCWlmIChyZXQpCisJCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IDM2ZGUyOTMuLmEzYTVkNDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtNDg1LDE0ICs0ODUsMjMgQEAKIAogCS8qCiAJICogV2UgYXJlIHNhZmUgbm93LiBDaGVjayB3aGV0aGVyIHRoZSBuZXcgcGdwcm90IGlzIHRoZSBzYW1lOgorCSAqIENvbnZlcnQgcHJvdGVjdGlvbiBhdHRyaWJ1dGVzIHRvIDRrLWZvcm1hdCwgYXMgY3BhLT5tYXNrKiBhcmUgc2V0CisJICogdXAgYWNjb3JkaW5nbHkuCiAJICovCiAJb2xkX3B0ZSA9ICprcHRlOwotCW9sZF9wcm90ID0gcmVxX3Byb3QgPSBwdGVfcGdwcm90KG9sZF9wdGUpOworCW9sZF9wcm90ID0gcmVxX3Byb3QgPSBwZ3Byb3RfbGFyZ2VfMl80ayhwdGVfcGdwcm90KG9sZF9wdGUpKTsKIAogCXBncHJvdF92YWwocmVxX3Byb3QpICY9IH5wZ3Byb3RfdmFsKGNwYS0+bWFza19jbHIpOwogCXBncHJvdF92YWwocmVxX3Byb3QpIHw9IHBncHJvdF92YWwoY3BhLT5tYXNrX3NldCk7CiAKIAkvKgorCSAqIHJlcV9wcm90IGlzIGluIGZvcm1hdCBvZiA0ayBwYWdlcy4gSXQgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gbGFyZ2UKKwkgKiBwYWdlIGZvcm1hdDogdGhlIGNhY2hpbmcgbW9kZSBpbmNsdWRlcyB0aGUgUEFUIGJpdCBsb2NhdGVkIGF0CisJICogZGlmZmVyZW50IGJpdCBwb3NpdGlvbnMgaW4gdGhlIHR3byBmb3JtYXRzLgorCSAqLworCXJlcV9wcm90ID0gcGdwcm90XzRrXzJfbGFyZ2UocmVxX3Byb3QpOworCisJLyoKIAkgKiBTZXQgdGhlIFBTRSBhbmQgR0xPQkFMIGZsYWdzIG9ubHkgaWYgdGhlIFBSRVNFTlQgZmxhZyBpcwogCSAqIHNldCBvdGhlcndpc2UgcG1kX3ByZXNlbnQvcG1kX2h1Z2Ugd2lsbCByZXR1cm4gdHJ1ZSBldmVuIG9uCiAJICogYSBub24gcHJlc2VudCBwbWQuIFRoZSBjYW5vbl9wZ3Byb3Qgd2lsbCBjbGVhciBfUEFHRV9HTE9CQUwKQEAgLTU4NSwxMyArNTk0LDEwIEBACiAKIAlwYXJhdmlydF9hbGxvY19wdGUoJmluaXRfbW0sIHBhZ2VfdG9fcGZuKGJhc2UpKTsKIAlyZWZfcHJvdCA9IHB0ZV9wZ3Byb3QocHRlX2Nscmh1Z2UoKmtwdGUpKTsKLQkvKgotCSAqIElmIHdlIGV2ZXIgd2FudCB0byB1dGlsaXplIHRoZSBQQVQgYml0LCB3ZSBuZWVkIHRvCi0JICogdXBkYXRlIHRoaXMgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIGl0J3MgY29udmVydGVkIGZyb20KLQkgKiBiaXQgMTIgdG8gYml0IDcgd2hlbiB3ZSBjcm9zcyBmcm9tIHRoZSAyTUIgbGV2ZWwgdG8KLQkgKiB0aGUgNEsgbGV2ZWw6Ci0JICovCi0JV0FSTl9PTl9PTkNFKHBncHJvdF92YWwocmVmX3Byb3QpICYgX1BBR0VfUEFUX0xBUkdFKTsKKworCS8qIHByb21vdGUgUEFUIGJpdCB0byBjb3JyZWN0IHBvc2l0aW9uICovCisJaWYgKGxldmVsID09IFBHX0xFVkVMXzJNKQorCQlyZWZfcHJvdCA9IHBncHJvdF9sYXJnZV8yXzRrKHJlZl9wcm90KTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAobGV2ZWwgPT0gUEdfTEVWRUxfMUcpIHsKQEAgLTg3OSw2ICs4ODUsNyBAQAogewogCXVuc2lnbmVkIGludCBjdXJfcGFnZXMgPSAwOwogCXBtZF90ICpwbWQ7CisJcGdwcm90X3QgcG1kX3BncHJvdDsKIAogCS8qCiAJICogTm90IG9uIGEgMk0gYm91bmRhcnk/CkBAIC05MTAsNiArOTE3LDggQEAKIAlpZiAobnVtX3BhZ2VzID09IGN1cl9wYWdlcykKIAkJcmV0dXJuIGN1cl9wYWdlczsKIAorCXBtZF9wZ3Byb3QgPSBwZ3Byb3RfNGtfMl9sYXJnZShwZ3Byb3QpOworCiAJd2hpbGUgKGVuZCAtIHN0YXJ0ID49IFBNRF9TSVpFKSB7CiAKIAkJLyoKQEAgLTkyMSw3ICs5MzAsOCBAQAogCiAJCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBzdGFydCk7CiAKLQkJc2V0X3BtZChwbWQsIF9fcG1kKGNwYS0+cGZuIHwgX1BBR0VfUFNFIHwgbWFzc2FnZV9wZ3Byb3QocGdwcm90KSkpOworCQlzZXRfcG1kKHBtZCwgX19wbWQoY3BhLT5wZm4gfCBfUEFHRV9QU0UgfAorCQkJCSAgIG1hc3NhZ2VfcGdwcm90KHBtZF9wZ3Byb3QpKSk7CiAKIAkJc3RhcnQJICArPSBQTURfU0laRTsKIAkJY3BhLT5wZm4gICs9IFBNRF9TSVpFOwpAQCAtOTQ5LDYgKzk1OSw3IEBACiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKIAlpbnQgY3VyX3BhZ2VzID0gMDsKKwlwZ3Byb3RfdCBwdWRfcGdwcm90OwogCiAJZW5kID0gc3RhcnQgKyAoY3BhLT5udW1wYWdlcyA8PCBQQUdFX1NISUZUKTsKIApAQCAtOTg2LDEyICs5OTcsMTQgQEAKIAkJcmV0dXJuIGN1cl9wYWdlczsKIAogCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBzdGFydCk7CisJcHVkX3BncHJvdCA9IHBncHJvdF80a18yX2xhcmdlKHBncHJvdCk7CiAKIAkvKgogCSAqIE1hcCBldmVyeXRoaW5nIHN0YXJ0aW5nIGZyb20gdGhlIEdiIGJvdW5kYXJ5LCBwb3NzaWJseSB3aXRoIDFHIHBhZ2VzCiAJICovCiAJd2hpbGUgKGVuZCAtIHN0YXJ0ID49IFBVRF9TSVpFKSB7Ci0JCXNldF9wdWQocHVkLCBfX3B1ZChjcGEtPnBmbiB8IF9QQUdFX1BTRSB8IG1hc3NhZ2VfcGdwcm90KHBncHJvdCkpKTsKKwkJc2V0X3B1ZChwdWQsIF9fcHVkKGNwYS0+cGZuIHwgX1BBR0VfUFNFIHwKKwkJCQkgICBtYXNzYWdlX3BncHJvdChwdWRfcGdwcm90KSkpOwogCiAJCXN0YXJ0CSAgKz0gUFVEX1NJWkU7CiAJCWNwYS0+cGZuICArPSBQVURfU0laRTsKQEAgLTEzMDQsMTIgKzEzMTcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjYWNoZV9hdHRyKHBncHJvdF90IGF0dHIpCi17Ci0JcmV0dXJuIHBncHJvdF92YWwoYXR0cikgJgotCQkoX1BBR0VfUEFUIHwgX1BBR0VfUEFUX0xBUkdFIHwgX1BBR0VfUFdUIHwgX1BBR0VfUENEKTsKLX0KLQogc3RhdGljIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLAogCQkJCSAgICBwZ3Byb3RfdCBtYXNrX3NldCwgcGdwcm90X3QgbWFza19jbHIsCiAJCQkJICAgIGludCBmb3JjZV9zcGxpdCwgaW50IGluX2ZsYWcsCkBAIC0xMzkwLDcgKzEzOTcsNyBAQAogCSAqIE5vIG5lZWQgdG8gZmx1c2gsIHdoZW4gd2UgZGlkIG5vdCBzZXQgYW55IG9mIHRoZSBjYWNoaW5nCiAJICogYXR0cmlidXRlczoKIAkgKi8KLQljYWNoZSA9IGNhY2hlX2F0dHIobWFza19zZXQpOworCWNhY2hlID0gISFwZ3Byb3QyY2FjaGVtb2RlKG1hc2tfc2V0KTsKIAogCS8qCiAJICogT24gc3VjY2VzcyB3ZSB1c2UgQ0xGTFVTSCwgd2hlbiB0aGUgQ1BVIHN1cHBvcnRzIGl0IHRvCkBAIC0xNDQ1LDcgKzE0NTIsOCBAQAogCSAqIGZvciBub3cgVUMgTUlOVVMuIHNlZSBjb21tZW50cyBpbiBpb3JlbWFwX25vY2FjaGUoKQogCSAqLwogCXJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldCgmYWRkciwgbnVtcGFnZXMsCi0JCQkJICAgIF9fcGdwcm90KF9QQUdFX0NBQ0hFX1VDX01JTlVTKSwgMCk7CisJCQkJICAgIGNhY2hlbW9kZTJwZ3Byb3QoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUyksCisJCQkJICAgIDApOwogfQogCiBpbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKQEAgLTE0NTYsNyArMTQ2NCw3IEBACiAJICogZm9yIG5vdyBVQyBNSU5VUy4gc2VlIGNvbW1lbnRzIGluIGlvcmVtYXBfbm9jYWNoZSgpCiAJICovCiAJcmV0ID0gcmVzZXJ2ZV9tZW10eXBlKF9fcGEoYWRkciksIF9fcGEoYWRkcikgKyBudW1wYWdlcyAqIFBBR0VfU0laRSwKLQkJCSAgICBfUEFHRV9DQUNIRV9VQ19NSU5VUywgTlVMTCk7CisJCQkgICAgICBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTLCBOVUxMKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9lcnI7CiAKQEAgLTE0NzQsNyArMTQ4Miw3IEBACiBFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfdWMpOwogCiBzdGF0aWMgaW50IF9zZXRfbWVtb3J5X2FycmF5KHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBhZGRyaW5hcnJheSwKLQkJdW5zaWduZWQgbG9uZyBuZXdfdHlwZSkKKwkJZW51bSBwYWdlX2NhY2hlX21vZGUgbmV3X3R5cGUpCiB7CiAJaW50IGksIGo7CiAJaW50IHJldDsKQEAgLTE0OTAsMTEgKzE0OTgsMTMgQEAKIAl9CiAKIAlyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldChhZGRyLCBhZGRyaW5hcnJheSwKLQkJCQkgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfVUNfTUlOVVMpLCAxKTsKKwkJCQkgICBjYWNoZW1vZGUycGdwcm90KF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpLAorCQkJCSAgIDEpOwogCi0JaWYgKCFyZXQgJiYgbmV3X3R5cGUgPT0gX1BBR0VfQ0FDSEVfV0MpCisJaWYgKCFyZXQgJiYgbmV3X3R5cGUgPT0gX1BBR0VfQ0FDSEVfTU9ERV9XQykKIAkJcmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIGFkZHJpbmFycmF5LAotCQkJCQkgICAgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfV0MpLAorCQkJCQkgICAgICAgY2FjaGVtb2RlMnBncHJvdCgKKwkJCQkJCV9QQUdFX0NBQ0hFX01PREVfV0MpLAogCQkJCQkgICAgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfTUFTSyksCiAJCQkJCSAgICAgICAwLCBDUEFfQVJSQVksIE5VTEwpOwogCWlmIChyZXQpCkBAIC0xNTExLDEzICsxNTIxLDEzIEBACiAKIGludCBzZXRfbWVtb3J5X2FycmF5X3VjKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBhZGRyaW5hcnJheSkKIHsKLQlyZXR1cm4gX3NldF9tZW1vcnlfYXJyYXkoYWRkciwgYWRkcmluYXJyYXksIF9QQUdFX0NBQ0hFX1VDX01JTlVTKTsKKwlyZXR1cm4gX3NldF9tZW1vcnlfYXJyYXkoYWRkciwgYWRkcmluYXJyYXksIF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpOwogfQogRVhQT1JUX1NZTUJPTChzZXRfbWVtb3J5X2FycmF5X3VjKTsKIAogaW50IHNldF9tZW1vcnlfYXJyYXlfd2ModW5zaWduZWQgbG9uZyAqYWRkciwgaW50IGFkZHJpbmFycmF5KQogewotCXJldHVybiBfc2V0X21lbW9yeV9hcnJheShhZGRyLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfV0MpOworCXJldHVybiBfc2V0X21lbW9yeV9hcnJheShhZGRyLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfTU9ERV9XQyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfYXJyYXlfd2MpOwogCkBAIC0xNTI3LDEwICsxNTM3LDEyIEBACiAJdW5zaWduZWQgbG9uZyBhZGRyX2NvcHkgPSBhZGRyOwogCiAJcmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXQoJmFkZHIsIG51bXBhZ2VzLAotCQkJCSAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9VQ19NSU5VUyksIDApOworCQkJCSAgIGNhY2hlbW9kZTJwZ3Byb3QoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUyksCisJCQkJICAgMCk7CiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhZGRyX2NvcHksIG51bXBhZ2VzLAotCQkJCQkgICAgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfV0MpLAorCQkJCQkgICAgICAgY2FjaGVtb2RlMnBncHJvdCgKKwkJCQkJCV9QQUdFX0NBQ0hFX01PREVfV0MpLAogCQkJCQkgICAgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfTUFTSyksCiAJCQkJCSAgICAgICAwLCAwLCBOVUxMKTsKIAl9CkBAIC0xNTQ1LDcgKzE1NTcsNyBAQAogCQlyZXR1cm4gc2V0X21lbW9yeV91YyhhZGRyLCBudW1wYWdlcyk7CiAKIAlyZXQgPSByZXNlcnZlX21lbXR5cGUoX19wYShhZGRyKSwgX19wYShhZGRyKSArIG51bXBhZ2VzICogUEFHRV9TSVpFLAotCQlfUEFHRV9DQUNIRV9XQywgTlVMTCk7CisJCV9QQUdFX0NBQ0hFX01PREVfV0MsIE5VTEwpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtMTU2NCw2ICsxNTc2LDcgQEAKIAogaW50IF9zZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKQogeworCS8qIFdCIGNhY2hlIG1vZGUgaXMgaGFyZCB3aXJlZCB0byBhbGwgY2FjaGUgYXR0cmlidXRlIGJpdHMgYmVpbmcgMCAqLwogCXJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKCZhZGRyLCBudW1wYWdlcywKIAkJCQkgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSwgMCk7CiB9CkBAIC0xNTg2LDYgKzE1OTksNyBAQAogCWludCBpOwogCWludCByZXQ7CiAKKwkvKiBXQiBjYWNoZSBtb2RlIGlzIGhhcmQgd2lyZWQgdG8gYWxsIGNhY2hlIGF0dHJpYnV0ZSBiaXRzIGJlaW5nIDAgKi8KIAlyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKGFkZHIsIGFkZHJpbmFycmF5LAogCQkJCSAgICAgIF9fcGdwcm90KF9QQUdFX0NBQ0hFX01BU0spLCAxKTsKIAlpZiAocmV0KQpAQCAtMTY0OCw3ICsxNjYyLDcgQEAKIEVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX3VjKTsKIAogc3RhdGljIGludCBfc2V0X3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBhZGRyaW5hcnJheSwKLQkJdW5zaWduZWQgbG9uZyBuZXdfdHlwZSkKKwkJZW51bSBwYWdlX2NhY2hlX21vZGUgbmV3X3R5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKQEAgLTE2NjYsMTAgKzE2ODAsMTEgQEAKIAl9CiAKIAlyZXQgPSBjcGFfc2V0X3BhZ2VzX2FycmF5KHBhZ2VzLCBhZGRyaW5hcnJheSwKLQkJCV9fcGdwcm90KF9QQUdFX0NBQ0hFX1VDX01JTlVTKSk7Ci0JaWYgKCFyZXQgJiYgbmV3X3R5cGUgPT0gX1BBR0VfQ0FDSEVfV0MpCisJCQljYWNoZW1vZGUycGdwcm90KF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpKTsKKwlpZiAoIXJldCAmJiBuZXdfdHlwZSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dDKQogCQlyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgYWRkcmluYXJyYXksCi0JCQkJCSAgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9XQyksCisJCQkJCSAgICAgICBjYWNoZW1vZGUycGdwcm90KAorCQkJCQkJX1BBR0VfQ0FDSEVfTU9ERV9XQyksCiAJCQkJCSAgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSwKIAkJCQkJICAgICAgIDAsIENQQV9QQUdFU19BUlJBWSwgcGFnZXMpOwogCWlmIChyZXQpCkBAIC0xNjg5LDEzICsxNzA0LDEzIEBACiAKIGludCBzZXRfcGFnZXNfYXJyYXlfdWMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KQogewotCXJldHVybiBfc2V0X3BhZ2VzX2FycmF5KHBhZ2VzLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfVUNfTUlOVVMpOworCXJldHVybiBfc2V0X3BhZ2VzX2FycmF5KHBhZ2VzLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9wYWdlc19hcnJheV91Yyk7CiAKIGludCBzZXRfcGFnZXNfYXJyYXlfd2Moc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KQogewotCXJldHVybiBfc2V0X3BhZ2VzX2FycmF5KHBhZ2VzLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfV0MpOworCXJldHVybiBfc2V0X3BhZ2VzX2FycmF5KHBhZ2VzLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfTU9ERV9XQyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9wYWdlc19hcnJheV93Yyk7CiAKQEAgLTE3MTQsNiArMTcyOSw3IEBACiAJdW5zaWduZWQgbG9uZyBlbmQ7CiAJaW50IGk7CiAKKwkvKiBXQiBjYWNoZSBtb2RlIGlzIGhhcmQgd2lyZWQgdG8gYWxsIGNhY2hlIGF0dHJpYnV0ZSBiaXRzIGJlaW5nIDAgKi8KIAlyZXR2YWwgPSBjcGFfY2xlYXJfcGFnZXNfYXJyYXkocGFnZXMsIGFkZHJpbmFycmF5LAogCQkJX19wZ3Byb3QoX1BBR0VfQ0FDSEVfTUFTSykpOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQuYyBiL2FyY2gveDg2L21tL3BhdC5jCmluZGV4IDY1NzQzODguLmVkZjI5OWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhdC5jCisrKyBiL2FyY2gveDg2L21tL3BhdC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJwYXRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJtbV9pbnRlcm5hbC5oIgogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQVQKIGludCBfX3JlYWRfbW9zdGx5IHBhdF9lbmFibGVkID0gMTsKQEAgLTY2LDYgKzY3LDc1IEBACiAKIHN0YXRpYyB1NjQgX19yZWFkX21vc3RseSBib290X3BhdF9zdGF0ZTsKIAorI2lmZGVmIENPTkZJR19YODZfUEFUCisvKgorICogWDg2IFBBVCB1c2VzIHBhZ2UgZmxhZ3MgV0MgYW5kIFVuY2FjaGVkIHRvZ2V0aGVyIHRvIGtlZXAgdHJhY2sgb2YKKyAqIG1lbW9yeSB0eXBlIG9mIHBhZ2VzIHRoYXQgaGF2ZSBiYWNraW5nIHBhZ2Ugc3RydWN0LiBYODYgUEFUIHN1cHBvcnRzIDMKKyAqIGRpZmZlcmVudCBtZW1vcnkgdHlwZXMsIF9QQUdFX0NBQ0hFX01PREVfV0IsIF9QQUdFX0NBQ0hFX01PREVfV0MgYW5kCisgKiBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTIGFuZCBmb3VydGggc3RhdGUgd2hlcmUgcGFnZSdzIG1lbW9yeSB0eXBlIGhhcyBub3QKKyAqIGJlZW4gY2hhbmdlZCBmcm9tIGl0cyBkZWZhdWx0ICh2YWx1ZSBvZiAtMSB1c2VkIHRvIGRlbm90ZSB0aGlzKS4KKyAqIE5vdGUgd2UgZG8gbm90IHN1cHBvcnQgX1BBR0VfQ0FDSEVfTU9ERV9VQyBoZXJlLgorICovCisKKyNkZWZpbmUgX1BHTVRfREVGQVVMVAkJMAorI2RlZmluZSBfUEdNVF9XQwkJKDFVTCA8PCBQR19hcmNoXzEpCisjZGVmaW5lIF9QR01UX1VDX01JTlVTCQkoMVVMIDw8IFBHX3VuY2FjaGVkKQorI2RlZmluZSBfUEdNVF9XQgkJKDFVTCA8PCBQR191bmNhY2hlZCB8IDFVTCA8PCBQR19hcmNoXzEpCisjZGVmaW5lIF9QR01UX01BU0sJCSgxVUwgPDwgUEdfdW5jYWNoZWQgfCAxVUwgPDwgUEdfYXJjaF8xKQorI2RlZmluZSBfUEdNVF9DTEVBUl9NQVNLCSh+X1BHTVRfTUFTSykKKworc3RhdGljIGlubGluZSBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBnZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZykKK3sKKwl1bnNpZ25lZCBsb25nIHBnX2ZsYWdzID0gcGctPmZsYWdzICYgX1BHTVRfTUFTSzsKKworCWlmIChwZ19mbGFncyA9PSBfUEdNVF9ERUZBVUxUKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAocGdfZmxhZ3MgPT0gX1BHTVRfV0MpCisJCXJldHVybiBfUEFHRV9DQUNIRV9NT0RFX1dDOworCWVsc2UgaWYgKHBnX2ZsYWdzID09IF9QR01UX1VDX01JTlVTKQorCQlyZXR1cm4gX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUzsKKwllbHNlCisJCXJldHVybiBfUEFHRV9DQUNIRV9NT0RFX1dCOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbWVtdHlwZShzdHJ1Y3QgcGFnZSAqcGcsCisJCQkJICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlIG1lbXR5cGUpCit7CisJdW5zaWduZWQgbG9uZyBtZW10eXBlX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgb2xkX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzOworCisJc3dpdGNoIChtZW10eXBlKSB7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dDOgorCQltZW10eXBlX2ZsYWdzID0gX1BHTVRfV0M7CisJCWJyZWFrOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUzoKKwkJbWVtdHlwZV9mbGFncyA9IF9QR01UX1VDX01JTlVTOworCQlicmVhazsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfV0I6CisJCW1lbXR5cGVfZmxhZ3MgPSBfUEdNVF9XQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWVtdHlwZV9mbGFncyA9IF9QR01UX0RFRkFVTFQ7CisJCWJyZWFrOworCX0KKworCWRvIHsKKwkJb2xkX2ZsYWdzID0gcGctPmZsYWdzOworCQluZXdfZmxhZ3MgPSAob2xkX2ZsYWdzICYgX1BHTVRfQ0xFQVJfTUFTSykgfCBtZW10eXBlX2ZsYWdzOworCX0gd2hpbGUgKGNtcHhjaGcoJnBnLT5mbGFncywgb2xkX2ZsYWdzLCBuZXdfZmxhZ3MpICE9IG9sZF9mbGFncyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBnZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZykKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbWVtdHlwZShzdHJ1Y3QgcGFnZSAqcGcsCisJCQkJICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlIG1lbXR5cGUpCit7Cit9CisjZW5kaWYKKwogZW51bSB7CiAJUEFUX1VDID0gMCwJCS8qIHVuY2FjaGVkICovCiAJUEFUX1dDID0gMSwJCS8qIFdyaXRlIGNvbWJpbmluZyAqLwpAQCAtNzUsNiArMTQ1LDUyIEBACiAJUEFUX1VDX01JTlVTID0gNywJLyogVUMsIGJ1dCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IE1UUlIgKi8KIH07CiAKKyNkZWZpbmUgQ00oYykgKF9QQUdFX0NBQ0hFX01PREVfICMjIGMpCisKK3N0YXRpYyBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBwYXRfZ2V0X2NhY2hlX21vZGUodW5zaWduZWQgcGF0X3ZhbCwgY2hhciAqbXNnKQoreworCWVudW0gcGFnZV9jYWNoZV9tb2RlIGNhY2hlOworCWNoYXIgKmNhY2hlX21vZGU7CisKKwlzd2l0Y2ggKHBhdF92YWwpIHsKKwljYXNlIFBBVF9VQzogICAgICAgY2FjaGUgPSBDTShVQyk7ICAgICAgIGNhY2hlX21vZGUgPSAiVUMgICI7IGJyZWFrOworCWNhc2UgUEFUX1dDOiAgICAgICBjYWNoZSA9IENNKFdDKTsgICAgICAgY2FjaGVfbW9kZSA9ICJXQyAgIjsgYnJlYWs7CisJY2FzZSBQQVRfV1Q6ICAgICAgIGNhY2hlID0gQ00oV1QpOyAgICAgICBjYWNoZV9tb2RlID0gIldUICAiOyBicmVhazsKKwljYXNlIFBBVF9XUDogICAgICAgY2FjaGUgPSBDTShXUCk7ICAgICAgIGNhY2hlX21vZGUgPSAiV1AgICI7IGJyZWFrOworCWNhc2UgUEFUX1dCOiAgICAgICBjYWNoZSA9IENNKFdCKTsgICAgICAgY2FjaGVfbW9kZSA9ICJXQiAgIjsgYnJlYWs7CisJY2FzZSBQQVRfVUNfTUlOVVM6IGNhY2hlID0gQ00oVUNfTUlOVVMpOyBjYWNoZV9tb2RlID0gIlVDLSAiOyBicmVhazsKKwlkZWZhdWx0OiAgICAgICAgICAgY2FjaGUgPSBDTShXQik7ICAgICAgIGNhY2hlX21vZGUgPSAiV0IgICI7IGJyZWFrOworCX0KKworCW1lbWNweShtc2csIGNhY2hlX21vZGUsIDQpOworCisJcmV0dXJuIGNhY2hlOworfQorCisjdW5kZWYgQ00KKworLyoKKyAqIFVwZGF0ZSB0aGUgY2FjaGUgbW9kZSB0byBwZ3Byb3QgdHJhbnNsYXRpb24gdGFibGVzIGFjY29yZGluZyB0byBQQVQKKyAqIGNvbmZpZ3VyYXRpb24uCisgKiBVc2luZyBsb3dlciBpbmRpY2VzIGlzIHByZWZlcnJlZCwgc28gd2Ugc3RhcnQgd2l0aCBoaWdoZXN0IGluZGV4LgorICovCit2b2lkIHBhdF9pbml0X2NhY2hlX21vZGVzKHZvaWQpCit7CisJaW50IGk7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgY2FjaGU7CisJY2hhciBwYXRfbXNnWzMzXTsKKwl1NjQgcGF0OworCisJcmRtc3JsKE1TUl9JQTMyX0NSX1BBVCwgcGF0KTsKKwlwYXRfbXNnWzMyXSA9IDA7CisJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJY2FjaGUgPSBwYXRfZ2V0X2NhY2hlX21vZGUoKHBhdCA+PiAoaSAqIDgpKSAmIDcsCisJCQkJCSAgIHBhdF9tc2cgKyA0ICogaSk7CisJCXVwZGF0ZV9jYWNoZV9tb2RlX2VudHJ5KGksIGNhY2hlKTsKKwl9CisJcHJfaW5mbygiUEFUIGNvbmZpZ3VyYXRpb24gWzAtN106ICVzXG4iLCBwYXRfbXNnKTsKK30KKwogI2RlZmluZSBQQVQoeCwgeSkJKCh1NjQpUEFUXyAjIyB5IDw8ICgoeCkqOCkpCiAKIHZvaWQgcGF0X2luaXQodm9pZCkKQEAgLTEyNCw4ICsyNDAsNyBAQAogCXdybXNybChNU1JfSUEzMl9DUl9QQVQsIHBhdCk7CiAKIAlpZiAoYm9vdF9jcHUpCi0JCXByaW50ayhLRVJOX0lORk8gIng4NiBQQVQgZW5hYmxlZDogY3B1ICVkLCBvbGQgMHglTHgsIG5ldyAweCVMeFxuIiwKLQkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgYm9vdF9wYXRfc3RhdGUsIHBhdCk7CisJCXBhdF9pbml0X2NhY2hlX21vZGVzKCk7CiB9CiAKICN1bmRlZiBQQVQKQEAgLTEzOSwyMCArMjU0LDIxIEBACiAgKiBUaGUgaW50ZXJzZWN0aW9uIGlzIGJhc2VkIG9uICJFZmZlY3RpdmUgTWVtb3J5IFR5cGUiIHRhYmxlcyBpbiBJQS0zMgogICogU0RNIHZvbCAzYQogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYXRfeF9tdHJyX3R5cGUodTY0IHN0YXJ0LCB1NjQgZW5kLCB1bnNpZ25lZCBsb25nIHJlcV90eXBlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcGF0X3hfbXRycl90eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwKKwkJCQkgICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlIHJlcV90eXBlKQogewogCS8qCiAJICogTG9vayBmb3IgTVRSUiBoaW50IHRvIGdldCB0aGUgZWZmZWN0aXZlIHR5cGUgaW4gY2FzZSB3aGVyZSBQQVQKIAkgKiByZXF1ZXN0IGlzIGZvciBXQi4KIAkgKi8KLQlpZiAocmVxX3R5cGUgPT0gX1BBR0VfQ0FDSEVfV0IpIHsKKwlpZiAocmVxX3R5cGUgPT0gX1BBR0VfQ0FDSEVfTU9ERV9XQikgewogCQl1OCBtdHJyX3R5cGU7CiAKIAkJbXRycl90eXBlID0gbXRycl90eXBlX2xvb2t1cChzdGFydCwgZW5kKTsKIAkJaWYgKG10cnJfdHlwZSAhPSBNVFJSX1RZUEVfV1JCQUNLKQotCQkJcmV0dXJuIF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCQkJcmV0dXJuIF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAKLQkJcmV0dXJuIF9QQUdFX0NBQ0hFX1dCOworCQlyZXR1cm4gX1BBR0VfQ0FDSEVfTU9ERV9XQjsKIAl9CiAKIAlyZXR1cm4gcmVxX3R5cGU7CkBAIC0yMDcsMjUgKzMyMywyNiBAQAogICogLSBGaW5kIHRoZSBtZW10eXBlIG9mIGFsbCB0aGUgcGFnZXMgaW4gdGhlIHJhbmdlLCBsb29rIGZvciBhbnkgY29uZmxpY3RzCiAgKiAtIEluIGNhc2Ugb2Ygbm8gY29uZmxpY3RzLCBzZXQgdGhlIG5ldyBtZW10eXBlIGZvciBwYWdlcyBpbiB0aGUgcmFuZ2UKICAqLwotc3RhdGljIGludCByZXNlcnZlX3JhbV9wYWdlc190eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwgdW5zaWduZWQgbG9uZyByZXFfdHlwZSwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgKm5ld190eXBlKQorc3RhdGljIGludCByZXNlcnZlX3JhbV9wYWdlc190eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwKKwkJCQkgIGVudW0gcGFnZV9jYWNoZV9tb2RlIHJlcV90eXBlLAorCQkJCSAgZW51bSBwYWdlX2NhY2hlX21vZGUgKm5ld190eXBlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXU2NCBwZm47CiAKLQlpZiAocmVxX3R5cGUgPT0gX1BBR0VfQ0FDSEVfVUMpIHsKKwlpZiAocmVxX3R5cGUgPT0gX1BBR0VfQ0FDSEVfTU9ERV9VQykgewogCQkvKiBXZSBkbyBub3Qgc3VwcG9ydCBzdHJvbmcgVUMgKi8KIAkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXFfdHlwZSA9IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCQlyZXFfdHlwZSA9IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAJfQogCiAJZm9yIChwZm4gPSAoc3RhcnQgPj4gUEFHRV9TSElGVCk7IHBmbiA8IChlbmQgPj4gUEFHRV9TSElGVCk7ICsrcGZuKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdHlwZTsKKwkJZW51bSBwYWdlX2NhY2hlX21vZGUgdHlwZTsKIAogCQlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAkJdHlwZSA9IGdldF9wYWdlX21lbXR5cGUocGFnZSk7CiAJCWlmICh0eXBlICE9IC0xKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJyZXNlcnZlX3JhbV9wYWdlc190eXBlIGZhaWxlZCBbbWVtICUjMDEwTHgtJSMwMTBMeF0sIHRyYWNrIDB4JWx4LCByZXEgMHglbHhcbiIsCisJCQlwcl9pbmZvKCJyZXNlcnZlX3JhbV9wYWdlc190eXBlIGZhaWxlZCBbbWVtICUjMDEwTHgtJSMwMTBMeF0sIHRyYWNrIDB4JXgsIHJlcSAweCV4XG4iLAogCQkJCXN0YXJ0LCBlbmQgLSAxLCB0eXBlLCByZXFfdHlwZSk7CiAJCQlpZiAobmV3X3R5cGUpCiAJCQkJKm5ld190eXBlID0gdHlwZTsKQEAgLTI1OCwyMSArMzc1LDIxIEBACiAKIC8qCiAgKiByZXFfdHlwZSB0eXBpY2FsbHkgaGFzIG9uZSBvZiB0aGU6Ci0gKiAtIF9QQUdFX0NBQ0hFX1dCCi0gKiAtIF9QQUdFX0NBQ0hFX1dDCi0gKiAtIF9QQUdFX0NBQ0hFX1VDX01JTlVTCi0gKiAtIF9QQUdFX0NBQ0hFX1VDCisgKiAtIF9QQUdFX0NBQ0hFX01PREVfV0IKKyAqIC0gX1BBR0VfQ0FDSEVfTU9ERV9XQworICogLSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTCisgKiAtIF9QQUdFX0NBQ0hFX01PREVfVUMKICAqCiAgKiBJZiBuZXdfdHlwZSBpcyBOVUxMLCBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBlcnJvciBpZiBpdCBjYW5ub3QgcmVzZXJ2ZSB0aGUKICAqIHJlZ2lvbiB3aXRoIHJlcV90eXBlLiBJZiBuZXdfdHlwZSBpcyBub24tTlVMTCwgZnVuY3Rpb24gd2lsbCByZXR1cm4KICAqIGF2YWlsYWJsZSB0eXBlIGluIG5ld190eXBlIGluIGNhc2Ugb2Ygbm8gZXJyb3IuIEluIGNhc2Ugb2YgYW55IGVycm9yCiAgKiBpdCB3aWxsIHJldHVybiBhIG5lZ2F0aXZlIHJldHVybiB2YWx1ZS4KICAqLwotaW50IHJlc2VydmVfbWVtdHlwZSh1NjQgc3RhcnQsIHU2NCBlbmQsIHVuc2lnbmVkIGxvbmcgcmVxX3R5cGUsCi0JCSAgICB1bnNpZ25lZCBsb25nICpuZXdfdHlwZSkKK2ludCByZXNlcnZlX21lbXR5cGUodTY0IHN0YXJ0LCB1NjQgZW5kLCBlbnVtIHBhZ2VfY2FjaGVfbW9kZSByZXFfdHlwZSwKKwkJICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlICpuZXdfdHlwZSkKIHsKIAlzdHJ1Y3QgbWVtdHlwZSAqbmV3OwotCXVuc2lnbmVkIGxvbmcgYWN0dWFsX3R5cGU7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgYWN0dWFsX3R5cGU7CiAJaW50IGlzX3JhbmdlX3JhbTsKIAlpbnQgZXJyID0gMDsKIApAQCAtMjgxLDEwICszOTgsMTAgQEAKIAlpZiAoIXBhdF9lbmFibGVkKSB7CiAJCS8qIFRoaXMgaXMgaWRlbnRpY2FsIHRvIHBhZ2UgdGFibGUgc2V0dGluZyB3aXRob3V0IFBBVCAqLwogCQlpZiAobmV3X3R5cGUpIHsKLQkJCWlmIChyZXFfdHlwZSA9PSBfUEFHRV9DQUNIRV9XQykKLQkJCQkqbmV3X3R5cGUgPSBfUEFHRV9DQUNIRV9VQ19NSU5VUzsKKwkJCWlmIChyZXFfdHlwZSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dDKQorCQkJCSpuZXdfdHlwZSA9IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAJCQllbHNlCi0JCQkJKm5ld190eXBlID0gcmVxX3R5cGUgJiBfUEFHRV9DQUNIRV9NQVNLOworCQkJCSpuZXdfdHlwZSA9IHJlcV90eXBlOwogCQl9CiAJCXJldHVybiAwOwogCX0KQEAgLTI5Miw3ICs0MDksNyBAQAogCS8qIExvdyBJU0EgcmVnaW9uIGlzIGFsd2F5cyBtYXBwZWQgV0IgaW4gcGFnZSB0YWJsZS4gTm8gbmVlZCB0byB0cmFjayAqLwogCWlmICh4ODZfcGxhdGZvcm0uaXNfdW50cmFja2VkX3BhdF9yYW5nZShzdGFydCwgZW5kKSkgewogCQlpZiAobmV3X3R5cGUpCi0JCQkqbmV3X3R5cGUgPSBfUEFHRV9DQUNIRV9XQjsKKwkJCSpuZXdfdHlwZSA9IF9QQUdFX0NBQ0hFX01PREVfV0I7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzAyLDcgKzQxOSw3IEBACiAJICogdG9vbHMgYW5kIEFDUEkgdG9vbHMpLiBVc2UgV0IgcmVxdWVzdCBmb3IgV0IgbWVtb3J5IGFuZCB1c2UKIAkgKiBVQ19NSU5VUyBvdGhlcndpc2UuCiAJICovCi0JYWN0dWFsX3R5cGUgPSBwYXRfeF9tdHJyX3R5cGUoc3RhcnQsIGVuZCwgcmVxX3R5cGUgJiBfUEFHRV9DQUNIRV9NQVNLKTsKKwlhY3R1YWxfdHlwZSA9IHBhdF94X210cnJfdHlwZShzdGFydCwgZW5kLCByZXFfdHlwZSk7CiAKIAlpZiAobmV3X3R5cGUpCiAJCSpuZXdfdHlwZSA9IGFjdHVhbF90eXBlOwpAQCAtMzk0LDEyICs1MTEsMTIgQEAKICAqCiAgKiBPbmx5IHRvIGJlIGNhbGxlZCB3aGVuIFBBVCBpcyBlbmFibGVkCiAgKgotICogUmV0dXJucyBfUEFHRV9DQUNIRV9XQiwgX1BBR0VfQ0FDSEVfV0MsIF9QQUdFX0NBQ0hFX1VDX01JTlVTIG9yCi0gKiBfUEFHRV9DQUNIRV9VQworICogUmV0dXJucyBfUEFHRV9DQUNIRV9NT0RFX1dCLCBfUEFHRV9DQUNIRV9NT0RFX1dDLCBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTCisgKiBvciBfUEFHRV9DQUNIRV9NT0RFX1VDCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvb2t1cF9tZW10eXBlKHU2NCBwYWRkcikKK3N0YXRpYyBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBsb29rdXBfbWVtdHlwZSh1NjQgcGFkZHIpCiB7Ci0JaW50IHJldHR5cGUgPSBfUEFHRV9DQUNIRV9XQjsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSByZXR0eXBlID0gX1BBR0VfQ0FDSEVfTU9ERV9XQjsKIAlzdHJ1Y3QgbWVtdHlwZSAqZW50cnk7CiAKIAlpZiAoeDg2X3BsYXRmb3JtLmlzX3VudHJhY2tlZF9wYXRfcmFuZ2UocGFkZHIsIHBhZGRyICsgUEFHRV9TSVpFKSkKQEAgLTQxNCw3ICs1MzEsNyBAQAogCQkgKiBkZWZhdWx0IHN0YXRlIGFuZCBub3QgcmVzZXJ2ZWQsIGFuZCBoZW5jZSBvZiB0eXBlIFdCCiAJCSAqLwogCQlpZiAocmV0dHlwZSA9PSAtMSkKLQkJCXJldHR5cGUgPSBfUEFHRV9DQUNIRV9XQjsKKwkJCXJldHR5cGUgPSBfUEFHRV9DQUNIRV9NT0RFX1dCOwogCiAJCXJldHVybiByZXR0eXBlOwogCX0KQEAgLTQyNSw3ICs1NDIsNyBAQAogCWlmIChlbnRyeSAhPSBOVUxMKQogCQlyZXR0eXBlID0gZW50cnktPnR5cGU7CiAJZWxzZQotCQlyZXR0eXBlID0gX1BBR0VfQ0FDSEVfVUNfTUlOVVM7CisJCXJldHR5cGUgPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOwogCiAJc3Bpbl91bmxvY2soJm1lbXR5cGVfbG9jayk7CiAJcmV0dXJuIHJldHR5cGU7CkBAIC00NDIsMTEgKzU1OSwxMSBAQAogICogT24gZmFpbHVyZSwgcmV0dXJucyBub24temVybwogICovCiBpbnQgaW9fcmVzZXJ2ZV9tZW10eXBlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IGVuZCwKLQkJCXVuc2lnbmVkIGxvbmcgKnR5cGUpCisJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSAqdHlwZSkKIHsKIAlyZXNvdXJjZV9zaXplX3Qgc2l6ZSA9IGVuZCAtIHN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgcmVxX3R5cGUgPSAqdHlwZTsKLQl1bnNpZ25lZCBsb25nIG5ld190eXBlOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIHJlcV90eXBlID0gKnR5cGU7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgbmV3X3R5cGU7CiAJaW50IHJldDsKIAogCVdBUk5fT05fT05DRShpb21lbV9tYXBfc2FuaXR5X2NoZWNrKHN0YXJ0LCBzaXplKSk7CkBAIC01MjAsMTMgKzYzNywxMyBAQAogaW50IHBoeXNfbWVtX2FjY2Vzc19wcm90X2FsbG93ZWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnZtYV9wcm90KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBfUEFHRV9DQUNIRV9XQjsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY20gPSBfUEFHRV9DQUNIRV9NT0RFX1dCOwogCiAJaWYgKCFyYW5nZV9pc19hbGxvd2VkKHBmbiwgc2l6ZSkpCiAJCXJldHVybiAwOwogCiAJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0RTWU5DKQotCQlmbGFncyA9IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCQlwY20gPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCS8qCkBAIC01NDMsMTIgKzY2MCwxMiBAQAogCSAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWVJJWF9BUlIpIHx8CiAJICAgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSKSkgJiYKIAkgICAgKHBmbiA8PCBQQUdFX1NISUZUKSA+PSBfX3BhKGhpZ2hfbWVtb3J5KSkgewotCQlmbGFncyA9IF9QQUdFX0NBQ0hFX1VDOworCQlwY20gPSBfUEFHRV9DQUNIRV9NT0RFX1VDOwogCX0KICNlbmRpZgogCiAJKnZtYV9wcm90ID0gX19wZ3Byb3QoKHBncHJvdF92YWwoKnZtYV9wcm90KSAmIH5fUEFHRV9DQUNIRV9NQVNLKSB8Ci0JCQkgICAgIGZsYWdzKTsKKwkJCSAgICAgY2FjaGVtb2RlMnByb3R2YWwocGNtKSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTU1Niw3ICs2NzMsOCBAQAogICogQ2hhbmdlIHRoZSBtZW1vcnkgdHlwZSBmb3IgdGhlIHBoeXNpYWwgYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgaWRlbnRpdHkKICAqIG1hcHBpbmcgc3BhY2UgaWYgdGhhdCByYW5nZSBpcyBhIHBhcnQgb2YgaWRlbnRpdHkgbWFwLgogICovCi1pbnQga2VybmVsX21hcF9zeW5jX21lbXR5cGUodTY0IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK2ludCBrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZSh1NjQgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSkKIHsKIAl1bnNpZ25lZCBsb25nIGlkX3N6OwogCkBAIC01NzQsMTEgKzY5MiwxMSBAQAogCQkJCV9fcGEoaGlnaF9tZW1vcnkpIC0gYmFzZSA6CiAJCQkJc2l6ZTsKIAotCWlmIChpb3JlbWFwX2NoYW5nZV9hdHRyKCh1bnNpZ25lZCBsb25nKV9fdmEoYmFzZSksIGlkX3N6LCBmbGFncykgPCAwKSB7CisJaWYgKGlvcmVtYXBfY2hhbmdlX2F0dHIoKHVuc2lnbmVkIGxvbmcpX192YShiYXNlKSwgaWRfc3osIHBjbSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiVkIGlvcmVtYXBfY2hhbmdlX2F0dHIgZmFpbGVkICVzICIKIAkJCSJmb3IgW21lbSAlIzAxMEx4LSUjMDEwTHhdXG4iLAogCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAotCQkJY2F0dHJfbmFtZShmbGFncyksCisJCQljYXR0cl9uYW1lKHBjbSksCiAJCQliYXNlLCAodW5zaWduZWQgbG9uZyBsb25nKShiYXNlICsgc2l6ZS0xKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU5NSw4ICs3MTMsOCBAQAogewogCWludCBpc19yYW0gPSAwOwogCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyB3YW50X2ZsYWdzID0gKHBncHJvdF92YWwoKnZtYV9wcm90KSAmIF9QQUdFX0NBQ0hFX01BU0spOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSB3YW50X2ZsYWdzOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIHdhbnRfcGNtID0gcGdwcm90MmNhY2hlbW9kZSgqdm1hX3Byb3QpOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSA9IHdhbnRfcGNtOwogCiAJaXNfcmFtID0gcGF0X3BhZ2VyYW5nZV9pc19yYW0ocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAKQEAgLTYwOSwzNiArNzI3LDM2IEBACiAJCWlmICghcGF0X2VuYWJsZWQpCiAJCQlyZXR1cm4gMDsKIAotCQlmbGFncyA9IGxvb2t1cF9tZW10eXBlKHBhZGRyKTsKLQkJaWYgKHdhbnRfZmxhZ3MgIT0gZmxhZ3MpIHsKKwkJcGNtID0gbG9va3VwX21lbXR5cGUocGFkZHIpOworCQlpZiAod2FudF9wY20gIT0gcGNtKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczolZCBtYXAgcGZuIFJBTSByYW5nZSByZXEgJXMgZm9yIFttZW0gJSMwMTBMeC0lIzAxMEx4XSwgZ290ICVzXG4iLAogCQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKLQkJCQljYXR0cl9uYW1lKHdhbnRfZmxhZ3MpLAorCQkJCWNhdHRyX25hbWUod2FudF9wY20pLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGFkZHIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykocGFkZHIgKyBzaXplIC0gMSksCi0JCQkJY2F0dHJfbmFtZShmbGFncykpOworCQkJCWNhdHRyX25hbWUocGNtKSk7CiAJCQkqdm1hX3Byb3QgPSBfX3BncHJvdCgocGdwcm90X3ZhbCgqdm1hX3Byb3QpICYKLQkJCQkJICAgICAgKH5fUEFHRV9DQUNIRV9NQVNLKSkgfAotCQkJCQkgICAgIGZsYWdzKTsKKwkJCQkJICAgICAofl9QQUdFX0NBQ0hFX01BU0spKSB8CisJCQkJCSAgICAgY2FjaGVtb2RlMnByb3R2YWwocGNtKSk7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0ID0gcmVzZXJ2ZV9tZW10eXBlKHBhZGRyLCBwYWRkciArIHNpemUsIHdhbnRfZmxhZ3MsICZmbGFncyk7CisJcmV0ID0gcmVzZXJ2ZV9tZW10eXBlKHBhZGRyLCBwYWRkciArIHNpemUsIHdhbnRfcGNtLCAmcGNtKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKGZsYWdzICE9IHdhbnRfZmxhZ3MpIHsKKwlpZiAocGNtICE9IHdhbnRfcGNtKSB7CiAJCWlmIChzdHJpY3RfcHJvdCB8fAotCQkgICAgIWlzX25ld19tZW10eXBlX2FsbG93ZWQocGFkZHIsIHNpemUsIHdhbnRfZmxhZ3MsIGZsYWdzKSkgeworCQkgICAgIWlzX25ld19tZW10eXBlX2FsbG93ZWQocGFkZHIsIHNpemUsIHdhbnRfcGNtLCBwY20pKSB7CiAJCQlmcmVlX21lbXR5cGUocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiVkIG1hcCBwZm4gZXhwZWN0ZWQgbWFwcGluZyB0eXBlICVzIgogCQkJCSIgZm9yIFttZW0gJSMwMTBMeC0lIzAxMEx4XSwgZ290ICVzXG4iLAogCQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKLQkJCQljYXR0cl9uYW1lKHdhbnRfZmxhZ3MpLAorCQkJCWNhdHRyX25hbWUod2FudF9wY20pLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGFkZHIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykocGFkZHIgKyBzaXplIC0gMSksCi0JCQkJY2F0dHJfbmFtZShmbGFncykpOworCQkJCWNhdHRyX25hbWUocGNtKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKgpAQCAtNjQ3LDEwICs3NjUsMTAgQEAKIAkJICovCiAJCSp2bWFfcHJvdCA9IF9fcGdwcm90KChwZ3Byb3RfdmFsKCp2bWFfcHJvdCkgJgogCQkJCSAgICAgICh+X1BBR0VfQ0FDSEVfTUFTSykpIHwKLQkJCQkgICAgIGZsYWdzKTsKKwkJCQkgICAgIGNhY2hlbW9kZTJwcm90dmFsKHBjbSkpOwogCX0KIAotCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwYWRkciwgc2l6ZSwgZmxhZ3MpIDwgMCkgeworCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwYWRkciwgc2l6ZSwgcGNtKSA8IDApIHsKIAkJZnJlZV9tZW10eXBlKHBhZGRyLCBwYWRkciArIHNpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03MDksNyArODI3LDcgQEAKIAkJICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXNvdXJjZV9zaXplX3QgcGFkZHIgPSAocmVzb3VyY2Vfc2l6ZV90KXBmbiA8PCBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtOwogCiAJLyogcmVzZXJ2ZSB0aGUgd2hvbGUgY2h1bmsgc3RhcnRpbmcgZnJvbSBwYWRkciAqLwogCWlmIChhZGRyID09IHZtYS0+dm1fc3RhcnQgJiYgc2l6ZSA9PSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSkgewpAQCAtNzI4LDE4ICs4NDYsMTggQEAKIAkgKiBGb3IgYW55dGhpbmcgc21hbGxlciB0aGFuIHRoZSB2bWEgc2l6ZSB3ZSBzZXQgcHJvdCBiYXNlZCBvbiB0aGUKIAkgKiBsb29rdXAuCiAJICovCi0JZmxhZ3MgPSBsb29rdXBfbWVtdHlwZShwYWRkcik7CisJcGNtID0gbG9va3VwX21lbXR5cGUocGFkZHIpOwogCiAJLyogQ2hlY2sgbWVtdHlwZSBmb3IgdGhlIHJlbWFpbmluZyBwYWdlcyAqLwogCXdoaWxlIChzaXplID4gUEFHRV9TSVpFKSB7CiAJCXNpemUgLT0gUEFHRV9TSVpFOwogCQlwYWRkciArPSBQQUdFX1NJWkU7Ci0JCWlmIChmbGFncyAhPSBsb29rdXBfbWVtdHlwZShwYWRkcikpCisJCWlmIChwY20gIT0gbG9va3VwX21lbXR5cGUocGFkZHIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJKnByb3QgPSBfX3BncHJvdCgocGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJiAofl9QQUdFX0NBQ0hFX01BU0spKSB8Ci0JCQkgZmxhZ3MpOworCQkJIGNhY2hlbW9kZTJwcm90dmFsKHBjbSkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDcsMTUgKzg2NSwxNSBAQAogaW50IHRyYWNrX3Bmbl9pbnNlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90ICpwcm90LAogCQkgICAgIHVuc2lnbmVkIGxvbmcgcGZuKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtOwogCiAJaWYgKCFwYXRfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBTZXQgcHJvdCBiYXNlZCBvbiBsb29rdXAgKi8KLQlmbGFncyA9IGxvb2t1cF9tZW10eXBlKChyZXNvdXJjZV9zaXplX3QpcGZuIDw8IFBBR0VfU0hJRlQpOworCXBjbSA9IGxvb2t1cF9tZW10eXBlKChyZXNvdXJjZV9zaXplX3QpcGZuIDw8IFBBR0VfU0hJRlQpOwogCSpwcm90ID0gX19wZ3Byb3QoKHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICYgKH5fUEFHRV9DQUNIRV9NQVNLKSkgfAotCQkJIGZsYWdzKTsKKwkJCSBjYWNoZW1vZGUycHJvdHZhbChwY20pKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzkxLDcgKzkwOSw4IEBACiBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpCiB7CiAJaWYgKHBhdF9lbmFibGVkKQotCQlyZXR1cm4gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX0NBQ0hFX1dDKTsKKwkJcmV0dXJuIF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfAorCQkJCWNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfV0MpKTsKIAllbHNlCiAJCXJldHVybiBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpOwogfQpAQCAtODI0LDcgKzk0Myw3IEBACiB7CiAJaWYgKCpwb3MgPT0gMCkgewogCQkrKypwb3M7Ci0JCXNlcV9wcmludGYoc2VxLCAiUEFUIG1lbXR5cGUgbGlzdDpcbiIpOworCQlzZXFfcHV0cyhzZXEsICJQQVQgbWVtdHlwZSBsaXN0OlxuIik7CiAJfQogCiAJcmV0dXJuIG1lbXR5cGVfZ2V0X2lkeCgqcG9zKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdF9pbnRlcm5hbC5oIGIvYXJjaC94ODYvbW0vcGF0X2ludGVybmFsLmgKaW5kZXggNzdlNWJhMS4uZjY0MTE2MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0X2ludGVybmFsLmgKKysrIGIvYXJjaC94ODYvbW0vcGF0X2ludGVybmFsLmgKQEAgLTEwLDMwICsxMCwzMiBAQAogCXU2NAkJCXN0YXJ0OwogCXU2NAkJCWVuZDsKIAl1NjQJCQlzdWJ0cmVlX21heF9lbmQ7Ci0JdW5zaWduZWQgbG9uZwkJdHlwZTsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZQl0eXBlOwogCXN0cnVjdCByYl9ub2RlCQlyYjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgY2hhciAqY2F0dHJfbmFtZSh1bnNpZ25lZCBsb25nIGZsYWdzKQorc3RhdGljIGlubGluZSBjaGFyICpjYXR0cl9uYW1lKGVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSkKIHsKLQlzd2l0Y2ggKGZsYWdzICYgX1BBR0VfQ0FDSEVfTUFTSykgewotCWNhc2UgX1BBR0VfQ0FDSEVfVUM6CQlyZXR1cm4gInVuY2FjaGVkIjsKLQljYXNlIF9QQUdFX0NBQ0hFX1VDX01JTlVTOglyZXR1cm4gInVuY2FjaGVkLW1pbnVzIjsKLQljYXNlIF9QQUdFX0NBQ0hFX1dCOgkJcmV0dXJuICJ3cml0ZS1iYWNrIjsKLQljYXNlIF9QQUdFX0NBQ0hFX1dDOgkJcmV0dXJuICJ3cml0ZS1jb21iaW5pbmciOwotCWRlZmF1bHQ6CQkJcmV0dXJuICJicm9rZW4iOworCXN3aXRjaCAocGNtKSB7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1VDOgkJcmV0dXJuICJ1bmNhY2hlZCI7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOgkJcmV0dXJuICJ1bmNhY2hlZC1taW51cyI7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dCOgkJcmV0dXJuICJ3cml0ZS1iYWNrIjsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfV0M6CQlyZXR1cm4gIndyaXRlLWNvbWJpbmluZyI7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dUOgkJcmV0dXJuICJ3cml0ZS10aHJvdWdoIjsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfV1A6CQlyZXR1cm4gIndyaXRlLXByb3RlY3RlZCI7CisJZGVmYXVsdDoJCQkJcmV0dXJuICJicm9rZW4iOwogCX0KIH0KIAogI2lmZGVmIENPTkZJR19YODZfUEFUCiBleHRlcm4gaW50IHJidF9tZW10eXBlX2NoZWNrX2luc2VydChzdHJ1Y3QgbWVtdHlwZSAqbmV3LAotCQkJCQl1bnNpZ25lZCBsb25nICpuZXdfdHlwZSk7CisJCQkJCWVudW0gcGFnZV9jYWNoZV9tb2RlICpuZXdfdHlwZSk7CiBleHRlcm4gc3RydWN0IG1lbXR5cGUgKnJidF9tZW10eXBlX2VyYXNlKHU2NCBzdGFydCwgdTY0IGVuZCk7CiBleHRlcm4gc3RydWN0IG1lbXR5cGUgKnJidF9tZW10eXBlX2xvb2t1cCh1NjQgYWRkcik7CiBleHRlcm4gaW50IHJidF9tZW10eXBlX2NvcHlfbnRoX2VsZW1lbnQoc3RydWN0IG1lbXR5cGUgKm91dCwgbG9mZl90IHBvcyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgcmJ0X21lbXR5cGVfY2hlY2tfaW5zZXJ0KHN0cnVjdCBtZW10eXBlICpuZXcsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKm5ld190eXBlKQorCQkJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSAqbmV3X3R5cGUpCiB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW10eXBlICpyYnRfbWVtdHlwZV9lcmFzZSh1NjQgc3RhcnQsIHU2NCBlbmQpCiB7IHJldHVybiBOVUxMOyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXRfcmJ0cmVlLmMgYi9hcmNoL3g4Ni9tbS9wYXRfcmJ0cmVlLmMKaW5kZXggNDE1ZjZjNC4uNjU4MmFkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0X3JidHJlZS5jCisrKyBiL2FyY2gveDg2L21tL3BhdF9yYnRyZWUuYwpAQCAtMTIyLDExICsxMjIsMTIgQEAKIAogc3RhdGljIGludCBtZW10eXBlX3JiX2NoZWNrX2NvbmZsaWN0KHN0cnVjdCByYl9yb290ICpyb290LAogCQkJCXU2NCBzdGFydCwgdTY0IGVuZCwKLQkJCQl1bnNpZ25lZCBsb25nIHJlcXR5cGUsIHVuc2lnbmVkIGxvbmcgKm5ld3R5cGUpCisJCQkJZW51bSBwYWdlX2NhY2hlX21vZGUgcmVxdHlwZSwKKwkJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSAqbmV3dHlwZSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgbWVtdHlwZSAqbWF0Y2g7Ci0JaW50IGZvdW5kX3R5cGUgPSByZXF0eXBlOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIGZvdW5kX3R5cGUgPSByZXF0eXBlOwogCiAJbWF0Y2ggPSBtZW10eXBlX3JiX2xvd2VzdF9tYXRjaCgmbWVtdHlwZV9yYnJvb3QsIHN0YXJ0LCBlbmQpOwogCWlmIChtYXRjaCA9PSBOVUxMKQpAQCAtMTg3LDcgKzE4OCw4IEBACiAJcmJfaW5zZXJ0X2F1Z21lbnRlZCgmbmV3ZGF0YS0+cmIsIHJvb3QsICZtZW10eXBlX3JiX2F1Z21lbnRfY2IpOwogfQogCi1pbnQgcmJ0X21lbXR5cGVfY2hlY2tfaW5zZXJ0KHN0cnVjdCBtZW10eXBlICpuZXcsIHVuc2lnbmVkIGxvbmcgKnJldF90eXBlKQoraW50IHJidF9tZW10eXBlX2NoZWNrX2luc2VydChzdHJ1Y3QgbWVtdHlwZSAqbmV3LAorCQkJICAgICBlbnVtIHBhZ2VfY2FjaGVfbW9kZSAqcmV0X3R5cGUpCiB7CiAJaW50IGVyciA9IDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IDM3YzE0MzUuLjliMThlZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtNDMzLDE0ICs0MzMsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocGF0X2VuYWJsZWQgJiYgd3JpdGVfY29tYmluZSkKLQkJcHJvdCB8PSBfUEFHRV9DQUNIRV9XQzsKKwkJcHJvdCB8PSBjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1dDKTsKIAllbHNlIGlmIChwYXRfZW5hYmxlZCB8fCBib290X2NwdV9kYXRhLng4NiA+IDMpCiAJCS8qCiAJCSAqIGlvcmVtYXAoKSBhbmQgaW9yZW1hcF9ub2NhY2hlKCkgZGVmYXVsdHMgdG8gVUMgTUlOVVMgZm9yIG5vdy4KIAkJICogVG8gYXZvaWQgYXR0cmlidXRlIGNvbmZsaWN0cywgcmVxdWVzdCBVQyBNSU5VUyBoZXJlCiAJCSAqIGFzIHdlbGwuCiAJCSAqLwotCQlwcm90IHw9IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCQlwcm90IHw9IGNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpOwogCiAJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdChwcm90KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL251bWFjaGlwLmMgYi9hcmNoL3g4Ni9wY2kvbnVtYWNoaXAuYwppbmRleCA3MzA3ZDlkLi4yZTU2NWU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbnVtYWNoaXAuYworKysgYi9hcmNoL3g4Ni9wY2kvbnVtYWNoaXAuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0cnVjdCBwY2lfcmF3X29wcyBwY2lfbW1jZmdfbnVtYWNoaXAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9yYXdfb3BzIHBjaV9tbWNmZ19udW1hY2hpcCA9IHsKIAkucmVhZCA9IHBjaV9tbWNmZ19yZWFkX251bWFjaGlwLAogCS53cml0ZSA9IHBjaV9tbWNmZ193cml0ZV9udW1hY2hpcCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kveGVuLmMgYi9hcmNoL3g4Ni9wY2kveGVuLmMKaW5kZXggMDkzZjVmNC4uMTgxOWE5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL3hlbi5jCisrKyBiL2FyY2gveDg2L3BjaS94ZW4uYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJCXJldHVybiAxOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtc2lkZXNjLCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewotCQlfX3JlYWRfbXNpX21zZyhtc2lkZXNjLCAmbXNnKTsKKwkJX19wY2lfcmVhZF9tc2lfbXNnKG1zaWRlc2MsICZtc2cpOwogCQlwaXJxID0gTVNJX0FERFJfRVhUX0RFU1RfSUQobXNnLmFkZHJlc3NfaGkpIHwKIAkJCSgobXNnLmFkZHJlc3NfbG8gPj4gTVNJX0FERFJfREVTVF9JRF9TSElGVCkgJiAweGZmKTsKIAkJaWYgKG1zZy5kYXRhICE9IFhFTl9QSVJRX01TSV9EQVRBIHx8CkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCQkJeGVuX21zaV9jb21wb3NlX21zZyhkZXYsIHBpcnEsICZtc2cpOwotCQkJX193cml0ZV9tc2lfbXNnKG1zaWRlc2MsICZtc2cpOworCQkJX19wY2lfd3JpdGVfbXNpX21zZyhtc2lkZXNjLCAmbXNnKTsKIAkJCWRldl9kYmcoJmRldi0+ZGV2LCAieGVuOiBtc2kgYm91bmQgdG8gcGlycT0lZFxuIiwgcGlycSk7CiAJCX0gZWxzZSB7CiAJCQlkZXZfZGJnKCZkZXYtPmRldiwKQEAgLTM5NCwxNCArMzk0LDcgQEAKIHsKIAl4ZW5fZGVzdHJveV9pcnEoaXJxKTsKIH0KLXN0YXRpYyB1MzIgeGVuX25vcF9tc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgdTMyIHhlbl9ub3BfbXNpeF9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBmbGFnKQotewotCXJldHVybiAwOwotfQorCiAjZW5kaWYKIAogaW50IF9faW5pdCBwY2lfeGVuX2luaXQodm9pZCkKQEAgLTQyNSw4ICs0MTgsNyBAQAogCXg4Nl9tc2kuc2V0dXBfbXNpX2lycXMgPSB4ZW5fc2V0dXBfbXNpX2lycXM7CiAJeDg2X21zaS50ZWFyZG93bl9tc2lfaXJxID0geGVuX3RlYXJkb3duX21zaV9pcnE7CiAJeDg2X21zaS50ZWFyZG93bl9tc2lfaXJxcyA9IHhlbl90ZWFyZG93bl9tc2lfaXJxczsKLQl4ODZfbXNpLm1zaV9tYXNrX2lycSA9IHhlbl9ub3BfbXNpX21hc2tfaXJxOwotCXg4Nl9tc2kubXNpeF9tYXNrX2lycSA9IHhlbl9ub3BfbXNpeF9tYXNrX2lycTsKKwlwY2lfbXNpX2lnbm9yZV9tYXNrID0gMTsKICNlbmRpZgogCXJldHVybiAwOwogfQpAQCAtNTA2LDggKzQ5OCw3IEBACiAJeDg2X21zaS5zZXR1cF9tc2lfaXJxcyA9IHhlbl9pbml0ZG9tX3NldHVwX21zaV9pcnFzOwogCXg4Nl9tc2kudGVhcmRvd25fbXNpX2lycSA9IHhlbl90ZWFyZG93bl9tc2lfaXJxOwogCXg4Nl9tc2kucmVzdG9yZV9tc2lfaXJxcyA9IHhlbl9pbml0ZG9tX3Jlc3RvcmVfbXNpX2lycXM7Ci0JeDg2X21zaS5tc2lfbWFza19pcnEgPSB4ZW5fbm9wX21zaV9tYXNrX2lycTsKLQl4ODZfbXNpLm1zaXhfbWFza19pcnEgPSB4ZW5fbm9wX21zaXhfbWFza19pcnE7CisJcGNpX21zaV9pZ25vcmVfbWFzayA9IDE7CiAjZW5kaWYKIAl4ZW5fc2V0dXBfYWNwaV9zY2koKTsKIAlfX2FjcGlfcmVnaXN0ZXJfZ3NpID0gYWNwaV9yZWdpc3Rlcl9nc2lfeGVuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jIGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jCmluZGV4IDM1YWVjYjYuLjE3ZTgwZDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYworKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMKQEAgLTQ4LDggKzQ4LDcgQEAKICAqIFdlIGFsbG9jYXRlIHJ1bnRpbWUgc2VydmljZXMgcmVnaW9ucyBib3R0b20tdXAsIHN0YXJ0aW5nIGZyb20gLTRHLCBpLmUuCiAgKiAweGZmZmZfZmZmZl8wMDAwXzAwMDAgYW5kIGxpbWl0IEVGSSBWQSBtYXBwaW5nIHNwYWNlIHRvIDY0Ry4KICAqLwotc3RhdGljIHU2NCBlZmlfdmEJPSAtNCAqICgxVUwgPDwgMzApOwotI2RlZmluZSBFRklfVkFfRU5ECSgtNjggKiAoMVVMIDw8IDMwKSkKK3N0YXRpYyB1NjQgZWZpX3ZhID0gRUZJX1ZBX1NUQVJUOwogCiAvKgogICogU2NyYXRjaCBzcGFjZSB1c2VkIGZvciBzd2l0Y2hpbmcgdGhlIHBhZ2V0YWJsZSBpbiB0aGUgRUZJIHN0dWIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jIGIvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKaW5kZXggMzk2OGQ2Ny4uOTk0Nzk4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKQEAgLTEzNjcsMjMgKzEzNjcsMjUgQEAKIAogCWNwdSA9ICoobG9mZl90ICopZGF0YTsKIAlpZiAoIWNwdSkgewotCQlzZXFfcHJpbnRmKGZpbGUsCi0JCSAiIyBjcHUgYmF1b2ZmIHNlbnQgc3RpbWUgc2VsZiBsb2NhbHMgcmVtb3RlcyBuY3B1cyBsb2NhbGh1YiAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJInJlbW90ZWh1YiBudW11dmh1YnMgbnVtdXZodWJzMTYgbnVtdXZodWJzOCAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJIm51bXV2aHViczQgbnVtdXZodWJzMiBudW11dmh1YnMxIGR0byBzbmFja3MgcmV0cmllcyAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJInJvayByZXNldHAgcmVzZXR0IGdpdmV1cCBzdG8gYnogdGhyb3QgZGlzYWJsZSAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJImVuYWJsZSB3YXJzIHdhcnNodyB3YXJ3YWl0cyBlbnRlcnMgaXBpZGlzIHBsdWdnZWQgIik7Ci0JCXNlcV9wcmludGYoZmlsZSwKLQkJCSJpcGlvdmVyIGdsaW0gY29uZyBzd2FjayByZWN2IHJ0aW1lIGFsbCBvbmUgbXVsdCAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJIm5vbmUgcmV0cnkgY2FuYyBub2NhbiByZXNldCByY2FuXG4iKTsKKwkJc2VxX3B1dHMoZmlsZSwKKwkJCSAiIyBjcHUgYmF1b2ZmIHNlbnQgc3RpbWUgc2VsZiBsb2NhbHMgcmVtb3RlcyBuY3B1cyBsb2NhbGh1YiAiKTsKKwkJc2VxX3B1dHMoZmlsZSwgInJlbW90ZWh1YiBudW11dmh1YnMgbnVtdXZodWJzMTYgbnVtdXZodWJzOCAiKTsKKwkJc2VxX3B1dHMoZmlsZSwKKwkJCSAibnVtdXZodWJzNCBudW11dmh1YnMyIG51bXV2aHViczEgZHRvIHNuYWNrcyByZXRyaWVzICIpOworCQlzZXFfcHV0cyhmaWxlLAorCQkJICJyb2sgcmVzZXRwIHJlc2V0dCBnaXZldXAgc3RvIGJ6IHRocm90IGRpc2FibGUgIik7CisJCXNlcV9wdXRzKGZpbGUsCisJCQkgImVuYWJsZSB3YXJzIHdhcnNodyB3YXJ3YWl0cyBlbnRlcnMgaXBpZGlzIHBsdWdnZWQgIik7CisJCXNlcV9wdXRzKGZpbGUsCisJCQkgImlwaW92ZXIgZ2xpbSBjb25nIHN3YWNrIHJlY3YgcnRpbWUgYWxsIG9uZSBtdWx0ICIpOworCQlzZXFfcHV0cyhmaWxlLCAibm9uZSByZXRyeSBjYW5jIG5vY2FuIHJlc2V0IHJjYW5cbiIpOwogCX0KIAlpZiAoY3B1IDwgbnVtX3Bvc3NpYmxlX2NwdXMoKSAmJiBjcHVfb25saW5lKGNwdSkpIHsKIAkJYmNwID0gJnBlcl9jcHUoYmF1X2NvbnRyb2wsIGNwdSk7CisJCWlmIChiY3AtPm5vYmF1KSB7CisJCQlzZXFfcHJpbnRmKGZpbGUsICJjcHUgJWQgYmF1IGRpc2FibGVkXG4iLCBjcHUpOworCQkJcmV0dXJuIDA7CisJCX0KIAkJc3RhdCA9IGJjcC0+c3RhdHA7CiAJCS8qIHNvdXJjZSBzaWRlIHN0YXRpc3RpY3MgKi8KIAkJc2VxX3ByaW50ZihmaWxlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcHVyZ2F0b3J5L01ha2VmaWxlIGIvYXJjaC94ODYvcHVyZ2F0b3J5L01ha2VmaWxlCmluZGV4IGY1MmUwMzMuLjJjODM1ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3B1cmdhdG9yeS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9wdXJnYXRvcnkvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDcgQEAKIAogJChvYmopL2tleGVjLXB1cmdhdG9yeS5jOiAkKG9iaikvcHVyZ2F0b3J5LnJvIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsYmluMmMpCisJQDoKIAogCiBvYmotJChDT05GSUdfS0VYRUNfRklMRSkJKz0ga2V4ZWMtcHVyZ2F0b3J5Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xzL2luc25fc2FuaXR5LmMgYi9hcmNoL3g4Ni90b29scy9pbnNuX3Nhbml0eS5jCmluZGV4IDg3MmViNjAuLmJhNzBmZjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Rvb2xzL2luc25fc2FuaXR5LmMKKysrIGIvYXJjaC94ODYvdG9vbHMvaW5zbl9zYW5pdHkuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJCQljb250aW51ZTsKIAogCQkvKiBEZWNvZGUgYW4gaW5zdHJ1Y3Rpb24gKi8KLQkJaW5zbl9pbml0KCZpbnNuLCBpbnNuX2J1ZiwgeDg2XzY0KTsKKwkJaW5zbl9pbml0KCZpbnNuLCBpbnNuX2J1Ziwgc2l6ZW9mKGluc25fYnVmKSwgeDg2XzY0KTsKIAkJaW5zbl9nZXRfbGVuZ3RoKCZpbnNuKTsKIAogCQlpZiAoaW5zbi5uZXh0X2J5dGUgPD0gaW5zbi5rYWRkciB8fApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvcmVsb2NzLmMgYi9hcmNoL3g4Ni90b29scy9yZWxvY3MuYwppbmRleCBhNWVmYjIxLi4wYzJmYWU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni90b29scy9yZWxvY3MuYworKysgYi9hcmNoL3g4Ni90b29scy9yZWxvY3MuYwpAQCAtMjAsNyArMjAsMTAgQEAKIAogc3RhdGljIHN0cnVjdCByZWxvY3MgcmVsb2NzMTY7CiBzdGF0aWMgc3RydWN0IHJlbG9jcyByZWxvY3MzMjsKKyNpZiBFTEZfQklUUyA9PSA2NAorc3RhdGljIHN0cnVjdCByZWxvY3MgcmVsb2NzMzJuZWc7CiBzdGF0aWMgc3RydWN0IHJlbG9jcyByZWxvY3M2NDsKKyNlbmRpZgogCiBzdHJ1Y3Qgc2VjdGlvbiB7CiAJRWxmX1NoZHIgICAgICAgc2hkcjsKQEAgLTc2MiwxMSArNzY1LDE2IEBACiAKIAlzd2l0Y2ggKHJfdHlwZSkgewogCWNhc2UgUl9YODZfNjRfTk9ORToKKwkJLyogTk9ORSBjYW4gYmUgaWdub3JlZC4gKi8KKwkJYnJlYWs7CisKIAljYXNlIFJfWDg2XzY0X1BDMzI6CiAJCS8qCi0JCSAqIE5PTkUgY2FuIGJlIGlnbm9yZWQgYW5kIFBDIHJlbGF0aXZlIHJlbG9jYXRpb25zIGRvbid0Ci0JCSAqIG5lZWQgdG8gYmUgYWRqdXN0ZWQuCisJCSAqIFBDIHJlbGF0aXZlIHJlbG9jYXRpb25zIGRvbid0IG5lZWQgdG8gYmUgYWRqdXN0ZWQgdW5sZXNzCisJCSAqIHJlZmVyZW5jaW5nIGEgcGVyY3B1IHN5bWJvbC4KIAkJICovCisJCWlmIChpc19wZXJjcHVfc3ltKHN5bSwgc3ltbmFtZSkpCisJCQlhZGRfcmVsb2MoJnJlbG9jczMybmVnLCBvZmZzZXQpOwogCQlicmVhazsKIAogCWNhc2UgUl9YODZfNjRfMzI6CkBAIC05ODYsNyArOTk0LDEwIEBACiAJLyogT3JkZXIgdGhlIHJlbG9jYXRpb25zIGZvciBtb3JlIGVmZmljaWVudCBwcm9jZXNzaW5nICovCiAJc29ydF9yZWxvY3MoJnJlbG9jczE2KTsKIAlzb3J0X3JlbG9jcygmcmVsb2NzMzIpOworI2lmIEVMRl9CSVRTID09IDY0CisJc29ydF9yZWxvY3MoJnJlbG9jczMybmVnKTsKIAlzb3J0X3JlbG9jcygmcmVsb2NzNjQpOworI2VuZGlmCiAKIAkvKiBQcmludCB0aGUgcmVsb2NhdGlvbnMgKi8KIAlpZiAoYXNfdGV4dCkgewpAQCAtMTAwNywxNCArMTAxOCwyMSBAQAogCQlmb3IgKGkgPSAwOyBpIDwgcmVsb2NzMzIuY291bnQ7IGkrKykKIAkJCXdyaXRlX3JlbG9jKHJlbG9jczMyLm9mZnNldFtpXSwgc3Rkb3V0KTsKIAl9IGVsc2UgewotCQlpZiAoRUxGX0JJVFMgPT0gNjQpIHsKLQkJCS8qIFByaW50IGEgc3RvcCAqLwotCQkJd3JpdGVfcmVsb2MoMCwgc3Rkb3V0KTsKKyNpZiBFTEZfQklUUyA9PSA2NAorCQkvKiBQcmludCBhIHN0b3AgKi8KKwkJd3JpdGVfcmVsb2MoMCwgc3Rkb3V0KTsKIAotCQkJLyogTm93IHByaW50IGVhY2ggcmVsb2NhdGlvbiAqLwotCQkJZm9yIChpID0gMDsgaSA8IHJlbG9jczY0LmNvdW50OyBpKyspCi0JCQkJd3JpdGVfcmVsb2MocmVsb2NzNjQub2Zmc2V0W2ldLCBzdGRvdXQpOwotCQl9CisJCS8qIE5vdyBwcmludCBlYWNoIHJlbG9jYXRpb24gKi8KKwkJZm9yIChpID0gMDsgaSA8IHJlbG9jczY0LmNvdW50OyBpKyspCisJCQl3cml0ZV9yZWxvYyhyZWxvY3M2NC5vZmZzZXRbaV0sIHN0ZG91dCk7CisKKwkJLyogUHJpbnQgYSBzdG9wICovCisJCXdyaXRlX3JlbG9jKDAsIHN0ZG91dCk7CisKKwkJLyogTm93IHByaW50IGVhY2ggaW52ZXJzZSAzMi1iaXQgcmVsb2NhdGlvbiAqLworCQlmb3IgKGkgPSAwOyBpIDwgcmVsb2NzMzJuZWcuY291bnQ7IGkrKykKKwkJCXdyaXRlX3JlbG9jKHJlbG9jczMybmVnLm9mZnNldFtpXSwgc3Rkb3V0KTsKKyNlbmRpZgogCiAJCS8qIFByaW50IGEgc3RvcCAqLwogCQl3cml0ZV9yZWxvYygwLCBzdGRvdXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMgYi9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYwppbmRleCAxMzQwM2ZjLi41NmYwNGRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYworKysgYi9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJLyogRGVjb2RlIGFuIGluc3RydWN0aW9uICovCi0JCWluc25faW5pdCgmaW5zbiwgaW5zbl9idWYsIHg4Nl82NCk7CisJCWluc25faW5pdCgmaW5zbiwgaW5zbl9idWYsIHNpemVvZihpbnNuX2J1ZiksIHg4Nl82NCk7CiAJCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CiAJCWlmIChpbnNuLmxlbmd0aCAhPSBuYikgewogCQkJd2FybmluZ3MrKzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vdmdldGNwdS5jIGIvYXJjaC94ODYvdmRzby92Z2V0Y3B1LmMKaW5kZXggMmY5NGIwMy4uOGVjM2QxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby92Z2V0Y3B1LmMKKysrIGIvYXJjaC94ODYvdmRzby92Z2V0Y3B1LmMKQEAgLTcsOSArNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9nZXRjcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgogI2luY2x1ZGUgPGFzbS92Z3RvZC5oPgogCiBub3RyYWNlIGxvbmcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vdm1hLmMgYi9hcmNoL3g4Ni92ZHNvL3ZtYS5jCmluZGV4IDk3MDQ2M2IuLjAwOTQ5NWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vdm1hLmMKKysrIGIvYXJjaC94ODYvdmRzby92bWEuYwpAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBTZXQgdXAgdGhlIFZNQXMgdG8gdGVsbCB0aGUgVk0gYWJvdXQgdGhlIHZEU08uCiAgKiBDb3B5cmlnaHQgMjAwNyBBbmRpIEtsZWVuLCBTVVNFIExhYnMuCiAgKiBTdWJqZWN0IHRvIHRoZSBHUEwsIHYuMgorICoKKyAqIFRoaXMgY29udGFpbnMgbW9zdCBvZiB0aGUgeDg2IHZEU08ga2VybmVsLXNpZGUgY29kZS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0xMCwxNyArMTEsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+Ci0jaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3ZndG9kLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL3Zkc28uaD4KKyNpbmNsdWRlIDxhc20vdnZhci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQogdW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgdmRzbzY0X2VuYWJsZWQgPSAxOwotCi1leHRlcm4gdW5zaWduZWQgc2hvcnQgdmRzb19zeW5jX2NwdWlkOwogI2VuZGlmCiAKIHZvaWQgX19pbml0IGluaXRfdmRzb19pbWFnZShjb25zdCBzdHJ1Y3QgdmRzb19pbWFnZSAqaW1hZ2UpCkBAIC0zOCwyMCArMzksNiBAQAogCQkJCQkJaW1hZ2UtPmFsdF9sZW4pKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKQotewotCWluaXRfdmRzb19pbWFnZSgmdmRzb19pbWFnZV82NCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X1gzMl9BQkkKLQlpbml0X3Zkc29faW1hZ2UoJnZkc29faW1hZ2VfeDMyKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci1zdWJzeXNfaW5pdGNhbGwoaW5pdF92ZHNvKTsKLSNlbmRpZgotCiBzdHJ1Y3QgbGludXhfYmlucHJtOwogCiAvKiBQdXQgdGhlIHZkc28gYWJvdmUgdGhlIChyYW5kb21pemVkKSBzdGFjayB3aXRoIGFub3RoZXIgcmFuZG9taXplZCBvZmZzZXQuCkBAIC0yMzgsMyArMjI1LDYzIEBACiB9CiBfX3NldHVwKCJ2ZHNvPSIsIHZkc29fc2V0dXApOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgdm9pZCB2Z2V0Y3B1X2NwdV9pbml0KHZvaWQgKmFyZykKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBkZXNjX3N0cnVjdCBkID0geyB9OworCXVuc2lnbmVkIGxvbmcgbm9kZSA9IDA7CisjaWZkZWYgQ09ORklHX05VTUEKKwlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKyNlbmRpZgorCWlmIChjcHVfaGFzKCZjcHVfZGF0YShjcHUpLCBYODZfRkVBVFVSRV9SRFRTQ1ApKQorCQl3cml0ZV9yZHRzY3BfYXV4KChub2RlIDw8IDEyKSB8IGNwdSk7CisKKwkvKgorCSAqIFN0b3JlIGNwdSBudW1iZXIgaW4gbGltaXQgc28gdGhhdCBpdCBjYW4gYmUgbG9hZGVkCisJICogcXVpY2tseSBpbiB1c2VyIHNwYWNlIGluIHZnZXRjcHUuICgxMiBiaXRzIGZvciB0aGUgQ1BVCisJICogYW5kIDggYml0cyBmb3IgdGhlIG5vZGUpCisJICovCisJZC5saW1pdDAgPSBjcHUgfCAoKG5vZGUgJiAweGYpIDw8IDEyKTsKKwlkLmxpbWl0ID0gbm9kZSA+PiA0OworCWQudHlwZSA9IDU7CQkvKiBSTyBkYXRhLCBleHBhbmQgZG93biwgYWNjZXNzZWQgKi8KKwlkLmRwbCA9IDM7CQkvKiBWaXNpYmxlIHRvIHVzZXIgY29kZSAqLworCWQucyA9IDE7CQkvKiBOb3QgYSBzeXN0ZW0gc2VnbWVudCAqLworCWQucCA9IDE7CQkvKiBQcmVzZW50ICovCisJZC5kID0gMTsJCS8qIDMyLWJpdCAqLworCisJd3JpdGVfZ2R0X2VudHJ5KGdldF9jcHVfZ2R0X3RhYmxlKGNwdSksIEdEVF9FTlRSWV9QRVJfQ1BVLCAmZCwgREVTQ1RZUEVfUyk7Cit9CisKK3N0YXRpYyBpbnQKK3ZnZXRjcHVfY3B1X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZykKK3sKKwlsb25nIGNwdSA9IChsb25nKWFyZzsKKworCWlmIChhY3Rpb24gPT0gQ1BVX09OTElORSB8fCBhY3Rpb24gPT0gQ1BVX09OTElORV9GUk9aRU4pCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIHZnZXRjcHVfY3B1X2luaXQsIE5VTEwsIDEpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3Zkc28odm9pZCkKK3sKKwlpbml0X3Zkc29faW1hZ2UoJnZkc29faW1hZ2VfNjQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9YMzJfQUJJCisJaW5pdF92ZHNvX2ltYWdlKCZ2ZHNvX2ltYWdlX3gzMik7CisjZW5kaWYKKworCWNwdV9ub3RpZmllcl9yZWdpc3Rlcl9iZWdpbigpOworCisJb25fZWFjaF9jcHUodmdldGNwdV9jcHVfaW5pdCwgTlVMTCwgMSk7CisJLyogbm90aWZpZXIgcHJpb3JpdHkgPiBLVk0gKi8KKwlfX2hvdGNwdV9ub3RpZmllcih2Z2V0Y3B1X2NwdV9ub3RpZmllciwgMzApOworCisJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2RvbmUoKTsKKworCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKGluaXRfdmRzbyk7CisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IGZhYzVlNGYuLjZiZjNhMTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTExMDAsMTIgKzExMDAsNiBAQAogCQkvKiBGYXN0IHN5c2NhbGwgc2V0dXAgaXMgYWxsIGRvbmUgaW4gaHlwZXJjYWxscywgc28KIAkJICAgdGhlc2UgYXJlIGFsbCBpZ25vcmVkLiAgU3R1YiB0aGVtIG91dCBoZXJlIHRvIHN0b3AKIAkJICAgWGVuIGNvbnNvbGUgbm9pc2UuICovCi0JCWJyZWFrOwotCi0JY2FzZSBNU1JfSUEzMl9DUl9QQVQ6Ci0JCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkKLQkJCXhlbl9zZXRfcGF0KCgodTY0KWhpZ2ggPDwgMzIpIHwgbG93KTsKLQkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlyZXQgPSBuYXRpdmVfd3JpdGVfbXNyX3NhZmUobXNyLCBsb3csIGhpZ2gpOwpAQCAtMTU2MSwxMCArMTU1NSw2IEBACiAKIAkvKiBQcmV2ZW50IHVud2FudGVkIGJpdHMgZnJvbSBiZWluZyBzZXQgaW4gUFRFcy4gKi8KIAlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfR0xPQkFMOwotI2lmIDAKLQlpZiAoIXhlbl9pbml0aWFsX2RvbWFpbigpKQotI2VuZGlmCi0JCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH4oX1BBR0VfUFdUIHwgX1BBR0VfUENEKTsKIAogCS8qCiAJICogUHJldmVudCBwYWdlIHRhYmxlcyBmcm9tIGJlaW5nIGFsbG9jYXRlZCBpbiBoaWdobWVtLCBldmVuCkBAIC0xNjE4LDE0ICsxNjA4LDYgQEAKIAkgKi8KIAlhY3BpX251bWEgPSAtMTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfUEFUCi0JLyoKLQkgKiBGb3IgcmlnaHQgbm93IGRpc2FibGUgdGhlIFBBVC4gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2UKLQkgKiBnaXQgY29tbWl0IDhlYWZmYTY3YjQzZTk5YWU1ODE2MjJjNTEzM2UyMGIwZjQ4YmNlZjEKLQkgKiAoeGVuL3BhdDogRGlzYWJsZSBQQVQgc3VwcG9ydCBmb3Igbm93KSBpcyByZXZlcnRlZC4KLQkgKi8KLQlwYXRfZW5hYmxlZCA9IDA7Ci0jZW5kaWYKIAkvKiBEb24ndCBkbyB0aGUgZnVsbCB2Y3B1X2luZm8gcGxhY2VtZW50IHN0dWZmIHVudGlsIHdlIGhhdmUgYQogCSAgIHBvc3NpYmxlIG1hcCBhbmQgYSBub24tZHVtbXkgc2hhcmVkX2luZm8uICovCiAJcGVyX2NwdSh4ZW5fdmNwdSwgMCkgPSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdOwpAQCAtMTYzNiw2ICsxNjE4LDEzIEBACiAJeGVuX3Jhd19jb25zb2xlX3dyaXRlKCJtYXBwaW5nIGtlcm5lbCBpbnRvIHBoeXNpY2FsIG1lbW9yeVxuIik7CiAJeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUoKHBnZF90ICopeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2UsIHhlbl9zdGFydF9pbmZvLT5ucl9wYWdlcyk7CiAKKwkvKgorCSAqIE1vZGlmeSB0aGUgY2FjaGUgbW9kZSB0cmFuc2xhdGlvbiB0YWJsZXMgdG8gbWF0Y2ggWGVuJ3MgUEFUCisJICogY29uZmlndXJhdGlvbi4KKwkgKi8KKworCXBhdF9pbml0X2NhY2hlX21vZGVzKCk7CisKIAkvKiBrZWVwIHVzaW5nIFhlbiBnZHQgZm9yIG5vdzsgbm8gdXJnZW50IG5lZWQgdG8gY2hhbmdlIGl0ICovCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbW11LmMgYi9hcmNoL3g4Ni94ZW4vbW11LmMKaW5kZXggYThhMWEzZC4uOGM4Mjk4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL21tdS5jCisrKyBiL2FyY2gveDg2L3hlbi9tbXUuYwpAQCAtNDEwLDEzICs0MTAsNyBAQAogX192aXNpYmxlIHB0ZXZhbF90IHhlbl9wdGVfdmFsKHB0ZV90IHB0ZSkKIHsKIAlwdGV2YWxfdCBwdGV2YWwgPSBwdGUucHRlOwotI2lmIDAKLQkvKiBJZiB0aGlzIGlzIGEgV0MgcHRlLCBjb252ZXJ0IGJhY2sgZnJvbSBYZW4gV0MgdG8gTGludXggV0MgKi8KLQlpZiAoKHB0ZXZhbCAmIChfUEFHRV9QQVQgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpKSA9PSBfUEFHRV9QQVQpIHsKLQkJV0FSTl9PTighcGF0X2VuYWJsZWQpOwotCQlwdGV2YWwgPSAocHRldmFsICYgfl9QQUdFX1BBVCkgfCBfUEFHRV9QV1Q7Ci0JfQotI2VuZGlmCisKIAlyZXR1cm4gcHRlX21mbl90b19wZm4ocHRldmFsKTsKIH0KIFBWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX3B0ZV92YWwpOwpAQCAtNDI3LDQ3ICs0MjEsOCBAQAogfQogUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyh4ZW5fcGdkX3ZhbCk7CiAKLS8qCi0gKiBYZW4ncyBQQVQgc2V0dXAgaXMgcGFydCBvZiBpdHMgQUJJLCB0aG91Z2ggSSBhc3N1bWUgZW50cmllcyA2ICYgNwotICogYXJlIHJlc2VydmVkIGZvciBub3csIHRvIGNvcnJlc3BvbmQgdG8gdGhlIEludGVsLXJlc2VydmVkIFBBVAotICogdHlwZXMuCi0gKgotICogV2UgZXhwZWN0IExpbnV4J3MgUEFUIHNldCBhcyBmb2xsb3dzOgotICoKLSAqIElkeCAgUFRFIGZsYWdzICAgICAgICBMaW51eCAgICBYZW4gICAgRGVmYXVsdAotICogMCAgICAgICAgICAgICAgICAgICAgIFdCICAgICAgIFdCICAgICBXQgotICogMSAgICAgICAgICAgIFBXVCAgICAgIFdDICAgICAgIFdUICAgICBXVAotICogMiAgICAgICAgUENEICAgICAgICAgIFVDLSAgICAgIFVDLSAgICBVQy0KLSAqIDMgICAgICAgIFBDRCBQV1QgICAgICBVQyAgICAgICBVQyAgICAgVUMKLSAqIDQgICAgUEFUICAgICAgICAgICAgICBXQiAgICAgICBXQyAgICAgV0IKLSAqIDUgICAgUEFUICAgICBQV1QgICAgICBXQyAgICAgICBXUCAgICAgV1QKLSAqIDYgICAgUEFUIFBDRCAgICAgICAgICBVQy0gICAgICByc3YgICAgVUMtCi0gKiA3ICAgIFBBVCBQQ0QgUFdUICAgICAgVUMgICAgICAgcnN2ICAgIFVDCi0gKi8KLQotdm9pZCB4ZW5fc2V0X3BhdCh1NjQgcGF0KQotewotCS8qIFdlIGV4cGVjdCBMaW51eCB0byB1c2UgYSBQQVQgc2V0dGluZyBvZgotCSAqIFVDIFVDLSBXQyBXQiAoaWdub3JpbmcgdGhlIFBBVCBmbGFnKSAqLwotCVdBUk5fT04ocGF0ICE9IDB4MDAwNzAxMDYwMDA3MDEwNnVsbCk7Ci19Ci0KIF9fdmlzaWJsZSBwdGVfdCB4ZW5fbWFrZV9wdGUocHRldmFsX3QgcHRlKQogewotI2lmIDAKLQkvKiBJZiBMaW51eCBpcyB0cnlpbmcgdG8gc2V0IGEgV0MgcHRlLCB0aGVuIG1hcCB0byB0aGUgWGVuIFdDLgotCSAqIElmIF9QQUdFX1BBVCBpcyBzZXQsIHRoZW4gaXQgcHJvYmFibHkgbWVhbnMgaXQgaXMgcmVhbGx5Ci0JICogX1BBR0VfUFNFLCBzbyBhdm9pZCBmaWRkbGluZyB3aXRoIHRoZSBQQVQgbWFwcGluZyBhbmQgaG9wZQotCSAqIHRoaW5ncyB3b3JrIG91dCBPSy4uLgotCSAqCi0JICogKFdlIHNob3VsZCBuZXZlciBzZWUga2VybmVsIG1hcHBpbmdzIHdpdGggX1BBR0VfUFNFIHNldCwKLQkgKiBidXQgd2UgY291bGQgc2VlIGh1Z2V0bGJmcyBtYXBwaW5ncywgSSB0aGluay4pLgotCSAqLwotCWlmIChwYXRfZW5hYmxlZCAmJiAhV0FSTl9PTihwdGUgJiBfUEFHRV9QQVQpKSB7Ci0JCWlmICgocHRlICYgKF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpID09IF9QQUdFX1BXVCkKLQkJCXB0ZSA9IChwdGUgJiB+KF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpIHwgX1BBR0VfUEFUOwotCX0KLSNlbmRpZgogCXB0ZSA9IHB0ZV9wZm5fdG9fbWZuKHB0ZSk7CiAKIAlyZXR1cm4gbmF0aXZlX21ha2VfcHRlKHB0ZSk7CkBAIC0xNDU3LDggKzE0MTIsMTAgQEAKIAkJcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKXVzZXJfcGdkOwogCiAJCWlmICh1c2VyX3BnZCAhPSBOVUxMKSB7CisjaWZkZWYgQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04KIAkJCXVzZXJfcGdkW3BnZF9pbmRleChWU1lTQ0FMTF9BRERSKV0gPQogCQkJCV9fcGdkKF9fcGEobGV2ZWwzX3VzZXJfdnN5c2NhbGwpIHwgX1BBR0VfVEFCTEUpOworI2VuZGlmCiAJCQlyZXQgPSAwOwogCQl9CiAKQEAgLTIwMjEsNyArMTk3OCw3IEBACiAjIGlmZGVmIENPTkZJR19ISUdITUVNCiAJY2FzZSBGSVhfS01BUF9CRUdJTiAuLi4gRklYX0tNQVBfRU5EOgogIyBlbmRpZgotI2Vsc2UKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04pCiAJY2FzZSBWU1lTQ0FMTF9QQUdFOgogI2VuZGlmCiAJY2FzZSBGSVhfVEVYVF9QT0tFMDoKQEAgLTIwNjAsNyArMjAxNyw3IEBACiAKIAlfX25hdGl2ZV9zZXRfZml4bWFwKGlkeCwgcHRlKTsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKKyNpZmRlZiBDT05GSUdfWDg2X1ZTWVNDQUxMX0VNVUxBVElPTgogCS8qIFJlcGxpY2F0ZSBjaGFuZ2VzIHRvIG1hcCB0aGUgdnN5c2NhbGwgcGFnZSBpbnRvIHRoZSB1c2VyCiAJICAgcGFnZXRhYmxlIHZzeXNjYWxsIG1hcHBpbmcuICovCiAJaWYgKGlkeCA9PSBWU1lTQ0FMTF9QQUdFKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oIGIvYXJjaC94ODYveGVuL3hlbi1vcHMuaAppbmRleCAyOGM3ZTBiLi40YWI5Mjk4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKQEAgLTMzLDcgKzMzLDYgQEAKIAogdm9pZCB4ZW5fbW1fcGluX2FsbCh2b2lkKTsKIHZvaWQgeGVuX21tX3VucGluX2FsbCh2b2lkKTsKLXZvaWQgeGVuX3NldF9wYXQodTY0KTsKIAogY2hhciAqIF9faW5pdCB4ZW5fbWVtb3J5X3NldHVwKHZvaWQpOwogY2hhciAqIHhlbl9hdXRvX3hsYXRlZF9tZW1vcnlfc2V0dXAodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW8uaAppbmRleCA3NDk0NDIwLi5mZTE2MDBhIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTc0LDEzICs3NCw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKLS8qCi0gKiBHZW5lcmljIEkvTwotICovCi0jZGVmaW5lIHJlYWRiX3JlbGF4ZWQgcmVhZGIKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZCByZWFkdwotI2RlZmluZSByZWFkbF9yZWxheGVkIHJlYWRsCi0KICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pby5oPgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggMDQyMWI1My4uMmU3NDI0YiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC0xMjY2LDcgKzEyNjYsNyBAQAogCWJsa19jbGVhcl9ycV9jb21wbGV0ZShycSk7CiAJdHJhY2VfYmxvY2tfcnFfcmVxdWV1ZShxLCBycSk7CiAKLQlpZiAoYmxrX3JxX3RhZ2dlZChycSkpCisJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVFVUVEKQogCQlibGtfcXVldWVfZW5kX3RhZyhxLCBycSk7CiAKIAlCVUdfT04oYmxrX3F1ZXVlZF9ycShycSkpOwpAQCAtMjU1NCw3ICsyNTU0LDcgQEAKICAqLwogdm9pZCBibGtfZmluaXNoX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IGVycm9yKQogewotCWlmIChibGtfcnFfdGFnZ2VkKHJlcSkpCisJaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVRVVFRCkKIAkJYmxrX3F1ZXVlX2VuZF90YWcocmVxLT5xLCByZXEpOwogCiAJQlVHX09OKGJsa19xdWV1ZWRfcnEocmVxKSk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtdGFnLmMgYi9ibG9jay9ibGstbXEtdGFnLmMKaW5kZXggODMxNzE3NS4uNzI4YjlhNCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1xLXRhZy5jCisrKyBiL2Jsb2NrL2Jsay1tcS10YWcuYwpAQCAtNTg0LDYgKzU4NCwzNCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGJsa19tcV91bmlxdWVfdGFnKCkgLSByZXR1cm4gYSB0YWcgdGhhdCBpcyB1bmlxdWUgcXVldWUtd2lkZQorICogQHJxOiByZXF1ZXN0IGZvciB3aGljaCB0byBjb21wdXRlIGEgdW5pcXVlIHRhZworICoKKyAqIFRoZSB0YWcgZmllbGQgaW4gc3RydWN0IHJlcXVlc3QgaXMgdW5pcXVlIHBlciBoYXJkd2FyZSBxdWV1ZSBidXQgbm90IG92ZXIKKyAqIGFsbCBoYXJkd2FyZSBxdWV1ZXMuIEhlbmNlIHRoaXMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGFnIHdpdGggdGhlCisgKiBoYXJkd2FyZSBjb250ZXh0IGluZGV4IGluIHRoZSB1cHBlciBiaXRzIGFuZCB0aGUgcGVyIGhhcmR3YXJlIHF1ZXVlIHRhZyBpbgorICogdGhlIGxvd2VyIGJpdHMuCisgKgorICogTm90ZTogV2hlbiBjYWxsZWQgZm9yIGEgcmVxdWVzdCB0aGF0IGlzIHF1ZXVlZCBvbiBhIG5vbi1tdWx0aXF1ZXVlIHJlcXVlc3QKKyAqIHF1ZXVlLCB0aGUgaGFyZHdhcmUgY29udGV4dCBpbmRleCBpcyBzZXQgdG8gemVyby4KKyAqLwordTMyIGJsa19tcV91bmlxdWVfdGFnKHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHJxLT5xOworCXN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4OworCWludCBod3EgPSAwOworCisJaWYgKHEtPm1xX29wcykgeworCQloY3R4ID0gcS0+bXFfb3BzLT5tYXBfcXVldWUocSwgcnEtPm1xX2N0eC0+Y3B1KTsKKwkJaHdxID0gaGN0eC0+cXVldWVfbnVtOworCX0KKworCXJldHVybiAoaHdxIDw8IEJMS19NUV9VTklRVUVfVEFHX0JJVFMpIHwKKwkJKHJxLT50YWcgJiBCTEtfTVFfVU5JUVVFX1RBR19NQVNLKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX21xX3VuaXF1ZV90YWcpOworCiBzc2l6ZV90IGJsa19tcV90YWdfc3lzZnNfc2hvdyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIGNoYXIgKnBhZ2UpCiB7CiAJY2hhciAqb3JpZ19wYWdlID0gcGFnZTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS5jIGIvYmxvY2svYmxrLW1xLmMKaW5kZXggMWQwMTZmYy4uOTJjZWVmMCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1xLmMKKysrIGIvYmxvY2svYmxrLW1xLmMKQEAgLTIwNDksNiArMjA0OSw4IEBACiAgKi8KIGludCBibGtfbXFfYWxsb2NfdGFnX3NldChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCkKIHsKKwlCVUlMRF9CVUdfT04oQkxLX01RX01BWF9ERVBUSCA+IDEgPDwgQkxLX01RX1VOSVFVRV9UQUdfQklUUyk7CisKIAlpZiAoIXNldC0+bnJfaHdfcXVldWVzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIXNldC0+cXVldWVfZGVwdGgpCmRpZmYgLS1naXQgYS9ibG9jay9zY3NpX2lvY3RsLmMgYi9ibG9jay9zY3NpX2lvY3RsLmMKaW5kZXggYjBjMmE2MS4uMjgxNjNmYSAxMDA2NDQKLS0tIGEvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJX19zZXRfYml0KEdQQ01EX1ZFUklGWV8xMCwgZmlsdGVyLT5yZWFkX29rKTsKIAlfX3NldF9iaXQoVkVSSUZZXzE2LCBmaWx0ZXItPnJlYWRfb2spOwogCV9fc2V0X2JpdChSRVBPUlRfTFVOUywgZmlsdGVyLT5yZWFkX29rKTsKLQlfX3NldF9iaXQoU0VSVklDRV9BQ1RJT05fSU4sIGZpbHRlci0+cmVhZF9vayk7CisJX19zZXRfYml0KFNFUlZJQ0VfQUNUSU9OX0lOXzE2LCBmaWx0ZXItPnJlYWRfb2spOwogCV9fc2V0X2JpdChSRUNFSVZFX0RJQUdOT1NUSUMsIGZpbHRlci0+cmVhZF9vayk7CiAJX19zZXRfYml0KE1BSU5URU5BTkNFX0lOLCBmaWx0ZXItPnJlYWRfb2spOwogCV9fc2V0X2JpdChHUENNRF9SRUFEX0JVRkZFUl9DQVBBQ0lUWSwgZmlsdGVyLT5yZWFkX29rKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvS2NvbmZpZyBiL2RyaXZlcnMvS2NvbmZpZwppbmRleCAxYTY5M2QzLi5hZjAyYThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9LY29uZmlnCkBAIC0xLDUgKzEsNyBAQAogbWVudSAiRGV2aWNlIERyaXZlcnMiCiAKK3NvdXJjZSAiZHJpdmVycy9hbWJhL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9iYXNlL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9idXMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL2doZXMuYyBiL2RyaXZlcnMvYWNwaS9hcGVpL2doZXMuYwppbmRleCBmYzVmNzgwLi4xYjZhYTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXBlaS9naGVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvZ2hlcy5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZ2VuX3Bvb2wgKmdoZXNfZXN0YXR1c19wb29sOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2hlc19lc3RhdHVzX3Bvb2xfc2l6ZV9yZXF1ZXN0OwogCi1zdHJ1Y3QgZ2hlc19lc3RhdHVzX2NhY2hlICpnaGVzX2VzdGF0dXNfY2FjaGVzW0dIRVNfRVNUQVRVU19DQUNIRVNfU0laRV07CitzdGF0aWMgc3RydWN0IGdoZXNfZXN0YXR1c19jYWNoZSAqZ2hlc19lc3RhdHVzX2NhY2hlc1tHSEVTX0VTVEFUVVNfQ0FDSEVTX1NJWkVdOwogc3RhdGljIGF0b21pY190IGdoZXNfZXN0YXR1c19jYWNoZV9hbGxvY2VkOwogCiBzdGF0aWMgaW50IGdoZXNfaW9yZW1hcF9pbml0KHZvaWQpCkBAIC03MzgsMjAgKzczOCw2IEBACiAKIHN0YXRpYyBpbnQgZ2hlc19wYW5pY190aW1lb3V0CV9fcmVhZF9tb3N0bHkgPSAzMDsKIAotc3RhdGljIHN0cnVjdCBsbGlzdF9ub2RlICpsbGlzdF9ub2Rlc19yZXZlcnNlKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpCi17Ci0Jc3RydWN0IGxsaXN0X25vZGUgKm5leHQsICp0YWlsID0gTlVMTDsKLQotCXdoaWxlIChsbG5vZGUpIHsKLQkJbmV4dCA9IGxsbm9kZS0+bmV4dDsKLQkJbGxub2RlLT5uZXh0ID0gdGFpbDsKLQkJdGFpbCA9IGxsbm9kZTsKLQkJbGxub2RlID0gbmV4dDsKLQl9Ci0KLQlyZXR1cm4gdGFpbDsKLX0KLQogc3RhdGljIHZvaWQgZ2hlc19wcm9jX2luX2lycShzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKQogewogCXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsICpuZXh0OwpAQCAtNzY1LDcgKzc1MSw3IEBACiAJICogQmVjYXVzZSB0aGUgdGltZSBvcmRlciBvZiBlc3RhdHVzIGluIGxpc3QgaXMgcmV2ZXJzZWQsCiAJICogcmV2ZXJ0IGl0IGJhY2sgdG8gcHJvcGVyIG9yZGVyLgogCSAqLwotCWxsbm9kZSA9IGxsaXN0X25vZGVzX3JldmVyc2UobGxub2RlKTsKKwlsbG5vZGUgPSBsbGlzdF9yZXZlcnNlX29yZGVyKGxsbm9kZSk7CiAJd2hpbGUgKGxsbm9kZSkgewogCQluZXh0ID0gbGxub2RlLT5uZXh0OwogCQllc3RhdHVzX25vZGUgPSBsbGlzdF9lbnRyeShsbG5vZGUsIHN0cnVjdCBnaGVzX2VzdGF0dXNfbm9kZSwKQEAgLTc5OCw3ICs3ODQsNyBAQAogCSAqIEJlY2F1c2UgdGhlIHRpbWUgb3JkZXIgb2YgZXN0YXR1cyBpbiBsaXN0IGlzIHJldmVyc2VkLAogCSAqIHJldmVydCBpdCBiYWNrIHRvIHByb3BlciBvcmRlci4KIAkgKi8KLQlsbG5vZGUgPSBsbGlzdF9ub2Rlc19yZXZlcnNlKGxsbm9kZSk7CisJbGxub2RlID0gbGxpc3RfcmV2ZXJzZV9vcmRlcihsbG5vZGUpOwogCXdoaWxlIChsbG5vZGUpIHsKIAkJZXN0YXR1c19ub2RlID0gbGxpc3RfZW50cnkobGxub2RlLCBzdHJ1Y3QgZ2hlc19lc3RhdHVzX25vZGUsCiAJCQkJCSAgIGxsbm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvS2NvbmZpZyBiL2RyaXZlcnMvYW1iYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNWM5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FtYmEvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACitjb25maWcgQVJNX0FNQkEKKwlib29sCisKK2lmIEFSTV9BTUJBCisKK2NvbmZpZyBURUdSQV9BSEIKKwlib29sICJFbmFibGUgQUhCIGRyaXZlciBmb3IgTlZJRElBIFRlZ3JhIFNvQ3MiCisJZGVmYXVsdCB5IGlmIEFSQ0hfVEVHUkEKKwloZWxwCisJICBBZGRzIEFIQiBjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkgZm9yIE5WSURJQSBUZWdyYSBTb0NzLAorCSAgd2hpY2ggY29udHJvbHMgQUhCIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gYW5kIHNvbWUgcGVyZm9ybWFuY2UKKwkgIHBhcmFtZXRlcnMgKHByaW9yaXR5LCBwcmVmZXRjaCBzaXplKS4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IDA1ODZmNjYuLmRkNDVjNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMTE2NCw3ICsxMTY0LDcgQEAKIAogCQlkZXB0aCA9IG1pbihzZGV2LT5ob3N0LT5jYW5fcXVldWUsIGF0YV9pZF9xdWV1ZV9kZXB0aChkZXYtPmlkKSk7CiAJCWRlcHRoID0gbWluKEFUQV9NQVhfUVVFVUUgLSAxLCBkZXB0aCk7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCBkZXB0aCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoKTsKIAl9CiAKIAlibGtfcXVldWVfZmx1c2hfcXVldWVhYmxlKHEsIGZhbHNlKTsKQEAgLTEyNDMsMjEgKzEyNDMsMTcgQEAKICAqCUBhcDogQVRBIHBvcnQgdG8gd2hpY2ggdGhlIGRldmljZSBjaGFuZ2UgdGhlIHF1ZXVlIGRlcHRoCiAgKglAc2RldjogU0NTSSBkZXZpY2UgdG8gY29uZmlndXJlIHF1ZXVlIGRlcHRoIGZvcgogICoJQHF1ZXVlX2RlcHRoOiBuZXcgcXVldWUgZGVwdGgKLSAqCUByZWFzb246IGNhbGxpbmcgY29udGV4dAogICoKICAqCWxpYnNhcyBhbmQgbGliYXRhIGhhdmUgZGlmZmVyZW50IGFwcHJvYWNoZXMgZm9yIGFzc29jaWF0aW5nIGEgc2RldiB0bwogICoJaXRzIGF0YV9wb3J0LgogICoKICAqLwogaW50IF9fYXRhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkgICAgIGludCBxdWV1ZV9kZXB0aCwgaW50IHJlYXNvbikKKwkJCSAgICAgaW50IHF1ZXVlX2RlcHRoKQogewogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJaWYgKHF1ZXVlX2RlcHRoIDwgMSB8fCBxdWV1ZV9kZXB0aCA9PSBzZGV2LT5xdWV1ZV9kZXB0aCkKIAkJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwogCkBAIC0xMjgyLDE1ICsxMjc4LDEzIEBACiAJaWYgKHNkZXYtPnF1ZXVlX2RlcHRoID09IHF1ZXVlX2RlcHRoKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCBxdWV1ZV9kZXB0aCk7Ci0JcmV0dXJuIHF1ZXVlX2RlcHRoOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxdWV1ZV9kZXB0aCk7CiB9CiAKIC8qKgogICoJYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gU0NTSSBjYWxsYmFjayBmb3IgcXVldWUgZGVwdGggY29uZmlnCiAgKglAc2RldjogU0NTSSBkZXZpY2UgdG8gY29uZmlndXJlIHF1ZXVlIGRlcHRoIGZvcgogICoJQHF1ZXVlX2RlcHRoOiBuZXcgcXVldWUgZGVwdGgKLSAqCUByZWFzb246IGNhbGxpbmcgY29udGV4dAogICoKICAqCVRoaXMgaXMgbGliYXRhIHN0YW5kYXJkIGhvc3R0LT5jaGFuZ2VfcXVldWVfZGVwdGggY2FsbGJhY2suCiAgKglTQ1NJIHdpbGwgY2FsbCBpbnRvIHRoaXMgY2FsbGJhY2sgd2hlbiB1c2VyIHRyaWVzIHRvIHNldCBxdWV1ZQpAQCAtMTMwMiwxMiArMTI5NiwxMSBAQAogICoJUkVUVVJOUzoKICAqCU5ld2x5IGNvbmZpZ3VyZWQgcXVldWUgZGVwdGguCiAgKi8KLWludCBhdGFfc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXVldWVfZGVwdGgsCi0JCQkJaW50IHJlYXNvbikKK2ludCBhdGFfc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXVldWVfZGVwdGgpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IGF0YV9zaG9zdF90b19wb3J0KHNkZXYtPmhvc3QpOwogCi0JcmV0dXJuIF9fYXRhX2NoYW5nZV9xdWV1ZV9kZXB0aChhcCwgc2RldiwgcXVldWVfZGVwdGgsIHJlYXNvbik7CisJcmV0dXJuIF9fYXRhX2NoYW5nZV9xdWV1ZV9kZXB0aChhcCwgc2RldiwgcXVldWVfZGVwdGgpOwogfQogCiAvKioKQEAgLTM1NzAsNyArMzU2Myw3IEBACiAJCWF0YV9zY3NpX3JidWZfZmlsbCgmYXJncywgYXRhX3Njc2lvcF9yZWFkX2NhcCk7CiAJCWJyZWFrOwogCi0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQlpZiAoKHNjc2ljbWRbMV0gJiAweDFmKSA9PSBTQUlfUkVBRF9DQVBBQ0lUWV8xNikKIAkJCWF0YV9zY3NpX3JidWZfZmlsbCgmYXJncywgYXRhX3Njc2lvcF9yZWFkX2NhcCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCBjZGY5OWZhLi4xZGI2ZjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC0xOTUxLDcgKzE5NTEsNyBAQAogCWF0YV9pZF9jX3N0cmluZyhkZXYtPmlkLCBtb2RlbF9udW0sIEFUQV9JRF9QUk9ELCBzaXplb2YobW9kZWxfbnVtKSk7CiAKIAlpZiAoc3RybmNtcChtb2RlbF9udW0sICJNYXh0b3IiLCA2KSA9PSAwKSB7Ci0JCWF0YV9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCAxLCBTQ1NJX1FERVBUSF9ERUZBVUxUKTsKKwkJYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIDEpOwogCQlhdGFfZGV2X25vdGljZShkZXYsICJEaXNhYmxpbmcgU1dOQ1EgbW9kZSAoZGVwdGggJXgpXG4iLAogCQkJICAgICAgIHNkZXYtPnF1ZXVlX2RlcHRoKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcKaW5kZXggOGEzZjUxZi4uZGI5ZDAwYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZworKysgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcKQEAgLTMsMTIgKzMsMTUgQEAKICMgc3Vic3lzdGVtcyBzaG91bGQgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBzeW1ib2xzLgogCiBjb25maWcgUkVHTUFQCi0JZGVmYXVsdCB5IGlmIChSRUdNQVBfSTJDIHx8IFJFR01BUF9TUEkgfHwgUkVHTUFQX1NQTUkgfHwgUkVHTUFQX01NSU8gfHwgUkVHTUFQX0lSUSkKKwlkZWZhdWx0IHkgaWYgKFJFR01BUF9JMkMgfHwgUkVHTUFQX1NQSSB8fCBSRUdNQVBfU1BNSSB8fCBSRUdNQVBfQUM5NyB8fCBSRUdNQVBfTU1JTyB8fCBSRUdNQVBfSVJRKQogCXNlbGVjdCBMWk9fQ09NUFJFU1MKIAlzZWxlY3QgTFpPX0RFQ09NUFJFU1MKIAlzZWxlY3QgSVJRX0RPTUFJTiBpZiBSRUdNQVBfSVJRCiAJYm9vbAogCitjb25maWcgUkVHTUFQX0FDOTcKKwl0cmlzdGF0ZQorCiBjb25maWcgUkVHTUFQX0kyQwogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvTWFrZWZpbGUgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL01ha2VmaWxlCmluZGV4IGE3YzY3MGIuLjBhNTMzNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9NYWtlZmlsZQpAQCAtMSw2ICsxLDcgQEAKIG9iai0kKENPTkZJR19SRUdNQVApICs9IHJlZ21hcC5vIHJlZ2NhY2hlLm8KIG9iai0kKENPTkZJR19SRUdNQVApICs9IHJlZ2NhY2hlLXJidHJlZS5vIHJlZ2NhY2hlLWx6by5vIHJlZ2NhY2hlLWZsYXQubwogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKSArPSByZWdtYXAtZGVidWdmcy5vCitvYmotJChDT05GSUdfUkVHTUFQX0FDOTcpICs9IHJlZ21hcC1hYzk3Lm8KIG9iai0kKENPTkZJR19SRUdNQVBfSTJDKSArPSByZWdtYXAtaTJjLm8KIG9iai0kKENPTkZJR19SRUdNQVBfU1BJKSArPSByZWdtYXAtc3BpLm8KIG9iai0kKENPTkZJR19SRUdNQVBfU1BNSSkgKz0gcmVnbWFwLXNwbWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1mbGF0LmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWZsYXQuYwppbmRleCBkOTc2MmU0Li4wMjQ2ZjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWZsYXQuYworKysgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWZsYXQuYwpAQCAtMTAsOSArMTAsOSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbHpvLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWx6by5jCmluZGV4IGUyMTBhNmQuLjJkNTNmNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbHpvLmMKKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1sem8uYwpAQCAtMTAsOSArMTAsOSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9sem8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLXJidHJlZS5jIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1yYnRyZWUuYwppbmRleCBmM2U4ZmUwLi5kNDUzYTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLXJidHJlZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtcmJ0cmVlLmMKQEAgLTEwLDExICsxMCwxMSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMKaW5kZXggZjEyODBkYy4uZjM3M2MzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYwpAQCAtMTAsMTIgKzEwLDEyIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9ic2VhcmNoLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcmVnbWFwLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCkBAIC0zNiw2ICszNiwyMyBAQAogCWlmICghbWFwLT5udW1fcmVnX2RlZmF1bHRzX3JhdykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgcmVnX2RlZmF1bHRzICovCisJZm9yIChjb3VudCA9IDAsIGkgPSAwOyBpIDwgbWFwLT5udW1fcmVnX2RlZmF1bHRzX3JhdzsgaSsrKQorCQlpZiAoIXJlZ21hcF92b2xhdGlsZShtYXAsIGkgKiBtYXAtPnJlZ19zdHJpZGUpKQorCQkJY291bnQrKzsKKworCS8qIGFsbCByZWdpc3RlcnMgYXJlIHZvbGF0aWxlLCBzbyBqdXN0IGJ5cGFzcyAqLworCWlmICghY291bnQpIHsKKwkJbWFwLT5jYWNoZV9ieXBhc3MgPSB0cnVlOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAtPm51bV9yZWdfZGVmYXVsdHMgPSBjb3VudDsKKwltYXAtPnJlZ19kZWZhdWx0cyA9IGttYWxsb2NfYXJyYXkoY291bnQsIHNpemVvZihzdHJ1Y3QgcmVnX2RlZmF1bHQpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghbWFwLT5yZWdfZGVmYXVsdHMpCisJCXJldHVybiAtRU5PTUVNOworCiAJaWYgKCFtYXAtPnJlZ19kZWZhdWx0c19yYXcpIHsKIAkJdTMyIGNhY2hlX2J5cGFzcyA9IG1hcC0+Y2FjaGVfYnlwYXNzOwogCQlkZXZfd2FybihtYXAtPmRldiwgIk5vIGNhY2hlIGRlZmF1bHRzLCByZWFkaW5nIGJhY2sgZnJvbSBIV1xuIik7CkBAIC00Myw0MCArNjAsMjUgQEAKIAkJLyogQnlwYXNzIHRoZSBjYWNoZSBhY2Nlc3MgdGlsbCBkYXRhIHJlYWQgZnJvbSBIVyovCiAJCW1hcC0+Y2FjaGVfYnlwYXNzID0gMTsKIAkJdG1wX2J1ZiA9IGttYWxsb2MobWFwLT5jYWNoZV9zaXplX3JhdywgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdG1wX2J1ZikKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIXRtcF9idWYpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9mcmVlOworCQl9CiAJCXJldCA9IHJlZ21hcF9yYXdfcmVhZChtYXAsIDAsIHRtcF9idWYsCiAJCQkJICAgICAgbWFwLT5udW1fcmVnX2RlZmF1bHRzX3Jhdyk7CiAJCW1hcC0+Y2FjaGVfYnlwYXNzID0gY2FjaGVfYnlwYXNzOwotCQlpZiAocmV0IDwgMCkgewotCQkJa2ZyZWUodG1wX2J1Zik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJfY2FjaGVfZnJlZTsKKwogCQltYXAtPnJlZ19kZWZhdWx0c19yYXcgPSB0bXBfYnVmOwogCQltYXAtPmNhY2hlX2ZyZWUgPSAxOwogCX0KIAotCS8qIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiByZWdfZGVmYXVsdHMgKi8KLQlmb3IgKGNvdW50ID0gMCwgaSA9IDA7IGkgPCBtYXAtPm51bV9yZWdfZGVmYXVsdHNfcmF3OyBpKyspIHsKLQkJdmFsID0gcmVnY2FjaGVfZ2V0X3ZhbChtYXAsIG1hcC0+cmVnX2RlZmF1bHRzX3JhdywgaSk7Ci0JCWlmIChyZWdtYXBfdm9sYXRpbGUobWFwLCBpICogbWFwLT5yZWdfc3RyaWRlKSkKLQkJCWNvbnRpbnVlOwotCQljb3VudCsrOwotCX0KLQotCW1hcC0+cmVnX2RlZmF1bHRzID0ga21hbGxvYyhjb3VudCAqIHNpemVvZihzdHJ1Y3QgcmVnX2RlZmF1bHQpLAotCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmICghbWFwLT5yZWdfZGVmYXVsdHMpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZTsKLQl9Ci0KIAkvKiBmaWxsIHRoZSByZWdfZGVmYXVsdHMgKi8KLQltYXAtPm51bV9yZWdfZGVmYXVsdHMgPSBjb3VudDsKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG1hcC0+bnVtX3JlZ19kZWZhdWx0c19yYXc7IGkrKykgewotCQl2YWwgPSByZWdjYWNoZV9nZXRfdmFsKG1hcCwgbWFwLT5yZWdfZGVmYXVsdHNfcmF3LCBpKTsKIAkJaWYgKHJlZ21hcF92b2xhdGlsZShtYXAsIGkgKiBtYXAtPnJlZ19zdHJpZGUpKQogCQkJY29udGludWU7CisJCXZhbCA9IHJlZ2NhY2hlX2dldF92YWwobWFwLCBtYXAtPnJlZ19kZWZhdWx0c19yYXcsIGkpOwogCQltYXAtPnJlZ19kZWZhdWx0c1tqXS5yZWcgPSBpICogbWFwLT5yZWdfc3RyaWRlOwogCQltYXAtPnJlZ19kZWZhdWx0c1tqXS5kZWYgPSB2YWw7CiAJCWorKzsKQEAgLTg0LDkgKzg2LDEwIEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX2NhY2hlX2ZyZWU6CisJa2ZyZWUodG1wX2J1Zik7CiBlcnJfZnJlZToKLQlpZiAobWFwLT5jYWNoZV9mcmVlKQotCQlrZnJlZShtYXAtPnJlZ19kZWZhdWx0c19yYXcpOworCWtmcmVlKG1hcC0+cmVnX2RlZmF1bHRzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTAsNiArMTUzLDggQEAKIAkJcmV0ID0gcmVnY2FjaGVfaHdfaW5pdChtYXApOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CisJCWlmIChtYXAtPmNhY2hlX2J5cGFzcykKKwkJCXJldHVybiAwOwogCX0KIAogCWlmICghbWFwLT5tYXhfcmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1hYzk3LmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1hYzk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjNDVkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWFjOTcuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIFJlZ2lzdGVyIG1hcCBhY2Nlc3MgQVBJIC0gQUMnOTcgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAyMDEzIExpbmFybyBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKworYm9vbCByZWdtYXBfYWM5N19kZWZhdWx0X3ZvbGF0aWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgQUM5N19SRVNFVDoKKwljYXNlIEFDOTdfUE9XRVJET1dOOgorCWNhc2UgQUM5N19JTlRfUEFHSU5HOgorCWNhc2UgQUM5N19FWFRFTkRFRF9JRDoKKwljYXNlIEFDOTdfRVhURU5ERURfU1RBVFVTOgorCWNhc2UgQUM5N19FWFRFTkRFRF9NSUQ6CisJY2FzZSBBQzk3X0VYVEVOREVEX01TVEFUVVM6CisJY2FzZSBBQzk3X0dQSU9fU1RBVFVTOgorCWNhc2UgQUM5N19NSVNDX0FGRToKKwljYXNlIEFDOTdfVkVORE9SX0lEMToKKwljYXNlIEFDOTdfVkVORE9SX0lEMjoKKwljYXNlIEFDOTdfQ09ERUNfQ0xBU1NfUkVWOgorCWNhc2UgQUM5N19QQ0lfU1ZJRDoKKwljYXNlIEFDOTdfUENJX1NJRDoKKwljYXNlIEFDOTdfRlVOQ19TRUxFQ1Q6CisJY2FzZSBBQzk3X0ZVTkNfSU5GTzoKKwljYXNlIEFDOTdfU0VOU0VfSU5GTzoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ21hcF9hYzk3X2RlZmF1bHRfdm9sYXRpbGUpOworCitzdGF0aWMgaW50IHJlZ21hcF9hYzk3X3JlZ19yZWFkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50ICp2YWwpCit7CisJc3RydWN0IHNuZF9hYzk3ICphYzk3ID0gY29udGV4dDsKKworCSp2YWwgPSBhYzk3LT5idXMtPm9wcy0+cmVhZChhYzk3LCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVnbWFwX2FjOTdfcmVnX3dyaXRlKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcgPSBjb250ZXh0OworCisJYWM5Ny0+YnVzLT5vcHMtPndyaXRlKGFjOTcsIHJlZywgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9idXMgYWM5N19yZWdtYXBfYnVzID0geworCQkucmVnX3dyaXRlID0gcmVnbWFwX2FjOTdfcmVnX3dyaXRlLAorCQkucmVnX3JlYWQgPSByZWdtYXBfYWM5N19yZWdfcmVhZCwKK307CisKKy8qKgorICogcmVnbWFwX2luaXRfYWM5NygpOiBJbml0aWFsaXNlIEFDJzk3IHJlZ2lzdGVyIG1hcAorICoKKyAqIEBhYzk3OiBEZXZpY2UgdGhhdCB3aWxsIGJlIGludGVyYWN0ZWQgd2l0aAorICogQGNvbmZpZzogQ29uZmlndXJhdGlvbiBmb3IgcmVnaXN0ZXIgbWFwCisgKgorICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGFuIEVSUl9QVFIoKSBvbiBlcnJvciBvciBhIHZhbGlkIHBvaW50ZXIgdG8KKyAqIGEgc3RydWN0IHJlZ21hcC4KKyAqLworc3RydWN0IHJlZ21hcCAqcmVnbWFwX2luaXRfYWM5NyhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZykKK3sKKwlyZXR1cm4gcmVnbWFwX2luaXQoJmFjOTctPmRldiwgJmFjOTdfcmVnbWFwX2J1cywgYWM5NywgY29uZmlnKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ21hcF9pbml0X2FjOTcpOworCisvKioKKyAqIGRldm1fcmVnbWFwX2luaXRfYWM5NygpOiBJbml0aWFsaXNlIEFDJzk3IHJlZ2lzdGVyIG1hcAorICoKKyAqIEBhYzk3OiBEZXZpY2UgdGhhdCB3aWxsIGJlIGludGVyYWN0ZWQgd2l0aAorICogQGNvbmZpZzogQ29uZmlndXJhdGlvbiBmb3IgcmVnaXN0ZXIgbWFwCisgKgorICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGFuIEVSUl9QVFIoKSBvbiBlcnJvciBvciBhIHZhbGlkIHBvaW50ZXIKKyAqIHRvIGEgc3RydWN0IHJlZ21hcC4gIFRoZSByZWdtYXAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZyZWVkIGJ5IHRoZQorICogZGV2aWNlIG1hbmFnZW1lbnQgY29kZS4KKyAqLworc3RydWN0IHJlZ21hcCAqZGV2bV9yZWdtYXBfaW5pdF9hYzk3KHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpCit7CisJcmV0dXJuIGRldm1fcmVnbWFwX2luaXQoJmFjOTctPmRldiwgJmFjOTdfcmVnbWFwX2J1cywgYWM5NywgY29uZmlnKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fcmVnbWFwX2luaXRfYWM5Nyk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbnZtZS1zY3NpLmMgYi9kcml2ZXJzL2Jsb2NrL252bWUtc2NzaS5jCmluZGV4IGE0Y2Q2ZDYuLjBiNGIyNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbnZtZS1zY3NpLmMKKysrIGIvZHJpdmVycy9ibG9jay9udm1lLXNjc2kuYwpAQCAtMzI5LDcgKzMyOSw3IEBACiAoR0VUX1UzMl9GUk9NX0NEQihjZGIsIFJFQURfQ0FQXzE2X0NEQl9BTExPQ19MRU5HVEhfT0ZGU0VUKSkKIAogI2RlZmluZSBJU19SRUFEX0NBUF8xNihjZGIpCQkJCQlcCi0oKGNkYlswXSA9PSBTRVJWSUNFX0FDVElPTl9JTiAmJiBjZGJbMV0gPT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpID8gMSA6IDApCisoKGNkYlswXSA9PSBTRVJWSUNFX0FDVElPTl9JTl8xNiAmJiBjZGJbMV0gPT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpID8gMSA6IDApCiAKIC8qIFJlcXVlc3QgU2Vuc2UgSGVscGVyIE1hY3JvcyAqLwogI2RlZmluZSBHRVRfUkVRVUVTVF9TRU5TRV9BTExPQ19MRU5HVEgoY2RiKQkJCVwKQEAgLTI5NDcsNyArMjk0Nyw3IEBACiAJY2FzZSBSRUFEX0NBUEFDSVRZOgogCQlyZXRjb2RlID0gbnZtZV90cmFuc19yZWFkX2NhcGFjaXR5KG5zLCBoZHIsIGNtZCk7CiAJCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKIAkJaWYgKElTX1JFQURfQ0FQXzE2KGNtZCkpCiAJCQlyZXRjb2RlID0gbnZtZV90cmFuc19yZWFkX2NhcGFjaXR5KG5zLCBoZHIsIGNtZCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL0tjb25maWcgYi9kcml2ZXJzL2J1cy9LY29uZmlnCmluZGV4IDYwM2ViMWIuLmI5OTcyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL0tjb25maWcKKysrIGIvZHJpdmVycy9idXMvS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIAogY29uZmlnIEJSQ01TVEJfR0lTQl9BUkIKIAlib29sICJCcm9hZGNvbSBTVEIgR0lTQiBidXMgYXJiaXRlciIKLQlkZXBlbmRzIG9uIEFSTQorCWRlcGVuZHMgb24gQVJNIHx8IE1JUFMKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBCcm9hZGNvbSBTZXQgVG9wIEJveCBTeXN0ZW0tb24tYS1jaGlwIGludGVybmFsIGJ1cwogCSAgYXJiaXRlci4gVGhpcyBkcml2ZXIgcHJvdmlkZXMgdGltZW91dCBhbmQgdGFyZ2V0IGFib3J0IGVycm9yIGhhbmRsaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9hcm0tY2NpLmMgYi9kcml2ZXJzL2J1cy9hcm0tY2NpLmMKaW5kZXggN2FmNzhkZi4uODYwZGE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9idXMvYXJtLWNjaS5jCisrKyBiL2RyaXZlcnMvYnVzL2FybS1jY2kuYwpAQCAtMTYsMTcgKzE2LDE3IEBACiAKICNpbmNsdWRlIDxsaW51eC9hcm0tY2NpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgotI2luY2x1ZGUgPGFzbS9wbXUuaD4KICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KIAogI2RlZmluZSBEUklWRVJfTkFNRQkJIkNDSS00MDAiCkBAIC05OCw2ICs5OCw4IEBACiAKICNkZWZpbmUgQ0NJX1BNVV9DTlRSX0JBU0UoaWR4KQkoKGlkeCkgKiBTWl80SykKIAorI2RlZmluZSBDQ0lfUE1VX0NOVFJfTUFTSwkoKDFVTEwgPDwgMzIpIC0xKQorCiAvKgogICogSW5zdGVhZCBvZiBhbiBldmVudCBpZCB0byBtb25pdG9yIENDSSBjeWNsZXMsIGEgZGVkaWNhdGVkIGNvdW50ZXIgaXMKICAqIHByb3ZpZGVkLiBVc2UgMHhmZiB0byByZXByZXNlbnQgQ0NJIGN5Y2xlcyBhbmQgaG9wZSB0aGF0IG5vIGZ1dHVyZSByZXZpc2lvbnMKQEAgLTE3MCwxOCArMTcyLDI5IEBACiAJW0NDSV9SRVZfUjFdID0gIkNDSV80MDBfcjEiLAogfTsKIAotc3RydWN0IGNjaV9wbXVfZHJ2X2RhdGEgeworc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzIHsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnRzW0NDSV9QTVVfTUFYX0hXX0VWRU5UU107CisJdW5zaWduZWQgbG9uZyB1c2VkX21hc2tbQklUU19UT19MT05HUyhDQ0lfUE1VX01BWF9IV19FVkVOVFMpXTsKKwlyYXdfc3BpbmxvY2tfdCBwbXVfbG9jazsKK307CisKK3N0cnVjdCBjY2lfcG11IHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7Ci0Jc3RydWN0IGFybV9wbXUgKmNjaV9wbXU7CisJc3RydWN0IHBtdSBwbXU7CiAJaW50IG5yX2lycXM7CiAJaW50IGlycXNbQ0NJX1BNVV9NQVhfSFdfRVZFTlRTXTsKIAl1bnNpZ25lZCBsb25nIGFjdGl2ZV9pcnFzOwotCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudHNbQ0NJX1BNVV9NQVhfSFdfRVZFTlRTXTsKLQl1bnNpZ25lZCBsb25nIHVzZWRfbWFza1tCSVRTX1RPX0xPTkdTKENDSV9QTVVfTUFYX0hXX0VWRU5UUyldOwogCXN0cnVjdCBwbXVfcG9ydF9ldmVudF9yYW5nZXMgKnBvcnRfcmFuZ2VzOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzIGh3X2V2ZW50czsKKwlzdHJ1Y3QgY2NpX3BtdV9od19ldmVudHMgaHdfZXZlbnRzOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2aWNlOworCWludCBudW1fZXZlbnRzOworCWF0b21pY190IGFjdGl2ZV9ldmVudHM7CisJc3RydWN0IG11dGV4IHJlc2VydmVfbXV0ZXg7CisJY3B1bWFza190IGNwdXM7CiB9Owotc3RhdGljIHN0cnVjdCBjY2lfcG11X2Rydl9kYXRhICpwbXU7CitzdGF0aWMgc3RydWN0IGNjaV9wbXUgKnBtdTsKKworI2RlZmluZSB0b19jY2lfcG11KGMpCShjb250YWluZXJfb2YoYywgc3RydWN0IGNjaV9wbXUsIHBtdSkpCiAKIHN0YXRpYyBib29sIGlzX2R1cGxpY2F0ZV9pcnEoaW50IGlycSwgaW50ICppcnFzLCBpbnQgbnJfaXJxcykKIHsKQEAgLTI1Miw3ICsyNjUsNyBAQAogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgaW50IHBtdV9pc192YWxpZF9jb3VudGVyKHN0cnVjdCBhcm1fcG11ICpjY2lfcG11LCBpbnQgaWR4KQorc3RhdGljIGludCBwbXVfaXNfdmFsaWRfY291bnRlcihzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSwgaW50IGlkeCkKIHsKIAlyZXR1cm4gQ0NJX1BNVV9DWUNMRV9DTlRSX0lEWCA8PSBpZHggJiYKIAkJaWR4IDw9IENDSV9QTVVfQ05UUl9MQVNUKGNjaV9wbXUpOwpAQCAtMjkzLDE0ICszMDYsOSBAQAogCXJldHVybiBuX2NudHMgKyAxOwogfQogCi1zdGF0aWMgc3RydWN0IHBtdV9od19ldmVudHMgKnBtdV9nZXRfaHdfZXZlbnRzKHZvaWQpCitzdGF0aWMgaW50IHBtdV9nZXRfZXZlbnRfaWR4KHN0cnVjdCBjY2lfcG11X2h3X2V2ZW50cyAqaHcsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlyZXR1cm4gJnBtdS0+aHdfZXZlbnRzOwotfQotCi1zdGF0aWMgaW50IHBtdV9nZXRfZXZlbnRfaWR4KHN0cnVjdCBwbXVfaHdfZXZlbnRzICpodywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCBhcm1fcG11ICpjY2lfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3X2V2ZW50ID0gJmV2ZW50LT5odzsKIAl1bnNpZ25lZCBsb25nIGNjaV9ldmVudCA9IGh3X2V2ZW50LT5jb25maWdfYmFzZSAmIENDSV9QTVVfRVZFTlRfTUFTSzsKIAlpbnQgaWR4OwpAQCAtMzM2LDcgKzM0NCw3IEBACiAJcmV0dXJuIG1hcHBpbmc7CiB9CiAKLXN0YXRpYyBpbnQgcG11X3JlcXVlc3RfaXJxKHN0cnVjdCBhcm1fcG11ICpjY2lfcG11LCBpcnFfaGFuZGxlcl90IGhhbmRsZXIpCitzdGF0aWMgaW50IHBtdV9yZXF1ZXN0X2lycShzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSwgaXJxX2hhbmRsZXJfdCBoYW5kbGVyKQogewogCWludCBpOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBtdV9kZXZpY2UgPSBjY2lfcG11LT5wbGF0X2RldmljZTsKQEAgLTM3MSwxNyArMzc5LDkxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHBtdV9mcmVlX2lycShzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwbXUtPm5yX2lycXM7IGkrKykgeworCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChpLCAmcG11LT5hY3RpdmVfaXJxcykpCisJCQljb250aW51ZTsKKworCQlmcmVlX2lycShwbXUtPmlycXNbaV0sIGNjaV9wbXUpOworCX0KK30KKworc3RhdGljIHUzMiBwbXVfcmVhZF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3X2NvdW50ZXIgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod19jb3VudGVyLT5pZHg7CisJdTMyIHZhbHVlOworCisJaWYgKHVubGlrZWx5KCFwbXVfaXNfdmFsaWRfY291bnRlcihjY2lfcG11LCBpZHgpKSkgeworCQlkZXZfZXJyKCZjY2lfcG11LT5wbGF0X2RldmljZS0+ZGV2LCAiSW52YWxpZCBDQ0kgUE1VIGNvdW50ZXIgJWRcbiIsIGlkeCk7CisJCXJldHVybiAwOworCX0KKwl2YWx1ZSA9IHBtdV9yZWFkX3JlZ2lzdGVyKGlkeCwgQ0NJX1BNVV9DTlRSKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgcG11X3dyaXRlX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod19jb3VudGVyID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdfY291bnRlci0+aWR4OworCisJaWYgKHVubGlrZWx5KCFwbXVfaXNfdmFsaWRfY291bnRlcihjY2lfcG11LCBpZHgpKSkKKwkJZGV2X2VycigmY2NpX3BtdS0+cGxhdF9kZXZpY2UtPmRldiwgIkludmFsaWQgQ0NJIFBNVSBjb3VudGVyICVkXG4iLCBpZHgpOworCWVsc2UKKwkJcG11X3dyaXRlX3JlZ2lzdGVyKHZhbHVlLCBpZHgsIENDSV9QTVVfQ05UUik7Cit9CisKK3N0YXRpYyB1NjQgcG11X2V2ZW50X3VwZGF0ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdTY0IGRlbHRhLCBwcmV2X3Jhd19jb3VudCwgbmV3X3Jhd19jb3VudDsKKworCWRvIHsKKwkJcHJldl9yYXdfY291bnQgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CisJCW5ld19yYXdfY291bnQgPSBwbXVfcmVhZF9jb3VudGVyKGV2ZW50KTsKKwl9IHdoaWxlIChsb2NhbDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCisJCSBuZXdfcmF3X2NvdW50KSAhPSBwcmV2X3Jhd19jb3VudCk7CisKKwlkZWx0YSA9IChuZXdfcmF3X2NvdW50IC0gcHJldl9yYXdfY291bnQpICYgQ0NJX1BNVV9DTlRSX01BU0s7CisKKwlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisKKwlyZXR1cm4gbmV3X3Jhd19jb3VudDsKK30KKworc3RhdGljIHZvaWQgcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXBtdV9ldmVudF91cGRhdGUoZXZlbnQpOworfQorCit2b2lkIHBtdV9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwkvKgorCSAqIFRoZSBDQ0kgUE1VIGNvdW50ZXJzIGhhdmUgYSBwZXJpb2Qgb2YgMl4zMi4gVG8gYWNjb3VudCBmb3IgdGhlCisJICogcG9zc2libGl0eSBvZiBleHRyZW1lIGludGVycnVwdCBsYXRlbmN5IHdlIHByb2dyYW0gZm9yIGEgcGVyaW9kIG9mCisJICogaGFsZiB0aGF0LiBIb3BlZnVsbHkgd2UgY2FuIGhhbmRsZSB0aGUgaW50ZXJydXB0IGJlZm9yZSBhbm90aGVyIDJeMzEKKwkgKiBldmVudHMgb2NjdXIgYW5kIHRoZSBjb3VudGVyIG92ZXJ0YWtlcyBpdHMgcHJldmlvdXMgdmFsdWUuCisJICovCisJdTY0IHZhbCA9IDFVTEwgPDwgMzE7CisJbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgdmFsKTsKKwlwbXVfd3JpdGVfY291bnRlcihldmVudCwgdmFsKTsKK30KKwogc3RhdGljIGlycXJldHVybl90IHBtdV9oYW5kbGVfaXJxKGludCBpcnFfbnVtLCB2b2lkICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSA9IChzdHJ1Y3QgYXJtX3BtdSAqKWRldjsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY2NpX3BtdS0+Z2V0X2h3X2V2ZW50cygpOwotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSBkZXY7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpldmVudHMgPSAmcG11LT5od19ldmVudHM7CiAJaW50IGlkeCwgaGFuZGxlZCA9IElSUV9OT05FOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7Ci0JcmVncyA9IGdldF9pcnFfcmVncygpOwogCS8qCiAJICogSXRlcmF0ZSBvdmVyIGNvdW50ZXJzIGFuZCB1cGRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcGVyZiBldmVudHMuCiAJICogVGhpcyBzaG91bGQgd29yayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgaGF2ZSBwZXItY291bnRlciBvdmVyZmxvdwpAQCAtNDAzLDE1NCArNDg1LDQwNyBAQAogCiAJCXBtdV93cml0ZV9yZWdpc3RlcihDQ0lfUE1VX09WUkZMV19GTEFHLCBpZHgsIENDSV9QTVVfT1ZSRkxXKTsKIAorCQlwbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsKKwkJcG11X2V2ZW50X3NldF9wZXJpb2QoZXZlbnQpOwogCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7Ci0KLQkJYXJtcG11X2V2ZW50X3VwZGF0ZShldmVudCk7Ci0JCXBlcmZfc2FtcGxlX2RhdGFfaW5pdCgmZGF0YSwgMCwgaHdfY291bnRlci0+bGFzdF9wZXJpb2QpOwotCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50KSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAmZGF0YSwgcmVncykpCi0JCQljY2lfcG11LT5kaXNhYmxlKGV2ZW50KTsKIAl9CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCi1zdGF0aWMgdm9pZCBwbXVfZnJlZV9pcnEoc3RydWN0IGFybV9wbXUgKmNjaV9wbXUpCitzdGF0aWMgaW50IGNjaV9wbXVfZ2V0X2h3KHN0cnVjdCBjY2lfcG11ICpjY2lfcG11KQogewotCWludCBpOworCWludCByZXQgPSBwbXVfcmVxdWVzdF9pcnEoY2NpX3BtdSwgcG11X2hhbmRsZV9pcnEpOworCWlmIChyZXQpIHsKKwkJcG11X2ZyZWVfaXJxKGNjaV9wbXUpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KIAotCWZvciAoaSA9IDA7IGkgPCBwbXUtPm5yX2lycXM7IGkrKykgewotCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChpLCAmcG11LT5hY3RpdmVfaXJxcykpCi0JCQljb250aW51ZTsKK3N0YXRpYyB2b2lkIGNjaV9wbXVfcHV0X2h3KHN0cnVjdCBjY2lfcG11ICpjY2lfcG11KQoreworCXBtdV9mcmVlX2lycShjY2lfcG11KTsKK30KIAotCQlmcmVlX2lycShwbXUtPmlycXNbaV0sIGNjaV9wbXUpOworc3RhdGljIHZvaWQgaHdfcGVyZl9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJYXRvbWljX3QgKmFjdGl2ZV9ldmVudHMgPSAmY2NpX3BtdS0+YWN0aXZlX2V2ZW50czsKKwlzdHJ1Y3QgbXV0ZXggKnJlc2VydmVfbXV0ZXggPSAmY2NpX3BtdS0+cmVzZXJ2ZV9tdXRleDsKKworCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKGFjdGl2ZV9ldmVudHMsIHJlc2VydmVfbXV0ZXgpKSB7CisJCWNjaV9wbXVfcHV0X2h3KGNjaV9wbXUpOworCQltdXRleF91bmxvY2socmVzZXJ2ZV9tdXRleCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBwbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3N0YXRpYyB2b2lkIGNjaV9wbXVfZW5hYmxlKHN0cnVjdCBwbXUgKnBtdSkKIHsKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUocG11KTsKKwlzdHJ1Y3QgY2NpX3BtdV9od19ldmVudHMgKmh3X2V2ZW50cyA9ICZjY2lfcG11LT5od19ldmVudHM7CisJaW50IGVuYWJsZWQgPSBiaXRtYXBfd2VpZ2h0KGh3X2V2ZW50cy0+dXNlZF9tYXNrLCBjY2lfcG11LT5udW1fZXZlbnRzKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBhcm1fcG11ICpjY2lfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY2NpX3BtdS0+Z2V0X2h3X2V2ZW50cygpOwotCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod19jb3VudGVyID0gJmV2ZW50LT5odzsKLQlpbnQgaWR4ID0gaHdfY291bnRlci0+aWR4OwotCi0JaWYgKHVubGlrZWx5KCFwbXVfaXNfdmFsaWRfY291bnRlcihjY2lfcG11LCBpZHgpKSkgewotCQlkZXZfZXJyKCZjY2lfcG11LT5wbGF0X2RldmljZS0+ZGV2LCAiSW52YWxpZCBDQ0kgUE1VIGNvdW50ZXIgJWRcbiIsIGlkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKLQotCS8qIENvbmZpZ3VyZSB0aGUgZXZlbnQgdG8gY291bnQsIHVubGVzcyB5b3UgYXJlIGNvdW50aW5nIGN5Y2xlcyAqLwotCWlmIChpZHggIT0gQ0NJX1BNVV9DWUNMRV9DTlRSX0lEWCkKLQkJcG11X3NldF9ldmVudChpZHgsIGh3X2NvdW50ZXItPmNvbmZpZ19iYXNlKTsKLQotCXBtdV9lbmFibGVfY291bnRlcihpZHgpOwotCi0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCBhcm1fcG11ICpjY2lfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdfY291bnRlciA9ICZldmVudC0+aHc7Ci0JaW50IGlkeCA9IGh3X2NvdW50ZXItPmlkeDsKLQotCWlmICh1bmxpa2VseSghcG11X2lzX3ZhbGlkX2NvdW50ZXIoY2NpX3BtdSwgaWR4KSkpIHsKLQkJZGV2X2VycigmY2NpX3BtdS0+cGxhdF9kZXZpY2UtPmRldiwgIkludmFsaWQgQ0NJIFBNVSBjb3VudGVyICVkXG4iLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JcG11X2Rpc2FibGVfY291bnRlcihpZHgpOwotfQotCi1zdGF0aWMgdm9pZCBwbXVfc3RhcnQoc3RydWN0IGFybV9wbXUgKmNjaV9wbXUpCi17CiAJdTMyIHZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjY2lfcG11LT5nZXRfaHdfZXZlbnRzKCk7CiAKLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWVuYWJsZWQpCisJCXJldHVybjsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaHdfZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCiAJLyogRW5hYmxlIGFsbCB0aGUgUE1VIGNvdW50ZXJzLiAqLwogCXZhbCA9IHJlYWRsX3JlbGF4ZWQoY2NpX2N0cmxfYmFzZSArIENDSV9QTUNSKSB8IENDSV9QTUNSX0NFTjsKIAl3cml0ZWwodmFsLCBjY2lfY3RybF9iYXNlICsgQ0NJX1BNQ1IpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZod19ldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAKLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBwbXVfc3RvcChzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSkKK3N0YXRpYyB2b2lkIGNjaV9wbXVfZGlzYWJsZShzdHJ1Y3QgcG11ICpwbXUpCiB7Ci0JdTMyIHZhbDsKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUocG11KTsKKwlzdHJ1Y3QgY2NpX3BtdV9od19ldmVudHMgKmh3X2V2ZW50cyA9ICZjY2lfcG11LT5od19ldmVudHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY2NpX3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXUzMiB2YWw7CiAKLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmh3X2V2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAogCS8qIERpc2FibGUgYWxsIHRoZSBQTVUgY291bnRlcnMuICovCiAJdmFsID0gcmVhZGxfcmVsYXhlZChjY2lfY3RybF9iYXNlICsgQ0NJX1BNQ1IpICYgfkNDSV9QTUNSX0NFTjsKIAl3cml0ZWwodmFsLCBjY2lfY3RybF9iYXNlICsgQ0NJX1BNQ1IpOwotCi0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdfZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdTMyIHBtdV9yZWFkX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorc3RhdGljIHZvaWQgY2NpX3BtdV9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBwbXVfZmxhZ3MpCiB7Ci0Jc3RydWN0IGFybV9wbXUgKmNjaV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwotCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod19jb3VudGVyID0gJmV2ZW50LT5odzsKLQlpbnQgaWR4ID0gaHdfY291bnRlci0+aWR4OwotCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSAmY2NpX3BtdS0+aHdfZXZlbnRzOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod2MtPmlkeDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBUbyBoYW5kbGUgaW50ZXJydXB0IGxhdGVuY3ksIHdlIGFsd2F5cyByZXByb2dyYW0gdGhlIHBlcmlvZAorCSAqIHJlZ2FyZGxlc3NzIG9mIFBFUkZfRUZfUkVMT0FELgorCSAqLworCWlmIChwbXVfZmxhZ3MgJiBQRVJGX0VGX1JFTE9BRCkKKwkJV0FSTl9PTl9PTkNFKCEoaHdjLT5zdGF0ZSAmIFBFUkZfSEVTX1VQVE9EQVRFKSk7CisKKwlod2MtPnN0YXRlID0gMDsKIAogCWlmICh1bmxpa2VseSghcG11X2lzX3ZhbGlkX2NvdW50ZXIoY2NpX3BtdSwgaWR4KSkpIHsKIAkJZGV2X2VycigmY2NpX3BtdS0+cGxhdF9kZXZpY2UtPmRldiwgIkludmFsaWQgQ0NJIFBNVSBjb3VudGVyICVkXG4iLCBpZHgpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KLQl2YWx1ZSA9IHBtdV9yZWFkX3JlZ2lzdGVyKGlkeCwgQ0NJX1BNVV9DTlRSKTsKIAotCXJldHVybiB2YWx1ZTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmh3X2V2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgZXZlbnQgdG8gY291bnQsIHVubGVzcyB5b3UgYXJlIGNvdW50aW5nIGN5Y2xlcyAqLworCWlmIChpZHggIT0gQ0NJX1BNVV9DWUNMRV9DTlRSX0lEWCkKKwkJcG11X3NldF9ldmVudChpZHgsIGh3Yy0+Y29uZmlnX2Jhc2UpOworCisJcG11X2V2ZW50X3NldF9wZXJpb2QoZXZlbnQpOworCXBtdV9lbmFibGVfY291bnRlcihpZHgpOworCisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3X2V2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgcG11X3dyaXRlX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1MzIgdmFsdWUpCitzdGF0aWMgdm9pZCBjY2lfcG11X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgcG11X2ZsYWdzKQogewotCXN0cnVjdCBhcm1fcG11ICpjY2lfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdfY291bnRlciA9ICZldmVudC0+aHc7Ci0JaW50IGlkeCA9IGh3X2NvdW50ZXItPmlkeDsKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJaW50IGlkeCA9IGh3Yy0+aWR4OwogCi0JaWYgKHVubGlrZWx5KCFwbXVfaXNfdmFsaWRfY291bnRlcihjY2lfcG11LCBpZHgpKSkKKwlpZiAoaHdjLT5zdGF0ZSAmIFBFUkZfSEVTX1NUT1BQRUQpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseSghcG11X2lzX3ZhbGlkX2NvdW50ZXIoY2NpX3BtdSwgaWR4KSkpIHsKIAkJZGV2X2VycigmY2NpX3BtdS0+cGxhdF9kZXZpY2UtPmRldiwgIkludmFsaWQgQ0NJIFBNVSBjb3VudGVyICVkXG4iLCBpZHgpOwotCWVsc2UKLQkJcG11X3dyaXRlX3JlZ2lzdGVyKHZhbHVlLCBpZHgsIENDSV9QTVVfQ05UUik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIGFsd2F5cyByZXByb2dyYW0gdGhlIGNvdW50ZXIsIHNvIGlnbm9yZSBQRVJGX0VGX1VQREFURS4gU2VlCisJICogY2NpX3BtdV9zdGFydCgpCisJICovCisJcG11X2Rpc2FibGVfY291bnRlcihpZHgpOworCXBtdV9ldmVudF91cGRhdGUoZXZlbnQpOworCWh3Yy0+c3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBFRCB8IFBFUkZfSEVTX1VQVE9EQVRFOwogfQogCi1zdGF0aWMgaW50IGNjaV9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgY2NpX3BtdV9hZGQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCiB7Ci0JKmNjaV9wbXUgPSAoc3RydWN0IGFybV9wbXUpewotCQkubmFtZQkJICA9IHBtdV9uYW1lc1twcm9iZV9jY2lfcmV2aXNpb24oKV0sCi0JCS5tYXhfcGVyaW9kICAgICAgID0gKDFMTFUgPDwgMzIpIC0gMSwKLQkJLmdldF9od19ldmVudHMgICAgPSBwbXVfZ2V0X2h3X2V2ZW50cywKLQkJLmdldF9ldmVudF9pZHggICAgPSBwbXVfZ2V0X2V2ZW50X2lkeCwKLQkJLm1hcF9ldmVudCAgICAgICAgPSBwbXVfbWFwX2V2ZW50LAotCQkucmVxdWVzdF9pcnEgICAgICA9IHBtdV9yZXF1ZXN0X2lycSwKLQkJLmhhbmRsZV9pcnEgICAgICAgPSBwbXVfaGFuZGxlX2lycSwKLQkJLmZyZWVfaXJxICAgICAgICAgPSBwbXVfZnJlZV9pcnEsCi0JCS5lbmFibGUgICAgICAgICAgID0gcG11X2VuYWJsZV9ldmVudCwKLQkJLmRpc2FibGUgICAgICAgICAgPSBwbXVfZGlzYWJsZV9ldmVudCwKLQkJLnN0YXJ0ICAgICAgICAgICAgPSBwbXVfc3RhcnQsCi0JCS5zdG9wICAgICAgICAgICAgID0gcG11X3N0b3AsCi0JCS5yZWFkX2NvdW50ZXIgICAgID0gcG11X3JlYWRfY291bnRlciwKLQkJLndyaXRlX2NvdW50ZXIgICAgPSBwbXVfd3JpdGVfY291bnRlciwKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSAmY2NpX3BtdS0+aHdfZXZlbnRzOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHg7CisJaW50IGVyciA9IDA7CisKKwlwZXJmX3BtdV9kaXNhYmxlKGV2ZW50LT5wbXUpOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHNwYWNlIGZvciB0aGUgY291bnRlciB0aGVuIGZpbmlzaCBlYXJseS4gKi8KKwlpZHggPSBwbXVfZ2V0X2V2ZW50X2lkeChod19ldmVudHMsIGV2ZW50KTsKKwlpZiAoaWR4IDwgMCkgeworCQllcnIgPSBpZHg7CisJCWdvdG8gb3V0OworCX0KKworCWV2ZW50LT5ody5pZHggPSBpZHg7CisJaHdfZXZlbnRzLT5ldmVudHNbaWR4XSA9IGV2ZW50OworCisJaHdjLT5zdGF0ZSA9IFBFUkZfSEVTX1NUT1BQRUQgfCBQRVJGX0hFU19VUFRPREFURTsKKwlpZiAoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKQorCQljY2lfcG11X3N0YXJ0KGV2ZW50LCBQRVJGX0VGX1JFTE9BRCk7CisKKwkvKiBQcm9wYWdhdGUgb3VyIGNoYW5nZXMgdG8gdGhlIHVzZXJzcGFjZSBtYXBwaW5nLiAqLworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKworb3V0OgorCXBlcmZfcG11X2VuYWJsZShldmVudC0+cG11KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBjY2lfcG11X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSA9IHRvX2NjaV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSAmY2NpX3BtdS0+aHdfZXZlbnRzOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod2MtPmlkeDsKKworCWNjaV9wbXVfc3RvcChldmVudCwgUEVSRl9FRl9VUERBVEUpOworCWh3X2V2ZW50cy0+ZXZlbnRzW2lkeF0gPSBOVUxMOworCWNsZWFyX2JpdChpZHgsIGh3X2V2ZW50cy0+dXNlZF9tYXNrKTsKKworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKK30KKworc3RhdGljIGludAordmFsaWRhdGVfZXZlbnQoc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpod19ldmVudHMsCisJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpZiAoaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQorCQlyZXR1cm4gMTsKKworCWlmIChldmVudC0+c3RhdGUgPCBQRVJGX0VWRU5UX1NUQVRFX09GRikKKwkJcmV0dXJuIDE7CisKKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfT0ZGICYmICFldmVudC0+YXR0ci5lbmFibGVfb25fZXhlYykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gcG11X2dldF9ldmVudF9pZHgoaHdfZXZlbnRzLCBldmVudCkgPj0gMDsKK30KKworc3RhdGljIGludAordmFsaWRhdGVfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpzaWJsaW5nLCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlzdHJ1Y3QgY2NpX3BtdV9od19ldmVudHMgZmFrZV9wbXUgPSB7CisJCS8qCisJCSAqIEluaXRpYWxpc2UgdGhlIGZha2UgUE1VLiBXZSBvbmx5IG5lZWQgdG8gcG9wdWxhdGUgdGhlCisJCSAqIHVzZWRfbWFzayBmb3IgdGhlIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24uCisJCSAqLworCQkudXNlZF9tYXNrID0gQ1BVX0JJVFNfTk9ORSwKKwl9OworCisJaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGxlYWRlcikpCisJCXJldHVybiAtRUlOVkFMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzaWJsaW5nLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBzaWJsaW5nKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBldmVudCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19faHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgbWFwcGluZzsKKworCW1hcHBpbmcgPSBwbXVfbWFwX2V2ZW50KGV2ZW50KTsKKworCWlmIChtYXBwaW5nIDwgMCkgeworCQlwcl9kZWJ1ZygiZXZlbnQgJXg6JWxseCBub3Qgc3VwcG9ydGVkXG4iLCBldmVudC0+YXR0ci50eXBlLAorCQkJIGV2ZW50LT5hdHRyLmNvbmZpZyk7CisJCXJldHVybiBtYXBwaW5nOworCX0KKworCS8qCisJICogV2UgZG9uJ3QgYXNzaWduIGFuIGluZGV4IHVudGlsIHdlIGFjdHVhbGx5IHBsYWNlIHRoZSBldmVudCBvbnRvCisJICogaGFyZHdhcmUuIFVzZSAtMSB0byBzaWduaWZ5IHRoYXQgd2UgaGF2ZW4ndCBkZWNpZGVkIHdoZXJlIHRvIHB1dCBpdAorCSAqIHlldC4KKwkgKi8KKwlod2MtPmlkeAkJPSAtMTsKKwlod2MtPmNvbmZpZ19iYXNlCT0gMDsKKwlod2MtPmNvbmZpZwkJPSAwOworCWh3Yy0+ZXZlbnRfYmFzZQkJPSAwOworCisJLyoKKwkgKiBTdG9yZSB0aGUgZXZlbnQgZW5jb2RpbmcgaW50byB0aGUgY29uZmlnX2Jhc2UgZmllbGQuCisJICovCisJaHdjLT5jb25maWdfYmFzZQkgICAgfD0gKHVuc2lnbmVkIGxvbmcpbWFwcGluZzsKKworCS8qCisJICogTGltaXQgdGhlIHNhbXBsZV9wZXJpb2QgdG8gaGFsZiBvZiB0aGUgY291bnRlciB3aWR0aC4gVGhhdCB3YXksIHRoZQorCSAqIG5ldyBjb3VudGVyIHZhbHVlIGlzIGZhciBsZXNzIGxpa2VseSB0byBvdmVydGFrZSB0aGUgcHJldmlvdXMgb25lCisJICogdW5sZXNzIHlvdSBoYXZlIHNvbWUgc2VyaW91cyBJUlEgbGF0ZW5jeSBpc3N1ZXMuCisJICovCisJaHdjLT5zYW1wbGVfcGVyaW9kICA9IENDSV9QTVVfQ05UUl9NQVNLID4+IDE7CisJaHdjLT5sYXN0X3BlcmlvZCAgICA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKworCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KSB7CisJCWlmICh2YWxpZGF0ZV9ncm91cChldmVudCkgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjaV9wbXVfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOworCWF0b21pY190ICphY3RpdmVfZXZlbnRzID0gJmNjaV9wbXUtPmFjdGl2ZV9ldmVudHM7CisJaW50IGVyciA9IDA7CisJaW50IGNwdTsKKworCWlmIChldmVudC0+YXR0ci50eXBlICE9IGV2ZW50LT5wbXUtPnR5cGUpCisJCXJldHVybiAtRU5PRU5UOworCisJLyogU2hhcmVkIGJ5IGFsbCBDUFVzLCBubyBtZWFuaW5nZnVsIHN0YXRlIHRvIHNhbXBsZSAqLworCWlmIChpc19zYW1wbGluZ19ldmVudChldmVudCkgfHwgZXZlbnQtPmF0dGFjaF9zdGF0ZSAmIFBFUkZfQVRUQUNIX1RBU0spCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIFdlIGhhdmUgbm8gZmlsdGVyaW5nIG9mIGFueSBraW5kICovCisJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfdXNlcgl8fAorCSAgICBldmVudC0+YXR0ci5leGNsdWRlX2tlcm5lbAl8fAorCSAgICBldmVudC0+YXR0ci5leGNsdWRlX2h2CXx8CisJICAgIGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaWRsZQl8fAorCSAgICBldmVudC0+YXR0ci5leGNsdWRlX2hvc3QJfHwKKwkgICAgZXZlbnQtPmF0dHIuZXhjbHVkZV9ndWVzdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIEZvbGxvd2luZyB0aGUgZXhhbXBsZSBzZXQgYnkgb3RoZXIgInVuY29yZSIgUE1Vcywgd2UgYWNjZXB0IGFueSBDUFUKKwkgKiBhbmQgcmV3cml0ZSBpdHMgYWZmaW5pdHkgZHluYW1pY2FsbHkgcmF0aGVyIHRoYW4gaGF2aW5nIHBlcmYgY29yZQorCSAqIGhhbmRsZSBjcHUgPT0gLTEgYW5kIHBpZCA9PSAtMSBmb3IgdGhpcyBjYXNlLgorCSAqCisJICogVGhlIHBlcmYgY29yZSB3aWxsIHBpbiBvbmxpbmUgQ1BVcyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgY2FsbCBhbmQKKwkgKiB0aGUgZXZlbnQgYmVpbmcgaW5zdGFsbGVkIGludG8gaXRzIGNvbnRleHQsIHNvIHRoZSBQTVUncyBDUFUgY2FuJ3QKKwkgKiBjaGFuZ2UgdW5kZXIgb3VyIGZlZXQuCisJICovCisJY3B1ID0gY3B1bWFza19maXJzdCgmY2NpX3BtdS0+Y3B1cyk7CisJaWYgKGV2ZW50LT5jcHUgPCAwIHx8IGNwdSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWV2ZW50LT5jcHUgPSBjcHU7CisKKwlldmVudC0+ZGVzdHJveSA9IGh3X3BlcmZfZXZlbnRfZGVzdHJveTsKKwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oYWN0aXZlX2V2ZW50cykpIHsKKwkJbXV0ZXhfbG9jaygmY2NpX3BtdS0+cmVzZXJ2ZV9tdXRleCk7CisJCWlmIChhdG9taWNfcmVhZChhY3RpdmVfZXZlbnRzKSA9PSAwKQorCQkJZXJyID0gY2NpX3BtdV9nZXRfaHcoY2NpX3BtdSk7CisJCWlmICghZXJyKQorCQkJYXRvbWljX2luYyhhY3RpdmVfZXZlbnRzKTsKKwkJbXV0ZXhfdW5sb2NrKCZjY2lfcG11LT5yZXNlcnZlX211dGV4KTsKKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IF9faHdfcGVyZl9ldmVudF9pbml0KGV2ZW50KTsKKwlpZiAoZXJyKQorCQlod19wZXJmX2V2ZW50X2Rlc3Ryb3koZXZlbnQpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHNzaXplX3QgcG11X2F0dHJfY3B1bWFza19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJaW50IG4gPSBjcHVsaXN0X3NjbnByaW50ZihidWYsIFBBR0VfU0laRSAtIDIsICZwbXUtPmNwdXMpOworCisJYnVmW24rK10gPSAnXG4nOworCWJ1ZltuXSA9ICdcMCc7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihjcHVtYXNrLCBTX0lSVUdPLCBwbXVfYXR0cl9jcHVtYXNrX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcG11X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2NwdW1hc2suYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG11X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gcG11X2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnBtdV9hdHRyX2dyb3Vwc1tdID0geworCSZwbXVfYXR0cl9ncm91cCwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGNjaV9wbXVfaW5pdChzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljaGFyICpuYW1lID0gcG11X25hbWVzW3Byb2JlX2NjaV9yZXZpc2lvbigpXTsKKwljY2lfcG11LT5wbXUgPSAoc3RydWN0IHBtdSkgeworCQkubmFtZQkJPSBwbXVfbmFtZXNbcHJvYmVfY2NpX3JldmlzaW9uKCldLAorCQkudGFza19jdHhfbnIJPSBwZXJmX2ludmFsaWRfY29udGV4dCwKKwkJLnBtdV9lbmFibGUJPSBjY2lfcG11X2VuYWJsZSwKKwkJLnBtdV9kaXNhYmxlCT0gY2NpX3BtdV9kaXNhYmxlLAorCQkuZXZlbnRfaW5pdAk9IGNjaV9wbXVfZXZlbnRfaW5pdCwKKwkJLmFkZAkJPSBjY2lfcG11X2FkZCwKKwkJLmRlbAkJPSBjY2lfcG11X2RlbCwKKwkJLnN0YXJ0CQk9IGNjaV9wbXVfc3RhcnQsCisJCS5zdG9wCQk9IGNjaV9wbXVfc3RvcCwKKwkJLnJlYWQJCT0gcG11X3JlYWQsCisJCS5hdHRyX2dyb3Vwcwk9IHBtdV9hdHRyX2dyb3VwcywKIAl9OwogCiAJY2NpX3BtdS0+cGxhdF9kZXZpY2UgPSBwZGV2OwogCWNjaV9wbXUtPm51bV9ldmVudHMgPSBwbXVfZ2V0X21heF9jb3VudGVycygpOwogCi0JcmV0dXJuIGFybXBtdV9yZWdpc3RlcihjY2lfcG11LCAtMSk7CisJcmV0dXJuIHBlcmZfcG11X3JlZ2lzdGVyKCZjY2lfcG11LT5wbXUsIG5hbWUsIC0xKTsKIH0KIAorc3RhdGljIGludCBjY2lfcG11X2NwdV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IChsb25nKWhjcHU7CisJdW5zaWduZWQgaW50IHRhcmdldDsKKworCXN3aXRjaCAoYWN0aW9uICYgfkNQVV9UQVNLU19GUk9aRU4pIHsKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJCWlmICghY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoY3B1LCAmcG11LT5jcHVzKSkKKwkJCWJyZWFrOworCQl0YXJnZXQgPSBjcHVtYXNrX2FueV9idXQoY3B1X29ubGluZV9tYXNrLCBjcHUpOworCQlpZiAodGFyZ2V0IDwgMCkgLy8gVVAsIGxhc3QgQ1BVCisJCQlicmVhazsKKwkJLyoKKwkJICogVE9ETzogbWlncmF0ZSBjb250ZXh0IG9uY2UgY29yZSByYWNlcyBvbiBldmVudC0+Y3R4IGhhdmUKKwkJICogYmVlbiBmaXhlZC4KKwkJICovCisJCWNwdW1hc2tfc2V0X2NwdSh0YXJnZXQsICZwbXUtPmNwdXMpOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2NpX3BtdV9jcHVfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBjY2lfcG11X2NwdV9ub3RpZmllciwKKwkvKgorCSAqIHRvIG1pZ3JhdGUgdW5jb3JlIGV2ZW50cywgb3VyIG5vdGlmaWVyIHNob3VsZCBiZSBleGVjdXRlZAorCSAqIGJlZm9yZSBwZXJmIGNvcmUncyBub3RpZmllci4KKwkgKi8KKwkucHJpb3JpdHkJPSBDUFVfUFJJX1BFUkYgKyAxLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXJtX2NjaV9wbXVfbWF0Y2hlc1tdID0gewogCXsKIAkJLmNvbXBhdGlibGUgPSAiYXJtLGNjaS00MDAtcG11IiwKQEAgLTYwNCwxNSArOTM5LDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXBtdS0+Y2NpX3BtdSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKihwbXUtPmNjaV9wbXUpKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwbXUtPmNjaV9wbXUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcG11LT5od19ldmVudHMuZXZlbnRzID0gcG11LT5ldmVudHM7Ci0JcG11LT5od19ldmVudHMudXNlZF9tYXNrID0gcG11LT51c2VkX21hc2s7CiAJcmF3X3NwaW5fbG9ja19pbml0KCZwbXUtPmh3X2V2ZW50cy5wbXVfbG9jayk7CisJbXV0ZXhfaW5pdCgmcG11LT5yZXNlcnZlX211dGV4KTsKKwlhdG9taWNfc2V0KCZwbXUtPmFjdGl2ZV9ldmVudHMsIDApOworCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksICZwbXUtPmNwdXMpOwogCi0JcmV0ID0gY2NpX3BtdV9pbml0KHBtdS0+Y2NpX3BtdSwgcGRldik7CisJcmV0ID0gcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjY2lfcG11X2NwdV9uYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNjaV9wbXVfaW5pdChwbXUsIHBkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL2JyY21zdGJfZ2lzYi5jIGIvZHJpdmVycy9idXMvYnJjbXN0Yl9naXNiLmMKaW5kZXggZjJjZDZhMmQuLjQ2ZGU4ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL2JyY21zdGJfZ2lzYi5jCisrKyBiL2RyaXZlcnMvYnVzL2JyY21zdGJfZ2lzYi5jCkBAIC0yMywzNSArMjMsMTAzIEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAorI2lmZGVmIENPTkZJR19BUk0KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorI2VuZGlmCiAKLSNkZWZpbmUgQVJCX1RJTUVSCQkJMHgwMDgKLSNkZWZpbmUgQVJCX0VSUl9DQVBfQ0xSCQkJMHg3ZTQKICNkZWZpbmUgIEFSQl9FUlJfQ0FQX0NMRUFSCQkoMSA8PCAwKQotI2RlZmluZSBBUkJfRVJSX0NBUF9ISV9BRERSCQkweDdlOAotI2RlZmluZSBBUkJfRVJSX0NBUF9BRERSCQkweDdlYwotI2RlZmluZSBBUkJfRVJSX0NBUF9EQVRBCQkweDdmMAotI2RlZmluZSBBUkJfRVJSX0NBUF9TVEFUVVMJCTB4N2Y0CiAjZGVmaW5lICBBUkJfRVJSX0NBUF9TVEFUVVNfVElNRU9VVAkoMSA8PCAxMikKICNkZWZpbmUgIEFSQl9FUlJfQ0FQX1NUQVRVU19URUEJCSgxIDw8IDExKQogI2RlZmluZSAgQVJCX0VSUl9DQVBfU1RBVFVTX0JTX1NISUZUCSgxIDw8IDIpCiAjZGVmaW5lICBBUkJfRVJSX0NBUF9TVEFUVVNfQlNfTUFTSwkweDNjCiAjZGVmaW5lICBBUkJfRVJSX0NBUF9TVEFUVVNfV1JJVEUJKDEgPDwgMSkKICNkZWZpbmUgIEFSQl9FUlJfQ0FQX1NUQVRVU19WQUxJRAkoMSA8PCAwKQotI2RlZmluZSBBUkJfRVJSX0NBUF9NQVNURVIJCTB4N2Y4CisKK2VudW0geworCUFSQl9USU1FUiwKKwlBUkJfRVJSX0NBUF9DTFIsCisJQVJCX0VSUl9DQVBfSElfQUREUiwKKwlBUkJfRVJSX0NBUF9BRERSLAorCUFSQl9FUlJfQ0FQX0RBVEEsCisJQVJCX0VSUl9DQVBfU1RBVFVTLAorCUFSQl9FUlJfQ0FQX01BU1RFUiwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZ2lzYl9vZmZzZXRzX2JjbTcwMzhbXSA9IHsKKwlbQVJCX1RJTUVSXQkJPSAweDAwYywKKwlbQVJCX0VSUl9DQVBfQ0xSXQk9IDB4MGM0LAorCVtBUkJfRVJSX0NBUF9ISV9BRERSXQk9IC0xLAorCVtBUkJfRVJSX0NBUF9BRERSXQk9IDB4MGM4LAorCVtBUkJfRVJSX0NBUF9EQVRBXQk9IDB4MGNjLAorCVtBUkJfRVJSX0NBUF9TVEFUVVNdCT0gMHgwZDAsCisJW0FSQl9FUlJfQ0FQX01BU1RFUl0JPSAtMSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZ2lzYl9vZmZzZXRzX2JjbTc0MDBbXSA9IHsKKwlbQVJCX1RJTUVSXQkJPSAweDAwYywKKwlbQVJCX0VSUl9DQVBfQ0xSXQk9IDB4MGM4LAorCVtBUkJfRVJSX0NBUF9ISV9BRERSXQk9IC0xLAorCVtBUkJfRVJSX0NBUF9BRERSXQk9IDB4MGNjLAorCVtBUkJfRVJSX0NBUF9EQVRBXQk9IDB4MGQwLAorCVtBUkJfRVJSX0NBUF9TVEFUVVNdCT0gMHgwZDQsCisJW0FSQl9FUlJfQ0FQX01BU1RFUl0JPSAweDBkOCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZ2lzYl9vZmZzZXRzX2JjbTc0MzVbXSA9IHsKKwlbQVJCX1RJTUVSXQkJPSAweDAwYywKKwlbQVJCX0VSUl9DQVBfQ0xSXQk9IDB4MTY4LAorCVtBUkJfRVJSX0NBUF9ISV9BRERSXQk9IC0xLAorCVtBUkJfRVJSX0NBUF9BRERSXQk9IDB4MTZjLAorCVtBUkJfRVJSX0NBUF9EQVRBXQk9IDB4MTcwLAorCVtBUkJfRVJSX0NBUF9TVEFUVVNdCT0gMHgxNzQsCisJW0FSQl9FUlJfQ0FQX01BU1RFUl0JPSAweDE3OCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZ2lzYl9vZmZzZXRzX2JjbTc0NDVbXSA9IHsKKwlbQVJCX1RJTUVSXQkJPSAweDAwOCwKKwlbQVJCX0VSUl9DQVBfQ0xSXQk9IDB4N2U0LAorCVtBUkJfRVJSX0NBUF9ISV9BRERSXQk9IDB4N2U4LAorCVtBUkJfRVJSX0NBUF9BRERSXQk9IDB4N2VjLAorCVtBUkJfRVJSX0NBUF9EQVRBXQk9IDB4N2YwLAorCVtBUkJfRVJSX0NBUF9TVEFUVVNdCT0gMHg3ZjQsCisJW0FSQl9FUlJfQ0FQX01BU1RFUl0JPSAweDdmOCwKK307CiAKIHN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSB7CiAJdm9pZCBfX2lvbWVtCSpiYXNlOworCWNvbnN0IGludAkqZ2lzYl9vZmZzZXRzOwogCXN0cnVjdCBtdXRleAlsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsKIAl1MzIgdmFsaWRfbWFzazsKIAljb25zdCBjaGFyICptYXN0ZXJfbmFtZXNbc2l6ZW9mKHUzMikgKiBCSVRTX1BFUl9CWVRFXTsKKwl1MzIgc2F2ZWRfdGltZW91dDsKIH07CiAKIHN0YXRpYyBMSVNUX0hFQUQoYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2VfbGlzdCk7CiAKK3N0YXRpYyB1MzIgZ2lzYl9yZWFkKHN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSAqZ2RldiwgaW50IHJlZykKK3sKKwlpbnQgb2Zmc2V0ID0gZ2Rldi0+Z2lzYl9vZmZzZXRzW3JlZ107CisKKwkvKiByZXR1cm4gMSBpZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBoYXZlIEFSQl9FUlJfQ0FQX01BU1RFUiAqLworCWlmIChvZmZzZXQgPT0gLTEpCisJCXJldHVybiAxOworCisJcmV0dXJuIGlvcmVhZDMyKGdkZXYtPmJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBnaXNiX3dyaXRlKHN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSAqZ2RldiwgdTMyIHZhbCwgaW50IHJlZykKK3sKKwlpbnQgb2Zmc2V0ID0gZ2Rldi0+Z2lzYl9vZmZzZXRzW3JlZ107CisKKwlpZiAob2Zmc2V0ID09IC0xKQorCQlyZXR1cm47CisJaW93cml0ZTMyKHZhbCwgZ2Rldi0+YmFzZSArIHJlZyk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGdpc2JfYXJiX2dldF90aW1lb3V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgIGNoYXIgKmJ1ZikKQEAgLTYxLDcgKzEyOSw3IEBACiAJdTMyIHRpbWVvdXQ7CiAKIAltdXRleF9sb2NrKCZnZGV2LT5sb2NrKTsKLQl0aW1lb3V0ID0gaW9yZWFkMzIoZ2Rldi0+YmFzZSArIEFSQl9USU1FUik7CisJdGltZW91dCA9IGdpc2JfcmVhZChnZGV2LCBBUkJfVElNRVIpOwogCW11dGV4X3VubG9jaygmZ2Rldi0+bG9jayk7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIHRpbWVvdXQpOwpAQCAtODMsNyArMTUxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZnZGV2LT5sb2NrKTsKLQlpb3dyaXRlMzIodmFsLCBnZGV2LT5iYXNlICsgQVJCX1RJTUVSKTsKKwlnaXNiX3dyaXRlKGdkZXYsIHZhbCwgQVJCX1RJTUVSKTsKIAltdXRleF91bmxvY2soJmdkZXYtPmxvY2spOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtMTEwLDE4ICsxNzgsMTggQEAKIAljb25zdCBjaGFyICptX25hbWU7CiAJY2hhciBtX2ZtdFsxMV07CiAKLQljYXBfc3RhdHVzID0gaW9yZWFkMzIoZ2Rldi0+YmFzZSArIEFSQl9FUlJfQ0FQX1NUQVRVUyk7CisJY2FwX3N0YXR1cyA9IGdpc2JfcmVhZChnZGV2LCBBUkJfRVJSX0NBUF9TVEFUVVMpOwogCiAJLyogSW52YWxpZCBjYXB0dXJlZCBhZGRyZXNzLCBiYWlsIG91dCAqLwogCWlmICghKGNhcF9zdGF0dXMgJiBBUkJfRVJSX0NBUF9TVEFUVVNfVkFMSUQpKQogCQlyZXR1cm4gMTsKIAogCS8qIFJlYWQgdGhlIGFkZHJlc3MgYW5kIG1hc3RlciAqLwotCWFyYl9hZGRyID0gaW9yZWFkMzIoZ2Rldi0+YmFzZSArIEFSQl9FUlJfQ0FQX0FERFIpICYgMHhmZmZmZmZmZjsKKwlhcmJfYWRkciA9IGdpc2JfcmVhZChnZGV2LCBBUkJfRVJSX0NBUF9BRERSKSAmIDB4ZmZmZmZmZmY7CiAjaWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWVNfQUREUl9UXzY0QklUKSkKLQlhcmJfYWRkciB8PSAodTY0KWlvcmVhZDMyKGdkZXYtPmJhc2UgKyBBUkJfRVJSX0NBUF9ISV9BRERSKSA8PCAzMjsKKwlhcmJfYWRkciB8PSAodTY0KWdpc2JfcmVhZChnZGV2LCBBUkJfRVJSX0NBUF9ISV9BRERSKSA8PCAzMjsKICNlbmRpZgotCW1hc3RlciA9IGlvcmVhZDMyKGdkZXYtPmJhc2UgKyBBUkJfRVJSX0NBUF9NQVNURVIpOworCW1hc3RlciA9IGdpc2JfcmVhZChnZGV2LCBBUkJfRVJSX0NBUF9NQVNURVIpOwogCiAJbV9uYW1lID0gYnJjbXN0Yl9naXNiX21hc3Rlcl90b19zdHIoZ2RldiwgbWFzdGVyKTsKIAlpZiAoIW1fbmFtZSkgewpAQCAtMTM2LDExICsyMDQsMTIgQEAKIAkJbV9uYW1lKTsKIAogCS8qIGNsZWFyIHRoZSBHSVNCIGVycm9yICovCi0JaW93cml0ZTMyKEFSQl9FUlJfQ0FQX0NMRUFSLCBnZGV2LT5iYXNlICsgQVJCX0VSUl9DQVBfQ0xSKTsKKwlnaXNiX3dyaXRlKGdkZXYsIEFSQl9FUlJfQ0FQX0NMRUFSLCBBUkJfRVJSX0NBUF9DTFIpOwogCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJNCiBzdGF0aWMgaW50IGJyY21zdGJfYnVzX2Vycm9yX2hhbmRsZXIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAogCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0xNTksMTIgKzIyOCw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQotCi12b2lkIF9faW5pdCBicmNtc3RiX2hvb2tfZmF1bHRfY29kZSh2b2lkKQotewotCWhvb2tfZmF1bHRfY29kZSgyMiwgYnJjbXN0Yl9idXNfZXJyb3JfaGFuZGxlciwgU0lHQlVTLCAwLAotCQkJImltcHJlY2lzZSBleHRlcm5hbCBhYm9ydCIpOwotfQorI2VuZGlmCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBicmNtc3RiX2dpc2JfdGltZW91dF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKQEAgLTE5MiwxMCArMjU2LDIwIEBACiAJLmF0dHJzID0gZ2lzYl9hcmJfc3lzZnNfYXR0cnMsCiB9OwogCi1zdGF0aWMgaW50IGJyY21zdGJfZ2lzYl9hcmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJyY21zdGJfZ2lzYl9hcmJfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImJyY20sZ2lzYi1hcmIiLCAgICAgICAgIC5kYXRhID0gZ2lzYl9vZmZzZXRzX2JjbTc0NDUgfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNzQ0NS1naXNiLWFyYiIsIC5kYXRhID0gZ2lzYl9vZmZzZXRzX2JjbTc0NDUgfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNzQzNS1naXNiLWFyYiIsIC5kYXRhID0gZ2lzYl9vZmZzZXRzX2JjbTc0MzUgfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNzQwMC1naXNiLWFyYiIsIC5kYXRhID0gZ2lzYl9vZmZzZXRzX2JjbTc0MDAgfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNzAzOC1naXNiLWFyYiIsIC5kYXRhID0gZ2lzYl9vZmZzZXRzX2JjbTcwMzggfSwKKwl7IH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBicmNtc3RiX2dpc2JfYXJiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbiA9IHBkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSAqZ2RldjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJaW50IGVyciwgdGltZW91dF9pcnEsIHRlYV9pcnE7CiAJdW5zaWduZWQgaW50IG51bV9tYXN0ZXJzLCBqID0gMDsKQEAgLTIxNiw2ICsyOTAsMTMgQEAKIAlpZiAoSVNfRVJSKGdkZXYtPmJhc2UpKQogCQlyZXR1cm4gUFRSX0VSUihnZGV2LT5iYXNlKTsKIAorCW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShicmNtc3RiX2dpc2JfYXJiX29mX21hdGNoLCBkbik7CisJaWYgKCFvZl9pZCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBsb29rIHVwIGNvbXBhdGlibGUgc3RyaW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWdkZXYtPmdpc2Jfb2Zmc2V0cyA9IG9mX2lkLT5kYXRhOworCiAJZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCB0aW1lb3V0X2lycSwKIAkJCQlicmNtc3RiX2dpc2JfdGltZW91dF9oYW5kbGVyLCAwLCBwZGV2LT5uYW1lLAogCQkJCWdkZXYpOwpAQCAtMjYxLDI5ICszNDIsNjMgQEAKIAogCWxpc3RfYWRkX3RhaWwoJmdkZXYtPm5leHQsICZicmNtc3RiX2dpc2JfYXJiX2RldmljZV9saXN0KTsKIAorI2lmZGVmIENPTkZJR19BUk0KKwlob29rX2ZhdWx0X2NvZGUoMjIsIGJyY21zdGJfYnVzX2Vycm9yX2hhbmRsZXIsIFNJR0JVUywgMCwKKwkJCSJpbXByZWNpc2UgZXh0ZXJuYWwgYWJvcnQiKTsKKyNlbmRpZgorCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlZ2lzdGVyZWQgbWVtOiAlcCwgaXJxczogJWQsICVkXG4iLAogCQkJZ2Rldi0+YmFzZSwgdGltZW91dF9pcnEsIHRlYV9pcnEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJyY21zdGJfZ2lzYl9hcmJfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImJyY20sZ2lzYi1hcmIiIH0sCi0JeyB9LAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBicmNtc3RiX2dpc2JfYXJiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2UgKmdkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWdkZXYtPnNhdmVkX3RpbWVvdXQgPSBnaXNiX3JlYWQoZ2RldiwgQVJCX1RJTUVSKTsKKworCXJldHVybiAwOworfQorCisvKiBNYWtlIHN1cmUgd2UgcHJvdmlkZSB0aGUgc2FtZSB0aW1lb3V0IHZhbHVlIHRoYXQgd2FzIGNvbmZpZ3VyZWQgYmVmb3JlLCBhbmQKKyAqIGRvIHRoaXMgYmVmb3JlIHRoZSBHSVNCIHRpbWVvdXQgaW50ZXJydXB0IGhhbmRsZXIgaGFzIGFueSBjaGFuY2UgdG8gcnVuLgorICovCitzdGF0aWMgaW50IGJyY21zdGJfZ2lzYl9hcmJfcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGJyY21zdGJfZ2lzYl9hcmJfZGV2aWNlICpnZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlnaXNiX3dyaXRlKGdkZXYsIGdkZXYtPnNhdmVkX3RpbWVvdXQsIEFSQl9USU1FUik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGJyY21zdGJfZ2lzYl9hcmJfc3VzcGVuZCAgICAgICBOVUxMCisjZGVmaW5lIGJyY21zdGJfZ2lzYl9hcmJfcmVzdW1lX25vaXJxICBOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGJyY21zdGJfZ2lzYl9hcmJfcG1fb3BzID0geworCS5zdXNwZW5kCT0gYnJjbXN0Yl9naXNiX2FyYl9zdXNwZW5kLAorCS5yZXN1bWVfbm9pcnEJPSBicmNtc3RiX2dpc2JfYXJiX3Jlc3VtZV9ub2lycSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJyY21zdGJfZ2lzYl9hcmJfZHJpdmVyID0gewotCS5wcm9iZQk9IGJyY21zdGJfZ2lzYl9hcmJfcHJvYmUsCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAiYnJjbS1naXNiLWFyYiIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBicmNtc3RiX2dpc2JfYXJiX29mX21hdGNoLAorCQkucG0JPSAmYnJjbXN0Yl9naXNiX2FyYl9wbV9vcHMsCiAJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJyY21fZ2lzYl9kcml2ZXJfaW5pdCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJyY21zdGJfZ2lzYl9hcmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZicmNtc3RiX2dpc2JfYXJiX2RyaXZlciwKKwkJCQkgICAgIGJyY21zdGJfZ2lzYl9hcmJfcHJvYmUpOwogfQogCiBtb2R1bGVfaW5pdChicmNtX2dpc2JfZHJpdmVyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jIGIvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jCmluZGV4IDI2YzM3NzlkLi5lYjc2ODJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2J1cy9tdmVidS1tYnVzLmMKKysrIGIvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogLyoKICAqIEREUiB0YXJnZXQgaXMgdGhlIHNhbWUgb24gYWxsIHBsYXRmb3Jtcy4KQEAgLTk0LDIwICs5NSw0MiBAQAogCiAjZGVmaW5lIERPVkVfRERSX0JBU0VfQ1NfT0ZGKG4pICgobikgPDwgNCkKIAorLyogUmVsYXRpdmUgdG8gbWJ1c2JyaWRnZV9iYXNlICovCisjZGVmaW5lIE1CVVNfQlJJREdFX0NUUkxfT0ZGCTB4MAorI2RlZmluZSBNQlVTX0JSSURHRV9CQVNFX09GRgkweDQKKworLyogTWF4aW11bSBudW1iZXIgb2Ygd2luZG93cywgZm9yIGFsbCBrbm93biBwbGF0Zm9ybXMgKi8KKyNkZWZpbmUgTUJVU19XSU5TX01BWCAgICAgICAgICAgMjAKKwogc3RydWN0IG12ZWJ1X21idXNfc3RhdGU7CiAKIHN0cnVjdCBtdmVidV9tYnVzX3NvY19kYXRhIHsKIAl1bnNpZ25lZCBpbnQgbnVtX3dpbnM7CiAJdW5zaWduZWQgaW50IG51bV9yZW1hcHBhYmxlX3dpbnM7CisJYm9vbCBoYXNfbWJ1c19icmlkZ2U7CiAJdW5zaWduZWQgaW50ICgqd2luX2NmZ19vZmZzZXQpKGNvbnN0IGludCB3aW4pOwogCXZvaWQgKCpzZXR1cF9jcHVfdGFyZ2V0KShzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSAqcyk7CisJaW50ICgqc2F2ZV9jcHVfdGFyZ2V0KShzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSAqcywKKwkJCSAgICAgICB1MzIgKnN0b3JlX2FkZHIpOwogCWludCAoKnNob3dfY3B1X3RhcmdldCkoc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKnMsCiAJCQkgICAgICAgc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpOwogfTsKIAorLyoKKyAqIFVzZWQgdG8gc3RvcmUgdGhlIHN0YXRlIG9mIG9uZSBNQnVzIHdpbmRvdyBhY2Nyb3NzIHN1c3BlbmQvcmVzdW1lLgorICovCitzdHJ1Y3QgbXZlYnVfbWJ1c193aW5fZGF0YSB7CisJdTMyIGN0cmw7CisJdTMyIGJhc2U7CisJdTMyIHJlbWFwX2xvOworCXUzMiByZW1hcF9oaTsKK307CisKIHN0cnVjdCBtdmVidV9tYnVzX3N0YXRlIHsKIAl2b2lkIF9faW9tZW0gKm1idXN3aW5zX2Jhc2U7CiAJdm9pZCBfX2lvbWVtICpzZHJhbXdpbnNfYmFzZTsKKwl2b2lkIF9faW9tZW0gKm1idXNicmlkZ2VfYmFzZTsKKwlwaHlzX2FkZHJfdCBzZHJhbXdpbnNfcGh5c19iYXNlOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3NkcmFtOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGV2czsKQEAgLTExNSw2ICsxMzgsMTEgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgcGNpZV9pb19hcGVydHVyZTsKIAljb25zdCBzdHJ1Y3QgbXZlYnVfbWJ1c19zb2NfZGF0YSAqc29jOwogCWludCBod19pb19jb2hlcmVuY3k7CisKKwkvKiBVc2VkIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSAqLworCXUzMiBtYnVzX2JyaWRnZV9jdHJsOworCXUzMiBtYnVzX2JyaWRnZV9iYXNlOworCXN0cnVjdCBtdmVidV9tYnVzX3dpbl9kYXRhIHdpbnNbTUJVU19XSU5TX01BWF07CiB9OwogCiBzdGF0aWMgc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgbWJ1c19zdGF0ZTsKQEAgLTUxNiw2ICs1NDQsMjggQEAKIAltdmVidV9tYnVzX2RyYW1faW5mby5udW1fY3MgPSBjczsKIH0KIAorc3RhdGljIGludAorbXZlYnVfbWJ1c19kZWZhdWx0X3NhdmVfY3B1X3RhcmdldChzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSAqbWJ1cywKKwkJCQkgICB1MzIgKnN0b3JlX2FkZHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXUzMiBiYXNlID0gcmVhZGwobWJ1cy0+c2RyYW13aW5zX2Jhc2UgKyBERFJfQkFTRV9DU19PRkYoaSkpOworCQl1MzIgc2l6ZSA9IHJlYWRsKG1idXMtPnNkcmFtd2luc19iYXNlICsgRERSX1NJWkVfQ1NfT0ZGKGkpKTsKKworCQl3cml0ZWwobWJ1cy0+c2RyYW13aW5zX3BoeXNfYmFzZSArIEREUl9CQVNFX0NTX09GRihpKSwKKwkJICAgICAgIHN0b3JlX2FkZHIrKyk7CisJCXdyaXRlbChiYXNlLCBzdG9yZV9hZGRyKyspOworCQl3cml0ZWwobWJ1cy0+c2RyYW13aW5zX3BoeXNfYmFzZSArIEREUl9TSVpFX0NTX09GRihpKSwKKwkJICAgICAgIHN0b3JlX2FkZHIrKyk7CisJCXdyaXRlbChzaXplLCBzdG9yZV9hZGRyKyspOworCX0KKworCS8qIFdlJ3ZlIHdyaXR0ZW4gMTYgd29yZHMgdG8gdGhlIHN0b3JlIGFkZHJlc3MgKi8KKwlyZXR1cm4gMTY7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdAogbXZlYnVfbWJ1c19kb3ZlX3NldHVwX2NwdV90YXJnZXQoc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKm1idXMpCiB7CkBAIC01NDYsMTAgKzU5NiwzNSBAQAogCW12ZWJ1X21idXNfZHJhbV9pbmZvLm51bV9jcyA9IGNzOwogfQogCitzdGF0aWMgaW50CittdmVidV9tYnVzX2RvdmVfc2F2ZV9jcHVfdGFyZ2V0KHN0cnVjdCBtdmVidV9tYnVzX3N0YXRlICptYnVzLAorCQkJCXUzMiAqc3RvcmVfYWRkcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdTMyIG1hcCA9IHJlYWRsKG1idXMtPnNkcmFtd2luc19iYXNlICsgRE9WRV9ERFJfQkFTRV9DU19PRkYoaSkpOworCisJCXdyaXRlbChtYnVzLT5zZHJhbXdpbnNfcGh5c19iYXNlICsgRE9WRV9ERFJfQkFTRV9DU19PRkYoaSksCisJCSAgICAgICBzdG9yZV9hZGRyKyspOworCQl3cml0ZWwobWFwLCBzdG9yZV9hZGRyKyspOworCX0KKworCS8qIFdlJ3ZlIHdyaXR0ZW4gNCB3b3JkcyB0byB0aGUgc3RvcmUgYWRkcmVzcyAqLworCXJldHVybiA0OworfQorCitpbnQgbXZlYnVfbWJ1c19zYXZlX2NwdV90YXJnZXQodTMyICpzdG9yZV9hZGRyKQoreworCXJldHVybiBtYnVzX3N0YXRlLnNvYy0+c2F2ZV9jcHVfdGFyZ2V0KCZtYnVzX3N0YXRlLCBzdG9yZV9hZGRyKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdmVidV9tYnVzX3NvY19kYXRhIGFybWFkYV8zNzBfeHBfbWJ1c19kYXRhID0gewogCS5udW1fd2lucyAgICAgICAgICAgID0gMjAsCiAJLm51bV9yZW1hcHBhYmxlX3dpbnMgPSA4LAorCS5oYXNfbWJ1c19icmlkZ2UgICAgID0gdHJ1ZSwKIAkud2luX2NmZ19vZmZzZXQgICAgICA9IGFybWFkYV8zNzBfeHBfbWJ1c193aW5fb2Zmc2V0LAorCS5zYXZlX2NwdV90YXJnZXQgICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NhdmVfY3B1X3RhcmdldCwKIAkuc2V0dXBfY3B1X3RhcmdldCAgICA9IG12ZWJ1X21idXNfZGVmYXVsdF9zZXR1cF9jcHVfdGFyZ2V0LAogCS5zaG93X2NwdV90YXJnZXQgICAgID0gbXZlYnVfc2RyYW1fZGVidWdfc2hvd19vcmlvbiwKIH07CkBAIC01NTgsNiArNjMzLDcgQEAKIAkubnVtX3dpbnMgICAgICAgICAgICA9IDgsCiAJLm51bV9yZW1hcHBhYmxlX3dpbnMgPSA0LAogCS53aW5fY2ZnX29mZnNldCAgICAgID0gb3Jpb25fbWJ1c193aW5fb2Zmc2V0LAorCS5zYXZlX2NwdV90YXJnZXQgICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NhdmVfY3B1X3RhcmdldCwKIAkuc2V0dXBfY3B1X3RhcmdldCAgICA9IG12ZWJ1X21idXNfZGVmYXVsdF9zZXR1cF9jcHVfdGFyZ2V0LAogCS5zaG93X2NwdV90YXJnZXQgICAgID0gbXZlYnVfc2RyYW1fZGVidWdfc2hvd19vcmlvbiwKIH07CkBAIC01NjYsNiArNjQyLDcgQEAKIAkubnVtX3dpbnMgICAgICAgICAgICA9IDgsCiAJLm51bV9yZW1hcHBhYmxlX3dpbnMgPSA0LAogCS53aW5fY2ZnX29mZnNldCAgICAgID0gb3Jpb25fbWJ1c193aW5fb2Zmc2V0LAorCS5zYXZlX2NwdV90YXJnZXQgICAgID0gbXZlYnVfbWJ1c19kb3ZlX3NhdmVfY3B1X3RhcmdldCwKIAkuc2V0dXBfY3B1X3RhcmdldCAgICA9IG12ZWJ1X21idXNfZG92ZV9zZXR1cF9jcHVfdGFyZ2V0LAogCS5zaG93X2NwdV90YXJnZXQgICAgID0gbXZlYnVfc2RyYW1fZGVidWdfc2hvd19kb3ZlLAogfTsKQEAgLTU3OCw2ICs2NTUsNyBAQAogCS5udW1fd2lucyAgICAgICAgICAgID0gOCwKIAkubnVtX3JlbWFwcGFibGVfd2lucyA9IDQsCiAJLndpbl9jZmdfb2Zmc2V0ICAgICAgPSBvcmlvbl9tYnVzX3dpbl9vZmZzZXQsCisJLnNhdmVfY3B1X3RhcmdldCAgICAgPSBtdmVidV9tYnVzX2RlZmF1bHRfc2F2ZV9jcHVfdGFyZ2V0LAogCS5zZXR1cF9jcHVfdGFyZ2V0ICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NldHVwX2NwdV90YXJnZXQsCiAJLnNob3dfY3B1X3RhcmdldCAgICAgPSBtdmVidV9zZHJhbV9kZWJ1Z19zaG93X29yaW9uLAogfTsKQEAgLTU4Niw2ICs2NjQsNyBAQAogCS5udW1fd2lucyAgICAgICAgICAgID0gOCwKIAkubnVtX3JlbWFwcGFibGVfd2lucyA9IDIsCiAJLndpbl9jZmdfb2Zmc2V0ICAgICAgPSBvcmlvbl9tYnVzX3dpbl9vZmZzZXQsCisJLnNhdmVfY3B1X3RhcmdldCAgICAgPSBtdmVidV9tYnVzX2RlZmF1bHRfc2F2ZV9jcHVfdGFyZ2V0LAogCS5zZXR1cF9jcHVfdGFyZ2V0ICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NldHVwX2NwdV90YXJnZXQsCiAJLnNob3dfY3B1X3RhcmdldCAgICAgPSBtdmVidV9zZHJhbV9kZWJ1Z19zaG93X29yaW9uLAogfTsKQEAgLTU5NCw2ICs2NzMsNyBAQAogCS5udW1fd2lucyAgICAgICAgICAgID0gMTQsCiAJLm51bV9yZW1hcHBhYmxlX3dpbnMgPSA4LAogCS53aW5fY2ZnX29mZnNldCAgICAgID0gbXY3OHh4MF9tYnVzX3dpbl9vZmZzZXQsCisJLnNhdmVfY3B1X3RhcmdldCAgICAgPSBtdmVidV9tYnVzX2RlZmF1bHRfc2F2ZV9jcHVfdGFyZ2V0LAogCS5zZXR1cF9jcHVfdGFyZ2V0ICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NldHVwX2NwdV90YXJnZXQsCiAJLnNob3dfY3B1X3RhcmdldCAgICAgPSBtdmVidV9zZHJhbV9kZWJ1Z19zaG93X29yaW9uLAogfTsKQEAgLTY5OCwxMSArNzc4LDczIEBACiB9CiBmc19pbml0Y2FsbChtdmVidV9tYnVzX2RlYnVnZnNfaW5pdCk7CiAKK3N0YXRpYyBpbnQgbXZlYnVfbWJ1c19zdXNwZW5kKHZvaWQpCit7CisJc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKnMgPSAmbWJ1c19zdGF0ZTsKKwlpbnQgd2luOworCisJaWYgKCFzLT5tYnVzYnJpZGdlX2Jhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJZm9yICh3aW4gPSAwOyB3aW4gPCBzLT5zb2MtPm51bV93aW5zOyB3aW4rKykgeworCQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzLT5tYnVzd2luc19iYXNlICsKKwkJCXMtPnNvYy0+d2luX2NmZ19vZmZzZXQod2luKTsKKworCQlzLT53aW5zW3dpbl0uYmFzZSA9IHJlYWRsKGFkZHIgKyBXSU5fQkFTRV9PRkYpOworCQlzLT53aW5zW3dpbl0uY3RybCA9IHJlYWRsKGFkZHIgKyBXSU5fQ1RSTF9PRkYpOworCisJCWlmICh3aW4gPj0gcy0+c29jLT5udW1fcmVtYXBwYWJsZV93aW5zKQorCQkJY29udGludWU7CisKKwkJcy0+d2luc1t3aW5dLnJlbWFwX2xvID0gcmVhZGwoYWRkciArIFdJTl9SRU1BUF9MT19PRkYpOworCQlzLT53aW5zW3dpbl0ucmVtYXBfaGkgPSByZWFkbChhZGRyICsgV0lOX1JFTUFQX0hJX09GRik7CisJfQorCisJcy0+bWJ1c19icmlkZ2VfY3RybCA9IHJlYWRsKHMtPm1idXNicmlkZ2VfYmFzZSArCisJCQkJICAgIE1CVVNfQlJJREdFX0NUUkxfT0ZGKTsKKwlzLT5tYnVzX2JyaWRnZV9iYXNlID0gcmVhZGwocy0+bWJ1c2JyaWRnZV9iYXNlICsKKwkJCQkgICAgTUJVU19CUklER0VfQkFTRV9PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG12ZWJ1X21idXNfcmVzdW1lKHZvaWQpCit7CisJc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKnMgPSAmbWJ1c19zdGF0ZTsKKwlpbnQgd2luOworCisJd3JpdGVsKHMtPm1idXNfYnJpZGdlX2N0cmwsCisJICAgICAgIHMtPm1idXNicmlkZ2VfYmFzZSArIE1CVVNfQlJJREdFX0NUUkxfT0ZGKTsKKwl3cml0ZWwocy0+bWJ1c19icmlkZ2VfYmFzZSwKKwkgICAgICAgcy0+bWJ1c2JyaWRnZV9iYXNlICsgTUJVU19CUklER0VfQkFTRV9PRkYpOworCisJZm9yICh3aW4gPSAwOyB3aW4gPCBzLT5zb2MtPm51bV93aW5zOyB3aW4rKykgeworCQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzLT5tYnVzd2luc19iYXNlICsKKwkJCXMtPnNvYy0+d2luX2NmZ19vZmZzZXQod2luKTsKKworCQl3cml0ZWwocy0+d2luc1t3aW5dLmJhc2UsIGFkZHIgKyBXSU5fQkFTRV9PRkYpOworCQl3cml0ZWwocy0+d2luc1t3aW5dLmN0cmwsIGFkZHIgKyBXSU5fQ1RSTF9PRkYpOworCisJCWlmICh3aW4gPj0gcy0+c29jLT5udW1fcmVtYXBwYWJsZV93aW5zKQorCQkJY29udGludWU7CisKKwkJd3JpdGVsKHMtPndpbnNbd2luXS5yZW1hcF9sbywgYWRkciArIFdJTl9SRU1BUF9MT19PRkYpOworCQl3cml0ZWwocy0+d2luc1t3aW5dLnJlbWFwX2hpLCBhZGRyICsgV0lOX1JFTUFQX0hJX09GRik7CisJfQorfQorCitzdHJ1Y3Qgc3lzY29yZV9vcHMgbXZlYnVfbWJ1c19zeXNjb3JlX29wcyA9IHsKKwkuc3VzcGVuZAk9IG12ZWJ1X21idXNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG12ZWJ1X21idXNfcmVzdW1lLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgbXZlYnVfbWJ1c19jb21tb25faW5pdChzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSAqbWJ1cywKIAkJCQkJIHBoeXNfYWRkcl90IG1idXN3aW5zX3BoeXNfYmFzZSwKIAkJCQkJIHNpemVfdCBtYnVzd2luc19zaXplLAogCQkJCQkgcGh5c19hZGRyX3Qgc2RyYW13aW5zX3BoeXNfYmFzZSwKLQkJCQkJIHNpemVfdCBzZHJhbXdpbnNfc2l6ZSkKKwkJCQkJIHNpemVfdCBzZHJhbXdpbnNfc2l6ZSwKKwkJCQkJIHBoeXNfYWRkcl90IG1idXNicmlkZ2VfcGh5c19iYXNlLAorCQkJCQkgc2l6ZV90IG1idXNicmlkZ2Vfc2l6ZSkKIHsKIAlpbnQgd2luOwogCkBAIC03MTYsMTEgKzg1OCwyNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwltYnVzLT5zZHJhbXdpbnNfcGh5c19iYXNlID0gc2RyYW13aW5zX3BoeXNfYmFzZTsKKworCWlmIChtYnVzYnJpZGdlX3BoeXNfYmFzZSkgeworCQltYnVzLT5tYnVzYnJpZGdlX2Jhc2UgPSBpb3JlbWFwKG1idXNicmlkZ2VfcGh5c19iYXNlLAorCQkJCQkJbWJ1c2JyaWRnZV9zaXplKTsKKwkJaWYgKCFtYnVzLT5tYnVzYnJpZGdlX2Jhc2UpIHsKKwkJCWlvdW5tYXAobWJ1cy0+c2RyYW13aW5zX2Jhc2UpOworCQkJaW91bm1hcChtYnVzLT5tYnVzd2luc19iYXNlKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfSBlbHNlCisJCW1idXMtPm1idXNicmlkZ2VfYmFzZSA9IE5VTEw7CisKIAlmb3IgKHdpbiA9IDA7IHdpbiA8IG1idXMtPnNvYy0+bnVtX3dpbnM7IHdpbisrKQogCQltdmVidV9tYnVzX2Rpc2FibGVfd2luZG93KG1idXMsIHdpbik7CiAKIAltYnVzLT5zb2MtPnNldHVwX2NwdV90YXJnZXQobWJ1cyk7CiAKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbXZlYnVfbWJ1c19zeXNjb3JlX29wcyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ2LDcgKzkwMyw3IEBACiAJCQltYnVzd2luc19waHlzX2Jhc2UsCiAJCQltYnVzd2luc19zaXplLAogCQkJc2RyYW13aW5zX3BoeXNfYmFzZSwKLQkJCXNkcmFtd2luc19zaXplKTsKKwkJCXNkcmFtd2luc19zaXplLCAwLCAwKTsKIH0KIAogI2lmZGVmIENPTkZJR19PRgpAQCAtODg3LDcgKzEwNDQsNyBAQAogCiBpbnQgX19pbml0IG12ZWJ1X21idXNfZHRfaW5pdChib29sIGlzX2NvaGVyZW50KQogewotCXN0cnVjdCByZXNvdXJjZSBtYnVzd2luc19yZXMsIHNkcmFtd2luc19yZXM7CisJc3RydWN0IHJlc291cmNlIG1idXN3aW5zX3Jlcywgc2RyYW13aW5zX3JlcywgbWJ1c2JyaWRnZV9yZXM7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCwgKmNvbnRyb2xsZXI7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CiAJY29uc3QgX19iZTMyICpwcm9wOwpAQCAtOTIzLDYgKzEwODAsMTkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyoKKwkgKiBTZXQgdGhlIHJlc291cmNlIHRvIDAgc28gdGhhdCBpdCBjYW4gYmUgbGVmdCB1bm1hcHBlZCBieQorCSAqIG12ZWJ1X21idXNfY29tbW9uX2luaXQoKSBpZiB0aGUgRFQgZG9lc24ndCBjYXJyeSB0aGUKKwkgKiBuZWNlc3NhcnkgaW5mb3JtYXRpb24uIFRoaXMgaXMgbmVlZGVkIHRvIHByZXNlcnZlIGJhY2t3YXJkCisJICogY29tcGF0aWJpbGl0eS4KKwkgKi8KKwltZW1zZXQoJm1idXNicmlkZ2VfcmVzLCAwLCBzaXplb2YobWJ1c2JyaWRnZV9yZXMpKTsKKworCWlmIChtYnVzX3N0YXRlLnNvYy0+aGFzX21idXNfYnJpZGdlKSB7CisJCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGNvbnRyb2xsZXIsIDIsICZtYnVzYnJpZGdlX3JlcykpCisJCQlwcl93YXJuKEZXX1dBUk4gImRlcHJlY2F0ZWQgbWJ1cy1tdmVidSBEZXZpY2UgVHJlZSwgc3VzcGVuZC9yZXN1bWUgd2lsbCBub3Qgd29ya1xuIik7CisJfQorCiAJbWJ1c19zdGF0ZS5od19pb19jb2hlcmVuY3kgPSBpc19jb2hlcmVudDsKIAogCS8qIEdldCBvcHRpb25hbCBwY2llLXttZW0saW99LWFwZXJ0dXJlIHByb3BlcnRpZXMgKi8KQEAgLTkzMyw3ICsxMTAzLDkgQEAKIAkJCQkgICAgIG1idXN3aW5zX3Jlcy5zdGFydCwKIAkJCQkgICAgIHJlc291cmNlX3NpemUoJm1idXN3aW5zX3JlcyksCiAJCQkJICAgICBzZHJhbXdpbnNfcmVzLnN0YXJ0LAotCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZSgmc2RyYW13aW5zX3JlcykpOworCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZSgmc2RyYW13aW5zX3JlcyksCisJCQkJICAgICBtYnVzYnJpZGdlX3Jlcy5zdGFydCwKKwkJCQkgICAgIHJlc291cmNlX3NpemUoJm1idXNicmlkZ2VfcmVzKSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvb21hcF9sM19ub2MuYyBiL2RyaXZlcnMvYnVzL29tYXBfbDNfbm9jLmMKaW5kZXggNTMxYWU1OS4uMTdkODY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9idXMvb21hcF9sM19ub2MuYworKysgYi9kcml2ZXJzL2J1cy9vbWFwX2wzX25vYy5jCkBAIC0yMjIsMTAgKzIyMiwxNCBAQAogCQkJfQogCiAJCQkvKiBFcnJvciBmb3VuZCBzbyBicmVhayB0aGUgZm9yIGxvb3AgKi8KLQkJCWJyZWFrOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQl9CiAJfQotCXJldHVybiBJUlFfSEFORExFRDsKKworCWRldl9lcnIobDMtPmRldiwgIkwzICVzIElSUSBub3QgaGFuZGxlZCEhXG4iLAorCQlpbnR0eXBlID8gImRlYnVnIiA6ICJhcHBsaWNhdGlvbiIpOworCisJcmV0dXJuIElSUV9OT05FOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBsM19ub2NfbWF0Y2hbXSA9IHsKQEAgLTI5NiwxMSArMzAwLDY2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmCUNPTkZJR19QTQorCisvKioKKyAqIGwzX3Jlc3VtZV9ub2lycSgpIC0gcmVzdW1lIGZ1bmN0aW9uIGZvciBsM19ub2MKKyAqIEBkZXY6CXBvaW50ZXIgdG8gbDNfbm9jIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBXZSBvbmx5IGhhdmUgdGhlIHJlc3VtZSBoYW5kbGVyIG9ubHkgc2luY2Ugd2UKKyAqIGhhdmUgYWxyZWFkeSBtYWludGFpbmVkIHRoZSBkZWx0YSByZWdpc3RlcgorICogY29uZmlndXJhdGlvbiBhcyBwYXJ0IG9mIGNvbmZpZ3VyaW5nIHRoZSBzeXN0ZW0KKyAqLworc3RhdGljIGludCBsM19yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBvbWFwX2wzICpsMyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpOworCXN0cnVjdCBsM19mbGFnbXV4X2RhdGEgKmZsYWdfbXV4OworCXZvaWQgX19pb21lbSAqYmFzZSwgKm1hc2tfcmVneCA9IE5VTEw7CisJdTMyIG1hc2tfdmFsOworCisJZm9yIChpID0gMDsgaSA8IGwzLT5udW1fbW9kdWxlczsgaSsrKSB7CisJCWJhc2UgPSBsMy0+bDNfYmFzZVtpXTsKKwkJZmxhZ19tdXggPSBsMy0+bDNfZmxhZ211eFtpXTsKKwkJaWYgKCFmbGFnX211eC0+bWFza19hcHBfYml0cyAmJiAhZmxhZ19tdXgtPm1hc2tfZGJnX2JpdHMpCisJCQljb250aW51ZTsKKworCQltYXNrX3JlZ3ggPSBiYXNlICsgZmxhZ19tdXgtPm9mZnNldCArIEwzX0ZMQUdNVVhfTUFTSzAgKworCQkJICAgKEwzX0FQUExJQ0FUSU9OX0VSUk9SIDw8IDMpOworCQltYXNrX3ZhbCA9IHJlYWRsX3JlbGF4ZWQobWFza19yZWd4KTsKKwkJbWFza192YWwgJj0gfihmbGFnX211eC0+bWFza19hcHBfYml0cyk7CisKKwkJd3JpdGVsX3JlbGF4ZWQobWFza192YWwsIG1hc2tfcmVneCk7CisJCW1hc2tfcmVneCA9IGJhc2UgKyBmbGFnX211eC0+b2Zmc2V0ICsgTDNfRkxBR01VWF9NQVNLMCArCisJCQkgICAoTDNfREVCVUdfRVJST1IgPDwgMyk7CisJCW1hc2tfdmFsID0gcmVhZGxfcmVsYXhlZChtYXNrX3JlZ3gpOworCQltYXNrX3ZhbCAmPSB+KGZsYWdfbXV4LT5tYXNrX2RiZ19iaXRzKTsKKworCQl3cml0ZWxfcmVsYXhlZChtYXNrX3ZhbCwgbWFza19yZWd4KTsKKwl9CisKKwkvKiBEdW1teSByZWFkIHRvIGZvcmNlIE9DUCBiYXJyaWVyICovCisJaWYgKG1hc2tfcmVneCkKKwkJKHZvaWQpcmVhZGwobWFza19yZWd4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbDNfZGV2X3BtX29wcyA9IHsKKwkucmVzdW1lX25vaXJxCQk9IGwzX3Jlc3VtZV9ub2lycSwKK307CisKKyNkZWZpbmUgTDNfREVWX1BNX09QUyAoJmwzX2Rldl9wbV9vcHMpCisjZWxzZQorI2RlZmluZSBMM19ERVZfUE1fT1BTIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2wzX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb21hcF9sM19wcm9iZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gIm9tYXBfbDNfbm9jIiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucG0JCT0gTDNfREVWX1BNX09QUywKIAkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGwzX25vY19tYXRjaCksCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9vbWFwX2wzX3NteC5jIGIvZHJpdmVycy9idXMvb21hcF9sM19zbXguYwppbmRleCBhY2MyMTY0Li41OTdmZGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2J1cy9vbWFwX2wzX3NteC5jCisrKyBiL2RyaXZlcnMvYnVzL29tYXBfbDNfc214LmMKQEAgLTI3LDYgKzI3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorCiAjaW5jbHVkZSAib21hcF9sM19zbXguaCIKIAogc3RhdGljIGlubGluZSB1NjQgb21hcDNfbDNfcmVhZGxsKHZvaWQgX19pb21lbSAqYmFzZSwgdTE2IHJlZykKQEAgLTIxMSw3ICsyMTUsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwM19sM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorI2lmIElTX0JVSUxUSU4oQ09ORklHX09GKQorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb21hcDNfbDNfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInRpLG9tYXAzLWwzLXNteCIsCisJfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb21hcDNfbDNfbWF0Y2gpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgb21hcDNfbDNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgb21hcDNfbDMgKmwzOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtMjY1LDcgKzI3OSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgb21hcDNfbDNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IG9tYXAzX2wzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbWFwM19sMyAgICAgICAgICpsMyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCkBAIC0yNzgsMTUgKzI5MiwxNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwM19sM19kcml2ZXIgPSB7Ci0JLnJlbW92ZSAgICAgICAgID0gX19leGl0X3Aob21hcDNfbDNfcmVtb3ZlKSwKKwkucHJvYmUJCT0gb21hcDNfbDNfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gb21hcDNfbDNfcmVtb3ZlLAogCS5kcml2ZXIgICAgICAgICA9IHsKLQkubmFtZSAgID0gIm9tYXBfbDNfc214IiwKKwkJLm5hbWUgICA9ICJvbWFwX2wzX3NteCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvbWFwM19sM19tYXRjaCksCiAJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXAzX2wzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZvbWFwM19sM19kcml2ZXIsIG9tYXAzX2wzX3Byb2JlKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwM19sM19kcml2ZXIpOwogfQogcG9zdGNvcmVfaW5pdGNhbGxfc3luYyhvbWFwM19sM19pbml0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IDUyNGI3MDcuLjRjNTgzMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTg0LDkgKzg0LDEyIEBACiB9CiAjZW5kaWYKIAotdm9pZCBfX3dlYWsgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgKmFkZHIpCisjaWZuZGVmIHVueGxhdGVfZGV2X21lbV9wdHIKKyNkZWZpbmUgdW54bGF0ZV9kZXZfbWVtX3B0ciB1bnhsYXRlX2Rldl9tZW1fcHRyCit2b2lkIF9fd2VhayB1bnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IHBoeXMsIHZvaWQgKmFkZHIpCiB7CiB9CisjZW5kaWYKIAogLyoKICAqIFRoaXMgZnVuY2lvbiByZWFkcyB0aGUgKnBoeXNpY2FsKiBtZW1vcnkuIFRoZSBmX3BvcyBwb2ludHMgZGlyZWN0bHkgdG8gdGhlCkBAIC05Nyw3ICsxMDAsNyBAQAogewogCXBoeXNfYWRkcl90IHAgPSAqcHBvczsKIAlzc2l6ZV90IHJlYWQsIHN6OwotCWNoYXIgKnB0cjsKKwl2b2lkICpwdHI7CiAKIAlpZiAocCAhPSAqcHBvcykKIAkJcmV0dXJuIDA7CkBAIC00MDAsNyArNDAzLDcgQEAKIAkJCSAqIHVuY2FjaGVkLCB0aGVuIGl0IG11c3QgYWxzbyBiZSBhY2Nlc3NlZCB1bmNhY2hlZAogCQkJICogYnkgdGhlIGtlcm5lbCBvciBkYXRhIGNvcnJ1cHRpb24gbWF5IG9jY3VyCiAJCQkgKi8KLQkJCWtidWYgPSB4bGF0ZV9kZXZfa21lbV9wdHIoKGNoYXIgKilwKTsKKwkJCWtidWYgPSB4bGF0ZV9kZXZfa21lbV9wdHIoKHZvaWQgKilwKTsKIAogCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGtidWYsIHN6KSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQ2MSw3ICs0NjQsNyBAQAogI2VuZGlmCiAKIAl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCWNoYXIgKnB0cjsKKwkJdm9pZCAqcHRyOwogCiAJCXN6ID0gc2l6ZV9pbnNpZGVfcGFnZShwLCBjb3VudCk7CiAKQEAgLTQ3MCw3ICs0NzMsNyBAQAogCQkgKiBpdCBtdXN0IGFsc28gYmUgYWNjZXNzZWQgdW5jYWNoZWQgYnkgdGhlIGtlcm5lbCBvciBkYXRhCiAJCSAqIGNvcnJ1cHRpb24gbWF5IG9jY3VyLgogCQkgKi8KLQkJcHRyID0geGxhdGVfZGV2X2ttZW1fcHRyKChjaGFyICopcCk7CisJCXB0ciA9IHhsYXRlX2Rldl9rbWVtX3B0cigodm9pZCAqKXApOwogCiAJCWNvcGllZCA9IGNvcHlfZnJvbV91c2VyKHB0ciwgYnVmLCBzeik7CiAJCWlmIChjb3BpZWQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1zMm1wczExLmMgYi9kcml2ZXJzL2Nsay9jbGstczJtcHMxMS5jCmluZGV4IGI3Nzk3ZmIuLjdiYjEzYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay1zMm1wczExLmMKKysrIGIvZHJpdmVycy9jbGsvY2xrLXMybXBzMTEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBzMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wczEzLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHMxNC5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3M1bTg3NjcuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9jb3JlLmg+CkBAIC0xMjAsNiArMTIxLDI0IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBzMm1wczEzX2Nsa3NfaW5pdFtTMk1QUzExX0NMS1NfTlVNXSA9IHsKKwlbUzJNUFMxMV9DTEtfQVBdID0geworCQkubmFtZSA9ICJzMm1wczEzX2FwIiwKKwkJLm9wcyA9ICZzMm1wczExX2Nsa19vcHMsCisJCS5mbGFncyA9IENMS19JU19ST09ULAorCX0sCisJW1MyTVBTMTFfQ0xLX0NQXSA9IHsKKwkJLm5hbWUgPSAiczJtcHMxM19jcCIsCisJCS5vcHMgPSAmczJtcHMxMV9jbGtfb3BzLAorCQkuZmxhZ3MgPSBDTEtfSVNfUk9PVCwKKwl9LAorCVtTMk1QUzExX0NMS19CVF0gPSB7CisJCS5uYW1lID0gInMybXBzMTNfYnQiLAorCQkub3BzID0gJnMybXBzMTFfY2xrX29wcywKKwkJLmZsYWdzID0gQ0xLX0lTX1JPT1QsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBzMm1wczE0X2Nsa3NfaW5pdFtTMk1QUzExX0NMS1NfTlVNXSA9IHsKIAlbUzJNUFMxMV9DTEtfQVBdID0gewogCQkubmFtZSA9ICJzMm1wczE0X2FwIiwKQEAgLTE4NCw2ICsyMDMsMTAgQEAKIAkJczJtcHMxMV9yZWcgPSBTMk1QUzExX1JFR19SVENfQ1RSTDsKIAkJY2xrc19pbml0ID0gczJtcHMxMV9jbGtzX2luaXQ7CiAJCWJyZWFrOworCWNhc2UgUzJNUFMxM1g6CisJCXMybXBzMTFfcmVnID0gUzJNUFMxM19SRUdfUlRDQ1RSTDsKKwkJY2xrc19pbml0ID0gczJtcHMxM19jbGtzX2luaXQ7CisJCWJyZWFrOwogCWNhc2UgUzJNUFMxNFg6CiAJCXMybXBzMTFfcmVnID0gUzJNUFMxNF9SRUdfUlRDQ1RSTDsKIAkJY2xrc19pbml0ID0gczJtcHMxNF9jbGtzX2luaXQ7CkBAIC0yNzksNiArMzAyLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgczJtcHMxMV9jbGtfaWRbXSA9IHsKIAl7ICJzMm1wczExLWNsayIsIFMyTVBTMTFYfSwKKwl7ICJzMm1wczEzLWNsayIsIFMyTVBTMTNYfSwKIAl7ICJzMm1wczE0LWNsayIsIFMyTVBTMTRYfSwKIAl7ICJzNW04NzY3LWNsayIsIFM1TTg3NjdYfSwKIAl7IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tdmVidS9jb21tb24uYyBiL2RyaXZlcnMvY2xrL212ZWJ1L2NvbW1vbi5jCmluZGV4IGI3ZmNiNDYuLjBkNGQxMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL212ZWJ1L2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvY2xrL212ZWJ1L2NvbW1vbi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKQEAgLTE3NywxNCArMTc4LDE3IEBACiAJc3BpbmxvY2tfdCAqbG9jazsKIAlzdHJ1Y3QgY2xrICoqZ2F0ZXM7CiAJaW50IG51bV9nYXRlczsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdTMyIHNhdmVkX3JlZzsKIH07CiAKICNkZWZpbmUgdG9fY2xrX2dhdGUoX2h3KSBjb250YWluZXJfb2YoX2h3LCBzdHJ1Y3QgY2xrX2dhdGUsIGh3KQogCitzdGF0aWMgc3RydWN0IGNsa19nYXRpbmdfY3RybCAqY3RybDsKKwogc3RhdGljIHN0cnVjdCBjbGsgKmNsa19nYXRpbmdfZ2V0X3NyYygKIAlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpjbGtzcGVjLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBjbGtfZ2F0aW5nX2N0cmwgKmN0cmwgPSAoc3RydWN0IGNsa19nYXRpbmdfY3RybCAqKWRhdGE7CiAJaW50IG47CiAKIAlpZiAoY2xrc3BlYy0+YXJnc19jb3VudCA8IDEpCkBAIC0xOTksMTUgKzIwMywzNSBAQAogCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogCitzdGF0aWMgaW50IG12ZWJ1X2Nsa19nYXRpbmdfc3VzcGVuZCh2b2lkKQoreworCWN0cmwtPnNhdmVkX3JlZyA9IHJlYWRsKGN0cmwtPmJhc2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdmVidV9jbGtfZ2F0aW5nX3Jlc3VtZSh2b2lkKQoreworCXdyaXRlbChjdHJsLT5zYXZlZF9yZWcsIGN0cmwtPmJhc2UpOworfQorCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGNsa19nYXRlX3N5c2NvcmVfb3BzID0geworCS5zdXNwZW5kID0gbXZlYnVfY2xrX2dhdGluZ19zdXNwZW5kLAorCS5yZXN1bWUgPSBtdmVidV9jbGtfZ2F0aW5nX3Jlc3VtZSwKK307CisKIHZvaWQgX19pbml0IG12ZWJ1X2Nsa19nYXRpbmdfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgY2xrX2dhdGluZ19zb2NfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgY2xrX2dhdGluZ19jdHJsICpjdHJsOwogCXN0cnVjdCBjbGsgKmNsazsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJY29uc3QgY2hhciAqZGVmYXVsdF9wYXJlbnQgPSBOVUxMOwogCWludCBuOwogCisJaWYgKGN0cmwpIHsKKwkJcHJfZXJyKCJtdmVidS1jbGstZ2F0aW5nOiBjYW5ub3QgaW5zdGFudGlhdGUgbW9yZSB0aGFuIG9uZSBnYXRhYmxlIGNsb2NrIGRldmljZVxuIik7CisJCXJldHVybjsKKwl9CisKIAliYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlmIChXQVJOX09OKCFiYXNlKSkKIAkJcmV0dXJuOwpAQCAtMjI1LDYgKzI0OSw4IEBACiAJLyogbG9jayBtdXN0IGFscmVhZHkgYmUgaW5pdGlhbGl6ZWQgKi8KIAljdHJsLT5sb2NrID0gJmN0cmxfZ2F0aW5nX2xvY2s7CiAKKwljdHJsLT5iYXNlID0gYmFzZTsKKwogCS8qIENvdW50LCBhbGxvY2F0ZSwgYW5kIHJlZ2lzdGVyIGNsb2NrIGdhdGVzICovCiAJZm9yIChuID0gMDsgZGVzY1tuXS5uYW1lOykKIAkJbisrOwpAQCAtMjQ2LDYgKzI3Miw4IEBACiAKIAlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBjbGtfZ2F0aW5nX2dldF9zcmMsIGN0cmwpOwogCisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmNsa19nYXRlX3N5c2NvcmVfb3BzKTsKKwogCXJldHVybjsKIGdhdGVzX291dDoKIAlrZnJlZShjdHJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczU0NDAuYyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczU0NDAuYwppbmRleCAwMGQxZDAwLi45NzllODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1NDQwLmMKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQ0MC5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KIAogI2luY2x1ZGUgImNsay5oIgogI2luY2x1ZGUgImNsay1wbGwuaCIKQEAgLTIzLDYgKzI1LDggQEAKICNkZWZpbmUgQ1BVX0NMS19TVEFUVVMJCTB4ZmMKICNkZWZpbmUgTUlTQ19ET1VUMQkJMHg1NTgKIAorc3RhdGljIHZvaWQgX19pb21lbSAqcmVnX2Jhc2U7CisKIC8qIHBhcmVudCBjbG9jayBuYW1lIGxpc3QgKi8KIFBOQU1FKG1vdXRfYXJtY2xrX3ApCT0geyAiY3BsbGEiLCAiY3BsbGIiIH07CiBQTkFNRShtb3V0X3NwaV9wKQk9IHsgImRpdjEyNSIsICJkaXYyMDAiIH07CkBAIC04OSwxMCArOTMsMzAgQEAKIAl7fSwKIH07CiAKK3N0YXRpYyBpbnQgZXh5bm9zNTQ0MF9jbGtfcmVzdGFydF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQl1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZCkKK3sKKwl1MzIgdmFsLCBzdGF0dXM7CisKKwlzdGF0dXMgPSByZWFkbF9yZWxheGVkKHJlZ19iYXNlICsgMHhiYyk7CisJdmFsID0gcmVhZGxfcmVsYXhlZChyZWdfYmFzZSArIDB4Y2MpOworCXZhbCA9ICh2YWwgJiAweGZmZmYwMDAwKSB8IChzdGF0dXMgJiAweGZmZmYpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcmVnX2Jhc2UgKyAweGNjKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworLyoKKyAqIEV4eW5vczU0NDAgQ2xvY2sgcmVzdGFydCBub3RpZmllciwgaGFuZGxlcyByZXN0YXJ0IGZ1bmN0aW9uYWxpdHkKKyAqLworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBleHlub3M1NDQwX2Nsa19yZXN0YXJ0X2hhbmRsZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBleHlub3M1NDQwX2Nsa19yZXN0YXJ0X25vdGlmeSwKKwkucHJpb3JpdHkgPSAxMjgsCit9OworCiAvKiByZWdpc3RlciBleHlub3M1NDQwIGNsb2NrcyAqLwogc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczU0NDBfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQl2b2lkIF9faW9tZW0gKnJlZ19iYXNlOwogCXN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4OwogCiAJcmVnX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CkBAIC0xMjUsNiArMTQ5LDkgQEAKIAogCXNhbXN1bmdfY2xrX29mX2FkZF9wcm92aWRlcihucCwgY3R4KTsKIAorCWlmIChyZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJmV4eW5vczU0NDBfY2xrX3Jlc3RhcnRfaGFuZGxlcikpCisJCXByX3dhcm4oImV4eW5vczU0NDAgY2xvY2sgY2FuJ3QgcmVnaXN0ZXIgcmVzdGFydCBoYW5kbGVyXG4iKTsKKwogCXByX2luZm8oIkV4eW5vczU0NDA6IGFybV9jbGsgPSAlbGRIelxuIiwgX2dldF9yYXRlKCJhcm1fY2xrIikpOwogCXByX2luZm8oImV4eW5vczU0NDAgY2xvY2sgaW5pdGlhbGl6YXRpb24gY29tcGxldGVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLWRpdmlkZXIuYyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1kaXZpZGVyLmMKaW5kZXggMjkwZjljMS4uNTlhNTcxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLWRpdmlkZXIuYworKysgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstZGl2aWRlci5jCkBAIC0xODUsMyArMTg1LDE2IEBACiAKIAlyZXR1cm4gY2xrOwogfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19kaXZfdGFibGUgbWNfZGl2X3RhYmxlW10gPSB7CisJeyAudmFsID0gMCwgLmRpdiA9IDIgfSwKKwl7IC52YWwgPSAxLCAuZGl2ID0gMSB9LAorCXsgLnZhbCA9IDAsIC5kaXYgPSAwIH0sCit9OworCitzdHJ1Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfbWMoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCisJCQkJICB2b2lkIF9faW9tZW0gKnJlZywgc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gY2xrX3JlZ2lzdGVyX2RpdmlkZXJfdGFibGUoTlVMTCwgbmFtZSwgcGFyZW50X25hbWUsIDAsIHJlZywKKwkJCQkJICAxNiwgMSwgMCwgbWNfZGl2X3RhYmxlLCBsb2NrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTExNC5jIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTE0LmMKaW5kZXggZjc2MGYzMS4uMGIwM2QyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTE0LmMKKysrIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTE0LmMKQEAgLTE3Myw2ICsxNzMsNyBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhwbGxfZDJfbG9jayk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBsbF91X2xvY2spOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwbGxfcmVfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVtY19sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBkaXZfbm1wIHBsbHhjX25tcCA9IHsKIAkuZGl2bV9zaGlmdCA9IDAsCkBAIC0xMjI4LDcgKzEyMjksMTEgQEAKIAkJCSAgICAgICBBUlJBWV9TSVpFKG11eF9wbGxtY3BfY2xrbSksCiAJCQkgICAgICAgQ0xLX1NFVF9SQVRFX05PX1JFUEFSRU5ULAogCQkJICAgICAgIGNsa19iYXNlICsgQ0xLX1NPVVJDRV9FTUMsCi0JCQkgICAgICAgMjksIDMsIDAsIE5VTEwpOworCQkJICAgICAgIDI5LCAzLCAwLCAmZW1jX2xvY2spOworCisJY2xrID0gdGVncmFfY2xrX3JlZ2lzdGVyX21jKCJtYyIsICJlbWNfbXV4IiwgY2xrX2Jhc2UgKyBDTEtfU09VUkNFX0VNQywKKwkJCQkgICAgJmVtY19sb2NrKTsKKwljbGtzW1RFR1JBMTE0X0NMS19NQ10gPSBjbGs7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0ZWdyYV9wZXJpcGhfY2xrX2xpc3QpOyBpKyspIHsKIAkJZGF0YSA9ICZ0ZWdyYV9wZXJpcGhfY2xrX2xpc3RbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmExMjQuYyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTEyNC5jCmluZGV4IGUzYTg1ODQuLmY1ZjliYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTEyNC5jCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTEyNC5jCkBAIC0xMzIsNiArMTMyLDcgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGxsX2VfbG9jayk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBsbF9yZV9sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGxsX3VfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVtY19sb2NrKTsKIAogLyogcG9zc2libGUgT1NDIGZyZXF1ZW5jaWVzIGluIEh6ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0ZWdyYTEyNF9pbnB1dF9mcmVxW10gPSB7CkBAIC0xMTI3LDcgKzExMjgsMTEgQEAKIAljbGsgPSBjbGtfcmVnaXN0ZXJfbXV4KE5VTEwsICJlbWNfbXV4IiwgbXV4X3BsbG1jcF9jbGttLAogCQkJICAgICAgIEFSUkFZX1NJWkUobXV4X3BsbG1jcF9jbGttKSwgMCwKIAkJCSAgICAgICBjbGtfYmFzZSArIENMS19TT1VSQ0VfRU1DLAotCQkJICAgICAgIDI5LCAzLCAwLCBOVUxMKTsKKwkJCSAgICAgICAyOSwgMywgMCwgJmVtY19sb2NrKTsKKworCWNsayA9IHRlZ3JhX2Nsa19yZWdpc3Rlcl9tYygibWMiLCAiZW1jX211eCIsIGNsa19iYXNlICsgQ0xLX1NPVVJDRV9FTUMsCisJCQkJICAgICZlbWNfbG9jayk7CisJY2xrc1tURUdSQTEyNF9DTEtfTUNdID0gY2xrOwogCiAJLyogY21sMCAqLwogCWNsayA9IGNsa19yZWdpc3Rlcl9nYXRlKE5VTEwsICJjbWwwIiwgInBsbF9lIiwgMCwgY2xrX2Jhc2UgKyBQTExFX0FVWCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIwLmMgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMC5jCmluZGV4IGRhY2UyYjEuLjQxMjcyZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIwLmMKKysrIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjAuYwpAQCAtMTQwLDYgKzE0MCw4IEBACiBzdGF0aWMgdm9pZCBfX2lvbWVtICpjbGtfYmFzZTsKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnBtY19iYXNlOwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVtY19sb2NrKTsKKwogI2RlZmluZSBURUdSQV9JTklUX0RBVEFfTVVYKF9uYW1lLCBfcGFyZW50cywgX29mZnNldCwJXAogCQkJICAgIF9jbGtfbnVtLCBfZ2F0ZV9mbGFncywgX2Nsa19pZCkJXAogCVRFR1JBX0lOSVRfREFUQShfbmFtZSwgTlVMTCwgTlVMTCwgX3BhcmVudHMsIF9vZmZzZXQsCVwKQEAgLTgxOSwxMSArODIxLDE1IEBACiAJCQkgICAgICAgQVJSQVlfU0laRShtdXhfcGxsbWNwX2Nsa20pLAogCQkJICAgICAgIENMS19TRVRfUkFURV9OT19SRVBBUkVOVCwKIAkJCSAgICAgICBjbGtfYmFzZSArIENMS19TT1VSQ0VfRU1DLAotCQkJICAgICAgIDMwLCAyLCAwLCBOVUxMKTsKKwkJCSAgICAgICAzMCwgMiwgMCwgJmVtY19sb2NrKTsKIAljbGsgPSB0ZWdyYV9jbGtfcmVnaXN0ZXJfcGVyaXBoX2dhdGUoImVtYyIsICJlbWNfbXV4IiwgMCwgY2xrX2Jhc2UsIDAsCiAJCQkJICAgIDU3LCBwZXJpcGhfY2xrX2VuYl9yZWZjbnQpOwogCWNsa3NbVEVHUkEyMF9DTEtfRU1DXSA9IGNsazsKIAorCWNsayA9IHRlZ3JhX2Nsa19yZWdpc3Rlcl9tYygibWMiLCAiZW1jX211eCIsIGNsa19iYXNlICsgQ0xLX1NPVVJDRV9FTUMsCisJCQkJICAgICZlbWNfbG9jayk7CisJY2xrc1tURUdSQTIwX0NMS19NQ10gPSBjbGs7CisKIAkvKiBkc2kgKi8KIAljbGsgPSB0ZWdyYV9jbGtfcmVnaXN0ZXJfcGVyaXBoX2dhdGUoImRzaSIsICJwbGxfZCIsIDAsIGNsa19iYXNlLCAwLAogCQkJCSAgICA0OCwgcGVyaXBoX2Nsa19lbmJfcmVmY250KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTMwLmMgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEzMC5jCmluZGV4IDViYmFjZDAuLjRiOWQ4YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTMwLmMKKysrIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMzAuYwpAQCAtMTc3LDYgKzE3Nyw3IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY21sX2xvY2spOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwbGxfZF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZW1jX2xvY2spOwogCiAjZGVmaW5lIFRFR1JBX0lOSVRfREFUQV9NVVgoX25hbWUsIF9wYXJlbnRzLCBfb2Zmc2V0LAlcCiAJCQkgICAgX2Nsa19udW0sIF9nYXRlX2ZsYWdzLCBfY2xrX2lkKQlcCkBAIC0xMTU3LDExICsxMTU4LDE1IEBACiAJCQkgICAgICAgQVJSQVlfU0laRShtdXhfcGxsbWNwX2Nsa20pLAogCQkJICAgICAgIENMS19TRVRfUkFURV9OT19SRVBBUkVOVCwKIAkJCSAgICAgICBjbGtfYmFzZSArIENMS19TT1VSQ0VfRU1DLAotCQkJICAgICAgIDMwLCAyLCAwLCBOVUxMKTsKKwkJCSAgICAgICAzMCwgMiwgMCwgJmVtY19sb2NrKTsKIAljbGsgPSB0ZWdyYV9jbGtfcmVnaXN0ZXJfcGVyaXBoX2dhdGUoImVtYyIsICJlbWNfbXV4IiwgMCwgY2xrX2Jhc2UsIDAsCiAJCQkJICAgIDU3LCBwZXJpcGhfY2xrX2VuYl9yZWZjbnQpOwogCWNsa3NbVEVHUkEzMF9DTEtfRU1DXSA9IGNsazsKIAorCWNsayA9IHRlZ3JhX2Nsa19yZWdpc3Rlcl9tYygibWMiLCAiZW1jX211eCIsIGNsa19iYXNlICsgQ0xLX1NPVVJDRV9FTUMsCisJCQkJICAgICZlbWNfbG9jayk7CisJY2xrc1tURUdSQTMwX0NMS19NQ10gPSBjbGs7CisKIAkvKiBjbWwwICovCiAJY2xrID0gY2xrX3JlZ2lzdGVyX2dhdGUoTlVMTCwgImNtbDAiLCAicGxsX2UiLCAwLCBjbGtfYmFzZSArIFBMTEVfQVVYLAogCQkJCTAsIDAsICZjbWxfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGsuaCBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay5oCmluZGV4IDE2ZWM4ZDYuLjRlNDU4YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay5oCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay5oCkBAIC04Niw2ICs4Niw4IEBACiAJCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLCB2b2lkIF9faW9tZW0gKnJlZywKIAkJdW5zaWduZWQgbG9uZyBmbGFncywgdTggY2xrX2RpdmlkZXJfZmxhZ3MsIHU4IHNoaWZ0LCB1OCB3aWR0aCwKIAkJdTggZnJhY193aWR0aCwgc3BpbmxvY2tfdCAqbG9jayk7CitzdHJ1Y3QgY2xrICp0ZWdyYV9jbGtfcmVnaXN0ZXJfbWMoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCisJCQkJICB2b2lkIF9faW9tZW0gKnJlZywgc3BpbmxvY2tfdCAqbG9jayk7CiAKIC8qCiAgKiBUZWdyYSBQTEw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90aS9kcGxsLmMgYi9kcml2ZXJzL2Nsay90aS9kcGxsLmMKaW5kZXggNzk3OTFlMS4uODVhYzBkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGkvZHBsbC5jCisrKyBiL2RyaXZlcnMvY2xrL3RpL2RwbGwuYwpAQCAtMzMsNiArMzMsOSBAQAogCS5yZWNhbGNfcmF0ZQk9ICZvbWFwNF9kcGxsX3JlZ200eGVuX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwNF9kcGxsX3JlZ200eGVuX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKKwkuc2V0X3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3BhcmVudCwKKwkuc2V0X3JhdGVfYW5kX3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGVfYW5kX3BhcmVudCwKKwkuZGV0ZXJtaW5lX3JhdGUJPSAmb21hcDRfZHBsbF9yZWdtNHhlbl9kZXRlcm1pbmVfcmF0ZSwKIAkuZ2V0X3BhcmVudAk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAogfTsKICNlbHNlCkBAIC01Myw2ICs1Niw5IEBACiAJLnJlY2FsY19yYXRlCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5zZXRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50LAorCS5zZXRfcmF0ZV9hbmRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZV9hbmRfcGFyZW50LAorCS5kZXRlcm1pbmVfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUsCiAJLmdldF9wYXJlbnQJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKIH07CiAKQEAgLTYxLDYgKzY3LDkgQEAKIAkuZ2V0X3BhcmVudAk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5zZXRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50LAorCS5zZXRfcmF0ZV9hbmRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZV9hbmRfcGFyZW50LAorCS5kZXRlcm1pbmVfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUsCiB9OwogI2Vsc2UKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBkcGxsX2NvcmVfY2tfb3BzID0ge307CkBAIC05Nyw2ICsxMDYsOSBAQAogCS5nZXRfcGFyZW50CT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCiAJLnJlY2FsY19yYXRlCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQsCisJLnNldF9yYXRlX2FuZF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlX2FuZF9wYXJlbnQsCisJLmRldGVybWluZV9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kZXRlcm1pbmVfcmF0ZSwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCiB9OwogCkBAIC0xMDYsNiArMTE4LDkgQEAKIAkuZ2V0X3BhcmVudAk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAogCS5yZWNhbGNfcmF0ZQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIAkuc2V0X3JhdGUJPSAmb21hcDNfZHBsbDRfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQsCisJLnNldF9yYXRlX2FuZF9wYXJlbnQJPSAmb21hcDNfZHBsbDRfc2V0X3JhdGVfYW5kX3BhcmVudCwKKwkuZGV0ZXJtaW5lX3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2RldGVybWluZV9yYXRlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9NYWtlZmlsZQppbmRleCAxNjJlNTE5Li44ZmYwMzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jbGsvdmVyc2F0aWxlL01ha2VmaWxlCkBAIC0yLDYgKzIsNSBAQAogb2JqLSQoQ09ORklHX0lDU1QpCQkrPSBjbGstaWNzdC5vIGNsay12ZXJzYXRpbGUubwogb2JqLSQoQ09ORklHX0lOVEVHUkFUT1JfSU1QRDEpCSs9IGNsay1pbXBkMS5vCiBvYmotJChDT05GSUdfQVJDSF9SRUFMVklFVykJKz0gY2xrLXJlYWx2aWV3Lm8KLW9iai0kKENPTkZJR19BUkNIX1ZFWFBSRVNTKQkrPSBjbGstdmV4cHJlc3Mubwogb2JqLSQoQ09ORklHX0NMS19TUDgxMCkJCSs9IGNsay1zcDgxMC5vCiBvYmotJChDT05GSUdfQ0xLX1ZFWFBSRVNTX09TQykJKz0gY2xrLXZleHByZXNzLW9zYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLW9zYy5jIGIvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy1vc2MuYwppbmRleCA1MjlhNTljLi43NjVmMWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLW9zYy5jCisrKyBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3Mtb3NjLmMKQEAgLTcwLDcgKzcwLDYgQEAKIAogc3RhdGljIGludCB2ZXhwcmVzc19vc2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgY2xrX2xvb2t1cCAqY2wgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsgLyogTm9uLURUIGxvb2t1cCAqLwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CiAJc3RydWN0IHZleHByZXNzX29zYyAqb3NjOwogCXN0cnVjdCBjbGsgKmNsazsKQEAgLTEwNiwxMiArMTA1LDYgQEAKIAogCW9mX2Nsa19hZGRfcHJvdmlkZXIocGRldi0+ZGV2Lm9mX25vZGUsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwgY2xrKTsKIAotCS8qIE9ubHkgaGFwcGVucyBmb3Igbm9uLURUIGNhc2VzICovCi0JaWYgKGNsKSB7Ci0JCWNsLT5jbGsgPSBjbGs7Ci0JCWNsa2Rldl9hZGQoY2wpOwotCX0KLQogCWRldl9kYmcoJnBkZXYtPmRldiwgIlJlZ2lzdGVyZWQgY2xvY2sgJyVzJ1xuIiwgaW5pdC5uYW1lKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy5jIGIvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDVlMWI0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3MuYworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMaW1pdGVkCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2FtYmEvc3A4MTAuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXhwcmVzcy5oPgotCi1zdGF0aWMgc3RydWN0IGNsayAqdmV4cHJlc3Nfc3A4MTBfdGltZXJjbGtlbls0XTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodmV4cHJlc3Nfc3A4MTBfbG9jayk7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2ZXhwcmVzc19zcDgxMF9pbml0KHZvaWQgX19pb21lbSAqYmFzZSkKLXsKLQlpbnQgaTsKLQotCWlmIChXQVJOX09OKCFiYXNlKSkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmV4cHJlc3Nfc3A4MTBfdGltZXJjbGtlbik7IGkrKykgewotCQljaGFyIG5hbWVbMTJdOwotCQljb25zdCBjaGFyICpwYXJlbnRzW10gPSB7Ci0JCQkidjJtOnJlZmNsazMya2h6IiwgLyogUkVGQ0xLICovCi0JCQkidjJtOnJlZmNsazFtaHoiIC8qIFRJTUNMSyAqLwotCQl9OwotCi0JCXNucHJpbnRmKG5hbWUsIEFSUkFZX1NJWkUobmFtZSksICJ0aW1lcmNsa2VuJWQiLCBpKTsKLQotCQl2ZXhwcmVzc19zcDgxMF90aW1lcmNsa2VuW2ldID0gY2xrX3JlZ2lzdGVyX211eChOVUxMLCBuYW1lLAotCQkJCXBhcmVudHMsIDIsIENMS19TRVRfUkFURV9OT19SRVBBUkVOVCwKLQkJCQliYXNlICsgU0NDVFJMLCBTQ0NUUkxfVElNRVJFTm5TRUxfU0hJRlQoaSksIDEsCi0JCQkJMCwgJnZleHByZXNzX3NwODEwX2xvY2spOwotCi0JCWlmIChXQVJOX09OKElTX0VSUih2ZXhwcmVzc19zcDgxMF90aW1lcmNsa2VuW2ldKSkpCi0JCQlicmVhazsKLQl9Ci19Ci0KLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2ZXhwcmVzc19jbGtfMjRtaHpfcGVyaXBoc1tdIF9faW5pdGNvbnN0ID0gewotCSJtYjp1YXJ0MCIsICJtYjp1YXJ0MSIsICJtYjp1YXJ0MiIsICJtYjp1YXJ0MyIsCi0JIm1iOm1tY2kiLCAibWI6a21pMCIsICJtYjprbWkxIgotfTsKLQotdm9pZCBfX2luaXQgdmV4cHJlc3NfY2xrX2luaXQodm9pZCBfX2lvbWVtICpzcDgxMF9iYXNlKQotewotCXN0cnVjdCBjbGsgKmNsazsKLQlpbnQgaTsKLQotCWNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKE5VTEwsICJkdW1teV9hcGJfcGNsayIsIE5VTEwsCi0JCQlDTEtfSVNfUk9PVCwgMCk7Ci0JV0FSTl9PTihjbGtfcmVnaXN0ZXJfY2xrZGV2KGNsaywgImFwYl9wY2xrIiwgTlVMTCkpOwotCi0JY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoTlVMTCwgInYybTpjbGtfMjRtaHoiLCBOVUxMLAotCQkJQ0xLX0lTX1JPT1QsIDI0MDAwMDAwKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2ZXhwcmVzc19jbGtfMjRtaHpfcGVyaXBocyk7IGkrKykKLQkJV0FSTl9PTihjbGtfcmVnaXN0ZXJfY2xrZGV2KGNsaywgTlVMTCwKLQkJCQl2ZXhwcmVzc19jbGtfMjRtaHpfcGVyaXBoc1tpXSkpOwotCi0JY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoTlVMTCwgInYybTpyZWZjbGszMmtoeiIsIE5VTEwsCi0JCQlDTEtfSVNfUk9PVCwgMzI3NjgpOwotCVdBUk5fT04oY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssIE5VTEwsICJ2Mm06d2R0IikpOwotCi0JY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoTlVMTCwgInYybTpyZWZjbGsxbWh6IiwgTlVMTCwKLQkJCUNMS19JU19ST09ULCAxMDAwMDAwKTsKLQotCXZleHByZXNzX3NwODEwX2luaXQoc3A4MTBfYmFzZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2ZXhwcmVzc19zcDgxMF90aW1lcmNsa2VuKTsgaSsrKQotCQlXQVJOX09OKGNsa19zZXRfcGFyZW50KHZleHByZXNzX3NwODEwX3RpbWVyY2xrZW5baV0sIGNsaykpOwotCi0JV0FSTl9PTihjbGtfcmVnaXN0ZXJfY2xrZGV2KHZleHByZXNzX3NwODEwX3RpbWVyY2xrZW5bMF0sCi0JCQkJInYybS10aW1lcjAiLCAic3A4MDQiKSk7Ci0JV0FSTl9PTihjbGtfcmVnaXN0ZXJfY2xrZGV2KHZleHByZXNzX3NwODEwX3RpbWVyY2xrZW5bMV0sCi0JCQkJInYybS10aW1lcjEiLCAic3A4MDQiKSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcKaW5kZXggOTA0MjA2MC4uZjY1N2E0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZwpAQCAtMzIsNiArMzIsNyBAQAogCiBjb25maWcgTUVTT042X1RJTUVSCiAJYm9vbAorCXNlbGVjdCBDTEtTUkNfTU1JTwogCiBjb25maWcgT1JJT05fVElNRVIKIAlzZWxlY3QgQ0xLU1JDX09GCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQppbmRleCA3NTZmNmYxLi5mYWUwNDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKQEAgLTQ1LDQgKzQ1LDUgQEAKIG9iai0kKENPTkZJR19DTEtTUkNfTUVUQUdfR0VORVJJQykJKz0gbWV0YWdfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQVJDSF9IQVNfVElDS19CUk9BRENBU1QpCSs9IGR1bW15X3RpbWVyLm8KIG9iai0kKENPTkZJR19BUkNIX0tFWVNUT05FKQkJKz0gdGltZXIta2V5c3RvbmUubworb2JqLSQoQ09ORklHX0FSQ0hfSU5URUdSQVRPUl9BUCkJKz0gdGltZXItaW50ZWdyYXRvci1hcC5vCiBvYmotJChDT05GSUdfQ0xLU1JDX1ZFUlNBVElMRSkJCSs9IHZlcnNhdGlsZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FybV9hcmNoX3RpbWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FybV9hcmNoX3RpbWVyLmMKaW5kZXggNDMwMDVkNC4uNmE3OWZjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYXJtX2FyY2hfdGltZXIuYwpAQCAtNDYyLDcgKzQ2MiwxMCBAQAogCiAJLyogUmVnaXN0ZXIgdGhlIENQMTUgYmFzZWQgY291bnRlciBpZiB3ZSBoYXZlIG9uZSAqLwogCWlmICh0eXBlICYgQVJDSF9DUDE1X1RJTUVSKSB7Ci0JCWFyY2hfdGltZXJfcmVhZF9jb3VudGVyID0gYXJjaF9jb3VudGVyX2dldF9jbnR2Y3Q7CisJCWlmIChhcmNoX3RpbWVyX3VzZV92aXJ0dWFsKQorCQkJYXJjaF90aW1lcl9yZWFkX2NvdW50ZXIgPSBhcmNoX2NvdW50ZXJfZ2V0X2NudHZjdDsKKwkJZWxzZQorCQkJYXJjaF90aW1lcl9yZWFkX2NvdW50ZXIgPSBhcmNoX2NvdW50ZXJfZ2V0X2NudHBjdDsKIAl9IGVsc2UgewogCQlhcmNoX3RpbWVyX3JlYWRfY291bnRlciA9IGFyY2hfY291bnRlcl9nZXRfY250dmN0X21lbTsKIApAQCAtNzAyLDYgKzcwNSwxNCBAQAogCWFyY2hfdGltZXJfZGV0ZWN0X3JhdGUoTlVMTCwgbnApOwogCiAJLyoKKwkgKiBJZiB3ZSBjYW5ub3QgcmVseSBvbiBmaXJtd2FyZSBpbml0aWFsaXppbmcgdGhlIHRpbWVyIHJlZ2lzdGVycyB0aGVuCisJICogd2Ugc2hvdWxkIHVzZSB0aGUgcGh5c2ljYWwgdGltZXJzIGluc3RlYWQuCisJICovCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0FSTSkgJiYKKwkgICAgb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiYXJtLGNwdS1yZWdpc3RlcnMtbm90LWZ3LWNvbmZpZ3VyZWQiKSkKKwkJCWFyY2hfdGltZXJfdXNlX3ZpcnR1YWwgPSBmYWxzZTsKKworCS8qCiAJICogSWYgSFlQIG1vZGUgaXMgYXZhaWxhYmxlLCB3ZSBrbm93IHRoYXQgdGhlIHBoeXNpY2FsIHRpbWVyCiAJICogaGFzIGJlZW4gY29uZmlndXJlZCB0byBiZSBhY2Nlc3NpYmxlIGZyb20gUEwxLiBVc2UgaXQsIHNvCiAJICogdGhhdCBhIGd1ZXN0IGNhbiB1c2UgdGhlIHZpcnR1YWwgdGltZXIgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZS1hcm1hZGEtMzcwLXhwLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWUtYXJtYWRhLTM3MC14cC5jCmluZGV4IDA0NTFlNjIuLjBjOGM1ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZS1hcm1hZGEtMzcwLXhwLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lLWFybWFkYS0zNzAteHAuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkX2Nsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogLyoKICAqIFRpbWVyIGJsb2NrIHJlZ2lzdGVycy4KQEAgLTIyMyw2ICsyMjQsMjggQEAKIAkubm90aWZpZXJfY2FsbCA9IGFybWFkYV8zNzBfeHBfdGltZXJfY3B1X25vdGlmeSwKIH07CiAKK3N0YXRpYyB1MzIgdGltZXIwX2N0cmxfcmVnLCB0aW1lcjBfbG9jYWxfY3RybF9yZWc7CisKK3N0YXRpYyBpbnQgYXJtYWRhXzM3MF94cF90aW1lcl9zdXNwZW5kKHZvaWQpCit7CisJdGltZXIwX2N0cmxfcmVnID0gcmVhZGwodGltZXJfYmFzZSArIFRJTUVSX0NUUkxfT0ZGKTsKKwl0aW1lcjBfbG9jYWxfY3RybF9yZWcgPSByZWFkbChsb2NhbF9iYXNlICsgVElNRVJfQ1RSTF9PRkYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhcm1hZGFfMzcwX3hwX3RpbWVyX3Jlc3VtZSh2b2lkKQoreworCXdyaXRlbCgweGZmZmZmZmZmLCB0aW1lcl9iYXNlICsgVElNRVIwX1ZBTF9PRkYpOworCXdyaXRlbCgweGZmZmZmZmZmLCB0aW1lcl9iYXNlICsgVElNRVIwX1JFTE9BRF9PRkYpOworCXdyaXRlbCh0aW1lcjBfY3RybF9yZWcsIHRpbWVyX2Jhc2UgKyBUSU1FUl9DVFJMX09GRik7CisJd3JpdGVsKHRpbWVyMF9sb2NhbF9jdHJsX3JlZywgbG9jYWxfYmFzZSArIFRJTUVSX0NUUkxfT0ZGKTsKK30KKworc3RydWN0IHN5c2NvcmVfb3BzIGFybWFkYV8zNzBfeHBfdGltZXJfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBhcm1hZGFfMzcwX3hwX3RpbWVyX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhcm1hZGFfMzcwX3hwX3RpbWVyX3Jlc3VtZSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzcwX3hwX3RpbWVyX2NvbW1vbl9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJdTMyIGNsciA9IDAsIHNldCA9IDA7CkBAIC0yODUsNiArMzA4LDggQEAKIAkvKiBJbW1lZGlhdGVseSBjb25maWd1cmUgdGhlIHRpbWVyIG9uIHRoZSBib290IENQVSAqLwogCWlmICghcmVzKQogCQlhcm1hZGFfMzcwX3hwX3RpbWVyX3NldHVwKHRoaXNfY3B1X3B0cihhcm1hZGFfMzcwX3hwX2V2dCkpOworCisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmFybWFkYV8zNzBfeHBfdGltZXJfc3lzY29yZV9vcHMpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhX3hwX3RpbWVyX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKQEAgLTI5Myw2ICszMTgsNyBAQAogCiAJLyogVGhlIDI1TWh6IGZpeGVkIGNsb2NrIGlzIG1hbmRhdG9yeSwgYW5kIG11c3QgYWx3YXlzIGJlIGF2YWlsYWJsZSAqLwogCUJVR19PTihJU19FUlIoY2xrKSk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7CiAJdGltZXJfY2xrID0gY2xrX2dldF9yYXRlKGNsayk7CiAKIAlhcm1hZGFfMzcwX3hwX3RpbWVyX2NvbW1vbl9pbml0KG5wKTsKQEAgLTMwMCwxMSArMzI2LDQwIEBACiBDTE9DS1NPVVJDRV9PRl9ERUNMQVJFKGFybWFkYV94cCwgIm1hcnZlbGwsYXJtYWRhLXhwLXRpbWVyIiwKIAkJICAgICAgIGFybWFkYV94cF90aW1lcl9pbml0KTsKIAorc3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfdGltZXJfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBjbGsgKmNsazsKKworCWNsayA9IG9mX2Nsa19nZXRfYnlfbmFtZShucCwgImZpeGVkIik7CisJaWYgKCFJU19FUlIoY2xrKSkgeworCQljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwkJdGltZXJfY2xrID0gY2xrX2dldF9yYXRlKGNsayk7CisJfSBlbHNlIHsKKworCQkvKgorCQkgKiBUaGlzIGZhbGxiYWNrIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIHJldGFpbiBwcm9wZXIKKwkJICogZGV2aWNldHJlZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKwkJICovCisJCWNsayA9IG9mX2Nsa19nZXQobnAsIDApOworCisJCS8qIE11c3QgaGF2ZSBhdCBsZWFzdCBhIGNsb2NrICovCisJCUJVR19PTihJU19FUlIoY2xrKSk7CisJCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOworCQl0aW1lcl9jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKSAvIFRJTUVSX0RJVklERVI7CisJCXRpbWVyMjVNaHogPSBmYWxzZTsKKwl9CisKKwlhcm1hZGFfMzcwX3hwX3RpbWVyX2NvbW1vbl9pbml0KG5wKTsKK30KK0NMT0NLU09VUkNFX09GX0RFQ0xBUkUoYXJtYWRhXzM3NSwgIm1hcnZlbGwsYXJtYWRhLTM3NS10aW1lciIsCisJCSAgICAgICBhcm1hZGFfMzc1X3RpbWVyX2luaXQpOworCiBzdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3MF90aW1lcl9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJc3RydWN0IGNsayAqY2xrID0gb2ZfY2xrX2dldChucCwgMCk7CiAKIAlCVUdfT04oSVNfRVJSKGNsaykpOworCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOwogCXRpbWVyX2NsayA9IGNsa19nZXRfcmF0ZShjbGspIC8gVElNRVJfRElWSURFUjsKIAl0aW1lcjI1TWh6ID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItYXRtZWwtcGl0LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLWF0bWVsLXBpdC5jCmluZGV4IGQ1Mjg5MDkuLmI1YjRkNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItYXRtZWwtcGl0LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1hdG1lbC1waXQuYwpAQCAtMjYyLDM1ICsyNjIsMyBAQAogfQogQ0xPQ0tTT1VSQ0VfT0ZfREVDTEFSRShhdDkxc2FtOTI2eF9waXQsICJhdG1lbCxhdDkxc2FtOTI2MC1waXQiLAogCQkgICAgICAgYXQ5MXNhbTkyNnhfcGl0X2R0X2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpwaXRfYmFzZV9hZGRyOwotCi12b2lkIF9faW5pdCBhdDkxc2FtOTI2eF9waXRfaW5pdChpbnQgaXJxKQotewotCXN0cnVjdCBwaXRfZGF0YSAqZGF0YTsKLQotCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcGFuaWMocHJfZm10KCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKSk7Ci0KLQlkYXRhLT5iYXNlID0gcGl0X2Jhc2VfYWRkcjsKLQotCWRhdGEtPm1jayA9IGNsa19nZXQoTlVMTCwgIm1jayIpOwotCWlmIChJU19FUlIoZGF0YS0+bWNrKSkKLQkJcGFuaWMocHJfZm10KCJVbmFibGUgdG8gZ2V0IG1jayBjbGtcbiIpKTsKLQotCWRhdGEtPmlycSA9IGlycTsKLQotCWF0OTFzYW05MjZ4X3BpdF9jb21tb25faW5pdChkYXRhKTsKLX0KLQotdm9pZCBfX2luaXQgYXQ5MXNhbTkyNnhfaW9yZW1hcF9waXQodTMyIGFkZHIpCi17Ci0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCXJldHVybjsKLQotCXBpdF9iYXNlX2FkZHIgPSBpb3JlbWFwKGFkZHIsIDE2KTsKLQotCWlmICghcGl0X2Jhc2VfYWRkcikKLQkJcGFuaWMocHJfZm10KCJJbXBvc3NpYmxlIHRvIGlvcmVtYXAgUElUXG4iKSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLWludGVncmF0b3ItYXAuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItaW50ZWdyYXRvci1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZWZkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLWludGVncmF0b3ItYXAuYwpAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIEludGVncmF0b3IvQVAgdGltZXIgZHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICogQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWRfY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYXJtX3RpbWVyLmg+CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBzY2hlZF9jbGtfYmFzZTsKKworc3RhdGljIHU2NCBub3RyYWNlIGludGVncmF0b3JfcmVhZF9zY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiAtcmVhZGwoc2NoZWRfY2xrX2Jhc2UgKyBUSU1FUl9WQUxVRSk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVncmF0b3JfY2xvY2tzb3VyY2VfaW5pdCh1bnNpZ25lZCBsb25nIGlucmF0ZSwKKwkJCQkJdm9pZCBfX2lvbWVtICpiYXNlKQoreworCXUzMiBjdHJsID0gVElNRVJfQ1RSTF9FTkFCTEUgfCBUSU1FUl9DVFJMX1BFUklPRElDOworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGlucmF0ZTsKKworCWlmIChyYXRlID49IDE1MDAwMDApIHsKKwkJcmF0ZSAvPSAxNjsKKwkJY3RybCB8PSBUSU1FUl9DVFJMX0RJVjE2OworCX0KKworCXdyaXRlbCgweGZmZmYsIGJhc2UgKyBUSU1FUl9MT0FEKTsKKwl3cml0ZWwoY3RybCwgYmFzZSArIFRJTUVSX0NUUkwpOworCisJY2xvY2tzb3VyY2VfbW1pb19pbml0KGJhc2UgKyBUSU1FUl9WQUxVRSwgInRpbWVyMiIsCisJCQlyYXRlLCAyMDAsIDE2LCBjbG9ja3NvdXJjZV9tbWlvX3JlYWRsX2Rvd24pOworCisJc2NoZWRfY2xrX2Jhc2UgPSBiYXNlOworCXNjaGVkX2Nsb2NrX3JlZ2lzdGVyKGludGVncmF0b3JfcmVhZF9zY2hlZF9jbG9jaywgMTYsIHJhdGUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9yZWxvYWQ7CitzdGF0aWMgdm9pZCBfX2lvbWVtICogY2xrZXZ0X2Jhc2U7CisKKy8qCisgKiBJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlZ3JhdG9yX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gZGV2X2lkOworCisJLyogY2xlYXIgdGhlIGludGVycnVwdCAqLworCXdyaXRlbCgxLCBjbGtldnRfYmFzZSArIFRJTUVSX0lOVENMUik7CisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgY2xrZXZ0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdTMyIGN0cmwgPSByZWFkbChjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpICYgflRJTUVSX0NUUkxfRU5BQkxFOworCisJLyogRGlzYWJsZSB0aW1lciAqLworCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJLyogRW5hYmxlIHRoZSB0aW1lciBhbmQgc3RhcnQgdGhlIHBlcmlvZGljIHRpY2sgKi8KKwkJd3JpdGVsKHRpbWVyX3JlbG9hZCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9MT0FEKTsKKwkJY3RybCB8PSBUSU1FUl9DVFJMX1BFUklPRElDIHwgVElNRVJfQ1RSTF9FTkFCTEU7CisJCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCS8qIExlYXZlIHRoZSB0aW1lciBkaXNhYmxlZCwgLnNldF9uZXh0X2V2ZW50IHdpbGwgZW5hYmxlIGl0ICovCisJCWN0cmwgJj0gflRJTUVSX0NUUkxfUEVSSU9ESUM7CisJCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCWRlZmF1bHQ6CisJCS8qIEp1c3QgbGVhdmUgaW4gZGlzYWJsZWQgc3RhdGUgKi8KKwkJYnJlYWs7CisJfQorCit9CisKK3N0YXRpYyBpbnQgY2xrZXZ0X3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgY3RybCA9IHJlYWRsKGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7CisKKwl3cml0ZWwoY3RybCAmIH5USU1FUl9DVFJMX0VOQUJMRSwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwobmV4dCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9MT0FEKTsKKwl3cml0ZWwoY3RybCB8IFRJTUVSX0NUUkxfRU5BQkxFLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGludGVncmF0b3JfY2xvY2tldmVudCA9IHsKKwkubmFtZQkJPSAidGltZXIxIiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNldF9tb2RlCT0gY2xrZXZ0X3NldF9tb2RlLAorCS5zZXRfbmV4dF9ldmVudAk9IGNsa2V2dF9zZXRfbmV4dF9ldmVudCwKKwkucmF0aW5nCQk9IDMwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGludGVncmF0b3JfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJ0aW1lciIsCisJLmZsYWdzCQk9IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmhhbmRsZXIJPSBpbnRlZ3JhdG9yX3RpbWVyX2ludGVycnVwdCwKKwkuZGV2X2lkCQk9ICZpbnRlZ3JhdG9yX2Nsb2NrZXZlbnQsCit9OworCitzdGF0aWMgdm9pZCBpbnRlZ3JhdG9yX2Nsb2NrZXZlbnRfaW5pdCh1bnNpZ25lZCBsb25nIGlucmF0ZSwKKwkJCQl2b2lkIF9faW9tZW0gKmJhc2UsIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyByYXRlID0gaW5yYXRlOworCXVuc2lnbmVkIGludCBjdHJsID0gMDsKKworCWNsa2V2dF9iYXNlID0gYmFzZTsKKwkvKiBDYWxjdWxhdGUgYW5kIHByb2dyYW0gYSBkaXZpc29yICovCisJaWYgKHJhdGUgPiAweDEwMDAwMCAqIEhaKSB7CisJCXJhdGUgLz0gMjU2OworCQljdHJsIHw9IFRJTUVSX0NUUkxfRElWMjU2OworCX0gZWxzZSBpZiAocmF0ZSA+IDB4MTAwMDAgKiBIWikgeworCQlyYXRlIC89IDE2OworCQljdHJsIHw9IFRJTUVSX0NUUkxfRElWMTY7CisJfQorCXRpbWVyX3JlbG9hZCA9IHJhdGUgLyBIWjsKKwl3cml0ZWwoY3RybCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKKworCXNldHVwX2lycShpcnEsICZpbnRlZ3JhdG9yX3RpbWVyX2lycSk7CisJY2xvY2tldmVudHNfY29uZmlnX2FuZF9yZWdpc3RlcigmaW50ZWdyYXRvcl9jbG9ja2V2ZW50LAorCQkJCQlyYXRlLAorCQkJCQkxLAorCQkJCQkweGZmZmZVKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGludGVncmF0b3JfYXBfdGltZXJfaW5pdF9vZihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IGVycjsKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJc3RydWN0IGRldmljZV9ub2RlICpwcmlfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNlY19ub2RlOworCisJYmFzZSA9IG9mX2lvX3JlcXVlc3RfYW5kX21hcChub2RlLCAwLCAiaW50ZWdyYXRvci10aW1lciIpOworCWlmICghYmFzZSkKKwkJcmV0dXJuOworCisJY2xrID0gb2ZfY2xrX2dldChub2RlLCAwKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJcHJfZXJyKCJObyBjbG9jayBmb3IgJXNcbiIsIG5vZGUtPm5hbWUpOworCQlyZXR1cm47CisJfQorCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKKwl3cml0ZWwoMCwgYmFzZSArIFRJTUVSX0NUUkwpOworCisJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcob2ZfYWxpYXNlcywKKwkJCQkiYXJtLHRpbWVyLXByaW1hcnkiLCAmcGF0aCk7CisJaWYgKFdBUk5fT04oZXJyKSkKKwkJcmV0dXJuOworCXByaV9ub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgocGF0aCk7CisJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcob2ZfYWxpYXNlcywKKwkJCQkiYXJtLHRpbWVyLXNlY29uZGFyeSIsICZwYXRoKTsKKwlpZiAoV0FSTl9PTihlcnIpKQorCQlyZXR1cm47CisJc2VjX25vZGUgPSBvZl9maW5kX25vZGVfYnlfcGF0aChwYXRoKTsKKworCWlmIChub2RlID09IHByaV9ub2RlKSB7CisJCS8qIFRoZSBwcmltYXJ5IHRpbWVyIGxhY2tzIElSUSwgdXNlIGFzIGNsb2Nrc291cmNlICovCisJCWludGVncmF0b3JfY2xvY2tzb3VyY2VfaW5pdChyYXRlLCBiYXNlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChub2RlID09IHNlY19ub2RlKSB7CisJCS8qIFRoZSBzZWNvbmRhcnkgdGltZXIgd2lsbCBkcml2ZSB0aGUgY2xvY2sgZXZlbnQgKi8KKwkJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7CisJCWludGVncmF0b3JfY2xvY2tldmVudF9pbml0KHJhdGUsIGJhc2UsIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlwcl9pbmZvKCJUaW1lciBAJXAgdW51c2VkXG4iLCBiYXNlKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrKTsKK30KKworQ0xPQ0tTT1VSQ0VfT0ZfREVDTEFSRShpbnRlZ3JhdG9yX2FwX3RpbWVyLCAiYXJtLGludGVncmF0b3ItdGltZXIiLAorCQkgICAgICAgaW50ZWdyYXRvcl9hcF90aW1lcl9pbml0X29mKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItbWFyY28uYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItbWFyY28uYwppbmRleCBjYWY3YTIwLi4zNjFhNzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLW1hcmNvLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1tYXJjby5jCkBAIC0yMCw4ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkX2Nsb2NrLmg+CiAKLSNkZWZpbmUgTUFSQ09fQ0xPQ0tfRlJFUSAxMDAwMDAwCi0KICNkZWZpbmUgU0lSRlNPQ19USU1FUl8zMkNPVU5URVJfMF9DVFJMCQkJMHgwMDAwCiAjZGVmaW5lIFNJUkZTT0NfVElNRVJfMzJDT1VOVEVSXzFfQ1RSTAkJCTB4MDAwNAogI2RlZmluZSBTSVJGU09DX1RJTUVSX01BVENIXzAJCQkJMHgwMDE4CkBAIC00MCw2ICszOCw4IEBACiAKICNkZWZpbmUgU0lSRlNPQ19USU1FUl9SRUdfQ05UIDYKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFyY29fdGltZXJfcmF0ZTsKKwogc3RhdGljIGNvbnN0IHUzMiBzaXJmc29jX3RpbWVyX3JlZ19saXN0W1NJUkZTT0NfVElNRVJfUkVHX0NOVF0gPSB7CiAJU0lSRlNPQ19USU1FUl9XQVRDSERPR19FTiwKIAlTSVJGU09DX1RJTUVSXzMyQ09VTlRFUl8wX0NUUkwsCkBAIC0xOTUsNyArMTk1LDcgQEAKIAljZS0+cmF0aW5nID0gMjAwOwogCWNlLT5zZXRfbW9kZSA9IHNpcmZzb2NfdGltZXJfc2V0X21vZGU7CiAJY2UtPnNldF9uZXh0X2V2ZW50ID0gc2lyZnNvY190aW1lcl9zZXRfbmV4dF9ldmVudDsKLQljbG9ja2V2ZW50c19jYWxjX211bHRfc2hpZnQoY2UsIE1BUkNPX0NMT0NLX0ZSRVEsIDYwKTsKKwljbG9ja2V2ZW50c19jYWxjX211bHRfc2hpZnQoY2UsIG1hcmNvX3RpbWVyX3JhdGUsIDYwKTsKIAljZS0+bWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygtMiwgY2UpOwogCWNlLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDIsIGNlKTsKIAljZS0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoY3B1KTsKQEAgLTI1Nyw3ICsyNTcsNiBAQAogLyogaW5pdGlhbGl6ZSB0aGUga2VybmVsIGppZmZ5IHRpbWVyIHNvdXJjZSAqLwogc3RhdGljIHZvaWQgX19pbml0IHNpcmZzb2NfbWFyY29fdGltZXJfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKIAl1MzIgdGltZXJfZGl2OwogCXN0cnVjdCBjbGsgKmNsazsKIApAQCAtMjY2LDE2ICsyNjUsMTIgQEAKIAogCUJVR19PTihjbGtfcHJlcGFyZV9lbmFibGUoY2xrKSk7CiAKLQlyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CisJbWFyY29fdGltZXJfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOwogCi0JQlVHX09OKHJhdGUgPCBNQVJDT19DTE9DS19GUkVRKTsKLQlCVUdfT04ocmF0ZSAlIE1BUkNPX0NMT0NLX0ZSRVEpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgdGltZXIgZGl2aWRlcnMgKi8KLQl0aW1lcl9kaXYgPSByYXRlIC8gTUFSQ09fQ0xPQ0tfRlJFUSAtIDE7Ci0Jd3JpdGVsX3JlbGF4ZWQodGltZXJfZGl2IDw8IDE2LCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSXzY0Q09VTlRFUl9DVFJMKTsKLQl3cml0ZWxfcmVsYXhlZCh0aW1lcl9kaXYgPDwgMTYsIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfMzJDT1VOVEVSXzBfQ1RSTCk7Ci0Jd3JpdGVsX3JlbGF4ZWQodGltZXJfZGl2IDw8IDE2LCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSXzMyQ09VTlRFUl8xX0NUUkwpOworCS8qIHRpbWVyIGRpdmlkZXJzOiAwLCBub3QgZGl2aWRlZCAqLworCXdyaXRlbF9yZWxheGVkKDAsIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfNjRDT1VOVEVSX0NUUkwpOworCXdyaXRlbF9yZWxheGVkKDAsIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfMzJDT1VOVEVSXzBfQ1RSTCk7CisJd3JpdGVsX3JlbGF4ZWQoMCwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl8zMkNPVU5URVJfMV9DVFJMKTsKIAogCS8qIEluaXRpYWxpemUgdGltZXIgY291bnRlcnMgdG8gMCAqLwogCXdyaXRlbF9yZWxheGVkKDAsIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfNjRDT1VOVEVSX0xPQURfTE8pOwpAQCAtMjg4LDcgKzI4Myw3IEBACiAJLyogQ2xlYXIgYWxsIGludGVycnVwdHMgKi8KIAl3cml0ZWxfcmVsYXhlZCgweEZGRkYsIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfSU5UUl9TVEFUVVMpOwogCi0JQlVHX09OKGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZzaXJmc29jX2Nsb2Nrc291cmNlLCBNQVJDT19DTE9DS19GUkVRKSk7CisJQlVHX09OKGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZzaXJmc29jX2Nsb2Nrc291cmNlLCBtYXJjb190aW1lcl9yYXRlKSk7CiAKIAlzaXJmc29jX2Nsb2NrZXZlbnRfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCA3MDcyYzI4Li40OWMyNjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtNjEsMTQgKzYxLDE0IEBACiAJICBoYXMgYmVlbiBpbml0aWFsaXplZC4KIAogY29uZmlnIEVEQUNfTUNFX0lOSgotCXRyaXN0YXRlICJTaW1wbGUgTUNFIGluamVjdGlvbiBpbnRlcmZhY2Ugb3ZlciAvc3lzZnMiCi0JZGVwZW5kcyBvbiBFREFDX0RFQ09ERV9NQ0UKKwl0cmlzdGF0ZSAiU2ltcGxlIE1DRSBpbmplY3Rpb24gaW50ZXJmYWNlIgorCWRlcGVuZHMgb24gRURBQ19ERUNPREVfTUNFICYmIERFQlVHX0ZTCiAJZGVmYXVsdCBuCiAJaGVscAotCSAgVGhpcyBpcyBhIHNpbXBsZSBpbnRlcmZhY2UgdG8gaW5qZWN0IE1DRXMgb3ZlciAvc3lzZnMgYW5kIHRlc3QKLQkgIHRoZSBNQ0UgZGVjb2RpbmcgY29kZSBpbiBFREFDLgorCSAgVGhpcyBpcyBhIHNpbXBsZSBkZWJ1Z2ZzIGludGVyZmFjZSB0byBpbmplY3QgTUNFcyBhbmQgdGVzdCBkaWZmZXJlbnQKKwkgIGFzcGVjdHMgb2YgdGhlIE1DRSBoYW5kbGluZyBjb2RlLgogCi0JICBUaGlzIGlzIGN1cnJlbnRseSBBTUQtb25seS4KKwkgIFdBUk5JTkc6IERvIG5vdCBldmVuIGFzc3VtZSB0aGlzIGludGVyZmFjZSBpcyBzdGF5aW5nIHN0YWJsZSEKIAogY29uZmlnIEVEQUNfTU1fRURBQwogCXRyaXN0YXRlICJNYWluIE1lbW9yeSBFREFDIChFcnJvciBEZXRlY3Rpb24gQW5kIENvcnJlY3Rpb24pIHJlcG9ydGluZyIKQEAgLTEwNSwxMSArMTA1LDExIEBACiAJICBJbiBkb3VidCwgc2F5ICdZJy4KIAogY29uZmlnIEVEQUNfQU1ENjQKLQl0cmlzdGF0ZSAiQU1ENjQgKE9wdGVyb24sIEF0aGxvbjY0KSBLOCwgRjEwaCIKLQlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBBTURfTkIgJiYgWDg2XzY0ICYmIEVEQUNfREVDT0RFX01DRQorCXRyaXN0YXRlICJBTUQ2NCAoT3B0ZXJvbiwgQXRobG9uNjQpIgorCWRlcGVuZHMgb24gRURBQ19NTV9FREFDICYmIEFNRF9OQiAmJiBFREFDX0RFQ09ERV9NQ0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb2YgRFJBTSBFQ0MgZXJyb3JzIG9uCi0JICB0aGUgQU1ENjQgZmFtaWxpZXMgb2YgbWVtb3J5IGNvbnRyb2xsZXJzIChLOCBhbmQgRjEwaCkKKwkgIHRoZSBBTUQ2NCBmYW1pbGllcyAoPj0gSzgpIG9mIG1lbW9yeSBjb250cm9sbGVycy4KIAogY29uZmlnIEVEQUNfQU1ENjRfRVJST1JfSU5KRUNUSU9OCiAJYm9vbCAiU3lzZnMgSFcgRXJyb3IgaW5qZWN0aW9uIGZhY2lsaXRpZXMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKaW5kZXggMzU5YWE0OS4uZDQwYzY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQpAQCAtOSw3ICs5LDcgQEAKIG9iai0kKENPTkZJR19FREFDKQkJCTo9IGVkYWNfc3R1Yi5vCiBvYmotJChDT05GSUdfRURBQ19NTV9FREFDKQkJKz0gZWRhY19jb3JlLm8KIAotZWRhY19jb3JlLXkJOj0gZWRhY19tYy5vIGVkYWNfZGV2aWNlLm8gZWRhY19tY19zeXNmcy5vIGVkYWNfcGNpX3N5c2ZzLm8KK2VkYWNfY29yZS15CTo9IGVkYWNfbWMubyBlZGFjX2RldmljZS5vIGVkYWNfbWNfc3lzZnMubwogZWRhY19jb3JlLXkJKz0gZWRhY19tb2R1bGUubyBlZGFjX2RldmljZV9zeXNmcy5vCiAKIGlmZGVmIENPTkZJR19QQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCmluZGV4IGJiZDY1MTQuLjE3NjM4ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtNjkyLDkgKzY5MiwxOSBAQAogewogCWVkYWNfZGJnKDEsICJGMnglZDkwIChEUkFNIENmZyBMb3cpOiAweCUwOHhcbiIsIGNoYW4sIGRjbHIpOwogCi0JZWRhY19kYmcoMSwgIiAgRElNTSB0eXBlOiAlc2J1ZmZlcmVkOyBhbGwgRElNTXMgc3VwcG9ydCBFQ0M6ICVzXG4iLAotCQkgKGRjbHIgJiBCSVQoMTYpKSA/ICAidW4iIDogIiIsCi0JCSAoZGNsciAmIEJJVCgxOSkpID8gInllcyIgOiAibm8iKTsKKwlpZiAocHZ0LT5kcmFtX3R5cGUgPT0gTUVNX0xSRERSMykgeworCQl1MzIgZGNzbSA9IHB2dC0+Y3NlbHNbY2hhbl0uY3NtYXNrc1swXTsKKwkJLyoKKwkJICogSXQncyBhc3N1bWVkIGFsbCBMUkRJTU1zIGluIGEgRENUIGFyZSBnb2luZyB0byBiZSBvZgorCQkgKiBzYW1lICd0eXBlJyB1bnRpbCBwcm92ZW4gb3RoZXJ3aXNlLiBTbywgdXNlIGEgY3MKKwkJICogdmFsdWUgb2YgJzAnIGhlcmUgdG8gZ2V0IGRjc20gdmFsdWUuCisJCSAqLworCQllZGFjX2RiZygxLCAiIExSRElNTSAlZHggcmFuayBtdWx0aXBseVxuIiwgKGRjc20gJiAweDMpKTsKKwl9CisKKwllZGFjX2RiZygxLCAiQWxsIERJTU1zIHN1cHBvcnQgRUNDOiVzXG4iLAorCQkgICAgKGRjbHIgJiBCSVQoMTkpKSA/ICJ5ZXMiIDogIm5vIik7CisKIAogCWVkYWNfZGJnKDEsICIgIFBBUi9FUlIgcGFyaXR5OiAlc1xuIiwKIAkJIChkY2xyICYgQklUKDgpKSA/ICAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKQEAgLTc1Niw3ICs3NjYsNyBAQAogCWlmIChwdnQtPmZhbSA9PSAweGYgJiYgcHZ0LT5leHRfbW9kZWwgPCBLOF9SRVZfRikgewogCQlwdnQtPmNzZWxzWzBdLmJfY250ID0gcHZ0LT5jc2Vsc1sxXS5iX2NudCA9IDg7CiAJCXB2dC0+Y3NlbHNbMF0ubV9jbnQgPSBwdnQtPmNzZWxzWzFdLm1fY250ID0gODsKLQl9IGVsc2UgaWYgKHB2dC0+ZmFtID09IDB4MTUgJiYgcHZ0LT5tb2RlbCA+PSAweDMwKSB7CisJfSBlbHNlIGlmIChwdnQtPmZhbSA9PSAweDE1ICYmIHB2dC0+bW9kZWwgPT0gMHgzMCkgewogCQlwdnQtPmNzZWxzWzBdLmJfY250ID0gcHZ0LT5jc2Vsc1sxXS5iX2NudCA9IDQ7CiAJCXB2dC0+Y3NlbHNbMF0ubV9jbnQgPSBwdnQtPmNzZWxzWzFdLm1fY250ID0gMjsKIAl9IGVsc2UgewpAQCAtODEzLDI1ICs4MjMsNjMgQEAKIAl9CiB9CiAKLXN0YXRpYyBlbnVtIG1lbV90eXBlIGRldGVybWluZV9tZW1vcnlfdHlwZShzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIGludCBjcykKK3N0YXRpYyB2b2lkIGRldGVybWluZV9tZW1vcnlfdHlwZShzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7Ci0JZW51bSBtZW1fdHlwZSB0eXBlOworCXUzMiBkcmFtX2N0cmwsIGRjc207CiAKLQkvKiBGMTVoIHN1cHBvcnRzIG9ubHkgRERSMyAqLwotCWlmIChwdnQtPmZhbSA+PSAweDE1KQotCQl0eXBlID0gKHB2dC0+ZGNscjAgJiBCSVQoMTYpKSA/CU1FTV9ERFIzIDogTUVNX1JERFIzOwotCWVsc2UgaWYgKHB2dC0+ZmFtID09IDB4MTAgfHwgcHZ0LT5leHRfbW9kZWwgPj0gSzhfUkVWX0YpIHsKKwlzd2l0Y2ggKHB2dC0+ZmFtKSB7CisJY2FzZSAweGY6CisJCWlmIChwdnQtPmV4dF9tb2RlbCA+PSBLOF9SRVZfRikKKwkJCWdvdG8gZGRyMzsKKworCQlwdnQtPmRyYW1fdHlwZSA9IChwdnQtPmRjbHIwICYgQklUKDE4KSkgPyBNRU1fRERSIDogTUVNX1JERFI7CisJCXJldHVybjsKKworCWNhc2UgMHgxMDoKIAkJaWYgKHB2dC0+ZGNocjAgJiBERFIzX01PREUpCi0JCQl0eXBlID0gKHB2dC0+ZGNscjAgJiBCSVQoMTYpKSA/CU1FTV9ERFIzIDogTUVNX1JERFIzOworCQkJZ290byBkZHIzOworCisJCXB2dC0+ZHJhbV90eXBlID0gKHB2dC0+ZGNscjAgJiBCSVQoMTYpKSA/IE1FTV9ERFIyIDogTUVNX1JERFIyOworCQlyZXR1cm47CisKKwljYXNlIDB4MTU6CisJCWlmIChwdnQtPm1vZGVsIDwgMHg2MCkKKwkJCWdvdG8gZGRyMzsKKworCQkvKgorCQkgKiBNb2RlbCAweDYwaCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nOgorCQkgKgorCQkgKiBXZSB1c2UgYSBDaGlwIFNlbGVjdCB2YWx1ZSBvZiAnMCcgdG8gb2J0YWluIGRjc20uCisJCSAqIFRoZW9yZXRpY2FsbHksIGl0IGlzIHBvc3NpYmxlIHRvIHBvcHVsYXRlIExSRElNTXMgb2YgZGlmZmVyZW50CisJCSAqICdSYW5rJyB2YWx1ZSBvbiBhIERDVC4gQnV0IHRoaXMgaXMgbm90IHRoZSBjb21tb24gY2FzZS4gU28sCisJCSAqIGl0J3MgcmVhc29uYWJsZSB0byBhc3N1bWUgYWxsIERJTU1zIGFyZSBnb2luZyB0byBiZSBvZiBzYW1lCisJCSAqICd0eXBlJyB1bnRpbCBwcm92ZW4gb3RoZXJ3aXNlLgorCQkgKi8KKwkJYW1kNjRfcmVhZF9kY3RfcGNpX2NmZyhwdnQsIDAsIERSQU1fQ09OVFJPTCwgJmRyYW1fY3RybCk7CisJCWRjc20gPSBwdnQtPmNzZWxzWzBdLmNzbWFza3NbMF07CisKKwkJaWYgKCgoZHJhbV9jdHJsID4+IDgpICYgMHg3KSA9PSAweDIpCisJCQlwdnQtPmRyYW1fdHlwZSA9IE1FTV9ERFI0OworCQllbHNlIGlmIChwdnQtPmRjbHIwICYgQklUKDE2KSkKKwkJCXB2dC0+ZHJhbV90eXBlID0gTUVNX0REUjM7CisJCWVsc2UgaWYgKGRjc20gJiAweDMpCisJCQlwdnQtPmRyYW1fdHlwZSA9IE1FTV9MUkREUjM7CiAJCWVsc2UKLQkJCXR5cGUgPSAocHZ0LT5kY2xyMCAmIEJJVCgxNikpID8gTUVNX0REUjIgOiBNRU1fUkREUjI7Ci0JfSBlbHNlIHsKLQkJdHlwZSA9IChwdnQtPmRjbHIwICYgQklUKDE4KSkgPyBNRU1fRERSIDogTUVNX1JERFI7CisJCQlwdnQtPmRyYW1fdHlwZSA9IE1FTV9SRERSMzsKKworCQlyZXR1cm47CisKKwljYXNlIDB4MTY6CisJCWdvdG8gZGRyMzsKKworCWRlZmF1bHQ6CisJCVdBUk4oMSwgS0VSTl9FUlIgIiVzOiBGYW1pbHk/Pz8gMHgleFxuIiwgX19mdW5jX18sIHB2dC0+ZmFtKTsKKwkJcHZ0LT5kcmFtX3R5cGUgPSBNRU1fRU1QVFk7CiAJfQorCXJldHVybjsKIAotCWFtZDY0X2luZm8oIkNTJWQ6ICVzXG4iLCBjcywgZWRhY19tZW1fdHlwZXNbdHlwZV0pOwotCi0JcmV0dXJuIHR5cGU7CitkZHIzOgorCXB2dC0+ZHJhbV90eXBlID0gKHB2dC0+ZGNscjAgJiBCSVQoMTYpKSA/IE1FTV9ERFIzIDogTUVNX1JERFIzOwogfQogCiAvKiBHZXQgdGhlIG51bWJlciBvZiBEQ1QgY2hhbm5lbHMgdGhlIG1lbW9yeSBjb250cm9sbGVyIGlzIHVzaW5nLiAqLwpAQCAtOTU4LDggKzEwMDYsMTIgQEAKIAlpZiAoV0FSTl9PTighbmIpKQogCQlyZXR1cm47CiAKLQlwY2lfZnVuYyA9IChwdnQtPm1vZGVsID09IDB4MzApID8gUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjEKLQkJCQkJOiBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjE7CisJaWYgKHB2dC0+bW9kZWwgPT0gMHg2MCkKKwkJcGNpX2Z1bmMgPSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTYwSF9OQl9GMTsKKwllbHNlIGlmIChwdnQtPm1vZGVsID09IDB4MzApCisJCXBjaV9mdW5jID0gUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjE7CisJZWxzZQorCQlwY2lfZnVuYyA9IFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GMTsKIAogCWYxID0gcGNpX2dldF9yZWxhdGVkX2Z1bmN0aW9uKG5iLT5taXNjLT52ZW5kb3IsIHBjaV9mdW5jLCBuYi0+bWlzYyk7CiAJaWYgKFdBUk5fT04oIWYxKSkKQEAgLTEwNDksNyArMTEwMSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgazhfZGJhbV90b19jaGlwX3NlbGVjdChzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIHU4IGRjdCwKLQkJCQkgIHVuc2lnbmVkIGNzX21vZGUpCisJCQkJICB1bnNpZ25lZCBjc19tb2RlLCBpbnQgY3NfbWFza19ucikKIHsKIAl1MzIgZGNsciA9IGRjdCA/IHB2dC0+ZGNscjEgOiBwdnQtPmRjbHIwOwogCkBAIC0xMTY3LDggKzEyMTksNDMgQEAKIAlyZXR1cm4gY3Nfc2l6ZTsKIH0KIAorc3RhdGljIGludCBkZHIzX2xyZGltbV9jc19zaXplKHVuc2lnbmVkIGksIHVuc2lnbmVkIHJhbmtfbXVsdGlwbHkpCit7CisJdW5zaWduZWQgc2hpZnQgPSAwOworCWludCBjc19zaXplID0gMDsKKworCWlmIChpIDwgNCB8fCBpID09IDYpCisJCWNzX3NpemUgPSAtMTsKKwllbHNlIGlmIChpID09IDEyKQorCQlzaGlmdCA9IDc7CisJZWxzZSBpZiAoIShpICYgMHgxKSkKKwkJc2hpZnQgPSBpID4+IDE7CisJZWxzZQorCQlzaGlmdCA9IChpICsgMSkgPj4gMTsKKworCWlmIChjc19zaXplICE9IC0xKQorCQljc19zaXplID0gcmFua19tdWx0aXBseSAqICgxMjggPDwgc2hpZnQpOworCisJcmV0dXJuIGNzX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgZGRyNF9jc19zaXplKHVuc2lnbmVkIGkpCit7CisJaW50IGNzX3NpemUgPSAwOworCisJaWYgKGkgPT0gMCkKKwkJY3Nfc2l6ZSA9IC0xOworCWVsc2UgaWYgKGkgPT0gMSkKKwkJY3Nfc2l6ZSA9IDEwMjQ7CisJZWxzZQorCQkvKiBNaW4gY3Nfc2l6ZSA9IDFHICovCisJCWNzX3NpemUgPSAxMDI0ICogKDEgPDwgKGkgPj4gMSkpOworCisJcmV0dXJuIGNzX3NpemU7Cit9CisKIHN0YXRpYyBpbnQgZjEwX2RiYW1fdG9fY2hpcF9zZWxlY3Qoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1OCBkY3QsCi0JCQkJICAgdW5zaWduZWQgY3NfbW9kZSkKKwkJCQkgICB1bnNpZ25lZCBjc19tb2RlLCBpbnQgY3NfbWFza19ucikKIHsKIAl1MzIgZGNsciA9IGRjdCA/IHB2dC0+ZGNscjEgOiBwdnQtPmRjbHIwOwogCkBAIC0xMTg0LDE4ICsxMjcxLDQ5IEBACiAgKiBGMTVoIHN1cHBvcnRzIG9ubHkgNjRiaXQgRENUIGludGVyZmFjZXMKICAqLwogc3RhdGljIGludCBmMTVfZGJhbV90b19jaGlwX3NlbGVjdChzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIHU4IGRjdCwKLQkJCQkgICB1bnNpZ25lZCBjc19tb2RlKQorCQkJCSAgIHVuc2lnbmVkIGNzX21vZGUsIGludCBjc19tYXNrX25yKQogewogCVdBUk5fT04oY3NfbW9kZSA+IDEyKTsKIAogCXJldHVybiBkZHIzX2NzX3NpemUoY3NfbW9kZSwgZmFsc2UpOwogfQogCisvKiBGMTVoIE02MGggc3VwcG9ydHMgRERSNCBtYXBwaW5nIGFzIHdlbGwuLiAqLworc3RhdGljIGludCBmMTVfbTYwaF9kYmFtX3RvX2NoaXBfc2VsZWN0KHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgdTggZGN0LAorCQkJCQl1bnNpZ25lZCBjc19tb2RlLCBpbnQgY3NfbWFza19ucikKK3sKKwlpbnQgY3Nfc2l6ZTsKKwl1MzIgZGNzbSA9IHB2dC0+Y3NlbHNbZGN0XS5jc21hc2tzW2NzX21hc2tfbnJdOworCisJV0FSTl9PTihjc19tb2RlID4gMTIpOworCisJaWYgKHB2dC0+ZHJhbV90eXBlID09IE1FTV9ERFI0KSB7CisJCWlmIChjc19tb2RlID4gOSkKKwkJCXJldHVybiAtMTsKKworCQljc19zaXplID0gZGRyNF9jc19zaXplKGNzX21vZGUpOworCX0gZWxzZSBpZiAocHZ0LT5kcmFtX3R5cGUgPT0gTUVNX0xSRERSMykgeworCQl1bnNpZ25lZCByYW5rX211bHRpcGx5ID0gZGNzbSAmIDB4ZjsKKworCQlpZiAocmFua19tdWx0aXBseSA9PSAzKQorCQkJcmFua19tdWx0aXBseSA9IDQ7CisJCWNzX3NpemUgPSBkZHIzX2xyZGltbV9jc19zaXplKGNzX21vZGUsIHJhbmtfbXVsdGlwbHkpOworCX0gZWxzZSB7CisJCS8qIE1pbmltdW0gY3Mgc2l6ZSBpcyA1MTJtYiBmb3IgRjE1aE02MGgqLworCQlpZiAoY3NfbW9kZSA9PSAweDEpCisJCQlyZXR1cm4gLTE7CisKKwkJY3Nfc2l6ZSA9IGRkcjNfY3Nfc2l6ZShjc19tb2RlLCBmYWxzZSk7CisJfQorCisJcmV0dXJuIGNzX3NpemU7Cit9CisKIC8qCiAgKiBGMTZoIGFuZCBGMTVoIG1vZGVsIDMwaCBoYXZlIG9ubHkgbGltaXRlZCBjc19tb2Rlcy4KICAqLwogc3RhdGljIGludCBmMTZfZGJhbV90b19jaGlwX3NlbGVjdChzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIHU4IGRjdCwKLQkJCQl1bnNpZ25lZCBjc19tb2RlKQorCQkJCXVuc2lnbmVkIGNzX21vZGUsIGludCBjc19tYXNrX25yKQogewogCVdBUk5fT04oY3NfbW9kZSA+IDEyKTsKIApAQCAtMTc1NywxMyArMTg3NSwyMCBAQAogCiAJCXNpemUwID0gMDsKIAkJaWYgKGRjc2JbZGltbSoyXSAmIERDU0JfQ1NfRU5BQkxFKQorCQkJLyogRm9yIGYxNW02MGgsIG5lZWQgbXVsdGlwbGllciBmb3IgTFJESU1NIGNzX3NpemUKKwkJCSAqIGNhbGN1bGF0aW9uLiBXZSBwYXNzICdkaW1tJyB2YWx1ZSB0byB0aGUgZGJhbV90b19jcworCQkJICogbWFwcGVyIHNvIHdlIGNhbiBmaW5kIHRoZSBtdWx0aXBsaWVyIGZyb20gdGhlCisJCQkgKiBjb3JyZXNwb25kaW5nIERDU00uCisJCQkgKi8KIAkJCXNpemUwID0gcHZ0LT5vcHMtPmRiYW1fdG9fY3MocHZ0LCBjdHJsLAotCQkJCQkJICAgICBEQkFNX0RJTU0oZGltbSwgZGJhbSkpOworCQkJCQkJICAgICBEQkFNX0RJTU0oZGltbSwgZGJhbSksCisJCQkJCQkgICAgIGRpbW0pOwogCiAJCXNpemUxID0gMDsKIAkJaWYgKGRjc2JbZGltbSoyICsgMV0gJiBEQ1NCX0NTX0VOQUJMRSkKIAkJCXNpemUxID0gcHZ0LT5vcHMtPmRiYW1fdG9fY3MocHZ0LCBjdHJsLAotCQkJCQkJICAgICBEQkFNX0RJTU0oZGltbSwgZGJhbSkpOworCQkJCQkJICAgICBEQkFNX0RJTU0oZGltbSwgZGJhbSksCisJCQkJCQkgICAgIGRpbW0pOwogCiAJCWFtZDY0X2luZm8oRURBQ19NQyAiOiAlZDogJTVkTUIgJWQ6ICU1ZE1CXG4iLAogCQkJCWRpbW0gKiAyLCAgICAgc2l6ZTAsCkBAIC0xODEyLDYgKzE5MzcsMTYgQEAKIAkJCS5kYmFtX3RvX2NzCQk9IGYxNl9kYmFtX3RvX2NoaXBfc2VsZWN0LAogCQl9CiAJfSwKKwlbRjE1X002MEhfQ1BVU10gPSB7CisJCS5jdGxfbmFtZSA9ICJGMTVoX002MGgiLAorCQkuZjFfaWQgPSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTYwSF9OQl9GMSwKKwkJLmYzX2lkID0gUENJX0RFVklDRV9JRF9BTURfMTVIX002MEhfTkJfRjMsCisJCS5vcHMgPSB7CisJCQkuZWFybHlfY2hhbm5lbF9jb3VudAk9IGYxeF9lYXJseV9jaGFubmVsX2NvdW50LAorCQkJLm1hcF9zeXNhZGRyX3RvX2Nzcm93CT0gZjF4X21hcF9zeXNhZGRyX3RvX2Nzcm93LAorCQkJLmRiYW1fdG9fY3MJCT0gZjE1X202MGhfZGJhbV90b19jaGlwX3NlbGVjdCwKKwkJfQorCX0sCiAJW0YxNl9DUFVTXSA9IHsKIAkJLmN0bF9uYW1lID0gIkYxNmgiLAogCQkuZjFfaWQgPSBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTkJfRjEsCkBAIC0yMTc1LDYgKzIzMTAsOCBAQAogCX0KIAogCXB2dC0+ZWNjX3N5bV9zeiA9IDQ7CisJZGV0ZXJtaW5lX21lbW9yeV90eXBlKHB2dCk7CisJZWRhY19kYmcoMSwgIiAgRElNTSB0eXBlOiAlc1xuIiwgZWRhY19tZW1fdHlwZXNbcHZ0LT5kcmFtX3R5cGVdKTsKIAogCWlmIChwdnQtPmZhbSA+PSAweDEwKSB7CiAJCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYzLCBFWFRfTkJfTUNBX0NGRywgJnRtcCk7CkBAIC0yMjM4LDcgKzIzNzUsOCBAQAogCSAqLwogCWNzX21vZGUgPSBEQkFNX0RJTU0oY3Nyb3dfbnIgLyAyLCBkYmFtKTsKIAotCW5yX3BhZ2VzID0gcHZ0LT5vcHMtPmRiYW1fdG9fY3MocHZ0LCBkY3QsIGNzX21vZGUpIDw8ICgyMCAtIFBBR0VfU0hJRlQpOworCW5yX3BhZ2VzID0gcHZ0LT5vcHMtPmRiYW1fdG9fY3MocHZ0LCBkY3QsIGNzX21vZGUsIChjc3Jvd19uciAvIDIpKQorCQkJCQkJCSAgIDw8ICgyMCAtIFBBR0VfU0hJRlQpOwogCiAJZWRhY19kYmcoMCwgImNzcm93OiAlZCwgY2hhbm5lbDogJWQsIERCQU0gaWR4OiAlZFxuIiwKIAkJICAgIGNzcm93X25yLCBkY3QsICBjc19tb2RlKTsKQEAgLTIyNTcsNyArMjM5NSw2IEBACiAJc3RydWN0IGNzcm93X2luZm8gKmNzcm93OwogCXN0cnVjdCBkaW1tX2luZm8gKmRpbW07CiAJZW51bSBlZGFjX3R5cGUgZWRhY19tb2RlOwotCWVudW0gbWVtX3R5cGUgbXR5cGU7CiAJaW50IGksIGosIGVtcHR5ID0gMTsKIAlpbnQgbnJfcGFnZXMgPSAwOwogCXUzMiB2YWw7CkBAIC0yMzAyLDggKzI0MzksNiBAQAogCQkJbnJfcGFnZXMgKz0gcm93X2RjdDFfcGFnZXM7CiAJCX0KIAotCQltdHlwZSA9IGRldGVybWluZV9tZW1vcnlfdHlwZShwdnQsIGkpOwotCiAJCWVkYWNfZGJnKDEsICJUb3RhbCBjc3JvdyVkIHBhZ2VzOiAldVxuIiwgaSwgbnJfcGFnZXMpOwogCiAJCS8qCkBAIC0yMzE3LDcgKzI0NTIsNyBAQAogCiAJCWZvciAoaiA9IDA7IGogPCBwdnQtPmNoYW5uZWxfY291bnQ7IGorKykgewogCQkJZGltbSA9IGNzcm93LT5jaGFubmVsc1tqXS0+ZGltbTsKLQkJCWRpbW0tPm10eXBlID0gbXR5cGU7CisJCQlkaW1tLT5tdHlwZSA9IHB2dC0+ZHJhbV90eXBlOwogCQkJZGltbS0+ZWRhY19tb2RlID0gZWRhY19tb2RlOwogCQl9CiAJfQpAQCAtMjYwNCw2ICsyNzM5LDEwIEBACiAJCQlmYW1fdHlwZSA9ICZmYW1pbHlfdHlwZXNbRjE1X00zMEhfQ1BVU107CiAJCQlwdnQtPm9wcyA9ICZmYW1pbHlfdHlwZXNbRjE1X00zMEhfQ1BVU10ub3BzOwogCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAocHZ0LT5tb2RlbCA9PSAweDYwKSB7CisJCQlmYW1fdHlwZSA9ICZmYW1pbHlfdHlwZXNbRjE1X002MEhfQ1BVU107CisJCQlwdnQtPm9wcyA9ICZmYW1pbHlfdHlwZXNbRjE1X002MEhfQ1BVU10ub3BzOworCQkJYnJlYWs7CiAJCX0KIAogCQlmYW1fdHlwZQk9ICZmYW1pbHlfdHlwZXNbRjE1X0NQVVNdOwpAQCAtMjgyOCw1NSArMjk2NywxMyBAQAogICogaW5xdWlyeSB0aGlzIHRhYmxlIHRvIHNlZSBpZiB0aGlzIGRyaXZlciBpcyBmb3IgYSBnaXZlbiBkZXZpY2UgZm91bmQuCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWQ2NF9wY2lfdGFibGVbXSA9IHsKLQl7Ci0JCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9BTUQsCi0JCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9BTURfSzhfTkJfTUVNQ1RMLAotCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKLQkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCi0JCS5jbGFzcwkJPSAwLAotCQkuY2xhc3NfbWFzawk9IDAsCi0JfSwKLQl7Ci0JCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9BTUQsCi0JCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9BTURfMTBIX05CX0RSQU0sCi0JCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKLQkJLmNsYXNzCQk9IDAsCi0JCS5jbGFzc19tYXNrCT0gMCwKLQl9LAotCXsKLQkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0FNRCwKLQkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjIsCi0JCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKLQkJLmNsYXNzCQk9IDAsCi0JCS5jbGFzc19tYXNrCT0gMCwKLQl9LAotCXsKLQkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0FNRCwKLQkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMiwKLQkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCi0JCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAotCQkuY2xhc3MJCT0gMCwKLQkJLmNsYXNzX21hc2sJPSAwLAotCX0sCi0JewotCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQU1ELAotCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfQU1EXzE2SF9OQl9GMiwKLQkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCi0JCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAotCQkuY2xhc3MJCT0gMCwKLQkJLmNsYXNzX21hc2sJPSAwLAotCX0sCi0JewotCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQU1ELAotCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfQU1EXzE2SF9NMzBIX05CX0YyLAotCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKLQkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCi0JCS5jbGFzcwkJPSAwLAotCQkuY2xhc3NfbWFzawk9IDAsCi0JfSwKLQorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9LOF9OQl9NRU1DVEwpIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzEwSF9OQl9EUkFNKSB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjIpIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0YyKSB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTYwSF9OQl9GMikgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTZIX05CX0YyKSB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTTMwSF9OQl9GMikgfSwKIAl7MCwgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbWQ2NF9wY2lfdGFibGUpOwpAQCAtMjkzOCw2ICszMDM1LDExIEBACiAJCWdvdG8gZXJyX25vX2luc3RhbmNlczsKIAogCXNldHVwX3BjaV9kZXZpY2UoKTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwlhbWQ2NF9lcnIoIiVzIG9uIDMyLWJpdCBpcyB1bnN1cHBvcnRlZC4gVVNFIEFUIFlPVVIgT1dOIFJJU0shXG4iLCBFREFDX01PRF9TVFIpOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIAogZXJyX25vX2luc3RhbmNlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmggYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCmluZGV4IDU1ZmI1OTQuLmQ4NDY4YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaApAQCAtMTYyLDEwICsxNjIsMTIgQEAKIC8qCiAgKiBQQ0ktZGVmaW5lZCBjb25maWd1cmF0aW9uIHNwYWNlIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0YxIDB4MTQxYgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMiAweDE0MWMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YxCTB4MTYwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjIJMHgxNjAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0YxIDB4MTQxYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMiAweDE0MWMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX002MEhfTkJfRjEgMHgxNTcxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NNjBIX05CX0YyIDB4MTU3MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTkJfRjEJMHgxNTMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE2SF9OQl9GMgkweDE1MzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTZIX00zMEhfTkJfRjEgMHgxNTgxCkBAIC0yMjEsNiArMjIzLDggQEAKIAogI2RlZmluZSBjc3Jvd19lbmFibGVkKGksIGRjdCwgcHZ0KQkoKHB2dCktPmNzZWxzWyhkY3QpXS5jc2Jhc2VzWyhpKV0gJiBEQ1NCX0NTX0VOQUJMRSkKIAorI2RlZmluZSBEUkFNX0NPTlRST0wJCQkweDc4CisKICNkZWZpbmUgREJBTTAJCQkJMHg4MAogI2RlZmluZSBEQkFNMQkJCQkweDE4MAogCkBAIC0zMDEsNiArMzA1LDcgQEAKIAlGMTBfQ1BVUywKIAlGMTVfQ1BVUywKIAlGMTVfTTMwSF9DUFVTLAorCUYxNV9NNjBIX0NQVVMsCiAJRjE2X0NQVVMsCiAJRjE2X00zMEhfQ1BVUywKIAlOVU1fRkFNSUxJRVMsCkBAIC0zNzksNiArMzg0LDkgQEAKIAogCS8qIHBsYWNlIHRvIHN0b3JlIGVycm9yIGluamVjdGlvbiBwYXJhbWV0ZXJzIHByaW9yIHRvIGlzc3VlICovCiAJc3RydWN0IGVycm9yX2luamVjdGlvbiBpbmplY3Rpb247CisKKwkvKiBjYWNoZSB0aGUgZHJhbV90eXBlICovCisJZW51bSBtZW1fdHlwZSBkcmFtX3R5cGU7CiB9OwogCiBlbnVtIGVycl9jb2RlcyB7CkBAIC00ODAsNyArNDg4LDggQEAKIAlpbnQgKCplYXJseV9jaGFubmVsX2NvdW50KQkoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KTsKIAl2b2lkICgqbWFwX3N5c2FkZHJfdG9fY3Nyb3cpCShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHU2NCBzeXNfYWRkciwKIAkJCQkJIHN0cnVjdCBlcnJfaW5mbyAqKTsKLQlpbnQgKCpkYmFtX3RvX2NzKQkJKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgdTggZGN0LCB1bnNpZ25lZCBjc19tb2RlKTsKKwlpbnQgKCpkYmFtX3RvX2NzKQkJKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgdTggZGN0LAorCQkJCQkgdW5zaWduZWQgY3NfbW9kZSwgaW50IGNzX21hc2tfbnIpOwogfTsKIAogc3RydWN0IGFtZDY0X2ZhbWlseV90eXBlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tYy5jCmluZGV4IGMzODkzYjAuLjE3NDc5MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfbWMuYwpAQCAtMTI1LDI3ICsxMjUsMjcgQEAKIAogI2VuZGlmCQkJCS8qIENPTkZJR19FREFDX0RFQlVHICovCiAKLS8qCi0gKiBrZWVwIHRob3NlIGluIHN5bmMgd2l0aCB0aGUgZW51bSBtZW1fdHlwZQotICovCiBjb25zdCBjaGFyICogY29uc3QgZWRhY19tZW1fdHlwZXNbXSA9IHsKLQkiRW1wdHkgY3Nyb3ciLAotCSJSZXNlcnZlZCBjc3JvdyB0eXBlIiwKLQkiVW5rbm93biBjc3JvdyB0eXBlIiwKLQkiRmFzdCBwYWdlIG1vZGUgUkFNIiwKLQkiRXh0ZW5kZWQgZGF0YSBvdXQgUkFNIiwKLQkiQnVyc3QgRXh0ZW5kZWQgZGF0YSBvdXQgUkFNIiwKLQkiU2luZ2xlIGRhdGEgcmF0ZSBTRFJBTSIsCi0JIlJlZ2lzdGVyZWQgc2luZ2xlIGRhdGEgcmF0ZSBTRFJBTSIsCi0JIkRvdWJsZSBkYXRhIHJhdGUgU0RSQU0iLAotCSJSZWdpc3RlcmVkIERvdWJsZSBkYXRhIHJhdGUgU0RSQU0iLAotCSJSYW1idXMgRFJBTSIsCi0JIlVuYnVmZmVyZWQgRERSMiBSQU0iLAotCSJGdWxseSBidWZmZXJlZCBERFIyIiwKLQkiUmVnaXN0ZXJlZCBERFIyIFJBTSIsCi0JIlJhbWJ1cyBYRFIiLAotCSJVbmJ1ZmZlcmVkIEREUjMgUkFNIiwKLQkiUmVnaXN0ZXJlZCBERFIzIFJBTSIsCisJW01FTV9FTVBUWV0JPSAiRW1wdHkgY3Nyb3ciLAorCVtNRU1fUkVTRVJWRURdCT0gIlJlc2VydmVkIGNzcm93IHR5cGUiLAorCVtNRU1fVU5LTk9XTl0JPSAiVW5rbm93biBjc3JvdyB0eXBlIiwKKwlbTUVNX0ZQTV0JPSAiRmFzdCBwYWdlIG1vZGUgUkFNIiwKKwlbTUVNX0VET10JPSAiRXh0ZW5kZWQgZGF0YSBvdXQgUkFNIiwKKwlbTUVNX0JFRE9dCT0gIkJ1cnN0IEV4dGVuZGVkIGRhdGEgb3V0IFJBTSIsCisJW01FTV9TRFJdCT0gIlNpbmdsZSBkYXRhIHJhdGUgU0RSQU0iLAorCVtNRU1fUkRSXQk9ICJSZWdpc3RlcmVkIHNpbmdsZSBkYXRhIHJhdGUgU0RSQU0iLAorCVtNRU1fRERSXQk9ICJEb3VibGUgZGF0YSByYXRlIFNEUkFNIiwKKwlbTUVNX1JERFJdCT0gIlJlZ2lzdGVyZWQgRG91YmxlIGRhdGEgcmF0ZSBTRFJBTSIsCisJW01FTV9STUJTXQk9ICJSYW1idXMgRFJBTSIsCisJW01FTV9ERFIyXQk9ICJVbmJ1ZmZlcmVkIEREUjIgUkFNIiwKKwlbTUVNX0ZCX0REUjJdCT0gIkZ1bGx5IGJ1ZmZlcmVkIEREUjIiLAorCVtNRU1fUkREUjJdCT0gIlJlZ2lzdGVyZWQgRERSMiBSQU0iLAorCVtNRU1fWERSXQk9ICJSYW1idXMgWERSIiwKKwlbTUVNX0REUjNdCT0gIlVuYnVmZmVyZWQgRERSMyBSQU0iLAorCVtNRU1fUkREUjNdCT0gIlJlZ2lzdGVyZWQgRERSMyBSQU0iLAorCVtNRU1fTFJERFIzXQk9ICJMb2FkLVJlZHVjZWQgRERSMyBSQU0iLAorCVtNRU1fRERSNF0JPSAiVW5idWZmZXJlZCBERFI0IFJBTSIsCisJW01FTV9SRERSNF0JPSAiUmVnaXN0ZXJlZCBERFI0IFJBTSIsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoZWRhY19tZW1fdHlwZXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCmluZGV4IGU4NjU4ZTQuLjI0ZDg3N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCkBAIC0xNCw5ICsxNCw2IEBACiAjaW5jbHVkZSAiZWRhY19jb3JlLmgiCiAjaW5jbHVkZSAiZWRhY19tb2R1bGUuaCIKIAotLyogVHVybiBvZmYgdGhpcyB3aG9sZSBmZWF0dXJlIGlmIFBDSSBpcyBub3QgY29uZmlndXJlZCAqLwotI2lmZGVmIENPTkZJR19QQ0kKLQogI2RlZmluZSBFREFDX1BDSV9TWU1MSU5LCSJkZXZpY2UiCiAKIC8qIGRhdGEgdmFyaWFibGVzIGV4cG9ydGVkIHZpYSBzeXNmcyAqLwpAQCAtNzYxLDUgKzc1OCwzIEBACiBtb2R1bGVfcGFyYW0oZWRhY19wY2lfcGFuaWNfb25fcGUsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGVkYWNfcGNpX3BhbmljX29uX3BlLAogCQkgIlBhbmljIG9uIFBDSSBCdXMgUGFyaXR5IGVycm9yOiAwPW9mZiAxPW9uIik7Ci0KLSNlbmRpZgkJCQkvKiBDT05GSUdfUENJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZ2hlc19lZGFjLmMgYi9kcml2ZXJzL2VkYWMvZ2hlc19lZGFjLmMKaW5kZXggODM5OWI0ZS4uYjI0NjgxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2doZXNfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9naGVzX2VkYWMuYwpAQCAtNDEzLDggKzQxMyw4IEBACiAKIAkvKiBHZW5lcmF0ZSB0aGUgdHJhY2UgZXZlbnQgKi8KIAlncmFpbl9iaXRzID0gZmxzX2xvbmcoZS0+Z3JhaW4pOwotCXNwcmludGYocHZ0LT5kZXRhaWxfbG9jYXRpb24sICJBUEVJIGxvY2F0aW9uOiAlcyAlcyIsCi0JCWUtPmxvY2F0aW9uLCBlLT5vdGhlcl9kZXRhaWwpOworCXNucHJpbnRmKHB2dC0+ZGV0YWlsX2xvY2F0aW9uLCBzaXplb2YocHZ0LT5kZXRhaWxfbG9jYXRpb24pLAorCQkgIkFQRUkgbG9jYXRpb246ICVzICVzIiwgZS0+bG9jYXRpb24sIGUtPm90aGVyX2RldGFpbCk7CiAJdHJhY2VfbWNfZXZlbnQodHlwZSwgZS0+bXNnLCBlLT5sYWJlbCwgZS0+ZXJyb3JfY291bnQsCiAJCSAgICAgICBtY2ktPm1jX2lkeCwgZS0+dG9wX2xheWVyLCBlLT5taWRfbGF5ZXIsIGUtPmxvd19sYXllciwKIAkJICAgICAgIFBBR0VTX1RPX01pQihlLT5wYWdlX2ZyYW1lX251bWJlcikgfCBlLT5vZmZzZXRfaW5fcGFnZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pMzAwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTMwMDBfZWRhYy5jCmluZGV4IGNkMjhiOTYuLjVjYjM2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pMzAwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2kzMDAwX2VkYWMuYwpAQCAtNTQyLDggKzU0Miw3IEBACiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpMzAwMF9kcml2ZXIpOwogCiBmYWlsMDoKLQlpZiAobWNpX3BkZXYpCi0JCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKKwlwY2lfZGV2X3B1dChtY2lfcGRldik7CiAKIAlyZXR1cm4gcGNpX3JjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2kzMjAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pMzIwMF9lZGFjLmMKaW5kZXggYWE5OGIxMy4uNGFkMDYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2kzMjAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTMyMDBfZWRhYy5jCkBAIC01MjMsOCArNTIzLDcgQEAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmkzMjAwX2RyaXZlcik7CiAKIGZhaWwwOgotCWlmIChtY2lfcGRldikKLQkJcGNpX2Rldl9wdXQobWNpX3BkZXYpOworCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKIAogCXJldHVybiBwY2lfcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTgyNDQzYnhneF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTgyNDQzYnhneF9lZGFjLmMKaW5kZXggZDczMGUyNzYuLmI0NzA1ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTgyNDQzYnhneF9lZGFjLmMKQEAgLTQ1OCw4ICs0NTgsNyBAQAogCWlmICghaTgyNDQzYnhneF9yZWdpc3RlcmVkKQogCQlpODI0NDNieGd4X2VkYWNtY19yZW1vdmVfb25lKG1jaV9wZGV2KTsKIAotCWlmIChtY2lfcGRldikKLQkJcGNpX2Rldl9wdXQobWNpX3BkZXYpOworCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKIH0KIAogbW9kdWxlX2luaXQoaTgyNDQzYnhneF9lZGFjbWNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbWNlX2FtZC5jIGIvZHJpdmVycy9lZGFjL21jZV9hbWQuYwppbmRleCBmNzhjMWM1Li41ODU4NmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbWNlX2FtZC5jCisrKyBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmMKQEAgLTEzOCw2ICsxMzgsMTUgQEAKIAkiUmV0aXJlIHN0YXR1cyBxdWV1ZSIKIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWM2X21jZV9kZXNjW10gPSB7CisJIkhhcmR3YXJlIEFzc2VydGlvbiIsCisJIkZyZWUgTGlzdCIsCisJIlBoeXNpY2FsIFJlZ2lzdGVyIEZpbGUiLAorCSJSZXRpcmUgUXVldWUiLAorCSJTY2hlZHVsZXIgdGFibGUiLAorCSJTdGF0dXMgUmVnaXN0ZXIgRmlsZSIsCit9OworCiBzdGF0aWMgYm9vbCBmMTJoX21jMF9tY2UodTE2IGVjLCB1OCB4ZWMpCiB7CiAJYm9vbCByZXQgPSBmYWxzZTsKQEAgLTQzMiw4ICs0NDEsOCBAQAogCQlwcl9jb250KCI6ICVzIGVycm9yIGluIHRoZSBMMiBjYWNoZSB0YWdzLlxuIiwgUjRfTVNHKGVjKSk7CiAJZWxzZSBpZiAoeGVjID09IDB4MCkgewogCQlpZiAoVExCX0VSUk9SKGVjKSkKLQkJCXByX2NvbnQoIjogJXMgZXJyb3IgaW4gYSBQYWdlIERlc2NyaXB0b3IgQ2FjaGUgb3IgIgotCQkJCSJHdWVzdCBUTEIuXG4iLCBUVF9NU0coZWMpKTsKKwkJCXByX2NvbnQoIiVzIGVycm9yIGluIGEgUGFnZSBEZXNjcmlwdG9yIENhY2hlIG9yIEd1ZXN0IFRMQi5cbiIsCisJCQkJVFRfTVNHKGVjKSk7CiAJCWVsc2UgaWYgKEJVU19FUlJPUihlYykpCiAJCQlwcl9jb250KCI6ICVzL0VDQyBlcnJvciBpbiBkYXRhIHJlYWQgZnJvbSBOQjogJXMuXG4iLAogCQkJCVI0X01TRyhlYyksIFBQX01TRyhlYykpOwpAQCAtNjcyLDM4ICs2ODEsMTAgQEAKIAogCXByX2VtZXJnKEhXX0VSUiAiTUM2IEVycm9yOiAiKTsKIAotCXN3aXRjaCAoeGVjKSB7Ci0JY2FzZSAweDA6Ci0JCXByX2NvbnQoIkhhcmR3YXJlIEFzc2VydGlvbiIpOwotCQlicmVhazsKLQotCWNhc2UgMHgxOgotCQlwcl9jb250KCJGcmVlIExpc3QiKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4MjoKLQkJcHJfY29udCgiUGh5c2ljYWwgUmVnaXN0ZXIgRmlsZSIpOwotCQlicmVhazsKLQotCWNhc2UgMHgzOgotCQlwcl9jb250KCJSZXRpcmUgUXVldWUiKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4NDoKLQkJcHJfY29udCgiU2NoZWR1bGVyIHRhYmxlIik7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDU6Ci0JCXByX2NvbnQoIlN0YXR1cyBSZWdpc3RlciBGaWxlIik7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKKwlpZiAoeGVjID4gMHg1KQogCQlnb3RvIHdyb25nX21jNl9tY2U7Ci0JCWJyZWFrOwotCX0KIAotCXByX2NvbnQoIiBwYXJpdHkgZXJyb3IuXG4iKTsKLQorCXByX2NvbnQoIiVzIHBhcml0eSBlcnJvci5cbiIsIG1jNl9tY2VfZGVzY1t4ZWNdKTsKIAlyZXR1cm47CiAKICB3cm9uZ19tYzZfbWNlOgpAQCAtODAwLDcgKzc4MSw3IEBACiAJcHJfY29udCgiXTogMHglMDE2bGx4XG4iLCBtLT5zdGF0dXMpOwogCiAJaWYgKG0tPnN0YXR1cyAmIE1DSV9TVEFUVVNfQUREUlYpCi0JCXByX2VtZXJnKEhXX0VSUiAiTUMlZF9BRERSOiAweCUwMTZsbHhcbiIsIG0tPmJhbmssIG0tPmFkZHIpOworCQlwcl9lbWVyZyhIV19FUlIgIk1DJWQgRXJyb3IgQWRkcmVzczogMHglMDE2bGx4XG4iLCBtLT5iYW5rLCBtLT5hZGRyKTsKIAogCWlmICghZmFtX29wcykKIAkJZ290byBlcnJfY29kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmggYi9kcml2ZXJzL2VkYWMvbWNlX2FtZC5oCmluZGV4IDUxYjdlM2EuLmMyMzU5YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmgKKysrIGIvZHJpdmVycy9lZGFjL21jZV9hbWQuaApAQCAtMzIsOSArMzIsNiBAQAogI2RlZmluZSBSNCh4KQkJCQkoKCh4KSA+PiA0KSAmIDB4ZikKICNkZWZpbmUgUjRfTVNHKHgpCQkJKChSNCh4KSA8IDkpID8gIHJycnJfbXNnc1tSNCh4KV0gOiAiV3JvbmcgUjQhIikKIAotI2RlZmluZSBNQ0lfU1RBVFVTX0RFRkVSUkVECQlCSVRfNjQoNDQpCi0jZGVmaW5lIE1DSV9TVEFUVVNfUE9JU09OCQlCSVRfNjQoNDMpCi0KIGV4dGVybiBjb25zdCBjaGFyICogY29uc3QgcHBfbXNnc1tdOwogCiBlbnVtIHR0X2lkcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYyBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kX2luai5jCmluZGV4IDVlNDZhOWYuLjBiZDkxYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tY2VfYW1kX2luai5jCisrKyBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kX2luai5jCkBAIC0xLDE3MyArMSwyNjIgQEAKIC8qCi0gKiBBIHNpbXBsZSBNQ0UgaW5qZWN0aW9uIGZhY2lsaXR5IGZvciB0ZXN0aW5nIHRoZSBNQ0UgZGVjb2RpbmcgY29kZS4gVGhpcwotICogZHJpdmVyIHNob3VsZCBiZSBidWlsdCBhcyBtb2R1bGUgc28gdGhhdCBpdCBjYW4gYmUgbG9hZGVkIG9uIHByb2R1Y3Rpb24KLSAqIGtlcm5lbHMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisgKiBBIHNpbXBsZSBNQ0UgaW5qZWN0aW9uIGZhY2lsaXR5IGZvciB0ZXN0aW5nIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBSQVMKKyAqIGNvZGUuIFRoaXMgZHJpdmVyIHNob3VsZCBiZSBidWlsdCBhcyBtb2R1bGUgc28gdGhhdCBpdCBjYW4gYmUgbG9hZGVkCisgKiBvbiBwcm9kdWN0aW9uIGtlcm5lbHMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCiAgKgogICogVGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSB2ZXJzaW9uIDIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEwOiAgQm9yaXNsYXYgUGV0a292IDxicEBhbGllbjguZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMTQ6ICBCb3Jpc2xhdiBQZXRrb3YgPGJwQGFsaWVuOC5kZT4KICAqCQkJQWR2YW5jZWQgTWljcm8gRGV2aWNlcyBJbmMuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZWRhYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KIAogI2luY2x1ZGUgIm1jZV9hbWQuaCIKIAotc3RydWN0IGVkYWNfbWNlX2F0dHIgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykgKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgZWRhY19tY2VfYXR0ciAqYXR0ciwgY2hhciAqYnVmKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgZWRhY19tY2VfYXR0ciAqYXR0ciwKLQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci19OwotCi0jZGVmaW5lIEVEQUNfTUNFX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZWRhY19tY2VfYXR0ciBtY2VfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkKLQotc3RhdGljIHN0cnVjdCBrb2JqZWN0ICptY2Vfa29iajsKLQogLyoKICAqIENvbGxlY3QgYWxsIHRoZSBNQ2lfWFhYIHNldHRpbmdzCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWNlIGlfbWNlOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRmc19pbmo7CiAKLSNkZWZpbmUgTUNFX0lOSkVDVF9TVE9SRShyZWcpCQkJCQkJXAotc3RhdGljIHNzaXplX3QgZWRhY19pbmplY3RfIyNyZWcjI19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwJCVwKLQkJCQkJIHN0cnVjdCBlZGFjX21jZV9hdHRyICphdHRyLAlcCi0JCQkJCSBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQpXAorI2RlZmluZSBNQ0VfSU5KRUNUX1NFVChyZWcpCQkJCQkJXAorc3RhdGljIGludCBpbmpfIyNyZWcjI19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkJCQkJXAogewkJCQkJCQkJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgdmFsdWU7CQkJCQkJXAorCXN0cnVjdCBtY2UgKm0gPSAoc3RydWN0IG1jZSAqKWRhdGE7CQkJCVwKIAkJCQkJCQkJCVwKLQlyZXQgPSBrc3RydG91bChkYXRhLCAxNiwgJnZhbHVlKTsJCQkJXAotCWlmIChyZXQgPCAwKQkJCQkJCQlcCi0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd3JpdGluZyBNQ0UgIiAjcmVnICIgZmllbGQuXG4iKTsJXAotCQkJCQkJCQkJXAotCWlfbWNlLnJlZyA9IHZhbHVlOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gY291bnQ7CQkJCQkJCVwKKwltLT5yZWcgPSB2YWw7CQkJCQkJCVwKKwlyZXR1cm4gMDsJCQkJCQkJXAogfQogCi1NQ0VfSU5KRUNUX1NUT1JFKHN0YXR1cyk7Ci1NQ0VfSU5KRUNUX1NUT1JFKG1pc2MpOwotTUNFX0lOSkVDVF9TVE9SRShhZGRyKTsKK01DRV9JTkpFQ1RfU0VUKHN0YXR1cyk7CitNQ0VfSU5KRUNUX1NFVChtaXNjKTsKK01DRV9JTkpFQ1RfU0VUKGFkZHIpOwogCi0jZGVmaW5lIE1DRV9JTkpFQ1RfU0hPVyhyZWcpCQkJCQkJXAotc3RhdGljIHNzaXplX3QgZWRhY19pbmplY3RfIyNyZWcjI19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAkJXAotCQkJCQlzdHJ1Y3QgZWRhY19tY2VfYXR0ciAqYXR0ciwJXAotCQkJCQljaGFyICpidWYpCQkJXAorI2RlZmluZSBNQ0VfSU5KRUNUX0dFVChyZWcpCQkJCQkJXAorc3RhdGljIGludCBpbmpfIyNyZWcjI19nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCQkJXAogewkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwMTZsbHhcbiIsIGlfbWNlLnJlZyk7CQkJXAorCXN0cnVjdCBtY2UgKm0gPSAoc3RydWN0IG1jZSAqKWRhdGE7CQkJCVwKKwkJCQkJCQkJCVwKKwkqdmFsID0gbS0+cmVnOwkJCQkJCQlcCisJcmV0dXJuIDA7CQkJCQkJCVwKIH0KIAotTUNFX0lOSkVDVF9TSE9XKHN0YXR1cyk7Ci1NQ0VfSU5KRUNUX1NIT1cobWlzYyk7Ci1NQ0VfSU5KRUNUX1NIT1coYWRkcik7CitNQ0VfSU5KRUNUX0dFVChzdGF0dXMpOworTUNFX0lOSkVDVF9HRVQobWlzYyk7CitNQ0VfSU5KRUNUX0dFVChhZGRyKTsKIAotRURBQ19NQ0VfQVRUUihzdGF0dXMsIDA2NDQsIGVkYWNfaW5qZWN0X3N0YXR1c19zaG93LCBlZGFjX2luamVjdF9zdGF0dXNfc3RvcmUpOwotRURBQ19NQ0VfQVRUUihtaXNjLCAwNjQ0LCBlZGFjX2luamVjdF9taXNjX3Nob3csIGVkYWNfaW5qZWN0X21pc2Nfc3RvcmUpOwotRURBQ19NQ0VfQVRUUihhZGRyLCAwNjQ0LCBlZGFjX2luamVjdF9hZGRyX3Nob3csIGVkYWNfaW5qZWN0X2FkZHJfc3RvcmUpOworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoc3RhdHVzX2ZvcHMsIGlual9zdGF0dXNfZ2V0LCBpbmpfc3RhdHVzX3NldCwgIiVsbHhcbiIpOworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUobWlzY19mb3BzLCBpbmpfbWlzY19nZXQsIGlual9taXNjX3NldCwgIiVsbHhcbiIpOworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoYWRkcl9mb3BzLCBpbmpfYWRkcl9nZXQsIGlual9hZGRyX3NldCwgIiVsbHhcbiIpOworCisvKgorICogQ2FsbGVyIG5lZWRzIHRvIGJlIG1ha2Ugc3VyZSB0aGlzIGNwdSBkb2Vzbid0IGRpc2FwcGVhcgorICogZnJvbSB1bmRlciB1cywgaS5lLjogZ2V0X2NwdS9wdXRfY3B1LgorICovCitzdGF0aWMgaW50IHRvZ2dsZV9od19tY2VfaW5qZWN0KHVuc2lnbmVkIGludCBjcHUsIGJvb2wgZW5hYmxlKQoreworCXUzMiBsLCBoOworCWludCBlcnI7CisKKwllcnIgPSByZG1zcl9vbl9jcHUoY3B1LCBNU1JfSzdfSFdDUiwgJmwsICZoKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiJXM6IGVycm9yIHJlYWRpbmcgSFdDUlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gZXJyOworCX0KKworCWVuYWJsZSA/IChsIHw9IEJJVCgxOCkpIDogKGwgJj0gfkJJVCgxOCkpOworCisJZXJyID0gd3Jtc3Jfb25fY3B1KGNwdSwgTVNSX0s3X0hXQ1IsIGwsIGgpOworCWlmIChlcnIpCisJCXByX2VycigiJXM6IGVycm9yIHdyaXRpbmcgSFdDUlxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmbGFnc19nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJc3RydWN0IG1jZSAqbSA9IChzdHJ1Y3QgbWNlICopZGF0YTsKKworCSp2YWwgPSBtLT5pbmplY3RfZmxhZ3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmbGFnc19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKK3sKKwlzdHJ1Y3QgbWNlICptID0gKHN0cnVjdCBtY2UgKilkYXRhOworCisJbS0+aW5qZWN0X2ZsYWdzID0gKHU4KXZhbDsKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoZmxhZ3NfZm9wcywgZmxhZ3NfZ2V0LCBmbGFnc19zZXQsICIlbGx1XG4iKTsKKworLyoKKyAqIE9uIHdoaWNoIENQVSB0byBpbmplY3Q/CisgKi8KK01DRV9JTkpFQ1RfR0VUKGV4dGNwdSk7CisKK3N0YXRpYyBpbnQgaW5qX2V4dGNwdV9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKK3sKKwlzdHJ1Y3QgbWNlICptID0gKHN0cnVjdCBtY2UgKilkYXRhOworCisJaWYgKHZhbCA+PSBucl9jcHVfaWRzIHx8ICFjcHVfb25saW5lKHZhbCkpIHsKKwkJcHJfZXJyKCIlczogSW52YWxpZCBDUFU6ICVsbHVcbiIsIF9fZnVuY19fLCB2YWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbS0+ZXh0Y3B1ID0gdmFsOworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShleHRjcHVfZm9wcywgaW5qX2V4dGNwdV9nZXQsIGlual9leHRjcHVfc2V0LCAiJWxsdVxuIik7CisKK3N0YXRpYyB2b2lkIHRyaWdnZXJfbWNlKHZvaWQgKmluZm8pCit7CisJYXNtIHZvbGF0aWxlKCJpbnQgJDE4Iik7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2luamVjdCh2b2lkKQoreworCXU2NCBtY2dfc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gaV9tY2UuZXh0Y3B1OworCXU4IGIgPSBpX21jZS5iYW5rOworCisJaWYgKCEoaV9tY2UuaW5qZWN0X2ZsYWdzICYgTUNKX0VYQ0VQVElPTikpIHsKKwkJYW1kX2RlY29kZV9tY2UoTlVMTCwgMCwgJmlfbWNlKTsKKwkJcmV0dXJuOworCX0KKworCWdldF9vbmxpbmVfY3B1cygpOworCWlmICghY3B1X29ubGluZShjcHUpKQorCQlnb3RvIGVycjsKKworCS8qIHByZXAgTUNFIGdsb2JhbCBzZXR0aW5ncyBmb3IgdGhlIGluamVjdGlvbiAqLworCW1jZ19zdGF0dXMgPSBNQ0dfU1RBVFVTX01DSVAgfCBNQ0dfU1RBVFVTX0VJUFY7CisKKwlpZiAoIShpX21jZS5zdGF0dXMgJiBNQ0lfU1RBVFVTX1BDQykpCisJCW1jZ19zdGF0dXMgfD0gTUNHX1NUQVRVU19SSVBWOworCisJdG9nZ2xlX2h3X21jZV9pbmplY3QoY3B1LCB0cnVlKTsKKworCXdybXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX01DR19TVEFUVVMsCisJCSAgICAgKHUzMiltY2dfc3RhdHVzLCAodTMyKShtY2dfc3RhdHVzID4+IDMyKSk7CisKKwl3cm1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9NQ3hfU1RBVFVTKGIpLAorCQkgICAgICh1MzIpaV9tY2Uuc3RhdHVzLCAodTMyKShpX21jZS5zdGF0dXMgPj4gMzIpKTsKKworCXdybXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX01DeF9BRERSKGIpLAorCQkgICAgICh1MzIpaV9tY2UuYWRkciwgKHUzMikoaV9tY2UuYWRkciA+PiAzMikpOworCisJd3Jtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfTUN4X01JU0MoYiksCisJCSAgICAgKHUzMilpX21jZS5taXNjLCAodTMyKShpX21jZS5taXNjID4+IDMyKSk7CisKKwl0b2dnbGVfaHdfbWNlX2luamVjdChjcHUsIGZhbHNlKTsKKworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIHRyaWdnZXJfbWNlLCBOVUxMLCAwKTsKKworZXJyOgorCXB1dF9vbmxpbmVfY3B1cygpOworCit9CiAKIC8qCiAgKiBUaGlzIGRlbm90ZXMgaW50byB3aGljaCBiYW5rIHdlJ3JlIGluamVjdGluZyBhbmQgdHJpZ2dlcnMKICAqIHRoZSBpbmplY3Rpb24sIGF0IHRoZSBzYW1lIHRpbWUuCiAgKi8KLXN0YXRpYyBzc2l6ZV90IGVkYWNfaW5qZWN0X2Jhbmtfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgICAgc3RydWN0IGVkYWNfbWNlX2F0dHIgKmF0dHIsCi0JCQkJICAgICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50KQorc3RhdGljIGludCBpbmpfYmFua19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKIHsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOworCXN0cnVjdCBtY2UgKm0gPSAoc3RydWN0IG1jZSAqKWRhdGE7CiAKLQlyZXQgPSBrc3RydG91bChkYXRhLCAxMCwgJnZhbHVlKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgYmFuayB2YWx1ZSFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodmFsdWUgPiA1KQotCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgIT0gMHgxNSB8fCB2YWx1ZSA+IDYpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiTm9uLWV4aXN0ZW50IE1DRSBiYW5rOiAlbHVcbiIsIHZhbHVlKTsKKwlpZiAodmFsID4gNSkgeworCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgIT0gMHgxNSB8fCB2YWwgPiA2KSB7CisJCQlwcl9lcnIoIk5vbi1leGlzdGVudCBNQ0UgYmFuazogJWxsdVxuIiwgdmFsKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJfQogCi0JaV9tY2UuYmFuayA9IHZhbHVlOworCW0tPmJhbmsgPSB2YWw7CisJZG9faW5qZWN0KCk7CiAKLQlhbWRfZGVjb2RlX21jZShOVUxMLCAwLCAmaV9tY2UpOwotCi0JcmV0dXJuIGNvdW50OworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBlZGFjX2luamVjdF9iYW5rX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgICBzdHJ1Y3QgZWRhY19tY2VfYXR0ciAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIGludCBpbmpfYmFua19nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGlfbWNlLmJhbmspOworCXN0cnVjdCBtY2UgKm0gPSAoc3RydWN0IG1jZSAqKWRhdGE7CisKKwkqdmFsID0gbS0+YmFuazsKKwlyZXR1cm4gMDsKIH0KIAotRURBQ19NQ0VfQVRUUihiYW5rLCAwNjQ0LCBlZGFjX2luamVjdF9iYW5rX3Nob3csIGVkYWNfaW5qZWN0X2Jhbmtfc3RvcmUpOworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoYmFua19mb3BzLCBpbmpfYmFua19nZXQsIGlual9iYW5rX3NldCwgIiVsbHVcbiIpOwogCi1zdGF0aWMgc3RydWN0IGVkYWNfbWNlX2F0dHIgKnN5c2ZzX2F0dHJzW10gPSB7ICZtY2VfYXR0cl9zdGF0dXMsICZtY2VfYXR0cl9taXNjLAotCQkJCQkgICAgICAgJm1jZV9hdHRyX2FkZHIsICZtY2VfYXR0cl9iYW5rCitzdHJ1Y3QgZGZzX25vZGUgeworCWNoYXIgKm5hbWU7CisJc3RydWN0IGRlbnRyeSAqZDsKKwljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOworfSBkZnNfZmxzW10gPSB7CisJeyAubmFtZSA9ICJzdGF0dXMiLAkuZm9wcyA9ICZzdGF0dXNfZm9wcyB9LAorCXsgLm5hbWUgPSAibWlzYyIsCS5mb3BzID0gJm1pc2NfZm9wcyB9LAorCXsgLm5hbWUgPSAiYWRkciIsCS5mb3BzID0gJmFkZHJfZm9wcyB9LAorCXsgLm5hbWUgPSAiYmFuayIsCS5mb3BzID0gJmJhbmtfZm9wcyB9LAorCXsgLm5hbWUgPSAiZmxhZ3MiLAkuZm9wcyA9ICZmbGFnc19mb3BzIH0sCisJeyAubmFtZSA9ICJjcHUiLAkuZm9wcyA9ICZleHRjcHVfZm9wcyB9LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgZWRhY19pbml0X21jZV9pbmplY3Qodm9pZCkKLXsKLQlzdHJ1Y3QgYnVzX3R5cGUgKmVkYWNfc3Vic3lzID0gTlVMTDsKLQlpbnQgaSwgZXJyID0gMDsKLQotCWVkYWNfc3Vic3lzID0gZWRhY19nZXRfc3lzZnNfc3Vic3lzKCk7Ci0JaWYgKCFlZGFjX3N1YnN5cykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltY2Vfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoIm1jZSIsICZlZGFjX3N1YnN5cy0+ZGV2X3Jvb3QtPmtvYmopOwotCWlmICghbWNlX2tvYmopIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBjcmVhdGluZyBhIG1jZSBrc2V0LlxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX21jZV9rb2JqOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN5c2ZzX2F0dHJzKTsgaSsrKSB7Ci0JCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKG1jZV9rb2JqLCAmc3lzZnNfYXR0cnNbaV0tPmF0dHIpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nICVzIGluIHN5c2ZzLlxuIiwKLQkJCQkJc3lzZnNfYXR0cnNbaV0tPmF0dHIubmFtZSk7Ci0JCQlnb3RvIGVycl9zeXNmc19jcmVhdGU7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9zeXNmc19jcmVhdGU6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlzeXNmc19yZW1vdmVfZmlsZShtY2Vfa29iaiwgJnN5c2ZzX2F0dHJzW2ldLT5hdHRyKTsKLQotCWtvYmplY3RfZGVsKG1jZV9rb2JqKTsKLQotZXJyX21jZV9rb2JqOgotCWVkYWNfcHV0X3N5c2ZzX3N1YnN5cygpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGVkYWNfZXhpdF9tY2VfaW5qZWN0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X21jZV9pbmplY3Qodm9pZCkKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN5c2ZzX2F0dHJzKTsgaSsrKQotCQlzeXNmc19yZW1vdmVfZmlsZShtY2Vfa29iaiwgJnN5c2ZzX2F0dHJzW2ldLT5hdHRyKTsKKwlkZnNfaW5qID0gZGVidWdmc19jcmVhdGVfZGlyKCJtY2UtaW5qZWN0IiwgTlVMTCk7CisJaWYgKCFkZnNfaW5qKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWtvYmplY3RfZGVsKG1jZV9rb2JqKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZnNfZmxzKTsgaSsrKSB7CisJCWRmc19mbHNbaV0uZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZGZzX2Zsc1tpXS5uYW1lLAorCQkJCQkJICAgIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJCQkJICAgIGRmc19pbmosCisJCQkJCQkgICAgJmlfbWNlLAorCQkJCQkJICAgIGRmc19mbHNbaV0uZm9wcyk7CiAKLQllZGFjX3B1dF9zeXNmc19zdWJzeXMoKTsKKwkJaWYgKCFkZnNfZmxzW2ldLmQpCisJCQlnb3RvIGVycl9kZnNfYWRkOworCX0KKworCXJldHVybiAwOworCitlcnJfZGZzX2FkZDoKKwl3aGlsZSAoLS1pID49IDApCisJCWRlYnVnZnNfcmVtb3ZlKGRmc19mbHNbaV0uZCk7CisKKwlkZWJ1Z2ZzX3JlbW92ZShkZnNfaW5qKTsKKwlkZnNfaW5qID0gTlVMTDsKKworCXJldHVybiAtRU5PTUVNOwogfQogCi1tb2R1bGVfaW5pdChlZGFjX2luaXRfbWNlX2luamVjdCk7Ci1tb2R1bGVfZXhpdChlZGFjX2V4aXRfbWNlX2luamVjdCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9tY2VfaW5qZWN0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZnNfZmxzKTsgaSsrKQorCQlkZWJ1Z2ZzX3JlbW92ZShkZnNfZmxzW2ldLmQpOworCisJbWVtc2V0KCZkZnNfZmxzLCAwLCBzaXplb2YoZGZzX2ZscykpOworCisJZGVidWdmc19yZW1vdmUoZGZzX2luaik7CisJZGZzX2luaiA9IE5VTEw7Cit9Cittb2R1bGVfaW5pdChpbml0X21jZV9pbmplY3QpOworbW9kdWxlX2V4aXQoZXhpdF9tY2VfaW5qZWN0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQm9yaXNsYXYgUGV0a292IDxicEBhbGllbjguZGU+Iik7CiBNT0RVTEVfQVVUSE9SKCJBTUQgSW5jLiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNQ0UgaW5qZWN0aW9uIGZhY2lsaXR5IGZvciB0ZXN0aW5nIE1DRSBkZWNvZGluZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNQ0UgaW5qZWN0aW9uIGZhY2lsaXR5IGZvciBSQVMgdGVzdGluZyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jCmluZGV4IDU0MmZhZDcuLjYzNjZlODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQlyZXMgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsCiAJCQkJICAgICAgIHBkYXRhLT5pcnEsCiAJCQkJICAgICAgIG12NjR4NjBfcGNpX2lzciwKLQkJCQkgICAgICAgSVJRRl9ESVNBQkxFRCwKKwkJCQkgICAgICAgMCwKIAkJCQkgICAgICAgIltFREFDXSBQQ0kgZXJyIiwKIAkJCQkgICAgICAgcGNpKTsKIAkJaWYgKHJlcyA8IDApIHsKQEAgLTM0NSw3ICszNDUsNyBAQAogCQlyZXMgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsCiAJCQkJICAgICAgIHBkYXRhLT5pcnEsCiAJCQkJICAgICAgIG12NjR4NjBfc3JhbV9pc3IsCi0JCQkJICAgICAgIElSUUZfRElTQUJMRUQsCisJCQkJICAgICAgIDAsCiAJCQkJICAgICAgICJbRURBQ10gU1JBTSBlcnIiLAogCQkJCSAgICAgICBlZGFjX2Rldik7CiAJCWlmIChyZXMgPCAwKSB7CkBAIC01NDAsNyArNTQwLDcgQEAKIAkJcmVzID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LAogCQkJCSAgICAgICBwZGF0YS0+aXJxLAogCQkJCSAgICAgICBtdjY0eDYwX2NwdV9pc3IsCi0JCQkJICAgICAgIElSUUZfRElTQUJMRUQsCisJCQkJICAgICAgIDAsCiAJCQkJICAgICAgICJbRURBQ10gQ1BVIGVyciIsCiAJCQkJICAgICAgIGVkYWNfZGV2KTsKIAkJaWYgKHJlcyA8IDApIHsKQEAgLTgwMCw3ICs4MDAsNyBAQAogCQlyZXMgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsCiAJCQkJICAgICAgIHBkYXRhLT5pcnEsCiAJCQkJICAgICAgIG12NjR4NjBfbWNfaXNyLAotCQkJCSAgICAgICBJUlFGX0RJU0FCTEVELAorCQkJCSAgICAgICAwLAogCQkJCSAgICAgICAiW0VEQUNdIE1DIGVyciIsCiAJCQkJICAgICAgIG1jaSk7CiAJCWlmIChyZXMgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jCmluZGV4IDBmMDRkNWUuLjQxNTkzNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jCkBAIC0xMTIwLDcgKzExMjAsNyBAQAogCiAJc3RhdHVzID0gcmVxdWVzdF9pcnEoZGVkX2lycSwKIAkJCSAgICAgcHBjNHh4X2VkYWNfaXNyLAotCQkJICAgICBJUlFGX0RJU0FCTEVELAorCQkJICAgICAwLAogCQkJICAgICAiW0VEQUNdIE1DIEVDQ0RFRCIsCiAJCQkgICAgIG1jaSk7CiAKQEAgLTExMzQsNyArMTEzNCw3IEBACiAKIAlzdGF0dXMgPSByZXF1ZXN0X2lycShzZWNfaXJxLAogCQkJICAgICBwcGM0eHhfZWRhY19pc3IsCi0JCQkgICAgIElSUUZfRElTQUJMRUQsCisJCQkgICAgIDAsCiAJCQkgICAgICJbRURBQ10gTUMgRUNDU0VDIiwKIAkJCSAgICAgbWNpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3gzOF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMveDM4X2VkYWMuYwppbmRleCBlNjQ0YjUyLi43YzVjZGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMveDM4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMveDM4X2VkYWMuYwpAQCAtNTAwLDggKzUwMCw3IEBACiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ4MzhfZHJpdmVyKTsKIAogZmFpbDA6Ci0JaWYgKG1jaV9wZGV2KQotCQlwY2lfZGV2X3B1dChtY2lfcGRldik7CisJcGNpX2Rldl9wdXQobWNpX3BkZXYpOwogCiAJcmV0dXJuIHBjaV9yYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwppbmRleCAxN2FmYzUxLi5jNWY3YjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCkBAIC05Myw2ICs5MywxMiBAQAogCQljb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0gPSAoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKilkYXRhOwogCiAJCS8qCisJCSAqIDcuNDUgRW5kLW9mLVRhYmxlIChUeXBlIDEyNykgW1NNQklPUyByZWZlcmVuY2Ugc3BlYyB2My4wLjBdCisJCSAqLworCQlpZiAoZG0tPnR5cGUgPT0gRE1JX0VOVFJZX0VORF9PRl9UQUJMRSkKKwkJCWJyZWFrOworCisJCS8qCiAJCSAqICBXZSB3YW50IHRvIGtub3cgdGhlIHRvdGFsIGxlbmd0aCAoZm9ybWF0dGVkIGFyZWEgYW5kCiAJCSAqICBzdHJpbmdzKSBiZWZvcmUgZGVjb2RpbmcgdG8gbWFrZSBzdXJlIHdlIHdvbid0IHJ1biBvZmYgdGhlCiAJCSAqICB0YWJsZSBpbiBkbWlfZGVjb2RlIG9yIGRtaV9zdHJpbmcKQEAgLTEwNyw3ICsxMTMsNyBAQAogCX0KIH0KIAotc3RhdGljIHUzMiBkbWlfYmFzZTsKK3N0YXRpYyBwaHlzX2FkZHJfdCBkbWlfYmFzZTsKIHN0YXRpYyB1MTYgZG1pX2xlbjsKIHN0YXRpYyB1MTYgZG1pX251bTsKIApAQCAtNDY3LDcgKzQ3Myw3IEBACiAKIAlpZiAobWVtY21wKGJ1ZiwgIl9TTV8iLCA0KSA9PSAwICYmCiAJICAgIGJ1Zls1XSA8IDMyICYmIGRtaV9jaGVja3N1bShidWYsIGJ1Zls1XSkpIHsKLQkJc21iaW9zX3ZlciA9IChidWZbNl0gPDwgOCkgKyBidWZbN107CisJCXNtYmlvc192ZXIgPSBnZXRfdW5hbGlnbmVkX2JlMTYoYnVmICsgNik7CiAKIAkJLyogU29tZSBCSU9TIHJlcG9ydCB3ZWlyZCBTTUJJT1MgdmVyc2lvbiwgZml4IHRoYXQgdXAgKi8KIAkJc3dpdGNoIChzbWJpb3NfdmVyKSB7CkBAIC00ODksMTAgKzQ5NSw5IEBACiAJYnVmICs9IDE2OwogCiAJaWYgKG1lbWNtcChidWYsICJfRE1JXyIsIDUpID09IDAgJiYgZG1pX2NoZWNrc3VtKGJ1ZiwgMTUpKSB7Ci0JCWRtaV9udW0gPSAoYnVmWzEzXSA8PCA4KSB8IGJ1ZlsxMl07Ci0JCWRtaV9sZW4gPSAoYnVmWzddIDw8IDgpIHwgYnVmWzZdOwotCQlkbWlfYmFzZSA9IChidWZbMTFdIDw8IDI0KSB8IChidWZbMTBdIDw8IDE2KSB8Ci0JCQkoYnVmWzldIDw8IDgpIHwgYnVmWzhdOworCQlkbWlfbnVtID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGJ1ZiArIDEyKTsKKwkJZG1pX2xlbiA9IGdldF91bmFsaWduZWRfbGUxNihidWYgKyA2KTsKKwkJZG1pX2Jhc2UgPSBnZXRfdW5hbGlnbmVkX2xlMzIoYnVmICsgOCk7CiAKIAkJaWYgKGRtaV93YWxrX2Vhcmx5KGRtaV9kZWNvZGUpID09IDApIHsKIAkJCWlmIChzbWJpb3NfdmVyKSB7CkBAIC01MTQsMTIgKzUxOSw3MiBAQAogCXJldHVybiAxOwogfQogCisvKgorICogQ2hlY2sgZm9yIHRoZSBTTUJJT1MgMy4wIDY0LWJpdCBlbnRyeSBwb2ludCBzaWduYXR1cmUuIFVubGlrZSB0aGUgbGVnYWN5CisgKiAzMi1iaXQgZW50cnkgcG9pbnQsIHRoZXJlIGlzIG5vIGVtYmVkZGVkIERNSSBoZWFkZXIgKF9ETUlfKSBpbiBoZXJlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBkbWlfc21iaW9zM19wcmVzZW50KGNvbnN0IHU4ICpidWYpCit7CisJaWYgKG1lbWNtcChidWYsICJfU00zXyIsIDUpID09IDAgJiYKKwkgICAgYnVmWzZdIDwgMzIgJiYgZG1pX2NoZWNrc3VtKGJ1ZiwgYnVmWzZdKSkgeworCQlkbWlfdmVyID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGJ1ZiArIDcpOworCQlkbWlfbGVuID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJ1ZiArIDEyKTsKKwkJZG1pX2Jhc2UgPSBnZXRfdW5hbGlnbmVkX2xlNjQoYnVmICsgMTYpOworCisJCS8qCisJCSAqIFRoZSA2NC1iaXQgU01CSU9TIDMuMCBlbnRyeSBwb2ludCBubyBsb25nZXIgaGFzIGEgZmllbGQKKwkJICogY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZXMgcHJlc2VudCBpbiB0aGUgdGFibGUuCisJCSAqIEluc3RlYWQsIGl0IGRlZmluZXMgdGhlIHRhYmxlIHNpemUgYXMgYSBtYXhpbXVtIHNpemUsIGFuZAorCQkgKiByZWxpZXMgb24gdGhlIGVuZC1vZi10YWJsZSBzdHJ1Y3R1cmUgdHlwZSAoIzEyNykgdG8gYmUgdXNlZAorCQkgKiB0byBzaWduYWwgdGhlIGVuZCBvZiB0aGUgdGFibGUuCisJCSAqIFNvIGxldCdzIGRlZmluZSBkbWlfbnVtIGFzIGFuIHVwcGVyIGJvdW5kIGFzIHdlbGw6IGVhY2gKKwkJICogc3RydWN0dXJlIGhhcyBhIDQgYnl0ZSBoZWFkZXIsIHNvIGRtaV9sZW4gLyA0IGlzIGFuIHVwcGVyCisJCSAqIGJvdW5kIGZvciB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZXMgaW4gdGhlIHRhYmxlLgorCQkgKi8KKwkJZG1pX251bSA9IGRtaV9sZW4gLyA0OworCisJCWlmIChkbWlfd2Fsa19lYXJseShkbWlfZGVjb2RlKSA9PSAwKSB7CisJCQlwcl9pbmZvKCJTTUJJT1MgJWQuJWQgcHJlc2VudC5cbiIsCisJCQkJZG1pX3ZlciA+PiA4LCBkbWlfdmVyICYgMHhGRik7CisJCQlkbWlfZm9ybWF0X2lkcyhkbWlfaWRzX3N0cmluZywgc2l6ZW9mKGRtaV9pZHNfc3RyaW5nKSk7CisJCQlwcl9kZWJ1ZygiRE1JOiAlc1xuIiwgZG1pX2lkc19zdHJpbmcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKIHZvaWQgX19pbml0IGRtaV9zY2FuX21hY2hpbmUodm9pZCkKIHsKIAljaGFyIF9faW9tZW0gKnAsICpxOwogCWNoYXIgYnVmWzMyXTsKIAogCWlmIChlZmlfZW5hYmxlZChFRklfQ09ORklHX1RBQkxFUykpIHsKKwkJLyoKKwkJICogQWNjb3JkaW5nIHRvIHRoZSBETVRGIFNNQklPUyByZWZlcmVuY2Ugc3BlYyB2My4wLjAsIGl0IGlzCisJCSAqIGFsbG93ZWQgdG8gZGVmaW5lIGJvdGggdGhlIDY0LWJpdCBlbnRyeSBwb2ludCAoc21iaW9zMykgYW5kCisJCSAqIHRoZSAzMi1iaXQgZW50cnkgcG9pbnQgKHNtYmlvcyksIGluIHdoaWNoIGNhc2UgdGhleSBzaG91bGQKKwkJICogZWl0aGVyIGJvdGggcG9pbnQgdG8gdGhlIHNhbWUgU01CSU9TIHN0cnVjdHVyZSB0YWJsZSwgb3IgdGhlCisJCSAqIHRhYmxlIHBvaW50ZWQgdG8gYnkgdGhlIDY0LWJpdCBlbnRyeSBwb2ludCBzaG91bGQgY29udGFpbiBhCisJCSAqIHN1cGVyc2V0IG9mIHRoZSB0YWJsZSBjb250ZW50cyBwb2ludGVkIHRvIGJ5IHRoZSAzMi1iaXQgZW50cnkKKwkJICogcG9pbnQgKHNlY3Rpb24gNS4yKQorCQkgKiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgNjQtYml0IGVudHJ5IHBvaW50IHNob3VsZCBoYXZlCisJCSAqIHByZWNlZGVuY2UgaWYgaXQgaXMgZGVmaW5lZCBhbmQgc3VwcG9ydGVkIGJ5IHRoZSBPUy4gSWYgd2UKKwkJICogaGF2ZSB0aGUgNjQtYml0IGVudHJ5IHBvaW50LCBidXQgZmFpbCB0byBkZWNvZGUgaXQsIGZhbGwKKwkJICogYmFjayB0byB0aGUgbGVnYWN5IG9uZSAoaWYgYXZhaWxhYmxlKQorCQkgKi8KKwkJaWYgKGVmaS5zbWJpb3MzICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpIHsKKwkJCXAgPSBkbWlfZWFybHlfcmVtYXAoZWZpLnNtYmlvczMsIDMyKTsKKwkJCWlmIChwID09IE5VTEwpCisJCQkJZ290byBlcnJvcjsKKwkJCW1lbWNweV9mcm9taW8oYnVmLCBwLCAzMik7CisJCQlkbWlfZWFybHlfdW5tYXAocCwgMzIpOworCisJCQlpZiAoIWRtaV9zbWJpb3MzX3ByZXNlbnQoYnVmKSkgeworCQkJCWRtaV9hdmFpbGFibGUgPSAxOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CiAJCWlmIChlZmkuc21iaW9zID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiAJCQlnb3RvIGVycm9yOwogCkBAIC01NTIsNyArNjE3LDcgQEAKIAkJbWVtc2V0KGJ1ZiwgMCwgMTYpOwogCQlmb3IgKHEgPSBwOyBxIDwgcCArIDB4MTAwMDA7IHEgKz0gMTYpIHsKIAkJCW1lbWNweV9mcm9taW8oYnVmICsgMTYsIHEsIDE2KTsKLQkJCWlmICghZG1pX3ByZXNlbnQoYnVmKSkgeworCQkJaWYgKCFkbWlfc21iaW9zM19wcmVzZW50KGJ1ZikgfHwgIWRtaV9wcmVzZW50KGJ1ZikpIHsKIAkJCQlkbWlfYXZhaWxhYmxlID0gMTsKIAkJCQlkbWlfZWFybHlfdW5tYXAocCwgMHgxMDAwMCk7CiAJCQkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCmluZGV4IGFlZjZhOTUuLmQ4YmU2MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlCkBAIC03LDQgKzcsNCBAQAogb2JqLSQoQ09ORklHX1VFRklfQ1BFUikJCQkrPSBjcGVyLm8KIG9iai0kKENPTkZJR19FRklfUlVOVElNRV9NQVApCQkrPSBydW50aW1lLW1hcC5vCiBvYmotJChDT05GSUdfRUZJX1JVTlRJTUVfV1JBUFBFUlMpCSs9IHJ1bnRpbWUtd3JhcHBlcnMubwotb2JqLSQoQ09ORklHX0VGSV9BUk1fU1RVQikJCSs9IGxpYnN0dWIvCitvYmotJChDT05GSUdfRUZJX1NUVUIpCQkJKz0gbGlic3R1Yi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKaW5kZXggODU5MDA5OS4uOTAzNWMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAkuYWNwaSAgICAgICA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiAJLmFjcGkyMCAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5zbWJpb3MgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKKwkuc21iaW9zMyAgICA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiAJLnNhbF9zeXN0YWIgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5ib290X2luZm8gID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKIAkuaGNkcCAgICAgICA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCkBAIC04Niw2ICs4Nyw4IEBACiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIkFDUEk9MHglbHhcbiIsIGVmaS5hY3BpKTsKIAlpZiAoZWZpLnNtYmlvcyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQogCQlzdHIgKz0gc3ByaW50ZihzdHIsICJTTUJJT1M9MHglbHhcbiIsIGVmaS5zbWJpb3MpOworCWlmIChlZmkuc21iaW9zMyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQorCQlzdHIgKz0gc3ByaW50ZihzdHIsICJTTUJJT1MzPTB4JWx4XG4iLCBlZmkuc21iaW9zMyk7CiAJaWYgKGVmaS5oY2RwICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhDRFA9MHglbHhcbiIsIGVmaS5oY2RwKTsKIAlpZiAoZWZpLmJvb3RfaW5mbyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQpAQCAtMjYwLDYgKzI2Myw3IEBACiAJe01QU19UQUJMRV9HVUlELCAiTVBTIiwgJmVmaS5tcHN9LAogCXtTQUxfU1lTVEVNX1RBQkxFX0dVSUQsICJTQUxzeXN0YWIiLCAmZWZpLnNhbF9zeXN0YWJ9LAogCXtTTUJJT1NfVEFCTEVfR1VJRCwgIlNNQklPUyIsICZlZmkuc21iaW9zfSwKKwl7U01CSU9TM19UQUJMRV9HVUlELCAiU01CSU9TIDMuMCIsICZlZmkuc21iaW9zM30sCiAJe1VHQV9JT19QUk9UT0NPTF9HVUlELCAiVUdBIiwgJmVmaS51Z2F9LAogCXtOVUxMX0dVSUQsIE5VTEwsIE5VTEx9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvYXJtLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvYXJtLXN0dWIuYwppbmRleCA3NWVlMDU5Li5lYjQ4YTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2FybS1zdHViLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9hcm0tc3R1Yi5jCkBAIC0yNDcsOSArMjQ3LDE4IEBACiAJCQlnb3RvIGZhaWxfZnJlZV9jbWRsaW5lOwogCQl9CiAJfQotCWlmICghZmR0X2FkZHIpCisKKwlpZiAoZmR0X2FkZHIpIHsKKwkJcHJfZWZpKHN5c190YWJsZSwgIlVzaW5nIERUQiBmcm9tIGNvbW1hbmQgbGluZVxuIik7CisJfSBlbHNlIHsKIAkJLyogTG9vayBmb3IgYSBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJ5LiAqLwogCQlmZHRfYWRkciA9ICh1aW50cHRyX3QpZ2V0X2ZkdChzeXNfdGFibGUpOworCQlpZiAoZmR0X2FkZHIpCisJCQlwcl9lZmkoc3lzX3RhYmxlLCAiVXNpbmcgRFRCIGZyb20gY29uZmlndXJhdGlvbiB0YWJsZVxuIik7CisJfQorCisJaWYgKCFmZHRfYWRkcikKKwkJcHJfZWZpKHN5c190YWJsZSwgIkdlbmVyYXRpbmcgZW1wdHkgRFRCXG4iKTsKIAogCXN0YXR1cyA9IGhhbmRsZV9jbWRsaW5lX2ZpbGVzKHN5c190YWJsZSwgaW1hZ2UsIGNtZGxpbmVfcHRyLAogCQkJCSAgICAgICJpbml0cmQ9IiwgZHJhbV9iYXNlICsgU1pfNTEyTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggMDk1OWNhOS4uMjNkZmQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTkwNSw0ICs5MDUsMTYgQEAKICAgICAgICAgICBSaXZlciBUZWNoJ3MgdmlwZXJib2FyZC5oIGZvciBkZXRhaWxlZCBtZWFuaW5nCiAgICAgICAgICAgb2YgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzLgogCitjb25maWcgR1BJT19ETE4yCisJdHJpc3RhdGUgIkRpb2xhbiBETE4yIEdQSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1GRF9ETE4yCisJc2VsZWN0IEdQSU9MSUJfSVJRQ0hJUAorCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBHUElPIGRyaXZlciBmb3IgdGhlIERpb2xhbiBETE4yCisJICBib2FyZC4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBncGlvLWRsbjIuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKaW5kZXggZTVkMzQ2Yy4uZTYwNjc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQAogb2JqLSQoQ09ORklHX0dQSU9fREE5MDUyKQkrPSBncGlvLWRhOTA1Mi5vCiBvYmotJChDT05GSUdfR1BJT19EQTkwNTUpCSs9IGdwaW8tZGE5MDU1Lm8KIG9iai0kKENPTkZJR19HUElPX0RBVklOQ0kpCSs9IGdwaW8tZGF2aW5jaS5vCitvYmotJChDT05GSUdfR1BJT19ETE4yKQkJKz0gZ3Bpby1kbG4yLm8KIG9iai0kKENPTkZJR19HUElPX0RXQVBCKQkrPSBncGlvLWR3YXBiLm8KIG9iai0kKENPTkZJR19HUElPX0VNKQkJKz0gZ3Bpby1lbS5vCiBvYmotJChDT05GSUdfR1BJT19FUDkzWFgpCSs9IGdwaW8tZXA5M3h4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWRsbjIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWRsbjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzhiNTFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tZGxuMi5jCkBAIC0wLDAgKzEsNTUzIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgRGlvbGFuIERMTi0yIFVTQi1HUElPIGFkYXB0ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9jaGFpbmVkX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9kbG4yLmg+CisKKyNkZWZpbmUgRExOMl9HUElPX0lECQkJMHgwMQorCisjZGVmaW5lIERMTjJfR1BJT19HRVRfUElOX0NPVU5UCQlETE4yX0NNRCgweDAxLCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19TRVRfREVCT1VOQ0UJCURMTjJfQ01EKDB4MDQsIERMTjJfR1BJT19JRCkKKyNkZWZpbmUgRExOMl9HUElPX0dFVF9ERUJPVU5DRQkJRExOMl9DTUQoMHgwNSwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUE9SVF9HRVRfVkFMCQlETE4yX0NNRCgweDA2LCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fR0VUX1ZBTAkJRExOMl9DTUQoMHgwQiwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX1NFVF9PVVRfVkFMCURMTjJfQ01EKDB4MEMsIERMTjJfR1BJT19JRCkKKyNkZWZpbmUgRExOMl9HUElPX1BJTl9HRVRfT1VUX1ZBTAlETE4yX0NNRCgweDBELCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19DT05ESVRJT05fTUVUX0VWCURMTjJfQ01EKDB4MEYsIERMTjJfR1BJT19JRCkKKyNkZWZpbmUgRExOMl9HUElPX1BJTl9FTkFCTEUJCURMTjJfQ01EKDB4MTAsIERMTjJfR1BJT19JRCkKKyNkZWZpbmUgRExOMl9HUElPX1BJTl9ESVNBQkxFCQlETE4yX0NNRCgweDExLCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fU0VUX0RJUkVDVElPTglETE4yX0NNRCgweDEzLCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fR0VUX0RJUkVDVElPTglETE4yX0NNRCgweDE0LCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fU0VUX0VWRU5UX0NGRwlETE4yX0NNRCgweDFFLCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fR0VUX0VWRU5UX0NGRwlETE4yX0NNRCgweDFGLCBETE4yX0dQSU9fSUQpCisKKyNkZWZpbmUgRExOMl9HUElPX0VWRU5UX05PTkUJCTAKKyNkZWZpbmUgRExOMl9HUElPX0VWRU5UX0NIQU5HRQkJMQorI2RlZmluZSBETE4yX0dQSU9fRVZFTlRfTFZMX0hJR0gJMgorI2RlZmluZSBETE4yX0dQSU9fRVZFTlRfTFZMX0xPVwkJMworI2RlZmluZSBETE4yX0dQSU9fRVZFTlRfQ0hBTkdFX1JJU0lORwkweDExCisjZGVmaW5lIERMTjJfR1BJT19FVkVOVF9DSEFOR0VfRkFMTElORyAgMHgyMQorI2RlZmluZSBETE4yX0dQSU9fRVZFTlRfTUFTSwkJMHgwRgorCisjZGVmaW5lIERMTjJfR1BJT19NQVhfUElOUyAzMgorCitzdHJ1Y3QgZGxuMl9pcnFfd29yayB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMjsKKwlpbnQgcGluOworCWludCB0eXBlOworfTsKKworc3RydWN0IGRsbjJfZ3BpbyB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdwaW87CisKKwkvKgorCSAqIENhY2hlIHBpbiBkaXJlY3Rpb24gdG8gc2F2ZSB1cyBvbmUgdHJhbnNmZXIsIHNpbmNlIHRoZSBoYXJkd2FyZSBoYXMKKwkgKiBzZXBhcmF0ZSBjb21tYW5kcyB0byByZWFkIHRoZSBpbiBhbmQgb3V0IHZhbHVlcy4KKwkgKi8KKwlERUNMQVJFX0JJVE1BUChvdXRwdXRfZW5hYmxlZCwgRExOMl9HUElPX01BWF9QSU5TKTsKKworCURFQ0xBUkVfQklUTUFQKGlycXNfbWFza2VkLCBETE4yX0dQSU9fTUFYX1BJTlMpOworCURFQ0xBUkVfQklUTUFQKGlycXNfZW5hYmxlZCwgRExOMl9HUElPX01BWF9QSU5TKTsKKwlERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmcsIERMTjJfR1BJT19NQVhfUElOUyk7CisJc3RydWN0IGRsbjJfaXJxX3dvcmsgKmlycV93b3JrOworfTsKKworc3RydWN0IGRsbjJfZ3Bpb19waW4geworCV9fbGUxNiBwaW47Cit9OworCitzdHJ1Y3QgZGxuMl9ncGlvX3Bpbl92YWwgeworCV9fbGUxNiBwaW4gX19wYWNrZWQ7CisJdTggdmFsdWU7Cit9OworCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19nZXRfcGluX2NvdW50KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlfX2xlMTYgY291bnQ7CisJaW50IGxlbiA9IHNpemVvZihjb3VudCk7CisKKwlyZXQgPSBkbG4yX3RyYW5zZmVyX3J4KHBkZXYsIERMTjJfR1BJT19HRVRfUElOX0NPVU5ULCAmY291bnQsICZsZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChsZW4gPCBzaXplb2YoY291bnQpKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCXJldHVybiBsZTE2X3RvX2NwdShjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3Bpbl9jbWQoc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiwgaW50IGNtZCwgdW5zaWduZWQgcGluKQoreworCXN0cnVjdCBkbG4yX2dwaW9fcGluIHJlcSA9IHsKKwkJLnBpbiA9IGNwdV90b19sZTE2KHBpbiksCisJfTsKKworCXJldHVybiBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIGNtZCwgJnJlcSwgc2l6ZW9mKHJlcSkpOworfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19waW5fdmFsKHN0cnVjdCBkbG4yX2dwaW8gKmRsbjIsIGludCBjbWQsIHVuc2lnbmVkIGludCBwaW4pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZGxuMl9ncGlvX3BpbiByZXEgPSB7CisJCS5waW4gPSBjcHVfdG9fbGUxNihwaW4pLAorCX07CisJc3RydWN0IGRsbjJfZ3Bpb19waW5fdmFsIHJzcDsKKwlpbnQgbGVuID0gc2l6ZW9mKHJzcCk7CisKKwlyZXQgPSBkbG4yX3RyYW5zZmVyKGRsbjItPnBkZXYsIGNtZCwgJnJlcSwgc2l6ZW9mKHJlcSksICZyc3AsICZsZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChsZW4gPCBzaXplb2YocnNwKSB8fCByZXEucGluICE9IHJzcC5waW4pCisJCXJldHVybiAtRVBST1RPOworCisJcmV0dXJuIHJzcC52YWx1ZTsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fcGluX2dldF9pbl92YWwoc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiwgdW5zaWduZWQgaW50IHBpbikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZGxuMl9ncGlvX3Bpbl92YWwoZGxuMiwgRExOMl9HUElPX1BJTl9HRVRfVkFMLCBwaW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAhIXJldDsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fcGluX2dldF9vdXRfdmFsKHN0cnVjdCBkbG4yX2dwaW8gKmRsbjIsIHVuc2lnbmVkIGludCBwaW4pCit7CisJaW50IHJldDsKKworCXJldCA9IGRsbjJfZ3Bpb19waW5fdmFsKGRsbjIsIERMTjJfR1BJT19QSU5fR0VUX09VVF9WQUwsIHBpbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuICEhcmV0OworfQorCitzdGF0aWMgdm9pZCBkbG4yX2dwaW9fcGluX3NldF9vdXRfdmFsKHN0cnVjdCBkbG4yX2dwaW8gKmRsbjIsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHBpbiwgaW50IHZhbHVlKQoreworCXN0cnVjdCBkbG4yX2dwaW9fcGluX3ZhbCByZXEgPSB7CisJCS5waW4gPSBjcHVfdG9fbGUxNihwaW4pLAorCQkudmFsdWUgPSB2YWx1ZSwKKwl9OworCisJZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX0dQSU9fUElOX1NFVF9PVVRfVkFMLCAmcmVxLAorCQkJIHNpemVvZihyZXEpKTsKK30KKworI2RlZmluZSBETE4yX0dQSU9fRElSRUNUSU9OX0lOCQkwCisjZGVmaW5lIERMTjJfR1BJT19ESVJFQ1RJT05fT1VUCQkxCisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7CisJc3RydWN0IGRsbjJfZ3Bpb19waW4gcmVxID0geworCQkucGluID0gY3B1X3RvX2xlMTYob2Zmc2V0KSwKKwl9OworCXN0cnVjdCBkbG4yX2dwaW9fcGluX3ZhbCByc3A7CisJaW50IGxlbiA9IHNpemVvZihyc3ApOworCWludCByZXQ7CisKKwlyZXQgPSBkbG4yX2dwaW9fcGluX2NtZChkbG4yLCBETE4yX0dQSU9fUElOX0VOQUJMRSwgb2Zmc2V0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGNhY2hlIHRoZSBwaW4gZGlyZWN0aW9uICovCisJcmV0ID0gZGxuMl90cmFuc2ZlcihkbG4yLT5wZGV2LCBETE4yX0dQSU9fUElOX0dFVF9ESVJFQ1RJT04sCisJCQkgICAgJnJlcSwgc2l6ZW9mKHJlcSksICZyc3AsICZsZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChsZW4gPCBzaXplb2YocnNwKSB8fCByZXEucGluICE9IHJzcC5waW4pIHsKKwkJcmV0ID0gLUVQUk9UTzsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisKKwlzd2l0Y2ggKHJzcC52YWx1ZSkgeworCWNhc2UgRExOMl9HUElPX0RJUkVDVElPTl9JTjoKKwkJY2xlYXJfYml0KG9mZnNldCwgZGxuMi0+b3V0cHV0X2VuYWJsZWQpOworCQlyZXR1cm4gMDsKKwljYXNlIERMTjJfR1BJT19ESVJFQ1RJT05fT1VUOgorCQlzZXRfYml0KG9mZnNldCwgZGxuMi0+b3V0cHV0X2VuYWJsZWQpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRVBST1RPOworCQlnb3RvIG91dF9kaXNhYmxlOworCX0KKworb3V0X2Rpc2FibGU6CisJZGxuMl9ncGlvX3Bpbl9jbWQoZGxuMiwgRExOMl9HUElPX1BJTl9ESVNBQkxFLCBvZmZzZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRsbjJfZ3Bpb19mcmVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCisJZGxuMl9ncGlvX3Bpbl9jbWQoZGxuMiwgRExOMl9HUElPX1BJTl9ESVNBQkxFLCBvZmZzZXQpOworfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19nZXRfZGlyZWN0aW9uKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCisJaWYgKHRlc3RfYml0KG9mZnNldCwgZGxuMi0+b3V0cHV0X2VuYWJsZWQpKQorCQlyZXR1cm4gR1BJT0ZfRElSX09VVDsKKworCXJldHVybiBHUElPRl9ESVJfSU47Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7CisJaW50IGRpcjsKKworCWRpciA9IGRsbjJfZ3Bpb19nZXRfZGlyZWN0aW9uKGNoaXAsIG9mZnNldCk7CisJaWYgKGRpciA8IDApCisJCXJldHVybiBkaXI7CisKKwlpZiAoZGlyID09IEdQSU9GX0RJUl9JTikKKwkJcmV0dXJuIGRsbjJfZ3Bpb19waW5fZ2V0X2luX3ZhbChkbG4yLCBvZmZzZXQpOworCisJcmV0dXJuIGRsbjJfZ3Bpb19waW5fZ2V0X291dF92YWwoZGxuMiwgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZGxuMl9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCisJZGxuMl9ncGlvX3Bpbl9zZXRfb3V0X3ZhbChkbG4yLCBvZmZzZXQsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fc2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJICAgdW5zaWduZWQgZGlyKQoreworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7CisJc3RydWN0IGRsbjJfZ3Bpb19waW5fdmFsIHJlcSA9IHsKKwkJLnBpbiA9IGNwdV90b19sZTE2KG9mZnNldCksCisJCS52YWx1ZSA9IGRpciwKKwl9OworCWludCByZXQ7CisKKwlyZXQgPSBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfR1BJT19QSU5fU0VUX0RJUkVDVElPTiwKKwkJCSAgICAgICAmcmVxLCBzaXplb2YocmVxKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoZGlyID09IERMTjJfR1BJT19ESVJFQ1RJT05fT1VUKQorCQlzZXRfYml0KG9mZnNldCwgZGxuMi0+b3V0cHV0X2VuYWJsZWQpOworCWVsc2UKKwkJY2xlYXJfYml0KG9mZnNldCwgZGxuMi0+b3V0cHV0X2VuYWJsZWQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gZGxuMl9ncGlvX3NldF9kaXJlY3Rpb24oY2hpcCwgb2Zmc2V0LCBETE4yX0dQSU9fRElSRUNUSU9OX0lOKTsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJICAgICAgaW50IHZhbHVlKQoreworCXJldHVybiBkbG4yX2dwaW9fc2V0X2RpcmVjdGlvbihjaGlwLCBvZmZzZXQsIERMTjJfR1BJT19ESVJFQ1RJT05fT1VUKTsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fc2V0X2RlYm91bmNlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGRlYm91bmNlKQoreworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7CisJX19sZTMyIGR1cmF0aW9uID0gY3B1X3RvX2xlMzIoZGVib3VuY2UpOworCisJcmV0dXJuIGRsbjJfdHJhbnNmZXJfdHgoZGxuMi0+cGRldiwgRExOMl9HUElPX1NFVF9ERUJPVU5DRSwKKwkJCQkmZHVyYXRpb24sIHNpemVvZihkdXJhdGlvbikpOworfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19zZXRfZXZlbnRfY2ZnKHN0cnVjdCBkbG4yX2dwaW8gKmRsbjIsIHVuc2lnbmVkIHBpbiwKKwkJCQkgICB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBwZXJpb2QpCit7CisJc3RydWN0IHsKKwkJX19sZTE2IHBpbjsKKwkJdTggdHlwZTsKKwkJX19sZTE2IHBlcmlvZDsKKwl9IF9fcGFja2VkIHJlcSA9IHsKKwkJLnBpbiA9IGNwdV90b19sZTE2KHBpbiksCisJCS50eXBlID0gdHlwZSwKKwkJLnBlcmlvZCA9IGNwdV90b19sZTE2KHBlcmlvZCksCisJfTsKKworCXJldHVybiBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfR1BJT19QSU5fU0VUX0VWRU5UX0NGRywKKwkJCQkmcmVxLCBzaXplb2YocmVxKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRsbjJfaXJxX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KQoreworCXN0cnVjdCBkbG4yX2lycV93b3JrICppdyA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgZGxuMl9pcnFfd29yaywgd29yayk7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGl3LT5kbG4yOworCXU4IHR5cGUgPSBpdy0+dHlwZSAmIERMTjJfR1BJT19FVkVOVF9NQVNLOworCisJaWYgKHRlc3RfYml0KGl3LT5waW4sIGRsbjItPmlycXNfZW5hYmxlZCkpCisJCWRsbjJfZ3Bpb19zZXRfZXZlbnRfY2ZnKGRsbjIsIGl3LT5waW4sIHR5cGUsIDApOworCWVsc2UKKwkJZGxuMl9ncGlvX3NldF9ldmVudF9jZmcoZGxuMiwgaXctPnBpbiwgRExOMl9HUElPX0VWRU5UX05PTkUsIDApOworfQorCitzdGF0aWMgdm9pZCBkbG4yX2lycV9lbmFibGUoc3RydWN0IGlycV9kYXRhICppcnFkKQoreworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoaXJxZCk7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7CisJaW50IHBpbiA9IGlycWRfdG9faHdpcnEoaXJxZCk7CisKKwlzZXRfYml0KHBpbiwgZGxuMi0+aXJxc19lbmFibGVkKTsKKwlzY2hlZHVsZV93b3JrKCZkbG4yLT5pcnFfd29ya1twaW5dLndvcmspOworfQorCitzdGF0aWMgdm9pZCBkbG4yX2lycV9kaXNhYmxlKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOworCisJY2xlYXJfYml0KHBpbiwgZGxuMi0+aXJxc19lbmFibGVkKTsKKwlzY2hlZHVsZV93b3JrKCZkbG4yLT5pcnFfd29ya1twaW5dLndvcmspOworfQorCitzdGF0aWMgdm9pZCBkbG4yX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOworCisJc2V0X2JpdChwaW4sIGRsbjItPmlycXNfbWFza2VkKTsKK30KKworc3RhdGljIHZvaWQgZGxuMl9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRsbjItPmdwaW8uZGV2OworCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChwaW4sIGRsbjItPmlycXNfcGVuZGluZykpIHsKKwkJaW50IGlycTsKKworCQlpcnEgPSBpcnFfZmluZF9tYXBwaW5nKGRsbjItPmdwaW8uaXJxZG9tYWluLCBwaW4pOworCQlpZiAoIWlycSkgeworCQkJZGV2X2VycihkZXYsICJwaW4gJWQgbm90IG1hcHBlZCB0byBJUlFcbiIsIHBpbik7CisJCQlyZXR1cm47CisJCX0KKworCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICppcnFkLCB1bnNpZ25lZCB0eXBlKQoreworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoaXJxZCk7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7CisJaW50IHBpbiA9IGlycWRfdG9faHdpcnEoaXJxZCk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6CisJCWRsbjItPmlycV93b3JrW3Bpbl0udHlwZSA9IERMTjJfR1BJT19FVkVOVF9MVkxfSElHSDsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6CisJCWRsbjItPmlycV93b3JrW3Bpbl0udHlwZSA9IERMTjJfR1BJT19FVkVOVF9MVkxfTE9XOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKKwkJZGxuMi0+aXJxX3dvcmtbcGluXS50eXBlID0gRExOMl9HUElPX0VWRU5UX0NIQU5HRTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKKwkJZGxuMi0+aXJxX3dvcmtbcGluXS50eXBlID0gRExOMl9HUElPX0VWRU5UX0NIQU5HRV9SSVNJTkc7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgorCQlkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUgPSBETE4yX0dQSU9fRVZFTlRfQ0hBTkdFX0ZBTExJTkc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGRsbjJfZ3Bpb19pcnFjaGlwID0geworCS5uYW1lID0gImRsbjItaXJxIiwKKwkuaXJxX2VuYWJsZSA9IGRsbjJfaXJxX2VuYWJsZSwKKwkuaXJxX2Rpc2FibGUgPSBkbG4yX2lycV9kaXNhYmxlLAorCS5pcnFfbWFzayA9IGRsbjJfaXJxX21hc2ssCisJLmlycV91bm1hc2sgPSBkbG4yX2lycV91bm1hc2ssCisJLmlycV9zZXRfdHlwZSA9IGRsbjJfaXJxX3NldF90eXBlLAorfTsKKworc3RhdGljIHZvaWQgZGxuMl9ncGlvX2V2ZW50KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBlY2hvLAorCQkJICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJaW50IHBpbiwgaXJxOworCWNvbnN0IHN0cnVjdCB7CisJCV9fbGUxNiBjb3VudDsKKwkJX191OCB0eXBlOworCQlfX2xlMTYgcGluOworCQlfX3U4IHZhbHVlOworCX0gX19wYWNrZWQgKmV2ZW50ID0gZGF0YTsKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAobGVuIDwgc2l6ZW9mKCpldmVudCkpIHsKKwkJZGV2X2VycihkbG4yLT5ncGlvLmRldiwgInNob3J0IGV2ZW50IG1lc3NhZ2VcbiIpOworCQlyZXR1cm47CisJfQorCisJcGluID0gbGUxNl90b19jcHUoZXZlbnQtPnBpbik7CisJaWYgKHBpbiA+PSBkbG4yLT5ncGlvLm5ncGlvKSB7CisJCWRldl9lcnIoZGxuMi0+Z3Bpby5kZXYsICJvdXQgb2YgYm91bmRzIHBpbiAlZFxuIiwgcGluKTsKKwkJcmV0dXJuOworCX0KKworCWlycSA9IGlycV9maW5kX21hcHBpbmcoZGxuMi0+Z3Bpby5pcnFkb21haW4sIHBpbik7CisJaWYgKCFpcnEpIHsKKwkJZGV2X2VycihkbG4yLT5ncGlvLmRldiwgInBpbiAlZCBub3QgbWFwcGVkIHRvIElSUVxuIiwgcGluKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghdGVzdF9iaXQocGluLCBkbG4yLT5pcnFzX2VuYWJsZWQpKQorCQlyZXR1cm47CisJaWYgKHRlc3RfYml0KHBpbiwgZGxuMi0+aXJxc19tYXNrZWQpKSB7CisJCXNldF9iaXQocGluLCBkbG4yLT5pcnFzX3BlbmRpbmcpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUpIHsKKwljYXNlIERMTjJfR1BJT19FVkVOVF9DSEFOR0VfUklTSU5HOgorCQlpZiAoZXZlbnQtPnZhbHVlKQorCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJCWJyZWFrOworCWNhc2UgRExOMl9HUElPX0VWRU5UX0NIQU5HRV9GQUxMSU5HOgorCQlpZiAoIWV2ZW50LT52YWx1ZSkKKwkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCWludCBwaW5zOworCWludCBpLCByZXQ7CisKKwlwaW5zID0gZGxuMl9ncGlvX2dldF9waW5fY291bnQocGRldik7CisJaWYgKHBpbnMgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwaW4gY291bnQ6ICVkXG4iLCBwaW5zKTsKKwkJcmV0dXJuIHBpbnM7CisJfQorCWlmIChwaW5zID4gRExOMl9HUElPX01BWF9QSU5TKSB7CisJCXBpbnMgPSBETE4yX0dQSU9fTUFYX1BJTlM7CisJCWRldl93YXJuKGRldiwgImNsYW1waW5nIHBpbnMgdG8gJWRcbiIsIERMTjJfR1BJT19NQVhfUElOUyk7CisJfQorCisJZGxuMiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRsbjIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRsbjIpCisJCXJldHVybiAtRU5PTUVNOworCisJZGxuMi0+aXJxX3dvcmsgPSBkZXZtX2tjYWxsb2MoJnBkZXYtPmRldiwgcGlucywKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGRsbjJfaXJxX3dvcmspLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRsbjItPmlycV93b3JrKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGkgPSAwOyBpIDwgcGluczsgaSsrKSB7CisJCUlOSVRfV09SSygmZGxuMi0+aXJxX3dvcmtbaV0ud29yaywgZGxuMl9pcnFfd29yayk7CisJCWRsbjItPmlycV93b3JrW2ldLnBpbiA9IGk7CisJCWRsbjItPmlycV93b3JrW2ldLmRsbjIgPSBkbG4yOworCX0KKworCWRsbjItPnBkZXYgPSBwZGV2OworCisJZGxuMi0+Z3Bpby5sYWJlbCA9ICJkbG4yIjsKKwlkbG4yLT5ncGlvLmRldiA9IGRldjsKKwlkbG4yLT5ncGlvLm93bmVyID0gVEhJU19NT0RVTEU7CisJZGxuMi0+Z3Bpby5iYXNlID0gLTE7CisJZGxuMi0+Z3Bpby5uZ3BpbyA9IHBpbnM7CisJZGxuMi0+Z3Bpby5leHBvcnRlZCA9IHRydWU7CisJZGxuMi0+Z3Bpby5jYW5fc2xlZXAgPSB0cnVlOworCWRsbjItPmdwaW8uaXJxX25vdF90aHJlYWRlZCA9IHRydWU7CisJZGxuMi0+Z3Bpby5zZXQgPSBkbG4yX2dwaW9fc2V0OworCWRsbjItPmdwaW8uZ2V0ID0gZGxuMl9ncGlvX2dldDsKKwlkbG4yLT5ncGlvLnJlcXVlc3QgPSBkbG4yX2dwaW9fcmVxdWVzdDsKKwlkbG4yLT5ncGlvLmZyZWUgPSBkbG4yX2dwaW9fZnJlZTsKKwlkbG4yLT5ncGlvLmdldF9kaXJlY3Rpb24gPSBkbG4yX2dwaW9fZ2V0X2RpcmVjdGlvbjsKKwlkbG4yLT5ncGlvLmRpcmVjdGlvbl9pbnB1dCA9IGRsbjJfZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CisJZGxuMi0+Z3Bpby5kaXJlY3Rpb25fb3V0cHV0ID0gZGxuMl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJZGxuMi0+Z3Bpby5zZXRfZGVib3VuY2UgPSBkbG4yX2dwaW9fc2V0X2RlYm91bmNlOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGxuMik7CisKKwlyZXQgPSBncGlvY2hpcF9hZGQoJmRsbjItPmdwaW8pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBncGlvIGNoaXA6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBncGlvY2hpcF9pcnFjaGlwX2FkZCgmZGxuMi0+Z3BpbywgJmRsbjJfZ3Bpb19pcnFjaGlwLCAwLAorCQkJCSAgIGhhbmRsZV9zaW1wbGVfaXJxLCBJUlFfVFlQRV9OT05FKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgaXJxIGNoaXA6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dF9ncGlvY2hpcF9yZW1vdmU7CisJfQorCisJcmV0ID0gZGxuMl9yZWdpc3Rlcl9ldmVudF9jYihwZGV2LCBETE4yX0dQSU9fQ09ORElUSU9OX01FVF9FViwKKwkJCQkgICAgIGRsbjJfZ3Bpb19ldmVudCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBldmVudCBjYjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X2dwaW9jaGlwX3JlbW92ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2dwaW9jaGlwX3JlbW92ZToKKwlncGlvY2hpcF9yZW1vdmUoJmRsbjItPmdwaW8pOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaTsKKworCWRsbjJfdW5yZWdpc3Rlcl9ldmVudF9jYihwZGV2LCBETE4yX0dQSU9fQ09ORElUSU9OX01FVF9FVik7CisJZm9yIChpID0gMDsgaSA8IGRsbjItPmdwaW8ubmdwaW87IGkrKykKKwkJZmx1c2hfd29yaygmZGxuMi0+aXJxX3dvcmtbaV0ud29yayk7CisJZ3Bpb2NoaXBfcmVtb3ZlKCZkbG4yLT5ncGlvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkbG4yX2dwaW9fZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9ICJkbG4yLWdwaW8iLAorCS5wcm9iZQkJPSBkbG4yX2dwaW9fcHJvYmUsCisJLnJlbW92ZQkJPSBkbG4yX2dwaW9fcmVtb3ZlLAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihkbG4yX2dwaW9fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiRGFuaWVsIEJhbHV0YSA8ZGFuaWVsLmJhbHV0YUBpbnRlbC5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgRGlvbGFuIERMTjIgR1BJTyBpbnRlcmZhY2UiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ZGxuMi1ncGlvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby10YzM1ODl4LmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby10YzM1ODl4LmMKaW5kZXggYWUwZjY0Ni4uYWJkY2Y1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tdGMzNTg5eC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXRjMzU4OXguYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJdGMzNTg5eF9ncGlvLT5jaGlwID0gdGVtcGxhdGVfY2hpcDsKIAl0YzM1ODl4X2dwaW8tPmNoaXAubmdwaW8gPSB0YzM1ODl4LT5udW1fZ3BpbzsKIAl0YzM1ODl4X2dwaW8tPmNoaXAuZGV2ID0gJnBkZXYtPmRldjsKLQl0YzM1ODl4X2dwaW8tPmNoaXAuYmFzZSA9IChwZGF0YSkgPyBwZGF0YS0+Z3Bpb19iYXNlIDogLTE7CisJdGMzNTg5eF9ncGlvLT5jaGlwLmJhc2UgPSAtMTsKIAogI2lmZGVmIENPTkZJR19PRl9HUElPCiAJdGMzNTg5eF9ncGlvLT5jaGlwLm9mX25vZGUgPSBucDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zZW5zb3ItaHViLmMgYi9kcml2ZXJzL2hpZC9oaWQtc2Vuc29yLWh1Yi5jCmluZGV4IGU2ZDhlMTguLjZhNThiNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zZW5zb3ItaHViLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNlbnNvci1odWIuYwpAQCAtNjQxLDkgKzY0MSw2IEBACiAJCQkJCWdvdG8gZXJyX3N0b3BfaHc7CiAJCQl9CiAJCQlzZC0+aGlkX3NlbnNvcl9odWJfY2xpZW50X2RldnNbCi0JCQkJc2QtPmhpZF9zZW5zb3JfY2xpZW50X2NudF0uaWQgPQotCQkJCQkJCVBMQVRGT1JNX0RFVklEX0FVVE87Ci0JCQlzZC0+aGlkX3NlbnNvcl9odWJfY2xpZW50X2RldnNbCiAJCQkJc2QtPmhpZF9zZW5zb3JfY2xpZW50X2NudF0ubmFtZSA9IG5hbWU7CiAJCQlzZC0+aGlkX3NlbnNvcl9odWJfY2xpZW50X2RldnNbCiAJCQkJc2QtPmhpZF9zZW5zb3JfY2xpZW50X2NudF0ucGxhdGZvcm1fZGF0YSA9CkBAIC02NTksOCArNjU2LDkgQEAKIAlpZiAobGFzdF9oc2RldikKIAkJbGFzdF9oc2Rldi0+ZW5kX2NvbGxlY3Rpb25faW5kZXggPSBpOwogCi0JcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZoZGV2LT5kZXYsIDAsIHNkLT5oaWRfc2Vuc29yX2h1Yl9jbGllbnRfZGV2cywKLQkJc2QtPmhpZF9zZW5zb3JfY2xpZW50X2NudCwgTlVMTCwgMCwgTlVMTCk7CisJcmV0ID0gbWZkX2FkZF9ob3RwbHVnX2RldmljZXMoJmhkZXYtPmRldiwKKwkJCXNkLT5oaWRfc2Vuc29yX2h1Yl9jbGllbnRfZGV2cywKKwkJCXNkLT5oaWRfc2Vuc29yX2NsaWVudF9jbnQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9zdG9wX2h3OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNTI4NmQ3Yy4uNjUyOWMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtMTAyOCwxMSArMTAyOCwxMSBAQAogCSAgd2lsbCBiZSBjYWxsZWQgbG05My4KIAogY29uZmlnIFNFTlNPUlNfTE05NTIzNAotCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTUyMzQiCisJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05NTIzNCBhbmQgY29tcGF0aWJsZXMiCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIExNOTUyMzQgdGVtcGVyYXR1cmUKLQkgIHNlbnNvci4KKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgTE05NTIzMyBhbmQgTE05NTIzNAorCSAgdGVtcGVyYXR1cmUgc2Vuc29yIGNoaXBzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTk1MjM0LgpAQCAtMTA0OCwxMCArMTA0OCwxMSBAQAogCSAgd2lsbCBiZSBjYWxsZWQgbG05NTI0MS4KIAogY29uZmlnIFNFTlNPUlNfTE05NTI0NQotCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTUyNDUgc2Vuc29yIGNoaXAiCisJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05NTI0NSBhbmQgY29tcGF0aWJsZXMiCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTE05NTI0NSBzZW5zb3IgY2hpcC4KKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBMTTk1MjM1IGFuZCBMTTk1MjQ1CisJICB0ZW1wZXJhdHVyZSBzZW5zb3IgY2hpcHMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGxtOTUyNDUuCkBAIC0xMTE3LDEyICsxMTE4LDIzIEBACiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSBtb25pdG9yaW5nCiAJICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBOdXZvdG9uIE5DVDYxMDZELCBOQ1Q2Nzc1RiwgTkNUNjc3NkYsIE5DVDY3NzlELAotCSAgTkNUNjc5MUQgYW5kIGNvbXBhdGlibGUgU3VwZXItSS9PIGNoaXBzLiBUaGlzIGRyaXZlciByZXBsYWNlcyB0aGUKLQkgIHc4MzYyN2VoZiBkcml2ZXIgZm9yIE5DVDY3NzVGIGFuZCBOQ1Q2Nzc2Ri4KKwkgIE5DVDY3OTFELCBOQ1Q2NzkyRCBhbmQgY29tcGF0aWJsZSBTdXBlci1JL08gY2hpcHMuIFRoaXMgZHJpdmVyCisJICByZXBsYWNlcyB0aGUgdzgzNjI3ZWhmIGRyaXZlciBmb3IgTkNUNjc3NUYgYW5kIE5DVDY3NzZGLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBuY3Q2Nzc1LgogCitjb25maWcgU0VOU09SU19OQ1Q3ODAyCisJdHJpc3RhdGUgIk51dm90b24gTkNUNzgwMlkiCisJZGVwZW5kcyBvbiBJMkMKKwlzZWxlY3QgUkVHTUFQX0kyQworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgTnV2b3RvbiBOQ1Q3ODAyWQorCSAgaGFyZHdhcmUgbW9uaXRvcmluZyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBuY3Q3ODAyLgorCiBjb25maWcgU0VOU09SU19QQ0Y4NTkxCiAJdHJpc3RhdGUgIlBoaWxpcHMgUENGODU5MSBBREMvREFDIgogCWRlcGVuZHMgb24gSTJDCkBAIC0xNDU0LDcgKzE0NjYsNyBAQAogCWRlcGVuZHMgb24gSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIFRleGFzIEluc3RydW1lbnRzIFRNUDQwMSwKLQkgIFRNUDQxMSwgVE1QNDMxLCBhbmQgVE1QNDMyIHRlbXBlcmF0dXJlIHNlbnNvciBjaGlwcy4KKwkgIFRNUDQxMSwgVE1QNDMxLCBUTVA0MzIgYW5kIFRNUDQzNSB0ZW1wZXJhdHVyZSBzZW5zb3IgY2hpcHMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHRtcDQwMS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IGM5MGE3NjEuLjY3MjgwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtMTE4LDYgKzExOCw3IEBACiBvYmotJChDT05GSUdfU0VOU09SU19NRU5GMjFCTUNfSFdNT04pICs9IG1lbmYyMWJtY19od21vbi5vCiBvYmotJChDT05GSUdfU0VOU09SU19OQ1Q2NjgzKQkrPSBuY3Q2NjgzLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX05DVDY3NzUpCSs9IG5jdDY3NzUubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTkNUNzgwMikJKz0gbmN0NzgwMi5vCiBvYmotJChDT05GSUdfU0VOU09SU19OVENfVEhFUk1JU1RPUikJKz0gbnRjX3RoZXJtaXN0b3Iubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfUEM4NzM2MCkJKz0gcGM4NzM2MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19QQzg3NDI3KQkrPSBwYzg3NDI3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZ3Bpby1mYW4uYyBiL2RyaXZlcnMvaHdtb24vZ3Bpby1mYW4uYwppbmRleCA0ZWZhMTczLi4zNmFiZjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2dwaW8tZmFuLmMKKysrIGIvZHJpdmVycy9od21vbi9ncGlvLWZhbi5jCkBAIC03OSw3ICs3OSw3IEBACiB7CiAJc3RydWN0IGdwaW9fZmFuX2RhdGEgKmZhbl9kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGdwaW9fZmFuX2FsYXJtICphbGFybSA9IGZhbl9kYXRhLT5hbGFybTsKLQlpbnQgdmFsdWUgPSBncGlvX2dldF92YWx1ZShhbGFybS0+Z3Bpbyk7CisJaW50IHZhbHVlID0gZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoYWxhcm0tPmdwaW8pOwogCiAJaWYgKGFsYXJtLT5hY3RpdmVfbG93KQogCQl2YWx1ZSA9ICF2YWx1ZTsKQEAgLTEzMSw3ICsxMzEsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGZhbl9kYXRhLT5udW1fY3RybDsgaSsrKQotCQlncGlvX3NldF92YWx1ZShmYW5fZGF0YS0+Y3RybFtpXSwgKGN0cmxfdmFsID4+IGkpICYgMSk7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGZhbl9kYXRhLT5jdHJsW2ldLCAoY3RybF92YWwgPj4gaSkgJiAxKTsKIH0KIAogc3RhdGljIGludCBfX2dldF9mYW5fY3RybChzdHJ1Y3QgZ3Bpb19mYW5fZGF0YSAqZmFuX2RhdGEpCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZmFuX2RhdGEtPm51bV9jdHJsOyBpKyspIHsKIAkJaW50IHZhbHVlOwogCi0JCXZhbHVlID0gZ3Bpb19nZXRfdmFsdWUoZmFuX2RhdGEtPmN0cmxbaV0pOworCQl2YWx1ZSA9IGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKGZhbl9kYXRhLT5jdHJsW2ldKTsKIAkJY3RybF92YWwgfD0gKHZhbHVlIDw8IGkpOwogCX0KIAlyZXR1cm4gY3RybF92YWw7CkBAIC0zNjksNyArMzY5LDggQEAKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKLQkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGN0cmxbaV0sIGdwaW9fZ2V0X3ZhbHVlKGN0cmxbaV0pKTsKKwkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGN0cmxbaV0sCisJCQkJCSAgICBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChjdHJsW2ldKSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTU0OSw2ICs1NTAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZ3Bpb19mYW5fc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZ3Bpb19mYW5fZGF0YSAqZmFuX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlpZiAoZmFuX2RhdGEtPmN0cmwpCisJCXNldF9mYW5fc3BlZWQoZmFuX2RhdGEsIDApOworfQorCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IGdwaW9fZmFuX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNTgwLDYgKzU4OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdwaW9fZmFuX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gZ3Bpb19mYW5fcHJvYmUsCisJLnNodXRkb3duCT0gZ3Bpb19mYW5fc2h1dGRvd24sCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJPSAiZ3Bpby1mYW4iLAogCQkucG0JPSBHUElPX0ZBTl9QTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaWJtcG93ZXJudi5jIGIvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKaW5kZXggNmEzMGVlZS4uN2MyYzdiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKKysrIGIvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKQEAgLTc0LDkgKzc0LDYgQEAKIAl1MzIgc2Vuc29yc19jb3VudDsgLyogVG90YWwgY291bnQgb2Ygc2Vuc29ycyBmcm9tIGVhY2ggZ3JvdXAgKi8KIH07CiAKLS8qIFBsYXRmb3JtIGRldmljZSByZXByZXNlbnRpbmcgYWxsIHRoZSBpYm1wb3dlcm52IHNlbnNvcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2aWNlOwotCiBzdGF0aWMgc3NpemVfdCBzaG93X3NlbnNvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAogCQkJICAgY2hhciAqYnVmKQogewpAQCAtOTksNyArOTYsNyBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB4KTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZ2V0X3NlbnNvcl9pbmRleF9hdHRyKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiAqaW5kZXgsCitzdGF0aWMgaW50IGdldF9zZW5zb3JfaW5kZXhfYXR0cihjb25zdCBjaGFyICpuYW1lLCB1MzIgKmluZGV4LAogCQkJCQljaGFyICphdHRyKQogewogCWNoYXIgKmhhc2hfcG9zID0gc3RyY2hyKG5hbWUsICcjJyk7CkBAIC0xMzYsNyArMTMzLDcgQEAKICAqIHdoaWNoIG5lZWQgdG8gYmUgbWFwcGVkIGFzIGZhbjJfaW5wdXQsIHRlbXAxX21heCByZXNwZWN0aXZlbHkgYmVmb3JlCiAgKiBwb3B1bGF0aW5nIHRoZW0gaW5zaWRlIGh3bW9uIGRldmljZSBjbGFzcy4KICAqLwotc3RhdGljIGludCBfX2luaXQgY3JlYXRlX2h3bW9uX2F0dHJfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gc2Vuc29ycyB0eXBlLAorc3RhdGljIGludCBjcmVhdGVfaHdtb25fYXR0cl9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBzZW5zb3JzIHR5cGUsCiAJCQkJCSBjb25zdCBjaGFyICpub2RlX25hbWUsCiAJCQkJCSBjaGFyICpod21vbl9hdHRyX25hbWUpCiB7CkBAIC0xNzIsNyArMTY5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcG9wdWxhdGVfYXR0cl9ncm91cHMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgcG9wdWxhdGVfYXR0cl9ncm91cHMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqcGdyb3VwcyA9IHBkYXRhLT5hdHRyX2dyb3VwczsKQEAgLTE4MCwxMSArMTc3LDYgQEAKIAllbnVtIHNlbnNvcnMgdHlwZTsKIAogCW9wYWwgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2libSxvcGFsL3NlbnNvcnMiKTsKLQlpZiAoIW9wYWwpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiT3BhbCBub2RlICdzZW5zb3JzJyBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG9wYWwsIG5wKSB7CiAJCWlmIChucC0+bmFtZSA9PSBOVUxMKQogCQkJY29udGludWU7CkBAIC0yMjEsNyArMjEzLDcgQEAKICAqIHRvIHRoZSBuYW1lIHJlcXVpcmVkIGJ5IHRoZSBoaWdoZXIgJ2h3bW9uJyBkcml2ZXIgbGlrZSBmYW4xX2lucHV0LCB0ZW1wMV9tYXgKICAqIGV0Yy4uCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9kZXZpY2VfYXR0cnMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgY3JlYXRlX2RldmljZV9hdHRycyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipwZ3JvdXBzID0gcGRhdGEtPmF0dHJfZ3JvdXBzOwpAQCAtMjgwLDcgKzI3Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaWJtcG93ZXJudl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBpYm1wb3dlcm52X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKQEAgLTMwOSw1NyArMzAxLDI1IEBACiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhod21vbl9kZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBvcGFsX3NlbnNvcl9kcml2ZXJfaWRzW10gPSB7CisJeworCQkubmFtZSA9ICJvcGFsLXNlbnNvciIsCisJfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBvcGFsX3NlbnNvcl9kcml2ZXJfaWRzKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaWJtcG93ZXJudl9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5uYW1lID0gRFJWTkFNRSwKKwkucHJvYmUJCT0gaWJtcG93ZXJudl9wcm9iZSwKKwkuaWRfdGFibGUJPSBvcGFsX3NlbnNvcl9kcml2ZXJfaWRzLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBEUlZOQU1FLAogCX0sCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpYm1wb3dlcm52X2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JcGRldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZOQU1FLCAwKTsKLQlpZiAoIXBkZXZpY2UpIHsKLQkJcHJfZXJyKCJEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2aWNlKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiRGV2aWNlIGFkZGl0aW9uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKLQl9Ci0KLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmlibXBvd2VybnZfZHJpdmVyLCBpYm1wb3dlcm52X3Byb2JlKTsKLQlpZiAoZXJyKSB7Ci0JCWlmIChlcnIgIT0gLUVOT0RFVikKLQkJCXByX2VycigiUGxhdGZvcm0gZHJpdmVyIHByb2JlIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCi0JCWdvdG8gZXhpdF9kZXZpY2VfZGVsOwotCX0KLQotCXJldHVybiAwOwotCi1leGl0X2RldmljZV9kZWw6Ci0JcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2aWNlKTsKLWV4aXRfZGV2aWNlX3B1dDoKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXZpY2UpOwotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaWJtcG93ZXJudl9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlibXBvd2VybnZfZHJpdmVyKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2aWNlKTsKLX0KK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaWJtcG93ZXJudl9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJOZWVsZXNoIEd1cHRhIDxuZWVsZWd1cEBsaW51eC52bmV0LmlibS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklCTSBQT1dFUk5WIHBsYXRmb3JtIHNlbnNvcnMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX2luaXQoaWJtcG93ZXJudl9pbml0KTsKLW1vZHVsZV9leGl0KGlibXBvd2VybnZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2lpb19od21vbi5jIGIvZHJpdmVycy9od21vbi9paW9faHdtb24uYwppbmRleCAxNGM4MmRhLi45ODAxNzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2lpb19od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vaWlvX2h3bW9uLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAlzdHJ1Y3QgaWlvX2h3bW9uX3N0YXRlICpzdDsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmE7CiAJaW50IHJldCwgaTsKLQlpbnQgaW5faSA9IDEsIHRlbXBfaSA9IDEsIGN1cnJfaSA9IDE7CisJaW50IGluX2kgPSAxLCB0ZW1wX2kgPSAxLCBjdXJyX2kgPSAxLCBodW1pZGl0eV9pID0gMTsKIAllbnVtIGlpb19jaGFuX3R5cGUgdHlwZTsKIAlzdHJ1Y3QgaWlvX2NoYW5uZWwgKmNoYW5uZWxzOwogCWNvbnN0IGNoYXIgKm5hbWUgPSAiaWlvX2h3bW9uIjsKQEAgLTEyMyw2ICsxMjMsMTEgQEAKIAkJCQkJCQkgICJjdXJyJWRfaW5wdXQiLAogCQkJCQkJCSAgY3Vycl9pKyspOwogCQkJYnJlYWs7CisJCWNhc2UgSUlPX0hVTUlESVRZUkVMQVRJVkU6CisJCQlhLT5kZXZfYXR0ci5hdHRyLm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKKwkJCQkJCQkgICJodW1pZGl0eSVkX2lucHV0IiwKKwkJCQkJCQkgIGh1bWlkaXR5X2krKyk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycm9yX3JlbGVhc2VfY2hhbm5lbHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2luYTJ4eC5jIGIvZHJpdmVycy9od21vbi9pbmEyeHguYwppbmRleCBiZmQzZjNlLi5lMDFmZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2luYTJ4eC5jCisrKyBiL2RyaXZlcnMvaHdtb24vaW5hMnh4LmMKQEAgLTIyMyw2ICsyMjMsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKIAlsb25nIHNodW50ID0gMTAwMDA7IC8qIGRlZmF1bHQgc2h1bnQgdmFsdWUgMTBtT2htcyAqLwogCXUzMiB2YWw7CisJaW50IHJldDsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yNDcsMTIgKzI0OCwyNSBAQAogCWRhdGEtPmNvbmZpZyA9ICZpbmEyeHhfY29uZmlnW2RhdGEtPmtpbmRdOwogCiAJLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KLQlpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgSU5BMlhYX0NPTkZJRywKLQkJCQkgICAgIGRhdGEtPmNvbmZpZy0+Y29uZmlnX2RlZmF1bHQpOwotCS8qIHNldCBjdXJyZW50IExTQiB0byAxbUEsIHNodW50IGlzIGluIHVPaG1zICovCi0JLyogKGVxdWF0aW9uIDEzIGluIGRhdGFzaGVldCkgKi8KLQlpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgSU5BMlhYX0NBTElCUkFUSU9OLAotCQkJCSAgICAgZGF0YS0+Y29uZmlnLT5jYWxpYnJhdGlvbl9mYWN0b3IgLyBzaHVudCk7CisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfc3dhcHBlZChjbGllbnQsIElOQTJYWF9DT05GSUcsCisJCQkJCSAgIGRhdGEtPmNvbmZpZy0+Y29uZmlnX2RlZmF1bHQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LAorCQkJImVycm9yIHdyaXRpbmcgdG8gdGhlIGNvbmZpZyByZWdpc3RlcjogJWQiLCByZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIFNldCBjdXJyZW50IExTQiB0byAxbUEsIHNodW50IGlzIGluIHVPaG1zCisJICogKGVxdWF0aW9uIDEzIGluIGRhdGFzaGVldCkuCisJICovCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfc3dhcHBlZChjbGllbnQsIElOQTJYWF9DQUxJQlJBVElPTiwKKwkJCQlkYXRhLT5jb25maWctPmNhbGlicmF0aW9uX2ZhY3RvciAvIHNodW50KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJlcnJvciB3cml0aW5nIHRvIHRoZSBjYWxpYnJhdGlvbiByZWdpc3RlcjogJWQiLCByZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc1LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwppbmRleCBkMTZkYmIzLi42NzUzZmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwpAQCAtNDQsNiArNDQsNyBAQAogCWc3NTEsCiAJbG03NSwKIAlsbTc1YSwKKwlsbTc1YiwKIAltYXg2NjI1LAogCW1heDY2MjYsCiAJbWNwOTgweCwKQEAgLTIzMyw2ICsyMzQsMTAgQEAKIAkJZGF0YS0+cmVzb2x1dGlvbiA9IDk7CiAJCWRhdGEtPnNhbXBsZV90aW1lID0gSFogLyAyOwogCQlicmVhazsKKwljYXNlIGxtNzViOgorCQlkYXRhLT5yZXNvbHV0aW9uID0gMTE7CisJCWRhdGEtPnNhbXBsZV90aW1lID0gSFogLyA0OworCQlicmVhazsKIAljYXNlIG1heDY2MjU6CiAJCWRhdGEtPnJlc29sdXRpb24gPSA5OwogCQlkYXRhLT5zYW1wbGVfdGltZSA9IEhaIC8gNDsKQEAgLTMyMiw2ICszMjcsNyBAQAogCXsgImc3NTEiLCBnNzUxLCB9LAogCXsgImxtNzUiLCBsbTc1LCB9LAogCXsgImxtNzVhIiwgbG03NWEsIH0sCisJeyAibG03NWIiLCBsbTc1YiwgfSwKIAl7ICJtYXg2NjI1IiwgbWF4NjYyNSwgfSwKIAl7ICJtYXg2NjI2IiwgbWF4NjYyNiwgfSwKIAl7ICJtY3A5ODB4IiwgbWNwOTgweCwgfSwKQEAgLTQwOSw2ICs0MTUsMTIgQEAKIAkJIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCA3KSAhPSBvcykKIAkJCXJldHVybiAtRU5PREVWOwogCX0KKwkvKgorCSAqIEl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdCB0aGlzIGlzIGEgTE03NSBpZiBib3RoCisJICogaHlzdGVyZXNpcyBhbmQgdGVtcGVyYXR1cmUgbGltaXQgcmVnaXN0ZXJzIGFyZSAwLgorCSAqLworCWlmIChoeXN0ID09IDAgJiYgb3MgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBBZGRyZXNzZXMgY3ljbGluZyAqLwogCWZvciAoaSA9IDg7IGkgPD0gMjQ4OyBpICs9IDQwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTUyMzQuYyBiL2RyaXZlcnMvaHdtb24vbG05NTIzNC5jCmluZGV4IDQxMTIwMmIuLjg3OTZkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05NTIzNC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05NTIzNC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgLyBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTUyMzQKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTMgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDEzLCAyMDE0IEd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4KICAqCiAgKiBEZXJpdmVkIGZyb20gbG05NTI0MS5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgRGF2aWRlIFJpenpvIDxlbHBhLnJpenpvQGdtYWlsLmNvbT4KQEAgLTMwLDcgKzMwLDEwIEBACiAKICNkZWZpbmUgRFJWTkFNRSAibG05NTIzNCIKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgxOCwgMHg0ZCwgMHg0ZSwgSTJDX0NMSUVOVF9FTkQgfTsKK2VudW0gY2hpcHMgeyBsbTk1MjMzLCBsbTk1MjM0IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHgxOCwgMHgyYSwgMHgyYiwgMHg0ZCwgMHg0ZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogTE05NTIzNCByZWdpc3RlcnMgKi8KICNkZWZpbmUgTE05NTIzNF9SRUdfTUFOX0lECQkweEZFCkBAIC01MywxMSArNTYsMTMgQEAKICNkZWZpbmUgTE05NTIzNF9SRUdfVENSSVRfSFlTVAkJMHg1YQogCiAjZGVmaW5lIE5BVFNFTUlfTUFOX0lECQkJMHgwMQorI2RlZmluZSBMTTk1MjMzX0NISVBfSUQJCQkweDg5CiAjZGVmaW5lIExNOTUyMzRfQ0hJUF9JRAkJCTB4NzkKIAogLyogQ2xpZW50IGRhdGEgKGVhY2ggY2xpZW50IGdldHMgaXRzIG93bikgKi8KIHN0cnVjdCBsbTk1MjM0X2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JvdXBzWzNdOwogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZCwgaW50ZXJ2YWw7CS8qIGluIGppZmZpZXMgKi8KIAlib29sIHZhbGlkOwkJLyogZmFsc2UgdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KQEAgLTU2NCwzNSArNTY5LDIzIEBACiBzdGF0aWMgREVWSUNFX0FUVFIodXBkYXRlX2ludGVydmFsLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbnRlcnZhbCwKIAkJICAgc2V0X2ludGVydmFsKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtOTUyMzRfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsbTk1MjM0X2NvbW1vbl9hdHRyc1tdID0gewogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9mYXVsdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfZmF1bHQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X2ZhdWx0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9mYXVsdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfdHlwZS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfdHlwZS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heF9oeXN0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXRfaHlzdC5kZXZfYXR0ci5hdHRyLApAQCAtNjAxLDE4ICs1OTQsNDQgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X29mZnNldC5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl91cGRhdGVfaW50ZXJ2YWwuYXR0ciwKIAlOVUxMCiB9OwotQVRUUklCVVRFX0dST1VQUyhsbTk1MjM0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG05NTIzNF9jb21tb25fZ3JvdXAgPSB7CisJLmF0dHJzID0gbG05NTIzNF9jb21tb25fYXR0cnMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG05NTIzNF9hdHRyc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X3R5cGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X3R5cGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X29mZnNldC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxtOTUyMzRfZ3JvdXAgPSB7CisJLmF0dHJzID0gbG05NTIzNF9hdHRycywKK307CiAKIHN0YXRpYyBpbnQgbG05NTIzNF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IGNsaWVudC0+YWRkcjsKKwl1OCBjb25maWdfbWFzaywgbW9kZWxfbWFzazsKIAlpbnQgbWZnX2lkLCBjaGlwX2lkLCB2YWw7CisJY29uc3QgY2hhciAqbmFtZTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MjIsMTUgKzY0MSwzMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNoaXBfaWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjM0X1JFR19DSElQX0lEKTsKLQlpZiAoY2hpcF9pZCAhPSBMTTk1MjM0X0NISVBfSUQpCisJc3dpdGNoIChjaGlwX2lkKSB7CisJY2FzZSBMTTk1MjMzX0NISVBfSUQ6CisJCWlmIChhZGRyZXNzICE9IDB4MTggJiYgYWRkcmVzcyAhPSAweDJhICYmIGFkZHJlc3MgIT0gMHgyYikKKwkJCXJldHVybiAtRU5PREVWOworCQljb25maWdfbWFzayA9IDB4YmY7CisJCW1vZGVsX21hc2sgPSAweGY5OworCQluYW1lID0gImxtOTUyMzMiOworCQlicmVhazsKKwljYXNlIExNOTUyMzRfQ0hJUF9JRDoKKwkJaWYgKGFkZHJlc3MgIT0gMHgxOCAmJiBhZGRyZXNzICE9IDB4NGQgJiYgYWRkcmVzcyAhPSAweDRlKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWNvbmZpZ19tYXNrID0gMHhiYzsKKwkJbW9kZWxfbWFzayA9IDB4ZTE7CisJCW5hbWUgPSAibG05NTIzNCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNOTUyMzRfUkVHX1NUQVRVUyk7CiAJaWYgKHZhbCAmIDB4MzApCiAJCXJldHVybiAtRU5PREVWOwogCiAJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTIzNF9SRUdfQ09ORklHKTsKLQlpZiAodmFsICYgMHhiYykKKwlpZiAodmFsICYgY29uZmlnX21hc2spCiAJCXJldHVybiAtRU5PREVWOwogCiAJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTIzNF9SRUdfQ09OVlJBVEUpOwpAQCAtNjM4LDE0ICs2NzMsMTQgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjM0X1JFR19SRU1fTU9ERUwpOwotCWlmICh2YWwgJiAweGUxKQorCWlmICh2YWwgJiBtb2RlbF9tYXNrKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNOTUyMzRfUkVHX1JFTV9NT0RFTF9TVFMpOwotCWlmICh2YWwgJiAweGUxKQorCWlmICh2YWwgJiBtb2RlbF9tYXNrKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN0cmxjcHkoaW5mby0+dHlwZSwgImxtOTUyMzQiLCBJMkNfTkFNRV9TSVpFKTsKKwlzdHJsY3B5KGluZm8tPnR5cGUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOwogCXJldHVybiAwOwogfQogCkBAIC02OTgsMTUgKzczMywxOSBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCisJZGF0YS0+Z3JvdXBzWzBdID0gJmxtOTUyMzRfY29tbW9uX2dyb3VwOworCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gbG05NTIzNCkKKwkJZGF0YS0+Z3JvdXBzWzFdID0gJmxtOTUyMzRfZ3JvdXA7CisKIAlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhkZXYsIGNsaWVudC0+bmFtZSwKLQkJCQkJCQkgICBkYXRhLAotCQkJCQkJCSAgIGxtOTUyMzRfZ3JvdXBzKTsKKwkJCQkJCQkgICBkYXRhLCBkYXRhLT5ncm91cHMpOwogCXJldHVybiBQVFJfRVJSX09SX1pFUk8oaHdtb25fZGV2KTsKIH0KIAogLyogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTk1MjM0X2lkW10gPSB7Ci0JeyAibG05NTIzNCIsIDAgfSwKKwl7ICJsbTk1MjMzIiwgbG05NTIzMyB9LAorCXsgImxtOTUyMzQiLCBsbTk1MjM0IH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtOTUyMzRfaWQpOwpAQCAtNzI1LDUgKzc2NCw1IEBACiBtb2R1bGVfaTJjX2RyaXZlcihsbTk1MjM0X2RyaXZlcik7CiAKIE1PRFVMRV9BVVRIT1IoIkd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTE05NTIzNCBzZW5zb3IgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxNOTUyMzMvTE05NTIzNCBzZW5zb3IgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTUyNDUuYyBiL2RyaXZlcnMvaHdtb24vbG05NTI0NS5jCmluZGV4IDBhZTBkZmQuLmU3YWVmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05NTI0NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05NTI0NS5jCkBAIC0xLDEwICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWxleGFuZGVyIFN0ZWluIDxhbGV4YW5kZXIuc3RlaW5Ac3lzdGVjLWVsZWN0cm9uaWMuY29tPgogICoKLSAqIFRoZSBMTTk1MjQ1IGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBOYXRpb25hbCBTZW1pY29uZHVjdG9ycy4KKyAqIFRoZSBMTTk1MjQ1IGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBUSSAvIE5hdGlvbmFsIFNlbWljb25kdWN0b3IuCiAgKiBJdCByZXBvcnRzIHVwIHRvIHR3byB0ZW1wZXJhdHVyZXMgKGl0cyBvd24gcGx1cyBhbiBleHRlcm5hbCBvbmUpLgotICogQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIE5hdGlvbmFsJ3Mgd2Vic2l0ZSBhdDoKLSAqICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vZHMuY2dpL0xNL0xNOTUyNDUucGRmCiAgKgogICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gbG05NTI0MS5jCiAgKgpAQCAtMzQsOCArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAotI2RlZmluZSBERVZOQU1FICJsbTk1MjQ1IgotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewogCTB4MTgsIDB4MTksIDB4MjksIDB4NGMsIDB4NGQsIEkyQ19DTElFTlRfRU5EIH07CiAKQEAgLTk4LDcgKzk0LDggQEAKICNkZWZpbmUgU1RBVFVTMV9MT0MJCTB4MDEKIAogI2RlZmluZSBNQU5VRkFDVFVSRVJfSUQJCTB4MDEKLSNkZWZpbmUgREVGQVVMVF9SRVZJU0lPTgkweEIzCisjZGVmaW5lIExNOTUyMzVfUkVWSVNJT04JMHhCMQorI2RlZmluZSBMTTk1MjQ1X1JFVklTSU9OCTB4QjMKIAogc3RhdGljIGNvbnN0IHU4IGxtOTUyNDVfcmVnX2FkZHJlc3NbXSA9IHsKIAlMTTk1MjQ1X1JFR19SX0xPQ0FMX1RFTVBIX1MsCkBAIC00MjcsMTcgKzQyNCwzMiBAQAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IG5ld19jbGllbnQtPmFkZHI7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgcmV2LCBpZDsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDVfUkVHX1JfTUFOX0lEKQotCQkJIT0gTUFOVUZBQ1RVUkVSX0lECi0JCXx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCBMTTk1MjQ1X1JFR19SX0NISVBfSUQpCi0JCQkhPSBERUZBVUxUX1JFVklTSU9OKQorCWlkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDVfUkVHX1JfTUFOX0lEKTsKKwlpZiAoaWQgIT0gTUFOVUZBQ1RVUkVSX0lEKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN0cmxjcHkoaW5mby0+dHlwZSwgREVWTkFNRSwgSTJDX05BTUVfU0laRSk7CisJcmV2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDVfUkVHX1JfQ0hJUF9JRCk7CisJc3dpdGNoIChyZXYpIHsKKwljYXNlIExNOTUyMzVfUkVWSVNJT046CisJCWlmIChhZGRyZXNzICE9IDB4MTggJiYgYWRkcmVzcyAhPSAweDI5ICYmIGFkZHJlc3MgIT0gMHg0YykKKwkJCXJldHVybiAtRU5PREVWOworCQluYW1lID0gImxtOTUyMzUiOworCQlicmVhazsKKwljYXNlIExNOTUyNDVfUkVWSVNJT046CisJCW5hbWUgPSAibG05NTI0NSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN0cmxjcHkoaW5mby0+dHlwZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4NCw3ICs0OTYsOCBAQAogCiAvKiBEcml2ZXIgZGF0YSAoY29tbW9uIHRvIGFsbCBjbGllbnRzKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtOTUyNDVfaWRbXSA9IHsKLQl7IERFVk5BTUUsIDAgfSwKKwl7ICJsbTk1MjM1IiwgMCB9LAorCXsgImxtOTUyNDUiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtOTUyNDVfaWQpOwpAQCAtNDkyLDcgKzUwNSw3IEBACiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG05NTI0NV9kcml2ZXIgPSB7CiAJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewotCQkubmFtZQk9IERFVk5BTUUsCisJCS5uYW1lCT0gImxtOTUyNDUiLAogCX0sCiAJLnByb2JlCQk9IGxtOTUyNDVfcHJvYmUsCiAJLmlkX3RhYmxlCT0gbG05NTI0NV9pZCwKQEAgLTUwMyw1ICs1MTYsNSBAQAogbW9kdWxlX2kyY19kcml2ZXIobG05NTI0NV9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJBbGV4YW5kZXIgU3RlaW4gPGFsZXhhbmRlci5zdGVpbkBzeXN0ZWMtZWxlY3Ryb25pYy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkxNOTUyNDUgc2Vuc29yIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMTTk1MjM1L0xNOTUyNDUgc2Vuc29yIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9uY3Q2Nzc1LmMgYi9kcml2ZXJzL2h3bW9uL25jdDY3NzUuYwppbmRleCA1MDRjYmRkLi5kYzBkZjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL25jdDY3NzUuYworKysgYi9kcml2ZXJzL2h3bW9uL25jdDY3NzUuYwpAQCAtMzgsNiArMzgsNyBAQAogICogbmN0Njc3NmYgICAgIDkgICAgICA1ICAgICAgIDMgICAgICAgNiszICAgIDB4YzMzMCAweGMxICAgIDB4NWNhMwogICogbmN0Njc3OWQgICAgMTUgICAgICA1ICAgICAgIDUgICAgICAgMis2ICAgIDB4YzU2MCAweGMxICAgIDB4NWNhMwogICogbmN0Njc5MWQgICAgMTUgICAgICA2ICAgICAgIDYgICAgICAgMis2ICAgIDB4YzgwMCAweGMxICAgIDB4NWNhMworICogbmN0Njc5MmQgICAgMTUgICAgICA2ICAgICAgIDYgICAgICAgMis2ICAgIDB4YzkxMCAweGMxICAgIDB4NWNhMwogICoKICAqICN0ZW1wIGxpc3RzIHRoZSBudW1iZXIgb2YgbW9uaXRvcmVkIHRlbXBlcmF0dXJlIHNvdXJjZXMgKGZpcnN0IHZhbHVlKSBwbHVzCiAgKiB0aGUgbnVtYmVyIG9mIGRpcmVjdGx5IGNvbm5lY3RhYmxlIHRlbXBlcmF0dXJlIHNlbnNvcnMgKHNlY29uZCB2YWx1ZSkuCkBAIC02MSw3ICs2Miw3IEBACiAKICNkZWZpbmUgVVNFX0FMVEVSTkFURQogCi1lbnVtIGtpbmRzIHsgbmN0NjEwNiwgbmN0Njc3NSwgbmN0Njc3NiwgbmN0Njc3OSwgbmN0Njc5MSB9OworZW51bSBraW5kcyB7IG5jdDYxMDYsIG5jdDY3NzUsIG5jdDY3NzYsIG5jdDY3NzksIG5jdDY3OTEsIG5jdDY3OTIgfTsKIAogLyogdXNlZCB0byBzZXQgZGF0YS0+bmFtZSA9IG5jdDY3NzVfZGV2aWNlX25hbWVzW2RhdGEtPnNpb19raW5kXSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuY3Q2Nzc1X2RldmljZV9uYW1lc1tdID0gewpAQCAtNzAsNiArNzEsNyBAQAogCSJuY3Q2Nzc2IiwKIAkibmN0Njc3OSIsCiAJIm5jdDY3OTEiLAorCSJuY3Q2NzkyIiwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBmb3JjZV9pZDsKQEAgLTEwMCw2ICsxMDIsNyBAQAogI2RlZmluZSBTSU9fTkNUNjc3Nl9JRAkJMHhjMzMwCiAjZGVmaW5lIFNJT19OQ1Q2Nzc5X0lECQkweGM1NjAKICNkZWZpbmUgU0lPX05DVDY3OTFfSUQJCTB4YzgwMAorI2RlZmluZSBTSU9fTkNUNjc5Ml9JRAkJMHhjOTEwCiAjZGVmaW5lIFNJT19JRF9NQVNLCQkweEZGRjAKIAogZW51bSBwd21fZW5hYmxlIHsgb2ZmLCBtYW51YWwsIHRoZXJtYWxfY3J1aXNlLCBzcGVlZF9jcnVpc2UsIHNmMywgc2Y0IH07CkBAIC01MjksNiArNTMyLDEyIEBACiAJNCwgNSwgMTMsIC0xLCAtMSwgLTEsCQkvKiB0ZW1wMS4udGVtcDYgKi8KIAkxMiwgOSB9OwkJCS8qIGludHJ1c2lvbjAsIGludHJ1c2lvbjEgKi8KIAorLyogTkNUNjc5MiBzcGVjaWZpYyBkYXRhICovCisKK3N0YXRpYyBjb25zdCB1MTYgTkNUNjc5Ml9SRUdfVEVNUF9NT05bXSA9IHsKKwkweDczLCAweDc1LCAweDc3LCAweDc5LCAweDdiLCAweDdkIH07CitzdGF0aWMgY29uc3QgdTE2IE5DVDY3OTJfUkVHX0JFRVBbTlVNX1JFR19CRUVQXSA9IHsKKwkweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGJmIH07CiAKIC8qIE5DVDYxMDJEL05DVDYxMDZEIHNwZWNpZmljIGRhdGEgKi8KIApAQCAtMTA0MywxMyArMTA1MiwxNCBAQAogCQkgIHJlZyA9PSAweDczIHx8IHJlZyA9PSAweDc1IHx8IHJlZyA9PSAweDc3OwogCWNhc2UgbmN0Njc3OToKIAljYXNlIG5jdDY3OTE6CisJY2FzZSBuY3Q2NzkyOgogCQlyZXR1cm4gcmVnID09IDB4MTUwIHx8IHJlZyA9PSAweDE1MyB8fCByZWcgPT0gMHgxNTUgfHwKIAkJICAoKHJlZyAmIDB4ZmZmMCkgPT0gMHg0YjAgJiYgKHJlZyAmIDB4MDAwZikgPCAweDBiKSB8fAogCQkgIHJlZyA9PSAweDQwMiB8fAogCQkgIHJlZyA9PSAweDYzYSB8fCByZWcgPT0gMHg2M2MgfHwgcmVnID09IDB4NjNlIHx8CiAJCSAgcmVnID09IDB4NjQwIHx8IHJlZyA9PSAweDY0MiB8fAogCQkgIHJlZyA9PSAweDczIHx8IHJlZyA9PSAweDc1IHx8IHJlZyA9PSAweDc3IHx8IHJlZyA9PSAweDc5IHx8Ci0JCSAgcmVnID09IDB4N2I7CisJCSAgcmVnID09IDB4N2IgfHwgcmVnID09IDB4N2Q7CiAJfQogCXJldHVybiBmYWxzZTsKIH0KQEAgLTEwNjMsNiArMTA3Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbmN0Njc3NV9zZXRfYmFuayhzdHJ1Y3QgbmN0Njc3NV9kYXRhICpkYXRhLCB1MTYgcmVnKQogewogCXU4IGJhbmsgPSByZWcgPj4gODsKKwogCWlmIChkYXRhLT5iYW5rICE9IGJhbmspIHsKIAkJb3V0Yl9wKE5DVDY3NzVfUkVHX0JBTkssIGRhdGEtPmFkZHIgKyBBRERSX1JFR19PRkZTRVQpOwogCQlvdXRiX3AoYmFuaywgZGF0YS0+YWRkciArIERBVEFfUkVHX09GRlNFVCk7CkBAIC0xMzAwLDYgKzEzMTEsNyBAQAogCQlpZiAoIWRhdGEtPnRhcmdldF9zcGVlZF90b2xlcmFuY2VbaV0gfHwKIAkJICAgIGRhdGEtPnB3bV9lbmFibGVbaV0gPT0gc3BlZWRfY3J1aXNlKSB7CiAJCQl1OCB0ID0gZmFubW9kZWNmZyAmIDB4MGY7CisKIAkJCWlmIChkYXRhLT5SRUdfVE9MRVJBTkNFX0gpIHsKIAkJCQl0IHw9IChuY3Q2Nzc1X3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkgICAgICBkYXRhLT5SRUdfVE9MRVJBTkNFX0hbaV0pICYgMHg3MCkgPj4gMTsKQEAgLTEzOTEsNiArMTQwMyw3IEBACiAJCWNhc2UgbmN0NjEwNjoKIAkJY2FzZSBuY3Q2Nzc5OgogCQljYXNlIG5jdDY3OTE6CisJCWNhc2UgbmN0Njc5MjoKIAkJCXJlZyA9IG5jdDY3NzVfcmVhZF92YWx1ZShkYXRhLAogCQkJCQlkYXRhLT5SRUdfQ1JJVElDQUxfUFdNX0VOQUJMRVtpXSk7CiAJCQlpZiAocmVnICYgZGF0YS0+Q1JJVElDQUxfUFdNX0VOQUJMRV9NQVNLKQpAQCAtMTQ3Myw2ICsxNDg2LDcgQEAKIAkJZGF0YS0+YWxhcm1zID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IE5VTV9SRUdfQUxBUk07IGkrKykgewogCQkJdTggYWxhcm07CisKIAkJCWlmICghZGF0YS0+UkVHX0FMQVJNW2ldKQogCQkJCWNvbnRpbnVlOwogCQkJYWxhcm0gPSBuY3Q2Nzc1X3JlYWRfdmFsdWUoZGF0YSwgZGF0YS0+UkVHX0FMQVJNW2ldKTsKQEAgLTE0ODIsNiArMTQ5Niw3IEBACiAJCWRhdGEtPmJlZXBzID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IE5VTV9SRUdfQkVFUDsgaSsrKSB7CiAJCQl1OCBiZWVwOworCiAJCQlpZiAoIWRhdGEtPlJFR19CRUVQW2ldKQogCQkJCWNvbnRpbnVlOwogCQkJYmVlcCA9IG5jdDY3NzVfcmVhZF92YWx1ZShkYXRhLCBkYXRhLT5SRUdfQkVFUFtpXSk7CkBAIC0xNTA0LDggKzE1MTksOSBAQAogewogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBuY3Q2Nzc1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKLQlpbnQgbnIgPSBzYXR0ci0+bnI7CiAJaW50IGluZGV4ID0gc2F0dHItPmluZGV4OworCWludCBuciA9IHNhdHRyLT5ucjsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgaW5fZnJvbV9yZWcoZGF0YS0+aW5bbnJdW2luZGV4XSwgbnIpKTsKIH0KIApAQCAtMTUxNSwxMCArMTUzMSwxMiBAQAogewogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKLQlpbnQgbnIgPSBzYXR0ci0+bnI7CiAJaW50IGluZGV4ID0gc2F0dHItPmluZGV4OworCWludCBuciA9IHNhdHRyLT5ucjsKIAl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaW50IGVycjsKKworCWVyciA9IGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTE1MzUsNiArMTU1Myw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gZGF0YS0+QUxBUk1fQklUU1tzYXR0ci0+aW5kZXhdOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsCiAJCSAgICAgICAodW5zaWduZWQgaW50KSgoZGF0YS0+YWxhcm1zID4+IG5yKSAmIDB4MDEpKTsKIH0KQEAgLTE1NzAsNiArMTU4OSw3IEBACiAJbnIgPSBmaW5kX3RlbXBfc291cmNlKGRhdGEsIHNhdHRyLT5pbmRleCwgZGF0YS0+bnVtX3RlbXBfYWxhcm1zKTsKIAlpZiAobnIgPj0gMCkgewogCQlpbnQgYml0ID0gZGF0YS0+QUxBUk1fQklUU1tuciArIFRFTVBfQUxBUk1fQkFTRV07CisKIAkJYWxhcm0gPSAoZGF0YS0+YWxhcm1zID4+IGJpdCkgJiAweDAxOwogCX0KIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYWxhcm0pOwpAQCAtMTU5NSw4ICsxNjE1LDkgQEAKIAlpbnQgbnIgPSBkYXRhLT5CRUVQX0JJVFNbc2F0dHItPmluZGV4XTsKIAlpbnQgcmVnaW5kZXggPSBuciA+PiAzOwogCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBlcnI7CiAKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJaWYgKHZhbCA+IDEpCkBAIC0xNjI5LDYgKzE2NTAsNyBAQAogCW5yID0gZmluZF90ZW1wX3NvdXJjZShkYXRhLCBzYXR0ci0+aW5kZXgsIGRhdGEtPm51bV90ZW1wX2JlZXBzKTsKIAlpZiAobnIgPj0gMCkgewogCQlpbnQgYml0ID0gZGF0YS0+QkVFUF9CSVRTW25yICsgVEVNUF9BTEFSTV9CQVNFXTsKKwogCQliZWVwID0gKGRhdGEtPmJlZXBzID4+IGJpdCkgJiAweDAxOwogCX0KIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYmVlcCk7CkBAIC0xNjQyLDggKzE2NjQsOSBAQAogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgbnIsIGJpdCwgcmVnaW5kZXg7CiAJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGVycjsKIAotCWludCBlcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwllcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlpZiAodmFsID4gMSkKQEAgLTE3MTUsNiArMTczOCw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnJwbVtucl0pOwogfQogCkBAIC0xNzI0LDYgKzE3NDgsNyBAQAogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBuY3Q2Nzc1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwogCWludCBuciA9IHNhdHRyLT5pbmRleDsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAogCQkgICAgICAgZGF0YS0+ZmFuX2Zyb21fcmVnX21pbihkYXRhLT5mYW5fbWluW25yXSwKIAkJCQkJICAgICAgZGF0YS0+ZmFuX2Rpdltucl0pKTsKQEAgLTE3MzUsNiArMTc2MCw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRpdl9mcm9tX3JlZyhkYXRhLT5mYW5fZGl2W25yXSkpOwogfQogCkBAIC0xNzQ2LDkgKzE3NzIsOSBAQAogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OwogCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCBlcnI7CiAJdW5zaWduZWQgaW50IHJlZzsKIAl1OCBuZXdfZGl2OworCWludCBlcnI7CiAKIAllcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE5MzIsNiArMTk1OCw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPnRlbXBfbGFiZWxbZGF0YS0+dGVtcF9zcmNbbnJdXSk7CiB9CiAKQEAgLTIwMDgsNiArMjAzNSw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpZGF0YS0+dGVtcF90eXBlW25yXSk7CiB9CiAKQEAgLTI3OTAsNiArMjgxOCw3IEBACiAJCWNhc2UgbmN0NjEwNjoKIAkJY2FzZSBuY3Q2Nzc5OgogCQljYXNlIG5jdDY3OTE6CisJCWNhc2UgbmN0Njc5MjoKIAkJCW5jdDY3NzVfd3JpdGVfdmFsdWUoZGF0YSwgZGF0YS0+UkVHX0NSSVRJQ0FMX1BXTVtucl0sCiAJCQkJCSAgICB2YWwpOwogCQkJcmVnID0gbmN0Njc3NV9yZWFkX3ZhbHVlKGRhdGEsCkBAIC0yOTk3LDYgKzMwMjYsNyBAQAogc2hvd192aWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2aWRfZnJvbV9yZWcoZGF0YS0+dmlkLCBkYXRhLT52cm0pKTsKIH0KIApAQCAtMzIwMiw3ICszMjMyLDcgQEAKIAkJcHdtNHBpbiA9IGZhbHNlOwogCQlwd201cGluID0gZmFsc2U7CiAJCXB3bTZwaW4gPSBmYWxzZTsKLQl9IGVsc2UgewkvKiBOQ1Q2Nzc5RCBvciBOQ1Q2NzkxRCAqLworCX0gZWxzZSB7CS8qIE5DVDY3NzlELCBOQ1Q2NzkxRCwgb3IgTkNUNjc5MkQgKi8KIAkJcmVndmFsID0gc3VwZXJpb19pbmIoc2lvcmVnLCAweDFjKTsKIAogCQlmYW4zcGluID0gIShyZWd2YWwgJiAoMSA8PCA1KSk7CkBAIC0zMjE1LDcgKzMyNDUsNyBAQAogCiAJCWZhbjRtaW4gPSBmYW40cGluOwogCi0JCWlmIChkYXRhLT5raW5kID09IG5jdDY3OTEpIHsKKwkJaWYgKGRhdGEtPmtpbmQgPT0gbmN0Njc5MSB8fCBkYXRhLT5raW5kID09IG5jdDY3OTIpIHsKIAkJCXJlZ3ZhbCA9IHN1cGVyaW9faW5iKHNpb3JlZywgMHgyZCk7CiAJCQlmYW42cGluID0gKHJlZ3ZhbCAmICgxIDw8IDEpKTsKIAkJCXB3bTZwaW4gPSAocmVndmFsICYgKDEgPDwgMCkpOwpAQCAtMzU4OCw2ICszNjE4LDcgQEAKIAogCQlicmVhazsKIAljYXNlIG5jdDY3OTE6CisJY2FzZSBuY3Q2NzkyOgogCQlkYXRhLT5pbl9udW0gPSAxNTsKIAkJZGF0YS0+cHdtX251bSA9IDY7CiAJCWRhdGEtPmF1dG9fcHdtX251bSA9IDQ7CkBAIC0zNjUwLDEyICszNjgxLDIwIEBACiAJCWRhdGEtPlJFR19XRUlHSFRfVEVNUFsxXSA9IE5DVDY3OTFfUkVHX1dFSUdIVF9URU1QX1NURVBfVE9MOwogCQlkYXRhLT5SRUdfV0VJR0hUX1RFTVBbMl0gPSBOQ1Q2NzkxX1JFR19XRUlHSFRfVEVNUF9CQVNFOwogCQlkYXRhLT5SRUdfQUxBUk0gPSBOQ1Q2NzkxX1JFR19BTEFSTTsKLQkJZGF0YS0+UkVHX0JFRVAgPSBOQ1Q2Nzc2X1JFR19CRUVQOworCQlpZiAoZGF0YS0+a2luZCA9PSBuY3Q2NzkxKQorCQkJZGF0YS0+UkVHX0JFRVAgPSBOQ1Q2Nzc2X1JFR19CRUVQOworCQllbHNlCisJCQlkYXRhLT5SRUdfQkVFUCA9IE5DVDY3OTJfUkVHX0JFRVA7CiAKIAkJcmVnX3RlbXAgPSBOQ1Q2Nzc5X1JFR19URU1QOwotCQlyZWdfdGVtcF9tb24gPSBOQ1Q2Nzc5X1JFR19URU1QX01PTjsKIAkJbnVtX3JlZ190ZW1wID0gQVJSQVlfU0laRShOQ1Q2Nzc5X1JFR19URU1QKTsKLQkJbnVtX3JlZ190ZW1wX21vbiA9IEFSUkFZX1NJWkUoTkNUNjc3OV9SRUdfVEVNUF9NT04pOworCQlpZiAoZGF0YS0+a2luZCA9PSBuY3Q2NzkxKSB7CisJCQlyZWdfdGVtcF9tb24gPSBOQ1Q2Nzc5X1JFR19URU1QX01PTjsKKwkJCW51bV9yZWdfdGVtcF9tb24gPSBBUlJBWV9TSVpFKE5DVDY3NzlfUkVHX1RFTVBfTU9OKTsKKwkJfSBlbHNlIHsKKwkJCXJlZ190ZW1wX21vbiA9IE5DVDY3OTJfUkVHX1RFTVBfTU9OOworCQkJbnVtX3JlZ190ZW1wX21vbiA9IEFSUkFZX1NJWkUoTkNUNjc5Ml9SRUdfVEVNUF9NT04pOworCQl9CiAJCXJlZ190ZW1wX292ZXIgPSBOQ1Q2Nzc5X1JFR19URU1QX09WRVI7CiAJCXJlZ190ZW1wX2h5c3QgPSBOQ1Q2Nzc5X1JFR19URU1QX0hZU1Q7CiAJCXJlZ190ZW1wX2NvbmZpZyA9IE5DVDY3NzlfUkVHX1RFTVBfQ09ORklHOwpAQCAtMzg1NCw2ICszODkzLDcgQEAKIAljYXNlIG5jdDYxMDY6CiAJY2FzZSBuY3Q2Nzc5OgogCWNhc2UgbmN0Njc5MToKKwljYXNlIG5jdDY3OTI6CiAJCWJyZWFrOwogCX0KIApAQCAtMzg4NSw2ICszOTI1LDcgQEAKIAkJCXRtcCB8PSAweDNlOwogCQkJYnJlYWs7CiAJCWNhc2UgbmN0Njc5MToKKwkJY2FzZSBuY3Q2NzkyOgogCQkJdG1wIHw9IDB4N2U7CiAJCQlicmVhazsKIAkJfQpAQCAtMzk3Miw3ICs0MDEzLDcgQEAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+YmFuayA9IDB4ZmY7CQkvKiBGb3JjZSBpbml0aWFsIGJhbmsgc2VsZWN0aW9uICovCiAKLQlpZiAoZGF0YS0+a2luZCA9PSBuY3Q2NzkxKSB7CisJaWYgKGRhdGEtPmtpbmQgPT0gbmN0Njc5MSB8fCBkYXRhLT5raW5kID09IG5jdDY3OTIpIHsKIAkJZXJyID0gc3VwZXJpb19lbnRlcihkYXRhLT5zaW9yZWcpOwogCQlpZiAoZXJyKQogCQkJZ290byBhYm9ydDsKQEAgLTQwNTIsNiArNDA5Myw3IEBACiAJIk5DVDY3NzZEL0YiLAogCSJOQ1Q2Nzc5RCIsCiAJIk5DVDY3OTFEIiwKKwkiTkNUNjc5MkQiLAogfTsKIAogLyogbmN0Njc3NV9maW5kKCkgbG9va3MgZm9yIGEgJzYyNyBpbiB0aGUgU3VwZXItSS9PIGNvbmZpZyBzcGFjZSAqLwpAQCAtNDA4Niw2ICs0MTI4LDkgQEAKIAljYXNlIFNJT19OQ1Q2NzkxX0lEOgogCQlzaW9fZGF0YS0+a2luZCA9IG5jdDY3OTE7CiAJCWJyZWFrOworCWNhc2UgU0lPX05DVDY3OTJfSUQ6CisJCXNpb19kYXRhLT5raW5kID0gbmN0Njc5MjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKHZhbCAhPSAweGZmZmYpCiAJCQlwcl9kZWJ1ZygidW5zdXBwb3J0ZWQgY2hpcCBJRDogMHglMDR4XG4iLCB2YWwpOwpAQCAtNDExMSw3ICs0MTU2LDcgQEAKIAkJc3VwZXJpb19vdXRiKHNpb2FkZHIsIFNJT19SRUdfRU5BQkxFLCB2YWwgfCAweDAxKTsKIAl9CiAKLQlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gbmN0Njc5MSkKKwlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gbmN0Njc5MSB8fCBzaW9fZGF0YS0+a2luZCA9PSBuY3Q2NzkyKQogCQluY3Q2NzkxX2VuYWJsZV9pb19tYXBwaW5nKHNpb2FkZHIpOwogCiAJc3VwZXJpb19leGl0KHNpb2FkZHIpOwpAQCAtNDIyMSw3ICs0MjY2LDcgQEAKIH0KIAogTU9EVUxFX0FVVEhPUigiR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJOQ1Q2MTA2RC9OQ1Q2Nzc1Ri9OQ1Q2Nzc2Ri9OQ1Q2Nzc5RC9OQ1Q2NzkxRCBkcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTkNUNjEwNkQvTkNUNjc3NUYvTkNUNjc3NkYvTkNUNjc3OUQvTkNUNjc5MUQvTkNUNjc5MkQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHNlbnNvcnNfbmN0Njc3NV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbmN0NzgwMi5jIGIvZHJpdmVycy9od21vbi9uY3Q3ODAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1Njc4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vbmN0NzgwMi5jCkBAIC0wLDAgKzEsODYwIEBACisvKgorICogbmN0NzgwMiAtIERyaXZlciBmb3IgTnV2b3RvbiBOQ1Q3ODAyWQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCAgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBEUlZOQU1FICJuY3Q3ODAyIgorCitzdGF0aWMgY29uc3QgdTggUkVHX1ZPTFRBR0VbNV0gPSB7IDB4MDksIDB4MGEsIDB4MGMsIDB4MGQsIDB4MGUgfTsKKworc3RhdGljIGNvbnN0IHU4IFJFR19WT0xUQUdFX0xJTUlUX0xTQlsyXVs1XSA9IHsKKwl7IDB4NDAsIDB4MDAsIDB4NDIsIDB4NDQsIDB4NDYgfSwKKwl7IDB4M2YsIDB4MDAsIDB4NDEsIDB4NDMsIDB4NDUgfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBSRUdfVk9MVEFHRV9MSU1JVF9NU0JbNV0gPSB7IDB4NDgsIDB4MDAsIDB4NDcsIDB4NDcsIDB4NDggfTsKKworc3RhdGljIGNvbnN0IHU4IFJFR19WT0xUQUdFX0xJTUlUX01TQl9TSElGVFsyXVs1XSA9IHsKKwl7IDAsIDAsIDQsIDAsIDQgfSwKKwl7IDIsIDAsIDYsIDIsIDYgfSwKK307CisKKyNkZWZpbmUgUkVHX0JBTksJCTB4MDAKKyNkZWZpbmUgUkVHX1RFTVBfTFNCCQkweDA1CisjZGVmaW5lIFJFR19URU1QX1BFQ0lfTFNCCTB4MDgKKyNkZWZpbmUgUkVHX1ZPTFRBR0VfTE9XCQkweDBmCisjZGVmaW5lIFJFR19GQU5DT1VOVF9MT1cJMHgxMworI2RlZmluZSBSRUdfU1RBUlQJCTB4MjEKKyNkZWZpbmUgUkVHX01PREUJCTB4MjIKKyNkZWZpbmUgUkVHX1BFQ0lfRU5BQkxFCQkweDIzCisjZGVmaW5lIFJFR19GQU5fRU5BQkxFCQkweDI0CisjZGVmaW5lIFJFR19WTU9OX0VOQUJMRQkJMHgyNQorI2RlZmluZSBSRUdfVkVORE9SX0lECQkweGZkCisjZGVmaW5lIFJFR19DSElQX0lECQkweGZlCisjZGVmaW5lIFJFR19WRVJTSU9OX0lECQkweGZmCisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZXMgYW5kIG1hbmlwdWxhdGlvbiB0aGVyZW9mCisgKi8KKworc3RydWN0IG5jdDc4MDJfZGF0YSB7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCBtdXRleCBhY2Nlc3NfbG9jazsgLyogZm9yIG11bHRpLWJ5dGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyAqLworfTsKKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfdGVtcChzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLAorCQkJICAgICB1OCByZWdfdGVtcCwgdTggcmVnX3RlbXBfbG93LCBpbnQgKnRlbXApCit7CisJdW5zaWduZWQgaW50IHQxLCB0MiA9IDA7CisJaW50IGVycjsKKworCSp0ZW1wID0gMDsKKworCW11dGV4X2xvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIHJlZ190ZW1wLCAmdDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGFib3J0OworCXQxIDw8PSA4OworCWlmIChyZWdfdGVtcF9sb3cpIHsJLyogMTEgYml0IGRhdGEgKi8KKwkJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCByZWdfdGVtcF9sb3csICZ0Mik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBhYm9ydDsKKwl9CisJdDEgfD0gdDIgJiAweGUwOworCSp0ZW1wID0gKHMxNil0MSAvIDMyICogMTI1OworYWJvcnQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfZmFuKHN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEsIHU4IHJlZ19mYW4pCit7CisJdW5zaWduZWQgaW50IGYxLCBmMjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+YWNjZXNzX2xvY2spOworCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgcmVnX2ZhbiwgJmYxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBhYm9ydDsKKwlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19GQU5DT1VOVF9MT1csICZmMik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYWJvcnQ7CisJcmV0ID0gKGYxIDw8IDUpIHwgKGYyID4+IDMpOworCS8qIGNvbnZlcnQgZmFuIGNvdW50IHRvIHJwbSAqLworCWlmIChyZXQgPT0gMHgxZmZmKQkvKiBtYXhpbXVtIHZhbHVlLCBhc3N1bWUgZmFuIGlzIHN0b3BwZWQgKi8KKwkJcmV0ID0gMDsKKwllbHNlIGlmIChyZXQpCisJCXJldCA9IERJVl9ST1VORF9DTE9TRVNUKDEzNTAwMDBVLCByZXQpOworYWJvcnQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfZmFuX21pbihzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCB1OCByZWdfZmFuX2xvdywKKwkJCQl1OCByZWdfZmFuX2hpZ2gpCit7CisJdW5zaWduZWQgaW50IGYxLCBmMjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+YWNjZXNzX2xvY2spOworCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgcmVnX2Zhbl9sb3csICZmMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYWJvcnQ7CisJcmV0ID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCByZWdfZmFuX2hpZ2gsICZmMik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYWJvcnQ7CisJcmV0ID0gZjEgfCAoKGYyICYgMHhmOCkgPDwgNSk7CisJLyogY29udmVydCBmYW4gY291bnQgdG8gcnBtICovCisJaWYgKHJldCA9PSAweDFmZmYpCS8qIG1heGltdW0gdmFsdWUsIGFzc3VtZSBubyBsaW1pdCAqLworCQlyZXQgPSAwOworCWVsc2UgaWYgKHJldCkKKwkJcmV0ID0gRElWX1JPVU5EX0NMT1NFU1QoMTM1MDAwMFUsIHJldCk7CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5jdDc4MDJfd3JpdGVfZmFuX21pbihzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCB1OCByZWdfZmFuX2xvdywKKwkJCQkgdTggcmVnX2Zhbl9oaWdoLCB1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJaW50IGVycjsKKworCWlmIChsaW1pdCkKKwkJbGltaXQgPSBESVZfUk9VTkRfQ0xPU0VTVCgxMzUwMDAwVSwgbGltaXQpOworCWVsc2UKKwkJbGltaXQgPSAweDFmZmY7CisJbGltaXQgPSBjbGFtcF92YWwobGltaXQsIDAsIDB4MWZmZik7CisKKwltdXRleF9sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJZXJyID0gcmVnbWFwX3dyaXRlKGRhdGEtPnJlZ21hcCwgcmVnX2Zhbl9sb3csIGxpbWl0ICYgMHhmZik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gYWJvcnQ7CisKKwllcnIgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCByZWdfZmFuX2hpZ2gsIChsaW1pdCAmIDB4MWYwMCkgPj4gNSk7CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdTggbmN0NzgwMl92bXVsW10gPSB7IDQsIDIsIDIsIDIsIDIgfTsKKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfdm9sdGFnZShzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCBpbnQgbnIsIGludCBpbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgdjEsIHYyOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJaWYgKGluZGV4ID09IDApIHsJLyogdm9sdGFnZSAqLworCQlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19WT0xUQUdFW25yXSwgJnYxKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGFib3J0OworCQlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19WT0xUQUdFX0xPVywgJnYyKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGFib3J0OworCQlyZXQgPSAoKHYxIDw8IDIpIHwgKHYyID4+IDYpKSAqIG5jdDc4MDJfdm11bFtucl07CisJfSAgZWxzZSB7CS8qIGxpbWl0ICovCisJCWludCBzaGlmdCA9IDggLSBSRUdfVk9MVEFHRV9MSU1JVF9NU0JfU0hJRlRbaW5kZXggLSAxXVtucl07CisKKwkJcmV0ID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLAorCQkJCSAgUkVHX1ZPTFRBR0VfTElNSVRfTFNCW2luZGV4IC0gMV1bbnJdLCAmdjEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gYWJvcnQ7CisJCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgUkVHX1ZPTFRBR0VfTElNSVRfTVNCW25yXSwKKwkJCQkgICZ2Mik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBhYm9ydDsKKwkJcmV0ID0gKHYxIHwgKCh2MiA8PCBzaGlmdCkgJiAweDMwMCkpICogbmN0NzgwMl92bXVsW25yXTsKKwl9CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5jdDc4MDJfd3JpdGVfdm9sdGFnZShzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCBpbnQgbnIsIGludCBpbmRleCwKKwkJCQkgdW5zaWduZWQgaW50IHZvbHRhZ2UpCit7CisJaW50IHNoaWZ0ID0gOCAtIFJFR19WT0xUQUdFX0xJTUlUX01TQl9TSElGVFtpbmRleCAtIDFdW25yXTsKKwlpbnQgZXJyOworCisJdm9sdGFnZSA9IERJVl9ST1VORF9DTE9TRVNUKHZvbHRhZ2UsIG5jdDc4MDJfdm11bFtucl0pOworCXZvbHRhZ2UgPSBjbGFtcF92YWwodm9sdGFnZSwgMCwgMHgzZmYpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+YWNjZXNzX2xvY2spOworCWVyciA9IHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsCisJCQkgICBSRUdfVk9MVEFHRV9MSU1JVF9MU0JbaW5kZXggLSAxXVtucl0sCisJCQkgICB2b2x0YWdlICYgMHhmZik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gYWJvcnQ7CisKKwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGF0YS0+cmVnbWFwLCBSRUdfVk9MVEFHRV9MSU1JVF9NU0JbbnJdLAorCQkJCSAweDAzMDAgPj4gc2hpZnQsICh2b2x0YWdlICYgMHgwMzAwKSA+PiBzaGlmdCk7CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCB2b2x0YWdlOworCisJdm9sdGFnZSA9IG5jdDc4MDJfcmVhZF92b2x0YWdlKGRhdGEsIHNhdHRyLT5uciwgc2F0dHItPmluZGV4KTsKKwlpZiAodm9sdGFnZSA8IDApCisJCXJldHVybiB2b2x0YWdlOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZvbHRhZ2UpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpbmRleCA9IHNhdHRyLT5pbmRleDsKKwlpbnQgbnIgPSBzYXR0ci0+bnI7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGVycjsKKworCWVyciA9IGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbmN0NzgwMl93cml0ZV92b2x0YWdlKGRhdGEsIG5yLCBpbmRleCwgdmFsKTsKKwlyZXR1cm4gZXJyID8gOiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgZXJyLCB0ZW1wOworCisJZXJyID0gbmN0NzgwMl9yZWFkX3RlbXAoZGF0YSwgc2F0dHItPm5yLCBzYXR0ci0+aW5kZXgsICZ0ZW1wKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IG5yID0gc2F0dHItPm5yOworCWxvbmcgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBrc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJdmFsID0gY2xhbXBfdmFsKERJVl9ST1VORF9DTE9TRVNUKHZhbCwgMTAwMCksIC0xMjgsIDEyNyk7CisKKwllcnIgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBuciwgdmFsICYgMHhmZik7CisJcmV0dXJuIGVyciA/IDogY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHNwZWVkOworCisJc3BlZWQgPSBuY3Q3ODAyX3JlYWRfZmFuKGRhdGEsIHNhdHRyLT5pbmRleCk7CisJaWYgKHNwZWVkIDwgMCkKKwkJcmV0dXJuIHNwZWVkOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHNwZWVkKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgc3BlZWQ7CisKKwlzcGVlZCA9IG5jdDc4MDJfcmVhZF9mYW5fbWluKGRhdGEsIHNhdHRyLT5uciwgc2F0dHItPmluZGV4KTsKKwlpZiAoc3BlZWQgPCAwKQorCQlyZXR1cm4gc3BlZWQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3BlZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZXJyOworCisJZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBuY3Q3ODAyX3dyaXRlX2Zhbl9taW4oZGF0YSwgc2F0dHItPm5yLCBzYXR0ci0+aW5kZXgsIHZhbCk7CisJcmV0dXJuIGVyciA/IDogY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgYml0ID0gc2F0dHItPmluZGV4OworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgc2F0dHItPm5yLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhISh2YWwgJiAoMSA8PCBiaXQpKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X2JlZXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgcmVndmFsOworCWludCBlcnI7CisKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIHNhdHRyLT5uciwgJnJlZ3ZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShyZWd2YWwgJiAoMSA8PCBzYXR0ci0+aW5kZXgpKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV9iZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAodmFsID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGF0YS0+cmVnbWFwLCBzYXR0ci0+bnIsIDEgPDwgc2F0dHItPmluZGV4LAorCQkJCSB2YWwgPyAxIDw8IHNhdHRyLT5pbmRleCA6IDApOworCXJldHVybiBlcnIgPyA6IGNvdW50OworfQorCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwMSwKKwkJCSAgICBSRUdfVEVNUF9MU0IpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDMxLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAsCisJCQkgICAgc3RvcmVfdGVtcCwgMHgzMCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfY3JpdCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDNhLCAwKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDB4MDIsCisJCQkgICAgUkVHX1RFTVBfTFNCKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9taW4sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAsCisJCQkgICAgc3RvcmVfdGVtcCwgMHgzMywgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzIsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX2NyaXQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAsCisJCQkgICAgc3RvcmVfdGVtcCwgMHgzYiwgMCk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAweDAzLAorCQkJICAgIFJFR19URU1QX0xTQik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzUsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDM0LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4M2MsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwNCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzcsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA0X21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDM2LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNF9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4M2QsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwNiwKKwkJCSAgICBSRUdfVEVNUF9QRUNJX0xTQik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzksIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA1X21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDM4LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNV9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4M2UsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDZfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwNywKKwkJCSAgICBSRUdfVEVNUF9QRUNJX0xTQik7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxOCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTgsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDE4LCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNF9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxOCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTgsIDQpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTksIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDE5LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxOSwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTksIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA1X21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDE5LCA0KTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxYiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDFiLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MWIsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA0X2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxYiwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDFiLCA0KTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAweDE3LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMHgxNywgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDNfZmF1bHQsIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MTcsIDIpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwKKwkJCSAgICBzdG9yZV9iZWVwLCAweDVjLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLAorCQkJICAgIHN0b3JlX2JlZXAsIDB4NWMsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2JlZXAsCisJCQkgICAgc3RvcmVfYmVlcCwgMHg1YywgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwKKwkJCSAgICBzdG9yZV9iZWVwLCAweDVjLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNV9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLAorCQkJICAgIHN0b3JlX2JlZXAsIDB4NWMsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA2X2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2JlZXAsCisJCQkgICAgc3RvcmVfYmVlcCwgMHg1YywgNSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpuY3Q3ODAyX3RlbXBfYXR0cnNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9iZWVwLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyLmF0dHIsCQkvKiA5ICovCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9iZWVwLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCQkvKiAxOCAqLworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9pbnB1dC5kZXZfYXR0ci5hdHRyLAkJLyogMjcgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAkJLyogMzUgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9pbnB1dC5kZXZfYXR0ci5hdHRyLAkJLyogNDMgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA2X2JlZXAuZGV2X2F0dHIuYXR0ciwKKworCU5VTEwKK307CisKK3N0YXRpYyB1bW9kZV90IG5jdDc4MDJfdGVtcF9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCBlcnI7CisKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19NT0RFLCAmcmVnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW5kZXggPCA5ICYmCisJICAgIChyZWcgJiAwMykgIT0gMHgwMSAmJiAocmVnICYgMHgwMykgIT0gMHgwMikJCS8qIFJEMSAqLworCQlyZXR1cm4gMDsKKwlpZiAoaW5kZXggPj0gOSAmJiBpbmRleCA8IDE4ICYmCisJICAgIChyZWcgJiAweDBjKSAhPSAweDA0ICYmIChyZWcgJiAweDBjKSAhPSAweDA4KQkvKiBSRDIgKi8KKwkJcmV0dXJuIDA7CisJaWYgKGluZGV4ID49IDE4ICYmIGluZGV4IDwgMjcgJiYgKHJlZyAmIDB4MzApICE9IDB4MTApCS8qIFJEMyAqLworCQlyZXR1cm4gMDsKKwlpZiAoaW5kZXggPj0gMjcgJiYgaW5kZXggPCAzNSkJCQkJLyogbG9jYWwgKi8KKwkJcmV0dXJuIGF0dHItPm1vZGU7CisKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19QRUNJX0VOQUJMRSwgJnJlZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAwOworCisJaWYgKGluZGV4ID49IDM1ICYmIGluZGV4IDwgNDMgJiYgIShyZWcgJiAweDAxKSkJCS8qIFBFQ0kgMCAqLworCQlyZXR1cm4gMDsKKworCWlmIChpbmRleCA+PSAweDQzICYmICghKHJlZyAmIDB4MDIpKSkJCQkvKiBQRUNJIDEgKi8KKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXR0ci0+bW9kZTsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmN0NzgwMl90ZW1wX2dyb3VwID0geworCS5hdHRycyA9IG5jdDc4MDJfdGVtcF9hdHRycywKKwkuaXNfdmlzaWJsZSA9IG5jdDc4MDJfdGVtcF9pc192aXNpYmxlLAorfTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4wX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaW4sIHN0b3JlX2luLAorCQkJICAgIDAsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2luLCBzdG9yZV9pbiwKKwkJCSAgICAwLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjBfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWUsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLCBzdG9yZV9iZWVwLAorCQkJICAgIDB4NWEsIDMpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAxLCAwKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4yX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaW4sIHN0b3JlX2luLAorCQkJICAgIDIsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2luLCBzdG9yZV9pbiwKKwkJCSAgICAyLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWUsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLCBzdG9yZV9iZWVwLAorCQkJICAgIDB4NWEsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAzLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19pbiwgc3RvcmVfaW4sCisJCQkgICAgMywgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaW4sIHN0b3JlX2luLAorCQkJICAgIDMsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMHgxZSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2JlZXAsIHN0b3JlX2JlZXAsCisJCQkgICAgMHg1YSwgMSk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDQsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluNF9taW4sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2luLCBzdG9yZV9pbiwKKwkJCSAgICA0LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19pbiwgc3RvcmVfaW4sCisJCQkgICAgNCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW40X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAweDFlLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDVhLCAyKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5jdDc4MDJfaW5fYXR0cnNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwJLyogNSAqLworCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwJLyogNiAqLworCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfaW5wdXQuZGV2X2F0dHIuYXR0ciwJLyogMTEgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX2luM19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2JlZXAuZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfaW40X2lucHV0LmRldl9hdHRyLmF0dHIsCS8qIDE3ICovCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9iZWVwLmRldl9hdHRyLmF0dHIsCisKKwlOVUxMLAorfTsKKworc3RhdGljIHVtb2RlX3QgbmN0NzgwMl9pbl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHJlZzsKKwlpbnQgZXJyOworCisJaWYgKGluZGV4IDwgNikJCQkJCQkvKiBWQ0MsIFZDT1JFICovCisJCXJldHVybiBhdHRyLT5tb2RlOworCisJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCBSRUdfTU9ERSwgJnJlZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAwOworCisJaWYgKGluZGV4ID49IDYgJiYgaW5kZXggPCAxMSAmJiAocmVnICYgMHgwMykgIT0gMHgwMykJLyogVlNFTjEgKi8KKwkJcmV0dXJuIDA7CisJaWYgKGluZGV4ID49IDExICYmIGluZGV4IDwgMTcgJiYgKHJlZyAmIDB4MGMpICE9IDB4MGMpCS8qIFZTRU4yICovCisJCXJldHVybiAwOworCWlmIChpbmRleCA+PSAxNyAmJiAocmVnICYgMHgzMCkgIT0gMHgzMCkJCS8qIFZTRU4zICovCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0dHItPm1vZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG5jdDc4MDJfaW5fZ3JvdXAgPSB7CisJLmF0dHJzID0gbmN0NzgwMl9pbl9hdHRycywKKwkuaXNfdmlzaWJsZSA9IG5jdDc4MDJfaW5faXNfdmlzaWJsZSwKK307CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDB4MTApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjFfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19mYW5fbWluLAorCQkJICAgIHN0b3JlX2Zhbl9taW4sIDB4NDksIDB4NGMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjFfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWEsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjFfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDViLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDB4MTEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjJfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19mYW5fbWluLAorCQkJICAgIHN0b3JlX2Zhbl9taW4sIDB4NGEsIDB4NGQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWEsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjJfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDViLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDB4MTIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19mYW5fbWluLAorCQkJICAgIHN0b3JlX2Zhbl9taW4sIDB4NGIsIDB4NGUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjNfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWEsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjNfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDViLCAyKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5jdDc4MDJfZmFuX2F0dHJzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19iZWVwLmRldl9hdHRyLmF0dHIsCisKKwlOVUxMCit9OworCitzdGF0aWMgdW1vZGVfdCBuY3Q3ODAyX2Zhbl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBmYW4gPSBpbmRleCAvIDQ7CS8qIDQgYXR0cmlidXRlcyBwZXIgZmFuICovCisJdW5zaWduZWQgaW50IHJlZzsKKwlpbnQgZXJyOworCisJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCBSRUdfRkFOX0VOQUJMRSwgJnJlZyk7CisJaWYgKGVyciA8IDAgfHwgIShyZWcgJiAoMSA8PCBmYW4pKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXR0ci0+bW9kZTsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmN0NzgwMl9mYW5fZ3JvdXAgPSB7CisJLmF0dHJzID0gbmN0NzgwMl9mYW5fYXR0cnMsCisJLmlzX3Zpc2libGUgPSBuY3Q3ODAyX2Zhbl9pc192aXNpYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm5jdDc4MDJfZ3JvdXBzW10gPSB7CisJJm5jdDc4MDJfdGVtcF9ncm91cCwKKwkmbmN0NzgwMl9pbl9ncm91cCwKKwkmbmN0NzgwMl9mYW5fZ3JvdXAsCisJTlVMTAorfTsKKworc3RhdGljIGludCBuY3Q3ODAyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit7CisJaW50IHJlZzsKKworCS8qCisJICogQ2hpcCBpZGVudGlmaWNhdGlvbiByZWdpc3RlcnMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIGJhbmsgMCwKKwkgKiBzbyBvbmx5IGF0dGVtcHQgY2hpcCBkZXRlY3Rpb24gaWYgYmFuayAwIGlzIHNlbGVjdGVkCisJICovCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0JBTkspOworCWlmIChyZWcgIT0gMHgwMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBSRUdfVkVORE9SX0lEKTsKKwlpZiAocmVnICE9IDB4NTApCisJCXJldHVybiAtRU5PREVWOworCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0NISVBfSUQpOworCWlmIChyZWcgIT0gMHhjMykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBSRUdfVkVSU0lPTl9JRCk7CisJaWYgKHJlZyA8IDAgfHwgKHJlZyAmIDB4ZjApICE9IDB4MjApCisJCXJldHVybiAtRU5PREVWOworCisJLyogQWxzbyB2YWxpZGF0ZSBsb3dlciBiaXRzIG9mIHZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlIHJlZ2lzdGVycyAqLworCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFJFR19URU1QX0xTQik7CisJaWYgKHJlZyA8IDAgfHwgKHJlZyAmIDB4MWYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFJFR19URU1QX1BFQ0lfTFNCKTsKKwlpZiAocmVnIDwgMCB8fCAocmVnICYgMHgzZikpCisJCXJldHVybiAtRU5PREVWOworCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1ZPTFRBR0VfTE9XKTsKKwlpZiAocmVnIDwgMCB8fCAocmVnICYgMHgzZikpCisJCXJldHVybiAtRU5PREVWOworCisJc3RybGNweShpbmZvLT50eXBlLCAibmN0NzgwMiIsIEkyQ19OQU1FX1NJWkUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBuY3Q3ODAyX3JlZ21hcF9pc192b2xhdGlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlZyAhPSBSRUdfQkFOSyAmJiByZWcgPD0gMHgyMDsKK30KKworc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIG5jdDc4MDJfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDgsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9SQlRSRUUsCisJLnZvbGF0aWxlX3JlZyA9IG5jdDc4MDJfcmVnbWFwX2lzX3ZvbGF0aWxlLAorfTsKKworc3RhdGljIGludCBuY3Q3ODAyX2luaXRfY2hpcChzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhKQoreworCWludCBlcnI7CisKKwkvKiBFbmFibGUgQURDICovCisJZXJyID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGRhdGEtPnJlZ21hcCwgUkVHX1NUQVJULCAweDAxLCAweDAxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRW5hYmxlIGxvY2FsIHRlbXBlcmF0dXJlIHNlbnNvciAqLworCWVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhkYXRhLT5yZWdtYXAsIFJFR19NT0RFLCAweDQwLCAweDQwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRW5hYmxlIFZjb3JlIGFuZCBWQ0Mgdm9sdGFnZSBtb25pdG9yaW5nICovCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhkYXRhLT5yZWdtYXAsIFJFR19WTU9OX0VOQUJMRSwgMHgwMywgMHgwMyk7Cit9CisKK3N0YXRpYyBpbnQgbmN0NzgwMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJaW50IHJldDsKKworCWRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgJm5jdDc4MDJfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihkYXRhLT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhLT5yZWdtYXApOworCisJbXV0ZXhfaW5pdCgmZGF0YS0+YWNjZXNzX2xvY2spOworCisJcmV0ID0gbmN0NzgwMl9pbml0X2NoaXAoZGF0YSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhkZXYsIGNsaWVudC0+bmFtZSwKKwkJCQkJCQkgICBkYXRhLAorCQkJCQkJCSAgIG5jdDc4MDJfZ3JvdXBzKTsKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGh3bW9uX2Rldik7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBuY3Q3ODAyX2FkZHJlc3NfbGlzdFtdID0geworCTB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5ECit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbmN0NzgwMl9pZHRhYmxlW10gPSB7CisJeyAibmN0NzgwMiIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbmN0NzgwMl9pZHRhYmxlKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG5jdDc4MDJfZHJpdmVyID0geworCS5jbGFzcyA9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSVk5BTUUsCisJfSwKKwkuZGV0ZWN0ID0gbmN0NzgwMl9kZXRlY3QsCisJLnByb2JlID0gbmN0NzgwMl9wcm9iZSwKKwkuaWRfdGFibGUgPSBuY3Q3ODAyX2lkdGFibGUsCisJLmFkZHJlc3NfbGlzdCA9IG5jdDc4MDJfYWRkcmVzc19saXN0LAorfTsKKworbW9kdWxlX2kyY19kcml2ZXIobmN0NzgwMl9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5DVDc4MDJZIEhhcmR3YXJlIE1vbml0b3JpbmcgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL0tjb25maWcKaW5kZXggNmUxZTQ5My4uYTY3NGNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wbWJ1cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvS2NvbmZpZwpAQCAtNDcsMTUgKzQ3LDIyIEBACiAJICBiZSBjYWxsZWQgbG0yNTA2Ni4KIAogY29uZmlnIFNFTlNPUlNfTFRDMjk3OAotCXRyaXN0YXRlICJMaW5lYXIgVGVjaG5vbG9naWVzIExUQzI5NzQsIExUQzI5NzgsIExUQzM4ODAsIGFuZCBMVEMzODgzIgorCXRyaXN0YXRlICJMaW5lYXIgVGVjaG5vbG9naWVzIExUQzI5NzggYW5kIGNvbXBhdGlibGVzIgogCWRlZmF1bHQgbgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQgZm9yIExpbmVhcgotCSAgVGVjaG5vbG9neSBMVEMyOTc0LCBMVEMyOTc4LCBMVEMzODgwLCBhbmQgTFRDMzg4My4KKwkgIFRlY2hub2xvZ3kgTFRDMjk3NCwgTFRDMjk3NywgTFRDMjk3OCwgTFRDMzg4MCwgTFRDMzg4MywgYW5kIExUTTQ2NzYuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgbHRjMjk3OC4KIAorY29uZmlnIFNFTlNPUlNfTFRDMjk3OF9SRUdVTEFUT1IKKwlib29sZWFuICJSZWd1bGF0b3Igc3VwcG9ydCBmb3IgTFRDMjk3OCBhbmQgY29tcGF0aWJsZXMiCisJZGVwZW5kcyBvbiBTRU5TT1JTX0xUQzI5NzggJiYgUkVHVUxBVE9SCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHJlZ3VsYXRvciBzdXBwb3J0IGZvciBMaW5lYXIKKwkgIFRlY2hub2xvZ3kgTFRDMjk3NCwgTFRDMjk3NywgTFRDMjk3OCwgTFRDMzg4MCwgTFRDMzg4MywgYW5kIExUTTQ2NzYuCisKIGNvbmZpZyBTRU5TT1JTX01BWDE2MDY0CiAJdHJpc3RhdGUgIk1heGltIE1BWDE2MDY0IgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wbWJ1cy9sdGMyOTc4LmMgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL2x0YzI5NzguYwppbmRleCBlMjRlZDUyLi4wODM1MDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3BtYnVzL2x0YzI5NzguYworKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL2x0YzI5NzguYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CiAjaW5jbHVkZSAicG1idXMuaCIKIAogZW51bSBjaGlwcyB7IGx0YzI5NzQsIGx0YzI5NzcsIGx0YzI5NzgsIGx0YzM4ODAsIGx0YzM4ODMsIGx0bTQ2NzYgfTsKQEAgLTM3NCw2ICszNzUsMTkgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbHRjMjk3OF9pZCk7CiAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TRU5TT1JTX0xUQzI5NzhfUkVHVUxBVE9SKQorc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBsdGMyOTc4X3JlZ19kZXNjW10gPSB7CisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMCksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMSksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMiksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMyksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNCksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNSksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNiksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNyksCit9OworI2VuZGlmIC8qIENPTkZJR19TRU5TT1JTX0xUQzI5NzhfUkVHVUxBVE9SICovCisKIHN0YXRpYyBpbnQgbHRjMjk3OF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTQ4NywxMyArNTAxLDM2IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU0VOU09SU19MVEMyOTc4X1JFR1VMQVRPUikKKwlpbmZvLT5udW1fcmVndWxhdG9ycyA9IGluZm8tPnBhZ2VzOworCWluZm8tPnJlZ19kZXNjID0gbHRjMjk3OF9yZWdfZGVzYzsKKwlpZiAoaW5mby0+bnVtX3JlZ3VsYXRvcnMgPiBBUlJBWV9TSVpFKGx0YzI5NzhfcmVnX2Rlc2MpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibnVtX3JlZ3VsYXRvcnMgdG9vIGxhcmdlISIpOworCQlpbmZvLT5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUobHRjMjk3OF9yZWdfZGVzYyk7CisJfQorI2VuZGlmCisKIAlyZXR1cm4gcG1idXNfZG9fcHJvYmUoY2xpZW50LCBpZCwgaW5mbyk7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGx0YzI5Nzhfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMjk3NCIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMjk3NyIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMjk3OCIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMzg4MCIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMzg4MyIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRtNDY3NiIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBsdGMyOTc4X29mX21hdGNoKTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHRjMjk3OF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJICAgLm5hbWUgPSAibHRjMjk3OCIsCisJCSAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihsdGMyOTc4X29mX21hdGNoKSwKIAkJICAgfSwKIAkucHJvYmUgPSBsdGMyOTc4X3Byb2JlLAogCS5yZW1vdmUgPSBwbWJ1c19kb19yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzL3BtYnVzLmggYi9kcml2ZXJzL2h3bW9uL3BtYnVzL3BtYnVzLmgKaW5kZXggZmE5YmViMy4uODlhMjNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wbWJ1cy9wbWJ1cy5oCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXMuaApAQCAtMTksNiArMTksOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKwogI2lmbmRlZiBQTUJVU19ICiAjZGVmaW5lIFBNQlVTX0gKIApAQCAtMTg2LDYgKzE4OCwxMSBAQAogI2RlZmluZSBQTUJVU19WSVJUX1NUQVRVU19WTU9OCQkoUE1CVVNfVklSVF9CQVNFICsgMzUpCiAKIC8qCisgKiBPUEVSQVRJT04KKyAqLworI2RlZmluZSBQQl9PUEVSQVRJT05fQ09OVFJPTF9PTgkJKDE8PDcpCisKKy8qCiAgKiBDQVBBQklMSVRZCiAgKi8KICNkZWZpbmUgUEJfQ0FQQUJJTElUWV9TTUJBTEVSVAkJKDE8PDQpCkBAIC0zNjUsOCArMzcyLDI3IEBACiAJICovCiAJaW50ICgqaWRlbnRpZnkpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQlzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKmluZm8pOworCisJLyogUmVndWxhdG9yIGZ1bmN0aW9uYWxpdHksIGlmIHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgZHJpdmVyLiAqLworCWludCBudW1fcmVndWxhdG9yczsKKwljb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKnJlZ19kZXNjOwogfTsKIAorLyogUmVndWxhdG9yIG9wcyAqLworCitleHRlcm4gc3RydWN0IHJlZ3VsYXRvcl9vcHMgcG1idXNfcmVndWxhdG9yX29wczsKKworLyogTWFjcm8gZm9yIGZpbGxpbmcgaW4gYXJyYXkgb2Ygc3RydWN0IHJlZ3VsYXRvcl9kZXNjICovCisjZGVmaW5lIFBNQlVTX1JFR1VMQVRPUihfbmFtZSwgX2lkKQkJCQlcCisJW19pZF0gPSB7CQkJCQkJXAorCQkubmFtZSA9IChfbmFtZSAjIF9pZCksCQkJCVwKKwkJLmlkID0gKF9pZCksCQkJCQlcCisJCS5vZl9tYXRjaCA9IG9mX21hdGNoX3B0cihfbmFtZSAjIF9pZCksCQlcCisJCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJXAorCQkub3BzID0gJnBtYnVzX3JlZ3VsYXRvcl9vcHMsCQkJXAorCQkub3duZXIgPSBUSElTX01PRFVMRSwJCQkJXAorCX0KKwogLyogRnVuY3Rpb24gZGVjbGFyYXRpb25zICovCiAKIHZvaWQgcG1idXNfY2xlYXJfY2FjaGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CkBAIC0zNzUsNiArNDAxLDEwIEBACiBpbnQgcG1idXNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHBhZ2UsIHU4IHJlZywgdTE2IHdvcmQpOwogaW50IHBtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCB1OCByZWcpOwogaW50IHBtYnVzX3dyaXRlX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHZhbHVlKTsKK2ludCBwbWJ1c193cml0ZV9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHJlZywKKwkJCSAgdTggdmFsdWUpOworaW50IHBtYnVzX3VwZGF0ZV9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHJlZywKKwkJCSAgIHU4IG1hc2ssIHU4IHZhbHVlKTsKIHZvaWQgcG1idXNfY2xlYXJfZmF1bHRzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogYm9vbCBwbWJ1c19jaGVja19ieXRlX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKTsKIGJvb2wgcG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgaW50IHJlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzL3BtYnVzX2NvcmUuYyBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCmluZGV4IDI5MWQxMWYuLmYyZTQ3YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3BtYnVzLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSAicG1idXMuaCIKIAogLyoKQEAgLTI1Myw2ICsyNTUsMzcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX3JlYWRfYnl0ZV9kYXRhKTsKIAoraW50IHBtYnVzX3dyaXRlX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlpbnQgcnY7CisKKwlydiA9IHBtYnVzX3NldF9wYWdlKGNsaWVudCwgcGFnZSk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX3dyaXRlX2J5dGVfZGF0YSk7CisKK2ludCBwbWJ1c191cGRhdGVfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCB1OCByZWcsCisJCQkgICB1OCBtYXNrLCB1OCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCWludCBydjsKKworCXJ2ID0gcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLCByZWcpOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKKworCXRtcCA9IChydiAmIH5tYXNrKSB8ICh2YWx1ZSAmIG1hc2spOworCisJaWYgKHRtcCAhPSBydikKKwkJcnYgPSBwbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLCByZWcsIHRtcCk7CisKKwlyZXR1cm4gcnY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbWJ1c191cGRhdGVfYnl0ZV9kYXRhKTsKKwogLyoKICAqIF9wbWJ1c19yZWFkX2J5dGVfZGF0YSgpIGlzIHNpbWlsYXIgdG8gcG1idXNfcmVhZF9ieXRlX2RhdGEoKSwgYnV0IGNoZWNrcyBpZgogICogYSBkZXZpY2Ugc3BlY2lmaWMgbWFwcGluZyBmdW5jdGlvbiBleGlzdHMgYW5kIGNhbGxzIGl0IGlmIG5lY2Vzc2FyeS4KQEAgLTE3MjcsNiArMTc2MCw4NCBAQAogCXJldHVybiAwOwogfQogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfUkVHVUxBVE9SKQorc3RhdGljIGludCBwbWJ1c19yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByZGV2X2dldF9kZXYocmRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2LT5wYXJlbnQpOworCXU4IHBhZ2UgPSByZGV2X2dldF9pZChyZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLCBQTUJVU19PUEVSQVRJT04pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuICEhKHJldCAmIFBCX09QRVJBVElPTl9DT05UUk9MX09OKTsKK30KKworc3RhdGljIGludCBfcG1idXNfcmVndWxhdG9yX29uX29mZihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcmRldl9nZXRfZGV2KHJkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldi0+cGFyZW50KTsKKwl1OCBwYWdlID0gcmRldl9nZXRfaWQocmRldik7CisKKwlyZXR1cm4gcG1idXNfdXBkYXRlX2J5dGVfZGF0YShjbGllbnQsIHBhZ2UsIFBNQlVTX09QRVJBVElPTiwKKwkJCQkgICAgICBQQl9PUEVSQVRJT05fQ09OVFJPTF9PTiwKKwkJCQkgICAgICBlbmFibGUgPyBQQl9PUEVSQVRJT05fQ09OVFJPTF9PTiA6IDApOworfQorCitzdGF0aWMgaW50IHBtYnVzX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJcmV0dXJuIF9wbWJ1c19yZWd1bGF0b3Jfb25fb2ZmKHJkZXYsIDEpOworfQorCitzdGF0aWMgaW50IHBtYnVzX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXJldHVybiBfcG1idXNfcmVndWxhdG9yX29uX29mZihyZGV2LCAwKTsKK30KKworc3RydWN0IHJlZ3VsYXRvcl9vcHMgcG1idXNfcmVndWxhdG9yX29wcyA9IHsKKwkuZW5hYmxlID0gcG1idXNfcmVndWxhdG9yX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHBtYnVzX3JlZ3VsYXRvcl9kaXNhYmxlLAorCS5pc19lbmFibGVkID0gcG1idXNfcmVndWxhdG9yX2lzX2VuYWJsZWQsCit9OworRVhQT1JUX1NZTUJPTF9HUEwocG1idXNfcmVndWxhdG9yX29wcyk7CisKK3N0YXRpYyBpbnQgcG1idXNfcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCBwbWJ1c19kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGEtPmRldjsKKwljb25zdCBzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKmluZm8gPSBkYXRhLT5pbmZvOworCWNvbnN0IHN0cnVjdCBwbWJ1c19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fcmVndWxhdG9yczsgaSsrKSB7CisJCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKKworCQljb25maWcuZGV2ID0gZGV2OworCQljb25maWcuZHJpdmVyX2RhdGEgPSBkYXRhOworCisJCWlmIChwZGF0YSAmJiBwZGF0YS0+cmVnX2luaXRfZGF0YSkKKwkJCWNvbmZpZy5pbml0X2RhdGEgPSAmcGRhdGEtPnJlZ19pbml0X2RhdGFbaV07CisKKwkJcmRldiA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKGRldiwgJmluZm8tPnJlZ19kZXNjW2ldLAorCQkJCQkgICAgICAgJmNvbmZpZyk7CisJCWlmIChJU19FUlIocmRldikpIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyICVzIHJlZ3VsYXRvclxuIiwKKwkJCQlpbmZvLT5yZWdfZGVzY1tpXS5uYW1lKTsKKwkJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGludCBwbWJ1c19yZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogaW50IHBtYnVzX2RvX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCwKIAkJICAgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvKQogewpAQCAtMTc4MSw4ICsxODkyLDE1IEBACiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZVxuIik7CiAJCWdvdG8gb3V0X2tmcmVlOwogCX0KKworCXJldCA9IHBtYnVzX3JlZ3VsYXRvcl9yZWdpc3RlcihkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnJlZ2lzdGVyOworCiAJcmV0dXJuIDA7CiAKK291dF91bnJlZ2lzdGVyOgorCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiBvdXRfa2ZyZWU6CiAJa2ZyZWUoZGF0YS0+Z3JvdXAuYXR0cnMpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3RtcDQwMS5jIGIvZHJpdmVycy9od21vbi90bXA0MDEuYwppbmRleCA3ZmE2ZTdkLi45OTY2NGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3RtcDQwMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdG1wNDAxLmMKQEAgLTQ0LDkgKzQ0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NGMsIDB4NGQsIDB4NGUsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM3LCAweDQ4LCAweDQ5LCAweDRhLCAweDRjLCAweDRkLAorCTB4NGUsIDB4NGYsIEkyQ19DTElFTlRfRU5EIH07CiAKLWVudW0gY2hpcHMgeyB0bXA0MDEsIHRtcDQxMSwgdG1wNDMxLCB0bXA0MzIgfTsKK2VudW0gY2hpcHMgeyB0bXA0MDEsIHRtcDQxMSwgdG1wNDMxLCB0bXA0MzIsIHRtcDQzNSB9OwogCiAvKgogICogVGhlIFRNUDQwMSByZWdpc3RlcnMsIG5vdGUgc29tZSByZWdpc3RlcnMgaGF2ZSBkaWZmZXJlbnQgYWRkcmVzc2VzIGZvcgpAQCAtMTM2LDYgKzEzNyw3IEBACiAjZGVmaW5lIFRNUDQxMUNfREVWSUNFX0lECQkJMHgxMAogI2RlZmluZSBUTVA0MzFfREVWSUNFX0lECQkJMHgzMQogI2RlZmluZSBUTVA0MzJfREVWSUNFX0lECQkJMHgzMgorI2RlZmluZSBUTVA0MzVfREVWSUNFX0lECQkJMHgzNQogCiAvKgogICogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykKQEAgLTE0Niw2ICsxNDgsNyBAQAogCXsgInRtcDQxMSIsIHRtcDQxMSB9LAogCXsgInRtcDQzMSIsIHRtcDQzMSB9LAogCXsgInRtcDQzMiIsIHRtcDQzMiB9LAorCXsgInRtcDQzNSIsIHRtcDQzNSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0bXA0MDFfaWQpOwpAQCAtNjEzLDEwICs2MTYsMTAgQEAKICAqIEJlZ2luIG5vbiBzeXNmcyBjYWxsYmFjayBjb2RlIChha2EgUmVhbCBjb2RlKQogICovCiAKLXN0YXRpYyB2b2lkIHRtcDQwMV9pbml0X2NsaWVudChzdHJ1Y3QgdG1wNDAxX2RhdGEgKmRhdGEsCi0JCQkgICAgICAgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdG1wNDAxX2luaXRfY2xpZW50KHN0cnVjdCB0bXA0MDFfZGF0YSAqZGF0YSwKKwkJCSAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaW50IGNvbmZpZywgY29uZmlnX29yaWc7CisJaW50IGNvbmZpZywgY29uZmlnX29yaWcsIHN0YXR1cyA9IDA7CiAKIAkvKiBTZXQgdGhlIGNvbnZlcnNpb24gcmF0ZSB0byAyIEh6ICovCiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFRNUDQwMV9DT05WRVJTSU9OX1JBVEVfV1JJVEUsIDUpOwpAQCAtNjI0LDE2ICs2MjcsMTggQEAKIAogCS8qIFN0YXJ0IGNvbnZlcnNpb25zIChkaXNhYmxlIHNodXRkb3duIGlmIG5lY2Vzc2FyeSkgKi8KIAljb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBUTVA0MDFfQ09ORklHX1JFQUQpOwotCWlmIChjb25maWcgPCAwKSB7Ci0JCWRldl93YXJuKCZjbGllbnQtPmRldiwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCFcbiIpOwotCQlyZXR1cm47Ci0JfQorCWlmIChjb25maWcgPCAwKQorCQlyZXR1cm4gY29uZmlnOwogCiAJY29uZmlnX29yaWcgPSBjb25maWc7CiAJY29uZmlnICY9IH5UTVA0MDFfQ09ORklHX1NIVVRET1dOOwogCiAJaWYgKGNvbmZpZyAhPSBjb25maWdfb3JpZykKLQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFRNUDQwMV9DT05GSUdfV1JJVEUsIGNvbmZpZyk7CisJCXN0YXR1cyA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJICAgVE1QNDAxX0NPTkZJR19XUklURSwKKwkJCQkJCSAgIGNvbmZpZyk7CisKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50IHRtcDQwMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKQEAgLTY3NSwxNSArNjgwLDE4IEBACiAJCWtpbmQgPSB0bXA0MTE7CiAJCWJyZWFrOwogCWNhc2UgVE1QNDMxX0RFVklDRV9JRDoKLQkJaWYgKGNsaWVudC0+YWRkciA9PSAweDRlKQorCQlpZiAoY2xpZW50LT5hZGRyICE9IDB4NGMgJiYgY2xpZW50LT5hZGRyICE9IDB4NGQpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJa2luZCA9IHRtcDQzMTsKIAkJYnJlYWs7CiAJY2FzZSBUTVA0MzJfREVWSUNFX0lEOgotCQlpZiAoY2xpZW50LT5hZGRyID09IDB4NGUpCisJCWlmIChjbGllbnQtPmFkZHIgIT0gMHg0YyAmJiBjbGllbnQtPmFkZHIgIT0gMHg0ZCkKIAkJCXJldHVybiAtRU5PREVWOwogCQlraW5kID0gdG1wNDMyOwogCQlicmVhazsKKwljYXNlIFRNUDQzNV9ERVZJQ0VfSUQ6CisJCWtpbmQgPSB0bXA0MzU7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTcwNSwxMSArNzEzLDEzIEBACiBzdGF0aWMgaW50IHRtcDQwMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJUTVA0MDEiLCAiVE1QNDExIiwgIlRNUDQzMSIsICJUTVA0MzIiIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lc1tdID0geworCQkiVE1QNDAxIiwgIlRNUDQxMSIsICJUTVA0MzEiLCAiVE1QNDMyIiwgIlRNUDQzNSIKKwl9OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiAJc3RydWN0IHRtcDQwMV9kYXRhICpkYXRhOwotCWludCBncm91cHMgPSAwOworCWludCBncm91cHMgPSAwLCBzdGF0dXM7CiAKIAlkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCB0bXA0MDFfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKQEAgLTcyMCw3ICs3MzAsOSBAQAogCWRhdGEtPmtpbmQgPSBpZC0+ZHJpdmVyX2RhdGE7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBUTVA0MDEgY2hpcCAqLwotCXRtcDQwMV9pbml0X2NsaWVudChkYXRhLCBjbGllbnQpOworCXN0YXR1cyA9IHRtcDQwMV9pbml0X2NsaWVudChkYXRhLCBjbGllbnQpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KIAlkYXRhLT5ncm91cHNbZ3JvdXBzKytdID0gJnRtcDQwMV9ncm91cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggOTE3YzM1OC4uYjRkMTM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTg4MSw2ICs4ODEsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1kaW9sYW4tdTJjLgogCitjb25maWcgSTJDX0RMTjIKKyAgICAgICB0cmlzdGF0ZSAiRGlvbGFuIERMTi0yIFVTQiBJMkMgYWRhcHRlciIKKyAgICAgICBkZXBlbmRzIG9uIE1GRF9ETE4yCisgICAgICAgaGVscAorCSBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciBEaW9sYW4KKwkgRExOMiwgYSBVU0IgdG8gSTJDIGludGVyZmFjZS4KKworCSBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJIHdpbGwgYmUgY2FsbGVkIGkyYy1kbG4yLgorCiBjb25maWcgSTJDX1BBUlBPUlQKIAl0cmlzdGF0ZSAiUGFyYWxsZWwgcG9ydCBhZGFwdGVyIgogCWRlcGVuZHMgb24gUEFSUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IDc4ZDU2YzUuLmNkYWM3ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTg3LDYgKzg3LDcgQEAKIAogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiBvYmotJChDT05GSUdfSTJDX0RJT0xBTl9VMkMpCSs9IGkyYy1kaW9sYW4tdTJjLm8KK29iai0kKENPTkZJR19JMkNfRExOMikJCSs9IGkyYy1kbG4yLm8KIG9iai0kKENPTkZJR19JMkNfUEFSUE9SVCkJKz0gaTJjLXBhcnBvcnQubwogb2JqLSQoQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUKQkrPSBpMmMtcGFycG9ydC1saWdodC5vCiBvYmotJChDT05GSUdfSTJDX1JPQk9URlVaWl9PU0lGKQkrPSBpMmMtcm9ib3RmdXp6LW9zaWYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kbG4yLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRsbjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ZiODZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kbG4yLmMKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBEaW9sYW4gRExOLTIgVVNCLUkyQyBhZGFwdGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogRGVyaXZlZCBmcm9tOgorICogIGkyYy1kaW9sYW4tdTJjLmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBFcmljc3NvbiBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGxuMi5oPgorCisjZGVmaW5lIERMTjJfSTJDX01PRFVMRV9JRAkJMHgwMworI2RlZmluZSBETE4yX0kyQ19DTUQoY21kKQkJRExOMl9DTUQoY21kLCBETE4yX0kyQ19NT0RVTEVfSUQpCisKKy8qIEkyQyBjb21tYW5kcyAqLworI2RlZmluZSBETE4yX0kyQ19HRVRfUE9SVF9DT1VOVAkJRExOMl9JMkNfQ01EKDB4MDApCisjZGVmaW5lIERMTjJfSTJDX0VOQUJMRQkJCURMTjJfSTJDX0NNRCgweDAxKQorI2RlZmluZSBETE4yX0kyQ19ESVNBQkxFCQlETE4yX0kyQ19DTUQoMHgwMikKKyNkZWZpbmUgRExOMl9JMkNfSVNfRU5BQkxFRAkJRExOMl9JMkNfQ01EKDB4MDMpCisjZGVmaW5lIERMTjJfSTJDX1dSSVRFCQkJRExOMl9JMkNfQ01EKDB4MDYpCisjZGVmaW5lIERMTjJfSTJDX1JFQUQJCQlETE4yX0kyQ19DTUQoMHgwNykKKyNkZWZpbmUgRExOMl9JMkNfU0NBTl9ERVZJQ0VTCQlETE4yX0kyQ19DTUQoMHgwOCkKKyNkZWZpbmUgRExOMl9JMkNfUFVMTFVQX0VOQUJMRQkJRExOMl9JMkNfQ01EKDB4MDkpCisjZGVmaW5lIERMTjJfSTJDX1BVTExVUF9ESVNBQkxFCQlETE4yX0kyQ19DTUQoMHgwQSkKKyNkZWZpbmUgRExOMl9JMkNfUFVMTFVQX0lTX0VOQUJMRUQJRExOMl9JMkNfQ01EKDB4MEIpCisjZGVmaW5lIERMTjJfSTJDX1RSQU5TRkVSCQlETE4yX0kyQ19DTUQoMHgwQykKKyNkZWZpbmUgRExOMl9JMkNfU0VUX01BWF9SRVBMWV9DT1VOVAlETE4yX0kyQ19DTUQoMHgwRCkKKyNkZWZpbmUgRExOMl9JMkNfR0VUX01BWF9SRVBMWV9DT1VOVAlETE4yX0kyQ19DTUQoMHgwRSkKKworI2RlZmluZSBETE4yX0kyQ19NQVhfWEZFUl9TSVpFCQkyNTYKKyNkZWZpbmUgRExOMl9JMkNfQlVGX1NJWkUJCShETE4yX0kyQ19NQVhfWEZFUl9TSVpFICsgMTYpCisKK3N0cnVjdCBkbG4yX2kyYyB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcHRlcjsKKwl1OCBwb3J0OworCS8qCisJICogQnVmZmVyIHRvIGhvbGQgdGhlIHBhY2tldCBmb3IgcmVhZCBvciB3cml0ZSB0cmFuc2ZlcnMuIE9uZSBpcyBlbm91Z2gKKwkgKiBzaW5jZSB3ZSBjYW4ndCBoYXZlIG11bHRpcGxlIHRyYW5zZmVycyBpbiBwYXJhbGxlbCBvbiB0aGUgaTJjIGJ1cy4KKwkgKi8KKwl2b2lkICpidWY7Cit9OworCitzdGF0aWMgaW50IGRsbjJfaTJjX2VuYWJsZShzdHJ1Y3QgZGxuMl9pMmMgKmRsbjIsIGJvb2wgZW5hYmxlKQoreworCXUxNiBjbWQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwl9IHR4OworCisJdHgucG9ydCA9IGRsbjItPnBvcnQ7CisKKwlpZiAoZW5hYmxlKQorCQljbWQgPSBETE4yX0kyQ19FTkFCTEU7CisJZWxzZQorCQljbWQgPSBETE4yX0kyQ19ESVNBQkxFOworCisJcmV0dXJuIGRsbjJfdHJhbnNmZXJfdHgoZGxuMi0+cGRldiwgY21kLCAmdHgsIHNpemVvZih0eCkpOworfQorCitzdGF0aWMgaW50IGRsbjJfaTJjX3dyaXRlKHN0cnVjdCBkbG4yX2kyYyAqZGxuMiwgdTggYWRkciwKKwkJCSAgdTggKmRhdGEsIHUxNiBkYXRhX2xlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB7CisJCXU4IHBvcnQ7CisJCXU4IGFkZHI7CisJCXU4IG1lbV9hZGRyX2xlbjsKKwkJX19sZTMyIG1lbV9hZGRyOworCQlfX2xlMTYgYnVmX2xlbjsKKwkJdTggYnVmW0RMTjJfSTJDX01BWF9YRkVSX1NJWkVdOworCX0gX19wYWNrZWQgKnR4ID0gZGxuMi0+YnVmOworCXVuc2lnbmVkIGxlbjsKKworCUJVSUxEX0JVR19PTihzaXplb2YoKnR4KSA+IERMTjJfSTJDX0JVRl9TSVpFKTsKKworCXR4LT5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC0+YWRkciA9IGFkZHI7CisJdHgtPm1lbV9hZGRyX2xlbiA9IDA7CisJdHgtPm1lbV9hZGRyID0gMDsKKwl0eC0+YnVmX2xlbiA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKwltZW1jcHkodHgtPmJ1ZiwgZGF0YSwgZGF0YV9sZW4pOworCisJbGVuID0gc2l6ZW9mKCp0eCkgKyBkYXRhX2xlbiAtIERMTjJfSTJDX01BWF9YRkVSX1NJWkU7CisJcmV0ID0gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX0kyQ19XUklURSwgdHgsIGxlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZGF0YV9sZW47Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9pMmNfcmVhZChzdHJ1Y3QgZGxuMl9pMmMgKmRsbjIsIHUxNiBhZGRyLCB1OCAqZGF0YSwKKwkJCSB1MTYgZGF0YV9sZW4pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgeworCQl1OCBwb3J0OworCQl1OCBhZGRyOworCQl1OCBtZW1fYWRkcl9sZW47CisJCV9fbGUzMiBtZW1fYWRkcjsKKwkJX19sZTE2IGJ1Zl9sZW47CisJfSBfX3BhY2tlZCB0eDsKKwlzdHJ1Y3QgeworCQlfX2xlMTYgYnVmX2xlbjsKKwkJdTggYnVmW0RMTjJfSTJDX01BWF9YRkVSX1NJWkVdOworCX0gX19wYWNrZWQgKnJ4ID0gZGxuMi0+YnVmOworCXVuc2lnbmVkIHJ4X2xlbiA9IHNpemVvZigqcngpOworCisJQlVJTERfQlVHX09OKHNpemVvZigqcngpID4gRExOMl9JMkNfQlVGX1NJWkUpOworCisJdHgucG9ydCA9IGRsbjItPnBvcnQ7CisJdHguYWRkciA9IGFkZHI7CisJdHgubWVtX2FkZHJfbGVuID0gMDsKKwl0eC5tZW1fYWRkciA9IDA7CisJdHguYnVmX2xlbiA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9JMkNfUkVBRCwgJnR4LCBzaXplb2YodHgpLAorCQkJICAgIHJ4LCAmcnhfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocnhfbGVuIDwgc2l6ZW9mKHJ4LT5idWZfbGVuKSArIGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKwlpZiAobGUxNl90b19jcHUocngtPmJ1Zl9sZW4pICE9IGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCW1lbWNweShkYXRhLCByeC0+YnVmLCBkYXRhX2xlbik7CisKKwlyZXR1cm4gZGF0YV9sZW47Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJc3RydWN0IGRsbjJfaTJjICpkbG4yID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgaTJjX21zZyAqcG1zZzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGxuMi0+YWRhcHRlci5kZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaW50IHJldDsKKworCQlwbXNnID0gJm1zZ3NbaV07CisKKwkJaWYgKHBtc2ctPmxlbiA+IERMTjJfSTJDX01BWF9YRkVSX1NJWkUpIHsKKwkJCWRldl93YXJuKGRldiwgIm1heGltdW0gdHJhbnNmZXIgc2l6ZSBleGNlZWRlZFxuIik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKworCQlpZiAocG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJcmV0ID0gZGxuMl9pMmNfcmVhZChkbG4yLCBwbXNnLT5hZGRyLCBwbXNnLT5idWYsCisJCQkJCSAgICBwbXNnLT5sZW4pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKworCQkJcG1zZy0+bGVuID0gcmV0OworCQl9IGVsc2UgeworCQkJcmV0ID0gZGxuMl9pMmNfd3JpdGUoZGxuMiwgcG1zZy0+YWRkciwgcG1zZy0+YnVmLAorCQkJCQkgICAgIHBtc2ctPmxlbik7CisJCQlpZiAocmV0ICE9IHBtc2ctPmxlbikKKwkJCQlyZXR1cm4gLUVQUk9UTzsKKwkJfQorCX0KKworCXJldHVybiBudW07Cit9CisKK3N0YXRpYyB1MzIgZGxuMl9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmEpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0JZVEUgfCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfAorCQlJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfCBJMkNfRlVOQ19TTUJVU19CTE9DS19QUk9DX0NBTEwgfAorCQlJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0s7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBkbG4yX2kyY191c2JfYWxnb3JpdGhtID0geworCS5tYXN0ZXJfeGZlciA9IGRsbjJfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBkbG4yX2kyY19mdW5jLAorfTsKKworc3RhdGljIGludCBkbG4yX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IGRsbjJfaTJjICpkbG4yOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRsbjJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCisJZGxuMiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGxuMiksIEdGUF9LRVJORUwpOworCWlmICghZGxuMikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkbG4yLT5idWYgPSBkZXZtX2ttYWxsb2MoZGV2LCBETE4yX0kyQ19CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbG4yLT5idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGxuMi0+cGRldiA9IHBkZXY7CisJZGxuMi0+cG9ydCA9IHBkYXRhLT5wb3J0OworCisJLyogc2V0dXAgaTJjIGFkYXB0ZXIgZGVzY3JpcHRpb24gKi8KKwlkbG4yLT5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7CisJZGxuMi0+YWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKKwlkbG4yLT5hZGFwdGVyLmFsZ28gPSAmZGxuMl9pMmNfdXNiX2FsZ29yaXRobTsKKwlkbG4yLT5hZGFwdGVyLmRldi5wYXJlbnQgPSBkZXY7CisJaTJjX3NldF9hZGFwZGF0YSgmZGxuMi0+YWRhcHRlciwgZGxuMik7CisJc25wcmludGYoZGxuMi0+YWRhcHRlci5uYW1lLCBzaXplb2YoZGxuMi0+YWRhcHRlci5uYW1lKSwgIiVzLSVzLSVkIiwKKwkJICJkbG4yLWkyYyIsIGRldl9uYW1lKHBkZXYtPmRldi5wYXJlbnQpLCBkbG4yLT5wb3J0KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRsbjIpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgaTJjIGludGVyZmFjZSAqLworCXJldCA9IGRsbjJfaTJjX2VuYWJsZShkbG4yLCB0cnVlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGFkYXB0ZXI6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGFuZCBmaW5hbGx5IGF0dGFjaCB0byBpMmMgbGF5ZXIgKi8KKwlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJmRsbjItPmFkYXB0ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBJMkMgYWRhcHRlcjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X2Rpc2FibGU7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9kaXNhYmxlOgorCWRsbjJfaTJjX2VuYWJsZShkbG4yLCBmYWxzZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRsbjJfaTJjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkbG4yX2kyYyAqZGxuMiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaTJjX2RlbF9hZGFwdGVyKCZkbG4yLT5hZGFwdGVyKTsKKwlkbG4yX2kyY19lbmFibGUoZGxuMiwgZmFsc2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRsbjJfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUJPSAiZGxuMi1pMmMiLAorCS5wcm9iZQkJPSBkbG4yX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IGRsbjJfaTJjX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZGxuMl9pMmNfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBEaW9sYW4gRExOMiBJMkMgbWFzdGVyIGludGVyZmFjZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpkbG4yLWkyYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWRjL0tjb25maWcgYi9kcml2ZXJzL2lpby9hZGMvS2NvbmZpZwppbmRleCA4OGJkYzhmLi5iYzRlNzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9hZGMvS2NvbmZpZworKysgYi9kcml2ZXJzL2lpby9hZGMvS2NvbmZpZwpAQCAtMTI3LDYgKzEyNywxNCBAQAogCWhlbHAKIAkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBdG1lbCBBVDkxIEFEQy4KIAorY29uZmlnIEFYUDI4OF9BREMKKwl0cmlzdGF0ZSAiWC1Qb3dlcnMgQVhQMjg4IEFEQyBkcml2ZXIiCisJZGVwZW5kcyBvbiBNRkRfQVhQMjBYCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGhhdmUgc3VwcG9ydCBmb3IgWC1Qb3dlcnMgcG93ZXIgbWFuYWdlbWVudCBJQyAoUE1JQykgQURDCisJICBkZXZpY2UuIERlcGVuZGluZyBvbiBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLCB0aGlzIGdlbmVyYWwgcHVycG9zZSBBREMgY2FuCisJICBiZSB1c2VkIGZvciBzYW1wbGluZyBzZW5zb3JzIHN1Y2ggYXMgdGhlcm1hbCByZXNpc3RvcnMuCisKIGNvbmZpZyBFWFlOT1NfQURDCiAJdHJpc3RhdGUgIkV4eW5vcyBBREMgZHJpdmVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX0VYWU5PUyB8fCBBUkNIX1MzQzI0WFggfHwgQVJDSF9TM0M2NFhYIHx8IChPRiAmJiBDT01QSUxFX1RFU1QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvTWFrZWZpbGUgYi9kcml2ZXJzL2lpby9hZGMvTWFrZWZpbGUKaW5kZXggY2I4OGE2YS4uZjMwMDkzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaWlvL2FkYy9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQAogb2JqLSQoQ09ORklHX0FENzg4NykgKz0gYWQ3ODg3Lm8KIG9iai0kKENPTkZJR19BRDc5OVgpICs9IGFkNzk5eC5vCiBvYmotJChDT05GSUdfQVQ5MV9BREMpICs9IGF0OTFfYWRjLm8KK29iai0kKENPTkZJR19BWFAyODhfQURDKSArPSBheHAyODhfYWRjLm8KIG9iai0kKENPTkZJR19FWFlOT1NfQURDKSArPSBleHlub3NfYWRjLm8KIG9iai0kKENPTkZJR19MUDg3ODhfQURDKSArPSBscDg3ODhfYWRjLm8KIG9iai0kKENPTkZJR19NQVgxMDI3KSArPSBtYXgxMDI3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9heHAyODhfYWRjLmMgYi9kcml2ZXJzL2lpby9hZGMvYXhwMjg4X2FkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YmNmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lpby9hZGMvYXhwMjg4X2FkYy5jCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogYXhwMjg4X2FkYy5jIC0gWC1Qb3dlcnMgQVhQMjg4IFBNSUMgQURDIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2F4cDIweC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvaWlvL2lpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lpby9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvaWlvL2RyaXZlci5oPgorCisjZGVmaW5lIEFYUDI4OF9BRENfRU5fTUFTSwkJMHhGMQorI2RlZmluZSBBWFAyODhfQURDX1RTX1BJTl9HUEFEQwkJMHhGMgorI2RlZmluZSBBWFAyODhfQURDX1RTX1BJTl9PTgkJMHhGMworCitlbnVtIGF4cDI4OF9hZGNfaWQgeworCUFYUDI4OF9BRENfVFMsCisJQVhQMjg4X0FEQ19QTUlDLAorCUFYUDI4OF9BRENfR1AsCisJQVhQMjg4X0FEQ19CQVRUX0NIUkdfSSwKKwlBWFAyODhfQURDX0JBVFRfRElTQ0hSR19JLAorCUFYUDI4OF9BRENfQkFUVF9WLAorCUFYUDI4OF9BRENfTlJfQ0hBTiwKK307CisKK3N0cnVjdCBheHAyODhfYWRjX2luZm8geworCWludCBpcnE7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0IGF4cDI4OF9hZGNfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS5pbmRleGVkID0gMSwKKwkJLnR5cGUgPSBJSU9fVEVNUCwKKwkJLmNoYW5uZWwgPSAwLAorCQkuYWRkcmVzcyA9IEFYUDI4OF9UU19BRENfSCwKKwkJLmRhdGFzaGVldF9uYW1lID0gIlRTX1BJTiIsCisJfSwgeworCQkuaW5kZXhlZCA9IDEsCisJCS50eXBlID0gSUlPX1RFTVAsCisJCS5jaGFubmVsID0gMSwKKwkJLmFkZHJlc3MgPSBBWFAyODhfUE1JQ19BRENfSCwKKwkJLmRhdGFzaGVldF9uYW1lID0gIlBNSUNfVEVNUCIsCisJfSwgeworCQkuaW5kZXhlZCA9IDEsCisJCS50eXBlID0gSUlPX1RFTVAsCisJCS5jaGFubmVsID0gMiwKKwkJLmFkZHJlc3MgPSBBWFAyODhfR1BfQURDX0gsCisJCS5kYXRhc2hlZXRfbmFtZSA9ICJHUEFEQyIsCisJfSwgeworCQkuaW5kZXhlZCA9IDEsCisJCS50eXBlID0gSUlPX0NVUlJFTlQsCisJCS5jaGFubmVsID0gMywKKwkJLmFkZHJlc3MgPSBBWFAyMFhfQkFUVF9DSFJHX0lfSCwKKwkJLmRhdGFzaGVldF9uYW1lID0gIkJBVFRfQ0hHX0kiLAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUFJPQ0VTU0VEKSwKKwl9LCB7CisJCS5pbmRleGVkID0gMSwKKwkJLnR5cGUgPSBJSU9fQ1VSUkVOVCwKKwkJLmNoYW5uZWwgPSA0LAorCQkuYWRkcmVzcyA9IEFYUDIwWF9CQVRUX0RJU0NIUkdfSV9ILAorCQkuZGF0YXNoZWV0X25hbWUgPSAiQkFUVF9ESVNDSFJHX0kiLAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUFJPQ0VTU0VEKSwKKwl9LCB7CisJCS5pbmRleGVkID0gMSwKKwkJLnR5cGUgPSBJSU9fVk9MVEFHRSwKKwkJLmNoYW5uZWwgPSA1LAorCQkuYWRkcmVzcyA9IEFYUDIwWF9CQVRUX1ZfSCwKKwkJLmRhdGFzaGVldF9uYW1lID0gIkJBVFRfViIsCisJCS5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0NIQU5fSU5GT19QUk9DRVNTRUQpLAorCX0sCit9OworCisjZGVmaW5lIEFYUDI4OF9BRENfTUFQKF9hZGNfY2hhbm5lbF9sYWJlbCwgX2NvbnN1bWVyX2Rldl9uYW1lLAlcCisJCV9jb25zdW1lcl9jaGFubmVsKQkJCQlcCisJewkJCQkJCQlcCisJCS5hZGNfY2hhbm5lbF9sYWJlbCA9IF9hZGNfY2hhbm5lbF9sYWJlbCwJXAorCQkuY29uc3VtZXJfZGV2X25hbWUgPSBfY29uc3VtZXJfZGV2X25hbWUsCVwKKwkJLmNvbnN1bWVyX2NoYW5uZWwgPSBfY29uc3VtZXJfY2hhbm5lbCwJCVwKKwl9CisKKy8qIGZvciBjb25zdW1lciBkcml2ZXJzICovCitzdGF0aWMgc3RydWN0IGlpb19tYXAgYXhwMjg4X2FkY19kZWZhdWx0X21hcHNbXSA9IHsKKwlBWFAyODhfQURDX01BUCgiVFNfUElOIiwgImF4cDI4OC1iYXR0IiwgImF4cDI4OC1iYXR0LXRlbXAiKSwKKwlBWFAyODhfQURDX01BUCgiUE1JQ19URU1QIiwgImF4cDI4OC1wbWljIiwgImF4cDI4OC1wbWljLXRlbXAiKSwKKwlBWFAyODhfQURDX01BUCgiR1BBREMiLCAiYXhwMjg4LWdwYWRjIiwgImF4cDI4OC1zeXN0ZW0tdGVtcCIpLAorCUFYUDI4OF9BRENfTUFQKCJCQVRUX0NIR19JIiwgImF4cDI4OC1jaHJnIiwgImF4cDI4OC1jaHJnLWN1cnIiKSwKKwlBWFAyODhfQURDX01BUCgiQkFUVF9ESVNDSFJHX0kiLCAiYXhwMjg4LWNocmciLCAiYXhwMjg4LWNocmctZC1jdXJyIiksCisJQVhQMjg4X0FEQ19NQVAoIkJBVFRfViIsICJheHAyODgtYmF0dCIsICJheHAyODgtYmF0dC12b2x0IiksCisJe30sCit9OworCitzdGF0aWMgaW50IGF4cDI4OF9hZGNfcmVhZF9jaGFubmVsKGludCAqdmFsLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJc3RydWN0IHJlZ21hcCAqcmVnbWFwKQoreworCXU4IGJ1ZlsyXTsKKworCWlmIChyZWdtYXBfYnVsa19yZWFkKHJlZ21hcCwgYWRkcmVzcywgYnVmLCAyKSkKKwkJcmV0dXJuIC1FSU87CisJKnZhbCA9IChidWZbMF0gPDwgNCkgKyAoKGJ1ZlsxXSA+PiA0KSAmIDB4MEYpOworCisJcmV0dXJuIElJT19WQUxfSU5UOworfQorCitzdGF0aWMgaW50IGF4cDI4OF9hZGNfc2V0X3RzKHN0cnVjdCByZWdtYXAgKnJlZ21hcCwgdW5zaWduZWQgaW50IG1vZGUsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCS8qIGNoYW5uZWxzIG90aGVyIHRoYW4gR1BBREMgZG8gbm90IG5lZWQgdG8gc3dpdGNoIFRTIHBpbiAqLworCWlmIChhZGRyZXNzICE9IEFYUDI4OF9HUF9BRENfSCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcmVnbWFwX3dyaXRlKHJlZ21hcCwgQVhQMjg4X0FEQ19UU19QSU5fQ1RSTCwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgYXhwMjg4X2FkY19yZWFkX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQlpbnQgKnZhbCwgaW50ICp2YWwyLCBsb25nIG1hc2spCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXhwMjg4X2FkY19pbmZvICppbmZvID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKworCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCXN3aXRjaCAobWFzaykgeworCWNhc2UgSUlPX0NIQU5fSU5GT19SQVc6CisJCWlmIChheHAyODhfYWRjX3NldF90cyhpbmZvLT5yZWdtYXAsIEFYUDI4OF9BRENfVFNfUElOX0dQQURDLAorCQkJCQljaGFuLT5hZGRyZXNzKSkgeworCQkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJHUEFEQyBtb2RlXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBheHAyODhfYWRjX3JlYWRfY2hhbm5lbCh2YWwsIGNoYW4tPmFkZHJlc3MsIGluZm8tPnJlZ21hcCk7CisJCWlmIChheHAyODhfYWRjX3NldF90cyhpbmZvLT5yZWdtYXAsIEFYUDI4OF9BRENfVFNfUElOX09OLAorCQkJCQkJY2hhbi0+YWRkcmVzcykpCisJCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIlRTIHBpbiByZXN0b3JlXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBJSU9fQ0hBTl9JTkZPX1BST0NFU1NFRDoKKwkJcmV0ID0gYXhwMjg4X2FkY19yZWFkX2NoYW5uZWwodmFsLCBjaGFuLT5hZGRyZXNzLCBpbmZvLT5yZWdtYXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKwltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBheHAyODhfYWRjX3NldF9zdGF0ZShzdHJ1Y3QgcmVnbWFwICpyZWdtYXApCit7CisJLyogQURDIHNob3VsZCBiZSBhbHdheXMgZW5hYmxlZCBmb3IgaW50ZXJuYWwgRkcgdG8gZnVuY3Rpb24gKi8KKwlpZiAocmVnbWFwX3dyaXRlKHJlZ21hcCwgQVhQMjg4X0FEQ19UU19QSU5fQ1RSTCwgQVhQMjg4X0FEQ19UU19QSU5fT04pKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiByZWdtYXBfd3JpdGUocmVnbWFwLCBBWFAyMFhfQURDX0VOMSwgQVhQMjg4X0FEQ19FTl9NQVNLKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBheHAyODhfYWRjX2lpb19pbmZvID0geworCS5yZWFkX3JhdyA9ICZheHAyODhfYWRjX3JlYWRfcmF3LAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IGF4cDI4OF9hZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBheHAyODhfYWRjX2luZm8gKmluZm87CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKKwlzdHJ1Y3QgYXhwMjB4X2RldiAqYXhwMjB4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCisJaW5kaW9fZGV2ID0gZGV2bV9paW9fZGV2aWNlX2FsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaW5mbykpOworCWlmICghaW5kaW9fZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluZm8gPSBpaW9fcHJpdihpbmRpb19kZXYpOworCWluZm8tPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGluZm8tPmlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIHJlc291cmNlP1xuIik7CisJCXJldHVybiBpbmZvLT5pcnE7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZGlvX2Rldik7CisJaW5mby0+cmVnbWFwID0gYXhwMjB4LT5yZWdtYXA7CisJLyoKKwkgKiBTZXQgQURDIHRvIGVuYWJsZWQgc3RhdGUgYXQgYWxsIHRpbWUsIGluY2x1ZGluZyBzeXN0ZW0gc3VzcGVuZC4KKwkgKiBvdGhlcndpc2UgaW50ZXJuYWwgZnVlbCBnYXVnZSBmdW5jdGlvbmFsaXR5IG1heSBiZSBhZmZlY3RlZC4KKwkgKi8KKwlyZXQgPSBheHAyODhfYWRjX3NldF9zdGF0ZShheHAyMHgtPnJlZ21hcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIEFEQyBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJaW5kaW9fZGV2LT5uYW1lID0gcGRldi0+bmFtZTsKKwlpbmRpb19kZXYtPmNoYW5uZWxzID0gYXhwMjg4X2FkY19jaGFubmVsczsKKwlpbmRpb19kZXYtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUoYXhwMjg4X2FkY19jaGFubmVscyk7CisJaW5kaW9fZGV2LT5pbmZvID0gJmF4cDI4OF9hZGNfaWlvX2luZm87CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCXJldCA9IGlpb19tYXBfYXJyYXlfcmVnaXN0ZXIoaW5kaW9fZGV2LCBheHAyODhfYWRjX2RlZmF1bHRfbWFwcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIGlpbyBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9hcnJheV91bnJlZ2lzdGVyOworCX0KKwlyZXR1cm4gMDsKKworZXJyX2FycmF5X3VucmVnaXN0ZXI6CisJaWlvX21hcF9hcnJheV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF4cDI4OF9hZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJaWlvX21hcF9hcnJheV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgYXhwMjg4X2FkY19pZF90YWJsZVtdID0geworCXsgLm5hbWUgPSAiYXhwMjg4X2FkYyIgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF4cDI4OF9hZGNfZHJpdmVyID0geworCS5wcm9iZSA9IGF4cDI4OF9hZGNfcHJvYmUsCisJLnJlbW92ZSA9IGF4cDI4OF9hZGNfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGF4cDI4OF9hZGNfaWRfdGFibGUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYXhwMjg4X2FkYyIsCisJfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIGF4cDI4OF9hZGNfaWRfdGFibGUpOworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF4cDI4OF9hZGNfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiSmFjb2IgUGFuIDxqYWNvYi5qdW4ucGFuQGxpbnV4LmludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWC1Qb3dlcnMgQVhQMjg4IEFEQyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCmluZGV4IGY0MmFiMTQuLjIwY2E2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwpAQCAtOTExLDcgKzkxMSw3IEBACiAJLm1vZHVsZSAgICAgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKIAkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJpU0NTSSBJbml0aWF0b3Igb3ZlciBpU0VSIiwKIAkucXVldWVjb21tYW5kICAgICAgICAgICA9IGlzY3NpX3F1ZXVlY29tbWFuZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuc2dfdGFibGVzaXplICAgICAgICAgICA9IElTQ1NJX0lTRVJfU0dfVEFCTEVTSVpFLAogCS5tYXhfc2VjdG9ycwkJPSAxMDI0LAogCS5jbWRfcGVyX2x1biAgICAgICAgICAgID0gSVNFUl9ERUZfQ01EX1BFUl9MVU4sCkBAIC05MjIsNiArOTIyLDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcgICAgICAgICA9IERJU0FCTEVfQ0xVU1RFUklORywKIAkucHJvY19uYW1lICAgICAgICAgICAgICA9ICJpc2NzaV9pc2VyIiwKIAkudGhpc19pZCAgICAgICAgICAgICAgICA9IC0xLAorCS50cmFja19xdWV1ZV9kZXB0aAk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBpc2NzaV9pc2VyX3RyYW5zcG9ydCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKaW5kZXggNjJkMmExOC4uNTQ2MTkyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKQEAgLTEyMywxMCArMTIzLDE1IEBACiAJCSAiIGlmIGZhc3RfaW9fZmFpbF90bW8gaGFzIG5vdCBiZWVuIHNldC4gXCJvZmZcIiBtZWFucyB0aGF0IgogCQkgIiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBjaF9jb3VudDsKK21vZHVsZV9wYXJhbShjaF9jb3VudCwgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNoX2NvdW50LAorCQkgIk51bWJlciBvZiBSRE1BIGNoYW5uZWxzIHRvIHVzZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGFuIFNSUCB0YXJnZXQuIFVzaW5nIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBpZiB0aGUgSENBIHN1cHBvcnRzIG11bHRpcGxlIGNvbXBsZXRpb24gdmVjdG9ycy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIG1pbmltdW0gb2YgZm91ciB0aW1lcyB0aGUgbnVtYmVyIG9mIG9ubGluZSBDUFUgc29ja2V0cyBhbmQgdGhlIG51bWJlciBvZiBjb21wbGV0aW9uIHZlY3RvcnMgc3VwcG9ydGVkIGJ5IHRoZSBIQ0EuIik7CisKIHN0YXRpYyB2b2lkIHNycF9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgdm9pZCBzcnBfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIHZvaWQgc3JwX3JlY3ZfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICp0YXJnZXRfcHRyKTsKLXN0YXRpYyB2b2lkIHNycF9zZW5kX2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqdGFyZ2V0X3B0cik7CitzdGF0aWMgdm9pZCBzcnBfcmVjdl9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNoX3B0cik7CitzdGF0aWMgdm9pZCBzcnBfc2VuZF9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNoX3B0cik7CiBzdGF0aWMgaW50IHNycF9jbV9oYW5kbGVyKHN0cnVjdCBpYl9jbV9pZCAqY21faWQsIHN0cnVjdCBpYl9jbV9ldmVudCAqZXZlbnQpOwogCiBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICppYl9zcnBfdHJhbnNwb3J0X3RlbXBsYXRlOwpAQCAtMjYyLDcgKzI2Nyw3IEBACiAKIAlyZXQgPSBpYl9maW5kX3BrZXkodGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2LAogCQkJICAgdGFyZ2V0LT5zcnBfaG9zdC0+cG9ydCwKLQkJCSAgIGJlMTZfdG9fY3B1KHRhcmdldC0+cGF0aC5wa2V5KSwKKwkJCSAgIGJlMTZfdG9fY3B1KHRhcmdldC0+cGtleSksCiAJCQkgICAmYXR0ci0+cGtleV9pbmRleCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CkBAIC0yODMsMTggKzI4OCwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX25ld19jbV9pZChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCitzdGF0aWMgaW50IHNycF9uZXdfY21faWQoc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBpYl9jbV9pZCAqbmV3X2NtX2lkOwogCiAJbmV3X2NtX2lkID0gaWJfY3JlYXRlX2NtX2lkKHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldiwKLQkJCQkgICAgc3JwX2NtX2hhbmRsZXIsIHRhcmdldCk7CisJCQkJICAgIHNycF9jbV9oYW5kbGVyLCBjaCk7CiAJaWYgKElTX0VSUihuZXdfY21faWQpKQogCQlyZXR1cm4gUFRSX0VSUihuZXdfY21faWQpOwogCi0JaWYgKHRhcmdldC0+Y21faWQpCi0JCWliX2Rlc3Ryb3lfY21faWQodGFyZ2V0LT5jbV9pZCk7Ci0JdGFyZ2V0LT5jbV9pZCA9IG5ld19jbV9pZDsKKwlpZiAoY2gtPmNtX2lkKQorCQlpYl9kZXN0cm95X2NtX2lkKGNoLT5jbV9pZCk7CisJY2gtPmNtX2lkID0gbmV3X2NtX2lkOworCWNoLT5wYXRoLnNnaWQgPSB0YXJnZXQtPnNnaWQ7CisJY2gtPnBhdGguZGdpZCA9IHRhcmdldC0+b3JpZ19kZ2lkOworCWNoLT5wYXRoLnBrZXkgPSB0YXJnZXQtPnBrZXk7CisJY2gtPnBhdGguc2VydmljZV9pZCA9IHRhcmdldC0+c2VydmljZV9pZDsKIAogCXJldHVybiAwOwogfQpAQCAtNDQzLDggKzQ1Myw0NCBAQAogCQkJCSAgZGV2LT5tYXhfcGFnZXNfcGVyX21yKTsKIH0KIAotc3RhdGljIGludCBzcnBfY3JlYXRlX3RhcmdldF9pYihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCisvKioKKyAqIHNycF9kZXN0cm95X3FwKCkgLSBkZXN0cm95IGFuIFJETUEgcXVldWUgcGFpcgorICogQGNoOiBTUlAgUkRNQSBjaGFubmVsLgorICoKKyAqIENoYW5nZSBhIHF1ZXVlIHBhaXIgaW50byB0aGUgZXJyb3Igc3RhdGUgYW5kIHdhaXQgdW50aWwgYWxsIHJlY2VpdmUKKyAqIGNvbXBsZXRpb25zIGhhdmUgYmVlbiBwcm9jZXNzZWQgYmVmb3JlIGRlc3Ryb3lpbmcgaXQuIFRoaXMgYXZvaWRzIHRoYXQKKyAqIHRoZSByZWNlaXZlIGNvbXBsZXRpb24gaGFuZGxlciBjYW4gYWNjZXNzIHRoZSBxdWV1ZSBwYWlyIHdoaWxlIGl0IGlzCisgKiBiZWluZyBkZXN0cm95ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHNycF9kZXN0cm95X3FwKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKKwlzdGF0aWMgc3RydWN0IGliX3FwX2F0dHIgYXR0ciA9IHsgLnFwX3N0YXRlID0gSUJfUVBTX0VSUiB9OworCXN0YXRpYyBzdHJ1Y3QgaWJfcmVjdl93ciB3ciA9IHsgLndyX2lkID0gU1JQX0xBU1RfV1JfSUQgfTsKKwlzdHJ1Y3QgaWJfcmVjdl93ciAqYmFkX3dyOworCWludCByZXQ7CisKKwkvKiBEZXN0cm95aW5nIGEgUVAgYW5kIHJldXNpbmcgY2gtPmRvbmUgaXMgb25seSBzYWZlIGlmIG5vdCBjb25uZWN0ZWQgKi8KKwlXQVJOX09OX09OQ0UodGFyZ2V0LT5jb25uZWN0ZWQpOworCisJcmV0ID0gaWJfbW9kaWZ5X3FwKGNoLT5xcCwgJmF0dHIsIElCX1FQX1NUQVRFKTsKKwlXQVJOX09OQ0UocmV0LCAiaWJfY21faW5pdF9xcF9hdHRyKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpbml0X2NvbXBsZXRpb24oJmNoLT5kb25lKTsKKwlyZXQgPSBpYl9wb3N0X3JlY3YoY2gtPnFwLCAmd3IsICZiYWRfd3IpOworCVdBUk5fT05DRShyZXQsICJpYl9wb3N0X3JlY3YoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwlpZiAocmV0ID09IDApCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNoLT5kb25lKTsKKworb3V0OgorCWliX2Rlc3Ryb3lfcXAoY2gtPnFwKTsKK30KKworc3RhdGljIGludCBzcnBfY3JlYXRlX2NoX2liKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCit7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2RldjsKIAlzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppbml0X2F0dHI7CiAJc3RydWN0IGliX2NxICpyZWN2X2NxLCAqc2VuZF9jcTsKQEAgLTQ1OCwxNSArNTA0LDE2IEBACiAJaWYgKCFpbml0X2F0dHIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmVjdl9jcSA9IGliX2NyZWF0ZV9jcShkZXYtPmRldiwgc3JwX3JlY3ZfY29tcGxldGlvbiwgTlVMTCwgdGFyZ2V0LAotCQkJICAgICAgIHRhcmdldC0+cXVldWVfc2l6ZSwgdGFyZ2V0LT5jb21wX3ZlY3Rvcik7CisJLyogKyAxIGZvciBTUlBfTEFTVF9XUl9JRCAqLworCXJlY3ZfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LT5kZXYsIHNycF9yZWN2X2NvbXBsZXRpb24sIE5VTEwsIGNoLAorCQkJICAgICAgIHRhcmdldC0+cXVldWVfc2l6ZSArIDEsIGNoLT5jb21wX3ZlY3Rvcik7CiAJaWYgKElTX0VSUihyZWN2X2NxKSkgewogCQlyZXQgPSBQVFJfRVJSKHJlY3ZfY3EpOwogCQlnb3RvIGVycjsKIAl9CiAKLQlzZW5kX2NxID0gaWJfY3JlYXRlX2NxKGRldi0+ZGV2LCBzcnBfc2VuZF9jb21wbGV0aW9uLCBOVUxMLCB0YXJnZXQsCi0JCQkgICAgICAgbSAqIHRhcmdldC0+cXVldWVfc2l6ZSwgdGFyZ2V0LT5jb21wX3ZlY3Rvcik7CisJc2VuZF9jcSA9IGliX2NyZWF0ZV9jcShkZXYtPmRldiwgc3JwX3NlbmRfY29tcGxldGlvbiwgTlVMTCwgY2gsCisJCQkgICAgICAgbSAqIHRhcmdldC0+cXVldWVfc2l6ZSwgY2gtPmNvbXBfdmVjdG9yKTsKIAlpZiAoSVNfRVJSKHNlbmRfY3EpKSB7CiAJCXJldCA9IFBUUl9FUlIoc2VuZF9jcSk7CiAJCWdvdG8gZXJyX3JlY3ZfY3E7CkBAIC00NzYsNyArNTIzLDcgQEAKIAogCWluaXRfYXR0ci0+ZXZlbnRfaGFuZGxlciAgICAgICA9IHNycF9xcF9ldmVudDsKIAlpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciAgICAgPSBtICogdGFyZ2V0LT5xdWV1ZV9zaXplOwotCWluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3dyICAgICA9IHRhcmdldC0+cXVldWVfc2l6ZTsKKwlpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93ciAgICAgPSB0YXJnZXQtPnF1ZXVlX3NpemUgKyAxOwogCWluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSAgICA9IDE7CiAJaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlICAgID0gMTsKIAlpbml0X2F0dHItPnNxX3NpZ190eXBlICAgICAgICAgPSBJQl9TSUdOQUxfUkVRX1dSOwpAQCAtNTAyLDkgKzU0OSw5IEBACiAJCQkJICAgICAiRlIgcG9vbCBhbGxvY2F0aW9uIGZhaWxlZCAoJWQpXG4iLCByZXQpOwogCQkJZ290byBlcnJfcXA7CiAJCX0KLQkJaWYgKHRhcmdldC0+ZnJfcG9vbCkKLQkJCXNycF9kZXN0cm95X2ZyX3Bvb2wodGFyZ2V0LT5mcl9wb29sKTsKLQkJdGFyZ2V0LT5mcl9wb29sID0gZnJfcG9vbDsKKwkJaWYgKGNoLT5mcl9wb29sKQorCQkJc3JwX2Rlc3Ryb3lfZnJfcG9vbChjaC0+ZnJfcG9vbCk7CisJCWNoLT5mcl9wb29sID0gZnJfcG9vbDsKIAl9IGVsc2UgaWYgKCFkZXYtPnVzZV9mYXN0X3JlZyAmJiBkZXYtPmhhc19mbXIpIHsKIAkJZm1yX3Bvb2wgPSBzcnBfYWxsb2NfZm1yX3Bvb2wodGFyZ2V0KTsKIAkJaWYgKElTX0VSUihmbXJfcG9vbCkpIHsKQEAgLTUxMywyMSArNTYwLDIxIEBACiAJCQkJICAgICAiRk1SIHBvb2wgYWxsb2NhdGlvbiBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKIAkJCWdvdG8gZXJyX3FwOwogCQl9Ci0JCWlmICh0YXJnZXQtPmZtcl9wb29sKQotCQkJaWJfZGVzdHJveV9mbXJfcG9vbCh0YXJnZXQtPmZtcl9wb29sKTsKLQkJdGFyZ2V0LT5mbXJfcG9vbCA9IGZtcl9wb29sOworCQlpZiAoY2gtPmZtcl9wb29sKQorCQkJaWJfZGVzdHJveV9mbXJfcG9vbChjaC0+Zm1yX3Bvb2wpOworCQljaC0+Zm1yX3Bvb2wgPSBmbXJfcG9vbDsKIAl9CiAKLQlpZiAodGFyZ2V0LT5xcCkKLQkJaWJfZGVzdHJveV9xcCh0YXJnZXQtPnFwKTsKLQlpZiAodGFyZ2V0LT5yZWN2X2NxKQotCQlpYl9kZXN0cm95X2NxKHRhcmdldC0+cmVjdl9jcSk7Ci0JaWYgKHRhcmdldC0+c2VuZF9jcSkKLQkJaWJfZGVzdHJveV9jcSh0YXJnZXQtPnNlbmRfY3EpOworCWlmIChjaC0+cXApCisJCXNycF9kZXN0cm95X3FwKGNoKTsKKwlpZiAoY2gtPnJlY3ZfY3EpCisJCWliX2Rlc3Ryb3lfY3EoY2gtPnJlY3ZfY3EpOworCWlmIChjaC0+c2VuZF9jcSkKKwkJaWJfZGVzdHJveV9jcShjaC0+c2VuZF9jcSk7CiAKLQl0YXJnZXQtPnFwID0gcXA7Ci0JdGFyZ2V0LT5yZWN2X2NxID0gcmVjdl9jcTsKLQl0YXJnZXQtPnNlbmRfY3EgPSBzZW5kX2NxOworCWNoLT5xcCA9IHFwOworCWNoLT5yZWN2X2NxID0gcmVjdl9jcTsKKwljaC0+c2VuZF9jcSA9IHNlbmRfY3E7CiAKIAlrZnJlZShpbml0X2F0dHIpOwogCXJldHVybiAwOwpAQCAtNTQ4LDkzICs1OTUsMTE3IEBACiAKIC8qCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgd2l0aG91dCBzcnBfYWxsb2NfaXVfYnVmcygpIGhhdmluZyBiZWVuCi0gKiBpbnZva2VkLiBIZW5jZSB0aGUgdGFyZ2V0LT5bcnRdeF9yaW5nIGNoZWNrcy4KKyAqIGludm9rZWQuIEhlbmNlIHRoZSBjaC0+W3J0XXhfcmluZyBjaGVja3MuCiAgKi8KLXN0YXRpYyB2b2lkIHNycF9mcmVlX3RhcmdldF9pYihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCitzdGF0aWMgdm9pZCBzcnBfZnJlZV9jaF9pYihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCisJCQkgICBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogewogCXN0cnVjdCBzcnBfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2OwogCWludCBpOwogCisJaWYgKCFjaC0+dGFyZ2V0KQorCQlyZXR1cm47CisKKwlpZiAoY2gtPmNtX2lkKSB7CisJCWliX2Rlc3Ryb3lfY21faWQoY2gtPmNtX2lkKTsKKwkJY2gtPmNtX2lkID0gTlVMTDsKKwl9CisKKwkvKiBJZiBzcnBfbmV3X2NtX2lkKCkgc3VjY2VlZGVkIGJ1dCBzcnBfY3JlYXRlX2NoX2liKCkgbm90LCByZXR1cm4uICovCisJaWYgKCFjaC0+cXApCisJCXJldHVybjsKKwogCWlmIChkZXYtPnVzZV9mYXN0X3JlZykgewotCQlpZiAodGFyZ2V0LT5mcl9wb29sKQotCQkJc3JwX2Rlc3Ryb3lfZnJfcG9vbCh0YXJnZXQtPmZyX3Bvb2wpOworCQlpZiAoY2gtPmZyX3Bvb2wpCisJCQlzcnBfZGVzdHJveV9mcl9wb29sKGNoLT5mcl9wb29sKTsKIAl9IGVsc2UgewotCQlpZiAodGFyZ2V0LT5mbXJfcG9vbCkKLQkJCWliX2Rlc3Ryb3lfZm1yX3Bvb2wodGFyZ2V0LT5mbXJfcG9vbCk7CisJCWlmIChjaC0+Zm1yX3Bvb2wpCisJCQlpYl9kZXN0cm95X2Ztcl9wb29sKGNoLT5mbXJfcG9vbCk7CiAJfQotCWliX2Rlc3Ryb3lfcXAodGFyZ2V0LT5xcCk7Ci0JaWJfZGVzdHJveV9jcSh0YXJnZXQtPnNlbmRfY3EpOwotCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5yZWN2X2NxKTsKKwlzcnBfZGVzdHJveV9xcChjaCk7CisJaWJfZGVzdHJveV9jcShjaC0+c2VuZF9jcSk7CisJaWJfZGVzdHJveV9jcShjaC0+cmVjdl9jcSk7CiAKLQl0YXJnZXQtPnFwID0gTlVMTDsKLQl0YXJnZXQtPnNlbmRfY3EgPSB0YXJnZXQtPnJlY3ZfY3EgPSBOVUxMOworCS8qCisJICogQXZvaWQgdGhhdCB0aGUgU0NTSSBlcnJvciBoYW5kbGVyIHRyaWVzIHRvIHVzZSB0aGlzIGNoYW5uZWwgYWZ0ZXIKKwkgKiBpdCBoYXMgYmVlbiBmcmVlZC4gVGhlIFNDU0kgZXJyb3IgaGFuZGxlciBjYW4gbmFtZWx5IGNvbnRpbnVlCisJICogdHJ5aW5nIHRvIHBlcmZvcm0gcmVjb3ZlcnkgYWN0aW9ucyBhZnRlciBzY3NpX3JlbW92ZV9ob3N0KCkKKwkgKiByZXR1cm5lZC4KKwkgKi8KKwljaC0+dGFyZ2V0ID0gTlVMTDsKIAotCWlmICh0YXJnZXQtPnJ4X3JpbmcpIHsKKwljaC0+cXAgPSBOVUxMOworCWNoLT5zZW5kX2NxID0gY2gtPnJlY3ZfY3EgPSBOVUxMOworCisJaWYgKGNoLT5yeF9yaW5nKSB7CiAJCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnF1ZXVlX3NpemU7ICsraSkKLQkJCXNycF9mcmVlX2l1KHRhcmdldC0+c3JwX2hvc3QsIHRhcmdldC0+cnhfcmluZ1tpXSk7Ci0JCWtmcmVlKHRhcmdldC0+cnhfcmluZyk7Ci0JCXRhcmdldC0+cnhfcmluZyA9IE5VTEw7CisJCQlzcnBfZnJlZV9pdSh0YXJnZXQtPnNycF9ob3N0LCBjaC0+cnhfcmluZ1tpXSk7CisJCWtmcmVlKGNoLT5yeF9yaW5nKTsKKwkJY2gtPnJ4X3JpbmcgPSBOVUxMOwogCX0KLQlpZiAodGFyZ2V0LT50eF9yaW5nKSB7CisJaWYgKGNoLT50eF9yaW5nKSB7CiAJCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnF1ZXVlX3NpemU7ICsraSkKLQkJCXNycF9mcmVlX2l1KHRhcmdldC0+c3JwX2hvc3QsIHRhcmdldC0+dHhfcmluZ1tpXSk7Ci0JCWtmcmVlKHRhcmdldC0+dHhfcmluZyk7Ci0JCXRhcmdldC0+dHhfcmluZyA9IE5VTEw7CisJCQlzcnBfZnJlZV9pdSh0YXJnZXQtPnNycF9ob3N0LCBjaC0+dHhfcmluZ1tpXSk7CisJCWtmcmVlKGNoLT50eF9yaW5nKTsKKwkJY2gtPnR4X3JpbmcgPSBOVUxMOwogCX0KIH0KIAogc3RhdGljIHZvaWQgc3JwX3BhdGhfcmVjX2NvbXBsZXRpb24oaW50IHN0YXR1cywKIAkJCQkgICAgc3RydWN0IGliX3NhX3BhdGhfcmVjICpwYXRocmVjLAotCQkJCSAgICB2b2lkICp0YXJnZXRfcHRyKQorCQkJCSAgICB2b2lkICpjaF9wdHIpCiB7Ci0Jc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gdGFyZ2V0X3B0cjsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoID0gY2hfcHRyOworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAKLQl0YXJnZXQtPnN0YXR1cyA9IHN0YXR1czsKKwljaC0+c3RhdHVzID0gc3RhdHVzOwogCWlmIChzdGF0dXMpCiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCiAJCQkgICAgIFBGWCAiR290IGZhaWxlZCBwYXRoIHJlYyBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAJZWxzZQotCQl0YXJnZXQtPnBhdGggPSAqcGF0aHJlYzsKLQljb21wbGV0ZSgmdGFyZ2V0LT5kb25lKTsKKwkJY2gtPnBhdGggPSAqcGF0aHJlYzsKKwljb21wbGV0ZSgmY2gtPmRvbmUpOwogfQogCi1zdGF0aWMgaW50IHNycF9sb29rdXBfcGF0aChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCitzdGF0aWMgaW50IHNycF9sb29rdXBfcGF0aChzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJaW50IHJldDsKIAotCXRhcmdldC0+cGF0aC5udW1iX3BhdGggPSAxOworCWNoLT5wYXRoLm51bWJfcGF0aCA9IDE7CiAKLQlpbml0X2NvbXBsZXRpb24oJnRhcmdldC0+ZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZjaC0+ZG9uZSk7CiAKLQl0YXJnZXQtPnBhdGhfcXVlcnlfaWQgPSBpYl9zYV9wYXRoX3JlY19nZXQoJnNycF9zYV9jbGllbnQsCi0JCQkJCQkgICB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYsCi0JCQkJCQkgICB0YXJnZXQtPnNycF9ob3N0LT5wb3J0LAotCQkJCQkJICAgJnRhcmdldC0+cGF0aCwKLQkJCQkJCSAgIElCX1NBX1BBVEhfUkVDX1NFUlZJQ0VfSUQJfAotCQkJCQkJICAgSUJfU0FfUEFUSF9SRUNfREdJRAkJfAotCQkJCQkJICAgSUJfU0FfUEFUSF9SRUNfU0dJRAkJfAotCQkJCQkJICAgSUJfU0FfUEFUSF9SRUNfTlVNQl9QQVRICXwKLQkJCQkJCSAgIElCX1NBX1BBVEhfUkVDX1BLRVksCi0JCQkJCQkgICBTUlBfUEFUSF9SRUNfVElNRU9VVF9NUywKLQkJCQkJCSAgIEdGUF9LRVJORUwsCi0JCQkJCQkgICBzcnBfcGF0aF9yZWNfY29tcGxldGlvbiwKLQkJCQkJCSAgIHRhcmdldCwgJnRhcmdldC0+cGF0aF9xdWVyeSk7Ci0JaWYgKHRhcmdldC0+cGF0aF9xdWVyeV9pZCA8IDApCi0JCXJldHVybiB0YXJnZXQtPnBhdGhfcXVlcnlfaWQ7CisJY2gtPnBhdGhfcXVlcnlfaWQgPSBpYl9zYV9wYXRoX3JlY19nZXQoJnNycF9zYV9jbGllbnQsCisJCQkJCSAgICAgICB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYsCisJCQkJCSAgICAgICB0YXJnZXQtPnNycF9ob3N0LT5wb3J0LAorCQkJCQkgICAgICAgJmNoLT5wYXRoLAorCQkJCQkgICAgICAgSUJfU0FfUEFUSF9SRUNfU0VSVklDRV9JRCB8CisJCQkJCSAgICAgICBJQl9TQV9QQVRIX1JFQ19ER0lECSB8CisJCQkJCSAgICAgICBJQl9TQV9QQVRIX1JFQ19TR0lECSB8CisJCQkJCSAgICAgICBJQl9TQV9QQVRIX1JFQ19OVU1CX1BBVEgJIHwKKwkJCQkJICAgICAgIElCX1NBX1BBVEhfUkVDX1BLRVksCisJCQkJCSAgICAgICBTUlBfUEFUSF9SRUNfVElNRU9VVF9NUywKKwkJCQkJICAgICAgIEdGUF9LRVJORUwsCisJCQkJCSAgICAgICBzcnBfcGF0aF9yZWNfY29tcGxldGlvbiwKKwkJCQkJICAgICAgIGNoLCAmY2gtPnBhdGhfcXVlcnkpOworCWlmIChjaC0+cGF0aF9xdWVyeV9pZCA8IDApCisJCXJldHVybiBjaC0+cGF0aF9xdWVyeV9pZDsKIAotCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmdGFyZ2V0LT5kb25lKTsKKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmNoLT5kb25lKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICh0YXJnZXQtPnN0YXR1cyA8IDApCisJaWYgKGNoLT5zdGF0dXMgPCAwKQogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCB0YXJnZXQtPnNjc2lfaG9zdCwKIAkJCSAgICAgUEZYICJQYXRoIHJlY29yZCBxdWVyeSBmYWlsZWRcbiIpOwogCi0JcmV0dXJuIHRhcmdldC0+c3RhdHVzOworCXJldHVybiBjaC0+c3RhdHVzOwogfQogCi1zdGF0aWMgaW50IHNycF9zZW5kX3JlcShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCitzdGF0aWMgaW50IHNycF9zZW5kX3JlcShzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCBib29sIG11bHRpY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgaWJfY21fcmVxX3BhcmFtIHBhcmFtOwogCQlzdHJ1Y3Qgc3JwX2xvZ2luX3JlcSAgIHByaXY7CkBAIC02NDUsMTEgKzcxNiwxMSBAQAogCWlmICghcmVxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJlcS0+cGFyYW0ucHJpbWFyeV9wYXRoIAkgICAgICA9ICZ0YXJnZXQtPnBhdGg7CisJcmVxLT5wYXJhbS5wcmltYXJ5X3BhdGgJCSAgICAgID0gJmNoLT5wYXRoOwogCXJlcS0+cGFyYW0uYWx0ZXJuYXRlX3BhdGggCSAgICAgID0gTlVMTDsKIAlyZXEtPnBhcmFtLnNlcnZpY2VfaWQgCQkgICAgICA9IHRhcmdldC0+c2VydmljZV9pZDsKLQlyZXEtPnBhcmFtLnFwX251bSAJCSAgICAgID0gdGFyZ2V0LT5xcC0+cXBfbnVtOwotCXJlcS0+cGFyYW0ucXBfdHlwZSAJCSAgICAgID0gdGFyZ2V0LT5xcC0+cXBfdHlwZTsKKwlyZXEtPnBhcmFtLnFwX251bQkJICAgICAgPSBjaC0+cXAtPnFwX251bTsKKwlyZXEtPnBhcmFtLnFwX3R5cGUJCSAgICAgID0gY2gtPnFwLT5xcF90eXBlOwogCXJlcS0+cGFyYW0ucHJpdmF0ZV9kYXRhIAkgICAgICA9ICZyZXEtPnByaXY7CiAJcmVxLT5wYXJhbS5wcml2YXRlX2RhdGFfbGVuIAkgICAgICA9IHNpemVvZiByZXEtPnByaXY7CiAJcmVxLT5wYXJhbS5mbG93X2NvbnRyb2wgCSAgICAgID0gMTsKQEAgLTY3Myw2ICs3NDQsOCBAQAogCXJlcS0+cHJpdi5yZXFfaXRfaXVfbGVuID0gY3B1X3RvX2JlMzIodGFyZ2V0LT5tYXhfaXVfbGVuKTsKIAlyZXEtPnByaXYucmVxX2J1Zl9mbXQgCT0gY3B1X3RvX2JlMTYoU1JQX0JVRl9GT1JNQVRfRElSRUNUIHwKIAkJCQkJICAgICAgU1JQX0JVRl9GT1JNQVRfSU5ESVJFQ1QpOworCXJlcS0+cHJpdi5yZXFfZmxhZ3MJPSAobXVsdGljaCA/IFNSUF9NVUxUSUNIQU5fTVVMVEkgOgorCQkJCSAgIFNSUF9NVUxUSUNIQU5fU0lOR0xFKTsKIAkvKgogCSAqIEluIHRoZSBwdWJsaXNoZWQgU1JQIHNwZWNpZmljYXRpb24gKGRyYWZ0IHJldi4gMTZhKSwgdGhlCiAJICogcG9ydCBpZGVudGlmaWVyIGZvcm1hdCBpcyA4IGJ5dGVzIG9mIElEIGV4dGVuc2lvbiBmb2xsb3dlZApAQCAtNjg0LDcgKzc1Nyw3IEBACiAJICovCiAJaWYgKHRhcmdldC0+aW9fY2xhc3MgPT0gU1JQX1JFVjEwX0lCX0lPX0NMQVNTKSB7CiAJCW1lbWNweShyZXEtPnByaXYuaW5pdGlhdG9yX3BvcnRfaWQsCi0JCSAgICAgICAmdGFyZ2V0LT5wYXRoLnNnaWQuZ2xvYmFsLmludGVyZmFjZV9pZCwgOCk7CisJCSAgICAgICAmdGFyZ2V0LT5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQsIDgpOwogCQltZW1jcHkocmVxLT5wcml2LmluaXRpYXRvcl9wb3J0X2lkICsgOCwKIAkJICAgICAgICZ0YXJnZXQtPmluaXRpYXRvcl9leHQsIDgpOwogCQltZW1jcHkocmVxLT5wcml2LnRhcmdldF9wb3J0X2lkLCAgICAgJnRhcmdldC0+aW9jX2d1aWQsIDgpOwpAQCAtNjkzLDcgKzc2Niw3IEBACiAJCW1lbWNweShyZXEtPnByaXYuaW5pdGlhdG9yX3BvcnRfaWQsCiAJCSAgICAgICAmdGFyZ2V0LT5pbml0aWF0b3JfZXh0LCA4KTsKIAkJbWVtY3B5KHJlcS0+cHJpdi5pbml0aWF0b3JfcG9ydF9pZCArIDgsCi0JCSAgICAgICAmdGFyZ2V0LT5wYXRoLnNnaWQuZ2xvYmFsLmludGVyZmFjZV9pZCwgOCk7CisJCSAgICAgICAmdGFyZ2V0LT5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQsIDgpOwogCQltZW1jcHkocmVxLT5wcml2LnRhcmdldF9wb3J0X2lkLCAgICAgJnRhcmdldC0+aWRfZXh0LCA4KTsKIAkJbWVtY3B5KHJlcS0+cHJpdi50YXJnZXRfcG9ydF9pZCArIDgsICZ0YXJnZXQtPmlvY19ndWlkLCA4KTsKIAl9CkBAIC03MTMsNyArNzg2LDcgQEAKIAkJICAgICAgICZ0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYtPm5vZGVfZ3VpZCwgOCk7CiAJfQogCi0Jc3RhdHVzID0gaWJfc2VuZF9jbV9yZXEodGFyZ2V0LT5jbV9pZCwgJnJlcS0+cGFyYW0pOworCXN0YXR1cyA9IGliX3NlbmRfY21fcmVxKGNoLT5jbV9pZCwgJnJlcS0+cGFyYW0pOwogCiAJa2ZyZWUocmVxKTsKIApAQCAtNzU0LDI4ICs4MjcsMzUgQEAKIAogc3RhdGljIHZvaWQgc3JwX2Rpc2Nvbm5lY3RfdGFyZ2V0KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKIHsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoOworCWludCBpOworCiAJaWYgKHNycF9jaGFuZ2VfY29ubl9zdGF0ZSh0YXJnZXQsIGZhbHNlKSkgewogCQkvKiBYWFggc2hvdWxkIHNlbmQgU1JQX0lfTE9HT1VUIHJlcXVlc3QgKi8KIAotCQlpZiAoaWJfc2VuZF9jbV9kcmVxKHRhcmdldC0+Y21faWQsIE5VTEwsIDApKSB7Ci0JCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgdGFyZ2V0LT5zY3NpX2hvc3QsCi0JCQkJICAgICBQRlggIlNlbmRpbmcgQ00gRFJFUSBmYWlsZWRcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCQkJaWYgKGNoLT5jbV9pZCAmJiBpYl9zZW5kX2NtX2RyZXEoY2gtPmNtX2lkLCBOVUxMLCAwKSkgeworCQkJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCB0YXJnZXQtPnNjc2lfaG9zdCwKKwkJCQkJICAgICBQRlggIlNlbmRpbmcgQ00gRFJFUSBmYWlsZWRcbiIpOworCQkJfQogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzcnBfZnJlZV9yZXFfZGF0YShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCitzdGF0aWMgdm9pZCBzcnBfZnJlZV9yZXFfZGF0YShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCisJCQkgICAgICBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogewogCXN0cnVjdCBzcnBfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2OwogCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gZGV2LT5kZXY7CiAJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXE7CiAJaW50IGk7CiAKLQlpZiAoIXRhcmdldC0+cmVxX3JpbmcpCisJaWYgKCFjaC0+dGFyZ2V0IHx8ICFjaC0+cmVxX3JpbmcpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnJlcV9yaW5nX3NpemU7ICsraSkgewotCQlyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1tpXTsKKwkJcmVxID0gJmNoLT5yZXFfcmluZ1tpXTsKIAkJaWYgKGRldi0+dXNlX2Zhc3RfcmVnKQogCQkJa2ZyZWUocmVxLT5mcl9saXN0KTsKIAkJZWxzZQpAQCAtNzg5LDEyICs4NjksMTMgQEAKIAkJa2ZyZWUocmVxLT5pbmRpcmVjdF9kZXNjKTsKIAl9CiAKLQlrZnJlZSh0YXJnZXQtPnJlcV9yaW5nKTsKLQl0YXJnZXQtPnJlcV9yaW5nID0gTlVMTDsKKwlrZnJlZShjaC0+cmVxX3JpbmcpOworCWNoLT5yZXFfcmluZyA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX2FsbG9jX3JlcV9kYXRhKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKK3N0YXRpYyBpbnQgc3JwX2FsbG9jX3JlcV9kYXRhKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3Qgc3JwX2RldmljZSAqc3JwX2RldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXY7CiAJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBzcnBfZGV2LT5kZXY7CiAJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXE7CkBAIC04MDIsMTUgKzg4MywxMyBAQAogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJaW50IGksIHJldCA9IC1FTk9NRU07CiAKLQlJTklUX0xJU1RfSEVBRCgmdGFyZ2V0LT5mcmVlX3JlcXMpOwotCi0JdGFyZ2V0LT5yZXFfcmluZyA9IGt6YWxsb2ModGFyZ2V0LT5yZXFfcmluZ19zaXplICoKLQkJCQkgICBzaXplb2YoKnRhcmdldC0+cmVxX3JpbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRhcmdldC0+cmVxX3JpbmcpCisJY2gtPnJlcV9yaW5nID0ga2NhbGxvYyh0YXJnZXQtPnJlcV9yaW5nX3NpemUsIHNpemVvZigqY2gtPnJlcV9yaW5nKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoLT5yZXFfcmluZykKIAkJZ290byBvdXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5yZXFfcmluZ19zaXplOyArK2kpIHsKLQkJcmVxID0gJnRhcmdldC0+cmVxX3JpbmdbaV07CisJCXJlcSA9ICZjaC0+cmVxX3JpbmdbaV07CiAJCW1yX2xpc3QgPSBrbWFsbG9jKHRhcmdldC0+Y21kX3NnX2NudCAqIHNpemVvZih2b2lkICopLAogCQkJCSAgR0ZQX0tFUk5FTCk7CiAJCWlmICghbXJfbGlzdCkKQEAgLTgzNCw4ICs5MTMsNiBAQAogCQkJZ290byBvdXQ7CiAKIAkJcmVxLT5pbmRpcmVjdF9kbWFfYWRkciA9IGRtYV9hZGRyOwotCQlyZXEtPmluZGV4ID0gaTsKLQkJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmdGFyZ2V0LT5mcmVlX3JlcXMpOwogCX0KIAlyZXQgPSAwOwogCkBAIC04NjAsNiArOTM3LDkgQEAKIAogc3RhdGljIHZvaWQgc3JwX3JlbW92ZV90YXJnZXQoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQogeworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2g7CisJaW50IGk7CisKIAlXQVJOX09OX09OQ0UodGFyZ2V0LT5zdGF0ZSAhPSBTUlBfVEFSR0VUX1JFTU9WRUQpOwogCiAJc3JwX2RlbF9zY3NpX2hvc3RfYXR0cih0YXJnZXQtPnNjc2lfaG9zdCk7CkBAIC04NjgsMTEgKzk0OCwxOCBAQAogCXNjc2lfcmVtb3ZlX2hvc3QodGFyZ2V0LT5zY3NpX2hvc3QpOwogCXNycF9zdG9wX3Jwb3J0X3RpbWVycyh0YXJnZXQtPnJwb3J0KTsKIAlzcnBfZGlzY29ubmVjdF90YXJnZXQodGFyZ2V0KTsKLQlpYl9kZXN0cm95X2NtX2lkKHRhcmdldC0+Y21faWQpOwotCXNycF9mcmVlX3RhcmdldF9pYih0YXJnZXQpOworCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKwkJc3JwX2ZyZWVfY2hfaWIodGFyZ2V0LCBjaCk7CisJfQogCWNhbmNlbF93b3JrX3N5bmMoJnRhcmdldC0+dGxfZXJyX3dvcmspOwogCXNycF9ycG9ydF9wdXQodGFyZ2V0LT5ycG9ydCk7Ci0Jc3JwX2ZyZWVfcmVxX2RhdGEodGFyZ2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCWNoID0gJnRhcmdldC0+Y2hbaV07CisJCXNycF9mcmVlX3JlcV9kYXRhKHRhcmdldCwgY2gpOworCX0KKwlrZnJlZSh0YXJnZXQtPmNoKTsKKwl0YXJnZXQtPmNoID0gTlVMTDsKIAogCXNwaW5fbG9jaygmdGFyZ2V0LT5zcnBfaG9zdC0+dGFyZ2V0X2xvY2spOwogCWxpc3RfZGVsKCZ0YXJnZXQtPmxpc3QpOwpAQCAtODk4LDI1ICs5ODUsMjUgQEAKIAlzcnBfcXVldWVfcmVtb3ZlX3dvcmsodGFyZ2V0KTsKIH0KIAotc3RhdGljIGludCBzcnBfY29ubmVjdF90YXJnZXQoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorc3RhdGljIGludCBzcnBfY29ubmVjdF9jaChzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCBib29sIG11bHRpY2gpCiB7Ci0JaW50IHJldHJpZXMgPSAzOworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJaW50IHJldDsKIAotCVdBUk5fT05fT05DRSh0YXJnZXQtPmNvbm5lY3RlZCk7CisJV0FSTl9PTl9PTkNFKCFtdWx0aWNoICYmIHRhcmdldC0+Y29ubmVjdGVkKTsKIAogCXRhcmdldC0+cXBfaW5fZXJyb3IgPSBmYWxzZTsKIAotCXJldCA9IHNycF9sb29rdXBfcGF0aCh0YXJnZXQpOworCXJldCA9IHNycF9sb29rdXBfcGF0aChjaCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXdoaWxlICgxKSB7Ci0JCWluaXRfY29tcGxldGlvbigmdGFyZ2V0LT5kb25lKTsKLQkJcmV0ID0gc3JwX3NlbmRfcmVxKHRhcmdldCk7CisJCWluaXRfY29tcGxldGlvbigmY2gtPmRvbmUpOworCQlyZXQgPSBzcnBfc2VuZF9yZXEoY2gsIG11bHRpY2gpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZ0YXJnZXQtPmRvbmUpOworCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmNoLT5kb25lKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCkBAIC05MjYsMTMgKzEwMTMsMTMgQEAKIAkJICogYmFjaywgb3IgU1JQX0RMSURfUkVESVJFQ1QgaWYgd2UgZ2V0IGEgbGlkL3FwCiAJCSAqIHJlZGlyZWN0IFJFSiBiYWNrLgogCQkgKi8KLQkJc3dpdGNoICh0YXJnZXQtPnN0YXR1cykgeworCQlzd2l0Y2ggKGNoLT5zdGF0dXMpIHsKIAkJY2FzZSAwOgogCQkJc3JwX2NoYW5nZV9jb25uX3N0YXRlKHRhcmdldCwgdHJ1ZSk7CiAJCQlyZXR1cm4gMDsKIAogCQljYXNlIFNSUF9QT1JUX1JFRElSRUNUOgotCQkJcmV0ID0gc3JwX2xvb2t1cF9wYXRoKHRhcmdldCk7CisJCQlyZXQgPSBzcnBfbG9va3VwX3BhdGgoY2gpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCQkJYnJlYWs7CkBAIC05NDEsMjcgKzEwMjgsMTggQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgU1JQX1NUQUxFX0NPTk46Ci0JCQkvKiBPdXIgY3VycmVudCBDTSBpZCB3YXMgc3RhbGUsIGFuZCBpcyBub3cgaW4gdGltZXdhaXQuCi0JCQkgKiBUcnkgdG8gcmVjb25uZWN0IHdpdGggYSBuZXcgb25lLgotCQkJICovCi0JCQlpZiAoIXJldHJpZXMtLSB8fCBzcnBfbmV3X2NtX2lkKHRhcmdldCkpIHsKLQkJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKLQkJCQkJICAgICAiZ2l2aW5nIHVwIG9uIHN0YWxlIGNvbm5lY3Rpb25cbiIpOwotCQkJCXRhcmdldC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7Ci0JCQkJcmV0dXJuIHRhcmdldC0+c3RhdHVzOwotCQkJfQotCiAJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKLQkJCQkgICAgICJyZXRyeWluZyBzdGFsZSBjb25uZWN0aW9uXG4iKTsKLQkJCWJyZWFrOworCQkJCSAgICAgImdpdmluZyB1cCBvbiBzdGFsZSBjb25uZWN0aW9uXG4iKTsKKwkJCWNoLT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKKwkJCXJldHVybiBjaC0+c3RhdHVzOwogCiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gdGFyZ2V0LT5zdGF0dXM7CisJCQlyZXR1cm4gY2gtPnN0YXR1czsKIAkJfQogCX0KIH0KIAotc3RhdGljIGludCBzcnBfaW52X3JrZXkoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCB1MzIgcmtleSkKK3N0YXRpYyBpbnQgc3JwX2ludl9ya2V5KHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIHUzMiBya2V5KQogewogCXN0cnVjdCBpYl9zZW5kX3dyICpiYWRfd3I7CiAJc3RydWN0IGliX3NlbmRfd3Igd3IgPSB7CkBAIC05NzMsMTMgKzEwNTEsMTQgQEAKIAkJLmV4LmludmFsaWRhdGVfcmtleSA9IHJrZXksCiAJfTsKIAotCXJldHVybiBpYl9wb3N0X3NlbmQodGFyZ2V0LT5xcCwgJndyLCAmYmFkX3dyKTsKKwlyZXR1cm4gaWJfcG9zdF9zZW5kKGNoLT5xcCwgJndyLCAmYmFkX3dyKTsKIH0KIAogc3RhdGljIHZvaWQgc3JwX3VubWFwX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqc2NtbmQsCi0JCQkgICBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCisJCQkgICBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLAogCQkJICAgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2RldjsKIAlzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiA9IGRldi0+ZGV2OwogCWludCBpLCByZXM7CkBAIC05OTMsNyArMTA3Miw3IEBACiAJCXN0cnVjdCBzcnBfZnJfZGVzYyAqKnBmcjsKIAogCQlmb3IgKGkgPSByZXEtPm5tZGVzYywgcGZyID0gcmVxLT5mcl9saXN0OyBpID4gMDsgaS0tLCBwZnIrKykgewotCQkJcmVzID0gc3JwX2ludl9ya2V5KHRhcmdldCwgKCpwZnIpLT5tci0+cmtleSk7CisJCQlyZXMgPSBzcnBfaW52X3JrZXkoY2gsICgqcGZyKS0+bXItPnJrZXkpOwogCQkJaWYgKHJlcyA8IDApIHsKIAkJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKIAkJCQkgICJRdWV1ZWluZyBJTlYgV1IgZm9yIHJrZXkgJSN4IGZhaWxlZCAoJWQpXG4iLApAQCAtMTAwMyw3ICsxMDgyLDcgQEAKIAkJCX0KIAkJfQogCQlpZiAocmVxLT5ubWRlc2MpCi0JCQlzcnBfZnJfcG9vbF9wdXQodGFyZ2V0LT5mcl9wb29sLCByZXEtPmZyX2xpc3QsCisJCQlzcnBfZnJfcG9vbF9wdXQoY2gtPmZyX3Bvb2wsIHJlcS0+ZnJfbGlzdCwKIAkJCQkJcmVxLT5ubWRlc2MpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBpYl9wb29sX2ZtciAqKnBmbXI7CkBAIC0xMDE4LDcgKzEwOTcsNyBAQAogCiAvKioKICAqIHNycF9jbGFpbV9yZXEgLSBUYWtlIG93bmVyc2hpcCBvZiB0aGUgc2NtbmQgYXNzb2NpYXRlZCB3aXRoIGEgcmVxdWVzdC4KLSAqIEB0YXJnZXQ6IFNSUCB0YXJnZXQgcG9ydC4KKyAqIEBjaDogU1JQIFJETUEgY2hhbm5lbC4KICAqIEByZXE6IFNSUCByZXF1ZXN0LgogICogQHNkZXY6IElmIG5vdCBOVUxMLCBvbmx5IHRha2Ugb3duZXJzaGlwIGZvciB0aGlzIFNDU0kgZGV2aWNlLgogICogQHNjbW5kOiBJZiBOVUxMLCB0YWtlIG93bmVyc2hpcCBvZiBAcmVxLT5zY21uZC4gSWYgbm90IE5VTEwsIG9ubHkgdGFrZQpAQCAtMTAyNywxNCArMTEwNiwxNCBAQAogICogUmV0dXJuIHZhbHVlOgogICogRWl0aGVyIE5VTEwgb3IgYSBwb2ludGVyIHRvIHRoZSBTQ1NJIGNvbW1hbmQgdGhlIGNhbGxlciBiZWNhbWUgb3duZXIgb2YuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICpzcnBfY2xhaW1fcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICpzcnBfY2xhaW1fcmVxKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsCiAJCQkJICAgICAgIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLAogCQkJCSAgICAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCiAJCQkJICAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBmbGFncyk7CiAJaWYgKHJlcS0+c2NtbmQgJiYKIAkgICAgKCFzZGV2IHx8IHJlcS0+c2NtbmQtPmRldmljZSA9PSBzZGV2KSAmJgogCSAgICAoIXNjbW5kIHx8IHJlcS0+c2NtbmQgPT0gc2NtbmQpKSB7CkBAIC0xMDQzLDQwICsxMTIyLDM3IEBACiAJfSBlbHNlIHsKIAkJc2NtbmQgPSBOVUxMOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHNjbW5kOwogfQogCiAvKioKICAqIHNycF9mcmVlX3JlcSgpIC0gVW5tYXAgZGF0YSBhbmQgYWRkIHJlcXVlc3QgdG8gdGhlIGZyZWUgcmVxdWVzdCBsaXN0LgotICogQHRhcmdldDogU1JQIHRhcmdldCBwb3J0LgorICogQGNoOiAgICAgU1JQIFJETUEgY2hhbm5lbC4KICAqIEByZXE6ICAgIFJlcXVlc3QgdG8gYmUgZnJlZWQuCiAgKiBAc2NtbmQ6ICBTQ1NJIGNvbW1hbmQgYXNzb2NpYXRlZCB3aXRoIEByZXEuCiAgKiBAcmVxX2xpbV9kZWx0YTogQW1vdW50IHRvIGJlIGFkZGVkIHRvIEB0YXJnZXQtPnJlcV9saW0uCiAgKi8KLXN0YXRpYyB2b2lkIHNycF9mcmVlX3JlcShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCi0JCQkgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLAotCQkJIHMzMiByZXFfbGltX2RlbHRhKQorc3RhdGljIHZvaWQgc3JwX2ZyZWVfcmVxKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLAorCQkJIHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLCBzMzIgcmVxX2xpbV9kZWx0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3JwX3VubWFwX2RhdGEoc2NtbmQsIHRhcmdldCwgcmVxKTsKKwlzcnBfdW5tYXBfZGF0YShzY21uZCwgY2gsIHJlcSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7Ci0JdGFyZ2V0LT5yZXFfbGltICs9IHJlcV9saW1fZGVsdGE7Ci0JbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmdGFyZ2V0LT5mcmVlX3JlcXMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOworCWNoLT5yZXFfbGltICs9IHJlcV9saW1fZGVsdGE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgc3JwX2ZpbmlzaF9yZXEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAotCQkJICAgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCSAgIGludCByZXN1bHQpCitzdGF0aWMgdm9pZCBzcnBfZmluaXNoX3JlcShzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwKKwkJCSAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHJlc3VsdCkKIHsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCA9IHNycF9jbGFpbV9yZXEodGFyZ2V0LCByZXEsIHNkZXYsIE5VTEwpOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kID0gc3JwX2NsYWltX3JlcShjaCwgcmVxLCBzZGV2LCBOVUxMKTsKIAogCWlmIChzY21uZCkgewotCQlzcnBfZnJlZV9yZXEodGFyZ2V0LCByZXEsIHNjbW5kLCAwKTsKKwkJc3JwX2ZyZWVfcmVxKGNoLCByZXEsIHNjbW5kLCAwKTsKIAkJc2NtbmQtPnJlc3VsdCA9IHJlc3VsdDsKIAkJc2NtbmQtPnNjc2lfZG9uZShzY21uZCk7CiAJfQpAQCAtMTA4NSw5ICsxMTYxLDEwIEBACiBzdGF0aWMgdm9pZCBzcnBfdGVybWluYXRlX2lvKHN0cnVjdCBzcnBfcnBvcnQgKnJwb3J0KQogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IHJwb3J0LT5sbGRfZGF0YTsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdGFyZ2V0LT5zY3NpX2hvc3Q7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwotCWludCBpOworCWludCBpLCBqOwogCiAJLyoKIAkgKiBJbnZva2luZyBzcnBfdGVybWluYXRlX2lvKCkgd2hpbGUgc3JwX3F1ZXVlY29tbWFuZCgpIGlzIHJ1bm5pbmcKQEAgLTEwOTYsOSArMTE3MywxNSBAQAogCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkKIAkJV0FSTl9PTl9PTkNFKHNkZXYtPnJlcXVlc3RfcXVldWUtPnJlcXVlc3RfZm5fYWN0aXZlKTsKIAotCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnJlcV9yaW5nX3NpemU7ICsraSkgewotCQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSA9ICZ0YXJnZXQtPnJlcV9yaW5nW2ldOwotCQlzcnBfZmluaXNoX3JlcSh0YXJnZXQsIHJlcSwgTlVMTCwgRElEX1RSQU5TUE9SVF9GQUlMRkFTVCA8PCAxNik7CisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCisJCWZvciAoaiA9IDA7IGogPCB0YXJnZXQtPnJlcV9yaW5nX3NpemU7ICsraikgeworCQkJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEgPSAmY2gtPnJlcV9yaW5nW2pdOworCisJCQlzcnBfZmluaXNoX3JlcShjaCwgcmVxLCBOVUxMLAorCQkJCSAgICAgICBESURfVFJBTlNQT1JUX0ZBSUxGQVNUIDw8IDE2KTsKKwkJfQogCX0KIH0KIApAQCAtMTExNCwzNCArMTE5Nyw2MSBAQAogc3RhdGljIGludCBzcnBfcnBvcnRfcmVjb25uZWN0KHN0cnVjdCBzcnBfcnBvcnQgKnJwb3J0KQogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IHJwb3J0LT5sbGRfZGF0YTsKLQlpbnQgaSwgcmV0OworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2g7CisJaW50IGksIGosIHJldCA9IDA7CisJYm9vbCBtdWx0aWNoID0gZmFsc2U7CiAKIAlzcnBfZGlzY29ubmVjdF90YXJnZXQodGFyZ2V0KTsKKworCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfU0NBTk5JTkcpCisJCXJldHVybiAtRU5PREVWOworCiAJLyoKIAkgKiBOb3cgZ2V0IGEgbmV3IGxvY2FsIENNIElEIHNvIHRoYXQgd2UgYXZvaWQgY29uZnVzaW5nIHRoZSB0YXJnZXQgaW4KIAkgKiBjYXNlIHRoaW5ncyBhcmUgcmVhbGx5IGZvdWxlZCB1cC4gRG9pbmcgc28gYWxzbyBlbnN1cmVzIHRoYXQgYWxsIENNCiAJICogY2FsbGJhY2tzIHdpbGwgaGF2ZSBmaW5pc2hlZCBiZWZvcmUgYSBuZXcgUVAgaXMgYWxsb2NhdGVkLgogCSAqLwotCXJldCA9IHNycF9uZXdfY21faWQodGFyZ2V0KTsKLQotCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnJlcV9yaW5nX3NpemU7ICsraSkgewotCQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSA9ICZ0YXJnZXQtPnJlcV9yaW5nW2ldOwotCQlzcnBfZmluaXNoX3JlcSh0YXJnZXQsIHJlcSwgTlVMTCwgRElEX1JFU0VUIDw8IDE2KTsKKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCWNoID0gJnRhcmdldC0+Y2hbaV07CisJCWlmICghY2gtPnRhcmdldCkKKwkJCWJyZWFrOworCQlyZXQgKz0gc3JwX25ld19jbV9pZChjaCk7CiAJfQorCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKwkJaWYgKCFjaC0+dGFyZ2V0KQorCQkJYnJlYWs7CisJCWZvciAoaiA9IDA7IGogPCB0YXJnZXQtPnJlcV9yaW5nX3NpemU7ICsraikgeworCQkJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEgPSAmY2gtPnJlcV9yaW5nW2pdOwogCi0JLyoKLQkgKiBXaGV0aGVyIG9yIG5vdCBjcmVhdGluZyBhIG5ldyBDTSBJRCBzdWNjZWVkZWQsIGNyZWF0ZSBhIG5ldwotCSAqIFFQLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBhbGwgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciB0aGUgb2xkIFFQIGhhdmUKLQkgKiBmaW5pc2hlZCBiZWZvcmUgYW55IHNlbmQgcmVxdWVzdHMgYXJlIHBvc3RlZCBvbiB0aGUgbmV3IFFQLgotCSAqLwotCXJldCArPSBzcnBfY3JlYXRlX3RhcmdldF9pYih0YXJnZXQpOworCQkJc3JwX2ZpbmlzaF9yZXEoY2gsIHJlcSwgTlVMTCwgRElEX1JFU0VUIDw8IDE2KTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCWNoID0gJnRhcmdldC0+Y2hbaV07CisJCWlmICghY2gtPnRhcmdldCkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBXaGV0aGVyIG9yIG5vdCBjcmVhdGluZyBhIG5ldyBDTSBJRCBzdWNjZWVkZWQsIGNyZWF0ZSBhIG5ldworCQkgKiBRUC4gVGhpcyBndWFyYW50ZWVzIHRoYXQgYWxsIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24KKwkJICogaW52b2NhdGlvbnMgaGF2ZSBmaW5pc2hlZCBiZWZvcmUgcmVxdWVzdCByZXNldHRpbmcgc3RhcnRzLgorCQkgKi8KKwkJcmV0ICs9IHNycF9jcmVhdGVfY2hfaWIoY2gpOwogCi0JSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+ZnJlZV90eCk7Ci0JZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cXVldWVfc2l6ZTsgKytpKQotCQlsaXN0X2FkZCgmdGFyZ2V0LT50eF9yaW5nW2ldLT5saXN0LCAmdGFyZ2V0LT5mcmVlX3R4KTsKLQotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gc3JwX2Nvbm5lY3RfdGFyZ2V0KHRhcmdldCk7CisJCUlOSVRfTElTVF9IRUFEKCZjaC0+ZnJlZV90eCk7CisJCWZvciAoaiA9IDA7IGogPCB0YXJnZXQtPnF1ZXVlX3NpemU7ICsraikKKwkJCWxpc3RfYWRkKCZjaC0+dHhfcmluZ1tqXS0+bGlzdCwgJmNoLT5mcmVlX3R4KTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCQlpZiAocmV0IHx8ICFjaC0+dGFyZ2V0KSB7CisJCQlpZiAoaSA+IDEpCisJCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHNycF9jb25uZWN0X2NoKGNoLCBtdWx0aWNoKTsKKwkJbXVsdGljaCA9IHRydWU7CisJfQogCiAJaWYgKHJldCA9PSAwKQogCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCB0YXJnZXQtPnNjc2lfaG9zdCwKQEAgLTExNjUsMTIgKzEyNzUsMTIgQEAKIH0KIAogc3RhdGljIGludCBzcnBfbWFwX2ZpbmlzaF9mbXIoc3RydWN0IHNycF9tYXBfc3RhdGUgKnN0YXRlLAotCQkJICAgICAgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorCQkJICAgICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKIAlzdHJ1Y3QgaWJfcG9vbF9mbXIgKmZtcjsKIAl1NjQgaW9fYWRkciA9IDA7CiAKLQlmbXIgPSBpYl9mbXJfcG9vbF9tYXBfcGh5cyh0YXJnZXQtPmZtcl9wb29sLCBzdGF0ZS0+cGFnZXMsCisJZm1yID0gaWJfZm1yX3Bvb2xfbWFwX3BoeXMoY2gtPmZtcl9wb29sLCBzdGF0ZS0+cGFnZXMsCiAJCQkJICAgc3RhdGUtPm5wYWdlcywgaW9fYWRkcik7CiAJaWYgKElTX0VSUihmbXIpKQogCQlyZXR1cm4gUFRSX0VSUihmbXIpOwpAQCAtMTE4NCwxNSArMTI5NCwxNiBAQAogfQogCiBzdGF0aWMgaW50IHNycF9tYXBfZmluaXNoX2ZyKHN0cnVjdCBzcnBfbWFwX3N0YXRlICpzdGF0ZSwKLQkJCSAgICAgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorCQkJICAgICBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNycF9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXY7CiAJc3RydWN0IGliX3NlbmRfd3IgKmJhZF93cjsKIAlzdHJ1Y3QgaWJfc2VuZF93ciB3cjsKIAlzdHJ1Y3Qgc3JwX2ZyX2Rlc2MgKmRlc2M7CiAJdTMyIHJrZXk7CiAKLQlkZXNjID0gc3JwX2ZyX3Bvb2xfZ2V0KHRhcmdldC0+ZnJfcG9vbCk7CisJZGVzYyA9IHNycF9mcl9wb29sX2dldChjaC0+ZnJfcG9vbCk7CiAJaWYgKCFkZXNjKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTIyMSwxMiArMTMzMiwxMyBAQAogCXNycF9tYXBfZGVzYyhzdGF0ZSwgc3RhdGUtPmJhc2VfZG1hX2FkZHIsIHN0YXRlLT5kbWFfbGVuLAogCQkgICAgIGRlc2MtPm1yLT5ya2V5KTsKIAotCXJldHVybiBpYl9wb3N0X3NlbmQodGFyZ2V0LT5xcCwgJndyLCAmYmFkX3dyKTsKKwlyZXR1cm4gaWJfcG9zdF9zZW5kKGNoLT5xcCwgJndyLCAmYmFkX3dyKTsKIH0KIAogc3RhdGljIGludCBzcnBfZmluaXNoX21hcHBpbmcoc3RydWN0IHNycF9tYXBfc3RhdGUgKnN0YXRlLAotCQkJICAgICAgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorCQkJICAgICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCWludCByZXQgPSAwOwogCiAJaWYgKHN0YXRlLT5ucGFnZXMgPT0gMCkKQEAgLTEyMzcsOCArMTM0OSw4IEBACiAJCQkgICAgIHRhcmdldC0+cmtleSk7CiAJZWxzZQogCQlyZXQgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT51c2VfZmFzdF9yZWcgPwotCQkJc3JwX21hcF9maW5pc2hfZnIoc3RhdGUsIHRhcmdldCkgOgotCQkJc3JwX21hcF9maW5pc2hfZm1yKHN0YXRlLCB0YXJnZXQpOworCQkJc3JwX21hcF9maW5pc2hfZnIoc3RhdGUsIGNoKSA6CisJCQlzcnBfbWFwX2ZpbmlzaF9mbXIoc3RhdGUsIGNoKTsKIAogCWlmIChyZXQgPT0gMCkgewogCQlzdGF0ZS0+bnBhZ2VzID0gMDsKQEAgLTEyNTgsMTAgKzEzNzAsMTEgQEAKIH0KIAogc3RhdGljIGludCBzcnBfbWFwX3NnX2VudHJ5KHN0cnVjdCBzcnBfbWFwX3N0YXRlICpzdGF0ZSwKLQkJCSAgICBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCisJCQkgICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCwKIAkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgc2dfaW5kZXgsCiAJCQkgICAgYm9vbCB1c2VfbXIpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2RldjsKIAlzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiA9IGRldi0+ZGV2OwogCWRtYV9hZGRyX3QgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhpYmRldiwgc2cpOwpAQCAtMTI5MCw3ICsxNDAzLDcgQEAKIAkgKi8KIAlpZiAoKCFkZXYtPnVzZV9mYXN0X3JlZyAmJiBkbWFfYWRkciAmIH5kZXYtPm1yX3BhZ2VfbWFzaykgfHwKIAkgICAgZG1hX2xlbiA+IGRldi0+bXJfbWF4X3NpemUpIHsKLQkJcmV0ID0gc3JwX2ZpbmlzaF9tYXBwaW5nKHN0YXRlLCB0YXJnZXQpOworCQlyZXQgPSBzcnBfZmluaXNoX21hcHBpbmcoc3RhdGUsIGNoKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTEzMTEsNyArMTQyNCw3IEBACiAJd2hpbGUgKGRtYV9sZW4pIHsKIAkJdW5zaWduZWQgb2Zmc2V0ID0gZG1hX2FkZHIgJiB+ZGV2LT5tcl9wYWdlX21hc2s7CiAJCWlmIChzdGF0ZS0+bnBhZ2VzID09IGRldi0+bWF4X3BhZ2VzX3Blcl9tciB8fCBvZmZzZXQgIT0gMCkgewotCQkJcmV0ID0gc3JwX2ZpbmlzaF9tYXBwaW5nKHN0YXRlLCB0YXJnZXQpOworCQkJcmV0ID0gc3JwX2ZpbmlzaF9tYXBwaW5nKHN0YXRlLCBjaCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAKQEAgLTEzMzUsMTcgKzE0NDgsMTggQEAKIAkgKi8KIAlyZXQgPSAwOwogCWlmIChsZW4gIT0gZGV2LT5tcl9wYWdlX3NpemUpIHsKLQkJcmV0ID0gc3JwX2ZpbmlzaF9tYXBwaW5nKHN0YXRlLCB0YXJnZXQpOworCQlyZXQgPSBzcnBfZmluaXNoX21hcHBpbmcoc3RhdGUsIGNoKTsKIAkJaWYgKCFyZXQpCiAJCQlzcnBfbWFwX3VwZGF0ZV9zdGFydChzdGF0ZSwgTlVMTCwgMCwgMCk7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX21hcF9zZyhzdHJ1Y3Qgc3JwX21hcF9zdGF0ZSAqc3RhdGUsCi0JCSAgICAgIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEsCi0JCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdCwgaW50IGNvdW50KQorc3RhdGljIGludCBzcnBfbWFwX3NnKHN0cnVjdCBzcnBfbWFwX3N0YXRlICpzdGF0ZSwgc3RydWN0IHNycF9yZG1hX2NoICpjaCwKKwkJICAgICAgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdCwKKwkJICAgICAgaW50IGNvdW50KQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNycF9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXY7CiAJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBkZXYtPmRldjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwpAQCAtMTM1NiwxNCArMTQ3MCwxNCBAQAogCXN0YXRlLT5wYWdlcwk9IHJlcS0+bWFwX3BhZ2U7CiAJaWYgKGRldi0+dXNlX2Zhc3RfcmVnKSB7CiAJCXN0YXRlLT5uZXh0X2ZyID0gcmVxLT5mcl9saXN0OwotCQl1c2VfbXIgPSAhIXRhcmdldC0+ZnJfcG9vbDsKKwkJdXNlX21yID0gISFjaC0+ZnJfcG9vbDsKIAl9IGVsc2UgewogCQlzdGF0ZS0+bmV4dF9mbXIgPSByZXEtPmZtcl9saXN0OwotCQl1c2VfbXIgPSAhIXRhcmdldC0+Zm1yX3Bvb2w7CisJCXVzZV9tciA9ICEhY2gtPmZtcl9wb29sOwogCX0KIAogCWZvcl9lYWNoX3NnKHNjYXQsIHNnLCBjb3VudCwgaSkgewotCQlpZiAoc3JwX21hcF9zZ19lbnRyeShzdGF0ZSwgdGFyZ2V0LCBzZywgaSwgdXNlX21yKSkgeworCQlpZiAoc3JwX21hcF9zZ19lbnRyeShzdGF0ZSwgY2gsIHNnLCBpLCB1c2VfbXIpKSB7CiAJCQkvKgogCQkJICogTWVtb3J5IHJlZ2lzdHJhdGlvbiBmYWlsZWQsIHNvIGJhY2t0cmFjayB0byB0aGUKIAkJCSAqIGZpcnN0IHVubWFwcGVkIGVudHJ5IGFuZCBjb250aW51ZSBvbiB3aXRob3V0IHVzaW5nCkBAIC0xMzg1LDcgKzE0OTksNyBAQAogCQl9CiAJfQogCi0JaWYgKHVzZV9tciAmJiBzcnBfZmluaXNoX21hcHBpbmcoc3RhdGUsIHRhcmdldCkpCisJaWYgKHVzZV9tciAmJiBzcnBfZmluaXNoX21hcHBpbmcoc3RhdGUsIGNoKSkKIAkJZ290byBiYWNrdHJhY2s7CiAKIAlyZXEtPm5tZGVzYyA9IHN0YXRlLT5ubWRlc2M7CkBAIC0xMzkzLDkgKzE1MDcsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzcnBfbWFwX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqc2NtbmQsIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKK3N0YXRpYyBpbnQgc3JwX21hcF9kYXRhKHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLCBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLAogCQkJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CiAJc3RydWN0IHNycF9jbWQgKmNtZCA9IHJlcS0+Y21kLT5idWY7CiAJaW50IGxlbiwgbmVudHMsIGNvdW50OwpAQCAtMTQ1Nyw3ICsxNTcyLDcgQEAKIAkJCQkgICB0YXJnZXQtPmluZGlyZWN0X3NpemUsIERNQV9UT19ERVZJQ0UpOwogCiAJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7Ci0Jc3JwX21hcF9zZygmc3RhdGUsIHRhcmdldCwgcmVxLCBzY2F0LCBjb3VudCk7CisJc3JwX21hcF9zZygmc3RhdGUsIGNoLCByZXEsIHNjYXQsIGNvdW50KTsKIAogCS8qIFdlJ3ZlIG1hcHBlZCB0aGUgcmVxdWVzdCwgbm93IHB1bGwgYXMgbXVjaCBvZiB0aGUgaW5kaXJlY3QKIAkgKiBkZXNjcmlwdG9yIHRhYmxlIGFzIHdlIGNhbiBpbnRvIHRoZSBjb21tYW5kIGJ1ZmZlci4gSWYgdGhpcwpAQCAtMTUxOCwyMCArMTYzMywyMCBAQAogLyoKICAqIFJldHVybiBhbiBJVSBhbmQgcG9zc2libGUgY3JlZGl0IHRvIHRoZSBmcmVlIHBvb2wKICAqLwotc3RhdGljIHZvaWQgc3JwX3B1dF90eF9pdShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfaXUgKml1LAorc3RhdGljIHZvaWQgc3JwX3B1dF90eF9pdShzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCBzdHJ1Y3Qgc3JwX2l1ICppdSwKIAkJCSAgZW51bSBzcnBfaXVfdHlwZSBpdV90eXBlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGQoJml1LT5saXN0LCAmdGFyZ2V0LT5mcmVlX3R4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmaXUtPmxpc3QsICZjaC0+ZnJlZV90eCk7CiAJaWYgKGl1X3R5cGUgIT0gU1JQX0lVX1JTUCkKLQkJKyt0YXJnZXQtPnJlcV9saW07Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CisJCSsrY2gtPnJlcV9saW07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGFyZ2V0LT5sb2NrIGhlbGQgdG8gcHJvdGVjdCByZXFfbGltIGFuZCBmcmVlX3R4LgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjaC0+bG9jayBoZWxkIHRvIHByb3RlY3QgcmVxX2xpbSBhbmQgZnJlZV90eC4KICAqIElmIElVIGlzIG5vdCBzZW50LCBpdCBtdXN0IGJlIHJldHVybmVkIHVzaW5nIHNycF9wdXRfdHhfaXUoKS4KICAqCiAgKiBOb3RlOgpAQCAtMTU0MywzNSArMTY1OCwzNiBAQAogICogLSBTUlBfSVVfUlNQOiAxLCBzaW5jZSBhIGNvbmZvcm1pbmcgU1JQIHRhcmdldCBuZXZlciBzZW5kcyBtb3JlIHRoYW4KICAqICAgb25lIHVuYW5zd2VyZWQgU1JQIHJlcXVlc3QgdG8gYW4gaW5pdGlhdG9yLgogICovCi1zdGF0aWMgc3RydWN0IHNycF9pdSAqX19zcnBfZ2V0X3R4X2l1KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKK3N0YXRpYyBzdHJ1Y3Qgc3JwX2l1ICpfX3NycF9nZXRfdHhfaXUoc3RydWN0IHNycF9yZG1hX2NoICpjaCwKIAkJCQkgICAgICBlbnVtIHNycF9pdV90eXBlIGl1X3R5cGUpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzMzIgcnN2ID0gKGl1X3R5cGUgPT0gU1JQX0lVX1RTS19NR01UKSA/IDAgOiBTUlBfVFNLX01HTVRfU1FfU0laRTsKIAlzdHJ1Y3Qgc3JwX2l1ICppdTsKIAotCXNycF9zZW5kX2NvbXBsZXRpb24odGFyZ2V0LT5zZW5kX2NxLCB0YXJnZXQpOworCXNycF9zZW5kX2NvbXBsZXRpb24oY2gtPnNlbmRfY3EsIGNoKTsKIAotCWlmIChsaXN0X2VtcHR5KCZ0YXJnZXQtPmZyZWVfdHgpKQorCWlmIChsaXN0X2VtcHR5KCZjaC0+ZnJlZV90eCkpCiAJCXJldHVybiBOVUxMOwogCiAJLyogSW5pdGlhdG9yIHJlc3BvbnNlcyB0byB0YXJnZXQgcmVxdWVzdHMgZG8gbm90IGNvbnN1bWUgY3JlZGl0cyAqLwogCWlmIChpdV90eXBlICE9IFNSUF9JVV9SU1ApIHsKLQkJaWYgKHRhcmdldC0+cmVxX2xpbSA8PSByc3YpIHsKKwkJaWYgKGNoLT5yZXFfbGltIDw9IHJzdikgewogCQkJKyt0YXJnZXQtPnplcm9fcmVxX2xpbTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKLQkJLS10YXJnZXQtPnJlcV9saW07CisJCS0tY2gtPnJlcV9saW07CiAJfQogCi0JaXUgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0YXJnZXQtPmZyZWVfdHgsIHN0cnVjdCBzcnBfaXUsIGxpc3QpOworCWl1ID0gbGlzdF9maXJzdF9lbnRyeSgmY2gtPmZyZWVfdHgsIHN0cnVjdCBzcnBfaXUsIGxpc3QpOwogCWxpc3RfZGVsKCZpdS0+bGlzdCk7CiAJcmV0dXJuIGl1OwogfQogCi1zdGF0aWMgaW50IHNycF9wb3N0X3NlbmQoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAotCQkJIHN0cnVjdCBzcnBfaXUgKml1LCBpbnQgbGVuKQorc3RhdGljIGludCBzcnBfcG9zdF9zZW5kKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIHN0cnVjdCBzcnBfaXUgKml1LCBpbnQgbGVuKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IGliX3NnZSBsaXN0OwogCXN0cnVjdCBpYl9zZW5kX3dyIHdyLCAqYmFkX3dyOwogCkBAIC0xNTg2LDExICsxNzAyLDEyIEBACiAJd3Iub3Bjb2RlICAgICA9IElCX1dSX1NFTkQ7CiAJd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CiAKLQlyZXR1cm4gaWJfcG9zdF9zZW5kKHRhcmdldC0+cXAsICZ3ciwgJmJhZF93cik7CisJcmV0dXJuIGliX3Bvc3Rfc2VuZChjaC0+cXAsICZ3ciwgJmJhZF93cik7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX3Bvc3RfcmVjdihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfaXUgKml1KQorc3RhdGljIGludCBzcnBfcG9zdF9yZWN2KHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIHN0cnVjdCBzcnBfaXUgKml1KQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IGliX3JlY3Zfd3Igd3IsICpiYWRfd3I7CiAJc3RydWN0IGliX3NnZSBsaXN0OwogCkBAIC0xNjAzLDM1ICsxNzIwLDM5IEBACiAJd3Iuc2dfbGlzdCAgPSAmbGlzdDsKIAl3ci5udW1fc2dlICA9IDE7CiAKLQlyZXR1cm4gaWJfcG9zdF9yZWN2KHRhcmdldC0+cXAsICZ3ciwgJmJhZF93cik7CisJcmV0dXJuIGliX3Bvc3RfcmVjdihjaC0+cXAsICZ3ciwgJmJhZF93cik7CiB9CiAKLXN0YXRpYyB2b2lkIHNycF9wcm9jZXNzX3JzcChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfcnNwICpyc3ApCitzdGF0aWMgdm9pZCBzcnBfcHJvY2Vzc19yc3Aoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgc3RydWN0IHNycF9yc3AgKnJzcCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodW5saWtlbHkocnNwLT50YWcgJiBTUlBfVEFHX1RTS19NR01UKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7Ci0JCXRhcmdldC0+cmVxX2xpbSArPSBiZTMyX3RvX2NwdShyc3AtPnJlcV9saW1fZGVsdGEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBmbGFncyk7CisJCWNoLT5yZXFfbGltICs9IGJlMzJfdG9fY3B1KHJzcC0+cmVxX2xpbV9kZWx0YSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBmbGFncyk7CiAKLQkJdGFyZ2V0LT50c2tfbWdtdF9zdGF0dXMgPSAtMTsKKwkJY2gtPnRza19tZ210X3N0YXR1cyA9IC0xOwogCQlpZiAoYmUzMl90b19jcHUocnNwLT5yZXNwX2RhdGFfbGVuKSA+PSA0KQotCQkJdGFyZ2V0LT50c2tfbWdtdF9zdGF0dXMgPSByc3AtPmRhdGFbM107Ci0JCWNvbXBsZXRlKCZ0YXJnZXQtPnRza19tZ210X2RvbmUpOworCQkJY2gtPnRza19tZ210X3N0YXR1cyA9IHJzcC0+ZGF0YVszXTsKKwkJY29tcGxldGUoJmNoLT50c2tfbWdtdF9kb25lKTsKIAl9IGVsc2UgewotCQlyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1tyc3AtPnRhZ107Ci0JCXNjbW5kID0gc3JwX2NsYWltX3JlcSh0YXJnZXQsIHJlcSwgTlVMTCwgTlVMTCk7CisJCXNjbW5kID0gc2NzaV9ob3N0X2ZpbmRfdGFnKHRhcmdldC0+c2NzaV9ob3N0LCByc3AtPnRhZyk7CisJCWlmIChzY21uZCkgeworCQkJcmVxID0gKHZvaWQgKilzY21uZC0+aG9zdF9zY3JpYmJsZTsKKwkJCXNjbW5kID0gc3JwX2NsYWltX3JlcShjaCwgcmVxLCBOVUxMLCBzY21uZCk7CisJCX0KIAkJaWYgKCFzY21uZCkgewogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwKLQkJCQkgICAgICJOdWxsIHNjbW5kIGZvciBSU1Agdy90YWcgJTAxNmxseFxuIiwKLQkJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHJzcC0+dGFnKTsKKwkJCQkgICAgICJOdWxsIHNjbW5kIGZvciBSU1Agdy90YWcgJSMwMTZsbHggcmVjZWl2ZWQgb24gY2ggJXRkIC8gUVAgJSN4XG4iLAorCQkJCSAgICAgcnNwLT50YWcsIGNoIC0gdGFyZ2V0LT5jaCwgY2gtPnFwLT5xcF9udW0pOwogCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7Ci0JCQl0YXJnZXQtPnJlcV9saW0gKz0gYmUzMl90b19jcHUocnNwLT5yZXFfbGltX2RlbHRhKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBmbGFncyk7CisJCQljaC0+cmVxX2xpbSArPSBiZTMyX3RvX2NwdShyc3AtPnJlcV9saW1fZGVsdGEpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIAogCQkJcmV0dXJuOwogCQl9CkBAIC0xNjUzLDcgKzE3NzQsNyBAQAogCQllbHNlIGlmICh1bmxpa2VseShyc3AtPmZsYWdzICYgU1JQX1JTUF9GTEFHX0RPT1ZFUikpCiAJCQlzY3NpX3NldF9yZXNpZChzY21uZCwgLWJlMzJfdG9fY3B1KHJzcC0+ZGF0YV9vdXRfcmVzX2NudCkpOwogCi0JCXNycF9mcmVlX3JlcSh0YXJnZXQsIHJlcSwgc2NtbmQsCisJCXNycF9mcmVlX3JlcShjaCwgcmVxLCBzY21uZCwKIAkJCSAgICAgYmUzMl90b19jcHUocnNwLT5yZXFfbGltX2RlbHRhKSk7CiAKIAkJc2NtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwpAQCAtMTY2MSwxOCArMTc4MiwxOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBzcnBfcmVzcG9uc2VfY29tbW9uKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgczMyIHJlcV9kZWx0YSwKK3N0YXRpYyBpbnQgc3JwX3Jlc3BvbnNlX2NvbW1vbihzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCBzMzIgcmVxX2RlbHRhLAogCQkJICAgICAgIHZvaWQgKnJzcCwgaW50IGxlbikKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzcnBfaXUgKml1OwogCWludCBlcnI7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7Ci0JdGFyZ2V0LT5yZXFfbGltICs9IHJlcV9kZWx0YTsKLQlpdSA9IF9fc3JwX2dldF90eF9pdSh0YXJnZXQsIFNSUF9JVV9SU1ApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOworCWNoLT5yZXFfbGltICs9IHJlcV9kZWx0YTsKKwlpdSA9IF9fc3JwX2dldF90eF9pdShjaCwgU1JQX0lVX1JTUCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIAogCWlmICghaXUpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCkBAIC0xNjg0LDE3ICsxODA2LDE3IEBACiAJbWVtY3B5KGl1LT5idWYsIHJzcCwgbGVuKTsKIAlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGl1LT5kbWEsIGxlbiwgRE1BX1RPX0RFVklDRSk7CiAKLQllcnIgPSBzcnBfcG9zdF9zZW5kKHRhcmdldCwgaXUsIGxlbik7CisJZXJyID0gc3JwX3Bvc3Rfc2VuZChjaCwgaXUsIGxlbik7CiAJaWYgKGVycikgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKIAkJCSAgICAgInVuYWJsZSB0byBwb3N0IHJlc3BvbnNlOiAlZFxuIiwgZXJyKTsKLQkJc3JwX3B1dF90eF9pdSh0YXJnZXQsIGl1LCBTUlBfSVVfUlNQKTsKKwkJc3JwX3B1dF90eF9pdShjaCwgaXUsIFNSUF9JVV9SU1ApOwogCX0KIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHNycF9wcm9jZXNzX2NyZWRfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKK3N0YXRpYyB2b2lkIHNycF9wcm9jZXNzX2NyZWRfcmVxKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsCiAJCQkJIHN0cnVjdCBzcnBfY3JlZF9yZXEgKnJlcSkKIHsKIAlzdHJ1Y3Qgc3JwX2NyZWRfcnNwIHJzcCA9IHsKQEAgLTE3MDMsMTQgKzE4MjUsMTUgQEAKIAl9OwogCXMzMiBkZWx0YSA9IGJlMzJfdG9fY3B1KHJlcS0+cmVxX2xpbV9kZWx0YSk7CiAKLQlpZiAoc3JwX3Jlc3BvbnNlX2NvbW1vbih0YXJnZXQsIGRlbHRhLCAmcnNwLCBzaXplb2YgcnNwKSkKLQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCisJaWYgKHNycF9yZXNwb25zZV9jb21tb24oY2gsIGRlbHRhLCAmcnNwLCBzaXplb2YocnNwKSkpCisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgY2gtPnRhcmdldC0+c2NzaV9ob3N0LCBQRlgKIAkJCSAgICAgInByb2JsZW1zIHByb2Nlc3NpbmcgU1JQX0NSRURfUkVRXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgc3JwX3Byb2Nlc3NfYWVyX3JlcShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCitzdGF0aWMgdm9pZCBzcnBfcHJvY2Vzc19hZXJfcmVxKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsCiAJCQkJc3RydWN0IHNycF9hZXJfcmVxICpyZXEpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3Qgc3JwX2Flcl9yc3AgcnNwID0gewogCQkub3Bjb2RlID0gU1JQX0FFUl9SU1AsCiAJCS50YWcgPSByZXEtPnRhZywKQEAgLTE3MjAsMTkgKzE4NDMsMjAgQEAKIAlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKIAkJICAgICAiaWdub3JpbmcgQUVSIGZvciBMVU4gJWxsdVxuIiwgYmU2NF90b19jcHUocmVxLT5sdW4pKTsKIAotCWlmIChzcnBfcmVzcG9uc2VfY29tbW9uKHRhcmdldCwgZGVsdGEsICZyc3AsIHNpemVvZiByc3ApKQorCWlmIChzcnBfcmVzcG9uc2VfY29tbW9uKGNoLCBkZWx0YSwgJnJzcCwgc2l6ZW9mKHJzcCkpKQogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKIAkJCSAgICAgInByb2JsZW1zIHByb2Nlc3NpbmcgU1JQX0FFUl9SRVFcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBzcnBfaGFuZGxlX3JlY3Yoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3QgaWJfd2MgKndjKQorc3RhdGljIHZvaWQgc3JwX2hhbmRsZV9yZWN2KHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIHN0cnVjdCBpYl93YyAqd2MpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXY7CiAJc3RydWN0IHNycF9pdSAqaXUgPSAoc3RydWN0IHNycF9pdSAqKSAodWludHB0cl90KSB3Yy0+d3JfaWQ7CiAJaW50IHJlczsKIAl1OCBvcGNvZGU7CiAKLQlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGl1LT5kbWEsIHRhcmdldC0+bWF4X3RpX2l1X2xlbiwKKwlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGl1LT5kbWEsIGNoLT5tYXhfdGlfaXVfbGVuLAogCQkJCSAgIERNQV9GUk9NX0RFVklDRSk7CiAKIAlvcGNvZGUgPSAqKHU4ICopIGl1LT5idWY7CkBAIC0xNzQ2LDE1ICsxODcwLDE1IEBACiAKIAlzd2l0Y2ggKG9wY29kZSkgewogCWNhc2UgU1JQX1JTUDoKLQkJc3JwX3Byb2Nlc3NfcnNwKHRhcmdldCwgaXUtPmJ1Zik7CisJCXNycF9wcm9jZXNzX3JzcChjaCwgaXUtPmJ1Zik7CiAJCWJyZWFrOwogCiAJY2FzZSBTUlBfQ1JFRF9SRVE6Ci0JCXNycF9wcm9jZXNzX2NyZWRfcmVxKHRhcmdldCwgaXUtPmJ1Zik7CisJCXNycF9wcm9jZXNzX2NyZWRfcmVxKGNoLCBpdS0+YnVmKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNSUF9BRVJfUkVROgotCQlzcnBfcHJvY2Vzc19hZXJfcmVxKHRhcmdldCwgaXUtPmJ1Zik7CisJCXNycF9wcm9jZXNzX2Flcl9yZXEoY2gsIGl1LT5idWYpOwogCQlicmVhazsKIAogCWNhc2UgU1JQX1RfTE9HT1VUOgpAQCAtMTc2OSwxMCArMTg5MywxMCBAQAogCQlicmVhazsKIAl9CiAKLQlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGl1LT5kbWEsIHRhcmdldC0+bWF4X3RpX2l1X2xlbiwKKwlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGl1LT5kbWEsIGNoLT5tYXhfdGlfaXVfbGVuLAogCQkJCSAgICAgIERNQV9GUk9NX0RFVklDRSk7CiAKLQlyZXMgPSBzcnBfcG9zdF9yZWN2KHRhcmdldCwgaXUpOworCXJlcyA9IHNycF9wb3N0X3JlY3YoY2gsIGl1KTsKIAlpZiAocmVzICE9IDApCiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCiAJCQkgICAgIFBGWCAiUmVjdiBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXMpOwpAQCAtMTc5NSw4ICsxOTE5LDE1IEBACiB9CiAKIHN0YXRpYyB2b2lkIHNycF9oYW5kbGVfcXBfZXJyKHU2NCB3cl9pZCwgZW51bSBpYl93Y19zdGF0dXMgd2Nfc3RhdHVzLAotCQkJICAgICAgYm9vbCBzZW5kX2Vyciwgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorCQkJICAgICAgYm9vbCBzZW5kX2Vyciwgc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OworCisJaWYgKHdyX2lkID09IFNSUF9MQVNUX1dSX0lEKSB7CisJCWNvbXBsZXRlKCZjaC0+ZG9uZSk7CisJCXJldHVybjsKKwl9CisKIAlpZiAodGFyZ2V0LT5jb25uZWN0ZWQgJiYgIXRhcmdldC0+cXBfaW5fZXJyb3IpIHsKIAkJaWYgKHdyX2lkICYgTE9DQUxfSU5WX1dSX0lEX01BU0spIHsKIAkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWApAQCAtMTgxNywzMyArMTk0OCwzMyBAQAogCXRhcmdldC0+cXBfaW5fZXJyb3IgPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBzcnBfcmVjdl9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKnRhcmdldF9wdHIpCitzdGF0aWMgdm9pZCBzcnBfcmVjdl9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNoX3B0cikKIHsKLQlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSB0YXJnZXRfcHRyOworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2ggPSBjaF9wdHI7CiAJc3RydWN0IGliX3djIHdjOwogCiAJaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfTkVYVF9DT01QKTsKIAl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKIAkJaWYgKGxpa2VseSh3Yy5zdGF0dXMgPT0gSUJfV0NfU1VDQ0VTUykpIHsKLQkJCXNycF9oYW5kbGVfcmVjdih0YXJnZXQsICZ3Yyk7CisJCQlzcnBfaGFuZGxlX3JlY3YoY2gsICZ3Yyk7CiAJCX0gZWxzZSB7Ci0JCQlzcnBfaGFuZGxlX3FwX2Vycih3Yy53cl9pZCwgd2Muc3RhdHVzLCBmYWxzZSwgdGFyZ2V0KTsKKwkJCXNycF9oYW5kbGVfcXBfZXJyKHdjLndyX2lkLCB3Yy5zdGF0dXMsIGZhbHNlLCBjaCk7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNycF9zZW5kX2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqdGFyZ2V0X3B0cikKK3N0YXRpYyB2b2lkIHNycF9zZW5kX2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY2hfcHRyKQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IHRhcmdldF9wdHI7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaCA9IGNoX3B0cjsKIAlzdHJ1Y3QgaWJfd2Mgd2M7CiAJc3RydWN0IHNycF9pdSAqaXU7CiAKIAl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKIAkJaWYgKGxpa2VseSh3Yy5zdGF0dXMgPT0gSUJfV0NfU1VDQ0VTUykpIHsKIAkJCWl1ID0gKHN0cnVjdCBzcnBfaXUgKikgKHVpbnRwdHJfdCkgd2Mud3JfaWQ7Ci0JCQlsaXN0X2FkZCgmaXUtPmxpc3QsICZ0YXJnZXQtPmZyZWVfdHgpOworCQkJbGlzdF9hZGQoJml1LT5saXN0LCAmY2gtPmZyZWVfdHgpOwogCQl9IGVsc2UgewotCQkJc3JwX2hhbmRsZV9xcF9lcnIod2Mud3JfaWQsIHdjLnN0YXR1cywgdHJ1ZSwgdGFyZ2V0KTsKKwkJCXNycF9oYW5kbGVfcXBfZXJyKHdjLndyX2lkLCB3Yy5zdGF0dXMsIHRydWUsIGNoKTsKIAkJfQogCX0KIH0KQEAgLTE4NTIsMTEgKzE5ODMsMTQgQEAKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChzaG9zdCk7CiAJc3RydWN0IHNycF9ycG9ydCAqcnBvcnQgPSB0YXJnZXQtPnJwb3J0OworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2g7CiAJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IHNycF9pdSAqaXU7CiAJc3RydWN0IHNycF9jbWQgKmNtZDsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdGFnOworCXUxNiBpZHg7CiAJaW50IGxlbiwgcmV0OwogCWNvbnN0IGJvb2wgaW5fc2NzaV9laCA9ICFpbl9pbnRlcnJ1cHQoKSAmJiBjdXJyZW50ID09IHNob3N0LT5laGFuZGxlcjsKIApAQCAtMTg3MywxNSArMjAwNywyMiBAQAogCWlmICh1bmxpa2VseShzY21uZC0+cmVzdWx0KSkKIAkJZ290byBlcnI7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7Ci0JaXUgPSBfX3NycF9nZXRfdHhfaXUodGFyZ2V0LCBTUlBfSVVfQ01EKTsKKwlXQVJOX09OX09OQ0Uoc2NtbmQtPnJlcXVlc3QtPnRhZyA8IDApOworCXRhZyA9IGJsa19tcV91bmlxdWVfdGFnKHNjbW5kLT5yZXF1ZXN0KTsKKwljaCA9ICZ0YXJnZXQtPmNoW2Jsa19tcV91bmlxdWVfdGFnX3RvX2h3cSh0YWcpXTsKKwlpZHggPSBibGtfbXFfdW5pcXVlX3RhZ190b190YWcodGFnKTsKKwlXQVJOX09OQ0UoaWR4ID49IHRhcmdldC0+cmVxX3Jpbmdfc2l6ZSwgIiVzOiB0YWcgJSN4OiBpZHggJWQgPj0gJWRcbiIsCisJCSAgZGV2X25hbWUoJnNob3N0LT5zaG9zdF9nZW5kZXYpLCB0YWcsIGlkeCwKKwkJICB0YXJnZXQtPnJlcV9yaW5nX3NpemUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBmbGFncyk7CisJaXUgPSBfX3NycF9nZXRfdHhfaXUoY2gsIFNSUF9JVV9DTUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBmbGFncyk7CisKIAlpZiAoIWl1KQotCQlnb3RvIGVycl91bmxvY2s7CisJCWdvdG8gZXJyOwogCi0JcmVxID0gbGlzdF9maXJzdF9lbnRyeSgmdGFyZ2V0LT5mcmVlX3JlcXMsIHN0cnVjdCBzcnBfcmVxdWVzdCwgbGlzdCk7Ci0JbGlzdF9kZWwoJnJlcS0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7Ci0KKwlyZXEgPSAmY2gtPnJlcV9yaW5nW2lkeF07CiAJZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2OwogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgaXUtPmRtYSwgdGFyZ2V0LT5tYXhfaXVfbGVuLAogCQkJCSAgIERNQV9UT19ERVZJQ0UpOwpAQCAtMTg5MywxMyArMjAzNCwxMyBAQAogCiAJY21kLT5vcGNvZGUgPSBTUlBfQ01EOwogCWNtZC0+bHVuICAgID0gY3B1X3RvX2JlNjQoKHU2NCkgc2NtbmQtPmRldmljZS0+bHVuIDw8IDQ4KTsKLQljbWQtPnRhZyAgICA9IHJlcS0+aW5kZXg7CisJY21kLT50YWcgICAgPSB0YWc7CiAJbWVtY3B5KGNtZC0+Y2RiLCBzY21uZC0+Y21uZCwgc2NtbmQtPmNtZF9sZW4pOwogCiAJcmVxLT5zY21uZCAgICA9IHNjbW5kOwogCXJlcS0+Y21kICAgICAgPSBpdTsKIAotCWxlbiA9IHNycF9tYXBfZGF0YShzY21uZCwgdGFyZ2V0LCByZXEpOworCWxlbiA9IHNycF9tYXBfZGF0YShzY21uZCwgY2gsIHJlcSk7CiAJaWYgKGxlbiA8IDApIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwKIAkJCSAgICAgUEZYICJGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxuIiwgbGVuKTsKQEAgLTE5MTcsNyArMjA1OCw3IEBACiAJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBpdS0+ZG1hLCB0YXJnZXQtPm1heF9pdV9sZW4sCiAJCQkJICAgICAgRE1BX1RPX0RFVklDRSk7CiAKLQlpZiAoc3JwX3Bvc3Rfc2VuZCh0YXJnZXQsIGl1LCBsZW4pKSB7CisJaWYgKHNycF9wb3N0X3NlbmQoY2gsIGl1LCBsZW4pKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWCAiU2VuZCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl91bm1hcDsKIAl9CkBAIC0xOTMxLDEwICsyMDcyLDEwIEBACiAJcmV0dXJuIHJldDsKIAogZXJyX3VubWFwOgotCXNycF91bm1hcF9kYXRhKHNjbW5kLCB0YXJnZXQsIHJlcSk7CisJc3JwX3VubWFwX2RhdGEoc2NtbmQsIGNoLCByZXEpOwogCiBlcnJfaXU6Ci0Jc3JwX3B1dF90eF9pdSh0YXJnZXQsIGl1LCBTUlBfSVVfQ01EKTsKKwlzcnBfcHV0X3R4X2l1KGNoLCBpdSwgU1JQX0lVX0NNRCk7CiAKIAkvKgogCSAqIEF2b2lkIHRoYXQgdGhlIGxvb3BzIHRoYXQgaXRlcmF0ZSBvdmVyIHRoZSByZXF1ZXN0IHJpbmcgY2FuCkBAIC0xOTQyLDEyICsyMDgzLDYgQEAKIAkgKi8KIAlyZXEtPnNjbW5kID0gTlVMTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZCgmcmVxLT5saXN0LCAmdGFyZ2V0LT5mcmVlX3JlcXMpOwotCi1lcnJfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOwotCiBlcnI6CiAJaWYgKHNjbW5kLT5yZXN1bHQpIHsKIAkJc2NtbmQtPnNjc2lfZG9uZShzY21uZCk7CkBAIC0xOTYxLDUzICsyMDk2LDU0IEBACiAKIC8qCiAgKiBOb3RlOiB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbiB0aGlzIGZ1bmN0aW9uIGFyZSBmcmVlZCBpbgotICogc3JwX2ZyZWVfdGFyZ2V0X2liKCkuCisgKiBzcnBfZnJlZV9jaF9pYigpLgogICovCi1zdGF0aWMgaW50IHNycF9hbGxvY19pdV9idWZzKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKK3N0YXRpYyBpbnQgc3JwX2FsbG9jX2l1X2J1ZnMoc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCWludCBpOwogCi0JdGFyZ2V0LT5yeF9yaW5nID0ga3phbGxvYyh0YXJnZXQtPnF1ZXVlX3NpemUgKiBzaXplb2YoKnRhcmdldC0+cnhfcmluZyksCi0JCQkJICBHRlBfS0VSTkVMKTsKLQlpZiAoIXRhcmdldC0+cnhfcmluZykKKwljaC0+cnhfcmluZyA9IGtjYWxsb2ModGFyZ2V0LT5xdWV1ZV9zaXplLCBzaXplb2YoKmNoLT5yeF9yaW5nKSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghY2gtPnJ4X3JpbmcpCiAJCWdvdG8gZXJyX25vX3Jpbmc7Ci0JdGFyZ2V0LT50eF9yaW5nID0ga3phbGxvYyh0YXJnZXQtPnF1ZXVlX3NpemUgKiBzaXplb2YoKnRhcmdldC0+dHhfcmluZyksCi0JCQkJICBHRlBfS0VSTkVMKTsKLQlpZiAoIXRhcmdldC0+dHhfcmluZykKKwljaC0+dHhfcmluZyA9IGtjYWxsb2ModGFyZ2V0LT5xdWV1ZV9zaXplLCBzaXplb2YoKmNoLT50eF9yaW5nKSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghY2gtPnR4X3JpbmcpCiAJCWdvdG8gZXJyX25vX3Jpbmc7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5xdWV1ZV9zaXplOyArK2kpIHsKLQkJdGFyZ2V0LT5yeF9yaW5nW2ldID0gc3JwX2FsbG9jX2l1KHRhcmdldC0+c3JwX2hvc3QsCi0JCQkJCQkgIHRhcmdldC0+bWF4X3RpX2l1X2xlbiwKLQkJCQkJCSAgR0ZQX0tFUk5FTCwgRE1BX0ZST01fREVWSUNFKTsKLQkJaWYgKCF0YXJnZXQtPnJ4X3JpbmdbaV0pCisJCWNoLT5yeF9yaW5nW2ldID0gc3JwX2FsbG9jX2l1KHRhcmdldC0+c3JwX2hvc3QsCisJCQkJCSAgICAgIGNoLT5tYXhfdGlfaXVfbGVuLAorCQkJCQkgICAgICBHRlBfS0VSTkVMLCBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoIWNoLT5yeF9yaW5nW2ldKQogCQkJZ290byBlcnI7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cXVldWVfc2l6ZTsgKytpKSB7Ci0JCXRhcmdldC0+dHhfcmluZ1tpXSA9IHNycF9hbGxvY19pdSh0YXJnZXQtPnNycF9ob3N0LAotCQkJCQkJICB0YXJnZXQtPm1heF9pdV9sZW4sCi0JCQkJCQkgIEdGUF9LRVJORUwsIERNQV9UT19ERVZJQ0UpOwotCQlpZiAoIXRhcmdldC0+dHhfcmluZ1tpXSkKKwkJY2gtPnR4X3JpbmdbaV0gPSBzcnBfYWxsb2NfaXUodGFyZ2V0LT5zcnBfaG9zdCwKKwkJCQkJICAgICAgdGFyZ2V0LT5tYXhfaXVfbGVuLAorCQkJCQkgICAgICBHRlBfS0VSTkVMLCBETUFfVE9fREVWSUNFKTsKKwkJaWYgKCFjaC0+dHhfcmluZ1tpXSkKIAkJCWdvdG8gZXJyOwogCi0JCWxpc3RfYWRkKCZ0YXJnZXQtPnR4X3JpbmdbaV0tPmxpc3QsICZ0YXJnZXQtPmZyZWVfdHgpOworCQlsaXN0X2FkZCgmY2gtPnR4X3JpbmdbaV0tPmxpc3QsICZjaC0+ZnJlZV90eCk7CiAJfQogCiAJcmV0dXJuIDA7CiAKIGVycjoKIAlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5xdWV1ZV9zaXplOyArK2kpIHsKLQkJc3JwX2ZyZWVfaXUodGFyZ2V0LT5zcnBfaG9zdCwgdGFyZ2V0LT5yeF9yaW5nW2ldKTsKLQkJc3JwX2ZyZWVfaXUodGFyZ2V0LT5zcnBfaG9zdCwgdGFyZ2V0LT50eF9yaW5nW2ldKTsKKwkJc3JwX2ZyZWVfaXUodGFyZ2V0LT5zcnBfaG9zdCwgY2gtPnJ4X3JpbmdbaV0pOworCQlzcnBfZnJlZV9pdSh0YXJnZXQtPnNycF9ob3N0LCBjaC0+dHhfcmluZ1tpXSk7CiAJfQogCiAKIGVycl9ub19yaW5nOgotCWtmcmVlKHRhcmdldC0+dHhfcmluZyk7Ci0JdGFyZ2V0LT50eF9yaW5nID0gTlVMTDsKLQlrZnJlZSh0YXJnZXQtPnJ4X3JpbmcpOwotCXRhcmdldC0+cnhfcmluZyA9IE5VTEw7CisJa2ZyZWUoY2gtPnR4X3JpbmcpOworCWNoLT50eF9yaW5nID0gTlVMTDsKKwlrZnJlZShjaC0+cnhfcmluZyk7CisJY2gtPnJ4X3JpbmcgPSBOVUxMOwogCiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0yMDQxLDIzICsyMTc3LDI0IEBACiAKIHN0YXRpYyB2b2lkIHNycF9jbV9yZXBfaGFuZGxlcihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLAogCQkJICAgICAgIHN0cnVjdCBzcnBfbG9naW5fcnNwICpscnNwLAotCQkJICAgICAgIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKKwkJCSAgICAgICBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IGliX3FwX2F0dHIgKnFwX2F0dHIgPSBOVUxMOwogCWludCBhdHRyX21hc2sgPSAwOwogCWludCByZXQ7CiAJaW50IGk7CiAKIAlpZiAobHJzcC0+b3Bjb2RlID09IFNSUF9MT0dJTl9SU1ApIHsKLQkJdGFyZ2V0LT5tYXhfdGlfaXVfbGVuID0gYmUzMl90b19jcHUobHJzcC0+bWF4X3RpX2l1X2xlbik7Ci0JCXRhcmdldC0+cmVxX2xpbSAgICAgICA9IGJlMzJfdG9fY3B1KGxyc3AtPnJlcV9saW1fZGVsdGEpOworCQljaC0+bWF4X3RpX2l1X2xlbiA9IGJlMzJfdG9fY3B1KGxyc3AtPm1heF90aV9pdV9sZW4pOworCQljaC0+cmVxX2xpbSAgICAgICA9IGJlMzJfdG9fY3B1KGxyc3AtPnJlcV9saW1fZGVsdGEpOwogCiAJCS8qCiAJCSAqIFJlc2VydmUgY3JlZGl0cyBmb3IgdGFzayBtYW5hZ2VtZW50IHNvIHdlIGRvbid0CiAJCSAqIGJvdW5jZSByZXF1ZXN0cyBiYWNrIHRvIHRoZSBTQ1NJIG1pZC1sYXllci4KIAkJICovCiAJCXRhcmdldC0+c2NzaV9ob3N0LT5jYW5fcXVldWUKLQkJCT0gbWluKHRhcmdldC0+cmVxX2xpbSAtIFNSUF9UU0tfTUdNVF9TUV9TSVpFLAorCQkJPSBtaW4oY2gtPnJlcV9saW0gLSBTUlBfVFNLX01HTVRfU1FfU0laRSwKIAkJCSAgICAgIHRhcmdldC0+c2NzaV9ob3N0LT5jYW5fcXVldWUpOwogCQl0YXJnZXQtPnNjc2lfaG9zdC0+Y21kX3Blcl9sdW4KIAkJCT0gbWluX3QoaW50LCB0YXJnZXQtPnNjc2lfaG9zdC0+Y2FuX3F1ZXVlLApAQCAtMjA2OSw4ICsyMjA2LDggQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlpZiAoIXRhcmdldC0+cnhfcmluZykgewotCQlyZXQgPSBzcnBfYWxsb2NfaXVfYnVmcyh0YXJnZXQpOworCWlmICghY2gtPnJ4X3JpbmcpIHsKKwkJcmV0ID0gc3JwX2FsbG9jX2l1X2J1ZnMoY2gpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcjsKIAl9CkBAIC0yMDg1LDEzICsyMjIyLDE0IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlOwogCi0JcmV0ID0gaWJfbW9kaWZ5X3FwKHRhcmdldC0+cXAsIHFwX2F0dHIsIGF0dHJfbWFzayk7CisJcmV0ID0gaWJfbW9kaWZ5X3FwKGNoLT5xcCwgcXBfYXR0ciwgYXR0cl9tYXNrKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX2ZyZWU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5xdWV1ZV9zaXplOyBpKyspIHsKLQkJc3RydWN0IHNycF9pdSAqaXUgPSB0YXJnZXQtPnJ4X3JpbmdbaV07Ci0JCXJldCA9IHNycF9wb3N0X3JlY3YodGFyZ2V0LCBpdSk7CisJCXN0cnVjdCBzcnBfaXUgKml1ID0gY2gtPnJ4X3JpbmdbaV07CisKKwkJcmV0ID0gc3JwX3Bvc3RfcmVjdihjaCwgaXUpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl9mcmVlOwogCX0KQEAgLTIxMDMsNyArMjI0MSw3IEBACiAKIAl0YXJnZXQtPnJxX3Rtb19qaWZmaWVzID0gc3JwX2NvbXB1dGVfcnFfdG1vKHFwX2F0dHIsIGF0dHJfbWFzayk7CiAKLQlyZXQgPSBpYl9tb2RpZnlfcXAodGFyZ2V0LT5xcCwgcXBfYXR0ciwgYXR0cl9tYXNrKTsKKwlyZXQgPSBpYl9tb2RpZnlfcXAoY2gtPnFwLCBxcF9hdHRyLCBhdHRyX21hc2spOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZnJlZTsKIApAQCAtMjExMywxMyArMjI1MSwxNCBAQAogCWtmcmVlKHFwX2F0dHIpOwogCiBlcnJvcjoKLQl0YXJnZXQtPnN0YXR1cyA9IHJldDsKKwljaC0+c3RhdHVzID0gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBzcnBfY21fcmVqX2hhbmRsZXIoc3RydWN0IGliX2NtX2lkICpjbV9pZCwKIAkJCSAgICAgICBzdHJ1Y3QgaWJfY21fZXZlbnQgKmV2ZW50LAotCQkJICAgICAgIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKKwkJCSAgICAgICBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0YXJnZXQtPnNjc2lfaG9zdDsKIAlzdHJ1Y3QgaWJfY2xhc3NfcG9ydF9pbmZvICpjcGk7CiAJaW50IG9wY29kZTsKQEAgLTIxMjcsMTIgKzIyNjYsMTIgQEAKIAlzd2l0Y2ggKGV2ZW50LT5wYXJhbS5yZWpfcmN2ZC5yZWFzb24pIHsKIAljYXNlIElCX0NNX1JFSl9QT1JUX0NNX1JFRElSRUNUOgogCQljcGkgPSBldmVudC0+cGFyYW0ucmVqX3JjdmQuYXJpOwotCQl0YXJnZXQtPnBhdGguZGxpZCA9IGNwaS0+cmVkaXJlY3RfbGlkOwotCQl0YXJnZXQtPnBhdGgucGtleSA9IGNwaS0+cmVkaXJlY3RfcGtleTsKKwkJY2gtPnBhdGguZGxpZCA9IGNwaS0+cmVkaXJlY3RfbGlkOworCQljaC0+cGF0aC5wa2V5ID0gY3BpLT5yZWRpcmVjdF9wa2V5OwogCQljbV9pZC0+cmVtb3RlX2NtX3FwbiA9IGJlMzJfdG9fY3B1KGNwaS0+cmVkaXJlY3RfcXApICYgMHgwMGZmZmZmZjsKLQkJbWVtY3B5KHRhcmdldC0+cGF0aC5kZ2lkLnJhdywgY3BpLT5yZWRpcmVjdF9naWQsIDE2KTsKKwkJbWVtY3B5KGNoLT5wYXRoLmRnaWQucmF3LCBjcGktPnJlZGlyZWN0X2dpZCwgMTYpOwogCi0JCXRhcmdldC0+c3RhdHVzID0gdGFyZ2V0LT5wYXRoLmRsaWQgPworCQljaC0+c3RhdHVzID0gY2gtPnBhdGguZGxpZCA/CiAJCQlTUlBfRExJRF9SRURJUkVDVCA6IFNSUF9QT1JUX1JFRElSRUNUOwogCQlicmVhazsKIApAQCAtMjE0MywyNiArMjI4MiwyNiBAQAogCQkJICogcmVqZWN0IHJlYXNvbiBjb2RlIDI1IHdoZW4gdGhleSBtZWFuIDI0CiAJCQkgKiAocG9ydCByZWRpcmVjdCkuCiAJCQkgKi8KLQkJCW1lbWNweSh0YXJnZXQtPnBhdGguZGdpZC5yYXcsCisJCQltZW1jcHkoY2gtPnBhdGguZGdpZC5yYXcsCiAJCQkgICAgICAgZXZlbnQtPnBhcmFtLnJlal9yY3ZkLmFyaSwgMTYpOwogCiAJCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgc2hvc3QsCiAJCQkJICAgICBQRlggIlRvcHNwaW4vQ2lzY28gcmVkaXJlY3QgdG8gdGFyZ2V0IHBvcnQgR0lEICUwMTZsbHglMDE2bGx4XG4iLAotCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUodGFyZ2V0LT5wYXRoLmRnaWQuZ2xvYmFsLnN1Ym5ldF9wcmVmaXgpLAotCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUodGFyZ2V0LT5wYXRoLmRnaWQuZ2xvYmFsLmludGVyZmFjZV9pZCkpOworCQkJCSAgICAgYmU2NF90b19jcHUoY2gtPnBhdGguZGdpZC5nbG9iYWwuc3VibmV0X3ByZWZpeCksCisJCQkJICAgICBiZTY0X3RvX2NwdShjaC0+cGF0aC5kZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQpKTsKIAotCQkJdGFyZ2V0LT5zdGF0dXMgPSBTUlBfUE9SVF9SRURJUkVDVDsKKwkJCWNoLT5zdGF0dXMgPSBTUlBfUE9SVF9SRURJUkVDVDsKIAkJfSBlbHNlIHsKIAkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNob3N0LAogCQkJCSAgICAgIiAgUkVKIHJlYXNvbjogSUJfQ01fUkVKX1BPUlRfUkVESVJFQ1RcbiIpOwotCQkJdGFyZ2V0LT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKKwkJCWNoLT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgSUJfQ01fUkVKX0RVUExJQ0FURV9MT0NBTF9DT01NX0lEOgogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBzaG9zdCwKIAkJCSAgICAiICBSRUogcmVhc29uOiBJQl9DTV9SRUpfRFVQTElDQVRFX0xPQ0FMX0NPTU1fSURcbiIpOwotCQl0YXJnZXQtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCQljaC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CiAJCWJyZWFrOwogCiAJY2FzZSBJQl9DTV9SRUpfQ09OU1VNRVJfREVGSU5FRDoKQEAgLTIxNzcsMzAgKzIzMTYsMzEgQEAKIAkJCWVsc2UKIAkJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBzaG9zdCwgUEZYCiAJCQkJCSAgICAgIlNSUCBMT0dJTiBmcm9tICVwSTYgdG8gJXBJNiBSRUpFQ1RFRCwgcmVhc29uIDB4JTA4eFxuIiwKLQkJCQkJICAgICB0YXJnZXQtPnBhdGguc2dpZC5yYXcsCi0JCQkJCSAgICAgdGFyZ2V0LT5vcmlnX2RnaWQsIHJlYXNvbik7CisJCQkJCSAgICAgdGFyZ2V0LT5zZ2lkLnJhdywKKwkJCQkJICAgICB0YXJnZXQtPm9yaWdfZGdpZC5yYXcsIHJlYXNvbik7CiAJCX0gZWxzZQogCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgc2hvc3QsCiAJCQkJICAgICAiICBSRUogcmVhc29uOiBJQl9DTV9SRUpfQ09OU1VNRVJfREVGSU5FRCwiCiAJCQkJICAgICAiIG9wY29kZSAweCUwMnhcbiIsIG9wY29kZSk7Ci0JCXRhcmdldC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCWNoLT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKIAkJYnJlYWs7CiAKIAljYXNlIElCX0NNX1JFSl9TVEFMRV9DT05OOgogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBzaG9zdCwgIiAgUkVKIHJlYXNvbjogc3RhbGUgY29ubmVjdGlvblxuIik7Ci0JCXRhcmdldC0+c3RhdHVzID0gU1JQX1NUQUxFX0NPTk47CisJCWNoLT5zdGF0dXMgPSBTUlBfU1RBTEVfQ09OTjsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBzaG9zdCwgIiAgUkVKIHJlYXNvbiAweCV4XG4iLAogCQkJICAgICBldmVudC0+cGFyYW0ucmVqX3JjdmQucmVhc29uKTsKLQkJdGFyZ2V0LT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKKwkJY2gtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOwogCX0KIH0KIAogc3RhdGljIGludCBzcnBfY21faGFuZGxlcihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLCBzdHJ1Y3QgaWJfY21fZXZlbnQgKmV2ZW50KQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNtX2lkLT5jb250ZXh0OworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2ggPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCWludCBjb21wID0gMDsKIAogCXN3aXRjaCAoZXZlbnQtPmV2ZW50KSB7CkBAIC0yMjA4LDE5ICsyMzQ4LDE5IEBACiAJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCB0YXJnZXQtPnNjc2lfaG9zdCwKIAkJCSAgICAgUEZYICJTZW5kaW5nIENNIFJFUSBmYWlsZWRcbiIpOwogCQljb21wID0gMTsKLQkJdGFyZ2V0LT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKKwkJY2gtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOwogCQlicmVhazsKIAogCWNhc2UgSUJfQ01fUkVQX1JFQ0VJVkVEOgogCQljb21wID0gMTsKLQkJc3JwX2NtX3JlcF9oYW5kbGVyKGNtX2lkLCBldmVudC0+cHJpdmF0ZV9kYXRhLCB0YXJnZXQpOworCQlzcnBfY21fcmVwX2hhbmRsZXIoY21faWQsIGV2ZW50LT5wcml2YXRlX2RhdGEsIGNoKTsKIAkJYnJlYWs7CiAKIAljYXNlIElCX0NNX1JFSl9SRUNFSVZFRDoKIAkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlggIlJFSiByZWNlaXZlZFxuIik7CiAJCWNvbXAgPSAxOwogCi0JCXNycF9jbV9yZWpfaGFuZGxlcihjbV9pZCwgZXZlbnQsIHRhcmdldCk7CisJCXNycF9jbV9yZWpfaGFuZGxlcihjbV9pZCwgZXZlbnQsIGNoKTsKIAkJYnJlYWs7CiAKIAljYXNlIElCX0NNX0RSRVFfUkVDRUlWRUQ6CkBAIC0yMjM4LDcgKzIzNzgsNyBAQAogCQkJICAgICBQRlggImNvbm5lY3Rpb24gY2xvc2VkXG4iKTsKIAkJY29tcCA9IDE7CiAKLQkJdGFyZ2V0LT5zdGF0dXMgPSAwOworCQljaC0+c3RhdHVzID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIElCX0NNX01SQV9SRUNFSVZFRDoKQEAgLTIyNTMsNjUgKzIzOTMsMzAgQEAKIAl9CiAKIAlpZiAoY29tcCkKLQkJY29tcGxldGUoJnRhcmdldC0+ZG9uZSk7CisJCWNvbXBsZXRlKCZjaC0+ZG9uZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBzcnBfY2hhbmdlX3F1ZXVlX3R5cGUgLSBjaGFuZ2luZyBkZXZpY2UgcXVldWUgdGFnIHR5cGUKLSAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKLSAqIEB0YWdfdHlwZTogcmVxdWVzdGVkIHRhZyB0eXBlCi0gKgotICogUmV0dXJucyBxdWV1ZSB0YWcgdHlwZS4KLSAqLwotc3RhdGljIGludAotc3JwX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZ190eXBlKQotewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIHRhZ190eXBlKTsKLQkJaWYgKHRhZ190eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnX3R5cGUgPSAwOwotCi0JcmV0dXJuIHRhZ190eXBlOwotfQotCi0vKioKICAqIHNycF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAogICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCi0gKiBAcmVhc29uOiBTQ1NJX1FERVBUSF9ERUZBVUxUL1NDU0lfUURFUFRIX1FGVUxML1NDU0lfUURFUFRIX1JBTVBfVVAKLSAqIChzZWUgaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGZvciBkZWZpbml0aW9uKQogICoKICAqIFJldHVybnMgcXVldWUgZGVwdGguCiAgKi8KIHN0YXRpYyBpbnQKLXNycF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLCBpbnQgcmVhc29uKQorc3JwX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwotCWludCBtYXhfZGVwdGg7Ci0JaWYgKHJlYXNvbiA9PSBTQ1NJX1FERVBUSF9ERUZBVUxUIHx8IHJlYXNvbiA9PSBTQ1NJX1FERVBUSF9SQU1QX1VQKSB7Ci0JCW1heF9kZXB0aCA9IHNob3N0LT5jYW5fcXVldWU7Ci0JCWlmICghc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJCW1heF9kZXB0aCA9IDE7Ci0JCWlmIChxZGVwdGggPiBtYXhfZGVwdGgpCi0JCQlxZGVwdGggPSBtYXhfZGVwdGg7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOwotCX0gZWxzZSBpZiAocmVhc29uID09IFNDU0lfUURFUFRIX1FGVUxMKQotCQlzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKTsKLQllbHNlCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKKwlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCXFkZXB0aCA9IDE7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX3NlbmRfdHNrX21nbXQoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAotCQkJICAgICB1NjQgcmVxX3RhZywgdW5zaWduZWQgaW50IGx1biwgdTggZnVuYykKK3N0YXRpYyBpbnQgc3JwX3NlbmRfdHNrX21nbXQoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgdTY0IHJlcV90YWcsCisJCQkgICAgIHVuc2lnbmVkIGludCBsdW4sIHU4IGZ1bmMpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3Qgc3JwX3Jwb3J0ICpycG9ydCA9IHRhcmdldC0+cnBvcnQ7CiAJc3RydWN0IGliX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2OwogCXN0cnVjdCBzcnBfaXUgKml1OwpAQCAtMjMyMCwxNiArMjQyNSwxNiBAQAogCWlmICghdGFyZ2V0LT5jb25uZWN0ZWQgfHwgdGFyZ2V0LT5xcF9pbl9lcnJvcikKIAkJcmV0dXJuIC0xOwogCi0JaW5pdF9jb21wbGV0aW9uKCZ0YXJnZXQtPnRza19tZ210X2RvbmUpOworCWluaXRfY29tcGxldGlvbigmY2gtPnRza19tZ210X2RvbmUpOwogCiAJLyoKLQkgKiBMb2NrIHRoZSBycG9ydCBtdXRleCB0byBhdm9pZCB0aGF0IHNycF9jcmVhdGVfdGFyZ2V0X2liKCkgaXMKKwkgKiBMb2NrIHRoZSBycG9ydCBtdXRleCB0byBhdm9pZCB0aGF0IHNycF9jcmVhdGVfY2hfaWIoKSBpcwogCSAqIGludm9rZWQgd2hpbGUgYSB0YXNrIG1hbmFnZW1lbnQgZnVuY3Rpb24gaXMgYmVpbmcgc2VudC4KIAkgKi8KIAltdXRleF9sb2NrKCZycG9ydC0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnEoJnRhcmdldC0+bG9jayk7Ci0JaXUgPSBfX3NycF9nZXRfdHhfaXUodGFyZ2V0LCBTUlBfSVVfVFNLX01HTVQpOwotCXNwaW5fdW5sb2NrX2lycSgmdGFyZ2V0LT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZjaC0+bG9jayk7CisJaXUgPSBfX3NycF9nZXRfdHhfaXUoY2gsIFNSUF9JVV9UU0tfTUdNVCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjaC0+bG9jayk7CiAKIAlpZiAoIWl1KSB7CiAJCW11dGV4X3VubG9jaygmcnBvcnQtPm11dGV4KTsKQEAgLTIzNTAsMTUgKzI0NTUsMTUgQEAKIAogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgaXUtPmRtYSwgc2l6ZW9mICp0c2tfbWdtdCwKIAkJCQkgICAgICBETUFfVE9fREVWSUNFKTsKLQlpZiAoc3JwX3Bvc3Rfc2VuZCh0YXJnZXQsIGl1LCBzaXplb2YgKnRza19tZ210KSkgewotCQlzcnBfcHV0X3R4X2l1KHRhcmdldCwgaXUsIFNSUF9JVV9UU0tfTUdNVCk7CisJaWYgKHNycF9wb3N0X3NlbmQoY2gsIGl1LCBzaXplb2YoKnRza19tZ210KSkpIHsKKwkJc3JwX3B1dF90eF9pdShjaCwgaXUsIFNSUF9JVV9UU0tfTUdNVCk7CiAJCW11dGV4X3VubG9jaygmcnBvcnQtPm11dGV4KTsKIAogCQlyZXR1cm4gLTE7CiAJfQogCW11dGV4X3VubG9jaygmcnBvcnQtPm11dGV4KTsKIAotCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ0YXJnZXQtPnRza19tZ210X2RvbmUsCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNoLT50c2tfbWdtdF9kb25lLAogCQkJCQkgbXNlY3NfdG9famlmZmllcyhTUlBfQUJPUlRfVElNRU9VVF9NUykpKQogCQlyZXR1cm4gLTE7CiAKQEAgLTIzNjksMjAgKzI0NzQsMzIgQEAKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChzY21uZC0+ZGV2aWNlLT5ob3N0KTsKIAlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSA9IChzdHJ1Y3Qgc3JwX3JlcXVlc3QgKikgc2NtbmQtPmhvc3Rfc2NyaWJibGU7CisJdTMyIHRhZzsKKwl1MTYgY2hfaWR4OworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2g7CiAJaW50IHJldDsKIAogCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsICJTUlAgYWJvcnQgY2FsbGVkXG4iKTsKIAotCWlmICghcmVxIHx8ICFzcnBfY2xhaW1fcmVxKHRhcmdldCwgcmVxLCBOVUxMLCBzY21uZCkpCisJaWYgKCFyZXEpCiAJCXJldHVybiBTVUNDRVNTOwotCWlmIChzcnBfc2VuZF90c2tfbWdtdCh0YXJnZXQsIHJlcS0+aW5kZXgsIHNjbW5kLT5kZXZpY2UtPmx1biwKKwl0YWcgPSBibGtfbXFfdW5pcXVlX3RhZyhzY21uZC0+cmVxdWVzdCk7CisJY2hfaWR4ID0gYmxrX21xX3VuaXF1ZV90YWdfdG9faHdxKHRhZyk7CisJaWYgKFdBUk5fT05fT05DRShjaF9pZHggPj0gdGFyZ2V0LT5jaF9jb3VudCkpCisJCXJldHVybiBTVUNDRVNTOworCWNoID0gJnRhcmdldC0+Y2hbY2hfaWR4XTsKKwlpZiAoIXNycF9jbGFpbV9yZXEoY2gsIHJlcSwgTlVMTCwgc2NtbmQpKQorCQlyZXR1cm4gU1VDQ0VTUzsKKwlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LAorCQkgICAgICJTZW5kaW5nIFNSUCBhYm9ydCBmb3IgdGFnICUjeFxuIiwgdGFnKTsKKwlpZiAoc3JwX3NlbmRfdHNrX21nbXQoY2gsIHRhZywgc2NtbmQtPmRldmljZS0+bHVuLAogCQkJICAgICAgU1JQX1RTS19BQk9SVF9UQVNLKSA9PSAwKQogCQlyZXQgPSBTVUNDRVNTOwogCWVsc2UgaWYgKHRhcmdldC0+cnBvcnQtPnN0YXRlID09IFNSUF9SUE9SVF9MT1NUKQogCQlyZXQgPSBGQVNUX0lPX0ZBSUw7CiAJZWxzZQogCQlyZXQgPSBGQUlMRUQ7Ci0Jc3JwX2ZyZWVfcmVxKHRhcmdldCwgcmVxLCBzY21uZCwgMCk7CisJc3JwX2ZyZWVfcmVxKGNoLCByZXEsIHNjbW5kLCAwKTsKIAlzY21uZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCXNjbW5kLT5zY3NpX2RvbmUoc2NtbmQpOwogCkBAIC0yMzkyLDE5ICsyNTA5LDI1IEBACiBzdGF0aWMgaW50IHNycF9yZXNldF9kZXZpY2Uoc3RydWN0IHNjc2lfY21uZCAqc2NtbmQpCiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoc2NtbmQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaDsKIAlpbnQgaTsKIAogCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsICJTUlAgcmVzZXRfZGV2aWNlIGNhbGxlZFxuIik7CiAKLQlpZiAoc3JwX3NlbmRfdHNrX21nbXQodGFyZ2V0LCBTUlBfVEFHX05PX1JFUSwgc2NtbmQtPmRldmljZS0+bHVuLAorCWNoID0gJnRhcmdldC0+Y2hbMF07CisJaWYgKHNycF9zZW5kX3Rza19tZ210KGNoLCBTUlBfVEFHX05PX1JFUSwgc2NtbmQtPmRldmljZS0+bHVuLAogCQkJICAgICAgU1JQX1RTS19MVU5fUkVTRVQpKQogCQlyZXR1cm4gRkFJTEVEOwotCWlmICh0YXJnZXQtPnRza19tZ210X3N0YXR1cykKKwlpZiAoY2gtPnRza19tZ210X3N0YXR1cykKIAkJcmV0dXJuIEZBSUxFRDsKIAotCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnJlcV9yaW5nX3NpemU7ICsraSkgewotCQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSA9ICZ0YXJnZXQtPnJlcV9yaW5nW2ldOwotCQlzcnBfZmluaXNoX3JlcSh0YXJnZXQsIHJlcSwgc2NtbmQtPmRldmljZSwgRElEX1JFU0VUIDw8IDE2KTsKKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCWNoID0gJnRhcmdldC0+Y2hbaV07CisJCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnJlcV9yaW5nX3NpemU7ICsraSkgeworCQkJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEgPSAmY2gtPnJlcV9yaW5nW2ldOworCisJCQlzcnBfZmluaXNoX3JlcShjaCwgcmVxLCBzY21uZC0+ZGV2aWNlLCBESURfUkVTRVQgPDwgMTYpOworCQl9CiAJfQogCiAJcmV0dXJuIFNVQ0NFU1M7CkBAIC0yNDY2LDcgKzI1ODksNyBAQAogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGRldikpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDR4XG4iLCBiZTE2X3RvX2NwdSh0YXJnZXQtPnBhdGgucGtleSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0eFxuIiwgYmUxNl90b19jcHUodGFyZ2V0LT5wa2V5KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2dpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMjQ3NCwxNSArMjU5NywxNiBAQAogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGRldikpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXBJNlxuIiwgdGFyZ2V0LT5wYXRoLnNnaWQucmF3KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlcEk2XG4iLCB0YXJnZXQtPnNnaWQucmF3KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19kZ2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgY2hhciAqYnVmKQogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGRldikpOworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2ggPSAmdGFyZ2V0LT5jaFswXTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVwSTZcbiIsIHRhcmdldC0+cGF0aC5kZ2lkLnJhdyk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXBJNlxuIiwgY2gtPnBhdGguZGdpZC5yYXcpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X29yaWdfZGdpZChzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0yNDkwLDE1ICsyNjE0LDIxIEBACiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlcEk2XG4iLCB0YXJnZXQtPm9yaWdfZGdpZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXBJNlxuIiwgdGFyZ2V0LT5vcmlnX2RnaWQucmF3KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19yZXFfbGltKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGRldikpOworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2g7CisJaW50IGksIHJlcV9saW0gPSBJTlRfTUFYOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRhcmdldC0+cmVxX2xpbSk7CisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCQlyZXFfbGltID0gbWluKHJlcV9saW0sIGNoLT5yZXFfbGltKTsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlcV9saW0pOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3plcm9fcmVxX2xpbShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0yNTI1LDYgKzI2NTUsMTQgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2LT5uYW1lKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd19jaF9jb3VudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGFyZ2V0LT5jaF9jb3VudCk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfY29tcF92ZWN0b3Ioc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0yNTY4LDYgKzI3MDYsNyBAQAogc3RhdGljIERFVklDRV9BVFRSKHplcm9fcmVxX2xpbSwgICAgU19JUlVHTywgc2hvd196ZXJvX3JlcV9saW0sCSAgIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGxvY2FsX2liX3BvcnQsICAgU19JUlVHTywgc2hvd19sb2NhbF9pYl9wb3J0LCAgIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGxvY2FsX2liX2RldmljZSwgU19JUlVHTywgc2hvd19sb2NhbF9pYl9kZXZpY2UsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGNoX2NvdW50LCAgICAgICAgU19JUlVHTywgc2hvd19jaF9jb3VudCwgICAgICAgIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGNvbXBfdmVjdG9yLCAgICAgU19JUlVHTywgc2hvd19jb21wX3ZlY3RvciwgICAgIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHRsX3JldHJ5X2NvdW50LCAgU19JUlVHTywgc2hvd190bF9yZXRyeV9jb3VudCwgIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGNtZF9zZ19lbnRyaWVzLCAgU19JUlVHTywgc2hvd19jbWRfc2dfZW50cmllcywgIE5VTEwpOwpAQCAtMjU4NSw2ICsyNzI0LDcgQEAKIAkmZGV2X2F0dHJfemVyb19yZXFfbGltLAogCSZkZXZfYXR0cl9sb2NhbF9pYl9wb3J0LAogCSZkZXZfYXR0cl9sb2NhbF9pYl9kZXZpY2UsCisJJmRldl9hdHRyX2NoX2NvdW50LAogCSZkZXZfYXR0cl9jb21wX3ZlY3RvciwKIAkmZGV2X2F0dHJfdGxfcmV0cnlfY291bnQsCiAJJmRldl9hdHRyX2NtZF9zZ19lbnRyaWVzLApAQCAtMjYwMCw3ICsyNzQwLDcgQEAKIAkuaW5mbwkJCQk9IHNycF90YXJnZXRfaW5mbywKIAkucXVldWVjb21tYW5kCQkJPSBzcnBfcXVldWVjb21tYW5kLAogCS5jaGFuZ2VfcXVldWVfZGVwdGggICAgICAgICAgICAgPSBzcnBfY2hhbmdlX3F1ZXVlX2RlcHRoLAotCS5jaGFuZ2VfcXVldWVfdHlwZSAgICAgICAgICAgICAgPSBzcnBfY2hhbmdlX3F1ZXVlX3R5cGUsCisJLmNoYW5nZV9xdWV1ZV90eXBlICAgICAgICAgICAgICA9IHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUsCiAJLmVoX2Fib3J0X2hhbmRsZXIJCT0gc3JwX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcgk9IHNycF9yZXNldF9kZXZpY2UsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgkJPSBzcnBfcmVzZXRfaG9zdCwKQEAgLTI2MTAsMTQgKzI3NTAsMjggQEAKIAkudGhpc19pZAkJCT0gLTEsCiAJLmNtZF9wZXJfbHVuCQkJPSBTUlBfREVGQVVMVF9DTURfU1FfU0laRSwKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAotCS5zaG9zdF9hdHRycwkJCT0gc3JwX2hvc3RfYXR0cnMKKwkuc2hvc3RfYXR0cnMJCQk9IHNycF9ob3N0X2F0dHJzLAorCS51c2VfYmxrX3RhZ3MJCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCQk9IDEsCiB9OwogCitzdGF0aWMgaW50IHNycF9zZGV2X2NvdW50KHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCWludCBjID0gMDsKKworCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBob3N0KQorCQljKys7CisKKwlyZXR1cm4gYzsKK30KKwogc3RhdGljIGludCBzcnBfYWRkX3RhcmdldChzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QsIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKIHsKIAlzdHJ1Y3Qgc3JwX3Jwb3J0X2lkZW50aWZpZXJzIGlkczsKIAlzdHJ1Y3Qgc3JwX3Jwb3J0ICpycG9ydDsKIAorCXRhcmdldC0+c3RhdGUgPSBTUlBfVEFSR0VUX1NDQU5OSU5HOwogCXNwcmludGYodGFyZ2V0LT50YXJnZXRfbmFtZSwgIlNSUC5UMTA6JTAxNmxsWCIsCiAJCSAodW5zaWduZWQgbG9uZyBsb25nKSBiZTY0X3RvX2NwdSh0YXJnZXQtPmlkX2V4dCkpOwogCkBAIC0yNjQwLDExICsyNzk0LDI2IEBACiAJbGlzdF9hZGRfdGFpbCgmdGFyZ2V0LT5saXN0LCAmaG9zdC0+dGFyZ2V0X2xpc3QpOwogCXNwaW5fdW5sb2NrKCZob3N0LT50YXJnZXRfbG9jayk7CiAKLQl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9MSVZFOwotCiAJc2NzaV9zY2FuX3RhcmdldCgmdGFyZ2V0LT5zY3NpX2hvc3QtPnNob3N0X2dlbmRldiwKIAkJCSAwLCB0YXJnZXQtPnNjc2lfaWQsIFNDQU5fV0lMRF9DQVJELCAwKTsKIAorCWlmICghdGFyZ2V0LT5jb25uZWN0ZWQgfHwgdGFyZ2V0LT5xcF9pbl9lcnJvcikgeworCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCB0YXJnZXQtPnNjc2lfaG9zdCwKKwkJCSAgICAgUEZYICJTQ1NJIHNjYW4gZmFpbGVkIC0gcmVtb3ZpbmcgU0NTSSBob3N0XG4iKTsKKwkJc3JwX3F1ZXVlX3JlbW92ZV93b3JrKHRhcmdldCk7CisJCWdvdG8gb3V0OworCX0KKworCXByX2RlYnVnKFBGWCAiJXM6IFNDU0kgc2NhbiBzdWNjZWVkZWQgLSBkZXRlY3RlZCAlZCBMVU5zXG4iLAorCQkgZGV2X25hbWUoJnRhcmdldC0+c2NzaV9ob3N0LT5zaG9zdF9nZW5kZXYpLAorCQkgc3JwX3NkZXZfY291bnQodGFyZ2V0LT5zY3NpX2hvc3QpKTsKKworCXNwaW5fbG9ja19pcnEoJnRhcmdldC0+bG9jayk7CisJaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9TQ0FOTklORykKKwkJdGFyZ2V0LT5zdGF0ZSA9IFNSUF9UQVJHRVRfTElWRTsKKwlzcGluX3VubG9ja19pcnEoJnRhcmdldC0+bG9jayk7CisKK291dDoKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjgwMSwxMSArMjk3MCwxNSBAQAogCQkJfQogCiAJCQlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgewotCQkJCXN0cmxjcHkoZGdpZCwgcCArIGkgKiAyLCAzKTsKLQkJCQl0YXJnZXQtPnBhdGguZGdpZC5yYXdbaV0gPSBzaW1wbGVfc3RydG91bChkZ2lkLCBOVUxMLCAxNik7CisJCQkJc3RybGNweShkZ2lkLCBwICsgaSAqIDIsIHNpemVvZihkZ2lkKSk7CisJCQkJaWYgKHNzY2FuZihkZ2lkLCAiJWhoeCIsCisJCQkJCSAgICZ0YXJnZXQtPm9yaWdfZGdpZC5yYXdbaV0pIDwgMSkgeworCQkJCQlyZXQgPSAtRUlOVkFMOworCQkJCQlrZnJlZShwKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQogCQkJfQogCQkJa2ZyZWUocCk7Ci0JCQltZW1jcHkodGFyZ2V0LT5vcmlnX2RnaWQsIHRhcmdldC0+cGF0aC5kZ2lkLnJhdywgMTYpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTUlBfT1BUX1BLRVk6CkBAIC0yODEzLDcgKzI5ODYsNyBAQAogCQkJCXByX3dhcm4oImJhZCBQX0tleSBwYXJhbWV0ZXIgJyVzJ1xuIiwgcCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQl0YXJnZXQtPnBhdGgucGtleSA9IGNwdV90b19iZTE2KHRva2VuKTsKKwkJCXRhcmdldC0+cGtleSA9IGNwdV90b19iZTE2KHRva2VuKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU1JQX09QVF9TRVJWSUNFX0lEOgpAQCAtMjgyMyw3ICsyOTk2LDYgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCXRhcmdldC0+c2VydmljZV9pZCA9IGNwdV90b19iZTY0KHNpbXBsZV9zdHJ0b3VsbChwLCBOVUxMLCAxNikpOwotCQkJdGFyZ2V0LT5wYXRoLnNlcnZpY2VfaWQgPSB0YXJnZXQtPnNlcnZpY2VfaWQ7CiAJCQlrZnJlZShwKTsKIAkJCWJyZWFrOwogCkBAIC0yOTYwLDkgKzMxMzIsMTEgQEAKIAkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpOwogCXN0cnVjdCBTY3NpX0hvc3QgKnRhcmdldF9ob3N0OwogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldDsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoOwogCXN0cnVjdCBzcnBfZGV2aWNlICpzcnBfZGV2ID0gaG9zdC0+c3JwX2RldjsKIAlzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiA9IHNycF9kZXYtPmRldjsKLQlpbnQgcmV0OworCWludCByZXQsIG5vZGVfaWR4LCBub2RlLCBjcHUsIGk7CisJYm9vbCBtdWx0aWNoID0gZmFsc2U7CiAKIAl0YXJnZXRfaG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmc3JwX3RlbXBsYXRlLAogCQkJCSAgICAgIHNpemVvZiAoc3RydWN0IHNycF90YXJnZXRfcG9ydCkpOwpAQCAtMjk4OCwxMiArMzE2MiwyMiBAQAogCXRhcmdldC0+dGxfcmV0cnlfY291bnQJPSA3OwogCXRhcmdldC0+cXVldWVfc2l6ZQk9IFNSUF9ERUZBVUxUX1FVRVVFX1NJWkU7CiAKKwkvKgorCSAqIEF2b2lkIHRoYXQgdGhlIFNDU0kgaG9zdCBjYW4gYmUgcmVtb3ZlZCBieSBzcnBfcmVtb3ZlX3RhcmdldCgpCisJICogYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KKwkgKi8KKwlzY3NpX2hvc3RfZ2V0KHRhcmdldC0+c2NzaV9ob3N0KTsKKwogCW11dGV4X2xvY2soJmhvc3QtPmFkZF90YXJnZXRfbXV0ZXgpOwogCiAJcmV0ID0gc3JwX3BhcnNlX29wdGlvbnMoYnVmLCB0YXJnZXQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCisJcmV0ID0gc2NzaV9pbml0X3NoYXJlZF90YWdfbWFwKHRhcmdldF9ob3N0LCB0YXJnZXRfaG9zdC0+Y2FuX3F1ZXVlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKwogCXRhcmdldC0+cmVxX3Jpbmdfc2l6ZSA9IHRhcmdldC0+cXVldWVfc2l6ZSAtIFNSUF9UU0tfTUdNVF9TUV9TSVpFOwogCiAJaWYgKCFzcnBfY29ubl91bmlxdWUodGFyZ2V0LT5zcnBfaG9zdCwgdGFyZ2V0KSkgewpAQCAtMzAyMiw1OSArMzIwNiwxMTUgQEAKIAlJTklUX1dPUksoJnRhcmdldC0+dGxfZXJyX3dvcmssIHNycF90bF9lcnJfd29yayk7CiAJSU5JVF9XT1JLKCZ0YXJnZXQtPnJlbW92ZV93b3JrLCBzcnBfcmVtb3ZlX3dvcmspOwogCXNwaW5fbG9ja19pbml0KCZ0YXJnZXQtPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPmZyZWVfdHgpOwotCXJldCA9IHNycF9hbGxvY19yZXFfZGF0YSh0YXJnZXQpOworCXJldCA9IGliX3F1ZXJ5X2dpZChpYmRldiwgaG9zdC0+cG9ydCwgMCwgJnRhcmdldC0+c2dpZCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJfZnJlZV9tZW07CisJCWdvdG8gZXJyOwogCi0JcmV0ID0gaWJfcXVlcnlfZ2lkKGliZGV2LCBob3N0LT5wb3J0LCAwLCAmdGFyZ2V0LT5wYXRoLnNnaWQpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX2ZyZWVfbWVtOworCXJldCA9IC1FTk9NRU07CisJdGFyZ2V0LT5jaF9jb3VudCA9IG1heF90KHVuc2lnbmVkLCBudW1fb25saW5lX25vZGVzKCksCisJCQkJIG1pbihjaF9jb3VudCA/IDoKKwkJCQkgICAgIG1pbig0ICogbnVtX29ubGluZV9ub2RlcygpLAorCQkJCQkgaWJkZXYtPm51bV9jb21wX3ZlY3RvcnMpLAorCQkJCSAgICAgbnVtX29ubGluZV9jcHVzKCkpKTsKKwl0YXJnZXQtPmNoID0ga2NhbGxvYyh0YXJnZXQtPmNoX2NvdW50LCBzaXplb2YoKnRhcmdldC0+Y2gpLAorCQkJICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhcmdldC0+Y2gpCisJCWdvdG8gZXJyOwogCi0JcmV0ID0gc3JwX2NyZWF0ZV90YXJnZXRfaWIodGFyZ2V0KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9mcmVlX21lbTsKKwlub2RlX2lkeCA9IDA7CisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQljb25zdCBpbnQgY2hfc3RhcnQgPSAobm9kZV9pZHggKiB0YXJnZXQtPmNoX2NvdW50IC8KKwkJCQkgICAgICBudW1fb25saW5lX25vZGVzKCkpOworCQljb25zdCBpbnQgY2hfZW5kID0gKChub2RlX2lkeCArIDEpICogdGFyZ2V0LT5jaF9jb3VudCAvCisJCQkJICAgIG51bV9vbmxpbmVfbm9kZXMoKSk7CisJCWNvbnN0IGludCBjdl9zdGFydCA9IChub2RlX2lkeCAqIGliZGV2LT5udW1fY29tcF92ZWN0b3JzIC8KKwkJCQkgICAgICBudW1fb25saW5lX25vZGVzKCkgKyB0YXJnZXQtPmNvbXBfdmVjdG9yKQorCQkJCSAgICAgJSBpYmRldi0+bnVtX2NvbXBfdmVjdG9yczsKKwkJY29uc3QgaW50IGN2X2VuZCA9ICgobm9kZV9pZHggKyAxKSAqIGliZGV2LT5udW1fY29tcF92ZWN0b3JzIC8KKwkJCQkgICAgbnVtX29ubGluZV9ub2RlcygpICsgdGFyZ2V0LT5jb21wX3ZlY3RvcikKKwkJCQkgICAlIGliZGV2LT5udW1fY29tcF92ZWN0b3JzOworCQlpbnQgY3B1X2lkeCA9IDA7CiAKLQlyZXQgPSBzcnBfbmV3X2NtX2lkKHRhcmdldCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfZnJlZV9pYjsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJCWlmIChjcHVfdG9fbm9kZShjcHUpICE9IG5vZGUpCisJCQkJY29udGludWU7CisJCQlpZiAoY2hfc3RhcnQgKyBjcHVfaWR4ID49IGNoX2VuZCkKKwkJCQljb250aW51ZTsKKwkJCWNoID0gJnRhcmdldC0+Y2hbY2hfc3RhcnQgKyBjcHVfaWR4XTsKKwkJCWNoLT50YXJnZXQgPSB0YXJnZXQ7CisJCQljaC0+Y29tcF92ZWN0b3IgPSBjdl9zdGFydCA9PSBjdl9lbmQgPyBjdl9zdGFydCA6CisJCQkJY3Zfc3RhcnQgKyBjcHVfaWR4ICUgKGN2X2VuZCAtIGN2X3N0YXJ0KTsKKwkJCXNwaW5fbG9ja19pbml0KCZjaC0+bG9jayk7CisJCQlJTklUX0xJU1RfSEVBRCgmY2gtPmZyZWVfdHgpOworCQkJcmV0ID0gc3JwX25ld19jbV9pZChjaCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX2Rpc2Nvbm5lY3Q7CiAKLQlyZXQgPSBzcnBfY29ubmVjdF90YXJnZXQodGFyZ2V0KTsKLQlpZiAocmV0KSB7Ci0JCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCi0JCQkgICAgIFBGWCAiQ29ubmVjdGlvbiBmYWlsZWRcbiIpOwotCQlnb3RvIGVycl9jbV9pZDsKKwkJCXJldCA9IHNycF9jcmVhdGVfY2hfaWIoY2gpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycl9kaXNjb25uZWN0OworCisJCQlyZXQgPSBzcnBfYWxsb2NfcmVxX2RhdGEoY2gpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycl9kaXNjb25uZWN0OworCisJCQlyZXQgPSBzcnBfY29ubmVjdF9jaChjaCwgbXVsdGljaCk7CisJCQlpZiAocmV0KSB7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwKKwkJCQkJICAgICBQRlggIkNvbm5lY3Rpb24gJWQvJWQgZmFpbGVkXG4iLAorCQkJCQkgICAgIGNoX3N0YXJ0ICsgY3B1X2lkeCwKKwkJCQkJICAgICB0YXJnZXQtPmNoX2NvdW50KTsKKwkJCQlpZiAobm9kZV9pZHggPT0gMCAmJiBjcHVfaWR4ID09IDApIHsKKwkJCQkJZ290byBlcnJfZGlzY29ubmVjdDsKKwkJCQl9IGVsc2UgeworCQkJCQlzcnBfZnJlZV9jaF9pYih0YXJnZXQsIGNoKTsKKwkJCQkJc3JwX2ZyZWVfcmVxX2RhdGEodGFyZ2V0LCBjaCk7CisJCQkJCXRhcmdldC0+Y2hfY291bnQgPSBjaCAtIHRhcmdldC0+Y2g7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJbXVsdGljaCA9IHRydWU7CisJCQljcHVfaWR4Kys7CisJCX0KKwkJbm9kZV9pZHgrKzsKIAl9CiAKKwl0YXJnZXQtPnNjc2lfaG9zdC0+bnJfaHdfcXVldWVzID0gdGFyZ2V0LT5jaF9jb3VudDsKKwogCXJldCA9IHNycF9hZGRfdGFyZ2V0KGhvc3QsIHRhcmdldCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfZGlzY29ubmVjdDsKIAotCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCi0JCSAgICAgIm5ldyB0YXJnZXQ6IGlkX2V4dCAlMDE2bGx4IGlvY19ndWlkICUwMTZsbHggcGtleSAlMDR4IHNlcnZpY2VfaWQgJTAxNmxseCBzZ2lkICVwSTYgZGdpZCAlcEk2XG4iLAotCQkgICAgIGJlNjRfdG9fY3B1KHRhcmdldC0+aWRfZXh0KSwKLQkJICAgICBiZTY0X3RvX2NwdSh0YXJnZXQtPmlvY19ndWlkKSwKLQkJICAgICBiZTE2X3RvX2NwdSh0YXJnZXQtPnBhdGgucGtleSksCi0JCSAgICAgYmU2NF90b19jcHUodGFyZ2V0LT5zZXJ2aWNlX2lkKSwKLQkJICAgICB0YXJnZXQtPnBhdGguc2dpZC5yYXcsIHRhcmdldC0+cGF0aC5kZ2lkLnJhdyk7CisJaWYgKHRhcmdldC0+c3RhdGUgIT0gU1JQX1RBUkdFVF9SRU1PVkVEKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCisJCQkgICAgICJuZXcgdGFyZ2V0OiBpZF9leHQgJTAxNmxseCBpb2NfZ3VpZCAlMDE2bGx4IHBrZXkgJTA0eCBzZXJ2aWNlX2lkICUwMTZsbHggc2dpZCAlcEk2IGRnaWQgJXBJNlxuIiwKKwkJCSAgICAgYmU2NF90b19jcHUodGFyZ2V0LT5pZF9leHQpLAorCQkJICAgICBiZTY0X3RvX2NwdSh0YXJnZXQtPmlvY19ndWlkKSwKKwkJCSAgICAgYmUxNl90b19jcHUodGFyZ2V0LT5wa2V5KSwKKwkJCSAgICAgYmU2NF90b19jcHUodGFyZ2V0LT5zZXJ2aWNlX2lkKSwKKwkJCSAgICAgdGFyZ2V0LT5zZ2lkLnJhdywgdGFyZ2V0LT5vcmlnX2RnaWQucmF3KTsKKwl9CiAKIAlyZXQgPSBjb3VudDsKIAogb3V0OgogCW11dGV4X3VubG9jaygmaG9zdC0+YWRkX3RhcmdldF9tdXRleCk7CisKKwlzY3NpX2hvc3RfcHV0KHRhcmdldC0+c2NzaV9ob3N0KTsKKwogCXJldHVybiByZXQ7CiAKIGVycl9kaXNjb25uZWN0OgogCXNycF9kaXNjb25uZWN0X3RhcmdldCh0YXJnZXQpOwogCi1lcnJfY21faWQ6Ci0JaWJfZGVzdHJveV9jbV9pZCh0YXJnZXQtPmNtX2lkKTsKKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCWNoID0gJnRhcmdldC0+Y2hbaV07CisJCXNycF9mcmVlX2NoX2liKHRhcmdldCwgY2gpOworCQlzcnBfZnJlZV9yZXFfZGF0YSh0YXJnZXQsIGNoKTsKKwl9CiAKLWVycl9mcmVlX2liOgotCXNycF9mcmVlX3RhcmdldF9pYih0YXJnZXQpOwotCi1lcnJfZnJlZV9tZW06Ci0Jc3JwX2ZyZWVfcmVxX2RhdGEodGFyZ2V0KTsKKwlrZnJlZSh0YXJnZXQtPmNoKTsKIAogZXJyOgogCXNjc2lfaG9zdF9wdXQodGFyZ2V0X2hvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaAppbmRleCBlNDZlY2IxLi5hNjExNTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaApAQCAtNzAsOSArNzAsMTIgQEAKIAogCUxPQ0FMX0lOVl9XUl9JRF9NQVNLCT0gMSwKIAlGQVNUX1JFR19XUl9JRF9NQVNLCT0gMiwKKworCVNSUF9MQVNUX1dSX0lECQk9IDB4ZmZmZmZmZmNVLAogfTsKIAogZW51bSBzcnBfdGFyZ2V0X3N0YXRlIHsKKwlTUlBfVEFSR0VUX1NDQU5OSU5HLAogCVNSUF9UQVJHRVRfTElWRSwKIAlTUlBfVEFSR0VUX1JFTU9WRUQsCiB9OwpAQCAtMTE1LDcgKzExOCw2IEBACiB9OwogCiBzdHJ1Y3Qgc3JwX3JlcXVlc3QgewotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICAgICAgICpzY21uZDsKIAlzdHJ1Y3Qgc3JwX2l1CSAgICAgICAqY21kOwogCXVuaW9uIHsKQEAgLTEyNiwyNCArMTI4LDYyIEBACiAJc3RydWN0IHNycF9kaXJlY3RfYnVmICAqaW5kaXJlY3RfZGVzYzsKIAlkbWFfYWRkcl90CQlpbmRpcmVjdF9kbWFfYWRkcjsKIAlzaG9ydAkJCW5tZGVzYzsKLQlzaG9ydAkJCWluZGV4OwogfTsKIAotc3RydWN0IHNycF90YXJnZXRfcG9ydCB7CisvKioKKyAqIHN0cnVjdCBzcnBfcmRtYV9jaAorICogQGNvbXBfdmVjdG9yOiBDb21wbGV0aW9uIHZlY3RvciB1c2VkIGJ5IHRoaXMgUkRNQSBjaGFubmVsLgorICovCitzdHJ1Y3Qgc3JwX3JkbWFfY2ggewogCS8qIFRoZXNlIGFyZSBSVyBpbiB0aGUgaG90IHBhdGgsIGFuZCBjb21tb25seSB1c2VkIHRvZ2V0aGVyICovCiAJc3RydWN0IGxpc3RfaGVhZAlmcmVlX3R4OwotCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9yZXFzOwogCXNwaW5sb2NrX3QJCWxvY2s7CiAJczMyCQkJcmVxX2xpbTsKIAogCS8qIFRoZXNlIGFyZSByZWFkLW9ubHkgaW4gdGhlIGhvdCBwYXRoICovCi0Jc3RydWN0IGliX2NxCSAgICAgICAqc2VuZF9jcSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCXN0cnVjdCBpYl9jcQkgICAgICAgKnNlbmRfY3E7CiAJc3RydWN0IGliX2NxCSAgICAgICAqcmVjdl9jcTsKIAlzdHJ1Y3QgaWJfcXAJICAgICAgICpxcDsKIAl1bmlvbiB7CiAJCXN0cnVjdCBpYl9mbXJfcG9vbCAgICAgKmZtcl9wb29sOwogCQlzdHJ1Y3Qgc3JwX2ZyX3Bvb2wgICAgICpmcl9wb29sOwogCX07CisKKwkvKiBFdmVyeXRoaW5nIGFib3ZlIHRoaXMgcG9pbnQgaXMgdXNlZCBpbiB0aGUgaG90IHBhdGggb2YKKwkgKiBjb21tYW5kIHByb2Nlc3NpbmcuIFRyeSB0byBrZWVwIHRoZW0gcGFja2VkIGludG8gY2FjaGVsaW5lcy4KKwkgKi8KKworCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7CisJaW50CQkJc3RhdHVzOworCisJc3RydWN0IGliX3NhX3BhdGhfcmVjCXBhdGg7CisJc3RydWN0IGliX3NhX3F1ZXJ5ICAgICAqcGF0aF9xdWVyeTsKKwlpbnQJCQlwYXRoX3F1ZXJ5X2lkOworCisJc3RydWN0IGliX2NtX2lkCSAgICAgICAqY21faWQ7CisJc3RydWN0IHNycF9pdQkgICAgICAqKnR4X3Jpbmc7CisJc3RydWN0IHNycF9pdQkgICAgICAqKnJ4X3Jpbmc7CisJc3RydWN0IHNycF9yZXF1ZXN0ICAgICAqcmVxX3Jpbmc7CisJaW50CQkJbWF4X3RpX2l1X2xlbjsKKwlpbnQJCQljb21wX3ZlY3RvcjsKKworCXN0cnVjdCBjb21wbGV0aW9uCXRza19tZ210X2RvbmU7CisJdTgJCQl0c2tfbWdtdF9zdGF0dXM7Cit9OworCisvKioKKyAqIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQKKyAqIEBjb21wX3ZlY3RvcjogQ29tcGxldGlvbiB2ZWN0b3IgdXNlZCBieSB0aGUgZmlyc3QgUkRNQSBjaGFubmVsIGNyZWF0ZWQgZm9yCisgKiAgIHRoaXMgdGFyZ2V0IHBvcnQuCisgKi8KK3N0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgeworCS8qIHJlYWQgYW5kIHdyaXR0ZW4gaW4gdGhlIGhvdCBwYXRoICovCisJc3BpbmxvY2tfdAkJbG9jazsKKworCS8qIHJlYWQgb25seSBpbiB0aGUgaG90IHBhdGggKi8KKwlzdHJ1Y3Qgc3JwX3JkbWFfY2gJKmNoOworCXUzMgkJCWNoX2NvdW50OwogCXUzMgkJCWxrZXk7CiAJdTMyCQkJcmtleTsKIAllbnVtIHNycF90YXJnZXRfc3RhdGUJc3RhdGU7CkBAIC0xNTIsMTAgKzE5Miw4IEBACiAJdW5zaWduZWQgaW50CQlpbmRpcmVjdF9zaXplOwogCWJvb2wJCQlhbGxvd19leHRfc2c7CiAKLQkvKiBFdmVyeXRoaW5nIGFib3ZlIHRoaXMgcG9pbnQgaXMgdXNlZCBpbiB0aGUgaG90IHBhdGggb2YKLQkgKiBjb21tYW5kIHByb2Nlc3NpbmcuIFRyeSB0byBrZWVwIHRoZW0gcGFja2VkIGludG8gY2FjaGVsaW5lcy4KLQkgKi8KLQorCS8qIG90aGVyIG1lbWJlciB2YXJpYWJsZXMgKi8KKwl1bmlvbiBpYl9naWQJCXNnaWQ7CiAJX19iZTY0CQkJaWRfZXh0OwogCV9fYmU2NAkJCWlvY19ndWlkOwogCV9fYmU2NAkJCXNlcnZpY2VfaWQ7CkBAIC0xNzIsMzQgKzIxMCwxOSBAQAogCWludAkJCWNvbXBfdmVjdG9yOwogCWludAkJCXRsX3JldHJ5X2NvdW50OwogCi0Jc3RydWN0IGliX3NhX3BhdGhfcmVjCXBhdGg7Ci0JX19iZTE2CQkJb3JpZ19kZ2lkWzhdOwotCXN0cnVjdCBpYl9zYV9xdWVyeSAgICAgKnBhdGhfcXVlcnk7Ci0JaW50CQkJcGF0aF9xdWVyeV9pZDsKKwl1bmlvbiBpYl9naWQJCW9yaWdfZGdpZDsKKwlfX2JlMTYJCQlwa2V5OwogCiAJdTMyCQkJcnFfdG1vX2ppZmZpZXM7CiAJYm9vbAkJCWNvbm5lY3RlZDsKIAotCXN0cnVjdCBpYl9jbV9pZAkgICAgICAgKmNtX2lkOwotCi0JaW50CQkJbWF4X3RpX2l1X2xlbjsKLQogCWludAkJCXplcm9fcmVxX2xpbTsKIAotCXN0cnVjdCBzcnBfaXUJICAgICAgICoqdHhfcmluZzsKLQlzdHJ1Y3Qgc3JwX2l1CSAgICAgICAqKnJ4X3Jpbmc7Ci0Jc3RydWN0IHNycF9yZXF1ZXN0CSpyZXFfcmluZzsKLQogCXN0cnVjdCB3b3JrX3N0cnVjdAl0bF9lcnJfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmVtb3ZlX3dvcms7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0Jc3RydWN0IGNvbXBsZXRpb24JZG9uZTsKLQlpbnQJCQlzdGF0dXM7CiAJYm9vbAkJCXFwX2luX2Vycm9yOwotCi0Jc3RydWN0IGNvbXBsZXRpb24JdHNrX21nbXRfZG9uZTsKLQl1OAkJCXRza19tZ210X3N0YXR1czsKIH07CiAKIHN0cnVjdCBzcnBfaXUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9LY29uZmlnIGIvZHJpdmVycy9pb21tdS9LY29uZmlnCmluZGV4IGRkNTExMjIuLjZkYmZiYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lvbW11L0tjb25maWcKQEAgLTE2MywxNCArMTYzLDE0IEBACiAJICBoYXJkd2FyZSBpbmNsdWRlZCBvbiBUZWdyYSBTb0NzLgogCiBjb25maWcgVEVHUkFfSU9NTVVfU01NVQotCWJvb2wgIlRlZ3JhIFNNTVUgSU9NTVUgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfVEVHUkEgJiYgVEVHUkFfQUhCCisJYm9vbCAiTlZJRElBIFRlZ3JhIFNNTVUgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfVEVHUkEKKwlkZXBlbmRzIG9uIFRFR1JBX0FIQgorCWRlcGVuZHMgb24gVEVHUkFfTUMKIAlzZWxlY3QgSU9NTVVfQVBJCiAJaGVscAotCSAgRW5hYmxlcyBzdXBwb3J0IGZvciByZW1hcHBpbmcgZGlzY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkKLQkgIHNoYXJlZCB3aXRoIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGludG8gY29udGlndW91cyBJL08gdmlydHVhbAotCSAgc3BhY2UgdGhyb3VnaCB0aGUgU01NVSAoU3lzdGVtIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQpCi0JICBoYXJkd2FyZSBpbmNsdWRlZCBvbiBUZWdyYSBTb0NzLgorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIElPTU1VIGhhcmR3YXJlIChTTU1VKSBmb3VuZCBvbiBOVklESUEgVGVncmEKKwkgIFNvQ3MgKFRlZ3JhMzAgdXAgdG8gVGVncmExMjQpLgogCiBjb25maWcgRVhZTk9TX0lPTU1VCiAJYm9vbCAiRXh5bm9zIElPTU1VIFN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZF9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9hbWRfaW9tbXUuYwppbmRleCA1MDVhOWFkLi4yZDg0YzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2FtZF9pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMKQEAgLTM0MjQsNiArMzQyNCw3IEBACiAJLmRldGFjaF9kZXYgPSBhbWRfaW9tbXVfZGV0YWNoX2RldmljZSwKIAkubWFwID0gYW1kX2lvbW11X21hcCwKIAkudW5tYXAgPSBhbWRfaW9tbXVfdW5tYXAsCisJLm1hcF9zZyA9IGRlZmF1bHRfaW9tbXVfbWFwX3NnLAogCS5pb3ZhX3RvX3BoeXMgPSBhbWRfaW9tbXVfaW92YV90b19waHlzLAogCS5wZ3NpemVfYml0bWFwCT0gQU1EX0lPTU1VX1BHU0laRVMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hcm0tc21tdS5jIGIvZHJpdmVycy9pb21tdS9hcm0tc21tdS5jCmluZGV4IDYwNTU4ZjcuLmUzOTNhZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYworKysgYi9kcml2ZXJzL2lvbW11L2FybS1zbW11LmMKQEAgLTE2NTIsNiArMTY1Miw3IEBACiAJLmRldGFjaF9kZXYJPSBhcm1fc21tdV9kZXRhY2hfZGV2LAogCS5tYXAJCT0gYXJtX3NtbXVfbWFwLAogCS51bm1hcAkJPSBhcm1fc21tdV91bm1hcCwKKwkubWFwX3NnCQk9IGRlZmF1bHRfaW9tbXVfbWFwX3NnLAogCS5pb3ZhX3RvX3BoeXMJPSBhcm1fc21tdV9pb3ZhX3RvX3BoeXMsCiAJLmFkZF9kZXZpY2UJPSBhcm1fc21tdV9hZGRfZGV2aWNlLAogCS5yZW1vdmVfZGV2aWNlCT0gYXJtX3NtbXVfcmVtb3ZlX2RldmljZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvZXh5bm9zLWlvbW11LmMgYi9kcml2ZXJzL2lvbW11L2V4eW5vcy1pb21tdS5jCmluZGV4IDc0MjMzMTguLjI4MzcyYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvZXh5bm9zLWlvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9leHlub3MtaW9tbXUuYwpAQCAtMTE3OCw2ICsxMTc4LDcgQEAKIAkuZGV0YWNoX2RldiA9IGV4eW5vc19pb21tdV9kZXRhY2hfZGV2aWNlLAogCS5tYXAgPSBleHlub3NfaW9tbXVfbWFwLAogCS51bm1hcCA9IGV4eW5vc19pb21tdV91bm1hcCwKKwkubWFwX3NnID0gZGVmYXVsdF9pb21tdV9tYXBfc2csCiAJLmlvdmFfdG9fcGh5cyA9IGV4eW5vc19pb21tdV9pb3ZhX3RvX3BoeXMsCiAJLmFkZF9kZXZpY2UgPSBleHlub3NfaW9tbXVfYWRkX2RldmljZSwKIAkucmVtb3ZlX2RldmljZSA9IGV4eW5vc19pb21tdV9yZW1vdmVfZGV2aWNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jCmluZGV4IGEyN2Q2Y2IuLjAyY2QyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMKQEAgLTQ0NjcsNiArNDQ2Nyw3IEBACiAJLmRldGFjaF9kZXYJPSBpbnRlbF9pb21tdV9kZXRhY2hfZGV2aWNlLAogCS5tYXAJCT0gaW50ZWxfaW9tbXVfbWFwLAogCS51bm1hcAkJPSBpbnRlbF9pb21tdV91bm1hcCwKKwkubWFwX3NnCQk9IGRlZmF1bHRfaW9tbXVfbWFwX3NnLAogCS5pb3ZhX3RvX3BoeXMJPSBpbnRlbF9pb21tdV9pb3ZhX3RvX3BoeXMsCiAJLmFkZF9kZXZpY2UJPSBpbnRlbF9pb21tdV9hZGRfZGV2aWNlLAogCS5yZW1vdmVfZGV2aWNlCT0gaW50ZWxfaW9tbXVfcmVtb3ZlX2RldmljZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUuYwppbmRleCBlZDhiMDQ4Li4wMmU0MzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2lvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9pb21tdS5jCkBAIC04MTgsNyArODE4LDE1IEBACiAJCWtmcmVlKG5iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JcmV0dXJuIGJ1c19mb3JfZWFjaF9kZXYoYnVzLCBOVUxMLCAmY2IsIGFkZF9pb21tdV9ncm91cCk7CisKKwllcnIgPSBidXNfZm9yX2VhY2hfZGV2KGJ1cywgTlVMTCwgJmNiLCBhZGRfaW9tbXVfZ3JvdXApOworCWlmIChlcnIpIHsKKwkJYnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoYnVzLCBuYik7CisJCWtmcmVlKG5iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC04MzYsMTMgKzg0NCwxOSBAQAogICovCiBpbnQgYnVzX3NldF9pb21tdShzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY29uc3Qgc3RydWN0IGlvbW11X29wcyAqb3BzKQogeworCWludCBlcnI7CisKIAlpZiAoYnVzLT5pb21tdV9vcHMgIT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWJ1cy0+aW9tbXVfb3BzID0gb3BzOwogCiAJLyogRG8gSU9NTVUgc3BlY2lmaWMgc2V0dXAgZm9yIHRoaXMgYnVzLXR5cGUgKi8KLQlyZXR1cm4gaW9tbXVfYnVzX2luaXQoYnVzLCBvcHMpOworCWVyciA9IGlvbW11X2J1c19pbml0KGJ1cywgb3BzKTsKKwlpZiAoZXJyKQorCQlidXMtPmlvbW11X29wcyA9IE5VTEw7CisKKwlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYnVzX3NldF9pb21tdSk7CiAKQEAgLTExMjQsNiArMTEzOCwzOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tbXVfdW5tYXApOwogCitzaXplX3QgZGVmYXVsdF9pb21tdV9tYXBfc2coc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCisJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5lbnRzLCBpbnQgcHJvdCkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnM7CisJc2l6ZV90IG1hcHBlZCA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCWZvcl9lYWNoX3NnKHNnLCBzLCBuZW50cywgaSkgeworCQlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHNnX3BhZ2UocykpOworCisJCS8qIFdlIGFyZSBtYXBwaW5nIG9uIHBhZ2UgYm91bmRhcnlzLCBzbyBvZmZzZXQgbXVzdCBiZSAwICovCisJCWlmIChzLT5vZmZzZXQpCisJCQlnb3RvIG91dF9lcnI7CisKKwkJcmV0ID0gaW9tbXVfbWFwKGRvbWFpbiwgaW92YSArIG1hcHBlZCwgcGh5cywgcy0+bGVuZ3RoLCBwcm90KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2VycjsKKworCQltYXBwZWQgKz0gcy0+bGVuZ3RoOworCX0KKworCXJldHVybiBtYXBwZWQ7CisKK291dF9lcnI6CisJLyogdW5kbyBtYXBwaW5ncyBhbHJlYWR5IGRvbmUgKi8KKwlpb21tdV91bm1hcChkb21haW4sIGlvdmEsIG1hcHBlZCk7CisKKwlyZXR1cm4gMDsKKworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGVmYXVsdF9pb21tdV9tYXBfc2cpOwogCiBpbnQgaW9tbXVfZG9tYWluX3dpbmRvd19lbmFibGUoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1MzIgd25kX25yLAogCQkJICAgICAgIHBoeXNfYWRkcl90IHBhZGRyLCB1NjQgc2l6ZSwgaW50IHByb3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lwbW11LXZtc2EuYyBiL2RyaXZlcnMvaW9tbXUvaXBtbXUtdm1zYS5jCmluZGV4IDdkYWI1Y2IuLmU1MDljNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvaXBtbXUtdm1zYS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvaXBtbXUtdm1zYS5jCkBAIC0xMTI3LDYgKzExMjcsNyBAQAogCS5kZXRhY2hfZGV2ID0gaXBtbXVfZGV0YWNoX2RldmljZSwKIAkubWFwID0gaXBtbXVfbWFwLAogCS51bm1hcCA9IGlwbW11X3VubWFwLAorCS5tYXBfc2cgPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkuaW92YV90b19waHlzID0gaXBtbXVfaW92YV90b19waHlzLAogCS5hZGRfZGV2aWNlID0gaXBtbXVfYWRkX2RldmljZSwKIAkucmVtb3ZlX2RldmljZSA9IGlwbW11X3JlbW92ZV9kZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuYyBiL2RyaXZlcnMvaW9tbXUvaXJxX3JlbWFwcGluZy5jCmluZGV4IDc0YTE3NjcuLjJjM2Y1YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvaXJxX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvaW9tbXUvaXJxX3JlbWFwcGluZy5jCkBAIC01NiwxOSArNTYsMTMgQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXN0cnVjdCBtc2lfZGVzYyAqbXNpZGVzYzsKIAotCVdBUk5fT04oIWxpc3RfaXNfc2luZ3VsYXIoJmRldi0+bXNpX2xpc3QpKTsKIAltc2lkZXNjID0gbGlzdF9lbnRyeShkZXYtPm1zaV9saXN0Lm5leHQsIHN0cnVjdCBtc2lfZGVzYywgbGlzdCk7Ci0JV0FSTl9PTihtc2lkZXNjLT5pcnEpOwotCVdBUk5fT04obXNpZGVzYy0+bXNpX2F0dHJpYi5tdWx0aXBsZSk7Ci0JV0FSTl9PTihtc2lkZXNjLT5udmVjX3VzZWQpOwogCiAJaXJxID0gaXJxX2FsbG9jX2h3aXJxcyhudmVjLCBkZXZfdG9fbm9kZSgmZGV2LT5kZXYpKTsKIAlpZiAoaXJxID09IDApCiAJCXJldHVybiAtRU5PU1BDOwogCiAJbnZlY19wb3cyID0gX19yb3VuZHVwX3Bvd19vZl90d28obnZlYyk7Ci0JbXNpZGVzYy0+bnZlY191c2VkID0gbnZlYzsKLQltc2lkZXNjLT5tc2lfYXR0cmliLm11bHRpcGxlID0gaWxvZzIobnZlY19wb3cyKTsKIAlmb3IgKHN1Yl9oYW5kbGUgPSAwOyBzdWJfaGFuZGxlIDwgbnZlYzsgc3ViX2hhbmRsZSsrKSB7CiAJCWlmICghc3ViX2hhbmRsZSkgewogCQkJaW5kZXggPSBtc2lfYWxsb2NfcmVtYXBwZWRfaXJxKGRldiwgaXJxLCBudmVjX3BvdzIpOwpAQCAtOTYsOCArOTAsNiBAQAogCSAqIElSUXMgZnJvbSB0ZWFyaW5nIGRvd24gYWdhaW4gaW4gZGVmYXVsdF90ZWFyZG93bl9tc2lfaXJxcygpCiAJICovCiAJbXNpZGVzYy0+aXJxID0gMDsKLQltc2lkZXNjLT5udmVjX3VzZWQgPSAwOwotCW1zaWRlc2MtPm1zaV9hdHRyaWIubXVsdGlwbGUgPSAwOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvbXNtX2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L21zbV9pb21tdS5jCmluZGV4IDZlM2RjYzI4Li4xYzdiNzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L21zbV9pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvbXNtX2lvbW11LmMKQEAgLTY4MSw2ICs2ODEsNyBAQAogCS5kZXRhY2hfZGV2ID0gbXNtX2lvbW11X2RldGFjaF9kZXYsCiAJLm1hcCA9IG1zbV9pb21tdV9tYXAsCiAJLnVubWFwID0gbXNtX2lvbW11X3VubWFwLAorCS5tYXBfc2cgPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkuaW92YV90b19waHlzID0gbXNtX2lvbW11X2lvdmFfdG9fcGh5cywKIAkucGdzaXplX2JpdG1hcCA9IE1TTV9JT01NVV9QR1NJWkVTLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvb21hcC1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9vbWFwLWlvbW11LmMKaW5kZXggMzYyNzg4Ny4uMTgwMDNjMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvb21hcC1pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvb21hcC1pb21tdS5jCkBAIC0xMjg4LDYgKzEyODgsNyBAQAogCS5kZXRhY2hfZGV2CT0gb21hcF9pb21tdV9kZXRhY2hfZGV2LAogCS5tYXAJCT0gb21hcF9pb21tdV9tYXAsCiAJLnVubWFwCQk9IG9tYXBfaW9tbXVfdW5tYXAsCisJLm1hcF9zZwkJPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkuaW92YV90b19waHlzCT0gb21hcF9pb21tdV9pb3ZhX3RvX3BoeXMsCiAJLmFkZF9kZXZpY2UJPSBvbWFwX2lvbW11X2FkZF9kZXZpY2UsCiAJLnJlbW92ZV9kZXZpY2UJPSBvbWFwX2lvbW11X3JlbW92ZV9kZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L3NobW9iaWxlLWlvbW11LmMgYi9kcml2ZXJzL2lvbW11L3NobW9iaWxlLWlvbW11LmMKaW5kZXggMTMzM2U2ZmIuLmYxYjAwNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvc2htb2JpbGUtaW9tbXUuYworKysgYi9kcml2ZXJzL2lvbW11L3NobW9iaWxlLWlvbW11LmMKQEAgLTM2MSw2ICszNjEsNyBAQAogCS5kZXRhY2hfZGV2ID0gc2htb2JpbGVfaW9tbXVfZGV0YWNoX2RldmljZSwKIAkubWFwID0gc2htb2JpbGVfaW9tbXVfbWFwLAogCS51bm1hcCA9IHNobW9iaWxlX2lvbW11X3VubWFwLAorCS5tYXBfc2cgPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkuaW92YV90b19waHlzID0gc2htb2JpbGVfaW9tbXVfaW92YV90b19waHlzLAogCS5hZGRfZGV2aWNlID0gc2htb2JpbGVfaW9tbXVfYWRkX2RldmljZSwKIAkucGdzaXplX2JpdG1hcCA9IFNaXzFNIHwgU1pfNjRLIHwgU1pfNEssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L3RlZ3JhLXNtbXUuYyBiL2RyaXZlcnMvaW9tbXUvdGVncmEtc21tdS5jCmluZGV4IDNhZmRmNDMuLjZlMTM0YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvdGVncmEtc21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvdGVncmEtc21tdS5jCkBAIC0xLDEyOTUgKzEsNzMyIEBACiAvKgotICogSU9NTVUgQVBJIGZvciBTTU1VIGluIFRlZ3JhMzAKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTMsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2RlZmluZSBwcl9mbXQoZm10KQkiJXMoKTogIiBmbXQsIF9fZnVuY19fCi0KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9pb21tdS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNvYy90ZWdyYS9haGIuaD4KKyNpbmNsdWRlIDxzb2MvdGVncmEvbWMuaD4KIAotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KK3N0cnVjdCB0ZWdyYV9zbW11IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGRldmljZSAqZGV2OwogCi1lbnVtIHNtbXVfaHdncnAgewotCUhXR1JQX0FGSSwKLQlIV0dSUF9BVlBDLAotCUhXR1JQX0RDLAotCUhXR1JQX0RDQiwKLQlIV0dSUF9FUFAsCi0JSFdHUlBfRzIsCi0JSFdHUlBfSEMsCi0JSFdHUlBfSERBLAotCUhXR1JQX0lTUCwKLQlIV0dSUF9NUEUsCi0JSFdHUlBfTlYsCi0JSFdHUlBfTlYyLAotCUhXR1JQX1BQQ1MsCi0JSFdHUlBfU0FUQSwKLQlIV0dSUF9WREUsCi0JSFdHUlBfVkksCisJc3RydWN0IHRlZ3JhX21jICptYzsKKwljb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zb2MgKnNvYzsKIAotCUhXR1JQX0NPVU5ULAorCXVuc2lnbmVkIGxvbmcgKmFzaWRzOworCXN0cnVjdCBtdXRleCBsb2NrOwogCi0JSFdHUlBfRU5EID0gfjAsCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAotI2RlZmluZSBIV0dfQUZJCQkoMSA8PCBIV0dSUF9BRkkpCi0jZGVmaW5lIEhXR19BVlBDCSgxIDw8IEhXR1JQX0FWUEMpCi0jZGVmaW5lIEhXR19EQwkJKDEgPDwgSFdHUlBfREMpCi0jZGVmaW5lIEhXR19EQ0IJCSgxIDw8IEhXR1JQX0RDQikKLSNkZWZpbmUgSFdHX0VQUAkJKDEgPDwgSFdHUlBfRVBQKQotI2RlZmluZSBIV0dfRzIJCSgxIDw8IEhXR1JQX0cyKQotI2RlZmluZSBIV0dfSEMJCSgxIDw8IEhXR1JQX0hDKQotI2RlZmluZSBIV0dfSERBCQkoMSA8PCBIV0dSUF9IREEpCi0jZGVmaW5lIEhXR19JU1AJCSgxIDw8IEhXR1JQX0lTUCkKLSNkZWZpbmUgSFdHX01QRQkJKDEgPDwgSFdHUlBfTVBFKQotI2RlZmluZSBIV0dfTlYJCSgxIDw8IEhXR1JQX05WKQotI2RlZmluZSBIV0dfTlYyCQkoMSA8PCBIV0dSUF9OVjIpCi0jZGVmaW5lIEhXR19QUENTCSgxIDw8IEhXR1JQX1BQQ1MpCi0jZGVmaW5lIEhXR19TQVRBCSgxIDw8IEhXR1JQX1NBVEEpCi0jZGVmaW5lIEhXR19WREUJCSgxIDw8IEhXR1JQX1ZERSkKLSNkZWZpbmUgSFdHX1ZJCQkoMSA8PCBIV0dSUF9WSSkKLQotLyogYml0bWFwIG9mIHRoZSBwYWdlIHNpemVzIGN1cnJlbnRseSBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgU01NVV9JT01NVV9QR1NJWkVTCShTWl80SykKLQotI2RlZmluZSBTTU1VX0NPTkZJRwkJCQkweDEwCi0jZGVmaW5lIFNNTVVfQ09ORklHX0RJU0FCTEUJCQkwCi0jZGVmaW5lIFNNTVVfQ09ORklHX0VOQUJMRQkJCTEKLQotLyogUkVWSVNJVDogVG8gc3VwcG9ydCBtdWx0aXBsZSBNQ3MgKi8KLWVudW0gewotCV9NQyA9IDAsCitzdHJ1Y3QgdGVncmFfc21tdV9hcyB7CisJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOworCXN0cnVjdCB0ZWdyYV9zbW11ICpzbW11OworCXVuc2lnbmVkIGludCB1c2VfY291bnQ7CisJc3RydWN0IHBhZ2UgKmNvdW50OworCXN0cnVjdCBwYWdlICpwZDsKKwl1bnNpZ25lZCBpZDsKKwl1MzIgYXR0cjsKIH07CiAKLWVudW0gewotCV9UTEIgPSAwLAotCV9QVEMsCi19OwotCi0jZGVmaW5lIFNNTVVfQ0FDSEVfQ09ORklHX0JBU0UJCQkweDE0Ci0jZGVmaW5lIF9fU01NVV9DQUNIRV9DT05GSUcobWMsIGNhY2hlKQkJKFNNTVVfQ0FDSEVfQ09ORklHX0JBU0UgKyA0ICogY2FjaGUpCi0jZGVmaW5lIFNNTVVfQ0FDSEVfQ09ORklHKGNhY2hlKQkJX19TTU1VX0NBQ0hFX0NPTkZJRyhfTUMsIGNhY2hlKQotCi0jZGVmaW5lIFNNTVVfQ0FDSEVfQ09ORklHX1NUQVRTX1NISUZUCQkzMQotI2RlZmluZSBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19FTkFCTEUJCSgxIDw8IFNNTVVfQ0FDSEVfQ09ORklHX1NUQVRTX1NISUZUKQotI2RlZmluZSBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19URVNUX1NISUZUCTMwCi0jZGVmaW5lIFNNTVVfQ0FDSEVfQ09ORklHX1NUQVRTX1RFU1QJCSgxIDw8IFNNTVVfQ0FDSEVfQ09ORklHX1NUQVRTX1RFU1RfU0hJRlQpCi0KLSNkZWZpbmUgU01NVV9UTEJfQ09ORklHX0hJVF9VTkRFUl9NSVNTX19FTkFCTEUJKDEgPDwgMjkpCi0jZGVmaW5lIFNNTVVfVExCX0NPTkZJR19BQ1RJVkVfTElORVNfX1ZBTFVFCTB4MTAKLSNkZWZpbmUgU01NVV9UTEJfQ09ORklHX1JFU0VUX1ZBTAkJMHgyMDAwMDAxMAotCi0jZGVmaW5lIFNNTVVfUFRDX0NPTkZJR19DQUNIRV9fRU5BQkxFCQkoMSA8PCAyOSkKLSNkZWZpbmUgU01NVV9QVENfQ09ORklHX0lOREVYX01BUF9fUEFUVEVSTgkweDNmCi0jZGVmaW5lIFNNTVVfUFRDX0NPTkZJR19SRVNFVF9WQUwJCTB4MjAwMDAwM2YKLQotI2RlZmluZSBTTU1VX1BUQl9BU0lECQkJCTB4MWMKLSNkZWZpbmUgU01NVV9QVEJfQVNJRF9DVVJSRU5UX1NISUZUCQkwCi0KLSNkZWZpbmUgU01NVV9QVEJfREFUQQkJCQkweDIwCi0jZGVmaW5lIFNNTVVfUFRCX0RBVEFfUkVTRVRfVkFMCQkJMAotI2RlZmluZSBTTU1VX1BUQl9EQVRBX0FTSURfTk9OU0VDVVJFX1NISUZUCTI5Ci0jZGVmaW5lIFNNTVVfUFRCX0RBVEFfQVNJRF9XUklUQUJMRV9TSElGVAkzMAotI2RlZmluZSBTTU1VX1BUQl9EQVRBX0FTSURfUkVBREFCTEVfU0hJRlQJMzEKLQotI2RlZmluZSBTTU1VX1RMQl9GTFVTSAkJCQkweDMwCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX1ZBX01BVENIX0FMTAkJMAotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9TRUNUSU9OCQkyCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX1ZBX01BVENIX0dST1VQCQkzCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX0FTSURfU0hJRlQJCTI5Ci0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfRElTQUJMRQkwCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfRU5BQkxFCTEKLSNkZWZpbmUgU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSF9TSElGVAkJMzEKLQotI2RlZmluZSBTTU1VX1BUQ19GTFVTSAkJCQkweDM0Ci0jZGVmaW5lIFNNTVVfUFRDX0ZMVVNIX1RZUEVfQUxMCQkJMAotI2RlZmluZSBTTU1VX1BUQ19GTFVTSF9UWVBFX0FEUgkJCTEKLSNkZWZpbmUgU01NVV9QVENfRkxVU0hfQURSX1NISUZUCQk0Ci0KLSNkZWZpbmUgU01NVV9BU0lEX1NFQ1VSSVRZCQkJMHgzOAotCi0jZGVmaW5lIFNNTVVfU1RBVFNfQ0FDSEVfQ09VTlRfQkFTRQkJMHgxZjAKLQotI2RlZmluZSBTTU1VX1NUQVRTX0NBQ0hFX0NPVU5UKG1jLCBjYWNoZSwgaGl0bWlzcykJCVwKLQkoU01NVV9TVEFUU19DQUNIRV9DT1VOVF9CQVNFICsgOCAqIGNhY2hlICsgNCAqIGhpdG1pc3MpCi0KLSNkZWZpbmUgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMAkJMHgyMjgKLSNkZWZpbmUgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMQkJMHgyMmMKLSNkZWZpbmUgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMgkJMHgyMzAKLQotI2RlZmluZSBTTU1VX0FGSV9BU0lECTB4MjM4ICAgLyogUENJRSAqLwotI2RlZmluZSBTTU1VX0FWUENfQVNJRAkweDIzYyAgIC8qIEFWUCAqLwotI2RlZmluZSBTTU1VX0RDX0FTSUQJMHgyNDAgICAvKiBEaXNwbGF5IGNvbnRyb2xsZXIgKi8KLSNkZWZpbmUgU01NVV9EQ0JfQVNJRAkweDI0NCAgIC8qIERpc3BsYXkgY29udHJvbGxlciBCICovCi0jZGVmaW5lIFNNTVVfRVBQX0FTSUQJMHgyNDggICAvKiBFbmNvZGVyIHByZS1wcm9jZXNzb3IgKi8KLSNkZWZpbmUgU01NVV9HMl9BU0lECTB4MjRjICAgLyogMkQgZW5naW5lICovCi0jZGVmaW5lIFNNTVVfSENfQVNJRAkweDI1MCAgIC8qIEhvc3QxeCAqLwotI2RlZmluZSBTTU1VX0hEQV9BU0lECTB4MjU0ICAgLyogSGlnaC1kZWYgYXVkaW8gKi8KLSNkZWZpbmUgU01NVV9JU1BfQVNJRAkweDI1OCAgIC8qIEltYWdlIHNpZ25hbCBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgU01NVV9NUEVfQVNJRAkweDI2NCAgIC8qIE1QRUcgZW5jb2RlciAqLwotI2RlZmluZSBTTU1VX05WX0FTSUQJMHgyNjggICAvKiAoM0QpICovCi0jZGVmaW5lIFNNTVVfTlYyX0FTSUQJMHgyNmMgICAvKiAoM0QpICovCi0jZGVmaW5lIFNNTVVfUFBDU19BU0lECTB4MjcwICAgLyogQUhCICovCi0jZGVmaW5lIFNNTVVfU0FUQV9BU0lECTB4Mjc4ICAgLyogU0FUQSAqLwotI2RlZmluZSBTTU1VX1ZERV9BU0lECTB4MjdjICAgLyogVmlkZW8gZGVjb2RlciAqLwotI2RlZmluZSBTTU1VX1ZJX0FTSUQJMHgyODAgICAvKiBWaWRlbyBpbnB1dCAqLwotCi0jZGVmaW5lIFNNTVVfUERFX05FWFRfU0hJRlQJCTI4Ci0KLSNkZWZpbmUgU01NVV9UTEJfRkxVU0hfVkFfU0VDVElPTl9fTUFTSwkJMHhmZmMwMDAwMAotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9WQV9TRUNUSU9OX19TSElGVAkxMiAvKiByaWdodCBzaGlmdCAqLwotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9WQV9HUk9VUF9fTUFTSwkJMHhmZmZmYzAwMAotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9WQV9HUk9VUF9fU0hJRlQJCTEyIC8qIHJpZ2h0IHNoaWZ0ICovCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX1ZBKGlvdmEsIHdoaWNoKQlcCi0JKCgoKGlvdmEpICYgU01NVV9UTEJfRkxVU0hfVkFfIyN3aGljaCMjX19NQVNLKSA+PiBcCi0JCVNNTVVfVExCX0ZMVVNIX1ZBXyMjd2hpY2gjI19fU0hJRlQpIHwJXAotCVNNTVVfVExCX0ZMVVNIX1ZBX01BVENIXyMjd2hpY2gpCi0jZGVmaW5lIFNNTVVfUFRCX0FTSURfQ1VSKG4pCVwKLQkJKChuKSA8PCBTTU1VX1BUQl9BU0lEX0NVUlJFTlRfU0hJRlQpCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfZGlzYWJsZQkJXAotCQkoU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSF9ESVNBQkxFIDw8CVwKLQkJCVNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfU0hJRlQpCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfX0VOQUJMRQkJXAotCQkoU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSF9FTkFCTEUgPDwJXAotCQkJU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSF9TSElGVCkKLQotI2RlZmluZSBTTU1VX1BBR0VfU0hJRlQgMTIKLSNkZWZpbmUgU01NVV9QQUdFX1NJWkUJKDEgPDwgU01NVV9QQUdFX1NISUZUKQotI2RlZmluZSBTTU1VX1BBR0VfTUFTSwkoKDEgPDwgU01NVV9QQUdFX1NISUZUKSAtIDEpCi0KLSNkZWZpbmUgU01NVV9QRElSX0NPVU5UCTEwMjQKLSNkZWZpbmUgU01NVV9QRElSX1NJWkUJKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIFNNTVVfUERJUl9DT1VOVCkKLSNkZWZpbmUgU01NVV9QVEJMX0NPVU5UCTEwMjQKLSNkZWZpbmUgU01NVV9QVEJMX1NJWkUJKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIFNNTVVfUFRCTF9DT1VOVCkKLSNkZWZpbmUgU01NVV9QRElSX1NISUZUCTEyCi0jZGVmaW5lIFNNTVVfUERFX1NISUZUCTEyCi0jZGVmaW5lIFNNTVVfUFRFX1NISUZUCTEyCi0jZGVmaW5lIFNNTVVfUEZOX01BU0sJMHgwMDBmZmZmZgotCi0jZGVmaW5lIFNNTVVfQUREUl9UT19QRk4oYWRkcikJKChhZGRyKSA+PiAxMikKLSNkZWZpbmUgU01NVV9BRERSX1RPX1BETihhZGRyKQkoKGFkZHIpID4+IDIyKQotI2RlZmluZSBTTU1VX1BETl9UT19BRERSKHBkbikJKChwZG4pIDw8IDIyKQotCi0jZGVmaW5lIF9SRUFEQUJMRQkoMSA8PCBTTU1VX1BUQl9EQVRBX0FTSURfUkVBREFCTEVfU0hJRlQpCi0jZGVmaW5lIF9XUklUQUJMRQkoMSA8PCBTTU1VX1BUQl9EQVRBX0FTSURfV1JJVEFCTEVfU0hJRlQpCi0jZGVmaW5lIF9OT05TRUNVUkUJKDEgPDwgU01NVV9QVEJfREFUQV9BU0lEX05PTlNFQ1VSRV9TSElGVCkKLSNkZWZpbmUgX1BERV9ORVhUCSgxIDw8IFNNTVVfUERFX05FWFRfU0hJRlQpCi0jZGVmaW5lIF9NQVNLX0FUVFIJKF9SRUFEQUJMRSB8IF9XUklUQUJMRSB8IF9OT05TRUNVUkUpCi0KLSNkZWZpbmUgX1BESVJfQVRUUgkoX1JFQURBQkxFIHwgX1dSSVRBQkxFIHwgX05PTlNFQ1VSRSkKLQotI2RlZmluZSBfUERFX0FUVFIJKF9SRUFEQUJMRSB8IF9XUklUQUJMRSB8IF9OT05TRUNVUkUpCi0jZGVmaW5lIF9QREVfQVRUUl9OCShfUERFX0FUVFIgfCBfUERFX05FWFQpCi0jZGVmaW5lIF9QREVfVkFDQU5UKHBkbikJKCgocGRuKSA8PCAxMCkgfCBfUERFX0FUVFIpCi0KLSNkZWZpbmUgX1BURV9BVFRSCShfUkVBREFCTEUgfCBfV1JJVEFCTEUgfCBfTk9OU0VDVVJFKQotI2RlZmluZSBfUFRFX1ZBQ0FOVChhZGRyKQkoKChhZGRyKSA+PiBTTU1VX1BBR0VfU0hJRlQpIHwgX1BURV9BVFRSKQotCi0jZGVmaW5lIFNNTVVfTUtfUERJUihwYWdlLCBhdHRyKQlcCi0JCSgocGFnZV90b19waHlzKHBhZ2UpID4+IFNNTVVfUERJUl9TSElGVCkgfCAoYXR0cikpCi0jZGVmaW5lIFNNTVVfTUtfUERFKHBhZ2UsIGF0dHIpCQlcCi0JCSh1bnNpZ25lZCBsb25nKSgocGFnZV90b19waHlzKHBhZ2UpID4+IFNNTVVfUERFX1NISUZUKSB8IChhdHRyKSkKLSNkZWZpbmUgU01NVV9FWF9QVEJMX1BBR0UocGRlKQkJXAotCQlwZm5fdG9fcGFnZSgodW5zaWduZWQgbG9uZykocGRlKSAmIFNNTVVfUEZOX01BU0spCi0jZGVmaW5lIFNNTVVfUEZOX1RPX1BURShwZm4sIGF0dHIpCSh1bnNpZ25lZCBsb25nKSgocGZuKSB8IChhdHRyKSkKLQotI2RlZmluZSBTTU1VX0FTSURfRU5BQkxFKGFzaWQpCSgoYXNpZCkgfCAoMSA8PCAzMSkpCi0jZGVmaW5lIFNNTVVfQVNJRF9ESVNBQkxFCTAKLSNkZWZpbmUgU01NVV9BU0lEX0FTSUQobikJKChuKSAmIH5TTU1VX0FTSURfRU5BQkxFKDApKQotCi0jZGVmaW5lIE5VTV9TTU1VX1JFR19CQU5LUwkzCi0KLSNkZWZpbmUgc21tdV9jbGllbnRfZW5hYmxlX2h3Z3JwKGMsIG0pCXNtbXVfY2xpZW50X3NldF9od2dycChjLCBtLCAxKQotI2RlZmluZSBzbW11X2NsaWVudF9kaXNhYmxlX2h3Z3JwKGMpCXNtbXVfY2xpZW50X3NldF9od2dycChjLCAwLCAwKQotI2RlZmluZSBfX3NtbXVfY2xpZW50X2VuYWJsZV9od2dycChjLCBtKSBfX3NtbXVfY2xpZW50X3NldF9od2dycChjLCBtLCAxKQotI2RlZmluZSBfX3NtbXVfY2xpZW50X2Rpc2FibGVfaHdncnAoYykJX19zbW11X2NsaWVudF9zZXRfaHdncnAoYywgMCwgMCkKLQotI2RlZmluZSBIV0dSUF9JTklUKGNsaWVudCkgW0hXR1JQXyMjY2xpZW50XSA9IFNNTVVfIyNjbGllbnQjI19BU0lECi0KLXN0YXRpYyBjb25zdCB1MzIgc21tdV9od2dycF9hc2lkX3JlZ1tdID0gewotCUhXR1JQX0lOSVQoQUZJKSwKLQlIV0dSUF9JTklUKEFWUEMpLAotCUhXR1JQX0lOSVQoREMpLAotCUhXR1JQX0lOSVQoRENCKSwKLQlIV0dSUF9JTklUKEVQUCksCi0JSFdHUlBfSU5JVChHMiksCi0JSFdHUlBfSU5JVChIQyksCi0JSFdHUlBfSU5JVChIREEpLAotCUhXR1JQX0lOSVQoSVNQKSwKLQlIV0dSUF9JTklUKE1QRSksCi0JSFdHUlBfSU5JVChOViksCi0JSFdHUlBfSU5JVChOVjIpLAotCUhXR1JQX0lOSVQoUFBDUyksCi0JSFdHUlBfSU5JVChTQVRBKSwKLQlIV0dSUF9JTklUKFZERSksCi0JSFdHUlBfSU5JVChWSSksCi19OwotI2RlZmluZSBIV0dSUF9BU0lEX1JFRyh4KSAoc21tdV9od2dycF9hc2lkX3JlZ1t4XSkKLQotLyoKLSAqIFBlciBjbGllbnQgZm9yIGFkZHJlc3Mgc3BhY2UKLSAqLwotc3RydWN0IHNtbXVfY2xpZW50IHsKLQlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQlzdHJ1Y3Qgc21tdV9hcwkJKmFzOwotCXUzMgkJCWh3Z3JwOwotfTsKLQotLyoKLSAqIFBlciBhZGRyZXNzIHNwYWNlCi0gKi8KLXN0cnVjdCBzbW11X2FzIHsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UJKnNtbXU7CS8qIGJhY2sgcG9pbnRlciB0byBjb250YWluZXIgKi8KLQl1bnNpZ25lZCBpbnQJCWFzaWQ7Ci0Jc3BpbmxvY2tfdAkJbG9jazsJLyogZm9yIHBhZ2V0YWJsZSAqLwotCXN0cnVjdCBwYWdlCQkqcGRpcl9wYWdlOwotCXVuc2lnbmVkIGxvbmcJCXBkaXJfYXR0cjsKLQl1bnNpZ25lZCBsb25nCQlwZGVfYXR0cjsKLQl1bnNpZ25lZCBsb25nCQlwdGVfYXR0cjsKLQl1bnNpZ25lZCBpbnQJCSpwdGVfY291bnQ7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWNsaWVudDsKLQlzcGlubG9ja190CQljbGllbnRfbG9jazsgLyogZm9yIGNsaWVudCBsaXN0ICovCi19OwotCi1zdHJ1Y3Qgc21tdV9kZWJ1Z2ZzX2luZm8gewotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdTsKLQlpbnQgbWM7Ci0JaW50IGNhY2hlOwotfTsKLQotLyoKLSAqIFBlciBTTU1VIGRldmljZSAtIElPTU1VIGRldmljZQotICovCi1zdHJ1Y3Qgc21tdV9kZXZpY2UgewotCXZvaWQgX19pb21lbQkqcmVnYmFzZTsJLyogcmVnaXN0ZXIgb2Zmc2V0IGJhc2UgKi8KLQl2b2lkIF9faW9tZW0JKipyZWdzOwkJLyogcmVnaXN0ZXIgYmxvY2sgc3RhcnQgYWRkcmVzcyBhcnJheSAqLwotCXZvaWQgX19pb21lbQkqKnJlZ2U7CQkvKiByZWdpc3RlciBibG9jayBlbmQgYWRkcmVzcyBhcnJheSAqLwotCWludAkJbnJlZ3M7CQkvKiBudW1iZXIgb2YgcmVnaXN0ZXIgYmxvY2tzICovCi0KLQl1bnNpZ25lZCBsb25nCWlvdm1tX2Jhc2U7CS8qIHJlbWFwcGFibGUgYmFzZSBhZGRyZXNzICovCi0JdW5zaWduZWQgbG9uZwlwYWdlX2NvdW50OwkvKiB0b3RhbCByZW1hcHBhYmxlIHNpemUgKi8KLQlzcGlubG9ja190CWxvY2s7Ci0JY2hhcgkJKm5hbWU7Ci0Jc3RydWN0IGRldmljZQkqZGV2OwotCXN0cnVjdCBwYWdlICphdnBfdmVjdG9yX3BhZ2U7CS8qIGR1bW15IHBhZ2Ugc2hhcmVkIGJ5IGFsbCBBUydzICovCi0KLQkvKgotCSAqIFJlZ2lzdGVyIGltYWdlIHNhdmVycyBmb3Igc3VzcGVuZC9yZXN1bWUKLQkgKi8KLQl1bnNpZ25lZCBsb25nIHRyYW5zbGF0aW9uX2VuYWJsZV8wOwotCXVuc2lnbmVkIGxvbmcgdHJhbnNsYXRpb25fZW5hYmxlXzE7Ci0JdW5zaWduZWQgbG9uZyB0cmFuc2xhdGlvbl9lbmFibGVfMjsKLQl1bnNpZ25lZCBsb25nIGFzaWRfc2VjdXJpdHk7Ci0KLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7Ci0Jc3RydWN0IHNtbXVfZGVidWdmc19pbmZvICpkZWJ1Z2ZzX2luZm87Ci0KLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFoYjsKLQotCWludAkJbnVtX2FzOwotCXN0cnVjdCBzbW11X2FzCWFzWzBdOwkJLyogUnVuLXRpbWUgYWxsb2NhdGVkIGFycmF5ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHNtbXVfZGV2aWNlICpzbW11X2hhbmRsZTsgLyogdW5pcXVlIGZvciBhIHN5c3RlbSAqLwotCi0vKgotICoJU01NVSByZWdpc3RlciBhY2Nlc3NvcnMKLSAqLwotc3RhdGljIGJvb2wgaW5saW5lIHNtbXVfdmFsaWRfcmVnKHN0cnVjdCBzbW11X2RldmljZSAqc21tdSwKLQkJCQkgIHZvaWQgX19pb21lbSAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbW11X3dyaXRlbChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwgdTMyIHZhbHVlLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNtbXUtPm5yZWdzOyBpKyspIHsKLQkJaWYgKGFkZHIgPCBzbW11LT5yZWdzW2ldKQotCQkJYnJlYWs7Ci0JCWlmIChhZGRyIDw9IHNtbXUtPnJlZ2VbaV0pCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7CisJd3JpdGVsKHZhbHVlLCBzbW11LT5yZWdzICsgb2Zmc2V0KTsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgc21tdV9yZWFkKHN0cnVjdCBzbW11X2RldmljZSAqc21tdSwgc2l6ZV90IG9mZnMpCitzdGF0aWMgaW5saW5lIHUzMiBzbW11X3JlYWRsKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzbW11LT5yZWdiYXNlICsgb2ZmczsKLQotCUJVR19PTighc21tdV92YWxpZF9yZWcoc21tdSwgYWRkcikpOwotCi0JcmV0dXJuIHJlYWRsKGFkZHIpOworCXJldHVybiByZWFkbChzbW11LT5yZWdzICsgb2Zmc2V0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNtbXVfd3JpdGUoc3RydWN0IHNtbXVfZGV2aWNlICpzbW11LCB1MzIgdmFsLCBzaXplX3Qgb2ZmcykKKyNkZWZpbmUgU01NVV9DT05GSUcgMHgwMTAKKyNkZWZpbmUgIFNNTVVfQ09ORklHX0VOQUJMRSAoMSA8PCAwKQorCisjZGVmaW5lIFNNTVVfVExCX0NPTkZJRyAweDE0CisjZGVmaW5lICBTTU1VX1RMQl9DT05GSUdfSElUX1VOREVSX01JU1MgKDEgPDwgMjkpCisjZGVmaW5lICBTTU1VX1RMQl9DT05GSUdfUk9VTkRfUk9CSU5fQVJCSVRSQVRJT04gKDEgPDwgMjgpCisjZGVmaW5lICBTTU1VX1RMQl9DT05GSUdfQUNUSVZFX0xJTkVTKHgpICgoeCkgJiAweDNmKQorCisjZGVmaW5lIFNNTVVfUFRDX0NPTkZJRyAweDE4CisjZGVmaW5lICBTTU1VX1BUQ19DT05GSUdfRU5BQkxFICgxIDw8IDI5KQorI2RlZmluZSAgU01NVV9QVENfQ09ORklHX1JFUV9MSU1JVCh4KSAoKCh4KSAmIDB4MGYpIDw8IDI0KQorI2RlZmluZSAgU01NVV9QVENfQ09ORklHX0lOREVYX01BUCh4KSAoKHgpICYgMHgzZikKKworI2RlZmluZSBTTU1VX1BUQl9BU0lEIDB4MDFjCisjZGVmaW5lICBTTU1VX1BUQl9BU0lEX1ZBTFVFKHgpICgoeCkgJiAweDdmKQorCisjZGVmaW5lIFNNTVVfUFRCX0RBVEEgMHgwMjAKKyNkZWZpbmUgIFNNTVVfUFRCX0RBVEFfVkFMVUUocGFnZSwgYXR0cikgKHBhZ2VfdG9fcGh5cyhwYWdlKSA+PiAxMiB8IChhdHRyKSkKKworI2RlZmluZSBTTU1VX01LX1BERShwYWdlLCBhdHRyKSAocGFnZV90b19waHlzKHBhZ2UpID4+IFNNTVVfUFRFX1NISUZUIHwgKGF0dHIpKQorCisjZGVmaW5lIFNNTVVfVExCX0ZMVVNIIDB4MDMwCisjZGVmaW5lICBTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9BTEwgICAgICgwIDw8IDApCisjZGVmaW5lICBTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9TRUNUSU9OICgyIDw8IDApCisjZGVmaW5lICBTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9HUk9VUCAgICgzIDw8IDApCisjZGVmaW5lICBTTU1VX1RMQl9GTFVTSF9BU0lEKHgpICAgICAgICAgICgoKHgpICYgMHg3ZikgPDwgMjQpCisjZGVmaW5lICBTTU1VX1RMQl9GTFVTSF9WQV9TRUNUSU9OKGFkZHIpICgoKChhZGRyKSAmIDB4ZmZjMDAwMDApID4+IDEyKSB8IFwKKwkJCQkJICBTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9TRUNUSU9OKQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfVkFfR1JPVVAoYWRkcikgICAoKCgoYWRkcikgJiAweGZmZmZjMDAwKSA+PiAxMikgfCBcCisJCQkJCSAgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfR1JPVVApCisjZGVmaW5lICBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIICAgICAgICgxIDw8IDMxKQorCisjZGVmaW5lIFNNTVVfUFRDX0ZMVVNIIDB4MDM0CisjZGVmaW5lICBTTU1VX1BUQ19GTFVTSF9UWVBFX0FMTCAoMCA8PCAwKQorI2RlZmluZSAgU01NVV9QVENfRkxVU0hfVFlQRV9BRFIgKDEgPDwgMCkKKworI2RlZmluZSBTTU1VX1BUQ19GTFVTSF9ISSAweDliOAorI2RlZmluZSAgU01NVV9QVENfRkxVU0hfSElfTUFTSyAweDMKKworLyogcGVyLVNXR1JPVVAgU01NVV8qX0FTSUQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU01NVV9BU0lEX0VOQUJMRSAoMSA8PCAzMSkKKyNkZWZpbmUgU01NVV9BU0lEX01BU0sgMHg3ZgorI2RlZmluZSBTTU1VX0FTSURfVkFMVUUoeCkgKCh4KSAmIFNNTVVfQVNJRF9NQVNLKQorCisvKiBwYWdlIHRhYmxlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFNNTVVfTlVNX1BERSAxMDI0CisjZGVmaW5lIFNNTVVfTlVNX1BURSAxMDI0CisKKyNkZWZpbmUgU01NVV9TSVpFX1BEIChTTU1VX05VTV9QREUgKiA0KQorI2RlZmluZSBTTU1VX1NJWkVfUFQgKFNNTVVfTlVNX1BURSAqIDQpCisKKyNkZWZpbmUgU01NVV9QREVfU0hJRlQgMjIKKyNkZWZpbmUgU01NVV9QVEVfU0hJRlQgMTIKKworI2RlZmluZSBTTU1VX1BGTl9NQVNLIDB4MDAwZmZmZmYKKworI2RlZmluZSBTTU1VX1BEX1JFQURBQkxFCSgxIDw8IDMxKQorI2RlZmluZSBTTU1VX1BEX1dSSVRBQkxFCSgxIDw8IDMwKQorI2RlZmluZSBTTU1VX1BEX05PTlNFQ1VSRQkoMSA8PCAyOSkKKworI2RlZmluZSBTTU1VX1BERV9SRUFEQUJMRQkoMSA8PCAzMSkKKyNkZWZpbmUgU01NVV9QREVfV1JJVEFCTEUJKDEgPDwgMzApCisjZGVmaW5lIFNNTVVfUERFX05PTlNFQ1VSRQkoMSA8PCAyOSkKKyNkZWZpbmUgU01NVV9QREVfTkVYVAkJKDEgPDwgMjgpCisKKyNkZWZpbmUgU01NVV9QVEVfUkVBREFCTEUJKDEgPDwgMzEpCisjZGVmaW5lIFNNTVVfUFRFX1dSSVRBQkxFCSgxIDw8IDMwKQorI2RlZmluZSBTTU1VX1BURV9OT05TRUNVUkUJKDEgPDwgMjkpCisKKyNkZWZpbmUgU01NVV9QREVfQVRUUgkJKFNNTVVfUERFX1JFQURBQkxFIHwgU01NVV9QREVfV1JJVEFCTEUgfCBcCisJCQkJIFNNTVVfUERFX05PTlNFQ1VSRSkKKyNkZWZpbmUgU01NVV9QVEVfQVRUUgkJKFNNTVVfUFRFX1JFQURBQkxFIHwgU01NVV9QVEVfV1JJVEFCTEUgfCBcCisJCQkJIFNNTVVfUFRFX05PTlNFQ1VSRSkKKworc3RhdGljIGlubGluZSB2b2lkIHNtbXVfZmx1c2hfcHRjKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCXZvaWQgX19pb21lbSAqYWRkciA9IHNtbXUtPnJlZ2Jhc2UgKyBvZmZzOworCXBoeXNfYWRkcl90IHBoeXMgPSBwYWdlID8gcGFnZV90b19waHlzKHBhZ2UpIDogMDsKKwl1MzIgdmFsdWU7CiAKLQlCVUdfT04oIXNtbXVfdmFsaWRfcmVnKHNtbXUsIGFkZHIpKTsKKwlpZiAocGFnZSkgeworCQlvZmZzZXQgJj0gfihzbW11LT5tYy0+c29jLT5hdG9tX3NpemUgLSAxKTsKIAotCXdyaXRlbCh2YWwsIGFkZHIpOwotfQotCi0jZGVmaW5lIFZBX1BBR0VfVE9fUEEodmEsIHBhZ2UpCVwKLQkocGFnZV90b19waHlzKHBhZ2UpICsgKCh1bnNpZ25lZCBsb25nKSh2YSkgJiB+UEFHRV9NQVNLKSkKLQotI2RlZmluZSBGTFVTSF9DUFVfRENBQ0hFKHZhLCBwYWdlLCBzaXplKQlcCi0JZG8gewlcCi0JCXVuc2lnbmVkIGxvbmcgX3BhXyA9IFZBX1BBR0VfVE9fUEEodmEsIHBhZ2UpOwkJXAotCQlfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEoKHZvaWQgKikodmEpLCAoc2l6ZV90KShzaXplKSk7CVwKLQkJb3V0ZXJfZmx1c2hfcmFuZ2UoX3BhXywgX3BhXysoc2l6ZV90KShzaXplKSk7CQlcCi0JfSB3aGlsZSAoMCkKLQotLyoKLSAqIEFueSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGFueSBibG9jayBvbiBQUFNCIGFuZCBhIGJsb2NrIG9uIEFQQiBvciBBSEIKLSAqIG11c3QgaGF2ZSB0aGVzZSByZWFkLWJhY2sgYmFycmllcnMgdG8gZW5zdXJlIHRoZSBBUEIvQUhCIGJ1cwotICogdHJhbnNhY3Rpb24gaXMgY29tcGxldGUgYmVmb3JlIGluaXRpYXRpbmcgYWN0aXZpdHkgb24gdGhlIFBQU0IKLSAqIGJsb2NrLgotICovCi0jZGVmaW5lIEZMVVNIX1NNTVVfUkVHUyhzbW11KQlzbW11X3JlYWQoc21tdSwgU01NVV9DT05GSUcpCi0KLSNkZWZpbmUgc21tdV9jbGllbnRfaHdncnAoYykgKHUzMikoKGMpLT5kZXYtPnBsYXRmb3JtX2RhdGEpCi0KLXN0YXRpYyBpbnQgX19zbW11X2NsaWVudF9zZXRfaHdncnAoc3RydWN0IHNtbXVfY2xpZW50ICpjLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgbWFwLCBpbnQgb24pCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHNtbXVfYXMgKmFzID0gYy0+YXM7Ci0JdTMyIHZhbCwgb2ZmcywgbWFzayA9IFNNTVVfQVNJRF9FTkFCTEUoYXMtPmFzaWQpOwotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGFzLT5zbW11OwotCi0JV0FSTl9PTighb24gJiYgbWFwKTsKLQlpZiAob24gJiYgIW1hcCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFvbikKLQkJbWFwID0gc21tdV9jbGllbnRfaHdncnAoYyk7Ci0KLQlmb3JfZWFjaF9zZXRfYml0KGksICZtYXAsIEhXR1JQX0NPVU5UKSB7Ci0JCW9mZnMgPSBIV0dSUF9BU0lEX1JFRyhpKTsKLQkJdmFsID0gc21tdV9yZWFkKHNtbXUsIG9mZnMpOwotCQlpZiAob24pIHsKLQkJCWlmIChXQVJOX09OKHZhbCAmIG1hc2spKQotCQkJCWdvdG8gZXJyX2h3X2J1c3k7Ci0JCQl2YWwgfD0gbWFzazsKLQkJfSBlbHNlIHsKLQkJCVdBUk5fT04oKHZhbCAmIG1hc2spID09IG1hc2spOwotCQkJdmFsICY9IH5tYXNrOwotCQl9Ci0JCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBvZmZzKTsKLQl9Ci0JRkxVU0hfU01NVV9SRUdTKHNtbXUpOwotCWMtPmh3Z3JwID0gbWFwOwotCXJldHVybiAwOwotCi1lcnJfaHdfYnVzeToKLQlmb3JfZWFjaF9zZXRfYml0KGksICZtYXAsIEhXR1JQX0NPVU5UKSB7Ci0JCW9mZnMgPSBIV0dSUF9BU0lEX1JFRyhpKTsKLQkJdmFsID0gc21tdV9yZWFkKHNtbXUsIG9mZnMpOwotCQl2YWwgJj0gfm1hc2s7Ci0JCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBvZmZzKTsKLQl9Ci0JcmV0dXJuIC1FQlVTWTsKLX0KLQotc3RhdGljIGludCBzbW11X2NsaWVudF9zZXRfaHdncnAoc3RydWN0IHNtbXVfY2xpZW50ICpjLCB1MzIgbWFwLCBpbnQgb24pCi17Ci0JdTMyIHZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzbW11X2FzICphcyA9IGMtPmFzOwotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGFzLT5zbW11OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNtbXUtPmxvY2ssIGZsYWdzKTsKLQl2YWwgPSBfX3NtbXVfY2xpZW50X3NldF9od2dycChjLCBtYXAsIG9uKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbW11LT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotLyoKLSAqIEZsdXNoIGFsbCBUTEIgZW50cmllcyBhbmQgYWxsIFBUQyBlbnRyaWVzCi0gKiBDYWxsZXIgbXVzdCBsb2NrIHNtbXUKLSAqLwotc3RhdGljIHZvaWQgc21tdV9mbHVzaF9yZWdzKHN0cnVjdCBzbW11X2RldmljZSAqc21tdSwgaW50IGVuYWJsZSkKLXsKLQl1MzIgdmFsOwotCi0Jc21tdV93cml0ZShzbW11LCBTTU1VX1BUQ19GTFVTSF9UWVBFX0FMTCwgU01NVV9QVENfRkxVU0gpOwotCUZMVVNIX1NNTVVfUkVHUyhzbW11KTsKLQl2YWwgPSBTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9BTEwgfAotCQlTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX2Rpc2FibGU7Ci0Jc21tdV93cml0ZShzbW11LCB2YWwsIFNNTVVfVExCX0ZMVVNIKTsKLQotCWlmIChlbmFibGUpCi0JCXNtbXVfd3JpdGUoc21tdSwgU01NVV9DT05GSUdfRU5BQkxFLCBTTU1VX0NPTkZJRyk7Ci0JRkxVU0hfU01NVV9SRUdTKHNtbXUpOwotfQotCi1zdGF0aWMgaW50IHNtbXVfc2V0dXBfcmVncyhzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUpCi17Ci0JaW50IGk7Ci0JdTMyIHZhbDsKLQotCWZvciAoaSA9IDA7IGkgPCBzbW11LT5udW1fYXM7IGkrKykgewotCQlzdHJ1Y3Qgc21tdV9hcyAqYXMgPSAmc21tdS0+YXNbaV07Ci0JCXN0cnVjdCBzbW11X2NsaWVudCAqYzsKLQotCQlzbW11X3dyaXRlKHNtbXUsIFNNTVVfUFRCX0FTSURfQ1VSKGFzLT5hc2lkKSwgU01NVV9QVEJfQVNJRCk7Ci0JCXZhbCA9IGFzLT5wZGlyX3BhZ2UgPwotCQkJU01NVV9NS19QRElSKGFzLT5wZGlyX3BhZ2UsIGFzLT5wZGlyX2F0dHIpIDoKLQkJCVNNTVVfUFRCX0RBVEFfUkVTRVRfVkFMOwotCQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgU01NVV9QVEJfREFUQSk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmYXMtPmNsaWVudCwgbGlzdCkKLQkJCV9fc21tdV9jbGllbnRfc2V0X2h3Z3JwKGMsIGMtPmh3Z3JwLCAxKTsKLQl9Ci0KLQlzbW11X3dyaXRlKHNtbXUsIHNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8wLCBTTU1VX1RSQU5TTEFUSU9OX0VOQUJMRV8wKTsKLQlzbW11X3dyaXRlKHNtbXUsIHNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8xLCBTTU1VX1RSQU5TTEFUSU9OX0VOQUJMRV8xKTsKLQlzbW11X3dyaXRlKHNtbXUsIHNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8yLCBTTU1VX1RSQU5TTEFUSU9OX0VOQUJMRV8yKTsKLQlzbW11X3dyaXRlKHNtbXUsIHNtbXUtPmFzaWRfc2VjdXJpdHksIFNNTVVfQVNJRF9TRUNVUklUWSk7Ci0Jc21tdV93cml0ZShzbW11LCBTTU1VX1RMQl9DT05GSUdfUkVTRVRfVkFMLCBTTU1VX0NBQ0hFX0NPTkZJRyhfVExCKSk7Ci0Jc21tdV93cml0ZShzbW11LCBTTU1VX1BUQ19DT05GSUdfUkVTRVRfVkFMLCBTTU1VX0NBQ0hFX0NPTkZJRyhfUFRDKSk7Ci0KLQlzbW11X2ZsdXNoX3JlZ3Moc21tdSwgMSk7Ci0KLQlyZXR1cm4gdGVncmFfYWhiX2VuYWJsZV9zbW11KHNtbXUtPmFoYik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsdXNoX3B0Y19hbmRfdGxiKHN0cnVjdCBzbW11X2RldmljZSAqc21tdSwKLQkJICAgICAgc3RydWN0IHNtbXVfYXMgKmFzLCBkbWFfYWRkcl90IGlvdmEsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgKnB0ZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBpc19wZGUpCi17Ci0JdTMyIHZhbDsKLQl1bnNpZ25lZCBsb25nIHRsYl9mbHVzaF92YSA9IGlzX3BkZQotCQk/ICBTTU1VX1RMQl9GTFVTSF9WQShpb3ZhLCBTRUNUSU9OKQotCQk6ICBTTU1VX1RMQl9GTFVTSF9WQShpb3ZhLCBHUk9VUCk7Ci0KLQl2YWwgPSBTTU1VX1BUQ19GTFVTSF9UWVBFX0FEUiB8IFZBX1BBR0VfVE9fUEEocHRlLCBwYWdlKTsKLQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgU01NVV9QVENfRkxVU0gpOwotCUZMVVNIX1NNTVVfUkVHUyhzbW11KTsKLQl2YWwgPSB0bGJfZmx1c2hfdmEgfAotCQlTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX19FTkFCTEUgfAotCQkoYXMtPmFzaWQgPDwgU01NVV9UTEJfRkxVU0hfQVNJRF9TSElGVCk7Ci0Jc21tdV93cml0ZShzbW11LCB2YWwsIFNNTVVfVExCX0ZMVVNIKTsKLQlGTFVTSF9TTU1VX1JFR1Moc21tdSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfcHRibChzdHJ1Y3Qgc21tdV9hcyAqYXMsIGRtYV9hZGRyX3QgaW92YSkKLXsKLQl1bnNpZ25lZCBsb25nIHBkbiA9IFNNTVVfQUREUl9UT19QRE4oaW92YSk7Ci0JdW5zaWduZWQgbG9uZyAqcGRpciA9ICh1bnNpZ25lZCBsb25nICopcGFnZV9hZGRyZXNzKGFzLT5wZGlyX3BhZ2UpOwotCi0JaWYgKHBkaXJbcGRuXSAhPSBfUERFX1ZBQ0FOVChwZG4pKSB7Ci0JCWRldl9kYmcoYXMtPnNtbXUtPmRldiwgInBkbjogJWx4XG4iLCBwZG4pOwotCi0JCUNsZWFyUGFnZVJlc2VydmVkKFNNTVVfRVhfUFRCTF9QQUdFKHBkaXJbcGRuXSkpOwotCQlfX2ZyZWVfcGFnZShTTU1VX0VYX1BUQkxfUEFHRShwZGlyW3Bkbl0pKTsKLQkJcGRpcltwZG5dID0gX1BERV9WQUNBTlQocGRuKTsKLQkJRkxVU0hfQ1BVX0RDQUNIRSgmcGRpcltwZG5dLCBhcy0+cGRpcl9wYWdlLCBzaXplb2YgcGRpcltwZG5dKTsKLQkJZmx1c2hfcHRjX2FuZF90bGIoYXMtPnNtbXUsIGFzLCBpb3ZhLCAmcGRpcltwZG5dLAotCQkJCSAgYXMtPnBkaXJfcGFnZSwgMSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBmcmVlX3BkaXIoc3RydWN0IHNtbXVfYXMgKmFzKQotewotCXVuc2lnbmVkIGFkZHI7Ci0JaW50IGNvdW50OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGFzLT5zbW11LT5kZXY7Ci0KLQlpZiAoIWFzLT5wZGlyX3BhZ2UpCi0JCXJldHVybjsKLQotCWFkZHIgPSBhcy0+c21tdS0+aW92bW1fYmFzZTsKLQljb3VudCA9IGFzLT5zbW11LT5wYWdlX2NvdW50OwotCXdoaWxlIChjb3VudC0tID4gMCkgewotCQlmcmVlX3B0YmwoYXMsIGFkZHIpOwotCQlhZGRyICs9IFNNTVVfUEFHRV9TSVpFICogU01NVV9QVEJMX0NPVU5UOwotCX0KLQlDbGVhclBhZ2VSZXNlcnZlZChhcy0+cGRpcl9wYWdlKTsKLQlfX2ZyZWVfcGFnZShhcy0+cGRpcl9wYWdlKTsKLQlhcy0+cGRpcl9wYWdlID0gTlVMTDsKLQlkZXZtX2tmcmVlKGRldiwgYXMtPnB0ZV9jb3VudCk7Ci0JYXMtPnB0ZV9jb3VudCA9IE5VTEw7Ci19Ci0KLS8qCi0gKiBNYXBzIFBUQkwgZm9yIGdpdmVuIGlvdmEgYW5kIHJldHVybnMgdGhlIFBURSBhZGRyZXNzCi0gKiBDYWxsZXIgbXVzdCB1bm1hcCB0aGUgbWFwcGVkIFBUQkwgcmV0dXJuZWQgaW4gKnB0YmxfcGFnZV9wCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nICpsb2NhdGVfcHRlKHN0cnVjdCBzbW11X2FzICphcywKLQkJCQkgZG1hX2FkZHJfdCBpb3ZhLCBib29sIGFsbG9jYXRlLAotCQkJCSBzdHJ1Y3QgcGFnZSAqKnB0YmxfcGFnZV9wLAotCQkJCSB1bnNpZ25lZCBpbnQgKipjb3VudCkKLXsKLQl1bnNpZ25lZCBsb25nIHB0biA9IFNNTVVfQUREUl9UT19QRk4oaW92YSk7Ci0JdW5zaWduZWQgbG9uZyBwZG4gPSBTTU1VX0FERFJfVE9fUEROKGlvdmEpOwotCXVuc2lnbmVkIGxvbmcgKnBkaXIgPSBwYWdlX2FkZHJlc3MoYXMtPnBkaXJfcGFnZSk7Ci0JdW5zaWduZWQgbG9uZyAqcHRibDsKLQotCWlmIChwZGlyW3Bkbl0gIT0gX1BERV9WQUNBTlQocGRuKSkgewotCQkvKiBNYXBwZWQgZW50cnkgdGFibGUgYWxyZWFkeSBleGlzdHMgKi8KLQkJKnB0YmxfcGFnZV9wID0gU01NVV9FWF9QVEJMX1BBR0UocGRpcltwZG5dKTsKLQkJcHRibCA9IHBhZ2VfYWRkcmVzcygqcHRibF9wYWdlX3ApOwotCX0gZWxzZSBpZiAoIWFsbG9jYXRlKSB7Ci0JCXJldHVybiBOVUxMOwotCX0gZWxzZSB7Ci0JCWludCBwbjsKLQkJdW5zaWduZWQgbG9uZyBhZGRyID0gU01NVV9QRE5fVE9fQUREUihwZG4pOwotCi0JCS8qIFZhY2FudCAtIGFsbG9jYXRlIGEgbmV3IHBhZ2UgdGFibGUgKi8KLQkJZGV2X2RiZyhhcy0+c21tdS0+ZGV2LCAiTmV3IFBUQkwgcGRuOiAlbHhcbiIsIHBkbik7Ci0KLQkJKnB0YmxfcGFnZV9wID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKCEqcHRibF9wYWdlX3ApIHsKLQkJCWRldl9lcnIoYXMtPnNtbXUtPmRldiwKLQkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIHNtbXVfZGV2aWNlIHBhZ2UgdGFibGVcbiIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJU2V0UGFnZVJlc2VydmVkKCpwdGJsX3BhZ2VfcCk7Ci0JCXB0YmwgPSAodW5zaWduZWQgbG9uZyAqKXBhZ2VfYWRkcmVzcygqcHRibF9wYWdlX3ApOwotCQlmb3IgKHBuID0gMDsgcG4gPCBTTU1VX1BUQkxfQ09VTlQ7Ci0JCSAgICAgcG4rKywgYWRkciArPSBTTU1VX1BBR0VfU0laRSkgewotCQkJcHRibFtwbl0gPSBfUFRFX1ZBQ0FOVChhZGRyKTsKLQkJfQotCQlGTFVTSF9DUFVfRENBQ0hFKHB0YmwsICpwdGJsX3BhZ2VfcCwgU01NVV9QVEJMX1NJWkUpOwotCQlwZGlyW3Bkbl0gPSBTTU1VX01LX1BERSgqcHRibF9wYWdlX3AsCi0JCQkJCWFzLT5wZGVfYXR0ciB8IF9QREVfTkVYVCk7Ci0JCUZMVVNIX0NQVV9EQ0FDSEUoJnBkaXJbcGRuXSwgYXMtPnBkaXJfcGFnZSwgc2l6ZW9mIHBkaXJbcGRuXSk7Ci0JCWZsdXNoX3B0Y19hbmRfdGxiKGFzLT5zbW11LCBhcywgaW92YSwgJnBkaXJbcGRuXSwKLQkJCQkgIGFzLT5wZGlyX3BhZ2UsIDEpOwotCX0KLQkqY291bnQgPSAmYXMtPnB0ZV9jb3VudFtwZG5dOwotCi0JcmV0dXJuICZwdGJsW3B0biAlIFNNTVVfUFRCTF9DT1VOVF07Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01NVV9TSUdfREVCVUcKLXN0YXRpYyB2b2lkIHB1dF9zaWduYXR1cmUoc3RydWN0IHNtbXVfYXMgKmFzLAotCQkJICBkbWFfYWRkcl90IGlvdmEsIHVuc2lnbmVkIGxvbmcgcGZuKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgKnZhZGRyOwotCi0JcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JdmFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JaWYgKCF2YWRkcikKLQkJcmV0dXJuOwotCi0JdmFkZHJbMF0gPSBpb3ZhOwotCXZhZGRyWzFdID0gcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JRkxVU0hfQ1BVX0RDQUNIRSh2YWRkciwgcGFnZSwgc2l6ZW9mKHZhZGRyWzBdKSAqIDIpOwotfQorCQlpZiAoc21tdS0+bWMtPnNvYy0+bnVtX2FkZHJlc3NfYml0cyA+IDMyKSB7CisjaWZkZWYgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUCisJCQl2YWx1ZSA9IChwaHlzID4+IDMyKSAmIFNNTVVfUFRDX0ZMVVNIX0hJX01BU0s7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHB1dF9zaWduYXR1cmUoc3RydWN0IHNtbXVfYXMgKmFzLAotCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKQotewotfQorCQkJdmFsdWUgPSAwOwogI2VuZGlmCisJCQlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9QVENfRkxVU0hfSEkpOworCQl9CiAKLS8qCi0gKiBDYWxsZXIgbXVzdCBub3QgaG9sZCBhcy0+bG9jawotICovCi1zdGF0aWMgaW50IGFsbG9jX3BkaXIoc3RydWN0IHNtbXVfYXMgKmFzKQotewotCXVuc2lnbmVkIGxvbmcgKnBkaXIsIGZsYWdzOwotCWludCBwZG4sIGVyciA9IDA7Ci0JdTMyIHZhbDsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBhcy0+c21tdTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBpbnQgKmNudDsKLQotCS8qCi0JICogZG8gdGhlIGFsbG9jYXRpb24sIHRoZW4gZ3JhYiBhcy0+bG9jawotCSAqLwotCWNudCA9IGRldm1fa3phbGxvYyhzbW11LT5kZXYsCi0JCQkgICBzaXplb2YoY250WzBdKSAqIFNNTVVfUERJUl9DT1VOVCwKLQkJCSAgIEdGUF9LRVJORUwpOwotCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9ETUEpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoYXMtPnBkaXJfcGFnZSkgewotCQkvKiBXZSByYWNlZCwgZnJlZSB0aGUgcmVkdW5kYW50ICovCi0JCWVyciA9IC1FQUdBSU47Ci0JCWdvdG8gZXJyX291dDsKKwkJdmFsdWUgPSAocGh5cyArIG9mZnNldCkgfCBTTU1VX1BUQ19GTFVTSF9UWVBFX0FEUjsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IFNNTVVfUFRDX0ZMVVNIX1RZUEVfQUxMOwogCX0KIAotCWlmICghcGFnZSB8fCAhY250KSB7Ci0JCWRldl9lcnIoc21tdS0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGF0ICVzXG4iLCBfX2Z1bmNfXyk7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dDsKKwlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9QVENfRkxVU0gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21tdV9mbHVzaF90bGIoc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUpCit7CisJc21tdV93cml0ZWwoc21tdSwgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfQUxMLCBTTU1VX1RMQl9GTFVTSCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbW11X2ZsdXNoX3RsYl9hc2lkKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFzaWQpCit7CisJdTMyIHZhbHVlOworCisJdmFsdWUgPSBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIIHwgU01NVV9UTEJfRkxVU0hfQVNJRChhc2lkKSB8CisJCVNNTVVfVExCX0ZMVVNIX1ZBX01BVENIX0FMTDsKKwlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9UTEJfRkxVU0gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21tdV9mbHVzaF90bGJfc2VjdGlvbihzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFzaWQsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBpb3ZhKQoreworCXUzMiB2YWx1ZTsKKworCXZhbHVlID0gU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSCB8IFNNTVVfVExCX0ZMVVNIX0FTSUQoYXNpZCkgfAorCQlTTU1VX1RMQl9GTFVTSF9WQV9TRUNUSU9OKGlvdmEpOworCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBTTU1VX1RMQl9GTFVTSCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbW11X2ZsdXNoX3RsYl9ncm91cChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhc2lkLAorCQkJCQl1bnNpZ25lZCBsb25nIGlvdmEpCit7CisJdTMyIHZhbHVlOworCisJdmFsdWUgPSBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIIHwgU01NVV9UTEJfRkxVU0hfQVNJRChhc2lkKSB8CisJCVNNTVVfVExCX0ZMVVNIX1ZBX0dST1VQKGlvdmEpOworCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBTTU1VX1RMQl9GTFVTSCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbW11X2ZsdXNoKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11KQoreworCXNtbXVfcmVhZGwoc21tdSwgU01NVV9DT05GSUcpOworfQorCitzdGF0aWMgaW50IHRlZ3JhX3NtbXVfYWxsb2NfYXNpZChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwgdW5zaWduZWQgaW50ICppZHApCit7CisJdW5zaWduZWQgbG9uZyBpZDsKKworCW11dGV4X2xvY2soJnNtbXUtPmxvY2spOworCisJaWQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHNtbXUtPmFzaWRzLCBzbW11LT5zb2MtPm51bV9hc2lkcyk7CisJaWYgKGlkID49IHNtbXUtPnNvYy0+bnVtX2FzaWRzKSB7CisJCW11dGV4X3VubG9jaygmc21tdS0+bG9jayk7CisJCXJldHVybiAtRU5PU1BDOwogCX0KIAotCWFzLT5wZGlyX3BhZ2UgPSBwYWdlOwotCWFzLT5wdGVfY291bnQgPSBjbnQ7CisJc2V0X2JpdChpZCwgc21tdS0+YXNpZHMpOworCSppZHAgPSBpZDsKIAotCVNldFBhZ2VSZXNlcnZlZChhcy0+cGRpcl9wYWdlKTsKLQlwZGlyID0gcGFnZV9hZGRyZXNzKGFzLT5wZGlyX3BhZ2UpOwotCi0JZm9yIChwZG4gPSAwOyBwZG4gPCBTTU1VX1BESVJfQ09VTlQ7IHBkbisrKQotCQlwZGlyW3Bkbl0gPSBfUERFX1ZBQ0FOVChwZG4pOwotCUZMVVNIX0NQVV9EQ0FDSEUocGRpciwgYXMtPnBkaXJfcGFnZSwgU01NVV9QRElSX1NJWkUpOwotCXZhbCA9IFNNTVVfUFRDX0ZMVVNIX1RZUEVfQURSIHwgVkFfUEFHRV9UT19QQShwZGlyLCBhcy0+cGRpcl9wYWdlKTsKLQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgU01NVV9QVENfRkxVU0gpOwotCUZMVVNIX1NNTVVfUkVHUyhhcy0+c21tdSk7Ci0JdmFsID0gU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfQUxMIHwKLQkJU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSF9fRU5BQkxFIHwKLQkJKGFzLT5hc2lkIDw8IFNNTVVfVExCX0ZMVVNIX0FTSURfU0hJRlQpOwotCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBTTU1VX1RMQl9GTFVTSCk7Ci0JRkxVU0hfU01NVV9SRUdTKGFzLT5zbW11KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCi0JZGV2bV9rZnJlZShzbW11LT5kZXYsIGNudCk7Ci0JaWYgKHBhZ2UpCi0JCV9fZnJlZV9wYWdlKHBhZ2UpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fc21tdV9pb21tdV91bm1hcChzdHJ1Y3Qgc21tdV9hcyAqYXMsIGRtYV9hZGRyX3QgaW92YSkKLXsKLQl1bnNpZ25lZCBsb25nICpwdGU7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgaW50ICpjb3VudDsKLQotCXB0ZSA9IGxvY2F0ZV9wdGUoYXMsIGlvdmEsIGZhbHNlLCAmcGFnZSwgJmNvdW50KTsKLQlpZiAoV0FSTl9PTighcHRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKFdBUk5fT04oKnB0ZSA9PSBfUFRFX1ZBQ0FOVChpb3ZhKSkpCi0JCXJldHVybjsKLQotCSpwdGUgPSBfUFRFX1ZBQ0FOVChpb3ZhKTsKLQlGTFVTSF9DUFVfRENBQ0hFKHB0ZSwgcGFnZSwgc2l6ZW9mKCpwdGUpKTsKLQlmbHVzaF9wdGNfYW5kX3RsYihhcy0+c21tdSwgYXMsIGlvdmEsIHB0ZSwgcGFnZSwgMCk7Ci0JaWYgKCEtLSgqY291bnQpKQotCQlmcmVlX3B0YmwoYXMsIGlvdmEpOwotfQotCi1zdGF0aWMgdm9pZCBfX3NtbXVfaW9tbXVfbWFwX3BmbihzdHJ1Y3Qgc21tdV9hcyAqYXMsIGRtYV9hZGRyX3QgaW92YSwKLQkJCQkgdW5zaWduZWQgbG9uZyBwZm4pCi17Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gYXMtPnNtbXU7Ci0JdW5zaWduZWQgbG9uZyAqcHRlOwotCXVuc2lnbmVkIGludCAqY291bnQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQlwdGUgPSBsb2NhdGVfcHRlKGFzLCBpb3ZhLCB0cnVlLCAmcGFnZSwgJmNvdW50KTsKLQlpZiAoV0FSTl9PTighcHRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKCpwdGUgPT0gX1BURV9WQUNBTlQoaW92YSkpCi0JCSgqY291bnQpKys7Ci0JKnB0ZSA9IFNNTVVfUEZOX1RPX1BURShwZm4sIGFzLT5wdGVfYXR0cik7Ci0JaWYgKHVubGlrZWx5KCgqcHRlID09IF9QVEVfVkFDQU5UKGlvdmEpKSkpCi0JCSgqY291bnQpLS07Ci0JRkxVU0hfQ1BVX0RDQUNIRShwdGUsIHBhZ2UsIHNpemVvZigqcHRlKSk7Ci0JZmx1c2hfcHRjX2FuZF90bGIoc21tdSwgYXMsIGlvdmEsIHB0ZSwgcGFnZSwgMCk7Ci0JcHV0X3NpZ25hdHVyZShhcywgaW92YSwgcGZuKTsKLX0KLQotc3RhdGljIGludCBzbW11X2lvbW11X21hcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKLQkJCSAgcGh5c19hZGRyX3QgcGEsIHNpemVfdCBieXRlcywgaW50IHByb3QpCi17Ci0Jc3RydWN0IHNtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OwotCXVuc2lnbmVkIGxvbmcgcGZuID0gX19waHlzX3RvX3BmbihwYSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWRldl9kYmcoYXMtPnNtbXUtPmRldiwgIlslZF0gJTA4bHg6JXBhXG4iLCBhcy0+YXNpZCwgaW92YSwgJnBhKTsKLQotCWlmICghcGZuX3ZhbGlkKHBmbikpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JX19zbW11X2lvbW11X21hcF9wZm4oYXMsIGlvdmEsIHBmbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnNtbXUtPmxvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc2l6ZV90IHNtbXVfaW9tbXVfdW5tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCi0JCQkgICAgICAgc2l6ZV90IGJ5dGVzKQorc3RhdGljIHZvaWQgdGVncmFfc21tdV9mcmVlX2FzaWQoc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsIHVuc2lnbmVkIGludCBpZCkKIHsKLQlzdHJ1Y3Qgc21tdV9hcyAqYXMgPSBkb21haW4tPnByaXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWRldl9kYmcoYXMtPnNtbXUtPmRldiwgIlslZF0gJTA4bHhcbiIsIGFzLT5hc2lkLCBpb3ZhKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCV9fc21tdV9pb21tdV91bm1hcChhcywgaW92YSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gU01NVV9QQUdFX1NJWkU7CisJbXV0ZXhfbG9jaygmc21tdS0+bG9jayk7CisJY2xlYXJfYml0KGlkLCBzbW11LT5hc2lkcyk7CisJbXV0ZXhfdW5sb2NrKCZzbW11LT5sb2NrKTsKIH0KIAotc3RhdGljIHBoeXNfYWRkcl90IHNtbXVfaW9tbXVfaW92YV90b19waHlzKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKLQkJCQkJICAgZG1hX2FkZHJfdCBpb3ZhKQotewotCXN0cnVjdCBzbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKLQl1bnNpZ25lZCBsb25nICpwdGU7Ci0JdW5zaWduZWQgaW50ICpjb3VudDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIHBmbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0KLQlwdGUgPSBsb2NhdGVfcHRlKGFzLCBpb3ZhLCB0cnVlLCAmcGFnZSwgJmNvdW50KTsKLQlwZm4gPSAqcHRlICYgU01NVV9QRk5fTUFTSzsKLQlXQVJOX09OKCFwZm5fdmFsaWQocGZuKSk7Ci0JZGV2X2RiZyhhcy0+c21tdS0+ZGV2LAotCQkiaW92YTolMDhsbHggcGZuOiUwOGx4IGFzaWQ6JWRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpaW92YSwKLQkJIHBmbiwgYXMtPmFzaWQpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gUEZOX1BIWVMocGZuKTsKLX0KLQotc3RhdGljIGJvb2wgc21tdV9pb21tdV9jYXBhYmxlKGVudW0gaW9tbXVfY2FwIGNhcCkKK3N0YXRpYyBib29sIHRlZ3JhX3NtbXVfY2FwYWJsZShlbnVtIGlvbW11X2NhcCBjYXApCiB7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IHNtbXVfaW9tbXVfYXR0YWNoX2RldihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCi0JCQkJIHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdGVncmFfc21tdV9kb21haW5faW5pdChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCiB7Ci0Jc3RydWN0IHNtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OwotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGFzLT5zbW11OwotCXN0cnVjdCBzbW11X2NsaWVudCAqY2xpZW50LCAqYzsKLQl1MzIgbWFwOwotCWludCBlcnI7CisJc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzOworCXVuc2lnbmVkIGludCBpOworCXVpbnQzMl90ICpwZDsKIAotCWNsaWVudCA9IGRldm1fa3phbGxvYyhzbW11LT5kZXYsIHNpemVvZigqYyksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQorCWFzID0ga3phbGxvYyhzaXplb2YoKmFzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5kZXYgPSBkZXY7Ci0JY2xpZW50LT5hcyA9IGFzOwotCW1hcCA9ICh1bnNpZ25lZCBsb25nKWRldi0+cGxhdGZvcm1fZGF0YTsKLQlpZiAoIW1hcCkKLQkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBzbW11X2NsaWVudF9lbmFibGVfaHdncnAoY2xpZW50LCBtYXApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2h3Z3JwOworCWFzLT5hdHRyID0gU01NVV9QRF9SRUFEQUJMRSB8IFNNTVVfUERfV1JJVEFCTEUgfCBTTU1VX1BEX05PTlNFQ1VSRTsKKwlhcy0+ZG9tYWluID0gZG9tYWluOwogCi0Jc3Bpbl9sb2NrKCZhcy0+Y2xpZW50X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmFzLT5jbGllbnQsIGxpc3QpIHsKLQkJaWYgKGMtPmRldiA9PSBkZXYpIHsKLQkJCWRldl9lcnIoc21tdS0+ZGV2LAotCQkJCSIlcyBpcyBhbHJlYWR5IGF0dGFjaGVkXG4iLCBkZXZfbmFtZShjLT5kZXYpKTsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycl9jbGllbnQ7Ci0JCX0KLQl9Ci0JbGlzdF9hZGQoJmNsaWVudC0+bGlzdCwgJmFzLT5jbGllbnQpOwotCXNwaW5fdW5sb2NrKCZhcy0+Y2xpZW50X2xvY2spOwotCi0JLyoKLQkgKiBSZXNlcnZlICJwYWdlIHplcm8iIGZvciBBVlAgdmVjdG9ycyB1c2luZyBhIGNvbW1vbiBkdW1teQotCSAqIHBhZ2UuCi0JICovCi0JaWYgKG1hcCAmIEhXR19BVlBDKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCXBhZ2UgPSBhcy0+c21tdS0+YXZwX3ZlY3Rvcl9wYWdlOwotCQlfX3NtbXVfaW9tbXVfbWFwX3BmbihhcywgMCwgcGFnZV90b19wZm4ocGFnZSkpOwotCi0JCXByX2luZm8oIlJlc2VydmUgXCJwYWdlIHplcm9cIiBmb3IgQVZQIHZlY3RvcnMgdXNpbmcgYSBjb21tb24gZHVtbXlcbiIpOworCWFzLT5wZCA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX0RNQSk7CisJaWYgKCFhcy0+cGQpIHsKKwkJa2ZyZWUoYXMpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkZXZfZGJnKHNtbXUtPmRldiwgIiVzIGlzIGF0dGFjaGVkXG4iLCBkZXZfbmFtZShkZXYpKTsKLQlyZXR1cm4gMDsKLQotZXJyX2NsaWVudDoKLQlzbW11X2NsaWVudF9kaXNhYmxlX2h3Z3JwKGNsaWVudCk7Ci0Jc3Bpbl91bmxvY2soJmFzLT5jbGllbnRfbG9jayk7Ci1lcnJfaHdncnA6Ci0JZGV2bV9rZnJlZShzbW11LT5kZXYsIGNsaWVudCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgc21tdV9pb21tdV9kZXRhY2hfZGV2KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKLQkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc21tdV9hcyAqYXMgPSBkb21haW4tPnByaXY7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gYXMtPnNtbXU7Ci0Jc3RydWN0IHNtbXVfY2xpZW50ICpjOwotCi0Jc3Bpbl9sb2NrKCZhcy0+Y2xpZW50X2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmYXMtPmNsaWVudCwgbGlzdCkgewotCQlpZiAoYy0+ZGV2ID09IGRldikgewotCQkJc21tdV9jbGllbnRfZGlzYWJsZV9od2dycChjKTsKLQkJCWxpc3RfZGVsKCZjLT5saXN0KTsKLQkJCWRldm1fa2ZyZWUoc21tdS0+ZGV2LCBjKTsKLQkJCWMtPmFzID0gTlVMTDsKLQkJCWRldl9kYmcoc21tdS0+ZGV2LAotCQkJCSIlcyBpcyBkZXRhY2hlZFxuIiwgZGV2X25hbWUoYy0+ZGV2KSk7Ci0JCQlnb3RvIG91dDsKLQkJfQorCWFzLT5jb3VudCA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFhcy0+Y291bnQpIHsKKwkJX19mcmVlX3BhZ2UoYXMtPnBkKTsKKwkJa2ZyZWUoYXMpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JZGV2X2VycihzbW11LT5kZXYsICJDb3VsZG4ndCBmaW5kICVzXG4iLCBkZXZfbmFtZShkZXYpKTsKLW91dDoKLQlzcGluX3VubG9jaygmYXMtPmNsaWVudF9sb2NrKTsKLX0KIAotc3RhdGljIGludCBzbW11X2lvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKLXsKLQlpbnQgaSwgZXJyID0gLUVBR0FJTjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzbW11X2FzICphczsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBzbW11X2hhbmRsZTsKKwkvKiBjbGVhciBQREVzICovCisJcGQgPSBwYWdlX2FkZHJlc3MoYXMtPnBkKTsKKwlTZXRQYWdlUmVzZXJ2ZWQoYXMtPnBkKTsKIAotCS8qIExvb2sgZm9yIGEgZnJlZSBBUyB3aXRoIGxvY2sgaGVsZCAqLwotCWZvciAgKGkgPSAwOyBpIDwgc21tdS0+bnVtX2FzOyBpKyspIHsKLQkJYXMgPSAmc21tdS0+YXNbaV07CisJZm9yIChpID0gMDsgaSA8IFNNTVVfTlVNX1BERTsgaSsrKQorCQlwZFtpXSA9IDA7CiAKLQkJaWYgKGFzLT5wZGlyX3BhZ2UpCi0JCQljb250aW51ZTsKKwkvKiBjbGVhciBQREUgdXNhZ2UgY291bnRlcnMgKi8KKwlwZCA9IHBhZ2VfYWRkcmVzcyhhcy0+Y291bnQpOworCVNldFBhZ2VSZXNlcnZlZChhcy0+Y291bnQpOwogCi0JCWVyciA9IGFsbG9jX3BkaXIoYXMpOwotCQlpZiAoIWVycikKLQkJCWdvdG8gZm91bmQ7Ci0KLQkJaWYgKGVyciAhPSAtRUFHQUlOKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IHNtbXUtPm51bV9hcykKLQkJZGV2X2VycihzbW11LT5kZXYsICAibm8gZnJlZSBBU1xuIik7Ci0JcmV0dXJuIGVycjsKLQotZm91bmQ6Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNtbXUtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFVwZGF0ZSBQRElSIHJlZ2lzdGVyICovCi0Jc21tdV93cml0ZShzbW11LCBTTU1VX1BUQl9BU0lEX0NVUihhcy0+YXNpZCksIFNNTVVfUFRCX0FTSUQpOwotCXNtbXVfd3JpdGUoc21tdSwKLQkJICAgU01NVV9NS19QRElSKGFzLT5wZGlyX3BhZ2UsIGFzLT5wZGlyX2F0dHIpLCBTTU1VX1BUQl9EQVRBKTsKLQlGTFVTSF9TTU1VX1JFR1Moc21tdSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbW11LT5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IFNNTVVfTlVNX1BERTsgaSsrKQorCQlwZFtpXSA9IDA7CiAKIAlkb21haW4tPnByaXYgPSBhczsKIAotCWRvbWFpbi0+Z2VvbWV0cnkuYXBlcnR1cmVfc3RhcnQgPSBzbW11LT5pb3ZtbV9iYXNlOwotCWRvbWFpbi0+Z2VvbWV0cnkuYXBlcnR1cmVfZW5kICAgPSBzbW11LT5pb3ZtbV9iYXNlICsKLQkJc21tdS0+cGFnZV9jb3VudCAqIFNNTVVfUEFHRV9TSVpFIC0gMTsKLQlkb21haW4tPmdlb21ldHJ5LmZvcmNlX2FwZXJ0dXJlID0gdHJ1ZTsKLQotCWRldl9kYmcoc21tdS0+ZGV2LCAic21tdV9hc0AlcFxuIiwgYXMpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNtbXVfaW9tbXVfZG9tYWluX2Rlc3Ryb3koc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQorc3RhdGljIHZvaWQgdGVncmFfc21tdV9kb21haW5fZGVzdHJveShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCiB7Ci0Jc3RydWN0IHNtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OwotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGFzLT5zbW11OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJLyogVE9ETzogZnJlZSBwYWdlIGRpcmVjdG9yeSBhbmQgcGFnZSB0YWJsZXMgKi8KKwlDbGVhclBhZ2VSZXNlcnZlZChhcy0+cGQpOwogCi0JaWYgKGFzLT5wZGlyX3BhZ2UpIHsKLQkJc3Bpbl9sb2NrKCZzbW11LT5sb2NrKTsKLQkJc21tdV93cml0ZShzbW11LCBTTU1VX1BUQl9BU0lEX0NVUihhcy0+YXNpZCksIFNNTVVfUFRCX0FTSUQpOwotCQlzbW11X3dyaXRlKHNtbXUsIFNNTVVfUFRCX0RBVEFfUkVTRVRfVkFMLCBTTU1VX1BUQl9EQVRBKTsKLQkJRkxVU0hfU01NVV9SRUdTKHNtbXUpOwotCQlzcGluX3VubG9jaygmc21tdS0+bG9jayk7Ci0KLQkJZnJlZV9wZGlyKGFzKTsKLQl9Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJmFzLT5jbGllbnQpKSB7Ci0JCXN0cnVjdCBzbW11X2NsaWVudCAqYzsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZhcy0+Y2xpZW50LCBsaXN0KQotCQkJc21tdV9pb21tdV9kZXRhY2hfZGV2KGRvbWFpbiwgYy0+ZGV2KTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCi0JZG9tYWluLT5wcml2ID0gTlVMTDsKLQlkZXZfZGJnKHNtbXUtPmRldiwgInNtbXVfYXNAJXBcbiIsIGFzKTsKKwlrZnJlZShhcyk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIHNtbXVfaW9tbXVfb3BzID0gewotCS5jYXBhYmxlCT0gc21tdV9pb21tdV9jYXBhYmxlLAotCS5kb21haW5faW5pdAk9IHNtbXVfaW9tbXVfZG9tYWluX2luaXQsCi0JLmRvbWFpbl9kZXN0cm95CT0gc21tdV9pb21tdV9kb21haW5fZGVzdHJveSwKLQkuYXR0YWNoX2Rldgk9IHNtbXVfaW9tbXVfYXR0YWNoX2RldiwKLQkuZGV0YWNoX2Rldgk9IHNtbXVfaW9tbXVfZGV0YWNoX2RldiwKLQkubWFwCQk9IHNtbXVfaW9tbXVfbWFwLAotCS51bm1hcAkJPSBzbW11X2lvbW11X3VubWFwLAotCS5pb3ZhX3RvX3BoeXMJPSBzbW11X2lvbW11X2lvdmFfdG9fcGh5cywKLQkucGdzaXplX2JpdG1hcAk9IFNNTVVfSU9NTVVfUEdTSVpFUywKLX07Ci0KLS8qIFNob3VsZCBiZSBpbiB0aGUgb3JkZXIgb2YgZW51bSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzbW11X2RlYnVnZnNfbWNbXSA9IHsgIm1jIiwgfTsKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc21tdV9kZWJ1Z2ZzX2NhY2hlW10gPSB7ICAidGxiIiwgInB0YyIsIH07Ci0KLXN0YXRpYyBzc2l6ZV90IHNtbXVfZGVidWdmc19zdGF0c193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zd2dyb3VwICoKK3RlZ3JhX3NtbXVfZmluZF9zd2dyb3VwKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LCB1bnNpZ25lZCBpbnQgc3dncm91cCkKIHsKLQlzdHJ1Y3Qgc21tdV9kZWJ1Z2ZzX2luZm8gKmluZm87Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11OwotCWludCBpOwotCWVudW0gewotCQlfT0ZGID0gMCwKLQkJX09OLAotCQlfUkVTRVQsCi0JfTsKLQljb25zdCBjaGFyICogY29uc3QgY29tbWFuZFtdID0gewotCQlbX09GRl0JCT0gIm9mZiIsCi0JCVtfT05dCQk9ICJvbiIsCi0JCVtfUkVTRVRdCT0gInJlc2V0IiwKLQl9OwotCWNoYXIgc3RyW10gPSAicmVzZXQiOwotCXUzMiB2YWw7Ci0Jc2l6ZV90IG9mZnM7CisJY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc3dncm91cCAqZ3JvdXAgPSBOVUxMOworCXVuc2lnbmVkIGludCBpOwogCi0JY291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBzaXplb2Yoc3RyKSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHN0ciwgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZCk7IGkrKykKLQkJaWYgKHN0cm5jbXAoc3RyLCBjb21tYW5kW2ldLAotCQkJICAgIHN0cmxlbihjb21tYW5kW2ldKSkgPT0gMCkKKwlmb3IgKGkgPSAwOyBpIDwgc21tdS0+c29jLT5udW1fc3dncm91cHM7IGkrKykgeworCQlpZiAoc21tdS0+c29jLT5zd2dyb3Vwc1tpXS5zd2dyb3VwID09IHN3Z3JvdXApIHsKKwkJCWdyb3VwID0gJnNtbXUtPnNvYy0+c3dncm91cHNbaV07CiAJCQlicmVhazsKLQotCWlmIChpID09IEFSUkFZX1NJWkUoY29tbWFuZCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaW5mbyA9IGZpbGVfaW5vZGUoZmlsZSktPmlfcHJpdmF0ZTsKLQlzbW11ID0gaW5mby0+c21tdTsKLQotCW9mZnMgPSBTTU1VX0NBQ0hFX0NPTkZJRyhpbmZvLT5jYWNoZSk7Ci0JdmFsID0gc21tdV9yZWFkKHNtbXUsIG9mZnMpOwotCXN3aXRjaCAoaSkgewotCWNhc2UgX09GRjoKLQkJdmFsICY9IH5TTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19FTkFCTEU7Ci0JCXZhbCAmPSB+U01NVV9DQUNIRV9DT05GSUdfU1RBVFNfVEVTVDsKLQkJc21tdV93cml0ZShzbW11LCB2YWwsIG9mZnMpOwotCQlicmVhazsKLQljYXNlIF9PTjoKLQkJdmFsIHw9IFNNTVVfQ0FDSEVfQ09ORklHX1NUQVRTX0VOQUJMRTsKLQkJdmFsICY9IH5TTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19URVNUOwotCQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgb2Zmcyk7Ci0JCWJyZWFrOwotCWNhc2UgX1JFU0VUOgotCQl2YWwgfD0gU01NVV9DQUNIRV9DT05GSUdfU1RBVFNfVEVTVDsKLQkJc21tdV93cml0ZShzbW11LCB2YWwsIG9mZnMpOwotCQl2YWwgJj0gflNNTVVfQ0FDSEVfQ09ORklHX1NUQVRTX1RFU1Q7Ci0JCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBvZmZzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCWJyZWFrOwotCX0KLQotCWRldl9kYmcoc21tdS0+ZGV2LCAiJXMoKSAlMDh4LCAlMDh4IEAlMDh4XG4iLCBfX2Z1bmNfXywKLQkJdmFsLCBzbW11X3JlYWQoc21tdSwgb2ZmcyksIG9mZnMpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgaW50IHNtbXVfZGVidWdmc19zdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc21tdV9kZWJ1Z2ZzX2luZm8gKmluZm8gPSBzLT5wcml2YXRlOwotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGluZm8tPnNtbXU7Ci0JaW50IGk7Ci0JY29uc3QgY2hhciAqIGNvbnN0IHN0YXRzW10gPSB7ICJoaXQiLCAibWlzcyIsIH07Ci0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0YXRzKTsgaSsrKSB7Ci0JCXUzMiB2YWw7Ci0JCXNpemVfdCBvZmZzOwotCi0JCW9mZnMgPSBTTU1VX1NUQVRTX0NBQ0hFX0NPVU5UKGluZm8tPm1jLCBpbmZvLT5jYWNoZSwgaSk7Ci0JCXZhbCA9IHNtbXVfcmVhZChzbW11LCBvZmZzKTsKLQkJc2VxX3ByaW50ZihzLCAiJXM6JTA4eCAiLCBzdGF0c1tpXSwgdmFsKTsKLQotCQlkZXZfZGJnKHNtbXUtPmRldiwgIiVzKCkgJXMgJTA4eCBAJTA4eFxuIiwgX19mdW5jX18sCi0JCQlzdGF0c1tpXSwgdmFsLCBvZmZzKTsKLQl9Ci0Jc2VxX3ByaW50ZihzLCAiXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbW11X2RlYnVnZnNfc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc21tdV9kZWJ1Z2ZzX3N0YXRzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbW11X2RlYnVnZnNfc3RhdHNfZm9wcyA9IHsKLQkub3BlbgkJPSBzbW11X2RlYnVnZnNfc3RhdHNfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotCS53cml0ZQkJPSBzbW11X2RlYnVnZnNfc3RhdHNfd3JpdGUsCi19OwotCi1zdGF0aWMgdm9pZCBzbW11X2RlYnVnZnNfZGVsZXRlKHN0cnVjdCBzbW11X2RldmljZSAqc21tdSkKLXsKLQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoc21tdS0+ZGVidWdmc19yb290KTsKLQlrZnJlZShzbW11LT5kZWJ1Z2ZzX2luZm8pOwotfQotCi1zdGF0aWMgdm9pZCBzbW11X2RlYnVnZnNfY3JlYXRlKHN0cnVjdCBzbW11X2RldmljZSAqc21tdSkKLXsKLQlpbnQgaTsKLQlzaXplX3QgYnl0ZXM7Ci0Jc3RydWN0IGRlbnRyeSAqcm9vdDsKLQotCWJ5dGVzID0gQVJSQVlfU0laRShzbW11X2RlYnVnZnNfbWMpICogQVJSQVlfU0laRShzbW11X2RlYnVnZnNfY2FjaGUpICoKLQkJc2l6ZW9mKCpzbW11LT5kZWJ1Z2ZzX2luZm8pOwotCXNtbXUtPmRlYnVnZnNfaW5mbyA9IGttYWxsb2MoYnl0ZXMsIEdGUF9LRVJORUwpOwotCWlmICghc21tdS0+ZGVidWdmc19pbmZvKQotCQlyZXR1cm47Ci0KLQlyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKHNtbXUtPmRldiksIE5VTEwpOwotCWlmICghcm9vdCkKLQkJZ290byBlcnJfb3V0OwotCXNtbXUtPmRlYnVnZnNfcm9vdCA9IHJvb3Q7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzbW11X2RlYnVnZnNfbWMpOyBpKyspIHsKLQkJaW50IGo7Ci0JCXN0cnVjdCBkZW50cnkgKm1jOwotCi0JCW1jID0gZGVidWdmc19jcmVhdGVfZGlyKHNtbXVfZGVidWdmc19tY1tpXSwgcm9vdCk7Ci0JCWlmICghbWMpCi0JCQlnb3RvIGVycl9vdXQ7Ci0KLQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoc21tdV9kZWJ1Z2ZzX2NhY2hlKTsgaisrKSB7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICpjYWNoZTsKLQkJCXN0cnVjdCBzbW11X2RlYnVnZnNfaW5mbyAqaW5mbzsKLQotCQkJaW5mbyA9IHNtbXUtPmRlYnVnZnNfaW5mbzsKLQkJCWluZm8gKz0gaSAqIEFSUkFZX1NJWkUoc21tdV9kZWJ1Z2ZzX21jKSArIGo7Ci0JCQlpbmZvLT5zbW11ID0gc21tdTsKLQkJCWluZm8tPm1jID0gaTsKLQkJCWluZm8tPmNhY2hlID0gajsKLQotCQkJY2FjaGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKHNtbXVfZGVidWdmc19jYWNoZVtqXSwKLQkJCQkJCSAgICBTX0lXVUdPIHwgU19JUlVHTywgbWMsCi0JCQkJCQkgICAgKHZvaWQgKilpbmZvLAotCQkJCQkJICAgICZzbW11X2RlYnVnZnNfc3RhdHNfZm9wcyk7Ci0JCQlpZiAoIWNhY2hlKQotCQkJCWdvdG8gZXJyX291dDsKIAkJfQogCX0KIAotCXJldHVybjsKLQotZXJyX291dDoKLQlzbW11X2RlYnVnZnNfZGVsZXRlKHNtbXUpOworCXJldHVybiBncm91cDsKIH0KIAotc3RhdGljIGludCB0ZWdyYV9zbW11X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdGVncmFfc21tdV9lbmFibGUoc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsIHVuc2lnbmVkIGludCBzd2dyb3VwLAorCQkJICAgICAgdW5zaWduZWQgaW50IGFzaWQpCiB7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc3dncm91cCAqZ3JvdXA7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHZhbHVlOwogCi0Jc21tdS0+dHJhbnNsYXRpb25fZW5hYmxlXzAgPSBzbW11X3JlYWQoc21tdSwgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMCk7Ci0Jc21tdS0+dHJhbnNsYXRpb25fZW5hYmxlXzEgPSBzbW11X3JlYWQoc21tdSwgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMSk7Ci0Jc21tdS0+dHJhbnNsYXRpb25fZW5hYmxlXzIgPSBzbW11X3JlYWQoc21tdSwgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMik7Ci0Jc21tdS0+YXNpZF9zZWN1cml0eSA9IHNtbXVfcmVhZChzbW11LCBTTU1VX0FTSURfU0VDVVJJVFkpOwotCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBzbW11LT5zb2MtPm51bV9jbGllbnRzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHRlZ3JhX21jX2NsaWVudCAqY2xpZW50ID0gJnNtbXUtPnNvYy0+Y2xpZW50c1tpXTsKKworCQlpZiAoY2xpZW50LT5zd2dyb3VwICE9IHN3Z3JvdXApCisJCQljb250aW51ZTsKKworCQl2YWx1ZSA9IHNtbXVfcmVhZGwoc21tdSwgY2xpZW50LT5zbW11LnJlZyk7CisJCXZhbHVlIHw9IEJJVChjbGllbnQtPnNtbXUuYml0KTsKKwkJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIGNsaWVudC0+c21tdS5yZWcpOworCX0KKworCWdyb3VwID0gdGVncmFfc21tdV9maW5kX3N3Z3JvdXAoc21tdSwgc3dncm91cCk7CisJaWYgKGdyb3VwKSB7CisJCXZhbHVlID0gc21tdV9yZWFkbChzbW11LCBncm91cC0+cmVnKTsKKwkJdmFsdWUgJj0gflNNTVVfQVNJRF9NQVNLOworCQl2YWx1ZSB8PSBTTU1VX0FTSURfVkFMVUUoYXNpZCk7CisJCXZhbHVlIHw9IFNNTVVfQVNJRF9FTkFCTEU7CisJCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBncm91cC0+cmVnKTsKKwl9CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfc21tdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdGVncmFfc21tdV9kaXNhYmxlKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LCB1bnNpZ25lZCBpbnQgc3dncm91cCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYXNpZCkKIHsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgKmdyb3VwOworCXVuc2lnbmVkIGludCBpOworCXUzMiB2YWx1ZTsKKworCWdyb3VwID0gdGVncmFfc21tdV9maW5kX3N3Z3JvdXAoc21tdSwgc3dncm91cCk7CisJaWYgKGdyb3VwKSB7CisJCXZhbHVlID0gc21tdV9yZWFkbChzbW11LCBncm91cC0+cmVnKTsKKwkJdmFsdWUgJj0gflNNTVVfQVNJRF9NQVNLOworCQl2YWx1ZSB8PSBTTU1VX0FTSURfVkFMVUUoYXNpZCk7CisJCXZhbHVlICY9IH5TTU1VX0FTSURfRU5BQkxFOworCQlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgZ3JvdXAtPnJlZyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNtbXUtPnNvYy0+bnVtX2NsaWVudHM7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgdGVncmFfbWNfY2xpZW50ICpjbGllbnQgPSAmc21tdS0+c29jLT5jbGllbnRzW2ldOworCisJCWlmIChjbGllbnQtPnN3Z3JvdXAgIT0gc3dncm91cCkKKwkJCWNvbnRpbnVlOworCisJCXZhbHVlID0gc21tdV9yZWFkbChzbW11LCBjbGllbnQtPnNtbXUucmVnKTsKKwkJdmFsdWUgJj0gfkJJVChjbGllbnQtPnNtbXUuYml0KTsKKwkJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIGNsaWVudC0+c21tdS5yZWcpOworCX0KK30KKworc3RhdGljIGludCB0ZWdyYV9zbW11X2FzX3ByZXBhcmUoc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsCisJCQkJIHN0cnVjdCB0ZWdyYV9zbW11X2FzICphcykKK3sKKwl1MzIgdmFsdWU7CiAJaW50IGVycjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzbW11LT5sb2NrLCBmbGFncyk7Ci0JZXJyID0gc21tdV9zZXR1cF9yZWdzKHNtbXUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtbXUtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHRlZ3JhX3NtbXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXU7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKLQlpbnQgaSwgYXNpZHMsIGVyciA9IDA7Ci0JZG1hX2FkZHJfdCB1bmluaXRpYWxpemVkX3ZhcihiYXNlKTsKLQlzaXplX3QgYnl0ZXMsIHVuaW5pdGlhbGl6ZWRfdmFyKHNpemUpOwotCi0JaWYgKHNtbXVfaGFuZGxlKQotCQlyZXR1cm4gLUVJTzsKLQotCUJVSUxEX0JVR19PTihQQUdFX1NISUZUICE9IFNNTVVfUEFHRV9TSElGVCk7Ci0KLQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAibnZpZGlhLCNhc2lkcyIsICZhc2lkcykpCi0JCXJldHVybiAtRU5PREVWOwotCi0JYnl0ZXMgPSBzaXplb2YoKnNtbXUpICsgYXNpZHMgKiBzaXplb2YoKnNtbXUtPmFzKTsKLQlzbW11ID0gZGV2bV9remFsbG9jKGRldiwgYnl0ZXMsIEdGUF9LRVJORUwpOwotCWlmICghc21tdSkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBzbW11X2RldmljZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCWlmIChhcy0+dXNlX2NvdW50ID4gMCkgeworCQlhcy0+dXNlX2NvdW50Kys7CisJCXJldHVybiAwOwogCX0KIAotCXNtbXUtPm5yZWdzID0gcGRldi0+bnVtX3Jlc291cmNlczsKLQlzbW11LT5yZWdzID0gZGV2bV9remFsbG9jKGRldiwgMiAqIHNtbXUtPm5yZWdzICogc2l6ZW9mKCpzbW11LT5yZWdzKSwKLQkJCQkgIEdGUF9LRVJORUwpOwotCXNtbXUtPnJlZ2UgPSBzbW11LT5yZWdzICsgc21tdS0+bnJlZ3M7Ci0JaWYgKCFzbW11LT5yZWdzKQotCQlyZXR1cm4gLUVOT01FTTsKLQlmb3IgKGkgPSAwOyBpIDwgc21tdS0+bnJlZ3M7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQotCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOwotCQlzbW11LT5yZWdzW2ldID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7Ci0JCWlmIChJU19FUlIoc21tdS0+cmVnc1tpXSkpCi0JCQlyZXR1cm4gUFRSX0VSUihzbW11LT5yZWdzW2ldKTsKLQkJc21tdS0+cmVnZVtpXSA9IHNtbXUtPnJlZ3NbaV0gKyByZXNvdXJjZV9zaXplKHJlcykgLSAxOwotCX0KLQkvKiBTYW1lIGFzICJtYyIgMXN0IHJlZ2l0ZXIgYmxvY2sgc3RhcnQgYWRkcmVzcyAqLwotCXNtbXUtPnJlZ2Jhc2UgPSAodm9pZCBfX2lvbWVtICopKCh1MzIpc21tdS0+cmVnc1swXSAmIFBBR0VfTUFTSyk7Ci0KLQllcnIgPSBvZl9nZXRfZG1hX3dpbmRvdyhkZXYtPm9mX25vZGUsIE5VTEwsIDAsIE5VTEwsICZiYXNlLCAmc2l6ZSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoc2l6ZSAmIFNNTVVfUEFHRV9NQVNLKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNpemUgPj49IFNNTVVfUEFHRV9TSElGVDsKLQlpZiAoIXNpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc21tdS0+YWhiID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJudmlkaWEsYWhiIiwgMCk7Ci0JaWYgKCFzbW11LT5haGIpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc21tdS0+ZGV2ID0gZGV2OwotCXNtbXUtPm51bV9hcyA9IGFzaWRzOwotCXNtbXUtPmlvdm1tX2Jhc2UgPSBiYXNlOwotCXNtbXUtPnBhZ2VfY291bnQgPSBzaXplOwotCi0Jc21tdS0+dHJhbnNsYXRpb25fZW5hYmxlXzAgPSB+MDsKLQlzbW11LT50cmFuc2xhdGlvbl9lbmFibGVfMSA9IH4wOwotCXNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8yID0gfjA7Ci0Jc21tdS0+YXNpZF9zZWN1cml0eSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc21tdS0+bnVtX2FzOyBpKyspIHsKLQkJc3RydWN0IHNtbXVfYXMgKmFzID0gJnNtbXUtPmFzW2ldOwotCi0JCWFzLT5zbW11ID0gc21tdTsKLQkJYXMtPmFzaWQgPSBpOwotCQlhcy0+cGRpcl9hdHRyID0gX1BESVJfQVRUUjsKLQkJYXMtPnBkZV9hdHRyID0gX1BERV9BVFRSOwotCQlhcy0+cHRlX2F0dHIgPSBfUFRFX0FUVFI7Ci0KLQkJc3Bpbl9sb2NrX2luaXQoJmFzLT5sb2NrKTsKLQkJc3Bpbl9sb2NrX2luaXQoJmFzLT5jbGllbnRfbG9jayk7Ci0JCUlOSVRfTElTVF9IRUFEKCZhcy0+Y2xpZW50KTsKLQl9Ci0Jc3Bpbl9sb2NrX2luaXQoJnNtbXUtPmxvY2spOwotCWVyciA9IHNtbXVfc2V0dXBfcmVncyhzbW11KTsKLQlpZiAoZXJyKQorCWVyciA9IHRlZ3JhX3NtbXVfYWxsb2NfYXNpZChzbW11LCAmYXMtPmlkKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzbW11KTsKIAotCXNtbXUtPmF2cF92ZWN0b3JfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzbW11LT5hdnBfdmVjdG9yX3BhZ2UpCisJc21tdS0+c29jLT5vcHMtPmZsdXNoX2RjYWNoZShhcy0+cGQsIDAsIFNNTVVfU0laRV9QRCk7CisJc21tdV9mbHVzaF9wdGMoc21tdSwgYXMtPnBkLCAwKTsKKwlzbW11X2ZsdXNoX3RsYl9hc2lkKHNtbXUsIGFzLT5pZCk7CisKKwlzbW11X3dyaXRlbChzbW11LCBhcy0+aWQgJiAweDdmLCBTTU1VX1BUQl9BU0lEKTsKKwl2YWx1ZSA9IFNNTVVfUFRCX0RBVEFfVkFMVUUoYXMtPnBkLCBhcy0+YXR0cik7CisJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIFNNTVVfUFRCX0RBVEEpOworCXNtbXVfZmx1c2goc21tdSk7CisKKwlhcy0+c21tdSA9IHNtbXU7CisJYXMtPnVzZV9jb3VudCsrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfYXNfdW5wcmVwYXJlKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LAorCQkJCSAgICBzdHJ1Y3QgdGVncmFfc21tdV9hcyAqYXMpCit7CisJaWYgKC0tYXMtPnVzZV9jb3VudCA+IDApCisJCXJldHVybjsKKworCXRlZ3JhX3NtbXVfZnJlZV9hc2lkKHNtbXUsIGFzLT5pZCk7CisJYXMtPnNtbXUgPSBOVUxMOworfQorCitzdGF0aWMgaW50IHRlZ3JhX3NtbXVfYXR0YWNoX2RldihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCisJCQkJIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSA9IGRldi0+YXJjaGRhdGEuaW9tbXU7CisJc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmdzOworCXVuc2lnbmVkIGludCBpbmRleCA9IDA7CisJaW50IGVyciA9IDA7CisKKwl3aGlsZSAoIW9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5wLCAiaW9tbXVzIiwgIiNpb21tdS1jZWxscyIsIGluZGV4LAorCQkJCQkgICAmYXJncykpIHsKKwkJdW5zaWduZWQgaW50IHN3Z3JvdXAgPSBhcmdzLmFyZ3NbMF07CisKKwkJaWYgKGFyZ3MubnAgIT0gc21tdS0+ZGV2LT5vZl9ub2RlKSB7CisJCQlvZl9ub2RlX3B1dChhcmdzLm5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJb2Zfbm9kZV9wdXQoYXJncy5ucCk7CisKKwkJZXJyID0gdGVncmFfc21tdV9hc19wcmVwYXJlKHNtbXUsIGFzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJCXRlZ3JhX3NtbXVfZW5hYmxlKHNtbXUsIHN3Z3JvdXAsIGFzLT5pZCk7CisJCWluZGV4Kys7CisJfQorCisJaWYgKGluZGV4ID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfZGV0YWNoX2RldihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGVncmFfc21tdV9hcyAqYXMgPSBkb21haW4tPnByaXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSA9IGFzLT5zbW11OworCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgYXJnczsKKwl1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworCisJd2hpbGUgKCFvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyhucCwgImlvbW11cyIsICIjaW9tbXUtY2VsbHMiLCBpbmRleCwKKwkJCQkJICAgJmFyZ3MpKSB7CisJCXVuc2lnbmVkIGludCBzd2dyb3VwID0gYXJncy5hcmdzWzBdOworCisJCWlmIChhcmdzLm5wICE9IHNtbXUtPmRldi0+b2Zfbm9kZSkgeworCQkJb2Zfbm9kZV9wdXQoYXJncy5ucCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW9mX25vZGVfcHV0KGFyZ3MubnApOworCisJCXRlZ3JhX3NtbXVfZGlzYWJsZShzbW11LCBzd2dyb3VwLCBhcy0+aWQpOworCQl0ZWdyYV9zbW11X2FzX3VucHJlcGFyZShzbW11LCBhcyk7CisJCWluZGV4Kys7CisJfQorfQorCitzdGF0aWMgdTMyICphc19nZXRfcHRlKHN0cnVjdCB0ZWdyYV9zbW11X2FzICphcywgZG1hX2FkZHJfdCBpb3ZhLAorCQkgICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcCkKK3sKKwl1MzIgKnBkID0gcGFnZV9hZGRyZXNzKGFzLT5wZCksICpwdCwgKmNvdW50OworCXUzMiBwZGUgPSAoaW92YSA+PiBTTU1VX1BERV9TSElGVCkgJiAweDNmZjsKKwl1MzIgcHRlID0gKGlvdmEgPj4gU01NVV9QVEVfU0hJRlQpICYgMHgzZmY7CisJc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUgPSBhcy0+c21tdTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChwZFtwZGVdID09IDApIHsKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX0RNQSk7CisJCWlmICghcGFnZSkKKwkJCXJldHVybiBOVUxMOworCisJCXB0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7CisKKwkJZm9yIChpID0gMDsgaSA8IFNNTVVfTlVNX1BURTsgaSsrKQorCQkJcHRbaV0gPSAwOworCisJCXNtbXUtPnNvYy0+b3BzLT5mbHVzaF9kY2FjaGUocGFnZSwgMCwgU01NVV9TSVpFX1BUKTsKKworCQlwZFtwZGVdID0gU01NVV9NS19QREUocGFnZSwgU01NVV9QREVfQVRUUiB8IFNNTVVfUERFX05FWFQpOworCisJCXNtbXUtPnNvYy0+b3BzLT5mbHVzaF9kY2FjaGUoYXMtPnBkLCBwZGUgPDwgMiwgNCk7CisJCXNtbXVfZmx1c2hfcHRjKHNtbXUsIGFzLT5wZCwgcGRlIDw8IDIpOworCQlzbW11X2ZsdXNoX3RsYl9zZWN0aW9uKHNtbXUsIGFzLT5pZCwgaW92YSk7CisJCXNtbXVfZmx1c2goc21tdSk7CisJfSBlbHNlIHsKKwkJcGFnZSA9IHBmbl90b19wYWdlKHBkW3BkZV0gJiBTTU1VX1BGTl9NQVNLKTsKKwkJcHQgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJfQorCisJKnBhZ2VwID0gcGFnZTsKKworCS8qIEtlZXAgdHJhY2sgb2YgZW50cmllcyBpbiB0aGlzIHBhZ2UgdGFibGUuICovCisJY291bnQgPSBwYWdlX2FkZHJlc3MoYXMtPmNvdW50KTsKKwlpZiAocHRbcHRlXSA9PSAwKQorCQljb3VudFtwZGVdKys7CisKKwlyZXR1cm4gJnB0W3B0ZV07Cit9CisKK3N0YXRpYyB2b2lkIGFzX3B1dF9wdGUoc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzLCBkbWFfYWRkcl90IGlvdmEpCit7CisJdTMyIHBkZSA9IChpb3ZhID4+IFNNTVVfUERFX1NISUZUKSAmIDB4M2ZmOworCXUzMiBwdGUgPSAoaW92YSA+PiBTTU1VX1BURV9TSElGVCkgJiAweDNmZjsKKwl1MzIgKmNvdW50ID0gcGFnZV9hZGRyZXNzKGFzLT5jb3VudCk7CisJdTMyICpwZCA9IHBhZ2VfYWRkcmVzcyhhcy0+cGQpLCAqcHQ7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gcGZuX3RvX3BhZ2UocGRbcGRlXSAmIFNNTVVfUEZOX01BU0spOworCXB0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCisJLyoKKwkgKiBXaGVuIG5vIGVudHJpZXMgaW4gdGhpcyBwYWdlIHRhYmxlIGFyZSB1c2VkIGFueW1vcmUsIHJldHVybiB0aGUKKwkgKiBtZW1vcnkgcGFnZSB0byB0aGUgc3lzdGVtLgorCSAqLworCWlmIChwdFtwdGVdICE9IDApIHsKKwkJaWYgKC0tY291bnRbcGRlXSA9PSAwKSB7CisJCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKKwkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQkJcGRbcGRlXSA9IDA7CisJCX0KKworCQlwdFtwdGVdID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfc21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCisJCQkgIHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpCit7CisJc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OworCXN0cnVjdCB0ZWdyYV9zbW11ICpzbW11ID0gYXMtPnNtbXU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdTMyICpwdGU7CisKKwlwdGUgPSBhc19nZXRfcHRlKGFzLCBpb3ZhLCAmcGFnZSk7CisJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc21tdV9kZWJ1Z2ZzX2NyZWF0ZShzbW11KTsKLQlzbW11X2hhbmRsZSA9IHNtbXU7Ci0JYnVzX3NldF9pb21tdSgmcGxhdGZvcm1fYnVzX3R5cGUsICZzbW11X2lvbW11X29wcyk7CisJKnB0ZSA9IF9fcGh5c190b19wZm4ocGFkZHIpIHwgU01NVV9QVEVfQVRUUjsKKwlvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShwdGUpOworCisJc21tdS0+c29jLT5vcHMtPmZsdXNoX2RjYWNoZShwYWdlLCBvZmZzZXQsIDQpOworCXNtbXVfZmx1c2hfcHRjKHNtbXUsIHBhZ2UsIG9mZnNldCk7CisJc21tdV9mbHVzaF90bGJfZ3JvdXAoc21tdSwgYXMtPmlkLCBpb3ZhKTsKKwlzbW11X2ZsdXNoKHNtbXUpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfc21tdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBzaXplX3QgdGVncmFfc21tdV91bm1hcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKKwkJCSAgICAgICBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgaTsKKwlzdHJ1Y3QgdGVncmFfc21tdV9hcyAqYXMgPSBkb21haW4tPnByaXY7CisJc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUgPSBhcy0+c21tdTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1MzIgKnB0ZTsKIAotCXNtbXVfZGVidWdmc19kZWxldGUoc21tdSk7CisJcHRlID0gYXNfZ2V0X3B0ZShhcywgaW92YSwgJnBhZ2UpOworCWlmICghcHRlKQorCQlyZXR1cm4gMDsKIAotCXNtbXVfd3JpdGUoc21tdSwgU01NVV9DT05GSUdfRElTQUJMRSwgU01NVV9DT05GSUcpOwotCWZvciAoaSA9IDA7IGkgPCBzbW11LT5udW1fYXM7IGkrKykKLQkJZnJlZV9wZGlyKCZzbW11LT5hc1tpXSk7Ci0JX19mcmVlX3BhZ2Uoc21tdS0+YXZwX3ZlY3Rvcl9wYWdlKTsKLQlzbW11X2hhbmRsZSA9IE5VTEw7CisJb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocHRlKTsKKwlhc19wdXRfcHRlKGFzLCBpb3ZhKTsKKworCXNtbXUtPnNvYy0+b3BzLT5mbHVzaF9kY2FjaGUocGFnZSwgb2Zmc2V0LCA0KTsKKwlzbW11X2ZsdXNoX3B0YyhzbW11LCBwYWdlLCBvZmZzZXQpOworCXNtbXVfZmx1c2hfdGxiX2dyb3VwKHNtbXUsIGFzLT5pZCwgaW92YSk7CisJc21tdV9mbHVzaChzbW11KTsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgcGh5c19hZGRyX3QgdGVncmFfc21tdV9pb3ZhX3RvX3BoeXMoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJCQkgICBkbWFfYWRkcl90IGlvdmEpCit7CisJc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OworCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXUzMiAqcHRlOworCisJcHRlID0gYXNfZ2V0X3B0ZShhcywgaW92YSwgJnBhZ2UpOworCXBmbiA9ICpwdGUgJiBTTU1VX1BGTl9NQVNLOworCisJcmV0dXJuIFBGTl9QSFlTKHBmbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGVncmFfc21tdSAqdGVncmFfc21tdV9maW5kKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgdGVncmFfbWMgKm1jOworCisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnApOworCWlmICghcGRldikKKwkJcmV0dXJuIE5VTEw7CisKKwltYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghbWMpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIG1jLT5zbW11OworfQorCitzdGF0aWMgaW50IHRlZ3JhX3NtbXVfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7CisJdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKworCXdoaWxlIChvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyhucCwgImlvbW11cyIsICIjaW9tbXUtY2VsbHMiLCBpbmRleCwKKwkJCQkJICAmYXJncykgPT0gMCkgeworCQlzdHJ1Y3QgdGVncmFfc21tdSAqc21tdTsKKworCQlzbW11ID0gdGVncmFfc21tdV9maW5kKGFyZ3MubnApOworCQlpZiAoc21tdSkgeworCQkJLyoKKwkJCSAqIE9ubHkgYSBzaW5nbGUgSU9NTVUgbWFzdGVyIGludGVyZmFjZSBpcyBjdXJyZW50bHkKKwkJCSAqIHN1cHBvcnRlZCBieSB0aGUgTGludXgga2VybmVsLCBzbyBhYm9ydCBhZnRlciB0aGUKKwkJCSAqIGZpcnN0IG1hdGNoLgorCQkJICovCisJCQlkZXYtPmFyY2hkYXRhLmlvbW11ID0gc21tdTsKKwkJCWJyZWFrOworCQl9CisKKwkJaW5kZXgrKzsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHRlZ3JhX3NtbXVfcG1fb3BzID0gewotCS5zdXNwZW5kCT0gdGVncmFfc21tdV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gdGVncmFfc21tdV9yZXN1bWUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0ZWdyYV9zbW11X29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEzMC1zbW11IiwgfSwKLQl7IH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGVncmFfc21tdV9vZl9tYXRjaCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRlZ3JhX3NtbXVfZHJpdmVyID0gewotCS5wcm9iZQkJPSB0ZWdyYV9zbW11X3Byb2JlLAotCS5yZW1vdmUJCT0gdGVncmFfc21tdV9yZW1vdmUsCi0JLmRyaXZlciA9IHsKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCS5uYW1lCT0gInRlZ3JhLXNtbXUiLAotCQkucG0JPSAmdGVncmFfc21tdV9wbV9vcHMsCi0JCS5vZl9tYXRjaF90YWJsZSA9IHRlZ3JhX3NtbXVfb2ZfbWF0Y2gsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgdGVncmFfc21tdV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCB0ZWdyYV9zbW11X3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRlZ3JhX3NtbXVfZHJpdmVyKTsKKwlkZXYtPmFyY2hkYXRhLmlvbW11ID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHRlZ3JhX3NtbXVfZXhpdCh2b2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9vcHMgdGVncmFfc21tdV9vcHMgPSB7CisJLmNhcGFibGUgPSB0ZWdyYV9zbW11X2NhcGFibGUsCisJLmRvbWFpbl9pbml0ID0gdGVncmFfc21tdV9kb21haW5faW5pdCwKKwkuZG9tYWluX2Rlc3Ryb3kgPSB0ZWdyYV9zbW11X2RvbWFpbl9kZXN0cm95LAorCS5hdHRhY2hfZGV2ID0gdGVncmFfc21tdV9hdHRhY2hfZGV2LAorCS5kZXRhY2hfZGV2ID0gdGVncmFfc21tdV9kZXRhY2hfZGV2LAorCS5hZGRfZGV2aWNlID0gdGVncmFfc21tdV9hZGRfZGV2aWNlLAorCS5yZW1vdmVfZGV2aWNlID0gdGVncmFfc21tdV9yZW1vdmVfZGV2aWNlLAorCS5tYXAgPSB0ZWdyYV9zbW11X21hcCwKKwkudW5tYXAgPSB0ZWdyYV9zbW11X3VubWFwLAorCS5tYXBfc2cgPSBkZWZhdWx0X2lvbW11X21hcF9zZywKKwkuaW92YV90b19waHlzID0gdGVncmFfc21tdV9pb3ZhX3RvX3BoeXMsCisKKwkucGdzaXplX2JpdG1hcCA9IFNaXzRLLAorfTsKKworc3RhdGljIHZvaWQgdGVncmFfc21tdV9haGJfZW5hYmxlKHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRlZ3JhX3NtbXVfZHJpdmVyKTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhaGJfbWF0Y2hbXSA9IHsKKwkJeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEzMC1haGIiLCB9LAorCQl7IH0KKwl9OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqYWhiOworCisJYWhiID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIGFoYl9tYXRjaCk7CisJaWYgKGFoYikgeworCQl0ZWdyYV9haGJfZW5hYmxlX3NtbXUoYWhiKTsKKwkJb2Zfbm9kZV9wdXQoYWhiKTsKKwl9CiB9CiAKLXN1YnN5c19pbml0Y2FsbCh0ZWdyYV9zbW11X2luaXQpOwotbW9kdWxlX2V4aXQodGVncmFfc21tdV9leGl0KTsKK3N0cnVjdCB0ZWdyYV9zbW11ICp0ZWdyYV9zbW11X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc29jICpzb2MsCisJCQkJICAgIHN0cnVjdCB0ZWdyYV9tYyAqbWMpCit7CisJc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXU7CisJc2l6ZV90IHNpemU7CisJdTMyIHZhbHVlOworCWludCBlcnI7CiAKLU1PRFVMRV9ERVNDUklQVElPTigiSU9NTVUgQVBJIGZvciBTTU1VIGluIFRlZ3JhMzAiKTsKLU1PRFVMRV9BVVRIT1IoIkhpcm9zaGkgRE9ZVSA8aGRveXVAbnZpZGlhLmNvbT4iKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06dGVncmEtc21tdSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCS8qIFRoaXMgY2FuIGhhcHBlbiBvbiBUZWdyYTIwIHdoaWNoIGRvZXNuJ3QgaGF2ZSBhbiBTTU1VICovCisJaWYgKCFzb2MpCisJCXJldHVybiBOVUxMOworCisJc21tdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqc21tdSksIEdGUF9LRVJORUwpOworCWlmICghc21tdSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwkvKgorCSAqIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJZGVhbGx5IHdlJ2Qgd2FudCB0byBzaW1wbHkgcmV0dXJuIHRoaXMKKwkgKiB2YWx1ZS4gSG93ZXZlciB0aGUgSU9NTVUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2lsbCBhdHRlbXB0IHRvIGFkZAorCSAqIGFsbCBkZXZpY2VzIHRvIHRoZSBJT01NVSB3aGVuIGJ1c19zZXRfaW9tbXUoKSBpcyBjYWxsZWQuIEluIG9yZGVyCisJICogbm90IHRvIHJlbHkgb24gZ2xvYmFsIHZhcmlhYmxlcyB0byB0cmFjayB0aGUgSU9NTVUgaW5zdGFuY2UsIHdlCisJICogc2V0IGl0IGhlcmUgc28gdGhhdCBpdCBjYW4gYmUgbG9va2VkIHVwIGZyb20gdGhlIC5hZGRfZGV2aWNlKCkKKwkgKiBjYWxsYmFjayB2aWEgdGhlIElPTU1VIGRldmljZSdzIC5kcnZkYXRhIGZpZWxkLgorCSAqLworCW1jLT5zbW11ID0gc21tdTsKKworCXNpemUgPSBCSVRTX1RPX0xPTkdTKHNvYy0+bnVtX2FzaWRzKSAqIHNpemVvZihsb25nKTsKKworCXNtbXUtPmFzaWRzID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbW11LT5hc2lkcykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltdXRleF9pbml0KCZzbW11LT5sb2NrKTsKKworCXNtbXUtPnJlZ3MgPSBtYy0+cmVnczsKKwlzbW11LT5zb2MgPSBzb2M7CisJc21tdS0+ZGV2ID0gZGV2OworCXNtbXUtPm1jID0gbWM7CisKKwl2YWx1ZSA9IFNNTVVfUFRDX0NPTkZJR19FTkFCTEUgfCBTTU1VX1BUQ19DT05GSUdfSU5ERVhfTUFQKDB4M2YpOworCisJaWYgKHNvYy0+c3VwcG9ydHNfcmVxdWVzdF9saW1pdCkKKwkJdmFsdWUgfD0gU01NVV9QVENfQ09ORklHX1JFUV9MSU1JVCg4KTsKKworCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBTTU1VX1BUQ19DT05GSUcpOworCisJdmFsdWUgPSBTTU1VX1RMQl9DT05GSUdfSElUX1VOREVSX01JU1MgfAorCQlTTU1VX1RMQl9DT05GSUdfQUNUSVZFX0xJTkVTKDB4MjApOworCisJaWYgKHNvYy0+c3VwcG9ydHNfcm91bmRfcm9iaW5fYXJiaXRyYXRpb24pCisJCXZhbHVlIHw9IFNNTVVfVExCX0NPTkZJR19ST1VORF9ST0JJTl9BUkJJVFJBVElPTjsKKworCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBTTU1VX1RMQl9DT05GSUcpOworCisJc21tdV9mbHVzaF9wdGMoc21tdSwgTlVMTCwgMCk7CisJc21tdV9mbHVzaF90bGIoc21tdSk7CisJc21tdV93cml0ZWwoc21tdSwgU01NVV9DT05GSUdfRU5BQkxFLCBTTU1VX0NPTkZJRyk7CisJc21tdV9mbHVzaChzbW11KTsKKworCXRlZ3JhX3NtbXVfYWhiX2VuYWJsZSgpOworCisJZXJyID0gYnVzX3NldF9pb21tdSgmcGxhdGZvcm1fYnVzX3R5cGUsICZ0ZWdyYV9zbW11X29wcyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBFUlJfUFRSKGVycik7CisKKwlyZXR1cm4gc21tdTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9LY29uZmlnIGIvZHJpdmVycy9pcnFjaGlwL0tjb25maWcKaW5kZXggYjIxZjEyZi4uOWVmZTVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL0tjb25maWcKKysrIGIvZHJpdmVycy9pcnFjaGlwL0tjb25maWcKQEAgLTQ4LDE0ICs0OCwxOSBAQAogCXNlbGVjdCBNVUxUSV9JUlFfSEFORExFUgogCXNlbGVjdCBTUEFSU0VfSVJRCiAKK2NvbmZpZyBCQ003MTIwX0wyX0lSUQorCWJvb2wKKwlzZWxlY3QgR0VORVJJQ19JUlFfQ0hJUAorCXNlbGVjdCBJUlFfRE9NQUlOCisKIGNvbmZpZyBCUkNNU1RCX0wyX0lSUQogCWJvb2wKLQlkZXBlbmRzIG9uIEFSTQogCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IElSUV9ET01BSU4KIAogY29uZmlnIERXX0FQQl9JQ1RMCiAJYm9vbAorCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IElSUV9ET01BSU4KIAogY29uZmlnIElNR1BEQ19JUlEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZQppbmRleCAxNzNiYjVmLi5mMDkwOWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlCkBAIC0zNSw2ICszNSw2IEBACiBvYmotJChDT05GSUdfWFRFTlNBKQkJCSs9IGlycS14dGVuc2EtcGljLm8KIG9iai0kKENPTkZJR19YVEVOU0FfTVgpCQkJKz0gaXJxLXh0ZW5zYS1teC5vCiBvYmotJChDT05GSUdfSVJRX0NST1NTQkFSKQkJKz0gaXJxLWNyb3NzYmFyLm8KLW9iai0kKENPTkZJR19CUkNNU1RCX0wyX0lSUSkJCSs9IGlycS1icmNtc3RiLWwyLm8gXAotCQkJCQkgICBpcnEtYmNtNzEyMC1sMi5vCitvYmotJChDT05GSUdfQkNNNzEyMF9MMl9JUlEpCQkrPSBpcnEtYmNtNzEyMC1sMi5vCitvYmotJChDT05GSUdfQlJDTVNUQl9MMl9JUlEpCQkrPSBpcnEtYnJjbXN0Yi1sMi5vCiBvYmotJChDT05GSUdfS0VZU1RPTkVfSVJRKQkJKz0gaXJxLWtleXN0b25lLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXJtYWRhLTM3MC14cC5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1hcm1hZGEtMzcwLXhwLmMKaW5kZXggNmEyZTE2OGMuLjQ2M2MyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXJtYWRhLTM3MC14cC5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXJtYWRhLTM3MC14cC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9leGNlcHRpb24uaD4KQEAgLTY3LDYgKzY4LDcgQEAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnBlcl9jcHVfaW50X2Jhc2U7CiBzdGF0aWMgdm9pZCBfX2lvbWVtICptYWluX2ludF9iYXNlOwogc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluICphcm1hZGFfMzcwX3hwX21waWNfZG9tYWluOworc3RhdGljIHUzMiBkb29yYmVsbF9tYXNrX3JlZzsKICNpZmRlZiBDT05GSUdfUENJX01TSQogc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluICphcm1hZGFfMzcwX3hwX21zaV9kb21haW47CiBzdGF0aWMgREVDTEFSRV9CSVRNQVAobXNpX3VzZWQsIFBDSV9NU0lfRE9PUkJFTExfTlIpOwpAQCAtMTMwLDcgKzEzMiw3IEBACiAJbXV0ZXhfdW5sb2NrKCZtc2lfdXNlZF9sb2NrKTsKIH0KIAotc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX3NldHVwX21zaV9pcnEoc3RydWN0IG1zaV9jaGlwICpjaGlwLAorc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX3NldHVwX21zaV9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAogCQkJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgICAgc3RydWN0IG1zaV9kZXNjICpkZXNjKQogewpAQCAtMTU3LDExICsxNTksMTEgQEAKIAltc2cuYWRkcmVzc19oaSA9IDA7CiAJbXNnLmRhdGEgPSAweGYwMCB8IChod2lycSArIDE2KTsKIAotCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFybWFkYV8zNzBfeHBfdGVhcmRvd25fbXNpX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsCitzdGF0aWMgdm9pZCBhcm1hZGFfMzcwX3hwX3RlYXJkb3duX21zaV9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAogCQkJCQkgICB1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBpcnFfZGF0YSAqZCA9IGlycV9nZXRfaXJxX2RhdGEoaXJxKTsKQEAgLTE3MywxMCArMTc1LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYXJtYWRhXzM3MF94cF9tc2lfaXJxX2NoaXAgPSB7CiAJLm5hbWUgPSAiYXJtYWRhXzM3MF94cF9tc2lfaXJxIiwKLQkuaXJxX2VuYWJsZSA9IHVubWFza19tc2lfaXJxLAotCS5pcnFfZGlzYWJsZSA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX21hc2sgPSBtYXNrX21zaV9pcnEsCi0JLmlycV91bm1hc2sgPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX2VuYWJsZSA9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2Rpc2FibGUgPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfbWFzayA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBwY2lfbXNpX3VubWFza19pcnEsCiB9OwogCiBzdGF0aWMgaW50IGFybWFkYV8zNzBfeHBfbXNpX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwKQEAgLTE5Niw3ICsxOTgsNyBAQAogc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX21zaV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIAkJCQkgIHBoeXNfYWRkcl90IG1haW5faW50X3BoeXNfYmFzZSkKIHsKLQlzdHJ1Y3QgbXNpX2NoaXAgKm1zaV9jaGlwOworCXN0cnVjdCBtc2lfY29udHJvbGxlciAqbXNpX2NoaXA7CiAJdTMyIHJlZzsKIAlpbnQgcmV0OwogCkBAIC0yNjYsNyArMjY4LDcgQEAKIAl3cml0ZWwocmVnLCBtYWluX2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTlRfU09VUkNFX0NUTChod2lycSkpOwogCXJhd19zcGluX3VubG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gSVJRX1NFVF9NQVNLX09LOwogfQogI2VuZGlmCiAKQEAgLTQ4NSw2ICs0ODcsNTQgQEAKIAl9IHdoaWxlICgxKTsKIH0KIAorc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX21waWNfc3VzcGVuZCh2b2lkKQoreworCWRvb3JiZWxsX21hc2tfcmVnID0gcmVhZGwocGVyX2NwdV9pbnRfYmFzZSArCisJCQkJICBBUk1BREFfMzcwX1hQX0lOX0RSQkVMX01TS19PRkZTKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXJtYWRhXzM3MF94cF9tcGljX3Jlc3VtZSh2b2lkKQoreworCWludCBuaXJxczsKKwlpcnFfaHdfbnVtYmVyX3QgaXJxOworCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMgKi8KKwluaXJxcyA9IChyZWFkbChtYWluX2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTlRfQ09OVFJPTCkgPj4gMikgJiAweDNmZjsKKwlmb3IgKGlycSA9IDA7IGlycSA8IG5pcnFzOyBpcnErKykgeworCQlzdHJ1Y3QgaXJxX2RhdGEgKmRhdGE7CisJCWludCB2aXJxOworCisJCXZpcnEgPSBpcnFfbGluZWFyX3Jldm1hcChhcm1hZGFfMzcwX3hwX21waWNfZG9tYWluLCBpcnEpOworCQlpZiAodmlycSA9PSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKGlycSAhPSBBUk1BREFfMzcwX1hQX1RJTUVSMF9QRVJfQ1BVX0lSUSkKKwkJCXdyaXRlbChpcnEsIHBlcl9jcHVfaW50X2Jhc2UgKworCQkJICAgICAgIEFSTUFEQV8zNzBfWFBfSU5UX0NMRUFSX01BU0tfT0ZGUyk7CisJCWVsc2UKKwkJCXdyaXRlbChpcnEsIG1haW5faW50X2Jhc2UgKworCQkJICAgICAgIEFSTUFEQV8zNzBfWFBfSU5UX1NFVF9FTkFCTEVfT0ZGUyk7CisKKwkJZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEodmlycSk7CisJCWlmICghaXJxZF9pcnFfZGlzYWJsZWQoZGF0YSkpCisJCQlhcm1hZGFfMzcwX3hwX2lycV91bm1hc2soZGF0YSk7CisJfQorCisJLyogUmVjb25maWd1cmUgZG9vcmJlbGxzIGZvciBJUElzIGFuZCBNU0lzICovCisJd3JpdGVsKGRvb3JiZWxsX21hc2tfcmVnLAorCSAgICAgICBwZXJfY3B1X2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTl9EUkJFTF9NU0tfT0ZGUyk7CisJaWYgKGRvb3JiZWxsX21hc2tfcmVnICYgSVBJX0RPT1JCRUxMX01BU0spCisJCXdyaXRlbCgwLCBwZXJfY3B1X2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTlRfQ0xFQVJfTUFTS19PRkZTKTsKKwlpZiAoZG9vcmJlbGxfbWFza19yZWcgJiBQQ0lfTVNJX0RPT1JCRUxMX01BU0spCisJCXdyaXRlbCgxLCBwZXJfY3B1X2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTlRfQ0xFQVJfTUFTS19PRkZTKTsKK30KKworc3RydWN0IHN5c2NvcmVfb3BzIGFybWFkYV8zNzBfeHBfbXBpY19zeXNjb3JlX29wcyA9IHsKKwkuc3VzcGVuZAk9IGFybWFkYV8zNzBfeHBfbXBpY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXJtYWRhXzM3MF94cF9tcGljX3Jlc3VtZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGFybWFkYV8zNzBfeHBfbXBpY19vZl9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIAkJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCkKIHsKQEAgLTU0MSw2ICs1OTEsOCBAQAogCQkJCQlhcm1hZGFfMzcwX3hwX21waWNfaGFuZGxlX2Nhc2NhZGVfaXJxKTsKIAl9CiAKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmYXJtYWRhXzM3MF94cF9tcGljX3N5c2NvcmVfb3BzKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy1jb21tb24uYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5jCmluZGV4IGNjNGY5ZDguLmQxMTFhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5jCkBAIC0xNjcsNiArMTY3LDMyIEBACiAJaW91bm1hcChyZWdzKTsKIH0KIAorI2RlZmluZSBBVDkxX1JUVF9NUgkJMHgwMAkJCS8qIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfUlRUX0FMTUlFTgkJKDEgPDwgMTYpCQkvKiBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfUlRUX1JUVElOQ0lFTgkoMSA8PCAxNykJCS8qIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZSAqLworCit2b2lkIF9faW5pdCBhaWNfY29tbW9uX3J0dF9pcnFfZml4dXAoc3RydWN0IGRldmljZV9ub2RlICpyb290KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJLyoKKwkgKiBUaGUgYXQ5MXNhbTkyNjMgU29DIGhhcyAyIGluc3RhbmNlcyBvZiB0aGUgUlRUIGJsb2NrLCBoZW5jZSB3ZQorCSAqIGl0ZXJhdGUgb3ZlciB0aGUgRFQgdG8gZmluZCBlYWNoIG9jY3VycmVuY2UuCisJICovCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiYXRtZWwsYXQ5MXNhbTkyNjAtcnR0IikgeworCQlyZWdzID0gb2ZfaW9tYXAobnAsIDApOworCQlpZiAoIXJlZ3MpCisJCQljb250aW51ZTsKKworCQl3cml0ZWwocmVhZGwocmVncyArIEFUOTFfUlRUX01SKSAmCisJCSAgICAgICB+KEFUOTFfUlRUX0FMTUlFTiB8IEFUOTFfUlRUX1JUVElOQ0lFTiksCisJCSAgICAgICByZWdzICsgQVQ5MV9SVFRfTVIpOworCisJCWlvdW5tYXAocmVncyk7CisJfQorfQorCiB2b2lkIF9faW5pdCBhaWNfY29tbW9uX2lycV9maXh1cChjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy1jb21tb24uaCBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5oCmluZGV4IDkwYWEwMGUuLjYwM2YwYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5oCkBAIC0zNCw2ICszNCw4IEBACiAKIHZvaWQgX19pbml0IGFpY19jb21tb25fcnRjX2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpOwogCit2b2lkIF9faW5pdCBhaWNfY29tbW9uX3J0dF9pcnFfZml4dXAoc3RydWN0IGRldmljZV9ub2RlICpyb290KTsKKwogdm9pZCBfX2luaXQgYWljX2NvbW1vbl9pcnFfZml4dXAoY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcyk7CiAKICNlbmRpZiAvKiBfX0lSUV9BVE1FTF9BSUNfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy5jCmluZGV4IDlhMmNmM2MuLmRhZTM2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMuYwpAQCAtNjUsMTEgKzY1LDExIEBACiAJdTMyIGlycW5yOwogCXUzMiBpcnFzdGF0OwogCi0JaXJxbnIgPSBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX0lWUik7Ci0JaXJxc3RhdCA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSVNSKTsKKwlpcnFuciA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDX0lWUik7CisJaXJxc3RhdCA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDX0lTUik7CiAKIAlpZiAoIWlycXN0YXQpCi0JCWlycV9yZWdfd3JpdGVsKDAsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX0VPSUNSKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIDAsIEFUOTFfQUlDX0VPSUNSKTsKIAllbHNlCiAJCWhhbmRsZV9kb21haW5faXJxKGFpY19kb21haW4sIGlycW5yLCByZWdzKTsKIH0KQEAgLTgwLDcgKzgwLDcgQEAKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHQgb24gQUlDNSAqLwogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChkLT5tYXNrLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JU0NSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZC0+bWFzaywgQVQ5MV9BSUNfSVNDUik7CiAJaXJxX2djX3VubG9jayhnYyk7CiAKIAlyZXR1cm4gMDsKQEAgLTkyLDEyICs5MiwxMiBAQAogCXVuc2lnbmVkIGludCBzbXI7CiAJaW50IHJldDsKIAotCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfU01SKGQtPmh3aXJxKSk7CisJc21yID0gaXJxX3JlZ19yZWFkbChnYywgQVQ5MV9BSUNfU01SKGQtPmh3aXJxKSk7CiAJcmV0ID0gYWljX2NvbW1vbl9zZXRfdHlwZShkLCB0eXBlLCAmc21yKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaXJxX3JlZ193cml0ZWwoc21yLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19TTVIoZC0+aHdpcnEpKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgc21yLCBBVDkxX0FJQ19TTVIoZC0+aHdpcnEpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA4LDggKzEwOCw4IEBACiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoZ2MtPm1hc2tfY2FjaGUsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX0lEQ1IpOwotCWlycV9yZWdfd3JpdGVsKGdjLT53YWtlX2FjdGl2ZSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSUVDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT5tYXNrX2NhY2hlLCBBVDkxX0FJQ19JRENSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZ2MtPndha2VfYWN0aXZlLCBBVDkxX0FJQ19JRUNSKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtMTE4LDggKzExOCw4IEBACiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoZ2MtPndha2VfYWN0aXZlLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JRENSKTsKLQlpcnFfcmVnX3dyaXRlbChnYy0+bWFza19jYWNoZSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSUVDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT53YWtlX2FjdGl2ZSwgQVQ5MV9BSUNfSURDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT5tYXNrX2NhY2hlLCBBVDkxX0FJQ19JRUNSKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtMTI4LDggKzEyOCw4IEBACiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoMHhmZmZmZmZmZiwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSURDUik7Ci0JaXJxX3JlZ193cml0ZWwoMHhmZmZmZmZmZiwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSUNDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDB4ZmZmZmZmZmYsIEFUOTFfQUlDX0lEQ1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCAweGZmZmZmZmZmLCBBVDkxX0FJQ19JQ0NSKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KICNlbHNlCkBAIC0xNDgsMjQgKzE0OCwyNCBAQAogCSAqIHdpbGwgbm90IExvY2sgb3V0IG5JUlEKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlpcnFfcmVnX3dyaXRlbCgwLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19FT0lDUik7CisJCWlycV9yZWdfd3JpdGVsKGdjLCAwLCBBVDkxX0FJQ19FT0lDUik7CiAKIAkvKgogCSAqIFNwdXJpb3VzIEludGVycnVwdCBJRCBpbiBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIuCiAJICogV2hlbiB0aGVyZSBpcyBubyBjdXJyZW50IGludGVycnVwdCwgdGhlIElSUSBWZWN0b3IgUmVnaXN0ZXIKIAkgKiByZWFkcyB0aGUgdmFsdWUgc3RvcmVkIGluIEFJQ19TUFUKIAkgKi8KLQlpcnFfcmVnX3dyaXRlbCgweGZmZmZmZmZmLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19TUFUpOworCWlycV9yZWdfd3JpdGVsKGdjLCAweGZmZmZmZmZmLCBBVDkxX0FJQ19TUFUpOwogCiAJLyogTm8gZGVidWdnaW5nIGluIEFJQzogRGVidWcgKFByb3RlY3QpIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlpcnFfcmVnX3dyaXRlbCgwLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19EQ1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCAwLCBBVDkxX0FJQ19EQ1IpOwogCiAJLyogRGlzYWJsZSBhbmQgY2xlYXIgYWxsIGludGVycnVwdHMgaW5pdGlhbGx5ICovCi0JaXJxX3JlZ193cml0ZWwoMHhmZmZmZmZmZiwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSURDUik7Ci0JaXJxX3JlZ193cml0ZWwoMHhmZmZmZmZmZiwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSUNDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDB4ZmZmZmZmZmYsIEFUOTFfQUlDX0lEQ1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCAweGZmZmZmZmZmLCBBVDkxX0FJQ19JQ0NSKTsKIAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCQlpcnFfcmVnX3dyaXRlbChpLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19TVlIoaSkpOworCQlpcnFfcmVnX3dyaXRlbChnYywgaSwgQVQ5MV9BSUNfU1ZSKGkpKTsKIH0KIAogc3RhdGljIGludCBhaWNfaXJxX2RvbWFpbl94bGF0ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwKQEAgLTE5NSwxMCArMTk1LDEwIEBACiAJZ2MgPSBkZ2MtPmdjW2lkeF07CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0Jc21yID0gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19TTVIoKm91dF9od2lycSkpOworCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDX1NNUigqb3V0X2h3aXJxKSk7CiAJcmV0ID0gYWljX2NvbW1vbl9zZXRfcHJpb3JpdHkoaW50c3BlY1syXSwgJnNtcik7CiAJaWYgKCFyZXQpCi0JCWlycV9yZWdfd3JpdGVsKHNtciwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfU01SKCpvdXRfaHdpcnEpKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIHNtciwgQVQ5MV9BSUNfU01SKCpvdXRfaHdpcnEpKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIAogCXJldHVybiByZXQ7CkBAIC0yMDksMTYgKzIwOSwzMiBAQAogCS54bGF0ZQk9IGFpY19pcnFfZG9tYWluX3hsYXRlLAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05X2FpY19pcnFfZml4dXAoc3RydWN0IGRldmljZV9ub2RlICpyb290KQorc3RhdGljIHZvaWQgX19pbml0IGF0OTFybTkyMDBfYWljX2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpCiB7CiAJYWljX2NvbW1vbl9ydGNfaXJxX2ZpeHVwKHJvb3QpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjBfYWljX2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpCit7CisJYWljX2NvbW1vbl9ydHRfaXJxX2ZpeHVwKHJvb3QpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfYWljX2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpCit7CisJYWljX2NvbW1vbl9ydGNfaXJxX2ZpeHVwKHJvb3QpOworCWFpY19jb21tb25fcnR0X2lycV9maXh1cChyb290KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBhaWNfaXJxX2ZpeHVwc1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTlnNDUiLCAuZGF0YSA9IGF0OTFzYW05X2FpY19pcnFfZml4dXAgfSwKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05bjEyIiwgLmRhdGEgPSBhdDkxc2FtOV9haWNfaXJxX2ZpeHVwIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXJsIiwgLmRhdGEgPSBhdDkxc2FtOV9haWNfaXJxX2ZpeHVwIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1IiwgLmRhdGEgPSBhdDkxc2FtOV9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwIiwgLmRhdGEgPSBhdDkxcm05MjAwX2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05ZzQ1IiwgLmRhdGEgPSBhdDkxc2FtOWc0NV9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOW4xMiIsIC5kYXRhID0gYXQ5MXJtOTIwMF9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXJsIiwgLmRhdGEgPSBhdDkxc2FtOWc0NV9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1IiwgLmRhdGEgPSBhdDkxcm05MjAwX2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwIiwgLmRhdGEgPSBhdDkxc2FtOTI2MF9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MSIsIC5kYXRhID0gYXQ5MXNhbTkyNjBfYWljX2lycV9maXh1cCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjMiLCAuZGF0YSA9IGF0OTFzYW05MjYwX2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05ZzIwIiwgLmRhdGEgPSBhdDkxc2FtOTI2MF9haWNfaXJxX2ZpeHVwIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWM1LmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYzUuYwppbmRleCBhMTFhYWU4Li5hMmU4YzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYzUuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYzUuYwpAQCAtNzUsMTEgKzc1LDExIEBACiAJdTMyIGlycW5yOwogCXUzMiBpcnFzdGF0OwogCi0JaXJxbnIgPSBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JVlIpOwotCWlycXN0YXQgPSBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JU1IpOworCWlycW5yID0gaXJxX3JlZ19yZWFkbChnYywgQVQ5MV9BSUM1X0lWUik7CisJaXJxc3RhdCA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDNV9JU1IpOwogCiAJaWYgKCFpcnFzdGF0KQotCQlpcnFfcmVnX3dyaXRlbCgwLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfRU9JQ1IpOworCQlpcnFfcmVnX3dyaXRlbChnYywgMCwgQVQ5MV9BSUM1X0VPSUNSKTsKIAllbHNlCiAJCWhhbmRsZV9kb21haW5faXJxKGFpYzVfZG9tYWluLCBpcnFuciwgcmVncyk7CiB9CkBAIC05Miw4ICs5Miw4IEBACiAKIAkvKiBEaXNhYmxlIGludGVycnVwdCBvbiBBSUM1ICovCiAJaXJxX2djX2xvY2soZ2MpOwotCWlycV9yZWdfd3JpdGVsKGQtPmh3aXJxLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKLQlpcnFfcmVnX3dyaXRlbCgxLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfSURDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGQtPmh3aXJxLCBBVDkxX0FJQzVfU1NSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgMSwgQVQ5MV9BSUM1X0lEQ1IpOwogCWdjLT5tYXNrX2NhY2hlICY9IH5kLT5tYXNrOwogCWlycV9nY191bmxvY2soZ2MpOwogfQpAQCAtMTA2LDggKzEwNiw4IEBACiAKIAkvKiBFbmFibGUgaW50ZXJydXB0IG9uIEFJQzUgKi8KIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoZC0+aHdpcnEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOwotCWlycV9yZWdfd3JpdGVsKDEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRUNSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZC0+aHdpcnEsIEFUOTFfQUlDNV9TU1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCAxLCBBVDkxX0FJQzVfSUVDUik7CiAJZ2MtPm1hc2tfY2FjaGUgfD0gZC0+bWFzazsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KQEAgLTEyMCw4ICsxMjAsOCBAQAogCiAJLyogRW5hYmxlIGludGVycnVwdCBvbiBBSUM1ICovCiAJaXJxX2djX2xvY2soZ2MpOwotCWlycV9yZWdfd3JpdGVsKGQtPmh3aXJxLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKLQlpcnFfcmVnX3dyaXRlbCgxLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfSVNDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGQtPmh3aXJxLCBBVDkxX0FJQzVfU1NSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgMSwgQVQ5MV9BSUM1X0lTQ1IpOwogCWlycV9nY191bmxvY2soZ2MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogCWludCByZXQ7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoZC0+aHdpcnEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOwotCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NNUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGQtPmh3aXJxLCBBVDkxX0FJQzVfU1NSKTsKKwlzbXIgPSBpcnFfcmVnX3JlYWRsKGdjLCBBVDkxX0FJQzVfU01SKTsKIAlyZXQgPSBhaWNfY29tbW9uX3NldF90eXBlKGQsIHR5cGUsICZzbXIpOwogCWlmICghcmV0KQotCQlpcnFfcmVnX3dyaXRlbChzbXIsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TTVIpOworCQlpcnFfcmVnX3dyaXRlbChnYywgc21yLCBBVDkxX0FJQzVfU01SKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIAogCXJldHVybiByZXQ7CkBAIC0xNjIsMTIgKzE2MiwxMSBAQAogCQlpZiAoKG1hc2sgJiBnYy0+bWFza19jYWNoZSkgPT0gKG1hc2sgJiBnYy0+d2FrZV9hY3RpdmUpKQogCQkJY29udGludWU7CiAKLQkJaXJxX3JlZ193cml0ZWwoaSArIGdjLT5pcnFfYmFzZSwKLQkJCSAgICAgICBiZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NTUik7CisJCWlycV9yZWdfd3JpdGVsKGJnYywgaSArIGdjLT5pcnFfYmFzZSwgQVQ5MV9BSUM1X1NTUik7CiAJCWlmIChtYXNrICYgZ2MtPndha2VfYWN0aXZlKQotCQkJaXJxX3JlZ193cml0ZWwoMSwgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRUNSKTsKKwkJCWlycV9yZWdfd3JpdGVsKGJnYywgMSwgQVQ5MV9BSUM1X0lFQ1IpOwogCQllbHNlCi0JCQlpcnFfcmVnX3dyaXRlbCgxLCBiZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lEQ1IpOworCQkJaXJxX3JlZ193cml0ZWwoYmdjLCAxLCBBVDkxX0FJQzVfSURDUik7CiAJfQogCWlycV9nY191bmxvY2soYmdjKTsKIH0KQEAgLTE4NywxMiArMTg2LDExIEBACiAJCWlmICgobWFzayAmIGdjLT5tYXNrX2NhY2hlKSA9PSAobWFzayAmIGdjLT53YWtlX2FjdGl2ZSkpCiAJCQljb250aW51ZTsKIAotCQlpcnFfcmVnX3dyaXRlbChpICsgZ2MtPmlycV9iYXNlLAotCQkJICAgICAgIGJnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKKwkJaXJxX3JlZ193cml0ZWwoYmdjLCBpICsgZ2MtPmlycV9iYXNlLCBBVDkxX0FJQzVfU1NSKTsKIAkJaWYgKG1hc2sgJiBnYy0+bWFza19jYWNoZSkKLQkJCWlycV9yZWdfd3JpdGVsKDEsIGJnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfSUVDUik7CisJCQlpcnFfcmVnX3dyaXRlbChiZ2MsIDEsIEFUOTFfQUlDNV9JRUNSKTsKIAkJZWxzZQotCQkJaXJxX3JlZ193cml0ZWwoMSwgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRENSKTsKKwkJCWlycV9yZWdfd3JpdGVsKGJnYywgMSwgQVQ5MV9BSUM1X0lEQ1IpOwogCX0KIAlpcnFfZ2NfdW5sb2NrKGJnYyk7CiB9CkBAIC0yMDcsMTAgKzIwNSw5IEBACiAKIAlpcnFfZ2NfbG9jayhiZ2MpOwogCWZvciAoaSA9IDA7IGkgPCBkZ2MtPmlycXNfcGVyX2NoaXA7IGkrKykgewotCQlpcnFfcmVnX3dyaXRlbChpICsgZ2MtPmlycV9iYXNlLAotCQkJICAgICAgIGJnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKLQkJaXJxX3JlZ193cml0ZWwoMSwgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRENSKTsKLQkJaXJxX3JlZ193cml0ZWwoMSwgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JQ0NSKTsKKwkJaXJxX3JlZ193cml0ZWwoYmdjLCBpICsgZ2MtPmlycV9iYXNlLCBBVDkxX0FJQzVfU1NSKTsKKwkJaXJxX3JlZ193cml0ZWwoYmdjLCAxLCBBVDkxX0FJQzVfSURDUik7CisJCWlycV9yZWdfd3JpdGVsKGJnYywgMSwgQVQ5MV9BSUM1X0lDQ1IpOwogCX0KIAlpcnFfZ2NfdW5sb2NrKGJnYyk7CiB9CkBAIC0yMzAsMjQgKzIyNywyNCBAQAogCSAqIHdpbGwgbm90IExvY2sgb3V0IG5JUlEKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlpcnFfcmVnX3dyaXRlbCgwLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfRU9JQ1IpOworCQlpcnFfcmVnX3dyaXRlbChnYywgMCwgQVQ5MV9BSUM1X0VPSUNSKTsKIAogCS8qCiAJICogU3B1cmlvdXMgSW50ZXJydXB0IElEIGluIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlci4KIAkgKiBXaGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW50ZXJydXB0LCB0aGUgSVJRIFZlY3RvciBSZWdpc3RlcgogCSAqIHJlYWRzIHRoZSB2YWx1ZSBzdG9yZWQgaW4gQUlDX1NQVQogCSAqLwotCWlycV9yZWdfd3JpdGVsKDB4ZmZmZmZmZmYsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TUFUpOworCWlycV9yZWdfd3JpdGVsKGdjLCAweGZmZmZmZmZmLCBBVDkxX0FJQzVfU1BVKTsKIAogCS8qIE5vIGRlYnVnZ2luZyBpbiBBSUM6IERlYnVnIChQcm90ZWN0KSBDb250cm9sIFJlZ2lzdGVyICovCi0JaXJxX3JlZ193cml0ZWwoMCwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0RDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDAsIEFUOTFfQUlDNV9EQ1IpOwogCiAJLyogRGlzYWJsZSBhbmQgY2xlYXIgYWxsIGludGVycnVwdHMgaW5pdGlhbGx5ICovCiAJZm9yIChpID0gMDsgaSA8IGRvbWFpbi0+cmV2bWFwX3NpemU7IGkrKykgewotCQlpcnFfcmVnX3dyaXRlbChpLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKLQkJaXJxX3JlZ193cml0ZWwoaSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NWUik7Ci0JCWlycV9yZWdfd3JpdGVsKDEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRENSKTsKLQkJaXJxX3JlZ193cml0ZWwoMSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lDQ1IpOworCQlpcnFfcmVnX3dyaXRlbChnYywgaSwgQVQ5MV9BSUM1X1NTUik7CisJCWlycV9yZWdfd3JpdGVsKGdjLCBpLCBBVDkxX0FJQzVfU1ZSKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIDEsIEFUOTFfQUlDNV9JRENSKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIDEsIEFUOTFfQUlDNV9JQ0NSKTsKIAl9CiB9CiAKQEAgLTI3MywxMSArMjcwLDExIEBACiAJZ2MgPSBkZ2MtPmdjWzBdOwogCiAJaXJxX2djX2xvY2soZ2MpOwotCWlycV9yZWdfd3JpdGVsKCpvdXRfaHdpcnEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOwotCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NNUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsICpvdXRfaHdpcnEsIEFUOTFfQUlDNV9TU1IpOworCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDNV9TTVIpOwogCXJldCA9IGFpY19jb21tb25fc2V0X3ByaW9yaXR5KGludHNwZWNbMl0sICZzbXIpOwogCWlmICghcmV0KQotCQlpcnFfcmVnX3dyaXRlbChpbnRzcGVjWzJdIHwgc21yLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU01SKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIGludHNwZWNbMl0gfCBzbXIsIEFUOTFfQUlDNV9TTVIpOwogCWlycV9nY191bmxvY2soZ2MpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYmNtNzEyMC1sMi5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1iY203MTIwLWwyLmMKaW5kZXggNWZiMzhhMi4uOGVlYzhlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1iY203MTIwLWwyLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1iY203MTIwLWwyLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tjb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgpAQCAtMjMsNDcgKzI0LDUyIEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+CiAKICNpbmNsdWRlICJpcnFjaGlwLmgiCiAKLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQogLyogUmVnaXN0ZXIgb2Zmc2V0IGluIHRoZSBMMiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwogI2RlZmluZSBJUlFFTgkJMHgwMAogI2RlZmluZSBJUlFTVEFUCQkweDA0CiAKKyNkZWZpbmUgTUFYX1dPUkRTCTQKKyNkZWZpbmUgSVJRU19QRVJfV09SRAkzMgorCiBzdHJ1Y3QgYmNtNzEyMF9sMl9pbnRjX2RhdGEgewotCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1bnNpZ25lZCBpbnQgbl93b3JkczsKKwl2b2lkIF9faW9tZW0gKmJhc2VbTUFYX1dPUkRTXTsKIAlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOwogCWJvb2wgY2FuX3dha2U7Ci0JdTMyIGlycV9md2RfbWFzazsKLQl1MzIgaXJxX21hcF9tYXNrOwotCXUzMiBzYXZlZF9tYXNrOworCXUzMiBpcnFfZndkX21hc2tbTUFYX1dPUkRTXTsKKwl1MzIgaXJxX21hcF9tYXNrW01BWF9XT1JEU107CiB9OwogCiBzdGF0aWMgdm9pZCBiY203MTIwX2wyX2ludGNfaXJxX2hhbmRsZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGJjbTcxMjBfbDJfaW50Y19kYXRhICpiID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKLQl1MzIgc3RhdHVzOworCXVuc2lnbmVkIGludCBpZHg7CiAKIAljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNjKTsKIAotCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGItPmJhc2UgKyBJUlFTVEFUKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGItPm5fd29yZHM7IGlkeCsrKSB7CisJCWludCBiYXNlID0gaWR4ICogSVJRU19QRVJfV09SRDsKKwkJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0KKwkJCWlycV9nZXRfZG9tYWluX2dlbmVyaWNfY2hpcChiLT5kb21haW4sIGJhc2UpOworCQl1bnNpZ25lZCBsb25nIHBlbmRpbmc7CisJCWludCBod2lycTsKIAotCWlmIChzdGF0dXMgPT0gMCkgewotCQlkb19iYWRfSVJRKGlycSwgZGVzYyk7Ci0JCWdvdG8gb3V0OworCQlpcnFfZ2NfbG9jayhnYyk7CisJCXBlbmRpbmcgPSBpcnFfcmVnX3JlYWRsKGdjLCBJUlFTVEFUKSAmIGdjLT5tYXNrX2NhY2hlOworCQlpcnFfZ2NfdW5sb2NrKGdjKTsKKworCQlmb3JfZWFjaF9zZXRfYml0KGh3aXJxLCAmcGVuZGluZywgSVJRU19QRVJfV09SRCkgeworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYi0+ZG9tYWluLAorCQkJCQkgICBiYXNlICsgaHdpcnEpKTsKKwkJfQogCX0KIAotCWRvIHsKLQkJaXJxID0gZmZzKHN0YXR1cykgLSAxOwotCQlzdGF0dXMgJj0gfigxIDw8IGlycSk7Ci0JCWdlbmVyaWNfaGFuZGxlX2lycShpcnFfZmluZF9tYXBwaW5nKGItPmRvbWFpbiwgaXJxKSk7Ci0JfSB3aGlsZSAoc3RhdHVzKTsKLQotb3V0OgogCWNoYWluZWRfaXJxX2V4aXQoY2hpcCwgZGVzYyk7CiB9CiAKQEAgLTcxLDI2ICs3NywyMCBAQAogewogCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXN0cnVjdCBiY203MTIwX2wyX2ludGNfZGF0YSAqYiA9IGdjLT5wcml2YXRlOwotCXUzMiByZWc7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JLyogU2F2ZSB0aGUgY3VycmVudCBtYXNrIGFuZCB0aGUgaW50ZXJydXB0IGZvcndhcmQgbWFzayAqLwotCWItPnNhdmVkX21hc2sgPSBfX3Jhd19yZWFkbChiLT5iYXNlKSB8IGItPmlycV9md2RfbWFzazsKLQlpZiAoYi0+Y2FuX3dha2UpIHsKLQkJcmVnID0gYi0+c2F2ZWRfbWFzayB8IGdjLT53YWtlX2FjdGl2ZTsKLQkJX19yYXdfd3JpdGVsKHJlZywgYi0+YmFzZSk7Ci0JfQorCWlmIChiLT5jYW5fd2FrZSkKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT5tYXNrX2NhY2hlIHwgZ2MtPndha2VfYWN0aXZlLCBJUlFFTik7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJjbTcxMjBfbDJfaW50Y19yZXN1bWUoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXN0cnVjdCBiY203MTIwX2wyX2ludGNfZGF0YSAqYiA9IGdjLT5wcml2YXRlOwogCiAJLyogUmVzdG9yZSB0aGUgc2F2ZWQgbWFzayAqLwogCWlycV9nY19sb2NrKGdjKTsKLQlfX3Jhd193cml0ZWwoYi0+c2F2ZWRfbWFzaywgYi0+YmFzZSk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT5tYXNrX2NhY2hlLCBJUlFFTik7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiAKQEAgLTk5LDYgKzk5LDcgQEAKIAkJCQkJaW50IGlycSwgY29uc3QgX19iZTMyICptYXBfbWFzaykKIHsKIAlpbnQgcGFyZW50X2lycTsKKwl1bnNpZ25lZCBpbnQgaWR4OwogCiAJcGFyZW50X2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRuLCBpcnEpOwogCWlmICghcGFyZW50X2lycSkgewpAQCAtMTA2LDcgKzEwNywxMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkYXRhLT5pcnFfbWFwX21hc2sgfD0gYmUzMl90b19jcHVwKG1hcF9tYXNrICsgaXJxKTsKKwkvKiBGb3IgbXVsdGlwbGUgcGFyZW50IElSUXMgd2l0aCBtdWx0aXBsZSB3b3JkcywgdGhpcyBsb29rcyBsaWtlOgorCSAqIDxpcnEwX3cwIGlycTBfdzEgaXJxMV93MCBpcnExX3cxIC4uLj4KKwkgKi8KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGRhdGEtPm5fd29yZHM7IGlkeCsrKQorCQlkYXRhLT5pcnFfbWFwX21hc2tbaWR4XSB8PQorCQkJYmUzMl90b19jcHVwKG1hcF9tYXNrICsgaXJxICogZGF0YS0+bl93b3JkcyArIGlkeCk7CiAKIAlpcnFfc2V0X2hhbmRsZXJfZGF0YShwYXJlbnRfaXJxLCBkYXRhKTsKIAlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihwYXJlbnRfaXJxLCBiY203MTIwX2wyX2ludGNfaXJxX2hhbmRsZSk7CkBAIC0xMjMsMjYgKzEyOSw0MSBAQAogCXN0cnVjdCBpcnFfY2hpcF90eXBlICpjdDsKIAljb25zdCBfX2JlMzIgKm1hcF9tYXNrOwogCWludCBudW1fcGFyZW50X2lycXM7Ci0JaW50IHJldCA9IDAsIGxlbiwgaXJxOworCWludCByZXQgPSAwLCBsZW47CisJdW5zaWduZWQgaW50IGlkeCwgaXJxLCBmbGFnczsKIAogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkYXRhLT5iYXNlID0gb2ZfaW9tYXAoZG4sIDApOwotCWlmICghZGF0YS0+YmFzZSkgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgTUFYX1dPUkRTOyBpZHgrKykgeworCQlkYXRhLT5iYXNlW2lkeF0gPSBvZl9pb21hcChkbiwgaWR4KTsKKwkJaWYgKCFkYXRhLT5iYXNlW2lkeF0pCisJCQlicmVhazsKKwkJZGF0YS0+bl93b3JkcyA9IGlkeCArIDE7CisJfQorCWlmICghZGF0YS0+bl93b3JkcykgewogCQlwcl9lcnIoImZhaWxlZCB0byByZW1hcCBpbnRjIEwyIHJlZ2lzdGVyc1xuIik7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7CisJCWdvdG8gb3V0X3VubWFwOwogCX0KIAotCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihkbiwgImJyY20saW50LWZ3ZC1tYXNrIiwgJmRhdGEtPmlycV9md2RfbWFzaykpCi0JCWRhdGEtPmlycV9md2RfbWFzayA9IDA7Ci0KLQkvKiBFbmFibGUgYWxsIGludGVycnVwdCBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBmb3J3YXJkIG1hc2sgYW5kIGhhdmUKLQkgKiB0aGUgb3RoZXIgZGlzYWJsZWQKKwkvKiBFbmFibGUgYWxsIGludGVycnVwdHMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZm9yd2FyZCBtYXNrOworCSAqIGRpc2FibGUgYWxsIG90aGVycy4gIElmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0ICgtRUlOVkFMKSwKKwkgKiBhc3N1bWUgYWxsIHplcm9lcy4KIAkgKi8KLQlfX3Jhd193cml0ZWwoZGF0YS0+aXJxX2Z3ZF9tYXNrLCBkYXRhLT5iYXNlICsgSVJRRU4pOworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KGRuLCAiYnJjbSxpbnQtZndkLW1hc2siLAorCQkJCQkgZGF0YS0+aXJxX2Z3ZF9tYXNrLCBkYXRhLT5uX3dvcmRzKTsKKwlpZiAocmV0ID09IDAgfHwgcmV0ID09IC1FSU5WQUwpIHsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBkYXRhLT5uX3dvcmRzOyBpZHgrKykKKwkJCV9fcmF3X3dyaXRlbChkYXRhLT5pcnFfZndkX21hc2tbaWR4XSwKKwkJCQkgICAgIGRhdGEtPmJhc2VbaWR4XSArIElSUUVOKTsKKwl9IGVsc2UgeworCQkvKiBwcm9wZXJ0eSBleGlzdHMgYnV0IGhhcyB0aGUgd3JvbmcgbnVtYmVyIG9mIHdvcmRzICovCisJCXByX2VycigiaW52YWxpZCBpbnQtZndkLW1hc2sgcHJvcGVydHlcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF91bm1hcDsKKwl9CiAKIAludW1fcGFyZW50X2lycXMgPSBvZl9pcnFfY291bnQoZG4pOwogCWlmIChudW1fcGFyZW50X2lycXMgPD0gMCkgewpAQCAtMTUyLDcgKzE3Myw4IEBACiAJfQogCiAJbWFwX21hc2sgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJicmNtLGludC1tYXAtbWFzayIsICZsZW4pOwotCWlmICghbWFwX21hc2sgfHwgKGxlbiAhPSAoc2l6ZW9mKCptYXBfbWFzaykgKiBudW1fcGFyZW50X2lycXMpKSkgeworCWlmICghbWFwX21hc2sgfHwKKwkgICAgKGxlbiAhPSAoc2l6ZW9mKCptYXBfbWFzaykgKiBudW1fcGFyZW50X2lycXMgKiBkYXRhLT5uX3dvcmRzKSkpIHsKIAkJcHJfZXJyKCJpbnZhbGlkIGJyY20saW50LW1hcC1tYXNrIHByb3BlcnR5XG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5tYXA7CkBAIC0xNjQsNTYgKzE4Niw3MCBAQAogCQkJZ290byBvdXRfdW5tYXA7CiAJfQogCi0JZGF0YS0+ZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKGRuLCAzMiwKLQkJCQkJJmlycV9nZW5lcmljX2NoaXBfb3BzLCBOVUxMKTsKKwlkYXRhLT5kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIoZG4sIElSUVNfUEVSX1dPUkQgKiBkYXRhLT5uX3dvcmRzLAorCQkJCQkgICAgICZpcnFfZ2VuZXJpY19jaGlwX29wcywgTlVMTCk7CiAJaWYgKCFkYXRhLT5kb21haW4pIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfdW5tYXA7CiAJfQogCi0JcmV0ID0gaXJxX2FsbG9jX2RvbWFpbl9nZW5lcmljX2NoaXBzKGRhdGEtPmRvbWFpbiwgMzIsIDEsCi0JCQkJZG4tPmZ1bGxfbmFtZSwgaGFuZGxlX2xldmVsX2lycSwgY2xyLCAwLAotCQkJCUlSUV9HQ19JTklUX01BU0tfQ0FDSEUpOworCS8qIE1JUFMgY2hpcHMgc3RyYXBwZWQgZm9yIEJFIHdpbGwgYXV0b21hZ2ljYWxseSBjb25maWd1cmUgdGhlCisJICogcGVyaXBoZXJhbCByZWdpc3RlcnMgZm9yIENQVS1uYXRpdmUgYnl0ZSBvcmRlci4KKwkgKi8KKwlmbGFncyA9IElSUV9HQ19JTklUX01BU0tfQ0FDSEU7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX01JUFMpICYmIElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSkKKwkJZmxhZ3MgfD0gSVJRX0dDX0JFX0lPOworCisJcmV0ID0gaXJxX2FsbG9jX2RvbWFpbl9nZW5lcmljX2NoaXBzKGRhdGEtPmRvbWFpbiwgSVJRU19QRVJfV09SRCwgMSwKKwkJCQlkbi0+ZnVsbF9uYW1lLCBoYW5kbGVfbGV2ZWxfaXJxLCBjbHIsIDAsIGZsYWdzKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIGdlbmVyaWMgaXJxIGNoaXBcbiIpOwogCQlnb3RvIG91dF9mcmVlX2RvbWFpbjsKIAl9CiAKLQlnYyA9IGlycV9nZXRfZG9tYWluX2dlbmVyaWNfY2hpcChkYXRhLT5kb21haW4sIDApOwotCWdjLT51bnVzZWQgPSAweGZmZmZmZmYgJiB+ZGF0YS0+aXJxX21hcF9tYXNrOwotCWdjLT5yZWdfYmFzZSA9IGRhdGEtPmJhc2U7Ci0JZ2MtPnByaXZhdGUgPSBkYXRhOwotCWN0ID0gZ2MtPmNoaXBfdHlwZXM7Ci0KLQljdC0+cmVncy5tYXNrID0gSVJRRU47Ci0JY3QtPmNoaXAuaXJxX21hc2sgPSBpcnFfZ2NfbWFza19jbHJfYml0OwotCWN0LT5jaGlwLmlycV91bm1hc2sgPSBpcnFfZ2NfbWFza19zZXRfYml0OwotCWN0LT5jaGlwLmlycV9hY2sgPSBpcnFfZ2Nfbm9vcDsKLQljdC0+Y2hpcC5pcnFfc3VzcGVuZCA9IGJjbTcxMjBfbDJfaW50Y19zdXNwZW5kOwotCWN0LT5jaGlwLmlycV9yZXN1bWUgPSBiY203MTIwX2wyX2ludGNfcmVzdW1lOwotCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkbiwgImJyY20saXJxLWNhbi13YWtlIikpIHsKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGRuLCAiYnJjbSxpcnEtY2FuLXdha2UiKSkKIAkJZGF0YS0+Y2FuX3dha2UgPSB0cnVlOwotCQkvKiBUaGlzIElSUSBjaGlwIGNhbiB3YWtlIHRoZSBzeXN0ZW0sIHNldCBhbGwgcmVsZXZhbnQgY2hpbGQKLQkJICogaW50ZXJ1cHRzIGluIHdha2VfZW5hYmxlZCBtYXNrCi0JCSAqLwotCQlnYy0+d2FrZV9lbmFibGVkID0gMHhmZmZmZmZmZjsKLQkJZ2MtPndha2VfZW5hYmxlZCAmPSB+Z2MtPnVudXNlZDsKLQkJY3QtPmNoaXAuaXJxX3NldF93YWtlID0gaXJxX2djX3NldF93YWtlOworCisJZm9yIChpZHggPSAwOyBpZHggPCBkYXRhLT5uX3dvcmRzOyBpZHgrKykgeworCQlpcnEgPSBpZHggKiBJUlFTX1BFUl9XT1JEOworCQlnYyA9IGlycV9nZXRfZG9tYWluX2dlbmVyaWNfY2hpcChkYXRhLT5kb21haW4sIGlycSk7CisKKwkJZ2MtPnVudXNlZCA9IDB4ZmZmZmZmZmYgJiB+ZGF0YS0+aXJxX21hcF9tYXNrW2lkeF07CisJCWdjLT5yZWdfYmFzZSA9IGRhdGEtPmJhc2VbaWR4XTsKKwkJZ2MtPnByaXZhdGUgPSBkYXRhOworCQljdCA9IGdjLT5jaGlwX3R5cGVzOworCisJCWN0LT5yZWdzLm1hc2sgPSBJUlFFTjsKKwkJY3QtPmNoaXAuaXJxX21hc2sgPSBpcnFfZ2NfbWFza19jbHJfYml0OworCQljdC0+Y2hpcC5pcnFfdW5tYXNrID0gaXJxX2djX21hc2tfc2V0X2JpdDsKKwkJY3QtPmNoaXAuaXJxX2FjayA9IGlycV9nY19ub29wOworCQljdC0+Y2hpcC5pcnFfc3VzcGVuZCA9IGJjbTcxMjBfbDJfaW50Y19zdXNwZW5kOworCQljdC0+Y2hpcC5pcnFfcmVzdW1lID0gYmNtNzEyMF9sMl9pbnRjX3Jlc3VtZTsKKworCQlpZiAoZGF0YS0+Y2FuX3dha2UpIHsKKwkJCS8qIFRoaXMgSVJRIGNoaXAgY2FuIHdha2UgdGhlIHN5c3RlbSwgc2V0IGFsbAorCQkJICogcmVsZXZhbnQgY2hpbGQgaW50ZXJ1cHRzIGluIHdha2VfZW5hYmxlZCBtYXNrCisJCQkgKi8KKwkJCWdjLT53YWtlX2VuYWJsZWQgPSAweGZmZmZmZmZmOworCQkJZ2MtPndha2VfZW5hYmxlZCAmPSB+Z2MtPnVudXNlZDsKKwkJCWN0LT5jaGlwLmlycV9zZXRfd2FrZSA9IGlycV9nY19zZXRfd2FrZTsKKwkJfQogCX0KIAogCXByX2luZm8oInJlZ2lzdGVyZWQgQkNNNzEyMCBMMiBpbnRjIChtZW06IDB4JXAsIHBhcmVudCBJUlEocyk6ICVkKVxuIiwKLQkJCWRhdGEtPmJhc2UsIG51bV9wYXJlbnRfaXJxcyk7CisJCQlkYXRhLT5iYXNlWzBdLCBudW1fcGFyZW50X2lycXMpOwogCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX2RvbWFpbjoKIAlpcnFfZG9tYWluX3JlbW92ZShkYXRhLT5kb21haW4pOwogb3V0X3VubWFwOgotCWlvdW5tYXAoZGF0YS0+YmFzZSk7Ci1vdXRfZnJlZToKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9XT1JEUzsgaWR4KyspIHsKKwkJaWYgKGRhdGEtPmJhc2VbaWR4XSkKKwkJCWlvdW5tYXAoZGF0YS0+YmFzZVtpZHhdKTsKKwl9CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHJldDsKIH0KLUlSUUNISVBfREVDTEFSRShicmNtc3RiX2wyX2ludGMsICJicmNtLGJjbTcxMjAtbDItaW50YyIsCitJUlFDSElQX0RFQ0xBUkUoYmNtNzEyMF9sMl9pbnRjLCAiYnJjbSxiY203MTIwLWwyLWludGMiLAogCQliY203MTIwX2wyX2ludGNfb2ZfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWJyY21zdGItbDIuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYnJjbXN0Yi1sMi5jCmluZGV4IDE0NjkxYTQuLjMxM2MyYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYnJjbXN0Yi1sMi5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYnJjbXN0Yi1sMi5jCkBAIC0xOCw3ICsxOCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KQEAgLTMwLDggKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9jaGFpbmVkX2lycS5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KICNpbmNsdWRlICJpcnFjaGlwLmgiCiAKIC8qIFJlZ2lzdGVyIG9mZnNldHMgaW4gdGhlIEwyIGludGVycnVwdCBjb250cm9sbGVyICovCkBAIC01NCwyMyArNTQsMjYgQEAKIHN0YXRpYyB2b2lkIGJyY21zdGJfbDJfaW50Y19pcnFfaGFuZGxlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgYnJjbXN0Yl9sMl9pbnRjX2RhdGEgKmIgPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9nZXRfZG9tYWluX2dlbmVyaWNfY2hpcChiLT5kb21haW4sIDApOwogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOwogCXUzMiBzdGF0dXM7CiAKIAljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNjKTsKIAotCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGItPmJhc2UgKyBDUFVfU1RBVFVTKSAmCi0JCX4oX19yYXdfcmVhZGwoYi0+YmFzZSArIENQVV9NQVNLX1NUQVRVUykpOworCXN0YXR1cyA9IGlycV9yZWdfcmVhZGwoZ2MsIENQVV9TVEFUVVMpICYKKwkJfihpcnFfcmVnX3JlYWRsKGdjLCBDUFVfTUFTS19TVEFUVVMpKTsKIAogCWlmIChzdGF0dXMgPT0gMCkgewotCQlkb19iYWRfSVJRKGlycSwgZGVzYyk7CisJCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOworCQloYW5kbGVfYmFkX2lycShpcnEsIGRlc2MpOworCQlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCQlnb3RvIG91dDsKIAl9CiAKIAlkbyB7CiAJCWlycSA9IGZmcyhzdGF0dXMpIC0gMTsKIAkJLyogYWNrIGF0IG91ciBsZXZlbCAqLwotCQlfX3Jhd193cml0ZWwoMSA8PCBpcnEsIGItPmJhc2UgKyBDUFVfQ0xFQVIpOworCQlpcnFfcmVnX3dyaXRlbChnYywgMSA8PCBpcnEsIENQVV9DTEVBUik7CiAJCXN0YXR1cyAmPSB+KDEgPDwgaXJxKTsKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYi0+ZG9tYWluLCBpcnEpKTsKIAl9IHdoaWxlIChzdGF0dXMpOwpAQCAtODUsMTIgKzg4LDEyIEBACiAKIAlpcnFfZ2NfbG9jayhnYyk7CiAJLyogU2F2ZSB0aGUgY3VycmVudCBtYXNrICovCi0JYi0+c2F2ZWRfbWFzayA9IF9fcmF3X3JlYWRsKGItPmJhc2UgKyBDUFVfTUFTS19TVEFUVVMpOworCWItPnNhdmVkX21hc2sgPSBpcnFfcmVnX3JlYWRsKGdjLCBDUFVfTUFTS19TVEFUVVMpOwogCiAJaWYgKGItPmNhbl93YWtlKSB7CiAJCS8qIFByb2dyYW0gdGhlIHdha2V1cCBtYXNrICovCi0JCV9fcmF3X3dyaXRlbCh+Z2MtPndha2VfYWN0aXZlLCBiLT5iYXNlICsgQ1BVX01BU0tfU0VUKTsKLQkJX19yYXdfd3JpdGVsKGdjLT53YWtlX2FjdGl2ZSwgYi0+YmFzZSArIENQVV9NQVNLX0NMRUFSKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIH5nYy0+d2FrZV9hY3RpdmUsIENQVV9NQVNLX1NFVCk7CisJCWlycV9yZWdfd3JpdGVsKGdjLCBnYy0+d2FrZV9hY3RpdmUsIENQVV9NQVNLX0NMRUFSKTsKIAl9CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CkBAIC0xMDIsMTEgKzEwNSwxMSBAQAogCiAJaXJxX2djX2xvY2soZ2MpOwogCS8qIENsZWFyIHVubWFza2VkIG5vbi13YWtldXAgaW50ZXJydXB0cyAqLwotCV9fcmF3X3dyaXRlbCh+Yi0+c2F2ZWRfbWFzayAmIH5nYy0+d2FrZV9hY3RpdmUsIGItPmJhc2UgKyBDUFVfQ0xFQVIpOworCWlycV9yZWdfd3JpdGVsKGdjLCB+Yi0+c2F2ZWRfbWFzayAmIH5nYy0+d2FrZV9hY3RpdmUsIENQVV9DTEVBUik7CiAKIAkvKiBSZXN0b3JlIHRoZSBzYXZlZCBtYXNrICovCi0JX19yYXdfd3JpdGVsKGItPnNhdmVkX21hc2ssIGItPmJhc2UgKyBDUFVfTUFTS19TRVQpOwotCV9fcmF3X3dyaXRlbCh+Yi0+c2F2ZWRfbWFzaywgYi0+YmFzZSArIENQVV9NQVNLX0NMRUFSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgYi0+c2F2ZWRfbWFzaywgQ1BVX01BU0tfU0VUKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgfmItPnNhdmVkX21hc2ssIENQVV9NQVNLX0NMRUFSKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtMTE4LDYgKzEyMSw3IEBACiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjOwogCXN0cnVjdCBpcnFfY2hpcF90eXBlICpjdDsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGludCBmbGFnczsKIAogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKQEAgLTEzMSw4ICsxMzUsOCBAQAogCX0KIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgYnkgZGVmYXVsdCAqLwotCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBkYXRhLT5iYXNlICsgQ1BVX01BU0tfU0VUKTsKLQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgZGF0YS0+YmFzZSArIENQVV9DTEVBUik7CisJd3JpdGVsKDB4ZmZmZmZmZmYsIGRhdGEtPmJhc2UgKyBDUFVfTUFTS19TRVQpOworCXdyaXRlbCgweGZmZmZmZmZmLCBkYXRhLT5iYXNlICsgQ1BVX0NMRUFSKTsKIAogCWRhdGEtPnBhcmVudF9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CiAJaWYgKCFkYXRhLT5wYXJlbnRfaXJxKSB7CkBAIC0xNDgsOSArMTUyLDE2IEBACiAJCWdvdG8gb3V0X3VubWFwOwogCX0KIAorCS8qIE1JUFMgY2hpcHMgc3RyYXBwZWQgZm9yIEJFIHdpbGwgYXV0b21hZ2ljYWxseSBjb25maWd1cmUgdGhlCisJICogcGVyaXBoZXJhbCByZWdpc3RlcnMgZm9yIENQVS1uYXRpdmUgYnl0ZSBvcmRlci4KKwkgKi8KKwlmbGFncyA9IDA7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX01JUFMpICYmIElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSkKKwkJZmxhZ3MgfD0gSVJRX0dDX0JFX0lPOworCiAJLyogQWxsb2NhdGUgYSBzaW5nbGUgR2VuZXJpYyBJUlEgY2hpcCBmb3IgdGhpcyBub2RlICovCiAJcmV0ID0gaXJxX2FsbG9jX2RvbWFpbl9nZW5lcmljX2NoaXBzKGRhdGEtPmRvbWFpbiwgMzIsIDEsCi0JCQkJbnAtPmZ1bGxfbmFtZSwgaGFuZGxlX2VkZ2VfaXJxLCBjbHIsIDAsIDApOworCQkJCW5wLT5mdWxsX25hbWUsIGhhbmRsZV9lZGdlX2lycSwgY2xyLCAwLCBmbGFncyk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBnZW5lcmljIGlycSBjaGlwXG4iKTsKIAkJZ290byBvdXRfZnJlZV9kb21haW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWR3LWFwYi1pY3RsLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWR3LWFwYi1pY3RsLmMKaW5kZXggMzFlMjMxZS4uNTNiYjczMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1kdy1hcGItaWN0bC5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtZHctYXBiLWljdGwuYwpAQCAtNTAsNiArNTAsMjEgQEAKIAljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgdm9pZCBkd19hcGJfaWN0bF9yZXN1bWUoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBpcnFfY2hpcF90eXBlICpjdCA9IGlycV9kYXRhX2dldF9jaGlwX3R5cGUoZCk7CisKKwlpcnFfZ2NfbG9jayhnYyk7CisJd3JpdGVsX3JlbGF4ZWQofjAsIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLmVuYWJsZSk7CisJd3JpdGVsX3JlbGF4ZWQoKmN0LT5tYXNrX2NhY2hlLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5tYXNrKTsKKwlpcnFfZ2NfdW5sb2NrKGdjKTsKK30KKyNlbHNlCisjZGVmaW5lIGR3X2FwYl9pY3RsX3Jlc3VtZQlOVUxMCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIHN0YXRpYyBpbnQgX19pbml0IGR3X2FwYl9pY3RsX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCkKIHsKQEAgLTk0LDE2ICsxMDksMTYgQEAKIAkgKi8KIAogCS8qIG1hc2sgYW5kIGVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotCXdyaXRlbCh+MCwgaW9iYXNlICsgQVBCX0lOVF9NQVNLX0wpOwotCXdyaXRlbCh+MCwgaW9iYXNlICsgQVBCX0lOVF9NQVNLX0gpOwotCXdyaXRlbCh+MCwgaW9iYXNlICsgQVBCX0lOVF9FTkFCTEVfTCk7Ci0Jd3JpdGVsKH4wLCBpb2Jhc2UgKyBBUEJfSU5UX0VOQUJMRV9IKTsKKwl3cml0ZWxfcmVsYXhlZCh+MCwgaW9iYXNlICsgQVBCX0lOVF9NQVNLX0wpOworCXdyaXRlbF9yZWxheGVkKH4wLCBpb2Jhc2UgKyBBUEJfSU5UX01BU0tfSCk7CisJd3JpdGVsX3JlbGF4ZWQofjAsIGlvYmFzZSArIEFQQl9JTlRfRU5BQkxFX0wpOworCXdyaXRlbF9yZWxheGVkKH4wLCBpb2Jhc2UgKyBBUEJfSU5UX0VOQUJMRV9IKTsKIAotCXJlZyA9IHJlYWRsKGlvYmFzZSArIEFQQl9JTlRfRU5BQkxFX0gpOworCXJlZyA9IHJlYWRsX3JlbGF4ZWQoaW9iYXNlICsgQVBCX0lOVF9FTkFCTEVfSCk7CiAJaWYgKHJlZykKIAkJbnJpcnFzID0gMzIgKyBmbHMocmVnKTsKIAllbHNlCi0JCW5yaXJxcyA9IGZscyhyZWFkbChpb2Jhc2UgKyBBUEJfSU5UX0VOQUJMRV9MKSk7CisJCW5yaXJxcyA9IGZscyhyZWFkbF9yZWxheGVkKGlvYmFzZSArIEFQQl9JTlRfRU5BQkxFX0wpKTsKIAogCWRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihucCwgbnJpcnFzLAogCQkJCSAgICAgICAmaXJxX2dlbmVyaWNfY2hpcF9vcHMsIE5VTEwpOwpAQCAtMTE1LDYgKzEzMCw3IEBACiAKIAlyZXQgPSBpcnFfYWxsb2NfZG9tYWluX2dlbmVyaWNfY2hpcHMoZG9tYWluLCAzMiwgKG5yaXJxcyA+IDMyKSA/IDIgOiAxLAogCQkJCQkgICAgIG5wLT5uYW1lLCBoYW5kbGVfbGV2ZWxfaXJxLCBjbHIsIDAsCisJCQkJCSAgICAgSVJRX0dDX01BU0tfQ0FDSEVfUEVSX1RZUEUgfAogCQkJCQkgICAgIElSUV9HQ19JTklUX01BU0tfQ0FDSEUpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCIlczogdW5hYmxlIHRvIGFsbG9jIGlycSBkb21haW4gZ2NcbiIsIG5wLT5mdWxsX25hbWUpOwpAQCAtMTI2LDEzICsxNDIsMTcgQEAKIAlnYy0+cmVnX2Jhc2UgPSBpb2Jhc2U7CiAKIAlnYy0+Y2hpcF90eXBlc1swXS5yZWdzLm1hc2sgPSBBUEJfSU5UX01BU0tfTDsKKwlnYy0+Y2hpcF90eXBlc1swXS5yZWdzLmVuYWJsZSA9IEFQQl9JTlRfRU5BQkxFX0w7CiAJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX3NldF9iaXQ7CiAJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfdW5tYXNrID0gaXJxX2djX21hc2tfY2xyX2JpdDsKKwlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9yZXN1bWUgPSBkd19hcGJfaWN0bF9yZXN1bWU7CiAKIAlpZiAobnJpcnFzID4gMzIpIHsKIAkJZ2MtPmNoaXBfdHlwZXNbMV0ucmVncy5tYXNrID0gQVBCX0lOVF9NQVNLX0g7CisJCWdjLT5jaGlwX3R5cGVzWzFdLnJlZ3MuZW5hYmxlID0gQVBCX0lOVF9FTkFCTEVfSDsKIAkJZ2MtPmNoaXBfdHlwZXNbMV0uY2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX3NldF9iaXQ7CiAJCWdjLT5jaGlwX3R5cGVzWzFdLmNoaXAuaXJxX3VubWFzayA9IGlycV9nY19tYXNrX2Nscl9iaXQ7CisJCWdjLT5jaGlwX3R5cGVzWzFdLmNoaXAuaXJxX3Jlc3VtZSA9IGR3X2FwYl9pY3RsX3Jlc3VtZTsKIAl9CiAKIAlpcnFfc2V0X2hhbmRsZXJfZGF0YShpcnEsIGdjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy5jCmluZGV4IDM4NDkzZmYuLjdmOWJlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1naWMuYwpAQCAtMTA0MSw2ICsxMDQxLDggQEAKIAlyZXR1cm4gMDsKIH0KIElSUUNISVBfREVDTEFSRShnaWNfNDAwLCAiYXJtLGdpYy00MDAiLCBnaWNfb2ZfaW5pdCk7CitJUlFDSElQX0RFQ0xBUkUoYXJtMTFtcF9naWMsICJhcm0sYXJtMTFtcC1naWMiLCBnaWNfb2ZfaW5pdCk7CitJUlFDSElQX0RFQ0xBUkUoYXJtMTE3Nmp6Zl9kY19naWMsICJhcm0sYXJtMTE3Nmp6Zi1kZXZjaGlwLWdpYyIsIGdpY19vZl9pbml0KTsKIElSUUNISVBfREVDTEFSRShjb3J0ZXhfYTE1X2dpYywgImFybSxjb3J0ZXgtYTE1LWdpYyIsIGdpY19vZl9pbml0KTsKIElSUUNISVBfREVDTEFSRShjb3J0ZXhfYTlfZ2ljLCAiYXJtLGNvcnRleC1hOS1naWMiLCBnaWNfb2ZfaW5pdCk7CiBJUlFDSElQX0RFQ0xBUkUoY29ydGV4X2E3X2dpYywgImFybSxjb3J0ZXgtYTctZ2ljIiwgZ2ljX29mX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1oaXAwNC5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1oaXAwNC5jCmluZGV4IDljOGY4MzM1Li4yOWI4ZjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWhpcDA0LmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1oaXAwNC5jCkBAIC0xNzYsOCArMTc2LDcgQEAKIAkJaXJxbnIgPSBpcnFzdGF0ICYgR0lDQ19JQVJfSU5UX0lEX01BU0s7CiAKIAkJaWYgKGxpa2VseShpcnFuciA+IDE1ICYmIGlycW5yIDw9IEhJUDA0X01BWF9JUlFTKSkgewotCQkJaXJxbnIgPSBpcnFfZmluZF9tYXBwaW5nKGhpcDA0X2RhdGEuZG9tYWluLCBpcnFucik7Ci0JCQloYW5kbGVfSVJRKGlycW5yLCByZWdzKTsKKwkJCWhhbmRsZV9kb21haW5faXJxKGhpcDA0X2RhdGEuZG9tYWluLCBpcnFuciwgcmVncyk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoaXJxbnIgPCAxNikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1zdW54aS1ubWkuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtc3VueGktbm1pLmMKaW5kZXggMTJmNTQ3YS4uNGE5Y2U1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1zdW54aS1ubWkuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLXN1bnhpLW5taS5jCkBAIC01MCwxMiArNTAsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdW54aV9zY19ubWlfd3JpdGUoc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjLCB1MzIgb2ZmLAogCQkJCSAgICAgIHUzMiB2YWwpCiB7Ci0JaXJxX3JlZ193cml0ZWwodmFsLCBnYy0+cmVnX2Jhc2UgKyBvZmYpOworCWlycV9yZWdfd3JpdGVsKGdjLCB2YWwsIG9mZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX3NjX25taV9yZWFkKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywgdTMyIG9mZikKIHsKLQlyZXR1cm4gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyBvZmYpOworCXJldHVybiBpcnFfcmVnX3JlYWRsKGdjLCBvZmYpOwogfQogCiBzdGF0aWMgdm9pZCBzdW54aV9zY19ubWlfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLXRiMTB4LmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLXRiMTB4LmMKaW5kZXggN2M0NGM5OS4uYWNjYzIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS10YjEweC5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtdGIxMHguYwpAQCAtNDMsMTIgKzQzLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYWJfaXJxY3RsX3dyaXRlcmVnKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywgdTMyIHJlZywKIAl1MzIgdmFsKQogewotCWlycV9yZWdfd3JpdGVsKHZhbCwgZ2MtPnJlZ19iYXNlICsgcmVnKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgdmFsLCByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBhYl9pcnFjdGxfcmVhZHJlZyhzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MsIHUzMiByZWcpCiB7Ci0JcmV0dXJuIGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgcmVnKTsKKwlyZXR1cm4gaXJxX3JlZ19yZWFkbChnYywgcmVnKTsKIH0KIAogc3RhdGljIGludCB0YjEweF9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1iaW8tcHJpc29uLmMgYi9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uYwppbmRleCBmNzUyZDEyLi5iZTA2NTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uYworKysgYi9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uYwpAQCAtMTQsNjggKzE0LDM4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0cnVjdCBidWNrZXQgewotCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCBjZWxsczsKLX07CisjZGVmaW5lIE1JTl9DRUxMUyAxMDI0CiAKIHN0cnVjdCBkbV9iaW9fcHJpc29uIHsKKwlzcGlubG9ja190IGxvY2s7CiAJbWVtcG9vbF90ICpjZWxsX3Bvb2w7Ci0KLQl1bnNpZ25lZCBucl9idWNrZXRzOwotCXVuc2lnbmVkIGhhc2hfbWFzazsKLQlzdHJ1Y3QgYnVja2V0ICpidWNrZXRzOworCXN0cnVjdCByYl9yb290IGNlbGxzOwogfTsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHVpbnQzMl90IGNhbGNfbnJfYnVja2V0cyh1bnNpZ25lZCBucl9jZWxscykKLXsKLQl1aW50MzJfdCBuID0gMTI4OwotCi0JbnJfY2VsbHMgLz0gNDsKLQlucl9jZWxscyA9IG1pbihucl9jZWxscywgODE5MnUpOwotCi0Jd2hpbGUgKG4gPCBucl9jZWxscykKLQkJbiA8PD0gMTsKLQotCXJldHVybiBuOwotfQotCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKl9jZWxsX2NhY2hlOwogCi1zdGF0aWMgdm9pZCBpbml0X2J1Y2tldChzdHJ1Y3QgYnVja2V0ICpiKQotewotCXNwaW5fbG9ja19pbml0KCZiLT5sb2NrKTsKLQlJTklUX0hMSVNUX0hFQUQoJmItPmNlbGxzKTsKLX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCiAgKiBAbnJfY2VsbHMgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgY2VsbHMgeW91IHdhbnQgaW4gdXNlIF9jb25jdXJyZW50bHlfLgogICogRG9uJ3QgY29uZnVzZSBpdCB3aXRoIHRoZSBudW1iZXIgb2YgZGlzdGluY3Qga2V5cy4KICAqLwotc3RydWN0IGRtX2Jpb19wcmlzb24gKmRtX2Jpb19wcmlzb25fY3JlYXRlKHVuc2lnbmVkIG5yX2NlbGxzKQorc3RydWN0IGRtX2Jpb19wcmlzb24gKmRtX2Jpb19wcmlzb25fY3JlYXRlKHZvaWQpCiB7Ci0JdW5zaWduZWQgaTsKLQl1aW50MzJfdCBucl9idWNrZXRzID0gY2FsY19ucl9idWNrZXRzKG5yX2NlbGxzKTsKLQlzaXplX3QgbGVuID0gc2l6ZW9mKHN0cnVjdCBkbV9iaW9fcHJpc29uKSArCi0JCShzaXplb2Yoc3RydWN0IGJ1Y2tldCkgKiBucl9idWNrZXRzKTsKLQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCXN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24gPSBrbWFsbG9jKHNpemVvZigqcHJpc29uKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXByaXNvbikKIAkJcmV0dXJuIE5VTEw7CiAKLQlwcmlzb24tPmNlbGxfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChucl9jZWxscywgX2NlbGxfY2FjaGUpOworCXNwaW5fbG9ja19pbml0KCZwcmlzb24tPmxvY2spOworCisJcHJpc29uLT5jZWxsX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woTUlOX0NFTExTLCBfY2VsbF9jYWNoZSk7CiAJaWYgKCFwcmlzb24tPmNlbGxfcG9vbCkgewogCQlrZnJlZShwcmlzb24pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlwcmlzb24tPm5yX2J1Y2tldHMgPSBucl9idWNrZXRzOwotCXByaXNvbi0+aGFzaF9tYXNrID0gbnJfYnVja2V0cyAtIDE7Ci0JcHJpc29uLT5idWNrZXRzID0gKHN0cnVjdCBidWNrZXQgKikgKHByaXNvbiArIDEpOwotCWZvciAoaSA9IDA7IGkgPCBucl9idWNrZXRzOyBpKyspCi0JCWluaXRfYnVja2V0KHByaXNvbi0+YnVja2V0cyArIGkpOworCXByaXNvbi0+Y2VsbHMgPSBSQl9ST09UOwogCiAJcmV0dXJuIHByaXNvbjsKIH0KQEAgLTEwMSw2OCArNzEsNzMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX2Jpb19wcmlzb25fZnJlZV9jZWxsKTsKIAotc3RhdGljIHVpbnQzMl90IGhhc2hfa2V5KHN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24sIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5KQotewotCWNvbnN0IHVuc2lnbmVkIGxvbmcgQklHX1BSSU1FID0gNDI5NDk2NzI5MVVMOwotCXVpbnQ2NF90IGhhc2ggPSBrZXktPmJsb2NrICogQklHX1BSSU1FOwotCi0JcmV0dXJuICh1aW50MzJfdCkgKGhhc2ggJiBwcmlzb24tPmhhc2hfbWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQga2V5c19lcXVhbChzdHJ1Y3QgZG1fY2VsbF9rZXkgKmxocywgc3RydWN0IGRtX2NlbGxfa2V5ICpyaHMpCi17Ci0JICAgICAgIHJldHVybiAobGhzLT52aXJ0dWFsID09IHJocy0+dmlydHVhbCkgJiYKLQkJICAgICAgIChsaHMtPmRldiA9PSByaHMtPmRldikgJiYKLQkJICAgICAgIChsaHMtPmJsb2NrID09IHJocy0+YmxvY2spOwotfQotCi1zdGF0aWMgc3RydWN0IGJ1Y2tldCAqZ2V0X2J1Y2tldChzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uLAotCQkJCSBzdHJ1Y3QgZG1fY2VsbF9rZXkgKmtleSkKLXsKLQlyZXR1cm4gcHJpc29uLT5idWNrZXRzICsgaGFzaF9rZXkocHJpc29uLCBrZXkpOwotfQotCi1zdGF0aWMgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqX19zZWFyY2hfYnVja2V0KHN0cnVjdCBidWNrZXQgKmIsCi0JCQkJCQkgIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5KQotewotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGw7Ci0KLQlobGlzdF9mb3JfZWFjaF9lbnRyeShjZWxsLCAmYi0+Y2VsbHMsIGxpc3QpCi0JCWlmIChrZXlzX2VxdWFsKCZjZWxsLT5rZXksIGtleSkpCi0JCQlyZXR1cm4gY2VsbDsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBfX3NldHVwX25ld19jZWxsKHN0cnVjdCBidWNrZXQgKmIsCi0JCQkgICAgIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5LAorc3RhdGljIHZvaWQgX19zZXR1cF9uZXdfY2VsbChzdHJ1Y3QgZG1fY2VsbF9rZXkgKmtleSwKIAkJCSAgICAgc3RydWN0IGJpbyAqaG9sZGVyLAogCQkJICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQogewotCW1lbWNweSgmY2VsbC0+a2V5LCBrZXksIHNpemVvZihjZWxsLT5rZXkpKTsKLQljZWxsLT5ob2xkZXIgPSBob2xkZXI7Ci0JYmlvX2xpc3RfaW5pdCgmY2VsbC0+Ymlvcyk7Ci0JaGxpc3RfYWRkX2hlYWQoJmNlbGwtPmxpc3QsICZiLT5jZWxscyk7CisgICAgICAgbWVtY3B5KCZjZWxsLT5rZXksIGtleSwgc2l6ZW9mKGNlbGwtPmtleSkpOworICAgICAgIGNlbGwtPmhvbGRlciA9IGhvbGRlcjsKKyAgICAgICBiaW9fbGlzdF9pbml0KCZjZWxsLT5iaW9zKTsKIH0KIAotc3RhdGljIGludCBfX2Jpb19kZXRhaW4oc3RydWN0IGJ1Y2tldCAqYiwKK3N0YXRpYyBpbnQgY21wX2tleXMoc3RydWN0IGRtX2NlbGxfa2V5ICpsaHMsCisJCSAgICBzdHJ1Y3QgZG1fY2VsbF9rZXkgKnJocykKK3sKKwlpZiAobGhzLT52aXJ0dWFsIDwgcmhzLT52aXJ0dWFsKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobGhzLT52aXJ0dWFsID4gcmhzLT52aXJ0dWFsKQorCQlyZXR1cm4gMTsKKworCWlmIChsaHMtPmRldiA8IHJocy0+ZGV2KQorCQlyZXR1cm4gLTE7CisKKwlpZiAobGhzLT5kZXYgPiByaHMtPmRldikKKwkJcmV0dXJuIDE7CisKKwlpZiAobGhzLT5ibG9ja19lbmQgPD0gcmhzLT5ibG9ja19iZWdpbikKKwkJcmV0dXJuIC0xOworCisJaWYgKGxocy0+YmxvY2tfYmVnaW4gPj0gcmhzLT5ibG9ja19lbmQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19iaW9fZGV0YWluKHN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24sCiAJCQlzdHJ1Y3QgZG1fY2VsbF9rZXkgKmtleSwKIAkJCXN0cnVjdCBiaW8gKmlubWF0ZSwKIAkJCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGxfcHJlYWxsb2MsCiAJCQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqY2VsbF9yZXN1bHQpCiB7Ci0Jc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbDsKKwlpbnQgcjsKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICZwcmlzb24tPmNlbGxzLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOwogCi0JY2VsbCA9IF9fc2VhcmNoX2J1Y2tldChiLCBrZXkpOwotCWlmIChjZWxsKSB7Ci0JCWlmIChpbm1hdGUpCi0JCQliaW9fbGlzdF9hZGQoJmNlbGwtPmJpb3MsIGlubWF0ZSk7Ci0JCSpjZWxsX3Jlc3VsdCA9IGNlbGw7Ci0JCXJldHVybiAxOworCXdoaWxlICgqbmV3KSB7CisJCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwgPQorCQkJY29udGFpbmVyX29mKCpuZXcsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwsIG5vZGUpOworCisJCXIgPSBjbXBfa2V5cyhrZXksICZjZWxsLT5rZXkpOworCisJCXBhcmVudCA9ICpuZXc7CisJCWlmIChyIDwgMCkKKwkJCW5ldyA9ICYoKCpuZXcpLT5yYl9sZWZ0KTsKKwkJZWxzZSBpZiAociA+IDApCisJCQluZXcgPSAmKCgqbmV3KS0+cmJfcmlnaHQpOworCQllbHNlIHsKKwkJCWlmIChpbm1hdGUpCisJCQkJYmlvX2xpc3RfYWRkKCZjZWxsLT5iaW9zLCBpbm1hdGUpOworCQkJKmNlbGxfcmVzdWx0ID0gY2VsbDsKKwkJCXJldHVybiAxOworCQl9CiAJfQogCi0JX19zZXR1cF9uZXdfY2VsbChiLCBrZXksIGlubWF0ZSwgY2VsbF9wcmVhbGxvYyk7CisJX19zZXR1cF9uZXdfY2VsbChrZXksIGlubWF0ZSwgY2VsbF9wcmVhbGxvYyk7CiAJKmNlbGxfcmVzdWx0ID0gY2VsbF9wcmVhbGxvYzsKKworCXJiX2xpbmtfbm9kZSgmY2VsbF9wcmVhbGxvYy0+bm9kZSwgcGFyZW50LCBuZXcpOworCXJiX2luc2VydF9jb2xvcigmY2VsbF9wcmVhbGxvYy0+bm9kZSwgJnByaXNvbi0+Y2VsbHMpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3NCwxMSArMTQ5LDEwIEBACiB7CiAJaW50IHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYnVja2V0ICpiID0gZ2V0X2J1Y2tldChwcmlzb24sIGtleSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYi0+bG9jaywgZmxhZ3MpOwotCXIgPSBfX2Jpb19kZXRhaW4oYiwga2V5LCBpbm1hdGUsIGNlbGxfcHJlYWxsb2MsIGNlbGxfcmVzdWx0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOworCXIgPSBfX2Jpb19kZXRhaW4ocHJpc29uLCBrZXksIGlubWF0ZSwgY2VsbF9wcmVhbGxvYywgY2VsbF9yZXN1bHQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0yMDUsMTAgKzE3OSwxMSBAQAogLyoKICAqIEBpbm1hdGVzIG11c3QgaGF2ZSBiZWVuIGluaXRpYWxpc2VkIHByaW9yIHRvIHRoaXMgY2FsbAogICovCi1zdGF0aWMgdm9pZCBfX2NlbGxfcmVsZWFzZShzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsLAorc3RhdGljIHZvaWQgX19jZWxsX3JlbGVhc2Uoc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbiwKKwkJCSAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCiAJCQkgICBzdHJ1Y3QgYmlvX2xpc3QgKmlubWF0ZXMpCiB7Ci0JaGxpc3RfZGVsKCZjZWxsLT5saXN0KTsKKwlyYl9lcmFzZSgmY2VsbC0+bm9kZSwgJnByaXNvbi0+Y2VsbHMpOwogCiAJaWYgKGlubWF0ZXMpIHsKIAkJaWYgKGNlbGwtPmhvbGRlcikKQEAgLTIyMiwyMSArMTk3LDIxIEBACiAJCSAgICAgc3RydWN0IGJpb19saXN0ICpiaW9zKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGJ1Y2tldCAqYiA9IGdldF9idWNrZXQocHJpc29uLCAmY2VsbC0+a2V5KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiLT5sb2NrLCBmbGFncyk7Ci0JX19jZWxsX3JlbGVhc2UoY2VsbCwgYmlvcyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcmlzb24tPmxvY2ssIGZsYWdzKTsKKwlfX2NlbGxfcmVsZWFzZShwcmlzb24sIGNlbGwsIGJpb3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fY2VsbF9yZWxlYXNlKTsKIAogLyoKICAqIFNvbWV0aW1lcyB3ZSBkb24ndCB3YW50IHRoZSBob2xkZXIsIGp1c3QgdGhlIGFkZGl0aW9uYWwgYmlvcy4KICAqLwotc3RhdGljIHZvaWQgX19jZWxsX3JlbGVhc2Vfbm9faG9sZGVyKHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCitzdGF0aWMgdm9pZCBfX2NlbGxfcmVsZWFzZV9ub19ob2xkZXIoc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbiwKKwkJCQkgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCiAJCQkJICAgICBzdHJ1Y3QgYmlvX2xpc3QgKmlubWF0ZXMpCiB7Ci0JaGxpc3RfZGVsKCZjZWxsLT5saXN0KTsKKwlyYl9lcmFzZSgmY2VsbC0+bm9kZSwgJnByaXNvbi0+Y2VsbHMpOwogCWJpb19saXN0X21lcmdlKGlubWF0ZXMsICZjZWxsLT5iaW9zKTsKIH0KIApAQCAtMjQ1LDExICsyMjAsMTAgQEAKIAkJCSAgICAgICBzdHJ1Y3QgYmlvX2xpc3QgKmlubWF0ZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYnVja2V0ICpiID0gZ2V0X2J1Y2tldChwcmlzb24sICZjZWxsLT5rZXkpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmItPmxvY2ssIGZsYWdzKTsKLQlfX2NlbGxfcmVsZWFzZV9ub19ob2xkZXIoY2VsbCwgaW5tYXRlcyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcmlzb24tPmxvY2ssIGZsYWdzKTsKKwlfX2NlbGxfcmVsZWFzZV9ub19ob2xkZXIocHJpc29uLCBjZWxsLCBpbm1hdGVzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcmlzb24tPmxvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX2NlbGxfcmVsZWFzZV9ub19ob2xkZXIpOwogCkBAIC0yNjcsNiArMjQxLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbV9jZWxsX2Vycm9yKTsKIAordm9pZCBkbV9jZWxsX3Zpc2l0X3JlbGVhc2Uoc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbiwKKwkJCSAgIHZvaWQgKCp2aXNpdF9mbikodm9pZCAqLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICopLAorCQkJICAgdm9pZCAqY29udGV4dCwKKwkJCSAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcmlzb24tPmxvY2ssIGZsYWdzKTsKKwl2aXNpdF9mbihjb250ZXh0LCBjZWxsKTsKKwlyYl9lcmFzZSgmY2VsbC0+bm9kZSwgJnByaXNvbi0+Y2VsbHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1fY2VsbF92aXNpdF9yZWxlYXNlKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2RlZmluZSBERUZFUlJFRF9TRVRfU0laRSA2NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1iaW8tcHJpc29uLmggYi9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uaAppbmRleCA2ODA1YTE0Li43NGNmMDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uaAorKysgYi9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uaApAQCAtMTAsOCArMTAsOCBAQAogI2luY2x1ZGUgInBlcnNpc3RlbnQtZGF0YS9kbS1ibG9jay1tYW5hZ2VyLmgiIC8qIEZJWE1FOiBmb3IgZG1fYmxvY2tfdCAqLwogI2luY2x1ZGUgImRtLXRoaW4tbWV0YWRhdGEuaCIgLyogRklYTUU6IGZvciBkbV90aGluX2lkICovCiAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTIzLDExICsyMywxNCBAQAogICovCiBzdHJ1Y3QgZG1fYmlvX3ByaXNvbjsKIAotLyogRklYTUU6IHRoaXMgbmVlZHMgdG8gYmUgbW9yZSBhYnN0cmFjdCAqLworLyoKKyAqIEtleXMgZGVmaW5lIGEgcmFuZ2Ugb2YgYmxvY2tzIHdpdGhpbiBlaXRoZXIgYSB2aXJ0dWFsIG9yIHBoeXNpY2FsCisgKiBkZXZpY2UuCisgKi8KIHN0cnVjdCBkbV9jZWxsX2tleSB7CiAJaW50IHZpcnR1YWw7CiAJZG1fdGhpbl9pZCBkZXY7Ci0JZG1fYmxvY2tfdCBibG9jazsKKwlkbV9ibG9ja190IGJsb2NrX2JlZ2luLCBibG9ja19lbmQ7CiB9OwogCiAvKgpAQCAtMzUsMTMgKzM4LDE1IEBACiAgKiB0aGVtc2VsdmVzLgogICovCiBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgdXNlcl9saXN0OwkvKiBmb3IgY2xpZW50IHVzZSAqLworCXN0cnVjdCByYl9ub2RlIG5vZGU7CisKIAlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5OwogCXN0cnVjdCBiaW8gKmhvbGRlcjsKIAlzdHJ1Y3QgYmlvX2xpc3QgYmlvczsKIH07CiAKLXN0cnVjdCBkbV9iaW9fcHJpc29uICpkbV9iaW9fcHJpc29uX2NyZWF0ZSh1bnNpZ25lZCBucl9jZWxscyk7CitzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqZG1fYmlvX3ByaXNvbl9jcmVhdGUodm9pZCk7CiB2b2lkIGRtX2Jpb19wcmlzb25fZGVzdHJveShzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uKTsKIAogLyoKQEAgLTU3LDcgKzYyLDcgQEAKIAkJCSAgICAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCk7CiAKIC8qCi0gKiBDcmVhdGVzLCBvciByZXRyaWV2ZXMgYSBjZWxsIGZvciB0aGUgZ2l2ZW4ga2V5LgorICogQ3JlYXRlcywgb3IgcmV0cmlldmVzIGEgY2VsbCB0aGF0IG92ZXJsYXBzIHRoZSBnaXZlbiBrZXkuCiAgKgogICogUmV0dXJucyAxIGlmIHByZS1leGlzdGluZyBjZWxsIHJldHVybmVkLCB6ZXJvIGlmIG5ldyBjZWxsIGNyZWF0ZWQgdXNpbmcKICAqIEBjZWxsX3ByZWFsbG9jLgpAQCAtNjgsNyArNzMsOCBAQAogCQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqY2VsbF9yZXN1bHQpOwogCiAvKgotICogQW4gYXRvbWljIG9wIHRoYXQgY29tYmluZXMgcmV0cmlldmluZyBhIGNlbGwsIGFuZCBhZGRpbmcgYSBiaW8gdG8gaXQuCisgKiBBbiBhdG9taWMgb3AgdGhhdCBjb21iaW5lcyByZXRyaWV2aW5nIG9yIGNyZWF0aW5nIGEgY2VsbCwgYW5kIGFkZGluZyBhCisgKiBiaW8gdG8gaXQuCiAgKgogICogUmV0dXJucyAxIGlmIHRoZSBjZWxsIHdhcyBhbHJlYWR5IGhlbGQsIDAgaWYgQGlubWF0ZSBpcyB0aGUgbmV3IGhvbGRlci4KICAqLwpAQCAtODcsNiArOTMsMTQgQEAKIHZvaWQgZG1fY2VsbF9lcnJvcihzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uLAogCQkgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsLCBpbnQgZXJyb3IpOwogCisvKgorICogVmlzaXRzIHRoZSBjZWxsIGFuZCB0aGVuIHJlbGVhc2VzLiAgR3VhcmFudGVlcyBubyBuZXcgaW5tYXRlcyBhcmUKKyAqIGluc2VydGVkIGJldHdlZW4gdGhlIHZpc2l0IGFuZCByZWxlYXNlLgorICovCit2b2lkIGRtX2NlbGxfdmlzaXRfcmVsZWFzZShzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uLAorCQkJICAgdm9pZCAoKnZpc2l0X2ZuKSh2b2lkICosIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKiksCisJCQkgICB2b2lkICpjb250ZXh0LCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tYnVmaW8uYyBiL2RyaXZlcnMvbWQvZG0tYnVmaW8uYwppbmRleCBhZmU3OTcxLi5jMzNiNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWJ1ZmlvLmMKKysrIGIvZHJpdmVycy9tZC9kbS1idWZpby5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Nocmlua2VyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAiYnVmaW8iCiAKQEAgLTM0LDEyICszNSwxNyBAQAogLyoKICAqIENoZWNrIGJ1ZmZlciBhZ2VzIGluIHRoaXMgaW50ZXJ2YWwgKHNlY29uZHMpCiAgKi8KLSNkZWZpbmUgRE1fQlVGSU9fV09SS19USU1FUl9TRUNTCTEwCisjZGVmaW5lIERNX0JVRklPX1dPUktfVElNRVJfU0VDUwkzMAogCiAvKgogICogRnJlZSBidWZmZXJzIHdoZW4gdGhleSBhcmUgb2xkZXIgdGhhbiB0aGlzIChzZWNvbmRzKQogICovCi0jZGVmaW5lIERNX0JVRklPX0RFRkFVTFRfQUdFX1NFQ1MJNjAKKyNkZWZpbmUgRE1fQlVGSU9fREVGQVVMVF9BR0VfU0VDUwkzMDAKKworLyoKKyAqIFRoZSBuciBvZiBieXRlcyBvZiBjYWNoZWQgZGF0YSB0byBrZWVwIGFyb3VuZC4KKyAqLworI2RlZmluZSBETV9CVUZJT19ERUZBVUxUX1JFVEFJTl9CWVRFUyAgICgyNTYgKiAxMDI0KQogCiAvKgogICogVGhlIG51bWJlciBvZiBidmVjIGVudHJpZXMgdGhhdCBhcmUgZW1iZWRkZWQgZGlyZWN0bHkgaW4gdGhlIGJ1ZmZlci4KQEAgLTQ4LDE0ICs1NCw2IEBACiAjZGVmaW5lIERNX0JVRklPX0lOTElORV9WRUNTCQkxNgogCiAvKgotICogQnVmZmVyIGhhc2gKLSAqLwotI2RlZmluZSBETV9CVUZJT19IQVNIX0JJVFMJMjAKLSNkZWZpbmUgRE1fQlVGSU9fSEFTSChibG9jaykgXAotCSgoKChibG9jaykgPj4gRE1fQlVGSU9fSEFTSF9CSVRTKSBeIChibG9jaykpICYgXAotCSAoKDEgPDwgRE1fQlVGSU9fSEFTSF9CSVRTKSAtIDEpKQotCi0vKgogICogRG9uJ3QgdHJ5IHRvIHVzZSBrbWVtX2NhY2hlX2FsbG9jIGZvciBibG9ja3MgbGFyZ2VyIHRoYW4gdGhpcy4KICAqIEZvciBleHBsYW5hdGlvbiwgc2VlIGFsbG9jX2J1ZmZlcl9kYXRhIGJlbG93LgogICovCkBAIC0xMDYsNyArMTA0LDcgQEAKIAogCXVuc2lnbmVkIG1pbmltdW1fYnVmZmVyczsKIAotCXN0cnVjdCBobGlzdF9oZWFkICpjYWNoZV9oYXNoOworCXN0cnVjdCByYl9yb290IGJ1ZmZlcl90cmVlOwogCXdhaXRfcXVldWVfaGVhZF90IGZyZWVfYnVmZmVyX3dhaXQ7CiAKIAlpbnQgYXN5bmNfd3JpdGVfZXJyb3I7CkBAIC0xMzUsNyArMTMzLDcgQEAKIH07CiAKIHN0cnVjdCBkbV9idWZmZXIgewotCXN0cnVjdCBobGlzdF9ub2RlIGhhc2hfbGlzdDsKKwlzdHJ1Y3QgcmJfbm9kZSBub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1X2xpc3Q7CiAJc2VjdG9yX3QgYmxvY2s7CiAJdm9pZCAqZGF0YTsKQEAgLTIyMyw2ICsyMjEsNyBAQAogICogQnVmZmVycyBhcmUgZnJlZWQgYWZ0ZXIgdGhpcyB0aW1lb3V0CiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBkbV9idWZpb19tYXhfYWdlID0gRE1fQlVGSU9fREVGQVVMVF9BR0VfU0VDUzsKK3N0YXRpYyB1bnNpZ25lZCBkbV9idWZpb19yZXRhaW5fYnl0ZXMgPSBETV9CVUZJT19ERUZBVUxUX1JFVEFJTl9CWVRFUzsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZG1fYnVmaW9fcGVha19hbGxvY2F0ZWQ7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkbV9idWZpb19hbGxvY2F0ZWRfa21lbV9jYWNoZTsKQEAgLTI1Myw2ICsyNTIsNTMgQEAKICAqLwogc3RhdGljIERFRklORV9NVVRFWChkbV9idWZpb19jbGllbnRzX2xvY2spOwogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEEgcmVkL2JsYWNrIHRyZWUgYWN0cyBhcyBhbiBpbmRleCBmb3IgYWxsIHRoZSBidWZmZXJzLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IGRtX2J1ZmZlciAqX19maW5kKHN0cnVjdCBkbV9idWZpb19jbGllbnQgKmMsIHNlY3Rvcl90IGJsb2NrKQoreworCXN0cnVjdCByYl9ub2RlICpuID0gYy0+YnVmZmVyX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgZG1fYnVmZmVyICpiOworCisJd2hpbGUgKG4pIHsKKwkJYiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZG1fYnVmZmVyLCBub2RlKTsKKworCQlpZiAoYi0+YmxvY2sgPT0gYmxvY2spCisJCQlyZXR1cm4gYjsKKworCQluID0gKGItPmJsb2NrIDwgYmxvY2spID8gbi0+cmJfbGVmdCA6IG4tPnJiX3JpZ2h0OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBfX2luc2VydChzdHJ1Y3QgZG1fYnVmaW9fY2xpZW50ICpjLCBzdHJ1Y3QgZG1fYnVmZmVyICpiKQoreworCXN0cnVjdCByYl9ub2RlICoqbmV3ID0gJmMtPmJ1ZmZlcl90cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBkbV9idWZmZXIgKmZvdW5kOworCisJd2hpbGUgKCpuZXcpIHsKKwkJZm91bmQgPSBjb250YWluZXJfb2YoKm5ldywgc3RydWN0IGRtX2J1ZmZlciwgbm9kZSk7CisKKwkJaWYgKGZvdW5kLT5ibG9jayA9PSBiLT5ibG9jaykgeworCQkJQlVHX09OKGZvdW5kICE9IGIpOworCQkJcmV0dXJuOworCQl9CisKKwkJcGFyZW50ID0gKm5ldzsKKwkJbmV3ID0gKGZvdW5kLT5ibG9jayA8IGItPmJsb2NrKSA/CisJCQkmKCgqbmV3KS0+cmJfbGVmdCkgOiAmKCgqbmV3KS0+cmJfcmlnaHQpOworCX0KKworCXJiX2xpbmtfbm9kZSgmYi0+bm9kZSwgcGFyZW50LCBuZXcpOworCXJiX2luc2VydF9jb2xvcigmYi0+bm9kZSwgJmMtPmJ1ZmZlcl90cmVlKTsKK30KKworc3RhdGljIHZvaWQgX19yZW1vdmUoc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYywgc3RydWN0IGRtX2J1ZmZlciAqYikKK3sKKwlyYl9lcmFzZSgmYi0+bm9kZSwgJmMtPmJ1ZmZlcl90cmVlKTsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQgYWRqdXN0X3RvdGFsX2FsbG9jYXRlZChlbnVtIGRhdGFfbW9kZSBkYXRhX21vZGUsIGxvbmcgZGlmZikKQEAgLTQzNCw3ICs0ODAsNyBAQAogCWItPmJsb2NrID0gYmxvY2s7CiAJYi0+bGlzdF9tb2RlID0gZGlydHk7CiAJbGlzdF9hZGQoJmItPmxydV9saXN0LCAmYy0+bHJ1W2RpcnR5XSk7Ci0JaGxpc3RfYWRkX2hlYWQoJmItPmhhc2hfbGlzdCwgJmMtPmNhY2hlX2hhc2hbRE1fQlVGSU9fSEFTSChibG9jayldKTsKKwlfX2luc2VydChiLT5jLCBiKTsKIAliLT5sYXN0X2FjY2Vzc2VkID0gamlmZmllczsKIH0KIApAQCAtNDQ4LDcgKzQ5NCw3IEBACiAJQlVHX09OKCFjLT5uX2J1ZmZlcnNbYi0+bGlzdF9tb2RlXSk7CiAKIAljLT5uX2J1ZmZlcnNbYi0+bGlzdF9tb2RlXS0tOwotCWhsaXN0X2RlbCgmYi0+aGFzaF9saXN0KTsKKwlfX3JlbW92ZShiLT5jLCBiKTsKIAlsaXN0X2RlbCgmYi0+bHJ1X2xpc3QpOwogfQogCkBAIC01MzIsNiArNTc4LDE5IEBACiAJCWVuZF9pbygmYi0+YmlvLCByKTsKIH0KIAorc3RhdGljIHZvaWQgaW5saW5lX2VuZGlvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycm9yKQoreworCWJpb19lbmRfaW9fdCAqZW5kX2ZuID0gYmlvLT5iaV9wcml2YXRlOworCisJLyoKKwkgKiBSZXNldCB0aGUgYmlvIHRvIGZyZWUgYW55IGF0dGFjaGVkIHJlc291cmNlcworCSAqIChlLmcuIGJpbyBpbnRlZ3JpdHkgcHJvZmlsZXMpLgorCSAqLworCWJpb19yZXNldChiaW8pOworCisJZW5kX2ZuKGJpbywgZXJyb3IpOworfQorCiBzdGF0aWMgdm9pZCB1c2VfaW5saW5lX2JpbyhzdHJ1Y3QgZG1fYnVmZmVyICpiLCBpbnQgcncsIHNlY3Rvcl90IGJsb2NrLAogCQkJICAgYmlvX2VuZF9pb190ICplbmRfaW8pCiB7CkBAIC01NDMsNyArNjAyLDEyIEBACiAJYi0+YmlvLmJpX21heF92ZWNzID0gRE1fQlVGSU9fSU5MSU5FX1ZFQ1M7CiAJYi0+YmlvLmJpX2l0ZXIuYmlfc2VjdG9yID0gYmxvY2sgPDwgYi0+Yy0+c2VjdG9yc19wZXJfYmxvY2tfYml0czsKIAliLT5iaW8uYmlfYmRldiA9IGItPmMtPmJkZXY7Ci0JYi0+YmlvLmJpX2VuZF9pbyA9IGVuZF9pbzsKKwliLT5iaW8uYmlfZW5kX2lvID0gaW5saW5lX2VuZGlvOworCS8qCisJICogVXNlIG9mIC5iaV9wcml2YXRlIGlzbid0IGEgcHJvYmxlbSBoZXJlIGJlY2F1c2UKKwkgKiB0aGUgZG1fYnVmZmVyJ3MgaW5saW5lIGJpbyBpcyBsb2NhbCB0byBidWZpby4KKwkgKi8KKwliLT5iaW8uYmlfcHJpdmF0ZSA9IGVuZF9pbzsKIAogCS8qCiAJICogV2UgYXNzdW1lIHRoYXQgaWYgbGVuID49IFBBR0VfU0laRSBwdHIgaXMgcGFnZS1hbGlnbmVkLgpAQCAtODg3LDIzICs5NTEsNiBAQAogCQlfX3dyaXRlX2RpcnR5X2J1ZmZlcnNfYXN5bmMoYywgMSwgd3JpdGVfbGlzdCk7CiB9CiAKLS8qCi0gKiBGaW5kIGEgYnVmZmVyIGluIHRoZSBoYXNoLgotICovCi1zdGF0aWMgc3RydWN0IGRtX2J1ZmZlciAqX19maW5kKHN0cnVjdCBkbV9idWZpb19jbGllbnQgKmMsIHNlY3Rvcl90IGJsb2NrKQotewotCXN0cnVjdCBkbV9idWZmZXIgKmI7Ci0KLQlobGlzdF9mb3JfZWFjaF9lbnRyeShiLCAmYy0+Y2FjaGVfaGFzaFtETV9CVUZJT19IQVNIKGJsb2NrKV0sCi0JCQkgICAgIGhhc2hfbGlzdCkgewotCQlkbV9idWZpb19jb25kX3Jlc2NoZWQoKTsKLQkJaWYgKGItPmJsb2NrID09IGJsb2NrKQotCQkJcmV0dXJuIGI7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogR2V0dGluZyBhIGJ1ZmZlcgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDMzLDQ1ICsxNDgwLDUyIEBACiB9CiAKIC8qCi0gKiBUZXN0IGlmIHRoZSBidWZmZXIgaXMgdW51c2VkIGFuZCB0b28gb2xkLCBhbmQgY29tbWl0IGl0LgorICogV2UgbWF5IG5vdCBiZSBhYmxlIHRvIGV2aWN0IHRoaXMgYnVmZmVyIGlmIElPIHBlbmRpbmcgb3IgdGhlIGNsaWVudAorICogaXMgc3RpbGwgdXNpbmcgaXQuICBDYWxsZXIgaXMgZXhwZWN0ZWQgdG8ga25vdyBidWZmZXIgaXMgdG9vIG9sZC4KKyAqCiAgKiBBbmQgaWYgR0ZQX05PRlMgaXMgdXNlZCwgd2UgbXVzdCBub3QgZG8gYW55IEkvTyBiZWNhdXNlIHdlIGhvbGQKICAqIGRtX2J1ZmlvX2NsaWVudHNfbG9jayBhbmQgd2Ugd291bGQgcmlzayBkZWFkbG9jayBpZiB0aGUgSS9PIGdldHMKICAqIHJlcm91dGVkIHRvIGRpZmZlcmVudCBidWZpbyBjbGllbnQuCiAgKi8KLXN0YXRpYyBpbnQgX19jbGVhbnVwX29sZF9idWZmZXIoc3RydWN0IGRtX2J1ZmZlciAqYiwgZ2ZwX3QgZ2ZwLAotCQkJCXVuc2lnbmVkIGxvbmcgbWF4X2ppZmZpZXMpCitzdGF0aWMgYm9vbCBfX3RyeV9ldmljdF9idWZmZXIoc3RydWN0IGRtX2J1ZmZlciAqYiwgZ2ZwX3QgZ2ZwKQogewotCWlmIChqaWZmaWVzIC0gYi0+bGFzdF9hY2Nlc3NlZCA8IG1heF9qaWZmaWVzKQotCQlyZXR1cm4gMDsKLQogCWlmICghKGdmcCAmIF9fR0ZQX0ZTKSkgewogCQlpZiAodGVzdF9iaXQoQl9SRUFESU5HLCAmYi0+c3RhdGUpIHx8CiAJCSAgICB0ZXN0X2JpdChCX1dSSVRJTkcsICZiLT5zdGF0ZSkgfHwKIAkJICAgIHRlc3RfYml0KEJfRElSVFksICZiLT5zdGF0ZSkpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlpZiAoYi0+aG9sZF9jb3VudCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCV9fbWFrZV9idWZmZXJfY2xlYW4oYik7CiAJX191bmxpbmtfYnVmZmVyKGIpOwogCV9fZnJlZV9idWZmZXJfd2FrZShiKTsKIAotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgbG9uZyBfX3NjYW4oc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYywgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLAotCQkgICBnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyB1bnNpZ25lZCBnZXRfcmV0YWluX2J1ZmZlcnMoc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYykKK3sKKyAgICAgICAgdW5zaWduZWQgcmV0YWluX2J5dGVzID0gQUNDRVNTX09OQ0UoZG1fYnVmaW9fcmV0YWluX2J5dGVzKTsKKyAgICAgICAgcmV0dXJuIHJldGFpbl9ieXRlcyAvIGMtPmJsb2NrX3NpemU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fc2NhbihzdHJ1Y3QgZG1fYnVmaW9fY2xpZW50ICpjLCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCisJCQkgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaW50IGw7CiAJc3RydWN0IGRtX2J1ZmZlciAqYiwgKnRtcDsKLQlsb25nIGZyZWVkID0gMDsKKwl1bnNpZ25lZCBsb25nIGZyZWVkID0gMDsKKwl1bnNpZ25lZCBsb25nIGNvdW50ID0gbnJfdG9fc2NhbjsKKwl1bnNpZ25lZCByZXRhaW5fdGFyZ2V0ID0gZ2V0X3JldGFpbl9idWZmZXJzKGMpOwogCiAJZm9yIChsID0gMDsgbCA8IExJU1RfU0laRTsgbCsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGIsIHRtcCwgJmMtPmxydVtsXSwgbHJ1X2xpc3QpIHsKLQkJCWZyZWVkICs9IF9fY2xlYW51cF9vbGRfYnVmZmVyKGIsIGdmcF9tYXNrLCAwKTsKLQkJCWlmICghLS1ucl90b19zY2FuKQorCQkJaWYgKF9fdHJ5X2V2aWN0X2J1ZmZlcihiLCBnZnBfbWFzaykpCisJCQkJZnJlZWQrKzsKKwkJCWlmICghLS1ucl90b19zY2FuIHx8ICgoY291bnQgLSBmcmVlZCkgPD0gcmV0YWluX3RhcmdldCkpCiAJCQkJcmV0dXJuIGZyZWVkOwogCQkJZG1fYnVmaW9fY29uZF9yZXNjaGVkKCk7CiAJCX0KQEAgLTE1MzMsMTEgKzE1ODcsNyBAQAogCQlyID0gLUVOT01FTTsKIAkJZ290byBiYWRfY2xpZW50OwogCX0KLQljLT5jYWNoZV9oYXNoID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpIDw8IERNX0JVRklPX0hBU0hfQklUUyk7Ci0JaWYgKCFjLT5jYWNoZV9oYXNoKSB7Ci0JCXIgPSAtRU5PTUVNOwotCQlnb3RvIGJhZF9oYXNoOwotCX0KKwljLT5idWZmZXJfdHJlZSA9IFJCX1JPT1Q7CiAKIAljLT5iZGV2ID0gYmRldjsKIAljLT5ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKQEAgLTE1NTYsOSArMTYwNiw2IEBACiAJCWMtPm5fYnVmZmVyc1tpXSA9IDA7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IDEgPDwgRE1fQlVGSU9fSEFTSF9CSVRTOyBpKyspCi0JCUlOSVRfSExJU1RfSEVBRCgmYy0+Y2FjaGVfaGFzaFtpXSk7Ci0KIAltdXRleF9pbml0KCZjLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYy0+cmVzZXJ2ZWRfYnVmZmVycyk7CiAJYy0+bmVlZF9yZXNlcnZlZF9idWZmZXJzID0gcmVzZXJ2ZWRfYnVmZmVyczsKQEAgLTE2MzIsOCArMTY3OSw2IEBACiAJfQogCWRtX2lvX2NsaWVudF9kZXN0cm95KGMtPmRtX2lvKTsKIGJhZF9kbV9pbzoKLQl2ZnJlZShjLT5jYWNoZV9oYXNoKTsKLWJhZF9oYXNoOgogCWtmcmVlKGMpOwogYmFkX2NsaWVudDoKIAlyZXR1cm4gRVJSX1BUUihyKTsKQEAgLTE2NjAsOSArMTcwNSw3IEBACiAKIAltdXRleF91bmxvY2soJmRtX2J1ZmlvX2NsaWVudHNfbG9jayk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMSA8PCBETV9CVUZJT19IQVNIX0JJVFM7IGkrKykKLQkJQlVHX09OKCFobGlzdF9lbXB0eSgmYy0+Y2FjaGVfaGFzaFtpXSkpOwotCisJQlVHX09OKCFSQl9FTVBUWV9ST09UKCZjLT5idWZmZXJfdHJlZSkpOwogCUJVR19PTihjLT5uZWVkX3Jlc2VydmVkX2J1ZmZlcnMpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZjLT5yZXNlcnZlZF9idWZmZXJzKSkgewpAQCAtMTY4MCwzNiArMTcyMyw2MCBAQAogCQlCVUdfT04oYy0+bl9idWZmZXJzW2ldKTsKIAogCWRtX2lvX2NsaWVudF9kZXN0cm95KGMtPmRtX2lvKTsKLQl2ZnJlZShjLT5jYWNoZV9oYXNoKTsKIAlrZnJlZShjKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX2J1ZmlvX2NsaWVudF9kZXN0cm95KTsKIAotc3RhdGljIHZvaWQgY2xlYW51cF9vbGRfYnVmZmVycyh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGdldF9tYXhfYWdlX2h6KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXhfYWdlID0gQUNDRVNTX09OQ0UoZG1fYnVmaW9fbWF4X2FnZSk7Ci0Jc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYzsKKwl1bnNpZ25lZCBtYXhfYWdlID0gQUNDRVNTX09OQ0UoZG1fYnVmaW9fbWF4X2FnZSk7CiAKLQlpZiAobWF4X2FnZSA+IFVMT05HX01BWCAvIEhaKQotCQltYXhfYWdlID0gVUxPTkdfTUFYIC8gSFo7CisJaWYgKG1heF9hZ2UgPiBVSU5UX01BWCAvIEhaKQorCQltYXhfYWdlID0gVUlOVF9NQVggLyBIWjsKIAotCW11dGV4X2xvY2soJmRtX2J1ZmlvX2NsaWVudHNfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmZG1fYnVmaW9fYWxsX2NsaWVudHMsIGNsaWVudF9saXN0KSB7Ci0JCWlmICghZG1fYnVmaW9fdHJ5bG9jayhjKSkKLQkJCWNvbnRpbnVlOworCXJldHVybiBtYXhfYWdlICogSFo7Cit9CiAKLQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZjLT5scnVbTElTVF9DTEVBTl0pKSB7Ci0JCQlzdHJ1Y3QgZG1fYnVmZmVyICpiOwotCQkJYiA9IGxpc3RfZW50cnkoYy0+bHJ1W0xJU1RfQ0xFQU5dLnByZXYsCi0JCQkJICAgICAgIHN0cnVjdCBkbV9idWZmZXIsIGxydV9saXN0KTsKLQkJCWlmICghX19jbGVhbnVwX29sZF9idWZmZXIoYiwgMCwgbWF4X2FnZSAqIEhaKSkKLQkJCQlicmVhazsKLQkJCWRtX2J1ZmlvX2NvbmRfcmVzY2hlZCgpOwotCQl9CitzdGF0aWMgYm9vbCBvbGRlcl90aGFuKHN0cnVjdCBkbV9idWZmZXIgKmIsIHVuc2lnbmVkIGxvbmcgYWdlX2h6KQoreworCXJldHVybiAoamlmZmllcyAtIGItPmxhc3RfYWNjZXNzZWQpID49IGFnZV9oejsKK30KIAotCQlkbV9idWZpb191bmxvY2soYyk7CitzdGF0aWMgdm9pZCBfX2V2aWN0X29sZF9idWZmZXJzKHN0cnVjdCBkbV9idWZpb19jbGllbnQgKmMsIHVuc2lnbmVkIGxvbmcgYWdlX2h6KQoreworCXN0cnVjdCBkbV9idWZmZXIgKmIsICp0bXA7CisJdW5zaWduZWQgcmV0YWluX3RhcmdldCA9IGdldF9yZXRhaW5fYnVmZmVycyhjKTsKKwl1bnNpZ25lZCBjb3VudDsKKworCWRtX2J1ZmlvX2xvY2soYyk7CisKKwljb3VudCA9IGMtPm5fYnVmZmVyc1tMSVNUX0NMRUFOXSArIGMtPm5fYnVmZmVyc1tMSVNUX0RJUlRZXTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShiLCB0bXAsICZjLT5scnVbTElTVF9DTEVBTl0sIGxydV9saXN0KSB7CisJCWlmIChjb3VudCA8PSByZXRhaW5fdGFyZ2V0KQorCQkJYnJlYWs7CisKKwkJaWYgKCFvbGRlcl90aGFuKGIsIGFnZV9oeikpCisJCQlicmVhazsKKworCQlpZiAoX190cnlfZXZpY3RfYnVmZmVyKGIsIDApKQorCQkJY291bnQtLTsKKwogCQlkbV9idWZpb19jb25kX3Jlc2NoZWQoKTsKIAl9CisKKwlkbV9idWZpb191bmxvY2soYyk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfb2xkX2J1ZmZlcnModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1heF9hZ2VfaHogPSBnZXRfbWF4X2FnZV9oeigpOworCXN0cnVjdCBkbV9idWZpb19jbGllbnQgKmM7CisKKwltdXRleF9sb2NrKCZkbV9idWZpb19jbGllbnRzX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmZG1fYnVmaW9fYWxsX2NsaWVudHMsIGNsaWVudF9saXN0KQorCQlfX2V2aWN0X29sZF9idWZmZXJzKGMsIG1heF9hZ2VfaHopOworCiAJbXV0ZXhfdW5sb2NrKCZkbV9idWZpb19jbGllbnRzX2xvY2spOwogfQogCkBAIC0xODM0LDYgKzE5MDEsOSBAQAogbW9kdWxlX3BhcmFtX25hbWVkKG1heF9hZ2Vfc2Vjb25kcywgZG1fYnVmaW9fbWF4X2FnZSwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfYWdlX3NlY29uZHMsICJNYXggYWdlIG9mIGEgYnVmZmVyIGluIHNlY29uZHMiKTsKIAorbW9kdWxlX3BhcmFtX25hbWVkKHJldGFpbl9ieXRlcywgZG1fYnVmaW9fcmV0YWluX2J5dGVzLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHJldGFpbl9ieXRlcywgIlRyeSB0byBrZWVwIGF0IGxlYXN0IHRoaXMgbWFueSBieXRlcyBjYWNoZWQgaW4gbWVtb3J5Iik7CisKIG1vZHVsZV9wYXJhbV9uYW1lZChwZWFrX2FsbG9jYXRlZF9ieXRlcywgZG1fYnVmaW9fcGVha19hbGxvY2F0ZWQsIHVsb25nLCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHBlYWtfYWxsb2NhdGVkX2J5dGVzLCAiVHJhY2tzIHRoZSBtYXhpbXVtIGFsbG9jYXRlZCBtZW1vcnkiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jYWNoZS1ibG9jay10eXBlcy5oIGIvZHJpdmVycy9tZC9kbS1jYWNoZS1ibG9jay10eXBlcy5oCmluZGV4IGFhYzBlMmQuLmJlZDRhZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY2FjaGUtYmxvY2stdHlwZXMuaAorKysgYi9kcml2ZXJzL21kL2RtLWNhY2hlLWJsb2NrLXR5cGVzLmgKQEAgLTE5LDYgKzE5LDcgQEAKIAogdHlwZWRlZiBkbV9ibG9ja190IF9fYml0d2lzZV9fIGRtX29ibG9ja190OwogdHlwZWRlZiB1aW50MzJfdCBfX2JpdHdpc2VfXyBkbV9jYmxvY2tfdDsKK3R5cGVkZWYgZG1fYmxvY2tfdCBfX2JpdHdpc2VfXyBkbV9kYmxvY2tfdDsKIAogc3RhdGljIGlubGluZSBkbV9vYmxvY2tfdCB0b19vYmxvY2soZG1fYmxvY2tfdCBiKQogewpAQCAtNDAsNCArNDEsMTQgQEAKIAlyZXR1cm4gKF9fZm9yY2UgdWludDMyX3QpIGI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgZG1fZGJsb2NrX3QgdG9fZGJsb2NrKGRtX2Jsb2NrX3QgYikKK3sKKwlyZXR1cm4gKF9fZm9yY2UgZG1fZGJsb2NrX3QpIGI7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1fYmxvY2tfdCBmcm9tX2RibG9jayhkbV9kYmxvY2tfdCBiKQoreworCXJldHVybiAoX19mb3JjZSBkbV9ibG9ja190KSBiOworfQorCiAjZW5kaWYgLyogRE1fQ0FDSEVfQkxPQ0tfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5jIGIvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5jCmluZGV4IDA2NzA5MjUuLjlmYzYxNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY2FjaGUtbWV0YWRhdGEuYworKysgYi9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCWRtX2Jsb2NrX3QgZGlzY2FyZF9yb290OwogCiAJc2VjdG9yX3QgZGlzY2FyZF9ibG9ja19zaXplOwotCWRtX29ibG9ja190IGRpc2NhcmRfbnJfYmxvY2tzOworCWRtX2RibG9ja190IGRpc2NhcmRfbnJfYmxvY2tzOwogCiAJc2VjdG9yX3QgZGF0YV9ibG9ja19zaXplOwogCWRtX2NibG9ja190IGNhY2hlX2Jsb2NrczsKQEAgLTMyOSw3ICszMjksNyBAQAogCWRpc2tfc3VwZXItPmhpbnRfcm9vdCA9IGNwdV90b19sZTY0KGNtZC0+aGludF9yb290KTsKIAlkaXNrX3N1cGVyLT5kaXNjYXJkX3Jvb3QgPSBjcHVfdG9fbGU2NChjbWQtPmRpc2NhcmRfcm9vdCk7CiAJZGlza19zdXBlci0+ZGlzY2FyZF9ibG9ja19zaXplID0gY3B1X3RvX2xlNjQoY21kLT5kaXNjYXJkX2Jsb2NrX3NpemUpOwotCWRpc2tfc3VwZXItPmRpc2NhcmRfbnJfYmxvY2tzID0gY3B1X3RvX2xlNjQoZnJvbV9vYmxvY2soY21kLT5kaXNjYXJkX25yX2Jsb2NrcykpOworCWRpc2tfc3VwZXItPmRpc2NhcmRfbnJfYmxvY2tzID0gY3B1X3RvX2xlNjQoZnJvbV9kYmxvY2soY21kLT5kaXNjYXJkX25yX2Jsb2NrcykpOwogCWRpc2tfc3VwZXItPm1ldGFkYXRhX2Jsb2NrX3NpemUgPSBjcHVfdG9fbGUzMihETV9DQUNIRV9NRVRBREFUQV9CTE9DS19TSVpFKTsKIAlkaXNrX3N1cGVyLT5kYXRhX2Jsb2NrX3NpemUgPSBjcHVfdG9fbGUzMihjbWQtPmRhdGFfYmxvY2tfc2l6ZSk7CiAJZGlza19zdXBlci0+Y2FjaGVfYmxvY2tzID0gY3B1X3RvX2xlMzIoMCk7CkBAIC01MjgsNyArNTI4LDcgQEAKIAljbWQtPmhpbnRfcm9vdCA9IGxlNjRfdG9fY3B1KGRpc2tfc3VwZXItPmhpbnRfcm9vdCk7CiAJY21kLT5kaXNjYXJkX3Jvb3QgPSBsZTY0X3RvX2NwdShkaXNrX3N1cGVyLT5kaXNjYXJkX3Jvb3QpOwogCWNtZC0+ZGlzY2FyZF9ibG9ja19zaXplID0gbGU2NF90b19jcHUoZGlza19zdXBlci0+ZGlzY2FyZF9ibG9ja19zaXplKTsKLQljbWQtPmRpc2NhcmRfbnJfYmxvY2tzID0gdG9fb2Jsb2NrKGxlNjRfdG9fY3B1KGRpc2tfc3VwZXItPmRpc2NhcmRfbnJfYmxvY2tzKSk7CisJY21kLT5kaXNjYXJkX25yX2Jsb2NrcyA9IHRvX2RibG9jayhsZTY0X3RvX2NwdShkaXNrX3N1cGVyLT5kaXNjYXJkX25yX2Jsb2NrcykpOwogCWNtZC0+ZGF0YV9ibG9ja19zaXplID0gbGUzMl90b19jcHUoZGlza19zdXBlci0+ZGF0YV9ibG9ja19zaXplKTsKIAljbWQtPmNhY2hlX2Jsb2NrcyA9IHRvX2NibG9jayhsZTMyX3RvX2NwdShkaXNrX3N1cGVyLT5jYWNoZV9ibG9ja3MpKTsKIAlzdHJuY3B5KGNtZC0+cG9saWN5X25hbWUsIGRpc2tfc3VwZXItPnBvbGljeV9uYW1lLCBzaXplb2YoY21kLT5wb2xpY3lfbmFtZSkpOwpAQCAtNjI2LDcgKzYyNiw3IEBACiAJZGlza19zdXBlci0+aGludF9yb290ID0gY3B1X3RvX2xlNjQoY21kLT5oaW50X3Jvb3QpOwogCWRpc2tfc3VwZXItPmRpc2NhcmRfcm9vdCA9IGNwdV90b19sZTY0KGNtZC0+ZGlzY2FyZF9yb290KTsKIAlkaXNrX3N1cGVyLT5kaXNjYXJkX2Jsb2NrX3NpemUgPSBjcHVfdG9fbGU2NChjbWQtPmRpc2NhcmRfYmxvY2tfc2l6ZSk7Ci0JZGlza19zdXBlci0+ZGlzY2FyZF9ucl9ibG9ja3MgPSBjcHVfdG9fbGU2NChmcm9tX29ibG9jayhjbWQtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CisJZGlza19zdXBlci0+ZGlzY2FyZF9ucl9ibG9ja3MgPSBjcHVfdG9fbGU2NChmcm9tX2RibG9jayhjbWQtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CiAJZGlza19zdXBlci0+Y2FjaGVfYmxvY2tzID0gY3B1X3RvX2xlMzIoZnJvbV9jYmxvY2soY21kLT5jYWNoZV9ibG9ja3MpKTsKIAlzdHJuY3B5KGRpc2tfc3VwZXItPnBvbGljeV9uYW1lLCBjbWQtPnBvbGljeV9uYW1lLCBzaXplb2YoZGlza19zdXBlci0+cG9saWN5X25hbWUpKTsKIAlkaXNrX3N1cGVyLT5wb2xpY3lfdmVyc2lvblswXSA9IGNwdV90b19sZTMyKGNtZC0+cG9saWN5X3ZlcnNpb25bMF0pOwpAQCAtNzk3LDE1ICs3OTcsMTUgQEAKIAogaW50IGRtX2NhY2hlX2Rpc2NhcmRfYml0c2V0X3Jlc2l6ZShzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwKIAkJCQkgICBzZWN0b3JfdCBkaXNjYXJkX2Jsb2NrX3NpemUsCi0JCQkJICAgZG1fb2Jsb2NrX3QgbmV3X25yX2VudHJpZXMpCisJCQkJICAgZG1fZGJsb2NrX3QgbmV3X25yX2VudHJpZXMpCiB7CiAJaW50IHI7CiAKIAlkb3duX3dyaXRlKCZjbWQtPnJvb3RfbG9jayk7CiAJciA9IGRtX2JpdHNldF9yZXNpemUoJmNtZC0+ZGlzY2FyZF9pbmZvLAogCQkJICAgICBjbWQtPmRpc2NhcmRfcm9vdCwKLQkJCSAgICAgZnJvbV9vYmxvY2soY21kLT5kaXNjYXJkX25yX2Jsb2NrcyksCi0JCQkgICAgIGZyb21fb2Jsb2NrKG5ld19ucl9lbnRyaWVzKSwKKwkJCSAgICAgZnJvbV9kYmxvY2soY21kLT5kaXNjYXJkX25yX2Jsb2NrcyksCisJCQkgICAgIGZyb21fZGJsb2NrKG5ld19ucl9lbnRyaWVzKSwKIAkJCSAgICAgZmFsc2UsICZjbWQtPmRpc2NhcmRfcm9vdCk7CiAJaWYgKCFyKSB7CiAJCWNtZC0+ZGlzY2FyZF9ibG9ja19zaXplID0gZGlzY2FyZF9ibG9ja19zaXplOwpAQCAtODE4LDI4ICs4MTgsMjggQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIGludCBfX3NldF9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9vYmxvY2tfdCBiKQorc3RhdGljIGludCBfX3NldF9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9kYmxvY2tfdCBiKQogewogCXJldHVybiBkbV9iaXRzZXRfc2V0X2JpdCgmY21kLT5kaXNjYXJkX2luZm8sIGNtZC0+ZGlzY2FyZF9yb290LAotCQkJCSBmcm9tX29ibG9jayhiKSwgJmNtZC0+ZGlzY2FyZF9yb290KTsKKwkJCQkgZnJvbV9kYmxvY2soYiksICZjbWQtPmRpc2NhcmRfcm9vdCk7CiB9CiAKLXN0YXRpYyBpbnQgX19jbGVhcl9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9vYmxvY2tfdCBiKQorc3RhdGljIGludCBfX2NsZWFyX2Rpc2NhcmQoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsIGRtX2RibG9ja190IGIpCiB7CiAJcmV0dXJuIGRtX2JpdHNldF9jbGVhcl9iaXQoJmNtZC0+ZGlzY2FyZF9pbmZvLCBjbWQtPmRpc2NhcmRfcm9vdCwKLQkJCQkgICBmcm9tX29ibG9jayhiKSwgJmNtZC0+ZGlzY2FyZF9yb290KTsKKwkJCQkgICBmcm9tX2RibG9jayhiKSwgJmNtZC0+ZGlzY2FyZF9yb290KTsKIH0KIAotc3RhdGljIGludCBfX2lzX2Rpc2NhcmRlZChzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwgZG1fb2Jsb2NrX3QgYiwKK3N0YXRpYyBpbnQgX19pc19kaXNjYXJkZWQoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsIGRtX2RibG9ja190IGIsCiAJCQkgIGJvb2wgKmlzX2Rpc2NhcmRlZCkKIHsKIAlyZXR1cm4gZG1fYml0c2V0X3Rlc3RfYml0KCZjbWQtPmRpc2NhcmRfaW5mbywgY21kLT5kaXNjYXJkX3Jvb3QsCi0JCQkJICBmcm9tX29ibG9jayhiKSwgJmNtZC0+ZGlzY2FyZF9yb290LAorCQkJCSAgZnJvbV9kYmxvY2soYiksICZjbWQtPmRpc2NhcmRfcm9vdCwKIAkJCQkgIGlzX2Rpc2NhcmRlZCk7CiB9CiAKIHN0YXRpYyBpbnQgX19kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLAotCQkgICAgIGRtX29ibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKQorCQkgICAgIGRtX2RibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKQogewogCWludCByOwogCkBAIC04NTIsNyArODUyLDcgQEAKIH0KIAogaW50IGRtX2NhY2hlX3NldF9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLAotCQkJIGRtX29ibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKQorCQkJIGRtX2RibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKQogewogCWludCByOwogCkBAIC04NzAsOCArODcwLDggQEAKIAlkbV9ibG9ja190IGI7CiAJYm9vbCBkaXNjYXJkOwogCi0JZm9yIChiID0gMDsgYiA8IGZyb21fb2Jsb2NrKGNtZC0+ZGlzY2FyZF9ucl9ibG9ja3MpOyBiKyspIHsKLQkJZG1fb2Jsb2NrX3QgZGJsb2NrID0gdG9fb2Jsb2NrKGIpOworCWZvciAoYiA9IDA7IGIgPCBmcm9tX2RibG9jayhjbWQtPmRpc2NhcmRfbnJfYmxvY2tzKTsgYisrKSB7CisJCWRtX2RibG9ja190IGRibG9jayA9IHRvX2RibG9jayhiKTsKIAogCQlpZiAoY21kLT5jbGVhbl93aGVuX29wZW5lZCkgewogCQkJciA9IF9faXNfZGlzY2FyZGVkKGNtZCwgZGJsb2NrLCAmZGlzY2FyZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmggYi9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmgKaW5kZXggNzM4M2M5MC4uNGVjYzQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5oCisrKyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtbWV0YWRhdGEuaApAQCAtNzAsMTQgKzcwLDE0IEBACiAKIGludCBkbV9jYWNoZV9kaXNjYXJkX2JpdHNldF9yZXNpemUoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsCiAJCQkJICAgc2VjdG9yX3QgZGlzY2FyZF9ibG9ja19zaXplLAotCQkJCSAgIGRtX29ibG9ja190IG5ld19ucl9lbnRyaWVzKTsKKwkJCQkgICBkbV9kYmxvY2tfdCBuZXdfbnJfZW50cmllcyk7CiAKIHR5cGVkZWYgaW50ICgqbG9hZF9kaXNjYXJkX2ZuKSh2b2lkICpjb250ZXh0LCBzZWN0b3JfdCBkaXNjYXJkX2Jsb2NrX3NpemUsCi0JCQkgICAgICAgZG1fb2Jsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmRlZCk7CisJCQkgICAgICAgZG1fZGJsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmRlZCk7CiBpbnQgZG1fY2FjaGVfbG9hZF9kaXNjYXJkcyhzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwKIAkJCSAgIGxvYWRfZGlzY2FyZF9mbiBmbiwgdm9pZCAqY29udGV4dCk7CiAKLWludCBkbV9jYWNoZV9zZXRfZGlzY2FyZChzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwgZG1fb2Jsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmQpOworaW50IGRtX2NhY2hlX3NldF9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9kYmxvY2tfdCBkYmxvY2ssIGJvb2wgZGlzY2FyZCk7CiAKIGludCBkbV9jYWNoZV9yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwgZG1fY2Jsb2NrX3QgY2Jsb2NrKTsKIGludCBkbV9jYWNoZV9pbnNlcnRfbWFwcGluZyhzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwgZG1fY2Jsb2NrX3QgY2Jsb2NrLCBkbV9vYmxvY2tfdCBvYmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jYWNoZS1wb2xpY3ktbXEuYyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtcG9saWN5LW1xLmMKaW5kZXggMGUzODVlNC4uMTNmNTQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jYWNoZS1wb2xpY3ktbXEuYworKysgYi9kcml2ZXJzL21kL2RtLWNhY2hlLXBvbGljeS1tcS5jCkBAIC0xODEsMjYgKzE4MSwzMiBAQAogICogR2l2ZXMgdXMgdGhlIG9sZGVzdCBlbnRyeSBvZiB0aGUgbG93ZXN0IHBvcG91bGF0ZWQgbGV2ZWwuICBJZiB0aGUgZmlyc3QKICAqIGxldmVsIGlzIGVtcHRpZWQgdGhlbiB3ZSBzaGlmdCBkb3duIG9uZSBsZXZlbC4KICAqLwotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKnF1ZXVlX3BvcChzdHJ1Y3QgcXVldWUgKnEpCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqcXVldWVfcGVlayhzdHJ1Y3QgcXVldWUgKnEpCiB7CiAJdW5zaWduZWQgbGV2ZWw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcjsKIAogCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IE5SX1FVRVVFX0xFVkVMUzsgbGV2ZWwrKykKLQkJaWYgKCFsaXN0X2VtcHR5KHEtPnFzICsgbGV2ZWwpKSB7Ci0JCQlyID0gcS0+cXNbbGV2ZWxdLm5leHQ7Ci0JCQlsaXN0X2RlbChyKTsKLQotCQkJLyogaGF2ZSB3ZSBqdXN0IGVtcHRpZWQgdGhlIGJvdHRvbSBsZXZlbD8gKi8KLQkJCWlmIChsZXZlbCA9PSAwICYmIGxpc3RfZW1wdHkocS0+cXMpKQotCQkJCXF1ZXVlX3NoaWZ0X2Rvd24ocSk7Ci0KLQkJCXJldHVybiByOwotCQl9CisJCWlmICghbGlzdF9lbXB0eShxLT5xcyArIGxldmVsKSkKKwkJCXJldHVybiBxLT5xc1tsZXZlbF0ubmV4dDsKIAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqcXVldWVfcG9wKHN0cnVjdCBxdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyID0gcXVldWVfcGVlayhxKTsKKworCWlmIChyKSB7CisJCWxpc3RfZGVsKHIpOworCisJCS8qIGhhdmUgd2UganVzdCBlbXB0aWVkIHRoZSBib3R0b20gbGV2ZWw/ICovCisJCWlmIChsaXN0X2VtcHR5KHEtPnFzKSkKKwkJCXF1ZXVlX3NoaWZ0X2Rvd24ocSk7CisJfQorCisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3BvcChzdHJ1Y3QgbGlzdF9oZWFkICpsaCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpyID0gbGgtPm5leHQ7CkBAIC0zODMsMTMgKzM4OSw2IEBACiAJdW5zaWduZWQgZ2VuZXJhdGlvbjsKIAl1bnNpZ25lZCBnZW5lcmF0aW9uX3BlcmlvZDsgLyogaW4gbG9va3VwcyAod2lsbCBwcm9iYWJseSBjaGFuZ2UpICovCiAKLQkvKgotCSAqIEVudHJpZXMgaW4gdGhlIHByZV9jYWNoZSB3aG9zZSBoaXQgY291bnQgcGFzc2VzIHRoZSBwcm9tb3Rpb24KLQkgKiB0aHJlc2hvbGQgbW92ZSB0byB0aGUgY2FjaGUgcHJvcGVyLiAgV29ya2luZyBvdXQgdGhlIGNvcnJlY3QKLQkgKiB2YWx1ZSBmb3IgdGhlIHByb21vdGlvbl90aHJlc2hvbGQgaXMgY3J1Y2lhbCB0byB0aGlzIHBvbGljeS4KLQkgKi8KLQl1bnNpZ25lZCBwcm9tb3RlX3RocmVzaG9sZDsKLQogCXVuc2lnbmVkIGRpc2NhcmRfcHJvbW90ZV9hZGp1c3RtZW50OwogCXVuc2lnbmVkIHJlYWRfcHJvbW90ZV9hZGp1c3RtZW50OwogCXVuc2lnbmVkIHdyaXRlX3Byb21vdGVfYWRqdXN0bWVudDsKQEAgLTQwNiw2ICs0MDUsNyBAQAogI2RlZmluZSBERUZBVUxUX0RJU0NBUkRfUFJPTU9URV9BREpVU1RNRU5UIDEKICNkZWZpbmUgREVGQVVMVF9SRUFEX1BST01PVEVfQURKVVNUTUVOVCA0CiAjZGVmaW5lIERFRkFVTFRfV1JJVEVfUFJPTU9URV9BREpVU1RNRU5UIDgKKyNkZWZpbmUgRElTQ09VUkFHRV9ERU1PVElOR19ESVJUWV9USFJFU0hPTEQgMTI4CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTUxOCw2ICs1MTgsMTIgQEAKIAlyZXR1cm4gZTsKIH0KIAorc3RhdGljIHN0cnVjdCBlbnRyeSAqcGVlayhzdHJ1Y3QgcXVldWUgKnEpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaCA9IHF1ZXVlX3BlZWsocSk7CisJcmV0dXJuIGggPyBjb250YWluZXJfb2YoaCwgc3RydWN0IGVudHJ5LCBsaXN0KSA6IE5VTEw7Cit9CisKIC8qCiAgKiBIYXMgdGhpcyBlbnRyeSBhbHJlYWR5IGJlZW4gdXBkYXRlZD8KICAqLwpAQCAtNTcwLDEwICs1NzYsNiBAQAogCQkJCQlicmVhazsKIAkJCX0KIAkJfQotCi0JCW1xLT5wcm9tb3RlX3RocmVzaG9sZCA9IG5yID8gdG90YWwgLyBuciA6IDE7Ci0JCWlmIChtcS0+cHJvbW90ZV90aHJlc2hvbGQgKiBuciA8IHRvdGFsKQotCQkJbXEtPnByb21vdGVfdGhyZXNob2xkKys7CiAJfQogfQogCkBAIC02NDEsNiArNjQzLDMwIEBACiB9CiAKIC8qCisgKiBFbnRyaWVzIGluIHRoZSBwcmVfY2FjaGUgd2hvc2UgaGl0IGNvdW50IHBhc3NlcyB0aGUgcHJvbW90aW9uCisgKiB0aHJlc2hvbGQgbW92ZSB0byB0aGUgY2FjaGUgcHJvcGVyLiAgV29ya2luZyBvdXQgdGhlIGNvcnJlY3QKKyAqIHZhbHVlIGZvciB0aGUgcHJvbW90aW9uX3RocmVzaG9sZCBpcyBjcnVjaWFsIHRvIHRoaXMgcG9saWN5LgorICovCitzdGF0aWMgdW5zaWduZWQgcHJvbW90ZV90aHJlc2hvbGQoc3RydWN0IG1xX3BvbGljeSAqbXEpCit7CisJc3RydWN0IGVudHJ5ICplOworCisJaWYgKGFueV9mcmVlX2NibG9ja3MobXEpKQorCQlyZXR1cm4gMDsKKworCWUgPSBwZWVrKCZtcS0+Y2FjaGVfY2xlYW4pOworCWlmIChlKQorCQlyZXR1cm4gZS0+aGl0X2NvdW50OworCisJZSA9IHBlZWsoJm1xLT5jYWNoZV9kaXJ0eSk7CisJaWYgKGUpCisJCXJldHVybiBlLT5oaXRfY291bnQgKyBESVNDT1VSQUdFX0RFTU9USU5HX0RJUlRZX1RIUkVTSE9MRDsKKworCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCXJldHVybiAwOworfQorCisvKgogICogV2UgbW9kaWZ5IHRoZSBiYXNpYyBwcm9tb3Rpb25fdGhyZXNob2xkIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgaW8uCiAgKgogICogSWYgdGhlIG9yaWdpbiBibG9jayBoYXMgYmVlbiBkaXNjYXJkZWQgdGhlbiB0aGVyZSdzIG5vIGNvc3QgdG8gY29weSBpdApAQCAtNjUzLDcgKzY3OSw3IEBACiAJCQkJCSAgIGJvb2wgZGlzY2FyZGVkX29ibG9jaywgaW50IGRhdGFfZGlyKQogewogCWlmIChkYXRhX2RpciA9PSBSRUFEKQotCQlyZXR1cm4gbXEtPnByb21vdGVfdGhyZXNob2xkICsgbXEtPnJlYWRfcHJvbW90ZV9hZGp1c3RtZW50OworCQlyZXR1cm4gcHJvbW90ZV90aHJlc2hvbGQobXEpICsgbXEtPnJlYWRfcHJvbW90ZV9hZGp1c3RtZW50OwogCiAJaWYgKGRpc2NhcmRlZF9vYmxvY2sgJiYgKGFueV9mcmVlX2NibG9ja3MobXEpIHx8IGFueV9jbGVhbl9jYmxvY2tzKG1xKSkpIHsKIAkJLyoKQEAgLTY2Myw3ICs2ODksNyBAQAogCQlyZXR1cm4gbXEtPmRpc2NhcmRfcHJvbW90ZV9hZGp1c3RtZW50OwogCX0KIAotCXJldHVybiBtcS0+cHJvbW90ZV90aHJlc2hvbGQgKyBtcS0+d3JpdGVfcHJvbW90ZV9hZGp1c3RtZW50OworCXJldHVybiBwcm9tb3RlX3RocmVzaG9sZChtcSkgKyBtcS0+d3JpdGVfcHJvbW90ZV9hZGp1c3RtZW50OwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRfcHJvbW90ZShzdHJ1Y3QgbXFfcG9saWN5ICptcSwgc3RydWN0IGVudHJ5ICplLApAQCAtODM5LDcgKzg2NSw4IEBACiAJaWYgKGUgJiYgaW5fY2FjaGUobXEsIGUpKQogCQlyID0gY2FjaGVfZW50cnlfZm91bmQobXEsIGUsIHJlc3VsdCk7CiAKLQllbHNlIGlmIChpb3RfcGF0dGVybigmbXEtPnRyYWNrZXIpID09IFBBVFRFUk5fU0VRVUVOVElBTCkKKwllbHNlIGlmIChtcS0+dHJhY2tlci50aHJlc2hvbGRzW1BBVFRFUk5fU0VRVUVOVElBTF0gJiYKKwkJIGlvdF9wYXR0ZXJuKCZtcS0+dHJhY2tlcikgPT0gUEFUVEVSTl9TRVFVRU5USUFMKQogCQlyZXN1bHQtPm9wID0gUE9MSUNZX01JU1M7CiAKIAllbHNlIGlmIChlKQpAQCAtMTIzMCw3ICsxMjU3LDYgQEAKIAltcS0+dGljayA9IDA7CiAJbXEtPmhpdF9jb3VudCA9IDA7CiAJbXEtPmdlbmVyYXRpb24gPSAwOwotCW1xLT5wcm9tb3RlX3RocmVzaG9sZCA9IDA7CiAJbXEtPmRpc2NhcmRfcHJvbW90ZV9hZGp1c3RtZW50ID0gREVGQVVMVF9ESVNDQVJEX1BST01PVEVfQURKVVNUTUVOVDsKIAltcS0+cmVhZF9wcm9tb3RlX2FkanVzdG1lbnQgPSBERUZBVUxUX1JFQURfUFJPTU9URV9BREpVU1RNRU5UOwogCW1xLT53cml0ZV9wcm9tb3RlX2FkanVzdG1lbnQgPSBERUZBVUxUX1dSSVRFX1BST01PVEVfQURKVVNUTUVOVDsKQEAgLTEyNjUsNyArMTI5MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZG1fY2FjaGVfcG9saWN5X3R5cGUgbXFfcG9saWN5X3R5cGUgPSB7CiAJLm5hbWUgPSAibXEiLAotCS52ZXJzaW9uID0gezEsIDIsIDB9LAorCS52ZXJzaW9uID0gezEsIDMsIDB9LAogCS5oaW50X3NpemUgPSA0LAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5jcmVhdGUgPSBtcV9jcmVhdGUKQEAgLTEyNzMsNyArMTI5OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZG1fY2FjaGVfcG9saWN5X3R5cGUgZGVmYXVsdF9wb2xpY3lfdHlwZSA9IHsKIAkubmFtZSA9ICJkZWZhdWx0IiwKLQkudmVyc2lvbiA9IHsxLCAyLCAwfSwKKwkudmVyc2lvbiA9IHsxLCAzLCAwfSwKIAkuaGludF9zaXplID0gNCwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuY3JlYXRlID0gbXFfY3JlYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jYWNoZS10YXJnZXQuYyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtdGFyZ2V0LmMKaW5kZXggNzEzMDUwNS4uMWU5NmQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jYWNoZS10YXJnZXQuYworKysgYi9kcml2ZXJzL21kL2RtLWNhY2hlLXRhcmdldC5jCkBAIC05NSw3ICs5NSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNkZWZpbmUgUFJJU09OX0NFTExTIDEwMjQKICNkZWZpbmUgTUlHUkFUSU9OX1BPT0xfU0laRSAxMjgKICNkZWZpbmUgQ09NTUlUX1BFUklPRCBIWgogI2RlZmluZSBNSUdSQVRJT05fQ09VTlRfV0lORE9XIDEwCkBAIC0yMzcsOCArMjM2LDkgQEAKIAkvKgogCSAqIG9yaWdpbl9ibG9ja3MgZW50cmllcywgZGlzY2FyZGVkIGlmIHNldC4KIAkgKi8KLQlkbV9vYmxvY2tfdCBkaXNjYXJkX25yX2Jsb2NrczsKKwlkbV9kYmxvY2tfdCBkaXNjYXJkX25yX2Jsb2NrczsKIAl1bnNpZ25lZCBsb25nICpkaXNjYXJkX2JpdHNldDsKKwl1aW50MzJfdCBkaXNjYXJkX2Jsb2NrX3NpemU7IC8qIGEgcG93ZXIgb2YgMiB0aW1lcyBzZWN0b3JzIHBlciBibG9jayAqLwogCiAJLyoKIAkgKiBSYXRoZXIgdGhhbiByZWNvbnN0cnVjdGluZyB0aGUgdGFibGUgbGluZSBmb3IgdGhlIHN0YXR1cyB3ZSBqdXN0CkBAIC0zMTAsNiArMzEwLDcgQEAKIAlkbV9jYmxvY2tfdCBjYmxvY2s7CiAKIAlib29sIGVycjoxOworCWJvb2wgZGlzY2FyZDoxOwogCWJvb2wgd3JpdGViYWNrOjE7CiAJYm9vbCBkZW1vdGU6MTsKIAlib29sIHByb21vdGU6MTsKQEAgLTQzMywxMSArNDM0LDEyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIGJ1aWxkX2tleShkbV9vYmxvY2tfdCBvYmxvY2ssIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5KQorc3RhdGljIHZvaWQgYnVpbGRfa2V5KGRtX29ibG9ja190IGJlZ2luLCBkbV9vYmxvY2tfdCBlbmQsIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5KQogewogCWtleS0+dmlydHVhbCA9IDA7CiAJa2V5LT5kZXYgPSAwOwotCWtleS0+YmxvY2sgPSBmcm9tX29ibG9jayhvYmxvY2spOworCWtleS0+YmxvY2tfYmVnaW4gPSBmcm9tX29ibG9jayhiZWdpbik7CisJa2V5LT5ibG9ja19lbmQgPSBmcm9tX29ibG9jayhlbmQpOwogfQogCiAvKgpAQCAtNDQ3LDE1ICs0NDksMTUgQEAKICAqLwogdHlwZWRlZiB2b2lkICgqY2VsbF9mcmVlX2ZuKSh2b2lkICpjb250ZXh0LCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKTsKIAotc3RhdGljIGludCBiaW9fZGV0YWluKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX29ibG9ja190IG9ibG9jaywKLQkJICAgICAgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsX3ByZWFsbG9jLAotCQkgICAgICBjZWxsX2ZyZWVfZm4gZnJlZV9mbiwgdm9pZCAqZnJlZV9jb250ZXh0LAotCQkgICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqY2VsbF9yZXN1bHQpCitzdGF0aWMgaW50IGJpb19kZXRhaW5fcmFuZ2Uoc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fb2Jsb2NrX3Qgb2Jsb2NrX2JlZ2luLCBkbV9vYmxvY2tfdCBvYmxvY2tfZW5kLAorCQkJICAgIHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbF9wcmVhbGxvYywKKwkJCSAgICBjZWxsX2ZyZWVfZm4gZnJlZV9mbiwgdm9pZCAqZnJlZV9jb250ZXh0LAorCQkJICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKipjZWxsX3Jlc3VsdCkKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5OwogCi0JYnVpbGRfa2V5KG9ibG9jaywgJmtleSk7CisJYnVpbGRfa2V5KG9ibG9ja19iZWdpbiwgb2Jsb2NrX2VuZCwgJmtleSk7CiAJciA9IGRtX2Jpb19kZXRhaW4oY2FjaGUtPnByaXNvbiwgJmtleSwgYmlvLCBjZWxsX3ByZWFsbG9jLCBjZWxsX3Jlc3VsdCk7CiAJaWYgKHIpCiAJCWZyZWVfZm4oZnJlZV9jb250ZXh0LCBjZWxsX3ByZWFsbG9jKTsKQEAgLTQ2Myw2ICs0NjUsMTYgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIGludCBiaW9fZGV0YWluKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX29ibG9ja190IG9ibG9jaywKKwkJICAgICAgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsX3ByZWFsbG9jLAorCQkgICAgICBjZWxsX2ZyZWVfZm4gZnJlZV9mbiwgdm9pZCAqZnJlZV9jb250ZXh0LAorCQkgICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqY2VsbF9yZXN1bHQpCit7CisJZG1fb2Jsb2NrX3QgZW5kID0gdG9fb2Jsb2NrKGZyb21fb2Jsb2NrKG9ibG9jaykgKyAxVUxMKTsKKwlyZXR1cm4gYmlvX2RldGFpbl9yYW5nZShjYWNoZSwgb2Jsb2NrLCBlbmQsIGJpbywKKwkJCQljZWxsX3ByZWFsbG9jLCBmcmVlX2ZuLCBmcmVlX2NvbnRleHQsIGNlbGxfcmVzdWx0KTsKK30KKwogc3RhdGljIGludCBnZXRfY2VsbChzdHJ1Y3QgY2FjaGUgKmNhY2hlLAogCQkgICAgZG1fb2Jsb2NrX3Qgb2Jsb2NrLAogCQkgICAgc3RydWN0IHByZWFsbG9jICpzdHJ1Y3RzLApAQCAtNDc0LDcgKzQ4Niw3IEBACiAKIAljZWxsX3ByZWFsbG9jID0gcHJlYWxsb2NfZ2V0X2NlbGwoc3RydWN0cyk7CiAKLQlidWlsZF9rZXkob2Jsb2NrLCAma2V5KTsKKwlidWlsZF9rZXkob2Jsb2NrLCB0b19vYmxvY2soZnJvbV9vYmxvY2sob2Jsb2NrKSArIDFVTEwpLCAma2V5KTsKIAlyID0gZG1fZ2V0X2NlbGwoY2FjaGUtPnByaXNvbiwgJmtleSwgY2VsbF9wcmVhbGxvYywgY2VsbF9yZXN1bHQpOwogCWlmIChyKQogCQlwcmVhbGxvY19wdXRfY2VsbChzdHJ1Y3RzLCBjZWxsX3ByZWFsbG9jKTsKQEAgLTUyNCwzMyArNTM2LDU3IEBACiAJcmV0dXJuIGI7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9kaXNjYXJkKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX29ibG9ja190IGIpCitzdGF0aWMgZG1fYmxvY2tfdCBvYmxvY2tzX3Blcl9kYmxvY2soc3RydWN0IGNhY2hlICpjYWNoZSkKK3sKKwlkbV9ibG9ja190IG9ibG9ja3MgPSBjYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplOworCisJaWYgKGJsb2NrX3NpemVfaXNfcG93ZXJfb2ZfdHdvKGNhY2hlKSkKKwkJb2Jsb2NrcyA+Pj0gY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrX3NoaWZ0OworCWVsc2UKKwkJb2Jsb2NrcyA9IGJsb2NrX2RpdihvYmxvY2tzLCBjYWNoZS0+c2VjdG9yc19wZXJfYmxvY2spOworCisJcmV0dXJuIG9ibG9ja3M7Cit9CisKK3N0YXRpYyBkbV9kYmxvY2tfdCBvYmxvY2tfdG9fZGJsb2NrKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX29ibG9ja190IG9ibG9jaykKK3sKKwlyZXR1cm4gdG9fZGJsb2NrKGJsb2NrX2Rpdihmcm9tX29ibG9jayhvYmxvY2spLAorCQkJCSAgIG9ibG9ja3NfcGVyX2RibG9jayhjYWNoZSkpKTsKK30KKworc3RhdGljIGRtX29ibG9ja190IGRibG9ja190b19vYmxvY2soc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fZGJsb2NrX3QgZGJsb2NrKQoreworCXJldHVybiB0b19vYmxvY2soZnJvbV9kYmxvY2soZGJsb2NrKSAqIG9ibG9ja3NfcGVyX2RibG9jayhjYWNoZSkpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGlzY2FyZChzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBkbV9kYmxvY2tfdCBiKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlCVUdfT04oZnJvbV9kYmxvY2soYikgPj0gZnJvbV9kYmxvY2soY2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CiAJYXRvbWljX2luYygmY2FjaGUtPnN0YXRzLmRpc2NhcmRfY291bnQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7Ci0Jc2V0X2JpdChmcm9tX29ibG9jayhiKSwgY2FjaGUtPmRpc2NhcmRfYml0c2V0KTsKKwlzZXRfYml0KGZyb21fZGJsb2NrKGIpLCBjYWNoZS0+ZGlzY2FyZF9iaXRzZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFyX2Rpc2NhcmQoc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fb2Jsb2NrX3QgYikKK3N0YXRpYyB2b2lkIGNsZWFyX2Rpc2NhcmQoc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fZGJsb2NrX3QgYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7Ci0JY2xlYXJfYml0KGZyb21fb2Jsb2NrKGIpLCBjYWNoZS0+ZGlzY2FyZF9iaXRzZXQpOworCWNsZWFyX2JpdChmcm9tX2RibG9jayhiKSwgY2FjaGUtPmRpc2NhcmRfYml0c2V0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYWNoZS0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgYm9vbCBpc19kaXNjYXJkZWQoc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fb2Jsb2NrX3QgYikKK3N0YXRpYyBib29sIGlzX2Rpc2NhcmRlZChzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBkbV9kYmxvY2tfdCBiKQogewogCWludCByOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FjaGUtPmxvY2ssIGZsYWdzKTsKLQlyID0gdGVzdF9iaXQoZnJvbV9vYmxvY2soYiksIGNhY2hlLT5kaXNjYXJkX2JpdHNldCk7CisJciA9IHRlc3RfYml0KGZyb21fZGJsb2NrKGIpLCBjYWNoZS0+ZGlzY2FyZF9iaXRzZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcjsKQEAgLTU2Miw3ICs1OTgsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FjaGUtPmxvY2ssIGZsYWdzKTsKLQlyID0gdGVzdF9iaXQoZnJvbV9vYmxvY2soYiksIGNhY2hlLT5kaXNjYXJkX2JpdHNldCk7CisJciA9IHRlc3RfYml0KGZyb21fZGJsb2NrKG9ibG9ja190b19kYmxvY2soY2FjaGUsIGIpKSwKKwkJICAgICBjYWNoZS0+ZGlzY2FyZF9iaXRzZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcjsKQEAgLTY4Nyw3ICs3MjQsNyBAQAogCWNoZWNrX2lmX3RpY2tfYmlvX25lZWRlZChjYWNoZSwgYmlvKTsKIAlyZW1hcF90b19vcmlnaW4oY2FjaGUsIGJpbyk7CiAJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKQotCQljbGVhcl9kaXNjYXJkKGNhY2hlLCBvYmxvY2spOworCQljbGVhcl9kaXNjYXJkKGNhY2hlLCBvYmxvY2tfdG9fZGJsb2NrKGNhY2hlLCBvYmxvY2spKTsKIH0KIAogc3RhdGljIHZvaWQgcmVtYXBfdG9fY2FjaGVfZGlydHkoc3RydWN0IGNhY2hlICpjYWNoZSwgc3RydWN0IGJpbyAqYmlvLApAQCAtNjk3LDcgKzczNCw3IEBACiAJcmVtYXBfdG9fY2FjaGUoY2FjaGUsIGJpbywgY2Jsb2NrKTsKIAlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKIAkJc2V0X2RpcnR5KGNhY2hlLCBvYmxvY2ssIGNibG9jayk7Ci0JCWNsZWFyX2Rpc2NhcmQoY2FjaGUsIG9ibG9jayk7CisJCWNsZWFyX2Rpc2NhcmQoY2FjaGUsIG9ibG9ja190b19kYmxvY2soY2FjaGUsIG9ibG9jaykpOwogCX0KIH0KIApAQCAtOTUxLDEwICs5ODgsMTQgQEAKIAkJfQogCiAJfSBlbHNlIHsKLQkJY2xlYXJfZGlydHkoY2FjaGUsIG1nLT5uZXdfb2Jsb2NrLCBtZy0+Y2Jsb2NrKTsKLQkJaWYgKG1nLT5yZXF1ZXVlX2hvbGRlcikKKwkJaWYgKG1nLT5yZXF1ZXVlX2hvbGRlcikgeworCQkJY2xlYXJfZGlydHkoY2FjaGUsIG1nLT5uZXdfb2Jsb2NrLCBtZy0+Y2Jsb2NrKTsKIAkJCWNlbGxfZGVmZXIoY2FjaGUsIG1nLT5uZXdfb2NlbGwsIHRydWUpOwotCQllbHNlIHsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGUgYmxvY2sgd2FzIHByb21vdGVkIHZpYSBhbiBvdmVyd3JpdGUsIHNvIGl0J3MgZGlydHkuCisJCQkgKi8KKwkJCXNldF9kaXJ0eShjYWNoZSwgbWctPm5ld19vYmxvY2ssIG1nLT5jYmxvY2spOwogCQkJYmlvX2VuZGlvKG1nLT5uZXdfb2NlbGwtPmhvbGRlciwgMCk7CiAJCQljZWxsX2RlZmVyKGNhY2hlLCBtZy0+bmV3X29jZWxsLCBmYWxzZSk7CiAJCX0KQEAgLTk3OCw3ICsxMDE5LDcgQEAKIAl3YWtlX3dvcmtlcihjYWNoZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlzc3VlX2NvcHlfcmVhbChzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKK3N0YXRpYyB2b2lkIGlzc3VlX2NvcHkoc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcpCiB7CiAJaW50IHI7CiAJc3RydWN0IGRtX2lvX3JlZ2lvbiBvX3JlZ2lvbiwgY19yZWdpb247CkBAIC0xMDU3LDExICsxMDk4LDQ2IEBACiAJbWlncmF0aW9uX3N1Y2Nlc3NfcHJlX2NvbW1pdChtZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGlzc3VlX2NvcHkoc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcpCitzdGF0aWMgdm9pZCBjYWxjX2Rpc2NhcmRfYmxvY2tfcmFuZ2Uoc3RydWN0IGNhY2hlICpjYWNoZSwgc3RydWN0IGJpbyAqYmlvLAorCQkJCSAgICAgZG1fZGJsb2NrX3QgKmIsIGRtX2RibG9ja190ICplKQoreworCXNlY3Rvcl90IHNiID0gYmlvLT5iaV9pdGVyLmJpX3NlY3RvcjsKKwlzZWN0b3JfdCBzZSA9IGJpb19lbmRfc2VjdG9yKGJpbyk7CisKKwkqYiA9IHRvX2RibG9jayhkbV9zZWN0b3JfZGl2X3VwKHNiLCBjYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplKSk7CisKKwlpZiAoc2UgLSBzYiA8IGNhY2hlLT5kaXNjYXJkX2Jsb2NrX3NpemUpCisJCSplID0gKmI7CisJZWxzZQorCQkqZSA9IHRvX2RibG9jayhibG9ja19kaXYoc2UsIGNhY2hlLT5kaXNjYXJkX2Jsb2NrX3NpemUpKTsKK30KKworc3RhdGljIHZvaWQgaXNzdWVfZGlzY2FyZChzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKK3sKKwlkbV9kYmxvY2tfdCBiLCBlOworCXN0cnVjdCBiaW8gKmJpbyA9IG1nLT5uZXdfb2NlbGwtPmhvbGRlcjsKKworCWNhbGNfZGlzY2FyZF9ibG9ja19yYW5nZShtZy0+Y2FjaGUsIGJpbywgJmIsICZlKTsKKwl3aGlsZSAoYiAhPSBlKSB7CisJCXNldF9kaXNjYXJkKG1nLT5jYWNoZSwgYik7CisJCWIgPSB0b19kYmxvY2soZnJvbV9kYmxvY2soYikgKyAxKTsKKwl9CisKKwliaW9fZW5kaW8oYmlvLCAwKTsKKwljZWxsX2RlZmVyKG1nLT5jYWNoZSwgbWctPm5ld19vY2VsbCwgZmFsc2UpOworCWZyZWVfbWlncmF0aW9uKG1nKTsKK30KKworc3RhdGljIHZvaWQgaXNzdWVfY29weV9vcl9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nKQogewogCWJvb2wgYXZvaWQ7CiAJc3RydWN0IGNhY2hlICpjYWNoZSA9IG1nLT5jYWNoZTsKIAorCWlmIChtZy0+ZGlzY2FyZCkgeworCQlpc3N1ZV9kaXNjYXJkKG1nKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChtZy0+d3JpdGViYWNrIHx8IG1nLT5kZW1vdGUpCiAJCWF2b2lkID0gIWlzX2RpcnR5KGNhY2hlLCBtZy0+Y2Jsb2NrKSB8fAogCQkJaXNfZGlzY2FyZGVkX29ibG9jayhjYWNoZSwgbWctPm9sZF9vYmxvY2spOwpAQCAtMTA3MCwxMyArMTE0NiwxNCBAQAogCiAJCWF2b2lkID0gaXNfZGlzY2FyZGVkX29ibG9jayhjYWNoZSwgbWctPm5ld19vYmxvY2spOwogCi0JCWlmICghYXZvaWQgJiYgYmlvX3dyaXRlc19jb21wbGV0ZV9ibG9jayhjYWNoZSwgYmlvKSkgeworCQlpZiAod3JpdGViYWNrX21vZGUoJmNhY2hlLT5mZWF0dXJlcykgJiYKKwkJICAgICFhdm9pZCAmJiBiaW9fd3JpdGVzX2NvbXBsZXRlX2Jsb2NrKGNhY2hlLCBiaW8pKSB7CiAJCQlpc3N1ZV9vdmVyd3JpdGUobWcsIGJpbyk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKLQlhdm9pZCA/IGF2b2lkX2NvcHkobWcpIDogaXNzdWVfY29weV9yZWFsKG1nKTsKKwlhdm9pZCA/IGF2b2lkX2NvcHkobWcpIDogaXNzdWVfY29weShtZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbXBsZXRlX21pZ3JhdGlvbihzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKQEAgLTExNjEsNiArMTIzOCw3IEBACiAJc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcgPSBwcmVhbGxvY19nZXRfbWlncmF0aW9uKHN0cnVjdHMpOwogCiAJbWctPmVyciA9IGZhbHNlOworCW1nLT5kaXNjYXJkID0gZmFsc2U7CiAJbWctPndyaXRlYmFjayA9IGZhbHNlOwogCW1nLT5kZW1vdGUgPSBmYWxzZTsKIAltZy0+cHJvbW90ZSA9IHRydWU7CkBAIC0xMTg0LDYgKzEyNjIsNyBAQAogCXN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nID0gcHJlYWxsb2NfZ2V0X21pZ3JhdGlvbihzdHJ1Y3RzKTsKIAogCW1nLT5lcnIgPSBmYWxzZTsKKwltZy0+ZGlzY2FyZCA9IGZhbHNlOwogCW1nLT53cml0ZWJhY2sgPSB0cnVlOwogCW1nLT5kZW1vdGUgPSBmYWxzZTsKIAltZy0+cHJvbW90ZSA9IGZhbHNlOwpAQCAtMTIwOSw2ICsxMjg4LDcgQEAKIAlzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZyA9IHByZWFsbG9jX2dldF9taWdyYXRpb24oc3RydWN0cyk7CiAKIAltZy0+ZXJyID0gZmFsc2U7CisJbWctPmRpc2NhcmQgPSBmYWxzZTsKIAltZy0+d3JpdGViYWNrID0gZmFsc2U7CiAJbWctPmRlbW90ZSA9IHRydWU7CiAJbWctPnByb21vdGUgPSB0cnVlOwpAQCAtMTIzNyw2ICsxMzE3LDcgQEAKIAlzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZyA9IHByZWFsbG9jX2dldF9taWdyYXRpb24oc3RydWN0cyk7CiAKIAltZy0+ZXJyID0gZmFsc2U7CisJbWctPmRpc2NhcmQgPSBmYWxzZTsKIAltZy0+d3JpdGViYWNrID0gZmFsc2U7CiAJbWctPmRlbW90ZSA9IHRydWU7CiAJbWctPnByb21vdGUgPSBmYWxzZTsKQEAgLTEyNTMsNiArMTMzNCwyNiBAQAogCXF1aWVzY2VfbWlncmF0aW9uKG1nKTsKIH0KIAorc3RhdGljIHZvaWQgZGlzY2FyZChzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgcHJlYWxsb2MgKnN0cnVjdHMsCisJCSAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCXN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nID0gcHJlYWxsb2NfZ2V0X21pZ3JhdGlvbihzdHJ1Y3RzKTsKKworCW1nLT5lcnIgPSBmYWxzZTsKKwltZy0+ZGlzY2FyZCA9IHRydWU7CisJbWctPndyaXRlYmFjayA9IGZhbHNlOworCW1nLT5kZW1vdGUgPSBmYWxzZTsKKwltZy0+cHJvbW90ZSA9IGZhbHNlOworCW1nLT5yZXF1ZXVlX2hvbGRlciA9IGZhbHNlOworCW1nLT5pbnZhbGlkYXRlID0gZmFsc2U7CisJbWctPmNhY2hlID0gY2FjaGU7CisJbWctPm9sZF9vY2VsbCA9IE5VTEw7CisJbWctPm5ld19vY2VsbCA9IGNlbGw7CisJbWctPnN0YXJ0X2ppZmZpZXMgPSBqaWZmaWVzOworCisJcXVpZXNjZV9taWdyYXRpb24obWcpOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIGJpbyBwcm9jZXNzaW5nCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyODYsMzEgKzEzODcsMjcgQEAKIAlpc3N1ZShjYWNoZSwgYmlvKTsKIH0KIAotLyoKLSAqIFBlb3BsZSBnZW5lcmFsbHkgZGlzY2FyZCBsYXJnZSBwYXJ0cyBvZiBhIGRldmljZSwgZWcsIHRoZSB3aG9sZSBkZXZpY2UKLSAqIHdoZW4gZm9ybWF0dGluZy4gIFNwbGl0dGluZyB0aGVzZSBsYXJnZSBkaXNjYXJkcyB1cCBpbnRvIGNhY2hlIGJsb2NrCi0gKiBzaXplZCBpb3MgYW5kIHRoZW4gcXVpZXNjaW5nIChhbHdheXMgbmVjY2Vzc2FyeSBmb3IgZGlzY2FyZCkgdGFrZXMgdG9vCi0gKiBsb25nLgotICoKLSAqIFdlIGtlZXAgaXQgc2ltcGxlLCBhbmQgYWxsb3cgYW55IHNpemUgb2YgZGlzY2FyZCB0byBjb21lIGluLCBhbmQganVzdAotICogbWFyayBvZmYgYmxvY2tzIG9uIHRoZSBkaXNjYXJkIGJpdHNldC4gIE5vIHBhc3Nkb3duIG9jY3VycyEKLSAqCi0gKiBUbyBpbXBsZW1lbnQgcGFzc2Rvd24gd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGJpb19wcmlzb24gc3VjaCB0aGF0IGEgY2VsbAotICogY2FuIGhhdmUgYSBrZXkgdGhhdCBzcGFucyBtYW55IGJsb2Nrcy4KLSAqLwotc3RhdGljIHZvaWQgcHJvY2Vzc19kaXNjYXJkX2JpbyhzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgdm9pZCBwcm9jZXNzX2Rpc2NhcmRfYmlvKHN0cnVjdCBjYWNoZSAqY2FjaGUsIHN0cnVjdCBwcmVhbGxvYyAqc3RydWN0cywKKwkJCQlzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JZG1fYmxvY2tfdCBzdGFydF9ibG9jayA9IGRtX3NlY3Rvcl9kaXZfdXAoYmlvLT5iaV9pdGVyLmJpX3NlY3RvciwKLQkJCQkJCSAgY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrKTsKLQlkbV9ibG9ja190IGVuZF9ibG9jayA9IGJpb19lbmRfc2VjdG9yKGJpbyk7Ci0JZG1fYmxvY2tfdCBiOworCWludCByOworCWRtX2RibG9ja190IGIsIGU7CisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbF9wcmVhbGxvYywgKm5ld19vY2VsbDsKIAotCWVuZF9ibG9jayA9IGJsb2NrX2RpdihlbmRfYmxvY2ssIGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9jayk7CisJY2FsY19kaXNjYXJkX2Jsb2NrX3JhbmdlKGNhY2hlLCBiaW8sICZiLCAmZSk7CisJaWYgKGIgPT0gZSkgeworCQliaW9fZW5kaW8oYmlvLCAwKTsKKwkJcmV0dXJuOworCX0KIAotCWZvciAoYiA9IHN0YXJ0X2Jsb2NrOyBiIDwgZW5kX2Jsb2NrOyBiKyspCi0JCXNldF9kaXNjYXJkKGNhY2hlLCB0b19vYmxvY2soYikpOworCWNlbGxfcHJlYWxsb2MgPSBwcmVhbGxvY19nZXRfY2VsbChzdHJ1Y3RzKTsKKwlyID0gYmlvX2RldGFpbl9yYW5nZShjYWNoZSwgZGJsb2NrX3RvX29ibG9jayhjYWNoZSwgYiksIGRibG9ja190b19vYmxvY2soY2FjaGUsIGUpLCBiaW8sIGNlbGxfcHJlYWxsb2MsCisJCQkgICAgIChjZWxsX2ZyZWVfZm4pIHByZWFsbG9jX3B1dF9jZWxsLAorCQkJICAgICBzdHJ1Y3RzLCAmbmV3X29jZWxsKTsKKwlpZiAociA+IDApCisJCXJldHVybjsKIAotCWJpb19lbmRpbyhiaW8sIDApOworCWRpc2NhcmQoY2FjaGUsIHN0cnVjdHMsIG5ld19vY2VsbCk7CiB9CiAKIHN0YXRpYyBib29sIHNwYXJlX21pZ3JhdGlvbl9iYW5kd2lkdGgoc3RydWN0IGNhY2hlICpjYWNoZSkKQEAgLTEzNDAsOSArMTQzNyw4IEBACiAJZG1fb2Jsb2NrX3QgYmxvY2sgPSBnZXRfYmlvX2Jsb2NrKGNhY2hlLCBiaW8pOwogCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGxfcHJlYWxsb2MsICpvbGRfb2NlbGwsICpuZXdfb2NlbGw7CiAJc3RydWN0IHBvbGljeV9yZXN1bHQgbG9va3VwX3Jlc3VsdDsKLQlib29sIGRpc2NhcmRlZF9ibG9jayA9IGlzX2Rpc2NhcmRlZF9vYmxvY2soY2FjaGUsIGJsb2NrKTsKIAlib29sIHBhc3N0aHJvdWdoID0gcGFzc3Rocm91Z2hfbW9kZSgmY2FjaGUtPmZlYXR1cmVzKTsKLQlib29sIGNhbl9taWdyYXRlID0gIXBhc3N0aHJvdWdoICYmIChkaXNjYXJkZWRfYmxvY2sgfHwgc3BhcmVfbWlncmF0aW9uX2JhbmR3aWR0aChjYWNoZSkpOworCWJvb2wgZGlzY2FyZGVkX2Jsb2NrLCBjYW5fbWlncmF0ZTsKIAogCS8qCiAJICogQ2hlY2sgdG8gc2VlIGlmIHRoYXQgYmxvY2sgaXMgY3VycmVudGx5IG1pZ3JhdGluZy4KQEAgLTEzNTQsNiArMTQ1MCw5IEBACiAJaWYgKHIgPiAwKQogCQlyZXR1cm47CiAKKwlkaXNjYXJkZWRfYmxvY2sgPSBpc19kaXNjYXJkZWRfb2Jsb2NrKGNhY2hlLCBibG9jayk7CisJY2FuX21pZ3JhdGUgPSAhcGFzc3Rocm91Z2ggJiYgKGRpc2NhcmRlZF9ibG9jayB8fCBzcGFyZV9taWdyYXRpb25fYmFuZHdpZHRoKGNhY2hlKSk7CisKIAlyID0gcG9saWN5X21hcChjYWNoZS0+cG9saWN5LCBibG9jaywgdHJ1ZSwgY2FuX21pZ3JhdGUsIGRpc2NhcmRlZF9ibG9jaywKIAkJICAgICAgIGJpbywgJmxvb2t1cF9yZXN1bHQpOwogCkBAIC0xNTAwLDcgKzE1OTksNyBAQAogCQlpZiAoYmlvLT5iaV9ydyAmIFJFUV9GTFVTSCkKIAkJCXByb2Nlc3NfZmx1c2hfYmlvKGNhY2hlLCBiaW8pOwogCQllbHNlIGlmIChiaW8tPmJpX3J3ICYgUkVRX0RJU0NBUkQpCi0JCQlwcm9jZXNzX2Rpc2NhcmRfYmlvKGNhY2hlLCBiaW8pOworCQkJcHJvY2Vzc19kaXNjYXJkX2JpbyhjYWNoZSwgJnN0cnVjdHMsIGJpbyk7CiAJCWVsc2UKIAkJCXByb2Nlc3NfYmlvKGNhY2hlLCAmc3RydWN0cywgYmlvKTsKIAl9CkBAIC0xNzE1LDcgKzE4MTQsNyBAQAogCQkJcHJvY2Vzc19pbnZhbGlkYXRpb25fcmVxdWVzdHMoY2FjaGUpOwogCQl9CiAKLQkJcHJvY2Vzc19taWdyYXRpb25zKGNhY2hlLCAmY2FjaGUtPnF1aWVzY2VkX21pZ3JhdGlvbnMsIGlzc3VlX2NvcHkpOworCQlwcm9jZXNzX21pZ3JhdGlvbnMoY2FjaGUsICZjYWNoZS0+cXVpZXNjZWRfbWlncmF0aW9ucywgaXNzdWVfY29weV9vcl9kaXNjYXJkKTsKIAkJcHJvY2Vzc19taWdyYXRpb25zKGNhY2hlLCAmY2FjaGUtPmNvbXBsZXRlZF9taWdyYXRpb25zLCBjb21wbGV0ZV9taWdyYXRpb24pOwogCiAJCWlmIChjb21taXRfaWZfbmVlZGVkKGNhY2hlKSkgewpAQCAtMjE4MCw2ICsyMjc5LDQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBXZSB3YW50IHRoZSBkaXNjYXJkIGJsb2NrIHNpemUgdG8gYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGNhY2hlCisgKiBibG9jayBzaXplIGFuZCBoYXZlIG5vIG1vcmUgdGhhbiAyXjE0IGRpc2NhcmQgYmxvY2tzIGFjcm9zcyB0aGUgb3JpZ2luLgorICovCisjZGVmaW5lIE1BWF9ESVNDQVJEX0JMT0NLUyAoMSA8PCAxNCkKKworc3RhdGljIGJvb2wgdG9vX21hbnlfZGlzY2FyZF9ibG9ja3Moc2VjdG9yX3QgZGlzY2FyZF9ibG9ja19zaXplLAorCQkJCSAgICBzZWN0b3JfdCBvcmlnaW5fc2l6ZSkKK3sKKwkodm9pZCkgc2VjdG9yX2RpdihvcmlnaW5fc2l6ZSwgZGlzY2FyZF9ibG9ja19zaXplKTsKKworCXJldHVybiBvcmlnaW5fc2l6ZSA+IE1BWF9ESVNDQVJEX0JMT0NLUzsKK30KKworc3RhdGljIHNlY3Rvcl90IGNhbGN1bGF0ZV9kaXNjYXJkX2Jsb2NrX3NpemUoc2VjdG9yX3QgY2FjaGVfYmxvY2tfc2l6ZSwKKwkJCQkJICAgICBzZWN0b3JfdCBvcmlnaW5fc2l6ZSkKK3sKKwlzZWN0b3JfdCBkaXNjYXJkX2Jsb2NrX3NpemUgPSBjYWNoZV9ibG9ja19zaXplOworCisJaWYgKG9yaWdpbl9zaXplKQorCQl3aGlsZSAodG9vX21hbnlfZGlzY2FyZF9ibG9ja3MoZGlzY2FyZF9ibG9ja19zaXplLCBvcmlnaW5fc2l6ZSkpCisJCQlkaXNjYXJkX2Jsb2NrX3NpemUgKj0gMjsKKworCXJldHVybiBkaXNjYXJkX2Jsb2NrX3NpemU7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jYWNoZV9zaXplKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX2NibG9ja190IHNpemUpCit7CisJZG1fYmxvY2tfdCBucl9ibG9ja3MgPSBmcm9tX2NibG9jayhzaXplKTsKKworCWlmIChucl9ibG9ja3MgPiAoMSA8PCAyMCkgJiYgY2FjaGUtPmNhY2hlX3NpemUgIT0gc2l6ZSkKKwkJRE1XQVJOX0xJTUlUKCJZb3UgaGF2ZSBjcmVhdGVkIGEgY2FjaGUgZGV2aWNlIHdpdGggYSBsb3Qgb2YgaW5kaXZpZHVhbCBjYWNoZSBibG9ja3MgKCVsbHUpXG4iCisJCQkgICAgICJBbGwgdGhlc2UgbWFwcGluZ3MgY2FuIGNvbnN1bWUgYSBsb3Qgb2Yga2VybmVsIG1lbW9yeSwgYW5kIHRha2Ugc29tZSB0aW1lIHRvIHJlYWQvd3JpdGUuXG4iCisJCQkgICAgICJQbGVhc2UgY29uc2lkZXIgaW5jcmVhc2luZyB0aGUgY2FjaGUgYmxvY2sgc2l6ZSB0byByZWR1Y2UgdGhlIG92ZXJhbGwgY2FjaGUgYmxvY2sgY291bnQuIiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbnJfYmxvY2tzKTsKKworCWNhY2hlLT5jYWNoZV9zaXplID0gc2l6ZTsKK30KKwogI2RlZmluZSBERUZBVUxUX01JR1JBVElPTl9USFJFU0hPTEQgMjA0OAogCiBzdGF0aWMgaW50IGNhY2hlX2NyZWF0ZShzdHJ1Y3QgY2FjaGVfYXJncyAqY2EsIHN0cnVjdCBjYWNoZSAqKnJlc3VsdCkKQEAgLTIyMDQsOCArMjM0Miw3IEBACiAJdGktPm51bV9kaXNjYXJkX2Jpb3MgPSAxOwogCXRpLT5kaXNjYXJkc19zdXBwb3J0ZWQgPSB0cnVlOwogCXRpLT5kaXNjYXJkX3plcm9lc19kYXRhX3Vuc3VwcG9ydGVkID0gdHJ1ZTsKLQkvKiBEaXNjYXJkIGJpb3MgbXVzdCBiZSBzcGxpdCBvbiBhIGJsb2NrIGJvdW5kYXJ5ICovCi0JdGktPnNwbGl0X2Rpc2NhcmRfYmlvcyA9IHRydWU7CisJdGktPnNwbGl0X2Rpc2NhcmRfYmlvcyA9IGZhbHNlOwogCiAJY2FjaGUtPmZlYXR1cmVzID0gY2EtPmZlYXR1cmVzOwogCXRpLT5wZXJfYmlvX2RhdGFfc2l6ZSA9IGdldF9wZXJfYmlvX2RhdGFfc2l6ZShjYWNoZSk7CkBAIC0yMjM1LDEwICsyMzcyLDEwIEBACiAKIAkJY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrX3NoaWZ0ID0gLTE7CiAJCWNhY2hlX3NpemUgPSBibG9ja19kaXYoY2FjaGVfc2l6ZSwgY2EtPmJsb2NrX3NpemUpOwotCQljYWNoZS0+Y2FjaGVfc2l6ZSA9IHRvX2NibG9jayhjYWNoZV9zaXplKTsKKwkJc2V0X2NhY2hlX3NpemUoY2FjaGUsIHRvX2NibG9jayhjYWNoZV9zaXplKSk7CiAJfSBlbHNlIHsKIAkJY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrX3NoaWZ0ID0gX19mZnMoY2EtPmJsb2NrX3NpemUpOwotCQljYWNoZS0+Y2FjaGVfc2l6ZSA9IHRvX2NibG9jayhjYS0+Y2FjaGVfc2VjdG9ycyA+PiBjYWNoZS0+c2VjdG9yc19wZXJfYmxvY2tfc2hpZnQpOworCQlzZXRfY2FjaGVfc2l6ZShjYWNoZSwgdG9fY2Jsb2NrKGNhLT5jYWNoZV9zZWN0b3JzID4+IGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9ja19zaGlmdCkpOwogCX0KIAogCXIgPSBjcmVhdGVfY2FjaGVfcG9saWN5KGNhY2hlLCBjYSwgZXJyb3IpOwpAQCAtMjMwMywxMyArMjQ0MCwxNyBAQAogCX0KIAljbGVhcl9iaXRzZXQoY2FjaGUtPmRpcnR5X2JpdHNldCwgZnJvbV9jYmxvY2soY2FjaGUtPmNhY2hlX3NpemUpKTsKIAotCWNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcyA9IGNhY2hlLT5vcmlnaW5fYmxvY2tzOwotCWNhY2hlLT5kaXNjYXJkX2JpdHNldCA9IGFsbG9jX2JpdHNldChmcm9tX29ibG9jayhjYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MpKTsKKwljYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplID0KKwkJY2FsY3VsYXRlX2Rpc2NhcmRfYmxvY2tfc2l6ZShjYWNoZS0+c2VjdG9yc19wZXJfYmxvY2ssCisJCQkJCSAgICAgY2FjaGUtPm9yaWdpbl9zZWN0b3JzKTsKKwljYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MgPSB0b19kYmxvY2soZG1fc2VjdG9yX2Rpdl91cChjYWNoZS0+b3JpZ2luX3NlY3RvcnMsCisJCQkJCQkJICAgICAgY2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSkpOworCWNhY2hlLT5kaXNjYXJkX2JpdHNldCA9IGFsbG9jX2JpdHNldChmcm9tX2RibG9jayhjYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MpKTsKIAlpZiAoIWNhY2hlLT5kaXNjYXJkX2JpdHNldCkgewogCQkqZXJyb3IgPSAiY291bGQgbm90IGFsbG9jYXRlIGRpc2NhcmQgYml0c2V0IjsKIAkJZ290byBiYWQ7CiAJfQotCWNsZWFyX2JpdHNldChjYWNoZS0+ZGlzY2FyZF9iaXRzZXQsIGZyb21fb2Jsb2NrKGNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcykpOworCWNsZWFyX2JpdHNldChjYWNoZS0+ZGlzY2FyZF9iaXRzZXQsIGZyb21fZGJsb2NrKGNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcykpOwogCiAJY2FjaGUtPmNvcGllciA9IGRtX2tjb3B5ZF9jbGllbnRfY3JlYXRlKCZkbV9rY29weWRfdGhyb3R0bGUpOwogCWlmIChJU19FUlIoY2FjaGUtPmNvcGllcikpIHsKQEAgLTIzMjcsNyArMjQ2OCw3IEBACiAJSU5JVF9ERUxBWUVEX1dPUksoJmNhY2hlLT53YWtlciwgZG9fd2FrZXIpOwogCWNhY2hlLT5sYXN0X2NvbW1pdF9qaWZmaWVzID0gamlmZmllczsKIAotCWNhY2hlLT5wcmlzb24gPSBkbV9iaW9fcHJpc29uX2NyZWF0ZShQUklTT05fQ0VMTFMpOworCWNhY2hlLT5wcmlzb24gPSBkbV9iaW9fcHJpc29uX2NyZWF0ZSgpOwogCWlmICghY2FjaGUtPnByaXNvbikgewogCQkqZXJyb3IgPSAiY291bGQgbm90IGNyZWF0ZSBiaW8gcHJpc29uIjsKIAkJZ290byBiYWQ7CkBAIC0yNTQ5LDExICsyNjkwLDExIEBACiBzdGF0aWMgaW50IGNhY2hlX21hcChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvKQogewogCWludCByOwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGw7CisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCA9IE5VTEw7CiAJc3RydWN0IGNhY2hlICpjYWNoZSA9IHRpLT5wcml2YXRlOwogCiAJciA9IF9fY2FjaGVfbWFwKGNhY2hlLCBiaW8sICZjZWxsKTsKLQlpZiAociA9PSBETV9NQVBJT19SRU1BUFBFRCkgeworCWlmIChyID09IERNX01BUElPX1JFTUFQUEVEICYmIGNlbGwpIHsKIAkJaW5jX2RzKGNhY2hlLCBiaW8sIGNlbGwpOwogCQljZWxsX2RlZmVyKGNhY2hlLCBjZWxsLCBmYWxzZSk7CiAJfQpAQCAtMjU5OSwxNiArMjc0MCwxNiBAQAogewogCXVuc2lnbmVkIGksIHI7CiAKLQlyID0gZG1fY2FjaGVfZGlzY2FyZF9iaXRzZXRfcmVzaXplKGNhY2hlLT5jbWQsIGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9jaywKLQkJCQkJICAgY2FjaGUtPm9yaWdpbl9ibG9ja3MpOworCXIgPSBkbV9jYWNoZV9kaXNjYXJkX2JpdHNldF9yZXNpemUoY2FjaGUtPmNtZCwgY2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSwKKwkJCQkJICAgY2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKTsKIAlpZiAocikgewogCQlETUVSUigiY291bGQgbm90IHJlc2l6ZSBvbi1kaXNrIGRpc2NhcmQgYml0c2V0Iik7CiAJCXJldHVybiByOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBmcm9tX29ibG9jayhjYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MpOyBpKyspIHsKLQkJciA9IGRtX2NhY2hlX3NldF9kaXNjYXJkKGNhY2hlLT5jbWQsIHRvX29ibG9jayhpKSwKLQkJCQkJIGlzX2Rpc2NhcmRlZChjYWNoZSwgdG9fb2Jsb2NrKGkpKSk7CisJZm9yIChpID0gMDsgaSA8IGZyb21fZGJsb2NrKGNhY2hlLT5kaXNjYXJkX25yX2Jsb2Nrcyk7IGkrKykgeworCQlyID0gZG1fY2FjaGVfc2V0X2Rpc2NhcmQoY2FjaGUtPmNtZCwgdG9fZGJsb2NrKGkpLAorCQkJCQkgaXNfZGlzY2FyZGVkKGNhY2hlLCB0b19kYmxvY2soaSkpKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAl9CkBAIC0yNjgwLDE1ICsyODIxLDg2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbG9hZF9kaXNjYXJkKHZvaWQgKmNvbnRleHQsIHNlY3Rvcl90IGRpc2NhcmRfYmxvY2tfc2l6ZSwKLQkJCWRtX29ibG9ja190IG9ibG9jaywgYm9vbCBkaXNjYXJkKQotewotCXN0cnVjdCBjYWNoZSAqY2FjaGUgPSBjb250ZXh0OworLyoKKyAqIFRoZSBkaXNjYXJkIGJsb2NrIHNpemUgaW4gdGhlIG9uIGRpc2sgbWV0YWRhdGEgaXMgbm90CisgKiBuZWNjZXNzYXJpbHkgdGhlIHNhbWUgYXMgd2UncmUgY3VycmVudGx5IHVzaW5nLiAgU28gd2UgaGF2ZSB0bworICogYmUgY2FyZWZ1bCB0byBvbmx5IHNldCB0aGUgZGlzY2FyZGVkIGF0dHJpYnV0ZSBpZiB3ZSBrbm93IGl0CisgKiBjb3ZlcnMgYSBjb21wbGV0ZSBibG9jayBvZiB0aGUgbmV3IHNpemUuCisgKi8KK3N0cnVjdCBkaXNjYXJkX2xvYWRfaW5mbyB7CisJc3RydWN0IGNhY2hlICpjYWNoZTsKIAotCWlmIChkaXNjYXJkKQotCQlzZXRfZGlzY2FyZChjYWNoZSwgb2Jsb2NrKTsKLQllbHNlCi0JCWNsZWFyX2Rpc2NhcmQoY2FjaGUsIG9ibG9jayk7CisJLyoKKwkgKiBUaGVzZSBibG9ja3MgYXJlIHNpemVkIHVzaW5nIHRoZSBvbiBkaXNrIGRibG9jayBzaXplLCByYXRoZXIKKwkgKiB0aGFuIHRoZSBjdXJyZW50IG9uZS4KKwkgKi8KKwlkbV9ibG9ja190IGJsb2NrX3NpemU7CisJZG1fYmxvY2tfdCBkaXNjYXJkX2JlZ2luLCBkaXNjYXJkX2VuZDsKK307CisKK3N0YXRpYyB2b2lkIGRpc2NhcmRfbG9hZF9pbmZvX2luaXQoc3RydWN0IGNhY2hlICpjYWNoZSwKKwkJCQkgICBzdHJ1Y3QgZGlzY2FyZF9sb2FkX2luZm8gKmxpKQoreworCWxpLT5jYWNoZSA9IGNhY2hlOworCWxpLT5kaXNjYXJkX2JlZ2luID0gbGktPmRpc2NhcmRfZW5kID0gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X2Rpc2NhcmRfcmFuZ2Uoc3RydWN0IGRpc2NhcmRfbG9hZF9pbmZvICpsaSkKK3sKKwlzZWN0b3JfdCBiLCBlOworCisJaWYgKGxpLT5kaXNjYXJkX2JlZ2luID09IGxpLT5kaXNjYXJkX2VuZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDb252ZXJ0IHRvIHNlY3RvcnMuCisJICovCisJYiA9IGxpLT5kaXNjYXJkX2JlZ2luICogbGktPmJsb2NrX3NpemU7CisJZSA9IGxpLT5kaXNjYXJkX2VuZCAqIGxpLT5ibG9ja19zaXplOworCisJLyoKKwkgKiBUaGVuIGNvbnZlcnQgYmFjayB0byB0aGUgY3VycmVudCBkYmxvY2sgc2l6ZS4KKwkgKi8KKwliID0gZG1fc2VjdG9yX2Rpdl91cChiLCBsaS0+Y2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSk7CisJc2VjdG9yX2RpdihlLCBsaS0+Y2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSk7CisKKwkvKgorCSAqIFRoZSBvcmlnaW4gbWF5IGhhdmUgc2hydW5rLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIHdlJ3JlIHN0aWxsIGluCisJICogYm91bmRzLgorCSAqLworCWlmIChlID4gZnJvbV9kYmxvY2sobGktPmNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcykpCisJCWUgPSBmcm9tX2RibG9jayhsaS0+Y2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKTsKKworCWZvciAoOyBiIDwgZTsgYisrKQorCQlzZXRfZGlzY2FyZChsaS0+Y2FjaGUsIHRvX2RibG9jayhiKSk7Cit9CisKK3N0YXRpYyBpbnQgbG9hZF9kaXNjYXJkKHZvaWQgKmNvbnRleHQsIHNlY3Rvcl90IGRpc2NhcmRfYmxvY2tfc2l6ZSwKKwkJCWRtX2RibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKQoreworCXN0cnVjdCBkaXNjYXJkX2xvYWRfaW5mbyAqbGkgPSBjb250ZXh0OworCisJbGktPmJsb2NrX3NpemUgPSBkaXNjYXJkX2Jsb2NrX3NpemU7CisKKwlpZiAoZGlzY2FyZCkgeworCQlpZiAoZnJvbV9kYmxvY2soZGJsb2NrKSA9PSBsaS0+ZGlzY2FyZF9lbmQpCisJCQkvKgorCQkJICogV2UncmUgYWxyZWFkeSBpbiBhIGRpc2NhcmQgcmFuZ2UsIGp1c3QgZXh0ZW5kIGl0LgorCQkJICovCisJCQlsaS0+ZGlzY2FyZF9lbmQgPSBsaS0+ZGlzY2FyZF9lbmQgKyAxVUxMOworCisJCWVsc2UgeworCQkJLyoKKwkJCSAqIEVtaXQgdGhlIG9sZCByYW5nZSBhbmQgc3RhcnQgYSBuZXcgb25lLgorCQkJICovCisJCQlzZXRfZGlzY2FyZF9yYW5nZShsaSk7CisJCQlsaS0+ZGlzY2FyZF9iZWdpbiA9IGZyb21fZGJsb2NrKGRibG9jayk7CisJCQlsaS0+ZGlzY2FyZF9lbmQgPSBsaS0+ZGlzY2FyZF9iZWdpbiArIDFVTEw7CisJCX0KKwl9IGVsc2UgeworCQlzZXRfZGlzY2FyZF9yYW5nZShsaSk7CisJCWxpLT5kaXNjYXJkX2JlZ2luID0gbGktPmRpc2NhcmRfZW5kID0gMDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3MzAsNyArMjk0Miw3IEBACiAJCXJldHVybiByOwogCX0KIAotCWNhY2hlLT5jYWNoZV9zaXplID0gbmV3X3NpemU7CisJc2V0X2NhY2hlX3NpemUoY2FjaGUsIG5ld19zaXplKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjc3MiwxMSArMjk4NCwyMiBAQAogCX0KIAogCWlmICghY2FjaGUtPmxvYWRlZF9kaXNjYXJkcykgewotCQlyID0gZG1fY2FjaGVfbG9hZF9kaXNjYXJkcyhjYWNoZS0+Y21kLCBsb2FkX2Rpc2NhcmQsIGNhY2hlKTsKKwkJc3RydWN0IGRpc2NhcmRfbG9hZF9pbmZvIGxpOworCisJCS8qCisJCSAqIFRoZSBkaXNjYXJkIGJpdHNldCBjb3VsZCBoYXZlIGJlZW4gcmVzaXplZCwgb3IgdGhlCisJCSAqIGRpc2NhcmQgYmxvY2sgc2l6ZSBjaGFuZ2VkLiAgVG8gYmUgc2FmZSB3ZSBzdGFydCBieQorCQkgKiBzZXR0aW5nIGV2ZXJ5IGRibG9jayB0byBub3QgZGlzY2FyZGVkLgorCQkgKi8KKwkJY2xlYXJfYml0c2V0KGNhY2hlLT5kaXNjYXJkX2JpdHNldCwgZnJvbV9kYmxvY2soY2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CisKKwkJZGlzY2FyZF9sb2FkX2luZm9faW5pdChjYWNoZSwgJmxpKTsKKwkJciA9IGRtX2NhY2hlX2xvYWRfZGlzY2FyZHMoY2FjaGUtPmNtZCwgbG9hZF9kaXNjYXJkLCAmbGkpOwogCQlpZiAocikgewogCQkJRE1FUlIoImNvdWxkIG5vdCBsb2FkIG9yaWdpbiBkaXNjYXJkcyIpOwogCQkJcmV0dXJuIHI7CiAJCX0KKwkJc2V0X2Rpc2NhcmRfcmFuZ2UoJmxpKTsKIAogCQljYWNoZS0+bG9hZGVkX2Rpc2NhcmRzID0gdHJ1ZTsKIAl9CkBAIC0zMDc5LDggKzMzMDIsOSBAQAogCS8qCiAJICogRklYTUU6IHRoZXNlIGxpbWl0cyBtYXkgYmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIGNhY2hlIGRldmljZQogCSAqLwotCWxpbWl0cy0+bWF4X2Rpc2NhcmRfc2VjdG9ycyA9IGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9jazsKLQlsaW1pdHMtPmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSBjYWNoZS0+c2VjdG9yc19wZXJfYmxvY2sgPDwgU0VDVE9SX1NISUZUOworCWxpbWl0cy0+bWF4X2Rpc2NhcmRfc2VjdG9ycyA9IG1pbl90KHNlY3Rvcl90LCBjYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplICogMTAyNCwKKwkJCQkJICAgIGNhY2hlLT5vcmlnaW5fc2VjdG9ycyk7CisJbGltaXRzLT5kaXNjYXJkX2dyYW51bGFyaXR5ID0gY2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSA8PCBTRUNUT1JfU0hJRlQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNhY2hlX2lvX2hpbnRzKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1pdHMpCkBAIC0zMTA0LDcgKzMzMjgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIGNhY2hlX3RhcmdldCA9IHsKIAkubmFtZSA9ICJjYWNoZSIsCi0JLnZlcnNpb24gPSB7MSwgNSwgMH0sCisJLnZlcnNpb24gPSB7MSwgNiwgMH0sCiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogCS5jdHIgPSBjYWNoZV9jdHIsCiAJLmR0ciA9IGNhY2hlX2R0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwppbmRleCBmYzkzYjkzLi4wODk4MWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMKKysrIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCkBAIC03MDUsNyArNzA1LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgKCgxIDw8IFNFQ1RPUl9TSElGVCkgLyA4KTsgaSsrKQogCQljcnlwdG9feG9yKGRhdGEgKyBpICogOCwgYnVmLCA4KTsKIG91dDoKLQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJbWVtemVyb19leHBsaWNpdChidWYsIHNpemVvZihidWYpKTsKIAlyZXR1cm4gcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCmluZGV4IDBiZTkzODEuLjczZjc5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYworKysgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKQEAgLTY4NCwxMSArNjg0LDE0IEBACiAJaW50IHNyY3VfaWR4OwogCiAJcGFyYW0tPmZsYWdzICY9IH4oRE1fU1VTUEVORF9GTEFHIHwgRE1fUkVBRE9OTFlfRkxBRyB8Ci0JCQkgIERNX0FDVElWRV9QUkVTRU5UX0ZMQUcpOworCQkJICBETV9BQ1RJVkVfUFJFU0VOVF9GTEFHIHwgRE1fSU5URVJOQUxfU1VTUEVORF9GTEFHKTsKIAogCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKQogCQlwYXJhbS0+ZmxhZ3MgfD0gRE1fU1VTUEVORF9GTEFHOwogCisJaWYgKGRtX3N1c3BlbmRlZF9pbnRlcm5hbGx5X21kKG1kKSkKKwkJcGFyYW0tPmZsYWdzIHw9IERNX0lOVEVSTkFMX1NVU1BFTkRfRkxBRzsKKwogCWlmIChkbV90ZXN0X2RlZmVycmVkX3JlbW92ZV9mbGFnKG1kKSkKIAkJcGFyYW0tPmZsYWdzIHw9IERNX0RFRkVSUkVEX1JFTU9WRTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zdGF0cy5jIGIvZHJpdmVycy9tZC9kbS1zdGF0cy5jCmluZGV4IDg3Zjg2YzcuLmY0NzhhNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc3RhdHMuYworKysgYi9kcml2ZXJzL21kL2RtLXN0YXRzLmMKQEAgLTgyNCw3ICs4MjQsNyBAQAogCQlyZXR1cm4gMTsKIAogCWlkID0gZG1fc3RhdHNfY3JlYXRlKGRtX2dldF9zdGF0cyhtZCksIHN0YXJ0LCBlbmQsIHN0ZXAsIHByb2dyYW1faWQsIGF1eF9kYXRhLAotCQkJICAgICBkbV9pbnRlcm5hbF9zdXNwZW5kLCBkbV9pbnRlcm5hbF9yZXN1bWUsIG1kKTsKKwkJCSAgICAgZG1faW50ZXJuYWxfc3VzcGVuZF9mYXN0LCBkbV9pbnRlcm5hbF9yZXN1bWVfZmFzdCwgbWQpOwogCWlmIChpZCA8IDApCiAJCXJldHVybiBpZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10YWJsZS5jIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCmluZGV4IGIyYmQxZWIuLjNhZmFlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYworKysgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKQEAgLTE1MjEsMTggKzE1MjEsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1fdGFibGVfZ2V0X21vZGUpOwogCi1zdGF0aWMgdm9pZCBzdXNwZW5kX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0LCB1bnNpZ25lZCBwb3N0c3VzcGVuZCkKK2VudW0gc3VzcGVuZF9tb2RlIHsKKwlQUkVTVVNQRU5ELAorCVBSRVNVU1BFTkRfVU5ETywKKwlQT1NUU1VTUEVORCwKK307CisKK3N0YXRpYyB2b2lkIHN1c3BlbmRfdGFyZ2V0cyhzdHJ1Y3QgZG1fdGFibGUgKnQsIGVudW0gc3VzcGVuZF9tb2RlIG1vZGUpCiB7CiAJaW50IGkgPSB0LT5udW1fdGFyZ2V0czsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSA9IHQtPnRhcmdldHM7CiAKIAl3aGlsZSAoaS0tKSB7Ci0JCWlmIChwb3N0c3VzcGVuZCkgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBQUkVTVVNQRU5EOgorCQkJaWYgKHRpLT50eXBlLT5wcmVzdXNwZW5kKQorCQkJCXRpLT50eXBlLT5wcmVzdXNwZW5kKHRpKTsKKwkJCWJyZWFrOworCQljYXNlIFBSRVNVU1BFTkRfVU5ETzoKKwkJCWlmICh0aS0+dHlwZS0+cHJlc3VzcGVuZF91bmRvKQorCQkJCXRpLT50eXBlLT5wcmVzdXNwZW5kX3VuZG8odGkpOworCQkJYnJlYWs7CisJCWNhc2UgUE9TVFNVU1BFTkQ6CiAJCQlpZiAodGktPnR5cGUtPnBvc3RzdXNwZW5kKQogCQkJCXRpLT50eXBlLT5wb3N0c3VzcGVuZCh0aSk7Ci0JCX0gZWxzZSBpZiAodGktPnR5cGUtPnByZXN1c3BlbmQpCi0JCQl0aS0+dHlwZS0+cHJlc3VzcGVuZCh0aSk7Ci0KKwkJCWJyZWFrOworCQl9CiAJCXRpKys7CiAJfQogfQpAQCAtMTU0Miw3ICsxNTU2LDE1IEBACiAJaWYgKCF0KQogCQlyZXR1cm47CiAKLQlzdXNwZW5kX3RhcmdldHModCwgMCk7CisJc3VzcGVuZF90YXJnZXRzKHQsIFBSRVNVU1BFTkQpOworfQorCit2b2lkIGRtX3RhYmxlX3ByZXN1c3BlbmRfdW5kb190YXJnZXRzKHN0cnVjdCBkbV90YWJsZSAqdCkKK3sKKwlpZiAoIXQpCisJCXJldHVybjsKKworCXN1c3BlbmRfdGFyZ2V0cyh0LCBQUkVTVVNQRU5EX1VORE8pOwogfQogCiB2b2lkIGRtX3RhYmxlX3Bvc3RzdXNwZW5kX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0KQpAQCAtMTU1MCw3ICsxNTcyLDcgQEAKIAlpZiAoIXQpCiAJCXJldHVybjsKIAotCXN1c3BlbmRfdGFyZ2V0cyh0LCAxKTsKKwlzdXNwZW5kX3RhcmdldHModCwgUE9TVFNVU1BFTkQpOwogfQogCiBpbnQgZG1fdGFibGVfcmVzdW1lX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmMgYi9kcml2ZXJzL21kL2RtLXRoaW4tbWV0YWRhdGEuYwppbmRleCBlOWQzM2FkLi40M2FkYmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRoaW4tbWV0YWRhdGEuYworKysgYi9kcml2ZXJzL21kL2RtLXRoaW4tbWV0YWRhdGEuYwpAQCAtMTM4NCw0MiArMTM4NCwzOCBAQAogfQogCiBpbnQgZG1fdGhpbl9maW5kX2Jsb2NrKHN0cnVjdCBkbV90aGluX2RldmljZSAqdGQsIGRtX2Jsb2NrX3QgYmxvY2ssCi0JCSAgICAgICBpbnQgY2FuX2Jsb2NrLCBzdHJ1Y3QgZG1fdGhpbl9sb29rdXBfcmVzdWx0ICpyZXN1bHQpCisJCSAgICAgICBpbnQgY2FuX2lzc3VlX2lvLCBzdHJ1Y3QgZG1fdGhpbl9sb29rdXBfcmVzdWx0ICpyZXN1bHQpCiB7Ci0JaW50IHIgPSAtRUlOVkFMOwotCXVpbnQ2NF90IGJsb2NrX3RpbWUgPSAwOworCWludCByOwogCV9fbGU2NCB2YWx1ZTsKIAlzdHJ1Y3QgZG1fcG9vbF9tZXRhZGF0YSAqcG1kID0gdGQtPnBtZDsKIAlkbV9ibG9ja190IGtleXNbMl0gPSB7IHRkLT5pZCwgYmxvY2sgfTsKIAlzdHJ1Y3QgZG1fYnRyZWVfaW5mbyAqaW5mbzsKIAotCWlmIChjYW5fYmxvY2spIHsKLQkJZG93bl9yZWFkKCZwbWQtPnJvb3RfbG9jayk7Ci0JCWluZm8gPSAmcG1kLT5pbmZvOwotCX0gZWxzZSBpZiAoZG93bl9yZWFkX3RyeWxvY2soJnBtZC0+cm9vdF9sb2NrKSkKLQkJaW5mbyA9ICZwbWQtPm5iX2luZm87Ci0JZWxzZQotCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCiAJaWYgKHBtZC0+ZmFpbF9pbykKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRUlOVkFMOworCisJZG93bl9yZWFkKCZwbWQtPnJvb3RfbG9jayk7CisKKwlpZiAoY2FuX2lzc3VlX2lvKSB7CisJCWluZm8gPSAmcG1kLT5pbmZvOworCX0gZWxzZQorCQlpbmZvID0gJnBtZC0+bmJfaW5mbzsKIAogCXIgPSBkbV9idHJlZV9sb29rdXAoaW5mbywgcG1kLT5yb290LCBrZXlzLCAmdmFsdWUpOwotCWlmICghcikKLQkJYmxvY2tfdGltZSA9IGxlNjRfdG9fY3B1KHZhbHVlKTsKLQotb3V0OgotCXVwX3JlYWQoJnBtZC0+cm9vdF9sb2NrKTsKLQogCWlmICghcikgeworCQl1aW50NjRfdCBibG9ja190aW1lID0gMDsKIAkJZG1fYmxvY2tfdCBleGNlcHRpb25fYmxvY2s7CiAJCXVpbnQzMl90IGV4Y2VwdGlvbl90aW1lOworCisJCWJsb2NrX3RpbWUgPSBsZTY0X3RvX2NwdSh2YWx1ZSk7CiAJCXVucGFja19ibG9ja190aW1lKGJsb2NrX3RpbWUsICZleGNlcHRpb25fYmxvY2ssCiAJCQkJICAmZXhjZXB0aW9uX3RpbWUpOwogCQlyZXN1bHQtPmJsb2NrID0gZXhjZXB0aW9uX2Jsb2NrOwogCQlyZXN1bHQtPnNoYXJlZCA9IF9fc25hcHNob3R0ZWRfc2luY2UodGQsIGV4Y2VwdGlvbl90aW1lKTsKIAl9CiAKKwl1cF9yZWFkKCZwbWQtPnJvb3RfbG9jayk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE4MTMsMyArMTgwOSw4IEBACiAKIAlyZXR1cm4gbmVlZHNfY2hlY2s7CiB9CisKK3ZvaWQgZG1fcG9vbF9pc3N1ZV9wcmVmZXRjaGVzKHN0cnVjdCBkbV9wb29sX21ldGFkYXRhICpwbWQpCit7CisJZG1fdG1faXNzdWVfcHJlZmV0Y2hlcyhwbWQtPnRtKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGhpbi1tZXRhZGF0YS5oIGIvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmgKaW5kZXggZTNjODU3ZC4uOTIxZDE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmgKKysrIGIvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmgKQEAgLTEzOSwxMiArMTM5LDEyIEBACiAKIC8qCiAgKiBSZXR1cm5zOgotICogICAtRVdPVUxEQkxPQ0sgaWZmIEBjYW5fYmxvY2sgaXMgc2V0IGFuZCB3b3VsZCBibG9jay4KKyAqICAgLUVXT1VMREJMT0NLIGlmZiBAY2FuX2lzc3VlX2lvIGlzIHNldCBhbmQgd291bGQgaXNzdWUgSU8KICAqICAgLUVOT0RBVEEgaWZmIHRoYXQgbWFwcGluZyBpcyBub3QgcHJlc2VudC4KICAqICAgMCBzdWNjZXNzCiAgKi8KIGludCBkbV90aGluX2ZpbmRfYmxvY2soc3RydWN0IGRtX3RoaW5fZGV2aWNlICp0ZCwgZG1fYmxvY2tfdCBibG9jaywKLQkJICAgICAgIGludCBjYW5fYmxvY2ssIHN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgKnJlc3VsdCk7CisJCSAgICAgICBpbnQgY2FuX2lzc3VlX2lvLCBzdHJ1Y3QgZG1fdGhpbl9sb29rdXBfcmVzdWx0ICpyZXN1bHQpOwogCiAvKgogICogT2J0YWluIGFuIHVudXNlZCBibG9jay4KQEAgLTIxMyw2ICsyMTMsMTEgQEAKIGludCBkbV9wb29sX21ldGFkYXRhX3NldF9uZWVkc19jaGVjayhzdHJ1Y3QgZG1fcG9vbF9tZXRhZGF0YSAqcG1kKTsKIGJvb2wgZG1fcG9vbF9tZXRhZGF0YV9uZWVkc19jaGVjayhzdHJ1Y3QgZG1fcG9vbF9tZXRhZGF0YSAqcG1kKTsKIAorLyoKKyAqIElzc3VlIGFueSBwcmVmZXRjaGVzIHRoYXQgbWF5IGJlIHVzZWZ1bC4KKyAqLwordm9pZCBkbV9wb29sX2lzc3VlX3ByZWZldGNoZXMoc3RydWN0IGRtX3Bvb2xfbWV0YWRhdGEgKnBtZCk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10aGluLmMgYi9kcml2ZXJzL21kL2RtLXRoaW4uYwppbmRleCAwZjg2ZDgwLi44NzM1NTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRoaW4uYworKysgYi9kcml2ZXJzL21kL2RtLXRoaW4uYwpAQCAtMTEsMTEgKzExLDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWlvLmg+CiAjaW5jbHVkZSA8bGludXgvZG0ta2NvcHlkLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAKICNkZWZpbmUJRE1fTVNHX1BSRUZJWAkidGhpbiIKQEAgLTI1LDcgKzI3LDYgQEAKICAqLwogI2RlZmluZSBFTkRJT19IT09LX1BPT0xfU0laRSAxMDI0CiAjZGVmaW5lIE1BUFBJTkdfUE9PTF9TSVpFIDEwMjQKLSNkZWZpbmUgUFJJU09OX0NFTExTIDEwMjQKICNkZWZpbmUgQ09NTUlUX1BFUklPRCBIWgogI2RlZmluZSBOT19TUEFDRV9USU1FT1VUX1NFQ1MgNjAKIApAQCAtMTE0LDcgKzExNSw4IEBACiB7CiAJa2V5LT52aXJ0dWFsID0gMDsKIAlrZXktPmRldiA9IGRtX3RoaW5fZGV2X2lkKHRkKTsKLQlrZXktPmJsb2NrID0gYjsKKwlrZXktPmJsb2NrX2JlZ2luID0gYjsKKwlrZXktPmJsb2NrX2VuZCA9IGIgKyAxVUxMOwogfQogCiBzdGF0aWMgdm9pZCBidWlsZF92aXJ0dWFsX2tleShzdHJ1Y3QgZG1fdGhpbl9kZXZpY2UgKnRkLCBkbV9ibG9ja190IGIsCkBAIC0xMjIsNyArMTI0LDU1IEBACiB7CiAJa2V5LT52aXJ0dWFsID0gMTsKIAlrZXktPmRldiA9IGRtX3RoaW5fZGV2X2lkKHRkKTsKLQlrZXktPmJsb2NrID0gYjsKKwlrZXktPmJsb2NrX2JlZ2luID0gYjsKKwlrZXktPmJsb2NrX2VuZCA9IGIgKyAxVUxMOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFRIUk9UVExFX1RIUkVTSE9MRCAoMSAqIEhaKQorCitzdHJ1Y3QgdGhyb3R0bGUgeworCXN0cnVjdCByd19zZW1hcGhvcmUgbG9jazsKKwl1bnNpZ25lZCBsb25nIHRocmVzaG9sZDsKKwlib29sIHRocm90dGxlX2FwcGxpZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0aHJvdHRsZV9pbml0KHN0cnVjdCB0aHJvdHRsZSAqdCkKK3sKKwlpbml0X3J3c2VtKCZ0LT5sb2NrKTsKKwl0LT50aHJvdHRsZV9hcHBsaWVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX3dvcmtfc3RhcnQoc3RydWN0IHRocm90dGxlICp0KQoreworCXQtPnRocmVzaG9sZCA9IGppZmZpZXMgKyBUSFJPVFRMRV9USFJFU0hPTEQ7Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX3dvcmtfdXBkYXRlKHN0cnVjdCB0aHJvdHRsZSAqdCkKK3sKKwlpZiAoIXQtPnRocm90dGxlX2FwcGxpZWQgJiYgamlmZmllcyA+IHQtPnRocmVzaG9sZCkgeworCQlkb3duX3dyaXRlKCZ0LT5sb2NrKTsKKwkJdC0+dGhyb3R0bGVfYXBwbGllZCA9IHRydWU7CisJfQorfQorCitzdGF0aWMgdm9pZCB0aHJvdHRsZV93b3JrX2NvbXBsZXRlKHN0cnVjdCB0aHJvdHRsZSAqdCkKK3sKKwlpZiAodC0+dGhyb3R0bGVfYXBwbGllZCkgeworCQl0LT50aHJvdHRsZV9hcHBsaWVkID0gZmFsc2U7CisJCXVwX3dyaXRlKCZ0LT5sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX2xvY2soc3RydWN0IHRocm90dGxlICp0KQoreworCWRvd25fcmVhZCgmdC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX3VubG9jayhzdHJ1Y3QgdGhyb3R0bGUgKnQpCit7CisJdXBfcmVhZCgmdC0+bG9jayk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNTUsOCArMjA1LDExIEBACiAKIHN0cnVjdCB0aGluX2M7CiB0eXBlZGVmIHZvaWQgKCpwcm9jZXNzX2Jpb19mbikoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbyk7Cit0eXBlZGVmIHZvaWQgKCpwcm9jZXNzX2NlbGxfZm4pKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKTsKIHR5cGVkZWYgdm9pZCAoKnByb2Nlc3NfbWFwcGluZ19mbikoc3RydWN0IGRtX3RoaW5fbmV3X21hcHBpbmcgKm0pOwogCisjZGVmaW5lIENFTExfU09SVF9BUlJBWV9TSVpFIDgxOTIKKwogc3RydWN0IHBvb2wgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aTsJLyogT25seSBzZXQgaWYgYSBwb29sIHRhcmdldCBpcyBib3VuZCAqLwpAQCAtMTcxLDExICsyMjQsMTMgQEAKIAogCXN0cnVjdCBwb29sX2ZlYXR1cmVzIHBmOwogCWJvb2wgbG93X3dhdGVyX3RyaWdnZXJlZDoxOwkvKiBBIGRtIGV2ZW50IGhhcyBiZWVuIHNlbnQgKi8KKwlib29sIHN1c3BlbmRlZDoxOwogCiAJc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbjsKIAlzdHJ1Y3QgZG1fa2NvcHlkX2NsaWVudCAqY29waWVyOwogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOworCXN0cnVjdCB0aHJvdHRsZSB0aHJvdHRsZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya2VyOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgd2FrZXI7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBub19zcGFjZV90aW1lb3V0OwpAQCAtMTk4LDggKzI1MywxMyBAQAogCXByb2Nlc3NfYmlvX2ZuIHByb2Nlc3NfYmlvOwogCXByb2Nlc3NfYmlvX2ZuIHByb2Nlc3NfZGlzY2FyZDsKIAorCXByb2Nlc3NfY2VsbF9mbiBwcm9jZXNzX2NlbGw7CisJcHJvY2Vzc19jZWxsX2ZuIHByb2Nlc3NfZGlzY2FyZF9jZWxsOworCiAJcHJvY2Vzc19tYXBwaW5nX2ZuIHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZzsKIAlwcm9jZXNzX21hcHBpbmdfZm4gcHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkOworCisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbF9zb3J0X2FycmF5W0NFTExfU09SVF9BUlJBWV9TSVpFXTsKIH07CiAKIHN0YXRpYyBlbnVtIHBvb2xfbW9kZSBnZXRfcG9vbF9tb2RlKHN0cnVjdCBwb29sICpwb29sKTsKQEAgLTIzMiw4ICsyOTIsMTEgQEAKIAogCXN0cnVjdCBwb29sICpwb29sOwogCXN0cnVjdCBkbV90aGluX2RldmljZSAqdGQ7CisJc3RydWN0IG1hcHBlZF9kZXZpY2UgKnRoaW5fbWQ7CisKIAlib29sIHJlcXVldWVfbW9kZToxOwogCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkX2NlbGxzOwogCXN0cnVjdCBiaW9fbGlzdCBkZWZlcnJlZF9iaW9fbGlzdDsKIAlzdHJ1Y3QgYmlvX2xpc3QgcmV0cnlfb25fcmVzdW1lX2xpc3Q7CiAJc3RydWN0IHJiX3Jvb3Qgc29ydF9iaW9fbGlzdDsgLyogc29ydGVkIGxpc3Qgb2YgZGVmZXJyZWQgYmlvcyAqLwpAQCAtMjkwLDYgKzM1MywxNSBAQAogCWRtX2Jpb19wcmlzb25fZnJlZV9jZWxsKHBvb2wtPnByaXNvbiwgY2VsbCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNlbGxfdmlzaXRfcmVsZWFzZShzdHJ1Y3QgcG9vbCAqcG9vbCwKKwkJCSAgICAgICB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqKSwKKwkJCSAgICAgICB2b2lkICpjb250ZXh0LAorCQkJICAgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJZG1fY2VsbF92aXNpdF9yZWxlYXNlKHBvb2wtPnByaXNvbiwgZm4sIGNvbnRleHQsIGNlbGwpOworCWRtX2Jpb19wcmlzb25fZnJlZV9jZWxsKHBvb2wtPnByaXNvbiwgY2VsbCk7Cit9CisKIHN0YXRpYyB2b2lkIGNlbGxfcmVsZWFzZV9ub19ob2xkZXIoc3RydWN0IHBvb2wgKnBvb2wsCiAJCQkJICAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCwKIAkJCQkgICBzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MpCkBAIC0yOTgsMTkgKzM3MCw2IEBACiAJZG1fYmlvX3ByaXNvbl9mcmVlX2NlbGwocG9vbC0+cHJpc29uLCBjZWxsKTsKIH0KIAotc3RhdGljIHZvaWQgY2VsbF9kZWZlcl9ub19ob2xkZXJfbm9fZnJlZShzdHJ1Y3QgdGhpbl9jICp0YywKLQkJCQkJIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCi17Ci0Jc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0JZG1fY2VsbF9yZWxlYXNlX25vX2hvbGRlcihwb29sLT5wcmlzb24sIGNlbGwsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0KLQl3YWtlX3dvcmtlcihwb29sKTsKLX0KLQogc3RhdGljIHZvaWQgY2VsbF9lcnJvcl93aXRoX2NvZGUoc3RydWN0IHBvb2wgKnBvb2wsCiAJCQkJIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsIGludCBlcnJvcl9jb2RlKQogewpAQCAtMzIzLDYgKzM4MiwxNiBAQAogCWNlbGxfZXJyb3Jfd2l0aF9jb2RlKHBvb2wsIGNlbGwsIC1FSU8pOwogfQogCitzdGF0aWMgdm9pZCBjZWxsX3N1Y2Nlc3Moc3RydWN0IHBvb2wgKnBvb2wsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJY2VsbF9lcnJvcl93aXRoX2NvZGUocG9vbCwgY2VsbCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNlbGxfcmVxdWV1ZShzdHJ1Y3QgcG9vbCAqcG9vbCwgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKK3sKKwljZWxsX2Vycm9yX3dpdGhfY29kZShwb29sLCBjZWxsLCBETV9FTkRJT19SRVFVRVVFKTsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKQEAgLTM5Myw0NCArNDYyLDY1IEBACiAJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsKIH07CiAKLXN0YXRpYyB2b2lkIHJlcXVldWVfYmlvX2xpc3Qoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW9fbGlzdCAqbWFzdGVyKQorc3RhdGljIHZvaWQgX19tZXJnZV9iaW9fbGlzdChzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MsIHN0cnVjdCBiaW9fbGlzdCAqbWFzdGVyKQoreworCWJpb19saXN0X21lcmdlKGJpb3MsIG1hc3Rlcik7CisJYmlvX2xpc3RfaW5pdChtYXN0ZXIpOworfQorCitzdGF0aWMgdm9pZCBlcnJvcl9iaW9fbGlzdChzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MsIGludCBlcnJvcikKIHsKIAlzdHJ1Y3QgYmlvICpiaW87CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChiaW9zKSkpCisJCWJpb19lbmRpbyhiaW8sIGVycm9yKTsKK30KKworc3RhdGljIHZvaWQgZXJyb3JfdGhpbl9iaW9fbGlzdChzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpb19saXN0ICptYXN0ZXIsIGludCBlcnJvcikKK3sKIAlzdHJ1Y3QgYmlvX2xpc3QgYmlvczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYmlvX2xpc3RfaW5pdCgmYmlvcyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGMtPmxvY2ssIGZsYWdzKTsKLQliaW9fbGlzdF9tZXJnZSgmYmlvcywgbWFzdGVyKTsKLQliaW9fbGlzdF9pbml0KG1hc3Rlcik7CisJX19tZXJnZV9iaW9fbGlzdCgmYmlvcywgbWFzdGVyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+bG9jaywgZmxhZ3MpOwogCi0Jd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmJpb3MpKSkKLQkJYmlvX2VuZGlvKGJpbywgRE1fRU5ESU9fUkVRVUVVRSk7CisJZXJyb3JfYmlvX2xpc3QoJmJpb3MsIGVycm9yKTsKK30KKworc3RhdGljIHZvaWQgcmVxdWV1ZV9kZWZlcnJlZF9jZWxscyhzdHJ1Y3QgdGhpbl9jICp0YykKK3sKKwlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCBjZWxsczsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsLCAqdG1wOworCisJSU5JVF9MSVNUX0hFQUQoJmNlbGxzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0Yy0+bG9jaywgZmxhZ3MpOworCWxpc3Rfc3BsaWNlX2luaXQoJnRjLT5kZWZlcnJlZF9jZWxscywgJmNlbGxzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNlbGwsIHRtcCwgJmNlbGxzLCB1c2VyX2xpc3QpCisJCWNlbGxfcmVxdWV1ZShwb29sLCBjZWxsKTsKIH0KIAogc3RhdGljIHZvaWQgcmVxdWV1ZV9pbyhzdHJ1Y3QgdGhpbl9jICp0YykKIHsKLQlyZXF1ZXVlX2Jpb19saXN0KHRjLCAmdGMtPmRlZmVycmVkX2Jpb19saXN0KTsKLQlyZXF1ZXVlX2Jpb19saXN0KHRjLCAmdGMtPnJldHJ5X29uX3Jlc3VtZV9saXN0KTsKLX0KLQotc3RhdGljIHZvaWQgZXJyb3JfdGhpbl9yZXRyeV9saXN0KHN0cnVjdCB0aGluX2MgKnRjKQotewotCXN0cnVjdCBiaW8gKmJpbzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBiaW9fbGlzdCBiaW9zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAliaW9fbGlzdF9pbml0KCZiaW9zKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0Yy0+bG9jaywgZmxhZ3MpOwotCWJpb19saXN0X21lcmdlKCZiaW9zLCAmdGMtPnJldHJ5X29uX3Jlc3VtZV9saXN0KTsKLQliaW9fbGlzdF9pbml0KCZ0Yy0+cmV0cnlfb25fcmVzdW1lX2xpc3QpOworCV9fbWVyZ2VfYmlvX2xpc3QoJmJpb3MsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOworCV9fbWVyZ2VfYmlvX2xpc3QoJmJpb3MsICZ0Yy0+cmV0cnlfb25fcmVzdW1lX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7CiAKLQl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmYmlvcykpKQotCQliaW9faW9fZXJyb3IoYmlvKTsKKwllcnJvcl9iaW9fbGlzdCgmYmlvcywgRE1fRU5ESU9fUkVRVUVVRSk7CisJcmVxdWV1ZV9kZWZlcnJlZF9jZWxscyh0Yyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVycm9yX3JldHJ5X2xpc3Qoc3RydWN0IHBvb2wgKnBvb2wpCkBAIC00MzksNyArNTI5LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0YywgJnBvb2wtPmFjdGl2ZV90aGlucywgbGlzdCkKLQkJZXJyb3JfdGhpbl9yZXRyeV9saXN0KHRjKTsKKwkJZXJyb3JfdGhpbl9iaW9fbGlzdCh0YywgJnRjLT5yZXRyeV9vbl9yZXN1bWVfbGlzdCwgLUVJTyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTYyOSwyMiArNzE5LDggQEAKICAqLwogCiAvKgotICogVGhpcyBzZW5kcyB0aGUgYmlvcyBpbiB0aGUgY2VsbCBiYWNrIHRvIHRoZSBkZWZlcnJlZF9iaW9zIGxpc3QuCi0gKi8KLXN0YXRpYyB2b2lkIGNlbGxfZGVmZXIoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCi17Ci0Jc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0JY2VsbF9yZWxlYXNlKHBvb2wsIGNlbGwsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0KLQl3YWtlX3dvcmtlcihwb29sKTsKLX0KLQotLyoKLSAqIFNhbWUgYXMgY2VsbF9kZWZlciBhYm92ZSwgZXhjZXB0IGl0IG9taXRzIHRoZSBvcmlnaW5hbCBob2xkZXIgb2YgdGhlIGNlbGwuCisgKiBUaGlzIHNlbmRzIHRoZSBiaW9zIGluIHRoZSBjZWxsLCBleGNlcHQgdGhlIG9yaWdpbmFsIGhvbGRlciwgYmFjaworICogdG8gdGhlIGRlZmVycmVkX2Jpb3MgbGlzdC4KICAqLwogc3RhdGljIHZvaWQgY2VsbF9kZWZlcl9ub19ob2xkZXIoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCiB7CkBAIC02NTgsNiArNzM0LDYyIEBACiAJd2FrZV93b3JrZXIocG9vbCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRoaW5fZGVmZXJfYmlvKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pOworCitzdHJ1Y3QgcmVtYXBfaW5mbyB7CisJc3RydWN0IHRoaW5fYyAqdGM7CisJc3RydWN0IGJpb19saXN0IGRlZmVyX2Jpb3M7CisJc3RydWN0IGJpb19saXN0IGlzc3VlX2Jpb3M7Cit9OworCitzdGF0aWMgdm9pZCBfX2luY19yZW1hcF9hbmRfaXNzdWVfY2VsbCh2b2lkICpjb250ZXh0LAorCQkJCSAgICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCXN0cnVjdCByZW1hcF9pbmZvICppbmZvID0gY29udGV4dDsKKwlzdHJ1Y3QgYmlvICpiaW87CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmY2VsbC0+YmlvcykpKSB7CisJCWlmIChiaW8tPmJpX3J3ICYgKFJFUV9ESVNDQVJEIHwgUkVRX0ZMVVNIIHwgUkVRX0ZVQSkpCisJCQliaW9fbGlzdF9hZGQoJmluZm8tPmRlZmVyX2Jpb3MsIGJpbyk7CisJCWVsc2UgeworCQkJaW5jX2FsbF9pb19lbnRyeShpbmZvLT50Yy0+cG9vbCwgYmlvKTsKKworCQkJLyoKKwkJCSAqIFdlIGNhbid0IGlzc3VlIHRoZSBiaW9zIHdpdGggdGhlIGJpbyBwcmlzb24gbG9jaworCQkJICogaGVsZCwgc28gd2UgYWRkIHRoZW0gdG8gYSBsaXN0IHRvIGlzc3VlIG9uCisJCQkgKiByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgorCQkJICovCisJCQliaW9fbGlzdF9hZGQoJmluZm8tPmlzc3VlX2Jpb3MsIGJpbyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluY19yZW1hcF9hbmRfaXNzdWVfY2VsbChzdHJ1Y3QgdGhpbl9jICp0YywKKwkJCQkgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCisJCQkJICAgICBkbV9ibG9ja190IGJsb2NrKQoreworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgcmVtYXBfaW5mbyBpbmZvOworCisJaW5mby50YyA9IHRjOworCWJpb19saXN0X2luaXQoJmluZm8uZGVmZXJfYmlvcyk7CisJYmlvX2xpc3RfaW5pdCgmaW5mby5pc3N1ZV9iaW9zKTsKKworCS8qCisJICogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIGluYyBhbnkgYmlvcyB3ZSdyZSBhYm91dCB0byBpc3N1ZQorCSAqIGJlZm9yZSB0aGUgY2VsbCBpcyByZWxlYXNlZCwgYW5kIGF2b2lkIGEgcmFjZSB3aXRoIG5ldyBiaW9zCisJICogYmVpbmcgYWRkZWQgdG8gdGhlIGNlbGwuCisJICovCisJY2VsbF92aXNpdF9yZWxlYXNlKHRjLT5wb29sLCBfX2luY19yZW1hcF9hbmRfaXNzdWVfY2VsbCwKKwkJCSAgICZpbmZvLCBjZWxsKTsKKworCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZpbmZvLmRlZmVyX2Jpb3MpKSkKKwkJdGhpbl9kZWZlcl9iaW8odGMsIGJpbyk7CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmaW5mby5pc3N1ZV9iaW9zKSkpCisJCXJlbWFwX2FuZF9pc3N1ZShpbmZvLnRjLCBiaW8sIGJsb2NrKTsKK30KKwogc3RhdGljIHZvaWQgcHJvY2Vzc19wcmVwYXJlZF9tYXBwaW5nX2ZhaWwoc3RydWN0IGRtX3RoaW5fbmV3X21hcHBpbmcgKm0pCiB7CiAJaWYgKG0tPmJpbykgewpAQCAtNzA2LDEwICs4MzgsMTMgQEAKIAkgKiB0aGUgYmlvcyBpbiB0aGUgY2VsbC4KIAkgKi8KIAlpZiAoYmlvKSB7Ci0JCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBtLT5jZWxsKTsKKwkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBtLT5jZWxsLCBtLT5kYXRhX2Jsb2NrKTsKIAkJYmlvX2VuZGlvKGJpbywgMCk7Ci0JfSBlbHNlCi0JCWNlbGxfZGVmZXIodGMsIG0tPmNlbGwpOworCX0gZWxzZSB7CisJCWluY19hbGxfaW9fZW50cnkodGMtPnBvb2wsIG0tPmNlbGwtPmhvbGRlcik7CisJCXJlbWFwX2FuZF9pc3N1ZSh0YywgbS0+Y2VsbC0+aG9sZGVyLCBtLT5kYXRhX2Jsb2NrKTsKKwkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBtLT5jZWxsLCBtLT5kYXRhX2Jsb2NrKTsKKwl9CiAKIG91dDoKIAlsaXN0X2RlbCgmbS0+bGlzdCk7CkBAIC04NDIsNiArOTc3LDIwIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCByZW1hcF9hbmRfaXNzdWVfb3ZlcndyaXRlKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkJICAgICAgZG1fYmxvY2tfdCBkYXRhX2Jsb2NrLAorCQkJCSAgICAgIHN0cnVjdCBkbV90aGluX25ld19tYXBwaW5nICptKQoreworCXN0cnVjdCBwb29sICpwb29sID0gdGMtPnBvb2w7CisJc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vayAqaCA9IGRtX3Blcl9iaW9fZGF0YShiaW8sIHNpemVvZihzdHJ1Y3QgZG1fdGhpbl9lbmRpb19ob29rKSk7CisKKwloLT5vdmVyd3JpdGVfbWFwcGluZyA9IG07CisJbS0+YmlvID0gYmlvOworCXNhdmVfYW5kX3NldF9lbmRpbyhiaW8sICZtLT5zYXZlZF9iaV9lbmRfaW8sIG92ZXJ3cml0ZV9lbmRpbyk7CisJaW5jX2FsbF9pb19lbnRyeShwb29sLCBiaW8pOworCXJlbWFwX2FuZF9pc3N1ZSh0YywgYmlvLCBkYXRhX2Jsb2NrKTsKK30KKwogLyoKICAqIEEgcGFydGlhbCBjb3B5IGFsc28gbmVlZHMgdG8gemVybyB0aGUgdW5jb3BpZWQgcmVnaW9uLgogICovCkBAIC04NzYsMTUgKzEwMjUsOSBAQAogCSAqIElmIHRoZSB3aG9sZSBibG9jayBvZiBkYXRhIGlzIGJlaW5nIG92ZXJ3cml0dGVuLCB3ZSBjYW4gaXNzdWUgdGhlCiAJICogYmlvIGltbWVkaWF0ZWx5LiBPdGhlcndpc2Ugd2UgdXNlIGtjb3B5ZCB0byBjbG9uZSB0aGUgZGF0YSBmaXJzdC4KIAkgKi8KLQlpZiAoaW9fb3ZlcndyaXRlc19ibG9jayhwb29sLCBiaW8pKSB7Ci0JCXN0cnVjdCBkbV90aGluX2VuZGlvX2hvb2sgKmggPSBkbV9wZXJfYmlvX2RhdGEoYmlvLCBzaXplb2Yoc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vaykpOwotCi0JCWgtPm92ZXJ3cml0ZV9tYXBwaW5nID0gbTsKLQkJbS0+YmlvID0gYmlvOwotCQlzYXZlX2FuZF9zZXRfZW5kaW8oYmlvLCAmbS0+c2F2ZWRfYmlfZW5kX2lvLCBvdmVyd3JpdGVfZW5kaW8pOwotCQlpbmNfYWxsX2lvX2VudHJ5KHBvb2wsIGJpbyk7Ci0JCXJlbWFwX2FuZF9pc3N1ZSh0YywgYmlvLCBkYXRhX2Rlc3QpOwotCX0gZWxzZSB7CisJaWYgKGlvX292ZXJ3cml0ZXNfYmxvY2socG9vbCwgYmlvKSkKKwkJcmVtYXBfYW5kX2lzc3VlX292ZXJ3cml0ZSh0YywgYmlvLCBkYXRhX2Rlc3QsIG0pOworCWVsc2UgewogCQlzdHJ1Y3QgZG1faW9fcmVnaW9uIGZyb20sIHRvOwogCiAJCWZyb20uYmRldiA9IG9yaWdpbi0+YmRldjsKQEAgLTk1MywxNiArMTA5NiwxMCBAQAogCWlmICghcG9vbC0+cGYuemVyb19uZXdfYmxvY2tzKQogCQlwcm9jZXNzX3ByZXBhcmVkX21hcHBpbmcobSk7CiAKLQllbHNlIGlmIChpb19vdmVyd3JpdGVzX2Jsb2NrKHBvb2wsIGJpbykpIHsKLQkJc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vayAqaCA9IGRtX3Blcl9iaW9fZGF0YShiaW8sIHNpemVvZihzdHJ1Y3QgZG1fdGhpbl9lbmRpb19ob29rKSk7CisJZWxzZSBpZiAoaW9fb3ZlcndyaXRlc19ibG9jayhwb29sLCBiaW8pKQorCQlyZW1hcF9hbmRfaXNzdWVfb3ZlcndyaXRlKHRjLCBiaW8sIGRhdGFfYmxvY2ssIG0pOwogCi0JCWgtPm92ZXJ3cml0ZV9tYXBwaW5nID0gbTsKLQkJbS0+YmlvID0gYmlvOwotCQlzYXZlX2FuZF9zZXRfZW5kaW8oYmlvLCAmbS0+c2F2ZWRfYmlfZW5kX2lvLCBvdmVyd3JpdGVfZW5kaW8pOwotCQlpbmNfYWxsX2lvX2VudHJ5KHBvb2wsIGJpbyk7Ci0JCXJlbWFwX2FuZF9pc3N1ZSh0YywgYmlvLCBkYXRhX2Jsb2NrKTsKLQotCX0gZWxzZQorCWVsc2UKIAkJbGxfemVybyh0YywgbSwKIAkJCWRhdGFfYmxvY2sgKiBwb29sLT5zZWN0b3JzX3Blcl9ibG9jaywKIAkJCShkYXRhX2Jsb2NrICsgMSkgKiBwb29sLT5zZWN0b3JzX3Blcl9ibG9jayk7CkBAIC0xMTM0LDI5ICsxMjcxLDI1IEBACiAJYmlvX2xpc3RfaW5pdCgmYmlvcyk7CiAJY2VsbF9yZWxlYXNlKHBvb2wsIGNlbGwsICZiaW9zKTsKIAotCWVycm9yID0gc2hvdWxkX2Vycm9yX3Vuc2VydmljZWFibGVfYmlvKHBvb2wpOwotCWlmIChlcnJvcikKLQkJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmJpb3MpKSkKLQkJCWJpb19lbmRpbyhiaW8sIGVycm9yKTsKLQllbHNlCi0JCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZiaW9zKSkpCi0JCQlyZXRyeV9vbl9yZXN1bWUoYmlvKTsKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmYmlvcykpKQorCQlyZXRyeV9vbl9yZXN1bWUoYmlvKTsKIH0KIAotc3RhdGljIHZvaWQgcHJvY2Vzc19kaXNjYXJkKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgdm9pZCBwcm9jZXNzX2Rpc2NhcmRfY2VsbChzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKIHsKIAlpbnQgcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiaW8gKmJpbyA9IGNlbGwtPmhvbGRlcjsKIAlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsICpjZWxsMjsKLQlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5LCBrZXkyOworCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwyOworCXN0cnVjdCBkbV9jZWxsX2tleSBrZXkyOwogCWRtX2Jsb2NrX3QgYmxvY2sgPSBnZXRfYmlvX2Jsb2NrKHRjLCBiaW8pOwogCXN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgbG9va3VwX3Jlc3VsdDsKIAlzdHJ1Y3QgZG1fdGhpbl9uZXdfbWFwcGluZyAqbTsKIAotCWJ1aWxkX3ZpcnR1YWxfa2V5KHRjLT50ZCwgYmxvY2ssICZrZXkpOwotCWlmIChiaW9fZGV0YWluKHRjLT5wb29sLCAma2V5LCBiaW8sICZjZWxsKSkKKwlpZiAodGMtPnJlcXVldWVfbW9kZSkgeworCQljZWxsX3JlcXVldWUocG9vbCwgY2VsbCk7CiAJCXJldHVybjsKKwl9CiAKIAlyID0gZG1fdGhpbl9maW5kX2Jsb2NrKHRjLT50ZCwgYmxvY2ssIDEsICZsb29rdXBfcmVzdWx0KTsKIAlzd2l0Y2ggKHIpIHsKQEAgLTExODcsMTIgKzEzMjAsOSBAQAogCQkJbS0+Y2VsbDIgPSBjZWxsMjsKIAkJCW0tPmJpbyA9IGJpbzsKIAotCQkJaWYgKCFkbV9kZWZlcnJlZF9zZXRfYWRkX3dvcmsocG9vbC0+YWxsX2lvX2RzLCAmbS0+bGlzdCkpIHsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bG9jaywgZmxhZ3MpOwotCQkJCWxpc3RfYWRkX3RhaWwoJm0tPmxpc3QsICZwb29sLT5wcmVwYXJlZF9kaXNjYXJkcyk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bG9jaywgZmxhZ3MpOwotCQkJCXdha2Vfd29ya2VyKHBvb2wpOwotCQkJfQorCQkJaWYgKCFkbV9kZWZlcnJlZF9zZXRfYWRkX3dvcmsocG9vbC0+YWxsX2lvX2RzLCAmbS0+bGlzdCkpCisJCQkJcG9vbC0+cHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkKG0pOworCiAJCX0gZWxzZSB7CiAJCQlpbmNfYWxsX2lvX2VudHJ5KHBvb2wsIGJpbyk7CiAJCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7CkBAIC0xMjI3LDYgKzEzNTcsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZGlzY2FyZF9iaW8oc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsOworCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CisJZG1fYmxvY2tfdCBibG9jayA9IGdldF9iaW9fYmxvY2sodGMsIGJpbyk7CisKKwlidWlsZF92aXJ0dWFsX2tleSh0Yy0+dGQsIGJsb2NrLCAma2V5KTsKKwlpZiAoYmlvX2RldGFpbih0Yy0+cG9vbCwgJmtleSwgYmlvLCAmY2VsbCkpCisJCXJldHVybjsKKworCXByb2Nlc3NfZGlzY2FyZF9jZWxsKHRjLCBjZWxsKTsKK30KKwogc3RhdGljIHZvaWQgYnJlYWtfc2hhcmluZyhzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpbyAqYmlvLCBkbV9ibG9ja190IGJsb2NrLAogCQkJICBzdHJ1Y3QgZG1fY2VsbF9rZXkgKmtleSwKIAkJCSAgc3RydWN0IGRtX3RoaW5fbG9va3VwX3Jlc3VsdCAqbG9va3VwX3Jlc3VsdCwKQEAgLTEyNTUsMTEgKzEzOTgsNTMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9fcmVtYXBfYW5kX2lzc3VlX3NoYXJlZF9jZWxsKHZvaWQgKmNvbnRleHQsCisJCQkJCSAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKK3sKKwlzdHJ1Y3QgcmVtYXBfaW5mbyAqaW5mbyA9IGNvbnRleHQ7CisJc3RydWN0IGJpbyAqYmlvOworCisJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmNlbGwtPmJpb3MpKSkgeworCQlpZiAoKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB8fAorCQkgICAgKGJpby0+YmlfcncgJiAoUkVRX0RJU0NBUkQgfCBSRVFfRkxVU0ggfCBSRVFfRlVBKSkpCisJCQliaW9fbGlzdF9hZGQoJmluZm8tPmRlZmVyX2Jpb3MsIGJpbyk7CisJCWVsc2UgeworCQkJc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vayAqaCA9IGRtX3Blcl9iaW9fZGF0YShiaW8sIHNpemVvZihzdHJ1Y3QgZG1fdGhpbl9lbmRpb19ob29rKSk7OworCisJCQloLT5zaGFyZWRfcmVhZF9lbnRyeSA9IGRtX2RlZmVycmVkX2VudHJ5X2luYyhpbmZvLT50Yy0+cG9vbC0+c2hhcmVkX3JlYWRfZHMpOworCQkJaW5jX2FsbF9pb19lbnRyeShpbmZvLT50Yy0+cG9vbCwgYmlvKTsKKwkJCWJpb19saXN0X2FkZCgmaW5mby0+aXNzdWVfYmlvcywgYmlvKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcmVtYXBfYW5kX2lzc3VlX3NoYXJlZF9jZWxsKHN0cnVjdCB0aGluX2MgKnRjLAorCQkJCQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsLAorCQkJCQlkbV9ibG9ja190IGJsb2NrKQoreworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgcmVtYXBfaW5mbyBpbmZvOworCisJaW5mby50YyA9IHRjOworCWJpb19saXN0X2luaXQoJmluZm8uZGVmZXJfYmlvcyk7CisJYmlvX2xpc3RfaW5pdCgmaW5mby5pc3N1ZV9iaW9zKTsKKworCWNlbGxfdmlzaXRfcmVsZWFzZSh0Yy0+cG9vbCwgX19yZW1hcF9hbmRfaXNzdWVfc2hhcmVkX2NlbGwsCisJCQkgICAmaW5mbywgY2VsbCk7CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmaW5mby5kZWZlcl9iaW9zKSkpCisJCXRoaW5fZGVmZXJfYmlvKHRjLCBiaW8pOworCisJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmluZm8uaXNzdWVfYmlvcykpKQorCQlyZW1hcF9hbmRfaXNzdWUodGMsIGJpbywgYmxvY2spOworfQorCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3NoYXJlZF9iaW8oc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbywKIAkJCSAgICAgICBkbV9ibG9ja190IGJsb2NrLAotCQkJICAgICAgIHN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgKmxvb2t1cF9yZXN1bHQpCisJCQkgICAgICAgc3RydWN0IGRtX3RoaW5fbG9va3VwX3Jlc3VsdCAqbG9va3VwX3Jlc3VsdCwKKwkJCSAgICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICp2aXJ0X2NlbGwpCiB7Ci0Jc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbDsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpkYXRhX2NlbGw7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKIAlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5OwogCkBAIC0xMjY4LDE5ICsxNDUzLDIzIEBACiAJICogb2YgYmVpbmcgYnJva2VuIHNvIHdlIGhhdmUgbm90aGluZyBmdXJ0aGVyIHRvIGRvIGhlcmUuCiAJICovCiAJYnVpbGRfZGF0YV9rZXkodGMtPnRkLCBsb29rdXBfcmVzdWx0LT5ibG9jaywgJmtleSk7Ci0JaWYgKGJpb19kZXRhaW4ocG9vbCwgJmtleSwgYmlvLCAmY2VsbCkpCisJaWYgKGJpb19kZXRhaW4ocG9vbCwgJmtleSwgYmlvLCAmZGF0YV9jZWxsKSkgeworCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgdmlydF9jZWxsKTsKIAkJcmV0dXJuOworCX0KIAotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSAmJiBiaW8tPmJpX2l0ZXIuYmlfc2l6ZSkKLQkJYnJlYWtfc2hhcmluZyh0YywgYmlvLCBibG9jaywgJmtleSwgbG9va3VwX3Jlc3VsdCwgY2VsbCk7Ci0JZWxzZSB7CisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFICYmIGJpby0+YmlfaXRlci5iaV9zaXplKSB7CisJCWJyZWFrX3NoYXJpbmcodGMsIGJpbywgYmxvY2ssICZrZXksIGxvb2t1cF9yZXN1bHQsIGRhdGFfY2VsbCk7CisJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCB2aXJ0X2NlbGwpOworCX0gZWxzZSB7CiAJCXN0cnVjdCBkbV90aGluX2VuZGlvX2hvb2sgKmggPSBkbV9wZXJfYmlvX2RhdGEoYmlvLCBzaXplb2Yoc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vaykpOwogCiAJCWgtPnNoYXJlZF9yZWFkX2VudHJ5ID0gZG1fZGVmZXJyZWRfZW50cnlfaW5jKHBvb2wtPnNoYXJlZF9yZWFkX2RzKTsKIAkJaW5jX2FsbF9pb19lbnRyeShwb29sLCBiaW8pOwotCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7Ci0KIAkJcmVtYXBfYW5kX2lzc3VlKHRjLCBiaW8sIGxvb2t1cF9yZXN1bHQtPmJsb2NrKTsKKworCQlyZW1hcF9hbmRfaXNzdWVfc2hhcmVkX2NlbGwodGMsIGRhdGFfY2VsbCwgbG9va3VwX3Jlc3VsdC0+YmxvY2spOworCQlyZW1hcF9hbmRfaXNzdWVfc2hhcmVkX2NlbGwodGMsIHZpcnRfY2VsbCwgbG9va3VwX3Jlc3VsdC0+YmxvY2spOwogCX0KIH0KIApAQCAtMTMzMywzNCArMTUyMiwyOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcHJvY2Vzc19iaW8oc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY2VsbChzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOworCXN0cnVjdCBiaW8gKmJpbyA9IGNlbGwtPmhvbGRlcjsKIAlkbV9ibG9ja190IGJsb2NrID0gZ2V0X2Jpb19ibG9jayh0YywgYmlvKTsKLQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsOwotCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CiAJc3RydWN0IGRtX3RoaW5fbG9va3VwX3Jlc3VsdCBsb29rdXBfcmVzdWx0OwogCi0JLyoKLQkgKiBJZiBjZWxsIGlzIGFscmVhZHkgb2NjdXBpZWQsIHRoZW4gdGhlIGJsb2NrIGlzIGFscmVhZHkKLQkgKiBiZWluZyBwcm92aXNpb25lZCBzbyB3ZSBoYXZlIG5vdGhpbmcgZnVydGhlciB0byBkbyBoZXJlLgotCSAqLwotCWJ1aWxkX3ZpcnR1YWxfa2V5KHRjLT50ZCwgYmxvY2ssICZrZXkpOwotCWlmIChiaW9fZGV0YWluKHBvb2wsICZrZXksIGJpbywgJmNlbGwpKQorCWlmICh0Yy0+cmVxdWV1ZV9tb2RlKSB7CisJCWNlbGxfcmVxdWV1ZShwb29sLCBjZWxsKTsKIAkJcmV0dXJuOworCX0KIAogCXIgPSBkbV90aGluX2ZpbmRfYmxvY2sodGMtPnRkLCBibG9jaywgMSwgJmxvb2t1cF9yZXN1bHQpOwogCXN3aXRjaCAocikgewogCWNhc2UgMDoKLQkJaWYgKGxvb2t1cF9yZXN1bHQuc2hhcmVkKSB7Ci0JCQlwcm9jZXNzX3NoYXJlZF9iaW8odGMsIGJpbywgYmxvY2ssICZsb29rdXBfcmVzdWx0KTsKLQkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBjZWxsKTsgLyogRklYTUU6IHBhc3MgdGhpcyBjZWxsIGludG8gcHJvY2Vzc19zaGFyZWQ/ICovCi0JCX0gZWxzZSB7CisJCWlmIChsb29rdXBfcmVzdWx0LnNoYXJlZCkKKwkJCXByb2Nlc3Nfc2hhcmVkX2Jpbyh0YywgYmlvLCBibG9jaywgJmxvb2t1cF9yZXN1bHQsIGNlbGwpOworCQllbHNlIHsKIAkJCWluY19hbGxfaW9fZW50cnkocG9vbCwgYmlvKTsKLQkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBjZWxsKTsKLQogCQkJcmVtYXBfYW5kX2lzc3VlKHRjLCBiaW8sIGxvb2t1cF9yZXN1bHQuYmxvY2spOworCQkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBjZWxsLCBsb29rdXBfcmVzdWx0LmJsb2NrKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTM5NCw3ICsxNTc3LDI2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBwcm9jZXNzX2Jpb19yZWFkX29ubHkoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYmlvKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKwlkbV9ibG9ja190IGJsb2NrID0gZ2V0X2Jpb19ibG9jayh0YywgYmlvKTsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsOworCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CisKKwkvKgorCSAqIElmIGNlbGwgaXMgYWxyZWFkeSBvY2N1cGllZCwgdGhlbiB0aGUgYmxvY2sgaXMgYWxyZWFkeQorCSAqIGJlaW5nIHByb3Zpc2lvbmVkIHNvIHdlIGhhdmUgbm90aGluZyBmdXJ0aGVyIHRvIGRvIGhlcmUuCisJICovCisJYnVpbGRfdmlydHVhbF9rZXkodGMtPnRkLCBibG9jaywgJmtleSk7CisJaWYgKGJpb19kZXRhaW4ocG9vbCwgJmtleSwgYmlvLCAmY2VsbCkpCisJCXJldHVybjsKKworCXByb2Nlc3NfY2VsbCh0YywgY2VsbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fcHJvY2Vzc19iaW9fcmVhZF9vbmx5KHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkJICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCiB7CiAJaW50IHI7CiAJaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7CkBAIC0xNDA0LDE1ICsxNjA2LDIxIEBACiAJciA9IGRtX3RoaW5fZmluZF9ibG9jayh0Yy0+dGQsIGJsb2NrLCAxLCAmbG9va3VwX3Jlc3VsdCk7CiAJc3dpdGNoIChyKSB7CiAJY2FzZSAwOgotCQlpZiAobG9va3VwX3Jlc3VsdC5zaGFyZWQgJiYgKHJ3ID09IFdSSVRFKSAmJiBiaW8tPmJpX2l0ZXIuYmlfc2l6ZSkKKwkJaWYgKGxvb2t1cF9yZXN1bHQuc2hhcmVkICYmIChydyA9PSBXUklURSkgJiYgYmlvLT5iaV9pdGVyLmJpX3NpemUpIHsKIAkJCWhhbmRsZV91bnNlcnZpY2VhYmxlX2Jpbyh0Yy0+cG9vbCwgYmlvKTsKLQkJZWxzZSB7CisJCQlpZiAoY2VsbCkKKwkJCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7CisJCX0gZWxzZSB7CiAJCQlpbmNfYWxsX2lvX2VudHJ5KHRjLT5wb29sLCBiaW8pOwogCQkJcmVtYXBfYW5kX2lzc3VlKHRjLCBiaW8sIGxvb2t1cF9yZXN1bHQuYmxvY2spOworCQkJaWYgKGNlbGwpCisJCQkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBjZWxsLCBsb29rdXBfcmVzdWx0LmJsb2NrKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgLUVOT0RBVEE6CisJCWlmIChjZWxsKQorCQkJY2VsbF9kZWZlcl9ub19ob2xkZXIodGMsIGNlbGwpOwogCQlpZiAocncgIT0gUkVBRCkgewogCQkJaGFuZGxlX3Vuc2VydmljZWFibGVfYmlvKHRjLT5wb29sLCBiaW8pOwogCQkJYnJlYWs7CkBAIC0xNDMxLDExICsxNjM5LDIzIEBACiAJZGVmYXVsdDoKIAkJRE1FUlJfTElNSVQoIiVzOiBkbV90aGluX2ZpbmRfYmxvY2soKSBmYWlsZWQ6IGVycm9yID0gJWQiLAogCQkJICAgIF9fZnVuY19fLCByKTsKKwkJaWYgKGNlbGwpCisJCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7CiAJCWJpb19pb19lcnJvcihiaW8pOwogCQlicmVhazsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYmlvX3JlYWRfb25seShzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpbyAqYmlvKQoreworCV9fcHJvY2Vzc19iaW9fcmVhZF9vbmx5KHRjLCBiaW8sIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NlbGxfcmVhZF9vbmx5KHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCV9fcHJvY2Vzc19iaW9fcmVhZF9vbmx5KHRjLCBjZWxsLT5ob2xkZXIsIGNlbGwpOworfQorCiBzdGF0aWMgdm9pZCBwcm9jZXNzX2Jpb19zdWNjZXNzKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJYmlvX2VuZGlvKGJpbywgMCk7CkBAIC0xNDQ2LDYgKzE2NjYsMTYgQEAKIAliaW9faW9fZXJyb3IoYmlvKTsKIH0KIAorc3RhdGljIHZvaWQgcHJvY2Vzc19jZWxsX3N1Y2Nlc3Moc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJY2VsbF9zdWNjZXNzKHRjLT5wb29sLCBjZWxsKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19jZWxsX2ZhaWwoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJY2VsbF9lcnJvcih0Yy0+cG9vbCwgY2VsbCk7Cit9CisKIC8qCiAgKiBGSVhNRTogc2hvdWxkIHdlIGFsc28gY29tbWl0IGR1ZSB0byBzaXplIG9mIHRyYW5zYWN0aW9uLCBtZWFzdXJlZCBpbgogICogbWV0YWRhdGEgYmxvY2tzPwpAQCAtMTUyNyw5ICsxNzU3LDEwIEBACiAJc3RydWN0IGJpbyAqYmlvOwogCXN0cnVjdCBiaW9fbGlzdCBiaW9zOwogCXN0cnVjdCBibGtfcGx1ZyBwbHVnOworCXVuc2lnbmVkIGNvdW50ID0gMDsKIAogCWlmICh0Yy0+cmVxdWV1ZV9tb2RlKSB7Ci0JCXJlcXVldWVfYmlvX2xpc3QodGMsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOworCQllcnJvcl90aGluX2Jpb19saXN0KHRjLCAmdGMtPmRlZmVycmVkX2Jpb19saXN0LCBETV9FTkRJT19SRVFVRVVFKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTU2OCwxMCArMTc5OSw5NyBAQAogCQkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkKHRjLCBiaW8pOwogCQllbHNlCiAJCQlwb29sLT5wcm9jZXNzX2Jpbyh0YywgYmlvKTsKKworCQlpZiAoKGNvdW50KysgJiAxMjcpID09IDApIHsKKwkJCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CisJCQlkbV9wb29sX2lzc3VlX3ByZWZldGNoZXMocG9vbC0+cG1kKTsKKwkJfQogCX0KIAlibGtfZmluaXNoX3BsdWcoJnBsdWcpOwogfQogCitzdGF0aWMgaW50IGNtcF9jZWxscyhjb25zdCB2b2lkICpsaHMsIGNvbnN0IHZvaWQgKnJocykKK3sKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpsaHNfY2VsbCA9ICooKHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKiopIGxocyk7CisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqcmhzX2NlbGwgPSAqKChzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqKSByaHMpOworCisJQlVHX09OKCFsaHNfY2VsbC0+aG9sZGVyKTsKKwlCVUdfT04oIXJoc19jZWxsLT5ob2xkZXIpOworCisJaWYgKGxoc19jZWxsLT5ob2xkZXItPmJpX2l0ZXIuYmlfc2VjdG9yIDwgcmhzX2NlbGwtPmhvbGRlci0+YmlfaXRlci5iaV9zZWN0b3IpCisJCXJldHVybiAtMTsKKworCWlmIChsaHNfY2VsbC0+aG9sZGVyLT5iaV9pdGVyLmJpX3NlY3RvciA+IHJoc19jZWxsLT5ob2xkZXItPmJpX2l0ZXIuYmlfc2VjdG9yKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgc29ydF9jZWxscyhzdHJ1Y3QgcG9vbCAqcG9vbCwgc3RydWN0IGxpc3RfaGVhZCAqY2VsbHMpCit7CisJdW5zaWduZWQgY291bnQgPSAwOworCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2VsbCwgdG1wLCBjZWxscywgdXNlcl9saXN0KSB7CisJCWlmIChjb3VudCA+PSBDRUxMX1NPUlRfQVJSQVlfU0laRSkKKwkJCWJyZWFrOworCisJCXBvb2wtPmNlbGxfc29ydF9hcnJheVtjb3VudCsrXSA9IGNlbGw7CisJCWxpc3RfZGVsKCZjZWxsLT51c2VyX2xpc3QpOworCX0KKworCXNvcnQocG9vbC0+Y2VsbF9zb3J0X2FycmF5LCBjb3VudCwgc2l6ZW9mKGNlbGwpLCBjbXBfY2VsbHMsIE5VTEwpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3RoaW5fZGVmZXJyZWRfY2VsbHMoc3RydWN0IHRoaW5fYyAqdGMpCit7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgY2VsbHM7CisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbDsKKwl1bnNpZ25lZCBpLCBqLCBjb3VudDsKKworCUlOSVRfTElTVF9IRUFEKCZjZWxscyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV9pbml0KCZ0Yy0+ZGVmZXJyZWRfY2VsbHMsICZjZWxscyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChsaXN0X2VtcHR5KCZjZWxscykpCisJCXJldHVybjsKKworCWRvIHsKKwkJY291bnQgPSBzb3J0X2NlbGxzKHRjLT5wb29sLCAmY2VsbHMpOworCisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQljZWxsID0gcG9vbC0+Y2VsbF9zb3J0X2FycmF5W2ldOworCQkJQlVHX09OKCFjZWxsLT5ob2xkZXIpOworCisJCQkvKgorCQkJICogSWYgd2UndmUgZ290IG5vIGZyZWUgbmV3X21hcHBpbmcgc3RydWN0cywgYW5kIHByb2Nlc3NpbmcKKwkJCSAqIHRoaXMgYmlvIG1pZ2h0IHJlcXVpcmUgb25lLCB3ZSBwYXVzZSB1bnRpbCB0aGVyZSBhcmUgc29tZQorCQkJICogcHJlcGFyZWQgbWFwcGluZ3MgdG8gcHJvY2Vzcy4KKwkJCSAqLworCQkJaWYgKGVuc3VyZV9uZXh0X21hcHBpbmcocG9vbCkpIHsKKwkJCQlmb3IgKGogPSBpOyBqIDwgY291bnQ7IGorKykKKwkJCQkJbGlzdF9hZGQoJnBvb2wtPmNlbGxfc29ydF9hcnJheVtqXS0+dXNlcl9saXN0LCAmY2VsbHMpOworCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5sb2NrLCBmbGFncyk7CisJCQkJbGlzdF9zcGxpY2UoJmNlbGxzLCAmdGMtPmRlZmVycmVkX2NlbGxzKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+bG9jaywgZmxhZ3MpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKGNlbGwtPmhvbGRlci0+YmlfcncgJiBSRVFfRElTQ0FSRCkKKwkJCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmRfY2VsbCh0YywgY2VsbCk7CisJCQllbHNlCisJCQkJcG9vbC0+cHJvY2Vzc19jZWxsKHRjLCBjZWxsKTsKKwkJfQorCX0gd2hpbGUgKCFsaXN0X2VtcHR5KCZjZWxscykpOworfQorCiBzdGF0aWMgdm9pZCB0aGluX2dldChzdHJ1Y3QgdGhpbl9jICp0Yyk7CiBzdGF0aWMgdm9pZCB0aGluX3B1dChzdHJ1Y3QgdGhpbl9jICp0Yyk7CiAKQEAgLTE2MjAsNiArMTkzOCw3IEBACiAKIAl0YyA9IGdldF9maXJzdF90aGluKHBvb2wpOwogCXdoaWxlICh0YykgeworCQlwcm9jZXNzX3RoaW5fZGVmZXJyZWRfY2VsbHModGMpOwogCQlwcm9jZXNzX3RoaW5fZGVmZXJyZWRfYmlvcyh0Yyk7CiAJCXRjID0gZ2V0X25leHRfdGhpbihwb29sLCB0Yyk7CiAJfQpAQCAtMTY1Myw5ICsxOTcyLDE1IEBACiB7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCBwb29sLCB3b3JrZXIpOwogCisJdGhyb3R0bGVfd29ya19zdGFydCgmcG9vbC0+dGhyb3R0bGUpOworCWRtX3Bvb2xfaXNzdWVfcHJlZmV0Y2hlcyhwb29sLT5wbWQpOworCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CiAJcHJvY2Vzc19wcmVwYXJlZChwb29sLCAmcG9vbC0+cHJlcGFyZWRfbWFwcGluZ3MsICZwb29sLT5wcm9jZXNzX3ByZXBhcmVkX21hcHBpbmcpOworCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CiAJcHJvY2Vzc19wcmVwYXJlZChwb29sLCAmcG9vbC0+cHJlcGFyZWRfZGlzY2FyZHMsICZwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQpOworCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CiAJcHJvY2Vzc19kZWZlcnJlZF9iaW9zKHBvb2wpOworCXRocm90dGxlX3dvcmtfY29tcGxldGUoJnBvb2wtPnRocm90dGxlKTsKIH0KIAogLyoKQEAgLTE3OTIsNiArMjExNyw4IEBACiAJCWRtX3Bvb2xfbWV0YWRhdGFfcmVhZF9vbmx5KHBvb2wtPnBtZCk7CiAJCXBvb2wtPnByb2Nlc3NfYmlvID0gcHJvY2Vzc19iaW9fZmFpbDsKIAkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkID0gcHJvY2Vzc19iaW9fZmFpbDsKKwkJcG9vbC0+cHJvY2Vzc19jZWxsID0gcHJvY2Vzc19jZWxsX2ZhaWw7CisJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZF9jZWxsID0gcHJvY2Vzc19jZWxsX2ZhaWw7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZyA9IHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZ19mYWlsOwogCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQgPSBwcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmRfZmFpbDsKIApAQCAtMTgwNCw2ICsyMTMxLDggQEAKIAkJZG1fcG9vbF9tZXRhZGF0YV9yZWFkX29ubHkocG9vbC0+cG1kKTsKIAkJcG9vbC0+cHJvY2Vzc19iaW8gPSBwcm9jZXNzX2Jpb19yZWFkX29ubHk7CiAJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZCA9IHByb2Nlc3NfYmlvX3N1Y2Nlc3M7CisJCXBvb2wtPnByb2Nlc3NfY2VsbCA9IHByb2Nlc3NfY2VsbF9yZWFkX29ubHk7CisJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZF9jZWxsID0gcHJvY2Vzc19jZWxsX3N1Y2Nlc3M7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZyA9IHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZ19mYWlsOwogCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQgPSBwcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmRfcGFzc2Rvd247CiAKQEAgLTE4MjIsNyArMjE1MSw5IEBACiAJCWlmIChvbGRfbW9kZSAhPSBuZXdfbW9kZSkKIAkJCW5vdGlmeV9vZl9wb29sX21vZGVfY2hhbmdlKHBvb2wsICJvdXQtb2YtZGF0YS1zcGFjZSIpOwogCQlwb29sLT5wcm9jZXNzX2JpbyA9IHByb2Nlc3NfYmlvX3JlYWRfb25seTsKLQkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkID0gcHJvY2Vzc19kaXNjYXJkOworCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmQgPSBwcm9jZXNzX2Rpc2NhcmRfYmlvOworCQlwb29sLT5wcm9jZXNzX2NlbGwgPSBwcm9jZXNzX2NlbGxfcmVhZF9vbmx5OworCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmRfY2VsbCA9IHByb2Nlc3NfZGlzY2FyZF9jZWxsOwogCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX21hcHBpbmcgPSBwcm9jZXNzX3ByZXBhcmVkX21hcHBpbmc7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfZGlzY2FyZCA9IHByb2Nlc3NfcHJlcGFyZWRfZGlzY2FyZF9wYXNzZG93bjsKIApAQCAtMTgzNSw3ICsyMTY2LDkgQEAKIAkJCW5vdGlmeV9vZl9wb29sX21vZGVfY2hhbmdlKHBvb2wsICJ3cml0ZSIpOwogCQlkbV9wb29sX21ldGFkYXRhX3JlYWRfd3JpdGUocG9vbC0+cG1kKTsKIAkJcG9vbC0+cHJvY2Vzc19iaW8gPSBwcm9jZXNzX2JpbzsKLQkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkID0gcHJvY2Vzc19kaXNjYXJkOworCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmQgPSBwcm9jZXNzX2Rpc2NhcmRfYmlvOworCQlwb29sLT5wcm9jZXNzX2NlbGwgPSBwcm9jZXNzX2NlbGw7CisJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZF9jZWxsID0gcHJvY2Vzc19kaXNjYXJkX2NlbGw7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZyA9IHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZzsKIAkJcG9vbC0+cHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkID0gcHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkOwogCQlicmVhazsKQEAgLTE4OTUsNiArMjIyOCwyOSBAQAogCXdha2Vfd29ya2VyKHBvb2wpOwogfQogCitzdGF0aWMgdm9pZCB0aGluX2RlZmVyX2Jpb193aXRoX3Rocm90dGxlKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKworCXRocm90dGxlX2xvY2soJnBvb2wtPnRocm90dGxlKTsKKwl0aGluX2RlZmVyX2Jpbyh0YywgYmlvKTsKKwl0aHJvdHRsZV91bmxvY2soJnBvb2wtPnRocm90dGxlKTsKK30KKworc3RhdGljIHZvaWQgdGhpbl9kZWZlcl9jZWxsKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKworCXRocm90dGxlX2xvY2soJnBvb2wtPnRocm90dGxlKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjZWxsLT51c2VyX2xpc3QsICZ0Yy0+ZGVmZXJyZWRfY2VsbHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7CisJdGhyb3R0bGVfdW5sb2NrKCZwb29sLT50aHJvdHRsZSk7CisKKwl3YWtlX3dvcmtlcihwb29sKTsKK30KKwogc3RhdGljIHZvaWQgdGhpbl9ob29rX2JpbyhzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBkbV90aGluX2VuZGlvX2hvb2sgKmggPSBkbV9wZXJfYmlvX2RhdGEoYmlvLCBzaXplb2Yoc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vaykpOwpAQCAtMTkxNSw4ICsyMjcxLDcgQEAKIAlkbV9ibG9ja190IGJsb2NrID0gZ2V0X2Jpb19ibG9jayh0YywgYmlvKTsKIAlzdHJ1Y3QgZG1fdGhpbl9kZXZpY2UgKnRkID0gdGMtPnRkOwogCXN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgcmVzdWx0OwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgY2VsbDEsIGNlbGwyOwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGxfcmVzdWx0OworCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKnZpcnRfY2VsbCwgKmRhdGFfY2VsbDsKIAlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5OwogCiAJdGhpbl9ob29rX2Jpbyh0YywgYmlvKTsKQEAgLTE5MzIsNyArMjI4Nyw3IEBACiAJfQogCiAJaWYgKGJpby0+YmlfcncgJiAoUkVRX0RJU0NBUkQgfCBSRVFfRkxVU0ggfCBSRVFfRlVBKSkgewotCQl0aGluX2RlZmVyX2Jpbyh0YywgYmlvKTsKKwkJdGhpbl9kZWZlcl9iaW9fd2l0aF90aHJvdHRsZSh0YywgYmlvKTsKIAkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAl9CiAKQEAgLTE5NDEsNyArMjI5Niw3IEBACiAJICogdGhlcmUncyBhIHJhY2Ugd2l0aCBkaXNjYXJkLgogCSAqLwogCWJ1aWxkX3ZpcnR1YWxfa2V5KHRjLT50ZCwgYmxvY2ssICZrZXkpOwotCWlmIChkbV9iaW9fZGV0YWluKHRjLT5wb29sLT5wcmlzb24sICZrZXksIGJpbywgJmNlbGwxLCAmY2VsbF9yZXN1bHQpKQorCWlmIChiaW9fZGV0YWluKHRjLT5wb29sLCAma2V5LCBiaW8sICZ2aXJ0X2NlbGwpKQogCQlyZXR1cm4gRE1fTUFQSU9fU1VCTUlUVEVEOwogCiAJciA9IGRtX3RoaW5fZmluZF9ibG9jayh0ZCwgYmxvY2ssIDAsICZyZXN1bHQpOwpAQCAtMTk2NiwyMCArMjMyMSwxOSBAQAogCQkJICogTW9yZSBkaXN0YW50IGFuY2VzdG9ycyBhcmUgaXJyZWxldmFudC4gVGhlCiAJCQkgKiBzaGFyZWQgZmxhZyB3aWxsIGJlIHNldCBpbiB0aGVpciBjYXNlLgogCQkJICovCi0JCQl0aGluX2RlZmVyX2Jpbyh0YywgYmlvKTsKLQkJCWNlbGxfZGVmZXJfbm9faG9sZGVyX25vX2ZyZWUodGMsICZjZWxsMSk7CisJCQl0aGluX2RlZmVyX2NlbGwodGMsIHZpcnRfY2VsbCk7CiAJCQlyZXR1cm4gRE1fTUFQSU9fU1VCTUlUVEVEOwogCQl9CiAKIAkJYnVpbGRfZGF0YV9rZXkodGMtPnRkLCByZXN1bHQuYmxvY2ssICZrZXkpOwotCQlpZiAoZG1fYmlvX2RldGFpbih0Yy0+cG9vbC0+cHJpc29uLCAma2V5LCBiaW8sICZjZWxsMiwgJmNlbGxfcmVzdWx0KSkgewotCQkJY2VsbF9kZWZlcl9ub19ob2xkZXJfbm9fZnJlZSh0YywgJmNlbGwxKTsKKwkJaWYgKGJpb19kZXRhaW4odGMtPnBvb2wsICZrZXksIGJpbywgJmRhdGFfY2VsbCkpIHsKKwkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCB2aXJ0X2NlbGwpOwogCQkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAkJfQogCiAJCWluY19hbGxfaW9fZW50cnkodGMtPnBvb2wsIGJpbyk7Ci0JCWNlbGxfZGVmZXJfbm9faG9sZGVyX25vX2ZyZWUodGMsICZjZWxsMik7Ci0JCWNlbGxfZGVmZXJfbm9faG9sZGVyX25vX2ZyZWUodGMsICZjZWxsMSk7CisJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBkYXRhX2NlbGwpOworCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgdmlydF9jZWxsKTsKIAogCQlyZW1hcCh0YywgYmlvLCByZXN1bHQuYmxvY2spOwogCQlyZXR1cm4gRE1fTUFQSU9fUkVNQVBQRUQ7CkBAIC0xOTkxLDE4ICsyMzQ1LDEzIEBACiAJCQkgKiBvZiBkb2luZyBzby4KIAkJCSAqLwogCQkJaGFuZGxlX3Vuc2VydmljZWFibGVfYmlvKHRjLT5wb29sLCBiaW8pOwotCQkJY2VsbF9kZWZlcl9ub19ob2xkZXJfbm9fZnJlZSh0YywgJmNlbGwxKTsKKwkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCB2aXJ0X2NlbGwpOwogCQkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAkJfQogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAogCWNhc2UgLUVXT1VMREJMT0NLOgotCQkvKgotCQkgKiBJbiBmdXR1cmUsIHRoZSBmYWlsZWQgZG1fdGhpbl9maW5kX2Jsb2NrIGFib3ZlIGNvdWxkCi0JCSAqIHByb3ZpZGUgdGhlIGhpbnQgdG8gbG9hZCB0aGUgbWV0YWRhdGEgaW50byBjYWNoZS4KLQkJICovCi0JCXRoaW5fZGVmZXJfYmlvKHRjLCBiaW8pOwotCQljZWxsX2RlZmVyX25vX2hvbGRlcl9ub19mcmVlKHRjLCAmY2VsbDEpOworCQl0aGluX2RlZmVyX2NlbGwodGMsIHZpcnRfY2VsbCk7CiAJCXJldHVybiBETV9NQVBJT19TVUJNSVRURUQ7CiAKIAlkZWZhdWx0OgpAQCAtMjAxMiw3ICsyMzYxLDcgQEAKIAkJICogcG9vbCBpcyBzd2l0Y2hlZCB0byBmYWlsLWlvIG1vZGUuCiAJCSAqLwogCQliaW9faW9fZXJyb3IoYmlvKTsKLQkJY2VsbF9kZWZlcl9ub19ob2xkZXJfbm9fZnJlZSh0YywgJmNlbGwxKTsKKwkJY2VsbF9kZWZlcl9ub19ob2xkZXIodGMsIHZpcnRfY2VsbCk7CiAJCXJldHVybiBETV9NQVBJT19TVUJNSVRURUQ7CiAJfQogfQpAQCAtMjE5Myw3ICsyNTQyLDcgQEAKIAkJcG9vbC0+c2VjdG9yc19wZXJfYmxvY2tfc2hpZnQgPSBfX2ZmcyhibG9ja19zaXplKTsKIAlwb29sLT5sb3dfd2F0ZXJfYmxvY2tzID0gMDsKIAlwb29sX2ZlYXR1cmVzX2luaXQoJnBvb2wtPnBmKTsKLQlwb29sLT5wcmlzb24gPSBkbV9iaW9fcHJpc29uX2NyZWF0ZShQUklTT05fQ0VMTFMpOworCXBvb2wtPnByaXNvbiA9IGRtX2Jpb19wcmlzb25fY3JlYXRlKCk7CiAJaWYgKCFwb29sLT5wcmlzb24pIHsKIAkJKmVycm9yID0gIkVycm9yIGNyZWF0aW5nIHBvb2wncyBiaW8gcHJpc29uIjsKIAkJZXJyX3AgPSBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMjIxOSw2ICsyNTY4LDcgQEAKIAkJZ290byBiYWRfd3E7CiAJfQogCisJdGhyb3R0bGVfaW5pdCgmcG9vbC0+dGhyb3R0bGUpOwogCUlOSVRfV09SSygmcG9vbC0+d29ya2VyLCBkb193b3JrZXIpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwb29sLT53YWtlciwgZG9fd2FrZXIpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwb29sLT5ub19zcGFjZV90aW1lb3V0LCBkb19ub19zcGFjZV90aW1lb3V0KTsKQEAgLTIyMjgsNiArMjU3OCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPnByZXBhcmVkX2Rpc2NhcmRzKTsKIAlJTklUX0xJU1RfSEVBRCgmcG9vbC0+YWN0aXZlX3RoaW5zKTsKIAlwb29sLT5sb3dfd2F0ZXJfdHJpZ2dlcmVkID0gZmFsc2U7CisJcG9vbC0+c3VzcGVuZGVkID0gdHJ1ZTsKIAogCXBvb2wtPnNoYXJlZF9yZWFkX2RzID0gZG1fZGVmZXJyZWRfc2V0X2NyZWF0ZSgpOwogCWlmICghcG9vbC0+c2hhcmVkX3JlYWRfZHMpIHsKQEAgLTI3NjQsMjAgKzMxMTUsNzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcG9vbF9zdXNwZW5kX2FjdGl2ZV90aGlucyhzdHJ1Y3QgcG9vbCAqcG9vbCkKK3sKKwlzdHJ1Y3QgdGhpbl9jICp0YzsKKworCS8qIFN1c3BlbmQgYWxsIGFjdGl2ZSB0aGluIGRldmljZXMgKi8KKwl0YyA9IGdldF9maXJzdF90aGluKHBvb2wpOworCXdoaWxlICh0YykgeworCQlkbV9pbnRlcm5hbF9zdXNwZW5kX25vZmx1c2godGMtPnRoaW5fbWQpOworCQl0YyA9IGdldF9uZXh0X3RoaW4ocG9vbCwgdGMpOworCX0KK30KKworc3RhdGljIHZvaWQgcG9vbF9yZXN1bWVfYWN0aXZlX3RoaW5zKHN0cnVjdCBwb29sICpwb29sKQoreworCXN0cnVjdCB0aGluX2MgKnRjOworCisJLyogUmVzdW1lIGFsbCBhY3RpdmUgdGhpbiBkZXZpY2VzICovCisJdGMgPSBnZXRfZmlyc3RfdGhpbihwb29sKTsKKwl3aGlsZSAodGMpIHsKKwkJZG1faW50ZXJuYWxfcmVzdW1lKHRjLT50aGluX21kKTsKKwkJdGMgPSBnZXRfbmV4dF90aGluKHBvb2wsIHRjKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHBvb2xfcmVzdW1lKHN0cnVjdCBkbV90YXJnZXQgKnRpKQogewogCXN0cnVjdCBwb29sX2MgKnB0ID0gdGktPnByaXZhdGU7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSBwdC0+cG9vbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJLyoKKwkgKiBNdXN0IHJlcXVldWUgYWN0aXZlX3RoaW5zJyBiaW9zIGFuZCB0aGVuIHJlc3VtZQorCSAqIGFjdGl2ZV90aGlucyBfYmVmb3JlXyBjbGVhcmluZyAnc3VzcGVuZCcgZmxhZy4KKwkgKi8KKwlyZXF1ZXVlX2Jpb3MocG9vbCk7CisJcG9vbF9yZXN1bWVfYWN0aXZlX3RoaW5zKHBvb2wpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKIAlwb29sLT5sb3dfd2F0ZXJfdHJpZ2dlcmVkID0gZmFsc2U7CisJcG9vbC0+c3VzcGVuZGVkID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bG9jaywgZmxhZ3MpOwotCXJlcXVldWVfYmlvcyhwb29sKTsKIAogCWRvX3dha2VyKCZwb29sLT53YWtlci53b3JrKTsKIH0KIAorc3RhdGljIHZvaWQgcG9vbF9wcmVzdXNwZW5kKHN0cnVjdCBkbV90YXJnZXQgKnRpKQoreworCXN0cnVjdCBwb29sX2MgKnB0ID0gdGktPnByaXZhdGU7CisJc3RydWN0IHBvb2wgKnBvb2wgPSBwdC0+cG9vbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKKwlwb29sLT5zdXNwZW5kZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKKworCXBvb2xfc3VzcGVuZF9hY3RpdmVfdGhpbnMocG9vbCk7Cit9CisKK3N0YXRpYyB2b2lkIHBvb2xfcHJlc3VzcGVuZF91bmRvKHN0cnVjdCBkbV90YXJnZXQgKnRpKQoreworCXN0cnVjdCBwb29sX2MgKnB0ID0gdGktPnByaXZhdGU7CisJc3RydWN0IHBvb2wgKnBvb2wgPSBwdC0+cG9vbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcG9vbF9yZXN1bWVfYWN0aXZlX3RoaW5zKHBvb2wpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKKwlwb29sLT5zdXNwZW5kZWQgPSBmYWxzZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIHBvb2xfcG9zdHN1c3BlbmQoc3RydWN0IGRtX3RhcmdldCAqdGkpCiB7CiAJc3RydWN0IHBvb2xfYyAqcHQgPSB0aS0+cHJpdmF0ZTsKQEAgLTI5NDksNyArMzM1Nyw2IEBACiAgKiAgIGNyZWF0ZV90aGluCTxkZXZfaWQ+CiAgKiAgIGNyZWF0ZV9zbmFwCTxkZXZfaWQ+IDxvcmlnaW5faWQ+CiAgKiAgIGRlbGV0ZQkJPGRldl9pZD4KLSAqICAgdHJpbQkJPGRldl9pZD4gPG5ld19zaXplX2luX3NlY3RvcnM+CiAgKiAgIHNldF90cmFuc2FjdGlvbl9pZCA8Y3VycmVudF90cmFuc19pZD4gPG5ld190cmFuc19pZD4KICAqICAgcmVzZXJ2ZV9tZXRhZGF0YV9zbmFwCiAgKiAgIHJlbGVhc2VfbWV0YWRhdGFfc25hcApAQCAtMzE3NywxNSArMzU4NCwzNSBAQAogewogCXN0cnVjdCBwb29sX2MgKnB0ID0gdGktPnByaXZhdGU7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSBwdC0+cG9vbDsKLQl1aW50NjRfdCBpb19vcHRfc2VjdG9ycyA9IGxpbWl0cy0+aW9fb3B0ID4+IFNFQ1RPUl9TSElGVDsKKwlzZWN0b3JfdCBpb19vcHRfc2VjdG9ycyA9IGxpbWl0cy0+aW9fb3B0ID4+IFNFQ1RPUl9TSElGVDsKKworCS8qCisJICogSWYgbWF4X3NlY3RvcnMgaXMgc21hbGxlciB0aGFuIHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrIGFkanVzdCBpdAorCSAqIHRvIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHBvd2VyLW9mLTIgZmFjdG9yIG9mIHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrLgorCSAqIFRoaXMgaXMgZXNwZWNpYWxseSBiZW5lZmljaWFsIHdoZW4gdGhlIHBvb2wncyBkYXRhIGRldmljZSBpcyBhIFJBSUQKKwkgKiBkZXZpY2UgdGhhdCBoYXMgYSBmdWxsIHN0cmlwZSB3aWR0aCB0aGF0IG1hdGNoZXMgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2sKKwkgKiAtLSBiZWNhdXNlIGV2ZW4gdGhvdWdoIHBhcnRpYWwgUkFJRCBzdHJpcGUtc2l6ZWQgSU9zIHdpbGwgYmUgaXNzdWVkIHRvIGEKKwkgKiAgICBzaW5nbGUgUkFJRCBzdHJpcGU7IHdoZW4gYWdncmVnYXRlZCB0aGV5IHdpbGwgZW5kIG9uIGEgZnVsbCBSQUlEIHN0cmlwZQorCSAqICAgIGJvdW5kYXJ5Li4gd2hpY2ggYXZvaWRzIGFkZGl0aW9uYWwgcGFydGlhbCBSQUlEIHN0cmlwZSB3cml0ZXMgY2FzY2FkaW5nCisJICovCisJaWYgKGxpbWl0cy0+bWF4X3NlY3RvcnMgPCBwb29sLT5zZWN0b3JzX3Blcl9ibG9jaykgeworCQl3aGlsZSAoIWlzX2ZhY3Rvcihwb29sLT5zZWN0b3JzX3Blcl9ibG9jaywgbGltaXRzLT5tYXhfc2VjdG9ycykpIHsKKwkJCWlmICgobGltaXRzLT5tYXhfc2VjdG9ycyAmIChsaW1pdHMtPm1heF9zZWN0b3JzIC0gMSkpID09IDApCisJCQkJbGltaXRzLT5tYXhfc2VjdG9ycy0tOworCQkJbGltaXRzLT5tYXhfc2VjdG9ycyA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKGxpbWl0cy0+bWF4X3NlY3RvcnMpOworCQl9CisJfQogCiAJLyoKIAkgKiBJZiB0aGUgc3lzdGVtLWRldGVybWluZWQgc3RhY2tlZCBsaW1pdHMgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUKIAkgKiBwb29sJ3MgYmxvY2tzaXplIChpb19vcHQgaXMgYSBmYWN0b3IpIGRvIG5vdCBvdmVycmlkZSB0aGVtLgogCSAqLwogCWlmIChpb19vcHRfc2VjdG9ycyA8IHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrIHx8Ci0JICAgIGRvX2Rpdihpb19vcHRfc2VjdG9ycywgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2spKSB7Ci0JCWJsa19saW1pdHNfaW9fbWluKGxpbWl0cywgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2sgPDwgU0VDVE9SX1NISUZUKTsKKwkgICAgIWlzX2ZhY3Rvcihpb19vcHRfc2VjdG9ycywgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2spKSB7CisJCWlmIChpc19mYWN0b3IocG9vbC0+c2VjdG9yc19wZXJfYmxvY2ssIGxpbWl0cy0+bWF4X3NlY3RvcnMpKQorCQkJYmxrX2xpbWl0c19pb19taW4obGltaXRzLCBsaW1pdHMtPm1heF9zZWN0b3JzIDw8IFNFQ1RPUl9TSElGVCk7CisJCWVsc2UKKwkJCWJsa19saW1pdHNfaW9fbWluKGxpbWl0cywgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2sgPDwgU0VDVE9SX1NISUZUKTsKIAkJYmxrX2xpbWl0c19pb19vcHQobGltaXRzLCBwb29sLT5zZWN0b3JzX3Blcl9ibG9jayA8PCBTRUNUT1JfU0hJRlQpOwogCX0KIApAQCAtMzIxNCwxMSArMzY0MSwxMyBAQAogCS5uYW1lID0gInRoaW4tcG9vbCIsCiAJLmZlYXR1cmVzID0gRE1fVEFSR0VUX1NJTkdMRVRPTiB8IERNX1RBUkdFVF9BTFdBWVNfV1JJVEVBQkxFIHwKIAkJICAgIERNX1RBUkdFVF9JTU1VVEFCTEUsCi0JLnZlcnNpb24gPSB7MSwgMTMsIDB9LAorCS52ZXJzaW9uID0gezEsIDE0LCAwfSwKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiAJLmN0ciA9IHBvb2xfY3RyLAogCS5kdHIgPSBwb29sX2R0ciwKIAkubWFwID0gcG9vbF9tYXAsCisJLnByZXN1c3BlbmQgPSBwb29sX3ByZXN1c3BlbmQsCisJLnByZXN1c3BlbmRfdW5kbyA9IHBvb2xfcHJlc3VzcGVuZF91bmRvLAogCS5wb3N0c3VzcGVuZCA9IHBvb2xfcG9zdHN1c3BlbmQsCiAJLnByZXJlc3VtZSA9IHBvb2xfcHJlcmVzdW1lLAogCS5yZXN1bWUgPSBwb29sX3Jlc3VtZSwKQEAgLTMyNDgsMTQgKzM2NzcsMTQgQEAKIAlzdHJ1Y3QgdGhpbl9jICp0YyA9IHRpLT5wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQl0aGluX3B1dCh0Yyk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmdGMtPmNhbl9kZXN0cm95KTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZ0Yy0+cG9vbC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsX3JjdSgmdGMtPmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5wb29sLT5sb2NrLCBmbGFncyk7CiAJc3luY2hyb25pemVfcmN1KCk7CiAKKwl0aGluX3B1dCh0Yyk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmdGMtPmNhbl9kZXN0cm95KTsKKwogCW11dGV4X2xvY2soJmRtX3RoaW5fcG9vbF90YWJsZS5tdXRleCk7CiAKIAlfX3Bvb2xfZGVjKHRjLT5wb29sKTsKQEAgLTMzMDIsNyArMzczMSw5IEBACiAJCXIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQorCXRjLT50aGluX21kID0gZG1fdGFibGVfZ2V0X21kKHRpLT50YWJsZSk7CiAJc3Bpbl9sb2NrX2luaXQoJnRjLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdGMtPmRlZmVycmVkX2NlbGxzKTsKIAliaW9fbGlzdF9pbml0KCZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOwogCWJpb19saXN0X2luaXQoJnRjLT5yZXRyeV9vbl9yZXN1bWVfbGlzdCk7CiAJdGMtPnNvcnRfYmlvX2xpc3QgPSBSQl9ST09UOwpAQCAtMzM0NywxOCArMzc3OCwxOCBAQAogCWlmIChnZXRfcG9vbF9tb2RlKHRjLT5wb29sKSA9PSBQTV9GQUlMKSB7CiAJCXRpLT5lcnJvciA9ICJDb3VsZG4ndCBvcGVuIHRoaW4gZGV2aWNlLCBQb29sIGlzIGluIGZhaWwgbW9kZSI7CiAJCXIgPSAtRUlOVkFMOwotCQlnb3RvIGJhZF90aGluX29wZW47CisJCWdvdG8gYmFkX3Bvb2w7CiAJfQogCiAJciA9IGRtX3Bvb2xfb3Blbl90aGluX2RldmljZSh0Yy0+cG9vbC0+cG1kLCB0Yy0+ZGV2X2lkLCAmdGMtPnRkKTsKIAlpZiAocikgewogCQl0aS0+ZXJyb3IgPSAiQ291bGRuJ3Qgb3BlbiB0aGluIGludGVybmFsIGRldmljZSI7Ci0JCWdvdG8gYmFkX3RoaW5fb3BlbjsKKwkJZ290byBiYWRfcG9vbDsKIAl9CiAKIAlyID0gZG1fc2V0X3RhcmdldF9tYXhfaW9fbGVuKHRpLCB0Yy0+cG9vbC0+c2VjdG9yc19wZXJfYmxvY2spOwogCWlmIChyKQotCQlnb3RvIGJhZF90YXJnZXRfbWF4X2lvX2xlbjsKKwkJZ290byBiYWQ7CiAKIAl0aS0+bnVtX2ZsdXNoX2Jpb3MgPSAxOwogCXRpLT5mbHVzaF9zdXBwb3J0ZWQgPSB0cnVlOwpAQCAtMzM3MywxNCArMzgwNCwxNiBAQAogCQl0aS0+c3BsaXRfZGlzY2FyZF9iaW9zID0gdHJ1ZTsKIAl9CiAKLQlkbV9wdXQocG9vbF9tZCk7Ci0KIAltdXRleF91bmxvY2soJmRtX3RoaW5fcG9vbF90YWJsZS5tdXRleCk7CiAKLQlhdG9taWNfc2V0KCZ0Yy0+cmVmY291bnQsIDEpOwotCWluaXRfY29tcGxldGlvbigmdGMtPmNhbl9kZXN0cm95KTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZ0Yy0+cG9vbC0+bG9jaywgZmxhZ3MpOworCWlmICh0Yy0+cG9vbC0+c3VzcGVuZGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5wb29sLT5sb2NrLCBmbGFncyk7CisJCW11dGV4X2xvY2soJmRtX3RoaW5fcG9vbF90YWJsZS5tdXRleCk7IC8qIHJlYWNxdWlyZSBmb3IgX19wb29sX2RlYyAqLworCQl0aS0+ZXJyb3IgPSAiVW5hYmxlIHRvIGFjdGl2YXRlIHRoaW4gZGV2aWNlIHdoaWxlIHBvb2wgaXMgc3VzcGVuZGVkIjsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gYmFkOworCX0KIAlsaXN0X2FkZF90YWlsX3JjdSgmdGMtPmxpc3QsICZ0Yy0+cG9vbC0+YWN0aXZlX3RoaW5zKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+cG9vbC0+bG9jaywgZmxhZ3MpOwogCS8qCkBAIC0zMzkxLDExICszODI0LDE2IEBACiAJICovCiAJc3luY2hyb25pemVfcmN1KCk7CiAKKwlkbV9wdXQocG9vbF9tZCk7CisKKwlhdG9taWNfc2V0KCZ0Yy0+cmVmY291bnQsIDEpOworCWluaXRfY29tcGxldGlvbigmdGMtPmNhbl9kZXN0cm95KTsKKwogCXJldHVybiAwOwogCi1iYWRfdGFyZ2V0X21heF9pb19sZW46CitiYWQ6CiAJZG1fcG9vbF9jbG9zZV90aGluX2RldmljZSh0Yy0+dGQpOwotYmFkX3RoaW5fb3BlbjoKK2JhZF9wb29sOgogCV9fcG9vbF9kZWModGMtPnBvb2wpOwogYmFkX3Bvb2xfbG9va3VwOgogCWRtX3B1dChwb29sX21kKTsKQEAgLTM1NDEsNiArMzk3OSwyMSBAQAogCURNRU1JVCgiRXJyb3IiKTsKIH0KIAorc3RhdGljIGludCB0aGluX21lcmdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYnZlY19tZXJnZV9kYXRhICpidm0sCisJCSAgICAgIHN0cnVjdCBiaW9fdmVjICpiaW92ZWMsIGludCBtYXhfc2l6ZSkKK3sKKwlzdHJ1Y3QgdGhpbl9jICp0YyA9IHRpLT5wcml2YXRlOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUodGMtPnBvb2xfZGV2LT5iZGV2KTsKKworCWlmICghcS0+bWVyZ2VfYnZlY19mbikKKwkJcmV0dXJuIG1heF9zaXplOworCisJYnZtLT5iaV9iZGV2ID0gdGMtPnBvb2xfZGV2LT5iZGV2OworCWJ2bS0+Ymlfc2VjdG9yID0gZG1fdGFyZ2V0X29mZnNldCh0aSwgYnZtLT5iaV9zZWN0b3IpOworCisJcmV0dXJuIG1pbihtYXhfc2l6ZSwgcS0+bWVyZ2VfYnZlY19mbihxLCBidm0sIGJpb3ZlYykpOworfQorCiBzdGF0aWMgaW50IHRoaW5faXRlcmF0ZV9kZXZpY2VzKHN0cnVjdCBkbV90YXJnZXQgKnRpLAogCQkJCWl0ZXJhdGVfZGV2aWNlc19jYWxsb3V0X2ZuIGZuLCB2b2lkICpkYXRhKQogewpAQCAtMzU2NSw3ICs0MDE4LDcgQEAKIAogc3RhdGljIHN0cnVjdCB0YXJnZXRfdHlwZSB0aGluX3RhcmdldCA9IHsKIAkubmFtZSA9ICJ0aGluIiwKLQkudmVyc2lvbiA9IHsxLCAxMywgMH0sCisJLnZlcnNpb24gPSB7MSwgMTQsIDB9LAogCS5tb2R1bGUJPSBUSElTX01PRFVMRSwKIAkuY3RyID0gdGhpbl9jdHIsCiAJLmR0ciA9IHRoaW5fZHRyLApAQCAtMzU3NSw2ICs0MDI4LDcgQEAKIAkucHJlc3VzcGVuZCA9IHRoaW5fcHJlc3VzcGVuZCwKIAkucG9zdHN1c3BlbmQgPSB0aGluX3Bvc3RzdXNwZW5kLAogCS5zdGF0dXMgPSB0aGluX3N0YXR1cywKKwkubWVyZ2UgPSB0aGluX21lcmdlLAogCS5pdGVyYXRlX2RldmljZXMgPSB0aGluX2l0ZXJhdGVfZGV2aWNlcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCA1OGYzOTI3Li44ZjM3ZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9ibG9jay5oPgogCkBAIC0xMTcsNiArMTE4LDcgQEAKICNkZWZpbmUgRE1GX05PRkxVU0hfU1VTUEVORElORyA1CiAjZGVmaW5lIERNRl9NRVJHRV9JU19PUFRJT05BTCA2CiAjZGVmaW5lIERNRl9ERUZFUlJFRF9SRU1PVkUgNworI2RlZmluZSBETUZfU1VTUEVOREVEX0lOVEVSTkFMTFkgOAogCiAvKgogICogQSBkdW1teSBkZWZpbml0aW9uIHRvIG1ha2UgUkNVIGhhcHB5LgpAQCAtMTQwLDcgKzE0Miw3IEBACiAJICogVXNlIGRtX2dldF9saXZlX3RhYmxle19mYXN0fSBvciB0YWtlIHN1c3BlbmRfbG9jayBmb3IKIAkgKiBkZXJlZmVyZW5jZS4KIAkgKi8KLQlzdHJ1Y3QgZG1fdGFibGUgKm1hcDsKKwlzdHJ1Y3QgZG1fdGFibGUgX19yY3UgKm1hcDsKIAogCXN0cnVjdCBsaXN0X2hlYWQgdGFibGVfZGV2aWNlczsKIAlzdHJ1Y3QgbXV0ZXggdGFibGVfZGV2aWNlc19sb2NrOwpAQCAtNTI1LDE0ICs1MjcsMTUgQEAKIAkJZ290byBvdXQ7CiAKIAl0Z3QgPSBkbV90YWJsZV9nZXRfdGFyZ2V0KG1hcCwgMCk7CisJaWYgKCF0Z3QtPnR5cGUtPmlvY3RsKQorCQlnb3RvIG91dDsKIAogCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKSB7CiAJCXIgPSAtRUFHQUlOOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodGd0LT50eXBlLT5pb2N0bCkKLQkJciA9IHRndC0+dHlwZS0+aW9jdGwodGd0LCBjbWQsIGFyZyk7CisJciA9IHRndC0+dHlwZS0+aW9jdGwodGd0LCBjbWQsIGFyZyk7CiAKIG91dDoKIAlkbV9wdXRfbGl2ZV90YWJsZShtZCwgc3JjdV9pZHgpOwpAQCAtMTYwNyw5ICsxNjEwLDkgQEAKIAkgKiBGaW5kIG1heGltdW0gYW1vdW50IG9mIEkvTyB0aGF0IHdvbid0IG5lZWQgc3BsaXR0aW5nCiAJICovCiAJbWF4X3NlY3RvcnMgPSBtaW4obWF4X2lvX2xlbihidm0tPmJpX3NlY3RvciwgdGkpLAotCQkJICAoc2VjdG9yX3QpIEJJT19NQVhfU0VDVE9SUyk7CisJCQkgIChzZWN0b3JfdCkgcXVldWVfbWF4X3NlY3RvcnMocSkpOwogCW1heF9zaXplID0gKG1heF9zZWN0b3JzIDw8IFNFQ1RPUl9TSElGVCkgLSBidm0tPmJpX3NpemU7Ci0JaWYgKG1heF9zaXplIDwgMCkKKwlpZiAodW5saWtlbHkobWF4X3NpemUgPCAwKSkgLyogdGhpcyBzaG91bGRuJ3QgX2V2ZXJfIGhhcHBlbiAqLwogCQltYXhfc2l6ZSA9IDA7CiAKIAkvKgpAQCAtMTYyMSwxMCArMTYyNCwxMCBAQAogCQltYXhfc2l6ZSA9IHRpLT50eXBlLT5tZXJnZSh0aSwgYnZtLCBiaW92ZWMsIG1heF9zaXplKTsKIAkvKgogCSAqIElmIHRoZSB0YXJnZXQgZG9lc24ndCBzdXBwb3J0IG1lcmdlIG1ldGhvZCBhbmQgc29tZSBvZiB0aGUgZGV2aWNlcwotCSAqIHByb3ZpZGVkIHRoZWlyIG1lcmdlX2J2ZWMgbWV0aG9kICh3ZSBrbm93IHRoaXMgYnkgbG9va2luZyBhdAotCSAqIHF1ZXVlX21heF9od19zZWN0b3JzKSwgdGhlbiB3ZSBjYW4ndCBhbGxvdyBiaW9zIHdpdGggbXVsdGlwbGUgdmVjdG9yCi0JICogZW50cmllcy4gIFNvIGFsd2F5cyBzZXQgbWF4X3NpemUgdG8gMCwgYW5kIHRoZSBjb2RlIGJlbG93IGFsbG93cwotCSAqIGp1c3Qgb25lIHBhZ2UuCisJICogcHJvdmlkZWQgdGhlaXIgbWVyZ2VfYnZlYyBtZXRob2QgKHdlIGtub3cgdGhpcyBieSBsb29raW5nIGZvciB0aGUKKwkgKiBtYXhfaHdfc2VjdG9ycyB0aGF0IGRtX3NldF9kZXZpY2VfbGltaXRzIG1heSBzZXQpLCB0aGVuIHdlIGNhbid0CisJICogYWxsb3cgYmlvcyB3aXRoIG11bHRpcGxlIHZlY3RvciBlbnRyaWVzLiAgU28gYWx3YXlzIHNldCBtYXhfc2l6ZQorCSAqIHRvIDAsIGFuZCB0aGUgY29kZSBiZWxvdyBhbGxvd3MganVzdCBvbmUgcGFnZS4KIAkgKi8KIAllbHNlIGlmIChxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKSA8PSBQQUdFX1NJWkUgPj4gOSkKIAkJbWF4X3NpemUgPSAwOwpAQCAtMjMzMiw3ICsyMzM1LDcgQEAKIAogCW1lcmdlX2lzX29wdGlvbmFsID0gZG1fdGFibGVfbWVyZ2VfaXNfb3B0aW9uYWwodCk7CiAKLQlvbGRfbWFwID0gbWQtPm1hcDsKKwlvbGRfbWFwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZC0+bWFwLCBsb2NrZGVwX2lzX2hlbGQoJm1kLT5zdXNwZW5kX2xvY2spKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobWQtPm1hcCwgdCk7CiAJbWQtPmltbXV0YWJsZV90YXJnZXRfdHlwZSA9IGRtX3RhYmxlX2dldF9pbW11dGFibGVfdGFyZ2V0X3R5cGUodCk7CiAKQEAgLTIzNDEsNyArMjM0NCw4IEBACiAJCXNldF9iaXQoRE1GX01FUkdFX0lTX09QVElPTkFMLCAmbWQtPmZsYWdzKTsKIAllbHNlCiAJCWNsZWFyX2JpdChETUZfTUVSR0VfSVNfT1BUSU9OQUwsICZtZC0+ZmxhZ3MpOwotCWRtX3N5bmNfdGFibGUobWQpOworCWlmIChvbGRfbWFwKQorCQlkbV9zeW5jX3RhYmxlKG1kKTsKIAogCXJldHVybiBvbGRfbWFwOwogfQpAQCAtMjM1MSw3ICsyMzU1LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBkbV90YWJsZSAqX191bmJpbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gbWQtPm1hcDsKKwlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobWQtPm1hcCwgMSk7CiAKIAlpZiAoIW1hcCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNzE2LDYgKzI3MjAsOTkgQEAKIH0KIAogLyoKKyAqIElmIF9fZG1fc3VzcGVuZCByZXR1cm5zIDAsIHRoZSBkZXZpY2UgaXMgY29tcGxldGVseSBxdWllc2NlbnQKKyAqIG5vdy4gVGhlcmUgaXMgbm8gcmVxdWVzdC1wcm9jZXNzaW5nIGFjdGl2aXR5LiBBbGwgbmV3IHJlcXVlc3RzCisgKiBhcmUgYmVpbmcgYWRkZWQgdG8gbWQtPmRlZmVycmVkIGxpc3QuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBtZC0+c3VzcGVuZF9sb2NrCisgKi8KK3N0YXRpYyBpbnQgX19kbV9zdXNwZW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IGRtX3RhYmxlICptYXAsCisJCQl1bnNpZ25lZCBzdXNwZW5kX2ZsYWdzLCBpbnQgaW50ZXJydXB0aWJsZSkKK3sKKwlib29sIGRvX2xvY2tmcyA9IHN1c3BlbmRfZmxhZ3MgJiBETV9TVVNQRU5EX0xPQ0tGU19GTEFHOworCWJvb2wgbm9mbHVzaCA9IHN1c3BlbmRfZmxhZ3MgJiBETV9TVVNQRU5EX05PRkxVU0hfRkxBRzsKKwlpbnQgcjsKKworCS8qCisJICogRE1GX05PRkxVU0hfU1VTUEVORElORyBtdXN0IGJlIHNldCBiZWZvcmUgcHJlc3VzcGVuZC4KKwkgKiBUaGlzIGZsYWcgaXMgY2xlYXJlZCBiZWZvcmUgZG1fc3VzcGVuZCByZXR1cm5zLgorCSAqLworCWlmIChub2ZsdXNoKQorCQlzZXRfYml0KERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcsICZtZC0+ZmxhZ3MpOworCisJLyoKKwkgKiBUaGlzIGdldHMgcmV2ZXJ0ZWQgaWYgdGhlcmUncyBhbiBlcnJvciBsYXRlciBhbmQgdGhlIHRhcmdldHMKKwkgKiBwcm92aWRlIHRoZSAucHJlc3VzcGVuZF91bmRvIGhvb2suCisJICovCisJZG1fdGFibGVfcHJlc3VzcGVuZF90YXJnZXRzKG1hcCk7CisKKwkvKgorCSAqIEZsdXNoIEkvTyB0byB0aGUgZGV2aWNlLgorCSAqIEFueSBJL08gc3VibWl0dGVkIGFmdGVyIGxvY2tfZnMoKSBtYXkgbm90IGJlIGZsdXNoZWQuCisJICogbm9mbHVzaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZG9fbG9ja2ZzLgorCSAqIChsb2NrX2ZzKCkgZmx1c2hlcyBJL09zIGFuZCB3YWl0cyBmb3IgdGhlbSB0byBjb21wbGV0ZS4pCisJICovCisJaWYgKCFub2ZsdXNoICYmIGRvX2xvY2tmcykgeworCQlyID0gbG9ja19mcyhtZCk7CisJCWlmIChyKSB7CisJCQlkbV90YWJsZV9wcmVzdXNwZW5kX3VuZG9fdGFyZ2V0cyhtYXApOworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisKKwkvKgorCSAqIEhlcmUgd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBubyBwcm9jZXNzZXMgYXJlIHN1Ym1pdHRpbmcgcmVxdWVzdHMKKwkgKiB0byB0YXJnZXQgZHJpdmVycyBpLmUuIG5vIG9uZSBtYXkgYmUgZXhlY3V0aW5nCisJICogX19zcGxpdF9hbmRfcHJvY2Vzc19iaW8uIFRoaXMgaXMgY2FsbGVkIGZyb20gZG1fcmVxdWVzdCBhbmQKKwkgKiBkbV93cV93b3JrLgorCSAqCisJICogVG8gZ2V0IGFsbCBwcm9jZXNzZXMgb3V0IG9mIF9fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvIGluIGRtX3JlcXVlc3QsCisJICogd2UgdGFrZSB0aGUgd3JpdGUgbG9jay4gVG8gcHJldmVudCBhbnkgcHJvY2VzcyBmcm9tIHJlZW50ZXJpbmcKKwkgKiBfX3NwbGl0X2FuZF9wcm9jZXNzX2JpbyBmcm9tIGRtX3JlcXVlc3QgYW5kIHF1aWVzY2UgdGhlIHRocmVhZAorCSAqIChkbV93cV93b3JrKSwgd2Ugc2V0IEJNRl9CTE9DS19JT19GT1JfU1VTUEVORCBhbmQgY2FsbAorCSAqIGZsdXNoX3dvcmtxdWV1ZShtZC0+d3EpLgorCSAqLworCXNldF9iaXQoRE1GX0JMT0NLX0lPX0ZPUl9TVVNQRU5ELCAmbWQtPmZsYWdzKTsKKwlpZiAobWFwKQorCQlzeW5jaHJvbml6ZV9zcmN1KCZtZC0+aW9fYmFycmllcik7CisKKwkvKgorCSAqIFN0b3AgbWQtPnF1ZXVlIGJlZm9yZSBmbHVzaGluZyBtZC0+d3EgaW4gY2FzZSByZXF1ZXN0LWJhc2VkCisJICogZG0gZGVmZXJzIHJlcXVlc3RzIHRvIG1kLT53cSBmcm9tIG1kLT5xdWV1ZS4KKwkgKi8KKwlpZiAoZG1fcmVxdWVzdF9iYXNlZChtZCkpCisJCXN0b3BfcXVldWUobWQtPnF1ZXVlKTsKKworCWZsdXNoX3dvcmtxdWV1ZShtZC0+d3EpOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IG5vIG1vcmUgcmVxdWVzdHMgYXJlIGVudGVyaW5nIHRhcmdldCByZXF1ZXN0IHJvdXRpbmVzLgorCSAqIFdlIGNhbGwgZG1fd2FpdF9mb3JfY29tcGxldGlvbiB0byB3YWl0IGZvciBhbGwgZXhpc3RpbmcgcmVxdWVzdHMKKwkgKiB0byBmaW5pc2guCisJICovCisJciA9IGRtX3dhaXRfZm9yX2NvbXBsZXRpb24obWQsIGludGVycnVwdGlibGUpOworCisJaWYgKG5vZmx1c2gpCisJCWNsZWFyX2JpdChETUZfTk9GTFVTSF9TVVNQRU5ESU5HLCAmbWQtPmZsYWdzKTsKKwlpZiAobWFwKQorCQlzeW5jaHJvbml6ZV9zcmN1KCZtZC0+aW9fYmFycmllcik7CisKKwkvKiB3ZXJlIHdlIGludGVycnVwdGVkID8gKi8KKwlpZiAociA8IDApIHsKKwkJZG1fcXVldWVfZmx1c2gobWQpOworCisJCWlmIChkbV9yZXF1ZXN0X2Jhc2VkKG1kKSkKKwkJCXN0YXJ0X3F1ZXVlKG1kLT5xdWV1ZSk7CisKKwkJdW5sb2NrX2ZzKG1kKTsKKwkJZG1fdGFibGVfcHJlc3VzcGVuZF91bmRvX3RhcmdldHMobWFwKTsKKwkJLyogcHVzaGJhY2sgbGlzdCBpcyBhbHJlYWR5IGZsdXNoZWQsIHNvIHNraXAgZmx1c2ggKi8KKwl9CisKKwlyZXR1cm4gcjsKK30KKworLyoKICAqIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjaGFuZ2UgYSBtYXBwaW5nIHRhYmxlIHVuZGVyIGEgbW91bnRlZAogICogZmlsZXN5c3RlbS4gIEZvciBleGFtcGxlIHdlIG1pZ2h0IHdhbnQgdG8gbW92ZSBzb21lIGRhdGEgaW4KICAqIHRoZSBiYWNrZ3JvdW5kLiAgQmVmb3JlIHRoZSB0YWJsZSBjYW4gYmUgc3dhcHBlZCB3aXRoCkBAIC0yNzM1LDkxICsyODMyLDI5IEBACiB7CiAJc3RydWN0IGRtX3RhYmxlICptYXAgPSBOVUxMOwogCWludCByID0gMDsKLQlpbnQgZG9fbG9ja2ZzID0gc3VzcGVuZF9mbGFncyAmIERNX1NVU1BFTkRfTE9DS0ZTX0ZMQUcgPyAxIDogMDsKLQlpbnQgbm9mbHVzaCA9IHN1c3BlbmRfZmxhZ3MgJiBETV9TVVNQRU5EX05PRkxVU0hfRkxBRyA/IDEgOiAwOwogCi0JbXV0ZXhfbG9jaygmbWQtPnN1c3BlbmRfbG9jayk7CityZXRyeToKKwltdXRleF9sb2NrX25lc3RlZCgmbWQtPnN1c3BlbmRfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiAJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpIHsKIAkJciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQltYXAgPSBtZC0+bWFwOwotCi0JLyoKLQkgKiBETUZfTk9GTFVTSF9TVVNQRU5ESU5HIG11c3QgYmUgc2V0IGJlZm9yZSBwcmVzdXNwZW5kLgotCSAqIFRoaXMgZmxhZyBpcyBjbGVhcmVkIGJlZm9yZSBkbV9zdXNwZW5kIHJldHVybnMuCi0JICovCi0JaWYgKG5vZmx1c2gpCi0JCXNldF9iaXQoRE1GX05PRkxVU0hfU1VTUEVORElORywgJm1kLT5mbGFncyk7Ci0KLQkvKiBUaGlzIGRvZXMgbm90IGdldCByZXZlcnRlZCBpZiB0aGVyZSdzIGFuIGVycm9yIGxhdGVyLiAqLwotCWRtX3RhYmxlX3ByZXN1c3BlbmRfdGFyZ2V0cyhtYXApOwotCi0JLyoKLQkgKiBGbHVzaCBJL08gdG8gdGhlIGRldmljZS4KLQkgKiBBbnkgSS9PIHN1Ym1pdHRlZCBhZnRlciBsb2NrX2ZzKCkgbWF5IG5vdCBiZSBmbHVzaGVkLgotCSAqIG5vZmx1c2ggdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGRvX2xvY2tmcy4KLQkgKiAobG9ja19mcygpIGZsdXNoZXMgSS9PcyBhbmQgd2FpdHMgZm9yIHRoZW0gdG8gY29tcGxldGUuKQotCSAqLwotCWlmICghbm9mbHVzaCAmJiBkb19sb2NrZnMpIHsKLQkJciA9IGxvY2tfZnMobWQpOworCWlmIChkbV9zdXNwZW5kZWRfaW50ZXJuYWxseV9tZChtZCkpIHsKKwkJLyogYWxyZWFkeSBpbnRlcm5hbGx5IHN1c3BlbmRlZCwgd2FpdCBmb3IgaW50ZXJuYWwgcmVzdW1lICovCisJCW11dGV4X3VubG9jaygmbWQtPnN1c3BlbmRfbG9jayk7CisJCXIgPSB3YWl0X29uX2JpdCgmbWQtPmZsYWdzLCBETUZfU1VTUEVOREVEX0lOVEVSTkFMTFksIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmIChyKQotCQkJZ290byBvdXRfdW5sb2NrOworCQkJcmV0dXJuIHI7CisJCWdvdG8gcmV0cnk7CiAJfQogCi0JLyoKLQkgKiBIZXJlIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgbm8gcHJvY2Vzc2VzIGFyZSBzdWJtaXR0aW5nIHJlcXVlc3RzCi0JICogdG8gdGFyZ2V0IGRyaXZlcnMgaS5lLiBubyBvbmUgbWF5IGJlIGV4ZWN1dGluZwotCSAqIF9fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvLiBUaGlzIGlzIGNhbGxlZCBmcm9tIGRtX3JlcXVlc3QgYW5kCi0JICogZG1fd3Ffd29yay4KLQkgKgotCSAqIFRvIGdldCBhbGwgcHJvY2Vzc2VzIG91dCBvZiBfX3NwbGl0X2FuZF9wcm9jZXNzX2JpbyBpbiBkbV9yZXF1ZXN0LAotCSAqIHdlIHRha2UgdGhlIHdyaXRlIGxvY2suIFRvIHByZXZlbnQgYW55IHByb2Nlc3MgZnJvbSByZWVudGVyaW5nCi0JICogX19zcGxpdF9hbmRfcHJvY2Vzc19iaW8gZnJvbSBkbV9yZXF1ZXN0IGFuZCBxdWllc2NlIHRoZSB0aHJlYWQKLQkgKiAoZG1fd3Ffd29yayksIHdlIHNldCBCTUZfQkxPQ0tfSU9fRk9SX1NVU1BFTkQgYW5kIGNhbGwKLQkgKiBmbHVzaF93b3JrcXVldWUobWQtPndxKS4KLQkgKi8KLQlzZXRfYml0KERNRl9CTE9DS19JT19GT1JfU1VTUEVORCwgJm1kLT5mbGFncyk7Ci0Jc3luY2hyb25pemVfc3JjdSgmbWQtPmlvX2JhcnJpZXIpOworCW1hcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobWQtPm1hcCwgbG9ja2RlcF9pc19oZWxkKCZtZC0+c3VzcGVuZF9sb2NrKSk7CiAKLQkvKgotCSAqIFN0b3AgbWQtPnF1ZXVlIGJlZm9yZSBmbHVzaGluZyBtZC0+d3EgaW4gY2FzZSByZXF1ZXN0LWJhc2VkCi0JICogZG0gZGVmZXJzIHJlcXVlc3RzIHRvIG1kLT53cSBmcm9tIG1kLT5xdWV1ZS4KLQkgKi8KLQlpZiAoZG1fcmVxdWVzdF9iYXNlZChtZCkpCi0JCXN0b3BfcXVldWUobWQtPnF1ZXVlKTsKLQotCWZsdXNoX3dvcmtxdWV1ZShtZC0+d3EpOwotCi0JLyoKLQkgKiBBdCB0aGlzIHBvaW50IG5vIG1vcmUgcmVxdWVzdHMgYXJlIGVudGVyaW5nIHRhcmdldCByZXF1ZXN0IHJvdXRpbmVzLgotCSAqIFdlIGNhbGwgZG1fd2FpdF9mb3JfY29tcGxldGlvbiB0byB3YWl0IGZvciBhbGwgZXhpc3RpbmcgcmVxdWVzdHMKLQkgKiB0byBmaW5pc2guCi0JICovCi0JciA9IGRtX3dhaXRfZm9yX2NvbXBsZXRpb24obWQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KLQlpZiAobm9mbHVzaCkKLQkJY2xlYXJfYml0KERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcsICZtZC0+ZmxhZ3MpOwotCXN5bmNocm9uaXplX3NyY3UoJm1kLT5pb19iYXJyaWVyKTsKLQotCS8qIHdlcmUgd2UgaW50ZXJydXB0ZWQgPyAqLwotCWlmIChyIDwgMCkgewotCQlkbV9xdWV1ZV9mbHVzaChtZCk7Ci0KLQkJaWYgKGRtX3JlcXVlc3RfYmFzZWQobWQpKQotCQkJc3RhcnRfcXVldWUobWQtPnF1ZXVlKTsKLQotCQl1bmxvY2tfZnMobWQpOwotCQlnb3RvIG91dF91bmxvY2s7IC8qIHB1c2hiYWNrIGxpc3QgaXMgYWxyZWFkeSBmbHVzaGVkLCBzbyBza2lwIGZsdXNoICovCi0JfQotCi0JLyoKLQkgKiBJZiBkbV93YWl0X2Zvcl9jb21wbGV0aW9uIHJldHVybmVkIDAsIHRoZSBkZXZpY2UgaXMgY29tcGxldGVseQotCSAqIHF1aWVzY2VudCBub3cuIFRoZXJlIGlzIG5vIHJlcXVlc3QtcHJvY2Vzc2luZyBhY3Rpdml0eS4gQWxsIG5ldwotCSAqIHJlcXVlc3RzIGFyZSBiZWluZyBhZGRlZCB0byBtZC0+ZGVmZXJyZWQgbGlzdC4KLQkgKi8KKwlyID0gX19kbV9zdXNwZW5kKG1kLCBtYXAsIHN1c3BlbmRfZmxhZ3MsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJaWYgKHIpCisJCWdvdG8gb3V0X3VubG9jazsKIAogCXNldF9iaXQoRE1GX1NVU1BFTkRFRCwgJm1kLT5mbGFncyk7CiAKQEAgLTI4MzAsMjIgKzI4NjUsMTMgQEAKIAlyZXR1cm4gcjsKIH0KIAotaW50IGRtX3Jlc3VtZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCitzdGF0aWMgaW50IF9fZG1fcmVzdW1lKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IGRtX3RhYmxlICptYXApCiB7Ci0JaW50IHIgPSAtRUlOVkFMOwotCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gTlVMTDsKLQotCW11dGV4X2xvY2soJm1kLT5zdXNwZW5kX2xvY2spOwotCWlmICghZG1fc3VzcGVuZGVkX21kKG1kKSkKLQkJZ290byBvdXQ7Ci0KLQltYXAgPSBtZC0+bWFwOwotCWlmICghbWFwIHx8ICFkbV90YWJsZV9nZXRfc2l6ZShtYXApKQotCQlnb3RvIG91dDsKLQotCXIgPSBkbV90YWJsZV9yZXN1bWVfdGFyZ2V0cyhtYXApOwotCWlmIChyKQotCQlnb3RvIG91dDsKKwlpZiAobWFwKSB7CisJCWludCByID0gZG1fdGFibGVfcmVzdW1lX3RhcmdldHMobWFwKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CiAKIAlkbV9xdWV1ZV9mbHVzaChtZCk7CiAKQEAgLTI4NTksNiArMjg4NSwzNyBAQAogCiAJdW5sb2NrX2ZzKG1kKTsKIAorCXJldHVybiAwOworfQorCitpbnQgZG1fcmVzdW1lKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3sKKwlpbnQgciA9IC1FSU5WQUw7CisJc3RydWN0IGRtX3RhYmxlICptYXAgPSBOVUxMOworCityZXRyeToKKwltdXRleF9sb2NrX25lc3RlZCgmbWQtPnN1c3BlbmRfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCisJaWYgKCFkbV9zdXNwZW5kZWRfbWQobWQpKQorCQlnb3RvIG91dDsKKworCWlmIChkbV9zdXNwZW5kZWRfaW50ZXJuYWxseV9tZChtZCkpIHsKKwkJLyogYWxyZWFkeSBpbnRlcm5hbGx5IHN1c3BlbmRlZCwgd2FpdCBmb3IgaW50ZXJuYWwgcmVzdW1lICovCisJCW11dGV4X3VubG9jaygmbWQtPnN1c3BlbmRfbG9jayk7CisJCXIgPSB3YWl0X29uX2JpdCgmbWQtPmZsYWdzLCBETUZfU1VTUEVOREVEX0lOVEVSTkFMTFksIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCWdvdG8gcmV0cnk7CisJfQorCisJbWFwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZC0+bWFwLCBsb2NrZGVwX2lzX2hlbGQoJm1kLT5zdXNwZW5kX2xvY2spKTsKKwlpZiAoIW1hcCB8fCAhZG1fdGFibGVfZ2V0X3NpemUobWFwKSkKKwkJZ290byBvdXQ7CisKKwlyID0gX19kbV9yZXN1bWUobWQsIG1hcCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCiAJY2xlYXJfYml0KERNRl9TVVNQRU5ERUQsICZtZC0+ZmxhZ3MpOwogCiAJciA9IDA7CkBAIC0yODcyLDE1ICsyOTI5LDgwIEBACiAgKiBJbnRlcm5hbCBzdXNwZW5kL3Jlc3VtZSB3b3JrcyBsaWtlIHVzZXJzcGFjZS1kcml2ZW4gc3VzcGVuZC4gSXQgd2FpdHMKICAqIHVudGlsIGFsbCBiaW9zIGZpbmlzaCBhbmQgcHJldmVudHMgaXNzdWluZyBuZXcgYmlvcyB0byB0aGUgdGFyZ2V0IGRyaXZlcnMuCiAgKiBJdCBtYXkgYmUgdXNlZCBvbmx5IGZyb20gdGhlIGtlcm5lbC4KLSAqCi0gKiBJbnRlcm5hbCBzdXNwZW5kIGhvbGRzIG1kLT5zdXNwZW5kX2xvY2ssIHdoaWNoIHByZXZlbnRzIGludGVyYWN0aW9uIHdpdGgKLSAqIHVzZXJzcGFjZS1kcml2ZW4gc3VzcGVuZC4KICAqLwogCi12b2lkIGRtX2ludGVybmFsX3N1c3BlbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQorc3RhdGljIHZvaWQgX19kbV9pbnRlcm5hbF9zdXNwZW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgdW5zaWduZWQgc3VzcGVuZF9mbGFncykKK3sKKwlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IE5VTEw7CisKKwlpZiAoZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQobWQpKQorCQlyZXR1cm47IC8qIG5lc3RlZCBpbnRlcm5hbCBzdXNwZW5kICovCisKKwlpZiAoZG1fc3VzcGVuZGVkX21kKG1kKSkgeworCQlzZXRfYml0KERNRl9TVVNQRU5ERURfSU5URVJOQUxMWSwgJm1kLT5mbGFncyk7CisJCXJldHVybjsgLyogbmVzdCBzdXNwZW5kICovCisJfQorCisJbWFwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZC0+bWFwLCBsb2NrZGVwX2lzX2hlbGQoJm1kLT5zdXNwZW5kX2xvY2spKTsKKworCS8qCisJICogVXNpbmcgVEFTS19VTklOVEVSUlVQVElCTEUgYmVjYXVzZSBvbmx5IE5PRkxVU0ggaW50ZXJuYWwgc3VzcGVuZCBpcworCSAqIHN1cHBvcnRlZC4gIFByb3Blcmx5IHN1cHBvcnRpbmcgYSBUQVNLX0lOVEVSUlVQVElCTEUgaW50ZXJuYWwgc3VzcGVuZAorCSAqIHdvdWxkIHJlcXVpcmUgY2hhbmdpbmcgLnByZXN1c3BlbmQgdG8gcmV0dXJuIGFuIGVycm9yIC0tIGF2b2lkIHRoaXMKKwkgKiB1bnRpbCB0aGVyZSBpcyBhIG5lZWQgZm9yIG1vcmUgZWxhYm9yYXRlIHZhcmlhbnRzIG9mIGludGVybmFsIHN1c3BlbmQuCisJICovCisJKHZvaWQpIF9fZG1fc3VzcGVuZChtZCwgbWFwLCBzdXNwZW5kX2ZsYWdzLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKKwlzZXRfYml0KERNRl9TVVNQRU5ERURfSU5URVJOQUxMWSwgJm1kLT5mbGFncyk7CisKKwlkbV90YWJsZV9wb3N0c3VzcGVuZF90YXJnZXRzKG1hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZG1faW50ZXJuYWxfcmVzdW1lKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3sKKwlpZiAoIWRtX3N1c3BlbmRlZF9pbnRlcm5hbGx5X21kKG1kKSkKKwkJcmV0dXJuOyAvKiByZXN1bWUgZnJvbSBuZXN0ZWQgaW50ZXJuYWwgc3VzcGVuZCAqLworCisJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpCisJCWdvdG8gZG9uZTsgLyogcmVzdW1lIGZyb20gbmVzdGVkIHN1c3BlbmQgKi8KKworCS8qCisJICogTk9URTogZXhpc3RpbmcgY2FsbGVycyBkb24ndCBuZWVkIHRvIGNhbGwgZG1fdGFibGVfcmVzdW1lX3RhcmdldHMKKwkgKiAod2hpY2ggbWF5IGZhaWwgLS0gc28gYmVzdCB0byBhdm9pZCBpdCBmb3Igbm93IGJ5IHBhc3NpbmcgTlVMTCBtYXApCisJICovCisJKHZvaWQpIF9fZG1fcmVzdW1lKG1kLCBOVUxMKTsKKworZG9uZToKKwljbGVhcl9iaXQoRE1GX1NVU1BFTkRFRF9JTlRFUk5BTExZLCAmbWQtPmZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOworCXdha2VfdXBfYml0KCZtZC0+ZmxhZ3MsIERNRl9TVVNQRU5ERURfSU5URVJOQUxMWSk7Cit9CisKK3ZvaWQgZG1faW50ZXJuYWxfc3VzcGVuZF9ub2ZsdXNoKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKIHsKIAltdXRleF9sb2NrKCZtZC0+c3VzcGVuZF9sb2NrKTsKLQlpZiAoZG1fc3VzcGVuZGVkX21kKG1kKSkKKwlfX2RtX2ludGVybmFsX3N1c3BlbmQobWQsIERNX1NVU1BFTkRfTk9GTFVTSF9GTEFHKTsKKwltdXRleF91bmxvY2soJm1kLT5zdXNwZW5kX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1faW50ZXJuYWxfc3VzcGVuZF9ub2ZsdXNoKTsKKwordm9pZCBkbV9pbnRlcm5hbF9yZXN1bWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQoreworCW11dGV4X2xvY2soJm1kLT5zdXNwZW5kX2xvY2spOworCV9fZG1faW50ZXJuYWxfcmVzdW1lKG1kKTsKKwltdXRleF91bmxvY2soJm1kLT5zdXNwZW5kX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1faW50ZXJuYWxfcmVzdW1lKTsKKworLyoKKyAqIEZhc3QgdmFyaWFudHMgb2YgaW50ZXJuYWwgc3VzcGVuZC9yZXN1bWUgaG9sZCBtZC0+c3VzcGVuZF9sb2NrLAorICogd2hpY2ggcHJldmVudHMgaW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2UtZHJpdmVuIHN1c3BlbmQuCisgKi8KKwordm9pZCBkbV9pbnRlcm5hbF9zdXNwZW5kX2Zhc3Qoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQoreworCW11dGV4X2xvY2soJm1kLT5zdXNwZW5kX2xvY2spOworCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpIHx8IGRtX3N1c3BlbmRlZF9pbnRlcm5hbGx5X21kKG1kKSkKIAkJcmV0dXJuOwogCiAJc2V0X2JpdChETUZfQkxPQ0tfSU9fRk9SX1NVU1BFTkQsICZtZC0+ZmxhZ3MpOwpAQCAtMjg4OSw5ICszMDExLDkgQEAKIAlkbV93YWl0X2Zvcl9jb21wbGV0aW9uKG1kLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiB9CiAKLXZvaWQgZG1faW50ZXJuYWxfcmVzdW1lKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3ZvaWQgZG1faW50ZXJuYWxfcmVzdW1lX2Zhc3Qoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKQorCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpIHx8IGRtX3N1c3BlbmRlZF9pbnRlcm5hbGx5X21kKG1kKSkKIAkJZ290byBkb25lOwogCiAJZG1fcXVldWVfZmx1c2gobWQpOwpAQCAtMjk3Nyw2ICszMDk5LDExIEBACiAJcmV0dXJuIHRlc3RfYml0KERNRl9TVVNQRU5ERUQsICZtZC0+ZmxhZ3MpOwogfQogCitpbnQgZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQoreworCXJldHVybiB0ZXN0X2JpdChETUZfU1VTUEVOREVEX0lOVEVSTkFMTFksICZtZC0+ZmxhZ3MpOworfQorCiBpbnQgZG1fdGVzdF9kZWZlcnJlZF9yZW1vdmVfZmxhZyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7CiAJcmV0dXJuIHRlc3RfYml0KERNRl9ERUZFUlJFRF9SRU1PVkUsICZtZC0+ZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5oIGIvZHJpdmVycy9tZC9kbS5oCmluZGV4IDk4OGM3ZmIuLjg0YjBmOWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmgKKysrIGIvZHJpdmVycy9tZC9kbS5oCkBAIC02NSw2ICs2NSw3IEBACiAJCQkgICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltaXRzKTsKIHN0cnVjdCBsaXN0X2hlYWQgKmRtX3RhYmxlX2dldF9kZXZpY2VzKHN0cnVjdCBkbV90YWJsZSAqdCk7CiB2b2lkIGRtX3RhYmxlX3ByZXN1c3BlbmRfdGFyZ2V0cyhzdHJ1Y3QgZG1fdGFibGUgKnQpOwordm9pZCBkbV90YWJsZV9wcmVzdXNwZW5kX3VuZG9fdGFyZ2V0cyhzdHJ1Y3QgZG1fdGFibGUgKnQpOwogdm9pZCBkbV90YWJsZV9wb3N0c3VzcGVuZF90YXJnZXRzKHN0cnVjdCBkbV90YWJsZSAqdCk7CiBpbnQgZG1fdGFibGVfcmVzdW1lX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0KTsKIGludCBkbV90YWJsZV9hbnlfY29uZ2VzdGVkKHN0cnVjdCBkbV90YWJsZSAqdCwgaW50IGJkaV9iaXRzKTsKQEAgLTEyOSw2ICsxMzAsMTUgQEAKIGludCBkbV9zdXNwZW5kZWRfbWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKIAogLyoKKyAqIEludGVybmFsIHN1c3BlbmQgYW5kIHJlc3VtZSBtZXRob2RzLgorICovCitpbnQgZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKK3ZvaWQgZG1faW50ZXJuYWxfc3VzcGVuZF9mYXN0KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7Cit2b2lkIGRtX2ludGVybmFsX3Jlc3VtZV9mYXN0KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7Cit2b2lkIGRtX2ludGVybmFsX3N1c3BlbmRfbm9mbHVzaChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOwordm9pZCBkbV9pbnRlcm5hbF9yZXN1bWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKKworLyoKICAqIFRlc3QgaWYgdGhlIGRldmljZSBpcyBzY2hlZHVsZWQgZm9yIGRlZmVycmVkIHJlbW92ZS4KICAqLwogaW50IGRtX3Rlc3RfZGVmZXJyZWRfcmVtb3ZlX2ZsYWcoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWFycmF5LmMgYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1hcnJheS5jCmluZGV4IDFkNzViMWQuLmU2NGI2MWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1hcnJheS5jCisrKyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWFycmF5LmMKQEAgLTY0NSw4ICs2NDUsMTAgQEAKIAlpbnQgcjsKIAlzdHJ1Y3QgcmVzaXplIHJlc2l6ZTsKIAotCWlmIChvbGRfc2l6ZSA9PSBuZXdfc2l6ZSkKKwlpZiAob2xkX3NpemUgPT0gbmV3X3NpemUpIHsKKwkJKm5ld19yb290ID0gcm9vdDsKIAkJcmV0dXJuIDA7CisJfQogCiAJcmVzaXplLmluZm8gPSBpbmZvOwogCXJlc2l6ZS5yb290ID0gcm9vdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXNwYWNlLW1hcC1tZXRhZGF0YS5jIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tc3BhY2UtbWFwLW1ldGFkYXRhLmMKaW5kZXggNzg2YjY4OS4uZThhOTA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tc3BhY2UtbWFwLW1ldGFkYXRhLmMKKysrIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tc3BhY2UtbWFwLW1ldGFkYXRhLmMKQEAgLTU2NCw3ICs1NjQsOSBAQAogewogCXN0cnVjdCBzbV9tZXRhZGF0YSAqc21tID0gY29udGFpbmVyX29mKHNtLCBzdHJ1Y3Qgc21fbWV0YWRhdGEsIHNtKTsKIAotCXJldHVybiBzbW0tPmxsLm5yX2Jsb2NrczsKKwkqY291bnQgPSBzbW0tPmxsLm5yX2Jsb2NrczsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNtX2Jvb3RzdHJhcF9nZXRfbnJfZnJlZShzdHJ1Y3QgZG1fc3BhY2VfbWFwICpzbSwgZG1fYmxvY2tfdCAqY291bnQpCkBAIC01ODEsNyArNTgzLDkgQEAKIHsKIAlzdHJ1Y3Qgc21fbWV0YWRhdGEgKnNtbSA9IGNvbnRhaW5lcl9vZihzbSwgc3RydWN0IHNtX21ldGFkYXRhLCBzbSk7CiAKLQlyZXR1cm4gYiA8IHNtbS0+YmVnaW4gPyAxIDogMDsKKwkqcmVzdWx0ID0gKGIgPCBzbW0tPmJlZ2luKSA/IDEgOiAwOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc21fYm9vdHN0cmFwX2NvdW50X2lzX21vcmVfdGhhbl9vbmUoc3RydWN0IGRtX3NwYWNlX21hcCAqc20sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS10cmFuc2FjdGlvbi1tYW5hZ2VyLmMgYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS10cmFuc2FjdGlvbi1tYW5hZ2VyLmMKaW5kZXggM2JjMzBhMC4uOWNiNzk3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tdHJhbnNhY3Rpb24tbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXRyYW5zYWN0aW9uLW1hbmFnZXIuYwpAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgImRtLXBlcnNpc3RlbnQtZGF0YS1pbnRlcm5hbC5oIgogCiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KIApAQCAtMTcsNiArMTksNjEgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2RlZmluZSBQUkVGRVRDSF9TSVpFIDEyOAorI2RlZmluZSBQUkVGRVRDSF9CSVRTIDcKKyNkZWZpbmUgUFJFRkVUQ0hfU0VOVElORUwgKChkbV9ibG9ja190KSAtMVVMTCkKKworc3RydWN0IHByZWZldGNoX3NldCB7CisJc3RydWN0IG11dGV4IGxvY2s7CisJZG1fYmxvY2tfdCBibG9ja3NbUFJFRkVUQ0hfU0laRV07Cit9OworCitzdGF0aWMgdW5zaWduZWQgcHJlZmV0Y2hfaGFzaChkbV9ibG9ja190IGIpCit7CisJcmV0dXJuIGhhc2hfNjQoYiwgUFJFRkVUQ0hfQklUUyk7Cit9CisKK3N0YXRpYyB2b2lkIHByZWZldGNoX3dpcGUoc3RydWN0IHByZWZldGNoX3NldCAqcCkKK3sKKwl1bnNpZ25lZCBpOworCWZvciAoaSA9IDA7IGkgPCBQUkVGRVRDSF9TSVpFOyBpKyspCisJCXAtPmJsb2Nrc1tpXSA9IFBSRUZFVENIX1NFTlRJTkVMOworfQorCitzdGF0aWMgdm9pZCBwcmVmZXRjaF9pbml0KHN0cnVjdCBwcmVmZXRjaF9zZXQgKnApCit7CisJbXV0ZXhfaW5pdCgmcC0+bG9jayk7CisJcHJlZmV0Y2hfd2lwZShwKTsKK30KKworc3RhdGljIHZvaWQgcHJlZmV0Y2hfYWRkKHN0cnVjdCBwcmVmZXRjaF9zZXQgKnAsIGRtX2Jsb2NrX3QgYikKK3sKKwl1bnNpZ25lZCBoID0gcHJlZmV0Y2hfaGFzaChiKTsKKworCW11dGV4X2xvY2soJnAtPmxvY2spOworCWlmIChwLT5ibG9ja3NbaF0gPT0gUFJFRkVUQ0hfU0VOVElORUwpCisJCXAtPmJsb2Nrc1toXSA9IGI7CisKKwltdXRleF91bmxvY2soJnAtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBwcmVmZXRjaF9pc3N1ZShzdHJ1Y3QgcHJlZmV0Y2hfc2V0ICpwLCBzdHJ1Y3QgZG1fYmxvY2tfbWFuYWdlciAqYm0pCit7CisJdW5zaWduZWQgaTsKKworCW11dGV4X2xvY2soJnAtPmxvY2spOworCisJZm9yIChpID0gMDsgaSA8IFBSRUZFVENIX1NJWkU7IGkrKykKKwkJaWYgKHAtPmJsb2Nrc1tpXSAhPSBQUkVGRVRDSF9TRU5USU5FTCkgeworCQkJZG1fYm1fcHJlZmV0Y2goYm0sIHAtPmJsb2Nrc1tpXSk7CisJCQlwLT5ibG9ja3NbaV0gPSBQUkVGRVRDSF9TRU5USU5FTDsKKwkJfQorCisJbXV0ZXhfdW5sb2NrKCZwLT5sb2NrKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RydWN0IHNoYWRvd19pbmZvIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKIAlkbV9ibG9ja190IHdoZXJlOwpAQCAtMzcsNiArOTQsOCBAQAogCiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBobGlzdF9oZWFkIGJ1Y2tldHNbRE1fSEFTSF9TSVpFXTsKKworCXN0cnVjdCBwcmVmZXRjaF9zZXQgcHJlZmV0Y2hlczsKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMTcsNiArMTc2LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgRE1fSEFTSF9TSVpFOyBpKyspCiAJCUlOSVRfSExJU1RfSEVBRCh0bS0+YnVja2V0cyArIGkpOwogCisJcHJlZmV0Y2hfaW5pdCgmdG0tPnByZWZldGNoZXMpOworCiAJcmV0dXJuIHRtOwogfQogCkBAIC0yNjgsOCArMzI5LDE0IEBACiAJCSAgICBzdHJ1Y3QgZG1fYmxvY2tfdmFsaWRhdG9yICp2LAogCQkgICAgc3RydWN0IGRtX2Jsb2NrICoqYmxrKQogewotCWlmICh0bS0+aXNfY2xvbmUpCi0JCXJldHVybiBkbV9ibV9yZWFkX3RyeV9sb2NrKHRtLT5yZWFsLT5ibSwgYiwgdiwgYmxrKTsKKwlpZiAodG0tPmlzX2Nsb25lKSB7CisJCWludCByID0gZG1fYm1fcmVhZF90cnlfbG9jayh0bS0+cmVhbC0+Ym0sIGIsIHYsIGJsayk7CisKKwkJaWYgKHIgPT0gLUVXT1VMREJMT0NLKQorCQkJcHJlZmV0Y2hfYWRkKCZ0bS0+cmVhbC0+cHJlZmV0Y2hlcywgYik7CisKKwkJcmV0dXJuIHI7CisJfQogCiAJcmV0dXJuIGRtX2JtX3JlYWRfbG9jayh0bS0+Ym0sIGIsIHYsIGJsayk7CiB9CkBAIC0zMTcsNiArMzg0LDEyIEBACiAJcmV0dXJuIHRtLT5ibTsKIH0KIAordm9pZCBkbV90bV9pc3N1ZV9wcmVmZXRjaGVzKHN0cnVjdCBkbV90cmFuc2FjdGlvbl9tYW5hZ2VyICp0bSkKK3sKKwlwcmVmZXRjaF9pc3N1ZSgmdG0tPnByZWZldGNoZXMsIHRtLT5ibSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV90bV9pc3N1ZV9wcmVmZXRjaGVzKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBkbV90bV9jcmVhdGVfaW50ZXJuYWwoc3RydWN0IGRtX2Jsb2NrX21hbmFnZXIgKmJtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tdHJhbnNhY3Rpb24tbWFuYWdlci5oIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tdHJhbnNhY3Rpb24tbWFuYWdlci5oCmluZGV4IDI3NzJlZDIuLjJlMGQ0ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXRyYW5zYWN0aW9uLW1hbmFnZXIuaAorKysgYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS10cmFuc2FjdGlvbi1tYW5hZ2VyLmgKQEAgLTEwOSw2ICsxMDksMTMgQEAKIHN0cnVjdCBkbV9ibG9ja19tYW5hZ2VyICpkbV90bV9nZXRfYm0oc3RydWN0IGRtX3RyYW5zYWN0aW9uX21hbmFnZXIgKnRtKTsKIAogLyoKKyAqIElmIHlvdSdyZSB1c2luZyBhIG5vbi1ibG9ja2luZyBjbG9uZSB0aGUgdG0gd2lsbCBidWlsZCB1cCBhIGxpc3Qgb2YKKyAqIHJlcXVlc3RlZCBibG9ja3MgdGhhdCB3ZXJlbid0IGluIGNvcmUuICBUaGlzIGNhbGwgd2lsbCByZXF1ZXN0IHRob3NlCisgKiBibG9ja3MgdG8gYmUgcHJlZmV0Y2hlZC4KKyAqLwordm9pZCBkbV90bV9pc3N1ZV9wcmVmZXRjaGVzKHN0cnVjdCBkbV90cmFuc2FjdGlvbl9tYW5hZ2VyICp0bSk7CisKKy8qCiAgKiBBIGxpdHRsZSB1dGlsaXR5IHRoYXQgdGllcyB0aGUga25vdCBieSBwcm9kdWNpbmcgYSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgKiB0aGF0IGhhcyBhIHNwYWNlIG1hcCBtYW5hZ2VkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyLi4uCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1vcnkvS2NvbmZpZyBiL2RyaXZlcnMvbWVtb3J5L0tjb25maWcKaW5kZXggNmQ5MWMyNy4uMTkxMzgzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtb3J5L0tjb25maWcKKysrIGIvZHJpdmVycy9tZW1vcnkvS2NvbmZpZwpAQCAtNDEsNiArNDEsMTQgQEAKIAkgIHBhcmFtZXRlcnMgYW5kIG90aGVyIHNldHRpbmdzIGR1cmluZyBmcmVxdWVuY3ksIHZvbHRhZ2UgYW5kCiAJICB0ZW1wZXJhdHVyZSBjaGFuZ2VzCiAKK2NvbmZpZyBPTUFQX0dQTUMKKwlib29sCisJaGVscAorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBHZW5lcmFsIFB1cnBvc2UgTWVtb3J5IENvbnRyb2xsZXIgKEdQTUMpCisJICBwcmVzZW50IG9uIFRleGFzIEluc3RydW1lbnRzIFNvQ3MgKGUuZy4gT01BUDIrKS4gR1BNQyBhbGxvd3MKKwkgIGludGVyZmFjaW5nIHRvIGEgdmFyaWV0eSBvZiBhc3luY2hyb25vdXMgYXMgd2VsbCBhcyBzeW5jaHJvbm91cworCSAgbWVtb3J5IGRyaXZlcyBsaWtlIE5PUiwgTkFORCwgT25lTkFORCwgU1JBTS4KKwogY29uZmlnIE1WRUJVX0RFVkJVUwogCWJvb2wgIk1hcnZlbGwgRUJVIERldmljZSBCdXMgQ29udHJvbGxlciIKIAlkZWZhdWx0IHkKQEAgLTYxLDE2ICs2OSw2IEBACiAJICBhbmFseXNpcywgZXNwZWNpYWxseSBmb3IgSU9NTVUvR0FSVChHcmFwaGljcyBBZGRyZXNzCiAJICBSZWxvY2F0aW9uIFRhYmxlKSBtb2R1bGUuCiAKLWNvbmZpZyBURUdSQTMwX01DCi0JYm9vbCAiVGVncmEzMCBNZW1vcnkgQ29udHJvbGxlcihNQykgZHJpdmVyIgotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gQVJDSF9URUdSQV8zeF9TT0MKLQloZWxwCi0JICBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIE1lbW9yeSBDb250cm9sbGVyKE1DKSBtb2R1bGUgYXZhaWxhYmxlCi0JICBpbiBUZWdyYTMwIFNvQ3MsIG1haW5seSBmb3IgYSBhZGRyZXNzIHRyYW5zbGF0aW9uIGZhdWx0Ci0JICBhbmFseXNpcywgZXNwZWNpYWxseSBmb3IgSU9NTVUvU01NVShTeXN0ZW0gTWVtb3J5IE1hbmFnZW1lbnQKLQkgIFVuaXQpIG1vZHVsZS4KLQogY29uZmlnIEZTTF9DT1JFTkVUX0NGCiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBDb3JlTmV0IEVycm9yIFJlcG9ydGluZyIKIAlkZXBlbmRzIG9uIEZTTF9TT0NfQk9PS0UKQEAgLTg1LDQgKzgzLDYgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBGU0xfU09DCiAKK3NvdXJjZSAiZHJpdmVycy9tZW1vcnkvdGVncmEvS2NvbmZpZyIKKwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L01ha2VmaWxlIGIvZHJpdmVycy9tZW1vcnkvTWFrZWZpbGUKaW5kZXggYzMyZDMxOS4uNmI2NTQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1vcnkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZW1vcnkvTWFrZWZpbGUKQEAgLTgsOCArOCwxMCBAQAogb2JqLSQoQ09ORklHX0FUTUVMX1NEUkFNQykJKz0gYXRtZWwtc2RyYW1jLm8KIG9iai0kKENPTkZJR19USV9BRU1JRikJCSs9IHRpLWFlbWlmLm8KIG9iai0kKENPTkZJR19USV9FTUlGKQkJKz0gZW1pZi5vCitvYmotJChDT05GSUdfT01BUF9HUE1DKQkJKz0gb21hcC1ncG1jLm8KIG9iai0kKENPTkZJR19GU0xfQ09SRU5FVF9DRikJKz0gZnNsLWNvcmVuZXQtY2Yubwogb2JqLSQoQ09ORklHX0ZTTF9JRkMpCQkrPSBmc2xfaWZjLm8KIG9iai0kKENPTkZJR19NVkVCVV9ERVZCVVMpCSs9IG12ZWJ1LWRldmJ1cy5vCiBvYmotJChDT05GSUdfVEVHUkEyMF9NQykJKz0gdGVncmEyMC1tYy5vCi1vYmotJChDT05GSUdfVEVHUkEzMF9NQykJKz0gdGVncmEzMC1tYy5vCisKK29iai0kKENPTkZJR19URUdSQV9NQykJCSs9IHRlZ3JhLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMgYi9kcml2ZXJzL21lbW9yeS9vbWFwLWdwbWMuYwpzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwpyZW5hbWUgdG8gZHJpdmVycy9tZW1vcnkvb21hcC1ncG1jLmMKaW5kZXggNWZhMzc1NS4uZmZjNWU2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvZHJpdmVycy9tZW1vcnkvb21hcC1ncG1jLmMKQEAgLTI5LDIwICsyOSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbXRkLW5hbmQtb21hcDIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL210ZC1vbmVuYW5kLW9tYXAyLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAib21hcF9kZXZpY2UuaCIKLSNpbmNsdWRlICJncG1jLmgiCi0jaW5jbHVkZSAiZ3BtYy1uYW5kLmgiCi0jaW5jbHVkZSAiZ3BtYy1vbmVuYW5kLmgiCi0KICNkZWZpbmUJREVWSUNFX05BTUUJCSJvbWFwLWdwbWMiCiAKIC8qIEdQTUMgcmVnaXN0ZXIgb2Zmc2V0cyAqLwpAQCAtODUsNiArODAsOCBAQAogI2RlZmluZSBHUE1DX0VDQ19DVFJMX0VDQ1JFRzgJCTB4MDA4CiAjZGVmaW5lIEdQTUNfRUNDX0NUUkxfRUNDUkVHOQkJMHgwMDkKIAorI2RlZmluZSBHUE1DX0NPTkZJR19MSU1JVEVEQUREUkVTUwkJQklUKDEpCisKICNkZWZpbmUJR1BNQ19DT05GSUcyX0NTRVhUUkFERUxBWQkJQklUKDcpCiAjZGVmaW5lCUdQTUNfQ09ORklHM19BRFZFWFRSQURFTEFZCQlCSVQoNykKICNkZWZpbmUJR1BNQ19DT05GSUc0X09FRVhUUkFERUxBWQkJQklUKDcpCkBAIC0xMTQsMTAgKzExMSw3MyBAQAogCiAjZGVmaW5lIEdQTUNfTlJfV0FJVFBJTlMJCTQKIAorI2RlZmluZSBHUE1DX0NTX0NPTkZJRzEJCTB4MDAKKyNkZWZpbmUgR1BNQ19DU19DT05GSUcyCQkweDA0CisjZGVmaW5lIEdQTUNfQ1NfQ09ORklHMwkJMHgwOAorI2RlZmluZSBHUE1DX0NTX0NPTkZJRzQJCTB4MGMKKyNkZWZpbmUgR1BNQ19DU19DT05GSUc1CQkweDEwCisjZGVmaW5lIEdQTUNfQ1NfQ09ORklHNgkJMHgxNAorI2RlZmluZSBHUE1DX0NTX0NPTkZJRzcJCTB4MTgKKyNkZWZpbmUgR1BNQ19DU19OQU5EX0NPTU1BTkQJMHgxYworI2RlZmluZSBHUE1DX0NTX05BTkRfQUREUkVTUwkweDIwCisjZGVmaW5lIEdQTUNfQ1NfTkFORF9EQVRBCTB4MjQKKworLyogQ29udHJvbCBDb21tYW5kcyAqLworI2RlZmluZSBHUE1DX0NPTkZJR19SRFlfQlNZCTB4MDAwMDAwMDEKKyNkZWZpbmUgR1BNQ19DT05GSUdfREVWX1NJWkUJMHgwMDAwMDAwMgorI2RlZmluZSBHUE1DX0NPTkZJR19ERVZfVFlQRQkweDAwMDAwMDAzCisjZGVmaW5lIEdQTUNfU0VUX0lSUV9TVEFUVVMJMHgwMDAwMDAwNAorCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XUkFQQlVSU1RfU1VQUCAgICAgKDEgPDwgMzEpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9SRUFETVVMVElQTEVfU1VQUCAgKDEgPDwgMzApCisjZGVmaW5lIEdQTUNfQ09ORklHMV9SRUFEVFlQRV9BU1lOQyAgICAgKDAgPDwgMjkpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9SRUFEVFlQRV9TWU5DICAgICAgKDEgPDwgMjkpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XUklURU1VTFRJUExFX1NVUFAgKDEgPDwgMjgpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XUklURVRZUEVfQVNZTkMgICAgKDAgPDwgMjcpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XUklURVRZUEVfU1lOQyAgICAgKDEgPDwgMjcpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9DTEtBQ1RJVkFUSU9OVElNRSh2YWwpICgodmFsICYgMykgPDwgMjUpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9QQUdFX0xFTih2YWwpICAgICAgKCh2YWwgJiAzKSA8PCAyMykKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1dBSVRfUkVBRF9NT04gICAgICAoMSA8PCAyMikKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1dBSVRfV1JJVEVfTU9OICAgICAoMSA8PCAyMSkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1dBSVRfTU9OX0lJTUUodmFsKSAoKHZhbCAmIDMpIDw8IDE4KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfV0FJVF9QSU5fU0VMKHZhbCkgICgodmFsICYgMykgPDwgMTYpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VTSVpFKHZhbCkgICAgKCh2YWwgJiAzKSA8PCAxMikKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVNJWkVfMTYgICAgICBHUE1DX0NPTkZJRzFfREVWSUNFU0laRSgxKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRSh2YWwpICAgICgodmFsICYgMykgPDwgMTApCisjZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFX05PUiAgICAgR1BNQ19DT05GSUcxX0RFVklDRVRZUEUoMCkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX01VWFRZUEUodmFsKSAgICAgICAoKHZhbCAmIDMpIDw8IDgpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9USU1FX1BBUkFfR1JBTiAgICAgKDEgPDwgNCkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0ZDTEtfRElWKHZhbCkgICAgICAodmFsICYgMykKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0ZDTEtfRElWMiAgICAgICAgICAoR1BNQ19DT05GSUcxX0ZDTEtfRElWKDEpKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfRkNMS19ESVYzICAgICAgICAgIChHUE1DX0NPTkZJRzFfRkNMS19ESVYoMikpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVjQgICAgICAgICAgKEdQTUNfQ09ORklHMV9GQ0xLX0RJVigzKSkKKyNkZWZpbmUgR1BNQ19DT05GSUc3X0NTVkFMSUQJCSgxIDw8IDYpCisKKyNkZWZpbmUgR1BNQ19ERVZJQ0VUWVBFX05PUgkJMAorI2RlZmluZSBHUE1DX0RFVklDRVRZUEVfTkFORAkJMgorI2RlZmluZSBHUE1DX0NPTkZJR19XUklURVBST1RFQ1QJMHgwMDAwMDAxMAorI2RlZmluZSBXUl9SRF9QSU5fTU9OSVRPUklORwkJMHgwMDYwMDAwMAorCisjZGVmaW5lIEdQTUNfRU5BQkxFX0lSUQkJMHgwMDAwMDAwZAorCisvKiBFQ0MgY29tbWFuZHMgKi8KKyNkZWZpbmUgR1BNQ19FQ0NfUkVBRAkJMCAvKiBSZXNldCBIYXJkd2FyZSBFQ0MgZm9yIHJlYWQgKi8KKyNkZWZpbmUgR1BNQ19FQ0NfV1JJVEUJCTEgLyogUmVzZXQgSGFyZHdhcmUgRUNDIGZvciB3cml0ZSAqLworI2RlZmluZSBHUE1DX0VDQ19SRUFEU1lOCTIgLyogUmVzZXQgYmVmb3JlIHN5bmRyb20gaXMgcmVhZCBiYWNrICovCisKIC8qIFhYWDogT25seSBOQU5EIGlycSBoYXMgYmVlbiBjb25zaWRlcmVkLGN1cnJlbnRseSB0aGVzZSBhcmUgdGhlIG9ubHkgb25lcyB1c2VkCiAgKi8KICNkZWZpbmUJR1BNQ19OUl9JUlEJCTIKIAorc3RydWN0IGdwbWNfY3NfZGF0YSB7CisJY29uc3QgY2hhciAqbmFtZTsKKworI2RlZmluZSBHUE1DX0NTX1JFU0VSVkVECSgxIDw8IDApCisJdTMyIGZsYWdzOworCisJc3RydWN0IHJlc291cmNlIG1lbTsKK307CisKIHN0cnVjdCBncG1jX2NsaWVudF9pcnEJewogCXVuc2lnbmVkCQlpcnE7CiAJdTMyCQkJYml0bWFzazsKQEAgLTE1NSwxMCArMjE1LDkgQEAKIHN0YXRpYyBpbnQgZ3BtY19pcnFfc3RhcnQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UJZ3BtY19tZW1fcm9vdDsKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UJZ3BtY19jc19tZW1bR1BNQ19DU19OVU1dOworc3RhdGljIHN0cnVjdCBncG1jX2NzX2RhdGEgZ3BtY19jc1tHUE1DX0NTX05VTV07CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwbWNfbWVtX2xvY2spOwogLyogRGVmaW5lIGNoaXAtc2VsZWN0cyBhcyByZXNlcnZlZCBieSBkZWZhdWx0IHVudGlsIHByb2JlIGNvbXBsZXRlcyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBncG1jX2NzX21hcCA9ICgoMSA8PCBHUE1DX0NTX05VTSkgLSAxKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3BtY19jc19udW0gPSBHUE1DX0NTX05VTTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3BtY19ucl93YWl0cGluczsKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpncG1jX2RldjsKQEAgLTIwMiwxMSArMjYxLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoZ3BtY19sM19jbGspOwogCi0JaWYgKHJhdGUgPT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJncG1jX2wzX2NsayBub3QgZW5hYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQogCXJhdGUgLz0gMTAwMDsKIAlyYXRlID0gMTAwMDAwMDAwMCAvIHJhdGU7CS8qIEluIHBpY29zZWNvbmRzICovCiAKQEAgLTI4NCwxMiArMzM4LDEzMCBAQAogfQogCiAjaWZkZWYgREVCVUcKK3N0YXRpYyBpbnQgZ2V0X2dwbWNfdGltaW5nX3JlZyhpbnQgY3MsIGludCByZWcsIGludCBzdF9iaXQsIGludCBlbmRfYml0LAorCQkJICAgICAgIGJvb2wgcmF3LCBib29sIG5vdmFsLCBpbnQgc2hpZnQsCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1MzIgbDsKKwlpbnQgbnJfYml0cywgbWF4X3ZhbHVlLCBtYXNrOworCisJbCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIHJlZyk7CisJbnJfYml0cyA9IGVuZF9iaXQgLSBzdF9iaXQgKyAxOworCW1heF92YWx1ZSA9ICgxIDw8IG5yX2JpdHMpIC0gMTsKKwltYXNrID0gbWF4X3ZhbHVlIDw8IHN0X2JpdDsKKwlsID0gKGwgJiBtYXNrKSA+PiBzdF9iaXQ7CisJaWYgKHNoaWZ0KQorCQlsID0gKHNoaWZ0IDw8IGwpOworCWlmIChub3ZhbCAmJiAobCA9PSAwKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFyYXcpIHsKKwkJdW5zaWduZWQgaW50IHRpbWVfbnNfbWluLCB0aW1lX25zLCB0aW1lX25zX21heDsKKworCQl0aW1lX25zX21pbiA9IGdwbWNfdGlja3NfdG9fbnMobCA/IGwgLSAxIDogMCk7CisJCXRpbWVfbnMgPSBncG1jX3RpY2tzX3RvX25zKGwpOworCQl0aW1lX25zX21heCA9IGdwbWNfdGlja3NfdG9fbnMobCArIDEgPiBtYXhfdmFsdWUgPworCQkJCQkgICAgICAgbWF4X3ZhbHVlIDogbCArIDEpOworCQlwcl9pbmZvKCJncG1jLCVzID0gPCV1PiAoJXUgLSAldSBucywgJWkgdGlja3MpXG4iLAorCQkJbmFtZSwgdGltZV9ucywgdGltZV9uc19taW4sIHRpbWVfbnNfbWF4LCBsKTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCJncG1jLCVzID0gPCV1PlxuIiwgbmFtZSwgbCk7CisJfQorCisJcmV0dXJuIGw7Cit9CisKKyNkZWZpbmUgR1BNQ19QUklOVF9DT05GSUcoY3MsIGNvbmZpZykgXAorCXByX2luZm8oImNzJWkgJXM6IDB4JTA4eFxuIiwgY3MsICNjb25maWcsIFwKKwkJZ3BtY19jc19yZWFkX3JlZyhjcywgY29uZmlnKSkKKyNkZWZpbmUgR1BNQ19HRVRfUkFXKHJlZywgc3QsIGVuZCwgZmllbGQpIFwKKwlnZXRfZ3BtY190aW1pbmdfcmVnKGNzLCAocmVnKSwgKHN0KSwgKGVuZCksIDEsIDAsIDAsIGZpZWxkKQorI2RlZmluZSBHUE1DX0dFVF9SQVdfQk9PTChyZWcsIHN0LCBlbmQsIGZpZWxkKSBcCisJZ2V0X2dwbWNfdGltaW5nX3JlZyhjcywgKHJlZyksIChzdCksIChlbmQpLCAxLCAxLCAwLCBmaWVsZCkKKyNkZWZpbmUgR1BNQ19HRVRfUkFXX1NISUZUKHJlZywgc3QsIGVuZCwgc2hpZnQsIGZpZWxkKSBcCisJZ2V0X2dwbWNfdGltaW5nX3JlZyhjcywgKHJlZyksIChzdCksIChlbmQpLCAxLCAxLCAoc2hpZnQpLCBmaWVsZCkKKyNkZWZpbmUgR1BNQ19HRVRfVElDS1MocmVnLCBzdCwgZW5kLCBmaWVsZCkgXAorCWdldF9ncG1jX3RpbWluZ19yZWcoY3MsIChyZWcpLCAoc3QpLCAoZW5kKSwgMCwgMCwgMCwgZmllbGQpCisKK3N0YXRpYyB2b2lkIGdwbWNfc2hvd19yZWdzKGludCBjcywgY29uc3QgY2hhciAqZGVzYykKK3sKKwlwcl9pbmZvKCJncG1jIGNzJWkgJXM6XG4iLCBjcywgZGVzYyk7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHMSk7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHMik7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHMyk7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHNCk7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHNSk7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHNik7Cit9CisKKy8qCisgKiBOb3RlIHRoYXQgZ3BtYyx3YWl0LXBpbiBoYW5kaW5nIHdyb25nbHkgYXNzdW1lcyBiaXQgOCBpcyBhdmFpbGFibGUsCisgKiBzZWUgY29tbWl0IGM5ZmI4MDkuCisgKi8KK3N0YXRpYyB2b2lkIGdwbWNfY3Nfc2hvd190aW1pbmdzKGludCBjcywgY29uc3QgY2hhciAqZGVzYykKK3sKKwlncG1jX3Nob3dfcmVncyhjcywgZGVzYyk7CisKKwlwcl9pbmZvKCJncG1jIGNzJWkgYWNjZXNzIGNvbmZpZ3VyYXRpb246XG4iLCBjcyk7CisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUcxLCAgNCwgIDQsICJ0aW1lLXBhcmEtZ3JhbnVsYXJpdHkiKTsKKwlHUE1DX0dFVF9SQVcoR1BNQ19DU19DT05GSUcxLCAgOCwgIDksICJtdXgtYWRkLWRhdGEiKTsKKwlHUE1DX0dFVF9SQVcoR1BNQ19DU19DT05GSUcxLCAxMiwgMTMsICJkZXZpY2Utd2lkdGgiKTsKKwlHUE1DX0dFVF9SQVcoR1BNQ19DU19DT05GSUcxLCAxNiwgMTcsICJ3YWl0LXBpbiIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMSwgMjEsIDIxLCAid2FpdC1vbi13cml0ZSIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMSwgMjIsIDIyLCAid2FpdC1vbi1yZWFkIik7CisJR1BNQ19HRVRfUkFXX1NISUZUKEdQTUNfQ1NfQ09ORklHMSwgMjMsIDI0LCA0LCAiYnVyc3QtbGVuZ3RoIik7CisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUcxLCAyNywgMjcsICJzeW5jLXdyaXRlIik7CisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUcxLCAyOCwgMjgsICJidXJzdC13cml0ZSIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMSwgMjksIDI5LCAiZ3BtYyxzeW5jLXJlYWQiKTsKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzEsIDMwLCAzMCwgImJ1cnN0LXJlYWQiKTsKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzEsIDMxLCAzMSwgImJ1cnN0LXdyYXAiKTsKKworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMiwgIDcsICA3LCAiY3MtZXh0cmEtZGVsYXkiKTsKKworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMywgIDcsICA3LCAiYWR2LWV4dHJhLWRlbGF5Iik7CisKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzQsIDIzLCAyMywgIndlLWV4dHJhLWRlbGF5Iik7CisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUc0LCAgNywgIDcsICJvZS1leHRyYS1kZWxheSIpOworCisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUc2LCAgNywgIDcsICJjeWNsZTJjeWNsZS1zYW1lY3NlbiIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHNiwgIDYsICA2LCAiY3ljbGUyY3ljbGUtZGlmZmNzZW4iKTsKKworCXByX2luZm8oImdwbWMgY3MlaSB0aW1pbmdzIGNvbmZpZ3VyYXRpb246XG4iLCBjcyk7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUcyLCAgMCwgIDMsICJjcy1vbi1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHMiwgIDgsIDEyLCAiY3MtcmQtb2ZmLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUcyLCAxNiwgMjAsICJjcy13ci1vZmYtbnMiKTsKKworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHMywgIDAsICAzLCAiYWR2LW9uLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUczLCAgOCwgMTIsICJhZHYtcmQtb2ZmLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUczLCAxNiwgMjAsICJhZHYtd3Itb2ZmLW5zIik7CisKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzQsICAwLCAgMywgIm9lLW9uLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc0LCAgOCwgMTIsICJvZS1vZmYtbnMiKTsKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzQsIDE2LCAxOSwgIndlLW9uLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc0LCAyNCwgMjgsICJ3ZS1vZmYtbnMiKTsKKworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNSwgIDAsICA0LCAicmQtY3ljbGUtbnMiKTsKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzUsICA4LCAxMiwgIndyLWN5Y2xlLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc1LCAxNiwgMjAsICJhY2Nlc3MtbnMiKTsKKworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNSwgMjQsIDI3LCAicGFnZS1idXJzdC1hY2Nlc3MtbnMiKTsKKworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNiwgMCwgMywgImJ1cy10dXJuYXJvdW5kLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc2LCA4LCAxMSwgImN5Y2xlMmN5Y2xlLWRlbGF5LW5zIik7CisKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzEsIDE4LCAxOSwgIndhaXQtbW9uaXRvcmluZy1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHMSwgMjUsIDI2LCAiY2xrLWFjdGl2YXRpb24tbnMiKTsKKworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNiwgMTYsIDE5LCAid3ItZGF0YS1tdXgtYnVzLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc2LCAyNCwgMjgsICJ3ci1hY2Nlc3MtbnMiKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZ3BtY19jc19zaG93X3RpbWluZ3MoaW50IGNzLCBjb25zdCBjaGFyICpkZXNjKQoreworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgc2V0X2dwbWNfdGltaW5nX3JlZyhpbnQgY3MsIGludCByZWcsIGludCBzdF9iaXQsIGludCBlbmRfYml0LAogCQkJICAgICAgIGludCB0aW1lLCBjb25zdCBjaGFyICpuYW1lKQotI2Vsc2UKLXN0YXRpYyBpbnQgc2V0X2dwbWNfdGltaW5nX3JlZyhpbnQgY3MsIGludCByZWcsIGludCBzdF9iaXQsIGludCBlbmRfYml0LAotCQkJICAgICAgIGludCB0aW1lKQotI2VuZGlmCiB7CiAJdTMyIGw7CiAJaW50IHRpY2tzLCBtYXNrLCBucl9iaXRzOwpAQCAtMjk5LDE1ICs0NzEsMTUgQEAKIAllbHNlCiAJCXRpY2tzID0gZ3BtY19uc190b190aWNrcyh0aW1lKTsKIAlucl9iaXRzID0gZW5kX2JpdCAtIHN0X2JpdCArIDE7Ci0JaWYgKHRpY2tzID49IDEgPDwgbnJfYml0cykgewotI2lmZGVmIERFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIkdQTUMgQ1MlZDogJS0xMHMqICUzZCBucywgJTNkIHRpY2tzID49ICVkXG4iLAotCQkJCWNzLCBuYW1lLCB0aW1lLCB0aWNrcywgMSA8PCBucl9iaXRzKTsKLSNlbmRpZgorCW1hc2sgPSAoMSA8PCBucl9iaXRzKSAtIDE7CisKKwlpZiAodGlja3MgPiBtYXNrKSB7CisJCXByX2VycigiJXM6IEdQTUMgZXJyb3IhIENTJWQ6ICVzOiAlZCBucywgJWQgdGlja3MgPiAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBjcywgbmFtZSwgdGltZSwgdGlja3MsIG1hc2spOworCiAJCXJldHVybiAtMTsKIAl9CiAKLQltYXNrID0gKDEgPDwgbnJfYml0cykgLSAxOwogCWwgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCByZWcpOwogI2lmZGVmIERFQlVHCiAJcHJpbnRrKEtFUk5fSU5GTwpAQCAtMzIyLDE2ICs0OTQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIERFQlVHCiAjZGVmaW5lIEdQTUNfU0VUX09ORShyZWcsIHN0LCBlbmQsIGZpZWxkKSBcCiAJaWYgKHNldF9ncG1jX3RpbWluZ19yZWcoY3MsIChyZWcpLCAoc3QpLCAoZW5kKSwJCVwKIAkJCXQtPmZpZWxkLCAjZmllbGQpIDwgMCkJCQlcCiAJCXJldHVybiAtMQotI2Vsc2UKLSNkZWZpbmUgR1BNQ19TRVRfT05FKHJlZywgc3QsIGVuZCwgZmllbGQpIFwKLQlpZiAoc2V0X2dwbWNfdGltaW5nX3JlZyhjcywgKHJlZyksIChzdCksIChlbmQpLCB0LT5maWVsZCkgPCAwKSBcCi0JCXJldHVybiAtMQotI2VuZGlmCiAKIGludCBncG1jX2NhbGNfZGl2aWRlcih1bnNpZ25lZCBpbnQgc3luY19jbGspCiB7CkBAIC0zNTMsNiArNTE5LDcgQEAKIAlpbnQgZGl2OwogCXUzMiBsOwogCisJZ3BtY19jc19zaG93X3RpbWluZ3MoY3MsICJiZWZvcmUgZ3BtY19jc19zZXRfdGltaW5ncyIpOwogCWRpdiA9IGdwbWNfY2FsY19kaXZpZGVyKHQtPnN5bmNfY2xrKTsKIAlpZiAoZGl2IDwgMCkKIAkJcmV0dXJuIGRpdjsKQEAgLTQwMiwxMSArNTY5LDEyIEBACiAJfQogCiAJZ3BtY19jc19ib29sX3RpbWluZ3MoY3MsICZ0LT5ib29sX3RpbWluZ3MpOworCWdwbWNfY3Nfc2hvd190aW1pbmdzKGNzLCAiYWZ0ZXIgZ3BtY19jc19zZXRfdGltaW5ncyIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ3BtY19jc19lbmFibGVfbWVtKGludCBjcywgdTMyIGJhc2UsIHUzMiBzaXplKQorc3RhdGljIGludCBncG1jX2NzX3NldF9tZW1jb25mKGludCBjcywgdTMyIGJhc2UsIHUzMiBzaXplKQogewogCXUzMiBsOwogCXUzMiBtYXNrOwpAQCAtNDMwLDYgKzU5OCwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBncG1jX2NzX2VuYWJsZV9tZW0oaW50IGNzKQoreworCXUzMiBsOworCisJbCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHNyk7CisJbCB8PSBHUE1DX0NPTkZJRzdfQ1NWQUxJRDsKKwlncG1jX2NzX3dyaXRlX3JlZyhjcywgR1BNQ19DU19DT05GSUc3LCBsKTsKK30KKwogc3RhdGljIHZvaWQgZ3BtY19jc19kaXNhYmxlX21lbShpbnQgY3MpCiB7CiAJdTMyIGw7CkBAIC00NjAsMTMgKzYzNywzMCBAQAogCiBzdGF0aWMgdm9pZCBncG1jX2NzX3NldF9yZXNlcnZlZChpbnQgY3MsIGludCByZXNlcnZlZCkKIHsKLQlncG1jX2NzX21hcCAmPSB+KDEgPDwgY3MpOwotCWdwbWNfY3NfbWFwIHw9IChyZXNlcnZlZCA/IDEgOiAwKSA8PCBjczsKKwlzdHJ1Y3QgZ3BtY19jc19kYXRhICpncG1jID0gJmdwbWNfY3NbY3NdOworCisJZ3BtYy0+ZmxhZ3MgfD0gR1BNQ19DU19SRVNFUlZFRDsKIH0KIAogc3RhdGljIGJvb2wgZ3BtY19jc19yZXNlcnZlZChpbnQgY3MpCiB7Ci0JcmV0dXJuIGdwbWNfY3NfbWFwICYgKDEgPDwgY3MpOworCXN0cnVjdCBncG1jX2NzX2RhdGEgKmdwbWMgPSAmZ3BtY19jc1tjc107CisKKwlyZXR1cm4gZ3BtYy0+ZmxhZ3MgJiBHUE1DX0NTX1JFU0VSVkVEOworfQorCitzdGF0aWMgdm9pZCBncG1jX2NzX3NldF9uYW1lKGludCBjcywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZ3BtY19jc19kYXRhICpncG1jID0gJmdwbWNfY3NbY3NdOworCisJZ3BtYy0+bmFtZSA9IG5hbWU7Cit9CisKK2NvbnN0IGNoYXIgKmdwbWNfY3NfZ2V0X25hbWUoaW50IGNzKQoreworCXN0cnVjdCBncG1jX2NzX2RhdGEgKmdwbWMgPSAmZ3BtY19jc1tjc107CisKKwlyZXR1cm4gZ3BtYy0+bmFtZTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3BtY19tZW1fYWxpZ24odW5zaWduZWQgbG9uZyBzaXplKQpAQCAtNDg1LDcgKzY3OSw4IEBACiAKIHN0YXRpYyBpbnQgZ3BtY19jc19pbnNlcnRfbWVtKGludCBjcywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0Jc3RydWN0IHJlc291cmNlCSpyZXMgPSAmZ3BtY19jc19tZW1bY3NdOworCXN0cnVjdCBncG1jX2NzX2RhdGEgKmdwbWMgPSAmZ3BtY19jc1tjc107CisJc3RydWN0IHJlc291cmNlICpyZXMgPSAmZ3BtYy0+bWVtOwogCWludCByOwogCiAJc2l6ZSA9IGdwbWNfbWVtX2FsaWduKHNpemUpOwpAQCAtNTAwLDcgKzY5NSw4IEBACiAKIHN0YXRpYyBpbnQgZ3BtY19jc19kZWxldGVfbWVtKGludCBjcykKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UJKnJlcyA9ICZncG1jX2NzX21lbVtjc107CisJc3RydWN0IGdwbWNfY3NfZGF0YSAqZ3BtYyA9ICZncG1jX2NzW2NzXTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZncG1jLT5tZW07CiAJaW50IHI7CiAKIAlzcGluX2xvY2soJmdwbWNfbWVtX2xvY2spOwpAQCAtNTQxLDIzICs3MzcsMjQgQEAKIAlncG1jX2NzX2dldF9tZW1jb25mKGNzLCAmb2xkX2Jhc2UsICZzaXplKTsKIAlpZiAoYmFzZSA9PSBvbGRfYmFzZSkKIAkJcmV0dXJuIDA7Ci0JZ3BtY19jc19kaXNhYmxlX21lbShjcyk7CisKIAlyZXQgPSBncG1jX2NzX2RlbGV0ZV9tZW0oY3MpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OworCiAJcmV0ID0gZ3BtY19jc19pbnNlcnRfbWVtKGNzLCBiYXNlLCBzaXplKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXQgPSBncG1jX2NzX2VuYWJsZV9tZW0oY3MsIGJhc2UsIHNpemUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIDA7CisJcmV0ID0gZ3BtY19jc19zZXRfbWVtY29uZihjcywgYmFzZSwgc2l6ZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgZ3BtY19jc19yZXF1ZXN0KGludCBjcywgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICpiYXNlKQogewotCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmdwbWNfY3NfbWVtW2NzXTsKKwlzdHJ1Y3QgZ3BtY19jc19kYXRhICpncG1jID0gJmdwbWNfY3NbY3NdOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmdwbWMtPm1lbTsKIAlpbnQgciA9IC0xOwogCiAJaWYgKGNzID4gZ3BtY19jc19udW0pIHsKQEAgLTU4MSwxMiArNzc4LDE3IEBACiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAotCXIgPSBncG1jX2NzX2VuYWJsZV9tZW0oY3MsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJLyogRGlzYWJsZSBDUyB3aGlsZSBjaGFuZ2luZyBiYXNlIGFkZHJlc3MgYW5kIHNpemUgbWFzayAqLworCWdwbWNfY3NfZGlzYWJsZV9tZW0oY3MpOworCisJciA9IGdwbWNfY3Nfc2V0X21lbWNvbmYoY3MsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKHIgPCAwKSB7CiAJCXJlbGVhc2VfcmVzb3VyY2UocmVzKTsKIAkJZ290byBvdXQ7CiAJfQogCisJLyogRW5hYmxlIENTICovCisJZ3BtY19jc19lbmFibGVfbWVtKGNzKTsKIAkqYmFzZSA9IHJlcy0+c3RhcnQ7CiAJZ3BtY19jc19zZXRfcmVzZXJ2ZWQoY3MsIDEpOwogb3V0OgpAQCAtNTk3LDcgKzc5OSw4IEBACiAKIHZvaWQgZ3BtY19jc19mcmVlKGludCBjcykKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UJKnJlcyA9ICZncG1jX2NzX21lbVtjc107CisJc3RydWN0IGdwbWNfY3NfZGF0YSAqZ3BtYyA9ICZncG1jX2NzW2NzXTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZncG1jLT5tZW07CiAKIAlzcGluX2xvY2soJmdwbWNfbWVtX2xvY2spOwogCWlmIChjcyA+PSBncG1jX2NzX251bSB8fCBjcyA8IDAgfHwgIWdwbWNfY3NfcmVzZXJ2ZWQoY3MpKSB7CkBAIC0xMzk0LDggKzE1OTcsNiBAQAogCWlmIChncG1jX25hbmRfZGF0YS0+ZWxtX29mX25vZGUgPT0gTlVMTCkKIAkJZ3BtY19uYW5kX2RhdGEtPmVsbV9vZl9ub2RlID0KIAkJCQkJb2ZfcGFyc2VfcGhhbmRsZShjaGlsZCwgImVsbV9pZCIsIDApOwotCWlmIChncG1jX25hbmRfZGF0YS0+ZWxtX29mX25vZGUgPT0gTlVMTCkKLQkJcHJfd2FybigiJXM6IHRpLGVsbS1pZCBwcm9wZXJ0eSBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKIAogCS8qIHNlbGVjdCBlY2Mtc2NoZW1lIGZvciBOQU5EICovCiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGNoaWxkLCAidGksbmFuZC1lY2Mtb3B0IiwgJnMpKSB7CkBAIC0xNTExLDcgKzE3MTIsOSBAQAogCXN0cnVjdCBncG1jX3RpbWluZ3MgZ3BtY190OwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJdW5zaWduZWQgbG9uZyBiYXNlOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IHJldCwgY3M7CisJdTMyIHZhbDsKIAogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgInJlZyIsICZjcykgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIGhhcyBubyAncmVnJyBwcm9wZXJ0eVxuIiwKQEAgLTE1MjUsMjggKzE3MjgsNDEgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBkZXZpY2UKKwkgKiBvbiBhIHNpbmdsZSBjaGlwIHNlbGVjdC4gSWYgc28sIHVzZSB0aGUgYWxyZWFkeSBpbml0aWFsaXplZAorCSAqIHRpbWluZ3MuCisJICovCisJbmFtZSA9IGdwbWNfY3NfZ2V0X25hbWUoY3MpOworCWlmIChuYW1lICYmIGNoaWxkLT5uYW1lICYmIG9mX25vZGVfY21wKGNoaWxkLT5uYW1lLCBuYW1lKSA9PSAwKQorCQkJZ290byBub190aW1pbmdzOworCiAJcmV0ID0gZ3BtY19jc19yZXF1ZXN0KGNzLCByZXNvdXJjZV9zaXplKCZyZXMpLCAmYmFzZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgR1BNQyBDUyAlZFxuIiwgY3MpOwogCQlyZXR1cm4gcmV0OwogCX0KKwlncG1jX2NzX3NldF9uYW1lKGNzLCBjaGlsZC0+bmFtZSk7CisKKwlncG1jX3JlYWRfc2V0dGluZ3NfZHQoY2hpbGQsICZncG1jX3MpOworCWdwbWNfcmVhZF90aW1pbmdzX2R0KGNoaWxkLCAmZ3BtY190KTsKIAogCS8qCiAJICogRm9yIHNvbWUgR1BNQyBkZXZpY2VzIHdlIHN0aWxsIG5lZWQgdG8gcmVseSBvbiB0aGUgYm9vdGxvYWRlcgotCSAqIHRpbWluZ3MgYmVjYXVzZSB0aGUgZGV2aWNlcyBjYW4gYmUgY29ubmVjdGVkIHZpYSBGUEdBLiBTbyBmYXIKLQkgKiB0aGUgbGlzdCBpcyBzbWM5MXggb24gdGhlIG9tYXAyIFNEUCBib2FyZHMsIGFuZCA4MjUwIG9uIHpvb21zLgotCSAqIFJFVklTSVQ6IEFkZCB0aW1pbmcgc3VwcG9ydCBmcm9tIHNsbHM2NDRnLnBkZiBhbmQgZnJvbSB0aGUKLQkgKiBsYW45MWM5NiBtYW51YWwuCisJICogdGltaW5ncyBiZWNhdXNlIHRoZSBkZXZpY2VzIGNhbiBiZSBjb25uZWN0ZWQgdmlhIEZQR0EuCisJICogUkVWSVNJVDogQWRkIHRpbWluZyBzdXBwb3J0IGZyb20gc2xsczY0NGcucGRmLgogCSAqLwotCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgIm5zMTY1NTBhIikgfHwKLQkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsICJzbXNjLGxhbjkxYzk0IikgfHwKLQkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsICJzbXNjLGxhbjkxYzExMSIpKSB7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsCi0JCQkgIiVzIHVzaW5nIGJvb3Rsb2FkZXIgdGltaW5ncyBvbiBDUyVkXG4iLAotCQkJIGNoaWxkLT5uYW1lLCBjcyk7CisJaWYgKCFncG1jX3QuY3NfcmRfb2ZmKSB7CisJCVdBUk4oMSwgImVuYWJsZSBHUE1DIGRlYnVnIHRvIGNvbmZpZ3VyZSAuZHRzIHRpbWluZ3MgZm9yIENTJWlcbiIsCisJCQljcyk7CisJCWdwbWNfY3Nfc2hvd190aW1pbmdzKGNzLAorCQkJCSAgICAgInBsZWFzZSBhZGQgR1BNQyBib290bG9hZGVyIHRpbWluZ3MgdG8gLmR0cyIpOwogCQlnb3RvIG5vX3RpbWluZ3M7CiAJfQogCisJLyogQ1MgbXVzdCBiZSBkaXNhYmxlZCB3aGlsZSBtYWtpbmcgY2hhbmdlcyB0byBncG1jIGNvbmZpZ3VyYXRpb24gKi8KKwlncG1jX2NzX2Rpc2FibGVfbWVtKGNzKTsKKwogCS8qCiAJICogRklYTUU6IGdwbWNfY3NfcmVxdWVzdCgpIHdpbGwgbWFwIHRoZSBDUyB0byBhbiBhcmJpdGFyeQogCSAqIGxvY2F0aW9uIGluIHRoZSBncG1jIGFkZHJlc3Mgc3BhY2UuIFdoZW4gYm9vdGluZyB3aXRoCkBAIC0xNTYyLDggKzE3NzgsNiBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlncG1jX3JlYWRfc2V0dGluZ3NfZHQoY2hpbGQsICZncG1jX3MpOwotCiAJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJiYW5rLXdpZHRoIiwgJmdwbWNfcy5kZXZpY2Vfd2lkdGgpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKQEAgLTE1NzIsOCArMTc4NiwyMCBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKIAotCWdwbWNfcmVhZF90aW1pbmdzX2R0KGNoaWxkLCAmZ3BtY190KTsKLQlncG1jX2NzX3NldF90aW1pbmdzKGNzLCAmZ3BtY190KTsKKwlyZXQgPSBncG1jX2NzX3NldF90aW1pbmdzKGNzLCAmZ3BtY190KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzZXQgZ3BtYyB0aW1pbmdzIGZvcjogJXNcbiIsCisJCQljaGlsZC0+bmFtZSk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIENsZWFyIGxpbWl0ZWQgYWRkcmVzcyBpLmUuIGVuYWJsZSBBMjYtQTExICovCisJdmFsID0gZ3BtY19yZWFkX3JlZyhHUE1DX0NPTkZJRyk7CisJdmFsICY9IH5HUE1DX0NPTkZJR19MSU1JVEVEQUREUkVTUzsKKwlncG1jX3dyaXRlX3JlZyhHUE1DX0NPTkZJRywgdmFsKTsKKworCS8qIEVuYWJsZSBDUyByZWdpb24gKi8KKwlncG1jX2NzX2VuYWJsZV9tZW0oY3MpOwogCiBub190aW1pbmdzOgogCWlmIChvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKGNoaWxkLCBOVUxMLCAmcGRldi0+ZGV2KSkKQEAgLTE2NzAsMTMgKzE4OTYsMTggQEAKIAllbHNlCiAJCWdwbWNfaXJxID0gcmVzLT5zdGFydDsKIAotCWdwbWNfbDNfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJZ3BtY19sM19jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOwogCWlmIChJU19FUlIoZ3BtY19sM19jbGspKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yOiBjbGtfZ2V0XG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBHUE1DIGZja1xuIik7CiAJCWdwbWNfaXJxID0gMDsKIAkJcmV0dXJuIFBUUl9FUlIoZ3BtY19sM19jbGspOwogCX0KIAorCWlmICghY2xrX2dldF9yYXRlKGdwbWNfbDNfY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIEdQTUMgZmNrIGNsb2NrIHJhdGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOwogCkBAIC0xNzA4LDkgKzE5MzksNiBAQAogCWlmIChncG1jX3NldHVwX2lycSgpIDwgMCkKIAkJZGV2X3dhcm4oZ3BtY19kZXYsICJncG1jX3NldHVwX2lycSBmYWlsZWRcbiIpOwogCi0JLyogTm93IHRoZSBHUE1DIGlzIGluaXRpYWxpc2VkLCB1bnJlc2VydmUgdGhlIGNoaXAtc2VsZWN0cyAqLwotCWdwbWNfY3NfbWFwID0gMDsKLQogCWlmICghcGRldi0+ZGV2Lm9mX25vZGUpIHsKIAkJZ3BtY19jc19udW0JID0gR1BNQ19DU19OVU07CiAJCWdwbWNfbnJfd2FpdHBpbnMgPSBHUE1DX05SX1dBSVRQSU5TOwpAQCAtMTcxOSw3ICsxOTQ3LDYgQEAKIAlyYyA9IGdwbWNfcHJvYmVfZHQocGRldik7CiAJaWYgKHJjIDwgMCkgewogCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZwZGV2LT5kZXYpOwotCQljbGtfcHV0KGdwbWNfbDNfY2xrKTsKIAkJZGV2X2VycihncG1jX2RldiwgImZhaWxlZCB0byBwcm9iZSBEVCBwYXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTE3NzcsMzUgKzIwMDQsOSBAQAogCiB9CiAKLW9tYXBfcG9zdGNvcmVfaW5pdGNhbGwoZ3BtY19pbml0KTsKK3Bvc3Rjb3JlX2luaXRjYWxsKGdwbWNfaW5pdCk7CiBtb2R1bGVfZXhpdChncG1jX2V4aXQpOwogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2dwbWNfaW5pdCh2b2lkKQotewotCXN0cnVjdCBvbWFwX2h3bW9kICpvaDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCWNoYXIgKm9oX25hbWUgPSAiZ3BtYyI7Ci0KLQkvKgotCSAqIGlmIHRoZSBib2FyZCBib290cyB1cCB3aXRoIGEgcG9wdWxhdGVkIERULCBkbyBub3QKLQkgKiBtYW51YWxseSBhZGQgdGhlIGRldmljZSBmcm9tIHRoaXMgaW5pdGNhbGwKLQkgKi8KLQlpZiAob2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlvaCA9IG9tYXBfaHdtb2RfbG9va3VwKG9oX25hbWUpOwotCWlmICghb2gpIHsKLQkJcHJfZXJyKCJDb3VsZCBub3QgbG9vayB1cCAlc1xuIiwgb2hfbmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXBkZXYgPSBvbWFwX2RldmljZV9idWlsZChERVZJQ0VfTkFNRSwgLTEsIG9oLCBOVUxMLCAwKTsKLQlXQVJOKElTX0VSUihwZGV2KSwgImNvdWxkIG5vdCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXNcbiIsIG9oX25hbWUpOwotCi0JcmV0dXJuIFBUUl9SRVQocGRldik7Ci19Ci1vbWFwX3Bvc3Rjb3JlX2luaXRjYWxsKG9tYXBfZ3BtY19pbml0KTsKLQogc3RhdGljIGlycXJldHVybl90IGdwbWNfaGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS90ZWdyYS9LY29uZmlnIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzEwODc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvS2NvbmZpZwpAQCAtMCwwICsxLDcgQEAKK2NvbmZpZyBURUdSQV9NQworCWJvb2wgIk5WSURJQSBUZWdyYSBNZW1vcnkgQ29udHJvbGxlciBzdXBwb3J0IgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQVJDSF9URUdSQQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNZW1vcnkgQ29udHJvbGxlciAoTUMpIGhhcmR3YXJlIGZvdW5kIG9uCisJICBOVklESUEgVGVncmEgU29Dcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL01ha2VmaWxlIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5ZjQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAordGVncmEtbWMteSA6PSBtYy5vCisKK3RlZ3JhLW1jLSQoQ09ORklHX0FSQ0hfVEVHUkFfM3hfU09DKSAgKz0gdGVncmEzMC5vCit0ZWdyYS1tYy0kKENPTkZJR19BUkNIX1RFR1JBXzExNF9TT0MpICs9IHRlZ3JhMTE0Lm8KK3RlZ3JhLW1jLSQoQ09ORklHX0FSQ0hfVEVHUkFfMTI0X1NPQykgKz0gdGVncmExMjQubworCitvYmotJChDT05GSUdfVEVHUkFfTUMpICs9IHRlZ3JhLW1jLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL21jLmMgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS9tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlM2M0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS9tYy5jCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJtYy5oIgorCisjZGVmaW5lIE1DX0lOVFNUQVRVUyAweDAwMAorI2RlZmluZSAgTUNfSU5UX0RFQ0VSUl9NVFMgKDEgPDwgMTYpCisjZGVmaW5lICBNQ19JTlRfU0VDRVJSX1NFQyAoMSA8PCAxMykKKyNkZWZpbmUgIE1DX0lOVF9ERUNFUlJfVlBSICgxIDw8IDEyKQorI2RlZmluZSAgTUNfSU5UX0lOVkFMSURfQVBCX0FTSURfVVBEQVRFICgxIDw8IDExKQorI2RlZmluZSAgTUNfSU5UX0lOVkFMSURfU01NVV9QQUdFICgxIDw8IDEwKQorI2RlZmluZSAgTUNfSU5UX0FSQklUUkFUSU9OX0VNRU0gKDEgPDwgOSkKKyNkZWZpbmUgIE1DX0lOVF9TRUNVUklUWV9WSU9MQVRJT04gKDEgPDwgOCkKKyNkZWZpbmUgIE1DX0lOVF9ERUNFUlJfRU1FTSAoMSA8PCA2KQorCisjZGVmaW5lIE1DX0lOVE1BU0sgMHgwMDQKKworI2RlZmluZSBNQ19FUlJfU1RBVFVTIDB4MDgKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfVFlQRV9TSElGVCAyOAorI2RlZmluZSAgTUNfRVJSX1NUQVRVU19UWVBFX0lOVkFMSURfU01NVV9QQUdFICg2IDw8IE1DX0VSUl9TVEFUVVNfVFlQRV9TSElGVCkKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfVFlQRV9NQVNLICgweDcgPDwgTUNfRVJSX1NUQVRVU19UWVBFX1NISUZUKQorI2RlZmluZSAgTUNfRVJSX1NUQVRVU19SRUFEQUJMRSAoMSA8PCAyNykKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfV1JJVEFCTEUgKDEgPDwgMjYpCisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX05PTlNFQ1VSRSAoMSA8PCAyNSkKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfQURSX0hJX1NISUZUIDIwCisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX0FEUl9ISV9NQVNLIDB4MworI2RlZmluZSAgTUNfRVJSX1NUQVRVU19TRUNVUklUWSAoMSA8PCAxNykKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfUlcgKDEgPDwgMTYpCisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX0NMSUVOVF9NQVNLIDB4N2YKKworI2RlZmluZSBNQ19FUlJfQURSIDB4MGMKKworI2RlZmluZSBNQ19FTUVNX0FSQl9DRkcgMHg5MAorI2RlZmluZSAgTUNfRU1FTV9BUkJfQ0ZHX0NZQ0xFU19QRVJfVVBEQVRFKHgpCSgoKHgpICYgMHgxZmYpIDw8IDApCisjZGVmaW5lICBNQ19FTUVNX0FSQl9DRkdfQ1lDTEVTX1BFUl9VUERBVEVfTUFTSwkweDFmZgorI2RlZmluZSBNQ19FTUVNX0FSQl9NSVNDMCAweGQ4CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRlZ3JhX21jX29mX21hdGNoW10gPSB7CisjaWZkZWYgQ09ORklHX0FSQ0hfVEVHUkFfM3hfU09DCisJeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEzMC1tYyIsIC5kYXRhID0gJnRlZ3JhMzBfbWNfc29jIH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9URUdSQV8xMTRfU09DCisJeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmExMTQtbWMiLCAuZGF0YSA9ICZ0ZWdyYTExNF9tY19zb2MgfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX1RFR1JBXzEyNF9TT0MKKwl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTEyNC1tYyIsIC5kYXRhID0gJnRlZ3JhMTI0X21jX3NvYyB9LAorI2VuZGlmCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGVncmFfbWNfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IHRlZ3JhX21jX3NldHVwX2xhdGVuY3lfYWxsb3dhbmNlKHN0cnVjdCB0ZWdyYV9tYyAqbWMpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHRpY2s7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHZhbHVlOworCisJLyogY29tcHV0ZSB0aGUgbnVtYmVyIG9mIE1DIGNsb2NrIGN5Y2xlcyBwZXIgdGljayAqLworCXRpY2sgPSBtYy0+dGljayAqIGNsa19nZXRfcmF0ZShtYy0+Y2xrKTsKKwlkb19kaXYodGljaywgTlNFQ19QRVJfU0VDKTsKKworCXZhbHVlID0gcmVhZGwobWMtPnJlZ3MgKyBNQ19FTUVNX0FSQl9DRkcpOworCXZhbHVlICY9IH5NQ19FTUVNX0FSQl9DRkdfQ1lDTEVTX1BFUl9VUERBVEVfTUFTSzsKKwl2YWx1ZSB8PSBNQ19FTUVNX0FSQl9DRkdfQ1lDTEVTX1BFUl9VUERBVEUodGljayk7CisJd3JpdGVsKHZhbHVlLCBtYy0+cmVncyArIE1DX0VNRU1fQVJCX0NGRyk7CisKKwkvKiB3cml0ZSBsYXRlbmN5IGFsbG93YW5jZSBkZWZhdWx0cyAqLworCWZvciAoaSA9IDA7IGkgPCBtYy0+c29jLT5udW1fY2xpZW50czsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCB0ZWdyYV9tY19sYSAqbGEgPSAmbWMtPnNvYy0+Y2xpZW50c1tpXS5sYTsKKwkJdTMyIHZhbHVlOworCisJCXZhbHVlID0gcmVhZGwobWMtPnJlZ3MgKyBsYS0+cmVnKTsKKwkJdmFsdWUgJj0gfihsYS0+bWFzayA8PCBsYS0+c2hpZnQpOworCQl2YWx1ZSB8PSAobGEtPmRlZiAmIGxhLT5tYXNrKSA8PCBsYS0+c2hpZnQ7CisJCXdyaXRlbCh2YWx1ZSwgbWMtPnJlZ3MgKyBsYS0+cmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YXR1c19uYW1lc1szMl0gPSB7CisJWyAxXSA9ICJFeHRlcm5hbCBpbnRlcnJ1cHQiLAorCVsgNl0gPSAiRU1FTSBhZGRyZXNzIGRlY29kZSBlcnJvciIsCisJWyA4XSA9ICJTZWN1cml0eSB2aW9sYXRpb24iLAorCVsgOV0gPSAiRU1FTSBhcmJpdHJhdGlvbiBlcnJvciIsCisJWzEwXSA9ICJQYWdlIGZhdWx0IiwKKwlbMTFdID0gIkludmFsaWQgQVBCIEFTSUQgdXBkYXRlIiwKKwlbMTJdID0gIlZQUiB2aW9sYXRpb24iLAorCVsxM10gPSAiU2VjdXJlIGNhcnZlb3V0IHZpb2xhdGlvbiIsCisJWzE2XSA9ICJNVFMgY2FydmVvdXQgdmlvbGF0aW9uIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlcnJvcl9uYW1lc1s4XSA9IHsKKwlbMl0gPSAiRU1FTSBkZWNvZGUgZXJyb3IiLAorCVszXSA9ICJUcnVzdFpvbmUgdmlvbGF0aW9uIiwKKwlbNF0gPSAiQ2FydmVvdXQgdmlvbGF0aW9uIiwKKwlbNl0gPSAiU01NVSB0cmFuc2xhdGlvbiBlcnJvciIsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgdGVncmFfbWNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHRlZ3JhX21jICptYyA9IGRhdGE7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMsIG1hc2s7CisJdW5zaWduZWQgaW50IGJpdDsKKworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgdG8gYXZvaWQgZmxvb2RpbmcgKi8KKwlzdGF0dXMgPSBtY19yZWFkbChtYywgTUNfSU5UU1RBVFVTKTsKKwltYXNrID0gbWNfcmVhZGwobWMsIE1DX0lOVE1BU0spOworCisJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZzdGF0dXMsIDMyKSB7CisJCWNvbnN0IGNoYXIgKmVycm9yID0gc3RhdHVzX25hbWVzW2JpdF0gPzogInVua25vd24iOworCQljb25zdCBjaGFyICpjbGllbnQgPSAidW5rbm93biIsICpkZXNjOworCQljb25zdCBjaGFyICpkaXJlY3Rpb24sICpzZWN1cmU7CisJCXBoeXNfYWRkcl90IGFkZHIgPSAwOworCQl1bnNpZ25lZCBpbnQgaTsKKwkJY2hhciBwZXJtWzddOworCQl1OCBpZCwgdHlwZTsKKwkJdTMyIHZhbHVlOworCisJCXZhbHVlID0gbWNfcmVhZGwobWMsIE1DX0VSUl9TVEFUVVMpOworCisjaWZkZWYgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUCisJCWlmIChtYy0+c29jLT5udW1fYWRkcmVzc19iaXRzID4gMzIpIHsKKwkJCWFkZHIgPSAoKHZhbHVlID4+IE1DX0VSUl9TVEFUVVNfQURSX0hJX1NISUZUKSAmCisJCQkJTUNfRVJSX1NUQVRVU19BRFJfSElfTUFTSyk7CisJCQlhZGRyIDw8PSAzMjsKKwkJfQorI2VuZGlmCisKKwkJaWYgKHZhbHVlICYgTUNfRVJSX1NUQVRVU19SVykKKwkJCWRpcmVjdGlvbiA9ICJ3cml0ZSI7CisJCWVsc2UKKwkJCWRpcmVjdGlvbiA9ICJyZWFkIjsKKworCQlpZiAodmFsdWUgJiBNQ19FUlJfU1RBVFVTX1NFQ1VSSVRZKQorCQkJc2VjdXJlID0gInNlY3VyZSAiOworCQllbHNlCisJCQlzZWN1cmUgPSAiIjsKKworCQlpZCA9IHZhbHVlICYgTUNfRVJSX1NUQVRVU19DTElFTlRfTUFTSzsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWMtPnNvYy0+bnVtX2NsaWVudHM7IGkrKykgeworCQkJaWYgKG1jLT5zb2MtPmNsaWVudHNbaV0uaWQgPT0gaWQpIHsKKwkJCQljbGllbnQgPSBtYy0+c29jLT5jbGllbnRzW2ldLm5hbWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQl0eXBlID0gKHZhbHVlICYgTUNfRVJSX1NUQVRVU19UWVBFX01BU0spID4+CisJCSAgICAgICBNQ19FUlJfU1RBVFVTX1RZUEVfU0hJRlQ7CisJCWRlc2MgPSBlcnJvcl9uYW1lc1t0eXBlXTsKKworCQlzd2l0Y2ggKHZhbHVlICYgTUNfRVJSX1NUQVRVU19UWVBFX01BU0spIHsKKwkJY2FzZSBNQ19FUlJfU1RBVFVTX1RZUEVfSU5WQUxJRF9TTU1VX1BBR0U6CisJCQlwZXJtWzBdID0gJyAnOworCQkJcGVybVsxXSA9ICdbJzsKKworCQkJaWYgKHZhbHVlICYgTUNfRVJSX1NUQVRVU19SRUFEQUJMRSkKKwkJCQlwZXJtWzJdID0gJ1InOworCQkJZWxzZQorCQkJCXBlcm1bMl0gPSAnLSc7CisKKwkJCWlmICh2YWx1ZSAmIE1DX0VSUl9TVEFUVVNfV1JJVEFCTEUpCisJCQkJcGVybVszXSA9ICdXJzsKKwkJCWVsc2UKKwkJCQlwZXJtWzNdID0gJy0nOworCisJCQlpZiAodmFsdWUgJiBNQ19FUlJfU1RBVFVTX05PTlNFQ1VSRSkKKwkJCQlwZXJtWzRdID0gJy0nOworCQkJZWxzZQorCQkJCXBlcm1bNF0gPSAnUyc7CisKKwkJCXBlcm1bNV0gPSAnXSc7CisJCQlwZXJtWzZdID0gJ1wwJzsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwZXJtWzBdID0gJ1wwJzsKKwkJCWJyZWFrOworCQl9CisKKwkJdmFsdWUgPSBtY19yZWFkbChtYywgTUNfRVJSX0FEUik7CisJCWFkZHIgfD0gdmFsdWU7CisKKwkJZGV2X2Vycl9yYXRlbGltaXRlZChtYy0+ZGV2LCAiJXM6ICVzJXMgQCVwYTogJXMgKCVzJXMpXG4iLAorCQkJCSAgICBjbGllbnQsIHNlY3VyZSwgZGlyZWN0aW9uLCAmYWRkciwgZXJyb3IsCisJCQkJICAgIGRlc2MsIHBlcm0pOworCX0KKworCS8qIGNsZWFyIGludGVycnVwdHMgKi8KKwltY193cml0ZWwobWMsIHN0YXR1cywgTUNfSU5UU1RBVFVTKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB0ZWdyYV9tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCB0ZWdyYV9tYyAqbWM7CisJdTMyIHZhbHVlOworCWludCBlcnI7CisKKwltYXRjaCA9IG9mX21hdGNoX25vZGUodGVncmFfbWNfb2ZfbWF0Y2gsIHBkZXYtPmRldi5vZl9ub2RlKTsKKwlpZiAoIW1hdGNoKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1jID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTsKKwltYy0+c29jID0gbWF0Y2gtPmRhdGE7CisJbWMtPmRldiA9ICZwZGV2LT5kZXY7CisKKwkvKiBsZW5ndGggb2YgTUMgdGljayBpbiBuYW5vc2Vjb25kcyAqLworCW1jLT50aWNrID0gMzA7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1jLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihtYy0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKG1jLT5yZWdzKTsKKworCW1jLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgIm1jIik7CisJaWYgKElTX0VSUihtYy0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IE1DIGNsb2NrOiAlbGRcbiIsCisJCQlQVFJfRVJSKG1jLT5jbGspKTsKKwkJcmV0dXJuIFBUUl9FUlIobWMtPmNsayk7CisJfQorCisJZXJyID0gdGVncmFfbWNfc2V0dXBfbGF0ZW5jeV9hbGxvd2FuY2UobWMpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzZXR1cCBsYXRlbmN5IGFsbG93YW5jZTogJWRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChJU19FTkFCTEVEKENPTkZJR19URUdSQV9JT01NVV9TTU1VKSkgeworCQltYy0+c21tdSA9IHRlZ3JhX3NtbXVfcHJvYmUoJnBkZXYtPmRldiwgbWMtPnNvYy0+c21tdSwgbWMpOworCQlpZiAoSVNfRVJSKG1jLT5zbW11KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHByb2JlIFNNTVU6ICVsZFxuIiwKKwkJCQlQVFJfRVJSKG1jLT5zbW11KSk7CisJCQlyZXR1cm4gUFRSX0VSUihtYy0+c21tdSk7CisJCX0KKwl9CisKKwltYy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAobWMtPmlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW50ZXJydXB0IG5vdCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gbWMtPmlycTsKKwl9CisKKwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIG1jLT5pcnEsIHRlZ3JhX21jX2lycSwgSVJRRl9TSEFSRUQsCisJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIG1jKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJUlEjJXU6ICVkXG4iLCBtYy0+aXJxLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl2YWx1ZSA9IE1DX0lOVF9ERUNFUlJfTVRTIHwgTUNfSU5UX1NFQ0VSUl9TRUMgfCBNQ19JTlRfREVDRVJSX1ZQUiB8CisJCU1DX0lOVF9JTlZBTElEX0FQQl9BU0lEX1VQREFURSB8IE1DX0lOVF9JTlZBTElEX1NNTVVfUEFHRSB8CisJCU1DX0lOVF9BUkJJVFJBVElPTl9FTUVNIHwgTUNfSU5UX1NFQ1VSSVRZX1ZJT0xBVElPTiB8CisJCU1DX0lOVF9ERUNFUlJfRU1FTTsKKwltY193cml0ZWwobWMsIHZhbHVlLCBNQ19JTlRNQVNLKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV9tY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGVncmEtbWMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0ZWdyYV9tY19vZl9tYXRjaCwKKwkJLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLAorCX0sCisJLnByZXZlbnRfZGVmZXJyZWRfcHJvYmUgPSB0cnVlLAorCS5wcm9iZSA9IHRlZ3JhX21jX3Byb2JlLAorfTsKKworc3RhdGljIGludCB0ZWdyYV9tY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGVncmFfbWNfZHJpdmVyKTsKK30KK2FyY2hfaW5pdGNhbGwodGVncmFfbWNfaW5pdCk7CisKK01PRFVMRV9BVVRIT1IoIlRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5WSURJQSBUZWdyYSBNZW1vcnkgQ29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL21jLmggYi9kcml2ZXJzL21lbW9yeS90ZWdyYS9tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDIxMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS9tYy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgTUVNT1JZX1RFR1JBX01DX0gKKyNkZWZpbmUgTUVNT1JZX1RFR1JBX01DX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPHNvYy90ZWdyYS9tYy5oPgorCitzdGF0aWMgaW5saW5lIHUzMiBtY19yZWFkbChzdHJ1Y3QgdGVncmFfbWMgKm1jLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwobWMtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWNfd3JpdGVsKHN0cnVjdCB0ZWdyYV9tYyAqbWMsIHUzMiB2YWx1ZSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJd3JpdGVsKHZhbHVlLCBtYy0+cmVncyArIG9mZnNldCk7Cit9CisKKyNpZmRlZiBDT05GSUdfQVJDSF9URUdSQV8zeF9TT0MKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGVncmFfbWNfc29jIHRlZ3JhMzBfbWNfc29jOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9URUdSQV8xMTRfU09DCitleHRlcm4gY29uc3Qgc3RydWN0IHRlZ3JhX21jX3NvYyB0ZWdyYTExNF9tY19zb2M7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX1RFR1JBXzEyNF9TT0MKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGVncmFfbWNfc29jIHRlZ3JhMTI0X21jX3NvYzsKKyNlbmRpZgorCisjZW5kaWYgLyogTUVNT1JZX1RFR1JBX01DX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMTE0LmMgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTExNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMWU5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTExNC5jCkBAIC0wLDAgKzEsOTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTExNC1tYy5oPgorCisjaW5jbHVkZSAibWMuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9tY19jbGllbnQgdGVncmExMTRfbWNfY2xpZW50c1tdID0geworCXsKKwkJLmlkID0gMHgwMCwKKwkJLm5hbWUgPSAicHRjciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QVEMsCisJfSwgeworCQkuaWQgPSAweDAxLAorCQkubmFtZSA9ICJkaXNwbGF5MGEiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDIsCisJCS5uYW1lID0gImRpc3BsYXkwYWIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDAzLAorCQkubmFtZSA9ICJkaXNwbGF5MGIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA0LAorCQkubmFtZSA9ICJkaXNwbGF5MGJiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDUsCisJCS5uYW1lID0gImRpc3BsYXkwYyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmVjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwNiwKKwkJLm5hbWUgPSAiZGlzcGxheTBjYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDksCisJCS5uYW1lID0gImVwcHVwIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzAwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDMzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwYSwKKwkJLm5hbWUgPSAiZzJwciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9HMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwOSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGIsCisJCS5uYW1lID0gImcyc3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDExLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwZiwKKwkJLm5hbWUgPSAiYXZwY2FybTdyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDEwLAorCQkubmFtZSA9ICJkaXNwbGF5aGMiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NjgsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDExLAorCQkubmFtZSA9ICJkaXNwbGF5aGNiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg2OCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTIsCisJCS5uYW1lID0gImZkY2RyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMzNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTMsCisJCS5uYW1lID0gImZkY2RyZDIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzM2MsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE0LAorCQkubmFtZSA9ICJnMmRyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0cyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzBjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNSwKKwkJLm5hbWUgPSAiaGRhciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IREEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDIxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE2LAorCQkubmFtZSA9ICJob3N0MXhkbWFyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzEwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNywKKwkJLm5hbWUgPSAiaG9zdDF4ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YTUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE4LAorCQkubmFtZSA9ICJpZHhzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMzQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBiLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxYywKKwkJLm5hbWUgPSAibXNlbmNzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVNFTkMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDFkLAorCQkubmFtZSA9ICJwcGNzYWhiZG1hciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZSwKKwkJLm5hbWUgPSAicHBjc2FoYnNsdnIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMzAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0NCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZTgsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDIwLAorCQkubmFtZSA9ICJ0ZXhsMnNyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzM4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBjLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMiwKKwkJLm5hbWUgPSAidmRlYnNldnIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDIzLAorCQkubmFtZSA9ICJ2ZGVtYmVyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjQsCisJCS5uYW1lID0gInZkZW1jZXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSA0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YjgsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI1LAorCQkubmFtZSA9ICJ2ZGV0cGVyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhlZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjYsCisJCS5uYW1lID0gIm1wY29yZWxwciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkVMUCwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyNywKKwkJLm5hbWUgPSAibXBjb3JlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkUsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjgsCisJCS5uYW1lID0gImVwcHUiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSA4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDMzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyOSwKKwkJLm5hbWUgPSAiZXBwdiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9FUFAsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDksCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg2YywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmEsCisJCS5uYW1lID0gImVwcHkiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzA0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg2YywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmIsCisJCS5uYW1lID0gIm1zZW5jc3dyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01TRU5DLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmMsCisJCS5uYW1lID0gInZpd3NiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzY0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQ3LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyZCwKKwkJLm5hbWUgPSAidml3dSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmUsCisJCS5uYW1lID0gInZpd3YiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyZiwKKwkJLm5hbWUgPSAidml3eSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0NywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzAsCisJCS5uYW1lID0gImcyZHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMGMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMyLAorCQkubmFtZSA9ICJhdnBjYXJtN3ciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQVZQQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMzLAorCQkubmFtZSA9ICJmZGNkd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMzgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNCwKKwkJLm5hbWUgPSAiZmRjd3IyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNSwKKwkJLm5hbWUgPSAiaGRhdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IREEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDIxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNiwKKwkJLm5hbWUgPSAiaG9zdDF4dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgyNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzcsCisJCS5uYW1lID0gImlzcHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzFjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzOCwKKwkJLm5hbWUgPSAibXBjb3JlbHB3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QQ09SRUxQLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzOSwKKwkJLm5hbWUgPSAibXBjb3JldyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkUsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNiLAorCQkubmFtZSA9ICJwcGNzYWhiZG1hdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGE1LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzYywKKwkJLm5hbWUgPSAicHBjc2FoYnNsdnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZTgsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNlLAorCQkubmFtZSA9ICJ2ZGVic2V2dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNWMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNmLAorCQkubmFtZSA9ICJ2ZGVkYmd3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMzEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1YywKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDQwLAorCQkubmFtZSA9ICJ2ZGVtYmV3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzYwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDg5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0MSwKKwkJLm5hbWUgPSAidmRldHBtdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2MCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDRhLAorCQkubmFtZSA9ICJ4dXNiX2hvc3RyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfSE9TVCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM3YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhhNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGIsCisJCS5uYW1lID0gInh1c2JfaG9zdHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfWFVTQl9IT1NULAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzdjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhhNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGMsCisJCS5uYW1lID0gInh1c2JfZGV2ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0RFViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhhNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGQsCisJCS5uYW1lID0gInh1c2JfZGV2dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0RFViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4MCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YTUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDRlLAorCQkubmFtZSA9ICJmZGNkd3IzIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4Mzg4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0ZiwKKwkJLm5hbWUgPSAiZmRjZHJkMyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTAsCisJCS5uYW1lID0gImZkY3dyNCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDUxLAorCQkubmFtZSA9ICJmZGNyZDQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDE3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzODQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBjLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1MiwKKwkJLm5hbWUgPSAiZW11Y2lmciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9FTVVDSUYsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTMsCisJCS5uYW1lID0gImVtdWNpZnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRU1VQ0lGLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzOGMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1NCwKKwkJLm5hbWUgPSAidHNlY3NyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9UU0VDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAyMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzkwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1NSwKKwkJLm5hbWUgPSAidHNlY3N3ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9UU0VDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAyMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzkwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgdGVncmExMTRfc3dncm91cHNbXSA9IHsKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywgICAgICAgIC5yZWcgPSAweDI0MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwgICAgICAgLnJlZyA9IDB4MjQ0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLCAgICAgICAucmVnID0gMHgyNDggfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9HMiwgICAgICAgIC5yZWcgPSAweDI0YyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsICAgICAgLnJlZyA9IDB4MjNjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsICAgICAgICAucmVnID0gMHgyNjggfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IREEsICAgICAgIC5yZWcgPSAweDI1NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLCAgICAgICAgLnJlZyA9IDB4MjUwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVNFTkMsICAgICAucmVnID0gMHgyNjQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLCAgICAgIC5yZWcgPSAweDI3MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwgICAgICAgLnJlZyA9IDB4MjdjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksICAgICAgICAucmVnID0gMHgyODAgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9JU1AsICAgICAgIC5yZWcgPSAweDI1OCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfSE9TVCwgLnJlZyA9IDB4Mjg4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfWFVTQl9ERVYsICAucmVnID0gMHgyOGMgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9UU0VDLCAgICAgIC5yZWcgPSAweDI5NCB9LAorfTsKKworc3RhdGljIHZvaWQgdGVncmExMTRfZmx1c2hfZGNhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgIHNpemVfdCBzaXplKQoreworCXBoeXNfYWRkcl90IHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CisJdm9pZCAqdmlydCA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKworCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYSh2aXJ0LCBzaXplKTsKKwlvdXRlcl9mbHVzaF9yYW5nZShwaHlzLCBwaHlzICsgc2l6ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9vcHMgdGVncmExMTRfc21tdV9vcHMgPSB7CisJLmZsdXNoX2RjYWNoZSA9IHRlZ3JhMTE0X2ZsdXNoX2RjYWNoZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zb2MgdGVncmExMTRfc21tdV9zb2MgPSB7CisJLmNsaWVudHMgPSB0ZWdyYTExNF9tY19jbGllbnRzLAorCS5udW1fY2xpZW50cyA9IEFSUkFZX1NJWkUodGVncmExMTRfbWNfY2xpZW50cyksCisJLnN3Z3JvdXBzID0gdGVncmExMTRfc3dncm91cHMsCisJLm51bV9zd2dyb3VwcyA9IEFSUkFZX1NJWkUodGVncmExMTRfc3dncm91cHMpLAorCS5zdXBwb3J0c19yb3VuZF9yb2Jpbl9hcmJpdHJhdGlvbiA9IGZhbHNlLAorCS5zdXBwb3J0c19yZXF1ZXN0X2xpbWl0ID0gZmFsc2UsCisJLm51bV9hc2lkcyA9IDQsCisJLm9wcyA9ICZ0ZWdyYTExNF9zbW11X29wcywKK307CisKK2NvbnN0IHN0cnVjdCB0ZWdyYV9tY19zb2MgdGVncmExMTRfbWNfc29jID0geworCS5jbGllbnRzID0gdGVncmExMTRfbWNfY2xpZW50cywKKwkubnVtX2NsaWVudHMgPSBBUlJBWV9TSVpFKHRlZ3JhMTE0X21jX2NsaWVudHMpLAorCS5udW1fYWRkcmVzc19iaXRzID0gMzIsCisJLmF0b21fc2l6ZSA9IDMyLAorCS5zbW11ID0gJnRlZ3JhMTE0X3NtbXVfc29jLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMTI0LmMgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTEyNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OGQ0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTEyNC5jCkBAIC0wLDAgKzEsOTk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTEyNC1tYy5oPgorCisjaW5jbHVkZSAibWMuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9tY19jbGllbnQgdGVncmExMjRfbWNfY2xpZW50c1tdID0geworCXsKKwkJLmlkID0gMHgwMCwKKwkJLm5hbWUgPSAicHRjciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QVEMsCisJfSwgeworCQkuaWQgPSAweDAxLAorCQkubmFtZSA9ICJkaXNwbGF5MGEiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhjMiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDIsCisJCS5uYW1lID0gImRpc3BsYXkwYWIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YzYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDAzLAorCQkubmFtZSA9ICJkaXNwbGF5MGIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA0LAorCQkubmFtZSA9ICJkaXNwbGF5MGJiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDUsCisJCS5uYW1lID0gImRpc3BsYXkwYyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmVjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwNiwKKwkJLm5hbWUgPSAiZGlzcGxheTBjYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGUsCisJCS5uYW1lID0gImFmaXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQUZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmUwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwZiwKKwkJLm5hbWUgPSAiYXZwY2FybTdyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDEwLAorCQkubmFtZSA9ICJkaXNwbGF5aGMiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDExLAorCQkubmFtZSA9ICJkaXNwbGF5aGNiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTUsCisJCS5uYW1lID0gImhkYXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzE4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDI0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNiwKKwkJLm5hbWUgPSAiaG9zdDF4ZG1hciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTcsCisJCS5uYW1lID0gImhvc3QxeHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDIzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxYywKKwkJLm5hbWUgPSAibXNlbmNzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVNFTkMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MjMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDFkLAorCQkubmFtZSA9ICJwcGNzYWhiZG1hciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQ5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZSwKKwkJLm5hbWUgPSAicHBjc2FoYnNsdnIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMzAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0NCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MWEsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDFmLAorCQkubmFtZSA9ICJzYXRhciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TQVRBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAzMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzUwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDY1LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMiwKKwkJLm5hbWUgPSAidmRlYnNldnIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDIzLAorCQkubmFtZSA9ICJ2ZGVtYmVyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgzZCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjQsCisJCS5uYW1lID0gInZkZW1jZXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSA0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NjYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI1LAorCQkubmFtZSA9ICJ2ZGV0cGVyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhhNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjYsCisJCS5uYW1lID0gIm1wY29yZWxwciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkVMUCwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyNywKKwkJLm5hbWUgPSAibXBjb3JlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkUsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmIsCisJCS5uYW1lID0gIm1zZW5jc3dyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01TRU5DLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzEsCisJCS5uYW1lID0gImFmaXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQUZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmUwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzIsCisJCS5uYW1lID0gImF2cGNhcm03dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BVlBDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmU0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzUsCisJCS5uYW1lID0gImhkYXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzE4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzYsCisJCS5uYW1lID0gImhvc3QxeHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDIyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM4LAorCQkubmFtZSA9ICJtcGNvcmVscHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFTFAsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM5LAorCQkubmFtZSA9ICJtcGNvcmV3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QQ09SRSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzIwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2IsCisJCS5uYW1lID0gInBwY3NhaGJkbWF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDI3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNjLAorCQkubmFtZSA9ICJwcGNzYWhic2x2dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2QsCisJCS5uYW1lID0gInNhdGF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NBVEEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDI5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDY1LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzZSwKKwkJLm5hbWUgPSAidmRlYnNldnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAzMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzVjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzZiwKKwkJLm5hbWUgPSAidmRlZGJndyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNWMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0MCwKKwkJLm5hbWUgPSAidmRlbWJldyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NDEsCisJCS5uYW1lID0gInZkZXRwbXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0NCwKKwkJLm5hbWUgPSAiaXNwcmEiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzcwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDE4LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0NiwKKwkJLm5hbWUgPSAiaXNwd2EiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4Mzc0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0NywKKwkJLm5hbWUgPSAiaXNwd2IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4Mzc0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGEsCisJCS5uYW1lID0gInh1c2JfaG9zdHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfWFVTQl9IT1NULAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzdjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDM5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0YiwKKwkJLm5hbWUgPSAieHVzYl9ob3N0dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0hPU1QsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDExLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzN2MsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0YywKKwkJLm5hbWUgPSAieHVzYl9kZXZyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfREVWLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzgwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDM5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0ZCwKKwkJLm5hbWUgPSAieHVzYl9kZXZ3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfREVWLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzgwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGUsCisJCS5uYW1lID0gImlzcHJhYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9JU1AyQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTQsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxOCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTAsCisJCS5uYW1lID0gImlzcHdhYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9JU1AyQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTEsCisJCS5uYW1lID0gImlzcHdiYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9JU1AyQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDU0LAorCQkubmFtZSA9ICJ0c2Vjc3JkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1RTRUMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDIwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzOTAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4OWIsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDU1LAorCQkubmFtZSA9ICJ0c2Vjc3dyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1RTRUMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDIxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzOTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1NiwKKwkJLm5hbWUgPSAiYTlhdnBzY3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQTlBVlAsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDIyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDU3LAorCQkubmFtZSA9ICJhOWF2cHNjdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BOUFWUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMjMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDNhNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDU4LAorCQkubmFtZSA9ICJncHVzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfR1BVLAorCQkuc21tdSA9IHsKKwkJCS8qIHJlYWQtb25seSAqLworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDI0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYzgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MWEsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDU5LAorCQkubmFtZSA9ICJncHVzd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfR1BVLAorCQkuc21tdSA9IHsKKwkJCS8qIHJlYWQtb25seSAqLworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDI1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYzgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1YSwKKwkJLm5hbWUgPSAiZGlzcGxheXQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDI2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2MCwKKwkJLm5hbWUgPSAic2RtbWNyYSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzFBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSAwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NDksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDYxLAorCQkubmFtZSA9ICJzZG1tY3JhYSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzJBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYmMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NDksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDYyLAorCQkubmFtZSA9ICJzZG1tY3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMzQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2MwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQ5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2MywKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NETU1DNEEsCisJCS5uYW1lID0gInNkbW1jcmFiIiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2M0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQ5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2NCwKKwkJLm5hbWUgPSAic2RtbWN3YSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzFBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSA0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYjgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2NSwKKwkJLm5hbWUgPSAic2RtbWN3YWEiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMyQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2JjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NjYsCisJCS5uYW1lID0gInNkbW1jdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzNBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSA2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYzAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2NywKKwkJLm5hbWUgPSAic2RtbWN3YWIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUM0QSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2M0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NmMsCisJCS5uYW1lID0gInZpY3NyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSUMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjM0LAorCQkJLmJpdCA9IDEyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzOTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MWEsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDZkLAorCQkubmFtZSA9ICJ2aWNzd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVklDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSAxMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4Mzk0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NzIsCisJCS5uYW1lID0gInZpdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gMTgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM5OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NzMsCisJCS5uYW1lID0gImRpc3BsYXlkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSAxOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2M4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc3dncm91cCB0ZWdyYTEyNF9zd2dyb3Vwc1tdID0geworCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLCAgICAgICAgLnJlZyA9IDB4MjQwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLCAgICAgICAucmVnID0gMHgyNDQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BRkksICAgICAgIC5yZWcgPSAweDIzOCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsICAgICAgLnJlZyA9IDB4MjNjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLCAgICAgICAucmVnID0gMHgyNTQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywgICAgICAgIC5yZWcgPSAweDI1MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01TRU5DLCAgICAgLnJlZyA9IDB4MjY0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywgICAgICAucmVnID0gMHgyNzAgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TQVRBLCAgICAgIC5yZWcgPSAweDI3NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwgICAgICAgLnJlZyA9IDB4MjdjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMiwgICAgICAucmVnID0gMHgyNTggfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0hPU1QsIC5yZWcgPSAweDI4OCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfREVWLCAgLnJlZyA9IDB4MjhjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMkIsICAgICAucmVnID0gMHhhYTQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9UU0VDLCAgICAgIC5yZWcgPSAweDI5NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0E5QVZQLCAgICAgLnJlZyA9IDB4MjkwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfR1BVLCAgICAgICAucmVnID0gMHhhYWMgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzFBLCAgIC5yZWcgPSAweGE5NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NETU1DMkEsICAgLnJlZyA9IDB4YTk4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMzQSwgICAucmVnID0gMHhhOWMgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzRBLCAgIC5yZWcgPSAweGFhMCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJQywgICAgICAgLnJlZyA9IDB4Mjg0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksICAgICAgICAucmVnID0gMHgyODAgfSwKK307CisKKyNpZmRlZiBDT05GSUdfQVJDSF9URUdSQV8xMjRfU09DCitzdGF0aWMgdm9pZCB0ZWdyYTEyNF9mbHVzaF9kY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSAgc2l6ZV90IHNpemUpCit7CisJcGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKKwl2b2lkICp2aXJ0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0OworCisJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKHZpcnQsIHNpemUpOworCW91dGVyX2ZsdXNoX3JhbmdlKHBoeXMsIHBoeXMgKyBzaXplKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X29wcyB0ZWdyYTEyNF9zbW11X29wcyA9IHsKKwkuZmx1c2hfZGNhY2hlID0gdGVncmExMjRfZmx1c2hfZGNhY2hlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3NvYyB0ZWdyYTEyNF9zbW11X3NvYyA9IHsKKwkuY2xpZW50cyA9IHRlZ3JhMTI0X21jX2NsaWVudHMsCisJLm51bV9jbGllbnRzID0gQVJSQVlfU0laRSh0ZWdyYTEyNF9tY19jbGllbnRzKSwKKwkuc3dncm91cHMgPSB0ZWdyYTEyNF9zd2dyb3VwcywKKwkubnVtX3N3Z3JvdXBzID0gQVJSQVlfU0laRSh0ZWdyYTEyNF9zd2dyb3VwcyksCisJLnN1cHBvcnRzX3JvdW5kX3JvYmluX2FyYml0cmF0aW9uID0gdHJ1ZSwKKwkuc3VwcG9ydHNfcmVxdWVzdF9saW1pdCA9IHRydWUsCisJLm51bV9hc2lkcyA9IDEyOCwKKwkub3BzID0gJnRlZ3JhMTI0X3NtbXVfb3BzLAorfTsKKworY29uc3Qgc3RydWN0IHRlZ3JhX21jX3NvYyB0ZWdyYTEyNF9tY19zb2MgPSB7CisJLmNsaWVudHMgPSB0ZWdyYTEyNF9tY19jbGllbnRzLAorCS5udW1fY2xpZW50cyA9IEFSUkFZX1NJWkUodGVncmExMjRfbWNfY2xpZW50cyksCisJLm51bV9hZGRyZXNzX2JpdHMgPSAzNCwKKwkuYXRvbV9zaXplID0gMzIsCisJLnNtbXUgPSAmdGVncmExMjRfc21tdV9zb2MsCit9OworI2VuZGlmIC8qIENPTkZJR19BUkNIX1RFR1JBXzEyNF9TT0MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMzAuYyBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWZlOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmEzMC5jCkBAIC0wLDAgKzEsOTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTMwLW1jLmg+CisKKyNpbmNsdWRlICJtYy5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX21jX2NsaWVudCB0ZWdyYTMwX21jX2NsaWVudHNbXSA9IHsKKwl7CisJCS5pZCA9IDB4MDAsCisJCS5uYW1lID0gInB0Y3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFRDLAorCX0sIHsKKwkJLmlkID0gMHgwMSwKKwkJLm5hbWUgPSAiZGlzcGxheTBhIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDAyLAorCQkubmFtZSA9ICJkaXNwbGF5MGFiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwMywKKwkJLm5hbWUgPSAiZGlzcGxheTBiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwNCwKKwkJLm5hbWUgPSAiZGlzcGxheTBiYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDQsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA1LAorCQkubmFtZSA9ICJkaXNwbGF5MGMiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDYsCisJCS5uYW1lID0gImRpc3BsYXkwY2IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSA2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA3LAorCQkubmFtZSA9ICJkaXNwbGF5MWIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlYywKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA4LAorCQkubmFtZSA9ICJkaXNwbGF5MWJiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDksCisJCS5uYW1lID0gImVwcHVwIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzAwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDE3LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwYSwKKwkJLm5hbWUgPSAiZzJwciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9HMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwOSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGIsCisJCS5uYW1lID0gImcyc3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDExLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwYywKKwkJLm5hbWUgPSAibXBldW5pZmJyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QRSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGQsCisJCS5uYW1lID0gInZpcnV2IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzY0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDJjLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwZSwKKwkJLm5hbWUgPSAiYWZpciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BRkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDBmLAorCQkubmFtZSA9ICJhdnBjYXJtN3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQVZQQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTAsCisJCS5uYW1lID0gImRpc3BsYXloYyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTEsCisJCS5uYW1lID0gImRpc3BsYXloY2IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmZjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxMiwKKwkJLm5hbWUgPSAiZmRjZHJkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzM0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxMywKKwkJLm5hbWUgPSAiZmRjZHJkMiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OVjIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzM2MsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGEsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE0LAorCQkubmFtZSA9ICJnMmRyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0cyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzBjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNSwKKwkJLm5hbWUgPSAiaGRhciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IREEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDIxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE2LAorCQkubmFtZSA9ICJob3N0MXhkbWFyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzEwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA1LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNywKKwkJLm5hbWUgPSAiaG9zdDF4ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE4LAorCQkubmFtZSA9ICJpZHhzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMzQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxOSwKKwkJLm5hbWUgPSAiaWR4c3JkMiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OVjIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzM2MsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxYSwKKwkJLm5hbWUgPSAibXBlX2lwcmVkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QRSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDFiLAorCQkubmFtZSA9ICJtcGVhbWVtcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzJjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQyLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxYywKKwkJLm5hbWUgPSAibXBlY3NyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUEUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMmMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZCwKKwkJLm5hbWUgPSAicHBjc2FoYmRtYXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjksCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MWUsCisJCS5uYW1lID0gInBwY3NhaGJzbHZyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDMwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEyLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZiwKKwkJLm5hbWUgPSAic2F0YXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0FUQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMzEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgzMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjAsCisJCS5uYW1lID0gInRleHNyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzM4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMSwKKwkJLm5hbWUgPSAidGV4c3JkMiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OVjIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjIsCisJCS5uYW1lID0gInZkZWJzZXZyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMywKKwkJLm5hbWUgPSAidmRlbWJlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1NCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZDAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI0LAorCQkubmFtZSA9ICJ2ZGVtY2VyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDJhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyNSwKKwkJLm5hbWUgPSAidmRldHBlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NzQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI2LAorCQkubmFtZSA9ICJtcGNvcmVscHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFTFAsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjcsCisJCS5uYW1lID0gIm1wY29yZXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI4LAorCQkubmFtZSA9ICJlcHB1IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzAwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg2YywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjksCisJCS5uYW1lID0gImVwcHYiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSA5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NmMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDJhLAorCQkubmFtZSA9ICJlcHB5IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NmMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDJiLAorCQkubmFtZSA9ICJtcGV1bmlmYnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzMwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyYywKKwkJLm5hbWUgPSAidml3c2IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDEyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEyLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyZCwKKwkJLm5hbWUgPSAidml3dSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhiMiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmUsCisJCS5uYW1lID0gInZpd3YiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGIyLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyZiwKKwkJLm5hbWUgPSAidml3eSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzAsCisJCS5uYW1lID0gImcyZHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMGMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMxLAorCQkubmFtZSA9ICJhZml3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FGSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMyLAorCQkubmFtZSA9ICJhdnBjYXJtN3ciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQVZQQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMzLAorCQkubmFtZSA9ICJmZGNkd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMzgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNCwKKwkJLm5hbWUgPSAiZmRjd3IyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0MCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGEsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM1LAorCQkubmFtZSA9ICJoZGF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hEQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM2LAorCQkubmFtZSA9ICJob3N0MXh3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzE0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNywKKwkJLm5hbWUgPSAiaXNwdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9JU1AsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDIzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMWMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM4LAorCQkubmFtZSA9ICJtcGNvcmVscHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFTFAsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM5LAorCQkubmFtZSA9ICJtcGNvcmV3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QQ09SRSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzIwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2EsCisJCS5uYW1lID0gIm1wZWNzd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzMwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2IsCisJCS5uYW1lID0gInBwY3NhaGJkbWF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDI3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNjLAorCQkubmFtZSA9ICJwcGNzYWhic2x2dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2QsCisJCS5uYW1lID0gInNhdGF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NBVEEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDI5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDMzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzZSwKKwkJLm5hbWUgPSAidmRlYnNldnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAzMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzVjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzZiwKKwkJLm5hbWUgPSAidmRlZGJndyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNWMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0MCwKKwkJLm5hbWUgPSAidmRlbWJldyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0MiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NDEsCisJCS5uYW1lID0gInZkZXRwbXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDJhLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc3dncm91cCB0ZWdyYTMwX3N3Z3JvdXBzW10gPSB7CisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsICAgLnJlZyA9IDB4MjQwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLCAgLnJlZyA9IDB4MjQ0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLCAgLnJlZyA9IDB4MjQ4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsICAgLnJlZyA9IDB4MjRjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBFLCAgLnJlZyA9IDB4MjY0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksICAgLnJlZyA9IDB4MjgwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQUZJLCAgLnJlZyA9IDB4MjM4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQVZQQywgLnJlZyA9IDB4MjNjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsICAgLnJlZyA9IDB4MjY4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYyLCAgLnJlZyA9IDB4MjZjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLCAgLnJlZyA9IDB4MjU0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsICAgLnJlZyA9IDB4MjUwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywgLnJlZyA9IDB4MjcwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0FUQSwgLnJlZyA9IDB4Mjc4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLCAgLnJlZyA9IDB4MjdjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQLCAgLnJlZyA9IDB4MjU4IH0sCit9OworCitzdGF0aWMgdm9pZCB0ZWdyYTMwX2ZsdXNoX2RjYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJIHNpemVfdCBzaXplKQoreworCXBoeXNfYWRkcl90IHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CisJdm9pZCAqdmlydCA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKworCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYSh2aXJ0LCBzaXplKTsKKwlvdXRlcl9mbHVzaF9yYW5nZShwaHlzLCBwaHlzICsgc2l6ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9vcHMgdGVncmEzMF9zbW11X29wcyA9IHsKKwkuZmx1c2hfZGNhY2hlID0gdGVncmEzMF9mbHVzaF9kY2FjaGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc29jIHRlZ3JhMzBfc21tdV9zb2MgPSB7CisJLmNsaWVudHMgPSB0ZWdyYTMwX21jX2NsaWVudHMsCisJLm51bV9jbGllbnRzID0gQVJSQVlfU0laRSh0ZWdyYTMwX21jX2NsaWVudHMpLAorCS5zd2dyb3VwcyA9IHRlZ3JhMzBfc3dncm91cHMsCisJLm51bV9zd2dyb3VwcyA9IEFSUkFZX1NJWkUodGVncmEzMF9zd2dyb3VwcyksCisJLnN1cHBvcnRzX3JvdW5kX3JvYmluX2FyYml0cmF0aW9uID0gZmFsc2UsCisJLnN1cHBvcnRzX3JlcXVlc3RfbGltaXQgPSBmYWxzZSwKKwkubnVtX2FzaWRzID0gNCwKKwkub3BzID0gJnRlZ3JhMzBfc21tdV9vcHMsCit9OworCitjb25zdCBzdHJ1Y3QgdGVncmFfbWNfc29jIHRlZ3JhMzBfbWNfc29jID0geworCS5jbGllbnRzID0gdGVncmEzMF9tY19jbGllbnRzLAorCS5udW1fY2xpZW50cyA9IEFSUkFZX1NJWkUodGVncmEzMF9tY19jbGllbnRzKSwKKwkubnVtX2FkZHJlc3NfYml0cyA9IDMyLAorCS5hdG9tX3NpemUgPSAxNiwKKwkuc21tdSA9ICZ0ZWdyYTMwX3NtbXVfc29jLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhMzAtbWMuYyBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhMzAtbWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY3OTM0NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lbW9yeS90ZWdyYTMwLW1jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotLyoKLSAqIFRlZ3JhMzAgTWVtb3J5IENvbnRyb2xsZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2RlZmluZSBEUlZfTkFNRSAidGVncmEzMC1tYyIKLQotI2RlZmluZSBNQ19JTlRTVEFUVVMJCQkweDAKLSNkZWZpbmUgTUNfSU5UTUFTSwkJCTB4NAotCi0jZGVmaW5lIE1DX0lOVF9FUlJfU0hJRlQJCTYKLSNkZWZpbmUgTUNfSU5UX0VSUl9NQVNLCQkJKDB4MWYgPDwgTUNfSU5UX0VSUl9TSElGVCkKLSNkZWZpbmUgTUNfSU5UX0RFQ0VSUl9FTUVNCQlCSVQoTUNfSU5UX0VSUl9TSElGVCkKLSNkZWZpbmUgTUNfSU5UX1NFQ1VSSVRZX1ZJT0xBVElPTglCSVQoTUNfSU5UX0VSUl9TSElGVCArIDIpCi0jZGVmaW5lIE1DX0lOVF9BUkJJVFJBVElPTl9FTUVNCQlCSVQoTUNfSU5UX0VSUl9TSElGVCArIDMpCi0jZGVmaW5lIE1DX0lOVF9JTlZBTElEX1NNTVVfUEFHRQlCSVQoTUNfSU5UX0VSUl9TSElGVCArIDQpCi0KLSNkZWZpbmUgTUNfRVJSX1NUQVRVUwkJCTB4OAotI2RlZmluZSBNQ19FUlJfQURSCQkJMHhjCi0KLSNkZWZpbmUgTUNfRVJSX1RZUEVfU0hJRlQJCTI4Ci0jZGVmaW5lIE1DX0VSUl9UWVBFX01BU0sJCSg3IDw8IE1DX0VSUl9UWVBFX1NISUZUKQotI2RlZmluZSBNQ19FUlJfVFlQRV9ERUNFUlJfRU1FTQkJMgotI2RlZmluZSBNQ19FUlJfVFlQRV9TRUNVUklUWV9UUlVTVFpPTkUJMwotI2RlZmluZSBNQ19FUlJfVFlQRV9TRUNVUklUWV9DQVJWRU9VVAk0Ci0jZGVmaW5lIE1DX0VSUl9UWVBFX0lOVkFMSURfU01NVV9QQUdFCTYKLQotI2RlZmluZSBNQ19FUlJfSU5WQUxJRF9TTU1VX1BBR0VfU0hJRlQJMjUKLSNkZWZpbmUgTUNfRVJSX0lOVkFMSURfU01NVV9QQUdFX01BU0sJKDcgPDwgTUNfRVJSX0lOVkFMSURfU01NVV9QQUdFX1NISUZUKQotI2RlZmluZSBNQ19FUlJfUldfU0hJRlQJCQkxNgotI2RlZmluZSBNQ19FUlJfUlcJCQlCSVQoTUNfRVJSX1JXX1NISUZUKQotI2RlZmluZSBNQ19FUlJfU0VDVVJJVFkJCQlCSVQoTUNfRVJSX1JXX1NISUZUICsgMSkKLQotI2RlZmluZSBTRUNVUklUWV9WSU9MQVRJT05fVFlQRQkJQklUKDMwKQkvKiAwPVRSVVNUWk9ORSwgMT1DQVJWRU9VVCAqLwotCi0jZGVmaW5lIE1DX0VNRU1fQVJCX0NGRwkJCTB4OTAKLSNkZWZpbmUgTUNfRU1FTV9BUkJfT1VUU1RBTkRJTkdfUkVRCTB4OTQKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1JDRAkJMHg5OAotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfUlAJCTB4OWMKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1JDCQkweGEwCi0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19SQVMJCTB4YTQKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX0ZBVwkJMHhhOAotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfUlJECQkweGFjCi0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19SQVAyUFJFCTB4YjAKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1dBUDJQUkUJMHhiNAotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfUjJSCQkweGI4Ci0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19XMlcJCTB4YmMKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1IyVwkJMHhjMAotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfVzJSCQkweGM0Ci0KLSNkZWZpbmUgTUNfRU1FTV9BUkJfREFfVFVSTlMJCTB4ZDAKLSNkZWZpbmUgTUNfRU1FTV9BUkJfREFfQ09WRVJTCQkweGQ0Ci0jZGVmaW5lIE1DX0VNRU1fQVJCX01JU0MwCQkweGQ4Ci0jZGVmaW5lIE1DX0VNRU1fQVJCX01JU0MxCQkweGRjCi0KLSNkZWZpbmUgTUNfRU1FTV9BUkJfUklORzNfVEhST1RUTEUJMHhlNAotI2RlZmluZSBNQ19FTUVNX0FSQl9PVkVSUklERQkJMHhlOAotCi0jZGVmaW5lIE1DX1RJTUlOR19DT05UUk9MCQkweGZjCi0KLSNkZWZpbmUgTUNfQ0xJRU5UX0lEX01BU0sJCTB4N2YKLQotI2RlZmluZSBOVU1fTUNfUkVHX0JBTktTCQk0Ci0KLXN0cnVjdCB0ZWdyYTMwX21jIHsKLQl2b2lkIF9faW9tZW0gKnJlZ3NbTlVNX01DX1JFR19CQU5LU107Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXUzMiBjdHhbMF07Ci19OwotCi1zdGF0aWMgaW5saW5lIHUzMiBtY19yZWFkbChzdHJ1Y3QgdGVncmEzMF9tYyAqbWMsIHUzMiBvZmZzKQotewotCXUzMiB2YWwgPSAwOwotCi0JaWYgKG9mZnMgPCAweDEwKQotCQl2YWwgPSByZWFkbChtYy0+cmVnc1swXSArIG9mZnMpOwotCWVsc2UgaWYgKG9mZnMgPCAweDFmMCkKLQkJdmFsID0gcmVhZGwobWMtPnJlZ3NbMV0gKyBvZmZzIC0gMHgzYyk7Ci0JZWxzZSBpZiAob2ZmcyA8IDB4MjI4KQotCQl2YWwgPSByZWFkbChtYy0+cmVnc1syXSArIG9mZnMgLSAweDIwMCk7Ci0JZWxzZSBpZiAob2ZmcyA8IDB4NDAwKQotCQl2YWwgPSByZWFkbChtYy0+cmVnc1szXSArIG9mZnMgLSAweDI4NCk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWNfd3JpdGVsKHN0cnVjdCB0ZWdyYTMwX21jICptYywgdTMyIHZhbCwgdTMyIG9mZnMpCi17Ci0JaWYgKG9mZnMgPCAweDEwKQotCQl3cml0ZWwodmFsLCBtYy0+cmVnc1swXSArIG9mZnMpOwotCWVsc2UgaWYgKG9mZnMgPCAweDFmMCkKLQkJd3JpdGVsKHZhbCwgbWMtPnJlZ3NbMV0gKyBvZmZzIC0gMHgzYyk7Ci0JZWxzZSBpZiAob2ZmcyA8IDB4MjI4KQotCQl3cml0ZWwodmFsLCBtYy0+cmVnc1syXSArIG9mZnMgLSAweDIwMCk7Ci0JZWxzZSBpZiAob2ZmcyA8IDB4NDAwKQotCQl3cml0ZWwodmFsLCBtYy0+cmVnc1szXSArIG9mZnMgLSAweDI4NCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVncmEzMF9tY19jbGllbnRbXSA9IHsKLQkiY3NyX3B0Y3IiLAotCSJjYnJfZGlzcGxheTBhIiwKLQkiY2JyX2Rpc3BsYXkwYWIiLAotCSJjYnJfZGlzcGxheTBiIiwKLQkiY2JyX2Rpc3BsYXkwYmIiLAotCSJjYnJfZGlzcGxheTBjIiwKLQkiY2JyX2Rpc3BsYXkwY2IiLAotCSJjYnJfZGlzcGxheTFiIiwKLQkiY2JyX2Rpc3BsYXkxYmIiLAotCSJjYnJfZXBwdXAiLAotCSJjYnJfZzJwciIsCi0JImNicl9nMnNyIiwKLQkiY2JyX21wZXVuaWZiciIsCi0JImNicl92aXJ1diIsCi0JImNzcl9hZmlyIiwKLQkiY3NyX2F2cGNhcm03ciIsCi0JImNzcl9kaXNwbGF5aGMiLAotCSJjc3JfZGlzcGxheWhjYiIsCi0JImNzcl9mZGNkcmQiLAotCSJjc3JfZmRjZHJkMiIsCi0JImNzcl9nMmRyIiwKLQkiY3NyX2hkYXIiLAotCSJjc3JfaG9zdDF4ZG1hciIsCi0JImNzcl9ob3N0MXhyIiwKLQkiY3NyX2lkeHNyZCIsCi0JImNzcl9pZHhzcmQyIiwKLQkiY3NyX21wZV9pcHJlZCIsCi0JImNzcl9tcGVhbWVtcmQiLAotCSJjc3JfbXBlY3NyZCIsCi0JImNzcl9wcGNzYWhiZG1hciIsCi0JImNzcl9wcGNzYWhic2x2ciIsCi0JImNzcl9zYXRhciIsCi0JImNzcl90ZXhzcmQiLAotCSJjc3JfdGV4c3JkMiIsCi0JImNzcl92ZGVic2V2ciIsCi0JImNzcl92ZGVtYmVyIiwKLQkiY3NyX3ZkZW1jZXIiLAotCSJjc3JfdmRldHBlciIsCi0JImNzcl9tcGNvcmVscHIiLAotCSJjc3JfbXBjb3JlciIsCi0JImNid19lcHB1IiwKLQkiY2J3X2VwcHYiLAotCSJjYndfZXBweSIsCi0JImNid19tcGV1bmlmYnciLAotCSJjYndfdml3c2IiLAotCSJjYndfdml3dSIsCi0JImNid192aXd2IiwKLQkiY2J3X3Zpd3kiLAotCSJjY3dfZzJkdyIsCi0JImNzd19hZml3IiwKLQkiY3N3X2F2cGNhcm03dyIsCi0JImNzd19mZGNkd3IiLAotCSJjc3dfZmRjZHdyMiIsCi0JImNzd19oZGF3IiwKLQkiY3N3X2hvc3QxeHciLAotCSJjc3dfaXNwdyIsCi0JImNzd19tcGNvcmVscHciLAotCSJjc3dfbXBjb3JldyIsCi0JImNzd19tcGVjc3dyIiwKLQkiY3N3X3BwY3NhaGJkbWF3IiwKLQkiY3N3X3BwY3NhaGJzbHZ3IiwKLQkiY3N3X3NhdGF3IiwKLQkiY3N3X3ZkZWJzZXZ3IiwKLQkiY3N3X3ZkZWRiZ3ciLAotCSJjc3dfdmRlbWJldyIsCi0JImNzd192ZGV0cG13IiwKLX07Ci0KLXN0YXRpYyB2b2lkIHRlZ3JhMzBfbWNfZGVjb2RlKHN0cnVjdCB0ZWdyYTMwX21jICptYywgaW50IG4pCi17Ci0JdTMyIGVyciwgYWRkcjsKLQljb25zdCBjaGFyICogY29uc3QgbWNfaW50X2VycltdID0gewotCQkiTUNfREVDRVJSIiwKLQkJIlVua25vd24iLAotCQkiTUNfU0VDVVJJVFlfRVJSIiwKLQkJIk1DX0FSQklUUkFUSU9OX0VNRU0iLAotCQkiTUNfU01NVV9FUlIiLAotCX07Ci0JY29uc3QgY2hhciAqIGNvbnN0IGVycl90eXBlW10gPSB7Ci0JCSJVbmtub3duIiwKLQkJIlVua25vd24iLAotCQkiREVDRVJSX0VNRU0iLAotCQkiU0VDVVJJVFlfVFJVU1RaT05FIiwKLQkJIlNFQ1VSSVRZX0NBUlZFT1VUIiwKLQkJIlVua25vd24iLAotCQkiSU5WQUxJRF9TTU1VX1BBR0UiLAotCQkiVW5rbm93biIsCi0JfTsKLQljaGFyIGF0dHJbNl07Ci0JaW50IGNpZCwgcGVybSwgdHlwZSwgaWR4OwotCWNvbnN0IGNoYXIgKmNsaWVudCA9ICJVbmtub3duIjsKLQotCWlkeCA9IG4gLSBNQ19JTlRfRVJSX1NISUZUOwotCWlmICgoaWR4IDwgMCkgfHwgKGlkeCA+PSBBUlJBWV9TSVpFKG1jX2ludF9lcnIpKSB8fCAoaWR4ID09IDEpKSB7Ci0JCWRldl9lcnJfcmF0ZWxpbWl0ZWQobWMtPmRldiwgIlVua25vd24gaW50ZXJydXB0IHN0YXR1cyAlMDhseFxuIiwKLQkJCQkgICAgQklUKG4pKTsKLQkJcmV0dXJuOwotCX0KLQotCWVyciA9IG1jX3JlYWRsKG1jLCBNQ19FUlJfU1RBVFVTKTsKLQotCXR5cGUgPSAoZXJyICYgTUNfRVJSX1RZUEVfTUFTSykgPj4gTUNfRVJSX1RZUEVfU0hJRlQ7Ci0JcGVybSA9IChlcnIgJiBNQ19FUlJfSU5WQUxJRF9TTU1VX1BBR0VfTUFTSykgPj4KLQkJTUNfRVJSX0lOVkFMSURfU01NVV9QQUdFX1NISUZUOwotCWlmICh0eXBlID09IE1DX0VSUl9UWVBFX0lOVkFMSURfU01NVV9QQUdFKQotCQlzcHJpbnRmKGF0dHIsICIlYy0lYy0lYyIsCi0JCQkocGVybSAmIEJJVCgyKSkgPyAnUicgOiAnLScsCi0JCQkocGVybSAmIEJJVCgxKSkgPyAnVycgOiAnLScsCi0JCQkocGVybSAmIEJJVCgwKSkgPyAnUycgOiAnLScpOwotCWVsc2UKLQkJYXR0clswXSA9ICdcMCc7Ci0KLQljaWQgPSBlcnIgJiBNQ19DTElFTlRfSURfTUFTSzsKLQlpZiAoY2lkIDwgQVJSQVlfU0laRSh0ZWdyYTMwX21jX2NsaWVudCkpCi0JCWNsaWVudCA9IHRlZ3JhMzBfbWNfY2xpZW50W2NpZF07Ci0KLQlhZGRyID0gbWNfcmVhZGwobWMsIE1DX0VSUl9BRFIpOwotCi0JZGV2X2Vycl9yYXRlbGltaXRlZChtYy0+ZGV2LCAiJXMgKDB4JTA4eCk6IDB4JTA4eCAlcyAoJXMgJXMgJXMgJXMpXG4iLAotCQkJICAgbWNfaW50X2VycltpZHhdLCBlcnIsIGFkZHIsIGNsaWVudCwKLQkJCSAgIChlcnIgJiBNQ19FUlJfU0VDVVJJVFkpID8gInNlY3VyZSIgOiAibm9uLXNlY3VyZSIsCi0JCQkgICAoZXJyICYgTUNfRVJSX1JXKSA/ICJ3cml0ZSIgOiAicmVhZCIsCi0JCQkgICBlcnJfdHlwZVt0eXBlXSwgYXR0cik7Ci19Ci0KLXN0YXRpYyBjb25zdCB1MzIgdGVncmEzMF9tY19jdHhbXSA9IHsKLQlNQ19FTUVNX0FSQl9DRkcsCi0JTUNfRU1FTV9BUkJfT1VUU1RBTkRJTkdfUkVRLAotCU1DX0VNRU1fQVJCX1RJTUlOR19SQ0QsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1JQLAotCU1DX0VNRU1fQVJCX1RJTUlOR19SQywKLQlNQ19FTUVNX0FSQl9USU1JTkdfUkFTLAotCU1DX0VNRU1fQVJCX1RJTUlOR19GQVcsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1JSRCwKLQlNQ19FTUVNX0FSQl9USU1JTkdfUkFQMlBSRSwKLQlNQ19FTUVNX0FSQl9USU1JTkdfV0FQMlBSRSwKLQlNQ19FTUVNX0FSQl9USU1JTkdfUjJSLAotCU1DX0VNRU1fQVJCX1RJTUlOR19XMlcsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1IyVywKLQlNQ19FTUVNX0FSQl9USU1JTkdfVzJSLAotCU1DX0VNRU1fQVJCX0RBX1RVUk5TLAotCU1DX0VNRU1fQVJCX0RBX0NPVkVSUywKLQlNQ19FTUVNX0FSQl9NSVNDMCwKLQlNQ19FTUVNX0FSQl9NSVNDMSwKLQlNQ19FTUVNX0FSQl9SSU5HM19USFJPVFRMRSwKLQlNQ19FTUVNX0FSQl9PVkVSUklERSwKLQlNQ19JTlRNQVNLLAotfTsKLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCB0ZWdyYTMwX21jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBpOwotCXN0cnVjdCB0ZWdyYTMwX21jICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVncmEzMF9tY19jdHgpOyBpKyspCi0JCW1jLT5jdHhbaV0gPSBtY19yZWFkbChtYywgdGVncmEzMF9tY19jdHhbaV0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRlZ3JhMzBfbWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgdGVncmEzMF9tYyAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhMzBfbWNfY3R4KTsgaSsrKQotCQltY193cml0ZWwobWMsIG1jLT5jdHhbaV0sIHRlZ3JhMzBfbWNfY3R4W2ldKTsKLQotCW1jX3dyaXRlbChtYywgMSwgTUNfVElNSU5HX0NPTlRST0wpOwotCS8qIFJlYWQtYmFjayB0byBlbnN1cmUgdGhhdCB3cml0ZSByZWFjaGVkICovCi0JbWNfcmVhZGwobWMsIE1DX1RJTUlOR19DT05UUk9MKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgVU5JVkVSU0FMX0RFVl9QTV9PUFModGVncmEzMF9tY19wbSwKLQkJCSAgICB0ZWdyYTMwX21jX3N1c3BlbmQsCi0JCQkgICAgdGVncmEzMF9tY19yZXN1bWUsIE5VTEwpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0ZWdyYTMwX21jX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEzMC1tYyIsIH0sCi0Je30sCi19OwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgdGVncmEzMF9tY19pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQl1MzIgc3RhdCwgbWFzaywgYml0OwotCXN0cnVjdCB0ZWdyYTMwX21jICptYyA9IGRhdGE7Ci0KLQlzdGF0ID0gbWNfcmVhZGwobWMsIE1DX0lOVFNUQVRVUyk7Ci0JbWFzayA9IG1jX3JlYWRsKG1jLCBNQ19JTlRNQVNLKTsKLQltYXNrICY9IHN0YXQ7Ci0JaWYgKCFtYXNrKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0Jd2hpbGUgKChiaXQgPSBmZnMobWFzaykpICE9IDApIHsKLQkJdGVncmEzMF9tY19kZWNvZGUobWMsIGJpdCAtIDEpOwotCQltYXNrICY9IH5CSVQoYml0IC0gMSk7Ci0JfQotCi0JbWNfd3JpdGVsKG1jLCBzdGF0LCBNQ19JTlRTVEFUVVMpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCB0ZWdyYTMwX21jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHJlc291cmNlICppcnE7Ci0Jc3RydWN0IHRlZ3JhMzBfbWMgKm1jOwotCXNpemVfdCBieXRlczsKLQlpbnQgZXJyLCBpOwotCXUzMiBpbnRtYXNrOwotCi0JYnl0ZXMgPSBzaXplb2YoKm1jKSArIHNpemVvZih1MzIpICogQVJSQVlfU0laRSh0ZWdyYTMwX21jX2N0eCk7Ci0JbWMgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgYnl0ZXMsIEdGUF9LRVJORUwpOwotCWlmICghbWMpCi0JCXJldHVybiAtRU5PTUVNOwotCW1jLT5kZXYgPSAmcGRldi0+ZGV2OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWMtPnJlZ3MpOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKLQkJbWMtPnJlZ3NbaV0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKLQkJaWYgKElTX0VSUihtYy0+cmVnc1tpXSkpCi0JCQlyZXR1cm4gUFRSX0VSUihtYy0+cmVnc1tpXSk7Ci0JfQotCi0JaXJxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKLQlpZiAoIWlycSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEtPnN0YXJ0LCB0ZWdyYTMwX21jX2lzciwKLQkJCSAgICAgICBJUlFGX1NIQVJFRCwgZGV2X25hbWUoJnBkZXYtPmRldiksIG1jKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTsKLQotCWludG1hc2sgPSBNQ19JTlRfSU5WQUxJRF9TTU1VX1BBR0UgfAotCQlNQ19JTlRfREVDRVJSX0VNRU0gfCBNQ19JTlRfU0VDVVJJVFlfVklPTEFUSU9OOwotCW1jX3dyaXRlbChtYywgaW50bWFzaywgTUNfSU5UTUFTSyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRlZ3JhMzBfbWNfZHJpdmVyID0gewotCS5wcm9iZSA9IHRlZ3JhMzBfbWNfcHJvYmUsCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSBEUlZfTkFNRSwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5vZl9tYXRjaF90YWJsZSA9IHRlZ3JhMzBfbWNfb2ZfbWF0Y2gsCi0JCS5wbSA9ICZ0ZWdyYTMwX21jX3BtLAotCX0sCi19OwotbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih0ZWdyYTMwX21jX2RyaXZlcik7Ci0KLU1PRFVMRV9BVVRIT1IoIkhpcm9zaGkgRE9ZVSA8aGRveXVAbnZpZGlhLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiVGVncmEzMCBNQyBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCAwNzA3ZmEyLi41YmRhYWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKQEAgLTE5OTQsNiArMTk5NCw3IEBACiAJLmNtZF9wZXJfbHVuCQkJPSA3LAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQkJPSBtcHRzY3NpaF9ob3N0X2F0dHJzLAorCS51c2VfYmxrX3RhZ3MJCQk9IDEsCiB9OwogCiBzdGF0aWMgaW50IG1wdHNhc19nZXRfbGlua2Vycm9ycyhzdHJ1Y3Qgc2FzX3BoeSAqcGh5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IGU3ZGNiMjUuLjZjOWZjMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTIzMTEsMjYgKzIzMTEsMjEgQEAKICAqCW1wdHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYSBkZXZpY2VzIHF1ZXVlIGRlcHRoCiAgKglAc2RldjogcGVyIHNjc2lfZGV2aWNlIHBvaW50ZXIKICAqCUBxZGVwdGg6IHJlcXVlc3RlZCBxdWV1ZSBkZXB0aAotICoJQHJlYXNvbjogY2FsbGluZyBjb250ZXh0CiAgKgogICoJQWRkaW5nIHN1cHBvcnQgZm9yIG5ldyAnY2hhbmdlX3F1ZXVlX2RlcHRoJyBhcGkuCiAqLwogaW50Ci1tcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLCBpbnQgcmVhc29uKQorbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCkKIHsKIAlNUFRfU0NTSV9IT1NUCQkqaGQgPSBzaG9zdF9wcml2KHNkZXYtPmhvc3QpOwogCVZpcnRUYXJnZXQgCQkqdnRhcmdldDsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgCSpzdGFyZ2V0OwogCWludAkJCW1heF9kZXB0aDsKLQlpbnQJCQl0YWdnZWQ7CiAJTVBUX0FEQVBURVIJCSppb2MgPSBoZC0+aW9jOwogCiAJc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOwogCXZ0YXJnZXQgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKIAotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU1BJKSB7CiAJCWlmICghKHZ0YXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVMpKQogCQkJbWF4X2RlcHRoID0gMTsKQEAgLTIzNDcsMTMgKzIzNDIsOCBAQAogCiAJaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKIAkJcWRlcHRoID0gbWF4X2RlcHRoOwotCWlmIChxZGVwdGggPT0gMSkKLQkJdGFnZ2VkID0gMDsKLQllbHNlCi0JCXRhZ2dlZCA9IE1TR19TSU1QTEVfVEFHOwogCi0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgdGFnZ2VkLCBxZGVwdGgpOwotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKIH0KIAogLyoKQEAgLTIzOTcsMTIgKzIzODcsMTAgQEAKIAkJICAgIGlvYy0+bmFtZSwgdnRhcmdldC0+bmVnb0ZsYWdzLCB2dGFyZ2V0LT5tYXhPZmZzZXQsCiAJCSAgICB2dGFyZ2V0LT5taW5TeW5jRmFjdG9yKSk7CiAKLQltcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgTVBUX1NDU0lfQ01EX1BFUl9ERVZfSElHSCwKLQkJCQkgICAgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIE1QVF9TQ1NJX0NNRF9QRVJfREVWX0hJR0gpOwogCWRzcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCi0JCSJ0YWdnZWQgJWQsIHNpbXBsZSAlZCwgb3JkZXJlZCAlZFxuIiwKLQkJaW9jLT5uYW1lLHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQsIHNkZXYtPnNpbXBsZV90YWdzLAotCQlzZGV2LT5vcmRlcmVkX3RhZ3MpKTsKKwkJInRhZ2dlZCAlZCwgc2ltcGxlICVkXG4iLAorCQlpb2MtPm5hbWUsc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCwgc2Rldi0+c2ltcGxlX3RhZ3MpKTsKIAogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50IChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA1MTIgLSAxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCmluZGV4IGUxYjFhMTkuLjJiYWVlZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKQEAgLTEyOCw4ICsxMjgsNyBAQAogZXh0ZXJuIGludCBtcHRzY3NpaF9zY2FuZHZfY29tcGxldGUoTVBUX0FEQVBURVIgKmlvYywgTVBUX0ZSQU1FX0hEUiAqbWYsIE1QVF9GUkFNRV9IRFIgKnIpOwogZXh0ZXJuIGludCBtcHRzY3NpaF9ldmVudF9wcm9jZXNzKE1QVF9BREFQVEVSICppb2MsIEV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqcEV2UmVwbHkpOwogZXh0ZXJuIGludCBtcHRzY3NpaF9pb2NfcmVzZXQoTVBUX0FEQVBURVIgKmlvYywgaW50IHBvc3RfcmVzZXQpOwotZXh0ZXJuIGludCBtcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLAotCQkJCSAgICAgICBpbnQgcmVhc29uKTsKK2V4dGVybiBpbnQgbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCk7CiBleHRlcm4gdTggbXB0c2NzaWhfcmFpZF9pZF90b19udW0oTVBUX0FEQVBURVIgKmlvYywgdTggY2hhbm5lbCwgdTggaWQpOwogZXh0ZXJuIGludCBtcHRzY3NpaF9pc19waHlzX2Rpc2soTVBUX0FEQVBURVIgKmlvYywgdTggY2hhbm5lbCwgdTggaWQpOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptcHRzY3NpaF9ob3N0X2F0dHJzW107CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCAxNDU2ZWE3Li4yZTZiNzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTU5LDYgKzU5LDE3IEBACiAJICBhZGRpdGlvbmFsIGRyaXZlcnMgbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyIHRvIHVzZSB0aGUKIAkgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRldmljZS4KIAorY29uZmlnIE1GRF9BVE1FTF9ITENEQworCXRyaXN0YXRlICJBdG1lbCBITENEQyAoSGlnaC1lbmQgTENEIENvbnRyb2xsZXIpIgorCXNlbGVjdCBNRkRfQ09SRQorCXNlbGVjdCBSRUdNQVBfTU1JTworCWRlcGVuZHMgb24gT0YKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIEhMQ0RDIGJsb2NrLgorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlLAorCSAgYWRkaXRpb25hbCBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgdGhlCisJICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkZXZpY2UuCisKIGNvbmZpZyBNRkRfQkNNNTkwWFgKIAl0cmlzdGF0ZSAiQnJvYWRjb20gQkNNNTkweHggUE1VcyIKIAlzZWxlY3QgTUZEX0NPUkUKQEAgLTc0LDcgKzg1LDggQEAKIAlzZWxlY3QgUkVHTUFQX0lSUQogCWRlcGVuZHMgb24gSTJDPXkKIAloZWxwCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBWFAyMDIgYW5kIEFYUDIwOS4KKwkgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFgtUG93ZXJzIEFYUDIwMiwgQVhQMjA5IGFuZAorCSAgQVhQMjg4IHBvd2VyIG1hbmFnZW1lbnQgSUMgKFBNSUMpLgogCSAgVGhpcyBkcml2ZXIgaW5jbHVkZSBvbmx5IHRoZSBjb3JlIEFQSXMuIFlvdSBoYXZlIHRvIHNlbGVjdCBpbmRpdmlkdWFsCiAJICBjb21wb25lbnRzIGxpa2UgcmVndWxhdG9ycyBvciB0aGUgUEVLIChQb3dlciBFbmFibGUgS2V5KSB1bmRlciB0aGUKIAkgIGNvcnJlc3BvbmRpbmcgbWVudXMuCkBAIC0xODMsNiArMTk1LDE2IEBACiAJICBBZGRpdGlvbmFsIGRyaXZlcnMgbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyIHRvIHVzZSB0aGUgZnVuY3Rpb25hbGl0eQogCSAgb2YgdGhlIGRldmljZS4KIAorY29uZmlnIE1GRF9ETE4yCisJdHJpc3RhdGUgIkRpb2xhbiBETE4yIHN1cHBvcnQiCisJc2VsZWN0IE1GRF9DT1JFCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRGlvbGFuIFVTQi1JMkMvU1BJL0dQSU8gTWFzdGVyIEFkYXB0ZXIKKwkgIERMTi0yLiBBZGRpdGlvbmFsIGRyaXZlcnMgc3VjaCBhcyBJMkNfRExOMiwgR1BJT19ETE4yLAorCSAgZXRjLiBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mCisJICB0aGUgZGV2aWNlLgorCiBjb25maWcgTUZEX01DMTNYWFgKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gKFNQSV9NQVNURVIgfHwgSTJDKQpAQCAtNjU1LDcgKzY3Nyw2IEBACiAJc2VsZWN0IE1GRF9DT1JFCiAJc2VsZWN0IFJFR01BUF9JMkMKIAlzZWxlY3QgUkVHTUFQX0lSUQotCXNlbGVjdCBSRUdVTEFUT1IKIAloZWxwCiAJIFN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIEVsZWN0cm9uaWNzIE1GRCBzZXJpZXMuCiAJIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBhY2Nlc3NpbmcgdGhlIGRldmljZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggOGJkNTRiMS4uNTM0NjdlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTEzLDcgKzEzLDcgQEAKIG9iai0kKENPTkZJR19NRkRfQ1JPU19FQ19JMkMpCSs9IGNyb3NfZWNfaTJjLm8KIG9iai0kKENPTkZJR19NRkRfQ1JPU19FQ19TUEkpCSs9IGNyb3NfZWNfc3BpLm8KIAotcnRzeF9wY2ktb2JqcwkJCTo9IHJ0c3hfcGNyLm8gcnRzNTIwOS5vIHJ0czUyMjkubyBydGw4NDExLm8gcnRzNTIyNy5vIHJ0czUyNDkubworcnRzeF9wY2ktb2JqcwkJCTo9IHJ0c3hfcGNyLm8gcnRzeF9nb3BzLm8gcnRzNTIwOS5vIHJ0czUyMjkubyBydGw4NDExLm8gcnRzNTIyNy5vIHJ0czUyNDkubwogb2JqLSQoQ09ORklHX01GRF9SVFNYX1BDSSkJKz0gcnRzeF9wY2kubwogb2JqLSQoQ09ORklHX01GRF9SVFNYX1VTQikJKz0gcnRzeF91c2IubwogCkBAIC0xNTcsNiArMTU3LDcgQEAKIG9iai0kKENPTkZJR19UUFM2NTkxMV9DT01QQVJBVE9SKQkrPSB0cHM2NTkxMS1jb21wYXJhdG9yLm8KIG9iai0kKENPTkZJR19NRkRfVFBTNjUwOTApCSs9IHRwczY1MDkwLm8KIG9iai0kKENPTkZJR19NRkRfQUFUMjg3MF9DT1JFKQkrPSBhYXQyODcwLWNvcmUubworb2JqLSQoQ09ORklHX01GRF9BVE1FTF9ITENEQykJKz0gYXRtZWwtaGxjZGMubwogb2JqLSQoQ09ORklHX01GRF9JTlRFTF9NU0lDKQkrPSBpbnRlbF9tc2ljLm8KIG9iai0kKENPTkZJR19NRkRfUEFMTUFTKQkrPSBwYWxtYXMubwogb2JqLSQoQ09ORklHX01GRF9WSVBFUkJPQVJEKSAgICArPSB2aXBlcmJvYXJkLm8KQEAgLTE3NCw2ICsxNzUsNyBAQAogb2JqLSQoQ09ORklHX01GRF9JUEFRX01JQ1JPKQkrPSBpcGFxLW1pY3JvLm8KIG9iai0kKENPTkZJR19NRkRfTUVORjIxQk1DKQkrPSBtZW5mMjFibWMubwogb2JqLSQoQ09ORklHX01GRF9ISTY0MjFfUE1JQykJKz0gaGk2NDIxLXBtaWMtY29yZS5vCitvYmotJChDT05GSUdfTUZEX0RMTjIpCQkrPSBkbG4yLm8KIAogaW50ZWwtc29jLXBtaWMtb2JqcwkJOj0gaW50ZWxfc29jX3BtaWNfY29yZS5vIGludGVsX3NvY19wbWljX2NyYy5vCiBvYmotJChDT05GSUdfSU5URUxfU09DX1BNSUMpCSs9IGludGVsLXNvYy1wbWljLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FiODUwMC1zeXNjdHJsLmMgYi9kcml2ZXJzL21mZC9hYjg1MDAtc3lzY3RybC5jCmluZGV4IDhlMGRhZTUuLjk0ZGJjZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FiODUwMC1zeXNjdHJsLmMKKysrIGIvZHJpdmVycy9tZmQvYWI4NTAwLXN5c2N0cmwuYwpAQCAtODUsNjMgKzg1LDYgQEAKIAl9CiB9CiAKLS8qCi0gKiBVc2UgdGhlIEFCIFdEIHRvIHJlc2V0IHRoZSBwbGF0Zm9ybS4gSXQgd2lsbCBwZXJmb3JtIGEgaGFyZAotICogcmVzZXQgaW5zdGVhZCBvZiBhIHNvZnQgcmVzZXQuIFdyaXRlIHRoZSByZXNldCByZWFzb24gdG8KLSAqIHRoZSBBQiBiZWZvcmUgcmVzZXQsIHdoaWNoIGNhbiBiZSByZWFkIHVwb24gcmVzdGFydC4KLSAqLwotdm9pZCBhYjg1MDBfcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKLXsKLQlzdHJ1Y3QgYWI4NTAwX3BsYXRmb3JtX2RhdGEgKnBsYXQ7Ci0Jc3RydWN0IGFiODUwMF9zeXNjdHJsX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCXUxNiByZWFzb24gPSAwOwotCXU4IHZhbDsKLQotCWlmIChzeXNjdHJsX2RldiA9PSBOVUxMKSB7Ci0JCXByX2VycigiJXM6IHN5c2N0cmwgbm90IGluaXRpYWxpemVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwbGF0ID0gZGV2X2dldF9wbGF0ZGF0YShzeXNjdHJsX2Rldi0+cGFyZW50KTsKLQlwZGF0YSA9IHBsYXQtPnN5c2N0cmw7Ci0JaWYgKHBkYXRhICYmIHBkYXRhLT5yZWJvb3RfcmVhc29uX2NvZGUpCi0JCXJlYXNvbiA9IHBkYXRhLT5yZWJvb3RfcmVhc29uX2NvZGUoY21kKTsKLQllbHNlCi0JCXByX3dhcm4oIlslc10gTm8gcmVib290IHJlYXNvbiBzZXQuIERlZmF1bHQgcmVhc29uICVkXG4iLAotCQkJX19mdW5jX18sIHJlYXNvbik7Ci0KLQkvKgotCSAqIERpc2FibGUgUlRDIGFsYXJtLCBqdXN0IGEgcHJlY2F1dGlvbiBzbyB0aGF0IG5vIGFsYXJtCi0JICogaXMgcnVubmluZyB3aGVuIFdEIHJlc2V0IGlzIGV4ZWN1dGVkLgotCSAqLwotCWFieDUwMF9nZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShzeXNjdHJsX2RldiwgQUI4NTAwX1JUQywKLQkJUlRDX0NUUkwgLCAmdmFsKTsKLQlhYng1MDBfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoc3lzY3RybF9kZXYsIEFCODUwMF9SVEMsCi0JCVJUQ19DVFJMICwgKHZhbCAmIH5SVENfQUxBUk1fRU5BQkxFKSk7Ci0KLQkvKgotCSAqIEFuZHJvaWQgaXMgbm90IHVzaW5nIHRoZSBSVEMgYWxhcm0gcmVnaXN0ZXJzIGR1cmluZyByZWJvb3QKLQkgKiBzbyB3ZSBib3Jyb3cgdGhlbSBmb3Igd3JpdGluZyB0aGUgcmVhc29uIG9mIHJlc2V0Ci0JICovCi0KLQkvKiByZWFzb25bOCBMU0JdICovCi0JdmFsID0gcmVhc29uICYgMHhGRjsKLQlhYng1MDBfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoc3lzY3RybF9kZXYsIEFCODUwMF9SVEMsCi0JCUFCODUwMF9BTEFSTV9NSU5fTE9XICwgdmFsKTsKLQotCS8qIHJlYXNvbls4IE1TQl0gKi8KLQl2YWwgPSAocmVhc29uPj44KSAmIDB4RkY7Ci0JYWJ4NTAwX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKHN5c2N0cmxfZGV2LCBBQjg1MDBfUlRDLAotCQlBQjg1MDBfQUxBUk1fTUlOX01JRCAsIHZhbCk7Ci0KLQkvKiBTZXR0aW5nIFdEIHRpbWVvdXQgdG8gMCAqLwotCWFiODUwMF9zeXNjdHJsX3dyaXRlKEFCODUwMF9NQUlOV0RPR1RJTUVSLCAweEZGLCAweDApOwotCi0JLyogU2V0dGluZyB0aGUgcGFyYW1ldGVycyB0byBBQjg1MDAgV0QqLwotCWFiODUwMF9zeXNjdHJsX3dyaXRlKEFCODUwMF9NQUlOV0RPR0NUUkwsIDB4RkYsIChBQjg1MDBfRU5BQkxFX1dEIHwKLQkJQUI4NTAwX1dEX1JFU1RBUlRfT05fRVhQSVJFIHwgQUI4NTAwX0tJQ0tfV0QpKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIHZhbGlkX2JhbmsodTggYmFuaykKIHsKIAlyZXR1cm4gKChiYW5rID09IEFCODUwMF9TWVNfQ1RSTDFfQkxPQ0spIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hcml6b25hLXNwaS5jIGIvZHJpdmVycy9tZmQvYXJpem9uYS1zcGkuYwppbmRleCA1MTQ1ZDc4Li44ZWY1OGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hcml6b25hLXNwaS5jCisrKyBiL2RyaXZlcnMvbWZkL2FyaXpvbmEtc3BpLmMKQEAgLTc1LDcgKzc1LDkgQEAKIHN0YXRpYyBpbnQgYXJpem9uYV9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKwogCWFyaXpvbmFfZGV2X2V4aXQoYXJpem9uYSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYXRtZWwtaGxjZGMuYyBiL2RyaXZlcnMvbWZkL2F0bWVsLWhsY2RjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkNThmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL2F0bWVsLWhsY2RjLmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBFbGVjdHJvbnMKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBdG1lbAorICoKKyAqIEF1dGhvcjogQm9yaXMgQlJFWklMTE9OIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9hdG1lbC1obGNkYy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNkZWZpbmUgQVRNRUxfSExDRENfUkVHX01BWAkJKDB4NDAwMCAtIDB4NCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBhdG1lbF9obGNkY19jZWxsc1tdID0geworCXsKKwkJLm5hbWUgPSAiYXRtZWwtaGxjZGMtcHdtIiwKKwkJLm9mX2NvbXBhdGlibGUgPSAiYXRtZWwsaGxjZGMtcHdtIiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXRtZWwtaGxjZGMtZGMiLAorCQkub2ZfY29tcGF0aWJsZSA9ICJhdG1lbCxobGNkYy1kaXNwbGF5LWNvbnRyb2xsZXIiLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYXRtZWxfaGxjZGNfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSAzMiwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQsCisJLm1heF9yZWdpc3RlciA9IEFUTUVMX0hMQ0RDX1JFR19NQVgsCit9OworCitzdGF0aWMgaW50IGF0bWVsX2hsY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgYXRtZWxfaGxjZGMgKmhsY2RjOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqcmVnczsKKworCWhsY2RjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpobGNkYyksIEdGUF9LRVJORUwpOworCWlmICghaGxjZGMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsKKworCWhsY2RjLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChobGNkYy0+aXJxIDwgMCkKKwkJcmV0dXJuIGhsY2RjLT5pcnE7CisKKwlobGNkYy0+cGVyaXBoX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJwZXJpcGhfY2xrIik7CisJaWYgKElTX0VSUihobGNkYy0+cGVyaXBoX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHBlcmlwaGVyYWwgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihobGNkYy0+cGVyaXBoX2Nsayk7CisJfQorCisJaGxjZGMtPnN5c19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAic3lzX2NsayIpOworCWlmIChJU19FUlIoaGxjZGMtPnN5c19jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBzeXN0ZW0gY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihobGNkYy0+c3lzX2Nsayk7CisJfQorCisJaGxjZGMtPnNsb3dfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInNsb3dfY2xrIik7CisJaWYgKElTX0VSUihobGNkYy0+c2xvd19jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBzbG93IGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaGxjZGMtPnNsb3dfY2xrKTsKKwl9CisKKwlobGNkYy0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgcmVncywKKwkJCQkJICAgICAgJmF0bWVsX2hsY2RjX3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIoaGxjZGMtPnJlZ21hcCkpCisJCXJldHVybiBQVFJfRVJSKGhsY2RjLT5yZWdtYXApOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgaGxjZGMpOworCisJcmV0dXJuIG1mZF9hZGRfZGV2aWNlcyhkZXYsIC0xLCBhdG1lbF9obGNkY19jZWxscywKKwkJCSAgICAgICBBUlJBWV9TSVpFKGF0bWVsX2hsY2RjX2NlbGxzKSwKKwkJCSAgICAgICBOVUxMLCAwLCBOVUxMKTsKK30KKworc3RhdGljIGludCBhdG1lbF9obGNkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwltZmRfcmVtb3ZlX2RldmljZXMoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRtZWxfaGxjZGNfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDMtaGxjZGMiIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfaGxjZGNfZHJpdmVyID0geworCS5wcm9iZSA9IGF0bWVsX2hsY2RjX3Byb2JlLAorCS5yZW1vdmUgPSBhdG1lbF9obGNkY19yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYXRtZWwtaGxjZGMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBhdG1lbF9obGNkY19tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXRtZWxfaGxjZGNfZHJpdmVyKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdG1lbC1obGNkYyIpOworTU9EVUxFX0FVVEhPUigiQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdG1lbCBITENEQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2F4cDIweC5jIGIvZHJpdmVycy9tZmQvYXhwMjB4LmMKaW5kZXggNjIzMWFkYi4uYzUyMmVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYXhwMjB4LmMKKysrIGIvZHJpdmVycy9tZmQvYXhwMjB4LmMKQEAgLTEsOSArMSw5IEBACiAvKgotICogYXhwMjB4LmMgLSBNRkQgY29yZSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycyBBWFAyMDIgYW5kIEFYUDIwOQorICogYXhwMjB4LmMgLSBNRkQgY29yZSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycycgUG93ZXIgTWFuYWdlbWVudCBJQ3MKICAqCi0gKiBBWFAyMHggY29tcHJpc2VzIGFuIGFkYXB0aXZlIFVTQi1Db21wYXRpYmxlIFBXTSBjaGFyZ2VyLCAyIEJVQ0sgREMtREMKLSAqIGNvbnZlcnRlcnMsIDUgTERPcywgbXVsdGlwbGUgMTItYml0IEFEQ3Mgb2Ygdm9sdGFnZSwgY3VycmVudCBhbmQgdGVtcGVyYXR1cmUKLSAqIGFzIHdlbGwgYXMgNCBjb25maWd1cmFibGUgR1BJT3MuCisgKiBBWFAyMHggdHlwaWNhbGx5IGNvbXByaXNlcyBhbiBhZGFwdGl2ZSBVU0ItQ29tcGF0aWJsZSBQV00gY2hhcmdlciwgQlVDSyBEQy1EQworICogY29udmVydGVycywgTERPcywgbXVsdGlwbGUgMTItYml0IEFEQ3Mgb2Ygdm9sdGFnZSwgY3VycmVudCBhbmQgdGVtcGVyYXR1cmUKKyAqIGFzIHdlbGwgYXMgY29uZmlndXJhYmxlIEdQSU9zLgogICoKICAqIEF1dGhvcjogQ2FybG8gQ2Fpb25lIDxjYXJsb0BjYWlvbmUub3JnPgogICoKQEAgLTI1LDkgKzI1LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAKICNkZWZpbmUgQVhQMjBYX09GRgkweDgwCiAKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnN0ICpheHAyMHhfbW9kZWxfbmFtZXNbXSA9IHsKKwkiQVhQMjAyIiwKKwkiQVhQMjA5IiwKKwkiQVhQMjg4IiwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGF4cDIweF93cml0ZWFibGVfcmFuZ2VzW10gPSB7CiAJcmVnbWFwX3JlZ19yYW5nZShBWFAyMFhfREFUQUNBQ0hFKDApLCBBWFAyMFhfSVJRNV9TVEFURSksCiAJcmVnbWFwX3JlZ19yYW5nZShBWFAyMFhfRENEQ19NT0RFLCBBWFAyMFhfRkdfUkVTKSwKQEAgLTQ3LDYgKzU0LDI1IEBACiAJLm5feWVzX3Jhbmdlcwk9IEFSUkFZX1NJWkUoYXhwMjB4X3ZvbGF0aWxlX3JhbmdlcyksCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBheHAyODhfd3JpdGVhYmxlX3Jhbmdlc1tdID0geworCXJlZ21hcF9yZWdfcmFuZ2UoQVhQMjBYX0RBVEFDQUNIRSgwKSwgQVhQMjBYX0lSUTZfU1RBVEUpLAorCXJlZ21hcF9yZWdfcmFuZ2UoQVhQMjBYX0RDRENfTU9ERSwgQVhQMjg4X0ZHX1RVTkU1KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGF4cDI4OF92b2xhdGlsZV9yYW5nZXNbXSA9IHsKKwlyZWdtYXBfcmVnX3JhbmdlKEFYUDIwWF9JUlExX0VOLCBBWFAyMFhfSVBTT1VUX1ZfSElHSF9MKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSBheHAyODhfd3JpdGVhYmxlX3RhYmxlID0geworCS55ZXNfcmFuZ2VzCT0gYXhwMjg4X3dyaXRlYWJsZV9yYW5nZXMsCisJLm5feWVzX3Jhbmdlcwk9IEFSUkFZX1NJWkUoYXhwMjg4X3dyaXRlYWJsZV9yYW5nZXMpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIGF4cDI4OF92b2xhdGlsZV90YWJsZSA9IHsKKwkueWVzX3Jhbmdlcwk9IGF4cDI4OF92b2xhdGlsZV9yYW5nZXMsCisJLm5feWVzX3Jhbmdlcwk9IEFSUkFZX1NJWkUoYXhwMjg4X3ZvbGF0aWxlX3JhbmdlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGF4cDIweF9wZWtfcmVzb3VyY2VzW10gPSB7CiAJewogCQkubmFtZQk9ICJQRUtfREJSIiwKQEAgLTYxLDYgKzg3LDM5IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXhwMjg4X2JhdHRlcnlfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1FXQlRVLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1FXQlRVLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9XQlRVLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1dCVFUsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1FXQlRPLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1FXQlRPLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9XQlRPLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1dCVE8sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1dMMiwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9XTDIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1dMMSwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9XTDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYXhwMjB4X3JlZ21hcF9jb25maWcgPSB7CiAJLnJlZ19iaXRzCT0gOCwKIAkudmFsX2JpdHMJPSA4LApAQCAtNzAsNDcgKzEyOSw5NiBAQAogCS5jYWNoZV90eXBlCT0gUkVHQ0FDSEVfUkJUUkVFLAogfTsKIAotI2RlZmluZSBBWFAyMFhfSVJRKF9pcnEsIF9vZmYsIF9tYXNrKSBcCi0JW0FYUDIwWF9JUlFfIyNfaXJxXSA9IHsgLnJlZ19vZmZzZXQgPSAoX29mZiksIC5tYXNrID0gQklUKF9tYXNrKSB9CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYXhwMjg4X3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzCT0gOCwKKwkudmFsX2JpdHMJPSA4LAorCS53cl90YWJsZQk9ICZheHAyODhfd3JpdGVhYmxlX3RhYmxlLAorCS52b2xhdGlsZV90YWJsZQk9ICZheHAyODhfdm9sYXRpbGVfdGFibGUsCisJLm1heF9yZWdpc3Rlcgk9IEFYUDI4OF9GR19UVU5FNSwKKwkuY2FjaGVfdHlwZQk9IFJFR0NBQ0hFX1JCVFJFRSwKK307CisKKyNkZWZpbmUgSU5JVF9SRUdNQVBfSVJRKF92YXJpYW50LCBfaXJxLCBfb2ZmLCBfbWFzaykJCQlcCisJW192YXJpYW50IyNfSVJRXyMjX2lycV0gPSB7IC5yZWdfb2Zmc2V0ID0gKF9vZmYpLCAubWFzayA9IEJJVChfbWFzaykgfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9pcnEgYXhwMjB4X3JlZ21hcF9pcnFzW10gPSB7Ci0JQVhQMjBYX0lSUShBQ0lOX09WRVJfViwJCTAsIDcpLAotCUFYUDIwWF9JUlEoQUNJTl9QTFVHSU4sCQkwLCA2KSwKLQlBWFAyMFhfSVJRKEFDSU5fUkVNT1ZBTCwJMCwgNSksCi0JQVhQMjBYX0lSUShWQlVTX09WRVJfViwJCTAsIDQpLAotCUFYUDIwWF9JUlEoVkJVU19QTFVHSU4sCQkwLCAzKSwKLQlBWFAyMFhfSVJRKFZCVVNfUkVNT1ZBTCwJMCwgMiksCi0JQVhQMjBYX0lSUShWQlVTX1ZfTE9XLAkJMCwgMSksCi0JQVhQMjBYX0lSUShCQVRUX1BMVUdJTiwJCTEsIDcpLAotCUFYUDIwWF9JUlEoQkFUVF9SRU1PVkFMLAkxLCA2KSwKLQlBWFAyMFhfSVJRKEJBVFRfRU5UX0FDVF9NT0RFLAkxLCA1KSwKLQlBWFAyMFhfSVJRKEJBVFRfRVhJVF9BQ1RfTU9ERSwJMSwgNCksCi0JQVhQMjBYX0lSUShDSEFSRywJCTEsIDMpLAotCUFYUDIwWF9JUlEoQ0hBUkdfRE9ORSwJCTEsIDIpLAotCUFYUDIwWF9JUlEoQkFUVF9URU1QX0hJR0gsCTEsIDEpLAotCUFYUDIwWF9JUlEoQkFUVF9URU1QX0xPVywJMSwgMCksCi0JQVhQMjBYX0lSUShESUVfVEVNUF9ISUdILAkyLCA3KSwKLQlBWFAyMFhfSVJRKENIQVJHX0lfTE9XLAkJMiwgNiksCi0JQVhQMjBYX0lSUShEQ0RDMV9WX0xPTkcsCTIsIDUpLAotCUFYUDIwWF9JUlEoRENEQzJfVl9MT05HLAkyLCA0KSwKLQlBWFAyMFhfSVJRKERDREMzX1ZfTE9ORywJMiwgMyksCi0JQVhQMjBYX0lSUShQRUtfU0hPUlQsCQkyLCAxKSwKLQlBWFAyMFhfSVJRKFBFS19MT05HLAkJMiwgMCksCi0JQVhQMjBYX0lSUShOX09FX1BXUl9PTiwJCTMsIDcpLAotCUFYUDIwWF9JUlEoTl9PRV9QV1JfT0ZGLAkzLCA2KSwKLQlBWFAyMFhfSVJRKFZCVVNfVkFMSUQsCQkzLCA1KSwKLQlBWFAyMFhfSVJRKFZCVVNfTk9UX1ZBTElELAkzLCA0KSwKLQlBWFAyMFhfSVJRKFZCVVNfU0VTU19WQUxJRCwJMywgMyksCi0JQVhQMjBYX0lSUShWQlVTX1NFU1NfRU5ELAkzLCAyKSwKLQlBWFAyMFhfSVJRKExPV19QV1JfTFZMMSwJMywgMSksCi0JQVhQMjBYX0lSUShMT1dfUFdSX0xWTDIsCTMsIDApLAotCUFYUDIwWF9JUlEoVElNRVIsCQk0LCA3KSwKLQlBWFAyMFhfSVJRKFBFS19SSVNfRURHRSwJNCwgNiksCi0JQVhQMjBYX0lSUShQRUtfRkFMX0VER0UsCTQsIDUpLAotCUFYUDIwWF9JUlEoR1BJTzNfSU5QVVQsCQk0LCAzKSwKLQlBWFAyMFhfSVJRKEdQSU8yX0lOUFVULAkJNCwgMiksCi0JQVhQMjBYX0lSUShHUElPMV9JTlBVVCwJCTQsIDEpLAotCUFYUDIwWF9JUlEoR1BJTzBfSU5QVVQsCQk0LCAwKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBBQ0lOX09WRVJfViwJCTAsIDcpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEFDSU5fUExVR0lOLAkJMCwgNiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQUNJTl9SRU1PVkFMLAkgICAgICAgIDAsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFZCVVNfT1ZFUl9WLAkJMCwgNCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19QTFVHSU4sCQkwLCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBWQlVTX1JFTU9WQUwsCSAgICAgICAgMCwgMiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19WX0xPVywJCTAsIDEpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEJBVFRfUExVR0lOLAkJMSwgNyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQkFUVF9SRU1PVkFMLAkgICAgICAgIDEsIDYpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEJBVFRfRU5UX0FDVF9NT0RFLAkxLCA1KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBCQVRUX0VYSVRfQUNUX01PREUsCTEsIDQpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIENIQVJHLAkJICAgICAgICAxLCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBDSEFSR19ET05FLAkJMSwgMiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQkFUVF9URU1QX0hJR0gsCSAgICAgICAgMSwgMSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQkFUVF9URU1QX0xPVywJICAgICAgICAxLCAwKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBESUVfVEVNUF9ISUdILAkgICAgICAgIDIsIDcpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIENIQVJHX0lfTE9XLAkJMiwgNiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgRENEQzFfVl9MT05HLAkgICAgICAgIDIsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIERDREMyX1ZfTE9ORywJICAgICAgICAyLCA0KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBEQ0RDM19WX0xPTkcsCSAgICAgICAgMiwgMyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgUEVLX1NIT1JULAkJMiwgMSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgUEVLX0xPTkcsCQkyLCAwKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBOX09FX1BXUl9PTiwJCTMsIDcpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIE5fT0VfUFdSX09GRiwJICAgICAgICAzLCA2KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBWQlVTX1ZBTElELAkJMywgNSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19OT1RfVkFMSUQsCSAgICAgICAgMywgNCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19TRVNTX1ZBTElELAkzLCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBWQlVTX1NFU1NfRU5ELAkgICAgICAgIDMsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIExPV19QV1JfTFZMMSwJICAgICAgICAzLCAxKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBMT1dfUFdSX0xWTDIsCSAgICAgICAgMywgMCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVElNRVIsCQkgICAgICAgIDQsIDcpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFBFS19SSVNfRURHRSwJICAgICAgICA0LCA2KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBQRUtfRkFMX0VER0UsCSAgICAgICAgNCwgNSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgR1BJTzNfSU5QVVQsCQk0LCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBHUElPMl9JTlBVVCwJCTQsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEdQSU8xX0lOUFVULAkJNCwgMSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgR1BJTzBfSU5QVVQsCQk0LCAwKSwKK307CisKKy8qIHNvbWUgSVJRcyBhcmUgY29tcGF0aWJsZSB3aXRoIGF4cDIweCBtb2RlbHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycSBheHAyODhfcmVnbWFwX2lycXNbXSA9IHsKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBWQlVTX0ZBTEwsICAgICAgICAgICAgICAwLCAyKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBWQlVTX1JJU0UsICAgICAgICAgICAgICAwLCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBPViwgICAgICAgICAgICAgICAgICAgICAwLCA0KSwKKworCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIERPTkUsICAgICAgICAgICAgICAgICAgIDEsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIENIQVJHSU5HLCAgICAgICAgICAgICAgIDEsIDMpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFNBRkVfUVVJVCwgICAgICAgICAgICAgIDEsIDQpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFNBRkVfRU5URVIsICAgICAgICAgICAgIDEsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIEFCU0VOVCwgICAgICAgICAgICAgICAgIDEsIDYpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIEFQUEVORCwgICAgICAgICAgICAgICAgIDEsIDcpLAorCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgUVdCVFUsICAgICAgICAgICAgICAgICAgMiwgMCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgV0JUVSwgICAgICAgICAgICAgICAgICAgMiwgMSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgUVdCVE8sICAgICAgICAgICAgICAgICAgMiwgMiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgV0JUTywgICAgICAgICAgICAgICAgICAgMiwgMyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgUUNCVFUsICAgICAgICAgICAgICAgICAgMiwgNCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgQ0JUVSwgICAgICAgICAgICAgICAgICAgMiwgNSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgUUNCVE8sICAgICAgICAgICAgICAgICAgMiwgNiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgQ0JUTywgICAgICAgICAgICAgICAgICAgMiwgNyksCisKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBXTDIsICAgICAgICAgICAgICAgICAgICAzLCAwKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBXTDEsICAgICAgICAgICAgICAgICAgICAzLCAxKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBHUEFEQywgICAgICAgICAgICAgICAgICAzLCAyKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBPVCwgICAgICAgICAgICAgICAgICAgICAzLCA3KSwKKworCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIEdQSU8wLCAgICAgICAgICAgICAgICAgIDQsIDApLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIEdQSU8xLCAgICAgICAgICAgICAgICAgIDQsIDEpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFBPS08sICAgICAgICAgICAgICAgICAgIDQsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFBPS0wsICAgICAgICAgICAgICAgICAgIDQsIDMpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFBPS1MsICAgICAgICAgICAgICAgICAgIDQsIDQpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFBPS04sICAgICAgICAgICAgICAgICAgIDQsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFBPS1AsICAgICAgICAgICAgICAgICAgIDQsIDYpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFRJTUVSLCAgICAgICAgICAgICAgICAgIDQsIDcpLAorCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgTVZfQ0hORywgICAgICAgICAgICAgICAgNSwgMCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgQkNfVVNCX0NITkcsICAgICAgICAgICAgNSwgMSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheHAyMHhfb2ZfbWF0Y2hbXSA9IHsKQEAgLTEyOCwxNiArMjM2LDM5IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGF4cDIweF9pMmNfaWQpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGF4cDIweF9hY3BpX21hdGNoW10gPSB7CisJeworCQkuaWQgPSAiSU5UMzNGNCIsCisJCS5kcml2ZXJfZGF0YSA9IEFYUDI4OF9JRCwKKwl9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGF4cDIweF9hY3BpX21hdGNoKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfaXJxX2NoaXAgYXhwMjB4X3JlZ21hcF9pcnFfY2hpcCA9IHsKIAkubmFtZQkJCT0gImF4cDIweF9pcnFfY2hpcCIsCiAJLnN0YXR1c19iYXNlCQk9IEFYUDIwWF9JUlExX1NUQVRFLAogCS5hY2tfYmFzZQkJPSBBWFAyMFhfSVJRMV9TVEFURSwKIAkubWFza19iYXNlCQk9IEFYUDIwWF9JUlExX0VOLAotCS5udW1fcmVncwkJPSA1LAotCS5pcnFzCQkJPSBheHAyMHhfcmVnbWFwX2lycXMsCi0JLm51bV9pcnFzCQk9IEFSUkFZX1NJWkUoYXhwMjB4X3JlZ21hcF9pcnFzKSwKIAkubWFza19pbnZlcnQJCT0gdHJ1ZSwKIAkuaW5pdF9hY2tfbWFza2VkCT0gdHJ1ZSwKKwkuaXJxcwkJCT0gYXhwMjB4X3JlZ21hcF9pcnFzLAorCS5udW1faXJxcwkJPSBBUlJBWV9TSVpFKGF4cDIweF9yZWdtYXBfaXJxcyksCisJLm51bV9yZWdzCQk9IDUsCisKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycV9jaGlwIGF4cDI4OF9yZWdtYXBfaXJxX2NoaXAgPSB7CisJLm5hbWUJCQk9ICJheHAyODhfaXJxX2NoaXAiLAorCS5zdGF0dXNfYmFzZQkJPSBBWFAyMFhfSVJRMV9TVEFURSwKKwkuYWNrX2Jhc2UJCT0gQVhQMjBYX0lSUTFfU1RBVEUsCisJLm1hc2tfYmFzZQkJPSBBWFAyMFhfSVJRMV9FTiwKKwkubWFza19pbnZlcnQJCT0gdHJ1ZSwKKwkuaW5pdF9hY2tfbWFza2VkCT0gdHJ1ZSwKKwkuaXJxcwkJCT0gYXhwMjg4X3JlZ21hcF9pcnFzLAorCS5udW1faXJxcwkJPSBBUlJBWV9TSVpFKGF4cDI4OF9yZWdtYXBfaXJxcyksCisJLm51bV9yZWdzCQk9IDYsCisKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgYXhwMjB4X2NlbGxzW10gPSB7CkBAIC0xNTAsMzYgKzI4MSwxNTUgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBheHAyODhfYWRjX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUgID0gIkdQQURDIiwKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9HUEFEQywKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9HUEFEQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXhwMjg4X2NoYXJnZXJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX09WLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX09WLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9ET05FLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX0RPTkUsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX0NIQVJHSU5HLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX0NIQVJHSU5HLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9TQUZFX1FVSVQsCisJCS5lbmQgICA9IEFYUDI4OF9JUlFfU0FGRV9RVUlULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9TQUZFX0VOVEVSLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1NBRkVfRU5URVIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1FDQlRVLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1FDQlRVLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9DQlRVLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX0NCVFUsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1FDQlRPLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1FDQlRPLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9DQlRPLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX0NCVE8sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIGF4cDI4OF9jZWxsc1tdID0geworCXsKKwkJLm5hbWUgPSAiYXhwMjg4X2FkYyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShheHAyODhfYWRjX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSBheHAyODhfYWRjX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXhwMjg4X2NoYXJnZXIiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYXhwMjg4X2NoYXJnZXJfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IGF4cDI4OF9jaGFyZ2VyX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXhwMjg4X2JhdHRlcnkiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYXhwMjg4X2JhdHRlcnlfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IGF4cDI4OF9iYXR0ZXJ5X3Jlc291cmNlcywKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBheHAyMHhfZGV2ICpheHAyMHhfcG1fcG93ZXJfb2ZmOwogc3RhdGljIHZvaWQgYXhwMjB4X3Bvd2VyX29mZih2b2lkKQogeworCWlmIChheHAyMHhfcG1fcG93ZXJfb2ZmLT52YXJpYW50ID09IEFYUDI4OF9JRCkKKwkJcmV0dXJuOworCiAJcmVnbWFwX3dyaXRlKGF4cDIweF9wbV9wb3dlcl9vZmYtPnJlZ21hcCwgQVhQMjBYX09GRl9DVFJMLAogCQkgICAgIEFYUDIwWF9PRkYpOwogfQogCitzdGF0aWMgaW50IGF4cDIweF9tYXRjaF9kZXZpY2Uoc3RydWN0IGF4cDIweF9kZXYgKmF4cDIweCwgc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCAqYWNwaV9pZDsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKworCWlmIChkZXYtPm9mX25vZGUpIHsKKwkJb2ZfaWQgPSBvZl9tYXRjaF9kZXZpY2UoYXhwMjB4X29mX21hdGNoLCBkZXYpOworCQlpZiAoIW9mX2lkKSB7CisJCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBtYXRjaCBPRiBJRFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlheHAyMHgtPnZhcmlhbnQgPSAobG9uZykgb2ZfaWQtPmRhdGE7CisJfSBlbHNlIHsKKwkJYWNwaV9pZCA9IGFjcGlfbWF0Y2hfZGV2aWNlKGRldi0+ZHJpdmVyLT5hY3BpX21hdGNoX3RhYmxlLCBkZXYpOworCQlpZiAoIWFjcGlfaWQgfHwgIWFjcGlfaWQtPmRyaXZlcl9kYXRhKSB7CisJCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBtYXRjaCBBQ1BJIElEIGFuZCBkYXRhXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWF4cDIweC0+dmFyaWFudCA9IChsb25nKSBhY3BpX2lkLT5kcml2ZXJfZGF0YTsKKwl9CisKKwlzd2l0Y2ggKGF4cDIweC0+dmFyaWFudCkgeworCWNhc2UgQVhQMjAyX0lEOgorCWNhc2UgQVhQMjA5X0lEOgorCQlheHAyMHgtPm5yX2NlbGxzID0gQVJSQVlfU0laRShheHAyMHhfY2VsbHMpOworCQlheHAyMHgtPmNlbGxzID0gYXhwMjB4X2NlbGxzOworCQlheHAyMHgtPnJlZ21hcF9jZmcgPSAmYXhwMjB4X3JlZ21hcF9jb25maWc7CisJCWF4cDIweC0+cmVnbWFwX2lycV9jaGlwID0gJmF4cDIweF9yZWdtYXBfaXJxX2NoaXA7CisJCWJyZWFrOworCWNhc2UgQVhQMjg4X0lEOgorCQlheHAyMHgtPmNlbGxzID0gYXhwMjg4X2NlbGxzOworCQlheHAyMHgtPm5yX2NlbGxzID0gQVJSQVlfU0laRShheHAyODhfY2VsbHMpOworCQlheHAyMHgtPnJlZ21hcF9jZmcgPSAmYXhwMjg4X3JlZ21hcF9jb25maWc7CisJCWF4cDIweC0+cmVnbWFwX2lycV9jaGlwID0gJmF4cDI4OF9yZWdtYXBfaXJxX2NoaXA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAidW5zdXBwb3J0ZWQgQVhQMjBYIElEICVsdVxuIiwgYXhwMjB4LT52YXJpYW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9pbmZvKGRldiwgIkFYUDIweCB2YXJpYW50ICVzIGZvdW5kXG4iLAorCQlheHAyMHhfbW9kZWxfbmFtZXNbYXhwMjB4LT52YXJpYW50XSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBheHAyMHhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBheHAyMHhfZGV2ICpheHAyMHg7Ci0JY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CiAJaW50IHJldDsKIAogCWF4cDIweCA9IGRldm1fa3phbGxvYygmaTJjLT5kZXYsIHNpemVvZigqYXhwMjB4KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFheHAyMHgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb2ZfaWQgPSBvZl9tYXRjaF9kZXZpY2UoYXhwMjB4X29mX21hdGNoLCAmaTJjLT5kZXYpOwotCWlmICghb2ZfaWQpIHsKLQkJZGV2X2VycigmaTJjLT5kZXYsICJVbmFibGUgdG8gc2V0dXAgQVhQMjBYIGRhdGFcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JYXhwMjB4LT52YXJpYW50ID0gKGxvbmcpIG9mX2lkLT5kYXRhOworCXJldCA9IGF4cDIweF9tYXRjaF9kZXZpY2UoYXhwMjB4LCAmaTJjLT5kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlheHAyMHgtPmkyY19jbGllbnQgPSBpMmM7CiAJYXhwMjB4LT5kZXYgPSAmaTJjLT5kZXY7CiAJZGV2X3NldF9kcnZkYXRhKGF4cDIweC0+ZGV2LCBheHAyMHgpOwogCi0JYXhwMjB4LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsICZheHAyMHhfcmVnbWFwX2NvbmZpZyk7CisJYXhwMjB4LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsIGF4cDIweC0+cmVnbWFwX2NmZyk7CiAJaWYgKElTX0VSUihheHAyMHgtPnJlZ21hcCkpIHsKIAkJcmV0ID0gUFRSX0VSUihheHAyMHgtPnJlZ21hcCk7CiAJCWRldl9lcnIoJmkyYy0+ZGV2LCAicmVnbWFwIGluaXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKQEAgLTE4OCwxNSArNDM4LDE1IEBACiAKIAlyZXQgPSByZWdtYXBfYWRkX2lycV9jaGlwKGF4cDIweC0+cmVnbWFwLCBpMmMtPmlycSwKIAkJCQkgIElSUUZfT05FU0hPVCB8IElSUUZfU0hBUkVELCAtMSwKLQkJCQkgICZheHAyMHhfcmVnbWFwX2lycV9jaGlwLAorCQkJCSAgYXhwMjB4LT5yZWdtYXBfaXJxX2NoaXAsCiAJCQkJICAmYXhwMjB4LT5yZWdtYXBfaXJxYyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZpMmMtPmRldiwgImZhaWxlZCB0byBhZGQgaXJxIGNoaXA6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhheHAyMHgtPmRldiwgLTEsIGF4cDIweF9jZWxscywKLQkJCSAgICAgIEFSUkFZX1NJWkUoYXhwMjB4X2NlbGxzKSwgTlVMTCwgMCwgTlVMTCk7CisJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKGF4cDIweC0+ZGV2LCAtMSwgYXhwMjB4LT5jZWxscywKKwkJCWF4cDIweC0+bnJfY2VsbHMsIE5VTEwsIDAsIE5VTEwpOwogCiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZpMmMtPmRldiwgImZhaWxlZCB0byBhZGQgTUZEIGRldmljZXM6ICVkXG4iLCByZXQpOwpAQCAtMjM0LDYgKzQ4NCw3IEBACiAJCS5uYW1lCT0gImF4cDIweCIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkub2ZfbWF0Y2hfdGFibGUJPSBvZl9tYXRjaF9wdHIoYXhwMjB4X29mX21hdGNoKSwKKwkJLmFjcGlfbWF0Y2hfdGFibGUgPSBBQ1BJX1BUUihheHAyMHhfYWNwaV9tYXRjaCksCiAJfSwKIAkucHJvYmUJCT0gYXhwMjB4X2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IGF4cDIweF9pMmNfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvZGE5MDYzLWNvcmUuYyBiL2RyaXZlcnMvbWZkL2RhOTA2My1jb3JlLmMKaW5kZXggOTNkYjhiYi4uZjM4YmM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvZGE5MDYzLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9kYTkwNjMtY29yZS5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJZGE5MDYzLT5pcnFfYmFzZSA9IHBkYXRhLT5pcnFfYmFzZTsKIAl9IGVsc2UgewogCQlkYTkwNjMtPmZsYWdzID0gMDsKLQkJZGE5MDYzLT5pcnFfYmFzZSA9IDA7CisJCWRhOTA2My0+aXJxX2Jhc2UgPSAtMTsKIAl9CiAJZGE5MDYzLT5jaGlwX2lycSA9IGlycTsKIApAQCAtMTY4LDYgKzE2OCw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJZGE5MDYzLT5pcnFfYmFzZSA9IHJlZ21hcF9pcnFfY2hpcF9nZXRfYmFzZShkYTkwNjMtPnJlZ21hcF9pcnEpOworCiAJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKGRhOTA2My0+ZGV2LCAtMSwgZGE5MDYzX2RldnMsCiAJCQkgICAgICBBUlJBWV9TSVpFKGRhOTA2M19kZXZzKSwgTlVMTCwgZGE5MDYzLT5pcnFfYmFzZSwKIAkJCSAgICAgIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvZGI4NTAwLXByY211LmMgYi9kcml2ZXJzL21mZC9kYjg1MDAtcHJjbXUuYwppbmRleCAxOTNjZjE2Li5hODIwNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9kYjg1MDAtcHJjbXUuYworKysgYi9kcml2ZXJzL21mZC9kYjg1MDAtcHJjbXUuYwpAQCAtMzE1MCwyMyArMzE1MCwyOCBAQAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwcmNtdSIpOwogCWlmICghcmVzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHByY211IG1lbW9yeSByZWdpb24gcHJvdmlkZWRcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXByY211X2Jhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXByY211X2Jhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJImZhaWxlZCB0byBpb3JlbWFwIHByY211IHJlZ2lzdGVyIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaW5pdF9wcmNtX3JlZ2lzdGVycygpOwogCWRieDUwMF9md192ZXJzaW9uX2luaXQocGRldiwgcGRhdGEtPnZlcnNpb25fb2Zmc2V0KTsKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicHJjbXUtdGNkbSIpOwogCWlmICghcmVzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHByY211IHRjZG0gcmVnaW9uIHByb3ZpZGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAl0Y2RtX2Jhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKIAkJCXJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCF0Y2RtX2Jhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJImZhaWxlZCB0byBpb3JlbWFwIHByY211LXRjZG0gcmVnaXN0ZXIgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJLyogQ2xlYW4gdXAgdGhlIG1haWxib3ggaW50ZXJydXB0cyBhZnRlciBwcmUta2VybmVsIGNvZGUuICovCiAJd3JpdGVsKEFMTF9NQk9YX0JJVFMsIFBSQ01fQVJNX0lUMV9DTFIpOwpAQCAtMzE3NCwxNSArMzE3OSwxNCBAQAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8PSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHByY211IGlycSBwcm92aWRlZFxuIik7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXR1cm4gaXJxOwogCX0KIAogCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGlycSwgcHJjbXVfaXJxX2hhbmRsZXIsCiAJICAgICAgICBwcmNtdV9pcnFfdGhyZWFkX2ZuLCBJUlFGX05PX1NVU1BFTkQsICJwcmNtdSIsIE5VTEwpOwogCWlmIChlcnIgPCAwKSB7CiAJCXByX2VycigicHJjbXU6IEZhaWxlZCB0byBhbGxvY2F0ZSBJUlFfREI4NTAwX1BSQ01VMS5cbiIpOwotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gbm9faXJxX3JldHVybjsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlkYjg1MDBfaXJxX2luaXQobnApOwpAQCAtMzIwNiw3ICszMjEwLDcgQEAKIAkJaWYgKGVycikgewogCQkJbWZkX3JlbW92ZV9kZXZpY2VzKCZwZGV2LT5kZXYpOwogCQkJcHJfZXJyKCJwcmNtdTogRmFpbGVkIHRvIGFkZCBzdWJkZXZpY2VzXG4iKTsKLQkJCWdvdG8gbm9faXJxX3JldHVybjsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAKQEAgLTMyMTQsMTIgKzMyMTgsMTAgQEAKIAlpZiAoZXJyKSB7CiAJCW1mZF9yZW1vdmVfZGV2aWNlcygmcGRldi0+ZGV2KTsKIAkJcHJfZXJyKCJwcmNtdTogRmFpbGVkIHRvIGFkZCBhYjg1MDAgc3ViZGV2aWNlXG4iKTsKLQkJZ290byBub19pcnFfcmV0dXJuOworCQlyZXR1cm4gZXJyOwogCX0KIAogCXByX2luZm8oIkRCODUwMCBQUkNNVSBpbml0aWFsaXplZFxuIik7Ci0KLW5vX2lycV9yZXR1cm46CiAJcmV0dXJuIGVycjsKIH0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGRiODUwMF9wcmNtdV9tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvZGxuMi5jIGIvZHJpdmVycy9tZmQvZGxuMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDk2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9kbG4yLmMKQEAgLTAsMCArMSw3ODEgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBEaW9sYW4gRExOLTIgVVNCIGFkYXB0ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBEZXJpdmVkIGZyb206CisgKiAgaTJjLWRpb2xhbi11MmMuYworICogIENvcHlyaWdodCAoYykgMjAxMC0yMDExIEVyaWNzc29uIEFCCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGxuMi5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKworc3RydWN0IGRsbjJfaGVhZGVyIHsKKwlfX2xlMTYgc2l6ZTsKKwlfX2xlMTYgaWQ7CisJX19sZTE2IGVjaG87CisJX19sZTE2IGhhbmRsZTsKK307CisKK3N0cnVjdCBkbG4yX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgZGxuMl9oZWFkZXIgaGRyOworCV9fbGUxNiByZXN1bHQ7Cit9OworCisjZGVmaW5lIERMTjJfR0VORVJJQ19NT0RVTEVfSUQJCTB4MDAKKyNkZWZpbmUgRExOMl9HRU5FUklDX0NNRChjbWQpCQlETE4yX0NNRChjbWQsIERMTjJfR0VORVJJQ19NT0RVTEVfSUQpCisjZGVmaW5lIENNRF9HRVRfREVWSUNFX1ZFUgkJRExOMl9HRU5FUklDX0NNRCgweDMwKQorI2RlZmluZSBDTURfR0VUX0RFVklDRV9TTgkJRExOMl9HRU5FUklDX0NNRCgweDMxKQorCisjZGVmaW5lIERMTjJfSFdfSUQJCQkweDIwMAorI2RlZmluZSBETE4yX1VTQl9USU1FT1VUCQkyMDAJLyogaW4gbXMgKi8KKyNkZWZpbmUgRExOMl9NQVhfUlhfU0xPVFMJCTE2CisjZGVmaW5lIERMTjJfTUFYX1VSQlMJCQkxNgorI2RlZmluZSBETE4yX1JYX0JVRl9TSVpFCQk1MTIKKworZW51bSBkbG4yX2hhbmRsZSB7CisJRExOMl9IQU5ETEVfRVZFTlQgPSAwLAkJLyogZG9uJ3QgY2hhbmdlLCBoYXJkd2FyZSBkZWZpbmVkICovCisJRExOMl9IQU5ETEVfQ1RSTCwKKwlETE4yX0hBTkRMRV9HUElPLAorCURMTjJfSEFORExFX0kyQywKKwlETE4yX0hBTkRMRV9TUEksCisJRExOMl9IQU5ETEVTCit9OworCisvKgorICogUmVjZWl2ZSBjb250ZXh0IHVzZWQgYmV0d2VlbiB0aGUgcmVjZWl2ZSBkZW11bHRpcGxleGVyIGFuZCB0aGUgdHJhbnNmZXIKKyAqIHJvdXRpbmUuIFdoaWxlIHNlbmRpbmcgYSByZXF1ZXN0IHRoZSB0cmFuc2ZlciByb3V0aW5lIHdpbGwgbG9vayBmb3IgYSBmcmVlCisgKiByZWNlaXZlIGNvbnRleHQgYW5kIHVzZSBpdCB0byB3YWl0IGZvciBhIHJlc3BvbnNlIGFuZCB0byByZWNlaXZlIHRoZSBVUkIgYW5kCisgKiB0aHVzIHRoZSByZXNwb25zZSBkYXRhLgorICovCitzdHJ1Y3QgZGxuMl9yeF9jb250ZXh0IHsKKwkvKiBjb21wbGV0aW9uIHVzZWQgdG8gd2FpdCBmb3IgYSByZXNwb25zZSAqLworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisKKwkvKiBpZiBub24tTlVMTCB0aGUgVVJCIGNvbnRhaW5zIHRoZSByZXNwb25zZSAqLworCXN0cnVjdCB1cmIgKnVyYjsKKworCS8qIGlmIHRydWUgdGhlbiB0aGlzIGNvbnRleHQgaXMgdXNlZCB0byB3YWl0IGZvciBhIHJlc3BvbnNlICovCisJYm9vbCBpbl91c2U7Cit9OworCisvKgorICogUmVjZWl2ZSBjb250ZXh0cyBmb3IgYSBwYXJ0aWN1bGFyIERMTjIgbW9kdWxlIChpMmMsIGdwaW8sIGV0Yy4pLiBXZSB1c2UgdGhlCisgKiBoYW5kbGUgaGVhZGVyIGZpZWxkIHRvIGlkZW50aWZ5IHRoZSBtb2R1bGUgaW4gZGxuMl9kZXYubW9kX3J4X3Nsb3RzIGFuZCB0aGVuCisgKiB0aGUgZWNobyBoZWFkZXIgZmllbGQgdG8gaW5kZXggdGhlIHNsb3RzIGZpZWxkIGFuZCBmaW5kIHRoZSByZWNlaXZlIGNvbnRleHQKKyAqIGZvciBhIHBhcnRpY3VsYXIgcmVxdWVzdC4KKyAqLworc3RydWN0IGRsbjJfbW9kX3J4X3Nsb3RzIHsKKwkvKiBSWCBzbG90cyBiaXRtYXAgKi8KKwlERUNMQVJFX0JJVE1BUChibWFwLCBETE4yX01BWF9SWF9TTE9UUyk7CisKKwkvKiB1c2VkIHRvIHdhaXQgZm9yIGEgZnJlZSBSWCBzbG90ICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisKKwkvKiB1c2VkIHRvIHdhaXQgZm9yIGFuIFJYIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLworCXN0cnVjdCBkbG4yX3J4X2NvbnRleHQgc2xvdHNbRExOMl9NQVhfUlhfU0xPVFNdOworCisJLyogYXZvaWQgcmFjZXMgYmV0d2VlbiBhbGxvYy9mcmVlX3J4X3Nsb3QgYW5kIGRsbjJfcnhfdHJhbnNmZXIgKi8KKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdHJ1Y3QgZGxuMl9kZXYgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJdTggZXBfaW47CisJdTggZXBfb3V0OworCisJc3RydWN0IHVyYiAqcnhfdXJiW0RMTjJfTUFYX1VSQlNdOworCXZvaWQgKnJ4X2J1ZltETE4yX01BWF9VUkJTXTsKKworCXN0cnVjdCBkbG4yX21vZF9yeF9zbG90cyBtb2Rfcnhfc2xvdHNbRExOMl9IQU5ETEVTXTsKKworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfY2JfbGlzdDsKKwlzcGlubG9ja190IGV2ZW50X2NiX2xvY2s7CisKKwlib29sIGRpc2Nvbm5lY3Q7CisJaW50IGFjdGl2ZV90cmFuc2ZlcnM7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZGlzY29ubmVjdF93cTsKKwlzcGlubG9ja190IGRpc2Nvbm5lY3RfbG9jazsKK307CisKK3N0cnVjdCBkbG4yX2V2ZW50X2NiX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdTE2IGlkOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJZGxuMl9ldmVudF9jYl90IGNhbGxiYWNrOworfTsKKworaW50IGRsbjJfcmVnaXN0ZXJfZXZlbnRfY2Ioc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGlkLAorCQkJICAgZGxuMl9ldmVudF9jYl90IGV2ZW50X2NiKQoreworCXN0cnVjdCBkbG4yX2RldiAqZGxuMiA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgZGxuMl9ldmVudF9jYl9lbnRyeSAqaSwgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpCisJCXJldHVybiAtRU5PTUVNOworCisJZW50cnktPmlkID0gaWQ7CisJZW50cnktPmNhbGxiYWNrID0gZXZlbnRfY2I7CisJZW50cnktPnBkZXYgPSBwZGV2OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRsbjItPmV2ZW50X2NiX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaSwgJmRsbjItPmV2ZW50X2NiX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGktPmlkID09IGlkKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcmV0KQorCQlsaXN0X2FkZF9yY3UoJmVudHJ5LT5saXN0LCAmZGxuMi0+ZXZlbnRfY2JfbGlzdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbG4yLT5ldmVudF9jYl9sb2NrLCBmbGFncyk7CisKKwlpZiAocmV0KQorCQlrZnJlZShlbnRyeSk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkbG4yX3JlZ2lzdGVyX2V2ZW50X2NiKTsKKwordm9pZCBkbG4yX3VucmVnaXN0ZXJfZXZlbnRfY2Ioc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGlkKQoreworCXN0cnVjdCBkbG4yX2RldiAqZGxuMiA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgZGxuMl9ldmVudF9jYl9lbnRyeSAqaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkbG4yLT5ldmVudF9jYl9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZkbG4yLT5ldmVudF9jYl9saXN0LCBsaXN0KSB7CisJCWlmIChpLT5pZCA9PSBpZCkgeworCQkJbGlzdF9kZWxfcmN1KCZpLT5saXN0KTsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGxuMi0+ZXZlbnRfY2JfbG9jaywgZmxhZ3MpOworCisJaWYgKGZvdW5kKSB7CisJCXN5bmNocm9uaXplX3JjdSgpOworCQlrZnJlZShpKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRsbjJfdW5yZWdpc3Rlcl9ldmVudF9jYik7CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgYSB2YWxpZCB0cmFuc2ZlciBzbG90IGlzIGZvdW5kLiBJbiB0aGlzIGNhc2UgdGhlIFVSQiBtdXN0IG5vdAorICogYmUgcmVzdWJtaXR0ZWQgaW1tZWRpYXRlbHkgaW4gZGxuMl9yeCBhcyB3ZSBuZWVkIHRoZSBkYXRhIHdoZW4gZGxuMl90cmFuc2ZlcgorICogaXMgd29rZSB1cC4gSXQgd2lsbCBiZSByZXN1Ym1pdHRlZCB0aGVyZS4KKyAqLworc3RhdGljIGJvb2wgZGxuMl90cmFuc2Zlcl9jb21wbGV0ZShzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCQkgICB1MTYgaGFuZGxlLCB1MTYgcnhfc2xvdCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGxuMi0+aW50ZXJmYWNlLT5kZXY7CisJc3RydWN0IGRsbjJfbW9kX3J4X3Nsb3RzICpyeHMgPSAmZGxuMi0+bW9kX3J4X3Nsb3RzW2hhbmRsZV07CisJc3RydWN0IGRsbjJfcnhfY29udGV4dCAqcnhjOworCWJvb2wgdmFsaWRfc2xvdCA9IGZhbHNlOworCisJaWYgKHJ4X3Nsb3QgPj0gRExOMl9NQVhfUlhfU0xPVFMpCisJCWdvdG8gb3V0OworCisJcnhjID0gJnJ4cy0+c2xvdHNbcnhfc2xvdF07CisKKwkvKgorCSAqIE5vIG5lZWQgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGFzIHRoaXMgbG9jayBpcyBub3QgdGFrZW4gaW4gaW50ZXJydXB0CisJICogY29udGV4dCBlbHNld2hlcmUgaW4gdGhpcyBkcml2ZXIuIFRoaXMgZnVuY3Rpb24gKG9yIGl0cyBjYWxsZXJzKSBhcmUKKwkgKiBhbHNvIG5vdCBleHBvcnRlZCB0byBvdGhlciBtb2R1bGVzLgorCSAqLworCXNwaW5fbG9jaygmcnhzLT5sb2NrKTsKKwlpZiAocnhjLT5pbl91c2UgJiYgIXJ4Yy0+dXJiKSB7CisJCXJ4Yy0+dXJiID0gdXJiOworCQljb21wbGV0ZSgmcnhjLT5kb25lKTsKKwkJdmFsaWRfc2xvdCA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrKCZyeHMtPmxvY2spOworCitvdXQ6CisJaWYgKCF2YWxpZF9zbG90KQorCQlkZXZfd2FybihkZXYsICJiYWQvbGF0ZSByZXNwb25zZSAlZC8lZFxuIiwgaGFuZGxlLCByeF9zbG90KTsKKworCXJldHVybiB2YWxpZF9zbG90OworfQorCitzdGF0aWMgdm9pZCBkbG4yX3J1bl9ldmVudF9jYWxsYmFja3Moc3RydWN0IGRsbjJfZGV2ICpkbG4yLCB1MTYgaWQsIHUxNiBlY2hvLAorCQkJCSAgICAgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZGxuMl9ldmVudF9jYl9lbnRyeSAqaTsKKworCXJjdV9yZWFkX2xvY2soKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGksICZkbG4yLT5ldmVudF9jYl9saXN0LCBsaXN0KSB7CisJCWlmIChpLT5pZCA9PSBpZCkgeworCQkJaS0+Y2FsbGJhY2soaS0+cGRldiwgZWNobywgZGF0YSwgbGVuKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRsbjJfcngoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBkbG4yX2RldiAqZGxuMiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZGxuMl9oZWFkZXIgKmhkciA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkbG4yLT5pbnRlcmZhY2UtPmRldjsKKwl1MTYgaWQsIGVjaG8sIGhhbmRsZSwgc2l6ZTsKKwl1OCAqZGF0YTsKKwlpbnQgbGVuOworCWludCBlcnI7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwljYXNlIC1FUElQRToKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGV2X2RiZyhkZXYsICJ1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhkZXYsICJub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3QgZGxuMl9oZWFkZXIpKSB7CisJCWRldl9lcnIoZGV2LCAic2hvcnQgcmVzcG9uc2U6ICVkXG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlnb3RvIG91dDsKKwl9CisKKwloYW5kbGUgPSBsZTE2X3RvX2NwdShoZHItPmhhbmRsZSk7CisJaWQgPSBsZTE2X3RvX2NwdShoZHItPmlkKTsKKwllY2hvID0gbGUxNl90b19jcHUoaGRyLT5lY2hvKTsKKwlzaXplID0gbGUxNl90b19jcHUoaGRyLT5zaXplKTsKKworCWlmIChzaXplICE9IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlkZXZfZXJyKGRldiwgInNpemUgbWlzbWF0Y2g6IGhhbmRsZSAleCBjbWQgJXggZWNobyAleCBzaXplICVkIGFjdHVhbCAlZFxuIiwKKwkJCWhhbmRsZSwgaWQsIGVjaG8sIHNpemUsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChoYW5kbGUgPj0gRExOMl9IQU5ETEVTKSB7CisJCWRldl93YXJuKGRldiwgImludmFsaWQgaGFuZGxlICVkXG4iLCBoYW5kbGUpOworCQlnb3RvIG91dDsKKwl9CisKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBzaXplb2Yoc3RydWN0IGRsbjJfaGVhZGVyKTsKKwlsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGRsbjJfaGVhZGVyKTsKKworCWlmIChoYW5kbGUgPT0gRExOMl9IQU5ETEVfRVZFTlQpIHsKKwkJZGxuMl9ydW5fZXZlbnRfY2FsbGJhY2tzKGRsbjIsIGlkLCBlY2hvLCBkYXRhLCBsZW4pOworCX0gZWxzZSB7CisJCS8qIFVSQiB3aWxsIGJlIHJlLXN1Ym1pdHRlZCBpbiBfZGxuMl90cmFuc2ZlciAoZnJlZV9yeF9zbG90KSAqLworCQlpZiAoZGxuMl90cmFuc2Zlcl9jb21wbGV0ZShkbG4yLCB1cmIsIGhhbmRsZSwgZWNobykpCisJCQlyZXR1cm47CisJfQorCitvdXQ6CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXJyIDwgMCkKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVzdWJtaXQgUlggVVJCOiAlZFxuIiwgZXJyKTsKK30KKworc3RhdGljIHZvaWQgKmRsbjJfcHJlcF9idWYodTE2IGhhbmRsZSwgdTE2IGNtZCwgdTE2IGVjaG8sIGNvbnN0IHZvaWQgKm9idWYsCisJCQkgICBpbnQgKm9idWZfbGVuLCBnZnBfdCBnZnApCit7CisJaW50IGxlbjsKKwl2b2lkICpidWY7CisJc3RydWN0IGRsbjJfaGVhZGVyICpoZHI7CisKKwlsZW4gPSAqb2J1Zl9sZW4gKyBzaXplb2YoKmhkcik7CisJYnVmID0ga21hbGxvYyhsZW4sIGdmcCk7CisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCisJaGRyID0gKHN0cnVjdCBkbG4yX2hlYWRlciAqKWJ1ZjsKKwloZHItPmlkID0gY3B1X3RvX2xlMTYoY21kKTsKKwloZHItPnNpemUgPSBjcHVfdG9fbGUxNihsZW4pOworCWhkci0+ZWNobyA9IGNwdV90b19sZTE2KGVjaG8pOworCWhkci0+aGFuZGxlID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKKworCW1lbWNweShidWYgKyBzaXplb2YoKmhkciksIG9idWYsICpvYnVmX2xlbik7CisKKwkqb2J1Zl9sZW4gPSBsZW47CisKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgaW50IGRsbjJfc2VuZF93YWl0KHN0cnVjdCBkbG4yX2RldiAqZGxuMiwgdTE2IGhhbmRsZSwgdTE2IGNtZCwgdTE2IGVjaG8sCisJCQkgIGNvbnN0IHZvaWQgKm9idWYsIGludCBvYnVmX2xlbikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbGVuID0gb2J1Zl9sZW47CisJdm9pZCAqYnVmOworCWludCBhY3R1YWw7CisKKwlidWYgPSBkbG4yX3ByZXBfYnVmKGhhbmRsZSwgY21kLCBlY2hvLCBvYnVmLCAmbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSB1c2JfYnVsa19tc2coZGxuMi0+dXNiX2RldiwKKwkJCSAgIHVzYl9zbmRidWxrcGlwZShkbG4yLT51c2JfZGV2LCBkbG4yLT5lcF9vdXQpLAorCQkJICAgYnVmLCBsZW4sICZhY3R1YWwsIERMTjJfVVNCX1RJTUVPVVQpOworCisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIGZpbmRfZnJlZV9zbG90KHN0cnVjdCBkbG4yX2RldiAqZGxuMiwgdTE2IGhhbmRsZSwgaW50ICpzbG90KQoreworCXN0cnVjdCBkbG4yX21vZF9yeF9zbG90cyAqcnhzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGxuMi0+ZGlzY29ubmVjdCkgeworCQkqc2xvdCA9IC1FTk9ERVY7CisJCXJldHVybiB0cnVlOworCX0KKworCXJ4cyA9ICZkbG4yLT5tb2Rfcnhfc2xvdHNbaGFuZGxlXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyeHMtPmxvY2ssIGZsYWdzKTsKKworCSpzbG90ID0gZmluZF9maXJzdF96ZXJvX2JpdChyeHMtPmJtYXAsIERMTjJfTUFYX1JYX1NMT1RTKTsKKworCWlmICgqc2xvdCA8IERMTjJfTUFYX1JYX1NMT1RTKSB7CisJCXN0cnVjdCBkbG4yX3J4X2NvbnRleHQgKnJ4YyA9ICZyeHMtPnNsb3RzWypzbG90XTsKKworCQlzZXRfYml0KCpzbG90LCByeHMtPmJtYXApOworCQlyeGMtPmluX3VzZSA9IHRydWU7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhzLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gKnNsb3QgPCBETE4yX01BWF9SWF9TTE9UUzsKK30KKworc3RhdGljIGludCBhbGxvY19yeF9zbG90KHN0cnVjdCBkbG4yX2RldiAqZGxuMiwgdTE2IGhhbmRsZSkKK3sKKwlpbnQgcmV0OworCWludCBzbG90OworCisJLyoKKwkgKiBObyBuZWVkIHRvIHRpbWVvdXQgaGVyZSwgdGhlIHdhaXQgaXMgYm91bmRlZCBieSB0aGUgdGltZW91dCBpbgorCSAqIF9kbG4yX3RyYW5zZmVyLgorCSAqLworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkbG4yLT5tb2Rfcnhfc2xvdHNbaGFuZGxlXS53cSwKKwkJCQkgICAgICAgZmluZF9mcmVlX3Nsb3QoZGxuMiwgaGFuZGxlLCAmc2xvdCkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNsb3Q7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcnhfc2xvdChzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsIHUxNiBoYW5kbGUsIGludCBzbG90KQoreworCXN0cnVjdCBkbG4yX21vZF9yeF9zbG90cyAqcnhzOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZGxuMl9yeF9jb250ZXh0ICpyeGM7CisKKwlyeHMgPSAmZGxuMi0+bW9kX3J4X3Nsb3RzW2hhbmRsZV07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnhzLT5sb2NrLCBmbGFncyk7CisKKwljbGVhcl9iaXQoc2xvdCwgcnhzLT5ibWFwKTsKKworCXJ4YyA9ICZyeHMtPnNsb3RzW3Nsb3RdOworCXJ4Yy0+aW5fdXNlID0gZmFsc2U7CisJdXJiID0gcnhjLT51cmI7CisJcnhjLT51cmIgPSBOVUxMOworCXJlaW5pdF9jb21wbGV0aW9uKCZyeGMtPmRvbmUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhzLT5sb2NrLCBmbGFncyk7CisKKwlpZiAodXJiKSB7CisJCWludCBlcnI7CisJCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkbG4yLT5pbnRlcmZhY2UtPmRldjsKKworCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCQlpZiAoZXJyIDwgMCkKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlc3VibWl0IFJYIFVSQjogJWRcbiIsIGVycik7CisJfQorCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZyeHMtPndxKTsKK30KKworc3RhdGljIGludCBfZGxuMl90cmFuc2ZlcihzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsIHUxNiBoYW5kbGUsIHUxNiBjbWQsCisJCQkgIGNvbnN0IHZvaWQgKm9idWYsIHVuc2lnbmVkIG9idWZfbGVuLAorCQkJICB2b2lkICppYnVmLCB1bnNpZ25lZCAqaWJ1Zl9sZW4pCit7CisJaW50IHJldCA9IDA7CisJaW50IHJ4X3Nsb3Q7CisJc3RydWN0IGRsbjJfcmVzcG9uc2UgKnJzcDsKKwlzdHJ1Y3QgZGxuMl9yeF9jb250ZXh0ICpyeGM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRsbjItPmludGVyZmFjZS0+ZGV2OworCWNvbnN0IHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IERMTjJfVVNCX1RJTUVPVVQgKiBIWiAvIDEwMDA7CisJc3RydWN0IGRsbjJfbW9kX3J4X3Nsb3RzICpyeHMgPSAmZGxuMi0+bW9kX3J4X3Nsb3RzW2hhbmRsZV07CisJaW50IHNpemU7CisKKwlzcGluX2xvY2soJmRsbjItPmRpc2Nvbm5lY3RfbG9jayk7CisJaWYgKCFkbG4yLT5kaXNjb25uZWN0KQorCQlkbG4yLT5hY3RpdmVfdHJhbnNmZXJzKys7CisJZWxzZQorCQlyZXQgPSAtRU5PREVWOworCXNwaW5fdW5sb2NrKCZkbG4yLT5kaXNjb25uZWN0X2xvY2spOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJ4X3Nsb3QgPSBhbGxvY19yeF9zbG90KGRsbjIsIGhhbmRsZSk7CisJaWYgKHJ4X3Nsb3QgPCAwKSB7CisJCXJldCA9IHJ4X3Nsb3Q7CisJCWdvdG8gb3V0X2RlY3I7CisJfQorCisJcmV0ID0gZGxuMl9zZW5kX3dhaXQoZGxuMiwgaGFuZGxlLCBjbWQsIHJ4X3Nsb3QsIG9idWYsIG9idWZfbGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIlVTQiB3cml0ZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dF9mcmVlX3J4X3Nsb3Q7CisJfQorCisJcnhjID0gJnJ4cy0+c2xvdHNbcnhfc2xvdF07CisKKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmcnhjLT5kb25lLCB0aW1lb3V0KTsKKwlpZiAocmV0IDw9IDApIHsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIG91dF9mcmVlX3J4X3Nsb3Q7CisJfSBlbHNlIHsKKwkJcmV0ID0gMDsKKwl9CisKKwlpZiAoZGxuMi0+ZGlzY29ubmVjdCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlX3J4X3Nsb3Q7CisJfQorCisJLyogaWYgd2UgZ290IGhlcmUgd2Uga25vdyB0aGF0IHRoZSByZXNwb25zZSBoZWFkZXIgaGFzIGJlZW4gY2hlY2tlZCAqLworCXJzcCA9IHJ4Yy0+dXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc2l6ZSA9IGxlMTZfdG9fY3B1KHJzcC0+aGRyLnNpemUpOworCisJaWYgKHNpemUgPCBzaXplb2YoKnJzcCkpIHsKKwkJcmV0ID0gLUVQUk9UTzsKKwkJZ290byBvdXRfZnJlZV9yeF9zbG90OworCX0KKworCWlmIChsZTE2X3RvX2NwdShyc3AtPnJlc3VsdCkgPiAweDgwKSB7CisJCWRldl9kYmcoZGV2LCAiJWQgcmVjZWl2ZWQgcmVzcG9uc2Ugd2l0aCBlcnJvciAlZFxuIiwKKwkJCWhhbmRsZSwgbGUxNl90b19jcHUocnNwLT5yZXN1bHQpKTsKKwkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJZ290byBvdXRfZnJlZV9yeF9zbG90OworCX0KKworCWlmICghaWJ1ZikKKwkJZ290byBvdXRfZnJlZV9yeF9zbG90OworCisJaWYgKCppYnVmX2xlbiA+IHNpemUgLSBzaXplb2YoKnJzcCkpCisJCSppYnVmX2xlbiA9IHNpemUgLSBzaXplb2YoKnJzcCk7CisKKwltZW1jcHkoaWJ1ZiwgcnNwICsgMSwgKmlidWZfbGVuKTsKKworb3V0X2ZyZWVfcnhfc2xvdDoKKwlmcmVlX3J4X3Nsb3QoZGxuMiwgaGFuZGxlLCByeF9zbG90KTsKK291dF9kZWNyOgorCXNwaW5fbG9jaygmZGxuMi0+ZGlzY29ubmVjdF9sb2NrKTsKKwlkbG4yLT5hY3RpdmVfdHJhbnNmZXJzLS07CisJc3Bpbl91bmxvY2soJmRsbjItPmRpc2Nvbm5lY3RfbG9jayk7CisJaWYgKGRsbjItPmRpc2Nvbm5lY3QpCisJCXdha2VfdXAoJmRsbjItPmRpc2Nvbm5lY3Rfd3EpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGRsbjJfdHJhbnNmZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGNtZCwKKwkJICBjb25zdCB2b2lkICpvYnVmLCB1bnNpZ25lZCBvYnVmX2xlbiwKKwkJICB2b2lkICppYnVmLCB1bnNpZ25lZCAqaWJ1Zl9sZW4pCit7CisJc3RydWN0IGRsbjJfcGxhdGZvcm1fZGF0YSAqZGxuMl9wZGF0YTsKKwlzdHJ1Y3QgZGxuMl9kZXYgKmRsbjI7CisJdTE2IGhhbmRsZTsKKworCWRsbjIgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJZGxuMl9wZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CisJaGFuZGxlID0gZGxuMl9wZGF0YS0+aGFuZGxlOworCisJcmV0dXJuIF9kbG4yX3RyYW5zZmVyKGRsbjIsIGhhbmRsZSwgY21kLCBvYnVmLCBvYnVmX2xlbiwgaWJ1ZiwKKwkJCSAgICAgIGlidWZfbGVuKTsKK30KK0VYUE9SVF9TWU1CT0woZGxuMl90cmFuc2Zlcik7CisKK3N0YXRpYyBpbnQgZGxuMl9jaGVja19odyhzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIpCit7CisJaW50IHJldDsKKwlfX2xlMzIgaHdfdHlwZTsKKwlpbnQgbGVuID0gc2l6ZW9mKGh3X3R5cGUpOworCisJcmV0ID0gX2RsbjJfdHJhbnNmZXIoZGxuMiwgRExOMl9IQU5ETEVfQ1RSTCwgQ01EX0dFVF9ERVZJQ0VfVkVSLAorCQkJICAgICBOVUxMLCAwLCAmaHdfdHlwZSwgJmxlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKGxlbiA8IHNpemVvZihod190eXBlKSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlpZiAobGUzMl90b19jcHUoaHdfdHlwZSkgIT0gRExOMl9IV19JRCkgeworCQlkZXZfZXJyKCZkbG4yLT5pbnRlcmZhY2UtPmRldiwgIkRldmljZSBJRCAweCV4IG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlsZTMyX3RvX2NwdShod190eXBlKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsbjJfcHJpbnRfc2VyaWFsbm8oc3RydWN0IGRsbjJfZGV2ICpkbG4yKQoreworCWludCByZXQ7CisJX19sZTMyIHNlcmlhbF9ubzsKKwlpbnQgbGVuID0gc2l6ZW9mKHNlcmlhbF9ubyk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRsbjItPmludGVyZmFjZS0+ZGV2OworCisJcmV0ID0gX2RsbjJfdHJhbnNmZXIoZGxuMiwgRExOMl9IQU5ETEVfQ1RSTCwgQ01EX0dFVF9ERVZJQ0VfU04sIE5VTEwsIDAsCisJCQkgICAgICZzZXJpYWxfbm8sICZsZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChsZW4gPCBzaXplb2Yoc2VyaWFsX25vKSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlkZXZfaW5mbyhkZXYsICJEaW9sYW4gRExOMiBzZXJpYWwgJXVcbiIsIGxlMzJfdG9fY3B1KHNlcmlhbF9ubykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9od19pbml0KHN0cnVjdCBkbG4yX2RldiAqZGxuMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZGxuMl9jaGVja19odyhkbG4yKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBkbG4yX3ByaW50X3NlcmlhbG5vKGRsbjIpOworfQorCitzdGF0aWMgdm9pZCBkbG4yX2ZyZWVfcnhfdXJicyhzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRExOMl9NQVhfVVJCUzsgaSsrKSB7CisJCXVzYl9raWxsX3VyYihkbG4yLT5yeF91cmJbaV0pOworCQl1c2JfZnJlZV91cmIoZGxuMi0+cnhfdXJiW2ldKTsKKwkJa2ZyZWUoZGxuMi0+cnhfYnVmW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRsbjJfZnJlZShzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIpCit7CisJZGxuMl9mcmVlX3J4X3VyYnMoZGxuMik7CisJdXNiX3B1dF9kZXYoZGxuMi0+dXNiX2Rldik7CisJa2ZyZWUoZGxuMik7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zZXR1cF9yeF91cmJzKHN0cnVjdCBkbG4yX2RldiAqZGxuMiwKKwkJCSAgICAgIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmhvc3RpZikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCWNvbnN0IGludCByeF9tYXhfc2l6ZSA9IERMTjJfUlhfQlVGX1NJWkU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRsbjItPmludGVyZmFjZS0+ZGV2OworCisJZm9yIChpID0gMDsgaSA8IERMTjJfTUFYX1VSQlM7IGkrKykgeworCQlkbG4yLT5yeF9idWZbaV0gPSBrbWFsbG9jKHJ4X21heF9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkbG4yLT5yeF9idWZbaV0pCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlkbG4yLT5yeF91cmJbaV0gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIWRsbjItPnJ4X3VyYltpXSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXVzYl9maWxsX2J1bGtfdXJiKGRsbjItPnJ4X3VyYltpXSwgZGxuMi0+dXNiX2RldiwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShkbG4yLT51c2JfZGV2LCBkbG4yLT5lcF9pbiksCisJCQkJICBkbG4yLT5yeF9idWZbaV0sIHJ4X21heF9zaXplLCBkbG4yX3J4LCBkbG4yKTsKKworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihkbG4yLT5yeF91cmJbaV0sIEdGUF9LRVJORUwpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc3VibWl0IFJYIFVSQjogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGxuMl9wbGF0Zm9ybV9kYXRhIGRsbjJfcGRhdGFfZ3BpbyA9IHsKKwkuaGFuZGxlID0gRExOMl9IQU5ETEVfR1BJTywKK307CisKKy8qIE9ubHkgb25lIEkyQyBwb3J0IHNlZW1zIHRvIGJlIHN1cHBvcnRlZCBvbiBjdXJyZW50IGhhcmR3YXJlICovCitzdGF0aWMgc3RydWN0IGRsbjJfcGxhdGZvcm1fZGF0YSBkbG4yX3BkYXRhX2kyYyA9IHsKKwkuaGFuZGxlID0gRExOMl9IQU5ETEVfSTJDLAorCS5wb3J0ID0gMCwKK307CisKKy8qIE9ubHkgb25lIFNQSSBwb3J0IHN1cHBvcnRlZCAqLworc3RhdGljIHN0cnVjdCBkbG4yX3BsYXRmb3JtX2RhdGEgZGxuMl9wZGF0YV9zcGkgPSB7CisJLmhhbmRsZSA9IERMTjJfSEFORExFX1NQSSwKKwkucG9ydCA9IDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1mZF9jZWxsIGRsbjJfZGV2c1tdID0geworCXsKKwkJLm5hbWUgPSAiZGxuMi1ncGlvIiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGxuMl9wZGF0YV9ncGlvLAorCQkucGRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZGxuMl9wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiZGxuMi1pMmMiLAorCQkucGxhdGZvcm1fZGF0YSA9ICZkbG4yX3BkYXRhX2kyYywKKwkJLnBkYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGRsbjJfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gImRsbjItc3BpIiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGxuMl9wZGF0YV9zcGksCisJCS5wZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkbG4yX3BsYXRmb3JtX2RhdGEpLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBkbG4yX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IGksIGo7CisKKwkvKiBkb24ndCBhbGxvdyBzdGFydGluZyBuZXcgdHJhbnNmZXJzICovCisJc3Bpbl9sb2NrKCZkbG4yLT5kaXNjb25uZWN0X2xvY2spOworCWRsbjItPmRpc2Nvbm5lY3QgPSB0cnVlOworCXNwaW5fdW5sb2NrKCZkbG4yLT5kaXNjb25uZWN0X2xvY2spOworCisJLyogY2FuY2VsIGluIHByb2dyZXNzIHRyYW5zZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBETE4yX0hBTkRMRVM7IGkrKykgeworCQlzdHJ1Y3QgZGxuMl9tb2Rfcnhfc2xvdHMgKnJ4cyA9ICZkbG4yLT5tb2Rfcnhfc2xvdHNbaV07CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cy0+bG9jaywgZmxhZ3MpOworCisJCS8qIGNhbmNlbCBhbGwgcmVzcG9uc2Ugd2FpdGVycyAqLworCQlmb3IgKGogPSAwOyBqIDwgRExOMl9NQVhfUlhfU0xPVFM7IGorKykgeworCQkJc3RydWN0IGRsbjJfcnhfY29udGV4dCAqcnhjID0gJnJ4cy0+c2xvdHNbal07CisKKwkJCWlmIChyeGMtPmluX3VzZSkKKwkJCQljb21wbGV0ZSgmcnhjLT5kb25lKTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cy0+bG9jaywgZmxhZ3MpOworCX0KKworCS8qIHdhaXQgZm9yIHRyYW5zZmVycyB0byBlbmQgKi8KKwl3YWl0X2V2ZW50KGRsbjItPmRpc2Nvbm5lY3Rfd3EsICFkbG4yLT5hY3RpdmVfdHJhbnNmZXJzKTsKKworCW1mZF9yZW1vdmVfZGV2aWNlcygmaW50ZXJmYWNlLT5kZXYpOworCisJZGxuMl9mcmVlKGRsbjIpOworfQorCitzdGF0aWMgaW50IGRsbjJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnVzYl9pZCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpob3N0aWYgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbnRlcmZhY2UtPmRldjsKKwlzdHJ1Y3QgZGxuMl9kZXYgKmRsbjI7CisJaW50IHJldDsKKwlpbnQgaSwgajsKKworCWlmIChob3N0aWYtPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAwIHx8CisJICAgIGhvc3RpZi0+ZGVzYy5iTnVtRW5kcG9pbnRzIDwgMikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkbG4yID0ga3phbGxvYyhzaXplb2YoKmRsbjIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRsbjIpCisJCXJldHVybiAtRU5PTUVNOworCisJZGxuMi0+ZXBfb3V0ID0gaG9zdGlmLT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJZGxuMi0+ZXBfaW4gPSBob3N0aWYtPmVuZHBvaW50WzFdLmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKwlkbG4yLT51c2JfZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKKwlkbG4yLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRsbjIpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRsbjItPmRpc2Nvbm5lY3Rfd3EpOworCisJZm9yIChpID0gMDsgaSA8IERMTjJfSEFORExFUzsgaSsrKSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRsbjItPm1vZF9yeF9zbG90c1tpXS53cSk7CisJCXNwaW5fbG9ja19pbml0KCZkbG4yLT5tb2Rfcnhfc2xvdHNbaV0ubG9jayk7CisJCWZvciAoaiA9IDA7IGogPCBETE4yX01BWF9SWF9TTE9UUzsgaisrKQorCQkJaW5pdF9jb21wbGV0aW9uKCZkbG4yLT5tb2Rfcnhfc2xvdHNbaV0uc2xvdHNbal0uZG9uZSk7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmRsbjItPmV2ZW50X2NiX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkbG4yLT5kaXNjb25uZWN0X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZkbG4yLT5ldmVudF9jYl9saXN0KTsKKworCXJldCA9IGRsbjJfc2V0dXBfcnhfdXJicyhkbG4yLCBob3N0aWYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2NsZWFudXA7CisKKwlyZXQgPSBkbG4yX2h3X2luaXQoZGxuMik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBoYXJkd2FyZVxuIik7CisJCWdvdG8gb3V0X2NsZWFudXA7CisJfQorCisJcmV0ID0gbWZkX2FkZF9ob3RwbHVnX2RldmljZXMoZGV2LCBkbG4yX2RldnMsIEFSUkFZX1NJWkUoZGxuMl9kZXZzKSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBtZmQgZGV2aWNlcyB0byBjb3JlXG4iKTsKKwkJZ290byBvdXRfY2xlYW51cDsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2NsZWFudXA6CisJZGxuMl9mcmVlKGRsbjIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRsbjJfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHhhMjU3LCAweDIwMTMpIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGxuMl90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkbG4yX2RyaXZlciA9IHsKKwkubmFtZSA9ICJkbG4yIiwKKwkucHJvYmUgPSBkbG4yX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZGxuMl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGRsbjJfdGFibGUsCit9OworCittb2R1bGVfdXNiX2RyaXZlcihkbG4yX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIk9jdGF2aWFuIFB1cmRpbGEgPG9jdGF2aWFuLnB1cmRpbGFAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb3JlIGRyaXZlciBmb3IgdGhlIERpb2xhbiBETE4yIGludGVyZmFjZSBhZGFwdGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9scGNfc2NoLmMgYi9kcml2ZXJzL21mZC9scGNfc2NoLmMKaW5kZXggYzk4MGRhNC4uNWMzOGRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvbHBjX3NjaC5jCisrKyBiL2RyaXZlcnMvbWZkL2xwY19zY2guYwpAQCAtMTkzLDExICsxOTMsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAwLCBscGNfc2NoX2NlbGxzLCBjZWxscywgTlVMTCwgMCwgTlVMTCk7Ci0JaWYgKHJldCkKLQkJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAwLCBscGNfc2NoX2NlbGxzLCBjZWxscywgTlVMTCwgMCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGxwY19zY2hfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tYXgxNDU3Ny5jIGIvZHJpdmVycy9tZmQvbWF4MTQ1NzcuYwppbmRleCBkZTk2YjdmLi4zYmY4ZGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tYXgxNDU3Ny5jCisrKyBiL2RyaXZlcnMvbWZkL21heDE0NTc3LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogbWF4MTQ1NzcuYyAtIG1mZCBjb3JlIGRyaXZlciBmb3IgdGhlIE1heGltIDE0NTc3Lzc3ODM2CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Rybm9pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKiBDaGFud29vIENob2kgPGN3MDAuY2hvaUBzYW1zdW5nLmNvbT4KICAqIEtyenlzenRvZiBLb3psb3dza2kgPGsua296bG93c2tpQHNhbXN1bmcuY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21heDc3NjkzLmMgYi9kcml2ZXJzL21mZC9tYXg3NzY5My5jCmluZGV4IDcxMTc3M2UuLmExNTk1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21heDc3NjkzLmMKKysrIGIvZHJpdmVycy9tZmQvbWF4Nzc2OTMuYwpAQCAtNDMsOSArNDMsMTUgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBtYXg3NzY5M19kZXZzW10gPSB7CiAJeyAubmFtZSA9ICJtYXg3NzY5My1wbWljIiwgfSwKLQl7IC5uYW1lID0gIm1heDc3NjkzLWNoYXJnZXIiLCB9LAorCXsKKwkJLm5hbWUgPSAibWF4Nzc2OTMtY2hhcmdlciIsCisJCS5vZl9jb21wYXRpYmxlID0gIm1heGltLG1heDc3NjkzLWNoYXJnZXIiLAorCX0sCiAJeyAubmFtZSA9ICJtYXg3NzY5My1tdWljIiwgfSwKLQl7IC5uYW1lID0gIm1heDc3NjkzLWhhcHRpYyIsIH0sCisJeworCQkubmFtZSA9ICJtYXg3NzY5My1oYXB0aWMiLAorCQkub2ZfY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY5My1oYXB0aWMiLAorCX0sCiAJewogCQkubmFtZSA9ICJtYXg3NzY5My1mbGFzaCIsCiAJCS5vZl9jb21wYXRpYmxlID0gIm1heGltLG1heDc3NjkzLWZsYXNoIiwKQEAgLTE0Nyw2ICsxNTMsMTIgQEAKIAkubnVtX2lycXMJCT0gQVJSQVlfU0laRShtYXg3NzY5M19tdWljX2lycXMpLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1heDc3NjkzX3JlZ21hcF9oYXB0aWNfY29uZmlnID0geworCS5yZWdfYml0cyA9IDgsCisJLnZhbF9iaXRzID0gOCwKKwkubWF4X3JlZ2lzdGVyID0gTUFYNzc2OTNfSEFQVElDX1JFR19FTkQsCit9OworCiBzdGF0aWMgaW50IG1heDc3NjkzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewpAQCAtMTk2LDYgKzIwOCwxNSBAQAogCX0KIAlpMmNfc2V0X2NsaWVudGRhdGEobWF4Nzc2OTMtPmhhcHRpYywgbWF4Nzc2OTMpOwogCisJbWF4Nzc2OTMtPnJlZ21hcF9oYXB0aWMgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhtYXg3NzY5My0+aGFwdGljLAorCQkJCQkmbWF4Nzc2OTNfcmVnbWFwX2hhcHRpY19jb25maWcpOworCWlmIChJU19FUlIobWF4Nzc2OTMtPnJlZ21hcF9oYXB0aWMpKSB7CisJCXJldCA9IFBUUl9FUlIobWF4Nzc2OTMtPnJlZ21hcF9oYXB0aWMpOworCQlkZXZfZXJyKG1heDc3NjkzLT5kZXYsCisJCQkiZmFpbGVkIHRvIGluaXRpYWxpemUgaGFwdGljIHJlZ2lzdGVyIG1hcDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZ21hcDsKKwl9CisKIAkvKgogCSAqIEluaXRpYWxpemUgcmVnaXN0ZXIgbWFwIGZvciBNVUlDIGRldmljZSBiZWNhdXNlIHVzZSByZWdtYXAtbXVpYwogCSAqIGluc3RhbmNlIG9mIE1VSUMgZGV2aWNlIHdoZW4gaXJxIG9mIG1heDc3NjkzIGlzIGluaXRpYWxpemVkCkBAIC0yMDcsNyArMjI4LDcgQEAKIAkJcmV0ID0gUFRSX0VSUihtYXg3NzY5My0+cmVnbWFwX211aWMpOwogCQlkZXZfZXJyKG1heDc3NjkzLT5kZXYsCiAJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIHJlZ2lzdGVyIG1hcDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX3JlZ21hcF9tdWljOworCQlnb3RvIGVycl9yZWdtYXA7CiAJfQogCiAJcmV0ID0gcmVnbWFwX2FkZF9pcnFfY2hpcChtYXg3NzY5My0+cmVnbWFwLCBtYXg3NzY5My0+aXJxLApAQCAtMjE3LDcgKzIzOCw3IEBACiAJCQkJJm1heDc3NjkzLT5pcnFfZGF0YV9sZWQpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihtYXg3NzY5My0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBpcnEgY2hpcDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX3JlZ21hcF9tdWljOworCQlnb3RvIGVycl9yZWdtYXA7CiAJfQogCiAJcmV0ID0gcmVnbWFwX2FkZF9pcnFfY2hpcChtYXg3NzY5My0+cmVnbWFwLCBtYXg3NzY5My0+aXJxLApAQCAtMjgwLDcgKzMwMSw3IEBACiAJcmVnbWFwX2RlbF9pcnFfY2hpcChtYXg3NzY5My0+aXJxLCBtYXg3NzY5My0+aXJxX2RhdGFfdG9wc3lzKTsKIGVycl9pcnFfdG9wc3lzOgogCXJlZ21hcF9kZWxfaXJxX2NoaXAobWF4Nzc2OTMtPmlycSwgbWF4Nzc2OTMtPmlycV9kYXRhX2xlZCk7Ci1lcnJfcmVnbWFwX211aWM6CitlcnJfcmVnbWFwOgogCWkyY191bnJlZ2lzdGVyX2RldmljZShtYXg3NzY5My0+aGFwdGljKTsKIGVycl9pMmNfaGFwdGljOgogCWkyY191bnJlZ2lzdGVyX2RldmljZShtYXg3NzY5My0+bXVpYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tZmQtY29yZS5jIGIvZHJpdmVycy9tZmQvbWZkLWNvcmUuYwppbmRleCBmMzMzOGZlLi4yYTg3ZjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tZmQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKQEAgLTEyNSw5ICsxMjUsMTUgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOwogCWludCByZXQgPSAtRU5PTUVNOworCWludCBwbGF0Zm9ybV9pZDsKIAlpbnQgcjsKIAotCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoY2VsbC0+bmFtZSwgaWQgKyBjZWxsLT5pZCk7CisJaWYgKGlkIDwgMCkKKwkJcGxhdGZvcm1faWQgPSBpZDsKKwllbHNlCisJCXBsYXRmb3JtX2lkID0gaWQgKyBjZWxsLT5pZDsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoY2VsbC0+bmFtZSwgcGxhdGZvcm1faWQpOwogCWlmICghcGRldikKIAkJZ290byBmYWlsX2FsbG9jOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9ydHM1MjI3LmMgYi9kcml2ZXJzL21mZC9ydHM1MjI3LmMKaW5kZXggOWM4ZWVjOC4uMzI0MDc0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvcnRzNTIyNy5jCisrKyBiL2RyaXZlcnMvbWZkL3J0czUyMjcuYwpAQCAtMTMwLDYgKzEzMCwxMiBAQAogCiBzdGF0aWMgaW50IHJ0czUyMjdfb3B0aW1pemVfcGh5KHN0cnVjdCBydHN4X3BjciAqcGNyKQogeworCWludCBlcnI7CisKKwllcnIgPSBydHN4X2dvcHNfcG1fcmVzZXQocGNyKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCS8qIE9wdGltaXplIFJYIHNlbnNpdGl2aXR5ICovCiAJcmV0dXJuIHJ0c3hfcGNpX3dyaXRlX3BoeV9yZWdpc3RlcihwY3IsIDB4MDAsIDB4QkE0Mik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9ydHM1MjQ5LmMgYi9kcml2ZXJzL21mZC9ydHM1MjQ5LmMKaW5kZXggNTczZGU3Yi4uY2Y0MjVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvcnRzNTI0OS5jCisrKyBiL2RyaXZlcnMvbWZkL3J0czUyNDkuYwpAQCAtMTMwLDYgKzEzMCwxMCBAQAogewogCWludCBlcnI7CiAKKwllcnIgPSBydHN4X2dvcHNfcG1fcmVzZXQocGNyKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCWVyciA9IHJ0c3hfcGNpX3dyaXRlX3BoeV9yZWdpc3RlcihwY3IsIFBIWV9SRUdfUkVWLAogCQkJUEhZX1JFR19SRVZfUkVTViB8IFBIWV9SRUdfUkVWX1JYSURMRV9MQVRDSEVEIHwKIAkJCVBIWV9SRUdfUkVWX1AxX0VOIHwgUEhZX1JFR19SRVZfUlhJRExFX0VOIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3J0c3hfZ29wcy5jIGIvZHJpdmVycy9tZmQvcnRzeF9nb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhOThjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3J0c3hfZ29wcy5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qIERyaXZlciBmb3IgUmVhbHRlayBQQ0ktRXhwcmVzcyBjYXJkIHJlYWRlcgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIEF1dGhvcjoKKyAqICAgTWlja3kgQ2hpbmcgPG1pY2t5X2NoaW5nQHJlYWxzaWwuY29tLmNuPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tZmQvcnRzeF9wY2kuaD4KKyNpbmNsdWRlICJydHN4X3Bjci5oIgorCitpbnQgcnRzeF9nb3BzX3BtX3Jlc2V0KHN0cnVjdCBydHN4X3BjciAqcGNyKQoreworCWludCBlcnI7CisKKwkvKiBpbml0IGFzcG0gKi8KKwlydHN4X3BjaV93cml0ZV9yZWdpc3RlcihwY3IsIEFTUE1fRk9SQ0VfQ1RMLCAweEZGLCAweDAwKTsKKwllcnIgPSBydHN4X3BjaV91cGRhdGVfY2ZnX2J5dGUocGNyLCBMQ1RMUiwgfkxDVExSX0FTUE1fQ1RMX01BU0ssIDB4MDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogcmVzZXQgUE1fQ1RSTDMgYmVmb3JlIHNlbmQgYnVmZmVyIGNtZCAqLworCXJldHVybiBydHN4X3BjaV93cml0ZV9yZWdpc3RlcihwY3IsIFBNX0NUUkwzLCBEM19ERUxJTktfTU9ERV9FTiwgMHgwMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9ydHN4X3Bjci5oIGIvZHJpdmVycy9tZmQvcnRzeF9wY3IuaAppbmRleCAwN2U0YzJlLi5mZTJiYmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9ydHN4X3Bjci5oCisrKyBiL2RyaXZlcnMvbWZkL3J0c3hfcGNyLmgKQEAgLTcyLDQgKzcyLDcgQEAKIAlwY3ItPm1zX3B1bGxfY3RsX2Rpc2FibGVfdGJsID0gX19kZXZpY2UjI19tc19wdWxsX2N0bF9kaXNhYmxlX3RibDsgXAogfSB3aGlsZSAoMCkKIAorLyogZ2VuZXJpYyBvcGVyYXRpb25zICovCitpbnQgcnRzeF9nb3BzX3BtX3Jlc2V0KHN0cnVjdCBydHN4X3BjciAqcGNyKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9ydHN4X3VzYi5jIGIvZHJpdmVycy9tZmQvcnRzeF91c2IuYwppbmRleCA5Y2Y5OGQxLi5kYmRkMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9ydHN4X3VzYi5jCisrKyBiL2RyaXZlcnMvbWZkL3J0c3hfdXNiLmMKQEAgLTY0Nyw4ICs2NDcsOCBAQAogCS8qIGluaXRpYWxpemUgVVNCIFNHIHRyYW5zZmVyIHRpbWVyICovCiAJc2V0dXBfdGltZXIoJnVjci0+c2dfdGltZXIsIHJ0c3hfdXNiX3NnX3RpbWVkX291dCwgKHVuc2lnbmVkIGxvbmcpIHVjcik7CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMoJmludGYtPmRldiwgdXNiX2Rldi0+ZGV2bnVtLCBydHN4X3VzYl9jZWxscywKLQkJCUFSUkFZX1NJWkUocnRzeF91c2JfY2VsbHMpLCBOVUxMLCAwLCBOVUxMKTsKKwlyZXQgPSBtZmRfYWRkX2hvdHBsdWdfZGV2aWNlcygmaW50Zi0+ZGV2LCBydHN4X3VzYl9jZWxscywKKwkJCQkgICAgICBBUlJBWV9TSVpFKHJ0c3hfdXNiX2NlbGxzKSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfaW5pdF9mYWlsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zZWMtY29yZS5jIGIvZHJpdmVycy9tZmQvc2VjLWNvcmUuYwppbmRleCBkYmE3ZTJiLi4wYTdiYzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zZWMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3NlYy1jb3JlLmMKQEAgLTI3LDExICsyNywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBhMDEuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wczExLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBzMTQuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wdTAyLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczVtODc2My5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3M1bTg3NjcuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1mZF9jZWxsIHM1bTg3NTFfZGV2c1tdID0gewpAQCAtNzQsNiArNzQsMTUgQEAKIAl9CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG1mZF9jZWxsIHMybXBzMTNfZGV2c1tdID0geworCXsgLm5hbWUgPSAiczJtcHMxMy1wbWljIiwgfSwKKwl7IC5uYW1lID0gInMybXBzMTMtcnRjIiwgfSwKKwl7CisJCS5uYW1lID0gInMybXBzMTMtY2xrIiwKKwkJLm9mX2NvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczEzLWNsayIsCisJfSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgczJtcHMxNF9kZXZzW10gPSB7CiAJewogCQkubmFtZSA9ICJzMm1wczE0LXBtaWMiLApAQCAtMTA4LDYgKzExNyw5IEBACiAJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsczJtcHMxMS1wbWljIiwKIAkJLmRhdGEgPSAodm9pZCAqKVMyTVBTMTFYLAogCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczEzLXBtaWMiLAorCQkuZGF0YSA9ICh2b2lkICopUzJNUFMxM1gsCisJfSwgewogCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMybXBzMTQtcG1pYyIsCiAJCS5kYXRhID0gKHZvaWQgKilTMk1QUzE0WCwKIAl9LCB7CkBAIC0xOTQsNiArMjA2LDE1IEBACiAJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9GTEFULAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHMybXBzMTNfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDgsCisKKwkubWF4X3JlZ2lzdGVyID0gUzJNUFMxM19SRUdfTERPRFNDSDUsCisJLnZvbGF0aWxlX3JlZyA9IHMybXBzMTFfdm9sYXRpbGUsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9GTEFULAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHMybXBzMTRfcmVnbWFwX2NvbmZpZyA9IHsKIAkucmVnX2JpdHMgPSA4LAogCS52YWxfYml0cyA9IDgsCkBAIC0zMjUsNiArMzQ2LDkgQEAKIAljYXNlIFMyTVBTMTFYOgogCQlyZWdtYXAgPSAmczJtcHMxMV9yZWdtYXBfY29uZmlnOwogCQlicmVhazsKKwljYXNlIFMyTVBTMTNYOgorCQlyZWdtYXAgPSAmczJtcHMxM19yZWdtYXBfY29uZmlnOworCQlicmVhazsKIAljYXNlIFMyTVBTMTRYOgogCQlyZWdtYXAgPSAmczJtcHMxNF9yZWdtYXBfY29uZmlnOwogCQlicmVhazsKQEAgLTM3OCw2ICs0MDIsMTAgQEAKIAkJc2VjX2RldnMgPSBzMm1wczExX2RldnM7CiAJCW51bV9zZWNfZGV2cyA9IEFSUkFZX1NJWkUoczJtcHMxMV9kZXZzKTsKIAkJYnJlYWs7CisJY2FzZSBTMk1QUzEzWDoKKwkJc2VjX2RldnMgPSBzMm1wczEzX2RldnM7CisJCW51bV9zZWNfZGV2cyA9IEFSUkFZX1NJWkUoczJtcHMxM19kZXZzKTsKKwkJYnJlYWs7CiAJY2FzZSBTMk1QUzE0WDoKIAkJc2VjX2RldnMgPSBzMm1wczE0X2RldnM7CiAJCW51bV9zZWNfZGV2cyA9IEFSUkFZX1NJWkUoczJtcHMxNF9kZXZzKTsKQEAgLTQzMiwxNSArNDYwLDYgQEAKIAkgKi8KIAlkaXNhYmxlX2lycShzZWNfcG1pYy0+aXJxKTsKIAotCXN3aXRjaCAoc2VjX3BtaWMtPmRldmljZV90eXBlKSB7Ci0JY2FzZSBTMk1QUzE0WDoKLQljYXNlIFMyTVBVMDI6Ci0JCXJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmUoUE1fU1VTUEVORF9NRU0pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc2VjLWlycS5jIGIvZHJpdmVycy9tZmQvc2VjLWlycS5jCmluZGV4IGY5YTU3ODYuLmJhODZhOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3NlYy1pcnEuYworKysgYi9kcml2ZXJzL21mZC9zZWMtaXJxLmMKQEAgLTM4OSwxNCArMzg5LDIyIEBACiAJLmFja19iYXNlID0gUzJNUFMxMV9SRUdfSU5UMSwKIH07CiAKKyNkZWZpbmUgUzJNUFMxWF9JUlFfQ0hJUF9DT01NT05fREFUQQkJXAorCS5pcnFzID0gczJtcHMxNF9pcnFzLAkJCVwKKwkubnVtX2lycXMgPSBBUlJBWV9TSVpFKHMybXBzMTRfaXJxcyksCVwKKwkubnVtX3JlZ3MgPSAzLAkJCQlcCisJLnN0YXR1c19iYXNlID0gUzJNUFMxNF9SRUdfSU5UMSwJXAorCS5tYXNrX2Jhc2UgPSBTMk1QUzE0X1JFR19JTlQxTSwJCVwKKwkuYWNrX2Jhc2UgPSBTMk1QUzE0X1JFR19JTlQxCQlcCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycV9jaGlwIHMybXBzMTNfaXJxX2NoaXAgPSB7CisJLm5hbWUgPSAiczJtcHMxMyIsCisJUzJNUFMxWF9JUlFfQ0hJUF9DT01NT05fREFUQSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycV9jaGlwIHMybXBzMTRfaXJxX2NoaXAgPSB7CiAJLm5hbWUgPSAiczJtcHMxNCIsCi0JLmlycXMgPSBzMm1wczE0X2lycXMsCi0JLm51bV9pcnFzID0gQVJSQVlfU0laRShzMm1wczE0X2lycXMpLAotCS5udW1fcmVncyA9IDMsCi0JLnN0YXR1c19iYXNlID0gUzJNUFMxNF9SRUdfSU5UMSwKLQkubWFza19iYXNlID0gUzJNUFMxNF9SRUdfSU5UMU0sCi0JLmFja19iYXNlID0gUzJNUFMxNF9SRUdfSU5UMSwKKwlTMk1QUzFYX0lSUV9DSElQX0NPTU1PTl9EQVRBLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfaXJxX2NoaXAgczJtcHUwMl9pcnFfY2hpcCA9IHsKQEAgLTQ1Miw2ICs0NjAsOSBAQAogCWNhc2UgUzJNUFMxMVg6CiAJCXNlY19pcnFfY2hpcCA9ICZzMm1wczExX2lycV9jaGlwOwogCQlicmVhazsKKwljYXNlIFMyTVBTMTNYOgorCQlzZWNfaXJxX2NoaXAgPSAmczJtcHMxM19pcnFfY2hpcDsKKwkJYnJlYWs7CiAJY2FzZSBTMk1QUzE0WDoKIAkJc2VjX2lycV9jaGlwID0gJnMybXBzMTRfaXJxX2NoaXA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc3lzY29uLmMgYi9kcml2ZXJzL21mZC9zeXNjb24uYwppbmRleCBjYTE1ODc4Li43MjM3M2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zeXNjb24uYworKysgYi9kcml2ZXJzL21mZC9zeXNjb24uYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CkBAIC0yMiwzMSArMjMsOTQgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzeXNjb25fZHJpdmVyOwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5c2Nvbl9saXN0X3Nsb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoc3lzY29uX2xpc3QpOworCiBzdHJ1Y3Qgc3lzY29uIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCi1zdGF0aWMgaW50IHN5c2Nvbl9tYXRjaF9ub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBzeXNjb25fcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSAzMiwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQsCit9OwogCi0JcmV0dXJuIChkZXYtPm9mX25vZGUgPT0gZG4pID8gMSA6IDA7CitzdGF0aWMgc3RydWN0IHN5c2NvbiAqb2Zfc3lzY29uX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IHN5c2NvbiAqc3lzY29uOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBzeXNjb25fY29uZmlnID0gc3lzY29uX3JlZ21hcF9jb25maWc7CisKKwlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAic3lzY29uIikpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJc3lzY29uID0ga3phbGxvYyhzaXplb2YoKnN5c2NvbiksIEdGUF9LRVJORUwpOworCWlmICghc3lzY29uKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWJhc2UgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFiYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX21hcDsKKwl9CisKKwkvKiBQYXJzZSB0aGUgZGV2aWNlJ3MgRFQgbm9kZSBmb3IgYW4gZW5kaWFubmVzcyBzcGVjaWZpY2F0aW9uICovCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImJpZy1lbmRpYW4iKSkKKwkJc3lzY29uX2NvbmZpZy52YWxfZm9ybWF0X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fQklHOworCSBlbHNlIGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJsaXR0bGUtZW5kaWFuIikpCisJCXN5c2Nvbl9jb25maWcudmFsX2Zvcm1hdF9lbmRpYW4gPSBSRUdNQVBfRU5ESUFOX0xJVFRMRTsKKworCXJlZ21hcCA9IHJlZ21hcF9pbml0X21taW8oTlVMTCwgYmFzZSwgJnN5c2Nvbl9jb25maWcpOworCWlmIChJU19FUlIocmVnbWFwKSkgeworCQlwcl9lcnIoInJlZ21hcCBpbml0IGZhaWxlZFxuIik7CisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwkJZ290byBlcnJfcmVnbWFwOworCX0KKworCXN5c2Nvbi0+cmVnbWFwID0gcmVnbWFwOworCXN5c2Nvbi0+bnAgPSBucDsKKworCXNwaW5fbG9jaygmc3lzY29uX2xpc3Rfc2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnN5c2Nvbi0+bGlzdCwgJnN5c2Nvbl9saXN0KTsKKwlzcGluX3VubG9jaygmc3lzY29uX2xpc3Rfc2xvY2spOworCisJcmV0dXJuIHN5c2NvbjsKKworZXJyX3JlZ21hcDoKKwlpb3VubWFwKGJhc2UpOworZXJyX21hcDoKKwlrZnJlZShzeXNjb24pOworCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKIHN0cnVjdCByZWdtYXAgKnN5c2Nvbl9ub2RlX3RvX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewotCXN0cnVjdCBzeXNjb24gKnN5c2NvbjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHN5c2NvbiAqZW50cnksICpzeXNjb24gPSBOVUxMOwogCi0JZGV2ID0gZHJpdmVyX2ZpbmRfZGV2aWNlKCZzeXNjb25fZHJpdmVyLmRyaXZlciwgTlVMTCwgbnAsCi0JCQkJIHN5c2Nvbl9tYXRjaF9ub2RlKTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CisJc3Bpbl9sb2NrKCZzeXNjb25fbGlzdF9zbG9jayk7CiAKLQlzeXNjb24gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmc3lzY29uX2xpc3QsIGxpc3QpCisJCWlmIChlbnRyeS0+bnAgPT0gbnApIHsKKwkJCXN5c2NvbiA9IGVudHJ5OworCQkJYnJlYWs7CisJCX0KKworCXNwaW5fdW5sb2NrKCZzeXNjb25fbGlzdF9zbG9jayk7CisKKwlpZiAoIXN5c2NvbikKKwkJc3lzY29uID0gb2Zfc3lzY29uX3JlZ2lzdGVyKG5wKTsKKworCWlmIChJU19FUlIoc3lzY29uKSkKKwkJcmV0dXJuIEVSUl9DQVNUKHN5c2Nvbik7CiAKIAlyZXR1cm4gc3lzY29uLT5yZWdtYXA7CiB9CkBAIC0xMTAsMTcgKzE3NCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2Zfc3lzY29uX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJzeXNjb24iLCB9LAotCXsgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBzeXNjb25fcmVnbWFwX2NvbmZpZyA9IHsKLQkucmVnX2JpdHMgPSAzMiwKLQkudmFsX2JpdHMgPSAzMiwKLQkucmVnX3N0cmlkZSA9IDQsCi19OwotCiBzdGF0aWMgaW50IHN5c2Nvbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CkBAIC0xNjcsNyArMjIwLDYgQEAKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJzeXNjb24iLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkJLm9mX21hdGNoX3RhYmxlID0gb2Zfc3lzY29uX21hdGNoLAogCX0sCiAJLnByb2JlCQk9IHN5c2Nvbl9wcm9iZSwKIAkuaWRfdGFibGUJPSBzeXNjb25faWRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jIGIvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCmluZGV4IDllMDRhNzQuLjQzOWQ5MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3Q3bDY2eGIuYworKysgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGRldl9jdGw7CiAKLQljbGtfZW5hYmxlKHQ3bDY2eGItPmNsazMyayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKHQ3bDY2eGItPmNsazMyayk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdDdsNjZ4Yi0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQ3bDY2eGItPmxvY2ssIGZsYWdzKTsKIAotCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazMyayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHQ3bDY2eGItPmNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4NSw3ICsyODUsNyBAQAogCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5zdXNwZW5kKQogCQlwZGF0YS0+c3VzcGVuZChkZXYpOwotCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazQ4bSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHQ3bDY2eGItPmNsazQ4bSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5NSw3ICsyOTUsNyBAQAogCXN0cnVjdCB0N2w2NnhiICp0N2w2NnhiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJmRldi0+ZGV2KTsKIAotCWNsa19lbmFibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKKwljbGtfcHJlcGFyZV9lbmFibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnJlc3VtZSkKIAkJcGRhdGEtPnJlc3VtZShkZXYpOwogCkBAIC0zNjksNyArMzY5LDcgQEAKIAkJZ290byBlcnJfaW9yZW1hcDsKIAl9CiAKLQljbGtfZW5hYmxlKHQ3bDY2eGItPmNsazQ4bSk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKHQ3bDY2eGItPmNsazQ4bSk7CiAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmVuYWJsZSkKIAkJcGRhdGEtPmVuYWJsZShkZXYpOwpAQCAtNDE0LDkgKzQxNCw5IEBACiAJaW50IHJldDsKIAogCXJldCA9IHBkYXRhLT5kaXNhYmxlKGRldik7Ci0JY2xrX2Rpc2FibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodDdsNjZ4Yi0+Y2xrNDhtKTsKIAljbGtfcHV0KHQ3bDY2eGItPmNsazQ4bSk7Ci0JY2xrX2Rpc2FibGUodDdsNjZ4Yi0+Y2xrMzJrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodDdsNjZ4Yi0+Y2xrMzJrKTsKIAljbGtfcHV0KHQ3bDY2eGItPmNsazMyayk7CiAJdDdsNjZ4Yl9kZXRhY2hfaXJxKGRldik7CiAJaW91bm1hcCh0N2w2NnhiLT5zY3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGMzNTg5eC5jIGIvZHJpdmVycy9tZmQvdGMzNTg5eC5jCmluZGV4IDAwNzJlNjYuLmFhY2IzNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RjMzU4OXguYworKysgYi9kcml2ZXJzL21mZC90YzM1ODl4LmMKQEAgLTI0MSwxMCArMjQxLDggQEAKIAogc3RhdGljIGludCB0YzM1ODl4X2lycV9pbml0KHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewotCWludCBiYXNlID0gdGMzNTg5eC0+aXJxX2Jhc2U7Ci0KIAl0YzM1ODl4LT5kb21haW4gPSBpcnFfZG9tYWluX2FkZF9zaW1wbGUoCi0JCW5wLCBUQzM1ODl4X05SX0lOVEVSTkFMX0lSUVMsIGJhc2UsCisJCW5wLCBUQzM1ODl4X05SX0lOVEVSTkFMX0lSUVMsIDAsCiAJCSZ0YzM1ODl4X2lycV9vcHMsIHRjMzU4OXgpOwogCiAJaWYgKCF0YzM1ODl4LT5kb21haW4pIHsKQEAgLTI5OCw3ICsyOTYsNyBAQAogCWlmIChibG9ja3MgJiBUQzM1ODl4X0JMT0NLX0dQSU8pIHsKIAkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHRjMzU4OXgtPmRldiwgLTEsIHRjMzU4OXhfZGV2X2dwaW8sCiAJCQkJICAgICAgQVJSQVlfU0laRSh0YzM1ODl4X2Rldl9ncGlvKSwgTlVMTCwKLQkJCQkgICAgICB0YzM1ODl4LT5pcnFfYmFzZSwgdGMzNTg5eC0+ZG9tYWluKTsKKwkJCQkgICAgICAwLCB0YzM1ODl4LT5kb21haW4pOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKHRjMzU4OXgtPmRldiwgImZhaWxlZCB0byBhZGQgZ3BpbyBjaGlsZFxuIik7CiAJCQlyZXR1cm4gcmV0OwpAQCAtMzA5LDcgKzMwNyw3IEBACiAJaWYgKGJsb2NrcyAmIFRDMzU4OXhfQkxPQ0tfS0VZUEFEKSB7CiAJCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh0YzM1ODl4LT5kZXYsIC0xLCB0YzM1ODl4X2Rldl9rZXlwYWQsCiAJCQkJICAgICAgQVJSQVlfU0laRSh0YzM1ODl4X2Rldl9rZXlwYWQpLCBOVUxMLAotCQkJCSAgICAgIHRjMzU4OXgtPmlycV9iYXNlLCB0YzM1ODl4LT5kb21haW4pOworCQkJCSAgICAgIDAsIHRjMzU4OXgtPmRvbWFpbik7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIodGMzNTg5eC0+ZGV2LCAiZmFpbGVkIHRvIGtleXBhZCBjaGlsZFxuIik7CiAJCQlyZXR1cm4gcmV0OwpAQCAtNDA0LDcgKzQwMiw2IEBACiAJdGMzNTg5eC0+ZGV2ID0gJmkyYy0+ZGV2OwogCXRjMzU4OXgtPmkyYyA9IGkyYzsKIAl0YzM1ODl4LT5wZGF0YSA9IHBkYXRhOwotCXRjMzU4OXgtPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOwogCiAJc3dpdGNoICh2ZXJzaW9uKSB7CiAJY2FzZSBUQzM1ODlYX1RDMzU4OTM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90YzYzODd4Yi5jIGIvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYwppbmRleCBlNzFmODgwLi44NWZhYjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90YzYzODd4Yi5jCisrKyBiL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+c3VzcGVuZCkKIAkJcGRhdGEtPnN1c3BlbmQoZGV2KTsKLQljbGtfZGlzYWJsZSh0YzYzODd4Yi0+Y2xrMzJrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodGM2Mzg3eGItPmNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYyLDcgKzYyLDcgQEAKIAlzdHJ1Y3QgdGM2Mzg3eGIgKnRjNjM4N3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZkZXYtPmRldik7CiAKLQljbGtfZW5hYmxlKHRjNjM4N3hiLT5jbGszMmspOworCWNsa19wcmVwYXJlX2VuYWJsZSh0YzYzODd4Yi0+Y2xrMzJrKTsKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnJlc3VtZSkKIAkJcGRhdGEtPnJlc3VtZShkZXYpOwogCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgICAgICA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwogCXN0cnVjdCB0YzYzODd4YiAqdGM2Mzg3eGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JY2xrX2VuYWJsZSh0YzYzODd4Yi0+Y2xrMzJrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUodGM2Mzg3eGItPmNsazMyayk7CiAKIAl0bWlvX2NvcmVfbW1jX2VuYWJsZSh0YzYzODd4Yi0+c2NyICsgMHgyMDAsIDAsCiAJCXRjNjM4N3hiX21tY19yZXNvdXJjZXNbMF0uc3RhcnQgJiAweGZmZmUpOwpAQCAtMTEzLDcgKzExMyw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ICAgICAgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgdGM2Mzg3eGIgKnRjNjM4N3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWNsa19kaXNhYmxlKHRjNjM4N3hiLT5jbGszMmspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0YzYzODd4Yi0+Y2xrMzJrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjE0LDcgKzIxNCw3IEBACiAJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7CiAJaW91bm1hcCh0YzYzODd4Yi0+c2NyKTsKIAlyZWxlYXNlX3Jlc291cmNlKCZ0YzYzODd4Yi0+cnNjcik7Ci0JY2xrX2Rpc2FibGUodGM2Mzg3eGItPmNsazMyayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRjNjM4N3hiLT5jbGszMmspOwogCWNsa19wdXQodGM2Mzg3eGItPmNsazMyayk7CiAJa2ZyZWUodGM2Mzg3eGIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90YzYzOTN4Yi5jIGIvZHJpdmVycy9tZmQvdGM2MzkzeGIuYwppbmRleCA0ZmFjMTZiLi5kMzVmMTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCisrKyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKQEAgLTI2Myw2ICsyNjMsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0YzYzOTN4Yl9vaGNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhICp0Y3BkID0gZGV2X2dldF9wbGF0ZGF0YShkZXYtPmRldi5wYXJlbnQpOworCisJLyogV2UgY2FuJ3QgcHJvcGVybHkgc3RvcmUvcmVzdG9yZSBPSENJIHN0YXRlLCBzbyBmYWlsIGhlcmUgKi8KKwlpZiAodGNwZC0+cmVzdW1lX3Jlc3RvcmUpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gdGM2MzkzeGJfb2hjaV9kaXNhYmxlKGRldik7Cit9CisKIHN0YXRpYyBpbnQgdGM2MzkzeGJfZmJfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CkBAIC00MDMsNyArNDE0LDcgQEAKIAkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzKSwKIAkJLnJlc291cmNlcyA9IHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzLAogCQkuZW5hYmxlID0gdGM2MzkzeGJfb2hjaV9lbmFibGUsCi0JCS5zdXNwZW5kID0gdGM2MzkzeGJfb2hjaV9kaXNhYmxlLAorCQkuc3VzcGVuZCA9IHRjNjM5M3hiX29oY2lfc3VzcGVuZCwKIAkJLnJlc3VtZSA9IHRjNjM5M3hiX29oY2lfZW5hYmxlLAogCQkuZGlzYWJsZSA9IHRjNjM5M3hiX29oY2lfZGlzYWJsZSwKIAl9LApAQCAtNjU0LDcgKzY2NSw3IEBACiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCi0JcmV0ID0gY2xrX2VuYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUodGM2MzkzeGItPmNsayk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfY2xrX2VuYWJsZTsKIApAQCAtNzE3LDcgKzcyOCw3IEBACiAJCWdwaW9jaGlwX3JlbW92ZSgmdGM2MzkzeGItPmdwaW8pOwogCXRjcGQtPmRpc2FibGUoZGV2KTsKIGVycl9lbmFibGU6Ci0JY2xrX2Rpc2FibGUodGM2MzkzeGItPmNsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRjNjM5M3hiLT5jbGspOwogZXJyX2Nsa19lbmFibGU6CiAJaW91bm1hcCh0YzYzOTN4Yi0+c2NyKTsKIGVycl9pb3JlbWFwOgpAQCAtNzQ4LDcgKzc1OSw3IEBACiAJCWdwaW9jaGlwX3JlbW92ZSgmdGM2MzkzeGItPmdwaW8pOwogCiAJcmV0ID0gdGNwZC0+ZGlzYWJsZShkZXYpOwotCWNsa19kaXNhYmxlKHRjNjM5M3hiLT5jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0YzYzOTN4Yi0+Y2xrKTsKIAlpb3VubWFwKHRjNjM5M3hiLT5zY3IpOwogCXJlbGVhc2VfcmVzb3VyY2UoJnRjNjM5M3hiLT5yc2NyKTsKIAljbGtfcHV0KHRjNjM5M3hiLT5jbGspOwpAQCAtNzc2LDcgKzc4Nyw3IEBACiAJCQlpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BJX0JDUihpKSk7CiAJfQogCXJldCA9IHRjcGQtPnN1c3BlbmQoZGV2KTsKLQljbGtfZGlzYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodGM2MzkzeGItPmNsayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzg4LDcgKzc5OSw3IEBACiAJaW50IHJldDsKIAlpbnQgaTsKIAotCWNsa19lbmFibGUodGM2MzkzeGItPmNsayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKHRjNjM5M3hiLT5jbGspOwogCiAJcmV0ID0gdGNwZC0+cmVzdW1lKGRldik7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1MDkwLmMgYi9kcml2ZXJzL21mZC90cHM2NTA5MC5jCmluZGV4IDFjM2U2ZTIuLjE0YjYyZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RwczY1MDkwLmMKKysrIGIvZHJpdmVycy9tZmQvdHBzNjUwOTAuYwpAQCAtNzYsNTggKzc2LDU4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9pcnEgdHBzNjUwOTBfaXJxc1tdID0gewogCS8qIElOVDEgSVJRcyovCiAJW1RQUzY1MDkwX0lSUV9WQUNfU1RBVFVTX0NIQU5HRV0gPSB7Ci0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19WQUNfU1RBVFVTX0NIQU5HRSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfVkFDX1NUQVRVU19DSEFOR0UsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX1ZTWVNfU1RBVFVTX0NIQU5HRV0gPSB7Ci0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19WU1lTX1NUQVRVU19DSEFOR0UsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX1ZTWVNfU1RBVFVTX0NIQU5HRSwKIAl9LAogCVtUUFM2NTA5MF9JUlFfQkFUX1NUQVRVU19DSEFOR0VdID0gewotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfQkFUX1NUQVRVU19DSEFOR0UsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX0JBVF9TVEFUVVNfQ0hBTkdFLAogCX0sCiAJW1RQUzY1MDkwX0lSUV9DSEFSR0lOR19TVEFUVVNfQ0hBTkdFXSA9IHsKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX0NIQVJHSU5HX1NUQVRVU19DSEFOR0UsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX0NIQVJHSU5HX1NUQVRVU19DSEFOR0UsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX0NIQVJHSU5HX0NPTVBMRVRFXSA9IHsKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX0NIQVJHSU5HX0NPTVBMRVRFLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19DSEFSR0lOR19DT01QTEVURSwKIAl9LAogCVtUUFM2NTA5MF9JUlFfT1ZFUkxPQURfRENEQzFdID0gewotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfT1ZFUkxPQURfRENEQzEsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX09WRVJMT0FEX0RDREMxLAogCX0sCiAJW1RQUzY1MDkwX0lSUV9PVkVSTE9BRF9EQ0RDMl0gPSB7Ci0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19PVkVSTE9BRF9EQ0RDMiwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfT1ZFUkxPQURfRENEQzIsCiAJfSwKIAkvKiBJTlQyIElSUXMqLwogCVtUUFM2NTA5MF9JUlFfT1ZFUkxPQURfRENEQzNdID0gewotCQkJLnJlZ19vZmZzZXQgPSAxLAotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRENEQzMsCisJCS5yZWdfb2Zmc2V0ID0gMSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRENEQzMsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX09WRVJMT0FEX0ZFVDFdID0gewotCQkJLnJlZ19vZmZzZXQgPSAxLAotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUMSwKKwkJLnJlZ19vZmZzZXQgPSAxLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQxLAogCX0sCiAJW1RQUzY1MDkwX0lSUV9PVkVSTE9BRF9GRVQyXSA9IHsKLQkJCS5yZWdfb2Zmc2V0ID0gMSwKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDIsCisJCS5yZWdfb2Zmc2V0ID0gMSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUMiwKIAl9LAogCVtUUFM2NTA5MF9JUlFfT1ZFUkxPQURfRkVUM10gPSB7Ci0JCQkucmVnX29mZnNldCA9IDEsCi0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQzLAorCQkucmVnX29mZnNldCA9IDEsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDMsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX09WRVJMT0FEX0ZFVDRdID0gewotCQkJLnJlZ19vZmZzZXQgPSAxLAotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUNCwKKwkJLnJlZ19vZmZzZXQgPSAxLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQ0LAogCX0sCiAJW1RQUzY1MDkwX0lSUV9PVkVSTE9BRF9GRVQ1XSA9IHsKLQkJCS5yZWdfb2Zmc2V0ID0gMSwKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDUsCisJCS5yZWdfb2Zmc2V0ID0gMSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUNSwKIAl9LAogCVtUUFM2NTA5MF9JUlFfT1ZFUkxPQURfRkVUNl0gPSB7Ci0JCQkucmVnX29mZnNldCA9IDEsCi0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQ2LAorCQkucmVnX29mZnNldCA9IDEsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDYsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX09WRVJMT0FEX0ZFVDddID0gewotCQkJLnJlZ19vZmZzZXQgPSAxLAotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUNywKKwkJLnJlZ19vZmZzZXQgPSAxLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQ3LAogCX0sCiB9OwogCkBAIC0xNzYsNyArMTc2LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgaW50IHRwczY1MDkwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHRwczY1MDkwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmY2xpZW50LT5kZXYpOwogCWludCBpcnFfYmFzZSA9IDA7CkBAIC0yMTAsMTEgKzIxMCwxMSBAQAogCiAJaWYgKGNsaWVudC0+aXJxKSB7CiAJCXJldCA9IHJlZ21hcF9hZGRfaXJxX2NoaXAodHBzNjUwOTAtPnJtYXAsIGNsaWVudC0+aXJxLAotCQkJSVJRRl9PTkVTSE9UIHwgSVJRRl9UUklHR0VSX0xPVywgaXJxX2Jhc2UsCi0JCQkmdHBzNjUwOTBfaXJxX2NoaXAsICZ0cHM2NTA5MC0+aXJxX2RhdGEpOwotCQkJaWYgKHJldCkgewotCQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAotCQkJCQkiSVJRIGluaXQgZmFpbGVkIHdpdGggZXJyOiAlZFxuIiwgcmV0KTsKKwkJCQkJICBJUlFGX09ORVNIT1QgfCBJUlFGX1RSSUdHRVJfTE9XLCBpcnFfYmFzZSwKKwkJCQkJICAmdHBzNjUwOTBfaXJxX2NoaXAsICZ0cHM2NTA5MC0+aXJxX2RhdGEpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkiSVJRIGluaXQgZmFpbGVkIHdpdGggZXJyOiAlZFxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9IGVsc2UgewpAQCAtMjIzLDggKzIyMyw4IEBACiAJfQogCiAJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHRwczY1MDkwLT5kZXYsIC0xLCB0cHM2NTA5MHMsCi0JCUFSUkFZX1NJWkUodHBzNjUwOTBzKSwgTlVMTCwKLQkJMCwgcmVnbWFwX2lycV9nZXRfZG9tYWluKHRwczY1MDkwLT5pcnFfZGF0YSkpOworCQkJICAgICAgQVJSQVlfU0laRSh0cHM2NTA5MHMpLCBOVUxMLAorCQkJICAgICAgMCwgcmVnbWFwX2lycV9nZXRfZG9tYWluKHRwczY1MDkwLT5pcnFfZGF0YSkpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJhZGQgbWZkIGRldmljZXMgZmFpbGVkIHdpdGggZXJyOiAlZFxuIiwKIAkJCXJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90cHM2NTIxNy5jIGIvZHJpdmVycy9tZmQvdHBzNjUyMTcuYwppbmRleCBhOGVlNTJjLi44MGE5MTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90cHM2NTIxNy5jCisrKyBiL2RyaXZlcnMvbWZkL3RwczY1MjE3LmMKQEAgLTMzLDkgKzMzLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG1mZF9jZWxsIHRwczY1MjE3c1tdID0gewogCXsKIAkJLm5hbWUgPSAidHBzNjUyMTctcG1pYyIsCisJCS5vZl9jb21wYXRpYmxlID0gInRpLHRwczY1MjE3LXBtaWMiLAogCX0sCiAJewogCQkubmFtZSA9ICJ0cHM2NTIxNy1ibCIsCisJCS5vZl9jb21wYXRpYmxlID0gInRpLHRwczY1MjE3LWJsIiwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jCmluZGV4IDUwZjkwOTEuLjdkNjNlMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKQEAgLTgzMSw2ICs4MzEsOSBAQAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB0d2w0MDMwX3Bvd2VyX29mX21hdGNoW10gPSB7CiAJeworCQkuY29tcGF0aWJsZSA9ICJ0aSx0d2w0MDMwLXBvd2VyIiwKKwl9LAorCXsKIAkJLmNvbXBhdGlibGUgPSAidGksdHdsNDAzMC1wb3dlci1yZXNldCIsCiAJCS5kYXRhID0gJm9tYXAzX3Jlc2V0LAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC92aXBlcmJvYXJkLmMgYi9kcml2ZXJzL21mZC92aXBlcmJvYXJkLmMKaW5kZXggM2MyYjhmOS4uZTZiM2M3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdmlwZXJib2FyZC5jCisrKyBiL2RyaXZlcnMvbWZkL3ZpcGVyYm9hcmQuYwpAQCAtOTMsOSArOTMsOCBAQAogCQkgdmVyc2lvbiA+PiA4LCB2ZXJzaW9uICYgMHhmZiwKIAkJIHZiLT51c2JfZGV2LT5idXMtPmJ1c251bSwgdmItPnVzYl9kZXYtPmRldm51bSk7CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMoJmludGVyZmFjZS0+ZGV2LCBQTEFURk9STV9ERVZJRF9BVVRPLAotCQkJCXZwcmJyZF9kZXZzLCBBUlJBWV9TSVpFKHZwcmJyZF9kZXZzKSwgTlVMTCwgMCwKLQkJCQlOVUxMKTsKKwlyZXQgPSBtZmRfYWRkX2hvdHBsdWdfZGV2aWNlcygmaW50ZXJmYWNlLT5kZXYsIHZwcmJyZF9kZXZzLAorCQkJCSAgICAgIEFSUkFZX1NJWkUodnByYnJkX2RldnMpKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJGYWlsZWQgdG8gYWRkIG1mZCBkZXZpY2VzIHRvIGNvcmUuIik7CiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTUxMDItdGFibGVzLmMgYi9kcml2ZXJzL21mZC93bTUxMDItdGFibGVzLmMKaW5kZXggZDZmMzViYi4uYjMyNmE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd201MTAyLXRhYmxlcy5jCisrKyBiL2RyaXZlcnMvbWZkL3dtNTEwMi10YWJsZXMuYwpAQCAtMzM2LDggKzMzNiw2IEBACiAJeyAweDAwMDAwMjE4LCAweDAxQTYgfSwgICAvKiBSNTM2ICAgLSBNaWMgQmlhcyBDdHJsIDEgKi8gCiAJeyAweDAwMDAwMjE5LCAweDAxQTYgfSwgICAvKiBSNTM3ICAgLSBNaWMgQmlhcyBDdHJsIDIgKi8gCiAJeyAweDAwMDAwMjFBLCAweDAxQTYgfSwgICAvKiBSNTM4ICAgLSBNaWMgQmlhcyBDdHJsIDMgKi8gCi0JeyAweDAwMDAwMjI1LCAweDA0MDAgfSwgICAvKiBSNTQ5ICAgLSBIUCBDdHJsIDFMICovCi0JeyAweDAwMDAwMjI2LCAweDA0MDAgfSwgICAvKiBSNTUwICAgLSBIUCBDdHJsIDFSICovCiAJeyAweDAwMDAwMjkzLCAweDAwMDAgfSwgICAvKiBSNjU5ICAgLSBBY2Nlc3NvcnkgRGV0ZWN0IE1vZGUgMSAqLyAKIAl7IDB4MDAwMDAyOUIsIDB4MDAyMCB9LCAgIC8qIFI2NjcgICAtIEhlYWRwaG9uZSBEZXRlY3QgMSAqLyAKIAl7IDB4MDAwMDAyOUMsIDB4MDAwMCB9LCAgIC8qIFI2NjggICAtIEhlYWRwaG9uZSBEZXRlY3QgMiAqLwpAQCAtMTExMiw2ICsxMTEwLDggQEAKIAljYXNlIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8xOgogCWNhc2UgQVJJWk9OQV9NSUNfQklBU19DVFJMXzI6CiAJY2FzZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMzoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xTDoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xUjoKIAljYXNlIEFSSVpPTkFfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzE6CiAJY2FzZSBBUklaT05BX0hFQURQSE9ORV9ERVRFQ1RfMToKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8yOgpAQCAtMTk0OSw2ICsxOTQ5LDggQEAKIAljYXNlIEFSSVpPTkFfRFNQMV9TQ1JBVENIXzE6CiAJY2FzZSBBUklaT05BX0RTUDFfU0NSQVRDSF8yOgogCWNhc2UgQVJJWk9OQV9EU1AxX1NDUkFUQ0hfMzoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xTDoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xUjoKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8yOgogCWNhc2UgQVJJWk9OQV9IUF9EQUNWQUw6CiAJY2FzZSBBUklaT05BX01JQ19ERVRFQ1RfMzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtNTExMC10YWJsZXMuYyBiL2RyaXZlcnMvbWZkL3dtNTExMC10YWJsZXMuYwppbmRleCA0NjQyYjViLi4xMmNhZDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTUxMTAtdGFibGVzLmMKKysrIGIvZHJpdmVycy9tZmQvd201MTEwLXRhYmxlcy5jCkBAIC04OTUsOCArODk1LDE2IEBACiAJeyAweDAwMDAwNTQ4LCAweDE4MTggfSwgICAgLyogUjEzNTIgIC0gQUlGMiBGcmFtZSBDdHJsIDIgKi8KIAl7IDB4MDAwMDA1NDksIDB4MDAwMCB9LCAgICAvKiBSMTM1MyAgLSBBSUYyIEZyYW1lIEN0cmwgMyAqLwogCXsgMHgwMDAwMDU0QSwgMHgwMDAxIH0sICAgIC8qIFIxMzU0ICAtIEFJRjIgRnJhbWUgQ3RybCA0ICovCisJeyAweDAwMDAwNTRCLCAweDAwMDIgfSwgICAgLyogUjEzNTUgIC0gQUlGMiBGcmFtZSBDdHJsIDUgKi8KKwl7IDB4MDAwMDA1NEMsIDB4MDAwMyB9LCAgICAvKiBSMTM1NiAgLSBBSUYyIEZyYW1lIEN0cmwgNiAqLworCXsgMHgwMDAwMDU0RCwgMHgwMDA0IH0sICAgIC8qIFIxMzU3ICAtIEFJRjIgRnJhbWUgQ3RybCA3ICovCisJeyAweDAwMDAwNTRFLCAweDAwMDUgfSwgICAgLyogUjEzNTggIC0gQUlGMiBGcmFtZSBDdHJsIDggKi8KIAl7IDB4MDAwMDA1NTEsIDB4MDAwMCB9LCAgICAvKiBSMTM2MSAgLSBBSUYyIEZyYW1lIEN0cmwgMTEgKi8KIAl7IDB4MDAwMDA1NTIsIDB4MDAwMSB9LCAgICAvKiBSMTM2MiAgLSBBSUYyIEZyYW1lIEN0cmwgMTIgKi8KKwl7IDB4MDAwMDA1NTMsIDB4MDAwMiB9LCAgICAvKiBSMTM2MyAgLSBBSUYyIEZyYW1lIEN0cmwgMTMgKi8KKwl7IDB4MDAwMDA1NTQsIDB4MDAwMyB9LCAgICAvKiBSMTM2NCAgLSBBSUYyIEZyYW1lIEN0cmwgMTQgKi8KKwl7IDB4MDAwMDA1NTUsIDB4MDAwNCB9LCAgICAvKiBSMTM2NSAgLSBBSUYyIEZyYW1lIEN0cmwgMTUgKi8KKwl7IDB4MDAwMDA1NTYsIDB4MDAwNSB9LCAgICAvKiBSMTM2NiAgLSBBSUYyIEZyYW1lIEN0cmwgMTYgKi8KIAl7IDB4MDAwMDA1NTksIDB4MDAwMCB9LCAgICAvKiBSMTM2OSAgLSBBSUYyIFR4IEVuYWJsZXMgKi8KIAl7IDB4MDAwMDA1NUEsIDB4MDAwMCB9LCAgICAvKiBSMTM3MCAgLSBBSUYyIFJ4IEVuYWJsZXMgKi8KIAl7IDB4MDAwMDA1ODAsIDB4MDAwQyB9LCAgICAvKiBSMTQwOCAgLSBBSUYzIEJDTEsgQ3RybCAqLwpAQCAtMTc5MCw2ICsxNzk4LDggQEAKIAljYXNlIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8xOgogCWNhc2UgQVJJWk9OQV9NSUNfQklBU19DVFJMXzI6CiAJY2FzZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMzoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xTDoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xUjoKIAljYXNlIEFSSVpPTkFfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzE6CiAJY2FzZSBBUklaT05BX0hFQURQSE9ORV9ERVRFQ1RfMToKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8yOgpAQCAtMTkzNCw4ICsxOTQ0LDE2IEBACiAJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8yOgogCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMzoKIAljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzQ6CisJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF81OgorCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfNjoKKwljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzc6CisJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF84OgogCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTE6CiAJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xMjoKKwljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzEzOgorCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTQ6CisJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xNToKKwljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzE2OgogCWNhc2UgQVJJWk9OQV9BSUYyX1RYX0VOQUJMRVM6CiAJY2FzZSBBUklaT05BX0FJRjJfUlhfRU5BQkxFUzoKIAljYXNlIEFSSVpPTkFfQUlGM19CQ0xLX0NUUkw6CkBAIC0yODI1LDYgKzI4NDMsOCBAQAogCWNhc2UgQVJJWk9OQV9BU1lOQ19TQU1QTEVfUkFURV8xX1NUQVRVUzoKIAljYXNlIEFSSVpPTkFfQVNZTkNfU0FNUExFX1JBVEVfMl9TVEFUVVM6CiAJY2FzZSBBUklaT05BX01JQ19ERVRFQ1RfMzoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xTDoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xUjoKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8yOgogCWNhc2UgQVJJWk9OQV9JTlBVVF9FTkFCTEVTX1NUQVRVUzoKIAljYXNlIEFSSVpPTkFfT1VUUFVUX1NUQVRVU18xOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKaW5kZXggNGFiNTI3Zi4uZjUxMjRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCkBAIC0zMDgsNyArMzA4LDcgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JbW9kZSA9IGlkMiAmIFdNODM1MF9DT05GX1NUU19NQVNLID4+IDEwOworCW1vZGUgPSAoaWQyICYgV004MzUwX0NPTkZfU1RTX01BU0spID4+IDEwOwogCWN1c3RfaWQgPSBpZDIgJiBXTTgzNTBfQ1VTVF9JRF9NQVNLOwogCWNoaXBfcmV2ID0gKGlkMiAmIFdNODM1MF9DSElQX1JFVl9NQVNLKSA+PiAxMjsKIAlkZXZfaW5mbyh3bTgzNTAtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODk5Ny10YWJsZXMuYyBiL2RyaXZlcnMvbWZkL3dtODk5Ny10YWJsZXMuYwppbmRleCA1MTBkYTNiLi5jMGMyNWQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204OTk3LXRhYmxlcy5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODk5Ny10YWJsZXMuYwpAQCAtNjcwLDYgKzY3MCw3IEBACiAJeyAweDAwMDAwQzIzLCAweDAwMDAgfSwgICAgLyogUjMxMDcgIC0gTWlzYyBQYWQgQ3RybCA0ICovCiAJeyAweDAwMDAwQzI0LCAweDAwMDAgfSwgICAgLyogUjMxMDggIC0gTWlzYyBQYWQgQ3RybCA1ICovCiAJeyAweDAwMDAwRDA4LCAweEZGRkYgfSwgICAgLyogUjMzMzYgIC0gSW50ZXJydXB0IFN0YXR1cyAxIE1hc2sgKi8KKwl7IDB4MDAwMDBEMDksIDB4RkZGRiB9LCAgICAvKiBSMzMzNyAgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgTWFzayAqLwogCXsgMHgwMDAwMEQwQSwgMHhGRkZGIH0sICAgIC8qIFIzMzM4ICAtIEludGVycnVwdCBTdGF0dXMgMyBNYXNrICovCiAJeyAweDAwMDAwRDBCLCAweEZGRkYgfSwgICAgLyogUjMzMzkgIC0gSW50ZXJydXB0IFN0YXR1cyA0IE1hc2sgKi8KIAl7IDB4MDAwMDBEMEMsIDB4RkVGRiB9LCAgICAvKiBSMzM0MCAgLSBJbnRlcnJ1cHQgU3RhdHVzIDUgTWFzayAqLwpAQCAtODg2LDYgKzg4Nyw4IEBACiAJY2FzZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMToKIAljYXNlIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8yOgogCWNhc2UgQVJJWk9OQV9NSUNfQklBU19DVFJMXzM6CisJY2FzZSBBUklaT05BX0hQX0NUUkxfMUw6CisJY2FzZSBBUklaT05BX0hQX0NUUkxfMVI6CiAJY2FzZSBBUklaT05BX0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8xOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzE6CiAJY2FzZSBBUklaT05BX0hFQURQSE9ORV9ERVRFQ1RfMjoKQEAgLTEzMjgsNiArMTMzMSw3IEBACiAJY2FzZSBBUklaT05BX0lOVEVSUlVQVF9TVEFUVVNfNDoKIAljYXNlIEFSSVpPTkFfSU5URVJSVVBUX1NUQVRVU181OgogCWNhc2UgQVJJWk9OQV9JTlRFUlJVUFRfU1RBVFVTXzFfTUFTSzoKKwljYXNlIEFSSVpPTkFfSU5URVJSVVBUX1NUQVRVU18yX01BU0s6CiAJY2FzZSBBUklaT05BX0lOVEVSUlVQVF9TVEFUVVNfM19NQVNLOgogCWNhc2UgQVJJWk9OQV9JTlRFUlJVUFRfU1RBVFVTXzRfTUFTSzoKIAljYXNlIEFSSVpPTkFfSU5URVJSVVBUX1NUQVRVU181X01BU0s6CkBAIC0xNDc3LDYgKzE0ODEsOCBAQAogCWNhc2UgQVJJWk9OQV9TQU1QTEVfUkFURV8zX1NUQVRVUzoKIAljYXNlIEFSSVpPTkFfQVNZTkNfU0FNUExFX1JBVEVfMV9TVEFUVVM6CiAJY2FzZSBBUklaT05BX01JQ19ERVRFQ1RfMzoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xTDoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xUjoKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8yOgogCWNhc2UgQVJJWk9OQV9JTlBVVF9FTkFCTEVTX1NUQVRVUzoKIAljYXNlIEFSSVpPTkFfT1VUUFVUX1NUQVRVU18xOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCBiYmViNDUxLi4wMDYyNDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwpAQCAtNzUsNyArNzUsNyBAQAogY29uZmlnIEFUTUVMX1RDQl9DTEtTUkNfQkxPQ0sKIAlpbnQKIAlkZXBlbmRzIG9uIEFUTUVMX1RDQl9DTEtTUkMKLQlwcm9tcHQgIlRDIEJsb2NrIiBpZiBBUkNIX0FUOTFSTTkyMDAgfHwgQVJDSF9BVDkxU0FNOTI2MCB8fCBDUFVfQVQzMkFQNzAwWAorCXByb21wdCAiVEMgQmxvY2siIGlmIENQVV9BVDMyQVA3MDBYCiAJZGVmYXVsdCAwCiAJcmFuZ2UgMCAxCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VlcHJvbS9lZXByb21fOTNjeDYuYyBiL2RyaXZlcnMvbWlzYy9lZXByb20vZWVwcm9tXzkzY3g2LmMKaW5kZXggMGZmNGIwMi4uMGNmMmM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VlcHJvbS9lZXByb21fOTNjeDYuYworKysgYi9kcml2ZXJzL21pc2MvZWVwcm9tL2VlcHJvbV85M2N4Ni5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIH0KIAogLyoqCi0gKiBlZXByb21fOTNjeDZfcmVhZCAtIFJlYWQgbXVsdGlwbGUgd29yZHMgZnJvbSBlZXByb20KKyAqIGVlcHJvbV85M2N4Nl9yZWFkIC0gUmVhZCBhIHdvcmQgZnJvbSBlZXByb20KICAqIEBlZXByb206IFBvaW50ZXIgdG8gZWVwcm9tIHN0cnVjdHVyZQogICogQHdvcmQ6IFdvcmQgaW5kZXggZnJvbSB3aGVyZSB3ZSBzaG91bGQgc3RhcnQgcmVhZGluZwogICogQGRhdGE6IHRhcmdldCBwb2ludGVyIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGhhdmUgdG8gYmUgc3RvcmVkCkBAIC0yMzUsNiArMjM1LDY2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChlZXByb21fOTNjeDZfbXVsdGlyZWFkKTsKIAogLyoqCisgKiBlZXByb21fOTNjeDZfcmVhZGIgLSBSZWFkIGEgYnl0ZSBmcm9tIGVlcHJvbQorICogQGVlcHJvbTogUG9pbnRlciB0byBlZXByb20gc3RydWN0dXJlCisgKiBAd29yZDogQnl0ZSBpbmRleCBmcm9tIHdoZXJlIHdlIHNob3VsZCBzdGFydCByZWFkaW5nCisgKiBAZGF0YTogdGFyZ2V0IHBvaW50ZXIgd2hlcmUgdGhlIGluZm9ybWF0aW9uIHdpbGwgaGF2ZSB0byBiZSBzdG9yZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBhIGJ5dGUgb2YgdGhlIGVlcHJvbSBkYXRhCisgKiBpbnRvIHRoZSBnaXZlbiBkYXRhIHBvaW50ZXIuCisgKi8KK3ZvaWQgZWVwcm9tXzkzY3g2X3JlYWRiKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSwgY29uc3QgdTggYnl0ZSwKKwl1OCAqZGF0YSkKK3sKKwl1MTYgY29tbWFuZDsKKwl1MTYgdG1wOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBlZXByb20gcmVnaXN0ZXIKKwkgKi8KKwllZXByb21fOTNjeDZfc3RhcnR1cChlZXByb20pOworCisJLyoKKwkgKiBTZWxlY3QgdGhlIHJlYWQgb3Bjb2RlIGFuZCB0aGUgYnl0ZSB0byBiZSByZWFkLgorCSAqLworCWNvbW1hbmQgPSAoUENJX0VFUFJPTV9SRUFEX09QQ09ERSA8PCAoZWVwcm9tLT53aWR0aCArIDEpKSB8IGJ5dGU7CisJZWVwcm9tXzkzY3g2X3dyaXRlX2JpdHMoZWVwcm9tLCBjb21tYW5kLAorCQlQQ0lfRUVQUk9NX1dJRFRIX09QQ09ERSArIGVlcHJvbS0+d2lkdGggKyAxKTsKKworCS8qCisJICogUmVhZCB0aGUgcmVxdWVzdGVkIDggYml0cy4KKwkgKi8KKwllZXByb21fOTNjeDZfcmVhZF9iaXRzKGVlcHJvbSwgJnRtcCwgOCk7CisJKmRhdGEgPSB0bXAgJiAweGZmOworCisJLyoKKwkgKiBDbGVhbnVwIGVlcHJvbSByZWdpc3Rlci4KKwkgKi8KKwllZXByb21fOTNjeDZfY2xlYW51cChlZXByb20pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZWVwcm9tXzkzY3g2X3JlYWRiKTsKKworLyoqCisgKiBlZXByb21fOTNjeDZfbXVsdGlyZWFkYiAtIFJlYWQgbXVsdGlwbGUgYnl0ZXMgZnJvbSBlZXByb20KKyAqIEBlZXByb206IFBvaW50ZXIgdG8gZWVwcm9tIHN0cnVjdHVyZQorICogQGJ5dGU6IEluZGV4IGZyb20gd2hlcmUgd2Ugc2hvdWxkIHN0YXJ0IHJlYWRpbmcKKyAqIEBkYXRhOiB0YXJnZXQgcG9pbnRlciB3aGVyZSB0aGUgaW5mb3JtYXRpb24gd2lsbCBoYXZlIHRvIGJlIHN0b3JlZAorICogQHdvcmRzOiBOdW1iZXIgb2YgYnl0ZXMgdGhhdCBzaG91bGQgYmUgcmVhZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBhbGwgcmVxdWVzdGVkIGJ5dGVzIGZyb20gdGhlIGVlcHJvbSwKKyAqIHRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIGVlcHJvbV85M2N4Nl9yZWFkYigpIG11bHRpcGxlIHRpbWVzLgorICovCit2b2lkIGVlcHJvbV85M2N4Nl9tdWx0aXJlYWRiKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSwgY29uc3QgdTggYnl0ZSwKKwl1OCAqZGF0YSwgY29uc3QgdTE2IGJ5dGVzKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyspCisJCWVlcHJvbV85M2N4Nl9yZWFkYihlZXByb20sIGJ5dGUgKyBpLCAmZGF0YVtpXSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlZXByb21fOTNjeDZfbXVsdGlyZWFkYik7CisKKy8qKgogICogZWVwcm9tXzkzY3g2X3dyZW4gLSBzZXQgdGhlIHdyaXRlIGVuYWJsZSBzdGF0ZQogICogQGVlcHJvbTogUG9pbnRlciB0byBlZXByb20gc3RydWN0dXJlCiAgKiBAZW5hYmxlOiB0cnVlIHRvIGVuYWJsZSB3cml0ZXMsIG90aGVyd2lzZSBkaXNhYmxlIHdyaXRlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jIGIvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCmluZGV4IDJjZjJiYmMuLjE4MGE1NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYworKysgYi9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKQEAgLTE4Nyw2ICsxODcsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZW5jbG9zdXJlX3VucmVnaXN0ZXIpOwogCiAjZGVmaW5lIEVOQ0xPU1VSRV9OQU1FX1NJWkUJNjQKKyNkZWZpbmUgQ09NUE9ORU5UX05BTUVfU0laRQk2NAogCiBzdGF0aWMgdm9pZCBlbmNsb3N1cmVfbGlua19uYW1lKHN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICpjZGV2LCBjaGFyICpuYW1lKQogewpAQCAtMjQ2LDYgKzI0NywyOSBAQAogCXB1dF9kZXZpY2UoZGV2LT5wYXJlbnQpOwogfQogCitzdGF0aWMgc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKgorZW5jbG9zdXJlX2NvbXBvbmVudF9maW5kX2J5X25hbWUoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYsCisJCQkJY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpjbmFtZTsKKwlzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXA7CisKKwlpZiAoIWVkZXYgfHwgIW5hbWUgfHwgIW5hbWVbMF0pCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IGVkZXYtPmNvbXBvbmVudHM7IGkrKykgeworCQllY29tcCA9ICZlZGV2LT5jb21wb25lbnRbaV07CisJCWNuYW1lID0gZGV2X25hbWUoJmVjb21wLT5jZGV2KTsKKwkJaWYgKGVjb21wLT5udW1iZXIgIT0gLTEgJiYKKwkJICAgIGNuYW1lICYmIGNuYW1lWzBdICYmCisJCSAgICAhc3RyY21wKGNuYW1lLCBuYW1lKSkKKwkJCXJldHVybiBlY29tcDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmVuY2xvc3VyZV9jb21wb25lbnRfZ3JvdXBzW107CiAKIC8qKgpAQCAtMjY5LDcgKzI5Myw4IEBACiB7CiAJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wOwogCXN0cnVjdCBkZXZpY2UgKmNkZXY7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpOworCWNoYXIgbmV3bmFtZVtDT01QT05FTlRfTkFNRV9TSVpFXTsKIAogCWlmIChudW1iZXIgPj0gZWRldi0+Y29tcG9uZW50cykKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC0yODMsOSArMzA4LDIwIEBACiAJZWNvbXAtPm51bWJlciA9IG51bWJlcjsKIAljZGV2ID0gJmVjb21wLT5jZGV2OwogCWNkZXYtPnBhcmVudCA9IGdldF9kZXZpY2UoJmVkZXYtPmVkZXYpOwotCWlmIChuYW1lICYmIG5hbWVbMF0pCi0JCWRldl9zZXRfbmFtZShjZGV2LCAiJXMiLCBuYW1lKTsKLQllbHNlCisKKwlpZiAobmFtZSAmJiBuYW1lWzBdKSB7CisJCS8qIFNvbWUgaGFyZHdhcmUgKGUuZy4gZW5jbG9zdXJlIGluIFJYMzAwIFM2KSBoYXMgY29tcG9uZW50cworCQkgKiB3aXRoIG5vbiB1bmlxdWUgbmFtZXMuIFJlZ2lzdGVyaW5nIGR1cGxpY2F0ZXMgaW4gc3lzZnMKKwkJICogd2lsbCBsZWFkIHRvIHdhcm5pbmdzIGR1cmluZyBib290dXAuIFNvIG1ha2UgdGhlIG5hbWVzCisJCSAqIHVuaXF1ZSBieSBhcHBlbmRpbmcgY29uc2VjdXRpdmUgbnVtYmVycyAtMSwgLTIsIC4uLiAqLworCQlpID0gMTsKKwkJc25wcmludGYobmV3bmFtZSwgQ09NUE9ORU5UX05BTUVfU0laRSwKKwkJCSAiJXMiLCBuYW1lKTsKKwkJd2hpbGUgKGVuY2xvc3VyZV9jb21wb25lbnRfZmluZF9ieV9uYW1lKGVkZXYsIG5ld25hbWUpKQorCQkJc25wcmludGYobmV3bmFtZSwgQ09NUE9ORU5UX05BTUVfU0laRSwKKwkJCQkgIiVzLSVpIiwgbmFtZSwgaSsrKTsKKwkJZGV2X3NldF9uYW1lKGNkZXYsICIlcyIsIG5ld25hbWUpOworCX0gZWxzZQogCQlkZXZfc2V0X25hbWUoY2RldiwgIiV1IiwgbnVtYmVyKTsKIAogCWNkZXYtPnJlbGVhc2UgPSBlbmNsb3N1cmVfY29tcG9uZW50X3JlbGVhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvdmV4cHJlc3Mtc3lzY2ZnLmMgYi9kcml2ZXJzL21pc2MvdmV4cHJlc3Mtc3lzY2ZnLmMKaW5kZXggYjNhODEyMy4uYzM0NDQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3ZleHByZXNzLXN5c2NmZy5jCisrKyBiL2RyaXZlcnMvbWlzYy92ZXhwcmVzcy1zeXNjZmcuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiBzdGF0aWMgc3RydWN0IHJlZ21hcCAqdmV4cHJlc3Nfc3lzY2ZnX3JlZ21hcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdm9pZCAqY29udGV4dCkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IGVycjsKIAlzdHJ1Y3QgdmV4cHJlc3Nfc3lzY2ZnICpzeXNjZmcgPSBjb250ZXh0OwogCXN0cnVjdCB2ZXhwcmVzc19zeXNjZmdfZnVuYyAqZnVuYzsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CkBAIC0xNTUsMzIgKzE1NSwxOCBAQAogCXUzMiBzaXRlLCBwb3NpdGlvbiwgZGNjOwogCWludCBpOwogCi0JaWYgKGRldi0+b2Zfbm9kZSkgewotCQlpbnQgZXJyID0gdmV4cHJlc3NfY29uZmlnX2dldF90b3BvKGRldi0+b2Zfbm9kZSwgJnNpdGUsCisJZXJyID0gdmV4cHJlc3NfY29uZmlnX2dldF90b3BvKGRldi0+b2Zfbm9kZSwgJnNpdGUsCiAJCQkJJnBvc2l0aW9uLCAmZGNjKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCi0JCWlmIChlcnIpCi0JCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRldi0+b2Zfbm9kZSwKKwkJCSJhcm0sdmV4cHJlc3Mtc3lzcmVnLGZ1bmMiLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRldi0+b2Zfbm9kZSwKLQkJCQkiYXJtLHZleHByZXNzLXN5c3JlZyxmdW5jIiwgTlVMTCk7Ci0JCWlmICghcHJvcCkKLQkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCi0JCW51bSA9IHByb3AtPmxlbmd0aCAvIHNpemVvZih1MzIpIC8gMjsKLQkJdmFsID0gcHJvcC0+dmFsdWU7Ci0JfSBlbHNlIHsKLQkJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgIT0gMSB8fAotCQkJCXBkZXYtPnJlc291cmNlWzBdLmZsYWdzICE9IElPUkVTT1VSQ0VfQlVTKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7Ci0KLQkJc2l0ZSA9IHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OwotCQlpZiAoc2l0ZSA9PSBWRVhQUkVTU19TSVRFX01BU1RFUikKLQkJCXNpdGUgPSB2ZXhwcmVzc19jb25maWdfZ2V0X21hc3RlcigpOwotCQlwb3NpdGlvbiA9IDA7Ci0JCWRjYyA9IDA7Ci0JCW51bSA9IDE7Ci0JfQorCW51bSA9IHByb3AtPmxlbmd0aCAvIHNpemVvZih1MzIpIC8gMjsKKwl2YWwgPSBwcm9wLT52YWx1ZTsKIAogCS8qCiAJICogImFybSx2ZXhwcmVzcy1lbmVyZ3kiIGZ1bmN0aW9uIHVzZWQgdG8gYmUgZGVzY3JpYmVkCkBAIC0yMDcsMTMgKzE5Myw4IEBACiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAJCXUzMiBmdW5jdGlvbiwgZGV2aWNlOwogCi0JCWlmIChkZXYtPm9mX25vZGUpIHsKLQkJCWZ1bmN0aW9uID0gYmUzMl90b19jcHVwKHZhbCsrKTsKLQkJCWRldmljZSA9IGJlMzJfdG9fY3B1cCh2YWwrKyk7Ci0JCX0gZWxzZSB7Ci0JCQlmdW5jdGlvbiA9IHBkZXYtPnJlc291cmNlWzBdLmVuZDsKLQkJCWRldmljZSA9IHBkZXYtPmlkOwotCQl9CisJCWZ1bmN0aW9uID0gYmUzMl90b19jcHVwKHZhbCsrKTsKKwkJZGV2aWNlID0gYmUzMl90b19jcHVwKHZhbCsrKTsKIAogCQlkZXZfZGJnKGRldiwgImZ1bmMgJXA6ICV1LyV1LyV1LyV1LyV1XG4iLAogCQkJCWZ1bmMsIHNpdGUsIHBvc2l0aW9uLCBkY2MsCkBAIC0yNjUsMTcgKzI0Niw2IEBACiB9OwogCiAKLS8qIE5vbi1EVCBoYWNrLCB0byBiZSBnb25lLi4uICovCi1zdGF0aWMgc3RydWN0IGRldmljZSAqdmV4cHJlc3Nfc3lzY2ZnX2JyaWRnZTsKLQotaW50IHZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlwZGV2LT5kZXYucGFyZW50ID0gdmV4cHJlc3Nfc3lzY2ZnX2JyaWRnZTsKLQotCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0KLQogc3RhdGljIGludCB2ZXhwcmVzc19zeXNjZmdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdmV4cHJlc3Nfc3lzY2ZnICpzeXNjZmc7CkBAIC0zMDMsMTAgKzI3Myw2IEBACiAJaWYgKElTX0VSUihicmlkZ2UpKQogCQlyZXR1cm4gUFRSX0VSUihicmlkZ2UpOwogCi0JLyogTm9uLURUIGNhc2UgKi8KLQlpZiAoIXBkZXYtPmRldi5vZl9ub2RlKQotCQl2ZXhwcmVzc19zeXNjZmdfYnJpZGdlID0gYnJpZGdlOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYyBiL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYwppbmRleCAxZmE0YzgwLi40NDA5ZDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCkBAIC03OCwxMyArNzgsMTYgQEAKIAogLyoKICAqIFdlJ3ZlIG9ubHkgZ290IG9uZSBtYWpvciwgc28gbnVtYmVyIG9mIG1tY2JsayBkZXZpY2VzIGlzCi0gKiBsaW1pdGVkIHRvIDI1NiAvIG51bWJlciBvZiBtaW5vcnMgcGVyIGRldmljZS4KKyAqIGxpbWl0ZWQgdG8gKDEgPDwgMjApIC8gbnVtYmVyIG9mIG1pbm9ycyBwZXIgZGV2aWNlLiAgSXQgaXMgYWxzbworICogY3VycmVudGx5IGxpbWl0ZWQgYnkgdGhlIHNpemUgb2YgdGhlIHN0YXRpYyBiaXRtYXBzIGJlbG93LgogICovCiBzdGF0aWMgaW50IG1heF9kZXZpY2VzOwogCi0vKiAyNTYgbWlub3JzLCBzbyBhdCBtb3N0IDI1NiBzZXBhcmF0ZSBkZXZpY2VzICovCi1zdGF0aWMgREVDTEFSRV9CSVRNQVAoZGV2X3VzZSwgMjU2KTsKLXN0YXRpYyBERUNMQVJFX0JJVE1BUChuYW1lX3VzZSwgMjU2KTsKKyNkZWZpbmUgTUFYX0RFVklDRVMgMjU2CisKKy8qIFRPRE86IFJlcGxhY2UgdGhlc2Ugd2l0aCBzdHJ1Y3QgaWRhICovCitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZGV2X3VzZSwgTUFYX0RFVklDRVMpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKG5hbWVfdXNlLCBNQVhfREVWSUNFUyk7CiAKIC8qCiAgKiBUaGVyZSBpcyBvbmUgbW1jX2Jsa19kYXRhIHBlciBzbG90LgpAQCAtMTEyLDcgKzExNSw3IEBACiAKIAkvKgogCSAqIE9ubHkgc2V0IGluIG1haW4gbW1jX2Jsa19kYXRhIGFzc29jaWF0ZWQKLQkgKiB3aXRoIG1tY19jYXJkIHdpdGggbW1jX3NldF9kcnZkYXRhLCBhbmQga2VlcHMKKwkgKiB3aXRoIG1tY19jYXJkIHdpdGggZGV2X3NldF9kcnZkYXRhLCBhbmQga2VlcHMKIAkgKiB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3RlZCBkZXZpY2UgcGFydGl0aW9uLgogCSAqLwogCXVuc2lnbmVkIGludAlwYXJ0X2N1cnI7CkBAIC0yNjAsNyArMjYzLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gbW1jX2Jsa19nZXQoZGV2X3RvX2Rpc2soZGV2KSk7CiAKLQlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkIiwKKwlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAogCQkgICAgICAgZ2V0X2Rpc2tfcm8oZGV2X3RvX2Rpc2soZGV2KSkgXgogCQkgICAgICAgbWQtPnJlYWRfb25seSk7CiAJbW1jX2Jsa19wdXQobWQpOwpAQCAtNjQyLDcgKzY0NSw3IEBACiAJCQkJICAgICAgc3RydWN0IG1tY19ibGtfZGF0YSAqbWQpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptYWluX21kID0gbW1jX2dldF9kcnZkYXRhKGNhcmQpOworCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1haW5fbWQgPSBkZXZfZ2V0X2RydmRhdGEoJmNhcmQtPmRldik7CiAKIAlpZiAobWFpbl9tZC0+cGFydF9jdXJyID09IG1kLT5wYXJ0X3R5cGUpCiAJCXJldHVybiAwOwpAQCAtMTAwNCw3ICsxMDA3LDggQEAKIAllcnIgPSBtbWNfaHdfcmVzZXQoaG9zdCk7CiAJLyogRW5zdXJlIHdlIHN3aXRjaCBiYWNrIHRvIHRoZSBjb3JyZWN0IHBhcnRpdGlvbiAqLwogCWlmIChlcnIgIT0gLUVPUE5PVFNVUFApIHsKLQkJc3RydWN0IG1tY19ibGtfZGF0YSAqbWFpbl9tZCA9IG1tY19nZXRfZHJ2ZGF0YShob3N0LT5jYXJkKTsKKwkJc3RydWN0IG1tY19ibGtfZGF0YSAqbWFpbl9tZCA9CisJCQlkZXZfZ2V0X2RydmRhdGEoJmhvc3QtPmNhcmQtPmRldik7CiAJCWludCBwYXJ0X2VycjsKIAogCQltYWluX21kLT5wYXJ0X2N1cnIgPSBtYWluX21kLT5wYXJ0X3R5cGU7CkBAIC0xMzA4LDE5ICsxMzEyLDExIEBACiAJfQogCiAJaWYgKHN0YXR1cyAmIFIxX0VYQ0VQVElPTl9FVkVOVCkgewotCQlleHRfY3NkID0ga3phbGxvYyg1MTIsIEdGUF9LRVJORUwpOwotCQlpZiAoIWV4dF9jc2QpIHsKLQkJCXByX2VycigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGV4dF9jc2RcbiIsCi0JCQkgICAgICAgcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQllcnIgPSBtbWNfc2VuZF9leHRfY3NkKGNhcmQsIGV4dF9jc2QpOworCQllcnIgPSBtbWNfZ2V0X2V4dF9jc2QoY2FyZCwgJmV4dF9jc2QpOwogCQlpZiAoZXJyKSB7CiAJCQlwcl9lcnIoIiVzOiBlcnJvciAlZCBzZW5kaW5nIGV4dF9jc2RcbiIsCiAJCQkgICAgICAgcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUsIGVycik7Ci0JCQljaGVjayA9IE1NQ19CTEtfQUJPUlQ7Ci0JCQlnb3RvIGZyZWU7CisJCQlyZXR1cm4gTU1DX0JMS19BQk9SVDsKIAkJfQogCiAJCWlmICgoZXh0X2NzZFtFWFRfQ1NEX0VYUF9FVkVOVFNfU1RBVFVTXSAmCkBAIC0xMzM4LDcgKzEzMzQsNiBAQAogCQkJICAgICAgIHJlcS0+cnFfZGlzay0+ZGlza19uYW1lLCBwYWNrZWQtPm5yX2VudHJpZXMsCiAJCQkgICAgICAgcGFja2VkLT5ibG9ja3MsIHBhY2tlZC0+aWR4X2ZhaWx1cmUpOwogCQl9Ci1mcmVlOgogCQlrZnJlZShleHRfY3NkKTsKIAl9CiAKQEAgLTIwOTMsNyArMjA4OCw3IEBACiAKIAkvKgogCSAqICFzdWJuYW1lIGltcGxpZXMgd2UgYXJlIGNyZWF0aW5nIG1haW4gbW1jX2Jsa19kYXRhIHRoYXQgd2lsbCBiZQotCSAqIGFzc29jaWF0ZWQgd2l0aCBtbWNfY2FyZCB3aXRoIG1tY19zZXRfZHJ2ZGF0YS4gRHVlIHRvIGRldmljZQorCSAqIGFzc29jaWF0ZWQgd2l0aCBtbWNfY2FyZCB3aXRoIGRldl9zZXRfZHJ2ZGF0YS4gRHVlIHRvIGRldmljZQogCSAqIHBhcnRpdGlvbnMsIGRldmlkeCB3aWxsIG5vdCBjb2luY2lkZSB3aXRoIGEgcGVyLXBoeXNpY2FsIGNhcmQKIAkgKiBpbmRleCBhbnltb3JlIHNvIHdlIGtlZXAgdHJhY2sgb2YgYSBuYW1lIGluZGV4LgogCSAqLwpAQCAtMjQyNSw4ICsyNDIwLDkgQEAKIAlFTkRfRklYVVAKIH07CiAKLXN0YXRpYyBpbnQgbW1jX2Jsa19wcm9iZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCitzdGF0aWMgaW50IG1tY19ibGtfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOwogCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kLCAqcGFydF9tZDsKIAljaGFyIGNhcF9zdHJbMTBdOwogCkBAIC0yNDUxLDcgKzI0NDcsNyBAQAogCWlmIChtbWNfYmxrX2FsbG9jX3BhcnRzKGNhcmQsIG1kKSkKIAkJZ290byBvdXQ7CiAKLQltbWNfc2V0X2RydmRhdGEoY2FyZCwgbWQpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1kKTsKIAogCWlmIChtbWNfYWRkX2Rpc2sobWQpKQogCQlnb3RvIG91dDsKQEAgLTI0ODEsOSArMjQ3NywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtbWNfYmxrX3JlbW92ZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCitzdGF0aWMgaW50IG1tY19ibGtfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCA9IG1tY19nZXRfZHJ2ZGF0YShjYXJkKTsKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWNfZGV2X3RvX2NhcmQoZGV2KTsKKwlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJbW1jX2Jsa19yZW1vdmVfcGFydHMoY2FyZCwgbWQpOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmNhcmQtPmRldik7CkBAIC0yNDk0LDEzICsyNDkxLDE1IEBACiAJCXBtX3J1bnRpbWVfZGlzYWJsZSgmY2FyZC0+ZGV2KTsKIAlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmNhcmQtPmRldik7CiAJbW1jX2Jsa19yZW1vdmVfcmVxKG1kKTsKLQltbWNfc2V0X2RydmRhdGEoY2FyZCwgTlVMTCk7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfbW1jX2Jsa19zdXNwZW5kKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyBpbnQgX21tY19ibGtfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1tY19ibGtfZGF0YSAqcGFydF9tZDsKLQlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCA9IG1tY19nZXRfZHJ2ZGF0YShjYXJkKTsKKwlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKG1kKSB7CiAJCW1tY19xdWV1ZV9zdXNwZW5kKCZtZC0+cXVldWUpOwpAQCAtMjUxMSwyMSArMjUxMCwyMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtbWNfYmxrX3NodXRkb3duKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyB2b2lkIG1tY19ibGtfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQogewotCV9tbWNfYmxrX3N1c3BlbmQoY2FyZCk7CisJX21tY19ibGtfc3VzcGVuZChkZXYpOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG1tY19ibGtfc3VzcGVuZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG1tY19ibGtfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIF9tbWNfYmxrX3N1c3BlbmQoY2FyZCk7CisJcmV0dXJuIF9tbWNfYmxrX3N1c3BlbmQoZGV2KTsKIH0KIAotc3RhdGljIGludCBtbWNfYmxrX3Jlc3VtZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCitzdGF0aWMgaW50IG1tY19ibGtfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbW1jX2Jsa19kYXRhICpwYXJ0X21kOwotCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gbW1jX2dldF9kcnZkYXRhKGNhcmQpOworCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobWQpIHsKIAkJLyoKQEAgLTI1NDAsMTkgKzI1MzksMTUgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZQltbWNfYmxrX3N1c3BlbmQJTlVMTAotI2RlZmluZSBtbWNfYmxrX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBtbWNfZHJpdmVyIG1tY19kcml2ZXIgPSB7Ci0JLmRydgkJPSB7Ci0JCS5uYW1lCT0gIm1tY2JsayIsCi0JfSwKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtbWNfYmxrX3BtX29wcywgbW1jX2Jsa19zdXNwZW5kLCBtbWNfYmxrX3Jlc3VtZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtbWNfZHJpdmVyID0geworCS5uYW1lCQk9ICJtbWNibGsiLAorCS5wbQkJPSAmbW1jX2Jsa19wbV9vcHMsCiAJLnByb2JlCQk9IG1tY19ibGtfcHJvYmUsCiAJLnJlbW92ZQkJPSBtbWNfYmxrX3JlbW92ZSwKLQkuc3VzcGVuZAk9IG1tY19ibGtfc3VzcGVuZCwKLQkucmVzdW1lCQk9IG1tY19ibGtfcmVzdW1lLAogCS5zaHV0ZG93bgk9IG1tY19ibGtfc2h1dGRvd24sCiB9OwogCkBAIC0yNTYzLDcgKzI1NTgsNyBAQAogCWlmIChwZXJkZXZfbWlub3JzICE9IENPTkZJR19NTUNfQkxPQ0tfTUlOT1JTKQogCQlwcl9pbmZvKCJtbWNibGs6IHVzaW5nICVkIG1pbm9ycyBwZXIgZGV2aWNlXG4iLCBwZXJkZXZfbWlub3JzKTsKIAotCW1heF9kZXZpY2VzID0gMjU2IC8gcGVyZGV2X21pbm9yczsKKwltYXhfZGV2aWNlcyA9IG1pbihNQVhfREVWSUNFUywgKDEgPDwgTUlOT1JCSVRTKSAvIHBlcmRldl9taW5vcnMpOwogCiAJcmVzID0gcmVnaXN0ZXJfYmxrZGV2KE1NQ19CTE9DS19NQUpPUiwgIm1tYyIpOwogCWlmIChyZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMgYi9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKaW5kZXggMGMwZmM1Mi4uMGE3NDMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL21tYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgkJLyogRm9yIG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKCkgKi8KQEAgLTMyLDYgKzMzLDggQEAKICNkZWZpbmUgQlVGRkVSX09SREVSCQkyCiAjZGVmaW5lIEJVRkZFUl9TSVpFCQkoUEFHRV9TSVpFIDw8IEJVRkZFUl9PUkRFUikKIAorI2RlZmluZSBURVNUX0FMSUdOX0VORAkJOAorCiAvKgogICogTGltaXQgdGhlIHRlc3QgYXJlYSBzaXplIHRvIHRoZSBtYXhpbXVtIE1NQyBIQyBlcmFzZSBncm91cCBzaXplLiAgTm90ZSB0aGF0CiAgKiB0aGUgbWF4aW11bSBTRCBhbGxvY2F0aW9uIHVuaXQgc2l6ZSBpcyBqdXN0IDRNaUIuCkBAIC0xMTc0LDcgKzExNzcsNyBAQAogCWludCByZXQsIGk7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwogCi0JZm9yIChpID0gMTtpIDwgNDtpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDwgVEVTVF9BTElHTl9FTkQ7IGkrKykgewogCQlzZ19pbml0X29uZSgmc2csIHRlc3QtPmJ1ZmZlciArIGksIDUxMik7CiAJCXJldCA9IG1tY190ZXN0X3RyYW5zZmVyKHRlc3QsICZzZywgMSwgMCwgMSwgNTEyLCAxKTsKIAkJaWYgKHJldCkKQEAgLTExODksNyArMTE5Miw3IEBACiAJaW50IHJldCwgaTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAKLQlmb3IgKGkgPSAxO2kgPCA0O2krKykgeworCWZvciAoaSA9IDE7IGkgPCBURVNUX0FMSUdOX0VORDsgaSsrKSB7CiAJCXNnX2luaXRfb25lKCZzZywgdGVzdC0+YnVmZmVyICsgaSwgNTEyKTsKIAkJcmV0ID0gbW1jX3Rlc3RfdHJhbnNmZXIodGVzdCwgJnNnLCAxLCAwLCAxLCA1MTIsIDApOwogCQlpZiAocmV0KQpAQCAtMTIxNiw3ICsxMjE5LDcgQEAKIAlpZiAoc2l6ZSA8IDEwMjQpCiAJCXJldHVybiBSRVNVTFRfVU5TVVBfSE9TVDsKIAotCWZvciAoaSA9IDE7aSA8IDQ7aSsrKSB7CisJZm9yIChpID0gMTsgaSA8IFRFU1RfQUxJR05fRU5EOyBpKyspIHsKIAkJc2dfaW5pdF9vbmUoJnNnLCB0ZXN0LT5idWZmZXIgKyBpLCBzaXplKTsKIAkJcmV0ID0gbW1jX3Rlc3RfdHJhbnNmZXIodGVzdCwgJnNnLCAxLCAwLCBzaXplLzUxMiwgNTEyLCAxKTsKIAkJaWYgKHJldCkKQEAgLTEyNDMsNyArMTI0Niw3IEBACiAJaWYgKHNpemUgPCAxMDI0KQogCQlyZXR1cm4gUkVTVUxUX1VOU1VQX0hPU1Q7CiAKLQlmb3IgKGkgPSAxO2kgPCA0O2krKykgeworCWZvciAoaSA9IDE7IGkgPCBURVNUX0FMSUdOX0VORDsgaSsrKSB7CiAJCXNnX2luaXRfb25lKCZzZywgdGVzdC0+YnVmZmVyICsgaSwgc2l6ZSk7CiAJCXJldCA9IG1tY190ZXN0X3RyYW5zZmVyKHRlc3QsICZzZywgMSwgMCwgc2l6ZS81MTIsIDUxMiwgMCk7CiAJCWlmIChyZXQpCkBAIC0yOTk3LDggKzMwMDAsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbW1jX3Rlc3RfcHJvYmUoc3RydWN0IG1tY19jYXJkICpjYXJkKQorc3RhdGljIGludCBtbWNfdGVzdF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG1tY19jYXJkICpjYXJkID0gbW1jX2Rldl90b19jYXJkKGRldik7CiAJaW50IHJldDsKIAogCWlmICghbW1jX2NhcmRfbW1jKGNhcmQpICYmICFtbWNfY2FyZF9zZChjYXJkKSkKQEAgLTMwMTMsMjAgKzMwMTcsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbW1jX3Rlc3RfcmVtb3ZlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyBpbnQgbW1jX3Rlc3RfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWNfZGV2X3RvX2NhcmQoZGV2KTsKKwogCW1tY190ZXN0X2ZyZWVfcmVzdWx0KGNhcmQpOwogCW1tY190ZXN0X2ZyZWVfZGJnZnNfZmlsZShjYXJkKTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtbWNfdGVzdF9zaHV0ZG93bihzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCitzdGF0aWMgdm9pZCBtbWNfdGVzdF9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbW1jX2RyaXZlciBtbWNfZHJpdmVyID0gewotCS5kcnYJCT0gewotCQkubmFtZQk9ICJtbWNfdGVzdCIsCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtbWNfZHJpdmVyID0geworCS5uYW1lCT0gIm1tY190ZXN0IiwKIAkucHJvYmUJCT0gbW1jX3Rlc3RfcHJvYmUsCiAJLnJlbW92ZQkJPSBtbWNfdGVzdF9yZW1vdmUsCiAJLnNodXRkb3duCT0gbW1jX3Rlc3Rfc2h1dGRvd24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKaW5kZXggY2ZhNjExMC4uMjM2ZDE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYwpAQCAtMjMyLDEzICsyMzIsMTUgQEAKIAkJCWlmICghbXFycV9jdXItPmJvdW5jZV9idWYpIHsKIAkJCQlwcl93YXJuKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGJvdW5jZSBjdXIgYnVmZmVyXG4iLAogCQkJCQltbWNfY2FyZF9uYW1lKGNhcmQpKTsKLQkJCX0KLQkJCW1xcnFfcHJldi0+Ym91bmNlX2J1ZiA9IGttYWxsb2MoYm91bmNlc3osIEdGUF9LRVJORUwpOwotCQkJaWYgKCFtcXJxX3ByZXYtPmJvdW5jZV9idWYpIHsKLQkJCQlwcl93YXJuKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGJvdW5jZSBwcmV2IGJ1ZmZlclxuIiwKLQkJCQkJbW1jX2NhcmRfbmFtZShjYXJkKSk7Ci0JCQkJa2ZyZWUobXFycV9jdXItPmJvdW5jZV9idWYpOwotCQkJCW1xcnFfY3VyLT5ib3VuY2VfYnVmID0gTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkJbXFycV9wcmV2LT5ib3VuY2VfYnVmID0KKwkJCQkJCWttYWxsb2MoYm91bmNlc3osIEdGUF9LRVJORUwpOworCQkJCWlmICghbXFycV9wcmV2LT5ib3VuY2VfYnVmKSB7CisJCQkJCXByX3dhcm4oIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgYm91bmNlIHByZXYgYnVmZmVyXG4iLAorCQkJCQkJbW1jX2NhcmRfbmFtZShjYXJkKSk7CisJCQkJCWtmcmVlKG1xcnFfY3VyLT5ib3VuY2VfYnVmKTsKKwkJCQkJbXFycV9jdXItPmJvdW5jZV9idWYgPSBOVUxMOworCQkJCX0KIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2J1cy5jIGIvZHJpdmVycy9tbWMvY29yZS9idXMuYwppbmRleCA4YTFmMTI0Li41Y2E1NjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKQEAgLTI1LDggKzI1LDYgQEAKICNpbmNsdWRlICJzZGlvX2Npcy5oIgogI2luY2x1ZGUgImJ1cy5oIgogCi0jZGVmaW5lIHRvX21tY19kcml2ZXIoZCkJY29udGFpbmVyX29mKGQsIHN0cnVjdCBtbWNfZHJpdmVyLCBkcnYpCi0KIHN0YXRpYyBzc2l6ZV90IHR5cGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTEwNiwzMyArMTA0LDE0IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBtbWNfYnVzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbW1jX2RyaXZlciAqZHJ2ID0gdG9fbW1jX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0Jc3RydWN0IG1tY19jYXJkICpjYXJkID0gbW1jX2Rldl90b19jYXJkKGRldik7Ci0KLQlyZXR1cm4gZHJ2LT5wcm9iZShjYXJkKTsKLX0KLQotc3RhdGljIGludCBtbWNfYnVzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG1tY19kcml2ZXIgKmRydiA9IHRvX21tY19kcml2ZXIoZGV2LT5kcml2ZXIpOwotCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOwotCi0JZHJ2LT5yZW1vdmUoY2FyZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgbW1jX2J1c19zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19kcml2ZXIgKmRydiA9IHRvX21tY19kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOwogCXN0cnVjdCBtbWNfaG9zdCAqaG9zdCA9IGNhcmQtPmhvc3Q7CiAJaW50IHJldDsKIAotCWlmIChkZXYtPmRyaXZlciAmJiBkcnYtPnNodXRkb3duKQotCQlkcnYtPnNodXRkb3duKGNhcmQpOworCWlmIChkZXYtPmRyaXZlciAmJiBkZXYtPmRyaXZlci0+c2h1dGRvd24pCisJCWRldi0+ZHJpdmVyLT5zaHV0ZG93bihkZXYpOwogCiAJaWYgKGhvc3QtPmJ1c19vcHMtPnNodXRkb3duKSB7CiAJCXJldCA9IGhvc3QtPmJ1c19vcHMtPnNodXRkb3duKGhvc3QpOwpAQCAtMTQ1LDE2ICsxMjQsMTMgQEAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgbW1jX2J1c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2RyaXZlciAqZHJ2ID0gdG9fbW1jX2RyaXZlcihkZXYtPmRyaXZlcik7CiAJc3RydWN0IG1tY19jYXJkICpjYXJkID0gbW1jX2Rldl90b19jYXJkKGRldik7CiAJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gY2FyZC0+aG9zdDsKIAlpbnQgcmV0OwogCi0JaWYgKGRldi0+ZHJpdmVyICYmIGRydi0+c3VzcGVuZCkgewotCQlyZXQgPSBkcnYtPnN1c3BlbmQoY2FyZCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KKwlyZXQgPSBwbV9nZW5lcmljX3N1c3BlbmQoZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gaG9zdC0+YnVzX29wcy0+c3VzcGVuZChob3N0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTYyLDcgKzEzOCw2IEBACiAKIHN0YXRpYyBpbnQgbW1jX2J1c19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfZHJpdmVyICpkcnYgPSB0b19tbWNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWNfZGV2X3RvX2NhcmQoZGV2KTsKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OwogCWludCByZXQ7CkBAIC0xNzIsOSArMTQ3LDcgQEAKIAkJcHJfd2FybigiJXM6IGVycm9yICVkIGR1cmluZyByZXN1bWUgKGNhcmQgd2FzIHJlbW92ZWQ/KVxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0KSwgcmV0KTsKIAotCWlmIChkZXYtPmRyaXZlciAmJiBkcnYtPnJlc3VtZSkKLQkJcmV0ID0gZHJ2LT5yZXN1bWUoY2FyZCk7Ci0KKwlyZXQgPSBwbV9nZW5lcmljX3Jlc3VtZShkZXYpOwogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKQEAgLTIwNyw4ICsxODAsNiBAQAogCS5kZXZfZ3JvdXBzCT0gbW1jX2Rldl9ncm91cHMsCiAJLm1hdGNoCQk9IG1tY19idXNfbWF0Y2gsCiAJLnVldmVudAkJPSBtbWNfYnVzX3VldmVudCwKLQkucHJvYmUJCT0gbW1jX2J1c19wcm9iZSwKLQkucmVtb3ZlCQk9IG1tY19idXNfcmVtb3ZlLAogCS5zaHV0ZG93bgk9IG1tY19idXNfc2h1dGRvd24sCiAJLnBtCQk9ICZtbWNfYnVzX3BtX29wcywKIH07CkBAIC0yMjcsMjQgKzE5OCwyMiBAQAogICoJbW1jX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbWVkaWEgZHJpdmVyCiAgKglAZHJ2OiBNTUMgbWVkaWEgZHJpdmVyCiAgKi8KLWludCBtbWNfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtbWNfZHJpdmVyICpkcnYpCitpbnQgbW1jX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewotCWRydi0+ZHJ2LmJ1cyA9ICZtbWNfYnVzX3R5cGU7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcnYpOworCWRydi0+YnVzID0gJm1tY19idXNfdHlwZTsKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKGRydik7CiB9Ci0KIEVYUE9SVF9TWU1CT0wobW1jX3JlZ2lzdGVyX2RyaXZlcik7CiAKIC8qKgogICoJbW1jX3VucmVnaXN0ZXJfZHJpdmVyIC0gdW5yZWdpc3RlciBhIG1lZGlhIGRyaXZlcgogICoJQGRydjogTU1DIG1lZGlhIGRyaXZlcgogICovCi12b2lkIG1tY191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgbW1jX2RyaXZlciAqZHJ2KQordm9pZCBtbWNfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKLQlkcnYtPmRydi5idXMgPSAmbW1jX2J1c190eXBlOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRydik7CisJZHJ2LT5idXMgPSAmbW1jX2J1c190eXBlOworCWRyaXZlcl91bnJlZ2lzdGVyKGRydik7CiB9Ci0KIEVYUE9SVF9TWU1CT0wobW1jX3VucmVnaXN0ZXJfZHJpdmVyKTsKIAogc3RhdGljIHZvaWQgbW1jX3JlbGVhc2VfY2FyZChzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCmluZGV4IGYyNmE1ZjEuLjk1ODRiZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCkBAIC0xNDksNiArMTQ5LDE0IEBACiAKIAkJbGVkX3RyaWdnZXJfZXZlbnQoaG9zdC0+bGVkLCBMRURfT0ZGKTsKIAorCQlpZiAobXJxLT5zYmMpIHsKKwkJCXByX2RlYnVnKCIlczogcmVxIGRvbmUgPENNRCV1PjogJWQ6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCisJCQkJbW1jX2hvc3RuYW1lKGhvc3QpLCBtcnEtPnNiYy0+b3Bjb2RlLAorCQkJCW1ycS0+c2JjLT5lcnJvciwKKwkJCQltcnEtPnNiYy0+cmVzcFswXSwgbXJxLT5zYmMtPnJlc3BbMV0sCisJCQkJbXJxLT5zYmMtPnJlc3BbMl0sIG1ycS0+c2JjLT5yZXNwWzNdKTsKKwkJfQorCiAJCXByX2RlYnVnKCIlczogcmVxIGRvbmUgKENNRCV1KTogJWQ6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdCksIGNtZC0+b3Bjb2RlLCBlcnIsCiAJCQljbWQtPnJlc3BbMF0sIGNtZC0+cmVzcFsxXSwKQEAgLTIxNCw2ICsyMjIsMTAgQEAKIAogCW1ycS0+Y21kLT5lcnJvciA9IDA7CiAJbXJxLT5jbWQtPm1ycSA9IG1ycTsKKwlpZiAobXJxLT5zYmMpIHsKKwkJbXJxLT5zYmMtPmVycm9yID0gMDsKKwkJbXJxLT5zYmMtPm1ycSA9IG1ycTsKKwl9CiAJaWYgKG1ycS0+ZGF0YSkgewogCQlCVUdfT04obXJxLT5kYXRhLT5ibGtzeiA+IGhvc3QtPm1heF9ibGtfc2l6ZSk7CiAJCUJVR19PTihtcnEtPmRhdGEtPmJsb2NrcyA+IGhvc3QtPm1heF9ibGtfY291bnQpOwpAQCAtNTM4LDggKzU1MCwxOCBAQAogCQlpZiAoaG9zdC0+Y2FyZCAmJiBtbWNfY2FyZF9tbWMoaG9zdC0+Y2FyZCkgJiYKIAkJICAgICgobW1jX3Jlc3BfdHlwZShob3N0LT5hcmVxLT5tcnEtPmNtZCkgPT0gTU1DX1JTUF9SMSkgfHwKIAkJICAgICAobW1jX3Jlc3BfdHlwZShob3N0LT5hcmVxLT5tcnEtPmNtZCkgPT0gTU1DX1JTUF9SMUIpKSAmJgotCQkgICAgKGhvc3QtPmFyZXEtPm1ycS0+Y21kLT5yZXNwWzBdICYgUjFfRVhDRVBUSU9OX0VWRU5UKSkKKwkJICAgIChob3N0LT5hcmVxLT5tcnEtPmNtZC0+cmVzcFswXSAmIFIxX0VYQ0VQVElPTl9FVkVOVCkpIHsKKworCQkJLyogQ2FuY2VsIHRoZSBwcmVwYXJlZCByZXF1ZXN0ICovCisJCQlpZiAoYXJlcSkKKwkJCQltbWNfcG9zdF9yZXEoaG9zdCwgYXJlcS0+bXJxLCAtRUlOVkFMKTsKKwogCQkJbW1jX3N0YXJ0X2Jrb3BzKGhvc3QtPmNhcmQsIHRydWUpOworCisJCQkvKiBwcmVwYXJlIHRoZSByZXF1ZXN0IGFnYWluICovCisJCQlpZiAoYXJlcSkKKwkJCQltbWNfcHJlX3JlcShob3N0LCBhcmVxLT5tcnEsICFob3N0LT5hcmVxKTsKKwkJfQogCX0KIAogCWlmICghZXJyICYmIGFyZXEpCkBAIC03MDksMjcgKzczMSwxNiBAQAogCWludCBlcnI7CiAJdTggKmV4dF9jc2Q7CiAKLQkvKgotCSAqIEluIGZ1dHVyZSB3b3JrLCB3ZSBzaG91bGQgY29uc2lkZXIgc3RvcmluZyB0aGUgZW50aXJlIGV4dF9jc2QuCi0JICovCi0JZXh0X2NzZCA9IGttYWxsb2MoNTEyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWV4dF9jc2QpIHsKLQkJcHJfZXJyKCIlczogY291bGQgbm90IGFsbG9jYXRlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBleHRfY3NkLlxuIiwKLQkJICAgICAgIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQogCW1tY19jbGFpbV9ob3N0KGNhcmQtPmhvc3QpOwotCWVyciA9IG1tY19zZW5kX2V4dF9jc2QoY2FyZCwgZXh0X2NzZCk7CisJZXJyID0gbW1jX2dldF9leHRfY3NkKGNhcmQsICZleHRfY3NkKTsKIAltbWNfcmVsZWFzZV9ob3N0KGNhcmQtPmhvc3QpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gZXJyOwogCiAJY2FyZC0+ZXh0X2NzZC5yYXdfYmtvcHNfc3RhdHVzID0gZXh0X2NzZFtFWFRfQ1NEX0JLT1BTX1NUQVRVU107CiAJY2FyZC0+ZXh0X2NzZC5yYXdfZXhjZXB0aW9uX3N0YXR1cyA9IGV4dF9jc2RbRVhUX0NTRF9FWFBfRVZFTlRTX1NUQVRVU107Ci1vdXQ6CiAJa2ZyZWUoZXh0X2NzZCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wobW1jX3JlYWRfYmtvcHNfc3RhdHVzKTsKIApAQCAtMTA4OCw2ICsxMDk5LDIyIEBACiAJbW1jX2hvc3RfY2xrX3JlbGVhc2UoaG9zdCk7CiB9CiAKKy8qCisgKiBTZXQgaW5pdGlhbCBzdGF0ZSBhZnRlciBhIHBvd2VyIGN5Y2xlIG9yIGEgaHdfcmVzZXQuCisgKi8KK3ZvaWQgbW1jX3NldF9pbml0aWFsX3N0YXRlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlpZiAobW1jX2hvc3RfaXNfc3BpKGhvc3QpKQorCQlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfSElHSDsKKwllbHNlCisJCWhvc3QtPmlvcy5jaGlwX3NlbGVjdCA9IE1NQ19DU19ET05UQ0FSRTsKKwlob3N0LT5pb3MuYnVzX21vZGUgPSBNTUNfQlVTTU9ERV9QVVNIUFVMTDsKKwlob3N0LT5pb3MuYnVzX3dpZHRoID0gTU1DX0JVU19XSURUSF8xOworCWhvc3QtPmlvcy50aW1pbmcgPSBNTUNfVElNSU5HX0xFR0FDWTsKKworCW1tY19zZXRfaW9zKGhvc3QpOworfQorCiAvKioKICAqIG1tY192ZGRfdG9fb2NyYml0bnVtIC0gQ29udmVydCBhIHZvbHRhZ2UgdG8gdGhlIE9DUiBiaXQgbnVtYmVyCiAgKiBAdmRkOgl2b2x0YWdlIChtVikKQEAgLTE0MjAsMTggKzE0NDcsMjAgQEAKIAkJcHJfd2FybigiJXM6IGNhbm5vdCB2ZXJpZnkgc2lnbmFsIHZvbHRhZ2Ugc3dpdGNoXG4iLAogCQkJbW1jX2hvc3RuYW1lKGhvc3QpKTsKIAorCW1tY19ob3N0X2Nsa19ob2xkKGhvc3QpOworCiAJY21kLm9wY29kZSA9IFNEX1NXSVRDSF9WT0xUQUdFOwogCWNtZC5hcmcgPSAwOwogCWNtZC5mbGFncyA9IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FDOwogCiAJZXJyID0gbW1jX3dhaXRfZm9yX2NtZChob3N0LCAmY21kLCAwKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycl9jb21tYW5kOwogCi0JaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkgJiYgKGNtZC5yZXNwWzBdICYgUjFfRVJST1IpKQotCQlyZXR1cm4gLUVJTzsKLQotCW1tY19ob3N0X2Nsa19ob2xkKGhvc3QpOworCWlmICghbW1jX2hvc3RfaXNfc3BpKGhvc3QpICYmIChjbWQucmVzcFswXSAmIFIxX0VSUk9SKSkgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9jb21tYW5kOworCX0KIAkvKgogCSAqIFRoZSBjYXJkIHNob3VsZCBkcml2ZSBjbWQgYW5kIGRhdFswOjNdIGxvdyBpbW1lZGlhdGVseQogCSAqIGFmdGVyIHRoZSByZXNwb25zZSBvZiBjbWQxMSwgYnV0IHdhaXQgMSBtcyB0byBiZSBzdXJlCkBAIC0xNDgwLDYgKzE1MDksNyBAQAogCQltbWNfcG93ZXJfY3ljbGUoaG9zdCwgb2NyKTsKIAl9CiAKK2Vycl9jb21tYW5kOgogCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogCiAJcmV0dXJuIGVycjsKQEAgLTE1MjYsMTUgKzE1NTYsOSBAQAogCW1tY19ob3N0X2Nsa19ob2xkKGhvc3QpOwogCiAJaG9zdC0+aW9zLnZkZCA9IGZscyhvY3IpIC0gMTsKLQlpZiAobW1jX2hvc3RfaXNfc3BpKGhvc3QpKQotCQlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfSElHSDsKLQllbHNlCi0JCWhvc3QtPmlvcy5jaGlwX3NlbGVjdCA9IE1NQ19DU19ET05UQ0FSRTsKLQlob3N0LT5pb3MuYnVzX21vZGUgPSBNTUNfQlVTTU9ERV9QVVNIUFVMTDsKIAlob3N0LT5pb3MucG93ZXJfbW9kZSA9IE1NQ19QT1dFUl9VUDsKLQlob3N0LT5pb3MuYnVzX3dpZHRoID0gTU1DX0JVU19XSURUSF8xOwotCWhvc3QtPmlvcy50aW1pbmcgPSBNTUNfVElNSU5HX0xFR0FDWTsKLQltbWNfc2V0X2lvcyhob3N0KTsKKwkvKiBTZXQgaW5pdGlhbCBzdGF0ZSBhbmQgY2FsbCBtbWNfc2V0X2lvcyAqLworCW1tY19zZXRfaW5pdGlhbF9zdGF0ZShob3N0KTsKIAogCS8qIFRyeSB0byBzZXQgc2lnbmFsIHZvbHRhZ2UgdG8gMy4zViBidXQgZmFsbCBiYWNrIHRvIDEuOHYgb3IgMS4ydiAqLwogCWlmIChfX21tY19zZXRfc2lnbmFsX3ZvbHRhZ2UoaG9zdCwgTU1DX1NJR05BTF9WT0xUQUdFXzMzMCkgPT0gMCkKQEAgLTE1NzQsMTQgKzE1OTgsOSBAQAogCWhvc3QtPmlvcy5jbG9jayA9IDA7CiAJaG9zdC0+aW9zLnZkZCA9IDA7CiAKLQlpZiAoIW1tY19ob3N0X2lzX3NwaShob3N0KSkgewotCQlob3N0LT5pb3MuYnVzX21vZGUgPSBNTUNfQlVTTU9ERV9PUEVORFJBSU47Ci0JCWhvc3QtPmlvcy5jaGlwX3NlbGVjdCA9IE1NQ19DU19ET05UQ0FSRTsKLQl9CiAJaG9zdC0+aW9zLnBvd2VyX21vZGUgPSBNTUNfUE9XRVJfT0ZGOwotCWhvc3QtPmlvcy5idXNfd2lkdGggPSBNTUNfQlVTX1dJRFRIXzE7Ci0JaG9zdC0+aW9zLnRpbWluZyA9IE1NQ19USU1JTkdfTEVHQUNZOwotCW1tY19zZXRfaW9zKGhvc3QpOworCS8qIFNldCBpbml0aWFsIHN0YXRlIGFuZCBjYWxsIG1tY19zZXRfaW9zICovCisJbW1jX3NldF9pbml0aWFsX3N0YXRlKGhvc3QpOwogCiAJLyoKIAkgKiBTb21lIGNvbmZpZ3VyYXRpb25zLCBzdWNoIGFzIHRoZSA4MDIuMTEgU0RJTyBjYXJkIGluIHRoZSBPTFBDCkBAIC0yMjU5LDMwICsyMjc4LDE2IEBACiAKIAkvKiBJZiB0aGUgcmVzZXQgaGFzIGhhcHBlbmVkLCB0aGVuIGEgc3RhdHVzIGNvbW1hbmQgd2lsbCBmYWlsICovCiAJaWYgKGNoZWNrKSB7Ci0JCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQgPSB7MH07Ci0JCWludCBlcnI7CisJCXUzMiBzdGF0dXM7CiAKLQkJY21kLm9wY29kZSA9IE1NQ19TRU5EX1NUQVRVUzsKLQkJaWYgKCFtbWNfaG9zdF9pc19zcGkoY2FyZC0+aG9zdCkpCi0JCQljbWQuYXJnID0gY2FyZC0+cmNhIDw8IDE2OwotCQljbWQuZmxhZ3MgPSBNTUNfUlNQX1NQSV9SMiB8IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FDOwotCQllcnIgPSBtbWNfd2FpdF9mb3JfY21kKGNhcmQtPmhvc3QsICZjbWQsIDApOwotCQlpZiAoIWVycikgeworCQlpZiAoIW1tY19zZW5kX3N0YXR1cyhjYXJkLCAmc3RhdHVzKSkgewogCQkJbW1jX2hvc3RfY2xrX3JlbGVhc2UoaG9zdCk7CiAJCQlyZXR1cm4gLUVOT1NZUzsKIAkJfQogCX0KIAotCWlmIChtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKLQkJaG9zdC0+aW9zLmNoaXBfc2VsZWN0ID0gTU1DX0NTX0hJR0g7Ci0JCWhvc3QtPmlvcy5idXNfbW9kZSA9IE1NQ19CVVNNT0RFX1BVU0hQVUxMOwotCX0gZWxzZSB7Ci0JCWhvc3QtPmlvcy5jaGlwX3NlbGVjdCA9IE1NQ19DU19ET05UQ0FSRTsKLQkJaG9zdC0+aW9zLmJ1c19tb2RlID0gTU1DX0JVU01PREVfT1BFTkRSQUlOOwotCX0KLQlob3N0LT5pb3MuYnVzX3dpZHRoID0gTU1DX0JVU19XSURUSF8xOwotCWhvc3QtPmlvcy50aW1pbmcgPSBNTUNfVElNSU5HX0xFR0FDWTsKLQltbWNfc2V0X2lvcyhob3N0KTsKKwkvKiBTZXQgaW5pdGlhbCBzdGF0ZSBhbmQgY2FsbCBtbWNfc2V0X2lvcyAqLworCW1tY19zZXRfaW5pdGlhbF9zdGF0ZShob3N0KTsKIAogCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCmluZGV4IDQ0M2E1ODQuLmQ3NjU5N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCkBAIC00OSw2ICs0OSw3IEBACiB2b2lkIG1tY19wb3dlcl91cChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiBvY3IpOwogdm9pZCBtbWNfcG93ZXJfb2ZmKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CiB2b2lkIG1tY19wb3dlcl9jeWNsZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiBvY3IpOwordm9pZCBtbWNfc2V0X2luaXRpYWxfc3RhdGUoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1tY19kZWxheSh1bnNpZ25lZCBpbnQgbXMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jCmluZGV4IDkxZWIxNjIuLmU5MTQyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jCkBAIC0yOTEsMTQgKzI5MSw4IEBACiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZXh0X2NzZCA9IGttYWxsb2MoNTEyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWV4dF9jc2QpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0KIAltbWNfZ2V0X2NhcmQoY2FyZCk7Ci0JZXJyID0gbW1jX3NlbmRfZXh0X2NzZChjYXJkLCBleHRfY3NkKTsKKwllcnIgPSBtbWNfZ2V0X2V4dF9jc2QoY2FyZCwgJmV4dF9jc2QpOwogCW1tY19wdXRfY2FyZChjYXJkKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwpAQCAtMzE0LDcgKzMwOCw2IEBACiAKIG91dF9mcmVlOgogCWtmcmVlKGJ1Zik7Ci0Ja2ZyZWUoZXh0X2NzZCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKaW5kZXggYTMwMWE3OC4uMDJhZDc5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCkBAIC0xNzcsNjUgKzE3Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBSZWFkIGV4dGVuZGVkIENTRC4KLSAqLwotc3RhdGljIGludCBtbWNfZ2V0X2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCAqKm5ld19leHRfY3NkKQotewotCWludCBlcnI7Ci0JdTggKmV4dF9jc2Q7Ci0KLQlCVUdfT04oIWNhcmQpOwotCUJVR19PTighbmV3X2V4dF9jc2QpOwotCi0JKm5ld19leHRfY3NkID0gTlVMTDsKLQotCWlmIChjYXJkLT5jc2QubW1jYV92c24gPCBDU0RfU1BFQ19WRVJfNCkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIEFzIHRoZSBleHRfY3NkIGlzIHNvIGxhcmdlIGFuZCBtb3N0bHkgdW51c2VkLCB3ZSBkb24ndCBzdG9yZSB0aGUKLQkgKiByYXcgYmxvY2sgaW4gbW1jX2NhcmQuCi0JICovCi0JZXh0X2NzZCA9IGttYWxsb2MoNTEyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWV4dF9jc2QpIHsKLQkJcHJfZXJyKCIlczogY291bGQgbm90IGFsbG9jYXRlIGEgYnVmZmVyIHRvICIKLQkJCSJyZWNlaXZlIHRoZSBleHRfY3NkLlxuIiwgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZXJyID0gbW1jX3NlbmRfZXh0X2NzZChjYXJkLCBleHRfY3NkKTsKLQlpZiAoZXJyKSB7Ci0JCWtmcmVlKGV4dF9jc2QpOwotCQkqbmV3X2V4dF9jc2QgPSBOVUxMOwotCi0JCS8qIElmIHRoZSBob3N0IG9yIHRoZSBjYXJkIGNhbid0IGRvIHRoZSBzd2l0Y2gsCi0JCSAqIGZhaWwgbW9yZSBncmFjZWZ1bGx5LiAqLwotCQlpZiAoKGVyciAhPSAtRUlOVkFMKQotCQkgJiYgKGVyciAhPSAtRU5PU1lTKQotCQkgJiYgKGVyciAhPSAtRUZBVUxUKSkKLQkJCXJldHVybiBlcnI7Ci0KLQkJLyoKLQkJICogSGlnaCBjYXBhY2l0eSBjYXJkcyBzaG91bGQgaGF2ZSB0aGlzICJtYWdpYyIgc2l6ZQotCQkgKiBzdG9yZWQgaW4gdGhlaXIgQ1NELgotCQkgKi8KLQkJaWYgKGNhcmQtPmNzZC5jYXBhY2l0eSA9PSAoNDA5NiAqIDUxMikpIHsKLQkJCXByX2VycigiJXM6IHVuYWJsZSB0byByZWFkIEVYVF9DU0QgIgotCQkJCSJvbiBhIHBvc3NpYmxlIGhpZ2ggY2FwYWNpdHkgY2FyZC4gIgotCQkJCSJDYXJkIHdpbGwgYmUgaWdub3JlZC5cbiIsCi0JCQkJbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpKTsKLQkJfSBlbHNlIHsKLQkJCXByX3dhcm4oIiVzOiB1bmFibGUgdG8gcmVhZCBFWFRfQ1NELCBwZXJmb3JtYW5jZSBtaWdodCBzdWZmZXJcbiIsCi0JCQkJbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpKTsKLQkJCWVyciA9IDA7Ci0JCX0KLQl9IGVsc2UKLQkJKm5ld19leHRfY3NkID0gZXh0X2NzZDsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIG1tY19zZWxlY3RfY2FyZF90eXBlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OwpAQCAtMzkxLDE2ICszMzIsMTEgQEAKIC8qCiAgKiBEZWNvZGUgZXh0ZW5kZWQgQ1NELgogICovCi1zdGF0aWMgaW50IG1tY19yZWFkX2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCAqZXh0X2NzZCkKK3N0YXRpYyBpbnQgbW1jX2RlY29kZV9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKmV4dF9jc2QpCiB7CiAJaW50IGVyciA9IDAsIGlkeDsKIAl1bnNpZ25lZCBpbnQgcGFydF9zaXplOwogCi0JQlVHX09OKCFjYXJkKTsKLQotCWlmICghZXh0X2NzZCkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBWZXJzaW9uIGlzIGNvZGVkIGluIHRoZSBDU0RfU1RSVUNUVVJFIGJ5dGUgaW4gdGhlIEVYVF9DU0QgcmVnaXN0ZXIgKi8KIAljYXJkLT5leHRfY3NkLnJhd19leHRfY3NkX3N0cnVjdHVyZSA9IGV4dF9jc2RbRVhUX0NTRF9TVFJVQ1RVUkVdOwogCWlmIChjYXJkLT5jc2Quc3RydWN0dXJlID09IDMpIHsKQEAgLTYyOCwxNSArNTY0LDU1IEBACiAJCWNhcmQtPmV4dF9jc2QuZGF0YV9zZWN0b3Jfc2l6ZSA9IDUxMjsKIAl9CiAKKwkvKiBlTU1DIHY1IG9yIGxhdGVyICovCisJaWYgKGNhcmQtPmV4dF9jc2QucmV2ID49IDcpIHsKKwkJbWVtY3B5KGNhcmQtPmV4dF9jc2QuZndyZXYsICZleHRfY3NkW0VYVF9DU0RfRklSTVdBUkVfVkVSU0lPTl0sCisJCSAgICAgICBNTUNfRklSTVdBUkVfTEVOKTsKKwkJY2FyZC0+ZXh0X2NzZC5mZnVfY2FwYWJsZSA9CisJCQkoZXh0X2NzZFtFWFRfQ1NEX1NVUFBPUlRFRF9NT0RFXSAmIDB4MSkgJiYKKwkJCSEoZXh0X2NzZFtFWFRfQ1NEX0ZXX0NPTkZJR10gJiAweDEpOworCX0KIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbW1jX2ZyZWVfZXh0X2NzZCh1OCAqZXh0X2NzZCkKK3N0YXRpYyBpbnQgbW1jX3JlYWRfZXh0X2NzZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCiB7Ci0Ja2ZyZWUoZXh0X2NzZCk7Ci19CisJdTggKmV4dF9jc2Q7CisJaW50IGVycjsKIAorCWlmICghbW1jX2Nhbl9leHRfY3NkKGNhcmQpKQorCQlyZXR1cm4gMDsKKworCWVyciA9IG1tY19nZXRfZXh0X2NzZChjYXJkLCAmZXh0X2NzZCk7CisJaWYgKGVycikgeworCQkvKiBJZiB0aGUgaG9zdCBvciB0aGUgY2FyZCBjYW4ndCBkbyB0aGUgc3dpdGNoLAorCQkgKiBmYWlsIG1vcmUgZ3JhY2VmdWxseS4gKi8KKwkJaWYgKChlcnIgIT0gLUVJTlZBTCkKKwkJICYmIChlcnIgIT0gLUVOT1NZUykKKwkJICYmIChlcnIgIT0gLUVGQVVMVCkpCisJCQlyZXR1cm4gZXJyOworCisJCS8qCisJCSAqIEhpZ2ggY2FwYWNpdHkgY2FyZHMgc2hvdWxkIGhhdmUgdGhpcyAibWFnaWMiIHNpemUKKwkJICogc3RvcmVkIGluIHRoZWlyIENTRC4KKwkJICovCisJCWlmIChjYXJkLT5jc2QuY2FwYWNpdHkgPT0gKDQwOTYgKiA1MTIpKSB7CisJCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gcmVhZCBFWFRfQ1NEIG9uIGEgcG9zc2libGUgaGlnaCBjYXBhY2l0eSBjYXJkLiBDYXJkIHdpbGwgYmUgaWdub3JlZC5cbiIsCisJCQkJbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpKTsKKwkJfSBlbHNlIHsKKwkJCXByX3dhcm4oIiVzOiB1bmFibGUgdG8gcmVhZCBFWFRfQ1NELCBwZXJmb3JtYW5jZSBtaWdodCBzdWZmZXJcbiIsCisJCQkJbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpKTsKKwkJCWVyciA9IDA7CisJCX0KKworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IG1tY19kZWNvZGVfZXh0X2NzZChjYXJkLCBleHRfY3NkKTsKKwlrZnJlZShleHRfY3NkKTsKKwlyZXR1cm4gZXJyOworfQogCiBzdGF0aWMgaW50IG1tY19jb21wYXJlX2V4dF9jc2RzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdW5zaWduZWQgYnVzX3dpZHRoKQogewpAQCAtNjQ3LDExICs2MjMsOCBAQAogCQlyZXR1cm4gMDsKIAogCWVyciA9IG1tY19nZXRfZXh0X2NzZChjYXJkLCAmYndfZXh0X2NzZCk7Ci0KLQlpZiAoZXJyIHx8IGJ3X2V4dF9jc2QgPT0gTlVMTCkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCS8qIG9ubHkgY29tcGFyZSByZWFkIG9ubHkgZmllbGRzICovCiAJZXJyID0gISgoY2FyZC0+ZXh0X2NzZC5yYXdfcGFydGl0aW9uX3N1cHBvcnQgPT0KQEAgLTcxMCw4ICs2ODMsNyBAQAogCWlmIChlcnIpCiAJCWVyciA9IC1FSU5WQUw7CiAKLW91dDoKLQltbWNfZnJlZV9leHRfY3NkKGJ3X2V4dF9jc2QpOworCWtmcmVlKGJ3X2V4dF9jc2QpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTcyMiw3ICs2OTQsNyBAQAogTU1DX0RFVl9BVFRSKGRhdGUsICIlMDJkLyUwNGRcbiIsIGNhcmQtPmNpZC5tb250aCwgY2FyZC0+Y2lkLnllYXIpOwogTU1DX0RFVl9BVFRSKGVyYXNlX3NpemUsICIldVxuIiwgY2FyZC0+ZXJhc2Vfc2l6ZSA8PCA5KTsKIE1NQ19ERVZfQVRUUihwcmVmZXJyZWRfZXJhc2Vfc2l6ZSwgIiV1XG4iLCBjYXJkLT5wcmVmX2VyYXNlIDw8IDkpOwotTU1DX0RFVl9BVFRSKGZ3cmV2LCAiMHgleFxuIiwgY2FyZC0+Y2lkLmZ3cmV2KTsKK01NQ19ERVZfQVRUUihmZnVfY2FwYWJsZSwgIiVkXG4iLCBjYXJkLT5leHRfY3NkLmZmdV9jYXBhYmxlKTsKIE1NQ19ERVZfQVRUUihod3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5od3Jldik7CiBNTUNfREVWX0FUVFIobWFuZmlkLCAiMHglMDZ4XG4iLCBjYXJkLT5jaWQubWFuZmlkKTsKIE1NQ19ERVZfQVRUUihuYW1lLCAiJXNcbiIsIGNhcmQtPmNpZC5wcm9kX25hbWUpOwpAQCAtNzM1LDYgKzcwNywyMiBAQAogTU1DX0RFVl9BVFRSKHJhd19ycG1iX3NpemVfbXVsdCwgIiUjeFxuIiwgY2FyZC0+ZXh0X2NzZC5yYXdfcnBtYl9zaXplX211bHQpOwogTU1DX0RFVl9BVFRSKHJlbF9zZWN0b3JzLCAiJSN4XG4iLCBjYXJkLT5leHRfY3NkLnJlbF9zZWN0b3JzKTsKIAorc3RhdGljIHNzaXplX3QgbW1jX2Z3cmV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IG1tY19jYXJkICpjYXJkID0gbW1jX2Rldl90b19jYXJkKGRldik7CisKKwlpZiAoY2FyZC0+ZXh0X2NzZC5yZXYgPCA3KSB7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5md3Jldik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglKnBoTlxuIiwgTU1DX0ZJUk1XQVJFX0xFTiwKKwkJCSAgICAgICBjYXJkLT5leHRfY3NkLmZ3cmV2KTsKKwl9Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihmd3JldiwgU19JUlVHTywgbW1jX2Z3cmV2X3Nob3csIE5VTEwpOworCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbW1jX3N0ZF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9jaWQuYXR0ciwKIAkmZGV2X2F0dHJfY3NkLmF0dHIsCkBAIC03NDIsNiArNzMwLDcgQEAKIAkmZGV2X2F0dHJfZXJhc2Vfc2l6ZS5hdHRyLAogCSZkZXZfYXR0cl9wcmVmZXJyZWRfZXJhc2Vfc2l6ZS5hdHRyLAogCSZkZXZfYXR0cl9md3Jldi5hdHRyLAorCSZkZXZfYXR0cl9mZnVfY2FwYWJsZS5hdHRyLAogCSZkZXZfYXR0cl9od3Jldi5hdHRyLAogCSZkZXZfYXR0cl9tYW5maWQuYXR0ciwKIAkmZGV2X2F0dHJfbmFtZS5hdHRyLApAQCAtNzc0LDE0ICs3NjMsNiBAQAogCXVuc2lnbmVkIGludCBwd3JjbGFzc192YWwgPSAwOwogCWludCBlcnIgPSAwOwogCi0JLyogUG93ZXIgY2xhc3Mgc2VsZWN0aW9uIGlzIHN1cHBvcnRlZCBmb3IgdmVyc2lvbnMgPj0gNC4wICovCi0JaWYgKGNhcmQtPmNzZC5tbWNhX3ZzbiA8IENTRF9TUEVDX1ZFUl80KQotCQlyZXR1cm4gMDsKLQotCS8qIFBvd2VyIGNsYXNzIHZhbHVlcyBhcmUgZGVmaW5lZCBvbmx5IGZvciA0LzggYml0IGJ1cyAqLwotCWlmIChidXNfd2lkdGggPT0gRVhUX0NTRF9CVVNfV0lEVEhfMSkKLQkJcmV0dXJuIDA7Ci0KIAlzd2l0Y2ggKDEgPDwgaG9zdC0+aW9zLnZkZCkgewogCWNhc2UgTU1DX1ZERF8xNjVfMTk1OgogCQlpZiAoaG9zdC0+aW9zLmNsb2NrIDw9IE1NQ19ISUdIXzI2X01BWF9EVFIpCkBAIC04NDQsNyArODI1LDcgQEAKIAlpbnQgZXJyLCBkZHI7CiAKIAkvKiBQb3dlciBjbGFzcyBzZWxlY3Rpb24gaXMgc3VwcG9ydGVkIGZvciB2ZXJzaW9ucyA+PSA0LjAgKi8KLQlpZiAoY2FyZC0+Y3NkLm1tY2FfdnNuIDwgQ1NEX1NQRUNfVkVSXzQpCisJaWYgKCFtbWNfY2FuX2V4dF9jc2QoY2FyZCkpCiAJCXJldHVybiAwOwogCiAJYnVzX3dpZHRoID0gaG9zdC0+aW9zLmJ1c193aWR0aDsKQEAgLTkwNSw3ICs4ODYsNyBAQAogCXVuc2lnbmVkIGlkeCwgYnVzX3dpZHRoID0gMDsKIAlpbnQgZXJyID0gMDsKIAotCWlmICgoY2FyZC0+Y3NkLm1tY2FfdnNuIDwgQ1NEX1NQRUNfVkVSXzQpICYmCisJaWYgKCFtbWNfY2FuX2V4dF9jc2QoY2FyZCkgJiYKIAkgICAgIShob3N0LT5jYXBzICYgKE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQSkpKQogCQlyZXR1cm4gMDsKIApAQCAtOTk4LDcgKzk3OSw3IEBACiAJCQlleHRfY3NkX2JpdHMsCiAJCQljYXJkLT5leHRfY3NkLmdlbmVyaWNfY21kNl90aW1lKTsKIAlpZiAoZXJyKSB7Ci0JCXByX3dhcm4oIiVzOiBzd2l0Y2ggdG8gYnVzIHdpZHRoICVkIGRkciBmYWlsZWRcbiIsCisJCXByX2VycigiJXM6IHN3aXRjaCB0byBidXMgd2lkdGggJWQgZGRyIGZhaWxlZFxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0KSwgMSA8PCBidXNfd2lkdGgpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTEwNjksNyArMTA1MCw3IEBACiAJCQkgICBjYXJkLT5leHRfY3NkLmdlbmVyaWNfY21kNl90aW1lLAogCQkJICAgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CiAJaWYgKGVycikgewotCQlwcl93YXJuKCIlczogc3dpdGNoIHRvIGhpZ2gtc3BlZWQgZnJvbSBoczIwMCBmYWlsZWQsIGVycjolZFxuIiwKKwkJcHJfZXJyKCIlczogc3dpdGNoIHRvIGhpZ2gtc3BlZWQgZnJvbSBoczIwMCBmYWlsZWQsIGVycjolZFxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMDc5LDcgKzEwNjAsNyBAQAogCQkJIEVYVF9DU0RfRERSX0JVU19XSURUSF84LAogCQkJIGNhcmQtPmV4dF9jc2QuZ2VuZXJpY19jbWQ2X3RpbWUpOwogCWlmIChlcnIpIHsKLQkJcHJfd2FybigiJXM6IHN3aXRjaCB0byBidXMgd2lkdGggZm9yIGhzNDAwIGZhaWxlZCwgZXJyOiVkXG4iLAorCQlwcl9lcnIoIiVzOiBzd2l0Y2ggdG8gYnVzIHdpZHRoIGZvciBoczQwMCBmYWlsZWQsIGVycjolZFxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMDg5LDcgKzEwNzAsNyBAQAogCQkJICAgY2FyZC0+ZXh0X2NzZC5nZW5lcmljX2NtZDZfdGltZSwKIAkJCSAgIHRydWUsIHRydWUsIHRydWUpOwogCWlmIChlcnIpIHsKLQkJcHJfd2FybigiJXM6IHN3aXRjaCB0byBoczQwMCBmYWlsZWQsIGVycjolZFxuIiwKKwkJcHJfZXJyKCIlczogc3dpdGNoIHRvIGhzNDAwIGZhaWxlZCwgZXJyOiVkXG4iLAogCQkJIG1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMTQ2LDggKzExMjcsNyBAQAogewogCWludCBlcnIgPSAwOwogCi0JaWYgKChjYXJkLT5jc2QubW1jYV92c24gPCBDU0RfU1BFQ19WRVJfNCAmJgotCSAgICAgY2FyZC0+ZXh0X2NzZC5oc19tYXhfZHRyID09IDApKQorCWlmICghbW1jX2Nhbl9leHRfY3NkKGNhcmQpKQogCQlnb3RvIGJ1c19zcGVlZDsKIAogCWlmIChjYXJkLT5tbWNfYXZhaWxfdHlwZSAmIEVYVF9DU0RfQ0FSRF9UWVBFX0hTMjAwKQpAQCAtMTIzMiw3ICsxMjEyLDcgQEAKIAkJbW1jX2hvc3RfY2xrX3JlbGVhc2UoaG9zdCk7CiAKIAkJaWYgKGVycikKLQkJCXByX3dhcm4oIiVzOiB0dW5pbmcgZXhlY3V0aW9uIGZhaWxlZFxuIiwKKwkJCXByX2VycigiJXM6IHR1bmluZyBleGVjdXRpb24gZmFpbGVkXG4iLAogCQkJCW1tY19ob3N0bmFtZShob3N0KSk7CiAJfQogCkBAIC0xMjUyLDcgKzEyMzIsNiBAQAogCWludCBlcnI7CiAJdTMyIGNpZFs0XTsKIAl1MzIgcm9jcjsKLQl1OCAqZXh0X2NzZCA9IE5VTEw7CiAKIAlCVUdfT04oIWhvc3QpOwogCVdBUk5fT04oIWhvc3QtPmNsYWltZWQpOwpAQCAtMTM2MSwxNCArMTM0MCw4IEBACiAJfQogCiAJaWYgKCFvbGRjYXJkKSB7Ci0JCS8qCi0JCSAqIEZldGNoIGFuZCBwcm9jZXNzIGV4dGVuZGVkIENTRC4KLQkJICovCi0KLQkJZXJyID0gbW1jX2dldF9leHRfY3NkKGNhcmQsICZleHRfY3NkKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZnJlZV9jYXJkOwotCQllcnIgPSBtbWNfcmVhZF9leHRfY3NkKGNhcmQsIGV4dF9jc2QpOworCQkvKiBSZWFkIGV4dGVuZGVkIENTRC4gKi8KKwkJZXJyID0gbW1jX3JlYWRfZXh0X2NzZChjYXJkKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZnJlZV9jYXJkOwogCkBAIC0xNDU4LDE4ICsxNDMxLDE4IEBACiAJaWYgKG1tY19jYXJkX2hzMjAwKGNhcmQpKSB7CiAJCWVyciA9IG1tY19oczIwMF90dW5pbmcoY2FyZCk7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZnJlZV9jYXJkOwogCiAJCWVyciA9IG1tY19zZWxlY3RfaHM0MDAoY2FyZCk7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZnJlZV9jYXJkOwogCX0gZWxzZSBpZiAobW1jX2NhcmRfaHMoY2FyZCkpIHsKIAkJLyogU2VsZWN0IHRoZSBkZXNpcmVkIGJ1cyB3aWR0aCBvcHRpb25hbGx5ICovCiAJCWVyciA9IG1tY19zZWxlY3RfYnVzX3dpZHRoKGNhcmQpOwogCQlpZiAoIUlTX0VSUl9WQUxVRShlcnIpKSB7CiAJCQllcnIgPSBtbWNfc2VsZWN0X2hzX2RkcihjYXJkKTsKIAkJCWlmIChlcnIpCi0JCQkJZ290byBlcnI7CisJCQkJZ290byBmcmVlX2NhcmQ7CiAJCX0KIAl9CiAKQEAgLTE1NDUsMTUgKzE1MTgsMTIgQEAKIAlpZiAoIW9sZGNhcmQpCiAJCWhvc3QtPmNhcmQgPSBjYXJkOwogCi0JbW1jX2ZyZWVfZXh0X2NzZChleHRfY3NkKTsKIAlyZXR1cm4gMDsKIAogZnJlZV9jYXJkOgogCWlmICghb2xkY2FyZCkKIAkJbW1jX3JlbW92ZV9jYXJkKGNhcmQpOwogZXJyOgotCW1tY19mcmVlX2V4dF9jc2QoZXh0X2NzZCk7Ci0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCmluZGV4IDc5MTFlMDUuLjNiMDQ0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCkBAIC0yNjQsMjAgKzI2NCw2IEBACiAJc3RydWN0IG1tY19jb21tYW5kIGNtZCA9IHswfTsKIAlzdHJ1Y3QgbW1jX2RhdGEgZGF0YSA9IHswfTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7Ci0Jdm9pZCAqZGF0YV9idWY7Ci0JaW50IGlzX29uX3N0YWNrOwotCi0JaXNfb25fc3RhY2sgPSBvYmplY3RfaXNfb25fc3RhY2soYnVmKTsKLQlpZiAoaXNfb25fc3RhY2spIHsKLQkJLyoKLQkJICogZG1hIG9udG8gc3RhY2sgaXMgdW5zYWZlL25vbnBvcnRhYmxlLCBidXQgY2FsbGVycyB0byB0aGlzCi0JCSAqIHJvdXRpbmUgbm9ybWFsbHkgcHJvdmlkZSB0ZW1wb3Jhcnkgb24tc3RhY2sgYnVmZmVycyAuLi4KLQkJICovCi0JCWRhdGFfYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCQlpZiAoIWRhdGFfYnVmKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfSBlbHNlCi0JCWRhdGFfYnVmID0gYnVmOwogCiAJbXJxLmNtZCA9ICZjbWQ7CiAJbXJxLmRhdGEgPSAmZGF0YTsKQEAgLTI5OCw3ICsyODQsNyBAQAogCWRhdGEuc2cgPSAmc2c7CiAJZGF0YS5zZ19sZW4gPSAxOwogCi0Jc2dfaW5pdF9vbmUoJnNnLCBkYXRhX2J1ZiwgbGVuKTsKKwlzZ19pbml0X29uZSgmc2csIGJ1ZiwgbGVuKTsKIAogCWlmIChvcGNvZGUgPT0gTU1DX1NFTkRfQ1NEIHx8IG9wY29kZSA9PSBNTUNfU0VORF9DSUQpIHsKIAkJLyoKQEAgLTMxMiwxMSArMjk4LDYgQEAKIAogCW1tY193YWl0X2Zvcl9yZXEoaG9zdCwgJm1ycSk7CiAKLQlpZiAoaXNfb25fc3RhY2spIHsKLQkJbWVtY3B5KGJ1ZiwgZGF0YV9idWYsIGxlbik7Ci0JCWtmcmVlKGRhdGFfYnVmKTsKLQl9Ci0KIAlpZiAoY21kLmVycm9yKQogCQlyZXR1cm4gY21kLmVycm9yOwogCWlmIChkYXRhLmVycm9yKQpAQCAtMzM0LDcgKzMxNSw3IEBACiAJCXJldHVybiBtbWNfc2VuZF9jeGRfbmF0aXZlKGNhcmQtPmhvc3QsIGNhcmQtPnJjYSA8PCAxNiwKIAkJCQljc2QsIE1NQ19TRU5EX0NTRCk7CiAKLQljc2RfdG1wID0ga21hbGxvYygxNiwgR0ZQX0tFUk5FTCk7CisJY3NkX3RtcCA9IGt6YWxsb2MoMTYsIEdGUF9LRVJORUwpOwogCWlmICghY3NkX3RtcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM2Miw3ICszNDMsNyBAQAogCQkJCWNpZCwgTU1DX1NFTkRfQ0lEKTsKIAl9CiAKLQljaWRfdG1wID0ga21hbGxvYygxNiwgR0ZQX0tFUk5FTCk7CisJY2lkX3RtcCA9IGt6YWxsb2MoMTYsIEdGUF9LRVJORUwpOwogCWlmICghY2lkX3RtcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM3OCwxMiArMzU5LDM1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG1tY19zZW5kX2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCAqZXh0X2NzZCkKK2ludCBtbWNfZ2V0X2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCAqKm5ld19leHRfY3NkKQogewotCXJldHVybiBtbWNfc2VuZF9jeGRfZGF0YShjYXJkLCBjYXJkLT5ob3N0LCBNTUNfU0VORF9FWFRfQ1NELAotCQkJZXh0X2NzZCwgNTEyKTsKKwlpbnQgZXJyOworCXU4ICpleHRfY3NkOworCisJaWYgKCFjYXJkIHx8ICFuZXdfZXh0X2NzZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIW1tY19jYW5fZXh0X2NzZChjYXJkKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyoKKwkgKiBBcyB0aGUgZXh0X2NzZCBpcyBzbyBsYXJnZSBhbmQgbW9zdGx5IHVudXNlZCwgd2UgZG9uJ3Qgc3RvcmUgdGhlCisJICogcmF3IGJsb2NrIGluIG1tY19jYXJkLgorCSAqLworCWV4dF9jc2QgPSBremFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFleHRfY3NkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IG1tY19zZW5kX2N4ZF9kYXRhKGNhcmQsIGNhcmQtPmhvc3QsIE1NQ19TRU5EX0VYVF9DU0QsIGV4dF9jc2QsCisJCQkJNTEyKTsKKwlpZiAoZXJyKQorCQlrZnJlZShleHRfY3NkKTsKKwllbHNlCisJCSpuZXdfZXh0X2NzZCA9IGV4dF9jc2Q7CisKKwlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTF9HUEwobW1jX3NlbmRfZXh0X2NzZCk7CitFWFBPUlRfU1lNQk9MX0dQTChtbWNfZ2V0X2V4dF9jc2QpOwogCiBpbnQgbW1jX3NwaV9yZWFkX29jcihzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGludCBoaWdoY2FwLCB1MzIgKm9jcnApCiB7CkBAIC01NDMsNiArNTQ3LDc1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtbWNfc3dpdGNoKTsKIAoraW50IG1tY19zZW5kX3R1bmluZyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19yZXF1ZXN0IG1ycSA9IHtOVUxMfTsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kID0gezB9OworCXN0cnVjdCBtbWNfZGF0YSBkYXRhID0gezB9OworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwlzdHJ1Y3QgbW1jX2lvcyAqaW9zID0gJmhvc3QtPmlvczsKKwljb25zdCB1OCAqdHVuaW5nX2Jsb2NrX3BhdHRlcm47CisJaW50IHNpemUsIGVyciA9IDA7CisJdTggKmRhdGFfYnVmOworCXUzMiBvcGNvZGU7CisKKwlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF84KSB7CisJCXR1bmluZ19ibG9ja19wYXR0ZXJuID0gdHVuaW5nX2Jsa19wYXR0ZXJuXzhiaXQ7CisJCXNpemUgPSBzaXplb2YodHVuaW5nX2Jsa19wYXR0ZXJuXzhiaXQpOworCQlvcGNvZGUgPSBNTUNfU0VORF9UVU5JTkdfQkxPQ0tfSFMyMDA7CisJfSBlbHNlIGlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpIHsKKwkJdHVuaW5nX2Jsb2NrX3BhdHRlcm4gPSB0dW5pbmdfYmxrX3BhdHRlcm5fNGJpdDsKKwkJc2l6ZSA9IHNpemVvZih0dW5pbmdfYmxrX3BhdHRlcm5fNGJpdCk7CisJCW9wY29kZSA9IE1NQ19TRU5EX1RVTklOR19CTE9DSzsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhX2J1ZiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltcnEuY21kID0gJmNtZDsKKwltcnEuZGF0YSA9ICZkYXRhOworCisJY21kLm9wY29kZSA9IG9wY29kZTsKKwljbWQuZmxhZ3MgPSBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BRFRDOworCisJZGF0YS5ibGtzeiA9IHNpemU7CisJZGF0YS5ibG9ja3MgPSAxOworCWRhdGEuZmxhZ3MgPSBNTUNfREFUQV9SRUFEOworCisJLyoKKwkgKiBBY2NvcmRpbmcgdG8gdGhlIHR1bmluZyBzcGVjcywgVHVuaW5nIHByb2Nlc3MKKwkgKiBpcyBub3JtYWxseSBzaG9ydGVyIDQwIGV4ZWN1dGlvbnMgb2YgQ01EMTksCisJICogYW5kIHRpbWVvdXQgdmFsdWUgc2hvdWxkIGJlIHNob3J0ZXIgdGhhbiAxNTAgbXMKKwkgKi8KKwlkYXRhLnRpbWVvdXRfbnMgPSAxNTAgKiBOU0VDX1BFUl9NU0VDOworCisJZGF0YS5zZyA9ICZzZzsKKwlkYXRhLnNnX2xlbiA9IDE7CisJc2dfaW5pdF9vbmUoJnNnLCBkYXRhX2J1Ziwgc2l6ZSk7CisKKwltbWNfd2FpdF9mb3JfcmVxKGhvc3QsICZtcnEpOworCisJaWYgKGNtZC5lcnJvcikgeworCQllcnIgPSBjbWQuZXJyb3I7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkYXRhLmVycm9yKSB7CisJCWVyciA9IGRhdGEuZXJyb3I7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtZW1jbXAoZGF0YV9idWYsIHR1bmluZ19ibG9ja19wYXR0ZXJuLCBzaXplKSkKKwkJZXJyID0gLUVJTzsKKworb3V0OgorCWtmcmVlKGRhdGFfYnVmKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobW1jX3NlbmRfdHVuaW5nKTsKKwogc3RhdGljIGludAogbW1jX3NlbmRfYnVzX3Rlc3Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCBzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHU4IG9wY29kZSwKIAkJICB1OCBsZW4pCkBAIC02NzUsMyArNzQ4LDggQEAKIAogCXJldHVybiAwOwogfQorCitpbnQgbW1jX2Nhbl9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlyZXR1cm4gKGNhcmQgJiYgY2FyZC0+Y3NkLm1tY2FfdnNuID4gQ1NEX1NQRUNfVkVSXzMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmggYi9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuaAppbmRleCAzOTBkYWM2Li42ZjRiMDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuaAorKysgYi9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuaApAQCAtMjAsMTMgKzIwLDEzIEBACiBpbnQgbW1jX2FsbF9zZW5kX2NpZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiAqY2lkKTsKIGludCBtbWNfc2V0X3JlbGF0aXZlX2FkZHIoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIGludCBtbWNfc2VuZF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1MzIgKmNzZCk7Ci1pbnQgbW1jX3NlbmRfZXh0X2NzZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHU4ICpleHRfY3NkKTsKIGludCBtbWNfc2VuZF9zdGF0dXMoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1MzIgKnN0YXR1cyk7CiBpbnQgbW1jX3NlbmRfY2lkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyICpjaWQpOwogaW50IG1tY19zcGlfcmVhZF9vY3Ioc3RydWN0IG1tY19ob3N0ICpob3N0LCBpbnQgaGlnaGNhcCwgdTMyICpvY3JwKTsKIGludCBtbWNfc3BpX3NldF9jcmMoc3RydWN0IG1tY19ob3N0ICpob3N0LCBpbnQgdXNlX2NyYyk7CiBpbnQgbW1jX2J1c190ZXN0KHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggYnVzX3dpZHRoKTsKIGludCBtbWNfc2VuZF9ocGlfY21kKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTMyICpzdGF0dXMpOworaW50IG1tY19jYW5fZXh0X2NzZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwppbmRleCAyNDM5ZTcxLi5mZDA3NTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwpAQCAtOTgwLDggKzk4MCwxMiBAQAogCWlmIChtbWNfY2FyZF9pc19yZW1vdmFibGUoaG9zdCkgfHwgIW1tY19jYXJkX2tlZXBfcG93ZXIoaG9zdCkpIHsKIAkJc2Rpb19yZXNldChob3N0KTsKIAkJbW1jX2dvX2lkbGUoaG9zdCk7Ci0JCWVyciA9IG1tY19zZGlvX2luaXRfY2FyZChob3N0LCBob3N0LT5jYXJkLT5vY3IsIGhvc3QtPmNhcmQsCi0JCQkJCW1tY19jYXJkX2tlZXBfcG93ZXIoaG9zdCkpOworCQltbWNfc2VuZF9pZl9jb25kKGhvc3QsIGhvc3QtPmNhcmQtPm9jcik7CisJCWVyciA9IG1tY19zZW5kX2lvX29wX2NvbmQoaG9zdCwgMCwgTlVMTCk7CisJCWlmICghZXJyKQorCQkJZXJyID0gbW1jX3NkaW9faW5pdF9jYXJkKGhvc3QsIGhvc3QtPmNhcmQtPm9jciwKKwkJCQkJCSBob3N0LT5jYXJkLAorCQkJCQkJIG1tY19jYXJkX2tlZXBfcG93ZXIoaG9zdCkpOwogCX0gZWxzZSBpZiAobW1jX2NhcmRfa2VlcF9wb3dlcihob3N0KSAmJiBtbWNfY2FyZF93YWtlX3NkaW9faXJxKGhvc3QpKSB7CiAJCS8qIFdlIG1heSBoYXZlIHN3aXRjaGVkIHRvIDEtYml0IG1vZGUgZHVyaW5nIHN1c3BlbmQgKi8KIAkJZXJyID0gc2Rpb19lbmFibGVfNGJpdF9idXMoaG9zdC0+Y2FyZCk7CkBAIC0xMDM1LDcgKzEwMzksNyBAQAogCiAJc2Rpb19yZXNldChob3N0KTsKIAltbWNfZ29faWRsZShob3N0KTsKLQltbWNfc2VuZF9pZl9jb25kKGhvc3QsIGhvc3QtPm9jcl9hdmFpbCk7CisJbW1jX3NlbmRfaWZfY29uZChob3N0LCBob3N0LT5jYXJkLT5vY3IpOwogCiAJcmV0ID0gbW1jX3NlbmRfaW9fb3BfY29uZChob3N0LCAwLCBOVUxMKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jCmluZGV4IDZkYTk3YjEuLjYwODg1MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJzZGlvX2Npcy5oIgogI2luY2x1ZGUgInNkaW9fYnVzLmgiCiAKKyNkZWZpbmUgdG9fc2Rpb19kcml2ZXIoZCkJY29udGFpbmVyX29mKGQsIHN0cnVjdCBzZGlvX2RyaXZlciwgZHJ2KQorCiAvKiBzaG93IGNvbmZpZ3VyYXRpb24gZmllbGRzICovCiAjZGVmaW5lIHNkaW9fY29uZmlnX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCkBAIC0xOTYsOCArMTk4LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzZGlvX2J1c19wbV9vcHMgPSB7CiAJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMocG1fZ2VuZXJpY19zdXNwZW5kLCBwbV9nZW5lcmljX3Jlc3VtZSkKIAlTRVRfUlVOVElNRV9QTV9PUFMoCkBAIC0yMDcsMTQgKzIwNyw2IEBACiAJKQogfTsKIAotI2RlZmluZSBTRElPX1BNX09QU19QVFIJKCZzZGlvX2J1c19wbV9vcHMpCi0KLSNlbHNlIC8qICFDT05GSUdfUE0gKi8KLQotI2RlZmluZSBTRElPX1BNX09QU19QVFIJTlVMTAotCi0jZW5kaWYgLyogIUNPTkZJR19QTSAqLwotCiBzdGF0aWMgc3RydWN0IGJ1c190eXBlIHNkaW9fYnVzX3R5cGUgPSB7CiAJLm5hbWUJCT0gInNkaW8iLAogCS5kZXZfZ3JvdXBzCT0gc2Rpb19kZXZfZ3JvdXBzLApAQCAtMjIyLDcgKzIxNCw3IEBACiAJLnVldmVudAkJPSBzZGlvX2J1c191ZXZlbnQsCiAJLnByb2JlCQk9IHNkaW9fYnVzX3Byb2JlLAogCS5yZW1vdmUJCT0gc2Rpb19idXNfcmVtb3ZlLAotCS5wbQkJPSBTRElPX1BNX09QU19QVFIsCisJLnBtCQk9ICZzZGlvX2J1c19wbV9vcHMsCiB9OwogCiBpbnQgc2Rpb19yZWdpc3Rlcl9idXModm9pZCkKQEAgLTI5NSw3ICsyODcsNyBAQAogc3RhdGljIHZvaWQgc2Rpb19hY3BpX3NldF9oYW5kbGUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBmdW5jLT5jYXJkLT5ob3N0OwotCXU2NCBhZGRyID0gKGhvc3QtPnNsb3RubyA8PCAxNikgfCBmdW5jLT5udW07CisJdTY0IGFkZHIgPSAoKHU2NClob3N0LT5zbG90bm8gPDwgMTYpIHwgZnVuYy0+bnVtOwogCiAJYWNwaV9wcmVzZXRfY29tcGFuaW9uKCZmdW5jLT5kZXYsIEFDUElfQ09NUEFOSU9OKGhvc3QtPnBhcmVudCksIGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCmluZGV4IDEzODYwNjUuLjJkNmZiZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKQEAgLTU4MCw3ICs1ODAsNyBAQAogY29uZmlnIE1NQ19EVwogCXRyaXN0YXRlICJTeW5vcHN5cyBEZXNpZ25XYXJlIE1lbW9yeSBDYXJkIEludGVyZmFjZSIKIAlkZXBlbmRzIG9uIEhBU19ETUEKLQlkZXBlbmRzIG9uIEFSQyB8fCBBUk0gfHwgTUlQUyB8fCBDT01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIEFSQyB8fCBBUk0gfHwgQVJNNjQgfHwgTUlQUyB8fCBDT01QSUxFX1RFU1QKIAloZWxwCiAJICBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3IgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgTW9iaWxlIFN0b3JhZ2UgSVAKIAkgIGJsb2NrLCB0aGlzIHByb3ZpZGVzIGhvc3Qgc3VwcG9ydCBmb3IgU0QgYW5kIE1NQyBpbnRlcmZhY2VzLCBpbiBib3RoCkBAIC03NDgsMyArNzQ4LDggQEAKIAloZWxwCiAJICBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3IgdGhlIFNEL01NQyBIb3N0IENvbnRyb2xsZXIgb24KIAkgIEFsbHdpbm5lciBzdW54aSBTb0NzLgorCitjb25maWcgTU1DX1RPU0hJQkFfUENJCisJdHJpc3RhdGUgIlRvc2hpYmEgVHlwZSBBIFNEL01NQyBDYXJkIEludGVyZmFjZSBEcml2ZXIiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQppbmRleCBiMDllY2ZiLi5mN2IwYTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKQEAgLTU1LDYgKzU1LDcgQEAKIG9iai0kKENPTkZJR19NTUNfTU9YQVJUKQkrPSBtb3hhcnQtbW1jLm8KIG9iai0kKENPTkZJR19NTUNfU1VOWEkpCQkrPSBzdW54aS1tbWMubwogb2JqLSQoQ09ORklHX01NQ19VU0RISTZST0wwKQkrPSB1c2RoaTZyb2wwLm8KK29iai0kKENPTkZJR19NTUNfVE9TSElCQV9QQ0kpCSs9IHRvc2hzZC5vCiAKIG9iai0kKENPTkZJR19NTUNfUkVBTFRFS19QQ0kpCSs9IHJ0c3hfcGNpX3NkbW1jLm8KIG9iai0kKENPTkZJR19NTUNfUkVBTFRFS19VU0IpCSs9IHJ0c3hfdXNiX3NkbW1jLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCmluZGV4IDc3MjUwZDQuLjYyYWJhOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwpAQCAtMzAsMTMgKzMwLDE2IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdG1lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbW1jLWF0bWVsLW1jaS5oPgogCiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpby5oPgogCi0jaW5jbHVkZSA8bWFjaC9hdG1lbC1tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1lbC1tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1lbF9wZGMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9waW5jdHJsL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNDQsNiArNDcsOCBAQAogCiAjaW5jbHVkZSAiYXRtZWwtbWNpLXJlZ3MuaCIKIAorI2RlZmluZSBBVVRPU1VTUEVORF9ERUxBWQk1MAorCiAjZGVmaW5lIEFUTUNJX0RBVEFfRVJST1JfRkxBR1MJKEFUTUNJX0RDUkNFIHwgQVRNQ0lfRFRPRSB8IEFUTUNJX09WUkUgfCBBVE1DSV9VTlJFKQogI2RlZmluZSBBVE1DSV9ETUFfVEhSRVNIT0xECTE2CiAKQEAgLTM4NiwyMCArMzkxLDE5IEBACiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJcG1fcnVudGltZV9nZXRfc3luYygmaG9zdC0+cGRldi0+ZGV2KTsKKwogCS8qCiAJICogR3JhYiBhIG1vcmUgb3IgbGVzcyBjb25zaXN0ZW50IHNuYXBzaG90LiBOb3RlIHRoYXQgd2UncmUKIAkgKiBub3QgZGlzYWJsaW5nIGludGVycnVwdHMsIHNvIElNUiBhbmQgU1IgbWF5IG5vdCBiZQogCSAqIGNvbnNpc3RlbnQuCiAJICovCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhvc3QtPm1jayk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KIAlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOwogCW1lbWNweV9mcm9taW8oYnVmLCBob3N0LT5yZWdzLCBBVE1DSV9SRUdTX1NJWkUpOwogCXNwaW5fdW5sb2NrX2JoKCZob3N0LT5sb2NrKTsKIAotCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5tY2spOworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koJmhvc3QtPnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoJmhvc3QtPnBkZXYtPmRldik7CiAKIAlzZXFfcHJpbnRmKHMsICJNUjpcdDB4JTA4eCVzJXMgIiwKIAkJCWJ1ZltBVE1DSV9NUiAvIDRdLApAQCAtNDQ5LDcgKzQ1Myw2IEBACiAJCQkJdmFsICYgQVRNQ0lfQ0ZHX0xTWU5DID8gIiBMU1lOQyIgOiAiIik7CiAJfQogCi1vdXQ6CiAJa2ZyZWUoYnVmKTsKIAogCXJldHVybiByZXQ7CkBAIC01NjAsNiArNTYzLDkgQEAKIAkJcGRhdGEtPnNsb3Rbc2xvdF9pZF0uZGV0ZWN0X2lzX2FjdGl2ZV9oaWdoID0KIAkJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChjbnAsICJjZC1pbnZlcnRlZCIpOwogCisJCXBkYXRhLT5zbG90W3Nsb3RfaWRdLm5vbl9yZW1vdmFibGUgPQorCQkJb2ZfcHJvcGVydHlfcmVhZF9ib29sKGNucCwgIm5vbi1yZW1vdmFibGUiKTsKKwogCQlwZGF0YS0+c2xvdFtzbG90X2lkXS53cF9waW4gPQogCQkJb2ZfZ2V0X25hbWVkX2dwaW8oY25wLCAid3AtZ3Bpb3MiLCAwKTsKIAl9CkBAIC0xMjUyLDYgKzEyNTgsOCBAQAogCVdBUk5fT04oc2xvdC0+bXJxKTsKIAlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICJNUlE6IGNtZCAldVxuIiwgbXJxLT5jbWQtPm9wY29kZSk7CiAKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZob3N0LT5wZGV2LT5kZXYpOworCiAJLyoKIAkgKiBXZSBtYXkgImtub3ciIHRoZSBjYXJkIGlzIGdvbmUgZXZlbiB0aG91Z2ggdGhlcmUncyBzdGlsbCBhbgogCSAqIGVsZWN0cmljYWwgY29ubmVjdGlvbi4gSWYgc28sIHdlIHJlYWxseSBuZWVkIHRvIGNvbW11bmljYXRlCkBAIC0xMjgxLDcgKzEyODksOCBAQAogCXN0cnVjdCBhdG1lbF9tY2lfc2xvdAkqc2xvdCA9IG1tY19wcml2KG1tYyk7CiAJc3RydWN0IGF0bWVsX21jaQkqaG9zdCA9IHNsb3QtPmhvc3Q7CiAJdW5zaWduZWQgaW50CQlpOwotCWJvb2wJCQl1bnByZXBhcmVfY2xrOworCisJcG1fcnVudGltZV9nZXRfc3luYygmaG9zdC0+cGRldi0+ZGV2KTsKIAogCXNsb3QtPnNkY19yZWcgJj0gfkFUTUNJX1NEQ0JVU19NQVNLOwogCXN3aXRjaCAoaW9zLT5idXNfd2lkdGgpIHsKQEAgLTEyOTcsMTMgKzEzMDYsOCBAQAogCQl1bnNpZ25lZCBpbnQgY2xvY2tfbWluID0gfjBVOwogCQl1MzIgY2xrZGl2OwogCi0JCWNsa19wcmVwYXJlKGhvc3QtPm1jayk7Ci0JCXVucHJlcGFyZV9jbGsgPSB0cnVlOwotCiAJCXNwaW5fbG9ja19iaCgmaG9zdC0+bG9jayk7CiAJCWlmICghaG9zdC0+bW9kZV9yZWcpIHsKLQkJCWNsa19lbmFibGUoaG9zdC0+bWNrKTsKLQkJCXVucHJlcGFyZV9jbGsgPSBmYWxzZTsKIAkJCWF0bWNpX3dyaXRlbChob3N0LCBBVE1DSV9DUiwgQVRNQ0lfQ1JfU1dSU1QpOwogCQkJYXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0NSLCBBVE1DSV9DUl9NQ0lFTik7CiAJCQlpZiAoaG9zdC0+Y2Fwcy5oYXNfY2ZnX3JlZykKQEAgLTEzNzEsOCArMTM3NSw2IEBACiAJfSBlbHNlIHsKIAkJYm9vbCBhbnlfc2xvdF9hY3RpdmUgPSBmYWxzZTsKIAotCQl1bnByZXBhcmVfY2xrID0gZmFsc2U7Ci0KIAkJc3Bpbl9sb2NrX2JoKCZob3N0LT5sb2NrKTsKIAkJc2xvdC0+Y2xvY2sgPSAwOwogCQlmb3IgKGkgPSAwOyBpIDwgQVRNQ0lfTUFYX05SX1NMT1RTOyBpKyspIHsKQEAgLTEzODUsMTcgKzEzODcsMTIgQEAKIAkJCWF0bWNpX3dyaXRlbChob3N0LCBBVE1DSV9DUiwgQVRNQ0lfQ1JfTUNJRElTKTsKIAkJCWlmIChob3N0LT5tb2RlX3JlZykgewogCQkJCWF0bWNpX3JlYWRsKGhvc3QsIEFUTUNJX01SKTsKLQkJCQljbGtfZGlzYWJsZShob3N0LT5tY2spOwotCQkJCXVucHJlcGFyZV9jbGsgPSB0cnVlOwogCQkJfQogCQkJaG9zdC0+bW9kZV9yZWcgPSAwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZob3N0LT5sb2NrKTsKIAl9CiAKLQlpZiAodW5wcmVwYXJlX2NsaykKLQkJY2xrX3VucHJlcGFyZShob3N0LT5tY2spOwotCiAJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKIAljYXNlIE1NQ19QT1dFUl9PRkY6CiAJCWlmICghSVNfRVJSKG1tYy0+c3VwcGx5LnZtbWMpKQpAQCAtMTQyMSw2ICsxNDE4LDkgQEAKIAkJICovCiAJCWJyZWFrOwogCX0KKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koJmhvc3QtPnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoJmhvc3QtPnBkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgYXRtY2lfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQpAQCAtMTUxMiw2ICsxNTEyLDkgQEAKIAlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CiAJbW1jX3JlcXVlc3RfZG9uZShwcmV2X21tYywgbXJxKTsKIAlzcGluX2xvY2soJmhvc3QtPmxvY2spOworCisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeSgmaG9zdC0+cGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCgmaG9zdC0+cGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgYXRtY2lfY29tbWFuZF9jb21wbGV0ZShzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LApAQCAtMjEzNyw3ICsyMTQwLDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGF0bWNpX2luaXRfc2xvdChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LAorc3RhdGljIGludCBhdG1jaV9pbml0X3Nsb3Qoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwKIAkJc3RydWN0IG1jaV9zbG90X3BkYXRhICpzbG90X2RhdGEsIHVuc2lnbmVkIGludCBpZCwKIAkJdTMyIHNkY19yZWcsIHUzMiBzZGlvX2lycSkKIHsKQEAgLTIyMDYsOCArMjIwOSwxMiBAQAogCQl9CiAJfQogCi0JaWYgKCFncGlvX2lzX3ZhbGlkKHNsb3QtPmRldGVjdF9waW4pKQotCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9ORUVEU19QT0xMOworCWlmICghZ3Bpb19pc192YWxpZChzbG90LT5kZXRlY3RfcGluKSkgeworCQlpZiAoc2xvdF9kYXRhLT5ub25fcmVtb3ZhYmxlKQorCQkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTk9OUkVNT1ZBQkxFOworCQllbHNlCisJCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9ORUVEU19QT0xMOworCX0KIAogCWlmIChncGlvX2lzX3ZhbGlkKHNsb3QtPndwX3BpbikpIHsKIAkJaWYgKGRldm1fZ3Bpb19yZXF1ZXN0KCZob3N0LT5wZGV2LT5kZXYsIHNsb3QtPndwX3BpbiwKQEAgLTIyNjUsNTUgKzIyNzIsMjUgQEAKIAltbWNfZnJlZV9ob3N0KHNsb3QtPm1tYyk7CiB9CiAKLXN0YXRpYyBib29sIGF0bWNpX2ZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnBkYXRhKQorc3RhdGljIGludCBhdG1jaV9jb25maWd1cmVfZG1hKHN0cnVjdCBhdG1lbF9tY2kgKmhvc3QpCiB7Ci0Jc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpzbF9wZGF0YSA9IHBkYXRhOwotCXN0cnVjdCBtY2lfZG1hX2RhdGEgKnNsOworCWhvc3QtPmRtYS5jaGFuID0gZG1hX3JlcXVlc3Rfc2xhdmVfY2hhbm5lbF9yZWFzb24oJmhvc3QtPnBkZXYtPmRldiwKKwkJCQkJCQkicnh0eCIpOworCWlmIChJU19FUlIoaG9zdC0+ZG1hLmNoYW4pKQorCQlyZXR1cm4gUFRSX0VSUihob3N0LT5kbWEuY2hhbik7CiAKLQlpZiAoIXNsX3BkYXRhKQotCQlyZXR1cm4gZmFsc2U7CisJZGV2X2luZm8oJmhvc3QtPnBkZXYtPmRldiwgInVzaW5nICVzIGZvciBETUEgdHJhbnNmZXJzXG4iLAorCQkgZG1hX2NoYW5fbmFtZShob3N0LT5kbWEuY2hhbikpOwogCi0Jc2wgPSBzbF9wZGF0YS0+ZG1hX3NsYXZlOwotCWlmIChzbCAmJiBmaW5kX3NsYXZlX2RldihzbCkgPT0gY2hhbi0+ZGV2aWNlLT5kZXYpIHsKLQkJY2hhbi0+cHJpdmF0ZSA9IHNsYXZlX2RhdGFfcHRyKHNsKTsKLQkJcmV0dXJuIHRydWU7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KKwlob3N0LT5kbWFfY29uZi5zcmNfYWRkciA9IGhvc3QtPm1hcGJhc2UgKyBBVE1DSV9SRFI7CisJaG9zdC0+ZG1hX2NvbmYuc3JjX2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKKwlob3N0LT5kbWFfY29uZi5zcmNfbWF4YnVyc3QgPSAxOworCWhvc3QtPmRtYV9jb25mLmRzdF9hZGRyID0gaG9zdC0+bWFwYmFzZSArIEFUTUNJX1REUjsKKwlob3N0LT5kbWFfY29uZi5kc3RfYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOworCWhvc3QtPmRtYV9jb25mLmRzdF9tYXhidXJzdCA9IDE7CisJaG9zdC0+ZG1hX2NvbmYuZGV2aWNlX2ZjID0gZmFsc2U7CiAKLXN0YXRpYyBib29sIGF0bWNpX2NvbmZpZ3VyZV9kbWEoc3RydWN0IGF0bWVsX21jaSAqaG9zdCkKLXsKLQlzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEJKnBkYXRhOwotCWRtYV9jYXBfbWFza190IG1hc2s7Ci0KLQlpZiAoaG9zdCA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlwZGF0YSA9IGhvc3QtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCi0JZG1hX2NhcF96ZXJvKG1hc2spOwotCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7Ci0KLQlob3N0LT5kbWEuY2hhbiA9IGRtYV9yZXF1ZXN0X3NsYXZlX2NoYW5uZWxfY29tcGF0KG1hc2ssIGF0bWNpX2ZpbHRlciwgcGRhdGEsCi0JCQkJCQkJICAmaG9zdC0+cGRldi0+ZGV2LCAicnh0eCIpOwotCWlmICghaG9zdC0+ZG1hLmNoYW4pIHsKLQkJZGV2X3dhcm4oJmhvc3QtPnBkZXYtPmRldiwgIm5vIERNQSBjaGFubmVsIGF2YWlsYWJsZVxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgewotCQlkZXZfaW5mbygmaG9zdC0+cGRldi0+ZGV2LAotCQkJCQkidXNpbmcgJXMgZm9yIERNQSB0cmFuc2ZlcnNcbiIsCi0JCQkJCWRtYV9jaGFuX25hbWUoaG9zdC0+ZG1hLmNoYW4pKTsKLQotCQlob3N0LT5kbWFfY29uZi5zcmNfYWRkciA9IGhvc3QtPm1hcGJhc2UgKyBBVE1DSV9SRFI7Ci0JCWhvc3QtPmRtYV9jb25mLnNyY19hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7Ci0JCWhvc3QtPmRtYV9jb25mLnNyY19tYXhidXJzdCA9IDE7Ci0JCWhvc3QtPmRtYV9jb25mLmRzdF9hZGRyID0gaG9zdC0+bWFwYmFzZSArIEFUTUNJX1REUjsKLQkJaG9zdC0+ZG1hX2NvbmYuZHN0X2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKLQkJaG9zdC0+ZG1hX2NvbmYuZHN0X21heGJ1cnN0ID0gMTsKLQkJaG9zdC0+ZG1hX2NvbmYuZGV2aWNlX2ZjID0gZmFsc2U7Ci0JCXJldHVybiB0cnVlOwotCX0KKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTIzMjEsNyArMjI5OCw3IEBACiAgKiBIU01DSSBwcm92aWRlcyBETUEgc3VwcG9ydCBhbmQgYSBuZXcgY29uZmlnIHJlZ2lzdGVyIGJ1dCBubyBtb3JlIHN1cHBvcnRzCiAgKiBQREMuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBhdG1jaV9nZXRfY2FwKHN0cnVjdCBhdG1lbF9tY2kgKmhvc3QpCitzdGF0aWMgdm9pZCBhdG1jaV9nZXRfY2FwKHN0cnVjdCBhdG1lbF9tY2kgKmhvc3QpCiB7CiAJdW5zaWduZWQgaW50IHZlcnNpb247CiAKQEAgLTIzNzAsNyArMjM0Nyw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9faW5pdCBhdG1jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBhdG1jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CiAJc3RydWN0IGF0bWVsX21jaQkJKmhvc3Q7CkBAIC0yNDE3LDE5ICsyMzk0LDIzIEBACiAKIAlhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfQ1IsIEFUTUNJX0NSX1NXUlNUKTsKIAlob3N0LT5idXNfaHogPSBjbGtfZ2V0X3JhdGUoaG9zdC0+bWNrKTsKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+bWNrKTsKIAogCWhvc3QtPm1hcGJhc2UgPSByZWdzLT5zdGFydDsKIAogCXRhc2tsZXRfaW5pdCgmaG9zdC0+dGFza2xldCwgYXRtY2lfdGFza2xldF9mdW5jLCAodW5zaWduZWQgbG9uZylob3N0KTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRtY2lfaW50ZXJydXB0LCAwLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgaG9zdCk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5tY2spOwogCQlyZXR1cm4gcmV0OworCX0KIAogCS8qIEdldCBNQ0kgY2FwYWJpbGl0aWVzIGFuZCBzZXQgb3BlcmF0aW9ucyBhY2NvcmRpbmcgdG8gaXQgKi8KIAlhdG1jaV9nZXRfY2FwKGhvc3QpOwotCWlmIChhdG1jaV9jb25maWd1cmVfZG1hKGhvc3QpKSB7CisJcmV0ID0gYXRtY2lfY29uZmlndXJlX2RtYShob3N0KTsKKwlpZiAocmV0ID09IC1FUFJPQkVfREVGRVIpCisJCWdvdG8gZXJyX2RtYV9wcm9iZV9kZWZlcjsKKwlpZiAocmV0ID09IDApIHsKIAkJaG9zdC0+cHJlcGFyZV9kYXRhID0gJmF0bWNpX3ByZXBhcmVfZGF0YV9kbWE7CiAJCWhvc3QtPnN1Ym1pdF9kYXRhID0gJmF0bWNpX3N1Ym1pdF9kYXRhX2RtYTsKIAkJaG9zdC0+c3RvcF90cmFuc2ZlciA9ICZhdG1jaV9zdG9wX3RyYW5zZmVyX2RtYTsKQEAgLTI0NDksNiArMjQzMCwxMiBAQAogCiAJc2V0dXBfdGltZXIoJmhvc3QtPnRpbWVyLCBhdG1jaV90aW1lb3V0X3RpbWVyLCAodW5zaWduZWQgbG9uZylob3N0KTsKIAorCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheSgmcGRldi0+ZGV2LCBBVVRPU1VTUEVORF9ERUxBWSk7CisJcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisKIAkvKiBXZSBuZWVkIGF0IGxlYXN0IG9uZSBzbG90IHRvIHN1Y2NlZWQgKi8KIAlucl9zbG90cyA9IDA7CiAJcmV0ID0gLUVOT0RFVjsKQEAgLTI0OTEsNiArMjQ3OCw5IEBACiAJCQkiQXRtZWwgTUNJIGNvbnRyb2xsZXIgYXQgMHglMDhseCBpcnEgJWQsICV1IHNsb3RzXG4iLAogCQkJaG9zdC0+bWFwYmFzZSwgaXJxLCBucl9zbG90cyk7CiAKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KCZob3N0LT5wZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKCZwZGV2LT5kZXYpOworCiAJcmV0dXJuIDA7CiAKIGVycl9kbWFfYWxsb2M6CkBAIC0yNDk5LDE4ICsyNDg5LDI2IEBACiAJCQlhdG1jaV9jbGVhbnVwX3Nsb3QoaG9zdC0+c2xvdFtpXSwgaSk7CiAJfQogZXJyX2luaXRfc2xvdDoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+bWNrKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnBkZXYtPmRldik7CisKIAlkZWxfdGltZXJfc3luYygmaG9zdC0+dGltZXIpOwotCWlmIChob3N0LT5kbWEuY2hhbikKKwlpZiAoIUlTX0VSUihob3N0LT5kbWEuY2hhbikpCiAJCWRtYV9yZWxlYXNlX2NoYW5uZWwoaG9zdC0+ZG1hLmNoYW4pOworZXJyX2RtYV9wcm9iZV9kZWZlcjoKIAlmcmVlX2lycShpcnEsIGhvc3QpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IGF0bWNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBhdG1jaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgYXRtZWxfbWNpCSpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJdW5zaWduZWQgaW50CQlpOwogCisJcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKKwogCWlmIChob3N0LT5idWZmZXIpCiAJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIGhvc3QtPmJ1Zl9zaXplLAogCQkgICAgICAgICAgICAgICAgICBob3N0LT5idWZmZXIsIGhvc3QtPmJ1Zl9waHlzX2FkZHIpOwpAQCAtMjUyMCw0MSArMjUxOCw2MiBAQAogCQkJYXRtY2lfY2xlYW51cF9zbG90KGhvc3QtPnNsb3RbaV0sIGkpOwogCX0KIAotCWNsa19wcmVwYXJlX2VuYWJsZShob3N0LT5tY2spOwogCWF0bWNpX3dyaXRlbChob3N0LCBBVE1DSV9JRFIsIH4wVUwpOwogCWF0bWNpX3dyaXRlbChob3N0LCBBVE1DSV9DUiwgQVRNQ0lfQ1JfTUNJRElTKTsKIAlhdG1jaV9yZWFkbChob3N0LCBBVE1DSV9TUik7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPm1jayk7CiAKIAlkZWxfdGltZXJfc3luYygmaG9zdC0+dGltZXIpOwotCWlmIChob3N0LT5kbWEuY2hhbikKKwlpZiAoIUlTX0VSUihob3N0LT5kbWEuY2hhbikpCiAJCWRtYV9yZWxlYXNlX2NoYW5uZWwoaG9zdC0+ZG1hLmNoYW4pOwogCiAJZnJlZV9pcnEocGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwgaG9zdCk7CiAKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+bWNrKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnBkZXYtPmRldik7CisKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhdG1jaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhdG1lbF9tY2kgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5tY2spOworCisJcGluY3RybF9wbV9zZWxlY3Rfc2xlZXBfc3RhdGUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWNpX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXRtZWxfbWNpICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlwaW5jdHJsX3BtX3NlbGVjdF9kZWZhdWx0X3N0YXRlKGRldik7CisKKwlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGhvc3QtPm1jayk7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGF0bWNpX2Rldl9wbV9vcHMgPSB7CisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMocG1fcnVudGltZV9mb3JjZV9zdXNwZW5kLAorCQkJCXBtX3J1bnRpbWVfZm9yY2VfcmVzdW1lKQorCVNFVF9QTV9SVU5USU1FX1BNX09QUyhhdG1jaV9ydW50aW1lX3N1c3BlbmQsIGF0bWNpX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtY2lfZHJpdmVyID0gewotCS5yZW1vdmUJCT0gX19leGl0X3AoYXRtY2lfcmVtb3ZlKSwKKwkucHJvYmUJCT0gYXRtY2lfcHJvYmUsCisJLnJlbW92ZQkJPSBhdG1jaV9yZW1vdmUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAogCQkub2ZfbWF0Y2hfdGFibGUJPSBvZl9tYXRjaF9wdHIoYXRtY2lfZHRfaWRzKSwKKwkJLnBtCQk9ICZhdG1jaV9kZXZfcG1fb3BzLAogCX0sCiB9OwotCi1zdGF0aWMgaW50IF9faW5pdCBhdG1jaV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYXRtY2lfZHJpdmVyLCBhdG1jaV9wcm9iZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhdG1jaV9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWNpX2RyaXZlcik7Ci19Ci0KLWxhdGVfaW5pdGNhbGwoYXRtY2lfaW5pdCk7IC8qIHRyeSB0byBsb2FkIGFmdGVyIGRtYSBkcml2ZXIgd2hlbiBidWlsdC1pbiAqLwotbW9kdWxlX2V4aXQoYXRtY2lfZXhpdCk7Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF0bWNpX2RyaXZlcik7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQXRtZWwgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkhhYXZhcmQgU2tpbm5lbW9lbiAoQXRtZWwpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1leHlub3MuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLWV4eW5vcy5jCmluZGV4IDBmYmM1M2EuLjUwOTM2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLWV4eW5vcy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLWV4eW5vcy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjZGVmaW5lIE5VTV9QSU5TKHgpCQkJKHggKyAyKQogCiAjZGVmaW5lIFNETU1DX0NMS1NFTAkJCTB4MDlDCisjZGVmaW5lIFNETU1DX0NMS1NFTDY0CQkJMHgwQTgKICNkZWZpbmUgU0RNTUNfQ0xLU0VMX0NDTEtfU0FNUExFKHgpCSgoKHgpICYgNykgPDwgMCkKICNkZWZpbmUgU0RNTUNfQ0xLU0VMX0NDTEtfRFJJVkUoeCkJKCgoeCkgJiA3KSA8PCAxNikKICNkZWZpbmUgU0RNTUNfQ0xLU0VMX0NDTEtfRElWSURFUih4KQkoKCh4KSAmIDcpIDw8IDI0KQpAQCAtNjUsNiArNjYsOCBAQAogCURXX01DSV9UWVBFX0VYWU5PUzUyNTAsCiAJRFdfTUNJX1RZUEVfRVhZTk9TNTQyMCwKIAlEV19NQ0lfVFlQRV9FWFlOT1M1NDIwX1NNVSwKKwlEV19NQ0lfVFlQRV9FWFlOT1M3LAorCURXX01DSV9UWVBFX0VYWU5PUzdfU01VLAogfTsKIAogLyogRXh5bm9zIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRyaXZlciBwcml2YXRlIGRhdGEgKi8KQEAgLTk1LDYgKzk4LDEyIEBACiAJfSwgewogCQkuY29tcGF0aWJsZQk9ICJzYW1zdW5nLGV4eW5vczU0MjAtZHctbXNoYy1zbXUiLAogCQkuY3RybF90eXBlCT0gRFdfTUNJX1RZUEVfRVhZTk9TNTQyMF9TTVUsCisJfSwgeworCQkuY29tcGF0aWJsZQk9ICJzYW1zdW5nLGV4eW5vczctZHctbXNoYyIsCisJCS5jdHJsX3R5cGUJPSBEV19NQ0lfVFlQRV9FWFlOT1M3LAorCX0sIHsKKwkJLmNvbXBhdGlibGUJPSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMtc211IiwKKwkJLmN0cmxfdHlwZQk9IERXX01DSV9UWVBFX0VYWU5PUzdfU01VLAogCX0sCiB9OwogCkBAIC0xMDIsNyArMTExLDggQEAKIHsKIAlzdHJ1Y3QgZHdfbWNpX2V4eW5vc19wcml2X2RhdGEgKnByaXYgPSBob3N0LT5wcml2OwogCi0JaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M1NDIwX1NNVSkgeworCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNTQyMF9TTVUgfHwKKwkJcHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzdfU01VKSB7CiAJCW1jaV93cml0ZWwoaG9zdCwgTVBTQkVHSU4wLCAwKTsKIAkJbWNpX3dyaXRlbChob3N0LCBNUFNFTkQwLCBEV01DSV9CTE9DS19OVU0pOwogCQltY2lfd3JpdGVsKGhvc3QsIE1QU0NUUkwwLCBEV01DSV9NUFNDVFJMX1NFQ1VSRV9XUklURV9CSVQgfApAQCAtMTUzLDExICsxNjMsMjIgQEAKIHN0YXRpYyBpbnQgZHdfbWNpX2V4eW5vc19yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkd19tY2kgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHdfbWNpX2V4eW5vc19wcml2X2RhdGEgKnByaXYgPSBob3N0LT5wcml2OwogCXUzMiBjbGtzZWw7CiAKLQljbGtzZWwgPSBtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMKTsKLQlpZiAoY2xrc2VsICYgU0RNTUNfQ0xLU0VMX1dBS0VVUF9JTlQpCi0JCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBjbGtzZWwpOworCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpCisJCWNsa3NlbCA9IG1jaV9yZWFkbChob3N0LCBDTEtTRUw2NCk7CisJZWxzZQorCQljbGtzZWwgPSBtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMKTsKKworCWlmIChjbGtzZWwgJiBTRE1NQ19DTEtTRUxfV0FLRVVQX0lOVCkgeworCQlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzcgfHwKKwkJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkKKwkJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMNjQsIGNsa3NlbCk7CisJCWVsc2UKKwkJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBjbGtzZWwpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTY5LDYgKzE5MCw3IEBACiAKIHN0YXRpYyB2b2lkIGR3X21jaV9leHlub3NfcHJlcGFyZV9jb21tYW5kKHN0cnVjdCBkd19tY2kgKmhvc3QsIHUzMiAqY21kcikKIHsKKwlzdHJ1Y3QgZHdfbWNpX2V4eW5vc19wcml2X2RhdGEgKnByaXYgPSBob3N0LT5wcml2OwogCS8qCiAJICogRXh5bm9zNDQxMiBhbmQgRXh5bm9zNTI1MCBleHRlbmRzIHRoZSB1c2Ugb2YgQ01EIHJlZ2lzdGVyIHdpdGggdGhlCiAJICogdXNlIG9mIGJpdCAyOSAod2hpY2ggaXMgcmVzZXJ2ZWQgb24gc3RhbmRhcmQgTVNIQyBjb250cm9sbGVycykgZm9yCkBAIC0xNzYsOCArMTk4LDE0IEBACiAJICogSE9MRCByZWdpc3RlciBzaG91bGQgYmUgYnlwYXNzZWQgaW4gY2FzZSB0aGVyZSBpcyBubyBwaGFzZSBzaGlmdAogCSAqIGFwcGxpZWQgb24gQ01EL0RBVEEgdGhhdCBpcyBzZW50IHRvIHRoZSBjYXJkLgogCSAqLwotCWlmIChTRE1NQ19DTEtTRUxfR0VUX0RSVl9XRDMobWNpX3JlYWRsKGhvc3QsIENMS1NFTCkpKQotCQkqY21kciB8PSBTRE1NQ19DTURfVVNFX0hPTERfUkVHOworCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpIHsKKwkJaWYgKFNETU1DX0NMS1NFTF9HRVRfRFJWX1dEMyhtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMNjQpKSkKKwkJCSpjbWRyIHw9IFNETU1DX0NNRF9VU0VfSE9MRF9SRUc7CisJIH0gZWxzZSB7CisJCWlmIChTRE1NQ19DTEtTRUxfR0VUX0RSVl9XRDMobWNpX3JlYWRsKGhvc3QsIENMS1NFTCkpKQorCQkJKmNtZHIgfD0gU0RNTUNfQ01EX1VTRV9IT0xEX1JFRzsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGR3X21jaV9leHlub3Nfc2V0X2lvcyhzdHJ1Y3QgZHdfbWNpICpob3N0LCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQpAQCAtMTg4LDEyICsyMTYsMjAgQEAKIAl1OCBkaXYgPSBwcml2LT5jaXVfZGl2ICsgMTsKIAogCWlmIChpb3MtPnRpbWluZyA9PSBNTUNfVElNSU5HX01NQ19ERFI1MikgewotCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgcHJpdi0+ZGRyX3RpbWluZyk7CisJCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQkJcHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzdfU01VKQorCQkJbWNpX3dyaXRlbChob3N0LCBDTEtTRUw2NCwgcHJpdi0+ZGRyX3RpbWluZyk7CisJCWVsc2UKKwkJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBwcml2LT5kZHJfdGltaW5nKTsKIAkJLyogU2hvdWxkIGJlIGRvdWJsZSByYXRlIGZvciBERFIgbW9kZSAqLwogCQlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF84KQogCQkJd2FudGVkIDw8PSAxOwogCX0gZWxzZSB7Ci0JCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBwcml2LT5zZHJfdGltaW5nKTsKKwkJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3IHx8CisJCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpCisJCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTDY0LCBwcml2LT5zZHJfdGltaW5nKTsKKwkJZWxzZQorCQkJbWNpX3dyaXRlbChob3N0LCBDTEtTRUwsIHByaXYtPnNkcl90aW1pbmcpOwogCX0KIAogCS8qIERvbid0IGNhcmUgaWYgd2FudGVkIGNsb2NrIGlzIHplcm8gKi8KQEAgLTI2NSwyNiArMzAxLDUxIEBACiAKIHN0YXRpYyBpbmxpbmUgdTggZHdfbWNpX2V4eW5vc19nZXRfY2xrc21wbChzdHJ1Y3QgZHdfbWNpICpob3N0KQogewotCXJldHVybiBTRE1NQ19DTEtTRUxfQ0NMS19TQU1QTEUobWNpX3JlYWRsKGhvc3QsIENMS1NFTCkpOworCXN0cnVjdCBkd19tY2lfZXh5bm9zX3ByaXZfZGF0YSAqcHJpdiA9IGhvc3QtPnByaXY7CisKKwlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzcgfHwKKwkJcHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzdfU01VKQorCQlyZXR1cm4gU0RNTUNfQ0xLU0VMX0NDTEtfU0FNUExFKG1jaV9yZWFkbChob3N0LCBDTEtTRUw2NCkpOworCWVsc2UKKwkJcmV0dXJuIFNETU1DX0NMS1NFTF9DQ0xLX1NBTVBMRShtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkd19tY2lfZXh5bm9zX3NldF9jbGtzbXBsKHN0cnVjdCBkd19tY2kgKmhvc3QsIHU4IHNhbXBsZSkKIHsKIAl1MzIgY2xrc2VsOwotCWNsa3NlbCA9IG1jaV9yZWFkbChob3N0LCBDTEtTRUwpOworCXN0cnVjdCBkd19tY2lfZXh5bm9zX3ByaXZfZGF0YSAqcHJpdiA9IGhvc3QtPnByaXY7CisKKwlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzcgfHwKKwkJcHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzdfU01VKQorCQljbGtzZWwgPSBtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMNjQpOworCWVsc2UKKwkJY2xrc2VsID0gbWNpX3JlYWRsKGhvc3QsIENMS1NFTCk7CiAJY2xrc2VsID0gKGNsa3NlbCAmIH4weDcpIHwgU0RNTUNfQ0xLU0VMX0NDTEtfU0FNUExFKHNhbXBsZSk7Ci0JbWNpX3dyaXRlbChob3N0LCBDTEtTRUwsIGNsa3NlbCk7CisJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3IHx8CisJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkKKwkJbWNpX3dyaXRlbChob3N0LCBDTEtTRUw2NCwgY2xrc2VsKTsKKwllbHNlCisJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBjbGtzZWwpOwogfQogCiBzdGF0aWMgaW5saW5lIHU4IGR3X21jaV9leHlub3NfbW92ZV9uZXh0X2Nsa3NtcGwoc3RydWN0IGR3X21jaSAqaG9zdCkKIHsKKwlzdHJ1Y3QgZHdfbWNpX2V4eW5vc19wcml2X2RhdGEgKnByaXYgPSBob3N0LT5wcml2OwogCXUzMiBjbGtzZWw7CiAJdTggc2FtcGxlOwogCi0JY2xrc2VsID0gbWNpX3JlYWRsKGhvc3QsIENMS1NFTCk7CisJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3IHx8CisJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkKKwkJY2xrc2VsID0gbWNpX3JlYWRsKGhvc3QsIENMS1NFTDY0KTsKKwllbHNlCisJCWNsa3NlbCA9IG1jaV9yZWFkbChob3N0LCBDTEtTRUwpOwogCXNhbXBsZSA9IChjbGtzZWwgKyAxKSAmIDB4NzsKIAljbGtzZWwgPSAoY2xrc2VsICYgfjB4NykgfCBzYW1wbGU7Ci0JbWNpX3dyaXRlbChob3N0LCBDTEtTRUwsIGNsa3NlbCk7CisJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3IHx8CisJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkKKwkJbWNpX3dyaXRlbChob3N0LCBDTEtTRUw2NCwgY2xrc2VsKTsKKwllbHNlCisJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBjbGtzZWwpOwogCXJldHVybiBzYW1wbGU7CiB9CiAKQEAgLTQxMSw2ICs0NzIsMTAgQEAKIAkJCS5kYXRhID0gJmV4eW5vc19kcnZfZGF0YSwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTQyMC1kdy1tc2hjLXNtdSIsCiAJCQkuZGF0YSA9ICZleHlub3NfZHJ2X2RhdGEsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczctZHctbXNoYyIsCisJCQkuZGF0YSA9ICZleHlub3NfZHJ2X2RhdGEsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczctZHctbXNoYy1zbXUiLAorCQkJLmRhdGEgPSAmZXh5bm9zX2Rydl9kYXRhLCB9LAogCXt9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR3X21jaV9leHlub3NfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcGx0Zm0uYyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXBsdGZtLmMKaW5kZXggOGI2NTcyMS4uZWM2ZGJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcGx0Zm0uYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1wbHRmbS5jCkBAIC0zNSw2ICszNSwxMCBAQAogCS5wcmVwYXJlX2NvbW1hbmQJPSBkd19tY2lfcGx0Zm1fcHJlcGFyZV9jb21tYW5kLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgcGlzdGFjaGlvX2Rydl9kYXRhID0geworCS5wcmVwYXJlX2NvbW1hbmQJPSBkd19tY2lfcGx0Zm1fcHJlcGFyZV9jb21tYW5kLAorfTsKKwogaW50IGR3X21jaV9wbHRmbV9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICBjb25zdCBzdHJ1Y3QgZHdfbWNpX2Rydl9kYXRhICpkcnZfZGF0YSkKIHsKQEAgLTkwLDYgKzk0LDggQEAKIAl7IC5jb21wYXRpYmxlID0gInNucHMsZHctbXNoYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJhbHRyLHNvY2ZwZ2EtZHctbXNoYyIsCiAJCS5kYXRhID0gJnNvY2ZwZ2FfZHJ2X2RhdGEgfSwKKwl7IC5jb21wYXRpYmxlID0gImltZyxwaXN0YWNoaW8tZHctbXNoYyIsCisJCS5kYXRhID0gJnBpc3RhY2hpb19kcnZfZGF0YSB9LAogCXt9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR3X21jaV9wbHRmbV9tYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1yb2NrY2hpcC5jIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYwppbmRleCBmMGMyY2IxLi41NjUwYWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1yb2NrY2hpcC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMKQEAgLTM3LDYgKzM3LDkgQEAKIAl1bnNpZ25lZCBpbnQgY2Nsa2luOwogCXUzMiBidXNfaHo7CiAKKwlpZiAoaW9zLT5jbG9jayA9PSAwKQorCQlyZXR1cm47CisKIAkvKgogCSAqIGNjbGtpbjogc291cmNlIGNsb2NrIG9mIG1tYyBjb250cm9sbGVyCiAJICogYnVzX2h6OiBjYXJkIGludGVyZmFjZSBjbG9jayBnZW5lcmF0ZWQgYnkgQ0xLR0VOCkBAIC02NSwxNCArNjgsMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgZHdfbWNpX3JvY2tjaGlwX2luaXQoc3RydWN0IGR3X21jaSAqaG9zdCkKK3sKKwkvKiBJdCBpcyBzbG90IDggb24gUm9ja2NoaXAgU29DcyAqLworCWhvc3QtPnNkaW9faWQwID0gODsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGR3X21jaV9kcnZfZGF0YSByazI5MjhfZHJ2X2RhdGEgPSB7CiAJLnByZXBhcmVfY29tbWFuZCAgICAgICAgPSBkd19tY2lfcm9ja2NoaXBfcHJlcGFyZV9jb21tYW5kLAorCS5pbml0CQkJPSBkd19tY2lfcm9ja2NoaXBfaW5pdCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHdfbWNpX2Rydl9kYXRhIHJrMzI4OF9kcnZfZGF0YSA9IHsKIAkucHJlcGFyZV9jb21tYW5kICAgICAgICA9IGR3X21jaV9yb2NrY2hpcF9wcmVwYXJlX2NvbW1hbmQsCiAJLnNldF9pb3MJCT0gZHdfbWNpX3JrMzI4OF9zZXRfaW9zLAogCS5zZXR1cF9jbG9jayAgICA9IGR3X21jaV9yazMyODhfc2V0dXBfY2xvY2ssCisJLmluaXQJCQk9IGR3X21jaV9yb2NrY2hpcF9pbml0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHdfbWNpX3JvY2tjaGlwX21hdGNoW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYwppbmRleCA2OWYwY2M2Li42N2MwNDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbWMvZHdfbW1jLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3Nsb3QtZ3Bpby5oPgpAQCAtNjIsNiArNjEsMjQgQEAKIAkJCQkgU0RNTUNfSURNQUNfSU5UX0ZCRSB8IFNETU1DX0lETUFDX0lOVF9SSSB8IFwKIAkJCQkgU0RNTUNfSURNQUNfSU5UX1RJKQogCitzdHJ1Y3QgaWRtYWNfZGVzY182NGFkZHIgeworCXUzMgkJZGVzMDsJLyogQ29udHJvbCBEZXNjcmlwdG9yICovCisKKwl1MzIJCWRlczE7CS8qIFJlc2VydmVkICovCisKKwl1MzIJCWRlczI7CS8qQnVmZmVyIHNpemVzICovCisjZGVmaW5lIElETUFDXzY0QUREUl9TRVRfQlVGRkVSMV9TSVpFKGQsIHMpIFwKKwkoKGQpLT5kZXMyID0gKChkKS0+ZGVzMiAmIDB4MDNmZmUwMDApIHwgKChzKSAmIDB4MWZmZikpCisKKwl1MzIJCWRlczM7CS8qIFJlc2VydmVkICovCisKKwl1MzIJCWRlczQ7CS8qIExvd2VyIDMyLWJpdHMgb2YgQnVmZmVyIEFkZHJlc3MgUG9pbnRlciAxKi8KKwl1MzIJCWRlczU7CS8qIFVwcGVyIDMyLWJpdHMgb2YgQnVmZmVyIEFkZHJlc3MgUG9pbnRlciAxKi8KKworCXUzMgkJZGVzNjsJLyogTG93ZXIgMzItYml0cyBvZiBOZXh0IERlc2NyaXB0b3IgQWRkcmVzcyAqLworCXUzMgkJZGVzNzsJLyogVXBwZXIgMzItYml0cyBvZiBOZXh0IERlc2NyaXB0b3IgQWRkcmVzcyAqLworfTsKKwogc3RydWN0IGlkbWFjX2Rlc2MgewogCXUzMgkJZGVzMDsJLyogQ29udHJvbCBEZXNjcmlwdG9yICovCiAjZGVmaW5lIElETUFDX0RFUzBfRElDCUJJVCgxKQpAQCAtODMsNiArMTAwLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfTU1DX0RXX0lETUFDICovCiAKIHN0YXRpYyBib29sIGR3X21jaV9yZXNldChzdHJ1Y3QgZHdfbWNpICpob3N0KTsKK3N0YXRpYyBib29sIGR3X21jaV9jdHJsX3Jlc2V0KHN0cnVjdCBkd19tY2kgKmhvc3QsIHUzMiByZXNldCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHN0YXRpYyBpbnQgZHdfbWNpX3JlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKQEAgLTQxNCwzMSArNDMyLDY3IEBACiAJCQkJICAgIHVuc2lnbmVkIGludCBzZ19sZW4pCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGlkbWFjX2Rlc2MgKmRlc2MgPSBob3N0LT5zZ19jcHU7CisJaWYgKGhvc3QtPmRtYV82NGJpdF9hZGRyZXNzID09IDEpIHsKKwkJc3RydWN0IGlkbWFjX2Rlc2NfNjRhZGRyICpkZXNjID0gaG9zdC0+c2dfY3B1OwogCi0JZm9yIChpID0gMDsgaSA8IHNnX2xlbjsgaSsrLCBkZXNjKyspIHsKLQkJdW5zaWduZWQgaW50IGxlbmd0aCA9IHNnX2RtYV9sZW4oJmRhdGEtPnNnW2ldKTsKLQkJdTMyIG1lbV9hZGRyID0gc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IHNnX2xlbjsgaSsrLCBkZXNjKyspIHsKKwkJCXVuc2lnbmVkIGludCBsZW5ndGggPSBzZ19kbWFfbGVuKCZkYXRhLT5zZ1tpXSk7CisJCQl1NjQgbWVtX2FkZHIgPSBzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbaV0pOwogCi0JCS8qIFNldCB0aGUgT1dOIGJpdCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzIGRlc2NyaXB0b3IgKi8KLQkJZGVzYy0+ZGVzMCA9IElETUFDX0RFUzBfT1dOIHwgSURNQUNfREVTMF9ESUMgfCBJRE1BQ19ERVMwX0NIOworCQkJLyoKKwkJCSAqIFNldCB0aGUgT1dOIGJpdCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzCisJCQkgKiBkZXNjcmlwdG9yCisJCQkgKi8KKwkJCWRlc2MtPmRlczAgPSBJRE1BQ19ERVMwX09XTiB8IElETUFDX0RFUzBfRElDIHwKKwkJCQkJCUlETUFDX0RFUzBfQ0g7CisJCQkvKiBCdWZmZXIgbGVuZ3RoICovCisJCQlJRE1BQ182NEFERFJfU0VUX0JVRkZFUjFfU0laRShkZXNjLCBsZW5ndGgpOwogCi0JCS8qIEJ1ZmZlciBsZW5ndGggKi8KLQkJSURNQUNfU0VUX0JVRkZFUjFfU0laRShkZXNjLCBsZW5ndGgpOworCQkJLyogUGh5c2ljYWwgYWRkcmVzcyB0byBETUEgdG8vZnJvbSAqLworCQkJZGVzYy0+ZGVzNCA9IG1lbV9hZGRyICYgMHhmZmZmZmZmZjsKKwkJCWRlc2MtPmRlczUgPSBtZW1fYWRkciA+PiAzMjsKKwkJfQogCi0JCS8qIFBoeXNpY2FsIGFkZHJlc3MgdG8gRE1BIHRvL2Zyb20gKi8KLQkJZGVzYy0+ZGVzMiA9IG1lbV9hZGRyOworCQkvKiBTZXQgZmlyc3QgZGVzY3JpcHRvciAqLworCQlkZXNjID0gaG9zdC0+c2dfY3B1OworCQlkZXNjLT5kZXMwIHw9IElETUFDX0RFUzBfRkQ7CisKKwkJLyogU2V0IGxhc3QgZGVzY3JpcHRvciAqLworCQlkZXNjID0gaG9zdC0+c2dfY3B1ICsgKGkgLSAxKSAqCisJCQkJc2l6ZW9mKHN0cnVjdCBpZG1hY19kZXNjXzY0YWRkcik7CisJCWRlc2MtPmRlczAgJj0gfihJRE1BQ19ERVMwX0NIIHwgSURNQUNfREVTMF9ESUMpOworCQlkZXNjLT5kZXMwIHw9IElETUFDX0RFUzBfTEQ7CisKKwl9IGVsc2UgeworCQlzdHJ1Y3QgaWRtYWNfZGVzYyAqZGVzYyA9IGhvc3QtPnNnX2NwdTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2dfbGVuOyBpKyssIGRlc2MrKykgeworCQkJdW5zaWduZWQgaW50IGxlbmd0aCA9IHNnX2RtYV9sZW4oJmRhdGEtPnNnW2ldKTsKKwkJCXUzMiBtZW1fYWRkciA9IHNnX2RtYV9hZGRyZXNzKCZkYXRhLT5zZ1tpXSk7CisKKwkJCS8qCisJCQkgKiBTZXQgdGhlIE9XTiBiaXQgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcworCQkJICogZGVzY3JpcHRvcgorCQkJICovCisJCQlkZXNjLT5kZXMwID0gSURNQUNfREVTMF9PV04gfCBJRE1BQ19ERVMwX0RJQyB8CisJCQkJCQlJRE1BQ19ERVMwX0NIOworCQkJLyogQnVmZmVyIGxlbmd0aCAqLworCQkJSURNQUNfU0VUX0JVRkZFUjFfU0laRShkZXNjLCBsZW5ndGgpOworCisJCQkvKiBQaHlzaWNhbCBhZGRyZXNzIHRvIERNQSB0by9mcm9tICovCisJCQlkZXNjLT5kZXMyID0gbWVtX2FkZHI7CisJCX0KKworCQkvKiBTZXQgZmlyc3QgZGVzY3JpcHRvciAqLworCQlkZXNjID0gaG9zdC0+c2dfY3B1OworCQlkZXNjLT5kZXMwIHw9IElETUFDX0RFUzBfRkQ7CisKKwkJLyogU2V0IGxhc3QgZGVzY3JpcHRvciAqLworCQlkZXNjID0gaG9zdC0+c2dfY3B1ICsgKGkgLSAxKSAqIHNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzYyk7CisJCWRlc2MtPmRlczAgJj0gfihJRE1BQ19ERVMwX0NIIHwgSURNQUNfREVTMF9ESUMpOworCQlkZXNjLT5kZXMwIHw9IElETUFDX0RFUzBfTEQ7CiAJfQogCi0JLyogU2V0IGZpcnN0IGRlc2NyaXB0b3IgKi8KLQlkZXNjID0gaG9zdC0+c2dfY3B1OwotCWRlc2MtPmRlczAgfD0gSURNQUNfREVTMF9GRDsKLQotCS8qIFNldCBsYXN0IGRlc2NyaXB0b3IgKi8KLQlkZXNjID0gaG9zdC0+c2dfY3B1ICsgKGkgLSAxKSAqIHNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzYyk7Ci0JZGVzYy0+ZGVzMCAmPSB+KElETUFDX0RFUzBfQ0ggfCBJRE1BQ19ERVMwX0RJQyk7Ci0JZGVzYy0+ZGVzMCB8PSBJRE1BQ19ERVMwX0xEOwotCiAJd21iKCk7CiB9CiAKQEAgLTQ0OCw2ICs1MDIsMTAgQEAKIAogCWR3X21jaV90cmFuc2xhdGVfc2dsaXN0KGhvc3QsIGhvc3QtPmRhdGEsIHNnX2xlbik7CiAKKwkvKiBNYWtlIHN1cmUgdG8gcmVzZXQgRE1BIGluIGNhc2Ugd2UgZGlkIFBJTyBiZWZvcmUgdGhpcyAqLworCWR3X21jaV9jdHJsX3Jlc2V0KGhvc3QsIFNETU1DX0NUUkxfRE1BX1JFU0VUKTsKKwlkd19tY2lfaWRtYWNfcmVzZXQoaG9zdCk7CisKIAkvKiBTZWxlY3QgSURNQUMgaW50ZXJmYWNlICovCiAJdGVtcCA9IG1jaV9yZWFkbChob3N0LCBDVFJMKTsKIAl0ZW1wIHw9IFNETU1DX0NUUkxfVVNFX0lETUFDOwpAQCAtNDY2LDI5ICs1MjQsNzEgQEAKIAogc3RhdGljIGludCBkd19tY2lfaWRtYWNfaW5pdChzdHJ1Y3QgZHdfbWNpICpob3N0KQogewotCXN0cnVjdCBpZG1hY19kZXNjICpwOwogCWludCBpOwogCi0JLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSByaW5nIGJ1ZmZlciAqLwotCWhvc3QtPnJpbmdfc2l6ZSA9IFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzYyk7CisJaWYgKGhvc3QtPmRtYV82NGJpdF9hZGRyZXNzID09IDEpIHsKKwkJc3RydWN0IGlkbWFjX2Rlc2NfNjRhZGRyICpwOworCQkvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIHJpbmcgYnVmZmVyICovCisJCWhvc3QtPnJpbmdfc2l6ZSA9IFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzY182NGFkZHIpOwogCi0JLyogRm9yd2FyZCBsaW5rIHRoZSBkZXNjcmlwdG9yIGxpc3QgKi8KLQlmb3IgKGkgPSAwLCBwID0gaG9zdC0+c2dfY3B1OyBpIDwgaG9zdC0+cmluZ19zaXplIC0gMTsgaSsrLCBwKyspCi0JCXAtPmRlczMgPSBob3N0LT5zZ19kbWEgKyAoc2l6ZW9mKHN0cnVjdCBpZG1hY19kZXNjKSAqIChpICsgMSkpOworCQkvKiBGb3J3YXJkIGxpbmsgdGhlIGRlc2NyaXB0b3IgbGlzdCAqLworCQlmb3IgKGkgPSAwLCBwID0gaG9zdC0+c2dfY3B1OyBpIDwgaG9zdC0+cmluZ19zaXplIC0gMTsKKwkJCQkJCQkJaSsrLCBwKyspIHsKKwkJCXAtPmRlczYgPSAoaG9zdC0+c2dfZG1hICsKKwkJCQkJKHNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzY182NGFkZHIpICoKKwkJCQkJCQkoaSArIDEpKSkgJiAweGZmZmZmZmZmOwogCi0JLyogU2V0IHRoZSBsYXN0IGRlc2NyaXB0b3IgYXMgdGhlIGVuZC1vZi1yaW5nIGRlc2NyaXB0b3IgKi8KLQlwLT5kZXMzID0gaG9zdC0+c2dfZG1hOwotCXAtPmRlczAgPSBJRE1BQ19ERVMwX0VSOworCQkJcC0+ZGVzNyA9ICh1NjQpKGhvc3QtPnNnX2RtYSArCisJCQkJCShzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2NfNjRhZGRyKSAqCisJCQkJCQkJKGkgKyAxKSkpID4+IDMyOworCQkJLyogSW5pdGlhbGl6ZSByZXNlcnZlZCBhbmQgYnVmZmVyIHNpemUgZmllbGRzIHRvICIwIiAqLworCQkJcC0+ZGVzMSA9IDA7CisJCQlwLT5kZXMyID0gMDsKKwkJCXAtPmRlczMgPSAwOworCQl9CisKKwkJLyogU2V0IHRoZSBsYXN0IGRlc2NyaXB0b3IgYXMgdGhlIGVuZC1vZi1yaW5nIGRlc2NyaXB0b3IgKi8KKwkJcC0+ZGVzNiA9IGhvc3QtPnNnX2RtYSAmIDB4ZmZmZmZmZmY7CisJCXAtPmRlczcgPSAodTY0KWhvc3QtPnNnX2RtYSA+PiAzMjsKKwkJcC0+ZGVzMCA9IElETUFDX0RFUzBfRVI7CisKKwl9IGVsc2UgeworCQlzdHJ1Y3QgaWRtYWNfZGVzYyAqcDsKKwkJLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSByaW5nIGJ1ZmZlciAqLworCQlob3N0LT5yaW5nX3NpemUgPSBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2MpOworCisJCS8qIEZvcndhcmQgbGluayB0aGUgZGVzY3JpcHRvciBsaXN0ICovCisJCWZvciAoaSA9IDAsIHAgPSBob3N0LT5zZ19jcHU7IGkgPCBob3N0LT5yaW5nX3NpemUgLSAxOyBpKyssIHArKykKKwkJCXAtPmRlczMgPSBob3N0LT5zZ19kbWEgKyAoc2l6ZW9mKHN0cnVjdCBpZG1hY19kZXNjKSAqCisJCQkJCQkJCShpICsgMSkpOworCisJCS8qIFNldCB0aGUgbGFzdCBkZXNjcmlwdG9yIGFzIHRoZSBlbmQtb2YtcmluZyBkZXNjcmlwdG9yICovCisJCXAtPmRlczMgPSBob3N0LT5zZ19kbWE7CisJCXAtPmRlczAgPSBJRE1BQ19ERVMwX0VSOworCX0KIAogCWR3X21jaV9pZG1hY19yZXNldChob3N0KTsKIAotCS8qIE1hc2sgb3V0IGludGVycnVwdHMgLSBnZXQgVHggJiBSeCBjb21wbGV0ZSBvbmx5ICovCi0JbWNpX3dyaXRlbChob3N0LCBJRFNUUywgSURNQUNfSU5UX0NMUik7Ci0JbWNpX3dyaXRlbChob3N0LCBJRElOVEVOLCBTRE1NQ19JRE1BQ19JTlRfTkkgfCBTRE1NQ19JRE1BQ19JTlRfUkkgfAotCQkgICBTRE1NQ19JRE1BQ19JTlRfVEkpOworCWlmIChob3N0LT5kbWFfNjRiaXRfYWRkcmVzcyA9PSAxKSB7CisJCS8qIE1hc2sgb3V0IGludGVycnVwdHMgLSBnZXQgVHggJiBSeCBjb21wbGV0ZSBvbmx5ICovCisJCW1jaV93cml0ZWwoaG9zdCwgSURTVFM2NCwgSURNQUNfSU5UX0NMUik7CisJCW1jaV93cml0ZWwoaG9zdCwgSURJTlRFTjY0LCBTRE1NQ19JRE1BQ19JTlRfTkkgfAorCQkJCVNETU1DX0lETUFDX0lOVF9SSSB8IFNETU1DX0lETUFDX0lOVF9USSk7CiAKLQkvKiBTZXQgdGhlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCi0JbWNpX3dyaXRlbChob3N0LCBEQkFERFIsIGhvc3QtPnNnX2RtYSk7CisJCS8qIFNldCB0aGUgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwkJbWNpX3dyaXRlbChob3N0LCBEQkFERFJMLCBob3N0LT5zZ19kbWEgJiAweGZmZmZmZmZmKTsKKwkJbWNpX3dyaXRlbChob3N0LCBEQkFERFJVLCAodTY0KWhvc3QtPnNnX2RtYSA+PiAzMik7CisKKwl9IGVsc2UgeworCQkvKiBNYXNrIG91dCBpbnRlcnJ1cHRzIC0gZ2V0IFR4ICYgUnggY29tcGxldGUgb25seSAqLworCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTLCBJRE1BQ19JTlRfQ0xSKTsKKwkJbWNpX3dyaXRlbChob3N0LCBJRElOVEVOLCBTRE1NQ19JRE1BQ19JTlRfTkkgfAorCQkJCVNETU1DX0lETUFDX0lOVF9SSSB8IFNETU1DX0lETUFDX0lOVF9USSk7CisKKwkJLyogU2V0IHRoZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLworCQltY2lfd3JpdGVsKGhvc3QsIERCQUREUiwgaG9zdC0+c2dfZG1hKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjI2LDYgKzcyNiwxMyBAQAogCiAJV0FSTl9PTighKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkpOwogCisJLyoKKwkgKiBDRFRIUkNUTCBkb2Vzbid0IGV4aXN0IHByaW9yIHRvIDI0MEEgKGluIGZhY3QgdGhhdCByZWdpc3RlciBvZmZzZXQgaXMKKwkgKiBpbiB0aGUgRklGTyByZWdpb24sIHNvIHdlIHJlYWxseSBzaG91bGRuJ3QgYWNjZXNzIGl0KS4KKwkgKi8KKwlpZiAoaG9zdC0+dmVyaWQgPCBEV19NTUNfMjQwQSkKKwkJcmV0dXJuOworCiAJaWYgKGhvc3QtPnRpbWluZyAhPSBNTUNfVElNSU5HX01NQ19IUzIwMCAmJgogCSAgICBob3N0LT50aW1pbmcgIT0gTU1DX1RJTUlOR19VSFNfU0RSMTA0KQogCQlnb3RvIGRpc2FibGU7CkBAIC04MTksNyArOTI2LDcgQEAKIAogCQkvKiBlbmFibGUgY2xvY2s7IG9ubHkgbG93IHBvd2VyIGlmIG5vIFNESU8gKi8KIAkJY2xrX2VuX2EgPSBTRE1NQ19DTEtFTl9FTkFCTEUgPDwgc2xvdC0+aWQ7Ci0JCWlmICghKG1jaV9yZWFkbChob3N0LCBJTlRNQVNLKSAmIFNETU1DX0lOVF9TRElPKHNsb3QtPmlkKSkpCisJCWlmICghKG1jaV9yZWFkbChob3N0LCBJTlRNQVNLKSAmIFNETU1DX0lOVF9TRElPKHNsb3QtPnNkaW9faWQpKSkKIAkJCWNsa19lbl9hIHw9IFNETU1DX0NMS0VOX0xPV19QV1IgPDwgc2xvdC0+aWQ7CiAJCW1jaV93cml0ZWwoaG9zdCwgQ0xLRU5BLCBjbGtfZW5fYSk7CiAKQEAgLTEwNzUsNyArMTE4Miw3IEBACiAJCXJldCA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShtbWMtPnN1cHBseS52cW1tYywgbWluX3V2LCBtYXhfdXYpOwogCiAJCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoJm1tYy0+Y2xhc3NfZGV2LAorCQkJZGV2X2RiZygmbW1jLT5jbGFzc19kZXYsCiAJCQkJCSAiUmVndWxhdG9yIHNldCBlcnJvciAlZDogJWQgLSAlZFxuIiwKIAkJCQkJIHJldCwgbWluX3V2LCBtYXhfdXYpOwogCQkJcmV0dXJuIHJldDsKQEAgLTExODAsMTAgKzEyODcsMTAgQEAKIAkJZHdfbWNpX2Rpc2FibGVfbG93X3Bvd2VyKHNsb3QpOwogCiAJCW1jaV93cml0ZWwoaG9zdCwgSU5UTUFTSywKLQkJCSAgIChpbnRfbWFzayB8IFNETU1DX0lOVF9TRElPKHNsb3QtPmlkKSkpOworCQkJICAgKGludF9tYXNrIHwgU0RNTUNfSU5UX1NESU8oc2xvdC0+c2Rpb19pZCkpKTsKIAl9IGVsc2UgewogCQltY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssCi0JCQkgICAoaW50X21hc2sgJiB+U0RNTUNfSU5UX1NESU8oc2xvdC0+aWQpKSk7CisJCQkgICAoaW50X21hc2sgJiB+U0RNTUNfSU5UX1NESU8oc2xvdC0+c2Rpb19pZCkpKTsKIAl9CiB9CiAKQEAgLTE5NTQsNiArMjA2MSwyMyBAQAogCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPnRhc2tsZXQpOwogfQogCitzdGF0aWMgdm9pZCBkd19tY2lfaGFuZGxlX2NkKHN0cnVjdCBkd19tY2kgKmhvc3QpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bnVtX3Nsb3RzOyBpKyspIHsKKwkJc3RydWN0IGR3X21jaV9zbG90ICpzbG90ID0gaG9zdC0+c2xvdFtpXTsKKworCQlpZiAoIXNsb3QpCisJCQljb250aW51ZTsKKworCQlpZiAoc2xvdC0+bW1jLT5vcHMtPmNhcmRfZXZlbnQpCisJCQlzbG90LT5tbWMtPm9wcy0+Y2FyZF9ldmVudChzbG90LT5tbWMpOworCQltbWNfZGV0ZWN0X2NoYW5nZShzbG90LT5tbWMsCisJCQltc2Vjc190b19qaWZmaWVzKGhvc3QtPnBkYXRhLT5kZXRlY3RfZGVsYXlfbXMpKTsKKwl9Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gZGV2X2lkOwpAQCAtMjAyOSwxNCArMjE1MywxNSBAQAogCiAJCWlmIChwZW5kaW5nICYgU0RNTUNfSU5UX0NEKSB7CiAJCQltY2lfd3JpdGVsKGhvc3QsIFJJTlRTVFMsIFNETU1DX0lOVF9DRCk7Ci0JCQlxdWV1ZV93b3JrKGhvc3QtPmNhcmRfd29ya3F1ZXVlLCAmaG9zdC0+Y2FyZF93b3JrKTsKKwkJCWR3X21jaV9oYW5kbGVfY2QoaG9zdCk7CiAJCX0KIAogCQkvKiBIYW5kbGUgU0RJTyBJbnRlcnJ1cHRzICovCiAJCWZvciAoaSA9IDA7IGkgPCBob3N0LT5udW1fc2xvdHM7IGkrKykgewogCQkJc3RydWN0IGR3X21jaV9zbG90ICpzbG90ID0gaG9zdC0+c2xvdFtpXTsKLQkJCWlmIChwZW5kaW5nICYgU0RNTUNfSU5UX1NESU8oaSkpIHsKLQkJCQltY2lfd3JpdGVsKGhvc3QsIFJJTlRTVFMsIFNETU1DX0lOVF9TRElPKGkpKTsKKwkJCWlmIChwZW5kaW5nICYgU0RNTUNfSU5UX1NESU8oc2xvdC0+c2Rpb19pZCkpIHsKKwkJCQltY2lfd3JpdGVsKGhvc3QsIFJJTlRTVFMsCisJCQkJCSAgIFNETU1DX0lOVF9TRElPKHNsb3QtPnNkaW9faWQpKTsKIAkJCQltbWNfc2lnbmFsX3NkaW9faXJxKHNsb3QtPm1tYyk7CiAJCQl9CiAJCX0KQEAgLTIwNDUsOTkgKzIxNzAsMjggQEAKIAogI2lmZGVmIENPTkZJR19NTUNfRFdfSURNQUMKIAkvKiBIYW5kbGUgRE1BIGludGVycnVwdHMgKi8KLQlwZW5kaW5nID0gbWNpX3JlYWRsKGhvc3QsIElEU1RTKTsKLQlpZiAocGVuZGluZyAmIChTRE1NQ19JRE1BQ19JTlRfVEkgfCBTRE1NQ19JRE1BQ19JTlRfUkkpKSB7Ci0JCW1jaV93cml0ZWwoaG9zdCwgSURTVFMsIFNETU1DX0lETUFDX0lOVF9USSB8IFNETU1DX0lETUFDX0lOVF9SSSk7Ci0JCW1jaV93cml0ZWwoaG9zdCwgSURTVFMsIFNETU1DX0lETUFDX0lOVF9OSSk7Ci0JCWhvc3QtPmRtYV9vcHMtPmNvbXBsZXRlKGhvc3QpOworCWlmIChob3N0LT5kbWFfNjRiaXRfYWRkcmVzcyA9PSAxKSB7CisJCXBlbmRpbmcgPSBtY2lfcmVhZGwoaG9zdCwgSURTVFM2NCk7CisJCWlmIChwZW5kaW5nICYgKFNETU1DX0lETUFDX0lOVF9USSB8IFNETU1DX0lETUFDX0lOVF9SSSkpIHsKKwkJCW1jaV93cml0ZWwoaG9zdCwgSURTVFM2NCwgU0RNTUNfSURNQUNfSU5UX1RJIHwKKwkJCQkJCQlTRE1NQ19JRE1BQ19JTlRfUkkpOworCQkJbWNpX3dyaXRlbChob3N0LCBJRFNUUzY0LCBTRE1NQ19JRE1BQ19JTlRfTkkpOworCQkJaG9zdC0+ZG1hX29wcy0+Y29tcGxldGUoaG9zdCk7CisJCX0KKwl9IGVsc2UgeworCQlwZW5kaW5nID0gbWNpX3JlYWRsKGhvc3QsIElEU1RTKTsKKwkJaWYgKHBlbmRpbmcgJiAoU0RNTUNfSURNQUNfSU5UX1RJIHwgU0RNTUNfSURNQUNfSU5UX1JJKSkgeworCQkJbWNpX3dyaXRlbChob3N0LCBJRFNUUywgU0RNTUNfSURNQUNfSU5UX1RJIHwKKwkJCQkJCQlTRE1NQ19JRE1BQ19JTlRfUkkpOworCQkJbWNpX3dyaXRlbChob3N0LCBJRFNUUywgU0RNTUNfSURNQUNfSU5UX05JKTsKKwkJCWhvc3QtPmRtYV9vcHMtPmNvbXBsZXRlKGhvc3QpOworCQl9CiAJfQogI2VuZGlmCiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIGR3X21jaV93b3JrX3JvdXRpbmVfY2FyZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGR3X21jaSAqaG9zdCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHdfbWNpLCBjYXJkX3dvcmspOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGhvc3QtPm51bV9zbG90czsgaSsrKSB7Ci0JCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IGhvc3QtPnNsb3RbaV07Ci0JCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gc2xvdC0+bW1jOwotCQlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsKLQkJaW50IHByZXNlbnQ7Ci0KLQkJcHJlc2VudCA9IGR3X21jaV9nZXRfY2QobW1jKTsKLQkJd2hpbGUgKHByZXNlbnQgIT0gc2xvdC0+bGFzdF9kZXRlY3Rfc3RhdGUpIHsKLQkJCWRldl9kYmcoJnNsb3QtPm1tYy0+Y2xhc3NfZGV2LCAiY2FyZCAlc1xuIiwKLQkJCQlwcmVzZW50ID8gImluc2VydGVkIiA6ICJyZW1vdmVkIik7Ci0KLQkJCXNwaW5fbG9ja19iaCgmaG9zdC0+bG9jayk7Ci0KLQkJCS8qIENhcmQgY2hhbmdlIGRldGVjdGVkICovCi0JCQlzbG90LT5sYXN0X2RldGVjdF9zdGF0ZSA9IHByZXNlbnQ7Ci0KLQkJCS8qIENsZWFuIHVwIHF1ZXVlIGlmIHByZXNlbnQgKi8KLQkJCW1ycSA9IHNsb3QtPm1ycTsKLQkJCWlmIChtcnEpIHsKLQkJCQlpZiAobXJxID09IGhvc3QtPm1ycSkgewotCQkJCQlob3N0LT5kYXRhID0gTlVMTDsKLQkJCQkJaG9zdC0+Y21kID0gTlVMTDsKLQotCQkJCQlzd2l0Y2ggKGhvc3QtPnN0YXRlKSB7Ci0JCQkJCWNhc2UgU1RBVEVfSURMRToKLQkJCQkJY2FzZSBTVEFURV9XQUlUSU5HX0NNRDExX0RPTkU6Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSBTVEFURV9TRU5ESU5HX0NNRDExOgotCQkJCQljYXNlIFNUQVRFX1NFTkRJTkdfQ01EOgotCQkJCQkJbXJxLT5jbWQtPmVycm9yID0gLUVOT01FRElVTTsKLQkJCQkJCWlmICghbXJxLT5kYXRhKQotCQkJCQkJCWJyZWFrOwotCQkJCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCQkJCWNhc2UgU1RBVEVfU0VORElOR19EQVRBOgotCQkJCQkJbXJxLT5kYXRhLT5lcnJvciA9IC1FTk9NRURJVU07Ci0JCQkJCQlkd19tY2lfc3RvcF9kbWEoaG9zdCk7Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSBTVEFURV9EQVRBX0JVU1k6Ci0JCQkJCWNhc2UgU1RBVEVfREFUQV9FUlJPUjoKLQkJCQkJCWlmIChtcnEtPmRhdGEtPmVycm9yID09IC1FSU5QUk9HUkVTUykKLQkJCQkJCQltcnEtPmRhdGEtPmVycm9yID0gLUVOT01FRElVTTsKLQkJCQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQkJCQljYXNlIFNUQVRFX1NFTkRJTkdfU1RPUDoKLQkJCQkJCWlmIChtcnEtPnN0b3ApCi0JCQkJCQkJbXJxLT5zdG9wLT5lcnJvciA9IC1FTk9NRURJVU07Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCi0JCQkJCWR3X21jaV9yZXF1ZXN0X2VuZChob3N0LCBtcnEpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxpc3RfZGVsKCZzbG90LT5xdWV1ZV9ub2RlKTsKLQkJCQkJbXJxLT5jbWQtPmVycm9yID0gLUVOT01FRElVTTsKLQkJCQkJaWYgKG1ycS0+ZGF0YSkKLQkJCQkJCW1ycS0+ZGF0YS0+ZXJyb3IgPSAtRU5PTUVESVVNOwotCQkJCQlpZiAobXJxLT5zdG9wKQotCQkJCQkJbXJxLT5zdG9wLT5lcnJvciA9IC1FTk9NRURJVU07Ci0KLQkJCQkJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOwotCQkJCQltbWNfcmVxdWVzdF9kb25lKHNsb3QtPm1tYywgbXJxKTsKLQkJCQkJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qIFBvd2VyIGRvd24gc2xvdCAqLwotCQkJaWYgKHByZXNlbnQgPT0gMCkKLQkJCQlkd19tY2lfcmVzZXQoaG9zdCk7Ci0KLQkJCXNwaW5fdW5sb2NrX2JoKCZob3N0LT5sb2NrKTsKLQotCQkJcHJlc2VudCA9IGR3X21jaV9nZXRfY2QobW1jKTsKLQkJfQotCi0JCW1tY19kZXRlY3RfY2hhbmdlKHNsb3QtPm1tYywKLQkJCW1zZWNzX3RvX2ppZmZpZXMoaG9zdC0+cGRhdGEtPmRldGVjdF9kZWxheV9tcykpOwotCX0KLX0KLQogI2lmZGVmIENPTkZJR19PRgogLyogZ2l2ZW4gYSBzbG90IGlkLCBmaW5kIG91dCB0aGUgZGV2aWNlIG5vZGUgcmVwcmVzZW50aW5nIHRoYXQgc2xvdCAqLwogc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHdfbWNpX29mX2ZpbmRfc2xvdF9ub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggc2xvdCkKQEAgLTIyMDYsNiArMjI2MCw3IEBACiAKIAlzbG90ID0gbW1jX3ByaXYobW1jKTsKIAlzbG90LT5pZCA9IGlkOworCXNsb3QtPnNkaW9faWQgPSBob3N0LT5zZGlvX2lkMCArIGlkOwogCXNsb3QtPm1tYyA9IG1tYzsKIAlzbG90LT5ob3N0ID0gaG9zdDsKIAlob3N0LT5zbG90W2lkXSA9IHNsb3Q7CkBAIC0yMjg5LDkgKzIzNDQsNiBAQAogCWR3X21jaV9pbml0X2RlYnVnZnMoc2xvdCk7CiAjZW5kaWYKIAotCS8qIENhcmQgaW5pdGlhbGx5IHVuZGV0ZWN0ZWQgKi8KLQlzbG90LT5sYXN0X2RldGVjdF9zdGF0ZSA9IDA7Ci0KIAlyZXR1cm4gMDsKIAogZXJyX2hvc3RfYWxsb2NhdGVkOgpAQCAtMjMwOSw2ICsyMzYxLDIyIEBACiAKIHN0YXRpYyB2b2lkIGR3X21jaV9pbml0X2RtYShzdHJ1Y3QgZHdfbWNpICpob3N0KQogeworCWludCBhZGRyX2NvbmZpZzsKKwkvKiBDaGVjayBBRERSX0NPTkZJRyBiaXQgaW4gSENPTiB0byBmaW5kIElETUFDIGFkZHJlc3MgYnVzIHdpZHRoICovCisJYWRkcl9jb25maWcgPSAobWNpX3JlYWRsKGhvc3QsIEhDT04pID4+IDI3KSAmIDB4MDE7CisKKwlpZiAoYWRkcl9jb25maWcgPT0gMSkgeworCQkvKiBob3N0IHN1cHBvcnRzIElETUFDIGluIDY0LWJpdCBhZGRyZXNzIG1vZGUgKi8KKwkJaG9zdC0+ZG1hXzY0Yml0X2FkZHJlc3MgPSAxOworCQlkZXZfaW5mbyhob3N0LT5kZXYsICJJRE1BQyBzdXBwb3J0cyA2NC1iaXQgYWRkcmVzcyBtb2RlLlxuIik7CisJCWlmICghZG1hX3NldF9tYXNrKGhvc3QtPmRldiwgRE1BX0JJVF9NQVNLKDY0KSkpCisJCQlkbWFfc2V0X2NvaGVyZW50X21hc2soaG9zdC0+ZGV2LCBETUFfQklUX01BU0soNjQpKTsKKwl9IGVsc2UgeworCQkvKiBob3N0IHN1cHBvcnRzIElETUFDIGluIDMyLWJpdCBhZGRyZXNzIG1vZGUgKi8KKwkJaG9zdC0+ZG1hXzY0Yml0X2FkZHJlc3MgPSAwOworCQlkZXZfaW5mbyhob3N0LT5kZXYsICJJRE1BQyBzdXBwb3J0cyAzMi1iaXQgYWRkcmVzcyBtb2RlLlxuIik7CisJfQorCiAJLyogQWxsb2MgbWVtb3J5IGZvciBzZyB0cmFuc2xhdGlvbiAqLwogCWhvc3QtPnNnX2NwdSA9IGRtYW1fYWxsb2NfY29oZXJlbnQoaG9zdC0+ZGV2LCBQQUdFX1NJWkUsCiAJCQkJCSAgJmhvc3QtPnNnX2RtYSwgR0ZQX0tFUk5FTCk7CkBAIC0yNjcyLDE3ICsyNzQwLDEwIEBACiAJCWhvc3QtPmRhdGFfb2Zmc2V0ID0gREFUQV8yNDBBX09GRlNFVDsKIAogCXRhc2tsZXRfaW5pdCgmaG9zdC0+dGFza2xldCwgZHdfbWNpX3Rhc2tsZXRfZnVuYywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7Ci0JaG9zdC0+Y2FyZF93b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImR3LW1jaS1jYXJkIiwKLQkJCVdRX01FTV9SRUNMQUlNLCAxKTsKLQlpZiAoIWhvc3QtPmNhcmRfd29ya3F1ZXVlKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2RtYXVubWFwOwotCX0KLQlJTklUX1dPUksoJmhvc3QtPmNhcmRfd29yaywgZHdfbWNpX3dvcmtfcm91dGluZV9jYXJkKTsKIAlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGhvc3QtPmRldiwgaG9zdC0+aXJxLCBkd19tY2lfaW50ZXJydXB0LAogCQkJICAgICAgIGhvc3QtPmlycV9mbGFncywgImR3LW1jaSIsIGhvc3QpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyX3dvcmtxdWV1ZTsKKwkJZ290byBlcnJfZG1hdW5tYXA7CiAKIAlpZiAoaG9zdC0+cGRhdGEtPm51bV9zbG90cykKIAkJaG9zdC0+bnVtX3Nsb3RzID0gaG9zdC0+cGRhdGEtPm51bV9zbG90czsKQEAgLTI3MTgsNyArMjc3OSw3IEBACiAJfSBlbHNlIHsKIAkJZGV2X2RiZyhob3N0LT5kZXYsICJhdHRlbXB0ZWQgdG8gaW5pdGlhbGl6ZSAlZCBzbG90cywgIgogCQkJCQkiYnV0IGZhaWxlZCBvbiBhbGxcbiIsIGhvc3QtPm51bV9zbG90cyk7Ci0JCWdvdG8gZXJyX3dvcmtxdWV1ZTsKKwkJZ290byBlcnJfZG1hdW5tYXA7CiAJfQogCiAJaWYgKGhvc3QtPnF1aXJrcyAmIERXX01DSV9RVUlSS19JRE1BQ19EVE8pCkBAIC0yNzI2LDkgKzI3ODcsNiBAQAogCiAJcmV0dXJuIDA7CiAKLWVycl93b3JrcXVldWU6Ci0JZGVzdHJveV93b3JrcXVldWUoaG9zdC0+Y2FyZF93b3JrcXVldWUpOwotCiBlcnJfZG1hdW5tYXA6CiAJaWYgKGhvc3QtPnVzZV9kbWEgJiYgaG9zdC0+ZG1hX29wcy0+ZXhpdCkKIAkJaG9zdC0+ZG1hX29wcy0+ZXhpdChob3N0KTsKQEAgLTI3NjIsOCArMjgyMCw2IEBACiAJbWNpX3dyaXRlbChob3N0LCBDTEtFTkEsIDApOwogCW1jaV93cml0ZWwoaG9zdCwgQ0xLU1JDLCAwKTsKIAotCWRlc3Ryb3lfd29ya3F1ZXVlKGhvc3QtPmNhcmRfd29ya3F1ZXVlKTsKLQogCWlmIChob3N0LT51c2VfZG1hICYmIGhvc3QtPmRtYV9vcHMtPmV4aXQpCiAJCWhvc3QtPmRtYV9vcHMtPmV4aXQoaG9zdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmggYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oCmluZGV4IDAxYjk5ZTguLjBkMGY3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaApAQCAtNTUsNiArNTUsMTcgQEAKICNkZWZpbmUgU0RNTUNfQlVGQUREUgkJMHgwOTgKICNkZWZpbmUgU0RNTUNfQ0RUSFJDVEwJCTB4MTAwCiAjZGVmaW5lIFNETU1DX0RBVEEoeCkJCSh4KQorLyoKKyogUmVnaXN0ZXJzIHRvIHN1cHBvcnQgaWRtYWMgNjQtYml0IGFkZHJlc3MgbW9kZQorKi8KKyNkZWZpbmUgU0RNTUNfREJBRERSTAkJMHgwODgKKyNkZWZpbmUgU0RNTUNfREJBRERSVQkJMHgwOGMKKyNkZWZpbmUgU0RNTUNfSURTVFM2NAkJMHgwOTAKKyNkZWZpbmUgU0RNTUNfSURJTlRFTjY0CQkweDA5NAorI2RlZmluZSBTRE1NQ19EU0NBRERSTAkJMHgwOTgKKyNkZWZpbmUgU0RNTUNfRFNDQUREUlUJCTB4MDljCisjZGVmaW5lIFNETU1DX0JVRkFERFJMCQkweDBBMAorI2RlZmluZSBTRE1NQ19CVUZBRERSVQkJMHgwQTQKIAogLyoKICAqIERhdGEgb2Zmc2V0IGlzIGRpZmZlcmVuY2UgYWNjb3JkaW5nIHRvIFZlcnNpb24KQEAgLTIxNCw3ICsyMjUsNyBAQAogICoJd2l0aCBDT05GSUdfTU1DX0NMS0dBVEUuCiAgKiBAZmxhZ3M6IFJhbmRvbSBzdGF0ZSBiaXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2xvdC4KICAqIEBpZDogTnVtYmVyIG9mIHRoaXMgc2xvdC4KLSAqIEBsYXN0X2RldGVjdF9zdGF0ZTogTW9zdCByZWNlbnRseSBvYnNlcnZlZCBjYXJkIGRldGVjdCBzdGF0ZS4KKyAqIEBzZGlvX2lkOiBOdW1iZXIgb2YgdGhpcyBzbG90IGluIHRoZSBTRElPIGludGVycnVwdCByZWdpc3RlcnMuCiAgKi8KIHN0cnVjdCBkd19tY2lfc2xvdCB7CiAJc3RydWN0IG1tY19ob3N0CQkqbW1jOwpAQCAtMjM0LDcgKzI0NSw3IEBACiAjZGVmaW5lIERXX01NQ19DQVJEX1BSRVNFTlQJMAogI2RlZmluZSBEV19NTUNfQ0FSRF9ORUVEX0lOSVQJMQogCWludAkJCWlkOwotCWludAkJCWxhc3RfZGV0ZWN0X3N0YXRlOworCWludAkJCXNkaW9faWQ7CiB9OwogCiBzdHJ1Y3QgZHdfbWNpX3R1bmluZ19kYXRhIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKaW5kZXggNDNhZjc5MS4uNTNiZjdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKQEAgLTczNiw4ICs3MzYsMTUgQEAKIAkJCWNoYW4gPSBob3N0LT5kbWFfdHhfY2hhbm5lbDsKIAkJZG1hZW5naW5lX3Rlcm1pbmF0ZV9hbGwoY2hhbik7CiAKKwkJaWYgKGhvc3QtPmRtYV9kZXNjX2N1cnJlbnQgPT0gbmV4dC0+ZG1hX2Rlc2MpCisJCQlob3N0LT5kbWFfZGVzY19jdXJyZW50ID0gTlVMTDsKKworCQlpZiAoaG9zdC0+ZG1hX2N1cnJlbnQgPT0gbmV4dC0+ZG1hX2NoYW4pCisJCQlob3N0LT5kbWFfY3VycmVudCA9IE5VTEw7CisKIAkJbmV4dC0+ZG1hX2Rlc2MgPSBOVUxMOwogCQluZXh0LT5kbWFfY2hhbiA9IE5VTEw7CisJCWRhdGEtPmhvc3RfY29va2llID0gMDsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYwppbmRleCA5NDA1ZWNkLi45MGM2MGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCkBAIC0xMzYwLDcgKzEzNjAsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gY21kX2lycV9mcmVlOwogCi0JbW1jX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKIAltbWNfYWRkX2hvc3QobW1jKTsKIAogCXByX2luZm8oIiVzOiBRdWFsY29tbSBNU00gU0RDQyBhdCAweCUwMTZsbHggaXJxICVkLCVkIGRtYSAlZFxuIiwKQEAgLTE0MTksNyArMTQxOSw3IEBACiBzdGF0aWMgaW50CiBtc21zZGNjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBtbWNfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobW1jKSB7CiAJCXN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwpAQCAtMTQzNyw3ICsxNDM3LDcgQEAKIHN0YXRpYyBpbnQKIG1zbXNkY2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IG1tY19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChtbWMpIHsKIAkJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5jIGIvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uYwppbmRleCA2YjRjNWFkMy4uNGY4NjE4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uYworKysgYi9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5jCkBAIC0xMTEsMTAgKzExMSwxNSBAQAogCW12c2Rfd3JpdGUoTVZTRF9CTEtfQ09VTlQsIGRhdGEtPmJsb2Nrcyk7CiAJbXZzZF93cml0ZShNVlNEX0JMS19TSVpFLCBkYXRhLT5ibGtzeik7CiAKLQlpZiAobm9kbWEgfHwgKGRhdGEtPmJsa3N6IHwgZGF0YS0+c2ctPm9mZnNldCkgJiAzKSB7CisJaWYgKG5vZG1hIHx8IChkYXRhLT5ibGtzeiB8IGRhdGEtPnNnLT5vZmZzZXQpICYgMyB8fAorCSAgICAoKCEoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSAmJiBkYXRhLT5zZy0+b2Zmc2V0ICYgMHgzZikpKSB7CiAJCS8qCiAJCSAqIFdlIGNhbm5vdCBkbyBETUEgb24gYSBidWZmZXIgd2hpY2ggb2Zmc2V0IG9yIHNpemUKIAkJICogaXMgbm90IGFsaWduZWQgb24gYSA0LWJ5dGUgYm91bmRhcnkuCisJCSAqCisJCSAqIEl0IGFsc28gYXBwZWFycyB0aGUgaG9zdCB0byBjYXJkIERNQSBjYW4gY29ycnVwdAorCQkgKiBkYXRhIHdoZW4gdGhlIGJ1ZmZlciBpcyBub3QgYWxpZ25lZCBvbiBhIDY0IGJ5dGUKKwkJICogYm91bmRhcnkuCiAJCSAqLwogCQlob3N0LT5waW9fc2l6ZSA9IGRhdGEtPmJsb2NrcyAqIGRhdGEtPmJsa3N6OwogCQlob3N0LT5waW9fcHRyID0gc2dfdmlydChkYXRhLT5zZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwppbmRleCBhZDExMTQyLi41MzE2ZDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKQEAgLTM3MywxMyArMzczLDkgQEAKIAlkZWxfdGltZXIoJmhvc3QtPndhdGNoZG9nKTsKIAogCXN0YXQgPSBteGNtY2lfcmVhZGwoaG9zdCwgTU1DX1JFR19TVEFUVVMpOwotCW14Y21jaV93cml0ZWwoaG9zdCwgc3RhdCAmIH5TVEFUVVNfREFUQV9UUkFOU19ET05FLCBNTUNfUkVHX1NUQVRVUyk7CiAKIAlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIiVzOiAweCUwOHhcbiIsIF9fZnVuY19fLCBzdGF0KTsKIAotCWlmIChzdGF0ICYgU1RBVFVTX1JFQURfT1BfRE9ORSkKLQkJbXhjbWNpX3dyaXRlbChob3N0LCBTVEFUVVNfUkVBRF9PUF9ET05FLCBNTUNfUkVHX1NUQVRVUyk7Ci0KIAlteGNtY2lfZGF0YV9kb25lKGhvc3QsIHN0YXQpOwogfQogCkBAIC03NDMsMTAgKzczOSw4IEBACiAJc2Rpb19pcnEgPSAoc3RhdCAmIFNUQVRVU19TRElPX0lOVF9BQ1RJVkUpICYmIGhvc3QtPnVzZV9zZGlvOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChteGNtY2lfdXNlX2RtYShob3N0KSAmJgotCSAgICAoc3RhdCAmIChTVEFUVVNfUkVBRF9PUF9ET05FIHwgU1RBVFVTX1dSSVRFX09QX0RPTkUpKSkKLQkJbXhjbWNpX3dyaXRlbChob3N0LCBTVEFUVVNfUkVBRF9PUF9ET05FIHwgU1RBVFVTX1dSSVRFX09QX0RPTkUsCi0JCQlNTUNfUkVHX1NUQVRVUyk7CisJaWYgKG14Y21jaV91c2VfZG1hKGhvc3QpICYmIChzdGF0ICYgKFNUQVRVU19XUklURV9PUF9ET05FKSkpCisJCW14Y21jaV93cml0ZWwoaG9zdCwgU1RBVFVTX1dSSVRFX09QX0RPTkUsIE1NQ19SRUdfU1RBVFVTKTsKIAogCWlmIChzZGlvX2lycSkgewogCQlteGNtY2lfd3JpdGVsKGhvc3QsIFNUQVRVU19TRElPX0lOVF9BQ1RJVkUsIE1NQ19SRUdfU1RBVFVTKTsKQEAgLTc1Niw4ICs3NTAsNyBAQAogCWlmIChzdGF0ICYgU1RBVFVTX0VORF9DTURfUkVTUCkKIAkJbXhjbWNpX2NtZF9kb25lKGhvc3QsIHN0YXQpOwogCi0JaWYgKG14Y21jaV91c2VfZG1hKGhvc3QpICYmCi0JCSAgKHN0YXQgJiAoU1RBVFVTX0RBVEFfVFJBTlNfRE9ORSB8IFNUQVRVU19XUklURV9PUF9ET05FKSkpIHsKKwlpZiAobXhjbWNpX3VzZV9kbWEoaG9zdCkgJiYgKHN0YXQgJiBTVEFUVVNfV1JJVEVfT1BfRE9ORSkpIHsKIAkJZGVsX3RpbWVyKCZob3N0LT53YXRjaGRvZyk7CiAJCW14Y21jaV9kYXRhX2RvbmUoaG9zdCwgc3RhdCk7CiAJfQpAQCAtMTA4NCwxMiArMTA3NywxNCBAQAogCQlkYXQzX2NhcmRfZGV0ZWN0ID0gdHJ1ZTsKIAogCXJldCA9IG1tY19yZWd1bGF0b3JfZ2V0X3N1cHBseShtbWMpOwotCWlmIChyZXQpIHsKLQkJaWYgKHBkYXRhICYmIHJldCAhPSAtRVBST0JFX0RFRkVSKQotCQkJbW1jLT5vY3JfYXZhaWwgPSBwZGF0YS0+b2NyX2F2YWlsID8gOgotCQkJCU1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCWlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikKKwkJZ290byBvdXRfZnJlZTsKKworCWlmICghbW1jLT5vY3JfYXZhaWwpIHsKKwkJaWYgKHBkYXRhICYmIHBkYXRhLT5vY3JfYXZhaWwpCisJCQltbWMtPm9jcl9hdmFpbCA9IHBkYXRhLT5vY3JfYXZhaWw7CiAJCWVsc2UKLQkJCWdvdG8gb3V0X2ZyZWU7CisJCQltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OwogCX0KIAogCWlmIChkYXQzX2NhcmRfZGV0ZWN0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9teHMtbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L214cy1tbWMuYwppbmRleCBjZDc0ZTUxLi42MGM0Y2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L214cy1tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L214cy1tbWMuYwpAQCAtNTgxLDEwICs1ODEsOSBAQAogCXN0cnVjdCByZWd1bGF0b3IgKnJlZ192bW1jOwogCXN0cnVjdCBteHNfc3NwICpzc3A7CiAKLQlpb3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaXJxX2VyciA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKCFpb3JlcyB8fCBpcnFfZXJyIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGlycV9lcnIgPCAwKQorCQlyZXR1cm4gaXJxX2VycjsKIAogCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgbXhzX21tY19ob3N0KSwgJnBkZXYtPmRldik7CiAJaWYgKCFtbWMpCkBAIC01OTMsNiArNTkyLDcgQEAKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlzc3AgPSAmaG9zdC0+c3NwOwogCXNzcC0+ZGV2ID0gJnBkZXYtPmRldjsKKwlpb3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJc3NwLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIGlvcmVzKTsKIAlpZiAoSVNfRVJSKHNzcC0+YmFzZSkpIHsKIAkJcmV0ID0gUFRSX0VSUihzc3AtPmJhc2UpOwpAQCAtNjE5LDcgKzYxOSw5IEBACiAJCXJldCA9IFBUUl9FUlIoc3NwLT5jbGspOwogCQlnb3RvIG91dF9tbWNfZnJlZTsKIAl9Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKHNzcC0+Y2xrKTsKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoc3NwLT5jbGspOworCWlmIChyZXQpCisJCWdvdG8gb3V0X21tY19mcmVlOwogCiAJcmV0ID0gbXhzX21tY19yZXNldChob3N0KTsKIAlpZiAocmV0KSB7CkBAIC02NjAsNyArNjYyLDcgQEAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtbWMpOwogCiAJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnFfZXJyLCBteHNfbW1jX2lycV9oYW5kbGVyLCAwLAotCQkJICAgICAgIERSSVZFUl9OQU1FLCBob3N0KTsKKwkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgaG9zdCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZV9kbWE7CiAKQEAgLTcwMiw3ICs3MDQsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IG14c19tbWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTcxOSwyNSArNzIxLDE5IEBACiAJc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJc3RydWN0IG14c19zc3AgKnNzcCA9ICZob3N0LT5zc3A7CiAKLQljbGtfcHJlcGFyZV9lbmFibGUoc3NwLT5jbGspOwotCXJldHVybiAwOworCXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUoc3NwLT5jbGspOwogfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbXhzX21tY19wbV9vcHMgPSB7Ci0JLnN1c3BlbmQJPSBteHNfbW1jX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBteHNfbW1jX3Jlc3VtZSwKLX07CiAjZW5kaWYKIAorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG14c19tbWNfcG1fb3BzLCBteHNfbW1jX3N1c3BlbmQsIG14c19tbWNfcmVzdW1lKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXhzX21tY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG14c19tbWNfcHJvYmUsCiAJLnJlbW92ZQkJPSBteHNfbW1jX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBteHNfc3NwX2lkcywKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKLSNpZmRlZiBDT05GSUdfUE0KIAkJLnBtCT0gJm14c19tbWNfcG1fb3BzLAotI2VuZGlmCiAJCS5vZl9tYXRjaF90YWJsZSA9IG14c19tbWNfZHRfaWRzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwppbmRleCBkZjI3YmI0Li43YzcxZGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tbWMtb21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oPgogCiAvKiBPTUFQIEhTTU1DIEhvc3QgQ29udHJvbGxlciBSZWdpc3RlcnMgKi8KICNkZWZpbmUgT01BUF9IU01NQ19TWVNTVEFUVVMJMHgwMDE0CkBAIC0xNTUsNyArMTU1LDcgQEAKICAqIG9tYXAuYyBjb250cm9sbGVyIGRyaXZlci4gTHVja2lseSB0aGlzIGlzIG5vdCBjdXJyZW50bHkgZG9uZSBvbiBhbnkga25vd24KICAqIG9tYXBfaHNtbWMuYyBkZXZpY2UuCiAgKi8KLSNkZWZpbmUgbW1jX3Nsb3QoaG9zdCkJCShob3N0LT5wZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF0pCisjZGVmaW5lIG1tY19wZGF0YShob3N0KQkJaG9zdC0+cGRhdGEKIAogLyoKICAqIE1NQyBIb3N0IGNvbnRyb2xsZXIgcmVhZC93cml0ZSBBUEkncwpAQCAtMjA3LDcgKzIwNyw2IEBACiAJaW50CQkJdXNlX2RtYSwgZG1hX2NoOwogCXN0cnVjdCBkbWFfY2hhbgkJKnR4X2NoYW47CiAJc3RydWN0IGRtYV9jaGFuCQkqcnhfY2hhbjsKLQlpbnQJCQlzbG90X2lkOwogCWludAkJCXJlc3BvbnNlX2J1c3k7CiAJaW50CQkJY29udGV4dF9sb3NzOwogCWludAkJCXByb3RlY3RfY2FyZDsKQEAgLTIyMCw3ICsyMTksMjYgQEAKICNkZWZpbmUgSFNNTUNfU0RJT19JUlFfRU5BQkxFRAkoMSA8PCAxKSAgICAgICAgLyogU0RJTyBpcnEgZW5hYmxlZCAqLwogI2RlZmluZSBIU01NQ19XQUtFX0lSUV9FTkFCTEVECSgxIDw8IDIpCiAJc3RydWN0IG9tYXBfaHNtbWNfbmV4dAluZXh0X2RhdGE7Ci0Jc3RydWN0CW9tYXBfbW1jX3BsYXRmb3JtX2RhdGEJKnBkYXRhOworCXN0cnVjdAlvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEJKnBkYXRhOworCisJLyogVG8gaGFuZGxlIGJvYXJkIHJlbGF0ZWQgc3VzcGVuZC9yZXN1bWUgZnVuY3Rpb25hbGl0eSBmb3IgTU1DICovCisJaW50ICgqc3VzcGVuZCkoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKwkvKiByZXR1cm4gTU1DIGNvdmVyIHN3aXRjaCBzdGF0ZSwgY2FuIGJlIE5VTEwgaWYgbm90IHN1cHBvcnRlZC4KKwkgKgorCSAqIHBvc3NpYmxlIHJldHVybiB2YWx1ZXM6CisJICogICAwIC0gY2xvc2VkCisJICogICAxIC0gb3BlbgorCSAqLworCWludCAoKmdldF9jb3Zlcl9zdGF0ZSkoc3RydWN0IGRldmljZSAqZGV2KTsKKworCS8qIENhcmQgZGV0ZWN0aW9uIElSUXMgKi8KKwlpbnQgY2FyZF9kZXRlY3RfaXJxOworCisJaW50ICgqY2FyZF9kZXRlY3QpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50ICgqZ2V0X3JvKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCiB9OwogCiBzdHJ1Y3Qgb21hcF9tbWNfb2ZfZGF0YSB7CkBAIC0yMzAsNTAgKzI0OCw0OCBAQAogCiBzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX3N0YXJ0X2RtYV90cmFuc2ZlcihzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KTsKIAotc3RhdGljIGludCBvbWFwX2hzbW1jX2NhcmRfZGV0ZWN0KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfY2FyZF9kZXRlY3Qoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaG9zdC0+cGRhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaG9zdC0+cGRhdGE7CiAKIAkvKiBOT1RFOiBhc3N1bWVzIGNhcmQgZGV0ZWN0IHNpZ25hbCBpcyBhY3RpdmUtbG93ICovCi0JcmV0dXJuICFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4pOworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zd2l0Y2hfcGluKTsKIH0KIAotc3RhdGljIGludCBvbWFwX2hzbW1jX2dldF93cChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQorc3RhdGljIGludCBvbWFwX2hzbW1jX2dldF93cChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBob3N0LT5wZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBob3N0LT5wZGF0YTsKIAogCS8qIE5PVEU6IGFzc3VtZXMgd3JpdGUgcHJvdGVjdCBzaWduYWwgaXMgYWN0aXZlLWhpZ2ggKi8KLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zbG90c1swXS5ncGlvX3dwKTsKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5ncGlvX3dwKTsKIH0KIAotc3RhdGljIGludCBvbWFwX2hzbW1jX2dldF9jb3Zlcl9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQorc3RhdGljIGludCBvbWFwX2hzbW1jX2dldF9jb3Zlcl9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBob3N0LT5wZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBob3N0LT5wZGF0YTsKIAogCS8qIE5PVEU6IGFzc3VtZXMgY2FyZCBkZXRlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1sb3cgKi8KLQlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnN3aXRjaF9waW4pOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgb21hcF9oc21tY19zdXNwZW5kX2NkaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfc3VzcGVuZF9jZGlycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBob3N0LT5wZGF0YTsKIAotCWRpc2FibGVfaXJxKG1tYy0+c2xvdHNbMF0uY2FyZF9kZXRlY3RfaXJxKTsKKwlkaXNhYmxlX2lycShob3N0LT5jYXJkX2RldGVjdF9pcnEpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfcmVzdW1lX2NkaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfcmVzdW1lX2NkaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhvc3QtPnBkYXRhOwogCi0JZW5hYmxlX2lycShtbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSk7CisJZW5hYmxlX2lycShob3N0LT5jYXJkX2RldGVjdF9pcnEpOwogCXJldHVybiAwOwogfQogCkBAIC0yODYsOCArMzAyLDcgQEAKIAogI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKIAotc3RhdGljIGludCBvbWFwX2hzbW1jX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCi0JCQkJICAgaW50IHZkZCkKK3N0YXRpYyBpbnQgb21hcF9oc21tY19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcG93ZXJfb24sIGludCB2ZGQpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9CiAJCXBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKQEAgLTMwMCw4ICszMTUsOCBAQAogCWlmICghaG9zdC0+dmNjKQogCQlyZXR1cm4gMDsKIAotCWlmIChtbWNfc2xvdChob3N0KS5iZWZvcmVfc2V0X3JlZykKLQkJbW1jX3Nsb3QoaG9zdCkuYmVmb3JlX3NldF9yZWcoZGV2LCBzbG90LCBwb3dlcl9vbiwgdmRkKTsKKwlpZiAobW1jX3BkYXRhKGhvc3QpLT5iZWZvcmVfc2V0X3JlZykKKwkJbW1jX3BkYXRhKGhvc3QpLT5iZWZvcmVfc2V0X3JlZyhkZXYsIHBvd2VyX29uLCB2ZGQpOwogCiAJaWYgKGhvc3QtPnBiaWFzKSB7CiAJCWlmIChob3N0LT5wYmlhc19lbmFibGVkID09IDEpIHsKQEAgLTM2Myw4ICszNzgsOCBAQAogCQl9CiAJfQogCi0JaWYgKG1tY19zbG90KGhvc3QpLmFmdGVyX3NldF9yZWcpCi0JCW1tY19zbG90KGhvc3QpLmFmdGVyX3NldF9yZWcoZGV2LCBzbG90LCBwb3dlcl9vbiwgdmRkKTsKKwlpZiAobW1jX3BkYXRhKGhvc3QpLT5hZnRlcl9zZXRfcmVnKQorCQltbWNfcGRhdGEoaG9zdCktPmFmdGVyX3NldF9yZWcoZGV2LCBwb3dlcl9vbiwgdmRkKTsKIAogZXJyb3Jfc2V0X3Bvd2VyOgogCXJldHVybiByZXQ7CkBAIC0zODMsMTggKzM5OCwxOCBAQAogCX0gZWxzZSB7CiAJCWhvc3QtPnZjYyA9IHJlZzsKIAkJb2NyX3ZhbHVlID0gbW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayhyZWcpOwotCQlpZiAoIW1tY19zbG90KGhvc3QpLm9jcl9tYXNrKSB7Ci0JCQltbWNfc2xvdChob3N0KS5vY3JfbWFzayA9IG9jcl92YWx1ZTsKKwkJaWYgKCFtbWNfcGRhdGEoaG9zdCktPm9jcl9tYXNrKSB7CisJCQltbWNfcGRhdGEoaG9zdCktPm9jcl9tYXNrID0gb2NyX3ZhbHVlOwogCQl9IGVsc2UgewotCQkJaWYgKCEobW1jX3Nsb3QoaG9zdCkub2NyX21hc2sgJiBvY3JfdmFsdWUpKSB7CisJCQlpZiAoIShtbWNfcGRhdGEoaG9zdCktPm9jcl9tYXNrICYgb2NyX3ZhbHVlKSkgewogCQkJCWRldl9lcnIoaG9zdC0+ZGV2LCAib2NybWFzayAleCBpcyBub3Qgc3VwcG9ydGVkXG4iLAotCQkJCQltbWNfc2xvdChob3N0KS5vY3JfbWFzayk7Ci0JCQkJbW1jX3Nsb3QoaG9zdCkub2NyX21hc2sgPSAwOworCQkJCQltbWNfcGRhdGEoaG9zdCktPm9jcl9tYXNrKTsKKwkJCQltbWNfcGRhdGEoaG9zdCktPm9jcl9tYXNrID0gMDsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQogCX0KLQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIgPSBvbWFwX2hzbW1jX3NldF9wb3dlcjsKKwltbWNfcGRhdGEoaG9zdCktPnNldF9wb3dlciA9IG9tYXBfaHNtbWNfc2V0X3Bvd2VyOwogCiAJLyogQWxsb3cgYW4gYXV4IHJlZ3VsYXRvciAqLwogCXJlZyA9IGRldm1fcmVndWxhdG9yX2dldF9vcHRpb25hbChob3N0LT5kZXYsICJ2bW1jX2F1eCIpOwpAQCAtNDA0LDcgKzQxOSw3IEBACiAJaG9zdC0+cGJpYXMgPSBJU19FUlIocmVnKSA/IE5VTEwgOiByZWc7CiAKIAkvKiBGb3IgZU1NQyBkbyBub3QgcG93ZXIgb2ZmIHdoZW4gbm90IGluIHNsZWVwIHN0YXRlICovCi0JaWYgKG1tY19zbG90KGhvc3QpLm5vX3JlZ3VsYXRvcl9vZmZfaW5pdCkKKwlpZiAobW1jX3BkYXRhKGhvc3QpLT5ub19yZWd1bGF0b3Jfb2ZmX2luaXQpCiAJCXJldHVybiAwOwogCS8qCiAJICogVG8gZGlzYWJsZSBib290X29uIHJlZ3VsYXRvciwgZW5hYmxlIHJlZ3VsYXRvcgpAQCAtNDEyLDEwICs0MjcsMTAgQEAKIAkgKi8KIAlpZiAoKGhvc3QtPnZjYyAmJiByZWd1bGF0b3JfaXNfZW5hYmxlZChob3N0LT52Y2MpID4gMCkgfHwKIAkgICAgKGhvc3QtPnZjY19hdXggJiYgcmVndWxhdG9yX2lzX2VuYWJsZWQoaG9zdC0+dmNjX2F1eCkpKSB7Ci0JCWludCB2ZGQgPSBmZnMobW1jX3Nsb3QoaG9zdCkub2NyX21hc2spIC0gMTsKKwkJaW50IHZkZCA9IGZmcyhtbWNfcGRhdGEoaG9zdCktPm9jcl9tYXNrKSAtIDE7CiAKLQkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMSwgdmRkKTsKLQkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMCwgMCk7CisJCW1tY19wZGF0YShob3N0KS0+c2V0X3Bvd2VyKGhvc3QtPmRldiwgMSwgdmRkKTsKKwkJbW1jX3BkYXRhKGhvc3QpLT5zZXRfcG93ZXIoaG9zdC0+ZGV2LCAwLCAwKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQyMyw3ICs0MzgsNyBAQAogCiBzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX3JlZ19wdXQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKIHsKLQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIgPSBOVUxMOworCW1tY19wZGF0YShob3N0KS0+c2V0X3Bvd2VyID0gTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgb21hcF9oc21tY19oYXZlX3JlZyh2b2lkKQpAQCAtNDQ5LDU1ICs0NjQsNTkgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgb21hcF9oc21tY19ncGlvX2luaXQoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQorc3RhdGljIGludCBvbWFwX2hzbW1jX2dwaW9faW5pdChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LAorCQkJCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQogewogCWludCByZXQ7CiAKLQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3BpbikpIHsKLQkJaWYgKHBkYXRhLT5zbG90c1swXS5jb3ZlcikKLQkJCXBkYXRhLT5zbG90c1swXS5nZXRfY292ZXJfc3RhdGUgPQotCQkJCQlvbWFwX2hzbW1jX2dldF9jb3Zlcl9zdGF0ZTsKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c3dpdGNoX3BpbikpIHsKKwkJaWYgKHBkYXRhLT5jb3ZlcikKKwkJCWhvc3QtPmdldF9jb3Zlcl9zdGF0ZSA9CisJCQkJb21hcF9oc21tY19nZXRfY292ZXJfc3RhdGU7CiAJCWVsc2UKLQkJCXBkYXRhLT5zbG90c1swXS5jYXJkX2RldGVjdCA9IG9tYXBfaHNtbWNfY2FyZF9kZXRlY3Q7Ci0JCXBkYXRhLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEgPQotCQkJCWdwaW9fdG9faXJxKHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluLCAibW1jX2NkIik7CisJCQlob3N0LT5jYXJkX2RldGVjdCA9IG9tYXBfaHNtbWNfY2FyZF9kZXRlY3Q7CisJCWhvc3QtPmNhcmRfZGV0ZWN0X2lycSA9CisJCQkJZ3Bpb190b19pcnEocGRhdGEtPnN3aXRjaF9waW4pOworCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPnN3aXRjaF9waW4sICJtbWNfY2QiKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPnN3aXRjaF9waW4pOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfZnJlZV9zcDsKLQl9IGVsc2UKLQkJcGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXBkYXRhLT5zd2l0Y2hfcGluID0gLUVJTlZBTDsKKwl9CiAKLQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCkpIHsKLQkJcGRhdGEtPnNsb3RzWzBdLmdldF9ybyA9IG9tYXBfaHNtbWNfZ2V0X3dwOwotCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPnNsb3RzWzBdLmdwaW9fd3AsICJtbWNfd3AiKTsKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb193cCkpIHsKKwkJaG9zdC0+Z2V0X3JvID0gb21hcF9oc21tY19nZXRfd3A7CisJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb193cCwgIm1tY193cCIpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfZnJlZV9jZDsKLQkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPnNsb3RzWzBdLmdwaW9fd3ApOworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChwZGF0YS0+Z3Bpb193cCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycl9mcmVlX3dwOwotCX0gZWxzZQotCQlwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcGRhdGEtPmdwaW9fd3AgPSAtRUlOVkFMOworCX0KIAogCXJldHVybiAwOwogCiBlcnJfZnJlZV93cDoKLQlncGlvX2ZyZWUocGRhdGEtPnNsb3RzWzBdLmdwaW9fd3ApOworCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb193cCk7CiBlcnJfZnJlZV9jZDoKLQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3BpbikpCisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnN3aXRjaF9waW4pKQogZXJyX2ZyZWVfc3A6Ci0JCWdwaW9fZnJlZShwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7CisJCWdwaW9fZnJlZShwZGF0YS0+c3dpdGNoX3Bpbik7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgb21hcF9oc21tY19ncGlvX2ZyZWUoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQorc3RhdGljIHZvaWQgb21hcF9oc21tY19ncGlvX2ZyZWUoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwKKwkJCQkgc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7Ci0JaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnNsb3RzWzBdLmdwaW9fd3ApKQotCQlncGlvX2ZyZWUocGRhdGEtPnNsb3RzWzBdLmdwaW9fd3ApOwotCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluKSkKLQkJZ3Bpb19mcmVlKHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb193cCkpCisJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb193cCk7CisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnN3aXRjaF9waW4pKQorCQlncGlvX2ZyZWUocGRhdGEtPnN3aXRjaF9waW4pOwogfQogCiAvKgpAQCAtNjA3LDggKzYyNiw5IEBACiAJICoJICBpbiBjYXBhYmlsaXRpZXMgcmVnaXN0ZXIKIAkgKgktIE1NQy9TRCBjbG9jayBjb21pbmcgb3V0IG9mIGNvbnRyb2xsZXIgPiAyNU1IegogCSAqLwotCWlmICgobW1jX3Nsb3QoaG9zdCkuZmVhdHVyZXMgJiBIU01NQ19IQVNfSFNQRV9TVVBQT1JUKSAmJgorCWlmICgobW1jX3BkYXRhKGhvc3QpLT5mZWF0dXJlcyAmIEhTTU1DX0hBU19IU1BFX1NVUFBPUlQpICYmCiAJICAgIChpb3MtPnRpbWluZyAhPSBNTUNfVElNSU5HX01NQ19ERFI1MikgJiYKKwkgICAgKGlvcy0+dGltaW5nICE9IE1NQ19USU1JTkdfVUhTX0REUjUwKSAmJgogCSAgICAoKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBDQVBBKSAmIEhTUykgPT0gSFNTKSkgewogCQlyZWd2YWwgPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCk7CiAJCWlmIChjbGtkaXYgJiYgKGNsa19nZXRfcmF0ZShob3N0LT5mY2xrKS9jbGtkaXYpID4gMjUwMDAwMDApCkBAIC02MjgsNyArNjQ4LDggQEAKIAl1MzIgY29uOwogCiAJY29uID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENPTik7Ci0JaWYgKGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfTU1DX0REUjUyKQorCWlmIChpb3MtPnRpbWluZyA9PSBNTUNfVElNSU5HX01NQ19ERFI1MiB8fAorCSAgICBpb3MtPnRpbWluZyA9PSBNTUNfVElNSU5HX1VIU19ERFI1MCkKIAkJY29uIHw9IEREUjsJLyogY29uZmlndXJlIGluIEREUiBtb2RlICovCiAJZWxzZQogCQljb24gJj0gfkREUjsKQEAgLTc5MSw4ICs4MTIsOCBAQAogewogCWludCByID0gMTsKIAotCWlmIChtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUpCi0JCXIgPSBtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkKTsKKwlpZiAoaG9zdC0+Z2V0X2NvdmVyX3N0YXRlKQorCQlyID0gaG9zdC0+Z2V0X2NvdmVyX3N0YXRlKGhvc3QtPmRldik7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTgxNiw3ICs4MzcsNyBAQAogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1tY19ob3N0LCBjbGFzc19kZXYpOwogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1tY19zbG90KGhvc3QpLm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtbWNfcGRhdGEoaG9zdCktPm5hbWUpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIoc2xvdF9uYW1lLCBTX0lSVUdPLCBvbWFwX2hzbW1jX3Nob3dfc2xvdF9uYW1lLCBOVUxMKTsKQEAgLTEwNjEsNyArMTA4Miw3IEBACiAJICogT01BUDQgRVMyIGFuZCBncmVhdGVyIGhhcyBhbiB1cGRhdGVkIHJlc2V0IGxvZ2ljLgogCSAqIE1vbml0b3IgYSAwLT4xIHRyYW5zaXRpb24gZmlyc3QKIAkgKi8KLQlpZiAobW1jX3Nsb3QoaG9zdCkuZmVhdHVyZXMgJiBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVCkgeworCWlmIChtbWNfcGRhdGEoaG9zdCktPmZlYXR1cmVzICYgSFNNTUNfSEFTX1VQREFURURfUkVTRVQpIHsKIAkJd2hpbGUgKCghKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDVEwpICYgYml0KSkKIAkJCQkJJiYgKGkrKyA8IGxpbWl0KSkKIAkJCXVkZWxheSgxKTsKQEAgLTEyMTAsMTIgKzEyMzEsMTEgQEAKIAkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPmRiY2xrKTsKIAogCS8qIFR1cm4gdGhlIHBvd2VyIG9mZiAqLwotCXJldCA9IG1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDAsIDApOworCXJldCA9IG1tY19wZGF0YShob3N0KS0+c2V0X3Bvd2VyKGhvc3QtPmRldiwgMCwgMCk7CiAKIAkvKiBUdXJuIHRoZSBwb3dlciBPTiB3aXRoIGdpdmVuIFZERCAxLjggb3IgMy4wdiAqLwogCWlmICghcmV0KQotCQlyZXQgPSBtbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLCAxLAotCQkJCQkgICAgICAgdmRkKTsKKwkJcmV0ID0gbW1jX3BkYXRhKGhvc3QpLT5zZXRfcG93ZXIoaG9zdC0+ZGV2LCAxLCB2ZGQpOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaG9zdC0+ZGV2KTsKIAlpZiAoaG9zdC0+ZGJjbGspCiAJCWNsa19wcmVwYXJlX2VuYWJsZShob3N0LT5kYmNsayk7CkBAIC0xMjU5LDExICsxMjc5LDExIEBACiAvKiBQcm90ZWN0IHRoZSBjYXJkIHdoaWxlIHRoZSBjb3ZlciBpcyBvcGVuICovCiBzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX3Byb3RlY3RfY2FyZChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQogewotCWlmICghbW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKQorCWlmICghaG9zdC0+Z2V0X2NvdmVyX3N0YXRlKQogCQlyZXR1cm47CiAKIAlob3N0LT5yZXFzX2Jsb2NrZWQgPSAwOwotCWlmIChtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkKSkgeworCWlmIChob3N0LT5nZXRfY292ZXJfc3RhdGUoaG9zdC0+ZGV2KSkgewogCQlpZiAoaG9zdC0+cHJvdGVjdF9jYXJkKSB7CiAJCQlkZXZfaW5mbyhob3N0LT5kZXYsICIlczogY292ZXIgaXMgY2xvc2VkLCAiCiAJCQkJCSAiY2FyZCBpcyBub3cgYWNjZXNzaWJsZVxuIiwKQEAgLTEyODYsMTMgKzEzMDYsMTIgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX2hzbW1jX2RldGVjdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IGRldl9pZDsKLQlzdHJ1Y3Qgb21hcF9tbWNfc2xvdF9kYXRhICpzbG90ID0gJm1tY19zbG90KGhvc3QpOwogCWludCBjYXJkZGV0ZWN0OwogCiAJc3lzZnNfbm90aWZ5KCZob3N0LT5tbWMtPmNsYXNzX2Rldi5rb2JqLCBOVUxMLCAiY292ZXJfc3dpdGNoIik7CiAKLQlpZiAoc2xvdC0+Y2FyZF9kZXRlY3QpCi0JCWNhcmRkZXRlY3QgPSBzbG90LT5jYXJkX2RldGVjdChob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQpOworCWlmIChob3N0LT5jYXJkX2RldGVjdCkKKwkJY2FyZGRldGVjdCA9IGhvc3QtPmNhcmRfZGV0ZWN0KGhvc3QtPmRldik7CiAJZWxzZSB7CiAJCW9tYXBfaHNtbWNfcHJvdGVjdF9jYXJkKGhvc3QpOwogCQljYXJkZGV0ZWN0ID0gLUVOT1NZUzsKQEAgLTE2MTgsMTIgKzE2MzcsMTAgQEAKIAlpZiAoaW9zLT5wb3dlcl9tb2RlICE9IGhvc3QtPnBvd2VyX21vZGUpIHsKIAkJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKIAkJY2FzZSBNTUNfUE9XRVJfT0ZGOgotCQkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwKLQkJCQkJCSAwLCAwKTsKKwkJCW1tY19wZGF0YShob3N0KS0+c2V0X3Bvd2VyKGhvc3QtPmRldiwgMCwgMCk7CiAJCQlicmVhazsKIAkJY2FzZSBNTUNfUE9XRVJfVVA6Ci0JCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLAotCQkJCQkJIDEsIGlvcy0+dmRkKTsKKwkJCW1tY19wZGF0YShob3N0KS0+c2V0X3Bvd2VyKGhvc3QtPmRldiwgMSwgaW9zLT52ZGQpOwogCQkJYnJlYWs7CiAJCWNhc2UgTU1DX1BPV0VSX09OOgogCQkJZG9fc2VuZF9pbml0X3N0cmVhbSA9IDE7CkBAIC0xNjY4LDI2ICsxNjg1LDI2IEBACiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKLQlpZiAoIW1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0KQorCWlmICghaG9zdC0+Y2FyZF9kZXRlY3QpCiAJCXJldHVybiAtRU5PU1lTOwotCXJldHVybiBtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdChob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQpOworCXJldHVybiBob3N0LT5jYXJkX2RldGVjdChob3N0LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IG9tYXBfaHNtbWNfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JaWYgKCFtbWNfc2xvdChob3N0KS5nZXRfcm8pCisJaWYgKCFob3N0LT5nZXRfcm8pCiAJCXJldHVybiAtRU5PU1lTOwotCXJldHVybiBtbWNfc2xvdChob3N0KS5nZXRfcm8oaG9zdC0+ZGV2LCAwKTsKKwlyZXR1cm4gaG9zdC0+Z2V0X3JvKGhvc3QtPmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfaHNtbWNfaW5pdF9jYXJkKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKLQlpZiAobW1jX3Nsb3QoaG9zdCkuaW5pdF9jYXJkKQotCQltbWNfc2xvdChob3N0KS5pbml0X2NhcmQoY2FyZCk7CisJaWYgKG1tY19wZGF0YShob3N0KS0+aW5pdF9jYXJkKQorCQltbWNfcGRhdGEoaG9zdCktPmluaXRfY2FyZChjYXJkKTsKIH0KIAogc3RhdGljIHZvaWQgb21hcF9oc21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpCkBAIC0xOTU3LDkgKzE5NzQsOSBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9tYXBfbW1jX29mX21hdGNoKTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpvZl9nZXRfaHNtbWNfcGRhdGEoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm9mX2dldF9oc21tY19wZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CiAJdTMyIGJ1c193aWR0aCwgbWF4X2ZyZXE7CiAJaW50IGNkX2dwaW8sIHdwX2dwaW87CkBAIC0xOTc2LDQwICsxOTkzLDM4IEBACiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkobnAsICJ0aSxkdWFsLXZvbHQiLCBOVUxMKSkKIAkJcGRhdGEtPmNvbnRyb2xsZXJfZmxhZ3MgfD0gT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQ7CiAKLQkvKiBUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIDEgc2xvdCAqLwotCXBkYXRhLT5ucl9zbG90cyA9IDE7Ci0JcGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSBjZF9ncGlvOwotCXBkYXRhLT5zbG90c1swXS5ncGlvX3dwID0gd3BfZ3BpbzsKKwlwZGF0YS0+c3dpdGNoX3BpbiA9IGNkX2dwaW87CisJcGRhdGEtPmdwaW9fd3AgPSB3cF9ncGlvOwogCiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkobnAsICJ0aSxub24tcmVtb3ZhYmxlIiwgTlVMTCkpIHsKLQkJcGRhdGEtPnNsb3RzWzBdLm5vbnJlbW92YWJsZSA9IHRydWU7Ci0JCXBkYXRhLT5zbG90c1swXS5ub19yZWd1bGF0b3Jfb2ZmX2luaXQgPSB0cnVlOworCQlwZGF0YS0+bm9ucmVtb3ZhYmxlID0gdHJ1ZTsKKwkJcGRhdGEtPm5vX3JlZ3VsYXRvcl9vZmZfaW5pdCA9IHRydWU7CiAJfQogCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYnVzLXdpZHRoIiwgJmJ1c193aWR0aCk7CiAJaWYgKGJ1c193aWR0aCA9PSA0KQotCQlwZGF0YS0+c2xvdHNbMF0uY2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CisJCXBkYXRhLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKIAllbHNlIGlmIChidXNfd2lkdGggPT0gOCkKLQkJcGRhdGEtPnNsb3RzWzBdLmNhcHMgfD0gTU1DX0NBUF84X0JJVF9EQVRBOworCQlwZGF0YS0+Y2FwcyB8PSBNTUNfQ0FQXzhfQklUX0RBVEE7CiAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgInRpLG5lZWRzLXNwZWNpYWwtcmVzZXQiLCBOVUxMKSkKLQkJcGRhdGEtPnNsb3RzWzBdLmZlYXR1cmVzIHw9IEhTTU1DX0hBU19VUERBVEVEX1JFU0VUOworCQlwZGF0YS0+ZmVhdHVyZXMgfD0gSFNNTUNfSEFTX1VQREFURURfUkVTRVQ7CiAKIAlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibWF4LWZyZXF1ZW5jeSIsICZtYXhfZnJlcSkpCiAJCXBkYXRhLT5tYXhfZnJlcSA9IG1heF9mcmVxOwogCiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkobnAsICJ0aSxuZWVkcy1zcGVjaWFsLWhzLWhhbmRsaW5nIiwgTlVMTCkpCi0JCXBkYXRhLT5zbG90c1swXS5mZWF0dXJlcyB8PSBIU01NQ19IQVNfSFNQRV9TVVBQT1JUOworCQlwZGF0YS0+ZmVhdHVyZXMgfD0gSFNNTUNfSEFTX0hTUEVfU1VQUE9SVDsKIAogCWlmIChvZl9maW5kX3Byb3BlcnR5KG5wLCAia2VlcC1wb3dlci1pbi1zdXNwZW5kIiwgTlVMTCkpCi0JCXBkYXRhLT5zbG90c1swXS5wbV9jYXBzIHw9IE1NQ19QTV9LRUVQX1BPV0VSOworCQlwZGF0YS0+cG1fY2FwcyB8PSBNTUNfUE1fS0VFUF9QT1dFUjsKIAogCWlmIChvZl9maW5kX3Byb3BlcnR5KG5wLCAiZW5hYmxlLXNkaW8td2FrZXVwIiwgTlVMTCkpCi0JCXBkYXRhLT5zbG90c1swXS5wbV9jYXBzIHw9IE1NQ19QTV9XQUtFX1NESU9fSVJROworCQlwZGF0YS0+cG1fY2FwcyB8PSBNTUNfUE1fV0FLRV9TRElPX0lSUTsKIAogCXJldHVybiBwZGF0YTsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEKIAkJCSpvZl9nZXRfaHNtbWNfcGRhdGEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwpAQCAtMjAxOCw3ICsyMDMzLDcgQEAKIAogc3RhdGljIGludCBvbWFwX2hzbW1jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTIwNDgsMTEgKzIwNjMsNiBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCWlmIChwZGF0YS0+bnJfc2xvdHMgPT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBTbG90c1xuIik7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChyZXMgPT0gTlVMTCB8fCBpcnEgPCAwKQpAQCAtMjA2MiwxNCArMjA3MiwxMCBAQAogCWlmIChJU19FUlIoYmFzZSkpCiAJCXJldHVybiBQVFJfRVJSKGJhc2UpOwogCi0JcmV0ID0gb21hcF9oc21tY19ncGlvX2luaXQocGRhdGEpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCiAJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9hbGxvYzsKKwkJZ290byBlcnI7CiAJfQogCiAJaG9zdAkJPSBtbWNfcHJpdihtbWMpOwpAQCAtMjA3OSwxMyArMjA4NSwxNiBAQAogCWhvc3QtPnVzZV9kbWEJPSAxOwogCWhvc3QtPmRtYV9jaAk9IC0xOwogCWhvc3QtPmlycQk9IGlycTsKLQlob3N0LT5zbG90X2lkCT0gMDsKIAlob3N0LT5tYXBiYXNlCT0gcmVzLT5zdGFydCArIHBkYXRhLT5yZWdfb2Zmc2V0OwogCWhvc3QtPmJhc2UJPSBiYXNlICsgcGRhdGEtPnJlZ19vZmZzZXQ7CiAJaG9zdC0+cG93ZXJfbW9kZSA9IE1NQ19QT1dFUl9PRkY7CiAJaG9zdC0+bmV4dF9kYXRhLmNvb2tpZSA9IDE7CiAJaG9zdC0+cGJpYXNfZW5hYmxlZCA9IDA7CiAKKwlyZXQgPSBvbWFwX2hzbW1jX2dwaW9faW5pdChob3N0LCBwZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ3BpbzsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOwogCiAJaWYgKHBkZXYtPmRldi5vZl9ub2RlKQpAQCAtMjE0NCwxNCArMjE1MywxNCBAQAogCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX01NQ19ISUdIU1BFRUQgfCBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8CiAJCSAgICAgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1kgfCBNTUNfQ0FQX0VSQVNFOwogCi0JbW1jLT5jYXBzIHw9IG1tY19zbG90KGhvc3QpLmNhcHM7CisJbW1jLT5jYXBzIHw9IG1tY19wZGF0YShob3N0KS0+Y2FwczsKIAlpZiAobW1jLT5jYXBzICYgTU1DX0NBUF84X0JJVF9EQVRBKQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwogCi0JaWYgKG1tY19zbG90KGhvc3QpLm5vbnJlbW92YWJsZSkKKwlpZiAobW1jX3BkYXRhKGhvc3QpLT5ub25yZW1vdmFibGUpCiAJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX05PTlJFTU9WQUJMRTsKIAotCW1tYy0+cG1fY2FwcyA9IG1tY19zbG90KGhvc3QpLnBtX2NhcHM7CisJbW1jLT5wbV9jYXBzID0gbW1jX3BkYXRhKGhvc3QpLT5wbV9jYXBzOwogCiAJb21hcF9oc21tY19jb25mX2J1c19wb3dlcihob3N0KTsKIApAQCAtMjIwNCwyNyArMjIxMywxOSBAQAogCQlnb3RvIGVycl9pcnE7CiAJfQogCi0JaWYgKHBkYXRhLT5pbml0ICE9IE5VTEwpIHsKLQkJaWYgKHBkYXRhLT5pbml0KCZwZGV2LT5kZXYpICE9IDApIHsKLQkJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAotCQkJCSJVbmFibGUgdG8gY29uZmlndXJlIE1NQyBJUlFzXG4iKTsKLQkJCWdvdG8gZXJyX2lycTsKLQkJfQotCX0KLQotCWlmIChvbWFwX2hzbW1jX2hhdmVfcmVnKCkgJiYgIW1tY19zbG90KGhvc3QpLnNldF9wb3dlcikgeworCWlmIChvbWFwX2hzbW1jX2hhdmVfcmVnKCkgJiYgIW1tY19wZGF0YShob3N0KS0+c2V0X3Bvd2VyKSB7CiAJCXJldCA9IG9tYXBfaHNtbWNfcmVnX2dldChob3N0KTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gZXJyX3JlZzsKKwkJCWdvdG8gZXJyX2lycTsKIAkJaG9zdC0+dXNlX3JlZyA9IDE7CiAJfQogCi0JbW1jLT5vY3JfYXZhaWwgPSBtbWNfc2xvdChob3N0KS5vY3JfbWFzazsKKwltbWMtPm9jcl9hdmFpbCA9IG1tY19wZGF0YShob3N0KS0+b2NyX21hc2s7CiAKIAkvKiBSZXF1ZXN0IElSUSBmb3IgY2FyZCBkZXRlY3QgKi8KLQlpZiAoKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSkpIHsKKwlpZiAoaG9zdC0+Y2FyZF9kZXRlY3RfaXJxKSB7CiAJCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJnBkZXYtPmRldiwKLQkJCQkJCW1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSwKKwkJCQkJCWhvc3QtPmNhcmRfZGV0ZWN0X2lycSwKIAkJCQkJCU5VTEwsIG9tYXBfaHNtbWNfZGV0ZWN0LAogCQkJCQkgICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1QsCiAJCQkJCSAgIG1tY19ob3N0bmFtZShtbWMpLCBob3N0KTsKQEAgLTIyMzMsOCArMjIzNCw4IEBACiAJCQkJIlVuYWJsZSB0byBncmFiIE1NQyBDRCBJUlFcbiIpOwogCQkJZ290byBlcnJfaXJxX2NkOwogCQl9Ci0JCXBkYXRhLT5zdXNwZW5kID0gb21hcF9oc21tY19zdXNwZW5kX2NkaXJxOwotCQlwZGF0YS0+cmVzdW1lID0gb21hcF9oc21tY19yZXN1bWVfY2RpcnE7CisJCWhvc3QtPnN1c3BlbmQgPSBvbWFwX2hzbW1jX3N1c3BlbmRfY2RpcnE7CisJCWhvc3QtPnJlc3VtZSA9IG9tYXBfaHNtbWNfcmVzdW1lX2NkaXJxOwogCX0KIAogCW9tYXBfaHNtbWNfZGlzYWJsZV9pcnEoaG9zdCk7CkBAIC0yMjU1LDEyICsyMjU2LDEyIEBACiAKIAltbWNfYWRkX2hvc3QobW1jKTsKIAotCWlmIChtbWNfc2xvdChob3N0KS5uYW1lICE9IE5VTEwpIHsKKwlpZiAobW1jX3BkYXRhKGhvc3QpLT5uYW1lICE9IE5VTEwpIHsKIAkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZtbWMtPmNsYXNzX2RldiwgJmRldl9hdHRyX3Nsb3RfbmFtZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlcnJfc2xvdF9uYW1lOwogCX0KLQlpZiAobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxICYmIG1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZSkgeworCWlmIChob3N0LT5jYXJkX2RldGVjdF9pcnEgJiYgaG9zdC0+Z2V0X2NvdmVyX3N0YXRlKSB7CiAJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmbW1jLT5jbGFzc19kZXYsCiAJCQkJCSZkZXZfYXR0cl9jb3Zlcl9zd2l0Y2gpOwogCQlpZiAocmV0IDwgMCkKQEAgLTIyNzgsOSArMjI3OSw2IEBACiBlcnJfaXJxX2NkOgogCWlmIChob3N0LT51c2VfcmVnKQogCQlvbWFwX2hzbW1jX3JlZ19wdXQoaG9zdCk7Ci1lcnJfcmVnOgotCWlmIChob3N0LT5wZGF0YS0+Y2xlYW51cCkKLQkJaG9zdC0+cGRhdGEtPmNsZWFudXAoJnBkZXYtPmRldik7CiBlcnJfaXJxOgogCWlmIChob3N0LT50eF9jaGFuKQogCQlkbWFfcmVsZWFzZV9jaGFubmVsKGhvc3QtPnR4X2NoYW4pOwpAQCAtMjI5MSw5ICsyMjg5LDkgQEAKIAlpZiAoaG9zdC0+ZGJjbGspCiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5kYmNsayk7CiBlcnIxOgorCW9tYXBfaHNtbWNfZ3Bpb19mcmVlKGhvc3QsIHBkYXRhKTsKK2Vycl9ncGlvOgogCW1tY19mcmVlX2hvc3QobW1jKTsKLWVycl9hbGxvYzoKLQlvbWFwX2hzbW1jX2dwaW9fZnJlZShwZGF0YSk7CiBlcnI6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTIzMDYsOCArMjMwNCw2IEBACiAJbW1jX3JlbW92ZV9ob3N0KGhvc3QtPm1tYyk7CiAJaWYgKGhvc3QtPnVzZV9yZWcpCiAJCW9tYXBfaHNtbWNfcmVnX3B1dChob3N0KTsKLQlpZiAoaG9zdC0+cGRhdGEtPmNsZWFudXApCi0JCWhvc3QtPnBkYXRhLT5jbGVhbnVwKCZwZGV2LT5kZXYpOwogCiAJaWYgKGhvc3QtPnR4X2NoYW4pCiAJCWRtYV9yZWxlYXNlX2NoYW5uZWwoaG9zdC0+dHhfY2hhbik7CkBAIC0yMzE5LDcgKzIzMTUsNyBAQAogCWlmIChob3N0LT5kYmNsaykKIAkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPmRiY2xrKTsKIAotCW9tYXBfaHNtbWNfZ3Bpb19mcmVlKGhvc3QtPnBkYXRhKTsKKwlvbWFwX2hzbW1jX2dwaW9fZnJlZShob3N0LCBob3N0LT5wZGF0YSk7CiAJbW1jX2ZyZWVfaG9zdChob3N0LT5tbWMpOwogCiAJcmV0dXJuIDA7CkBAIC0yMzMwLDggKzIzMjYsOCBAQAogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmIChob3N0LT5wZGF0YS0+c3VzcGVuZCkKLQkJcmV0dXJuIGhvc3QtPnBkYXRhLT5zdXNwZW5kKGRldiwgaG9zdC0+c2xvdF9pZCk7CisJaWYgKGhvc3QtPnN1c3BlbmQpCisJCXJldHVybiBob3N0LT5zdXNwZW5kKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNDAsOCArMjMzNiw4IEBACiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKGhvc3QtPnBkYXRhLT5yZXN1bWUpCi0JCWhvc3QtPnBkYXRhLT5yZXN1bWUoZGV2LCBob3N0LT5zbG90X2lkKTsKKwlpZiAoaG9zdC0+cmVzdW1lKQorCQlob3N0LT5yZXN1bWUoZGV2KTsKIAogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWFjcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jCmluZGV4IDljY2NjMGUuLmRhYmE0OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jCkBAIC03Niw2ICs3Niw3IEBACiAJY29uc3Qgc3RydWN0IHNkaGNpX2FjcGlfc2xvdAkqc2xvdDsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKIAlib29sCQkJCXVzZV9ydW50aW1lX3BtOworCWJvb2wJCQkJZG1hX3NldHVwOwogfTsKIAogc3RhdGljIGlubGluZSBib29sIHNkaGNpX2FjcGlfZmxhZyhzdHJ1Y3Qgc2RoY2lfYWNwaV9ob3N0ICpjLCB1bnNpZ25lZCBpbnQgZmxhZykKQEAgLTg1LDcgKzg2LDI5IEBACiAKIHN0YXRpYyBpbnQgc2RoY2lfYWNwaV9lbmFibGVfZG1hKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQogewotCXJldHVybiAwOworCXN0cnVjdCBzZGhjaV9hY3BpX2hvc3QgKmMgPSBzZGhjaV9wcml2KGhvc3QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjLT5wZGV2LT5kZXY7CisJaW50IGVyciA9IC0xOworCisJaWYgKGMtPmRtYV9zZXR1cCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkgeworCQlpZiAoaG9zdC0+cXVpcmtzMiAmIFNESENJX1FVSVJLMl9CUk9LRU5fNjRfQklUX0RNQSkgeworCQkJaG9zdC0+ZmxhZ3MgJj0gflNESENJX1VTRV82NF9CSVRfRE1BOworCQl9IGVsc2UgeworCQkJZXJyID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSyg2NCkpOworCQkJaWYgKGVycikKKwkJCQlkZXZfd2FybihkZXYsICJGYWlsZWQgdG8gc2V0IDY0LWJpdCBETUEgbWFza1xuIik7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQllcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisKKwljLT5kbWFfc2V0dXAgPSAhZXJyOworCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfYWNwaV9pbnRfaHdfcmVzZXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCkBAIC0xODAsMTcgKzIwMywyMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9hY3BpX3Nsb3Qgc2RoY2lfYWNwaV9zbG90X2ludF9lbW1jID0gewogCS5jaGlwICAgID0gJnNkaGNpX2FjcGlfY2hpcF9pbnQsCiAJLmNhcHMgICAgPSBNTUNfQ0FQXzhfQklUX0RBVEEgfCBNTUNfQ0FQX05PTlJFTU9WQUJMRSB8Ci0JCSAgIE1NQ19DQVBfSFdfUkVTRVQgfCBNTUNfQ0FQXzFfOFZfRERSLAorCQkgICBNTUNfQ0FQX0hXX1JFU0VUIHwgTU1DX0NBUF8xXzhWX0REUiB8CisJCSAgIE1NQ19DQVBfQlVTX1dJRFRIX1RFU1QgfCBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWSwKIAkuY2FwczIgICA9IE1NQ19DQVAyX0hDX0VSQVNFX1NaLAogCS5mbGFncyAgID0gU0RIQ0lfQUNQSV9SVU5USU1FX1BNLAorCS5xdWlya3MgID0gU0RIQ0lfUVVJUktfTk9fRU5EQVRUUl9JTl9OT1BERVNDLAogCS5xdWlya3MyID0gU0RIQ0lfUVVJUksyX1BSRVNFVF9WQUxVRV9CUk9LRU4gfCBTREhDSV9RVUlSSzJfU1RPUF9XSVRIX1RDLAogCS5wcm9iZV9zbG90CT0gc2RoY2lfYWNwaV9lbW1jX3Byb2JlX3Nsb3QsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX2FjcGlfc2xvdCBzZGhjaV9hY3BpX3Nsb3RfaW50X3NkaW8gPSB7Ci0JLnF1aXJrcyAgPSBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04sCisJLnF1aXJrcyAgPSBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04gfAorCQkgICBTREhDSV9RVUlSS19OT19FTkRBVFRSX0lOX05PUERFU0MsCiAJLnF1aXJrczIgPSBTREhDSV9RVUlSSzJfSE9TVF9PRkZfQ0FSRF9PTiwKLQkuY2FwcyAgICA9IE1NQ19DQVBfTk9OUkVNT1ZBQkxFIHwgTU1DX0NBUF9QT1dFUl9PRkZfQ0FSRCwKKwkuY2FwcyAgICA9IE1NQ19DQVBfTk9OUkVNT1ZBQkxFIHwgTU1DX0NBUF9QT1dFUl9PRkZfQ0FSRCB8CisJCSAgIE1NQ19DQVBfQlVTX1dJRFRIX1RFU1QgfCBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWSwKIAkuZmxhZ3MgICA9IFNESENJX0FDUElfUlVOVElNRV9QTSwKIAkucG1fY2FwcyA9IE1NQ19QTV9LRUVQX1BPV0VSLAogCS5wcm9iZV9zbG90CT0gc2RoY2lfYWNwaV9zZGlvX3Byb2JlX3Nsb3QsCkBAIC0xOTksOCArMjI2LDEwIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX2FjcGlfc2xvdCBzZGhjaV9hY3BpX3Nsb3RfaW50X3NkID0gewogCS5mbGFncyAgID0gU0RIQ0lfQUNQSV9TRF9DRCB8IFNESENJX0FDUElfU0RfQ0RfT1ZFUlJJREVfTEVWRUwgfAogCQkgICBTREhDSV9BQ1BJX1JVTlRJTUVfUE0sCisJLnF1aXJrcyAgPSBTREhDSV9RVUlSS19OT19FTkRBVFRSX0lOX05PUERFU0MsCiAJLnF1aXJrczIgPSBTREhDSV9RVUlSSzJfQ0FSRF9PTl9ORUVEU19CVVNfT04gfAogCQkgICBTREhDSV9RVUlSSzJfU1RPUF9XSVRIX1RDLAorCS5jYXBzICAgID0gTU1DX0NBUF9CVVNfV0lEVEhfVEVTVCB8IE1NQ19DQVBfV0FJVF9XSElMRV9CVVNZLAogCS5wcm9iZV9zbG90CT0gc2RoY2lfYWNwaV9zZF9wcm9iZV9zbG90LAogfTsKIApAQCAtMzA1LDIxICszMzQsNiBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCWlmICghZGV2LT5kbWFfbWFzaykgewotCQl1NjQgZG1hX21hc2s7Ci0KLQkJaWYgKHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0NBUEFCSUxJVElFUykgJiBTREhDSV9DQU5fNjRCSVQpIHsKLQkJCS8qIDY0LWJpdCBETUEgaXMgbm90IHN1cHBvcnRlZCBhdCBwcmVzZW50ICovCi0JCQlkbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0JCX0gZWxzZSB7Ci0JCQlkbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0JCX0KLQotCQllcnIgPSBkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50KGRldiwgZG1hX21hc2spOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfZnJlZTsKLQl9Ci0KIAlpZiAoYy0+c2xvdCkgewogCQlpZiAoYy0+c2xvdC0+cHJvYmVfc2xvdCkgewogCQkJZXJyID0gYy0+c2xvdC0+cHJvYmVfc2xvdChwZGV2LCBoaWQsIHVpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLWlteC5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYwppbmRleCA1ODdlZTBlLi4xMjcxMWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLWlteC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMtaW14LmMKQEAgLTY1LDggKzY1LDYgQEAKIC8qIE5PVEU6IHRoZSBtaW5pbXVtIHZhbGlkIHR1bmluZyBzdGFydCB0YXAgZm9yIG14NnNsIGlzIDEgKi8KICNkZWZpbmUgRVNESENfVFVOSU5HX1NUQVJUX1RBUAkJMHgxCiAKLSNkZWZpbmUgRVNESENfVFVOSU5HX0JMT0NLX1BBVFRFUk5fTEVOCTY0Ci0KIC8qIHBpbmN0cmwgc3RhdGUgKi8KICNkZWZpbmUgRVNESENfUElOQ1RSTF9TVEFURV8xMDBNSFoJInN0YXRlXzEwMG1oeiIKICNkZWZpbmUgRVNESENfUElOQ1RSTF9TVEFURV8yMDBNSFoJInN0YXRlXzIwMG1oeiIKQEAgLTY5Miw4ICs2OTAsNiBAQAogCS8qIEZJWE1FOiBkZWxheSBhIGJpdCBmb3IgY2FyZCB0byBiZSByZWFkeSBmb3IgbmV4dCB0dW5pbmcgZHVlIHRvIGVycm9ycyAqLwogCW1kZWxheSgxKTsKIAotCS8qIFRoaXMgaXMgYmFsYW5jZWQgYnkgdGhlIHJ1bnRpbWUgcHV0IGluIHNkaGNpX3Rhc2tsZXRfZmluaXNoICovCi0JcG1fcnVudGltZV9nZXRfc3luYyhob3N0LT5tbWMtPnBhcmVudCk7CiAJcmVnID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgRVNESENfTUlYX0NUUkwpOwogCXJlZyB8PSBFU0RIQ19NSVhfQ1RSTF9FWEVfVFVORSB8IEVTREhDX01JWF9DVFJMX1NNUENMS19TRUwgfAogCQkJRVNESENfTUlYX0NUUkxfRkJDTEtfU0VMOwpAQCAtNzA0LDU0ICs3MDAsNiBAQAogCQkJdmFsLCByZWFkbChob3N0LT5pb2FkZHIgKyBFU0RIQ19UVU5FX0NUUkxfU1RBVFVTKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVzZGhjX3JlcXVlc3RfZG9uZShzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKLXsKLQljb21wbGV0ZSgmbXJxLT5jb21wbGV0aW9uKTsKLX0KLQotc3RhdGljIGludCBlc2RoY19zZW5kX3R1bmluZ19jbWQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiBvcGNvZGUsCi0JCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCi17Ci0Jc3RydWN0IG1tY19jb21tYW5kIGNtZCA9IHswfTsKLQlzdHJ1Y3QgbW1jX3JlcXVlc3QgbXJxID0ge05VTEx9OwotCXN0cnVjdCBtbWNfZGF0YSBkYXRhID0gezB9OwotCi0JY21kLm9wY29kZSA9IG9wY29kZTsKLQljbWQuYXJnID0gMDsKLQljbWQuZmxhZ3MgPSBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BRFRDOwotCi0JZGF0YS5ibGtzeiA9IEVTREhDX1RVTklOR19CTE9DS19QQVRURVJOX0xFTjsKLQlkYXRhLmJsb2NrcyA9IDE7Ci0JZGF0YS5mbGFncyA9IE1NQ19EQVRBX1JFQUQ7Ci0JZGF0YS5zZyA9IHNnOwotCWRhdGEuc2dfbGVuID0gMTsKLQotCW1ycS5jbWQgPSAmY21kOwotCW1ycS5jbWQtPm1ycSA9ICZtcnE7Ci0JbXJxLmRhdGEgPSAmZGF0YTsKLQltcnEuZGF0YS0+bXJxID0gJm1ycTsKLQltcnEuY21kLT5kYXRhID0gbXJxLmRhdGE7Ci0KLQltcnEuZG9uZSA9IGVzZGhjX3JlcXVlc3RfZG9uZTsKLQlpbml0X2NvbXBsZXRpb24oJihtcnEuY29tcGxldGlvbikpOwotCi0Jc3Bpbl9sb2NrX2lycSgmaG9zdC0+bG9jayk7Ci0JaG9zdC0+bXJxID0gJm1ycTsKLQotCXNkaGNpX3NlbmRfY29tbWFuZChob3N0LCBtcnEuY21kKTsKLQotCXNwaW5fdW5sb2NrX2lycSgmaG9zdC0+bG9jayk7Ci0KLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtcnEuY29tcGxldGlvbik7Ci0KLQlpZiAoY21kLmVycm9yKQotCQlyZXR1cm4gY21kLmVycm9yOwotCWlmIChkYXRhLmVycm9yKQotCQlyZXR1cm4gZGF0YS5lcnJvcjsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBlc2RoY19wb3N0X3R1bmluZyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKIHsKIAl1MzIgcmVnOwpAQCAtNzYzLDIxICs3MTEsMTMgQEAKIAogc3RhdGljIGludCBlc2RoY19leGVjdXRpbmdfdHVuaW5nKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgb3Bjb2RlKQogewotCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKLQljaGFyICp0dW5pbmdfcGF0dGVybjsKIAlpbnQgbWluLCBtYXgsIGF2ZywgcmV0OwogCi0JdHVuaW5nX3BhdHRlcm4gPSBrbWFsbG9jKEVTREhDX1RVTklOR19CTE9DS19QQVRURVJOX0xFTiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0dW5pbmdfcGF0dGVybikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzZ19pbml0X29uZSgmc2csIHR1bmluZ19wYXR0ZXJuLCBFU0RIQ19UVU5JTkdfQkxPQ0tfUEFUVEVSTl9MRU4pOwotCiAJLyogZmluZCB0aGUgbWluaW51bSBkZWxheSBmaXJzdCB3aGljaCBjYW4gcGFzcyB0dW5pbmcgKi8KIAltaW4gPSBFU0RIQ19UVU5FX0NUUkxfTUlOOwogCXdoaWxlIChtaW4gPCBFU0RIQ19UVU5FX0NUUkxfTUFYKSB7CiAJCWVzZGhjX3ByZXBhcmVfdHVuaW5nKGhvc3QsIG1pbik7Ci0JCWlmICghZXNkaGNfc2VuZF90dW5pbmdfY21kKGhvc3QsIG9wY29kZSwgJnNnKSkKKwkJaWYgKCFtbWNfc2VuZF90dW5pbmcoaG9zdC0+bW1jKSkKIAkJCWJyZWFrOwogCQltaW4gKz0gRVNESENfVFVORV9DVFJMX1NURVA7CiAJfQpAQCAtNzg2LDcgKzcyNiw3IEBACiAJbWF4ID0gbWluICsgRVNESENfVFVORV9DVFJMX1NURVA7CiAJd2hpbGUgKG1heCA8IEVTREhDX1RVTkVfQ1RSTF9NQVgpIHsKIAkJZXNkaGNfcHJlcGFyZV90dW5pbmcoaG9zdCwgbWF4KTsKLQkJaWYgKGVzZGhjX3NlbmRfdHVuaW5nX2NtZChob3N0LCBvcGNvZGUsICZzZykpIHsKKwkJaWYgKG1tY19zZW5kX3R1bmluZyhob3N0LT5tbWMpKSB7CiAJCQltYXggLT0gRVNESENfVFVORV9DVFJMX1NURVA7CiAJCQlicmVhazsKIAkJfQpAQCAtNzk2LDExICs3MzYsOSBAQAogCS8qIHVzZSBhdmVyYWdlIGRlbGF5IHRvIGdldCB0aGUgYmVzdCB0aW1pbmcgKi8KIAlhdmcgPSAobWluICsgbWF4KSAvIDI7CiAJZXNkaGNfcHJlcGFyZV90dW5pbmcoaG9zdCwgYXZnKTsKLQlyZXQgPSBlc2RoY19zZW5kX3R1bmluZ19jbWQoaG9zdCwgb3Bjb2RlLCAmc2cpOworCXJldCA9IG1tY19zZW5kX3R1bmluZyhob3N0LT5tbWMpOwogCWVzZGhjX3Bvc3RfdHVuaW5nKGhvc3QpOwogCi0Ja2ZyZWUodHVuaW5nX3BhdHRlcm4pOwotCiAJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJ0dW5uaW5nICVzIGF0IDB4JXggcmV0ICVkXG4iLAogCQlyZXQgPyAiZmFpbGVkIiA6ICJwYXNzZWQiLCBhdmcsIHJldCk7CiAKQEAgLTEwMzEsMTEgKzk2OSw4IEBACiAKIAlpbXhfZGF0YS0+cGluc19kZWZhdWx0ID0gcGluY3RybF9sb29rdXBfc3RhdGUoaW14X2RhdGEtPnBpbmN0cmwsCiAJCQkJCQlQSU5DVFJMX1NUQVRFX0RFRkFVTFQpOwotCWlmIChJU19FUlIoaW14X2RhdGEtPnBpbnNfZGVmYXVsdCkpIHsKLQkJZXJyID0gUFRSX0VSUihpbXhfZGF0YS0+cGluc19kZWZhdWx0KTsKLQkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJjb3VsZCBub3QgZ2V0IGRlZmF1bHQgc3RhdGVcbiIpOwotCQlnb3RvIGRpc2FibGVfY2xrOwotCX0KKwlpZiAoSVNfRVJSKGlteF9kYXRhLT5waW5zX2RlZmF1bHQpKQorCQlkZXZfd2FybihtbWNfZGV2KGhvc3QtPm1tYyksICJjb3VsZCBub3QgZ2V0IGRlZmF1bHQgc3RhdGVcbiIpOwogCiAJaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX0JST0tFTl9USU1FT1VUX1ZBTDsKIApAQCAtMTEyMyw3ICsxMDU4LDggQEAKIAl9CiAKIAkvKiBzZHI1MCBhbmQgc2RyMTA0IG5lZWRzIHdvcmsgb24gMS44diBzaWduYWwgdm9sdGFnZSAqLwotCWlmICgoYm9hcmRkYXRhLT5zdXBwb3J0X3ZzZWwpICYmIGVzZGhjX2lzX3VzZGhjKGlteF9kYXRhKSkgeworCWlmICgoYm9hcmRkYXRhLT5zdXBwb3J0X3ZzZWwpICYmIGVzZGhjX2lzX3VzZGhjKGlteF9kYXRhKSAmJgorCSAgICAhSVNfRVJSKGlteF9kYXRhLT5waW5zX2RlZmF1bHQpKSB7CiAJCWlteF9kYXRhLT5waW5zXzEwMG1oeiA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKGlteF9kYXRhLT5waW5jdHJsLAogCQkJCQkJRVNESENfUElOQ1RSTF9TVEFURV8xMDBNSFopOwogCQlpbXhfZGF0YS0+cGluc18yMDBtaHogPSBwaW5jdHJsX2xvb2t1cF9zdGF0ZShpbXhfZGF0YS0+cGluY3RybCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktbXNtLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW1zbS5jCmluZGV4IDMwODA0Mzg1Li4zZDMyY2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW1zbS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktbXNtLmMKQEAgLTMzOSw5ICszMzksNyBAQAogc3RhdGljIGludCBzZGhjaV9tc21fZXhlY3V0ZV90dW5pbmcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiBvcGNvZGUpCiB7CiAJaW50IHR1bmluZ19zZXFfY250ID0gMzsKLQl1OCBwaGFzZSwgKmRhdGFfYnVmLCB0dW5lZF9waGFzZXNbMTZdLCB0dW5lZF9waGFzZV9jbnQgPSAwOwotCWNvbnN0IHU4ICp0dW5pbmdfYmxvY2tfcGF0dGVybiA9IHR1bmluZ19ibGtfcGF0dGVybl80Yml0OwotCWludCBzaXplID0gc2l6ZW9mKHR1bmluZ19ibGtfcGF0dGVybl80Yml0KTsKKwl1OCBwaGFzZSwgdHVuZWRfcGhhc2VzWzE2XSwgdHVuZWRfcGhhc2VfY250ID0gMDsKIAlpbnQgcmM7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBob3N0LT5tbWM7CiAJc3RydWN0IG1tY19pb3MgaW9zID0gaG9zdC0+bW1jLT5pb3M7CkBAIC0zNTUsNTMgKzM1MywyMSBAQAogCSAgICAgIChpb3MudGltaW5nID09IE1NQ19USU1JTkdfVUhTX1NEUjEwNCkpKQogCQlyZXR1cm4gMDsKIAotCWlmICgob3Bjb2RlID09IE1NQ19TRU5EX1RVTklOR19CTE9DS19IUzIwMCkgJiYKLQkgICAgKG1tYy0+aW9zLmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzgpKSB7Ci0JCXR1bmluZ19ibG9ja19wYXR0ZXJuID0gdHVuaW5nX2Jsa19wYXR0ZXJuXzhiaXQ7Ci0JCXNpemUgPSBzaXplb2YodHVuaW5nX2Jsa19wYXR0ZXJuXzhiaXQpOwotCX0KLQotCWRhdGFfYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGFfYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQogcmV0cnk6CiAJLyogRmlyc3Qgb2YgYWxsIHJlc2V0IHRoZSB0dW5pbmcgYmxvY2sgKi8KIAlyYyA9IG1zbV9pbml0X2NtX2RsbChob3N0KTsKIAlpZiAocmMpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gcmM7CiAKIAlwaGFzZSA9IDA7CiAJZG8gewotCQlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kID0geyAwIH07Ci0JCXN0cnVjdCBtbWNfZGF0YSBkYXRhID0geyAwIH07Ci0JCXN0cnVjdCBtbWNfcmVxdWVzdCBtcnEgPSB7Ci0JCQkuY21kID0gJmNtZCwKLQkJCS5kYXRhID0gJmRhdGEKLQkJfTsKLQkJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwotCiAJCS8qIFNldCB0aGUgcGhhc2UgaW4gZGVsYXkgbGluZSBodyBibG9jayAqLwogCQlyYyA9IG1zbV9jb25maWdfY21fZGxsX3BoYXNlKGhvc3QsIHBoYXNlKTsKIAkJaWYgKHJjKQotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gcmM7CiAKLQkJY21kLm9wY29kZSA9IG9wY29kZTsKLQkJY21kLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQURUQzsKLQotCQlkYXRhLmJsa3N6ID0gc2l6ZTsKLQkJZGF0YS5ibG9ja3MgPSAxOwotCQlkYXRhLmZsYWdzID0gTU1DX0RBVEFfUkVBRDsKLQkJZGF0YS50aW1lb3V0X25zID0gTlNFQ19QRVJfU0VDOwkvKiAxIHNlY29uZCAqLwotCi0JCWRhdGEuc2cgPSAmc2c7Ci0JCWRhdGEuc2dfbGVuID0gMTsKLQkJc2dfaW5pdF9vbmUoJnNnLCBkYXRhX2J1Ziwgc2l6ZSk7Ci0JCW1lbXNldChkYXRhX2J1ZiwgMCwgc2l6ZSk7Ci0JCW1tY193YWl0X2Zvcl9yZXEobW1jLCAmbXJxKTsKLQotCQlpZiAoIWNtZC5lcnJvciAmJiAhZGF0YS5lcnJvciAmJgotCQkgICAgIW1lbWNtcChkYXRhX2J1ZiwgdHVuaW5nX2Jsb2NrX3BhdHRlcm4sIHNpemUpKSB7CisJCXJjID0gbW1jX3NlbmRfdHVuaW5nKG1tYyk7CisJCWlmICghcmMpIHsKIAkJCS8qIFR1bmluZyBpcyBzdWNjZXNzZnVsIGF0IHRoaXMgdHVuaW5nIHBvaW50ICovCiAJCQl0dW5lZF9waGFzZXNbdHVuZWRfcGhhc2VfY250KytdID0gcGhhc2U7CiAJCQlkZXZfZGJnKG1tY19kZXYobW1jKSwgIiVzOiBGb3VuZCBnb29kIHBoYXNlID0gJWRcbiIsCkBAIC00MTMsNyArMzc5LDcgQEAKIAkJcmMgPSBtc21fZmluZF9tb3N0X2FwcHJvcHJpYXRlX3BoYXNlKGhvc3QsIHR1bmVkX3BoYXNlcywKIAkJCQkJCSAgICAgdHVuZWRfcGhhc2VfY250KTsKIAkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIHJjOwogCQllbHNlCiAJCQlwaGFzZSA9IHJjOwogCkBAIC00MjMsNyArMzg5LDcgQEAKIAkJICovCiAJCXJjID0gbXNtX2NvbmZpZ19jbV9kbGxfcGhhc2UoaG9zdCwgcGhhc2UpOwogCQlpZiAocmMpCi0JCQlnb3RvIG91dDsKKwkJCXJldHVybiByYzsKIAkJZGV2X2RiZyhtbWNfZGV2KG1tYyksICIlczogU2V0dGluZyB0aGUgdHVuaW5nIHBoYXNlIHRvICVkXG4iLAogCQkJIG1tY19ob3N0bmFtZShtbWMpLCBwaGFzZSk7CiAJfSBlbHNlIHsKQEAgLTQzNSw4ICs0MDEsNiBAQAogCQlyYyA9IC1FSU87CiAJfQogCi1vdXQ6Ci0Ja2ZyZWUoZGF0YV9idWYpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1hcmFzYW4uYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtYXJhc2FuLmMKaW5kZXggOTgxZDY2ZS4uYmNiNTFlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1hcmFzYW4uYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWFyYXNhbi5jCkBAIC0xNjUsNyArMTY1LDYgQEAKIAlob3N0ID0gc2RoY2lfcGx0Zm1faW5pdChwZGV2LCAmc2RoY2lfYXJhc2FuX3BkYXRhLCAwKTsKIAlpZiAoSVNfRVJSKGhvc3QpKSB7CiAJCXJldCA9IFBUUl9FUlIoaG9zdCk7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtIGluaXQgZmFpbGVkICgldSlcbiIsIHJldCk7CiAJCWdvdG8gY2xrX2Rpc2FibGVfYWxsOwogCX0KIApAQCAtMTc1LDEwICsxNzQsOCBAQAogCXBsdGZtX2hvc3QtPmNsayA9IGNsa194aW47CiAKIAlyZXQgPSBzZGhjaV9hZGRfaG9zdChob3N0KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtIHJlZ2lzdGVyIGZhaWxlZCAoJXUpXG4iLCByZXQpOworCWlmIChyZXQpCiAJCWdvdG8gZXJyX3BsdGZtX2ZyZWU7Ci0JfQogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLW8ybWljcm8uYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLW8ybWljcm8uYwppbmRleCA1NjcwZTM4Li5lMmVjMTA4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2ktbzJtaWNyby5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLW8ybWljcm8uYwpAQCAtMTI3LDggKzEyNyw2IEBACiAJCXJldHVybjsKIAlzY3JhdGNoXzMyICY9IH4oKDEgPDwgMjEpIHwgKDEgPDwgMzApKTsKIAotCS8qIFNldCBSVEQzIGZ1bmN0aW9uIGRpc2FibGVkICovCi0Jc2NyYXRjaF8zMiB8PSAoKDEgPDwgMjkpIHwgKDEgPDwgMjgpKTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGNoaXAtPnBkZXYsIE8yX1NEX0ZVTkNfUkVHMywgc2NyYXRjaF8zMik7CiAKIAkvKiBTZXQgTDEgRW50cmFuY2UgVGltZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCmluZGV4IDYxMTkyOTcuLjk1ZjczMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwpAQCAtMjY5LDcgKzI2OSw5IEBACiBzdGF0aWMgaW50IGJ5dF9lbW1jX3Byb2JlX3Nsb3Qoc3RydWN0IHNkaGNpX3BjaV9zbG90ICpzbG90KQogewogCXNsb3QtPmhvc3QtPm1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzhfQklUX0RBVEEgfCBNTUNfQ0FQX05PTlJFTU9WQUJMRSB8Ci0JCQkJIE1NQ19DQVBfSFdfUkVTRVQgfCBNTUNfQ0FQXzFfOFZfRERSOworCQkJCSBNTUNfQ0FQX0hXX1JFU0VUIHwgTU1DX0NBUF8xXzhWX0REUiB8CisJCQkJIE1NQ19DQVBfQlVTX1dJRFRIX1RFU1QgfAorCQkJCSBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWTsKIAlzbG90LT5ob3N0LT5tbWMtPmNhcHMyIHw9IE1NQ19DQVAyX0hDX0VSQVNFX1NaOwogCXNsb3QtPmh3X3Jlc2V0ID0gc2RoY2lfcGNpX2ludF9od19yZXNldDsKIAlpZiAoc2xvdC0+Y2hpcC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfQlNXX0VNTUMpCkBAIC0yNzksMTIgKzI4MSwxNiBAQAogCiBzdGF0aWMgaW50IGJ5dF9zZGlvX3Byb2JlX3Nsb3Qoc3RydWN0IHNkaGNpX3BjaV9zbG90ICpzbG90KQogewotCXNsb3QtPmhvc3QtPm1tYy0+Y2FwcyB8PSBNTUNfQ0FQX1BPV0VSX09GRl9DQVJEIHwgTU1DX0NBUF9OT05SRU1PVkFCTEU7CisJc2xvdC0+aG9zdC0+bW1jLT5jYXBzIHw9IE1NQ19DQVBfUE9XRVJfT0ZGX0NBUkQgfCBNTUNfQ0FQX05PTlJFTU9WQUJMRSB8CisJCQkJIE1NQ19DQVBfQlVTX1dJRFRIX1RFU1QgfAorCQkJCSBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBieXRfc2RfcHJvYmVfc2xvdChzdHJ1Y3Qgc2RoY2lfcGNpX3Nsb3QgKnNsb3QpCiB7CisJc2xvdC0+aG9zdC0+bW1jLT5jYXBzIHw9IE1NQ19DQVBfQlVTX1dJRFRIX1RFU1QgfAorCQkJCSBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWTsKIAlzbG90LT5jZF9jb25faWQgPSBOVUxMOwogCXNsb3QtPmNkX2lkeCA9IDA7CiAJc2xvdC0+Y2Rfb3ZlcnJpZGVfbGV2ZWwgPSB0cnVlOwpAQCAtMjk0LDExICszMDAsMTMgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RoY2lfcGNpX2ZpeGVzIHNkaGNpX2ludGVsX2J5dF9lbW1jID0gewogCS5hbGxvd19ydW50aW1lX3BtID0gdHJ1ZSwKIAkucHJvYmVfc2xvdAk9IGJ5dF9lbW1jX3Byb2JlX3Nsb3QsCisJLnF1aXJrcwkJPSBTREhDSV9RVUlSS19OT19FTkRBVFRSX0lOX05PUERFU0MsCiAJLnF1aXJrczIJPSBTREhDSV9RVUlSSzJfUFJFU0VUX1ZBTFVFX0JST0tFTiB8CiAJCQkgIFNESENJX1FVSVJLMl9TVE9QX1dJVEhfVEMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9pbnRlbF9ieXRfc2RpbyA9IHsKKwkucXVpcmtzCQk9IFNESENJX1FVSVJLX05PX0VOREFUVFJfSU5fTk9QREVTQywKIAkucXVpcmtzMgk9IFNESENJX1FVSVJLMl9IT1NUX09GRl9DQVJEX09OIHwKIAkJCVNESENJX1FVSVJLMl9QUkVTRVRfVkFMVUVfQlJPS0VOLAogCS5hbGxvd19ydW50aW1lX3BtID0gdHJ1ZSwKQEAgLTMwNiw2ICszMTQsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9wY2lfZml4ZXMgc2RoY2lfaW50ZWxfYnl0X3NkID0geworCS5xdWlya3MJCT0gU0RIQ0lfUVVJUktfTk9fRU5EQVRUUl9JTl9OT1BERVNDLAogCS5xdWlya3MyCT0gU0RIQ0lfUVVJUksyX0NBUkRfT05fTkVFRFNfQlVTX09OIHwKIAkJCSAgU0RIQ0lfUVVJUksyX1BSRVNFVF9WQUxVRV9CUk9LRU4gfAogCQkJICBTREhDSV9RVUlSSzJfU1RPUF9XSVRIX1RDLApAQCAtNjQ1LDYgKzY1NCwyNSBAQAogCS5wcm9iZV9zbG90CT0gcnRzeF9wcm9iZV9zbG90LAogfTsKIAorc3RhdGljIGludCBhbWRfcHJvYmUoc3RydWN0IHNkaGNpX3BjaV9jaGlwICpjaGlwKQoreworCXN0cnVjdCBwY2lfZGV2CSpzbWJ1c19kZXY7CisKKwlzbWJ1c19kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwKKwkJCVBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU01CVVMsIE5VTEwpOworCisJaWYgKHNtYnVzX2RldiAmJiAoc21idXNfZGV2LT5yZXZpc2lvbiA8IDB4NTEpKSB7CisJCWNoaXAtPnF1aXJrczIgfD0gU0RIQ0lfUVVJUksyX0NMRUFSX1RSQU5TRkVSTU9ERV9SRUdfQkVGT1JFX0NNRDsKKwkJY2hpcC0+cXVpcmtzMiB8PSBTREhDSV9RVUlSSzJfQlJPS0VOX0hTMjAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9hbWQgPSB7CisJLnByb2JlCQk9IGFtZF9wcm9iZSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfaWRzW10gPSB7CiAJewogCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUklDT0gsCkBAIC0xMDQ0LDcgKzEwNzIsMTUgQEAKIAkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCiAJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfbzIsCiAJfSwKLQorCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0FNRCwKKwkJLmRldmljZQkJPSBQQ0lfQU5ZX0lELAorCQkuY2xhc3MJCT0gUENJX0NMQVNTX1NZU1RFTV9TREhDSSA8PCA4LAorCQkuY2xhc3NfbWFzawk9IDB4RkZGRjAwLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfYW1kLAorCX0sCiAJewkvKiBHZW5lcmljIFNEIGhvc3QgY29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFX0NMQVNTKChQQ0lfQ0xBU1NfU1lTVEVNX1NESENJIDw8IDgpLCAweEZGRkYwMCkKIAl9LApAQCAtMTA2NCw3ICsxMTAwLDcgQEAKIHsKIAlzdHJ1Y3Qgc2RoY2lfcGNpX3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLTE7CiAKIAlzbG90ID0gc2RoY2lfcHJpdihob3N0KTsKIAlwZGV2ID0gc2xvdC0+Y2hpcC0+cGRldjsKQEAgLTEwNzYsNyArMTExMiwxNyBAQAogCQkJImRvZXNuJ3QgZnVsbHkgY2xhaW0gdG8gc3VwcG9ydCBpdC5cbiIpOwogCX0KIAotCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpIHsKKwkJaWYgKGhvc3QtPnF1aXJrczIgJiBTREhDSV9RVUlSSzJfQlJPS0VOXzY0X0JJVF9ETUEpIHsKKwkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9VU0VfNjRfQklUX0RNQTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJCQlpZiAocmV0KQorCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IDY0LWJpdCBETUEgbWFza1xuIik7CisJCX0KKwl9CisJaWYgKHJldCkKKwkJcmV0ID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYyLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYyLmMKaW5kZXggYjRjMjNlOS4uZjk4MDA4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2Mi5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjIuYwpAQCAtMTY3LDIzICsxNjcsMTcgQEAKIAlzdHJ1Y3Qgc2RoY2lfcHhhX3BsYXRkYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBOVUxMOwotCXN0cnVjdCBzZGhjaV9weGEgKnB4YSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAKIAlpbnQgcmV0OwogCXN0cnVjdCBjbGsgKmNsazsKIAotCXB4YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZGhjaV9weGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXB4YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAlob3N0ID0gc2RoY2lfcGx0Zm1faW5pdChwZGV2LCBOVUxMLCAwKTsKLQlpZiAoSVNfRVJSKGhvc3QpKSB7Ci0JCWtmcmVlKHB4YSk7CisJaWYgKElTX0VSUihob3N0KSkKIAkJcmV0dXJuIFBUUl9FUlIoaG9zdCk7Ci0JfQorCiAJcGx0Zm1faG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7Ci0JcGx0Zm1faG9zdC0+cHJpdiA9IHB4YTsKKwlwbHRmbV9ob3N0LT5wcml2ID0gTlVMTDsKIAogCWNsayA9IGNsa19nZXQoZGV2LCAiUFhBLVNESENMSyIpOwogCWlmIChJU19FUlIoY2xrKSkgewpAQCAtMjM4LDcgKzIzMiw2IEBACiAJY2xrX3B1dChjbGspOwogZXJyX2Nsa19nZXQ6CiAJc2RoY2lfcGx0Zm1fZnJlZShwZGV2KTsKLQlrZnJlZShweGEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0NiwxNCArMjM5LDEyIEBACiB7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc2RoY2lfcGx0Zm1faG9zdCAqcGx0Zm1faG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7Ci0Jc3RydWN0IHNkaGNpX3B4YSAqcHhhID0gcGx0Zm1faG9zdC0+cHJpdjsKIAogCXNkaGNpX3JlbW92ZV9ob3N0KGhvc3QsIDEpOwogCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBsdGZtX2hvc3QtPmNsayk7CiAJY2xrX3B1dChwbHRmbV9ob3N0LT5jbGspOwogCXNkaGNpX3BsdGZtX2ZyZWUocGRldik7Ci0Ja2ZyZWUocHhhKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2My5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2My5jCmluZGV4IDUwMzZkN2QuLmFkMGJhZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYzLmMKQEAgLTU4LDYgKzU4LDEyIEBACiAjZGVmaW5lIFNEQ0VfTUlTQ19JTlQJCSgxPDwyKQogI2RlZmluZSBTRENFX01JU0NfSU5UX0VOCSgxPDwxKQogCitzdHJ1Y3Qgc2RoY2lfcHhhIHsKKwlzdHJ1Y3QgY2xrICpjbGtfY29yZTsKKwlzdHJ1Y3QgY2xrICpjbGtfaW87CisJdTgJcG93ZXJfbW9kZTsKK307CisKIC8qCiAgKiBUaGVzZSByZWdpc3RlcnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzZWNvbmQgcmVnaXN0ZXIgcmVnaW9uLCBmb3IgdGhlCiAgKiBNQnVzIGJyaWRnZS4KQEAgLTIxMSw2ICsyMTcsNyBAQAogCWNhc2UgTU1DX1RJTUlOR19VSFNfU0RSMTA0OgogCQljdHJsXzIgfD0gU0RIQ0lfQ1RSTF9VSFNfU0RSMTA0IHwgU0RIQ0lfQ1RSTF9WRERfMTgwOwogCQlicmVhazsKKwljYXNlIE1NQ19USU1JTkdfTU1DX0REUjUyOgogCWNhc2UgTU1DX1RJTUlOR19VSFNfRERSNTA6CiAJCWN0cmxfMiB8PSBTREhDSV9DVFJMX1VIU19ERFI1MCB8IFNESENJX0NUUkxfVkREXzE4MDsKIAkJYnJlYWs7CkBAIC0yODMsOSArMjkwLDcgQEAKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IE5VTEw7CiAJc3RydWN0IHNkaGNpX3B4YSAqcHhhID0gTlVMTDsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKLQogCWludCByZXQ7Ci0Jc3RydWN0IGNsayAqY2xrOwogCiAJcHhhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3Qgc2RoY2lfcHhhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFweGEpCkBAIC0zMDUsMTQgKzMxMCwyMCBAQAogCXBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOwogCXBsdGZtX2hvc3QtPnByaXYgPSBweGE7CiAKLQljbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKLQlpZiAoSVNfRVJSKGNsaykpIHsKKwlweGEtPmNsa19pbyA9IGRldm1fY2xrX2dldChkZXYsICJpbyIpOworCWlmIChJU19FUlIocHhhLT5jbGtfaW8pKQorCQlweGEtPmNsa19pbyA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOworCWlmIChJU19FUlIocHhhLT5jbGtfaW8pKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBpbyBjbG9ja1xuIik7Ci0JCXJldCA9IFBUUl9FUlIoY2xrKTsKKwkJcmV0ID0gUFRSX0VSUihweGEtPmNsa19pbyk7CiAJCWdvdG8gZXJyX2Nsa19nZXQ7CiAJfQotCXBsdGZtX2hvc3QtPmNsayA9IGNsazsKLQljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwlwbHRmbV9ob3N0LT5jbGsgPSBweGEtPmNsa19pbzsKKwljbGtfcHJlcGFyZV9lbmFibGUocHhhLT5jbGtfaW8pOworCisJcHhhLT5jbGtfY29yZSA9IGRldm1fY2xrX2dldChkZXYsICJjb3JlIik7CisJaWYgKCFJU19FUlIocHhhLT5jbGtfY29yZSkpCisJCWNsa19wcmVwYXJlX2VuYWJsZShweGEtPmNsa19jb3JlKTsKIAogCS8qIGVuYWJsZSAxLzhWIEREUiBjYXBhYmxlICovCiAJaG9zdC0+bW1jLT5jYXBzIHw9IE1NQ19DQVBfMV84Vl9ERFI7CkBAIC0zODUsNyArMzk2LDkgQEAKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiBlcnJfb2ZfcGFyc2U6CiBlcnJfY2RfcmVxOgotCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19pbyk7CisJaWYgKCFJU19FUlIocHhhLT5jbGtfY29yZSkpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19jb3JlKTsKIGVycl9jbGtfZ2V0OgogZXJyX21idXNfd2luOgogCXNkaGNpX3BsdGZtX2ZyZWUocGRldik7CkBAIC0zOTYsMTIgKzQwOSwxNSBAQAogewogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNkaGNpX3BsdGZtX2hvc3QgKnBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCXN0cnVjdCBzZGhjaV9weGEgKnB4YSA9IHBsdGZtX2hvc3QtPnByaXY7CiAKIAlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOwogCXNkaGNpX3JlbW92ZV9ob3N0KGhvc3QsIDEpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAotCWNsa19kaXNhYmxlX3VucHJlcGFyZShwbHRmbV9ob3N0LT5jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19pbyk7CisJaWYgKCFJU19FUlIocHhhLT5jbGtfY29yZSkpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19jb3JlKTsKIAogCXNkaGNpX3BsdGZtX2ZyZWUocGRldik7CiAKQEAgLTQ0MSwxNSArNDU3LDE2IEBACiB7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2RoY2lfcGx0Zm1faG9zdCAqcGx0Zm1faG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CisJc3RydWN0IHNkaGNpX3B4YSAqcHhhID0gcGx0Zm1faG9zdC0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKHBsdGZtX2hvc3QtPmNsaykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwotCQlob3N0LT5ydW50aW1lX3N1c3BlbmRlZCA9IHRydWU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWhvc3QtPnJ1bnRpbWVfc3VzcGVuZGVkID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBsdGZtX2hvc3QtPmNsayk7Ci0JfQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19pbyk7CisJaWYgKCFJU19FUlIocHhhLT5jbGtfY29yZSkpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19jb3JlKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDU4LDE1ICs0NzUsMTYgQEAKIHsKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzZGhjaV9wbHRmbV9ob3N0ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlzdHJ1Y3Qgc2RoY2lfcHhhICpweGEgPSBwbHRmbV9ob3N0LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAocGx0Zm1faG9zdC0+Y2xrKSB7Ci0JCWNsa19wcmVwYXJlX2VuYWJsZShwbHRmbV9ob3N0LT5jbGspOworCWNsa19wcmVwYXJlX2VuYWJsZShweGEtPmNsa19pbyk7CisJaWYgKCFJU19FUlIocHhhLT5jbGtfY29yZSkpCisJCWNsa19wcmVwYXJlX2VuYWJsZShweGEtPmNsa19jb3JlKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwotCQlob3N0LT5ydW50aW1lX3N1c3BlbmRlZCA9IGZhbHNlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Ci0JfQorCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJaG9zdC0+cnVudGltZV9zdXNwZW5kZWQgPSBmYWxzZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCmluZGV4IDBjZTZlYjE3Li40ZjdhNjMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCkBAIC0zMDAsNiArMzAwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb3VyaG9zdC0+cGRldi0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAl1MTYgY2xrID0gMDsKKwlpbnQgcmV0OwogCiAJaG9zdC0+bW1jLT5hY3R1YWxfY2xvY2sgPSAwOwogCkBAIC0zMTEsNyArMzEyLDEyIEBACiAKIAlzZGhjaV9zM2Nfc2V0X2Nsb2NrKGhvc3QsIGNsb2NrKTsKIAotCWNsa19zZXRfcmF0ZShvdXJob3N0LT5jbGtfYnVzW291cmhvc3QtPmN1cl9jbGtdLCBjbG9jayk7CisJcmV0ID0gY2xrX3NldF9yYXRlKG91cmhvc3QtPmNsa19idXNbb3VyaG9zdC0+Y3VyX2Nsa10sIGNsb2NrKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycihkZXYsICIlczogZmFpbGVkIHRvIHNldCBjbG9jayByYXRlICV1SHpcbiIsCisJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgY2xvY2spOworCQlyZXR1cm47CisJfQogCiAJY2xrID0gU0RIQ0lfQ0xPQ0tfSU5UX0VOOwogCXNkaGNpX3dyaXRldyhob3N0LCBjbGssIFNESENJX0NMT0NLX0NPTlRST0wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCmluZGV4IGFkYTFhM2UuLjczZGU2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKQEAgLTQ0LDggKzQ0LDYgQEAKIAogI2RlZmluZSBNQVhfVFVOSU5HX0xPT1AgNDAKIAotI2RlZmluZSBBRE1BX1NJWkUJKCgxMjggKiAyICsgMSkgKiA0KQotCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnX3F1aXJrcyA9IDA7CiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnX3F1aXJrczI7CiAKQEAgLTExOSwxMCArMTE3LDE3IEBACiAJcHJfZGVidWcoRFJJVkVSX05BTUUgIjogSG9zdCBjdGwyOiAweCUwOHhcbiIsCiAJCXNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTDIpKTsKIAotCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKQotCQlwcl9kZWJ1ZyhEUklWRVJfTkFNRSAiOiBBRE1BIEVycjogMHglMDh4IHwgQURNQSBQdHI6IDB4JTA4eFxuIiwKLQkJICAgICAgIHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0FETUFfRVJST1IpLAotCQkgICAgICAgcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQURNQV9BRERSRVNTKSk7CisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpIHsKKwkJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpCisJCQlwcl9kZWJ1ZyhEUklWRVJfTkFNRSAiOiBBRE1BIEVycjogMHglMDh4IHwgQURNQSBQdHI6IDB4JTA4eCUwOHhcbiIsCisJCQkJIHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0FETUFfRVJST1IpLAorCQkJCSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BRE1BX0FERFJFU1NfSEkpLAorCQkJCSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BRE1BX0FERFJFU1MpKTsKKwkJZWxzZQorCQkJcHJfZGVidWcoRFJJVkVSX05BTUUgIjogQURNQSBFcnI6IDB4JTA4eCB8IEFETUEgUHRyOiAweCUwOHhcbiIsCisJCQkJIHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0FETUFfRVJST1IpLAorCQkJCSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BRE1BX0FERFJFU1MpKTsKKwl9CiAKIAlwcl9kZWJ1ZyhEUklWRVJfTkFNRSAiOiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKIH0KQEAgLTQ0OCwxOCArNDUzLDI2IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoKmZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgc2RoY2lfc2V0X2FkbWFfZGVzYyh1OCAqZGVzYywgdTMyIGFkZHIsIGludCBsZW4sIHVuc2lnbmVkIGNtZCkKK3N0YXRpYyB2b2lkIHNkaGNpX2FkbWFfd3JpdGVfZGVzYyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdm9pZCAqZGVzYywKKwkJCQkgIGRtYV9hZGRyX3QgYWRkciwgaW50IGxlbiwgdW5zaWduZWQgY21kKQogewotCV9fbGUzMiAqZGF0YWRkciA9IChfX2xlMzIgX19mb3JjZSAqKShkZXNjICsgNCk7Ci0JX19sZTE2ICpjbWRsZW4gPSAoX19sZTE2IF9fZm9yY2UgKilkZXNjOworCXN0cnVjdCBzZGhjaV9hZG1hMl82NF9kZXNjICpkbWFfZGVzYyA9IGRlc2M7CiAKLQkvKiBTREhDSSBzcGVjaWZpY2F0aW9uIHNheXMgQURNQSBkZXNjcmlwdG9ycyBzaG91bGQgYmUgNCBieXRlCi0JICogYWxpZ25lZCwgc28gdXNpbmcgMTYgb3IgMzJiaXQgb3BlcmF0aW9ucyBzaG91bGQgYmUgc2FmZS4gKi8KKwkvKiAzMi1iaXQgYW5kIDY0LWJpdCBkZXNjcmlwdG9ycyBoYXZlIHRoZXNlIG1lbWJlcnMgaW4gc2FtZSBwb3NpdGlvbiAqLworCWRtYV9kZXNjLT5jbWQgPSBjcHVfdG9fbGUxNihjbWQpOworCWRtYV9kZXNjLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOworCWRtYV9kZXNjLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoKHUzMilhZGRyKTsKIAotCWNtZGxlblswXSA9IGNwdV90b19sZTE2KGNtZCk7Ci0JY21kbGVuWzFdID0gY3B1X3RvX2xlMTYobGVuKTsKKwlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkKKwkJZG1hX2Rlc2MtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMigodTY0KWFkZHIgPj4gMzIpOworfQogCi0JZGF0YWRkclswXSA9IGNwdV90b19sZTMyKGFkZHIpOworc3RhdGljIHZvaWQgc2RoY2lfYWRtYV9tYXJrX2VuZCh2b2lkICpkZXNjKQoreworCXN0cnVjdCBzZGhjaV9hZG1hMl82NF9kZXNjICpkbWFfZGVzYyA9IGRlc2M7CisKKwkvKiAzMi1iaXQgYW5kIDY0LWJpdCBkZXNjcmlwdG9ycyBoYXZlICdjbWQnIGluIHNhbWUgcG9zaXRpb24gKi8KKwlkbWFfZGVzYy0+Y21kIHw9IGNwdV90b19sZTE2KEFETUEyX0VORCk7CiB9CiAKIHN0YXRpYyBpbnQgc2RoY2lfYWRtYV90YWJsZV9wcmUoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsCkBAIC00NjcsOCArNDgwLDggQEAKIHsKIAlpbnQgZGlyZWN0aW9uOwogCi0JdTggKmRlc2M7Ci0JdTggKmFsaWduOworCXZvaWQgKmRlc2M7CisJdm9pZCAqYWxpZ247CiAJZG1hX2FkZHJfdCBhZGRyOwogCWRtYV9hZGRyX3QgYWxpZ25fYWRkcjsKIAlpbnQgbGVuLCBvZmZzZXQ7CkBAIC00ODksMTcgKzUwMiwxNyBAQAogCQlkaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOwogCiAJaG9zdC0+YWxpZ25fYWRkciA9IGRtYV9tYXBfc2luZ2xlKG1tY19kZXYoaG9zdC0+bW1jKSwKLQkJaG9zdC0+YWxpZ25fYnVmZmVyLCAxMjggKiA0LCBkaXJlY3Rpb24pOworCQlob3N0LT5hbGlnbl9idWZmZXIsIGhvc3QtPmFsaWduX2J1ZmZlcl9zeiwgZGlyZWN0aW9uKTsKIAlpZiAoZG1hX21hcHBpbmdfZXJyb3IobW1jX2Rldihob3N0LT5tbWMpLCBob3N0LT5hbGlnbl9hZGRyKSkKIAkJZ290byBmYWlsOwotCUJVR19PTihob3N0LT5hbGlnbl9hZGRyICYgMHgzKTsKKwlCVUdfT04oaG9zdC0+YWxpZ25fYWRkciAmIGhvc3QtPmFsaWduX21hc2spOwogCiAJaG9zdC0+c2dfY291bnQgPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwKIAkJZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwgZGlyZWN0aW9uKTsKIAlpZiAoaG9zdC0+c2dfY291bnQgPT0gMCkKIAkJZ290byB1bm1hcF9hbGlnbjsKIAotCWRlc2MgPSBob3N0LT5hZG1hX2Rlc2M7CisJZGVzYyA9IGhvc3QtPmFkbWFfdGFibGU7CiAJYWxpZ24gPSBob3N0LT5hbGlnbl9idWZmZXI7CiAKIAlhbGlnbl9hZGRyID0gaG9zdC0+YWxpZ25fYWRkcjsKQEAgLTUxNSwyNCArNTI4LDI3IEBACiAJCSAqIHRoZSAodXAgdG8gdGhyZWUpIGJ5dGVzIHRoYXQgc2NyZXcgdXAgdGhlCiAJCSAqIGFsaWdubWVudC4KIAkJICovCi0JCW9mZnNldCA9ICg0IC0gKGFkZHIgJiAweDMpKSAmIDB4MzsKKwkJb2Zmc2V0ID0gKGhvc3QtPmFsaWduX3N6IC0gKGFkZHIgJiBob3N0LT5hbGlnbl9tYXNrKSkgJgorCQkJIGhvc3QtPmFsaWduX21hc2s7CiAJCWlmIChvZmZzZXQpIHsKIAkJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSB7CiAJCQkJYnVmZmVyID0gc2RoY2lfa21hcF9hdG9taWMoc2csICZmbGFncyk7Ci0JCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgUEFHRV9NQVNLKSA+IChQQUdFX1NJWkUgLSAzKSk7CisJCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgKFBBR0VfU0laRSAtIDEpKSA+CisJCQkJCShQQUdFX1NJWkUgLSBvZmZzZXQpKTsKIAkJCQltZW1jcHkoYWxpZ24sIGJ1ZmZlciwgb2Zmc2V0KTsKIAkJCQlzZGhjaV9rdW5tYXBfYXRvbWljKGJ1ZmZlciwgJmZsYWdzKTsKIAkJCX0KIAogCQkJLyogdHJhbiwgdmFsaWQgKi8KLQkJCXNkaGNpX3NldF9hZG1hX2Rlc2MoZGVzYywgYWxpZ25fYWRkciwgb2Zmc2V0LCAweDIxKTsKKwkJCXNkaGNpX2FkbWFfd3JpdGVfZGVzYyhob3N0LCBkZXNjLCBhbGlnbl9hZGRyLCBvZmZzZXQsCisJCQkJCSAgICAgIEFETUEyX1RSQU5fVkFMSUQpOwogCiAJCQlCVUdfT04ob2Zmc2V0ID4gNjU1MzYpOwogCi0JCQlhbGlnbiArPSA0OwotCQkJYWxpZ25fYWRkciArPSA0OworCQkJYWxpZ24gKz0gaG9zdC0+YWxpZ25fc3o7CisJCQlhbGlnbl9hZGRyICs9IGhvc3QtPmFsaWduX3N6OwogCi0JCQlkZXNjICs9IDg7CisJCQlkZXNjICs9IGhvc3QtPmRlc2Nfc3o7CiAKIAkJCWFkZHIgKz0gb2Zmc2V0OwogCQkJbGVuIC09IG9mZnNldDsKQEAgLTU0MSwyMyArNTU3LDIzIEBACiAJCUJVR19PTihsZW4gPiA2NTUzNik7CiAKIAkJLyogdHJhbiwgdmFsaWQgKi8KLQkJc2RoY2lfc2V0X2FkbWFfZGVzYyhkZXNjLCBhZGRyLCBsZW4sIDB4MjEpOwotCQlkZXNjICs9IDg7CisJCXNkaGNpX2FkbWFfd3JpdGVfZGVzYyhob3N0LCBkZXNjLCBhZGRyLCBsZW4sIEFETUEyX1RSQU5fVkFMSUQpOworCQlkZXNjICs9IGhvc3QtPmRlc2Nfc3o7CiAKIAkJLyoKIAkJICogSWYgdGhpcyB0cmlnZ2VycyB0aGVuIHdlIGhhdmUgYSBjYWxjdWxhdGlvbiBidWcKIAkJICogc29tZXdoZXJlLiA6LwogCQkgKi8KLQkJV0FSTl9PTigoZGVzYyAtIGhvc3QtPmFkbWFfZGVzYykgPiBBRE1BX1NJWkUpOworCQlXQVJOX09OKChkZXNjIC0gaG9zdC0+YWRtYV90YWJsZSkgPj0gaG9zdC0+YWRtYV90YWJsZV9zeik7CiAJfQogCiAJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX05PX0VOREFUVFJfSU5fTk9QREVTQykgewogCQkvKgogCQkqIE1hcmsgdGhlIGxhc3QgZGVzY3JpcHRvciBhcyB0aGUgdGVybWluYXRpbmcgZGVzY3JpcHRvcgogCQkqLwotCQlpZiAoZGVzYyAhPSBob3N0LT5hZG1hX2Rlc2MpIHsKLQkJCWRlc2MgLT0gODsKLQkJCWRlc2NbMF0gfD0gMHgyOyAvKiBlbmQgKi8KKwkJaWYgKGRlc2MgIT0gaG9zdC0+YWRtYV90YWJsZSkgeworCQkJZGVzYyAtPSBob3N0LT5kZXNjX3N6OworCQkJc2RoY2lfYWRtYV9tYXJrX2VuZChkZXNjKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qCkBAIC01NjUsNyArNTgxLDcgQEAKIAkJKi8KIAogCQkvKiBub3AsIGVuZCwgdmFsaWQgKi8KLQkJc2RoY2lfc2V0X2FkbWFfZGVzYyhkZXNjLCAwLCAwLCAweDMpOworCQlzZGhjaV9hZG1hX3dyaXRlX2Rlc2MoaG9zdCwgZGVzYywgMCwgMCwgQURNQTJfTk9QX0VORF9WQUxJRCk7CiAJfQogCiAJLyoKQEAgLTU3MywxNCArNTg5LDE0IEBACiAJICovCiAJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpIHsKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UobW1jX2Rldihob3N0LT5tbWMpLAotCQkJaG9zdC0+YWxpZ25fYWRkciwgMTI4ICogNCwgZGlyZWN0aW9uKTsKKwkJCWhvc3QtPmFsaWduX2FkZHIsIGhvc3QtPmFsaWduX2J1ZmZlcl9zeiwgZGlyZWN0aW9uKTsKIAl9CiAKIAlyZXR1cm4gMDsKIAogdW5tYXBfYWxpZ246CiAJZG1hX3VubWFwX3NpbmdsZShtbWNfZGV2KGhvc3QtPm1tYyksIGhvc3QtPmFsaWduX2FkZHIsCi0JCTEyOCAqIDQsIGRpcmVjdGlvbik7CisJCWhvc3QtPmFsaWduX2J1ZmZlcl9zeiwgZGlyZWN0aW9uKTsKIGZhaWw6CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC01OTIsNyArNjA4LDcgQEAKIAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IGksIHNpemU7Ci0JdTggKmFsaWduOworCXZvaWQgKmFsaWduOwogCWNoYXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgaGFzX3VuYWxpZ25lZDsKQEAgLTYwMywxMiArNjE5LDEyIEBACiAJCWRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAKIAlkbWFfdW5tYXBfc2luZ2xlKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+YWxpZ25fYWRkciwKLQkJMTI4ICogNCwgZGlyZWN0aW9uKTsKKwkJaG9zdC0+YWxpZ25fYnVmZmVyX3N6LCBkaXJlY3Rpb24pOwogCiAJLyogRG8gYSBxdWljayBzY2FuIG9mIHRoZSBTRyBsaXN0IGZvciBhbnkgdW5hbGlnbmVkIG1hcHBpbmdzICovCiAJaGFzX3VuYWxpZ25lZCA9IGZhbHNlOwogCWZvcl9lYWNoX3NnKGRhdGEtPnNnLCBzZywgaG9zdC0+c2dfY291bnQsIGkpCi0JCWlmIChzZ19kbWFfYWRkcmVzcyhzZykgJiAzKSB7CisJCWlmIChzZ19kbWFfYWRkcmVzcyhzZykgJiBob3N0LT5hbGlnbl9tYXNrKSB7CiAJCQloYXNfdW5hbGlnbmVkID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CkBAIC02MjAsMTUgKzYzNiwxNyBAQAogCQlhbGlnbiA9IGhvc3QtPmFsaWduX2J1ZmZlcjsKIAogCQlmb3JfZWFjaF9zZyhkYXRhLT5zZywgc2csIGhvc3QtPnNnX2NvdW50LCBpKSB7Ci0JCQlpZiAoc2dfZG1hX2FkZHJlc3Moc2cpICYgMHgzKSB7Ci0JCQkJc2l6ZSA9IDQgLSAoc2dfZG1hX2FkZHJlc3Moc2cpICYgMHgzKTsKKwkJCWlmIChzZ19kbWFfYWRkcmVzcyhzZykgJiBob3N0LT5hbGlnbl9tYXNrKSB7CisJCQkJc2l6ZSA9IGhvc3QtPmFsaWduX3N6IC0KKwkJCQkgICAgICAgKHNnX2RtYV9hZGRyZXNzKHNnKSAmIGhvc3QtPmFsaWduX21hc2spOwogCiAJCQkJYnVmZmVyID0gc2RoY2lfa21hcF9hdG9taWMoc2csICZmbGFncyk7Ci0JCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgUEFHRV9NQVNLKSA+IChQQUdFX1NJWkUgLSAzKSk7CisJCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgKFBBR0VfU0laRSAtIDEpKSA+CisJCQkJCShQQUdFX1NJWkUgLSBzaXplKSk7CiAJCQkJbWVtY3B5KGJ1ZmZlciwgYWxpZ24sIHNpemUpOwogCQkJCXNkaGNpX2t1bm1hcF9hdG9taWMoYnVmZmVyLCAmZmxhZ3MpOwogCi0JCQkJYWxpZ24gKz0gNDsKKwkJCQlhbGlnbiArPSBob3N0LT5hbGlnbl9zejsKIAkJCX0KIAkJfQogCX0KQEAgLTgyMiw2ICs4NDAsMTAgQEAKIAkJCX0gZWxzZSB7CiAJCQkJc2RoY2lfd3JpdGVsKGhvc3QsIGhvc3QtPmFkbWFfYWRkciwKIAkJCQkJU0RIQ0lfQURNQV9BRERSRVNTKTsKKwkJCQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkKKwkJCQkJc2RoY2lfd3JpdGVsKGhvc3QsCisJCQkJCQkgICAgICh1NjQpaG9zdC0+YWRtYV9hZGRyID4+IDMyLAorCQkJCQkJICAgICBTREhDSV9BRE1BX0FERFJFU1NfSEkpOwogCQkJfQogCQl9IGVsc2UgewogCQkJaW50IHNnX2NudDsKQEAgLTg1NSwxMCArODc3LDE0IEBACiAJCWN0cmwgPSBzZGhjaV9yZWFkYihob3N0LCBTREhDSV9IT1NUX0NPTlRST0wpOwogCQljdHJsICY9IH5TREhDSV9DVFJMX0RNQV9NQVNLOwogCQlpZiAoKGhvc3QtPmZsYWdzICYgU0RIQ0lfUkVRX1VTRV9ETUEpICYmCi0JCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkpCi0JCQljdHJsIHw9IFNESENJX0NUUkxfQURNQTMyOwotCQllbHNlCisJCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkpIHsKKwkJCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV82NF9CSVRfRE1BKQorCQkJCWN0cmwgfD0gU0RIQ0lfQ1RSTF9BRE1BNjQ7CisJCQllbHNlCisJCQkJY3RybCB8PSBTREhDSV9DVFJMX0FETUEzMjsKKwkJfSBlbHNlIHsKIAkJCWN0cmwgfD0gU0RIQ0lfQ1RSTF9TRE1BOworCQl9CiAJCXNkaGNpX3dyaXRlYihob3N0LCBjdHJsLCBTREhDSV9IT1NUX0NPTlRST0wpOwogCX0KIApAQCAtODg5LDEwICs5MTUsMTUgQEAKIAlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBjbWQtPmRhdGE7CiAKIAlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWlmIChob3N0LT5xdWlya3MyICYKKwkJCVNESENJX1FVSVJLMl9DTEVBUl9UUkFOU0ZFUk1PREVfUkVHX0JFRk9SRV9DTUQpIHsKKwkJCXNkaGNpX3dyaXRldyhob3N0LCAweDAsIFNESENJX1RSQU5TRkVSX01PREUpOworCQl9IGVsc2UgewogCQkvKiBjbGVhciBBdXRvIENNRCBzZXR0aW5ncyBmb3Igbm8gZGF0YSBDTURzICovCi0JCW1vZGUgPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKLQkJc2RoY2lfd3JpdGV3KGhvc3QsIG1vZGUgJiB+KFNESENJX1RSTlNfQVVUT19DTUQxMiB8CisJCQltb2RlID0gc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfVFJBTlNGRVJfTU9ERSk7CisJCQlzZGhjaV93cml0ZXcoaG9zdCwgbW9kZSAmIH4oU0RIQ0lfVFJOU19BVVRPX0NNRDEyIHwKIAkJCQlTREhDSV9UUk5TX0FVVE9fQ01EMjMpLCBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKKwkJfQogCQlyZXR1cm47CiAJfQogCkBAIC0xMTE3LDYgKzExNDgsOSBAQAogCWNhc2UgTU1DX1RJTUlOR19VSFNfRERSNTA6CiAJCXByZXNldCA9IHNkaGNpX3JlYWR3KGhvc3QsIFNESENJX1BSRVNFVF9GT1JfRERSNTApOwogCQlicmVhazsKKwljYXNlIE1NQ19USU1JTkdfTU1DX0hTNDAwOgorCQlwcmVzZXQgPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9QUkVTRVRfRk9SX0hTNDAwKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfd2FybigiJXM6IEludmFsaWQgVUhTLUkgbW9kZSBzZWxlY3RlZFxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKQEAgLTE0NDQsNiArMTQ3OCw4IEBACiAJZWxzZSBpZiAoKHRpbWluZyA9PSBNTUNfVElNSU5HX1VIU19ERFI1MCkgfHwKIAkJICh0aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfRERSNTIpKQogCQljdHJsXzIgfD0gU0RIQ0lfQ1RSTF9VSFNfRERSNTA7CisJZWxzZSBpZiAodGltaW5nID09IE1NQ19USU1JTkdfTU1DX0hTNDAwKQorCQljdHJsXzIgfD0gU0RIQ0lfQ1RSTF9IUzQwMDsgLyogTm9uLXN0YW5kYXJkICovCiAJc2RoY2lfd3JpdGV3KGhvc3QsIGN0cmxfMiwgU0RIQ0lfSE9TVF9DT05UUk9MMik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzZGhjaV9zZXRfdWhzX3NpZ25hbGluZyk7CkBAIC0xNTE1LDcgKzE1NTEsOCBAQAogCQl1MTYgY2xrLCBjdHJsXzI7CiAKIAkJLyogSW4gY2FzZSBvZiBVSFMtSSBtb2Rlcywgc2V0IEhpZ2ggU3BlZWQgRW5hYmxlICovCi0JCWlmICgoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfSFMyMDApIHx8CisJCWlmICgoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfSFM0MDApIHx8CisJCSAgICAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfSFMyMDApIHx8CiAJCSAgICAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfRERSNTIpIHx8CiAJCSAgICAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19VSFNfU0RSNTApIHx8CiAJCSAgICAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19VSFNfU0RSMTA0KSB8fApAQCAtMTg2Miw2ICsxODk5LDcgQEAKIAkgKiB0dW5pbmcgZnVuY3Rpb24gaGFzIHRvIGJlIGV4ZWN1dGVkLgogCSAqLwogCXN3aXRjaCAoaG9zdC0+dGltaW5nKSB7CisJY2FzZSBNTUNfVElNSU5HX01NQ19IUzQwMDoKIAljYXNlIE1NQ19USU1JTkdfTU1DX0hTMjAwOgogCWNhc2UgTU1DX1RJTUlOR19VSFNfU0RSMTA0OgogCQlicmVhazsKQEAgLTIxNDQsOSArMjE4MiwxMCBAQAogCSAqLwogCWlmICghKGhvc3QtPmZsYWdzICYgU0RIQ0lfREVWSUNFX0RFQUQpICYmCiAJICAgICgobXJxLT5jbWQgJiYgbXJxLT5jbWQtPmVycm9yKSB8fAotCQkgKG1ycS0+ZGF0YSAmJiAobXJxLT5kYXRhLT5lcnJvciB8fAotCQkgIChtcnEtPmRhdGEtPnN0b3AgJiYgbXJxLT5kYXRhLT5zdG9wLT5lcnJvcikpKSB8fAotCQkgICAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfUkVTRVRfQUZURVJfUkVRVUVTVCkpKSB7CisJICAgICAobXJxLT5zYmMgJiYgbXJxLT5zYmMtPmVycm9yKSB8fAorCSAgICAgKG1ycS0+ZGF0YSAmJiAoKG1ycS0+ZGF0YS0+ZXJyb3IgJiYgIW1ycS0+ZGF0YS0+c3RvcCkgfHwKKwkJCSAgICAobXJxLT5kYXRhLT5zdG9wICYmIG1ycS0+ZGF0YS0+c3RvcC0+ZXJyb3IpKSkgfHwKKwkgICAgIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19SRVNFVF9BRlRFUl9SRVFVRVNUKSkpIHsKIAogCQkvKiBTb21lIGNvbnRyb2xsZXJzIG5lZWQgdGhpcyBraWNrIG9yIHJlc2V0IHdvbid0IHdvcmsgaGVyZSAqLwogCQlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfQ0xPQ0tfQkVGT1JFX1JFU0VUKQpAQCAtMjI4MiwzMiArMjMyMSwzNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX01NQ19ERUJVRwotc3RhdGljIHZvaWQgc2RoY2lfc2hvd19hZG1hX2Vycm9yKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgc2RoY2lfYWRtYV9zaG93X2Vycm9yKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQogewogCWNvbnN0IGNoYXIgKm5hbWUgPSBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKTsKLQl1OCAqZGVzYyA9IGhvc3QtPmFkbWFfZGVzYzsKLQlfX2xlMzIgKmRtYTsKLQlfX2xlMTYgKmxlbjsKLQl1OCBhdHRyOworCXZvaWQgKmRlc2MgPSBob3N0LT5hZG1hX3RhYmxlOwogCiAJc2RoY2lfZHVtcHJlZ3MoaG9zdCk7CiAKIAl3aGlsZSAodHJ1ZSkgewotCQlkbWEgPSAoX19sZTMyICopKGRlc2MgKyA0KTsKLQkJbGVuID0gKF9fbGUxNiAqKShkZXNjICsgMik7Ci0JCWF0dHIgPSAqZGVzYzsKKwkJc3RydWN0IHNkaGNpX2FkbWEyXzY0X2Rlc2MgKmRtYV9kZXNjID0gZGVzYzsKIAotCQlEQkcoIiVzOiAlcDogRE1BIDB4JTA4eCwgTEVOIDB4JTA0eCwgQXR0cj0weCUwMnhcbiIsCi0JCSAgICBuYW1lLCBkZXNjLCBsZTMyX3RvX2NwdSgqZG1hKSwgbGUxNl90b19jcHUoKmxlbiksIGF0dHIpOworCQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkKKwkJCURCRygiJXM6ICVwOiBETUEgMHglMDh4JTA4eCwgTEVOIDB4JTA0eCwgQXR0cj0weCUwMnhcbiIsCisJCQkgICAgbmFtZSwgZGVzYywgbGUzMl90b19jcHUoZG1hX2Rlc2MtPmFkZHJfaGkpLAorCQkJICAgIGxlMzJfdG9fY3B1KGRtYV9kZXNjLT5hZGRyX2xvKSwKKwkJCSAgICBsZTE2X3RvX2NwdShkbWFfZGVzYy0+bGVuKSwKKwkJCSAgICBsZTE2X3RvX2NwdShkbWFfZGVzYy0+Y21kKSk7CisJCWVsc2UKKwkJCURCRygiJXM6ICVwOiBETUEgMHglMDh4LCBMRU4gMHglMDR4LCBBdHRyPTB4JTAyeFxuIiwKKwkJCSAgICBuYW1lLCBkZXNjLCBsZTMyX3RvX2NwdShkbWFfZGVzYy0+YWRkcl9sbyksCisJCQkgICAgbGUxNl90b19jcHUoZG1hX2Rlc2MtPmxlbiksCisJCQkgICAgbGUxNl90b19jcHUoZG1hX2Rlc2MtPmNtZCkpOwogCi0JCWRlc2MgKz0gODsKKwkJZGVzYyArPSBob3N0LT5kZXNjX3N6OwogCi0JCWlmIChhdHRyICYgMikKKwkJaWYgKGRtYV9kZXNjLT5jbWQgJiBjcHVfdG9fbGUxNihBRE1BMl9FTkQpKQogCQkJYnJlYWs7CiAJfQogfQogI2Vsc2UKLXN0YXRpYyB2b2lkIHNkaGNpX3Nob3dfYWRtYV9lcnJvcihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkgeyB9CitzdGF0aWMgdm9pZCBzZGhjaV9hZG1hX3Nob3dfZXJyb3Ioc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpIHsgfQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHNkaGNpX2RhdGFfaXJxKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgaW50bWFzaykKQEAgLTIzNzAsNyArMjQxMyw3IEBACiAJCWhvc3QtPmRhdGEtPmVycm9yID0gLUVJTFNFUTsKIAllbHNlIGlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0FETUFfRVJST1IpIHsKIAkJcHJfZXJyKCIlczogQURNQSBlcnJvclxuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwotCQlzZGhjaV9zaG93X2FkbWFfZXJyb3IoaG9zdCk7CisJCXNkaGNpX2FkbWFfc2hvd19lcnJvcihob3N0KTsKIAkJaG9zdC0+ZGF0YS0+ZXJyb3IgPSAtRUlPOwogCQlpZiAoaG9zdC0+b3BzLT5hZG1hX3dvcmthcm91bmQpCiAJCQlob3N0LT5vcHMtPmFkbWFfd29ya2Fyb3VuZChob3N0LCBpbnRtYXNrKTsKQEAgLTI4NDksNiArMjg5MiwxNiBAQAogCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFX0FETUE7CiAJfQogCisJLyoKKwkgKiBJdCBpcyBhc3N1bWVkIHRoYXQgYSA2NC1iaXQgY2FwYWJsZSBkZXZpY2UgaGFzIHNldCBhIDY0LWJpdCBETUEgbWFzaworCSAqIGFuZCAqbXVzdCogZG8gNjQtYml0IERNQS4gIEEgZHJpdmVyIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hhbmdlCisJICogdGhhdCBkdXJpbmcgdGhlIGZpcnN0IGNhbGwgdG8gLT5lbmFibGVfZG1hKCkuICBTaW1pbGFybHkKKwkgKiBTREhDSV9RVUlSSzJfQlJPS0VOXzY0X0JJVF9ETUEgbXVzdCBiZSBsZWZ0IHRvIHRoZSBkcml2ZXJzIHRvCisJICogaW1wbGVtZW50LgorCSAqLworCWlmIChzZGhjaV9yZWFkbChob3N0LCBTREhDSV9DQVBBQklMSVRJRVMpICYgU0RIQ0lfQ0FOXzY0QklUKQorCQlob3N0LT5mbGFncyB8PSBTREhDSV9VU0VfNjRfQklUX0RNQTsKKwogCWlmIChob3N0LT5mbGFncyAmIChTREhDSV9VU0VfU0RNQSB8IFNESENJX1VTRV9BRE1BKSkgewogCQlpZiAoaG9zdC0+b3BzLT5lbmFibGVfZG1hKSB7CiAJCQlpZiAoaG9zdC0+b3BzLT5lbmFibGVfZG1hKGhvc3QpKSB7CkBAIC0yODYwLDMzICsyOTEzLDU2IEBACiAJCX0KIAl9CiAKKwkvKiBTRE1BIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IERNQSAqLworCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV82NF9CSVRfRE1BKQorCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFX1NETUE7CisKIAlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkgewogCQkvKgotCQkgKiBXZSBuZWVkIHRvIGFsbG9jYXRlIGRlc2NyaXB0b3JzIGZvciBhbGwgc2cgZW50cmllcwotCQkgKiAoMTI4KSBhbmQgcG90ZW50aWFsbHkgb25lIGFsaWdubWVudCB0cmFuc2ZlciBmb3IKLQkJICogZWFjaCBvZiB0aG9zZSBlbnRyaWVzLgorCQkgKiBUaGUgRE1BIGRlc2NyaXB0b3IgdGFibGUgc2l6ZSBpcyBjYWxjdWxhdGVkIGFzIHRoZSBtYXhpbXVtCisJCSAqIG51bWJlciBvZiBzZWdtZW50cyB0aW1lcyAyLCB0byBhbGxvdyBmb3IgYW4gYWxpZ25tZW50CisJCSAqIGRlc2NyaXB0b3IgZm9yIGVhY2ggc2VnbWVudCwgcGx1cyAxIGZvciBhIG5vcCBlbmQgZGVzY3JpcHRvciwKKwkJICogYWxsIG11bHRpcGxlZCBieSB0aGUgZGVzY3JpcHRvciBzaXplLgogCQkgKi8KLQkJaG9zdC0+YWRtYV9kZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KG1tY19kZXYobW1jKSwKLQkJCQkJCSAgICAgQURNQV9TSVpFLCAmaG9zdC0+YWRtYV9hZGRyLAotCQkJCQkJICAgICBHRlBfS0VSTkVMKTsKLQkJaG9zdC0+YWxpZ25fYnVmZmVyID0ga21hbGxvYygxMjggKiA0LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFob3N0LT5hZG1hX2Rlc2MgfHwgIWhvc3QtPmFsaWduX2J1ZmZlcikgewotCQkJZG1hX2ZyZWVfY29oZXJlbnQobW1jX2RldihtbWMpLCBBRE1BX1NJWkUsCi0JCQkJCSAgaG9zdC0+YWRtYV9kZXNjLCBob3N0LT5hZG1hX2FkZHIpOworCQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkgeworCQkJaG9zdC0+YWRtYV90YWJsZV9zeiA9IChTREhDSV9NQVhfU0VHUyAqIDIgKyAxKSAqCisJCQkJCSAgICAgIFNESENJX0FETUEyXzY0X0RFU0NfU1o7CisJCQlob3N0LT5hbGlnbl9idWZmZXJfc3ogPSBTREhDSV9NQVhfU0VHUyAqCisJCQkJCQlTREhDSV9BRE1BMl82NF9BTElHTjsKKwkJCWhvc3QtPmRlc2Nfc3ogPSBTREhDSV9BRE1BMl82NF9ERVNDX1NaOworCQkJaG9zdC0+YWxpZ25fc3ogPSBTREhDSV9BRE1BMl82NF9BTElHTjsKKwkJCWhvc3QtPmFsaWduX21hc2sgPSBTREhDSV9BRE1BMl82NF9BTElHTiAtIDE7CisJCX0gZWxzZSB7CisJCQlob3N0LT5hZG1hX3RhYmxlX3N6ID0gKFNESENJX01BWF9TRUdTICogMiArIDEpICoKKwkJCQkJICAgICAgU0RIQ0lfQURNQTJfMzJfREVTQ19TWjsKKwkJCWhvc3QtPmFsaWduX2J1ZmZlcl9zeiA9IFNESENJX01BWF9TRUdTICoKKwkJCQkJCVNESENJX0FETUEyXzMyX0FMSUdOOworCQkJaG9zdC0+ZGVzY19zeiA9IFNESENJX0FETUEyXzMyX0RFU0NfU1o7CisJCQlob3N0LT5hbGlnbl9zeiA9IFNESENJX0FETUEyXzMyX0FMSUdOOworCQkJaG9zdC0+YWxpZ25fbWFzayA9IFNESENJX0FETUEyXzMyX0FMSUdOIC0gMTsKKwkJfQorCQlob3N0LT5hZG1hX3RhYmxlID0gZG1hX2FsbG9jX2NvaGVyZW50KG1tY19kZXYobW1jKSwKKwkJCQkJCSAgICAgIGhvc3QtPmFkbWFfdGFibGVfc3osCisJCQkJCQkgICAgICAmaG9zdC0+YWRtYV9hZGRyLAorCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWhvc3QtPmFsaWduX2J1ZmZlciA9IGttYWxsb2MoaG9zdC0+YWxpZ25fYnVmZmVyX3N6LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFob3N0LT5hZG1hX3RhYmxlIHx8ICFob3N0LT5hbGlnbl9idWZmZXIpIHsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KG1tY19kZXYobW1jKSwgaG9zdC0+YWRtYV90YWJsZV9zeiwKKwkJCQkJICBob3N0LT5hZG1hX3RhYmxlLCBob3N0LT5hZG1hX2FkZHIpOwogCQkJa2ZyZWUoaG9zdC0+YWxpZ25fYnVmZmVyKTsKIAkJCXByX3dhcm4oIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgQURNQSBidWZmZXJzIC0gZmFsbGluZyBiYWNrIHRvIHN0YW5kYXJkIERNQVxuIiwKIAkJCQltbWNfaG9zdG5hbWUobW1jKSk7CiAJCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFX0FETUE7Ci0JCQlob3N0LT5hZG1hX2Rlc2MgPSBOVUxMOworCQkJaG9zdC0+YWRtYV90YWJsZSA9IE5VTEw7CiAJCQlob3N0LT5hbGlnbl9idWZmZXIgPSBOVUxMOwotCQl9IGVsc2UgaWYgKGhvc3QtPmFkbWFfYWRkciAmIDMpIHsKKwkJfSBlbHNlIGlmIChob3N0LT5hZG1hX2FkZHIgJiBob3N0LT5hbGlnbl9tYXNrKSB7CiAJCQlwcl93YXJuKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGFsaWduZWQgQURNQSBkZXNjcmlwdG9yXG4iLAogCQkJCW1tY19ob3N0bmFtZShtbWMpKTsKIAkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9VU0VfQURNQTsKLQkJCWRtYV9mcmVlX2NvaGVyZW50KG1tY19kZXYobW1jKSwgQURNQV9TSVpFLAotCQkJCQkgIGhvc3QtPmFkbWFfZGVzYywgaG9zdC0+YWRtYV9hZGRyKTsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KG1tY19kZXYobW1jKSwgaG9zdC0+YWRtYV90YWJsZV9zeiwKKwkJCQkJICBob3N0LT5hZG1hX3RhYmxlLCBob3N0LT5hZG1hX2FkZHIpOwogCQkJa2ZyZWUoaG9zdC0+YWxpZ25fYnVmZmVyKTsKLQkJCWhvc3QtPmFkbWFfZGVzYyA9IE5VTEw7CisJCQlob3N0LT5hZG1hX3RhYmxlID0gTlVMTDsKIAkJCWhvc3QtPmFsaWduX2J1ZmZlciA9IE5VTEw7CiAJCX0KIAl9CkBAIC0zMDI3LDcgKzMxMDMsNyBAQAogCQlpZiAocmV0KSB7CiAJCQlwcl93YXJuKCIlczogRmFpbGVkIHRvIGVuYWJsZSB2cW1tYyByZWd1bGF0b3I6ICVkXG4iLAogCQkJCW1tY19ob3N0bmFtZShtbWMpLCByZXQpOwotCQkJbW1jLT5zdXBwbHkudnFtbWMgPSBOVUxMOworCQkJbW1jLT5zdXBwbHkudnFtbWMgPSBFUlJfUFRSKC1FSU5WQUwpOwogCQl9CiAJfQogCkBAIC0zMDQ2LDE2ICszMTIyLDIxIEBACiAJCS8qIFNEMy4wOiBTRFIxMDQgaXMgc3VwcG9ydGVkIHNvIChmb3IgZU1NQykgdGhlIGNhcHMyCiAJCSAqIGZpZWxkIGNhbiBiZSBwcm9tb3RlZCB0byBzdXBwb3J0IEhTMjAwLgogCQkgKi8KLQkJaWYgKCEoaG9zdC0+cXVpcmtzMiAmIFNESENJX1FVSVJLMl9CUk9LRU5fSFMyMDApKSB7CisJCWlmICghKGhvc3QtPnF1aXJrczIgJiBTREhDSV9RVUlSSzJfQlJPS0VOX0hTMjAwKSkKIAkJCW1tYy0+Y2FwczIgfD0gTU1DX0NBUDJfSFMyMDA7Ci0JCQlpZiAoSVNfRVJSKG1tYy0+c3VwcGx5LnZxbW1jKSB8fAotCQkJCQkhcmVndWxhdG9yX2lzX3N1cHBvcnRlZF92b2x0YWdlCi0JCQkJCShtbWMtPnN1cHBseS52cW1tYywgMTEwMDAwMCwgMTMwMDAwMCkpCi0JCQkJbW1jLT5jYXBzMiAmPSB+TU1DX0NBUDJfSFMyMDBfMV8yVl9TRFI7Ci0JCX0KIAl9IGVsc2UgaWYgKGNhcHNbMV0gJiBTREhDSV9TVVBQT1JUX1NEUjUwKQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9VSFNfU0RSNTA7CiAKKwlpZiAoaG9zdC0+cXVpcmtzMiAmIFNESENJX1FVSVJLMl9DQVBTX0JJVDYzX0ZPUl9IUzQwMCAmJgorCSAgICAoY2Fwc1sxXSAmIFNESENJX1NVUFBPUlRfSFM0MDApKQorCQltbWMtPmNhcHMyIHw9IE1NQ19DQVAyX0hTNDAwOworCisJaWYgKChtbWMtPmNhcHMyICYgTU1DX0NBUDJfSFNYMDBfMV8yVikgJiYKKwkgICAgKElTX0VSUihtbWMtPnN1cHBseS52cW1tYykgfHwKKwkgICAgICFyZWd1bGF0b3JfaXNfc3VwcG9ydGVkX3ZvbHRhZ2UobW1jLT5zdXBwbHkudnFtbWMsIDExMDAwMDAsCisJCQkJCSAgICAgMTMwMDAwMCkpKQorCQltbWMtPmNhcHMyICY9IH5NTUNfQ0FQMl9IU1gwMF8xXzJWOworCiAJaWYgKChjYXBzWzFdICYgU0RIQ0lfU1VQUE9SVF9ERFI1MCkgJiYKIAkJIShob3N0LT5xdWlya3MyICYgU0RIQ0lfUVVJUksyX0JST0tFTl9ERFI1MCkpCiAJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX1VIU19ERFI1MDsKQEAgLTMxNzUsMTEgKzMyNTYsMTEgQEAKIAkgKiBjYW4gZG8gc2NhdHRlci9nYXRoZXIgb3Igbm90LgogCSAqLwogCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKQotCQltbWMtPm1heF9zZWdzID0gMTI4OworCQltbWMtPm1heF9zZWdzID0gU0RIQ0lfTUFYX1NFR1M7CiAJZWxzZSBpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfU0RNQSkKIAkJbW1jLT5tYXhfc2VncyA9IDE7CiAJZWxzZSAvKiBQSU8gKi8KLQkJbW1jLT5tYXhfc2VncyA9IDEyODsKKwkJbW1jLT5tYXhfc2VncyA9IFNESENJX01BWF9TRUdTOwogCiAJLyoKIAkgKiBNYXhpbXVtIG51bWJlciBvZiBzZWN0b3JzIGluIG9uZSB0cmFuc2Zlci4gTGltaXRlZCBieSBETUEgYm91bmRhcnkKQEAgLTMyNzcsNyArMzM1OCw4IEBACiAKIAlwcl9pbmZvKCIlczogU0RIQ0kgY29udHJvbGxlciBvbiAlcyBbJXNdIHVzaW5nICVzXG4iLAogCQltbWNfaG9zdG5hbWUobW1jKSwgaG9zdC0+aHdfbmFtZSwgZGV2X25hbWUobW1jX2RldihtbWMpKSwKLQkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpID8gIkFETUEiIDoKKwkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpID8KKwkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpID8gIkFETUEgNjQtYml0IiA6ICJBRE1BIiA6CiAJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9TRE1BKSA/ICJETUEiIDogIlBJTyIpOwogCiAJc2RoY2lfZW5hYmxlX2NhcmRfZGV0ZWN0aW9uKGhvc3QpOwpAQCAtMzMzOSwxOCArMzQyMSwxNSBAQAogCiAJdGFza2xldF9raWxsKCZob3N0LT5maW5pc2hfdGFza2xldCk7CiAKLQlpZiAoIUlTX0VSUihtbWMtPnN1cHBseS52bW1jKSkKLQkJcmVndWxhdG9yX2Rpc2FibGUobW1jLT5zdXBwbHkudm1tYyk7Ci0KIAlpZiAoIUlTX0VSUihtbWMtPnN1cHBseS52cW1tYykpCiAJCXJlZ3VsYXRvcl9kaXNhYmxlKG1tYy0+c3VwcGx5LnZxbW1jKTsKIAotCWlmIChob3N0LT5hZG1hX2Rlc2MpCi0JCWRtYV9mcmVlX2NvaGVyZW50KG1tY19kZXYobW1jKSwgQURNQV9TSVpFLAotCQkJCSAgaG9zdC0+YWRtYV9kZXNjLCBob3N0LT5hZG1hX2FkZHIpOworCWlmIChob3N0LT5hZG1hX3RhYmxlKQorCQlkbWFfZnJlZV9jb2hlcmVudChtbWNfZGV2KG1tYyksIGhvc3QtPmFkbWFfdGFibGVfc3osCisJCQkJICBob3N0LT5hZG1hX3RhYmxlLCBob3N0LT5hZG1hX2FkZHIpOwogCWtmcmVlKGhvc3QtPmFsaWduX2J1ZmZlcik7CiAKLQlob3N0LT5hZG1hX2Rlc2MgPSBOVUxMOworCWhvc3QtPmFkbWFfdGFibGUgPSBOVUxMOwogCWhvc3QtPmFsaWduX2J1ZmZlciA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaAppbmRleCAzMTg5NmE3Li5kZGQzMWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCkBAIC0xNjEsNyArMTYxLDcgQEAKICNkZWZpbmUgICBTREhDSV9DVFJMX1VIU19TRFI1MAkJMHgwMDAyCiAjZGVmaW5lICAgU0RIQ0lfQ1RSTF9VSFNfU0RSMTA0CQkweDAwMDMKICNkZWZpbmUgICBTREhDSV9DVFJMX1VIU19ERFI1MAkJMHgwMDA0Ci0jZGVmaW5lICAgU0RIQ0lfQ1RSTF9IU19TRFIyMDAJCTB4MDAwNSAvKiByZXNlcnZlZCB2YWx1ZSBpbiBTRElPIHNwZWMgKi8KKyNkZWZpbmUgICBTREhDSV9DVFJMX0hTNDAwCQkweDAwMDUgLyogTm9uLXN0YW5kYXJkICovCiAjZGVmaW5lICBTREhDSV9DVFJMX1ZERF8xODAJCTB4MDAwOAogI2RlZmluZSAgU0RIQ0lfQ1RSTF9EUlZfVFlQRV9NQVNLCTB4MDAzMAogI2RlZmluZSAgIFNESENJX0NUUkxfRFJWX1RZUEVfQgkJMHgwMDAwCkBAIC0yMDQsNiArMjA0LDcgQEAKICNkZWZpbmUgIFNESENJX1JFVFVOSU5HX01PREVfU0hJRlQJCTE0CiAjZGVmaW5lICBTREhDSV9DTE9DS19NVUxfTUFTSwkweDAwRkYwMDAwCiAjZGVmaW5lICBTREhDSV9DTE9DS19NVUxfU0hJRlQJMTYKKyNkZWZpbmUgIFNESENJX1NVUFBPUlRfSFM0MDAJMHg4MDAwMDAwMCAvKiBOb24tc3RhbmRhcmQgKi8KIAogI2RlZmluZSBTREhDSV9DQVBBQklMSVRJRVNfMQkweDQ0CiAKQEAgLTIyNyw2ICsyMjgsNyBAQAogLyogNTUtNTcgcmVzZXJ2ZWQgKi8KIAogI2RlZmluZSBTREhDSV9BRE1BX0FERFJFU1MJMHg1OAorI2RlZmluZSBTREhDSV9BRE1BX0FERFJFU1NfSEkJMHg1QwogCiAvKiA2MC1GQiByZXNlcnZlZCAqLwogCkBAIC0yMzUsNiArMjM3LDcgQEAKICNkZWZpbmUgU0RIQ0lfUFJFU0VUX0ZPUl9TRFI1MCAweDZBCiAjZGVmaW5lIFNESENJX1BSRVNFVF9GT1JfU0RSMTA0ICAgICAgICAweDZDCiAjZGVmaW5lIFNESENJX1BSRVNFVF9GT1JfRERSNTAgMHg2RQorI2RlZmluZSBTREhDSV9QUkVTRVRfRk9SX0hTNDAwIDB4NzQgLyogTm9uLXN0YW5kYXJkICovCiAjZGVmaW5lIFNESENJX1BSRVNFVF9EUlZfTUFTSyAgMHhDMDAwCiAjZGVmaW5lIFNESENJX1BSRVNFVF9EUlZfU0hJRlQgIDE0CiAjZGVmaW5lIFNESENJX1BSRVNFVF9DTEtHRU5fU0VMX01BU0sgICAweDQwMApAQCAtMjY2LDYgKzI2OSw0NiBAQAogI2RlZmluZSBTREhDSV9ERUZBVUxUX0JPVU5EQVJZX1NJWkUgICg1MTIgKiAxMDI0KQogI2RlZmluZSBTREhDSV9ERUZBVUxUX0JPVU5EQVJZX0FSRyAgIChpbG9nMihTREhDSV9ERUZBVUxUX0JPVU5EQVJZX1NJWkUpIC0gMTIpCiAKKy8qIEFETUEyIDMyLWJpdCBETUEgZGVzY3JpcHRvciBzaXplICovCisjZGVmaW5lIFNESENJX0FETUEyXzMyX0RFU0NfU1oJOAorCisvKiBBRE1BMiAzMi1iaXQgRE1BIGFsaWdubWVudCAqLworI2RlZmluZSBTREhDSV9BRE1BMl8zMl9BTElHTgk0CisKKy8qIEFETUEyIDMyLWJpdCBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2RoY2lfYWRtYTJfMzJfZGVzYyB7CisJX19sZTE2CWNtZDsKKwlfX2xlMTYJbGVuOworCV9fbGUzMglhZGRyOworfSAgX19wYWNrZWQgX19hbGlnbmVkKFNESENJX0FETUEyXzMyX0FMSUdOKTsKKworLyogQURNQTIgNjQtYml0IERNQSBkZXNjcmlwdG9yIHNpemUgKi8KKyNkZWZpbmUgU0RIQ0lfQURNQTJfNjRfREVTQ19TWgkxMgorCisvKiBBRE1BMiA2NC1iaXQgRE1BIGFsaWdubWVudCAqLworI2RlZmluZSBTREhDSV9BRE1BMl82NF9BTElHTgk4CisKKy8qCisgKiBBRE1BMiA2NC1iaXQgZGVzY3JpcHRvci4gTm90ZSAxMi1ieXRlIGRlc2NyaXB0b3IgY2FuJ3QgYWx3YXlzIGJlIDgtYnl0ZQorICogYWxpZ25lZC4KKyAqLworc3RydWN0IHNkaGNpX2FkbWEyXzY0X2Rlc2MgeworCV9fbGUxNgljbWQ7CisJX19sZTE2CWxlbjsKKwlfX2xlMzIJYWRkcl9sbzsKKwlfX2xlMzIJYWRkcl9oaTsKK30gIF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKKworI2RlZmluZSBBRE1BMl9UUkFOX1ZBTElECTB4MjEKKyNkZWZpbmUgQURNQTJfTk9QX0VORF9WQUxJRAkweDMKKyNkZWZpbmUgQURNQTJfRU5ECQkweDIKKworLyoKKyAqIE1heGltdW0gc2VnbWVudHMgYXNzdW1pbmcgYSA1MTJLaUIgbWF4aW11bSByZXF1aXNpdGlvbiBzaXplIGFuZCBhIG1pbmltdW0KKyAqIDRLaUIgcGFnZSBzaXplLgorICovCisjZGVmaW5lIFNESENJX01BWF9TRUdTCQkxMjgKKwogc3RydWN0IHNkaGNpX29wcyB7CiAjaWZkZWYgQ09ORklHX01NQ19TREhDSV9JT19BQ0NFU1NPUlMKIAl1MzIJCSgqcmVhZF9sKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3N1bnhpLW1tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9zdW54aS1tbWMuYwppbmRleCBkMTY2M2IzLi4xNWNiOGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3N1bnhpLW1tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc3VueGktbW1jLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay1wcml2YXRlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrL3N1bnhpLmg+CiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3Rvc2hzZC5jIGIvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjY2MjYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuYwpAQCAtMCwwICsxLDcxNyBAQAorLyoKKyAqICBUb3NoaWJhIFBDSSBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgT25kcmVqIFphcnkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUmljaGFyZCBCZXR0cywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKglCYXNlZCBvbiBhc2ljM19tbWMuYywgY29weXJpZ2h0IChjKSAyMDA1IFNERyBTeXN0ZW1zLCBMTEMgYW5kLAorICoJc2RoY2kuYywgY29weXJpZ2h0IChDKSAyMDA1LTIwMDYgUGllcnJlIE9zc21hbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CisKKyNpbmNsdWRlICJ0b3Noc2QuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAidG9zaHNkIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkc1tdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RPU0hJQkEsIDB4MDgwNSkgfSwKKwl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaV9pZHMpOworCitzdGF0aWMgdm9pZCB0b3Noc2RfaW5pdChzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QpCit7CisJLyogZW5hYmxlIGNsb2NrICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19DTEtTVE9QLAorCQkJCQlTRF9QQ0lDRkdfQ0xLU1RPUF9FTkFCTEVfQUxMKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX0NBUkRERVRFQ1QsIDIpOworCisJLyogcmVzZXQgKi8KKwlpb3dyaXRlMTYoMCwgaG9zdC0+aW9hZGRyICsgU0RfU09GVFdBUkVSRVNFVCk7IC8qIGFzc2VydCAqLworCW1kZWxheSgyKTsKKwlpb3dyaXRlMTYoMSwgaG9zdC0+aW9hZGRyICsgU0RfU09GVFdBUkVSRVNFVCk7IC8qIGRlYXNzZXJ0ICovCisJbWRlbGF5KDIpOworCisJLyogQ2xlYXIgY2FyZCByZWdpc3RlcnMgKi8KKwlpb3dyaXRlMTYoMCwgaG9zdC0+aW9hZGRyICsgU0RfQ0FSRENMT0NLQ1RSTCk7CisJaW93cml0ZTMyKDAsIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCWlvd3JpdGUzMigwLCBob3N0LT5pb2FkZHIgKyBTRF9FUlJPUlNUQVRVUzApOworCWlvd3JpdGUxNigwLCBob3N0LT5pb2FkZHIgKyBTRF9TVE9QSU5URVJOQUwpOworCisJLyogU0RJTyBjbG9jaz8gKi8KKwlpb3dyaXRlMTYoMHgxMDAsIGhvc3QtPmlvYWRkciArIFNESU9fQkFTRSArIFNESU9fQ0xPQ0tOV0FJVENUUkwpOworCisJLyogZW5hYmxlIExFRCAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShob3N0LT5wZGV2LCBTRF9QQ0lDRkdfU0RMRURfRU5BQkxFMSwKKwkJCQkJU0RfUENJQ0ZHX0xFRF9FTkFCTEUxX1NUQVJUKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX1NETEVEX0VOQUJMRTIsCisJCQkJCVNEX1BDSUNGR19MRURfRU5BQkxFMl9TVEFSVCk7CisKKwkvKiBzZXQgaW50ZXJydXB0IG1hc2tzICovCisJaW93cml0ZTMyKH4odTMyKShTRF9DQVJEX1JFU1BfRU5EIHwgU0RfQ0FSRF9SV19FTkQKKwkJCXwgU0RfQ0FSRF9DQVJEX1JFTU9WRURfMCB8IFNEX0NBUkRfQ0FSRF9JTlNFUlRFRF8wCisJCQl8IFNEX0JVRl9SRUFEX0VOQUJMRSB8IFNEX0JVRl9XUklURV9FTkFCTEUKKwkJCXwgU0RfQlVGX0NNRF9USU1FT1VUKSwKKwkJCWhvc3QtPmlvYWRkciArIFNEX0lOVE1BU0tDQVJEKTsKKworCWlvd3JpdGUxNigweDEwMDAsIGhvc3QtPmlvYWRkciArIFNEX1RSQU5TQUNUSU9OQ1RSTCk7Cit9CisKKy8qIFNldCBNTUMgY2xvY2sgLyBwb3dlci4KKyAqIE5vdGU6IFRoaXMgY29udHJvbGxlciB1c2VzIGEgc2ltcGxlIGRpdmlkZXIgc2NoZW1lIHRoZXJlZm9yZSBpdCBjYW5ub3QgcnVuCisgKiBTRC9NTUMgY2FyZHMgYXQgZnVsbCBzcGVlZCAoMjQvMjBNSHopLiBIQ0xLICg9MzNNSHogUENJIGNsb2NrPykgaXMgdG9vIGhpZ2gKKyAqIGFuZCB0aGUgbmV4dCBzbG93ZXN0IGlzIDE2TUh6IChkaXY9MikuCisgKi8KK3N0YXRpYyB2b2lkIF9fdG9zaHNkX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCWlmIChpb3MtPmNsb2NrKSB7CisJCXUxNiBjbGs7CisJCWludCBkaXYgPSAxOworCisJCXdoaWxlIChpb3MtPmNsb2NrIDwgSENMSyAvIGRpdikKKwkJCWRpdiAqPSAyOworCisJCWNsayA9IGRpdiA+PiAyOworCisJCWlmIChkaXYgPT0gMSkgeyAvKiBkaXNhYmxlIHRoZSBkaXZpZGVyICovCisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX0NMS01PREUsCisJCQkJCSAgICAgIFNEX1BDSUNGR19DTEtNT0RFX0RJVl9ESVNBQkxFKTsKKwkJCWNsayB8PSBTRF9DQVJEQ0xLX0RJVl9ESVNBQkxFOworCQl9IGVsc2UKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShob3N0LT5wZGV2LCBTRF9QQ0lDRkdfQ0xLTU9ERSwgMCk7CisKKwkJY2xrIHw9IFNEX0NBUkRDTEtfRU5BQkxFX0NMT0NLOworCQlpb3dyaXRlMTYoY2xrLCBob3N0LT5pb2FkZHIgKyBTRF9DQVJEQ0xPQ0tDVFJMKTsKKworCQltZGVsYXkoMTApOworCX0gZWxzZQorCQlpb3dyaXRlMTYoMCwgaG9zdC0+aW9hZGRyICsgU0RfQ0FSRENMT0NLQ1RSTCk7CisKKwlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgeworCWNhc2UgTU1DX1BPV0VSX09GRjoKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19QT1dFUjEsCisJCQkJCVNEX1BDSUNGR19QV1IxX09GRik7CisJCW1kZWxheSgxKTsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUE9XRVJfVVA6CisJCWJyZWFrOworCWNhc2UgTU1DX1BPV0VSX09OOgorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX1BPV0VSMSwKKwkJCQkJU0RfUENJQ0ZHX1BXUjFfMzNWKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19QT1dFUjIsCisJCQkJCVNEX1BDSUNGR19QV1IyX0FVVE8pOworCQltZGVsYXkoMjApOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGlvcy0+YnVzX3dpZHRoKSB7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzE6CisJCWlvd3JpdGUxNihTRF9DQVJET1BUX1JFUVVJUkVEIHwgU0RfQ0FSRE9QVF9EQVRBX1JFU1BfVElNRU9VVCgxNCkKKwkJCQl8IFNEX0NBUkRPUFRfQzJfTU9EVUxFX0FCU0VOVAorCQkJCXwgU0RfQ0FSRE9QVF9EQVRBX1hGUl9XSURUSF8xLAorCQkJCWhvc3QtPmlvYWRkciArIFNEX0NBUkRPUFRJT05TRVRVUCk7CisJCWJyZWFrOworCWNhc2UgTU1DX0JVU19XSURUSF80OgorCQlpb3dyaXRlMTYoU0RfQ0FSRE9QVF9SRVFVSVJFRCB8IFNEX0NBUkRPUFRfREFUQV9SRVNQX1RJTUVPVVQoMTQpCisJCQkJfCBTRF9DQVJET1BUX0MyX01PRFVMRV9BQlNFTlQKKwkJCQl8IFNEX0NBUkRPUFRfREFUQV9YRlJfV0lEVEhfNCwKKwkJCQlob3N0LT5pb2FkZHIgKyBTRF9DQVJET1BUSU9OU0VUVVApOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9zZXRfbGVkKHN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCwgdW5zaWduZWQgY2hhciBzdGF0ZSkKK3sKKwlpb3dyaXRlMTYoc3RhdGUsIGhvc3QtPmlvYWRkciArIFNESU9fQkFTRSArIFNESU9fTEVEQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9maW5pc2hfcmVxdWVzdChzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19yZXF1ZXN0ICptcnEgPSBob3N0LT5tcnE7CisKKwkvKiBXcml0ZSBzb21ldGhpbmcgdG8gZW5kIHRoZSBjb21tYW5kICovCisJaG9zdC0+bXJxID0gTlVMTDsKKwlob3N0LT5jbWQgPSBOVUxMOworCWhvc3QtPmRhdGEgPSBOVUxMOworCisJdG9zaHNkX3NldF9sZWQoaG9zdCwgMCk7CisJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0b3Noc2RfdGhyZWFkX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gZGV2X2lkOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmRhdGE7CisJc3RydWN0IHNnX21hcHBpbmdfaXRlciAqc2dfbWl0ZXIgPSAmaG9zdC0+c2dfbWl0ZXI7CisJdW5zaWduZWQgc2hvcnQgKmJ1ZjsKKwlpbnQgY291bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZGF0YSkgeworCQlkZXZfd2FybigmaG9zdC0+cGRldi0+ZGV2LCAiU3B1cmlvdXMgRGF0YSBJUlFcbiIpOworCQlpZiAoaG9zdC0+Y21kKSB7CisJCQlob3N0LT5jbWQtPmVycm9yID0gLUVJTzsKKwkJCXRvc2hzZF9maW5pc2hfcmVxdWVzdChob3N0KTsKKwkJfQorCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIXNnX21pdGVyX25leHQoc2dfbWl0ZXIpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJYnVmID0gc2dfbWl0ZXItPmFkZHI7CisKKwkvKiBFbnN1cmUgd2UgZG9udCByZWFkIG1vcmUgdGhhbiBvbmUgYmxvY2suIFRoZSBjaGlwIHdpbGwgaW50ZXJydXB0IHVzCisJICogV2hlbiB0aGUgbmV4dCBibG9jayBpcyBhdmFpbGFibGUuCisJICovCisJY291bnQgPSBzZ19taXRlci0+bGVuZ3RoOworCWlmIChjb3VudCA+IGRhdGEtPmJsa3N6KQorCQljb3VudCA9IGRhdGEtPmJsa3N6OworCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiY291bnQ6ICUwOHgsIGZsYWdzICUwOHhcbiIsIGNvdW50LAorCQlkYXRhLT5mbGFncyk7CisKKwkvKiBUcmFuc2ZlciB0aGUgZGF0YSAqLworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCWlvcmVhZDMyX3JlcChob3N0LT5pb2FkZHIgKyBTRF9EQVRBUE9SVCwgYnVmLCBjb3VudCA+PiAyKTsKKwllbHNlCisJCWlvd3JpdGUzMl9yZXAoaG9zdC0+aW9hZGRyICsgU0RfREFUQVBPUlQsIGJ1ZiwgY291bnQgPj4gMik7CisKKwlzZ19taXRlci0+Y29uc3VtZWQgPSBjb3VudDsKKwlzZ19taXRlcl9zdG9wKHNnX21pdGVyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgdG9zaHNkX2NtZF9pcnEoc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gaG9zdC0+Y21kOworCXU4ICpidWY7CisJdTE2IGRhdGE7CisKKwlpZiAoIWhvc3QtPmNtZCkgeworCQlkZXZfd2FybigmaG9zdC0+cGRldi0+ZGV2LCAiU3B1cmlvdXMgQ01EIGlycVxuIik7CisJCXJldHVybjsKKwl9CisJYnVmID0gKHU4ICopY21kLT5yZXNwOworCWhvc3QtPmNtZCA9IE5VTEw7CisKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCAmJiBjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpIHsKKwkJLyogUjIgKi8KKwkJYnVmWzEyXSA9IDB4ZmY7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTApOworCQlidWZbMTNdID0gZGF0YSAmIDB4ZmY7CisJCWJ1ZlsxNF0gPSBkYXRhID4+IDg7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTEpOworCQlidWZbMTVdID0gZGF0YSAmIDB4ZmY7CisJCWJ1Zls4XSA9IGRhdGEgPj4gODsKKwkJZGF0YSA9IGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX1JFU1BPTlNFMik7CisJCWJ1Zls5XSA9IGRhdGEgJiAweGZmOworCQlidWZbMTBdID0gZGF0YSA+PiA4OworCQlkYXRhID0gaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfUkVTUE9OU0UzKTsKKwkJYnVmWzExXSA9IGRhdGEgJiAweGZmOworCQlidWZbNF0gPSBkYXRhID4+IDg7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTQpOworCQlidWZbNV0gPSBkYXRhICYgMHhmZjsKKwkJYnVmWzZdID0gZGF0YSA+PiA4OworCQlkYXRhID0gaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfUkVTUE9OU0U1KTsKKwkJYnVmWzddID0gZGF0YSAmIDB4ZmY7CisJCWJ1ZlswXSA9IGRhdGEgPj4gODsKKwkJZGF0YSA9IGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX1JFU1BPTlNFNik7CisJCWJ1ZlsxXSA9IGRhdGEgJiAweGZmOworCQlidWZbMl0gPSBkYXRhID4+IDg7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTcpOworCQlidWZbM10gPSBkYXRhICYgMHhmZjsKKwl9IGVsc2UgaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKKwkJLyogUjEsIFIxQiwgUjMsIFI2LCBSNyAqLworCQlkYXRhID0gaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfUkVTUE9OU0UwKTsKKwkJYnVmWzBdID0gZGF0YSAmIDB4ZmY7CisJCWJ1ZlsxXSA9IGRhdGEgPj4gODsKKwkJZGF0YSA9IGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX1JFU1BPTlNFMSk7CisJCWJ1ZlsyXSA9IGRhdGEgJiAweGZmOworCQlidWZbM10gPSBkYXRhID4+IDg7CisJfQorCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiQ29tbWFuZCBJUlEgY29tcGxldGUgJWQgJWQgJXhcbiIsCisJCWNtZC0+b3Bjb2RlLCBjbWQtPmVycm9yLCBjbWQtPmZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIGRhdGEgdG8gaGFuZGxlIHdlIHdpbGwKKwkgKiBmaW5pc2ggdGhlIHJlcXVlc3QgaW4gdGhlIG1tY19kYXRhX2VuZF9pcnEgaGFuZGxlci4qLworCWlmIChob3N0LT5kYXRhKQorCQlyZXR1cm47CisKKwl0b3Noc2RfZmluaXNoX3JlcXVlc3QoaG9zdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9kYXRhX2VuZF9pcnEoc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmRhdGE7CisKKwlob3N0LT5kYXRhID0gTlVMTDsKKworCWlmICghZGF0YSkgeworCQlkZXZfd2FybigmaG9zdC0+cGRldi0+ZGV2LCAiU3B1cmlvdXMgZGF0YSBlbmQgSVJRXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkYXRhLT5lcnJvciA9PSAwKQorCQlkYXRhLT5ieXRlc194ZmVyZWQgPSBkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzejsKKwllbHNlCisJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IDA7CisKKwlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICJDb21wbGV0ZWQgZGF0YSByZXF1ZXN0IHhmcj0lZFxuIiwKKwkJZGF0YS0+Ynl0ZXNfeGZlcmVkKTsKKworCWlvd3JpdGUxNigwLCBob3N0LT5pb2FkZHIgKyBTRF9TVE9QSU5URVJOQUwpOworCisJdG9zaHNkX2ZpbmlzaF9yZXF1ZXN0KGhvc3QpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdG9zaHNkX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gZGV2X2lkOworCXUzMiBpbnRfcmVnLCBpbnRfbWFzaywgaW50X3N0YXR1cywgZGV0YWlsOworCWludCBlcnJvciA9IDAsIHJldCA9IElSUV9IQU5ETEVEOworCisJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKKwlpbnRfc3RhdHVzID0gaW9yZWFkMzIoaG9zdC0+aW9hZGRyICsgU0RfQ0FSRFNUQVRVUyk7CisJaW50X21hc2sgPSBpb3JlYWQzMihob3N0LT5pb2FkZHIgKyBTRF9JTlRNQVNLQ0FSRCk7CisJaW50X3JlZyA9IGludF9zdGF0dXMgJiB+aW50X21hc2sgJiB+SVJRX0RPTlRfQ0FSRV9CSVRTOworCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiSVJRIHN0YXR1czoleCBtYXNrOiV4XG4iLAorCQlpbnRfc3RhdHVzLCBpbnRfbWFzayk7CisKKwkvKiBub3RoaW5nIHRvIGRvOiBpdCdzIG5vdCBvdXIgSVJRICovCisJaWYgKCFpbnRfcmVnKSB7CisJCXJldCA9IElSUV9OT05FOworCQlnb3RvIGlycV9lbmQ7CisJfQorCisJaWYgKGludF9yZWcgJiBTRF9CVUZfQ01EX1RJTUVPVVQpIHsKKwkJZXJyb3IgPSAtRVRJTUVET1VUOworCQlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICJUaW1lb3V0XG4iKTsKKwl9IGVsc2UgaWYgKGludF9yZWcgJiBTRF9CVUZfQ1JDX0VSUikgeworCQllcnJvciA9IC1FSUxTRVE7CisJCWRldl9lcnIoJmhvc3QtPnBkZXYtPmRldiwgIkJhZENSQ1xuIik7CisJfSBlbHNlIGlmIChpbnRfcmVnICYgKFNEX0JVRl9JTExFR0FMX0FDQ0VTUworCQkJCXwgU0RfQlVGX0NNRF9JTkRFWF9FUlIKKwkJCQl8IFNEX0JVRl9TVE9QX0JJVF9FTkRfRVJSCisJCQkJfCBTRF9CVUZfT1ZFUkZMT1cKKwkJCQl8IFNEX0JVRl9VTkRFUkZMT1cKKwkJCQl8IFNEX0JVRl9EQVRBX1RJTUVPVVQpKSB7CisJCWRldl9lcnIoJmhvc3QtPnBkZXYtPmRldiwgIkJ1ZmZlciBzdGF0dXMgZXJyb3I6IHsgJXMlcyVzJXMlcyVzfVxuIiwKKwkJCWludF9yZWcgJiBTRF9CVUZfSUxMRUdBTF9BQ0NFU1MgPyAiSUxMRUdBTF9BQ0MgIiA6ICIiLAorCQkJaW50X3JlZyAmIFNEX0JVRl9DTURfSU5ERVhfRVJSID8gIkNNRF9JTkRFWCAiIDogIiIsCisJCQlpbnRfcmVnICYgU0RfQlVGX1NUT1BfQklUX0VORF9FUlIgPyAiU1RPUEJJVF9FTkQgIiA6ICIiLAorCQkJaW50X3JlZyAmIFNEX0JVRl9PVkVSRkxPVyA/ICJPVkVSRkxPVyAiIDogIiIsCisJCQlpbnRfcmVnICYgU0RfQlVGX1VOREVSRkxPVyA/ICJVTkRFUkZMT1cgIiA6ICIiLAorCQkJaW50X3JlZyAmIFNEX0JVRl9EQVRBX1RJTUVPVVQgPyAiREFUQV9USU1FT1VUICIgOiAiIik7CisKKwkJZGV0YWlsID0gaW9yZWFkMzIoaG9zdC0+aW9hZGRyICsgU0RfRVJST1JTVEFUVVMwKTsKKwkJZGV2X2VycigmaG9zdC0+cGRldi0+ZGV2LCAiZGV0YWlsIGVycm9yIHN0YXR1cyB7ICVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzfVxuIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfUkVTUF9DTURfRVJSID8gIlJFU1BfQ01EICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfUkVTUF9OT05fQ01EMTJfRU5EX0JJVF9FUlIgPyAiUkVTUF9FTkRfQklUICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfUkVTUF9DTUQxMl9FTkRfQklUX0VSUiA/ICJSRVNQX0VORF9CSVQgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMF9SRUFEX0RBVEFfRU5EX0JJVF9FUlIgPyAiUkVBRF9EQVRBX0VORF9CSVQgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMF9XUklURV9DUkNfU1RBVFVTX0VORF9CSVRfRVJSID8gIldSSVRFX0NNRF9FTkRfQklUICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfUkVTUF9OT05fQ01EMTJfQ1JDX0VSUiA/ICJSRVNQX0NSQyAiIDogIiIsCisJCQlkZXRhaWwgJiBTRF9FUlIwX1JFU1BfQ01EMTJfQ1JDX0VSUiA/ICJSRVNQX0NSQyAiIDogIiIsCisJCQlkZXRhaWwgJiBTRF9FUlIwX1JFQURfREFUQV9DUkNfRVJSID8gIlJFQURfREFUQV9DUkMgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMF9XUklURV9DTURfQ1JDX0VSUiA/ICJXUklURV9DTURfQ1JDICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjFfTk9fQ01EX1JFU1AgPyAiTk9fQ01EX1JFU1AgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMV9USU1FT1VUX1JFQURfREFUQSA/ICJSRUFEX0RBVEFfVElNRU9VVCAiIDogIiIsCisJCQlkZXRhaWwgJiBTRF9FUlIxX1RJTUVPVVRfQ1JTX1NUQVRVUyA/ICJDUlNfU1RBVFVTX1RJTUVPVVQgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMV9USU1FT1VUX0NSQ19CVVNZID8gIkNSQ19CVVNZX1RJTUVPVVQgIiA6ICIiKTsKKwkJZXJyb3IgPSAtRUlPOworCX0KKworCWlmIChlcnJvcikgeworCQlpZiAoaG9zdC0+Y21kKQorCQkJaG9zdC0+Y21kLT5lcnJvciA9IGVycm9yOworCisJCWlmIChlcnJvciA9PSAtRVRJTUVET1VUKSB7CisJCQlpb3dyaXRlMzIoaW50X3N0YXR1cyAmCisJCQkJICB+KFNEX0JVRl9DTURfVElNRU9VVCB8IFNEX0NBUkRfUkVTUF9FTkQpLAorCQkJCSAgaG9zdC0+aW9hZGRyICsgU0RfQ0FSRFNUQVRVUyk7CisJCX0gZWxzZSB7CisJCQl0b3Noc2RfaW5pdChob3N0KTsKKwkJCV9fdG9zaHNkX3NldF9pb3MoaG9zdC0+bW1jLCAmaG9zdC0+bW1jLT5pb3MpOworCQkJZ290byBpcnFfZW5kOworCQl9CisJfQorCisJLyogQ2FyZCBpbnNlcnQvcmVtb3ZlLiBUaGUgbW1jIGNvbnRyb2xsaW5nIGNvZGUgaXMgc3RhdGVsZXNzLiAqLworCWlmIChpbnRfcmVnICYgKFNEX0NBUkRfQ0FSRF9JTlNFUlRFRF8wIHwgU0RfQ0FSRF9DQVJEX1JFTU9WRURfMCkpIHsKKwkJaW93cml0ZTMyKGludF9zdGF0dXMgJgorCQkJICB+KFNEX0NBUkRfQ0FSRF9SRU1PVkVEXzAgfCBTRF9DQVJEX0NBUkRfSU5TRVJURURfMCksCisJCQkgIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCisJCWlmIChpbnRfcmVnICYgU0RfQ0FSRF9DQVJEX0lOU0VSVEVEXzApCisJCQl0b3Noc2RfaW5pdChob3N0KTsKKworCQltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIDEpOworCX0KKworCS8qIERhdGEgdHJhbnNmZXIgKi8KKwlpZiAoaW50X3JlZyAmIChTRF9CVUZfUkVBRF9FTkFCTEUgfCBTRF9CVUZfV1JJVEVfRU5BQkxFKSkgeworCQlpb3dyaXRlMzIoaW50X3N0YXR1cyAmCisJCQkgIH4oU0RfQlVGX1dSSVRFX0VOQUJMRSB8IFNEX0JVRl9SRUFEX0VOQUJMRSksCisJCQkgIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCisJCXJldCA9IElSUV9XQUtFX1RIUkVBRDsKKwkJZ290byBpcnFfZW5kOworCX0KKworCS8qIENvbW1hbmQgY29tcGxldGlvbiAqLworCWlmIChpbnRfcmVnICYgU0RfQ0FSRF9SRVNQX0VORCkgeworCQlpb3dyaXRlMzIoaW50X3N0YXR1cyAmIH4oU0RfQ0FSRF9SRVNQX0VORCksCisJCQkgIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCQl0b3Noc2RfY21kX2lycShob3N0KTsKKwl9CisKKwkvKiBEYXRhIHRyYW5zZmVyIGNvbXBsZXRpb24gKi8KKwlpZiAoaW50X3JlZyAmIFNEX0NBUkRfUldfRU5EKSB7CisJCWlvd3JpdGUzMihpbnRfc3RhdHVzICYgfihTRF9DQVJEX1JXX0VORCksCisJCQkgIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCQl0b3Noc2RfZGF0YV9lbmRfaXJxKGhvc3QpOworCX0KK2lycV9lbmQ6CisJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9zdGFydF9jbWQoc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5kYXRhOworCWludCBjID0gY21kLT5vcGNvZGU7CisKKwlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICJDb21tYW5kIG9wY29kZTogJWRcbiIsIGNtZC0+b3Bjb2RlKTsKKworCWlmIChjbWQtPm9wY29kZSA9PSBNTUNfU1RPUF9UUkFOU01JU1NJT04pIHsKKwkJaW93cml0ZTE2KFNEX1NUT1BJTlRfSVNTVUVfQ01EMTIsCisJCQkgIGhvc3QtPmlvYWRkciArIFNEX1NUT1BJTlRFUk5BTCk7CisKKwkJY21kLT5yZXNwWzBdID0gY21kLT5vcGNvZGU7CisJCWNtZC0+cmVzcFsxXSA9IDA7CisJCWNtZC0+cmVzcFsyXSA9IDA7CisJCWNtZC0+cmVzcFszXSA9IDA7CisKKwkJdG9zaHNkX2ZpbmlzaF9yZXF1ZXN0KGhvc3QpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChtbWNfcmVzcF90eXBlKGNtZCkpIHsKKwljYXNlIE1NQ19SU1BfTk9ORToKKwkJYyB8PSBTRF9DTURfUkVTUF9UWVBFX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBNTUNfUlNQX1IxOgorCQljIHw9IFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IxOworCQlicmVhazsKKwljYXNlIE1NQ19SU1BfUjFCOgorCQljIHw9IFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IxQjsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUlNQX1IyOgorCQljIHw9IFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IyOworCQlicmVhazsKKwljYXNlIE1NQ19SU1BfUjM6CisJCWMgfD0gU0RfQ01EX1JFU1BfVFlQRV9FWFRfUjM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VycigmaG9zdC0+cGRldi0+ZGV2LCAiVW5rbm93biByZXNwb25zZSB0eXBlICVkXG4iLAorCQkJbW1jX3Jlc3BfdHlwZShjbWQpKTsKKwkJYnJlYWs7CisJfQorCisJaG9zdC0+Y21kID0gY21kOworCisJaWYgKGNtZC0+b3Bjb2RlID09IE1NQ19BUFBfQ01EKQorCQljIHw9IFNEX0NNRF9UWVBFX0FDTUQ7CisKKwlpZiAoY21kLT5vcGNvZGUgPT0gTU1DX0dPX0lETEVfU1RBVEUpCisJCWMgfD0gKDMgPDwgOCk7ICAvKiByZW1vdmVkIGZyb20gaXBhcS1hc2ljMy5oIGZvciBzb21lIHJlYXNvbiAqLworCisJaWYgKGRhdGEpIHsKKwkJYyB8PSBTRF9DTURfREFUQV9QUkVTRU5UOworCisJCWlmIChkYXRhLT5ibG9ja3MgPiAxKSB7CisJCQlpb3dyaXRlMTYoU0RfU1RPUElOVF9BVVRPX0lTU1VFX0NNRDEyLAorCQkJCSAgaG9zdC0+aW9hZGRyICsgU0RfU1RPUElOVEVSTkFMKTsKKwkJCWMgfD0gU0RfQ01EX01VTFRJX0JMT0NLOworCQl9CisKKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJCWMgfD0gU0RfQ01EX1RSQU5TRkVSX1JFQUQ7CisKKwkJLyogTU1DX0RBVEFfV1JJVEUgZG9lcyBub3QgcmVxdWlyZSBhIGJpdCB0byBiZSBzZXQgKi8KKwl9CisKKwkvKiBTZW5kIHRoZSBjb21tYW5kICovCisJaW93cml0ZTMyKGNtZC0+YXJnLCBob3N0LT5pb2FkZHIgKyBTRF9BUkcwKTsKKwlpb3dyaXRlMTYoYywgaG9zdC0+aW9hZGRyICsgU0RfQ01EKTsKK30KKworc3RhdGljIHZvaWQgdG9zaHNkX3N0YXJ0X2RhdGEoc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gU0dfTUlURVJfQVRPTUlDOworCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAic2V0dXAgZGF0YSB0cmFuc2ZlcjogYmxvY2tzaXplICUwOHggIG5yX2Jsb2NrcyAlZCwgb2Zmc2V0OiAlMDh4XG4iLAorCQlkYXRhLT5ibGtzeiwgZGF0YS0+YmxvY2tzLCBkYXRhLT5zZy0+b2Zmc2V0KTsKKworCWhvc3QtPmRhdGEgPSBkYXRhOworCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJZmxhZ3MgfD0gU0dfTUlURVJfVE9fU0c7CisJZWxzZQorCQlmbGFncyB8PSBTR19NSVRFUl9GUk9NX1NHOworCisJc2dfbWl0ZXJfc3RhcnQoJmhvc3QtPnNnX21pdGVyLCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLCBmbGFncyk7CisKKwkvKiBTZXQgdHJhbnNmZXIgbGVuZ3RoIGFuZCBibG9ja3NpemUgKi8KKwlpb3dyaXRlMTYoZGF0YS0+YmxvY2tzLCBob3N0LT5pb2FkZHIgKyBTRF9CTE9DS0NPVU5UKTsKKwlpb3dyaXRlMTYoZGF0YS0+Ymxrc3osIGhvc3QtPmlvYWRkciArIFNEX0NBUkRYRkVSREFUQUxFTik7Cit9CisKKy8qIFByb2Nlc3MgcmVxdWVzdHMgZnJvbSB0aGUgTU1DIGxheWVyICovCitzdGF0aWMgdm9pZCB0b3Noc2RfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogYWJvcnQgaWYgY2FyZCBub3QgcHJlc2VudCAqLworCWlmICghKGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpICYgU0RfQ0FSRF9QUkVTRU5UXzApKSB7CisJCW1ycS0+Y21kLT5lcnJvciA9IC1FTk9NRURJVU07CisJCW1tY19yZXF1ZXN0X2RvbmUobW1jLCBtcnEpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCVdBUk5fT04oaG9zdC0+bXJxICE9IE5VTEwpOworCisJaG9zdC0+bXJxID0gbXJxOworCisJaWYgKG1ycS0+ZGF0YSkKKwkJdG9zaHNkX3N0YXJ0X2RhdGEoaG9zdCwgbXJxLT5kYXRhKTsKKworCXRvc2hzZF9zZXRfbGVkKGhvc3QsIDEpOworCisJdG9zaHNkX3N0YXJ0X2NtZChob3N0LCBtcnEtPmNtZCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQoreworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJX190b3Noc2Rfc2V0X2lvcyhtbWMsIGlvcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHRvc2hzZF9nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCS8qIGFjdGl2ZSBsb3cgKi8KKwlyZXR1cm4gIShpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9DQVJEU1RBVFVTKSAmIFNEX0NBUkRfV1JJVEVfUFJPVEVDVCk7Cit9CisKK3N0YXRpYyBpbnQgdG9zaHNkX2dldF9jZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJcmV0dXJuICEhKGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpICYgU0RfQ0FSRF9QUkVTRU5UXzApOworfQorCitzdGF0aWMgc3RydWN0IG1tY19ob3N0X29wcyB0b3Noc2Rfb3BzID0geworCS5yZXF1ZXN0ID0gdG9zaHNkX3JlcXVlc3QsCisJLnNldF9pb3MgPSB0b3Noc2Rfc2V0X2lvcywKKwkuZ2V0X3JvID0gdG9zaHNkX2dldF9ybywKKwkuZ2V0X2NkID0gdG9zaHNkX2dldF9jZCwKK307CisKKworc3RhdGljIHZvaWQgdG9zaHNkX3Bvd2VyZG93bihzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QpCit7CisJLyogbWFzayBhbGwgaW50ZXJydXB0cyAqLworCWlvd3JpdGUzMigweGZmZmZmZmZmLCBob3N0LT5pb2FkZHIgKyBTRF9JTlRNQVNLQ0FSRCk7CisJLyogZGlzYWJsZSBjYXJkIGNsb2NrICovCisJaW93cml0ZTE2KDB4MDAwLCBob3N0LT5pb2FkZHIgKyBTRElPX0JBU0UgKyBTRElPX0NMT0NLTldBSVRDVFJMKTsKKwlpb3dyaXRlMTYoMCwgaG9zdC0+aW9hZGRyICsgU0RfQ0FSRENMT0NLQ1RSTCk7CisJLyogcG93ZXIgZG93biBjYXJkICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19QT1dFUjEsIFNEX1BDSUNGR19QV1IxX09GRik7CisJLyogZGlzYWJsZSBjbG9jayAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShob3N0LT5wZGV2LCBTRF9QQ0lDRkdfQ0xLU1RPUCwgMCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgdG9zaHNkX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXRvc2hzZF9wb3dlcmRvd24oaG9zdCk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9zaHNkX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRvc2hzZF9pbml0KGhvc3QpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisKK3N0YXRpYyBpbnQgdG9zaHNkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCByZXQ7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0OworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXJlc291cmNlX3NpemVfdCBiYXNlOworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgdG9zaHNkX2hvc3QpLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW1tYykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlob3N0LT5tbWMgPSBtbWM7CisKKwlob3N0LT5wZGV2ID0gcGRldjsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWU7CisKKwlob3N0LT5pb2FkZHIgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisJaWYgKCFob3N0LT5pb2FkZHIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byByZWxlYXNlOworCX0KKworCS8qIFNldCBNTUMgaG9zdCBwYXJhbWV0ZXJzICovCisJbW1jLT5vcHMgPSAmdG9zaHNkX29wczsKKwltbWMtPmNhcHMgPSBNTUNfQ0FQXzRfQklUX0RBVEE7CisJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzOworCisJbW1jLT5mX21pbiA9IEhDTEsgLyA1MTI7CisJbW1jLT5mX21heCA9IEhDTEs7CisKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CisKKwl0b3Noc2RfaW5pdChob3N0KTsKKworCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHBkZXYtPmlycSwgdG9zaHNkX2lycSwgdG9zaHNkX3RocmVhZF9pcnEsCisJCQkJICAgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBob3N0KTsKKwlpZiAocmV0KQorCQlnb3RvIHVubWFwOworCisJbW1jX2FkZF9ob3N0KG1tYyk7CisKKwliYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWRldl9kYmcoJnBkZXYtPmRldiwgIk1NSU8gJXBhLCBJUlEgJWRcbiIsICZiYXNlLCBwZGV2LT5pcnEpOworCisJcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oJnBkZXYtPmRldiwgMSk7CisKKwlyZXR1cm4gMDsKKwordW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgaG9zdC0+aW9hZGRyKTsKK3JlbGVhc2U6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2ZyZWU6CisJbW1jX2ZyZWVfaG9zdChtbWMpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK2VycjoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdG9zaHNkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKKwl0b3Noc2RfcG93ZXJkb3duKGhvc3QpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgaG9zdCk7CisJcGNpX2lvdW5tYXAocGRldiwgaG9zdC0+aW9hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCW1tY19mcmVlX2hvc3QoaG9zdC0+bW1jKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdG9zaHNkX3BtX29wcyA9IHsKKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyh0b3Noc2RfcG1fc3VzcGVuZCwgdG9zaHNkX3BtX3Jlc3VtZSkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0b3Noc2RfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gcGNpX2lkcywKKwkucHJvYmUgPSB0b3Noc2RfcHJvYmUsCisJLnJlbW92ZSA9IHRvc2hzZF9yZW1vdmUsCisJLmRyaXZlci5wbSA9ICZ0b3Noc2RfcG1fb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdG9zaHNkX2Rydl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnRvc2hzZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdG9zaHNkX2Rydl9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0b3Noc2RfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodG9zaHNkX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KHRvc2hzZF9kcnZfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk9uZHJlaiBaYXJ5LCBSaWNoYXJkIEJldHRzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRvc2hpYmEgUENJIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3Rvc2hzZC5oIGIvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmMwZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqICBUb3NoaWJhIFBDSSBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgT25kcmVqIFphcnkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUmljaGFyZCBCZXR0cywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgICAgIEJhc2VkIG9uIGFzaWMzX21tYy5jIENvcHlyaWdodCAoYykgMjAwNSBTREcgU3lzdGVtcywgTExDCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEhDTEsJMzMwMDAwMDAJLyogMzMgTUh6IChQQ0kgY2xvY2spICovCisKKyNkZWZpbmUgU0RfUENJQ0ZHX0NMS1NUT1AJMHg0MAkvKiAweDFmID0gY2xvY2sgY29udHJvbGxlciwgMCA9IHN0b3AgKi8KKyNkZWZpbmUgU0RfUENJQ0ZHX0dBVEVEQ0xLCTB4NDEJLyogR2F0ZWQgY2xvY2sgKi8KKyNkZWZpbmUgU0RfUENJQ0ZHX0NMS01PREUJMHg0MgkvKiBDb250cm9sIGNsb2NrIG9mIFNEIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgU0RfUENJQ0ZHX1BJTlNUQVRVUwkweDQ0CS8qIFIvTzogcmVhZCBzdGF0dXMgb2YgU0QgcGlucyAqLworI2RlZmluZSBTRF9QQ0lDRkdfUE9XRVIxCTB4NDgKKyNkZWZpbmUgU0RfUENJQ0ZHX1BPV0VSMgkweDQ5CisjZGVmaW5lIFNEX1BDSUNGR19QT1dFUjMJMHg0YQorI2RlZmluZSBTRF9QQ0lDRkdfQ0FSRERFVEVDVAkweDRjCisjZGVmaW5lIFNEX1BDSUNGR19TTE9UUwkJMHg1MAkvKiBSL086IGRlZmluZSBzdXBwb3J0IHNsb3QgbnVtYmVyICovCisjZGVmaW5lIFNEX1BDSUNGR19FWFRHQVRFQ0xLMQkweGYwCS8qIENvdWxkIGJlIHVzZWQgZm9yIGdhdGVkIGNsb2NrICovCisjZGVmaW5lIFNEX1BDSUNGR19FWFRHQVRFQ0xLMgkweGYxCS8qIENvdWxkIGJlIHVzZWQgZm9yIGdhdGVkIGNsb2NrICovCisjZGVmaW5lIFNEX1BDSUNGR19FWFRHQVRFQ0xLMwkweGY5CS8qIEJpdCAxOiBkb3VibGUgYnVmZmVyL3NpbmdsZSBidWZmZXIgKi8KKyNkZWZpbmUgU0RfUENJQ0ZHX1NETEVEX0VOQUJMRTEJMHhmYQorI2RlZmluZSBTRF9QQ0lDRkdfU0RMRURfRU5BQkxFMgkweGZlCisKKyNkZWZpbmUgU0RfUENJQ0ZHX0NMS01PREVfRElWX0RJU0FCTEUJQklUKDApCisjZGVmaW5lIFNEX1BDSUNGR19DTEtTVE9QX0VOQUJMRV9BTEwJMHgxZgorI2RlZmluZSBTRF9QQ0lDRkdfTEVEX0VOQUJMRTFfU1RBUlQJMHgxMgorI2RlZmluZSBTRF9QQ0lDRkdfTEVEX0VOQUJMRTJfU1RBUlQJMHg4MAorCisjZGVmaW5lIFNEX1BDSUNGR19QV1IxXzMzVgkweDA4CS8qIFNldCBmb3IgMy4zIHZvbHRzICovCisjZGVmaW5lIFNEX1BDSUNGR19QV1IxX09GRgkweDAwCS8qIFR1cm4gb2ZmIHBvd2VyICovCisjZGVmaW5lIFNEX1BDSUNGR19QV1IyX0FVVE8JMHgwMgorCisjZGVmaW5lIFNEX0NNRAkJCTB4MDAJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9BUkcwCQkJMHgwNAkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX0FSRzEJCQkweDA2CS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfU1RPUElOVEVSTkFMCQkweDA4CisjZGVmaW5lIFNEX0JMT0NLQ09VTlQJCTB4MGEJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTAJCTB4MGMJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTEJCTB4MGUJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTIJCTB4MTAJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTMJCTB4MTIJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTQJCTB4MTQJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTUJCTB4MTYJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTYJCTB4MTgJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTcJCTB4MWEJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9DQVJEU1RBVFVTCQkweDFjCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfQlVGRkVSQ1RSTAkJMHgxZQkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX0lOVE1BU0tDQVJECQkweDIwCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfSU5UTUFTS0JVRkZFUgkweDIyCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfQ0FSRENMT0NLQ1RSTAkweDI0CisjZGVmaW5lIFNEX0NBUkRYRkVSREFUQUxFTgkweDI2CS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfQ0FSRE9QVElPTlNFVFVQCTB4MjgJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9FUlJPUlNUQVRVUzAJCTB4MmMJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9FUlJPUlNUQVRVUzEJCTB4MmUJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9EQVRBUE9SVAkJMHgzMAkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX1RSQU5TQUNUSU9OQ1RSTAkweDM0CS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfU09GVFdBUkVSRVNFVAkweGUwCS8qIGFsc28gZm9yIFNESU8gKi8KKworLyogcmVnaXN0ZXJzIGFib3ZlIG1hcmtlZCAiYWxzbyBmb3IgU0RJTyIgYW5kIGFsbCBTRElPIHJlZ2lzdGVycyBiZWxvdyBjYW4gYmUKKyAqIGFjY2Vzc2VkIGF0IFNESU9fQkFTRSArIHJlZyBhZGRyZXNzICovCisjZGVmaW5lIFNESU9fQkFTRQkgMHgxMDAKKworI2RlZmluZSBTRElPX0NBUkRQT1JUU0VMCTB4MDIKKyNkZWZpbmUgU0RJT19DQVJESU5UQ1RSTAkweDM2CisjZGVmaW5lIFNESU9fQ0xPQ0tOV0FJVENUUkwJMHgzOAorI2RlZmluZSBTRElPX0hPU1RJTkZPUk1BVElPTgkweDNhCisjZGVmaW5lIFNESU9fRVJST1JDVFJMCQkweDNjCisjZGVmaW5lIFNESU9fTEVEQ1RSTAkJMHgzZQorCisjZGVmaW5lIFNEX1RSQU5TQ1RMX1NFVAkJQklUKDgpCisKKyNkZWZpbmUgU0RfQ0FSRENMS19ESVZfRElTQUJMRQlCSVQoMTUpCisjZGVmaW5lIFNEX0NBUkRDTEtfRU5BQkxFX0NMT0NLCUJJVCg4KQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfNTEyCUJJVCg3KQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfMjU2CUJJVCg2KQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfMTI4CUJJVCg1KQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfNjQJQklUKDQpCisjZGVmaW5lIFNEX0NBUkRDTEtfQ0xLX0RJVl8zMglCSVQoMykKKyNkZWZpbmUgU0RfQ0FSRENMS19DTEtfRElWXzE2CUJJVCgyKQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfOAlCSVQoMSkKKyNkZWZpbmUgU0RfQ0FSRENMS19DTEtfRElWXzQJQklUKDApCisjZGVmaW5lIFNEX0NBUkRDTEtfQ0xLX0RJVl8yCTAKKworI2RlZmluZSBTRF9DQVJET1BUX1JFUVVJUkVECQkweDAwMGUKKyNkZWZpbmUgU0RfQ0FSRE9QVF9EQVRBX1JFU1BfVElNRU9VVCh4KQkoKCh4KSAmIDB4MGYpIDw8IDQpIC8qIDQgYml0cyAqLworI2RlZmluZSBTRF9DQVJET1BUX0MyX01PRFVMRV9BQlNFTlQJQklUKDE0KQorI2RlZmluZSBTRF9DQVJET1BUX0RBVEFfWEZSX1dJRFRIXzEJKDEgPDwgMTUpCisjZGVmaW5lIFNEX0NBUkRPUFRfREFUQV9YRlJfV0lEVEhfNAkoMCA8PCAxNSkKKworI2RlZmluZSBTRF9DTURfVFlQRV9DTUQJCQkoMCA8PCA2KQorI2RlZmluZSBTRF9DTURfVFlQRV9BQ01ECQkoMSA8PCA2KQorI2RlZmluZSBTRF9DTURfVFlQRV9BVVRIRU4JCSgyIDw8IDYpCisjZGVmaW5lIFNEX0NNRF9SRVNQX1RZUEVfTk9ORQkJKDMgPDwgOCkKKyNkZWZpbmUgU0RfQ01EX1JFU1BfVFlQRV9FWFRfUjEJCSg0IDw8IDgpCisjZGVmaW5lIFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IxQgkoNSA8PCA4KQorI2RlZmluZSBTRF9DTURfUkVTUF9UWVBFX0VYVF9SMgkJKDYgPDwgOCkKKyNkZWZpbmUgU0RfQ01EX1JFU1BfVFlQRV9FWFRfUjMJCSg3IDw8IDgpCisjZGVmaW5lIFNEX0NNRF9SRVNQX1RZUEVfRVhUX1I2CQkoNCA8PCA4KQorI2RlZmluZSBTRF9DTURfUkVTUF9UWVBFX0VYVF9SNwkJKDQgPDwgOCkKKyNkZWZpbmUgU0RfQ01EX0RBVEFfUFJFU0VOVAkJQklUKDExKQorI2RlZmluZSBTRF9DTURfVFJBTlNGRVJfUkVBRAkJQklUKDEyKQorI2RlZmluZSBTRF9DTURfTVVMVElfQkxPQ0sJCUJJVCgxMykKKyNkZWZpbmUgU0RfQ01EX1NFQ1VSSVRZX0NNRAkJQklUKDE0KQorCisjZGVmaW5lIFNEX1NUT1BJTlRfSVNTVUVfQ01EMTIJCUJJVCgwKQorI2RlZmluZSBTRF9TVE9QSU5UX0FVVE9fSVNTVUVfQ01EMTIJQklUKDgpCisKKyNkZWZpbmUgU0RfQ0FSRF9SRVNQX0VORAlCSVQoMCkKKyNkZWZpbmUgU0RfQ0FSRF9SV19FTkQJCUJJVCgyKQorI2RlZmluZSBTRF9DQVJEX0NBUkRfUkVNT1ZFRF8wCUJJVCgzKQorI2RlZmluZSBTRF9DQVJEX0NBUkRfSU5TRVJURURfMAlCSVQoNCkKKyNkZWZpbmUgU0RfQ0FSRF9QUkVTRU5UXzAJQklUKDUpCisjZGVmaW5lIFNEX0NBUkRfVU5LNgkJQklUKDYpCisjZGVmaW5lIFNEX0NBUkRfV1JJVEVfUFJPVEVDVAlCSVQoNykKKyNkZWZpbmUgU0RfQ0FSRF9DQVJEX1JFTU9WRURfMwlCSVQoOCkKKyNkZWZpbmUgU0RfQ0FSRF9DQVJEX0lOU0VSVEVEXzMJQklUKDkpCisjZGVmaW5lIFNEX0NBUkRfUFJFU0VOVF8zCUJJVCgxMCkKKworI2RlZmluZSBTRF9CVUZfQ01EX0lOREVYX0VSUglCSVQoMTYpCisjZGVmaW5lIFNEX0JVRl9DUkNfRVJSCQlCSVQoMTcpCisjZGVmaW5lIFNEX0JVRl9TVE9QX0JJVF9FTkRfRVJSCUJJVCgxOCkKKyNkZWZpbmUgU0RfQlVGX0RBVEFfVElNRU9VVAlCSVQoMTkpCisjZGVmaW5lIFNEX0JVRl9PVkVSRkxPVwkJQklUKDIwKQorI2RlZmluZSBTRF9CVUZfVU5ERVJGTE9XCUJJVCgyMSkKKyNkZWZpbmUgU0RfQlVGX0NNRF9USU1FT1VUCUJJVCgyMikKKyNkZWZpbmUgU0RfQlVGX1VOSzcJCUJJVCgyMykKKyNkZWZpbmUgU0RfQlVGX1JFQURfRU5BQkxFCUJJVCgyNCkKKyNkZWZpbmUgU0RfQlVGX1dSSVRFX0VOQUJMRQlCSVQoMjUpCisjZGVmaW5lIFNEX0JVRl9JTExFR0FMX0ZVTkNUSU9OCUJJVCgyOSkKKyNkZWZpbmUgU0RfQlVGX0NNRF9CVVNZCQlCSVQoMzApCisjZGVmaW5lIFNEX0JVRl9JTExFR0FMX0FDQ0VTUwlCSVQoMzEpCisKKyNkZWZpbmUgU0RfRVJSMF9SRVNQX0NNRF9FUlIJCQlCSVQoMCkKKyNkZWZpbmUgU0RfRVJSMF9SRVNQX05PTl9DTUQxMl9FTkRfQklUX0VSUglCSVQoMikKKyNkZWZpbmUgU0RfRVJSMF9SRVNQX0NNRDEyX0VORF9CSVRfRVJSCQlCSVQoMykKKyNkZWZpbmUgU0RfRVJSMF9SRUFEX0RBVEFfRU5EX0JJVF9FUlIJCUJJVCg0KQorI2RlZmluZSBTRF9FUlIwX1dSSVRFX0NSQ19TVEFUVVNfRU5EX0JJVF9FUlIJQklUKDUpCisjZGVmaW5lIFNEX0VSUjBfUkVTUF9OT05fQ01EMTJfQ1JDX0VSUgkJQklUKDgpCisjZGVmaW5lIFNEX0VSUjBfUkVTUF9DTUQxMl9DUkNfRVJSCQlCSVQoOSkKKyNkZWZpbmUgU0RfRVJSMF9SRUFEX0RBVEFfQ1JDX0VSUgkJQklUKDEwKQorI2RlZmluZSBTRF9FUlIwX1dSSVRFX0NNRF9DUkNfRVJSCQlCSVQoMTEpCisKKyNkZWZpbmUgU0RfRVJSMV9OT19DTURfUkVTUAkJQklUKDE2KQorI2RlZmluZSBTRF9FUlIxX1RJTUVPVVRfUkVBRF9EQVRBCUJJVCgyMCkKKyNkZWZpbmUgU0RfRVJSMV9USU1FT1VUX0NSU19TVEFUVVMJQklUKDIxKQorI2RlZmluZSBTRF9FUlIxX1RJTUVPVVRfQ1JDX0JVU1kJQklUKDIyKQorCisjZGVmaW5lIElSUV9ET05UX0NBUkVfQklUUyAoU0RfQ0FSRF9QUkVTRU5UXzMgXAorCXwgU0RfQ0FSRF9XUklURV9QUk9URUNUIFwKKwl8IFNEX0NBUkRfVU5LNiBcCisJfCBTRF9DQVJEX1BSRVNFTlRfMCBcCisJfCBTRF9CVUZfVU5LNyBcCisJfCBTRF9CVUZfQ01EX0JVU1kpCisKK3N0cnVjdCB0b3Noc2RfaG9zdCB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisKKwlzcGlubG9ja190IGxvY2s7CisKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsvKiBDdXJyZW50IHJlcXVlc3QgKi8KKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZDsvKiBDdXJyZW50IGNvbW1hbmQgKi8KKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGE7CS8qIEN1cnJlbnQgZGF0YSByZXF1ZXN0ICovCisKKwlzdHJ1Y3Qgc2dfbWFwcGluZ19pdGVyIHNnX21pdGVyOyAvKiBmb3IgUElPICovCisKKwl2b2lkIF9faW9tZW0gKmlvYWRkcjsgLyogbWFwcGVkIGFkZHJlc3MgKi8KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcKaW5kZXggOWUwODlkMi4uMzU2NGZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZwpAQCAtMjIsNyArMjIsNyBAQAogCiBjb25maWcgQVJNX0FUOTFfRVRIRVIKIAl0cmlzdGF0ZSAiQVQ5MVJNOTIwMCBFdGhlcm5ldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSEFTX0RNQSAmJiAoQVJDSF9BVDkxUk05MjAwIHx8IENPTVBJTEVfVEVTVCkKKwlkZXBlbmRzIG9uIEhBU19ETUEgJiYgKEFSQ0hfQVQ5MSB8fCBDT01QSUxFX1RFU1QpCiAJc2VsZWN0IE1BQ0IKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugd2lzaCB0byBjb21waWxlIGEga2VybmVsIGZvciB0aGUgQVQ5MVJNOTIwMCBhbmQgZW5hYmxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL251YnVzL251YnVzLmMgYi9kcml2ZXJzL251YnVzL251YnVzLmMKaW5kZXggNTA2NmE3ZS4uMzMxOWNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9udWJ1cy9udWJ1cy5jCisrKyBiL2RyaXZlcnMvbnVidXMvbnVidXMuYwpAQCAtOTIwLDE0ICs5MjAsMTAgQEAKIAlycCA9IG51YnVzX3JvbV9hZGRyKHNsb3QpOwkKIAlmb3IoaSA9IDQ7IGk7IGktLSkKIAl7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCWludCBjYXJkX3ByZXNlbnQ7CiAKIAkJcnAtLTsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQljYXJkX3ByZXNlbnQgPSBod3JlZ19wcmVzZW50KHJwKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCSAgICAgICAKIAkJaWYgKCFjYXJkX3ByZXNlbnQpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9wY2kuYyBiL2RyaXZlcnMvb2Yvb2ZfcGNpLmMKaW5kZXggODg4MmI0Ni4uODg0NzFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9wY2kuYworKysgYi9kcml2ZXJzL29mL29mX3BjaS5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIHN0YXRpYyBMSVNUX0hFQUQob2ZfcGNpX21zaV9jaGlwX2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChvZl9wY2lfbXNpX2NoaXBfbXV0ZXgpOwogCi1pbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApCitpbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApCiB7CiAJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hpcC0+b2Zfbm9kZSwgIm1zaS1jb250cm9sbGVyIikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvZl9wY2lfbXNpX2NoaXBfYWRkKTsKIAotdm9pZCBvZl9wY2lfbXNpX2NoaXBfcmVtb3ZlKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCkKK3ZvaWQgb2ZfcGNpX21zaV9jaGlwX3JlbW92ZShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApCiB7CiAJbXV0ZXhfbG9jaygmb2ZfcGNpX21zaV9jaGlwX211dGV4KTsKIAlsaXN0X2RlbCgmY2hpcC0+bGlzdCk7CkBAIC0yNTcsOSArMjU3LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9mX3BjaV9tc2lfY2hpcF9yZW1vdmUpOwogCi1zdHJ1Y3QgbXNpX2NoaXAgKm9mX3BjaV9maW5kX21zaV9jaGlwX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQorc3RydWN0IG1zaV9jb250cm9sbGVyICpvZl9wY2lfZmluZF9tc2lfY2hpcF9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKIHsKLQlzdHJ1Y3QgbXNpX2NoaXAgKmM7CisJc3RydWN0IG1zaV9jb250cm9sbGVyICpjOwogCiAJbXV0ZXhfbG9jaygmb2ZfcGNpX21zaV9jaGlwX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZvZl9wY2lfbXNpX2NoaXBfbGlzdCwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggODkzNTAzZi4uY2NlZDg0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogY29uZmlnIFBDSV9NU0kKIAlib29sICJNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSBhbmQgTVNJLVgpIgogCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IEdFTkVSSUNfTVNJX0lSUQogCWhlbHAKIAkgICBUaGlzIGFsbG93cyBkZXZpY2UgZHJpdmVycyB0byBlbmFibGUgTVNJIChNZXNzYWdlIFNpZ25hbGVkCiAJICAgSW50ZXJydXB0cykuICBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgZW5hYmxlIGEgZGV2aWNlIHRvCkBAIC0xNiw2ICsxNywxMSBAQAogCiAJICAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS4KIAorY29uZmlnIFBDSV9NU0lfSVJRX0RPTUFJTgorCWJvb2wKKwlkZXBlbmRzIG9uIFBDSV9NU0kKKwlzZWxlY3QgR0VORVJJQ19NU0lfSVJRX0RPTUFJTgorCiBjb25maWcgUENJX0RFQlVHCiAJYm9vbCAiUENJIERlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIFBDSSAmJiBERUJVR19LRVJORUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLWR3LmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1rZXlzdG9uZS1kdy5jCmluZGV4IDM0MDg2Y2UuLjMxMzMzOGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1rZXlzdG9uZS1kdy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLWR3LmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCS8qIE1hc2sgdGhlIGVuZCBwb2ludCBpZiBQVk0gaW1wbGVtZW50ZWQgKi8KIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX01TSSkpIHsKIAkJaWYgKG1zaS0+bXNpX2F0dHJpYi5tYXNrYml0KQotCQkJbWFza19tc2lfaXJxKGQpOworCQkJcGNpX21zaV9tYXNrX2lycShkKTsKIAl9CiAKIAlrc19kd19wY2llX21zaV9jbGVhcl9pcnEocHAsIG9mZnNldCk7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAkvKiBNYXNrIHRoZSBlbmQgcG9pbnQgaWYgUFZNIGltcGxlbWVudGVkICovCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BDSV9NU0kpKSB7CiAJCWlmIChtc2ktPm1zaV9hdHRyaWIubWFza2JpdCkKLQkJCXVubWFza19tc2lfaXJxKGQpOworCQkJcGNpX21zaV91bm1hc2tfaXJxKGQpOwogCX0KIAogCWtzX2R3X3BjaWVfbXNpX3NldF9pcnEocHAsIG9mZnNldCk7CkBAIC0yMDUsNyArMjA1LDcgQEAKIAkubWFwID0ga3NfZHdfcGNpZV9tc2lfbWFwLAogfTsKIAotaW50IGtzX2R3X3BjaWVfbXNpX2hvc3RfaW5pdChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwgc3RydWN0IG1zaV9jaGlwICpjaGlwKQoraW50IGtzX2R3X3BjaWVfbXNpX2hvc3RfaW5pdChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwgc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwKQogewogCXN0cnVjdCBrZXlzdG9uZV9wY2llICprc19wY2llID0gdG9fa2V5c3RvbmVfcGNpZShwcCk7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1rZXlzdG9uZS5oIGIvZHJpdmVycy9wY2kvaG9zdC9wY2kta2V5c3RvbmUuaAppbmRleCAxZmMxZmNlLi40NzhkOTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1rZXlzdG9uZS5oCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLmgKQEAgLTU1LDQgKzU1LDQgQEAKIHZvaWQga3NfZHdfcGNpZV9tc2lfY2xlYXJfaXJxKHN0cnVjdCBwY2llX3BvcnQgKnBwLCBpbnQgaXJxKTsKIHZvaWQga3NfZHdfcGNpZV92M182NV9zY2FuX2J1cyhzdHJ1Y3QgcGNpZV9wb3J0ICpwcCk7CiBpbnQga3NfZHdfcGNpZV9tc2lfaG9zdF9pbml0KHN0cnVjdCBwY2llX3BvcnQgKnBwLAotCQlzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApOworCQlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktbXZlYnUuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLW12ZWJ1LmMKaW5kZXggYjEzMTVlMS4uOWFhODEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktbXZlYnUuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1tdmVidS5jCkBAIC05OSw3ICs5OSw3IEBACiBzdHJ1Y3QgbXZlYnVfcGNpZSB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlzdHJ1Y3QgbXZlYnVfcGNpZV9wb3J0ICpwb3J0czsKLQlzdHJ1Y3QgbXNpX2NoaXAgKm1zaTsKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKm1zaTsKIAlzdHJ1Y3QgcmVzb3VyY2UgaW87CiAJY2hhciBpb19uYW1lWzMwXTsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVhbGlvOwpAQCAtNzc0LDEyICs3NzQsNiBAQAogCXJldHVybiBidXM7CiB9CiAKLXN0YXRpYyB2b2lkIG12ZWJ1X3BjaWVfYWRkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXN0cnVjdCBtdmVidV9wY2llICpwY2llID0gc3lzX3RvX3BjaWUoYnVzLT5zeXNkYXRhKTsKLQlidXMtPm1zaSA9IHBjaWUtPm1zaTsKLX0KLQogc3RhdGljIHJlc291cmNlX3NpemVfdCBtdmVidV9wY2llX2FsaWduX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCQkgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQkJCQkgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LApAQCAtODE2LDYgKzgxMCwxMCBAQAogCiAJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CiAKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWh3Lm1zaV9jdHJsID0gcGNpZS0+bXNpOworI2VuZGlmCisKIAlody5ucl9jb250cm9sbGVycyA9IDE7CiAJaHcucHJpdmF0ZV9kYXRhICAgPSAodm9pZCAqKikmcGNpZTsKIAlody5zZXR1cCAgICAgICAgICA9IG12ZWJ1X3BjaWVfc2V0dXA7CkBAIC04MjMsNyArODIxLDYgQEAKIAlody5tYXBfaXJxICAgICAgICA9IG9mX2lycV9wYXJzZV9hbmRfbWFwX3BjaTsKIAlody5vcHMgICAgICAgICAgICA9ICZtdmVidV9wY2llX29wczsKIAlody5hbGlnbl9yZXNvdXJjZSA9IG12ZWJ1X3BjaWVfYWxpZ25fcmVzb3VyY2U7Ci0JaHcuYWRkX2J1cyAgICAgICAgPSBtdmVidV9wY2llX2FkZF9idXM7CiAKIAlwY2lfY29tbW9uX2luaXQoJmh3KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXRlZ3JhLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS10ZWdyYS5jCmluZGV4IDE5YmIxOWMuLmZlY2NmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXRlZ3JhLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktdGVncmEuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJKQogCiBzdHJ1Y3QgdGVncmFfbXNpIHsKLQlzdHJ1Y3QgbXNpX2NoaXAgY2hpcDsKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgY2hpcDsKIAlERUNMQVJFX0JJVE1BUCh1c2VkLCBJTlRfUENJX01TSV9OUik7CiAJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKIAl1bnNpZ25lZCBsb25nIHBhZ2VzOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJYm9vbCBoYXNfZ2VuMjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRlZ3JhX21zaSAqdG9fdGVncmFfbXNpKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRlZ3JhX21zaSAqdG9fdGVncmFfbXNpKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCB0ZWdyYV9tc2ksIGNoaXApOwogfQpAQCAtNjkyLDE1ICs2OTIsNiBAQAogCXJldHVybiBpcnE7CiB9CiAKLXN0YXRpYyB2b2lkIHRlZ3JhX3BjaWVfYWRkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCWlmIChJU19FTkFCTEVEKENPTkZJR19QQ0lfTVNJKSkgewotCQlzdHJ1Y3QgdGVncmFfcGNpZSAqcGNpZSA9IHN5c190b19wY2llKGJ1cy0+c3lzZGF0YSk7Ci0KLQkJYnVzLT5tc2kgPSAmcGNpZS0+bXNpLmNoaXA7Ci0JfQotfQotCiBzdGF0aWMgc3RydWN0IHBjaV9idXMgKnRlZ3JhX3BjaWVfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJc3RydWN0IHRlZ3JhX3BjaWUgKnBjaWUgPSBzeXNfdG9fcGNpZShzeXMpOwpAQCAtMTI4MCw4ICsxMjcxLDggQEAKIAlyZXR1cm4gcHJvY2Vzc2VkID4gMCA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfbXNpX3NldHVwX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJICAgICAgIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKK3N0YXRpYyBpbnQgdGVncmFfbXNpX3NldHVwX2lycShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXAsCisJCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgdGVncmFfbXNpICptc2kgPSB0b190ZWdyYV9tc2koY2hpcCk7CiAJc3RydWN0IG1zaV9tc2cgbXNnOwpAQCAtMTMwNSwxMiArMTI5NiwxMyBAQAogCW1zZy5hZGRyZXNzX2hpID0gMDsKIAltc2cuZGF0YSA9IGh3aXJxOwogCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdGVncmFfbXNpX3RlYXJkb3duX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB0ZWdyYV9tc2lfdGVhcmRvd25faXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCB0ZWdyYV9tc2kgKm1zaSA9IHRvX3RlZ3JhX21zaShjaGlwKTsKIAlzdHJ1Y3QgaXJxX2RhdGEgKmQgPSBpcnFfZ2V0X2lycV9kYXRhKGlycSk7CkBAIC0xMzIyLDEwICsxMzE0LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdGVncmFfbXNpX2lycV9jaGlwID0gewogCS5uYW1lID0gIlRlZ3JhIFBDSWUgTVNJIiwKLQkuaXJxX2VuYWJsZSA9IHVubWFza19tc2lfaXJxLAotCS5pcnFfZGlzYWJsZSA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX21hc2sgPSBtYXNrX21zaV9pcnEsCi0JLmlycV91bm1hc2sgPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX2VuYWJsZSA9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2Rpc2FibGUgPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfbWFzayA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBwY2lfbXNpX3VubWFza19pcnEsCiB9OwogCiBzdGF0aWMgaW50IHRlZ3JhX21zaV9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSwKQEAgLTE4OTMsMTEgKzE4ODUsMTQgQEAKIAogCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwogCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlody5tc2lfY3RybCA9ICZwY2llLT5tc2kuY2hpcDsKKyNlbmRpZgorCiAJaHcubnJfY29udHJvbGxlcnMgPSAxOwogCWh3LnByaXZhdGVfZGF0YSA9ICh2b2lkICoqKSZwY2llOwogCWh3LnNldHVwID0gdGVncmFfcGNpZV9zZXR1cDsKIAlody5tYXBfaXJxID0gdGVncmFfcGNpZV9tYXBfaXJxOwotCWh3LmFkZF9idXMgPSB0ZWdyYV9wY2llX2FkZF9idXM7CiAJaHcuc2NhbiA9IHRlZ3JhX3BjaWVfc2Nhbl9idXM7CiAJaHcub3BzID0gJnRlZ3JhX3BjaWVfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuYwppbmRleCBkZmVkMDBhLi4xN2I1MTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmMKQEAgLTE1MiwxMCArMTUyLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZHdfbXNpX2lycV9jaGlwID0gewogCS5uYW1lID0gIlBDSS1NU0kiLAotCS5pcnFfZW5hYmxlID0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9kaXNhYmxlID0gbWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAorCS5pcnFfZW5hYmxlID0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV9tYXNrID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKIH07CiAKIC8qIE1TSSBpbnQgaGFuZGxlciAqLwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKLXN0YXRpYyBpbnQgZHdfbXNpX3NldHVwX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorc3RhdGljIGludCBkd19tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCiB7CiAJaW50IGlycSwgcG9zOwpAQCAtMjk4LDEyICsyOTgsMTIgQEAKIAllbHNlCiAJCW1zZy5kYXRhID0gcG9zOwogCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHdfbXNpX3RlYXJkb3duX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBkd19tc2lfdGVhcmRvd25faXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwgdW5zaWduZWQgaW50IGlycSkKIHsKIAlzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKGlycSk7CiAJc3RydWN0IG1zaV9kZXNjICptc2kgPSBpcnFfZGF0YV9nZXRfbXNpKGRhdGEpOwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJY2xlYXJfaXJxX3JhbmdlKHBwLCBpcnEsIDEsIGRhdGEtPmh3aXJxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtc2lfY2hpcCBkd19wY2llX21zaV9jaGlwID0geworc3RhdGljIHN0cnVjdCBtc2lfY29udHJvbGxlciBkd19wY2llX21zaV9jaGlwID0gewogCS5zZXR1cF9pcnEgPSBkd19tc2lfc2V0dXBfaXJxLAogCS50ZWFyZG93bl9pcnEgPSBkd19tc2lfdGVhcmRvd25faXJxLAogfTsKQEAgLTQ5OCw2ICs0OTgsMTEgQEAKIAl2YWwgfD0gUE9SVF9MT0dJQ19TUEVFRF9DSEFOR0U7CiAJZHdfcGNpZV93cl9vd25fY29uZihwcCwgUENJRV9MSU5LX1dJRFRIX1NQRUVEX0NPTlRST0wsIDQsIHZhbCk7CiAKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWR3X3BjaWVfbXNpX2NoaXAuZGV2ID0gcHAtPmRldjsKKwlkd19wY2kubXNpX2N0cmwgPSAmZHdfcGNpZV9tc2lfY2hpcDsKKyNlbmRpZgorCiAJZHdfcGNpLm5yX2NvbnRyb2xsZXJzID0gMTsKIAlkd19wY2kucHJpdmF0ZV9kYXRhID0gKHZvaWQgKiopJnBwOwogCkBAIC03NDcsMjEgKzc1MiwxMCBAQAogCXJldHVybiBpcnE7CiB9CiAKLXN0YXRpYyB2b2lkIGR3X3BjaWVfYWRkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCWlmIChJU19FTkFCTEVEKENPTkZJR19QQ0lfTVNJKSkgewotCQlzdHJ1Y3QgcGNpZV9wb3J0ICpwcCA9IHN5c190b19wY2llKGJ1cy0+c3lzZGF0YSk7Ci0KLQkJZHdfcGNpZV9tc2lfY2hpcC5kZXYgPSBwcC0+ZGV2OwotCQlidXMtPm1zaSA9ICZkd19wY2llX21zaV9jaGlwOwotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBod19wY2kgZHdfcGNpID0gewogCS5zZXR1cAkJPSBkd19wY2llX3NldHVwLAogCS5zY2FuCQk9IGR3X3BjaWVfc2Nhbl9idXMsCiAJLm1hcF9pcnEJPSBkd19wY2llX21hcF9pcnEsCi0JLmFkZF9idXMJPSBkd19wY2llX2FkZF9idXMsCiB9OwogCiB2b2lkIGR3X3BjaWVfc2V0dXBfcmMoc3RydWN0IHBjaWVfcG9ydCAqcHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5oIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuaAppbmRleCBjNjI1Njc1Li5kMGJiZDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5oCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmgKQEAgLTczLDcgKzczLDcgQEAKIAl1MzIgKCpnZXRfbXNpX2FkZHIpKHN0cnVjdCBwY2llX3BvcnQgKnBwKTsKIAl1MzIgKCpnZXRfbXNpX2RhdGEpKHN0cnVjdCBwY2llX3BvcnQgKnBwLCBpbnQgcG9zKTsKIAl2b2lkICgqc2Nhbl9idXMpKHN0cnVjdCBwY2llX3BvcnQgKnBwKTsKLQlpbnQgKCptc2lfaG9zdF9pbml0KShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwgc3RydWN0IG1zaV9jaGlwICpjaGlwKTsKKwlpbnQgKCptc2lfaG9zdF9pbml0KShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwgc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwKTsKIH07CiAKIGludCBkd19wY2llX2NmZ19yZWFkKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXJjYXIuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1yY2FyLmMKaW5kZXggNjExNThlMC4uZDMwNTNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXJjYXIuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtcmNhci5jCkBAIC0xMTEsMTQgKzExMSwxNCBAQAogc3RydWN0IHJjYXJfbXNpIHsKIAlERUNMQVJFX0JJVE1BUCh1c2VkLCBJTlRfUENJX01TSV9OUik7CiAJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKLQlzdHJ1Y3QgbXNpX2NoaXAgY2hpcDsKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgY2hpcDsKIAl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCXN0cnVjdCBtdXRleCBsb2NrOwogCWludCBpcnExOwogCWludCBpcnEyOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmNhcl9tc2kgKnRvX3JjYXJfbXNpKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJjYXJfbXNpICp0b19yY2FyX21zaShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcmNhcl9tc2ksIGNoaXApOwogfQpAQCAtMzgwLDIwICszODAsMTAgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgcmNhcl9wY2llX2FkZF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX01TSSkpIHsKLQkJc3RydWN0IHJjYXJfcGNpZSAqcGNpZSA9IHN5c190b19wY2llKGJ1cy0+c3lzZGF0YSk7Ci0KLQkJYnVzLT5tc2kgPSAmcGNpZS0+bXNpLmNoaXA7Ci0JfQotfQotCiBzdHJ1Y3QgaHdfcGNpIHJjYXJfcGNpID0gewogCS5zZXR1cCAgICAgICAgICA9IHJjYXJfcGNpZV9zZXR1cCwKIAkubWFwX2lycSAgICAgICAgPSBvZl9pcnFfcGFyc2VfYW5kX21hcF9wY2ksCiAJLm9wcyAgICAgICAgICAgID0gJnJjYXJfcGNpZV9vcHMsCi0JLmFkZF9idXMgICAgICAgID0gcmNhcl9wY2llX2FkZF9idXMsCiB9OwogCiBzdGF0aWMgdm9pZCByY2FyX3BjaWVfZW5hYmxlKHN0cnVjdCByY2FyX3BjaWUgKnBjaWUpCkBAIC00MDIsNiArMzkyLDkgQEAKIAogCXJjYXJfcGNpLm5yX2NvbnRyb2xsZXJzID0gMTsKIAlyY2FyX3BjaS5wcml2YXRlX2RhdGEgPSAodm9pZCAqKikmcGNpZTsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCXJjYXJfcGNpLm1zaV9jdHJsID0gJnBjaWUtPm1zaS5jaGlwOworI2VuZGlmCiAKIAlwY2lfY29tbW9uX2luaXRfZGV2KCZwZGV2LT5kZXYsICZyY2FyX3BjaSk7CiAjaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TCkBAIC02MjIsNyArNjE1LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcmNhcl9tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCitzdGF0aWMgaW50IHJjYXJfbXNpX3NldHVwX2lycShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXAsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJICAgICAgc3RydWN0IG1zaV9kZXNjICpkZXNjKQogewogCXN0cnVjdCByY2FyX21zaSAqbXNpID0gdG9fcmNhcl9tc2koY2hpcCk7CkBAIC02NDcsMTIgKzY0MCwxMiBAQAogCW1zZy5hZGRyZXNzX2hpID0gcmNhcl9wY2lfcmVhZF9yZWcocGNpZSwgUENJRU1TSUFVUik7CiAJbXNnLmRhdGEgPSBod2lycTsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJjYXJfbXNpX3RlYXJkb3duX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCByY2FyX21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLCB1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCByY2FyX21zaSAqbXNpID0gdG9fcmNhcl9tc2koY2hpcCk7CiAJc3RydWN0IGlycV9kYXRhICpkID0gaXJxX2dldF9pcnFfZGF0YShpcnEpOwpAQCAtNjYyLDEwICs2NTUsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCByY2FyX21zaV9pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJSLUNhciBQQ0llIE1TSSIsCi0JLmlycV9lbmFibGUgPSB1bm1hc2tfbXNpX2lycSwKLQkuaXJxX2Rpc2FibGUgPSBtYXNrX21zaV9pcnEsCi0JLmlycV9tYXNrID0gbWFza19tc2lfaXJxLAotCS5pcnFfdW5tYXNrID0gdW5tYXNrX21zaV9pcnEsCisJLmlycV9lbmFibGUgPSBwY2lfbXNpX3VubWFza19pcnEsCisJLmlycV9kaXNhYmxlID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX21hc2sgPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrID0gcGNpX21zaV91bm1hc2tfaXJxLAogfTsKIAogc3RhdGljIGludCByY2FyX21zaV9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS14aWxpbnguYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS14aWxpbnguYwppbmRleCBjY2M0OTZiLi4yZjUwZmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUteGlsaW54LmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLXhpbGlueC5jCkBAIC0zMzUsNyArMzM1LDggQEAKICAqIEBjaGlwOiBNU0kgQ2hpcCBkZXNjcmlwdG9yCiAgKiBAaXJxOiBNU0kgSVJRIHRvIGRlc3Ryb3kKICAqLwotc3RhdGljIHZvaWQgeGlsaW54X21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgeGlsaW54X21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgaXJxKQogewogCXhpbGlueF9wY2llX2Rlc3Ryb3lfbXNpKGlycSk7CiB9CkBAIC0zNDgsNyArMzQ5LDcgQEAKICAqCiAgKiBSZXR1cm46ICcwJyBvbiBzdWNjZXNzIGFuZCBlcnJvciB2YWx1ZSBvbiBmYWlsdXJlCiAgKi8KLXN0YXRpYyBpbnQgeGlsaW54X3BjaWVfbXNpX3NldHVwX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsCitzdGF0aWMgaW50IHhpbGlueF9wY2llX21zaV9zZXR1cF9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAogCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCiB7CkBAIC0zNzQsMTMgKzM3NSwxMyBAQAogCW1zZy5hZGRyZXNzX2xvID0gbXNnX2FkZHI7CiAJbXNnLmRhdGEgPSBpcnE7CiAKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAogCXJldHVybiAwOwogfQogCiAvKiBNU0kgQ2hpcCBEZXNjcmlwdG9yICovCi1zdGF0aWMgc3RydWN0IG1zaV9jaGlwIHhpbGlueF9wY2llX21zaV9jaGlwID0geworc3RhdGljIHN0cnVjdCBtc2lfY29udHJvbGxlciB4aWxpbnhfcGNpZV9tc2lfY2hpcCA9IHsKIAkuc2V0dXBfaXJxID0geGlsaW54X3BjaWVfbXNpX3NldHVwX2lycSwKIAkudGVhcmRvd25faXJxID0geGlsaW54X21zaV90ZWFyZG93bl9pcnEsCiB9OwpAQCAtMzg4LDEwICszODksMTAgQEAKIC8qIEhXIEludGVycnVwdCBDaGlwIERlc2NyaXB0b3IgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeGlsaW54X21zaV9pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJYaWxpbnggUENJZSBNU0kiLAotCS5pcnFfZW5hYmxlID0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9kaXNhYmxlID0gbWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAorCS5pcnFfZW5hYmxlID0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV9tYXNrID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKIH07CiAKIC8qKgpAQCAtNDMxLDIwICs0MzIsNiBAQAogCXBjaWVfd3JpdGUocG9ydCwgbXNnX2FkZHIsIFhJTElOWF9QQ0lFX1JFR19NU0lCQVNFMik7CiB9CiAKLS8qKgotICogeGlsaW54X3BjaWVfYWRkX2J1cyAtIEFkZCBNU0kgY2hpcCBpbmZvIHRvIFBDSWUgYnVzCi0gKiBAYnVzOiBQQ0llIGJ1cwotICovCi1zdGF0aWMgdm9pZCB4aWxpbnhfcGNpZV9hZGRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1BDSV9NU0kpKSB7Ci0JCXN0cnVjdCB4aWxpbnhfcGNpZV9wb3J0ICpwb3J0ID0gc3lzX3RvX3BjaWUoYnVzLT5zeXNkYXRhKTsKLQotCQl4aWxpbnhfcGNpZV9tc2lfY2hpcC5kZXYgPSBwb3J0LT5kZXY7Ci0JCWJ1cy0+bXNpID0gJnhpbGlueF9wY2llX21zaV9jaGlwOwotCX0KLX0KLQogLyogSU5UeCBGdW5jdGlvbnMgKi8KIAogLyoqCkBAIC05MjQsMTAgKzkxMSwxNCBAQAogCQkucHJpdmF0ZV9kYXRhCT0gKHZvaWQgKiopJnBvcnQsCiAJCS5zZXR1cAkJPSB4aWxpbnhfcGNpZV9zZXR1cCwKIAkJLm1hcF9pcnEJPSBvZl9pcnFfcGFyc2VfYW5kX21hcF9wY2ksCi0JCS5hZGRfYnVzCT0geGlsaW54X3BjaWVfYWRkX2J1cywKIAkJLnNjYW4JCT0geGlsaW54X3BjaWVfc2Nhbl9idXMsCiAJCS5vcHMJCT0gJnhpbGlueF9wY2llX29wcywKIAl9OworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwl4aWxpbnhfcGNpZV9tc2lfY2hpcC5kZXYgPSBwb3J0LT5kZXY7CisJaHcubXNpX2N0cmwgPSAmeGlsaW54X3BjaWVfbXNpX2NoaXA7CisjZW5kaWYKIAlwY2lfY29tbW9uX2luaXRfZGV2KGRldiwgJmh3KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbXNpLmMgYi9kcml2ZXJzL3BjaS9tc2kuYwppbmRleCAwODQ1ODdkLi5mZDYwODA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9tc2kuYworKysgYi9kcml2ZXJzL3BjaS9tc2kuYwpAQCAtMTksMTkgKzE5LDgyIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KIAogI2luY2x1ZGUgInBjaS5oIgogCiBzdGF0aWMgaW50IHBjaV9tc2lfZW5hYmxlID0gMTsKK2ludCBwY2lfbXNpX2lnbm9yZV9tYXNrOwogCiAjZGVmaW5lIG1zaXhfdGFibGVfc2l6ZShmbGFncykJKChmbGFncyAmIFBDSV9NU0lYX0ZMQUdTX1FTSVpFKSArIDEpCiAKKyNpZmRlZiBDT05GSUdfUENJX01TSV9JUlFfRE9NQUlOCitzdGF0aWMgc3RydWN0IGlycV9kb21haW4gKnBjaV9tc2lfZGVmYXVsdF9kb21haW47CitzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9tc2lfZG9tYWluX2xvY2spOworCitzdHJ1Y3QgaXJxX2RvbWFpbiAqIF9fd2VhayBhcmNoX2dldF9wY2lfbXNpX2RvbWFpbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBwY2lfbXNpX2RlZmF1bHRfZG9tYWluOworfQorCitzdGF0aWMgc3RydWN0IGlycV9kb21haW4gKnBjaV9tc2lfZ2V0X2RvbWFpbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW4gPSBOVUxMOworCisJaWYgKGRldi0+YnVzLT5tc2kpCisJCWRvbWFpbiA9IGRldi0+YnVzLT5tc2ktPmRvbWFpbjsKKwlpZiAoIWRvbWFpbikKKwkJZG9tYWluID0gYXJjaF9nZXRfcGNpX21zaV9kb21haW4oZGV2KTsKKworCXJldHVybiBkb21haW47Cit9CisKK3N0YXRpYyBpbnQgcGNpX21zaV9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCit7CisJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKKworCWRvbWFpbiA9IHBjaV9tc2lfZ2V0X2RvbWFpbihkZXYpOworCWlmIChkb21haW4pCisJCXJldHVybiBwY2lfbXNpX2RvbWFpbl9hbGxvY19pcnFzKGRvbWFpbiwgZGV2LCBudmVjLCB0eXBlKTsKKworCXJldHVybiBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9tc2lfdGVhcmRvd25fbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOworCisJZG9tYWluID0gcGNpX21zaV9nZXRfZG9tYWluKGRldik7CisJaWYgKGRvbWFpbikKKwkJcGNpX21zaV9kb21haW5fZnJlZV9pcnFzKGRvbWFpbiwgZGV2KTsKKwllbHNlCisJCWFyY2hfdGVhcmRvd25fbXNpX2lycXMoZGV2KTsKK30KKyNlbHNlCisjZGVmaW5lIHBjaV9tc2lfc2V0dXBfbXNpX2lycXMJCWFyY2hfc2V0dXBfbXNpX2lycXMKKyNkZWZpbmUgcGNpX21zaV90ZWFyZG93bl9tc2lfaXJxcwlhcmNoX3RlYXJkb3duX21zaV9pcnFzCisjZW5kaWYKIAogLyogQXJjaCBob29rcyAqLwogCitzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKiBfX3dlYWsgcGNpYmlvc19tc2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IG1zaV9jb250cm9sbGVyICpwY2lfbXNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKm1zaV9jdHJsID0gZGV2LT5idXMtPm1zaTsKKworCWlmIChtc2lfY3RybCkKKwkJcmV0dXJuIG1zaV9jdHJsOworCisJcmV0dXJuIHBjaWJpb3NfbXNpX2NvbnRyb2xsZXIoZGV2KTsKK30KKwogaW50IF9fd2VhayBhcmNoX3NldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBtc2lfY2hpcCAqY2hpcCA9IGRldi0+YnVzLT5tc2k7CisJc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwID0gcGNpX21zaV9jb250cm9sbGVyKGRldik7CiAJaW50IGVycjsKIAogCWlmICghY2hpcCB8fCAhY2hpcC0+c2V0dXBfaXJxKQpAQCAtNDgsNyArMTExLDcgQEAKIAogdm9pZCBfX3dlYWsgYXJjaF90ZWFyZG93bl9tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IG1zaV9jaGlwICpjaGlwID0gaXJxX2dldF9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXAgPSBpcnFfZ2V0X2NoaXBfZGF0YShpcnEpOwogCiAJaWYgKCFjaGlwIHx8ICFjaGlwLT50ZWFyZG93bl9pcnEpCiAJCXJldHVybjsKQEAgLTg1LDE5ICsxNDgsMTMgQEAKICAqLwogdm9pZCBkZWZhdWx0X3RlYXJkb3duX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CisJaW50IGk7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWludCBpLCBudmVjOwotCQlpZiAoZW50cnktPmlycSA9PSAwKQotCQkJY29udGludWU7Ci0JCWlmIChlbnRyeS0+bnZlY191c2VkKQotCQkJbnZlYyA9IGVudHJ5LT5udmVjX3VzZWQ7Ci0JCWVsc2UKLQkJCW52ZWMgPSAxIDw8IGVudHJ5LT5tc2lfYXR0cmliLm11bHRpcGxlOwotCQlmb3IgKGkgPSAwOyBpIDwgbnZlYzsgaSsrKQotCQkJYXJjaF90ZWFyZG93bl9tc2lfaXJxKGVudHJ5LT5pcnEgKyBpKTsKLQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpCisJCWlmIChlbnRyeS0+aXJxKQorCQkJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udmVjX3VzZWQ7IGkrKykKKwkJCQlhcmNoX3RlYXJkb3duX21zaV9pcnEoZW50cnktPmlycSArIGkpOwogfQogCiB2b2lkIF9fd2VhayBhcmNoX3RlYXJkb3duX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0xMjAsNyArMTc3LDcgQEAKIAl9CiAKIAlpZiAoZW50cnkpCi0JCV9fd3JpdGVfbXNpX21zZyhlbnRyeSwgJmVudHJ5LT5tc2cpOworCQlfX3BjaV93cml0ZV9tc2lfbXNnKGVudHJ5LCAmZW50cnktPm1zZyk7CiB9CiAKIHZvaWQgX193ZWFrIGFyY2hfcmVzdG9yZV9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQpAQCAtMTYzLDExICsyMjAsMTEgQEAKICAqIHJlbGlhYmx5IGFzIGRldmljZXMgd2l0aG91dCBhbiBJTlR4IGRpc2FibGUgYml0IHdpbGwgdGhlbiBnZW5lcmF0ZSBhCiAgKiBsZXZlbCBJUlEgd2hpY2ggd2lsbCBuZXZlciBiZSBjbGVhcmVkLgogICovCi11MzIgZGVmYXVsdF9tc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCit1MzIgX19wY2lfbXNpX2Rlc2NfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCiB7CiAJdTMyIG1hc2tfYml0cyA9IGRlc2MtPm1hc2tlZDsKIAotCWlmICghZGVzYy0+bXNpX2F0dHJpYi5tYXNrYml0KQorCWlmIChwY2lfbXNpX2lnbm9yZV9tYXNrIHx8ICFkZXNjLT5tc2lfYXR0cmliLm1hc2tiaXQpCiAJCXJldHVybiAwOwogCiAJbWFza19iaXRzICY9IH5tYXNrOwpAQCAtMTc3LDE0ICsyMzQsOSBAQAogCXJldHVybiBtYXNrX2JpdHM7CiB9CiAKLV9fd2VhayB1MzIgYXJjaF9tc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCi17Ci0JcmV0dXJuIGRlZmF1bHRfbXNpX21hc2tfaXJxKGRlc2MsIG1hc2ssIGZsYWcpOwotfQotCiBzdGF0aWMgdm9pZCBtc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCiB7Ci0JZGVzYy0+bWFza2VkID0gYXJjaF9tc2lfbWFza19pcnEoZGVzYywgbWFzaywgZmxhZyk7CisJZGVzYy0+bWFza2VkID0gX19wY2lfbXNpX2Rlc2NfbWFza19pcnEoZGVzYywgbWFzaywgZmxhZyk7CiB9CiAKIC8qCkBAIC0xOTQsMTEgKzI0NiwxNSBAQAogICogZmlsZS4gIFRoaXMgc2F2ZXMgYSBmZXcgbWlsbGlzZWNvbmRzIHdoZW4gaW5pdGlhbGlzaW5nIGRldmljZXMgd2l0aCBsb3RzCiAgKiBvZiBNU0ktWCBpbnRlcnJ1cHRzLgogICovCi11MzIgZGVmYXVsdF9tc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCit1MzIgX19wY2lfbXNpeF9kZXNjX21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCiB7CiAJdTMyIG1hc2tfYml0cyA9IGRlc2MtPm1hc2tlZDsKIAl1bnNpZ25lZCBvZmZzZXQgPSBkZXNjLT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRSArCiAJCQkJCQlQQ0lfTVNJWF9FTlRSWV9WRUNUT1JfQ1RSTDsKKworCWlmIChwY2lfbXNpX2lnbm9yZV9tYXNrKQorCQlyZXR1cm4gMDsKKwogCW1hc2tfYml0cyAmPSB+UENJX01TSVhfRU5UUllfQ1RSTF9NQVNLQklUOwogCWlmIChmbGFnKQogCQltYXNrX2JpdHMgfD0gUENJX01TSVhfRU5UUllfQ1RSTF9NQVNLQklUOwpAQCAtMjA3LDE0ICsyNjMsOSBAQAogCXJldHVybiBtYXNrX2JpdHM7CiB9CiAKLV9fd2VhayB1MzIgYXJjaF9tc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCi17Ci0JcmV0dXJuIGRlZmF1bHRfbXNpeF9tYXNrX2lycShkZXNjLCBmbGFnKTsKLX0KLQogc3RhdGljIHZvaWQgbXNpeF9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBmbGFnKQogewotCWRlc2MtPm1hc2tlZCA9IGFyY2hfbXNpeF9tYXNrX2lycShkZXNjLCBmbGFnKTsKKwlkZXNjLT5tYXNrZWQgPSBfX3BjaV9tc2l4X2Rlc2NfbWFza19pcnEoZGVzYywgZmxhZyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1zaV9zZXRfbWFza19iaXQoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1MzIgZmxhZykKQEAgLTIzMCwxMiArMjgxLDIwIEBACiAJfQogfQogCi12b2lkIG1hc2tfbXNpX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCisvKioKKyAqIHBjaV9tc2lfbWFza19pcnEgLSBHZW5lcmljIGlycSBjaGlwIGNhbGxiYWNrIHRvIG1hc2sgUENJL01TSSBpbnRlcnJ1cHRzCisgKiBAZGF0YToJcG9pbnRlciB0byBpcnFkYXRhIGFzc29jaWF0ZWQgdG8gdGhhdCBpbnRlcnJ1cHQKKyAqLwordm9pZCBwY2lfbXNpX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAltc2lfc2V0X21hc2tfYml0KGRhdGEsIDEpOwogfQogCi12b2lkIHVubWFza19tc2lfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKKy8qKgorICogcGNpX21zaV91bm1hc2tfaXJxIC0gR2VuZXJpYyBpcnEgY2hpcCBjYWxsYmFjayB0byB1bm1hc2sgUENJL01TSSBpbnRlcnJ1cHRzCisgKiBAZGF0YToJcG9pbnRlciB0byBpcnFkYXRhIGFzc29jaWF0ZWQgdG8gdGhhdCBpbnRlcnJ1cHQKKyAqLwordm9pZCBwY2lfbXNpX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewogCW1zaV9zZXRfbWFza19iaXQoZGF0YSwgMCk7CiB9CkBAIC0yNDQsMTIgKzMwMywxMSBAQAogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KQogCQlkZWZhdWx0X3Jlc3RvcmVfbXNpX2lycShkZXYsIGVudHJ5LT5pcnEpOwotCX0KIH0KIAotdm9pZCBfX3JlYWRfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQordm9pZCBfX3BjaV9yZWFkX21zaV9tc2coc3RydWN0IG1zaV9kZXNjICplbnRyeSwgc3RydWN0IG1zaV9tc2cgKm1zZykKIHsKIAlCVUdfT04oZW50cnktPmRldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApOwogCkBAIC0yNzksMzIgKzMzNyw3IEBACiAJfQogfQogCi12b2lkIHJlYWRfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBpcnFfZ2V0X21zaV9kZXNjKGlycSk7Ci0KLQlfX3JlYWRfbXNpX21zZyhlbnRyeSwgbXNnKTsKLX0KLQotdm9pZCBfX2dldF9jYWNoZWRfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCS8qIEFzc2VydCB0aGF0IHRoZSBjYWNoZSBpcyB2YWxpZCwgYXNzdW1pbmcgdGhhdAotCSAqIHZhbGlkIG1lc3NhZ2VzIGFyZSBub3QgYWxsLXplcm9lcy4gKi8KLQlCVUdfT04oIShlbnRyeS0+bXNnLmFkZHJlc3NfaGkgfCBlbnRyeS0+bXNnLmFkZHJlc3NfbG8gfAotCQkgZW50cnktPm1zZy5kYXRhKSk7Ci0KLQkqbXNnID0gZW50cnktPm1zZzsKLX0KLQotdm9pZCBnZXRfY2FjaGVkX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKLXsKLQlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gaXJxX2dldF9tc2lfZGVzYyhpcnEpOwotCi0JX19nZXRfY2FjaGVkX21zaV9tc2coZW50cnksIG1zZyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChnZXRfY2FjaGVkX21zaV9tc2cpOwotCi12b2lkIF9fd3JpdGVfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQordm9pZCBfX3BjaV93cml0ZV9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpCiB7CiAJaWYgKGVudHJ5LT5kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwKSB7CiAJCS8qIERvbid0IHRvdWNoIHRoZSBoYXJkd2FyZSBub3cgKi8KQEAgLTM0MSwzNCArMzc0LDI3IEBACiAJZW50cnktPm1zZyA9ICptc2c7CiB9CiAKLXZvaWQgd3JpdGVfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQordm9pZCBwY2lfd3JpdGVfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBpcnFfZ2V0X21zaV9kZXNjKGlycSk7CiAKLQlfX3dyaXRlX21zaV9tc2coZW50cnksIG1zZyk7CisJX19wY2lfd3JpdGVfbXNpX21zZyhlbnRyeSwgbXNnKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHdyaXRlX21zaV9tc2cpOworRVhQT1JUX1NZTUJPTF9HUEwocGNpX3dyaXRlX21zaV9tc2cpOwogCiBzdGF0aWMgdm9pZCBmcmVlX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeSwgKnRtcDsKIAlzdHJ1Y3QgYXR0cmlidXRlICoqbXNpX2F0dHJzOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZfYXR0cjsKLQlpbnQgY291bnQgPSAwOworCWludCBpLCBjb3VudCA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewotCQlpbnQgaSwgbnZlYzsKLQkJaWYgKCFlbnRyeS0+aXJxKQotCQkJY29udGludWU7Ci0JCWlmIChlbnRyeS0+bnZlY191c2VkKQotCQkJbnZlYyA9IGVudHJ5LT5udmVjX3VzZWQ7Ci0JCWVsc2UKLQkJCW52ZWMgPSAxIDw8IGVudHJ5LT5tc2lfYXR0cmliLm11bHRpcGxlOwotCQlmb3IgKGkgPSAwOyBpIDwgbnZlYzsgaSsrKQotCQkJQlVHX09OKGlycV9oYXNfYWN0aW9uKGVudHJ5LT5pcnEgKyBpKSk7Ci0JfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KQorCQlpZiAoZW50cnktPmlycSkKKwkJCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bnZlY191c2VkOyBpKyspCisJCQkJQlVHX09OKGlycV9oYXNfYWN0aW9uKGVudHJ5LT5pcnEgKyBpKSk7CiAKLQlhcmNoX3RlYXJkb3duX21zaV9pcnFzKGRldik7CisJcGNpX21zaV90ZWFyZG93bl9tc2lfaXJxcyhkZXYpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CiAJCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5pc19tc2l4KSB7CkBAIC00NTEsOSArNDc3LDggQEAKIAkJCQlQQ0lfTVNJWF9GTEFHU19FTkFCTEUgfCBQQ0lfTVNJWF9GTEFHU19NQVNLQUxMKTsKIAogCWFyY2hfcmVzdG9yZV9tc2lfaXJxcyhkZXYpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpCiAJCW1zaXhfbWFza19pcnEoZW50cnksIGVudHJ5LT5tYXNrZWQpOwotCX0KIAogCW1zaXhfY2xlYXJfYW5kX3NldF9jdHJsKGRldiwgUENJX01TSVhfRkxBR1NfTUFTS0FMTCwgMCk7CiB9CkBAIC00OTcsOSArNTIyLDggQEAKIAlpbnQgY291bnQgPSAwOwogCiAJLyogRGV0ZXJtaW5lIGhvdyBtYW55IG1zaSBlbnRyaWVzIHdlIGhhdmUgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpCiAJCSsrbnVtX21zaTsKLQl9CiAJaWYgKCFudW1fbXNpKQogCQlyZXR1cm4gMDsKIApAQCAtNTU5LDcgKzU4Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBtc2lfZGVzYyAqbXNpX3NldHVwX2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgc3RydWN0IG1zaV9kZXNjICptc2lfc2V0dXBfZW50cnkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG52ZWMpCiB7CiAJdTE2IGNvbnRyb2w7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKQEAgLTU3Nyw2ICs2MDEsOCBAQAogCWVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXQJPSAhIShjb250cm9sICYgUENJX01TSV9GTEFHU19NQVNLQklUKTsKIAllbnRyeS0+bXNpX2F0dHJpYi5kZWZhdWx0X2lycQk9IGRldi0+aXJxOwkvKiBTYXZlIElPQVBJQyBJUlEgKi8KIAllbnRyeS0+bXNpX2F0dHJpYi5tdWx0aV9jYXAJPSAoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfUU1BU0spID4+IDE7CisJZW50cnktPm1zaV9hdHRyaWIubXVsdGlwbGUJPSBpbG9nMihfX3JvdW5kdXBfcG93X29mX3R3byhudmVjKSk7CisJZW50cnktPm52ZWNfdXNlZAkJPSBudmVjOwogCiAJaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTXzY0QklUKQogCQllbnRyeS0+bWFza19wb3MgPSBkZXYtPm1zaV9jYXAgKyBQQ0lfTVNJX01BU0tfNjQ7CkBAIC02MjMsNyArNjQ5LDcgQEAKIAogCW1zaV9zZXRfZW5hYmxlKGRldiwgMCk7CS8qIERpc2FibGUgTVNJIGR1cmluZyBzZXQgdXAgKi8KIAotCWVudHJ5ID0gbXNpX3NldHVwX2VudHJ5KGRldik7CisJZW50cnkgPSBtc2lfc2V0dXBfZW50cnkoZGV2LCBudmVjKTsKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNjM0LDcgKzY2MCw3IEBACiAJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZkZXYtPm1zaV9saXN0KTsKIAogCS8qIENvbmZpZ3VyZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgKi8KLQlyZXQgPSBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0kpOworCXJldCA9IHBjaV9tc2lfc2V0dXBfbXNpX2lycXMoZGV2LCBudmVjLCBQQ0lfQ0FQX0lEX01TSSk7CiAJaWYgKHJldCkgewogCQltc2lfbWFza19pcnEoZW50cnksIG1hc2ssIH5tYXNrKTsKIAkJZnJlZV9tc2lfaXJxcyhkZXYpOwpAQCAtNzAxLDYgKzcyNyw3IEBACiAJCWVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yCT0gZW50cmllc1tpXS5lbnRyeTsKIAkJZW50cnktPm1zaV9hdHRyaWIuZGVmYXVsdF9pcnEJPSBkZXYtPmlycTsKIAkJZW50cnktPm1hc2tfYmFzZQkJPSBiYXNlOworCQllbnRyeS0+bnZlY191c2VkCQk9IDE7CiAKIAkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZkZXYtPm1zaV9saXN0KTsKIAl9CkBAIC03MTksNyArNzQ2LDYgQEAKIAkJCQkJCVBDSV9NU0lYX0VOVFJZX1ZFQ1RPUl9DVFJMOwogCiAJCWVudHJpZXNbaV0udmVjdG9yID0gZW50cnktPmlycTsKLQkJaXJxX3NldF9tc2lfZGVzYyhlbnRyeS0+aXJxLCBlbnRyeSk7CiAJCWVudHJ5LT5tYXNrZWQgPSByZWFkbChlbnRyeS0+bWFza19iYXNlICsgb2Zmc2V0KTsKIAkJbXNpeF9tYXNrX2lycShlbnRyeSwgMSk7CiAJCWkrKzsKQEAgLTc1Niw3ICs3ODIsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0lYKTsKKwlyZXQgPSBwY2lfbXNpX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0lYKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9hdmFpbDsKIApAQCAtODk1LDcgKzkyMSw3IEBACiAJLyogUmV0dXJuIHRoZSBkZXZpY2Ugd2l0aCBNU0kgdW5tYXNrZWQgYXMgaW5pdGlhbCBzdGF0ZXMgKi8KIAltYXNrID0gbXNpX21hc2soZGVzYy0+bXNpX2F0dHJpYi5tdWx0aV9jYXApOwogCS8qIEtlZXAgY2FjaGVkIHN0YXRlIHRvIGJlIHJlc3RvcmVkICovCi0JYXJjaF9tc2lfbWFza19pcnEoZGVzYywgbWFzaywgfm1hc2spOworCV9fcGNpX21zaV9kZXNjX21hc2tfaXJxKGRlc2MsIG1hc2ssIH5tYXNrKTsKIAogCS8qIFJlc3RvcmUgZGV2LT5pcnEgdG8gaXRzIGRlZmF1bHQgcGluLWFzc2VydGlvbiBpcnEgKi8KIAlkZXYtPmlycSA9IGRlc2MtPm1zaV9hdHRyaWIuZGVmYXVsdF9pcnE7CkBAIC05OTMsNyArMTAxOSw3IEBACiAJLyogUmV0dXJuIHRoZSBkZXZpY2Ugd2l0aCBNU0ktWCBtYXNrZWQgYXMgaW5pdGlhbCBzdGF0ZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewogCQkvKiBLZWVwIGNhY2hlZCBzdGF0ZXMgdG8gYmUgcmVzdG9yZWQgKi8KLQkJYXJjaF9tc2l4X21hc2tfaXJxKGVudHJ5LCAxKTsKKwkJX19wY2lfbXNpeF9kZXNjX21hc2tfaXJxKGVudHJ5LCAxKTsKIAl9CiAKIAltc2l4X2NsZWFyX2FuZF9zZXRfY3RybChkZXYsIFBDSV9NU0lYX0ZMQUdTX0VOQUJMRSwgMCk7CkBAIC0xMTM4LDMgKzExNjQsMTk3IEBACiAJcmV0dXJuIG52ZWM7CiB9CiBFWFBPUlRfU1lNQk9MKHBjaV9lbmFibGVfbXNpeF9yYW5nZSk7CisKKyNpZmRlZiBDT05GSUdfUENJX01TSV9JUlFfRE9NQUlOCisvKioKKyAqIHBjaV9tc2lfZG9tYWluX3dyaXRlX21zZyAtIEhlbHBlciB0byB3cml0ZSBNU0kgbWVzc2FnZSB0byBQQ0kgY29uZmlnIHNwYWNlCisgKiBAaXJxX2RhdGE6CVBvaW50ZXIgdG8gaW50ZXJydXB0IGRhdGEgb2YgdGhlIE1TSSBpbnRlcnJ1cHQKKyAqIEBtc2c6CVBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UKKyAqLwordm9pZCBwY2lfbXNpX2RvbWFpbl93cml0ZV9tc2coc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MgPSBpcnFfZGF0YS0+bXNpX2Rlc2M7CisKKwkvKgorCSAqIEZvciBNU0ktWCBkZXNjLT5pcnEgaXMgYWx3YXlzIGVxdWFsIHRvIGlycV9kYXRhLT5pcnEuIEZvcgorCSAqIE1TSSBvbmx5IHRoZSBmaXJzdCBpbnRlcnJ1cHQgb2YgTVVMVEkgTVNJIHBhc3NlcyB0aGUgdGVzdC4KKwkgKi8KKwlpZiAoZGVzYy0+aXJxID09IGlycV9kYXRhLT5pcnEpCisJCV9fcGNpX3dyaXRlX21zaV9tc2coZGVzYywgbXNnKTsKK30KKworLyoqCisgKiBwY2lfbXNpX2RvbWFpbl9jYWxjX2h3aXJxIC0gR2VuZXJhdGUgYSB1bmlxdWUgSUQgZm9yIGFuIE1TSSBzb3VyY2UKKyAqIEBkZXY6CVBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2UKKyAqIEBkZXNjOglQb2ludGVyIHRvIHRoZSBtc2kgZGVzY3JpcHRvcgorICoKKyAqIFRoZSBJRCBudW1iZXIgaXMgb25seSB1c2VkIHdpdGhpbiB0aGUgaXJxZG9tYWluLgorICovCitpcnFfaHdfbnVtYmVyX3QgcGNpX21zaV9kb21haW5fY2FsY19od2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKK3sKKwlyZXR1cm4gKGlycV9od19udW1iZXJfdClkZXNjLT5tc2lfYXR0cmliLmVudHJ5X25yIHwKKwkJUENJX0RFVklEKGRldi0+YnVzLT5udW1iZXIsIGRldi0+ZGV2Zm4pIDw8IDExIHwKKwkJKHBjaV9kb21haW5fbnIoZGV2LT5idXMpICYgMHhGRkZGRkZGRikgPDwgMjc7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbXNpX2Rlc2NfaXNfbXVsdGlfbXNpKHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKK3sKKwlyZXR1cm4gIWRlc2MtPm1zaV9hdHRyaWIuaXNfbXNpeCAmJiBkZXNjLT5udmVjX3VzZWQgPiAxOworfQorCisvKioKKyAqIHBjaV9tc2lfZG9tYWluX2NoZWNrX2NhcCAtIFZlcmlmeSB0aGF0IEBkb21haW4gc3VwcG9ydHMgdGhlIGNhcGFiaWxpdGllcyBmb3IgQGRldgorICogQGRvbWFpbjoJVGhlIGludGVycnVwdCBkb21haW4gdG8gY2hlY2sKKyAqIEBpbmZvOglUaGUgZG9tYWluIGluZm8gZm9yIHZlcmlmaWNhdGlvbgorICogQGRldjoJVGhlIGRldmljZSB0byBjaGVjaworICoKKyAqIFJldHVybnM6CisgKiAgMCBpZiB0aGUgZnVuY3Rpb25hbGl0eSBpcyBzdXBwb3J0ZWQKKyAqICAxIGlmIE11bHRpIE1TSSBpcyByZXF1ZXN0ZWQsIGJ1dCB0aGUgZG9tYWluIGRvZXMgbm90IHN1cHBvcnQgaXQKKyAqICAtRU5PVFNVUFAgb3RoZXJ3aXNlCisgKi8KK2ludCBwY2lfbXNpX2RvbWFpbl9jaGVja19jYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCSAgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtc2lfZGVzYyAqZGVzYyA9IGZpcnN0X3BjaV9tc2lfZW50cnkodG9fcGNpX2RldihkZXYpKTsKKworCS8qIFNwZWNpYWwgaGFuZGxpbmcgdG8gc3VwcG9ydCBwY2lfZW5hYmxlX21zaV9yYW5nZSgpICovCisJaWYgKHBjaV9tc2lfZGVzY19pc19tdWx0aV9tc2koZGVzYykgJiYKKwkgICAgIShpbmZvLT5mbGFncyAmIE1TSV9GTEFHX01VTFRJX1BDSV9NU0kpKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChkZXNjLT5tc2lfYXR0cmliLmlzX21zaXggJiYgIShpbmZvLT5mbGFncyAmIE1TSV9GTEFHX1BDSV9NU0lYKSkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV9tc2lfZG9tYWluX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCSAgICAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIGludCBlcnJvcikKK3sKKwkvKiBTcGVjaWFsIGhhbmRsaW5nIHRvIHN1cHBvcnQgcGNpX2VuYWJsZV9tc2lfcmFuZ2UoKSAqLworCWlmIChwY2lfbXNpX2Rlc2NfaXNfbXVsdGlfbXNpKGRlc2MpICYmIGVycm9yID09IC1FTk9TUEMpCisJCXJldHVybiAxOworCisJcmV0dXJuIGVycm9yOworfQorCisjaWZkZWYgR0VORVJJQ19NU0lfRE9NQUlOX09QUworc3RhdGljIHZvaWQgcGNpX21zaV9kb21haW5fc2V0X2Rlc2MobXNpX2FsbG9jX2luZm9fdCAqYXJnLAorCQkJCSAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCit7CisJYXJnLT5kZXNjID0gZGVzYzsKKwlhcmctPmh3aXJxID0gcGNpX21zaV9kb21haW5fY2FsY19od2lycShtc2lfZGVzY190b19wY2lfZGV2KGRlc2MpLAorCQkJCQkgICAgICAgZGVzYyk7Cit9CisjZWxzZQorI2RlZmluZSBwY2lfbXNpX2RvbWFpbl9zZXRfZGVzYwkJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgcGNpX21zaV9kb21haW5fb3BzX2RlZmF1bHQgPSB7CisJLnNldF9kZXNjCT0gcGNpX21zaV9kb21haW5fc2V0X2Rlc2MsCisJLm1zaV9jaGVjawk9IHBjaV9tc2lfZG9tYWluX2NoZWNrX2NhcCwKKwkuaGFuZGxlX2Vycm9yCT0gcGNpX21zaV9kb21haW5faGFuZGxlX2Vycm9yLAorfTsKKworc3RhdGljIHZvaWQgcGNpX21zaV9kb21haW5fdXBkYXRlX2RvbV9vcHMoc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgKm9wcyA9IGluZm8tPm9wczsKKworCWlmIChvcHMgPT0gTlVMTCkgeworCQlpbmZvLT5vcHMgPSAmcGNpX21zaV9kb21haW5fb3BzX2RlZmF1bHQ7CisJfSBlbHNlIHsKKwkJaWYgKG9wcy0+c2V0X2Rlc2MgPT0gTlVMTCkKKwkJCW9wcy0+c2V0X2Rlc2MgPSBwY2lfbXNpX2RvbWFpbl9zZXRfZGVzYzsKKwkJaWYgKG9wcy0+bXNpX2NoZWNrID09IE5VTEwpCisJCQlvcHMtPm1zaV9jaGVjayA9IHBjaV9tc2lfZG9tYWluX2NoZWNrX2NhcDsKKwkJaWYgKG9wcy0+aGFuZGxlX2Vycm9yID09IE5VTEwpCisJCQlvcHMtPmhhbmRsZV9lcnJvciA9IHBjaV9tc2lfZG9tYWluX2hhbmRsZV9lcnJvcjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9tc2lfZG9tYWluX3VwZGF0ZV9jaGlwX29wcyhzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvKQoreworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CisKKwlCVUdfT04oIWNoaXApOworCWlmICghY2hpcC0+aXJxX3dyaXRlX21zaV9tc2cpCisJCWNoaXAtPmlycV93cml0ZV9tc2lfbXNnID0gcGNpX21zaV9kb21haW5fd3JpdGVfbXNnOworfQorCisvKioKKyAqIHBjaV9tc2lfY3JlYXRlX2lycV9kb21haW4gLSBDcmVhdCBhIE1TSSBpbnRlcnJ1cHQgZG9tYWluCisgKiBAbm9kZToJT3B0aW9uYWwgZGV2aWNlLXRyZWUgbm9kZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIEBpbmZvOglNU0kgZG9tYWluIGluZm8KKyAqIEBwYXJlbnQ6CVBhcmVudCBpcnEgZG9tYWluCisgKgorICogVXBkYXRlcyB0aGUgZG9tYWluIGFuZCBjaGlwIG9wcyBhbmQgY3JlYXRlcyBhIE1TSSBpbnRlcnJ1cHQgZG9tYWluLgorICoKKyAqIFJldHVybnM6CisgKiBBIGRvbWFpbiBwb2ludGVyIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCitzdHJ1Y3QgaXJxX2RvbWFpbiAqcGNpX21zaV9jcmVhdGVfaXJxX2RvbWFpbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSAgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkJICAgICBzdHJ1Y3QgaXJxX2RvbWFpbiAqcGFyZW50KQoreworCWlmIChpbmZvLT5mbGFncyAmIE1TSV9GTEFHX1VTRV9ERUZfRE9NX09QUykKKwkJcGNpX21zaV9kb21haW5fdXBkYXRlX2RvbV9vcHMoaW5mbyk7CisJaWYgKGluZm8tPmZsYWdzICYgTVNJX0ZMQUdfVVNFX0RFRl9DSElQX09QUykKKwkJcGNpX21zaV9kb21haW5fdXBkYXRlX2NoaXBfb3BzKGluZm8pOworCisJcmV0dXJuIG1zaV9jcmVhdGVfaXJxX2RvbWFpbihub2RlLCBpbmZvLCBwYXJlbnQpOworfQorCisvKioKKyAqIHBjaV9tc2lfZG9tYWluX2FsbG9jX2lycXMgLSBBbGxvY2F0ZSBpbnRlcnJ1cHRzIGZvciBAZGV2IGluIEBkb21haW4KKyAqIEBkb21haW46CVRoZSBpbnRlcnJ1cHQgZG9tYWluIHRvIGFsbG9jYXRlIGZyb20KKyAqIEBkZXY6CVRoZSBkZXZpY2UgZm9yIHdoaWNoIHRvIGFsbG9jYXRlCisgKiBAbnZlYzoJVGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIHRvIGFsbG9jYXRlCisgKiBAdHlwZToJVW51c2VkIHRvIGFsbG93IHNpbXBsZXIgbWlncmF0aW9uIGZyb20gdGhlIGFyY2hfWFhYIGludGVyZmFjZXMKKyAqCisgKiBSZXR1cm5zOgorICogQSB2aXJ0dWFsIGludGVycnVwdCBudW1iZXIgb3IgYW4gZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqLworaW50IHBjaV9tc2lfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCSAgICAgIGludCBudmVjLCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gbXNpX2RvbWFpbl9hbGxvY19pcnFzKGRvbWFpbiwgJmRldi0+ZGV2LCBudmVjKTsKK30KKworLyoqCisgKiBwY2lfbXNpX2RvbWFpbl9mcmVlX2lycXMgLSBGcmVlIGludGVycnVwdHMgZm9yIEBkZXYgaW4gQGRvbWFpbgorICogQGRvbWFpbjoJVGhlIGludGVycnVwdCBkb21haW4KKyAqIEBkZXY6CVRoZSBkZXZpY2UgZm9yIHdoaWNoIHRvIGZyZWUgaW50ZXJydXB0cworICovCit2b2lkIHBjaV9tc2lfZG9tYWluX2ZyZWVfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCW1zaV9kb21haW5fZnJlZV9pcnFzKGRvbWFpbiwgJmRldi0+ZGV2KTsKK30KKworLyoqCisgKiBwY2lfbXNpX2NyZWF0ZV9kZWZhdWx0X2lycV9kb21haW4gLSBDcmVhdGUgYSBkZWZhdWx0IE1TSSBpbnRlcnJ1cHQgZG9tYWluCisgKiBAbm9kZToJT3B0aW9uYWwgZGV2aWNlLXRyZWUgbm9kZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIEBpbmZvOglNU0kgZG9tYWluIGluZm8KKyAqIEBwYXJlbnQ6CVBhcmVudCBpcnEgZG9tYWluCisgKgorICogUmV0dXJuczogQSBkb21haW4gcG9pbnRlciBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS4gSWYgc3VjY2Vzc2Z1bAorICogdGhlIGRlZmF1bHQgUENJL01TSSBpcnFkb21haW4gcG9pbnRlciBpcyB1cGRhdGVkLgorICovCitzdHJ1Y3QgaXJxX2RvbWFpbiAqcGNpX21zaV9jcmVhdGVfZGVmYXVsdF9pcnFfZG9tYWluKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywgc3RydWN0IGlycV9kb21haW4gKnBhcmVudCkKK3sKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOworCisJbXV0ZXhfbG9jaygmcGNpX21zaV9kb21haW5fbG9jayk7CisJaWYgKHBjaV9tc2lfZGVmYXVsdF9kb21haW4pIHsKKwkJcHJfZXJyKCJQQ0k6IGRlZmF1bHQgaXJxIGRvbWFpbiBmb3IgUENJIE1TSSBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuXG4iKTsKKwkJZG9tYWluID0gTlVMTDsKKwl9IGVsc2UgeworCQlkb21haW4gPSBwY2lfbXNpX2NyZWF0ZV9pcnFfZG9tYWluKG5vZGUsIGluZm8sIHBhcmVudCk7CisJCXBjaV9tc2lfZGVmYXVsdF9kb21haW4gPSBkb21haW47CisJfQorCW11dGV4X3VubG9jaygmcGNpX21zaV9kb21haW5fbG9jayk7CisKKwlyZXR1cm4gZG9tYWluOworfQorI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJX0lSUV9ET01BSU4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZwppbmRleCBmNjVmZjQ5Li4wMjhlNzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWcKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnCkBAIC03MSw2ICs3MSwxNSBAQAogCWhlbHAKIAkgIFJlYm9vdCBzdXBwb3J0IGZvciBIaXNpbGljb24gYm9hcmRzLgogCitjb25maWcgUE9XRVJfUkVTRVRfSU1YCisJYm9vbCAiSU1YNiBwb3dlci1vZmYgZHJpdmVyIgorCWRlcGVuZHMgb24gUE9XRVJfUkVTRVQgJiYgU09DX0lNWDYKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0IHBvd2VyIG9mZiBleHRlcm5hbCBQTUlDIGJ5IFBNSUNfT05fUkVRIG9uIGkubXg2CisJICBib2FyZHMuSWYgeW91IHdhbnQgdG8gdXNlIG90aGVyIHBpbiB0byBjb250cm9sIGV4dGVybmFsIHBvd2VyLHBsZWFzZQorCSAgc2F5IE4gaGVyZSBvciBkaXNhYmxlIGluIGR0cyB0byBtYWtlIHN1cmUgcG1fcG93ZXJfb2ZmIG5ldmVyIGJlCisJICBvdmVyd3JvdGUgd3JvbmdseSBieSB0aGlzIGRyaXZlci4KKwogY29uZmlnIFBPV0VSX1JFU0VUX01TTQogCWJvb2wgIlF1YWxjb21tIE1TTSBwb3dlci1vZmYgZHJpdmVyIgogCWRlcGVuZHMgb24gQVJDSF9RQ09NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L01ha2VmaWxlIGIvZHJpdmVycy9wb3dlci9yZXNldC9NYWtlZmlsZQppbmRleCA3NmNlMWM1Li4xZDQ4MDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfR1BJTykgKz0gZ3Bpby1wb3dlcm9mZi5vCiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfR1BJT19SRVNUQVJUKSArPSBncGlvLXJlc3RhcnQubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX0hJU0kpICs9IGhpc2ktcmVib290Lm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9JTVgpICs9IGlteC1zbnZzLXBvd2Vyb2ZmLm8KIG9iai0kKENPTkZJR19QT1dFUl9SRVNFVF9NU00pICs9IG1zbS1wb3dlcm9mZi5vCiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfTFRDMjk1MikgKz0gbHRjMjk1Mi1wb3dlcm9mZi5vCiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfUU5BUCkgKz0gcW5hcC1wb3dlcm9mZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2F0OTEtcmVzZXQuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXQ5MS1yZXNldC5jCmluZGV4IDNjYjM2NjkuLjY5YTc1ZDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2F0OTEtcmVzZXQuYworKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2F0OTEtcmVzZXQuYwpAQCAtMTksOCArMTksOCBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X2RkcnNkci5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc2RyYW1jLmg+CisjaW5jbHVkZSA8c29jL2F0OTEvYXQ5MXNhbTlfZGRyc2RyLmg+CisjaW5jbHVkZSA8c29jL2F0OTEvYXQ5MXNhbTlfc2RyYW1jLmg+CiAKICNkZWZpbmUgQVQ5MV9SU1RDX0NSCTB4MDAJCS8qIFJlc2V0IENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBBVDkxX1JTVENfUFJPQ1JTVAlCSVQoMCkJCS8qIFByb2Nlc3NvciBSZXNldCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9pbXgtc252cy1wb3dlcm9mZi5jIGIvZHJpdmVycy9wb3dlci9yZXNldC9pbXgtc252cy1wb3dlcm9mZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNmNlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2lteC1zbnZzLXBvd2Vyb2ZmLmMKQEAgLTAsMCArMSw2NiBAQAorLyogUG93ZXIgb2ZmIGRyaXZlciBmb3IgaS5teDYKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgRlJFRVNDQUxFIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBiYXNlZCBvbiBtc20tcG93ZXJvZmYuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworc3RhdGljIHZvaWQgX19pb21lbSAqc252c19iYXNlOworCitzdGF0aWMgdm9pZCBkb19pbXhfcG93ZXJvZmYodm9pZCkKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChzbnZzX2Jhc2UpOworCisJLyogc2V0IFRPUCBhbmQgRFBfRU4gYml0ICovCisJd3JpdGVsKHZhbHVlIHwgMHg2MCwgc252c19iYXNlKTsKK30KKworc3RhdGljIGludCBpbXhfcG93ZXJvZmZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzbnZzX2Jhc2UgPSBvZl9pb21hcChwZGV2LT5kZXYub2Zfbm9kZSwgMCk7CisJaWYgKCFzbnZzX2Jhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwbV9wb3dlcl9vZmYgPSBkb19pbXhfcG93ZXJvZmY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2lteF9wb3dlcm9mZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXBvd2Vyb2ZmIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9pbXhfcG93ZXJvZmZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbXhfcG93ZXJvZmZfZHJpdmVyID0geworCS5wcm9iZSA9IGlteF9wb3dlcm9mZl9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpbXgtc252cy1wb3dlcm9mZiIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvZl9pbXhfcG93ZXJvZmZfbWF0Y2gpLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbXhfcG93ZXJvZmZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlteF9wb3dlcm9mZl9kcml2ZXIpOworfQorZGV2aWNlX2luaXRjYWxsKGlteF9wb3dlcm9mZl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci84OHBtODYwNy5jCmluZGV4IDZkNzdkY2QuLjNmZTQ3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvODhwbTg2MDcuYwpAQCAtMzMwLDcgKzMzMCw4IEBACiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucHJvb3QsIG5wKSB7CiAJCWlmICghb2Zfbm9kZV9jbXAobnAtPm5hbWUsIGluZm8tPmRlc2MubmFtZSkpIHsKIAkJCWNvbmZpZy0+aW5pdF9kYXRhID0KLQkJCQlvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmcGRldi0+ZGV2LCBucCk7CisJCQkJb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgbnAsCisJCQkJCQkJICAgJmluZm8tPmRlc2MpOwogCQkJY29uZmlnLT5vZl9ub2RlID0gbnA7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKaW5kZXggNTVkN2I3Yi4uYzNhNjBiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCkBAIC01MjEsNiArNTIxLDE0IEBACiAJaGVscAogCSAgU2F5IHkgaGVyZSB0byBzdXBwb3J0IHRoZSByZWd1bGF0b3JzIGZvdW5kIG9uIFJpY29oIFJONVQ2MTggUE1JQy4KIAorY29uZmlnIFJFR1VMQVRPUl9SVDUwMzMKKwl0cmlzdGF0ZSAiUmljaHRlayBSVDUwMzMgUmVndWxhdG9ycyIKKwlkZXBlbmRzIG9uIE1GRF9SVDUwMzMKKwloZWxwCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igdm9sdGFnZSBhbmQgY3VycmVudCByZWd1bGF0b3JzIGluIFJpY2h0ZWsKKwkgIFJUNTAzMyBQTUlDLiBUaGUgZGV2aWNlIHN1cHBvcnRzIG11bHRpcGxlIHJlZ3VsYXRvcnMgbGlrZQorCSAgY3VycmVudCBzb3VyY2UsIExETyBhbmQgQnVjay4KKwogY29uZmlnIFJFR1VMQVRPUl9TMk1QQTAxCiAJdHJpc3RhdGUgIlNhbXN1bmcgUzJNUEEwMSB2b2x0YWdlIHJlZ3VsYXRvciIKIAlkZXBlbmRzIG9uIE1GRF9TRUNfQ09SRQpAQCAtNTI5LDEzICs1MzcsMTMgQEAKIAkgdmlhIEkyQyBidXMuIFMyTVBBMDEgaGFzIDEwIEJ1Y2tzIGFuZCAyNiBMRE8gb3V0cHV0cy4KIAogY29uZmlnIFJFR1VMQVRPUl9TMk1QUzExCi0JdHJpc3RhdGUgIlNhbXN1bmcgUzJNUFMxMS9TMk1QUzE0L1MyTVBVMDIgdm9sdGFnZSByZWd1bGF0b3IiCisJdHJpc3RhdGUgIlNhbXN1bmcgUzJNUFMxMS9TMk1QUzEzL1MyTVBTMTQvUzJNUFUwMiB2b2x0YWdlIHJlZ3VsYXRvciIKIAlkZXBlbmRzIG9uIE1GRF9TRUNfQ09SRQogCWhlbHAKLQkgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYSBTYW1zdW5nIFMyTVBTMTEvUzJNUFMxNC9TMk1QVTAyIHZvbHRhZ2Ugb3V0cHV0Ci0JIHJlZ3VsYXRvciB2aWEgSTJDIGJ1cy4gVGhlIGNoaXAgaXMgY29tcHJpc2VkIG9mIGhpZ2ggZWZmaWNpZW50IEJ1Y2sKLQkgY29udmVydGVycyBpbmNsdWRpbmcgRHVhbC1QaGFzZSBCdWNrIGNvbnZlcnRlciwgQnVjay1Cb29zdCBjb252ZXJ0ZXIsCi0JIHZhcmlvdXMgTERPcy4KKwkgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYSBTYW1zdW5nIFMyTVBTMTEvUzJNUFMxMy9TMk1QUzE0L1MyTVBVMDIgdm9sdGFnZQorCSBvdXRwdXQgcmVndWxhdG9yIHZpYSBJMkMgYnVzLiBUaGUgY2hpcCBpcyBjb21wcmlzZWQgb2YgaGlnaCBlZmZpY2llbnQKKwkgQnVjayBjb252ZXJ0ZXJzIGluY2x1ZGluZyBEdWFsLVBoYXNlIEJ1Y2sgY29udmVydGVyLCBCdWNrLUJvb3N0CisJIGNvbnZlcnRlciwgdmFyaW91cyBMRE9zLgogCiBjb25maWcgUkVHVUxBVE9SX1M1TTg3NjcKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNU04NzY3QSB2b2x0YWdlIHJlZ3VsYXRvciIKQEAgLTU0Nyw3ICs1NTUsNyBAQAogCiBjb25maWcgUkVHVUxBVE9SX1NLWTgxNDUyCiAJdHJpc3RhdGUgIlNreXdvcmtzIFNvbHV0aW9ucyBTS1k4MTQ1MiB2b2x0YWdlIHJlZ3VsYXRvciIKLQlkZXBlbmRzIG9uIFNLWTgxNDUyCisJZGVwZW5kcyBvbiBNRkRfU0tZODE0NTIKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBTa3l3b3JrcyBTS1k4MTQ1MiB2b2x0YWdlIG91dHB1dCByZWd1bGF0b3IKIAkgIHZpYSBJMkMgYnVzLiBTS1k4MTQ1MiBoYXMgb25lIHZvbHRhZ2UgbGluZWFyIHJlZ3VsYXRvciBjYW4gYmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKaW5kZXggMTAyOWVkMy4uMWYyOGViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKQEAgLTY5LDYgKzY5LDcgQEAKIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUkM1VDU4MykgICs9IHJjNXQ1ODMtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUks4MDgpICAgKz0gcms4MDgtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUk41VDYxOCkgKz0gcm41dDYxOC1yZWd1bGF0b3Iubworb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9SVDUwMzMpCSs9IHJ0NTAzMy1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9TMk1QQTAxKSArPSBzMm1wYTAxLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUzJNUFMxMSkgKz0gczJtcHMxMS5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1M1TTg3NjcpICs9IHM1bTg3NjcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2FjdDg4NjUtcmVndWxhdG9yLmMKaW5kZXggYWZkMDZmOS4uOWVlYzQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9hY3Q4ODY1LXJlZ3VsYXRvci5jCkBAIC02MSw2ICs2MSw4IEBACiAjZGVmaW5lCUFDVDg4NDZfUkVHMTJfVlNFVAkweGEwCiAjZGVmaW5lCUFDVDg4NDZfUkVHMTJfQ1RSTAkweGExCiAjZGVmaW5lCUFDVDg4NDZfUkVHMTNfQ1RSTAkweGIxCisjZGVmaW5lCUFDVDg4NDZfR0xCX09GRl9DVFJMCTB4YzMKKyNkZWZpbmUJQUNUODg0Nl9PRkZfU1lTTUFTSwkweDE4CiAKIC8qCiAgKiBBQ1Q4ODY1IEdsb2JhbCBSZWdpc3RlciBNYXAuCkBAIC04NCw2ICs4Niw3IEBACiAjZGVmaW5lCUFDVDg4NjVfTERPM19DVFJMCTB4NjEKICNkZWZpbmUJQUNUODg2NV9MRE80X1ZTRVQJMHg2NAogI2RlZmluZQlBQ1Q4ODY1X0xETzRfQ1RSTAkweDY1CisjZGVmaW5lCUFDVDg4NjVfTVNUUk9GRgkJMHgyMAogCiAvKgogICogRmllbGQgRGVmaW5pdGlvbnMuCkBAIC05OCw2ICsxMDEsOCBAQAogCiBzdHJ1Y3QgYWN0ODg2NSB7CiAJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCWludCBvZmZfcmVnOworCWludCBvZmZfbWFzazsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBhY3Q4ODY1X3JlZ21hcF9jb25maWcgPSB7CkBAIC0yNzUsNiArMjgwLDE2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqYWN0ODg2NV9pMmNfY2xpZW50Oworc3RhdGljIHZvaWQgYWN0ODg2NV9wb3dlcl9vZmYodm9pZCkKK3sKKwlzdHJ1Y3QgYWN0ODg2NSAqYWN0ODg2NTsKKworCWFjdDg4NjUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYWN0ODg2NV9pMmNfY2xpZW50KTsKKwlyZWdtYXBfd3JpdGUoYWN0ODg2NS0+cmVnbWFwLCBhY3Q4ODY1LT5vZmZfcmVnLCBhY3Q4ODY1LT5vZmZfbWFzayk7CisJd2hpbGUgKDEpOworfQorCiBzdGF0aWMgaW50IGFjdDg4NjVfcG1pY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmkyY19pZCkKIHsKQEAgLTI4NSw2ICszMDAsNyBAQAogCWludCBpLCByZXQsIG51bV9yZWd1bGF0b3JzOwogCXN0cnVjdCBhY3Q4ODY1ICphY3Q4ODY1OwogCXVuc2lnbmVkIGxvbmcgdHlwZTsKKwlpbnQgb2ZmX3JlZywgb2ZmX21hc2s7CiAKIAlwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoZGV2KTsKIApAQCAtMzA0LDEwICszMjAsMTQgQEAKIAljYXNlIEFDVDg4NDY6CiAJCXJlZ3VsYXRvcnMgPSBhY3Q4ODQ2X3JlZ3VsYXRvcnM7CiAJCW51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShhY3Q4ODQ2X3JlZ3VsYXRvcnMpOworCQlvZmZfcmVnID0gQUNUODg0Nl9HTEJfT0ZGX0NUUkw7CisJCW9mZl9tYXNrID0gQUNUODg0Nl9PRkZfU1lTTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBBQ1Q4ODY1OgogCQlyZWd1bGF0b3JzID0gYWN0ODg2NV9yZWd1bGF0b3JzOwogCQludW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUoYWN0ODg2NV9yZWd1bGF0b3JzKTsKKwkJb2ZmX3JlZyA9IEFDVDg4NjVfU1lTX0NUUkw7CisJCW9mZl9tYXNrID0gQUNUODg2NV9NU1RST0ZGOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGRldiwgImludmFsaWQgZGV2aWNlIGlkICVsdVxuIiwgdHlwZSk7CkBAIC0zNDUsNiArMzY1LDE3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJaWYgKG9mX2RldmljZV9pc19zeXN0ZW1fcG93ZXJfY29udHJvbGxlcihkZXYtPm9mX25vZGUpKSB7CisJCWlmICghcG1fcG93ZXJfb2ZmKSB7CisJCQlhY3Q4ODY1X2kyY19jbGllbnQgPSBjbGllbnQ7CisJCQlhY3Q4ODY1LT5vZmZfcmVnID0gb2ZmX3JlZzsKKwkJCWFjdDg4NjUtPm9mZl9tYXNrID0gb2ZmX21hc2s7CisJCQlwbV9wb3dlcl9vZmYgPSBhY3Q4ODY1X3Bvd2VyX29mZjsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHNldCBwb3dlcm9mZiBjYXBhYmlsaXR5LCBhbHJlYWR5IGRlZmluZWRcbiIpOworCQl9CisJfQorCiAJLyogRmluYWxseSByZWdpc3RlciBkZXZpY2VzICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9yZWd1bGF0b3JzOyBpKyspIHsKIAkJY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjID0gJnJlZ3VsYXRvcnNbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9hbmF0b3AtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9hbmF0b3AtcmVndWxhdG9yLmMKaW5kZXggNGY3MzBhZi4uMzU4NjU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYW5hdG9wLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2FuYXRvcC1yZWd1bGF0b3IuYwpAQCAtMTg5LDE3ICsxODksMTggQEAKIAlpbnQgcmV0ID0gMDsKIAl1MzIgdmFsOwogCi0JaW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wKTsKIAlzcmVnID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzcmVnKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzcmVnKQogCQlyZXR1cm4gLUVOT01FTTsKLQlzcmVnLT5pbml0ZGF0YSA9IGluaXRkYXRhOwogCXNyZWctPm5hbWUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWd1bGF0b3ItbmFtZSIsIE5VTEwpOwogCXJkZXNjID0gJnNyZWctPnJkZXNjOwogCXJkZXNjLT5uYW1lID0gc3JlZy0+bmFtZTsKIAlyZGVzYy0+dHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFOwogCXJkZXNjLT5vd25lciA9IFRISVNfTU9EVUxFOwogCisJaW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wLCByZGVzYyk7CisJc3JlZy0+aW5pdGRhdGEgPSBpbml0ZGF0YTsKKwogCWFuYXRvcF9ucCA9IG9mX2dldF9wYXJlbnQobnApOwogCWlmICghYW5hdG9wX25wKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTI4Myw2ICsyODQsMTkgQEAKIAkJCXNyZWctPnNlbCA9IDA7CiAJCQlzcmVnLT5ieXBhc3MgPSB0cnVlOwogCQl9CisKKwkJLyoKKwkJICogSW4gY2FzZSB2ZGRwdSB3YXMgZGlzYWJsZWQgYnkgdGhlIGJvb3Rsb2FkZXIsIHdlIG5lZWQgdG8gc2V0CisJCSAqIGEgc2FuZSBkZWZhdWx0IHVudGlsIGlteDYtY3B1ZnJlcSB3YXMgcHJvYmVkIGFuZCBjaGFuZ2VzIHRoZQorCQkgKiB2b2x0YWdlIHRvIHRoZSBjb3JyZWN0IHZhbHVlLiBJbiB0aGlzIGNhc2Ugd2Ugc2V0IDEuMjVWLgorCQkgKi8KKwkJaWYgKCFzcmVnLT5zZWwgJiYgIXN0cmNtcChzcmVnLT5uYW1lLCAidmRkcHUiKSkKKwkJCXNyZWctPnNlbCA9IDIyOworCisJCWlmICghc3JlZy0+c2VsKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBhIHZhbGlkIGRlZmF1bHQgdm9sdGFnZSBzZWxlY3Rvci5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAl9IGVsc2UgewogCQlyZGVzYy0+b3BzID0gJmFuYXRvcF9yb3BzOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2FyaXpvbmEtbGRvMS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1sZG8xLmMKaW5kZXggNGM5ZGI1OC4uZDA3MWIyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1sZG8xLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1sZG8xLmMKQEAgLTE3OSw3ICsxNzksOCBAQAogfTsKIAogc3RhdGljIGludCBhcml6b25hX2xkbzFfb2ZfZ2V0X3BkYXRhKHN0cnVjdCBhcml6b25hICphcml6b25hLAotCQkJCSAgICAgc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgKmNvbmZpZykKKwkJCQkgICAgIHN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGFyaXpvbmFfcGRhdGEgKnBkYXRhID0gJmFyaXpvbmEtPnBkYXRhOwogCXN0cnVjdCBhcml6b25hX2xkbzEgKmxkbzEgPSBjb25maWctPmRyaXZlcl9kYXRhOwpAQCAtMTk0LDcgKzE5NSw4IEBACiAJaWYgKGluaXRfbm9kZSkgewogCQljb25maWctPm9mX25vZGUgPSBpbml0X25vZGU7CiAKLQkJaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoYXJpem9uYS0+ZGV2LCBpbml0X25vZGUpOworCQlpbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShhcml6b25hLT5kZXYsIGluaXRfbm9kZSwKKwkJCQkJCSAgICAgICBkZXNjKTsKIAogCQlpZiAoaW5pdF9kYXRhKSB7CiAJCQlpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzID0gJmxkbzEtPnN1cHBseTsKQEAgLTI1Nyw5ICsyNTksMTEgQEAKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19PRikpIHsKIAkJaWYgKCFkZXZfZ2V0X3BsYXRkYXRhKGFyaXpvbmEtPmRldikpIHsKLQkJCXJldCA9IGFyaXpvbmFfbGRvMV9vZl9nZXRfcGRhdGEoYXJpem9uYSwgJmNvbmZpZyk7CisJCQlyZXQgPSBhcml6b25hX2xkbzFfb2ZfZ2V0X3BkYXRhKGFyaXpvbmEsICZjb25maWcsIGRlc2MpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKKworCQkJY29uZmlnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1taWNzdXBwLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9hcml6b25hLW1pY3N1cHAuYwppbmRleCBjZTlhY2E1Li5jMzEzZWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9hcml6b25hLW1pY3N1cHAuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9hcml6b25hLW1pY3N1cHAuYwpAQCAtMTk4LDcgKzE5OCw4IEBACiB9OwogCiBzdGF0aWMgaW50IGFyaXpvbmFfbWljc3VwcF9vZl9nZXRfcGRhdGEoc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEsCi0JCQkJCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcpCisJCQkJCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcsCisJCQkJCWNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgYXJpem9uYV9wZGF0YSAqcGRhdGEgPSAmYXJpem9uYS0+cGRhdGE7CiAJc3RydWN0IGFyaXpvbmFfbWljc3VwcCAqbWljc3VwcCA9IGNvbmZpZy0+ZHJpdmVyX2RhdGE7CkBAIC0yMTAsNyArMjExLDcgQEAKIAlpZiAobnApIHsKIAkJY29uZmlnLT5vZl9ub2RlID0gbnA7CiAKLQkJaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoYXJpem9uYS0+ZGV2LCBucCk7CisJCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGFyaXpvbmEtPmRldiwgbnAsIGRlc2MpOwogCiAJCWlmIChpbml0X2RhdGEpIHsKIAkJCWluaXRfZGF0YS0+Y29uc3VtZXJfc3VwcGxpZXMgPSAmbWljc3VwcC0+c3VwcGx5OwpAQCAtMjY0LDcgKzI2NSw4IEBACiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpKSB7CiAJCWlmICghZGV2X2dldF9wbGF0ZGF0YShhcml6b25hLT5kZXYpKSB7Ci0JCQlyZXQgPSBhcml6b25hX21pY3N1cHBfb2ZfZ2V0X3BkYXRhKGFyaXpvbmEsICZjb25maWcpOworCQkJcmV0ID0gYXJpem9uYV9taWNzdXBwX29mX2dldF9wZGF0YShhcml6b25hLCAmY29uZmlnLAorCQkJCQkJCSAgIGRlc2MpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IGNkODdjMGMuLmUyMjU3MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTgyOCw3ICs4MjgsNyBAQAogCWlmICghY291bnQpCiAJCXNwcmludGYoYnVmLCAibm8gcGFyYW1ldGVycyIpOwogCi0JcmRldl9pbmZvKHJkZXYsICIlc1xuIiwgYnVmKTsKKwlyZGV2X2RiZyhyZGV2LCAiJXNcbiIsIGJ1Zik7CiAKIAlpZiAoKGNvbnN0cmFpbnRzLT5taW5fdVYgIT0gY29uc3RyYWludHMtPm1heF91VikgJiYKIAkgICAgIShjb25zdHJhaW50cy0+dmFsaWRfb3BzX21hc2sgJiBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UpKQpAQCAtMTcxMyw2ICsxNzEzLDggQEAKIAkJCQlncGlvZF9wdXQocGluLT5ncGlvZCk7CiAJCQkJbGlzdF9kZWwoJnBpbi0+bGlzdCk7CiAJCQkJa2ZyZWUocGluKTsKKwkJCQlyZGV2LT5lbmFfcGluID0gTlVMTDsKKwkJCQlyZXR1cm47CiAJCQl9IGVsc2UgewogCQkJCXBpbi0+cmVxdWVzdF9jb3VudC0tOwogCQkJfQpAQCAtMTk3Niw5ICsxOTc4LDE4IEBACiAKIAkJLyogd2UgYXJlIGxhc3QgdXNlciAqLwogCQlpZiAoX3JlZ3VsYXRvcl9jYW5fY2hhbmdlX3N0YXR1cyhyZGV2KSkgeworCQkJcmV0ID0gX25vdGlmaWVyX2NhbGxfY2hhaW4ocmRldiwKKwkJCQkJCSAgIFJFR1VMQVRPUl9FVkVOVF9QUkVfRElTQUJMRSwKKwkJCQkJCSAgIE5VTEwpOworCQkJaWYgKHJldCAmIE5PVElGWV9TVE9QX01BU0spCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJCXJldCA9IF9yZWd1bGF0b3JfZG9fZGlzYWJsZShyZGV2KTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBkaXNhYmxlXG4iKTsKKwkJCQlfbm90aWZpZXJfY2FsbF9jaGFpbihyZGV2LAorCQkJCQkJUkVHVUxBVE9SX0VWRU5UX0FCT1JUX0RJU0FCTEUsCisJCQkJCQlOVUxMKTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQkJX25vdGlmaWVyX2NhbGxfY2hhaW4ocmRldiwgUkVHVUxBVE9SX0VWRU5UX0RJU0FCTEUsCkBAIC0yMDM1LDkgKzIwNDYsMTYgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAorCXJldCA9IF9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9GT1JDRV9ESVNBQkxFIHwKKwkJCVJFR1VMQVRPUl9FVkVOVF9QUkVfRElTQUJMRSwgTlVMTCk7CisJaWYgKHJldCAmIE5PVElGWV9TVE9QX01BU0spCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0ID0gX3JlZ3VsYXRvcl9kb19kaXNhYmxlKHJkZXYpOwogCWlmIChyZXQgPCAwKSB7CiAJCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gZm9yY2UgZGlzYWJsZVxuIik7CisJCV9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9GT1JDRV9ESVNBQkxFIHwKKwkJCQlSRUdVTEFUT1JfRVZFTlRfQUJPUlRfRElTQUJMRSwgTlVMTCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0zNjUwLDcgKzM2NjgsOCBAQAogCiAJZGV2X3NldF9kcnZkYXRhKCZyZGV2LT5kZXYsIHJkZXYpOwogCi0JaWYgKGNvbmZpZy0+ZW5hX2dwaW8gJiYgZ3Bpb19pc192YWxpZChjb25maWctPmVuYV9ncGlvKSkgeworCWlmICgoY29uZmlnLT5lbmFfZ3BpbyB8fCBjb25maWctPmVuYV9ncGlvX2luaXRpYWxpemVkKSAmJgorCSAgICBncGlvX2lzX3ZhbGlkKGNvbmZpZy0+ZW5hX2dwaW8pKSB7CiAJCXJldCA9IHJlZ3VsYXRvcl9lbmFfZ3Bpb19yZXF1ZXN0KHJkZXYsIGNvbmZpZyk7CiAJCWlmIChyZXQgIT0gMCkgewogCQkJcmRldl9lcnIocmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGVuYWJsZSBHUElPJWQ6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDUyLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDUyLXJlZ3VsYXRvci5jCmluZGV4IDAwMDMzNjIuLjM5NDVmMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTA1Mi1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwNTItcmVndWxhdG9yLmMKQEAgLTQzNiw3ICs0MzYsOCBAQAogCQkJaWYgKCFvZl9ub2RlX2NtcChucC0+bmFtZSwKIAkJCQkJIHJlZ3VsYXRvci0+aW5mby0+cmVnX2Rlc2MubmFtZSkpIHsKIAkJCQljb25maWcuaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoCi0JCQkJCSZwZGV2LT5kZXYsIG5wKTsKKwkJCQkJJnBkZXYtPmRldiwgbnAsCisJCQkJCSZyZWd1bGF0b3ItPmluZm8tPnJlZ19kZXNjKTsKIAkJCQljb25maWcub2Zfbm9kZSA9IG5wOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDYzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDYzLXJlZ3VsYXRvci5jCmluZGV4IDdjOTQ2MWQuLjM3ZGQ0MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTA2My1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwNjMtcmVndWxhdG9yLmMKQEAgLTg2NywxNyArODY3LDE0IEBACiAJCXJldHVybiBpcnE7CiAJfQogCi0JcmVndWxhdG9ycy0+aXJxX2xkb19saW0gPSByZWdtYXBfaXJxX2dldF92aXJxKGRhOTA2My0+cmVnbWFwX2lycSwgaXJxKTsKLQlpZiAocmVndWxhdG9ycy0+aXJxX2xkb19saW0gPj0gMCkgewotCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShyZWd1bGF0b3JzLT5pcnFfbGRvX2xpbSwKLQkJCQkJICAgTlVMTCwgZGE5MDYzX2xkb19saW1fZXZlbnQsCi0JCQkJCSAgIElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsCi0JCQkJCSAgICJMRE9fTElNIiwgcmVndWxhdG9ycyk7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkJIkZhaWxlZCB0byByZXF1ZXN0IExET19MSU0gSVJRLlxuIik7Ci0JCQlyZWd1bGF0b3JzLT5pcnFfbGRvX2xpbSA9IC1FTlhJTzsKLQkJfQorCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGlycSwKKwkJCQlOVUxMLCBkYTkwNjNfbGRvX2xpbV9ldmVudCwKKwkJCQlJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULAorCQkJCSJMRE9fTElNIiwgcmVndWxhdG9ycyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkZhaWxlZCB0byByZXF1ZXN0IExET19MSU0gSVJRLlxuIik7CisJCXJlZ3VsYXRvcnMtPmlycV9sZG9fbGltID0gLUVOWElPOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZGE5MjEwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MjEwLXJlZ3VsYXRvci5jCmluZGV4IDdhMzIwZGQuLmJjNjEwMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTIxMC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9kYTkyMTAtcmVndWxhdG9yLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCiAJY29uZmlnLmRldiA9ICZpMmMtPmRldjsKIAljb25maWcuaW5pdF9kYXRhID0gcGRhdGEgPyAmcGRhdGEtPmRhOTIxMF9jb25zdHJhaW50cyA6Ci0JCW9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgZGV2LT5vZl9ub2RlKTsKKwkJb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUsICZkYTkyMTBfcmVnKTsKIAljb25maWcuZHJpdmVyX2RhdGEgPSBjaGlwOwogCWNvbmZpZy5yZWdtYXAgPSBjaGlwLT5yZWdtYXA7CiAJY29uZmlnLm9mX25vZGUgPSBkZXYtPm9mX25vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9kdW1teS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZHVtbXkuYwppbmRleCAyNDM2ZGI5Li43YWVmOWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9kdW1teS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGR1bW15X29wczsKIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyBkdW1teV9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBkdW1teV9kZXNjID0gewogCS5uYW1lID0gInJlZ3VsYXRvci1kdW1teSIsCiAJLmlkID0gLTEsCiAJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2ZhbjUzNTU1LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9mYW41MzU1NS5jCmluZGV4IGY4ZTQyNTcuLjZjNDNhYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2ZhbjUzNTU1LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZmFuNTM1NTUuYwpAQCAtMzAyLDcgKzMwMiw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGZhbjUzNTU1X3BsYXRmb3JtX2RhdGEgKmZhbjUzNTU1X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQorCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGZhbjUzNTU1X3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCWludCByZXQ7CkBAIC0zMTIsNyArMzEzLDcgQEAKIAlpZiAoIXBkYXRhKQogCQlyZXR1cm4gTlVMTDsKIAotCXBkYXRhLT5yZWd1bGF0b3IgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wKTsKKwlwZGF0YS0+cmVndWxhdG9yID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBucCwgZGVzYyk7CiAKIAlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImZjcyxzdXNwZW5kLXZvbHRhZ2Utc2VsZWN0b3IiLAogCQkJCSAgICZ0bXApOwpAQCAtMzQ3LDIwICszNDgsMjAgQEAKIAl1bnNpZ25lZCBpbnQgdmFsOwogCWludCByZXQ7CiAKKwlkaSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZihzdHJ1Y3QgZmFuNTM1NTVfZGV2aWNlX2luZm8pLAorCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWRpKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmY2xpZW50LT5kZXYpOwogCWlmICghcGRhdGEpCi0JCXBkYXRhID0gZmFuNTM1NTVfcGFyc2VfZHQoJmNsaWVudC0+ZGV2LCBucCk7CisJCXBkYXRhID0gZmFuNTM1NTVfcGFyc2VfZHQoJmNsaWVudC0+ZGV2LCBucCwgJmRpLT5kZXNjKTsKIAogCWlmICghcGRhdGEgfHwgIXBkYXRhLT5yZWd1bGF0b3IpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJQbGF0Zm9ybSBkYXRhIG5vdCBmb3VuZCFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkaSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZihzdHJ1Y3QgZmFuNTM1NTVfZGV2aWNlX2luZm8pLAotCQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWRpKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCWRpLT5yZWd1bGF0b3IgPSBwZGF0YS0+cmVndWxhdG9yOwogCWlmIChjbGllbnQtPmRldi5vZl9ub2RlKSB7CiAJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKaW5kZXggMzU0MTA1ZS4uZDIxZGEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCkBAIC00MCwxMyArNDAsMTUgQEAKIC8qKgogICogb2ZfZ2V0X2ZpeGVkX3ZvbHRhZ2VfY29uZmlnIC0gZXh0cmFjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyBzdHJ1Y3R1cmUgaW5mbwogICogQGRldjogZGV2aWNlIHJlcXVlc3RpbmcgZm9yIGZpeGVkX3ZvbHRhZ2VfY29uZmlnCisgKiBAZGVzYzogcmVndWxhdG9yIGRlc2NyaXB0aW9uCiAgKgogICogUG9wdWxhdGVzIGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHN0cnVjdHVyZSBieSBleHRyYWN0aW5nIGRhdGEgZnJvbSBkZXZpY2UKICAqIHRyZWUgbm9kZSwgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBvcHVsYXRlZCBzdHJ1Y3R1cmUgb2YgTlVMTCBpZiBtZW1vcnkKICAqIGFsbG9jIGZhaWxzLgogICovCiBzdGF0aWMgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnICoKLW9mX2dldF9maXhlZF92b2x0YWdlX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYpCitvZl9nZXRfZml4ZWRfdm9sdGFnZV9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgKmNvbmZpZzsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwpAQCAtNTcsNyArNTksNyBAQAogCWlmICghY29uZmlnKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWNvbmZpZy0+aW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUpOworCWNvbmZpZy0+aW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUsIGRlc2MpOwogCWlmICghY29uZmlnLT5pbml0X2RhdGEpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCkBAIC0xMTIsOCArMTE0LDE0IEBACiAJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY2ZnID0geyB9OwogCWludCByZXQ7CiAKKwlkcnZkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9kYXRhKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRydmRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCiAJaWYgKHBkZXYtPmRldi5vZl9ub2RlKSB7Ci0JCWNvbmZpZyA9IG9mX2dldF9maXhlZF92b2x0YWdlX2NvbmZpZygmcGRldi0+ZGV2KTsKKwkJY29uZmlnID0gb2ZfZ2V0X2ZpeGVkX3ZvbHRhZ2VfY29uZmlnKCZwZGV2LT5kZXYsCisJCQkJCQkgICAgICZkcnZkYXRhLT5kZXNjKTsKIAkJaWYgKElTX0VSUihjb25maWcpKQogCQkJcmV0dXJuIFBUUl9FUlIoY29uZmlnKTsKIAl9IGVsc2UgewpAQCAtMTIzLDExICsxMzEsNiBAQAogCWlmICghY29uZmlnKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRydmRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBmaXhlZF92b2x0YWdlX2RhdGEpLAotCQkJICAgICAgIEdGUF9LRVJORUwpOwotCWlmICghZHJ2ZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAlkcnZkYXRhLT5kZXNjLm5hbWUgPSBkZXZtX2tzdHJkdXAoJnBkZXYtPmRldiwKIAkJCQkJICBjb25maWctPnN1cHBseV9uYW1lLAogCQkJCQkgIEdGUF9LRVJORUwpOwpAQCAtMTU3LDggKzE2MCwxMSBAQAogCiAJZHJ2ZGF0YS0+ZGVzYy5maXhlZF91ViA9IGNvbmZpZy0+bWljcm92b2x0czsKIAotCWlmIChjb25maWctPmdwaW8gPj0gMCkKKwlpZiAoZ3Bpb19pc192YWxpZChjb25maWctPmdwaW8pKSB7CiAJCWNmZy5lbmFfZ3BpbyA9IGNvbmZpZy0+Z3BpbzsKKwkJaWYgKHBkZXYtPmRldi5vZl9ub2RlKQorCQkJY2ZnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKKwl9CiAJY2ZnLmVuYV9ncGlvX2ludmVydCA9ICFjb25maWctPmVuYWJsZV9oaWdoOwogCWlmIChjb25maWctPmVuYWJsZWRfYXRfYm9vdCkgewogCQlpZiAoY29uZmlnLT5lbmFibGVfaGlnaCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2dwaW8tcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9ncGlvLXJlZ3VsYXRvci5jCmluZGV4IDk4OWIyM2IuLmM4ODhhOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2dwaW8tcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZ3Bpby1yZWd1bGF0b3IuYwpAQCAtMTMzLDcgKzEzMyw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGdwaW9fcmVndWxhdG9yX2NvbmZpZyAqCi1vZl9nZXRfZ3Bpb19yZWd1bGF0b3JfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK29mX2dldF9ncGlvX3JlZ3VsYXRvcl9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGdwaW9fcmVndWxhdG9yX2NvbmZpZyAqY29uZmlnOwogCWNvbnN0IGNoYXIgKnJlZ3R5cGU7CkBAIC0xNDYsNyArMTQ3LDcgQEAKIAlpZiAoIWNvbmZpZykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQljb25maWctPmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgbnApOworCWNvbmZpZy0+aW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBucCwgZGVzYyk7CiAJaWYgKCFjb25maWctPmluaXRfZGF0YSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKQEAgLTE2MiwzNCArMTYzLDQxIEBACiAKIAljb25maWctPmVuYWJsZV9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8obnAsICJlbmFibGUtZ3BpbyIsIDApOwogCi0JLyogRmV0Y2ggR1BJT3MuICovCi0JY29uZmlnLT5ucl9ncGlvcyA9IG9mX2dwaW9fY291bnQobnApOworCS8qIEZldGNoIEdQSU9zLiAtIG9wdGlvbmFsIHByb3BlcnR5Ki8KKwlyZXQgPSBvZl9ncGlvX2NvdW50KG5wKTsKKwlpZiAoKHJldCA8IDApICYmIChyZXQgIT0gLUVOT0VOVCkpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CiAKLQljb25maWctPmdwaW9zID0gZGV2bV9remFsbG9jKGRldiwKLQkJCQlzaXplb2Yoc3RydWN0IGdwaW8pICogY29uZmlnLT5ucl9ncGlvcywKLQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbmZpZy0+Z3Bpb3MpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWlmIChyZXQgPiAwKSB7CisJCWNvbmZpZy0+bnJfZ3Bpb3MgPSByZXQ7CisJCWNvbmZpZy0+Z3Bpb3MgPSBkZXZtX2t6YWxsb2MoZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IGdwaW8pICogY29uZmlnLT5ucl9ncGlvcywKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghY29uZmlnLT5ncGlvcykKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JcHJvcGxlbiA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhucCwgImdwaW9zLXN0YXRlcyIpOwotCS8qIG9wdGlvbmFsIHByb3BlcnR5ICovCi0JaWYgKHByb3BsZW4gPCAwKQotCQlwcm9wbGVuID0gMDsKKwkJcHJvcGxlbiA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhucCwgImdwaW9zLXN0YXRlcyIpOworCQkvKiBvcHRpb25hbCBwcm9wZXJ0eSAqLworCQlpZiAocHJvcGxlbiA8IDApCisJCQlwcm9wbGVuID0gMDsKIAotCWlmIChwcm9wbGVuID4gMCAmJiBwcm9wbGVuICE9IGNvbmZpZy0+bnJfZ3Bpb3MpIHsKLQkJZGV2X3dhcm4oZGV2LCAiZ3Bpb3MgPC0+IGdwaW9zLXN0YXRlcyBtaXNtYXRjaFxuIik7Ci0JCXByb3BsZW4gPSAwOwotCX0KKwkJaWYgKHByb3BsZW4gPiAwICYmIHByb3BsZW4gIT0gY29uZmlnLT5ucl9ncGlvcykgeworCQkJZGV2X3dhcm4oZGV2LCAiZ3Bpb3MgPC0+IGdwaW9zLXN0YXRlcyBtaXNtYXRjaFxuIik7CisJCQlwcm9wbGVuID0gMDsKKwkJfQogCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+bnJfZ3Bpb3M7IGkrKykgewotCQlncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8obnAsICJncGlvcyIsIGkpOwotCQlpZiAoZ3BpbyA8IDApCi0JCQlicmVhazsKLQkJY29uZmlnLT5ncGlvc1tpXS5ncGlvID0gZ3BpbzsKLQkJaWYgKHByb3BsZW4gPiAwKSB7Ci0JCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgImdwaW9zLXN0YXRlcyIsIGksICZyZXQpOwotCQkJaWYgKHJldCkKLQkJCQljb25maWctPmdwaW9zW2ldLmZsYWdzID0gR1BJT0ZfT1VUX0lOSVRfSElHSDsKKwkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+bnJfZ3Bpb3M7IGkrKykgeworCQkJZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG5wLCAiZ3Bpb3MiLCBpKTsKKwkJCWlmIChncGlvIDwgMCkKKwkJCQlicmVhazsKKwkJCWNvbmZpZy0+Z3Bpb3NbaV0uZ3BpbyA9IGdwaW87CisJCQlpZiAocHJvcGxlbiA+IDApIHsKKwkJCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgImdwaW9zLXN0YXRlcyIsCisJCQkJCQkJICAgaSwgJnJldCk7CisJCQkJaWYgKHJldCkKKwkJCQkJY29uZmlnLT5ncGlvc1tpXS5mbGFncyA9CisJCQkJCQkJICAgR1BJT0ZfT1VUX0lOSVRfSElHSDsKKwkJCX0KIAkJfQogCX0KIApAQCAtMjQzLDE3ICsyNTEsMTggQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyBjZmcgPSB7IH07CiAJaW50IHB0ciwgcmV0LCBzdGF0ZTsKIAotCWlmIChucCkgewotCQljb25maWcgPSBvZl9nZXRfZ3Bpb19yZWd1bGF0b3JfY29uZmlnKCZwZGV2LT5kZXYsIG5wKTsKLQkJaWYgKElTX0VSUihjb25maWcpKQotCQkJcmV0dXJuIFBUUl9FUlIoY29uZmlnKTsKLQl9Ci0KIAlkcnZkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZ3Bpb19yZWd1bGF0b3JfZGF0YSksCiAJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKGRydmRhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAobnApIHsKKwkJY29uZmlnID0gb2ZfZ2V0X2dwaW9fcmVndWxhdG9yX2NvbmZpZygmcGRldi0+ZGV2LCBucCwKKwkJCQkJCSAgICAgICZkcnZkYXRhLT5kZXNjKTsKKwkJaWYgKElTX0VSUihjb25maWcpKQorCQkJcmV0dXJuIFBUUl9FUlIoY29uZmlnKTsKKwl9CisKIAlkcnZkYXRhLT5kZXNjLm5hbWUgPSBrc3RyZHVwKGNvbmZpZy0+c3VwcGx5X25hbWUsIEdGUF9LRVJORUwpOwogCWlmIChkcnZkYXRhLT5kZXNjLm5hbWUgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc3VwcGx5IG5hbWVcbiIpOwpAQCAtMjYxLDEzICsyNzAsMjMgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JZHJ2ZGF0YS0+Z3Bpb3MgPSBrbWVtZHVwKGNvbmZpZy0+Z3Bpb3MsCi0JCQkJIGNvbmZpZy0+bnJfZ3Bpb3MgKiBzaXplb2Yoc3RydWN0IGdwaW8pLAotCQkJCSBHRlBfS0VSTkVMKTsKLQlpZiAoZHJ2ZGF0YS0+Z3Bpb3MgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgZ3BpbyBkYXRhXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfbmFtZTsKKwlpZiAoY29uZmlnLT5ucl9ncGlvcyAhPSAwKSB7CisJCWRydmRhdGEtPmdwaW9zID0ga21lbWR1cChjb25maWctPmdwaW9zLAorCQkJCQkgY29uZmlnLT5ucl9ncGlvcyAqIHNpemVvZihzdHJ1Y3QgZ3BpbyksCisJCQkJCSBHRlBfS0VSTkVMKTsKKwkJaWYgKGRydmRhdGEtPmdwaW9zID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBncGlvIGRhdGFcbiIpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX25hbWU7CisJCX0KKworCQlkcnZkYXRhLT5ucl9ncGlvcyA9IGNvbmZpZy0+bnJfZ3Bpb3M7CisJCXJldCA9IGdwaW9fcmVxdWVzdF9hcnJheShkcnZkYXRhLT5ncGlvcywgZHJ2ZGF0YS0+bnJfZ3Bpb3MpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiQ291bGQgbm90IG9idGFpbiByZWd1bGF0b3Igc2V0dGluZyBHUElPczogJWRcbiIsIHJldCk7CisJCQlnb3RvIGVycl9tZW1zdGF0ZTsKKwkJfQogCX0KIAogCWRydmRhdGEtPnN0YXRlcyA9IGttZW1kdXAoY29uZmlnLT5zdGF0ZXMsCkBAIC0zMDEsMTQgKzMyMCw2IEBACiAJCWdvdG8gZXJyX21lbWdwaW87CiAJfQogCi0JZHJ2ZGF0YS0+bnJfZ3Bpb3MgPSBjb25maWctPm5yX2dwaW9zOwotCXJldCA9IGdwaW9fcmVxdWVzdF9hcnJheShkcnZkYXRhLT5ncGlvcywgZHJ2ZGF0YS0+bnJfZ3Bpb3MpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkgICAiQ291bGQgbm90IG9idGFpbiByZWd1bGF0b3Igc2V0dGluZyBHUElPczogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX21lbXN0YXRlOwotCX0KLQogCS8qIGJ1aWxkIGluaXRpYWwgc3RhdGUgZnJvbSBncGlvIGluaXQgZGF0YS4gKi8KIAlzdGF0ZSA9IDA7CiAJZm9yIChwdHIgPSAwOyBwdHIgPCBkcnZkYXRhLT5ucl9ncGlvczsgcHRyKyspIHsKQEAgLTMyMiw4ICszMzMsMTAgQEAKIAljZmcuZHJpdmVyX2RhdGEgPSBkcnZkYXRhOwogCWNmZy5vZl9ub2RlID0gbnA7CiAKLQlpZiAoY29uZmlnLT5lbmFibGVfZ3BpbyA+PSAwKQorCWlmIChncGlvX2lzX3ZhbGlkKGNvbmZpZy0+ZW5hYmxlX2dwaW8pKSB7CiAJCWNmZy5lbmFfZ3BpbyA9IGNvbmZpZy0+ZW5hYmxlX2dwaW87CisJCWNmZy5lbmFfZ3Bpb19pbml0aWFsaXplZCA9IHRydWU7CisJfQogCWNmZy5lbmFfZ3Bpb19pbnZlcnQgPSAhY29uZmlnLT5lbmFibGVfaGlnaDsKIAlpZiAoY29uZmlnLT5lbmFibGVkX2F0X2Jvb3QpIHsKIAkJaWYgKGNvbmZpZy0+ZW5hYmxlX2hpZ2gpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY4Ni5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc2ODYuYwppbmRleCBmNjkzMjBlLi44NzFiOTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY4Ni5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDc3Njg2LmMKQEAgLTQ1LDYgKzQ1LDIzIEBACiAjZGVmaW5lIE1BWDc3Njg2X0RWU19NSU5VVgk2MDAwMDAKICNkZWZpbmUgTUFYNzc2ODZfRFZTX1VWU1RFUAkxMjUwMAogCisvKgorICogVmFsdWVzIHVzZWQgZm9yIGNvbmZpZ3VyaW5nIExET3MgYW5kIGJ1Y2tzLgorICogRm9yY2luZyBsb3cgcG93ZXIgbW9kZTogTERPMSwgMy01LCA5LCAxMywgMTctMjYKKyAqLworI2RlZmluZSBNQVg3NzY4Nl9MRE9fTE9XUE9XRVIJCTB4MQorLyoKKyAqIE9uL29mZiBjb250cm9sbGVkIGJ5IFBXUlJFUToKKyAqICAtIExETzIsIDYtOCwgMTAtMTIsIDE0LTE2CisgKiAgLSBidWNrWzEyMzRdCisgKi8KKyNkZWZpbmUgTUFYNzc2ODZfT0ZGX1BXUlJFUQkJMHgxCisvKiBMb3cgcG93ZXIgbW9kZSBjb250cm9sbGVkIGJ5IFBXUlJFUTogQWxsIExET3MgKi8KKyNkZWZpbmUgTUFYNzc2ODZfTERPX0xPV1BPV0VSX1BXUlJFUQkweDIKKy8qIEZvcmNpbmcgbG93IHBvd2VyIG1vZGU6IGJ1Y2tbMjM0XSAqLworI2RlZmluZSBNQVg3NzY4Nl9CVUNLX0xPV1BPV0VSCQkweDIKKyNkZWZpbmUgTUFYNzc2ODZfTk9STUFMCQkJMHgzCisKICNkZWZpbmUgTUFYNzc2ODZfT1BNT0RFX1NISUZUCTYKICNkZWZpbmUgTUFYNzc2ODZfT1BNT0RFX0JVQ0syMzRfU0hJRlQJNAogI2RlZmluZSBNQVg3NzY4Nl9PUE1PREVfTUFTSwkweDMKQEAgLTY1LDIzICs4MiwzNiBAQAogfTsKIAogc3RydWN0IG1heDc3Njg2X2RhdGEgeworCS8qIEFycmF5IGluZGV4ZWQgYnkgcmVndWxhdG9yIGlkICovCiAJdW5zaWduZWQgaW50IG9wbW9kZVtNQVg3NzY4Nl9SRUdVTEFUT1JTXTsKIH07CiAKLS8qIFNvbWUgQlVDS1Mgc3VwcG9ydHMgTm9ybWFsW09OL09GRl0gbW9kZSBkdXJpbmcgc3VzcGVuZCAqLwotc3RhdGljIGludCBtYXg3NzY4Nl9idWNrX3NldF9zdXNwZW5kX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCitzdGF0aWMgdW5zaWduZWQgaW50IG1heDc3Njg2X2dldF9vcG1vZGVfc2hpZnQoaW50IGlkKQogewotCXVuc2lnbmVkIGludCB2YWw7CisJc3dpdGNoIChpZCkgeworCWNhc2UgTUFYNzc2ODZfQlVDSzE6CisJY2FzZSBNQVg3NzY4Nl9CVUNLNSAuLi4gTUFYNzc2ODZfQlVDSzk6CisJCXJldHVybiAwOworCWNhc2UgTUFYNzc2ODZfQlVDSzIgLi4uIE1BWDc3Njg2X0JVQ0s0OgorCQlyZXR1cm4gTUFYNzc2ODZfT1BNT0RFX0JVQ0syMzRfU0hJRlQ7CisJZGVmYXVsdDoKKwkJLyogYWxsIExET3MgKi8KKwkJcmV0dXJuIE1BWDc3Njg2X09QTU9ERV9TSElGVDsKKwl9Cit9CisKKy8qIFNvbWUgQlVDS3MgYW5kIExET3Mgc3VwcG9ydHMgTm9ybWFsW09OL09GRl0gbW9kZSBkdXJpbmcgc3VzcGVuZCAqLworc3RhdGljIGludCBtYXg3NzY4Nl9zZXRfc3VzcGVuZF9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXVuc2lnbmVkIGludCB2YWwsIHNoaWZ0OwogCXN0cnVjdCBtYXg3NzY4Nl9kYXRhICptYXg3NzY4NiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJaW50IHJldCwgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKIAotCWlmIChpZCA9PSBNQVg3NzY4Nl9CVUNLMSkKLQkJdmFsID0gMHgxOwotCWVsc2UKLQkJdmFsID0gMHgxIDw8IE1BWDc3Njg2X09QTU9ERV9CVUNLMjM0X1NISUZUOworCXNoaWZ0ID0gbWF4Nzc2ODZfZ2V0X29wbW9kZV9zaGlmdChpZCk7CisJdmFsID0gTUFYNzc2ODZfT0ZGX1BXUlJFUTsKIAogCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcsCi0JCQkJIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLCB2YWwpOworCQkJCSByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywgdmFsIDw8IHNoaWZ0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMDMsMTAgKzEzMywxMCBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBSRUdVTEFUT1JfTU9ERV9JRExFOgkJCS8qIE9OIGluIExQIE1vZGUgKi8KLQkJdmFsID0gMHgyIDw8IE1BWDc3Njg2X09QTU9ERV9TSElGVDsKKwkJdmFsID0gTUFYNzc2ODZfTERPX0xPV1BPV0VSX1BXUlJFUTsKIAkJYnJlYWs7CiAJY2FzZSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw6CQkJLyogT04gaW4gTm9ybWFsIE1vZGUgKi8KLQkJdmFsID0gMHgzIDw8IE1BWDc3Njg2X09QTU9ERV9TSElGVDsKKwkJdmFsID0gTUFYNzc2ODZfTk9STUFMOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl93YXJuKCIlczogcmVndWxhdG9yX3N1c3BlbmRfbW9kZSA6IDB4JXggbm90IHN1cHBvcnRlZFxuIiwKQEAgLTExNSw3ICsxNDUsOCBAQAogCX0KIAogCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcsCi0JCQkJICByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywgdmFsKTsKKwkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLAorCQkJCSAgdmFsIDw8IE1BWDc3Njg2X09QTU9ERV9TSElGVCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTMzLDEzICsxNjQsMTMgQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToJCQkvKiBzd2l0Y2ggb2ZmICovCi0JCXZhbCA9IDB4MSA8PCBNQVg3NzY4Nl9PUE1PREVfU0hJRlQ7CisJCXZhbCA9IE1BWDc3Njg2X09GRl9QV1JSRVE7CiAJCWJyZWFrOwogCWNhc2UgUkVHVUxBVE9SX01PREVfSURMRToJCQkvKiBPTiBpbiBMUCBNb2RlICovCi0JCXZhbCA9IDB4MiA8PCBNQVg3NzY4Nl9PUE1PREVfU0hJRlQ7CisJCXZhbCA9IE1BWDc3Njg2X0xET19MT1dQT1dFUl9QV1JSRVE7CiAJCWJyZWFrOwogCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgkJCS8qIE9OIGluIE5vcm1hbCBNb2RlICovCi0JCXZhbCA9IDB4MyA8PCBNQVg3NzY4Nl9PUE1PREVfU0hJRlQ7CisJCXZhbCA9IE1BWDc3Njg2X05PUk1BTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfd2FybigiJXM6IHJlZ3VsYXRvcl9zdXNwZW5kX21vZGUgOiAweCV4IG5vdCBzdXBwb3J0ZWRcbiIsCkBAIC0xNDgsNyArMTc5LDggQEAKIAl9CiAKIAlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocmRldi0+cmVnbWFwLCByZGV2LT5kZXNjLT5lbmFibGVfcmVnLAotCQkJCSByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywgdmFsKTsKKwkJCQkgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2ssCisJCQkJIHZhbCA8PCBNQVg3NzY4Nl9PUE1PREVfU0hJRlQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTE1OSwxMCArMTkxLDE3IEBACiBzdGF0aWMgaW50IG1heDc3Njg2X2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgbWF4Nzc2ODZfZGF0YSAqbWF4Nzc2ODYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVuc2lnbmVkIGludCBzaGlmdDsKKwlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKworCXNoaWZ0ID0gbWF4Nzc2ODZfZ2V0X29wbW9kZV9zaGlmdChpZCk7CisKKwlpZiAobWF4Nzc2ODYtPm9wbW9kZVtpZF0gPT0gTUFYNzc2ODZfT0ZGX1BXUlJFUSkKKwkJbWF4Nzc2ODYtPm9wbW9kZVtpZF0gPSBNQVg3NzY4Nl9OT1JNQUw7CiAKIAlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywKIAkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLAotCQkJCSAgbWF4Nzc2ODYtPm9wbW9kZVtyZGV2X2dldF9pZChyZGV2KV0pOworCQkJCSAgbWF4Nzc2ODYtPm9wbW9kZVtpZF0gPDwgc2hpZnQpOwogfQogCiBzdGF0aWMgaW50IG1heDc3Njg2X3NldF9yYW1wX2RlbGF5KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgcmFtcF9kZWxheSkKQEAgLTIxMiw2ICsyNTEsNyBAQAogCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCiAJLnNldF9zdXNwZW5kX21vZGUJPSBtYXg3NzY4Nl9sZG9fc2V0X3N1c3BlbmRfbW9kZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3Njg2X3NldF9zdXNwZW5kX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWF4Nzc2ODZfYnVjazFfb3BzID0gewpAQCAtMjIzLDcgKzI2Myw3IEBACiAJLmdldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCi0JLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzY4Nl9idWNrX3NldF9zdXNwZW5kX2Rpc2FibGUsCisJLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzY4Nl9zZXRfc3VzcGVuZF9kaXNhYmxlLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1heDc3Njg2X2J1Y2tfZHZzX29wcyA9IHsKQEAgLTIzNiwxMSArMjc2LDEzIEBACiAJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKIAkuc2V0X3JhbXBfZGVsYXkJCT0gbWF4Nzc2ODZfc2V0X3JhbXBfZGVsYXksCi0JLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzY4Nl9idWNrX3NldF9zdXNwZW5kX2Rpc2FibGUsCisJLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzY4Nl9zZXRfc3VzcGVuZF9kaXNhYmxlLAogfTsKIAogI2RlZmluZSByZWd1bGF0b3JfZGVzY19sZG8obnVtKQkJewkJCQlcCiAJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJ2b2x0YWdlLXJlZ3VsYXRvcnMiKSwJXAogCS5pZAkJPSBNQVg3NzY4Nl9MRE8jI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X29wcywJCQkJXAogCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCkBAIC0yNTcsNiArMjk5LDggQEAKIH0KICNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfbHBtX2xkbyhudW0pCXsJCQkJXAogCS5uYW1lCQk9ICJMRE8iI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkxETyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigidm9sdGFnZS1yZWd1bGF0b3JzIiksCVwKIAkuaWQJCT0gTUFYNzc2ODZfTERPIyNudW0sCQkJCVwKIAkub3BzCQk9ICZtYXg3NzY4Nl9sZG9fb3BzLAkJCQlcCiAJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKQEAgLTI3Myw2ICszMTcsOCBAQAogfQogI2RlZmluZSByZWd1bGF0b3JfZGVzY19sZG9fbG93KG51bSkJCXsJCQlcCiAJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJ2b2x0YWdlLXJlZ3VsYXRvcnMiKSwJXAogCS5pZAkJPSBNQVg3NzY4Nl9MRE8jI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X2xkb19vcHMsCQkJCVwKIAkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXApAQCAtMjg5LDYgKzMzNSw4IEBACiB9CiAjZGVmaW5lIHJlZ3VsYXRvcl9kZXNjX2xkbzFfbG93KG51bSkJCXsJCQlcCiAJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJ2b2x0YWdlLXJlZ3VsYXRvcnMiKSwJXAogCS5pZAkJPSBNQVg3NzY4Nl9MRE8jI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X29wcywJCQkJXAogCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCkBAIC0zMDUsNiArMzUzLDggQEAKIH0KICNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfYnVjayhudW0pCQl7CQkJXAogCS5uYW1lCQk9ICJCVUNLIiNudW0sCQkJCQlcCisJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJCVUNLIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJ2b2x0YWdlLXJlZ3VsYXRvcnMiKSwJXAogCS5pZAkJPSBNQVg3NzY4Nl9CVUNLIyNudW0sCQkJCVwKIAkub3BzCQk9ICZtYXg3NzY4Nl9vcHMsCQkJCVwKIAkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXApAQCAtMzIwLDYgKzM3MCw4IEBACiB9CiAjZGVmaW5lIHJlZ3VsYXRvcl9kZXNjX2J1Y2sxKG51bSkJCXsJCQlcCiAJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkJVQ0siI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInZvbHRhZ2UtcmVndWxhdG9ycyIpLAlcCiAJLmlkCQk9IE1BWDc3Njg2X0JVQ0sjI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X2J1Y2sxX29wcywJCQkJXAogCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCkBAIC0zMzUsNiArMzg3LDggQEAKIH0KICNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfYnVja19kdnMobnVtKQkJewkJCVwKIAkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiQlVDSyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigidm9sdGFnZS1yZWd1bGF0b3JzIiksCVwKIAkuaWQJCT0gTUFYNzc2ODZfQlVDSyMjbnVtLAkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc2ODZfYnVja19kdnNfb3BzLAkJCVwKIAkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXApAQCAtMzUwLDcgKzQwNCw3IEBACiAJCQk8PCBNQVg3NzY4Nl9PUE1PREVfQlVDSzIzNF9TSElGVCwJCVwKIH0KIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyByZWd1bGF0b3JzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKIAlyZWd1bGF0b3JfZGVzY19sZG8xX2xvdygxKSwKIAlyZWd1bGF0b3JfZGVzY19sZG9fbG93KDIpLAogCXJlZ3VsYXRvcl9kZXNjX2xkbygzKSwKQEAgLTM4OCwxMDMgKzQ0MiwzNyBAQAogCXJlZ3VsYXRvcl9kZXNjX2J1Y2soOSksCiB9OwogCi0jaWZkZWYgQ09ORklHX09GCi1zdGF0aWMgaW50IG1heDc3Njg2X3BtaWNfZHRfcGFyc2VfcGRhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkJc3RydWN0IG1heDc3Njg2X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQotewotCXN0cnVjdCBtYXg3NzY4Nl9kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG1pY19ucCwgKnJlZ3VsYXRvcnNfbnA7Ci0Jc3RydWN0IG1heDc3Njg2X3JlZ3VsYXRvcl9kYXRhICpyZGF0YTsKLQlzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoIHJtYXRjaCA9IHsgfTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCXBtaWNfbnAgPSBpb2Rldi0+ZGV2LT5vZl9ub2RlOwotCXJlZ3VsYXRvcnNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwbWljX25wLCAidm9sdGFnZS1yZWd1bGF0b3JzIik7Ci0JaWYgKCFyZWd1bGF0b3JzX25wKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBmaW5kIHJlZ3VsYXRvcnMgc3ViLW5vZGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwZGF0YS0+bnVtX3JlZ3VsYXRvcnMgPSBBUlJBWV9TSVpFKHJlZ3VsYXRvcnMpOwotCXJkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcmRhdGEpICoKLQkJCSAgICAgcGRhdGEtPm51bV9yZWd1bGF0b3JzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJkYXRhKSB7Ci0JCW9mX25vZGVfcHV0KHJlZ3VsYXRvcnNfbnApOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZWd1bGF0b3JzOyBpKyspIHsKLQkJcm1hdGNoLm5hbWUgPSByZWd1bGF0b3JzW2ldLm5hbWU7Ci0JCXJtYXRjaC5pbml0X2RhdGEgPSBOVUxMOwotCQlybWF0Y2gub2Zfbm9kZSA9IE5VTEw7Ci0JCW9mX3JlZ3VsYXRvcl9tYXRjaCgmcGRldi0+ZGV2LCByZWd1bGF0b3JzX25wLCAmcm1hdGNoLCAxKTsKLQkJcmRhdGFbaV0uaW5pdGRhdGEgPSBybWF0Y2guaW5pdF9kYXRhOwotCQlyZGF0YVtpXS5vZl9ub2RlID0gcm1hdGNoLm9mX25vZGU7Ci0JfQotCi0JcGRhdGEtPnJlZ3VsYXRvcnMgPSByZGF0YTsKLQlvZl9ub2RlX3B1dChyZWd1bGF0b3JzX25wKTsKLQotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgbWF4Nzc2ODZfcG1pY19kdF9wYXJzZV9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQlzdHJ1Y3QgbWF4Nzc2ODZfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX09GICovCi0KIHN0YXRpYyBpbnQgbWF4Nzc2ODZfcG1pY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtYXg3NzY4Nl9kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBtYXg3NzY4Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoaW9kZXYtPmRldik7CiAJc3RydWN0IG1heDc3Njg2X2RhdGEgKm1heDc3Njg2OwotCWludCBpLCByZXQgPSAwOworCWludCBpOwogCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoIXBkYXRhKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGEgZm91bmQgZm9yIHJlZ3VsYXRvclxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmIChpb2Rldi0+ZGV2LT5vZl9ub2RlKSB7Ci0JCXJldCA9IG1heDc3Njg2X3BtaWNfZHRfcGFyc2VfcGRhdGEocGRldiwgcGRhdGEpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAocGRhdGEtPm51bV9yZWd1bGF0b3JzICE9IE1BWDc3Njg2X1JFR1VMQVRPUlMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJIkludmFsaWQgaW5pdGlhbCBkYXRhIGZvciByZWd1bGF0b3IncyBpbml0aWFsaWF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJbWF4Nzc2ODYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBtYXg3NzY4Nl9kYXRhKSwKIAkJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIW1heDc3Njg2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvbmZpZy5kZXYgPSAmcGRldi0+ZGV2OworCWNvbmZpZy5kZXYgPSBpb2Rldi0+ZGV2OwogCWNvbmZpZy5yZWdtYXAgPSBpb2Rldi0+cmVnbWFwOwogCWNvbmZpZy5kcml2ZXJfZGF0YSA9IG1heDc3Njg2OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1heDc3Njg2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVg3NzY4Nl9SRUdVTEFUT1JTOyBpKyspIHsKIAkJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CisJCWludCBpZCA9IHJlZ3VsYXRvcnNbaV0uaWQ7CiAKLQkJY29uZmlnLmluaXRfZGF0YSA9IHBkYXRhLT5yZWd1bGF0b3JzW2ldLmluaXRkYXRhOwotCQljb25maWcub2Zfbm9kZSA9IHBkYXRhLT5yZWd1bGF0b3JzW2ldLm9mX25vZGU7Ci0KLQkJbWF4Nzc2ODYtPm9wbW9kZVtpXSA9IHJlZ3VsYXRvcnNbaV0uZW5hYmxlX21hc2s7CisJCW1heDc3Njg2LT5vcG1vZGVbaWRdID0gTUFYNzc2ODZfTk9STUFMOwogCQlyZGV2ID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoJnBkZXYtPmRldiwKIAkJCQkJCSZyZWd1bGF0b3JzW2ldLCAmY29uZmlnKTsKIAkJaWYgKElTX0VSUihyZGV2KSkgeworCQkJaW50IHJldCA9IFBUUl9FUlIocmRldik7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJInJlZ3VsYXRvciBpbml0IGZhaWxlZCBmb3IgJWRcbiIsIGkpOwotCQkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJCQkJInJlZ3VsYXRvciBpbml0IGZhaWxlZCBmb3IgJWQ6ICVkXG4iLCBpLCByZXQpOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc2OTMuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDc3NjkzLmMKaW5kZXggZDE1OGY3MS4uN2I5NzU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc2OTMuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY5My5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAkuZW5hYmxlX21hc2sJPSBTQUZFT1VUX0NUUkxfRU5TQUZFT1VUIyNfbnVtIyNfTUFTSyAsCVwKIH0KIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyByZWd1bGF0b3JzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKIAlyZWd1bGF0b3JfZGVzY19lc2FmZW91dCgxKSwKIAlyZWd1bGF0b3JfZGVzY19lc2FmZW91dCgyKSwKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzgwMi5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc4MDIuYwppbmRleCA0NWZhMjQwLi4wNzY2NjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzgwMi5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDc3ODAyLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL21heDc3Njg2Lmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL21heDc3Njg2LXByaXZhdGUuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZWd1bGF0b3IvbWF4aW0sbWF4Nzc4MDIuaD4KIAogLyogRGVmYXVsdCByYW1wIGRlbGF5IGluIGNhc2UgaXQgaXMgbm90IG1hbnVhbGx5IHNldCAqLwogI2RlZmluZSBNQVg3NzgwMl9SQU1QX0RFTEFZCQkxMDAwMDAJCS8qIHVWL3VzICovCkBAIC00OSw2ICs1MCwxMCBAQAogI2RlZmluZSBNQVg3NzgwMl9SQU1QX1JBVEVfTUFTS180QklUCTB4RjAKICNkZWZpbmUgTUFYNzc4MDJfUkFNUF9SQVRFX1NISUZUXzRCSVQJNAogCisjZGVmaW5lIE1BWDc3ODAyX1NUQVRVU19PRkYJCTB4MAorI2RlZmluZSBNQVg3NzgwMl9PRkZfUFdSUkVRCQkweDEKKyNkZWZpbmUgTUFYNzc4MDJfTFBfUFdSUkVRCQkweDIKKwogLyogTUFYNzc4MDIgaGFzIHR3byByZWdpc3RlciBmb3JtYXRzOiAyLWJpdCBhbmQgNC1iaXQgKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmFtcF90YWJsZV83NzgwMl8yYml0W10gPSB7CiAJMTI1MDAsCkBAIC02NSw5ICs3MCwxNiBAQAogfTsKIAogc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYgeworCS8qIEFycmF5IGluZGV4ZWQgYnkgcmVndWxhdG9yIGlkICovCiAJdW5zaWduZWQgaW50IG9wbW9kZVtNQVg3NzgwMl9SRUdfTUFYXTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1heDc3ODAyX21hcF9tb2RlKHVuc2lnbmVkIGludCBtb2RlKQoreworCXJldHVybiBtb2RlID09IE1BWDc3ODAyX09QTU9ERV9OT1JNQUwgPworCQlSRUdVTEFUT1JfTU9ERV9OT1JNQUwgOiBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOworfQorCiBzdGF0aWMgaW50IG1heDc3ODAyX2dldF9vcG1vZGVfc2hpZnQoaW50IGlkKQogewogCWlmIChpZCA9PSBNQVg3NzgwMl9CVUNLMSB8fCAoaWQgPj0gTUFYNzc4MDJfQlVDSzUgJiYKQEAgLTgzLDE3ICs5NSwxNiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi0vKgotICogU29tZSBCVUNLUyBzdXBwb3J0cyBOb3JtYWxbT04vT0ZGXSBtb2RlIGR1cmluZyBzdXNwZW5kCisvKioKKyAqIG1heDc3ODAyX3NldF9zdXNwZW5kX2Rpc2FibGUgLSBEaXNhYmxlIHRoZSByZWd1bGF0b3IgZHVyaW5nIHN5c3RlbSBzdXNwZW5kCisgKiBAcmRldjogcmVndWxhdG9yIHRvIG1hcmsgYXMgZGlzYWJsZWQKICAqCi0gKiBCVUNLIDEsIDYsIDItNCwgNSwgNy0xMCAoYWxsKQotICoKLSAqIFRoZSBvdGhlciBtb2RlICgweDAyKSB3aWxsIG1ha2UgUFdSUkVRIHN3aXRjaCBiZXR3ZWVuIG5vcm1hbAotICogYW5kIGxvdyBwb3dlci4KKyAqIEFsbCByZWd1bGF0b3JzIGV4cGVjdCBMRE8gMSwgMywgMjAgYW5kIDIxIHN1cHBvcnQgT0ZGIGJ5IFBXUlJFUS4KKyAqIENvbmZpZ3VyZSB0aGUgcmVndWxhdG9yIHNvIHRoZSBQTUlDIHdpbGwgdHVybiBpdCBPRkYgZHVyaW5nIHN5c3RlbSBzdXNwZW5kLgogICovCi1zdGF0aWMgaW50IG1heDc3ODAyX2J1Y2tfc2V0X3N1c3BlbmRfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgbWF4Nzc4MDJfc2V0X3N1c3BlbmRfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKLQl1bnNpZ25lZCBpbnQgdmFsID0gTUFYNzc4MDJfT1BNT0RFX1NUQU5EQlk7CisJdW5zaWduZWQgaW50IHZhbCA9IE1BWDc3ODAyX09GRl9QV1JSRVE7CiAJc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYgKm1heDc3ODAyID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKIAlpbnQgc2hpZnQgPSBtYXg3NzgwMl9nZXRfb3Btb2RlX3NoaWZ0KGlkKTsKQEAgLTEwNCwxNCArMTE1LDExIEBACiB9CiAKIC8qCi0gKiBTb21lIExET3Mgc3VwcG9ydHMgTFBNLU9OL09GRi9Ob3JtYWwtT04gbW9kZSBkdXJpbmcgc3VzcGVuZCBzdGF0ZQotICogKEVuYWJsZSBDb250cm9sIExvZ2ljMSBieSBQV1JSRVEpCisgKiBTb21lIExET3Mgc3VwcG9ydCBMb3cgUG93ZXIgTW9kZSB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcuCiAgKgotICogTERPcyAyLCA0LTE5LCAyMi0zNS4KLSAqCisgKiBMRE9zIDEsIDMsIDIwLCAyMS4KICAqLwotc3RhdGljIGludCBtYXg3NzgwMl9sZG9fc2V0X3N1c3BlbmRfbW9kZV9sb2dpYzEoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJCQl1bnNpZ25lZCBpbnQgbW9kZSkKK3N0YXRpYyBpbnQgbWF4Nzc4MDJfc2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIGludCBtb2RlKQogewogCXN0cnVjdCBtYXg3NzgwMl9yZWd1bGF0b3JfcHJ2ICptYXg3NzgwMiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7CkBAIC0xMTksMTQgKzEyNywxMSBAQAogCWludCBzaGlmdCA9IG1heDc3ODAyX2dldF9vcG1vZGVfc2hpZnQoaWQpOwogCiAJc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBSRUdVTEFUT1JfTU9ERV9JRExFOgkJCS8qIE9OIGluIExQIE1vZGUgKi8KLQkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX0xQOworCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToKKwkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX0xQOwkvKiBPTiBpbiBMb3cgUG93ZXIgTW9kZSAqLwogCQlicmVhazsKLQljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoJCQkvKiBPTiBpbiBOb3JtYWwgTW9kZSAqLwotCQl2YWwgPSBNQVg3NzgwMl9PUE1PREVfTk9STUFMOwotCQlicmVhazsKLQljYXNlIFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk6CQkJLyogT04vT0ZGIGJ5IFBXUlJFUSAqLwotCQl2YWwgPSBNQVg3NzgwMl9PUE1PREVfU1RBTkRCWTsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoKKwkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTDsJLyogT04gaW4gTm9ybWFsIE1vZGUgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGV2X3dhcm4oJnJkZXYtPmRldiwgIiVzOiByZWd1bGF0b3IgbW9kZTogMHgleCBub3Qgc3VwcG9ydGVkXG4iLApAQCAtMTM5LDM1ICsxNDQsNzYgQEAKIAkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLCB2YWwgPDwgc2hpZnQpOwogfQogCi0vKgotICogTW9kZSAxIChPdXRwdXRbT04vT0ZGXSBieSBQV1JSRVEpIGlzIG5vdCBzdXBwb3J0ZWQgb24gc29tZSBMRE9zCi0gKiAoRW5hYmxlIENvbnRyb2wgTG9naWMyIGJ5IFBXUlJFUSkKK3N0YXRpYyB1bnNpZ25lZCBtYXg3NzgwMl9nZXRfbW9kZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4Nzc4MDJfcmVndWxhdG9yX3BydiAqbWF4Nzc4MDIgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCisJcmV0dXJuIG1heDc3ODAyX21hcF9tb2RlKG1heDc3ODAyLT5vcG1vZGVbaWRdKTsKK30KKworLyoqCisgKiBtYXg3NzgwMl9zZXRfc3VzcGVuZF9tb2RlIC0gc2V0IHJlZ3VsYXRvciBvcG1vZGUgd2hlbiB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZAorICogQHJkZXY6IHJlZ3VsYXRvciB0byBjaGFuZ2UgbW9kZQorICogQG1vZGU6IG9wZXJhdGluZyBtb2RlIHRvIGJlIHNldAogICoKLSAqIExET3MgMSwgMjAsIDIxLCBhbmQgMywKKyAqIFdpbGwgc2V0IHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHJlZ3VsYXRvcnMgZHVyaW5nIHN5c3RlbSBzdXNwZW5kLgorICogVGhpcyBmdW5jdGlvbiBpcyB2YWxpZCBmb3IgdGhlIHRocmVlIGRpZmZlcmVudCBlbmFibGUgY29udHJvbCBsb2dpY3M6CiAgKgorICogRW5hYmxlIENvbnRyb2wgTG9naWMxIGJ5IFBXUlJFUSAoQlVDSyAyLTQgYW5kIExET3MgMiwgNC0xOSwgMjItMzUpCisgKiBFbmFibGUgQ29udHJvbCBMb2dpYzIgYnkgUFdSUkVRIChMRE9zIDEsIDIwLCAyMSkKKyAqIEVuYWJsZSBDb250cm9sIExvZ2ljMyBieSBQV1JSRVEgKExETyAzKQorICoKKyAqIElmIHNldHRpbmcgdGhlIHJlZ3VsYXRvciBtb2RlIGZhaWxzLCB0aGUgZnVuY3Rpb24gb25seSB3YXJucyBidXQgZG9lcworICogbm90IHJldHVybiBhbiBlcnJvciBjb2RlIHRvIGF2b2lkIHRoZSByZWd1bGF0b3IgY29yZSB0byBzdG9wIHNldHRpbmcKKyAqIHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHJlbWFpbmluZyByZWd1bGF0b3JzLgogICovCi1zdGF0aWMgaW50IG1heDc3ODAyX2xkb19zZXRfc3VzcGVuZF9tb2RlX2xvZ2ljMihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQkJCQkJCXVuc2lnbmVkIGludCBtb2RlKQorc3RhdGljIGludCBtYXg3NzgwMl9zZXRfc3VzcGVuZF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCSAgICAgdW5zaWduZWQgaW50IG1vZGUpCiB7CiAJc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYgKm1heDc3ODAyID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCWludCBzaGlmdCA9IG1heDc3ODAyX2dldF9vcG1vZGVfc2hpZnQoaWQpOwogCisJLyoKKwkgKiBJZiB0aGUgcmVndWxhdG9yIGhhcyBiZWVuIGRpc2FibGVkIGZvciBzdXNwZW5kCisJICogdGhlbiBpcyBpbnZhbGlkIHRvIHRyeSBzZXR0aW5nIGEgc3VzcGVuZCBtb2RlLgorCSAqLworCWlmIChtYXg3NzgwMi0+b3Btb2RlW2lkXSA9PSBNQVg3NzgwMl9PRkZfUFdSUkVRKSB7CisJCWRldl93YXJuKCZyZGV2LT5kZXYsICIlczogaXMgZGlzYWJsZWQsIG1vZGU6IDB4JXggbm90IHNldFxuIiwKKwkJCSByZGV2LT5kZXNjLT5uYW1lLCBtb2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBSRUdVTEFUT1JfTU9ERV9JRExFOgkJCS8qIE9OIGluIExQIE1vZGUgKi8KLQkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX0xQOworCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToKKwkJLyoKKwkJICogSWYgdGhlIHJlZ3VsYXRvciBvcG1vZGUgaXMgbm9ybWFsIHRoZW4gZW5hYmxlCisJCSAqIE9OIGluIExvdyBQb3dlciBNb2RlIGJ5IFBXUlJFUS4gSWYgdGhlIG1vZGUgaXMKKwkJICogYWxyZWFkeSBMb3cgUG93ZXIgdGhlbiBubyBhY3Rpb24gaXMgcmVxdWlyZWQuCisJCSAqLworCQlpZiAobWF4Nzc4MDItPm9wbW9kZVtpZF0gPT0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTCkKKwkJCXZhbCA9IE1BWDc3ODAyX0xQX1BXUlJFUTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CiAJCWJyZWFrOwotCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgkJCS8qIE9OIGluIE5vcm1hbCBNb2RlICovCi0JCXZhbCA9IE1BWDc3ODAyX09QTU9ERV9OT1JNQUw7Ci0JCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgorCQkvKgorCQkgKiBJZiB0aGUgcmVndWxhdG9yIG9wZXJhdGluZyBtb2RlIGlzIExvdyBQb3dlciB0aGVuCisJCSAqIG5vcm1hbCBpcyBub3QgYSB2YWxpZCBvcG1vZGUgaW4gc3VzcGVuZC4gSWYgdGhlCisJCSAqIG1vZGUgaXMgYWxyZWFkeSBub3JtYWwgdGhlbiBubyBhY3Rpb24gaXMgcmVxdWlyZWQuCisJCSAqLworCQlpZiAobWF4Nzc4MDItPm9wbW9kZVtpZF0gPT0gTUFYNzc4MDJfT1BNT0RFX0xQKQorCQkJZGV2X3dhcm4oJnJkZXYtPmRldiwgIiVzOiBpbiBMb3cgUG93ZXI6IDB4JXggaW52YWxpZFxuIiwKKwkJCQkgcmRldi0+ZGVzYy0+bmFtZSwgbW9kZSk7CisJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCWRldl93YXJuKCZyZGV2LT5kZXYsICIlczogcmVndWxhdG9yIG1vZGU6IDB4JXggbm90IHN1cHBvcnRlZFxuIiwKIAkJCSByZGV2LT5kZXNjLT5uYW1lLCBtb2RlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbWF4Nzc4MDItPm9wbW9kZVtpZF0gPSB2YWw7CiAJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcsCiAJCQkJICByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywgdmFsIDw8IHNoaWZ0KTsKIH0KQEAgLTE3OCw2ICsyMjQsOSBAQAogCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwogCWludCBzaGlmdCA9IG1heDc3ODAyX2dldF9vcG1vZGVfc2hpZnQoaWQpOwogCisJaWYgKG1heDc3ODAyLT5vcG1vZGVbaWRdID09IE1BWDc3ODAyX09GRl9QV1JSRVEpCisJCW1heDc3ODAyLT5vcG1vZGVbaWRdID0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTDsKKwogCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocmRldi0+cmVnbWFwLCByZGV2LT5kZXNjLT5lbmFibGVfcmVnLAogCQkJCSAgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2ssCiAJCQkJICBtYXg3NzgwMi0+b3Btb2RlW2lkXSA8PCBzaGlmdCk7CkBAIC0yNDcsNyArMjk2LDggQEAKIAkuZ2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX2dldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKLQkuc2V0X3N1c3BlbmRfbW9kZQk9IG1heDc3ODAyX2xkb19zZXRfc3VzcGVuZF9tb2RlX2xvZ2ljMSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3ODAyX3NldF9zdXNwZW5kX2Rpc2FibGUsCisJLnNldF9zdXNwZW5kX21vZGUJPSBtYXg3NzgwMl9zZXRfc3VzcGVuZF9tb2RlLAogfTsKIAogLyoKQEAgLTI2Miw3ICszMTIsOSBAQAogCS5nZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3RpbWVfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3RpbWVfc2VsLAotCS5zZXRfc3VzcGVuZF9tb2RlCT0gbWF4Nzc4MDJfbGRvX3NldF9zdXNwZW5kX21vZGVfbG9naWMyLAorCS5zZXRfbW9kZQkJPSBtYXg3NzgwMl9zZXRfbW9kZSwKKwkuZ2V0X21vZGUJCT0gbWF4Nzc4MDJfZ2V0X21vZGUsCisJLnNldF9zdXNwZW5kX21vZGUJPSBtYXg3NzgwMl9zZXRfc3VzcGVuZF9tb2RlLAogfTsKIAogLyogQlVDS1MgMSwgNiAqLwpAQCAtMjc2LDEwICszMjgsMjUgQEAKIAkuc2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3RpbWVfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3RpbWVfc2VsLAogCS5zZXRfcmFtcF9kZWxheQkJPSBtYXg3NzgwMl9zZXRfcmFtcF9kZWxheV80Yml0LAotCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gbWF4Nzc4MDJfYnVja19zZXRfc3VzcGVuZF9kaXNhYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gbWF4Nzc4MDJfc2V0X3N1c3BlbmRfZGlzYWJsZSwKIH07CiAKLS8qIEJVQ0tzIDItNCwgNSwgNy0xMCAqLworLyogQlVDS3MgMi00ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWF4Nzc4MDJfYnVja18yMzRfb3BzID0geworCS5saXN0X3ZvbHRhZ2UJCT0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXIsCisJLm1hcF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXIsCisJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5lbmFibGUJCQk9IG1heDc3ODAyX2VuYWJsZSwKKwkuZGlzYWJsZQkJPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCisJLmdldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKKwkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCisJLnNldF9yYW1wX2RlbGF5CQk9IG1heDc3ODAyX3NldF9yYW1wX2RlbGF5XzJiaXQsCisJLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzgwMl9zZXRfc3VzcGVuZF9kaXNhYmxlLAorCS5zZXRfc3VzcGVuZF9tb2RlCT0gbWF4Nzc4MDJfc2V0X3N1c3BlbmRfbW9kZSwKK307CisKKy8qIEJVQ0tzIDUsIDctMTAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYXg3NzgwMl9idWNrX2R2c19vcHMgPSB7CiAJLmxpc3Rfdm9sdGFnZQkJPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhciwKIAkubWFwX3ZvbHRhZ2UJCT0gcmVndWxhdG9yX21hcF92b2x0YWdlX2xpbmVhciwKQEAgLTI5MCwxMiArMzU3LDE0IEBACiAJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKIAkuc2V0X3JhbXBfZGVsYXkJCT0gbWF4Nzc4MDJfc2V0X3JhbXBfZGVsYXlfMmJpdCwKLQkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3ODAyX2J1Y2tfc2V0X3N1c3BlbmRfZGlzYWJsZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3ODAyX3NldF9zdXNwZW5kX2Rpc2FibGUsCiB9OwogCiAvKiBMRE9zIDMtNywgOS0xNCwgMTgtMjYsIDI4LCAyOSwgMzItMzQgKi8KICNkZWZpbmUgcmVndWxhdG9yXzc3ODAyX2Rlc2NfcF9sZG8obnVtLCBzdXBwbHksIGxvZykJewkJXAogCS5uYW1lCQk9ICJMRE8iI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkxETyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigicmVndWxhdG9ycyIpLAkJXAogCS5pZAkJPSBNQVg3NzgwMl9MRE8jI251bSwJCQkJXAogCS5zdXBwbHlfbmFtZQk9ICJpbmwiI3N1cHBseSwJCQkJCVwKIAkub3BzCQk9ICZtYXg3NzgwMl9sZG9fb3BzX2xvZ2ljIyNsb2csCQkJXApAQCAtMzA5LDExICszNzgsMTQgQEAKIAkudnNlbF9tYXNrCT0gTUFYNzc4MDJfVlNFTF9NQVNLLAkJCQlcCiAJLmVuYWJsZV9yZWcJPSBNQVg3NzgwMl9SRUdfTERPMUNUUkwxICsgbnVtIC0gMSwJCVwKIAkuZW5hYmxlX21hc2sJPSBNQVg3NzgwMl9PUE1PREVfTUFTSyA8PCBNQVg3NzgwMl9PUE1PREVfU0hJRlRfTERPLCBcCisJLm9mX21hcF9tb2RlCT0gbWF4Nzc4MDJfbWFwX21vZGUsCQkJCVwKIH0KIAogLyogTERPcyAxLCAyLCA4LCAxNSwgMTcsIDI3LCAzMCwgMzUgKi8KICNkZWZpbmUgcmVndWxhdG9yXzc3ODAyX2Rlc2Nfbl9sZG8obnVtLCBzdXBwbHksIGxvZykgICB7CQlcCiAJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCQlcCiAJLmlkCQk9IE1BWDc3ODAyX0xETyMjbnVtLAkJCQlcCiAJLnN1cHBseV9uYW1lCT0gImlubCIjc3VwcGx5LAkJCQkJXAogCS5vcHMJCT0gJm1heDc3ODAyX2xkb19vcHNfbG9naWMjI2xvZywJCQlcCkBAIC0zMjcsMTEgKzM5OSwxNCBAQAogCS52c2VsX21hc2sJPSBNQVg3NzgwMl9WU0VMX01BU0ssCQkJCVwKIAkuZW5hYmxlX3JlZwk9IE1BWDc3ODAyX1JFR19MRE8xQ1RSTDEgKyBudW0gLSAxLAkJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLIDw8IE1BWDc3ODAyX09QTU9ERV9TSElGVF9MRE8sIFwKKwkub2ZfbWFwX21vZGUJPSBtYXg3NzgwMl9tYXBfbW9kZSwJCQkJXAogfQogCiAvKiBCVUNLcyAxLCA2ICovCiAjZGVmaW5lIHJlZ3VsYXRvcl83NzgwMl9kZXNjXzE2X2J1Y2sobnVtKQl7CQlcCiAJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkJVQ0siI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJCVwKIAkuaWQJCT0gTUFYNzc4MDJfQlVDSyMjbnVtLAkJCQlcCiAJLnN1cHBseV9uYW1lCT0gImluYiIjbnVtLAkJCQkJXAogCS5vcHMJCT0gJm1heDc3ODAyX2J1Y2tfMTZfZHZzX29wcywJCQlcCkBAIC0zNDUsMTQgKzQyMCwxNyBAQAogCS52c2VsX21hc2sJPSBNQVg3NzgwMl9EVlNfVlNFTF9NQVNLLAkJCVwKIAkuZW5hYmxlX3JlZwk9IE1BWDc3ODAyX1JFR19CVUNLICMjIG51bSAjIyBDVFJMLAkJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLLAkJCQlcCisJLm9mX21hcF9tb2RlCT0gbWF4Nzc4MDJfbWFwX21vZGUsCQkJCVwKIH0KIAogLyogQlVDS1MgMi00ICovCiAjZGVmaW5lIHJlZ3VsYXRvcl83NzgwMl9kZXNjXzIzNF9idWNrKG51bSkJewkJXAogCS5uYW1lCQk9ICJCVUNLIiNudW0sCQkJCQlcCisJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJCVUNLIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCQlcCiAJLmlkCQk9IE1BWDc3ODAyX0JVQ0sjI251bSwJCQkJXAogCS5zdXBwbHlfbmFtZQk9ICJpbmIiI251bSwJCQkJCVwKLQkub3BzCQk9ICZtYXg3NzgwMl9idWNrX2R2c19vcHMsCQkJXAorCS5vcHMJCT0gJm1heDc3ODAyX2J1Y2tfMjM0X29wcywJCQlcCiAJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCQkJCQlcCiAJLm1pbl91VgkJPSA2MDAwMDAsCQkJCQlcCkBAIC0zNjQsMTEgKzQ0MiwxNCBAQAogCS5lbmFibGVfcmVnCT0gTUFYNzc4MDJfUkVHX0JVQ0sgIyMgbnVtICMjIENUUkwxLAkJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLIDw8CQkJXAogCQkJCU1BWDc3ODAyX09QTU9ERV9CVUNLMjM0X1NISUZULAkJXAorCS5vZl9tYXBfbW9kZQk9IG1heDc3ODAyX21hcF9tb2RlLAkJCQlcCiB9CiAKIC8qIEJVQ0sgNSAqLwogI2RlZmluZSByZWd1bGF0b3JfNzc4MDJfZGVzY19idWNrNShudW0pCQl7CQlcCiAJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkJVQ0siI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJCVwKIAkuaWQJCT0gTUFYNzc4MDJfQlVDSyMjbnVtLAkJCQlcCiAJLnN1cHBseV9uYW1lCT0gImluYiIjbnVtLAkJCQkJXAogCS5vcHMJCT0gJm1heDc3ODAyX2J1Y2tfZHZzX29wcywJCQlcCkBAIC0zODIsMTEgKzQ2MywxNCBAQAogCS52c2VsX21hc2sJPSBNQVg3NzgwMl9WU0VMX01BU0ssCQkJCVwKIAkuZW5hYmxlX3JlZwk9IE1BWDc3ODAyX1JFR19CVUNLNUNUUkwsCQkJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLLAkJCQlcCisJLm9mX21hcF9tb2RlCT0gbWF4Nzc4MDJfbWFwX21vZGUsCQkJCVwKIH0KIAogLyogQlVDS3MgNy0xMCAqLwogI2RlZmluZSByZWd1bGF0b3JfNzc4MDJfZGVzY19idWNrN18xMChudW0pCXsJCVwKIAkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiQlVDSyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigicmVndWxhdG9ycyIpLAkJXAogCS5pZAkJPSBNQVg3NzgwMl9CVUNLIyNudW0sCQkJCVwKIAkuc3VwcGx5X25hbWUJPSAiaW5iIiNudW0sCQkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc4MDJfYnVja19kdnNfb3BzLAkJCVwKQEAgLTQwMCw5ICs0ODQsMTAgQEAKIAkudnNlbF9tYXNrCT0gTUFYNzc4MDJfVlNFTF9NQVNLLAkJCQlcCiAJLmVuYWJsZV9yZWcJPSBNQVg3NzgwMl9SRUdfQlVDSzdDVFJMICsgKG51bSAtIDcpICogMywJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLLAkJCQlcCisJLm9mX21hcF9tb2RlCT0gbWF4Nzc4MDJfbWFwX21vZGUsCQkJCVwKIH0KIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyByZWd1bGF0b3JzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKIAlyZWd1bGF0b3JfNzc4MDJfZGVzY18xNl9idWNrKDEpLAogCXJlZ3VsYXRvcl83NzgwMl9kZXNjXzIzNF9idWNrKDIpLAogCXJlZ3VsYXRvcl83NzgwMl9kZXNjXzIzNF9idWNrKDMpLApAQCAtNDQ3LDg1ICs1MzIsMTkgQEAKIAlyZWd1bGF0b3JfNzc4MDJfZGVzY19uX2xkbygzNSwgMiwgMSksCiB9OwogCi0jaWZkZWYgQ09ORklHX09GCi1zdGF0aWMgaW50IG1heDc3ODAyX3BtaWNfZHRfcGFyc2VfcGRhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkJc3RydWN0IG1heDc3Njg2X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQotewotCXN0cnVjdCBtYXg3NzY4Nl9kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG1pY19ucCwgKnJlZ3VsYXRvcnNfbnA7Ci0Jc3RydWN0IG1heDc3Njg2X3JlZ3VsYXRvcl9kYXRhICpyZGF0YTsKLQlzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoIHJtYXRjaCA9IHsgfTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCXBtaWNfbnAgPSBpb2Rldi0+ZGV2LT5vZl9ub2RlOwotCXJlZ3VsYXRvcnNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwbWljX25wLCAicmVndWxhdG9ycyIpOwotCWlmICghcmVndWxhdG9yc19ucCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgZmluZCByZWd1bGF0b3JzIHN1Yi1ub2RlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGRhdGEtPm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShyZWd1bGF0b3JzKTsKLQlyZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnJkYXRhKSAqCi0JCQkgICAgIHBkYXRhLT5udW1fcmVndWxhdG9ycywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZGF0YSkgewotCQlvZl9ub2RlX3B1dChyZWd1bGF0b3JzX25wKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmVndWxhdG9yczsgaSsrKSB7Ci0JCXJtYXRjaC5uYW1lID0gcmVndWxhdG9yc1tpXS5uYW1lOwotCQlybWF0Y2guaW5pdF9kYXRhID0gTlVMTDsKLQkJcm1hdGNoLm9mX25vZGUgPSBOVUxMOwotCQlpZiAob2ZfcmVndWxhdG9yX21hdGNoKCZwZGV2LT5kZXYsIHJlZ3VsYXRvcnNfbnAsICZybWF0Y2gsCi0JCQkJICAgICAgIDEpICE9IDEpIHsKLQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJObyBtYXRjaGluZyByZWd1bGF0b3IgZm9yICclcydcbiIsCi0JCQkJIHJtYXRjaC5uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXJkYXRhW2ldLmluaXRkYXRhID0gcm1hdGNoLmluaXRfZGF0YTsKLQkJcmRhdGFbaV0ub2Zfbm9kZSA9IHJtYXRjaC5vZl9ub2RlOwotCQlyZGF0YVtpXS5pZCA9IHJlZ3VsYXRvcnNbaV0uaWQ7Ci0JfQotCi0JcGRhdGEtPnJlZ3VsYXRvcnMgPSByZGF0YTsKLQlvZl9ub2RlX3B1dChyZWd1bGF0b3JzX25wKTsKLQotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgbWF4Nzc4MDJfcG1pY19kdF9wYXJzZV9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQlzdHJ1Y3QgbWF4Nzc2ODZfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX09GICovCi0KIHN0YXRpYyBpbnQgbWF4Nzc4MDJfcG1pY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtYXg3NzY4Nl9kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBtYXg3NzY4Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoaW9kZXYtPmRldik7CiAJc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYgKm1heDc3ODAyOwotCWludCBpLCByZXQgPSAwLCB2YWw7CisJaW50IGksIHZhbDsKIAlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyBjb25maWcgPSB7IH07CiAKLQkvKiBUaGlzIGlzIGFsbG9jYXRlZCBieSB0aGUgTUZEIGRyaXZlciAqLwotCWlmICghcGRhdGEpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBmb3VuZCBmb3IgcmVndWxhdG9yXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJbWF4Nzc4MDIgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKIAkJCQlzaXplb2Yoc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYpLAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghbWF4Nzc4MDIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGlvZGV2LT5kZXYtPm9mX25vZGUpIHsKLQkJcmV0ID0gbWF4Nzc4MDJfcG1pY19kdF9wYXJzZV9wZGF0YShwZGV2LCBwZGF0YSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQogCWNvbmZpZy5kZXYgPSBpb2Rldi0+ZGV2OwogCWNvbmZpZy5yZWdtYXAgPSBpb2Rldi0+cmVnbWFwOwogCWNvbmZpZy5kcml2ZXJfZGF0YSA9IG1heDc3ODAyOwpAQCAtNTMzLDIxICs1NTIsMjUgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBNQVg3NzgwMl9SRUdfTUFYOyBpKyspIHsKIAkJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7Ci0JCWludCBpZCA9IHBkYXRhLT5yZWd1bGF0b3JzW2ldLmlkOworCQlpbnQgaWQgPSByZWd1bGF0b3JzW2ldLmlkOwogCQlpbnQgc2hpZnQgPSBtYXg3NzgwMl9nZXRfb3Btb2RlX3NoaWZ0KGlkKTsKLQotCQljb25maWcuaW5pdF9kYXRhID0gcGRhdGEtPnJlZ3VsYXRvcnNbaV0uaW5pdGRhdGE7Ci0JCWNvbmZpZy5vZl9ub2RlID0gcGRhdGEtPnJlZ3VsYXRvcnNbaV0ub2Zfbm9kZTsKKwkJaW50IHJldDsKIAogCQlyZXQgPSByZWdtYXBfcmVhZChpb2Rldi0+cmVnbWFwLCByZWd1bGF0b3JzW2ldLmVuYWJsZV9yZWcsICZ2YWwpOwotCQl2YWwgPSB2YWwgPj4gc2hpZnQgJiBNQVg3NzgwMl9PUE1PREVfTUFTSzsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJImNhbm5vdCByZWFkIGN1cnJlbnQgbW9kZSBmb3IgJWRcbiIsIGkpOworCQkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTDsKKwkJfSBlbHNlIHsKKwkJCXZhbCA9IHZhbCA+PiBzaGlmdCAmIE1BWDc3ODAyX09QTU9ERV9NQVNLOworCQl9CiAKIAkJLyoKIAkJICogSWYgdGhlIHJlZ3VsYXRvciBpcyBkaXNhYmxlZCBhbmQgdGhlIHN5c3RlbSB3YXJtIHJlYm9vdGVkLAogCQkgKiB0aGUgaGFyZHdhcmUgcmVwb3J0cyBPRkYgYXMgdGhlIHJlZ3VsYXRvciBvcGVyYXRpbmcgbW9kZS4KIAkJICogRGVmYXVsdCB0byBvcGVyYXRpbmcgbW9kZSBOT1JNQUwgaW4gdGhhdCBjYXNlLgogCQkgKi8KLQkJaWYgKHZhbCA9PSBNQVg3NzgwMl9PUE1PREVfT0ZGKQorCQlpZiAodmFsID09IE1BWDc3ODAyX1NUQVRVU19PRkYpCiAJCQltYXg3NzgwMi0+b3Btb2RlW2lkXSA9IE1BWDc3ODAyX09QTU9ERV9OT1JNQUw7CiAJCWVsc2UKIAkJCW1heDc3ODAyLT5vcG1vZGVbaWRdID0gdmFsOwpAQCAtNTU1LDkgKzU3OCwxMCBAQAogCQlyZGV2ID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoJnBkZXYtPmRldiwKIAkJCQkJICAgICAgICZyZWd1bGF0b3JzW2ldLCAmY29uZmlnKTsKIAkJaWYgKElTX0VSUihyZGV2KSkgeworCQkJcmV0ID0gUFRSX0VSUihyZGV2KTsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkicmVndWxhdG9yIGluaXQgZmFpbGVkIGZvciAlZFxuIiwgaSk7Ci0JCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwkJCQkicmVndWxhdG9yIGluaXQgZmFpbGVkIGZvciAlZDogJWRcbiIsIGksIHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMKaW5kZXggZjdmOWVmYy4uMWFmOGY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk1Mi5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NTIuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibWF4ODk1MixyYW1wLXNwZWVkIiwgJnBkLT5yYW1wX3NwZWVkKSkKIAkJZGV2X3dhcm4oZGV2LCAibWF4ODk1MixyYW1wLXNwZWVkIHByb3BlcnR5IG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRpbmcgdG8gMzJtVi91c1xuIik7CiAKLQlwZC0+cmVnX2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wKTsKKwlwZC0+cmVnX2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wLCAmcmVndWxhdG9yKTsKIAlpZiAoIXBkLT5yZWdfZGF0YSkgewogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBwYXJzZSByZWd1bGF0b3IgaW5pdCBkYXRhXG4iKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yMjUsNiArMjI1LDggQEAKIAljb25maWcub2Zfbm9kZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7CiAKIAljb25maWcuZW5hX2dwaW8gPSBwZGF0YS0+Z3Bpb19lbjsKKwlpZiAoY2xpZW50LT5kZXYub2Zfbm9kZSkKKwkJY29uZmlnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKIAlpZiAocGRhdGEtPnJlZ19kYXRhLT5jb25zdHJhaW50cy5ib290X29uKQogCQljb25maWcuZW5hX2dwaW9fZmxhZ3MgfD0gR1BJT0ZfT1VUX0lOSVRfSElHSDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk3My1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NzMtcmVndWxhdG9yLmMKaW5kZXggZGJlZGYxNy4uYzNkNTVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk3My1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTczLXJlZ3VsYXRvci5jCkBAIC00NTgsNyArNDU4LDggQEAKIAogCWNvbmZpZy5kZXYgPSAmY2xpZW50LT5kZXY7CiAJY29uZmlnLmluaXRfZGF0YSA9IHBkYXRhID8gcGRhdGEtPnJlZ19pbml0X2RhdGEgOgotCQlvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmY2xpZW50LT5kZXYsIGNsaWVudC0+ZGV2Lm9mX25vZGUpOworCQlvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmY2xpZW50LT5kZXYsIGNsaWVudC0+ZGV2Lm9mX25vZGUsCisJCQkJCSAgICZtYXgtPmRlc2MpOwogCWNvbmZpZy5kcml2ZXJfZGF0YSA9IG1heDsKIAljb25maWcub2Zfbm9kZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7CiAJY29uZmlnLnJlZ21hcCA9IG1heC0+cmVnbWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5Ny5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5Ny5jCmluZGV4IDljMzFlMjEuLjcyNmZkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg5OTcuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTk3LmMKQEAgLTk1Myw3ICs5NTMsOCBAQAogCiAJCXJkYXRhLT5pZCA9IGk7CiAJCXJkYXRhLT5pbml0ZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsCi0JCQkJCQkJICAgICByZWdfbnApOworCQkJCQkJCSAgICAgcmVnX25wLAorCQkJCQkJCSAgICAgJnJlZ3VsYXRvcnNbaV0pOwogCQlyZGF0YS0+cmVnX25vZGUgPSByZWdfbnA7CiAJCXJkYXRhKys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5OC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5OC5jCmluZGV4IDk2MTA5MWIuLjU5ZTM0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg5OTguYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTk4LmMKQEAgLTY4Niw4ICs2ODYsOSBAQAogCQkJY29udGludWU7CiAKIAkJcmRhdGEtPmlkID0gcmVndWxhdG9yc1tpXS5pZDsKLQkJcmRhdGEtPmluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoCi0JCQkJCQkJaW9kZXYtPmRldiwgcmVnX25wKTsKKwkJcmRhdGEtPmluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoaW9kZXYtPmRldiwKKwkJCQkJCQkgICAgIHJlZ19ucCwKKwkJCQkJCQkgICAgICZyZWd1bGF0b3JzW2ldKTsKIAkJcmRhdGEtPnJlZ19ub2RlID0gcmVnX25wOwogCQkrK3JkYXRhOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYwppbmRleCBhZmJhMDI0Li4wMjgxYzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzeHh4LXJlZ3VsYXRvci1jb3JlLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5jCkBAIC0xOTQsNyArMTk0LDggQEAKIAkJCQkJIHJlZ3VsYXRvcnNbaV0uZGVzYy5uYW1lKSkgewogCQkJCXAtPmlkID0gaTsKIAkJCQlwLT5pbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgKLQkJCQkJCQkmcGRldi0+ZGV2LCBjaGlsZCk7CisJCQkJCQkJJnBkZXYtPmRldiwgY2hpbGQsCisJCQkJCQkJJnJlZ3VsYXRvcnNbaV0uZGVzYyk7CiAJCQkJcC0+bm9kZSA9IGNoaWxkOwogCQkJCXArKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuYwppbmRleCA1YTFkNGFmLi45MWVhYWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuYwpAQCAtMTksMTIgKzE5LDIwIEBACiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcmVndWxhdG9yX3N0YXRlc1tQTV9TVVNQRU5EX01BWCArIDFdID0geworCVtQTV9TVVNQRU5EX01FTV0JPSAicmVndWxhdG9yLXN0YXRlLW1lbSIsCisJW1BNX1NVU1BFTkRfTUFYXQk9ICJyZWd1bGF0b3Itc3RhdGUtZGlzayIsCit9OworCiBzdGF0aWMgdm9pZCBvZl9nZXRfcmVndWxhdGlvbl9jb25zdHJhaW50cyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqKmluaXRfZGF0YSkKKwkJCQkJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKippbml0X2RhdGEsCisJCQkJCWNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAljb25zdCBfX2JlMzIgKm1pbl91ViwgKm1heF91VjsKIAlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHMgPSAmKCppbml0X2RhdGEpLT5jb25zdHJhaW50czsKLQlpbnQgcmV0OworCXN0cnVjdCByZWd1bGF0b3Jfc3RhdGUgKnN1c3BlbmRfc3RhdGU7CisJc3RydWN0IGRldmljZV9ub2RlICpzdXNwZW5kX25wOworCWludCByZXQsIGk7CiAJdTMyIHB2YWw7CiAKIAljb25zdHJhaW50cy0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZ3VsYXRvci1uYW1lIiwgTlVMTCk7CkBAIC03MywxOCArODEsODQgQEAKIAlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInJlZ3VsYXRvci1lbmFibGUtcmFtcC1kZWxheSIsICZwdmFsKTsKIAlpZiAoIXJldCkKIAkJY29uc3RyYWludHMtPmVuYWJsZV90aW1lID0gcHZhbDsKKworCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJyZWd1bGF0b3ItaW5pdGlhbC1tb2RlIiwgJnB2YWwpKSB7CisJCWlmIChkZXNjICYmIGRlc2MtPm9mX21hcF9tb2RlKSB7CisJCQlyZXQgPSBkZXNjLT5vZl9tYXBfbW9kZShwdmFsKTsKKwkJCWlmIChyZXQgPT0gLUVJTlZBTCkKKwkJCQlwcl9lcnIoIiVzOiBpbnZhbGlkIG1vZGUgJXVcbiIsIG5wLT5uYW1lLCBwdmFsKTsKKwkJCWVsc2UKKwkJCQljb25zdHJhaW50cy0+aW5pdGlhbF9tb2RlID0gcmV0OworCQl9IGVsc2UgeworCQkJcHJfd2FybigiJXM6IG1hcHBpbmcgZm9yIG1vZGUgJWQgbm90IGRlZmluZWRcbiIsCisJCQkJbnAtPm5hbWUsIHB2YWwpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVndWxhdG9yX3N0YXRlcyk7IGkrKykgeworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSBQTV9TVVNQRU5EX01FTToKKwkJCXN1c3BlbmRfc3RhdGUgPSAmY29uc3RyYWludHMtPnN0YXRlX21lbTsKKwkJCWJyZWFrOworCQljYXNlIFBNX1NVU1BFTkRfTUFYOgorCQkJc3VzcGVuZF9zdGF0ZSA9ICZjb25zdHJhaW50cy0+c3RhdGVfZGlzazsKKwkJCWJyZWFrOworCQljYXNlIFBNX1NVU1BFTkRfT046CisJCWNhc2UgUE1fU1VTUEVORF9GUkVFWkU6CisJCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCX07CisKKwkJc3VzcGVuZF9ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCByZWd1bGF0b3Jfc3RhdGVzW2ldKTsKKwkJaWYgKCFzdXNwZW5kX25wIHx8ICFzdXNwZW5kX3N0YXRlKQorCQkJY29udGludWU7CisKKwkJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihzdXNwZW5kX25wLCAicmVndWxhdG9yLW1vZGUiLAorCQkJCQkgICZwdmFsKSkgeworCQkJaWYgKGRlc2MgJiYgZGVzYy0+b2ZfbWFwX21vZGUpIHsKKwkJCQlyZXQgPSBkZXNjLT5vZl9tYXBfbW9kZShwdmFsKTsKKwkJCQlpZiAocmV0ID09IC1FSU5WQUwpCisJCQkJCXByX2VycigiJXM6IGludmFsaWQgbW9kZSAldVxuIiwKKwkJCQkJICAgICAgIG5wLT5uYW1lLCBwdmFsKTsKKwkJCQllbHNlCisJCQkJCXN1c3BlbmRfc3RhdGUtPm1vZGUgPSByZXQ7CisJCQl9IGVsc2UgeworCQkJCXByX3dhcm4oIiVzOiBtYXBwaW5nIGZvciBtb2RlICVkIG5vdCBkZWZpbmVkXG4iLAorCQkJCQlucC0+bmFtZSwgcHZhbCk7CisJCQl9CisJCX0KKworCQlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKHN1c3BlbmRfbnAsCisJCQkJCSJyZWd1bGF0b3Itb24taW4tc3VzcGVuZCIpKQorCQkJc3VzcGVuZF9zdGF0ZS0+ZW5hYmxlZCA9IHRydWU7CisJCWVsc2UgaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChzdXNwZW5kX25wLAorCQkJCQkicmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kIikpCisJCQlzdXNwZW5kX3N0YXRlLT5kaXNhYmxlZCA9IHRydWU7CisKKwkJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihzdXNwZW5kX25wLAorCQkJCQkicmVndWxhdG9yLXN1c3BlbmQtbWljcm92b2x0IiwgJnB2YWwpKQorCQkJc3VzcGVuZF9zdGF0ZS0+dVYgPSBwdmFsOworCisJCW9mX25vZGVfcHV0KHN1c3BlbmRfbnApOworCQlzdXNwZW5kX3N0YXRlID0gTlVMTDsKKwkJc3VzcGVuZF9ucCA9IE5VTEw7CisJfQogfQogCiAvKioKICAqIG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhIC0gZXh0cmFjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHN0cnVjdHVyZSBpbmZvCiAgKiBAZGV2OiBkZXZpY2UgcmVxdWVzdGluZyBmb3IgcmVndWxhdG9yX2luaXRfZGF0YQorICogQG5vZGU6IHJlZ3VsYXRvciBkZXZpY2Ugbm9kZQorICogQGRlc2M6IHJlZ3VsYXRvciBkZXNjcmlwdGlvbgogICoKICAqIFBvcHVsYXRlcyByZWd1bGF0b3JfaW5pdF9kYXRhIHN0cnVjdHVyZSBieSBleHRyYWN0aW5nIGRhdGEgZnJvbSBkZXZpY2UKICAqIHRyZWUgbm9kZSwgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBvcHVsYXRlZCBzdHJ1dHVyZSBvciBOVUxMIGlmIG1lbW9yeQogICogYWxsb2MgZmFpbHMuCiAgKi8KIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCisJCQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwogCkBAIC05NSw3ICsxNjksNyBAQAogCWlmICghaW5pdF9kYXRhKQogCQlyZXR1cm4gTlVMTDsgLyogT3V0IG9mIG1lbW9yeT8gKi8KIAotCW9mX2dldF9yZWd1bGF0aW9uX2NvbnN0cmFpbnRzKG5vZGUsICZpbml0X2RhdGEpOworCW9mX2dldF9yZWd1bGF0aW9uX2NvbnN0cmFpbnRzKG5vZGUsICZpbml0X2RhdGEsIGRlc2MpOwogCXJldHVybiBpbml0X2RhdGE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSk7CkBAIC0xNzYsNyArMjUwLDggQEAKIAkJCQljb250aW51ZTsKIAogCQkJbWF0Y2gtPmluaXRfZGF0YSA9Ci0JCQkJb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBjaGlsZCk7CisJCQkJb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBjaGlsZCwKKwkJCQkJCQkgICBtYXRjaC0+ZGVzYyk7CiAJCQlpZiAoIW1hdGNoLT5pbml0X2RhdGEpIHsKIAkJCQlkZXZfZXJyKGRldiwKIAkJCQkJImZhaWxlZCB0byBwYXJzZSBEVCBmb3IgcmVndWxhdG9yICVzXG4iLApAQCAtMjI0LDcgKzI5OSw3IEBACiAJCWlmIChzdHJjbXAoZGVzYy0+b2ZfbWF0Y2gsIG5hbWUpKQogCQkJY29udGludWU7CiAKLQkJaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBjaGlsZCk7CisJCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgY2hpbGQsIGRlc2MpOwogCQlpZiAoIWluaXRfZGF0YSkgewogCQkJZGV2X2VycihkZXYsCiAJCQkJImZhaWxlZCB0byBwYXJzZSBEVCBmb3IgcmVndWxhdG9yICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvcHdtLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcHdtLXJlZ3VsYXRvci5jCmluZGV4IGQzZjU1ZWEuLjkxZjM0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3B3bS1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9wd20tcmVndWxhdG9yLmMKQEAgLTE0OSw3ICsxNDksOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWNvbmZpZy5pbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmcGRldi0+ZGV2LCBucCk7CisJY29uZmlnLmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIG5wLAorCQkJCQkJICAgICAgJmRydmRhdGEtPmRlc2MpOwogCWlmICghY29uZmlnLmluaXRfZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3Fjb21fcnBtLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcWNvbV9ycG0tcmVndWxhdG9yLmMKaW5kZXggYjU1Y2Q1Yi4uMTgzNTk4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcWNvbV9ycG0tcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvcWNvbV9ycG0tcmVndWxhdG9yLmMKQEAgLTE4Myw2ICsxODMsMTMgQEAKIAlSRUdVTEFUT1JfTElORUFSX1JBTkdFKDE1MDAwMDAsICA2NCwgMTAwLCA1MDAwMCksCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9saW5lYXJfcmFuZ2Ugc21iMjA4X3Jhbmdlc1tdID0geworCVJFR1VMQVRPUl9MSU5FQVJfUkFOR0UoIDM3NTAwMCwgICAwLCAgMjksIDEyNTAwKSwKKwlSRUdVTEFUT1JfTElORUFSX1JBTkdFKCA3NTAwMDAsICAzMCwgIDg5LCAxMjUwMCksCisJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSgxNTAwMDAwLCAgOTAsIDE1MywgMjUwMDApLAorCVJFR1VMQVRPUl9MSU5FQVJfUkFOR0UoMzEwMDAwMCwgMTU0LCAyMzQsIDI1MDAwKSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2xpbmVhcl9yYW5nZSBuY3BfcmFuZ2VzW10gPSB7CiAJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSgxNTAwMDAwLCAgIDAsICAzMSwgNTAwMDApLAogfTsKQEAgLTU1OSw2ICs1NjYsMTYgQEAKIAkucGFydHMgPSAmcnBtODk2MF9zd2l0Y2hfcGFydHMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHFjb21fcnBtX3JlZyBzbWIyMDhfc21wcyA9IHsKKwkuZGVzYy5saW5lYXJfcmFuZ2VzID0gc21iMjA4X3JhbmdlcywKKwkuZGVzYy5uX2xpbmVhcl9yYW5nZXMgPSBBUlJBWV9TSVpFKHNtYjIwOF9yYW5nZXMpLAorCS5kZXNjLm5fdm9sdGFnZXMgPSAyMzUsCisJLmRlc2Mub3BzID0gJnVWX29wcywKKwkucGFydHMgPSAmcnBtODk2MF9zbXBzX3BhcnRzLAorCS5zdXBwb3J0c19mb3JjZV9tb2RlX2F1dG8gPSBmYWxzZSwKKwkuc3VwcG9ydHNfZm9yY2VfbW9kZV9ieXBhc3MgPSBmYWxzZSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJwbV9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAicWNvbSxycG0tcG04MDU4LXBsZG8iLCAgICAgLmRhdGEgPSAmcG04MDU4X3BsZG8gfSwKIAl7IC5jb21wYXRpYmxlID0gInFjb20scnBtLXBtODA1OC1ubGRvIiwgICAgIC5kYXRhID0gJnBtODA1OF9ubGRvIH0sCkBAIC01NzgsNiArNTk1LDggQEAKIAl7IC5jb21wYXRpYmxlID0gInFjb20scnBtLXBtODkyMS1mdHNtcHMiLCAgIC5kYXRhID0gJnBtODkyMV9mdHNtcHMgfSwKIAl7IC5jb21wYXRpYmxlID0gInFjb20scnBtLXBtODkyMS1uY3AiLCAgICAgIC5kYXRhID0gJnBtODkyMV9uY3AgfSwKIAl7IC5jb21wYXRpYmxlID0gInFjb20scnBtLXBtODkyMS1zd2l0Y2giLCAgIC5kYXRhID0gJnBtODkyMV9zd2l0Y2ggfSwKKworCXsgLmNvbXBhdGlibGUgPSAicWNvbSxycG0tc21iMjA4IiwgLmRhdGEgPSAmc21iMjA4X3NtcHMgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBycG1fb2ZfbWF0Y2gpOwpAQCAtNjQzLDEwICs2NjIsNiBAQAogCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKHJwbV9vZl9tYXRjaCwgJnBkZXYtPmRldik7CiAJdGVtcGxhdGUgPSBtYXRjaC0+ZGF0YTsKIAotCWluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgcGRldi0+ZGV2Lm9mX25vZGUpOwotCWlmICghaW5pdGRhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJdnJlZyA9IGRldm1fa21hbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnZyZWcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZyZWcpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHZyZWdcbiIpOwpAQCAtNjY2LDYgKzY4MSwxMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpbml0ZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkgICAgICAmdnJlZy0+ZGVzYyk7CisJaWYgKCFpbml0ZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlrZXkgPSAicmVnIjsKIAlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwga2V5LCAmdmFsKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9yazgwOC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3JrODA4LXJlZ3VsYXRvci5jCmluZGV4IDE5NmE1YzguLmVhOWQwNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3JrODA4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3JrODA4LXJlZ3VsYXRvci5jCkBAIC0zNiw2ICszNiwxMiBAQAogI2RlZmluZSBSSzgwOF9SQU1QX1JBVEVfNk1WX1BFUl9VUwkoMiA8PCBSSzgwOF9SQU1QX1JBVEVfT0ZGU0VUKQogI2RlZmluZSBSSzgwOF9SQU1QX1JBVEVfMTBNVl9QRVJfVVMJKDMgPDwgUks4MDhfUkFNUF9SQVRFX09GRlNFVCkKIAorLyogT2Zmc2V0IGZyb20gWFhYX09OX1ZTRUwgdG8gWFhYX1NMUF9WU0VMICovCisjZGVmaW5lIFJLODA4X1NMUF9SRUdfT0ZGU0VUIDEKKworLyogT2Zmc2V0IGZyb20gWFhYX0VOX1JFRyB0byBTTEVFUF9TRVRfT0ZGX1hYWCAqLworI2RlZmluZSBSSzgwOF9TTFBfU0VUX09GRl9SRUdfT0ZGU0VUIDIKKwogc3RhdGljIGNvbnN0IGludCByazgwOF9idWNrX2NvbmZpZ19yZWdzW10gPSB7CiAJUks4MDhfQlVDSzFfQ09ORklHX1JFRywKIAlSSzgwOF9CVUNLMl9DT05GSUdfUkVHLApAQCAtOTEsNiArOTcsNDMgQEAKIAkJCQkgIFJLODA4X1JBTVBfUkFURV9NQVNLLCByYW1wX3ZhbHVlKTsKIH0KIAoraW50IHJrODA4X3NldF9zdXNwZW5kX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCB1dikKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCBzZWwgPSByZWd1bGF0b3JfbWFwX3ZvbHRhZ2VfbGluZWFyX3JhbmdlKHJkZXYsIHV2LCB1dik7CisKKwlpZiAoc2VsIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgPSByZGV2LT5kZXNjLT52c2VsX3JlZyArIFJLODA4X1NMUF9SRUdfT0ZGU0VUOworCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJlZywKKwkJCQkgIHJkZXYtPmRlc2MtPnZzZWxfbWFzaywKKwkJCQkgIHNlbCk7Cit9CisKK2ludCByazgwOF9zZXRfc3VzcGVuZF9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcgKyBSSzgwOF9TTFBfU0VUX09GRl9SRUdfT0ZGU0VUOworCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJlZywKKwkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLAorCQkJCSAgMCk7Cit9CisKK2ludCByazgwOF9zZXRfc3VzcGVuZF9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZGV2LT5kZXNjLT5lbmFibGVfcmVnICsgUks4MDhfU0xQX1NFVF9PRkZfUkVHX09GRlNFVDsKKworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocmRldi0+cmVnbWFwLCByZWcsCisJCQkJICByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywKKwkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrKTsKK30KKwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHJrODA4X2J1Y2sxXzJfb3BzID0gewogCS5saXN0X3ZvbHRhZ2UJCT0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXJfcmFuZ2UsCiAJLm1hcF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXJfcmFuZ2UsCkBAIC0xMDAsNiArMTQzLDkgQEAKIAkuZGlzYWJsZQkJPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCiAJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAogCS5zZXRfcmFtcF9kZWxheQkJPSByazgwOF9zZXRfcmFtcF9kZWxheSwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZQk9IHJrODA4X3NldF9zdXNwZW5kX3ZvbHRhZ2UsCisJLnNldF9zdXNwZW5kX2VuYWJsZQk9IHJrODA4X3NldF9zdXNwZW5kX2VuYWJsZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IHJrODA4X3NldF9zdXNwZW5kX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcms4MDhfcmVnX29wcyA9IHsKQEAgLTExMCwxMiArMTU2LDE3IEBACiAJLmVuYWJsZQkJCT0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCiAJLmRpc2FibGUJCT0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAogCS5pc19lbmFibGVkCQk9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZQk9IHJrODA4X3NldF9zdXNwZW5kX3ZvbHRhZ2UsCisJLnNldF9zdXNwZW5kX2VuYWJsZQk9IHJrODA4X3NldF9zdXNwZW5kX2VuYWJsZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IHJrODA4X3NldF9zdXNwZW5kX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcms4MDhfc3dpdGNoX29wcyA9IHsKLQkuZW5hYmxlID0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCi0JLmRpc2FibGUgPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCi0JLmlzX2VuYWJsZWQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCisJLmVuYWJsZQkJCT0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCisJLmRpc2FibGUJCT0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorCS5pc19lbmFibGVkCQk9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKKwkuc2V0X3N1c3BlbmRfZW5hYmxlCT0gcms4MDhfc2V0X3N1c3BlbmRfZW5hYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gcms4MDhfc2V0X3N1c3BlbmRfZGlzYWJsZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2Mgcms4MDhfcmVnW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9ybjV0NjE4LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivcm41dDYxOC1yZWd1bGF0b3IuYwppbmRleCBlNThkNzlhLi5iODVjZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9ybjV0NjE4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3JuNXQ2MTgtcmVndWxhdG9yLmMKQEAgLTMxLDYgKzMxLDggQEAKICNkZWZpbmUgUkVHKHJpZCwgZXJlZywgZW1hc2ssIHZyZWcsIHZtYXNrLCBtaW4sIG1heCwgc3RlcCkJCVwKIAlbUk41VDYxOF8jI3JpZF0gPSB7CQkJCQkJXAogCQkubmFtZQkJPSAjcmlkLAkJCQkJXAorCQkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoI3JpZCksCQkJXAorCQkucmVndWxhdG9yc19ub2RlID0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCQlcCiAJCS5pZAkJPSBSTjVUNjE4XyMjcmlkLAkJCVwKIAkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJXAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCQkJCVwKQEAgLTYwLDYwICs2MiwxNSBAQAogCVJFRyhMRE9SVEMyLCBMRE9FTjIsIEJJVCg1KSwgTERPUlRDMkRBQywgMHg3ZiwgOTAwMDAwLCAzNTAwMDAwLCAyNTAwMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCBybjV0NjE4X21hdGNoZXNbXSA9IHsKLQlbUk41VDYxOF9EQ0RDMV0JCT0geyAubmFtZSA9ICJEQ0RDMSIgfSwKLQlbUk41VDYxOF9EQ0RDMl0JCT0geyAubmFtZSA9ICJEQ0RDMiIgfSwKLQlbUk41VDYxOF9EQ0RDM10JCT0geyAubmFtZSA9ICJEQ0RDMyIgfSwKLQlbUk41VDYxOF9MRE8xXQkJPSB7IC5uYW1lID0gIkxETzEiIH0sCi0JW1JONVQ2MThfTERPMl0JCT0geyAubmFtZSA9ICJMRE8yIiB9LAotCVtSTjVUNjE4X0xETzNdCQk9IHsgLm5hbWUgPSAiTERPMyIgfSwKLQlbUk41VDYxOF9MRE80XQkJPSB7IC5uYW1lID0gIkxETzQiIH0sCi0JW1JONVQ2MThfTERPNV0JCT0geyAubmFtZSA9ICJMRE81IiB9LAotCVtSTjVUNjE4X0xET1JUQzFdCT0geyAubmFtZSA9ICJMRE9SVEMxIiB9LAotCVtSTjVUNjE4X0xET1JUQzJdCT0geyAubmFtZSA9ICJMRE9SVEMyIiB9LAotfTsKLQotc3RhdGljIGludCBybjV0NjE4X3JlZ3VsYXRvcl9wYXJzZV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpyZWd1bGF0b3JzOwotCWludCByZXQ7Ci0KLQlucCA9IG9mX25vZGVfZ2V0KHBkZXYtPmRldi5wYXJlbnQtPm9mX25vZGUpOwotCWlmICghbnApCi0JCXJldHVybiAwOwotCi0JcmVndWxhdG9ycyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCAicmVndWxhdG9ycyIpOwotCWlmICghcmVndWxhdG9ycykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZWd1bGF0b3JzIG5vZGUgbm90IGZvdW5kXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0ID0gb2ZfcmVndWxhdG9yX21hdGNoKCZwZGV2LT5kZXYsIHJlZ3VsYXRvcnMsIHJuNXQ2MThfbWF0Y2hlcywKLQkJCQkgQVJSQVlfU0laRShybjV0NjE4X21hdGNoZXMpKTsKLQlvZl9ub2RlX3B1dChyZWd1bGF0b3JzKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciBwYXJzaW5nIHJlZ3VsYXRvciBpbml0IGRhdGE6ICVkXG4iLAotCQkJcmV0KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBybjV0NjE4X3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBybjV0NjE4ICpybjV0NjE4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQlpbnQgcmV0LCBpOwotCi0JcmV0ID0gcm41dDYxOF9yZWd1bGF0b3JfcGFyc2VfZHQocGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBSTjVUNjE4X1JFR19OVU07IGkrKykgewotCQljb25maWcuZGV2ID0gJnBkZXYtPmRldjsKLQkJY29uZmlnLmluaXRfZGF0YSA9IHJuNXQ2MThfbWF0Y2hlc1tpXS5pbml0X2RhdGE7Ci0JCWNvbmZpZy5vZl9ub2RlID0gcm41dDYxOF9tYXRjaGVzW2ldLm9mX25vZGU7CisJCWNvbmZpZy5kZXYgPSBwZGV2LT5kZXYucGFyZW50OwogCQljb25maWcucmVnbWFwID0gcm41dDYxOC0+cmVnbWFwOwogCiAJCXJkZXYgPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcigmcGRldi0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvcnQ1MDMzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcnQ1MDMzLXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MGNjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9ydDUwMzMtcmVndWxhdG9yLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBSZWd1bGF0b3IgZHJpdmVyIGZvciB0aGUgUmljaHRlayBSVDUwMzMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcywgQ28uLCBMdGQuCisgKiBBdXRob3I6IEJlb21obyBTZW8gPGJlb21oby5zZW9Ac2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3J0NTAzMy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9ydDUwMzMtcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuaD4KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHJ0NTAzM19zYWZlX2xkb19vcHMgPSB7CisJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5lbmFibGUJCQk9IHJlZ3VsYXRvcl9lbmFibGVfcmVnbWFwLAorCS5kaXNhYmxlCQk9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKKwkubGlzdF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2VfbGluZWFyLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHJ0NTAzM19idWNrX29wcyA9IHsKKwkuaXNfZW5hYmxlZAkJPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCisJLmVuYWJsZQkJCT0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCisJLmRpc2FibGUJCT0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorCS5saXN0X3ZvbHRhZ2UJCT0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXIsCisJLm1hcF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXIsCisJLmdldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgcnQ1MDMzX3N1cHBvcnRlZF9yZWd1bGF0b3JzW10gPSB7CisJW1JUNTAzM19CVUNLXSA9IHsKKwkJLm5hbWUJCT0gIkJVQ0siLAorCQkuaWQJCT0gUlQ1MDMzX0JVQ0ssCisJCS5vcHMJCT0gJnJ0NTAzM19idWNrX29wcywKKwkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm5fdm9sdGFnZXMJPSBSVDUwMzNfUkVHVUxBVE9SX0JVQ0tfVk9MVEFHRV9TVEVQX05VTSwKKwkJLm1pbl91VgkJPSBSVDUwMzNfUkVHVUxBVE9SX0JVQ0tfVk9MVEFHRV9NSU4sCisJCS51Vl9zdGVwCT0gUlQ1MDMzX1JFR1VMQVRPUl9CVUNLX1ZPTFRBR0VfU1RFUCwKKwkJLmVuYWJsZV9yZWcJPSBSVDUwMzNfUkVHX0NUUkwsCisJCS5lbmFibGVfbWFzawk9IFJUNTAzM19DVFJMX0VOX0JVQ0tfTUFTSywKKwkJLnZzZWxfcmVnCT0gUlQ1MDMzX1JFR19CVUNLX0NUUkwsCisJCS52c2VsX21hc2sJPSBSVDUwMzNfQlVDS19DVFJMX01BU0ssCisJfSwKKwlbUlQ1MDMzX0xET10gPSB7CisJCS5uYW1lCQk9ICJMRE8iLAorCQkuaWQJCT0gUlQ1MDMzX0xETywKKwkJLm9wcwkJPSAmcnQ1MDMzX2J1Y2tfb3BzLAorCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubl92b2x0YWdlcwk9IFJUNTAzM19SRUdVTEFUT1JfTERPX1ZPTFRBR0VfU1RFUF9OVU0sCisJCS5taW5fdVYJCT0gUlQ1MDMzX1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9NSU4sCisJCS51Vl9zdGVwCT0gUlQ1MDMzX1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9TVEVQLAorCQkuZW5hYmxlX3JlZwk9IFJUNTAzM19SRUdfQ1RSTCwKKwkJLmVuYWJsZV9tYXNrCT0gUlQ1MDMzX0NUUkxfRU5fTERPX01BU0ssCisJCS52c2VsX3JlZwk9IFJUNTAzM19SRUdfTERPX0NUUkwsCisJCS52c2VsX21hc2sJPSBSVDUwMzNfTERPX0NUUkxfTUFTSywKKwl9LAorCVtSVDUwMzNfU0FGRV9MRE9dID0geworCQkubmFtZQkJPSAiU0FGRV9MRE8iLAorCQkuaWQJCT0gUlQ1MDMzX1NBRkVfTERPLAorCQkub3BzCQk9ICZydDUwMzNfc2FmZV9sZG9fb3BzLAorCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubl92b2x0YWdlcwk9IDEsCisJCS5taW5fdVYJCT0gUlQ1MDMzX1JFR1VMQVRPUl9TQUZFX0xET19WT0xUQUdFLAorCQkuZW5hYmxlX3JlZwk9IFJUNTAzM19SRUdfQ1RSTCwKKwkJLmVuYWJsZV9tYXNrCT0gUlQ1MDMzX0NUUkxfRU5fU0FGRV9MRE9fTUFTSywKKwl9LAorfTsKKworc3RhdGljIGludCBydDUwMzNfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0NTAzM19kZXYgKnJ0NTAzMyA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlpbnQgcmV0LCBpOworCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHt9OworCisJY29uZmlnLmRldiA9ICZwZGV2LT5kZXY7CisJY29uZmlnLmRyaXZlcl9kYXRhID0gcnQ1MDMzOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnQ1MDMzX3N1cHBvcnRlZF9yZWd1bGF0b3JzKTsgaSsrKSB7CisJCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3I7CisKKwkJY29uZmlnLnJlZ21hcCA9IHJ0NTAzMy0+cmVnbWFwOworCisJCXJlZ3VsYXRvciA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsCisJCQkJJnJ0NTAzM19zdXBwb3J0ZWRfcmVndWxhdG9yc1tpXSwgJmNvbmZpZyk7CisJCWlmIChJU19FUlIocmVndWxhdG9yKSkgeworCQkJcmV0ID0gUFRSX0VSUihyZWd1bGF0b3IpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJSZWd1bGF0b3IgaW5pdCBmYWlsZWQgJWQ6IHdpdGggZXJyb3I6ICVkXG4iLAorCQkJCWksIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHJ0NTAzM19yZWd1bGF0b3JfaWRbXSA9IHsKKwl7ICJydDUwMzMtcmVndWxhdG9yIiwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBydDUwMzNfcmVndWxhdG9yX2lkKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnQ1MDMzX3JlZ3VsYXRvcl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicnQ1MDMzLXJlZ3VsYXRvciIsCisJfSwKKwkucHJvYmUJCT0gcnQ1MDMzX3JlZ3VsYXRvcl9wcm9iZSwKKwkuaWRfdGFibGUJPSBydDUwMzNfcmVndWxhdG9yX2lkLAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocnQ1MDMzX3JlZ3VsYXRvcl9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlJpY2h0ZWsgUlQ1MDMzIFJlZ3VsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkJlb21obyBTZW8gPGJlb21oby5zZW9Ac2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wYTAxLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wYTAxLmMKaW5kZXggNzYzM2I5Yi4uNWRiNGUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvczJtcGEwMS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBhMDEuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJLmVuYWJsZV9tYXNrCT0gUzJNUEEwMV9FTkFCTEVfTUFTSwkJCVwKIH0KIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyByZWd1bGF0b3JzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKIAlyZWd1bGF0b3JfZGVzY19sZG8oMSwgU1RFUF8yNV9NViksCiAJcmVndWxhdG9yX2Rlc2NfbGRvKDIsIFNURVBfNTBfTVYpLAogCXJlZ3VsYXRvcl9kZXNjX2xkbygzLCBTVEVQXzUwX01WKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3MybXBzMTEuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBzMTEuYwppbmRleCBhZGFiODJkLi5iMzQ1Y2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvczJtcHMxMS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wczExLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBzMTQuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wdTAyLmg+CiAKQEAgLTQ1LDEwICs0NiwxMCBAQAogCWVudW0gc2VjX2RldmljZV90eXBlIGRldl90eXBlOwogCiAJLyoKLQkgKiBPbmUgYml0IGZvciBlYWNoIFMyTVBTMTQvUzJNUFUwMiByZWd1bGF0b3Igd2hldGhlciB0aGUgc3VzcGVuZCBtb2RlCi0JICogd2FzIGVuYWJsZWQuCisJICogT25lIGJpdCBmb3IgZWFjaCBTMk1QUzEzL1MyTVBTMTQvUzJNUFUwMiByZWd1bGF0b3Igd2hldGhlcgorCSAqIHRoZSBzdXNwZW5kIG1vZGUgd2FzIGVuYWJsZWQuCiAJICovCi0JdW5zaWduZWQgbG9uZyBsb25nIHMybXBzMTRfc3VzcGVuZF9zdGF0ZTozNTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgczJtcHMxNF9zdXNwZW5kX3N0YXRlOjUwOwogCiAJLyogQXJyYXkgb2Ygc2l6ZSByZGV2X251bSB3aXRoIEdQSU8tcyBmb3IgZXh0ZXJuYWwgc2xlZXAgY29udHJvbCAqLwogCWludCAqZXh0X2NvbnRyb2xfZ3BpbzsKQEAgLTM2OSwxMiArMzcwLDEwMSBAQAogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTFfYnVjazZfMTAoMTAsIE1JTl83NTBfTVYsIFNURVBfMTJfNV9NViksCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgczJtcHMxNF9yZWdfb3BzOworCisjZGVmaW5lIHJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKG51bSwgbWluLCBzdGVwLCBtaW5fc2VsKSB7CVwKKwkubmFtZQkJPSAiTERPIiNudW0sCQkJCVwKKwkuaWQJCT0gUzJNUFMxM19MRE8jI251bSwJCQlcCisJLm9wcwkJPSAmczJtcHMxNF9yZWdfb3BzLAkJCVwKKwkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAkJCQlcCisJLm1pbl91VgkJPSBtaW4sCQkJCQlcCisJLnVWX3N0ZXAJPSBzdGVwLAkJCQkJXAorCS5saW5lYXJfbWluX3NlbAk9IG1pbl9zZWwsCQkJCVwKKwkubl92b2x0YWdlcwk9IFMyTVBTMTRfTERPX05fVk9MVEFHRVMsCQlcCisJLnZzZWxfcmVnCT0gUzJNUFMxM19SRUdfTDFDVFJMICsgbnVtIC0gMSwJCVwKKwkudnNlbF9tYXNrCT0gUzJNUFMxNF9MRE9fVlNFTF9NQVNLLAkJXAorCS5lbmFibGVfcmVnCT0gUzJNUFMxM19SRUdfTDFDVFJMICsgbnVtIC0gMSwJCVwKKwkuZW5hYmxlX21hc2sJPSBTMk1QUzE0X0VOQUJMRV9NQVNLCQkJXAorfQorCisjZGVmaW5lIHJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayhudW0sIG1pbiwgc3RlcCwgbWluX3NlbCkgewlcCisJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJXAorCS5pZAkJPSBTMk1QUzEzX0JVQ0sjI251bSwJCQlcCisJLm9wcwkJPSAmczJtcHMxNF9yZWdfb3BzLAkJCVwKKwkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAkJCQlcCisJLm1pbl91VgkJPSBtaW4sCQkJCQlcCisJLnVWX3N0ZXAJPSBzdGVwLAkJCQkJXAorCS5saW5lYXJfbWluX3NlbAk9IG1pbl9zZWwsCQkJCVwKKwkubl92b2x0YWdlcwk9IFMyTVBTMTRfQlVDS19OX1ZPTFRBR0VTLAkJXAorCS5yYW1wX2RlbGF5CT0gUzJNUFMxM19CVUNLX1JBTVBfREVMQVksCQlcCisJLnZzZWxfcmVnCT0gUzJNUFMxM19SRUdfQjFPVVQgKyAobnVtIC0gMSkgKiAyLAlcCisJLnZzZWxfbWFzawk9IFMyTVBTMTRfQlVDS19WU0VMX01BU0ssCQlcCisJLmVuYWJsZV9yZWcJPSBTMk1QUzEzX1JFR19CMUNUUkwgKyAobnVtIC0gMSkgKiAyLAlcCisJLmVuYWJsZV9tYXNrCT0gUzJNUFMxNF9FTkFCTEVfTUFTSwkJCVwKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBzMm1wczEzX3JlZ3VsYXRvcnNbXSA9IHsKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxLCAgTUlOXzgwMF9NViwgIFNURVBfMTJfNV9NViwgMHgwMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMiwgIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDMsICBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbyg0LCAgTUlOXzgwMF9NViwgIFNURVBfMTJfNV9NViwgMHgwMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oNSwgIE1JTl84MDBfTVYsICBTVEVQXzEyXzVfTVYsIDB4MDApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDYsICBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbyg3LCAgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oOCwgIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDksICBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxMCwgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMTEsIE1JTl84MDBfTVYsICBTVEVQXzI1X01WLCAgIDB4MTApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDEyLCBNSU5fODAwX01WLCAgU1RFUF8yNV9NViwgICAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxMywgTUlOXzgwMF9NViwgIFNURVBfMjVfTVYsICAgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMTQsIE1JTl84MDBfTVYsICBTVEVQXzEyXzVfTVYsIDB4MDApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDE1LCBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxNiwgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMTcsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDE4LCBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxOSwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjAsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDIxLCBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyMiwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjMsIE1JTl84MDBfTVYsICBTVEVQXzEyXzVfTVYsIDB4MDApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDI0LCBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyNSwgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjYsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDI3LCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyOCwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjksIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDMwLCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzMSwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMzIsIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDMzLCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzNCwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMzUsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDM2LCBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzNywgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMzgsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDM5LCBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbyg0MCwgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDEsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soMiwgIE1JTl81MDBfTVYsICBTVEVQXzZfMjVfTVYsIDB4MTApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjaygzLCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDQsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soNSwgIE1JTl81MDBfTVYsICBTVEVQXzZfMjVfTVYsIDB4MTApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg2LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDcsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soOCwgIE1JTl8xMDAwX01WLCBTVEVQXzEyXzVfTVYsIDB4MjApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg5LCAgTUlOXzEwMDBfTVYsIFNURVBfMTJfNV9NViwgMHgyMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDEwLCBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKK307CisKIHN0YXRpYyBpbnQgczJtcHMxNF9yZWd1bGF0b3JfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCBzMm1wczExX2luZm8gKnMybXBzMTEgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXVuc2lnbmVkIGludCB2YWw7CiAKIAlzd2l0Y2ggKHMybXBzMTEtPmRldl90eXBlKSB7CisJY2FzZSBTMk1QUzEzWDoKIAljYXNlIFMyTVBTMTRYOgogCQlpZiAoczJtcHMxMS0+czJtcHMxNF9zdXNwZW5kX3N0YXRlICYgKDEgPDwgcmRldl9nZXRfaWQocmRldikpKQogCQkJdmFsID0gUzJNUFMxNF9FTkFCTEVfU1VTUEVORDsKQEAgLTQwNiw2ICs0OTYsNyBAQAogCiAJLyogQmVsb3cgTERPIHNob3VsZCBiZSBhbHdheXMgb24gb3IgZG9lcyBub3Qgc3VwcG9ydCBzdXNwZW5kIG1vZGUuICovCiAJc3dpdGNoIChzMm1wczExLT5kZXZfdHlwZSkgeworCWNhc2UgUzJNUFMxM1g6CiAJY2FzZSBTMk1QUzE0WDoKIAkJc3dpdGNoIChyZGV2X2lkKSB7CiAJCWNhc2UgUzJNUFMxNF9MRE8zOgpAQCAtODMxLDYgKzkyMiwxMCBAQAogCQlzMm1wczExLT5yZGV2X251bSA9IEFSUkFZX1NJWkUoczJtcHMxMV9yZWd1bGF0b3JzKTsKIAkJcmVndWxhdG9ycyA9IHMybXBzMTFfcmVndWxhdG9yczsKIAkJYnJlYWs7CisJY2FzZSBTMk1QUzEzWDoKKwkJczJtcHMxMS0+cmRldl9udW0gPSBBUlJBWV9TSVpFKHMybXBzMTNfcmVndWxhdG9ycyk7CisJCXJlZ3VsYXRvcnMgPSBzMm1wczEzX3JlZ3VsYXRvcnM7CisJCWJyZWFrOwogCWNhc2UgUzJNUFMxNFg6CiAJCXMybXBzMTEtPnJkZXZfbnVtID0gQVJSQVlfU0laRShzMm1wczE0X3JlZ3VsYXRvcnMpOwogCQlyZWd1bGF0b3JzID0gczJtcHMxNF9yZWd1bGF0b3JzOwpAQCAtODQ1LDcgKzk0MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX07CiAKLQlzMm1wczExLT5leHRfY29udHJvbF9ncGlvID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCisJczJtcHMxMS0+ZXh0X2NvbnRyb2xfZ3BpbyA9IGRldm1fa21hbGxvYygmcGRldi0+ZGV2LAogCQkJc2l6ZW9mKCpzMm1wczExLT5leHRfY29udHJvbF9ncGlvKSAqIHMybXBzMTEtPnJkZXZfbnVtLAogCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFzMm1wczExLT5leHRfY29udHJvbF9ncGlvKQpAQCAtODg2LDYgKzk4MSw3IEBACiAJY29uZmlnLnJlZ21hcCA9IGlvZGV2LT5yZWdtYXBfcG1pYzsKIAljb25maWcuZHJpdmVyX2RhdGEgPSBzMm1wczExOwogCWNvbmZpZy5lbmFfZ3Bpb19mbGFncyA9IEdQSU9GX09VVF9JTklUX0hJR0g7CisJY29uZmlnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKIAlmb3IgKGkgPSAwOyBpIDwgczJtcHMxMS0+cmRldl9udW07IGkrKykgewogCQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yOwogCkBAIC05MjcsNiArMTAyMyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHMybXBzMTFfcG1pY19pZFtdID0gewogCXsgInMybXBzMTEtcG1pYyIsIFMyTVBTMTFYfSwKKwl7ICJzMm1wczEzLXBtaWMiLCBTMk1QUzEzWH0sCiAJeyAiczJtcHMxNC1wbWljIiwgUzJNUFMxNFh9LAogCXsgInMybXB1MDItcG1pYyIsIFMyTVBVMDJ9LAogCXsgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3M1bTg3NjcuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3M1bTg3NjcuYwppbmRleCAwYWI1Y2JlLi5kYzEzMjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zNW04NzY3LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvczVtODc2Ny5jCkBAIC01ODEsNyArNTgxLDggQEAKIAogCQlyZGF0YS0+aWQgPSBpOwogCQlyZGF0YS0+aW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgKLQkJCQkJCSZwZGV2LT5kZXYsIHJlZ19ucCk7CisJCQkJCQkmcGRldi0+ZGV2LCByZWdfbnAsCisJCQkJCQkmcmVndWxhdG9yc1tpXSk7CiAJCXJkYXRhLT5yZWdfbm9kZSA9IHJlZ19ucDsKIAkJcmRhdGErKzsKIAkJcm1vZGUtPmlkID0gaTsKQEAgLTk1MCw2ICs5NTEsNyBAQAogCQljb25maWcub2Zfbm9kZSA9IHBkYXRhLT5yZWd1bGF0b3JzW2ldLnJlZ19ub2RlOwogCQljb25maWcuZW5hX2dwaW8gPSAtRUlOVkFMOwogCQljb25maWcuZW5hX2dwaW9fZmxhZ3MgPSAwOworCQljb25maWcuZW5hX2dwaW9faW5pdGlhbGl6ZWQgPSB0cnVlOwogCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+cmVndWxhdG9yc1tpXS5leHRfY29udHJvbF9ncGlvKSkKIAkJCXM1bTg3NjdfcmVndWxhdG9yX2NvbmZpZ19leHRfY29udHJvbChzNW04NzY3LAogCQkJCQkmcGRhdGEtPnJlZ3VsYXRvcnNbaV0sICZjb25maWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivc2t5ODE0NTItcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9za3k4MTQ1Mi1yZWd1bGF0b3IuYwppbmRleCA5N2FmZjBjLi42NDc4NjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9za3k4MTQ1Mi1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9za3k4MTQ1Mi1yZWd1bGF0b3IuYwpAQCAtNSw5ICs1LDggQEAKICAqIEF1dGhvciA6IEd5dW5nb2ggWW9vIDxqYWNrLnlvb0Bza3l3b3Jrc2luYy5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC01Miw2ICs1MSw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2Mgc2t5ODE0NTJfcmVnID0gewogCS5uYW1lID0gIkxPVVQiLAorCS5vZl9tYXRjaCA9IG9mX21hdGNoX3B0cigibG91dCIpLAorCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvciIpLAogCS5vcHMgPSAmc2t5ODE0NTJfcmVnX29wcywKIAkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNjQsMzAgKzY1LDYgQEAKIAkuZW5hYmxlX21hc2sgPSBTS1k4MTQ1Ml9MRU4sCiB9OwogCi0jaWZkZWYgQ09ORklHX09GCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKnNreTgxNDUyX3JlZ19wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtPnBhcmVudC0+b2Zfbm9kZSwgInJlZ3VsYXRvciIpOwotCWlmICh1bmxpa2VseSghbnApKSB7Ci0JCWRldl9lcnIoZGV2LCAicmVndWxhdG9yIG5vZGUgbm90IGZvdW5kIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgbnApOwotCi0Jb2Zfbm9kZV9wdXQobnApOwotCXJldHVybiBpbml0X2RhdGE7Ci19Ci0jZWxzZQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpza3k4MTQ1Ml9yZWdfcGFyc2VfZHQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc2t5ODE0NTJfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKQEAgLTk1LDIwICs3MiwxNiBAQAogCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKIAotCWlmICghaW5pdF9kYXRhKSB7Ci0JCWluaXRfZGF0YSA9IHNreTgxNDUyX3JlZ19wYXJzZV9kdChkZXYpOwotCQlpZiAoSVNfRVJSKGluaXRfZGF0YSkpCi0JCQlyZXR1cm4gUFRSX0VSUihpbml0X2RhdGEpOwotCX0KLQotCWNvbmZpZy5kZXYgPSBkZXY7CisJY29uZmlnLmRldiA9IGRldi0+cGFyZW50OwogCWNvbmZpZy5pbml0X2RhdGEgPSBpbml0X2RhdGE7CiAJY29uZmlnLm9mX25vZGUgPSBkZXYtPm9mX25vZGU7CiAJY29uZmlnLnJlZ21hcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7CiAKIAlyZGV2ID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoZGV2LCAmc2t5ODE0NTJfcmVnLCAmY29uZmlnKTsKLQlpZiAoSVNfRVJSKHJkZXYpKQorCWlmIChJU19FUlIocmRldikpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIuIGVycj0lbGRcbiIsIFBUUl9FUlIocmRldikpOwogCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCByZGV2KTsKIApAQCAtMTI2LDUgKzk5LDQgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTa3l3b3JrcyBTS1k4MTQ1MiBSZWd1bGF0b3IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJHeXVuZ29oIFlvbyA8amFjay55b29Ac2t5d29ya3NpbmMuY29tPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oIjEuMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivc3R3NDgxeC12bW1jLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9zdHc0ODF4LXZtbWMuYwppbmRleCBhN2UxNTI2Li5iNGYxNjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zdHc0ODF4LXZtbWMuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9zdHc0ODF4LXZtbWMuYwpAQCAtNzIsNyArNzIsOCBAQAogCWNvbmZpZy5yZWdtYXAgPSBzdHc0ODF4LT5tYXA7CiAJY29uZmlnLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAljb25maWcuaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwKLQkJCQkJCSAgICAgIHBkZXYtPmRldi5vZl9ub2RlKTsKKwkJCQkJCSAgICAgIHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkJICAgICAgJnZtbWNfcmVndWxhdG9yKTsKIAogCXN0dzQ4MXgtPnZtbWNfcmVndWxhdG9yID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoJnBkZXYtPmRldiwKIAkJCQkJCSZ2bW1jX3JlZ3VsYXRvciwgJmNvbmZpZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90aS1hYmItcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90aS1hYmItcmVndWxhdG9yLmMKaW5kZXggYTJkYWJiNS4uMWVmNWFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdGktYWJiLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RpLWFiYi1yZWd1bGF0b3IuYwpAQCAtODM3LDcgKzgzNyw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJaW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkgICAgICAmYWJiLT5yZGVzYyk7CiAJaWYgKCFpbml0ZGF0YSkgewogCQlkZXZfZXJyKGRldiwgIiVzOiBVbmFibGUgdG8gYWxsb2MgcmVndWxhdG9yIGluaXQgZGF0YVxuIiwKIAkJCV9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczUxNjMyLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNTE2MzItcmVndWxhdG9yLmMKaW5kZXggZjMxZjIyZS4uYzIxM2UzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNTE2MzItcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNTE2MzItcmVndWxhdG9yLmMKQEAgLTIyMSw3ICsyMjEsOCBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdHBzNTE2MzJfb2ZfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IHRwczUxNjMyX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhICoKLQlvZl9nZXRfdHBzNTE2MzJfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCisJb2ZfZ2V0X3RwczUxNjMyX3BsYXRmb3JtX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgdHBzNTE2MzJfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CkBAIC0yMzAsNyArMjMxLDggQEAKIAlpZiAoIXBkYXRhKQogCQlyZXR1cm4gTlVMTDsKIAotCXBkYXRhLT5yZWdfaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUpOworCXBkYXRhLT5yZWdfaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUsCisJCQkJCQkJICBkZXNjKTsKIAlpZiAoIXBkYXRhLT5yZWdfaW5pdF9kYXRhKSB7CiAJCWRldl9lcnIoZGV2LCAiTm90IGFibGUgdG8gZ2V0IE9GIHJlZ3VsYXRvciBpbml0IGRhdGFcbiIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTI0OCw3ICsyNTAsOCBAQAogfQogI2Vsc2UKIHN0YXRpYyBzdHJ1Y3QgdHBzNTE2MzJfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKgotCW9mX2dldF90cHM1MTYzMl9wbGF0Zm9ybV9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldikKKwlvZl9nZXRfdHBzNTE2MzJfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKQogewogCXJldHVybiBOVUxMOwogfQpAQCAtMjczLDkgKzI3NiwyNSBAQAogCQl9CiAJfQogCisJdHBzID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCp0cHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cHMtPmRldiA9ICZjbGllbnQtPmRldjsKKwl0cHMtPmRlc2MubmFtZSA9IGNsaWVudC0+bmFtZTsKKwl0cHMtPmRlc2MuaWQgPSAwOworCXRwcy0+ZGVzYy5yYW1wX2RlbGF5ID0gVFBTNTE2MzJfREVGQVVMVF9SQU1QX0RFTEFZOworCXRwcy0+ZGVzYy5taW5fdVYgPSBUUFM1MTYzMl9NSU5fVk9MVEFHRTsKKwl0cHMtPmRlc2MudVZfc3RlcCA9IFRQUzUxNjMyX1ZPTFRBR0VfU1RFUF8xMG1WOworCXRwcy0+ZGVzYy5saW5lYXJfbWluX3NlbCA9IFRQUzUxNjMyX01JTl9WU0VMOworCXRwcy0+ZGVzYy5uX3ZvbHRhZ2VzID0gVFBTNTE2MzJfTUFYX1ZTRUwgKyAxOworCXRwcy0+ZGVzYy5vcHMgPSAmdHBzNTE2MzJfZGNkY19vcHM7CisJdHBzLT5kZXNjLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRTsKKwl0cHMtPmRlc2Mub3duZXIgPSBUSElTX01PRFVMRTsKKwogCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmY2xpZW50LT5kZXYpOwogCWlmICghcGRhdGEgJiYgY2xpZW50LT5kZXYub2Zfbm9kZSkKLQkJcGRhdGEgPSBvZl9nZXRfdHBzNTE2MzJfcGxhdGZvcm1fZGF0YSgmY2xpZW50LT5kZXYpOworCQlwZGF0YSA9IG9mX2dldF90cHM1MTYzMl9wbGF0Zm9ybV9kYXRhKCZjbGllbnQtPmRldiwgJnRwcy0+ZGVzYyk7CiAJaWYgKCFwZGF0YSkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk5vIFBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI5NiwyMiArMzE1LDYgQEAKIAkJfQogCX0KIAotCXRwcyA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqdHBzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cHMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JdHBzLT5kZXYgPSAmY2xpZW50LT5kZXY7Ci0JdHBzLT5kZXNjLm5hbWUgPSBjbGllbnQtPm5hbWU7Ci0JdHBzLT5kZXNjLmlkID0gMDsKLQl0cHMtPmRlc2MucmFtcF9kZWxheSA9IFRQUzUxNjMyX0RFRkFVTFRfUkFNUF9ERUxBWTsKLQl0cHMtPmRlc2MubWluX3VWID0gVFBTNTE2MzJfTUlOX1ZPTFRBR0U7Ci0JdHBzLT5kZXNjLnVWX3N0ZXAgPSBUUFM1MTYzMl9WT0xUQUdFX1NURVBfMTBtVjsKLQl0cHMtPmRlc2MubGluZWFyX21pbl9zZWwgPSBUUFM1MTYzMl9NSU5fVlNFTDsKLQl0cHMtPmRlc2Mubl92b2x0YWdlcyA9IFRQUzUxNjMyX01BWF9WU0VMICsgMTsKLQl0cHMtPmRlc2Mub3BzID0gJnRwczUxNjMyX2RjZGNfb3BzOwotCXRwcy0+ZGVzYy50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0U7Ci0JdHBzLT5kZXNjLm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAlpZiAocGRhdGEtPmVuYWJsZV9wd21fZHZmcykKIAkJdHBzLT5kZXNjLnZzZWxfcmVnID0gVFBTNTE2MzJfVk9MVEFHRV9CQVNFX1JFRzsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2MjM2MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczYyMzYwLXJlZ3VsYXRvci5jCmluZGV4IGExNjcyMDQuLmExZmQ2MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczYyMzYwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczYyMzYwLXJlZ3VsYXRvci5jCkBAIC0yOTMsNyArMjkzLDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHBzNjIzNjBfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKgotCW9mX2dldF90cHM2MjM2MF9wbGF0Zm9ybV9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldikKKwlvZl9nZXRfdHBzNjIzNjBfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKQogewogCXN0cnVjdCB0cHM2MjM2MF9yZWd1bGF0b3JfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKQEAgLTMwMiw3ICszMDMsOCBAQAogCWlmICghcGRhdGEpCiAJCXJldHVybiBOVUxMOwogCi0JcGRhdGEtPnJlZ19pbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIGRldi0+b2Zfbm9kZSk7CisJcGRhdGEtPnJlZ19pbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIGRldi0+b2Zfbm9kZSwKKwkJCQkJCQkgIGRlc2MpOwogCWlmICghcGRhdGEtPnJlZ19pbml0X2RhdGEpIHsKIAkJZGV2X2VycihkZXYsICJOb3QgYWJsZSB0byBnZXQgT0YgcmVndWxhdG9yIGluaXQgZGF0YVxuIik7CiAJCXJldHVybiBOVUxMOwpAQCAtMzUwLDYgKzM1MiwxNyBAQAogCiAJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZjbGllbnQtPmRldik7CiAKKwl0cHMgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKnRwcyksIEdGUF9LRVJORUwpOworCWlmICghdHBzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRwcy0+ZGVzYy5uYW1lID0gY2xpZW50LT5uYW1lOworCXRwcy0+ZGVzYy5pZCA9IDA7CisJdHBzLT5kZXNjLm9wcyA9ICZ0cHM2MjM2MF9kY2RjX29wczsKKwl0cHMtPmRlc2MudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFOworCXRwcy0+ZGVzYy5vd25lciA9IFRISVNfTU9EVUxFOworCXRwcy0+ZGVzYy51Vl9zdGVwID0gMTAwMDA7CisKIAlpZiAoY2xpZW50LT5kZXYub2Zfbm9kZSkgewogCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAkJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2Uob2ZfbWF0Y2hfcHRyKHRwczYyMzYwX29mX21hdGNoKSwKQEAgLTM2MCw3ICszNzMsOCBAQAogCQl9CiAJCWNoaXBfaWQgPSAoaW50KShsb25nKW1hdGNoLT5kYXRhOwogCQlpZiAoIXBkYXRhKQotCQkJcGRhdGEgPSBvZl9nZXRfdHBzNjIzNjBfcGxhdGZvcm1fZGF0YSgmY2xpZW50LT5kZXYpOworCQkJcGRhdGEgPSBvZl9nZXRfdHBzNjIzNjBfcGxhdGZvcm1fZGF0YSgmY2xpZW50LT5kZXYsCisJCQkJCQkJICAgICAgJnRwcy0+ZGVzYyk7CiAJfSBlbHNlIGlmIChpZCkgewogCQljaGlwX2lkID0gaWQtPmRyaXZlcl9kYXRhOwogCX0gZWxzZSB7CkBAIC0zNzQsMTAgKzM4OCw2IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCXRwcyA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqdHBzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cHMpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJdHBzLT5lbl9kaXNjaGFyZ2UgPSBwZGF0YS0+ZW5fZGlzY2hhcmdlOwogCXRwcy0+ZW5faW50ZXJuYWxfcHVsbGRuID0gcGRhdGEtPmVuX2ludGVybmFsX3B1bGxkbjsKIAl0cHMtPnZzZWwwX2dwaW8gPSBwZGF0YS0+dnNlbDBfZ3BpbzsKQEAgLTQwMSwxMyArNDExLDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JdHBzLT5kZXNjLm5hbWUgPSBjbGllbnQtPm5hbWU7Ci0JdHBzLT5kZXNjLmlkID0gMDsKLQl0cHMtPmRlc2Mub3BzID0gJnRwczYyMzYwX2RjZGNfb3BzOwotCXRwcy0+ZGVzYy50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0U7Ci0JdHBzLT5kZXNjLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JdHBzLT5kZXNjLnVWX3N0ZXAgPSAxMDAwMDsKLQogCXRwcy0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAmdHBzNjIzNjBfcmVnbWFwX2NvbmZpZyk7CiAJaWYgKElTX0VSUih0cHMtPnJlZ21hcCkpIHsKIAkJcmV0ID0gUFRSX0VSUih0cHMtPnJlZ21hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA5MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDkwLXJlZ3VsYXRvci5jCmluZGV4IGQ1ZGYxZTkuLmYxZGY0NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDkwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDkwLXJlZ3VsYXRvci5jCkBAIC0zMTIsNyArMzEyLDExIEBACiAJCQlncGlvX2ZsYWcgPSBHUElPRl9PVVRfSU5JVF9ISUdIOwogCiAJCWNvbmZpZy0+ZW5hX2dwaW8gPSB0cHNfcGRhdGEtPmdwaW87CisJCWNvbmZpZy0+ZW5hX2dwaW9faW5pdGlhbGl6ZWQgPSB0cnVlOwogCQljb25maWctPmVuYV9ncGlvX2ZsYWdzID0gZ3Bpb19mbGFnOworCX0gZWxzZSB7CisJCWNvbmZpZy0+ZW5hX2dwaW8gPSAtRUlOVkFMOworCQljb25maWctPmVuYV9ncGlvX2luaXRpYWxpemVkID0gZmFsc2U7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTIxOC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjE4LXJlZ3VsYXRvci5jCmluZGV4IGYwYTQwMjguLjI2M2NjODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjE4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjE4LXJlZ3VsYXRvci5jCkBAIC0yMzEsNyArMjMxLDggQEAKIAogCXRlbXBsYXRlID0gbWF0Y2gtPmRhdGE7CiAJaWQgPSB0ZW1wbGF0ZS0+aWQ7Ci0JaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgcGRldi0+ZGV2Lm9mX25vZGUpOworCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkgICAgICAgJnJlZ3VsYXRvcnNbaWRdKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHRwcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYwppbmRleCAwYjRmODY2Li5kZDcyN2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci90d2wtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHdsLXJlZ3VsYXRvci5jCkBAIC0xMTA0LDcgKzExMDQsOCBAQAogCQl0ZW1wbGF0ZSA9IG1hdGNoLT5kYXRhOwogCQlpZCA9IHRlbXBsYXRlLT5kZXNjLmlkOwogCQlpbml0ZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsCi0JCQkJCQkgICAgICBwZGV2LT5kZXYub2Zfbm9kZSk7CisJCQkJCQkgICAgICBwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJCSAgICAgICZ0ZW1wbGF0ZS0+ZGVzYyk7CiAJCWRydmRhdGEgPSBOVUxMOwogCX0gZWxzZSB7CiAJCWlkID0gcGRldi0+aWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci92ZXhwcmVzcy5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdmV4cHJlc3MuYwppbmRleCAwMmU3MjY3Li41ZTdjNzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci92ZXhwcmVzcy5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3ZleHByZXNzLmMKQEAgLTc0LDcgKzc0LDggQEAKIAlyZWctPmRlc2Mub3duZXIgPSBUSElTX01PRFVMRTsKIAlyZWctPmRlc2MuY29udGludW91c192b2x0YWdlX3JhbmdlID0gdHJ1ZTsKIAotCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIHBkZXYtPmRldi5vZl9ub2RlKTsKKwlpbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmcGRldi0+ZGV2LCBwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJICAgICAgICZyZWctPmRlc2MpOwogCWlmICghaW5pdF9kYXRhKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204OTk0LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204OTk0LXJlZ3VsYXRvci5jCmluZGV4IGMyNDM0NmQuLjg4ZjUwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODk5NC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg5OTQtcmVndWxhdG9yLmMKQEAgLTE0NSwxMCArMTQ1LDEyIEBACiAJY29uZmlnLmRyaXZlcl9kYXRhID0gbGRvOwogCWNvbmZpZy5yZWdtYXAgPSB3bTg5OTQtPnJlZ21hcDsKIAljb25maWcuaW5pdF9kYXRhID0gJmxkby0+aW5pdF9kYXRhOwotCWlmIChwZGF0YSkKKwlpZiAocGRhdGEpIHsKIAkJY29uZmlnLmVuYV9ncGlvID0gcGRhdGEtPmxkb1tpZF0uZW5hYmxlOwotCWVsc2UgaWYgKHdtODk5NC0+ZGV2LT5vZl9ub2RlKQorCX0gZWxzZSBpZiAod204OTk0LT5kZXYtPm9mX25vZGUpIHsKIAkJY29uZmlnLmVuYV9ncGlvID0gd204OTk0LT5wZGF0YS5sZG9baWRdLmVuYWJsZTsKKwkJY29uZmlnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKKwl9CiAKIAkvKiBVc2UgZGVmYXVsdCBjb25zdHJhaW50cyBpZiBub25lIHNldCB1cCAqLwogCWlmICghcGRhdGEgfHwgIXBkYXRhLT5sZG9baWRdLmluaXRfZGF0YSB8fCB3bTg5OTQtPmRldi0+b2Zfbm9kZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9NYWtlZmlsZSBiL2RyaXZlcnMvcmVzZXQvTWFrZWZpbGUKaW5kZXggNjBmZWQzZC4uMTU3ZDQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZXNldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Jlc2V0L01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogb2JqLSQoQ09ORklHX1JFU0VUX0NPTlRST0xMRVIpICs9IGNvcmUubwogb2JqLSQoQ09ORklHX0FSQ0hfU09DRlBHQSkgKz0gcmVzZXQtc29jZnBnYS5vCitvYmotJChDT05GSUdfQVJDSF9CRVJMSU4pICs9IHJlc2V0LWJlcmxpbi5vCiBvYmotJChDT05GSUdfQVJDSF9TVU5YSSkgKz0gcmVzZXQtc3VueGkubwogb2JqLSQoQ09ORklHX0FSQ0hfU1RJKSArPSBzdGkvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jlc2V0L2NvcmUuYyBiL2RyaXZlcnMvcmVzZXQvY29yZS5jCmluZGV4IGJhZWFmODIuLjc5NTVlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVzZXQvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVzZXQvY29yZS5jCkBAIC0xMjYsNiArMTI2LDIxIEBACiBFWFBPUlRfU1lNQk9MX0dQTChyZXNldF9jb250cm9sX2RlYXNzZXJ0KTsKIAogLyoqCisgKiByZXNldF9jb250cm9sX3N0YXR1cyAtIHJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyBpZiBub3Qgc3VwcG9ydGVkLCBhCisgKiBwb3NpdGl2ZSB2YWx1ZSBpZiB0aGUgcmVzZXQgbGluZSBpcyBhc3NlcnRlZCwgb3IgemVybyBpZiB0aGUgcmVzZXQKKyAqIGxpbmUgaXMgbm90IGFzc2VydGVkLgorICogQHJzdGM6IHJlc2V0IGNvbnRyb2xsZXIKKyAqLworaW50IHJlc2V0X2NvbnRyb2xfc3RhdHVzKHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKQoreworCWlmIChyc3RjLT5yY2Rldi0+b3BzLT5zdGF0dXMpCisJCXJldHVybiByc3RjLT5yY2Rldi0+b3BzLT5zdGF0dXMocnN0Yy0+cmNkZXYsIHJzdGMtPmlkKTsKKworCXJldHVybiAtRU5PU1lTOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVzZXRfY29udHJvbF9zdGF0dXMpOworCisvKioKICAqIG9mX3Jlc2V0X2NvbnRyb2xfZ2V0IC0gTG9va3VwIGFuZCBvYnRhaW4gYSByZWZlcmVuY2UgdG8gYSByZXNldCBjb250cm9sbGVyLgogICogQG5vZGU6IGRldmljZSB0byBiZSByZXNldCBieSB0aGUgY29udHJvbGxlcgogICogQGlkOiByZXNldCBsaW5lIG5hbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVzZXQvcmVzZXQtYmVybGluLmMgYi9kcml2ZXJzL3Jlc2V0L3Jlc2V0LWJlcmxpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YjQ4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Jlc2V0L3Jlc2V0LWJlcmxpbi5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1hcnZlbGwgVGVjaG5vbG9neSBHcm91cCBMdGQuCisgKgorICogQW50b2luZSBUZW5hcnQgPGFudG9pbmUudGVuYXJ0QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqIFNlYmFzdGlhbiBIZXNzZWxiYXJ0aCA8c2ViYXN0aWFuLmhlc3NlbGJhcnRoQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQtY29udHJvbGxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEJFUkxJTl9NQVhfUkVTRVRTCTMyCisKKyNkZWZpbmUgdG9fYmVybGluX3Jlc2V0X3ByaXYocCkJCVwKKwljb250YWluZXJfb2YoKHApLCBzdHJ1Y3QgYmVybGluX3Jlc2V0X3ByaXYsIHJjZGV2KQorCitzdHJ1Y3QgYmVybGluX3Jlc2V0X3ByaXYgeworCXZvaWQgX19pb21lbQkJCSpiYXNlOworCXVuc2lnbmVkIGludAkJCXNpemU7CisJc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2CXJjZGV2OworfTsKKworc3RhdGljIGludCBiZXJsaW5fcmVzZXRfcmVzZXQoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaWQpCit7CisJc3RydWN0IGJlcmxpbl9yZXNldF9wcml2ICpwcml2ID0gdG9fYmVybGluX3Jlc2V0X3ByaXYocmNkZXYpOworCWludCBvZmZzZXQgPSBpZCA+PiA4OworCWludCBtYXNrID0gQklUKGlkICYgMHgxZik7CisKKwl3cml0ZWwobWFzaywgcHJpdi0+YmFzZSArIG9mZnNldCk7CisKKwkvKiBsZXQgdGhlIHJlc2V0IGJlIGVmZmVjdGl2ZSAqLworCXVkZWxheSgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZXNldF9jb250cm9sX29wcyBiZXJsaW5fcmVzZXRfb3BzID0geworCS5yZXNldAk9IGJlcmxpbl9yZXNldF9yZXNldCwKK307CisKK3N0YXRpYyBpbnQgYmVybGluX3Jlc2V0X3hsYXRlKHN0cnVjdCByZXNldF9jb250cm9sbGVyX2RldiAqcmNkZXYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpyZXNldF9zcGVjKQoreworCXN0cnVjdCBiZXJsaW5fcmVzZXRfcHJpdiAqcHJpdiA9IHRvX2Jlcmxpbl9yZXNldF9wcml2KHJjZGV2KTsKKwl1bnNpZ25lZCBvZmZzZXQsIGJpdDsKKworCWlmIChXQVJOX09OKHJlc2V0X3NwZWMtPmFyZ3NfY291bnQgIT0gcmNkZXYtPm9mX3Jlc2V0X25fY2VsbHMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9mZnNldCA9IHJlc2V0X3NwZWMtPmFyZ3NbMF07CisJYml0ID0gcmVzZXRfc3BlYy0+YXJnc1sxXTsKKworCWlmIChvZmZzZXQgPj0gcHJpdi0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYml0ID49IEJFUkxJTl9NQVhfUkVTRVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAob2Zmc2V0IDw8IDgpIHwgYml0OworfQorCitzdGF0aWMgaW50IF9fYmVybGluX3Jlc2V0X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgYmVybGluX3Jlc2V0X3ByaXYgKnByaXY7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJc2l6ZSA9IHJlc291cmNlX3NpemUoJnJlcyk7CisJcHJpdi0+YmFzZSA9IGlvcmVtYXAocmVzLnN0YXJ0LCBzaXplKTsKKwlpZiAoIXByaXYtPmJhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCXByaXYtPnNpemUgPSBzaXplOworCisJcHJpdi0+cmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKKwlwcml2LT5yY2Rldi5vcHMgPSAmYmVybGluX3Jlc2V0X29wczsKKwlwcml2LT5yY2Rldi5vZl9ub2RlID0gbnA7CisJcHJpdi0+cmNkZXYub2ZfcmVzZXRfbl9jZWxscyA9IDI7CisJcHJpdi0+cmNkZXYub2ZfeGxhdGUgPSBiZXJsaW5fcmVzZXRfeGxhdGU7CisKKwlyZXNldF9jb250cm9sbGVyX3JlZ2lzdGVyKCZwcml2LT5yY2Rldik7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWtmcmVlKHByaXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJlcmxpbl9yZXNldF9vZl9tYXRjaFtdIF9faW5pdGNvbnN0ID0geworCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLWNoaXAtY3RybCIgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMmNkLWNoaXAtY3RybCIgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMnEtY2hpcC1jdHJsIiB9LAorCXsgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJlcmxpbl9yZXNldF9pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgcmV0OworCisJZm9yX2VhY2hfbWF0Y2hpbmdfbm9kZShucCwgYmVybGluX3Jlc2V0X29mX21hdGNoKSB7CisJCXJldCA9IF9fYmVybGluX3Jlc2V0X2luaXQobnApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoYmVybGluX3Jlc2V0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9yZXNldC1zb2NmcGdhLmMgYi9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXNvY2ZwZ2EuYwppbmRleCA3OWMzMmNhLi40MDU4MjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXNvY2ZwZ2EuYworKysgYi9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXNvY2ZwZ2EuYwpAQCAtNzYsOSArNzYsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzb2NmcGdhX3Jlc2V0X3N0YXR1cyhzdHJ1Y3QgcmVzZXRfY29udHJvbGxlcl9kZXYgKnJjZGV2LAorCQkJCXVuc2lnbmVkIGxvbmcgaWQpCit7CisJc3RydWN0IHNvY2ZwZ2FfcmVzZXRfZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZihyY2RldiwKKwkJCQkJCXN0cnVjdCBzb2NmcGdhX3Jlc2V0X2RhdGEsIHJjZGV2KTsKKwlpbnQgYmFuayA9IGlkIC8gQklUU19QRVJfTE9ORzsKKwlpbnQgb2Zmc2V0ID0gaWQgJSBCSVRTX1BFUl9MT05HOworCXUzMiByZWc7CisKKwlyZWcgPSByZWFkbChkYXRhLT5tZW1iYXNlICsgT0ZGU0VUX01PRFJTVCArIChiYW5rICogTlJfQkFOS1MpKTsKKworCXJldHVybiAhKHJlZyAmIEJJVChvZmZzZXQpKTsKK30KKwogc3RhdGljIHN0cnVjdCByZXNldF9jb250cm9sX29wcyBzb2NmcGdhX3Jlc2V0X29wcyA9IHsKIAkuYXNzZXJ0CQk9IHNvY2ZwZ2FfcmVzZXRfYXNzZXJ0LAogCS5kZWFzc2VydAk9IHNvY2ZwZ2FfcmVzZXRfZGVhc3NlcnQsCisJLnN0YXR1cwkJPSBzb2NmcGdhX3Jlc2V0X3N0YXR1cywKIH07CiAKIHN0YXRpYyBpbnQgc29jZnBnYV9yZXNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9zdGkvS2NvbmZpZyBiL2RyaXZlcnMvcmVzZXQvc3RpL0tjb25maWcKaW5kZXggODhkMmQwMy4uZjhjMTVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZXNldC9zdGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3Jlc2V0L3N0aS9LY29uZmlnCkBAIC0xMiw0ICsxMiw4IEBACiAJYm9vbAogCXNlbGVjdCBTVElfUkVTRVRfU1lTQ0ZHCiAKK2NvbmZpZyBTVElINDA3X1JFU0VUCisJYm9vbAorCXNlbGVjdCBTVElfUkVTRVRfU1lTQ0ZHCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jlc2V0L3N0aS9NYWtlZmlsZSBiL2RyaXZlcnMvcmVzZXQvc3RpL01ha2VmaWxlCmluZGV4IGJlMWM5NzYuLmRjODVkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVzZXQvc3RpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmVzZXQvc3RpL01ha2VmaWxlCkBAIC0yLDMgKzIsNCBAQAogCiBvYmotJChDT05GSUdfU1RJSDQxNV9SRVNFVCkgKz0gcmVzZXQtc3RpaDQxNS5vCiBvYmotJChDT05GSUdfU1RJSDQxNl9SRVNFVCkgKz0gcmVzZXQtc3RpaDQxNi5vCitvYmotJChDT05GSUdfU1RJSDQwN19SRVNFVCkgKz0gcmVzZXQtc3RpaDQwNy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jlc2V0L3N0aS9yZXNldC1zdGloNDA3LmMgYi9kcml2ZXJzL3Jlc2V0L3N0aS9yZXNldC1zdGloNDA3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzZGI1ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Jlc2V0L3N0aS9yZXNldC1zdGloNDA3LmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU1RNaWNyb2VsZWN0cm9uaWNzIChSJkQpIExpbWl0ZWQKKyAqIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcmVzZXQtY29udHJvbGxlci9zdGloNDA3LXJlc2V0cy5oPgorI2luY2x1ZGUgInJlc2V0LXN5c2NmZy5oIgorCisvKiBTVGlINDA3IFBlcmlwaGVyYWwgcG93ZXJkb3duIGRlZmluaXRpb25zLiAqLworc3RhdGljIGNvbnN0IGNoYXIgc3RpaDQwN19jb3JlW10gPSAic3Qsc3RpaDQwNy1jb3JlLXN5c2NmZyI7CitzdGF0aWMgY29uc3QgY2hhciBzdGloNDA3X3NiY19yZWdbXSA9ICJzdCxzdGloNDA3LXNiYy1yZWctc3lzY2ZnIjsKK3N0YXRpYyBjb25zdCBjaGFyIHN0aWg0MDdfbHBtW10gPSAic3Qsc3RpaDQwNy1scG0tc3lzY2ZnIjsKKworI2RlZmluZSBTVElINDA3X1BETl8wKF9iaXQpIFwKKwlfU1lTQ0ZHX1JTVF9DSChzdGloNDA3X2NvcmUsIFNZU0NGR181MDAwLCBfYml0LCBTWVNTVEFUXzU1MDAsIF9iaXQpCisjZGVmaW5lIFNUSUg0MDdfUEROXzEoX2JpdCkgXAorCV9TWVNDRkdfUlNUX0NIKHN0aWg0MDdfY29yZSwgU1lTQ0ZHXzUwMDEsIF9iaXQsIFNZU1NUQVRfNTUwMSwgX2JpdCkKKyNkZWZpbmUgU1RJSDQwN19QRE5fRVRIKF9iaXQsIF9zdGF0KSBcCisJX1NZU0NGR19SU1RfQ0goc3RpaDQwN19zYmNfcmVnLCBTWVNDRkdfNDAzMiwgX2JpdCwgU1lTU1RBVF80NTIwLCBfc3RhdCkKKworLyogUG93ZXJkb3duIHJlcXVlc3RzIGNvbnRyb2wgMCAqLworI2RlZmluZSBTWVNDRkdfNTAwMAkweDAKKyNkZWZpbmUgU1lTU1RBVF81NTAwCTB4N2QwCisvKiBQb3dlcmRvd24gcmVxdWVzdHMgY29udHJvbCAxIChIaWdoIFNwZWVkIExpbmtzKSAqLworI2RlZmluZSBTWVNDRkdfNTAwMQkweDQKKyNkZWZpbmUgU1lTU1RBVF81NTAxCTB4N2Q0CisKKy8qIEV0aGVybmV0IHBvd2VyZG93bi9zdGF0dXMvcmVzZXQgKi8KKyNkZWZpbmUgU1lTQ0ZHXzQwMzIJMHg4MAorI2RlZmluZSBTWVNTVEFUXzQ1MjAJMHg4MjAKKyNkZWZpbmUgU1lTQ0ZHXzQwMDIJMHg4CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2ZnX3Jlc2V0X2NoYW5uZWxfZGF0YSBzdGloNDA3X3Bvd2VyZG93bnNbXSA9IHsKKwlbU1RJSDQwN19FTUlTU19QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMCgxKSwKKwlbU1RJSDQwN19OQU5EX1BPV0VSRE9XTl0gPSBTVElINDA3X1BETl8wKDApLAorCVtTVElINDA3X1VTQjNfUE9XRVJET1dOXSA9IFNUSUg0MDdfUEROXzEoNiksCisJW1NUSUg0MDdfVVNCMl9QT1JUMV9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSg1KSwKKwlbU1RJSDQwN19VU0IyX1BPUlQwX1BPV0VSRE9XTl0gPSBTVElINDA3X1BETl8xKDQpLAorCVtTVElINDA3X1BDSUUxX1BPV0VSRE9XTl0gPSBTVElINDA3X1BETl8xKDMpLAorCVtTVElINDA3X1BDSUUwX1BPV0VSRE9XTl0gPSBTVElINDA3X1BETl8xKDIpLAorCVtTVElINDA3X1NBVEExX1BPV0VSRE9XTl0gPSBTVElINDA3X1BETl8xKDEpLAorCVtTVElINDA3X1NBVEEwX1BPV0VSRE9XTl0gPSBTVElINDA3X1BETl8xKDApLAorCVtTVElINDA3X0VUSDFfUE9XRVJET1dOXSA9IFNUSUg0MDdfUEROX0VUSCgwLCAyKSwKK307CisKKy8qIFJlc2V0IEdlbmVyYXRvciBjb250cm9sIDAvMSAqLworI2RlZmluZSBTWVNDRkdfNTEzMQkweDIwYworI2RlZmluZSBTWVNDRkdfNTEzMgkweDIxMAorCisjZGVmaW5lIExQTV9TWVNDRkdfMQkweDQJLyogU29mdHJlc2V0IElSQiAmIFNCQyBVQVJUICovCisKKyNkZWZpbmUgU1RJSDQwN19TUlNUX0NPUkUoX3JlZywgX2JpdCkgXAorCV9TWVNDRkdfUlNUX0NIX05PX0FDSyhzdGloNDA3X2NvcmUsIF9yZWcsIF9iaXQpCisKKyNkZWZpbmUgU1RJSDQwN19TUlNUX1NCQyhfcmVnLCBfYml0KSBcCisJX1NZU0NGR19SU1RfQ0hfTk9fQUNLKHN0aWg0MDdfc2JjX3JlZywgX3JlZywgX2JpdCkKKworI2RlZmluZSBTVElINDA3X1NSU1RfTFBNKF9yZWcsIF9iaXQpIFwKKwlfU1lTQ0ZHX1JTVF9DSF9OT19BQ0soc3RpaDQwN19scG0sIF9yZWcsIF9iaXQpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2ZnX3Jlc2V0X2NoYW5uZWxfZGF0YSBzdGloNDA3X3NvZnRyZXNldHNbXSA9IHsKKwlbU1RJSDQwN19FVEgxX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfU0JDKFNZU0NGR180MDAyLCA0KSwKKwlbU1RJSDQwN19NTUMxX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgMyksCisJW1NUSUg0MDdfVVNCMl9QT1JUMF9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDI4KSwKKwlbU1RJSDQwN19VU0IyX1BPUlQxX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgMjkpLAorCVtTVElINDA3X1BJQ09QSFlfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCAzMCksCisJW1NUSUg0MDdfSVJCX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfTFBNKExQTV9TWVNDRkdfMSwgNiksCisJW1NUSUg0MDdfUENJRTBfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCA2KSwKKwlbU1RJSDQwN19QQ0lFMV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDE1KSwKKwlbU1RJSDQwN19TQVRBMF9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDcpLAorCVtTVElINDA3X1NBVEExX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgMTYpLAorCVtTVElINDA3X01JUEhZMF9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDQpLAorCVtTVElINDA3X01JUEhZMV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDEzKSwKKwlbU1RJSDQwN19NSVBIWTJfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCAyMiksCisJW1NUSUg0MDdfU0FUQTBfUFdSX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgNSksCisJW1NUSUg0MDdfU0FUQTFfUFdSX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgMTQpLAorCVtTVElINDA3X0RFTFRBX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMSwgMyksCisJW1NUSUg0MDdfQkxJVFRFUl9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDEwKSwKKwlbU1RJSDQwN19IRFRWT1VUX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMSwgMTEpLAorCVtTVElINDA3X0hEUVZEUF9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDEyKSwKKwlbU1RJSDQwN19WRFBfQVVYX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMSwgMTQpLAorCVtTVElINDA3X0NPTVBPX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMSwgMTUpLAorCVtTVElINDA3X0hETUlfVFhfUEhZX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMSwgMjEpLAorCVtTVElINDA3X0pQRUdfREVDX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMSwgMjMpLAorCVtTVElINDA3X1ZQOF9ERUNfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMxLCAyNCksCisJW1NUSUg0MDdfR1BVX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMSwgMzApLAorCVtTVElINDA3X0hWQV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDApLAorCVtTVElINDA3X0VSQU1fSFZBX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgMSksCisJW1NUSUg0MDdfTFBNX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfU0JDKFNZU0NGR180MDAyLCAyKSwKKwlbU1RJSDQwN19LRVlTQ0FOX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfTFBNKExQTV9TWVNDRkdfMSwgOCksCit9OworCisvKiBQaWNvUEhZIHJlc2V0L2NvbnRyb2wgKi8KKyNkZWZpbmUgU1lTQ0ZHXzUwNjEJMHgwZjQKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjZmdfcmVzZXRfY2hhbm5lbF9kYXRhIHN0aWg0MDdfcGljb3BoeXJlc2V0c1tdID0geworCVtTVElINDA3X1BJQ09QSFkwX1JFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MDYxLCA1KSwKKwlbU1RJSDQwN19QSUNPUEhZMV9SRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTA2MSwgNiksCisJW1NUSUg0MDdfUElDT1BIWTJfUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUwNjEsIDcpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjZmdfcmVzZXRfY29udHJvbGxlcl9kYXRhIHN0aWg0MDdfcG93ZXJkb3duX2NvbnRyb2xsZXIgPSB7CisJLndhaXRfZm9yX2FjayA9IHRydWUsCisJLm5yX2NoYW5uZWxzID0gQVJSQVlfU0laRShzdGloNDA3X3Bvd2VyZG93bnMpLAorCS5jaGFubmVscyA9IHN0aWg0MDdfcG93ZXJkb3ducywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2ZnX3Jlc2V0X2NvbnRyb2xsZXJfZGF0YSBzdGloNDA3X3NvZnRyZXNldF9jb250cm9sbGVyID0geworCS53YWl0X2Zvcl9hY2sgPSBmYWxzZSwKKwkuYWN0aXZlX2xvdyA9IHRydWUsCisJLm5yX2NoYW5uZWxzID0gQVJSQVlfU0laRShzdGloNDA3X3NvZnRyZXNldHMpLAorCS5jaGFubmVscyA9IHN0aWg0MDdfc29mdHJlc2V0cywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2ZnX3Jlc2V0X2NvbnRyb2xsZXJfZGF0YSBzdGloNDA3X3BpY29waHlyZXNldF9jb250cm9sbGVyID0geworCS53YWl0X2Zvcl9hY2sgPSBmYWxzZSwKKwkubnJfY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHN0aWg0MDdfcGljb3BoeXJlc2V0cyksCisJLmNoYW5uZWxzID0gc3RpaDQwN19waWNvcGh5cmVzZXRzLAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3RpaDQwN19yZXNldF9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1wb3dlcmRvd24iLAorCQkuZGF0YSA9ICZzdGloNDA3X3Bvd2VyZG93bl9jb250cm9sbGVyLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXNvZnRyZXNldCIsCisJCS5kYXRhID0gJnN0aWg0MDdfc29mdHJlc2V0X2NvbnRyb2xsZXIsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gInN0LHN0aWg0MDctcGljb3BoeXJlc2V0IiwKKwkJLmRhdGEgPSAmc3RpaDQwN19waWNvcGh5cmVzZXRfY29udHJvbGxlciwKKwl9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN0aWg0MDdfcmVzZXRfZHJpdmVyID0geworCS5wcm9iZSA9IHN5c2NmZ19yZXNldF9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJyZXNldC1zdGloNDA3IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gc3RpaDQwN19yZXNldF9tYXRjaCwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3RpaDQwN19yZXNldF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc3RpaDQwN19yZXNldF9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHN0aWg0MDdfcmVzZXRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCA2ZGQxMmRkLi5iNjgyNjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTExMDksMzYgKzExMDksNDIgQEAKIAkgIHRoaXMgaXMgcG93ZXJlZCBieSB0aGUgYmFja3VwIHBvd2VyIHN1cHBseS4KIAogY29uZmlnIFJUQ19EUlZfQVQ5MVNBTTkKLQl0cmlzdGF0ZSAiQVQ5MVNBTTl4L0FUOTFDQVA5IFJUVCBhcyBSVEMiCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIShBUkNIX0FUOTFSTTkyMDAgfHwgQVJDSF9BVDkxWDQwKQorCXRyaXN0YXRlICJBVDkxU0FNOSBSVFQgYXMgUlRDIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxCisJc2VsZWN0IE1GRF9TWVNDT04KIAloZWxwCi0JICBSVEMgZHJpdmVyIGZvciB0aGUgQXRtZWwgQVQ5MVNBTTl4IGFuZCBBVDkxQ0FQOSBpbnRlcm5hbCBSVFQKLQkgIChSZWFsIFRpbWUgVGltZXIpLiBUaGVzZSB0aW1lcnMgYXJlIHBvd2VyZWQgYnkgdGhlIGJhY2t1cCBwb3dlcgotCSAgc3VwcGx5IChzdWNoIGFzIGEgc21hbGwgY29pbiBjZWxsIGJhdHRlcnkpLCBidXQgZG8gbm90IG5lZWQgdG8KLQkgIGJlIHVzZWQgYXMgUlRDcy4KLQotCSAgKE9uIEFUOTFTQU05cmwgYW5kIEFUOTFTQU05RzQ1IGNoaXBzIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUKLQkgIGRlZGljYXRlZCBSVEMgbW9kdWxlIGFuZCBsZWF2ZSB0aGUgUlRUIGF2YWlsYWJsZSBmb3Igb3RoZXIgdXNlcy4pCisJICBTb21lIEFUOTFTQU05IFNvQ3MgcHJvdmlkZSBhbiBSVFQgKFJlYWwgVGltZSBUaW1lcikgYmxvY2sgd2hpY2gKKwkgIGNhbiBiZSB1c2VkIGFzIGFuIFJUQyB0aGFua3MgdG8gdGhlIGJhY2t1cCBwb3dlciBzdXBwbHkgKGUuZy4gYQorCSAgc21hbGwgY29pbiBjZWxsIGJhdHRlcnkpIHdoaWNoIGtlZXBzIHRoaXMgYmxvY2sgYW5kIHRoZSBHUEJSCisJICAoR2VuZXJhbCBQdXJwb3NlIEJhY2t1cCBSZWdpc3RlcnMpIGJsb2NrIHBvd2VyZWQgd2hlbiB0aGUgZGV2aWNlCisJICBpcyBzaHV0ZG93bi4KKwkgIFNvbWUgQVQ5MVNBTTkgU29DcyBwcm92aWRlIGEgcmVhbCBSVEMgYmxvY2ssIG9uIHRob3NlIG9uZXMgeW91J2QKKwkgIHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSByZWFsIFJUQyBibG9jayBpbnN0ZWFkIG9mIHRoZSAiUlRUIGFzIGFuCisJICBSVEMiIGRyaXZlci4KIAogY29uZmlnIFJUQ19EUlZfQVQ5MVNBTTlfUlRUCiAJaW50CiAJcmFuZ2UgMCAxCiAJZGVmYXVsdCAwCi0JcHJvbXB0ICJSVFQgbW9kdWxlIE51bWJlciIgaWYgQVJDSF9BVDkxU0FNOTI2MwogCWRlcGVuZHMgb24gUlRDX0RSVl9BVDkxU0FNOQogCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgZm9yIGxlZ2FjeSBib2FyZCBzdXBwb3J0IGFuZAorCSAgd29uJ3QgYmUgdXNlZCB3aGVuIGJvb3RpbmcgYSBEVCBib2FyZC4KKwogCSAgTW9yZSB0aGFuIG9uZSBSVFQgbW9kdWxlIGlzIGF2YWlsYWJsZS4gWW91IGNhbiBjaG9vc2Ugd2hpY2gKIAkgIG9uZSB3aWxsIGJlIHVzZWQgYXMgYW4gUlRDLiBUaGUgZGVmYXVsdCBvZiB6ZXJvIGlzIG5vcm1hbGx5CiAJICBPSyB0byB1c2UsIHRob3VnaCBzb21lIHN5c3RlbXMgdXNlIHRoYXQgZm9yIG5vbi1SVEMgcHVycG9zZXMuCiAKIGNvbmZpZyBSVENfRFJWX0FUOTFTQU05X0dQQlIKIAlpbnQKLQlyYW5nZSAwIDMgaWYgIUFSQ0hfQVQ5MVNBTTkyNjMKLQlyYW5nZSAwIDE1IGlmIEFSQ0hfQVQ5MVNBTTkyNjMKKwlyYW5nZSAwIDMKIAlkZWZhdWx0IDAKIAlwcm9tcHQgIkJhY2t1cCBSZWdpc3RlciBOdW1iZXIiCiAJZGVwZW5kcyBvbiBSVENfRFJWX0FUOTFTQU05CiAJaGVscAorCSAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBmb3IgbGVnYWN5IGJvYXJkIHN1cHBvcnQgYW5kCisJICB3b24ndCBiZSB1c2VkIHdoZW4gYm9vdGluZyBhIERUIGJvYXJkLgorCiAJICBUaGUgUlRDIGRyaXZlciBuZWVkcyB0byB1c2Ugb25lIG9mIHRoZSBHZW5lcmFsIFB1cnBvc2UgQmFja3VwCiAJICBSZWdpc3RlcnMgKEdQQlJzKSBhcyB3ZWxsIGFzIHRoZSBSVFQuIFlvdSBjYW4gY2hvb3NlIHdoaWNoIG9uZQogCSAgd2lsbCBiZSB1c2VkLiBUaGUgZGVmYXVsdCBvZiB6ZXJvIGlzIG5vcm1hbGx5IE9LIHRvIHVzZSwgYnV0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9jbGFzcy5jIGIvZHJpdmVycy9ydGMvY2xhc3MuYwppbmRleCAzOGUyNmJlLi40NzJhNWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9jbGFzcy5jCisrKyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKQEAgLTQ1LDE0ICs0NSwxNCBAQAogICogc3lzdGVtJ3Mgd2FsbCBjbG9jazsgcmVzdG9yZSBpdCBvbiByZXN1bWUoKS4KICAqLwogCi1zdGF0aWMgc3RydWN0IHRpbWVzcGVjIG9sZF9ydGMsIG9sZF9zeXN0ZW0sIG9sZF9kZWx0YTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWM2NCBvbGRfcnRjLCBvbGRfc3lzdGVtLCBvbGRfZGVsdGE7CiAKIAogc3RhdGljIGludCBydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YyA9IHRvX3J0Y19kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcnRjX3RpbWUJCXRtOwotCXN0cnVjdCB0aW1lc3BlYwkJZGVsdGEsIGRlbHRhX2RlbHRhOworCXN0cnVjdCB0aW1lc3BlYzY0CWRlbHRhLCBkZWx0YV9kZWx0YTsKIAlpbnQgZXJyOwogCiAJaWYgKGhhc19wZXJzaXN0ZW50X2Nsb2NrKCkpCkBAIC02OCw4ICs2OCw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWdldG5zdGltZW9mZGF5KCZvbGRfc3lzdGVtKTsKLQlydGNfdG1fdG9fdGltZSgmdG0sICZvbGRfcnRjLnR2X3NlYyk7CisJZ2V0bnN0aW1lb2ZkYXk2NCgmb2xkX3N5c3RlbSk7CisJb2xkX3J0Yy50dl9zZWMgPSBydGNfdG1fdG9fdGltZTY0KCZ0bSk7CiAKIAogCS8qCkBAIC03OCw4ICs3OCw4IEBACiAJICogdHJ5IHRvIGNvbXBlbnNhdGUgc28gdGhlIGRpZmZlcmVuY2UgaW4gc3lzdGVtIHRpbWUKIAkgKiBhbmQgcnRjIHRpbWUgc3RheXMgY2xvc2UgdG8gY29uc3RhbnQuCiAJICovCi0JZGVsdGEgPSB0aW1lc3BlY19zdWIob2xkX3N5c3RlbSwgb2xkX3J0Yyk7Ci0JZGVsdGFfZGVsdGEgPSB0aW1lc3BlY19zdWIoZGVsdGEsIG9sZF9kZWx0YSk7CisJZGVsdGEgPSB0aW1lc3BlYzY0X3N1YihvbGRfc3lzdGVtLCBvbGRfcnRjKTsKKwlkZWx0YV9kZWx0YSA9IHRpbWVzcGVjNjRfc3ViKGRlbHRhLCBvbGRfZGVsdGEpOwogCWlmIChkZWx0YV9kZWx0YS50dl9zZWMgPCAtMiB8fCBkZWx0YV9kZWx0YS50dl9zZWMgPj0gMikgewogCQkvKgogCQkgKiBpZiBkZWx0YV9kZWx0YSBpcyB0b28gbGFyZ2UsIGFzc3VtZSB0aW1lIGNvcnJlY3Rpb24KQEAgLTg4LDcgKzg4LDcgQEAKIAkJb2xkX2RlbHRhID0gZGVsdGE7CiAJfSBlbHNlIHsKIAkJLyogT3RoZXJ3aXNlIHRyeSB0byBhZGp1c3Qgb2xkX3N5c3RlbSB0byBjb21wZW5zYXRlICovCi0JCW9sZF9zeXN0ZW0gPSB0aW1lc3BlY19zdWIob2xkX3N5c3RlbSwgZGVsdGFfZGVsdGEpOworCQlvbGRfc3lzdGVtID0gdGltZXNwZWM2NF9zdWIob2xkX3N5c3RlbSwgZGVsdGFfZGVsdGEpOwogCX0KIAogCXJldHVybiAwOwpAQCAtOTgsOCArOTgsOCBAQAogewogCXN0cnVjdCBydGNfZGV2aWNlCSpydGMgPSB0b19ydGNfZGV2aWNlKGRldik7CiAJc3RydWN0IHJ0Y190aW1lCQl0bTsKLQlzdHJ1Y3QgdGltZXNwZWMJCW5ld19zeXN0ZW0sIG5ld19ydGM7Ci0Jc3RydWN0IHRpbWVzcGVjCQlzbGVlcF90aW1lOworCXN0cnVjdCB0aW1lc3BlYzY0CW5ld19zeXN0ZW0sIG5ld19ydGM7CisJc3RydWN0IHRpbWVzcGVjNjQJc2xlZXBfdGltZTsKIAlpbnQgZXJyOwogCiAJaWYgKGhhc19wZXJzaXN0ZW50X2Nsb2NrKCkpCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBzbmFwc2hvdCB0aGUgY3VycmVudCBydGMgYW5kIHN5c3RlbSB0aW1lIGF0IHJlc3VtZSAqLwotCWdldG5zdGltZW9mZGF5KCZuZXdfc3lzdGVtKTsKKwlnZXRuc3RpbWVvZmRheTY0KCZuZXdfc3lzdGVtKTsKIAllcnIgPSBydGNfcmVhZF90aW1lKHJ0YywgJnRtKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcl9kZWJ1ZygiJXM6ICBmYWlsIHRvIHJlYWQgcnRjIHRpbWVcbiIsIGRldl9uYW1lKCZydGMtPmRldikpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJCXByX2RlYnVnKCIlczogIGJvZ3VzIHJlc3VtZSB0aW1lXG4iLCBkZXZfbmFtZSgmcnRjLT5kZXYpKTsKIAkJcmV0dXJuIDA7CiAJfQotCXJ0Y190bV90b190aW1lKCZ0bSwgJm5ld19ydGMudHZfc2VjKTsKKwluZXdfcnRjLnR2X3NlYyA9IHJ0Y190bV90b190aW1lNjQoJnRtKTsKIAluZXdfcnRjLnR2X25zZWMgPSAwOwogCiAJaWYgKG5ld19ydGMudHZfc2VjIDwgb2xkX3J0Yy50dl9zZWMpIHsKQEAgLTEzMCw3ICsxMzAsNyBAQAogCX0KIAogCS8qIGNhbGN1bGF0ZSB0aGUgUlRDIHRpbWUgZGVsdGEgKHNsZWVwIHRpbWUpKi8KLQlzbGVlcF90aW1lID0gdGltZXNwZWNfc3ViKG5ld19ydGMsIG9sZF9ydGMpOworCXNsZWVwX3RpbWUgPSB0aW1lc3BlYzY0X3N1YihuZXdfcnRjLCBvbGRfcnRjKTsKIAogCS8qCiAJICogU2luY2UgdGhlc2UgUlRDIHN1c3BlbmQvcmVzdW1lIGhhbmRsZXJzIGFyZSBub3QgY2FsbGVkCkBAIC0xMzksMTEgKzEzOSwxMSBAQAogCSAqIHNvIHN1YnRyYWN0IGtlcm5lbCBydW4tdGltZSBiZXR3ZWVuIHJ0Y19zdXNwZW5kIHRvIHJ0Y19yZXN1bWUKIAkgKiB0byBrZWVwIHRoaW5ncyBhY2N1cmF0ZS4KIAkgKi8KLQlzbGVlcF90aW1lID0gdGltZXNwZWNfc3ViKHNsZWVwX3RpbWUsCi0JCQl0aW1lc3BlY19zdWIobmV3X3N5c3RlbSwgb2xkX3N5c3RlbSkpOworCXNsZWVwX3RpbWUgPSB0aW1lc3BlYzY0X3N1YihzbGVlcF90aW1lLAorCQkJdGltZXNwZWM2NF9zdWIobmV3X3N5c3RlbSwgb2xkX3N5c3RlbSkpOwogCiAJaWYgKHNsZWVwX3RpbWUudHZfc2VjID49IDApCi0JCXRpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUoJnNsZWVwX3RpbWUpOworCQl0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lNjQoJnNsZWVwX3RpbWUpOwogCXJ0Y19oY3Rvc3lzX3JldCA9IDA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCmluZGV4IDU5NjM3NDMuLmFiYWMzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCkBAIC0yMSwxMCArMjEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0bWVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MV9ydHQuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKIC8qCiAgKiBUaGlzIGRyaXZlciB1c2VzIHR3byBjb25maWd1cmFibGUgaGFyZHdhcmUgcmVzb3VyY2VzIHRoYXQgbGl2ZSBpbiB0aGUKQEAgLTQ3LDYgKzQ2LDIyIEBACiAgKiByZWdpc3RlcnMgYXZhaWxhYmxlLCBsaWtld2lzZSB1c2FibGUgZm9yIG1vcmUgdGhhbiAiUlRDIiBzdXBwb3J0LgogICovCiAKKyNkZWZpbmUgQVQ5MV9SVFRfTVIJCTB4MDAJCQkvKiBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1JUVF9SVFBSRVMJCSgweGZmZmYgPDwgMCkJCS8qIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUgKi8KKyNkZWZpbmUgQVQ5MV9SVFRfQUxNSUVOCQkoMSA8PCAxNikJCS8qIEFsYXJtIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgQVQ5MV9SVFRfUlRUSU5DSUVOCSgxIDw8IDE3KQkJLyogUmVhbCBUaW1lIFRpbWVyIEluY3JlbWVudCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfUlRUX1JUVFJTVAkJKDEgPDwgMTgpCQkvKiBSZWFsIFRpbWUgVGltZXIgUmVzdGFydCAqLworCisjZGVmaW5lIEFUOTFfUlRUX0FSCQkweDA0CQkJLyogUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfUlRUX0FMTVYJCSgweGZmZmZmZmZmKQkJLyogQWxhcm0gVmFsdWUgKi8KKworI2RlZmluZSBBVDkxX1JUVF9WUgkJMHgwOAkJCS8qIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1JUVF9DUlRWCQkoMHhmZmZmZmZmZikJCS8qIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlICovCisKKyNkZWZpbmUgQVQ5MV9SVFRfU1IJCTB4MGMJCQkvKiBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfUlRUX0FMTVMJCSgxIDw8IDApCQkvKiBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzICovCisjZGVmaW5lIEFUOTFfUlRUX1JUVElOQwkJKDEgPDwgMSkJCS8qIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQgKi8KKwogLyoKICAqIFdlIHN0b3JlIEFMQVJNX0RJU0FCTEVEIGluIEFMTVYgdG8gcmVjb3JkIHRoYXQgbm8gYWxhcm0gaXMgc2V0LgogICogSXQncyBhbHNvIHRoZSByZXNldCB2YWx1ZSBmb3IgdGhhdCBmaWVsZC4KQEAgLTU4LDE5ICs3MywzMCBAQAogCXZvaWQgX19pb21lbQkJKnJ0dDsKIAlzdHJ1Y3QgcnRjX2RldmljZQkqcnRjZGV2OwogCXUzMgkJCWltcjsKLQl2b2lkIF9faW9tZW0JCSpncGJyOworCXN0cnVjdCByZWdtYXAJCSpncGJyOworCXVuc2lnbmVkIGludAkJZ3Bicl9vZmZzZXQ7CiAJaW50IAkJCWlycTsKKwlzdHJ1Y3QgY2xrCQkqc2NsazsKIH07CiAKICNkZWZpbmUgcnR0X3JlYWRsKHJ0YywgZmllbGQpIFwKLQlfX3Jhd19yZWFkbCgocnRjKS0+cnR0ICsgQVQ5MV9SVFRfICMjIGZpZWxkKQorCXJlYWRsKChydGMpLT5ydHQgKyBBVDkxX1JUVF8gIyMgZmllbGQpCiAjZGVmaW5lIHJ0dF93cml0ZWwocnRjLCBmaWVsZCwgdmFsKSBcCi0JX19yYXdfd3JpdGVsKCh2YWwpLCAocnRjKS0+cnR0ICsgQVQ5MV9SVFRfICMjIGZpZWxkKQorCXdyaXRlbCgodmFsKSwgKHJ0YyktPnJ0dCArIEFUOTFfUlRUXyAjIyBmaWVsZCkKIAotI2RlZmluZSBncGJyX3JlYWRsKHJ0YykgXAotCV9fcmF3X3JlYWRsKChydGMpLT5ncGJyKQotI2RlZmluZSBncGJyX3dyaXRlbChydGMsIHZhbCkgXAotCV9fcmF3X3dyaXRlbCgodmFsKSwgKHJ0YyktPmdwYnIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBncGJyX3JlYWRsKHN0cnVjdCBzYW05X3J0YyAqcnRjKQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwlyZWdtYXBfcmVhZChydGMtPmdwYnIsIHJ0Yy0+Z3Bicl9vZmZzZXQsICZ2YWwpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwYnJfd3JpdGVsKHN0cnVjdCBzYW05X3J0YyAqcnRjLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXJlZ21hcF93cml0ZShydGMtPmdwYnIsIHJ0Yy0+Z3Bicl9vZmZzZXQsIHZhbCk7Cit9CiAKIC8qCiAgKiBSZWFkIGN1cnJlbnQgdGltZSBhbmQgZGF0ZSBpbiBSVEMKQEAgLTI4NywyMiArMzEzLDIyIEBACiAJLmFsYXJtX2lycV9lbmFibGUgPSBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAorc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIGdwYnJfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSAzMiwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQsCit9OworCiAvKgogICogSW5pdGlhbGl6ZSBhbmQgaW5zdGFsbCBSVEMgZHJpdmVyCiAgKi8KIHN0YXRpYyBpbnQgYXQ5MV9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UJKnIsICpyX2dwYnI7CisJc3RydWN0IHJlc291cmNlCSpyOwogCXN0cnVjdCBzYW05X3J0YwkqcnRjOwogCWludAkJcmV0LCBpcnE7CiAJdTMyCQltcjsKLQotCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJfZ3BiciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JaWYgKCFyIHx8ICFyX2dwYnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibmVlZCAyIHJlc3NvdXJjZXNcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJdW5zaWduZWQgaW50CXNjbGtfcmF0ZTsKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApIHsKQEAgLTMyMSwyNCArMzQ3LDY2IEBACiAJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7Ci0JcnRjLT5ydHQgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwotCWlmICghcnRjLT5ydHQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCByZWdpc3RlcnMsIGFib3J0aW5nLlxuIik7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlydGMtPnJ0dCA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByKTsKKwlpZiAoSVNfRVJSKHJ0Yy0+cnR0KSkKKwkJcmV0dXJuIFBUUl9FUlIocnRjLT5ydHQpOworCisJaWYgKCFwZGV2LT5kZXYub2Zfbm9kZSkgeworCQkvKgorCQkgKiBUT0RPOiBSZW1vdmUgdGhpcyBjb2RlIGNodW5rIHdoZW4gcmVtb3Zpbmcgbm9uIERUIGJvYXJkCisJCSAqIHN1cHBvcnQuIFJlbWVtYmVyIHRvIHJlbW92ZSB0aGUgZ3Bicl9yZWdtYXBfY29uZmlnCisJCSAqIHZhcmlhYmxlIHRvby4KKwkJICovCisJCXZvaWQgX19pb21lbSAqZ3BicjsKKworCQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwkJZ3BiciA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByKTsKKwkJaWYgKElTX0VSUihncGJyKSkKKwkJCXJldHVybiBQVFJfRVJSKGdwYnIpOworCisJCXJ0Yy0+Z3BiciA9IHJlZ21hcF9pbml0X21taW8oTlVMTCwgZ3BiciwKKwkJCQkJICAgICAmZ3Bicl9yZWdtYXBfY29uZmlnKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7CisKKwkJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2ZpeGVkX2FyZ3MocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCQkiYXRtZWwscnR0LXJ0Yy10aW1lLXJlZyIsIDEsIDAsCisJCQkJCQkmYXJncyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJ0Yy0+Z3BiciA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChhcmdzLm5wKTsKKwkJcnRjLT5ncGJyX29mZnNldCA9IGFyZ3MuYXJnc1swXTsKKwl9CisKKwlpZiAoSVNfRVJSKHJ0Yy0+Z3BicikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJldHJpZXZlIGdwYnIgcmVnbWFwLCBhYm9ydGluZy5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlydGMtPmdwYnIgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcl9ncGJyLT5zdGFydCwKLQkJCQlyZXNvdXJjZV9zaXplKHJfZ3BicikpOwotCWlmICghcnRjLT5ncGJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgZ3BiciByZWdpc3RlcnMsIGFib3J0aW5nLlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCXJ0Yy0+c2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHJ0Yy0+c2NsaykpCisJCXJldHVybiBQVFJfRVJSKHJ0Yy0+c2Nsayk7CisKKwlzY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocnRjLT5zY2xrKTsKKwlpZiAoIXNjbGtfcmF0ZSB8fCBzY2xrX3JhdGUgPiBBVDkxX1JUVF9SVFBSRVMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBzbG93IGNsb2NrIHJhdGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocnRjLT5zY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBlbmFibGUgc2xvdyBjbG9ja1xuIik7CisJCXJldHVybiByZXQ7CiAJfQogCiAJbXIgPSBydHRfcmVhZGwocnRjLCBNUik7CiAKIAkvKiB1bmxlc3MgUlRUIGlzIGNvdW50aW5nIGF0IDEgSHosIHJlLWluaXRpYWxpemUgaXQgKi8KLQlpZiAoKG1yICYgQVQ5MV9SVFRfUlRQUkVTKSAhPSBBVDkxX1NMT1dfQ0xPQ0spIHsKLQkJbXIgPSBBVDkxX1JUVF9SVFRSU1QgfCAoQVQ5MV9TTE9XX0NMT0NLICYgQVQ5MV9SVFRfUlRQUkVTKTsKKwlpZiAoKG1yICYgQVQ5MV9SVFRfUlRQUkVTKSAhPSBzY2xrX3JhdGUpIHsKKwkJbXIgPSBBVDkxX1JUVF9SVFRSU1QgfCAoc2Nsa19yYXRlICYgQVQ5MV9SVFRfUlRQUkVTKTsKIAkJZ3Bicl93cml0ZWwocnRjLCAwKTsKIAl9CiAKQEAgLTM4Myw2ICs0NTEsOSBAQAogCS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KIAlydHRfd3JpdGVsKHJ0YywgTVIsIG1yICYgfihBVDkxX1JUVF9BTE1JRU4gfCBBVDkxX1JUVF9SVFRJTkNJRU4pKTsKIAorCWlmICghSVNfRVJSKHJ0Yy0+c2NsaykpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShydGMtPnNjbGspOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0MCw2ICs1MTEsMTQgQEAKIAogc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGF0OTFfcnRjX3BtX29wcywgYXQ5MV9ydGNfc3VzcGVuZCwgYXQ5MV9ydGNfcmVzdW1lKTsKIAorI2lmZGVmIENPTkZJR19PRgorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXQ5MV9ydGNfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC1ydHQiIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXQ5MV9ydGNfZHRfaWRzKTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdDkxX3J0Y19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGF0OTFfcnRjX3Byb2JlLAogCS5yZW1vdmUJCT0gYXQ5MV9ydGNfcmVtb3ZlLApAQCAtNDQ4LDYgKzUyNyw3IEBACiAJCS5uYW1lCT0gInJ0Yy1hdDkxc2FtOSIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkucG0JPSAmYXQ5MV9ydGNfcG1fb3BzLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoYXQ5MV9ydGNfZHRfaWRzKSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWxpYi5jIGIvZHJpdmVycy9ydGMvcnRjLWxpYi5jCmluZGV4IGM0Y2YwNTcuLmU2YmZiOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1saWIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbGliLmMKQEAgLTQ1LDE2ICs0NSwyMCBAQAogfQogRVhQT1JUX1NZTUJPTChydGNfeWVhcl9kYXlzKTsKIAorCiAvKgorICogcnRjX3RpbWVfdG9fdG02NCAtIENvbnZlcnRzIHRpbWU2NF90IHRvIHJ0Y190aW1lLgogICogQ29udmVydCBzZWNvbmRzIHNpbmNlIDAxLTAxLTE5NzAgMDA6MDA6MDAgdG8gR3JlZ29yaWFuIGRhdGUuCiAgKi8KLXZvaWQgcnRjX3RpbWVfdG9fdG0odW5zaWduZWQgbG9uZyB0aW1lLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQordm9pZCBydGNfdGltZTY0X3RvX3RtKHRpbWU2NF90IHRpbWUsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJdW5zaWduZWQgaW50IG1vbnRoLCB5ZWFyOworCXVuc2lnbmVkIGxvbmcgc2VjczsKIAlpbnQgZGF5czsKIAotCWRheXMgPSB0aW1lIC8gODY0MDA7Ci0JdGltZSAtPSAodW5zaWduZWQgaW50KSBkYXlzICogODY0MDA7CisJLyogdGltZSBtdXN0IGJlIHBvc2l0aXZlICovCisJZGF5cyA9IGRpdl9zNjQodGltZSwgODY0MDApOworCXNlY3MgPSB0aW1lIC0gKHVuc2lnbmVkIGludCkgZGF5cyAqIDg2NDAwOwogCiAJLyogZGF5IG9mIHRoZSB3ZWVrLCAxOTcwLTAxLTAxIHdhcyBhIFRodXJzZGF5ICovCiAJdG0tPnRtX3dkYXkgPSAoZGF5cyArIDQpICUgNzsKQEAgLTgxLDE0ICs4NSwxNCBAQAogCXRtLT50bV9tb24gPSBtb250aDsKIAl0bS0+dG1fbWRheSA9IGRheXMgKyAxOwogCi0JdG0tPnRtX2hvdXIgPSB0aW1lIC8gMzYwMDsKLQl0aW1lIC09IHRtLT50bV9ob3VyICogMzYwMDsKLQl0bS0+dG1fbWluID0gdGltZSAvIDYwOwotCXRtLT50bV9zZWMgPSB0aW1lIC0gdG0tPnRtX21pbiAqIDYwOworCXRtLT50bV9ob3VyID0gc2VjcyAvIDM2MDA7CisJc2VjcyAtPSB0bS0+dG1faG91ciAqIDM2MDA7CisJdG0tPnRtX21pbiA9IHNlY3MgLyA2MDsKKwl0bS0+dG1fc2VjID0gc2VjcyAtIHRtLT50bV9taW4gKiA2MDsKIAogCXRtLT50bV9pc2RzdCA9IDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHJ0Y190aW1lX3RvX3RtKTsKK0VYUE9SVF9TWU1CT0wocnRjX3RpbWU2NF90b190bSk7CiAKIC8qCiAgKiBEb2VzIHRoZSBydGNfdGltZSByZXByZXNlbnQgYSB2YWxpZCBkYXRlL3RpbWU/CkBAIC0xMDksMjQgKzExMywyMiBAQAogRVhQT1JUX1NZTUJPTChydGNfdmFsaWRfdG0pOwogCiAvKgorICogcnRjX3RtX3RvX3RpbWU2NCAtIENvbnZlcnRzIHJ0Y190aW1lIHRvIHRpbWU2NF90LgogICogQ29udmVydCBHcmVnb3JpYW4gZGF0ZSB0byBzZWNvbmRzIHNpbmNlIDAxLTAxLTE5NzAgMDA6MDA6MDAuCiAgKi8KLWludCBydGNfdG1fdG9fdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtLCB1bnNpZ25lZCBsb25nICp0aW1lKQordGltZTY0X3QgcnRjX3RtX3RvX3RpbWU2NChzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewotCSp0aW1lID0gbWt0aW1lKHRtLT50bV95ZWFyICsgMTkwMCwgdG0tPnRtX21vbiArIDEsIHRtLT50bV9tZGF5LAorCXJldHVybiBta3RpbWU2NCh0bS0+dG1feWVhciArIDE5MDAsIHRtLT50bV9tb24gKyAxLCB0bS0+dG1fbWRheSwKIAkJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjKTsKLQlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wocnRjX3RtX3RvX3RpbWUpOworRVhQT1JUX1NZTUJPTChydGNfdG1fdG9fdGltZTY0KTsKIAogLyoKICAqIENvbnZlcnQgcnRjX3RpbWUgdG8ga3RpbWUKICAqLwoga3RpbWVfdCBydGNfdG1fdG9fa3RpbWUoc3RydWN0IHJ0Y190aW1lIHRtKQogewotCXRpbWVfdCB0aW1lOwotCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUpOwotCXJldHVybiBrdGltZV9zZXQodGltZSwgMCk7CisJcmV0dXJuIGt0aW1lX3NldChydGNfdG1fdG9fdGltZTY0KCZ0bSksIDApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX3RtX3RvX2t0aW1lKTsKIApAQCAtMTM1LDE0ICsxMzcsMTQgQEAKICAqLwogc3RydWN0IHJ0Y190aW1lIHJ0Y19rdGltZV90b190bShrdGltZV90IGt0KQogewotCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKIAlzdHJ1Y3QgcnRjX3RpbWUgcmV0OwogCi0JdHMgPSBrdGltZV90b190aW1lc3BlYyhrdCk7CisJdHMgPSBrdGltZV90b190aW1lc3BlYzY0KGt0KTsKIAkvKiBSb3VuZCB1cCBhbnkgbnMgKi8KIAlpZiAodHMudHZfbnNlYykKIAkJdHMudHZfc2VjKys7Ci0JcnRjX3RpbWVfdG9fdG0odHMudHZfc2VjLCAmcmV0KTsKKwlydGNfdGltZTY0X3RvX3RtKHRzLnR2X3NlYywgJnJldCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19rdGltZV90b190bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwppbmRleCA4MDA0YjA3Li4wMWE3MzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKQEAgLTM1Myw5ICszNTMsMTEgQEAKIAlhZGFwdGVyLT5jY3dfZGV2aWNlID0gY2N3X2RldmljZTsKIAogCUlOSVRfV09SSygmYWRhcHRlci0+c3RhdF93b3JrLCBfemZjcF9zdGF0dXNfcmVhZF9zY2hlZHVsZXIpOwotCUlOSVRfV09SSygmYWRhcHRlci0+c2Nhbl93b3JrLCB6ZmNwX2ZjX3NjYW5fcG9ydHMpOworCUlOSVRfREVMQVlFRF9XT1JLKCZhZGFwdGVyLT5zY2FuX3dvcmssIHpmY3BfZmNfc2Nhbl9wb3J0cyk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5uc191cF93b3JrLCB6ZmNwX2ZjX3N5bV9uYW1lX3VwZGF0ZSk7CiAKKwlhZGFwdGVyLT5uZXh0X3BvcnRfc2NhbiA9IGppZmZpZXM7CisKIAlpZiAoemZjcF9xZGlvX3NldHVwKGFkYXB0ZXIpKQogCQlnb3RvIGZhaWxlZDsKIApAQCAtNDIwLDcgKzQyMiw3IEBACiB7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSBhZGFwdGVyLT5jY3dfZGV2aWNlOwogCi0JY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2Nhbl93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFkYXB0ZXItPnNjYW5fd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c3RhdF93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5uc191cF93b3JrKTsKIAl6ZmNwX2Rlc3Ryb3lfYWRhcHRlcl93b3JrX3F1ZXVlKGFkYXB0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKaW5kZXggZjk4NzlkNC4uNTRjN2I0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCkBAIC01Niw4ICs1NiwyMiBAQAogCXpmY3BfZXJwX3NldF9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORyk7CiAJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCiAJCQkJdGFnKTsKKworCS8qCisJICogV2Ugd2FudCB0byBzY2FuIHBvcnRzIGhlcmUsIHdpdGggc29tZSByYW5kb20gYmFja29mZiBhbmQgd2l0aG91dAorCSAqIHJhdGUgbGltaXQuIFJlY292ZXJ5IGhhcyBhbHJlYWR5IHNjaGVkdWxlZCBhIHBvcnQgc2NhbiBmb3IgdXMsCisJICogYnV0IHdpdGggYm90aCByYW5kb20gZGVsYXkgYW5kIHJhdGUgbGltaXQuIE5ldmVydGhlbGVzcyB3ZSBnZXQKKwkgKiB3aGF0IHdlIHdhbnQgaGVyZSBieSBmbHVzaGluZyB0aGUgc2NoZWR1bGVkIHdvcmsgYWZ0ZXIgc2xlZXBpbmcKKwkgKiBhbiBlcXVpdmFsZW50IHJhbmRvbSB0aW1lLgorCSAqIExldCB0aGUgcG9ydCBzY2FuIHJhbmRvbSBkZWxheSBlbGFwc2UgZmlyc3QuIElmIHJlY292ZXJ5IGZpbmlzaGVzCisJICogdXAgdG8gdGhhdCBwb2ludCBpbiB0aW1lLCB0aGF0IHdvdWxkIGJlIHBlcmZlY3QgZm9yIGJvdGggcmVjb3ZlcnkKKwkgKiBhbmQgcG9ydCBzY2FuLiBJZiBub3QsIGkuZS4gcmVjb3ZlcnkgdGFrZXMgYWdlcywgdGhlcmUgd2FzIG5vCisJICogcG9pbnQgaW4gd2FpdGluZyBhIHJhbmRvbSBkZWxheSBvbiB0b3Agb2YgdGhlIHRpbWUgY29uc3VtZWQgYnkKKwkgKiByZWNvdmVyeS4KKwkgKi8KKwltc2xlZXAoemZjcF9mY19wb3J0X3NjYW5fYmFja29mZigpKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwotCWZsdXNoX3dvcmsoJmFkYXB0ZXItPnNjYW5fd29yayk7IC8qIG9rIHRvIGNhbGwgZXZlbiBpZiBub3RoaW5nIHF1ZXVlZCAqLworCWZsdXNoX2RlbGF5ZWRfd29yaygmYWRhcHRlci0+c2Nhbl93b3JrKTsKIAogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwogCkBAIC0xNjIsMTEgKzE3NiwxOSBAQAogCWFkYXB0ZXItPnJlcV9ubyA9IDA7CiAKIAl6ZmNwX2Njd19hY3RpdmF0ZShjZGV2LCAwLCAiY2Nzb25sMSIpOwotCS8qIHNjYW4gZm9yIHJlbW90ZSBwb3J0cwotCSAgIGVpdGhlciBhdCB0aGUgZW5kIG9mIGFueSBzdWNjZXNzZnVsIGFkYXB0ZXIgcmVjb3ZlcnkKLQkgICBvciBvbmx5IGFmdGVyIHRoZSBhZGFwdGVyIHJlY292ZXJ5IGZvciBzZXR0aW5nIGEgZGV2aWNlIG9ubGluZSAqLworCisJLyoKKwkgKiBXZSB3YW50IHRvIHNjYW4gcG9ydHMgaGVyZSwgYWx3YXlzLCB3aXRoIHNvbWUgcmFuZG9tIGRlbGF5IGFuZAorCSAqIHdpdGhvdXQgcmF0ZSBsaW1pdCAtIGJhc2ljYWxseSB3aGF0IHpmY3BfY2N3X2FjdGl2YXRlKCkgaGFzCisJICogYWNoaWV2ZWQgZm9yIHVzLiBOb3QgcXVpdGUhIFRoYXQgcG9ydCBzY2FuIGRlcGVuZGVkIG9uCisJICogIW5vX2F1dG9fcG9ydF9yZXNjYW4uIFNvIGxldCdzIGNvdmVyIHRoZSBub19hdXRvX3BvcnRfcmVzY2FuCisJICogY2FzZSBoZXJlIHRvIG1ha2Ugc3VyZSBhIHBvcnQgc2NhbiBpcyBkb25lIHVuY29uZGl0aW9uYWxseS4KKwkgKiBTaW5jZSB6ZmNwX2Njd19hY3RpdmF0ZSgpIGhhcyB3YWl0ZWQgdGhlIGRlc2lyZWQgcmFuZG9tIHRpbWUsCisJICogd2UgY2FuIGltbWVkaWF0ZWx5IHNjaGVkdWxlIGFuZCBmbHVzaCBhIHBvcnQgc2NhbiBmb3IgdGhlCisJICogcmVtYWluaW5nIGNhc2VzLgorCSAqLwogCXpmY3BfZmNfaW52ZXJzZV9jb25kaXRpb25hbF9wb3J0X3NjYW4oYWRhcHRlcik7Ci0JZmx1c2hfd29yaygmYWRhcHRlci0+c2Nhbl93b3JrKTsgLyogb2sgdG8gY2FsbCBldmVuIGlmIG5vdGhpbmcgcXVldWVkICovCisJZmx1c2hfZGVsYXllZF93b3JrKCZhZGFwdGVyLT5zY2FuX3dvcmspOwogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKaW5kZXggZDkxMTczZi4uYjhlODUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCkBAIC0xODYsMTIgKzE4NiwxMyBAQAogCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKmZjX3N0YXRzOwogCXN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fcG9ydCAqc3RhdHNfcmVzZXRfZGF0YTsKIAl1bnNpZ25lZCBsb25nCQlzdGF0c19yZXNldDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJc2Nhbl93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsJc2Nhbl93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdAluc191cF93b3JrOwogCXN0cnVjdCBzZXJ2aWNlX2xldmVsCXNlcnZpY2VfbGV2ZWw7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndvcmtfcXVldWU7CiAJc3RydWN0IGRldmljZV9kbWFfcGFyYW1ldGVycyBkbWFfcGFybXM7CiAJc3RydWN0IHpmY3BfZmNfZXZlbnRzIGV2ZW50czsKKwl1bnNpZ25lZCBsb25nCQluZXh0X3BvcnRfc2NhbjsKIH07CiAKIHN0cnVjdCB6ZmNwX3BvcnQgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggYzgyZmU2NS4uMmM1ZDQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC04MjEsMTEgKzgyMSw2IEBACiAJcmV0dXJuIFpGQ1BfRVJQX0NPTlRJTlVFUzsKIH0KIAotc3RhdGljIHZvaWQgemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbGVhcnN0YXRpKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCi17Ci0JYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19ERU5JRUQsICZwb3J0LT5zdGF0dXMpOwotfQotCiBzdGF0aWMgaW50IHpmY3BfZXJwX3BvcnRfZm9yY2VkX3N0cmF0ZWd5KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGVycF9hY3Rpb24tPnBvcnQ7CkBAIC04MzMsNyArODI4LDYgQEAKIAogCXN3aXRjaCAoZXJwX2FjdGlvbi0+c3RlcCkgewogCWNhc2UgWkZDUF9FUlBfU1RFUF9VTklOSVRJQUxJWkVEOgotCQl6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X2NsZWFyc3RhdGkocG9ydCk7CiAJCWlmICgoc3RhdHVzICYgWkZDUF9TVEFUVVNfUE9SVF9QSFlTX09QRU4pICYmCiAJCSAgICAoc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pKQogCQkJcmV0dXJuIHpmY3BfZXJwX3BvcnRfZm9yY2VkX3N0cmF0ZWd5X2Nsb3NlKGVycF9hY3Rpb24pOwpAQCAtOTMzLDcgKzkyNyw2IEBACiAKIAlzd2l0Y2ggKGVycF9hY3Rpb24tPnN0ZXApIHsKIAljYXNlIFpGQ1BfRVJQX1NURVBfVU5JTklUSUFMSVpFRDoKLQkJemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbGVhcnN0YXRpKHBvcnQpOwogCQlpZiAocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikKIAkJCXJldHVybiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X2Nsb3NlKGVycF9hY3Rpb24pOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCmluZGV4IGE5YzU3MGEuLjViNTAwNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaApAQCAtODUsNiArODUsNyBAQAogZXh0ZXJuIGludCB6ZmNwX2ZjX2V4ZWNfYnNnX2pvYihzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKIGV4dGVybiBpbnQgemZjcF9mY190aW1lb3V0X2JzZ19qb2Ioc3RydWN0IGZjX2JzZ19qb2IgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3N5bV9uYW1lX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CitleHRlcm4gdW5zaWduZWQgaW50IHpmY3BfZmNfcG9ydF9zY2FuX2JhY2tvZmYodm9pZCk7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX2NvbmRpdGlvbmFsX3BvcnRfc2NhbihzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19pbnZlcnNlX2NvbmRpdGlvbmFsX3BvcnRfc2NhbihzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKaW5kZXggY2EyOGUxYy4uMjVkNDlmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxzY3NpL2ZjL2ZjX2Vscy5oPgogI2luY2x1ZGUgPHNjc2kvbGliZmMuaD4KICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgpAQCAtMzEsMTIgKzMyLDU0IEBACiBNT0RVTEVfUEFSTV9ERVNDKG5vX2F1dG9fcG9ydF9yZXNjYW4sCiAJCSAibm8gYXV0b21hdGljIHBvcnRfcmVzY2FuIChkZWZhdWx0IG9mZikiKTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBwb3J0X3NjYW5fYmFja29mZiA9IDUwMDsKK21vZHVsZV9wYXJhbShwb3J0X3NjYW5fYmFja29mZiwgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnRfc2Nhbl9iYWNrb2ZmLAorCSJ1cHBlciBsaW1pdCBvZiBwb3J0IHNjYW4gcmFuZG9tIGJhY2tvZmYgaW4gbXNlY3MgKGRlZmF1bHQgNTAwKSIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHBvcnRfc2Nhbl9yYXRlbGltaXQgPSA2MDAwMDsKK21vZHVsZV9wYXJhbShwb3J0X3NjYW5fcmF0ZWxpbWl0LCB1aW50LCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydF9zY2FuX3JhdGVsaW1pdCwKKwkibWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIHBvcnQgc2NhbnMgaW4gbXNlY3MgKGRlZmF1bHQgNjAwMDApIik7CisKK3Vuc2lnbmVkIGludCB6ZmNwX2ZjX3BvcnRfc2Nhbl9iYWNrb2ZmKHZvaWQpCit7CisJaWYgKCFwb3J0X3NjYW5fYmFja29mZikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGdldF9yYW5kb21faW50KCkgJSBwb3J0X3NjYW5fYmFja29mZjsKK30KKworc3RhdGljIHZvaWQgemZjcF9mY19wb3J0X3NjYW5fdGltZShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoreworCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwgPSBtc2Vjc190b19qaWZmaWVzKHBvcnRfc2Nhbl9yYXRlbGltaXQpOworCXVuc2lnbmVkIGxvbmcgYmFja29mZiA9IG1zZWNzX3RvX2ppZmZpZXMoemZjcF9mY19wb3J0X3NjYW5fYmFja29mZigpKTsKKworCWFkYXB0ZXItPm5leHRfcG9ydF9zY2FuID0gamlmZmllcyArIGludGVydmFsICsgYmFja29mZjsKK30KKworc3RhdGljIHZvaWQgemZjcF9mY19wb3J0X3NjYW4oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisJdW5zaWduZWQgbG9uZyBuZXh0ID0gYWRhcHRlci0+bmV4dF9wb3J0X3NjYW47CisJdW5zaWduZWQgbG9uZyBkZWxheSA9IDAsIG1heDsKKworCS8qIGRlbGF5IG9ubHkgbmVlZGVkIHdpdGhpbiB3YWl0aW5nIHBlcmlvZCAqLworCWlmICh0aW1lX2JlZm9yZShub3csIG5leHQpKSB7CisJCWRlbGF5ID0gbmV4dCAtIG5vdzsKKwkJLyogcGFyYW5vaWE6IG5ldmVyIGV2ZXIgZGVsYXkgc2NhbnMgbG9uZ2VyIHRoYW4gc3BlY2lmaWVkICovCisJCW1heCA9IG1zZWNzX3RvX2ppZmZpZXMocG9ydF9zY2FuX3JhdGVsaW1pdCArIHBvcnRfc2Nhbl9iYWNrb2ZmKTsKKwkJZGVsYXkgPSBtaW4oZGVsYXksIG1heCk7CisJfQorCisJcXVldWVfZGVsYXllZF93b3JrKGFkYXB0ZXItPndvcmtfcXVldWUsICZhZGFwdGVyLT5zY2FuX3dvcmssIGRlbGF5KTsKK30KKwogdm9pZCB6ZmNwX2ZjX2NvbmRpdGlvbmFsX3BvcnRfc2NhbihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewogCWlmIChub19hdXRvX3BvcnRfcmVzY2FuKQogCQlyZXR1cm47CiAKLQlxdWV1ZV93b3JrKGFkYXB0ZXItPndvcmtfcXVldWUsICZhZGFwdGVyLT5zY2FuX3dvcmspOworCXpmY3BfZmNfcG9ydF9zY2FuKGFkYXB0ZXIpOwogfQogCiB2b2lkIHpmY3BfZmNfaW52ZXJzZV9jb25kaXRpb25hbF9wb3J0X3NjYW4oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKQEAgLTQ0LDcgKzg3LDcgQEAKIAlpZiAoIW5vX2F1dG9fcG9ydF9yZXNjYW4pCiAJCXJldHVybjsKIAotCXF1ZXVlX3dvcmsoYWRhcHRlci0+d29ya19xdWV1ZSwgJmFkYXB0ZXItPnNjYW5fd29yayk7CisJemZjcF9mY19wb3J0X3NjYW4oYWRhcHRlcik7CiB9CiAKIC8qKgpAQCAtNjgwLDEyICs3MjMsMTUgQEAKICAqLwogdm9pZCB6ZmNwX2ZjX3NjYW5fcG9ydHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpmY3BfYWRhcHRlciwKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKGR3LCBzdHJ1Y3QgemZjcF9hZGFwdGVyLAogCQkJCQkJICAgIHNjYW5fd29yayk7CiAJaW50IHJldCwgaTsKIAlzdHJ1Y3QgemZjcF9mY19yZXEgKmZjX3JlcTsKIAlpbnQgY2hhaW4sIG1heF9lbnRyaWVzLCBidWZfbnVtLCBtYXhfYnl0ZXM7CiAKKwl6ZmNwX2ZjX3BvcnRfc2Nhbl90aW1lKGFkYXB0ZXIpOworCiAJY2hhaW4gPSBhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfRUxTX0NUX0NIQUlORURfU0JBTFM7CiAJYnVmX251bSA9IGNoYWluID8gWkZDUF9GQ19HUE5fRlRfTlVNX0JVRlMgOiAxOwogCW1heF9lbnRyaWVzID0gY2hhaW4gPyBaRkNQX0ZDX0dQTl9GVF9NQVhfRU5UIDogWkZDUF9GQ19HUE5fRlRfRU5UX1BBR0U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmgKaW5kZXggYjFkMjAyNC4uZGYyYjU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuaApAQCAtMjEyLDggKzIxMiw2IEBACiB2b2lkIHpmY3BfZmNfc2NzaV90b19mY3Aoc3RydWN0IGZjcF9jbW5kICpmY3AsIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2ksCiAJCQkgdTggdG1fZmxhZ3MpCiB7Ci0JY2hhciB0YWdbMl07Ci0KIAlpbnRfdG9fc2NzaWx1bihzY3NpLT5kZXZpY2UtPmx1biwgKHN0cnVjdCBzY3NpX2x1biAqKSAmZmNwLT5mY19sdW4pOwogCiAJaWYgKHVubGlrZWx5KHRtX2ZsYWdzKSkgewpAQCAtMjIxLDE3ICsyMTksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY3NpLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgTVNHX09SREVSRURfVEFHOgotCQkJZmNwLT5mY19wcmlfdGEgfD0gRkNQX1BUQV9PUkRFUkVEOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX1NJTVBMRV9UQUc6Ci0JCQlmY3AtPmZjX3ByaV90YSB8PSBGQ1BfUFRBX1NJTVBMRTsKLQkJCWJyZWFrOwotCQl9OwotCX0gZWxzZQotCQlmY3AtPmZjX3ByaV90YSA9IEZDUF9QVEFfU0lNUExFOworCWZjcC0+ZmNfcHJpX3RhID0gRkNQX1BUQV9TSU1QTEU7CiAKIAlpZiAoc2NzaS0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQogCQlmY3AtPmZjX2ZsYWdzIHw9IEZDUF9DRkxfUkREQVRBOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggMGZlOGQ1ZC4uMjFlYzVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC0xMzk2LDggKzEzOTYsNyBAQAogCQlwb3J0LT5oYW5kbGUgPSBoZWFkZXItPnBvcnRfaGFuZGxlOwogCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4gfAogCQkJCVpGQ1BfU1RBVFVTX1BPUlRfUEhZU19PUEVOLCAmcG9ydC0+c3RhdHVzKTsKLQkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19ERU5JRUQgfAotCQkgICAgICAgICAgICAgICAgICBaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0JPWEVELAorCQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0JPWEVELAogCQkgICAgICAgICAgICAgICAgICAmcG9ydC0+c3RhdHVzKTsKIAkJLyogY2hlY2sgd2hldGhlciBEX0lEIGhhcyBjaGFuZ2VkIGR1cmluZyBvcGVuICovCiAJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCmluZGV4IDdiMzUzNjQuLjc1ZjRiZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCkBAIC0zMiwyNSArMzIsNiBAQAogbW9kdWxlX3BhcmFtKGFsbG93X2x1bl9zY2FuLCBib29sLCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYWxsb3dfbHVuX3NjYW4sICJGb3IgTlBJViwgc2NhbiBhbmQgYXR0YWNoIGFsbCBzdG9yYWdlIExVTnMiKTsKIAotc3RhdGljIGludCB6ZmNwX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoLAotCQkJCQlpbnQgcmVhc29uKQotewotCXN3aXRjaCAocmVhc29uKSB7Ci0JY2FzZSBTQ1NJX1FERVBUSF9ERUZBVUxUOgotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgZGVwdGgpOwotCQlicmVhazsKLQljYXNlIFNDU0lfUURFUFRIX1FGVUxMOgotCQlzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwgZGVwdGgpOwotCQlicmVhazsKLQljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBkZXB0aCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCiBzdGF0aWMgdm9pZCB6ZmNwX3Njc2lfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJc3RydWN0IHpmY3Bfc2NzaV9kZXYgKnpmY3Bfc2RldiA9IHNkZXZfdG9femZjcChzZGV2KTsKQEAgLTY2LDkgKzQ3LDcgQEAKIHN0YXRpYyBpbnQgemZjcF9zY3NpX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCkKIHsKIAlpZiAoc2RwLT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZHAsIE1TR19TSU1QTEVfVEFHLCBkZWZhdWx0X2RlcHRoKTsKLQllbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkcCwgMCwgMSk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkcCwgZGVmYXVsdF9kZXB0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNyw3ICsyODYsNyBAQAogCS5zbGF2ZV9hbGxvYwkJID0gemZjcF9zY3NpX3NsYXZlX2FsbG9jLAogCS5zbGF2ZV9jb25maWd1cmUJID0gemZjcF9zY3NpX3NsYXZlX2NvbmZpZ3VyZSwKIAkuc2xhdmVfZGVzdHJveQkJID0gemZjcF9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAkgPSB6ZmNwX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLnByb2NfbmFtZQkJID0gInpmY3AiLAogCS5jYW5fcXVldWUJCSA9IDQwOTYsCiAJLnRoaXNfaWQJCSA9IC0xLApAQCAtMzIyLDYgKzMwMSw3IEBACiAJLnVzZV9jbHVzdGVyaW5nCQkgPSAxLAogCS5zaG9zdF9hdHRycwkJID0gemZjcF9zeXNmc19zaG9zdF9hdHRycywKIAkuc2Rldl9hdHRycwkJID0gemZjcF9zeXNmc19zZGV2X2F0dHJzLAorCS50cmFja19xdWV1ZV9kZXB0aAkgPSAxLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKaW5kZXggNjcyYjU3Mi4uOTZhMGJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwpAQCAtNzMsOSArNzMsNyBAQAogWkZDUF9ERUZJTkVfQVRUUih6ZmNwX3BvcnQsIHBvcnQsIGluX3JlY292ZXJ5LCAiJWRcbiIsCiAJCSAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJgogCQkgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UpICE9IDApOwotWkZDUF9ERUZJTkVfQVRUUih6ZmNwX3BvcnQsIHBvcnQsIGFjY2Vzc19kZW5pZWQsICIlZFxuIiwKLQkJIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmCi0JCSAgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19ERU5JRUQpICE9IDApOworWkZDUF9ERUZJTkVfQVRUUl9DT05TVChwb3J0LCBhY2Nlc3NfZGVuaWVkLCAiJWRcbiIsIDApOwogCiBaRkNQX0RFRklORV9BVFRSKHpmY3BfdW5pdCwgdW5pdCwgc3RhdHVzLCAiMHglMDh4XG4iLAogCQkgemZjcF91bml0X3NkZXZfc3RhdHVzKHVuaXQpKTsKQEAgLTIyMyw5ICsyMjEsMTMgQEAKIAlpZiAoIWFkYXB0ZXIpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogc3luYyB0aGUgdXNlci1zcGFjZS0gd2l0aCB0aGUga2VybmVsLWludm9jYXRpb24gb2Ygc2Nhbl93b3JrICovCi0JcXVldWVfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLCAmYWRhcHRlci0+c2Nhbl93b3JrKTsKLQlmbHVzaF93b3JrKCZhZGFwdGVyLT5zY2FuX3dvcmspOworCS8qCisJICogVXNlcnMgd2lzaCBpcyBvdXIgY29tbWFuZDogaW1tZWRpYXRlbHkgc2NoZWR1bGUgYW5kIGZsdXNoIGEKKwkgKiB3b3JrZXIgdG8gY29uZHVjdCBhIHN5bmNocm9ub3VzIHBvcnQgc2NhbiwgdGhhdCBpcywgbmVpdGhlcgorCSAqIGEgcmFuZG9tIGRlbGF5IG5vciBhIHJhdGUgbGltaXQgaXMgYXBwbGllZCBoZXJlLgorCSAqLworCXF1ZXVlX2RlbGF5ZWRfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLCAmYWRhcHRlci0+c2Nhbl93b3JrLCAwKTsKKwlmbHVzaF9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPnNjYW5fd29yayk7CiAJemZjcF9jY3dfYWRhcHRlcl9wdXQoYWRhcHRlcik7CiAKIAlyZXR1cm4gKHNzaXplX3QpIGNvdW50OwpAQCAtNDM5LDE2ICs0NDEsMTUgQEAKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsJCQkgXAogCXN0cnVjdCB6ZmNwX3Njc2lfZGV2ICp6ZmNwX3NkZXYgPSBzZGV2X3RvX3pmY3Aoc2Rldik7CQkgXAotCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSB6ZmNwX3NkZXYtPnBvcnQ7CQkJIFwKIAkJCQkJCQkJCSBcCiAJcmV0dXJuIHNwcmludGYoYnVmLCBfZm9ybWF0LCBfdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogc3RhdGljIERFVklDRV9BVFRSKF9uYW1lLCBTX0lSVUdPLCB6ZmNwX3N5c2ZzX3Njc2lfIyNfbmFtZSMjX3Nob3csIE5VTEwpOwogCiBaRkNQX0RFRklORV9TQ1NJX0FUVFIoaGJhX2lkLCAiJXNcbiIsCi0JCSAgICAgIGRldl9uYW1lKCZwb3J0LT5hZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpKTsKKwkJICAgICAgZGV2X25hbWUoJnpmY3Bfc2Rldi0+cG9ydC0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7CiBaRkNQX0RFRklORV9TQ1NJX0FUVFIod3dwbiwgIjB4JTAxNmxseFxuIiwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcG9ydC0+d3dwbik7CisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHpmY3Bfc2Rldi0+cG9ydC0+d3dwbik7CiAKIHN0YXRpYyBzc2l6ZV90IHpmY3Bfc3lzZnNfc2NzaV9mY3BfbHVuX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC00NjAsNiArNDYxLDQ5IEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoZmNwX2x1biwgU19JUlVHTywgemZjcF9zeXNmc19zY3NpX2ZjcF9sdW5fc2hvdywgTlVMTCk7CiAKK1pGQ1BfREVGSU5FX1NDU0lfQVRUUih6ZmNwX2FjY2Vzc19kZW5pZWQsICIlZFxuIiwKKwkJICAgICAgKGF0b21pY19yZWFkKCZ6ZmNwX3NkZXYtPnN0YXR1cykgJgorCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19ERU5JRUQpICE9IDApOworCitzdGF0aWMgc3NpemVfdCB6ZmNwX3N5c2ZzX3Njc2lfemZjcF9mYWlsZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gYXRvbWljX3JlYWQoJnNkZXZfdG9femZjcChzZGV2KS0+c3RhdHVzKTsKKwl1bnNpZ25lZCBpbnQgZmFpbGVkID0gc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQgPyAxIDogMDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBmYWlsZWQpOworfQorCitzdGF0aWMgc3NpemVfdCB6ZmNwX3N5c2ZzX3Njc2lfemZjcF9mYWlsZWRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKGtzdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkgfHwgdmFsICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJemZjcF9lcnBfc2V0X2x1bl9zdGF0dXMoc2RldiwgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpOworCXpmY3BfZXJwX2x1bl9yZW9wZW4oc2RldiwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCisJCQkgICAgInN5dWZhaTMiKTsKKwl6ZmNwX2VycF93YWl0KHNkZXZfdG9femZjcChzZGV2KS0+cG9ydC0+YWRhcHRlcik7CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoemZjcF9mYWlsZWQsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkgICB6ZmNwX3N5c2ZzX3Njc2lfemZjcF9mYWlsZWRfc2hvdywKKwkJICAgemZjcF9zeXNmc19zY3NpX3pmY3BfZmFpbGVkX3N0b3JlKTsKKworWkZDUF9ERUZJTkVfU0NTSV9BVFRSKHpmY3BfaW5fcmVjb3ZlcnksICIlZFxuIiwKKwkJICAgICAgKGF0b21pY19yZWFkKCZ6ZmNwX3NkZXYtPnN0YXR1cykgJgorCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9JTlVTRSkgIT0gMCk7CisKK1pGQ1BfREVGSU5FX1NDU0lfQVRUUih6ZmNwX3N0YXR1cywgIjB4JTA4eFxuIiwKKwkJICAgICAgYXRvbWljX3JlYWQoJnpmY3Bfc2Rldi0+c3RhdHVzKSk7CisKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICp6ZmNwX3N5c2ZzX3NkZXZfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfZmNwX2x1biwKIAkmZGV2X2F0dHJfd3dwbiwKQEAgLTQ2Nyw2ICs1MTEsMTAgQEAKIAkmZGV2X2F0dHJfcmVhZF9sYXRlbmN5LAogCSZkZXZfYXR0cl93cml0ZV9sYXRlbmN5LAogCSZkZXZfYXR0cl9jbWRfbGF0ZW5jeSwKKwkmZGV2X2F0dHJfemZjcF9hY2Nlc3NfZGVuaWVkLAorCSZkZXZfYXR0cl96ZmNwX2ZhaWxlZCwKKwkmZGV2X2F0dHJfemZjcF9pbl9yZWNvdmVyeSwKKwkmZGV2X2F0dHJfemZjcF9zdGF0dXMsCiAJTlVMTAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LTl4eHguYyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKaW5kZXggMGE3MzI1My4uY2Q0MTI5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LTl4eHguYworKysgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCkBAIC0xODksMTkgKzE4OSw2IEBACiAJcmV0dXJuIGxlbjsKIH0gLyogRW5kIHR3YV9zaG93X3N0YXRzKCkgKi8KIAotLyogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCBhIGRldmljZXMgcXVldWUgZGVwdGggKi8KLXN0YXRpYyBpbnQgdHdhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxdWV1ZV9kZXB0aCwKLQkJCQkgIGludCByZWFzb24pCi17Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAocXVldWVfZGVwdGggPiBUV19RX0xFTkdUSC0yKQotCQlxdWV1ZV9kZXB0aCA9IFRXX1FfTEVOR1RILTI7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBxdWV1ZV9kZXB0aCk7Ci0JcmV0dXJuIHF1ZXVlX2RlcHRoOwotfSAvKiBFbmQgdHdhX2NoYW5nZV9xdWV1ZV9kZXB0aCgpICovCi0KIC8qIENyZWF0ZSBzeXNmcyAnc3RhdHMnIGVudHJ5ICovCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdHdhX2hvc3Rfc3RhdHNfYXR0ciA9IHsKIAkuYXR0ciA9IHsKQEAgLTIwMTYsNyArMjAwMyw3IEBACiAJLnF1ZXVlY29tbWFuZAkJPSB0d2Ffc2NzaV9xdWV1ZSwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCT0gdHdhX3Njc2lfZWhfcmVzZXQsCiAJLmJpb3NfcGFyYW0JCT0gdHdhX3Njc2lfYmlvc3BhcmFtLAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSB0d2FfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuY2FuX3F1ZXVlCQk9IFRXX1FfTEVOR1RILTIsCiAJLnNsYXZlX2NvbmZpZ3VyZQk9IHR3YV9zbGF2ZV9jb25maWd1cmUsCiAJLnRoaXNfaWQJCT0gLTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3ctc2FzLmMgYi9kcml2ZXJzL3Njc2kvM3ctc2FzLmMKaW5kZXggNmRhNmNlYy4uMjM2MTc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LXNhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS8zdy1zYXMuYwpAQCAtMTkxLDE5ICsxOTEsNiBAQAogCXJldHVybiBsZW47CiB9IC8qIEVuZCB0d2xfc2hvd19zdGF0cygpICovCiAKLS8qIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYSBkZXZpY2VzIHF1ZXVlIGRlcHRoICovCi1zdGF0aWMgaW50IHR3bF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXVldWVfZGVwdGgsCi0JCQkJICBpbnQgcmVhc29uKQotewotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHF1ZXVlX2RlcHRoID4gVFdfUV9MRU5HVEgtMikKLQkJcXVldWVfZGVwdGggPSBUV19RX0xFTkdUSC0yOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywgcXVldWVfZGVwdGgpOwotCXJldHVybiBxdWV1ZV9kZXB0aDsKLX0gLyogRW5kIHR3bF9jaGFuZ2VfcXVldWVfZGVwdGgoKSAqLwotCiAvKiBzdGF0cyBzeXNmcyBhdHRyaWJ1dGUgaW5pdGlhbGl6ZXIgKi8KIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB0d2xfaG9zdF9zdGF0c19hdHRyID0gewogCS5hdHRyID0gewpAQCAtMTU5MCw3ICsxNTc3LDcgQEAKIAkucXVldWVjb21tYW5kCQk9IHR3bF9zY3NpX3F1ZXVlLAogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSB0d2xfc2NzaV9laF9yZXNldCwKIAkuYmlvc19wYXJhbQkJPSB0d2xfc2NzaV9iaW9zcGFyYW0sCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHR3bF9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5jYW5fcXVldWUJCT0gVFdfUV9MRU5HVEgtMiwKIAkuc2xhdmVfY29uZmlndXJlCT0gdHdsX3NsYXZlX2NvbmZpZ3VyZSwKIAkudGhpc19pZAkJPSAtMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMgYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCmluZGV4IDc1MjYyNGUuLmM3NWYyMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKKysrIGIvZHJpdmVycy9zY3NpLzN3LXh4eHguYwpAQCAtNTIzLDE5ICs1MjMsNiBAQAogCXJldHVybiBsZW47CiB9IC8qIEVuZCB0d19zaG93X3N0YXRzKCkgKi8KIAotLyogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCBhIGRldmljZXMgcXVldWUgZGVwdGggKi8KLXN0YXRpYyBpbnQgdHdfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHF1ZXVlX2RlcHRoLAotCQkJCSBpbnQgcmVhc29uKQotewotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHF1ZXVlX2RlcHRoID4gVFdfUV9MRU5HVEgtMikKLQkJcXVldWVfZGVwdGggPSBUV19RX0xFTkdUSC0yOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywgcXVldWVfZGVwdGgpOwotCXJldHVybiBxdWV1ZV9kZXB0aDsKLX0gLyogRW5kIHR3X2NoYW5nZV9xdWV1ZV9kZXB0aCgpICovCi0KIC8qIENyZWF0ZSBzeXNmcyAnc3RhdHMnIGVudHJ5ICovCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdHdfaG9zdF9zdGF0c19hdHRyID0gewogCS5hdHRyID0gewpAQCAtMjI3MCw3ICsyMjU3LDcgQEAKIAkucXVldWVjb21tYW5kCQk9IHR3X3Njc2lfcXVldWUsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHR3X3Njc2lfZWhfcmVzZXQsCiAJLmJpb3NfcGFyYW0JCT0gdHdfc2NzaV9iaW9zcGFyYW0sCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHR3X2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLmNhbl9xdWV1ZQkJPSBUV19RX0xFTkdUSC0yLAogCS5zbGF2ZV9jb25maWd1cmUJPSB0d19zbGF2ZV9jb25maWd1cmUsCiAJLnRoaXNfaWQJCT0gLTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvNTNjNzAwLmMgYi9kcml2ZXJzL3Njc2kvNTNjNzAwLmMKaW5kZXggZmFiZDRiZS4uYWE5MTVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzUzYzcwMC5jCisrKyBiL2RyaXZlcnMvc2NzaS81M2M3MDAuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiBTVEFUSUMgaW50IE5DUl83MDBfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpTRHBudCk7CiBTVEFUSUMgaW50IE5DUl83MDBfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwbnQpOwogU1RBVElDIHZvaWQgTkNSXzcwMF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqU0RwbnQpOwotc3RhdGljIGludCBOQ1JfNzAwX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcG50LCBpbnQgZGVwdGgsIGludCByZWFzb24pOworc3RhdGljIGludCBOQ1JfNzAwX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcG50LCBpbnQgZGVwdGgpOwogc3RhdGljIGludCBOQ1JfNzAwX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwbnQsIGludCBkZXB0aCk7CiAKIFNUQVRJQyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqTkNSXzcwMF9kZXZfYXR0cnNbXTsKQEAgLTMyNyw2ICszMjcsNyBAQAogCXRwbnQtPnNsYXZlX2FsbG9jID0gTkNSXzcwMF9zbGF2ZV9hbGxvYzsKIAl0cG50LT5jaGFuZ2VfcXVldWVfZGVwdGggPSBOQ1JfNzAwX2NoYW5nZV9xdWV1ZV9kZXB0aDsKIAl0cG50LT5jaGFuZ2VfcXVldWVfdHlwZSA9IE5DUl83MDBfY2hhbmdlX3F1ZXVlX3R5cGU7CisJdHBudC0+dXNlX2Jsa190YWdzID0gMTsKIAogCWlmKHRwbnQtPm5hbWUgPT0gTlVMTCkKIAkJdHBudC0+bmFtZSA9ICI1M2M3MDAiOwpAQCAtNTkyLDE5ICs1OTMsMTQgQEAKIAlob3N0ZGF0YS0+Y21kID0gTlVMTDsKIAogCWlmKFNDcCAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBOQ1JfNzAwX2NvbW1hbmRfc2xvdCAqc2xvdCA9IAorCQlzdHJ1Y3QgTkNSXzcwMF9jb21tYW5kX3Nsb3QgKnNsb3QgPQogCQkJKHN0cnVjdCBOQ1JfNzAwX2NvbW1hbmRfc2xvdCAqKVNDcC0+aG9zdF9zY3JpYmJsZTsKLQkJCisKIAkJZG1hX3VubWFwX3NpbmdsZShob3N0ZGF0YS0+ZGV2LCBzbG90LT5wQ21kLAogCQkJCSBNQVhfQ09NTUFORF9TSVpFLCBETUFfVE9fREVWSUNFKTsKIAkJaWYgKHNsb3QtPmZsYWdzID09IE5DUl83MDBfRkxBR19BVVRPU0VOU0UpIHsKIAkJCWNoYXIgKmNtbmQgPSBOQ1JfNzAwX2dldF9zZW5zZV9jbW5kKFNDcC0+ZGV2aWNlKTsKLSNpZmRlZiBOQ1JfNzAwX0RFQlVHCi0JCQlwcmludGsoIiBPUklHSU5BTCBDTUQgJXAgUkVUVVJORUQgJWQsIG5ldyByZXR1cm4gaXMgJWQgc2Vuc2UgaXNcbiIsCi0JCQkgICAgICAgU0NwLCBTQ3AtPmNtbmRbN10sIHJlc3VsdCk7Ci0JCQlzY3NpX3ByaW50X3NlbnNlKCI1M2M3MDAiLCBTQ3ApOwogCi0jZW5kaWYKIAkJCWRtYV91bm1hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwgc2xvdC0+ZG1hX2hhbmRsZSwKIAkJCQkJIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAkJCS8qIHJlc3RvcmUgdGhlIG9sZCByZXN1bHQgaWYgdGhlIHJlcXVlc3Qgc2Vuc2Ugd2FzCkBAIC05MDYsOCArOTAyLDEwIEBACiAJCQkvKiB3ZSdyZSBkb25lIG5lZ290aWF0aW5nICovCiAJCQlOQ1JfNzAwX3NldF90YWdfbmVnX3N0YXRlKFNDcC0+ZGV2aWNlLCBOQ1JfNzAwX0ZJTklTSEVEX1RBR19ORUdPVElBVElPTik7CiAJCQlob3N0ZGF0YS0+dGFnX25lZ290aWF0ZWQgJj0gfigxPDxzY21kX2lkKFNDcCkpOworCiAJCQlTQ3AtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCA9IDA7Ci0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKFNDcC0+ZGV2aWNlLCBob3N0LT5jbWRfcGVyX2x1bik7CisJCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChTQ3AtPmRldmljZSwgaG9zdC0+Y21kX3Blcl9sdW4pOworCQkJc2NzaV9zZXRfdGFnX3R5cGUoU0NwLT5kZXZpY2UsIDApOwogCQl9IGVsc2UgewogCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgaG9zdCwKIAkJCQkiKCVkOiVkKSBVbmV4cGVjdGVkIFJFSkVDVCBNZXNzYWdlICVzXG4iLApAQCAtMTQzMiw3ICsxNDMwLDcgQEAKIAlpZigoaG9zdGRhdGEtPnRhZ19uZWdvdGlhdGVkICYgKDE8PHNjbWRfaWQoU0NwKSkpCiAJICAgJiYgKHNsb3QtPnRhZyAhPSBTQ1NJX05PX1RBRyAmJiBTQ3AtPmNtbmRbMF0gIT0gUkVRVUVTVF9TRU5TRSAmJgogCSAgICAgICBzbG90LT5mbGFncyAhPSBOQ1JfNzAwX0ZMQUdfQVVUT1NFTlNFKSkgewotCQljb3VudCArPSBzY3NpX3BvcHVsYXRlX3RhZ19tc2coU0NwLCAmaG9zdGRhdGEtPm1zZ291dFtjb3VudF0pOworCQljb3VudCArPSBzcGlfcG9wdWxhdGVfdGFnX21zZygmaG9zdGRhdGEtPm1zZ291dFtjb3VudF0sIFNDcCk7CiAJfQogCiAJaWYoaG9zdGRhdGEtPmZhc3QgJiYKQEAgLTE3NzIsNyArMTc3MCw3IEBACiAJICovCiAJaWYoTkNSXzcwMF9nZXRfZGVwdGgoU0NwLT5kZXZpY2UpICE9IDAKIAkgICAmJiAoIShob3N0ZGF0YS0+dGFnX25lZ290aWF0ZWQgJiAoMTw8c2NtZF9pZChTQ3ApKSkKLQkgICAgICAgfHwgIWJsa19ycV90YWdnZWQoU0NwLT5yZXF1ZXN0KSkpIHsKKwkgICAgICAgfHwgIShTQ3AtPmZsYWdzICYgU0NNRF9UQUdHRUQpKSkgewogCQlDREVCVUcoS0VSTl9FUlIsIFNDcCwgImhhcyBub24gemVybyBkZXB0aCAlZFxuIiwKIAkJICAgICAgIE5DUl83MDBfZ2V0X2RlcHRoKFNDcC0+ZGV2aWNlKSk7CiAJCXJldHVybiBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1k7CkBAIC0xODAwLDcgKzE3OTgsNyBAQAogCXByaW50aygiNTNjNzAwOiBzY3NpJWQsIGNvbW1hbmQgIiwgU0NwLT5kZXZpY2UtPmhvc3QtPmhvc3Rfbm8pOwogCXNjc2lfcHJpbnRfY29tbWFuZChTQ3ApOwogI2VuZGlmCi0JaWYoYmxrX3JxX3RhZ2dlZChTQ3AtPnJlcXVlc3QpCisJaWYgKChTQ3AtPmZsYWdzICYgU0NNRF9UQUdHRUQpCiAJICAgJiYgKGhvc3RkYXRhLT50YWdfbmVnb3RpYXRlZCAmKDE8PHNjbWRfaWQoU0NwKSkpID09IDAKIAkgICAmJiBOQ1JfNzAwX2dldF90YWdfbmVnX3N0YXRlKFNDcC0+ZGV2aWNlKSA9PSBOQ1JfNzAwX1NUQVJUX1RBR19ORUdPVElBVElPTikgewogCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgU0NwLCAiRW5hYmxpbmcgVGFnIENvbW1hbmQgUXVldWluZ1xuIik7CkBAIC0xODE0LDcgKzE4MTIsNyBAQAogCSAqCiAJICogRklYTUU6IFRoaXMgd2lsbCByb3lhbGx5IHNjcmV3IHVwIG9uIG11bHRpcGxlIExVTiBkZXZpY2VzCiAJICogKi8KLQlpZighYmxrX3JxX3RhZ2dlZChTQ3AtPnJlcXVlc3QpCisJaWYgKCEoU0NwLT5mbGFncyAmIFNDTURfVEFHR0VEKQogCSAgICYmIChob3N0ZGF0YS0+dGFnX25lZ290aWF0ZWQgJigxPDxzY21kX2lkKFNDcCkpKSkgewogCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcCwgIkRpc2FibGluZyBUYWcgQ29tbWFuZCBRdWV1aW5nXG4iKTsKIAkJaG9zdGRhdGEtPnRhZ19uZWdvdGlhdGVkICY9IH4oMTw8c2NtZF9pZChTQ3ApKTsKQEAgLTE5MTEsOSArMTkwOSw3IEBACiB7CiAJc3RydWN0IE5DUl83MDBfY29tbWFuZF9zbG90ICpzbG90OwogCi0Jc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ3AsCi0JCSJOZXcgZXJyb3IgaGFuZGxlciB3YW50cyB0byBhYm9ydCBjb21tYW5kXG5cdCIpOwotCXNjc2lfcHJpbnRfY29tbWFuZChTQ3ApOworCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwLCAiYWJvcnQgY29tbWFuZFxuIik7CiAKIAlzbG90ID0gKHN0cnVjdCBOQ1JfNzAwX2NvbW1hbmRfc2xvdCAqKVNDcC0+aG9zdF9zY3JpYmJsZTsKIApAQCAtMjA1NiwxMyArMjA1MiwxMCBAQAogCiAJLyogdG8gZG8gaGVyZTogYWxsb2NhdGUgbWVtb3J5OyBidWlsZCBhIHF1ZXVlX2Z1bGwgbGlzdCAqLwogCWlmKFNEcC0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShTRHAsIE1TR19PUkRFUkVEX1RBRyk7Ci0JCXNjc2lfYWN0aXZhdGVfdGNxKFNEcCwgTkNSXzcwMF9ERUZBVUxUX1RBR1MpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChTRHAsIE5DUl83MDBfREVGQVVMVF9UQUdTKTsKIAkJTkNSXzcwMF9zZXRfdGFnX25lZ19zdGF0ZShTRHAsIE5DUl83MDBfU1RBUlRfVEFHX05FR09USUFUSU9OKTsKLQl9IGVsc2UgewotCQkvKiBpbml0aWFsaXNlIHRvIGRlZmF1bHQgZGVwdGggKi8KLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoU0RwLCAwLCBTRHAtPmhvc3QtPmNtZF9wZXJfbHVuKTsKIAl9CisKIAlpZihob3N0ZGF0YS0+ZmFzdCkgewogCQkvKiBGaW5kIHRoZSBjb3JyZWN0IG9mZnNldCBhbmQgcGVyaW9kIHZpYSBkb21haW4gdmFsaWRhdGlvbiAqLwogCQlpZiAoIXNwaV9pbml0aWFsX2R2KFNEcC0+c2Rldl90YXJnZXQpKQpAQCAtMjA4MiwxNiArMjA3NSwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1OQ1JfNzAwX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcCwgaW50IGRlcHRoLCBpbnQgcmVhc29uKQorTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpTRHAsIGludCBkZXB0aCkKIHsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCWlmIChkZXB0aCA+IE5DUl83MDBfTUFYX1RBR1MpCiAJCWRlcHRoID0gTkNSXzcwMF9NQVhfVEFHUzsKLQotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKFNEcCwgc2NzaV9nZXRfdGFnX3R5cGUoU0RwKSwgZGVwdGgpOwotCXJldHVybiBkZXB0aDsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoU0RwLCBkZXB0aCk7CiB9CiAKIHN0YXRpYyBpbnQgTkNSXzcwMF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcCwgaW50IHRhZ190eXBlKQpAQCAtMjEwMSw4ICsyMDg5LDYgQEAKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhID0gCiAJCShzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKilTRHAtPmhvc3QtPmhvc3RkYXRhWzBdOwogCi0Jc2NzaV9zZXRfdGFnX3R5cGUoU0RwLCB0YWdfdHlwZSk7Ci0KIAkvKiBXZSBoYXZlIGEgZ2xvYmFsIChwZXIgdGFyZ2V0KSBmbGFnIHRvIHRyYWNrIHdoZXRoZXIgVENRIGlzCiAJICogZW5hYmxlZCwgc28gd2UnbGwgYmUgdHVybmluZyBpdCBvZmYgZm9yIHRoZSBlbnRpcmUgdGFyZ2V0IGhlcmUuCiAJICogb3VyIHRhZyBhbGdvcml0aG0gd2lsbCBmYWlsIGlmIHdlIG1peCB0YWdnZWQgYW5kIHVudGFnZ2VkIGNvbW1hbmRzLApAQCAtMjExMCwxNSArMjA5NiwxNiBAQAogCWlmIChjaGFuZ2VfdGFnKQogCQlzY3NpX3RhcmdldF9xdWllc2NlKFNEcC0+c2Rldl90YXJnZXQpOwogCisJc2NzaV9zZXRfdGFnX3R5cGUoU0RwLCB0YWdfdHlwZSk7CiAJaWYgKCF0YWdfdHlwZSkgewogCQkvKiBzaGlmdCBiYWNrIHRvIHRoZSBkZWZhdWx0IHVucXVldWVkIG51bWJlciBvZiBjb21tYW5kcwogCQkgKiAodGhlIHVzZXIgY2FuIHN0aWxsIHJhaXNlIHRoaXMpICovCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3EoU0RwLCBTRHAtPmhvc3QtPmNtZF9wZXJfbHVuKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoU0RwLCBTRHAtPmhvc3QtPmNtZF9wZXJfbHVuKTsKIAkJaG9zdGRhdGEtPnRhZ19uZWdvdGlhdGVkICY9IH4oMSA8PCBzZGV2X2lkKFNEcCkpOwogCX0gZWxzZSB7CiAJCS8qIEhlcmUsIHdlIGNsZWFyZWQgdGhlIG5lZ290aWF0aW9uIGZsYWcgYWJvdmUsIHNvIHRoaXMKIAkJICogd2lsbCBmb3JjZSB0aGUgZHJpdmVyIHRvIHJlbmVnb3RpYXRlICovCi0JCXNjc2lfYWN0aXZhdGVfdGNxKFNEcCwgU0RwLT5xdWV1ZV9kZXB0aCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKFNEcCwgU0RwLT5xdWV1ZV9kZXB0aCk7CiAJCWlmIChjaGFuZ2VfdGFnKQogCQkJTkNSXzcwMF9zZXRfdGFnX25lZ19zdGF0ZShTRHAsIE5DUl83MDBfU1RBUlRfVEFHX05FR09USUFUSU9OKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYyBiL2RyaXZlcnMvc2NzaS9CdXNMb2dpYy5jCmluZGV4IDY0Yzc1MTQuLjhkNjZhNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9CdXNMb2dpYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9CdXNMb2dpYy5jCkBAIC0yMzI3LDEyICsyMzI3LDEyIEBACiAJCWlmIChxZGVwdGggPT0gMCkKIAkJCXFkZXB0aCA9IEJMT0dJQ19NQVhfQVVUT19UQUdfREVQVEg7CiAJCWFkYXB0ZXItPnFkZXB0aFt0Z3RfaWRdID0gcWRlcHRoOwotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXYsIE1TR19TSU1QTEVfVEFHLCBxZGVwdGgpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIHFkZXB0aCk7CiAJfSBlbHNlIHsKIAkJYWRhcHRlci0+dGFncV9vayAmPSB+KDEgPDwgdGd0X2lkKTsKIAkJcWRlcHRoID0gYWRhcHRlci0+dW50YWdfcWRlcHRoOwogCQlhZGFwdGVyLT5xZGVwdGhbdGd0X2lkXSA9IHFkZXB0aDsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCBxZGVwdGgpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIHFkZXB0aCk7CiAJfQogCXFkZXB0aCA9IDA7CiAJZm9yICh0Z3RfaWQgPSAwOyB0Z3RfaWQgPCBhZGFwdGVyLT5tYXhkZXY7IHRndF9pZCsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCAzYTgyMGY2Li44NmNmM2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtMTM0MSwxMyArMTM0MSwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGMzOTV4LgogCi1jb25maWcgU0NTSV9EQzM5MFQKLQl0cmlzdGF0ZSAiVGVrcmFtIERDMzkwKFQpIGFuZCBBbTUzLzc5Qzk3NCBTQ1NJIHN1cHBvcnQiCitjb25maWcgU0NTSV9BTTUzQzk3NAorCXRyaXN0YXRlICJUZWtyYW0gREMzOTAoVCkgYW5kIEFtNTMvNzlDOTc0IFNDU0kgc3VwcG9ydCAobmV3IGRyaXZlcikiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQorCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFBDSSBTQ1NJIGhvc3QgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEFtNTNDOTc0QQogCSAgY2hpcCwgZS5nLiBUZWtyYW0gREMzOTAoVCksIERhd2lDb250cm9sIDI5NzQgYW5kIHNvbWUgb25ib2FyZAogCSAgUENzY3NpL1BDbmV0IChBbTUzLzc5Qzk3NCkgc29sdXRpb25zLgorCSAgVGhpcyBpcyBhIG5ldyBpbXBsZW1lbnRhdGlvbiBiYXNlIG9uIHRoZSBnZW5lcmljIGVzcF9zY3NpIGRyaXZlci4KIAogCSAgRG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0Pi4KIApAQCAtMTM1NSw3ICsxMzU3LDcgQEAKIAkgIGJhc2VkIG9uIE5DUi9TeW1iaW9zIGNoaXBzLiBVc2UgIk5DUjUzQzhYWCBTQ1NJIHN1cHBvcnQiIGZvciB0aG9zZS4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdG1zY3NpbS4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhbTUzYzk3NC4KIAogY29uZmlnIFNDU0lfVDEyOAogCXRyaXN0YXRlICJUcmFudG9yIFQxMjgvVDEyOEYvVDIyOCBTQ1NJIHN1cHBvcnQiCkBAIC0xNDUxLDYgKzE0NTMsMTQgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5zcDMyLgogCitjb25maWcgU0NTSV9XRDcxOVgKKwl0cmlzdGF0ZSAiV2VzdGVybiBEaWdpdGFsIFdENzE5My83MTk3LzcyOTYgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCisJc2VsZWN0IEVFUFJPTV85M0NYNgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFdlc3Rlcm4gRGlnaXRhbCBXRDcxOTMsIFdENzE5NyBhbmQgV0Q3Mjk2IFBDSQorCSAgU0NTSSBjb250cm9sbGVycyAoYmFzZWQgb24gV0QzM0MyOTZBIGNoaXApLgorCiBjb25maWcgU0NTSV9ERUJVRwogCXRyaXN0YXRlICJTQ1NJIGRlYnVnZ2luZyBob3N0IHNpbXVsYXRvciIKIAlkZXBlbmRzIG9uIFNDU0kKQEAgLTE2MTUsNyArMTYyNSw3IEBACiAJICB0aGF0IGxlYXZlIHRoZSBkZXZpY2VzIHdpdGggU0NTSSBvcGVyYXRpb25zIHBhcnR3YXkgY29tcGxldGVkLgogCiBjb25maWcgTUFDX1NDU0kKLQlib29sICJNYWNpbnRvc2ggTkNSNTM4MCBTQ1NJIgorCXRyaXN0YXRlICJNYWNpbnRvc2ggTkNSNTM4MCBTQ1NJIgogCWRlcGVuZHMgb24gTUFDICYmIFNDU0k9eQogCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQppbmRleCA1OWYxY2U2Li41ODE1OGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCkBAIC0xMDAsNyArMTAwLDcgQEAKIG9iai0kKENPTkZJR19TQ1NJXzcwMDBGQVNTVCkJKz0gd2Q3MDAwLm8KIG9iai0kKENPTkZJR19TQ1NJX0VBVEEpCQkrPSBlYXRhLm8KIG9iai0kKENPTkZJR19TQ1NJX0RDMzk1eCkJKz0gZGMzOTV4Lm8KLW9iai0kKENPTkZJR19TQ1NJX0RDMzkwVCkJKz0gdG1zY3NpbS5vCitvYmotJChDT05GSUdfU0NTSV9BTTUzQzk3NCkJKz0gZXNwX3Njc2kubwlhbTUzYzk3NC5vCiBvYmotJChDT05GSUdfTUVHQVJBSURfTEVHQUNZKQkrPSBtZWdhcmFpZC5vCiBvYmotJChDT05GSUdfTUVHQVJBSURfTkVXR0VOKQkrPSBtZWdhcmFpZC8KIG9iai0kKENPTkZJR19NRUdBUkFJRF9TQVMpCSs9IG1lZ2FyYWlkLwpAQCAtMTQzLDYgKzE0Myw3IEBACiBvYmotJChDT05GSUdfVk1XQVJFX1BWU0NTSSkJKz0gdm13X3B2c2NzaS5vCiBvYmotJChDT05GSUdfWEVOX1NDU0lfRlJPTlRFTkQpCSs9IHhlbi1zY3NpZnJvbnQubwogb2JqLSQoQ09ORklHX0hZUEVSVl9TVE9SQUdFKQkrPSBodl9zdG9ydnNjLm8KK29iai0kKENPTkZJR19TQ1NJX1dENzE5WCkJKz0gd2Q3MTl4Lm8KIAogb2JqLSQoQ09ORklHX0FSTSkJCSs9IGFybS8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKaW5kZXggNDVkYTNjOC4uMzYyNDRkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jCkBAIC0xMSw4ICsxMSw2IEBACiAgKiAgICAgIGRyZXdAY29sb3JhZG8uZWR1CiAgKiAgICAgICsxICgzMDMpIDY2Ni01ODM2CiAgKgotICogRElTVFJJQlVUSU9OIFJFTEVBU0UgNi4gCi0gKgogICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0IAogICoKICAqIE5DUiA1MzgwIEZhbWlseQpAQCAtMjc5LDcgKzI3Nyw3IEBACiAgKglTZXQgdXAgdGhlIGludGVybmFsIGZpZWxkcyBpbiB0aGUgU0NTSSBjb21tYW5kLgogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgaW5pdGlhbGl6ZV9TQ3AoU2NzaV9DbW5kICogY21kKQorc3RhdGljIGlubGluZSB2b2lkIGluaXRpYWxpemVfU0NwKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAkvKiAKIAkgKiBJbml0aWFsaXplIHRoZSBTY3NpIFBvaW50ZXIgZmllbGQgc28gdGhhdCBhbGwgb2YgdGhlIGNvbW1hbmRzIGluIHRoZSAKQEAgLTU3NCwxMiArNTcyLDEyIEBACiAJaW50IHRyeWluZ19pcnFzLCBpLCBtYXNrOwogCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCi0JZm9yICh0cnlpbmdfaXJxcyA9IGkgPSAwLCBtYXNrID0gMTsgaSA8IDE2OyArK2ksIG1hc2sgPDw9IDEpCisJZm9yICh0cnlpbmdfaXJxcyA9IDAsIGkgPSAxLCBtYXNrID0gMjsgaSA8IDE2OyArK2ksIG1hc2sgPDw9IDEpCiAJCWlmICgobWFzayAmIHBvc3NpYmxlKSAmJiAocmVxdWVzdF9pcnEoaSwgJnByb2JlX2ludHIsIDAsICJOQ1ItcHJvYmUiLCBOVUxMKSA9PSAwKSkKIAkJCXRyeWluZ19pcnFzIHw9IG1hc2s7CiAKIAl0aW1lb3V0ID0gamlmZmllcyArICgyNTAgKiBIWiAvIDEwMDApOwotCXByb2JlX2lycSA9IFNDU0lfSVJRX05PTkU7CisJcHJvYmVfaXJxID0gTk9fSVJROwogCiAJLyoKIAkgKiBBIGludGVycnVwdCBpcyB0cmlnZ2VyZWQgd2hlbmV2ZXIgQlNZID0gZmFsc2UsIFNFTCA9IHRydWUKQEAgLTU5NiwxMyArNTk0LDEzIEBACiAJTkNSNTM4MF93cml0ZShPVVRQVVRfREFUQV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKIAlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0RBVEEgfCBJQ1JfQVNTRVJUX1NFTCk7CiAKLQl3aGlsZSAocHJvYmVfaXJxID09IFNDU0lfSVJRX05PTkUgJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJd2hpbGUgKHByb2JlX2lycSA9PSBOT19JUlEgJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogCQogCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIDApOwogCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7CiAKLQlmb3IgKGkgPSAwLCBtYXNrID0gMTsgaSA8IDE2OyArK2ksIG1hc2sgPDw9IDEpCisJZm9yIChpID0gMSwgbWFzayA9IDI7IGkgPCAxNjsgKytpLCBtYXNrIDw8PSAxKQogCQlpZiAodHJ5aW5nX2lycXMgJiBtYXNrKQogCQkJZnJlZV9pcnEoaSwgTlVMTCk7CiAKQEAgLTYxMCw1MCArNjA4LDcwIEBACiB9CiAKIC8qKgotICoJTkNSNTgzODBfcHJpbnRfb3B0aW9ucwktCXNob3cgb3B0aW9ucwotICoJQGluc3RhbmNlOiB1bnVzZWQgZm9yIG5vdworICoJTkNSNTgzODBfaW5mbyAtIHJlcG9ydCBkcml2ZXIgYW5kIGhvc3QgaW5mb3JtYXRpb24KKyAqCUBpbnN0YW5jZTogcmVsZXZhbnQgc2NzaSBob3N0IGluc3RhbmNlCiAgKgotICoJQ2FsbGVkIGJ5IHByb2JlIGNvZGUgaW5kaWNhdGluZyB0aGUgTkNSNTM4MCBkcml2ZXIgb3B0aW9ucyB0aGF0IAotICoJd2VyZSBzZWxlY3RlZC4gQXQgc29tZSBwb2ludCB0aGlzIHdpbGwgc3dpdGNoIHRvIHJ1bnRpbWUgb3B0aW9ucwotICoJcmVhZCBmcm9tIHRoZSBhZGFwdGVyIGluIHF1ZXN0aW9uCisgKglGb3IgdXNlIGFzIHRoZSBob3N0IHRlbXBsYXRlIGluZm8oKSBoYW5kbGVyLgogICoKICAqCUxvY2tzOiBub25lCiAgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkCi1OQ1I1MzgwX3ByaW50X29wdGlvbnMoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCitzdGF0aWMgY29uc3QgY2hhciAqTkNSNTM4MF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQogewotCXByaW50aygiIGdlbmVyaWMgb3B0aW9ucyIKLSNpZmRlZiBBVVRPUFJPQkVfSVJRCi0JICAgICAgICIgQVVUT1BST0JFX0lSUSIKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKKworCXJldHVybiBob3N0ZGF0YS0+aW5mbzsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQoreworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOworCisJc25wcmludGYoaG9zdGRhdGEtPmluZm8sIHNpemVvZihob3N0ZGF0YS0+aW5mbyksCisJICAgICAgICAgIiVzLCBpb19wb3J0IDB4JWx4LCBuX2lvX3BvcnQgJWQsICIKKwkgICAgICAgICAiYmFzZSAweCVseCwgaXJxICVkLCAiCisJICAgICAgICAgImNhbl9xdWV1ZSAlZCwgY21kX3Blcl9sdW4gJWQsICIKKwkgICAgICAgICAic2dfdGFibGVzaXplICVkLCB0aGlzX2lkICVkLCAiCisJICAgICAgICAgImZsYWdzIHsgJXMlcyVzfSwgIgorI2lmIGRlZmluZWQoVVNMRUVQX1BPTEwpICYmIGRlZmluZWQoVVNMRUVQX1dBSVRMT05HKQorCSAgICAgICAgICJVU0xFRVBfUE9MTCAlZCwgVVNMRUVQX1dBSVRMT05HICVkLCAiCiAjZW5kaWYKLSNpZmRlZiBBVVRPU0VOU0UKLQkgICAgICAgIiBBVVRPU0VOU0UiCisJICAgICAgICAgIm9wdGlvbnMgeyAlc30gIiwKKwkgICAgICAgICBpbnN0YW5jZS0+aG9zdHQtPm5hbWUsIGluc3RhbmNlLT5pb19wb3J0LCBpbnN0YW5jZS0+bl9pb19wb3J0LAorCSAgICAgICAgIGluc3RhbmNlLT5iYXNlLCBpbnN0YW5jZS0+aXJxLAorCSAgICAgICAgIGluc3RhbmNlLT5jYW5fcXVldWUsIGluc3RhbmNlLT5jbWRfcGVyX2x1biwKKwkgICAgICAgICBpbnN0YW5jZS0+c2dfdGFibGVzaXplLCBpbnN0YW5jZS0+dGhpc19pZCwKKwkgICAgICAgICBob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX05DUjUzQzQwMCAgICAgPyAiTkNSNTNDNDAwICIgICAgIDogIiIsCisJICAgICAgICAgaG9zdGRhdGEtPmZsYWdzICYgRkxBR19EVEMzMTgxRSAgICAgID8gIkRUQzMxODFFICIgICAgICA6ICIiLAorCSAgICAgICAgIGhvc3RkYXRhLT5mbGFncyAmIEZMQUdfTk9fUFNFVURPX0RNQSA/ICJOT19QU0VVRE9fRE1BICIgOiAiIiwKKyNpZiBkZWZpbmVkKFVTTEVFUF9QT0xMKSAmJiBkZWZpbmVkKFVTTEVFUF9XQUlUTE9ORykKKwkgICAgICAgICBVU0xFRVBfUE9MTCwgVVNMRUVQX1dBSVRMT05HLAorI2VuZGlmCisjaWZkZWYgQVVUT1BST0JFX0lSUQorCSAgICAgICAgICJBVVRPUFJPQkVfSVJRICIKICNlbmRpZgogI2lmZGVmIERJRkZFUkVOVElBTAotCSAgICAgICAiIERJRkZFUkVOVElBTCIKKwkgICAgICAgICAiRElGRkVSRU5USUFMICIKICNlbmRpZgogI2lmZGVmIFJFQUxfRE1BCi0JICAgICAgICIgUkVBTCBETUEiCisJICAgICAgICAgIlJFQUxfRE1BICIKICNlbmRpZgogI2lmZGVmIFJFQUxfRE1BX1BPTEwKLQkgICAgICAgIiBSRUFMIERNQSBQT0xMIgorCSAgICAgICAgICJSRUFMX0RNQV9QT0xMICIKICNlbmRpZgogI2lmZGVmIFBBUklUWQotCSAgICAgICAiIFBBUklUWSIKKwkgICAgICAgICAiUEFSSVRZICIKICNlbmRpZgogI2lmZGVmIFBTRVVET19ETUEKLQkgICAgICAgIiBQU0VVRE8gRE1BIgorCSAgICAgICAgICJQU0VVRE9fRE1BICIKICNlbmRpZgogI2lmZGVmIFVOU0FGRQotCSAgICAgICAiIFVOU0FGRSAiCisJICAgICAgICAgIlVOU0FGRSAiCiAjZW5kaWYKLQkgICAgKTsKLQlwcmludGsoIiBVU0xFRVAsIFVTTEVFUF9QT0xMPSVkIFVTTEVFUF9TTEVFUD0lZCIsIFVTTEVFUF9QT0xMLCBVU0xFRVBfU0xFRVApOwotCXByaW50aygiIGdlbmVyaWMgcmVsZWFzZT0lZCIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOwotCWlmICgoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopIGluc3RhbmNlLT5ob3N0ZGF0YSktPmZsYWdzICYgRkxBR19OQ1I1M0M0MDApIHsKLQkJcHJpbnRrKCIgbmNyNTNjNDAwIHJlbGVhc2U9JWQiLCBOQ1I1M0M0MDBfUFVCTElDX1JFTEVBU0UpOwotCX0KKyNpZmRlZiBOQ1I1M0M0MDAKKwkgICAgICAgICAiTkNSNTNDNDAwICIKKyNlbmRpZgorCSAgICAgICAgICIiKTsKIH0KIAogLyoqCkBAIC02NzIsNiArNjkwLDcgQEAKIAlOQ1I1MzgwX2RwcmludF9waGFzZShOREVCVUdfQU5ZLCBpbnN0YW5jZSk7CiB9CiAKKyNpZmRlZiBQU0VVRE9fRE1BCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIC9wcm9jL3Njc2kvW2R0YyBwYXMxNiB0MTI4IGdlbmVyaWNdL1swLUFTQ19OVU1fQk9BUkRfU1VQUE9SVEVEXQpAQCAtNjg5LDE5ICs3MDgsMTggQEAKIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgTkNSNTM4MF93cml0ZV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAogCWNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCkKIHsKLSNpZmRlZiBEVENfUFVCTElDX1JFTEVBU0UKLQlkdGNfd21heGkgPSBkdGNfbWF4aSA9IDA7Ci0jZW5kaWYKLSNpZmRlZiBQQVMxNl9QVUJMSUNfUkVMRUFTRQotCXBhc193bWF4aSA9IHBhc19tYXhpID0gMDsKLSNlbmRpZgotCXJldHVybiAoLUVOT1NZUyk7CS8qIEN1cnJlbnRseSB0aGlzIGlzIGEgbm8tb3AgKi8KKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKKworCWhvc3RkYXRhLT5zcGluX21heF9yID0gMDsKKwlob3N0ZGF0YS0+c3Bpbl9tYXhfdyA9IDA7CisJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogI3VuZGVmIFNQUklOVEYKICNkZWZpbmUgU1BSSU5URihhcmdzLi4uKSBzZXFfcHJpbnRmKG0sICMjIGFyZ3MpCiBzdGF0aWMKLXZvaWQgbHByaW50X1Njc2lfQ21uZChTY3NpX0NtbmQgKiBjbWQsIHN0cnVjdCBzZXFfZmlsZSAqbSk7Cit2b2lkIGxwcmludF9TY3NpX0NtbmQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOwogc3RhdGljCiB2b2lkIGxwcmludF9jb21tYW5kKHVuc2lnbmVkIGNoYXIgKmNtZCwgc3RydWN0IHNlcV9maWxlICptKTsKIHN0YXRpYwpAQCAtNzExLDU2ICs3MjksMzEgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JU2NzaV9DbW5kICpwdHI7CisJc3RydWN0IHNjc2lfY21uZCAqcHRyOwogCiAJaG9zdGRhdGEgPSAoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgaW5zdGFuY2UtPmhvc3RkYXRhOwogCi0JU1BSSU5URigiTkNSNTM4MCBjb3JlIHJlbGVhc2U9JWQuICAgIiwgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0JaWYgKCgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgaW5zdGFuY2UtPmhvc3RkYXRhKS0+ZmxhZ3MgJiBGTEFHX05DUjUzQzQwMCkKLQkJU1BSSU5URigibmNyNTNjNDAwIHJlbGVhc2U9JWQuICAiLCBOQ1I1M0M0MDBfUFVCTElDX1JFTEVBU0UpOwotI2lmZGVmIERUQ19QVUJMSUNfUkVMRUFTRQotCVNQUklOVEYoIkRUQyAzMTgwLzMyODAgcmVsZWFzZSAlZCIsIERUQ19QVUJMSUNfUkVMRUFTRSk7Ci0jZW5kaWYKLSNpZmRlZiBUMTI4X1BVQkxJQ19SRUxFQVNFCi0JU1BSSU5URigiVDEyOCByZWxlYXNlICVkIiwgVDEyOF9QVUJMSUNfUkVMRUFTRSk7Ci0jZW5kaWYKLSNpZmRlZiBHRU5FUklDX05DUjUzODBfUFVCTElDX1JFTEVBU0UKLQlTUFJJTlRGKCJHZW5lcmljNTM4MCByZWxlYXNlICVkIiwgR0VORVJJQ19OQ1I1MzgwX1BVQkxJQ19SRUxFQVNFKTsKLSNlbmRpZgotI2lmZGVmIFBBUzE2X1BVQkxJQ19SRUxFQVNFCi0JU1BSSU5URigiUEFTMTYgcmVsZWFzZT0lZCIsIFBBUzE2X1BVQkxJQ19SRUxFQVNFKTsKLSNlbmRpZgotCi0JU1BSSU5URigiXG5CYXNlIEFkZHI6IDB4JTA1bFggICAgIiwgKGxvbmcpIGluc3RhbmNlLT5iYXNlKTsKLQlTUFJJTlRGKCJpb19wb3J0OiAlMDR4ICAgICAgIiwgKGludCkgaW5zdGFuY2UtPmlvX3BvcnQpOwotCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCi0JCVNQUklOVEYoIklSUTogTm9uZS5cbiIpOwotCWVsc2UKLQkJU1BSSU5URigiSVJROiAlZC5cbiIsIGluc3RhbmNlLT5pcnEpOwotCi0jaWZkZWYgRFRDX1BVQkxJQ19SRUxFQVNFCi0JU1BSSU5URigiSGlnaHdhdGVyIEkvTyBidXN5X3NwaW5fY291bnRzIC0tIHdyaXRlOiAlZCAgcmVhZDogJWRcbiIsIGR0Y193bWF4aSwgZHRjX21heGkpOwotI2VuZGlmCi0jaWZkZWYgUEFTMTZfUFVCTElDX1JFTEVBU0UKLQlTUFJJTlRGKCJIaWdod2F0ZXIgSS9PIGJ1c3lfc3Bpbl9jb3VudHMgLS0gd3JpdGU6ICVkICByZWFkOiAlZFxuIiwgcGFzX3dtYXhpLCBwYXNfbWF4aSk7CisjaWZkZWYgUFNFVURPX0RNQQorCVNQUklOVEYoIkhpZ2h3YXRlciBJL08gYnVzeSBzcGluIGNvdW50czogd3JpdGUgJWQsIHJlYWQgJWRcbiIsCisJICAgICAgICBob3N0ZGF0YS0+c3Bpbl9tYXhfdywgaG9zdGRhdGEtPnNwaW5fbWF4X3IpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycShpbnN0YW5jZS0+aG9zdF9sb2NrKTsKIAlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpCiAJCVNQUklOVEYoInNjc2klZDogbm8gY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJZWxzZQotCQlscHJpbnRfU2NzaV9DbW5kKChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZCwgbSk7CisJCWxwcmludF9TY3NpX0NtbmQoKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZCwgbSk7CiAJU1BSSU5URigic2NzaSVkOiBpc3N1ZV9xdWV1ZVxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCWZvciAocHRyID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWU7IHB0cjsgcHRyID0gKFNjc2lfQ21uZCAqKSBwdHItPmhvc3Rfc2NyaWJibGUpCisJZm9yIChwdHIgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWU7IHB0cjsgcHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgcHRyLT5ob3N0X3NjcmliYmxlKQogCQlscHJpbnRfU2NzaV9DbW5kKHB0ciwgbSk7CiAKIAlTUFJJTlRGKCJzY3NpJWQ6IGRpc2Nvbm5lY3RlZF9xdWV1ZVxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCWZvciAocHRyID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOyBwdHI7IHB0ciA9IChTY3NpX0NtbmQgKikgcHRyLT5ob3N0X3NjcmliYmxlKQorCWZvciAocHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOyBwdHIgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBwdHItPmhvc3Rfc2NyaWJibGUpCiAJCWxwcmludF9TY3NpX0NtbmQocHRyLCBtKTsKIAlzcGluX3VubG9ja19pcnEoaW5zdGFuY2UtPmhvc3RfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGxwcmludF9TY3NpX0NtbmQoU2NzaV9DbW5kICogY21kLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCitzdGF0aWMgdm9pZCBscHJpbnRfU2NzaV9DbW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgc3RydWN0IHNlcV9maWxlICptKQogewogCVNQUklOVEYoInNjc2klZCA6IGRlc3RpbmF0aW9uIHRhcmdldCAlZCwgbHVuICVsbHVcbiIsIGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X25vLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwogCVNQUklOVEYoIiAgICAgICAgY29tbWFuZCA9ICIpOwpAQCAtODM2LDE4ICs4MjksNiBAQAogCQogCUlOSVRfREVMQVlFRF9XT1JLKCZob3N0ZGF0YS0+Y29yb3V0aW5lLCBOQ1I1MzgwX21haW4pOwogCQotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7Ci0JCWhvc3RkYXRhLT50aW1lX3JlYWRbaV0gPSAwOwotCQlob3N0ZGF0YS0+dGltZV93cml0ZVtpXSA9IDA7Ci0JCWhvc3RkYXRhLT5ieXRlc19yZWFkW2ldID0gMDsKLQkJaG9zdGRhdGEtPmJ5dGVzX3dyaXRlW2ldID0gMDsKLQl9Ci0JaG9zdGRhdGEtPnRpbWViYXNlID0gMDsKLQlob3N0ZGF0YS0+cGVuZGluZ3cgPSAwOwotCWhvc3RkYXRhLT5wZW5kaW5nciA9IDA7Ci0jZW5kaWYKLQogCS8qIFRoZSBDSEVDSyBjb2RlIHNlZW1zIHRvIGJyZWFrIHRoZSA1M0M0MDAuIFdpbGwgY2hlY2sgaXQgbGF0ZXIgbWF5YmUgKi8KIAlpZiAoZmxhZ3MgJiBGTEFHX05DUjUzQzQwMCkKIAkJaG9zdGRhdGEtPmZsYWdzID0gRkxBR19IQVNfTEFTVF9CWVRFX1NFTlQgfCBmbGFnczsKQEAgLTg1NywxMSArODM4LDcgQEAKIAlob3N0ZGF0YS0+aG9zdCA9IGluc3RhbmNlOwogCWhvc3RkYXRhLT50aW1lX2V4cGlyZXMgPSAwOwogCi0jaWZuZGVmIEFVVE9TRU5TRQotCWlmICgoaW5zdGFuY2UtPmNtZF9wZXJfbHVuID4gMSkgfHwgaW5zdGFuY2UtPmNhbl9xdWV1ZSA+IDEpCi0JCSAgICBwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQgOiBXQVJOSU5HIDogc3VwcG9ydCBmb3IgbXVsdGlwbGUgb3V0c3RhbmRpbmcgY29tbWFuZHMgZW5hYmxlZFxuIiAiICAgICAgICAgd2l0aG91dCBBVVRPU0VOU0Ugb3B0aW9uLCBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9ucyBtYXlcbiIKLQkJICAgIAkgICAiICAgICAgICAgYmUgaW5jb3JyZWN0bHkgY2xlYXJlZC5cbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLSNlbmRpZgkJCQkvKiBkZWYgQVVUT1NFTlNFICovCisJcHJlcGFyZV9pbmZvKGluc3RhbmNlKTsKIAogCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7CiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7CkBAIC05MzUsMTEgKzkxMiwxMSBAQAogICoJTG9ja3M6IGhvc3QgbG9jayB0YWtlbiBieSBjYWxsZXIKICAqLwogCi1zdGF0aWMgaW50IE5DUjUzODBfcXVldWVfY29tbWFuZF9sY2soU2NzaV9DbW5kICogY21kLCB2b2lkICgqZG9uZSkgKFNjc2lfQ21uZCAqKSkKK3N0YXRpYyBpbnQgTkNSNTM4MF9xdWV1ZV9jb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKSBpbnN0YW5jZS0+aG9zdGRhdGE7Ci0JU2NzaV9DbW5kICp0bXA7CisJc3RydWN0IHNjc2lfY21uZCAqdG1wOwogCiAjaWYgKE5ERUJVRyAmIE5ERUJVR19OT19XUklURSkKIAlzd2l0Y2ggKGNtZC0+Y21uZFswXSkgewpAQCAtOTUyLDI1ICs5MjksNiBAQAogCX0KICNlbmRpZgkJCQkvKiAoTkRFQlVHICYgTkRFQlVHX05PX1dSSVRFKSAqLwogCi0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCXN3aXRjaCAoY21kLT5jbW5kWzBdKSB7Ci0JCWNhc2UgV1JJVEU6Ci0JCWNhc2UgV1JJVEVfNjoKLQkJY2FzZSBXUklURV8xMDoKLQkJCWhvc3RkYXRhLT50aW1lX3dyaXRlW2NtZC0+ZGV2aWNlLT5pZF0gLT0gKGppZmZpZXMgLSBob3N0ZGF0YS0+dGltZWJhc2UpOwotCQkJaG9zdGRhdGEtPmJ5dGVzX3dyaXRlW2NtZC0+ZGV2aWNlLT5pZF0gKz0gc2NzaV9idWZmbGVuKGNtZCk7Ci0JCQlob3N0ZGF0YS0+cGVuZGluZ3crKzsKLQkJCWJyZWFrOwotCQljYXNlIFJFQUQ6Ci0JCWNhc2UgUkVBRF82OgotCQljYXNlIFJFQURfMTA6Ci0JCQlob3N0ZGF0YS0+dGltZV9yZWFkW2NtZC0+ZGV2aWNlLT5pZF0gLT0gKGppZmZpZXMgLSBob3N0ZGF0YS0+dGltZWJhc2UpOwotCQkJaG9zdGRhdGEtPmJ5dGVzX3JlYWRbY21kLT5kZXZpY2UtPmlkXSArPSBzY3NpX2J1ZmZsZW4oY21kKTsKLQkJCWhvc3RkYXRhLT5wZW5kaW5ncisrOwotCQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0KIAkvKiAKIAkgKiBXZSB1c2UgdGhlIGhvc3Rfc2NyaWJibGUgZmllbGQgYXMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGNvbW1hbmQgIAogCSAqIGluIGEgcXVldWUgCkBAIC05OTIsNyArOTUwLDcgQEAKIAkJY21kLT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOwogCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBjbWQ7CiAJfSBlbHNlIHsKLQkJZm9yICh0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgdG1wLT5ob3N0X3NjcmliYmxlOyB0bXAgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSk7CisJCWZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyB0bXAtPmhvc3Rfc2NyaWJibGU7IHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSk7CiAJCUxJU1QoY21kLCB0bXApOwogCQl0bXAtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSBjbWQ7CiAJfQpAQCAtMTAyMyw3ICs5ODEsNyBAQAogCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSwgY29yb3V0aW5lLndvcmspOwogCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gaG9zdGRhdGEtPmhvc3Q7Ci0JU2NzaV9DbW5kICp0bXAsICpwcmV2OworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcCwgKnByZXY7CiAJaW50IGRvbmU7CiAJCiAJc3Bpbl9sb2NrX2lycShpbnN0YW5jZS0+aG9zdF9sb2NrKTsKQEAgLTEwMzYsNyArOTk0LDcgQEAKIAkJCSAqIFNlYXJjaCB0aHJvdWdoIHRoZSBpc3N1ZV9xdWV1ZSBmb3IgYSBjb21tYW5kIGRlc3RpbmVkCiAJCQkgKiBmb3IgYSB0YXJnZXQgdGhhdCdzIG5vdCBidXN5LgogCQkJICovCi0JCQlmb3IgKHRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLCBwcmV2ID0gTlVMTDsgdG1wOyBwcmV2ID0gdG1wLCB0bXAgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkgCisJCQlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwgcHJldiA9IE5VTEw7IHRtcDsgcHJldiA9IHRtcCwgdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlKQogCQkJewogCQkJCWlmIChwcmV2ICE9IHRtcCkKIAkJCQkgICAgZHByaW50ayhOREVCVUdfTElTVFMsICJNQUlOIHRtcD0lcCAgIHRhcmdldD0lZCAgIGJ1c3k9JWQgbHVuPSVsbHVcbiIsIHRtcCwgdG1wLT5kZXZpY2UtPmlkLCBob3N0ZGF0YS0+YnVzeVt0bXAtPmRldmljZS0+aWRdLCB0bXAtPmRldmljZS0+bHVuKTsKQEAgLTEwNDgsNyArMTAwNiw3IEBACiAJCQkJCQlwcmV2LT5ob3N0X3NjcmliYmxlID0gdG1wLT5ob3N0X3NjcmliYmxlOwogCQkJCQl9IGVsc2UgewogCQkJCQkJUkVNT1ZFKC0xLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUsIHRtcCwgdG1wLT5ob3N0X3NjcmliYmxlKTsKLQkJCQkJCWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IChTY3NpX0NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlOworCQkJCQkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlOwogCQkJCQl9CiAJCQkJCXRtcC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAKQEAgLTEwNzMsMTQgKzEwMzEsMTQgQEAKIAkJCQkJaG9zdGRhdGEtPnNlbGVjdGluZyA9IE5VTEw7CiAJCQkJCS8qIFJ2QzogaGF2ZSB0byBwcmVzZXQgdGhpcyB0byBpbmRpY2F0ZSBhIG5ldyBjb21tYW5kIGlzIGJlaW5nIHBlcmZvcm1lZCAqLwogCi0JCQkJCWlmICghTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIHRtcCwKLQkJCQkJCQkgICAgLyogCi0JCQkJCQkJICAgICAqIFJFUVVFU1QgU0VOU0UgY29tbWFuZHMgYXJlIGlzc3VlZCB3aXRob3V0IHRhZ2dlZAotCQkJCQkJCSAgICAgKiBxdWV1ZWluZywgZXZlbiBvbiBTQ1NJLUlJIGRldmljZXMgYmVjYXVzZSB0aGUgCi0JCQkJCQkJICAgICAqIGNvbnRpbmdlbnQgYWxsZWdpYW5jZSBjb25kaXRpb24gZXhpc3RzIGZvciB0aGUgCi0JCQkJCQkJICAgICAqIGVudGlyZSB1bml0LgotCQkJCQkJCSAgICAgKi8KLQkJCQkJCQkgICAgKHRtcC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSA/IFRBR19OT05FIDogVEFHX05FWFQpKSB7CisJCQkJCS8qCisJCQkJCSAqIFJFUVVFU1QgU0VOU0UgY29tbWFuZHMgYXJlIGlzc3VlZCB3aXRob3V0IHRhZ2dlZAorCQkJCQkgKiBxdWV1ZWluZywgZXZlbiBvbiBTQ1NJLUlJIGRldmljZXMgYmVjYXVzZSB0aGUKKwkJCQkJICogY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbiBleGlzdHMgZm9yIHRoZQorCQkJCQkgKiBlbnRpcmUgdW5pdC4KKwkJCQkJICovCisKKwkJCQkJaWYgKCFOQ1I1MzgwX3NlbGVjdChpbnN0YW5jZSwgdG1wKSkgewogCQkJCQkJYnJlYWs7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQlMSVNUKHRtcCwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKTsKQEAgLTEwOTUsOSArMTA1Myw5IEBACiAJCQkvKiBleGl0ZWQgbG9ja2VkICovCiAJCX0JLyogaWYgKCFob3N0ZGF0YS0+Y29ubmVjdGVkKSAqLwogCQlpZiAoaG9zdGRhdGEtPnNlbGVjdGluZykgewotCQkJdG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+c2VsZWN0aW5nOworCQkJdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPnNlbGVjdGluZzsKIAkJCS8qIFNlbGVjdGlvbiB3aWxsIGRyb3AgYW5kIHJldGFrZSB0aGUgbG9jayAqLwotCQkJaWYgKCFOQ1I1MzgwX3NlbGVjdChpbnN0YW5jZSwgdG1wLCAodG1wLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpID8gVEFHX05PTkUgOiBUQUdfTkVYVCkpIHsKKwkJCWlmICghTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIHRtcCkpIHsKIAkJCQkvKiBPayA/PyAqLwogCQkJfSBlbHNlIHsKIAkJCQkvKiBSdkM6IGRldmljZSBmYWlsZWQsIHNvIHdlIHdhaXQgYSBsb25nIHRpbWUKQEAgLTEyMTYsNDcgKzExNzQsMTYgQEAKIAogI2VuZGlmIAogCi0vKioKLSAqCWNvbGxlY3Rfc3RhdHMJCS0JY29sbGVjdCBzdGF0cyBvbiBhIHNjc2kgY29tbWFuZAotICoJQGhvc3RkYXRhOiBhZGFwdGVyIAotICoJQGNtZDogY29tbWFuZCBiZWluZyBpc3N1ZWQKLSAqCi0gKglVcGRhdGUgdGhlIHN0YXRpc3RpY2FsIGRhdGEgYnkgcGFyc2luZyB0aGUgY29tbWFuZCBpbiBxdWVzdGlvbgotICovCi0gCi1zdGF0aWMgdm9pZCBjb2xsZWN0X3N0YXRzKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSwgU2NzaV9DbW5kICogY21kKSAKLXsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0Jc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKLQljYXNlIFdSSVRFOgotCWNhc2UgV1JJVEVfNjoKLQljYXNlIFdSSVRFXzEwOgotCQlob3N0ZGF0YS0+dGltZV93cml0ZVtzY21kX2lkKGNtZCldICs9IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJaG9zdGRhdGEtPnBlbmRpbmd3LS07Ci0JCWJyZWFrOwotCWNhc2UgUkVBRDoKLQljYXNlIFJFQURfNjoKLQljYXNlIFJFQURfMTA6Ci0JCWhvc3RkYXRhLT50aW1lX3JlYWRbc2NtZF9pZChjbWQpXSArPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCWhvc3RkYXRhLT5wZW5kaW5nci0tOwotCQlicmVhazsKLQl9Ci0jZW5kaWYKLX0KLQotCiAvKiAKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfc2VsZWN0IChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgU2NzaV9DbW5kICpjbWQsIAotICogICAgICBpbnQgdGFnKTsKKyAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjc2lfY21uZCAqY21kKQogICoKICAqIFB1cnBvc2UgOiBlc3RhYmxpc2hlcyBJX1RfTCBvciBJX1RfTF9RIG5leHVzIGZvciBuZXcgb3IgZXhpc3RpbmcgY29tbWFuZCwKICAqICAgICAgaW5jbHVkaW5nIEFSQklUUkFUSU9OLCBTRUxFQ1RJT04sIGFuZCBpbml0aWFsIG1lc3NhZ2Ugb3V0IGZvciAKICAqICAgICAgSURFTlRJRlkgYW5kIHF1ZXVlIG1lc3NhZ2VzLiAKICAqCiAgKiBJbnB1dHMgOiBpbnN0YW5jZSAtIGluc3RhbnRpYXRpb24gb2YgdGhlIDUzODAgZHJpdmVyIG9uIHdoaWNoIHRoaXMgCi0gKiAgICAgIHRhcmdldCBsaXZlcywgY21kIC0gU0NTSSBjb21tYW5kIHRvIGV4ZWN1dGUsIHRhZyAtIHNldCB0byBUQUdfTkVYVCBmb3IgCi0gKiAgICAgIG5ldyB0YWcsIFRBR19OT05FIGZvciB1bnRhZ2dlZCBxdWV1ZWluZywgb3RoZXJ3aXNlIHNldCB0byB0aGUgdGFnIGZvciAKLSAqICAgICAgdGhlIGNvbW1hbmQgdGhhdCBpcyBwcmVzZW50bHkgY29ubmVjdGVkLgorICogICAgICB0YXJnZXQgbGl2ZXMsIGNtZCAtIFNDU0kgY29tbWFuZCB0byBleGVjdXRlLgogICogCiAgKiBSZXR1cm5zIDogLTEgaWYgc2VsZWN0aW9uIGNvdWxkIG5vdCBleGVjdXRlIGZvciBzb21lIHJlYXNvbiwKICAqICAgICAgMCBpZiBzZWxlY3Rpb24gc3VjY2VlZGVkIG9yIGZhaWxlZCBiZWNhdXNlIHRoZSB0YXJnZXQgCkBAIC0xMjc4LDcgKzEyMDUsNyBAQAogICoJTG9ja3M6IGNhbGxlciBob2xkcyBob3N0ZGF0YSBsb2NrIGluIElSUSBtb2RlCiAgKi8KICAKLXN0YXRpYyBpbnQgTkNSNTM4MF9zZWxlY3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIFNjc2lfQ21uZCAqIGNtZCwgaW50IHRhZykgCitzdGF0aWMgaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCk7CiAJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopIGluc3RhbmNlLT5ob3N0ZGF0YTsKQEAgLTE0NzYsNyArMTQwMyw2IEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJY21kLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKLQkJY29sbGVjdF9zdGF0cyhob3N0ZGF0YSwgY21kKTsKIAkJY21kLT5zY3NpX2RvbmUoY21kKTsKIAkJTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwogCQlkcHJpbnRrKE5ERUJVR19TRUxFQ1RJT04sICJzY3NpJWQgOiB0YXJnZXQgZGlkIG5vdCByZXNwb25kIHdpdGhpbiAyNTBtc1xuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwpAQCAtMTUxMyw3ICsxNDM5LDcgQEAKIAl9CiAKIAlkcHJpbnRrKE5ERUJVR19TRUxFQ1RJT04sICJzY3NpJWQgOiB0YXJnZXQgJWQgc2VsZWN0ZWQsIGdvaW5nIGludG8gTUVTU0FHRSBPVVQgcGhhc2UuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmlkKTsKLQl0bXBbMF0gPSBJREVOVElGWSgoKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkgPyAwIDogMSksIGNtZC0+ZGV2aWNlLT5sdW4pOworCXRtcFswXSA9IElERU5USUZZKCgoaW5zdGFuY2UtPmlycSA9PSBOT19JUlEpID8gMCA6IDEpLCBjbWQtPmRldmljZS0+bHVuKTsKIAogCWxlbiA9IDE7CiAJY21kLT50YWcgPSAwOwpAQCAtMjA4Niw3ICsyMDEyLDcgQEAKICNlbmRpZgogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CiAJdW5zaWduZWQgY2hhciBwaGFzZSwgdG1wLCBleHRlbmRlZF9tc2dbMTBdLCBvbGRfcGhhc2UgPSAweGZmOwotCVNjc2lfQ21uZCAqY21kID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkOworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQ7CiAJLyogUnZDOiB3ZSBuZWVkIHRvIHNldCB0aGUgZW5kIG9mIHRoZSBwb2xsaW5nIHRpbWUgKi8KIAl1bnNpZ25lZCBsb25nIHBvbGxfdGltZSA9IGppZmZpZXMgKyBVU0xFRVBfUE9MTDsKIApAQCAtMjIyOCw3ICsyMTU0LDYgQEAKIAkJCQkJY21kLT5uZXh0X2xpbmstPnRhZyA9IGNtZC0+dGFnOwogCQkJCQljbWQtPnJlc3VsdCA9IGNtZC0+U0NwLlN0YXR1cyB8IChjbWQtPlNDcC5NZXNzYWdlIDw8IDgpOwogCQkJCQlkcHJpbnRrKE5ERUJVR19MSU5LRUQsICJzY3NpJWQgOiB0YXJnZXQgJWQgbHVuICVsbHUgbGlua2VkIHJlcXVlc3QgZG9uZSwgY2FsbGluZyBzY3NpX2RvbmUoKS5cbiIsIGluc3RhbmNlLT5ob3N0X25vLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCQkJCQljb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOwogCQkJCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQkJCQljbWQgPSBob3N0ZGF0YS0+Y29ubmVjdGVkOwogCQkJCQlicmVhazsKQEAgLTIyNjMsNyArMjE4OCw2IEBACiAJCQkJCWVsc2UgaWYgKHN0YXR1c19ieXRlKGNtZC0+U0NwLlN0YXR1cykgIT0gR09PRCkKIAkJCQkJCWNtZC0+cmVzdWx0ID0gKGNtZC0+cmVzdWx0ICYgMHgwMGZmZmYpIHwgKERJRF9FUlJPUiA8PCAxNik7CiAKLSNpZmRlZiBBVVRPU0VOU0UKIAkJCQkJaWYgKChjbWQtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgJiYKIAkJCQkJCWhvc3RkYXRhLT5zZXMuY21kX2xlbikgewogCQkJCQkJc2NzaV9laF9yZXN0b3JlX2NtbmQoY21kLCAmaG9zdGRhdGEtPnNlcyk7CkBAIC0yMjc4LDEyICsyMjAyLDkgQEAKIAkJCQkJCUxJU1QoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwogCQkJCQkJY21kLT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKikKIAkJCQkJCSAgICBob3N0ZGF0YS0+aXNzdWVfcXVldWU7Ci0JCQkJCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSAoU2NzaV9DbW5kICopIGNtZDsKKwkJCQkJCWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNtZDsKIAkJCQkJCWRwcmludGsoTkRFQlVHX1FVRVVFUywgInNjc2klZCA6IFJFUVVFU1QgU0VOU0UgYWRkZWQgdG8gaGVhZCBvZiBpc3N1ZSBxdWV1ZVxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCQkJCQl9IGVsc2UKLSNlbmRpZgkJCQkvKiBkZWYgQVVUT1NFTlNFICovCi0JCQkJCXsKLQkJCQkJCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7CisJCQkJCX0gZWxzZSB7CiAJCQkJCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQkJCQl9CiAKQEAgLTI0MzAsNyArMjM1MSw2IEBACiAJCQkJCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJj0gfigxIDw8IChjbWQtPmRldmljZS0+bHVuICYgMHhGRikpOwogCQkJCQlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKIAkJCQkJY21kLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7Ci0JCQkJCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7CiAJCQkJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCQkJCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKIAkJCQkJcmV0dXJuOwpAQCAtMjQ3OSw3ICsyMzk5LDcgQEAKICAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX3Jlc2VsZWN0IChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKICAqCiAgKiBQdXJwb3NlIDogZG9lcyByZXNlbGVjdGlvbiwgaW5pdGlhbGl6aW5nIHRoZSBpbnN0YW5jZS0+Y29ubmVjdGVkIAotICogICAgICBmaWVsZCB0byBwb2ludCB0byB0aGUgU2NzaV9DbW5kIGZvciB3aGljaCB0aGUgSV9UX0wgb3IgSV9UX0xfUSAKKyAqICAgICAgZmllbGQgdG8gcG9pbnQgdG8gdGhlIHNjc2lfY21uZCBmb3Igd2hpY2ggdGhlIElfVF9MIG9yIElfVF9MX1EKICAqICAgICAgbmV4dXMgaGFzIGJlZW4gcmVlc3RhYmxpc2hlZCwKICAqICAgICAgCiAgKiBJbnB1dHMgOiBpbnN0YW5jZSAtIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIE5DUjUzODAuCkBAIC0yNDk2LDcgKzI0MTYsNyBAQAogCWludCBsZW47CiAJdW5zaWduZWQgY2hhciBtc2dbM107CiAJdW5zaWduZWQgY2hhciAqZGF0YTsKLQlTY3NpX0NtbmQgKnRtcCA9IE5VTEwsICpwcmV2OworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcCA9IE5VTEwsICpwcmV2OwogCWludCBhYm9ydCA9IDA7CiAJTkNSNTM4MF9zZXR1cChpbnN0YW5jZSk7CiAKQEAgLTI1NjIsNyArMjQ4Miw3IEBACiAJCSAqLwogCiAKLQkJZm9yICh0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUsIHByZXYgPSBOVUxMOyB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IChTY3NpX0NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlKQorCQlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUsIHByZXYgPSBOVUxMOyB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKIAkJCWlmICgodGFyZ2V0X21hc2sgPT0gKDEgPDwgdG1wLT5kZXZpY2UtPmlkKSkgJiYgKGx1biA9PSAodTgpdG1wLT5kZXZpY2UtPmx1bikKIAkJCSAgICApIHsKIAkJCQlpZiAocHJldikgewpAQCAtMjU3MCw3ICsyNDkwLDcgQEAKIAkJCQkJcHJldi0+aG9zdF9zY3JpYmJsZSA9IHRtcC0+aG9zdF9zY3JpYmJsZTsKIAkJCQl9IGVsc2UgewogCQkJCQlSRU1PVkUoLTEsIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUsIHRtcCwgdG1wLT5ob3N0X3NjcmliYmxlKTsKLQkJCQkJaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSA9IChTY3NpX0NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlOworCQkJCQlob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlOwogCQkJCX0KIAkJCQl0bXAtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCQkJCWJyZWFrOwpAQCAtMjYwMSw3ICsyNTIxLDcgQEAKICAqCiAgKiBJbnB1dHMgOiBpbnN0YW5jZSAtIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIE5DUjUzODAuCiAgKgotICogUmV0dXJucyA6IHBvaW50ZXIgdG8gdGhlIFNjc2lfQ21uZCBzdHJ1Y3R1cmUgZm9yIHdoaWNoIHRoZSBJX1RfTAorICogUmV0dXJucyA6IHBvaW50ZXIgdG8gdGhlIHNjc2lfY21uZCBzdHJ1Y3R1cmUgZm9yIHdoaWNoIHRoZSBJX1RfTAogICogICAgICBuZXh1cyBoYXMgYmVlbiByZWVzdGFibGlzaGVkLCBvbiBmYWlsdXJlIE5VTEwgaXMgcmV0dXJuZWQuCiAgKi8KIApAQCAtMjY0MywzMiArMjU2MywzMiBAQAogI2VuZGlmCQkJCS8qIGRlZiBSRUFMX0RNQSAqLwogCiAvKgotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9hYm9ydCAoU2NzaV9DbW5kICpjbWQpCisgKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX2Fib3J0IChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiAgKgogICogUHVycG9zZSA6IGFib3J0IGEgY29tbWFuZAogICoKLSAqIElucHV0cyA6IGNtZCAtIHRoZSBTY3NpX0NtbmQgdG8gYWJvcnQsIGNvZGUgLSBjb2RlIHRvIHNldCB0aGUgCi0gKiAgICAgIGhvc3QgYnl0ZSBvZiB0aGUgcmVzdWx0IGZpZWxkIHRvLCBpZiB6ZXJvIERJRF9BQk9SVEVEIGlzIAorICogSW5wdXRzIDogY21kIC0gdGhlIHNjc2lfY21uZCB0byBhYm9ydCwgY29kZSAtIGNvZGUgdG8gc2V0IHRoZQorICogICAgICBob3N0IGJ5dGUgb2YgdGhlIHJlc3VsdCBmaWVsZCB0bywgaWYgemVybyBESURfQUJPUlRFRCBpcwogICogICAgICB1c2VkLgogICoKLSAqIFJldHVybnMgOiAwIC0gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqIFJldHVybnMgOiBTVUNDRVNTIC0gc3VjY2VzcywgRkFJTEVEIG9uIGZhaWx1cmUuCiAgKgotICoJWFhYIC0gdGhlcmUgaXMgbm8gd2F5IHRvIGFib3J0IHRoZSBjb21tYW5kIHRoYXQgaXMgY3VycmVudGx5IAotICoJY29ubmVjdGVkLCB5b3UgaGF2ZSB0byB3YWl0IGZvciBpdCB0byBjb21wbGV0ZS4gIElmIHRoaXMgaXMgCisgKglYWFggLSB0aGVyZSBpcyBubyB3YXkgdG8gYWJvcnQgdGhlIGNvbW1hbmQgdGhhdCBpcyBjdXJyZW50bHkKKyAqCWNvbm5lY3RlZCwgeW91IGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuICBJZiB0aGlzIGlzCiAgKglhIHByb2JsZW0sIHdlIGNvdWxkIGltcGxlbWVudCBsb25nam1wKCkgLyBzZXRqbXAoKSwgc2V0am1wKCkKICAqCWNhbGxlZCB3aGVyZSB0aGUgbG9vcCBzdGFydGVkIGluIE5DUjUzODBfbWFpbigpLgogICoKICAqIExvY2tzOiBob3N0IGxvY2sgdGFrZW4gYnkgY2FsbGVyCiAgKi8KIAotc3RhdGljIGludCBOQ1I1MzgwX2Fib3J0KFNjc2lfQ21uZCAqIGNtZCkgeworc3RhdGljIGludCBOQ1I1MzgwX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKIAlOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKSBpbnN0YW5jZS0+aG9zdGRhdGE7Ci0JU2NzaV9DbW5kICp0bXAsICoqcHJldjsKLQkKLQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQgOiBhYm9ydGluZyBjb21tYW5kXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7Ci0Jc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CisJc3RydWN0IHNjc2lfY21uZCAqdG1wLCAqKnByZXY7CisKKwlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIGNtZCwgImFib3J0aW5nIGNvbW1hbmRcbiIpOwogCiAJTkNSNTM4MF9wcmludF9zdGF0dXMoaW5zdGFuY2UpOwogCkBAIC0yNzA0LDcgKzI2MjQsNyBAQAogICogYWJvcnRlZCBmbGFnIGFuZCBnZXQgYmFjayBpbnRvIG91ciBtYWluIGxvb3AuCiAgKi8KIAotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIFNVQ0NFU1M7CiAJfQogI2VuZGlmCiAKQEAgLTI3MTQsMTAgKzI2MzQsMTAgQEAKICAqLwogIAogCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkIDogYWJvcnQgZ29pbmcgaW50byBsb29wLlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCWZvciAocHJldiA9IChTY3NpX0NtbmQgKiopICYgKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSksIHRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyB0bXA7IHByZXYgPSAoU2NzaV9DbW5kICoqKSAmICh0bXAtPmhvc3Rfc2NyaWJibGUpLCB0bXAgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKKwlmb3IgKHByZXYgPSAoc3RydWN0IHNjc2lfY21uZCAqKikgJihob3N0ZGF0YS0+aXNzdWVfcXVldWUpLCB0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWU7IHRtcDsgcHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSAmKHRtcC0+aG9zdF9zY3JpYmJsZSksIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKIAkJaWYgKGNtZCA9PSB0bXApIHsKIAkJCVJFTU9WRSg1LCAqcHJldiwgdG1wLCB0bXAtPmhvc3Rfc2NyaWJibGUpOwotCQkJKCpwcmV2KSA9IChTY3NpX0NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlOworCQkJKCpwcmV2KSA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKIAkJCXRtcC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAJCQl0bXAtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKIAkJCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkIDogYWJvcnQgcmVtb3ZlZCBjb21tYW5kIGZyb20gaXNzdWUgcXVldWUuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CkBAIC0yNzcwLDIwICsyNjkwLDIwIEBACiAgKiBpdCBmcm9tIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUuCiAgKi8KIAotCWZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOyB0bXA7IHRtcCA9IChTY3NpX0NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlKQorCWZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgdG1wOyB0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpCiAJCWlmIChjbWQgPT0gdG1wKSB7CiAJCQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZCA6IGFib3J0aW5nIGRpc2Nvbm5lY3RlZCBjb21tYW5kLlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCi0JCQlpZiAoTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIGNtZCwgKGludCkgY21kLT50YWcpKQorCQkJaWYgKE5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCBjbWQpKQogCQkJCXJldHVybiBGQUlMRUQ7CiAJCQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZCA6IG5leHVzIHJlZXN0YWJsaXNoZWQuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAKIAkJCWRvX2Fib3J0KGluc3RhbmNlKTsKIAotCQkJZm9yIChwcmV2ID0gKFNjc2lfQ21uZCAqKikgJiAoaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSksIHRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgdG1wOyBwcmV2ID0gKFNjc2lfQ21uZCAqKikgJiAodG1wLT5ob3N0X3NjcmliYmxlKSwgdG1wID0gKFNjc2lfQ21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpCisJCQlmb3IgKHByZXYgPSAoc3RydWN0IHNjc2lfY21uZCAqKikgJihob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKSwgdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgdG1wOyBwcmV2ID0gKHN0cnVjdCBzY3NpX2NtbmQgKiopICYodG1wLT5ob3N0X3NjcmliYmxlKSwgdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlKQogCQkJCWlmIChjbWQgPT0gdG1wKSB7CiAJCQkJCVJFTU9WRSg1LCAqcHJldiwgdG1wLCB0bXAtPmhvc3Rfc2NyaWJibGUpOwotCQkJCQkqcHJldiA9IChTY3NpX0NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlOworCQkJCQkqcHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKIAkJCQkJdG1wLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAkJCQkJdG1wLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CiAJCQkJCXRtcC0+c2NzaV9kb25lKHRtcCk7CkBAIC0yODA2LDcgKzI3MjYsNyBAQAogCiAKIC8qIAotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9idXNfcmVzZXQgKFNjc2lfQ21uZCAqY21kKQorICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9idXNfcmVzZXQgKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKICAqIAogICogUHVycG9zZSA6IHJlc2V0IHRoZSBTQ1NJIGJ1cy4KICAqCkBAIC0yODE1LDcgKzI3MzUsNyBAQAogICogTG9ja3M6IGhvc3QgbG9jayB0YWtlbiBieSBjYWxsZXIKICAqLwogCi1zdGF0aWMgaW50IE5DUjUzODBfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqIGNtZCkKK3N0YXRpYyBpbnQgTkNSNTM4MF9idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gY21kLT5kZXZpY2UtPmhvc3Q7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmggYi9kcml2ZXJzL3Njc2kvTkNSNTM4MC5oCmluZGV4IGM3OWRkZmEuLjE2MjExMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmgKKysrIGIvZHJpdmVycy9zY3NpL05DUjUzODAuaApAQCAtNyw4ICs3LDYgQEAKICAqIAlkcmV3QGNvbG9yYWRvLmVkdQogICogICAgICArMSAoMzAzKSA2NjYtNTgzNgogICoKLSAqIERJU1RSSUJVVElPTiBSRUxFQVNFIDcKLSAqCiAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQgCiAgKgogICogTkNSIDUzODAgRmFtaWx5CkBAIC0yNSwxMyArMjMsNyBAQAogI2RlZmluZSBOQ1I1MzgwX0gKIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaWZkZWYgQVVUT1NFTlNFCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBOQ1I1MzgwX1BVQkxJQ19SRUxFQVNFIDcKLSNkZWZpbmUgTkNSNTNDNDAwX1BVQkxJQ19SRUxFQVNFIDIKIAogI2RlZmluZSBOREVCVUdfQVJCSVRSQVRJT04JMHgxCiAjZGVmaW5lIE5ERUJVR19BVVRPU0VOU0UJMHgyCkBAIC0yMjQsMzMgKzIxNiw0NCBAQAogI2RlZmluZSBESVNDT05ORUNUX0xPTkcJCTIKIAogLyogCi0gKiBUaGVzZSBhcmUgInNwZWNpYWwiIHZhbHVlcyBmb3IgdGhlIHRhZyBwYXJhbWV0ZXIgcGFzc2VkIHRvIE5DUjUzODBfc2VsZWN0LgorICogIlNwZWNpYWwiIHZhbHVlIGZvciB0aGUgKHVuc2lnbmVkIGNoYXIpIGNvbW1hbmQgdGFnLCB0byBpbmRpY2F0ZQorICogSV9UX0wgbmV4dXMgaW5zdGVhZCBvZiBJX1RfTF9RLgogICovCiAKLSNkZWZpbmUgVEFHX05FWFQJLTEJLyogVXNlIG5leHQgZnJlZSB0YWcgKi8KLSNkZWZpbmUgVEFHX05PTkUJLTIJLyogCi0JCQkJICogRXN0YWJsaXNoIElfVF9MIG5leHVzIGluc3RlYWQgb2YgSV9UX0xfUQotCQkJCSAqIGV2ZW4gb24gU0NTSS1JSSBkZXZpY2VzLgotCQkJCSAqLworI2RlZmluZSBUQUdfTk9ORQkweGZmCiAKIC8qCiAgKiBUaGVzZSBhcmUgInNwZWNpYWwiIHZhbHVlcyBmb3IgdGhlIGlycSBhbmQgZG1hX2NoYW5uZWwgZmllbGRzIG9mIHRoZSAKICAqIFNjc2lfSG9zdCBzdHJ1Y3R1cmUKICAqLwogCi0jZGVmaW5lIFNDU0lfSVJRX05PTkUJMjU1CiAjZGVmaW5lIERNQV9OT05FCTI1NQogI2RlZmluZSBJUlFfQVVUTwkyNTQKICNkZWZpbmUgRE1BX0FVVE8JMjU0CiAjZGVmaW5lIFBPUlRfQVVUTwkweGZmZmYJLyogYXV0b3Byb2JlIGlvIHBvcnQgZm9yIDUzYzQwMGEgKi8KIAorI2lmbmRlZiBOT19JUlEKKyNkZWZpbmUgTk9fSVJRCQkwCisjZW5kaWYKKwogI2RlZmluZSBGTEFHX0hBU19MQVNUX0JZVEVfU0VOVAkJMQkvKiBOQ1I1M2M4MSBvciBiZXR0ZXIgKi8KICNkZWZpbmUgRkxBR19DSEVDS19MQVNUX0JZVEVfU0VOVAkyCS8qIE9ubHkgdGVzdCBvbmNlICovCiAjZGVmaW5lIEZMQUdfTkNSNTNDNDAwCQkJNAkvKiBOQ1I1M2M0MDAgKi8KICNkZWZpbmUgRkxBR19OT19QU0VVRE9fRE1BCQk4CS8qIEluaGliaXQgRE1BICovCiAjZGVmaW5lIEZMQUdfRFRDMzE4MUUJCQkxNgkvKiBEVEMzMTgxRSAqLworI2RlZmluZSBGTEFHX0xBVEVfRE1BX1NFVFVQCQkzMgkvKiBTZXR1cCBOQ1IgYmVmb3JlIERNQSBIL1cgKi8KKyNkZWZpbmUgRkxBR19UQUdHRURfUVVFVUlORwkJNjQJLyogYXMgWDNUOS4yIHNwZWxsZWQgaXQgKi8KIAogI2lmbmRlZiBBU00KKworI2lmZGVmIFNVUFBPUlRfVEFHUworc3RydWN0IHRhZ19hbGxvYyB7CisJREVDTEFSRV9CSVRNQVAoYWxsb2NhdGVkLCBNQVhfVEFHUyk7CisJaW50IG5yX2FsbG9jYXRlZDsKKwlpbnQgcXVldWVfc2l6ZTsKK307CisjZW5kaWYKKwogc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgewogCU5DUjUzODBfaW1wbGVtZW50YXRpb25fZmllbGRzOwkJLyogaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgKi8KIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwkJCS8qIEhvc3QgYmFja3BvaW50ZXIgKi8KQEAgLTI2Myw5ICsyNjYsOSBAQAogCXZvbGF0aWxlIGludCBkbWFfbGVuOwkJCS8qIHJlcXVlc3RlZCBsZW5ndGggb2YgRE1BICovCiAjZW5kaWYKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGxhc3RfbWVzc2FnZTsJLyogbGFzdCBtZXNzYWdlIE9VVCAqLwotCXZvbGF0aWxlIFNjc2lfQ21uZCAqY29ubmVjdGVkOwkJLyogY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kICovCi0Jdm9sYXRpbGUgU2NzaV9DbW5kICppc3N1ZV9xdWV1ZTsJLyogd2FpdGluZyB0byBiZSBpc3N1ZWQgKi8KLQl2b2xhdGlsZSBTY3NpX0NtbmQgKmRpc2Nvbm5lY3RlZF9xdWV1ZTsJLyogd2FpdGluZyBmb3IgcmVjb25uZWN0ICovCisJdm9sYXRpbGUgc3RydWN0IHNjc2lfY21uZCAqY29ubmVjdGVkOwkvKiBjdXJyZW50bHkgY29ubmVjdGVkIGNvbW1hbmQgKi8KKwl2b2xhdGlsZSBzdHJ1Y3Qgc2NzaV9jbW5kICppc3N1ZV9xdWV1ZTsJLyogd2FpdGluZyB0byBiZSBpc3N1ZWQgKi8KKwl2b2xhdGlsZSBzdHJ1Y3Qgc2NzaV9jbW5kICpkaXNjb25uZWN0ZWRfcXVldWU7CS8qIHdhaXRpbmcgZm9yIHJlY29ubmVjdCAqLwogCXZvbGF0aWxlIGludCByZXN0YXJ0X3NlbGVjdDsJCS8qIHdlIGhhdmUgZGlzY29ubmVjdGVkLAogCQkJCQkJICAgdXNlZCB0byByZXN0YXJ0IAogCQkJCQkJICAgTkNSNTM4MF9zZWxlY3QoKSAqLwpAQCAtMjczLDE5ICsyNzYsMjEgQEAKIAlpbnQgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyB0aW1lX2V4cGlyZXM7CQkvKiBpbiBqaWZmaWVzLCBzZXQgcHJpb3IgdG8gc2xlZXBpbmcgKi8KIAlpbnQgc2VsZWN0X3RpbWU7CQkJLyogdGltZXIgaW4gc2VsZWN0IGZvciB0YXJnZXQgcmVzcG9uc2UgKi8KLQl2b2xhdGlsZSBTY3NpX0NtbmQgKnNlbGVjdGluZzsKKwl2b2xhdGlsZSBzdHJ1Y3Qgc2NzaV9jbW5kICpzZWxlY3Rpbmc7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjb3JvdXRpbmU7CQkvKiBvdXIgY28tcm91dGluZSAqLwotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQl1bnNpZ25lZCB0aW1lYmFzZTsJCQkvKiBCYXNlIGZvciB0aW1lIGNhbGNzICovCi0JbG9uZyB0aW1lX3JlYWRbOF07CQkJLyogdGltZSB0byBkbyByZWFkcyAqLwotCWxvbmcgdGltZV93cml0ZVs4XTsJCQkvKiB0aW1lIHRvIGRvIHdyaXRlcyAqLwotCXVuc2lnbmVkIGxvbmcgYnl0ZXNfcmVhZFs4XTsJCS8qIGJ5dGVzIHJlYWQgKi8KLQl1bnNpZ25lZCBsb25nIGJ5dGVzX3dyaXRlWzhdOwkJLyogYnl0ZXMgd3JpdHRlbiAqLwotCXVuc2lnbmVkIHBlbmRpbmdyOwotCXVuc2lnbmVkIHBlbmRpbmd3OwotI2VuZGlmCi0jaWZkZWYgQVVUT1NFTlNFCiAJc3RydWN0IHNjc2lfZWhfc2F2ZSBzZXM7CisJY2hhciBpbmZvWzI1Nl07CisJaW50IHJlYWRfb3ZlcnJ1bnM7ICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyB0byBjdXQgZnJvbSBhCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRyYW5zZmVyIHRvIGhhbmRsZSBjaGlwIG92ZXJydW5zICovCisJaW50IHJldGFpbl9kbWFfaW50cjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbWFpbl90YXNrOworCXZvbGF0aWxlIGludCBtYWluX3J1bm5pbmc7CisjaWZkZWYgU1VQUE9SVF9UQUdTCisJc3RydWN0IHRhZ19hbGxvYyBUYWdBbGxvY1s4XVs4XTsJLyogOCB0YXJnZXRzIGFuZCA4IExVTnMgKi8KKyNlbmRpZgorI2lmZGVmIFBTRVVET19ETUEKKwl1bnNpZ25lZCBzcGluX21heF9yOworCXVuc2lnbmVkIHNwaW5fbWF4X3c7CiAjZW5kaWYKIH07CiAKQEAgLTI5Niw3ICszMDEsOCBAQAogI2VuZGlmCiAKICNkZWZpbmUgZHByaW50ayhmbGcsIGZtdCwgLi4uKSBcCi0JZG8geyBpZiAoKE5ERUJVRykgJiAoZmxnKSkgcHJfZGVidWcoZm10LCAjIyBfX1ZBX0FSR1NfXyk7IH0gd2hpbGUgKDApCisJZG8geyBpZiAoKE5ERUJVRykgJiAoZmxnKSkgXAorCQlwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjIF9fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKIAogI2lmIE5ERUJVRwogI2RlZmluZSBOQ1I1MzgwX2RwcmludChmbGcsIGFyZykgXApAQCAtMzIwLDE3ICszMjYsOSBAQAogc3RhdGljIGlycXJldHVybl90IE5DUjUzODBfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogI2VuZGlmCiBzdGF0aWMgdm9pZCBOQ1I1MzgwX21haW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIE5DUjUzODBfcHJpbnRfb3B0aW9ucyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSk7Ci1zdGF0aWMgaW50IE5DUjUzODBfYWJvcnQoU2NzaV9DbW5kICogY21kKTsKLXN0YXRpYyBpbnQgTkNSNTM4MF9idXNfcmVzZXQoU2NzaV9DbW5kICogY21kKTsKLXN0YXRpYyBpbnQgTkNSNTM4MF9xdWV1ZV9jb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKiwgc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgTkNSNTM4MF9zaG93X2luZm8oc3RydWN0IHNlcV9maWxlICosCi0Jc3RydWN0IFNjc2lfSG9zdCAqKTsKLXN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgTkNSNTM4MF93cml0ZV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAotCWNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCk7Ci0KK3N0YXRpYyBjb25zdCBjaGFyICpOQ1I1MzgwX2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpOwogc3RhdGljIHZvaWQgTkNSNTM4MF9yZXNlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSk7Ci1zdGF0aWMgaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBTY3NpX0NtbmQgKiBjbWQsIGludCB0YWcpOworc3RhdGljIGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqY21kKTsKICNpZiBkZWZpbmVkKFBTRVVET19ETUEpIHx8IGRlZmluZWQoUkVBTF9ETUEpIHx8IGRlZmluZWQoUkVBTF9ETUFfUE9MTCkKIHN0YXRpYyBpbnQgTkNSNTM4MF90cmFuc2Zlcl9kbWEoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIHVuc2lnbmVkIGNoYXIgKnBoYXNlLCBpbnQgKmNvdW50LCB1bnNpZ25lZCBjaGFyICoqZGF0YSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKaW5kZXggNjgxNDM0ZS4uYjMyZTc3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKQEAgLTIxODEsNyArMjE4MSw3IEBACiAJCQkgIChmc2FfZGV2X3B0cltjaWRdLnNlbnNlX2RhdGEuc2Vuc2Vfa2V5ID09CiAJCQkgICBOT1RfUkVBRFkpKSB7CiAJCQkJc3dpdGNoIChzY3NpY21kLT5jbW5kWzBdKSB7Ci0JCQkJY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwkJCQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQkJCQlpZiAoIShkZXYtPnJhd19pb19pbnRlcmZhY2UpIHx8CiAJCQkJCSAgICAhKGRldi0+cmF3X2lvXzY0KSB8fAogCQkJCQkgICAgKChzY3NpY21kLT5jbW5kWzFdICYgMHgxZikgIT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpKQpAQCAtMjMwOSw3ICsyMzA5LDcgQEAKIAkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjc2ljbWQsICZpbnFfZGF0YSwgc2l6ZW9mKGlucV9kYXRhKSk7CiAJCXJldHVybiBhYWNfZ2V0X2NvbnRhaW5lcl9uYW1lKHNjc2ljbWQpOwogCX0KLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAJCWlmICghKGRldi0+cmF3X2lvX2ludGVyZmFjZSkgfHwKIAkJICAgICEoZGV2LT5yYXdfaW9fNjQpIHx8CiAJCSAgICAoKHNjc2ljbWQtPmNtbmRbMV0gJiAweDFmKSAhPSBTQUlfUkVBRF9DQVBBQ0lUWV8xNikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYwppbmRleCBhNzU5Y2IyLi5mZGNkZjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKQEAgLTQ2Miw5ICs0NjIsOSBAQAogCQkJZGVwdGggPSAyNTY7CiAJCWVsc2UgaWYgKGRlcHRoIDwgMikKIAkJCWRlcHRoID0gMjsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBkZXB0aCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoKTsKIAl9IGVsc2UKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgMSk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzgsMTIgKzQ3OCw4IEBACiAgKgl0b3RhbCBjYXBhY2l0eSBhbmQgdGhlIHF1ZXVlIGRlcHRoIHN1cHBvcnRlZCBieSB0aGUgdGFyZ2V0IGRldmljZS4KICAqLwogCi1zdGF0aWMgaW50IGFhY19jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgsCi0JCQkJICBpbnQgcmVhc29uKQorc3RhdGljIGludCBhYWNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQogewotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgJiYgKHNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLKSAmJgogCSAgICAoc2Rldl9jaGFubmVsKHNkZXYpID09IENPTlRBSU5FUl9DSEFOTkVMKSkgewogCQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBkZXY7CkBAIC01MDQsMTAgKzUwMCwxMCBAQAogCQkJZGVwdGggPSAyNTY7CiAJCWVsc2UgaWYgKGRlcHRoIDwgMikKIAkJCWRlcHRoID0gMjsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBkZXB0aCk7Ci0JfSBlbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIDEpOwotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKKwkJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoKTsKKwl9CisKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgMSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGFhY19zaG93X3JhaWRfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtNTU1LDcgKzU1MSw3IEBACiAJCUFBQ19EUklWRVJOQU1FLAogCQlob3N0LT5ob3N0X25vLCBzZGV2X2NoYW5uZWwoZGV2KSwgc2Rldl9pZChkZXYpLCBkZXYtPmx1bik7CiAJc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAJCWlmICghKGFhYy0+cmF3X2lvX2ludGVyZmFjZSkgfHwKIAkJICAgICEoYWFjLT5yYXdfaW9fNjQpIHx8CiAJCSAgICAoKGNtZC0+Y21uZFsxXSAmIDB4MWYpICE9IFNBSV9SRUFEX0NBUEFDSVRZXzE2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKaW5kZXggNDM3NjFjMS4uNjcxOWEzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKKysrIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKQEAgLTc3MDYsNyArNzcwNiw3IEBACiAJCQkJYXNjX2R2Yy0+Y2ZnLT5jYW5fdGFnZ2VkX3FuZyB8PSB0aWRfYml0OwogCQkJCWFzY19kdmMtPnVzZV90YWdnZWRfcW5nIHw9IHRpZF9iaXQ7CiAJCQl9Ci0JCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfT1JERVJFRF9UQUcsCisJCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCAKIAkJCQkJCWFzY19kdmMtPm1heF9kdmNfcW5nW3NkZXYtPmlkXSk7CiAJCX0KIAl9IGVsc2UgewpAQCAtNzcxNCw3ICs3NzE0LDYgQEAKIAkJCWFzY19kdmMtPmNmZy0+Y2FuX3RhZ2dlZF9xbmcgJj0gfnRpZF9iaXQ7CiAJCQlhc2NfZHZjLT51c2VfdGFnZ2VkX3FuZyAmPSB+dGlkX2JpdDsKIAkJfQotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBzZGV2LT5ob3N0LT5jbWRfcGVyX2x1bik7CiAJfQogCiAJaWYgKChzZGV2LT5sdW4gPT0gMCkgJiYKQEAgLTc4NDgsMTIgKzc4NDcsOCBAQAogCQl9CiAJfQogCi0JaWYgKChhZHZfZHZjLT50YWdxbmdfYWJsZSAmIHRpZG1hc2spICYmIHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLAotCQkJCQlhZHZfZHZjLT5tYXhfZHZjX3FuZyk7Ci0JfSBlbHNlIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOwotCX0KKwlpZiAoKGFkdl9kdmMtPnRhZ3FuZ19hYmxlICYgdGlkbWFzaykgJiYgc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgYWR2X2R2Yy0+bWF4X2R2Y19xbmcpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FoYTE1MnguYyBiL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKaW5kZXggZTc3YjcyZi4uMmI5NjBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FoYTE1MnguYworKysgYi9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCkBAIC0yMzAsNyArMjMwLDcgQEAKICAqCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gCisKICBzZWUgRG9jdW1lbnRhdGlvbi9zY3NpL2FoYTE1MngudHh0IGZvciBjb25maWd1cmF0aW9uIGRldGFpbHMKIAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjc5LDQ1ICsyNzksMTEgQEAKICNlcnJvciBkZWZpbmUgQVVUT0NPTkYgb3IgU0VUVVAwCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLSNkZWZpbmUgREVCVUdfREVGQVVMVCBkZWJ1Z19laAotCi0jZGVmaW5lIERQUklOVEsod2hlbixtc2dzLi4uKSBcCi0JZG8geyBpZihIT1NUREFUQShzaHBudCktPmRlYnVnICYgKHdoZW4pKSBwcmludGsobXNncyk7IH0gd2hpbGUoMCkKLQotI2RlZmluZSBET19MT0NLKGZsYWdzKQlcCi0JZG8geyBcCi0JCWlmKHNwaW5faXNfbG9ja2VkKCZRTE9DSykpIHsgXAotCQkJRFBSSU5USyhkZWJ1Z19pbnRyLCBERUJVR19MRUFEICIoJXM6JWQpIGFscmVhZHkgbG9ja2VkIGF0ICVzOiVkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBfX2Z1bmNfXywgX19MSU5FX18sIFFMT0NLRVIsIFFMT0NLRVJMKTsgXAotCQl9IFwKLQkJRFBSSU5USyhkZWJ1Z19sb2NraW5nLCBERUJVR19MRUFEICIoJXM6JWQpIGxvY2tpbmdcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIF9fZnVuY19fLCBfX0xJTkVfXyk7IFwKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJlFMT0NLLGZsYWdzKTsgXAotCQlEUFJJTlRLKGRlYnVnX2xvY2tpbmcsIERFQlVHX0xFQUQgIiglczolZCkgbG9ja2VkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCi0JCVFMT0NLRVI9X19mdW5jX187IFwKLQkJUUxPQ0tFUkw9X19MSU5FX187IFwKLQl9IHdoaWxlKDApCi0KLSNkZWZpbmUgRE9fVU5MT0NLKGZsYWdzKQlcCi0JZG8geyBcCi0JCURQUklOVEsoZGVidWdfbG9ja2luZywgREVCVUdfTEVBRCAiKCVzOiVkKSB1bmxvY2tpbmcgKGxvY2tlZCBhdCAlczolZClcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIF9fZnVuY19fLCBfX0xJTkVfXywgUUxPQ0tFUiwgUUxPQ0tFUkwpOyBcCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlFMT0NLLGZsYWdzKTsgXAotCQlEUFJJTlRLKGRlYnVnX2xvY2tpbmcsIERFQlVHX0xFQUQgIiglczolZCkgdW5sb2NrZWRcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIF9fZnVuY19fLCBfX0xJTkVfXyk7IFwKLQkJUUxPQ0tFUj0iKG5vdCBsb2NrZWQpIjsgXAotCQlRTE9DS0VSTD0wOyBcCi0JfSB3aGlsZSgwKQotCi0jZWxzZQotI2RlZmluZSBEUFJJTlRLKHdoZW4sbXNncy4uLikKICNkZWZpbmUJRE9fTE9DSyhmbGFncykJCXNwaW5fbG9ja19pcnFzYXZlKCZRTE9DSyxmbGFncykKICNkZWZpbmUJRE9fVU5MT0NLKGZsYWdzKQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZRTE9DSyxmbGFncykKLSNlbmRpZgogCiAjZGVmaW5lIExFQUQJCSIoc2NzaSVkOiVkOiVkKSAiCi0jZGVmaW5lIFdBUk5fTEVBRAlLRVJOX1dBUk5JTkcJTEVBRAogI2RlZmluZSBJTkZPX0xFQUQJS0VSTl9JTkZPCUxFQUQKLSNkZWZpbmUgTk9URV9MRUFECUtFUk5fTk9USUNFCUxFQUQKLSNkZWZpbmUgRVJSX0xFQUQJS0VSTl9FUlIJTEVBRAotI2RlZmluZSBERUJVR19MRUFECUtFUk5fREVCVUcJTEVBRAogI2RlZmluZSBDTURJTkZPKGNtZCkgXAogCQkJKGNtZCkgPyAoKGNtZCktPmRldmljZS0+aG9zdC0+aG9zdF9ubykgOiAtMSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgKGNtZCkgPyAoKGNtZCktPmRldmljZS0+aWQgJiAweDBmKSA6IC0xLCBcCkBAIC0zNDUsMTAgKzMxMSwxMCBAQAogCiBlbnVtIHsKIAlub3RfaXNzdWVkCT0gMHgwMDAxLAkvKiBjb21tYW5kIG5vdCB5ZXQgaXNzdWVkICovCi0Jc2VsZWN0aW5nCT0gMHgwMDAyLCAJLyogdGFyZ2V0IGlzIGJlZWluZyBzZWxlY3RlZCAqLworCXNlbGVjdGluZwk9IDB4MDAwMiwJLyogdGFyZ2V0IGlzIGJlaW5nIHNlbGVjdGVkICovCiAJaWRlbnRpZmllZAk9IDB4MDAwNCwJLyogSURFTlRJRlkgd2FzIHNlbnQgKi8KIAlkaXNjb25uZWN0ZWQJPSAweDAwMDgsCS8qIHRhcmdldCBkaXNjb25uZWN0ZWQgKi8KLQljb21wbGV0ZWQJPSAweDAwMTAsCS8qIHRhcmdldCBzZW50IENPTU1BTkQgQ09NUExFVEUgKi8gCisJY29tcGxldGVkCT0gMHgwMDEwLAkvKiB0YXJnZXQgc2VudCBDT01NQU5EIENPTVBMRVRFICovCiAJYWJvcnRlZAkJPSAweDAwMjAsCS8qIEFCT1JUIHdhcyBzZW50ICovCiAJcmVzZXR0ZWQJPSAweDAwNDAsCS8qIEJVUyBERVZJQ0UgUkVTRVQgd2FzIHNlbnQgKi8KIAlzcGlvcmR5CQk9IDB4MDA4MCwJLyogd2FpdGluZyBmb3IgU1BJT1JEWSB0byByYWlzZSAqLwpAQCAtMzk2LDcgKzM2Miw2IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZXh0dHJhbnMsIGludCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGV4dHRyYW5zLCJ1c2UgZXh0ZW5kZWQgdHJhbnNsYXRpb24iKTsKIAotI2lmICFkZWZpbmVkKEFIQTE1MlhfREVCVUcpCiBzdGF0aWMgaW50IGFoYTE1MnhbXSA9IHswLCAxMSwgNywgMSwgMSwgMCwgREVMQVlfREVGQVVMVCwgMH07CiBtb2R1bGVfcGFyYW1fYXJyYXkoYWhhMTUyeCwgaW50LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYWhhMTUyeCwgInBhcmFtZXRlcnMgZm9yIGZpcnN0IGNvbnRyb2xsZXIiKTsKQEAgLTQwNCwxOSArMzY5LDYgQEAKIHN0YXRpYyBpbnQgYWhhMTUyeDFbXSA9IHswLCAxMSwgNywgMSwgMSwgMCwgREVMQVlfREVGQVVMVCwgMH07CiBtb2R1bGVfcGFyYW1fYXJyYXkoYWhhMTUyeDEsIGludCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFoYTE1MngxLCAicGFyYW1ldGVycyBmb3Igc2Vjb25kIGNvbnRyb2xsZXIiKTsKLSNlbHNlCi1zdGF0aWMgaW50IGRlYnVnW10gPSB7REVCVUdfREVGQVVMVCwgREVCVUdfREVGQVVMVH07Ci1tb2R1bGVfcGFyYW1fYXJyYXkoZGVidWcsIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZmxhZ3MgZm9yIGRyaXZlciBkZWJ1Z2dpbmciKTsKLQotc3RhdGljIGludCBhaGExNTJ4W10gICA9IHswLCAxMSwgNywgMSwgMSwgMSwgREVMQVlfREVGQVVMVCwgMCwgREVCVUdfREVGQVVMVH07Ci1tb2R1bGVfcGFyYW1fYXJyYXkoYWhhMTUyeCwgaW50LCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoYWhhMTUyeCwgInBhcmFtZXRlcnMgZm9yIGZpcnN0IGNvbnRyb2xsZXIiKTsKLQotc3RhdGljIGludCBhaGExNTJ4MVtdICA9IHswLCAxMSwgNywgMSwgMSwgMSwgREVMQVlfREVGQVVMVCwgMCwgREVCVUdfREVGQVVMVH07Ci1tb2R1bGVfcGFyYW1fYXJyYXkoYWhhMTUyeDEsIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFoYTE1MngxLCAicGFyYW1ldGVycyBmb3Igc2Vjb25kIGNvbnRyb2xsZXIiKTsKLSNlbmRpZiAvKiAhZGVmaW5lZChBSEExNTJYX0RFQlVHKSAqLwogI2VuZGlmIC8qIE1PRFVMRSAqLwogCiAjaWZkZWYgX19JU0FQTlBfXwpAQCAtNDQ2LDcgKzM5OCw3IEBACiAvKgogICogaW50ZXJuYWwgc3RhdGVzIG9mIHRoZSBob3N0CiAgKgotICovIAorICovCiBlbnVtIGFoYTE1Mnhfc3RhdGUgewogCWlkbGU9MCwKIAl1bmtub3duLApAQCAtNDg1LDI0ICs0MzcsMTYgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJCS8qIGhvc3QgbG9jayAqLwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWNvbnN0IGNoYXIgKmxvY2tlcjsKLQkJLyogd2hpY2ggZnVuY3Rpb24gaGFzIHRoZSBsb2NrICovCi0JaW50IGxvY2tlcmw7CS8qIHdoZXJlIGRpZCBpdCBnZXQgaXQgKi8KLQotCWludCBkZWJ1ZzsJLyogY3VycmVudCBkZWJ1Z2dpbmcgc2V0dGluZyAqLwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKEFIQTE1MlhfU1RBVCkKLQlpbnQgICAgICAgICAgIHRvdGFsX2NvbW1hbmRzOworCWludAkgICAgICB0b3RhbF9jb21tYW5kczsKIAlpbnQJICAgICAgZGlzY29ubmVjdGlvbnM7CiAJaW50CSAgICAgIGJ1c2ZyZWVfd2l0aG91dF9hbnlfYWN0aW9uOwogCWludAkgICAgICBidXNmcmVlX3dpdGhvdXRfb2xkX2NvbW1hbmQ7CiAJaW50CSAgICAgIGJ1c2ZyZWVfd2l0aG91dF9uZXdfY29tbWFuZDsKIAlpbnQJICAgICAgYnVzZnJlZV93aXRob3V0X2RvbmVfY29tbWFuZDsKIAlpbnQJICAgICAgYnVzZnJlZV93aXRoX2NoZWNrX2NvbmRpdGlvbjsKLQlpbnQgICAgICAgICAgIGNvdW50W21heHN0YXRlXTsKLQlpbnQgICAgICAgICAgIGNvdW50X3RyYW5zW21heHN0YXRlXTsKKwlpbnQJICAgICAgY291bnRbbWF4c3RhdGVdOworCWludAkgICAgICBjb3VudF90cmFuc1ttYXhzdGF0ZV07CiAJdW5zaWduZWQgbG9uZyB0aW1lW21heHN0YXRlXTsKICNlbmRpZgogCkBAIC01MTQsNyArNDU4LDcgQEAKIAlpbnQgZGVsYXk7CQkvKiByZXNldCBvdXQgZGVsYXkgKi8KIAlpbnQgZXh0X3RyYW5zOwkJLyogZXh0ZW5kZWQgdHJhbnNsYXRpb24gZW5hYmxlZCAqLwogCi0JaW50IHN3aW50OyAJCS8qIHNvZnR3YXJlLWludGVycnVwdCB3YXMgZmlyZWQgZHVyaW5nIGRldGVjdCgpICovCisJaW50IHN3aW50OwkJLyogc29mdHdhcmUtaW50ZXJydXB0IHdhcyBmaXJlZCBkdXJpbmcgZGV0ZWN0KCkgKi8KIAlpbnQgc2VydmljZTsJCS8qIGJoIG5lZWRzIHRvIGJlIHJ1biAqLwogCWludCBpbl9pbnRyOwkJLyogYmggaXMgcnVubmluZyAqLwogCkBAIC01NDMsNyArNDg3LDcgQEAKIAl1bnNpZ25lZCBjaGFyIG1zZ2lbMjU2XTsKIAkJLyogcmVjZWl2ZWQgbWVzc2FnZSBieXRlcyAqLwogCi0JaW50IG1zZ29faSwgbXNnb19sZW47CQorCWludCBtc2dvX2ksIG1zZ29fbGVuOwogCQkvKiBudW1iZXIgb2Ygc2VudCBieXRlcyBhbmQgbGVuZ3RoIG9mIGN1cnJlbnQgbWVzc2FnZXMgKi8KIAl1bnNpZ25lZCBjaGFyIG1zZ29bMjU2XTsKIAkJLyogcGVuZGluZyBtZXNzYWdlcyAqLwpAQCAtNjg5LDcgKzYzMyw2IEBACiBzdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50LCBpbnQgZXJyb3IpOwogCiAvKiBkaWFnbm9zdGljcyAqLwotc3RhdGljIHZvaWQgZGlzcF9wb3J0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCk7CiBzdGF0aWMgdm9pZCBzaG93X2NvbW1hbmQoU2NzaV9DbW5kICogcHRyKTsKIHN0YXRpYyB2b2lkIHNob3dfcXVldWVzKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KTsKIHN0YXRpYyB2b2lkIGRpc3BfZW5pbnRyKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KTsKQEAgLTgxMiwxMCArNzU1LDYgQEAKIAlERUxBWSAgICAgICA9IHNldHVwLT5kZWxheTsKIAlFWFRfVFJBTlMgICA9IHNldHVwLT5leHRfdHJhbnM7CiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyA9IHNldHVwLT5kZWJ1ZzsKLSNlbmRpZgotCiAJU0VUUE9SVChTQ1NJSUQsIHNldHVwLT5zY3NpaWQgPDwgNCk7CiAJc2hwbnQtPnRoaXNfaWQgPSBzZXR1cC0+c2NzaWlkOwogCkBAIC05NDEsMzEgKzg4MCwyNCBAQAogICogc2V0dXAgY29udHJvbGxlciB0byBnZW5lcmF0ZSBpbnRlcnJ1cHRzIGRlcGVuZGluZwogICogb24gY3VycmVudCBzdGF0ZSAobG9jayBoYXMgdG8gYmUgYWNxdWlyZWQpCiAgKgotICovIAorICovCiBzdGF0aWMgaW50IHNldHVwX2V4cGVjdGVkX2ludGVycnVwdHMoc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7CiAJaWYoQ1VSUkVOVF9TQykgewogCQlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgfD0gMSA8PCAxNjsKLQkKKwogCQlpZihDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBzZWxlY3RpbmcpIHsKLQkJCURQUklOVEsoZGVidWdfaW50ciwgREVCVUdfTEVBRCAiZXhwZWN0aW5nOiAoc2VsZG8pIChzZWx0aW1vKSAoc2VsZGkpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKIAkJCVNFVFBPUlQoU1NUQVQxLCBTRUxUTyk7CiAJCQlTRVRQT1JUKFNJTU9ERTAsIEVOU0VMRE8gfCAoRElTQ09OTkVDVEVEX1NDID8gRU5TRUxESSA6IDApKTsKIAkJCVNFVFBPUlQoU0lNT0RFMSwgRU5TRUxUSU1PKTsKIAkJfSBlbHNlIHsKLQkJCURQUklOVEsoZGVidWdfaW50ciwgREVCVUdfTEVBRCAiZXhwZWN0aW5nOiAocGhhc2UgY2hhbmdlKSAoYnVzZnJlZSkgJXNcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIHNwaW9yZHkgPyAiKHNwaW9yZHkpIiA6ICIiKTsKIAkJCVNFVFBPUlQoU0lNT0RFMCwgKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIHNwaW9yZHkpID8gRU5TUElPUkRZIDogMCk7Ci0JCQlTRVRQT1JUKFNJTU9ERTEsIEVOUEhBU0VNSVMgfCBFTlNDU0lSU1QgfCBFTlNDU0lQRVJSIHwgRU5CVVNGUkVFKTsgCisJCQlTRVRQT1JUKFNJTU9ERTEsIEVOUEhBU0VNSVMgfCBFTlNDU0lSU1QgfCBFTlNDU0lQRVJSIHwgRU5CVVNGUkVFKTsKIAkJfQogCX0gZWxzZSBpZihTVEFURT09c2VsZGkpIHsKLQkJRFBSSU5USyhkZWJ1Z19pbnRyLCBERUJVR19MRUFEICJleHBlY3Rpbmc6IChwaGFzZSBjaGFuZ2UpIChpZGVudGlmeSlcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOwogCQlTRVRQT1JUKFNJTU9ERTAsIDApOwotCQlTRVRQT1JUKFNJTU9ERTEsIEVOUEhBU0VNSVMgfCBFTlNDU0lSU1QgfCBFTlNDU0lQRVJSIHwgRU5CVVNGUkVFKTsgCisJCVNFVFBPUlQoU0lNT0RFMSwgRU5QSEFTRU1JUyB8IEVOU0NTSVJTVCB8IEVOU0NTSVBFUlIgfCBFTkJVU0ZSRUUpOwogCX0gZWxzZSB7Ci0JCURQUklOVEsoZGVidWdfaW50ciwgREVCVUdfTEVBRCAiZXhwZWN0aW5nOiAlcyAlc1xuIiwKLQkJCUNNRElORk8oQ1VSUkVOVF9TQyksCi0JCQlESVNDT05ORUNURURfU0MgPyAiKHJlc2VsZWN0aW9uKSIgOiAiIiwKLQkJCUlTU1VFX1NDID8gIihidXNmcmVlKSIgOiAiIik7CiAJCVNFVFBPUlQoU0lNT0RFMCwgRElTQ09OTkVDVEVEX1NDID8gRU5TRUxESSA6IDApOwogCQlTRVRQT1JUKFNJTU9ERTEsIEVOU0NTSVJTVCB8ICggKElTU1VFX1NDfHxET05FX1NDKSA/IEVOQlVTRlJFRSA6IDApKTsKIAl9CkBAIC05NzcsNyArOTA5LDcgQEAKIH0KIAogCi0vKiAKKy8qCiAgKiAgUXVldWUgYSBjb21tYW5kIGFuZCBzZXR1cCBpbnRlcnJ1cHRzIGZvciBhIGZyZWUgYnVzLgogICovCiBzdGF0aWMgaW50IGFoYTE1MnhfaW50ZXJuYWxfcXVldWUoU2NzaV9DbW5kICpTQ3BudCwgc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRlLApAQCAtOTg2LDE1ICs5MTgsNiBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNocG50ID0gU0NwbnQtPmRldmljZS0+aG9zdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWlmIChIT1NUREFUQShzaHBudCktPmRlYnVnICYgZGVidWdfcXVldWUpIHsKLQkJcHJpbnRrKElORk9fTEVBRCAicXVldWU6ICVwOyBjbWRfbGVuPSVkIHBpZWNlcz0lZCBzaXplPSV1IGNtbmQ9IiwKLQkJICAgICAgIENNRElORk8oU0NwbnQpLCBTQ3BudCwgU0NwbnQtPmNtZF9sZW4sCi0JCSAgICAgICBzY3NpX3NnX2NvdW50KFNDcG50KSwgc2NzaV9idWZmbGVuKFNDcG50KSk7Ci0JCV9fc2NzaV9wcmludF9jb21tYW5kKFNDcG50LT5jbW5kKTsKLQl9Ci0jZW5kaWYKLQogCVNDcG50LT5zY3NpX2RvbmUJPSBkb25lOwogCVNDcG50LT5TQ3AucGhhc2UJPSBub3RfaXNzdWVkIHwgcGhhc2U7CiAJU0NwbnQtPlNDcC5TdGF0dXMJPSAweDE7IC8qIElsZWdhbCBzdGF0dXMgYnkgU0NTSSBzdGFuZGFyZCAqLwpAQCAtMTAwNCwxMyArOTI3LDEzIEBACiAKIAlpZihTQ3BudC0+U0NwLnBoYXNlICYgKHJlc2V0dGluZ3xjaGVja19jb25kaXRpb24pKSB7CiAJCWlmICghU0NwbnQtPmhvc3Rfc2NyaWJibGUgfHwgU0NTRU0oU0NwbnQpIHx8IFNDTkVYVChTQ3BudCkpIHsKLQkJCXByaW50ayhFUlJfTEVBRCAiY2Fubm90IHJldXNlIGNvbW1hbmRcbiIsIENNRElORk8oU0NwbnQpKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBTQ3BudCwgImNhbm5vdCByZXVzZSBjb21tYW5kXG4iKTsKIAkJCXJldHVybiBGQUlMRUQ7CiAJCX0KIAl9IGVsc2UgewogCQlTQ3BudC0+aG9zdF9zY3JpYmJsZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhaGExNTJ4X3NjZGF0YSksIEdGUF9BVE9NSUMpOwogCQlpZighU0NwbnQtPmhvc3Rfc2NyaWJibGUpIHsKLQkJCXByaW50ayhFUlJfTEVBRCAiYWxsb2NhdGlvbiBmYWlsZWRcbiIsIENNRElORk8oU0NwbnQpKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBTQ3BudCwgImFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJCXJldHVybiBGQUlMRUQ7CiAJCX0KIAl9CkBAIC0xMDY2LDE1ICs5ODksNiBAQAogICovCiBzdGF0aWMgaW50IGFoYTE1MnhfcXVldWVfbGNrKFNjc2lfQ21uZCAqU0NwbnQsIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpCiB7Ci0jaWYgMAotCWlmKCpTQ3BudC0+Y21uZCA9PSBSRVFVRVNUX1NFTlNFKSB7Ci0JCVNDcG50LT5yZXN1bHQgPSAwOwotCQlkb25lKFNDcG50KTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKLQogCXJldHVybiBhaGExNTJ4X2ludGVybmFsX3F1ZXVlKFNDcG50LCBOVUxMLCAwLCBkb25lKTsKIH0KIApAQCAtMTA4MiwxNSArOTk2LDEwIEBACiAKIAogLyoKLSAqICAKICAqCiAgKi8KIHN0YXRpYyB2b2lkIHJlc2V0X2RvbmUoU2NzaV9DbW5kICpTQ3BudCkKIHsKLSNpZiAwCi0Jc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQgPSBTQ3BudC0+aG9zdDsKLQlEUFJJTlRLKGRlYnVnX2VoLCBJTkZPX0xFQUQgInJlc2V0X2RvbmUgY2FsbGVkXG4iLCBDTURJTkZPKFNDcG50KSk7Ci0jZW5kaWYKIAlpZihTQ1NFTShTQ3BudCkpIHsKIAkJY29tcGxldGUoU0NTRU0oU0NwbnQpKTsKIAl9IGVsc2UgewpAQCAtMTEwOCwyMCArMTAxNywxMSBAQAogCVNjc2lfQ21uZCAqcHRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JaWYoSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyAmIGRlYnVnX2VoKSB7Ci0JCXByaW50ayhERUJVR19MRUFEICJhYm9ydCglcCkiLCBDTURJTkZPKFNDcG50KSwgU0NwbnQpOwotCQlzaG93X3F1ZXVlcyhzaHBudCk7Ci0JfQotI2VuZGlmCi0KIAlET19MT0NLKGZsYWdzKTsKIAogCXB0cj1yZW1vdmVfU0MoJklTU1VFX1NDLCBTQ3BudCk7CiAKIAlpZihwdHIpIHsKLQkJRFBSSU5USyhkZWJ1Z19laCwgREVCVUdfTEVBRCAibm90IHlldCBpc3N1ZWQgLSBTVUNDRVNTXG4iLCBDTURJTkZPKFNDcG50KSk7Ci0KIAkJSE9TVERBVEEoc2hwbnQpLT5jb21tYW5kcy0tOwogCQlpZiAoIUhPU1REQVRBKHNocG50KS0+Y29tbWFuZHMpCiAJCQlTRVRQT1JUKFBPUlRBLCAwKTsKQEAgLTExMzEsNyArMTAzMSw3IEBACiAJCVNDcG50LT5ob3N0X3NjcmliYmxlPU5VTEw7CiAKIAkJcmV0dXJuIFNVQ0NFU1M7Ci0JfSAKKwl9CiAKIAlET19VTkxPQ0soZmxhZ3MpOwogCkBAIC0xMTQyLDcgKzEwNDIsOCBAQAogCSAqCiAJICovCiAKLQlwcmludGsoRVJSX0xFQUQgImNhbm5vdCBhYm9ydCBydW5uaW5nIG9yIGRpc2Nvbm5lY3RlZCBjb21tYW5kXG4iLCBDTURJTkZPKFNDcG50KSk7CisJc2NtZF9wcmludGsoS0VSTl9FUlIsIFNDcG50LAorCQkgICAgImNhbm5vdCBhYm9ydCBydW5uaW5nIG9yIGRpc2Nvbm5lY3RlZCBjb21tYW5kXG4iKTsKIAogCXJldHVybiBGQUlMRUQ7CiB9CkBAIC0xMTYwLDE1ICsxMDYxLDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JaWYoSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyAmIGRlYnVnX2VoKSB7Ci0JCXByaW50ayhJTkZPX0xFQUQgImFoYTE1MnhfZGV2aWNlX3Jlc2V0KCVwKSIsIENNRElORk8oU0NwbnQpLCBTQ3BudCk7Ci0JCXNob3dfcXVldWVzKHNocG50KTsKLQl9Ci0jZW5kaWYKLQogCWlmKENVUlJFTlRfU0M9PVNDcG50KSB7Ci0JCXByaW50ayhFUlJfTEVBRCAiY2Fubm90IHJlc2V0IGN1cnJlbnQgZGV2aWNlXG4iLCBDTURJTkZPKFNDcG50KSk7CisJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBTQ3BudCwgImNhbm5vdCByZXNldCBjdXJyZW50IGRldmljZVxuIik7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCkBAIC0xMjA4LDcgKzExMDIsNyBAQAogCQl9IGVsc2UgaWYoZGlzY29ubmVjdGVkKSB7CiAJCQlhcHBlbmRfU0MoJkRJU0NPTk5FQ1RFRF9TQywgU0NwbnQpOwogCQl9Ci0JCisKIAkJcmV0ID0gRkFJTEVEOwogCX0KIApAQCAtMTIyNywxMiArMTEyMSwxMiBAQAogCQlpZihTQ0RBVEEocHRyKSkgewogCQkJbmV4dCA9IFNDTkVYVChwdHIpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKERFQlVHX0xFQUQgInF1ZXVlIGNvcnJ1cHRlZCBhdCAlcFxuIiwgQ01ESU5GTyhwdHIpLCBwdHIpOworCQkJc2NtZF9wcmludGsoS0VSTl9ERUJVRywgcHRyLAorCQkJCSAgICAicXVldWUgY29ycnVwdGVkIGF0ICVwXG4iLCBwdHIpOwogCQkJbmV4dCA9IE5VTEw7CiAJCX0KIAogCQlpZiAoIXB0ci0+ZGV2aWNlLT5zb2Z0X3Jlc2V0KSB7Ci0JCQlEUFJJTlRLKGRlYnVnX2VoLCBERUJVR19MRUFEICJkaXNjb25uZWN0ZWQgY29tbWFuZCAlcCByZW1vdmVkXG4iLCBDTURJTkZPKHB0ciksIHB0cik7CiAJCQlyZW1vdmVfU0MoU0NzLCBwdHIpOwogCQkJSE9TVERBVEEoc2hwbnQpLT5jb21tYW5kcy0tOwogCQkJa2ZyZWUocHRyLT5ob3N0X3NjcmliYmxlKTsKQEAgLTEyNTMsMjUgKzExNDcsMTQgQEAKIAogCURPX0xPQ0soZmxhZ3MpOwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWlmKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19laCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAic2NzaSVkOiBidXMgcmVzZXQiLCBzaHBudC0+aG9zdF9ubyk7Ci0JCXNob3dfcXVldWVzKHNocG50KTsKLQl9Ci0jZW5kaWYKLQogCWZyZWVfaGFyZF9yZXNldF9TQ3Moc2hwbnQsICZJU1NVRV9TQyk7CiAJZnJlZV9oYXJkX3Jlc2V0X1NDcyhzaHBudCwgJkRJU0NPTk5FQ1RFRF9TQyk7CiAKLQlEUFJJTlRLKGRlYnVnX2VoLCBLRVJOX0RFQlVHICJzY3NpJWQ6IHJlc2V0dGluZyBidXNcbiIsIHNocG50LT5ob3N0X25vKTsKLQogCVNFVFBPUlQoU0NTSVNFUSwgU0NTSVJTVE8pOwogCW1kZWxheSgyNTYpOwogCVNFVFBPUlQoU0NTSVNFUSwgMCk7CiAJbWRlbGF5KERFTEFZKTsKIAotCURQUklOVEsoZGVidWdfZWgsIEtFUk5fREVCVUcgInNjc2klZDogYnVzIHJlc2V0dGVkXG4iLCBzaHBudC0+aG9zdF9ubyk7Ci0KIAlzZXR1cF9leHBlY3RlZF9pbnRlcnJ1cHRzKHNocG50KTsKIAlpZihIT1NUREFUQShzaHBudCktPmNvbW1hbmRzPT0wKQogCQlTRVRQT1JUKFBPUlRBLCAwKTsKQEAgLTEzMzMsMTEgKzEyMTYsNyBAQAogICovCiBpbnQgYWhhMTUyeF9ob3N0X3Jlc2V0X2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7Ci0JRFBSSU5USyhkZWJ1Z19laCwgS0VSTl9ERUJVRyAic2NzaSVkOiBob3N0IHJlc2V0XG4iLCBzaHBudC0+aG9zdF9ubyk7Ci0KIAlhaGExNTJ4X2J1c19yZXNldF9ob3N0KHNocG50KTsKLQotCURQUklOVEsoZGVidWdfZWgsIEtFUk5fREVCVUcgInNjc2klZDogcmVzZXR0aW5nIHBvcnRzXG4iLCBzaHBudC0+aG9zdF9ubyk7CiAJcmVzZXRfcG9ydHMoc2hwbnQpOwogCiAJcmV0dXJuIFNVQ0NFU1M7CkBAIC0xMzQ1LDcgKzEyMjQsNyBAQAogCiAvKgogICogUmVzZXQgdGhlIGhvc3QgKGJ1cyBhbmQgY29udHJvbGxlcikKLSAqIAorICoKICAqLwogc3RhdGljIGludCBhaGExNTJ4X2hvc3RfcmVzZXQoU2NzaV9DbW5kICpTQ3BudCkKIHsKQEAgLTE0MTEsNyArMTI5MCw5IEBACiB7CiAJaWYgKENVUlJFTlRfU0MpIHsKIAkJaWYoRE9ORV9TQykKLQkJCXByaW50ayhFUlJfTEVBRCAidGhlcmUncyBhbHJlYWR5IGEgY29tcGxldGVkIGNvbW1hbmQgJXAgLSB3aWxsIGNhdXNlIGFib3J0XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBET05FX1NDKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLAorCQkJCSAgICAidGhlcmUncyBhbHJlYWR5IGEgY29tcGxldGVkIGNvbW1hbmQgJXAgIgorCQkJCSAgICAiLSB3aWxsIGNhdXNlIGFib3J0XG4iLCBET05FX1NDKTsKIAogCQlET05FX1NDID0gQ1VSUkVOVF9TQzsKIAkJQ1VSUkVOVF9TQyA9IE5VTEw7CkBAIC0xNDY2LDcgKzEzNDcsNyBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiggVEVTVExPKERNQVNUQVQsIElOVFNUQVQpICkKLQkJcmV0dXJuIElSUV9OT05FOwkKKwkJcmV0dXJuIElSUV9OT05FOwogCiAJLyogbm8gbW9yZSBpbnRlcnJ1cHRzIGZyb20gdGhlIGNvbnRyb2xsZXIsIHdoaWxlIHdlJ3JlIGJ1c3kuCiAJICAgSU5URU4gaXMgcmVzdG9yZWQgYnkgdGhlIEJIIGhhbmRsZXIgKi8KQEAgLTE1MDEsNyArMTM4Miw3IEBACiAJU0VUUE9SVChTWEZSQ1RMMCwgQ0gxKTsKIAogCVNFVFBPUlQoU1NUQVQxLCBDTFJCVVNGUkVFKTsKLQkKKwogCWlmKENVUlJFTlRfU0MpIHsKICNpZiBkZWZpbmVkKEFIQTE1MlhfU1RBVCkKIAkJYWN0aW9uKys7CkBAIC0xNTEzLDE5ICsxMzk0LDEzIEBACiAJCQlkb25lKHNocG50LCAoQ1VSUkVOVF9TQy0+U0NwLlN0YXR1cyAmIDB4ZmYpIHwgKChDVVJSRU5UX1NDLT5TQ3AuTWVzc2FnZSAmIDB4ZmYpIDw8IDgpIHwgKERJRF9PSyA8PCAxNikpOwogCiAJCX0gZWxzZSBpZihDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBhYm9ydGVkKSB7Ci0JCQlEUFJJTlRLKGRlYnVnX2VoLCBERUJVR19MRUFEICJBQk9SVCBzZW50XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKIAkJCWRvbmUoc2hwbnQsIChDVVJSRU5UX1NDLT5TQ3AuU3RhdHVzICYgMHhmZikgfCAoKENVUlJFTlRfU0MtPlNDcC5NZXNzYWdlICYgMHhmZikgPDwgOCkgfCAoRElEX0FCT1JUIDw8IDE2KSk7CiAKIAkJfSBlbHNlIGlmKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIHJlc2V0dGVkKSB7Ci0JCQlEUFJJTlRLKGRlYnVnX2VoLCBERUJVR19MRUFEICJCVVMgREVWSUNFIFJFU0VUIHNlbnRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOwogCQkJZG9uZShzaHBudCwgKENVUlJFTlRfU0MtPlNDcC5TdGF0dXMgJiAweGZmKSB8ICgoQ1VSUkVOVF9TQy0+U0NwLk1lc3NhZ2UgJiAweGZmKSA8PCA4KSB8IChESURfUkVTRVQgPDwgMTYpKTsKIAogCQl9IGVsc2UgaWYoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgZGlzY29ubmVjdGVkKSB7CiAJCQkvKiB0YXJnZXQgc2VudCBESVNDT05ORUNUICovCi0JCQlEUFJJTlRLKGRlYnVnX3NlbGVjdGlvbiwgREVCVUdfTEVBRCAidGFyZ2V0IGRpc2Nvbm5lY3RlZCBhdCAlZC8lZFxuIiwKLQkJCQlDTURJTkZPKENVUlJFTlRfU0MpLAotCQkJCXNjc2lfZ2V0X3Jlc2lkKENVUlJFTlRfU0MpLAotCQkJCXNjc2lfYnVmZmxlbihDVVJSRU5UX1NDKSk7CiAjaWYgZGVmaW5lZChBSEExNTJYX1NUQVQpCiAJCQlIT1NUREFUQShzaHBudCktPmRpc2Nvbm5lY3Rpb25zKys7CiAjZW5kaWYKQEAgLTE1NTMsMTMgKzE0MjgsNiBAQAogCQkJc3RydWN0IHNjc2lfY21uZCAqY21kID0gSE9TVERBVEEoc2hwbnQpLT5kb25lX1NDOwogCQkJc3RydWN0IGFoYTE1Mnhfc2NkYXRhICpzYyA9IFNDREFUQShjbWQpOwogCi0jaWYgMAotCQkJaWYoSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyAmIGRlYnVnX2VoKSB7Ci0JCQkJcHJpbnRrKEVSUl9MRUFEICJyZWNlaXZlZCBzZW5zZTogIiwgQ01ESU5GTyhET05FX1NDKSk7Ci0JCQkJc2NzaV9wcmludF9zZW5zZSgiYmgiLCBET05FX1NDKTsKLQkJCX0KLSNlbmRpZgotCiAJCQlzY3NpX2VoX3Jlc3RvcmVfY21uZChjbWQsICZzYy0+c2VzKTsKIAogCQkJY21kLT5TQ3AuU3RhdHVzID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwpAQCAtMTU3MSwxNyArMTQzOSwxMSBAQAogI2lmIGRlZmluZWQoQUhBMTUyWF9TVEFUKQogCQkJSE9TVERBVEEoc2hwbnQpLT5idXNmcmVlX3dpdGhfY2hlY2tfY29uZGl0aW9uKys7CiAjZW5kaWYKLSNpZiAwCi0JCQlEUFJJTlRLKGRlYnVnX2VoLCBFUlJfTEVBRCAiQ0hFQ0sgQ09ORElUSU9OIGZvdW5kXG4iLCBDTURJTkZPKERPTkVfU0MpKTsKLSNlbmRpZgogCiAJCQlpZighKERPTkVfU0MtPlNDcC5waGFzZSAmIG5vdF9pc3N1ZWQpKSB7CiAJCQkJc3RydWN0IGFoYTE1Mnhfc2NkYXRhICpzYzsKIAkJCQlTY3NpX0NtbmQgKnB0ciA9IERPTkVfU0M7CiAJCQkJRE9ORV9TQz1OVUxMOwotI2lmIDAKLQkJCQlEUFJJTlRLKGRlYnVnX2VoLCBFUlJfTEVBRCAicmVxdWVzdGluZyBzZW5zZVxuIiwgQ01ESU5GTyhwdHIpKTsKLSNlbmRpZgogCiAJCQkJc2MgPSBTQ0RBVEEocHRyKTsKIAkJCQkvKiBJdCB3YXMgYWxsb2NhdGVkIGluIGFoYTE1MnhfaW50ZXJuYWxfcXVldWU/ICovCkBAIC0xNTkxLDE5ICsxNDUzLDEwIEBACiAJCQkJRE9fVU5MT0NLKGZsYWdzKTsKIAkJCQlhaGExNTJ4X2ludGVybmFsX3F1ZXVlKHB0ciwgTlVMTCwgY2hlY2tfY29uZGl0aW9uLCBwdHItPnNjc2lfZG9uZSk7CiAJCQkJRE9fTE9DSyhmbGFncyk7Ci0jaWYgMAotCQkJfSBlbHNlIHsKLQkJCQlEUFJJTlRLKGRlYnVnX2VoLCBFUlJfTEVBRCAiY29tbWFuZCBub3QgaXNzdWVkIC0gQ0hFQ0sgQ09ORElUSU9OIGlnbm9yZWRcbiIsIENNRElORk8oRE9ORV9TQykpOwotI2VuZGlmCiAJCQl9CiAJCX0KIAogCQlpZihET05FX1NDICYmIERPTkVfU0MtPnNjc2lfZG9uZSkgewotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQkJCWludCBob3N0bm89RE9ORV9TQy0+ZGV2aWNlLT5ob3N0LT5ob3N0X25vOwotCQkJaW50IGlkPURPTkVfU0MtPmRldmljZS0+aWQgJiAweGY7Ci0JCQlpbnQgbHVuPSgodTgpRE9ORV9TQy0+ZGV2aWNlLT5sdW4pICYgMHg3OwotI2VuZGlmCiAJCQlTY3NpX0NtbmQgKnB0ciA9IERPTkVfU0M7CiAJCQlET05FX1NDPU5VTEw7CiAKQEAgLTE2MTgsOSArMTQ3MSw3IEBACiAJCQl9CiAKIAkJCURPX1VOTE9DSyhmbGFncyk7Ci0JCQlEUFJJTlRLKGRlYnVnX2RvbmUsIERFQlVHX0xFQUQgImNhbGxpbmcgc2NzaV9kb25lKCVwKVxuIiwgaG9zdG5vLCBpZCwgbHVuLCBwdHIpOwotICAgICAgICAgICAgICAgIAlwdHItPnNjc2lfZG9uZShwdHIpOwotCQkJRFBSSU5USyhkZWJ1Z19kb25lLCBERUJVR19MRUFEICJzY3NpX2RvbmUoJXApIHJldHVybmVkXG4iLCBob3N0bm8sIGlkLCBsdW4sIHB0cik7CisJCQlwdHItPnNjc2lfZG9uZShwdHIpOwogCQkJRE9fTE9DSyhmbGFncyk7CiAJCX0KIApAQCAtMTY0MCw5ICsxNDkxLDcgQEAKICNpZiBkZWZpbmVkKEFIQTE1MlhfU1RBVCkKIAkJYWN0aW9uKys7CiAjZW5kaWYKLQkgICAgCUNVUlJFTlRfU0MtPlNDcC5waGFzZSB8PSBzZWxlY3Rpbmc7Ci0KLQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgInNlbGVjdGluZyB0YXJnZXRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgfD0gc2VsZWN0aW5nOwogCiAJCS8qIGNsZWFyIHNlbGVjdGlvbiB0aW1lb3V0ICovCiAJCVNFVFBPUlQoU1NUQVQxLCBTRUxUTyk7CkBAIC0xNjc0LDE4ICsxNTIzLDE5IEBACiAJU0VUUE9SVChTU1RBVDEsIENMUkJVU0ZSRUUpOwogCVNFVFBPUlQoU1NUQVQxLCBDTFJQSEFTRUNIRyk7CiAKLSAgICAJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICY9IH4oc2VsZWN0aW5nfG5vdF9pc3N1ZWQpOworCUNVUlJFTlRfU0MtPlNDcC5waGFzZSAmPSB+KHNlbGVjdGluZ3xub3RfaXNzdWVkKTsKIAogCVNFVFBPUlQoU0NTSVNFUSwgMCk7CiAKIAlpZiAoVEVTVExPKFNTVEFUMCwgU0VMRE8pKSB7Ci0JCXByaW50ayhFUlJfTEVBRCAiYWhhMTUyeDogcGFzc2luZyBidXMgZnJlZSBjb25kaXRpb25cbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCSAgICAiYWhhMTUyeDogcGFzc2luZyBidXMgZnJlZSBjb25kaXRpb25cbiIpOwogCQlkb25lKHNocG50LCBESURfTk9fQ09OTkVDVCA8PCAxNik7CiAJCXJldHVybjsKIAl9CiAKIAlTRVRQT1JUKFNTVEFUMCwgQ0xSU0VMRE8pOwotCQorCiAJQURETVNHTyhJREVOVElGWShSRUNPTk5FQ1QsIENVUlJFTlRfU0MtPmRldmljZS0+bHVuKSk7CiAKIAlpZiAoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgYWJvcnRpbmcpIHsKQEAgLTE2OTMsNyArMTU0Myw3IEBACiAJfSBlbHNlIGlmIChDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiByZXNldHRpbmcpIHsKIAkJQURETVNHTyhCVVNfREVWSUNFX1JFU0VUKTsKIAl9IGVsc2UgaWYgKFNZTkNORUc9PTAgJiYgU1lOQ0hST05PVVMpIHsKLSAgICAJCUNVUlJFTlRfU0MtPlNDcC5waGFzZSB8PSBzeW5jbmVnOworCQlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgfD0gc3luY25lZzsKIAkJTVNHT0xFTiArPSBzcGlfcG9wdWxhdGVfc3luY19tc2coJk1TR08oTVNHT0xFTiksIDUwLCA4KTsKIAkJU1lOQ05FRz0xOwkJLyogbmVnb3RpYXRpb24gaW4gcHJvZ3Jlc3MgKi8KIAl9CkBAIC0xNzA4LDI5ICsxNTU4LDIxIEBACiAgKi8KIHN0YXRpYyB2b2lkIHNlbHRvX3J1bihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKLQlTRVRQT1JUKFNDU0lTRVEsIDApOwkJCisJU0VUUE9SVChTQ1NJU0VRLCAwKTsKIAlTRVRQT1JUKFNTVEFUMSwgQ0xSU0VMVElNTyk7CiAKLQlEUFJJTlRLKGRlYnVnX3NlbGVjdGlvbiwgREVCVUdfTEVBRCAic2VsZWN0aW9uIHRpbWVvdXRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCi0JaWYoIUNVUlJFTlRfU0MpIHsKLQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgIiFDVVJSRU5UX1NDXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwlpZiAoIUNVUlJFTlRfU0MpCiAJCXJldHVybjsKLQl9CiAKLSAgICAJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICY9IH5zZWxlY3Rpbmc7CisJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICY9IH5zZWxlY3Rpbmc7CiAKLQlpZiAoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgYWJvcnRlZCkgewotCQlEUFJJTlRLKGRlYnVnX3NlbGVjdGlvbiwgREVCVUdfTEVBRCAiYWJvcnRlZFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJaWYgKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIGFib3J0ZWQpCiAJCWRvbmUoc2hwbnQsIERJRF9BQk9SVCA8PCAxNik7Ci0JfSBlbHNlIGlmIChURVNUTE8oU1NUQVQwLCBTRUxJTkdPKSkgewotCQlEUFJJTlRLKGRlYnVnX3NlbGVjdGlvbiwgREVCVUdfTEVBRCAiYXJiaXRyYXRpb24gbm90IHdvblxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJZWxzZSBpZiAoVEVTVExPKFNTVEFUMCwgU0VMSU5HTykpCiAJCWRvbmUoc2hwbnQsIERJRF9CVVNfQlVTWSA8PCAxNik7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCS8qIEFSQklUUkFUSU9OIHdvbiwgYnV0IFNFTEVDVElPTiBmYWlsZWQgKi8KLQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgInNlbGVjdGlvbiBmYWlsZWRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOwogCQlkb25lKHNocG50LCBESURfTk9fQ09OTkVDVCA8PCAxNik7Ci0JfQogfQogCiAvKgpAQCAtMTc1Myw5ICsxNTk1LDggQEAKIAogCWlmKENVUlJFTlRfU0MpIHsKIAkJaWYoIShDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBub3RfaXNzdWVkKSkKLQkJCXByaW50ayhFUlJfTEVBRCAiY29tbWFuZCBzaG91bGQgbm90IGhhdmUgYmVlbiBpc3N1ZWQgeWV0XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQotCQlEUFJJTlRLKGRlYnVnX3NlbGVjdGlvbiwgRVJSX0xFQUQgImNvbW1hbmQgcmVxdWV1ZWQgLSByZXNlbGVjdGlvblxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCQkgICAgImNvbW1hbmQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gaXNzdWVkIHlldFxuIik7CiAKIAkJRE9fTE9DSyhmbGFncyk7CiAJCWFwcGVuZF9TQygmSVNTVUVfU0MsIENVUlJFTlRfU0MpOwpAQCAtMTc2NCwxNyArMTYwNSwxNiBAQAogCQlDVVJSRU5UX1NDID0gTlVMTDsKIAl9CiAKLQlpZighRElTQ09OTkVDVEVEX1NDKSB7Ci0JCURQUklOVEsoZGVidWdfc2VsZWN0aW9uLCBERUJVR19MRUFEICJ1bmV4cGVjdGVkIFNFTERJICIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCWlmICghRElTQ09OTkVDVEVEX1NDKQogCQlyZXR1cm47Ci0JfQogCiAJUkVDT05OX1RBUkdFVD0tMTsKIAogCXNlbGlkID0gR0VUUE9SVChTRUxJRCkgJiB+KDEgPDwgc2hwbnQtPnRoaXNfaWQpOwogCiAJaWYgKHNlbGlkPT0wKSB7Ci0JCXByaW50aygiYWhhMTUyeCVkOiB0YXJnZXQgaWQgdW5rbm93biAoJTAyeClcbiIsIEhPU1ROTywgc2VsaWQpOworCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaHBudCwKKwkJCSAgICAgInRhcmdldCBpZCB1bmtub3duICglMDJ4KVxuIiwgc2VsaWQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNzgyLDggKzE2MjIsOCBAQAogCQk7CiAKIAlpZihzZWxpZCAmIH4oMSA8PCB0YXJnZXQpKSB7Ci0JCXByaW50aygiYWhhMTUyeCVkOiBtdWx0aXBsZSB0YXJnZXRzIHJlY29ubmVjdGVkICglMDJ4KVxuIiwKLQkJICAgICAgIEhPU1ROTywgc2VsaWQpOworCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaHBudCwKKwkJCSAgICAgIm11bHRpcGxlIHRhcmdldHMgcmVjb25uZWN0ZWQgKCUwMngpXG4iLCBzZWxpZCk7CiAJfQogCiAKQEAgLTE3OTMsNyArMTYzMyw2IEBACiAJU0VUUkFURShIT1NUREFUQShzaHBudCktPnN5bmNyYXRlW3RhcmdldF0pOwogCiAJUkVDT05OX1RBUkdFVD10YXJnZXQ7Ci0JRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgInRhcmdldCAlZCByZXNlbGVjdGVkICglMDJ4KS5cbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIHRhcmdldCwgc2VsaWQpOwogfQogCiAvKgpAQCAtMTgxNywzMSArMTY1NiwyNCBAQAogCQlpZihzc3RhdDEgJiAoUEhBU0VDSEd8UEhBU0VNSVN8QlVTRlJFRSkgfHwgIShzc3RhdDEgJiBSRVFJTklUKSkKIAkJCXJldHVybjsKIAotCQlpZihURVNUTE8oU1NUQVQwLFNQSU9SRFkpKSB7Ci0JCQlEUFJJTlRLKGRlYnVnX21zZ2ksIERFQlVHX0xFQUQgIiFTUElPUkRZXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJaWYgKFRFU1RMTyhTU1RBVDAsIFNQSU9SRFkpKQogCQkJcmV0dXJuOwotCQl9CQogCiAJCUFERE1TR0koR0VUUE9SVChTQ1NJREFUKSk7CiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCWlmIChIT1NUREFUQShzaHBudCktPmRlYnVnICYgZGVidWdfbXNnaSkgewotCQkJcHJpbnRrKElORk9fTEVBRCAiaW5ib3VuZCBtZXNzYWdlICUwMnggIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgTVNHSSgwKSk7Ci0JCQlzcGlfcHJpbnRfbXNnKCZNU0dJKDApKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQotI2VuZGlmCi0KIAkJaWYoIUNVUlJFTlRfU0MpIHsKIAkJCWlmKExBU1RTVEFURSE9c2VsZGkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgImFoYTE1MnglZDogbWVzc2FnZSBpbiB3L28gY3VycmVudCBjb21tYW5kIG5vdCBhZnRlciByZXNlbGVjdGlvblxuIiwgSE9TVE5PKTsKKwkJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHNocG50LAorCQkJCQkgICAgICJtZXNzYWdlIGluIHcvbyBjdXJyZW50IGNvbW1hbmQiCisJCQkJCSAgICAgIiBub3QgYWZ0ZXIgcmVzZWxlY3Rpb25cbiIpOwogCQkJfQogCiAJCQkvKgotCSAJIAkgKiBIYW5kbGUgcmVzZWxlY3Rpb24KLQkgCQkgKi8KKwkJCSAqIEhhbmRsZSByZXNlbGVjdGlvbgorCQkJICovCiAJCQlpZighKE1TR0koMCkgJiBJREVOVElGWV9CQVNFKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiYWhhMTUyeCVkOiB0YXJnZXQgZGlkbid0IGlkZW50aWZ5IGFmdGVyIHJlc2VsZWN0aW9uXG4iLCBIT1NUTk8pOworCQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgc2hwbnQsCisJCQkJCSAgICAgInRhcmdldCBkaWRuJ3QgaWRlbnRpZnkgYWZ0ZXIgcmVzZWxlY3Rpb25cbiIpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCkBAIC0xODQ5LDEyICsxNjgxLDEzIEBACiAKIAkJCWlmICghQ1VSUkVOVF9TQykgewogCQkJCXNob3dfcXVldWVzKHNocG50KTsKLQkJCQlwcmludGsoS0VSTl9FUlIgImFoYTE1MnglZDogbm8gZGlzY29ubmVjdGVkIGNvbW1hbmQgZm9yIHRhcmdldCAlZC8lZFxuIiwgSE9TVE5PLCBSRUNPTk5fVEFSR0VULCBNU0dJKDApICYgMHgzZik7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaHBudCwKKwkJCQkJICAgICAibm8gZGlzY29ubmVjdGVkIGNvbW1hbmQiCisJCQkJCSAgICAgIiBmb3IgdGFyZ2V0ICVkLyVkXG4iLAorCQkJCQkgICAgIFJFQ09OTl9UQVJHRVQsIE1TR0koMCkgJiAweDNmKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJRFBSSU5USyhkZWJ1Z19tc2dpLCBERUJVR19MRUFEICJ0YXJnZXQgcmVjb25uZWN0ZWRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCiAJCQlDVVJSRU5UX1NDLT5TQ3AuTWVzc2FnZSA9IE1TR0koMCk7CiAJCQlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJj0gfmRpc2Nvbm5lY3RlZDsKIApAQCAtMTg2MiwzMSArMTY5NSwzMiBAQAogCiAJCQkvKiBuZXh0IG1lc3NhZ2UgaWYgYW55ICovCiAJCQljb250aW51ZTsKLQkJfSAKKwkJfQogCiAJCUNVUlJFTlRfU0MtPlNDcC5NZXNzYWdlID0gTVNHSSgwKTsKIAogCQlzd2l0Y2ggKE1TR0koMCkpIHsKIAkJY2FzZSBESVNDT05ORUNUOgogCQkJaWYgKCFSRUNPTk5FQ1QpCi0JCQkJcHJpbnRrKFdBUk5fTEVBRCAidGFyZ2V0IHdhcyBub3QgYWxsb3dlZCB0byBkaXNjb25uZWN0XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJCQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIENVUlJFTlRfU0MsCisJCQkJCSAgICAidGFyZ2V0IHdhcyBub3QgYWxsb3dlZCB0byBkaXNjb25uZWN0XG4iKTsKIAogCQkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlIHw9IGRpc2Nvbm5lY3RlZDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQ09NTUFORF9DT01QTEVURToKLQkJCWlmKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIGNvbXBsZXRlZCkKLQkJCQlEUFJJTlRLKGRlYnVnX21zZ2ksIERFQlVHX0xFQUQgImFnYWluIENPTU1BTkQgQ09NUExFVEVcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCiAJCQlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgfD0gY29tcGxldGVkOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBNRVNTQUdFX1JFSkVDVDoKIAkJCWlmIChTWU5DTkVHPT0xKSB7Ci0JCQkJcHJpbnRrKElORk9fTEVBRCAiU3luY2hyb25vdXMgRGF0YSBUcmFuc2ZlciBSZXF1ZXN0IHdhcyByZWplY3RlZFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBDVVJSRU5UX1NDLAorCQkJCQkgICAgIlN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCIKKwkJCQkJICAgICIgd2FzIHJlamVjdGVkXG4iKTsKIAkJCQlTWU5DTkVHPTI7CS8qIG5lZ290aWF0aW9uIGNvbXBsZXRlZCAqLwogCQkJfSBlbHNlCi0JCQkJcHJpbnRrKElORk9fTEVBRCAiaW5ib3VuZCBtZXNzYWdlIChNRVNTQUdFIFJFSkVDVClcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgQ1VSUkVOVF9TQywKKwkJCQkJICAgICJpbmJvdW5kIG1lc3NhZ2UgKE1FU1NBR0UgUkVKRUNUKVxuIik7CiAJCQlicmVhazsKIAogCQljYXNlIFNBVkVfUE9JTlRFUlM6CkBAIC0xOTA3LDcgKzE3NDEsOCBAQAogCQkJCQlsb25nIHRpY2tzOwogCiAJCQkJCWlmIChNU0dJKDEpICE9IDMpIHsKLQkJCQkJCXByaW50ayhFUlJfTEVBRCAiU0RUUiBtZXNzYWdlIGxlbmd0aCE9M1xuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCQkJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCQkJCQkgICAgIlNEVFIgbWVzc2FnZSBsZW5ndGghPTNcbiIpOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIApAQCAtMTkyNCwxMCArMTc1OSwxMiBAQAogCQkJCQkJLyogbmVnb3RpYXRpb24gaW4gcHJvZ3Jlc3MgKi8KIAkJCQkJCWlmICh0aWNrcyA+IDkgfHwgTVNHSSg0KSA8IDEgfHwgTVNHSSg0KSA+IDgpIHsKIAkJCQkJCQlBRERNU0dPKE1FU1NBR0VfUkVKRUNUKTsKLQkJCQkJCQlwcmludGsoSU5GT19MRUFEICJyZWNlaXZlZCBTeW5jaHJvbm91cyBEYXRhIFRyYW5zZmVyIFJlcXVlc3QgaW52YWxpZCAtIHJlamVjdGVkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJCQkJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sCisJCQkJCQkJCSAgICBDVVJSRU5UX1NDLAorCQkJCQkJCQkgICAgInJlY2VpdmVkIFN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCBpbnZhbGlkIC0gcmVqZWN0ZWRcbiIpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJfQotCQkJCQkJCisKIAkJCQkJCVNZTkNSQVRFIHw9ICgodGlja3MgLSAyKSA8PCA0KSArIE1TR0koNCk7CiAJCQkJCX0gZWxzZSBpZiAodGlja3MgPD0gOSAmJiBNU0dJKDQpID49IDEpIHsKIAkJCQkJCUFERE1TR08oRVhURU5ERURfTUVTU0FHRSk7CkBAIC0xOTQ3LDExICsxNzg0LDE0IEBACiAJCQkJCQlTWU5DUkFURSB8PSAoKHRpY2tzIC0gMikgPDwgNCkgKyBNU0dJKDQpOwogCQkJCQl9IGVsc2UgewogCQkJCQkJLyogcmVxdWVzdGVkIFNEVFIgaXMgdG9vIHNsb3csIGRvIGl0IGFzeW5jaHJvbm91c2x5ICovCi0JCQkJCQlwcmludGsoSU5GT19MRUFEICJTeW5jaHJvbm91cyBEYXRhIFRyYW5zZmVyIFJlcXVlc3QgdG9vIHNsb3cgLSBSZWplY3RpbmdcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLAorCQkJCQkJCSAgICBDVVJSRU5UX1NDLAorCQkJCQkJCSAgICAiU3luY2hyb25vdXMgRGF0YSBUcmFuc2ZlciBSZXF1ZXN0IHRvbyBzbG93IC0gUmVqZWN0aW5nXG4iKTsKIAkJCQkJCUFERE1TR08oTUVTU0FHRV9SRUpFQ1QpOwogCQkJCQl9CiAKLQkJCQkJU1lOQ05FRz0yOwkJLyogbmVnb3RpYXRpb24gY29tcGxldGVkICovCisJCQkJCS8qIG5lZ290aWF0aW9uIGNvbXBsZXRlZCAqLworCQkJCQlTWU5DTkVHPTI7CiAJCQkJCVNFVFJBVEUoU1lOQ1JBVEUpOwogCQkJCX0KIAkJCQlicmVhazsKQEAgLTE5ODUsMTIgKzE4MjUsMTIgQEAKIHN0YXRpYyB2b2lkIG1zZ2lfZW5kKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewogCWlmKE1TR0lMRU4+MCkKLQkJcHJpbnRrKFdBUk5fTEVBRCAidGFyZ2V0IGxlZnQgYmVmb3JlIG1lc3NhZ2UgY29tcGxldGVkICglZClcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIE1TR0lMRU4pOworCQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIENVUlJFTlRfU0MsCisJCQkgICAgInRhcmdldCBsZWZ0IGJlZm9yZSBtZXNzYWdlIGNvbXBsZXRlZCAoJWQpXG4iLAorCQkJICAgIE1TR0lMRU4pOwogCi0JaWYgKE1TR09MRU4gPiAwICYmICEoR0VUUE9SVChTU1RBVDEpICYgQlVTRlJFRSkpIHsKLQkJRFBSSU5USyhkZWJ1Z19tc2dpLCBERUJVR19MRUFEICJtc2dvIHBlbmRpbmdcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCWlmIChNU0dPTEVOID4gMCAmJiAhKEdFVFBPUlQoU1NUQVQxKSAmIEJVU0ZSRUUpKQogCQlTRVRQT1JUKFNDU0lTSUcsIFBfTVNHSSB8IFNJR19BVE5PKTsKLQl9IAogfQogCiAvKgpAQCAtMjAwMywyMSArMTg0MywxMiBAQAogCQlpZigoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgc3luY25lZykgJiYgU1lOQ05FRz09MiAmJiBTWU5DUkFURT09MCkgewogCQkJQURETVNHTyhJREVOVElGWShSRUNPTk5FQ1QsIENVUlJFTlRfU0MtPmRldmljZS0+bHVuKSk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoSU5GT19MRUFEICJ1bmV4cGVjdGVkIE1FU1NBR0UgT1VUIHBoYXNlOyByZWplY3RpbmdcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBDVVJSRU5UX1NDLAorCQkJCSAgICAidW5leHBlY3RlZCBNRVNTQUdFIE9VVCBwaGFzZTsgcmVqZWN0aW5nXG4iKTsKIAkJCUFERE1TR08oTUVTU0FHRV9SRUpFQ1QpOwogCQl9CiAJfQogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWlmKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19tc2dvKSB7Ci0JCWludCBpOwotCi0JCXByaW50ayhERUJVR19MRUFEICJtZXNzYWdlcyggIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7Ci0JCWZvciAoaT0wOyBpPE1TR09MRU47IGkrPXNwaV9wcmludF9tc2coJk1TR08oaSkpLCBwcmludGsoIiAiKSkKLQkJCTsKLQkJcHJpbnRrKCIpXG4iKTsKLQl9Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTIwMjYsMTYgKzE4NTcsOSBAQAogICovCiBzdGF0aWMgdm9pZCBtc2dvX3J1bihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKLQlpZihNU0dPX0k9PU1TR09MRU4pCi0JCURQUklOVEsoZGVidWdfbXNnbywgREVCVUdfTEVBRCAibWVzc2FnZXMgYWxsIHNlbnQgKCVkLyVkKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgTVNHT19JLCBNU0dPTEVOKTsKLQogCXdoaWxlKE1TR09fSTxNU0dPTEVOKSB7Ci0JCURQUklOVEsoZGVidWdfbXNnbywgREVCVUdfTEVBRCAibWVzc2FnZSBieXRlICUwMnggKCVkLyVkKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgTVNHTyhNU0dPX0kpLCBNU0dPX0ksIE1TR09MRU4pOwotCi0JCWlmKFRFU1RMTyhTU1RBVDAsIFNQSU9SRFkpKSB7Ci0JCQlEUFJJTlRLKGRlYnVnX21zZ28sIERFQlVHX0xFQUQgIiFTUElPUkRZXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJaWYgKFRFU1RMTyhTU1RBVDAsIFNQSU9SRFkpKQogCQkJcmV0dXJuOwotCQl9CiAKIAkJaWYgKE1TR09fST09TVNHT0xFTi0xKSB7CiAJCQkvKiBMZWF2ZSBNRVNTQUdFIE9VVCBhZnRlciB0cmFuc2ZlciAqLwpAQCAtMjA1OSwzNiArMTg4MywzMyBAQAogc3RhdGljIHZvaWQgbXNnb19lbmQoc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7CiAJaWYoTVNHT19JPE1TR09MRU4pIHsKLQkJcHJpbnRrKEVSUl9MRUFEICJtZXNzYWdlIHNlbnQgaW5jb21wbGV0ZWx5ICglZC8lZClcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIE1TR09fSSwgTVNHT0xFTik7CisJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLAorCQkJICAgICJtZXNzYWdlIHNlbnQgaW5jb21wbGV0ZWx5ICglZC8lZClcbiIsCisJCQkgICAgTVNHT19JLCBNU0dPTEVOKTsKIAkJaWYoU1lOQ05FRz09MSkgewotCQkJcHJpbnRrKElORk9fTEVBRCAiU3luY2hyb25vdXMgRGF0YSBUcmFuc2ZlciBSZXF1ZXN0IHdhcyByZWplY3RlZFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIENVUlJFTlRfU0MsCisJCQkJICAgICJTeW5jaHJvbm91cyBEYXRhIFRyYW5zZmVyIFJlcXVlc3Qgd2FzIHJlamVjdGVkXG4iKTsKIAkJCVNZTkNORUc9MjsKIAkJfQogCX0KLQkJCisKIAlNU0dPX0kgID0gMDsKIAlNU0dPTEVOID0gMDsKIH0KIAotLyogCisvKgogICogY29tbWFuZCBwaGFzZQogICoKICAqLwogc3RhdGljIHZvaWQgY21kX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7CiAJaWYgKENVUlJFTlRfU0MtPlNDcC5zZW50X2NvbW1hbmQpIHsKLQkJcHJpbnRrKEVSUl9MRUFEICJjb21tYW5kIGFscmVhZHkgc2VudFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLAorCQkJICAgICJjb21tYW5kIGFscmVhZHkgc2VudFxuIik7CiAJCWRvbmUoc2hwbnQsIERJRF9FUlJPUiA8PCAxNik7CiAJCXJldHVybjsKIAl9CiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JaWYgKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19jbWQpIHsKLQkJcHJpbnRrKERFQlVHX0xFQUQgImNtZF9pbml0OiAiLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQkJX19zY3NpX3ByaW50X2NvbW1hbmQoQ1VSUkVOVF9TQy0+Y21uZCk7Ci0JfQotI2VuZGlmCi0KIAlDTURfST0wOwogfQogCkBAIC0yMDk4LDE4ICsxOTE5LDkgQEAKICAqLwogc3RhdGljIHZvaWQgY21kX3J1bihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKLQlpZihDTURfST09Q1VSUkVOVF9TQy0+Y21kX2xlbikgewotCQlEUFJJTlRLKGRlYnVnX2NtZCwgREVCVUdfTEVBRCAiY29tbWFuZCBhbHJlYWR5IGNvbXBsZXRlbHkgc2VudCAoJWQvJWQpIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgQ01EX0ksIENVUlJFTlRfU0MtPmNtZF9sZW4pOwotCQlkaXNwX3BvcnRzKHNocG50KTsKLQl9Ci0KIAl3aGlsZShDTURfSTxDVVJSRU5UX1NDLT5jbWRfbGVuKSB7Ci0JCURQUklOVEsoZGVidWdfY21kLCBERUJVR19MRUFEICJjb21tYW5kIGJ5dGUgJTAyeCAoJWQvJWQpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBDVVJSRU5UX1NDLT5jbW5kW0NNRF9JXSwgQ01EX0ksIENVUlJFTlRfU0MtPmNtZF9sZW4pOwotCi0JCWlmKFRFU1RMTyhTU1RBVDAsIFNQSU9SRFkpKSB7Ci0JCQlEUFJJTlRLKGRlYnVnX2NtZCwgREVCVUdfTEVBRCAiIVNQSU9SRFlcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQlpZiAoVEVTVExPKFNTVEFUMCwgU1BJT1JEWSkpCiAJCQlyZXR1cm47Ci0JCX0KIAogCQlTRVRQT1JUKFNDU0lEQVQsIENVUlJFTlRfU0MtPmNtbmRbQ01EX0krK10pOwogCX0KQEAgLTIxMTgsNyArMTkzMCw5IEBACiBzdGF0aWMgdm9pZCBjbWRfZW5kKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewogCWlmKENNRF9JPENVUlJFTlRfU0MtPmNtZF9sZW4pCi0JCXByaW50ayhFUlJfTEVBRCAiY29tbWFuZCBzZW50IGluY29tcGxldGVseSAoJWQvJWQpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBDTURfSSwgQ1VSUkVOVF9TQy0+Y21kX2xlbik7CisJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLAorCQkJICAgICJjb21tYW5kIHNlbnQgaW5jb21wbGV0ZWx5ICglZC8lZClcbiIsCisJCQkgICAgQ01EX0ksIENVUlJFTlRfU0MtPmNtZF9sZW4pOwogCWVsc2UKIAkJQ1VSUkVOVF9TQy0+U0NwLnNlbnRfY29tbWFuZCsrOwogfQpAQCAtMjEyOSwyMCArMTk0MywxMSBAQAogICovCiBzdGF0aWMgdm9pZCBzdGF0dXNfcnVuKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewotCWlmKFRFU1RMTyhTU1RBVDAsU1BJT1JEWSkpIHsKLQkJRFBSSU5USyhkZWJ1Z19zdGF0dXMsIERFQlVHX0xFQUQgIiFTUElPUkRZXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwlpZiAoVEVTVExPKFNTVEFUMCwgU1BJT1JEWSkpCiAJCXJldHVybjsKLQl9CiAKIAlDVVJSRU5UX1NDLT5TQ3AuU3RhdHVzID0gR0VUUE9SVChTQ1NJREFUKTsKIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlpZiAoSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyAmIGRlYnVnX3N0YXR1cykgewotCQlwcmludGsoREVCVUdfTEVBRCAiaW5ib3VuZCBzdGF0dXMgJTAyeCAiLCBDTURJTkZPKENVUlJFTlRfU0MpLCBDVVJSRU5UX1NDLT5TQ3AuU3RhdHVzKTsKLQkJc2NzaV9wcmludF9zdGF0dXMoQ1VSUkVOVF9TQy0+U0NwLlN0YXR1cyk7Ci0JCXByaW50aygiXG4iKTsKLQl9Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTIxNjEsMTAgKzE5NjYsNiBAQAogCVNFVFBPUlQoU0lNT0RFMSwgRU5TQ1NJUEVSUiB8IEVOU0NTSVJTVCB8IEVOUEhBU0VNSVMgfCBFTkJVU0ZSRUUpOwogCiAJREFUQV9MRU49MDsKLQlEUFJJTlRLKGRlYnVnX2RhdGFpLAotCQlERUJVR19MRUFEICJkYXRhaV9pbml0OiByZXF1ZXN0X2J1ZmZsZW49JWQgcmVzaWQ9JWRcbiIsCi0JCUNNRElORk8oQ1VSUkVOVF9TQyksIHNjc2lfYnVmZmxlbihDVVJSRU5UX1NDKSwKLQkJc2NzaV9nZXRfcmVzaWQoQ1VSUkVOVF9TQykpOwogfQogCiBzdGF0aWMgdm9pZCBkYXRhaV9ydW4oc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCkBAIC0yMTg2LDggKzE5ODcsNyBAQAogCQkJYmFycmllcigpOwogCiAJCWlmKFRFU1RMTyhETUFTVEFULCBERklGT0ZVTEx8SU5UU1RBVCkpIHsKLQkJCXByaW50ayhFUlJfTEVBRCAiZGF0YWkgdGltZW91dCIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCQkJZGlzcF9wb3J0cyhzaHBudCk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywgImRhdGFpIHRpbWVvdXRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjE5OSw4ICsxOTk5LDggQEAKIAkJCQliYXJyaWVyKCk7CiAKIAkJCWlmKFRFU1RMTyhTU1RBVDIsIFNFTVBUWSkpIHsKLQkJCQlwcmludGsoRVJSX0xFQUQgImRhdGFpIHNlbXB0eSB0aW1lb3V0IiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7Ci0JCQkJZGlzcF9wb3J0cyhzaHBudCk7CisJCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkJCSAgICAiZGF0YWkgc2VtcHR5IHRpbWVvdXQiKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMjIwOSw0OCArMjAwOSw0OSBAQAogCiAJCWlmKENVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsPjApIHsKIAkJCXdoaWxlKGZpZm9kYXRhPjAgJiYgQ1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWw+MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgCWRhdGFfY291bnQgPSBmaWZvZGF0YT5DVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCA/CisJCQkJZGF0YV9jb3VudCA9IGZpZm9kYXRhID4gQ1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWwgPwogCQkJCQkJQ1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWwgOgogCQkJCQkJZmlmb2RhdGE7CiAJCQkJZmlmb2RhdGEgLT0gZGF0YV9jb3VudDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgCWlmKGRhdGFfY291bnQgJiAxKSB7Ci0JCQkJCURQUklOVEsoZGVidWdfZGF0YWksIERFQlVHX0xFQUQgIjhiaXRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJU0VUUE9SVChETUFDTlRSTDAsIEVORE1BfF84QklUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSpDVVJSRU5UX1NDLT5TQ3AucHRyKysgPSBHRVRQT1JUKERBVEFQT1JUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCUNVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlEQVRBX0xFTisrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJU0VUUE9SVChETUFDTlRSTDAsIEVORE1BKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAl9Ci0JCi0gICAgICAgICAgICAgICAgICAgICAgICAJaWYoZGF0YV9jb3VudCA+IDEpIHsKLQkJCQkJRFBSSU5USyhkZWJ1Z19kYXRhaSwgREVCVUdfTEVBRCAiMTZiaXQoJWQpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBkYXRhX2NvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWRhdGFfY291bnQgPj49IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpbnN3KERBVEFQT1JULCBDVVJSRU5UX1NDLT5TQ3AucHRyLCBkYXRhX2NvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCUNVUlJFTlRfU0MtPlNDcC5wdHIgICAgICAgICAgICs9IDIgKiBkYXRhX2NvdW50OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJQ1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWwgLT0gMiAqIGRhdGFfY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlEQVRBX0xFTiAgICAgICAgICAgICAgICAgICAgICArPSAyICogZGF0YV9jb3VudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIAl9Ci0JCi0gICAgICAgICAgICAgICAgICAgICAgICAJaWYoQ1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWw9PTAgJiYgQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWw+MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJLyogYWR2YW5jZSB0byBuZXh0IGJ1ZmZlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCUNVUlJFTlRfU0MtPlNDcC5idWZmZXIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCUNVUlJFTlRfU0MtPlNDcC5wdHIgICAgICAgICAgID0gU0dfQUREUkVTUyhDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCUNVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsID0gQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlci0+bGVuZ3RoOwotCQkJCX0gCi0gICAgICAgICAgICAgICAgCX0KLQkJfSBlbHNlIGlmKGZpZm9kYXRhPjApIHsgCi0JCQlwcmludGsoRVJSX0xFQUQgIm5vIGJ1ZmZlcnMgbGVmdCBmb3IgJWQoJWQpIGJ5dGVzIChkYXRhIG92ZXJydW4hPylcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIGZpZm9kYXRhLCBHRVRQT1JUKEZJRk9TVEFUKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTRVRQT1JUKERNQUNOVFJMMCwgRU5ETUF8XzhCSVQpOworCQkJCWlmIChkYXRhX2NvdW50ICYgMSkgeworCQkJCQlTRVRQT1JUKERNQUNOVFJMMCwgRU5ETUF8XzhCSVQpOworCQkJCQkqQ1VSUkVOVF9TQy0+U0NwLnB0cisrID0gR0VUUE9SVChEQVRBUE9SVCk7CisJCQkJCUNVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsLS07CisJCQkJCURBVEFfTEVOKys7CisJCQkJCVNFVFBPUlQoRE1BQ05UUkwwLCBFTkRNQSk7CisJCQkJfQorCisJCQkJaWYgKGRhdGFfY291bnQgPiAxKSB7CisJCQkJCWRhdGFfY291bnQgPj49IDE7CisJCQkJCWluc3coREFUQVBPUlQsIENVUlJFTlRfU0MtPlNDcC5wdHIsIGRhdGFfY291bnQpOworCQkJCQlDVVJSRU5UX1NDLT5TQ3AucHRyICs9IDIgKiBkYXRhX2NvdW50OworCQkJCQlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCAtPSAyICogZGF0YV9jb3VudDsKKwkJCQkJREFUQV9MRU4gKz0gMiAqIGRhdGFfY291bnQ7CisJCQkJfQorCisJCQkJaWYgKENVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsID09IDAgJiYKKwkJCQkgICAgQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwgPiAwKSB7CisJCQkJCS8qIGFkdmFuY2UgdG8gbmV4dCBidWZmZXIgKi8KKwkJCQkJQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwtLTsKKwkJCQkJQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcisrOworCQkJCQlDVVJSRU5UX1NDLT5TQ3AucHRyICAgICAgICAgICA9IFNHX0FERFJFU1MoQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcik7CisJCQkJCUNVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsID0gQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlci0+bGVuZ3RoOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChmaWZvZGF0YSA+IDApIHsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLAorCQkJCSAgICAibm8gYnVmZmVycyBsZWZ0IGZvciAlZCglZCkgYnl0ZXMiCisJCQkJICAgICIgKGRhdGEgb3ZlcnJ1biE/KVxuIiwKKwkJCQkgICAgZmlmb2RhdGEsIEdFVFBPUlQoRklGT1NUQVQpKTsKKwkJCVNFVFBPUlQoRE1BQ05UUkwwLCBFTkRNQXxfOEJJVCk7CiAJCQl3aGlsZShmaWZvZGF0YT4wKSB7CiAJCQkJaW50IGRhdGE7CiAJCQkJZGF0YT1HRVRQT1JUKERBVEFQT1JUKTsKLQkJCQlEUFJJTlRLKGRlYnVnX2RhdGFpLCBERUJVR19MRUFEICJkYXRhPSUwMnhcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIGRhdGEpOwogCQkJCWZpZm9kYXRhLS07CiAJCQkJREFUQV9MRU4rKzsKIAkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNFVFBPUlQoRE1BQ05UUkwwLCBFTkRNQXxfOEJJVCk7CisJCQlTRVRQT1JUKERNQUNOVFJMMCwgRU5ETUF8XzhCSVQpOwogCQl9CiAJfQogCkBAIC0yMjU4LDE5ICsyMDU5LDIwIEBACiAJICAgVEVTVExPKERNQVNUQVQsIERGSUZPRU1QKSB8fAogCSAgIFRFU1RMTyhTU1RBVDIsIFNFTVBUWSkgfHwKIAkgICBHRVRQT1JUKEZJRk9TVEFUKT4wKSB7Ci0JICAgCS8qCisJCS8qCiAJCSAqIHNvbWV0aGluZyB3ZW50IHdyb25nLCBpZiB0aGVyZSdzIHNvbWV0aGluZyBsZWZ0IGluIHRoZSBmaWZvcwogCQkgKiBvciB0aGUgcGhhc2UgZGlkbid0IGNoYW5nZQogCQkgKi8KLQkJcHJpbnRrKEVSUl9MRUFEICJmaWZvcyBzaG91bGQgYmUgZW1wdHkgYW5kIHBoYXNlIHNob3VsZCBoYXZlIGNoYW5nZWRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCQlkaXNwX3BvcnRzKHNocG50KTsKKwkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkgICAgImZpZm9zIHNob3VsZCBiZSBlbXB0eSBhbmQgcGhhc2Ugc2hvdWxkIGhhdmUgY2hhbmdlZFxuIik7CiAJfQogCiAJaWYoREFUQV9MRU4hPUdFVFNUQ05UKCkpIHsKLQkJcHJpbnRrKEVSUl9MRUFECi0JCSAgICAgICAibWFudWFsIHRyYW5zZmVyIGNvdW50IGRpZmZlcnMgZnJvbSBhdXRvbWF0aWMgKGNvdW50PSVkO3N0Y250PSVkO2RpZmY9JWQ7Zmlmb3N0YXQ9JWQpIiwKLQkJICAgICAgIENNRElORk8oQ1VSUkVOVF9TQyksIERBVEFfTEVOLCBHRVRTVENOVCgpLCBHRVRTVENOVCgpLURBVEFfTEVOLCBHRVRQT1JUKEZJRk9TVEFUKSk7Ci0JCWRpc3BfcG9ydHMoc2hwbnQpOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCSAgICAibWFudWFsIHRyYW5zZmVyIGNvdW50IGRpZmZlcnMgZnJvbSBhdXRvbWF0aWMgIgorCQkJICAgICIoY291bnQ9JWQ7c3RjbnQ9JWQ7ZGlmZj0lZDtmaWZvc3RhdD0lZCkiLAorCQkJICAgIERBVEFfTEVOLCBHRVRTVENOVCgpLCBHRVRTVENOVCgpLURBVEFfTEVOLAorCQkJICAgIEdFVFBPUlQoRklGT1NUQVQpKTsKIAkJbWRlbGF5KDEwMDAwKTsKIAl9CiB9CkBAIC0yMjc5LDExICsyMDgxLDYgQEAKIHsKIAlDTURfSU5DX1JFU0lEKENVUlJFTlRfU0MsIC1HRVRTVENOVCgpKTsKIAotCURQUklOVEsoZGVidWdfZGF0YWksCi0JCURFQlVHX0xFQUQgImRhdGFpX2VuZDogcmVxdWVzdF9idWZmbGVuPSVkIHJlc2lkPSVkIHN0Y250PSVkXG4iLAotCQlDTURJTkZPKENVUlJFTlRfU0MpLCBzY3NpX2J1ZmZsZW4oQ1VSUkVOVF9TQyksCi0JCXNjc2lfZ2V0X3Jlc2lkKENVUlJFTlRfU0MpLCBHRVRTVENOVCgpKTsKLQogCVNFVFBPUlQoU1hGUkNUTDAsIENIMXxDTFJTVENOVCk7CiAJU0VUUE9SVChETUFDTlRSTDAsIDApOwogfQpAQCAtMjMwNCwxMSArMjEwMSw2IEBACiAJU0VUUE9SVChTSU1PREUxLCBFTlNDU0lQRVJSIHwgRU5TQ1NJUlNUIHwgRU5QSEFTRU1JUyB8IEVOQlVTRlJFRSApOwogCiAJREFUQV9MRU4gPSBzY3NpX2dldF9yZXNpZChDVVJSRU5UX1NDKTsKLQotCURQUklOVEsoZGVidWdfZGF0YW8sCi0JCURFQlVHX0xFQUQgImRhdGFvX2luaXQ6IHJlcXVlc3RfYnVmZmxlbj0lZDsgcmVzaWQ9JWRcbiIsCi0JCUNNRElORk8oQ1VSUkVOVF9TQyksIHNjc2lfYnVmZmxlbihDVVJSRU5UX1NDKSwKLQkJc2NzaV9nZXRfcmVzaWQoQ1VSUkVOVF9TQykpOwogfQogCiBzdGF0aWMgdm9pZCBkYXRhb19ydW4oc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCkBAIC0yMzIzLDggKzIxMTUsOSBAQAogCQkJZGF0YV9jb3VudD1DVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbDsKIAogCQlpZihURVNUTE8oRE1BU1RBVCwgREZJRk9FTVApKSB7Ci0JCQlwcmludGsoRVJSX0xFQUQgImRhdGFvIGZpZm8gbm90IGVtcHR5ICglZCkiLCBDTURJTkZPKENVUlJFTlRfU0MpLCBHRVRQT1JUKEZJRk9TVEFUKSk7Ci0JCQlkaXNwX3BvcnRzKHNocG50KTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLAorCQkJCSAgICAiZGF0YW8gZmlmbyBub3QgZW1wdHkgKCVkKSIsCisJCQkJICAgIEdFVFBPUlQoRklGT1NUQVQpKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTIzNDIsNyArMjEzNSw3IEBACiAJCQlDVVJSRU5UX1NDLT5TQ3AucHRyICAgICAgICAgICArPSAyICogZGF0YV9jb3VudDsKIAkJCUNVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsIC09IDIgKiBkYXRhX2NvdW50OwogCQkJQ01EX0lOQ19SRVNJRChDVVJSRU5UX1NDLCAtMiAqIGRhdGFfY291bnQpOwotCSAgCX0KKwkJfQogCiAJCWlmKENVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsPT0wICYmIENVUlJFTlRfU0MtPlNDcC5idWZmZXJzX3Jlc2lkdWFsPjApIHsKIAkJCS8qIGFkdmFuY2UgdG8gbmV4dCBidWZmZXIgKi8KQEAgLTIzNTcsOCArMjE1MCw3IEBACiAJCQliYXJyaWVyKCk7CiAKIAkJaWYoVEVTVExPKERNQVNUQVQsIERGSUZPRU1QfElOVFNUQVQpKSB7Ci0JCQlwcmludGsoRVJSX0xFQUQgImRhdGFvdXQgdGltZW91dCIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCQkJZGlzcF9wb3J0cyhzaHBudCk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywgImRhdGFvdXQgdGltZW91dFxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTIzNjgsMzUgKzIxNjAsMjMgQEAKIHsKIAlpZihURVNUTE8oRE1BU1RBVCwgREZJRk9FTVApKSB7CiAJCWludCBkYXRhX2NvdW50ID0gKERBVEFfTEVOIC0gc2NzaV9nZXRfcmVzaWQoQ1VSUkVOVF9TQykpIC0KLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFVFNUQ05UKCk7Ci0KLQkJRFBSSU5USyhkZWJ1Z19kYXRhbywgREVCVUdfTEVBRCAiZGF0YW86ICVkIGJ5dGVzIHRvIHJlc2VuZCAoJWQgd3JpdHRlbiwgJWQgdHJhbnNmZXJyZWQpXG4iLAotCQkJQ01ESU5GTyhDVVJSRU5UX1NDKSwKLQkJCWRhdGFfY291bnQsCi0JCQlEQVRBX0xFTiAtIHNjc2lfZ2V0X3Jlc2lkKENVUlJFTlRfU0MpLAotCQkJR0VUU1RDTlQoKSk7CisJCQlHRVRTVENOVCgpOwogCiAJCUNNRF9JTkNfUkVTSUQoQ1VSUkVOVF9TQywgZGF0YV9jb3VudCk7CiAKIAkJZGF0YV9jb3VudCAtPSBDVVJSRU5UX1NDLT5TQ3AucHRyIC0KLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTR19BRERSRVNTKENVUlJFTlRfU0MtPlNDcC5idWZmZXIpOworCQkJU0dfQUREUkVTUyhDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyKTsKIAkJd2hpbGUoZGF0YV9jb3VudD4wKSB7CiAJCQlDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyLS07CiAJCQlDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCsrOwogCQkJZGF0YV9jb3VudCAtPSBDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyLT5sZW5ndGg7CiAJCX0KIAkJQ1VSUkVOVF9TQy0+U0NwLnB0ciA9IFNHX0FERFJFU1MoQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcikgLQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfY291bnQ7CisJCQlkYXRhX2NvdW50OwogCQlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCA9IENVUlJFTlRfU0MtPlNDcC5idWZmZXItPmxlbmd0aCArCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9jb3VudDsKKwkJCWRhdGFfY291bnQ7CiAJfQogCi0JRFBSSU5USyhkZWJ1Z19kYXRhbywgREVCVUdfTEVBRCAiZGF0YW9fZW5kOiByZXF1ZXN0X2J1ZmZsZW49JWQ7IHJlc2lkPSVkOyBzdGNudD0lZFxuIiwKLQkJQ01ESU5GTyhDVVJSRU5UX1NDKSwKLQkJc2NzaV9idWZmbGVuKENVUlJFTlRfU0MpLAotCQlzY3NpX2dldF9yZXNpZChDVVJSRU5UX1NDKSwKLQkJR0VUU1RDTlQoKSk7Ci0KIAlTRVRQT1JUKFNYRlJDVEwwLCBDSDF8Q0xSQ0gxfENMUlNUQ05UKTsKIAlTRVRQT1JUKFNYRlJDVEwwLCBDSDEpOwogCkBAIC0yNDIwLDcgKzIyMDAsNyBAQAogCQlTVEFURT1yc3RpOwogCQlTRVRQT1JUKFNDU0lTRVEsMCk7CiAJCVNFVFBPUlQoU1NUQVQxLFNDU0lSU1RJKTsKLSAgCX0gZWxzZSBpZihzdGF0MCAmIFNFTERJICYmIFBSRVZTVEFURT09YnVzZnJlZSkgeworCX0gZWxzZSBpZiAoc3RhdDAgJiBTRUxESSAmJiBQUkVWU1RBVEUgPT0gYnVzZnJlZSkgewogCQlTVEFURT1zZWxkaTsKIAl9IGVsc2UgaWYoc3RhdDAgJiBTRUxETyAmJiBDVVJSRU5UX1NDICYmIChDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBzZWxlY3RpbmcpKSB7CiAJCVNUQVRFPXNlbGRvOwpAQCAtMjQ0NSw4ICsyMjI1LDcgQEAKIAl9CiAKIAlpZigoc3RhdDAgJiBTRUxESSkgJiYgU1RBVEUhPXNlbGRpICYmICFkYXRhcGhhc2UpIHsKLQkJcHJpbnRrKElORk9fTEVBRCAicmVzZWxlY3Rpb24gbWlzc2VkPyIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCQlkaXNwX3BvcnRzKHNocG50KTsKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBDVVJSRU5UX1NDLCAicmVzZWxlY3Rpb24gbWlzc2VkPyIpOwogCX0KIAogCWlmKFNUQVRFIT1QUkVWU1RBVEUpIHsKQEAgLTI0NjQsNyArMjI0Myw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBhcmVycl9ydW4oc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7Ci0JcHJpbnRrKEVSUl9MRUFEICJwYXJpdHkgZXJyb3JcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLCAicGFyaXR5IGVycm9yXG4iKTsKIAlkb25lKHNocG50LCBESURfUEFSSVRZIDw8IDE2KTsKIH0KIApAQCAtMjQ3Niw4ICsyMjU1LDggQEAKIHsKIAlTY3NpX0NtbmQgKnB0cjsKIAotCXByaW50ayhLRVJOX05PVElDRSAiYWhhMTUyeCVkOiBzY3NpIHJlc2V0IGluXG4iLCBIT1NUTk8pOwotCQorCXNob3N0X3ByaW50ayhLRVJOX05PVElDRSwgc2hwbnQsICJzY3NpIHJlc2V0IGluXG4iKTsKKwogCXB0cj1ESVNDT05ORUNURURfU0M7CiAJd2hpbGUocHRyKSB7CiAJCVNjc2lfQ21uZCAqbmV4dCA9IFNDTkVYVChwdHIpOwpAQCAtMjUzOSw4ICsyMzE4LDYgQEAKIAogCQlkYXRhcGhhc2U9dXBkYXRlX3N0YXRlKHNocG50KTsKIAotCQlEUFJJTlRLKGRlYnVnX3BoYXNlcywgTEVBRCAic3RhcnQgJXMgJXMoJXMpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBzdGF0ZXNbU1RBVEVdLm5hbWUsIHN0YXRlc1tQUkVWU1RBVEVdLm5hbWUsIHN0YXRlc1tMQVNUU1RBVEVdLm5hbWUpOwotCiAJCS8qCiAJCSAqIGVuZCBwcmV2aW91cyBzdGF0ZQogCQkgKgpAQCAtMjU2Nyw5ICsyMzQ0LDkgQEAKIAkJaWYoZGF0YXBoYXNlKSB7CiAJCQlTRVRQT1JUKFNTVEFUMCwgUkVRSU5JVCk7CiAJCQlTRVRQT1JUKFNDU0lTSUcsIEdFVFBPUlQoU0NTSVNJRykgJiBQX01BU0spOwotCQkJU0VUUE9SVChTU1RBVDEsIFBIQVNFQ0hHKTsgIAorCQkJU0VUUE9SVChTU1RBVDEsIFBIQVNFQ0hHKTsKIAkJfQotCQkKKwogCQkvKgogCQkgKiBlbmFibGUgU1BJTyBtb2RlIGlmIHByZXZpb3VzIGRpZG4ndCB1c2UgaXQKIAkJICogYW5kIHRoaXMgb25lIGRvZXMKQEAgLTI1ODEsMTQgKzIzNTgsMTQgQEAKIAkJCWlmKENVUlJFTlRfU0MpCiAJCQkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlIHw9IHNwaW9yZHk7CiAJCX0KLQkJCisKIAkJLyoKIAkJICogaW5pdGlhbGl6ZSBmb3IgbmV3IHN0YXRlCiAJCSAqCiAJCSAqLwogCQlpZihQUkVWU1RBVEUhPVNUQVRFICYmIHN0YXRlc1tTVEFURV0uaW5pdCkKIAkJCXN0YXRlc1tTVEFURV0uaW5pdChzaHBudCk7Ci0JCQorCiAJCS8qCiAJCSAqIGhhbmRsZSBjdXJyZW50IHN0YXRlCiAJCSAqCkBAIC0yNTk2LDggKzIzNzMsOSBAQAogCQlpZihzdGF0ZXNbU1RBVEVdLnJ1bikKIAkJCXN0YXRlc1tTVEFURV0ucnVuKHNocG50KTsKIAkJZWxzZQotCQkJcHJpbnRrKEVSUl9MRUFEICJ1bmV4cGVjdGVkIHN0YXRlICgleClcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIFNUQVRFKTsKLQkJCisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCQkgICAgInVuZXhwZWN0ZWQgc3RhdGUgKCV4KVxuIiwgU1RBVEUpOworCiAJCS8qCiAJCSAqIHNldHVwIGNvbnRyb2xsZXIgdG8gaW50ZXJydXB0IG9uCiAJCSAqIHRoZSBuZXh0IGV4cGVjdGVkIGNvbmRpdGlvbiBhbmQKQEAgLTI2MTMsNyArMjM5MSw2IEBACiAJCUhPU1REQVRBKHNocG50KS0+dGltZVtTVEFURV0gKz0gamlmZmllcy1zdGFydDsKICNlbmRpZgogCi0JCURQUklOVEsoZGVidWdfcGhhc2VzLCBMRUFEICJlbmQgJXMgJXMoJXMpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBzdGF0ZXNbU1RBVEVdLm5hbWUsIHN0YXRlc1tQUkVWU1RBVEVdLm5hbWUsIHN0YXRlc1tMQVNUU1RBVEVdLm5hbWUpOwogCX0gd2hpbGUocGVuZGluZyk7CiAKIAkvKgpAQCAtMjYyNiwyODkgKzI0MDMsNDIgQEAKIH0KIAogCi0vKiAKKy8qCiAgKiBEdW1wIHRoZSBjdXJyZW50IGRyaXZlciBzdGF0dXMgYW5kIHBhbmljCiAgKi8KIHN0YXRpYyB2b2lkIGFoYTE1MnhfZXJyb3Ioc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQsIGNoYXIgKm1zZykKIHsKLQlwcmludGsoS0VSTl9FTUVSRyAiXG5haGExNTJ4JWQ6ICVzXG4iLCBIT1NUTk8sIG1zZyk7CisJc2hvc3RfcHJpbnRrKEtFUk5fRU1FUkcsIHNocG50LCAiJXNcbiIsIG1zZyk7CiAJc2hvd19xdWV1ZXMoc2hwbnQpOwogCXBhbmljKCJhaGExNTJ4IHBhbmljXG4iKTsKIH0KIAogLyoKLSAqIERpc3BsYXkgcmVnaXN0ZXJzIG9mIEFJQy02MjYwCi0gKi8KLXN0YXRpYyB2b2lkIGRpc3BfcG9ydHMoc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCi17Ci0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWludCBzOwotCi0JcHJpbnRrKCJcbiVzOiAlcyglcykgIiwKLQkJQ1VSUkVOVF9TQyA/ICJidXN5IiA6ICJ3YWl0aW5nIiwKLQkJc3RhdGVzW1NUQVRFXS5uYW1lLAotCQlzdGF0ZXNbUFJFVlNUQVRFXS5uYW1lKTsKLQotCXMgPSBHRVRQT1JUKFNDU0lTRVEpOwotCXByaW50aygiU0NTSVNFUSggIik7Ci0JaWYgKHMgJiBURU1PREVPKQotCQlwcmludGsoIlRBUkdFVCBNT0RFICIpOwotCWlmIChzICYgRU5TRUxPKQotCQlwcmludGsoIlNFTE8gIik7Ci0JaWYgKHMgJiBFTlNFTEkpCi0JCXByaW50aygiU0VMSSAiKTsKLQlpZiAocyAmIEVOUkVTRUxJKQotCQlwcmludGsoIlJFU0VMSSAiKTsKLQlpZiAocyAmIEVOQVVUT0FUTk8pCi0JCXByaW50aygiQVVUT0FUTk8gIik7Ci0JaWYgKHMgJiBFTkFVVE9BVE5JKQotCQlwcmludGsoIkFVVE9BVE5JICIpOwotCWlmIChzICYgRU5BVVRPQVROUCkKLQkJcHJpbnRrKCJBVVRPQVROUCAiKTsKLQlpZiAocyAmIFNDU0lSU1RPKQotCQlwcmludGsoIlNDU0lSU1RPICIpOwotCXByaW50aygiKTsiKTsKLQotCXByaW50aygiIFNDU0lTSUcoIik7Ci0JcyA9IEdFVFBPUlQoU0NTSVNJRyk7Ci0Jc3dpdGNoIChzICYgUF9NQVNLKSB7Ci0JY2FzZSBQX0RBVEFPOgotCQlwcmludGsoIkRBVEEgT1VUIik7Ci0JCWJyZWFrOwotCWNhc2UgUF9EQVRBSToKLQkJcHJpbnRrKCJEQVRBIElOIik7Ci0JCWJyZWFrOwotCWNhc2UgUF9DTUQ6Ci0JCXByaW50aygiQ09NTUFORCIpOwotCQlicmVhazsKLQljYXNlIFBfU1RBVFVTOgotCQlwcmludGsoIlNUQVRVUyIpOwotCQlicmVhazsKLQljYXNlIFBfTVNHTzoKLQkJcHJpbnRrKCJNRVNTQUdFIE9VVCIpOwotCQlicmVhazsKLQljYXNlIFBfTVNHSToKLQkJcHJpbnRrKCJNRVNTQUdFIElOIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50aygiKmludmFsaWQqIik7Ci0JCWJyZWFrOwotCX0KLQotCXByaW50aygiKTsgIik7Ci0KLQlwcmludGsoIklOVFNUQVQgKCVzKTsgIiwgVEVTVEhJKERNQVNUQVQsIElOVFNUQVQpID8gImhpIiA6ICJsbyIpOwotCi0JcHJpbnRrKCJTU1RBVCggIik7Ci0JcyA9IEdFVFBPUlQoU1NUQVQwKTsKLQlpZiAocyAmIFRBUkdFVCkKLQkJcHJpbnRrKCJUQVJHRVQgIik7Ci0JaWYgKHMgJiBTRUxETykKLQkJcHJpbnRrKCJTRUxETyAiKTsKLQlpZiAocyAmIFNFTERJKQotCQlwcmludGsoIlNFTERJICIpOwotCWlmIChzICYgU0VMSU5HTykKLQkJcHJpbnRrKCJTRUxJTkdPICIpOwotCWlmIChzICYgU1dSQVApCi0JCXByaW50aygiU1dSQVAgIik7Ci0JaWYgKHMgJiBTRE9ORSkKLQkJcHJpbnRrKCJTRE9ORSAiKTsKLQlpZiAocyAmIFNQSU9SRFkpCi0JCXByaW50aygiU1BJT1JEWSAiKTsKLQlpZiAocyAmIERNQURPTkUpCi0JCXByaW50aygiRE1BRE9ORSAiKTsKLQotCXMgPSBHRVRQT1JUKFNTVEFUMSk7Ci0JaWYgKHMgJiBTRUxUTykKLQkJcHJpbnRrKCJTRUxUTyAiKTsKLQlpZiAocyAmIEFUTlRBUkcpCi0JCXByaW50aygiQVROVEFSRyAiKTsKLQlpZiAocyAmIFNDU0lSU1RJKQotCQlwcmludGsoIlNDU0lSU1RJICIpOwotCWlmIChzICYgUEhBU0VNSVMpCi0JCXByaW50aygiUEhBU0VNSVMgIik7Ci0JaWYgKHMgJiBCVVNGUkVFKQotCQlwcmludGsoIkJVU0ZSRUUgIik7Ci0JaWYgKHMgJiBTQ1NJUEVSUikKLQkJcHJpbnRrKCJTQ1NJUEVSUiAiKTsKLQlpZiAocyAmIFBIQVNFQ0hHKQotCQlwcmludGsoIlBIQVNFQ0hHICIpOwotCWlmIChzICYgUkVRSU5JVCkKLQkJcHJpbnRrKCJSRVFJTklUICIpOwotCXByaW50aygiKTsgIik7Ci0KLQotCXByaW50aygiU1NUQVQoICIpOwotCi0JcyA9IEdFVFBPUlQoU1NUQVQwKSAmIEdFVFBPUlQoU0lNT0RFMCk7Ci0KLQlpZiAocyAmIFRBUkdFVCkKLQkJcHJpbnRrKCJUQVJHRVQgIik7Ci0JaWYgKHMgJiBTRUxETykKLQkJcHJpbnRrKCJTRUxETyAiKTsKLQlpZiAocyAmIFNFTERJKQotCQlwcmludGsoIlNFTERJICIpOwotCWlmIChzICYgU0VMSU5HTykKLQkJcHJpbnRrKCJTRUxJTkdPICIpOwotCWlmIChzICYgU1dSQVApCi0JCXByaW50aygiU1dSQVAgIik7Ci0JaWYgKHMgJiBTRE9ORSkKLQkJcHJpbnRrKCJTRE9ORSAiKTsKLQlpZiAocyAmIFNQSU9SRFkpCi0JCXByaW50aygiU1BJT1JEWSAiKTsKLQlpZiAocyAmIERNQURPTkUpCi0JCXByaW50aygiRE1BRE9ORSAiKTsKLQotCXMgPSBHRVRQT1JUKFNTVEFUMSkgJiBHRVRQT1JUKFNJTU9ERTEpOwotCi0JaWYgKHMgJiBTRUxUTykKLQkJcHJpbnRrKCJTRUxUTyAiKTsKLQlpZiAocyAmIEFUTlRBUkcpCi0JCXByaW50aygiQVROVEFSRyAiKTsKLQlpZiAocyAmIFNDU0lSU1RJKQotCQlwcmludGsoIlNDU0lSU1RJICIpOwotCWlmIChzICYgUEhBU0VNSVMpCi0JCXByaW50aygiUEhBU0VNSVMgIik7Ci0JaWYgKHMgJiBCVVNGUkVFKQotCQlwcmludGsoIkJVU0ZSRUUgIik7Ci0JaWYgKHMgJiBTQ1NJUEVSUikKLQkJcHJpbnRrKCJTQ1NJUEVSUiAiKTsKLQlpZiAocyAmIFBIQVNFQ0hHKQotCQlwcmludGsoIlBIQVNFQ0hHICIpOwotCWlmIChzICYgUkVRSU5JVCkKLQkJcHJpbnRrKCJSRVFJTklUICIpOwotCXByaW50aygiKTsgIik7Ci0KLQlwcmludGsoIlNYRlJDVEwwKCAiKTsKLQotCXMgPSBHRVRQT1JUKFNYRlJDVEwwKTsKLQlpZiAocyAmIFNDU0lFTikKLQkJcHJpbnRrKCJTQ1NJRU4gIik7Ci0JaWYgKHMgJiBETUFFTikKLQkJcHJpbnRrKCJETUFFTiAiKTsKLQlpZiAocyAmIENIMSkKLQkJcHJpbnRrKCJDSDEgIik7Ci0JaWYgKHMgJiBDTFJTVENOVCkKLQkJcHJpbnRrKCJDTFJTVENOVCAiKTsKLQlpZiAocyAmIFNQSU9FTikKLQkJcHJpbnRrKCJTUElPRU4gIik7Ci0JaWYgKHMgJiBDTFJDSDEpCi0JCXByaW50aygiQ0xSQ0gxICIpOwotCXByaW50aygiKTsgIik7Ci0KLQlwcmludGsoIlNJR05BTCggIik7Ci0KLQlzID0gR0VUUE9SVChTQ1NJU0lHKTsKLQlpZiAocyAmIFNJR19BVE5JKQotCQlwcmludGsoIkFUTkkgIik7Ci0JaWYgKHMgJiBTSUdfU0VMSSkKLQkJcHJpbnRrKCJTRUxJICIpOwotCWlmIChzICYgU0lHX0JTWUkpCi0JCXByaW50aygiQlNZSSAiKTsKLQlpZiAocyAmIFNJR19SRVFJKQotCQlwcmludGsoIlJFUUkgIik7Ci0JaWYgKHMgJiBTSUdfQUNLSSkKLQkJcHJpbnRrKCJBQ0tJICIpOwotCXByaW50aygiKTsgIik7Ci0KLQlwcmludGsoIlNFTElEICglMDJ4KSwgIiwgR0VUUE9SVChTRUxJRCkpOwotCi0JcHJpbnRrKCJTVENOVCAoJWQpLCAiLCBHRVRTVENOVCgpKTsKLQkKLQlwcmludGsoIlNTVEFUMiggIik7Ci0KLQlzID0gR0VUUE9SVChTU1RBVDIpOwotCWlmIChzICYgU09GRlNFVCkKLQkJcHJpbnRrKCJTT0ZGU0VUICIpOwotCWlmIChzICYgU0VNUFRZKQotCQlwcmludGsoIlNFTVBUWSAiKTsKLQlpZiAocyAmIFNGVUxMKQotCQlwcmludGsoIlNGVUxMICIpOwotCXByaW50aygiKTsgU0ZDTlQgKCVkKTsgIiwgcyAmIChTRlVMTCB8IFNGQ05UKSk7Ci0KLQlzID0gR0VUUE9SVChTU1RBVDMpOwotCXByaW50aygiU0NTSUNOVCAoJWQpLCBPRkZDTlQoJWQpLCAiLCAocyAmIDB4ZjApID4+IDQsIHMgJiAweDBmKTsKLQotCXByaW50aygiU1NUQVQ0KCAiKTsKLQlzID0gR0VUUE9SVChTU1RBVDQpOwotCWlmIChzICYgU1lOQ0VSUikKLQkJcHJpbnRrKCJTWU5DRVJSICIpOwotCWlmIChzICYgRldFUlIpCi0JCXByaW50aygiRldFUlIgIik7Ci0JaWYgKHMgJiBGUkVSUikKLQkJcHJpbnRrKCJGUkVSUiAiKTsKLQlwcmludGsoIik7ICIpOwotCi0JcHJpbnRrKCJETUFDTlRSTDAoICIpOwotCXMgPSBHRVRQT1JUKERNQUNOVFJMMCk7Ci0JcHJpbnRrKCIlcyAiLCBzICYgXzhCSVQgPyAiOEJJVCIgOiAiMTZCSVQiKTsKLQlwcmludGsoIiVzICIsIHMgJiBETUEgPyAiRE1BIiA6ICJQSU8iKTsKLQlwcmludGsoIiVzICIsIHMgJiBXUklURV9SRUFEID8gIldSSVRFIiA6ICJSRUFEIik7Ci0JaWYgKHMgJiBFTkRNQSkKLQkJcHJpbnRrKCJFTkRNQSAiKTsKLQlpZiAocyAmIElOVEVOKQotCQlwcmludGsoIklOVEVOICIpOwotCWlmIChzICYgUlNURklGTykKLQkJcHJpbnRrKCJSU1RGSUZPICIpOwotCWlmIChzICYgU1dJTlQpCi0JCXByaW50aygiU1dJTlQgIik7Ci0JcHJpbnRrKCIpOyAiKTsKLQotCXByaW50aygiRE1BU1RBVCggIik7Ci0JcyA9IEdFVFBPUlQoRE1BU1RBVCk7Ci0JaWYgKHMgJiBBVERPTkUpCi0JCXByaW50aygiQVRET05FICIpOwotCWlmIChzICYgV09SRFJEWSkKLQkJcHJpbnRrKCJXT1JEUkRZICIpOwotCWlmIChzICYgREZJRk9GVUxMKQotCQlwcmludGsoIkRGSUZPRlVMTCAiKTsKLQlpZiAocyAmIERGSUZPRU1QKQotCQlwcmludGsoIkRGSUZPRU1QICIpOwotCXByaW50aygiKVxuIik7Ci0jZW5kaWYKLX0KLQotLyoKICAqIGRpc3BsYXkgZW5hYmxlZCBpbnRlcnJ1cHRzCiAgKi8KIHN0YXRpYyB2b2lkIGRpc3BfZW5pbnRyKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewotCWludCBzOworCWludCBzMCwgczE7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiZW5hYmxlZCBpbnRlcnJ1cHRzICggIik7CisJczAgPSBHRVRQT1JUKFNJTU9ERTApOworCXMxID0gR0VUUE9SVChTSU1PREUxKTsKIAotCXMgPSBHRVRQT1JUKFNJTU9ERTApOwotCWlmIChzICYgRU5TRUxETykKLQkJcHJpbnRrKCJFTlNFTERPICIpOwotCWlmIChzICYgRU5TRUxESSkKLQkJcHJpbnRrKCJFTlNFTERJICIpOwotCWlmIChzICYgRU5TRUxJTkdPKQotCQlwcmludGsoIkVOU0VMSU5HTyAiKTsKLQlpZiAocyAmIEVOU1dSQVApCi0JCXByaW50aygiRU5TV1JBUCAiKTsKLQlpZiAocyAmIEVOU0RPTkUpCi0JCXByaW50aygiRU5TRE9ORSAiKTsKLQlpZiAocyAmIEVOU1BJT1JEWSkKLQkJcHJpbnRrKCJFTlNQSU9SRFkgIik7Ci0JaWYgKHMgJiBFTkRNQURPTkUpCi0JCXByaW50aygiRU5ETUFET05FICIpOwotCi0JcyA9IEdFVFBPUlQoU0lNT0RFMSk7Ci0JaWYgKHMgJiBFTlNFTFRJTU8pCi0JCXByaW50aygiRU5TRUxUSU1PICIpOwotCWlmIChzICYgRU5BVE5UQVJHKQotCQlwcmludGsoIkVOQVROVEFSRyAiKTsKLQlpZiAocyAmIEVOUEhBU0VNSVMpCi0JCXByaW50aygiRU5QSEFTRU1JUyAiKTsKLQlpZiAocyAmIEVOQlVTRlJFRSkKLQkJcHJpbnRrKCJFTkJVU0ZSRUUgIik7Ci0JaWYgKHMgJiBFTlNDU0lQRVJSKQotCQlwcmludGsoIkVOU0NTSVBFUlIgIik7Ci0JaWYgKHMgJiBFTlBIQVNFQ0hHKQotCQlwcmludGsoIkVOUEhBU0VDSEcgIik7Ci0JaWYgKHMgJiBFTlJFUUlOSVQpCi0JCXByaW50aygiRU5SRVFJTklUICIpOwotCXByaW50aygiKVxuIik7CisJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIHNocG50LAorCQkgICAgICJlbmFibGVkIGludGVycnVwdHMgKCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMpXG4iLAorCQkgICAgIChzMCAmIEVOU0VMRE8pID8gIkVOU0VMRE8gIiA6ICIiLAorCQkgICAgIChzMCAmIEVOU0VMREkpID8gIkVOU0VMREkgIiA6ICIiLAorCQkgICAgIChzMCAmIEVOU0VMSU5HTykgPyAiRU5TRUxJTkdPICIgOiAiIiwKKwkJICAgICAoczAgJiBFTlNXUkFQKSA/ICJFTlNXUkFQICIgOiAiIiwKKwkJICAgICAoczAgJiBFTlNET05FKSA/ICJFTlNET05FICIgOiAiIiwKKwkJICAgICAoczAgJiBFTlNQSU9SRFkpID8gIkVOU1BJT1JEWSAiIDogIiIsCisJCSAgICAgKHMwICYgRU5ETUFET05FKSA/ICJFTkRNQURPTkUgIiA6ICIiLAorCQkgICAgIChzMSAmIEVOU0VMVElNTykgPyAiRU5TRUxUSU1PICIgOiAiIiwKKwkJICAgICAoczEgJiBFTkFUTlRBUkcpID8gIkVOQVROVEFSRyAiIDogIiIsCisJCSAgICAgKHMxICYgRU5QSEFTRU1JUykgPyAiRU5QSEFTRU1JUyAiIDogIiIsCisJCSAgICAgKHMxICYgRU5CVVNGUkVFKSA/ICJFTkJVU0ZSRUUgIiA6ICIiLAorCQkgICAgIChzMSAmIEVOU0NTSVBFUlIpID8gIkVOU0NTSVBFUlIgIiA6ICIiLAorCQkgICAgIChzMSAmIEVOUEhBU0VDSEcpID8gIkVOUEhBU0VDSEcgIiA6ICIiLAorCQkgICAgIChzMSAmIEVOUkVRSU5JVCkgPyAiRU5SRVFJTklUICIgOiAiIik7CiB9CiAKIC8qCkBAIC0yOTE2LDM2ICsyNDQ2LDIxIEBACiAgKi8KIHN0YXRpYyB2b2lkIHNob3dfY29tbWFuZChTY3NpX0NtbmQgKnB0cikKIHsKLQlzY21kX3ByaW50ayhLRVJOX0RFQlVHLCBwdHIsICIlcDogY21uZD0oIiwgcHRyKTsKLQotCV9fc2NzaV9wcmludF9jb21tYW5kKHB0ci0+Y21uZCk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiKTsgcmVxdWVzdF9idWZmbGVuPSVkOyByZXNpZD0lZDsgcGhhc2UgfCIsCi0JICAgICAgIHNjc2lfYnVmZmxlbihwdHIpLCBzY3NpX2dldF9yZXNpZChwdHIpKTsKLQotCWlmIChwdHItPlNDcC5waGFzZSAmIG5vdF9pc3N1ZWQpCi0JCXByaW50aygibm90IGlzc3VlZHwiKTsKLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBzZWxlY3RpbmcpCi0JCXByaW50aygic2VsZWN0aW5nfCIpOwotCWlmIChwdHItPlNDcC5waGFzZSAmIGlkZW50aWZpZWQpCi0JCXByaW50aygiaWRlbnRpZmllZHwiKTsKLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBkaXNjb25uZWN0ZWQpCi0JCXByaW50aygiZGlzY29ubmVjdGVkfCIpOwotCWlmIChwdHItPlNDcC5waGFzZSAmIGNvbXBsZXRlZCkKLQkJcHJpbnRrKCJjb21wbGV0ZWR8Iik7Ci0JaWYgKHB0ci0+U0NwLnBoYXNlICYgc3Bpb3JkeSkKLQkJcHJpbnRrKCJzcGlvcmR5fCIpOwotCWlmIChwdHItPlNDcC5waGFzZSAmIHN5bmNuZWcpCi0JCXByaW50aygic3luY25lZ3wiKTsKLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBhYm9ydGVkKQotCQlwcmludGsoImFib3J0ZWR8Iik7Ci0JaWYgKHB0ci0+U0NwLnBoYXNlICYgcmVzZXR0ZWQpCi0JCXByaW50aygicmVzZXR0ZWR8Iik7Ci0JaWYoIFNDREFUQShwdHIpICkgewotCQlwcmludGsoIjsgbmV4dD0weCVwXG4iLCBTQ05FWFQocHRyKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCI7IG5leHQ9KGhvc3Qgc2NyaWJibGUgTlVMTClcbiIpOwotCX0KKwlzY3NpX3ByaW50X2NvbW1hbmQocHRyKTsKKwlzY21kX3ByaW50ayhLRVJOX0RFQlVHLCBwdHIsCisJCSAgICAicmVxdWVzdF9idWZmbGVuPSVkOyByZXNpZD0lZDsgIgorCQkgICAgInBoYXNlIHwlcyVzJXMlcyVzJXMlcyVzJXM7IG5leHQ9MHglcCIsCisJCSAgICBzY3NpX2J1ZmZsZW4ocHRyKSwgc2NzaV9nZXRfcmVzaWQocHRyKSwKKwkJICAgIChwdHItPlNDcC5waGFzZSAmIG5vdF9pc3N1ZWQpID8gIm5vdCBpc3N1ZWR8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgc2VsZWN0aW5nKSA/ICJzZWxlY3Rpbmd8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgaWRlbnRpZmllZCkgPyAiaWRlbnRpZmllZHwiIDogIiIsCisJCSAgICAocHRyLT5TQ3AucGhhc2UgJiBkaXNjb25uZWN0ZWQpID8gImRpc2Nvbm5lY3RlZHwiIDogIiIsCisJCSAgICAocHRyLT5TQ3AucGhhc2UgJiBjb21wbGV0ZWQpID8gImNvbXBsZXRlZHwiIDogIiIsCisJCSAgICAocHRyLT5TQ3AucGhhc2UgJiBzcGlvcmR5KSA/ICJzcGlvcmR5fCIgOiAiIiwKKwkJICAgIChwdHItPlNDcC5waGFzZSAmIHN5bmNuZWcpID8gInN5bmNuZWd8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgYWJvcnRlZCkgPyAiYWJvcnRlZHwiIDogIiIsCisJCSAgICAocHRyLT5TQ3AucGhhc2UgJiByZXNldHRlZCkgPyAicmVzZXR0ZWR8IiA6ICIiLAorCQkgICAgKFNDREFUQShwdHIpKSA/IFNDTkVYVChwdHIpIDogTlVMTCk7CiB9CiAKIC8qCkBAIC0yOTcyLDcgKzI0ODcsNiBAQAogCWZvciAocHRyID0gRElTQ09OTkVDVEVEX1NDOyBwdHI7IHB0ciA9IFNDREFUQShwdHIpID8gU0NORVhUKHB0cikgOiBOVUxMKQogCQlzaG93X2NvbW1hbmQocHRyKTsKIAotCWRpc3BfcG9ydHMoc2hwbnQpOwogCWRpc3BfZW5pbnRyKHNocG50KTsKIH0KIApAQCAtMzI3NiwxNSArMjc5MCw2IEBACiAJaWYoIXNocG50IHx8ICFidWZmZXIgfHwgbGVuZ3RoPDggfHwgc3RybmNtcCgiYWhhMTUyeCAiLCBidWZmZXIsIDgpIT0wKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlpZihsZW5ndGg+MTQgJiYgc3RybmNtcCgiZGVidWcgIiwgYnVmZmVyKzgsIDYpPT0wKSB7Ci0JCWludCBkZWJ1ZyA9IEhPU1REQVRBKHNocG50KS0+ZGVidWc7Ci0KLQkJSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZmZlcisxNCwgTlVMTCwgMCk7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiYWhhMTUyeCVkOiBkZWJ1Z2dpbmcgb3B0aW9ucyBzZXQgdG8gMHglMDR4ICh3ZXJlIDB4JTA0eClcbiIsIEhPU1ROTywgSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZywgZGVidWcpOwotCX0gZWxzZQotI2VuZGlmCiAjaWYgZGVmaW5lZChBSEExNTJYX1NUQVQpCiAJaWYobGVuZ3RoPjEzICYmIHN0cm5jbXAoInJlc2V0IiwgYnVmZmVyKzgsIDUpPT0wKSB7CiAJCWludCBpOwpAQCAtMzMwMiw3ICsyODA3LDcgQEAKIAkJCUhPU1REQVRBKHNocG50KS0+dGltZVtpXT0wOwogCQl9CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYWhhMTUyeCVkOiBzdGF0cyByZXNldGVkLlxuIiwgSE9TVE5PKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hwbnQsICJhaGExNTJ4OiBzdGF0cyByZXNldC5cbiIpOwogCiAJfSBlbHNlCiAjZW5kaWYKQEAgLTMzNDMsMjkgKzI4NDgsNiBAQAogCQkJCQkoKChIT1NUREFUQShzaHBudCktPnN5bmNyYXRlW2ldICYgMHg3MCkgPj4gNCkgKyAyKSAqIDUwLAogCQkJCSAgICBIT1NUREFUQShzaHBudCktPnN5bmNyYXRlW2ldICYgMHgwZik7CiAJfQotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLSNkZWZpbmUgUERFQlVHKGZsYWdzLHR4dCkgXAotCWlmKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBmbGFncykgU1BSSU5URigiKCVzKSAiLCB0eHQpOwotCi0JU1BSSU5URigiZW5hYmxlZCBkZWJ1Z2dpbmcgb3B0aW9uczogIik7Ci0KLQlQREVCVUcoZGVidWdfcHJvY2luZm8sICJwcm9jaW5mbyIpOwotCVBERUJVRyhkZWJ1Z19xdWV1ZSwgInF1ZXVlIik7Ci0JUERFQlVHKGRlYnVnX2ludHIsICJpbnRlcnJ1cHQiKTsKLQlQREVCVUcoZGVidWdfc2VsZWN0aW9uLCAic2VsZWN0aW9uIik7Ci0JUERFQlVHKGRlYnVnX21zZ28sICJtZXNzYWdlIG91dCIpOwotCVBERUJVRyhkZWJ1Z19tc2dpLCAibWVzc2FnZSBpbiIpOwotCVBERUJVRyhkZWJ1Z19zdGF0dXMsICJzdGF0dXMiKTsKLQlQREVCVUcoZGVidWdfY21kLCAiY29tbWFuZCIpOwotCVBERUJVRyhkZWJ1Z19kYXRhaSwgImRhdGEgaW4iKTsKLQlQREVCVUcoZGVidWdfZGF0YW8sICJkYXRhIG91dCIpOwotCVBERUJVRyhkZWJ1Z19laCwgImVoIik7Ci0JUERFQlVHKGRlYnVnX2xvY2tpbmcsICJsb2NrcyIpOwotCVBERUJVRyhkZWJ1Z19waGFzZXMsICJwaGFzZXMiKTsKLQotCVNQUklOVEYoIlxuIik7Ci0jZW5kaWYKLQogCVNQUklOVEYoIlxucXVldWUgc3RhdHVzOlxuIik7CiAJRE9fTE9DSyhmbGFncyk7CiAJaWYgKElTU1VFX1NDKSB7CkBAIC0zMzkzLDggKzI4NzUsOCBAQAogCiAjaWYgZGVmaW5lZChBSEExNTJYX1NUQVQpCiAJU1BSSU5URigic3RhdGlzdGljczpcbiIKLQkgICAgICAgICJ0b3RhbCBjb21tYW5kczogICAgICAgICAgICAgICAlZFxuIgotCSAgICAgICAgImRpc2Nvbm5lY3Rpb25zOiAgICAgICAgICAgICAgICVkXG4iCisJCSJ0b3RhbCBjb21tYW5kczogICAgICAgICAgICAgICAlZFxuIgorCQkiZGlzY29ubmVjdGlvbnM6ICAgICAgICAgICAgICAgJWRcbiIKIAkJImJ1c2ZyZWUgd2l0aCBjaGVjayBjb25kaXRpb246ICVkXG4iCiAJCSJidXNmcmVlIHdpdGhvdXQgb2xkIGNvbW1hbmQ6ICAlZFxuIgogCQkiYnVzZnJlZSB3aXRob3V0IG5ldyBjb21tYW5kOiAgJWRcbiIKQEAgLTM0MTMsNyArMjg5NSw3IEBACiAJCUhPU1REQVRBKHNocG50KS0+YnVzZnJlZV93aXRob3V0X2FueV9hY3Rpb24pOwogCWZvcihpPTA7IGk8bWF4c3RhdGU7IGkrKykgewogCQlTUFJJTlRGKCIlLTEwcyAlLTEyZCAlLTEyZCAlLTEybGRcbiIsCi0JCSAgICAgICAgc3RhdGVzW2ldLm5hbWUsCisJCQlzdGF0ZXNbaV0ubmFtZSwKIAkJCUhPU1REQVRBKHNocG50KS0+Y291bnRfdHJhbnNbaV0sCiAJCQlIT1NUREFUQShzaHBudCktPmNvdW50W2ldLAogCQkJSE9TVERBVEEoc2hwbnQpLT50aW1lW2ldKTsKQEAgLTM2NzEsMjUgKzMxNTMsMTkgQEAKIAkJCXNldHVwW3NldHVwX2NvdW50XS5zeW5jaHJvbm91cyA9IGFoYTE1MnhbNV07CiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgICAgICAgPSBhaGExNTJ4WzZdOwogCQkJc2V0dXBbc2V0dXBfY291bnRdLmV4dF90cmFucyAgID0gYWhhMTUyeFs3XTsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVidWcgICAgICAgPSBhaGExNTJ4WzhdOwotI2VuZGlmCi0JICAJfSBlbHNlIGlmKGlvWzBdIT0wIHx8IGlycVswXSE9MCkgeworCQl9IGVsc2UgaWYgKGlvWzBdICE9IDAgfHwgaXJxWzBdICE9IDApIHsKIAkJCWlmKGlvWzBdIT0wKSAgc2V0dXBbc2V0dXBfY291bnRdLmlvX3BvcnQgPSBpb1swXTsKIAkJCWlmKGlycVswXSE9MCkgc2V0dXBbc2V0dXBfY291bnRdLmlycSAgICAgPSBpcnFbMF07CiAKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uc2NzaWlkICAgICAgPSBzY3NpaWRbMF07Ci0JICAgIAkJc2V0dXBbc2V0dXBfY291bnRdLnJlY29ubmVjdCAgID0gcmVjb25uZWN0WzBdOwotCSAgICAJCXNldHVwW3NldHVwX2NvdW50XS5wYXJpdHkgICAgICA9IHBhcml0eVswXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uc3luY2hyb25vdXMgPSBzeW5jWzBdOwotCSAgICAJCXNldHVwW3NldHVwX2NvdW50XS5kZWxheSAgICAgICA9IGRlbGF5WzBdOwotCSAgICAJCXNldHVwW3NldHVwX2NvdW50XS5leHRfdHJhbnMgICA9IGV4dHRyYW5zWzBdOwotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQkJCXNldHVwW3NldHVwX2NvdW50XS5kZWJ1ZyAgICAgICA9IGRlYnVnWzBdOwotI2VuZGlmCisJCQlzZXR1cFtzZXR1cF9jb3VudF0uc2NzaWlkICAgICAgPSBzY3NpaWRbMF07CisJCQlzZXR1cFtzZXR1cF9jb3VudF0ucmVjb25uZWN0ICAgPSByZWNvbm5lY3RbMF07CisJCQlzZXR1cFtzZXR1cF9jb3VudF0ucGFyaXR5ICAgICAgPSBwYXJpdHlbMF07CisJCQlzZXR1cFtzZXR1cF9jb3VudF0uc3luY2hyb25vdXMgPSBzeW5jWzBdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlbGF5ICAgICAgID0gZGVsYXlbMF07CisJCQlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSBleHR0cmFuc1swXTsKIAkJfQogCi0gICAgICAgICAgCWlmIChjaGVja3NldHVwKCZzZXR1cFtzZXR1cF9jb3VudF0pKQorCQlpZiAoY2hlY2tzZXR1cCgmc2V0dXBbc2V0dXBfY291bnRdKSkKIAkJCXNldHVwX2NvdW50Kys7CiAJCWVsc2UKIAkJCXByaW50ayhLRVJOX0VSUiAiYWhhMTUyeDogaW52YWxpZCBtb2R1bGUgcGFyYW1zIGlvPTB4JXgsIGlycT0lZCxzY3NpaWQ9JWQscmVjb25uZWN0PSVkLHBhcml0eT0lZCxzeW5jPSVkLGRlbGF5PSVkLGV4dHRyYW5zPSVkXG4iLApAQCAtMzcxNCwyMiArMzE5MCwxNiBAQAogCQkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gYWhhMTUyeDFbNV07CiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgICAgICAgPSBhaGExNTJ4MVs2XTsKIAkJCXNldHVwW3NldHVwX2NvdW50XS5leHRfdHJhbnMgICA9IGFoYTE1MngxWzddOwotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQkJCXNldHVwW3NldHVwX2NvdW50XS5kZWJ1ZyAgICAgICA9IGFoYTE1MngxWzhdOwotI2VuZGlmCi0JICAJfSBlbHNlIGlmKGlvWzFdIT0wIHx8IGlycVsxXSE9MCkgeworCQl9IGVsc2UgaWYgKGlvWzFdICE9IDAgfHwgaXJxWzFdICE9IDApIHsKIAkJCWlmKGlvWzFdIT0wKSAgc2V0dXBbc2V0dXBfY291bnRdLmlvX3BvcnQgPSBpb1sxXTsKIAkJCWlmKGlycVsxXSE9MCkgc2V0dXBbc2V0dXBfY291bnRdLmlycSAgICAgPSBpcnFbMV07CiAKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uc2NzaWlkICAgICAgPSBzY3NpaWRbMV07Ci0JICAgIAkJc2V0dXBbc2V0dXBfY291bnRdLnJlY29ubmVjdCAgID0gcmVjb25uZWN0WzFdOwotCSAgICAJCXNldHVwW3NldHVwX2NvdW50XS5wYXJpdHkgICAgICA9IHBhcml0eVsxXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uc3luY2hyb25vdXMgPSBzeW5jWzFdOwotCSAgICAJCXNldHVwW3NldHVwX2NvdW50XS5kZWxheSAgICAgICA9IGRlbGF5WzFdOwotCSAgICAJCXNldHVwW3NldHVwX2NvdW50XS5leHRfdHJhbnMgICA9IGV4dHRyYW5zWzFdOwotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQkJCXNldHVwW3NldHVwX2NvdW50XS5kZWJ1ZyAgICAgICA9IGRlYnVnWzFdOwotI2VuZGlmCisJCQlzZXR1cFtzZXR1cF9jb3VudF0uc2NzaWlkICAgICAgPSBzY3NpaWRbMV07CisJCQlzZXR1cFtzZXR1cF9jb3VudF0ucmVjb25uZWN0ICAgPSByZWNvbm5lY3RbMV07CisJCQlzZXR1cFtzZXR1cF9jb3VudF0ucGFyaXR5ICAgICAgPSBwYXJpdHlbMV07CisJCQlzZXR1cFtzZXR1cF9jb3VudF0uc3luY2hyb25vdXMgPSBzeW5jWzFdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlbGF5ICAgICAgID0gZGVsYXlbMV07CisJCQlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSBleHR0cmFuc1sxXTsKIAkJfQogCQlpZiAoY2hlY2tzZXR1cCgmc2V0dXBbc2V0dXBfY291bnRdKSkKIAkJCXNldHVwX2NvdW50Kys7CkBAIC0zNzc2LDkgKzMyNDYsNiBAQAogCQkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gMTsKIAkJCXNldHVwW3NldHVwX2NvdW50XS5kZWxheSAgICAgICA9IERFTEFZX0RFRkFVTFQ7CiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSAwOwotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQkJCXNldHVwW3NldHVwX2NvdW50XS5kZWJ1ZyAgICAgICA9IERFQlVHX0RFRkFVTFQ7Ci0jZW5kaWYKICNpZiBkZWZpbmVkKF9fSVNBUE5QX18pCiAJCQlwbnBkZXZbc2V0dXBfY291bnRdICAgICAgICAgICAgPSBkZXY7CiAjZW5kaWYKQEAgLTM4NDcsOSArMzMxNCw2IEBACiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uc3luY2hyb25vdXMgPSBjb25mLmNmX3N5bmNuZWc7CiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgPSBERUxBWV9ERUZBVUxUOwogCQkJc2V0dXBbc2V0dXBfY291bnRdLmV4dF90cmFucyA9IDA7Ci0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlYnVnID0gREVCVUdfREVGQVVMVDsKLSNlbmRpZgogCQkJc2V0dXBfY291bnQrKzsKIAogCQl9CkBAIC0zOTAzLDExICszMzY3LDggQEAKICNpZiAhZGVmaW5lZChNT0RVTEUpCiBzdGF0aWMgaW50IF9faW5pdCBhaGExNTJ4X3NldHVwKGNoYXIgKnN0cikKIHsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JaW50IGludHNbMTFdOwotI2Vsc2UKIAlpbnQgaW50c1sxMF07Ci0jZW5kaWYKKwogCWdldF9vcHRpb25zKHN0ciwgQVJSQVlfU0laRShpbnRzKSwgaW50cyk7CiAKIAlpZihzZXR1cF9jb3VudD49QVJSQVlfU0laRShzZXR1cCkpIHsKQEAgLTM5MjQsMTYgKzMzODUsOSBAQAogCXNldHVwW3NldHVwX2NvdW50XS5zeW5jaHJvbm91cyA9IGludHNbMF0gPj0gNiA/IGludHNbNl0gOiAxOwogCXNldHVwW3NldHVwX2NvdW50XS5kZWxheSAgICAgICA9IGludHNbMF0gPj0gNyA/IGludHNbN10gOiBERUxBWV9ERUZBVUxUOwogCXNldHVwW3NldHVwX2NvdW50XS5leHRfdHJhbnMgICA9IGludHNbMF0gPj0gOCA/IGludHNbOF0gOiAwOwotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlzZXR1cFtzZXR1cF9jb3VudF0uZGVidWcgICAgICAgPSBpbnRzWzBdID49IDkgPyBpbnRzWzldIDogREVCVUdfREVGQVVMVDsKLQlpZiAoaW50c1swXSA+IDkpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJhaGExNTJ4OiB1c2FnZTogYWhhMTUyeD08SU9CQVNFPlssPElSUT5bLDxTQ1NJIElEPiIKLQkJICAgICAgICJbLDxSRUNPTk5FQ1Q+Wyw8UEFSSVRZPlssPFNZTkNIUk9OT1VTPlssPERFTEFZPlssPEVYVF9UUkFOUz5bLDxERUJVRz5dXV1dXV1dXVxuIik7Ci0jZWxzZQogCWlmIChpbnRzWzBdID4gOCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qfSovCiAJCXByaW50ayhLRVJOX05PVElDRSAiYWhhMTUyeDogdXNhZ2U6IGFoYTE1Mng9PElPQkFTRT5bLDxJUlE+Wyw8U0NTSSBJRD4iCiAJCSAgICAgICAiWyw8UkVDT05ORUNUPlssPFBBUklUWT5bLDxTWU5DSFJPTk9VUz5bLDxERUxBWT5bLDxFWFRfVFJBTlM+XV1dXV1dXVxuIik7Ci0jZW5kaWYKIAl9IGVsc2UgewogCQlzZXR1cF9jb3VudCsrOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNzQwLmMgYi9kcml2ZXJzL3Njc2kvYWhhMTc0MC5jCmluZGV4IDVmMzEwMTcuLjMxYWNlNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNzQwLmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE3NDAuYwpAQCAtNTMxLDcgKzUzMSw3IEBACiAgKiBxdWlldCBhcyBwb3NzaWJsZS4uLgogICovCiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gU1VDQ0VTUzsKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYWhhMTc0MF90ZW1wbGF0ZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCmluZGV4IGVkMzMzNjY5Li5kNWM3YjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKQEAgLTkyNSw2ICs5MjUsNyBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhaGRfbGludXhfc2xhdmVfY29uZmlndXJlLAogCS50YXJnZXRfYWxsb2MJCT0gYWhkX2xpbnV4X3RhcmdldF9hbGxvYywKIAkudGFyZ2V0X2Rlc3Ryb3kJCT0gYWhkX2xpbnV4X3RhcmdldF9kZXN0cm95LAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBCdXMgRE1BICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNDY4LDEyICsxNDY5LDkgQEAKIAogCXN3aXRjaCAoKGRldi0+ZmxhZ3MgJiAoQUhEX0RFVl9RX0JBU0lDfEFIRF9ERVZfUV9UQUdHRUQpKSkgewogCWNhc2UgQUhEX0RFVl9RX0JBU0lDOgotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfU0lNUExFX1RBU0spOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBkZXYtPm9wZW5pbmdzICsgZGV2LT5hY3RpdmUpOwotCQlicmVhazsKIAljYXNlIEFIRF9ERVZfUV9UQUdHRUQ6Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIE1TR19PUkRFUkVEX1RBU0spOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBkZXYtPm9wZW5pbmdzICsgZGV2LT5hY3RpdmUpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LAorCQkJCWRldi0+b3BlbmluZ3MgKyBkZXYtPmFjdGl2ZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qCkBAIC0xNDgyLDcgKzE0ODAsNyBAQAogCQkgKiBzZXJpYWxseSBvbiB0aGUgY29udHJvbGxlci9kZXZpY2UuICBUaGlzIHNob3VsZAogCQkgKiByZW1vdmUgc29tZSBsYXRlbmN5LgogCQkgKi8KLQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCAxKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgMSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTE2MTksMTUgKzE2MTcsNiBAQAogCX0KIAogCWlmICgoZGV2LT5mbGFncyAmIChBSERfREVWX1FfVEFHR0VEfEFIRF9ERVZfUV9CQVNJQykpICE9IDApIHsKLQkJaW50CW1zZ19ieXRlczsKLQkJdWludDhfdCB0YWdfbXNnc1syXTsKLQotCQltc2dfYnl0ZXMgPSBzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWdfbXNncyk7Ci0JCWlmIChtc2dfYnl0ZXMgJiYgdGFnX21zZ3NbMF0gIT0gTVNHX1NJTVBMRV9UQVNLKSB7Ci0JCQloc2NiLT5jb250cm9sIHw9IHRhZ19tc2dzWzBdOwotCQkJaWYgKHRhZ19tc2dzWzBdID09IE1TR19PUkRFUkVEX1RBU0spCi0JCQkJZGV2LT5jb21tYW5kc19zaW5jZV9pZGxlX29yX290YWcgPSAwOwotCQl9IGVsc2UKIAkJaWYgKGRldi0+Y29tbWFuZHNfc2luY2VfaWRsZV9vcl9vdGFnID09IEFIRF9PVEFHX1RIUkVTSAogCQkgJiYgKGRldi0+ZmxhZ3MgJiBBSERfREVWX1FfVEFHR0VEKSAhPSAwKSB7CiAJCQloc2NiLT5jb250cm9sIHw9IE1TR19PUkRFUkVEX1RBU0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYwppbmRleCBkMmM5YmYzLi44ODM2MDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKQEAgLTgxMiw2ICs4MTIsNyBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhaGNfbGludXhfc2xhdmVfY29uZmlndXJlLAogCS50YXJnZXRfYWxsb2MJCT0gYWhjX2xpbnV4X3RhcmdldF9hbGxvYywKIAkudGFyZ2V0X2Rlc3Ryb3kJCT0gYWhjX2xpbnV4X3RhcmdldF9kZXN0cm95LAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRhc2tsZXQgSGFuZGxlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMzM0LDEzICsxMzM1LDkgQEAKIAl9CiAJc3dpdGNoICgoZGV2LT5mbGFncyAmIChBSENfREVWX1FfQkFTSUN8QUhDX0RFVl9RX1RBR0dFRCkpKSB7CiAJY2FzZSBBSENfREVWX1FfQkFTSUM6Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIE1TR19TSU1QTEVfVEFHKTsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKLQkJYnJlYWs7CiAJY2FzZSBBSENfREVWX1FfVEFHR0VEOgotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfT1JERVJFRF9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBkZXYtPm9wZW5pbmdzICsgZGV2LT5hY3RpdmUpOwotCQlicmVhazsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwKKwkJCQlkZXYtPm9wZW5pbmdzICsgZGV2LT5hY3RpdmUpOwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIFdlIGFsbG93IHRoZSBPUyB0byBxdWV1ZSAyIHVudGFnZ2VkIHRyYW5zYWN0aW9ucyB0bwpAQCAtMTM0OCw3ICsxMzQ1LDcgQEAKIAkJICogc2VyaWFsbHkgb24gdGhlIGNvbnRyb2xsZXIvZGV2aWNlLiAgVGhpcyBzaG91bGQKIAkJICogcmVtb3ZlIHNvbWUgbGF0ZW5jeS4KIAkJICovCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgMik7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIDIpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xNDQ3LDcgKzE0NDQsNyBAQAogCSAqIHdlIGFyZSBzdG9yaW5nIGEgZnVsbCBidXN5IHRhcmdldCAqbHVuKgogCSAqIHRhYmxlIGluIFNDQiBzcGFjZS4KIAkgKi8KLQlpZiAoIWJsa19ycV90YWdnZWQoY21kLT5yZXF1ZXN0KQorCWlmICghKGNtZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkKIAkgICAgJiYgKGFoYy0+ZmVhdHVyZXMgJiBBSENfU0NCX0JUVCkgPT0gMCkgewogCQlpbnQgdGFyZ2V0X29mZnNldDsKIApAQCAtMTUwMSwxNSArMTQ5OCw3IEBACiAJfQogCiAJaWYgKChkZXYtPmZsYWdzICYgKEFIQ19ERVZfUV9UQUdHRUR8QUhDX0RFVl9RX0JBU0lDKSkgIT0gMCkgewotCQlpbnQJbXNnX2J5dGVzOwotCQl1aW50OF90IHRhZ19tc2dzWzJdOwotCQkKLQkJbXNnX2J5dGVzID0gc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgdGFnX21zZ3MpOwotCQlpZiAobXNnX2J5dGVzICYmIHRhZ19tc2dzWzBdICE9IE1TR19TSU1QTEVfVEFTSykgewotCQkJaHNjYi0+Y29udHJvbCB8PSB0YWdfbXNnc1swXTsKLQkJCWlmICh0YWdfbXNnc1swXSA9PSBNU0dfT1JERVJFRF9UQVNLKQotCQkJCWRldi0+Y29tbWFuZHNfc2luY2VfaWRsZV9vcl9vdGFnID0gMDsKLQkJfSBlbHNlIGlmIChkZXYtPmNvbW1hbmRzX3NpbmNlX2lkbGVfb3Jfb3RhZyA9PSBBSENfT1RBR19USFJFU0gKKwkJaWYgKGRldi0+Y29tbWFuZHNfc2luY2VfaWRsZV9vcl9vdGFnID09IEFIQ19PVEFHX1RIUkVTSAogCQkJCSYmIChkZXYtPmZsYWdzICYgQUhDX0RFVl9RX1RBR0dFRCkgIT0gMCkgewogCQkJaHNjYi0+Y29udHJvbCB8PSBNU0dfT1JERVJFRF9UQVNLOwogCQkJZGV2LT5jb21tYW5kc19zaW5jZV9pZGxlX29yX290YWcgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eC5oIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eC5oCmluZGV4IDY2Y2RhNjYuLjI2ZDRhZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHguaAorKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4LmgKQEAgLTc4LDcgKzc4LDcgQEAKIAogdm9pZCBhc2RfaW52YWxpZGF0ZV9lZGIoc3RydWN0IGFzZF9hc2NiICphc2NiLCBpbnQgZWRiX2lkKTsKIAotaW50ICBhc2RfZXhlY3V0ZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqLCBpbnQgbnVtLCBnZnBfdCBnZnBfZmxhZ3MpOworaW50ICBhc2RfZXhlY3V0ZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIAogdm9pZCBhc2Rfc2V0X2RtYW1vZGUoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaHdpLmMgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2h3aS5jCmluZGV4IDRkZjg2N2UuLjlmNjM2YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9od2kuYwpAQCAtMTIwMCw4ICsxMjAwLDcgQEAKICAqIENhc2UgQTogd2UgY2FuIHNlbmQgdGhlIHdob2xlIGJhdGNoIGF0IG9uY2UuICBJbmNyZW1lbnQgInBlbmRpbmciCiAgKiBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZnVuY3Rpb24sIHdoZW4gaXQgaXMgY2hlY2tlZCwgaW4gb3JkZXIgdG8KICAqIGVsaW1pbmF0ZSByYWNlcyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IG11bHRpcGxlIHByb2Nlc3Nlcy4KLSAqIENhc2UgQjogc2hvdWxkIG5ldmVyIGhhcHBlbiBpZiB0aGUgbWFuYWdpbmcgbGF5ZXIgY29uc2lkZXJzCi0gKiBsbGRkX3F1ZXVlX3NpemUuCisgKiBDYXNlIEI6IHNob3VsZCBuZXZlciBoYXBwZW4uCiAgKi8KIGludCBhc2RfcG9zdF9hc2NiX2xpc3Qoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgc3RydWN0IGFzZF9hc2NiICphc2NiLAogCQkgICAgICAgaW50IG51bSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9pbml0LmMKaW5kZXggYzU2NzQxZi4uMTRmYzAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9pbml0LmMKQEAgLTQ5LDE0ICs0OSw2IEBACiAJIlx0RW5hYmxlKDEpIG9yIGRpc2FibGUoMCkgdXNpbmcgUENJIE1TSS5cbiIKIAkiXHREZWZhdWx0OiAwIik7CiAKLXN0YXRpYyBpbnQgbGxkZF9tYXhfZXhlY3V0ZV9udW0gPSAwOwotbW9kdWxlX3BhcmFtX25hbWVkKGNvbGxlY3RvciwgbGxkZF9tYXhfZXhlY3V0ZV9udW0sIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNvbGxlY3RvciwgIlxuIgotCSJcdElmIGdyZWF0ZXIgdGhhbiBvbmUsIHRlbGxzIHRoZSBTQVMgTGF5ZXIgdG8gcnVuIGluIFRhc2sgQ29sbGVjdG9yXG4iCi0JIlx0TW9kZS4gIElmIDEgb3IgMCwgdGVsbHMgdGhlIFNBUyBMYXllciB0byBydW4gaW4gRGlyZWN0IE1vZGUuXG4iCi0JIlx0VGhlIGFpYzk0eHggU0FTIExMREQgc3VwcG9ydHMgYm90aCBtb2Rlcy5cbiIKLQkiXHREZWZhdWx0OiAwIChEaXJlY3QgTW9kZSkuXG4iKTsKLQogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqYWljOTR4eF90cmFuc3BvcnRfdGVtcGxhdGU7CiBzdGF0aWMgaW50IGFzZF9zY2FuX2ZpbmlzaGVkKHN0cnVjdCBTY3NpX0hvc3QgKiwgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBhc2Rfc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICopOwpAQCAtODMsNiArNzUsOCBAQAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IHNhc19laF9idXNfcmVzZXRfaGFuZGxlciwKIAkudGFyZ2V0X2Rlc3Ryb3kJCT0gc2FzX3RhcmdldF9kZXN0cm95LAogCS5pb2N0bAkJCT0gc2FzX2lvY3RsLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RhdGljIGludCBhc2RfbWFwX21lbWlvKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCkBAIC03MDksOSArNzAzLDYgQEAKIAlhc2RfaGEtPnNhc19oYS5zYXNfcG9ydD0gc2FzX3BvcnRzOwogCWFzZF9oYS0+c2FzX2hhLm51bV9waHlzPSBBU0RfTUFYX1BIWVM7CiAKLQlhc2RfaGEtPnNhc19oYS5sbGRkX3F1ZXVlX3NpemUgPSBhc2RfaGEtPnNlcS5jYW5fcXVldWU7Ci0JYXNkX2hhLT5zYXNfaGEubGxkZF9tYXhfZXhlY3V0ZV9udW0gPSBsbGRkX21heF9leGVjdXRlX251bTsKLQogCXJldHVybiBzYXNfcmVnaXN0ZXJfaGEoJmFzZF9oYS0+c2FzX2hhKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90YXNrLmMgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Rhc2suYwppbmRleCA1OWI4NmUyLi41ZmYxY2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Rhc2suYworKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Rhc2suYwpAQCAtNTQzLDggKzU0Myw3IEBACiAJcmV0dXJuIHJlczsKIH0KIAotaW50IGFzZF9leGVjdXRlX3Rhc2soc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLAotCQkgICAgIGdmcF90IGdmcF9mbGFncykKK2ludCBhc2RfZXhlY3V0ZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCWludCByZXMgPSAwOwogCUxJU1RfSEVBRChhbGlzdCk7CkBAIC01NTMsMTEgKzU1MiwxMSBAQAogCXN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEgPSB0YXNrLT5kZXYtPnBvcnQtPmhhLT5sbGRkX2hhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlyZXMgPSBhc2RfY2FuX3F1ZXVlKGFzZF9oYSwgbnVtKTsKKwlyZXMgPSBhc2RfY2FuX3F1ZXVlKGFzZF9oYSwgMSk7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAotCXJlcyA9IG51bTsKKwlyZXMgPSAxOwogCWFzY2IgPSBhc2RfYXNjYl9hbGxvY19saXN0KGFzZF9oYSwgJnJlcywgZ2ZwX2ZsYWdzKTsKIAlpZiAocmVzKSB7CiAJCXJlcyA9IC1FTk9NRU07CkBAIC01NjgsNyArNTY3LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsICZhbGlzdCwgbGlzdCkgewogCQlhLT51bGRkX3Rhc2sgPSB0OwogCQl0LT5sbGRkX3Rhc2sgPSBhOwotCQl0ID0gbGlzdF9lbnRyeSh0LT5saXN0Lm5leHQsIHN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CisJCWJyZWFrOwogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsICZhbGlzdCwgbGlzdCkgewogCQl0ID0gYS0+dWxkZF90YXNrOwpAQCAtNjAxLDcgKzYwMCw3IEBACiAJfQogCWxpc3RfZGVsX2luaXQoJmFsaXN0KTsKIAotCXJlcyA9IGFzZF9wb3N0X2FzY2JfbGlzdChhc2RfaGEsIGFzY2IsIG51bSk7CisJcmVzID0gYXNkX3Bvc3RfYXNjYl9saXN0KGFzZF9oYSwgYXNjYiwgMSk7CiAJaWYgKHVubGlrZWx5KHJlcykpIHsKIAkJYSA9IE5VTEw7CiAJCV9fbGlzdF9hZGQoJmFsaXN0LCBhc2NiLT5saXN0LnByZXYsICZhc2NiLT5saXN0KTsKQEAgLTYzOSw2ICs2MzgsNiBAQAogb3V0X2VycjoKIAlpZiAoYXNjYikKIAkJYXNkX2FzY2JfZnJlZV9saXN0KGFzY2IpOwotCWFzZF9jYW5fZGVxdWV1ZShhc2RfaGEsIG51bSk7CisJYXNkX2Nhbl9kZXF1ZXVlKGFzZF9oYSwgMSk7CiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hbTUzYzk3NC5jIGIvZHJpdmVycy9zY3NpL2FtNTNjOTc0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzZTJjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9hbTUzYzk3NC5jCkBAIC0wLDAgKzEsNTg2IEBACisvKgorICogQU1EIGFtNTNjOTc0IGRyaXZlci4KKyAqIENvcHlyaWdodCAoYykgMjAxNCBIYW5uZXMgUmVpbmVja2UsIFNVU0UgTGludXggR21iSAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisKKyNpbmNsdWRlICJlc3Bfc2NzaS5oIgorCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAiYW01M2M5NzQiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAiMS4wMCIKKworc3RhdGljIGJvb2wgYW01M2M5NzRfZGVidWc7CitzdGF0aWMgYm9vbCBhbTUzYzk3NF9mZW5hYiA9IHRydWU7CisKKyNkZWZpbmUgZXNwX2RtYV9sb2coZiwgYS4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoYW01M2M5NzRfZGVidWcpCQkJCQlcCisJCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgZXNwLT5ob3N0LCBmLCAjI2EpOwlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBFU1BfRE1BX0NNRCAweDEwCisjZGVmaW5lIEVTUF9ETUFfU1RDIDB4MTEKKyNkZWZpbmUgRVNQX0RNQV9TUEEgMHgxMgorI2RlZmluZSBFU1BfRE1BX1dCQyAweDEzCisjZGVmaW5lIEVTUF9ETUFfV0FDIDB4MTQKKyNkZWZpbmUgRVNQX0RNQV9TVEFUVVMgMHgxNQorI2RlZmluZSBFU1BfRE1BX1NNRExBIDB4MTYKKyNkZWZpbmUgRVNQX0RNQV9XTUFDIDB4MTcKKworI2RlZmluZSBFU1BfRE1BX0NNRF9JRExFIDB4MDAKKyNkZWZpbmUgRVNQX0RNQV9DTURfQkxBU1QgMHgwMQorI2RlZmluZSBFU1BfRE1BX0NNRF9BQk9SVCAweDAyCisjZGVmaW5lIEVTUF9ETUFfQ01EX1NUQVJUIDB4MDMKKyNkZWZpbmUgRVNQX0RNQV9DTURfTUFTSyAgMHgwMworI2RlZmluZSBFU1BfRE1BX0NNRF9ESUFHIDB4MDQKKyNkZWZpbmUgRVNQX0RNQV9DTURfTURMIDB4MTAKKyNkZWZpbmUgRVNQX0RNQV9DTURfSU5URV9QIDB4MjAKKyNkZWZpbmUgRVNQX0RNQV9DTURfSU5URV9EIDB4NDAKKyNkZWZpbmUgRVNQX0RNQV9DTURfRElSIDB4ODAKKworI2RlZmluZSBFU1BfRE1BX1NUQVRfUFdETiAweDAxCisjZGVmaW5lIEVTUF9ETUFfU1RBVF9FUlJPUiAweDAyCisjZGVmaW5lIEVTUF9ETUFfU1RBVF9BQk9SVCAweDA0CisjZGVmaW5lIEVTUF9ETUFfU1RBVF9ET05FIDB4MDgKKyNkZWZpbmUgRVNQX0RNQV9TVEFUX1NDU0lJTlQgMHgxMAorI2RlZmluZSBFU1BfRE1BX1NUQVRfQkNNUExUIDB4MjAKKworLyogRUVQUk9NIGlzIGFjY2Vzc2VkIHdpdGggMTYtYml0IHZhbHVlcyAqLworI2RlZmluZSBEQzM5MF9FRVBST01fUkVBRCAweDgwCisjZGVmaW5lIERDMzkwX0VFUFJPTV9MRU4gMHg0MAorCisvKgorICogREMzOTAgRUVQUk9NCisgKgorICogOCAqIDQgYnl0ZXMgb2YgcGVyLWRldmljZSBvcHRpb25zCisgKiBmb2xsb3dlZCBieSBIQkEgc3BlY2lmaWMgb3B0aW9ucworICovCisKKy8qIFBlci1kZXZpY2Ugb3B0aW9ucyAqLworI2RlZmluZSBEQzM5MF9FRV9NT0RFMSAweDAwCisjZGVmaW5lIERDMzkwX0VFX1NQRUVEIDB4MDEKKworLyogSEJBLXNwZWNpZmljIG9wdGlvbnMgKi8KKyNkZWZpbmUgREMzOTBfRUVfQURBUFRfU0NTSV9JRCAweDQwCisjZGVmaW5lIERDMzkwX0VFX01PREUyIDB4NDEKKyNkZWZpbmUgREMzOTBfRUVfREVMQVkgMHg0MgorI2RlZmluZSBEQzM5MF9FRV9UQUdfQ01EX05VTSAweDQzCisKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTFfUEFSSVRZX0NISyAgIDB4MDEKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTFfU1lOQ19ORUdPICAgIDB4MDIKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTFfRU5fRElTQyAgICAgIDB4MDQKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTFfU0VORF9TVEFSVCAgIDB4MDgKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTFfVENRICAgICAgICAgIDB4MTAKKworI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9NT1JFXzJEUlYgICAgMHgwMQorI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9HUkVBVEVSXzFHICAgMHgwMgorI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9SU1RfU0NTSV9CVVMgMHgwNAorI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9BQ1RJVkVfTkVHQVRJT04gMHgwOAorI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9OT19TRUVLICAgICAgMHgxMAorI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9MVU5fQ0hFQ0sgICAgMHgyMAorCitzdHJ1Y3QgcGNpX2VzcF9wcml2IHsKKwlzdHJ1Y3QgZXNwICplc3A7CisJdTggZG1hX3N0YXR1czsKK307CisKK3N0YXRpYyB2b2lkIHBjaV9lc3BfZG1hX2RyYWluKHN0cnVjdCBlc3AgKmVzcCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9lc3BfcHJpdiAqcGNpX2VzcF9nZXRfcHJpdihzdHJ1Y3QgZXNwICplc3ApCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBlc3AtPmRldjsKKworCXJldHVybiBwY2lfZ2V0X2RydmRhdGEocGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3Bfd3JpdGU4KHN0cnVjdCBlc3AgKmVzcCwgdTggdmFsLCB1bnNpZ25lZCBsb25nIHJlZykKK3sKKwlpb3dyaXRlOCh2YWwsIGVzcC0+cmVncyArIChyZWcgKiA0VUwpKTsKK30KKworc3RhdGljIHU4IHBjaV9lc3BfcmVhZDgoc3RydWN0IGVzcCAqZXNwLCB1bnNpZ25lZCBsb25nIHJlZykKK3sKKwlyZXR1cm4gaW9yZWFkOChlc3AtPnJlZ3MgKyAocmVnICogNFVMKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3Bfd3JpdGUzMihzdHJ1Y3QgZXNwICplc3AsIHUzMiB2YWwsIHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXJldHVybiBpb3dyaXRlMzIodmFsLCBlc3AtPnJlZ3MgKyAocmVnICogNFVMKSk7Cit9CisKK3N0YXRpYyBkbWFfYWRkcl90IHBjaV9lc3BfbWFwX3NpbmdsZShzdHJ1Y3QgZXNwICplc3AsIHZvaWQgKmJ1ZiwKKwkJCQkgICAgIHNpemVfdCBzeiwgaW50IGRpcikKK3sKKwlyZXR1cm4gcGNpX21hcF9zaW5nbGUoZXNwLT5kZXYsIGJ1Ziwgc3osIGRpcik7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2VzcF9tYXBfc2coc3RydWN0IGVzcCAqZXNwLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICBpbnQgbnVtX3NnLCBpbnQgZGlyKQoreworCXJldHVybiBwY2lfbWFwX3NnKGVzcC0+ZGV2LCBzZywgbnVtX3NnLCBkaXIpOworfQorCitzdGF0aWMgdm9pZCBwY2lfZXNwX3VubWFwX3NpbmdsZShzdHJ1Y3QgZXNwICplc3AsIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkgc2l6ZV90IHN6LCBpbnQgZGlyKQoreworCXBjaV91bm1hcF9zaW5nbGUoZXNwLT5kZXYsIGFkZHIsIHN6LCBkaXIpOworfQorCitzdGF0aWMgdm9pZCBwY2lfZXNwX3VubWFwX3NnKHN0cnVjdCBlc3AgKmVzcCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICAgaW50IG51bV9zZywgaW50IGRpcikKK3sKKwlwY2lfdW5tYXBfc2coZXNwLT5kZXYsIHNnLCBudW1fc2csIGRpcik7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2VzcF9pcnFfcGVuZGluZyhzdHJ1Y3QgZXNwICplc3ApCit7CisJc3RydWN0IHBjaV9lc3BfcHJpdiAqcGVwID0gcGNpX2VzcF9nZXRfcHJpdihlc3ApOworCisJcGVwLT5kbWFfc3RhdHVzID0gcGNpX2VzcF9yZWFkOChlc3AsIEVTUF9ETUFfU1RBVFVTKTsKKwllc3BfZG1hX2xvZygiZG1hIGludHIgZHJlZ1slMDJ4XVxuIiwgcGVwLT5kbWFfc3RhdHVzKTsKKworCWlmIChwZXAtPmRtYV9zdGF0dXMgJiAoRVNQX0RNQV9TVEFUX0VSUk9SIHwKKwkJCSAgICAgICBFU1BfRE1BX1NUQVRfQUJPUlQgfAorCQkJICAgICAgIEVTUF9ETUFfU1RBVF9ET05FIHwKKwkJCSAgICAgICBFU1BfRE1BX1NUQVRfU0NTSUlOVCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3BfcmVzZXRfZG1hKHN0cnVjdCBlc3AgKmVzcCkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvID8gKi8KK30KKworc3RhdGljIHZvaWQgcGNpX2VzcF9kbWFfZHJhaW4oc3RydWN0IGVzcCAqZXNwKQoreworCXU4IHJlc2lkOworCWludCBsaW0gPSAxMDAwOworCisKKwlpZiAoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSA9PSBFU1BfRE9QIHx8CisJICAgIChlc3AtPnNyZWcgJiBFU1BfU1RBVF9QTUFTSykgPT0gRVNQX0RJUCkKKwkJLyogRGF0YS1JbiBvciBEYXRhLU91dCwgbm90aGluZyB0byBiZSBkb25lICovCisJCXJldHVybjsKKworCXdoaWxlICgtLWxpbSA+IDApIHsKKwkJcmVzaWQgPSBwY2lfZXNwX3JlYWQ4KGVzcCwgRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTOworCQlpZiAocmVzaWQgPD0gMSkKKwkJCWJyZWFrOworCQljcHVfcmVsYXgoKTsKKwl9CisJaWYgKHJlc2lkID4gMSkgeworCQkvKiBGSUZPIG5vdCBjbGVhcmVkICovCisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCSAgICAgIkZJRk8gbm90IGNsZWFyZWQsICVkIGJ5dGVzIGxlZnRcbiIsCisJCQkgICAgIHJlc2lkKTsKKwl9CisKKwkvKgorCSAqIFdoZW4gdGhlcmUgaXMgYSByZXNpZHVhbCBCQ01QTFQgd2lsbCBuZXZlciBiZSBzZXQKKwkgKiAob2J2aW91c2x5KS4gQnV0IHdlIHN0aWxsIGhhdmUgdG8gaXNzdWUgdGhlIEJMQVNUCisJICogY29tbWFuZCwgb3RoZXJ3aXNlIHRoZSBkYXRhIHdpbGwgbm90IGJlaW5nIHRyYW5zZmVycmVkLgorCSAqIEJ1dCB3ZSdsbCBuZXZlciBrbm93IHdoZW4gdGhlIEJMQVNUIG9wZXJhdGlvbiBpcworCSAqIGZpbmlzaGVkLiBTbyBjaGVjayBmb3Igc29tZSB0aW1lIGFuZCBnaXZlIHVwIGV2ZW50dWFsbHkuCisJICovCisJbGltID0gMTAwMDsKKwlwY2lfZXNwX3dyaXRlOChlc3AsIEVTUF9ETUFfQ01EX0RJUiB8IEVTUF9ETUFfQ01EX0JMQVNULCBFU1BfRE1BX0NNRCk7CisJd2hpbGUgKHBjaV9lc3BfcmVhZDgoZXNwLCBFU1BfRE1BX1NUQVRVUykgJiBFU1BfRE1BX1NUQVRfQkNNUExUKSB7CisJCWlmICgtLWxpbSA9PSAwKQorCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCX0KKwlwY2lfZXNwX3dyaXRlOChlc3AsIEVTUF9ETUFfQ01EX0RJUiB8IEVTUF9ETUFfQ01EX0lETEUsIEVTUF9ETUFfQ01EKTsKKwllc3BfZG1hX2xvZygiRE1BIGJsYXN0IGRvbmUgKCVkIHRyaWVzLCAlZCBieXRlcyBsZWZ0KVxuIiwgbGltLCByZXNpZCk7CisJLyogQkxBU1QgcmVzaWR1YWwgaGFuZGxpbmcgaXMgY3VycmVudGx5IHVudGVzdGVkICovCisJaWYgKFdBUk5fT05fT05DRShyZXNpZCA9PSAxKSkgeworCQlzdHJ1Y3QgZXNwX2NtZF9lbnRyeSAqZW50ID0gZXNwLT5hY3RpdmVfY21kOworCisJCWVudC0+ZmxhZ3MgfD0gRVNQX0NNRF9GTEFHX1JFU0lEVUFMOworCX0KK30KKworc3RhdGljIHZvaWQgcGNpX2VzcF9kbWFfaW52YWxpZGF0ZShzdHJ1Y3QgZXNwICplc3ApCit7CisJc3RydWN0IHBjaV9lc3BfcHJpdiAqcGVwID0gcGNpX2VzcF9nZXRfcHJpdihlc3ApOworCisJZXNwX2RtYV9sb2coImludmFsaWRhdGUgRE1BXG4iKTsKKworCXBjaV9lc3Bfd3JpdGU4KGVzcCwgRVNQX0RNQV9DTURfSURMRSwgRVNQX0RNQV9DTUQpOworCXBlcC0+ZG1hX3N0YXR1cyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2VzcF9kbWFfZXJyb3Ioc3RydWN0IGVzcCAqZXNwKQoreworCXN0cnVjdCBwY2lfZXNwX3ByaXYgKnBlcCA9IHBjaV9lc3BfZ2V0X3ByaXYoZXNwKTsKKworCWlmIChwZXAtPmRtYV9zdGF0dXMgJiBFU1BfRE1BX1NUQVRfRVJST1IpIHsKKwkJdTggZG1hX2NtZCA9IHBjaV9lc3BfcmVhZDgoZXNwLCBFU1BfRE1BX0NNRCk7CisKKwkJaWYgKChkbWFfY21kICYgRVNQX0RNQV9DTURfTUFTSykgPT0gRVNQX0RNQV9DTURfU1RBUlQpCisJCQlwY2lfZXNwX3dyaXRlOChlc3AsIEVTUF9ETUFfQ01EX0FCT1JULCBFU1BfRE1BX0NNRCk7CisKKwkJcmV0dXJuIDE7CisJfQorCWlmIChwZXAtPmRtYV9zdGF0dXMgJiBFU1BfRE1BX1NUQVRfQUJPUlQpIHsKKwkJcGNpX2VzcF93cml0ZTgoZXNwLCBFU1BfRE1BX0NNRF9JRExFLCBFU1BfRE1BX0NNRCk7CisJCXBlcC0+ZG1hX3N0YXR1cyA9IHBjaV9lc3BfcmVhZDgoZXNwLCBFU1BfRE1BX0NNRCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpX2VzcF9zZW5kX2RtYV9jbWQoc3RydWN0IGVzcCAqZXNwLCB1MzIgYWRkciwgdTMyIGVzcF9jb3VudCwKKwkJCQkgdTMyIGRtYV9jb3VudCwgaW50IHdyaXRlLCB1OCBjbWQpCit7CisJc3RydWN0IHBjaV9lc3BfcHJpdiAqcGVwID0gcGNpX2VzcF9nZXRfcHJpdihlc3ApOworCXUzMiB2YWwgPSAwOworCisJQlVHX09OKCEoY21kICYgRVNQX0NNRF9ETUEpKTsKKworCXBlcC0+ZG1hX3N0YXR1cyA9IDA7CisKKwkvKiBTZXQgRE1BIGVuZ2luZSB0byBJRExFICovCisJaWYgKHdyaXRlKQorCQkvKiBETUEgd3JpdGUgZGlyZWN0aW9uIGxvZ2ljIGlzIGludmVydGVkICovCisJCXZhbCB8PSBFU1BfRE1BX0NNRF9ESVI7CisJcGNpX2VzcF93cml0ZTgoZXNwLCBFU1BfRE1BX0NNRF9JRExFIHwgdmFsLCBFU1BfRE1BX0NNRCk7CisKKwlwY2lfZXNwX3dyaXRlOChlc3AsIChlc3BfY291bnQgPj4gMCkgJiAweGZmLCBFU1BfVENMT1cpOworCXBjaV9lc3Bfd3JpdGU4KGVzcCwgKGVzcF9jb3VudCA+PiA4KSAmIDB4ZmYsIEVTUF9UQ01FRCk7CisJaWYgKGVzcC0+Y29uZmlnMiAmIEVTUF9DT05GSUcyX0ZFTkFCKQorCQlwY2lfZXNwX3dyaXRlOChlc3AsIChlc3BfY291bnQgPj4gMTYpICYgMHhmZiwgRVNQX1RDSEkpOworCisJcGNpX2VzcF93cml0ZTMyKGVzcCwgZXNwX2NvdW50LCBFU1BfRE1BX1NUQyk7CisJcGNpX2VzcF93cml0ZTMyKGVzcCwgYWRkciwgRVNQX0RNQV9TUEEpOworCisJZXNwX2RtYV9sb2coInN0YXJ0IGRtYSBhZGRyWyV4XSBjb3VudFslZDolZF1cbiIsCisJCSAgICBhZGRyLCBlc3BfY291bnQsIGRtYV9jb3VudCk7CisKKwlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOworCS8qIFNlbmQgRE1BIFN0YXJ0IGNvbW1hbmQgKi8KKwlwY2lfZXNwX3dyaXRlOChlc3AsIEVTUF9ETUFfQ01EX1NUQVJUIHwgdmFsLCBFU1BfRE1BX0NNRCk7Cit9CisKK3N0YXRpYyB1MzIgcGNpX2VzcF9kbWFfbGVuZ3RoX2xpbWl0KHN0cnVjdCBlc3AgKmVzcCwgdTMyIGRtYV9hZGRyLCB1MzIgZG1hX2xlbikKK3sKKwlpbnQgZG1hX2xpbWl0ID0gMTY7CisJdTMyIGJhc2UsIGVuZDsKKworCS8qCisJICogSWYgQ09ORklHMl9GRU5BQiBpcyBzZXQgd2UgY2FuCisJICogaGFuZGxlIHVwIHRvIDI0IGJpdCBhZGRyZXNzZXMKKwkgKi8KKwlpZiAoZXNwLT5jb25maWcyICYgRVNQX0NPTkZJRzJfRkVOQUIpCisJCWRtYV9saW1pdCA9IDI0OworCisJaWYgKGRtYV9sZW4gPiAoMVUgPDwgZG1hX2xpbWl0KSkKKwkJZG1hX2xlbiA9ICgxVSA8PCBkbWFfbGltaXQpOworCisJLyoKKwkgKiBQcmV2ZW50IGNyb3NzaW5nIGEgMjQtYml0IGFkZHJlc3MgYm91bmRhcnkuCisJICovCisJYmFzZSA9IGRtYV9hZGRyICYgKCgxVSA8PCAyNCkgLSAxVSk7CisJZW5kID0gYmFzZSArIGRtYV9sZW47CisJaWYgKGVuZCA+ICgxVSA8PCAyNCkpCisJCWVuZCA9ICgxVSA8PDI0KTsKKwlkbWFfbGVuID0gZW5kIC0gYmFzZTsKKworCXJldHVybiBkbWFfbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGVzcF9kcml2ZXJfb3BzIHBjaV9lc3Bfb3BzID0geworCS5lc3Bfd3JpdGU4CT0JcGNpX2VzcF93cml0ZTgsCisJLmVzcF9yZWFkOAk9CXBjaV9lc3BfcmVhZDgsCisJLm1hcF9zaW5nbGUJPQlwY2lfZXNwX21hcF9zaW5nbGUsCisJLm1hcF9zZwkJPQlwY2lfZXNwX21hcF9zZywKKwkudW5tYXBfc2luZ2xlCT0JcGNpX2VzcF91bm1hcF9zaW5nbGUsCisJLnVubWFwX3NnCT0JcGNpX2VzcF91bm1hcF9zZywKKwkuaXJxX3BlbmRpbmcJPQlwY2lfZXNwX2lycV9wZW5kaW5nLAorCS5yZXNldF9kbWEJPQlwY2lfZXNwX3Jlc2V0X2RtYSwKKwkuZG1hX2RyYWluCT0JcGNpX2VzcF9kbWFfZHJhaW4sCisJLmRtYV9pbnZhbGlkYXRlCT0JcGNpX2VzcF9kbWFfaW52YWxpZGF0ZSwKKwkuc2VuZF9kbWFfY21kCT0JcGNpX2VzcF9zZW5kX2RtYV9jbWQsCisJLmRtYV9lcnJvcgk9CXBjaV9lc3BfZG1hX2Vycm9yLAorCS5kbWFfbGVuZ3RoX2xpbWl0ID0JcGNpX2VzcF9kbWFfbGVuZ3RoX2xpbWl0LAorfTsKKworLyoKKyAqIFJlYWQgREMtMzkwIGVlcHJvbQorICovCitzdGF0aWMgdm9pZCBkYzM5MF9lZXByb21fcHJlcGFyZV9yZWFkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjbWQpCit7CisJdTggY2FycnlfZmxhZyA9IDEsIGogPSAweDgwLCBidmFsOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQlpZiAoY2FycnlfZmxhZykgeworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDB4NDApOworCQkJYnZhbCA9IDB4YzA7CisJCX0gZWxzZQorCQkJYnZhbCA9IDB4ODA7CisKKwkJdWRlbGF5KDE2MCk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCBidmFsKTsKKwkJdWRlbGF5KDE2MCk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAwKTsKKwkJdWRlbGF5KDE2MCk7CisKKwkJY2FycnlfZmxhZyA9IChjbWQgJiBqKSA/IDEgOiAwOworCQlqID4+PSAxOworCX0KK30KKworc3RhdGljIHUxNiBkYzM5MF9lZXByb21fZ2V0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGk7CisJdTE2IHd2YWwgPSAwOworCXU4IGJ2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQl3dmFsIDw8PSAxOworCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAweDgwKTsKKwkJdWRlbGF5KDE2MCk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAweDQwKTsKKwkJdWRlbGF5KDE2MCk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4MDAsICZidmFsKTsKKworCQlpZiAoYnZhbCA9PSAweDIyKQorCQkJd3ZhbCB8PSAxOworCX0KKworCXJldHVybiB3dmFsOworfQorCitzdGF0aWMgdm9pZCBkYzM5MF9yZWFkX2VlcHJvbShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2ICpwdHIpCit7CisJdTggY21kID0gREMzOTBfRUVQUk9NX1JFQUQsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgREMzOTBfRUVQUk9NX0xFTjsgaSsrKSB7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweGMwLCAwKTsKKwkJdWRlbGF5KDE2MCk7CisKKwkJZGMzOTBfZWVwcm9tX3ByZXBhcmVfcmVhZChwZGV2LCBjbWQrKyk7CisJCSpwdHIrKyA9IGRjMzkwX2VlcHJvbV9nZXRfZGF0YShwZGV2KTsKKworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgMCk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAwKTsKKwkJdWRlbGF5KDE2MCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkYzM5MF9jaGVja19lZXByb20oc3RydWN0IGVzcCAqZXNwKQoreworCXU4IEVFYnVmWzEyOF07CisJdTE2ICpwdHIgPSAodTE2ICopRUVidWYsIHd2YWwgPSAwOworCWludCBpOworCisJZGMzOTBfcmVhZF9lZXByb20oKHN0cnVjdCBwY2lfZGV2ICopZXNwLT5kZXYsIHB0cik7CisKKwlmb3IgKGkgPSAwOyBpIDwgREMzOTBfRUVQUk9NX0xFTjsgaSsrLCBwdHIrKykKKwkJd3ZhbCArPSAqcHRyOworCisJLyogbm8gVGVrcmFtIEVFcHJvbSBmb3VuZCAqLworCWlmICh3dmFsICE9IDB4MTIzNCkgeworCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGVzcC0+ZGV2OworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwKKwkJCSAgICJObyB2YWxpZCBUZWtyYW0gRUVwcm9tIGZvdW5kXG4iKTsKKwkJcmV0dXJuOworCX0KKwllc3AtPnNjc2lfaWQgPSBFRWJ1ZltEQzM5MF9FRV9BREFQVF9TQ1NJX0lEXTsKKwllc3AtPm51bV90YWdzID0gMiA8PCBFRWJ1ZltEQzM5MF9FRV9UQUdfQ01EX05VTV07CisJaWYgKEVFYnVmW0RDMzkwX0VFX01PREUyXSAmIERDMzkwX0VFX01PREUyX0FDVElWRV9ORUdBVElPTikKKwkJZXNwLT5jb25maWc0IHw9IEVTUF9DT05GSUc0X1JBREUgfCBFU1BfQ09ORklHNF9SQUU7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2VzcF9wcm9iZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdHQgPSAmc2NzaV9lc3BfdGVtcGxhdGU7CisJaW50IGVyciA9IC1FTk9ERVY7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IGVzcCAqZXNwOworCXN0cnVjdCBwY2lfZXNwX3ByaXYgKnBlcDsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwgImNhbm5vdCBlbmFibGUgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsCisJCQkgICAiZmFpbGVkIHRvIHNldCAzMmJpdCBETUEgbWFza1xuIik7CisJCWdvdG8gZmFpbF9kaXNhYmxlX2RldmljZTsKKwl9CisKKwlzaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyhob3N0dCwgc2l6ZW9mKHN0cnVjdCBlc3ApKTsKKwlpZiAoIXNob3N0KSB7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LAorCQkJICAgImZhaWxlZCB0byBhbGxvY2F0ZSBzY3NpIGhvc3RcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfZGlzYWJsZV9kZXZpY2U7CisJfQorCisJcGVwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9lc3BfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcGVwKSB7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LAorCQkJICAgImZhaWxlZCB0byBhbGxvY2F0ZSBlc3BfcHJpdlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9ob3N0X2FsbG9jOworCX0KKworCWVzcCA9IHNob3N0X3ByaXYoc2hvc3QpOworCWVzcC0+aG9zdCA9IHNob3N0OworCWVzcC0+ZGV2ID0gcGRldjsKKwllc3AtPm9wcyA9ICZwY2lfZXNwX29wczsKKwkvKgorCSAqIFRoZSBhbTUzYzk3NCBIQkEgaGFzIGEgZGVzaWduIGZsYXcgb2YgZ2VuZXJhdGluZworCSAqIHNwdXJpb3VzIERNQSBjb21wbGV0aW9uIGludGVycnVwdHMgd2hlbiB1c2luZworCSAqIERNQSBmb3IgY29tbWFuZCBzdWJtaXNzaW9uLgorCSAqLworCWVzcC0+ZmxhZ3MgfD0gRVNQX0ZMQUdfVVNFX0ZJRk87CisJLyoKKwkgKiBFbmFibGUgQ09ORklHMl9GRU5BQiB0byBhbGxvdyBmb3IgbGFyZ2UgRE1BIHRyYW5zZmVycworCSAqLworCWlmIChhbTUzYzk3NF9mZW5hYikKKwkJZXNwLT5jb25maWcyIHw9IEVTUF9DT05GSUcyX0ZFTkFCOworCisJcGVwLT5lc3AgPSBlc3A7CisKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkgICAicGNpIG1lbW9yeSBzZWxlY3Rpb24gZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsX3ByaXZfYWxsb2M7CisJfQorCisJZXNwLT5yZWdzID0gcGNpX2lvbWFwKHBkZXYsIDAsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOworCWlmICghZXNwLT5yZWdzKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsICJwY2kgSS9PIG1hcCBmYWlsZWRcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxfcmVsZWFzZV9yZWdpb25zOworCX0KKwllc3AtPmRtYV9yZWdzID0gZXNwLT5yZWdzOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwllc3AtPmNvbW1hbmRfYmxvY2sgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCAxNiwKKwkJCQkJCSAgJmVzcC0+Y29tbWFuZF9ibG9ja19kbWEpOworCWlmICghZXNwLT5jb21tYW5kX2Jsb2NrKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkgICAiZmFpbGVkIHRvIGFsbG9jYXRlIGNvbW1hbmQgYmxvY2tcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfdW5tYXBfcmVnczsKKwl9CisKKwllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNjc2lfZXNwX2ludHIsIElSUUZfU0hBUkVELAorCQkJICBEUlZfTU9EVUxFX05BTUUsIGVzcCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBJUlFcbiIpOworCQlnb3RvIGZhaWxfdW5tYXBfY29tbWFuZF9ibG9jazsKKwl9CisKKwllc3AtPnNjc2lfaWQgPSA3OworCWRjMzkwX2NoZWNrX2VlcHJvbShlc3ApOworCisJc2hvc3QtPnRoaXNfaWQgPSBlc3AtPnNjc2lfaWQ7CisJc2hvc3QtPm1heF9pZCA9IDg7CisJc2hvc3QtPmlycSA9IHBkZXYtPmlycTsKKwlzaG9zdC0+aW9fcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlzaG9zdC0+bl9pb19wb3J0ID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlzaG9zdC0+dW5pcXVlX2lkID0gc2hvc3QtPmlvX3BvcnQ7CisJZXNwLT5zY3NpX2lkX21hc2sgPSAoMSA8PCBlc3AtPnNjc2lfaWQpOworCS8qIEFzc3VtZSA0ME1IeiBjbG9jayAqLworCWVzcC0+Y2ZyZXEgPSA0MDAwMDAwMDsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwZXApOworCisJZXJyID0gc2NzaV9lc3BfcmVnaXN0ZXIoZXNwLCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfZnJlZV9pcnE7CisKKwlyZXR1cm4gMDsKKworZmFpbF9mcmVlX2lycToKKwlmcmVlX2lycShwZGV2LT5pcnEsIGVzcCk7CitmYWlsX3VubWFwX2NvbW1hbmRfYmxvY2s6CisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCAxNiwgZXNwLT5jb21tYW5kX2Jsb2NrLAorCQkJICAgIGVzcC0+Y29tbWFuZF9ibG9ja19kbWEpOworZmFpbF91bm1hcF9yZWdzOgorCXBjaV9pb3VubWFwKHBkZXYsIGVzcC0+cmVncyk7CitmYWlsX3JlbGVhc2VfcmVnaW9uczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZmFpbF9wcml2X2FsbG9jOgorCWtmcmVlKHBlcCk7CitmYWlsX2hvc3RfYWxsb2M6CisJc2NzaV9ob3N0X3B1dChzaG9zdCk7CitmYWlsX2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3BfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcGNpX2VzcF9wcml2ICpwZXAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGVzcCAqZXNwID0gcGVwLT5lc3A7CisKKwlzY3NpX2VzcF91bnJlZ2lzdGVyKGVzcCk7CisJZnJlZV9pcnEocGRldi0+aXJxLCBlc3ApOworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgMTYsIGVzcC0+Y29tbWFuZF9ibG9jaywKKwkJCSAgICBlc3AtPmNvbW1hbmRfYmxvY2tfZG1hKTsKKwlwY2lfaW91bm1hcChwZGV2LCBlc3AtPnJlZ3MpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCWtmcmVlKHBlcCk7CisKKwlzY3NpX2hvc3RfcHV0KGVzcC0+aG9zdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbTUzYzk3NF9wY2lfdGJsW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0NTSSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbTUzYzk3NF9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtNTNjOTc0X2RyaXZlciA9IHsKKwkubmFtZSAgICAgICAgICAgPSBEUlZfTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgICAgID0gYW01M2M5NzRfcGNpX3RibCwKKwkucHJvYmUgICAgICAgICAgPSBwY2lfZXNwX3Byb2JlX29uZSwKKwkucmVtb3ZlICAgICAgICAgPSBwY2lfZXNwX3JlbW92ZV9vbmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbTUzYzk3NF9tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbTUzYzk3NF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYW01M2M5NzRfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFtNTNjOTc0X2RyaXZlcik7Cit9CisKK01PRFVMRV9ERVNDUklQVElPTigiQU01M0M5NzQgU0NTSSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkhhbm5lcyBSZWluZWNrZSA8aGFyZUBzdXNlLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKK01PRFVMRV9BTElBUygidG1zY3NpbSIpOworCittb2R1bGVfcGFyYW0oYW01M2M5NzRfZGVidWcsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhbTUzYzk3NF9kZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmciKTsKKworbW9kdWxlX3BhcmFtKGFtNTNjOTc0X2ZlbmFiLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYW01M2M5NzRfZmVuYWIsICJFbmFibGUgMjQtYml0IERNQSB0cmFuc2ZlciBzaXplcyIpOworCittb2R1bGVfaW5pdChhbTUzYzk3NF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChhbTUzYzk3NF9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCmluZGV4IDBiNDRmYjUuLjkxNGMzOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCkBAIC0xMTQsMTYgKzExNCwxMSBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmFyY21zcl9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgYXJjbXNyX2ludGVycnVwdChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKTsKIHN0YXRpYyB2b2lkIGFyY21zcl9mcmVlX2lycShzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKTsKLXN0YXRpYyBpbnQgYXJjbXNyX2FkanVzdF9kaXNrX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCQkJICBpbnQgcXVldWVfZGVwdGgsIGludCByZWFzb24pCitzdGF0aWMgaW50IGFyY21zcl9hZGp1c3RfZGlza19xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxdWV1ZV9kZXB0aCkKIHsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCWlmIChxdWV1ZV9kZXB0aCA+IEFSQ01TUl9NQVhfQ01EX1BFUkxVTikKIAkJcXVldWVfZGVwdGggPSBBUkNNU1JfTUFYX0NNRF9QRVJMVU47Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBxdWV1ZV9kZXB0aCk7Ci0JcmV0dXJuIHF1ZXVlX2RlcHRoOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxdWV1ZV9kZXB0aCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFyY21zcl9zY3NpX2hvc3RfdGVtcGxhdGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYwppbmRleCBkODliOWI0Li5kZWFhZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKQEAgLTg1MCwxMyArODUwLDEzIEBACiAJCQlicmVhazsKIAogCQkgICAgZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAic2NzaSVkLkg6IGluY29tcGxldGUgZGF0YSB0cmFuc2ZlciBkZXRlY3RlZDogcmVzdWx0PSUwOFggY29tbWFuZD0iLAotCQkJCWhvc3QtPmhvc3QtPmhvc3Rfbm8sIFNDcG50LT5yZXN1bHQpOwotCQkJX19zY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQtPmNtbmQpOworCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIFNDcG50LAorCQkJCSAgICAiaW5jb21wbGV0ZSBkYXRhIHRyYW5zZmVyIGRldGVjdGVkOiAiCisJCQkJICAgICJyZXN1bHQ9JTA4WCIsIFNDcG50LT5yZXN1bHQpOworCQkJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKIAkJCWFjb3Juc2NzaV9kdW1wZG1hKGhvc3QsICJkb25lIik7Ci0JCSAJYWNvcm5zY3NpX2R1bXBsb2coaG9zdCwgU0NwbnQtPmRldmljZS0+aWQpOwotCQkJU0NwbnQtPnJlc3VsdCAmPSAweGZmZmY7Ci0JCQlTQ3BudC0+cmVzdWx0IHw9IERJRF9FUlJPUiA8PCAxNjsKKwkJCWFjb3Juc2NzaV9kdW1wbG9nKGhvc3QsIFNDcG50LT5kZXZpY2UtPmlkKTsKKwkJCXNldF9ob3N0X2J5dGUoU0NwbnQsIERJRF9FUlJPUik7CiAJCSAgICB9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMKaW5kZXggOGVmODEwYS4uZDI4ZDZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzEuYwpAQCAtMTMsMTYgKzEzLDEyIEBACiAjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlICIuLi9zY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgogCi0jZGVmaW5lIEFVVE9TRU5TRQogI2RlZmluZSBQU0VVRE9fRE1BCiAKLSNkZWZpbmUgQ1VNQU5BU0NTSV9QVUJMSUNfUkVMRUFTRSAxCi0KICNkZWZpbmUgcHJpdihob3N0KQkJCSgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikoaG9zdCktPmhvc3RkYXRhKQogI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKQkJc3RydWN0IFNjc2lfSG9zdCAqX2luc3RhbmNlCiAjZGVmaW5lIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpCQlfaW5zdGFuY2UgPSBpbnN0YW5jZQpAQCAtMzAsNiArMjYsNyBAQAogI2RlZmluZSBOQ1I1MzgwX3dyaXRlKHJlZywgdmFsdWUpCWN1bWFuYXNjc2lfd3JpdGUoX2luc3RhbmNlLCByZWcsIHZhbHVlKQogI2RlZmluZSBOQ1I1MzgwX2ludHIJCQljdW1hbmFzY3NpX2ludHIKICNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kCQljdW1hbmFzY3NpX3F1ZXVlX2NvbW1hbmQKKyNkZWZpbmUgTkNSNTM4MF9pbmZvCQkJY3VtYW5hc2NzaV9pbmZvCiAKICNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMJXAogCXVuc2lnbmVkIGN0cmw7CQkJXApAQCAtNDIsMTEgKzM5LDYgQEAKIHsKIH0KIAotY29uc3QgY2hhciAqY3VtYW5hc2NzaV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKnNwbnQpCi17Ci0JcmV0dXJuICIiOwotfQotCiAjZGVmaW5lIENUUkwJMHgxNmZjCiAjZGVmaW5lIFNUQVQJMHgyMDA0CiAjZGVmaW5lIEwodikJKCgodik8PDE2KXwoKHYpICYgMHgwMDAwZmZmZikpCkBAIC0yNjcsMTQgKzI1OSw2IEBACiAJCWdvdG8gb3V0X3VubWFwOwogCX0KIAotCXByaW50aygic2NzaSVkOiBhdCBwb3J0IDB4JTA4bHggaXJxICVkIiwKLQkJaG9zdC0+aG9zdF9ubywgaG9zdC0+aW9fcG9ydCwgaG9zdC0+aXJxKTsKLQlwcmludGsoIiBvcHRpb25zIENBTl9RVUVVRT0lZCBDTURfUEVSX0xVTj0lZCByZWxlYXNlPSVkIiwKLQkJaG9zdC0+Y2FuX3F1ZXVlLCBob3N0LT5jbWRfcGVyX2x1biwgQ1VNQU5BU0NTSV9QVUJMSUNfUkVMRUFTRSk7Ci0JcHJpbnRrKCJcbnNjc2klZDoiLCBob3N0LT5ob3N0X25vKTsKLQlOQ1I1MzgwX3ByaW50X29wdGlvbnMoaG9zdCk7Ci0JcHJpbnRrKCJcbiIpOwotCiAJcmV0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmZWMtPmRldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZV9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jIGIvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYwppbmRleCA3MWNmYjFlLi5lNjRjM2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmMKQEAgLTMwOCw4ICszMDgsNyBAQAogCWZhczIxNl9kb19sb2coaW5mbywgJzAnICsgU0NwbnQtPmRldmljZS0+aWQsIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCi0JcHJpbnRrKCIgQ0RCOiAiKTsKLQlfX3Njc2lfcHJpbnRfY29tbWFuZChTQ3BudC0+Y21uZCk7CisJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIwNzksMTQgKzIwNzgsMTIgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgInNjc2klZC4lYzogaW5jb21wbGV0ZSBkYXRhIHRyYW5zZmVyICIKLQkJCQkiZGV0ZWN0ZWQ6IHJlcz0lMDhYIHB0cj0lcCBsZW49JVggQ0RCOiAiLAotCQkJCWluZm8tPmhvc3QtPmhvc3Rfbm8sICcwJyArIFNDcG50LT5kZXZpY2UtPmlkLAotCQkJCVNDcG50LT5yZXN1bHQsIGluZm8tPnNjc2kuU0NwLnB0ciwKLQkJCQlpbmZvLT5zY3NpLlNDcC50aGlzX3Jlc2lkdWFsKTsKLQkJCV9fc2NzaV9wcmludF9jb21tYW5kKFNDcG50LT5jbW5kKTsKLQkJCVNDcG50LT5yZXN1bHQgJj0gfigyNTUgPDwgMTYpOwotCQkJU0NwbnQtPnJlc3VsdCB8PSBESURfQkFEX1RBUkdFVCA8PCAxNjsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBTQ3BudCwKKwkJCQkgICAgImluY29tcGxldGUgZGF0YSB0cmFuc2ZlciBkZXRlY3RlZDogcmVzPSUwOFggcHRyPSVwIGxlbj0lWFxuIiwKKwkJCQkgICAgU0NwbnQtPnJlc3VsdCwgaW5mby0+c2NzaS5TQ3AucHRyLAorCQkJCSAgICBpbmZvLT5zY3NpLlNDcC50aGlzX3Jlc2lkdWFsKTsKKwkJCXNjc2lfcHJpbnRfY29tbWFuZChTQ3BudCk7CisJCQlzZXRfaG9zdF9ieXRlKFNDcG50LCBESURfRVJST1IpOwogCQkJZ290byByZXF1ZXN0X3NlbnNlOwogCQl9CiAJfQpAQCAtMjE1OCwxMiArMjE1NSwxMSBAQAogCSAqIHRvIHRyYW5zZmVyLCB3ZSBzaG91bGQgbm90IGhhdmUgYSB2YWxpZCBwb2ludGVyLgogCSAqLwogCWlmIChpbmZvLT5zY3NpLlNDcC5wdHIgJiYgaW5mby0+c2NzaS5TQ3AudGhpc19yZXNpZHVhbCA9PSAwKSB7Ci0JCXByaW50aygic2NzaSVkLiVjOiB6ZXJvIGJ5dGVzIGxlZnQgdG8gdHJhbnNmZXIsIGJ1dCAiCi0JCSAgICAgICAiYnVmZmVyIHBvaW50ZXIgc3RpbGwgdmFsaWQ6IHB0cj0lcCBsZW49JTA4eCBDREI6ICIsCi0JCSAgICAgICBpbmZvLT5ob3N0LT5ob3N0X25vLCAnMCcgKyBTQ3BudC0+ZGV2aWNlLT5pZCwKLQkJICAgICAgIGluZm8tPnNjc2kuU0NwLnB0ciwgaW5mby0+c2NzaS5TQ3AudGhpc19yZXNpZHVhbCk7CisJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsCisJCQkgICAgInplcm8gYnl0ZXMgbGVmdCB0byB0cmFuc2ZlciwgYnV0IGJ1ZmZlciBwb2ludGVyIHN0aWxsIHZhbGlkOiBwdHI9JXAgbGVuPSUwOHhcbiIsCisJCQkgICAgaW5mby0+c2NzaS5TQ3AucHRyLCBpbmZvLT5zY3NpLlNDcC50aGlzX3Jlc2lkdWFsKTsKIAkJaW5mby0+c2NzaS5TQ3AucHRyID0gTlVMTDsKLQkJX19zY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQtPmNtbmQpOworCQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOwogCX0KIAogCS8qCkBAIC0yNDI3LDE0ICsyNDIzLDExIEBACiAKIAlpbmZvLT5zdGF0cy5hYm9ydHMgKz0gMTsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZDogYWJvcnQgY29tbWFuZCAiLCBpbmZvLT5ob3N0LT5ob3N0X25vKTsKLQlfX3Njc2lfcHJpbnRfY29tbWFuZChTQ3BudC0+Y21uZCk7CisJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBTQ3BudCwgImFib3J0IGNvbW1hbmRcbiIpOwogCiAJcHJpbnRfZGVidWdfbGlzdCgpOwogCWZhczIxNl9kdW1wc3RhdGUoaW5mbyk7CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IGFib3J0ICVwICIsIGluZm8tPmhvc3QtPmhvc3Rfbm8sIFNDcG50KTsKLQogCXN3aXRjaCAoZmFzMjE2X2ZpbmRfY29tbWFuZChpbmZvLCBTQ3BudCkpIHsKIAkvKgogCSAqIFdlIGZvdW5kIHRoZSBjb21tYW5kLCBhbmQgY2xlYXJlZCBpdCBvdXQuICBFaXRoZXIKQEAgLTI0NDIsNyArMjQzNSw3IEBACiAJICogdGFyZ2V0LCBvciB0aGUgYnVzeWx1biBiaXQgaXMgbm90IHNldC4KIAkgKi8KIAljYXNlIHJlc19zdWNjZXNzOgotCQlwcmludGsoInN1Y2Nlc3NcbiIpOworCQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIFNDcG50LCAiYWJvcnQgJXAgc3VjY2Vzc1xuIiwgU0NwbnQpOwogCQlyZXN1bHQgPSBTVUNDRVNTOwogCQlicmVhazsKIApAQCAtMjQ1MiwxNCArMjQ0NSwxMyBAQAogCSAqIGlmIHRoZSBidXMgaXMgZnJlZS4KIAkgKi8KIAljYXNlIHJlc19od19hYm9ydDoKLQkJCiAKIAkvKgogCSAqIFdlIGFyZSB1bmFibGUgdG8gYWJvcnQgdGhlIGNvbW1hbmQgZm9yIHNvbWUgcmVhc29uLgogCSAqLwogCWRlZmF1bHQ6CiAJY2FzZSByZXNfZmFpbGVkOgotCQlwcmludGsoImZhaWxlZFxuIik7CisJCXNjbWRfcHJpbnRrKEtFUk5fV0FSTklORywgU0NwbnQsICJhYm9ydCAlcCBmYWlsZWRcbiIsIFNDcG50KTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNjY0LDggKzI2NTYsNyBAQAogCiAJZmFzMjE2X2NoZWNrbWFnaWMoaW5mbyk7CiAKLQlwcmludGsoInNjc2klZC4lYzogJXM6IHJlc2V0dGluZyBob3N0XG4iLAotCQlpbmZvLT5ob3N0LT5ob3N0X25vLCAnMCcgKyBTQ3BudC0+ZGV2aWNlLT5pZCwgX19mdW5jX18pOworCWZhczIxNl9sb2coaW5mbywgTE9HX0VSUk9SLCAicmVzZXR0aW5nIGhvc3QiKTsKIAogCS8qCiAJICogUmVzZXQgdGhlIFNDU0kgY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vb2FrLmMgYi9kcml2ZXJzL3Njc2kvYXJtL29hay5jCmluZGV4IDE4OGU3MzQuLjdjNmZhMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vb2FrLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9vYWsuYwpAQCAtMTQsMTMgKzE0LDkgQEAKICNpbmNsdWRlIDxhc20vZWNhcmQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgIi4uL3Njc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogCi0jZGVmaW5lIEFVVE9TRU5TRQogLyojZGVmaW5lIFBTRVVET19ETUEqLwotCi0jZGVmaW5lIE9BS1NDU0lfUFVCTElDX1JFTEVBU0UgMQogI2RlZmluZSBET05UX1VTRV9JTlRSCiAKICNkZWZpbmUgcHJpdihob3N0KQkJCSgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikoaG9zdCktPmhvc3RkYXRhKQpAQCAtMjksMTAgKzI1LDkgQEAKIAogI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKQkJcmVhZGIoX2Jhc2UgKyAoKHJlZykgPDwgMikpCiAjZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkJd3JpdGViKHZhbHVlLCBfYmFzZSArICgocmVnKSA8PCAyKSkKLSNkZWZpbmUgTkNSNTM4MF9pbnRyCQkJb2Frc2NzaV9pbnRyCiAjZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZAkJb2Frc2NzaV9xdWV1ZV9jb21tYW5kCisjZGVmaW5lIE5DUjUzODBfaW5mbwkJCW9ha3Njc2lfaW5mbwogI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbwkJb2Frc2NzaV9zaG93X2luZm8KLSNkZWZpbmUgTkNSNTM4MF93cml0ZV9pbmZvCQlvYWtzY3NpX3dyaXRlX2luZm8KIAogI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcwlcCiAJdm9pZCBfX2lvbWVtICpiYXNlCkBAIC00MiwxMSArMzcsNiBAQAogI3VuZGVmIFNUQVJUX0RNQV9JTklUSUFUT1JfUkVDRUlWRV9SRUcKICNkZWZpbmUgU1RBUlRfRE1BX0lOSVRJQVRPUl9SRUNFSVZFX1JFRwkoMTI4ICsgNykKIAotY29uc3QgY2hhciAqIG9ha3Njc2lfaW5mbyAoc3RydWN0IFNjc2lfSG9zdCAqc3BudCkKLXsKLQlyZXR1cm4gIiI7Ci19Ci0KICNkZWZpbmUgU1RBVAkoKDEyOCArIDE2KSA8PCAyKQogI2RlZmluZSBEQVRBCSgoMTI4ICsgOCkgPDwgMikKIApAQCAtMTE0LDcgKzEwNCw2IEBACiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBvYWtzY3NpX3RlbXBsYXRlID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5zaG93X2luZm8JCT0gb2Frc2NzaV9zaG93X2luZm8sCi0JLndyaXRlX2luZm8JCT0gb2Frc2NzaV93cml0ZV9pbmZvLAogCS5uYW1lCQkJPSAiT2FrIDE2LWJpdCBTQ1NJIiwKIAkuaW5mbwkJCT0gb2Frc2NzaV9pbmZvLAogCS5xdWV1ZWNvbW1hbmQJCT0gb2Frc2NzaV9xdWV1ZV9jb21tYW5kLApAQCAtMTUwLDE5ICsxMzksMTEgQEAKIAkJZ290byB1bnJlZzsKIAl9CiAKLQlob3N0LT5pcnEgPSBJUlFfTk9ORTsKKwlob3N0LT5pcnEgPSBOT19JUlE7CiAJaG9zdC0+bl9pb19wb3J0ID0gMjU1OwogCiAJTkNSNTM4MF9pbml0KGhvc3QsIDApOwogCi0JcHJpbnRrKCJzY3NpJWQ6IGF0IHBvcnQgMHglMDhseCBpcnFzIGRpc2FibGVkIiwKLQkJaG9zdC0+aG9zdF9ubywgaG9zdC0+aW9fcG9ydCk7Ci0JcHJpbnRrKCIgb3B0aW9ucyBDQU5fUVVFVUU9JWQgIENNRF9QRVJfTFVOPSVkIHJlbGVhc2U9JWQiLAotCQlob3N0LT5jYW5fcXVldWUsIGhvc3QtPmNtZF9wZXJfbHVuLCBPQUtTQ1NJX1BVQkxJQ19SRUxFQVNFKTsKLQlwcmludGsoIlxuc2NzaSVkOiIsIGhvc3QtPmhvc3Rfbm8pOwotCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhob3N0KTsKLQlwcmludGsoIlxuIik7Ci0KIAlyZXQgPSBzY3NpX2FkZF9ob3N0KGhvc3QsICZlYy0+ZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bm1hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCmluZGV4IDc5ZTZmMDQuLjZkYWVkNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwpAQCAtMTEsOCArMTEsNiBAQAogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqCSsxICgzMDMpIDY2Ni01ODM2CiAgKgotICogRElTVFJJQlVUSU9OIFJFTEVBU0UgNi4KLSAqCiAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQKICAqCiAgKiBOQ1IgNTM4MCBGYW1pbHkKQEAgLTczLDYgKzcxLDkgQEAKICAqIDEuICBUZXN0IGxpbmtlZCBjb21tYW5kIGhhbmRsaW5nIGNvZGUgYWZ0ZXIgRXJpYyBpcyByZWFkeSB3aXRoCiAgKiAgICAgdGhlIGhpZ2ggbGV2ZWwgY29kZS4KICAqLworCisvKiBBZGFwdGVkIGZvciB0aGUgc3VuMyBieSBTYW0gQ3JlYXNleS4gKi8KKwogI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oPgogCkBAIC0xMDMsMjcgKzEwNCw3IEBACiAKIC8qCiAgKiBEZXNpZ24KLSAqIElzc3VlcyA6CiAgKgotICogVGhlIG90aGVyIExpbnV4IFNDU0kgZHJpdmVycyB3ZXJlIHdyaXR0ZW4gd2hlbiBMaW51eCB3YXMgSW50ZWwgUEMtb25seSwKLSAqIGFuZCBzcGVjaWZpY2FsbHkgZm9yIGVhY2ggYm9hcmQgcmF0aGVyIHRoYW4gZWFjaCBjaGlwLiAgVGhpcyBtYWtlcyB0aGVpcgotICogYWRhcHRhdGlvbiB0byBwbGF0Zm9ybXMgbGlrZSB0aGUgTWFjIChTb21lIG9mIHdoaWNoIHVzZSBOQ1I1MzgwJ3MpCi0gKiBtb3JlIGRpZmZpY3VsdCB0aGFuIGl0IGhhcyB0byBiZS4KLSAqCi0gKiBBbHNvLCBtYW55IG9mIHRoZSBTQ1NJIGRyaXZlcnMgd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY29tbWFuZCBxdWV1aW5nCi0gKiByb3V0aW5lcyB3ZXJlIGltcGxlbWVudGVkLCBtZWFuaW5nIHRoZWlyIGltcGxlbWVudGF0aW9ucyBvZiBxdWV1ZWQKLSAqIGNvbW1hbmRzIHdlcmUgaGFja2VkIG9uIHJhdGhlciB0aGFuIGRlc2lnbmVkIGluIGZyb20gdGhlIHN0YXJ0LgotICoKLSAqIFdoZW4gSSBkZXNpZ25lZCB0aGUgTGludXggU0NTSSBkcml2ZXJzIEkgZmlndXJlZCB0aGF0Ci0gKiB3aGlsZSBoYXZpbmcgdHdvIGRpZmZlcmVudCBTQ1NJIGJvYXJkcyBpbiBhIHN5c3RlbSBtaWdodCBiZSB1c2VmdWwKLSAqIGZvciBkZWJ1Z2dpbmcgdGhpbmdzLCB0d28gb2YgdGhlIHNhbWUgdHlwZSB3b3VsZG4ndCBiZSB1c2VkLgotICogV2VsbCwgSSB3YXMgd3JvbmcgYW5kIGEgbnVtYmVyIG9mIHVzZXJzIGhhdmUgbWFpbGVkIG1lIGFib3V0IHJ1bm5pbmcKLSAqIG11bHRpcGxlIGhpZ2gtcGVyZm9ybWFuY2UgU0NTSSBib2FyZHMgaW4gYSBzZXJ2ZXIuCi0gKgotICogRmluYWxseSwgd2hlbiBJIGdldCBxdWVzdGlvbnMgZnJvbSB1c2VycywgSSBoYXZlIG5vIGlkZWEgd2hhdAotICogcmV2aXNpb24gb2YgbXkgZHJpdmVyIHRoZXkgYXJlIHJ1bm5pbmcuCi0gKgotICogVGhpcyBkcml2ZXIgYXR0ZW1wdHMgdG8gYWRkcmVzcyB0aGVzZSBwcm9ibGVtcyA6CiAgKiBUaGlzIGlzIGEgZ2VuZXJpYyA1MzgwIGRyaXZlci4gIFRvIHVzZSBpdCBvbiBhIGRpZmZlcmVudCBwbGF0Zm9ybSwKICAqIG9uZSBzaW1wbHkgd3JpdGVzIGFwcHJvcHJpYXRlIHN5c3RlbSBzcGVjaWZpYyBtYWNyb3MgKGllLCBkYXRhCiAgKiB0cmFuc2ZlciAtIHNvbWUgUEMncyB3aWxsIHVzZSB0aGUgSS9PIGJ1cywgNjhLJ3MgbXVzdCB1c2UKQEAgLTEzOCwxNyArMTE5LDYgQEAKICAqIGFsbG93aW5nIG11bHRpcGxlIGNvbW1hbmRzIHRvIHByb3BhZ2F0ZSBhbGwgdGhlIHdheSB0byBhIFNDU0ktSUkgZGV2aWNlCiAgKiB3aGlsZSBhIGNvbW1hbmQgaXMgYWxyZWFkeSBleGVjdXRpbmcuCiAgKgotICogVG8gc29sdmUgdGhlIG11bHRpcGxlLWJvYXJkcy1pbi10aGUtc2FtZS1zeXN0ZW0gcHJvYmxlbSwKLSAqIHRoZXJlIGlzIGEgc2VwYXJhdGUgaW5zdGFuY2Ugc3RydWN0dXJlIGZvciBlYWNoIGluc3RhbmNlCi0gKiBvZiBhIDUzODAgaW4gdGhlIHN5c3RlbS4gIFNvLCBtdWx0aXBsZSBOQ1I1MzgwIGRyaXZlcnMgd2lsbAotICogYmUgYWJsZSB0byBjb2V4aXN0IHdpdGggYXBwcm9wcmlhdGUgY2hhbmdlcyB0byB0aGUgaGlnaCBsZXZlbAotICogU0NTSSBjb2RlLgotICoKLSAqIEEgTkNSNTM4MF9QVUJMSUNfUkVWSVNJT04gbWFjcm8gaXMgcHJvdmlkZWQsIHdpdGggdGhlIHJlbGVhc2UKLSAqIG51bWJlciAodXBkYXRlZCBmb3IgZWFjaCBwdWJsaWMgcmVsZWFzZSkgcHJpbnRlZCBieSB0aGUKLSAqIE5DUjUzODBfcHJpbnRfb3B0aW9ucyBjb21tYW5kLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlCi0gKiB3cmFwcGVyIGRldGVjdCBmdW5jdGlvbiwgc28gdGhhdCBJIGtub3cgd2hhdCByZWxlYXNlIG9mIHRoZSBkcml2ZXIKLSAqIHVzZXJzIGFyZSB1c2luZy4KICAqCiAgKiBJc3N1ZXMgc3BlY2lmaWMgdG8gdGhlIE5DUjUzODAgOgogICoKQEAgLTE3MywxOSArMTQzLDE3IEBACiAgKiBBcmNoaXRlY3R1cmUgOgogICoKICAqIEF0IHRoZSBoZWFydCBvZiB0aGUgZGVzaWduIGlzIGEgY29yb3V0aW5lLCBOQ1I1MzgwX21haW4sCi0gKiB3aGljaCBpcyBzdGFydGVkIHdoZW4gbm90IHJ1bm5pbmcgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyLAotICogdGltZXIsIGFuZCBxdWV1ZSBjb21tYW5kIGZ1bmN0aW9uLiAgSXQgYXR0ZW1wdHMgdG8gZXN0YWJsaXNoCi0gKiBJX1RfTCBvciBJX1RfTF9RIG5leHVzZXMgYnkgcmVtb3ZpbmcgdGhlIGNvbW1hbmRzIGZyb20gdGhlCi0gKiBpc3N1ZSBxdWV1ZSBhbmQgY2FsbGluZyBOQ1I1MzgwX3NlbGVjdCgpIGlmIGEgbmV4dXMKLSAqIGlzIG5vdCBlc3RhYmxpc2hlZC4KKyAqIHdoaWNoIGlzIHN0YXJ0ZWQgZnJvbSBhIHdvcmtxdWV1ZSBmb3IgZWFjaCBOQ1I1MzgwIGhvc3QgaW4gdGhlCisgKiBzeXN0ZW0uICBJdCBhdHRlbXB0cyB0byBlc3RhYmxpc2ggSV9UX0wgb3IgSV9UX0xfUSBuZXh1c2VzIGJ5CisgKiByZW1vdmluZyB0aGUgY29tbWFuZHMgZnJvbSB0aGUgaXNzdWUgcXVldWUgYW5kIGNhbGxpbmcKKyAqIE5DUjUzODBfc2VsZWN0KCkgaWYgYSBuZXh1cyBpcyBub3QgZXN0YWJsaXNoZWQuCiAgKgogICogT25jZSBhIG5leHVzIGlzIGVzdGFibGlzaGVkLCB0aGUgTkNSNTM4MF9pbmZvcm1hdGlvbl90cmFuc2ZlcigpCiAgKiBwaGFzZSBnb2VzIHRocm91Z2ggdGhlIHZhcmlvdXMgcGhhc2VzIGFzIGluc3RydWN0ZWQgYnkgdGhlIHRhcmdldC4KICAqIGlmIHRoZSB0YXJnZXQgZ29lcyBpbnRvIE1TRyBJTiBhbmQgc2VuZHMgYSBESVNDT05ORUNUIG1lc3NhZ2UsCiAgKiB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGludG8gdGhlIHBlciBpbnN0YW5jZSBkaXNjb25uZWN0ZWQKLSAqIHF1ZXVlLCBhbmQgTkNSNTM4MF9tYWluIHRyaWVzIHRvIGZpbmQgbW9yZSB3b3JrLiAgSWYgVVNMRUVQCi0gKiB3YXMgZGVmaW5lZCwgYW5kIHRoZSB0YXJnZXQgaXMgaWRsZSBmb3IgdG9vIGxvbmcsIHRoZSBzeXN0ZW0KLSAqIHdpbGwgdHJ5IHRvIHNsZWVwLgorICogcXVldWUsIGFuZCBOQ1I1MzgwX21haW4gdHJpZXMgdG8gZmluZCBtb3JlIHdvcmsuICBJZiB0aGUgdGFyZ2V0IGlzCisgKiBpZGxlIGZvciB0b28gbG9uZywgdGhlIHN5c3RlbSB3aWxsIHRyeSB0byBzbGVlcC4KICAqCiAgKiBJZiBhIGNvbW1hbmQgaGFzIGRpc2Nvbm5lY3RlZCwgZXZlbnR1YWxseSBhbiBpbnRlcnJ1cHQgd2lsbCB0cmlnZ2VyLAogICogY2FsbGluZyBOQ1I1MzgwX2ludHIoKSAgd2hpY2ggd2lsbCBpbiB0dXJuIGNhbGwgTkNSNTM4MF9yZXNlbGVjdApAQCAtMjExLDYgKzE3OSw5IEBACiAgKiBBVVRPU0VOU0UgLSBpZiBkZWZpbmVkLCBSRVFVRVNUIFNFTlNFIHdpbGwgYmUgcGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkKICAqCWZvciBjb21tYW5kcyB0aGF0IHJldHVybiB3aXRoIGEgQ0hFQ0sgQ09ORElUSU9OIHN0YXR1cy4KICAqCisgKiBESUZGRVJFTlRJQUwgLSBpZiBkZWZpbmVkLCBOQ1I1M2M4MSBjaGlwcyB3aWxsIHVzZSBleHRlcm5hbCBkaWZmZXJlbnRpYWwKKyAqCXRyYW5zY2VpdmVycy4KKyAqCiAgKiBMSU5LRUQgLSBpZiBkZWZpbmVkLCBsaW5rZWQgY29tbWFuZHMgYXJlIHN1cHBvcnRlZC4KICAqCiAgKiBSRUFMX0RNQSAtIGlmIGRlZmluZWQsIFJFQUwgRE1BIGlzIHVzZWQgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyIHBoYXNlcy4KQEAgLTIyMyw2ICsxOTQsOSBAQAogICoKICAqIE5DUjUzODBfd3JpdGUocmVnaXN0ZXIsIHZhbHVlKSAtIHdyaXRlIHRvIHRoZSBzcGVjaWZpYyByZWdpc3RlcgogICoKKyAqIE5DUjUzODBfaW1wbGVtZW50YXRpb25fZmllbGRzICAtIGFkZGl0aW9uYWwgZmllbGRzIG5lZWRlZCBmb3IgdGhpcworICogICAgICBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTkNSNTM4MAorICoKICAqIEVpdGhlciByZWFsIERNQSAqb3IqIHBzZXVkbyBETUEgbWF5IGJlIGltcGxlbWVudGVkCiAgKiBSRUFMIGZ1bmN0aW9ucyA6CiAgKiBOQ1I1MzgwX1JFQUxfRE1BIHNob3VsZCBiZSBkZWZpbmVkIGlmIHJlYWwgRE1BIGlzIHRvIGJlIHVzZWQuCkBAIC0yNDEsNDAgKzIxNSwyMSBAQAogICogTkNSNTM4MF9wd3JpdGUoaW5zdGFuY2UsIHNyYywgY291bnQpCiAgKiBOQ1I1MzgwX3ByZWFkKGluc3RhbmNlLCBkc3QsIGNvdW50KTsKICAqCi0gKiBJZiBub3RoaW5nIHNwZWNpZmljIHRvIHRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgZG9pbmcgKGllLCB3aXRoIGV4dGVybmFsCi0gKiBoYXJkd2FyZSksIHlvdSBtdXN0IGFsc28gZGVmaW5lCi0gKgotICogTkNSNTM4MF9xdWV1ZV9jb21tYW5kCi0gKiBOQ1I1MzgwX3Jlc2V0Ci0gKiBOQ1I1MzgwX2Fib3J0Ci0gKiBOQ1I1MzgwX3Byb2NfaW5mbwotICoKLSAqIHRvIGJlIHRoZSBnbG9iYWwgZW50cnkgcG9pbnRzIGludG8gdGhlIHNwZWNpZmljIGRyaXZlciwgaWUKLSAqICNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kIHQxMjhfcXVldWVfY29tbWFuZC4KLSAqCi0gKiBJZiB0aGlzIGlzIG5vdCBkb25lLCB0aGUgcm91dGluZXMgd2lsbCBiZSBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMKLSAqIHdpdGggdGhlIE5DUjUzODAqIG5hbWVzIGFuZCB0aGUgdXNlciBtdXN0IHByb3ZpZGUgYSBnbG9iYWxseQotICogYWNjZXNzaWJsZSB3cmFwcGVyIGZ1bmN0aW9uLgotICoKICAqIFRoZSBnZW5lcmljIGRyaXZlciBpcyBpbml0aWFsaXplZCBieSBjYWxsaW5nIE5DUjUzODBfaW5pdChpbnN0YW5jZSksCiAgKiBhZnRlciBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBob3N0IHNwZWNpZmljIGZpZWxkcyBhbmQgSUQuICBJZiB0aGUKICAqIGRyaXZlciB3aXNoZXMgdG8gYXV0b3Byb2JlIGZvciBhbiBJUlEgbGluZSwgdGhlIE5DUjUzODBfcHJvYmVfaXJxKGluc3RhbmNlLAotICogcG9zc2libGUpIGZ1bmN0aW9uIG1heSBiZSB1c2VkLiAgQmVmb3JlIHRoZSBzcGVjaWZpYyBkcml2ZXIgaW5pdGlhbGl6YXRpb24KLSAqIGNvZGUgZmluaXNoZXMsIE5DUjUzODBfcHJpbnRfb3B0aW9ucyBzaG91bGQgYmUgY2FsbGVkLgorICogcG9zc2libGUpIGZ1bmN0aW9uIG1heSBiZSB1c2VkLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpmaXJzdF9pbnN0YW5jZSA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdGhlX3RlbXBsYXRlID0gTlVMTDsKLQogLyogTWFjcm9zIGVhc2UgbGlmZS4uLiA6LSkgKi8KICNkZWZpbmUJU0VUVVBfSE9TVERBVEEoaW4pCQkJCVwKICAgICBzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQkJCVwKIAkoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikoaW4pLT5ob3N0ZGF0YQogI2RlZmluZQlIT1NUREFUQShpbikgKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKShpbiktPmhvc3RkYXRhKQogCi0jZGVmaW5lCU5FWFQoY21kKQkJKChTY3NpX0NtbmQgKikoY21kKS0+aG9zdF9zY3JpYmJsZSkKKyNkZWZpbmUJTkVYVChjbWQpCQkoKHN0cnVjdCBzY3NpX2NtbmQgKikoY21kKS0+aG9zdF9zY3JpYmJsZSkKICNkZWZpbmUJU0VUX05FWFQoY21kLG5leHQpCSgoY21kKS0+aG9zdF9zY3JpYmJsZSA9ICh2b2lkICopKG5leHQpKQotI2RlZmluZQlORVhUQUREUihjbWQpCQkoKFNjc2lfQ21uZCAqKikmKGNtZCktPmhvc3Rfc2NyaWJibGUpCisjZGVmaW5lCU5FWFRBRERSKGNtZCkJCSgoc3RydWN0IHNjc2lfY21uZCAqKikmKGNtZCktPmhvc3Rfc2NyaWJibGUpCiAKICNkZWZpbmUJSE9TVE5PCQlpbnN0YW5jZS0+aG9zdF9ubwogI2RlZmluZQlIX05PKGNtZCkJKGNtZCktPmRldmljZS0+aG9zdC0+aG9zdF9ubwpAQCAtMzE2LDMwICsyNzEsMTcgQEAKICAqIGltcG9ydGFudDogdGhlIHRhZyBiaXQgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSAnbnJfYWxsb2NhdGVkJyBpcyBkZWNyZWFzZWQuCiAgKi8KIAotLyogLTEgZm9yIFRBR19OT05FIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHVuc2lnbmVkIGNoYXIgY21kLT50YWcgKi8KLSN1bmRlZiBUQUdfTk9ORQotI2RlZmluZSBUQUdfTk9ORSAweGZmCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlERUNMQVJFX0JJVE1BUChhbGxvY2F0ZWQsIE1BWF9UQUdTKTsKLQlpbnQgbnJfYWxsb2NhdGVkOwotCWludCBxdWV1ZV9zaXplOwotfSBUQUdfQUxMT0M7Ci0KLXN0YXRpYyBUQUdfQUxMT0MgVGFnQWxsb2NbOF1bOF07CS8qIDggdGFyZ2V0cyBhbmQgOCBMVU5zICovCi0KLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGFncyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGFncyhzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEpCiB7CiAJaW50IHRhcmdldCwgbHVuOwotCVRBR19BTExPQyAqdGE7CisJc3RydWN0IHRhZ19hbGxvYyAqdGE7CiAKLQlpZiAoIXNldHVwX3VzZV90YWdnZWRfcXVldWluZykKKwlpZiAoIShob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX1RBR0dFRF9RVUVVSU5HKSkKIAkJcmV0dXJuOwogCiAJZm9yICh0YXJnZXQgPSAwOyB0YXJnZXQgPCA4OyArK3RhcmdldCkgewogCQlmb3IgKGx1biA9IDA7IGx1biA8IDg7ICsrbHVuKSB7Ci0JCQl0YSA9ICZUYWdBbGxvY1t0YXJnZXRdW2x1bl07CisJCQl0YSA9ICZob3N0ZGF0YS0+VGFnQWxsb2NbdGFyZ2V0XVtsdW5dOwogCQkJYml0bWFwX3plcm8odGEtPmFsbG9jYXRlZCwgTUFYX1RBR1MpOwogCQkJdGEtPm5yX2FsbG9jYXRlZCA9IDA7CiAJCQkvKiBBdCB0aGUgYmVnaW5uaW5nLCBhc3N1bWUgdGhlIG1heGltdW0gcXVldWUgc2l6ZSB3ZSBjb3VsZApAQCAtMzU5LDcgKzMwMSw3IEBACiAgKiBjb25kaXRpb25zLgogICovCiAKLXN0YXRpYyBpbnQgaXNfbHVuX2J1c3koU2NzaV9DbW5kICpjbWQsIGludCBzaG91bGRfYmVfdGFnZ2VkKQorc3RhdGljIGludCBpc19sdW5fYnVzeShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCBzaG91bGRfYmVfdGFnZ2VkKQogewogCXU4IGx1biA9IGNtZC0+ZGV2aWNlLT5sdW47CiAJU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwpAQCAtMzY3LDEwICszMDksMTEgQEAKIAlpZiAoaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmICgxIDw8IGx1bikpCiAJCXJldHVybiAxOwogCWlmICghc2hvdWxkX2JlX3RhZ2dlZCB8fAotCSAgICAhc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nIHx8ICFjbWQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkKKwkgICAgIShob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX1RBR0dFRF9RVUVVSU5HKSB8fAorCSAgICAhY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpCiAJCXJldHVybiAwOwotCWlmIChUYWdBbGxvY1tjbWQtPmRldmljZS0+aWRdW2x1bl0ubnJfYWxsb2NhdGVkID49Ci0JICAgIFRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXS5xdWV1ZV9zaXplKSB7CisJaWYgKGhvc3RkYXRhLT5UYWdBbGxvY1tzY21kX2lkKGNtZCldW2x1bl0ubnJfYWxsb2NhdGVkID49CisJICAgIGhvc3RkYXRhLT5UYWdBbGxvY1tzY21kX2lkKGNtZCldW2x1bl0ucXVldWVfc2l6ZSkgewogCQlkcHJpbnRrKE5ERUJVR19UQUdTLCAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVkOiBubyBmcmVlIHRhZ3NcbiIsCiAJCQkgICBIX05PKGNtZCksIGNtZC0+ZGV2aWNlLT5pZCwgbHVuKTsKIAkJcmV0dXJuIDE7CkBAIC0zODQsNyArMzI3LDcgQEAKICAqIHVudGFnZ2VkLgogICovCiAKLXN0YXRpYyB2b2lkIGNtZF9nZXRfdGFnKFNjc2lfQ21uZCAqY21kLCBpbnQgc2hvdWxkX2JlX3RhZ2dlZCkKK3N0YXRpYyB2b2lkIGNtZF9nZXRfdGFnKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50IHNob3VsZF9iZV90YWdnZWQpCiB7CiAJdTggbHVuID0gY21kLT5kZXZpY2UtPmx1bjsKIAlTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7CkBAIC0zOTMsMTMgKzMzNiwxNCBAQAogCSAqIGFuIHVudGFnZ2VkIGNvbW1hbmQuCiAJICovCiAJaWYgKCFzaG91bGRfYmVfdGFnZ2VkIHx8Ci0JICAgICFzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgfHwgIWNtZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7CisJICAgICEoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19UQUdHRURfUVVFVUlORykgfHwKKwkgICAgIWNtZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7CiAJCWNtZC0+dGFnID0gVEFHX05PTkU7CiAJCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gfD0gKDEgPDwgbHVuKTsKIAkJZHByaW50ayhOREVCVUdfVEFHUywgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlZCBub3cgYWxsb2NhdGVkIGJ5IHVudGFnZ2VkICIKIAkJCSAgICJjb21tYW5kXG4iLCBIX05PKGNtZCksIGNtZC0+ZGV2aWNlLT5pZCwgbHVuKTsKIAl9IGVsc2UgewotCQlUQUdfQUxMT0MgKnRhID0gJlRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXTsKKwkJc3RydWN0IHRhZ19hbGxvYyAqdGEgPSAmaG9zdGRhdGEtPlRhZ0FsbG9jW3NjbWRfaWQoY21kKV1bbHVuXTsKIAogCQljbWQtPnRhZyA9IGZpbmRfZmlyc3RfemVyb19iaXQodGEtPmFsbG9jYXRlZCwgTUFYX1RBR1MpOwogCQlzZXRfYml0KGNtZC0+dGFnLCB0YS0+YWxsb2NhdGVkKTsKQEAgLTQxNiw3ICszNjAsNyBAQAogICogdW5sb2NrIHRoZSBMVU4uCiAgKi8KIAotc3RhdGljIHZvaWQgY21kX2ZyZWVfdGFnKFNjc2lfQ21uZCAqY21kKQorc3RhdGljIHZvaWQgY21kX2ZyZWVfdGFnKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAl1OCBsdW4gPSBjbWQtPmRldmljZS0+bHVuOwogCVNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKQEAgLTQyOSw3ICszNzMsNyBAQAogCQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogdHJ5aW5nIHRvIGZyZWUgYmFkIHRhZyAlZCFcbiIsCiAJCSAgICAgICBIX05PKGNtZCksIGNtZC0+dGFnKTsKIAl9IGVsc2UgewotCQlUQUdfQUxMT0MgKnRhID0gJlRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXTsKKwkJc3RydWN0IHRhZ19hbGxvYyAqdGEgPSAmaG9zdGRhdGEtPlRhZ0FsbG9jW3NjbWRfaWQoY21kKV1bbHVuXTsKIAkJY2xlYXJfYml0KGNtZC0+dGFnLCB0YS0+YWxsb2NhdGVkKTsKIAkJdGEtPm5yX2FsbG9jYXRlZC0tOwogCQlkcHJpbnRrKE5ERUJVR19UQUdTLCAic2NzaSVkOiBmcmVlZCB0YWcgJWQgZm9yIHRhcmdldCAlZCBsdW4gJWRcbiIsCkBAIC00MzgsMTcgKzM4MiwxNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGZyZWVfYWxsX3RhZ3Modm9pZCkKK3N0YXRpYyB2b2lkIGZyZWVfYWxsX3RhZ3Moc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhKQogewogCWludCB0YXJnZXQsIGx1bjsKLQlUQUdfQUxMT0MgKnRhOworCXN0cnVjdCB0YWdfYWxsb2MgKnRhOwogCi0JaWYgKCFzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcpCisJaWYgKCEoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19UQUdHRURfUVVFVUlORykpCiAJCXJldHVybjsKIAogCWZvciAodGFyZ2V0ID0gMDsgdGFyZ2V0IDwgODsgKyt0YXJnZXQpIHsKIAkJZm9yIChsdW4gPSAwOyBsdW4gPCA4OyArK2x1bikgewotCQkJdGEgPSAmVGFnQWxsb2NbdGFyZ2V0XVtsdW5dOworCQkJdGEgPSAmaG9zdGRhdGEtPlRhZ0FsbG9jW3RhcmdldF1bbHVuXTsKIAkJCWJpdG1hcF96ZXJvKHRhLT5hbGxvY2F0ZWQsIE1BWF9UQUdTKTsKIAkJCXRhLT5ucl9hbGxvY2F0ZWQgPSAwOwogCQl9CkBAIC00NTksMTkgKzQwMywyMCBAQAogCiAKIC8qCi0gKiBGdW5jdGlvbjogdm9pZCBtZXJnZV9jb250aWd1b3VzX2J1ZmZlcnMoIFNjc2lfQ21uZCAqY21kICkKKyAqIEZ1bmN0aW9uOiB2b2lkIG1lcmdlX2NvbnRpZ3VvdXNfYnVmZmVycyggc3RydWN0IHNjc2lfY21uZCAqY21kICkKICAqCiAgKiBQdXJwb3NlOiBUcnkgdG8gbWVyZ2Ugc2V2ZXJhbCBzY2F0dGVyLWdhdGhlciByZXF1ZXN0cyBpbnRvIG9uZSBETUEKICAqICAgIHRyYW5zZmVyLiBUaGlzIGlzIHBvc3NpYmxlIGlmIHRoZSBzY2F0dGVyIGJ1ZmZlcnMgbGllIG9uCiAgKiAgICBwaHlzaWNhbCBjb250aWd1b3VzIGFkZHJlc3Nlcy4KICAqCi0gKiBQYXJhbWV0ZXJzOiBTY3NpX0NtbmQgKmNtZAorICogUGFyYW1ldGVyczogc3RydWN0IHNjc2lfY21uZCAqY21kCiAgKiAgICBUaGUgY29tbWFuZCB0byB3b3JrIG9uLiBUaGUgZmlyc3Qgc2NhdHRlciBidWZmZXIncyBkYXRhIGFyZQogICogICAgYXNzdW1lZCB0byBiZSBhbHJlYWR5IHRyYW5zZmVycmVkIGludG8gcHRyL3RoaXNfcmVzaWR1YWwuCiAgKi8KIAotc3RhdGljIHZvaWQgbWVyZ2VfY29udGlndW91c19idWZmZXJzKFNjc2lfQ21uZCAqY21kKQorc3RhdGljIHZvaWQgbWVyZ2VfY29udGlndW91c19idWZmZXJzKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKKyNpZiAhZGVmaW5lZChDT05GSUdfU1VOMykKIAl1bnNpZ25lZCBsb25nIGVuZGFkZHI7CiAjaWYgKE5ERUJVRyAmIE5ERUJVR19NRVJHSU5HKQogCXVuc2lnbmVkIGxvbmcgb2xkbGVuID0gY21kLT5TQ3AudGhpc19yZXNpZHVhbDsKQEAgLTQ5NiwxOCArNDQxLDE3IEBACiAJCWRwcmludGsoTkRFQlVHX01FUkdJTkcsICJtZXJnZWQgJWQgYnVmZmVycyBmcm9tICVwLCBuZXcgbGVuZ3RoICUwOHhcbiIsCiAJCQkgICBjbnQsIGNtZC0+U0NwLnB0ciwgY21kLT5TQ3AudGhpc19yZXNpZHVhbCk7CiAjZW5kaWYKKyNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfU1VOMykgKi8KIH0KIAotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBpbml0aWFsaXplX1NDcChTY3NpX0NtbmQgKmNtZCkKKy8qKgorICogaW5pdGlhbGl6ZV9TQ3AgLSBpbml0IHRoZSBzY3NpIHBvaW50ZXIgZmllbGQKKyAqIEBjbWQ6IGNvbW1hbmQgYmxvY2sgdG8gc2V0IHVwCiAgKgotICogUHVycG9zZSA6IGluaXRpYWxpemUgdGhlIHNhdmVkIGRhdGEgcG9pbnRlcnMgZm9yIGNtZCB0byBwb2ludCB0byB0aGUKLSAqCXN0YXJ0IG9mIHRoZSBidWZmZXIuCi0gKgotICogSW5wdXRzIDogY21kIC0gU2NzaV9DbW5kIHN0cnVjdHVyZSB0byBoYXZlIHBvaW50ZXJzIHJlc2V0LgorICogU2V0IHVwIHRoZSBpbnRlcm5hbCBmaWVsZHMgaW4gdGhlIFNDU0kgY29tbWFuZC4KICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZV9TQ3AoU2NzaV9DbW5kICpjbWQpCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZV9TQ3Aoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgU2NzaSBQb2ludGVyIGZpZWxkIHNvIHRoYXQgYWxsIG9mIHRoZSBjb21tYW5kcyBpbiB0aGUKQEAgLTU1NywxMiArNTAxLDExIEBACiAJezAsIE5VTEx9CiB9OwogCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfcHJpbnQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCisvKioKKyAqIE5DUjUzODBfcHJpbnQgLSBwcmludCBzY3NpIGJ1cyBzaWduYWxzCisgKiBAaW5zdGFuY2U6IGFkYXB0ZXIgc3RhdGUgdG8gZHVtcAogICoKLSAqIFB1cnBvc2UgOiBwcmludCB0aGUgU0NTSSBidXMgc2lnbmFscyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCi0gKgotICogSW5wdXQgOiBpbnN0YW5jZSAtIHdoaWNoIE5DUjUzODAKKyAqIFByaW50IHRoZSBTQ1NJIGJ1cyBzaWduYWxzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKICAqLwogCiBzdGF0aWMgdm9pZCBOQ1I1MzgwX3ByaW50KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQpAQCAtNjA1LDEyICs1NDgsMTMgQEAKIAl7UEhBU0VfVU5LTk9XTiwgIlVOS05PV04ifQogfTsKIAotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX3ByaW50X3BoYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorLyoqCisgKiBOQ1I1MzgwX3ByaW50X3BoYXNlIC0gc2hvdyBTQ1NJIHBoYXNlCisgKiBAaW5zdGFuY2U6IGFkYXB0ZXIgdG8gZHVtcAogICoKLSAqIFB1cnBvc2UgOiBwcmludCB0aGUgY3VycmVudCBTQ1NJIHBoYXNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyAqIFByaW50IHRoZSBjdXJyZW50IFNDU0kgcGhhc2UgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcwogICoKLSAqIElucHV0IDogaW5zdGFuY2UgLSB3aGljaCBOQ1I1MzgwCisgKiBMb2Nrczogbm9uZQogICovCiAKIHN0YXRpYyB2b2lkIE5DUjUzODBfcHJpbnRfcGhhc2Uoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCkBAIC02NDgsNzEgKzU5Miw3NSBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCi1zdGF0aWMgdm9sYXRpbGUgaW50IG1haW5fcnVubmluZzsKLXN0YXRpYyBERUNMQVJFX1dPUksoTkNSNTM4MF90cXVldWUsIE5DUjUzODBfbWFpbik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9tYWluKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfbWFpbihzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEpCiB7Ci0JaWYgKCFtYWluX3J1bm5pbmcpIHsKKwlpZiAoIWhvc3RkYXRhLT5tYWluX3J1bm5pbmcpIHsKIAkJLyogSWYgaW4gaW50ZXJydXB0IGFuZCBOQ1I1MzgwX21haW4oKSBub3QgYWxyZWFkeSBydW5uaW5nLAogCQkgICBxdWV1ZSBpdCBvbiB0aGUgJ2ltbWVkaWF0ZScgdGFzayBxdWV1ZSwgdG8gYmUgcHJvY2Vzc2VkCiAJCSAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjdXJyZW50IGludGVycnVwdCBwcm9jZXNzaW5nIGhhcwogCQkgICBmaW5pc2hlZC4gKi8KLQkJc2NoZWR1bGVfd29yaygmTkNSNTM4MF90cXVldWUpOworCQlzY2hlZHVsZV93b3JrKCZob3N0ZGF0YS0+bWFpbl90YXNrKTsKIAl9CiAJLyogZWxzZTogbm90aGluZyB0byBkbzogdGhlIHJ1bm5pbmcgTkNSNTM4MF9tYWluKCkgd2lsbCBwaWNrIHVwCiAJICAgYW55IG5ld2x5IHF1ZXVlZCBjb21tYW5kLiAqLwogfQogCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBOQ1I1MzgwX2FsbF9pbml0KHZvaWQpCi17Ci0Jc3RhdGljIGludCBkb25lID0gMDsKLQlpZiAoIWRvbmUpIHsKLQkJZHByaW50ayhOREVCVUdfSU5JVCwgInNjc2kgOiBOQ1I1MzgwX2FsbF9pbml0KClcbiIpOwotCQlkb25lID0gMTsKLQl9Ci19Ci0KLQotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1ODM4MF9wcmludF9vcHRpb25zIChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKKy8qKgorICogTkNSNTgzODBfaW5mbyAtIHJlcG9ydCBkcml2ZXIgYW5kIGhvc3QgaW5mb3JtYXRpb24KKyAqIEBpbnN0YW5jZTogcmVsZXZhbnQgc2NzaSBob3N0IGluc3RhbmNlCiAgKgotICogUHVycG9zZSA6IGNhbGxlZCBieSBwcm9iZSBjb2RlIGluZGljYXRpbmcgdGhlIE5DUjUzODAgZHJpdmVyCi0gKgkgICAgIG9wdGlvbnMgdGhhdCB3ZXJlIHNlbGVjdGVkLgorICogRm9yIHVzZSBhcyB0aGUgaG9zdCB0ZW1wbGF0ZSBpbmZvKCkgaGFuZGxlci4KICAqCi0gKiBJbnB1dHMgOiBpbnN0YW5jZSwgcG9pbnRlciB0byB0aGlzIGluc3RhbmNlLiAgVW51c2VkLgorICogTG9ja3M6IG5vbmUKICAqLwogCi1zdGF0aWMgdm9pZCBfX2luaXQgTkNSNTM4MF9wcmludF9vcHRpb25zKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorc3RhdGljIGNvbnN0IGNoYXIgKk5DUjUzODBfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKLQlwcmludGsoIiBnZW5lcmljIG9wdGlvbnMiCi0jaWZkZWYgQVVUT1NFTlNFCi0JICAgICAgICIgQVVUT1NFTlNFIgorCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOworCisJcmV0dXJuIGhvc3RkYXRhLT5pbmZvOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCit7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwlzbnByaW50Zihob3N0ZGF0YS0+aW5mbywgc2l6ZW9mKGhvc3RkYXRhLT5pbmZvKSwKKwkgICAgICAgICAiJXMsIGlvX3BvcnQgMHglbHgsIG5faW9fcG9ydCAlZCwgIgorCSAgICAgICAgICJiYXNlIDB4JWx4LCBpcnEgJWQsICIKKwkgICAgICAgICAiY2FuX3F1ZXVlICVkLCBjbWRfcGVyX2x1biAlZCwgIgorCSAgICAgICAgICJzZ190YWJsZXNpemUgJWQsIHRoaXNfaWQgJWQsICIKKwkgICAgICAgICAiZmxhZ3MgeyAlc30sICIKKwkgICAgICAgICAib3B0aW9ucyB7ICVzfSAiLAorCSAgICAgICAgIGluc3RhbmNlLT5ob3N0dC0+bmFtZSwgaW5zdGFuY2UtPmlvX3BvcnQsIGluc3RhbmNlLT5uX2lvX3BvcnQsCisJICAgICAgICAgaW5zdGFuY2UtPmJhc2UsIGluc3RhbmNlLT5pcnEsCisJICAgICAgICAgaW5zdGFuY2UtPmNhbl9xdWV1ZSwgaW5zdGFuY2UtPmNtZF9wZXJfbHVuLAorCSAgICAgICAgIGluc3RhbmNlLT5zZ190YWJsZXNpemUsIGluc3RhbmNlLT50aGlzX2lkLAorCSAgICAgICAgIGhvc3RkYXRhLT5mbGFncyAmIEZMQUdfVEFHR0VEX1FVRVVJTkcgPyAiVEFHR0VEX1FVRVVJTkcgIiA6ICIiLAorI2lmZGVmIERJRkZFUkVOVElBTAorCSAgICAgICAgICJESUZGRVJFTlRJQUwgIgogI2VuZGlmCiAjaWZkZWYgUkVBTF9ETUEKLQkgICAgICAgIiBSRUFMIERNQSIKKwkgICAgICAgICAiUkVBTF9ETUEgIgogI2VuZGlmCiAjaWZkZWYgUEFSSVRZCi0JICAgICAgICIgUEFSSVRZIgorCSAgICAgICAgICJQQVJJVFkgIgogI2VuZGlmCiAjaWZkZWYgU1VQUE9SVF9UQUdTCi0JICAgICAgICIgU0NTSS0yIFRBR0dFRCBRVUVVSU5HIgorCSAgICAgICAgICJTVVBQT1JUX1RBR1MgIgogI2VuZGlmCi0JICAgICAgICk7Ci0JcHJpbnRrKCIgZ2VuZXJpYyByZWxlYXNlPSVkIiwgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7CisJICAgICAgICAgIiIpOwogfQogCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfcHJpbnRfc3RhdHVzIChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKKy8qKgorICogTkNSNTM4MF9wcmludF9zdGF0dXMgLSBkdW1wIGNvbnRyb2xsZXIgaW5mbworICogQGluc3RhbmNlOiBjb250cm9sbGVyIHRvIGR1bXAKICAqCi0gKiBQdXJwb3NlIDogcHJpbnQgY29tbWFuZHMgaW4gdGhlIHZhcmlvdXMgcXVldWVzLCBjYWxsZWQgZnJvbQotICoJTkNSNTM4MF9hYm9ydCBhbmQgTkNSNTM4MF9kZWJ1ZyB0byBhaWQgZGVidWdnaW5nLgotICoKLSAqIElucHV0cyA6IGluc3RhbmNlLCBwb2ludGVyIHRvIHRoaXMgaW5zdGFuY2UuCisgKiBQcmludCBjb21tYW5kcyBpbiB0aGUgdmFyaW91cyBxdWV1ZXMsIGNhbGxlZCBmcm9tIE5DUjUzODBfYWJvcnQKKyAqIHRvIGFpZCBkZWJ1Z2dpbmcuCiAgKi8KIAotc3RhdGljIHZvaWQgbHByaW50X1Njc2lfQ21uZChTY3NpX0NtbmQgKmNtZCkKK3N0YXRpYyB2b2lkIGxwcmludF9TY3NpX0NtbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCWludCBpLCBzOwogCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQ7CkBAIC03MjksNyArNjc3LDcgQEAKIHN0YXRpYyB2b2lkIE5DUjUzODBfcHJpbnRfc3RhdHVzKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQogewogCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQlTY3NpX0NtbmQgKnB0cjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpwdHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCU5DUjUzODBfZHByaW50KE5ERUJVR19BTlksIGluc3RhbmNlKTsKQEAgLTczNywyMCArNjg1LDE5IEBACiAKIAlob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YTsKIAotCXByaW50aygiXG5OQ1I1MzgwIGNvcmUgcmVsZWFzZT0lZC5cbiIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlwcmludGsoIk5DUjUzODA6IGNvcm91dGluZSBpcyVzIHJ1bm5pbmcuXG4iLAotCQltYWluX3J1bm5pbmcgPyAiIiA6ICJuJ3QiKTsKKwkJaG9zdGRhdGEtPm1haW5fcnVubmluZyA/ICIiIDogIm4ndCIpOwogCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkKIAkJcHJpbnRrKCJzY3NpJWQ6IG5vIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZFxuIiwgSE9TVE5PKTsKIAllbHNlCi0JCWxwcmludF9TY3NpX0NtbmQoKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkKTsKKwkJbHByaW50X1Njc2lfQ21uZCgoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkKTsKIAlwcmludGsoInNjc2klZDogaXNzdWVfcXVldWVcbiIsIEhPU1ROTyk7Ci0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IE5FWFQocHRyKSkKKwlmb3IgKHB0ciA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IE5FWFQocHRyKSkKIAkJbHByaW50X1Njc2lfQ21uZChwdHIpOwogCiAJcHJpbnRrKCJzY3NpJWQ6IGRpc2Nvbm5lY3RlZF9xdWV1ZVxuIiwgSE9TVE5PKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOworCWZvciAocHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOwogCSAgICAgcHRyID0gTkVYVChwdHIpKQogCQlscHJpbnRfU2NzaV9DbW5kKHB0cik7CiAKQEAgLTc1OCw3ICs3MDUsNyBAQAogCXByaW50aygiXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19TY3NpX0NtbmQoU2NzaV9DbW5kICpjbWQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKK3N0YXRpYyB2b2lkIHNob3dfU2NzaV9DbW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgc3RydWN0IHNlcV9maWxlICptKQogewogCWludCBpLCBzOwogCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQ7CkBAIC03NzIsMjggKzcxOSwyOCBAQAogCXNlcV9wcmludGYobSwgIlxuIik7CiB9CiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9zaG93X2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgTkNSNTM4MF9zaG93X2luZm8oc3RydWN0IHNlcV9maWxlICptLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JU2NzaV9DbW5kICpwdHI7CisJc3RydWN0IHNjc2lfY21uZCAqcHRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YTsKIAotCXNlcV9wcmludGYobSwgIk5DUjUzODAgY29yZSByZWxlYXNlPSVkLlxuIiwgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXNlcV9wcmludGYobSwgIk5DUjUzODA6IGNvcm91dGluZSBpcyVzIHJ1bm5pbmcuXG4iLAotCQltYWluX3J1bm5pbmcgPyAiIiA6ICJuJ3QiKTsKKwkJaG9zdGRhdGEtPm1haW5fcnVubmluZyA/ICIiIDogIm4ndCIpOwogCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkKIAkJc2VxX3ByaW50ZihtLCAic2NzaSVkOiBubyBjdXJyZW50bHkgY29ubmVjdGVkIGNvbW1hbmRcbiIsIEhPU1ROTyk7CiAJZWxzZQotCQlzaG93X1Njc2lfQ21uZCgoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQsIG0pOworCQlzaG93X1Njc2lfQ21uZCgoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkLCBtKTsKIAlzZXFfcHJpbnRmKG0sICJzY3NpJWQ6IGlzc3VlX3F1ZXVlXG4iLCBIT1NUTk8pOwotCWZvciAocHRyID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSBORVhUKHB0cikpCisJZm9yIChwdHIgPSAoc3RydWN0IHNjc2lfY21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSBORVhUKHB0cikpCiAJCXNob3dfU2NzaV9DbW5kKHB0ciwgbSk7CiAKIAlzZXFfcHJpbnRmKG0sICJzY3NpJWQ6IGRpc2Nvbm5lY3RlZF9xdWV1ZVxuIiwgSE9TVE5PKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOworCWZvciAocHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOwogCSAgICAgcHRyID0gTkVYVChwdHIpKQogCQlzaG93X1Njc2lfQ21uZChwdHIsIG0pOwogCkBAIC04MDEsMTYgKzc0OCwxOCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfaW5pdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCisvKioKKyAqIE5DUjUzODBfaW5pdCAtIGluaXRpYWxpc2UgYW4gTkNSNTM4MAorICogQGluc3RhbmNlOiBhZGFwdGVyIHRvIGNvbmZpZ3VyZQorICogQGZsYWdzOiBjb250cm9sIGZsYWdzCiAgKgotICogUHVycG9zZSA6IGluaXRpYWxpemVzICppbnN0YW5jZSBhbmQgY29ycmVzcG9uZGluZyA1MzgwIGNoaXAuCi0gKgotICogSW5wdXRzIDogaW5zdGFuY2UgLSBpbnN0YW50aWF0aW9uIG9mIHRoZSA1MzgwIGRyaXZlci4KKyAqIEluaXRpYWxpemVzICppbnN0YW5jZSBhbmQgY29ycmVzcG9uZGluZyA1MzgwIGNoaXAsCisgKiB3aXRoIGZsYWdzIE9SJ2QgaW50byB0aGUgaW5pdGlhbCBmbGFncyB2YWx1ZS4KICAqCiAgKiBOb3RlcyA6IEkgYXNzdW1lIHRoYXQgdGhlIGhvc3QsIGhvc3RubywgYW5kIGlkIGJpdHMgaGF2ZSBiZWVuCi0gKglzZXQgY29ycmVjdGx5LiAgSSBkb24ndCBjYXJlIGFib3V0IHRoZSBpcnEgYW5kIG90aGVyIGZpZWxkcy4KKyAqIHNldCBjb3JyZWN0bHkuIEkgZG9uJ3QgY2FyZSBhYm91dCB0aGUgaXJxIGFuZCBvdGhlciBmaWVsZHMuCiAgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzCiAgKi8KIAogc3RhdGljIGludCBfX2luaXQgTkNSNTM4MF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgZmxhZ3MpCkBAIC04MTgsOCArNzY3LDcgQEAKIAlpbnQgaTsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CiAKLQlOQ1I1MzgwX2FsbF9pbml0KCk7Ci0KKwlob3N0ZGF0YS0+aG9zdCA9IGluc3RhbmNlOwogCWhvc3RkYXRhLT5hYm9ydGVkID0gMDsKIAlob3N0ZGF0YS0+aWRfbWFzayA9IDEgPDwgaW5zdGFuY2UtPnRoaXNfaWQ7CiAJaG9zdGRhdGEtPmlkX2hpZ2hlcl9tYXNrID0gMDsKQEAgLTgyOSw3ICs3NzcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCiAJCWhvc3RkYXRhLT5idXN5W2ldID0gMDsKICNpZmRlZiBTVVBQT1JUX1RBR1MKLQlpbml0X3RhZ3MoKTsKKwlpbml0X3RhZ3MoaG9zdGRhdGEpOwogI2VuZGlmCiAjaWYgZGVmaW5lZCAoUkVBTF9ETUEpCiAJaG9zdGRhdGEtPmRtYV9sZW4gPSAwOwpAQCAtODM4LDE5ICs3ODYsMTEgQEAKIAlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKIAlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBOVUxMOwogCWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBOVUxMOwotCWhvc3RkYXRhLT5mbGFncyA9IEZMQUdfQ0hFQ0tfTEFTVF9CWVRFX1NFTlQ7CisJaG9zdGRhdGEtPmZsYWdzID0gZmxhZ3M7CiAKLQlpZiAoIXRoZV90ZW1wbGF0ZSkgewotCQl0aGVfdGVtcGxhdGUgPSBpbnN0YW5jZS0+aG9zdHQ7Ci0JCWZpcnN0X2luc3RhbmNlID0gaW5zdGFuY2U7Ci0JfQorCUlOSVRfV09SSygmaG9zdGRhdGEtPm1haW5fdGFzaywgTkNSNTM4MF9tYWluKTsKIAotI2lmbmRlZiBBVVRPU0VOU0UKLQlpZiAoKGluc3RhbmNlLT5jbWRfcGVyX2x1biA+IDEpIHx8IChpbnN0YW5jZS0+Y2FuX3F1ZXVlID4gMSkpCi0JCXByaW50aygic2NzaSVkOiBXQVJOSU5HIDogc3VwcG9ydCBmb3IgbXVsdGlwbGUgb3V0c3RhbmRpbmcgY29tbWFuZHMgZW5hYmxlZFxuIgotCQkgICAgICAgIiAgICAgICAgd2l0aG91dCBBVVRPU0VOU0Ugb3B0aW9uLCBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9ucyBtYXlcbiIKLQkJICAgICAgICIgICAgICAgIGJlIGluY29ycmVjdGx5IGNsZWFyZWQuXG4iLCBIT1NUTk8pOwotI2VuZGlmIC8qIGRlZiBBVVRPU0VOU0UgKi8KKwlwcmVwYXJlX2luZm8oaW5zdGFuY2UpOwogCiAJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKIAlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsKQEAgLTg2MCwzMyArODAwLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIE5DUjUzODBfZXhpdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLXsKLQkvKiBFbXB0eSwgYXMgd2UgZGlkbid0IHNjaGVkdWxlIGFueSBkZWxheWVkIHdvcmsgKi8KLX0KLQotLyoKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfcXVldWVfY29tbWFuZCAoU2NzaV9DbW5kICpjbWQsCi0gKgl2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKQorLyoqCisgKiBOQ1I1MzgwX2V4aXQgLSByZW1vdmUgYW4gTkNSNTM4MAorICogQGluc3RhbmNlOiBhZGFwdGVyIHRvIHJlbW92ZQogICoKLSAqIFB1cnBvc2UgOiAgZW5xdWV1ZXMgYSBTQ1NJIGNvbW1hbmQKLSAqCi0gKiBJbnB1dHMgOiBjbWQgLSBTQ1NJIGNvbW1hbmQsIGRvbmUgLSBmdW5jdGlvbiBjYWxsZWQgb24gY29tcGxldGlvbiwgd2l0aAotICoJYSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IuCi0gKgotICogUmV0dXJucyA6IDAKLSAqCi0gKiBTaWRlIGVmZmVjdHMgOgotICogICAgICBjbWQgaXMgYWRkZWQgdG8gdGhlIHBlciBpbnN0YW5jZSBpc3N1ZV9xdWV1ZSwgd2l0aCBtaW5vcgotICoJdHdpZGRsaW5nIGRvbmUgdG8gdGhlIGhvc3Qgc3BlY2lmaWMgZmllbGRzIG9mIGNtZC4gIElmIHRoZQotICoJbWFpbiBjb3JvdXRpbmUgaXMgbm90IHJ1bm5pbmcsIGl0IGlzIHJlc3RhcnRlZC4KLSAqCisgKiBBc3N1bWVzIHRoYXQgbm8gbW9yZSB3b3JrIGNhbiBiZSBxdWV1ZWQgKGUuZy4gYnkgTkNSNTM4MF9pbnRyKS4KICAqLwogCi1zdGF0aWMgaW50IE5DUjUzODBfcXVldWVfY29tbWFuZF9sY2soU2NzaV9DbW5kICpjbWQsIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpCitzdGF0aWMgdm9pZCBOQ1I1MzgwX2V4aXQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7Ci0JU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwotCVNjc2lfQ21uZCAqdG1wOworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOworCisJY2FuY2VsX3dvcmtfc3luYygmaG9zdGRhdGEtPm1haW5fdGFzayk7Cit9CisKKy8qKgorICogTkNSNTM4MF9xdWV1ZV9jb21tYW5kIC0gcXVldWUgYSBjb21tYW5kCisgKiBAaW5zdGFuY2U6IHRoZSByZWxldmFudCBTQ1NJIGFkYXB0ZXIKKyAqIEBjbWQ6IFNDU0kgY29tbWFuZAorICoKKyAqIGNtZCBpcyBhZGRlZCB0byB0aGUgcGVyIGluc3RhbmNlIGlzc3VlX3F1ZXVlLCB3aXRoIG1pbm9yCisgKiB0d2lkZGxpbmcgZG9uZSB0byB0aGUgaG9zdCBzcGVjaWZpYyBmaWVsZHMgb2YgY21kLiAgSWYgdGhlCisgKiBtYWluIGNvcm91dGluZSBpcyBub3QgcnVubmluZywgaXQgaXMgcmVzdGFydGVkLgorICovCisKK3N0YXRpYyBpbnQgTkNSNTM4MF9xdWV1ZV9jb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAjaWYgKE5ERUJVRyAmIE5ERUJVR19OT19XUklURSkKQEAgLTg5Niw0NyArODM4LDE3IEBACiAJCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBXUklURSBhdHRlbXB0ZWQgd2l0aCBOT19XUklURSBkZWJ1Z2dpbmcgZmxhZyBzZXRcbiIsCiAJCSAgICAgICBIX05PKGNtZCkpOwogCQljbWQtPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOwotCQlkb25lKGNtZCk7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCXJldHVybiAwOwogCX0KICNlbmRpZiAvKiAoTkRFQlVHICYgTkRFQlVHX05PX1dSSVRFKSAqLwogCi0jaWZkZWYgTkNSNTM4MF9TVEFUUwotIyBpZiAwCi0JaWYgKCFob3N0ZGF0YS0+Y29ubmVjdGVkICYmICFob3N0ZGF0YS0+aXNzdWVfcXVldWUgJiYKLQkgICAgIWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUpIHsKLQkJaG9zdGRhdGEtPnRpbWViYXNlID0gamlmZmllczsKLQl9Ci0jIGVuZGlmCi0jIGlmZGVmIE5DUjUzODBfU1RBVF9MSU1JVAotCWlmIChzY3NpX2J1ZmZsZW4oY21kKSA+IE5DUjUzODBfU1RBVF9MSU1JVCkKLSMgZW5kaWYKLQkJc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKLQkJY2FzZSBXUklURToKLQkJY2FzZSBXUklURV82OgotCQljYXNlIFdSSVRFXzEwOgotCQkJaG9zdGRhdGEtPnRpbWVfd3JpdGVbY21kLT5kZXZpY2UtPmlkXSAtPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCQlob3N0ZGF0YS0+Ynl0ZXNfd3JpdGVbY21kLT5kZXZpY2UtPmlkXSArPSBzY3NpX2J1ZmZsZW4oY21kKTsKLQkJCWhvc3RkYXRhLT5wZW5kaW5ndysrOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVBRDoKLQkJY2FzZSBSRUFEXzY6Ci0JCWNhc2UgUkVBRF8xMDoKLQkJCWhvc3RkYXRhLT50aW1lX3JlYWRbY21kLT5kZXZpY2UtPmlkXSAtPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCQlob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOwotCQkJaG9zdGRhdGEtPnBlbmRpbmdyKys7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCi0KIAkvKgogCSAqIFdlIHVzZSB0aGUgaG9zdF9zY3JpYmJsZSBmaWVsZCBhcyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgY29tbWFuZAogCSAqIGluIGEgcXVldWUKIAkgKi8KIAogCVNFVF9ORVhUKGNtZCwgTlVMTCk7Ci0JY21kLT5zY3NpX2RvbmUgPSBkb25lOwotCiAJY21kLT5yZXN1bHQgPSAwOwogCiAJLyoKQEAgLTk0Niw3ICs4NTgsNiBAQAogCSAqIHNlbnNlIGRhdGEgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIHdoaWxlIHRoZSBjb25kaXRpb24gZXhpc3RzLgogCSAqLwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCS8qICsrZ3VlbnRoZXI6IG5vdyB0aGF0IHRoZSBpc3N1ZSBxdWV1ZSBpcyBiZWluZyBzZXQgdXAsIHdlIGNhbiBsb2NrIFNULURNQS4KIAkgKiBPdGhlcndpc2UgYSBydW5uaW5nIE5DUjUzODBfbWFpbiBtYXkgc3RlYWwgdGhlIGxvY2suCiAJICogTG9jayBiZWZvcmUgYWN0dWFsbHkgaW5zZXJ0aW5nIGR1ZSB0byBmYWlybmVzcyByZWFzb25zIGV4cGxhaW5lZCBpbgpAQCAtOTU5LDE3ICs4NzAsMjQgQEAKIAkgKiBiZWNhdXNlIGFsc28gYSB0aW1lciBpbnQgY2FuIHRyaWdnZXIgYW4gYWJvcnQgb3IgcmVzZXQsIHdoaWNoIHdvdWxkCiAJICogYWx0ZXIgcXVldWVzIGFuZCB0b3VjaCB0aGUgbG9jay4KIAkgKi8KLQlpZiAoIUlTX0FfVFQoKSkgewotCQkvKiBwZXJoYXBzIHN0b3AgY29tbWFuZCB0aW1lciBoZXJlICovCi0JCWZhbGNvbl9nZXRfbG9jaygpOwotCQkvKiBwZXJoYXBzIHJlc3RhcnQgY29tbWFuZCB0aW1lciBoZXJlICovCi0JfQorCWlmICghTkNSNTM4MF9hY3F1aXJlX2RtYV9pcnEoaW5zdGFuY2UpKQorCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qCisJICogSW5zZXJ0IHRoZSBjbWQgaW50byB0aGUgaXNzdWUgcXVldWUuIE5vdGUgdGhhdCBSRVFVRVNUIFNFTlNFCisJICogY29tbWFuZHMgYXJlIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSBzaW5jZSBhbnkgY29tbWFuZCB3aWxsCisJICogY2xlYXIgdGhlIGNvbnRpbmdlbnQgYWxsZWdpYW5jZSBjb25kaXRpb24gdGhhdCBleGlzdHMgYW5kIHRoZQorCSAqIHNlbnNlIGRhdGEgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIHdoaWxlIHRoZSBjb25kaXRpb24gZXhpc3RzLgorCSAqLworCiAJaWYgKCEoaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKSB8fCAoY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpKSB7CiAJCUxJU1QoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwogCQlTRVRfTkVYVChjbWQsIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSk7CiAJCWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IGNtZDsKIAl9IGVsc2UgewotCQlmb3IgKHRtcCA9IChTY3NpX0NtbmQgKilob3N0ZGF0YS0+aXNzdWVfcXVldWU7CisJCWZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKilob3N0ZGF0YS0+aXNzdWVfcXVldWU7CiAJCSAgICAgTkVYVCh0bXApOyB0bXAgPSBORVhUKHRtcCkpCiAJCQk7CiAJCUxJU1QoY21kLCB0bXApOwpAQCAtOTg3LDMyICs5MDUsNDIgQEAKIAkgKiBJZiB3ZSdyZSBub3QgaW4gYW4gaW50ZXJydXB0LCB3ZSBjYW4gY2FsbCBOQ1I1MzgwX21haW4oKQogCSAqIHVuY29uZGl0aW9uYWxseSwgYmVjYXVzZSBpdCBjYW5ub3QgYmUgYWxyZWFkeSBydW5uaW5nLgogCSAqLwotCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCAoKGZsYWdzID4+IDgpICYgNykgPj0gNikKLQkJcXVldWVfbWFpbigpOworCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCBpcnFzX2Rpc2FibGVkKCkpCisJCXF1ZXVlX21haW4oaG9zdGRhdGEpOwogCWVsc2UKLQkJTkNSNTM4MF9tYWluKE5VTEwpOworCQlOQ1I1MzgwX21haW4oJmhvc3RkYXRhLT5tYWluX3Rhc2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgREVGX1NDU0lfUUNNRChOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQpCitzdGF0aWMgaW5saW5lIHZvaWQgbWF5YmVfcmVsZWFzZV9kbWFfaXJxKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQoreworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOwogCi0vKgotICogRnVuY3Rpb24gOiBOQ1I1MzgwX21haW4gKHZvaWQpCisJLyogQ2FsbGVyIGRvZXMgdGhlIGxvY2tpbmcgbmVlZGVkIHRvIHNldCAmIHRlc3QgdGhlc2UgZGF0YSBhdG9taWNhbGx5ICovCisJaWYgKCFob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlICYmCisJICAgICFob3N0ZGF0YS0+aXNzdWVfcXVldWUgJiYKKwkgICAgIWhvc3RkYXRhLT5jb25uZWN0ZWQgJiYKKwkgICAgIWhvc3RkYXRhLT5yZXRhaW5fZG1hX2ludHIpCisJCU5DUjUzODBfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKK30KKworLyoqCisgKiBOQ1I1MzgwX21haW4gLSBOQ1Igc3RhdGUgbWFjaGluZXMKICAqCi0gKiBQdXJwb3NlIDogTkNSNTM4MF9tYWluIGlzIGEgY29yb3V0aW5lIHRoYXQgcnVucyBhcyBsb25nIGFzIG1vcmUgd29yayBjYW4KLSAqCWJlIGRvbmUgb24gdGhlIE5DUjUzODAgaG9zdCBhZGFwdGVycyBpbiBhIHN5c3RlbS4gIEJvdGgKLSAqCU5DUjUzODBfcXVldWVfY29tbWFuZCgpIGFuZCBOQ1I1MzgwX2ludHIoKSB3aWxsIHRyeSB0byBzdGFydCBpdAotICoJaW4gY2FzZSBpdCBpcyBub3QgcnVubmluZy4KKyAqIE5DUjUzODBfbWFpbiBpcyBhIGNvcm91dGluZSB0aGF0IHJ1bnMgYXMgbG9uZyBhcyBtb3JlIHdvcmsgY2FuCisgKiBiZSBkb25lIG9uIHRoZSBOQ1I1MzgwIGhvc3QgYWRhcHRlcnMgaW4gYSBzeXN0ZW0uICBCb3RoCisgKiBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQoKSBhbmQgTkNSNTM4MF9pbnRyKCkgd2lsbCB0cnkgdG8gc3RhcnQgaXQKKyAqIGluIGNhc2UgaXQgaXMgbm90IHJ1bm5pbmcuCiAgKgotICogTk9URSA6IE5DUjUzODBfbWFpbiBleGl0cyB3aXRoIGludGVycnVwdHMgKmRpc2FibGVkKiwgdGhlIGNhbGxlciBzaG91bGQKLSAqICByZWVuYWJsZSB0aGVtLiAgVGhpcyBwcmV2ZW50cyByZWVudHJhbmN5IGFuZCBrZXJuZWwgc3RhY2sgb3ZlcmZsb3cuCisgKiBMb2NrczogY2FsbGVkIGFzIGl0cyBvd24gdGhyZWFkIHdpdGggbm8gbG9ja3MgaGVsZC4KICAqLwogCiBzdGF0aWMgdm9pZCBOQ1I1MzgwX21haW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCVNjc2lfQ21uZCAqdG1wLCAqcHJldjsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGZpcnN0X2luc3RhbmNlOwotCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IEhPU1REQVRBKGluc3RhbmNlKTsKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IE5DUjUzODBfaG9zdGRhdGEsIG1haW5fdGFzayk7CisJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBob3N0ZGF0YS0+aG9zdDsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXAsICpwcmV2OwogCWludCBkb25lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTEwMzcsOSArOTY1LDkgQEAKIAkgICAnbWFpbl9ydW5uaW5nJyBpcyBzZXQgaGVyZSwgYW5kIHF1ZXVlcy9leGVjdXRlcyBtYWluIHZpYSB0aGUKIAkgICB0YXNrIHF1ZXVlLCBpdCBkb2Vzbid0IGRvIGFueSBoYXJtLCBqdXN0IHRoaXMgaW5zdGFuY2Ugb2YgbWFpbgogCSAgIHdvbid0IGZpbmQgYW55IHdvcmsgbGVmdCB0byBkby4gKi8KLQlpZiAobWFpbl9ydW5uaW5nKQorCWlmIChob3N0ZGF0YS0+bWFpbl9ydW5uaW5nKQogCQlyZXR1cm47Ci0JbWFpbl9ydW5uaW5nID0gMTsKKwlob3N0ZGF0YS0+bWFpbl9ydW5uaW5nID0gMTsKIAogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCWRvIHsKQEAgLTEwNTMsNyArOTgxLDcgQEAKIAkJCSAqIGZvciBhIHRhcmdldCB0aGF0J3Mgbm90IGJ1c3kuCiAJCQkgKi8KICNpZiAoTkRFQlVHICYgTkRFQlVHX0xJU1RTKQotCQkJZm9yICh0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwgcHJldiA9IE5VTEw7CisJCQlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwgcHJldiA9IE5VTEw7CiAJCQkgICAgIHRtcCAmJiAodG1wICE9IHByZXYpOyBwcmV2ID0gdG1wLCB0bXAgPSBORVhUKHRtcCkpCiAJCQkJOwogCQkJLypwcmludGsoIiVwICAiLCB0bXApOyovCkBAIC0xMDYxLDE2ICs5ODksMTQgQEAKIAkJCQlwcmludGsoIiBMT09QXG4iKTsKIAkJCS8qIGVsc2UgcHJpbnRrKCJcbiIpOyAqLwogI2VuZGlmCi0JCQlmb3IgKHRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLAorCQkJZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWUsCiAJCQkgICAgIHByZXYgPSBOVUxMOyB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IE5FWFQodG1wKSkgewogCQkJCXU4IGx1biA9IHRtcC0+ZGV2aWNlLT5sdW47CiAKLSNpZiAoTkRFQlVHICYgTkRFQlVHX0xJU1RTKQotCQkJCWlmIChwcmV2ICE9IHRtcCkKLQkJCQkJcHJpbnRrKCJNQUlOIHRtcD0lcCAgIHRhcmdldD0lZCAgIGJ1c3k9JWQgbHVuPSVsbHVcbiIsCi0JCQkJCSAgICAgICB0bXAsIHRtcC0+ZGV2aWNlLT5pZCwgaG9zdGRhdGEtPmJ1c3lbdG1wLT5kZXZpY2UtPmlkXSwKLQkJCQkJICAgICAgIGx1bik7Ci0jZW5kaWYKKwkJCQlkcHJpbnRrKE5ERUJVR19MSVNUUywKKwkJCQkgICAgICAgICJNQUlOIHRtcD0lcCB0YXJnZXQ9JWQgYnVzeT0lZCBsdW49JWRcbiIsCisJCQkJICAgICAgICB0bXAsIHNjbWRfaWQodG1wKSwgaG9zdGRhdGEtPmJ1c3lbc2NtZF9pZCh0bXApXSwKKwkJCQkgICAgICAgIGx1bik7CiAJCQkJLyogIFdoZW4gd2UgZmluZCBvbmUsIHJlbW92ZSBpdCBmcm9tIHRoZSBpc3N1ZSBxdWV1ZS4gKi8KIAkJCQkvKiArK2d1ZW50aGVyOiBwb3NzaWJsZSByYWNlIHdpdGggRmFsY29uIGxvY2tpbmcgKi8KIAkJCQlpZiAoCkBAIC0xMDkwLDcgKzEwMTYsNyBAQAogCQkJCQkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gTkVYVCh0bXApOwogCQkJCQl9CiAJCQkJCVNFVF9ORVhUKHRtcCwgTlVMTCk7Ci0JCQkJCWZhbGNvbl9kb250X3JlbGVhc2UrKzsKKwkJCQkJaG9zdGRhdGEtPnJldGFpbl9kbWFfaW50cisrOwogCiAJCQkJCS8qIHJlZW5hYmxlIGludGVycnVwdHMgYWZ0ZXIgZmluZGluZyBvbmUgKi8KIAkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMTExNywxMiArMTA0MywxMiBAQAogI2lmZGVmIFNVUFBPUlRfVEFHUwogCQkJCQljbWRfZ2V0X3RhZyh0bXAsIHRtcC0+Y21uZFswXSAhPSBSRVFVRVNUX1NFTlNFKTsKICNlbmRpZgotCQkJCQlpZiAoIU5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCB0bXAsCi0JCQkJCSAgICAodG1wLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpID8gVEFHX05PTkUgOgotCQkJCQkgICAgVEFHX05FWFQpKSB7Ci0JCQkJCQlmYWxjb25fZG9udF9yZWxlYXNlLS07CisJCQkJCWlmICghTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIHRtcCkpIHsKKwkJCQkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCQkJCQlob3N0ZGF0YS0+cmV0YWluX2RtYV9pbnRyLS07CiAJCQkJCQkvKiByZWxlYXNlIGlmIHRhcmdldCBkaWQgbm90IHJlc3BvbnNlISAqLwotCQkJCQkJZmFsY29uX3JlbGVhc2VfbG9ja19pZl9wb3NzaWJsZShob3N0ZGF0YSk7CisJCQkJCQltYXliZV9yZWxlYXNlX2RtYV9pcnEoaW5zdGFuY2UpOworCQkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwpAQCAtMTEzMiw3ICsxMDU4LDcgQEAKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJCQkJCWNtZF9mcmVlX3RhZyh0bXApOwogI2VuZGlmCi0JCQkJCQlmYWxjb25fZG9udF9yZWxlYXNlLS07CisJCQkJCQlob3N0ZGF0YS0+cmV0YWluX2RtYV9pbnRyLS07CiAJCQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCQkJCQlkcHJpbnRrKE5ERUJVR19NQUlOLCAic2NzaSVkOiBtYWluKCk6IHNlbGVjdCgpIGZhaWxlZCwgIgogCQkJCQkJCSAgICAicmV0dXJuZWQgdG8gaXNzdWVfcXVldWVcbiIsIEhPU1ROTyk7CkBAIC0xMTYwLDcgKzEwODYsNyBAQAogCS8qIEJldHRlciBhbGxvdyBpbnRzIF9hZnRlcl8gJ21haW5fcnVubmluZycgaGFzIGJlZW4gY2xlYXJlZCwgZWxzZQogCSAgIGFuIGludGVycnVwdCBjb3VsZCBiZWxpZXZlIHdlJ2xsIHBpY2sgdXAgdGhlIHdvcmsgaXQgbGVmdCBmb3IKIAkgICB1cywgYnV0IHdlIHdvbid0IHNlZSBpdCBhbnltb3JlIGhlcmUuLi4gKi8KLQltYWluX3J1bm5pbmcgPSAwOworCWhvc3RkYXRhLT5tYWluX3J1bm5pbmcgPSAwOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMTE3OSw5ICsxMTA1LDExIEBACiBzdGF0aWMgdm9pZCBOQ1I1MzgwX2RtYV9jb21wbGV0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7Ci0JaW50IHRyYW5zZmVyZWQsIHNhdmVkX2RhdGEgPSAwLCBvdmVycnVuID0gMCwgY250LCB0b1BJTzsKLQl1bnNpZ25lZCBjaGFyICoqZGF0YSwgcDsKKwlpbnQgdHJhbnNmZXJyZWQ7CisJdW5zaWduZWQgY2hhciAqKmRhdGE7CiAJdm9sYXRpbGUgaW50ICpjb3VudDsKKwlpbnQgc2F2ZWRfZGF0YSA9IDAsIG92ZXJydW4gPSAwOworCXVuc2lnbmVkIGNoYXIgcDsKIAogCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IHJlY2VpdmVkIGVuZCBvZiBETUEgaW50ZXJydXB0IHdpdGggIgpAQCAtMTE4OSw3ICsxMTE3LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChhdGFyaV9yZWFkX292ZXJydW5zKSB7CisJaWYgKGhvc3RkYXRhLT5yZWFkX292ZXJydW5zKSB7CiAJCXAgPSBob3N0ZGF0YS0+Y29ubmVjdGVkLT5TQ3AucGhhc2U7CiAJCWlmIChwICYgU1JfSU8pIHsKIAkJCXVkZWxheSgxMCk7CkBAIC0xMjA3LDIxICsxMTM1LDQxIEBACiAJCSAgIEhPU1ROTywgTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRyksCiAJCSAgIE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TVU4zKQorCWlmICgoc3VuM3Njc2lfZG1hX2ZpbmlzaChycV9kYXRhX2Rpcihob3N0ZGF0YS0+Y29ubmVjdGVkLT5yZXF1ZXN0KSkpKSB7CisJCXByX2Vycigic2NzaSVkOiBvdmVycnVuIGluIFVEQyBjb3VudGVyIC0tIG5vdCBwcmVwYXJlZCB0byBkZWFsIHdpdGggdGhpcyFcbiIsCisJCSAgICAgICBpbnN0YW5jZS0+aG9zdF9ubyk7CisJCUJVRygpOworCX0KKworCS8qIG1ha2Ugc3VyZSB3ZSdyZSBub3Qgc3R1Y2sgaW4gYSBkYXRhIHBoYXNlICovCisJaWYgKChOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIChCQVNSX1BIQVNFX01BVENIIHwgQkFTUl9BQ0spKSA9PQorCSAgICAoQkFTUl9QSEFTRV9NQVRDSCB8IEJBU1JfQUNLKSkgeworCQlwcl9lcnIoInNjc2klZDogQkFTUiAlMDJ4XG4iLCBpbnN0YW5jZS0+aG9zdF9ubywKKwkJICAgICAgIE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpKTsKKwkJcHJfZXJyKCJzY3NpJWQ6IGJ1cyBzdHVjayBpbiBkYXRhIHBoYXNlIC0tIHByb2JhYmx5IGEgc2luZ2xlIGJ5dGUgb3ZlcnJ1biFcbiIsCisJCSAgICAgICBpbnN0YW5jZS0+aG9zdF9ubyk7CisJCUJVRygpOworCX0KKyNlbmRpZgorCiAJKHZvaWQpTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKIAlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsKIAlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwogCi0JdHJhbnNmZXJlZCA9IGhvc3RkYXRhLT5kbWFfbGVuIC0gTkNSNTM4MF9kbWFfcmVzaWR1YWwoaW5zdGFuY2UpOworCXRyYW5zZmVycmVkID0gaG9zdGRhdGEtPmRtYV9sZW4gLSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSk7CiAJaG9zdGRhdGEtPmRtYV9sZW4gPSAwOwogCiAJZGF0YSA9ICh1bnNpZ25lZCBjaGFyICoqKSZob3N0ZGF0YS0+Y29ubmVjdGVkLT5TQ3AucHRyOwogCWNvdW50ID0gJmhvc3RkYXRhLT5jb25uZWN0ZWQtPlNDcC50aGlzX3Jlc2lkdWFsOwotCSpkYXRhICs9IHRyYW5zZmVyZWQ7Ci0JKmNvdW50IC09IHRyYW5zZmVyZWQ7CisJKmRhdGEgKz0gdHJhbnNmZXJyZWQ7CisJKmNvdW50IC09IHRyYW5zZmVycmVkOwogCi0JaWYgKGF0YXJpX3JlYWRfb3ZlcnJ1bnMpIHsKKwlpZiAoaG9zdGRhdGEtPnJlYWRfb3ZlcnJ1bnMpIHsKKwkJaW50IGNudCwgdG9QSU87CisKIAkJaWYgKChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBQSEFTRV9NQVNLKSA9PSBwICYmIChwICYgU1JfSU8pKSB7Ci0JCQljbnQgPSB0b1BJTyA9IGF0YXJpX3JlYWRfb3ZlcnJ1bnM7CisJCQljbnQgPSB0b1BJTyA9IGhvc3RkYXRhLT5yZWFkX292ZXJydW5zOwogCQkJaWYgKG92ZXJydW4pIHsKIAkJCQlkcHJpbnRrKE5ERUJVR19ETUEsICJHb3QgYW4gaW5wdXQgb3ZlcnJ1biwgdXNpbmcgc2F2ZWQgYnl0ZVxuIik7CiAJCQkJKigqZGF0YSkrKyA9IHNhdmVkX2RhdGE7CkBAIC0xMjM4LDIwICsxMTg2LDE5IEBACiAjZW5kaWYgLyogUkVBTF9ETUEgKi8KIAogCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfaW50ciAoaW50IGlycSkKKy8qKgorICogTkNSNTM4MF9pbnRyIC0gZ2VuZXJpYyBOQ1I1MzgwIGlycSBoYW5kbGVyCisgKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCisgKiBAZGV2X2lkOiBkZXZpY2UgaW5mbwogICoKLSAqIFB1cnBvc2UgOiBoYW5kbGUgaW50ZXJydXB0cywgcmVlc3RhYmxpc2hpbmcgSV9UX0wgb3IgSV9UX0xfUSBuZXh1c2VzCi0gKglmcm9tIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUsIGFuZCByZXN0YXJ0aW5nIE5DUjUzODBfbWFpbigpCi0gKglhcyByZXF1aXJlZC4KLSAqCi0gKiBJbnB1dHMgOiBpbnQgaXJxLCBpcnEgdGhhdCBjYXVzZWQgdGhpcyBpbnRlcnJ1cHQuCi0gKgorICogSGFuZGxlIGludGVycnVwdHMsIHJlZXN0YWJsaXNoaW5nIElfVF9MIG9yIElfVF9MX1EgbmV4dXNlcworICogZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlLCBhbmQgcmVzdGFydGluZyBOQ1I1MzgwX21haW4oKQorICogYXMgcmVxdWlyZWQuCiAgKi8KIAogc3RhdGljIGlycXJldHVybl90IE5DUjUzODBfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBmaXJzdF9pbnN0YW5jZTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGRldl9pZDsKIAlpbnQgZG9uZSA9IDEsIGhhbmRsZWQgPSAwOwogCXVuc2lnbmVkIGNoYXIgYmFzcjsKIApAQCAtMTI2NSw3ICsxMjEyLDYgQEAKIAkJTkNSNTM4MF9kcHJpbnQoTkRFQlVHX0lOVFIsIGluc3RhbmNlKTsKIAkJaWYgKChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiAoU1JfU0VMfFNSX0lPKSkgPT0gKFNSX1NFTHxTUl9JTykpIHsKIAkJCWRvbmUgPSAwOwotCQkJRU5BQkxFX0lSUSgpOwogCQkJZHByaW50ayhOREVCVUdfSU5UUiwgInNjc2klZDogU0VMIGludGVycnVwdFxuIiwgSE9TVE5PKTsKIAkJCU5DUjUzODBfcmVzZWxlY3QoaW5zdGFuY2UpOwogCQkJKHZvaWQpTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKQEAgLTEyOTUsMTcgKzEyNDEsMTkgQEAKIAkJCQlkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBQSEFTRSBNSVNNIG9yIEVPUCBpbnRlcnJ1cHRcbiIsIEhPU1ROTyk7CiAJCQkJTkNSNTM4MF9kbWFfY29tcGxldGUoIGluc3RhbmNlICk7CiAJCQkJZG9uZSA9IDA7Ci0JCQkJRU5BQkxFX0lSUSgpOwogCQkJfSBlbHNlCiAjZW5kaWYgLyogUkVBTF9ETUEgKi8KIAkJCXsKIC8qIE1TOiBJZ25vcmUgdW5rbm93biBwaGFzZSBtaXNtYXRjaCBpbnRlcnJ1cHRzIChjYXVzZWQgYnkgRU9QIGludGVycnVwdCkgKi8KIAkJCQlpZiAoYmFzciAmIEJBU1JfUEhBU0VfTUFUQ0gpCi0JCQkJCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiB1bmtub3duIGludGVycnVwdCwgIgorCQkJCQlkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiB1bmtub3duIGludGVycnVwdCwgIgogCQkJCQkgICAgICAgIkJBU1IgMHgleCwgTVIgMHgleCwgU1IgMHgleFxuIiwKIAkJCQkJICAgICAgIEhPU1ROTywgYmFzciwgTkNSNTM4MF9yZWFkKE1PREVfUkVHKSwKIAkJCQkJICAgICAgIE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSk7CiAJCQkJKHZvaWQpTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJCQkJZHJlZ3MtPmNzciB8PSBDU1JfRE1BX0VOQUJMRTsKKyNlbmRpZgogCQkJfQogCQl9IC8qIGlmICEoU0VMRUNUSU9OIHx8IFBBUklUWSkgKi8KIAkJaGFuZGxlZCA9IDE7CkBAIC0xMzE0LDUzICsxMjYyLDI5IEBACiAJCSAgICAgICAiQkFTUiAweCVYLCBNUiAweCVYLCBTUiAweCV4XG4iLCBIT1NUTk8sIGJhc3IsCiAJCSAgICAgICBOQ1I1MzgwX3JlYWQoTU9ERV9SRUcpLCBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpOwogCQkodm9pZClOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOworI2lmZGVmIFNVTjNfU0NTSV9WTUUKKwkJZHJlZ3MtPmNzciB8PSBDU1JfRE1BX0VOQUJMRTsKKyNlbmRpZgogCX0KIAogCWlmICghZG9uZSkgewogCQlkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBpbiBpbnQgcm91dGluZSwgY2FsbGluZyBtYWluXG4iLCBIT1NUTk8pOwogCQkvKiBQdXQgYSBjYWxsIHRvIE5DUjUzODBfbWFpbigpIG9uIHRoZSBxdWV1ZS4uLiAqLwotCQlxdWV1ZV9tYWluKCk7CisJCXF1ZXVlX21haW4oc2hvc3RfcHJpdihpbnN0YW5jZSkpOwogCX0KIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAotI2lmZGVmIE5DUjUzODBfU1RBVFMKLXN0YXRpYyB2b2lkIGNvbGxlY3Rfc3RhdHMoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEqIGhvc3RkYXRhLCBTY3NpX0NtbmQgKmNtZCkKLXsKLSMgaWZkZWYgTkNSNTM4MF9TVEFUX0xJTUlUCi0JaWYgKHNjc2lfYnVmZmxlbihjbWQpID4gTkNSNTM4MF9TVEFUX0xJTUlUKQotIyBlbmRpZgotCQlzd2l0Y2ggKGNtZC0+Y21uZFswXSkgewotCQljYXNlIFdSSVRFOgotCQljYXNlIFdSSVRFXzY6Ci0JCWNhc2UgV1JJVEVfMTA6Ci0JCQlob3N0ZGF0YS0+dGltZV93cml0ZVtjbWQtPmRldmljZS0+aWRdICs9IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJCS8qaG9zdGRhdGEtPmJ5dGVzX3dyaXRlW2NtZC0+ZGV2aWNlLT5pZF0gKz0gc2NzaV9idWZmbGVuKGNtZCk7Ki8KLQkJCWhvc3RkYXRhLT5wZW5kaW5ndy0tOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVBRDoKLQkJY2FzZSBSRUFEXzY6Ci0JCWNhc2UgUkVBRF8xMDoKLQkJCWhvc3RkYXRhLT50aW1lX3JlYWRbY21kLT5kZXZpY2UtPmlkXSArPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCQkvKmhvc3RkYXRhLT5ieXRlc19yZWFkW2NtZC0+ZGV2aWNlLT5pZF0gKz0gc2NzaV9idWZmbGVuKGNtZCk7Ki8KLQkJCWhvc3RkYXRhLT5wZW5kaW5nci0tOwotCQkJYnJlYWs7Ci0JCX0KLX0KLSNlbmRpZgotCiAvKgotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9zZWxlY3QgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBTY3NpX0NtbmQgKmNtZCwKLSAqCWludCB0YWcpOworICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9zZWxlY3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiAgKgogICogUHVycG9zZSA6IGVzdGFibGlzaGVzIElfVF9MIG9yIElfVF9MX1EgbmV4dXMgZm9yIG5ldyBvciBleGlzdGluZyBjb21tYW5kLAogICoJaW5jbHVkaW5nIEFSQklUUkFUSU9OLCBTRUxFQ1RJT04sIGFuZCBpbml0aWFsIG1lc3NhZ2Ugb3V0IGZvcgogICoJSURFTlRJRlkgYW5kIHF1ZXVlIG1lc3NhZ2VzLgogICoKICAqIElucHV0cyA6IGluc3RhbmNlIC0gaW5zdGFudGlhdGlvbiBvZiB0aGUgNTM4MCBkcml2ZXIgb24gd2hpY2ggdGhpcwotICoJdGFyZ2V0IGxpdmVzLCBjbWQgLSBTQ1NJIGNvbW1hbmQgdG8gZXhlY3V0ZSwgdGFnIC0gc2V0IHRvIFRBR19ORVhUIGZvcgotICoJbmV3IHRhZywgVEFHX05PTkUgZm9yIHVudGFnZ2VkIHF1ZXVlaW5nLCBvdGhlcndpc2Ugc2V0IHRvIHRoZSB0YWcgZm9yCi0gKgl0aGUgY29tbWFuZCB0aGF0IGlzIHByZXNlbnRseSBjb25uZWN0ZWQuCisgKgl0YXJnZXQgbGl2ZXMsIGNtZCAtIFNDU0kgY29tbWFuZCB0byBleGVjdXRlLgogICoKICAqIFJldHVybnMgOiAtMSBpZiBzZWxlY3Rpb24gY291bGQgbm90IGV4ZWN1dGUgZm9yIHNvbWUgcmVhc29uLAogICoJMCBpZiBzZWxlY3Rpb24gc3VjY2VlZGVkIG9yIGZhaWxlZCBiZWNhdXNlIHRoZSB0YXJnZXQKQEAgLTEzODAsNyArMTMwNCw3IEBACiAgKgkJY21kLT5yZXN1bHQgaG9zdCBieXRlIHNldCB0byBESURfQkFEX1RBUkdFVC4KICAqLwogCi1zdGF0aWMgaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBTY3NpX0NtbmQgKmNtZCwgaW50IHRhZykKK3N0YXRpYyBpbnQgTkNSNTM4MF9zZWxlY3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CiAJdW5zaWduZWQgY2hhciB0bXBbM10sIHBoYXNlOwpAQCAtMTU2Miw3ICsxNDg2LDcgQEAKIAkgKiBzZWxlY3Rpb24uCiAJICovCiAKLQl0aW1lb3V0ID0gamlmZmllcyArIDI1OworCXRpbWVvdXQgPSBqaWZmaWVzICsgKDI1MCAqIEhaIC8gMTAwMCk7CiAKIAkvKgogCSAqIFhYWCB2ZXJ5IGludGVyZXN0aW5nIC0gd2UncmUgc2VlaW5nIGEgYm91bmNlIHdoZXJlIHRoZSBCU1kgd2UKQEAgLTE2MTYsOSArMTU0MCw2IEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJY21kLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7Ci0jZW5kaWYKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJY21kX2ZyZWVfdGFnKGNtZCk7CiAjZW5kaWYKQEAgLTE2NzYsNiArMTU5Nyw5IEBACiAjaWZuZGVmIFNVUFBPUlRfVEFHUwogCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gfD0gKDEgPDwgY21kLT5kZXZpY2UtPmx1bik7CiAjZW5kaWYKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJZHJlZ3MtPmNzciB8PSBDU1JfSU5UUjsKKyNlbmRpZgogCiAJaW5pdGlhbGl6ZV9TQ3AoY21kKTsKIApAQCAtMTgyNiw3ICsxNzUwLDcgQEAKICAqIFJldHVybnMgOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCiAgKi8KIAotc3RhdGljIGludCBkb19hYm9ydChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQorc3RhdGljIGludCBkb19hYm9ydChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAl1bnNpZ25lZCBjaGFyIHRtcCwgKm1zZ3B0ciwgcGhhc2U7CiAJaW50IGxlbjsKQEAgLTE4NjEsNyArMTc4NSw3IEBACiAJbXNncHRyID0gJnRtcDsKIAlsZW4gPSAxOwogCXBoYXNlID0gUEhBU0VfTVNHT1VUOwotCU5DUjUzODBfdHJhbnNmZXJfcGlvKGhvc3QsICZwaGFzZSwgJmxlbiwgJm1zZ3B0cik7CisJTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgJm1zZ3B0cik7CiAKIAkvKgogCSAqIElmIHdlIGdvdCBoZXJlLCBhbmQgdGhlIGNvbW1hbmQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwKQEAgLTE4OTksMTcgKzE4MjMsNjIgQEAKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CiAJcmVnaXN0ZXIgaW50IGMgPSAqY291bnQ7CiAJcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBwID0gKnBoYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TVU4zKQorCS8qIHNhbml0eSBjaGVjayAqLworCWlmICghc3VuM19kbWFfc2V0dXBfZG9uZSkgeworCQlwcl9lcnIoInNjc2klZDogdHJhbnNmZXJfZG1hIHdpdGhvdXQgc2V0dXAhXG4iLAorCQkgICAgICAgaW5zdGFuY2UtPmhvc3Rfbm8pOworCQlCVUcoKTsKKwl9CisJaG9zdGRhdGEtPmRtYV9sZW4gPSBjOworCisJZHByaW50ayhOREVCVUdfRE1BLCAic2NzaSVkOiBpbml0aWFsaXppbmcgRE1BIGZvciAlcywgJWQgYnl0ZXMgJXMgJXBcbiIsCisJCWluc3RhbmNlLT5ob3N0X25vLCAocCAmIFNSX0lPKSA/ICJyZWFkaW5nIiA6ICJ3cml0aW5nIiwKKwkJYywgKHAgJiBTUl9JTykgPyAidG8iIDogImZyb20iLCAqZGF0YSk7CisKKwkvKiBuZXRic2QgdHVybnMgb2ZmIGludHMgaGVyZSwgd2h5IG5vdCBiZSBzYWZlIGFuZCBkbyBpdCB0b28gKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBzZW5kIHN0YXJ0IGNoYWluICovCisJc3VuM3Njc2lfZG1hX3N0YXJ0KGMsICpkYXRhKTsKKworCWlmIChwICYgU1JfSU8pIHsKKwkJTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDEpOworCQlOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOworCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgMCk7CisJCU5DUjUzODBfd3JpdGUoTU9ERV9SRUcsCisJCQkgICAgICAoTkNSNTM4MF9yZWFkKE1PREVfUkVHKSB8IE1SX0RNQV9NT0RFIHwgTVJfRU5BQkxFX0VPUF9JTlRSKSk7CisJCU5DUjUzODBfd3JpdGUoU1RBUlRfRE1BX0lOSVRJQVRPUl9SRUNFSVZFX1JFRywgMCk7CisJfSBlbHNlIHsKKwkJTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDApOworCQlOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOworCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0FTU0VSVF9EQVRBKTsKKwkJTkNSNTM4MF93cml0ZShNT0RFX1JFRywKKwkJCSAgICAgIChOQ1I1MzgwX3JlYWQoTU9ERV9SRUcpIHwgTVJfRE1BX01PREUgfCBNUl9FTkFCTEVfRU9QX0lOVFIpKTsKKwkJTkNSNTM4MF93cml0ZShTVEFSVF9ETUFfU0VORF9SRUcsIDApOworCX0KKworI2lmZGVmIFNVTjNfU0NTSV9WTUUKKwlkcmVncy0+Y3NyIHw9IENTUl9ETUFfRU5BQkxFOworI2VuZGlmCisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlzdW4zX2RtYV9hY3RpdmUgPSAxOworCisjZWxzZSAvKiAhZGVmaW5lZChDT05GSUdfU1VOMykgKi8KIAlyZWdpc3RlciB1bnNpZ25lZCBjaGFyICpkID0gKmRhdGE7CiAJdW5zaWduZWQgY2hhciB0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICgodG1wID0gKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFBIQVNFX01BU0spKSAhPSBwKSB7CiAJCSpwaGFzZSA9IHRtcDsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChhdGFyaV9yZWFkX292ZXJydW5zICYmIChwICYgU1JfSU8pKQotCQljIC09IGF0YXJpX3JlYWRfb3ZlcnJ1bnM7CisJaWYgKGhvc3RkYXRhLT5yZWFkX292ZXJydW5zICYmIChwICYgU1JfSU8pKQorCQljIC09IGhvc3RkYXRhLT5yZWFkX292ZXJydW5zOwogCiAJZHByaW50ayhOREVCVUdfRE1BLCAic2NzaSVkOiBpbml0aWFsaXppbmcgRE1BIGZvciAlcywgJWQgYnl0ZXMgJXMgJXBcbiIsCiAJCSAgIEhPU1ROTywgKHAgJiBTUl9JTykgPyAicmVhZGluZyIgOiAid3JpdGluZyIsCkBAIC0xOTIxLDcgKzE4OTAsNyBAQAogCU5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UgfCBNUl9ETUFfTU9ERSB8IE1SX0VOQUJMRV9FT1BfSU5UUiB8IE1SX01PTklUT1JfQlNZKTsKICNlbmRpZiAvKiBkZWYgUkVBTF9ETUEgICovCiAKLQlpZiAoSVNfQV9UVCgpKSB7CisJaWYgKCEoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19MQVRFX0RNQV9TRVRVUCkpIHsKIAkJLyogT24gdGhlIE1lZHVzYSwgaXQgaXMgYSBtdXN0IHRvIGluaXRpYWxpemUgdGhlIERNQSBiZWZvcmUKIAkJICogc3RhcnRpbmcgdGhlIE5DUi4gVGhpcyBpcyBhbHNvIHRoZSBjbGVhbmVyIHdheSBmb3IgdGhlIFRULgogCQkgKi8KQEAgLTE5MzksNyArMTkwOCw3IEBACiAJCU5DUjUzODBfd3JpdGUoU1RBUlRfRE1BX1NFTkRfUkVHLCAwKTsKIAl9CiAKLQlpZiAoIUlTX0FfVFQoKSkgeworCWlmIChob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX0xBVEVfRE1BX1NFVFVQKSB7CiAJCS8qIE9uIHRoZSBGYWxjb24sIHRoZSBETUEgc2V0dXAgbXVzdCBiZSBkb25lIGFmdGVyIHRoZSBsYXN0ICovCiAJCS8qIE5DUiBhY2Nlc3MsIGVsc2UgdGhlIERNQSBzZXR1cCBnZXRzIHRyYXNoZWQhCiAJCSAqLwpAQCAtMTk0OSw2ICsxOTE4LDggQEAKIAkJCU5DUjUzODBfZG1hX3dyaXRlX3NldHVwKGluc3RhbmNlLCBkLCBjKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KKyNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfU1VOMykgKi8KKwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIGRlZmluZWQoUkVBTF9ETUEpICovCkBAIC0xOTgyLDcgKzE5NTMsMTEgQEAKICNlbmRpZgogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CiAJdW5zaWduZWQgY2hhciBwaGFzZSwgdG1wLCBleHRlbmRlZF9tc2dbMTBdLCBvbGRfcGhhc2UgPSAweGZmOwotCVNjc2lfQ21uZCAqY21kID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkOworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQ7CisKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJZHJlZ3MtPmNzciB8PSBDU1JfSU5UUjsKKyNlbmRpZgogCiAJd2hpbGUgKDEpIHsKIAkJdG1wID0gTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpOwpAQCAtMTk5Myw2ICsxOTY4LDMzIEBACiAJCQkJb2xkX3BoYXNlID0gcGhhc2U7CiAJCQkJTkNSNTM4MF9kcHJpbnRfcGhhc2UoTkRFQlVHX0lORk9STUFUSU9OLCBpbnN0YW5jZSk7CiAJCQl9CisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykKKwkJCWlmIChwaGFzZSA9PSBQSEFTRV9DTURPVVQpIHsKKyNpZiBkZWZpbmVkKFJFQUxfRE1BKQorCQkJCXZvaWQgKmQ7CisJCQkJdW5zaWduZWQgbG9uZyBjb3VudDsKKworCQkJCWlmICghY21kLT5TQ3AudGhpc19yZXNpZHVhbCAmJiBjbWQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsKSB7CisJCQkJCWNvdW50ID0gY21kLT5TQ3AuYnVmZmVyLT5sZW5ndGg7CisJCQkJCWQgPSBzZ192aXJ0KGNtZC0+U0NwLmJ1ZmZlcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJY291bnQgPSBjbWQtPlNDcC50aGlzX3Jlc2lkdWFsOworCQkJCQlkID0gY21kLT5TQ3AucHRyOworCQkJCX0KKwkJCQkvKiB0aGlzIGNvbW1hbmQgc2V0dXAgZm9yIGRtYSB5ZXQ/ICovCisJCQkJaWYgKChjb3VudCA+PSBETUFfTUlOX1NJWkUpICYmIChzdW4zX2RtYV9zZXR1cF9kb25lICE9IGNtZCkpIHsKKwkJCQkJaWYgKGNtZC0+cmVxdWVzdC0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpIHsKKwkJCQkJCXN1bjNzY3NpX2RtYV9zZXR1cChkLCBjb3VudCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICBycV9kYXRhX2RpcihjbWQtPnJlcXVlc3QpKTsKKwkJCQkJCXN1bjNfZG1hX3NldHVwX2RvbmUgPSBjbWQ7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJCQkJZHJlZ3MtPmNzciB8PSBDU1JfSU5UUjsKKyNlbmRpZgorCQkJfQorI2VuZGlmIC8qIENPTkZJR19TVU4zICovCiAKIAkJCWlmIChzaW5rICYmIChwaGFzZSAhPSBQSEFTRV9NU0dPVVQpKSB7CiAJCQkJTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIFBIQVNFX1NSX1RPX1RDUih0bXApKTsKQEAgLTIwNTQsOCArMjA1NiwxMSBAQAogCQkJCSAqLwogCiAjaWYgZGVmaW5lZChSRUFMX0RNQSkKLQkJCQlpZiAoIWNtZC0+ZGV2aWNlLT5ib3JrZW4gJiYKLQkJCQkgICAgKHRyYW5zZmVyc2l6ZSA9IE5DUjUzODBfZG1hX3hmZXJfbGVuKGluc3RhbmNlLGNtZCxwaGFzZSkpID4gMzEpIHsKKwkJCQlpZiAoCisjaWYgIWRlZmluZWQoQ09ORklHX1NVTjMpCisJCQkJICAgICFjbWQtPmRldmljZS0+Ym9ya2VuICYmCisjZW5kaWYKKwkJCQkgICAgKHRyYW5zZmVyc2l6ZSA9IE5DUjUzODBfZG1hX3hmZXJfbGVuKGluc3RhbmNlLCBjbWQsIHBoYXNlKSkgPj0gRE1BX01JTl9TSVpFKSB7CiAJCQkJCWxlbiA9IHRyYW5zZmVyc2l6ZTsKIAkJCQkJY21kLT5TQ3AucGhhc2UgPSBwaGFzZTsKIAkJCQkJaWYgKE5DUjUzODBfdHJhbnNmZXJfZG1hKGluc3RhbmNlLCAmcGhhc2UsCkBAIC0yMDY0LDkgKzIwNjksOCBAQAogCQkJCQkJICogSWYgdGhlIHdhdGNoZG9nIHRpbWVyIGZpcmVzLCBhbGwgZnV0dXJlCiAJCQkJCQkgKiBhY2Nlc3NlcyB0byB0aGlzIGRldmljZSB3aWxsIHVzZSB0aGUKIAkJCQkJCSAqIHBvbGxlZC1JTy4gKi8KLQkJCQkJCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBzd2l0Y2hpbmcgdGFyZ2V0ICVkICIKLQkJCQkJCQkgICAibHVuICVsbHUgdG8gc2xvdyBoYW5kc2hha2VcbiIsIEhPU1ROTywKLQkJCQkJCQkgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOworCQkJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkJCQkJInN3aXRjaGluZyB0byBzbG93IGhhbmRzaGFrZVxuIik7CiAJCQkJCQljbWQtPmRldmljZS0+Ym9ya2VuID0gMTsKIAkJCQkJCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8CiAJCQkJCQkJSUNSX0FTU0VSVF9BVE4pOwpAQCAtMjA5Miw2ICsyMDk2LDExIEBACiAJCQkJCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsCiAJCQkJCQkJICAgICAoaW50ICopJmNtZC0+U0NwLnRoaXNfcmVzaWR1YWwsCiAJCQkJCQkJICAgICAodW5zaWduZWQgY2hhciAqKikmY21kLT5TQ3AucHRyKTsKKyNpZiBkZWZpbmVkKENPTkZJR19TVU4zKSAmJiBkZWZpbmVkKFJFQUxfRE1BKQorCQkJCS8qIGlmIHdlIGhhZCBpbnRlbmRlZCB0byBkbWEgdGhhdCBjb21tYW5kIGNsZWFyIGl0ICovCisJCQkJaWYgKHN1bjNfZG1hX3NldHVwX2RvbmUgPT0gY21kKQorCQkJCQlzdW4zX2RtYV9zZXR1cF9kb25lID0gTlVMTDsKKyNlbmRpZgogCQkJCWJyZWFrOwogCQkJY2FzZSBQSEFTRV9NU0dJTjoKIAkJCQlsZW4gPSAxOwpAQCAtMjE0NSw5ICsyMTU0LDYgQEAKIAkJCQkJZHByaW50ayhOREVCVUdfTElOS0VELCAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVsbHUgbGlua2VkIHJlcXVlc3QgIgogCQkJCQkJICAgImRvbmUsIGNhbGxpbmcgc2NzaV9kb25lKCkuXG4iLAogCQkJCQkJICAgSE9TVE5PLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQkJCQkJY29sbGVjdF9zdGF0cyhob3N0ZGF0YSwgY21kKTsKLSNlbmRpZgogCQkJCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQkJCQljbWQgPSBob3N0ZGF0YS0+Y29ubmVjdGVkOwogCQkJCQlicmVhazsKQEAgLTIxNTYsMTEgKzIxNjIsMTIgQEAKIAkJCQljYXNlIENPTU1BTkRfQ09NUExFVEU6CiAJCQkJCS8qIEFjY2VwdCBtZXNzYWdlIGJ5IGNsZWFyaW5nIEFDSyAqLwogCQkJCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCQkJCQkvKiArK2d1ZW50aGVyOiBwb3NzaWJsZSByYWNlIHdpdGggRmFsY29uIGxvY2tpbmcgKi8KLQkJCQkJZmFsY29uX2RvbnRfcmVsZWFzZSsrOwotCQkJCQlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKIAkJCQkJZHByaW50ayhOREVCVUdfUVVFVUVTLCAic2NzaSVkOiBjb21tYW5kIGZvciB0YXJnZXQgJWQsIGx1biAlbGx1ICIKIAkJCQkJCSAgImNvbXBsZXRlZFxuIiwgSE9TVE5PLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOworCisJCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCQkJaG9zdGRhdGEtPnJldGFpbl9kbWFfaW50cisrOworCQkJCQlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJCQkJY21kX2ZyZWVfdGFnKGNtZCk7CiAJCQkJCWlmIChzdGF0dXNfYnl0ZShjbWQtPlNDcC5TdGF0dXMpID09IFFVRVVFX0ZVTEwpIHsKQEAgLTIxNzIsNyArMjE3OSw3IEBACiAJCQkJCQkgKi8KIAkJCQkJCS8qICsrQW5kcmVhczogdGhlIG1pZCBsZXZlbCBjb2RlIGtub3dzIGFib3V0CiAJCQkJCQkgICBRVUVVRV9GVUxMIG5vdy4gKi8KLQkJCQkJCVRBR19BTExPQyAqdGEgPSAmVGFnQWxsb2NbY21kLT5kZXZpY2UtPmlkXVtjbWQtPmRldmljZS0+bHVuXTsKKwkJCQkJCXN0cnVjdCB0YWdfYWxsb2MgKnRhID0gJmhvc3RkYXRhLT5UYWdBbGxvY1tzY21kX2lkKGNtZCldW2NtZC0+ZGV2aWNlLT5sdW5dOwogCQkJCQkJZHByaW50ayhOREVCVUdfVEFHUywgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlbGx1IHJldHVybmVkICIKIAkJCQkJCQkgICAiUVVFVUVfRlVMTCBhZnRlciAlZCBjb21tYW5kc1xuIiwKIAkJCQkJCQkgICBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwKQEAgLTIyMDcsNyArMjIxNCw2IEBACiAJCQkJCWVsc2UgaWYgKHN0YXR1c19ieXRlKGNtZC0+U0NwLlN0YXR1cykgIT0gR09PRCkKIAkJCQkJCWNtZC0+cmVzdWx0ID0gKGNtZC0+cmVzdWx0ICYgMHgwMGZmZmYpIHwgKERJRF9FUlJPUiA8PCAxNik7CiAKLSNpZmRlZiBBVVRPU0VOU0UKIAkJCQkJaWYgKChjbWQtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgJiYKIAkJCQkJCWhvc3RkYXRhLT5zZXMuY21kX2xlbikgewogCQkJCQkJc2NzaV9laF9yZXN0b3JlX2NtbmQoY21kLCAmaG9zdGRhdGEtPnNlcyk7CkBAIC0yMjIwLDIyICsyMjI2LDE3IEBACiAKIAkJCQkJCWRwcmludGsoTkRFQlVHX0FVVE9TRU5TRSwgInNjc2klZDogcGVyZm9ybWluZyByZXF1ZXN0IHNlbnNlXG4iLCBIT1NUTk8pOwogCi0JCQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCQkJCQlMSVNUKGNtZCxob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwogCQkJCQkJU0VUX05FWFQoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCQkJCQkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gKFNjc2lfQ21uZCAqKSBjbWQ7Ci0JCQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQkJCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBjbWQ7CiAJCQkJCQlkcHJpbnRrKE5ERUJVR19RVUVVRVMsICJzY3NpJWQ6IFJFUVVFU1QgU0VOU0UgYWRkZWQgdG8gaGVhZCBvZiAiCiAJCQkJCQkJICAiaXNzdWUgcXVldWVcbiIsIEhfTk8oY21kKSk7Ci0JCQkJCX0gZWxzZQotI2VuZGlmIC8qIGRlZiBBVVRPU0VOU0UgKi8KLQkJCQkJewotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQkJCQkJCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7Ci0jZW5kaWYKKwkJCQkJfSBlbHNlIHsKIAkJCQkJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCQkJCX0KIAorCQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAkJCQkJTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwogCQkJCQkvKgogCQkJCQkgKiBSZXN0b3JlIHBoYXNlIGJpdHMgdG8gMCBzbyBhbiBpbnRlcnJ1cHRlZCBzZWxlY3Rpb24sCkBAIC0yMjQ2LDEyICsyMjQ3LDE0IEBACiAJCQkJCXdoaWxlICgoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfQlNZKSAmJiAhaG9zdGRhdGEtPmNvbm5lY3RlZCkKIAkJCQkJCWJhcnJpZXIoKTsKIAotCQkJCQlmYWxjb25fZG9udF9yZWxlYXNlLS07CisJCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCQkJaG9zdGRhdGEtPnJldGFpbl9kbWFfaW50ci0tOwogCQkJCQkvKiArK3JvbWFuOiBGb3IgRmFsY29uIFNDU0ksIHJlbGVhc2UgdGhlIGxvY2sgb24gdGhlCiAJCQkJCSAqIFNULURNQSBoZXJlIGlmIG5vIG90aGVyIGNvbW1hbmRzIGFyZSB3YWl0aW5nIG9uIHRoZQogCQkJCQkgKiBkaXNjb25uZWN0ZWQgcXVldWUuCiAJCQkJCSAqLwotCQkJCQlmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKGhvc3RkYXRhKTsKKwkJCQkJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKKwkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJCQlyZXR1cm47CiAJCQkJY2FzZSBNRVNTQUdFX1JFSkVDVDoKIAkJCQkJLyogQWNjZXB0IG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCkBAIC0yMzAzLDYgKzIzMDYsOSBAQAogCQkJCQkvKiBXYWl0IGZvciBidXMgZnJlZSB0byBhdm9pZCBuYXN0eSB0aW1lb3V0cyAqLwogCQkJCQl3aGlsZSAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX0JTWSkgJiYgIWhvc3RkYXRhLT5jb25uZWN0ZWQpCiAJCQkJCQliYXJyaWVyKCk7CisjaWZkZWYgU1VOM19TQ1NJX1ZNRQorCQkJCQlkcmVncy0+Y3NyIHw9IENTUl9ETUFfRU5BQkxFOworI2VuZGlmCiAJCQkJCXJldHVybjsKIAkJCQkJLyoKIAkJCQkJICogVGhlIFNDU0kgZGF0YSBwb2ludGVyIGlzICpJTVBMSUNJVExZKiBzYXZlZCBvbiBhIGRpc2Nvbm5lY3QKQEAgLTIzODQsMjAgKzIzOTAsMTggQEAKIAkJCQkJICovCiAJCQkJZGVmYXVsdDoKIAkJCQkJaWYgKCF0bXApIHsKLQkJCQkJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IHJlamVjdGluZyBtZXNzYWdlICIsIEhPU1ROTyk7CisJCQkJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQ6IHJlamVjdGluZyBtZXNzYWdlICIsCisJCQkJCQkgICAgICAgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCQkJCQkJc3BpX3ByaW50X21zZyhleHRlbmRlZF9tc2cpOwogCQkJCQkJcHJpbnRrKCJcbiIpOwogCQkJCQl9IGVsc2UgaWYgKHRtcCAhPSBFWFRFTkRFRF9NRVNTQUdFKQotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcmVqZWN0aW5nIHVua25vd24gIgotCQkJCQkJICAgICAgICJtZXNzYWdlICUwMnggZnJvbSB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLAotCQkJCQkJICAgICAgIEhPU1ROTywgdG1wLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOworCQkJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkJCQkgICAgICAgICAgICAicmVqZWN0aW5nIHVua25vd24gbWVzc2FnZSAlMDJ4XG4iLAorCQkJCQkJICAgICAgICAgICAgdG1wKTsKIAkJCQkJZWxzZQotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcmVqZWN0aW5nIHVua25vd24gIgotCQkJCQkJICAgICAgICJleHRlbmRlZCBtZXNzYWdlICIKLQkJCQkJCSAgICAgICAiY29kZSAlMDJ4LCBsZW5ndGggJWQgZnJvbSB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLAotCQkJCQkJICAgICAgIEhPU1ROTywgZXh0ZW5kZWRfbXNnWzFdLCBleHRlbmRlZF9tc2dbMF0sCi0JCQkJCQkgICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQorCQkJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkJCQkgICAgICAgICAgICAicmVqZWN0aW5nIHVua25vd24gZXh0ZW5kZWQgbWVzc2FnZSBjb2RlICUwMngsIGxlbmd0aCAlZFxuIiwKKwkJCQkJCSAgICAgICAgICAgIGV4dGVuZGVkX21zZ1sxXSwgZXh0ZW5kZWRfbXNnWzBdKTsKIAogCQkJCQltc2dvdXQgPSBNRVNTQUdFX1JFSkVDVDsKIAkJCQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9BVE4pOwpAQCAtMjQxMCw2ICsyNDE0LDcgQEAKIAkJCQlob3N0ZGF0YS0+bGFzdF9tZXNzYWdlID0gbXNnb3V0OwogCQkJCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKIAkJCQlpZiAobXNnb3V0ID09IEFCT1JUKSB7CisJCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJCQkJY21kX2ZyZWVfdGFnKGNtZCk7CiAjZWxzZQpAQCAtMjQxNywxMiArMjQyMiwxMCBAQAogI2VuZGlmCiAJCQkJCWhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwogCQkJCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JCQkJCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7Ci0jZW5kaWYKLQkJCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKIAkJCQkJTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkJCQlmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKGhvc3RkYXRhKTsKKwkJCQkJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKKwkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQkJCQlyZXR1cm47CiAJCQkJfQogCQkJCW1zZ291dCA9IE5PUDsKQEAgLTI0NTUsNyArMjQ1OCw3IEBACiAgKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9yZXNlbGVjdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiAgKgogICogUHVycG9zZSA6IGRvZXMgcmVzZWxlY3Rpb24sIGluaXRpYWxpemluZyB0aGUgaW5zdGFuY2UtPmNvbm5lY3RlZAotICoJZmllbGQgdG8gcG9pbnQgdG8gdGhlIFNjc2lfQ21uZCBmb3Igd2hpY2ggdGhlIElfVF9MIG9yIElfVF9MX1EKKyAqCWZpZWxkIHRvIHBvaW50IHRvIHRoZSBzY3NpX2NtbmQgZm9yIHdoaWNoIHRoZSBJX1RfTCBvciBJX1RfTF9RCiAgKgluZXh1cyBoYXMgYmVlbiByZWVzdGFibGlzaGVkLAogICoKICAqIElucHV0cyA6IGluc3RhbmNlIC0gdGhpcyBpbnN0YW5jZSBvZiB0aGUgTkNSNTM4MC4KQEAgLTI0NjMsMTkgKzI0NjYsMjEgQEAKICAqLwogCiAKKy8qIGl0IG1pZ2h0IGV2ZW50dWFsbHkgcHJvdmUgbmVjZXNzYXJ5IHRvIGRvIGEgZG1hIHNldHVwIG9uCisgICByZXNlbGVjdGlvbiwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBuZWVkZWQgbm93IC0tIHNhbSAqLworCiBzdGF0aWMgdm9pZCBOQ1I1MzgwX3Jlc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQogewogCVNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKIAl1bnNpZ25lZCBjaGFyIHRhcmdldF9tYXNrOwotCXVuc2lnbmVkIGNoYXIgbHVuLCBwaGFzZTsKLQlpbnQgbGVuOworCXVuc2lnbmVkIGNoYXIgbHVuOwogI2lmZGVmIFNVUFBPUlRfVEFHUwogCXVuc2lnbmVkIGNoYXIgdGFnOwogI2VuZGlmCiAJdW5zaWduZWQgY2hhciBtc2dbM107Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLQlTY3NpX0NtbmQgKnRtcCA9IE5VTEwsICpwcmV2OwotLyoJdW5zaWduZWQgbG9uZyBmbGFnczsgKi8KKwlpbnQgX19tYXliZV91bnVzZWQgbGVuOworCXVuc2lnbmVkIGNoYXIgX19tYXliZV91bnVzZWQgKmRhdGEsIF9fbWF5YmVfdW51c2VkIHBoYXNlOworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcCA9IE5VTEwsICpwcmV2OwogCiAJLyoKIAkgKiBEaXNhYmxlIGFyYml0cmF0aW9uLCBldGMuIHNpbmNlIHRoZSBob3N0IGFkYXB0ZXIgb2J2aW91c2x5CkBAIC0yNTExLDEwICsyNTE2LDE4IEBACiAJd2hpbGUgKCEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSkKIAkJOwogCisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykgJiYgZGVmaW5lZChSRUFMX0RNQSkKKwkvKiBhY2tub3dsZWRnZSB0b2dnbGUgdG8gTVNHSU4gKi8KKwlOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywgUEhBU0VfU1JfVE9fVENSKFBIQVNFX01TR0lOKSk7CisKKwkvKiBwZWVrIGF0IHRoZSBieXRlIHdpdGhvdXQgcmVhbGx5IGhpdHRpbmcgdGhlIGJ1cyAqLworCW1zZ1swXSA9IE5DUjUzODBfcmVhZChDVVJSRU5UX1NDU0lfREFUQV9SRUcpOworI2Vsc2UKIAlsZW4gPSAxOwogCWRhdGEgPSBtc2c7CiAJcGhhc2UgPSBQSEFTRV9NU0dJTjsKIAlOQ1I1MzgwX3RyYW5zZmVyX3BpbyhpbnN0YW5jZSwgJnBoYXNlLCAmbGVuLCAmZGF0YSk7CisjZW5kaWYKIAogCWlmICghKG1zZ1swXSAmIDB4ODApKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IGV4cGVjdGluZyBJREVOVElGWSBtZXNzYWdlLCBnb3QgIiwgSE9TVE5PKTsKQEAgLTI1MjQsMTMgKzI1MzcsMTMgQEAKIAl9CiAJbHVuID0gKG1zZ1swXSAmIDB4MDcpOwogCi0jaWZkZWYgU1VQUE9SVF9UQUdTCisjaWYgZGVmaW5lZChTVVBQT1JUX1RBR1MpICYmICFkZWZpbmVkKENPTkZJR19TVU4zKQogCS8qIElmIHRoZSBwaGFzZSBpcyBzdGlsbCBNU0dJTiwgdGhlIHRhcmdldCB3YW50cyB0byBzZW5kIHNvbWUgbW9yZQogCSAqIG1lc3NhZ2VzLiBJbiBjYXNlIGl0IHN1cHBvcnRzIHRhZ2dlZCBxdWV1aW5nLCB0aGlzIGlzIHByb2JhYmx5IGEKIAkgKiBTSU1QTEVfUVVFVUVfVEFHIGZvciB0aGUgSV9UX0xfUSBuZXh1cy4KIAkgKi8KIAl0YWcgPSBUQUdfTk9ORTsKLQlpZiAocGhhc2UgPT0gUEhBU0VfTVNHSU4gJiYgc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nKSB7CisJaWYgKHBoYXNlID09IFBIQVNFX01TR0lOICYmIChob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX1RBR0dFRF9RVUVVSU5HKSkgewogCQkvKiBBY2NlcHQgcHJldmlvdXMgSURFTlRJRlkgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KIAkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKIAkJbGVuID0gMjsKQEAgLTI1NDgsMTUgKzI1NjEsMTMgQEAKIAkgKiBqdXN0IHJlZXN0YWJsaXNoZWQsIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlLgogCSAqLwogCi0JZm9yICh0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUsIHByZXYgPSBOVUxMOworCWZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSwgcHJldiA9IE5VTEw7CiAJICAgICB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IE5FWFQodG1wKSkgewogCQlpZiAoKHRhcmdldF9tYXNrID09ICgxIDw8IHRtcC0+ZGV2aWNlLT5pZCkpICYmIChsdW4gPT0gdG1wLT5kZXZpY2UtPmx1bikKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJICAgICYmICh0YWcgPT0gdG1wLT50YWcpCiAjZW5kaWYKIAkJICAgICkgewotCQkJLyogKytndWVudGhlcjogcHJldmVudCByYWNlIHdpdGggZmFsY29uX3JlbGVhc2VfbG9jayAqLwotCQkJZmFsY29uX2RvbnRfcmVsZWFzZSsrOwogCQkJaWYgKHByZXYpIHsKIAkJCQlSRU1PVkUocHJldiwgTkVYVChwcmV2KSwgdG1wLCBORVhUKHRtcCkpOwogCQkJCVNFVF9ORVhUKHByZXYsIE5FWFQodG1wKSk7CkBAIC0yNTg4LDI2ICsyNTk5LDY3IEBACiAJCXJldHVybjsKIAl9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TVU4zKSAmJiBkZWZpbmVkKFJFQUxfRE1BKQorCS8qIGVuZ2FnZSBkbWEgc2V0dXAgZm9yIHRoZSBjb21tYW5kIHdlIGp1c3Qgc2F3ICovCisJeworCQl2b2lkICpkOworCQl1bnNpZ25lZCBsb25nIGNvdW50OworCisJCWlmICghdG1wLT5TQ3AudGhpc19yZXNpZHVhbCAmJiB0bXAtPlNDcC5idWZmZXJzX3Jlc2lkdWFsKSB7CisJCQljb3VudCA9IHRtcC0+U0NwLmJ1ZmZlci0+bGVuZ3RoOworCQkJZCA9IHNnX3ZpcnQodG1wLT5TQ3AuYnVmZmVyKTsKKwkJfSBlbHNlIHsKKwkJCWNvdW50ID0gdG1wLT5TQ3AudGhpc19yZXNpZHVhbDsKKwkJCWQgPSB0bXAtPlNDcC5wdHI7CisJCX0KKwkJLyogc2V0dXAgdGhpcyBjb21tYW5kIGZvciBkbWEgaWYgbm90IGFscmVhZHkgKi8KKwkJaWYgKChjb3VudCA+PSBETUFfTUlOX1NJWkUpICYmIChzdW4zX2RtYV9zZXR1cF9kb25lICE9IHRtcCkpIHsKKwkJCXN1bjNzY3NpX2RtYV9zZXR1cChkLCBjb3VudCwgcnFfZGF0YV9kaXIodG1wLT5yZXF1ZXN0KSk7CisJCQlzdW4zX2RtYV9zZXR1cF9kb25lID0gdG1wOworCQl9CisJfQorCisJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9BQ0spOworI2VuZGlmCisKIAkvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KIAlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwogCisjaWYgZGVmaW5lZChTVVBQT1JUX1RBR1MpICYmIGRlZmluZWQoQ09ORklHX1NVTjMpCisJLyogSWYgdGhlIHBoYXNlIGlzIHN0aWxsIE1TR0lOLCB0aGUgdGFyZ2V0IHdhbnRzIHRvIHNlbmQgc29tZSBtb3JlCisJICogbWVzc2FnZXMuIEluIGNhc2UgaXQgc3VwcG9ydHMgdGFnZ2VkIHF1ZXVpbmcsIHRoaXMgaXMgcHJvYmFibHkgYQorCSAqIFNJTVBMRV9RVUVVRV9UQUcgZm9yIHRoZSBJX1RfTF9RIG5leHVzLgorCSAqLworCXRhZyA9IFRBR19OT05FOworCWlmIChwaGFzZSA9PSBQSEFTRV9NU0dJTiAmJiBzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcpIHsKKwkJLyogQWNjZXB0IHByZXZpb3VzIElERU5USUZZIG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCisJCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7CisJCWxlbiA9IDI7CisJCWRhdGEgPSBtc2cgKyAxOworCQlpZiAoIU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKSAmJgorCQkgICAgbXNnWzFdID09IFNJTVBMRV9RVUVVRV9UQUcpCisJCQl0YWcgPSBtc2dbMl07CisJCWRwcmludGsoTkRFQlVHX1RBR1MsICJzY3NpJWQ6IHRhcmdldCBtYXNrICUwMngsIGx1biAlZCBzZW50IHRhZyAlZCBhdCByZXNlbGVjdGlvblxuIgorCQkJSE9TVE5PLCB0YXJnZXRfbWFzaywgbHVuLCB0YWcpOworCX0KKyNlbmRpZgorCiAJaG9zdGRhdGEtPmNvbm5lY3RlZCA9IHRtcDsKIAlkcHJpbnRrKE5ERUJVR19SRVNFTEVDVElPTiwgInNjc2klZDogbmV4dXMgZXN0YWJsaXNoZWQsIHRhcmdldCA9ICVkLCBsdW4gPSAlbGx1LCB0YWcgPSAlZFxuIiwKIAkJICAgSE9TVE5PLCB0bXAtPmRldmljZS0+aWQsIHRtcC0+ZGV2aWNlLT5sdW4sIHRtcC0+dGFnKTsKLQlmYWxjb25fZG9udF9yZWxlYXNlLS07CiB9CiAKIAogLyoKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYWJvcnQgKFNjc2lfQ21uZCAqY21kKQorICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9hYm9ydCAoc3RydWN0IHNjc2lfY21uZCAqY21kKQogICoKICAqIFB1cnBvc2UgOiBhYm9ydCBhIGNvbW1hbmQKICAqCi0gKiBJbnB1dHMgOiBjbWQgLSB0aGUgU2NzaV9DbW5kIHRvIGFib3J0LCBjb2RlIC0gY29kZSB0byBzZXQgdGhlCisgKiBJbnB1dHMgOiBjbWQgLSB0aGUgc2NzaV9jbW5kIHRvIGFib3J0LCBjb2RlIC0gY29kZSB0byBzZXQgdGhlCiAgKglob3N0IGJ5dGUgb2YgdGhlIHJlc3VsdCBmaWVsZCB0bywgaWYgemVybyBESURfQUJPUlRFRCBpcwogICoJdXNlZC4KICAqCi0gKiBSZXR1cm5zIDogMCAtIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKiBSZXR1cm5zIDogU1VDQ0VTUyAtIHN1Y2Nlc3MsIEZBSUxFRCBvbiBmYWlsdXJlLgogICoKICAqIFhYWCAtIHRoZXJlIGlzIG5vIHdheSB0byBhYm9ydCB0aGUgY29tbWFuZCB0aGF0IGlzIGN1cnJlbnRseQogICoJIGNvbm5lY3RlZCwgeW91IGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuICBJZiB0aGlzIGlzCkBAIC0yNjE2LDI0ICsyNjY4LDE5IEBACiAgKi8KIAogc3RhdGljCi1pbnQgTkNSNTM4MF9hYm9ydChTY3NpX0NtbmQgKmNtZCkKK2ludCBOQ1I1MzgwX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCVNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKLQlTY3NpX0NtbmQgKnRtcCwgKipwcmV2OworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcCwgKipwcmV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogYWJvcnRpbmcgY29tbWFuZFxuIiwgSE9TVE5PKTsKLQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKKwlzY21kX3ByaW50ayhLRVJOX05PVElDRSwgY21kLCAiYWJvcnRpbmcgY29tbWFuZFxuIik7CiAKIAlOQ1I1MzgwX3ByaW50X3N0YXR1cyhpbnN0YW5jZSk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQlpZiAoIUlTX0FfVFQoKSAmJiAhZmFsY29uX2dvdF9sb2NrKQotCQlwcmludGsoS0VSTl9FUlIgInNjc2klZDogISFCSU5HTyEhIEZhbGNvbiBoYXMgbm8gbG9jayBpbiBOQ1I1MzgwX2Fib3J0XG4iLAotCQkgICAgICAgSE9TVE5PKTsKLQogCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiBhYm9ydCBjYWxsZWQgYmFzciAweCUwMngsIHNyIDB4JTAyeFxuIiwgSE9TVE5PLAogCQkgICAgTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRyksCiAJCSAgICBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpOwpAQCAtMjY3NCwxMiArMjcyMSwxMiBAQAogI2Vsc2UKIAkJCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJj0gfigxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwogI2VuZGlmCisJCQltYXliZV9yZWxlYXNlX2RtYV9pcnEoaW5zdGFuY2UpOwogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKLQkJCWZhbGNvbl9yZWxlYXNlX2xvY2tfaWZfcG9zc2libGUoaG9zdGRhdGEpOwogCQkJcmV0dXJuIFNVQ0NFU1M7CiAJCX0gZWxzZSB7Ci0vKgkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgKi8KKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCXByaW50aygic2NzaSVkOiBhYm9ydCBvZiBjb25uZWN0ZWQgY29tbWFuZCBmYWlsZWQhXG4iLCBIT1NUTk8pOwogCQkJcmV0dXJuIEZBSUxFRDsKIAkJfQpAQCAtMjY5MCwyMSArMjczNywyMSBAQAogCSAqIENhc2UgMiA6IElmIHRoZSBjb21tYW5kIGhhc24ndCBiZWVuIGlzc3VlZCB5ZXQsIHdlIHNpbXBseSByZW1vdmUgaXQKIAkgKgkgICAgZnJvbSB0aGUgaXNzdWUgcXVldWUuCiAJICovCi0JZm9yIChwcmV2ID0gKFNjc2lfQ21uZCAqKikmKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSksCi0JICAgICB0bXAgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOworCWZvciAocHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSYoaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKSwKKwkgICAgIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOwogCSAgICAgdG1wOyBwcmV2ID0gTkVYVEFERFIodG1wKSwgdG1wID0gTkVYVCh0bXApKSB7CiAJCWlmIChjbWQgPT0gdG1wKSB7CiAJCQlSRU1PVkUoNSwgKnByZXYsIHRtcCwgTkVYVCh0bXApKTsKIAkJCSgqcHJldikgPSBORVhUKHRtcCk7CiAJCQlTRVRfTkVYVCh0bXAsIE5VTEwpOwogCQkJdG1wLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CisJCQltYXliZV9yZWxlYXNlX2RtYV9pcnEoaW5zdGFuY2UpOwogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IGFib3J0IHJlbW92ZWQgY29tbWFuZCBmcm9tIGlzc3VlIHF1ZXVlLlxuIiwKIAkJCQkgICAgSE9TVE5PKTsKIAkJCS8qIFRhZ2dlZCBxdWV1aW5nIG5vdGU6IG5vIHRhZyB0byBmcmVlIGhlcmUsIGhhc24ndCBiZWVuIGFzc2lnbmVkCiAJCQkgKiB5ZXQuLi4gKi8KIAkJCXRtcC0+c2NzaV9kb25lKHRtcCk7Ci0JCQlmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKGhvc3RkYXRhKTsKIAkJCXJldHVybiBTVUNDRVNTOwogCQl9CiAJfQpAQCAtMjc1MSwxMyArMjc5OCwxMyBAQAogCSAqIGl0IGZyb20gdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZS4KIAkgKi8KIAotCWZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOyB0bXA7CisJZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOyB0bXA7CiAJICAgICB0bXAgPSBORVhUKHRtcCkpIHsKIAkJaWYgKGNtZCA9PSB0bXApIHsKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiBhYm9ydGluZyBkaXNjb25uZWN0ZWQgY29tbWFuZC5cbiIsIEhPU1ROTyk7CiAKLQkJCWlmIChOQ1I1MzgwX3NlbGVjdChpbnN0YW5jZSwgY21kLCAoaW50KWNtZC0+dGFnKSkKKwkJCWlmIChOQ1I1MzgwX3NlbGVjdChpbnN0YW5jZSwgY21kKSkKIAkJCQlyZXR1cm4gRkFJTEVEOwogCiAJCQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogbmV4dXMgcmVlc3RhYmxpc2hlZC5cbiIsIEhPU1ROTyk7CkBAIC0yNzY1LDggKzI4MTIsOCBAQAogCQkJZG9fYWJvcnQoaW5zdGFuY2UpOwogCiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlmb3IgKHByZXYgPSAoU2NzaV9DbW5kICoqKSYoaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSksCi0JCQkgICAgIHRtcCA9IChTY3NpX0NtbmQgKilob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOworCQkJZm9yIChwcmV2ID0gKHN0cnVjdCBzY3NpX2NtbmQgKiopJihob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKSwKKwkJCSAgICAgdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKilob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOwogCQkJICAgICB0bXA7IHByZXYgPSBORVhUQUREUih0bXApLCB0bXAgPSBORVhUKHRtcCkpIHsKIAkJCQlpZiAoY21kID09IHRtcCkgewogCQkJCQlSRU1PVkUoNSwgKnByZXYsIHRtcCwgTkVYVCh0bXApKTsKQEAgLTI3ODIsMTUgKzI4MjksMjIgQEAKICNlbHNlCiAJCQkJCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJj0gfigxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwogI2VuZGlmCisJCQkJCW1heWJlX3JlbGVhc2VfZG1hX2lycShpbnN0YW5jZSk7CiAJCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCQkJdG1wLT5zY3NpX2RvbmUodG1wKTsKLQkJCQkJZmFsY29uX3JlbGVhc2VfbG9ja19pZl9wb3NzaWJsZShob3N0ZGF0YSk7CiAJCQkJCXJldHVybiBTVUNDRVNTOwogCQkJCX0KIAkJCX0KIAkJfQogCX0KIAorCS8qIE1heWJlIGl0IGlzIHN1ZmZpY2llbnQganVzdCB0byByZWxlYXNlIHRoZSBTVC1ETUEgbG9jay4uLiAoaWYKKwkgKiBwb3NzaWJsZSBhdCBhbGwpIEF0IGxlYXN0LCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGxvY2sgY291bGQgYmUKKwkgKiByZWxlYXNlZCBhZnRlciB0aGUgYWJvcnQsIGluIGNhc2UgaXQgaXMga2VwdCBkdWUgdG8gc29tZSBidWcuCisJICovCisJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAkvKgogCSAqIENhc2UgNSA6IElmIHdlIHJlYWNoZWQgdGhpcyBwb2ludCwgdGhlIGNvbW1hbmQgd2FzIG5vdCBmb3VuZCBpbiBhbnkgb2YKIAkgKgkgICAgdGhlIHF1ZXVlcy4KQEAgLTI4MDEsMjEgKzI4NTUsMTQgQEAKIAkgKiBicm9rZS4KIAkgKi8KIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQ6IHdhcm5pbmcgOiBTQ1NJIGNvbW1hbmQgcHJvYmFibHkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBiZWZvcmUgYWJvcnRpb25cbiIsIEhPU1ROTyk7CiAKLQkvKiBNYXliZSBpdCBpcyBzdWZmaWNpZW50IGp1c3QgdG8gcmVsZWFzZSB0aGUgU1QtRE1BIGxvY2suLi4gKGlmCi0JICogcG9zc2libGUgYXQgYWxsKSBBdCBsZWFzdCwgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBsb2NrIGNvdWxkIGJlCi0JICogcmVsZWFzZWQgYWZ0ZXIgdGhlIGFib3J0LCBpbiBjYXNlIGl0IGlzIGtlcHQgZHVlIHRvIHNvbWUgYnVnLgotCSAqLwotCWZhbGNvbl9yZWxlYXNlX2xvY2tfaWZfcG9zc2libGUoaG9zdGRhdGEpOwotCiAJcmV0dXJuIEZBSUxFRDsKIH0KIAogCiAvKgotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9yZXNldCAoU2NzaV9DbW5kICpjbWQpCisgKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3Jlc2V0IChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiAgKgogICogUHVycG9zZSA6IHJlc2V0IHRoZSBTQ1NJIGJ1cy4KICAqCkBAIC0yODIzLDIwICsyODcwLDE0IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9idXNfcmVzZXQoU2NzaV9DbW5kICpjbWQpCitzdGF0aWMgaW50IE5DUjUzODBfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBjbWQtPmRldmljZS0+aG9zdDsKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2lmIGRlZmluZWQoUkVTRVRfUlVOX0RPTkUpCi0JU2NzaV9DbW5kICpjb25uZWN0ZWQsICpkaXNjb25uZWN0ZWRfcXVldWU7Ci0jZW5kaWYKIAotCWlmICghSVNfQV9UVCgpICYmICFmYWxjb25fZ290X2xvY2spCi0JCXByaW50ayhLRVJOX0VSUiAic2NzaSVkOiAhIUJJTkdPISEgRmFsY29uIGhhcyBubyBsb2NrIGluIE5DUjUzODBfcmVzZXRcbiIsCi0JCSAgICAgICBIX05PKGNtZCkpOwotCi0JTkNSNTM4MF9wcmludF9zdGF0dXMoY21kLT5kZXZpY2UtPmhvc3QpOworCU5DUjUzODBfcHJpbnRfc3RhdHVzKGluc3RhbmNlKTsKIAogCS8qIGdldCBpbiBwaGFzZSAqLwogCU5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLApAQCAtMjg1Myw4OSArMjg5NCw2IEBACiAJICogdGhyb3VnaCBhbnltb3JlIC4uLiAqLwogCSh2b2lkKU5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7CiAKLQkvKiBNU2NoIDIwMTQwMTE1IC0gbG9va2luZyBhdCB0aGUgZ2VuZXJpYyBOQ1I1MzgwIGRyaXZlciwgYWxsIG9mIHRoaXMKLQkgKiBzaG91bGQgZ28uCi0JICogQ2F0Y2gtMjI6IGlmIHdlIGRvbid0IGNsZWFyIGFsbCBxdWV1ZXMsIHRoZSBTQ1NJIGRyaXZlciBsb2NrIHdpbGwKLQkgKiBub3QgYmUgcmVzZXQgYnkgYXRhcmlfc2NzaV9yZXNldCgpIQotCSAqLwotCi0jaWYgZGVmaW5lZChSRVNFVF9SVU5fRE9ORSkKLQkvKiBYWFggU2hvdWxkIG5vdyBiZSBkb25lIGJ5IG1pZGxldmVsIGNvZGUsIGJ1dCBpdCdzIGJyb2tlbiBYWFggKi8KLQkvKiBYWFggc2VlIGJlbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYWFggKi8KLQotCS8qIE1TY2g6IG9sZC1zdHlsZSByZXNldDogYWN0dWFsbHkgYWJvcnQgYWxsIGNvbW1hbmQgcHJvY2Vzc2luZyBoZXJlICovCi0KLQkvKiBBZnRlciB0aGUgcmVzZXQsIHRoZXJlIGFyZSBubyBtb3JlIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgY29tbWFuZHMKLQkgKiBhbmQgbm8gYnVzeSB1bml0czsgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCByZS1pbnNlcnRpbmcgdGhlIGNvbW1hbmRzCi0JICogaW50byB0aGUgaXNzdWVfcXVldWUgKHZpYSBzY3NpX2RvbmUoKSksIHRoZSBhYm9ydGVkIGNvbW1hbmRzIGFyZQotCSAqIHJlbWVtYmVyZWQgaW4gbG9jYWwgdmFyaWFibGVzIGZpcnN0LgotCSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljb25uZWN0ZWQgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmNvbm5lY3RlZDsKLQlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLQlkaXNjb25uZWN0ZWRfcXVldWUgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsKLQlob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlID0gTlVMTDsKLSNpZmRlZiBTVVBQT1JUX1RBR1MKLQlmcmVlX2FsbF90YWdzKCk7Ci0jZW5kaWYKLQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQotCQlob3N0ZGF0YS0+YnVzeVtpXSA9IDA7Ci0jaWZkZWYgUkVBTF9ETUEKLQlob3N0ZGF0YS0+ZG1hX2xlbiA9IDA7Ci0jZW5kaWYKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKiBJbiBvcmRlciB0byB0ZWxsIHRoZSBtaWQtbGV2ZWwgY29kZSB3aGljaCBjb21tYW5kcyB3ZXJlIGFib3J0ZWQsCi0JICogc2V0IHRoZSBjb21tYW5kIHN0YXR1cyB0byBESURfUkVTRVQgYW5kIGNhbGwgc2NzaV9kb25lKCkgISEhCi0JICogVGhpcyB1bHRpbWF0ZWx5IGFib3J0cyBwcm9jZXNzaW5nIG9mIHRoZXNlIGNvbW1hbmRzIGluIHRoZSBtaWQtbGV2ZWwuCi0JICovCi0KLQlpZiAoKGNtZCA9IGNvbm5lY3RlZCkpIHsKLQkJZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IHJlc2V0IGFib3J0ZWQgYSBjb25uZWN0ZWQgY29tbWFuZFxuIiwgSF9OTyhjbWQpKTsKLQkJY21kLT5yZXN1bHQgPSAoY21kLT5yZXN1bHQgJiAweGZmZmYpIHwgKERJRF9SRVNFVCA8PCAxNik7Ci0JCWNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JfQotCi0JZm9yIChpID0gMDsgKGNtZCA9IGRpc2Nvbm5lY3RlZF9xdWV1ZSk7ICsraSkgewotCQlkaXNjb25uZWN0ZWRfcXVldWUgPSBORVhUKGNtZCk7Ci0JCVNFVF9ORVhUKGNtZCwgTlVMTCk7Ci0JCWNtZC0+cmVzdWx0ID0gKGNtZC0+cmVzdWx0ICYgMHhmZmZmKSB8IChESURfUkVTRVQgPDwgMTYpOwotCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCX0KLQlpZiAoaSA+IDApCi0JCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaTogcmVzZXQgYWJvcnRlZCAlZCBkaXNjb25uZWN0ZWQgY29tbWFuZChzKVxuIiwgaSk7Ci0KLQkvKiBUaGUgRmFsY29uIGxvY2sgc2hvdWxkIGJlIHJlbGVhc2VkIGFmdGVyIGEgcmVzZXQuLi4KLQkgKi8KLQkvKiArK2d1ZW50aGVyOiBtb3ZlZCB0byBhdGFyaV9zY3NpX3Jlc2V0KCksIHRvIHByZXZlbnQgYSByYWNlIGJldHdlZW4KLQkgKiB1bmxvY2tpbmcgYW5kIGVuYWJsaW5nIGRtYSBpbnRlcnJ1cHQuCi0JICovCi0vKglmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKCBob3N0ZGF0YSApOyovCi0KLQkvKiBzaW5jZSBhbGwgY29tbWFuZHMgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgdGVybWluYXRlZCwgd2UgbmVlZCB0byB0ZWxsCi0JICogdGhlIG1pZGxldmVsIGNvZGUgdGhhdCB0aGUgcmVzZXQgd2FzIFNVQ0NFU1NGVUwsIGFuZCB0aGVyZSBpcyBubwotCSAqIG5lZWQgdG8gJ3dha2UgdXAnIHRoZSBjb21tYW5kcyBieSBhIHJlcXVlc3Rfc2Vuc2UKLQkgKi8KLQlyZXR1cm4gU1VDQ0VTUzsKLSNlbHNlIC8qIDEgKi8KLQotCS8qIE1TY2g6IG5ldy1zdHlsZSByZXNldCBoYW5kbGluZzogbGV0IHRoZSBtaWQtbGV2ZWwgZG8gd2hhdCBpdCBjYW4gKi8KLQotCS8qICsrZ3VlbnRoZXI6IE1JRC1MRVZFTCBJUyBTVElMTCBCUk9LRU4uCi0JICogTWlkLWxldmVsIGlzIHN1cHBvc2VkIHRvIHJlcXVldWUgYWxsIGNvbW1hbmRzIHRoYXQgd2VyZSBhY3RpdmUgb24gdGhlCi0JICogdmFyaW91cyBsb3ctbGV2ZWwgcXVldWVzLiBJbiBmYWN0IGl0IGRvZXMgdGhpcywgYnV0IHRoYXQncyBub3QgZW5vdWdoCi0JICogYmVjYXVzZSBhbGwgdGhlc2UgY29tbWFuZHMgYXJlIHN1YmplY3QgdG8gdGltZW91dC4gQW5kIGlmIGEgdGltZW91dAotCSAqIGhhcHBlbnMgZm9yIGFueSByZW1vdmVkIGNvbW1hbmQsICpfYWJvcnQoKSBpcyBjYWxsZWQgYnV0IGFsbCBxdWV1ZXMKLQkgKiBhcmUgbm93IGVtcHR5LiBBYm9ydCB0aGVuIGdpdmVzIHVwIHRoZSBmYWxjb24gbG9jaywgd2hpY2ggaXMgZmF0YWwsCi0JICogc2luY2UgdGhlIG1pZC1sZXZlbCB3aWxsIHF1ZXVlIG1vcmUgY29tbWFuZHMgYW5kIG11c3QgaGF2ZSB0aGUgbG9jawotCSAqIChpdCdzIGFsbCBoYXBwZW5pbmcgaW5zaWRlIHRpbWVyIGludGVycnVwdCBoYW5kbGVyISEpLgotCSAqIEV2ZW4gd29yc2UsIGFib3J0IHdpbGwgcmV0dXJuIE5PVF9SVU5OSU5HIGZvciBhbGwgdGhvc2UgY29tbWFuZHMgbm90Ci0JICogb24gYW55IHF1ZXVlLCBzbyB0aGV5IHdvbid0IGJlIHJldHJpZWQgLi4uCi0JICoKLQkgKiBDb25jbHVzaW9uOiBlaXRoZXIgc2NzaS5jIGRpc2FibGVzIHRpbWVvdXQgZm9yIGFsbCByZXNldHRlZCBjb21tYW5kcwotCSAqIGltbWVkaWF0ZWx5LCBvciB3ZSBsb3NlISAgQXMgb2YgbGludXgtMi4wLjIwIGl0IGRvZXNuJ3QuCi0JICovCi0KIAkvKiBBZnRlciB0aGUgcmVzZXQsIHRoZXJlIGFyZSBubyBtb3JlIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgY29tbWFuZHMKIAkgKiBhbmQgbm8gYnVzeSB1bml0czsgc28gY2xlYXIgdGhlIGxvdy1sZXZlbCBzdGF0dXMgaGVyZSB0byBhdm9pZAogCSAqIGNvbmZsaWN0cyB3aGVuIHRoZSBtaWQtbGV2ZWwgY29kZSB0cmllcyB0byB3YWtlIHVwIHRoZSBhZmZlY3RlZApAQCAtMjk1NCwxNiArMjkxMiwxNiBAQAogCWhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwogCWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBOVUxMOwogI2lmZGVmIFNVUFBPUlRfVEFHUwotCWZyZWVfYWxsX3RhZ3MoKTsKKwlmcmVlX2FsbF90YWdzKGhvc3RkYXRhKTsKICNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCiAJCWhvc3RkYXRhLT5idXN5W2ldID0gMDsKICNpZmRlZiBSRUFMX0RNQQogCWhvc3RkYXRhLT5kbWFfbGVuID0gMDsKICNlbmRpZgorCisJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQkvKiB3ZSBkaWQgbm8gY29tcGxldGUgcmVzZXQgb2YgYWxsIGNvbW1hbmRzLCBzbyBhIHdha2V1cCBpcyByZXF1aXJlZCAqLwogCXJldHVybiBTVUNDRVNTOwotI2VuZGlmIC8qIDEgKi8KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCmluZGV4IGI1MjIxMzQuLmQxYzM3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwpAQCAtNjQsNDUgKzY0LDU3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNkZWZpbmUgQVVUT1NFTlNFCi0vKiBGb3IgdGhlIEF0YXJpIHZlcnNpb24sIHVzZSBvbmx5IHBvbGxlZCBJTyBvciBSRUFMX0RNQSAqLwotI2RlZmluZQlSRUFMX0RNQQotLyogU3VwcG9ydCB0YWdnZWQgcXVldWluZz8gKG9uIGRldmljZXMgdGhhdCBhcmUgYWJsZSB0by4uLiA6LSkgKi8KLSNkZWZpbmUJU1VQUE9SVF9UQUdTCi0jZGVmaW5lCU1BWF9UQUdTIDMyCi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9udnJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+CiAjaW5jbHVkZSA8YXNtL2F0YXJpaW50cy5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3RyYXBzLmg+Ci0KLSNpbmNsdWRlICJzY3NpLmgiCi0jaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KLSNpbmNsdWRlICJhdGFyaV9zY3NpLmgiCi0jaW5jbHVkZSAiTkNSNTM4MC5oIgogI2luY2x1ZGUgPGFzbS9hdGFyaV9zdGRtYS5oPgogI2luY2x1ZGUgPGFzbS9hdGFyaV9zdHJhbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgY29yZSBOQ1I1MzgwIGRyaXZlci4gKi8KKworI2RlZmluZSBSRUFMX0RNQQorI2RlZmluZSBTVVBQT1JUX1RBR1MKKyNkZWZpbmUgTUFYX1RBR1MgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBETUFfTUlOX1NJWkUgICAgICAgICAgICAgICAgICAgIDMyCisKKyNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMgICAvKiBub25lICovCisKKyNkZWZpbmUgTkNSNTM4MF9yZWFkKHJlZykgICAgICAgICAgICAgICBhdGFyaV9zY3NpX3JlZ19yZWFkKHJlZykKKyNkZWZpbmUgTkNSNTM4MF93cml0ZShyZWcsIHZhbHVlKSAgICAgICBhdGFyaV9zY3NpX3JlZ193cml0ZShyZWcsIHZhbHVlKQorCisjZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZCAgICAgICAgICAgYXRhcmlfc2NzaV9xdWV1ZV9jb21tYW5kCisjZGVmaW5lIE5DUjUzODBfYWJvcnQgICAgICAgICAgICAgICAgICAgYXRhcmlfc2NzaV9hYm9ydAorI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyAgICAgICAgICAgICAgIGF0YXJpX3Njc2lfc2hvd19pbmZvCisjZGVmaW5lIE5DUjUzODBfaW5mbyAgICAgICAgICAgICAgICAgICAgYXRhcmlfc2NzaV9pbmZvCisKKyNkZWZpbmUgTkNSNTM4MF9kbWFfcmVhZF9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIFwKKyAgICAgICAgYXRhcmlfc2NzaV9kbWFfc2V0dXAoaW5zdGFuY2UsIGRhdGEsIGNvdW50LCAwKQorI2RlZmluZSBOQ1I1MzgwX2RtYV93cml0ZV9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIFwKKyAgICAgICAgYXRhcmlfc2NzaV9kbWFfc2V0dXAoaW5zdGFuY2UsIGRhdGEsIGNvdW50LCAxKQorI2RlZmluZSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSkgXAorICAgICAgICBhdGFyaV9zY3NpX2RtYV9yZXNpZHVhbChpbnN0YW5jZSkKKyNkZWZpbmUgTkNSNTM4MF9kbWFfeGZlcl9sZW4oaW5zdGFuY2UsIGNtZCwgcGhhc2UpIFwKKyAgICAgICAgYXRhcmlfZG1hX3hmZXJfbGVuKGNtZC0+U0NwLnRoaXNfcmVzaWR1YWwsIGNtZCwgISgocGhhc2UpICYgU1JfSU8pKQorCisjZGVmaW5lIE5DUjUzODBfYWNxdWlyZV9kbWFfaXJxKGluc3RhbmNlKSAgICAgIGZhbGNvbl9nZXRfbG9jayhpbnN0YW5jZSkKKyNkZWZpbmUgTkNSNTM4MF9yZWxlYXNlX2RtYV9pcnEoaW5zdGFuY2UpICAgICAgZmFsY29uX3JlbGVhc2VfbG9jaygpCisKKyNpbmNsdWRlICJOQ1I1MzgwLmgiCisKIAogI2RlZmluZQlJU19BX1RUKCkJQVRBUklIV19QUkVTRU5UKFRUX1NDU0kpCiAKQEAgLTE0OSwyMyArMTYxLDYgQEAKIAlyZXR1cm4gYWRyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgRU5BQkxFX0lSUSh2b2lkKQotewotCWlmIChJU19BX1RUKCkpCi0JCWF0YXJpX2VuYWJsZV9pcnEoSVJRX1RUX01GUF9TQ1NJKTsKLQllbHNlCi0JCWF0YXJpX2VuYWJsZV9pcnEoSVJRX01GUF9GU0NTSSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBESVNBQkxFX0lSUSh2b2lkKQotewotCWlmIChJU19BX1RUKCkpCi0JCWF0YXJpX2Rpc2FibGVfaXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0JZWxzZQotCQlhdGFyaV9kaXNhYmxlX2lycShJUlFfTUZQX0ZTQ1NJKTsKLX0KLQotCiAjZGVmaW5lIEhPU1REQVRBX0RNQUxFTgkJKCgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgXAogCQkJCShhdGFyaV9zY3NpX2hvc3QtPmhvc3RkYXRhKSktPmRtYV9sZW4pCiAKQEAgLTE3OCwzMCArMTczLDkgQEAKICNkZWZpbmUJQUZURVJfUkVTRVRfREVMQVkJKDUqSFovMikKICNlbmRpZgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogI2lmZGVmIFJFQUxfRE1BCi1zdGF0aWMgaW50IHNjc2lfZG1hX2lzX2lnbm9yZWRfYnVzZXJyKHVuc2lnbmVkIGNoYXIgZG1hX3N0YXQpOwogc3RhdGljIHZvaWQgYXRhcmlfc2NzaV9mZXRjaF9yZXN0Ynl0ZXModm9pZCk7Ci1zdGF0aWMgbG9uZyBhdGFyaV9zY3NpX2RtYV9yZXNpZHVhbChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSk7Ci1zdGF0aWMgaW50IGZhbGNvbl9jbGFzc2lmeV9jbWQoU2NzaV9DbW5kICpjbWQpOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYXRhcmlfZG1hX3hmZXJfbGVuKHVuc2lnbmVkIGxvbmcgd2FudGVkX2xlbiwKLQkJCQkJU2NzaV9DbW5kICpjbWQsIGludCB3cml0ZV9mbGFnKTsKICNlbmRpZgotc3RhdGljIGlycXJldHVybl90IHNjc2lfdHRfaW50cihpbnQgaXJxLCB2b2lkICpkdW1teSk7Ci1zdGF0aWMgaXJxcmV0dXJuX3Qgc2NzaV9mYWxjb25faW50cihpbnQgaXJxLCB2b2lkICpkdW1teSk7Ci1zdGF0aWMgdm9pZCBmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSk7Ci1zdGF0aWMgdm9pZCBmYWxjb25fZ2V0X2xvY2sodm9pZCk7Ci0jaWZkZWYgQ09ORklHX0FUQVJJX1NDU0lfUkVTRVRfQk9PVAotc3RhdGljIHZvaWQgYXRhcmlfc2NzaV9yZXNldF9ib290KHZvaWQpOwotI2VuZGlmCi1zdGF0aWMgdW5zaWduZWQgY2hhciBhdGFyaV9zY3NpX3R0X3JlZ19yZWFkKHVuc2lnbmVkIGNoYXIgcmVnKTsKLXN0YXRpYyB2b2lkIGF0YXJpX3Njc2lfdHRfcmVnX3dyaXRlKHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbHVlKTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGF0YXJpX3Njc2lfZmFsY29uX3JlZ19yZWFkKHVuc2lnbmVkIGNoYXIgcmVnKTsKLXN0YXRpYyB2b2lkIGF0YXJpX3Njc2lfZmFsY29uX3JlZ193cml0ZSh1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWx1ZSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvZiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiAKIHN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICphdGFyaV9zY3NpX2hvc3Q7CiBzdGF0aWMgdW5zaWduZWQgY2hhciAoKmF0YXJpX3Njc2lfcmVnX3JlYWQpKHVuc2lnbmVkIGNoYXIgcmVnKTsKQEAgLTIyNiw4ICsyMDAsNiBAQAogLyogbWFzayBmb3IgYWRkcmVzcyBiaXRzIHRoYXQgY2FuJ3QgYmUgdXNlZCB3aXRoIHRoZSBTVC1ETUEgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nCWF0YXJpX2RtYV9zdHJhbV9tYXNrOwogI2RlZmluZSBTVFJBTV9BRERSKGEpCSgoKGEpICYgYXRhcmlfZG1hX3N0cmFtX21hc2spID09IDApCi0vKiBudW1iZXIgb2YgYnl0ZXMgdG8gY3V0IGZyb20gYSB0cmFuc2ZlciB0byBoYW5kbGUgTkNSIG92ZXJydW5zICovCi1zdGF0aWMgaW50IGF0YXJpX3JlYWRfb3ZlcnJ1bnM7CiAjZW5kaWYKIAogc3RhdGljIGludCBzZXR1cF9jYW5fcXVldWUgPSAtMTsKQEAgLTM4NiwxMCArMzU4LDYgQEAKIAogCU5DUjUzODBfaW50cihpcnEsIGR1bW15KTsKIAotI2lmIDAKLQkvKiBUbyBiZSBzdXJlIHRoZSBpbnQgaXMgbm90IG1hc2tlZCAqLwotCWF0YXJpX2VuYWJsZV9pcnEoSVJRX1RUX01GUF9TQ1NJKTsKLSNlbmRpZgogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNDgwLDI1NyArNDQ4LDM1IEBACiAjZW5kaWYgLyogUkVBTF9ETUEgKi8KIAogCi1zdGF0aWMgaW50IGZhbGNvbl9nb3RfbG9jayA9IDA7Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoZmFsY29uX2ZhaXJuZXNzX3dhaXQpOwotc3RhdGljIGludCBmYWxjb25fdHJ5aW5nX2xvY2sgPSAwOwotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGZhbGNvbl90cnlfd2FpdCk7Ci1zdGF0aWMgaW50IGZhbGNvbl9kb250X3JlbGVhc2UgPSAwOwotCiAvKiBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBsb2NrIG9uIHRoZSBETUEgY2hpcCBpZiB0aGVyZSBpcyBubwotICogY29ubmVjdGVkIGNvbW1hbmQgYW5kIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUgaXMgZW1wdHkuIE9uCi0gKiByZWxlYXNpbmcsIGluc3RhbmNlcyBvZiBmYWxjb25fZ2V0X2xvY2sgYXJlIGF3b2tlbiwgdGhhdCBwdXQKLSAqIHRoZW1zZWx2ZXMgdG8gc2xlZXAgZm9yIGZhaXJuZXNzLiBUaGV5IGNhbiBub3cgdHJ5IHRvIGdldCB0aGUgbG9jawotICogYWdhaW4gKGJ1dCBvdGhlcnMgd2FpdGluZyBsb25nZXIgbW9yZSBwcm9iYWJseSB3aWxsIHdpbikuCisgKiBjb25uZWN0ZWQgY29tbWFuZCBhbmQgdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZSBpcyBlbXB0eS4KICAqLwogCi1zdGF0aWMgdm9pZCBmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSkKK3N0YXRpYyB2b2lkIGZhbGNvbl9yZWxlYXNlX2xvY2sodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJaWYgKElTX0FfVFQoKSkKIAkJcmV0dXJuOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JaWYgKGZhbGNvbl9nb3RfbG9jayAmJiAhaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSAmJgotCSAgICAhaG9zdGRhdGEtPmlzc3VlX3F1ZXVlICYmICFob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0KLQkJaWYgKGZhbGNvbl9kb250X3JlbGVhc2UpIHsKLSNpZiAwCi0JCQlwcmludGsoIldBUk5JTkc6IExvY2sgcmVsZWFzZSBub3QgYWxsb3dlZC4gSWdub3JlZFxuIik7Ci0jZW5kaWYKLQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJCXJldHVybjsKLQkJfQotCQlmYWxjb25fZ290X2xvY2sgPSAwOworCWlmIChzdGRtYV9pc19sb2NrZWRfYnkoc2NzaV9mYWxjb25faW50cikpCiAJCXN0ZG1hX3JlbGVhc2UoKTsKLQkJd2FrZV91cCgmZmFsY29uX2ZhaXJuZXNzX3dhaXQpOwotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBtYW5hZ2VzIHRoZSBsb2NraW5nIG9mIHRoZSBTVC1ETUEuCiAgKiBJZiB0aGUgRE1BIGlzbid0IGxvY2tlZCBhbHJlYWR5IGZvciBTQ1NJLCBpdCB0cmllcyB0byBsb2NrIGl0IGJ5CiAgKiBjYWxsaW5nIHN0ZG1hX2xvY2soKS4gQnV0IGlmIHRoZSBETUEgaXMgbG9ja2VkIGJ5IHRoZSBTQ1NJIGNvZGUgYW5kCiAgKiB0aGVyZSBhcmUgb3RoZXIgZHJpdmVycyB3YWl0aW5nIGZvciB0aGUgY2hpcCwgd2UgZG8gbm90IGlzc3VlIHRoZQotICogY29tbWFuZCBpbW1lZGlhdGVseSBidXQgd2FpdCBvbiAnZmFsY29uX2ZhaXJuZXNzX3F1ZXVlJy4gV2Ugd2lsbCBiZQotICogd2FrZWQgdXAgd2hlbiB0aGUgRE1BIGlzIHVubG9ja2VkIGJ5IHNvbWUgU0NTSSBpbnRlcnJ1cHQuIEFmdGVyIHRoYXQKLSAqIHdlIHRyeSB0byBnZXQgdGhlIGxvY2sgYWdhaW4uCi0gKiBCdXQgd2UgbXVzdCBiZSBwcmVwYXJlZCB0aGF0IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YKLSAqIGZhbGNvbl9nZXRfbG9jaygpIGlzIHdhaXRpbmcgb24gdGhlIGZhaXJuZXNzIHF1ZXVlLiBUaGV5IHNob3VsZCBub3QKLSAqIHRyeSBhbGwgYXQgb25jZSB0byBjYWxsIHN0ZG1hX2xvY2soKSwgb25lIGlzIGVub3VnaCEgRm9yIHRoYXQsIHRoZQotICogZmlyc3Qgb25lIHNldHMgJ2ZhbGNvbl90cnlpbmdfbG9jaycsIG90aGVycyB0aGF0IHNlZSB0aGF0IHZhcmlhYmxlCi0gKiBzZXQgd2FpdCBvbiB0aGUgcXVldWUgJ2ZhbGNvbl90cnlfd2FpdCcuCi0gKiBDb21wbGljYXRlZCwgY29tcGxpY2F0ZWQuLi4uIFNpZ2guLi4KKyAqIGNvbW1hbmQgaW1tZWRpYXRlbHkgYnV0IHRlbGwgdGhlIFNDU0kgbWlkLWxheWVyIHRvIGRlZmVyLgogICovCiAKLXN0YXRpYyB2b2lkIGZhbGNvbl9nZXRfbG9jayh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoSVNfQV9UVCgpKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQl3YWl0X2V2ZW50X2NtZChmYWxjb25fZmFpcm5lc3Nfd2FpdCwKLQkJaW5faW50ZXJydXB0KCkgfHwgIWZhbGNvbl9nb3RfbG9jayB8fCAhc3RkbWFfb3RoZXJzX3dhaXRpbmcoKSwKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpLAotCQlsb2NhbF9pcnFfc2F2ZShmbGFncykpOwotCi0Jd2hpbGUgKCFmYWxjb25fZ290X2xvY2spIHsKLQkJaWYgKGluX2lycSgpKQotCQkJcGFuaWMoIkZhbGNvbiBTQ1NJIGhhc24ndCBTVC1ETUEgbG9jayBpbiBpbnRlcnJ1cHQiKTsKLQkJaWYgKCFmYWxjb25fdHJ5aW5nX2xvY2spIHsKLQkJCWZhbGNvbl90cnlpbmdfbG9jayA9IDE7Ci0JCQlzdGRtYV9sb2NrKHNjc2lfZmFsY29uX2ludHIsIE5VTEwpOwotCQkJZmFsY29uX2dvdF9sb2NrID0gMTsKLQkJCWZhbGNvbl90cnlpbmdfbG9jayA9IDA7Ci0JCQl3YWtlX3VwKCZmYWxjb25fdHJ5X3dhaXQpOwotCQl9IGVsc2UgewotCQkJd2FpdF9ldmVudF9jbWQoZmFsY29uX3RyeV93YWl0LAotCQkJCWZhbGNvbl9nb3RfbG9jayAmJiAhZmFsY29uX3RyeWluZ19sb2NrLAotCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKSwKLQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncykpOwotCQl9Ci0JfQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCWlmICghZmFsY29uX2dvdF9sb2NrKQotCQlwYW5pYygiRmFsY29uIFNDU0k6IHNvbWVvbmUgc3RvbGUgdGhlIGxvY2sgOi0oXG4iKTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBhdGFyaV9zY3NpX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0KQotewotCXN0YXRpYyBpbnQgY2FsbGVkID0gMDsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZTsKLQotCWlmICghTUFDSF9JU19BVEFSSSB8fAotCSAgICAoIUFUQVJJSFdfUFJFU0VOVChTVF9TQ1NJKSAmJiAhQVRBUklIV19QUkVTRU5UKFRUX1NDU0kpKSB8fAotCSAgICBjYWxsZWQpCi0JCXJldHVybiAwOwotCi0JaG9zdC0+cHJvY19uYW1lID0gIkF0YXJpIjsKLQotCWF0YXJpX3Njc2lfcmVnX3JlYWQgID0gSVNfQV9UVCgpID8gYXRhcmlfc2NzaV90dF9yZWdfcmVhZCA6Ci0JCQkJCSAgIGF0YXJpX3Njc2lfZmFsY29uX3JlZ19yZWFkOwotCWF0YXJpX3Njc2lfcmVnX3dyaXRlID0gSVNfQV9UVCgpID8gYXRhcmlfc2NzaV90dF9yZWdfd3JpdGUgOgotCQkJCQkgICBhdGFyaV9zY3NpX2ZhbGNvbl9yZWdfd3JpdGU7Ci0KLQkvKiBzZXR1cCB2YXJpYWJsZXMgKi8KLQlob3N0LT5jYW5fcXVldWUgPQotCQkoc2V0dXBfY2FuX3F1ZXVlID4gMCkgPyBzZXR1cF9jYW5fcXVldWUgOgotCQlJU19BX1RUKCkgPyBBVEFSSV9UVF9DQU5fUVVFVUUgOiBBVEFSSV9GQUxDT05fQ0FOX1FVRVVFOwotCWhvc3QtPmNtZF9wZXJfbHVuID0KLQkJKHNldHVwX2NtZF9wZXJfbHVuID4gMCkgPyBzZXR1cF9jbWRfcGVyX2x1biA6Ci0JCUlTX0FfVFQoKSA/IEFUQVJJX1RUX0NNRF9QRVJfTFVOIDogQVRBUklfRkFMQ09OX0NNRF9QRVJfTFVOOwotCS8qIEZvcmNlIHNnX3RhYmxlc2l6ZSB0byAwIG9uIGEgRmFsY29uISAqLwotCWhvc3QtPnNnX3RhYmxlc2l6ZSA9Ci0JCSFJU19BX1RUKCkgPyBBVEFSSV9GQUxDT05fU0dfVEFCTEVTSVpFIDoKLQkJKHNldHVwX3NnX3RhYmxlc2l6ZSA+PSAwKSA/IHNldHVwX3NnX3RhYmxlc2l6ZSA6IEFUQVJJX1RUX1NHX1RBQkxFU0laRTsKLQotCWlmIChzZXR1cF9ob3N0aWQgPj0gMCkKLQkJaG9zdC0+dGhpc19pZCA9IHNldHVwX2hvc3RpZDsKLQllbHNlIHsKLQkJLyogdXNlIDcgYXMgZGVmYXVsdCAqLwotCQlob3N0LT50aGlzX2lkID0gNzsKLQkJLyogVGVzdCBpZiBhIGhvc3QgaWQgaXMgc2V0IGluIHRoZSBOVlJhbSAqLwotCQlpZiAoQVRBUklIV19QUkVTRU5UKFRUX0NMSykgJiYgbnZyYW1fY2hlY2tfY2hlY2tzdW0oKSkgewotCQkJdW5zaWduZWQgY2hhciBiID0gbnZyYW1fcmVhZF9ieXRlKCAxNCApOwotCQkJLyogQXJiaXRyYXRpb24gZW5hYmxlZD8gKGZvciBUT1MpIElmIHllcywgdXNlIGNvbmZpZ3VyZWQgaG9zdCBJRCAqLwotCQkJaWYgKGIgJiAweDgwKQotCQkJCWhvc3QtPnRoaXNfaWQgPSBiICYgNzsKLQkJfQotCX0KLQotI2lmZGVmIFNVUFBPUlRfVEFHUwotCWlmIChzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPCAwKQotCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBERUZBVUxUX1VTRV9UQUdHRURfUVVFVUlORzsKLSNlbmRpZgotI2lmZGVmIFJFQUxfRE1BCi0JLyogSWYgcnVubmluZyBvbiBhIEZhbGNvbiBhbmQgaWYgdGhlcmUncyBUVC1SYW0gKGkuZS4sIG1vcmUgdGhhbiBvbmUKLQkgKiBtZW1vcnkgYmxvY2ssIHNpbmNlIHRoZXJlJ3MgYWx3YXlzIFNULVJhbSBpbiBhIEZhbGNvbiksIHRoZW4gYWxsb2NhdGUgYQotCSAqIFNUUkFNX0JVRkZFUl9TSVpFIGJ5dGUgZHJpYmJsZSBidWZmZXIgZm9yIHRyYW5zZmVycyBmcm9tL3RvIGFsdGVybmF0aXZlCi0JICogUmFtLgotCSAqLwotCWlmIChNQUNIX0lTX0FUQVJJICYmIEFUQVJJSFdfUFJFU0VOVChTVF9TQ1NJKSAmJgotCSAgICAhQVRBUklIV19QUkVTRU5UKEVYVERfRE1BKSAmJiBtNjhrX251bV9tZW1vcnkgPiAxKSB7Ci0JCWF0YXJpX2RtYV9idWZmZXIgPSBhdGFyaV9zdHJhbV9hbGxvYyhTVFJBTV9CVUZGRVJfU0laRSwgIlNDU0kiKTsKLQkJaWYgKCFhdGFyaV9kbWFfYnVmZmVyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImF0YXJpX3Njc2lfZGV0ZWN0OiBjYW4ndCBhbGxvY2F0ZSBTVC1SQU0gIgotCQkJCQkiZG91YmxlIGJ1ZmZlclxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlhdGFyaV9kbWFfcGh5c19idWZmZXIgPSBhdGFyaV9zdHJhbV90b19waHlzKGF0YXJpX2RtYV9idWZmZXIpOwotCQlhdGFyaV9kbWFfb3JpZ19hZGRyID0gMDsKLQl9Ci0jZW5kaWYKLQlpbnN0YW5jZSA9IHNjc2lfcmVnaXN0ZXIoaG9zdCwgc2l6ZW9mKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhKSk7Ci0JaWYgKGluc3RhbmNlID09IE5VTEwpIHsKLQkJYXRhcmlfc3RyYW1fZnJlZShhdGFyaV9kbWFfYnVmZmVyKTsKLQkJYXRhcmlfZG1hX2J1ZmZlciA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQlhdGFyaV9zY3NpX2hvc3QgPSBpbnN0YW5jZTsKLQkvKgotCSAqIFNldCBpcnEgdG8gMCwgdG8gYXZvaWQgdGhhdCB0aGUgbWlkLWxldmVsIGNvZGUgZGlzYWJsZXMgb3VyIGludGVycnVwdAotCSAqIGR1cmluZyBxdWV1ZV9jb21tYW5kIGNhbGxzLiBUaGlzIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnksIGFuZCBldmVuCi0JICogd29yc2UgY2F1c2VzIGJhZCBwcm9ibGVtcyBvbiB0aGUgRmFsY29uLCB3aGVyZSB0aGUgaW50IGlzIHNoYXJlZCB3aXRoCi0JICogSURFIGFuZCBmbG9wcHkhCi0JICovCi0gICAgICAgaW5zdGFuY2UtPmlycSA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfQVRBUklfU0NTSV9SRVNFVF9CT09UCi0JYXRhcmlfc2NzaV9yZXNldF9ib290KCk7Ci0jZW5kaWYKLQlOQ1I1MzgwX2luaXQoaW5zdGFuY2UsIDApOwotCi0JaWYgKElTX0FfVFQoKSkgewotCi0JCS8qIFRoaXMgaW50IGlzIGFjdHVhbGx5ICJwc2V1ZG8tc2xvdyIsIGkuZS4gaXQgYWN0cyBsaWtlIGEgc2xvdwotCQkgKiBpbnRlcnJ1cHQgYWZ0ZXIgaGF2aW5nIGNsZWFyZWQgdGhlIHBlbmRpbmcgZmxhZyBmb3IgdGhlIERNQQotCQkgKiBpbnRlcnJ1cHQuICovCi0JCWlmIChyZXF1ZXN0X2lycShJUlFfVFRfTUZQX1NDU0ksIHNjc2lfdHRfaW50ciwgSVJRX1RZUEVfU0xPVywKLQkJCQkgIlNDU0kgTkNSNTM4MCIsIGluc3RhbmNlKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJhdGFyaV9zY3NpX2RldGVjdDogY2Fubm90IGFsbG9jYXRlIGlycSAlZCwgYWJvcnRpbmciLElSUV9UVF9NRlBfU0NTSSk7Ci0JCQlzY3NpX3VucmVnaXN0ZXIoYXRhcmlfc2NzaV9ob3N0KTsKLQkJCWF0YXJpX3N0cmFtX2ZyZWUoYXRhcmlfZG1hX2J1ZmZlcik7Ci0JCQlhdGFyaV9kbWFfYnVmZmVyID0gMDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXR0X21mcC5hY3RpdmVfZWRnZSB8PSAweDgwOwkJLyogU0NTSSBpbnQgb24gTC0+SCAqLwotI2lmZGVmIFJFQUxfRE1BCi0JCXR0X3Njc2lfZG1hLmRtYV9jdHJsID0gMDsKLQkJYXRhcmlfZG1hX3Jlc2lkdWFsID0gMDsKLQotCQlpZiAoTUFDSF9JU19NRURVU0EpIHsKLQkJCS8qIFdoaWxlIHRoZSByZWFkIG92ZXJydW5zIChkZXNjcmliZWQgYnkgRHJldyBFY2toYXJkdCBpbgotCQkJICogTkNSNTM4MC5jKSBuZXZlciBoYXBwZW5lZCBvbiBUVHMsIHRoZXkgZG8gaW4gZmFjdCBvbiB0aGUgTWVkdXNhCi0JCQkgKiAoVGhpcyB3YXMgdGhlIGNhdXNlIHdoeSBTQ1NJIGRpZG4ndCB3b3JrIHJpZ2h0IGZvciBzbyBsb25nCi0JCQkgKiB0aGVyZS4pIFNpbmNlIGhhbmRsaW5nIHRoZSBvdmVycnVucyBzbG93cyBkb3duIGEgYml0LCBJIHR1cm5lZAotCQkJICogdGhlICNpZmRlZidzIGludG8gYSBydW50aW1lIGNvbmRpdGlvbi4KLQkJCSAqCi0JCQkgKiBJbiBwcmluY2lwbGUgaXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZG8gbWF4LiAxIGJ5dGUgd2l0aAotCQkJICogUElPLCBidXQgdGhlcmUgaXMgYW5vdGhlciBwcm9ibGVtIG9uIHRoZSBNZWR1c2Egd2l0aCB0aGUgRE1BCi0JCQkgKiByZXN0IGRhdGEgcmVnaXN0ZXIuIFNvICdhdGFyaV9yZWFkX292ZXJydW5zJyBpcyBjdXJyZW50bHkgc2V0Ci0JCQkgKiB0byA0IHRvIGF2b2lkIGhhdmluZyB0cmFuc2ZlcnMgdGhhdCBhcmVuJ3QgYSBtdWx0aXBsZSBvZiA0LiBJZgotCQkJICogdGhlIHJlc3QgZGF0YSBidWcgaXMgZml4ZWQsIHRoaXMgY2FuIGJlIGxvd2VyZWQgdG8gMS4KLQkJCSAqLwotCQkJYXRhcmlfcmVhZF9vdmVycnVucyA9IDQ7Ci0JCX0KLSNlbmRpZiAvKlJFQUxfRE1BKi8KLQl9IGVsc2UgeyAvKiAhIElTX0FfVFQgKi8KLQotCQkvKiBOb3RoaW5nIHRvIGRvIGZvciB0aGUgaW50ZXJydXB0OiB0aGUgU1QtRE1BIGlzIGluaXRpYWxpemVkCi0JCSAqIGFscmVhZHkgYnkgYXRhcmlfaW5pdF9JTlRTKCkKLQkJICovCi0KLSNpZmRlZiBSRUFMX0RNQQotCQlhdGFyaV9kbWFfcmVzaWR1YWwgPSAwOwotCQlhdGFyaV9kbWFfYWN0aXZlID0gMDsKLQkJYXRhcmlfZG1hX3N0cmFtX21hc2sgPSAoQVRBUklIV19QUkVTRU5UKEVYVERfRE1BKSA/IDB4MDAwMDAwMDAKLQkJCQkJOiAweGZmMDAwMDAwKTsKLSNlbmRpZgotCX0KLQotCXByaW50ayhLRVJOX0lORk8gInNjc2klZDogb3B0aW9ucyBDQU5fUVVFVUU9JWQgQ01EX1BFUl9MVU49JWQgU0NBVC1HQVQ9JWQgIgotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkJIlRBR0dFRC1RVUVVSU5HPSVzICIKLSNlbmRpZgotCQkJIkhPU1RJRD0lZCIsCi0JCQlpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmhvc3R0LT5jYW5fcXVldWUsCi0JCQlpbnN0YW5jZS0+aG9zdHQtPmNtZF9wZXJfbHVuLAotCQkJaW5zdGFuY2UtPmhvc3R0LT5zZ190YWJsZXNpemUsCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPyAieWVzIiA6ICJubyIsCi0jZW5kaWYKLQkJCWluc3RhbmNlLT5ob3N0dC0+dGhpc19pZCApOwotCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JcHJpbnRrKCJcbiIpOwotCi0JY2FsbGVkID0gMTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBhdGFyaV9zY3NpX3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqc2gpCitzdGF0aWMgaW50IGZhbGNvbl9nZXRfbG9jayhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAlpZiAoSVNfQV9UVCgpKQotCQlmcmVlX2lycShJUlFfVFRfTUZQX1NDU0ksIHNoKTsKLQlpZiAoYXRhcmlfZG1hX2J1ZmZlcikKLQkJYXRhcmlfc3RyYW1fZnJlZShhdGFyaV9kbWFfYnVmZmVyKTsKLQlOQ1I1MzgwX2V4aXQoc2gpOworCQlyZXR1cm4gMTsKKworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJcmV0dXJuIHN0ZG1hX3RyeV9sb2NrKHNjc2lfZmFsY29uX2ludHIsIGluc3RhbmNlKTsKKworCXN0ZG1hX2xvY2soc2NzaV9mYWxjb25faW50ciwgaW5zdGFuY2UpOwogCXJldHVybiAxOwogfQogCkBAIC03MzksNyArNDg1LDcgQEAKIHsKIAkvKiBGb3JtYXQgb2YgYXRhc2NzaSBwYXJhbWV0ZXIgaXM6CiAJICogICBhdGFzY3NpPTxjYW5fcXVldWU+LDxjbWRfcGVyX2x1bj4sPHNnX3RhYmxlc2l6ZT4sPGhvc3RpZD4sPHVzZV90YWdzPgotCSAqIERlZmF1bHRzIGRlcGVuZCBvbiBUVCBvciBGYWxjb24sIGhvc3RpZCBkZXRlcm1pbmVkIGF0IHJ1biB0aW1lLgorCSAqIERlZmF1bHRzIGRlcGVuZCBvbiBUVCBvciBGYWxjb24sIGRldGVybWluZWQgYXQgcnVuIHRpbWUuCiAJICogTmVnYXRpdmUgdmFsdWVzIG1lYW4gZG9uJ3QgY2hhbmdlLgogCSAqLwogCWludCBpbnRzWzZdOwpAQCAtNzUwLDM2ICs0OTYsMTcgQEAKIAkJcHJpbnRrKCJhdGFyaV9zY3NpX3NldHVwOiBubyBhcmd1bWVudHMhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCi0JaWYgKGludHNbMF0gPj0gMSkgewotCQlpZiAoaW50c1sxXSA+IDApCi0JCQkvKiBubyBsaW1pdHMgb24gdGhpcywganVzdCA+IDAgKi8KLQkJCXNldHVwX2Nhbl9xdWV1ZSA9IGludHNbMV07Ci0JfQotCWlmIChpbnRzWzBdID49IDIpIHsKLQkJaWYgKGludHNbMl0gPiAwKQotCQkJc2V0dXBfY21kX3Blcl9sdW4gPSBpbnRzWzJdOwotCX0KLQlpZiAoaW50c1swXSA+PSAzKSB7Ci0JCWlmIChpbnRzWzNdID49IDApIHsKLQkJCXNldHVwX3NnX3RhYmxlc2l6ZSA9IGludHNbM107Ci0JCQkvKiBNdXN0IGJlIDw9IFNHX0FMTCAoMjU1KSAqLwotCQkJaWYgKHNldHVwX3NnX3RhYmxlc2l6ZSA+IFNHX0FMTCkKLQkJCQlzZXR1cF9zZ190YWJsZXNpemUgPSBTR19BTEw7Ci0JCX0KLQl9Ci0JaWYgKGludHNbMF0gPj0gNCkgewotCQkvKiBNdXN0IGJlIGJldHdlZW4gMCBhbmQgNyAqLwotCQlpZiAoaW50c1s0XSA+PSAwICYmIGludHNbNF0gPD0gNykKLQkJCXNldHVwX2hvc3RpZCA9IGludHNbNF07Ci0JCWVsc2UgaWYgKGludHNbNF0gPiA3KQotCQkJcHJpbnRrKCJhdGFyaV9zY3NpX3NldHVwOiBpbnZhbGlkIGhvc3QgSUQgJWQgIVxuIiwgaW50c1s0XSk7Ci0JfQorCWlmIChpbnRzWzBdID49IDEpCisJCXNldHVwX2Nhbl9xdWV1ZSA9IGludHNbMV07CisJaWYgKGludHNbMF0gPj0gMikKKwkJc2V0dXBfY21kX3Blcl9sdW4gPSBpbnRzWzJdOworCWlmIChpbnRzWzBdID49IDMpCisJCXNldHVwX3NnX3RhYmxlc2l6ZSA9IGludHNbM107CisJaWYgKGludHNbMF0gPj0gNCkKKwkJc2V0dXBfaG9zdGlkID0gaW50c1s0XTsKICNpZmRlZiBTVVBQT1JUX1RBR1MKLQlpZiAoaW50c1swXSA+PSA1KSB7Ci0JCWlmIChpbnRzWzVdID49IDApCi0JCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSAhIWludHNbNV07Ci0JfQorCWlmIChpbnRzWzBdID49IDUpCisJCXNldHVwX3VzZV90YWdnZWRfcXVldWluZyA9IGludHNbNV07CiAjZW5kaWYKIAogCXJldHVybiAxOwpAQCAtNzg4LDQ1ICs1MTUsNiBAQAogX19zZXR1cCgiYXRhc2NzaT0iLCBhdGFyaV9zY3NpX3NldHVwKTsKICNlbmRpZiAvKiAhTU9EVUxFICovCiAKLXN0YXRpYyBpbnQgYXRhcmlfc2NzaV9idXNfcmVzZXQoU2NzaV9DbW5kICpjbWQpCi17Ci0JaW50IHJ2OwotCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9Ci0JCShzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQotCS8qIEZvciBkb2luZyB0aGUgcmVzZXQsIFNDU0kgaW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkIGZpcnN0LAotCSAqIHNpbmNlIHRoZSA1MzgwIHJhaXNlcyBpdHMgSVJRIGxpbmUgd2hpbGUgX1JTVCBpcyBhY3RpdmUgYW5kIHdlCi0JICogY2FuJ3QgZGlzYWJsZSBpbnRlcnJ1cHRzIGNvbXBsZXRlbHksIHNpbmNlIHdlIG5lZWQgdGhlIHRpbWVyLgotCSAqLwotCS8qIEFuZCBhYm9ydCBhIG1heWJlIGFjdGl2ZSBETUEgdHJhbnNmZXIgKi8KLQlpZiAoSVNfQV9UVCgpKSB7Ci0JCWF0YXJpX3R1cm5vZmZfaXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0jaWZkZWYgUkVBTF9ETUEKLQkJdHRfc2NzaV9kbWEuZG1hX2N0cmwgPSAwOwotI2VuZGlmIC8qIFJFQUxfRE1BICovCi0JfSBlbHNlIHsKLQkJYXRhcmlfdHVybm9mZl9pcnEoSVJRX01GUF9GU0NTSSk7Ci0jaWZkZWYgUkVBTF9ETUEKLQkJc3RfZG1hLmRtYV9tb2RlX3N0YXR1cyA9IDB4OTA7Ci0JCWF0YXJpX2RtYV9hY3RpdmUgPSAwOwotCQlhdGFyaV9kbWFfb3JpZ19hZGRyID0gTlVMTDsKLSNlbmRpZiAvKiBSRUFMX0RNQSAqLwotCX0KLQotCXJ2ID0gTkNSNTM4MF9idXNfcmVzZXQoY21kKTsKLQotCS8qIFJlLWVuYWJsZSBpbnRzICovCi0JaWYgKElTX0FfVFQoKSkgewotCQlhdGFyaV90dXJub25faXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0JfSBlbHNlIHsKLQkJYXRhcmlfdHVybm9uX2lycShJUlFfTUZQX0ZTQ1NJKTsKLQl9Ci0JaWYgKHJ2ID09IFNVQ0NFU1MpCi0JCWZhbGNvbl9yZWxlYXNlX2xvY2tfaWZfcG9zc2libGUoaG9zdGRhdGEpOwotCi0JcmV0dXJuIHJ2OwotfQotCiAKICNpZmRlZiBDT05GSUdfQVRBUklfU0NTSV9SRVNFVF9CT09UCiBzdGF0aWMgdm9pZCBfX2luaXQgYXRhcmlfc2NzaV9yZXNldF9ib290KHZvaWQpCkBAIC04NjAsMTUgKzU0OCw2IEBACiB9CiAjZW5kaWYKIAotCi1zdGF0aWMgY29uc3QgY2hhciAqYXRhcmlfc2NzaV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0JLyogYXRhcmlfc2NzaV9kZXRlY3QoKSBpcyB2ZXJib3NlIGVub3VnaC4uLiAqLwotCXN0YXRpYyBjb25zdCBjaGFyIHN0cmluZ1tdID0gIkF0YXJpIG5hdGl2ZSBTQ1NJIjsKLQlyZXR1cm4gc3RyaW5nOwotfQotCi0KICNpZiBkZWZpbmVkKFJFQUxfRE1BKQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhdGFyaV9zY3NpX2RtYV9zZXR1cChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKQEAgLTk0OSw3ICs2MjgsNyBAQAogI2RlZmluZQlDTURfU1VSRUxZX0JZVEVfTU9ERQkxCiAjZGVmaW5lCUNNRF9NT0RFX1VOS05PV04JCTIKIAotc3RhdGljIGludCBmYWxjb25fY2xhc3NpZnlfY21kKFNjc2lfQ21uZCAqY21kKQorc3RhdGljIGludCBmYWxjb25fY2xhc3NpZnlfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAl1bnNpZ25lZCBjaGFyIG9wY29kZSA9IGNtZC0+Y21uZFswXTsKIApAQCAtOTgxLDcgKzY2MCw3IEBACiAgKi8KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYXRhcmlfZG1hX3hmZXJfbGVuKHVuc2lnbmVkIGxvbmcgd2FudGVkX2xlbiwKLQkJCQkJU2NzaV9DbW5kICpjbWQsIGludCB3cml0ZV9mbGFnKQorCQkJCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCB3cml0ZV9mbGFnKQogewogCXVuc2lnbmVkIGxvbmcJcG9zc2libGVfbGVuLCBsaW1pdDsKIApAQCAtMTA5OSwyMyArNzc4LDI0NyBAQAogCiAjaW5jbHVkZSAiYXRhcmlfTkNSNTM4MC5jIgogCi1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgaW50IGF0YXJpX3Njc2lfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlpbnQgcnY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworI2lmZGVmIFJFQUxfRE1BCisJLyogQWJvcnQgYSBtYXliZSBhY3RpdmUgRE1BIHRyYW5zZmVyICovCisJaWYgKElTX0FfVFQoKSkgeworCQl0dF9zY3NpX2RtYS5kbWFfY3RybCA9IDA7CisJfSBlbHNlIHsKKwkJc3RfZG1hLmRtYV9tb2RlX3N0YXR1cyA9IDB4OTA7CisJCWF0YXJpX2RtYV9hY3RpdmUgPSAwOworCQlhdGFyaV9kbWFfb3JpZ19hZGRyID0gTlVMTDsKKwl9CisjZW5kaWYKKworCXJ2ID0gTkNSNTM4MF9idXNfcmVzZXQoY21kKTsKKworCS8qIFRoZSA1MzgwIHJhaXNlcyBpdHMgSVJRIGxpbmUgd2hpbGUgX1JTVCBpcyBhY3RpdmUgYnV0IHRoZSBTVCBETUEKKwkgKiAibG9jayIgaGFzIGJlZW4gcmVsZWFzZWQgc28gdGhpcyBpbnRlcnJ1cHQgbWF5IGVuZCB1cCBoYW5kbGVkIGJ5CisJICogZmxvcHB5IG9yIElERSBkcml2ZXIgKGlmIG9uZSBvZiB0aGVtIGhvbGRzIHRoZSBsb2NrKS4gVGhlIE5DUjUzODAKKwkgKiBpbnRlcnJ1cHQgZmxhZyBoYXMgYmVlbiBjbGVhcmVkIGFscmVhZHkuCisJICovCisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcnY7Cit9CisKKyNkZWZpbmUgRFJWX01PRFVMRV9OQU1FICAgICAgICAgImF0YXJpX3Njc2kiCisjZGVmaW5lIFBGWCAgICAgICAgICAgICAgICAgICAgIERSVl9NT0RVTEVfTkFNRSAiOiAiCisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGF0YXJpX3Njc2lfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCisJLnByb2NfbmFtZQkJPSBEUlZfTU9EVUxFX05BTUUsCiAJLnNob3dfaW5mbwkJPSBhdGFyaV9zY3NpX3Nob3dfaW5mbywKIAkubmFtZQkJCT0gIkF0YXJpIG5hdGl2ZSBTQ1NJIiwKLQkuZGV0ZWN0CQkJPSBhdGFyaV9zY3NpX2RldGVjdCwKLQkucmVsZWFzZQkJPSBhdGFyaV9zY3NpX3JlbGVhc2UsCiAJLmluZm8JCQk9IGF0YXJpX3Njc2lfaW5mbywKIAkucXVldWVjb21tYW5kCQk9IGF0YXJpX3Njc2lfcXVldWVfY29tbWFuZCwKIAkuZWhfYWJvcnRfaGFuZGxlcgk9IGF0YXJpX3Njc2lfYWJvcnQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyCT0gYXRhcmlfc2NzaV9idXNfcmVzZXQsCi0JLmNhbl9xdWV1ZQkJPSAwLCAvKiBpbml0aWFsaXplZCBhdCBydW4tdGltZSAqLwotCS50aGlzX2lkCQk9IDAsIC8qIGluaXRpYWxpemVkIGF0IHJ1bi10aW1lICovCi0JLnNnX3RhYmxlc2l6ZQkJPSAwLCAvKiBpbml0aWFsaXplZCBhdCBydW4tdGltZSAqLwotCS5jbWRfcGVyX2x1bgkJPSAwLCAvKiBpbml0aWFsaXplZCBhdCBydW4tdGltZSAqLworCS50aGlzX2lkCQk9IDcsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IERJU0FCTEVfQ0xVU1RFUklORwogfTsKIAorc3RhdGljIGludCBfX2luaXQgYXRhcmlfc2NzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOworCWludCBlcnJvcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlycTsKKwlpbnQgaG9zdF9mbGFncyA9IDA7CiAKLSNpbmNsdWRlICJzY3NpX21vZHVsZS5jIgorCWlycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcnEpCisJCXJldHVybiAtRU5PREVWOwogCisJaWYgKEFUQVJJSFdfUFJFU0VOVChUVF9TQ1NJKSkgeworCQlhdGFyaV9zY3NpX3JlZ19yZWFkICA9IGF0YXJpX3Njc2lfdHRfcmVnX3JlYWQ7CisJCWF0YXJpX3Njc2lfcmVnX3dyaXRlID0gYXRhcmlfc2NzaV90dF9yZWdfd3JpdGU7CisJfSBlbHNlIHsKKwkJYXRhcmlfc2NzaV9yZWdfcmVhZCAgPSBhdGFyaV9zY3NpX2ZhbGNvbl9yZWdfcmVhZDsKKwkJYXRhcmlfc2NzaV9yZWdfd3JpdGUgPSBhdGFyaV9zY3NpX2ZhbGNvbl9yZWdfd3JpdGU7CisJfQorCisJLyogVGhlIHZhbHVlcyBmb3IgQ01EX1BFUl9MVU4gYW5kIENBTl9RVUVVRSBhcmUgc29tZWhvdyBhcmJpdHJhcnkuCisJICogSGlnaGVyIHZhbHVlcyBzaG91bGQgd29yaywgdG9vOyB0cnkgaXQhCisJICogKEJ1dCBjbWRfcGVyX2x1biBjb3N0cyBtZW1vcnkhKQorCSAqCisJICogQnV0IHRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIHNvbWV3aGVyZSB0aGF0IHJlcXVpcmVzIENBTl9RVUVVRSB0byBiZQorCSAqIDIqQ01EX1BFUl9MVU4uIEF0IGxlYXN0IG9uIGEgVFQsIG5vIHNwdXJpb3VzIHRpbWVvdXRzIHNlZW4gc2luY2UKKwkgKiBjaGFuZ2VkIENNRF9QRVJfTFVOLi4uCisJICoKKwkgKiBOb3RlOiBUaGUgRmFsY29uIGN1cnJlbnRseSB1c2VzIDgvMSBzZXR0aW5nIGR1ZSB0byB1bnNvbHZlZCBwcm9ibGVtcworCSAqIHdpdGggY21kX3Blcl9sdW4gIT0gMQorCSAqLworCWlmIChBVEFSSUhXX1BSRVNFTlQoVFRfU0NTSSkpIHsKKwkJYXRhcmlfc2NzaV90ZW1wbGF0ZS5jYW5fcXVldWUgICAgPSAxNjsKKwkJYXRhcmlfc2NzaV90ZW1wbGF0ZS5jbWRfcGVyX2x1biAgPSA4OworCQlhdGFyaV9zY3NpX3RlbXBsYXRlLnNnX3RhYmxlc2l6ZSA9IFNHX0FMTDsKKwl9IGVsc2UgeworCQlhdGFyaV9zY3NpX3RlbXBsYXRlLmNhbl9xdWV1ZSAgICA9IDg7CisJCWF0YXJpX3Njc2lfdGVtcGxhdGUuY21kX3Blcl9sdW4gID0gMTsKKwkJYXRhcmlfc2NzaV90ZW1wbGF0ZS5zZ190YWJsZXNpemUgPSBTR19OT05FOworCX0KKworCWlmIChzZXR1cF9jYW5fcXVldWUgPiAwKQorCQlhdGFyaV9zY3NpX3RlbXBsYXRlLmNhbl9xdWV1ZSA9IHNldHVwX2Nhbl9xdWV1ZTsKKworCWlmIChzZXR1cF9jbWRfcGVyX2x1biA+IDApCisJCWF0YXJpX3Njc2lfdGVtcGxhdGUuY21kX3Blcl9sdW4gPSBzZXR1cF9jbWRfcGVyX2x1bjsKKworCS8qIExlYXZlIHNnX3RhYmxlc2l6ZSBhdCAwIG9uIGEgRmFsY29uISAqLworCWlmIChBVEFSSUhXX1BSRVNFTlQoVFRfU0NTSSkgJiYgc2V0dXBfc2dfdGFibGVzaXplID49IDApCisJCWF0YXJpX3Njc2lfdGVtcGxhdGUuc2dfdGFibGVzaXplID0gc2V0dXBfc2dfdGFibGVzaXplOworCisJaWYgKHNldHVwX2hvc3RpZCA+PSAwKSB7CisJCWF0YXJpX3Njc2lfdGVtcGxhdGUudGhpc19pZCA9IHNldHVwX2hvc3RpZCAmIDc7CisJfSBlbHNlIHsKKwkJLyogVGVzdCBpZiBhIGhvc3QgaWQgaXMgc2V0IGluIHRoZSBOVlJhbSAqLworCQlpZiAoQVRBUklIV19QUkVTRU5UKFRUX0NMSykgJiYgbnZyYW1fY2hlY2tfY2hlY2tzdW0oKSkgeworCQkJdW5zaWduZWQgY2hhciBiID0gbnZyYW1fcmVhZF9ieXRlKDE0KTsKKworCQkJLyogQXJiaXRyYXRpb24gZW5hYmxlZD8gKGZvciBUT1MpCisJCQkgKiBJZiB5ZXMsIHVzZSBjb25maWd1cmVkIGhvc3QgSUQKKwkJCSAqLworCQkJaWYgKGIgJiAweDgwKQorCQkJCWF0YXJpX3Njc2lfdGVtcGxhdGUudGhpc19pZCA9IGIgJiA3OworCQl9CisJfQorCisKKyNpZmRlZiBSRUFMX0RNQQorCS8qIElmIHJ1bm5pbmcgb24gYSBGYWxjb24gYW5kIGlmIHRoZXJlJ3MgVFQtUmFtIChpLmUuLCBtb3JlIHRoYW4gb25lCisJICogbWVtb3J5IGJsb2NrLCBzaW5jZSB0aGVyZSdzIGFsd2F5cyBTVC1SYW0gaW4gYSBGYWxjb24pLCB0aGVuCisJICogYWxsb2NhdGUgYSBTVFJBTV9CVUZGRVJfU0laRSBieXRlIGRyaWJibGUgYnVmZmVyIGZvciB0cmFuc2ZlcnMKKwkgKiBmcm9tL3RvIGFsdGVybmF0aXZlIFJhbS4KKwkgKi8KKwlpZiAoQVRBUklIV19QUkVTRU5UKFNUX1NDU0kpICYmICFBVEFSSUhXX1BSRVNFTlQoRVhURF9ETUEpICYmCisJICAgIG02OGtfbnVtX21lbW9yeSA+IDEpIHsKKwkJYXRhcmlfZG1hX2J1ZmZlciA9IGF0YXJpX3N0cmFtX2FsbG9jKFNUUkFNX0JVRkZFUl9TSVpFLCAiU0NTSSIpOworCQlpZiAoIWF0YXJpX2RtYV9idWZmZXIpIHsKKwkJCXByX2VycihQRlggImNhbid0IGFsbG9jYXRlIFNULVJBTSBkb3VibGUgYnVmZmVyXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWF0YXJpX2RtYV9waHlzX2J1ZmZlciA9IGF0YXJpX3N0cmFtX3RvX3BoeXMoYXRhcmlfZG1hX2J1ZmZlcik7CisJCWF0YXJpX2RtYV9vcmlnX2FkZHIgPSAwOworCX0KKyNlbmRpZgorCisJaW5zdGFuY2UgPSBzY3NpX2hvc3RfYWxsb2MoJmF0YXJpX3Njc2lfdGVtcGxhdGUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhKSk7CisJaWYgKCFpbnN0YW5jZSkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9hbGxvYzsKKwl9CisJYXRhcmlfc2NzaV9ob3N0ID0gaW5zdGFuY2U7CisKKyNpZmRlZiBDT05GSUdfQVRBUklfU0NTSV9SRVNFVF9CT09UCisJYXRhcmlfc2NzaV9yZXNldF9ib290KCk7CisjZW5kaWYKKworCWluc3RhbmNlLT5pcnEgPSBpcnEtPnN0YXJ0OworCisJaG9zdF9mbGFncyB8PSBJU19BX1RUKCkgPyAwIDogRkxBR19MQVRFX0RNQV9TRVRVUDsKKworI2lmZGVmIFNVUFBPUlRfVEFHUworCWhvc3RfZmxhZ3MgfD0gc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID4gMCA/IEZMQUdfVEFHR0VEX1FVRVVJTkcgOiAwOworI2VuZGlmCisKKwlOQ1I1MzgwX2luaXQoaW5zdGFuY2UsIGhvc3RfZmxhZ3MpOworCisJaWYgKElTX0FfVFQoKSkgeworCQllcnJvciA9IHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIHNjc2lfdHRfaW50ciwgMCwKKwkJICAgICAgICAgICAgICAgICAgICAiTkNSNTM4MCIsIGluc3RhbmNlKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoUEZYICJyZXF1ZXN0IGlycSAlZCBmYWlsZWQsIGFib3J0aW5nXG4iLAorCQkJICAgICAgIGluc3RhbmNlLT5pcnEpOworCQkJZ290byBmYWlsX2lycTsKKwkJfQorCQl0dF9tZnAuYWN0aXZlX2VkZ2UgfD0gMHg4MDsJLyogU0NTSSBpbnQgb24gTC0+SCAqLworI2lmZGVmIFJFQUxfRE1BCisJCXR0X3Njc2lfZG1hLmRtYV9jdHJsID0gMDsKKwkJYXRhcmlfZG1hX3Jlc2lkdWFsID0gMDsKKworCQkvKiBXaGlsZSB0aGUgcmVhZCBvdmVycnVucyAoZGVzY3JpYmVkIGJ5IERyZXcgRWNraGFyZHQgaW4KKwkJICogTkNSNTM4MC5jKSBuZXZlciBoYXBwZW5lZCBvbiBUVHMsIHRoZXkgZG8gaW4gZmFjdCBvbiB0aGUKKwkJICogTWVkdXNhIChUaGlzIHdhcyB0aGUgY2F1c2Ugd2h5IFNDU0kgZGlkbid0IHdvcmsgcmlnaHQgZm9yCisJCSAqIHNvIGxvbmcgdGhlcmUuKSBTaW5jZSBoYW5kbGluZyB0aGUgb3ZlcnJ1bnMgc2xvd3MgZG93bgorCQkgKiBhIGJpdCwgSSB0dXJuZWQgdGhlICNpZmRlZidzIGludG8gYSBydW50aW1lIGNvbmRpdGlvbi4KKwkJICoKKwkJICogSW4gcHJpbmNpcGxlIGl0IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGRvIG1heC4gMSBieXRlIHdpdGgKKwkJICogUElPLCBidXQgdGhlcmUgaXMgYW5vdGhlciBwcm9ibGVtIG9uIHRoZSBNZWR1c2Egd2l0aCB0aGUgRE1BCisJCSAqIHJlc3QgZGF0YSByZWdpc3Rlci4gU28gcmVhZF9vdmVycnVucyBpcyBjdXJyZW50bHkgc2V0CisJCSAqIHRvIDQgdG8gYXZvaWQgaGF2aW5nIHRyYW5zZmVycyB0aGF0IGFyZW4ndCBhIG11bHRpcGxlIG9mIDQuCisJCSAqIElmIHRoZSByZXN0IGRhdGEgYnVnIGlzIGZpeGVkLCB0aGlzIGNhbiBiZSBsb3dlcmVkIHRvIDEuCisJCSAqLworCQlpZiAoTUFDSF9JU19NRURVU0EpIHsKKwkJCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9CisJCQkJc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwkJCWhvc3RkYXRhLT5yZWFkX292ZXJydW5zID0gNDsKKwkJfQorI2VuZGlmCisJfSBlbHNlIHsKKwkJLyogTm90aGluZyB0byBkbyBmb3IgdGhlIGludGVycnVwdDogdGhlIFNULURNQSBpcyBpbml0aWFsaXplZAorCQkgKiBhbHJlYWR5LgorCQkgKi8KKyNpZmRlZiBSRUFMX0RNQQorCQlhdGFyaV9kbWFfcmVzaWR1YWwgPSAwOworCQlhdGFyaV9kbWFfYWN0aXZlID0gMDsKKwkJYXRhcmlfZG1hX3N0cmFtX21hc2sgPSAoQVRBUklIV19QUkVTRU5UKEVYVERfRE1BKSA/IDB4MDAwMDAwMDAKKwkJCQkJOiAweGZmMDAwMDAwKTsKKyNlbmRpZgorCX0KKworCWVycm9yID0gc2NzaV9hZGRfaG9zdChpbnN0YW5jZSwgTlVMTCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxfaG9zdDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluc3RhbmNlKTsKKworCXNjc2lfc2Nhbl9ob3N0KGluc3RhbmNlKTsKKwlyZXR1cm4gMDsKKworZmFpbF9ob3N0OgorCWlmIChJU19BX1RUKCkpCisJCWZyZWVfaXJxKGluc3RhbmNlLT5pcnEsIGluc3RhbmNlKTsKK2ZhaWxfaXJxOgorCU5DUjUzODBfZXhpdChpbnN0YW5jZSk7CisJc2NzaV9ob3N0X3B1dChpbnN0YW5jZSk7CitmYWlsX2FsbG9jOgorCWlmIChhdGFyaV9kbWFfYnVmZmVyKQorCQlhdGFyaV9zdHJhbV9mcmVlKGF0YXJpX2RtYV9idWZmZXIpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2V4aXQgYXRhcmlfc2NzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc2NzaV9yZW1vdmVfaG9zdChpbnN0YW5jZSk7CisJaWYgKElTX0FfVFQoKSkKKwkJZnJlZV9pcnEoaW5zdGFuY2UtPmlycSwgaW5zdGFuY2UpOworCU5DUjUzODBfZXhpdChpbnN0YW5jZSk7CisJc2NzaV9ob3N0X3B1dChpbnN0YW5jZSk7CisJaWYgKGF0YXJpX2RtYV9idWZmZXIpCisJCWF0YXJpX3N0cmFtX2ZyZWUoYXRhcmlfZG1hX2J1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0YXJpX3Njc2lfZHJpdmVyID0geworCS5yZW1vdmUgPSBfX2V4aXRfcChhdGFyaV9zY3NpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSBEUlZfTU9EVUxFX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKGF0YXJpX3Njc2lfZHJpdmVyLCBhdGFyaV9zY3NpX3Byb2JlKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9NT0RVTEVfTkFNRSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5oIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5OWQ5MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIGF0YXJpX3Njc2kuaCAtLSBIZWFkZXIgZmlsZSBmb3IgdGhlIEF0YXJpIG5hdGl2ZSBTQ1NJIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAxOTk0IFJvbWFuIEhvZGVrIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLSAqCi0gKiAoTG9vc2VseSBiYXNlZCBvbiB0aGUgd29yayBvZiBSb2JlcnQgRGUgVnJpZXMnIHRlYW0pCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0KLSNpZm5kZWYgQVRBUklfU0NTSV9ICi0jZGVmaW5lIEFUQVJJX1NDU0lfSAotCi0vKiAoSV9IQVZFX09WRVJSVU5TIHN0dWZmIHJlbW92ZWQpICovCi0KLSNpZm5kZWYgQVNNCi0vKiBUaGUgdmFsdWVzIGZvciBDTURfUEVSX0xVTiBhbmQgQ0FOX1FVRVVFIGFyZSBzb21laG93IGFyYml0cmFyeS4gSGlnaGVyCi0gKiB2YWx1ZXMgc2hvdWxkIHdvcmssIHRvbzsgdHJ5IGl0ISAoYnV0IGNtZF9wZXJfbHVuIGNvc3RzIG1lbW9yeSEpICovCi0KLS8qIEJ1dCB0aGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyBzb21ld2hlcmUgdGhhdCByZXF1aXJlcyBDQU5fUVVFVUUgdG8gYmUKLSAqIDIqQ01EX1BFUl9MVU4uIEF0IGxlYXN0IG9uIGEgVFQsIG5vIHNwdXJpb3VzIHRpbWVvdXRzIHNlZW4gc2luY2UKLSAqIGNoYW5nZWQgQ01EX1BFUl9MVU4uLi4gKi8KLQotLyogTm90ZTogVGhlIEZhbGNvbiBjdXJyZW50bHkgdXNlcyA4LzEgc2V0dGluZyBkdWUgdG8gdW5zb2x2ZWQgcHJvYmxlbXMgd2l0aAotICogY21kX3Blcl9sdW4gIT0gMSAqLwotCi0jZGVmaW5lIEFUQVJJX1RUX0NBTl9RVUVVRQkJMTYKLSNkZWZpbmUgQVRBUklfVFRfQ01EX1BFUl9MVU4JCTgKLSNkZWZpbmUgQVRBUklfVFRfU0dfVEFCTEVTSVpFCQlTR19BTEwKLQotI2RlZmluZSBBVEFSSV9GQUxDT05fQ0FOX1FVRVVFCQk4Ci0jZGVmaW5lIEFUQVJJX0ZBTENPTl9DTURfUEVSX0xVTgkxCi0jZGVmaW5lIEFUQVJJX0ZBTENPTl9TR19UQUJMRVNJWkUJU0dfTk9ORQotCi0jZGVmaW5lCURFRkFVTFRfVVNFX1RBR0dFRF9RVUVVSU5HCTAKLQotCi0jZGVmaW5lCU5DUjUzODBfaW1wbGVtZW50YXRpb25fZmllbGRzCS8qIG5vbmUgKi8KLQotI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKQkJICBhdGFyaV9zY3NpX3JlZ19yZWFkKCByZWcgKQotI2RlZmluZSBOQ1I1MzgwX3dyaXRlKHJlZywgdmFsdWUpIGF0YXJpX3Njc2lfcmVnX3dyaXRlKCByZWcsIHZhbHVlICkKLQotI2RlZmluZSBOQ1I1MzgwX2ludHIgYXRhcmlfc2NzaV9pbnRyCi0jZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZCBhdGFyaV9zY3NpX3F1ZXVlX2NvbW1hbmQKLSNkZWZpbmUgTkNSNTM4MF9hYm9ydCBhdGFyaV9zY3NpX2Fib3J0Ci0jZGVmaW5lIE5DUjUzODBfc2hvd19pbmZvIGF0YXJpX3Njc2lfc2hvd19pbmZvCi0jZGVmaW5lIE5DUjUzODBfZG1hX3JlYWRfc2V0dXAoaW5zdCxkLGMpIGF0YXJpX3Njc2lfZG1hX3NldHVwIChpbnN0LCBkLCBjLCAwKQotI2RlZmluZSBOQ1I1MzgwX2RtYV93cml0ZV9zZXR1cChpbnN0LGQsYykgYXRhcmlfc2NzaV9kbWFfc2V0dXAgKGluc3QsIGQsIGMsIDEpCi0jZGVmaW5lIE5DUjUzODBfZG1hX3Jlc2lkdWFsKGluc3QpIGF0YXJpX3Njc2lfZG1hX3Jlc2lkdWFsKCBpbnN0ICkKLSNkZWZpbmUJTkNSNTM4MF9kbWFfeGZlcl9sZW4oaSxjbWQscGhhc2UpIFwKLQlhdGFyaV9kbWFfeGZlcl9sZW4oY21kLT5TQ3AudGhpc19yZXNpZHVhbCxjbWQsKChwaGFzZSkgJiBTUl9JTykgPyAwIDogMSkKLQotI2VuZGlmIC8qIG5kZWYgQVNNICovCi0jZW5kaWYgLyogQVRBUklfU0NTSV9IICovCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKaW5kZXggMzBkNzRhMC4uZjMxOTM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCkBAIC01NTYsNyArNTU2LDcgQEAKIAkubmFtZSA9ICJFbXVsZXggMTBHYmUgb3Blbi1pc2NzaSBJbml0aWF0b3IgRHJpdmVyIiwKIAkucHJvY19uYW1lID0gRFJWX05BTUUsCiAJLnF1ZXVlY29tbWFuZCA9IGlzY3NpX3F1ZXVlY29tbWFuZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuc2xhdmVfY29uZmlndXJlID0gYmVpc2NzaV9zbGF2ZV9jb25maWd1cmUsCiAJLnRhcmdldF9hbGxvYyA9IGlzY3NpX3RhcmdldF9hbGxvYywKIAkuZWhfYWJvcnRfaGFuZGxlciA9IGJlaXNjc2lfZWhfYWJvcnQsCkBAIC01NzAsNyArNTcwLDcgQEAKIAkuY21kX3Blcl9sdW4gPSBCRUlTQ1NJX0NNRF9QRVJfTFVOLAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS52ZW5kb3JfaWQgPSBTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IEJFX1ZFTkRPUl9JRCwKLQorCS50cmFja19xdWV1ZV9kZXB0aCA9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZWlzY3NpX3Njc2lfdHJhbnNwb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2RlYnVnZnMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kZWJ1Z2ZzLmMKaW5kZXggOGU4M2QwNC4uNzRhMzA3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZGVidWdmcy5jCkBAIC0yNjAsMTggKzI2MCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICprZXJuX2J1ZjsKIAotCWtlcm5fYnVmID0ga3phbGxvYyhuYnl0ZXMsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFrZXJuX2J1ZikgewotCQlwcmludGsoS0VSTl9JTkZPICJiZmFkWyVkXTogRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlclxuIiwKLQkJCQliZmFkLT5pbnN0X25vKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGtlcm5fYnVmLCAodm9pZCAgX191c2VyICopYnVmLCBuYnl0ZXMpKSB7Ci0JCWtmcmVlKGtlcm5fYnVmKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWtlcm5fYnVmID0gbWVtZHVwX3VzZXIoYnVmLCBuYnl0ZXMpOworCWlmIChJU19FUlIoa2Vybl9idWYpKQorCQlyZXR1cm4gUFRSX0VSUihrZXJuX2J1Zik7CiAKIAlyYyA9IHNzY2FuZihrZXJuX2J1ZiwgIiV4OiV4IiwgJmFkZHIsICZsZW4pOwogCWlmIChyYyA8IDIpIHsKQEAgLTMzNiwxOCArMzI3LDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgKmtlcm5fYnVmOwogCi0Ja2Vybl9idWYgPSBremFsbG9jKG5ieXRlcywgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWtlcm5fYnVmKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImJmYWRbJWRdOiBGYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyXG4iLAotCQkJCWJmYWQtPmluc3Rfbm8pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoa2Vybl9idWYsICh2b2lkICBfX3VzZXIgKilidWYsIG5ieXRlcykpIHsKLQkJa2ZyZWUoa2Vybl9idWYpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJa2Vybl9idWYgPSBtZW1kdXBfdXNlcihidWYsIG5ieXRlcyk7CisJaWYgKElTX0VSUihrZXJuX2J1ZikpCisJCXJldHVybiBQVFJfRVJSKGtlcm5fYnVmKTsKIAogCXJjID0gc3NjYW5mKGtlcm5fYnVmLCAiJXg6JXgiLCAmYWRkciwgJnZhbCk7CiAJaWYgKHJjIDwgMikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwppbmRleCBmMDY3MzMyLi43MjIzYjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwpAQCAtNzc2LDExICs3NzYsNyBAQAogc3RhdGljIGludAogYmZhZF9pbV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBiZmFfbHVuX3F1ZXVlX2RlcHRoKTsKLQllbHNlCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgYmZhX2x1bl9xdWV1ZV9kZXB0aCk7Ci0KKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBiZmFfbHVuX3F1ZXVlX2RlcHRoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODA0LDYgKzgwMCw3IEBACiAJLnNob3N0X2F0dHJzID0gYmZhZF9pbV9ob3N0X2F0dHJzLAogCS5tYXhfc2VjdG9ycyA9IEJGQURfTUFYX1NFQ1RPUlMsCiAJLnZlbmRvcl9pZCA9IEJGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsCisJLnVzZV9ibGtfdGFncyA9IDEsCiB9OwogCiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGJmYWRfaW1fdnBvcnRfdGVtcGxhdGUgPSB7CkBAIC04MjUsNiArODIyLDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuc2hvc3RfYXR0cnMgPSBiZmFkX2ltX3Zwb3J0X2F0dHJzLAogCS5tYXhfc2VjdG9ycyA9IEJGQURfTUFYX1NFQ1RPUlMsCisJLnVzZV9ibGtfdGFncyA9IDEsCiB9OwogCiBiZmFfc3RhdHVzX3QKQEAgLTg2OCwxNCArODY2LDggQEAKIAkJCWlmIChiZmFfbHVuX3F1ZXVlX2RlcHRoID4gdG1wX3NkZXYtPnF1ZXVlX2RlcHRoKSB7CiAJCQkJaWYgKHRtcF9zZGV2LT5pZCAhPSBzZGV2LT5pZCkKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKHRtcF9zZGV2LT5vcmRlcmVkX3RhZ3MpCi0JCQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHRtcF9zZGV2LAotCQkJCQkJTVNHX09SREVSRURfVEFHLAotCQkJCQkJdG1wX3NkZXYtPnF1ZXVlX2RlcHRoICsgMSk7Ci0JCQkJZWxzZQotCQkJCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCh0bXBfc2RldiwKLQkJCQkJCU1TR19TSU1QTEVfVEFHLAotCQkJCQkJdG1wX3NkZXYtPnF1ZXVlX2RlcHRoICsgMSk7CisJCQkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgodG1wX3NkZXYsCisJCQkJCXRtcF9zZGV2LT5xdWV1ZV9kZXB0aCArIDEpOwogCiAJCQkJaXRuaW0tPmxhc3RfcmFtcF91cF90aW1lID0gamlmZmllczsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYwppbmRleCA3MjUzM2M1Li5lODYxZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jCkBAIC0xMDg4LDcgKzEwODgsNyBAQAogCW11dGV4X3VubG9jaygmYm54MmZjX2Rldl9sb2NrKTsKIAlydG5sX3VubG9jaygpOwogCi0JaWYgKElTX0VSUih2bl9wb3J0KSkgeworCWlmICghdm5fcG9ydCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJibngyZmNfdnBvcnRfY3JlYXRlICglcykgZmFpbGVkXG4iLAogCQkJbmV0ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FSU87CkBAIC0yMjAyLDYgKzIyMDIsNyBAQAogCWludGVyZmFjZSA9IGJueDJmY19pbnRlcmZhY2VfY3JlYXRlKGhiYSwgbmV0ZGV2LCBmaXBfbW9kZSk7CiAJaWYgKCFpbnRlcmZhY2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYm54MmZjX2ludGVyZmFjZV9jcmVhdGUgZmFpbGVkXG4iKTsKKwkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGlmcHV0X2VycjsKIAl9CiAKQEAgLTI3OTAsMTMgKzI3OTEsMTUgQEAKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIgPSBibngyZmNfZWhfdGFyZ2V0X3Jlc2V0LCAvKiB0Z3QgcmVzZXQgKi8KIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCT0gZmNfZWhfaG9zdF9yZXNldCwKIAkuc2xhdmVfYWxsb2MJCT0gZmNfc2xhdmVfYWxsb2MsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJPSBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZAkJPSAtMSwKIAkuY21kX3Blcl9sdW4JCT0gMywKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNnX3RhYmxlc2l6ZQkJPSBCTlgyRkNfTUFYX0JEU19QRVJfQ01ELAogCS5tYXhfc2VjdG9ycwkJPSAxMDI0LAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBsaWJmY19mdW5jdGlvbl90ZW1wbGF0ZSBibngyZmNfbGliZmNfZmNuX3RlbXBsID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2lvLmMKaW5kZXggNWI5OTg0NC4uNGI1Njg1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jCkBAIC0xNzI1LDcgKzE3MjUsNiBAQAogCQkJCSAgc3RydWN0IGZjcF9jbW5kICpmY3BfY21uZCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY19jbWQgPSBpb19yZXEtPnNjX2NtZDsKLQljaGFyIHRhZ1syXTsKIAogCW1lbXNldChmY3BfY21uZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCkpOwogCkBAIC0xNzM5LDIxICsxNzM4LDEwIEBACiAJZmNwX2NtbmQtPmZjX3RtX2ZsYWdzID0gaW9fcmVxLT5tcF9yZXEudG1fZmxhZ3M7CiAJZmNwX2NtbmQtPmZjX2ZsYWdzID0gaW9fcmVxLT5pb19yZXFfZmxhZ3M7CiAKLQlpZiAoc2NzaV9wb3B1bGF0ZV90YWdfbXNnKHNjX2NtZCwgdGFnKSkgewotCQlzd2l0Y2ggKHRhZ1swXSkgewotCQljYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgotCQkJZmNwX2NtbmQtPmZjX3ByaV90YSA9IEZDUF9QVEFfSEVBRFE7Ci0JCQlicmVhazsKLQkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJCWZjcF9jbW5kLT5mY19wcmlfdGEgPSBGQ1BfUFRBX09SREVSRUQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWZjcF9jbW5kLT5mY19wcmlfdGEgPSBGQ1BfUFRBX1NJTVBMRTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKKwlpZiAoc2NfY21kLT5mbGFncyAmIFNDTURfVEFHR0VEKQorCQlmY3BfY21uZC0+ZmNfcHJpX3RhID0gRkNQX1BUQV9TSU1QTEU7CisJZWxzZQogCQlmY3BfY21uZC0+ZmNfcHJpX3RhID0gMDsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJmY19wYXJzZV9mY3BfcnNwKHN0cnVjdCBibngyZmNfY21kICppb19yZXEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCmluZGV4IDdhMzYzODguLmU1MzA3OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCkBAIC0yMjU5LDcgKzIyNTksNyBAQAogCS5laF9hYm9ydF9oYW5kbGVyCT0gaXNjc2lfZWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAogCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX3JlY292ZXJfdGFyZ2V0LAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS50YXJnZXRfYWxsb2MJCT0gaXNjc2lfdGFyZ2V0X2FsbG9jLAogCS5jYW5fcXVldWUJCT0gMjA0OCwKIAkubWF4X3NlY3RvcnMJCT0gMTI3LApAQCAtMjI2OCw2ICsyMjY4LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNnX3RhYmxlc2l6ZQkJPSBJU0NTSV9NQVhfQkRTX1BFUl9DTUQsCiAJLnNob3N0X2F0dHJzCQk9IGJueDJpX2Rldl9hdHRyaWJ1dGVzLAorCS50cmFja19xdWV1ZV9kZXB0aAk9IDEsCiB9OwogCiBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGJueDJpX2lzY3NpX3RyYW5zcG9ydCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jaC5jIGIvZHJpdmVycy9zY3NpL2NoLmMKaW5kZXggZWY1YWUwZC4uNmJhYzhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NoLmMKKysrIGIvZHJpdmVycy9zY3NpL2NoLmMKQEAgLTg1LDggKzg1LDcgQEAKIC8vIG1vZHVsZV9wYXJhbV9zdHJpbmdfYXJyYXkodmVuZG9yX2xhYmVscywgTlVMTCwgMDQ0NCk7CiAKICNkZWZpbmUgY2hfcHJpbnRrKHByZWZpeCwgY2gsIGZtdCwgYS4uLikgXAotCXNkZXZfcHJpbnRrKHByZWZpeCwgKGNoKS0+ZGV2aWNlLCAiWyVzXSAiIGZtdCwgXAotCQkgICAgKGNoKS0+bmFtZSwgIyNhKQorCXNkZXZfcHJlZml4X3ByaW50ayhwcmVmaXgsIChjaCktPmRldmljZSwgKGNoKS0+bmFtZSwgZm10LCAjI2EpCiAKICNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZy4uLikJCQkJCQlcCiBkbyB7CQkJCQkJCQkJXApAQCAtMTgzLDcgKzE4Miw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNoX2RvX3Njc2koc2NzaV9jaGFuZ2VyICpjaCwgdW5zaWduZWQgY2hhciAqY21kLAorY2hfZG9fc2NzaShzY3NpX2NoYW5nZXIgKmNoLCB1bnNpZ25lZCBjaGFyICpjbWQsIGludCBjbWRfbGVuLAogCSAgIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgYnVmbGVuZ3RoLAogCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKQEAgLTE5Nyw3ICsxOTYsNyBAQAogCWVycm5vID0gMDsKIAlpZiAoZGVidWcpIHsKIAkJRFBSSU5USygiY29tbWFuZDogIik7Ci0JCV9fc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CisJCV9fc2NzaV9wcmludF9jb21tYW5kKGNtZCwgY21kX2xlbik7CiAJfQogCiAJcmVzdWx0ID0gc2NzaV9leGVjdXRlX3JlcShjaC0+ZGV2aWNlLCBjbWQsIGRpcmVjdGlvbiwgYnVmZmVyLApAQCAtMjA3LDcgKzIwNiw3IEBACiAJRFBSSU5USygicmVzdWx0OiAweCV4XG4iLHJlc3VsdCk7CiAJaWYgKGRyaXZlcl9ieXRlKHJlc3VsdCkgJiBEUklWRVJfU0VOU0UpIHsKIAkJaWYgKGRlYnVnKQotCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoY2gtPm5hbWUsICZzc2hkcik7CisJCQlzY3NpX3ByaW50X3NlbnNlX2hkcihjaC0+ZGV2aWNlLCBjaC0+bmFtZSwgJnNzaGRyKTsKIAkJZXJybm8gPSBjaF9maW5kX2Vycm5vKCZzc2hkcik7CiAKIAkJc3dpdGNoKHNzaGRyLnNlbnNlX2tleSkgewpAQCAtMjU4LDcgKzI1Nyw4IEBACiAJY21kWzNdID0gZWxlbSAgICAgICAgJiAweGZmOwogCWNtZFs1XSA9IDE7CiAJY21kWzldID0gMjU1OwotCWlmICgwID09IChyZXN1bHQgPSBjaF9kb19zY3NpKGNoLCBjbWQsIGJ1ZmZlciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpKSkgeworCWlmICgwID09IChyZXN1bHQgPSBjaF9kb19zY3NpKGNoLCBjbWQsIDEyLAorCQkJCSAgICAgIGJ1ZmZlciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpKSkgewogCQlpZiAoKChidWZmZXJbMTZdIDw8IDgpIHwgYnVmZmVyWzE3XSkgIT0gZWxlbSkgewogCQkJRFBSSU5USygiYXNrZWQgZm9yIGVsZW1lbnQgMHglMDJ4LCBnb3QgMHglMDJ4XG4iLAogCQkJCWVsZW0sKGJ1ZmZlclsxNl0gPDwgOCkgfCBidWZmZXJbMTddKTsKQEAgLTI4OCw3ICsyODgsNyBAQAogCW1lbXNldChjbWQsMCxzaXplb2YoY21kKSk7CiAJY21kWzBdID0gSU5JVElBTElaRV9FTEVNRU5UX1NUQVRVUzsKIAljbWRbMV0gPSAoY2gtPmRldmljZS0+bHVuICYgMHg3KSA8PCA1OwotCWVyciA9IGNoX2RvX3Njc2koY2gsIGNtZCwgTlVMTCwgMCwgRE1BX05PTkUpOworCWVyciA9IGNoX2RvX3Njc2koY2gsIGNtZCwgNiwgTlVMTCwgMCwgRE1BX05PTkUpOwogCVZQUklOVEsoS0VSTl9JTkZPLCAiLi4uIGZpbmlzaGVkXG4iKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzEwLDEwICszMTAsMTAgQEAKIAljbWRbMV0gPSAoY2gtPmRldmljZS0+bHVuICYgMHg3KSA8PCA1OwogCWNtZFsyXSA9IDB4MWQ7CiAJY21kWzRdID0gMjU1OwotCXJlc3VsdCA9IGNoX2RvX3Njc2koY2gsIGNtZCwgYnVmZmVyLCAyNTUsIERNQV9GUk9NX0RFVklDRSk7CisJcmVzdWx0ID0gY2hfZG9fc2NzaShjaCwgY21kLCAxMCwgYnVmZmVyLCAyNTUsIERNQV9GUk9NX0RFVklDRSk7CiAJaWYgKDAgIT0gcmVzdWx0KSB7CiAJCWNtZFsxXSB8PSAoMTw8Myk7Ci0JCXJlc3VsdCAgPSBjaF9kb19zY3NpKGNoLCBjbWQsIGJ1ZmZlciwgMjU1LCBETUFfRlJPTV9ERVZJQ0UpOworCQlyZXN1bHQgID0gY2hfZG9fc2NzaShjaCwgY21kLCAxMCwgYnVmZmVyLCAyNTUsIERNQV9GUk9NX0RFVklDRSk7CiAJfQogCWlmICgwID09IHJlc3VsdCkgewogCQljaC0+Zmlyc3RzW0NIRVRfTVRdID0KQEAgLTQzOCw3ICs0MzgsNyBAQAogCWNtZFs0XSAgPSAoZWxlbSAgPj4gOCkgJiAweGZmOwogCWNtZFs1XSAgPSAgZWxlbSAgICAgICAgJiAweGZmOwogCWNtZFs4XSAgPSByb3RhdGUgPyAxIDogMDsKLQlyZXR1cm4gY2hfZG9fc2NzaShjaCwgY21kLCBOVUxMLCAwLCBETUFfTk9ORSk7CisJcmV0dXJuIGNoX2RvX3Njc2koY2gsIGNtZCwgMTAsIE5VTEwsIDAsIERNQV9OT05FKTsKIH0KIAogc3RhdGljIGludApAQCAtNDU5LDcgKzQ1OSw3IEBACiAJY21kWzZdICA9IChkZXN0ICA+PiA4KSAmIDB4ZmY7CiAJY21kWzddICA9ICBkZXN0ICAgICAgICAmIDB4ZmY7CiAJY21kWzEwXSA9IHJvdGF0ZSA/IDEgOiAwOwotCXJldHVybiBjaF9kb19zY3NpKGNoLCBjbWQsIE5VTEwsMCwgRE1BX05PTkUpOworCXJldHVybiBjaF9kb19zY3NpKGNoLCBjbWQsIDEyLCBOVUxMLDAsIERNQV9OT05FKTsKIH0KIAogc3RhdGljIGludApAQCAtNDg1LDcgKzQ4NSw3IEBACiAJY21kWzldICA9ICBkZXN0MiAgICAgICAmIDB4ZmY7CiAJY21kWzEwXSA9IChyb3RhdGUxID8gMSA6IDApIHwgKHJvdGF0ZTIgPyAyIDogMCk7CiAKLQlyZXR1cm4gY2hfZG9fc2NzaShjaCwgY21kLCBOVUxMLDAsIERNQV9OT05FKTsKKwlyZXR1cm4gY2hfZG9fc2NzaShjaCwgY21kLCAxMiwgTlVMTCwgMCwgRE1BX05PTkUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTM1LDcgKzUzNSw3IEBACiAJbWVtY3B5KGJ1ZmZlcix0YWcsMzIpOwogCWNoX2NoZWNrX3ZvbHRhZyhidWZmZXIpOwogCi0JcmVzdWx0ID0gY2hfZG9fc2NzaShjaCwgY21kLCBidWZmZXIsIDI1NiwgRE1BX1RPX0RFVklDRSk7CisJcmVzdWx0ID0gY2hfZG9fc2NzaShjaCwgY21kLCAxMiwgYnVmZmVyLCAyNTYsIERNQV9UT19ERVZJQ0UpOwogCWtmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYxNiw2ICs2MTYsMTEgQEAKIAlpbnQgcmV0dmFsOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCisJcmV0dmFsID0gc2NzaV9pb2N0bF9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKGNoLT5kZXZpY2UsIGNtZCwKKwkJCWZpbGUtPmZfZmxhZ3MgJiBPX05ERUxBWSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDSElPR1BBUkFNUzoKIAl7CkBAIC03NjYsNyArNzcxLDggQEAKIAkJY2hfY21kWzVdID0gMTsKIAkJY2hfY21kWzldID0gMjU1OwogCi0JCXJlc3VsdCA9IGNoX2RvX3Njc2koY2gsIGNoX2NtZCwgYnVmZmVyLCAyNTYsIERNQV9GUk9NX0RFVklDRSk7CisJCXJlc3VsdCA9IGNoX2RvX3Njc2koY2gsIGNoX2NtZCwgMTIsCisJCQkJICAgIGJ1ZmZlciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpOwogCQlpZiAoIXJlc3VsdCkgewogCQkJY2dlLmNnZV9zdGF0dXMgPSBidWZmZXJbMThdOwogCQkJY2dlLmNnZV9mbGFncyA9IDA7CkBAIC05NjYsOSArOTcyLDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2RyaXZlciBjaF90ZW1wbGF0ZSA9IHsKLQkub3duZXIgICAgIAk9IFRISVNfTU9EVUxFLAogCS5nZW5kcnYgICAgIAk9IHsKIAkJLm5hbWUJPSAiY2giLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLnByb2JlICA9IGNoX3Byb2JlLAogCQkucmVtb3ZlID0gY2hfcmVtb3ZlLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKaW5kZXggZDM1YTVkNi4uZTIwNjhhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwpAQCAtMjEsMTUgKzIxLDIxIEBACiAKIAogLyogQ29tbWFuZHMgd2l0aCBzZXJ2aWNlIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGNvbW1hbmQgbmFtZSAqLwotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTl8xMiAweGFiCi0jZGVmaW5lIFNFUlZJQ0VfQUNUSU9OX09VVF8xMiAweGE5Ci0jZGVmaW5lIFNFUlZJQ0VfQUNUSU9OX0JJRElSRUNUSU9OQUwgMHg5ZAotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTl8xNiAweDllCi0jZGVmaW5lIFNFUlZJQ0VfQUNUSU9OX09VVF8xNiAweDlmCiAjZGVmaW5lIFRISVJEX1BBUlRZX0NPUFlfT1VUIDB4ODMKICNkZWZpbmUgVEhJUkRfUEFSVFlfQ09QWV9JTiAweDg0CiAKKyNkZWZpbmUgVkVORE9SX1NQRUNJRklDX0NEQiAweGMwCiAKK3N0cnVjdCBzYV9uYW1lX2xpc3QgeworCWludCBvcGNvZGU7CisJY29uc3Qgc3RydWN0IHZhbHVlX25hbWVfcGFpciAqYXJyOworCWludCBhcnJfc3o7Cit9OworCitzdHJ1Y3QgdmFsdWVfbmFtZV9wYWlyIHsKKwlpbnQgdmFsdWU7CisJY29uc3QgY2hhciAqIG5hbWU7Cit9OwogCiAjaWZkZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTCiBzdGF0aWMgY29uc3QgY2hhciAqIGNkYl9ieXRlMF9uYW1lc1tdID0gewpAQCAtMTAyLDExICsxMDgsNiBAQAogICAgICAgICAgICAgIlZvbHVtZSBzZXQgKG91dCksIFNlbmQgRFZEIHN0cnVjdHVyZSIsCiB9OwogCi1zdHJ1Y3QgdmFsdWVfbmFtZV9wYWlyIHsKLQlpbnQgdmFsdWU7Ci0JY29uc3QgY2hhciAqIG5hbWU7Ci19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZhbHVlX25hbWVfcGFpciBtYWludF9pbl9hcnJbXSA9IHsKIAl7MHg1LCAiUmVwb3J0IGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIn0sCiAJezB4YSwgIlJlcG9ydCB0YXJnZXQgcG9ydCBncm91cHMifSwKQEAgLTI0NCwxNzAgKzI0NSwxMTkgQEAKIH07CiAjZGVmaW5lIFZBUklBQkxFX0xFTkdUSF9TWiBBUlJBWV9TSVpFKHZhcmlhYmxlX2xlbmd0aF9hcnIpCiAKLXN0YXRpYyBjb25zdCBjaGFyICogZ2V0X3NhX25hbWUoY29uc3Qgc3RydWN0IHZhbHVlX25hbWVfcGFpciAqIGFyciwKLQkJCSAgICAgICAgaW50IGFycl9zeiwgaW50IHNlcnZpY2VfYWN0aW9uKQorc3RhdGljIHN0cnVjdCBzYV9uYW1lX2xpc3Qgc2FfbmFtZXNfYXJyW10gPSB7CisJe1ZBUklBQkxFX0xFTkdUSF9DTUQsIHZhcmlhYmxlX2xlbmd0aF9hcnIsIFZBUklBQkxFX0xFTkdUSF9TWn0sCisJe01BSU5URU5BTkNFX0lOLCBtYWludF9pbl9hcnIsIE1BSU5UX0lOX1NafSwKKwl7TUFJTlRFTkFOQ0VfT1VULCBtYWludF9vdXRfYXJyLCBNQUlOVF9PVVRfU1p9LAorCXtQRVJTSVNURU5UX1JFU0VSVkVfSU4sIHByX2luX2FyciwgUFJfSU5fU1p9LAorCXtQRVJTSVNURU5UX1JFU0VSVkVfT1VULCBwcl9vdXRfYXJyLCBQUl9PVVRfU1p9LAorCXtTRVJWSUNFX0FDVElPTl9JTl8xMiwgc2Vydl9pbjEyX2FyciwgU0VSVl9JTjEyX1NafSwKKwl7U0VSVklDRV9BQ1RJT05fT1VUXzEyLCBzZXJ2X291dDEyX2FyciwgU0VSVl9PVVQxMl9TWn0sCisJe1NFUlZJQ0VfQUNUSU9OX0JJRElSRUNUSU9OQUwsIHNlcnZfYmlkaV9hcnIsIFNFUlZfQklESV9TWn0sCisJe1NFUlZJQ0VfQUNUSU9OX0lOXzE2LCBzZXJ2X2luMTZfYXJyLCBTRVJWX0lOMTZfU1p9LAorCXtTRVJWSUNFX0FDVElPTl9PVVRfMTYsIHNlcnZfb3V0MTZfYXJyLCBTRVJWX09VVDE2X1NafSwKKwl7VEhJUkRfUEFSVFlfQ09QWV9JTiwgdHBjX2luX2FyciwgVFBDX0lOX1NafSwKKwl7VEhJUkRfUEFSVFlfQ09QWV9PVVQsIHRwY19vdXRfYXJyLCBUUENfT1VUX1NafSwKKwl7MCwgTlVMTCwgMH0sCit9OworCisjZWxzZSAvKiBpZm5kZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTICovCitzdGF0aWMgY29uc3QgY2hhciAqY2RiX2J5dGUwX25hbWVzWzBdOworCitzdGF0aWMgc3RydWN0IHNhX25hbWVfbGlzdCBzYV9uYW1lc19hcnJbXSA9IHsKKwl7VkFSSUFCTEVfTEVOR1RIX0NNRCwgTlVMTCwgMH0sCisJe01BSU5URU5BTkNFX0lOLCBOVUxMLCAwfSwKKwl7TUFJTlRFTkFOQ0VfT1VULCBOVUxMLCAwfSwKKwl7UEVSU0lTVEVOVF9SRVNFUlZFX0lOLCBOVUxMLCAwfSwKKwl7UEVSU0lTVEVOVF9SRVNFUlZFX09VVCwgTlVMTCwgMH0sCisJe1NFUlZJQ0VfQUNUSU9OX0lOXzEyLCBOVUxMLCAwfSwKKwl7U0VSVklDRV9BQ1RJT05fT1VUXzEyLCBOVUxMLCAwfSwKKwl7U0VSVklDRV9BQ1RJT05fQklESVJFQ1RJT05BTCwgTlVMTCwgMH0sCisJe1NFUlZJQ0VfQUNUSU9OX0lOXzE2LCBOVUxMLCAwfSwKKwl7U0VSVklDRV9BQ1RJT05fT1VUXzE2LCBOVUxMLCAwfSwKKwl7VEhJUkRfUEFSVFlfQ09QWV9JTiwgTlVMTCwgMH0sCisJe1RISVJEX1BBUlRZX0NPUFlfT1VULCBOVUxMLCAwfSwKKwl7MCwgTlVMTCwgMH0sCit9OworI2VuZGlmIC8qIENPTkZJR19TQ1NJX0NPTlNUQU5UUyAqLworCitzdGF0aWMgYm9vbCBzY3NpX29wY29kZV9zYV9uYW1lKGludCBvcGNvZGUsIGludCBzZXJ2aWNlX2FjdGlvbiwKKwkJCQljb25zdCBjaGFyICoqY2RiX25hbWUsIGNvbnN0IGNoYXIgKipzYV9uYW1lKQogewotCWludCBrOworCXN0cnVjdCBzYV9uYW1lX2xpc3QgKnNhX25hbWVfcHRyOworCWNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgKmFyciA9IE5VTEw7CisJaW50IGFycl9zeiwgazsKKworCSpjZGJfbmFtZSA9IE5VTEw7CisJaWYgKG9wY29kZSA+PSBWRU5ET1JfU1BFQ0lGSUNfQ0RCKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAob3Bjb2RlIDwgQVJSQVlfU0laRShjZGJfYnl0ZTBfbmFtZXMpKQorCQkqY2RiX25hbWUgPSBjZGJfYnl0ZTBfbmFtZXNbb3Bjb2RlXTsKKworCWZvciAoc2FfbmFtZV9wdHIgPSBzYV9uYW1lc19hcnI7IHNhX25hbWVfcHRyLT5hcnI7ICsrc2FfbmFtZV9wdHIpIHsKKwkJaWYgKHNhX25hbWVfcHRyLT5vcGNvZGUgPT0gb3Bjb2RlKSB7CisJCQlhcnIgPSBzYV9uYW1lX3B0ci0+YXJyOworCQkJYXJyX3N6ID0gc2FfbmFtZV9wdHItPmFycl9zejsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghYXJyKQorCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGsgPSAwOyBrIDwgYXJyX3N6OyArK2ssICsrYXJyKSB7CiAJCWlmIChzZXJ2aWNlX2FjdGlvbiA9PSBhcnItPnZhbHVlKQogCQkJYnJlYWs7CiAJfQotCXJldHVybiAoayA8IGFycl9zeikgPyBhcnItPm5hbWUgOiBOVUxMOworCWlmIChrIDwgYXJyX3N6KQorCQkqc2FfbmFtZSA9IGFyci0+bmFtZTsKKworCXJldHVybiB0cnVlOwogfQogCi0vKiBhdHRlbXB0IHRvIGd1ZXNzIGNkYiBsZW5ndGggaWYgY2RiX2xlbj09MCAuIE5vIHRyYWlsaW5nIGxpbmVmZWVkLiAqLwotc3RhdGljIHZvaWQgcHJpbnRfb3Bjb2RlX25hbWUodW5zaWduZWQgY2hhciAqIGNkYnAsIGludCBjZGJfbGVuKQorc3RhdGljIHZvaWQgcHJpbnRfb3Bjb2RlX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqY2RicCwgc2l6ZV90IGNkYl9sZW4pCiB7Ci0JaW50IHNhLCBsZW4sIGNkYjA7Ci0JaW50IGZpbl9uYW1lID0gMDsKLQljb25zdCBjaGFyICogbmFtZTsKKwlpbnQgc2EsIGNkYjA7CisJY29uc3QgY2hhciAqY2RiX25hbWUgPSBOVUxMLCAqc2FfbmFtZSA9IE5VTEw7CiAKIAljZGIwID0gY2RicFswXTsKLQlzd2l0Y2goY2RiMCkgewotCWNhc2UgVkFSSUFCTEVfTEVOR1RIX0NNRDoKLQkJbGVuID0gc2NzaV92YXJsZW5fY2RiX2xlbmd0aChjZGJwKTsKLQkJaWYgKGxlbiA8IDEwKSB7Ci0JCQlwcmludGsoInNob3J0IHZhcmlhYmxlIGxlbmd0aCBjb21tYW5kLCAiCi0JCQkgICAgICAgImxlbj0lZCBleHRfbGVuPSVkIiwgbGVuLCBjZGJfbGVuKTsKLQkJCWJyZWFrOworCWlmIChjZGIwID09IFZBUklBQkxFX0xFTkdUSF9DTUQpIHsKKwkJaWYgKGNkYl9sZW4gPCAxMCkgeworCQkJcHJpbnRrKCJzaG9ydCB2YXJpYWJsZSBsZW5ndGggY29tbWFuZCwgbGVuPSV6dSIsCisJCQkgICAgICAgY2RiX2xlbik7CisJCQlyZXR1cm47CiAJCX0KIAkJc2EgPSAoY2RicFs4XSA8PCA4KSArIGNkYnBbOV07Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZSh2YXJpYWJsZV9sZW5ndGhfYXJyLCBWQVJJQUJMRV9MRU5HVEhfU1osCi0JCQkJICAgc2EpOwotCQlpZiAobmFtZSkKLQkJCXByaW50aygiJXMiLCBuYW1lKTsKLQkJZWxzZQotCQkJcHJpbnRrKCJjZGJbMF09MHgleCwgc2E9MHgleCIsIGNkYjAsIHNhKTsKKwl9IGVsc2UKKwkJc2EgPSBjZGJwWzFdICYgMHgxZjsKIAotCQlpZiAoKGNkYl9sZW4gPiAwKSAmJiAobGVuICE9IGNkYl9sZW4pKQotCQkJcHJpbnRrKCIsIGluX2NkYl9sZW49JWQsIGV4dF9sZW49JWQiLCBsZW4sIGNkYl9sZW4pOwotCi0JCWJyZWFrOwotCWNhc2UgTUFJTlRFTkFOQ0VfSU46Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShtYWludF9pbl9hcnIsIE1BSU5UX0lOX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBNQUlOVEVOQU5DRV9PVVQ6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShtYWludF9vdXRfYXJyLCBNQUlOVF9PVVRfU1osIHNhKTsKLQkJZmluX25hbWUgPSAxOwotCQlicmVhazsKLQljYXNlIFBFUlNJU1RFTlRfUkVTRVJWRV9JTjoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKHByX2luX2FyciwgUFJfSU5fU1osIHNhKTsKLQkJZmluX25hbWUgPSAxOwotCQlicmVhazsKLQljYXNlIFBFUlNJU1RFTlRfUkVTRVJWRV9PVVQ6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShwcl9vdXRfYXJyLCBQUl9PVVRfU1osIHNhKTsKLQkJZmluX25hbWUgPSAxOwotCQlicmVhazsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzEyOgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQluYW1lID0gZ2V0X3NhX25hbWUoc2Vydl9pbjEyX2FyciwgU0VSVl9JTjEyX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9PVVRfMTI6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShzZXJ2X291dDEyX2FyciwgU0VSVl9PVVQxMl9TWiwgc2EpOwotCQlmaW5fbmFtZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fQklESVJFQ1RJT05BTDoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKHNlcnZfYmlkaV9hcnIsIFNFUlZfQklESV9TWiwgc2EpOwotCQlmaW5fbmFtZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShzZXJ2X2luMTZfYXJyLCBTRVJWX0lOMTZfU1osIHNhKTsKLQkJZmluX25hbWUgPSAxOwotCQlicmVhazsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX09VVF8xNjoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKHNlcnZfb3V0MTZfYXJyLCBTRVJWX09VVDE2X1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBUSElSRF9QQVJUWV9DT1BZX0lOOgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQluYW1lID0gZ2V0X3NhX25hbWUodHBjX2luX2FyciwgVFBDX0lOX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBUSElSRF9QQVJUWV9DT1BZX09VVDoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKHRwY19vdXRfYXJyLCBUUENfT1VUX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKGNkYjAgPCAweGMwKSB7Ci0JCQluYW1lID0gY2RiX2J5dGUwX25hbWVzW2NkYjBdOwotCQkJaWYgKG5hbWUpCi0JCQkJcHJpbnRrKCIlcyIsIG5hbWUpOwotCQkJZWxzZQotCQkJCXByaW50aygiY2RiWzBdPTB4JXggKHJlc2VydmVkKSIsIGNkYjApOwotCQl9IGVsc2UKKwlpZiAoIXNjc2lfb3Bjb2RlX3NhX25hbWUoY2RiMCwgc2EsICZjZGJfbmFtZSwgJnNhX25hbWUpKSB7CisJCWlmIChjZGJfbmFtZSkKKwkJCXByaW50aygiJXMiLCBjZGJfbmFtZSk7CisJCWVsc2UgaWYgKGNkYjAgPj0gVkVORE9SX1NQRUNJRklDX0NEQikKIAkJCXByaW50aygiY2RiWzBdPTB4JXggKHZlbmRvcikiLCBjZGIwKTsKLQkJYnJlYWs7Ci0JfQotCWlmIChmaW5fbmFtZSkgewotCQlpZiAobmFtZSkKLQkJCXByaW50aygiJXMiLCBuYW1lKTsKKwkJZWxzZSBpZiAoY2RiMCA+PSAweDYwICYmIGNkYjAgPCAweDdlKQorCQkJcHJpbnRrKCJjZGJbMF09MHgleCAocmVzZXJ2ZWQpIiwgY2RiMCk7CiAJCWVsc2UKLQkJCXByaW50aygiY2RiWzBdPTB4JXgsIHNhPTB4JXgiLCBjZGIwLCBzYSk7Ci0JfQotfQotCi0jZWxzZSAvKiBpZm5kZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTICovCi0KLXN0YXRpYyB2b2lkIHByaW50X29wY29kZV9uYW1lKHVuc2lnbmVkIGNoYXIgKiBjZGJwLCBpbnQgY2RiX2xlbikKLXsKLQlpbnQgc2EsIGxlbiwgY2RiMDsKLQotCWNkYjAgPSBjZGJwWzBdOwotCXN3aXRjaChjZGIwKSB7Ci0JY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgotCQlsZW4gPSBzY3NpX3Zhcmxlbl9jZGJfbGVuZ3RoKGNkYnApOwotCQlpZiAobGVuIDwgMTApIHsKLQkJCXByaW50aygic2hvcnQgb3Bjb2RlPTB4JXggY29tbWFuZCwgbGVuPSVkICIKLQkJCSAgICAgICAiZXh0X2xlbj0lZCIsIGNkYjAsIGxlbiwgY2RiX2xlbik7Ci0JCQlicmVhazsKLQkJfQotCQlzYSA9IChjZGJwWzhdIDw8IDgpICsgY2RicFs5XTsKLQkJcHJpbnRrKCJjZGJbMF09MHgleCwgc2E9MHgleCIsIGNkYjAsIHNhKTsKLQkJaWYgKGxlbiAhPSBjZGJfbGVuKQotCQkJcHJpbnRrKCIsIGluX2NkYl9sZW49JWQsIGV4dF9sZW49JWQiLCBsZW4sIGNkYl9sZW4pOwotCQlicmVhazsKLQljYXNlIE1BSU5URU5BTkNFX0lOOgotCWNhc2UgTUFJTlRFTkFOQ0VfT1VUOgotCWNhc2UgUEVSU0lTVEVOVF9SRVNFUlZFX0lOOgotCWNhc2UgUEVSU0lTVEVOVF9SRVNFUlZFX09VVDoKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzEyOgotCWNhc2UgU0VSVklDRV9BQ1RJT05fT1VUXzEyOgotCWNhc2UgU0VSVklDRV9BQ1RJT05fQklESVJFQ1RJT05BTDoKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgotCWNhc2UgU0VSVklDRV9BQ1RJT05fT1VUXzE2OgotCWNhc2UgVEhJUkRfUEFSVFlfQ09QWV9JTjoKLQljYXNlIFRISVJEX1BBUlRZX0NPUFlfT1VUOgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQlwcmludGsoImNkYlswXT0weCV4LCBzYT0weCV4IiwgY2RiMCwgc2EpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAoY2RiMCA8IDB4YzApCiAJCQlwcmludGsoImNkYlswXT0weCV4IiwgY2RiMCk7CisJfSBlbHNlIHsKKwkJaWYgKHNhX25hbWUpCisJCQlwcmludGsoIiVzIiwgc2FfbmFtZSk7CisJCWVsc2UgaWYgKGNkYl9uYW1lKQorCQkJcHJpbnRrKCIlcywgc2E9MHgleCIsIGNkYl9uYW1lLCBzYSk7CiAJCWVsc2UKLQkJCXByaW50aygiY2RiWzBdPTB4JXggKHZlbmRvcikiLCBjZGIwKTsKLQkJYnJlYWs7CisJCQlwcmludGsoImNkYlswXT0weCV4LCBzYT0weCV4IiwgY2RiMCwgc2EpOwogCX0KIH0KLSNlbmRpZgogCi12b2lkIF9fc2NzaV9wcmludF9jb21tYW5kKHVuc2lnbmVkIGNoYXIgKmNkYikKK3ZvaWQgX19zY3NpX3ByaW50X2NvbW1hbmQoY29uc3QgdW5zaWduZWQgY2hhciAqY2RiLCBzaXplX3QgY2RiX2xlbikKIHsKIAlpbnQgaywgbGVuOwogCi0JcHJpbnRfb3Bjb2RlX25hbWUoY2RiLCAwKTsKKwlwcmludF9vcGNvZGVfbmFtZShjZGIsIGNkYl9sZW4pOwogCWxlbiA9IHNjc2lfY29tbWFuZF9zaXplKGNkYik7CisJaWYgKGNkYl9sZW4gPCBsZW4pCisJCWxlbiA9IGNkYl9sZW47CiAJLyogcHJpbnQgb3V0IGFsbCBieXRlcyBpbiBjZGIgKi8KIAlmb3IgKGsgPSAwOyBrIDwgbGVuOyArK2spCiAJCXByaW50aygiICUwMngiLCBjZGJba10pOwpAQCAtNDMzLDQxICszODMsNiBAQAogfQogRVhQT1JUX1NZTUJPTChzY3NpX3ByaW50X2NvbW1hbmQpOwogCi0vKioKLSAqCXNjc2lfcHJpbnRfc3RhdHVzIC0gcHJpbnQgc2NzaSBzdGF0dXMgZGVzY3JpcHRpb24KLSAqCUBzY3NpX3N0YXR1czogc2NzaSBzdGF0dXMgdmFsdWUKLSAqCi0gKglJZiB0aGUgc3RhdHVzIGlzIHJlY29nbml6ZWQsIHRoZSBkZXNjcmlwdGlvbiBpcyBwcmludGVkLgotICoJT3RoZXJ3aXNlICJVbmtub3duIHN0YXR1cyIgaXMgb3V0cHV0LiBObyB0cmFpbGluZyBzcGFjZS4KLSAqCUlmIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0LCB0aGVuIHByaW50IHN0YXR1cyBpbiBoZXgKLSAqCShlLmcuICIweDIiIGZvciBDaGVjayBDb25kaXRpb24pLgotICoqLwotdm9pZAotc2NzaV9wcmludF9zdGF0dXModW5zaWduZWQgY2hhciBzY3NpX3N0YXR1cykgewotI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUwotCWNvbnN0IGNoYXIgKiBjY3A7Ci0KLQlzd2l0Y2ggKHNjc2lfc3RhdHVzKSB7Ci0JY2FzZSAwOiAgICBjY3AgPSAiR29vZCI7IGJyZWFrOwotCWNhc2UgMHgyOiAgY2NwID0gIkNoZWNrIENvbmRpdGlvbiI7IGJyZWFrOwotCWNhc2UgMHg0OiAgY2NwID0gIkNvbmRpdGlvbiBNZXQiOyBicmVhazsKLQljYXNlIDB4ODogIGNjcCA9ICJCdXN5IjsgYnJlYWs7Ci0JY2FzZSAweDEwOiBjY3AgPSAiSW50ZXJtZWRpYXRlIjsgYnJlYWs7Ci0JY2FzZSAweDE0OiBjY3AgPSAiSW50ZXJtZWRpYXRlLUNvbmRpdGlvbiBNZXQiOyBicmVhazsKLQljYXNlIDB4MTg6IGNjcCA9ICJSZXNlcnZhdGlvbiBDb25mbGljdCI7IGJyZWFrOwotCWNhc2UgMHgyMjogY2NwID0gIkNvbW1hbmQgVGVybWluYXRlZCI7IGJyZWFrOwkvKiBvYnNvbGV0ZSAqLwotCWNhc2UgMHgyODogY2NwID0gIlRhc2sgc2V0IEZ1bGwiOyBicmVhazsJLyogd2FzOiBRdWV1ZSBGdWxsICovCi0JY2FzZSAweDMwOiBjY3AgPSAiQUNBIEFjdGl2ZSI7IGJyZWFrOwotCWNhc2UgMHg0MDogY2NwID0gIlRhc2sgQWJvcnRlZCI7IGJyZWFrOwotCWRlZmF1bHQ6ICAgY2NwID0gIlVua25vd24gc3RhdHVzIjsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCBjY3ApOwotI2Vsc2UKLQlwcmludGsoS0VSTl9JTkZPICIweCUweCIsIHNjc2lfc3RhdHVzKTsKLSNlbmRpZgotfQotRVhQT1JUX1NZTUJPTChzY3NpX3ByaW50X3N0YXR1cyk7Ci0KICNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKIAogc3RydWN0IGVycm9yX2luZm8gewpAQCAtMTI5MiwxOCArMTIwNywxOSBAQAogCiBzdHJ1Y3QgZXJyb3JfaW5mbzIgewogCXVuc2lnbmVkIGNoYXIgY29kZTEsIGNvZGUyX21pbiwgY29kZTJfbWF4OworCWNvbnN0IGNoYXIgKiBzdHI7CiAJY29uc3QgY2hhciAqIGZtdDsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXJyb3JfaW5mbzIgYWRkaXRpb25hbDJbXSA9CiB7Ci0JezB4NDAsIDB4MDAsIDB4N2YsICJSYW0gZmFpbHVyZSAoJXgpIn0sCi0JezB4NDAsIDB4ODAsIDB4ZmYsICJEaWFnbm9zdGljIGZhaWx1cmUgb24gY29tcG9uZW50ICgleCkifSwKLQl7MHg0MSwgMHgwMCwgMHhmZiwgIkRhdGEgcGF0aCBmYWlsdXJlICgleCkifSwKLQl7MHg0MiwgMHgwMCwgMHhmZiwgIlBvd2VyLW9uIG9yIHNlbGYtdGVzdCBmYWlsdXJlICgleCkifSwKLQl7MHg0RCwgMHgwMCwgMHhmZiwgIlRhZ2dlZCBvdmVybGFwcGVkIGNvbW1hbmRzICh0YXNrIHRhZyAleCkifSwKLQl7MHg3MCwgMHgwMCwgMHhmZiwgIkRlY29tcHJlc3Npb24gZXhjZXB0aW9uIHNob3J0IGFsZ29yaXRobSBpZCBvZiAleCJ9LAotCXswLCAwLCAwLCBOVUxMfQorCXsweDQwLCAweDAwLCAweDdmLCAiUmFtIGZhaWx1cmUiLCAiIn0sCisJezB4NDAsIDB4ODAsIDB4ZmYsICJEaWFnbm9zdGljIGZhaWx1cmUgb24gY29tcG9uZW50IiwgIiJ9LAorCXsweDQxLCAweDAwLCAweGZmLCAiRGF0YSBwYXRoIGZhaWx1cmUiLCAiIn0sCisJezB4NDIsIDB4MDAsIDB4ZmYsICJQb3dlci1vbiBvciBzZWxmLXRlc3QgZmFpbHVyZSIsICIifSwKKwl7MHg0RCwgMHgwMCwgMHhmZiwgIlRhZ2dlZCBvdmVybGFwcGVkIGNvbW1hbmRzIiwgInRhc2sgdGFnICJ9LAorCXsweDcwLCAweDAwLCAweGZmLCAiRGVjb21wcmVzc2lvbiBleGNlcHRpb24iLCAic2hvcnQgYWxnb3JpdGhtIGlkIG9mICJ9LAorCXswLCAwLCAwLCBOVUxMLCBOVUxMfQogfTsKIAogLyogZGVzY3JpcHRpb24gb2YgdGhlIHNlbnNlIGtleSB2YWx1ZXMgKi8KQEAgLTEzNDksNjkgKzEyNjUsNzkgQEAKICAqIFRoaXMgc3RyaW5nIG1heSBjb250YWluIGEgIiV4IiBhbmQgc2hvdWxkIGJlIHByaW50ZWQgd2l0aCBhc2NxIGFzIGFyZy4KICAqLwogY29uc3QgY2hhciAqCi1zY3NpX2V4dGRfc2Vuc2VfZm9ybWF0KHVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EpIHsKK3Njc2lfZXh0ZF9zZW5zZV9mb3JtYXQodW5zaWduZWQgY2hhciBhc2MsIHVuc2lnbmVkIGNoYXIgYXNjcSwgY29uc3QgY2hhciAqKmZtdCkKK3sKICNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKIAlpbnQgaTsKIAl1bnNpZ25lZCBzaG9ydCBjb2RlID0gKChhc2MgPDwgOCkgfCBhc2NxKTsKIAorCSpmbXQgPSBOVUxMOwogCWZvciAoaSA9IDA7IGFkZGl0aW9uYWxbaV0udGV4dDsgaSsrKQogCQlpZiAoYWRkaXRpb25hbFtpXS5jb2RlMTIgPT0gY29kZSkKIAkJCXJldHVybiBhZGRpdGlvbmFsW2ldLnRleHQ7CiAJZm9yIChpID0gMDsgYWRkaXRpb25hbDJbaV0uZm10OyBpKyspIHsKIAkJaWYgKGFkZGl0aW9uYWwyW2ldLmNvZGUxID09IGFzYyAmJgogCQkgICAgYXNjcSA+PSBhZGRpdGlvbmFsMltpXS5jb2RlMl9taW4gJiYKLQkJICAgIGFzY3EgPD0gYWRkaXRpb25hbDJbaV0uY29kZTJfbWF4KQotCQkJcmV0dXJuIGFkZGl0aW9uYWwyW2ldLmZtdDsKKwkJICAgIGFzY3EgPD0gYWRkaXRpb25hbDJbaV0uY29kZTJfbWF4KSB7CisJCQkqZm10ID0gYWRkaXRpb25hbDJbaV0uZm10OworCQkJcmV0dXJuIGFkZGl0aW9uYWwyW2ldLnN0cjsKKwkJfQogCX0KKyNlbHNlCisJKmZtdCA9IE5VTEw7CiAjZW5kaWYKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9leHRkX3NlbnNlX2Zvcm1hdCk7CiAKIHZvaWQKLXNjc2lfc2hvd19leHRkX3NlbnNlKHVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EpCitzY3NpX3Nob3dfZXh0ZF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgdW5zaWduZWQgY2hhciBhc2MsIHVuc2lnbmVkIGNoYXIgYXNjcSkKIHsKLSAgICAgICAgY29uc3QgY2hhciAqZXh0ZF9zZW5zZV9mbXQgPSBzY3NpX2V4dGRfc2Vuc2VfZm9ybWF0KGFzYywgYXNjcSk7CisJY29uc3QgY2hhciAqZXh0ZF9zZW5zZV9mbXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKmV4dGRfc2Vuc2Vfc3RyID0gc2NzaV9leHRkX3NlbnNlX2Zvcm1hdChhc2MsIGFzY3EsCisJCQkJCQkJICAgICZleHRkX3NlbnNlX2ZtdCk7CiAKLQlpZiAoZXh0ZF9zZW5zZV9mbXQpIHsKLQkJaWYgKHN0cnN0cihleHRkX3NlbnNlX2ZtdCwgIiV4IikpIHsKLQkJCXByaW50aygiQWRkLiBTZW5zZTogIik7Ci0JCQlwcmludGsoZXh0ZF9zZW5zZV9mbXQsIGFzY3EpOwotCQl9IGVsc2UKLQkJCXByaW50aygiQWRkLiBTZW5zZTogJXMiLCBleHRkX3NlbnNlX2ZtdCk7Ci0JfSBlbHNlIHsKLQkJaWYgKGFzYyA+PSAweDgwKQotCQkJcHJpbnRrKCI8PHZlbmRvcj4+IEFTQz0weCV4IEFTQ1E9MHgleCIsIGFzYywKLQkJCSAgICAgICBhc2NxKTsKLQkJaWYgKGFzY3EgPj0gMHg4MCkKLQkJCXByaW50aygiQVNDPTB4JXggPDx2ZW5kb3I+PiBBU0NRPTB4JXgiLCBhc2MsCi0JCQkgICAgICAgYXNjcSk7CisJaWYgKGV4dGRfc2Vuc2Vfc3RyKSB7CisJCWlmIChleHRkX3NlbnNlX2ZtdCkKKwkJCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCisJCQkJCSAgICJBZGQuIFNlbnNlOiAlcyAoJXMleCkiLAorCQkJCQkgICBleHRkX3NlbnNlX3N0ciwgZXh0ZF9zZW5zZV9mbXQsCisJCQkJCSAgIGFzY3EpOwogCQllbHNlCi0JCQlwcmludGsoIkFTQz0weCV4IEFTQ1E9MHgleCIsIGFzYywgYXNjcSk7Ci0JfQorCQkJc2Rldl9wcmVmaXhfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgbmFtZSwKKwkJCQkJICAgIkFkZC4gU2Vuc2U6ICVzIiwgZXh0ZF9zZW5zZV9zdHIpOwogCi0JcHJpbnRrKCJcbiIpOworCX0gZWxzZSB7CisJCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCisJCQkJICAgIiVzQVNDPTB4JXggJXNBU0NRPTB4JXhcbiIsCisJCQkJICAgYXNjID49IDB4ODAgPyAiPDx2ZW5kb3I+PiAiIDogIiIsIGFzYywKKwkJCQkgICBhc2NxID49IDB4ODAgPyAiPDx2ZW5kb3I+PiAiIDogIiIsIGFzY3EpOworCX0KIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9zaG93X2V4dGRfc2Vuc2UpOwogCiB2b2lkCi1zY3NpX3Nob3dfc2Vuc2VfaGRyKHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCitzY3NpX3Nob3dfc2Vuc2VfaGRyKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCiB7CiAJY29uc3QgY2hhciAqc2Vuc2VfdHh0OwogCiAJc2Vuc2VfdHh0ID0gc2NzaV9zZW5zZV9rZXlfc3RyaW5nKHNzaGRyLT5zZW5zZV9rZXkpOwogCWlmIChzZW5zZV90eHQpCi0JCXByaW50aygiU2Vuc2UgS2V5IDogJXMgIiwgc2Vuc2VfdHh0KTsKKwkJc2Rldl9wcmVmaXhfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgbmFtZSwKKwkJCQkgICAiU2Vuc2UgS2V5IDogJXMgWyVzXSVzXG4iLCBzZW5zZV90eHQsCisJCQkJICAgc2NzaV9zZW5zZV9pc19kZWZlcnJlZChzc2hkcikgPworCQkJCSAgICJkZWZlcnJlZCIgOiAiY3VycmVudCIsCisJCQkJICAgc3NoZHItPnJlc3BvbnNlX2NvZGUgPj0gMHg3MiA/CisJCQkJICAgIiBbZGVzY3JpcHRvcl0iIDogIiIpOwogCWVsc2UKLQkJcHJpbnRrKCJTZW5zZSBLZXkgOiAweCV4ICIsIHNzaGRyLT5zZW5zZV9rZXkpOwotCi0JcHJpbnRrKCIlcyIsIHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoc3NoZHIpID8gIltkZWZlcnJlZF0gIiA6Ci0JICAgICAgICJbY3VycmVudF0gIik7Ci0KLQlpZiAoc3NoZHItPnJlc3BvbnNlX2NvZGUgPj0gMHg3MikKLQkJcHJpbnRrKCJbZGVzY3JpcHRvcl0iKTsKLQotCXByaW50aygiXG4iKTsKKwkJc2Rldl9wcmVmaXhfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgbmFtZSwKKwkJCQkgICAiU2Vuc2UgS2V5IDogMHgleCBbJXNdJXMiLCBzc2hkci0+c2Vuc2Vfa2V5LAorCQkJCSAgIHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoc3NoZHIpID8KKwkJCQkgICAiZGVmZXJyZWQiIDogImN1cnJlbnQiLAorCQkJCSAgIHNzaGRyLT5yZXNwb25zZV9jb2RlID49IDB4NzIgPworCQkJCSAgICIgW2Rlc2NyaXB0b3JdIiA6ICIiKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9zaG93X3NlbnNlX2hkcik7CiAKQEAgLTE0MTksMTQxICsxMzQ1LDU1IEBACiAgKiBQcmludCBub3JtYWxpemVkIFNDU0kgc2Vuc2UgaGVhZGVyIHdpdGggYSBwcmVmaXguCiAgKi8KIHZvaWQKLXNjc2lfcHJpbnRfc2Vuc2VfaGRyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCitzY3NpX3ByaW50X3NlbnNlX2hkcihjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKIHsKLQlwcmludGsoS0VSTl9JTkZPICIlczogIiwgbmFtZSk7Ci0Jc2NzaV9zaG93X3NlbnNlX2hkcihzc2hkcik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIsIG5hbWUpOwotCXNjc2lfc2hvd19leHRkX3NlbnNlKHNzaGRyLT5hc2MsIHNzaGRyLT5hc2NxKTsKKwlzY3NpX3Nob3dfc2Vuc2VfaGRyKHNkZXYsIG5hbWUsIHNzaGRyKTsKKwlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzZGV2LCBuYW1lLCBzc2hkci0+YXNjLCBzc2hkci0+YXNjcSk7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfc2Vuc2VfaGRyKTsKIAotLyoKLSAqIFByaW50IG5vcm1hbGl6ZWQgU0NTSSBzZW5zZSBoZWFkZXIgd2l0aCBkZXZpY2UgaW5mb3JtYXRpb24gYW5kIGEgcHJlZml4LgotICovCi12b2lkCi1zY3NpX2NtZF9wcmludF9zZW5zZV9oZHIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgY29uc3QgY2hhciAqZGVzYywKLQkJCSAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKLXsKLQlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsICIlczogIiwgZGVzYyk7Ci0Jc2NzaV9zaG93X3NlbnNlX2hkcihzc2hkcik7Ci0Jc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLCAiJXM6ICIsIGRlc2MpOwotCXNjc2lfc2hvd19leHRkX3NlbnNlKHNzaGRyLT5hc2MsIHNzaGRyLT5hc2NxKTsKLX0KLUVYUE9SVF9TWU1CT0woc2NzaV9jbWRfcHJpbnRfc2Vuc2VfaGRyKTsKLQogc3RhdGljIHZvaWQKLXNjc2lfZGVjb2RlX3NlbnNlX2J1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzZW5zZV9idWZmZXIsIGludCBzZW5zZV9sZW4sCi0JCSAgICAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQorc2NzaV9kdW1wX3NlbnNlX2J1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzZW5zZV9idWZmZXIsIGludCBzZW5zZV9sZW4pCiB7Ci0JaW50IGssIG51bSwgcmVzOworCWludCBrLCBudW07CiAKLQlyZXMgPSBzY3NpX25vcm1hbGl6ZV9zZW5zZShzZW5zZV9idWZmZXIsIHNlbnNlX2xlbiwgc3NoZHIpOwotCWlmICgwID09IHJlcykgewotCQkvKiB0aGlzIG1heSBiZSBTQ1NJLTEgc2Vuc2UgZGF0YSAqLwotCQludW0gPSAoc2Vuc2VfbGVuIDwgMzIpID8gc2Vuc2VfbGVuIDogMzI7Ci0JCXByaW50aygiVW5yZWNvZ25pemVkIHNlbnNlIGRhdGEgKGluIGhleCk6Iik7Ci0JCWZvciAoayA9IDA7IGsgPCBudW07ICsraykgewotCQkJaWYgKDAgPT0gKGsgJSAxNikpIHsKLQkJCQlwcmludGsoIlxuIik7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgICAiKTsKLQkJCX0KLQkJCXByaW50aygiJTAyeCAiLCBzZW5zZV9idWZmZXJba10pOworCW51bSA9IChzZW5zZV9sZW4gPCAzMikgPyBzZW5zZV9sZW4gOiAzMjsKKwlwcmludGsoIlVucmVjb2duaXplZCBzZW5zZSBkYXRhIChpbiBoZXgpOiIpOworCWZvciAoayA9IDA7IGsgPCBudW07ICsraykgeworCQlpZiAoMCA9PSAoayAlIDE2KSkgeworCQkJcHJpbnRrKCJcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgICAiKTsKIAkJfQotCQlwcmludGsoIlxuIik7Ci0JCXJldHVybjsKKwkJcHJpbnRrKCIlMDJ4ICIsIHNlbnNlX2J1ZmZlcltrXSk7CiAJfQotfQotCi1zdGF0aWMgdm9pZAotc2NzaV9kZWNvZGVfc2Vuc2VfZXh0cmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwgaW50IHNlbnNlX2xlbiwKLQkJCSBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQotewotCWludCBrLCBudW0sIHJlczsKLQotCWlmIChzc2hkci0+cmVzcG9uc2VfY29kZSA8IDB4NzIpCi0JewotCQkvKiBvbmx5IGRlY29kZSBleHRyYXMgZm9yICJmaXhlZCIgZm9ybWF0IG5vdyAqLwotCQljaGFyIGJ1ZmZbODBdOwotCQlpbnQgYmxlbiwgZml4ZWRfdmFsaWQ7Ci0JCXVuc2lnbmVkIGludCBpbmZvOwotCi0JCWZpeGVkX3ZhbGlkID0gc2Vuc2VfYnVmZmVyWzBdICYgMHg4MDsKLQkJaW5mbyA9ICgoc2Vuc2VfYnVmZmVyWzNdIDw8IDI0KSB8IChzZW5zZV9idWZmZXJbNF0gPDwgMTYpIHwKLQkJCShzZW5zZV9idWZmZXJbNV0gPDwgOCkgfCBzZW5zZV9idWZmZXJbNl0pOwotCQlyZXMgPSAwOwotCQltZW1zZXQoYnVmZiwgMCwgc2l6ZW9mKGJ1ZmYpKTsKLQkJYmxlbiA9IHNpemVvZihidWZmKSAtIDE7Ci0JCWlmIChmaXhlZF92YWxpZCkKLQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLAotCQkJCQkiSW5mbyBmbGQ9MHgleCIsIGluZm8pOwotCQlpZiAoc2Vuc2VfYnVmZmVyWzJdICYgMHg4MCkgewotCQkJLyogY3VycmVudCBjb21tYW5kIGhhcyByZWFkIGEgZmlsZW1hcmsgKi8KLQkJCWlmIChyZXMgPiAwKQotCQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLCAiLCAiKTsKLQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLCAiRk1LIik7Ci0JCX0KLQkJaWYgKHNlbnNlX2J1ZmZlclsyXSAmIDB4NDApIHsKLQkJCS8qIGVuZC1vZi1tZWRpdW0gY29uZGl0aW9uIGV4aXN0cyAqLwotCQkJaWYgKHJlcyA+IDApCi0JCQkJcmVzICs9IHNucHJpbnRmKGJ1ZmYgKyByZXMsIGJsZW4gLSByZXMsICIsICIpOwotCQkJcmVzICs9IHNucHJpbnRmKGJ1ZmYgKyByZXMsIGJsZW4gLSByZXMsICJFT00iKTsKLQkJfQotCQlpZiAoc2Vuc2VfYnVmZmVyWzJdICYgMHgyMCkgewotCQkJLyogaW5jb3JyZWN0IGJsb2NrIGxlbmd0aCByZXF1ZXN0ZWQgKi8KLQkJCWlmIChyZXMgPiAwKQotCQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLCAiLCAiKTsKLQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLCAiSUxJIik7Ci0JCX0KLQkJaWYgKHJlcyA+IDApCi0JCQlwcmludGsoIiVzXG4iLCBidWZmKTsKLQl9IGVsc2UgaWYgKHNzaGRyLT5hZGRpdGlvbmFsX2xlbmd0aCA+IDApIHsKLQkJLyogZGVzY3JpcHRvciBmb3JtYXQgd2l0aCBzZW5zZSBkZXNjcmlwdG9ycyAqLwotCQludW0gPSA4ICsgc3NoZHItPmFkZGl0aW9uYWxfbGVuZ3RoOwotCQludW0gPSAoc2Vuc2VfbGVuIDwgbnVtKSA/IHNlbnNlX2xlbiA6IG51bTsKLQkJcHJpbnRrKCJEZXNjcmlwdG9yIHNlbnNlIGRhdGEgd2l0aCBzZW5zZSBkZXNjcmlwdG9ycyAiCi0JCSAgICAgICAiKGluIGhleCk6Iik7Ci0JCWZvciAoayA9IDA7IGsgPCBudW07ICsraykgewotCQkJaWYgKDAgPT0gKGsgJSAxNikpIHsKLQkJCQlwcmludGsoIlxuIik7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgICAiKTsKLQkJCX0KLQkJCXByaW50aygiJTAyeCAiLCBzZW5zZV9idWZmZXJba10pOwotCQl9Ci0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLQorCXByaW50aygiXG4iKTsKKwlyZXR1cm47CiB9CiAKIC8qIE5vcm1hbGl6ZSBhbmQgcHJpbnQgc2Vuc2UgYnVmZmVyIHdpdGggbmFtZSBwcmVmaXggKi8KLXZvaWQgX19zY3NpX3ByaW50X3NlbnNlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwKLQkJCWludCBzZW5zZV9sZW4pCit2b2lkIF9fc2NzaV9wcmludF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZW5zZV9idWZmZXIsIGludCBzZW5zZV9sZW4pCiB7CiAJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIsIG5hbWUpOwotCXNjc2lfZGVjb2RlX3NlbnNlX2J1ZmZlcihzZW5zZV9idWZmZXIsIHNlbnNlX2xlbiwgJnNzaGRyKTsKLQlzY3NpX3Nob3dfc2Vuc2VfaGRyKCZzc2hkcik7Ci0Jc2NzaV9kZWNvZGVfc2Vuc2VfZXh0cmFzKHNlbnNlX2J1ZmZlciwgc2Vuc2VfbGVuLCAmc3NoZHIpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiAiLCBuYW1lKTsKLQlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzc2hkci5hc2MsIHNzaGRyLmFzY3EpOworCWlmICghc2NzaV9ub3JtYWxpemVfc2Vuc2Uoc2Vuc2VfYnVmZmVyLCBzZW5zZV9sZW4sICZzc2hkcikpIHsKKwkJc2NzaV9kdW1wX3NlbnNlX2J1ZmZlcihzZW5zZV9idWZmZXIsIHNlbnNlX2xlbik7CisJCXJldHVybjsKKwl9CisJc2NzaV9zaG93X3NlbnNlX2hkcihzZGV2LCBuYW1lLCAmc3NoZHIpOworCXNjc2lfc2hvd19leHRkX3NlbnNlKHNkZXYsIG5hbWUsIHNzaGRyLmFzYywgc3NoZHIuYXNjcSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fc2NzaV9wcmludF9zZW5zZSk7CiAKIC8qIE5vcm1hbGl6ZSBhbmQgcHJpbnQgc2Vuc2UgYnVmZmVyIGluIFNDU0kgY29tbWFuZCAqLwotdm9pZCBzY3NpX3ByaW50X3NlbnNlKGNoYXIgKm5hbWUsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3ZvaWQgc2NzaV9wcmludF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0Jc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gY21kLT5yZXF1ZXN0LT5ycV9kaXNrOworCWNvbnN0IGNoYXIgKmRpc2tfbmFtZSA9IGRpc2sgPyBkaXNrLT5kaXNrX25hbWUgOiBOVUxMOwogCi0Jc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsICIgIik7Ci0Jc2NzaV9kZWNvZGVfc2Vuc2VfYnVmZmVyKGNtZC0+c2Vuc2VfYnVmZmVyLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsCi0JCQkJICZzc2hkcik7Ci0Jc2NzaV9zaG93X3NlbnNlX2hkcigmc3NoZHIpOwotCXNjc2lfZGVjb2RlX3NlbnNlX2V4dHJhcyhjbWQtPnNlbnNlX2J1ZmZlciwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLAotCQkJCSAmc3NoZHIpOwotCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLCAiICIpOwotCXNjc2lfc2hvd19leHRkX3NlbnNlKHNzaGRyLmFzYywgc3NoZHIuYXNjcSk7CisJX19zY3NpX3ByaW50X3NlbnNlKGNtZC0+ZGV2aWNlLCBkaXNrX25hbWUsIGNtZC0+c2Vuc2VfYnVmZmVyLAorCQkJICAgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9wcmludF9zZW5zZSk7CiAKQEAgLTE1NjUsMzggKzE0MDUsODcgQEAKICJESURfUEFTU1RIUk9VR0giLCAiRElEX1NPRlRfRVJST1IiLCAiRElEX0lNTV9SRVRSWSIsICJESURfUkVRVUVVRSIsCiAiRElEX1RSQU5TUE9SVF9ESVNSVVBURUQiLCAiRElEX1RSQU5TUE9SVF9GQUlMRkFTVCIsICJESURfVEFSR0VUX0ZBSUxVUkUiLAogIkRJRF9ORVhVU19GQUlMVVJFIiB9OwotI2RlZmluZSBOVU1fSE9TVEJZVEVfU1RSUyBBUlJBWV9TSVpFKGhvc3RieXRlX3RhYmxlKQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRyaXZlcmJ5dGVfdGFibGVbXT17CiAiRFJJVkVSX09LIiwgIkRSSVZFUl9CVVNZIiwgIkRSSVZFUl9TT0ZUIiwgICJEUklWRVJfTUVESUEiLCAiRFJJVkVSX0VSUk9SIiwKICJEUklWRVJfSU5WQUxJRCIsICJEUklWRVJfVElNRU9VVCIsICJEUklWRVJfSEFSRCIsICJEUklWRVJfU0VOU0UifTsKLSNkZWZpbmUgTlVNX0RSSVZFUkJZVEVfU1RSUyBBUlJBWV9TSVpFKGRyaXZlcmJ5dGVfdGFibGUpCi0KLXZvaWQgc2NzaV9zaG93X3Jlc3VsdChpbnQgcmVzdWx0KQotewotCWludCBoYiA9IGhvc3RfYnl0ZShyZXN1bHQpOwotCWludCBkYiA9IGRyaXZlcl9ieXRlKHJlc3VsdCk7Ci0KLQlwcmludGsoIlJlc3VsdDogaG9zdGJ5dGU9JXMgZHJpdmVyYnl0ZT0lc1xuIiwKLQkgICAgICAgKGhiIDwgTlVNX0hPU1RCWVRFX1NUUlMgPyBob3N0Ynl0ZV90YWJsZVtoYl0gICAgIDogImludmFsaWQiKSwKLQkgICAgICAgKGRiIDwgTlVNX0RSSVZFUkJZVEVfU1RSUyA/IGRyaXZlcmJ5dGVfdGFibGVbZGJdIDogImludmFsaWQiKSk7Ci19Ci0KLSNlbHNlCi0KLXZvaWQgc2NzaV9zaG93X3Jlc3VsdChpbnQgcmVzdWx0KQotewotCXByaW50aygiUmVzdWx0OiBob3N0Ynl0ZT0weCUwMnggZHJpdmVyYnl0ZT0weCUwMnhcbiIsCi0JICAgICAgIGhvc3RfYnl0ZShyZXN1bHQpLCBkcml2ZXJfYnl0ZShyZXN1bHQpKTsKLX0KIAogI2VuZGlmCi1FWFBPUlRfU1lNQk9MKHNjc2lfc2hvd19yZXN1bHQpOwogCi0KLXZvaWQgc2NzaV9wcmludF9yZXN1bHQoc3RydWN0IHNjc2lfY21uZCAqY21kKQorY29uc3QgY2hhciAqc2NzaV9ob3N0Ynl0ZV9zdHJpbmcoaW50IHJlc3VsdCkKIHsKLQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIiAiKTsKLQlzY3NpX3Nob3dfcmVzdWx0KGNtZC0+cmVzdWx0KTsKKwljb25zdCBjaGFyICpoYl9zdHJpbmcgPSBOVUxMOworI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUworCWludCBoYiA9IGhvc3RfYnl0ZShyZXN1bHQpOworCisJaWYgKGhiIDwgQVJSQVlfU0laRShob3N0Ynl0ZV90YWJsZSkpCisJCWhiX3N0cmluZyA9IGhvc3RieXRlX3RhYmxlW2hiXTsKKyNlbmRpZgorCXJldHVybiBoYl9zdHJpbmc7Cit9CitFWFBPUlRfU1lNQk9MKHNjc2lfaG9zdGJ5dGVfc3RyaW5nKTsKKworY29uc3QgY2hhciAqc2NzaV9kcml2ZXJieXRlX3N0cmluZyhpbnQgcmVzdWx0KQoreworCWNvbnN0IGNoYXIgKmRiX3N0cmluZyA9IE5VTEw7CisjaWZkZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTCisJaW50IGRiID0gZHJpdmVyX2J5dGUocmVzdWx0KTsKKworCWlmIChkYiA8IEFSUkFZX1NJWkUoZHJpdmVyYnl0ZV90YWJsZSkpCisJCWRiX3N0cmluZyA9IGRyaXZlcmJ5dGVfdGFibGVbZGJdOworI2VuZGlmCisJcmV0dXJuIGRiX3N0cmluZzsKK30KK0VYUE9SVF9TWU1CT0woc2NzaV9kcml2ZXJieXRlX3N0cmluZyk7CisKKyNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKKyNkZWZpbmUgc2NzaV9tbHJldHVybl9uYW1lKHJlc3VsdCkJeyByZXN1bHQsICNyZXN1bHQgfQorc3RhdGljIGNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgc2NzaV9tbHJldHVybl9hcnJbXSA9IHsKKwlzY3NpX21scmV0dXJuX25hbWUoTkVFRFNfUkVUUlkpLAorCXNjc2lfbWxyZXR1cm5fbmFtZShTVUNDRVNTKSwKKwlzY3NpX21scmV0dXJuX25hbWUoRkFJTEVEKSwKKwlzY3NpX21scmV0dXJuX25hbWUoUVVFVUVEKSwKKwlzY3NpX21scmV0dXJuX25hbWUoU09GVF9FUlJPUiksCisJc2NzaV9tbHJldHVybl9uYW1lKEFERF9UT19NTFFVRVVFKSwKKwlzY3NpX21scmV0dXJuX25hbWUoVElNRU9VVF9FUlJPUiksCisJc2NzaV9tbHJldHVybl9uYW1lKFNDU0lfUkVUVVJOX05PVF9IQU5ETEVEKSwKKwlzY3NpX21scmV0dXJuX25hbWUoRkFTVF9JT19GQUlMKQorfTsKKyNlbmRpZgorCitjb25zdCBjaGFyICpzY3NpX21scmV0dXJuX3N0cmluZyhpbnQgcmVzdWx0KQoreworI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUworCWNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgKmFyciA9IHNjc2lfbWxyZXR1cm5fYXJyOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoc2NzaV9tbHJldHVybl9hcnIpOyArK2ssICsrYXJyKSB7CisJCWlmIChyZXN1bHQgPT0gYXJyLT52YWx1ZSkKKwkJCXJldHVybiBhcnItPm5hbWU7CisJfQorI2VuZGlmCisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHNjc2lfbWxyZXR1cm5fc3RyaW5nKTsKKwordm9pZCBzY3NpX3ByaW50X3Jlc3VsdChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGRpc3Bvc2l0aW9uKQoreworCWNvbnN0IGNoYXIgKm1scmV0X3N0cmluZyA9IHNjc2lfbWxyZXR1cm5fc3RyaW5nKGRpc3Bvc2l0aW9uKTsKKwljb25zdCBjaGFyICpoYl9zdHJpbmcgPSBzY3NpX2hvc3RieXRlX3N0cmluZyhjbWQtPnJlc3VsdCk7CisJY29uc3QgY2hhciAqZGJfc3RyaW5nID0gc2NzaV9kcml2ZXJieXRlX3N0cmluZyhjbWQtPnJlc3VsdCk7CisKKwlpZiAoaGJfc3RyaW5nIHx8IGRiX3N0cmluZykKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkgICAgIiVzJXMgUmVzdWx0OiBob3N0Ynl0ZT0lcyBkcml2ZXJieXRlPSVzIiwKKwkJCSAgICBtc2cgPyBtc2cgOiAiIiwKKwkJCSAgICBtbHJldF9zdHJpbmcgPyBtbHJldF9zdHJpbmcgOiAiVU5LTk9XTiIsCisJCQkgICAgaGJfc3RyaW5nID8gaGJfc3RyaW5nIDogImludmFsaWQiLAorCQkJICAgIGRiX3N0cmluZyA/IGRiX3N0cmluZyA6ICJpbnZhbGlkIik7CisJZWxzZQorCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKKwkJCSAgICAiJXMlcyBSZXN1bHQ6IGhvc3RieXRlPTB4JTAyeCBkcml2ZXJieXRlPTB4JTAyeCIsCisJCQkgICAgbXNnID8gbXNnIDogIiIsCisJCQkgICAgbWxyZXRfc3RyaW5nID8gbWxyZXRfc3RyaW5nIDogIlVOS05PV04iLAorCQkJICAgIGhvc3RfYnl0ZShjbWQtPnJlc3VsdCksIGRyaXZlcl9ieXRlKGNtZC0+cmVzdWx0KSk7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX3Njc2kuYwppbmRleCA4NjEwM2M4Li40ZDBiNmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9fc2NzaS5jCkBAIC0xNTIsMjggKzE1Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotY3Npb19zY3NpX3RhZyhzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCwgdWludDhfdCAqdGFnLCB1aW50OF90IGhxLAotCSAgICAgIHVpbnQ4X3Qgb3EsIHVpbnQ4X3Qgc3EpCi17Ci0JY2hhciBzdGFnWzJdOwotCi0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY21uZCwgc3RhZykpIHsKLQkJc3dpdGNoIChzdGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQkqdGFnID0gaHE7Ci0JCQlicmVhazsKLQkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJCSp0YWcgPSBvcTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJKnRhZyA9IHNxOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UKLQkJKnRhZyA9IDA7Ci19Ci0KIC8qCiAgKiBjc2lvX3Njc2lfZmNwX2NtbmQgLSBGcmFtZSB0aGUgU0NTSSBGQ1AgY29tbWFuZCBwYXlsb2QuCiAgKiBAcmVxOiBJTyByZXEgc3RydWN0dXJlLgpAQCAtMTkyLDExICsxNzAsMTIgQEAKIAkJaW50X3RvX3Njc2lsdW4oc2NtbmQtPmRldmljZS0+bHVuLCAmZmNwX2NtbmQtPmZjX2x1bik7CiAJCWZjcF9jbW5kLT5mY190bV9mbGFncyA9IDA7CiAJCWZjcF9jbW5kLT5mY19jbWRyZWYgPSAwOwotCQlmY3BfY21uZC0+ZmNfcHJpX3RhID0gMDsKIAogCQltZW1jcHkoZmNwX2NtbmQtPmZjX2NkYiwgc2NtbmQtPmNtbmQsIDE2KTsKLQkJY3Npb19zY3NpX3RhZyhzY21uZCwgJmZjcF9jbW5kLT5mY19wcmlfdGEsCi0JCQkgICAgICBGQ1BfUFRBX0hFQURRLCBGQ1BfUFRBX09SREVSRUQsIEZDUF9QVEFfU0lNUExFKTsKKwkJaWYgKHNjbW5kLT5mbGFncyAmIFNDTURfVEFHR0VEKQorCQkJZmNwX2NtbmQtPmZjX3ByaV90YSA9IEZDUF9QVEFfU0lNUExFOworCQllbHNlCisJCQlmY3BfY21uZC0+ZmNfcHJpX3RhID0gMDsKIAkJZmNwX2NtbmQtPmZjX2RsID0gY3B1X3RvX2JlMzIoc2NzaV9idWZmbGVuKHNjbW5kKSk7CiAKIAkJaWYgKHJlcS0+bnNnZSkKQEAgLTIyNjIsMTEgKzIyNDEsNyBAQAogc3RhdGljIGludAogY3Npb19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBjc2lvX2x1bl9xZGVwdGgpOwotCWVsc2UKLQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBjc2lvX2x1bl9xZGVwdGgpOwotCisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgY3Npb19sdW5fcWRlcHRoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMxMSw2ICsyMjg2LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQk9IGNzaW9fZmNvZV9scG9ydF9hdHRycywKIAkubWF4X3NlY3RvcnMJCT0gQ1NJT19NQVhfU0VDVE9SX1NJWkUsCisJLnVzZV9ibGtfdGFncwkJPSAxLAogfTsKIAogc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBjc2lvX2Zjb2Vfc2hvc3RfdnBvcnRfdGVtcGxhdGUgPSB7CkBAIC0yMzMwLDYgKzIzMDYsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuc2hvc3RfYXR0cnMJCT0gY3Npb19mY29lX3Zwb3J0X2F0dHJzLAogCS5tYXhfc2VjdG9ycwkJPSBDU0lPX01BWF9TRUNUT1JfU0laRSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2IzaS9jeGdiM2kuYyBiL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmMKaW5kZXggNDk2OTJhMS4uM2RiNGM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2IzaS9jeGdiM2kuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjNpL2N4Z2IzaS5jCkBAIC04Niw3ICs4Niw3IEBACiAJLnByb2NfbmFtZQk9IERSVl9NT0RVTEVfTkFNRSwKIAkuY2FuX3F1ZXVlCT0gQ1hHQjNJX1NDU0lfSE9TVF9RREVQVEgsCiAJLnF1ZXVlY29tbWFuZAk9IGlzY3NpX3F1ZXVlY29tbWFuZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuc2dfdGFibGVzaXplCT0gU0dfQUxMLAogCS5tYXhfc2VjdG9ycwk9IDB4RkZGRiwKIAkuY21kX3Blcl9sdW4JPSBJU0NTSV9ERUZfQ01EX1BFUl9MVU4sCkBAIC05Niw2ICs5Niw3IEBACiAJLnRhcmdldF9hbGxvYwk9IGlzY3NpX3RhcmdldF9hbGxvYywKIAkudXNlX2NsdXN0ZXJpbmcJPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLnRoaXNfaWQJPSAtMSwKKwkudHJhY2tfcXVldWVfZGVwdGggPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgY3hnYjNpX2lzY3NpX3RyYW5zcG9ydCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiNGkvY3hnYjRpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jCmluZGV4IDE1MDgxMjUuLmU2YzNmNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiNGkvY3hnYjRpLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2I0aS9jeGdiNGkuYwpAQCAtODksNyArODksNyBAQAogCS5wcm9jX25hbWUJPSBEUlZfTU9EVUxFX05BTUUsCiAJLmNhbl9xdWV1ZQk9IENYR0I0SV9TQ1NJX0hPU1RfUURFUFRILAogCS5xdWV1ZWNvbW1hbmQJPSBpc2NzaV9xdWV1ZWNvbW1hbmQsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLnNnX3RhYmxlc2l6ZQk9IFNHX0FMTCwKIAkubWF4X3NlY3RvcnMJPSAweEZGRkYsCiAJLmNtZF9wZXJfbHVuCT0gSVNDU0lfREVGX0NNRF9QRVJfTFVOLApAQCAtOTksNiArOTksNyBAQAogCS50YXJnZXRfYWxsb2MJPSBpc2NzaV90YXJnZXRfYWxsb2MsCiAJLnVzZV9jbHVzdGVyaW5nCT0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS50aGlzX2lkCT0gLTEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoID0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGN4Z2I0aV9pc2NzaV90cmFuc3BvcnQgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYwppbmRleCAzM2U0MjJlLi4xZGJhNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKQEAgLTk4LDI3ICs5OCw1MSBAQAogc3RhdGljIGludCBzY3NpX2RoX2hhbmRsZXJfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKIAkJCQkgIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyICpzY3NpX2RoKQogewotCWludCBlcnIgPSAwOworCXN0cnVjdCBzY3NpX2RoX2RhdGEgKmQ7CiAKIAlpZiAoc2Rldi0+c2NzaV9kaF9kYXRhKSB7CiAJCWlmIChzZGV2LT5zY3NpX2RoX2RhdGEtPnNjc2lfZGggIT0gc2NzaV9kaCkKLQkJCWVyciA9IC1FQlVTWTsKLQkJZWxzZQotCQkJa3JlZl9nZXQoJnNkZXYtPnNjc2lfZGhfZGF0YS0+a3JlZik7Ci0JfSBlbHNlIGlmIChzY3NpX2RoLT5hdHRhY2gpIHsKLQkJZXJyID0gc2NzaV9kaC0+YXR0YWNoKHNkZXYpOwotCQlpZiAoIWVycikgewotCQkJa3JlZl9pbml0KCZzZGV2LT5zY3NpX2RoX2RhdGEtPmtyZWYpOwotCQkJc2Rldi0+c2NzaV9kaF9kYXRhLT5zZGV2ID0gc2RldjsKLQkJfQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlrcmVmX2dldCgmc2Rldi0+c2NzaV9kaF9kYXRhLT5rcmVmKTsKKwkJcmV0dXJuIDA7CiAJfQotCXJldHVybiBlcnI7CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHNjc2lfZGgtPm1vZHVsZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZCA9IHNjc2lfZGgtPmF0dGFjaChzZGV2KTsKKwlpZiAoSVNfRVJSKGQpKSB7CisJCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IEF0dGFjaCBmYWlsZWQgKCVsZClcbiIsCisJCQkgICAgc2NzaV9kaC0+bmFtZSwgUFRSX0VSUihkKSk7CisJCW1vZHVsZV9wdXQoc2NzaV9kaC0+bW9kdWxlKTsKKwkJcmV0dXJuIFBUUl9FUlIoZCk7CisJfQorCisJZC0+c2NzaV9kaCA9IHNjc2lfZGg7CisJa3JlZl9pbml0KCZkLT5rcmVmKTsKKwlkLT5zZGV2ID0gc2RldjsKKworCXNwaW5fbG9ja19pcnEoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jayk7CisJc2Rldi0+c2NzaV9kaF9kYXRhID0gZDsKKwlzcGluX3VubG9ja19pcnEoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV0YWNoX2hhbmRsZXIgKHN0cnVjdCBrcmVmICprcmVmKQogewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc2NzaV9kaF9kYXRhLCBrcmVmKTsKLQlzY3NpX2RoX2RhdGEtPnNjc2lfZGgtPmRldGFjaChzY3NpX2RoX2RhdGEtPnNkZXYpOworCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YSA9CisJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc2NzaV9kaF9kYXRhLCBrcmVmKTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciAqc2NzaV9kaCA9IHNjc2lfZGhfZGF0YS0+c2NzaV9kaDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBzY3NpX2RoX2RhdGEtPnNkZXY7CisKKwlzcGluX2xvY2tfaXJxKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOworCXNkZXYtPnNjc2lfZGhfZGF0YSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOworCisJc2NzaV9kaC0+ZGV0YWNoKHNkZXYpOworCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IERldGFjaGVkXG4iLCBzY3NpX2RoLT5uYW1lKTsKKwltb2R1bGVfcHV0KHNjc2lfZGgtPm1vZHVsZSk7CiB9CiAKIC8qCkBAIC0xNDEsNyArMTY1LDcgQEAKIAlpZiAoIXNjc2lfZGgpCiAJCXNjc2lfZGggPSBzZGV2LT5zY3NpX2RoX2RhdGEtPnNjc2lfZGg7CiAKLQlpZiAoc2NzaV9kaCAmJiBzY3NpX2RoLT5kZXRhY2gpCisJaWYgKHNjc2lfZGgpCiAJCWtyZWZfcHV0KCZzZGV2LT5zY3NpX2RoX2RhdGEtPmtyZWYsIF9fZGV0YWNoX2hhbmRsZXIpOwogfQogCkBAIC0zMzAsNiArMzU0LDkgQEAKIAlpZiAoZ2V0X2RldmljZV9oYW5kbGVyKHNjc2lfZGgtPm5hbWUpKQogCQlyZXR1cm4gLUVCVVNZOwogCisJaWYgKCFzY3NpX2RoLT5hdHRhY2ggfHwgIXNjc2lfZGgtPmRldGFjaCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzcGluX2xvY2soJmxpc3RfbG9jayk7CiAJbGlzdF9hZGQoJnNjc2lfZGgtPmxpc3QsICZzY3NpX2RoX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZsaXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCmluZGV4IGZkNzhiZGMuLjg1NGI1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKQEAgLTYyLDYgKzYyLDcgQEAKICNkZWZpbmUgQUxVQV9PUFRJTUlaRV9TVFBHCQkxCiAKIHN0cnVjdCBhbHVhX2RoX2RhdGEgeworCXN0cnVjdCBzY3NpX2RoX2RhdGEJZGhfZGF0YTsKIAlpbnQJCQlncm91cF9pZDsKIAlpbnQJCQlyZWxfcG9ydDsKIAlpbnQJCQl0cGdzOwpAQCAtODcsOSArODgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbHVhX2RoX2RhdGEgKmdldF9hbHVhX2RhdGEoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YSA9IHNkZXYtPnNjc2lfZGhfZGF0YTsKLQlCVUdfT04oc2NzaV9kaF9kYXRhID09IE5VTEwpOwotCXJldHVybiAoKHN0cnVjdCBhbHVhX2RoX2RhdGEgKikgc2NzaV9kaF9kYXRhLT5idWYpOworCXJldHVybiBjb250YWluZXJfb2Yoc2Rldi0+c2NzaV9kaF9kYXRhLCBzdHJ1Y3QgYWx1YV9kaF9kYXRhLCBkaF9kYXRhKTsKIH0KIAogc3RhdGljIGludCByZWFsbG9jX2J1ZmZlcihzdHJ1Y3QgYWx1YV9kaF9kYXRhICpoLCB1bnNpZ25lZCBsZW4pCkBAIC04MjUsOCArODI0LDQ5IEBACiAJcmV0dXJuIChzY3NpX2RldmljZV90cGdzKHNkZXYpICE9IDApOwogfQogCi1zdGF0aWMgaW50IGFsdWFfYnVzX2F0dGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwotc3RhdGljIHZvaWQgYWx1YV9idXNfZGV0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CisvKgorICogYWx1YV9idXNfYXR0YWNoIC0gQXR0YWNoIGRldmljZSBoYW5kbGVyCisgKiBAc2RldjogZGV2aWNlIHRvIGJlIGF0dGFjaGVkIHRvCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9kaF9kYXRhICphbHVhX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBhbHVhX2RoX2RhdGEgKmg7CisJaW50IGVycjsKKworCWggPSBremFsbG9jKHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWgtPnRwZ3MgPSBUUEdTX01PREVfVU5JTklUSUFMSVpFRDsKKwloLT5zdGF0ZSA9IFRQR1NfU1RBVEVfT1BUSU1JWkVEOworCWgtPmdyb3VwX2lkID0gLTE7CisJaC0+cmVsX3BvcnQgPSAtMTsKKwloLT5idWZmID0gaC0+aW5xOworCWgtPmJ1ZmZsZW4gPSBBTFVBX0lOUVVJUllfU0laRTsKKwloLT5zZGV2ID0gc2RldjsKKworCWVyciA9IGFsdWFfaW5pdGlhbGl6ZShzZGV2LCBoKTsKKwlpZiAoZXJyICE9IFNDU0lfREhfT0sgJiYgZXJyICE9IFNDU0lfREhfREVWX09GRkxJTkVEKQorCQlnb3RvIGZhaWxlZDsKKworCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IEF0dGFjaGVkXG4iLCBBTFVBX0RIX05BTUUpOworCXJldHVybiAmaC0+ZGhfZGF0YTsKK2ZhaWxlZDoKKwlrZnJlZShoKTsKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworLyoKKyAqIGFsdWFfYnVzX2RldGFjaCAtIERldGFjaCBkZXZpY2UgaGFuZGxlcgorICogQHNkZXY6IGRldmljZSB0byBiZSBkZXRhY2hlZCBmcm9tCisgKi8KK3N0YXRpYyB2b2lkIGFsdWFfYnVzX2RldGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IGFsdWFfZGhfZGF0YSAqaCA9IGdldF9hbHVhX2RhdGEoc2Rldik7CisKKwlpZiAoaC0+YnVmZiAmJiBoLT5pbnEgIT0gaC0+YnVmZikKKwkJa2ZyZWUoaC0+YnVmZik7CisJa2ZyZWUoaCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciBhbHVhX2RoID0gewogCS5uYW1lID0gQUxVQV9ESF9OQU1FLApAQCAtODQwLDc4ICs4ODAsNiBAQAogCS5tYXRjaCA9IGFsdWFfbWF0Y2gsCiB9OwogCi0vKgotICogYWx1YV9idXNfYXR0YWNoIC0gQXR0YWNoIGRldmljZSBoYW5kbGVyCi0gKiBAc2RldjogZGV2aWNlIHRvIGJlIGF0dGFjaGVkIHRvCi0gKi8KLXN0YXRpYyBpbnQgYWx1YV9idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGE7Ci0Jc3RydWN0IGFsdWFfZGhfZGF0YSAqaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSBTQ1NJX0RIX09LOwotCi0Jc2NzaV9kaF9kYXRhID0ga3phbGxvYyhzaXplb2YoKnNjc2lfZGhfZGF0YSkKLQkJCSAgICAgICArIHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNjc2lfZGhfZGF0YSkgewotCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBBdHRhY2ggZmFpbGVkXG4iLAotCQkJICAgIEFMVUFfREhfTkFNRSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNjc2lfZGhfZGF0YS0+c2NzaV9kaCA9ICZhbHVhX2RoOwotCWggPSAoc3RydWN0IGFsdWFfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1ZjsKLQloLT50cGdzID0gVFBHU19NT0RFX1VOSU5JVElBTElaRUQ7Ci0JaC0+c3RhdGUgPSBUUEdTX1NUQVRFX09QVElNSVpFRDsKLQloLT5ncm91cF9pZCA9IC0xOwotCWgtPnJlbF9wb3J0ID0gLTE7Ci0JaC0+YnVmZiA9IGgtPmlucTsKLQloLT5idWZmbGVuID0gQUxVQV9JTlFVSVJZX1NJWkU7Ci0JaC0+c2RldiA9IHNkZXY7Ci0KLQllcnIgPSBhbHVhX2luaXRpYWxpemUoc2RldiwgaCk7Ci0JaWYgKChlcnIgIT0gU0NTSV9ESF9PSykgJiYgKGVyciAhPSBTQ1NJX0RIX0RFVl9PRkZMSU5FRCkpCi0JCWdvdG8gZmFpbGVkOwotCi0JaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCi0JCWdvdG8gZmFpbGVkOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IHNjc2lfZGhfZGF0YTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlzZGV2X3ByaW50ayhLRVJOX05PVElDRSwgc2RldiwgIiVzOiBBdHRhY2hlZFxuIiwgQUxVQV9ESF9OQU1FKTsKLQotCXJldHVybiAwOwotCi1mYWlsZWQ6Ci0Ja2ZyZWUoc2NzaV9kaF9kYXRhKTsKLQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBub3QgYXR0YWNoZWRcbiIsIEFMVUFfREhfTkFNRSk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qCi0gKiBhbHVhX2J1c19kZXRhY2ggLSBEZXRhY2ggZGV2aWNlIGhhbmRsZXIKLSAqIEBzZGV2OiBkZXZpY2UgdG8gYmUgZGV0YWNoZWQgZnJvbQotICovCi1zdGF0aWMgdm9pZCBhbHVhX2J1c19kZXRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQotewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YTsKLQlzdHJ1Y3QgYWx1YV9kaF9kYXRhICpoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0Jc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KLQloID0gKHN0cnVjdCBhbHVhX2RoX2RhdGEgKikgc2NzaV9kaF9kYXRhLT5idWY7Ci0JaWYgKGgtPmJ1ZmYgJiYgaC0+aW5xICE9IGgtPmJ1ZmYpCi0JCWtmcmVlKGgtPmJ1ZmYpOwotCWtmcmVlKHNjc2lfZGhfZGF0YSk7Ci0JbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0Jc2Rldl9wcmludGsoS0VSTl9OT1RJQ0UsIHNkZXYsICIlczogRGV0YWNoZWRcbiIsIEFMVUFfREhfTkFNRSk7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGFsdWFfaW5pdCh2b2lkKQogewogCWludCByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwppbmRleCA4NDc2NTM4Li42ZWQxY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwpAQCAtNzIsNiArNzIsNyBAQAogfTsKIAogc3RydWN0IGNsYXJpaW9uX2RoX2RhdGEgeworCXN0cnVjdCBzY3NpX2RoX2RhdGEgZGhfZGF0YTsKIAkvKgogCSAqIEZsYWdzOgogCSAqICBDTEFSSUlPTl9TSE9SVF9UUkVTUEFTUwpAQCAtMTE2LDkgKzExNyw4IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGFyaWlvbl9kaF9kYXRhCiAJCQkqZ2V0X2NsYXJpaW9uX2RhdGEoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YSA9IHNkZXYtPnNjc2lfZGhfZGF0YTsKLQlCVUdfT04oc2NzaV9kaF9kYXRhID09IE5VTEwpOwotCXJldHVybiAoKHN0cnVjdCBjbGFyaWlvbl9kaF9kYXRhICopIHNjc2lfZGhfZGF0YS0+YnVmKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkZXYtPnNjc2lfZGhfZGF0YSwgc3RydWN0IGNsYXJpaW9uX2RoX2RhdGEsCisJCQlkaF9kYXRhKTsKIH0KIAogLyoKQEAgLTYyMiw3ICs2MjIsMTAgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNjc2lfZGhfZGV2bGlzdCBjbGFyaWlvbl9kZXZfbGlzdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY2hhciAqdmVuZG9yOworCWNoYXIgKm1vZGVsOworfSBjbGFyaWlvbl9kZXZfbGlzdFtdID0gewogCXsiREdDIiwgIlJBSUQifSwKIAl7IkRHQyIsICJESVNLIn0sCiAJeyJER0MiLCAiVlJBSUQifSwKQEAgLTY0NywzOSArNjUwLDE0IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IGNsYXJpaW9uX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKLXN0YXRpYyB2b2lkIGNsYXJpaW9uX2J1c19kZXRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKLQotc3RhdGljIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyIGNsYXJpaW9uX2RoID0gewotCS5uYW1lCQk9IENMQVJJSU9OX05BTUUsCi0JLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKLQkuZGV2bGlzdAk9IGNsYXJpaW9uX2Rldl9saXN0LAotCS5hdHRhY2gJCT0gY2xhcmlpb25fYnVzX2F0dGFjaCwKLQkuZGV0YWNoCQk9IGNsYXJpaW9uX2J1c19kZXRhY2gsCi0JLmNoZWNrX3NlbnNlCT0gY2xhcmlpb25fY2hlY2tfc2Vuc2UsCi0JLmFjdGl2YXRlCT0gY2xhcmlpb25fYWN0aXZhdGUsCi0JLnByZXBfZm4JPSBjbGFyaWlvbl9wcmVwX2ZuLAotCS5zZXRfcGFyYW1zCT0gY2xhcmlpb25fc2V0X3BhcmFtcywKLQkubWF0Y2gJCT0gY2xhcmlpb25fbWF0Y2gsCi19OwotCi1zdGF0aWMgaW50IGNsYXJpaW9uX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQorc3RhdGljIHN0cnVjdCBzY3NpX2RoX2RhdGEgKmNsYXJpaW9uX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YTsKIAlzdHJ1Y3QgY2xhcmlpb25fZGhfZGF0YSAqaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKLQlzY3NpX2RoX2RhdGEgPSBremFsbG9jKHNpemVvZigqc2NzaV9kaF9kYXRhKQotCQkJICAgICAgICsgc2l6ZW9mKCpoKSAsIEdGUF9LRVJORUwpOwotCWlmICghc2NzaV9kaF9kYXRhKSB7Ci0JCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IEF0dGFjaCBmYWlsZWRcbiIsCi0JCQkgICAgQ0xBUklJT05fTkFNRSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNjc2lfZGhfZGF0YS0+c2NzaV9kaCA9ICZjbGFyaWlvbl9kaDsKLQloID0gKHN0cnVjdCBjbGFyaWlvbl9kaF9kYXRhICopIHNjc2lfZGhfZGF0YS0+YnVmOworCWggPSBremFsbG9jKHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWgtPmx1bl9zdGF0ZSA9IENMQVJJSU9OX0xVTl9VTklOSVRJQUxJWkVEOwogCWgtPmRlZmF1bHRfc3AgPSBDTEFSSUlPTl9VTkJPVU5EX0xVOwogCWgtPmN1cnJlbnRfc3AgPSBDTEFSSUlPTl9VTkJPVU5EX0xVOwpAQCAtNjkyLDQ1ICs2NzAsMzcgQEAKIAlpZiAoZXJyICE9IFNDU0lfREhfT0spCiAJCWdvdG8gZmFpbGVkOwogCi0JaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCi0JCWdvdG8gZmFpbGVkOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IHNjc2lfZGhfZGF0YTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQogCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKIAkJICAgICIlczogY29ubmVjdGVkIHRvIFNQICVjIFBvcnQgJWQgKCVzLCBkZWZhdWx0IFNQICVjKVxuIiwKIAkJICAgIENMQVJJSU9OX05BTUUsIGgtPmN1cnJlbnRfc3AgKyAnQScsCiAJCSAgICBoLT5wb3J0LCBsdW5fc3RhdGVbaC0+bHVuX3N0YXRlXSwKIAkJICAgIGgtPmRlZmF1bHRfc3AgKyAnQScpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuICZoLT5kaF9kYXRhOwogCiBmYWlsZWQ6Ci0Ja2ZyZWUoc2NzaV9kaF9kYXRhKTsKLQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBub3QgYXR0YWNoZWRcbiIsCi0JCSAgICBDTEFSSUlPTl9OQU1FKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlrZnJlZShoKTsKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIAogc3RhdGljIHZvaWQgY2xhcmlpb25fYnVzX2RldGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNsYXJpaW9uX2RoX2RhdGEgKmggPSBnZXRfY2xhcmlpb25fZGF0YShzZGV2KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlzY3NpX2RoX2RhdGEgPSBzZGV2LT5zY3NpX2RoX2RhdGE7Ci0Jc2Rldi0+c2NzaV9kaF9kYXRhID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IERldGFjaGVkXG4iLAotCQkgICAgQ0xBUklJT05fTkFNRSk7Ci0KLQlrZnJlZShzY3NpX2RoX2RhdGEpOwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCWtmcmVlKGgpOwogfQogCitzdGF0aWMgc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgY2xhcmlpb25fZGggPSB7CisJLm5hbWUJCT0gQ0xBUklJT05fTkFNRSwKKwkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5hdHRhY2gJCT0gY2xhcmlpb25fYnVzX2F0dGFjaCwKKwkuZGV0YWNoCQk9IGNsYXJpaW9uX2J1c19kZXRhY2gsCisJLmNoZWNrX3NlbnNlCT0gY2xhcmlpb25fY2hlY2tfc2Vuc2UsCisJLmFjdGl2YXRlCT0gY2xhcmlpb25fYWN0aXZhdGUsCisJLnByZXBfZm4JPSBjbGFyaWlvbl9wcmVwX2ZuLAorCS5zZXRfcGFyYW1zCT0gY2xhcmlpb25fc2V0X3BhcmFtcywKKwkubWF0Y2gJCT0gY2xhcmlpb25fbWF0Y2gsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBjbGFyaWlvbl9pbml0KHZvaWQpCiB7CiAJaW50IHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfaHBfc3cuYwppbmRleCA0ZWUyNzU5Li40ODVkOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2hwX3N3LmMKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgSFBfU1dfUEFUSF9QQVNTSVZFCQkxCiAKIHN0cnVjdCBocF9zd19kaF9kYXRhIHsKKwlzdHJ1Y3Qgc2NzaV9kaF9kYXRhIGRoX2RhdGE7CiAJdW5zaWduZWQgY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwogCWludCBwYXRoX3N0YXRlOwogCWludCByZXRyaWVzOwpAQCAtNTEsOSArNTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBocF9zd19kaF9kYXRhICpnZXRfaHBfc3dfZGF0YShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCUJVR19PTihzY3NpX2RoX2RhdGEgPT0gTlVMTCk7Ci0JcmV0dXJuICgoc3RydWN0IGhwX3N3X2RoX2RhdGEgKikgc2NzaV9kaF9kYXRhLT5idWYpOworCXJldHVybiBjb250YWluZXJfb2Yoc2Rldi0+c2NzaV9kaF9kYXRhLCBzdHJ1Y3QgaHBfc3dfZGhfZGF0YSwgZGhfZGF0YSk7CiB9CiAKIC8qCkBAIC0zMTIsNyArMzExLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NzaV9kaF9kZXZsaXN0IGhwX3N3X2RoX2RhdGFfbGlzdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY2hhciAqdmVuZG9yOworCWNoYXIgKm1vZGVsOworfSBocF9zd19kaF9kYXRhX2xpc3RbXSA9IHsKIAl7IkNPTVBBUSIsICJNU0ExMDAwIFZPTFVNRSJ9LAogCXsiQ09NUEFRIiwgIkhTVjExMCJ9LAogCXsiSFAiLCAiSFNWMTAwIn0sCkBAIC0zMzgsMzcgKzM0MCwxNCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBocF9zd19idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci1zdGF0aWMgdm9pZCBocF9zd19idXNfZGV0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciBocF9zd19kaCA9IHsKLQkubmFtZQkJPSBIUF9TV19OQU1FLAotCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCi0JLmRldmxpc3QJPSBocF9zd19kaF9kYXRhX2xpc3QsCi0JLmF0dGFjaAkJPSBocF9zd19idXNfYXR0YWNoLAotCS5kZXRhY2gJCT0gaHBfc3dfYnVzX2RldGFjaCwKLQkuYWN0aXZhdGUJPSBocF9zd19hY3RpdmF0ZSwKLQkucHJlcF9mbgk9IGhwX3N3X3ByZXBfZm4sCi0JLm1hdGNoCQk9IGhwX3N3X21hdGNoLAotfTsKLQotc3RhdGljIGludCBocF9zd19idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpocF9zd19idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGE7CiAJc3RydWN0IGhwX3N3X2RoX2RhdGEgKmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0Jc2NzaV9kaF9kYXRhID0ga3phbGxvYyhzaXplb2YoKnNjc2lfZGhfZGF0YSkKLQkJCSAgICAgICArIHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNjc2lfZGhfZGF0YSkgewotCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBBdHRhY2ggRmFpbGVkXG4iLAotCQkJICAgIEhQX1NXX05BTUUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzY3NpX2RoX2RhdGEtPnNjc2lfZGggPSAmaHBfc3dfZGg7Ci0JaCA9IChzdHJ1Y3QgaHBfc3dfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1ZjsKKwloID0ga3phbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWgtPnBhdGhfc3RhdGUgPSBIUF9TV19QQVRIX1VOSU5JVElBTElaRUQ7CiAJaC0+cmV0cmllcyA9IEhQX1NXX1JFVFJJRVM7CiAJaC0+c2RldiA9IHNkZXY7CkBAIC0zNzcsNDIgKzM1NiwzMiBAQAogCWlmIChyZXQgIT0gU0NTSV9ESF9PSyB8fCBoLT5wYXRoX3N0YXRlID09IEhQX1NXX1BBVEhfVU5JTklUSUFMSVpFRCkKIAkJZ290byBmYWlsZWQ7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKLQkJZ290byBmYWlsZWQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0Jc2Rldi0+c2NzaV9kaF9kYXRhID0gc2NzaV9kaF9kYXRhOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCiAJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiJXM6IGF0dGFjaGVkIHRvICVzIHBhdGhcbiIsCiAJCSAgICBIUF9TV19OQU1FLCBoLT5wYXRoX3N0YXRlID09IEhQX1NXX1BBVEhfQUNUSVZFPwogCQkgICAgImFjdGl2ZSI6InBhc3NpdmUiKTsKLQotCXJldHVybiAwOwotCisJcmV0dXJuICZoLT5kaF9kYXRhOwogZmFpbGVkOgotCWtmcmVlKHNjc2lfZGhfZGF0YSk7Ci0Jc2Rldl9wcmludGsoS0VSTl9FUlIsIHNkZXYsICIlczogbm90IGF0dGFjaGVkXG4iLAotCQkgICAgSFBfU1dfTkFNRSk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJa2ZyZWUoaCk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhwX3N3X2J1c19kZXRhY2goIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiApCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGhwX3N3X2RoX2RhdGEgKmggPSBnZXRfaHBfc3dfZGF0YShzZGV2KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlzY3NpX2RoX2RhdGEgPSBzZGV2LT5zY3NpX2RoX2RhdGE7Ci0Jc2Rldi0+c2NzaV9kaF9kYXRhID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQotCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IERldGFjaGVkXG4iLCBIUF9TV19OQU1FKTsKLQotCWtmcmVlKHNjc2lfZGhfZGF0YSk7CisJa2ZyZWUoaCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciBocF9zd19kaCA9IHsKKwkubmFtZQkJPSBIUF9TV19OQU1FLAorCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmF0dGFjaAkJPSBocF9zd19idXNfYXR0YWNoLAorCS5kZXRhY2gJCT0gaHBfc3dfYnVzX2RldGFjaCwKKwkuYWN0aXZhdGUJPSBocF9zd19hY3RpdmF0ZSwKKwkucHJlcF9mbgk9IGhwX3N3X3ByZXBfZm4sCisJLm1hdGNoCQk9IGhwX3N3X21hdGNoLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaHBfc3dfaW5pdCh2b2lkKQogewogCXJldHVybiBzY3NpX3JlZ2lzdGVyX2RldmljZV9oYW5kbGVyKCZocF9zd19kaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKaW5kZXggMWI1YmM5Mi4uYjQ2YWNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwpAQCAtMTgxLDYgKzE4MSw3IEBACiB9OwogCiBzdHJ1Y3QgcmRhY19kaF9kYXRhIHsKKwlzdHJ1Y3Qgc2NzaV9kaF9kYXRhCWRoX2RhdGE7CiAJc3RydWN0IHJkYWNfY29udHJvbGxlcgkqY3RscjsKICNkZWZpbmUgVU5JTklUSUFMSVpFRF9MVU4JKDEgPDwgOCkKIAl1bnNpZ25lZAkJbHVuOwpAQCAtMjYxLDkgKzI2Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJkYWNfZGhfZGF0YSAqZ2V0X3JkYWNfZGF0YShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCUJVR19PTihzY3NpX2RoX2RhdGEgPT0gTlVMTCk7Ci0JcmV0dXJuICgoc3RydWN0IHJkYWNfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1Zik7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZGV2LT5zY3NpX2RoX2RhdGEsIHN0cnVjdCByZGFjX2RoX2RhdGEsIGRoX2RhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IHJlcXVlc3QgKmdldF9yZGFjX3JlcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCkBAIC03NzksNyArNzc4LDEwIEBACiAJcmV0dXJuIFNDU0lfUkVUVVJOX05PVF9IQU5ETEVEOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNjc2lfZGhfZGV2bGlzdCByZGFjX2Rldl9saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljaGFyICp2ZW5kb3I7CisJY2hhciAqbW9kZWw7Cit9IHJkYWNfZGV2X2xpc3RbXSA9IHsKIAl7IklCTSIsICIxNzIyIn0sCiAJeyJJQk0iLCAiMTcyNCJ9LAogCXsiSUJNIiwgIjE3MjYifSwKQEAgLTgyNSw0MCArODI3LDE2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IHJkYWNfYnVzX2F0dGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwotc3RhdGljIHZvaWQgcmRhY19idXNfZGV0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciByZGFjX2RoID0gewotCS5uYW1lID0gUkRBQ19OQU1FLAotCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKLQkuZGV2bGlzdCA9IHJkYWNfZGV2X2xpc3QsCi0JLnByZXBfZm4gPSByZGFjX3ByZXBfZm4sCi0JLmNoZWNrX3NlbnNlID0gcmRhY19jaGVja19zZW5zZSwKLQkuYXR0YWNoID0gcmRhY19idXNfYXR0YWNoLAotCS5kZXRhY2ggPSByZGFjX2J1c19kZXRhY2gsCi0JLmFjdGl2YXRlID0gcmRhY19hY3RpdmF0ZSwKLQkubWF0Y2ggPSByZGFjX21hdGNoLAotfTsKLQotc3RhdGljIGludCByZGFjX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQorc3RhdGljIHN0cnVjdCBzY3NpX2RoX2RhdGEgKnJkYWNfYnVzX2F0dGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhOwogCXN0cnVjdCByZGFjX2RoX2RhdGEgKmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCWNoYXIgYXJyYXlfbmFtZVtBUlJBWV9MQUJFTF9MRU5dOwogCWNoYXIgYXJyYXlfaWRbVU5JUVVFX0lEX0xFTl07CiAKLQlzY3NpX2RoX2RhdGEgPSBremFsbG9jKHNpemVvZigqc2NzaV9kaF9kYXRhKQotCQkJICAgICAgICsgc2l6ZW9mKCpoKSAsIEdGUF9LRVJORUwpOwotCWlmICghc2NzaV9kaF9kYXRhKSB7Ci0JCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IEF0dGFjaCBmYWlsZWRcbiIsCi0JCQkgICAgUkRBQ19OQU1FKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc2NzaV9kaF9kYXRhLT5zY3NpX2RoID0gJnJkYWNfZGg7Ci0JaCA9IChzdHJ1Y3QgcmRhY19kaF9kYXRhICopIHNjc2lfZGhfZGF0YS0+YnVmOworCWggPSBremFsbG9jKHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWgtPmx1biA9IFVOSU5JVElBTElaRURfTFVOOwogCWgtPnN0YXRlID0gUkRBQ19TVEFURV9BQ1RJVkU7CiAKQEAgLTg3OCwxOSArODU2LDEyIEBACiAJaWYgKGVyciAhPSBTQ1NJX0RIX09LKQogCQlnb3RvIGNsZWFuX2N0bHI7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKLQkJZ290byBjbGVhbl9jdGxyOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IHNjc2lfZGhfZGF0YTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQogCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LAogCQkgICAgIiVzOiBMVU4gJWQgKCVzKSAoJXMpXG4iLAogCQkgICAgUkRBQ19OQU1FLCBoLT5sdW4sIG1vZGVbKGludCloLT5tb2RlXSwKIAkJICAgIGx1bl9zdGF0ZVsoaW50KWgtPmx1bl9zdGF0ZV0pOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuICZoLT5kaF9kYXRhOwogCiBjbGVhbl9jdGxyOgogCXNwaW5fbG9jaygmbGlzdF9sb2NrKTsKQEAgLTg5OCwzNyArODY5LDM0IEBACiAJc3Bpbl91bmxvY2soJmxpc3RfbG9jayk7CiAKIGZhaWxlZDoKLQlrZnJlZShzY3NpX2RoX2RhdGEpOwotCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IG5vdCBhdHRhY2hlZFxuIiwKLQkJICAgIFJEQUNfTkFNRSk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJa2ZyZWUoaCk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJkYWNfYnVzX2RldGFjaCggc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ICkKIHsKLQlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGE7Ci0Jc3RydWN0IHJkYWNfZGhfZGF0YSAqaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZGFjX2RoX2RhdGEgKmggPSBnZXRfcmRhY19kYXRhKHNkZXYpOwogCi0Jc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCWggPSAoc3RydWN0IHJkYWNfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1ZjsKIAlpZiAoaC0+Y3RsciAmJiBoLT5jdGxyLT5tc19xdWV1ZWQpCiAJCWZsdXNoX3dvcmtxdWV1ZShrbXBhdGhfcmRhY2QpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KIAlzcGluX2xvY2soJmxpc3RfbG9jayk7CiAJaWYgKGgtPmN0bHIpCiAJCWtyZWZfcHV0KCZoLT5jdGxyLT5rcmVmLCByZWxlYXNlX2NvbnRyb2xsZXIpOwogCXNwaW5fdW5sb2NrKCZsaXN0X2xvY2spOwotCWtmcmVlKHNjc2lfZGhfZGF0YSk7Ci0JbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0Jc2Rldl9wcmludGsoS0VSTl9OT1RJQ0UsIHNkZXYsICIlczogRGV0YWNoZWRcbiIsIFJEQUNfTkFNRSk7CisJa2ZyZWUoaCk7CiB9CiAKLQorc3RhdGljIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyIHJkYWNfZGggPSB7CisJLm5hbWUgPSBSREFDX05BTUUsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5wcmVwX2ZuID0gcmRhY19wcmVwX2ZuLAorCS5jaGVja19zZW5zZSA9IHJkYWNfY2hlY2tfc2Vuc2UsCisJLmF0dGFjaCA9IHJkYWNfYnVzX2F0dGFjaCwKKwkuZGV0YWNoID0gcmRhY19idXNfZGV0YWNoLAorCS5hY3RpdmF0ZSA9IHJkYWNfYWN0aXZhdGUsCisJLm1hdGNoID0gcmRhY19tYXRjaCwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IHJkYWNfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RteDMxOTFkLmMgYi9kcml2ZXJzL3Njc2kvZG14MzE5MWQuYwppbmRleCA0YjBkZDhjLi4zZTA4ODEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZG14MzE5MWQuYworKysgYi9kcml2ZXJzL3Njc2kvZG14MzE5MWQuYwpAQCAtMzMsMjAgKzMzLDIwIEBACiAvKgogICogRGVmaW5pdGlvbnMgZm9yIHRoZSBnZW5lcmljIDUzODAgZHJpdmVyLgogICovCi0jZGVmaW5lIEFVVE9TRU5TRQorCisjZGVmaW5lIERPTlRfVVNFX0lOVFIKIAogI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKQkJaW5iKHBvcnQgKyByZWcpCiAjZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkJb3V0Yih2YWx1ZSwgcG9ydCArIHJlZykKIAotI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcwl1bnNpZ25lZCBpbnQgcG9ydAotI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKQkJTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMKKyNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMJLyogbm9uZSAqLworI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKQkJdW5zaWduZWQgaW50IHBvcnQKICNkZWZpbmUgTkNSNTM4MF9zZXR1cChpbnN0YW5jZSkJCXBvcnQgPSBpbnN0YW5jZS0+aW9fcG9ydAogCiAvKgogICogSW5jbHVkZXMgbmVlZGVkIGZvciBOQ1I1MzgwLltjaF0gKFhYWDogTW92ZSB0aGVtIHRvIE5DUjUzODAuaCkKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogI2luY2x1ZGUgIk5DUjUzODAuYyIKQEAgLTU4LDYgKzU4LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRteDMxOTFkX2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkucHJvY19uYW1lCQk9IERNWDMxOTFEX0RSSVZFUl9OQU1FLAogCS5uYW1lCQkJPSAiRG9tZXggRE1YMzE5MUQiLAorCS5pbmZvCQkJPSBOQ1I1MzgwX2luZm8sCiAJLnF1ZXVlY29tbWFuZAkJPSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQsCiAJLmVoX2Fib3J0X2hhbmRsZXIJPSBOQ1I1MzgwX2Fib3J0LAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IE5DUjUzODBfYnVzX3Jlc2V0LApAQCAtOTAsMzEgKzkxLDIzIEBACiAJaWYgKCFzaG9zdCkKIAkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247ICAgICAgIAogCXNob3N0LT5pb19wb3J0ID0gaW87Ci0Jc2hvc3QtPmlycSA9IHBkZXYtPmlycTsKKworCS8qIFRoaXMgY2FyZCBkb2VzIG5vdCBzZWVtIHRvIHJhaXNlIGFuIGludGVycnVwdCBvbiBwZGV2LT5pcnEuCisJICogU3RlYW0tcG93ZXJlZCBTQ1NJIGNvbnRyb2xsZXJzIHJ1biB3aXRob3V0IGFuIElSUSBhbnl3YXkuCisJICovCisJc2hvc3QtPmlycSA9IE5PX0lSUTsKIAogCU5DUjUzODBfaW5pdChzaG9zdCwgRkxBR19OT19QU0VVRE9fRE1BIHwgRkxBR19EVEMzMTgxRSk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBOQ1I1MzgwX2ludHIsIElSUUZfU0hBUkVELAotCQkJCURNWDMxOTFEX0RSSVZFUl9OQU1FLCBzaG9zdCkpIHsKLQkJLyoKLQkJICogU3RlYW0gcG93ZXJlZCBzY3NpIGNvbnRyb2xsZXJzIHJ1biB3aXRob3V0IGFuIElSUSBhbnl3YXkKLQkJICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImRteDMxOTE6IElSUSAlZCBub3QgYXZhaWxhYmxlIC0gIgotCQkJCSAgICAic3dpdGNoaW5nIHRvIHBvbGxlZCBtb2RlLlxuIiwgcGRldi0+aXJxKTsKLQkJc2hvc3QtPmlycSA9IFNDU0lfSVJRX05PTkU7Ci0JfQotCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHNob3N0KTsKIAogCWVycm9yID0gc2NzaV9hZGRfaG9zdChzaG9zdCwgJnBkZXYtPmRldik7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9mcmVlX2lycTsKKwkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247CiAKIAlzY3NpX3NjYW5faG9zdChzaG9zdCk7CiAJcmV0dXJuIDA7CiAKLSBvdXRfZnJlZV9pcnE6Ci0JZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogIG91dF9yZWxlYXNlX3JlZ2lvbjoKIAlyZWxlYXNlX3JlZ2lvbihpbywgRE1YMzE5MURfUkVHSU9OX0xFTik7CiAgb3V0X2Rpc2FibGVfZGV2aWNlOgpAQCAtMTMxLDggKzEyNCw2IEBACiAKIAlOQ1I1MzgwX2V4aXQoc2hvc3QpOwogCi0JaWYgKHNob3N0LT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKLQkJZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogCXJlbGVhc2VfcmVnaW9uKHNob3N0LT5pb19wb3J0LCBETVgzMTkxRF9SRUdJT05fTEVOKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IDA3MmYwZWMuLjBiZjk3NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtNDE1LDEwICs0MTUsOCBAQAogCXBIYmEgPSAoYWRwdF9oYmEgKikgaG9zdC0+aG9zdGRhdGFbMF07CiAKIAlpZiAoaG9zdC0+Y2FuX3F1ZXVlICYmIGRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXZpY2UsIE1TR19TSU1QTEVfVEFHLAorCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXZpY2UsCiAJCQkJaG9zdC0+Y2FuX3F1ZXVlIC0gMSk7Ci0JfSBlbHNlIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2aWNlLCAwLCAxKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHRjLmMgYi9kcml2ZXJzL3Njc2kvZHRjLmMKaW5kZXggMGE2NjdmZS4uNGM3NGM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2R0Yy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kdGMuYwpAQCAtMSw1ICsxLDQgQEAKIAotI2RlZmluZSBBVVRPU0VOU0UKICNkZWZpbmUgUFNFVURPX0RNQQogI2RlZmluZSBET05UX1VTRV9JTlRSCiAjZGVmaW5lIFVOU0FGRQkJCS8qIExlYXZlIGludGVycnVwdHMgZW5hYmxlZCBkdXJpbmcgcHNldWRvLWRtYSBJL08gKi8KQEAgLTE4LDI5ICsxNyw5IEBACiAgKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSAxLgotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSovCisgKi8KIAogLyoKLSAqIE9wdGlvbnMgOiAKLSAqIEFVVE9TRU5TRSAtIGlmIGRlZmluZWQsIFJFUVVFU1QgU0VOU0Ugd2lsbCBiZSBwZXJmb3JtZWQgYXV0b21hdGljYWxseQotICogICAgICBmb3IgY29tbWFuZHMgdGhhdCByZXR1cm4gd2l0aCBhIENIRUNLIENPTkRJVElPTiBzdGF0dXMuIAotICoKLSAqIFBTRVVET19ETUEgLSBlbmFibGVzIFBTRVVETy1ETUEgaGFyZHdhcmUsIHNob3VsZCBnaXZlIGEgMy00WCBwZXJmb3JtYW5jZQotICogaW5jcmVhc2UgY29tcGFyZWQgdG8gcG9sbGVkIEkvTy4KLSAqCi0gKiBQQVJJVFkgLSBlbmFibGUgcGFyaXR5IGNoZWNraW5nLiAgTm90IHN1cHBvcnRlZC4KLSAqCi0gKiBVTlNBRkUgLSBsZWF2ZSBpbnRlcnJ1cHRzIGVuYWJsZWQgZHVyaW5nIHBzZXVkby1ETUEgdHJhbnNmZXJzLiAKLSAqCQlZb3UgcHJvYmFibHkgd2FudCB0aGlzLgotICoKICAqIFRoZSBjYXJkIGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCBpbiBvbmUgb2Ygc2V2ZXJhbCB3YXlzIDogCiAgKiAxLiAgQXV0b3Byb2JlIChkZWZhdWx0KSAtIHNpbmNlIHRoZSBib2FyZCBpcyBtZW1vcnkgbWFwcGVkLCAKICAqICAgICBhIEJJT1Mgc2lnbmF0dXJlIGlzIHNjYW5uZWQgZm9yIHRvIGxvY2F0ZSB0aGUgcmVnaXN0ZXJzLgpAQCAtNzksMTUgKzU4LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAiZHRjLmgiCiAjZGVmaW5lIEFVVE9QUk9CRV9JUlEKICNpbmNsdWRlICJOQ1I1MzgwLmgiCiAKLQotI2RlZmluZSBEVENfUFVCTElDX1JFTEVBU0UgMgotCiAvKgogICogVGhlIERUQzMxODAgJiAzMjgwIGJvYXJkcyBhcmUgbWVtb3J5IG1hcHBlZC4KICAqIApAQCAtMTczLDEwICsxNDgsMTMgQEAKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IGR0Y19zZXR1cChjaGFyICpzdHIsIGludCAqaW50cykKK3N0YXRpYyBpbnQgX19pbml0IGR0Y19zZXR1cChjaGFyICpzdHIpCiB7CiAJc3RhdGljIGludCBjb21tYW5kbGluZV9jdXJyZW50ID0gMDsKIAlpbnQgaTsKKwlpbnQgaW50c1sxMF07CisKKwlnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOwogCWlmIChpbnRzWzBdICE9IDIpCiAJCXByaW50aygiZHRjX3NldHVwOiB1c2FnZSBkdGM9YWRkcmVzcyxpcnFcbiIpOwogCWVsc2UgaWYgKGNvbW1hbmRsaW5lX2N1cnJlbnQgPCBOT19PVkVSUklERVMpIHsKQEAgLTE4OSw3ICsxNjcsMTAgQEAKIAkJCX0KIAkJKytjb21tYW5kbGluZV9jdXJyZW50OwogCX0KKwlyZXR1cm4gMTsKIH0KKworX19zZXR1cCgiZHRjPSIsIGR0Y19zZXR1cCk7CiAjZW5kaWYKIAogLyogCkBAIC0yMTMsMTAgKzE5NCw2IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCBzaWcsIGNvdW50OwogCi0JdHBudC0+cHJvY19uYW1lID0gImR0YzN4ODAiOwotCXRwbnQtPnNob3dfaW5mbyA9IGR0Y19zaG93X2luZm87Ci0JdHBudC0+d3JpdGVfaW5mbyA9IGR0Y193cml0ZV9pbmZvOwotCiAJZm9yIChjb3VudCA9IDA7IGN1cnJlbnRfb3ZlcnJpZGUgPCBOT19PVkVSUklERVM7ICsrY3VycmVudF9vdmVycmlkZSkgewogCQlhZGRyID0gMDsKIAkJYmFzZSA9IE5VTEw7CkBAIC0yNzEsMzggKzI0OCwzMyBAQAogCQllbHNlCiAJCQlpbnN0YW5jZS0+aXJxID0gTkNSNTM4MF9wcm9iZV9pcnEoaW5zdGFuY2UsIERUQ19JUlFTKTsKIAorCQkvKiBDb21wYXRpYmlsaXR5IHdpdGggZG9jdW1lbnRlZCBOQ1I1MzgwIGtlcm5lbCBwYXJhbWV0ZXJzICovCisJCWlmIChpbnN0YW5jZS0+aXJxID09IDI1NSkKKwkJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CisKICNpZm5kZWYgRE9OVF9VU0VfSU5UUgogCQkvKiBXaXRoIGludGVycnVwdHMgZW5hYmxlZCwgaXQgd2lsbCBzb21ldGltZXMgaGFuZyB3aGVuIGRvaW5nIGhlYXZ5CiAJCSAqIHJlYWRzLiBTbyBiZXR0ZXIgbm90IGVuYWJsZSB0aGVtIHVudGlsIEkgZmluZ2VyIGl0IG91dC4gKi8KLQkJaWYgKGluc3RhbmNlLT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKKwkJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCQkJaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIGR0Y19pbnRyLCAwLAogCQkJCQkiZHRjIiwgaW5zdGFuY2UpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQgOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwotCQkJCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOworCQkJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CiAJCQl9CiAKLQkJaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkgeworCQlpZiAoaW5zdGFuY2UtPmlycSA9PSBOT19JUlEpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZCA6IGludGVycnVwdHMgbm90IGVuYWJsZWQuIGZvciBiZXR0ZXIgaW50ZXJhY3RpdmUgcGVyZm9ybWFuY2UsXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQgOiBwbGVhc2UganVtcGVyIHRoZSBib2FyZCBmb3IgYSBmcmVlIElSUS5cbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKIAkJfQogI2Vsc2UKLQkJaWYgKGluc3RhbmNlLT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKKwkJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogaW50ZXJydXB0cyBub3QgdXNlZC4gTWlnaHQgYXMgd2VsbCBub3QganVtcGVyIGl0LlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCQlpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKKwkJaW5zdGFuY2UtPmlycSA9IE5PX0lSUTsKICNlbmRpZgogI2lmIGRlZmluZWQoRFRDREVCVUcpICYmIChEVENERUJVRyAmIERUQ0RFQlVHX0lOSVQpCiAJCXByaW50aygic2NzaSVkIDogaXJxID0gJWRcbiIsIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKICNlbmRpZgogCi0JCXByaW50ayhLRVJOX0lORk8gInNjc2klZCA6IGF0IDB4JTA1WCIsIGluc3RhbmNlLT5ob3N0X25vLCAoaW50KSBpbnN0YW5jZS0+YmFzZSk7Ci0JCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCi0JCQlwcmludGsoIiBpbnRlcnJ1cHRzIGRpc2FibGVkIik7Ci0JCWVsc2UKLQkJCXByaW50aygiIGlycSAlZCIsIGluc3RhbmNlLT5pcnEpOwotCQlwcmludGsoIiBvcHRpb25zIENBTl9RVUVVRT0lZCAgQ01EX1BFUl9MVU49JWQgcmVsZWFzZT0lZCIsIENBTl9RVUVVRSwgQ01EX1BFUl9MVU4sIERUQ19QVUJMSUNfUkVMRUFTRSk7Ci0JCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JCXByaW50aygiXG4iKTsKLQogCQkrK2N1cnJlbnRfb3ZlcnJpZGU7CiAJCSsrY291bnQ7CiAJfQpAQCAtMzU0LDIwICszMjYsMTggQEAKICAqIAl0aW1lb3V0LgogKi8KIAotc3RhdGljIGludCBkdGNfbWF4aSA9IDA7Ci1zdGF0aWMgaW50IGR0Y193bWF4aSA9IDA7Ci0KIHN0YXRpYyBpbmxpbmUgaW50IE5DUjUzODBfcHJlYWQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBjaGFyICpkID0gZHN0OwogCWludCBpOwkJCS8qIEZvciBjb3VudGluZyB0aW1lIHNwZW50IGluIHRoZSBwb2xsLWxvb3AgKi8KKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKIAlOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKIAlOQ1I1MzgwX3NldHVwKGluc3RhbmNlKTsKIAogCWkgPSAwOwogCU5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7CiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfRU5BQkxFX0VPUF9JTlRSIHwgTVJfRE1BX01PREUpOwotCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCisJaWYgKGluc3RhbmNlLT5pcnEgPT0gTk9fSVJRKQogCQlOQ1I1MzgwX3dyaXRlKERUQ19DT05UUk9MX1JFRywgQ1NSX0RJUl9SRUFEKTsKIAllbHNlCiAJCU5DUjUzODBfd3JpdGUoRFRDX0NPTlRST0xfUkVHLCBDU1JfRElSX1JFQUQgfCBDU1JfSU5UX0JBU0UpOwpAQCAtMzkxLDggKzM2MSw4IEBACiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgMCk7CS8qIENsZWFyIHRoZSBvcGVyYXRpbmcgbW9kZSAqLwogCXJ0cmMoMCk7CiAJTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLQlpZiAoaSA+IGR0Y19tYXhpKQotCQlkdGNfbWF4aSA9IGk7CisJaWYgKGkgPiBob3N0ZGF0YS0+c3Bpbl9tYXhfcikKKwkJaG9zdGRhdGEtPnNwaW5fbWF4X3IgPSBpOwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTQxMiwxMyArMzgyLDE0IEBACiBzdGF0aWMgaW5saW5lIGludCBOQ1I1MzgwX3B3cml0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuKQogewogCWludCBpOworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOwogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwogCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCiAJTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKIAlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9FTkFCTEVfRU9QX0lOVFIgfCBNUl9ETUFfTU9ERSk7CiAJLyogc2V0IGRpcmVjdGlvbiAod3JpdGUpICovCi0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkKKwlpZiAoaW5zdGFuY2UtPmlycSA9PSBOT19JUlEpCiAJCU5DUjUzODBfd3JpdGUoRFRDX0NPTlRST0xfUkVHLCAwKTsKIAllbHNlCiAJCU5DUjUzODBfd3JpdGUoRFRDX0NPTlRST0xfUkVHLCBDU1JfNTM4MF9JTlRSKTsKQEAgLTQ0NCw4ICs0MTUsOCBAQAogCS8qIENoZWNrIGZvciBwYXJpdHkgZXJyb3IgaGVyZS4gZml4bWUuICovCiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgMCk7CS8qIENsZWFyIHRoZSBvcGVyYXRpbmcgbW9kZSAqLwogCXJ0cmMoMCk7Ci0JaWYgKGkgPiBkdGNfd21heGkpCi0JCWR0Y193bWF4aSA9IGk7CisJaWYgKGkgPiBob3N0ZGF0YS0+c3Bpbl9tYXhfdykKKwkJaG9zdGRhdGEtPnNwaW5fbWF4X3cgPSBpOwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTQ1Nyw3ICs0MjgsNyBAQAogewogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwogCU5DUjUzODBfc2V0dXAoc2hvc3QpOwotCWlmIChzaG9zdC0+aXJxKQorCWlmIChzaG9zdC0+aXJxICE9IE5PX0lSUSkKIAkJZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogCU5DUjUzODBfZXhpdChzaG9zdCk7CiAJaWYgKHNob3N0LT5pb19wb3J0ICYmIHNob3N0LT5uX2lvX3BvcnQpCkBAIC00NzEsNiArNDQyLDEwIEBACiAJLm5hbWUJCQkJPSAiRFRDIDMxODAvMzI4MCAiLAogCS5kZXRlY3QJCQkJPSBkdGNfZGV0ZWN0LAogCS5yZWxlYXNlCQkJPSBkdGNfcmVsZWFzZSwKKwkucHJvY19uYW1lCQkJPSAiZHRjM3g4MCIsCisJLnNob3dfaW5mbwkJCT0gZHRjX3Nob3dfaW5mbywKKwkud3JpdGVfaW5mbwkJCT0gZHRjX3dyaXRlX2luZm8sCisJLmluZm8JCQkJPSBkdGNfaW5mbywKIAkucXVldWVjb21tYW5kCQkJPSBkdGNfcXVldWVfY29tbWFuZCwKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBkdGNfYWJvcnQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyCQk9IGR0Y19idXNfcmVzZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHRjLmggYi9kcml2ZXJzL3Njc2kvZHRjLmgKaW5kZXggOTJkN2NmYy4uNzhhMjMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2R0Yy5oCisrKyBiL2RyaXZlcnMvc2NzaS9kdGMuaApAQCAtNSwyNCArNSw2IEBACiAgKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSAyLiAKLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQgCi0gKgotICogCi0gKiAKLSAqIGFuZCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCiAjaWZuZGVmIERUQzMyODBfSApAQCAtMzIsMTMgKzE0LDYgQEAKICNkZWZpbmUgRFRDREVCVUdfSU5JVAkweDEKICNkZWZpbmUgRFRDREVCVUdfVFJBTlNGRVIgMHgyCiAKLXN0YXRpYyBpbnQgZHRjX2Fib3J0KFNjc2lfQ21uZCAqKTsKLXN0YXRpYyBpbnQgZHRjX2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgc3RydWN0IGJsb2NrX2RldmljZSAqLAotCQkgICAgICAgICBzZWN0b3JfdCwgaW50Kik7Ci1zdGF0aWMgaW50IGR0Y19kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKLXN0YXRpYyBpbnQgZHRjX3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCBkdGNfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqKTsKLQogI2lmbmRlZiBDTURfUEVSX0xVTgogI2RlZmluZSBDTURfUEVSX0xVTiAyCiAjZW5kaWYKQEAgLTg4LDYgKzYzLDcgQEAKICNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kCQlkdGNfcXVldWVfY29tbWFuZAogI2RlZmluZSBOQ1I1MzgwX2Fib3J0CQkJZHRjX2Fib3J0CiAjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0CQlkdGNfYnVzX3Jlc2V0CisjZGVmaW5lIE5DUjUzODBfaW5mbwkJCWR0Y19pbmZvCiAjZGVmaW5lIE5DUjUzODBfc2hvd19pbmZvCQlkdGNfc2hvd19pbmZvIAogI2RlZmluZSBOQ1I1MzgwX3dyaXRlX2luZm8JCWR0Y193cml0ZV9pbmZvIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZWF0YS5jIGIvZHJpdmVycy9zY3NpL2VhdGEuYwppbmRleCA5NDNhZDNhLi4yMjdkZDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZWF0YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lYXRhLmMKQEAgLTk0NiwyMCArOTQ2LDE4IEBACiAKIAlpZiAoVExERVYoZGV2LT50eXBlKSAmJiBkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKIAkJaWYgKHRhZ19tb2RlID09IFRBR19TSU1QTEUpIHsKLQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgTVNHX1NJTVBMRV9UQUcsIHRxZCk7CiAJCQl0YWdfc3VmZml4ID0gIiwgc2ltcGxlIHRhZ3MiOwogCQl9IGVsc2UgaWYgKHRhZ19tb2RlID09IFRBR19PUkRFUkVEKSB7Ci0JCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXYsIE1TR19PUkRFUkVEX1RBRywgdHFkKTsKIAkJCXRhZ19zdWZmaXggPSAiLCBvcmRlcmVkIHRhZ3MiOwogCQl9IGVsc2UgewotCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB0cWQpOwogCQkJdGFnX3N1ZmZpeCA9ICIsIG5vIHRhZ3MiOwogCQl9CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldiwgdHFkKTsKIAl9IGVsc2UgaWYgKFRMREVWKGRldi0+dHlwZSkgJiYgbGlua2VkX2NvbW0pIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB0cWQpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIHRxZCk7CiAJCXRhZ19zdWZmaXggPSAiLCB1bnRhZ2dlZCI7CiAJfSBlbHNlIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB1dHFkKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCB1dHFkKTsKIAkJdGFnX3N1ZmZpeCA9ICIiOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnIuaCBiL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyLmgKaW5kZXggM2ZkMzA1ZC4uYjYwMzBlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnIuaAorKysgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMyci5oCkBAIC05NzIsMTEgKzk3Miw2IEBACiAJCSAgICBzdHJ1Y3QgYXR0b19pb2N0bCAqaW9jdGxfaGJhKTsKIGludCBlc2FzMnJfcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiBpbnQgZXNhczJyX3Nob3dfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBTY3NpX0hvc3QgKnNoKTsKLWludCBlc2FzMnJfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpkZXYpOwotaW50IGVzYXMycl9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYpOwotdm9pZCBlc2FzMnJfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldik7Ci1pbnQgZXNhczJyX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGRlcHRoLCBpbnQgcmVhc29uKTsKLWludCBlc2FzMnJfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCB0eXBlKTsKIGxvbmcgZXNhczJyX3Byb2NfaW9jdGwoc3RydWN0IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKIC8qIFNDU0kgZXJyb3IgaGFuZGxlciAoZWgpIGZ1bmN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfaW9jdGwuYyBiL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyX2lvY3RsLmMKaW5kZXggZDg5YTAyNy4uYmFmOTEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfaW9jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9pb2N0bC5jCkBAIC0xMTcsOSArMTE3LDggQEAKIAogCXJxID0gZXNhczJyX2FsbG9jX3JlcXVlc3QoYSk7CiAJaWYgKHJxID09IE5VTEwpIHsKLQkJdXAoJmEtPmZtX2FwaV9zZW1hcGhvcmUpOwogCQlmaS0+c3RhdHVzID0gRklfU1RBVF9CVVNZOwotCQlyZXR1cm47CisJCWdvdG8gZnJlZV9zZW07CiAJfQogCiAJaWYgKGZpID09ICZhLT5maXJtd2FyZS5oZWFkZXIpIHsKQEAgLTEzNSw3ICsxMzQsNyBAQAogCQlpZiAoYS0+ZmlybXdhcmUuaGVhZGVyX2J1ZmYgPT0gTlVMTCkgewogCQkJZXNhczJyX2RlYnVnKCJmYWlsZWQgdG8gYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlciEiKTsKIAkJCWZpLT5zdGF0dXMgPSBGSV9TVEFUX0JVU1k7Ci0JCQlyZXR1cm47CisJCQlnb3RvIGZyZWVfcmVxOwogCQl9CiAKIAkJbWVtY3B5KGEtPmZpcm13YXJlLmhlYWRlcl9idWZmLCBmaSwKQEAgLTE3MSw5ICsxNzAsMTAgQEAKIAkJCQkgIGEtPmZpcm13YXJlLmhlYWRlcl9idWZmLAogCQkJCSAgKGRtYV9hZGRyX3QpYS0+ZmlybXdhcmUuaGVhZGVyX2J1ZmZfcGh5cyk7CiAJfQotCi0JdXAoJmEtPmZtX2FwaV9zZW1hcGhvcmUpOworZnJlZV9yZXE6CiAJZXNhczJyX2ZyZWVfcmVxdWVzdChhLCAoc3RydWN0IGVzYXMycl9yZXF1ZXN0ICopcnEpOworZnJlZV9zZW06CisJdXAoJmEtPmZtX2FwaV9zZW1hcGhvcmUpOwogCXJldHVybjsKIAogfQpAQCAtMTQyMCw5ICsxNDIwLDEwIEBACiAKIAkJcnEgPSBlc2FzMnJfYWxsb2NfcmVxdWVzdChhKTsKIAkJaWYgKHJxID09IE5VTEwpIHsKLQkJCXVwKCZhLT5udnJhbV9zZW1hcGhvcmUpOwotCQkJaW9jdGwtPmRhdGEucHJ3LmNvZGUgPSAwOwotCQkJYnJlYWs7CisJCQlrZnJlZShpb2N0bCk7CisJCQllc2FzMnJfbG9nKEVTQVMyUl9MT0dfV0FSTiwKKwkJCSAgICJjb3VsZCBub3QgYWxsb2NhdGUgYW4gaW50ZXJuYWwgcmVxdWVzdCIpOworCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAogCQljb2RlID0gZXNhczJyX3dyaXRlX3BhcmFtcyhhLCBycSwKQEAgLTE1MjMsOSArMTUyNCwxMiBAQAogCQljYXNlIC1FSU5WQUw6CiAJCQlpb2N0bC0+aGVhZGVyLnJldHVybl9jb2RlID0gSU9DVExfSU5WQUxJRF9QQVJBTTsKIAkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpb2N0bC0+aGVhZGVyLnJldHVybl9jb2RlID0gSU9DVExfR0VORVJBTF9FUlJPUjsKKwkJCWJyZWFrOwogCQl9CiAKLQkJaW9jdGwtPmhlYWRlci5yZXR1cm5fY29kZSA9IElPQ1RMX0dFTkVSQUxfRVJST1I7CiAJfQogCiAJLyogQWx3YXlzIGNvcHkgdGhlIGJ1ZmZlciBiYWNrLCBpZiBvbmx5IHRvIHBpY2sgdXAgdGhlIHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfbWFpbi5jIGIvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfbWFpbi5jCmluZGV4IDY1MDRhMTkuLjU5M2ZmOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9tYWluLmMKQEAgLTI1NCwxMiArMjU0LDEwIEBACiAJLnVzZV9jbHVzdGVyaW5nCQkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuZW11bGF0ZWQJCQk9IDAsCiAJLnByb2NfbmFtZQkJCT0gRVNBUzJSX0RSVlJfTkFNRSwKLQkuc2xhdmVfY29uZmlndXJlCQk9IGVzYXMycl9zbGF2ZV9jb25maWd1cmUsCi0JLnNsYXZlX2FsbG9jCQkJPSBlc2FzMnJfc2xhdmVfYWxsb2MsCi0JLnNsYXZlX2Rlc3Ryb3kJCQk9IGVzYXMycl9zbGF2ZV9kZXN0cm95LAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJCT0gZXNhczJyX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gZXNhczJyX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCQk9IHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUsCiAJLm1heF9zZWN0b3JzCQkJPSAweEZGRkYsCisJLnVzZV9ibGtfdGFncwkJCT0gMSwKIH07CiAKIGludCBzZ2xfcGFnZV9zaXplID0gNTEyOwpAQCAtMTA1Nyw3ICsxMDU1LDcgQEAKIAogCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCi0JCXJldHVybiAwOworCQlyZXR1cm4gU1VDQ0VTUzsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYS0+cXVldWVfbG9jaywgZmxhZ3MpOwpAQCAtMTI1OSw2MCArMTI1Nyw2IEBACiAJcmV0dXJuIGVzYXMycl9kZXZfdGFyZ19yZXNldChjbWQsIHRydWUpOwogfQogCi1pbnQgZXNhczJyX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGRlcHRoLCBpbnQgcmVhc29uKQotewotCWVzYXMycl9sb2coRVNBUzJSX0xPR19JTkZPLCAiY2hhbmdlX3F1ZXVlX2RlcHRoICVwLCAlZCIsIGRldiwgZGVwdGgpOwotCi0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCBzY3NpX2dldF90YWdfdHlwZShkZXYpLCBkZXB0aCk7Ci0KLQlyZXR1cm4gZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLQotaW50IGVzYXMycl9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IHR5cGUpCi17Ci0JZXNhczJyX2xvZyhFU0FTMlJfTE9HX0lORk8sICJjaGFuZ2VfcXVldWVfdHlwZSAlcCwgJWQiLCBkZXYsIHR5cGUpOwotCi0JaWYgKGRldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShkZXYsIHR5cGUpOwotCi0JCWlmICh0eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3EoZGV2LCBkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShkZXYsIGRldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZSB7Ci0JCXR5cGUgPSAwOwotCX0KLQotCXJldHVybiB0eXBlOwotfQotCi1pbnQgZXNhczJyX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2KQotewotCXJldHVybiAwOwotfQotCi1pbnQgZXNhczJyX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldikKLXsKLQllc2FzMnJfbG9nX2RldihFU0FTMlJfTE9HX0lORk8sICYoZGV2LT5zZGV2X2dlbmRldiksCi0JCSAgICAgICAiZXNhczJyX3NsYXZlX2NvbmZpZ3VyZSgpIik7Ci0KLQlpZiAoZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKGRldiwgTVNHX1NJTVBMRV9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShkZXYsIGNtZF9wZXJfbHVuKTsKLQl9IGVsc2UgewotCQlzY3NpX3NldF90YWdfdHlwZShkZXYsIDApOwotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKGRldiwgY21kX3Blcl9sdW4pOwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIGVzYXMycl9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2KQotewotCWVzYXMycl9sb2dfZGV2KEVTQVMyUl9MT0dfSU5GTywgJihkZXYtPnNkZXZfZ2VuZGV2KSwKLQkJICAgICAgICJlc2FzMnJfc2xhdmVfZGVzdHJveSgpIik7Ci19Ci0KIHZvaWQgZXNhczJyX2xvZ19yZXF1ZXN0X2ZhaWx1cmUoc3RydWN0IGVzYXMycl9hZGFwdGVyICphLAogCQkJCXN0cnVjdCBlc2FzMnJfcmVxdWVzdCAqcnEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCmluZGV4IDU1NTQ4ZGMuLmNlNWJkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCkBAIC00OSw1NSArNDksNjcgQEAKICNkZWZpbmUgRVNQX0RFQlVHX0RBVEFET05FCTB4MDAwMDAxMDAKICNkZWZpbmUgRVNQX0RFQlVHX1JFQ09OTkVDVAkweDAwMDAwMjAwCiAjZGVmaW5lIEVTUF9ERUJVR19BVVRPU0VOU0UJMHgwMDAwMDQwMAorI2RlZmluZSBFU1BfREVCVUdfRVZFTlQJCTB4MDAwMDA4MDAKKyNkZWZpbmUgRVNQX0RFQlVHX0NPTU1BTkQJMHgwMDAwMTAwMAogCiAjZGVmaW5lIGVzcF9sb2dfaW50cihmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfSU5UUikgXAotCQlwcmludGsoZiwgIyMgYSk7IFwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX2xvZ19yZXNldChmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfUkVTRVQpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfbXNnaW4oZiwgYS4uLikgXAogZG8gewlpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX01TR0lOKSBcCi0JCXByaW50ayhmLCAjIyBhKTsgXAorCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgZXNwLT5ob3N0LCBmLCAjIyBhKTsJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBlc3BfbG9nX21zZ291dChmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfTVNHT1VUKSBcCi0JCXByaW50ayhmLCAjIyBhKTsgXAorCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgZXNwLT5ob3N0LCBmLCAjIyBhKTsJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBlc3BfbG9nX2NtZGRvbmUoZiwgYS4uLikgXAogZG8gewlpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX0NNRERPTkUpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfZGlzY29ubmVjdChmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfRElTQ09OTkVDVCkgXAotCQlwcmludGsoZiwgIyMgYSk7IFwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX2xvZ19kYXRhc3RhcnQoZiwgYS4uLikgXAogZG8gewlpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX0RBVEFTVEFSVCkgXAotCQlwcmludGsoZiwgIyMgYSk7IFwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX2xvZ19kYXRhZG9uZShmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfREFUQURPTkUpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfcmVjb25uZWN0KGYsIGEuLi4pIFwKIGRvIHsJaWYgKGVzcF9kZWJ1ZyAmIEVTUF9ERUJVR19SRUNPTk5FQ1QpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfYXV0b3NlbnNlKGYsIGEuLi4pIFwKIGRvIHsJaWYgKGVzcF9kZWJ1ZyAmIEVTUF9ERUJVR19BVVRPU0VOU0UpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGVzcF9sb2dfZXZlbnQoZiwgYS4uLikgXAorZG8geyAgIGlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfRVZFTlQpCVwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgZXNwX2xvZ19jb21tYW5kKGYsIGEuLi4pIFwKK2RvIHsgICBpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX0NPTU1BTkQpCVwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX3JlYWQ4KFJFRykJCWVzcC0+b3BzLT5lc3BfcmVhZDgoZXNwLCBSRUcpCkBAIC0xMjYsMTAgKzEzOCwyOSBAQAogCiAJZXNwLT5lc3BfZXZlbnRfY3VyID0gKGlkeCArIDEpICYgKEVTUF9FVkVOVF9MT0dfU1ogLSAxKTsKIAorCWVzcF9sb2dfY29tbWFuZCgiY21kWyUwMnhdXG4iLCB2YWwpOwogCWVzcF93cml0ZTgodmFsLCBFU1BfQ01EKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9lc3BfY21kKTsKIAorc3RhdGljIHZvaWQgZXNwX3NlbmRfZG1hX2NtZChzdHJ1Y3QgZXNwICplc3AsIGludCBsZW4sIGludCBtYXhfbGVuLCBpbnQgY21kKQoreworCWlmIChlc3AtPmZsYWdzICYgRVNQX0ZMQUdfVVNFX0ZJRk8pIHsKKwkJaW50IGk7CisKKwkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9GTFVTSCk7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCWVzcF93cml0ZTgoZXNwLT5jb21tYW5kX2Jsb2NrW2ldLCBFU1BfRkRBVEEpOworCQlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOworCX0gZWxzZSB7CisJCWlmIChlc3AtPnJldiA9PSBGQVNITUUpCisJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKKwkJY21kIHw9IEVTUF9DTURfRE1BOworCQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSwKKwkJCQkgICAgICAgbGVuLCBtYXhfbGVuLCAwLCBjbWQpOworCX0KK30KKwogc3RhdGljIHZvaWQgZXNwX2V2ZW50KHN0cnVjdCBlc3AgKmVzcCwgdTggdmFsKQogewogCXN0cnVjdCBlc3BfZXZlbnRfZW50ICpwOwpAQCAtMTUwLDE5ICsxODEsMTcgQEAKIAlpbnQgaWR4ID0gZXNwLT5lc3BfZXZlbnRfY3VyOwogCWludCBzdG9wID0gaWR4OwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggImVzcCVkOiBEdW1waW5nIGNvbW1hbmQgbG9nXG4iLAotCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LCAiRHVtcGluZyBjb21tYW5kIGxvZ1xuIik7CiAJZG8gewogCQlzdHJ1Y3QgZXNwX2V2ZW50X2VudCAqcCA9ICZlc3AtPmVzcF9ldmVudF9sb2dbaWR4XTsKIAotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZXNwJWQ6IGVudFslZF0gJXMgIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBpZHgsCi0JCSAgICAgICBwLT50eXBlID09IEVTUF9FVkVOVF9UWVBFX0NNRCA/ICJDTUQiIDogIkVWRU5UIik7Ci0KLQkJcHJpbnRrKCJ2YWxbJTAyeF0gc3JlZ1slMDJ4XSBzZXFyZWdbJTAyeF0gIgotCQkgICAgICAgInNyZWcyWyUwMnhdIGlyZWdbJTAyeF0gc3NbJTAyeF0gZXZlbnRbJTAyeF1cbiIsCi0JCSAgICAgICBwLT52YWwsIHAtPnNyZWcsIHAtPnNlcXJlZywKLQkJICAgICAgIHAtPnNyZWcyLCBwLT5pcmVnLCBwLT5zZWxlY3Rfc3RhdGUsIHAtPmV2ZW50KTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LAorCQkJICAgICAiZW50WyVkXSAlcyB2YWxbJTAyeF0gc3JlZ1slMDJ4XSBzZXFyZWdbJTAyeF0gIgorCQkJICAgICAic3JlZzJbJTAyeF0gaXJlZ1slMDJ4XSBzc1slMDJ4XSBldmVudFslMDJ4XVxuIiwKKwkJCSAgICAgaWR4LAorCQkJICAgICBwLT50eXBlID09IEVTUF9FVkVOVF9UWVBFX0NNRCA/ICJDTUQiIDogIkVWRU5UIiwKKwkJCSAgICAgcC0+dmFsLCBwLT5zcmVnLCBwLT5zZXFyZWcsCisJCQkgICAgIHAtPnNyZWcyLCBwLT5pcmVnLCBwLT5zZWxlY3Rfc3RhdGUsIHAtPmV2ZW50KTsKIAogCQlpZHggPSAoaWR4ICsgMSkgJiAoRVNQX0VWRU5UX0xPR19TWiAtIDEpOwogCX0gd2hpbGUgKGlkeCAhPSBzdG9wKTsKQEAgLTE3Niw5ICsyMDUsOCBAQAogCiAJCXdoaWxlIChlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTKSB7CiAJCQlpZiAoLS1saW0gPT0gMCkgewotCQkJCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiZXNwJWQ6IEVTUF9GRl9CWVRFUyAiCi0JCQkJICAgICAgICJ3aWxsIG5vdCBjbGVhciFcbiIsCi0JCQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkKTsKKwkJCQlzaG9zdF9wcmludGsoS0VSTl9BTEVSVCwgZXNwLT5ob3N0LAorCQkJCQkgICAgICJFU1BfRkZfQllURVMgd2lsbCBub3QgY2xlYXIhXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXVkZWxheSgxKTsKQEAgLTI0MCw2ICsyNjgsMTkgQEAKIAl9IGVsc2UgewogCQllc3AtPm1pbl9wZXJpb2QgPSAoKDUgKiBlc3AtPmNjeWNsZSkgLyAxMDAwKTsKIAl9CisJaWYgKGVzcC0+cmV2ID09IEZBUzIzNikgeworCQkvKgorCQkgKiBUaGUgQU01M2M5NzQgY2hpcCByZXR1cm5zIHRoZSBzYW1lIElEIGFzIEZBUzIzNjsKKwkJICogdHJ5IHRvIGNvbmZpZ3VyZSBnbGl0Y2ggZWF0ZXIuCisJCSAqLworCQl1OCBjb25maWc0ID0gRVNQX0NPTkZJRzRfR0UxOworCQllc3Bfd3JpdGU4KGNvbmZpZzQsIEVTUF9DRkc0KTsKKwkJY29uZmlnNCA9IGVzcF9yZWFkOChFU1BfQ0ZHNCk7CisJCWlmIChjb25maWc0ICYgRVNQX0NPTkZJRzRfR0UxKSB7CisJCQllc3AtPnJldiA9IFBDU0NTSTsKKwkJCWVzcF93cml0ZTgoZXNwLT5jb25maWc0LCBFU1BfQ0ZHNCk7CisJCX0KKwl9CiAJZXNwLT5tYXhfcGVyaW9kID0gKGVzcC0+bWF4X3BlcmlvZCArIDMpPj4yOwogCWVzcC0+bWluX3BlcmlvZCA9IChlc3AtPm1pbl9wZXJpb2QgKyAzKT4+MjsKIApAQCAtMjY1LDcgKzMwNiw4IEBACiAJCS8qIGZhbGx0aHJvdWdoLi4uICovCiAKIAljYXNlIEZBUzIzNjoKLQkJLyogRmFzdCAyMzYgb3IgSE1FICovCisJY2FzZSBQQ1NDU0k6CisJCS8qIEZhc3QgMjM2LCBBTTUzYzk3NCBvciBITUUgKi8KIAkJZXNwX3dyaXRlOChlc3AtPmNvbmZpZzIsIEVTUF9DRkcyKTsKIAkJaWYgKGVzcC0+cmV2ID09IEZBU0hNRSkgewogCQkJdTggY2ZnMyA9IGVzcC0+dGFyZ2V0WzBdLmVzcF9jb25maWczOwpAQCAtMzgzLDEyICs0MjUsMTEgQEAKIAlwLT5jdXJfcmVzaWR1ZSAtPSBsZW47CiAJcC0+dG90X3Jlc2lkdWUgLT0gbGVuOwogCWlmIChwLT5jdXJfcmVzaWR1ZSA8IDAgfHwgcC0+dG90X3Jlc2lkdWUgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBEYXRhIHRyYW5zZmVyIG92ZXJmbG93LlxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkKTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IGN1cl9yZXNpZHVlWyVkXSB0b3RfcmVzaWR1ZVslZF0gIgotCQkgICAgICAgImxlblsldV1cbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwKLQkJICAgICAgIHAtPmN1cl9yZXNpZHVlLCBwLT50b3RfcmVzaWR1ZSwgbGVuKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkgICAgICJEYXRhIHRyYW5zZmVyIG92ZXJmbG93LlxuIik7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiY3VyX3Jlc2lkdWVbJWRdIHRvdF9yZXNpZHVlWyVkXSBsZW5bJXVdXG4iLAorCQkJICAgICBwLT5jdXJfcmVzaWR1ZSwgcC0+dG90X3Jlc2lkdWUsIGxlbik7CiAJCXAtPmN1cl9yZXNpZHVlID0gMDsKIAkJcC0+dG90X3Jlc2lkdWUgPSAwOwogCX0KQEAgLTYwNCw5ICs2NDUsOCBAQAogCiAKIAlpZiAoIWVudC0+c2Vuc2VfcHRyKSB7Ci0JCWVzcF9sb2dfYXV0b3NlbnNlKCJlc3AlZDogRG9pbmcgYXV0by1zZW5zZSBmb3IgIgotCQkJCSAgInRndFslZF0gbHVuWyVkXVxuIiwKLQkJCQkgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCB0Z3QsIGx1bik7CisJCWVzcF9sb2dfYXV0b3NlbnNlKCJEb2luZyBhdXRvLXNlbnNlIGZvciB0Z3RbJWRdIGx1blslZF1cbiIsCisJCQkJICB0Z3QsIGx1bik7CiAKIAkJZW50LT5zZW5zZV9wdHIgPSBjbWQtPnNlbnNlX2J1ZmZlcjsKIAkJZW50LT5zZW5zZV9kbWEgPSBlc3AtPm9wcy0+bWFwX3NpbmdsZShlc3AsCkBAIC02NDIsMTAgKzY4Miw3IEBACiAKIAl2YWwgPSAocCAtIGVzcC0+Y29tbWFuZF9ibG9jayk7CiAKLQlpZiAoZXNwLT5yZXYgPT0gRkFTSE1FKQotCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKLQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSwKLQkJCSAgICAgICB2YWwsIDE2LCAwLCBFU1BfQ01EX0RNQSB8IEVTUF9DTURfU0VMQSk7CisJZXNwX3NlbmRfZG1hX2NtZChlc3AsIHZhbCwgMTYsIEVTUF9DTURfU0VMQSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXNwX2NtZF9lbnRyeSAqZmluZF9hbmRfcHJlcF9pc3N1YWJsZV9jb21tYW5kKHN0cnVjdCBlc3AgKmVzcCkKQEAgLTY2Myw3ICs3MDAsNyBAQAogCQkJcmV0dXJuIGVudDsKIAkJfQogCi0JCWlmICghc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgJmVudC0+dGFnWzBdKSkgeworCQlpZiAoIXNwaV9wb3B1bGF0ZV90YWdfbXNnKCZlbnQtPnRhZ1swXSwgY21kKSkgewogCQkJZW50LT50YWdbMF0gPSAwOwogCQkJZW50LT50YWdbMV0gPSAwOwogCQl9CkBAIC03ODEsMTIgKzgxOCwxMiBAQAogCX0KIAogCWlmICghKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ET0lOR19TTE9XQ01EKSkgewotCQlzdGFydF9jbWQgPSBFU1BfQ01EX0RNQSB8IEVTUF9DTURfU0VMQTsKKwkJc3RhcnRfY21kID0gRVNQX0NNRF9TRUxBOwogCQlpZiAoZW50LT50YWdbMF0pIHsKIAkJCSpwKysgPSBlbnQtPnRhZ1swXTsKIAkJCSpwKysgPSBlbnQtPnRhZ1sxXTsKIAotCQkJc3RhcnRfY21kID0gRVNQX0NNRF9ETUEgfCBFU1BfQ01EX1NBMzsKKwkJCXN0YXJ0X2NtZCA9IEVTUF9DTURfU0EzOwogCQl9CiAKIAkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y21kX2xlbjsgaSsrKQpAQCAtODA2LDcgKzg0Myw3IEBACiAJCQllc3AtPm1zZ19vdXRfbGVuICs9IDI7CiAJCX0KIAotCQlzdGFydF9jbWQgPSBFU1BfQ01EX0RNQSB8IEVTUF9DTURfU0VMQVM7CisJCXN0YXJ0X2NtZCA9IEVTUF9DTURfU0VMQVM7CiAJCWVzcC0+c2VsZWN0X3N0YXRlID0gRVNQX1NFTEVDVF9NU0dPVVQ7CiAJfQogCXZhbCA9IHRndDsKQEAgLTgyNiwxMCArODYzLDcgQEAKIAkJcHJpbnRrKCJdXG4iKTsKIAl9CiAKLQlpZiAoZXNwLT5yZXYgPT0gRkFTSE1FKQotCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKLQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSwKLQkJCSAgICAgICB2YWwsIDE2LCAwLCBzdGFydF9jbWQpOworCWVzcF9zZW5kX2RtYV9jbWQoZXNwLCB2YWwsIDE2LCBzdGFydF9jbWQpOwogfQogCiBzdGF0aWMgc3RydWN0IGVzcF9jbWRfZW50cnkgKmVzcF9nZXRfZW50KHN0cnVjdCBlc3AgKmVzcCkKQEAgLTk1Myw4ICs5ODcsOCBAQAogCQkgKiAtIERNQSBwcm9ncmFtbWVkIHdpdGggd3JvbmcgZGlyZWN0aW9uCiAJCSAqIC0gaW1wcm9wZXIgcGhhc2UgY2hhbmdlCiAJCSAqLwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJlc3AlZDogR3Jvc3MgZXJyb3Igc3JlZ1slMDJ4XVxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlc3AtPnNyZWcpOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwKKwkJCSAgICAgIkdyb3NzIGVycm9yIHNyZWdbJTAyeF1cbiIsIGVzcC0+c3JlZyk7CiAJCS8qIFhYWCBSZXNldCB0aGUgY2hpcC4gWFhYICovCiAJCXJldHVybiAxOwogCX0KQEAgLTk3NCw3ICsxMDA4LDYgQEAKIAogCWRlZmF1bHQ6CiAJCWlmICghKGVzcC0+c3JlZyAmIEVTUF9TVEFUX0lOVFIpKSB7Ci0JCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7CiAJCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfU1IpCiAJCQkJcmV0dXJuIDE7CiAKQEAgLTk4MiwxNCArMTAxNSwxMyBAQAogCQkJICogRVNQIGlzIG5vdCwgdGhlIG9ubHkgcG9zc2liaWxpdHkgaXMgYSBETUEgZXJyb3IuCiAJCQkgKi8KIAkJCWlmICghZXNwLT5vcHMtPmRtYV9lcnJvcihlc3ApKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFNwdXJpb3VzIGlycSwgIgotCQkJCSAgICAgICAic3JlZz0lMDJ4LlxuIiwKLQkJCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+c3JlZyk7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkJCSAgICAgIlNwdXJpb3VzIGlycSwgc3JlZz0lMDJ4LlxuIiwKKwkJCQkJICAgICBlc3AtPnNyZWcpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IERNQSBlcnJvclxuIiwKLQkJCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwgIkRNQSBlcnJvclxuIik7CiAKIAkJCS8qIFhYWCBSZXNldCB0aGUgY2hpcC4gWFhYICovCiAJCQlyZXR1cm4gLTE7CkBAIC0xMDAyLDcgKzEwMzQsNyBAQAogCiBzdGF0aWMgdm9pZCBlc3Bfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGVzcCAqZXNwKQogewotCWVzcF9sb2dfcmVzZXQoIkVTUDogZXNwX3NjaGVkdWxlX3Jlc2V0KCkgZnJvbSAlcGZcbiIsCisJZXNwX2xvZ19yZXNldCgiZXNwX3NjaGVkdWxlX3Jlc2V0KCkgZnJvbSAlcGZcbiIsCiAJCSAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJZXNwLT5mbGFncyB8PSBFU1BfRkxBR19SRVNFVFRJTkc7CiAJZXNwX2V2ZW50KGVzcCwgRVNQX0VWRU5UX1JFU0VUKTsKQEAgLTEwMTksMjAgKzEwNTEsMjAgQEAKIAlpbnQgaTsKIAogCWlmICghbHAtPm51bV90YWdnZWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCB3L251bV90YWdnZWQ9PTBcbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0IHcvbnVtX3RhZ2dlZD09MFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWVzcF9sb2dfcmVjb25uZWN0KCJFU1A6IHJlY29ubmVjdCB0YWcsICIpOworCWVzcF9sb2dfcmVjb25uZWN0KCJyZWNvbm5lY3QgdGFnLCAiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBFU1BfUVVJQ0tJUlFfTElNSVQ7IGkrKykgewogCQlpZiAoZXNwLT5vcHMtPmlycV9wZW5kaW5nKGVzcCkpCiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gRVNQX1FVSUNLSVJRX0xJTUlUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBSZWNvbm5lY3QgSVJRMSB0aW1lb3V0XG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQpOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwKKwkJCSAgICAgIlJlY29ubmVjdCBJUlExIHRpbWVvdXRcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTEwNDMsMTQgKzEwNzUsMTQgQEAKIAkJCSAgaSwgZXNwLT5pcmVnLCBlc3AtPnNyZWcpOwogCiAJaWYgKGVzcC0+aXJlZyAmIEVTUF9JTlRSX0RDKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBSZWNvbm5lY3QsIGdvdCBkaXNjb25uZWN0LlxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkgICAgICJSZWNvbm5lY3QsIGdvdCBkaXNjb25uZWN0LlxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWlmICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9NSVApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCwgbm90IE1JUCBzcmVnWyUwMnhdLlxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlc3AtPnNyZWcpOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwKKwkJCSAgICAgIlJlY29ubmVjdCwgbm90IE1JUCBzcmVnWyUwMnhdLlxuIiwgZXNwLT5zcmVnKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xMDczLDggKzExMDUsNyBAQAogCQl1ZGVsYXkoMSk7CiAJfQogCWlmIChpID09IEVTUF9SRVNFTEVDVF9UQUdfTElNSVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCBJUlEyIHRpbWVvdXRcbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LCAiUmVjb25uZWN0IElSUTIgdGltZW91dFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAllc3AtPm9wcy0+ZG1hX2RyYWluKGVzcCk7CkBAIC0xMDg3LDE3ICsxMTE4LDE3IEBACiAKIAlpZiAoZXNwLT5jb21tYW5kX2Jsb2NrWzBdIDwgU0lNUExFX1FVRVVFX1RBRyB8fAogCSAgICBlc3AtPmNvbW1hbmRfYmxvY2tbMF0gPiBPUkRFUkVEX1FVRVVFX1RBRykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJlc3AlZDogUmVjb25uZWN0LCBiYWQgdGFnICIKLQkJICAgICAgICJ0eXBlICUwMnguXG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+Y29tbWFuZF9ibG9ja1swXSk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0LCBiYWQgdGFnIHR5cGUgJTAyeC5cbiIsCisJCQkgICAgIGVzcC0+Y29tbWFuZF9ibG9ja1swXSk7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWVudCA9IGxwLT50YWdnZWRfY21kc1tlc3AtPmNvbW1hbmRfYmxvY2tbMV1dOwogCWlmICghZW50KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBSZWNvbm5lY3QsIG5vIGVudHJ5IGZvciAiCi0JCSAgICAgICAidGFnICUwMnguXG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+Y29tbWFuZF9ibG9ja1sxXSk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0LCBubyBlbnRyeSBmb3IgdGFnICUwMnguXG4iLAorCQkJICAgICBlc3AtPmNvbW1hbmRfYmxvY2tbMV0pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTExNjMsOSArMTE5NCw5IEBACiAJdHAgPSAmZXNwLT50YXJnZXRbdGFyZ2V0XTsKIAlkZXYgPSBfX3Njc2lfZGV2aWNlX2xvb2t1cF9ieV90YXJnZXQodHAtPnN0YXJnZXQsIGx1bik7CiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCwgbm8gbHAgIgotCQkgICAgICAgInRndFsldV0gbHVuWyV1XVxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCB0YXJnZXQsIGx1bik7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0LCBubyBscCB0Z3RbJXVdIGx1blsldV1cbiIsCisJCQkgICAgIHRhcmdldCwgbHVuKTsKIAkJZ290byBkb19yZXNldDsKIAl9CiAJbHAgPSBkZXYtPmhvc3RkYXRhOwpAQCAtMTI5MSw4ICsxMzIyLDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcHJpbnRrKCJFU1A6IFVuZXhwZWN0ZWQgc2VsZWN0aW9uIGNvbXBsZXRpb24gaXJlZ1sleF0uXG4iLAotCSAgICAgICBlc3AtPmlyZWcpOworCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJICAgICAiVW5leHBlY3RlZCBzZWxlY3Rpb24gY29tcGxldGlvbiBpcmVnWyV4XVxuIiwgZXNwLT5pcmVnKTsKIAllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMTIsMTEgKzEzNDMsNDIgQEAKIAkJCSAgKCgodW5zaWduZWQgaW50KWVzcF9yZWFkOChFU1BfVENNRUQpKSA8PCA4KSk7CiAJCWlmIChlc3AtPnJldiA9PSBGQVNITUUpCiAJCQllY291bnQgfD0gKCh1bnNpZ25lZCBpbnQpZXNwX3JlYWQ4KEZBU19STE8pKSA8PCAxNjsKKwkJaWYgKGVzcC0+cmV2ID09IFBDU0NTSSAmJiAoZXNwLT5jb25maWcyICYgRVNQX0NPTkZJRzJfRkVOQUIpKQorCQkJZWNvdW50IHw9ICgodW5zaWduZWQgaW50KWVzcF9yZWFkOChFU1BfVENISSkpIDw8IDE2OwogCX0KIAogCWJ5dGVzX3NlbnQgPSBlc3AtPmRhdGFfZG1hX2xlbjsKIAlieXRlc19zZW50IC09IGVjb3VudDsKIAorCS8qCisJICogVGhlIGFtNTNjOTc0IGhhcyBhIERNQSAncGVjdWxhcml0eScuIFRoZSBkb2Mgc3RhdGVzOgorCSAqIEluIHNvbWUgb2RkIGJ5dGUgY29uZGl0aW9ucywgb25lIHJlc2lkdWFsIGJ5dGUgd2lsbAorCSAqIGJlIGxlZnQgaW4gdGhlIFNDU0kgRklGTywgYW5kIHRoZSBGSUZPIEZsYWdzIHdpbGwKKwkgKiBuZXZlciBjb3VudCB0byAnMCAnLiBXaGVuIHRoaXMgaGFwcGVucywgdGhlIHJlc2lkdWFsCisJICogYnl0ZSBzaG91bGQgYmUgcmV0cmlldmVkIHZpYSBQSU8gZm9sbG93aW5nIGNvbXBsZXRpb24KKwkgKiBvZiB0aGUgQkxBU1Qgb3BlcmF0aW9uLgorCSAqLworCWlmIChmaWZvX2NudCA9PSAxICYmIGVudC0+ZmxhZ3MgJiBFU1BfQ01EX0ZMQUdfUkVTSURVQUwpIHsKKwkJc2l6ZV90IGNvdW50ID0gMTsKKwkJc2l6ZV90IG9mZnNldCA9IGJ5dGVzX3NlbnQ7CisJCXU4IGJ2YWwgPSBlc3BfcmVhZDgoRVNQX0ZEQVRBKTsKKworCQlpZiAoZW50LT5mbGFncyAmIEVTUF9DTURfRkxBR19BVVRPU0VOU0UpCisJCQllbnQtPnNlbnNlX3B0cltieXRlc19zZW50XSA9IGJ2YWw7CisJCWVsc2UgeworCQkJc3RydWN0IGVzcF9jbWRfcHJpdiAqcCA9IEVTUF9DTURfUFJJVihjbWQpOworCQkJdTggKnB0cjsKKworCQkJcHRyID0gc2NzaV9rbWFwX2F0b21pY19zZyhwLT5jdXJfc2csIHAtPnUubnVtX3NnLAorCQkJCQkJICAmb2Zmc2V0LCAmY291bnQpOworCQkJaWYgKGxpa2VseShwdHIpKSB7CisJCQkJKihwdHIgKyBvZmZzZXQpID0gYnZhbDsKKwkJCQlzY3NpX2t1bm1hcF9hdG9taWNfc2cocHRyKTsKKwkJCX0KKwkJfQorCQlieXRlc19zZW50ICs9IGZpZm9fY250OworCQllbnQtPmZsYWdzICY9IH5FU1BfQ01EX0ZMQUdfUkVTSURVQUw7CisJfQogCWlmICghKGVudC0+ZmxhZ3MgJiBFU1BfQ01EX0ZMQUdfV1JJVEUpKQogCQlieXRlc19zZW50IC09IGZpZm9fY250OwogCkBAIC0xNTU2LDggKzE2MTgsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JcHJpbnRrKCJFU1A6IFVuZXhwZWN0ZWQgZXh0ZW5kZWQgbXNnIHR5cGUgJXhcbiIsCi0JICAgICAgIGVzcC0+bXNnX2luWzJdKTsKKwlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCSAgICAgIlVuZXhwZWN0ZWQgZXh0ZW5kZWQgbXNnIHR5cGUgJXhcbiIsIGVzcC0+bXNnX2luWzJdKTsKIAogCWVzcC0+bXNnX291dFswXSA9IEFCT1JUX1RBU0tfU0VUOwogCWVzcC0+bXNnX291dF9sZW4gPSAxOwpAQCAtMTU3NCw3ICsxNjM2LDggQEAKIAogCWlmIChtc2cwICYgMHg4MCkgewogCQkvKiBJZGVudGlmeSAqLwotCQlwcmludGsoIkVTUDogVW5leHBlY3RlZCBtc2dpbiBpZGVudGlmeVxuIik7CisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCSAgICAgIlVuZXhwZWN0ZWQgbXNnaW4gaWRlbnRpZnlcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE2NDAsMTAgKzE3MDMsMTIgQEAKIAogc3RhdGljIGludCBlc3BfcHJvY2Vzc19ldmVudChzdHJ1Y3QgZXNwICplc3ApCiB7Ci0JaW50IHdyaXRlOworCWludCB3cml0ZSwgaTsKIAogYWdhaW46CiAJd3JpdGUgPSAwOworCWVzcF9sb2dfZXZlbnQoInByb2Nlc3MgZXZlbnQgJWQgcGhhc2UgJXhcbiIsCisJCSAgICAgIGVzcC0+ZXZlbnQsIGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKTsKIAlzd2l0Y2ggKGVzcC0+ZXZlbnQpIHsKIAljYXNlIEVTUF9FVkVOVF9DSEVDS19QSEFTRToKIAkJc3dpdGNoIChlc3AtPnNyZWcgJiBFU1BfU1RBVF9QTUFTSykgewpAQCAtMTY3Myw4ICsxNzM4LDkgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoIkVTUDogVW5leHBlY3RlZCBwaGFzZSwgc3JlZz0lMDJ4XG4iLAotCQkJICAgICAgIGVzcC0+c3JlZyk7CisJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCQkJICAgICAiVW5leHBlY3RlZCBwaGFzZSwgc3JlZz0lMDJ4XG4iLAorCQkJCSAgICAgZXNwLT5zcmVnKTsKIAkJCWVzcF9zY2hlZHVsZV9yZXNldChlc3ApOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE3MDgsMTggKzE3NzQsMTcgQEAKIAkJZXNwLT5kYXRhX2RtYV9sZW4gPSBkbWFfbGVuOwogCiAJCWlmICghZG1hX2xlbikgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IERNQSBsZW5ndGggaXMgemVybyFcbiIsCi0JCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQpOwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IGN1ciBhZHJbJTA4bGx4XSBsZW5bJTA4eF1cbiIsCi0JCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllc3BfY3VyX2RtYV9hZGRyKGVudCwgY21kKSwKLQkJCSAgICAgICBlc3BfY3VyX2RtYV9sZW4oZW50LCBjbWQpKTsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJCSAgICAgIkRNQSBsZW5ndGggaXMgemVybyFcbiIpOworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkJICAgICAiY3VyIGFkclslMDhsbHhdIGxlblslMDh4XVxuIiwKKwkJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZXNwX2N1cl9kbWFfYWRkcihlbnQsIGNtZCksCisJCQkJICAgICBlc3BfY3VyX2RtYV9sZW4oZW50LCBjbWQpKTsKIAkJCWVzcF9zY2hlZHVsZV9yZXNldChlc3ApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQllc3BfbG9nX2RhdGFzdGFydCgiRVNQOiBzdGFydCBkYXRhIGFkZHJbJTA4bGx4XSBsZW5bJXVdICIKLQkJCQkgICJ3cml0ZSglZClcbiIsCisJCWVzcF9sb2dfZGF0YXN0YXJ0KCJzdGFydCBkYXRhIGFkZHJbJTA4bGx4XSBsZW5bJXVdIHdyaXRlKCVkKVxuIiwKIAkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZG1hX2FkZHIsIGRtYV9sZW4sIHdyaXRlKTsKIAogCQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZG1hX2FkZHIsIGRtYV9sZW4sIGRtYV9sZW4sCkBAIC0xNzMzLDcgKzE3OTgsOCBAQAogCQlpbnQgYnl0ZXNfc2VudDsKIAogCQlpZiAoZXNwLT5vcHMtPmRtYV9lcnJvcihlc3ApKSB7Ci0JCQlwcmludGsoIkVTUDogZGF0YSBkb25lLCBETUEgZXJyb3IsIHJlc2V0dGluZ1xuIik7CisJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCQkJICAgICAiZGF0YSBkb25lLCBETUEgZXJyb3IsIHJlc2V0dGluZ1xuIik7CiAJCQllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xNzQ5LDE0ICsxODE1LDE1IEBACiAJCQkvKiBXZSBzaG91bGQgYWx3YXlzIHNlZSBleGFjdGx5IGEgYnVzLXNlcnZpY2UKIAkJCSAqIGludGVycnVwdCBhdCB0aGUgZW5kIG9mIGEgc3VjY2Vzc2Z1bCB0cmFuc2Zlci4KIAkJCSAqLwotCQkJcHJpbnRrKCJFU1A6IGRhdGEgZG9uZSwgbm90IEJTRVJWLCByZXNldHRpbmdcbiIpOworCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LAorCQkJCSAgICAgImRhdGEgZG9uZSwgbm90IEJTRVJWLCByZXNldHRpbmdcbiIpOwogCQkJZXNwX3NjaGVkdWxlX3Jlc2V0KGVzcCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJCWJ5dGVzX3NlbnQgPSBlc3BfZGF0YV9ieXRlc19zZW50KGVzcCwgZW50LCBjbWQpOwogCi0JCWVzcF9sb2dfZGF0YWRvbmUoIkVTUDogZGF0YSBkb25lIGZsZ3NbJXhdIHNlbnRbJWRdXG4iLAorCQllc3BfbG9nX2RhdGFkb25lKCJkYXRhIGRvbmUgZmxnc1sleF0gc2VudFslZF1cbiIsCiAJCQkJIGVudC0+ZmxhZ3MsIGJ5dGVzX3NlbnQpOwogCiAJCWlmIChieXRlc19zZW50IDwgMCkgewpAQCAtMTc4NSw4ICsxODUyLDkgQEAKIAkJfQogCiAJCWlmIChlbnQtPm1lc3NhZ2UgIT0gQ09NTUFORF9DT01QTEVURSkgewotCQkJcHJpbnRrKCJFU1A6IFVuZXhwZWN0ZWQgbWVzc2FnZSAleCBpbiBzdGF0dXNcbiIsCi0JCQkgICAgICAgZW50LT5tZXNzYWdlKTsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCQkgICAgICJVbmV4cGVjdGVkIG1lc3NhZ2UgJXggaW4gc3RhdHVzXG4iLAorCQkJCSAgICAgZW50LT5tZXNzYWdlKTsKIAkJCWVzcF9zY2hlZHVsZV9yZXNldChlc3ApOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE4MDQsOCArMTg3Miw3IEBACiAJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0VTRUwpOwogCiAJCWlmIChlbnQtPm1lc3NhZ2UgPT0gQ09NTUFORF9DT01QTEVURSkgewotCQkJZXNwX2xvZ19jbWRkb25lKCJFU1A6IENvbW1hbmQgZG9uZSBzdGF0dXNbJXhdICIKLQkJCQkJIm1lc3NhZ2VbJXhdXG4iLAorCQkJZXNwX2xvZ19jbWRkb25lKCJDb21tYW5kIGRvbmUgc3RhdHVzWyV4XSBtZXNzYWdlWyV4XVxuIiwKIAkJCQkJZW50LT5zdGF0dXMsIGVudC0+bWVzc2FnZSk7CiAJCQlpZiAoZW50LT5zdGF0dXMgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCkKIAkJCQllc3BfZXZlbnRfcXVldWVfZnVsbChlc3AsIGVudCk7CkBAIC0xODIxLDE2ICsxODg4LDE2IEBACiAJCQkJCQkJICAgICAgIERJRF9PSykpOwogCQkJfQogCQl9IGVsc2UgaWYgKGVudC0+bWVzc2FnZSA9PSBESVNDT05ORUNUKSB7Ci0JCQllc3BfbG9nX2Rpc2Nvbm5lY3QoIkVTUDogRGlzY29ubmVjdGluZyB0Z3RbJWRdICIKLQkJCQkJICAgInRhZ1sleDoleF1cbiIsCisJCQllc3BfbG9nX2Rpc2Nvbm5lY3QoIkRpc2Nvbm5lY3RpbmcgdGd0WyVkXSB0YWdbJXg6JXhdXG4iLAogCQkJCQkgICBjbWQtPmRldmljZS0+aWQsCiAJCQkJCSAgIGVudC0+dGFnWzBdLCBlbnQtPnRhZ1sxXSk7CiAKIAkJCWVzcC0+YWN0aXZlX2NtZCA9IE5VTEw7CiAJCQllc3BfbWF5YmVfZXhlY3V0ZV9jb21tYW5kKGVzcCk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoIkVTUDogVW5leHBlY3RlZCBtZXNzYWdlICV4IGluIGZyZWVidXNcbiIsCi0JCQkgICAgICAgZW50LT5tZXNzYWdlKTsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCQkgICAgICJVbmV4cGVjdGVkIG1lc3NhZ2UgJXggaW4gZnJlZWJ1c1xuIiwKKwkJCQkgICAgIGVudC0+bWVzc2FnZSk7CiAJCQllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xODYyLDYgKzE5MjksMTAgQEAKIAkJCWlmIChlc3AtPm1zZ19vdXRfbGVuID09IDEpIHsKIAkJCQllc3Bfd3JpdGU4KGVzcC0+bXNnX291dFswXSwgRVNQX0ZEQVRBKTsKIAkJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX1RJKTsKKwkJCX0gZWxzZSBpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX1VTRV9GSUZPKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IGVzcC0+bXNnX291dF9sZW47IGkrKykKKwkJCQkJZXNwX3dyaXRlOChlc3AtPm1zZ19vdXRbaV0sIEVTUF9GREFUQSk7CisJCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9USSk7CiAJCQl9IGVsc2UgewogCQkJCS8qIFVzZSBETUEuICovCiAJCQkJbWVtY3B5KGVzcC0+Y29tbWFuZF9ibG9jaywKQEAgLTE5MTcsNyArMTk4OCw3IEBACiAJCQkJdmFsID0gZXNwX3JlYWQ4KEVTUF9GREFUQSk7CiAJCQllc3AtPm1zZ19pbltlc3AtPm1zZ19pbl9sZW4rK10gPSB2YWw7CiAKLQkJCWVzcF9sb2dfbXNnaW4oIkVTUDogR290IG1zZ2luIGJ5dGUgJXhcbiIsIHZhbCk7CisJCQllc3BfbG9nX21zZ2luKCJHb3QgbXNnaW4gYnl0ZSAleFxuIiwgdmFsKTsKIAogCQkJaWYgKCFlc3BfbXNnaW5fcHJvY2Vzcyhlc3ApKQogCQkJCWVzcC0+bXNnX2luX2xlbiA9IDA7CkBAIC0xOTMwLDcgKzIwMDEsOCBAQAogCQkJaWYgKGVzcC0+ZXZlbnQgIT0gRVNQX0VWRU5UX0ZSRUVfQlVTKQogCQkJCWVzcF9ldmVudChlc3AsIEVTUF9FVkVOVF9DSEVDS19QSEFTRSk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoIkVTUDogTVNHSU4gbmVpdGhlciBCU0VSViBub3QgRkRPTiwgcmVzZXR0aW5nIik7CisJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCQkJICAgICAiTVNHSU4gbmVpdGhlciBCU0VSViBub3QgRkRPTiwgcmVzZXR0aW5nIik7CiAJCQllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xOTM4LDExICsyMDEwLDcgQEAKIAljYXNlIEVTUF9FVkVOVF9DTURfU1RBUlQ6CiAJCW1lbWNweShlc3AtPmNvbW1hbmRfYmxvY2ssIGVzcC0+Y21kX2J5dGVzX3B0ciwKIAkJICAgICAgIGVzcC0+Y21kX2J5dGVzX2xlZnQpOwotCQlpZiAoZXNwLT5yZXYgPT0gRkFTSE1FKQotCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9GTFVTSCk7Ci0JCWVzcC0+b3BzLT5zZW5kX2RtYV9jbWQoZXNwLCBlc3AtPmNvbW1hbmRfYmxvY2tfZG1hLAotCQkJCSAgICAgICBlc3AtPmNtZF9ieXRlc19sZWZ0LCAxNiwgMCwKLQkJCQkgICAgICAgRVNQX0NNRF9ETUEgfCBFU1BfQ01EX1RJKTsKKwkJZXNwX3NlbmRfZG1hX2NtZChlc3AsIGVzcC0+Y21kX2J5dGVzX2xlZnQsIDE2LCBFU1BfQ01EX1RJKTsKIAkJZXNwX2V2ZW50KGVzcCwgRVNQX0VWRU5UX0NNRF9ET05FKTsKIAkJZXNwLT5mbGFncyB8PSBFU1BfRkxBR19RVUlDS0lSUV9DSEVDSzsKIAkJYnJlYWs7CkBAIC0xOTYxLDggKzIwMjksOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50aygiRVNQOiBVbmV4cGVjdGVkIGV2ZW50ICV4LCByZXNldHRpbmdcbiIsCi0JCSAgICAgICBlc3AtPmV2ZW50KTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LAorCQkJICAgICAiVW5leHBlY3RlZCBldmVudCAleCwgcmVzZXR0aW5nXG4iLCBlc3AtPmV2ZW50KTsKIAkJZXNwX3NjaGVkdWxlX3Jlc2V0KGVzcCk7CiAJCXJldHVybiAwOwogCQlicmVhazsKQEAgLTIwNDQsNyArMjExMiwxMiBAQAogCWludCBmaW5pc2hfcmVzZXQsIGludHJfZG9uZTsKIAl1OCBwaGFzZTsKIAorICAgICAgIC8qCisJKiBPbmNlIElOVFJQVCBpcyByZWFkIFNUQVRVUyBhbmQgU1NURVAgYXJlIGNsZWFyZWQuCisJKi8KIAllc3AtPnNyZWcgPSBlc3BfcmVhZDgoRVNQX1NUQVRVUyk7CisJZXNwLT5zZXFyZWcgPSBlc3BfcmVhZDgoRVNQX1NTVEVQKTsKKwllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7CiAKIAlpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX1JFU0VUVElORykgewogCQlmaW5pc2hfcmVzZXQgPSAxOwpAQCAtMjA1Nyw4ICsyMTMwLDYgQEAKIAkJCXJldHVybjsKIAl9CiAKLQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7Ci0KIAlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfU1IpCiAJCWZpbmlzaF9yZXNldCA9IDE7CiAKQEAgLTIwODUsMTQgKzIxNTYsMTUgQEAKIAkJfQogCX0KIAotCWVzcF9sb2dfaW50cigiRVNQOiBpbnRyIHNyZWdbJTAyeF0gc2VxcmVnWyUwMnhdICIKKwllc3BfbG9nX2ludHIoImludHIgc3JlZ1slMDJ4XSBzZXFyZWdbJTAyeF0gIgogCQkgICAgICJzcmVnMlslMDJ4XSBpcmVnWyUwMnhdXG4iLAogCQkgICAgIGVzcC0+c3JlZywgZXNwLT5zZXFyZWcsIGVzcC0+c3JlZzIsIGVzcC0+aXJlZyk7CiAKIAlpbnRyX2RvbmUgPSAwOwogCiAJaWYgKGVzcC0+aXJlZyAmIChFU1BfSU5UUl9TIHwgRVNQX0lOVFJfU0FUTiB8IEVTUF9JTlRSX0lDKSkgewotCQlwcmludGsoIkVTUDogdW5leHBlY3RlZCBJUkVHICUwMnhcbiIsIGVzcC0+aXJlZyk7CisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCSAgICAgInVuZXhwZWN0ZWQgSVJFRyAlMDJ4XG4iLCBlc3AtPmlyZWcpOwogCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfSUMpCiAJCQllc3BfZHVtcF9jbWRfbG9nKGVzcCk7CiAKQEAgLTIxNDksNDYgKzIyMjEsNTAgQEAKIAl1OCB2YWw7CiAKIAllc3AtPmNvbmZpZzEgPSAoRVNQX0NPTkZJRzFfUEVOQUJMRSB8IChlc3AtPnNjc2lfaWQgJiA3KSk7Ci0JZXNwLT5jb25maWcyID0gKEVTUF9DT05GSUcyX1NDU0kyRU5BQiB8IEVTUF9DT05GSUcyX1JFR1BBUklUWSk7Ci0JZXNwX3dyaXRlOChlc3AtPmNvbmZpZzIsIEVTUF9DRkcyKTsKLQotCXZhbCA9IGVzcF9yZWFkOChFU1BfQ0ZHMik7Ci0JdmFsICY9IH5FU1BfQ09ORklHMl9NQUdJQzsKLQlpZiAodmFsICE9IChFU1BfQ09ORklHMl9TQ1NJMkVOQUIgfCBFU1BfQ09ORklHMl9SRUdQQVJJVFkpKSB7Ci0JCS8qIElmIHdoYXQgd2Ugd3JpdGUgdG8gY2ZnMiBkb2VzIG5vdCBjb21lIGJhY2ssIGNmZzIgaXMgbm90Ci0JCSAqIGltcGxlbWVudGVkLCB0aGVyZWZvcmUgdGhpcyBtdXN0IGJlIGEgcGxhaW4gZXNwMTAwLgotCQkgKi8KLQkJZXNwLT5yZXYgPSBFU1AxMDA7Ci0JfSBlbHNlIHsKLQkJZXNwLT5jb25maWcyID0gMDsKLQkJZXNwX3NldF9hbGxfY29uZmlnMyhlc3AsIDUpOwotCQllc3AtPnByZXZfY2ZnMyA9IDU7CisJaWYgKGVzcC0+Y29uZmlnMiA9PSAwKSB7CisJCWVzcC0+Y29uZmlnMiA9IChFU1BfQ09ORklHMl9TQ1NJMkVOQUIgfCBFU1BfQ09ORklHMl9SRUdQQVJJVFkpOwogCQllc3Bfd3JpdGU4KGVzcC0+Y29uZmlnMiwgRVNQX0NGRzIpOwotCQllc3Bfd3JpdGU4KDAsIEVTUF9DRkczKTsKKworCQl2YWwgPSBlc3BfcmVhZDgoRVNQX0NGRzIpOworCQl2YWwgJj0gfkVTUF9DT05GSUcyX01BR0lDOworCisJCWVzcC0+Y29uZmlnMiA9IDA7CisJCWlmICh2YWwgIT0gKEVTUF9DT05GSUcyX1NDU0kyRU5BQiB8IEVTUF9DT05GSUcyX1JFR1BBUklUWSkpIHsKKwkJCS8qCisJCQkgKiBJZiB3aGF0IHdlIHdyaXRlIHRvIGNmZzIgZG9lcyBub3QgY29tZSBiYWNrLAorCQkJICogY2ZnMiBpcyBub3QgaW1wbGVtZW50ZWQuCisJCQkgKiBUaGVyZWZvcmUgdGhpcyBtdXN0IGJlIGEgcGxhaW4gZXNwMTAwLgorCQkJICovCisJCQllc3AtPnJldiA9IEVTUDEwMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWVzcF9zZXRfYWxsX2NvbmZpZzMoZXNwLCA1KTsKKwllc3AtPnByZXZfY2ZnMyA9IDU7CisJZXNwX3dyaXRlOChlc3AtPmNvbmZpZzIsIEVTUF9DRkcyKTsKKwllc3Bfd3JpdGU4KDAsIEVTUF9DRkczKTsKKwllc3Bfd3JpdGU4KGVzcC0+cHJldl9jZmczLCBFU1BfQ0ZHMyk7CisKKwl2YWwgPSBlc3BfcmVhZDgoRVNQX0NGRzMpOworCWlmICh2YWwgIT0gNSkgeworCQkvKiBUaGUgY2ZnMiByZWdpc3RlciBpcyBpbXBsZW1lbnRlZCwgaG93ZXZlcgorCQkgKiBjZmczIGlzIG5vdCwgbXVzdCBiZSBlc3AxMDBhLgorCQkgKi8KKwkJZXNwLT5yZXYgPSBFU1AxMDBBOworCX0gZWxzZSB7CisJCWVzcF9zZXRfYWxsX2NvbmZpZzMoZXNwLCAwKTsKKwkJZXNwLT5wcmV2X2NmZzMgPSAwOwogCQllc3Bfd3JpdGU4KGVzcC0+cHJldl9jZmczLCBFU1BfQ0ZHMyk7CiAKLQkJdmFsID0gZXNwX3JlYWQ4KEVTUF9DRkczKTsKLQkJaWYgKHZhbCAhPSA1KSB7Ci0JCQkvKiBUaGUgY2ZnMiByZWdpc3RlciBpcyBpbXBsZW1lbnRlZCwgaG93ZXZlcgotCQkJICogY2ZnMyBpcyBub3QsIG11c3QgYmUgZXNwMTAwYS4KLQkJCSAqLwotCQkJZXNwLT5yZXYgPSBFU1AxMDBBOworCQkvKiBBbGwgb2YgY2ZnezEsMiwzfSBpbXBsZW1lbnRlZCwgbXVzdCBiZSBvbmUgb2YKKwkJICogdGhlIGZhcyB2YXJpYW50cywgZmlndXJlIG91dCB3aGljaCBvbmUuCisJCSAqLworCQlpZiAoZXNwLT5jZmFjdCA9PSAwIHx8IGVzcC0+Y2ZhY3QgPiBFU1BfQ0NGX0Y1KSB7CisJCQllc3AtPnJldiA9IEZBU1Q7CisJCQllc3AtPnN5bmNfZGVmcCA9IFNZTkNfREVGUF9GQVNUOwogCQl9IGVsc2UgewotCQkJZXNwX3NldF9hbGxfY29uZmlnMyhlc3AsIDApOwotCQkJZXNwLT5wcmV2X2NmZzMgPSAwOwotCQkJZXNwX3dyaXRlOChlc3AtPnByZXZfY2ZnMywgRVNQX0NGRzMpOwotCi0JCQkvKiBBbGwgb2YgY2ZnezEsMiwzfSBpbXBsZW1lbnRlZCwgbXVzdCBiZSBvbmUgb2YKLQkJCSAqIHRoZSBmYXMgdmFyaWFudHMsIGZpZ3VyZSBvdXQgd2hpY2ggb25lLgotCQkJICovCi0JCQlpZiAoZXNwLT5jZmFjdCA9PSAwIHx8IGVzcC0+Y2ZhY3QgPiBFU1BfQ0NGX0Y1KSB7Ci0JCQkJZXNwLT5yZXYgPSBGQVNUOwotCQkJCWVzcC0+c3luY19kZWZwID0gU1lOQ19ERUZQX0ZBU1Q7Ci0JCQl9IGVsc2UgewotCQkJCWVzcC0+cmV2ID0gRVNQMjM2OwotCQkJfQotCQkJZXNwLT5jb25maWcyID0gMDsKLQkJCWVzcF93cml0ZTgoZXNwLT5jb25maWcyLCBFU1BfQ0ZHMik7CisJCQllc3AtPnJldiA9IEVTUDIzNjsKIAkJfQogCX0KIH0KQEAgLTIzMDgsNiArMjM4NCw3IEBACiAJIkZBUzEwMEEiLAogCSJGQVNUIiwKIAkiRkFTSE1FIiwKKwkiQU01M0M5NzQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqZXNwX3RyYW5zcG9ydF90ZW1wbGF0ZTsKQEAgLTIzMTcsNiArMjM5NCwxMCBAQAogCXN0YXRpYyBpbnQgaW5zdGFuY2U7CiAJaW50IGVycjsKIAorCWlmICghZXNwLT5udW1fdGFncykKKwkJZXNwLT5udW1fdGFncyA9IEVTUF9ERUZBVUxUX1RBR1M7CisJZWxzZSBpZiAoZXNwLT5udW1fdGFncyA+PSBFU1BfTUFYX1RBRykKKwkJZXNwLT5udW1fdGFncyA9IEVTUF9NQVhfVEFHIC0gMTsKIAllc3AtPmhvc3QtPnRyYW5zcG9ydHQgPSBlc3BfdHJhbnNwb3J0X3RlbXBsYXRlOwogCWVzcC0+aG9zdC0+bWF4X2x1biA9IEVTUF9NQVhfTFVOOwogCWVzcC0+aG9zdC0+Y21kX3Blcl9sdW4gPSAyOwpAQCAtMjMzMCwxMiArMjQxMSwxMyBAQAogCiAJZXNwX2Jvb3R1cF9yZXNldChlc3ApOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggImVzcCV1LCByZWdzWyUxcDolMXBdIGlycVsldV1cbiIsCi0JICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlc3AtPnJlZ3MsIGVzcC0+ZG1hX3JlZ3MsCi0JICAgICAgIGVzcC0+aG9zdC0+aXJxKTsKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZXNwJXUgaXMgYSAlcywgJXUgTUh6IChjY2Y9JXUpLCBTQ1NJIElEICV1XG4iLAotCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwgZXNwX2NoaXBfbmFtZXNbZXNwLT5yZXZdLAotCSAgICAgICBlc3AtPmNmcmVxIC8gMTAwMDAwMCwgZXNwLT5jZmFjdCwgZXNwLT5zY3NpX2lkKTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgZGV2LCAiZXNwJXU6IHJlZ3NbJTFwOiUxcF0gaXJxWyV1XVxuIiwKKwkJICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+cmVncywgZXNwLT5kbWFfcmVncywKKwkJICAgZXNwLT5ob3N0LT5pcnEpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCBkZXYsCisJCSAgICJlc3AldTogaXMgYSAlcywgJXUgTUh6IChjY2Y9JXUpLCBTQ1NJIElEICV1XG4iLAorCQkgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwgZXNwX2NoaXBfbmFtZXNbZXNwLT5yZXZdLAorCQkgICBlc3AtPmNmcmVxIC8gMTAwMDAwMCwgZXNwLT5jZmFjdCwgZXNwLT5zY3NpX2lkKTsKIAogCS8qIExldCB0aGUgU0NTSSBidXMgcmVzZXQgc2V0dGxlLiAqLwogCXNzbGVlcChlc3BfYnVzX3Jlc2V0X3NldHRsZSk7CkBAIC0yNDAyLDI4ICsyNDg0LDEwIEBACiB7CiAJc3RydWN0IGVzcCAqZXNwID0gc2hvc3RfcHJpdihkZXYtPmhvc3QpOwogCXN0cnVjdCBlc3BfdGFyZ2V0X2RhdGEgKnRwID0gJmVzcC0+dGFyZ2V0W2Rldi0+aWRdOwotCWludCBnb2FsX3RhZ3MsIHF1ZXVlX2RlcHRoOwogCi0JZ29hbF90YWdzID0gMDsKKwlpZiAoZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIGVzcC0+bnVtX3RhZ3MpOwogCi0JaWYgKGRldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQkvKiBYWFggbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBzb21laG93IFhYWCAqLwotCQlnb2FsX3RhZ3MgPSBFU1BfREVGQVVMVF9UQUdTOwotCi0JCWlmIChnb2FsX3RhZ3MgPiBFU1BfTUFYX1RBRykKLQkJCWdvYWxfdGFncyA9IEVTUF9NQVhfVEFHOwotCX0KLQotCXF1ZXVlX2RlcHRoID0gZ29hbF90YWdzOwotCWlmIChxdWV1ZV9kZXB0aCA8IGRldi0+aG9zdC0+Y21kX3Blcl9sdW4pCi0JCXF1ZXVlX2RlcHRoID0gZGV2LT5ob3N0LT5jbWRfcGVyX2x1bjsKLQotCWlmIChnb2FsX3RhZ3MpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoZGV2LCBNU0dfT1JERVJFRF9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShkZXYsIHF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UgewotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKGRldiwgcXVldWVfZGVwdGgpOwotCX0KIAl0cC0+ZmxhZ3MgfD0gRVNQX1RHVF9ESVNDT05ORUNUOwogCiAJaWYgKCFzcGlfaW5pdGlhbF9kdihkZXYtPnNkZXZfdGFyZ2V0KSkKQEAgLTI0NTEsMTkgKzI1MTUsMjAgQEAKIAkgKiBYWFggbXVjaCBmb3IgdGhlIGZpbmFsIGRyaXZlci4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZShlc3AtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBBYm9ydGluZyBjb21tYW5kIFslcDolMDJ4XVxuIiwKLQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGNtZCwgY21kLT5jbW5kWzBdKTsKKwlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwgIkFib3J0aW5nIGNvbW1hbmQgWyVwOiUwMnhdXG4iLAorCQkgICAgIGNtZCwgY21kLT5jbW5kWzBdKTsKIAllbnQgPSBlc3AtPmFjdGl2ZV9jbWQ7CiAJaWYgKGVudCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IEN1cnJlbnQgY29tbWFuZCBbJXA6JTAyeF1cbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwgZW50LT5jbWQsIGVudC0+Y21kLT5jbW5kWzBdKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkgICAgICJDdXJyZW50IGNvbW1hbmQgWyVwOiUwMnhdXG4iLAorCQkJICAgICBlbnQtPmNtZCwgZW50LT5jbWQtPmNtbmRbMF0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50LCAmZXNwLT5xdWV1ZWRfY21kcywgbGlzdCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJlc3AlZDogUXVldWVkIGNvbW1hbmQgWyVwOiUwMnhdXG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVudC0+Y21kLCBlbnQtPmNtZC0+Y21uZFswXSk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LCAiUXVldWVkIGNvbW1hbmQgWyVwOiUwMnhdXG4iLAorCQkJICAgICBlbnQtPmNtZCwgZW50LT5jbWQtPmNtbmRbMF0pOwogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudCwgJmVzcC0+YWN0aXZlX2NtZHMsIGxpc3QpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IEFjdGl2ZSBjb21tYW5kIFslcDolMDJ4XVxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlbnQtPmNtZCwgZW50LT5jbWQtPmNtbmRbMF0pOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwgIiBBY3RpdmUgY29tbWFuZCBbJXA6JTAyeF1cbiIsCisJCQkgICAgIGVudC0+Y21kLCBlbnQtPmNtZC0+Y21uZFswXSk7CiAJfQogCWVzcF9kdW1wX2NtZF9sb2coZXNwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGVzcC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC0yNjMxLDYgKzI2OTYsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkubWF4X3NlY3RvcnMJCT0gMHhmZmZmLAogCS5za2lwX3NldHRsZV9kZWxheQk9IDEsCisJLnVzZV9ibGtfdGFncwkJPSAxLAogfTsKIEVYUE9SVF9TWU1CT0woc2NzaV9lc3BfdGVtcGxhdGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuaCBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5oCmluZGV4IGNkNjg4MDUuLjg0ZGNiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5oCkBAIC0xLDQgKzEsNCBAQAotLyogZXNwX3Njc2kuaDogRGVmaW5lcyBhbmQgc3RydWN0dXJlcyBmb3IgdGhlIEVTUCBkcmllci4KKy8qIGVzcF9zY3NpLmg6IERlZmluZXMgYW5kIHN0cnVjdHVyZXMgZm9yIHRoZSBFU1AgZHJpdmVyLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgRVNQX0NURVNUCTB4MGFVTAkJLyogd28gIENoaXAgdGVzdCByZWdpc3RlciAgICAgIDB4MjggICovCiAjZGVmaW5lIEVTUF9DRkcyCTB4MGJVTAkJLyogcncgIFNlY29uZCBjZmcgcmVnaXN0ZXIgICAgIDB4MmMgICovCiAjZGVmaW5lIEVTUF9DRkczCTB4MGNVTAkJLyogcncgIFRoaXJkIGNmZyByZWdpc3RlciAgICAgIDB4MzAgICovCisjZGVmaW5lIEVTUF9DRkc0CTB4MGRVTAkJLyogcncgIEZvdXJ0aCBjZmcgcmVnaXN0ZXIgICAgIDB4MzQgICovCiAjZGVmaW5lIEVTUF9UQ0hJCTB4MGVVTAkJLyogcncgIEhpZ2ggYml0cyB0cmFuc2YgY291bnQgIDB4MzggICovCiAjZGVmaW5lIEVTUF9VSUQJCUVTUF9UQ0hJCS8qIHJvICBVbmlxdWUgSUQgY29kZSAgICAgICAgICAweDM4ICAqLwogI2RlZmluZSBGQVNfUkxPCQlFU1BfVENISQkvKiBydyAgSE1FIGV4dGVuZGVkIGNvdW50ZXIgICAgMHgzOCAgKi8KQEAgLTc2LDYgKzc3LDE4IEBACiAjZGVmaW5lIEVTUF9DT05GSUczX0lNUyAgICAgICAweDgwICAgICAvKiBJRCBtc2cgY2hrJ25nICAgICAgICAoZXNwL2ZhczIzNikgICovCiAjZGVmaW5lIEVTUF9DT05GSUczX09CUFVTSCAgICAweDgwICAgICAvKiBQdXNoIG9kZC1ieXRlIHRvIGRtYSAoaG1lKSAgICAgICAgICovCiAKKy8qIEVTUCBjb25maWcgcmVnaXN0ZXIgNCByZWFkLXdyaXRlLCBmb3VuZCBvbmx5IG9uIGFtNTNjOTc0IGNoaXBzICovCisjZGVmaW5lIEVTUF9DT05GSUc0X1JBREUgICAgICAweDA0ICAgICAvKiBBY3RpdmUgbmVnYXRpb24gKi8KKyNkZWZpbmUgRVNQX0NPTkZJRzRfUkFFICAgICAgIDB4MDggICAgIC8qIEFjdGl2ZSBuZWdhdGlvbiBvbiBSRVEgYW5kIEFDSyAqLworI2RlZmluZSBFU1BfQ09ORklHNF9QV0QgICAgICAgMHgyMCAgICAgLyogUmVkdWNlZCBwb3dlciBmZWF0dXJlICovCisjZGVmaW5lIEVTUF9DT05GSUc0X0dFMCAgICAgICAweDQwICAgICAvKiBHbGl0Y2ggZWF0ZXIgYml0IDAgKi8KKyNkZWZpbmUgRVNQX0NPTkZJRzRfR0UxICAgICAgIDB4ODAgICAgIC8qIEdsaXRjaCBlYXRlciBiaXQgMSAqLworCisjZGVmaW5lIEVTUF9DT05GSUdfR0VfMTJOUyAgICAoMCkKKyNkZWZpbmUgRVNQX0NPTkZJR19HRV8yNU5TICAgIChFU1BfQ09ORklHX0dFMSkKKyNkZWZpbmUgRVNQX0NPTkZJR19HRV8zNU5TICAgIChFU1BfQ09ORklHX0dFMCkKKyNkZWZpbmUgRVNQX0NPTkZJR19HRV8wTlMgICAgIChFU1BfQ09ORklHX0dFMCB8IEVTUF9DT05GSUdfR0UxKQorCiAvKiBFU1AgY29tbWFuZCByZWdpc3RlciByZWFkLXdyaXRlICovCiAvKiBHcm91cCAxIGNvbW1hbmRzOiAgVGhlc2UgbWF5IGJlIHNlbnQgYXQgYW55IHBvaW50IGluIHRpbWUgdG8gdGhlIEVTUAogICogICAgICAgICAgICAgICAgICAgIGNoaXAuICBOb25lIG9mIHRoZW0gY2FuIGdlbmVyYXRlIGludGVycnVwdHMgJ2NlcHQKQEAgLTI1NCw2ICsyNjcsNyBAQAogCUZBUzEwMEEgICAgPSAweDA0LAogCUZBU1QgICAgICAgPSAweDA1LAogCUZBU0hNRSAgICAgPSAweDA2LAorCVBDU0NTSSAgICAgPSAweDA3LCAgLyogQU01M2M5NzQgKi8KIH07CiAKIHN0cnVjdCBlc3BfY21kX2VudHJ5IHsKQEAgLTI2OSw2ICsyODMsNyBAQAogI2RlZmluZSBFU1BfQ01EX0ZMQUdfV1JJVEUJMHgwMSAvKiBETUEgaXMgYSB3cml0ZSAqLwogI2RlZmluZSBFU1BfQ01EX0ZMQUdfQUJPUlQJMHgwMiAvKiBiZWluZyBhYm9ydGVkICovCiAjZGVmaW5lIEVTUF9DTURfRkxBR19BVVRPU0VOU0UJMHgwNCAvKiBEb2luZyBhdXRvbWF0aWMgUkVRVUVTVF9TRU5TRSAqLworI2RlZmluZSBFU1BfQ01EX0ZMQUdfUkVTSURVQUwJMHgwOCAvKiBBTTUzYzk3NCBCTEFTVCByZXNpZHVhbCAqLwogCiAJdTgJCQl0YWdbMl07CiAJdTgJCQlvcmlnX3RhZ1syXTsKQEAgLTI4Myw3ICsyOTgsNiBAQAogCXN0cnVjdCBjb21wbGV0aW9uCSplaF9kb25lOwogfTsKIAotLyogWFhYIG1ha2UgdGhpcyBjb25maWd1cmFibGUgc29tZWhvdyBYWFggKi8KICNkZWZpbmUgRVNQX0RFRkFVTFRfVEFHUwkxNgogCiAjZGVmaW5lIEVTUF9NQVhfVEFSR0VUCQkxNgpAQCAtNDQ1LDcgKzQ1OSw3IEBACiAJdTgJCQlwcmV2X3NvZmY7CiAJdTgJCQlwcmV2X3N0cDsKIAl1OAkJCXByZXZfY2ZnMzsKLQl1OAkJCV9fcGFkOworCXU4CQkJbnVtX3RhZ3M7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVzcF9jbWRfcG9vbDsKIApAQCAtNDY2LDYgKzQ4MCw3IEBACiAJdTgJCQlidXJzdHM7CiAJdTgJCQljb25maWcxOwogCXU4CQkJY29uZmlnMjsKKwl1OAkJCWNvbmZpZzQ7CiAKIAl1OAkJCXNjc2lfaWQ7CiAJdTMyCQkJc2NzaV9pZF9tYXNrOwpAQCAtNDc5LDYgKzQ5NCw3IEBACiAjZGVmaW5lIEVTUF9GTEFHX1dJREVfQ0FQQUJMRQkweDAwMDAwMDA4CiAjZGVmaW5lIEVTUF9GTEFHX1FVSUNLSVJRX0NIRUNLCTB4MDAwMDAwMTAKICNkZWZpbmUgRVNQX0ZMQUdfRElTQUJMRV9TWU5DCTB4MDAwMDAwMjAKKyNkZWZpbmUgRVNQX0ZMQUdfVVNFX0ZJRk8JMHgwMDAwMDA0MAogCiAJdTgJCQlzZWxlY3Rfc3RhdGU7CiAjZGVmaW5lIEVTUF9TRUxFQ1RfTk9ORQkJMHgwMCAvKiBOb3Qgc2VsZWN0aW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKaW5kZXggNGE4YWM3ZC4uMzA4YTAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYwpAQCAtMjgwLDE0ICsyODAsMTYgQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBmY19laF9kZXZpY2VfcmVzZXQsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlciA9IGZjX2VoX2hvc3RfcmVzZXQsCiAJLnNsYXZlX2FsbG9jID0gZmNfc2xhdmVfYWxsb2MsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUgPSBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZCA9IC0xLAogCS5jbWRfcGVyX2x1biA9IDMsCiAJLmNhbl9xdWV1ZSA9IEZDT0VfTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTLAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zZ190YWJsZXNpemUgPSBTR19BTEwsCiAJLm1heF9zZWN0b3JzID0gMHhmZmZmLAorCS51c2VfYmxrX3RhZ3MgPSAxLAorCS50cmFja19xdWV1ZV9kZXB0aCA9IDEsCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaCBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaAppbmRleCBiZjhkMzRjLi4zYjczYjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCkBAIC0zOSw3ICszOSw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJmbmljIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJDaXNjbyBGQ29FIEhCQSBEcml2ZXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS42LjAuMTEiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS42LjAuMTYiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKICNkZWZpbmUgREZYICAgICAgICAgICAgICAgICAgICAgRFJWX05BTUUgIiVkOiAiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX2Zjcy5jCmluZGV4IGYzOTg0YjQuLmJmMGJiZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19mY3MuYwpAQCAtMTM1LDYgKzEzNSwxMSBAQAogCQkJZm5pYy0+bHBvcnQtPmhvc3QtPmhvc3Rfbm8sIEZOSUNfRkNfTEUsCiAJCQkiTGluayBTdGF0dXM6IFVQX0RPV04iLAogCQkJc3RybGVuKCJMaW5rIFN0YXR1czogVVBfRE9XTiIpKTsKKwkJaWYgKGZuaWMtPmNvbmZpZy5mbGFncyAmIFZGQ0ZfRklQX0NBUEFCTEUpIHsKKwkJCUZOSUNfRkNTX0RCRyhLRVJOX0RFQlVHLCBmbmljLT5scG9ydC0+aG9zdCwKKwkJCQkiZGVsZXRpbmcgZmlwLXRpbWVyIGR1cmluZyBsaW5rLWRvd25cbiIpOworCQkJZGVsX3RpbWVyX3N5bmMoJmZuaWMtPmZpcF90aW1lcik7CisJCX0KIAkJZmNvZV9jdGxyX2xpbmtfZG93bigmZm5pYy0+Y3Rscik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCmluZGV4IDhjNTZmZGMuLjBjMWY4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCkBAIC05NSwxMiArOTUsMTAgQEAKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzZGV2KSk7CiAKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKLQogCWlmICghcnBvcnQgfHwgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpKQogCQlyZXR1cm4gLUVOWElPOwogCi0Jc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZm5pY19tYXhfcWRlcHRoKTsKKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBmbmljX21heF9xZGVwdGgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTIsOCArMTEwLDggQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBmbmljX2RldmljZV9yZXNldCwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyID0gZm5pY19ob3N0X3Jlc2V0LAogCS5zbGF2ZV9hbGxvYyA9IGZuaWNfc2xhdmVfYWxsb2MsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUgPSBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZCA9IC0xLAogCS5jbWRfcGVyX2x1biA9IDMsCiAJLmNhbl9xdWV1ZSA9IEZOSUNfREZMVF9JT19SRVEsCkBAIC0xMjEsNiArMTE5LDggQEAKIAkuc2dfdGFibGVzaXplID0gRk5JQ19NQVhfU0dfREVTQ19DTlQsCiAJLm1heF9zZWN0b3JzID0gMHhmZmZmLAogCS5zaG9zdF9hdHRycyA9IGZuaWNfYXR0cnMsCisJLnVzZV9ibGtfdGFncyA9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoID0gMSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC00MzgsMjEgKzQzOCwzMCBAQAogCXVuc2lnbmVkIGxvbmcgdGltZTsKIAlpbnQgZG9uZTsKIAlpbnQgZXJyOworCWludCBjb3VudDsKKworCWNvdW50ID0gMDsKIAogCWVyciA9IHN0YXJ0KHZkZXYsIGFyZyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qIFdhaXQgZm9yIGZ1bmMgdG8gY29tcGxldGUuLi4yIHNlY29uZHMgbWF4ICovCisJLyogV2FpdCBmb3IgZnVuYyB0byBjb21wbGV0ZS4KKwkqIFNvbWV0aW1lIHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlIHRha2UgbG9uZyB0aW1lCisJKiB0byB3YWtlIHVwIHNvIHdlIGRvIG5vdCByZXRyeSBhcyB3ZSBhcmUgb25seSB3YWl0aW5nIGZvcgorCSogMiBzZWNvbmRzIGluIHdoaWxlIGxvb3AuIEJ5IGFkZGluZyBjb3VudCwgd2UgbWFrZSBzdXJlCisJKiB3ZSB0cnkgYXRsZWFzdCB0aHJlZSB0aW1lcyBiZWZvcmUgcmV0dXJuaW5nIC1FVElNRURPVVQKKwkqLwogCXRpbWUgPSBqaWZmaWVzICsgKEhaICogMik7CiAJZG8gewogCQllcnIgPSBmaW5pc2hlZCh2ZGV2LCAmZG9uZSk7CisJCWNvdW50Kys7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlpZiAoZG9uZSkKIAkJCXJldHVybiAwOwogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWiAvIDEwKTsKLQl9IHdoaWxlICh0aW1lX2FmdGVyKHRpbWUsIGppZmZpZXMpKTsKKwl9IHdoaWxlICh0aW1lX2FmdGVyKHRpbWUsIGppZmZpZXMpIHx8IChjb3VudCA8IDMpKTsKIAogCXJldHVybiAtRVRJTUVET1VUOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYwppbmRleCA5NjFiZGY1Li4yMDk3ZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYwpAQCAtMzI1LDEzICszMjUsMTEgQEAKIAlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcnAgPSBycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaG9zdF9zZ19kZXNjICpkZXNjOwogCXN0cnVjdCBtaXNjX3N0YXRzICptaXNjX3N0YXRzID0gJmZuaWMtPmZuaWNfc3RhdHMubWlzY19zdGF0czsKLQl1OCBwcmlfdGFnID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGludHJfZmxhZ3M7CiAJaW50IGZsYWdzOwogCXU4IGV4Y2hfZmxhZ3M7CiAJc3RydWN0IHNjc2lfbHVuIGZjX2x1bjsKLQljaGFyIG1zZ1syXTsKIAogCWlmIChzZ19jb3VudCkgewogCQkvKiBGb3IgZWFjaCBTR0UsIGNyZWF0ZSBhIGRldmljZSBkZXNjIGVudHJ5ICovCkBAIC0zNTcsMTIgKzM1NSw2IEBACiAKIAlpbnRfdG9fc2NzaWx1bihzYy0+ZGV2aWNlLT5sdW4sICZmY19sdW4pOwogCi0JcHJpX3RhZyA9IEZDUElPX0lDTU5EX1BUQV9TSU1QTEU7Ci0JbXNnWzBdID0gTVNHX1NJTVBMRV9UQUc7Ci0Jc2NzaV9wb3B1bGF0ZV90YWdfbXNnKHNjLCBtc2cpOwotCWlmIChtc2dbMF0gPT0gTVNHX09SREVSRURfVEFHKQotCQlwcmlfdGFnID0gRkNQSU9fSUNNTkRfUFRBX09SREVSRUQ7Ci0KIAkvKiBFbnF1ZXVlIHRoZSBkZXNjcmlwdG9yIGluIHRoZSBDb3B5IFdRICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZuaWMtPndxX2NvcHlfbG9ja1swXSwgaW50cl9mbGFncyk7CiAKQEAgLTM5NCw3ICszODYsOCBAQAogCQkJCQkgaW9fcmVxLT5zZ2xfbGlzdF9wYSwKIAkJCQkJIGlvX3JlcS0+c2Vuc2VfYnVmX3BhLAogCQkJCQkgMCwgLyogc2NzaSBjbWQgcmVmLCBhbHdheXMgMCAqLwotCQkJCQkgcHJpX3RhZywgLyogc2NzaSBwcmkgYW5kIHRhZyAqLworCQkJCQkgRkNQSU9fSUNNTkRfUFRBX1NJTVBMRSwKKwkJCQkJIAkvKiBzY3NpIHByaSBhbmQgdGFnICovCiAJCQkJCSBmbGFncywJLyogY29tbWFuZCBmbGFncyAqLwogCQkJCQkgc2MtPmNtbmQsIHNjLT5jbWRfbGVuLAogCQkJCQkgc2NzaV9idWZmbGVuKHNjKSwKQEAgLTQyOCw4ICs0MjEsMTAgQEAKIAlpbnQgcmV0OwogCXU2NCBjbWRfdHJhY2U7CiAJaW50IHNnX2NvdW50ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgcHRyOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKKwlzcGlubG9ja190ICppb19sb2NrID0gTlVMTDsKIAogCWlmICh1bmxpa2VseShmbmljX2Noa19zdGF0ZV9mbGFnc19sb2NrZWQoZm5pYywgRk5JQ19GTEFHU19JT19CTE9DS0VEKSkpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwpAQCAtNDQzLDYgKzQzOCwxNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlyZGF0YSA9IGxwLT50dC5ycG9ydF9sb29rdXAobHAsIHJwb3J0LT5wb3J0X2lkKTsKKwlpZiAoIXJkYXRhIHx8IChyZGF0YS0+cnBfc3RhdGUgPT0gUlBPUlRfU1RfREVMRVRFKSkgeworCQlGTklDX1NDU0lfREJHKEtFUk5fREVCVUcsIGZuaWMtPmxwb3J0LT5ob3N0LAorCQkJInJldHVybmluZyBJTyBhcyBycG9ydCBpcyByZW1vdmVkXG4iKTsKKwkJYXRvbWljNjRfaW5jKCZmbmljX3N0YXRzLT5taXNjX3N0YXRzLnJwb3J0X25vdF9yZWFkeSk7CisJCXNjLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVDsKKwkJZG9uZShzYyk7CisJCXJldHVybiAwOworCX0KKwogCWlmIChscC0+c3RhdGUgIT0gTFBPUlRfU1RfUkVBRFkgfHwgIShscC0+bGlua191cCkpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCkBAIC01MDUsNiArNTEwLDEzIEBACiAJCX0KIAl9CiAKKwkvKgorCSogV2lsbCBhY3F1aXJlIGxvY2sgZGVmb3JlIHNldHRpbmcgdG8gSU8gaW5pdGlhbGl6ZWQuCisJKi8KKworCWlvX2xvY2sgPSBmbmljX2lvX2xvY2tfaGFzaChmbmljLCBzYyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoaW9fbG9jaywgZmxhZ3MpOworCiAJLyogaW5pdGlhbGl6ZSByZXN0IG9mIGlvX3JlcSAqLwogCWlvX3JlcS0+cG9ydF9pZCA9IHJwb3J0LT5wb3J0X2lkOwogCWlvX3JlcS0+c3RhcnRfdGltZSA9IGppZmZpZXM7CkBAIC01MjEsMTEgKzUzMyw5IEBACiAJCSAqIEluIGNhc2UgYW5vdGhlciB0aHJlYWQgY2FuY2VsbGVkIHRoZSByZXF1ZXN0LAogCQkgKiByZWZldGNoIHRoZSBwb2ludGVyIHVuZGVyIHRoZSBsb2NrLgogCQkgKi8KLQkJc3BpbmxvY2tfdCAqaW9fbG9jayA9IGZuaWNfaW9fbG9ja19oYXNoKGZuaWMsIHNjKTsKIAkJRk5JQ19UUkFDRShmbmljX3F1ZXVlY29tbWFuZCwgc2MtPmRldmljZS0+aG9zdC0+aG9zdF9ubywKIAkJCSAgc2MtPnJlcXVlc3QtPnRhZywgc2MsIDAsIDAsIDAsCiAJCQkgICgoKHU2NClDTURfRkxBR1Moc2MpIDw8IDMyKSB8IENNRF9TVEFURShzYykpKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoaW9fbG9jaywgZmxhZ3MpOwogCQlpb19yZXEgPSAoc3RydWN0IGZuaWNfaW9fcmVxICopQ01EX1NQKHNjKTsKIAkJQ01EX1NQKHNjKSA9IE5VTEw7CiAJCUNNRF9TVEFURShzYykgPSBGTklDX0lPUkVRX0NNRF9DT01QTEVURTsKQEAgLTUzNCw2ICs1NDQsMTAgQEAKIAkJCWZuaWNfcmVsZWFzZV9pb3JlcV9idWYoZm5pYywgaW9fcmVxLCBzYyk7CiAJCQltZW1wb29sX2ZyZWUoaW9fcmVxLCBmbmljLT5pb19yZXFfcG9vbCk7CiAJCX0KKwkJYXRvbWljX2RlYygmZm5pYy0+aW5fZmxpZ2h0KTsKKwkJLyogYWNxdWlyZSBob3N0IGxvY2sgYmVmb3JlIHJldHVybmluZyB0byBTQ1NJICovCisJCXNwaW5fbG9jayhscC0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewogCQlhdG9taWM2NF9pbmMoJmZuaWNfc3RhdHMtPmlvX3N0YXRzLmFjdGl2ZV9pb3MpOwogCQlhdG9taWM2NF9pbmMoJmZuaWNfc3RhdHMtPmlvX3N0YXRzLm51bV9pb3MpOwpAQCAtNTU1LDYgKzU2OSwxMSBAQAogCQkgIHNjLT5yZXF1ZXN0LT50YWcsIHNjLCBpb19yZXEsCiAJCSAgc2dfY291bnQsIGNtZF90cmFjZSwKIAkJICAoKCh1NjQpQ01EX0ZMQUdTKHNjKSA+PiAzMikgfCBDTURfU1RBVEUoc2MpKSk7CisKKwkvKiBpZiBvbmx5IHdlIGlzc3VlZCBJTywgd2lsbCB3ZSBoYXZlIHRoZSBpbyBsb2NrICovCisJaWYgKENNRF9GTEFHUyhzYykgJiBGTklDX0lPX0lOSVRJQUxJWkVEKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvX2xvY2ssIGZsYWdzKTsKKwogCWF0b21pY19kZWMoJmZuaWMtPmluX2ZsaWdodCk7CiAJLyogYWNxdWlyZSBob3N0IGxvY2sgYmVmb3JlIHJldHVybmluZyB0byBTQ1NJICovCiAJc3Bpbl9sb2NrKGxwLT5ob3N0LT5ob3N0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY190cmFjZS5jIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY190cmFjZS5jCmluZGV4IGFjZjFmOTUuLjY1YTliZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfdHJhY2UuYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3RyYWNlLmMKQEAgLTYyNCwxMiArNjI0LDEyIEBACiAJaWYgKGZyYW1lX3R5cGUgPT0gRk5JQ19GQ19SRUNWKSB7CiAJCWV0aF9mY29lX2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IGV0aGhkcikgKwogCQkJCQlzaXplb2Yoc3RydWN0IGZjb2VfaGRyKTsKLQkJZmNfdHJjX2ZyYW1lX2xlbiA9IGZjX3RyY19mcmFtZV9sZW4gKyBldGhfZmNvZV9oZHJfbGVuOwogCQltZW1zZXQoKGNoYXIgKilmY190cmFjZSwgMHhmZiwgZXRoX2Zjb2VfaGRyX2xlbik7CiAJCS8qIENvcHkgdGhlIHJlc3Qgb2YgZGF0YSBmcmFtZSAqLwogCQltZW1jcHkoKGNoYXIgKikoZmNfdHJhY2UgKyBldGhfZmNvZV9oZHJfbGVuKSwgKHZvaWQgKilmcmFtZSwKIAkJbWluX3QodTgsIGZjX3RyY19mcmFtZV9sZW4sCi0JCQkodTgpKEZDX1RSQ19TSVpFX0JZVEVTIC0gRkNfVFJDX0hFQURFUl9TSVpFKSkpOworCQkJKHU4KShGQ19UUkNfU0laRV9CWVRFUyAtIEZDX1RSQ19IRUFERVJfU0laRQorCQkJCQkJLSBldGhfZmNvZV9oZHJfbGVuKSkpOwogCX0gZWxzZSB7CiAJCW1lbWNweSgoY2hhciAqKWZjX3RyYWNlLCAodm9pZCAqKWZyYW1lLAogCQltaW5fdCh1OCwgZmNfdHJjX2ZyYW1lX2xlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYwppbmRleCBiMzMxMjcyLi5mMzU3OTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jCkBAIC0xOCwyMCArMTgsNiBAQAogICoKICAqIEFkZGVkIElTQVBOUCBzdXBwb3J0IGZvciBEVEM0MzYgYWRhcHRlcnMsCiAgKiBUaG9tYXMgU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2gKLSAqCi0gKiBBTFBIQSBSRUxFQVNFIDEuIAotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCiAvKiAKQEAgLTQwLDE0ICsyNiw2IEBACiAgKi8KIAogLyoKLSAqIE9wdGlvbnMgOgotICoKLSAqIFBBUklUWSAtIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcuICBOb3Qgc3VwcG9ydGVkLgotICoKLSAqIFNDU0kyIC0gZW5hYmxlIHN1cHBvcnQgZm9yIFNDU0ktSUkgdGFnZ2VkIHF1ZXVlaW5nLiAgVW50ZXN0ZWQuCi0gKgotICogVVNMRUVQIC0gZW5hYmxlIHN1cHBvcnQgZm9yIGRldmljZXMgdGhhdCBkb24ndCBkaXNjb25uZWN0LiAgVW50ZXN0ZWQuCi0gKgogICogVGhlIGNhcmQgaXMgZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVkIGluIG9uZSBvZiBzZXZlcmFsIHdheXMgOiAKICAqIDEuICBXaXRoIGNvbW1hbmQgbGluZSBvdmVycmlkZXMgLSBOQ1I1MzgwPXBvcnQsaXJxIG1heSBiZSAKICAqICAgICB1c2VkIG9uIHRoZSBMSUxPIGNvbW1hbmQgbGluZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuCkBAIC03OSwyNyArNTcsMjEgQEAKICAqLwogCiAvKiBzZXR0aW5ncyBmb3IgRFRDMzE4MUUgY2FyZCB3aXRoIG9ubHkgTXVzdGVrIHNjYW5uZXIgYXR0YWNoZWQgKi8KLSNkZWZpbmUgVVNMRUVQCiAjZGVmaW5lIFVTTEVFUF9QT0xMCTEKICNkZWZpbmUgVVNMRUVQX1NMRUVQCTIwCiAjZGVmaW5lIFVTTEVFUF9XQUlUTE9ORwk1MDAKIAogI2RlZmluZSBBVVRPUFJPQkVfSVJRCi0jZGVmaW5lIEFVVE9TRU5TRQotCiAKICNpZmRlZiBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzQzQwMAogI2RlZmluZSBOQ1I1M0M0MDBfUFNFVURPX0RNQSAxCiAjZGVmaW5lIFBTRVVET19ETUEKICNkZWZpbmUgTkNSNTNDNDAwCi0jZGVmaW5lIE5DUjUzODBfU1RBVFMKLSN1bmRlZiBOQ1I1MzgwX1NUQVRfTElNSVQKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAiZ19OQ1I1MzgwLmgiCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgpAQCAtMjc3LDcgKzI0OSw3IEBACiAgKglMb2Nrczogbm9uZQogICovCiAKLWludCBfX2luaXQgZ2VuZXJpY19OQ1I1MzgwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKK3N0YXRpYyBpbnQgX19pbml0IGdlbmVyaWNfTkNSNTM4MF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKIHsKIAlzdGF0aWMgaW50IGN1cnJlbnRfb3ZlcnJpZGUgPSAwOwogCWludCBjb3VudDsKQEAgLTMzNSw3ICszMDcsNyBAQAogCQkJaWYgKHBucF9pcnFfdmFsaWQoZGV2LCAwKSkKIAkJCQlvdmVycmlkZXNbY291bnRdLmlycSA9IHBucF9pcnEoZGV2LCAwKTsKIAkJCWVsc2UKLQkJCQlvdmVycmlkZXNbY291bnRdLmlycSA9IFNDU0lfSVJRX05PTkU7CisJCQkJb3ZlcnJpZGVzW2NvdW50XS5pcnEgPSBOT19JUlE7CiAJCQlpZiAocG5wX2RtYV92YWxpZChkZXYsIDApKQogCQkJCW92ZXJyaWRlc1tjb3VudF0uZG1hID0gcG5wX2RtYShkZXYsIDApOwogCQkJZWxzZQpAQCAtNDU1LDI3ICs0MjcsMjIgQEAKIAkJZWxzZQogCQkJaW5zdGFuY2UtPmlycSA9IE5DUjUzODBfcHJvYmVfaXJxKGluc3RhbmNlLCAweGZmZmYpOwogCi0JCWlmIChpbnN0YW5jZS0+aXJxICE9IFNDU0lfSVJRX05PTkUpCisJCS8qIENvbXBhdGliaWxpdHkgd2l0aCBkb2N1bWVudGVkIE5DUjUzODAga2VybmVsIHBhcmFtZXRlcnMgKi8KKwkJaWYgKGluc3RhbmNlLT5pcnEgPT0gMjU1KQorCQkJaW5zdGFuY2UtPmlycSA9IE5PX0lSUTsKKworCQlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCiAJCQlpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgZ2VuZXJpY19OQ1I1MzgwX2ludHIsCiAJCQkJCTAsICJOQ1I1MzgwIiwgaW5zdGFuY2UpKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogSVJRJWQgbm90IGZyZWUsIGludGVycnVwdHMgZGlzYWJsZWRcbiIsIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKLQkJCQlpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKKwkJCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROwogCQkJfQogCi0JCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpIHsKKwkJaWYgKGluc3RhbmNlLT5pcnEgPT0gTk9fSVJRKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQgOiBpbnRlcnJ1cHRzIG5vdCBlbmFibGVkLiBmb3IgYmV0dGVyIGludGVyYWN0aXZlIHBlcmZvcm1hbmNlLFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaSVkIDogcGxlYXNlIGp1bXBlciB0aGUgYm9hcmQgZm9yIGEgZnJlZSBJUlEuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJCX0KIAotCQlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQgOiBhdCAiIFNUUlZBTChOQ1I1MzgwX21hcF9uYW1lKSAiIDB4JXgiLCBpbnN0YW5jZS0+aG9zdF9ubywgKHVuc2lnbmVkIGludCkgaW5zdGFuY2UtPk5DUjUzODBfaW5zdGFuY2VfbmFtZSk7Ci0JCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCi0JCQlwcmludGsoIiBpbnRlcnJ1cHRzIGRpc2FibGVkIik7Ci0JCWVsc2UKLQkJCXByaW50aygiIGlycSAlZCIsIGluc3RhbmNlLT5pcnEpOwotCQlwcmludGsoIiBvcHRpb25zIENBTl9RVUVVRT0lZCAgQ01EX1BFUl9MVU49JWQgcmVsZWFzZT0lZCIsIENBTl9RVUVVRSwgQ01EX1BFUl9MVU4sIEdFTkVSSUNfTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0JCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JCXByaW50aygiXG4iKTsKLQogCQkrK2N1cnJlbnRfb3ZlcnJpZGU7CiAJCSsrY291bnQ7CiAJfQpAQCAtNDgzLDE5ICs0NTAsNiBAQAogfQogCiAvKioKLSAqCWdlbmVyaWNfTkNSNTM4MF9pbmZvCS0JcmVwb3J0aW5nIHN0cmluZwotICoJQGhvc3Q6IE5DUjUzODAgdG8gcmVwb3J0IG9uCi0gKgotICoJUmVwb3J0IGRyaXZlciBpbmZvcm1hdGlvbiBmb3IgdGhlIE5DUjUzODAKLSAqLwotIAkKLWNvbnN0IGNoYXIgKmdlbmVyaWNfTkNSNTM4MF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgc3RyaW5nW10gPSAiR2VuZXJpYyBOQ1I1MzgwLzUzQzQwMCBEcml2ZXIiOwotCXJldHVybiBzdHJpbmc7Ci19Ci0KLS8qKgogICoJZ2VuZXJpY19OQ1I1MzgwX3JlbGVhc2VfcmVzb3VyY2VzCS0JZnJlZSByZXNvdXJjZXMKICAqCUBpbnN0YW5jZTogaG9zdCBhZGFwdGVyIHRvIGNsZWFuIHVwIAogICoKQEAgLTUwNCwxMiArNDU4LDEyIEBACiAgKglMb2Nrczogbm9uZQogICovCiAgCi1pbnQgZ2VuZXJpY19OQ1I1MzgwX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCk7CiAJTkNSNTM4MF9zZXR1cChpbnN0YW5jZSk7CiAJCi0JaWYgKGluc3RhbmNlLT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCiAJCWZyZWVfaXJxKGluc3RhbmNlLT5pcnEsIGluc3RhbmNlKTsKIAlOQ1I1MzgwX2V4aXQoaW5zdGFuY2UpOwogCkBAIC03NDEsMTYzICs2OTUsOSBAQAogIAogI2luY2x1ZGUgIk5DUjUzODAuYyIKIAotI2RlZmluZSBQUklOVFAoeCkgc2VxX3ByaW50ZihtLCB4KQotI2RlZmluZSBBTkRQICwKLQotc3RhdGljIHZvaWQgc3ByaW50X29wY29kZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBvcGNvZGUpCi17Ci0JUFJJTlRQKCIweCUwMnggIiBBTkRQIG9wY29kZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwcmludF9jb21tYW5kKHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgY2hhciAqY29tbWFuZCkKLXsKLQlpbnQgaSwgczsKLQlzcHJpbnRfb3Bjb2RlKG0sIGNvbW1hbmRbMF0pOwotCWZvciAoaSA9IDEsIHMgPSBDT01NQU5EX1NJWkUoY29tbWFuZFswXSk7IGkgPCBzOyArK2kpCi0JCVBSSU5UUCgiJTAyeCAiIEFORFAgY29tbWFuZFtpXSk7Ci0JUFJJTlRQKCJcbiIpOwotfQotCi0vKioKLSAqCXNwcmludGZfU2NzaV9DbW5kCS0JcHJpbnQgYSBzY3NpIGNvbW1hbmQKLSAqCUBtOiBzZXFfZmlsIHRvIHByaW50IGludG8KLSAqCUBjbWQ6IFNDU0kgY29tbWFuZCBibG9jawotICoJCi0gKglQcmludCBvdXQgdGhlIHRhcmdldCBhbmQgY29tbWFuZCBkYXRhIGluIGhleAotICovCi0KLXN0YXRpYyB2b2lkIHNwcmludF9TY3NpX0NtbmQoc3RydWN0IHNlcV9maWxlICptLCBTY3NpX0NtbmQgKiBjbWQpCi17Ci0JUFJJTlRQKCJob3N0IG51bWJlciAlZCBkZXN0aW5hdGlvbiB0YXJnZXQgJWQsIGx1biAlbGx1XG4iIEFORFAgY21kLT5kZXZpY2UtPmhvc3QtPmhvc3Rfbm8gQU5EUCBjbWQtPmRldmljZS0+aWQgQU5EUCBjbWQtPmRldmljZS0+bHVuKTsKLQlQUklOVFAoIiAgICAgICAgY29tbWFuZCA9ICIpOwotCXNwcmludF9jb21tYW5kKG0sIGNtZC0+Y21uZCk7Ci19Ci0KLS8qKgotICoJZ2VuZXJpY19OQ1I1MzgwX3Byb2NfaW5mbwktCS9wcm9jIGZvciBOQ1I1MzgwIGRyaXZlcgotICoJQGJ1ZmZlcjogYnVmZmVyIHRvIHByaW50IGludG8KLSAqCUBzdGFydDogc3RhcnQgcG9zaXRpb24KLSAqCUBvZmZzZXQ6IG9mZnNldCBpbnRvIGJ1ZmZlcgotICoJQGxlbjogbGVuZ3RoCi0gKglAaG9zdG5vOiBpbnN0YW5jZSB0byBhZmZlY3QKLSAqCUBpbm91dDogcmVhZC93cml0ZQotICoKLSAqCVByb3ZpZGUgdGhlIHByb2NmcyBpbmZvcm1hdGlvbiBmb3IgdGhlIDUzODAgY29udHJvbGxlci4gV2UgZmlsbAotICoJdGhpcyB3aXRoIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW5jbHVkaW5nIHRoZSBjb21tYW5kcwotICoJYmVpbmcgZXhlY3V0ZWQsIGRpc2Nvbm5lY3RlZCBjb21tYW5kIHF1ZXVlIGFuZCB0aGUgc3RhdGlzdGljYWwKLSAqCWRhdGEKLSAqCi0gKglMb2NrczogZ2xvYmFsIGNsaS9sb2NrIGZvciBxdWV1ZSB3YWxrCi0gKi8KLSAKLXN0YXRpYyBpbnQgZ2VuZXJpY19OQ1I1MzgwX3Nob3dfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfcHRyKQotewotCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciBzdGF0dXM7Ci0JaW50IGk7Ci0JU2NzaV9DbW5kICpwdHI7Ci0Jc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhOwotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldjsKLSNlbmRpZgotCi0JTkNSNTM4MF9zZXR1cChzY3NpX3B0cik7Ci0JaG9zdGRhdGEgPSAoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgc2NzaV9wdHItPmhvc3RkYXRhOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2NzaV9wdHItPmhvc3RfbG9jaywgZmxhZ3MpOwotCVBSSU5UUCgiU0NTSSBob3N0IG51bWJlciAlZCA6ICVzXG4iIEFORFAgc2NzaV9wdHItPmhvc3Rfbm8gQU5EUCBzY3NpX3B0ci0+aG9zdHQtPm5hbWUpOwotCVBSSU5UUCgiR2VuZXJpYyBOQ1I1MzgwIGRyaXZlciB2ZXJzaW9uICVkXG4iIEFORFAgR0VORVJJQ19OQ1I1MzgwX1BVQkxJQ19SRUxFQVNFKTsKLQlQUklOVFAoIk5DUjUzODAgY29yZSB2ZXJzaW9uICVkXG4iIEFORFAgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0jaWZkZWYgTkNSNTNDNDAwCi0JUFJJTlRQKCJOQ1I1M0M0MDAgZXh0ZW5zaW9uIHZlcnNpb24gJWRcbiIgQU5EUCBOQ1I1M0M0MDBfUFVCTElDX1JFTEVBU0UpOwotCVBSSU5UUCgiTkNSNTNDNDAwIGNhcmQlcyBkZXRlY3RlZFxuIiBBTkRQKCgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgc2NzaV9wdHItPmhvc3RkYXRhKS0+ZmxhZ3MgJiBGTEFHX05DUjUzQzQwMCkgPyAiIiA6ICIgbm90Iik7Ci0jIGlmIE5DUjUzQzQwMF9QU0VVRE9fRE1BCi0JUFJJTlRQKCJOQ1I1M0M0MDAgcHNldWRvIERNQSB1c2VkXG4iKTsKLSMgZW5kaWYKLSNlbHNlCi0JUFJJTlRQKCJOTyBOQ1I1M0M0MDAgZHJpdmVyIGV4dGVuc2lvbnNcbiIpOwotI2VuZGlmCi0JUFJJTlRQKCJVc2luZyAlcyBtYXBwaW5nIGF0ICVzIDB4JWx4LCAiIEFORFAgU1RSVkFMKE5DUjUzODBfbWFwX2NvbmZpZykgQU5EUCBTVFJWQUwoTkNSNTM4MF9tYXBfbmFtZSkgQU5EUCBzY3NpX3B0ci0+TkNSNTM4MF9pbnN0YW5jZV9uYW1lKTsKLQlpZiAoc2NzaV9wdHItPmlycSA9PSBTQ1NJX0lSUV9OT05FKQotCQlQUklOVFAoIm5vIGludGVycnVwdFxuIik7Ci0JZWxzZQotCQlQUklOVFAoIm9uIGludGVycnVwdCAlZFxuIiBBTkRQIHNjc2lfcHRyLT5pcnEpOwotCi0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCWlmIChob3N0ZGF0YS0+Y29ubmVjdGVkIHx8IGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSB8fCBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKQotCQlQUklOVFAoIlRoZXJlIGFyZSBjb21tYW5kcyBwZW5kaW5nLCB0cmFuc2ZlciByYXRlcyBtYXkgYmUgY3J1ZFxuIik7Ci0JaWYgKGhvc3RkYXRhLT5wZW5kaW5ncikKLQkJUFJJTlRQKCIgICVkIHBlbmRpbmcgcmVhZHMiIEFORFAgaG9zdGRhdGEtPnBlbmRpbmdyKTsKLQlpZiAoaG9zdGRhdGEtPnBlbmRpbmd3KQotCQlQUklOVFAoIiAgJWQgcGVuZGluZyB3cml0ZXMiIEFORFAgaG9zdGRhdGEtPnBlbmRpbmd3KTsKLQlpZiAoaG9zdGRhdGEtPnBlbmRpbmdyIHx8IGhvc3RkYXRhLT5wZW5kaW5ndykKLQkJUFJJTlRQKCJcbiIpOwotCXNob3N0X2Zvcl9lYWNoX2RldmljZShkZXYsIHNjc2lfcHRyKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYnIgPSBob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtkZXYtPmlkXTsKLQkJdW5zaWduZWQgbG9uZyBidyA9IGhvc3RkYXRhLT5ieXRlc193cml0ZVtkZXYtPmlkXTsKLQkJbG9uZyB0ciA9IGhvc3RkYXRhLT50aW1lX3JlYWRbZGV2LT5pZF0gLyBIWjsKLQkJbG9uZyB0dyA9IGhvc3RkYXRhLT50aW1lX3dyaXRlW2Rldi0+aWRdIC8gSFo7Ci0KLQkJUFJJTlRQKCIgIFQ6JWQgJXMgIiBBTkRQIGRldi0+aWQgQU5EUCBzY3NpX2RldmljZV90eXBlKGRldi0+dHlwZSkpOwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQkJaWYgKGRldi0+dmVuZG9yW2ldID49IDB4MjApCi0JCQkJc2VxX3B1dGMobSwgZGV2LT52ZW5kb3JbaV0pOwotCQlzZXFfcHV0YyhtLCAnICcpOwotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJCWlmIChkZXYtPm1vZGVsW2ldID49IDB4MjApCi0JCQkJc2VxX3B1dGMobSwgZGV2LT5tb2RlbFtpXSk7Ci0JCXNlcV9wdXRjKG0sICcgJyk7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQlpZiAoZGV2LT5yZXZbaV0gPj0gMHgyMCkKLQkJCQlzZXFfcHV0YyhtLCBkZXYtPnJldltpXSk7Ci0JCXNlcV9wdXRjKG0sICcgJyk7Ci0KLQkJUFJJTlRQKCJcbiUxMGxkIGtiIHJlYWQgICAgaW4gJTVsZCBzZWNzIiBBTkRQIGJyIC8gMTAyNCBBTkRQIHRyKTsKLQkJaWYgKHRyKQotCQkJUFJJTlRQKCIgQCAlNWxkIGJwcyIgQU5EUCBiciAvIHRyKTsKLQotCQlQUklOVFAoIlxuJTEwbGQga2Igd3JpdHRlbiBpbiAlNWxkIHNlY3MiIEFORFAgYncgLyAxMDI0IEFORFAgdHcpOwotCQlpZiAodHcpCi0JCQlQUklOVFAoIiBAICU1bGQgYnBzIiBBTkRQIGJ3IC8gdHcpOwotCQlQUklOVFAoIlxuIik7Ci0JfQotI2VuZGlmCi0KLQlzdGF0dXMgPSBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRyk7Ci0JaWYgKCEoc3RhdHVzICYgU1JfUkVRKSkKLQkJUFJJTlRQKCJSRVEgbm90IGFzc2VydGVkLCBwaGFzZSB1bmtub3duLlxuIik7Ci0JZWxzZSB7Ci0JCWZvciAoaSA9IDA7IChwaGFzZXNbaV0udmFsdWUgIT0gUEhBU0VfVU5LTk9XTikgJiYgKHBoYXNlc1tpXS52YWx1ZSAhPSAoc3RhdHVzICYgUEhBU0VfTUFTSykpOyArK2kpOwotCQlQUklOVFAoIlBoYXNlICVzXG4iIEFORFAgcGhhc2VzW2ldLm5hbWUpOwotCX0KLQotCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCQlQUklOVFAoIk5vIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZFxuIik7Ci0JfSBlbHNlIHsKLQkJc3ByaW50X1Njc2lfQ21uZChtLCAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQpOwotCX0KLQotCVBSSU5UUCgiaXNzdWVfcXVldWVcbiIpOwotCi0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSAoU2NzaV9DbW5kICopIHB0ci0+aG9zdF9zY3JpYmJsZSkKLQkJc3ByaW50X1Njc2lfQ21uZChtLCBwdHIpOwotCi0JUFJJTlRQKCJkaXNjb25uZWN0ZWRfcXVldWVcbiIpOwotCi0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsgcHRyID0gKFNjc2lfQ21uZCAqKSBwdHItPmhvc3Rfc2NyaWJibGUpCi0JCXNwcmludF9TY3NpX0NtbmQobSwgcHRyKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NzaV9wdHItPmhvc3RfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0jdW5kZWYgUFJJTlRQCi0jdW5kZWYgQU5EUAotCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnNob3dfaW5mbyAgICAgIAk9IGdlbmVyaWNfTkNSNTM4MF9zaG93X2luZm8sCi0JLm5hbWUgICAgICAgICAgIAk9ICJHZW5lcmljIE5DUjUzODAvTkNSNTNDNDAwIFNjc2kgRHJpdmVyIiwKKwkubmFtZSAgICAgICAgICAgCT0gIkdlbmVyaWMgTkNSNTM4MC9OQ1I1M0M0MDAgU0NTSSIsCiAJLmRldGVjdCAgICAgICAgIAk9IGdlbmVyaWNfTkNSNTM4MF9kZXRlY3QsCiAJLnJlbGVhc2UgICAgICAgIAk9IGdlbmVyaWNfTkNSNTM4MF9yZWxlYXNlX3Jlc291cmNlcywKIAkuaW5mbyAgICAgICAgICAgCT0gZ2VuZXJpY19OQ1I1MzgwX2luZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmggYi9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmgKaW5kZXggNzAzYWRmNy4uYmVhMWEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuaApAQCAtOSwyOCArOSwxMSBAQAogICoKICAqIE5DUjUzQzQwMCBleHRlbnNpb25zIChjKSAxOTk0LDE5OTUsMTk5NiwgS2V2aW4gTGVudGluCiAgKiAgICBLLkxlbnRpbkBjcy5tb25hc2guZWR1LmF1Ci0gKgotICogQUxQSEEgUkVMRUFTRSAxLiAKLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQgCi0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0CiAgKi8KIAogI2lmbmRlZiBHRU5FUklDX05DUjUzODBfSAogI2RlZmluZSBHRU5FUklDX05DUjUzODBfSAogCi0KLSNkZWZpbmUgR0VORVJJQ19OQ1I1MzgwX1BVQkxJQ19SRUxFQVNFIDEKLQogI2lmZGVmIE5DUjUzQzQwMAogI2RlZmluZSBCSU9TUEFSQU0KICNkZWZpbmUgTkNSNTM4MF9CSU9TUEFSQU0gZ2VuZXJpY19OQ1I1MzgwX2Jpb3NwYXJhbQpAQCAtMzksMTIgKzIyLDYgQEAKICNlbmRpZgogCiAjaWZuZGVmIEFTTQotc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfYWJvcnQoU2NzaV9DbW5kICopOwotc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7Ci1zdGF0aWMgaW50IGdlbmVyaWNfTkNSNTM4MF9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IGdlbmVyaWNfTkNSNTM4MF9idXNfcmVzZXQoU2NzaV9DbW5kICopOwotc3RhdGljIGNvbnN0IGNoYXIqIGdlbmVyaWNfTkNSNTM4MF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKik7CiAKICNpZm5kZWYgQ01EX1BFUl9MVU4KICNkZWZpbmUgQ01EX1BFUl9MVU4gMgpAQCAtMTE4LDcgKzk1LDggQEAKICNkZWZpbmUgTkNSNTM4MF9idXNfcmVzZXQgZ2VuZXJpY19OQ1I1MzgwX2J1c19yZXNldAogI2RlZmluZSBOQ1I1MzgwX3ByZWFkIGdlbmVyaWNfTkNSNTM4MF9wcmVhZAogI2RlZmluZSBOQ1I1MzgwX3B3cml0ZSBnZW5lcmljX05DUjUzODBfcHdyaXRlCi0jZGVmaW5lIE5DUjUzODBfcHJvY19pbmZvIG5vdHlldF9nZW5lcmljX3Byb2NfaW5mbworI2RlZmluZSBOQ1I1MzgwX2luZm8gZ2VuZXJpY19OQ1I1MzgwX2luZm8KKyNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8gZ2VuZXJpY19OQ1I1MzgwX3Nob3dfaW5mbwogCiAjZGVmaW5lIEJPQVJEX05DUjUzODAJMAogI2RlZmluZSBCT0FSRF9OQ1I1M0M0MDAJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGguYyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKaW5kZXggMGYxYWUxMy4uNzFlMTM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dkdGguYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCkBAIC0yMTU5LDcgKzIxNTksNyBAQAogICAgICAgICAgICAgICBjYXNlIFZFUklGWToKICAgICAgICAgICAgICAgY2FzZSBTVEFSVF9TVE9QOgogICAgICAgICAgICAgICBjYXNlIE1PREVfU0VOU0U6Ci0gICAgICAgICAgICAgIGNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisgICAgICAgICAgICAgIGNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAgICAgICAgICAgICAgICAgVFJBQ0UoKCJjYWNoZSBjbWQgJXgvJXgvJXgvJXgvJXgvJXhcbiIsbnNjcC0+Y21uZFswXSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNjcC0+Y21uZFsxXSxuc2NwLT5jbW5kWzJdLG5zY3AtPmNtbmRbM10sCiAgICAgICAgICAgICAgICAgICAgICAgIG5zY3AtPmNtbmRbNF0sbnNjcC0+Y21uZFs1XSkpOwpAQCAtMjM5MSw3ICsyMzkxLDcgQEAKICAgICAgICAgZ2R0aF9jb3B5X2ludGVybmFsX2RhdGEoaGEsIHNjcCwgKGNoYXIqKSZyZGMsIHNpemVvZihnZHRoX3JkY2FwX2RhdGEpKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICAgIGNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisgICAgICBjYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogICAgICAgICBpZiAoKHNjcC0+Y21uZFsxXSAmIDB4MWYpID09IFNBSV9SRUFEX0NBUEFDSVRZXzE2ICYmCiAgICAgICAgICAgICAoaGEtPmNhY2hlX2ZlYXQgJiBHRFRfNjRCSVQpKSB7CiAgICAgICAgICAgICBnZHRoX3JkY2FwMTZfZGF0YSByZGMxNjsKQEAgLTQ2NjEsNyArNDY2MSw2IEBACiAvKiBjb25maWd1cmUgbHVuICovCiBzdGF0aWMgaW50IGdkdGhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLSAgICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBzZGV2LT5ob3N0LT5jbWRfcGVyX2x1bik7CiAgICAgc2Rldi0+c2tpcF9tc19wYWdlXzNmID0gMTsKICAgICBzZGV2LT5za2lwX21zX3BhZ2VfOCA9IDE7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IDZkZTgwZTMuLjhiYjE3M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC00MTgsNyArNDE4LDYgQEAKIAlzaG9zdC0+Y21kX3Blcl9sdW4gPSBzaHQtPmNtZF9wZXJfbHVuOwogCXNob3N0LT51bmNoZWNrZWRfaXNhX2RtYSA9IHNodC0+dW5jaGVja2VkX2lzYV9kbWE7CiAJc2hvc3QtPnVzZV9jbHVzdGVyaW5nID0gc2h0LT51c2VfY2x1c3RlcmluZzsKLQlzaG9zdC0+b3JkZXJlZF90YWcgPSBzaHQtPm9yZGVyZWRfdGFnOwogCXNob3N0LT5ub193cml0ZV9zYW1lID0gc2h0LT5ub193cml0ZV9zYW1lOwogCiAJaWYgKHNob3N0X2VoX2RlYWRsaW5lID09IC0xIHx8ICFzaHQtPmVoX2hvc3RfcmVzZXRfaGFuZGxlcikKQEAgLTQ4NSw4ICs0ODQsOCBAQAogCQkJCQkgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLAogCQkJCQkgICAxLCBzaG9zdC0+aG9zdF9ubyk7CiAJaWYgKCFzaG9zdC0+dG1mX3dvcmtfcSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IGZhaWxlZCB0byBjcmVhdGUgdG1mIHdvcmtxXG4iLAotCQkgICAgICAgc2hvc3QtPmhvc3Rfbm8pOworCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBzaG9zdCwKKwkJCSAgICAgImZhaWxlZCB0byBjcmVhdGUgdG1mIHdvcmtxXG4iKTsKIAkJZ290byBmYWlsX2t0aHJlYWQ7CiAJfQogCXNjc2lfcHJvY19ob3N0ZGlyX2FkZChzaG9zdC0+aG9zdHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2EuYyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKaW5kZXggY2VmNWQ0OS4uNmJiNDYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2EuYworKysgYi9kcml2ZXJzL3Njc2kvaHBzYS5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS1kZWZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSAiaHBzYV9jbWQuaCIKQEAgLTEwMyw3ICsxMDQsNiBAQAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTSCwgICAgIDB4MTAzQywgMHgxOTIyfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0gsICAgICAweDEwM0MsIDB4MTkyM30sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NILCAgICAgMHgxMDNDLCAweDE5MjR9LAotCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTSCwgICAgIDB4MTAzQywgMHgxOTI1fSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0gsICAgICAweDEwM0MsIDB4MTkyNn0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NILCAgICAgMHgxMDNDLCAweDE5Mjh9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTSCwgICAgIDB4MTAzQywgMHgxOTI5fSwKQEAgLTE0OSw2ICsxNDksNyBAQAogCXsweDMyNDkxMDNDLCAiU21hcnQgQXJyYXkgUDgxMiIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjRBMTAzQywgIlNtYXJ0IEFycmF5IFA3MTJtIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNEIxMDNDLCAiU21hcnQgQXJyYXkgUDcxMW0iLCAmU0E1X2FjY2Vzc30sCisJezB4MzIzMzEwM0MsICJIUCBTdG9yYWdlV29ya3MgMTIxMG0iLCAmU0E1X2FjY2Vzc30sIC8qIGFsaWFzIG9mIDMzM2YgKi8KIAl7MHgzMzUwMTAzQywgIlNtYXJ0IEFycmF5IFAyMjIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzM1MTEwM0MsICJTbWFydCBBcnJheSBQNDIwIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMzNTIxMDNDLCAiU21hcnQgQXJyYXkgUDQyMSIsICZTQTVfYWNjZXNzfSwKQEAgLTE5MywxMiArMTk0LDEzIEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHJfaW50eChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGlycXJldHVybl90IGRvX2hwc2FfaW50cl9tc2koaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyBpbnQgaHBzYV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKTsKK3N0YXRpYyBpbnQgaHBzYV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBzdGF0aWMgdm9pZCBsb2NrX2FuZF9zdGFydF9pbyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIHN0YXRpYyB2b2lkIHN0YXJ0X2lvKHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19DT01QQVQKLXN0YXRpYyBpbnQgaHBzYV9jb21wYXRfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLAorCXZvaWQgX191c2VyICphcmcpOwogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGNtZF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CkBAIC0yMTQsOCArMjE2LDYgQEAKIHN0YXRpYyB2b2lkIGhwc2Ffc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICopOwogc3RhdGljIGludCBocHNhX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2gsCiAJdW5zaWduZWQgbG9uZyBlbGFwc2VkX3RpbWUpOwotc3RhdGljIGludCBocHNhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JaW50IHFkZXB0aCwgaW50IHJlYXNvbik7CiAKIHN0YXRpYyBpbnQgaHBzYV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kKTsKIHN0YXRpYyBpbnQgaHBzYV9laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2ljbWQpOwpAQCAtMjc0LDEyICsyNzQsMTIgQEAKIAkJCSJkZXRlY3RlZCwgY29tbWFuZCByZXRyaWVkXG4iLCBoLT5jdGxyKTsKIAkJYnJlYWs7CiAJY2FzZSBMVU5fRkFJTEVEOgotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCBIUFNBICIlZDogTFVOIGZhaWx1cmUgIgotCQkJImRldGVjdGVkLCBhY3Rpb24gcmVxdWlyZWRcbiIsIGgtPmN0bHIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJSFBTQSAiJWQ6IExVTiBmYWlsdXJlIGRldGVjdGVkXG4iLCBoLT5jdGxyKTsKIAkJYnJlYWs7CiAJY2FzZSBSRVBPUlRfTFVOU19DSEFOR0VEOgotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCBIUFNBICIlZDogcmVwb3J0IExVTiBkYXRhICIKLQkJCSJjaGFuZ2VkLCBhY3Rpb24gcmVxdWlyZWRcbiIsIGgtPmN0bHIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJSFBTQSAiJWQ6IHJlcG9ydCBMVU4gZGF0YSBjaGFuZ2VkXG4iLCBoLT5jdGxyKTsKIAkvKgogCSAqIE5vdGU6IHRoaXMgUkVQT1JUX0xVTlNfQ0hBTkdFRCBjb25kaXRpb24gb25seSBvY2N1cnMgb24gdGhlIGV4dGVybmFsCiAJICogdGFyZ2V0IChhcnJheSkgZGV2aWNlcy4KQEAgLTM5Miw3ICszOTIsOCBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gc2hvc3RfdG9faGJhKHNob3N0KTsKIAotCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJWRcbiIsIGgtPmNvbW1hbmRzX291dHN0YW5kaW5nKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiVkXG4iLAorCQkJYXRvbWljX3JlYWQoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGhvc3Rfc2hvd190cmFuc3BvcnRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC02NzAsNyArNjcxLDcgQEAKIAkucXVldWVjb21tYW5kCQk9IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kLAogCS5zY2FuX3N0YXJ0CQk9IGhwc2Ffc2Nhbl9zdGFydCwKIAkuc2Nhbl9maW5pc2hlZAkJPSBocHNhX3NjYW5fZmluaXNoZWQsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGhwc2FfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkudGhpc19pZAkJPSAtMSwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLmVoX2Fib3J0X2hhbmRsZXIJPSBocHNhX2VoX2Fib3J0X2hhbmRsZXIsCkBAIC02OTgsNyArNjk5LDYgQEAKIHsKIAl1MzIgYTsKIAlzdHJ1Y3QgcmVwbHlfcXVldWVfYnVmZmVyICpycSA9ICZoLT5yZXBseV9xdWV1ZVtxXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGgtPnRyYW5zTWV0aG9kICYgQ0ZHVEJMX1RyYW5zX2lvX2FjY2VsMSkKIAkJcmV0dXJuIGgtPmFjY2Vzcy5jb21tYW5kX2NvbXBsZXRlZChoLCBxKTsKQEAgLTcwOSw5ICs3MDksNyBAQAogCWlmICgocnEtPmhlYWRbcnEtPmN1cnJlbnRfZW50cnldICYgMSkgPT0gcnEtPndyYXBhcm91bmQpIHsKIAkJYSA9IHJxLT5oZWFkW3JxLT5jdXJyZW50X2VudHJ5XTsKIAkJcnEtPmN1cnJlbnRfZW50cnkrKzsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmctLTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCQlhdG9taWNfZGVjKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAJfSBlbHNlIHsKIAkJYSA9IEZJRk9fRU1QVFk7CiAJfQpAQCAtMTUwMCwyMiArMTQ5OCwyMiBAQAogewogCXN0cnVjdCBTR0Rlc2NyaXB0b3IgKmNoYWluX3NnLCAqY2hhaW5fYmxvY2s7CiAJdTY0IHRlbXA2NDsKKwl1MzIgY2hhaW5fbGVuOwogCiAJY2hhaW5fc2cgPSAmYy0+U0dbaC0+bWF4X2NtZF9zZ19lbnRyaWVzIC0gMV07CiAJY2hhaW5fYmxvY2sgPSBoLT5jbWRfc2dfbGlzdFtjLT5jbWRpbmRleF07Ci0JY2hhaW5fc2ctPkV4dCA9IEhQU0FfU0dfQ0hBSU47Ci0JY2hhaW5fc2ctPkxlbiA9IHNpemVvZigqY2hhaW5fc2cpICoKKwljaGFpbl9zZy0+RXh0ID0gY3B1X3RvX2xlMzIoSFBTQV9TR19DSEFJTik7CisJY2hhaW5fbGVuID0gc2l6ZW9mKCpjaGFpbl9zZykgKgogCQkoYy0+SGVhZGVyLlNHVG90YWwgLSBoLT5tYXhfY21kX3NnX2VudHJpZXMpOwotCXRlbXA2NCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGNoYWluX2Jsb2NrLCBjaGFpbl9zZy0+TGVuLAorCWNoYWluX3NnLT5MZW4gPSBjcHVfdG9fbGUzMihjaGFpbl9sZW4pOworCXRlbXA2NCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGNoYWluX2Jsb2NrLCBjaGFpbl9sZW4sCiAJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZoLT5wZGV2LT5kZXYsIHRlbXA2NCkpIHsKIAkJLyogcHJldmVudCBzdWJzZXF1ZW50IHVubWFwcGluZyAqLwotCQljaGFpbl9zZy0+QWRkci5sb3dlciA9IDA7Ci0JCWNoYWluX3NnLT5BZGRyLnVwcGVyID0gMDsKKwkJY2hhaW5fc2ctPkFkZHIgPSBjcHVfdG9fbGU2NCgwKTsKIAkJcmV0dXJuIC0xOwogCX0KLQljaGFpbl9zZy0+QWRkci5sb3dlciA9ICh1MzIpICh0ZW1wNjQgJiAweDBGRkZGRkZGRlVMTCk7Ci0JY2hhaW5fc2ctPkFkZHIudXBwZXIgPSAodTMyKSAoKHRlbXA2NCA+PiAzMikgJiAweDBGRkZGRkZGRlVMTCk7CisJY2hhaW5fc2ctPkFkZHIgPSBjcHVfdG9fbGU2NCh0ZW1wNjQpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTIzLDE1ICsxNTIxLDEzIEBACiAJc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewogCXN0cnVjdCBTR0Rlc2NyaXB0b3IgKmNoYWluX3NnOwotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CiAKLQlpZiAoYy0+SGVhZGVyLlNHVG90YWwgPD0gaC0+bWF4X2NtZF9zZ19lbnRyaWVzKQorCWlmIChsZTE2X3RvX2NwdShjLT5IZWFkZXIuU0dUb3RhbCkgPD0gaC0+bWF4X2NtZF9zZ19lbnRyaWVzKQogCQlyZXR1cm47CiAKIAljaGFpbl9zZyA9ICZjLT5TR1toLT5tYXhfY21kX3NnX2VudHJpZXMgLSAxXTsKLQl0ZW1wNjQudmFsMzIubG93ZXIgPSBjaGFpbl9zZy0+QWRkci5sb3dlcjsKLQl0ZW1wNjQudmFsMzIudXBwZXIgPSBjaGFpbl9zZy0+QWRkci51cHBlcjsKLQlwY2lfdW5tYXBfc2luZ2xlKGgtPnBkZXYsIHRlbXA2NC52YWwsIGNoYWluX3NnLT5MZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCXBjaV91bm1hcF9zaW5nbGUoaC0+cGRldiwgbGU2NF90b19jcHUoY2hhaW5fc2ctPkFkZHIpLAorCQkJbGUzMl90b19jcHUoY2hhaW5fc2ctPkxlbiksIFBDSV9ETUFfVE9ERVZJQ0UpOwogfQogCiAKQEAgLTE3MzIsOCArMTcyOCw3IEBACiAJCXN0cnVjdCBpb19hY2NlbDFfY21kICpjID0gJmgtPmlvYWNjZWxfY21kX3Bvb2xbY3AtPmNtZGluZGV4XTsKIAkJY3AtPkhlYWRlci5TR0xpc3QgPSBjcC0+SGVhZGVyLlNHVG90YWwgPSBzY3NpX3NnX2NvdW50KGNtZCk7CiAJCWNwLT5SZXF1ZXN0LkNEQkxlbiA9IGMtPmlvX2ZsYWdzICYgSU9BQ0NFTDFfSU9GTEFHU19DREJMRU5fTUFTSzsKLQkJY3AtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5UYWcubG93ZXI7Ci0JCWNwLT5IZWFkZXIuVGFnLnVwcGVyID0gYy0+VGFnLnVwcGVyOworCQljcC0+SGVhZGVyLnRhZyA9IGMtPnRhZzsKIAkJbWVtY3B5KGNwLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgYy0+Q0lTU19MVU4sIDgpOwogCQltZW1jcHkoY3AtPlJlcXVlc3QuQ0RCLCBjLT5DREIsIGNwLT5SZXF1ZXN0LkNEQkxlbik7CiAKQEAgLTE3NjMsNzIgKzE3NTgsMTMgQEAKIAkJCS8qIEdldCBhZGRpdGlvbiBzZW5zZSBjb2RlIHF1YWxpZmllciAqLwogCQkJYXNjcSA9IGVpLT5TZW5zZUluZm9bMTNdOwogCQl9Ci0KIAkJaWYgKGVpLT5TY3NpU3RhdHVzID09IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikgewotCQkJaWYgKGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihoLCBjcCkpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoc2Vuc2Vfa2V5ID09IElMTEVHQUxfUkVRVUVTVCkgewotCQkJCS8qCi0JCQkJICogU0NTSSBSRVBPUlRfTFVOUyBpcyBjb21tb25seSB1bnN1cHBvcnRlZCBvbgotCQkJCSAqIFNtYXJ0IEFycmF5LiAgU3VwcHJlc3Mgbm9pc3kgY29tcGxhaW50LgotCQkJCSAqLwotCQkJCWlmIChjcC0+UmVxdWVzdC5DREJbMF0gPT0gUkVQT1JUX0xVTlMpCi0JCQkJCWJyZWFrOwotCi0JCQkJLyogSWYgQVNDL0FTQ1EgaW5kaWNhdGUgTG9naWNhbCBVbml0Ci0JCQkJICogTm90IFN1cHBvcnRlZCBjb25kaXRpb24sCi0JCQkJICovCi0JCQkJaWYgKChhc2MgPT0gMHgyNSkgJiYgKGFzY3EgPT0gMHgwKSkgewotCQkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgotCQkJCQkJImhhcyBjaGVjayBjb25kaXRpb25cbiIsIGNwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoc2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSkgewotCQkJCS8qIElmIFNlbnNlIGlzIE5vdCBSZWFkeSwgTG9naWNhbCBVbml0Ci0JCQkJICogTm90IHJlYWR5LCBNYW51YWwgSW50ZXJ2ZW50aW9uCi0JCQkJICogcmVxdWlyZWQKLQkJCQkgKi8KLQkJCQlpZiAoKGFzYyA9PSAweDA0KSAmJiAoYXNjcSA9PSAweDAzKSkgewotCQkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgotCQkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IHVuaXQgIgotCQkJCQkJIm5vdCByZWFkeSwgbWFudWFsICIKLQkJCQkJCSJpbnRlcnZlbnRpb24gcmVxdWlyZWRcbiIsIGNwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQogCQkJaWYgKHNlbnNlX2tleSA9PSBBQk9SVEVEX0NPTU1BTkQpIHsKLQkJCQkvKiBBYm9ydGVkIGNvbW1hbmQgaXMgcmV0cnlhYmxlICovCi0JCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwICIKLQkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IGFib3J0ZWQgY29tbWFuZDogIgotCQkJCQkiQVNDOiAweCV4LCBBU0NROiAweCV4XG4iLAotCQkJCQljcCwgYXNjLCBhc2NxKTsKIAkJCQljbWQtPnJlc3VsdCB8PSBESURfU09GVF9FUlJPUiA8PCAxNjsKIAkJCQlicmVhazsKIAkJCX0KLQkJCS8qIE11c3QgYmUgc29tZSBvdGhlciB0eXBlIG9mIGNoZWNrIGNvbmRpdGlvbiAqLwotCQkJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiY3AgJXAgaGFzIGNoZWNrIGNvbmRpdGlvbjogIgotCQkJCQkidW5rbm93biB0eXBlOiAiCi0JCQkJCSJTZW5zZTogMHgleCwgQVNDOiAweCV4LCBBU0NROiAweCV4LCAiCi0JCQkJCSJSZXR1cm5pbmcgcmVzdWx0OiAweCV4LCAiCi0JCQkJCSJjbWQ9WyUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCi0JCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCi0JCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhdXG4iLAotCQkJCQljcCwgc2Vuc2Vfa2V5LCBhc2MsIGFzY3EsCi0JCQkJCWNtZC0+cmVzdWx0LAotCQkJCQljbWQtPmNtbmRbMF0sIGNtZC0+Y21uZFsxXSwKLQkJCQkJY21kLT5jbW5kWzJdLCBjbWQtPmNtbmRbM10sCi0JCQkJCWNtZC0+Y21uZFs0XSwgY21kLT5jbW5kWzVdLAotCQkJCQljbWQtPmNtbmRbNl0sIGNtZC0+Y21uZFs3XSwKLQkJCQkJY21kLT5jbW5kWzhdLCBjbWQtPmNtbmRbOV0sCi0JCQkJCWNtZC0+Y21uZFsxMF0sIGNtZC0+Y21uZFsxMV0sCi0JCQkJCWNtZC0+Y21uZFsxMl0sIGNtZC0+Y21uZFsxM10sCi0JCQkJCWNtZC0+Y21uZFsxNF0sIGNtZC0+Y21uZFsxNV0pOwogCQkJYnJlYWs7CiAJCX0KLQotCiAJCS8qIFByb2JsZW0gd2FzIG5vdCBhIGNoZWNrIGNvbmRpdGlvbgogCQkgKiBQYXNzIGl0IHVwIHRvIHRoZSB1cHBlciBsYXllcnMuLi4KIAkJICovCkBAIC0xOTM0LDE0ICsxODcwLDExIEBACiAJc3RydWN0IENvbW1hbmRMaXN0ICpjLCBpbnQgc2dfdXNlZCwgaW50IGRhdGFfZGlyZWN0aW9uKQogewogCWludCBpOwotCXVuaW9uIHU2NGJpdCBhZGRyNjQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2dfdXNlZDsgaSsrKSB7Ci0JCWFkZHI2NC52YWwzMi5sb3dlciA9IGMtPlNHW2ldLkFkZHIubG93ZXI7Ci0JCWFkZHI2NC52YWwzMi51cHBlciA9IGMtPlNHW2ldLkFkZHIudXBwZXI7Ci0JCXBjaV91bm1hcF9zaW5nbGUocGRldiwgKGRtYV9hZGRyX3QpIGFkZHI2NC52YWwsIGMtPlNHW2ldLkxlbiwKLQkJCWRhdGFfZGlyZWN0aW9uKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IHNnX3VzZWQ7IGkrKykKKwkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCAoZG1hX2FkZHJfdCkgbGU2NF90b19jcHUoYy0+U0dbaV0uQWRkciksCisJCQkJbGUzMl90b19jcHUoYy0+U0dbaV0uTGVuKSwKKwkJCQlkYXRhX2RpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyBpbnQgaHBzYV9tYXBfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtMTk1NCwyNSArMTg4NywyMiBAQAogCiAJaWYgKGJ1ZmxlbiA9PSAwIHx8IGRhdGFfZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkgewogCQljcC0+SGVhZGVyLlNHTGlzdCA9IDA7Ci0JCWNwLT5IZWFkZXIuU0dUb3RhbCA9IDA7CisJCWNwLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KDApOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlhZGRyNjQgPSAodTY0KSBwY2lfbWFwX3NpbmdsZShwZGV2LCBidWYsIGJ1ZmxlbiwgZGF0YV9kaXJlY3Rpb24pOworCWFkZHI2NCA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIGJ1ZiwgYnVmbGVuLCBkYXRhX2RpcmVjdGlvbik7CiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZwZGV2LT5kZXYsIGFkZHI2NCkpIHsKIAkJLyogUHJldmVudCBzdWJzZXF1ZW50IHVubWFwIG9mIHNvbWV0aGluZyBuZXZlciBtYXBwZWQgKi8KIAkJY3AtPkhlYWRlci5TR0xpc3QgPSAwOwotCQljcC0+SGVhZGVyLlNHVG90YWwgPSAwOworCQljcC0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigwKTsKIAkJcmV0dXJuIC0xOwogCX0KLQljcC0+U0dbMF0uQWRkci5sb3dlciA9Ci0JICAodTMyKSAoYWRkcjY0ICYgKHU2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKLQljcC0+U0dbMF0uQWRkci51cHBlciA9Ci0JICAodTMyKSAoKGFkZHI2NCA+PiAzMikgJiAodTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwotCWNwLT5TR1swXS5MZW4gPSBidWZsZW47Ci0JY3AtPlNHWzBdLkV4dCA9IEhQU0FfU0dfTEFTVDsgLyogd2UgYXJlIG5vdCBjaGFpbmluZyAqLwotCWNwLT5IZWFkZXIuU0dMaXN0ID0gKHU4KSAxOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCi0JY3AtPkhlYWRlci5TR1RvdGFsID0gKHUxNikgMTsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KKwljcC0+U0dbMF0uQWRkciA9IGNwdV90b19sZTY0KGFkZHI2NCk7CisJY3AtPlNHWzBdLkxlbiA9IGNwdV90b19sZTMyKGJ1Zmxlbik7CisJY3AtPlNHWzBdLkV4dCA9IGNwdV90b19sZTMyKEhQU0FfU0dfTEFTVCk7IC8qIHdlIGFyZSBub3QgY2hhaW5pbmcgKi8KKwljcC0+SGVhZGVyLlNHTGlzdCA9IDE7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KKwljcC0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigxKTsgLyogdG90YWwgc2dzIGluIGNtZCBsaXN0ICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4MzAsOCArMjc2MCw4IEBACiAJaWYgKGQgPT0gTlVMTCkKIAkJcmV0dXJuIDA7IC8qIG5vIG1hdGNoICovCiAKLQlpdF9uZXh1cyA9IGNwdV90b19sZTMyKCh1MzIpIGQtPmlvYWNjZWxfaGFuZGxlKTsKLQlzY3NpX25leHVzID0gY3B1X3RvX2xlMzIoKHUzMikgYzJhLT5zY3NpX25leHVzKTsKKwlpdF9uZXh1cyA9IGNwdV90b19sZTMyKGQtPmlvYWNjZWxfaGFuZGxlKTsKKwlzY3NpX25leHVzID0gY3B1X3RvX2xlMzIoYzJhLT5zY3NpX25leHVzKTsKIAlmaW5kID0gYzJhLT5zY3NpX25leHVzOwogCiAJaWYgKGgtPnJhaWRfb2ZmbG9hZF9kZWJ1ZyA+IDApCkBAIC0yODkxLDcgKzI4MjEsNyBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGludCBocHNhX2dhdGhlcl9sdW5faW5mbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCWludCByZXBvcnRsdW5zaXplLAorCWludCByZXBvcnRwaHlzbHVuc2l6ZSwgaW50IHJlcG9ydGxvZ2x1bnNpemUsCiAJc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXYsIHUzMiAqbnBoeXNpY2FscywgaW50ICpwaHlzaWNhbF9tb2RlLAogCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXYsIHUzMiAqbmxvZ2ljYWxzKQogewpAQCAtMjkwNSw3ICsyODM1LDcgQEAKIAkJKnBoeXNpY2FsX21vZGUgPSBIUFNBX1JFUE9SVF9QSFlTX0VYVEVOREVEOwogCQlwaHlzaWNhbF9lbnRyeV9zaXplID0gMjQ7CiAJfQotCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X3BoeXNfbHVucyhoLCBwaHlzZGV2LCByZXBvcnRsdW5zaXplLAorCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X3BoeXNfbHVucyhoLCBwaHlzZGV2LCByZXBvcnRwaHlzbHVuc2l6ZSwKIAkJCQkJCQkqcGh5c2ljYWxfbW9kZSkpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IHBoeXNpY2FsIExVTnMgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtMTsKQEAgLTI5MTgsNyArMjg0OCw3IEBACiAJCQkqbnBoeXNpY2FscyAtIEhQU0FfTUFYX1BIWVNfTFVOKTsKIAkJKm5waHlzaWNhbHMgPSBIUFNBX01BWF9QSFlTX0xVTjsKIAl9Ci0JaWYgKGhwc2Ffc2NzaV9kb19yZXBvcnRfbG9nX2x1bnMoaCwgbG9nZGV2LCByZXBvcnRsdW5zaXplKSkgeworCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X2xvZ19sdW5zKGgsIGxvZ2RldiwgcmVwb3J0bG9nbHVuc2l6ZSkpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IGxvZ2ljYWwgTFVOcyBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTI5NDEsOCArMjg3MSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4ICpmaWd1cmVfbHVuYWRkcmJ5dGVzKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCByYWlkX2N0bHJfcG9zaXRpb24sIGludCBpLAotCWludCBucGh5c2ljYWxzLCBpbnQgbmxvZ2ljYWxzLAorc3RhdGljIHU4ICpmaWd1cmVfbHVuYWRkcmJ5dGVzKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCByYWlkX2N0bHJfcG9zaXRpb24sCisJaW50IGksIGludCBucGh5c2ljYWxzLCBpbnQgbmxvZ2ljYWxzLAogCXN0cnVjdCBSZXBvcnRFeHRlbmRlZExVTmRhdGEgKnBoeXNkZXZfbGlzdCwKIAlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqbG9nZGV2X2xpc3QpCiB7CkBAIC0zMDExLDE1ICsyOTQxLDE0IEBACiAJdTMyIG5kZXZfYWxsb2NhdGVkID0gMDsKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICoqY3VycmVudHNkLCAqdGhpc19kZXZpY2UsICp0bXBkZXZpY2U7CiAJaW50IG5jdXJyZW50ID0gMDsKLQlpbnQgcmVwb3J0bHVuc2l6ZSA9IHNpemVvZigqcGh5c2Rldl9saXN0KSArIEhQU0FfTUFYX1BIWVNfTFVOICogMjQ7CiAJaW50IGksIG5fZXh0X3RhcmdldF9kZXZzLCBuZGV2c190b19hbGxvY2F0ZTsKIAlpbnQgcmFpZF9jdGxyX3Bvc2l0aW9uOwogCWludCByZXNjYW5faGJhX21vZGU7CiAJREVDTEFSRV9CSVRNQVAobHVuemVyb2JpdHMsIE1BWF9FWFRfVEFSR0VUUyk7CiAKIAljdXJyZW50c2QgPSBremFsbG9jKHNpemVvZigqY3VycmVudHNkKSAqIEhQU0FfTUFYX0RFVklDRVMsIEdGUF9LRVJORUwpOwotCXBoeXNkZXZfbGlzdCA9IGt6YWxsb2MocmVwb3J0bHVuc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JbG9nZGV2X2xpc3QgPSBremFsbG9jKHJlcG9ydGx1bnNpemUsIEdGUF9LRVJORUwpOworCXBoeXNkZXZfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpwaHlzZGV2X2xpc3QpLCBHRlBfS0VSTkVMKTsKKwlsb2dkZXZfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpsb2dkZXZfbGlzdCksIEdGUF9LRVJORUwpOwogCXRtcGRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKCp0bXBkZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghY3VycmVudHNkIHx8ICFwaHlzZGV2X2xpc3QgfHwgIWxvZ2Rldl9saXN0IHx8ICF0bXBkZXZpY2UpIHsKQEAgLTMwMzksNyArMjk2OCw4IEBACiAKIAloLT5oYmFfbW9kZV9lbmFibGVkID0gcmVzY2FuX2hiYV9tb2RlOwogCi0JaWYgKGhwc2FfZ2F0aGVyX2x1bl9pbmZvKGgsIHJlcG9ydGx1bnNpemUsCisJaWYgKGhwc2FfZ2F0aGVyX2x1bl9pbmZvKGgsCisJCQlzaXplb2YoKnBoeXNkZXZfbGlzdCksIHNpemVvZigqbG9nZGV2X2xpc3QpLAogCQkJKHN0cnVjdCBSZXBvcnRMVU5kYXRhICopIHBoeXNkZXZfbGlzdCwgJm5waHlzaWNhbHMsCiAJCQkmcGh5c2ljYWxfbW9kZSwgbG9nZGV2X2xpc3QsICZubG9naWNhbHMpKQogCQlnb3RvIG91dDsKQEAgLTMyMTAsMTkgKzMxNDAsMTkgQEAKIAkJfQogCQlhZGRyNjQgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJCWxlbiAgPSBzZ19kbWFfbGVuKHNnKTsKLQkJY3Vycl9zZy0+QWRkci5sb3dlciA9ICh1MzIpIChhZGRyNjQgJiAweDBGRkZGRkZGRlVMTCk7Ci0JCWN1cnJfc2ctPkFkZHIudXBwZXIgPSAodTMyKSAoKGFkZHI2NCA+PiAzMikgJiAweDBGRkZGRkZGRlVMTCk7Ci0JCWN1cnJfc2ctPkxlbiA9IGxlbjsKLQkJY3Vycl9zZy0+RXh0ID0gKGkgPCBzY3NpX3NnX2NvdW50KGNtZCkgLSAxKSA/IDAgOiBIUFNBX1NHX0xBU1Q7CisJCWN1cnJfc2ctPkFkZHIgPSBjcHVfdG9fbGU2NChhZGRyNjQpOworCQljdXJyX3NnLT5MZW4gPSBjcHVfdG9fbGUzMihsZW4pOworCQljdXJyX3NnLT5FeHQgPSBjcHVfdG9fbGUzMigwKTsKIAkJY3Vycl9zZysrOwogCX0KKwkoLS1jdXJyX3NnKS0+RXh0ID0gY3B1X3RvX2xlMzIoSFBTQV9TR19MQVNUKTsKIAogCWlmICh1c2Vfc2cgKyBjaGFpbmVkID4gaC0+bWF4U0cpCiAJCWgtPm1heFNHID0gdXNlX3NnICsgY2hhaW5lZDsKIAogCWlmIChjaGFpbmVkKSB7CiAJCWNwLT5IZWFkZXIuU0dMaXN0ID0gaC0+bWF4X2NtZF9zZ19lbnRyaWVzOwotCQljcC0+SGVhZGVyLlNHVG90YWwgPSAodTE2KSAodXNlX3NnICsgMSk7CisJCWNwLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KHVzZV9zZyArIDEpOwogCQlpZiAoaHBzYV9tYXBfc2dfY2hhaW5fYmxvY2soaCwgY3ApKSB7CiAJCQlzY3NpX2RtYV91bm1hcChjbWQpOwogCQkJcmV0dXJuIC0xOwpAQCAtMzIzMyw3ICszMTYzLDcgQEAKIHNnbGlzdF9maW5pc2hlZDoKIAogCWNwLT5IZWFkZXIuU0dMaXN0ID0gKHU4KSB1c2Vfc2c7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KLQljcC0+SGVhZGVyLlNHVG90YWwgPSAodTE2KSB1c2Vfc2c7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCisJY3AtPkhlYWRlci5TR1RvdGFsID0gY3B1X3RvX2xlMTYodXNlX3NnKTsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMyNSwxNyArMzI1NSwxMiBAQAogCQkJYWRkcjY0ID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCQkJbGVuICA9IHNnX2RtYV9sZW4oc2cpOwogCQkJdG90YWxfbGVuICs9IGxlbjsKLQkJCWN1cnJfc2ctPkFkZHIubG93ZXIgPSAodTMyKSAoYWRkcjY0ICYgMHgwRkZGRkZGRkZVTEwpOwotCQkJY3Vycl9zZy0+QWRkci51cHBlciA9Ci0JCQkJKHUzMikgKChhZGRyNjQgPj4gMzIpICYgMHgwRkZGRkZGRkZVTEwpOwotCQkJY3Vycl9zZy0+TGVuID0gbGVuOwotCi0JCQlpZiAoaSA9PSAoc2NzaV9zZ19jb3VudChjbWQpIC0gMSkpCi0JCQkJY3Vycl9zZy0+RXh0ID0gSFBTQV9TR19MQVNUOwotCQkJZWxzZQotCQkJCWN1cnJfc2ctPkV4dCA9IDA7ICAvKiB3ZSBhcmUgbm90IGNoYWluaW5nICovCisJCQljdXJyX3NnLT5BZGRyID0gY3B1X3RvX2xlNjQoYWRkcjY0KTsKKwkJCWN1cnJfc2ctPkxlbiA9IGNwdV90b19sZTMyKGxlbik7CisJCQljdXJyX3NnLT5FeHQgPSBjcHVfdG9fbGUzMigwKTsKIAkJCWN1cnJfc2crKzsKIAkJfQorCQkoLS1jdXJyX3NnKS0+RXh0ID0gY3B1X3RvX2xlMzIoSFBTQV9TR19MQVNUKTsKIAogCQlzd2l0Y2ggKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pIHsKIAkJY2FzZSBETUFfVE9fREVWSUNFOgpAQCAtMzU5Miw3ICszNTE3LDcgQEAKIAljcC0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMih0b3RhbF9sZW4pOwogCWNwLT5lcnJfcHRyID0gY3B1X3RvX2xlNjQoYy0+YnVzYWRkciArCiAJCQlvZmZzZXRvZihzdHJ1Y3QgaW9fYWNjZWwyX2NtZCwgZXJyb3JfZGF0YSkpOwotCWNwLT5lcnJfbGVuID0gY3B1X3RvX2xlMzIoKHUzMikgc2l6ZW9mKGNwLT5lcnJvcl9kYXRhKSk7CisJY3AtPmVycl9sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YoY3AtPmVycm9yX2RhdGEpKTsKIAogCWVucXVldWVfY21kX2FuZF9zdGFydF9pbyhoLCBjKTsKIAlyZXR1cm4gMDsKQEAgLTM4MDksMTEgKzM3MzQsNiBAQAogCQlvZmZsb2FkX3RvX21pcnJvciA9CiAJCQkob2ZmbG9hZF90b19taXJyb3IgPj0gbWFwLT5sYXlvdXRfbWFwX2NvdW50IC0gMSkKIAkJCT8gMCA6IG9mZmxvYWRfdG9fbWlycm9yICsgMTsKLQkJLyogRklYTUU6IHJlbW92ZSBhZnRlciBkZWJ1Zy9kZXYgKi8KLQkJQlVHX09OKG9mZmxvYWRfdG9fbWlycm9yID49IG1hcC0+bGF5b3V0X21hcF9jb3VudCk7Ci0JCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCi0JCQkiREVCVUc6IFVzaW5nIHBoeXNpY2FsIGRpc2sgbWFwIGluZGV4ICVkIGZyb20gbWlycm9yIGdyb3VwICVkXG4iLAotCQkJbWFwX2luZGV4LCBvZmZsb2FkX3RvX21pcnJvcik7CiAJCWRldi0+b2ZmbG9hZF90b19taXJyb3IgPSBvZmZsb2FkX3RvX21pcnJvcjsKIAkJLyogQXZvaWQgZGlyZWN0IHVzZSBvZiBkZXYtPm9mZmxvYWRfdG9fbWlycm9yIHdpdGhpbiB0aGlzCiAJCSAqIGZ1bmN0aW9uIHNpbmNlIG11bHRpcGxlIHRocmVhZHMgbWlnaHQgc2ltdWx0YW5lb3VzbHkKQEAgLTM5NTksOCArMzg3OSwxMSBAQAogCQkJCQkJZGV2LT5zY3NpM2FkZHIpOwogfQogCi1zdGF0aWMgaW50IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0Jdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCisvKgorICogUnVubmluZyBpbiBzdHJ1Y3QgU2NzaV9Ib3N0LT5ob3N0X2xvY2sgbGVzcyBtb2RlIHVzaW5nIExMRCBpbnRlcm5hbAorICogc3RydWN0IGN0bHJfaW5mbyAqaC0+bG9jayB3LyBzcGluX2xvY2tfaXJxc2F2ZSgpIHByb3RlY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgaHBzYV9zY3NpX3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2gsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldjsKQEAgLTM5NzMsMTQgKzM4OTYsMTQgQEAKIAlkZXYgPSBjbWQtPmRldmljZS0+aG9zdGRhdGE7CiAJaWYgKCFkZXYpIHsKIAkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKLQkJZG9uZShjbWQpOworCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQlyZXR1cm4gMDsKIAl9CiAJbWVtY3B5KHNjc2kzYWRkciwgZGV2LT5zY3NpM2FkZHIsIHNpemVvZihzY3NpM2FkZHIpKTsKIAogCWlmICh1bmxpa2VseShsb2NrdXBfZGV0ZWN0ZWQoaCkpKSB7CiAJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQlkb25lKGNtZCk7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCXJldHVybiAwOwogCX0KIAljID0gY21kX2FsbG9jKGgpOwpAQCAtMzk5MCw5ICszOTEzLDYgQEAKIAl9CiAKIAkvKiBGaWxsIGluIHRoZSBjb21tYW5kIGxpc3QgaGVhZGVyICovCi0KLQljbWQtPnNjc2lfZG9uZSA9IGRvbmU7ICAgIC8qIHNhdmUgdGhpcyBmb3IgdXNlIGJ5IGNvbXBsZXRpb24gY29kZSAqLwotCiAJLyogc2F2ZSBjIGluIGNhc2Ugd2UgaGF2ZSB0byBhYm9ydCBpdCAgKi8KIAljbWQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSBjOwogCkBAIC00MDI2LDggKzM5NDYsOCBAQAogCiAJYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOyAgLyogdW51c2VkIGluIHNpbXBsZSBtb2RlICovCiAJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlc1swXSwgJnNjc2kzYWRkclswXSwgOCk7Ci0JYy0+SGVhZGVyLlRhZy5sb3dlciA9IChjLT5jbWRpbmRleCA8PCBESVJFQ1RfTE9PS1VQX1NISUZUKTsKLQljLT5IZWFkZXIuVGFnLmxvd2VyIHw9IERJUkVDVF9MT09LVVBfQklUOworCWMtPkhlYWRlci50YWcgPSBjcHVfdG9fbGU2NCgoYy0+Y21kaW5kZXggPDwgRElSRUNUX0xPT0tVUF9TSElGVCkgfAorCQkJCQlESVJFQ1RfTE9PS1VQX0JJVCk7CiAKIAkvKiBGaWxsIGluIHRoZSByZXF1ZXN0IGJsb2NrLi4uICovCiAKQEAgLTQwMzYsMTcgKzM5NTYsMTggQEAKIAlCVUdfT04oY21kLT5jbWRfbGVuID4gc2l6ZW9mKGMtPlJlcXVlc3QuQ0RCKSk7CiAJYy0+UmVxdWVzdC5DREJMZW4gPSBjbWQtPmNtZF9sZW47CiAJbWVtY3B5KGMtPlJlcXVlc3QuQ0RCLCBjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbik7Ci0JYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsKLQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CiAJc3dpdGNoIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uKSB7CiAJY2FzZSBETUFfVE9fREVWSUNFOgotCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCVRZUEVfQVRUUl9ESVIoVFlQRV9DTUQsIEFUVFJfU0lNUExFLCBYRkVSX1dSSVRFKTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfRlJPTV9ERVZJQ0U6Ci0JCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQlUWVBFX0FUVFJfRElSKFRZUEVfQ01ELCBBVFRSX1NJTVBMRSwgWEZFUl9SRUFEKTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfTk9ORToKLQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCVRZUEVfQVRUUl9ESVIoVFlQRV9DTUQsIEFUVFJfU0lNUExFLCBYRkVSX05PTkUpOwogCQlicmVhazsKIAljYXNlIERNQV9CSURJUkVDVElPTkFMOgogCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBidWdneSBhcHBsaWNhdGlvbiBkb2VzIGEgc2NzaSBwYXNzdGhydQpAQCAtNDA1NCw3ICszOTc1LDggQEAKIAkJICogLi4vc2NzaS9zY3NpX2lvY3RsLmM6c2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoKSApCiAJCSAqLwogCi0JCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JTVkQ7CisJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQlUWVBFX0FUVFJfRElSKFRZUEVfQ01ELCBBVFRSX1NJTVBMRSwgWEZFUl9SU1ZEKTsKIAkJLyogVGhpcyBpcyB0ZWNobmljYWxseSB3cm9uZywgYW5kIGhwc2EgY29udHJvbGxlcnMgc2hvdWxkCiAJCSAqIHJlamVjdCBpdCB3aXRoIENNRF9JTlZBTElELCB3aGljaCBpcyB0aGUgbW9zdCBjb3JyZWN0CiAJCSAqIHJlc3BvbnNlLCBidXQgbm9uLWZpYnJlIGJhY2tlbmRzIGFwcGVhciB0byBsZXQgaXQKQEAgLTQwODEsOCArNDAwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBERUZfU0NTSV9RQ01EKGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kKQotCiBzdGF0aWMgaW50IGRvX25vdF9zY2FuX2lmX2NvbnRyb2xsZXJfbG9ja2VkX3VwKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQxNTIsMjMgKzQwNzIsNiBAQAogCXJldHVybiBmaW5pc2hlZDsKIH0KIAotc3RhdGljIGludCBocHNhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gc2Rldl90b19oYmEoc2Rldik7Ci0KLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KLQlpZiAocWRlcHRoIDwgMSkKLQkJcWRlcHRoID0gMTsKLQllbHNlCi0JCWlmIChxZGVwdGggPiBoLT5ucl9jbWRzKQotCQkJcWRlcHRoID0gaC0+bnJfY21kczsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgcWRlcHRoKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci0KIHN0YXRpYyB2b2lkIGhwc2FfdW5yZWdpc3Rlcl9zY3NpKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJLyogd2UgYXJlIGJlaW5nIGZvcmNpYmx5IHVubG9hZGVkLCBhbmQgbWF5IG5vdCByZWZ1c2UuICovCkBAIC00MzI5LDggKzQyMzIsOCBAQAogCWlmIChjLT5jbWRfdHlwZSA9PSBDTURfSU9BQ0NFTDEpIHsKIAkJc3RydWN0IGlvX2FjY2VsMV9jbWQgKmNtMSA9IChzdHJ1Y3QgaW9fYWNjZWwxX2NtZCAqKQogCQkJJmgtPmlvYWNjZWxfY21kX3Bvb2xbYy0+Y21kaW5kZXhdOwotCQkqdGFndXBwZXIgPSBjbTEtPlRhZy51cHBlcjsKLQkJKnRhZ2xvd2VyID0gY20xLT5UYWcubG93ZXI7CisJCSp0YWd1cHBlciA9ICh1MzIpIChjbTEtPnRhZyA+PiAzMik7CisJCSp0YWdsb3dlciA9ICh1MzIpIChjbTEtPnRhZyAmIDB4MGZmZmZmZmZmVUxMKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX0lPQUNDRUwyKSB7CkBAIC00MzQxLDExICs0MjQ0LDEwIEBACiAJCSp0YWdsb3dlciA9IGNtMi0+VGFnOwogCQlyZXR1cm47CiAJfQotCSp0YWd1cHBlciA9IGMtPkhlYWRlci5UYWcudXBwZXI7Ci0JKnRhZ2xvd2VyID0gYy0+SGVhZGVyLlRhZy5sb3dlcjsKKwkqdGFndXBwZXIgPSAodTMyKSAoYy0+SGVhZGVyLnRhZyA+PiAzMik7CisJKnRhZ2xvd2VyID0gKHUzMikgKGMtPkhlYWRlci50YWcgJiAweDBmZmZmZmZmZlVMTCk7CiB9CiAKLQogc3RhdGljIGludCBocHNhX3NlbmRfYWJvcnQoc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYWJvcnQsIGludCBzd2l6emxlKQogewpAQCAtNDQxMCw3ICs0MzEyLDcgQEAKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMgPSBOVUxMOwkvKiBwdHIgaW50byBjbXBRICovCiAKIAlpZiAoIWZpbmQpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgcXVldWVfaGVhZCwgbGlzdCkgewogCQlpZiAoYy0+c2NzaV9jbWQgPT0gTlVMTCkgLyogZS5nLjogcGFzc3RocnUgaW9jdGwgKi8KQEAgLTQ0MzIsNyArNDMzNCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgcXVldWVfaGVhZCwgbGlzdCkgewotCQlpZiAobWVtY21wKCZjLT5IZWFkZXIuVGFnLCB0YWcsIDgpICE9IDApCisJCWlmIChtZW1jbXAoJmMtPkhlYWRlci50YWcsIHRhZywgOCkgIT0gMCkKIAkJCWNvbnRpbnVlOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiBjOwpAQCAtNDY4NiwxOSArNDU4OCwzMiBAQAogCWludCBpOwogCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CiAJZG1hX2FkZHJfdCBjbWRfZG1hX2hhbmRsZSwgZXJyX2RtYV9oYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbG9vcGNvdW50OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkvKiBUaGVyZSBpcyBzb21lICpleHRyZW1lbHkqIHNtYWxsIGJ1dCBub24temVybyBjaGFuY2UgdGhhdCB0aGF0CisJICogbXVsdGlwbGUgdGhyZWFkcyBjb3VsZCBnZXQgaW4gaGVyZSwgYW5kIG9uZSB0aHJlYWQgY291bGQKKwkgKiBiZSBzY2FubmluZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJpdHMgbG9va2luZyBmb3IgYSBmcmVlCisJICogb25lLCBidXQgdGhlIGZyZWUgb25lcyBhcmUgYWx3YXlzIGJlaGluZCBoaW0sIGFuZCBvdGhlcgorCSAqIHRocmVhZHMgc25lYWsgaW4gYmVoaW5kIGhpbSBhbmQgZWF0IHRoZW0gYmVmb3JlIGhlIGNhbgorCSAqIGdldCB0byB0aGVtLCBzbyB0aGF0IHdoaWxlIHRoZXJlIGlzIGFsd2F5cyBhIGZyZWUgb25lLCBhCisJICogdmVyeSB1bmx1Y2t5IHRocmVhZCBtaWdodCBiZSBzdGFydmVkIGFueXdheSwgbmV2ZXIgYWJsZSB0bworCSAqIGJlYXQgdGhlIG90aGVyIHRocmVhZHMuICBJbiByZWFsaXR5LCB0aGlzIGhhcHBlbnMgc28KKwkgKiBpbmZyZXF1ZW50bHkgYXMgdG8gYmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBuZXZlci4KKwkgKi8KKworCWxvb3Bjb3VudCA9IDA7CiAJZG8gewogCQlpID0gZmluZF9maXJzdF96ZXJvX2JpdChoLT5jbWRfcG9vbF9iaXRzLCBoLT5ucl9jbWRzKTsKLQkJaWYgKGkgPT0gaC0+bnJfY21kcykgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9IHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0Ci0JCSAoaSAmIChCSVRTX1BFUl9MT05HIC0gMSksCi0JCSAgaC0+Y21kX3Bvb2xfYml0cyArIChpIC8gQklUU19QRVJfTE9ORykpICE9IDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGkgPT0gaC0+bnJfY21kcykKKwkJCWkgPSAwOworCQlsb29wY291bnQrKzsKKwl9IHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAorCQkgIGgtPmNtZF9wb29sX2JpdHMgKyAoaSAvIEJJVFNfUEVSX0xPTkcpKSAhPSAwICYmCisJCWxvb3Bjb3VudCA8IDEwKTsKKworCS8qIFRocmVhZCBnb3Qgc3RhcnZlZD8gIFdlIGRvIG5vdCBleHBlY3QgdGhpcyB0byBldmVyIGhhcHBlbi4gKi8KKwlpZiAobG9vcGNvdW50ID49IDEwKQorCQlyZXR1cm4gTlVMTDsKIAogCWMgPSBoLT5jbWRfcG9vbCArIGk7CiAJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOwpAQCAtNDcxNCw5ICs0NjI5LDggQEAKIAlJTklUX0xJU1RfSEVBRCgmYy0+bGlzdCk7CiAJYy0+YnVzYWRkciA9ICh1MzIpIGNtZF9kbWFfaGFuZGxlOwogCXRlbXA2NC52YWwgPSAodTY0KSBlcnJfZG1hX2hhbmRsZTsKLQljLT5FcnJEZXNjLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7Ci0JYy0+RXJyRGVzYy5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwotCWMtPkVyckRlc2MuTGVuID0gc2l6ZW9mKCpjLT5lcnJfaW5mbyk7CisJYy0+RXJyRGVzYy5BZGRyID0gY3B1X3RvX2xlNjQoZXJyX2RtYV9oYW5kbGUpOworCWMtPkVyckRlc2MuTGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCpjLT5lcnJfaW5mbykpOwogCiAJYy0+aCA9IGg7CiAJcmV0dXJuIGM7CkBAIC00NzI5LDcgKzQ2NDMsNiBAQAogc3RhdGljIHN0cnVjdCBDb21tYW5kTGlzdCAqY21kX3NwZWNpYWxfYWxsb2Moc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7Ci0JdW5pb24gdTY0Yml0IHRlbXA2NDsKIAlkbWFfYWRkcl90IGNtZF9kbWFfaGFuZGxlLCBlcnJfZG1hX2hhbmRsZTsKIAogCWMgPSBwY2lfemFsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKCpjKSwgJmNtZF9kbWFfaGFuZGxlKTsKQEAgLTQ3NTAsMTAgKzQ2NjMsOCBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmMtPmxpc3QpOwogCWMtPmJ1c2FkZHIgPSAodTMyKSBjbWRfZG1hX2hhbmRsZTsKLQl0ZW1wNjQudmFsID0gKHU2NCkgZXJyX2RtYV9oYW5kbGU7Ci0JYy0+RXJyRGVzYy5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwotCWMtPkVyckRlc2MuQWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKLQljLT5FcnJEZXNjLkxlbiA9IHNpemVvZigqYy0+ZXJyX2luZm8pOworCWMtPkVyckRlc2MuQWRkciA9IGNwdV90b19sZTY0KGVycl9kbWFfaGFuZGxlKTsKKwljLT5FcnJEZXNjLkxlbiA9IGNwdV90b19sZTMyKHNpemVvZigqYy0+ZXJyX2luZm8pKTsKIAogCWMtPmggPSBoOwogCXJldHVybiBjOwpAQCAtNDc2MiwzMCArNDY3MywyNSBAQAogc3RhdGljIHZvaWQgY21kX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpID0gYyAtIGgtPmNtZF9wb29sOwotCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CiAJY2xlYXJfYml0KGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAogCQkgIGgtPmNtZF9wb29sX2JpdHMgKyAoaSAvIEJJVFNfUEVSX0xPTkcpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNtZF9zcGVjaWFsX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7Ci0KLQl0ZW1wNjQudmFsMzIubG93ZXIgPSBjLT5FcnJEZXNjLkFkZHIubG93ZXI7Ci0JdGVtcDY0LnZhbDMyLnVwcGVyID0gYy0+RXJyRGVzYy5BZGRyLnVwcGVyOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKCpjLT5lcnJfaW5mbyksCi0JCQkgICAgYy0+ZXJyX2luZm8sIChkbWFfYWRkcl90KSB0ZW1wNjQudmFsKTsKKwkJCSAgICBjLT5lcnJfaW5mbywKKwkJCSAgICAoZG1hX2FkZHJfdCkgbGU2NF90b19jcHUoYy0+RXJyRGVzYy5BZGRyKSk7CiAJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LCBzaXplb2YoKmMpLAogCQkJICAgIGMsIChkbWFfYWRkcl90KSAoYy0+YnVzYWRkciAmIERJUkVDVF9MT09LVVBfTUFTSykpOwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCi1zdGF0aWMgaW50IGhwc2FfaW9jdGwzMl9wYXNzdGhydShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBocHNhX2lvY3RsMzJfcGFzc3RocnUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsCisJdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlJT0NUTDMyX0NvbW1hbmRfc3RydWN0IF9fdXNlciAqYXJnMzIgPQogCSAgICAoSU9DVEwzMl9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKikgYXJnOwpAQCAtNDgxMCw3ICs0NzE2LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGhwc2FfaW9jdGwoZGV2LCBDQ0lTU19QQVNTVEhSVSwgKHZvaWQgKilwKTsKKwllcnIgPSBocHNhX2lvY3RsKGRldiwgQ0NJU1NfUEFTU1RIUlUsIHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZXJyIHw9IGNvcHlfaW5fdXNlcigmYXJnMzItPmVycm9yX2luZm8sICZwLT5lcnJvcl9pbmZvLApAQCAtNDgyMSw3ICs0NzI3LDcgQEAKIH0KIAogc3RhdGljIGludCBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LAotCWludCBjbWQsIHZvaWQgKmFyZykKKwlpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewogCUJJR19JT0NUTDMyX0NvbW1hbmRfc3RydWN0IF9fdXNlciAqYXJnMzIgPQogCSAgICAoQklHX0lPQ1RMMzJfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICopIGFyZzsKQEAgLTQ4NDgsNyArNDc1NCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBocHNhX2lvY3RsKGRldiwgQ0NJU1NfQklHX1BBU1NUSFJVLCAodm9pZCAqKXApOworCWVyciA9IGhwc2FfaW9jdGwoZGV2LCBDQ0lTU19CSUdfUEFTU1RIUlUsIHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZXJyIHw9IGNvcHlfaW5fdXNlcigmYXJnMzItPmVycm9yX2luZm8sICZwLT5lcnJvcl9pbmZvLApAQCAtNDg1OCw3ICs0NzY0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDQ0lTU19HRVRQQ0lJTkZPOgpAQCAtNDkzMiw3ICs0ODM4LDcgQEAKIAlJT0NUTF9Db21tYW5kX3N0cnVjdCBpb2NvbW1hbmQ7CiAJc3RydWN0IENvbW1hbmRMaXN0ICpjOwogCWNoYXIgKmJ1ZmYgPSBOVUxMOwotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisJdTY0IHRlbXA2NDsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKCFhcmdwKQpAQCAtNDk3MSwxNCArNDg3NywxNCBAQAogCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsgLyogdW51c2VkIGluIHNpbXBsZSBtb2RlICovCiAJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApIHsJLyogYnVmZmVyIHRvIGZpbGwgKi8KIAkJYy0+SGVhZGVyLlNHTGlzdCA9IDE7Ci0JCWMtPkhlYWRlci5TR1RvdGFsID0gMTsKKwkJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigxKTsKIAl9IGVsc2UJeyAvKiBubyBidWZmZXJzIHRvIGZpbGwgKi8KIAkJYy0+SGVhZGVyLlNHTGlzdCA9IDA7Ci0JCWMtPkhlYWRlci5TR1RvdGFsID0gMDsKKwkJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigwKTsKIAl9CiAJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLCAmaW9jb21tYW5kLkxVTl9pbmZvLCBzaXplb2YoYy0+SGVhZGVyLkxVTikpOwogCS8qIHVzZSB0aGUga2VybmVsIGFkZHJlc3MgdGhlIGNtZCBibG9jayBmb3IgdGFnICovCi0JYy0+SGVhZGVyLlRhZy5sb3dlciA9IGMtPmJ1c2FkZHI7CisJYy0+SGVhZGVyLnRhZyA9IGMtPmJ1c2FkZHI7CiAKIAkvKiBGaWxsIGluIFJlcXVlc3QgYmxvY2sgKi8KIAltZW1jcHkoJmMtPlJlcXVlc3QsICZpb2NvbW1hbmQuUmVxdWVzdCwKQEAgLTQ5ODYsMTkgKzQ4OTIsMTcgQEAKIAogCS8qIEZpbGwgaW4gdGhlIHNjYXR0ZXIgZ2F0aGVyIGluZm9ybWF0aW9uICovCiAJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApIHsKLQkJdGVtcDY0LnZhbCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGJ1ZmYsCisJCXRlbXA2NCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGJ1ZmYsCiAJCQlpb2NvbW1hbmQuYnVmX3NpemUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JCWlmIChkbWFfbWFwcGluZ19lcnJvcigmaC0+cGRldi0+ZGV2LCB0ZW1wNjQudmFsKSkgewotCQkJYy0+U0dbMF0uQWRkci5sb3dlciA9IDA7Ci0JCQljLT5TR1swXS5BZGRyLnVwcGVyID0gMDsKLQkJCWMtPlNHWzBdLkxlbiA9IDA7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmaC0+cGRldi0+ZGV2LCAoZG1hX2FkZHJfdCkgdGVtcDY0KSkgeworCQkJYy0+U0dbMF0uQWRkciA9IGNwdV90b19sZTY0KDApOworCQkJYy0+U0dbMF0uTGVuID0gY3B1X3RvX2xlMzIoMCk7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQotCQljLT5TR1swXS5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwotCQljLT5TR1swXS5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwotCQljLT5TR1swXS5MZW4gPSBpb2NvbW1hbmQuYnVmX3NpemU7Ci0JCWMtPlNHWzBdLkV4dCA9IEhQU0FfU0dfTEFTVDsgLyogd2UgYXJlIG5vdCBjaGFpbmluZyovCisJCWMtPlNHWzBdLkFkZHIgPSBjcHVfdG9fbGU2NCh0ZW1wNjQpOworCQljLT5TR1swXS5MZW4gPSBjcHVfdG9fbGUzMihpb2NvbW1hbmQuYnVmX3NpemUpOworCQljLT5TR1swXS5FeHQgPSBjcHVfdG9fbGUzMihIUFNBX1NHX0xBU1QpOyAvKiBub3QgY2hhaW5pbmcgKi8KIAl9CiAJaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfY29yZV9pZl9ub19sb2NrdXAoaCwgYyk7CiAJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApCkBAIC01MDMzLDcgKzQ5MzcsNyBAQAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKIAl1bnNpZ25lZCBjaGFyICoqYnVmZiA9IE5VTEw7CiAJaW50ICpidWZmX3NpemUgPSBOVUxMOwotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisJdTY0IHRlbXA2NDsKIAlCWVRFIHNnX3VzZWQgPSAwOwogCWludCBzdGF0dXMgPSAwOwogCWludCBpOwpAQCAtNTEwNywyOSArNTAxMSwzMCBAQAogCX0KIAljLT5jbWRfdHlwZSA9IENNRF9JT0NUTF9QRU5EOwogCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsKLQljLT5IZWFkZXIuU0dMaXN0ID0gYy0+SGVhZGVyLlNHVG90YWwgPSBzZ191c2VkOworCWMtPkhlYWRlci5TR0xpc3QgPSAodTgpIHNnX3VzZWQ7CisJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNihzZ191c2VkKTsKIAltZW1jcHkoJmMtPkhlYWRlci5MVU4sICZpb2MtPkxVTl9pbmZvLCBzaXplb2YoYy0+SGVhZGVyLkxVTikpOwotCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOworCWMtPkhlYWRlci50YWcgPSBjLT5idXNhZGRyOwogCW1lbWNweSgmYy0+UmVxdWVzdCwgJmlvYy0+UmVxdWVzdCwgc2l6ZW9mKGMtPlJlcXVlc3QpKTsKIAlpZiAoaW9jLT5idWZfc2l6ZSA+IDApIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBzZ191c2VkOyBpKyspIHsKLQkJCXRlbXA2NC52YWwgPSBwY2lfbWFwX3NpbmdsZShoLT5wZGV2LCBidWZmW2ldLAorCQkJdGVtcDY0ID0gcGNpX21hcF9zaW5nbGUoaC0+cGRldiwgYnVmZltpXSwKIAkJCQkgICAgYnVmZl9zaXplW2ldLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZoLT5wZGV2LT5kZXYsIHRlbXA2NC52YWwpKSB7Ci0JCQkJYy0+U0dbaV0uQWRkci5sb3dlciA9IDA7Ci0JCQkJYy0+U0dbaV0uQWRkci51cHBlciA9IDA7Ci0JCQkJYy0+U0dbaV0uTGVuID0gMDsKKwkJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmaC0+cGRldi0+ZGV2LAorCQkJCQkJCShkbWFfYWRkcl90KSB0ZW1wNjQpKSB7CisJCQkJYy0+U0dbaV0uQWRkciA9IGNwdV90b19sZTY0KDApOworCQkJCWMtPlNHW2ldLkxlbiA9IGNwdV90b19sZTMyKDApOwogCQkJCWhwc2FfcGNpX3VubWFwKGgtPnBkZXYsIGMsIGksCiAJCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAJCQkJc3RhdHVzID0gLUVOT01FTTsKIAkJCQlnb3RvIGNsZWFudXAwOwogCQkJfQotCQkJYy0+U0dbaV0uQWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKLQkJCWMtPlNHW2ldLkFkZHIudXBwZXIgPSB0ZW1wNjQudmFsMzIudXBwZXI7Ci0JCQljLT5TR1tpXS5MZW4gPSBidWZmX3NpemVbaV07Ci0JCQljLT5TR1tpXS5FeHQgPSBpIDwgc2dfdXNlZCAtIDEgPyAwIDogSFBTQV9TR19MQVNUOworCQkJYy0+U0dbaV0uQWRkciA9IGNwdV90b19sZTY0KHRlbXA2NCk7CisJCQljLT5TR1tpXS5MZW4gPSBjcHVfdG9fbGUzMihidWZmX3NpemVbaV0pOworCQkJYy0+U0dbaV0uRXh0ID0gY3B1X3RvX2xlMzIoMCk7CiAJCX0KKwkJYy0+U0dbLS1pXS5FeHQgPSBjcHVfdG9fbGUzMihIUFNBX1NHX0xBU1QpOwogCX0KIAlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF9jb3JlX2lmX25vX2xvY2t1cChoLCBjKTsKIAlpZiAoc2dfdXNlZCkKQEAgLTUyMDYsNyArNTExMSw3IEBACiAvKgogICogaW9jdGwKICAqLwotc3RhdGljIGludCBocHNhX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGhwc2FfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCiB7CiAJc3RydWN0IGN0bHJfaW5mbyAqaDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKQEAgLTUyNjgsMjAgKzUxNzMsMjAgQEAKIHsKIAlpbnQgcGNpX2RpciA9IFhGRVJfTk9ORTsKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmE7IC8qIGZvciBjb21tYW5kcyB0byBiZSBhYm9ydGVkICovCisJdTMyIHR1cHBlciwgdGxvd2VyOwogCiAJYy0+Y21kX3R5cGUgPSBDTURfSU9DVExfUEVORDsKIAljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CiAJaWYgKGJ1ZmYgIT0gTlVMTCAmJiBzaXplID4gMCkgewogCQljLT5IZWFkZXIuU0dMaXN0ID0gMTsKLQkJYy0+SGVhZGVyLlNHVG90YWwgPSAxOworCQljLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KDEpOwogCX0gZWxzZSB7CiAJCWMtPkhlYWRlci5TR0xpc3QgPSAwOwotCQljLT5IZWFkZXIuU0dUb3RhbCA9IDA7CisJCWMtPkhlYWRlci5TR1RvdGFsID0gY3B1X3RvX2xlMTYoMCk7CiAJfQotCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOworCWMtPkhlYWRlci50YWcgPSBjLT5idXNhZGRyOwogCW1lbWNweShjLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgc2NzaTNhZGRyLCA4KTsKIAotCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gY21kX3R5cGU7CiAJaWYgKGNtZF90eXBlID09IFRZUEVfQ01EKSB7CiAJCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgSFBTQV9JTlFVSVJZOgpAQCAtNTI5MSw4ICs1MTk2LDggQEAKIAkJCQljLT5SZXF1ZXN0LkNEQlsyXSA9IChwYWdlX2NvZGUgJiAweGZmKTsKIAkJCX0KIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gNjsKLQkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKLQkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCQljLT5SZXF1ZXN0LnR5cGVfYXR0cl9kaXIgPQorCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsIEFUVFJfU0lNUExFLCBYRkVSX1JFQUQpOwogCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gSFBTQV9JTlFVSVJZOwogCQkJYy0+UmVxdWVzdC5DREJbNF0gPSBzaXplICYgMHhGRjsKQEAgLTUzMDMsOCArNTIwOCw4IEBACiAJCQkgICBtb2RlID0gMDAgdGFyZ2V0ID0gMC4gIE5vdGhpbmcgdG8gd3JpdGUuCiAJCQkgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTI7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9SRUFEOworCQkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCQlUWVBFX0FUVFJfRElSKGNtZF90eXBlLCBBVFRSX1NJTVBMRSwgWEZFUl9SRUFEKTsKIAkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CiAJCQljLT5SZXF1ZXN0LkNEQlswXSA9IGNtZDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzZdID0gKHNpemUgPj4gMjQpICYgMHhGRjsgLyogTVNCICovCkBAIC01MzE0LDggKzUyMTksOSBAQAogCQkJYnJlYWs7CiAJCWNhc2UgSFBTQV9DQUNIRV9GTFVTSDoKIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTI7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsCisJCQkJCQlBVFRSX1NJTVBMRSwgWEZFUl9XUklURSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBCTUlDX1dSSVRFOwogCQkJYy0+UmVxdWVzdC5DREJbNl0gPSBCTUlDX0NBQ0hFX0ZMVVNIOwpAQCAtNTMyNCwxNCArNTIzMCwxNCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgVEVTVF9VTklUX1JFQURZOgogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSA2OwotCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwotCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJVFlQRV9BVFRSX0RJUihjbWRfdHlwZSwgQVRUUl9TSU1QTEUsIFhGRVJfTk9ORSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgSFBTQV9HRVRfUkFJRF9NQVA6CiAJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEyOwotCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwotCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfUkVBRDsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJVFlQRV9BVFRSX0RJUihjbWRfdHlwZSwgQVRUUl9TSU1QTEUsIFhGRVJfUkVBRCk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBIUFNBX0NJU1NfUkVBRDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gY21kOwpAQCAtNTM0Miw4ICs1MjQ4LDggQEAKIAkJCWJyZWFrOwogCQljYXNlIEJNSUNfU0VOU0VfQ09OVFJPTExFUl9QQVJBTUVURVJTOgogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxMDsKLQkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKLQkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCQljLT5SZXF1ZXN0LnR5cGVfYXR0cl9kaXIgPQorCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsIEFUVFJfU0lNUExFLCBYRkVSX1JFQUQpOwogCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gQk1JQ19SRUFEOwogCQkJYy0+UmVxdWVzdC5DREJbNl0gPSBCTUlDX1NFTlNFX0NPTlRST0xMRVJfUEFSQU1FVEVSUzsKQEAgLTUzNjAsOSArNTI2Niw4IEBACiAKIAkJY2FzZSAgSFBTQV9ERVZJQ0VfUkVTRVRfTVNHOgogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxNjsKLQkJCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gIDE7IC8qIEl0IGlzIGEgTVNHIG5vdCBhIENNRCAqLwotCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwotCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJVFlQRV9BVFRSX0RJUihjbWRfdHlwZSwgQVRUUl9TSU1QTEUsIFhGRVJfTk9ORSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLwogCQkJbWVtc2V0KCZjLT5SZXF1ZXN0LkNEQlswXSwgMCwgc2l6ZW9mKGMtPlJlcXVlc3QuQ0RCKSk7CiAJCQljLT5SZXF1ZXN0LkNEQlswXSA9ICBjbWQ7CkBAIC01Mzc2LDI3ICs1MjgxLDI4IEBACiAJCQlicmVhazsKIAkJY2FzZSAgSFBTQV9BQk9SVF9NU0c6CiAJCQlhID0gYnVmZjsgICAgICAgLyogcG9pbnQgdG8gY29tbWFuZCB0byBiZSBhYm9ydGVkICovCi0JCQlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJBYm9ydCBUYWc6MHglMDh4OiUwOHggdXNpbmcgcmVxdWVzdCBUYWc6MHglMDh4OiUwOHhcbiIsCi0JCQkJYS0+SGVhZGVyLlRhZy51cHBlciwgYS0+SGVhZGVyLlRhZy5sb3dlciwKLQkJCQljLT5IZWFkZXIuVGFnLnVwcGVyLCBjLT5IZWFkZXIuVGFnLmxvd2VyKTsKKwkJCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIkFib3J0IFRhZzoweCUwMTZsbHggdXNpbmcgcmVxdWVzdCBUYWc6MHglMDE2bGx4IiwKKwkJCQlhLT5IZWFkZXIudGFnLCBjLT5IZWFkZXIudGFnKTsKKwkJCXRsb3dlciA9ICh1MzIpIChhLT5IZWFkZXIudGFnID4+IDMyKTsKKwkJCXR1cHBlciA9ICh1MzIpIChhLT5IZWFkZXIudGFnICYgMHgwZmZmZmZmZmZVTEwpOwogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxNjsKLQkJCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gVFlQRV9NU0c7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsCisJCQkJCQlBVFRSX1NJTVBMRSwgWEZFUl9XUklURSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBIUFNBX1RBU0tfTUFOQUdFTUVOVDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gSFBTQV9UTUZfQUJPUlRfVEFTSzsKIAkJCWMtPlJlcXVlc3QuQ0RCWzJdID0gMHgwMDsgLyogcmVzZXJ2ZWQgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCWzNdID0gMHgwMDsgLyogcmVzZXJ2ZWQgKi8KIAkJCS8qIFRhZyB0byBhYm9ydCBnb2VzIGluIENEQls0XS1DREJbMTFdICovCi0JCQljLT5SZXF1ZXN0LkNEQls0XSA9IGEtPkhlYWRlci5UYWcubG93ZXIgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbNV0gPSAoYS0+SGVhZGVyLlRhZy5sb3dlciA+PiA4KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQls2XSA9IChhLT5IZWFkZXIuVGFnLmxvd2VyID4+IDE2KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQls3XSA9IChhLT5IZWFkZXIuVGFnLmxvd2VyID4+IDI0KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQls4XSA9IGEtPkhlYWRlci5UYWcudXBwZXIgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbOV0gPSAoYS0+SGVhZGVyLlRhZy51cHBlciA+PiA4KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQlsxMF0gPSAoYS0+SGVhZGVyLlRhZy51cHBlciA+PiAxNikgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbMTFdID0gKGEtPkhlYWRlci5UYWcudXBwZXIgPj4gMjQpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzRdID0gdGxvd2VyICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzVdID0gKHRsb3dlciA+PiA4KSAmIDB4RkY7CisJCQljLT5SZXF1ZXN0LkNEQls2XSA9ICh0bG93ZXIgPj4gMTYpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzddID0gKHRsb3dlciA+PiAyNCkgJiAweEZGOworCQkJYy0+UmVxdWVzdC5DREJbOF0gPSB0dXBwZXIgJiAweEZGOworCQkJYy0+UmVxdWVzdC5DREJbOV0gPSAodHVwcGVyID4+IDgpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzEwXSA9ICh0dXBwZXIgPj4gMTYpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzExXSA9ICh0dXBwZXIgPj4gMjQpICYgMHhGRjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzEyXSA9IDB4MDA7IC8qIHJlc2VydmVkICovCiAJCQljLT5SZXF1ZXN0LkNEQlsxM10gPSAweDAwOyAvKiByZXNlcnZlZCAqLwogCQkJYy0+UmVxdWVzdC5DREJbMTRdID0gMHgwMDsgLyogcmVzZXJ2ZWQgKi8KQEAgLTU0MTIsNyArNTMxOCw3IEBACiAJCUJVRygpOwogCX0KIAotCXN3aXRjaCAoYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbikgeworCXN3aXRjaCAoR0VUX0RJUihjLT5SZXF1ZXN0LnR5cGVfYXR0cl9kaXIpKSB7CiAJY2FzZSBYRkVSX1JFQUQ6CiAJCXBjaV9kaXIgPSBQQ0lfRE1BX0ZST01ERVZJQ0U7CiAJCWJyZWFrOwpAQCAtNTQ2NywxNSArNTM3Myw5IEBACiAKIAkJLyogUHV0IGpvYiBvbnRvIHRoZSBjb21wbGV0ZWQgUSAqLwogCQlhZGRRKCZoLT5jbXBRLCBjKTsKLQotCQkvKiBNdXN0IGluY3JlbWVudCBjb21tYW5kc19vdXRzdGFuZGluZyBiZWZvcmUgdW5sb2NraW5nCi0JCSAqIGFuZCBzdWJtaXR0aW5nIHRvIGF2b2lkIHJhY2UgY2hlY2tpbmcgZm9yIGZpZm8gZnVsbAotCQkgKiBjb25kaXRpb24uCi0JCSAqLwotCQloLT5jb21tYW5kc19vdXRzdGFuZGluZysrOwotCi0JCS8qIFRlbGwgdGhlIGNvbnRyb2xsZXIgZXhlY3V0ZSBjb21tYW5kICovCisJCWF0b21pY19pbmMoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgKmZsYWdzKTsKKwkJLyogVGVsbCB0aGUgY29udHJvbGxlciBleGVjdXRlIGNvbW1hbmQgKi8KIAkJaC0+YWNjZXNzLnN1Ym1pdF9jb21tYW5kKGgsIGMpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgKmZsYWdzKTsKIAl9CkBAIC01NTIxLDYgKzU0MjEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGlvX21heV9iZV9zdGFsbGVkID0gMDsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gYy0+aDsKKwlpbnQgY291bnQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCXJlbW92ZVEoYyk7CkBAIC01NTQxLDExICs1NDQyLDEwIEBACiAJICogd2FudCB0byBnZXQgaW4gYSBjeWNsZSB3aGVyZSB3ZSBjYWxsIHN0YXJ0X2lvIGV2ZXJ5IHRpbWUKIAkgKiB0aHJvdWdoIGhlcmUuCiAJICovCi0JaWYgKHVubGlrZWx5KGgtPmZpZm9fcmVjZW50bHlfZnVsbCkgJiYKLQkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcgPCA1KQotCQlpb19tYXlfYmVfc3RhbGxlZCA9IDE7Ci0KKwljb3VudCA9IGF0b21pY19yZWFkKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCWlmICh1bmxpa2VseShoLT5maWZvX3JlY2VudGx5X2Z1bGwpICYmIGNvdW50IDwgNSkKKwkJaW9fbWF5X2JlX3N0YWxsZWQgPSAxOwogCiAJZGlhbF91cF9sb2NrdXBfZGV0ZWN0aW9uX29uX2Z3X2ZsYXNoX2NvbXBsZXRlKGMtPmgsIGMpOwogCWlmIChsaWtlbHkoYy0+Y21kX3R5cGUgPT0gQ01EX0lPQUNDRUwxIHx8IGMtPmNtZF90eXBlID09IENNRF9TQ1NJCkBAIC01NzY1LDIyICs1NjY1LDIwIEBACiAKIAljbWQtPkNvbW1hbmRIZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CiAJY21kLT5Db21tYW5kSGVhZGVyLlNHTGlzdCA9IDA7Ci0JY21kLT5Db21tYW5kSGVhZGVyLlNHVG90YWwgPSAwOwotCWNtZC0+Q29tbWFuZEhlYWRlci5UYWcubG93ZXIgPSBwYWRkcjMyOwotCWNtZC0+Q29tbWFuZEhlYWRlci5UYWcudXBwZXIgPSAwOworCWNtZC0+Q29tbWFuZEhlYWRlci5TR1RvdGFsID0gY3B1X3RvX2xlMTYoMCk7CisJY21kLT5Db21tYW5kSGVhZGVyLnRhZyA9IHBhZGRyMzI7CiAJbWVtc2V0KCZjbWQtPkNvbW1hbmRIZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgMCwgOCk7CiAKIAljbWQtPlJlcXVlc3QuQ0RCTGVuID0gMTY7Ci0JY21kLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IFRZUEVfTVNHOwotCWNtZC0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfSEVBRE9GUVVFVUU7Ci0JY21kLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9OT05FOworCWNtZC0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCVRZUEVfQVRUUl9ESVIoVFlQRV9NU0csIEFUVFJfSEVBRE9GUVVFVUUsIFhGRVJfTk9ORSk7CiAJY21kLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLwogCWNtZC0+UmVxdWVzdC5DREJbMF0gPSBvcGNvZGU7CiAJY21kLT5SZXF1ZXN0LkNEQlsxXSA9IHR5cGU7CiAJbWVtc2V0KCZjbWQtPlJlcXVlc3QuQ0RCWzJdLCAwLCAxNCk7IC8qIHJlc3Qgb2YgdGhlIENEQiBpcyByZXNlcnZlZCAqLwotCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkFkZHIubG93ZXIgPSBwYWRkcjMyICsgc2l6ZW9mKCpjbWQpOwotCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkFkZHIudXBwZXIgPSAwOwotCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkxlbiA9IHNpemVvZihzdHJ1Y3QgRXJyb3JJbmZvKTsKKwljbWQtPkVycm9yRGVzY3JpcHRvci5BZGRyID0KKwkJCWNwdV90b19sZTY0KChwYWRkcjMyICsgc2l6ZW9mKCpjbWQpKSk7CisJY21kLT5FcnJvckRlc2NyaXB0b3IuTGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pKTsKIAogCXdyaXRlbChwYWRkcjMyLCB2YWRkciArIFNBNV9SRVFVRVNUX1BPUlRfT0ZGU0VUKTsKIApAQCAtNTgxOCw3ICs1NzE2LDcgQEAKICNkZWZpbmUgaHBzYV9ub29wKHApIGhwc2FfbWVzc2FnZShwLCAzLCAwKQogCiBzdGF0aWMgaW50IGhwc2FfY29udHJvbGxlcl9oYXJkX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCXZvaWQgKiBfX2lvbWVtIHZhZGRyLCB1MzIgdXNlX2Rvb3JiZWxsKQorCXZvaWQgX19pb21lbSAqdmFkZHIsIHUzMiB1c2VfZG9vcmJlbGwpCiB7CiAJdTE2IHBtY3NyOwogCWludCBwb3M7CkBAIC02MDU2LDcgKzU5NTQsNyBAQAogICogICB0aGUgaW8gZnVuY3Rpb25zLgogICogICBUaGlzIGlzIGZvciBkZWJ1ZyBvbmx5LgogICovCi1zdGF0aWMgdm9pZCBwcmludF9jZmdfdGFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgQ2ZnVGFibGUgKnRiKQorc3RhdGljIHZvaWQgcHJpbnRfY2ZnX3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKnRiKQogewogI2lmZGVmIEhQU0FfREVCVUcKIAlpbnQgaTsKQEAgLTYzMjMsMTEgKzYyMjEsMTEgQEAKIAloLT5tYXhfY21kX3NnX2VudHJpZXMgPSAzMTsKIAlpZiAoaC0+bWF4c2dlbnRyaWVzID4gNTEyKSB7CiAJCWgtPm1heF9jbWRfc2dfZW50cmllcyA9IDMyOwotCQloLT5jaGFpbnNpemUgPSBoLT5tYXhzZ2VudHJpZXMgLSBoLT5tYXhfY21kX3NnX2VudHJpZXMgKyAxOworCQloLT5jaGFpbnNpemUgPSBoLT5tYXhzZ2VudHJpZXMgLSBoLT5tYXhfY21kX3NnX2VudHJpZXM7CiAJCWgtPm1heHNnZW50cmllcy0tOyAvKiBzYXZlIG9uZSBmb3IgY2hhaW4gcG9pbnRlciAqLwogCX0gZWxzZSB7Ci0JCWgtPm1heHNnZW50cmllcyA9IDMxOyAvKiBkZWZhdWx0IHRvIHRyYWRpdGlvbmFsIHZhbHVlcyAqLwogCQloLT5jaGFpbnNpemUgPSAwOworCQloLT5tYXhzZ2VudHJpZXMgPSAzMTsgLyogZGVmYXVsdCB0byB0cmFkaXRpb25hbCB2YWx1ZXMgKi8KIAl9CiAKIAkvKiBGaW5kIG91dCB3aGF0IHRhc2sgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZCBhbmQgY2FjaGUgKi8KQEAgLTY0NTYsMTUgKzYzNTQsMTUgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyAocGNpX2Rpc2FibGVfZGV2aWNlIG1heSBkaXNhYmxlIHRoaXMpICovCi0JcGNpX3NldF9tYXN0ZXIoaC0+cGRldik7Ci0KIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGgtPnBkZXYsIEhQU0EpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LAogCQkJImNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KKworCXBjaV9zZXRfbWFzdGVyKGgtPnBkZXYpOworCiAJaHBzYV9pbnRlcnJ1cHRfbW9kZShoKTsKIAllcnIgPSBocHNhX3BjaV9maW5kX21lbW9yeV9CQVIoaC0+cGRldiwgJmgtPnBhZGRyKTsKIAlpZiAoZXJyKQpAQCAtNjU0NCw3ICs2NDQyLDkgQEAKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgZGV2aWNlLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCiAJLyogUmVzZXQgdGhlIGNvbnRyb2xsZXIgd2l0aCBhIFBDSSBwb3dlci1jeWNsZSBvciB2aWEgZG9vcmJlbGwgKi8KIAlyYyA9IGhwc2Ffa2R1bXBfaGFyZF9yZXNldF9jb250cm9sbGVyKHBkZXYpOwogCkBAIC03NDMxLDEzICs3MzMxLDEyIEBACiAJCQljcC0+aG9zdF9jb250ZXh0X2ZsYWdzID0gSU9BQ0NFTDFfSENGTEFHU19DSVNTX0ZPUk1BVDsKIAkJCWNwLT50aW1lb3V0X3NlYyA9IDA7CiAJCQljcC0+UmVwbHlRdWV1ZSA9IDA7Ci0JCQljcC0+VGFnLmxvd2VyID0gKGkgPDwgRElSRUNUX0xPT0tVUF9TSElGVCkgfAotCQkJCQkJRElSRUNUX0xPT0tVUF9CSVQ7Ci0JCQljcC0+VGFnLnVwcGVyID0gMDsKLQkJCWNwLT5ob3N0X2FkZHIubG93ZXIgPQotCQkJCSh1MzIpIChoLT5pb2FjY2VsX2NtZF9wb29sX2RoYW5kbGUgKworCQkJY3AtPnRhZyA9CisJCQkJY3B1X3RvX2xlNjQoKGkgPDwgRElSRUNUX0xPT0tVUF9TSElGVCkgfAorCQkJCQkJRElSRUNUX0xPT0tVUF9CSVQpOworCQkJY3AtPmhvc3RfYWRkciA9CisJCQkJY3B1X3RvX2xlNjQoaC0+aW9hY2NlbF9jbWRfcG9vbF9kaGFuZGxlICsKIAkJCQkJKGkgKiBzaXplb2Yoc3RydWN0IGlvX2FjY2VsMV9jbWQpKSk7Ci0JCQljcC0+aG9zdF9hZGRyLnVwcGVyID0gMDsKIAkJfQogCX0gZWxzZSBpZiAodHJhbnNfc3VwcG9ydCAmIENGR1RCTF9UcmFuc19pb19hY2NlbDIpIHsKIAkJdTY0IGNmZ19vZmZzZXQsIGNmZ19iYXNlX2FkZHJfaW5kZXg7CkBAIC03NzExLDcgKzc2MTAsNyBAQAogCVZFUklGWV9PRkZTRVQodGltZW91dF9zZWMsIDB4NjIpOwogCVZFUklGWV9PRkZTRVQoUmVwbHlRdWV1ZSwgMHg2NCk7CiAJVkVSSUZZX09GRlNFVChyZXNlcnZlZDksIDB4NjUpOwotCVZFUklGWV9PRkZTRVQoVGFnLCAweDY4KTsKKwlWRVJJRllfT0ZGU0VUKHRhZywgMHg2OCk7CiAJVkVSSUZZX09GRlNFVChob3N0X2FkZHIsIDB4NzApOwogCVZFUklGWV9PRkZTRVQoQ0lTU19MVU4sIDB4NzgpOwogCVZFUklGWV9PRkZTRVQoU0csIDB4NzggKyA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhLmggYi9kcml2ZXJzL3Njc2kvaHBzYS5oCmluZGV4IDI0NDcyY2UuLjhlMDZkOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHNhLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuaApAQCAtMTE4LDcgKzExOCw3IEBACiAJc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKmNmZ3RhYmxlOwogCWludAlpbnRlcnJ1cHRzX2VuYWJsZWQ7CiAJaW50IAltYXhfY29tbWFuZHM7Ci0JaW50CWNvbW1hbmRzX291dHN0YW5kaW5nOworCWF0b21pY190IGNvbW1hbmRzX291dHN0YW5kaW5nOwogIwlkZWZpbmUgUEVSRl9NT0RFX0lOVAkwCiAjCWRlZmluZSBET09SQkVMTF9JTlQJMQogIwlkZWZpbmUgU0lNUExFX01PREVfSU5UCTIKQEAgLTE2NCw3ICsxNjQsNyBAQAogCSAqLwogCXUzMiB0cmFuc19zdXBwb3J0OwogCXUzMiB0cmFuc19vZmZzZXQ7Ci0Jc3RydWN0IFRyYW5zVGFibGVfc3RydWN0ICp0cmFuc3RhYmxlOworCXN0cnVjdCBUcmFuc1RhYmxlX3N0cnVjdCBfX2lvbWVtICp0cmFuc3RhYmxlOwogCXVuc2lnbmVkIGxvbmcgdHJhbnNNZXRob2Q7CiAKIAkvKiBjYXAgY29uY3VycmVudCBwYXNzdGhydXMgYXQgc29tZSByZWFzb25hYmxlIG1heGltdW0gKi8KQEAgLTE4MSw3ICsxODEsNyBAQAogCXUzMiAqYmxvY2tGZXRjaFRhYmxlOwogCXUzMiAqaW9hY2NlbDFfYmxvY2tGZXRjaFRhYmxlOwogCXUzMiAqaW9hY2NlbDJfYmxvY2tGZXRjaFRhYmxlOwotCXUzMiAqaW9hY2NlbDJfYmZ0Ml9yZWdzOworCXUzMiBfX2lvbWVtICppb2FjY2VsMl9iZnQyX3JlZ3M7CiAJdW5zaWduZWQgY2hhciAqaGJhX2lucXVpcnlfZGF0YTsKIAl1MzIgZHJpdmVyX3N1cHBvcnQ7CiAJdTMyIGZ3X3N1cHBvcnQ7CkBAIC0xOTIsNyArMTkyLDcgQEAKIAl1NjQgbGFzdF9oZWFydGJlYXRfdGltZXN0YW1wOwogCXUzMiBoZWFydGJlYXRfc2FtcGxlX2ludGVydmFsOwogCWF0b21pY190IGZpcm13YXJlX2ZsYXNoX2luX3Byb2dyZXNzOwotCXUzMiAqbG9ja3VwX2RldGVjdGVkOworCXUzMiBfX3BlcmNwdSAqbG9ja3VwX2RldGVjdGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgbW9uaXRvcl9jdGxyX3dvcms7CiAJaW50IHJlbW92ZV9pbl9wcm9ncmVzczsKIAl1MzIgZmlmb19yZWNlbnRseV9mdWxsOwpAQCAtMzk1LDcgKzM5NSw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfcGVyZm9ybWFudF9jb21wbGV0ZWQoc3RydWN0IGN0bHJfaW5mbyAqaCwgdTggcSkKIHsKIAlzdHJ1Y3QgcmVwbHlfcXVldWVfYnVmZmVyICpycSA9ICZoLT5yZXBseV9xdWV1ZVtxXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCByZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CiAKIAkvKiBtc2kgYXV0byBjbGVhcnMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdC4gKi8KIAlpZiAoIShoLT5tc2lfdmVjdG9yIHx8IGgtPm1zaXhfdmVjdG9yKSkgewpAQCAtNDEzLDkgKzQxMyw3IEBACiAJaWYgKChycS0+aGVhZFtycS0+Y3VycmVudF9lbnRyeV0gJiAxKSA9PSBycS0+d3JhcGFyb3VuZCkgewogCQlyZWdpc3Rlcl92YWx1ZSA9IHJxLT5oZWFkW3JxLT5jdXJyZW50X2VudHJ5XTsKIAkJcnEtPmN1cnJlbnRfZW50cnkrKzsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmctLTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCQlhdG9taWNfZGVjKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAJfSBlbHNlIHsKIAkJcmVnaXN0ZXJfdmFsdWUgPSBGSUZPX0VNUFRZOwogCX0KQEAgLTQzMywxMSArNDMxLDcgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgU0E1X2ZpZm9fZnVsbChzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewotCWlmIChoLT5jb21tYW5kc19vdXRzdGFuZGluZyA+PSBoLT5tYXhfY29tbWFuZHMpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci0KKwlyZXR1cm4gYXRvbWljX3JlYWQoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKSA+PSBoLT5tYXhfY29tbWFuZHM7CiB9CiAvKgogICogICByZXR1cm5zIHZhbHVlIHJlYWQgZnJvbSBoYXJkd2FyZS4KQEAgLTQ0OCwxMyArNDQyLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlCiAJCT0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfUkVQTFlfUE9SVF9PRkZTRVQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAocmVnaXN0ZXJfdmFsdWUgIT0gRklGT19FTVBUWSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7Ci0JfQorCWlmIChyZWdpc3Rlcl92YWx1ZSAhPSBGSUZPX0VNUFRZKQorCQlhdG9taWNfZGVjKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAKICNpZmRlZiBIUFNBX0RFQlVHCiAJaWYgKHJlZ2lzdGVyX3ZhbHVlICE9IEZJRk9fRU1QVFkpCkBAIC01MTAsNyArNTAwLDYgQEAKIHsKIAl1NjQgcmVnaXN0ZXJfdmFsdWU7CiAJc3RydWN0IHJlcGx5X3F1ZXVlX2J1ZmZlciAqcnEgPSAmaC0+cmVwbHlfcXVldWVbcV07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUJVR19PTihxID49IGgtPm5yZXBseV9xdWV1ZXMpOwogCkBAIC01MjgsOSArNTE3LDcgQEAKIAkJd21iKCk7CiAJCXdyaXRlbCgocSA8PCAyNCkgfCBycS0+Y3VycmVudF9lbnRyeSwgaC0+dmFkZHIgKwogCQkJCUlPQUNDRUxfTU9ERTFfQ09OU1VNRVJfSU5ERVgpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJCWF0b21pY19kZWMoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKTsKIAl9CiAJcmV0dXJuICh1bnNpZ25lZCBsb25nKSByZWdpc3Rlcl92YWx1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKaW5kZXggYjUxMjVkYy4uY2I5ODhjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKQEAgLTI1Miw3ICsyNTIsNyBAQAogCXU4IExVTkxpc3RMZW5ndGhbNF07CiAJdTggZXh0ZW5kZWRfcmVzcG9uc2VfZmxhZzsKIAl1OCByZXNlcnZlZFszXTsKLQlzdHJ1Y3QgZXh0X3JlcG9ydF9sdW5fZW50cnkgTFVOW0hQU0FfTUFYX0xVTl07CisJc3RydWN0IGV4dF9yZXBvcnRfbHVuX2VudHJ5IExVTltIUFNBX01BWF9QSFlTX0xVTl07CiB9OwogCiBzdHJ1Y3QgU2Vuc2VTdWJzeXN0ZW1faW5mbyB7CkBAIC0zMTQsMjggKzMxNCwzNiBAQAogCXU4ICAgICAgICAgICAgICBSZXBseVF1ZXVlOwogCXU4ICAgICAgICAgICAgICBTR0xpc3Q7CiAJdTE2ICAgICAgICAgICAgIFNHVG90YWw7Ci0Jc3RydWN0IHZhbHMzMiAgICAgVGFnOworCXU2NAkJdGFnOwogCXVuaW9uIExVTkFkZHIgICAgIExVTjsKIH07CiAKIHN0cnVjdCBSZXF1ZXN0QmxvY2sgewogCXU4ICAgQ0RCTGVuOwotCXN0cnVjdCB7Ci0JCXU4IFR5cGU6MzsKLQkJdTggQXR0cmlidXRlOjM7Ci0JCXU4IERpcmVjdGlvbjoyOwotCX0gVHlwZTsKKwkvKgorCSAqIHR5cGVfYXR0cl9kaXI6CisJICogdHlwZTogbG93IDMgYml0cworCSAqIGF0dHI6IG1pZGRsZSAzIGJpdHMKKwkgKiBkaXI6IGhpZ2ggMiBiaXRzCisJICovCisJdTgJdHlwZV9hdHRyX2RpcjsKKyNkZWZpbmUgVFlQRV9BVFRSX0RJUih0LCBhLCBkKSAoKCgoZCkgJiAweDAzKSA8PCA2KSB8XAorCQkJCSgoKGEpICYgMHgwNykgPDwgMykgfFwKKwkJCQkoKHQpICYgMHgwNykpCisjZGVmaW5lIEdFVF9UWVBFKHRhZCkgKCh0YWQpICYgMHgwNykKKyNkZWZpbmUgR0VUX0FUVFIodGFkKSAoKCh0YWQpID4+IDMpICYgMHgwNykKKyNkZWZpbmUgR0VUX0RJUih0YWQpICgoKHRhZCkgPj4gNikgJiAweDAzKQogCXUxNiAgVGltZW91dDsKIAl1OCAgIENEQlsxNl07CiB9OwogCiBzdHJ1Y3QgRXJyRGVzY3JpcHRvciB7Ci0Jc3RydWN0IHZhbHMzMiBBZGRyOworCXU2NCBBZGRyOwogCXUzMiAgTGVuOwogfTsKIAogc3RydWN0IFNHRGVzY3JpcHRvciB7Ci0Jc3RydWN0IHZhbHMzMiBBZGRyOworCXU2NCBBZGRyOwogCXUzMiAgTGVuOwogCXUzMiAgRXh0OwogfTsKQEAgLTQzNCw4ICs0NDIsOCBAQAogCXUxNiB0aW1lb3V0X3NlYzsJCS8qIDB4NjIgLSAweDYzICovCiAJdTggIFJlcGx5UXVldWU7CQkJLyogMHg2NCAqLwogCXU4ICByZXNlcnZlZDlbM107CQkvKiAweDY1IC0gMHg2NyAqLwotCXN0cnVjdCB2YWxzMzIgVGFnOwkJLyogMHg2OCAtIDB4NkYgKi8KLQlzdHJ1Y3QgdmFsczMyIGhvc3RfYWRkcjsJLyogMHg3MCAtIDB4NzcgKi8KKwl1NjQgdGFnOwkJCS8qIDB4NjggLSAweDZGICovCisJdTY0IGhvc3RfYWRkcjsJCQkvKiAweDcwIC0gMHg3NyAqLwogCXU4ICBDSVNTX0xVTls4XTsJCS8qIDB4NzggLSAweDdGICovCiAJc3RydWN0IFNHRGVzY3JpcHRvciBTR1tJT0FDQ0VMMV9NQVhTR0VOVFJJRVNdOwogfSBfX2FsaWduZWQoSU9BQ0NFTDFfQ09NTUFORExJU1RfQUxJR05NRU5UKTsKQEAgLTU1NSw4ICs1NjMsOCBAQAogCXU4IHJlc2VydmVkMTsJCS8qIGJ5dGUgMyBSZXNlcnZlZCAqLwogCXUzMiBpdF9uZXh1czsJCS8qIFNDU0kgSS1UIE5leHVzICovCiAJdTggbHVuX2lkWzhdOwkJLyogTFVOIElEIGZvciBUTUYgcmVxdWVzdCAqLwotCXN0cnVjdCB2YWxzMzIgVGFnOwkvKiBjY2lzcyB0YWcgYXNzb2NpYXRlZCB3LyByZXF1ZXN0ICovCi0Jc3RydWN0IHZhbHMzMiBhYm9ydF90YWc7LyogY2Npc3MgdGFnIG9mIFNDU0kgY21kIG9yIHRhc2sgdG8gYWJvcnQgKi8KKwl1NjQgdGFnOwkJLyogY2Npc3MgdGFnIGFzc29jaWF0ZWQgdy8gcmVxdWVzdCAqLworCXU2NCBhYm9ydF90YWc7CQkvKiBjY2lzcyB0YWcgb2YgU0NTSSBjbWQgb3IgdGFzayB0byBhYm9ydCAqLwogCXU2NCBlcnJvcl9wdHI7CQkvKiBFcnJvciBQb2ludGVyICovCiAJdTMyIGVycm9yX2xlbjsJCS8qIEVycm9yIExlbmd0aCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuYwppbmRleCBkZWRiNjJjLi5lOTk1MjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCkBAIC0xMTE4LDE3ICsxMTE4LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQgaHB0aW9wX2FkanVzdF9kaXNrX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCQkJICBpbnQgcXVldWVfZGVwdGgsIGludCByZWFzb24pCisJCQkJCSAgaW50IHF1ZXVlX2RlcHRoKQogewogCXN0cnVjdCBocHRpb3BfaGJhICpoYmEgPSAoc3RydWN0IGhwdGlvcF9oYmEgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKIAotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJaWYgKHF1ZXVlX2RlcHRoID4gaGJhLT5tYXhfcmVxdWVzdHMpCiAJCXF1ZXVlX2RlcHRoID0gaGJhLT5tYXhfcmVxdWVzdHM7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBxdWV1ZV9kZXB0aCk7Ci0JcmV0dXJuIHF1ZXVlX2RlcHRoOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxdWV1ZV9kZXB0aCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGhwdGlvcF9zaG93X3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCmluZGV4IDU5OGM0MmMuLmY1OGM2ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKQEAgLTE2NDMsMTkgKzE2NDMsOSBAQAogCWludF90b19zY3NpbHVuKGNtbmQtPmRldmljZS0+bHVuLCAmdmZjX2NtZC0+aXUubHVuKTsKIAltZW1jcHkodmZjX2NtZC0+aXUuY2RiLCBjbW5kLT5jbW5kLCBjbW5kLT5jbWRfbGVuKTsKIAotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21uZCwgdGFnKSkgewotCQl2ZmNfY21kLT50YXNrX3RhZyA9IGNwdV90b19iZTY0KHRhZ1sxXSk7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgTVNHX1NJTVBMRV9UQUc6Ci0JCQl2ZmNfY21kLT5pdS5wcmlfdGFza19hdHRyID0gSUJNVkZDX1NJTVBMRV9UQVNLOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX0hFQURfVEFHOgotCQkJdmZjX2NtZC0+aXUucHJpX3Rhc2tfYXR0ciA9IElCTVZGQ19IRUFEX09GX1FVRVVFOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX09SREVSRURfVEFHOgotCQkJdmZjX2NtZC0+aXUucHJpX3Rhc2tfYXR0ciA9IElCTVZGQ19PUkRFUkVEX1RBU0s7Ci0JCQlicmVhazsKLQkJfTsKKwlpZiAoY21uZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkgeworCQl2ZmNfY21kLT50YXNrX3RhZyA9IGNwdV90b19iZTY0KGNtbmQtPnRhZyk7CisJCXZmY19jbWQtPml1LnByaV90YXNrX2F0dHIgPSBJQk1WRkNfU0lNUExFX1RBU0s7CiAJfQogCiAJaWYgKGxpa2VseSghKHJjID0gaWJtdmZjX21hcF9zZ19kYXRhKGNtbmQsIGV2dCwgdmZjX2NtZCwgdmhvc3QtPmRldikpKSkKQEAgLTI4OTcsMTIgKzI4ODcsNiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX0RJU0spCiAJCXNkZXYtPmFsbG93X3Jlc3RhcnQgPSAxOwotCi0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgTVNHX1NJTVBMRV9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JfSBlbHNlCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtMjkxNiw0MCArMjkwMCwxMiBAQAogICogUmV0dXJuIHZhbHVlOgogICogCWFjdHVhbCBkZXB0aCBzZXQKICAqKi8KLXN0YXRpYyBpbnQgaWJtdmZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsCi0JCQkJICAgICBpbnQgcmVhc29uKQorc3RhdGljIGludCBpYm12ZmNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCkKIHsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCWlmIChxZGVwdGggPiBJQk1WRkNfTUFYX0NNRFNfUEVSX0xVTikKIAkJcWRlcHRoID0gSUJNVkZDX01BWF9DTURTX1BFUl9MVU47CiAKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBxZGVwdGgpOwotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLQotLyoqCi0gKiBpYm12ZmNfY2hhbmdlX3F1ZXVlX3R5cGUgLSBDaGFuZ2UgdGhlIGRldmljZSdzIHF1ZXVlIHR5cGUKLSAqIEBzZGV2OgkJc2NzaSBkZXZpY2Ugc3RydWN0Ci0gKiBAdGFnX3R5cGU6CXR5cGUgb2YgdGFncyB0byB1c2UKLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKiAJYWN0dWFsIHF1ZXVlIHR5cGUgc2V0Ci0gKiovCi1zdGF0aWMgaW50IGlibXZmY19jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKLXsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7Ci0KLQkJaWYgKHRhZ190eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnX3R5cGUgPSAwOwotCi0JcmV0dXJuIHRhZ190eXBlOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiBzdGF0aWMgc3NpemVfdCBpYm12ZmNfc2hvd19ob3N0X3BhcnRpdGlvbl9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTMxMzMsNyArMzA4OSw3IEBACiAJLnRhcmdldF9hbGxvYyA9IGlibXZmY190YXJnZXRfYWxsb2MsCiAJLnNjYW5fZmluaXNoZWQgPSBpYm12ZmNfc2Nhbl9maW5pc2hlZCwKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gaWJtdmZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUgPSBpYm12ZmNfY2hhbmdlX3F1ZXVlX3R5cGUsCisJLmNoYW5nZV9xdWV1ZV90eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkuY21kX3Blcl9sdW4gPSAxNiwKIAkuY2FuX3F1ZXVlID0gSUJNVkZDX01BWF9SRVFVRVNUU19ERUZBVUxULAogCS50aGlzX2lkID0gLTEsCkBAIC0zMTQxLDYgKzMwOTcsOCBAQAogCS5tYXhfc2VjdG9ycyA9IElCTVZGQ19NQVhfU0VDVE9SUywKIAkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuc2hvc3RfYXR0cnMgPSBpYm12ZmNfYXR0cnMsCisJLnVzZV9ibGtfdGFncyA9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoID0gMSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwppbmRleCA3YjIzZjIxLi5hY2VhNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwpAQCAtMTkyOSw3ICsxOTI5LDYgQEAKIAkJYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMTIwICogSFopOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNob3N0LT5jbWRfcGVyX2x1bik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NDIsMTcgKzE5NDEsMTEgQEAKICAqIFJldHVybiB2YWx1ZToKICAqIAlhY3R1YWwgZGVwdGggc2V0CiAgKiovCi1zdGF0aWMgaW50IGlibXZzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsCi0JCQkJICAgICAgIGludCByZWFzb24pCitzdGF0aWMgaW50IGlibXZzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAocWRlcHRoID4gSUJNVlNDU0lfTUFYX0NNRFNfUEVSX0xVTikKIAkJcWRlcHRoID0gSUJNVlNDU0lfTUFYX0NNRFNfUEVSX0xVTjsKLQotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHFkZXB0aCk7Ci0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCAyYTk1NzhjLi41NDAyOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC0zOTQyLDggKzM5NDIsOSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzZ2xpc3QtPm51bV9kbWFfc2cgPSBwY2lfbWFwX3NnKGlvYV9jZmctPnBkZXYsIHNnbGlzdC0+c2NhdHRlcmxpc3QsCi0JCQkJCXNnbGlzdC0+bnVtX3NnLCBETUFfVE9fREVWSUNFKTsKKwlzZ2xpc3QtPm51bV9kbWFfc2cgPSBkbWFfbWFwX3NnKCZpb2FfY2ZnLT5wZGV2LT5kZXYsCisJCQkJCXNnbGlzdC0+c2NhdHRlcmxpc3QsIHNnbGlzdC0+bnVtX3NnLAorCQkJCQlETUFfVE9fREVWSUNFKTsKIAogCWlmICghc2dsaXN0LT5udW1fZG1hX3NnKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKQEAgLTQzMjcsMTYgKzQzMjgsMTIgQEAKICAqIFJldHVybiB2YWx1ZToKICAqIAlhY3R1YWwgZGVwdGggc2V0CiAgKiovCi1zdGF0aWMgaW50IGlwcl9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLAotCQkJCSAgaW50IHJlYXNvbikKK3N0YXRpYyBpbnQgaXByX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gKHN0cnVjdCBpcHJfaW9hX2NmZyAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlczsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOwogCi0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCXJlcyA9IChzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICopc2Rldi0+aG9zdGRhdGE7CiAKQEAgLTQzNDQsNyArNDM0MSw3IEBACiAJCXFkZXB0aCA9IElQUl9NQVhfQ01EX1BFUl9BVEFfTFVOOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOworCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CiAJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwogfQogCkBAIC00MzY0LDI0ICs0MzYxLDEwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCXJlcyA9IChzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICopc2Rldi0+aG9zdGRhdGE7Ci0KLQlpZiAocmVzKSB7Ci0JCWlmIChpcHJfaXNfZ3Njc2kocmVzKSAmJiBzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCQkvKgotCQkJICogV2UgZG9uJ3QgYm90aGVyIHF1aWVzY2luZyB0aGUgZGV2aWNlIGhlcmUgc2luY2UgdGhlCi0JCQkgKiBhZGFwdGVyIGZpcm13YXJlIGRvZXMgaXQgZm9yIHVzLgotCQkJICovCi0JCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7Ci0KLQkJCWlmICh0YWdfdHlwZSkKLQkJCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCQllbHNlCi0JCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCX0gZWxzZQotCQkJdGFnX3R5cGUgPSAwOwotCX0gZWxzZQorCWlmIChyZXMgJiYgaXByX2lzX2dzY3NpKHJlcykpCisJCXRhZ190eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZShzZGV2LCB0YWdfdHlwZSk7CisJZWxzZQogCQl0YWdfdHlwZSA9IDA7Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJcmV0dXJuIHRhZ190eXBlOwogfQpAQCAtNDc2NSwxMCArNDc0OCwxMCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAKIAkJaWYgKGFwKSB7Ci0JCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBJUFJfTUFYX0NNRF9QRVJfQVRBX0xVTik7CisJCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBJUFJfTUFYX0NNRF9QRVJfQVRBX0xVTik7CiAJCQlhdGFfc2FzX3NsYXZlX2NvbmZpZ3VyZShzZGV2LCBhcCk7Ci0JCX0gZWxzZQotCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOworCQl9CisKIAkJaWYgKGlvYV9jZmctPnNpczY0KQogCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiUmVzb3VyY2UgcGF0aDogJXNcbiIsCiAJCQkJICAgIGlwcl9mb3JtYXRfcmVzX3BhdGgoaW9hX2NmZywKQEAgLTU1ODUsNyArNTU2OCw3IEBACiAJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CiAJaWYgKG5zZWcgPCAwKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsICJwY2lfbWFwX3NnIGZhaWxlZCFcbiIpOworCQkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LCAic2NzaV9kbWFfbWFwIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC01NjM2LDcgKzU2MTksNyBAQAogCiAJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CiAJaWYgKG5zZWcgPCAwKSB7Ci0JCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgInBjaV9tYXBfc2cgZmFpbGVkIVxuIik7CisJCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgInNjc2lfZG1hX21hcCBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNTY3MywzNSArNTY1Niw2IEBACiB9CiAKIC8qKgotICogaXByX2dldF90YXNrX2F0dHJpYnV0ZXMgLSBUcmFuc2xhdGUgU1BJIFEtVGFnIHRvIHRhc2sgYXR0cmlidXRlcwotICogQHNjc2lfY21kOglzY3NpIGNvbW1hbmQgc3RydWN0Ci0gKgotICogUmV0dXJuIHZhbHVlOgotICogCXRhc2sgYXR0cmlidXRlcwotICoqLwotc3RhdGljIHU4IGlwcl9nZXRfdGFza19hdHRyaWJ1dGVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kKQotewotCXU4IHRhZ1syXTsKLQl1OCByYyA9IElQUl9GTEFHU19MT19VTlRBR0dFRF9UQVNLOwotCi0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY3NpX2NtZCwgdGFnKSkgewotCQlzd2l0Y2ggKHRhZ1swXSkgewotCQljYXNlIE1TR19TSU1QTEVfVEFHOgotCQkJcmMgPSBJUFJfRkxBR1NfTE9fU0lNUExFX1RBU0s7Ci0JCQlicmVhazsKLQkJY2FzZSBNU0dfSEVBRF9UQUc6Ci0JCQlyYyA9IElQUl9GTEFHU19MT19IRUFEX09GX1FfVEFTSzsKLQkJCWJyZWFrOwotCQljYXNlIE1TR19PUkRFUkVEX1RBRzoKLQkJCXJjID0gSVBSX0ZMQUdTX0xPX09SREVSRURfVEFTSzsKLQkJCWJyZWFrOwotCQl9OwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCiAgKiBpcHJfZXJwX2RvbmUgLSBQcm9jZXNzIGNvbXBsZXRpb24gb2YgRVJQIGZvciBhIGRldmljZQogICogQGlwcl9jbWQ6CQlpcHIgY29tbWFuZCBzdHJ1Y3QKICAqCkBAIC02MjM2LDcgKzYxOTAsMTAgQEAKIAkJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fREVMQVlfQUZURVJfUlNUOwogCQl9CiAJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fQUxJR05FRF9CRlI7Ci0JCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBpcHJfZ2V0X3Rhc2tfYXR0cmlidXRlcyhzY3NpX2NtZCk7CisJCWlmIChzY3NpX2NtZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkKKwkJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fU0lNUExFX1RBU0s7CisJCWVsc2UKKwkJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fVU5UQUdHRURfVEFTSzsKIAl9CiAKIAlpZiAoc2NzaV9jbWQtPmNtbmRbMF0gPj0gMHhDMCAmJgpAQCAtNjM1Nyw2ICs2MzE0LDcgQEAKIAkuc2Rldl9hdHRycyA9IGlwcl9kZXZfYXR0cnMsCiAJLnByb2NfbmFtZSA9IElQUl9OQU1FLAogCS5ub193cml0ZV9zYW1lID0gMSwKKwkudXNlX2Jsa190YWdzID0gMSwKIH07CiAKIC8qKgpAQCAtODQzMSw3ICs4Mzg5LDcgQEAKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSBpcHJfY21kLT5pb2FfY2ZnOwogCXN0cnVjdCBpcHJfc2dsaXN0ICpzZ2xpc3QgPSBpb2FfY2ZnLT51Y29kZV9zZ2xpc3Q7CiAKLQlwY2lfdW5tYXBfc2coaW9hX2NmZy0+cGRldiwgc2dsaXN0LT5zY2F0dGVybGlzdCwKKwlkbWFfdW5tYXBfc2coJmlvYV9jZmctPnBkZXYtPmRldiwgc2dsaXN0LT5zY2F0dGVybGlzdCwKIAkJICAgICBzZ2xpc3QtPm51bV9zZywgRE1BX1RPX0RFVklDRSk7CiAKIAlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9yZXNldF9hbGVydDsKQEAgLTg4NzEsNyArODgyOSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgSVBSX05VTV9DTURfQkxLUzsgaSsrKSB7CiAJCWlmIChpb2FfY2ZnLT5pcHJfY21uZF9saXN0W2ldKQotCQkJcGNpX3Bvb2xfZnJlZShpb2FfY2ZnLT5pcHJfY21kX3Bvb2wsCisJCQlkbWFfcG9vbF9mcmVlKGlvYV9jZmctPmlwcl9jbWRfcG9vbCwKIAkJCQkgICAgICBpb2FfY2ZnLT5pcHJfY21uZF9saXN0W2ldLAogCQkJCSAgICAgIGlvYV9jZmctPmlwcl9jbW5kX2xpc3RfZG1hW2ldKTsKIApAQCAtODg3OSw3ICs4ODM3LDcgQEAKIAl9CiAKIAlpZiAoaW9hX2NmZy0+aXByX2NtZF9wb29sKQotCQlwY2lfcG9vbF9kZXN0cm95KGlvYV9jZmctPmlwcl9jbWRfcG9vbCk7CisJCWRtYV9wb29sX2Rlc3Ryb3koaW9hX2NmZy0+aXByX2NtZF9wb29sKTsKIAogCWtmcmVlKGlvYV9jZmctPmlwcl9jbW5kX2xpc3QpOwogCWtmcmVlKGlvYV9jZmctPmlwcl9jbW5kX2xpc3RfZG1hKTsKQEAgLTg5MDAsMjUgKzg4NTgsMjQgQEAKIAlpbnQgaTsKIAogCWtmcmVlKGlvYV9jZmctPnJlc19lbnRyaWVzKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsIHNpemVvZihzdHJ1Y3QgaXByX21pc2NfY2JzKSwKLQkJCSAgICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmlvYV9jZmctPnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBpcHJfbWlzY19jYnMpLAorCQkJICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CiAJaXByX2ZyZWVfY21kX2Jsa3MoaW9hX2NmZyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaW9hX2NmZy0+aHJycV9udW07IGkrKykKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LAotCQkJCQlzaXplb2YodTMyKSAqIGlvYV9jZmctPmhycnFbaV0uc2l6ZSwKLQkJCQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycSwKLQkJCQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmaW9hX2NmZy0+cGRldi0+ZGV2LAorCQkJCSAgc2l6ZW9mKHUzMikgKiBpb2FfY2ZnLT5ocnJxW2ldLnNpemUsCisJCQkJICBpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxLAorCQkJCSAgaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOwogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKLQkJCSAgICBpb2FfY2ZnLT51LmNmZ190YWJsZSwKLQkJCSAgICBpb2FfY2ZnLT5jZmdfdGFibGVfZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmaW9hX2NmZy0+cGRldi0+ZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKKwkJCSAgaW9hX2NmZy0+dS5jZmdfdGFibGUsIGlvYV9jZmctPmNmZ190YWJsZV9kbWEpOwogCiAJZm9yIChpID0gMDsgaSA8IElQUl9OVU1fSENBTVM7IGkrKykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgaXByX2hvc3RyY2IpLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiW2ldLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiX2RtYVtpXSk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZpb2FfY2ZnLT5wZGV2LT5kZXYsCisJCQkJICBzaXplb2Yoc3RydWN0IGlwcl9ob3N0cmNiKSwKKwkJCQkgIGlvYV9jZmctPmhvc3RyY2JbaV0sCisJCQkJICBpb2FfY2ZnLT5ob3N0cmNiX2RtYVtpXSk7CiAJfQogCiAJaXByX2ZyZWVfZHVtcChpb2FfY2ZnKTsKQEAgLTg5NzksNyArODkzNiw3IEBACiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlpbnQgaSwgZW50cmllc19lYWNoX2hycnEsIGhycnFfaWQgPSAwOwogCi0JaW9hX2NmZy0+aXByX2NtZF9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKElQUl9OQU1FLCBpb2FfY2ZnLT5wZGV2LAorCWlvYV9jZmctPmlwcl9jbWRfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZShJUFJfTkFNRSwgJmlvYV9jZmctPnBkZXYtPmRldiwKIAkJCQkJCXNpemVvZihzdHJ1Y3QgaXByX2NtbmQpLCA1MTIsIDApOwogCiAJaWYgKCFpb2FfY2ZnLT5pcHJfY21kX3Bvb2wpCkBAIC05MDI5LDcgKzg5ODYsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBJUFJfTlVNX0NNRF9CTEtTOyBpKyspIHsKLQkJaXByX2NtZCA9IHBjaV9wb29sX2FsbG9jKGlvYV9jZmctPmlwcl9jbWRfcG9vbCwgR0ZQX0tFUk5FTCwgJmRtYV9hZGRyKTsKKwkJaXByX2NtZCA9IGRtYV9wb29sX2FsbG9jKGlvYV9jZmctPmlwcl9jbWRfcG9vbCwgR0ZQX0tFUk5FTCwgJmRtYV9hZGRyKTsKIAogCQlpZiAoIWlwcl9jbWQpIHsKIAkJCWlwcl9mcmVlX2NtZF9ibGtzKGlvYV9jZmcpOwpAQCAtOTEwMCw5ICs5MDU3LDEwIEBACiAJCWlvYV9jZmctPnJlc19lbnRyaWVzW2ldLmlvYV9jZmcgPSBpb2FfY2ZnOwogCX0KIAotCWlvYV9jZmctPnZwZF9jYnMgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBpcHJfbWlzY19jYnMpLAotCQkJCQkJJmlvYV9jZmctPnZwZF9jYnNfZG1hKTsKKwlpb2FfY2ZnLT52cGRfY2JzID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXByX21pc2NfY2JzKSwKKwkJCQkJICAgICAgJmlvYV9jZmctPnZwZF9jYnNfZG1hLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAogCWlmICghaW9hX2NmZy0+dnBkX2NicykKIAkJZ290byBvdXRfZnJlZV9yZXNfZW50cmllczsKQEAgLTkxMTEsMTMgKzkwNjksMTQgQEAKIAkJZ290byBvdXRfZnJlZV92cGRfY2JzOwogCiAJZm9yIChpID0gMDsgaSA8IGlvYV9jZmctPmhycnFfbnVtOyBpKyspIHsKLQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsCisJCWlvYV9jZmctPmhycnFbaV0uaG9zdF9ycnEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKIAkJCQkJc2l6ZW9mKHUzMikgKiBpb2FfY2ZnLT5ocnJxW2ldLnNpemUsCi0JCQkJCSZpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxX2RtYSk7CisJCQkJCSZpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxX2RtYSwKKwkJCQkJR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKCFpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxKSAgewogCQkJd2hpbGUgKC0taSA+IDApCi0JCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LAorCQkJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsCiAJCQkJCXNpemVvZih1MzIpICogaW9hX2NmZy0+aHJycVtpXS5zaXplLAogCQkJCQlpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxLAogCQkJCQlpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxX2RtYSk7CkBAIC05MTI2LDE3ICs5MDg1LDE5IEBACiAJCWlvYV9jZmctPmhycnFbaV0uaW9hX2NmZyA9IGlvYV9jZmc7CiAJfQogCi0JaW9hX2NmZy0+dS5jZmdfdGFibGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LAotCQkJCQkJICAgIGlvYV9jZmctPmNmZ190YWJsZV9zaXplLAotCQkJCQkJICAgICZpb2FfY2ZnLT5jZmdfdGFibGVfZG1hKTsKKwlpb2FfY2ZnLT51LmNmZ190YWJsZSA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJICBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKKwkJCQkJCSAgJmlvYV9jZmctPmNmZ190YWJsZV9kbWEsCisJCQkJCQkgIEdGUF9LRVJORUwpOwogCiAJaWYgKCFpb2FfY2ZnLT51LmNmZ190YWJsZSkKIAkJZ290byBvdXRfZnJlZV9ob3N0X3JycTsKIAogCWZvciAoaSA9IDA7IGkgPCBJUFJfTlVNX0hDQU1TOyBpKyspIHsKLQkJaW9hX2NmZy0+aG9zdHJjYltpXSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsCi0JCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBpcHJfaG9zdHJjYiksCi0JCQkJCQkJICAgJmlvYV9jZmctPmhvc3RyY2JfZG1hW2ldKTsKKwkJaW9hX2NmZy0+aG9zdHJjYltpXSA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJCSBzaXplb2Yoc3RydWN0IGlwcl9ob3N0cmNiKSwKKwkJCQkJCQkgJmlvYV9jZmctPmhvc3RyY2JfZG1hW2ldLAorCQkJCQkJCSBHRlBfS0VSTkVMKTsKIAogCQlpZiAoIWlvYV9jZmctPmhvc3RyY2JbaV0pCiAJCQlnb3RvIG91dF9mcmVlX2hvc3RyY2JfZG1hOwpAQCAtOTE2MCwyNSArOTEyMSwyNCBAQAogCiBvdXRfZnJlZV9ob3N0cmNiX2RtYToKIAl3aGlsZSAoaS0tID4gMCkgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgaXByX2hvc3RyY2IpLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiW2ldLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiX2RtYVtpXSk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgaXByX2hvc3RyY2IpLAorCQkJCSAgaW9hX2NmZy0+aG9zdHJjYltpXSwKKwkJCQkgIGlvYV9jZmctPmhvc3RyY2JfZG1hW2ldKTsKIAl9Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKLQkJCSAgICBpb2FfY2ZnLT51LmNmZ190YWJsZSwKLQkJCSAgICBpb2FfY2ZnLT5jZmdfdGFibGVfZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKKwkJCSAgaW9hX2NmZy0+dS5jZmdfdGFibGUsIGlvYV9jZmctPmNmZ190YWJsZV9kbWEpOwogb3V0X2ZyZWVfaG9zdF9ycnE6CiAJZm9yIChpID0gMDsgaSA8IGlvYV9jZmctPmhycnFfbnVtOyBpKyspIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LAotCQkJCXNpemVvZih1MzIpICogaW9hX2NmZy0+aHJycVtpXS5zaXplLAotCQkJCWlvYV9jZmctPmhycnFbaV0uaG9zdF9ycnEsCi0JCQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCSAgc2l6ZW9mKHUzMikgKiBpb2FfY2ZnLT5ocnJxW2ldLnNpemUsCisJCQkJICBpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxLAorCQkJCSAgaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOwogCX0KIG91dF9pcHJfZnJlZV9jbWRfYmxvY2tzOgogCWlwcl9mcmVlX2NtZF9ibGtzKGlvYV9jZmcpOwogb3V0X2ZyZWVfdnBkX2NiczoKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgaXByX21pc2NfY2JzKSwKLQkJCSAgICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBpcHJfbWlzY19jYnMpLAorCQkJICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CiBvdXRfZnJlZV9yZXNfZW50cmllczoKIAlrZnJlZShpb2FfY2ZnLT5yZXNfZW50cmllcyk7CiAJZ290byBvdXQ7CkBAIC05NjE4LDE2ICs5NTc4LDE3IEBACiAJaXByX2luaXRfcmVncyhpb2FfY2ZnKTsKIAogCWlmIChpb2FfY2ZnLT5zaXM2NCkgewotCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJCXJjID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LCBETUFfQklUX01BU0soNjQpKTsKIAkJaWYgKHJjIDwgMCkgewotCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCA2NCBiaXQgUENJIERNQSBtYXNrXG4iKTsKLQkJCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgNjQgYml0IERNQSBtYXNrXG4iKTsKKwkJCXJjID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJICAgICAgIERNQV9CSVRfTUFTSygzMikpOwogCQl9CiAJfSBlbHNlCi0JCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJcmMgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOwogCiAJaWYgKHJjIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IFBDSSBETUEgbWFza1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgRE1BIG1hc2tcbiIpOwogCQlnb3RvIGNsZWFudXBfbm9tZW07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggZDAyMDFjZS4uOWViZGViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMTU0OSw3ICsxNTQ5LDcgQEAKIAlzdHJ1Y3QgaXByX21pc2NfY2JzICp2cGRfY2JzOwogCWRtYV9hZGRyX3QgdnBkX2Nic19kbWE7CiAKLQlzdHJ1Y3QgcGNpX3Bvb2wgKmlwcl9jbWRfcG9vbDsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKmlwcl9jbWRfcG9vbDsKIAogCXN0cnVjdCBpcHJfY21uZCAqcmVzZXRfY21kOwogCWludCAoKnJlc2V0KSAoc3RydWN0IGlwcl9jbW5kICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwcy5jIGIvZHJpdmVycy9zY3NpL2lwcy5jCmluZGV4IGU1YWZjMzguLmU1YzI4NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHMuYworKysgYi9kcml2ZXJzL3Njc2kvaXBzLmMKQEAgLTEyMTAsNyArMTIxMCw3IEBACiAJCW1pbiA9IGhhLT5tYXhfY21kcyAvIDI7CiAJCWlmIChoYS0+ZW5xLT51Y0xvZ0RyaXZlQ291bnQgPD0gMikKIAkJCW1pbiA9IGhhLT5tYXhfY21kcyAtIDE7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKFNEcHRyLCBNU0dfT1JERVJFRF9UQUcsIG1pbik7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKFNEcHRyLCBtaW4pOwogCX0KIAogCVNEcHRyLT5za2lwX21zX3BhZ2VfOCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjaS9pbml0LmMgYi9kcml2ZXJzL3Njc2kvaXNjaS9pbml0LmMKaW5kZXggMmU4OTBiMS4uNzI0YzYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY2kvaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NpL2luaXQuYwpAQCAtMTcyLDYgKzE3Miw4IEBACiAJLnRhcmdldF9kZXN0cm95CQkJPSBzYXNfdGFyZ2V0X2Rlc3Ryb3ksCiAJLmlvY3RsCQkJCT0gc2FzX2lvY3RsLAogCS5zaG9zdF9hdHRycwkJCT0gaXNjaV9ob3N0X2F0dHJzLAorCS51c2VfYmxrX3RhZ3MJCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCQk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNhc19kb21haW5fZnVuY3Rpb25fdGVtcGxhdGUgaXNjaV90cmFuc3BvcnRfb3BzICA9IHsKQEAgLTI1OCw4ICsyNjAsNiBAQAogCXNhc19oYS0+c2FzX3BvcnQgPSBzYXNfcG9ydHM7CiAJc2FzX2hhLT5udW1fcGh5cyA9IFNDSV9NQVhfUEhZUzsKIAotCXNhc19oYS0+bGxkZF9xdWV1ZV9zaXplID0gSVNDSV9DQU5fUVVFVUVfVkFMOwotCXNhc19oYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPSAxOwogCXNhc19oYS0+c3RyaWN0X3dpZGVfcG9ydHMgPSAxOwogCiAJc2FzX3JlZ2lzdGVyX2hhKHNhc19oYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjaS90YXNrLmMgYi9kcml2ZXJzL3Njc2kvaXNjaS90YXNrLmMKaW5kZXggNWQ2ZmRhNy4uM2Y2M2M2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY2kvdGFzay5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NpL3Rhc2suYwpAQCAtMTE3LDEwNCArMTE3LDk3IEBACiAgKiAgICBmdW5jdGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGxpYnNhcyB0byBzZW5kIGEgdGFzayBkb3duIHRvCiAgKiAgICBoYXJkd2FyZS4KICAqIEB0YXNrOiBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIFNBUyB0YXNrIHRvIHNlbmQuCi0gKiBAbnVtOiBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0YXNrcyB0byBxdWV1ZS4KICAqIEBnZnBfZmxhZ3M6IFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgY29udGV4dCBvZiB0aGlzIGNhbGwuCiAgKgogICogc3RhdHVzLCB6ZXJvIGluZGljYXRlcyBzdWNjZXNzLgogICovCi1pbnQgaXNjaV90YXNrX2V4ZWN1dGVfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGludCBudW0sIGdmcF90IGdmcF9mbGFncykKK2ludCBpc2NpX3Rhc2tfZXhlY3V0ZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBpc2NpX2hvc3QgKmlob3N0ID0gZGV2X3RvX2lob3N0KHRhc2stPmRldik7CiAJc3RydWN0IGlzY2lfcmVtb3RlX2RldmljZSAqaWRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWVudW0gc2NpX3N0YXR1cyBzdGF0dXMgPSBTQ0lfRkFJTFVSRTsKIAlib29sIGlvX3JlYWR5OwogCXUxNiB0YWc7CiAKLQlkZXZfZGJnKCZpaG9zdC0+cGRldi0+ZGV2LCAiJXM6IG51bT0lZFxuIiwgX19mdW5jX18sIG51bSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlob3N0LT5zY2ljX2xvY2ssIGZsYWdzKTsKKwlpZGV2ID0gaXNjaV9sb29rdXBfZGV2aWNlKHRhc2stPmRldik7CisJaW9fcmVhZHkgPSBpc2NpX2RldmljZV9pb19yZWFkeShpZGV2LCB0YXNrKTsKKwl0YWcgPSBpc2NpX2FsbG9jX3RhZyhpaG9zdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOwogCi0JZm9yX2VhY2hfc2FzX3Rhc2sobnVtLCB0YXNrKSB7Ci0JCWVudW0gc2NpX3N0YXR1cyBzdGF0dXMgPSBTQ0lfRkFJTFVSRTsKKwlkZXZfZGJnKCZpaG9zdC0+cGRldi0+ZGV2LAorCQkidGFzazogJXAsIGRldjogJXAgaWRldjogJXA6JSNseCBjbWQgPSAlcFxuIiwKKwkJdGFzaywgdGFzay0+ZGV2LCBpZGV2LCBpZGV2ID8gaWRldi0+ZmxhZ3MgOiAwLAorCQl0YXNrLT51bGRkX3Rhc2spOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpaG9zdC0+c2NpY19sb2NrLCBmbGFncyk7Ci0JCWlkZXYgPSBpc2NpX2xvb2t1cF9kZXZpY2UodGFzay0+ZGV2KTsKLQkJaW9fcmVhZHkgPSBpc2NpX2RldmljZV9pb19yZWFkeShpZGV2LCB0YXNrKTsKLQkJdGFnID0gaXNjaV9hbGxvY190YWcoaWhvc3QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpaG9zdC0+c2NpY19sb2NrLCBmbGFncyk7CisJaWYgKCFpZGV2KSB7CisJCWlzY2lfdGFza19yZWZ1c2UoaWhvc3QsIHRhc2ssIFNBU19UQVNLX1VOREVMSVZFUkVELAorCQkJCSBTQVNfREVWSUNFX1VOS05PV04pOworCX0gZWxzZSBpZiAoIWlvX3JlYWR5IHx8IHRhZyA9PSBTQ0lfQ09OVFJPTExFUl9JTlZBTElEX0lPX1RBRykgeworCQkvKiBJbmRpY2F0ZSBRVUVVRV9GVUxMIHNvIHRoYXQgdGhlIHNjc2kgbWlkbGF5ZXIKKwkJICogcmV0cmllcy4KKwkJICAqLworCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLCBTQVNfVEFTS19DT01QTEVURSwKKwkJCQkgU0FTX1FVRVVFX0ZVTEwpOworCX0gZWxzZSB7CisJCS8qIFRoZXJlIGlzIGEgZGV2aWNlIGFuZCBpdCdzIHJlYWR5IGZvciBJL08uICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAotCQlkZXZfZGJnKCZpaG9zdC0+cGRldi0+ZGV2LAotCQkJInRhc2s6ICVwLCBudW06ICVkIGRldjogJXAgaWRldjogJXA6JSNseCBjbWQgPSAlcFxuIiwKLQkJCXRhc2ssIG51bSwgdGFzay0+ZGV2LCBpZGV2LCBpZGV2ID8gaWRldi0+ZmxhZ3MgOiAwLAotCQkJdGFzay0+dWxkZF90YXNrKTsKKwkJaWYgKHRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9BQk9SVEVEKSB7CisJCQkvKiBUaGUgSS9PIHdhcyBhYm9ydGVkLiAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7CiAKLQkJaWYgKCFpZGV2KSB7Ci0JCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLCBTQVNfVEFTS19VTkRFTElWRVJFRCwKLQkJCQkJIFNBU19ERVZJQ0VfVU5LTk9XTik7Ci0JCX0gZWxzZSBpZiAoIWlvX3JlYWR5IHx8IHRhZyA9PSBTQ0lfQ09OVFJPTExFUl9JTlZBTElEX0lPX1RBRykgewotCQkJLyogSW5kaWNhdGUgUVVFVUVfRlVMTCBzbyB0aGF0IHRoZSBzY3NpIG1pZGxheWVyCi0JCQkgKiByZXRyaWVzLgotCQkJICAqLwotCQkJaXNjaV90YXNrX3JlZnVzZShpaG9zdCwgdGFzaywgU0FTX1RBU0tfQ09NUExFVEUsCi0JCQkJCSBTQVNfUVVFVUVfRlVMTCk7CisJCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLAorCQkJCQkgU0FTX1RBU0tfVU5ERUxJVkVSRUQsCisJCQkJCSBTQU1fU1RBVF9UQVNLX0FCT1JURUQpOwogCQl9IGVsc2UgewotCQkJLyogVGhlcmUgaXMgYSBkZXZpY2UgYW5kIGl0J3MgcmVhZHkgZm9yIEkvTy4gKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfQVRfSU5JVElBVE9SOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7CiAKLQkJCWlmICh0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICYgU0FTX1RBU0tfU1RBVEVfQUJPUlRFRCkgewotCQkJCS8qIFRoZSBJL08gd2FzIGFib3J0ZWQuICovCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLAotCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCS8qIGJ1aWxkIGFuZCBzZW5kIHRoZSByZXF1ZXN0LiAqLworCQkJc3RhdHVzID0gaXNjaV9yZXF1ZXN0X2V4ZWN1dGUoaWhvc3QsIGlkZXYsIHRhc2ssIHRhZyk7CiAKLQkJCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLAotCQkJCQkJIFNBU19UQVNLX1VOREVMSVZFUkVELAotCQkJCQkJIFNBTV9TVEFUX1RBU0tfQUJPUlRFRCk7Ci0JCQl9IGVsc2UgewotCQkJCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfQVRfSU5JVElBVE9SOworCQkJaWYgKHN0YXR1cyAhPSBTQ0lfU1VDQ0VTUykgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJCQkvKiBEaWQgbm90IHJlYWxseSBzdGFydCB0aGlzIGNvbW1hbmQuICovCisJCQkJdGFzay0+dGFza19zdGF0ZV9mbGFncyAmPSB+U0FTX1RBU0tfQVRfSU5JVElBVE9SOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwogCi0JCQkJLyogYnVpbGQgYW5kIHNlbmQgdGhlIHJlcXVlc3QuICovCi0JCQkJc3RhdHVzID0gaXNjaV9yZXF1ZXN0X2V4ZWN1dGUoaWhvc3QsIGlkZXYsIHRhc2ssIHRhZyk7Ci0KLQkJCQlpZiAoc3RhdHVzICE9IFNDSV9TVUNDRVNTKSB7Ci0KLQkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwotCQkJCQkvKiBEaWQgbm90IHJlYWxseSBzdGFydCB0aGlzIGNvbW1hbmQuICovCi0JCQkJCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJj0gflNBU19UQVNLX0FUX0lOSVRJQVRPUjsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7Ci0KLQkJCQkJaWYgKHRlc3RfYml0KElERVZfR09ORSwgJmlkZXYtPmZsYWdzKSkgewotCi0JCQkJCQkvKiBJbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2UKLQkJCQkJCSAqIGlzIGdvbmUuCi0JCQkJCQkgKi8KLQkJCQkJCWlzY2lfdGFza19yZWZ1c2UoaWhvc3QsIHRhc2ssCi0JCQkJCQkJU0FTX1RBU0tfVU5ERUxJVkVSRUQsCi0JCQkJCQkJU0FTX0RFVklDRV9VTktOT1dOKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8qIEluZGljYXRlIFFVRVVFX0ZVTEwgc28gdGhhdAotCQkJCQkJICogdGhlIHNjc2kgbWlkbGF5ZXIgcmV0cmllcy4KLQkJCQkJCSAqIElmIHRoZSByZXF1ZXN0IGZhaWxlZCBmb3IKLQkJCQkJCSAqIHJlbW90ZSBkZXZpY2UgcmVhc29ucywgaXQKLQkJCQkJCSAqIGdldHMgcmV0dXJuZWQgYXMKLQkJCQkJCSAqIFNBU19UQVNLX1VOREVMSVZFUkVEIG5leHQKLQkJCQkJCSAqIHRpbWUgdGhyb3VnaC4KLQkJCQkJCSAqLwotCQkJCQkJaXNjaV90YXNrX3JlZnVzZShpaG9zdCwgdGFzaywKLQkJCQkJCQlTQVNfVEFTS19DT01QTEVURSwKLQkJCQkJCQlTQVNfUVVFVUVfRlVMTCk7Ci0JCQkJCX0KKwkJCQlpZiAodGVzdF9iaXQoSURFVl9HT05FLCAmaWRldi0+ZmxhZ3MpKSB7CisJCQkJCS8qIEluZGljYXRlIHRoYXQgdGhlIGRldmljZQorCQkJCQkgKiBpcyBnb25lLgorCQkJCQkgKi8KKwkJCQkJaXNjaV90YXNrX3JlZnVzZShpaG9zdCwgdGFzaywKKwkJCQkJCVNBU19UQVNLX1VOREVMSVZFUkVELAorCQkJCQkJU0FTX0RFVklDRV9VTktOT1dOKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBJbmRpY2F0ZSBRVUVVRV9GVUxMIHNvIHRoYXQKKwkJCQkJICogdGhlIHNjc2kgbWlkbGF5ZXIgcmV0cmllcy4KKwkJCQkJICogSWYgdGhlIHJlcXVlc3QgZmFpbGVkIGZvcgorCQkJCQkgKiByZW1vdGUgZGV2aWNlIHJlYXNvbnMsIGl0CisJCQkJCSAqIGdldHMgcmV0dXJuZWQgYXMKKwkJCQkJICogU0FTX1RBU0tfVU5ERUxJVkVSRUQgbmV4dAorCQkJCQkgKiB0aW1lIHRocm91Z2guCisJCQkJCSAqLworCQkJCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLAorCQkJCQkJU0FTX1RBU0tfQ09NUExFVEUsCisJCQkJCQlTQVNfUVVFVUVfRlVMTCk7CiAJCQkJfQogCQkJfQogCQl9Ci0JCWlmIChzdGF0dXMgIT0gU0NJX1NVQ0NFU1MgJiYgdGFnICE9IFNDSV9DT05UUk9MTEVSX0lOVkFMSURfSU9fVEFHKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOwotCQkJLyogY29tbWFuZCBuZXZlciBoaXQgdGhlIGRldmljZSwgc28ganVzdCBmcmVlCi0JCQkgKiB0aGUgdGNpIGFuZCBza2lwIHRoZSBzZXF1ZW5jZSBpbmNyZW1lbnQKLQkJCSAqLwotCQkJaXNjaV90Y2lfZnJlZShpaG9zdCwgSVNDSV9UQUdfVENJKHRhZykpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOwotCQl9Ci0JCWlzY2lfcHV0X2RldmljZShpZGV2KTsKIAl9CisKKwlpZiAoc3RhdHVzICE9IFNDSV9TVUNDRVNTICYmIHRhZyAhPSBTQ0lfQ09OVFJPTExFUl9JTlZBTElEX0lPX1RBRykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOworCQkvKiBjb21tYW5kIG5ldmVyIGhpdCB0aGUgZGV2aWNlLCBzbyBqdXN0IGZyZWUKKwkJICogdGhlIHRjaSBhbmQgc2tpcCB0aGUgc2VxdWVuY2UgaW5jcmVtZW50CisJCSAqLworCQlpc2NpX3RjaV9mcmVlKGlob3N0LCBJU0NJX1RBR19UQ0kodGFnKSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlob3N0LT5zY2ljX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlpc2NpX3B1dF9kZXZpY2UoaWRldik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NpL3Rhc2suaCBiL2RyaXZlcnMvc2NzaS9pc2NpL3Rhc2suaAppbmRleCA5YzA2Y2JhLi44ZjQ1MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjaS90YXNrLmgKKysrIGIvZHJpdmVycy9zY3NpL2lzY2kvdGFzay5oCkBAIC0xMzEsNyArMTMxLDYgQEAKIAogaW50IGlzY2lfdGFza19leGVjdXRlX3Rhc2soCiAJc3RydWN0IHNhc190YXNrICp0YXNrLAotCWludCBudW0sCiAJZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIAogaW50IGlzY2lfdGFza19hYm9ydF90YXNrKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCmluZGV4IDQyN2FmMGYuLjBiOGFmMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTk1Miw3ICs5NTIsNyBAQAogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSAiaVNDU0kgSW5pdGlhdG9yIG92ZXIgVENQL0lQIiwKIAkucXVldWVjb21tYW5kICAgICAgICAgICA9IGlzY3NpX3F1ZXVlY29tbWFuZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuY2FuX3F1ZXVlCQk9IElTQ1NJX0RFRl9YTUlUX0NNRFNfTUFYIC0gMSwKIAkuc2dfdGFibGVzaXplCQk9IDQwOTYsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKQEAgLTk2Niw2ICs5NjYsNyBAQAogCS50YXJnZXRfYWxsb2MJCT0gaXNjc2lfdGFyZ2V0X2FsbG9jLAogCS5wcm9jX25hbWUJCT0gImlzY3NpX3RjcCIsCiAJLnRoaXNfaWQJCT0gLTEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGlzY3NpX3N3X3RjcF90cmFuc3BvcnQgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKaW5kZXggMWQ3ZTc2ZS4uYzY3OTU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwpAQCAtMjE2MCw2MiArMjE2MCwxMiBAQAogCWlmICghcnBvcnQgfHwgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpKQogCQlyZXR1cm4gLUVOWElPOwogCi0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIEZDX0ZDUF9ERkxUX1FVRVVFX0RFUFRIKTsKLQllbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLAotCQkJCQlGQ19GQ1BfREZMVF9RVUVVRV9ERVBUSCk7Ci0KKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBGQ19GQ1BfREZMVF9RVUVVRV9ERVBUSCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX3NsYXZlX2FsbG9jKTsKIAogLyoqCi0gKiBmY19jaGFuZ2VfcXVldWVfZGVwdGgoKSAtIENoYW5nZSBhIGRldmljZSdzIHF1ZXVlIGRlcHRoCi0gKiBAc2RldjogICBUaGUgU0NTSSBkZXZpY2Ugd2hvc2UgcXVldWUgZGVwdGggaXMgdG8gY2hhbmdlCi0gKiBAcWRlcHRoOiBUaGUgbmV3IHF1ZXVlIGRlcHRoCi0gKiBAcmVhc29uOiBUaGUgcmVzYXNvbiBmb3IgdGhlIGNoYW5nZQotICovCi1pbnQgZmNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpOwotCQlicmVhazsKLQljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLUVYUE9SVF9TWU1CT0woZmNfY2hhbmdlX3F1ZXVlX2RlcHRoKTsKLQotLyoqCi0gKiBmY19jaGFuZ2VfcXVldWVfdHlwZSgpIC0gQ2hhbmdlIGEgZGV2aWNlJ3MgcXVldWUgdHlwZQotICogQHNkZXY6ICAgICBUaGUgU0NTSSBkZXZpY2Ugd2hvc2UgcXVldWUgZGVwdGggaXMgdG8gY2hhbmdlCi0gKiBAdGFnX3R5cGU6IElkZW50aWZpZXIgZm9yIHF1ZXVlIHR5cGUKLSAqLwotaW50IGZjX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZ190eXBlKQotewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIHRhZ190eXBlKTsKLQkJaWYgKHRhZ190eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnX3R5cGUgPSAwOwotCi0JcmV0dXJuIHRhZ190eXBlOwotfQotRVhQT1JUX1NZTUJPTChmY19jaGFuZ2VfcXVldWVfdHlwZSk7Ci0KLS8qKgogICogZmNfZmNwX2Rlc3RvcnkoKSAtIFRlYXIgZG93biB0aGUgRkNQIGxheWVyIGZvciBhIGdpdmVuIGxvY2FsIHBvcnQKICAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgdGhhdCBubyBsb25nZXIgbmVlZHMgdGhlIEZDUCBsYXllcgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IDBkOGJjNmMuLjgwNTNmMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC0xNzcxLDI1ICsxNzcxLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3F1ZXVlY29tbWFuZCk7CiAKLWludCBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgsIGludCByZWFzb24pCi17Ci0Jc3dpdGNoIChyZWFzb24pIHsKLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUkFNUF9VUDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgpOwotCiBpbnQgaXNjc2lfdGFyZ2V0X2FsbG9jKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKIAlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uID0gc3RhcmdldF90b19zZXNzaW9uKHN0YXJnZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYwppbmRleCA3NjYwOThhLi41Nzc3NzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYwpAQCAtMTcxLDcgKzE3MSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwogCiBxY19hbHJlYWR5X2dvbmU6Ci0JbGlzdF9kZWxfaW5pdCgmdGFzay0+bGlzdCk7CiAJc2FzX2ZyZWVfdGFzayh0YXNrKTsKIH0KIApAQCAtMjQ0LDEyICsyNDMsNyBAQAogCWlmIChxYy0+c2NzaWNtZCkKIAkJQVNTSUdOX1NBU19UQVNLKHFjLT5zY3NpY21kLCB0YXNrKTsKIAotCWlmIChzYXNfaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtIDwgMikKLQkJcmV0ID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCAxLCBHRlBfQVRPTUlDKTsKLQllbHNlCi0JCXJldCA9IHNhc19xdWV1ZV91cCh0YXNrKTsKLQotCS8qIEV4YW1pbmUgKi8KKwlyZXQgPSBpLT5kZnQtPmxsZGRfZXhlY3V0ZV90YXNrKHRhc2ssIEdGUF9BVE9NSUMpOwogCWlmIChyZXQpIHsKIAkJU0FTX0RQUklOVEsoImxsZGRfZXhlY3V0ZV90YXNrIHJldHVybmVkOiAlZFxuIiwgcmV0KTsKIApAQCAtNDg1LDcgKzQ3OSw2IEBACiAKIAlyZXR1cm47CiAgb3V0OgotCWxpc3RfZGVsX2luaXQoJnRhc2stPmxpc3QpOwogCXNhc19mcmVlX3Rhc2sodGFzayk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCmluZGV4IDBjYWM3ZDguLjAyMmJiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYwpAQCAtOTYsNyArOTYsNyBAQAogCQl0YXNrLT5zbG93X3Rhc2stPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgU01QX1RJTUVPVVQqSFo7CiAJCWFkZF90aW1lcigmdGFzay0+c2xvd190YXNrLT50aW1lcik7CiAKLQkJcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCAxLCBHRlBfS0VSTkVMKTsKKwkJcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAocmVzKSB7CiAJCQlkZWxfdGltZXIoJnRhc2stPnNsb3dfdGFzay0+dGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jCmluZGV4IGRiYzhhNzkuLjM2MmRhNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmMKQEAgLTQ1LDcgKzQ1LDYgQEAKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2sgPSBrbWVtX2NhY2hlX3phbGxvYyhzYXNfdGFza19jYWNoZSwgZmxhZ3MpOwogCiAJaWYgKHRhc2spIHsKLQkJSU5JVF9MSVNUX0hFQUQoJnRhc2stPmxpc3QpOwogCQlzcGluX2xvY2tfaW5pdCgmdGFzay0+dGFza19zdGF0ZV9sb2NrKTsKIAkJdGFzay0+dGFza19zdGF0ZV9mbGFncyA9IFNBU19UQVNLX1NUQVRFX1BFTkRJTkc7CiAJfQpAQCAtNzcsNyArNzYsNiBAQAogdm9pZCBzYXNfZnJlZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaykKIHsKIAlpZiAodGFzaykgewotCQlCVUdfT04oIWxpc3RfZW1wdHkoJnRhc2stPmxpc3QpKTsKIAkJa2ZyZWUodGFzay0+c2xvd190YXNrKTsKIAkJa21lbV9jYWNoZV9mcmVlKHNhc190YXNrX2NhY2hlLCB0YXNrKTsKIAl9CkBAIC0xMjcsMTEgKzEyNSw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJnNhc19oYS0+cGh5X3BvcnRfbG9jayk7CiAJc2FzX2hhc2hfYWRkcihzYXNfaGEtPmhhc2hlZF9zYXNfYWRkciwgc2FzX2hhLT5zYXNfYWRkcik7CiAKLQlpZiAoc2FzX2hhLT5sbGRkX3F1ZXVlX3NpemUgPT0gMCkKLQkJc2FzX2hhLT5sbGRkX3F1ZXVlX3NpemUgPSAxOwotCWVsc2UgaWYgKHNhc19oYS0+bGxkZF9xdWV1ZV9zaXplID09IC0xKQotCQlzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZSA9IDEyODsgLyogU2FuaXR5ICovCi0KIAlzZXRfYml0KFNBU19IQV9SRUdJU1RFUkVELCAmc2FzX2hhLT5zdGF0ZSk7CiAJc3Bpbl9sb2NrX2luaXQoJnNhc19oYS0+bG9jayk7CiAJbXV0ZXhfaW5pdCgmc2FzX2hhLT5kcmFpbl9tdXRleCk7CkBAIC0xNTcsMTUgKzE1MCw2IEBACiAJCWdvdG8gVW5kb19wb3J0czsKIAl9CiAKLQlpZiAoc2FzX2hhLT5sbGRkX21heF9leGVjdXRlX251bSA+IDEpIHsKLQkJZXJyb3IgPSBzYXNfaW5pdF9xdWV1ZShzYXNfaGEpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiY291bGRuJ3Qgc3RhcnQgcXVldWUgdGhyZWFkOiVkLCAiCi0JCQkgICAgICAgInJ1bm5pbmcgaW4gZGlyZWN0IG1vZGVcbiIsIGVycm9yKTsKLQkJCXNhc19oYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPSAxOwotCQl9Ci0JfQotCiAJSU5JVF9MSVNUX0hFQUQoJnNhc19oYS0+ZWhfZG9uZV9xKTsKIAlJTklUX0xJU1RfSEVBRCgmc2FzX2hhLT5laF9hdGFfcSk7CiAKQEAgLTIwMSwxMSArMTg1LDYgQEAKIAlfX3Nhc19kcmFpbl93b3JrKHNhc19oYSk7CiAJbXV0ZXhfdW5sb2NrKCZzYXNfaGEtPmRyYWluX211dGV4KTsKIAotCWlmIChzYXNfaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID4gMSkgewotCQlzYXNfc2h1dGRvd25fcXVldWUoc2FzX2hhKTsKLQkJc2FzX2hhLT5sbGRkX21heF9leGVjdXRlX251bSA9IDE7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmggYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbnRlcm5hbC5oCmluZGV4IDdlN2JhODMuLjljZjBiYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW50ZXJuYWwuaApAQCAtNjYsOSArNjYsNyBAQAogCiBlbnVtIGJsa19laF90aW1lcl9yZXR1cm4gc2FzX3Njc2lfdGltZWRfb3V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiAKLWludCAgc2FzX2luaXRfcXVldWUoc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhc19oYSk7CiBpbnQgIHNhc19pbml0X2V2ZW50cyhzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhKTsKLXZvaWQgc2FzX3NodXRkb3duX3F1ZXVlKHN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEpOwogdm9pZCBzYXNfZGlzYWJsZV9yZXZhbGlkYXRpb24oc3RydWN0IHNhc19oYV9zdHJ1Y3QgKmhhKTsKIHZvaWQgc2FzX2VuYWJsZV9yZXZhbGlkYXRpb24oc3RydWN0IHNhc19oYV9zdHJ1Y3QgKmhhKTsKIHZvaWQgX19zYXNfZHJhaW5fd29yayhzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqaGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwppbmRleCAyNGU0NzdkLi43MjkxOGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwpAQCAtMTEyLDcgKzExMiw2IEBACiAKIAlzYy0+cmVzdWx0ID0gKGhzIDw8IDE2KSB8IHN0YXQ7CiAJQVNTSUdOX1NBU19UQVNLKHNjLCBOVUxMKTsKLQlsaXN0X2RlbF9pbml0KCZ0YXNrLT5saXN0KTsKIAlzYXNfZnJlZV90YXNrKHRhc2spOwogfQogCkBAIC0xMzgsNyArMTM3LDYgQEAKIAogCWlmICh1bmxpa2VseSghc2MpKSB7CiAJCVNBU19EUFJJTlRLKCJ0YXNrX2RvbmUgY2FsbGVkIHdpdGggbm9uIGV4aXN0aW5nIFNDU0kgY21uZCFcbiIpOwotCQlsaXN0X2RlbF9pbml0KCZ0YXNrLT5saXN0KTsKIAkJc2FzX2ZyZWVfdGFzayh0YXNrKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE3OSwzMSArMTc3LDEwIEBACiAJcmV0dXJuIHRhc2s7CiB9CiAKLWludCBzYXNfcXVldWVfdXAoc3RydWN0IHNhc190YXNrICp0YXNrKQotewotCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSB0YXNrLT5kZXYtPnBvcnQtPmhhOwotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKGxpc3QpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmUtPnRhc2tfcXVldWVfbG9jaywgZmxhZ3MpOwotCWlmIChzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZSA8IGNvcmUtPnRhc2tfcXVldWVfc2l6ZSArIDEpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29yZS0+dGFza19xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtU0FTX1FVRVVFX0ZVTEw7Ci0JfQotCWxpc3RfYWRkX3RhaWwoJnRhc2stPmxpc3QsICZjb3JlLT50YXNrX3F1ZXVlKTsKLQljb3JlLT50YXNrX3F1ZXVlX3NpemUgKz0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQl3YWtlX3VwX3Byb2Nlc3MoY29yZS0+cXVldWVfdGhyZWFkKTsKLQotCXJldHVybiAwOwotfQotCiBpbnQgc2FzX3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IHNhc19pbnRlcm5hbCAqaSA9IHRvX3Nhc19pbnRlcm5hbChob3N0LT50cmFuc3BvcnR0KTsKIAlzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2ID0gY21kX3RvX2RvbWFpbl9kZXYoY21kKTsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gZGV2LT5wb3J0LT5oYTsKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2s7CiAJaW50IHJlcyA9IDA7CiAKQEAgLTIyNCwxMiArMjAxLDcgQEAKIAlpZiAoIXRhc2spCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCi0JLyogUXVldWUgdXAsIERpcmVjdCBNb2RlIG9yIFRhc2sgQ29sbGVjdG9yIE1vZGUuICovCi0JaWYgKHNhc19oYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPCAyKQotCQlyZXMgPSBpLT5kZnQtPmxsZGRfZXhlY3V0ZV90YXNrKHRhc2ssIDEsIEdGUF9BVE9NSUMpOwotCWVsc2UKLQkJcmVzID0gc2FzX3F1ZXVlX3VwKHRhc2spOwotCisJcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzKQogCQlnb3RvIG91dF9mcmVlX3Rhc2s7CiAJcmV0dXJuIDA7CkBAIC0zMjMsMzcgKzI5NSwxNyBAQAogCVRBU0tfSVNfRE9ORSwKIAlUQVNLX0lTX0FCT1JURUQsCiAJVEFTS19JU19BVF9MVSwKLQlUQVNLX0lTX05PVF9BVF9IQSwKIAlUQVNLX0lTX05PVF9BVF9MVSwKIAlUQVNLX0FCT1JUX0ZBSUxFRCwKIH07CiAKIHN0YXRpYyBlbnVtIHRhc2tfZGlzcG9zaXRpb24gc2FzX3Njc2lfZmluZF90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqaGEgPSB0YXNrLT5kZXYtPnBvcnQtPmhhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIHJlczsKIAlzdHJ1Y3Qgc2FzX2ludGVybmFsICpzaSA9CiAJCXRvX3Nhc19pbnRlcm5hbCh0YXNrLT5kZXYtPnBvcnQtPmhhLT5jb3JlLnNob3N0LT50cmFuc3BvcnR0KTsKIAotCWlmIChoYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPiAxKSB7Ci0JCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmaGEtPmNvcmU7Ci0JCXN0cnVjdCBzYXNfdGFzayAqdCwgKm47Ci0KLQkJbXV0ZXhfbG9jaygmY29yZS0+dGFza19xdWV1ZV9mbHVzaCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHQsIG4sICZjb3JlLT50YXNrX3F1ZXVlLCBsaXN0KQotCQkJaWYgKHRhc2sgPT0gdCkgewotCQkJCWxpc3RfZGVsX2luaXQoJnQtPmxpc3QpOwotCQkJCWJyZWFrOwotCQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJbXV0ZXhfdW5sb2NrKCZjb3JlLT50YXNrX3F1ZXVlX2ZsdXNoKTsKLQotCQlpZiAodGFzayA9PSB0KQotCQkJcmV0dXJuIFRBU0tfSVNfTk9UX0FUX0hBOwotCX0KLQogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKIAkJU0FTX0RQUklOVEsoIiVzOiBhYm9ydGluZyB0YXNrIDB4JXBcbiIsIF9fZnVuY19fLCB0YXNrKTsKIAkJcmVzID0gc2ktPmRmdC0+bGxkZF9hYm9ydF90YXNrKHRhc2spOwpAQCAtNjY3LDE0ICs2MTksNiBAQAogCQljbWQtPmVoX2VmbGFncyA9IDA7CiAKIAkJc3dpdGNoIChyZXMpIHsKLQkJY2FzZSBUQVNLX0lTX05PVF9BVF9IQToKLQkJCVNBU19EUFJJTlRLKCIlczogdGFzayAweCVwIGlzIG5vdCBhdCBoYTogJXNcbiIsCi0JCQkJICAgIF9fZnVuY19fLCB0YXNrLAotCQkJCSAgICBjbWQtPnJldHJpZXMgPyAicmV0cnkiIDogImFib3J0ZWQiKTsKLQkJCWlmIChjbWQtPnJldHJpZXMpCi0JCQkJY21kLT5yZXRyaWVzLS07Ci0JCQlzYXNfZWhfZmluaXNoX2NtZChjbWQpOwotCQkJY29udGludWU7CiAJCWNhc2UgVEFTS19JU19ET05FOgogCQkJU0FTX0RQUklOVEsoIiVzOiB0YXNrIDB4JXAgaXMgZG9uZVxuIiwgX19mdW5jX18sCiAJCQkJICAgIHRhc2spOwpAQCAtODM2LDkgKzc4MCw2IEBACiAJCXNjc2lfZWhfcmVhZHlfZGV2cyhzaG9zdCwgJmVoX3dvcmtfcSwgJmhhLT5laF9kb25lX3EpOwogCiBvdXQ6Ci0JaWYgKGhhLT5sbGRkX21heF9leGVjdXRlX251bSA+IDEpCi0JCXdha2VfdXBfcHJvY2VzcyhoYS0+Y29yZS5xdWV1ZV90aHJlYWQpOwotCiAJc2FzX2VoX2hhbmRsZV9yZXNldHMoc2hvc3QpOwogCiAJLyogbm93IGxpbmsgaW50byBsaWJhdGEgZWggLS0tIGlmIHdlIGhhdmUgYW55IGF0YSBkZXZpY2VzICovCkBAIC05NDAsMTUgKzg4MSwxMiBAQAogCXNhc19yZWFkX3BvcnRfbW9kZV9wYWdlKHNjc2lfZGV2KTsKIAogCWlmIChzY3NpX2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzY3NpX2RldiwgTVNHX1NJTVBMRV9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzY3NpX2RldiwgU0FTX0RFRl9RRCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBTQVNfREVGX1FEKTsKIAl9IGVsc2UgewogCQlTQVNfRFBSSU5USygiZGV2aWNlICVsbHgsIExVTiAlbGx4IGRvZXNuJ3Qgc3VwcG9ydCAiCiAJCQkgICAgIlRDUVxuIiwgU0FTX0FERFIoZGV2LT5zYXNfYWRkciksCiAJCQkgICAgc2NzaV9kZXYtPmx1bik7Ci0JCXNjc2lfZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMDsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2NzaV9kZXYsIDApOwotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNjc2lfZGV2LCAxKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2NzaV9kZXYsIDEpOwogCX0KIAogCXNjc2lfZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKQEAgLTk1Niw0NyArODk0LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoLCBpbnQgcmVhc29uKQoraW50IHNhc19jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCiB7CiAJc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHNkZXZfdG9fZG9tYWluX2RldihzZGV2KTsKIAogCWlmIChkZXZfaXNfc2F0YShkZXYpKQotCQlyZXR1cm4gX19hdGFfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldi0+c2F0YV9kZXYuYXAsIHNkZXYsIGRlcHRoLAotCQkJCQkJcmVhc29uKTsKKwkJcmV0dXJuIF9fYXRhX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYtPnNhdGFfZGV2LmFwLCBzZGV2LCBkZXB0aCk7CiAKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6Ci0JCWlmICghc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJCWRlcHRoID0gMTsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9RRlVMTDoKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIGRlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXJldHVybiBkZXB0aDsKKwlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCWRlcHRoID0gMTsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgZGVwdGgpOwogfQogCi1pbnQgc2FzX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCBxdCkKK2ludCBzYXNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldiwgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHNkZXZfdG9fZG9tYWluX2RldihzY3NpX2Rldik7Ci0KLQlpZiAoZGV2X2lzX3NhdGEoZGV2KSkKKwlpZiAoZGV2X2lzX3NhdGEoc2Rldl90b19kb21haW5fZGV2KHNjc2lfZGV2KSkpCiAJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFzY3NpX2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJcmV0dXJuIDA7Ci0KLQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNjc2lfZGV2LCAxKTsKLQotCXNjc2lfc2V0X3RhZ190eXBlKHNjc2lfZGV2LCBxdCk7Ci0Jc2NzaV9hY3RpdmF0ZV90Y3Eoc2NzaV9kZXYsIHNjc2lfZGV2LT5xdWV1ZV9kZXB0aCk7Ci0KLQlyZXR1cm4gcXQ7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUoc2NzaV9kZXYsIHR5cGUpOwogfQogCiBpbnQgc2FzX2Jpb3NfcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldiwKQEAgLTEwMTEsMTIxICs5MjUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tIFRhc2sgQ29sbGVjdG9yIFRocmVhZCBpbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tICovCi0KLXN0YXRpYyB2b2lkIHNhc19xdWV1ZShzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhKQotewotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKHEpOwotCWludCBjYW5fcXVldWU7Ci0JaW50IHJlczsKLQlzdHJ1Y3Qgc2FzX2ludGVybmFsICppID0gdG9fc2FzX2ludGVybmFsKGNvcmUtPnNob3N0LT50cmFuc3BvcnR0KTsKLQotCW11dGV4X2xvY2soJmNvcmUtPnRhc2tfcXVldWVfZmx1c2gpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJgotCSAgICAgICAhbGlzdF9lbXB0eSgmY29yZS0+dGFza19xdWV1ZSkgJiYKLQkgICAgICAgIXRlc3RfYml0KFNBU19IQV9GUk9aRU4sICZzYXNfaGEtPnN0YXRlKSkgewotCi0JCWNhbl9xdWV1ZSA9IHNhc19oYS0+bGxkZF9xdWV1ZV9zaXplIC0gY29yZS0+dGFza19xdWV1ZV9zaXplOwotCQlpZiAoY2FuX3F1ZXVlID49IDApIHsKLQkJCWNhbl9xdWV1ZSA9IGNvcmUtPnRhc2tfcXVldWVfc2l6ZTsKLQkJCWxpc3Rfc3BsaWNlX2luaXQoJmNvcmUtPnRhc2tfcXVldWUsICZxKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBsaXN0X2hlYWQgKmEsICpuOwotCi0JCQljYW5fcXVldWUgPSBzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZTsKLQkJCWxpc3RfZm9yX2VhY2hfc2FmZShhLCBuLCAmY29yZS0+dGFza19xdWV1ZSkgewotCQkJCWxpc3RfbW92ZV90YWlsKGEsICZxKTsKLQkJCQlpZiAoLS1jYW5fcXVldWUgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYW5fcXVldWUgPSBzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZTsKLQkJfQotCQljb3JlLT50YXNrX3F1ZXVlX3NpemUgLT0gY2FuX3F1ZXVlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJewotCQkJc3RydWN0IHNhc190YXNrICp0YXNrID0gbGlzdF9lbnRyeShxLm5leHQsCi0JCQkJCQkJICAgc3RydWN0IHNhc190YXNrLAotCQkJCQkJCSAgIGxpc3QpOwotCQkJbGlzdF9kZWxfaW5pdCgmcSk7Ci0JCQlyZXMgPSBpLT5kZnQtPmxsZGRfZXhlY3V0ZV90YXNrKHRhc2ssIGNhbl9xdWV1ZSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCWlmICh1bmxpa2VseShyZXMpKQotCQkJCV9fbGlzdF9hZGQoJnEsIHRhc2stPmxpc3QucHJldiwgJnRhc2stPmxpc3QpOwotCQl9Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHJlcykgewotCQkJbGlzdF9zcGxpY2VfaW5pdCgmcSwgJmNvcmUtPnRhc2tfcXVldWUpOyAvKmF0IGhlYWQqLwotCQkJY29yZS0+dGFza19xdWV1ZV9zaXplICs9IGNhbl9xdWV1ZTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJmNvcmUtPnRhc2tfcXVldWVfZmx1c2gpOwotfQotCi0vKioKLSAqIHNhc19xdWV1ZV90aHJlYWQgLS0gVGhlIFRhc2sgQ29sbGVjdG9yIHRocmVhZAotICogQF9zYXNfaGE6IHBvaW50ZXIgdG8gc3RydWN0IHNhc19oYQotICovCi1zdGF0aWMgaW50IHNhc19xdWV1ZV90aHJlYWQodm9pZCAqX3Nhc19oYSkKLXsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gX3Nhc19oYTsKLQotCXdoaWxlICgxKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlKCk7Ci0JCXNhc19xdWV1ZShzYXNfaGEpOwotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBzYXNfaW5pdF9xdWV1ZShzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhKQotewotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmNvcmUtPnRhc2tfcXVldWVfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmY29yZS0+dGFza19xdWV1ZV9mbHVzaCk7Ci0JY29yZS0+dGFza19xdWV1ZV9zaXplID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmY29yZS0+dGFza19xdWV1ZSk7Ci0KLQljb3JlLT5xdWV1ZV90aHJlYWQgPSBrdGhyZWFkX3J1bihzYXNfcXVldWVfdGhyZWFkLCBzYXNfaGEsCi0JCQkJCSAic2FzX3F1ZXVlXyVkIiwgY29yZS0+c2hvc3QtPmhvc3Rfbm8pOwotCWlmIChJU19FUlIoY29yZS0+cXVldWVfdGhyZWFkKSkKLQkJcmV0dXJuIFBUUl9FUlIoY29yZS0+cXVldWVfdGhyZWFkKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBzYXNfc2h1dGRvd25fcXVldWUoc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhc19oYSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCXN0cnVjdCBzYXNfdGFzayAqdGFzaywgKm47Ci0KLQlrdGhyZWFkX3N0b3AoY29yZS0+cXVldWVfdGhyZWFkKTsKLQotCWlmICghbGlzdF9lbXB0eSgmY29yZS0+dGFza19xdWV1ZSkpCi0JCVNBU19EUFJJTlRLKCJIQTogJWxseDogc2NzaSBjb3JlIHRhc2sgcXVldWUgaXMgTk9UIGVtcHR5IT9cbiIsCi0JCQkgICAgU0FTX0FERFIoc2FzX2hhLT5zYXNfYWRkcikpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmUtPnRhc2tfcXVldWVfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YXNrLCBuLCAmY29yZS0+dGFza19xdWV1ZSwgbGlzdCkgewotCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSB0YXNrLT51bGRkX3Rhc2s7Ci0KLQkJbGlzdF9kZWxfaW5pdCgmdGFzay0+bGlzdCk7Ci0KLQkJQVNTSUdOX1NBU19UQVNLKGNtZCwgTlVMTCk7Ci0JCXNhc19mcmVlX3Rhc2sodGFzayk7Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwotCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLX0KLQogLyoKICAqIFRlbGwgYW4gdXBwZXIgbGF5ZXIgdGhhdCBpdCBuZWVkcyB0byBpbml0aWF0ZSBhbiBhYm9ydCBmb3IgYSBnaXZlbiB0YXNrLgogICogVGhpcyBzaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBieSBhbiBMTERELgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCBiOTkzOTlmLi5mZDg1OTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtMjQzLDEyOCArMjQzLDYgQEAKIH0KIAogLyoqCi0gKiBscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudCAtIFBvc3RzIGEgcXVldWVkZXB0aCBjaGFuZ2UgZXZlbnQKLSAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KLSAqIEB2cG9ydDogUG9pbnRlciB0byB2cG9ydCBvYmplY3QuCi0gKiBAbmRscDogUG9pbnRlciB0byBGQyBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0LgotICogQGx1bjogTHVuIG51bWJlciBvZiB0aGUgc2NzaSBkZXZpY2UuCi0gKiBAb2xkX3ZhbDogT2xkIHZhbHVlIG9mIHRoZSBxdWV1ZSBkZXB0aC4KLSAqIEBuZXdfdmFsOiBOZXcgdmFsdWUgb2YgdGhlIHF1ZXVlIGRlcHRoLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYW4gZXZlbnQgdG8gdGhlIG1nbXQgYXBwbGljYXRpb24gaW5kaWNhdGluZwotICogdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoLgotICoqLwotc3RhdGljIHZvaWQKLWxwZmNfc2VuZF9zZGV2X3F1ZXVlZGVwdGhfY2hhbmdlX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKLQkJc3RydWN0IGxwZmNfdnBvcnQgICp2cG9ydCwKLQkJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCi0JCXVpbnQ2NF90IGx1biwKLQkJdWludDMyX3Qgb2xkX3ZhbCwKLQkJdWludDMyX3QgbmV3X3ZhbCkKLXsKLQlzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKmZhc3RfcGF0aF9ldnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWZhc3RfcGF0aF9ldnQgPSBscGZjX2FsbG9jX2Zhc3RfZXZ0KHBoYmEpOwotCWlmICghZmFzdF9wYXRoX2V2dCkKLQkJcmV0dXJuOwotCi0JZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQuZXZlbnRfdHlwZSA9Ci0JCUZDX1JFR19TQ1NJX0VWRU5UOwotCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50LnN1YmNhdGVnb3J5ID0KLQkJTFBGQ19FVkVOVF9WQVJRVUVERVBUSDsKLQotCS8qIFJlcG9ydCBhbGwgbHVucyB3aXRoIGNoYW5nZSBpbiBxdWV1ZSBkZXB0aCAqLwotCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50Lmx1biA9IGx1bjsKLQlpZiAobmRscCAmJiBOTFBfQ0hLX05PREVfQUNUKG5kbHApKSB7Ci0JCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQud3dwbiwKLQkJCSZuZGxwLT5ubHBfcG9ydG5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7Ci0JCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQud3dubiwKLQkJCSZuZGxwLT5ubHBfbm9kZW5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7Ci0JfQotCi0JZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0Lm9sZHZhbCA9IG9sZF92YWw7Ci0JZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0Lm5ld3ZhbCA9IG5ld192YWw7Ci0JZmFzdF9wYXRoX2V2dC0+dnBvcnQgPSB2cG9ydDsKLQotCWZhc3RfcGF0aF9ldnQtPndvcmtfZXZ0LmV2dCA9IExQRkNfRVZUX0ZBU1RQQVRIX01HTVRfRVZUOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmZmFzdF9wYXRoX2V2dC0+d29ya19ldnQuZXZ0X2xpc3RwLCAmcGhiYS0+d29ya19saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7Ci0JbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKLQotCXJldHVybjsKLX0KLQotLyoqCi0gKiBscGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIEFsdGVyIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoCi0gKiBAc2RldjogUG9pbnRlciB0aGUgc2NzaSBkZXZpY2Ugb24gd2hpY2ggdG8gY2hhbmdlIHRoZSBxdWV1ZSBkZXB0aC4KLSAqIEBxZGVwdGg6IE5ldyBxdWV1ZSBkZXB0aCB0byBzZXQgdGhlIHNkZXYgdG8uCi0gKiBAcmVhc29uOiBUaGUgcmVhc29uIGZvciB0aGUgcXVldWUgZGVwdGggY2hhbmdlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBtaWRsYXllciBhbmQgdGhlIExMRCB0byBhbHRlciB0aGUgcXVldWUKLSAqIGRlcHRoIGZvciBhIHNjc2kgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHF1ZXVlIGRlcHRoIHRvIHRoZSBuZXcKLSAqIHZhbHVlIGFuZCBzZW5kcyBhbiBldmVudCBvdXQgdG8gbG9nIHRoZSBxdWV1ZSBkZXB0aCBjaGFuZ2UuCi0gKiovCi1zdGF0aWMgaW50Ci1scGZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsIGludCByZWFzb24pCi17Ci0Jc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNkZXYtPmhvc3QtPmhvc3RkYXRhOwotCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7Ci0Jc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBuZXdfcXVldWVfZGVwdGgsIG9sZF9xdWV1ZV9kZXB0aDsKLQotCW9sZF9xdWV1ZV9kZXB0aCA9IHNkZXYtPnF1ZXVlX2RlcHRoOwotCi0Jc3dpdGNoIChyZWFzb24pIHsKLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JCS8qIGNoYW5nZSByZXF1ZXN0IGZyb20gc3lzZnMsIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU0NTSV9RREVQVEhfUkFNUF9VUDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCWlmIChzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKSA9PSAwKQotCQkJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotCi0JCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fV0FSTklORywgTE9HX0ZDUCwKLQkJCQkgIjA3MTEgZGV0ZWN0ZWQgcXVldWUgZnVsbCAtIGx1biBxdWV1ZSAiCi0JCQkJICJkZXB0aCBhZGp1c3RlZCB0byAlZC5cbiIsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCW5ld19xdWV1ZV9kZXB0aCA9IHNkZXYtPnF1ZXVlX2RlcHRoOwotCXJkYXRhID0gbHBmY19ycG9ydF9kYXRhX2Zyb21fc2NzaV9kZXZpY2Uoc2Rldik7Ci0JaWYgKHJkYXRhKQotCQlscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudChwaGJhLCB2cG9ydCwKLQkJCQkJCSAgICAgICByZGF0YS0+cG5vZGUsIHNkZXYtPmx1biwKLQkJCQkJCSAgICAgICBvbGRfcXVldWVfZGVwdGgsCi0JCQkJCQkgICAgICAgbmV3X3F1ZXVlX2RlcHRoKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci0KLS8qKgotICogbHBmY19jaGFuZ2VfcXVldWVfdHlwZSgpIC0gQ2hhbmdlIGEgZGV2aWNlJ3Mgc2NzaSB0YWcgcXVldWluZyB0eXBlCi0gKiBAc2RldjogUG9pbnRlciB0aGUgc2NzaSBkZXZpY2Ugd2hvc2UgcXVldWUgZGVwdGggaXMgdG8gY2hhbmdlCi0gKiBAdGFnX3R5cGU6IElkZW50aWZpZXIgZm9yIHF1ZXVlIHRhZyB0eXBlCi0gKi8KLXN0YXRpYyBpbnQKLWxwZmNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnX3R5cGUpCi17Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOwotCQlpZiAodGFnX3R5cGUpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQl0YWdfdHlwZSA9IDA7Ci0KLQlyZXR1cm4gdGFnX3R5cGU7Ci19Ci0KLS8qKgogICogbHBmY19yYW1wZG93bl9xdWV1ZV9kZXB0aCAtIFBvc3QgUkFNUF9ET1dOX1FVRVVFIGV2ZW50IHRvIHdvcmtlciB0aHJlYWQKICAqIEBwaGJhOiBUaGUgSGJhIGZvciB3aGljaCB0aGlzIGNhbGwgaXMgYmVpbmcgZXhlY3V0ZWQuCiAgKgpAQCAtNDQ5LDggKzMyNyw3IEBACiAJCQkJZWxzZQogCQkJCQluZXdfcXVldWVfZGVwdGggPSBzZGV2LT5xdWV1ZV9kZXB0aCAtCiAJCQkJCQkJCW5ld19xdWV1ZV9kZXB0aDsKLQkJCQlscGZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBuZXdfcXVldWVfZGVwdGgsCi0JCQkJCQkJU0NTSV9RREVQVEhfREVGQVVMVCk7CisJCQkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgbmV3X3F1ZXVlX2RlcHRoKTsKIAkJCX0KIAkJfQogCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CkBAIC00Mjg2LDcgKzQxNjMsNiBAQAogCUlPQ0JfdCAqaW9jYl9jbWQgPSAmbHBmY19jbWQtPmN1cl9pb2NicS5pb2NiOwogCXN0cnVjdCBscGZjX2lvY2JxICpwaW9jYnEgPSAmKGxwZmNfY21kLT5jdXJfaW9jYnEpOwogCWludCBkYXRhZGlyID0gc2NzaV9jbW5kLT5zY19kYXRhX2RpcmVjdGlvbjsKLQljaGFyIHRhZ1syXTsKIAl1aW50OF90ICpwdHI7CiAJYm9vbCBzbGk0OwogCXVpbnQzMl90IGZjcGRsOwpAQCAtNDMwOCwyMCArNDE4NCw3IEBACiAJCW1lbXNldChwdHIsIDAsIChMUEZDX0ZDUF9DREJfTEVOIC0gc2NzaV9jbW5kLT5jbWRfbGVuKSk7CiAJfQogCi0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY3NpX2NtbmQsIHRhZykpIHsKLQkJc3dpdGNoICh0YWdbMF0pIHsKLQkJY2FzZSBIRUFEX09GX1FVRVVFX1RBRzoKLQkJCWZjcF9jbW5kLT5mY3BDbnRsMSA9IEhFQURfT0ZfUTsKLQkJCWJyZWFrOwotCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkJZmNwX2NtbmQtPmZjcENudGwxID0gT1JERVJFRF9ROwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlmY3BfY21uZC0+ZmNwQ250bDEgPSBTSU1QTEVfUTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlCi0JCWZjcF9jbW5kLT5mY3BDbnRsMSA9IFNJTVBMRV9ROworCWZjcF9jbW5kLT5mY3BDbnRsMSA9IFNJTVBMRV9ROwogCiAJc2xpNCA9IChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpOwogCXBpb2NicS0+aW9jYi51bi5mY3BpLmZjcGlfWFJkeSA9IDA7CkBAIC01NjMyLDEwICs1NDk1LDcgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2Rldi0+aG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCB2cG9ydC0+Y2ZnX2x1bl9xdWV1ZV9kZXB0aCk7Ci0JZWxzZQotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHZwb3J0LT5jZmdfbHVuX3F1ZXVlX2RlcHRoKTsKKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCB2cG9ydC0+Y2ZnX2x1bl9xdWV1ZV9kZXB0aCk7CiAKIAlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBFTkFCTEVfRkNQX1JJTkdfUE9MTElORykgewogCQlscGZjX3NsaV9oYW5kbGVfZmFzdF9yaW5nX2V2ZW50KHBoYmEsCkBAIC02MDE4LDggKzU4NzgsMTAgQEAKIAkuc2hvc3RfYXR0cnMJCT0gbHBmY19oYmFfYXR0cnMsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKIAkudmVuZG9yX2lkCQk9IExQRkNfTkxfVkVORE9SX0lELAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBscGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJPSBscGZjX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX3R5cGUJPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBscGZjX3Zwb3J0X3RlbXBsYXRlID0gewpAQCAtNjA0MSw2ICs1OTAzLDggQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQk9IGxwZmNfdnBvcnRfYXR0cnMsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gbHBmY19jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlCT0gbHBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWFjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCmluZGV4IDZhMDM5ZWIuLjk1M2ZkOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCkBAIC05LDY5ICs5LDYyIEBACiAgKiBHZW5lcmljIEdlbmVyaWMgTkNSNTM4MCBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgMTk5NSwgUnVzc2VsbCBLaW5nCi0gKgotICogQUxQSEEgUkVMRUFTRSAxLgotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAorI2luY2x1ZGUgPGFzbS9od3Rlc3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KLSNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCi0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0jaW5jbHVkZSAibWFjX3Njc2kuaCIKIAotLyogVGhlc2UgY29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBnZW5lcmljIDUzODAgY29yZSAqLwotI2RlZmluZSBBVVRPU0VOU0UKKy8qIERlZmluaXRpb25zIGZvciB0aGUgY29yZSBOQ1I1MzgwIGRyaXZlci4gKi8KKwogI2RlZmluZSBQU0VVRE9fRE1BCiAKKyNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMgICB1bnNpZ25lZCBjaGFyICpwZG1hX2Jhc2UKKyNkZWZpbmUgTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCkgICAgICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICpfaW5zdGFuY2UKKyNkZWZpbmUgTkNSNTM4MF9zZXR1cChpbnN0YW5jZSkgICAgICAgICBfaW5zdGFuY2UgPSBpbnN0YW5jZQorCisjZGVmaW5lIE5DUjUzODBfcmVhZChyZWcpICAgICAgICAgICAgICAgbWFjc2NzaV9yZWFkKF9pbnN0YW5jZSwgcmVnKQorI2RlZmluZSBOQ1I1MzgwX3dyaXRlKHJlZywgdmFsdWUpICAgICAgIG1hY3Njc2lfd3JpdGUoX2luc3RhbmNlLCByZWcsIHZhbHVlKQorCisjZGVmaW5lIE5DUjUzODBfcHJlYWQgICAgICAgICAgICAgICAgICAgbWFjc2NzaV9wcmVhZAorI2RlZmluZSBOQ1I1MzgwX3B3cml0ZSAgICAgICAgICAgICAgICAgIG1hY3Njc2lfcHdyaXRlCisKKyNkZWZpbmUgTkNSNTM4MF9pbnRyICAgICAgICAgICAgICAgICAgICBtYWNzY3NpX2ludHIKKyNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kICAgICAgICAgICBtYWNzY3NpX3F1ZXVlX2NvbW1hbmQKKyNkZWZpbmUgTkNSNTM4MF9hYm9ydCAgICAgICAgICAgICAgICAgICBtYWNzY3NpX2Fib3J0CisjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0ICAgICAgICAgICAgICAgbWFjc2NzaV9idXNfcmVzZXQKKyNkZWZpbmUgTkNSNTM4MF9pbmZvICAgICAgICAgICAgICAgICAgICBtYWNzY3NpX2luZm8KKyNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8gICAgICAgICAgICAgICBtYWNzY3NpX3Nob3dfaW5mbworI2RlZmluZSBOQ1I1MzgwX3dyaXRlX2luZm8gICAgICAgICAgICAgIG1hY3Njc2lfd3JpdGVfaW5mbworCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogCiAjZGVmaW5lIFJFU0VUX0JPT1QKLSNkZWZpbmUgRFJJVkVSX1NFVFVQCiAKLWV4dGVybiB2b2lkIHZpYV9zY3NpX2NsZWFyKHZvaWQpOwotCi0jaWZkZWYgUkVTRVRfQk9PVAotc3RhdGljIHZvaWQgbWFjX3Njc2lfcmVzZXRfYm9vdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSk7Ci0jZW5kaWYKLQotc3RhdGljIGludCBzZXR1cF9jYWxsZWQgPSAwOwogc3RhdGljIGludCBzZXR1cF9jYW5fcXVldWUgPSAtMTsKK21vZHVsZV9wYXJhbShzZXR1cF9jYW5fcXVldWUsIGludCwgMCk7CiBzdGF0aWMgaW50IHNldHVwX2NtZF9wZXJfbHVuID0gLTE7Cittb2R1bGVfcGFyYW0oc2V0dXBfY21kX3Blcl9sdW4sIGludCwgMCk7CiBzdGF0aWMgaW50IHNldHVwX3NnX3RhYmxlc2l6ZSA9IC0xOworbW9kdWxlX3BhcmFtKHNldHVwX3NnX3RhYmxlc2l6ZSwgaW50LCAwKTsKIHN0YXRpYyBpbnQgc2V0dXBfdXNlX3BkbWEgPSAtMTsKLSNpZmRlZiBTVVBQT1JUX1RBR1MKK21vZHVsZV9wYXJhbShzZXR1cF91c2VfcGRtYSwgaW50LCAwKTsKIHN0YXRpYyBpbnQgc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID0gLTE7Ci0jZW5kaWYKK21vZHVsZV9wYXJhbShzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcsIGludCwgMCk7CiBzdGF0aWMgaW50IHNldHVwX2hvc3RpZCA9IC0xOworbW9kdWxlX3BhcmFtKHNldHVwX2hvc3RpZCwgaW50LCAwKTsKIAogLyogVGltZSAoaW4gamlmZmllcykgdG8gd2FpdCBhZnRlciBhIHJlc2V0OyB0aGUgU0NTSSBzdGFuZGFyZCBjYWxscyBmb3IgMjUwbXMsCiAgKiB3ZSB1c3VhbGx5IGRvIDAuNXMgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4gQnV0IFRvc2hpYmEgQ0QtUk9NcyBvbmNlIG1vcmUKQEAgLTg0LDIzMiArNzcsNDggQEAKICNkZWZpbmUJQUZURVJfUkVTRVRfREVMQVkJKEhaLzIpCiAjZW5kaWYKIAotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKm1hY19zY3NpX3JlZ3AgPSBOVUxMOwotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKm1hY19zY3NpX2RycSAgPSBOVUxMOwotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKm1hY19zY3NpX25vZHJxID0gTlVMTDsKLQotCiAvKgogICogTkNSIDUzODAgcmVnaXN0ZXIgYWNjZXNzIGZ1bmN0aW9ucwogICovCiAKLSNpZiAwCi0vKiBEZWJ1ZyB2ZXJzaW9ucyAqLwotI2RlZmluZSBDVFJMKHAsdikgKCpjdHJsID0gKHYpKQotCi1zdGF0aWMgY2hhciBtYWNzY3NpX3JlYWQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIGludCByZWcpCitzdGF0aWMgaW5saW5lIGNoYXIgbWFjc2NzaV9yZWFkKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnKQogewotICBpbnQgaW9iYXNlID0gaW5zdGFuY2UtPmlvX3BvcnQ7Ci0gIGludCBpOwotICBpbnQgKmN0cmwgPSAmKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YSktPmN0cmw7Ci0KLSAgQ1RSTChpb2Jhc2UsIDApOwotICBpID0gaW5fOChpb2Jhc2UgKyAocmVnPDw0KSk7Ci0gIENUUkwoaW9iYXNlLCAweDQwKTsKLQotICByZXR1cm4gaTsKKwlyZXR1cm4gaW5fOChpbnN0YW5jZS0+YmFzZSArIChyZWcgPDwgNCkpOwogfQogCi1zdGF0aWMgdm9pZCBtYWNzY3NpX3dyaXRlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnLCBpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgbWFjc2NzaV93cml0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgaW50IHJlZywgaW50IHZhbHVlKQogewotICBpbnQgaW9iYXNlID0gaW5zdGFuY2UtPmlvX3BvcnQ7Ci0gIGludCAqY3RybCA9ICYoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopaW5zdGFuY2UtPmhvc3RkYXRhKS0+Y3RybDsKLQotICBDVFJMKGlvYmFzZSwgMCk7Ci0gIG91dF84KGlvYmFzZSArIChyZWc8PDQpLCB2YWx1ZSk7Ci0gIENUUkwoaW9iYXNlLCAweDQwKTsKLX0KLSNlbHNlCi0KLS8qIEZhc3QgdmVyc2lvbnMgKi8KLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgbWFjc2NzaV9yZWFkKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnKQotewotICByZXR1cm4gaW5fOChpbnN0YW5jZS0+aW9fcG9ydCArIChyZWc8PDQpKTsKKwlvdXRfOChpbnN0YW5jZS0+YmFzZSArIChyZWcgPDwgNCksIHZhbHVlKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBtYWNzY3NpX3dyaXRlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnLCBpbnQgdmFsdWUpCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBfX2luaXQgbWFjX3Njc2lfc2V0dXAoY2hhciAqc3RyKQogewotICBvdXRfOChpbnN0YW5jZS0+aW9fcG9ydCArIChyZWc8PDQpLCB2YWx1ZSk7Ci19Ci0jZW5kaWYKLQotCi0vKgotICogRnVuY3Rpb24gOiBtYWNfc2NzaV9zZXR1cChjaGFyICpzdHIpCi0gKgotICogUHVycG9zZSA6IGJvb3RlciBjb21tYW5kIGxpbmUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG92ZXJyaWRlcyBhcnJheSwKLSAqCi0gKiBJbnB1dHMgOiBzdHIgLSBjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBvcHRpb25zCi0gKgotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IG1hY19zY3NpX3NldHVwKGNoYXIgKnN0cikgewotI2lmZGVmIERSSVZFUl9TRVRVUAkKIAlpbnQgaW50c1s3XTsKLQkKLQkodm9pZClnZXRfb3B0aW9ucyggc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKLQkKLQlpZiAoc2V0dXBfY2FsbGVkKysgfHwgaW50c1swXSA8IDEgfHwgaW50c1swXSA+IDYpIHsKLQkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaTogPG1hYzUzODA+IgotCQkiIFVzYWdlOiBtYWM1MzgwPTxjYW5fcXVldWU+Wyw8Y21kX3Blcl9sdW4+LDxzZ190YWJsZXNpemU+LDxob3N0aWQ+LDx1c2VfdGFncz4sPHVzZV9wZG1hPl1cbiIpOwotCSAgICBwcmludGsoS0VSTl9BTEVSVCAic2NzaTogPG1hYzUzODA+IEJhZCBQZW5ndWluIHBhcmFtZXRlcnM/XG4iKTsKLQkgICAgcmV0dXJuIDA7CisKKwkodm9pZClnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOworCisJaWYgKGludHNbMF0gPCAxIHx8IGludHNbMF0gPiA2KSB7CisJCXByX2VycigiVXNhZ2U6IG1hYzUzODA9PGNhbl9xdWV1ZT5bLDxjbWRfcGVyX2x1bj5bLDxzZ190YWJsZXNpemU+Wyw8aG9zdGlkPlssPHVzZV90YWdzPlssPHVzZV9wZG1hPl1dXV1dXG4iKTsKKwkJcmV0dXJuIDA7CiAJfQotCSAgICAKLQlpZiAoaW50c1swXSA+PSAxKSB7Ci0JCWlmIChpbnRzWzFdID4gMCkKLQkJCS8qIG5vIGxpbWl0cyBvbiB0aGlzLCBqdXN0ID4gMCAqLwotCQkJc2V0dXBfY2FuX3F1ZXVlID0gaW50c1sxXTsKLQl9Ci0JaWYgKGludHNbMF0gPj0gMikgewotCQlpZiAoaW50c1syXSA+IDApCi0JCQlzZXR1cF9jbWRfcGVyX2x1biA9IGludHNbMl07Ci0JfQotCWlmIChpbnRzWzBdID49IDMpIHsKLQkJaWYgKGludHNbM10gPj0gMCkgewotCQkJc2V0dXBfc2dfdGFibGVzaXplID0gaW50c1szXTsKLQkJCS8qIE11c3QgYmUgPD0gU0dfQUxMICgyNTUpICovCi0JCQlpZiAoc2V0dXBfc2dfdGFibGVzaXplID4gU0dfQUxMKQotCQkJCXNldHVwX3NnX3RhYmxlc2l6ZSA9IFNHX0FMTDsKLQkJfQotCX0KLQlpZiAoaW50c1swXSA+PSA0KSB7Ci0JCS8qIE11c3QgYmUgYmV0d2VlbiAwIGFuZCA3ICovCi0JCWlmIChpbnRzWzRdID49IDAgJiYgaW50c1s0XSA8PSA3KQotCQkJc2V0dXBfaG9zdGlkID0gaW50c1s0XTsKLQkJZWxzZSBpZiAoaW50c1s0XSA+IDcpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYWNfc2NzaV9zZXR1cDogaW52YWxpZCBob3N0IElEICVkICFcbiIsIGludHNbNF0gKTsKLQl9Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCQotCWlmIChpbnRzWzBdID49IDUpIHsKLQkJaWYgKGludHNbNV0gPj0gMCkKLQkJCXNldHVwX3VzZV90YWdnZWRfcXVldWluZyA9ICEhaW50c1s1XTsKLQl9Ci0JCi0JaWYgKGludHNbMF0gPT0gNikgewotCSAgICBpZiAoaW50c1s2XSA+PSAwKQorCWlmIChpbnRzWzBdID49IDEpCisJCXNldHVwX2Nhbl9xdWV1ZSA9IGludHNbMV07CisJaWYgKGludHNbMF0gPj0gMikKKwkJc2V0dXBfY21kX3Blcl9sdW4gPSBpbnRzWzJdOworCWlmIChpbnRzWzBdID49IDMpCisJCXNldHVwX3NnX3RhYmxlc2l6ZSA9IGludHNbM107CisJaWYgKGludHNbMF0gPj0gNCkKKwkJc2V0dXBfaG9zdGlkID0gaW50c1s0XTsKKwlpZiAoaW50c1swXSA+PSA1KQorCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBpbnRzWzVdOworCWlmIChpbnRzWzBdID49IDYpCiAJCXNldHVwX3VzZV9wZG1hID0gaW50c1s2XTsKLQl9Ci0jZWxzZQotCWlmIChpbnRzWzBdID09IDUpIHsKLQkgICAgaWYgKGludHNbNV0gPj0gMCkKLQkJc2V0dXBfdXNlX3BkbWEgPSBpbnRzWzVdOwotCX0KLSNlbmRpZiAvKiBTVVBQT1JUX1RBR1MgKi8KLQkKLSNlbmRpZiAvKiBEUklWRVJfU0VUVVAgKi8KIAlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgibWFjNTM4MD0iLCBtYWNfc2NzaV9zZXR1cCk7Ci0KLS8qCi0gKiBGdW5jdGlvbiA6IGludCBtYWNzY3NpX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKLSAqCi0gKiBQdXJwb3NlIDogaW5pdGlhbGl6ZXMgbWFjIE5DUjUzODAgZHJpdmVyIGJhc2VkIG9uIHRoZQotICoJY29tbWFuZCBsaW5lIC8gY29tcGlsZSB0aW1lIHBvcnQgYW5kIGlycSBkZWZpbml0aW9ucy4KLSAqCi0gKiBJbnB1dHMgOiB0cG50IC0gdGVtcGxhdGUgZm9yIHRoaXMgU0NTSSBhZGFwdGVyLgotICoKLSAqIFJldHVybnMgOiAxIGlmIGEgaG9zdCBhZGFwdGVyIHdhcyBmb3VuZCwgMCBpZiBub3QuCi0gKgotICovCi0gCi1pbnQgX19pbml0IG1hY3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQotewotICAgIHN0YXRpYyBpbnQgY2FsbGVkID0gMDsKLSAgICBpbnQgZmxhZ3MgPSAwOwotICAgIHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOwotCi0gICAgaWYgKCFNQUNIX0lTX01BQyB8fCBjYWxsZWQpCi0JcmV0dXJuKCAwICk7Ci0KLSAgICBpZiAobWFjaW50b3NoX2NvbmZpZy0+c2NzaV90eXBlICE9IE1BQ19TQ1NJX09MRCkKLQlyZXR1cm4oIDAgKTsKLQotICAgIC8qIHNldHVwIHZhcmlhYmxlcyAqLwotICAgIHRwbnQtPmNhbl9xdWV1ZSA9Ci0JKHNldHVwX2Nhbl9xdWV1ZSA+IDApID8gc2V0dXBfY2FuX3F1ZXVlIDogQ0FOX1FVRVVFOwotICAgIHRwbnQtPmNtZF9wZXJfbHVuID0KLQkoc2V0dXBfY21kX3Blcl9sdW4gPiAwKSA/IHNldHVwX2NtZF9wZXJfbHVuIDogQ01EX1BFUl9MVU47Ci0gICAgdHBudC0+c2dfdGFibGVzaXplID0gCi0JKHNldHVwX3NnX3RhYmxlc2l6ZSA+PSAwKSA/IHNldHVwX3NnX3RhYmxlc2l6ZSA6IFNHX1RBQkxFU0laRTsKLQotICAgIGlmIChzZXR1cF9ob3N0aWQgPj0gMCkKLQl0cG50LT50aGlzX2lkID0gc2V0dXBfaG9zdGlkOwotICAgIGVsc2UgewotCS8qIHVzZSA3IGFzIGRlZmF1bHQgKi8KLQl0cG50LT50aGlzX2lkID0gNzsKLSAgICB9Ci0KLSNpZmRlZiBTVVBQT1JUX1RBR1MKLSAgICBpZiAoc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nIDwgMCkKLQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBVU0VfVEFHR0VEX1FVRVVJTkc7Ci0jZW5kaWYKLQotICAgIC8qIE9uY2Ugd2Ugc3VwcG9ydCBtdWx0aXBsZSA1MzgwcyAoZS5nLiBEdW9Eb2NrKSB3ZSdsbCBkbwotICAgICAgIHNvbWV0aGluZyBkaWZmZXJlbnQgaGVyZSAqLwotICAgIGluc3RhbmNlID0gc2NzaV9yZWdpc3RlciAodHBudCwgc2l6ZW9mKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhKSk7Ci0gICAgaWYgKGluc3RhbmNlID09IE5VTEwpCi0JcmV0dXJuIDA7Ci0KLSAgICBpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX0lJRlgpIHsKLQltYWNfc2NzaV9yZWdwICA9IHZpYTErMHg4MDAwOwotCW1hY19zY3NpX2RycSAgID0gdmlhMSsweEUwMDA7Ci0JbWFjX3Njc2lfbm9kcnEgPSB2aWExKzB4QzAwMDsKLQkvKiBUaGUgSUlGWCBzaG91bGQgYmUgYWJsZSB0byBkbyB0cnVlIERNQSwgYnV0IHBzZXVkby1kbWEgZG9lc24ndCB3b3JrICovCi0JZmxhZ3MgPSBGTEFHX05PX1BTRVVET19ETUE7Ci0gICAgfSBlbHNlIHsKLQltYWNfc2NzaV9yZWdwICA9IHZpYTErMHgxMDAwMDsKLQltYWNfc2NzaV9kcnEgICA9IHZpYTErMHg2MDAwOwotCW1hY19zY3NpX25vZHJxID0gdmlhMSsweDEyMDAwOwotICAgIH0KLQotICAgIGlmICghIHNldHVwX3VzZV9wZG1hKQotCWZsYWdzID0gRkxBR19OT19QU0VVRE9fRE1BOwotCQotICAgIGluc3RhbmNlLT5pb19wb3J0ID0gKHVuc2lnbmVkIGxvbmcpIG1hY19zY3NpX3JlZ3A7Ci0gICAgaW5zdGFuY2UtPmlycSA9IElSUV9NQUNfU0NTSTsKLQotI2lmZGVmIFJFU0VUX0JPT1QgICAKLSAgICBtYWNfc2NzaV9yZXNldF9ib290KGluc3RhbmNlKTsKLSNlbmRpZgotICAgIAotICAgIE5DUjUzODBfaW5pdChpbnN0YW5jZSwgZmxhZ3MpOwotCi0gICAgaW5zdGFuY2UtPm5faW9fcG9ydCA9IDI1NTsKLQotICAgICgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilpbnN0YW5jZS0+aG9zdGRhdGEpLT5jdHJsID0gMDsKLQotICAgIGlmIChpbnN0YW5jZS0+aXJxICE9IFNDU0lfSVJRX05PTkUpCi0JaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIE5DUjUzODBfaW50ciwgMCwgIm5jcjUzODAiLCBpbnN0YW5jZSkpIHsKLQkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwKLQkJICAgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwotCSAgICBpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKLQl9Ci0KLSAgICBwcmludGsoS0VSTl9JTkZPICJzY3NpJWQ6IGdlbmVyaWMgNTM4MCBhdCBwb3J0ICVsWCBpcnEiLCBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlvX3BvcnQpOwotICAgIGlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCi0JcHJpbnRrIChLRVJOX0lORk8gInMgZGlzYWJsZWQiKTsKLSAgICBlbHNlCi0JcHJpbnRrIChLRVJOX0lORk8gIiAlZCIsIGluc3RhbmNlLT5pcnEpOwotICAgIHByaW50ayhLRVJOX0lORk8gIiBvcHRpb25zIENBTl9RVUVVRT0lZCBDTURfUEVSX0xVTj0lZCByZWxlYXNlPSVkIiwKLQkgICBpbnN0YW5jZS0+Y2FuX3F1ZXVlLCBpbnN0YW5jZS0+Y21kX3Blcl9sdW4sIE1BQ1NDU0lfUFVCTElDX1JFTEVBU0UpOwotICAgIHByaW50ayhLRVJOX0lORk8gIlxuc2NzaSVkOiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLSAgICBOQ1I1MzgwX3ByaW50X29wdGlvbnMoaW5zdGFuY2UpOwotICAgIHByaW50aygiXG4iKTsKLSAgICBjYWxsZWQgPSAxOwotICAgIHJldHVybiAxOwotfQotCi1pbnQgbWFjc2NzaV9yZWxlYXNlIChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKLXsKLQlpZiAoc2hwbnQtPmlycSAhPSBTQ1NJX0lSUV9OT05FKQotCQlmcmVlX2lycShzaHBudC0+aXJxLCBzaHBudCk7Ci0JTkNSNTM4MF9leGl0KHNocG50KTsKLQotCXJldHVybiAwOwotfQorI2VuZGlmIC8qICFNT0RVTEUgKi8KIAogI2lmZGVmIFJFU0VUX0JPT1QKIC8qCkBAIC0zNDksMTAgKzE1OCw3IEBACiB9CiAjZW5kaWYKIAotY29uc3QgY2hhciAqIG1hY3Njc2lfaW5mbyAoc3RydWN0IFNjc2lfSG9zdCAqc3BudCkgewotCXJldHVybiAiIjsKLX0KLQorI2lmZGVmIFBTRVVET19ETUEKIC8qIAogICAgUHNldWRvLURNQTogKE92ZSBFZGx1bmQpCiAgICBUaGUgY29kZSBhdHRlbXB0cyB0byBjYXRjaCBidXMgZXJyb3JzIHRoYXQgb2NjdXIgaWYgb25lIGZvciBleGFtcGxlCkBAIC00MjIsMzggKzIyOCwzOSBAQAogICAgICA6ICIwIihzKSwgIjEiKGQpLCAiMiIobGVuKQkJCQlcCiAgICAgIDogImQwIikKIAotCi1zdGF0aWMgaW50IG1hY3Njc2lfcHJlYWQgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAotCQkJICB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4pCitzdGF0aWMgaW50IG1hY3Njc2lfcHJlYWQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuKQogewotICAgdW5zaWduZWQgY2hhciAqZDsKLSAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnM7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisJdW5zaWduZWQgY2hhciAqZDsKKwl1bnNpZ25lZCBjaGFyICpzOwogCi0gICBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKLSAgIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOworCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOworCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCi0gICBzID0gbWFjX3Njc2lfZHJxKzB4NjA7Ci0gICBkID0gZHN0OworCXMgPSBob3N0ZGF0YS0+cGRtYV9iYXNlICsgKElOUFVUX0RBVEFfUkVHIDw8IDQpOworCWQgPSBkc3Q7CiAKLS8qIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSBNYWNPUyAqLworCS8qIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSBNYWNPUyAqLwogCi0gICB3aGlsZSAoIShOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfRFJRKSAKLSAgICAgICAgICYmICEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSkKLSAgICAgIDsKLSAgIGlmICghKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9EUlEpIAotICAgICAgICAgJiYgKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9QSEFTRV9NQVRDSCkpIHsKLSAgICAgIHByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gbWFjc2NzaV9wcmVhZFxuIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICB9CisJd2hpbGUgKCEoTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykgJiBCQVNSX0RSUSkgJiYKKwkgICAgICAgIShOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9SRVEpKQorCQk7CiAKLSAgIENQX0lPX1RPX01FTShzLCBkLCBsZW4pOwotICAgCi0gICBpZiAobGVuICE9IDApIHsKLSAgICAgIHByaW50ayhLRVJOX05PVElDRSAiQnVzIGVycm9yIGluIG1hY3Njc2lfcHJlYWRcbiIpOwotICAgICAgcmV0dXJuIC0xOwotICAgfQotICAgCi0gICByZXR1cm4gMDsKKwlpZiAoIShOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfRFJRKSAmJgorCSAgICAoTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykgJiBCQVNSX1BIQVNFX01BVENIKSkgeworCQlwcl9lcnIoIkVycm9yIGluIG1hY3Njc2lfcHJlYWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJQ1BfSU9fVE9fTUVNKHMsIGQsIGxlbik7CisKKwlpZiAobGVuICE9IDApIHsKKwkJcHJfbm90aWNlKCJCdXMgZXJyb3IgaW4gbWFjc2NzaV9wcmVhZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC01MTUsNTkgKzMyMiwxNzIgQEAKICAgICAgOiAiMCIocyksICIxIihkKSwgIjIiKGxlbikJCQkJXAogICAgICA6ICJkMCIpCiAKLXN0YXRpYyBpbnQgbWFjc2NzaV9wd3JpdGUgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAotCQkJCSAgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuKQorc3RhdGljIGludCBtYWNzY3NpX3B3cml0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuKQogewotICAgdW5zaWduZWQgY2hhciAqczsKLSAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmQ7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisJdW5zaWduZWQgY2hhciAqczsKKwl1bnNpZ25lZCBjaGFyICpkOwogCi0gICBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKLSAgIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOworCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOworCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCi0gICBzID0gc3JjOwotICAgZCA9IG1hY19zY3NpX2RycTsKLSAgIAotLyogVGhlc2UgY29uZGl0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIE1hY09TICovCisJcyA9IHNyYzsKKwlkID0gaG9zdGRhdGEtPnBkbWFfYmFzZSArIChPVVRQVVRfREFUQV9SRUcgPDwgNCk7CiAKLSAgIHdoaWxlICghKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9EUlEpIAotICAgICAgICAgJiYgKCEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSAKLSAgICAgICAgICAgIHx8IChOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfUEhBU0VfTUFUQ0gpKSkgCi0gICAgICA7Ci0gICBpZiAoIShOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfRFJRKSkgewotICAgICAgcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiBtYWNzY3NpX3B3cml0ZVxuIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICB9CisJLyogVGhlc2UgY29uZGl0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIE1hY09TICovCiAKLSAgIENQX01FTV9UT19JTyhzLCBkLCBsZW4pOyAgIAorCXdoaWxlICghKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9EUlEpICYmCisJICAgICAgICghKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JFUSkgfHwKKwkgICAgICAgIChOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfUEhBU0VfTUFUQ0gpKSkKKwkJOwogCi0gICBpZiAobGVuICE9IDApIHsKLSAgICAgIHByaW50ayhLRVJOX05PVElDRSAiQnVzIGVycm9yIGluIG1hY3Njc2lfcHdyaXRlXG4iKTsKLSAgICAgIHJldHVybiAtMTsKLSAgIH0KLSAgIAotICAgcmV0dXJuIDA7CisJaWYgKCEoTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykgJiBCQVNSX0RSUSkpIHsKKwkJcHJfZXJyKCJFcnJvciBpbiBtYWNzY3NpX3B3cml0ZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlDUF9NRU1fVE9fSU8ocywgZCwgbGVuKTsKKworCWlmIChsZW4gIT0gMCkgeworCQlwcl9ub3RpY2UoIkJ1cyBlcnJvciBpbiBtYWNzY3NpX3B3cml0ZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KLQorI2VuZGlmCiAKICNpbmNsdWRlICJOQ1I1MzgwLmMiCiAKLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKLQkucHJvY19uYW1lCQkJPSAiTWFjNTM4MCIsCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAgICAgICAgICJtYWNfc2NzaSIKKyNkZWZpbmUgUEZYICAgICAgICAgICAgICAgICAgICAgRFJWX01PRFVMRV9OQU1FICI6ICIKKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbWFjX3Njc2lfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCQk9IFRISVNfTU9EVUxFLAorCS5wcm9jX25hbWUJCQk9IERSVl9NT0RVTEVfTkFNRSwKIAkuc2hvd19pbmZvCQkJPSBtYWNzY3NpX3Nob3dfaW5mbywKIAkud3JpdGVfaW5mbwkJCT0gbWFjc2NzaV93cml0ZV9pbmZvLAogCS5uYW1lCQkJCT0gIk1hY2ludG9zaCBOQ1I1MzgwIFNDU0kiLAotCS5kZXRlY3QJCQkJPSBtYWNzY3NpX2RldGVjdCwKLQkucmVsZWFzZQkJCT0gbWFjc2NzaV9yZWxlYXNlLAogCS5pbmZvCQkJCT0gbWFjc2NzaV9pbmZvLAogCS5xdWV1ZWNvbW1hbmQJCQk9IG1hY3Njc2lfcXVldWVfY29tbWFuZCwKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBtYWNzY3NpX2Fib3J0LAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgkJPSBtYWNzY3NpX2J1c19yZXNldCwKLQkuY2FuX3F1ZXVlCQkJPSBDQU5fUVVFVUUsCisJLmNhbl9xdWV1ZQkJCT0gMTYsCiAJLnRoaXNfaWQJCQk9IDcsCiAJLnNnX3RhYmxlc2l6ZQkJCT0gU0dfQUxMLAotCS5jbWRfcGVyX2x1bgkJCT0gQ01EX1BFUl9MVU4sCisJLmNtZF9wZXJfbHVuCQkJPSAyLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRElTQUJMRV9DTFVTVEVSSU5HCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBtYWNfc2NzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOworCWludCBlcnJvcjsKKwlpbnQgaG9zdF9mbGFncyA9IDA7CisJc3RydWN0IHJlc291cmNlICppcnEsICpwaW9fbWVtLCAqcGRtYV9tZW0gPSBOVUxMOwogCi0jaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKKwlwaW9fbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXBpb19tZW0pCisJCXJldHVybiAtRU5PREVWOworCisjaWZkZWYgUFNFVURPX0RNQQorCXBkbWFfbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKyNlbmRpZgorCisJaXJxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKworCWlmICghaHdyZWdfcHJlc2VudCgodW5zaWduZWQgY2hhciAqKXBpb19tZW0tPnN0YXJ0ICsKKwkgICAgICAgICAgICAgICAgICAgKFNUQVRVU19SRUcgPDwgNCkpKSB7CisJCXByX2luZm8oUEZYICJubyBkZXZpY2UgZGV0ZWN0ZWQgYXQgJXBhcFxuIiwgJnBpb19tZW0tPnN0YXJ0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHNldHVwX2Nhbl9xdWV1ZSA+IDApCisJCW1hY19zY3NpX3RlbXBsYXRlLmNhbl9xdWV1ZSA9IHNldHVwX2Nhbl9xdWV1ZTsKKwlpZiAoc2V0dXBfY21kX3Blcl9sdW4gPiAwKQorCQltYWNfc2NzaV90ZW1wbGF0ZS5jbWRfcGVyX2x1biA9IHNldHVwX2NtZF9wZXJfbHVuOworCWlmIChzZXR1cF9zZ190YWJsZXNpemUgPj0gMCkKKwkJbWFjX3Njc2lfdGVtcGxhdGUuc2dfdGFibGVzaXplID0gc2V0dXBfc2dfdGFibGVzaXplOworCWlmIChzZXR1cF9ob3N0aWQgPj0gMCkKKwkJbWFjX3Njc2lfdGVtcGxhdGUudGhpc19pZCA9IHNldHVwX2hvc3RpZCAmIDc7CisJaWYgKHNldHVwX3VzZV9wZG1hIDwgMCkKKwkJc2V0dXBfdXNlX3BkbWEgPSAwOworCisJaW5zdGFuY2UgPSBzY3NpX2hvc3RfYWxsb2MoJm1hY19zY3NpX3RlbXBsYXRlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSkpOworCWlmICghaW5zdGFuY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5zdGFuY2UtPmJhc2UgPSBwaW9fbWVtLT5zdGFydDsKKwlpZiAoaXJxKQorCQlpbnN0YW5jZS0+aXJxID0gaXJxLT5zdGFydDsKKwllbHNlCisJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CisKKwlpZiAocGRtYV9tZW0gJiYgc2V0dXBfdXNlX3BkbWEpIHsKKwkJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwkJaG9zdGRhdGEtPnBkbWFfYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopcGRtYV9tZW0tPnN0YXJ0OworCX0gZWxzZQorCQlob3N0X2ZsYWdzIHw9IEZMQUdfTk9fUFNFVURPX0RNQTsKKworI2lmZGVmIFJFU0VUX0JPT1QKKwltYWNfc2NzaV9yZXNldF9ib290KGluc3RhbmNlKTsKKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9UQUdTCisJaG9zdF9mbGFncyB8PSBzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPiAwID8gRkxBR19UQUdHRURfUVVFVUlORyA6IDA7CisjZW5kaWYKKworCU5DUjUzODBfaW5pdChpbnN0YW5jZSwgaG9zdF9mbGFncyk7CisKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpIHsKKwkJZXJyb3IgPSByZXF1ZXN0X2lycShpbnN0YW5jZS0+aXJxLCBtYWNzY3NpX2ludHIsIElSUUZfU0hBUkVELAorCQkgICAgICAgICAgICAgICAgICAgICJOQ1I1MzgwIiwgaW5zdGFuY2UpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGZhaWxfaXJxOworCX0KKworCWVycm9yID0gc2NzaV9hZGRfaG9zdChpbnN0YW5jZSwgTlVMTCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxfaG9zdDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluc3RhbmNlKTsKKworCXNjc2lfc2Nhbl9ob3N0KGluc3RhbmNlKTsKKwlyZXR1cm4gMDsKKworZmFpbF9ob3N0OgorCWlmIChpbnN0YW5jZS0+aXJxICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEoaW5zdGFuY2UtPmlycSwgaW5zdGFuY2UpOworZmFpbF9pcnE6CisJTkNSNTM4MF9leGl0KGluc3RhbmNlKTsKKwlzY3NpX2hvc3RfcHV0KGluc3RhbmNlKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IG1hY19zY3NpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzY3NpX3JlbW92ZV9ob3N0KGluc3RhbmNlKTsKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCisJCWZyZWVfaXJxKGluc3RhbmNlLT5pcnEsIGluc3RhbmNlKTsKKwlOQ1I1MzgwX2V4aXQoaW5zdGFuY2UpOworCXNjc2lfaG9zdF9wdXQoaW5zdGFuY2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNfc2NzaV9kcml2ZXIgPSB7CisJLnJlbW92ZSA9IF9fZXhpdF9wKG1hY19zY3NpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSBEUlZfTU9EVUxFX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKG1hY19zY3NpX2RyaXZlciwgbWFjX3Njc2lfcHJvYmUpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX01PRFVMRV9OQU1FKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5oIGIvZHJpdmVycy9zY3NpL21hY19zY3NpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OTY5YjAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL21hY19zY3NpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ3VtYW5hIEdlbmVyaWMgTkNSNTM4MCBkcml2ZXIgZGVmaW5lcwotICoKLSAqIENvcHlyaWdodCAxOTkzLCBEcmV3IEVja2hhcmR0Ci0gKglWaXNpb25hcnkgQ29tcHV0aW5nCi0gKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQotICoJZHJld0Bjb2xvcmFkby5lZHUKLSAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBBTFBIQSBSRUxFQVNFIDEuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0Ci0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0Ci0gKi8KLQotI2lmbmRlZiBNQUNfTkNSNTM4MF9ICi0jZGVmaW5lIE1BQ19OQ1I1MzgwX0gKLQotI2RlZmluZSBNQUNTQ1NJX1BVQkxJQ19SRUxFQVNFIDIKLQotI2lmbmRlZiBBU00KLQotI2lmbmRlZiBDTURfUEVSX0xVTgotI2RlZmluZSBDTURfUEVSX0xVTiAyCi0jZW5kaWYKLQotI2lmbmRlZiBDQU5fUVVFVUUKLSNkZWZpbmUgQ0FOX1FVRVVFIDE2Ci0jZW5kaWYKLQotI2lmbmRlZiBTR19UQUJMRVNJWkUKLSNkZWZpbmUgU0dfVEFCTEVTSVpFIFNHX05PTkUKLSNlbmRpZgotCi0jaWZuZGVmIFVTRV9UQUdHRURfUVVFVUlORwotI2RlZmluZQlVU0VfVEFHR0VEX1FVRVVJTkcgMAotI2VuZGlmCi0KLSNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4KLQotI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcyBcCi0gICAgaW50IHBvcnQsIGN0cmwKLQotI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKSBcCi0gICAgICAgIHN0cnVjdCBTY3NpX0hvc3QgKl9pbnN0YW5jZQotCi0jZGVmaW5lIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpIFwKLSAgICAgICAgX2luc3RhbmNlID0gaW5zdGFuY2UKLQotI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKSBtYWNzY3NpX3JlYWQoX2luc3RhbmNlLCByZWcpCi0jZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkgbWFjc2NzaV93cml0ZShfaW5zdGFuY2UsIHJlZywgdmFsdWUpCi0KLSNkZWZpbmUgTkNSNTM4MF9wcmVhZCAJbWFjc2NzaV9wcmVhZAotI2RlZmluZSBOQ1I1MzgwX3B3cml0ZSAJbWFjc2NzaV9wd3JpdGUKLQkKLSNkZWZpbmUgTkNSNTM4MF9pbnRyIG1hY3Njc2lfaW50cgotI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgbWFjc2NzaV9xdWV1ZV9jb21tYW5kCi0jZGVmaW5lIE5DUjUzODBfYWJvcnQgbWFjc2NzaV9hYm9ydAotI2RlZmluZSBOQ1I1MzgwX2J1c19yZXNldCBtYWNzY3NpX2J1c19yZXNldAotI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyBtYWNzY3NpX3Nob3dfaW5mbwotI2RlZmluZSBOQ1I1MzgwX3dyaXRlX2luZm8gbWFjc2NzaV93cml0ZV9pbmZvCi0KLSNlbmRpZiAvKiBuZGVmIEFTTSAqLwotI2VuZGlmIC8qIE1BQ19OQ1I1MzgwX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwppbmRleCBhYzVkOTRjLi4yNDg1MjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwpAQCAtMTk0NSw3ICsxOTQ1LDcgQEAKIAkgICAgIGNtZC0+ZGV2aWNlLT5pZCwgKHUzMiljbWQtPmRldmljZS0+bHVuKTsKIAogCWlmKGxpc3RfZW1wdHkoJmFkYXB0ZXItPnBlbmRpbmdfbGlzdCkpCi0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIEZBSUxFRDsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsICZhZGFwdGVyLT5wZW5kaW5nX2xpc3QpIHsKIApAQCAtMTk2OCw3ICsxOTY4LDcgQEAKIAkJCQkJKGFvcj09U0NCX0FCT1JUKSA/ICJBQk9SVElORyI6IlJFU0VUIiwKIAkJCQkJc2NiLT5pZHgpOwogCi0JCQkJcmV0dXJuIEZBTFNFOworCQkJCXJldHVybiBGQUlMRUQ7CiAJCQl9CiAJCQllbHNlIHsKIApAQCAtMTk5MywxMiArMTk5MywxMiBAQAogCQkJCWxpc3RfYWRkX3RhaWwoU0NTSV9MSVNUKGNtZCksCiAJCQkJCQkmYWRhcHRlci0+Y29tcGxldGVkX2xpc3QpOwogCi0JCQkJcmV0dXJuIFRSVUU7CisJCQkJcmV0dXJuIFNVQ0NFU1M7CiAJCQl9CiAJCX0KIAl9CiAKLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIEZBSUxFRDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCmluZGV4IDUzMWRjZTQuLmYwOTg3ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwpAQCAtMzMyLDI3ICszMzIsNiBAQAogCU5VTEwsCiB9OwogCi0vKioKLSAqIG1lZ2FyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIENoYW5nZSB0aGUgZGV2aWNlJ3MgcXVldWUgZGVwdGgKLSAqIEBzZGV2OglzY3NpIGRldmljZSBzdHJ1Y3QKLSAqIEBxZGVwdGg6CWRlcHRoIHRvIHNldAotICogQHJlYXNvbjoJY2FsbGluZyBjb250ZXh0Ci0gKgotICogUmV0dXJuIHZhbHVlOgotICogCWFjdHVhbCBkZXB0aCBzZXQKLSAqLwotc3RhdGljIGludCBtZWdhcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLAotCQkJCSAgICAgICBpbnQgcmVhc29uKQotewotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHFkZXB0aCA+IE1CT1hfTUFYX1NDU0lfQ01EUykKLQkJcWRlcHRoID0gTUJPWF9NQVhfU0NTSV9DTURTOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHFkZXB0aCk7Ci0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCiAvKgogICogU2NzaSBob3N0IHRlbXBsYXRlIGZvciBtZWdhcmFpZCB1bmlmaWVkIGRyaXZlcgogICovCkBAIC0zNjUsNyArMzQ0LDcgQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIJPSBtZWdhcmFpZF9yZXNldF9oYW5kbGVyLAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgkJPSBtZWdhcmFpZF9yZXNldF9oYW5kbGVyLAogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJCT0gbWVnYXJhaWRfcmVzZXRfaGFuZGxlciwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCQk9IG1lZ2FyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCQk9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLm5vX3dyaXRlX3NhbWUJCQk9IDEsCiAJLnNkZXZfYXR0cnMJCQk9IG1lZ2FyYWlkX3NkZXZfYXR0cnMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKaW5kZXggYTQ5OTE0ZC4uMGQ0NGQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaApAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycwogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMiAgTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwMy0yMDEzICBMU0kgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCAgQXZhZ28gVGVjaG5vbG9naWVzCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTQsMTcgKzE1LDE4IEBACiAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKgogICogIEZJTEU6IG1lZ2FyYWlkX3Nhcy5oCiAgKgotICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcnM6IEF2YWdvIFRlY2hub2xvZ2llcworICogICAgICAgICAgIEthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KKyAqICAgICAgICAgICBTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgogICoKLSAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICogIFNlbmQgZmVlZGJhY2sgdG86IG1lZ2FyYWlkbGludXgucGRsQGF2YWdvdGVjaC5jb20KICAqCi0gKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKLSAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqICBNYWlsIHRvOiBBdmFnbyBUZWNobm9sb2dpZXMsIDM1MCBXZXN0IFRyaW1ibGUgUm9hZCwgQnVpbGRpbmcgOTAsCisgKiAgU2FuIEpvc2UsIENhbGlmb3JuaWEgOTUxMzEKICAqLwogCiAjaWZuZGVmIExTSV9NRUdBUkFJRF9TQVNfSApAQCAtMzMsOSArMzUsNyBAQAogLyoKICAqIE1lZ2FSQUlEIFNBUyBEcml2ZXIgbWV0YSBkYXRhCiAgKi8KLSNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwNi44MDUuMDYuMDAtcmMxIgotI2RlZmluZSBNRUdBU0FTX1JFTERBVEUJCQkJIlNlcC4gNCwgMjAxNCIKLSNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJCSJUaHUuIFNlcC4gNCAxNzowMDowMCBQRFQgMjAxNCIKKyNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwNi44MDUuMDYuMDEtcmMxIgogCiAvKgogICogRGV2aWNlIElEcwpAQCAtMTkzMSw4ICsxOTMxLDcgQEAKIAlzdHJ1Y3QgTERfTE9BRF9CQUxBTkNFX0lORk8gKmxiSW5mbywgc3RydWN0IElPX1JFUVVFU1RfSU5GTyAqaW5faW5mbyk7CiB2b2lkIG1yX3VwZGF0ZV9sb2FkX2JhbGFuY2VfcGFyYW1zKHN0cnVjdCBNUl9EUlZfUkFJRF9NQVBfQUxMICptYXAsCiAJc3RydWN0IExEX0xPQURfQkFMQU5DRV9JTkZPICpsYkluZm8pOwotaW50IG1lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCi0Jc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvICpjdHJsX2luZm8pOworaW50IG1lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOwogaW50IG1lZ2FzYXNfc2V0X2NyYXNoX2R1bXBfcGFyYW1zKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKIAl1OCBjcmFzaF9idWZfc3RhdGUpOwogdm9pZCBtZWdhc2FzX2ZyZWVfaG9zdF9jcmFzaF9idWZmZXIoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMKaW5kZXggNTY0MGFkMS4uZjA1NTgwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMKQEAgLTEsNyArMSw4IEBACiAvKgogICogIExpbnV4IE1lZ2FSQUlEIGRyaXZlciBmb3IgU0FTIGJhc2VkIFJBSUQgY29udHJvbGxlcnMKICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTIgIExTSSBDb3Jwb3JhdGlvbi4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMyAgTFNJIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgIEF2YWdvIFRlY2hub2xvZ2llcwogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE0LDIyICsxNSwyMCBAQAogICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICoKLSAqICBGSUxFOiBtZWdhcmFpZF9zYXNfYmFzZS5jCi0gKiAgVmVyc2lvbiA6IDA2LjgwNS4wNi4wMC1yYzEKLSAqCi0gKiAgQXV0aG9yczogTFNJIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yczogQXZhZ28gVGVjaG5vbG9naWVzCiAgKiAgICAgICAgICAgU3JlZW5pdmFzIEJhZ2Fsa290ZQogICogICAgICAgICAgIFN1bWFudCBQYXRybwogICogICAgICAgICAgIEJvIFlhbmcKLSAqICAgICAgICAgICBBZGFtIFJhZGZvcmQgPGxpbnV4cmFpZEBsc2kuY29tPgorICogICAgICAgICAgIEFkYW0gUmFkZm9yZAorICogICAgICAgICAgIEthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KKyAqICAgICAgICAgICBTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgogICoKLSAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICogIFNlbmQgZmVlZGJhY2sgdG86IG1lZ2FyYWlkbGludXgucGRsQGF2YWdvdGVjaC5jb20KICAqCi0gKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKLSAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqICBNYWlsIHRvOiBBdmFnbyBUZWNobm9sb2dpZXMsIDM1MCBXZXN0IFRyaW1ibGUgUm9hZCwgQnVpbGRpbmcgOTAsCisgKiAgU2FuIEpvc2UsIENhbGlmb3JuaWEgOTUxMzEKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDA4LDcgKzEwMDcsNyBAQAogCQljcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGNtZF90b19hYm9ydC0+ZnJhbWVfcGh5c19hZGRyKSk7CiAKIAljbWQtPnN5bmNfY21kID0gMTsKLQljbWQtPmNtZF9zdGF0dXMgPSAweEZGOworCWNtZC0+Y21kX3N0YXR1cyA9IEVOT0RBVEE7CiAKIAlpbnN0YW5jZS0+aW5zdGFuY2V0LT5pc3N1ZV9kY21kKGluc3RhbmNlLCBjbWQpOwogCkBAIC0xNTcyLDYgKzE1NzEsMTIgQEAKIAlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKQogCSAgICBzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCisJaWYgKGluc3RhbmNlLT51bmxvYWQgPT0gMSkgeworCQlzY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJc2NtZC0+c2NzaV9kb25lKHNjbWQpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoaW5zdGFuY2UtPmlzc3VlcGVuZF9kb25lID09IDApCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCkBAIC0yNTg2LDIwICsyNTkxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbWVnYXNhc19jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJCSAgICAgIGludCBxdWV1ZV9kZXB0aCwgaW50IHJlYXNvbikKLXsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChxdWV1ZV9kZXB0aCA+IHNkZXYtPmhvc3QtPmNhbl9xdWV1ZSkKLQkJcXVldWVfZGVwdGggPSBzZGV2LT5ob3N0LT5jYW5fcXVldWU7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksCi0JCQkJcXVldWVfZGVwdGgpOwotCi0JcmV0dXJuIHF1ZXVlX2RlcHRoOwotfQotCiBzdGF0aWMgc3NpemVfdAogbWVnYXNhc19md19jcmFzaF9idWZmZXJfc3RvcmUoc3RydWN0IGRldmljZSAqY2RldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0yNzY0LDcgKzI3NTUsNyBAQAogCS5zaG9zdF9hdHRycyA9IG1lZ2FyYWlkX2hvc3RfYXR0cnMsCiAJLmJpb3NfcGFyYW0gPSBtZWdhc2FzX2Jpb3NfcGFyYW0sCiAJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IG1lZ2FzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkubm9fd3JpdGVfc2FtZSA9IDEsCiB9OwogCkBAIC00MDI4LDI1ICs0MDE5LDgzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIG1lZ2FzYXNfdXBkYXRlX2V4dF92ZF9kZXRhaWxzIDogVXBkYXRlIGRldGFpbHMgdy5yLnQgRXh0ZW5kZWQgVkQKKyAqIGluc3RhbmNlCQkJIDogQ29udHJvbGxlcidzIGluc3RhbmNlCisqLworc3RhdGljIHZvaWQgbWVnYXNhc191cGRhdGVfZXh0X3ZkX2RldGFpbHMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCXUzMiBvbGRfbWFwX3N6OworCXUzMiBuZXdfbWFwX3N6OworCisJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKwkvKiBGb3IgTUZJIGJhc2VkIGNvbnRyb2xsZXJzIHJldHVybiBkdW1teSBzdWNjZXNzICovCisJaWYgKCFmdXNpb24pCisJCXJldHVybjsKKworCWluc3RhbmNlLT5zdXBwb3J0bWF4MjU2dmQgPQorCQlpbnN0YW5jZS0+Y3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczMuc3VwcG9ydE1heEV4dExEczsKKwkvKiBCZWxvdyBpcyBhZGRpdGlvbmFsIGNoZWNrIHRvIGFkZHJlc3MgZnV0dXJlIEZXIGVuaGFuY2VtZW50ICovCisJaWYgKGluc3RhbmNlLT5jdHJsX2luZm8tPm1heF9sZHMgPiA2NCkKKwkJaW5zdGFuY2UtPnN1cHBvcnRtYXgyNTZ2ZCA9IDE7CisKKwlpbnN0YW5jZS0+ZHJ2X3N1cHBvcnRlZF92ZF9jb3VudCA9IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTCisJCQkJCSogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3BkX2NvdW50ID0gTUVHQVNBU19NQVhfUERfQ0hBTk5FTFMKKwkJCQkJKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJaWYgKGluc3RhbmNlLT5zdXBwb3J0bWF4MjU2dmQpIHsKKwkJaW5zdGFuY2UtPmZ3X3N1cHBvcnRlZF92ZF9jb3VudCA9IE1BWF9MT0dJQ0FMX0RSSVZFU19FWFQ7CisJCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQgPSBNQVhfUEhZU0lDQUxfREVWSUNFUzsKKwl9IGVsc2UgeworCQlpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3ZkX2NvdW50ID0gTUFYX0xPR0lDQUxfRFJJVkVTOworCQlpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3BkX2NvdW50ID0gTUFYX1BIWVNJQ0FMX0RFVklDRVM7CisJfQorCWRldl9pbmZvKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiRmlybXdhcmUgc3VwcG9ydHMgJWQgVkQgJWQgUERcbiIsCisJCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQsCisJCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQpOworCWRldl9pbmZvKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiRHJpdmVyIHN1cHBvcnRzICVkIFZEICAlZCBQRFxuIiwKKwkJaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfdmRfY291bnQsCisJCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3BkX2NvdW50KTsKKworCW9sZF9tYXBfc3ogPSAgc2l6ZW9mKHN0cnVjdCBNUl9GV19SQUlEX01BUCkgKworCQkJCShzaXplb2Yoc3RydWN0IE1SX0xEX1NQQU5fTUFQKSAqCisJCQkJKGluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQgLSAxKSk7CisJbmV3X21hcF9zeiA9ICBzaXplb2Yoc3RydWN0IE1SX0ZXX1JBSURfTUFQX0VYVCk7CisJZnVzaW9uLT5kcnZfbWFwX3N6ID0gIHNpemVvZihzdHJ1Y3QgTVJfRFJWX1JBSURfTUFQKSArCisJCQkJKHNpemVvZihzdHJ1Y3QgTVJfTERfU1BBTl9NQVApICoKKwkJCQkoaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfdmRfY291bnQgLSAxKSk7CisKKwlmdXNpb24tPm1heF9tYXBfc3ogPSBtYXgob2xkX21hcF9zeiwgbmV3X21hcF9zeik7CisKKworCWlmIChpbnN0YW5jZS0+c3VwcG9ydG1heDI1NnZkKQorCQlmdXNpb24tPmN1cnJlbnRfbWFwX3N6ID0gbmV3X21hcF9zejsKKwllbHNlCisJCWZ1c2lvbi0+Y3VycmVudF9tYXBfc3ogPSBvbGRfbWFwX3N6OworCit9CisKIC8qKgogICogbWVnYXNhc19nZXRfY29udHJvbGxlcl9pbmZvIC0JUmV0dXJucyBGVydzIGNvbnRyb2xsZXIgc3RydWN0dXJlCiAgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICogQGN0cmxfaW5mbzoJCQkJQ29udHJvbGxlciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICAqCiAgKiBJc3N1ZXMgYW4gaW50ZXJuYWwgY29tbWFuZCAoRENNRCkgdG8gZ2V0IHRoZSBGVydzIGNvbnRyb2xsZXIgc3RydWN0dXJlLgogICogVGhpcyBpbmZvcm1hdGlvbiBpcyBtYWlubHkgdXNlZCB0byBmaW5kIG91dCB0aGUgbWF4aW11bSBJTyB0cmFuc2ZlciBwZXIKICAqIGNvbW1hbmQgc3VwcG9ydGVkIGJ5IHRoZSBGVy4KICAqLwogaW50Ci1tZWdhc2FzX2dldF9jdHJsX2luZm8oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQkgICAgICBzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmN0cmxfaW5mbykKK21lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CiAJc3RydWN0IG1lZ2FzYXNfZGNtZF9mcmFtZSAqZGNtZDsKIAlzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmNpOworCXN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyAqY3RybF9pbmZvOwogCWRtYV9hZGRyX3QgY2lfaCA9IDA7CiAKKwljdHJsX2luZm8gPSBpbnN0YW5jZS0+Y3RybF9pbmZvOworCiAJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKIAogCWlmICghY21kKSB7CkBAIC00MDg2LDggKzQxMzUsMTMgQEAKIAllbHNlCiAJCXJldCA9IG1lZ2FzYXNfaXNzdWVfcG9sbGVkKGluc3RhbmNlLCBjbWQpOwogCi0JaWYgKCFyZXQpCisJaWYgKCFyZXQpIHsKIAkJbWVtY3B5KGN0cmxfaW5mbywgY2ksIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pKTsKKwkJbGUzMl90b19jcHVzKCh1MzIgKikmY3RybF9pbmZvLT5wcm9wZXJ0aWVzLk9uT2ZmUHJvcGVydGllcyk7CisJCWxlMzJfdG9fY3B1cygodTMyICopJmN0cmxfaW5mby0+YWRhcHRlck9wZXJhdGlvbnMyKTsKKwkJbGUzMl90b19jcHVzKCh1MzIgKikmY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczMpOworCQltZWdhc2FzX3VwZGF0ZV9leHRfdmRfZGV0YWlscyhpbnN0YW5jZSk7CisJfQogCiAJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyksCiAJCQkgICAgY2ksIGNpX2gpOwpAQCAtNDI4OSw3ICs0MzQzLDcgQEAKIAlpZiAobWVnYXNhc19pc3N1ZV9pbml0X21maShpbnN0YW5jZSkpCiAJCWdvdG8gZmFpbF9md19pbml0OwogCi0JaWYgKG1lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhpbnN0YW5jZSwgaW5zdGFuY2UtPmN0cmxfaW5mbykpIHsKKwlpZiAobWVnYXNhc19nZXRfY3RybF9pbmZvKGluc3RhbmNlKSkgewogCQlkZXZfZXJyKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiKCVkKTogQ291bGQgZ2V0IGNvbnRyb2xsZXIgaW5mbyAiCiAJCQkiRmFpbCBmcm9tICVzICVkXG4iLCBpbnN0YW5jZS0+dW5pcXVlX2lkLAogCQkJX19mdW5jX18sIF9fTElORV9fKTsKQEAgLTQ1MjcsMTIgKzQ1ODEsOCBAQAogCQlkZXZfaW5mbygmaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJCSJDb250cm9sbGVyIHR5cGU6IGlNUlxuIik7CiAJfQotCS8qIE9uT2ZmUHJvcGVydGllcyBhcmUgY29udmVydGVkIGludG8gQ1BVIGFyY2gqLwotCWxlMzJfdG9fY3B1cygodTMyICopJmN0cmxfaW5mby0+cHJvcGVydGllcy5Pbk9mZlByb3BlcnRpZXMpOwogCWluc3RhbmNlLT5kaXNhYmxlT25saW5lQ3RybFJlc2V0ID0KIAljdHJsX2luZm8tPnByb3BlcnRpZXMuT25PZmZQcm9wZXJ0aWVzLmRpc2FibGVPbmxpbmVDdHJsUmVzZXQ7Ci0JLyogYWRhcHRlck9wZXJhdGlvbnMyIGFyZSBjb252ZXJ0ZWQgaW50byBDUFUgYXJjaCovCi0JbGUzMl90b19jcHVzKCh1MzIgKikmY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczIpOwogCWluc3RhbmNlLT5tcGlvID0gY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczIubXBpbzsKIAlpbnN0YW5jZS0+VW5ldmVuU3BhblN1cHBvcnQgPQogCQljdHJsX2luZm8tPmFkYXB0ZXJPcGVyYXRpb25zMi5zdXBwb3J0VW5ldmVuU3BhbnM7CkBAIC00NTYyLDcgKzQ2MTIsNiBAQAogCQkgICAgICAgInJlcXVlc3RvcklkICVkXG4iLCBpbnN0YW5jZS0+cmVxdWVzdG9ySWQpOwogCX0KIAotCWxlMzJfdG9fY3B1cygodTMyICopJmN0cmxfaW5mby0+YWRhcHRlck9wZXJhdGlvbnMzKTsKIAlpbnN0YW5jZS0+Y3Jhc2hfZHVtcF9md19zdXBwb3J0ID0KIAkJY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczMuc3VwcG9ydENyYXNoRHVtcDsKIAlpbnN0YW5jZS0+Y3Jhc2hfZHVtcF9kcnZfc3VwcG9ydCA9CkBAIC00NTg3LDggKzQ2MzYsNiBAQAogCWlmICh0bXBfc2VjdG9ycyAmJiAoaW5zdGFuY2UtPm1heF9zZWN0b3JzX3Blcl9yZXEgPiB0bXBfc2VjdG9ycykpCiAJCWluc3RhbmNlLT5tYXhfc2VjdG9yc19wZXJfcmVxID0gdG1wX3NlY3RvcnM7CiAKLQlrZnJlZShjdHJsX2luZm8pOwotCiAJLyogQ2hlY2sgZm9yIHZhbGlkIHRocm90dGxlcXVldWVkZXB0aCBtb2R1bGUgcGFyYW1ldGVyICovCiAJaWYgKGluc3RhbmNlLT5pc19pbXIpIHsKIAkJaWYgKHRocm90dGxlcXVldWVkZXB0aCA+IChpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgLQpAQCAtNDk1NywxMCArNTAwNCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qCi0JICogVHJpZ2dlciBTQ1NJIHRvIHNjYW4gb3VyIGRyaXZlcwotCSAqLwotCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCXJldHVybiAwOwogfQogCkBAIC01MDgzLDYgKzUxMjYsOCBAQAogCQkJZ290byBmYWlsX2FsbG9jX2RtYV9idWY7CiAJCX0KIAkJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKwkJbWVtc2V0KGZ1c2lvbiwgMCwKKwkJCSgoMSA8PCBQQUdFX1NISUZUKSA8PCBpbnN0YW5jZS0+Y3RybF9jb250ZXh0X3BhZ2VzKSk7CiAJCUlOSVRfTElTVF9IRUFEKCZmdXNpb24tPmNtZF9wb29sKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmZ1c2lvbi0+bXB0X3Bvb2xfbG9jayk7CiAJCW1lbXNldChmdXNpb24tPmxvYWRfYmFsYW5jZV9pbmZvLCAwLApAQCAtNTI4OCw2ICs1MzMzLDEwIEBACiAJCWdvdG8gZmFpbF9pb19hdHRhY2g7CiAKIAlpbnN0YW5jZS0+dW5sb2FkID0gMDsKKwkvKgorCSAqIFRyaWdnZXIgU0NTSSB0byBzY2FuIG91ciBkcml2ZXMKKwkgKi8KKwlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCS8qCiAJICogSW5pdGlhdGUgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKQpAQCAtNjA1MSw2ICs2MTAwLDExIEBACiAJbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZChpbnN0YW5jZSwgY21kLCAwKTsKIAljbWQtPnN5bmNfY21kID0gMDsKIAorCWlmIChpbnN0YW5jZS0+dW5sb2FkID09IDEpIHsKKwkJZGV2X2luZm8oJmluc3RhbmNlLT5wZGV2LT5kZXYsICJEcml2ZXIgdW5sb2FkIGlzIGluIHByb2dyZXNzICIKKwkJCSJkb24ndCBzdWJtaXQgZGF0YSB0byBhcHBsaWNhdGlvblxuIik7CisJCWdvdG8gb3V0OworCX0KIAkvKgogCSAqIGNvcHkgb3V0IHRoZSBrZXJuZWwgYnVmZmVycyB0byB1c2VyIGJ1ZmZlcnMKIAkgKi8KQEAgLTY0MDAsMTYgKzY0NTQsNiBAQAogc3RhdGljIERSSVZFUl9BVFRSKHZlcnNpb24sIFNfSVJVR08sIG1lZ2FzYXNfc3lzZnNfc2hvd192ZXJzaW9uLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QKLW1lZ2FzYXNfc3lzZnNfc2hvd19yZWxlYXNlX2RhdGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRkLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNucHJpbnRmKGJ1Ziwgc3RybGVuKE1FR0FTQVNfUkVMREFURSkgKyAyLCAiJXNcbiIsCi0JCQlNRUdBU0FTX1JFTERBVEUpOwotfQotCi1zdGF0aWMgRFJJVkVSX0FUVFIocmVsZWFzZV9kYXRlLCBTX0lSVUdPLCBtZWdhc2FzX3N5c2ZzX3Nob3dfcmVsZWFzZV9kYXRlLAotCQkgICBOVUxMKTsKLQotc3RhdGljIHNzaXplX3QKIG1lZ2FzYXNfc3lzZnNfc2hvd19zdXBwb3J0X3BvbGxfZm9yX2V2ZW50KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZCwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBzdXBwb3J0X3BvbGxfZm9yX2V2ZW50KTsKQEAgLTY3MTIsOCArNjc1Niw3IEBACiAJLyoKIAkgKiBBbm5vdW5jZSBkcml2ZXIgdmVyc2lvbiBhbmQgb3RoZXIgaW5mb3JtYXRpb24KIAkgKi8KLQlwcmludGsoS0VSTl9JTkZPICJtZWdhc2FzOiAlcyAlc1xuIiwgTUVHQVNBU19WRVJTSU9OLAotCSAgICAgICBNRUdBU0FTX0VYVF9WRVJTSU9OKTsKKwlwcl9pbmZvKCJtZWdhc2FzOiAlc1xuIiwgTUVHQVNBU19WRVJTSU9OKTsKIAogCXNwaW5fbG9ja19pbml0KCZwb2xsX2Flbl9sb2NrKTsKIApAQCAtNjc0OCwxMCArNjc5MSw2IEBACiAJCQkJICAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CiAJaWYgKHJ2YWwpCiAJCWdvdG8gZXJyX2RjZl9hdHRyX3ZlcjsKLQlydmFsID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJCSAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7Ci0JaWYgKHJ2YWwpCi0JCWdvdG8gZXJyX2RjZl9yZWxfZGF0ZTsKIAogCXJ2YWwgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCiAJCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQpOwpAQCAtNjc3NSwxMiArNjgxNCw3IEBACiBlcnJfZGNmX2RiZ19sdmw6CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAogCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQpOwotCiBlcnJfZGNmX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQ6Ci0JZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJICAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7Ci0KLWVycl9kY2ZfcmVsX2RhdGU6CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CiBlcnJfZGNmX2F0dHJfdmVyOgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWVnYXNhc19wY2lfZHJpdmVyKTsKQEAgLTY4MDAsOCArNjgzNCw2IEBACiAJCQkmZHJpdmVyX2F0dHJfc3VwcG9ydF9wb2xsX2Zvcl9ldmVudCk7CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAogCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfZGV2aWNlX2NoYW5nZSk7Ci0JZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJICAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CiAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1lZ2FzYXNfcGNpX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2ZwLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2ZwLmMKaW5kZXggNjg1ZTZmMy4uNDYwYzZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnAuYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycwogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiAgTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEzICBMU0kgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCAgQXZhZ28gVGVjaG5vbG9naWVzCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTQsMjAgKzE1LDIxIEBACiAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKgogICogIEZJTEU6IG1lZ2FyYWlkX3Nhc19mcC5jCiAgKgotICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcnM6IEF2YWdvIFRlY2hub2xvZ2llcwogICogICAgICAgICAgIFN1bWFudCBQYXRybwogICogICAgICAgICAgIFZhcmFkIFRhbGFtYWNraQogICogICAgICAgICAgIE1hbm9qIEpvc2UKKyAqICAgICAgICAgICBLYXNoeWFwIERlc2FpIDxrYXNoeWFwLmRlc2FpQGF2YWdvdGVjaC5jb20+CisgKiAgICAgICAgICAgU3VtaXQgU2F4ZW5hIDxzdW1pdC5zYXhlbmFAYXZhZ290ZWNoLmNvbT4KICAqCi0gKiAgU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkbGludXhAbHNpLmNvbT4KKyAqICBTZW5kIGZlZWRiYWNrIHRvOiBtZWdhcmFpZGxpbnV4LnBkbEBhdmFnb3RlY2guY29tCiAgKgotICogIE1haWwgdG86IExTSSBDb3Jwb3JhdGlvbiwgMTYyMSBCYXJiZXIgTGFuZSwgTWlscGl0YXMsIENBIDk1MDM1Ci0gKiAgICAgQVRUTjogTGludXhyYWlkCisgKiAgTWFpbCB0bzogQXZhZ28gVGVjaG5vbG9naWVzLCAzNTAgV2VzdCBUcmltYmxlIFJvYWQsIEJ1aWxkaW5nIDkwLAorICogIFNhbiBKb3NlLCBDYWxpZm9ybmlhIDk1MTMxCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTgzLDE0ICsxODUsMTUgQEAKIAkJLyogTmV3IFJhaWQgbWFwIHdpbGwgbm90IHNldCB0b3RhbFNpemUsIHNvIGtlZXAgZXhwZWN0ZWQgdmFsdWUKIAkJICogZm9yIGxlZ2FjeSBjb2RlIGluIFZhbGlkYXRlTWFwSW5mbwogCQkgKi8KLQkJcERydlJhaWRNYXAtPnRvdGFsU2l6ZSA9IHNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfRVhUKTsKKwkJcERydlJhaWRNYXAtPnRvdGFsU2l6ZSA9CisJCQljcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IE1SX0ZXX1JBSURfTUFQX0VYVCkpOwogCX0gZWxzZSB7CiAJCWZ3X21hcF9vbGQgPSAoc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTCAqKQogCQkJZnVzaW9uLT5sZF9tYXBbKGluc3RhbmNlLT5tYXBfaWQgJiAxKV07CiAJCXBGd1JhaWRNYXAgPSAmZndfbWFwX29sZC0+cmFpZE1hcDsKIAogI2lmIFZEX0VYVF9ERUJVRwotCQlmb3IgKGkgPSAwOyBpIDwgcEZ3UmFpZE1hcC0+bGRDb3VudDsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwRndSYWlkTWFwLT5sZENvdW50KTsgaSsrKSB7CiAJCQlkZXZfZGJnKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiKCVkKSA6SW5kZXggMHgleCAiCiAJCQkJIlRhcmdldCBJZCAweCV4IFNlcSBOdW0gMHgleCBTaXplIDAvJWxseFxuIiwKIAkJCQlpbnN0YW5jZS0+dW5pcXVlX2lkLCBpLApAQCAtMjAyLDEyICsyMDUsMTIgQEAKIAogCQltZW1zZXQoZHJ2X21hcCwgMCwgZnVzaW9uLT5kcnZfbWFwX3N6KTsKIAkJcERydlJhaWRNYXAtPnRvdGFsU2l6ZSA9IHBGd1JhaWRNYXAtPnRvdGFsU2l6ZTsKLQkJcERydlJhaWRNYXAtPmxkQ291bnQgPSBwRndSYWlkTWFwLT5sZENvdW50OworCQlwRHJ2UmFpZE1hcC0+bGRDb3VudCA9IChfX2xlMTYpcEZ3UmFpZE1hcC0+bGRDb3VudDsKIAkJcERydlJhaWRNYXAtPmZwUGRJb1RpbWVvdXRTZWMgPSBwRndSYWlkTWFwLT5mcFBkSW9UaW1lb3V0U2VjOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1JBSURNQVBfTE9HSUNBTF9EUklWRVMgKyBNQVhfUkFJRE1BUF9WSUVXUzsgaSsrKQogCQkJcERydlJhaWRNYXAtPmxkVGd0SWRUb0xkW2ldID0KIAkJCQkodTgpcEZ3UmFpZE1hcC0+bGRUZ3RJZFRvTGRbaV07Ci0JCWZvciAoaSA9IDA7IGkgPCBwRHJ2UmFpZE1hcC0+bGRDb3VudDsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwRHJ2UmFpZE1hcC0+bGRDb3VudCk7IGkrKykgewogCQkJcERydlJhaWRNYXAtPmxkU3Bhbk1hcFtpXSA9IHBGd1JhaWRNYXAtPmxkU3Bhbk1hcFtpXTsKICNpZiBWRF9FWFRfREVCVUcKIAkJCWRldl9kYmcoJmluc3RhbmNlLT5wZGV2LT5kZXYsCkBAIC0yNjgsNyArMjcxLDcgQEAKIAllbHNlCiAJCWV4cGVjdGVkX3NpemUgPQogCQkJKHNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVApIC0gc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKwotCQkJKHNpemVvZihzdHJ1Y3QgTVJfTERfU1BBTl9NQVApICogbGUzMl90b19jcHUocERydlJhaWRNYXAtPmxkQ291bnQpKSk7CisJCQkoc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKiBsZTE2X3RvX2NwdShwRHJ2UmFpZE1hcC0+bGRDb3VudCkpKTsKIAogCWlmIChsZTMyX3RvX2NwdShwRHJ2UmFpZE1hcC0+dG90YWxTaXplKSAhPSBleHBlY3RlZF9zaXplKSB7CiAJCWRldl9lcnIoJmluc3RhbmNlLT5wZGV2LT5kZXYsICJtYXAgaW5mbyBzdHJ1Y3R1cmUgc2l6ZSAweCV4IGlzIG5vdCBtYXRjaGluZyB3aXRoIGxkIGNvdW50XG4iLApAQCAtMjg0LDcgKzI4Nyw3IEBACiAKIAltcl91cGRhdGVfbG9hZF9iYWxhbmNlX3BhcmFtcyhkcnZfbWFwLCBsYkluZm8pOwogCi0JbnVtX2xkcyA9IGxlMzJfdG9fY3B1KGRydl9tYXAtPnJhaWRNYXAubGRDb3VudCk7CisJbnVtX2xkcyA9IGxlMTZfdG9fY3B1KGRydl9tYXAtPnJhaWRNYXAubGRDb3VudCk7CiAKIAkvKkNvbnZlcnQgUmFpZCBjYXBhYmlsaXR5IHZhbHVlcyB0byBDUFUgYXJjaCAqLwogCWZvciAobGRDb3VudCA9IDA7IGxkQ291bnQgPCBudW1fbGRzOyBsZENvdW50KyspIHsKQEAgLTQ1Nyw3ICs0NjAsNyBAQAogCQkJCXF1YWQgPSAmbWFwLT5yYWlkTWFwLmxkU3Bhbk1hcFtsZF0uCiAJCQkJCXNwYW5CbG9ja1tzcGFuXS4KIAkJCQkJYmxvY2tfc3Bhbl9pbmZvLnF1YWRbaW5mb107Ci0JCQkJaWYgKGxlMzJfdG9fY3B1KHF1YWQtPmRpZmYgPT0gMCkpCisJCQkJaWYgKGxlMzJfdG9fY3B1KHF1YWQtPmRpZmYpID09IDApCiAJCQkJCXJldHVybiBTUEFOX0lOVkFMSUQ7CiAJCQkJaWYgKGxlNjRfdG9fY3B1KHF1YWQtPmxvZ1N0YXJ0KSA8PSByb3cgICYmCiAJCQkJCXJvdyA8PSBsZTY0X3RvX2NwdShxdWFkLT5sb2dFbmQpICAmJgpAQCAtNTIwLDcgKzUyMyw3IEBACiAJCQkJc3Bhbl9zZXQtPnNwYW5fcm93X2RhdGFfd2lkdGgpICogc3Bhbl9zZXQtPmRpZmY7CiAJCWZvciAoc3BhbiA9IDAsIHNwYW5fb2Zmc2V0ID0gMDsgc3BhbiA8IHJhaWQtPnNwYW5EZXB0aDsgc3BhbisrKQogCQkJaWYgKGxlMzJfdG9fY3B1KG1hcC0+cmFpZE1hcC5sZFNwYW5NYXBbbGRdLnNwYW5CbG9ja1tzcGFuXS4KLQkJCQlibG9ja19zcGFuX2luZm8ubm9FbGVtZW50cyA+PSBpbmZvKzEpKSB7CisJCQkJYmxvY2tfc3Bhbl9pbmZvLm5vRWxlbWVudHMpID49IGluZm8rMSkgewogCQkJCWlmIChzdHJpcF9vZmZzZXQgPj0KIAkJCQkJc3Bhbl9zZXQtPnN0cmlwX29mZnNldFtzcGFuXSkKIAkJCQkJc3Bhbl9vZmZzZXQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Z1c2lvbi5jCmluZGV4IGYzN2VlZDYuLjcxNTU3ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycwogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiAgTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEzICBMU0kgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCAgQXZhZ28gVGVjaG5vbG9naWVzCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTQsMTkgKzE1LDIwIEBACiAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKgogICogIEZJTEU6IG1lZ2FyYWlkX3Nhc19mdXNpb24uYwogICoKLSAqICBBdXRob3JzOiBMU0kgQ29ycG9yYXRpb24KKyAqICBBdXRob3JzOiBBdmFnbyBUZWNobm9sb2dpZXMKICAqICAgICAgICAgICBTdW1hbnQgUGF0cm8KLSAqICAgICAgICAgICBBZGFtIFJhZGZvcmQgPGxpbnV4cmFpZEBsc2kuY29tPgorICogICAgICAgICAgIEFkYW0gUmFkZm9yZAorICogICAgICAgICAgIEthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KKyAqICAgICAgICAgICBTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgogICoKLSAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICogIFNlbmQgZmVlZGJhY2sgdG86IG1lZ2FyYWlkbGludXgucGRsQGF2YWdvdGVjaC5jb20KICAqCi0gKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKLSAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqICBNYWlsIHRvOiBBdmFnbyBUZWNobm9sb2dpZXMsIDM1MCBXZXN0IFRyaW1ibGUgUm9hZCwgQnVpbGRpbmcgOTAsCisgKiAgU2FuIEpvc2UsIENhbGlmb3JuaWEgOTUxMzEKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC04ODAsNyArODgyLDcgQEAKIAogCW1hcCA9IGZ1c2lvbi0+bGRfZHJ2X21hcFtpbnN0YW5jZS0+bWFwX2lkICYgMV07CiAKLQludW1fbGRzID0gbGUzMl90b19jcHUobWFwLT5yYWlkTWFwLmxkQ291bnQpOworCW51bV9sZHMgPSBsZTE2X3RvX2NwdShtYXAtPnJhaWRNYXAubGRDb3VudCk7CiAKIAlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CiAKQEAgLTEwNjUsNDggKzEwNjcsMTYgQEAKIAkJZ290byBmYWlsX2lvY19pbml0OwogCiAJbWVnYXNhc19kaXNwbGF5X2ludGVsX2JyYW5kaW5nKGluc3RhbmNlKTsKLQlpZiAobWVnYXNhc19nZXRfY3RybF9pbmZvKGluc3RhbmNlLCBpbnN0YW5jZS0+Y3RybF9pbmZvKSkgeworCWlmIChtZWdhc2FzX2dldF9jdHJsX2luZm8oaW5zdGFuY2UpKSB7CiAJCWRldl9lcnIoJmluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkiQ291bGQgbm90IGdldCBjb250cm9sbGVyIGluZm8uIEZhaWwgZnJvbSAlcyAlZFxuIiwKIAkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCWdvdG8gZmFpbF9pb2NfaW5pdDsKIAl9CiAKLQlpbnN0YW5jZS0+c3VwcG9ydG1heDI1NnZkID0KLQkJaW5zdGFuY2UtPmN0cmxfaW5mby0+YWRhcHRlck9wZXJhdGlvbnMzLnN1cHBvcnRNYXhFeHRMRHM7Ci0JLyogQmVsb3cgaXMgYWRkaXRpb25hbCBjaGVjayB0byBhZGRyZXNzIGZ1dHVyZSBGVyBlbmhhbmNlbWVudCAqLwotCWlmIChpbnN0YW5jZS0+Y3RybF9pbmZvLT5tYXhfbGRzID4gNjQpCi0JCWluc3RhbmNlLT5zdXBwb3J0bWF4MjU2dmQgPSAxOwotCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3ZkX2NvdW50ID0gTUVHQVNBU19NQVhfTERfQ0hBTk5FTFMKLQkJCQkJKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7Ci0JaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfcGRfY291bnQgPSBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUwotCQkJCQkqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKLQlpZiAoaW5zdGFuY2UtPnN1cHBvcnRtYXgyNTZ2ZCkgewotCQlpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3ZkX2NvdW50ID0gTUFYX0xPR0lDQUxfRFJJVkVTX0VYVDsKLQkJaW5zdGFuY2UtPmZ3X3N1cHBvcnRlZF9wZF9jb3VudCA9IE1BWF9QSFlTSUNBTF9ERVZJQ0VTOwotCX0gZWxzZSB7Ci0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQgPSBNQVhfTE9HSUNBTF9EUklWRVM7Ci0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQgPSBNQVhfUEhZU0lDQUxfREVWSUNFUzsKLQl9Ci0JZGV2X2luZm8oJmluc3RhbmNlLT5wZGV2LT5kZXYsICJGaXJtd2FyZSBzdXBwb3J0cyAlZCBWRHMgJWQgUERzXG4iCi0JCSJEcml2ZXIgc3VwcG9ydHMgJWQgVkRzICAlZCBQRHNcbiIsCi0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQsCi0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQsCi0JCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3ZkX2NvdW50LAotCQlpbnN0YW5jZS0+ZHJ2X3N1cHBvcnRlZF9wZF9jb3VudCk7Ci0KIAlpbnN0YW5jZS0+ZmxhZ19pZWVlID0gMTsKIAlmdXNpb24tPmZhc3RfcGF0aF9pbyA9IDA7CiAKLQlmdXNpb24tPm9sZF9tYXBfc3ogPQotCQlzaXplb2Yoc3RydWN0IE1SX0ZXX1JBSURfTUFQKSArIChzaXplb2Yoc3RydWN0IE1SX0xEX1NQQU5fTUFQKSAqCi0JCShpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3ZkX2NvdW50IC0gMSkpOwotCWZ1c2lvbi0+bmV3X21hcF9zeiA9Ci0JCXNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfRVhUKTsKLQlmdXNpb24tPmRydl9tYXBfc3ogPQotCQlzaXplb2Yoc3RydWN0IE1SX0RSVl9SQUlEX01BUCkgKyAoc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKgotCQkoaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfdmRfY291bnQgLSAxKSk7Ci0KIAlmdXNpb24tPmRydl9tYXBfcGFnZXMgPSBnZXRfb3JkZXIoZnVzaW9uLT5kcnZfbWFwX3N6KTsKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWZ1c2lvbi0+bGRfbWFwW2ldID0gTlVMTDsKQEAgLTExMjEsMTYgKzEwOTEsMTAgQEAKIAkJCQkJZnVzaW9uLT5kcnZfbWFwX3BhZ2VzKTsKIAkJCWdvdG8gZmFpbF9pb2NfaW5pdDsKIAkJfQorCQltZW1zZXQoZnVzaW9uLT5sZF9kcnZfbWFwW2ldLCAwLAorCQkJKCgxIDw8IFBBR0VfU0hJRlQpIDw8IGZ1c2lvbi0+ZHJ2X21hcF9wYWdlcykpOwogCX0KIAotCWZ1c2lvbi0+bWF4X21hcF9zeiA9IG1heChmdXNpb24tPm9sZF9tYXBfc3osIGZ1c2lvbi0+bmV3X21hcF9zeik7Ci0KLQlpZiAoaW5zdGFuY2UtPnN1cHBvcnRtYXgyNTZ2ZCkKLQkJZnVzaW9uLT5jdXJyZW50X21hcF9zeiA9IGZ1c2lvbi0+bmV3X21hcF9zejsKLQllbHNlCi0JCWZ1c2lvbi0+Y3VycmVudF9tYXBfc3ogPSBmdXNpb24tPm9sZF9tYXBfc3o7Ci0KLQogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJZnVzaW9uLT5sZF9tYXBbaV0gPSBkbWFfYWxsb2NfY29oZXJlbnQoJmluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkJCQkgICAgICAgZnVzaW9uLT5tYXhfbWFwX3N6LApAQCAtMTE3Myw5ICsxMTM3LDEwIEBACiAJCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKIHsKICNpZiBkZWZpbmVkKHdyaXRlcSkgJiYgZGVmaW5lZChDT05GSUdfNjRCSVQpCi0JdTY0IHJlcV9kYXRhID0gKCgodTY0KXJlcV9kZXNjX2hpIDw8IDMyKSB8ICh1MzIpcmVxX2Rlc2NfbG8pOworCXU2NCByZXFfZGF0YSA9ICgoKHU2NClsZTMyX3RvX2NwdShyZXFfZGVzY19oaSkgPDwgMzIpIHwKKwkJCWxlMzJfdG9fY3B1KHJlcV9kZXNjX2xvKSk7CiAKLQl3cml0ZXEobGU2NF90b19jcHUocmVxX2RhdGEpLCAmKHJlZ3MpLT5pbmJvdW5kX2xvd19xdWV1ZV9wb3J0KTsKKwl3cml0ZXEocmVxX2RhdGEsICYocmVncyktPmluYm91bmRfbG93X3F1ZXVlX3BvcnQpOwogI2Vsc2UKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMzczLDcgKzEzMzgsNyBAQAogCQkvKiBMb2dpY2FsIGJsb2NrIHJlZmVyZW5jZSB0YWcgKi8KIAkJaW9fcmVxdWVzdC0+Q0RCLkVFRFAzMi5QcmltYXJ5UmVmZXJlbmNlVGFnID0KIAkJCWNwdV90b19iZTMyKHJlZl90YWcpOwotCQlpb19yZXF1ZXN0LT5DREIuRUVEUDMyLlByaW1hcnlBcHBsaWNhdGlvblRhZ01hc2sgPSAweGZmZmY7CisJCWlvX3JlcXVlc3QtPkNEQi5FRURQMzIuUHJpbWFyeUFwcGxpY2F0aW9uVGFnTWFzayA9IGNwdV90b19iZTE2KDB4ZmZmZik7CiAJCWlvX3JlcXVlc3QtPklvRmxhZ3MgPSBjcHVfdG9fbGUxNigzMik7IC8qIFNwZWNpZnkgMzItYnl0ZSBjZGIgKi8KIAogCQkvKiBUcmFuc2ZlciBsZW5ndGggKi8KQEAgLTE3NjksNyArMTczNCw3IEBACiAKIAkJLyogc2V0IFJBSUQgY29udGV4dCB2YWx1ZXMgKi8KIAkJcFJBSURfQ29udGV4dC0+cmVnTG9ja0ZsYWdzICAgICA9IFJFR0lPTl9UWVBFX1NIQVJFRF9SRUFEOwotCQlwUkFJRF9Db250ZXh0LT50aW1lb3V0VmFsdWUgICAgID0gcmFpZC0+ZnBJb1RpbWVvdXRGb3JMZDsKKwkJcFJBSURfQ29udGV4dC0+dGltZW91dFZhbHVlICAgICA9IGNwdV90b19sZTE2KHJhaWQtPmZwSW9UaW1lb3V0Rm9yTGQpOwogCQlwUkFJRF9Db250ZXh0LT5WaXJ0dWFsRGlza1RndElkID0gY3B1X3RvX2xlMTYoZGV2aWNlX2lkKTsKIAkJcFJBSURfQ29udGV4dC0+cmVnTG9ja1Jvd0xCQSAgICA9IDA7CiAJCXBSQUlEX0NvbnRleHQtPnJlZ0xvY2tMZW5ndGggICAgPSAwOwpAQCAtMjI1NCw3ICsyMjE5LDcgQEAKIAkgKiBtZWdhc2FzX2NvbXBsZXRlX2NtZAogCSAqLwogCi0JaWYgKGZyYW1lX2hkci0+ZmxhZ3MgJiBNRklfRlJBTUVfRE9OVF9QT1NUX0lOX1JFUExZX1FVRVVFKQorCWlmIChmcmFtZV9oZHItPmZsYWdzICYgY3B1X3RvX2xlMTYoTUZJX0ZSQU1FX0RPTlRfUE9TVF9JTl9SRVBMWV9RVUVVRSkpCiAJCWNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRE9OVF9QT1NUX0lOX1JFUExZX1FVRVVFOwogCiAJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKQEAgLTIzODUsNiArMjM1MCw4IEBACiAJCQkJIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBhdCBpbmRleCAlZFxuIiwgaSk7CiAJCQlicmVhazsKIAkJfQorCQltZW1zZXQoaW5zdGFuY2UtPmNyYXNoX2J1ZltpXSwgMCwKKwkJCSgoMSA8PCBQQUdFX1NISUZUKSA8PCBpbnN0YW5jZS0+Y3Jhc2hfYnVmX3BhZ2VzKSk7CiAJfQogCWluc3RhbmNlLT5kcnZfYnVmX2FsbG9jID0gaTsKIH0KQEAgLTI4MzcsMTEgKzI4MDQsMTUgQEAKIAkJCQl9CiAJCQl9CiAKLQkJCWNsZWFyX2JpdChNRUdBU0FTX0ZVU0lPTl9JTl9SRVNFVCwKLQkJCQkgICZpbnN0YW5jZS0+cmVzZXRfZmxhZ3MpOwotCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZW5hYmxlX2ludHIoaW5zdGFuY2UpOwotCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUw7Ci0KKwkJCWlmIChtZWdhc2FzX2dldF9jdHJsX2luZm8oaW5zdGFuY2UpKSB7CisJCQkJZGV2X2luZm8oJmluc3RhbmNlLT5wZGV2LT5kZXYsCisJCQkJCSJGYWlsZWQgZnJvbSAlcyAlZFxuIiwKKwkJCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJCQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPQorCQkJCQlNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOworCQkJCW1lZ2FyYWlkX3Nhc19raWxsX2hiYShpbnN0YW5jZSk7CisJCQkJcmV0dmFsID0gRkFJTEVEOworCQkJfQogCQkJLyogUmVzZXQgbG9hZCBiYWxhbmNlIGluZm8gKi8KIAkJCW1lbXNldChmdXNpb24tPmxvYWRfYmFsYW5jZV9pbmZvLCAwLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgTERfTE9BRF9CQUxBTkNFX0lORk8pCkBAIC0yODUwLDYgKzI4MjEsMTEgQEAKIAkJCWlmICghbWVnYXNhc19nZXRfbWFwX2luZm8oaW5zdGFuY2UpKQogCQkJCW1lZ2FzYXNfc3luY19tYXBfaW5mbyhpbnN0YW5jZSk7CiAKKwkJCWNsZWFyX2JpdChNRUdBU0FTX0ZVU0lPTl9JTl9SRVNFVCwKKwkJCQkgICZpbnN0YW5jZS0+cmVzZXRfZmxhZ3MpOworCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZW5hYmxlX2ludHIoaW5zdGFuY2UpOworCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUw7CisKIAkJCS8qIFJlc3RhcnQgU1ItSU9WIGhlYXJ0YmVhdCAqLwogCQkJaWYgKGluc3RhbmNlLT5yZXF1ZXN0b3JJZCkgewogCQkJCWlmICghbWVnYXNhc19zcmlvdl9zdGFydF9oZWFydGJlYXQoaW5zdGFuY2UsIDApKQpAQCAtMjg2NiwxNCArMjg0MiwxNCBAQAogCQkJICAgICAgICJzdWNjZXNzZnVsIGZvciBzY3NpJWQuXG4iLAogCQkJCWluc3RhbmNlLT5ob3N0LT5ob3N0X25vKTsKIAotCQkJaWYgKGluc3RhbmNlLT5jcmFzaF9kdW1wX2Rydl9zdXBwb3J0KSB7Ci0JCQkJaWYgKGluc3RhbmNlLT5jcmFzaF9kdW1wX2FwcF9zdXBwb3J0KQotCQkJCQltZWdhc2FzX3NldF9jcmFzaF9kdW1wX3BhcmFtcyhpbnN0YW5jZSwKLQkJCQkJCU1SX0NSQVNIX0JVRl9UVVJOX09OKTsKLQkJCQllbHNlCi0JCQkJCW1lZ2FzYXNfc2V0X2NyYXNoX2R1bXBfcGFyYW1zKGluc3RhbmNlLAotCQkJCQkJTVJfQ1JBU0hfQlVGX1RVUk5fT0ZGKTsKLQkJCX0KKwkJCWlmIChpbnN0YW5jZS0+Y3Jhc2hfZHVtcF9kcnZfc3VwcG9ydCAmJgorCQkJCWluc3RhbmNlLT5jcmFzaF9kdW1wX2FwcF9zdXBwb3J0KQorCQkJCW1lZ2FzYXNfc2V0X2NyYXNoX2R1bXBfcGFyYW1zKGluc3RhbmNlLAorCQkJCQlNUl9DUkFTSF9CVUZfVFVSTl9PTik7CisJCQllbHNlCisJCQkJbWVnYXNhc19zZXRfY3Jhc2hfZHVtcF9wYXJhbXMoaW5zdGFuY2UsCisJCQkJCU1SX0NSQVNIX0JVRl9UVVJOX09GRik7CisKIAkJCXJldHZhbCA9IFNVQ0NFU1M7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmgKaW5kZXggMGQxODNkNS4uNWFiN2RhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Z1c2lvbi5oCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqICBMaW51eCBNZWdhUkFJRCBkcml2ZXIgZm9yIFNBUyBiYXNlZCBSQUlEIGNvbnRyb2xsZXJzCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEyICBMU0kgQ29ycG9yYXRpb24uCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTMgIExTSSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoYykgMjAxMy0yMDE0ICBBdmFnbyBUZWNobm9sb2dpZXMKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNCwxOSArMTUsMjAgQEAKICAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqCiAgKiAgRklMRTogbWVnYXJhaWRfc2FzX2Z1c2lvbi5oCiAgKgotICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcnM6IEF2YWdvIFRlY2hub2xvZ2llcwogICogICAgICAgICAgIE1hbm9qIEpvc2UKICAqICAgICAgICAgICBTdW1hbnQgUGF0cm8KKyAqICAgICAgICAgICBLYXNoeWFwIERlc2FpIDxrYXNoeWFwLmRlc2FpQGF2YWdvdGVjaC5jb20+CisgKiAgICAgICAgICAgU3VtaXQgU2F4ZW5hIDxzdW1pdC5zYXhlbmFAYXZhZ290ZWNoLmNvbT4KICAqCi0gKiAgU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkbGludXhAbHNpLmNvbT4KKyAqICBTZW5kIGZlZWRiYWNrIHRvOiBtZWdhcmFpZGxpbnV4LnBkbEBhdmFnb3RlY2guY29tCiAgKgotICogIE1haWwgdG86IExTSSBDb3Jwb3JhdGlvbiwgMTYyMSBCYXJiZXIgTGFuZSwgTWlscGl0YXMsIENBIDk1MDM1Ci0gKiAgICAgQVRUTjogTGludXhyYWlkCisgKiAgTWFpbCB0bzogQXZhZ28gVGVjaG5vbG9naWVzLCAzNTAgV2VzdCBUcmltYmxlIFJvYWQsIEJ1aWxkaW5nIDkwLAorICogIFNhbiBKb3NlLCBDYWxpZm9ybmlhIDk1MTMxCiAgKi8KIAogI2lmbmRlZiBfTUVHQVJBSURfU0FTX0ZVU0lPTl9IXwpAQCAtODM0LDggKzgzNiw2IEBACiAKIAl1MzIgbWF4X21hcF9zejsKIAl1MzIgY3VycmVudF9tYXBfc3o7Ci0JdTMyIG9sZF9tYXBfc3o7Ci0JdTMyIG5ld19tYXBfc3o7CiAJdTMyIGRydl9tYXBfc3o7CiAJdTMyIGRydl9tYXBfcGFnZXM7CiAJdTggZmFzdF9wYXRoX2lvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IGM4MGVkMDQuLjg0MzFlYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTExNzksMTUgKzExNzksMTQgQEAKIH0KIAogLyoqCi0gKiBfc2NzaWhfYWRqdXN0X3F1ZXVlX2RlcHRoIC0gc2V0dGluZyBkZXZpY2UgcXVldWUgZGVwdGgKKyAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAogICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCiAgKgotICoKLSAqIFJldHVybnMgbm90aGluZworICogUmV0dXJucyBxdWV1ZSBkZXB0aC4KICAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF9hZGp1c3RfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQorc3RhdGljIGludAorX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCWludCBtYXhfZGVwdGg7CkBAIC0xMjE3LDYzICsxMjE2LDExIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAogIG5vdF9zYXRhOgotCiAJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQogCQltYXhfZGVwdGggPSAxOwogCWlmIChxZGVwdGggPiBtYXhfZGVwdGgpCiAJCXFkZXB0aCA9IG1heF9kZXB0aDsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgcWRlcHRoKTsKLX0KLQotLyoqCi0gKiBfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gc2V0dGluZyBkZXZpY2UgcXVldWUgZGVwdGgKLSAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKLSAqIEBxZGVwdGg6IHJlcXVlc3RlZCBxdWV1ZSBkZXB0aAotICogQHJlYXNvbjogU0NTSV9RREVQVEhfREVGQVVMVC9TQ1NJX1FERVBUSF9RRlVMTC9TQ1NJX1FERVBUSF9SQU1QX1VQCi0gKiAoc2VlIGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBmb3IgZGVmaW5pdGlvbikKLSAqCi0gKiBSZXR1cm5zIHF1ZXVlIGRlcHRoLgotICovCi1zdGF0aWMgaW50Ci1fc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlpZiAocmVhc29uID09IFNDU0lfUURFUFRIX0RFRkFVTFQgfHwgcmVhc29uID09IFNDU0lfUURFUFRIX1JBTVBfVVApCi0JCV9zY3NpaF9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKLQllbHNlIGlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfUUZVTEwpCi0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpOwotCWVsc2UKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHNkZXYtPmlucXVpcnlfbGVuID4gNykKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAicWRlcHRoKCVkKSwgdGFnZ2VkKCVkKSwgIgotCQkic2ltcGxlKCVkKSwgb3JkZXJlZCglZCksIHNjc2lfbGV2ZWwoJWQpLCBjbWRfcXVlKCVkKVxuIiwKLQkJc2Rldi0+cXVldWVfZGVwdGgsIHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQsIHNkZXYtPnNpbXBsZV90YWdzLAotCQlzZGV2LT5vcmRlcmVkX3RhZ3MsIHNkZXYtPnNjc2lfbGV2ZWwsCi0JCShzZGV2LT5pbnF1aXJ5WzddICYgMikgPj4gMSk7Ci0KLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci0KLS8qKgotICogX3Njc2loX2NoYW5nZV9xdWV1ZV90eXBlIC0gY2hhbmdpbmcgZGV2aWNlIHF1ZXVlIHRhZyB0eXBlCi0gKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0Ci0gKiBAdGFnX3R5cGU6IHJlcXVlc3RlZCB0YWcgdHlwZQotICoKLSAqIFJldHVybnMgcXVldWUgdGFnIHR5cGUuCi0gKi8KLXN0YXRpYyBpbnQKLV9zY3NpaF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKLXsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7Ci0JCWlmICh0YWdfdHlwZSkKLQkJCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JfSBlbHNlCi0JCXRhZ190eXBlID0gMDsKLQotCXJldHVybiB0YWdfdHlwZTsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKIH0KIAogLyoqCkBAIC0yMTA0LDcgKzIwNTEsNyBAQAogCQkJICAgIHJfbGV2ZWwsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyYWlkX2RldmljZS0+d3dpZCwKIAkJCSAgICByYWlkX2RldmljZS0+bnVtX3BkcywgZHMpOwotCQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJCV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKIAkJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLwogCQlpZiAoIWlvYy0+aXNfd2FycGRyaXZlKQogCQkJX3Njc2loX3NldF9sZXZlbChzZGV2LCByYWlkX2RldmljZS0+dm9sdW1lX3R5cGUpOwpAQCAtMjE2OSw3ICsyMTE2LDcgQEAKIAkJX3Njc2loX2Rpc3BsYXlfc2F0YV9jYXBhYmlsaXRpZXMoaW9jLCBoYW5kbGUsIHNkZXYpOwogCiAKLQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogCiAJaWYgKHNzcF90YXJnZXQpIHsKIAkJc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc2Rldik7CkBAIC0zOTY2LDE2ICszOTEzLDggQEAKIAkJbXBpX2NvbnRyb2wgPSBNUEkyX1NDU0lJT19DT05UUk9MX05PREFUQVRSQU5TRkVSOwogCiAJLyogc2V0IHRhZ3MgKi8KLQlpZiAoIShzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX0ZMQUdTX0lOSVQpKSB7Ci0JCWlmIChzY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJCWlmIChzY21kLT5kZXZpY2UtPm9yZGVyZWRfdGFncykKLQkJCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX09SREVSRURROwotCQkJZWxzZQotCQkJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQkJfSBlbHNlCi0JCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7Ci0JfSBlbHNlCi0JCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKKwltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7CisKIAkvKiBNYWtlIHN1cmUgRGV2aWNlIGlzIG5vdCByYWlkIHZvbHVtZS4KIAkgKiBXZSBkbyBub3QgZXhwb3NlIHJhaWQgZnVuY3Rpb25hbGl0eSB0byB1cHBlciBsYXllciBmb3Igd2FycGRyaXZlLgogCSAqLwpAQCAtNzY1Myw3ICs3NTkyLDcgQEAKIAkuc2Nhbl9maW5pc2hlZAkJCT0gX3Njc2loX3NjYW5fZmluaXNoZWQsCiAJLnNjYW5fc3RhcnQJCQk9IF9zY3NpaF9zY2FuX3N0YXJ0LAogCS5jaGFuZ2VfcXVldWVfZGVwdGggCQk9IF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlCQk9IF9zY3NpaF9jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBfc2NzaWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyCT0gX3Njc2loX2Rldl9yZXNldCwKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIJPSBfc2NzaWhfdGFyZ2V0X3Jlc2V0LApAQCAtNzY2Nyw2ICs3NjA2LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zaG9zdF9hdHRycwkJCT0gbXB0MnNhc19ob3N0X2F0dHJzLAogCS5zZGV2X2F0dHJzCQkJPSBtcHQyc2FzX2Rldl9hdHRycywKKwkudHJhY2tfcXVldWVfZGVwdGgJCT0gMSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19zY3NpaC5jCmluZGV4IDg1NzI3NmIuLmEyYjYwOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3Njc2loLmMKQEAgLTEwNTMsOSArMTA1MywxNSBAQAogCXJldHVybiBmb3VuZDsKIH0KIAotCi1zdGF0aWMgdm9pZAotX3Njc2loX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCisvKioKKyAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCisgKgorICogUmV0dXJucyBxdWV1ZSBkZXB0aC4KKyAqLworc3RhdGljIGludAorX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCWludCBtYXhfZGVwdGg7CkBAIC0xMDkwLDYyICsxMDk2LDEwIEBACiAJCW1heF9kZXB0aCA9IDE7CiAJaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKIAkJcWRlcHRoID0gbWF4X2RlcHRoOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiAvKioKLSAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAotICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAotICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCi0gKiBAcmVhc29uOiBTQ1NJX1FERVBUSF9ERUZBVUxUL1NDU0lfUURFUFRIX1FGVUxML1NDU0lfUURFUFRIX1JBTVBfVVAKLSAqIChzZWUgaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGZvciBkZWZpbml0aW9uKQotICoKLSAqIFJldHVybnMgcXVldWUgZGVwdGguCi0gKi8KLXN0YXRpYyBpbnQKLV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLCBpbnQgcmVhc29uKQotewotCWlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfREVGQVVMVCB8fCByZWFzb24gPT0gU0NTSV9RREVQVEhfUkFNUF9VUCkKLQkJX3Njc2loX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwotCWVsc2UgaWYgKHJlYXNvbiA9PSBTQ1NJX1FERVBUSF9RRlVMTCkKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIHFkZXB0aCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoc2Rldi0+aW5xdWlyeV9sZW4gPiA3KQotCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICJxZGVwdGgoJWQpLCB0YWdnZWQoJWQpLCAiIFwKLQkJInNpbXBsZSglZCksIG9yZGVyZWQoJWQpLCBzY3NpX2xldmVsKCVkKSwgY21kX3F1ZSglZClcbiIsCi0JCXNkZXYtPnF1ZXVlX2RlcHRoLCBzZGV2LT50YWdnZWRfc3VwcG9ydGVkLCBzZGV2LT5zaW1wbGVfdGFncywKLQkJc2Rldi0+b3JkZXJlZF90YWdzLCBzZGV2LT5zY3NpX2xldmVsLAotCQkoc2Rldi0+aW5xdWlyeVs3XSAmIDIpID4+IDEpOwotCi0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCi0vKioKLSAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfdHlwZSAtIGNoYW5naW5nIGRldmljZSBxdWV1ZSB0YWcgdHlwZQotICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAotICogQHRhZ190eXBlOiByZXF1ZXN0ZWQgdGFnIHR5cGUKLSAqCi0gKiBSZXR1cm5zIHF1ZXVlIHRhZyB0eXBlLgotICovCi1zdGF0aWMgaW50Ci1fc2NzaWhfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnX3R5cGUpCi17Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOwotCQlpZiAodGFnX3R5cGUpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQl0YWdfdHlwZSA9IDA7Ci0KLQlyZXR1cm4gdGFnX3R5cGU7Ci19Ci0KLQotLyoqCiAgKiBfc2NzaWhfdGFyZ2V0X2FsbG9jIC0gdGFyZ2V0IGFkZCByb3V0aW5lCiAgKiBAc3RhcmdldDogc2NzaSB0YXJnZXQgc3RydWN0CiAgKgpAQCAtMTc2Miw3ICsxNzE2LDcgQEAKIAkJCSByYWlkX2RldmljZS0+bnVtX3BkcywgZHMpOwogCiAKLQkJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgsIFNDU0lfUURFUFRIX0RFRkFVTFQpOworCQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CiAKIC8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KIAkJX3Njc2loX3NldF9sZXZlbChzZGV2LCByYWlkX2RldmljZS0+dm9sdW1lX3R5cGUpOwpAQCAtMTgyOCw3ICsxNzgyLDcgQEAKIAkJX3Njc2loX2Rpc3BsYXlfc2F0YV9jYXBhYmlsaXRpZXMoaW9jLCBoYW5kbGUsIHNkZXYpOwogCiAKLQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogCiAJaWYgKHNzcF90YXJnZXQpIHsKIAkJc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc2Rldik7CkBAIC0zNTg2LDE2ICszNTQwLDcgQEAKIAkJbXBpX2NvbnRyb2wgPSBNUEkyX1NDU0lJT19DT05UUk9MX05PREFUQVRSQU5TRkVSOwogCiAJLyogc2V0IHRhZ3MgKi8KLQlpZiAoIShzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX0ZMQUdTX0lOSVQpKSB7Ci0JCWlmIChzY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJCWlmIChzY21kLT5kZXZpY2UtPm9yZGVyZWRfdGFncykKLQkJCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX09SREVSRURROwotCQkJZWxzZQotCQkJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQkJfSBlbHNlCi0JCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7Ci0JfSBlbHNlCi0JCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKKwltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7CiAKIAlpZiAoKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSAmJgogCSAgICBzY21kLT5jbWRfbGVuICE9IDMyKQpAQCAtNzI4NCw3ICs3MjI5LDcgQEAKIAkuc2Nhbl9maW5pc2hlZAkJCT0gX3Njc2loX3NjYW5fZmluaXNoZWQsCiAJLnNjYW5fc3RhcnQJCQk9IF9zY3NpaF9zY2FuX3N0YXJ0LAogCS5jaGFuZ2VfcXVldWVfZGVwdGgJCT0gX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gX3Njc2loX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfdHlwZQkJPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlLAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IF9zY3NpaF9hYm9ydCwKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIJPSBfc2NzaWhfZGV2X3Jlc2V0LAogCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlcgk9IF9zY3NpaF90YXJnZXRfcmVzZXQsCkBAIC03Mjk4LDYgKzcyNDMsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQkJPSBtcHQzc2FzX2hvc3RfYXR0cnMsCiAJLnNkZXZfYXR0cnMJCQk9IG1wdDNzYXNfZGV2X2F0dHJzLAorCS50cmFja19xdWV1ZV9kZXB0aAkJPSAxLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jIGIvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYwppbmRleCBlYWNlZTQ4Li5mMTVkZjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKQEAgLTI2LDE4ICsyNiw5IEBACiAKICNpbmNsdWRlICJtdl9zYXMuaCIKIAotc3RhdGljIGludCBsbGRkX21heF9leGVjdXRlX251bSA9IDE7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoY29sbGVjdG9yLCBsbGRkX21heF9leGVjdXRlX251bSwgaW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoY29sbGVjdG9yLCAiXG4iCi0JIlx0SWYgZ3JlYXRlciB0aGFuIG9uZSwgdGVsbHMgdGhlIFNBUyBMYXllciB0byBydW4gaW4gVGFzayBDb2xsZWN0b3JcbiIKLQkiXHRNb2RlLiAgSWYgMSBvciAwLCB0ZWxscyB0aGUgU0FTIExheWVyIHRvIHJ1biBpbiBEaXJlY3QgTW9kZS5cbiIKLQkiXHRUaGUgbXZzYXMgU0FTIExMREQgc3VwcG9ydHMgYm90aCBtb2Rlcy5cbiIKLQkiXHREZWZhdWx0OiAxIChEaXJlY3QgTW9kZSkuXG4iKTsKLQogaW50IGludGVycnVwdF9jb2FsZXNjaW5nID0gMHg4MDsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbXZzX3N0dDsKLXN0cnVjdCBrbWVtX2NhY2hlICptdnNfdGFza19saXN0X2NhY2hlOwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdnNfY2hpcF9pbmZvIG12c19jaGlwc1tdID0gewogCVtjaGlwXzYzMjBdID0JeyAxLCAyLCAweDQwMCwgMTcsIDE2LCA2LCAgOSwgJm12c182NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzY0NDBdID0JeyAxLCA0LCAweDQwMCwgMTcsIDE2LCA2LCAgOSwgJm12c182NHh4X2Rpc3BhdGNoLCB9LApAQCAtNzYsNiArNjcsOCBAQAogCS50YXJnZXRfZGVzdHJveQkJPSBzYXNfdGFyZ2V0X2Rlc3Ryb3ksCiAJLmlvY3RsCQkJPSBzYXNfaW9jdGwsCiAJLnNob3N0X2F0dHJzCQk9IG12c3RfaG9zdF9hdHRycywKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FzX2RvbWFpbl9mdW5jdGlvbl90ZW1wbGF0ZSBtdnNfdHJhbnNwb3J0X29wcyA9IHsKQEAgLTUxMSwxNCArNTA0LDExIEBACiAKIAlzaGEtPm51bV9waHlzID0gbnJfY29yZSAqIGNoaXBfaW5mby0+bl9waHk7CiAKLQlzaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gbGxkZF9tYXhfZXhlY3V0ZV9udW07Ci0KIAlpZiAobXZpLT5mbGFncyAmIE1WRl9GTEFHX1NPQykKIAkJY2FuX3F1ZXVlID0gTVZTX1NPQ19DQU5fUVVFVUU7CiAJZWxzZQogCQljYW5fcXVldWUgPSBNVlNfQ0hJUF9TTE9UX1NaOwogCi0Jc2hhLT5sbGRkX3F1ZXVlX3NpemUgPSBjYW5fcXVldWU7CiAJc2hvc3QtPnNnX3RhYmxlc2l6ZSA9IG1pbl90KHUxNiwgU0dfQUxMLCBNVlNfTUFYX1NHKTsKIAlzaG9zdC0+Y2FuX3F1ZXVlID0gY2FuX3F1ZXVlOwogCW12aS0+c2hvc3QtPmNtZF9wZXJfbHVuID0gTVZTX1FVRVVFX1NJWkU7CkBAIC04MzEsMTYgKzgyMSw3IEBACiAJaWYgKCFtdnNfc3R0KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW12c190YXNrX2xpc3RfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibXZzX3Rhc2tfbGlzdCIsIHNpemVvZihzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCksCi0JCQkJCQkJIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7Ci0JaWYgKCFtdnNfdGFza19saXN0X2NhY2hlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJbXZfcHJpbnRrKCIlczogbXZzX3Rhc2tfbGlzdF9jYWNoZSBhbGxvYyBmYWlsZWQhIFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCiAJcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtdnNfcGNpX2RyaXZlcik7Ci0KIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dDsKIApAQCAtODU1LDcgKzgzNiw2IEBACiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtdnNfcGNpX2RyaXZlcik7CiAJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG12c19zdHQpOwotCWttZW1fY2FjaGVfZGVzdHJveShtdnNfdGFza19saXN0X2NhY2hlKTsKIH0KIAogc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm12c3RfaG9zdF9hdHRyc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jIGIvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jCmluZGV4IGFjNTJmN2MuLjg1ZDg2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmMKQEAgLTg1Miw0MyArODUyLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCAqbXZzX3Rhc2tfYWxsb2NfbGlzdChpbnQgKm51bSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCXN0cnVjdCBtdnNfdGFza19saXN0ICpmaXJzdCA9IE5VTEw7Ci0KLQlmb3IgKDsgKm51bSA+IDA7IC0tKm51bSkgewotCQlzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCAqbXZzX2xpc3QgPSBrbWVtX2NhY2hlX3phbGxvYyhtdnNfdGFza19saXN0X2NhY2hlLCBnZnBfZmxhZ3MpOwotCi0JCWlmICghbXZzX2xpc3QpCi0JCQlicmVhazsKLQotCQlJTklUX0xJU1RfSEVBRCgmbXZzX2xpc3QtPmxpc3QpOwotCQlpZiAoIWZpcnN0KQotCQkJZmlyc3QgPSBtdnNfbGlzdDsKLQkJZWxzZQotCQkJbGlzdF9hZGRfdGFpbCgmbXZzX2xpc3QtPmxpc3QsICZmaXJzdC0+bGlzdCk7Ci0KLQl9Ci0KLQlyZXR1cm4gZmlyc3Q7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtdnNfdGFza19mcmVlX2xpc3Qoc3RydWN0IG12c190YXNrX2xpc3QgKm12c19saXN0KQotewotCUxJU1RfSEVBRChsaXN0KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICphOwotCXN0cnVjdCBtdnNfdGFza19saXN0ICptbGlzdCA9IE5VTEw7Ci0KLQlfX2xpc3RfYWRkKCZsaXN0LCBtdnNfbGlzdC0+bGlzdC5wcmV2LCAmbXZzX2xpc3QtPmxpc3QpOwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgYSwgJmxpc3QpIHsKLQkJbGlzdF9kZWxfaW5pdChwb3MpOwotCQltbGlzdCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCwgbGlzdCk7Ci0JCWttZW1fY2FjaGVfZnJlZShtdnNfdGFza19saXN0X2NhY2hlLCBtbGlzdCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IG12c190YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLCBnZnBfdCBnZnBfZmxhZ3MsCitzdGF0aWMgaW50IG12c190YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLCBnZnBfdCBnZnBfZmxhZ3MsCiAJCQkJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb24sIGludCBpc190bWYsCiAJCQkJc3RydWN0IG12c190bWZfdGFzayAqdG1mKQogewpAQCAtOTEyLDc0ICs4NzYsOSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBtdnNfY29sbGVjdG9yX3Rhc2tfZXhlYyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sIGdmcF90IGdmcF9mbGFncywKLQkJCQlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGlvbiwgaW50IGlzX3RtZiwKLQkJCQlzdHJ1Y3QgbXZzX3RtZl90YXNrICp0bWYpCitpbnQgbXZzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNhc190YXNrICp0YXNrLCBnZnBfdCBnZnBfZmxhZ3MpCiB7Ci0Jc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHRhc2stPmRldjsKLQlzdHJ1Y3QgbXZzX3Bydl9pbmZvICptcGkgPSBkZXYtPnBvcnQtPmhhLT5sbGRkX2hhOwotCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gTlVMTDsKLQlzdHJ1Y3Qgc2FzX3Rhc2sgKnQgPSB0YXNrOwotCXN0cnVjdCBtdnNfdGFza19saXN0ICptdnNfbGlzdCA9IE5VTEwsICphOwotCUxJU1RfSEVBRChxKTsKLQlpbnQgcGFzc1syXSA9IHswfTsKLQl1MzIgcmMgPSAwOwotCXUzMiBuID0gbnVtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwotCi0JbXZzX2xpc3QgPSBtdnNfdGFza19hbGxvY19saXN0KCZuLCBnZnBfZmxhZ3MpOwotCWlmIChuKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG12cyBhbGxvYyBsaXN0IGZhaWxlZC5cbiIsIF9fZnVuY19fKTsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfbGlzdDsKLQl9Ci0KLQlfX2xpc3RfYWRkKCZxLCBtdnNfbGlzdC0+bGlzdC5wcmV2LCAmbXZzX2xpc3QtPmxpc3QpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShhLCAmcSwgbGlzdCkgewotCQlhLT50YXNrID0gdDsKLQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LCBzdHJ1Y3Qgc2FzX3Rhc2ssIGxpc3QpOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJnEgLCBsaXN0KSB7Ci0KLQkJdCA9IGEtPnRhc2s7Ci0JCW12aSA9ICgoc3RydWN0IG12c19kZXZpY2UgKil0LT5kZXYtPmxsZGRfZGV2KS0+bXZpX2luZm87Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm12aS0+bG9jaywgZmxhZ3MpOwotCQlyYyA9IG12c190YXNrX3ByZXAodCwgbXZpLCBpc190bWYsIHRtZiwgJnBhc3NbbXZpLT5pZF0pOwotCQlpZiAocmMpCi0JCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBtdmktPmRldiwgIm12c2FzIGV4ZWMgZmFpbGVkWyVkXSFcbiIsIHJjKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKGxpa2VseShwYXNzWzBdKSkKLQkJCU1WU19DSElQX0RJU1AtPnN0YXJ0X2RlbGl2ZXJ5KG1waS0+bXZpWzBdLAotCQkJCShtcGktPm12aVswXS0+dHhfcHJvZCAtIDEpICYgKE1WU19DSElQX1NMT1RfU1ogLSAxKSk7Ci0KLQlpZiAobGlrZWx5KHBhc3NbMV0pKQotCQkJTVZTX0NISVBfRElTUC0+c3RhcnRfZGVsaXZlcnkobXBpLT5tdmlbMV0sCi0JCQkJKG1waS0+bXZpWzFdLT50eF9wcm9kIC0gMSkgJiAoTVZTX0NISVBfU0xPVF9TWiAtIDEpKTsKLQotCWxpc3RfZGVsX2luaXQoJnEpOwotCi1mcmVlX2xpc3Q6Ci0JaWYgKG12c19saXN0KQotCQltdnNfdGFza19mcmVlX2xpc3QobXZzX2xpc3QpOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgbXZzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLAotCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCXN0cnVjdCBtdnNfZGV2aWNlICptdmlfZGV2ID0gdGFzay0+ZGV2LT5sbGRkX2RldjsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzID0gbXZpX2Rldi0+bXZpX2luZm8tPnNhczsKLQotCWlmIChzYXMtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtIDwgMikKLQkJcmV0dXJuIG12c190YXNrX2V4ZWModGFzaywgbnVtLCBnZnBfZmxhZ3MsIE5VTEwsIDAsIE5VTEwpOwotCWVsc2UKLQkJcmV0dXJuIG12c19jb2xsZWN0b3JfdGFza19leGVjKHRhc2ssIG51bSwgZ2ZwX2ZsYWdzLCBOVUxMLCAwLCBOVUxMKTsKKwlyZXR1cm4gbXZzX3Rhc2tfZXhlYyh0YXNrLCBnZnBfZmxhZ3MsIE5VTEwsIDAsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBtdnNfc2xvdF9mcmVlKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcnhfZGVzYykKQEAgLTE0MTEsNyArMTMxMCw3IEBACiAJCXRhc2stPnNsb3dfdGFzay0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBNVlNfVEFTS19USU1FT1VUKkhaOwogCQlhZGRfdGltZXIoJnRhc2stPnNsb3dfdGFzay0+dGltZXIpOwogCi0JCXJlcyA9IG12c190YXNrX2V4ZWModGFzaywgMSwgR0ZQX0tFUk5FTCwgTlVMTCwgMSwgdG1mKTsKKwkJcmVzID0gbXZzX3Rhc2tfZXhlYyh0YXNrLCBHRlBfS0VSTkVMLCBOVUxMLCAxLCB0bWYpOwogCiAJCWlmIChyZXMpIHsKIAkJCWRlbF90aW1lcigmdGFzay0+c2xvd190YXNrLT50aW1lcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmgKaW5kZXggZDZiMTlkYy4uZGM0MDljMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuaApAQCAtNjUsNyArNjUsNiBAQAogZXh0ZXJuIHN0cnVjdCBtdnNfaW5mbyAqdGd0X212aTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXZzX2Rpc3BhdGNoIG12c182NHh4X2Rpc3BhdGNoOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdnNfZGlzcGF0Y2ggbXZzXzk0eHhfZGlzcGF0Y2g7Ci1leHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKm12c190YXNrX2xpc3RfY2FjaGU7CiAKICNkZWZpbmUgREVWX0lTX0VYUEFOREVSKHR5cGUpCVwKIAkoKHR5cGUgPT0gU0FTX0VER0VfRVhQQU5ERVJfREVWSUNFKSB8fCAodHlwZSA9PSBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRSkpCkBAIC00NDAsMTIgKzQzOSw2IEBACiAJaW50IG5fZWxlbTsKIH07CiAKLXN0cnVjdCBtdnNfdGFza19saXN0IHsKLQlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotCiAvKioqKioqKioqKioqKioqKioqKiogZnVuY3Rpb24gcHJvdG90eXBlICoqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgbXZzX2dldF9zYXNfYWRkcih2b2lkICpidWYsIHUzMiBidWZsZW4pOwogdm9pZCBtdnNfdGFnX2NsZWFyKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgdGFnKTsKQEAgLTQ2Miw4ICs0NTUsNyBAQAogCQkgICAgICB1MzIgb2ZmX2hpLCB1NjQgc2FzX2FkZHIpOwogdm9pZCBtdnNfc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CiBpbnQgbXZzX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGxvbmcgdGltZSk7Ci1pbnQgbXZzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLAotCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKTsKK2ludCBtdnNfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGdmcF90IGdmcF9mbGFncyk7CiBpbnQgbXZzX2Fib3J0X3Rhc2soc3RydWN0IHNhc190YXNrICp0YXNrKTsKIGludCBtdnNfYWJvcnRfdGFza19zZXQoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiwgdTggKmx1bik7CiBpbnQgbXZzX2NsZWFyX2FjYShzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LCB1OCAqbHVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYyBiL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYwppbmRleCBhNzMwNWZmLi41YjkzZWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKKysrIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jCkBAIC03OTk3LDEwICs3OTk3LDcgQEAKIAlpZiAoZGVwdGhfdG9fdXNlID4gTUFYX1RBR1MpCiAJCWRlcHRoX3RvX3VzZSA9IE1BWF9UQUdTOwogCi0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2aWNlLAotCQkJCShkZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgPwotCQkJCSBNU0dfU0lNUExFX1RBRyA6IDApLAotCQkJCWRlcHRoX3RvX3VzZSk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2aWNlLCBkZXB0aF90b191c2UpOwogCiAJLyoKIAkqKglTaW5jZSB0aGUgcXVldWUgZGVwdGggaXMgbm90IHR1bmFibGUgdW5kZXIgTGludXgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NkL29zZF91bGQuYyBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX3VsZC5jCmluZGV4IDkyY2RkNGIuLjI0M2VhYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX3VsZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX3VsZC5jCkBAIC01NDAsOSArNTQwLDkgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IHNjc2lfZHJpdmVyIG9zZF9kcml2ZXIgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZ2VuZHJ2ID0gewogCQkubmFtZQkJPSBvc2RfbmFtZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucHJvYmUJCT0gb3NkX3Byb2JlLAogCQkucmVtb3ZlCQk9IG9zZF9yZW1vdmUsCiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zc3QuYyBiL2RyaXZlcnMvc2NzaS9vc3N0LmMKaW5kZXggZGZmMzdhMjUuLjUwMzMyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuYwpAQCAtMTcyLDkgKzE3Miw5IEBACiBzdGF0aWMgaW50IG9zc3RfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKik7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kcml2ZXIgb3NzdF90ZW1wbGF0ZSA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5nZW5kcnYgPSB7CiAJCS5uYW1lCQk9ICAib3NzdCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnByb2JlCQk9IG9zc3RfcHJvYmUsCiAJCS5yZW1vdmUJCT0gb3NzdF9yZW1vdmUsCiAJfQpAQCAtMjU5LDkgKzI1OSwxMCBAQAogCQkgICBTUnBudC0+Y21kWzBdLCBTUnBudC0+Y21kWzFdLCBTUnBudC0+Y21kWzJdLAogCQkgICBTUnBudC0+Y21kWzNdLCBTUnBudC0+Y21kWzRdLCBTUnBudC0+Y21kWzVdKTsKIAkJaWYgKHNjb2RlKSBwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBTZW5zZTogJTAyeCwgQVNDOiAlMDJ4LCBBU0NROiAlMDJ4XG4iLAotCQkJICAgICAgIAluYW1lLCBzY29kZSwgc2Vuc2VbMTJdLCBzZW5zZVsxM10pOworCQkJCSAgbmFtZSwgc2NvZGUsIHNlbnNlWzEyXSwgc2Vuc2VbMTNdKTsKIAkJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlKQotCQkJX19zY3NpX3ByaW50X3NlbnNlKCJvc3N0ICIsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCV9fc2NzaV9wcmludF9zZW5zZShTVHAtPmRldmljZSwgbmFtZSwKKwkJCQkJICAgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCX0KIAllbHNlCiAjZW5kaWYKQEAgLTI3NSw3ICsyNzYsOCBAQAogCQkgU1JwbnQtPmNtZFswXSAhPSBURVNUX1VOSVRfUkVBRFkpKSB7IC8qIEFibm9ybWFsIGNvbmRpdGlvbnMgZm9yIHRhcGUgKi8KIAkJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczpXOiBDb21tYW5kIHdpdGggc2Vuc2UgZGF0YTpcbiIsIG5hbWUpOwotCQkJX19zY3NpX3ByaW50X3NlbnNlKCJvc3N0ICIsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCV9fc2NzaV9wcmludF9zZW5zZShTVHAtPmRldmljZSwgbmFtZSwKKwkJCQkJICAgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQl9CiAJCWVsc2UgewogCQkJc3RhdGljCWludAlub3R5ZXRwcmludGVkID0gMTsKQEAgLTMzMjUsMTkgKzMzMjcsMTggQEAKIC8qIExvY2sgb3IgdW5sb2NrIHRoZSBkcml2ZSBkb29yLiBEb24ndCB1c2Ugd2hlbiBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0IGFsbG9jYXRlZC4gKi8KIHN0YXRpYyBpbnQgZG9fZG9vcl9sb2NrKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIGludCBkb19sb2NrKQogewotCWludCByZXR2YWwsIGNtZDsKKwlpbnQgcmV0dmFsOwogCi0JY21kID0gZG9fbG9jayA/IFNDU0lfSU9DVExfRE9PUkxPQ0sgOiBTQ1NJX0lPQ1RMX0RPT1JVTkxPQ0s7CiAjaWYgREVCVUcKIAlwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiAlc29ja2luZyBkcml2ZSBkb29yLlxuIiwgdGFwZV9uYW1lKFNUcCksIGRvX2xvY2sgPyAiTCIgOiAiVW5sIik7CiAjZW5kaWYKLQlyZXR2YWwgPSBzY3NpX2lvY3RsKFNUcC0+ZGV2aWNlLCBjbWQsIE5VTEwpOwotCWlmICghcmV0dmFsKSB7CisKKwlyZXR2YWwgPSBzY3NpX3NldF9tZWRpdW1fcmVtb3ZhbChTVHAtPmRldmljZSwKKwkJCWRvX2xvY2sgPyBTQ1NJX1JFTU9WQUxfUFJFVkVOVCA6IFNDU0lfUkVNT1ZBTF9BTExPVyk7CisJaWYgKCFyZXR2YWwpCiAJCVNUcC0+ZG9vcl9sb2NrZWQgPSBkb19sb2NrID8gU1RfTE9DS0VEX0VYUExJQ0lUIDogU1RfVU5MT0NLRUQ7Ci0JfQotCWVsc2UgeworCWVsc2UKIAkJU1RwLT5kb29yX2xvY2tlZCA9IFNUX0xPQ0tfRkFJTFM7Ci0JfQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQ5NjcsMTAgKzQ5NjgsMTAgQEAKIAkgKiBtYXkgdHJ5IGFuZCB0YWtlIHRoZSBkZXZpY2Ugb2ZmbGluZSwgaW4gd2hpY2ggY2FzZSBhbGwgZnVydGhlcgogCSAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHByb2hpYml0ZWQuCiAJICovCi0JaWYoICFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoU1RwLT5kZXZpY2UpICkgewotCQlyZXR2YWwgPSAoLUVOWElPKTsKKwlyZXR2YWwgPSBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoU1RwLT5kZXZpY2UsIGNtZF9pbiwKKwkJCWZpbGUtPmZfZmxhZ3MgJiBPX05ERUxBWSk7CisJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7Ci0JfQogCiAJY21kX3R5cGUgPSBfSU9DX1RZUEUoY21kX2luKTsKIAljbWRfbnIgICA9IF9JT0NfTlIoY21kX2luKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wYXMxNi5jIGIvZHJpdmVycy9zY3NpL3BhczE2LmMKaW5kZXggODBiYWNiNS4uZTgxZWFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BhczE2LmMKKysrIGIvZHJpdmVycy9zY3NpL3BhczE2LmMKQEAgLTEsNiArMSw0IEBACi0jZGVmaW5lIEFVVE9TRU5TRQogI2RlZmluZSBQU0VVRE9fRE1BCi0jZGVmaW5lIEZPTwogI2RlZmluZSBVTlNBRkUgIC8qIE5vdCB1bnNhZmUgZm9yIFBBUzE2IC0tIHVzZSBpdCAqLwogI2RlZmluZSBQREVCVUcgMAogCkBAIC0yNCw0NyArMjIsOSBAQAogICogTWVkaWEgVmlzaW9uCiAgKiAoNTEwKSA3NzAtODYwMAogICogKDgwMCkgMzQ4LTcxMTYKLSAqIAotICogYW5kIAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAogICovCiAKIC8qCi0gKiBPcHRpb25zIDogCi0gKiBBVVRPU0VOU0UgLSBpZiBkZWZpbmVkLCBSRVFVRVNUIFNFTlNFIHdpbGwgYmUgcGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkKLSAqICAgICAgZm9yIGNvbW1hbmRzIHRoYXQgcmV0dXJuIHdpdGggYSBDSEVDSyBDT05ESVRJT04gc3RhdHVzLiAKLSAqCi0gKiBMSU1JVF9UUkFOU0ZFUlNJWkUgLSBpZiBkZWZpbmVkLCBsaW1pdCB0aGUgcHNldWRvLWRtYSB0cmFuc2ZlcnMgdG8gNTEyCi0gKiAgICAgIGJ5dGVzIGF0IGEgdGltZS4gIFNpbmNlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgZHVyaW5nCi0gKiAgICAgIHRoZXNlIHRyYW5zZmVycywgd2UgbWlnaHQgbmVlZCB0aGlzIHRvIGdpdmUgcmVhc29uYWJsZSBpbnRlcnJ1cHQKLSAqICAgICAgc2VydmljZSB0aW1lIGlmIHRoZSB0cmFuc2ZlciBzaXplIGdldHMgdG9vIGxhcmdlLgotICoKLSAqIFBTRVVET19ETUEgLSBlbmFibGVzIFBTRVVETy1ETUEgaGFyZHdhcmUsIHNob3VsZCBnaXZlIGEgMy00WCBwZXJmb3JtYW5jZQotICogaW5jcmVhc2UgY29tcGFyZWQgdG8gcG9sbGVkIEkvTy4KLSAqCi0gKiBQQVJJVFkgLSBlbmFibGUgcGFyaXR5IGNoZWNraW5nLiAgTm90IHN1cHBvcnRlZC4KLSAqIAotICogU0NTSTIgLSBlbmFibGUgc3VwcG9ydCBmb3IgU0NTSS1JSSB0YWdnZWQgcXVldWVpbmcuICBVbnRlc3RlZC4KLSAqCi0gKiBVTlNBRkUgLSBsZWF2ZSBpbnRlcnJ1cHRzIGVuYWJsZWQgZHVyaW5nIHBzZXVkby1ETUEgdHJhbnNmZXJzLiAgVGhpcwotICoJICAgIHBhcmFtZXRlciBjb21lcyBmcm9tIHRoZSBOQ1I1MzgwIGNvZGUuICBJdCBpcyBOT1QgdW5zYWZlIHdpdGgKLSAqCSAgICB0aGUgUEFTMTYgYW5kIHlvdSBzaG91bGQgdXNlIGl0LiAgSWYgeW91IGRvbid0IHlvdSB3aWxsIGhhdmUKLSAqCSAgICBhIHByb2JsZW0gd2l0aCBkcm9wcGVkIGNoYXJhY3RlcnMgZHVyaW5nIGhpZ2ggc3BlZWQKLSAqCSAgICBjb21tdW5pY2F0aW9ucyBkdXJpbmcgU0NTSSB0cmFuc2ZlcnMuICBJZiB5b3UgcmVhbGx5IGRvbid0Ci0gKgkgICAgd2FudCB0byB1c2UgVU5TQUZFIHlvdSBjYW4gdHJ5IGRlZmluaW5nIExJTUlUX1RSQU5TRkVSU0laRSBvcgotICoJICAgIHR3aWRkbGUgd2l0aCB0aGUgdHJhbnNmZXIgc2l6ZSBpbiB0aGUgaGlnaCBsZXZlbCBjb2RlLgotICoKLSAqIFVTTEVFUCAtIGVuYWJsZSBzdXBwb3J0IGZvciBkZXZpY2VzIHRoYXQgZG9uJ3QgZGlzY29ubmVjdC4gIFVudGVzdGVkLgotICoKICAqIFRoZSBjYXJkIGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCBpbiBvbmUgb2Ygc2V2ZXJhbCB3YXlzIDogCiAgKiAxLiAgQXV0b3Byb2JlIChkZWZhdWx0KSAtIFRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBtb2RlbHMgb2YKICAqICAgICB0aGUgUHJvIEF1ZGlvIFNwZWN0cnVtL1N0dWRpbyAxNiwgYW5kIEkgb25seSBoYXZlIG9uZSBvZgpAQCAtMTAyLDEzICs2MiwxMSBAQAogICogICBJZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIHlvdXIgY2FyZCBub3QgYmVpbmcgcmVjb2duaXplZCwgdXNlCiAgKiAgIHRoZSBMSUxPIGNvbW1hbmQgbGluZSBvdmVycmlkZS4gIFRyeSB0byBnZXQgaXQgcmVjb2duaXplZCB3aXRob3V0CiAgKiAgIGludGVycnVwdHMuICBJZSwgZm9yIGEgYm9hcmQgYXQgdGhlIGRlZmF1bHQgMHgzODggYmFzZSBwb3J0LAotICogICBib290OiBsaW51eCBwYXMxNj0weDM4OCwyNTUKKyAqICAgYm9vdDogbGludXggcGFzMTY9MHgzODgsMAogICoKLSAqICAgU0NTSV9JUlFfTk9ORSAoMjU1KSBzaG91bGQgYmUgc3BlY2lmaWVkIGZvciBubyBpbnRlcnJ1cHQsCisgKiAgIE5PX0lSUSAoMCkgc2hvdWxkIGJlIHNwZWNpZmllZCBmb3Igbm8gaW50ZXJydXB0LAogICogICBJUlFfQVVUTyAoMjU0KSB0byBhdXRvcHJvYmUgZm9yIGFuIElSUSBsaW5lIGlmIG92ZXJyaWRkZW4KICAqICAgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAqCi0gKiAgIChJUlFfQVVUTyA9PSAyNTQsIFNDU0lfSVJRX05PTkUgPT0gMjU1IGluIE5DUjUzODAuaCkKICAqLwogIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTIzLDE1ICs4MSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlICJwYXMxNi5oIgogI2RlZmluZSBBVVRPUFJPQkVfSVJRCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogCiAKLXN0YXRpYyBpbnQgcGFzX21heGkgPSAwOwotc3RhdGljIGludCBwYXNfd21heGkgPSAwOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHBhczE2X2FkZHIgPSAwOwogc3RhdGljIGludCBwYXMxNl9pcnEgPSAwOwogIApAQCAtMzM3LDYgKzI5Miw3IEBACiB9CiAKIAorI2lmbmRlZiBNT0RVTEUKIC8qCiAgKiBGdW5jdGlvbiA6IHBhczE2X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQogICoKQEAgLTM0NywxMCArMzAzLDEzIEBACiAgKgogICovCiAKLXZvaWQgX19pbml0IHBhczE2X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQorc3RhdGljIGludCBfX2luaXQgcGFzMTZfc2V0dXAoY2hhciAqc3RyKQogewogICAgIHN0YXRpYyBpbnQgY29tbWFuZGxpbmVfY3VycmVudCA9IDA7CiAgICAgaW50IGk7CisgICAgaW50IGludHNbMTBdOworCisgICAgZ2V0X29wdGlvbnMoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKICAgICBpZiAoaW50c1swXSAhPSAyKSAKIAlwcmludGsoInBhczE2X3NldHVwIDogdXNhZ2UgcGFzMTY9aW9fcG9ydCxpcnFcbiIpOwogICAgIGVsc2UgCkBAIC0zNjQsOCArMzIzLDEyIEBACiAJCX0KIAkgICAgKytjb21tYW5kbGluZV9jdXJyZW50OwogCX0KKyAgICByZXR1cm4gMTsKIH0KIAorX19zZXR1cCgicGFzMTY9IiwgcGFzMTZfc2V0dXApOworI2VuZGlmCisKIC8qIAogICogRnVuY3Rpb24gOiBpbnQgcGFzMTZfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogICoKQEAgLTM3OSw3ICszNDIsNyBAQAogICoKICAqLwogCi1pbnQgX19pbml0IHBhczE2X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKK3N0YXRpYyBpbnQgX19pbml0IHBhczE2X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQogewogICAgIHN0YXRpYyBpbnQgY3VycmVudF9vdmVycmlkZSA9IDA7CiAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGN1cnJlbnRfYmFzZSA9IDA7CkBAIC0zODcsMTAgKzM1MCw2IEBACiAgICAgdW5zaWduZWQgc2hvcnQgaW9fcG9ydDsKICAgICBpbnQgIGNvdW50OwogCi0gICAgdHBudC0+cHJvY19uYW1lID0gInBhczE2IjsKLSAgICB0cG50LT5zaG93X2luZm8gPSBwYXMxNl9zaG93X2luZm87Ci0gICAgdHBudC0+d3JpdGVfaW5mbyA9IHBhczE2X3dyaXRlX2luZm87Ci0KICAgICBpZiAocGFzMTZfYWRkciAhPSAwKSB7CiAJb3ZlcnJpZGVzWzBdLmlvX3BvcnQgPSBwYXMxNl9hZGRyOwogCS8qCkBAIC00NTIsMTUgKzQxMSwxOSBAQAogCWVsc2UgCiAJICAgIGluc3RhbmNlLT5pcnEgPSBOQ1I1MzgwX3Byb2JlX2lycShpbnN0YW5jZSwgUEFTMTZfSVJRUyk7CiAKLQlpZiAoaW5zdGFuY2UtPmlycSAhPSBTQ1NJX0lSUV9OT05FKSAKKwkvKiBDb21wYXRpYmlsaXR5IHdpdGggZG9jdW1lbnRlZCBOQ1I1MzgwIGtlcm5lbCBwYXJhbWV0ZXJzICovCisJaWYgKGluc3RhbmNlLT5pcnEgPT0gMjU1KQorCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROworCisJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCSAgICBpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgcGFzMTZfaW50ciwgMCwKIAkJCSAgICAicGFzMTYiLCBpbnN0YW5jZSkpIHsKIAkJcHJpbnRrKCJzY3NpJWQgOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwgCiAJCSAgICBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7Ci0JCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOworCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROwogCSAgICB9IAogCi0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkgeworCWlmIChpbnN0YW5jZS0+aXJxID09IE5PX0lSUSkgewogCSAgICBwcmludGsoInNjc2klZCA6IGludGVycnVwdHMgbm90IGVuYWJsZWQuIGZvciBiZXR0ZXIgaW50ZXJhY3RpdmUgcGVyZm9ybWFuY2UsXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJICAgIHByaW50aygic2NzaSVkIDogcGxlYXNlIGp1bXBlciB0aGUgYm9hcmQgZm9yIGEgZnJlZSBJUlEuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJICAgIC8qIERpc2FibGUgNTM4MCBpbnRlcnJ1cHRzLCBsZWF2ZSBkcml2ZSBwYXJhbXMgdGhlIHNhbWUgKi8KQEAgLTQ3MiwxNyArNDM1LDYgQEAKIAlwcmludGsoInNjc2klZCA6IGlycSA9ICVkXG4iLCBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7CiAjZW5kaWYKIAotCXByaW50aygic2NzaSVkIDogYXQgMHglMDR4IiwgaW5zdGFuY2UtPmhvc3Rfbm8sIChpbnQpIAotCSAgICBpbnN0YW5jZS0+aW9fcG9ydCk7Ci0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkKLQkgICAgcHJpbnRrICgiIGludGVycnVwdHMgZGlzYWJsZWQiKTsKLQllbHNlIAotCSAgICBwcmludGsgKCIgaXJxICVkIiwgaW5zdGFuY2UtPmlycSk7Ci0JcHJpbnRrKCIgb3B0aW9ucyBDQU5fUVVFVUU9JWQgIENNRF9QRVJfTFVOPSVkIHJlbGVhc2U9JWQiLAotCSAgICBDQU5fUVVFVUUsIENNRF9QRVJfTFVOLCBQQVMxNl9QVUJMSUNfUkVMRUFTRSk7Ci0JTkNSNTM4MF9wcmludF9vcHRpb25zKGluc3RhbmNlKTsKLQlwcmludGsoIlxuIik7Ci0KIAkrK2N1cnJlbnRfb3ZlcnJpZGU7CiAJKytjb3VudDsKICAgICB9CkBAIC01MDksOCArNDYxLDggQEAKICAqIGFuZCBtYXRjaGluZyB0aGUgSF9DX1MgY29vcmRpbmF0ZXMgdG8gd2hhdCBET1MgdXNlcy4KICAqLwogCi1pbnQgcGFzMTZfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqZGV2LAotCQlzZWN0b3JfdCBjYXBhY2l0eSwgaW50ICogaXApCitzdGF0aWMgaW50IHBhczE2X2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgKmlwKQogewogICBpbnQgc2l6ZSA9IGNhcGFjaXR5OwogICBpcFswXSA9IDY0OwpAQCAtNTQ3LDYgKzQ5OSw3IEBACiAJUF9EQVRBX1JFR19PRkZTRVQpOwogICAgIHJlZ2lzdGVyIGludCBpID0gbGVuOwogICAgIGludCBpaSA9IDA7CisgICAgc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CiAKICAgICB3aGlsZSAoICEoaW5iKGluc3RhbmNlLT5pb19wb3J0ICsgUF9TVEFUVVNfUkVHX09GRlNFVCkgJiBQX1NUX1JEWSkgKQogCSArK2lpOwpAQCAtNTU5LDggKzUxMiw4IEBACiAJICAgIGluc3RhbmNlLT5ob3N0X25vKTsKIAlyZXR1cm4gLTE7CiAgICAgfQotICAgaWYgKGlpID4gcGFzX21heGkpCi0gICAgICBwYXNfbWF4aSA9IGlpOworICAgIGlmIChpaSA+IGhvc3RkYXRhLT5zcGluX21heF9yKQorICAgICAgICBob3N0ZGF0YS0+c3Bpbl9tYXhfciA9IGlpOwogICAgIHJldHVybiAwOwogfQogCkBAIC01ODMsNiArNTM2LDcgQEAKICAgICByZWdpc3RlciB1bnNpZ25lZCBzaG9ydCByZWcgPSAoaW5zdGFuY2UtPmlvX3BvcnQgKyBQX0RBVEFfUkVHX09GRlNFVCk7CiAgICAgcmVnaXN0ZXIgaW50IGkgPSBsZW47CiAgICAgaW50IGlpID0gMDsKKyAgICBzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKIAogICAgIHdoaWxlICggISgoaW5iKGluc3RhbmNlLT5pb19wb3J0ICsgUF9TVEFUVVNfUkVHX09GRlNFVCkpICYgUF9TVF9SRFkpICkKIAkgKytpaTsKQEAgLTU5NSw4ICs1NDksOCBAQAogCSAgICBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoaWkgPiBwYXNfbWF4aSkKLQkgcGFzX3dtYXhpID0gaWk7CisgICAgaWYgKGlpID4gaG9zdGRhdGEtPnNwaW5fbWF4X3cpCisgICAgICAgIGhvc3RkYXRhLT5zcGluX21heF93ID0gaWk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTYwNCw3ICs1NTgsNyBAQAogCiBzdGF0aWMgaW50IHBhczE2X3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7Ci0JaWYgKHNob3N0LT5pcnEpCisJaWYgKHNob3N0LT5pcnEgIT0gTk9fSVJRKQogCQlmcmVlX2lycShzaG9zdC0+aXJxLCBzaG9zdCk7CiAJTkNSNTM4MF9leGl0KHNob3N0KTsKIAlpZiAoc2hvc3QtPmlvX3BvcnQgJiYgc2hvc3QtPm5faW9fcG9ydCkKQEAgLTYxNyw2ICs1NzEsMTAgQEAKIAkubmFtZSAgICAgICAgICAgPSAiUHJvIEF1ZGlvIFNwZWN0cnVtLTE2IFNDU0kiLAogCS5kZXRlY3QgICAgICAgICA9IHBhczE2X2RldGVjdCwKIAkucmVsZWFzZSAgICAgICAgPSBwYXMxNl9yZWxlYXNlLAorCS5wcm9jX25hbWUgICAgICA9ICJwYXMxNiIsCisJLnNob3dfaW5mbyAgICAgID0gcGFzMTZfc2hvd19pbmZvLAorCS53cml0ZV9pbmZvICAgICA9IHBhczE2X3dyaXRlX2luZm8sCisJLmluZm8gICAgICAgICAgID0gcGFzMTZfaW5mbywKIAkucXVldWVjb21tYW5kICAgPSBwYXMxNl9xdWV1ZV9jb21tYW5kLAogCS5laF9hYm9ydF9oYW5kbGVyID0gcGFzMTZfYWJvcnQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyID0gcGFzMTZfYnVzX3Jlc2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BhczE2LmggYi9kcml2ZXJzL3Njc2kvcGFzMTYuaAppbmRleCBhYTUyOGY1Li5jNjEwOWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGFzMTYuaAorKysgYi9kcml2ZXJzL3Njc2kvcGFzMTYuaApAQCAtMTgsMjYgKzE4LDEyIEBACiAgKiBNZWRpYSBWaXNpb24KICAqICg1MTApIDc3MC04NjAwCiAgKiAoODAwKSAzNDgtNzExNgotICogCi0gKiBhbmQgCi0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0CiAgKi8KIAogCiAjaWZuZGVmIFBBUzE2X0gKICNkZWZpbmUgUEFTMTZfSAogCi0jZGVmaW5lIFBBUzE2X1BVQkxJQ19SRUxFQVNFIDMKLQogI2RlZmluZSBQREVCVUdfSU5JVAkweDEKICNkZWZpbmUgUERFQlVHX1RSQU5TRkVSIDB4MgogCkBAIC0xMTQsMTIgKzEwMCw2IEBACiAKIAogI2lmbmRlZiBBU00KLXN0YXRpYyBpbnQgcGFzMTZfYWJvcnQoU2NzaV9DbW5kICopOwotc3RhdGljIGludCBwYXMxNl9iaW9zcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKLQkJCSAgIHNlY3Rvcl90LCBpbnQqKTsKLXN0YXRpYyBpbnQgcGFzMTZfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7Ci1zdGF0aWMgaW50IHBhczE2X3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCBwYXMxNl9idXNfcmVzZXQoU2NzaV9DbW5kICopOwogCiAjaWZuZGVmIENNRF9QRVJfTFVOCiAjZGVmaW5lIENNRF9QRVJfTFVOIDIKQEAgLTE2MSw2ICsxNDEsNyBAQAogI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgcGFzMTZfcXVldWVfY29tbWFuZAogI2RlZmluZSBOQ1I1MzgwX2Fib3J0IHBhczE2X2Fib3J0CiAjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0IHBhczE2X2J1c19yZXNldAorI2RlZmluZSBOQ1I1MzgwX2luZm8gcGFzMTZfaW5mbwogI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyBwYXMxNl9zaG93X2luZm8KICNkZWZpbmUgTkNSNTM4MF93cml0ZV9pbmZvIHBhczE2X3dyaXRlX2luZm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCmluZGV4IDY2NmJmNWEuLjMyOWFiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKQEAgLTg5LDYgKzg5LDggQEAKIAkudGFyZ2V0X2Rlc3Ryb3kJCT0gc2FzX3RhcmdldF9kZXN0cm95LAogCS5pb2N0bAkJCT0gc2FzX2lvY3RsLAogCS5zaG9zdF9hdHRycwkJPSBwbTgwMDFfaG9zdF9hdHRycywKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIC8qKgpAQCAtNTk5LDggKzYwMSw2IEBACiAJc2hhLT5sbGRkX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCXNoYS0+c2FzX2FkZHIgPSAmcG04MDAxX2hhLT5zYXNfYWRkclswXTsKIAlzaGEtPm51bV9waHlzID0gY2hpcF9pbmZvLT5uX3BoeTsKLQlzaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gMTsKLQlzaGEtPmxsZGRfcXVldWVfc2l6ZSA9IFBNODAwMV9DQU5fUVVFVUU7CiAJc2hhLT5jb3JlLnNob3N0ID0gc2hvc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKaW5kZXggNzY1NzBlNi4uYjkzZjI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogICAqLwogI2RlZmluZSBERVZfSVNfR09ORShwbTgwMDFfZGV2KQlcCiAJKCghcG04MDAxX2RldiB8fCAocG04MDAxX2Rldi0+ZGV2X3R5cGUgPT0gU0FTX1BIWV9VTlVTRUQpKSkKLXN0YXRpYyBpbnQgcG04MDAxX3Rhc2tfZXhlYyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sCitzdGF0aWMgaW50IHBtODAwMV90YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLAogCWdmcF90IGdmcF9mbGFncywgaW50IGlzX3RtZiwgc3RydWN0IHBtODAwMV90bWZfdGFzayAqdG1mKQogewogCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSB0YXNrLT5kZXY7CkBAIC0zNjAsNyArMzYwLDYgQEAKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnQgPSB0YXNrOwogCXN0cnVjdCBwbTgwMDFfY2NiX2luZm8gKmNjYjsKIAl1MzIgdGFnID0gMHhkZWFkYmVlZiwgcmMsIG5fZWxlbSA9IDA7Ci0JdTMyIG4gPSBudW07CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKIAlpZiAoIWRldi0+cG9ydCkgewpAQCAtMzg3LDE4ICszODYsMTIgQEAKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJCQl0LT50YXNrX2RvbmUodCk7CiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwotCQkJCWlmIChuID4gMSkKLQkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAotCQkJCQkJCXN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgewogCQkJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzID0gJnQtPnRhc2tfc3RhdHVzOwogCQkJCXRzLT5yZXNwID0gU0FTX1RBU0tfVU5ERUxJVkVSRUQ7CiAJCQkJdHMtPnN0YXQgPSBTQVNfUEhZX0RPV047CiAJCQkJdC0+dGFza19kb25lKHQpOwotCQkJCWlmIChuID4gMSkKLQkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAotCQkJCQkJCXN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KQEAgLTQ2MCw5ICs0NTMsNyBAQAogCQl0LT50YXNrX3N0YXRlX2ZsYWdzIHw9IFNBU19UQVNLX0FUX0lOSVRJQVRPUjsKIAkJc3Bpbl91bmxvY2soJnQtPnRhc2tfc3RhdGVfbG9jayk7CiAJCXBtODAwMV9kZXYtPnJ1bm5pbmdfcmVxKys7Ci0JCWlmIChuID4gMSkKLQkJCXQgPSBsaXN0X2VudHJ5KHQtPmxpc3QubmV4dCwgc3RydWN0IHNhc190YXNrLCBsaXN0KTsKLQl9IHdoaWxlICgtLW4pOworCX0gd2hpbGUgKDApOwogCXJjID0gMDsKIAlnb3RvIG91dF9kb25lOwogCkBAIC00ODMsMTQgKzQ3NCwxMSBAQAogICAqIHBtODAwMV9xdWV1ZV9jb21tYW5kIC0gcmVnaXN0ZXIgZm9yIHVwcGVyIGxheWVyIHVzZWQsIGFsbCBJTyBjb21tYW5kcyBzZW50CiAgICogdG8gSEJBIGFyZSBmcm9tIHRoaXMgaW50ZXJmYWNlLgogICAqIEB0YXNrOiB0aGUgdGFzayB0byBiZSBleGVjdXRlLgotICAqIEBudW06IGlmIGNhbl9xdWV1ZSBncmVhdCB0aGFuIDEsIHRoZSB0YXNrIGNhbiBiZSBxdWV1ZWQgdXAuIGZvciBTTVAgdGFzaywKLSAgKiB3ZSBhbHdheXMgZXhlY3V0ZSBvbmUgb25lIHRpbWUKICAgKiBAZ2ZwX2ZsYWdzOiBnZnBfZmxhZ3MKICAgKi8KLWludCBwbTgwMDFfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sCi0JCWdmcF90IGdmcF9mbGFncykKK2ludCBwbTgwMDFfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGdmcF90IGdmcF9mbGFncykKIHsKLQlyZXR1cm4gcG04MDAxX3Rhc2tfZXhlYyh0YXNrLCBudW0sIGdmcF9mbGFncywgMCwgTlVMTCk7CisJcmV0dXJuIHBtODAwMV90YXNrX2V4ZWModGFzaywgZ2ZwX2ZsYWdzLCAwLCBOVUxMKTsKIH0KIAogLyoqCkBAIC03MDgsNyArNjk2LDcgQEAKIAkJdGFzay0+c2xvd190YXNrLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIFBNODAwMV9UQVNLX1RJTUVPVVQqSFo7CiAJCWFkZF90aW1lcigmdGFzay0+c2xvd190YXNrLT50aW1lcik7CiAKLQkJcmVzID0gcG04MDAxX3Rhc2tfZXhlYyh0YXNrLCAxLCBHRlBfS0VSTkVMLCAxLCB0bWYpOworCQlyZXMgPSBwbTgwMDFfdGFza19leGVjKHRhc2ssIEdGUF9LRVJORUwsIDEsIHRtZik7CiAKIAkJaWYgKHJlcykgewogCQkJZGVsX3RpbWVyKCZ0YXNrLT5zbG93X3Rhc2stPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5oIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKaW5kZXggZjZiMmFjNS4uOGRkOGI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKQEAgLTYyMyw4ICs2MjMsNyBAQAogCXZvaWQgKmZ1bmNkYXRhKTsKIHZvaWQgcG04MDAxX3NjYW5fc3RhcnQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwogaW50IHBtODAwMV9zY2FuX2ZpbmlzaGVkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1bnNpZ25lZCBsb25nIHRpbWUpOwotaW50IHBtODAwMV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgY29uc3QgaW50IG51bSwKLQlnZnBfdCBnZnBfZmxhZ3MpOworaW50IHBtODAwMV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIGludCBwbTgwMDFfYWJvcnRfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spOwogaW50IHBtODAwMV9hYm9ydF90YXNrX3NldChzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LCB1OCAqbHVuKTsKIGludCBwbTgwMDFfY2xlYXJfYWNhKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYsIHU4ICpsdW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggYmNiNjRlYi4uYjFiMWY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC0yNDksMTUgKzI0OSwxMSBAQAogCQkJCSAgICAgIFBNQ1JBSURfVlNFVF9NQVhfU0VDVE9SUyk7CiAJfQogCi0JaWYgKHNjc2lfZGV2LT50YWdnZWRfc3VwcG9ydGVkICYmCi0JICAgIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpIHx8IFJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSkpIHsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2NzaV9kZXYsIHNjc2lfZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBNU0dfU0lNUExFX1RBRywKLQkJCQkJc2NzaV9kZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKLQl9IGVsc2UgewotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzY3NpX2RldiwgMCwKLQkJCQkJc2NzaV9kZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKLQl9CisJLyoKKwkgKiBXZSBuZXZlciB3YW50IHRvIHJlcG9ydCBUQ1Egc3VwcG9ydCBmb3IgdGhlc2UgdHlwZXMgb2YgZGV2aWNlcy4KKwkgKi8KKwlpZiAoIVJFU19JU19HU0NTSShyZXMtPmNmZ19lbnRyeSkgJiYgIVJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSkKKwkJc2NzaV9kZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODksNTUgKzI4NSwxOCBAQAogICogcG1jcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGggLSBDaGFuZ2UgdGhlIGRldmljZSdzIHF1ZXVlIGRlcHRoCiAgKiBAc2NzaV9kZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICogQGRlcHRoOiBkZXB0aCB0byBzZXQKLSAqIEByZWFzb246IGNhbGxpbmcgY29udGV4dAogICoKICAqIFJldHVybiB2YWx1ZQogICoJYWN0dWFsIGRlcHRoIHNldAogICovCi1zdGF0aWMgaW50IHBtY3JhaWRfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCBkZXB0aCwKLQkJCQkgICAgICBpbnQgcmVhc29uKQorc3RhdGljIGludCBwbWNyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2LCBpbnQgZGVwdGgpCiB7Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAoZGVwdGggPiBQTUNSQUlEX01BWF9DTURfUEVSX0xVTikKIAkJZGVwdGggPSBQTUNSQUlEX01BWF9DTURfUEVSX0xVTjsKLQotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBzY3NpX2dldF90YWdfdHlwZShzY3NpX2RldiksIGRlcHRoKTsKLQotCXJldHVybiBzY3NpX2Rldi0+cXVldWVfZGVwdGg7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBkZXB0aCk7CiB9CiAKIC8qKgotICogcG1jcmFpZF9jaGFuZ2VfcXVldWVfdHlwZSAtIENoYW5nZSB0aGUgZGV2aWNlJ3MgcXVldWUgdHlwZQotICogQHNjc2lfZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKLSAqIEB0YWc6IHR5cGUgb2YgdGFncyB0byB1c2UKLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKglhY3R1YWwgcXVldWUgdHlwZSBzZXQKLSAqLwotc3RhdGljIGludCBwbWNyYWlkX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCB0YWcpCi17Ci0Jc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKLQotCXJlcyA9IChzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqKXNjc2lfZGV2LT5ob3N0ZGF0YTsKLQotCWlmICgocmVzKSAmJiBzY3NpX2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCAmJgotCSAgICAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSB8fCBSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkpKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNjc2lfZGV2LCB0YWcpOwotCi0JCWlmICh0YWcpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzY3NpX2Rldiwgc2NzaV9kZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzY3NpX2Rldiwgc2NzaV9kZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnID0gMDsKLQotCXJldHVybiB0YWc7Ci19Ci0KLQotLyoqCiAgKiBwbWNyYWlkX2luaXRfY21kYmxrIC0gaW5pdGlhbGl6ZXMgYSBjb21tYW5kIGJsb2NrCiAgKgogICogQGNtZDogcG9pbnRlciB0byBzdHJ1Y3QgcG1jcmFpZF9jbWQgdG8gYmUgaW5pdGlhbGl6ZWQKQEAgLTMxNzUsMzYgKzMxMzQsNiBAQAogfQogCiAvKioKLSAqIHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzIC0gVHJhbnNsYXRlIFNQSSBRLVRhZ3MgdG8gdGFzayBhdHRyaWJ1dGVzCi0gKiBAc2NzaV9jbWQ6ICAgc2NzaSBjb21tYW5kIHN0cnVjdAotICoKLSAqIFJldHVybiB2YWx1ZQotICoJICBudW1iZXIgb2YgdGFncyBvciAwIGlmIHRoZSB0YXNrIGlzIG5vdCB0YWdnZWQKLSAqLwotc3RhdGljIHU4IHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kKQotewotCWNoYXIgdGFnWzJdOwotCXU4IHJjID0gMDsKLQotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coc2NzaV9jbWQsIHRhZykpIHsKLQkJc3dpdGNoICh0YWdbMF0pIHsKLQkJY2FzZSBNU0dfU0lNUExFX1RBRzoKLQkJCXJjID0gVEFTS19UQUdfU0lNUExFOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX0hFQURfVEFHOgotCQkJcmMgPSBUQVNLX1RBR19RVUVVRV9IRUFEOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX09SREVSRURfVEFHOgotCQkJcmMgPSBUQVNLX1RBR19PUkRFUkVEOwotCQkJYnJlYWs7Ci0JCX07Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0KLS8qKgogICogcG1jcmFpZF9pbml0X2lvYWRscyAtIGluaXRpYWxpemVzIElPQURMIHJlbGF0ZWQgZmllbGRzIGluIElPQVJDQgogICogQGNtZDogcG1jcmFpZCBjb21tYW5kIHN0cnVjdAogICogQHNnY291bnQ6IGNvdW50IG9mIHNjYXR0ZXItZ2F0aGVyIGVsZW1lbnRzCkBAIC0zNTU5LDcgKzM0ODgsOSBAQAogCQl9CiAKIAkJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCB8PSBOT19MSU5LX0RFU0NTOwotCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MxIHw9IHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzKHNjc2lfY21kKTsKKworCQlpZiAoc2NzaV9jbWQtPmZsYWdzICYgU0NNRF9UQUdHRUQpCisJCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MxIHw9IFRBU0tfVEFHX1NJTVBMRTsKIAogCQlpZiAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSkKIAkJCWlvYXJjYi0+cmVxdWVzdF9mbGFnczEgfD0gREVMQVlfQUZURVJfUkVTRVQ7CkBAIC00MzIwLDcgKzQyNTEsNyBAQAogCS5zbGF2ZV9jb25maWd1cmUgPSBwbWNyYWlkX3NsYXZlX2NvbmZpZ3VyZSwKIAkuc2xhdmVfZGVzdHJveSA9IHBtY3JhaWRfc2xhdmVfZGVzdHJveSwKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gcG1jcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlICA9IHBtY3JhaWRfY2hhbmdlX3F1ZXVlX3R5cGUsCisJLmNoYW5nZV9xdWV1ZV90eXBlICA9IHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUsCiAJLmNhbl9xdWV1ZSA9IFBNQ1JBSURfTUFYX0lPX0NNRCwKIAkudGhpc19pZCA9IC0xLAogCS5zZ190YWJsZXNpemUgPSBQTUNSQUlEX01BWF9JT0FETFMsCkBAIC00MzI5LDcgKzQyNjAsOCBAQAogCS5jbWRfcGVyX2x1biA9IFBNQ1JBSURfTUFYX0NNRF9QRVJfTFVOLAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zaG9zdF9hdHRycyA9IHBtY3JhaWRfaG9zdF9hdHRycywKLQkucHJvY19uYW1lID0gUE1DUkFJRF9EUklWRVJfTkFNRQorCS5wcm9jX25hbWUgPSBQTUNSQUlEX0RSSVZFUl9OQU1FLAorCS51c2VfYmxrX3RhZ3MgPSAxLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wczNyb20uYyBiL2RyaXZlcnMvc2NzaS9wczNyb20uYwppbmRleCBlZjIzZmFiLi5iM2I0OGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcHMzcm9tLmMKKysrIGIvZHJpdmVycy9zY3NpL3BzM3JvbS5jCkBAIC0yMjAsMTAgKzIyMCw2IEBACiAJdW5zaWduZWQgY2hhciBvcGNvZGU7CiAJaW50IHJlczsKIAotI2lmZGVmIERFQlVHCi0Jc2NzaV9wcmludF9jb21tYW5kKGNtZCk7Ci0jZW5kaWYKLQogCXByaXYtPmN1cnJfY21kID0gY21kOwogCWNtZC0+c2NzaV9kb25lID0gZG9uZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggMTU4MDIwNS4uYzY4YTY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC0xMjI0LDEwICsxMjI0LDkgQEAKIAogCWlmIChkZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgJiYKIAkgICAgKGhhLT5idXNfc2V0dGluZ3NbYnVzXS5xdGFnX2VuYWJsZXMgJiAoQklUXzAgPDwgdGFyZ2V0KSkpIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2aWNlLCBNU0dfT1JERVJFRF9UQUcsCi0JCQkJCWhhLT5idXNfc2V0dGluZ3NbYnVzXS5oaXdhdCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldmljZSwgaGEtPmJ1c19zZXR0aW5nc1tidXNdLmhpd2F0KTsKIAl9IGVsc2UgewotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXZpY2UsIDAsIGRlZmF1bHRfZGVwdGgpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXZpY2UsIGRlZmF1bHRfZGVwdGgpOwogCX0KIAogCW52LT5idXNbYnVzXS50YXJnZXRbdGFyZ2V0XS5wYXJhbWV0ZXIuZW5hYmxlX3N5bmMgPSBkZXZpY2UtPnNkdHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKaW5kZXggYjE4NjVhNy4uNzY4NmJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaApAQCAtNzUyLDggKzc1Miw2IEBACiBleHRlcm4gaW50IHFsYTgwNDRfcmRfZGlyZWN0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIGNvbnN0IHVpbnQzMl90IGNyYl9yZWcpOwogZXh0ZXJuIHZvaWQgcWxhODA0NF93cl9kaXJlY3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwKIAkJCSAgICAgIGNvbnN0IHVpbnQzMl90IGNyYl9yZWcsIGNvbnN0IHVpbnQzMl90IHZhbHVlKTsKLWV4dGVybiBpbmxpbmUgdm9pZCBxbGE4MDQ0X3NldF9xc250X3JlYWR5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwotZXh0ZXJuIGlubGluZSB2b2lkIHFsYTgwNDRfbmVlZF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwogZXh0ZXJuIGludCBxbGE4MDQ0X2RldmljZV9zdGF0ZV9oYW5kbGVyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwogZXh0ZXJuIHZvaWQgcWxhODA0NF9jbGVhcl9xc250X3JlYWR5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwogZXh0ZXJuIHZvaWQgcWxhODA0NF9jbGVhcl9kcnZfYWN0aXZlKHN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCmluZGV4IGYwZWRiMDcuLmExYWIyNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwpAQCAtMzI1LDcgKzMyNSw2IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYTsKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwogCXN0cnVjdCByc3BfcXVlICpyc3A7Ci0JY2hhcgkJdGFnWzJdOwogCiAJLyogU2V0dXAgZGV2aWNlIHBvaW50ZXJzLiAqLwogCXJldCA9IDA7CkBAIC00MDQsMjYgKzQwMyw3IEBACiAJLyogU2V0IHRhcmdldCBJRCBhbmQgTFVOIG51bWJlciovCiAJU0VUX1RBUkdFVF9JRChoYSwgY21kX3BrdC0+dGFyZ2V0LCBzcC0+ZmNwb3J0LT5sb29wX2lkKTsKIAljbWRfcGt0LT5sdW4gPSBjcHVfdG9fbGUxNihjbWQtPmRldmljZS0+bHVuKTsKLQotCS8qIFVwZGF0ZSB0YWdnZWQgcXVldWluZyBtb2RpZmllciAqLwotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQljbWRfcGt0LT5jb250cm9sX2ZsYWdzID0KLQkJCSAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KENGX0hFQURfVEFHKTsKLQkJCWJyZWFrOwotCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkJY21kX3BrdC0+Y29udHJvbF9mbGFncyA9Ci0JCQkgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihDRl9PUkRFUkVEX1RBRyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNtZF9wa3QtPmNvbnRyb2xfZmxhZ3MgPQotCQkJICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0ZfU0lNUExFX1RBRyk7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWNtZF9wa3QtPmNvbnRyb2xfZmxhZ3MgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KENGX1NJTVBMRV9UQUcpOwotCX0KKwljbWRfcGt0LT5jb250cm9sX2ZsYWdzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihDRl9TSU1QTEVfVEFHKTsKIAogCS8qIExvYWQgU0NTSSBjb21tYW5kIHBhY2tldC4gKi8KIAltZW1jcHkoY21kX3BrdC0+c2NzaV9jZGIsIGNtZC0+Y21uZCwgY21kLT5jbWRfbGVuKTsKQEAgLTEyNjQsNyArMTI0NCw2IEBACiAJdWludDE2X3QJCWZjcF9jbW5kX2xlbjsKIAlzdHJ1Y3QgZmNwX2NtbmQJCSpmY3BfY21uZDsKIAlkbWFfYWRkcl90CQljcmNfY3R4X2RtYTsKLQljaGFyCQkJdGFnWzJdOwogCiAJY21kID0gR0VUX0NNRF9TUChzcCk7CiAKQEAgLTEzNTYsMjUgKzEzMzUsNyBAQAogCWNtZF9wa3QtPmZjcF9jbW5kX2RzZWdfYWRkcmVzc1sxXSA9IGNwdV90b19sZTMyKAogCSAgICBNU0QoY3JjX2N0eF9kbWEgKyBDUkNfQ09OVEVYVF9GQ1BDTU5EX09GRikpOwogCWZjcF9jbW5kLT50YXNrX21hbmFnZW1lbnQgPSAwOwotCi0JLyoKLQkgKiBVcGRhdGUgdGFnZ2VkIHF1ZXVpbmcgbW9kaWZpZXIgaWYgdXNpbmcgY29tbWFuZCB0YWcgcXVldWluZwotCSAqLwotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCSAgICBmY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgPSBUU0tfSEVBRF9PRl9RVUVVRTsKLQkJICAgIGJyZWFrOwotCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkgICAgZmNwX2NtbmQtPnRhc2tfYXR0cmlidXRlID0gVFNLX09SREVSRUQ7Ci0JCSAgICBicmVhazsKLQkJZGVmYXVsdDoKLQkJICAgIGZjcF9jbW5kLT50YXNrX2F0dHJpYnV0ZSA9IFRTS19TSU1QTEU7Ci0JCSAgICBicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWZjcF9jbW5kLT50YXNrX2F0dHJpYnV0ZSA9IFRTS19TSU1QTEU7Ci0JfQorCWZjcF9jbW5kLT50YXNrX2F0dHJpYnV0ZSA9IFRTS19TSU1QTEU7CiAKIAljbWRfcGt0LT5mY3BfcnNwX2RzZWdfbGVuID0gMDsgLyogTGV0IHJlc3BvbnNlIGNvbWUgaW4gc3RhdHVzIGlvY2IgKi8KIApAQCAtMTQ5NSw3ICsxNDU2LDYgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBHRVRfQ01EX1NQKHNwKTsKIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhID0gc3AtPmZjcG9ydC0+dmhhOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwotCWNoYXIJCXRhZ1syXTsKIAogCS8qIFNldHVwIGRldmljZSBwb2ludGVycy4gKi8KIAlyZXQgPSAwOwpAQCAtMTU3OCwyMiArMTUzOCw3IEBACiAJaW50X3RvX3Njc2lsdW4oY21kLT5kZXZpY2UtPmx1biwgJmNtZF9wa3QtPmx1bik7CiAJaG9zdF90b19mY3Bfc3dhcCgodWludDhfdCAqKSZjbWRfcGt0LT5sdW4sIHNpemVvZihjbWRfcGt0LT5sdW4pKTsKIAotCS8qIFVwZGF0ZSB0YWdnZWQgcXVldWluZyBtb2RpZmllciAtLSBkZWZhdWx0IGlzIFRTS19TSU1QTEUgKDApLiAqLwotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQljbWRfcGt0LT50YXNrID0gVFNLX0hFQURfT0ZfUVVFVUU7Ci0JCQlicmVhazsKLQkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJCWNtZF9wa3QtPnRhc2sgPSBUU0tfT1JERVJFRDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkgICAgY21kX3BrdC0+dGFzayA9IFRTS19TSU1QTEU7Ci0JCSAgICBicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWNtZF9wa3QtPnRhc2sgPSBUU0tfU0lNUExFOwotCX0KKwljbWRfcGt0LT50YXNrID0gVFNLX1NJTVBMRTsKIAogCS8qIExvYWQgU0NTSSBjb21tYW5kIHBhY2tldC4gKi8KIAltZW1jcHkoY21kX3BrdC0+ZmNwX2NkYiwgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOwpAQCAtMjMxMCw3ICsyMjU1LDYgQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxID0gTlVMTDsKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwID0gTlVMTDsKLQljaGFyIHRhZ1syXTsKIAogCS8qIFNldHVwIGRldmljZSBwb2ludGVycy4gKi8KIAlyZXQgPSAwOwpAQCAtMjQ4OSwyMiArMjQzMyw2IEBACiAJCWVsc2UgaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQogCQkJY3R4LT5mY3BfY21uZC0+YWRkaXRpb25hbF9jZGJfbGVuIHw9IDI7CiAKLQkJLyoKLQkJICogVXBkYXRlIHRhZ2dlZCBxdWV1aW5nIG1vZGlmaWVyIC0tIGRlZmF1bHQgaXMgVFNLX1NJTVBMRSAoMCkuCi0JCSAqLwotCQlpZiAoc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgdGFnKSkgewotCQkJc3dpdGNoICh0YWdbMF0pIHsKLQkJCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQkJY3R4LT5mY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgPQotCQkJCSAgICBUU0tfSEVBRF9PRl9RVUVVRTsKLQkJCQlicmVhazsKLQkJCWNhc2UgT1JERVJFRF9RVUVVRV9UQUc6Ci0JCQkJY3R4LT5mY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgPQotCQkJCSAgICBUU0tfT1JERVJFRDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCiAJCS8qIFBvcHVsYXRlIHRoZSBGQ1BfUFJJTy4gKi8KIAkJaWYgKGhhLT5mbGFncy5mY3BfcHJpb19lbmFibGVkKQogCQkJY3R4LT5mY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgfD0KQEAgLTI1NjUsMjAgKzI0OTMsNiBAQAogCQlob3N0X3RvX2ZjcF9zd2FwKCh1aW50OF90ICopJmNtZF9wa3QtPmx1biwKIAkJICAgIHNpemVvZihjbWRfcGt0LT5sdW4pKTsKIAotCQkvKgotCQkgKiBVcGRhdGUgdGFnZ2VkIHF1ZXVpbmcgbW9kaWZpZXIgLS0gZGVmYXVsdCBpcyBUU0tfU0lNUExFICgwKS4KLQkJICovCi0JCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCQlzd2l0Y2ggKHRhZ1swXSkgewotCQkJY2FzZSBIRUFEX09GX1FVRVVFX1RBRzoKLQkJCQljbWRfcGt0LT50YXNrID0gVFNLX0hFQURfT0ZfUVVFVUU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkJCWNtZF9wa3QtPnRhc2sgPSBUU0tfT1JERVJFRDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCiAJCS8qIFBvcHVsYXRlIHRoZSBGQ1BfUFJJTy4gKi8KIAkJaWYgKGhhLT5mbGFncy5mY3BfcHJpb19lbmFibGVkKQogCQkJY21kX3BrdC0+dGFzayB8PSBzcC0+ZmNwb3J0LT5mY3BfcHJpbyA8PCAzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21yLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbXIuYwppbmRleCA4MDg2NzU5Li42ZDE5MGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbXIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbXIuYwpAQCAtMzA4Niw3ICszMDg2LDYgQEAKIAlzdHJ1Y3QgY21kX3R5cGVfN19meDAwICpjbWRfcGt0OwogCXN0cnVjdCBjbWRfdHlwZV83X2Z4MDAgbGNtZF9wa3Q7CiAJc3RydWN0IHNjc2lfbHVuIGxsdW47Ci0JY2hhcgkJdGFnWzJdOwogCiAJLyogU2V0dXAgZGV2aWNlIHBvaW50ZXJzLiAqLwogCXJldCA9IDA7CkBAIC0zMTU3LDE4ICszMTU2LDYgQEAKIAlob3N0X3RvX2FkYXAoKHVpbnQ4X3QgKikmbGx1biwgKHVpbnQ4X3QgKikmbGNtZF9wa3QubHVuLAogCSAgICBzaXplb2YobGNtZF9wa3QubHVuKSk7CiAKLQkvKiBVcGRhdGUgdGFnZ2VkIHF1ZXVpbmcgbW9kaWZpZXIgLS0gZGVmYXVsdCBpcyBUU0tfU0lNUExFICgwKS4gKi8KLQlpZiAoc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgdGFnKSkgewotCQlzd2l0Y2ggKHRhZ1swXSkgewotCQljYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgotCQkJbGNtZF9wa3QudGFzayA9IFRTS19IRUFEX09GX1FVRVVFOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1JERVJFRF9RVUVVRV9UQUc6Ci0JCQlsY21kX3BrdC50YXNrID0gVFNLX09SREVSRUQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQogCS8qIExvYWQgU0NTSSBjb21tYW5kIHBhY2tldC4gKi8KIAlob3N0X3RvX2FkYXAoY21kLT5jbW5kLCBsY21kX3BrdC5mY3BfY2RiLCBzaXplb2YobGNtZF9wa3QuZmNwX2NkYikpOwogCWxjbWRfcGt0LmJ5dGVfY291bnQgPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2NzaV9idWZmbGVuKGNtZCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254Mi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254Mi5jCmluZGV4IDI0YTg1MjguLmVkNGQ2YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueDIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbngyLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCXJldHVybjsKIH0KIAotaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogcWxhODA0NF9zZXRfcXNudF9yZWFkeShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhKQogewogCXVpbnQzMl90IHFzbnRfc3RhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IGRiM2RiZDkuLjZiNGQ5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0yMzYsOCArMjM2LDYgQEAKIHN0YXRpYyBpbnQgcWxhMnh4eF9laF9idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqKTsKIHN0YXRpYyBpbnQgcWxhMnh4eF9laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiAKLXN0YXRpYyBpbnQgcWxhMngwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCwgaW50KTsKLXN0YXRpYyBpbnQgcWxhMngwMF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50KTsKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfY2xlYXJfZHJ2X2FjdGl2ZShzdHJ1Y3QgcWxhX2h3X2RhdGEgKik7CiBzdGF0aWMgdm9pZCBxbGEyeDAwX2ZyZWVfZGV2aWNlKHNjc2lfcWxhX2hvc3RfdCAqKTsKIHN0YXRpYyB2b2lkIHFsYTgzeHhfZGlzYWJsZV9sYXNlcihzY3NpX3FsYV9ob3N0X3QgKnZoYSk7CkBAIC0yNTksOCArMjU3LDggQEAKIAkuc2xhdmVfZGVzdHJveQkJPSBxbGEyeHh4X3NsYXZlX2Rlc3Ryb3ksCiAJLnNjYW5fZmluaXNoZWQJCT0gcWxhMnh4eF9zY2FuX2ZpbmlzaGVkLAogCS5zY2FuX3N0YXJ0CQk9IHFsYTJ4eHhfc2Nhbl9zdGFydCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gcWxhMngwMF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlCT0gcWxhMngwMF9jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZAkJPSAtMSwKIAkuY21kX3Blcl9sdW4JCT0gMywKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCkBAIC0yNzAsNiArMjY4LDggQEAKIAkuc2hvc3RfYXR0cnMJCT0gcWxhMngwMF9ob3N0X2F0dHJzLAogCiAJLnN1cHBvcnRlZF9tb2RlCQk9IE1PREVfSU5JVElBVE9SLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqcWxhMnh4eF90cmFuc3BvcnRfdGVtcGxhdGUgPSBOVUxMOwpAQCAtMTQwNSwxMCArMTQwNSw3IEBACiAJaWYgKElTX1QxMF9QSV9DQVBBQkxFKHZoYS0+aHcpKQogCQlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMHg3KTsKIAotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCByZXEtPm1heF9xX2RlcHRoKTsKLQllbHNlCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgcmVxLT5tYXhfcV9kZXB0aCk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcmVxLT5tYXhfcV9kZXB0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MTgsNzYgKzE0MTUsNiBAQAogCXNkZXYtPmhvc3RkYXRhID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgcWxhMngwMF9oYW5kbGVfcXVldWVfZnVsbChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCi17Ci0JZmNfcG9ydF90ICpmY3BvcnQgPSAoc3RydWN0IGZjX3BvcnQgKikgc2Rldi0+aG9zdGRhdGE7Ci0KLQlpZiAoIXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpKQotCQlyZXR1cm47Ci0KLQlxbF9kYmcocWxfZGJnX2lvLCBmY3BvcnQtPnZoYSwgMHgzMDI5LAotCSAgICAiUXVldWUgZGVwdGggYWRqdXN0ZWQtZG93biB0byAlZCBmb3IgbmV4dXM9JWxkOiVkOiVsbHUuXG4iLAotCSAgICBzZGV2LT5xdWV1ZV9kZXB0aCwgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwotfQotCi1zdGF0aWMgdm9pZCBxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCi17Ci0JZmNfcG9ydF90ICpmY3BvcnQgPSBzZGV2LT5ob3N0ZGF0YTsKLQlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhID0gZmNwb3J0LT52aGE7Ci0Jc3RydWN0IHJlcV9xdWUgKnJlcSA9IE5VTEw7Ci0KLQlyZXEgPSB2aGEtPnJlcTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuOwotCi0JaWYgKHJlcS0+bWF4X3FfZGVwdGggPD0gc2Rldi0+cXVldWVfZGVwdGggfHwgcmVxLT5tYXhfcV9kZXB0aCA8IHFkZXB0aCkKLQkJcmV0dXJuOwotCi0JaWYgKHNkZXYtPm9yZGVyZWRfdGFncykKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBxZGVwdGgpOwotCWVsc2UKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX1NJTVBMRV9UQUcsIHFkZXB0aCk7Ci0KLQlxbF9kYmcocWxfZGJnX2lvLCB2aGEsIDB4MzAyYSwKLQkgICAgIlF1ZXVlIGRlcHRoIGFkanVzdGVkLXVwIHRvICVkIGZvciBuZXh1cz0lbGQ6JWQ6JWxsdS5cbiIsCi0JICAgIHNkZXYtPnF1ZXVlX2RlcHRoLCBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc2Rldi0+aWQsIHNkZXYtPmx1bik7Ci19Ci0KLXN0YXRpYyBpbnQKLXFsYTJ4MDBfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXFsYTJ4MDBfaGFuZGxlX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQlxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cChzZGV2LCBxZGVwdGgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCi1zdGF0aWMgaW50Ci1xbGEyeDAwX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZ190eXBlKQotewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIHRhZ190eXBlKTsKLQkJaWYgKHRhZ190eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnX3R5cGUgPSAwOwotCi0JcmV0dXJuIHRhZ190eXBlOwotfQotCiAvKioKICAqIHFsYTJ4MDBfY29uZmlnX2RtYV9hZGRyZXNzaW5nKCkgLSBDb25maWd1cmUgT1MgRE1BIGFkZHJlc3NpbmcgbWV0aG9kLgogICogQGhhOiBIQSBjb250ZXh0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lvY2IuYwppbmRleCAwOGFiNmRhLi4xNzIyMmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pb2NiLmMKQEAgLTI4MCw3ICsyODAsNiBAQAogCXVpbnQxNl90IHJlcV9jbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50MzJfdCBpbmRleDsKLQljaGFyIHRhZ1syXTsKIAogCS8qIEdldCByZWFsIGx1biBhbmQgYWRhcHRlciAqLwogCWRkYl9lbnRyeSA9IHNyYi0+ZGRiOwpAQCAtMzUyLDE1ICszNTEsNiBAQAogCiAJLyogU2V0IHRhZ2dlZCBxdWV1ZWluZyBjb250cm9sIGZsYWdzICovCiAJY21kX2VudHJ5LT5jb250cm9sX2ZsYWdzIHw9IENGX1NJTVBMRV9UQUc7Ci0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhjbWQsIHRhZykpCi0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgTVNHX0hFQURfVEFHOgotCQkJY21kX2VudHJ5LT5jb250cm9sX2ZsYWdzIHw9IENGX0hFQURfVEFHOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX09SREVSRURfVEFHOgotCQkJY21kX2VudHJ5LT5jb250cm9sX2ZsYWdzIHw9IENGX09SREVSRURfVEFHOwotCQkJYnJlYWs7Ci0JCX0KIAogCXFsYTR4eHhfYWR2YW5jZV9yZXFfcmluZ19wdHIoaGEpOwogCXFsYTR4eHhfYnVpbGRfc2NzaV9pb2NicyhzcmIsIGNtZF9lbnRyeSwgdG90X2RzZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCAxOTlmY2Y3Li42ZDI1ODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtMTYyLDEyICsxNjIsOCBAQAogc3RhdGljIGludCBxbGE0eHh4X2VoX3RhcmdldF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogc3RhdGljIGludCBxbGE0eHh4X2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIHN0YXRpYyBpbnQgcWxhNHh4eF9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZSk7Ci1zdGF0aWMgaW50IHFsYTR4eHhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyB2b2lkIHFsYTR4eHhfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwogc3RhdGljIHVtb2RlX3QgcWxhNF9hdHRyX2lzX3Zpc2libGUoaW50IHBhcmFtX3R5cGUsIGludCBwYXJhbSk7CiBzdGF0aWMgaW50IHFsYTR4eHhfaG9zdF9yZXNldChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgaW50IHJlc2V0X3R5cGUpOwotc3RhdGljIGludCBxbGE0eHh4X2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsCi0JCQkJICAgICAgaW50IHJlYXNvbik7CiAKIC8qCiAgKiBpU0NTSSBGbGFzaCBEREIgc3lzZnMgZW50cnkgcG9pbnRzCkBAIC0yMDQsMTAgKzIwMCw4IEBACiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHFsYTR4eHhfZWhfaG9zdF9yZXNldCwKIAkuZWhfdGltZWRfb3V0CQk9IHFsYTR4eHhfZWhfY21kX3RpbWVkX291dCwKIAotCS5zbGF2ZV9jb25maWd1cmUJPSBxbGE0eHh4X3NsYXZlX2NvbmZpZ3VyZSwKIAkuc2xhdmVfYWxsb2MJCT0gcWxhNHh4eF9zbGF2ZV9hbGxvYywKLQkuc2xhdmVfZGVzdHJveQkJPSBxbGE0eHh4X3NsYXZlX2Rlc3Ryb3ksCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHFsYTR4eHhfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAogCS50aGlzX2lkCQk9IC0xLAogCS5jbWRfcGVyX2x1bgkJPSAzLApAQCAtMjE4LDYgKzIxMiw3IEBACiAJLnNob3N0X2F0dHJzCQk9IHFsYTR4eHhfaG9zdF9hdHRycywKIAkuaG9zdF9yZXNldAkJPSBxbGE0eHh4X2hvc3RfcmVzZXQsCiAJLnZlbmRvcl9pZAkJPSBTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfUUxPR0lDLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IHFsYTR4eHhfaXNjc2lfdHJhbnNwb3J0ID0gewpAQCAtOTA2MCwzNSArOTA1NSwxNCBAQAogCWRkYiA9IHNlc3MtPmRkX2RhdGE7CiAKIAlzZGV2LT5ob3N0ZGF0YSA9IGRkYjsKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKIAogCWlmIChxbDR4bWF4cWRlcHRoICE9IDAgJiYgcWw0eG1heHFkZXB0aCA8PSAweGZmZmZVKQogCQlxdWV1ZV9kZXB0aCA9IHFsNHhtYXhxZGVwdGg7CiAKLQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBxdWV1ZV9kZXB0aCk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcXVldWVfZGVwdGgpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHFsYTR4eHhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcWxhNHh4eF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIDEpOwotfQotCi1zdGF0aWMgaW50IHFsYTR4eHhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwKLQkJCQkgICAgICBpbnQgcmVhc29uKQotewotCWlmICghcWw0eHFmdWxsdHJhY2tpbmcpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXJldHVybiBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoLCByZWFzb24pOwotfQotCiAvKioKICAqIHFsYTR4eHhfZGVsX2Zyb21fYWN0aXZlX2FycmF5IC0gcmV0dXJucyBhbiBhY3RpdmUgc3JiCiAgKiBAaGE6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KQEAgLTk4ODgsNiArOTg2Miw5IEBACiB7CiAJaW50IHJldDsKIAorCWlmIChxbDR4cWZ1bGx0cmFja2luZykKKwkJcWxhNHh4eF9kcml2ZXJfdGVtcGxhdGUudHJhY2tfcXVldWVfZGVwdGggPSAxOworCiAJLyogQWxsb2NhdGUgY2FjaGUgZm9yIFNSQnMuICovCiAJc3JiX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJxbGE0eHh4X3NyYnMiLCBzaXplb2Yoc3RydWN0IHNyYiksIDAsCiAJCQkJICAgICAgIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCA3OWM3N2I0Li4xYWQwYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTUyNyw5ICs1MjcsOSBAQAogCSAqCiAJICogMTogbm90aGluZyAobWF0Y2ggY29tcGxldGlvbikKIAkgKgotCSAqIDI6IGxvZyBvcGNvZGUgKyBjb21tYW5kIG9mIGFsbCBjb21tYW5kcworCSAqIDI6IGxvZyBvcGNvZGUgKyBjb21tYW5kIG9mIGFsbCBjb21tYW5kcyArIGNtZCBhZGRyZXNzCiAJICoKLQkgKiAzOiBzYW1lIGFzIDIgcGx1cyBkdW1wIGNtZCBhZGRyZXNzCisJICogMzogc2FtZSBhcyAyCiAJICoKIAkgKiA0OiBzYW1lIGFzIDMgcGx1cyBkdW1wIGV4dHJhIGp1bmsKIAkgKi8KQEAgLTUzNywxMCArNTM3LDggQEAKIAkJbGV2ZWwgPSBTQ1NJX0xPR19MRVZFTChTQ1NJX0xPR19NTFFVRVVFX1NISUZULAogCQkJCSAgICAgICBTQ1NJX0xPR19NTFFVRVVFX0JJVFMpOwogCQlpZiAobGV2ZWwgPiAxKSB7Ci0JCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIlNlbmQ6ICIpOwotCQkJaWYgKGxldmVsID4gMikKLQkJCQlwcmludGsoIjB4JXAgIiwgY21kKTsKLQkJCXByaW50aygiXG4iKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAorCQkJCSAgICAiU2VuZDogc2NtZCAweCVwXG4iLCBjbWQpOwogCQkJc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CiAJCQlpZiAobGV2ZWwgPiAzKSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnVmZmVyID0gMHglcCwgYnVmZmxlbiA9ICVkLCIKQEAgLTU2NSw3ICs1NjMsNyBAQAogCSAqCiAJICogMjogc2FtZSBhcyAxIGJ1dCBmb3IgYWxsIGNvbW1hbmQgY29tcGxldGlvbnMuCiAJICoKLQkgKiAzOiBzYW1lIGFzIDIgcGx1cyBkdW1wIGNtZCBhZGRyZXNzCisJICogMzogc2FtZSBhcyAyCiAJICoKIAkgKiA0OiBzYW1lIGFzIDMgcGx1cyBkdW1wIGV4dHJhIGp1bmsKIAkgKi8KQEAgLTU3NCwzOSArNTcyLDEwIEBACiAJCQkJICAgICAgIFNDU0lfTE9HX01MQ09NUExFVEVfQklUUyk7CiAJCWlmICgoKGxldmVsID4gMCkgJiYgKGNtZC0+cmVzdWx0IHx8IGRpc3Bvc2l0aW9uICE9IFNVQ0NFU1MpKSB8fAogCQkgICAgKGxldmVsID4gMSkpIHsKLQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLCAiRG9uZTogIik7Ci0JCQlpZiAobGV2ZWwgPiAyKQotCQkJCXByaW50aygiMHglcCAiLCBjbWQpOwotCQkJLyoKLQkJCSAqIER1bXAgdHJ1bmNhdGVkIHZhbHVlcywgc28gd2UgdXN1YWxseSBmaXQgd2l0aGluCi0JCQkgKiA4MCBjaGFycy4KLQkJCSAqLwotCQkJc3dpdGNoIChkaXNwb3NpdGlvbikgewotCQkJY2FzZSBTVUNDRVNTOgotCQkJCXByaW50aygiU1VDQ0VTU1xuIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE5FRURTX1JFVFJZOgotCQkJCXByaW50aygiUkVUUllcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRERfVE9fTUxRVUVVRToKLQkJCQlwcmludGsoIk1MUVVFVUVcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGQUlMRUQ6Ci0JCQkJcHJpbnRrKCJGQUlMRURcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FT1VUX0VSUk9SOgotCQkJCS8qIAotCQkJCSAqIElmIGNhbGxlZCB2aWEgc2NzaV90aW1lc19vdXQuCi0JCQkJICovCi0JCQkJcHJpbnRrKCJUSU1FT1VUXG4iKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKCJVTktOT1dOXG4iKTsKLQkJCX0KLQkJCXNjc2lfcHJpbnRfcmVzdWx0KGNtZCk7CisJCQlzY3NpX3ByaW50X3Jlc3VsdChjbWQsICJEb25lOiAiLCBkaXNwb3NpdGlvbik7CiAJCQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKIAkJCWlmIChzdGF0dXNfYnl0ZShjbWQtPnJlc3VsdCkgJiBDSEVDS19DT05ESVRJT04pCi0JCQkJc2NzaV9wcmludF9zZW5zZSgiIiwgY21kKTsKKwkJCQlzY3NpX3ByaW50X3NlbnNlKGNtZCk7CiAJCQlpZiAobGV2ZWwgPiAzKQogCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAogCQkJCQkgICAgInNjc2kgaG9zdCBidXN5ICVkIGZhaWxlZCAlZFxuIiwKQEAgLTYzNCw4NyArNjAzLDYgQEAKIEVYUE9SVF9TWU1CT0woc2NzaV9jbWRfZ2V0X3NlcmlhbCk7CiAKIC8qKgotICogc2NzaV9kaXNwYXRjaF9jb21tYW5kIC0gRGlzcGF0Y2ggYSBjb21tYW5kIHRvIHRoZSBsb3ctbGV2ZWwgZHJpdmVyLgotICogQGNtZDogY29tbWFuZCBibG9jayB3ZSBhcmUgZGlzcGF0Y2hpbmcuCi0gKgotICogUmV0dXJuOiBub256ZXJvIHJldHVybiByZXF1ZXN0IHdhcyByZWplY3RlZCBhbmQgZGV2aWNlJ3MgcXVldWUgbmVlZHMgdG8gYmUKLSAqIHBsdWdnZWQuCi0gKi8KLWludCBzY3NpX2Rpc3BhdGNoX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwotCWludCBydG4gPSAwOwotCi0JYXRvbWljX2luYygmY21kLT5kZXZpY2UtPmlvcmVxdWVzdF9jbnQpOwotCi0JLyogY2hlY2sgaWYgdGhlIGRldmljZSBpcyBzdGlsbCB1c2FibGUgKi8KLQlpZiAodW5saWtlbHkoY21kLT5kZXZpY2UtPnNkZXZfc3RhdGUgPT0gU0RFVl9ERUwpKSB7Ci0JCS8qIGluIFNERVZfREVMIHdlIGVycm9yIGFsbCBjb21tYW5kcy4gRElEX05PX0NPTk5FQ1QKLQkJICogcmV0dXJucyBhbiBpbW1lZGlhdGUgZXJyb3IgdXB3YXJkcywgYW5kIHNpZ25hbHMKLQkJICogdGhhdCB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBwcmVzZW50ICovCi0JCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHNjc2kgbGxkIG1hZGUgdGhpcyBkZXZpY2UgYmxvY2tlZC4gKi8KLQlpZiAodW5saWtlbHkoc2NzaV9kZXZpY2VfYmxvY2tlZChjbWQtPmRldmljZSkpKSB7Ci0JCS8qCi0JCSAqIGluIGJsb2NrZWQgc3RhdGUsIHRoZSBjb21tYW5kIGlzIGp1c3QgcHV0IGJhY2sgb24KLQkJICogdGhlIGRldmljZSBxdWV1ZS4gIFRoZSBzdXNwZW5kIHN0YXRlIGhhcyBhbHJlYWR5Ci0JCSAqIGJsb2NrZWQgdGhlIHF1ZXVlIHNvIGZ1dHVyZSByZXF1ZXN0cyBzaG91bGQgbm90Ci0JCSAqIG9jY3VyIHVudGlsIHRoZSBkZXZpY2UgdHJhbnNpdGlvbnMgb3V0IG9mIHRoZQotCQkgKiBzdXNwZW5kIHN0YXRlLgotCQkgKi8KLQkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKLQkJCSJxdWV1ZWNvbW1hbmQgOiBkZXZpY2UgYmxvY2tlZFxuIikpOwotCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwotCX0KLQotCS8qIFN0b3JlIHRoZSBMVU4gdmFsdWUgaW4gY21uZCwgaWYgbmVlZGVkLiAqLwotCWlmIChjbWQtPmRldmljZS0+bHVuX2luX2NkYikKLQkJY21kLT5jbW5kWzFdID0gKGNtZC0+Y21uZFsxXSAmIDB4MWYpIHwKLQkJCSAgICAgICAoY21kLT5kZXZpY2UtPmx1biA8PCA1ICYgMHhlMCk7Ci0KLQlzY3NpX2xvZ19zZW5kKGNtZCk7Ci0KLQkvKgotCSAqIEJlZm9yZSB3ZSBxdWV1ZSB0aGlzIGNvbW1hbmQsIGNoZWNrIGlmIHRoZSBjb21tYW5kCi0JICogbGVuZ3RoIGV4Y2VlZHMgd2hhdCB0aGUgaG9zdCBhZGFwdGVyIGNhbiBoYW5kbGUuCi0JICovCi0JaWYgKGNtZC0+Y21kX2xlbiA+IGNtZC0+ZGV2aWNlLT5ob3N0LT5tYXhfY21kX2xlbikgewotCQlTQ1NJX0xPR19NTFFVRVVFKDMsIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAotCQkJICAgICAgICJxdWV1ZWNvbW1hbmQgOiBjb21tYW5kIHRvbyBsb25nLiAiCi0JCQkgICAgICAgImNkYl9zaXplPSVkIGhvc3QtPm1heF9jbWRfbGVuPSVkXG4iLAotCQkJICAgICAgIGNtZC0+Y21kX2xlbiwgY21kLT5kZXZpY2UtPmhvc3QtPm1heF9jbWRfbGVuKSk7Ci0JCWNtZC0+cmVzdWx0ID0gKERJRF9BQk9SVCA8PCAxNik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaG9zdC0+c2hvc3Rfc3RhdGUgPT0gU0hPU1RfREVMKSkgewotCQljbWQtPnJlc3VsdCA9IChESURfTk9fQ09OTkVDVCA8PCAxNik7Ci0JCWdvdG8gZG9uZTsKLQotCX0KLQotCXRyYWNlX3Njc2lfZGlzcGF0Y2hfY21kX3N0YXJ0KGNtZCk7Ci0JcnRuID0gaG9zdC0+aG9zdHQtPnF1ZXVlY29tbWFuZChob3N0LCBjbWQpOwotCWlmIChydG4pIHsKLQkJdHJhY2Vfc2NzaV9kaXNwYXRjaF9jbWRfZXJyb3IoY21kLCBydG4pOwotCQlpZiAocnRuICE9IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSAmJgotCQkgICAgcnRuICE9IFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWSkKLQkJCXJ0biA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0KLQkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKLQkJCSJxdWV1ZWNvbW1hbmQgOiByZXF1ZXN0IHJlamVjdGVkXG4iKSk7Ci0JfQotCi0JcmV0dXJuIHJ0bjsKLSBkb25lOgotCWNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogc2NzaV9maW5pc2hfY29tbWFuZCAtIGNsZWFudXAgYW5kIHBhc3MgY29tbWFuZCBiYWNrIHRvIHVwcGVyIGxheWVyCiAgKiBAY21kOiB0aGUgY29tbWFuZAogICoKQEAgLTc3MywzMiArNjYxLDE4IEBACiB9CiAKIC8qKgotICogc2NzaV9hZGp1c3RfcXVldWVfZGVwdGggLSBMZXQgbG93IGxldmVsIGRyaXZlcnMgY2hhbmdlIGEgZGV2aWNlJ3MgcXVldWUgZGVwdGgKKyAqIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gY2hhbmdlIGEgZGV2aWNlJ3MgcXVldWUgZGVwdGgKICAqIEBzZGV2OiBTQ1NJIERldmljZSBpbiBxdWVzdGlvbgotICogQHRhZ2dlZDogRG8gd2UgdXNlIHRhZ2dlZCBxdWV1ZWluZyAobm9uLTApIG9yIGRvIHdlIHRyZWF0Ci0gKiAgICAgICAgICB0aGlzIGRldmljZSBhcyBhbiB1bnRhZ2dlZCBkZXZpY2UgKDApCi0gKiBAdGFnczogTnVtYmVyIG9mIHRhZ3MgYWxsb3dlZCBpZiB0YWdnZWQgcXVldWVpbmcgZW5hYmxlZCwKLSAqICAgICAgICBvciBudW1iZXIgb2YgY29tbWFuZHMgdGhlIGxvdyBsZXZlbCBkcml2ZXIgY2FuCi0gKiAgICAgICAgcXVldWUgdXAgaW4gbm9uLXRhZ2dlZCBtb2RlIChhcyBwZXIgY21kX3Blcl9sdW4pLgorICogQGRlcHRoOiBudW1iZXIgb2YgY29tbWFuZHMgYWxsb3dlZCB0byBiZSBxdWV1ZWQgdG8gdGhlIGRyaXZlcgogICoKLSAqIFJldHVybnM6CU5vdGhpbmcKLSAqCi0gKiBMb2NrIFN0YXR1czoJTm9uZSBoZWxkIG9uIGVudHJ5Ci0gKgotICogTm90ZXM6CUxvdyBsZXZlbCBkcml2ZXJzIG1heSBjYWxsIHRoaXMgYXQgYW55IHRpbWUgYW5kIHdlIHdpbGwgZG8KLSAqIAkJdGhlIHJpZ2h0IHRoaW5nIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGlzCi0gKiAJCWN1cnJlbnRseSBhY3RpdmUgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGV2ZW4gaGFzIHRoZQotICogCQljb21tYW5kIGJsb2NrcyBidWlsdCB5ZXQuCisgKiBTZXRzIHRoZSBkZXZpY2UgcXVldWUgZGVwdGggYW5kIHJldHVybnMgdGhlIG5ldyB2YWx1ZS4KICAqLwotdm9pZCBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdnZWQsIGludCB0YWdzKQoraW50IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKgotCSAqIHJlZnVzZSB0byBzZXQgdGFnZ2VkIGRlcHRoIHRvIGFuIHVud29ya2FibGUgc2l6ZQotCSAqLwotCWlmICh0YWdzIDw9IDApCi0JCXJldHVybjsKKwlpZiAoZGVwdGggPD0gMCkKKwkJZ290byBvdXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAKQEAgLTgxMywzNSArNjg3LDE3IEBACiAJICovCiAJaWYgKCFzaG9zdF91c2VfYmxrX21xKHNkZXYtPmhvc3QpICYmICFzZGV2LT5ob3N0LT5icXQpIHsKIAkJaWYgKGJsa19xdWV1ZV90YWdnZWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSkgJiYKLQkJICAgIGJsa19xdWV1ZV9yZXNpemVfdGFncyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCB0YWdzKSAhPSAwKQotCQkJZ290byBvdXQ7CisJCSAgICBibGtfcXVldWVfcmVzaXplX3RhZ3Moc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZGVwdGgpICE9IDApCisJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0Jc2Rldi0+cXVldWVfZGVwdGggPSB0YWdzOwotCXN3aXRjaCAodGFnZ2VkKSB7Ci0JCWNhc2UgMDoKLQkJCXNkZXYtPm9yZGVyZWRfdGFncyA9IDA7Ci0JCQlzZGV2LT5zaW1wbGVfdGFncyA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBNU0dfT1JERVJFRF9UQUc6Ci0JCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAxOwotCQkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX1NJTVBMRV9UQUc6Ci0JCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAwOwotCQkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAwOwotCQkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAwOwotCQkJc2Rldl9wcmludGsoS0VSTl9XQVJOSU5HLCBzZGV2LAotCQkJCSAgICAic2NzaV9hZGp1c3RfcXVldWVfZGVwdGgsIGJhZCBxdWV1ZSB0eXBlLCAiCi0JCQkJICAgICJkaXNhYmxlZFxuIik7Ci0JfQotIG91dDoKKwlzZGV2LT5xdWV1ZV9kZXB0aCA9IGRlcHRoOworb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKK291dDoKKwlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CiB9Ci1FWFBPUlRfU1lNQk9MKHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKTsKK0VYUE9SVF9TWU1CT0woc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgpOwogCiAvKioKICAqIHNjc2lfdHJhY2tfcXVldWVfZnVsbCAtIHRyYWNrIFFVRVVFX0ZVTEwgZXZlbnRzIHRvIGFkanVzdCBxdWV1ZSBkZXB0aApAQCAtODg1LDE5ICs3NDEsMzIgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKHNkZXYtPmxhc3RfcXVldWVfZnVsbF9kZXB0aCA8IDgpIHsKIAkJLyogRHJvcCBiYWNrIHRvIHVudGFnZ2VkICovCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKKwkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgMCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkKLQlpZiAoc2Rldi0+b3JkZXJlZF90YWdzKQotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfT1JERVJFRF9UQUcsIGRlcHRoKTsKLQllbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCBkZXB0aCk7Ci0JcmV0dXJuIGRlcHRoOworCisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV90cmFja19xdWV1ZV9mdWxsKTsKIAogLyoqCisgKiBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlKCkgLSBDaGFuZ2UgYSBkZXZpY2UncyBxdWV1ZSB0eXBlCisgKiBAc2RldjogICAgIFRoZSBTQ1NJIGRldmljZSB3aG9zZSBxdWV1ZSBkZXB0aCBpcyB0byBjaGFuZ2UKKyAqIEB0YWdfdHlwZTogSWRlbnRpZmllciBmb3IgcXVldWUgdHlwZQorICovCitpbnQgc2NzaV9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKK3sKKwlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCXJldHVybiAwOworCisJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOworCXJldHVybiB0YWdfdHlwZTsKKworfQorRVhQT1JUX1NZTUJPTChzY3NpX2NoYW5nZV9xdWV1ZV90eXBlKTsKKworLyoqCiAgKiBzY3NpX3ZwZF9pbnF1aXJ5IC0gUmVxdWVzdCBhIGRldmljZSBwcm92aWRlIHVzIHdpdGggYSBWUEQgcGFnZQogICogQHNkZXY6IFRoZSBkZXZpY2UgdG8gYXNrCiAgKiBAYnVmZmVyOiBXaGVyZSB0byBwdXQgdGhlIHJlc3VsdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggMjM4ZTA2Zi4uYWE0YjZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC02Myw4ICs2Myw4IEBACiAjaW5jbHVkZSAic2QuaCIKICNpbmNsdWRlICJzY3NpX2xvZ2dpbmcuaCIKIAotI2RlZmluZSBTQ1NJX0RFQlVHX1ZFUlNJT04gIjEuODQiCi1zdGF0aWMgY29uc3QgY2hhciAqc2NzaV9kZWJ1Z192ZXJzaW9uX2RhdGUgPSAiMjAxNDA3MDYiOworI2RlZmluZSBTQ1NJX0RFQlVHX1ZFUlNJT04gIjEuODUiCitzdGF0aWMgY29uc3QgY2hhciAqc2NzaV9kZWJ1Z192ZXJzaW9uX2RhdGUgPSAiMjAxNDEwMjIiOwogCiAjZGVmaW5lIE1ZX05BTUUgInNjc2lfZGVidWciCiAKQEAgLTc1LDE5ICs3NSwyMiBAQAogI2RlZmluZSBVTlJFQ09WRVJFRF9SRUFEX0VSUiAweDExCiAjZGVmaW5lIFBBUkFNRVRFUl9MSVNUX0xFTkdUSF9FUlIgMHgxYQogI2RlZmluZSBJTlZBTElEX09QQ09ERSAweDIwCi0jZGVmaW5lIEFERFJfT1VUX09GX1JBTkdFIDB4MjEKLSNkZWZpbmUgSU5WQUxJRF9DT01NQU5EX09QQ09ERSAweDIwCisjZGVmaW5lIExCQV9PVVRfT0ZfUkFOR0UgMHgyMQogI2RlZmluZSBJTlZBTElEX0ZJRUxEX0lOX0NEQiAweDI0CiAjZGVmaW5lIElOVkFMSURfRklFTERfSU5fUEFSQU1fTElTVCAweDI2CiAjZGVmaW5lIFVBX1JFU0VUX0FTQyAweDI5CiAjZGVmaW5lIFVBX0NIQU5HRURfQVNDIDB4MmEKKyNkZWZpbmUgSU5TVUZGX1JFU19BU0MgMHg1NQorI2RlZmluZSBJTlNVRkZfUkVTX0FTQ1EgMHgzCiAjZGVmaW5lIFBPV0VSX09OX1JFU0VUX0FTQ1EgMHgwCiAjZGVmaW5lIEJVU19SRVNFVF9BU0NRIDB4MgkvKiBzY3NpIGJ1cyByZXNldCBvY2N1cnJlZCAqLwogI2RlZmluZSBNT0RFX0NIQU5HRURfQVNDUSAweDEJLyogbW9kZSBwYXJhbWV0ZXJzIGNoYW5nZWQgKi8KKyNkZWZpbmUgQ0FQQUNJVFlfQ0hBTkdFRF9BU0NRIDB4OQogI2RlZmluZSBTQVZJTkdfUEFSQU1TX1VOU1VQIDB4MzkKICNkZWZpbmUgVFJBTlNQT1JUX1BST0JMRU0gMHg0YgogI2RlZmluZSBUSFJFU0hPTERfRVhDRUVERUQgMHg1ZAogI2RlZmluZSBMT1dfUE9XRVJfQ09ORF9PTiAweDVlCisjZGVmaW5lIE1JU0NPTVBBUkVfVkVSSUZZX0FTQyAweDFkCiAKIC8qIEFkZGl0aW9uYWwgU2Vuc2UgQ29kZSBRdWFsaWZpZXIgKEFTQ1EpICovCiAjZGVmaW5lIEFDS19OQUtfVE8gMHgzCkBAIC0xMzMsNiArMTM2LDcgQEAKICNkZWZpbmUgREVGX1ZJUlRVQUxfR0IgICAwCiAjZGVmaW5lIERFRl9WUERfVVNFX0hPU1ROTyAxCiAjZGVmaW5lIERFRl9XUklURVNBTUVfTEVOR1RIIDB4RkZGRgorI2RlZmluZSBERUZfU1RSSUNUIDAKICNkZWZpbmUgREVMQVlfT1ZFUlJJRERFTiAtOTk5OQogCiAvKiBiaXQgbWFzayB2YWx1ZXMgZm9yIHNjc2lfZGVidWdfb3B0cyAqLwpAQCAtMTc2LDExICsxODAsMTIgQEAKICNkZWZpbmUgU0RFQlVHX1VBX1BPUiAwCQkvKiBQb3dlciBvbiwgcmVzZXQsIG9yIGJ1cyBkZXZpY2UgcmVzZXQgKi8KICNkZWZpbmUgU0RFQlVHX1VBX0JVU19SRVNFVCAxCiAjZGVmaW5lIFNERUJVR19VQV9NT0RFX0NIQU5HRUQgMgotI2RlZmluZSBTREVCVUdfTlVNX1VBUyAzCisjZGVmaW5lIFNERUJVR19VQV9DQVBBQ0lUWV9DSEFOR0VEIDMKKyNkZWZpbmUgU0RFQlVHX05VTV9VQVMgNAogCiAvKiBmb3IgY2hlY2tfcmVhZGluZXNzKCkgKi8KLSNkZWZpbmUgVUFTX09OTFkgMQotI2RlZmluZSBVQVNfVFVSIDAKKyNkZWZpbmUgVUFTX09OTFkgMQkvKiBjaGVjayBmb3IgVUFzIG9ubHkgKi8KKyNkZWZpbmUgVUFTX1RVUiAwCS8qIGlmIG5vIFVBcyB0aGVuIGNoZWNrIGlmIG1lZGlhIGFjY2VzcyBwb3NzaWJsZSAqLwogCiAvKiB3aGVuIDE9PVNDU0lfREVCVUdfT1BUX01FRElVTV9FUlIsIGEgbWVkaXVtIGVycm9yIGlzIHNpbXVsYXRlZCBhdCB0aGlzCiAgKiBzZWN0b3Igb24gcmVhZCBjb21tYW5kczogKi8KQEAgLTIwNiw2ICsyMTEsMzAxIEBACiAjd2FybmluZyAiRXhwZWN0IERFRl9DTURfUEVSX0xVTiA8PSBTQ1NJX0RFQlVHX0NBTlFVRVVFIgogI2VuZGlmCiAKKy8qIFNDU0kgb3Bjb2RlcyAoZmlyc3QgYnl0ZSBvZiBjZGIpIG1hcHBlZCBvbnRvIHRoZXNlIGluZGV4ZXMgKi8KK2VudW0gc2RlYl9vcGNvZGVfaW5kZXggeworCVNERUJfSV9JTlZBTElEX09QQ09ERSA9CTAsCisJU0RFQl9JX0lOUVVJUlkgPSAxLAorCVNERUJfSV9SRVBPUlRfTFVOUyA9IDIsCisJU0RFQl9JX1JFUVVFU1RfU0VOU0UgPSAzLAorCVNERUJfSV9URVNUX1VOSVRfUkVBRFkgPSA0LAorCVNERUJfSV9NT0RFX1NFTlNFID0gNSwJCS8qIDYsIDEwICovCisJU0RFQl9JX01PREVfU0VMRUNUID0gNiwJCS8qIDYsIDEwICovCisJU0RFQl9JX0xPR19TRU5TRSA9IDcsCisJU0RFQl9JX1JFQURfQ0FQQUNJVFkgPSA4LAkvKiAxMDsgMTYgaXMgaW4gU0FfSU4oMTYpICovCisJU0RFQl9JX1JFQUQgPSA5LAkJLyogNiwgMTAsIDEyLCAxNiAqLworCVNERUJfSV9XUklURSA9IDEwLAkJLyogNiwgMTAsIDEyLCAxNiAqLworCVNERUJfSV9TVEFSVF9TVE9QID0gMTEsCisJU0RFQl9JX1NFUlZfQUNUX0lOID0gMTIsCS8qIDEyLCAxNiAqLworCVNERUJfSV9TRVJWX0FDVF9PVVQgPSAxMywJLyogMTIsIDE2ICovCisJU0RFQl9JX01BSU5UX0lOID0gMTQsCisJU0RFQl9JX01BSU5UX09VVCA9IDE1LAorCVNERUJfSV9WRVJJRlkgPSAxNiwJCS8qIDEwIG9ubHkgKi8KKwlTREVCX0lfVkFSSUFCTEVfTEVOID0gMTcsCisJU0RFQl9JX1JFU0VSVkUgPSAxOCwJCS8qIDYsIDEwICovCisJU0RFQl9JX1JFTEVBU0UgPSAxOSwJCS8qIDYsIDEwICovCisJU0RFQl9JX0FMTE9XX1JFTU9WQUwgPSAyMCwJLyogUFJFVkVOVCBBTExPVyBNRURJVU0gUkVNT1ZBTCAqLworCVNERUJfSV9SRVpFUk9fVU5JVCA9IDIxLAkvKiBSRVdJTkQgaW4gU1NDICovCisJU0RFQl9JX0FUQV9QVCA9IDIyLAkJLyogMTIsIDE2ICovCisJU0RFQl9JX1NFTkRfRElBRyA9IDIzLAorCVNERUJfSV9VTk1BUCA9IDI0LAorCVNERUJfSV9YRFdSSVRFUkVBRCA9IDI1LAkvKiAxMCBvbmx5ICovCisJU0RFQl9JX1dSSVRFX0JVRkZFUiA9IDI2LAorCVNERUJfSV9XUklURV9TQU1FID0gMjcsCQkvKiAxMCwgMTYgKi8KKwlTREVCX0lfU1lOQ19DQUNIRSA9IDI4LAkJLyogMTAgb25seSAqLworCVNERUJfSV9DT01QX1dSSVRFID0gMjksCisJU0RFQl9JX0xBU1RfRUxFTUVOVCA9IDMwLAkvKiBrZWVwIHRoaXMgbGFzdCAqLworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb3Bjb2RlX2luZF9hcnJbMjU2XSA9IHsKKy8qIDB4MDsgMHgwLT4weDFmOiA2IGJ5dGUgY2RicyAqLworCVNERUJfSV9URVNUX1VOSVRfUkVBRFksIFNERUJfSV9SRVpFUk9fVU5JVCwgMCwgU0RFQl9JX1JFUVVFU1RfU0VOU0UsCisJICAgIDAsIDAsIDAsIDAsCisJU0RFQl9JX1JFQUQsIDAsIFNERUJfSV9XUklURSwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCBTREVCX0lfSU5RVUlSWSwgMCwgMCwgU0RFQl9JX01PREVfU0VMRUNULCBTREVCX0lfUkVTRVJWRSwKKwkgICAgU0RFQl9JX1JFTEVBU0UsCisJMCwgMCwgU0RFQl9JX01PREVfU0VOU0UsIFNERUJfSV9TVEFSVF9TVE9QLCAwLCBTREVCX0lfU0VORF9ESUFHLAorCSAgICBTREVCX0lfQUxMT1dfUkVNT1ZBTCwgMCwKKy8qIDB4MjA7IDB4MjAtPjB4M2Y6IDEwIGJ5dGUgY2RicyAqLworCTAsIDAsIDAsIDAsIDAsIFNERUJfSV9SRUFEX0NBUEFDSVRZLCAwLCAwLAorCVNERUJfSV9SRUFELCAwLCBTREVCX0lfV1JJVEUsIDAsIDAsIDAsIDAsIFNERUJfSV9WRVJJRlksCisJMCwgMCwgMCwgMCwgMCwgU0RFQl9JX1NZTkNfQ0FDSEUsIDAsIDAsCisJMCwgMCwgMCwgU0RFQl9JX1dSSVRFX0JVRkZFUiwgMCwgMCwgMCwgMCwKKy8qIDB4NDA7IDB4NDAtPjB4NWY6IDEwIGJ5dGUgY2RicyAqLworCTAsIFNERUJfSV9XUklURV9TQU1FLCBTREVCX0lfVU5NQVAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgU0RFQl9JX0xPR19TRU5TRSwgMCwgMCwKKwkwLCAwLCAwLCBTREVCX0lfWERXUklURVJFQUQsIDAsIFNERUJfSV9NT0RFX1NFTEVDVCwgU0RFQl9JX1JFU0VSVkUsCisJICAgIFNERUJfSV9SRUxFQVNFLAorCTAsIDAsIFNERUJfSV9NT0RFX1NFTlNFLCAwLCAwLCAwLCAwLCAwLAorLyogMHg2MDsgMHg2MC0+MHg3ZCBhcmUgcmVzZXJ2ZWQgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgU0RFQl9JX1ZBUklBQkxFX0xFTiwKKy8qIDB4ODA7IDB4ODAtPjB4OWY6IDE2IGJ5dGUgY2RicyAqLworCTAsIDAsIDAsIDAsIDAsIFNERUJfSV9BVEFfUFQsIDAsIDAsCisJU0RFQl9JX1JFQUQsIFNERUJfSV9DT01QX1dSSVRFLCBTREVCX0lfV1JJVEUsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgU0RFQl9JX1dSSVRFX1NBTUUsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgU0RFQl9JX1NFUlZfQUNUX0lOLCBTREVCX0lfU0VSVl9BQ1RfT1VULAorLyogMHhhMDsgMHhhMC0+MHhiZjogMTIgYnl0ZSBjZGJzICovCisJU0RFQl9JX1JFUE9SVF9MVU5TLCBTREVCX0lfQVRBX1BULCAwLCBTREVCX0lfTUFJTlRfSU4sCisJICAgICBTREVCX0lfTUFJTlRfT1VULCAwLCAwLCAwLAorCVNERUJfSV9SRUFELCBTREVCX0lfU0VSVl9BQ1RfT1VULCBTREVCX0lfV1JJVEUsIFNERUJfSV9TRVJWX0FDVF9JTiwKKwkgICAgIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorLyogMHhjMDsgMHhjMC0+MHhmZjogdmVuZG9yIHNwZWNpZmljICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKK307CisKKyNkZWZpbmUgRl9EX0lOCQkJMQorI2RlZmluZSBGX0RfT1VUCQkJMgorI2RlZmluZSBGX0RfT1VUX01BWUJFCQk0CS8qIFdSSVRFIFNBTUUsIE5ET0IgYml0ICovCisjZGVmaW5lIEZfRF9VTktOCQk4CisjZGVmaW5lIEZfUkxfV0xVTl9PSwkJMHgxMAorI2RlZmluZSBGX1NLSVBfVUEJCTB4MjAKKyNkZWZpbmUgRl9ERUxBWV9PVkVSUgkJMHg0MAorI2RlZmluZSBGX1NBX0xPVwkJMHg4MAkvKiBjZGIgYnl0ZSAxLCBiaXRzIDQgdG8gMCAqLworI2RlZmluZSBGX1NBX0hJR0gJCTB4MTAwCS8qIGFzIHVzZWQgYnkgdmFyaWFibGUgbGVuZ3RoIGNkYnMgKi8KKyNkZWZpbmUgRl9JTlZfT1AJCTB4MjAwCisjZGVmaW5lIEZfRkFLRV9SVwkJMHg0MDAKKyNkZWZpbmUgRl9NX0FDQ0VTUwkJMHg4MDAJLyogbWVkaWEgYWNjZXNzICovCisKKyNkZWZpbmUgRkZfUkVTUE9ORCAoRl9STF9XTFVOX09LIHwgRl9TS0lQX1VBIHwgRl9ERUxBWV9PVkVSUikKKyNkZWZpbmUgRkZfRElSRUNUX0lPIChGX01fQUNDRVNTIHwgRl9GQUtFX1JXKQorI2RlZmluZSBGRl9TQSAoRl9TQV9ISUdIIHwgRl9TQV9MT1cpCisKK3N0cnVjdCBzZGVidWdfZGV2X2luZm87CitzdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3BfcmVwb3J0X2x1bnMoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3JlcXVlc3RzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbGVjdChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3BfbG9nX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZWFkY2FwKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZWFkX2R0MChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3Bfd3JpdGVfZHQwKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9zdGFydF9zdG9wKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZWFkY2FwMTYoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX2dldF9sYmFfc3RhdHVzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZXBvcnRfdGd0cGdzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF91bm1hcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3BfcnN1cF9vcGNvZGVzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yc3VwX3RtZnMoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3dyaXRlX3NhbWVfMTAoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3dyaXRlX3NhbWVfMTYoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3hkd3JpdGVyZWFkXzEwKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9jb21wX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKKworc3RydWN0IG9wY29kZV9pbmZvX3QgeworCXU4IG51bV9hdHRhY2hlZDsJLyogMCBpZiB0aGlzIGlzIGl0IChpLmUuIGEgbGVhZik7IHVzZSAweGZmCisJCQkJICogZm9yIHRlcm1pbmF0aW5nIGVsZW1lbnQgKi8KKwl1OCBvcGNvZGU7CQkvKiBpZiBudW1fYXR0YWNoZWQgPiAwLCBwcmVmZXJyZWQgKi8KKwl1MTYgc2E7CQkJLyogc2VydmljZSBhY3Rpb24gKi8KKwl1MzIgZmxhZ3M7CQkvKiBPUi1lZCBzZXQgb2YgU0RFQl9GXyogKi8KKwlpbnQgKCpwZnApKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKKwljb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCAqYXJycDsgIC8qIG51bV9hdHRhY2hlZCBlbGVtZW50cyBvciBOVUxMICovCisJdTggbGVuX21hc2tbMTZdOwkvKiBsZW49bGVuX21hc2tbMF0sIHRoZW4gbWFzayBmb3IgY2RiWzFdLi4uICovCisJCQkJLyogaWdub3JlIGNkYiBieXRlcyBhZnRlciBwb3NpdGlvbiAxNSAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190IG1zZW5zZV9pYXJyWzFdID0geworCXswLCAweDFhLCAwLCBGX0RfSU4sIE5VTEwsIE5VTEwsCisJICAgIHs2LCAgMHhlOCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCBtc2VsZWN0X2lhcnJbMV0gPSB7CisJezAsIDB4MTUsIDAsIEZfRF9PVVQsIE5VTEwsIE5VTEwsCisJICAgIHs2LCAgMHhmMSwgMCwgMCwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCByZWFkX2lhcnJbM10gPSB7CisJezAsIDB4MjgsIDAsIEZfRF9JTiB8IEZGX0RJUkVDVF9JTywgcmVzcF9yZWFkX2R0MCwgTlVMTCwvKiBSRUFEKDEwKSAqLworCSAgICB7MTAsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLAorCSAgICAgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHg4LCAwLCBGX0RfSU4gfCBGRl9ESVJFQ1RfSU8sIHJlc3BfcmVhZF9kdDAsIE5VTEwsIC8qIFJFQUQoNikgKi8KKwkgICAgezYsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweGE4LCAwLCBGX0RfSU4gfCBGRl9ESVJFQ1RfSU8sIHJlc3BfcmVhZF9kdDAsIE5VTEwsLyogUkVBRCgxMikgKi8KKwkgICAgezEyLCAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwKKwkgICAgIDB4YzcsIDAsIDAsIDAsIDB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3Qgd3JpdGVfaWFyclszXSA9IHsKKwl7MCwgMHgyYSwgMCwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF93cml0ZV9kdDAsIE5VTEwsICAgLyogMTAgKi8KKwkgICAgezEwLCAgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgxZiwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwKKwkgICAgIDAsIDAsIDAsIDB9IH0sCisJezAsIDB4YSwgMCwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF93cml0ZV9kdDAsIE5VTEwsICAgIC8qIDYgKi8KKwkgICAgezYsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweGFhLCAwLCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX3dyaXRlX2R0MCwgTlVMTCwgICAvKiAxMiAqLworCSAgICB7MTIsICAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDlmLAorCSAgICAgMHhjNywgMCwgMCwgMCwgMH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCBzYV9pbl9pYXJyWzFdID0geworCXswLCAweDllLCAweDEyLCBGX1NBX0xPVyB8IEZfRF9JTiwgcmVzcF9nZXRfbGJhX3N0YXR1cywgTlVMTCwKKwkgICAgezE2LCAgMHgxMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDB4Yzd9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgdmxfaWFyclsxXSA9IHsJLyogVkFSSUFCTEUgTEVOR1RIICovCisJezAsIDB4N2YsIDB4YiwgRl9TQV9ISUdIIHwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF93cml0ZV9kdDAsCisJICAgIE5VTEwsIHszMiwgIDB4YzcsIDAsIDAsIDAsIDAsIDB4MWYsIDB4MTgsIDB4MCwgMHhiLCAweGZhLAorCQkgICAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmfSB9LAkvKiBXUklURSgzMikgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCBtYWludF9pbl9pYXJyWzJdID0geworCXswLCAweGEzLCAweGMsIEZfU0FfTE9XIHwgRl9EX0lOLCByZXNwX3JzdXBfb3Bjb2RlcywgTlVMTCwKKwkgICAgezEyLCAgMHhjLCAweDg3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAwLAorCSAgICAgMHhjNywgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHhhMywgMHhkLCBGX1NBX0xPVyB8IEZfRF9JTiwgcmVzcF9yc3VwX3RtZnMsIE5VTEwsCisJICAgIHsxMiwgIDB4ZCwgMHg4MCwgMCwgMCwgMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMCwgMHhjNywgMCwgMCwKKwkgICAgIDAsIDB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3Qgd3JpdGVfc2FtZV9pYXJyWzFdID0geworCXswLCAweDkzLCAwLCBGX0RfT1VUX01BWUJFIHwgRkZfRElSRUNUX0lPLCByZXNwX3dyaXRlX3NhbWVfMTYsIE5VTEwsCisJICAgIHsxNiwgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJICAgICAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGM3fSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190IHJlc2VydmVfaWFyclsxXSA9IHsKKwl7MCwgMHgxNiwgMCwgRl9EX09VVCwgTlVMTCwgTlVMTCwJLyogUkVTRVJWRSg2KSAqLworCSAgICB7NiwgIDB4MWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgcmVsZWFzZV9pYXJyWzFdID0geworCXswLCAweDE3LCAwLCBGX0RfT1VULCBOVUxMLCBOVUxMLAkvKiBSRUxFQVNFKDYpICovCisJICAgIHs2LCAgMHgxZiwgMHhmZiwgMCwgMCwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKK307CisKKworLyogVGhpcyBhcnJheSBpcyBhY2Nlc3NlZCB2aWEgU0RFQl9JXyogdmFsdWVzLiBNYWtlIHN1cmUgYWxsIGFyZSBtYXBwZWQsCisgKiBwbHVzIHRoZSB0ZXJtaW5hdGluZyBlbGVtZW50cyBmb3IgbG9naWMgdGhhdCBzY2FucyB0aGlzIHRhYmxlIHN1Y2ggYXMKKyAqIFJFUE9SVCBTVVBQT1JURUQgT1BFUkFUSU9OIENPREVTLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190IG9wY29kZV9pbmZvX2FycltTREVCX0lfTEFTVF9FTEVNRU5UICsgMV0gPSB7CisvKiAwICovCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwKKwkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDEyLCAwLCBGRl9SRVNQT05EIHwgRl9EX0lOLCByZXNwX2lucXVpcnksIE5VTEwsCisJICAgIHs2LCAgMHhlMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHhhMCwgMCwgRkZfUkVTUE9ORCB8IEZfRF9JTiwgcmVzcF9yZXBvcnRfbHVucywgTlVMTCwKKwkgICAgezEyLCAgMHhlMywgMHhmZiwgMCwgMCwgMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMCwgMHhjNywgMCwgMCwKKwkgICAgIDAsIDB9IH0sCisJezAsIDB4MywgMCwgRkZfUkVTUE9ORCB8IEZfRF9JTiwgcmVzcF9yZXF1ZXN0cywgTlVMTCwKKwkgICAgezYsICAweGUxLCAwLCAwLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDAsIDAsIEZfTV9BQ0NFU1MgfCBGX1JMX1dMVU5fT0ssIE5VTEwsIE5VTEwsLyogVEVTVCBVTklUIFJFQURZICovCisJICAgIHs2LCAgMCwgMCwgMCwgMCwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MSwgMHg1YSwgMCwgRl9EX0lOLCByZXNwX21vZGVfc2Vuc2UsIG1zZW5zZV9pYXJyLAorCSAgICB7MTAsICAweGY4LCAweGZmLCAweGZmLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLAorCSAgICAgMH0gfSwKKwl7MSwgMHg1NSwgMCwgRl9EX09VVCwgcmVzcF9tb2RlX3NlbGVjdCwgbXNlbGVjdF9pYXJyLAorCSAgICB7MTAsICAweGYxLCAwLCAwLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDRkLCAwLCBGX0RfSU4sIHJlc3BfbG9nX3NlbnNlLCBOVUxMLAorCSAgICB7MTAsICAweGUzLCAweGZmLCAweGZmLCAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLAorCSAgICAgMCwgMCwgMH0gfSwKKwl7MCwgMHgyNSwgMCwgRl9EX0lOLCByZXNwX3JlYWRjYXAsIE5VTEwsCisJICAgIHsxMCwgIDB4ZTEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDAsIDB4MSwgMHhjNywgMCwgMCwgMCwgMCwKKwkgICAgIDAsIDB9IH0sCisJezMsIDB4ODgsIDAsIEZfRF9JTiB8IEZGX0RJUkVDVF9JTywgcmVzcF9yZWFkX2R0MCwgcmVhZF9pYXJyLAorCSAgICB7MTYsICAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCSAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwgMHhjN30gfSwJCS8qIFJFQUQoMTYpICovCisvKiAxMCAqLworCXszLCAweDhhLCAwLCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX3dyaXRlX2R0MCwgd3JpdGVfaWFyciwKKwkgICAgezE2LCAgMHhmYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OWYsIDB4Yzd9IH0sCQkvKiBXUklURSgxNikgKi8KKwl7MCwgMHgxYiwgMCwgMCwgcmVzcF9zdGFydF9zdG9wLCBOVUxMLAkJLyogU1RBUlQgU1RPUCBVTklUICovCisJICAgIHs2LCAgMHgxLCAwLCAweGYsIDB4ZjcsIDB4YzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezEsIDB4OWUsIDB4MTAsIEZfU0FfTE9XIHwgRl9EX0lOLCByZXNwX3JlYWRjYXAxNiwgc2FfaW5faWFyciwKKwkgICAgezE2LCAgMHgxMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MSwgMHhjN30gfSwJLyogUkVBRCBDQVBBQ0lUWSgxNikgKi8KKwl7MCwgMCwgMCwgRl9JTlZfT1AgfCBGRl9SRVNQT05ELCBOVUxMLCBOVUxMLCAvKiBTQSBPVVQgKi8KKwkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXsyLCAweGEzLCAweGEsIEZfU0FfTE9XIHwgRl9EX0lOLCByZXNwX3JlcG9ydF90Z3RwZ3MsIG1haW50X2luX2lhcnIsCisJICAgIHsxMiwgIDB4ZWEsIDAsIDAsIDAsIDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDB4YzcsIDAsIDAsIDAsCisJICAgICAwfSB9LAorCXswLCAwLCAwLCBGX0lOVl9PUCB8IEZGX1JFU1BPTkQsIE5VTEwsIE5VTEwsIC8qIE1BSU5UIE9VVCAqLworCSAgICB7MCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwgLyogVkVSSUZZICovCisJICAgIHswLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MSwgMHg3ZiwgMHg5LCBGX1NBX0hJR0ggfCBGX0RfSU4gfCBGRl9ESVJFQ1RfSU8sIHJlc3BfcmVhZF9kdDAsCisJICAgIHZsX2lhcnIsIHszMiwgIDB4YzcsIDAsIDAsIDAsIDAsIDB4MWYsIDB4MTgsIDB4MCwgMHg5LCAweGZlLCAwLAorCQkgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmfSB9LC8qIFZBUklBQkxFIExFTkdUSCwgUkVBRCgzMikgKi8KKwl7MSwgMHg1NiwgMCwgRl9EX09VVCwgTlVMTCwgcmVzZXJ2ZV9pYXJyLCAvKiBSRVNFUlZFKDEwKSAqLworCSAgICB7MTAsICAweGZmLCAweGZmLCAweGZmLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLAorCSAgICAgMH0gfSwKKwl7MSwgMHg1NywgMCwgRl9EX09VVCwgTlVMTCwgcmVsZWFzZV9pYXJyLCAvKiBSRUxFQVNFKDEwKSAqLworCSAgICB7MTAsICAweDEzLCAweGZmLCAweGZmLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLAorCSAgICAgMH0gfSwKKy8qIDIwICovCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwgLyogQUxMT1cgUkVNT1ZBTCAqLworCSAgICB7MCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezAsIDB4MSwgMCwgMCwgcmVzcF9zdGFydF9zdG9wLCBOVUxMLCAvKiBSRVdJTkQgPz8gKi8KKwkgICAgezYsICAweDEsIDAsIDAsIDAsIDB4YzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwgLyogQVRBX1BUICovCisJICAgIHswLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHgxZCwgRl9EX09VVCwgMCwgTlVMTCwgTlVMTCwJLyogU0VORCBESUFHTk9TVElDICovCisJICAgIHs2LCAgMHhmNywgMCwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHg0MiwgMCwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF91bm1hcCwgTlVMTCwgLyogVU5NQVAgKi8KKwkgICAgezEwLCAgMHgxLCAwLCAwLCAwLCAwLCAweDFmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDUzLCAwLCBGX0RfSU4gfCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX3hkd3JpdGVyZWFkXzEwLAorCSAgICBOVUxMLCB7MTAsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLCAweGZmLCAweGM3LAorCQkgICAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAwLCAwLCBGX0lOVl9PUCB8IEZGX1JFU1BPTkQsIE5VTEwsIE5VTEwsIC8qIFdSSVRFX0JVRkZFUiAqLworCSAgICB7MCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezEsIDB4NDEsIDAsIEZfRF9PVVRfTUFZQkUgfCBGRl9ESVJFQ1RfSU8sIHJlc3Bfd3JpdGVfc2FtZV8xMCwKKwkgICAgd3JpdGVfc2FtZV9pYXJyLCB7MTAsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLAorCQkJICAgICAgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHgzNSwgMCwgRl9ERUxBWV9PVkVSUiB8IEZGX0RJUkVDVF9JTywgTlVMTCwgTlVMTCwgLyogU1lOQ19DQUNIRSAqLworCSAgICB7MTAsICAweDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MWYsIDB4ZmYsIDB4ZmYsIDB4YzcsIDAsIDAsCisJICAgICAwLCAwLCAwLCAwfSB9LAorCXswLCAweDg5LCAwLCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX2NvbXBfd3JpdGUsIE5VTEwsCisJICAgIHsxNiwgIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDAsCisJICAgICAwLCAweGZmLCAweDFmLCAweGM3fSB9LAkJLyogQ09NUEFSRSBBTkQgV1JJVEUgKi8KKworLyogMzAgKi8KKwl7MHhmZiwgMCwgMCwgMCwgTlVMTCwgTlVMTCwJCS8qIHRlcm1pbmF0aW5nIGVsZW1lbnQgKi8KKwkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorfTsKKworc3RydWN0IHNkZWJ1Z19zY21kX2V4dHJhX3QgeworCWJvb2wgaW5qX3JlY292ZXJlZDsKKwlib29sIGlual90cmFuc3BvcnQ7CisJYm9vbCBpbmpfZGlmOworCWJvb2wgaW5qX2RpeDsKKwlib29sIGlual9zaG9ydDsKK307CisKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19hZGRfaG9zdCA9IERFRl9OVU1fSE9TVDsKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19hdG8gPSBERUZfQVRPOwogc3RhdGljIGludCBzY3NpX2RlYnVnX2RlbGF5ID0gREVGX0RFTEFZOwpAQCAtMjQ1LDYgKzU0NSw4IEBACiBzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX3JlbW92YWJsZSA9IERFRl9SRU1PVkFCTEU7CiBzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX2NsdXN0ZXJpbmc7CiBzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX2hvc3RfbG9jayA9IERFRl9IT1NUX0xPQ0s7CitzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX3N0cmljdCA9IERFRl9TVFJJQ1Q7CitzdGF0aWMgYm9vbCBzZGVidWdfYW55X2luamVjdGluZ19vcHQ7CiAKIHN0YXRpYyBhdG9taWNfdCBzZGVidWdfY21uZF9jb3VudDsKIHN0YXRpYyBhdG9taWNfdCBzZGVidWdfY29tcGxldGlvbnM7CkBAIC0yNzcsMTEgKzU3OSwxMCBAQAogCXVuc2lnbmVkIGludCB0YXJnZXQ7CiAJdTY0IGx1bjsKIAlzdHJ1Y3Qgc2RlYnVnX2hvc3RfaW5mbyAqc2RiZ19ob3N0OwotCXU2NCB3bHVuOwogCXVuc2lnbmVkIGxvbmcgdWFzX2JtWzFdOwogCWF0b21pY190IG51bV9pbl9xOwotCWNoYXIgc3RvcHBlZDsKLQljaGFyIHVzZWQ7CisJY2hhciBzdG9wcGVkOwkJLyogVE9ETzogc2hvdWxkIGJlIGF0b21pYyAqLworCWJvb2wgdXNlZDsKIH07CiAKIHN0cnVjdCBzZGVidWdfaG9zdF9pbmZvIHsKQEAgLTM5NCw2ICs2OTUsNTAgQEAKIAlzcGluX3VubG9jaygmc2RlYnVnX2hvc3RfbGlzdF9sb2NrKTsKIH0KIAorZW51bSBzZGViX2NtZF9kYXRhIHtTREVCX0lOX0RBVEEgPSAwLCBTREVCX0lOX0NEQiA9IDF9OworCisvKiBTZXQgaW5fYml0IHRvIC0xIHRvIGluZGljYXRlIG5vIGJpdCBwb3NpdGlvbiBvZiBpbnZhbGlkIGZpZWxkICovCitzdGF0aWMgdm9pZAorbWtfc2Vuc2VfaW52YWxpZF9mbGQoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBlbnVtIHNkZWJfY21kX2RhdGEgY19kLAorCQkgICAgIGludCBpbl9ieXRlLCBpbnQgaW5fYml0KQoreworCXVuc2lnbmVkIGNoYXIgKnNidWZmOworCXU4IHNrc1s0XTsKKwlpbnQgc2wsIGFzYzsKKworCXNidWZmID0gc2NwLT5zZW5zZV9idWZmZXI7CisJaWYgKCFzYnVmZikgeworCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NwLT5kZXZpY2UsCisJCQkgICAgIiVzOiBzZW5zZV9idWZmZXIgaXMgTlVMTFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWFzYyA9IGNfZCA/IElOVkFMSURfRklFTERfSU5fQ0RCIDogSU5WQUxJRF9GSUVMRF9JTl9QQVJBTV9MSVNUOworCW1lbXNldChzYnVmZiwgMCwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwlzY3NpX2J1aWxkX3NlbnNlX2J1ZmZlcihzY3NpX2RlYnVnX2RzZW5zZSwgc2J1ZmYsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQlhc2MsIDApOworCW1lbXNldChza3MsIDAsIHNpemVvZihza3MpKTsKKwlza3NbMF0gPSAweDgwOworCWlmIChjX2QpCisJCXNrc1swXSB8PSAweDQwOworCWlmIChpbl9iaXQgPj0gMCkgeworCQlza3NbMF0gfD0gMHg4OworCQlza3NbMF0gfD0gMHg3ICYgaW5fYml0OworCX0KKwlwdXRfdW5hbGlnbmVkX2JlMTYoaW5fYnl0ZSwgc2tzICsgMSk7CisJaWYgKHNjc2lfZGVidWdfZHNlbnNlKSB7CisJCXNsID0gc2J1ZmZbN10gKyA4OworCQlzYnVmZls3XSA9IHNsOworCQlzYnVmZltzbF0gPSAweDI7CisJCXNidWZmW3NsICsgMV0gPSAweDY7CisJCW1lbWNweShzYnVmZiArIHNsICsgNCwgc2tzLCAzKTsKKwl9IGVsc2UKKwkJbWVtY3B5KHNidWZmICsgMTUsIHNrcywgMyk7CisJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQorCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNjcC0+ZGV2aWNlLCAiJXM6ICBbc2Vuc2Vfa2V5LGFzYyxhc2NxIgorCQkJICAgICJdOiBbMHg1LDB4JXgsMHgwXSAlYyBieXRlPSVkLCBiaXQ9JWRcbiIsCisJCQkgICAgbXlfbmFtZSwgYXNjLCBjX2QgPyAnQycgOiAnRCcsIGluX2J5dGUsIGluX2JpdCk7Cit9CisKIHN0YXRpYyB2b2lkIG1rX3NlbnNlX2J1ZmZlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIGludCBrZXksIGludCBhc2MsIGludCBhc3EpCiB7CiAJdW5zaWduZWQgY2hhciAqc2J1ZmY7CkBAIC00MTQsNjMgKzc1OSwxMCBAQAogCQkJICAgIG15X25hbWUsIGtleSwgYXNjLCBhc3EpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKHVuc2lnbmVkIGNoYXIgKmNtZCwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKmxiYSwgdW5zaWduZWQgaW50ICpudW0sCi0JCQkJICAgdTMyICplaV9sYmEpCitzdGF0aWMgdm9pZAorbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc3RydWN0IHNjc2lfY21uZCAqc2NwKQogewotCSplaV9sYmEgPSAwOwotCi0Jc3dpdGNoICgqY21kKSB7Ci0JY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgotCQkqbGJhID0gKHU2NCljbWRbMTldIHwgKHU2NCljbWRbMThdIDw8IDggfAotCQkJKHU2NCljbWRbMTddIDw8IDE2IHwgKHU2NCljbWRbMTZdIDw8IDI0IHwKLQkJCSh1NjQpY21kWzE1XSA8PCAzMiB8ICh1NjQpY21kWzE0XSA8PCA0MCB8Ci0JCQkodTY0KWNtZFsxM10gPDwgNDggfCAodTY0KWNtZFsxMl0gPDwgNTY7Ci0KLQkJKmVpX2xiYSA9ICh1MzIpY21kWzIzXSB8ICh1MzIpY21kWzIyXSA8PCA4IHwKLQkJCSh1MzIpY21kWzIxXSA8PCAxNiB8ICh1MzIpY21kWzIwXSA8PCAyNDsKLQotCQkqbnVtID0gKHUzMiljbWRbMzFdIHwgKHUzMiljbWRbMzBdIDw8IDggfCAodTMyKWNtZFsyOV0gPDwgMTYgfAotCQkJKHUzMiljbWRbMjhdIDw8IDI0OwotCQlicmVhazsKLQotCWNhc2UgV1JJVEVfU0FNRV8xNjoKLQljYXNlIFdSSVRFXzE2OgotCWNhc2UgUkVBRF8xNjoKLQkJKmxiYSA9ICh1NjQpY21kWzldIHwgKHU2NCljbWRbOF0gPDwgOCB8Ci0JCQkodTY0KWNtZFs3XSA8PCAxNiB8ICh1NjQpY21kWzZdIDw8IDI0IHwKLQkJCSh1NjQpY21kWzVdIDw8IDMyIHwgKHU2NCljbWRbNF0gPDwgNDAgfAotCQkJKHU2NCljbWRbM10gPDwgNDggfCAodTY0KWNtZFsyXSA8PCA1NjsKLQotCQkqbnVtID0gKHUzMiljbWRbMTNdIHwgKHUzMiljbWRbMTJdIDw8IDggfCAodTMyKWNtZFsxMV0gPDwgMTYgfAotCQkJKHUzMiljbWRbMTBdIDw8IDI0OwotCQlicmVhazsKLQljYXNlIFdSSVRFXzEyOgotCWNhc2UgUkVBRF8xMjoKLQkJKmxiYSA9ICh1MzIpY21kWzVdIHwgKHUzMiljbWRbNF0gPDwgOCB8ICh1MzIpY21kWzNdIDw8IDE2IHwKLQkJCSh1MzIpY21kWzJdIDw8IDI0OwotCi0JCSpudW0gPSAodTMyKWNtZFs5XSB8ICh1MzIpY21kWzhdIDw8IDggfCAodTMyKWNtZFs3XSA8PCAxNiB8Ci0JCQkodTMyKWNtZFs2XSA8PCAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBXUklURV9TQU1FOgotCWNhc2UgV1JJVEVfMTA6Ci0JY2FzZSBSRUFEXzEwOgotCWNhc2UgWERXUklURVJFQURfMTA6Ci0JCSpsYmEgPSAodTMyKWNtZFs1XSB8ICh1MzIpY21kWzRdIDw8IDggfAkodTMyKWNtZFszXSA8PCAxNiB8Ci0JCQkodTMyKWNtZFsyXSA8PCAyNDsKLQotCQkqbnVtID0gKHUzMiljbWRbOF0gfCAodTMyKWNtZFs3XSA8PCA4OwotCQlicmVhazsKLQljYXNlIFdSSVRFXzY6Ci0JY2FzZSBSRUFEXzY6Ci0JCSpsYmEgPSAodTMyKWNtZFszXSB8ICh1MzIpY21kWzJdIDw8IDggfAotCQkJKHUzMikoY21kWzFdICYgMHgxZikgPDwgMTY7Ci0JCSpudW0gPSAoMCA9PSBjbWRbNF0pID8gMjU2IDogY21kWzRdOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX09QQ09ERSwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKQEAgLTUyMCw2ICs4MTIsMTEgQEAKIAkJCWlmIChkZWJ1ZykKIAkJCQljcCA9ICJtb2RlIHBhcmFtZXRlcnMgY2hhbmdlZCI7CiAJCQlicmVhazsKKwkJY2FzZSBTREVCVUdfVUFfQ0FQQUNJVFlfQ0hBTkdFRDoKKwkJCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgVU5JVF9BVFRFTlRJT04sCisJCQkJCVVBX0NIQU5HRURfQVNDLCBDQVBBQ0lUWV9DSEFOR0VEX0FTQ1EpOworCQkJaWYgKGRlYnVnKQorCQkJCWNwID0gImNhcGFjaXR5IGRhdGEgY2hhbmdlZCI7CiAJCWRlZmF1bHQ6CiAJCQlwcl93YXJuKCIlczogdW5leHBlY3RlZCB1bml0IGF0dGVudGlvbiBjb2RlPSVkXG4iLAogCQkJCV9fZnVuY19fLCBrKTsKQEAgLTkyNCwxOSArMTIyMSwyMCBAQAogI2RlZmluZSBTREVCVUdfTE9OR19JTlFfU1ogOTYKICNkZWZpbmUgU0RFQlVHX01BWF9JTlFfQVJSX1NaIDU4NAogCi1zdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIGludCB0YXJnZXQsCi0JCQlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQogewogCXVuc2lnbmVkIGNoYXIgcHFfcGR0OwogCXVuc2lnbmVkIGNoYXIgKiBhcnI7CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCWludCBhbGxvY19sZW4sIG4sIHJldDsKKwlib29sIGhhdmVfd2x1bjsKIAogCWFsbG9jX2xlbiA9IChjbWRbM10gPDwgOCkgKyBjbWRbNF07CiAJYXJyID0ga3phbGxvYyhTREVCVUdfTUFYX0lOUV9BUlJfU1osIEdGUF9BVE9NSUMpOwogCWlmICghIGFycikKIAkJcmV0dXJuIERJRF9SRVFVRVVFIDw8IDE2OwotCWlmIChkZXZpcC0+d2x1bikKKwloYXZlX3dsdW4gPSAoc2NwLT5kZXZpY2UtPmx1biA9PSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMpOworCWlmIChoYXZlX3dsdW4pCiAJCXBxX3BkdCA9IDB4MWU7CS8qIHByZXNlbnQsIHdsdW4gKi8KIAllbHNlIGlmIChzY3NpX2RlYnVnX25vX2x1bl8wICYmICgwID09IGRldmlwLT5sdW4pKQogCQlwcV9wZHQgPSAweDdmOwkvKiBub3QgcHJlc2VudCwgbm8gZGV2aWNlIHR5cGUgKi8KQEAgLTk0NCw4ICsxMjQyLDcgQEAKIAkJcHFfcGR0ID0gKHNjc2lfZGVidWdfcHR5cGUgJiAweDFmKTsKIAlhcnJbMF0gPSBwcV9wZHQ7CiAJaWYgKDB4MiAmIGNtZFsxXSkgeyAgLyogQ01ERFQgYml0IHNldCAqLwotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLAotCQkJICAgICAgIAkwKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgMSwgMSk7CiAJCWtmcmVlKGFycik7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0gZWxzZSBpZiAoMHgxICYgY21kWzFdKSB7ICAvKiBFVlBEIGJpdCBzZXQgKi8KQEAgLTk1Nyw3ICsxMjU0LDcgQEAKIAkJICAgIChkZXZpcC0+Y2hhbm5lbCAmIDB4N2YpOwogCQlpZiAoMCA9PSBzY3NpX2RlYnVnX3ZwZF91c2VfaG9zdG5vKQogCQkJaG9zdF9ubyA9IDA7Ci0JCWx1X2lkX251bSA9IGRldmlwLT53bHVuID8gLTEgOiAoKChob3N0X25vICsgMSkgKiAyMDAwKSArCisJCWx1X2lkX251bSA9IGhhdmVfd2x1biA/IC0xIDogKCgoaG9zdF9ubyArIDEpICogMjAwMCkgKwogCQkJICAgIChkZXZpcC0+dGFyZ2V0ICogMTAwMCkgKyBkZXZpcC0+bHVuKTsKIAkJdGFyZ2V0X2Rldl9pZCA9ICgoaG9zdF9ubyArIDEpICogMjAwMCkgKwogCQkJCSAoZGV2aXAtPnRhcmdldCAqIDEwMDApIC0gMzsKQEAgLTEwMjksOSArMTMyNiw3IEBACiAJCQlhcnJbMV0gPSBjbWRbMl07ICAgICAgICAvKnNhbml0eSAqLwogCQkJYXJyWzNdID0gaW5xdWlyeV9ldnBkX2IyKCZhcnJbNF0pOwogCQl9IGVsc2UgewotCQkJLyogSWxsZWdhbCByZXF1ZXN0LCBpbnZhbGlkIGZpZWxkIGluIGNkYiAqLwotCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAyLCAtMSk7CiAJCQlrZnJlZShhcnIpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KQEAgLTEwNzcsMTggKzEzNzIsMjAgQEAKIAl1bnNpZ25lZCBjaGFyICogc2J1ZmY7CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07Ci0JaW50IHdhbnRfZHNlbnNlOworCWJvb2wgZHNlbnNlLCB3YW50X2RzZW5zZTsKIAlpbnQgbGVuID0gMTg7CiAKIAltZW1zZXQoYXJyLCAwLCBzaXplb2YoYXJyKSk7Ci0Jd2FudF9kc2Vuc2UgPSAhIShjbWRbMV0gJiAxKSB8fCBzY3NpX2RlYnVnX2RzZW5zZTsKKwlkc2Vuc2UgPSAhIShjbWRbMV0gJiAxKTsKKwl3YW50X2RzZW5zZSA9IGRzZW5zZSB8fCBzY3NpX2RlYnVnX2RzZW5zZTsKIAlzYnVmZiA9IHNjcC0+c2Vuc2VfYnVmZmVyOwogCWlmICgoaWVjX21fcGdbMl0gJiAweDQpICYmICg2ID09IChpZWNfbV9wZ1szXSAmIDB4ZikpKSB7Ci0JCWlmICh3YW50X2RzZW5zZSkgeworCQlpZiAoZHNlbnNlKSB7CiAJCQlhcnJbMF0gPSAweDcyOwogCQkJYXJyWzFdID0gMHgwOwkJLyogTk9fU0VOU0UgaW4gc2Vuc2Vfa2V5ICovCiAJCQlhcnJbMl0gPSBUSFJFU0hPTERfRVhDRUVERUQ7CiAJCQlhcnJbM10gPSAweGZmOwkJLyogVEVTVCBzZXQgYW5kIE1SSUU9PTYgKi8KKwkJCWxlbiA9IDg7CiAJCX0gZWxzZSB7CiAJCQlhcnJbMF0gPSAweDcwOwogCQkJYXJyWzJdID0gMHgwOwkJLyogTk9fU0VOU0UgaW4gc2Vuc2Vfa2V5ICovCkBAIC0xMDk4LDE1ICsxMzk1LDM0IEBACiAJCX0KIAl9IGVsc2UgewogCQltZW1jcHkoYXJyLCBzYnVmZiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQkJaWYgKChjbWRbMV0gJiAxKSAmJiAoISBzY3NpX2RlYnVnX2RzZW5zZSkpIHsKLQkJCS8qIERFU0MgYml0IHNldCBhbmQgc2Vuc2VfYnVmZiBpbiBmaXhlZCBmb3JtYXQgKi8KLQkJCW1lbXNldChhcnIsIDAsIHNpemVvZihhcnIpKTsKKwkJaWYgKGFyclswXSA+PSAweDcwICYmIGRzZW5zZSA9PSBzY3NpX2RlYnVnX2RzZW5zZSkKKwkJCTsJLyogaGF2ZSBzZW5zZSBhbmQgZm9ybWF0cyBtYXRjaCAqLworCQllbHNlIGlmIChhcnJbMF0gPD0gMHg3MCkgeworCQkJaWYgKGRzZW5zZSkgeworCQkJCW1lbXNldChhcnIsIDAsIDgpOworCQkJCWFyclswXSA9IDB4NzI7CisJCQkJbGVuID0gODsKKwkJCX0gZWxzZSB7CisJCQkJbWVtc2V0KGFyciwgMCwgMTgpOworCQkJCWFyclswXSA9IDB4NzA7CisJCQkJYXJyWzddID0gMHhhOworCQkJfQorCQl9IGVsc2UgaWYgKGRzZW5zZSkgeworCQkJbWVtc2V0KGFyciwgMCwgOCk7CiAJCQlhcnJbMF0gPSAweDcyOwogCQkJYXJyWzFdID0gc2J1ZmZbMl07ICAgICAvKiBzZW5zZSBrZXkgKi8KIAkJCWFyclsyXSA9IHNidWZmWzEyXTsgICAgLyogYXNjICovCiAJCQlhcnJbM10gPSBzYnVmZlsxM107ICAgIC8qIGFzY3EgKi8KIAkJCWxlbiA9IDg7CisJCX0gZWxzZSB7CisJCQltZW1zZXQoYXJyLCAwLCAxOCk7CisJCQlhcnJbMF0gPSAweDcwOworCQkJYXJyWzJdID0gc2J1ZmZbMV07CisJCQlhcnJbN10gPSAweGE7CisJCQlhcnJbMTJdID0gc2J1ZmZbMV07CisJCQlhcnJbMTNdID0gc2J1ZmZbM107CiAJCX0KKwogCX0KIAlta19zZW5zZV9idWZmZXIoc2NwLCAwLCBOT19BRERJVElPTkFMX1NFTlNFLCAwKTsKIAlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsIGxlbik7CkBAIC0xMTE2LDE1ICsxNDMyLDExIEBACiAJCQkgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCiB7CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwotCWludCBwb3dlcl9jb25kLCBlcnJzdHMsIHN0YXJ0OworCWludCBwb3dlcl9jb25kLCBzdGFydDsKIAotCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhzY3AsIFVBU19PTkxZLCBkZXZpcCk7Ci0JaWYgKGVycnN0cykKLQkJcmV0dXJuIGVycnN0czsKIAlwb3dlcl9jb25kID0gKGNtZFs0XSAmIDB4ZjApID4+IDQ7CiAJaWYgKHBvd2VyX2NvbmQpIHsKLQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwKLQkJCSAgICAgICAJMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDQsIDcpOwogCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAl9CiAJc3RhcnQgPSBjbWRbNF0gJiAxOwpAQCAtMTE0OCwxMSArMTQ2MCw3IEBACiB7CiAJdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX1JFQURDQVBfQVJSX1NaXTsKIAl1bnNpZ25lZCBpbnQgY2FwYWM7Ci0JaW50IGVycnN0czsKIAotCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhzY3AsIFVBU19PTkxZLCBkZXZpcCk7Ci0JaWYgKGVycnN0cykKLQkJcmV0dXJuIGVycnN0czsKIAkvKiBmb2xsb3dpbmcganVzdCBpbiBjYXNlIHZpcnR1YWxfZ2IgY2hhbmdlZCAqLwogCXNkZWJ1Z19jYXBhY2l0eSA9IGdldF9zZGVidWdfY2FwYWNpdHkoKTsKIAltZW1zZXQoYXJyLCAwLCBTREVCVUdfUkVBRENBUF9BUlJfU1opOwpAQCAtMTE4MCwxMSArMTQ4OCw4IEBACiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NERUJVR19SRUFEQ0FQMTZfQVJSX1NaXTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgY2FwYWM7Ci0JaW50IGVycnN0cywgaywgYWxsb2NfbGVuOworCWludCBrLCBhbGxvY19sZW47CiAKLQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCBVQVNfT05MWSwgZGV2aXApOwotCWlmIChlcnJzdHMpCi0JCXJldHVybiBlcnJzdHM7CiAJYWxsb2NfbGVuID0gKChjbWRbMTBdIDw8IDI0KSArIChjbWRbMTFdIDw8IDE2KSArIChjbWRbMTJdIDw8IDgpCiAJCSAgICAgKyBjbWRbMTNdKTsKIAkvKiBmb2xsb3dpbmcganVzdCBpbiBjYXNlIHZpcnR1YWxfZ2IgY2hhbmdlZCAqLwpAQCAtMTMwMCw2ICsxNjA1LDE4NCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQKK3Jlc3BfcnN1cF9vcGNvZGVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCit7CisJYm9vbCByY3RkOworCXU4IHJlcG9ydGluZ19vcHRzLCByZXFfb3Bjb2RlLCBzZGViX2ksIHN1cHA7CisJdTE2IHJlcV9zYSwgdTsKKwl1MzIgYWxsb2NfbGVuLCBhX2xlbjsKKwlpbnQgaywgb2Zmc2V0LCBsZW4sIGVycnN0cywgY291bnQsIGJ1bXAsIG5hOworCWNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190ICpvaXA7CisJY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgKnJfb2lwOworCXU4ICphcnI7CisJdTggKmNtZCA9IHNjcC0+Y21uZDsKKworCXJjdGQgPSAhIShjbWRbMl0gJiAweDgwKTsKKwlyZXBvcnRpbmdfb3B0cyA9IGNtZFsyXSAmIDB4NzsKKwlyZXFfb3Bjb2RlID0gY21kWzNdOworCXJlcV9zYSA9IGdldF91bmFsaWduZWRfYmUxNihjbWQgKyA0KTsKKwlhbGxvY19sZW4gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgNik7CisJaWYgKGFsbG9jX2xlbiA8IDQgJiYgYWxsb2NfbGVuID4gMHhmZmZmKSB7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDYsIC0xKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCWlmIChhbGxvY19sZW4gPiA4MTkyKQorCQlhX2xlbiA9IDgxOTI7CisJZWxzZQorCQlhX2xlbiA9IGFsbG9jX2xlbjsKKwlhcnIgPSBremFsbG9jKChhX2xlbiA8IDI1NikgPyAzMjAgOiBhX2xlbiArIDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBhcnIpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlNVRkZfUkVTX0FTQywKKwkJCQlJTlNVRkZfUkVTX0FTQ1EpOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJc3dpdGNoIChyZXBvcnRpbmdfb3B0cykgeworCWNhc2UgMDoJLyogYWxsIGNvbW1hbmRzICovCisJCS8qIGNvdW50IG51bWJlciBvZiBjb21tYW5kcyAqLworCQlmb3IgKGNvdW50ID0gMCwgb2lwID0gb3Bjb2RlX2luZm9fYXJyOworCQkgICAgIG9pcC0+bnVtX2F0dGFjaGVkICE9IDB4ZmY7ICsrb2lwKSB7CisJCQlpZiAoRl9JTlZfT1AgJiBvaXAtPmZsYWdzKQorCQkJCWNvbnRpbnVlOworCQkJY291bnQgKz0gKG9pcC0+bnVtX2F0dGFjaGVkICsgMSk7CisJCX0KKwkJYnVtcCA9IHJjdGQgPyAyMCA6IDg7CisJCXB1dF91bmFsaWduZWRfYmUzMihjb3VudCAqIGJ1bXAsIGFycik7CisJCWZvciAob2Zmc2V0ID0gNCwgb2lwID0gb3Bjb2RlX2luZm9fYXJyOworCQkgICAgIG9pcC0+bnVtX2F0dGFjaGVkICE9IDB4ZmYgJiYgb2Zmc2V0IDwgYV9sZW47ICsrb2lwKSB7CisJCQlpZiAoRl9JTlZfT1AgJiBvaXAtPmZsYWdzKQorCQkJCWNvbnRpbnVlOworCQkJbmEgPSBvaXAtPm51bV9hdHRhY2hlZDsKKwkJCWFycltvZmZzZXRdID0gb2lwLT5vcGNvZGU7CisJCQlwdXRfdW5hbGlnbmVkX2JlMTYob2lwLT5zYSwgYXJyICsgb2Zmc2V0ICsgMik7CisJCQlpZiAocmN0ZCkKKwkJCQlhcnJbb2Zmc2V0ICsgNV0gfD0gMHgyOworCQkJaWYgKEZGX1NBICYgb2lwLT5mbGFncykKKwkJCQlhcnJbb2Zmc2V0ICsgNV0gfD0gMHgxOworCQkJcHV0X3VuYWxpZ25lZF9iZTE2KG9pcC0+bGVuX21hc2tbMF0sIGFyciArIG9mZnNldCArIDYpOworCQkJaWYgKHJjdGQpCisJCQkJcHV0X3VuYWxpZ25lZF9iZTE2KDB4YSwgYXJyICsgb2Zmc2V0ICsgOCk7CisJCQlyX29pcCA9IG9pcDsKKwkJCWZvciAoayA9IDAsIG9pcCA9IG9pcC0+YXJycDsgayA8IG5hOyArK2ssICsrb2lwKSB7CisJCQkJaWYgKEZfSU5WX09QICYgb2lwLT5mbGFncykKKwkJCQkJY29udGludWU7CisJCQkJb2Zmc2V0ICs9IGJ1bXA7CisJCQkJYXJyW29mZnNldF0gPSBvaXAtPm9wY29kZTsKKwkJCQlwdXRfdW5hbGlnbmVkX2JlMTYob2lwLT5zYSwgYXJyICsgb2Zmc2V0ICsgMik7CisJCQkJaWYgKHJjdGQpCisJCQkJCWFycltvZmZzZXQgKyA1XSB8PSAweDI7CisJCQkJaWYgKEZGX1NBICYgb2lwLT5mbGFncykKKwkJCQkJYXJyW29mZnNldCArIDVdIHw9IDB4MTsKKwkJCQlwdXRfdW5hbGlnbmVkX2JlMTYob2lwLT5sZW5fbWFza1swXSwKKwkJCQkJCSAgIGFyciArIG9mZnNldCArIDYpOworCQkJCWlmIChyY3RkKQorCQkJCQlwdXRfdW5hbGlnbmVkX2JlMTYoMHhhLAorCQkJCQkJCSAgIGFyciArIG9mZnNldCArIDgpOworCQkJfQorCQkJb2lwID0gcl9vaXA7CisJCQlvZmZzZXQgKz0gYnVtcDsKKwkJfQorCQlicmVhazsKKwljYXNlIDE6CS8qIG9uZSBjb21tYW5kOiBvcGNvZGUgb25seSAqLworCWNhc2UgMjoJLyogb25lIGNvbW1hbmQ6IG9wY29kZSBwbHVzIHNlcnZpY2UgYWN0aW9uICovCisJY2FzZSAzOgkvKiBvbmUgY29tbWFuZDogaWYgc2E9PTAgdGhlbiBvcGNvZGUgb25seSBlbHNlIG9wY29kZStzYSAqLworCQlzZGViX2kgPSBvcGNvZGVfaW5kX2FycltyZXFfb3Bjb2RlXTsKKwkJb2lwID0gJm9wY29kZV9pbmZvX2FycltzZGViX2ldOworCQlpZiAoRl9JTlZfT1AgJiBvaXAtPmZsYWdzKSB7CisJCQlzdXBwID0gMTsKKwkJCW9mZnNldCA9IDQ7CisJCX0gZWxzZSB7CisJCQlpZiAoMSA9PSByZXBvcnRpbmdfb3B0cykgeworCQkJCWlmIChGRl9TQSAmIG9pcC0+ZmxhZ3MpIHsKKwkJCQkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwKKwkJCQkJCQkgICAgIDIsIDIpOworCQkJCQlrZnJlZShhcnIpOworCQkJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJCQl9CisJCQkJcmVxX3NhID0gMDsKKwkJCX0gZWxzZSBpZiAoMiA9PSByZXBvcnRpbmdfb3B0cyAmJgorCQkJCSAgIDAgPT0gKEZGX1NBICYgb2lwLT5mbGFncykpIHsKKwkJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA0LCAtMSk7CisJCQkJa2ZyZWUoYXJyKTsJLyogcG9pbnQgYXQgcmVxdWVzdGVkIHNhICovCisJCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCQl9CisJCQlpZiAoMCA9PSAoRkZfU0EgJiBvaXAtPmZsYWdzKSAmJgorCQkJICAgIHJlcV9vcGNvZGUgPT0gb2lwLT5vcGNvZGUpCisJCQkJc3VwcCA9IDM7CisJCQllbHNlIGlmICgwID09IChGRl9TQSAmIG9pcC0+ZmxhZ3MpKSB7CisJCQkJbmEgPSBvaXAtPm51bV9hdHRhY2hlZDsKKwkJCQlmb3IgKGsgPSAwLCBvaXAgPSBvaXAtPmFycnA7IGsgPCBuYTsKKwkJCQkgICAgICsraywgKytvaXApIHsKKwkJCQkJaWYgKHJlcV9vcGNvZGUgPT0gb2lwLT5vcGNvZGUpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc3VwcCA9IChrID49IG5hKSA/IDEgOiAzOworCQkJfSBlbHNlIGlmIChyZXFfc2EgIT0gb2lwLT5zYSkgeworCQkJCW5hID0gb2lwLT5udW1fYXR0YWNoZWQ7CisJCQkJZm9yIChrID0gMCwgb2lwID0gb2lwLT5hcnJwOyBrIDwgbmE7CisJCQkJICAgICArK2ssICsrb2lwKSB7CisJCQkJCWlmIChyZXFfc2EgPT0gb2lwLT5zYSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzdXBwID0gKGsgPj0gbmEpID8gMSA6IDM7CisJCQl9IGVsc2UKKwkJCQlzdXBwID0gMzsKKwkJCWlmICgzID09IHN1cHApIHsKKwkJCQl1ID0gb2lwLT5sZW5fbWFza1swXTsKKwkJCQlwdXRfdW5hbGlnbmVkX2JlMTYodSwgYXJyICsgMik7CisJCQkJYXJyWzRdID0gb2lwLT5vcGNvZGU7CisJCQkJZm9yIChrID0gMTsgayA8IHU7ICsraykKKwkJCQkJYXJyWzQgKyBrXSA9IChrIDwgMTYpID8KKwkJCQkJCSBvaXAtPmxlbl9tYXNrW2tdIDogMHhmZjsKKwkJCQlvZmZzZXQgPSA0ICsgdTsKKwkJCX0gZWxzZQorCQkJCW9mZnNldCA9IDQ7CisJCX0KKwkJYXJyWzFdID0gKHJjdGQgPyAweDgwIDogMCkgfCBzdXBwOworCQlpZiAocmN0ZCkgeworCQkJcHV0X3VuYWxpZ25lZF9iZTE2KDB4YSwgYXJyICsgb2Zmc2V0KTsKKwkJCW9mZnNldCArPSAxMjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAyLCAyKTsKKwkJa2ZyZWUoYXJyKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCW9mZnNldCA9IChvZmZzZXQgPCBhX2xlbikgPyBvZmZzZXQgOiBhX2xlbjsKKwlsZW4gPSAob2Zmc2V0IDwgYWxsb2NfbGVuKSA/IG9mZnNldCA6IGFsbG9jX2xlbjsKKwllcnJzdHMgPSBmaWxsX2Zyb21fZGV2X2J1ZmZlcihzY3AsIGFyciwgbGVuKTsKKwlrZnJlZShhcnIpOworCXJldHVybiBlcnJzdHM7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc3BfcnN1cF90bWZzKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCit7CisJYm9vbCByZXBkOworCXUzMiBhbGxvY19sZW4sIGxlbjsKKwl1OCBhcnJbMTZdOworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisKKwltZW1zZXQoYXJyLCAwLCBzaXplb2YoYXJyKSk7CisJcmVwZCA9ICEhKGNtZFsyXSAmIDB4ODApOworCWFsbG9jX2xlbiA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyA2KTsKKwlpZiAoYWxsb2NfbGVuIDwgNCkgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA2LCAtMSk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlhcnJbMF0gPSAweGM4OwkJLyogQVRTIHwgQVRTUyB8IExVUlMgKi8KKwlhcnJbMV0gPSAweDE7CQkvKiBJVE5SUyAqLworCWlmIChyZXBkKSB7CisJCWFyclszXSA9IDB4YzsKKwkJbGVuID0gMTY7CisJfSBlbHNlCisJCWxlbiA9IDQ7CisKKwlsZW4gPSAobGVuIDwgYWxsb2NfbGVuKSA/IGxlbiA6IGFsbG9jX2xlbjsKKwlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsIGxlbik7Cit9CisKIC8qIDw8Rm9sbG93aW5nIG1vZGUgcGFnZSBpbmZvIGNvcGllZCBmcm9tIFNUMzE4NDUxTFc+PiAqLwogCiBzdGF0aWMgaW50IHJlc3BfZXJyX3JlY292X3BnKHVuc2lnbmVkIGNoYXIgKiBwLCBpbnQgcGNvbnRyb2wsIGludCB0YXJnZXQpCkBAIC0xNDU5LDIwICsxOTQyLDE4IEBACiAKICNkZWZpbmUgU0RFQlVHX01BWF9NU0VOU0VfU1ogMjU2CiAKLXN0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsIGludCB0YXJnZXQsCi0JCQkgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50CityZXNwX21vZGVfc2Vuc2Uoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKIAl1bnNpZ25lZCBjaGFyIGRiZCwgbGxiYWE7CiAJaW50IHBjb250cm9sLCBwY29kZSwgc3VicGNvZGUsIGJkX2xlbjsKIAl1bnNpZ25lZCBjaGFyIGRldl9zcGVjOwotCWludCBrLCBhbGxvY19sZW4sIG1zZW5zZV82LCBvZmZzZXQsIGxlbiwgZXJyc3RzLCB0YXJnZXRfZGV2X2lkOworCWludCBrLCBhbGxvY19sZW4sIG1zZW5zZV82LCBvZmZzZXQsIGxlbiwgdGFyZ2V0X2Rldl9pZDsKKwlpbnQgdGFyZ2V0ID0gc2NwLT5kZXZpY2UtPmlkOwogCXVuc2lnbmVkIGNoYXIgKiBhcDsKIAl1bnNpZ25lZCBjaGFyIGFycltTREVCVUdfTUFYX01TRU5TRV9TWl07CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCi0JZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKHNjcCwgVUFTX09OTFksIGRldmlwKTsKLQlpZiAoZXJyc3RzKQotCQlyZXR1cm4gZXJyc3RzOwogCWRiZCA9ICEhKGNtZFsxXSAmIDB4OCk7CiAJcGNvbnRyb2wgPSAoY21kWzJdICYgMHhjMCkgPj4gNjsKIAlwY29kZSA9IGNtZFsyXSAmIDB4M2Y7CkBAIC0xNTQyLDggKzIwMjMsNyBAQAogCiAJaWYgKChzdWJwY29kZSA+IDB4MCkgJiYgKHN1YnBjb2RlIDwgMHhmZikgJiYgKDB4MTkgIT0gcGNvZGUpKSB7CiAJCS8qIFRPRE86IENvbnRyb2wgRXh0ZW5zaW9uIHBhZ2UgKi8KLQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwKLQkJCSAgICAgICAJMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDMsIC0xKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCXN3aXRjaCAocGNvZGUpIHsKQEAgLTE1NjksOCArMjA0OSw3IEBACiAJCWJyZWFrOwogCWNhc2UgMHgxOToJLyogaWYgc3BjPT0xIHRoZW4gc2FzIHBoeSwgY29udHJvbCtkaXNjb3ZlciAqLwogCQlpZiAoKHN1YnBjb2RlID4gMHgyKSAmJiAoc3VicGNvZGUgPCAweGZmKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAzLCAtMSk7CiAJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAkgICAgICAgIH0KIAkJbGVuID0gMDsKQEAgLTE2MDIsMTUgKzIwODEsMTMgQEAKIAkJCX0KIAkJCWxlbiArPSByZXNwX2llY19tX3BnKGFwICsgbGVuLCBwY29udHJvbCwgdGFyZ2V0KTsKIAkJfSBlbHNlIHsKLQkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgMywgLTEpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAgICAgICAgICAgICAgICAgfQogCQlvZmZzZXQgKz0gbGVuOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLAotCQkJICAgICAgIAkwKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgMiwgNSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAlpZiAobXNlbnNlXzYpCkBAIC0xNjI0LDI0ICsyMTAxLDIxIEBACiAKICNkZWZpbmUgU0RFQlVHX01BWF9NU0VMRUNUX1NaIDUxMgogCi1zdGF0aWMgaW50IHJlc3BfbW9kZV9zZWxlY3Qoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwgaW50IG1zZWxlY3Q2LAotCQkJICAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCkKK3N0YXRpYyBpbnQKK3Jlc3BfbW9kZV9zZWxlY3Qoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKIAlpbnQgcGYsIHNwLCBwcywgbWRfbGVuLCBiZF9sZW4sIG9mZiwgc3BmLCBwZ19sZW47Ci0JaW50IHBhcmFtX2xlbiwgcmVzLCBlcnJzdHMsIG1wYWdlOworCWludCBwYXJhbV9sZW4sIHJlcywgbXBhZ2U7CiAJdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX01BWF9NU0VMRUNUX1NaXTsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSBzY3AtPmNtbmQ7CisJaW50IG1zZWxlY3Q2ID0gKE1PREVfU0VMRUNUID09IGNtZFswXSk7CiAKLQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCBVQVNfT05MWSwgZGV2aXApOwotCWlmIChlcnJzdHMpCi0JCXJldHVybiBlcnJzdHM7CiAJbWVtc2V0KGFyciwgMCwgc2l6ZW9mKGFycikpOwogCXBmID0gY21kWzFdICYgMHgxMDsKIAlzcCA9IGNtZFsxXSAmIDB4MTsKIAlwYXJhbV9sZW4gPSBtc2VsZWN0NiA/IGNtZFs0XSA6ICgoY21kWzddIDw8IDgpICsgY21kWzhdKTsKIAlpZiAoKDAgPT0gcGYpIHx8IHNwIHx8IChwYXJhbV9sZW4gPiBTREVCVUdfTUFYX01TRUxFQ1RfU1opKSB7Ci0JCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIG1zZWxlY3Q2ID8gNCA6IDcsIC0xKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogICAgICAgICByZXMgPSBmZXRjaF90b19kZXZfYnVmZmVyKHNjcCwgYXJyLCBwYXJhbV9sZW4pOwpAQCAtMTY1NSwxNiArMjEyOSwxNCBAQAogCW1kX2xlbiA9IG1zZWxlY3Q2ID8gKGFyclswXSArIDEpIDogKChhcnJbMF0gPDwgOCkgKyBhcnJbMV0gKyAyKTsKIAliZF9sZW4gPSBtc2VsZWN0NiA/IGFyclszXSA6ICgoYXJyWzZdIDw8IDgpICsgYXJyWzddKTsKIAlpZiAobWRfbGVuID4gMikgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJSU5WQUxJRF9GSUVMRF9JTl9QQVJBTV9MSVNULCAwKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0RBVEEsIDAsIC0xKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCW9mZiA9IGJkX2xlbiArIChtc2VsZWN0NiA/IDQgOiA4KTsKIAltcGFnZSA9IGFycltvZmZdICYgMHgzZjsKIAlwcyA9ICEhKGFycltvZmZdICYgMHg4MCk7CiAJaWYgKHBzKSB7Ci0JCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQlJTlZBTElEX0ZJRUxEX0lOX1BBUkFNX0xJU1QsIDApOworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fREFUQSwgb2ZmLCA3KTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCXNwZiA9ICEhKGFycltvZmZdICYgMHg0MCk7CkBAIC0xNzAxLDggKzIxNzMsNyBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQlJTlZBTElEX0ZJRUxEX0lOX1BBUkFNX0xJU1QsIDApOworCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9EQVRBLCBvZmYsIDUpOwogCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0Owogc2V0X21vZGVfY2hhbmdlZF91YToKIAlzZXRfYml0KFNERUJVR19VQV9NT0RFX0NIQU5HRUQsIGRldmlwLT51YXNfYm0pOwpAQCAtMTczNywxOSArMjIwOCwxNSBAQAogc3RhdGljIGludCByZXNwX2xvZ19zZW5zZShzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCiB7Ci0JaW50IHBwYywgc3AsIHBjb250cm9sLCBwY29kZSwgc3VicGNvZGUsIGFsbG9jX2xlbiwgZXJyc3RzLCBsZW4sIG47CisJaW50IHBwYywgc3AsIHBjb250cm9sLCBwY29kZSwgc3VicGNvZGUsIGFsbG9jX2xlbiwgbGVuLCBuOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NERUJVR19NQVhfTFNFTlNFX1NaXTsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSBzY3AtPmNtbmQ7CiAKLQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCBVQVNfT05MWSwgZGV2aXApOwotCWlmIChlcnJzdHMpCi0JCXJldHVybiBlcnJzdHM7CiAJbWVtc2V0KGFyciwgMCwgc2l6ZW9mKGFycikpOwogCXBwYyA9IGNtZFsxXSAmIDB4MjsKIAlzcCA9IGNtZFsxXSAmIDB4MTsKIAlpZiAocHBjIHx8IHNwKSB7Ci0JCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDEsIHBwYyA/IDEgOiAwKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCXBjb250cm9sID0gKGNtZFsyXSAmIDB4YzApID4+IDY7CkBAIC0xNzczLDggKzIyNDAsNyBAQAogCQkJYXJyWzNdID0gcmVzcF9pZV9sX3BnKGFyciArIDQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKKwkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDIsIDUpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KIAl9IGVsc2UgaWYgKDB4ZmYgPT0gc3VicGNvZGUpIHsKQEAgLTE4MDYsMTMgKzIyNzIsMTEgQEAKIAkJCWFyclszXSA9IG4gLSA0OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKKwkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDIsIDUpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KIAl9IGVsc2UgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAzLCAtMSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAlsZW4gPSBtaW4oKChhcnJbMl0gPDwgOCkgKyBhcnJbM10pICsgNCwgYWxsb2NfbGVuKTsKQEAgLTE4MjQsMTEgKzIyODgsMTIgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLCB1bnNpZ25lZCBpbnQgbnVtKQogewogCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKLQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBBRERSX09VVF9PRl9SQU5HRSwgMCk7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgTEJBX09VVF9PRl9SQU5HRSwgMCk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAkvKiB0cmFuc2ZlciBsZW5ndGggZXhjZXNzaXZlICh0aWUgaW4gdG8gYmxvY2sgbGltaXRzIFZQRCBwYWdlKSAqLwogCWlmIChudW0gPiBzZGVidWdfc3RvcmVfc2VjdG9ycykgeworCQkvKiBuZWVkcyB3b3JrIHRvIGZpbmQgd2hpY2ggY2RiIGJ5dGUgJ251bScgY29tZXMgZnJvbSAqLwogCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQpAQCAtMTgzNiwxNyArMjMwMSwxNyBAQAogfQogCiAvKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyBjb3BpZWQgb3IgLTEgaWYgZXJyb3IuICovCi1zdGF0aWMgaW50IGRvX2RldmljZV9hY2Nlc3Moc3RydWN0IHNjc2lfY21uZCAqc2NtZCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLCB1bnNpZ25lZCBpbnQgbnVtLCBpbnQgd3JpdGUpCitzdGF0aWMgaW50Citkb19kZXZpY2VfYWNjZXNzKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHU2NCBsYmEsIHUzMiBudW0sIGJvb2wgZG9fd3JpdGUpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssIHJlc3QgPSAwOworCXU2NCBibG9jaywgcmVzdCA9IDA7CiAJc3RydWN0IHNjc2lfZGF0YV9idWZmZXIgKnNkYjsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CiAJc2l6ZV90ICgqZnVuYykoc3RydWN0IHNjYXR0ZXJsaXN0ICosIHVuc2lnbmVkIGludCwgdm9pZCAqLCBzaXplX3QsCiAJCSAgICAgICBvZmZfdCk7CiAKLQlpZiAod3JpdGUpIHsKKwlpZiAoZG9fd3JpdGUpIHsKIAkJc2RiID0gc2NzaV9vdXQoc2NtZCk7CiAJCWRpciA9IERNQV9UT19ERVZJQ0U7CiAJCWZ1bmMgPSBzZ19wY29weV90b19idWZmZXI7CkBAIC0xODgwLDYgKzIzNDUsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBJZiBmYWtlX3N0b3JlKGxiYSxudW0pIGNvbXBhcmVzIGVxdWFsIHRvIGFycihudW0pLCB0aGVuIGNvcHkgdG9wIGhhbGYgb2YKKyAqIGFyciBpbnRvIGZha2Vfc3RvcmUobGJhLG51bSkgYW5kIHJldHVybiB0cnVlLiBJZiBjb21wYXJpc29uIGZhaWxzIHRoZW4KKyAqIHJldHVybiBmYWxzZS4gKi8KK3N0YXRpYyBib29sCitjb21wX3dyaXRlX3dvcmtlcih1NjQgbGJhLCB1MzIgbnVtLCBjb25zdCB1OCAqYXJyKQoreworCWJvb2wgcmVzOworCXU2NCBibG9jaywgcmVzdCA9IDA7CisJdTMyIHN0b3JlX2Jsa3MgPSBzZGVidWdfc3RvcmVfc2VjdG9yczsKKwl1MzIgbGJfc2l6ZSA9IHNjc2lfZGVidWdfc2VjdG9yX3NpemU7CisKKwlibG9jayA9IGRvX2RpdihsYmEsIHN0b3JlX2Jsa3MpOworCWlmIChibG9jayArIG51bSA+IHN0b3JlX2Jsa3MpCisJCXJlc3QgPSBibG9jayArIG51bSAtIHN0b3JlX2Jsa3M7CisKKwlyZXMgPSAhbWVtY21wKGZha2Vfc3RvcmVwICsgKGJsb2NrICogbGJfc2l6ZSksIGFyciwKKwkJICAgICAgKG51bSAtIHJlc3QpICogbGJfc2l6ZSk7CisJaWYgKCFyZXMpCisJCXJldHVybiByZXM7CisJaWYgKHJlc3QpCisJCXJlcyA9IG1lbWNtcChmYWtlX3N0b3JlcCwgYXJyICsgKChudW0gLSByZXN0KSAqIGxiX3NpemUpLAorCQkJICAgICByZXN0ICogbGJfc2l6ZSk7CisJaWYgKCFyZXMpCisJCXJldHVybiByZXM7CisJYXJyICs9IG51bSAqIGxiX3NpemU7CisJbWVtY3B5KGZha2Vfc3RvcmVwICsgKGJsb2NrICogbGJfc2l6ZSksIGFyciwgKG51bSAtIHJlc3QpICogbGJfc2l6ZSk7CisJaWYgKHJlc3QpCisJCW1lbWNweShmYWtlX3N0b3JlcCwgYXJyICsgKChudW0gLSByZXN0KSAqIGxiX3NpemUpLAorCQkgICAgICAgcmVzdCAqIGxiX3NpemUpOworCXJldHVybiByZXM7Cit9CisKIHN0YXRpYyBfX2JlMTYgZGlmX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWYsIGludCBsZW4pCiB7CiAJX19iZTE2IGNzdW07CkBAIC0xOTkyLDU1ICsyNDg5LDE0MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlc3BfcmVhZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKLQkJICAgICB1bnNpZ25lZCBpbnQgbnVtLCB1MzIgZWlfbGJhKQorc3RhdGljIGludAorcmVzcF9yZWFkX2R0MChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQogeworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisJdTY0IGxiYTsKKwl1MzIgbnVtOworCXUzMiBlaV9sYmE7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJaW50IHJldDsKKwlib29sIGNoZWNrX3Byb3Q7CiAKLQlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhTQ3BudCwgbGJhLCBudW0pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJc3dpdGNoIChjbWRbMF0pIHsKKwljYXNlIFJFQURfMTY6CisJCWVpX2xiYSA9IDA7CisJCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAyKTsKKwkJbnVtID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDEwKTsKKwkJY2hlY2tfcHJvdCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgUkVBRF8xMDoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFJFQURfNjoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gKHUzMiljbWRbM10gfCAodTMyKWNtZFsyXSA8PCA4IHwKKwkJICAgICAgKHUzMikoY21kWzFdICYgMHgxZikgPDwgMTY7CisJCW51bSA9ICgwID09IGNtZFs0XSkgPyAyNTYgOiBjbWRbNF07CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFJFQURfMTI6CisJCWVpX2xiYSA9IDA7CisJCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyKTsKKwkJbnVtID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDYpOworCQljaGVja19wcm90ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBYRFdSSVRFUkVBRF8xMDoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJCWNoZWNrX3Byb3QgPSBmYWxzZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoJLyogYXNzdW1lIFJFQUQoMzIpICovCisJCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAxMik7CisJCWVpX2xiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyMCk7CisJCW51bSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyOCk7CisJCWNoZWNrX3Byb3QgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCWlmIChjaGVja19wcm90KSB7CisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX29wY29kZShzY3ApOworCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0KKwkJaWYgKChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8fAorCQkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApID09IDApCisJCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NwLT5kZXZpY2UsICJVbnByb3RlY3RlZCBSRCAiCisJCQkJICAgICJ0byBESUYgZGV2aWNlXG4iKTsKKwl9CisJaWYgKHNkZWJ1Z19hbnlfaW5qZWN0aW5nX29wdCkgeworCQlzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCAqZXAgPSBzY3NpX2NtZF9wcml2KHNjcCk7CisKKwkJaWYgKGVwLT5pbmpfc2hvcnQpCisJCQludW0gLz0gMjsKKwl9CisKKwkvKiBpbmxpbmUgY2hlY2tfZGV2aWNlX2FjY2Vzc19wYXJhbXMoKSAqLworCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBMQkFfT1VUX09GX1JBTkdFLCAwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCS8qIHRyYW5zZmVyIGxlbmd0aCBleGNlc3NpdmUgKHRpZSBpbiB0byBibG9jayBsaW1pdHMgVlBEIHBhZ2UpICovCisJaWYgKG51bSA+IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKSB7CisJCS8qIG5lZWRzIHdvcmsgdG8gZmluZCB3aGljaCBjZGIgYnl0ZSAnbnVtJyBjb21lcyBmcm9tICovCisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CiAKIAlpZiAoKFNDU0lfREVCVUdfT1BUX01FRElVTV9FUlIgJiBzY3NpX2RlYnVnX29wdHMpICYmCiAJICAgIChsYmEgPD0gKE9QVF9NRURJVU1fRVJSX0FERFIgKyBPUFRfTUVESVVNX0VSUl9OVU0gLSAxKSkgJiYKIAkgICAgKChsYmEgKyBudW0pID4gT1BUX01FRElVTV9FUlJfQUREUikpIHsKIAkJLyogY2xhaW0gdW5yZWNvdmVyYWJsZSByZWFkIGVycm9yICovCi0JCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgTUVESVVNX0VSUk9SLCBVTlJFQ09WRVJFRF9SRUFEX0VSUiwgMCk7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIE1FRElVTV9FUlJPUiwgVU5SRUNPVkVSRURfUkVBRF9FUlIsIDApOwogCQkvKiBzZXQgaW5mbyBmaWVsZCBhbmQgdmFsaWQgYml0IGZvciBmaXhlZCBkZXNjcmlwdG9yICovCi0JCWlmICgweDcwID09IChTQ3BudC0+c2Vuc2VfYnVmZmVyWzBdICYgMHg3ZikpIHsKLQkJCVNDcG50LT5zZW5zZV9idWZmZXJbMF0gfD0gMHg4MDsJLyogVmFsaWQgYml0ICovCisJCWlmICgweDcwID09IChzY3AtPnNlbnNlX2J1ZmZlclswXSAmIDB4N2YpKSB7CisJCQlzY3AtPnNlbnNlX2J1ZmZlclswXSB8PSAweDgwOwkvKiBWYWxpZCBiaXQgKi8KIAkJCXJldCA9IChsYmEgPCBPUFRfTUVESVVNX0VSUl9BRERSKQogCQkJICAgICAgPyBPUFRfTUVESVVNX0VSUl9BRERSIDogKGludClsYmE7Ci0JCQlTQ3BudC0+c2Vuc2VfYnVmZmVyWzNdID0gKHJldCA+PiAyNCkgJiAweGZmOwotCQkJU0NwbnQtPnNlbnNlX2J1ZmZlcls0XSA9IChyZXQgPj4gMTYpICYgMHhmZjsKLQkJCVNDcG50LT5zZW5zZV9idWZmZXJbNV0gPSAocmV0ID4+IDgpICYgMHhmZjsKLQkJCVNDcG50LT5zZW5zZV9idWZmZXJbNl0gPSByZXQgJiAweGZmOworCQkJcHV0X3VuYWxpZ25lZF9iZTMyKHJldCwgc2NwLT5zZW5zZV9idWZmZXIgKyAzKTsKIAkJfQotCSAgICAgICAgc2NzaV9zZXRfcmVzaWQoU0NwbnQsIHNjc2lfYnVmZmxlbihTQ3BudCkpOworCQlzY3NpX3NldF9yZXNpZChzY3AsIHNjc2lfYnVmZmxlbihzY3ApKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCiAJcmVhZF9sb2NrX2lycXNhdmUoJmF0b21pY19ydywgaWZsYWdzKTsKIAogCS8qIERJWCArIFQxMCBESUYgKi8KLQlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkgewotCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV9yZWFkKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhKTsKKwlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KHNjcCkpIHsKKwkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfcmVhZChzY3AsIGxiYSwgbnVtLCBlaV9sYmEpOwogCiAJCWlmIChwcm90X3JldCkgewogCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBBQk9SVEVEX0NPTU1BTkQsIDB4MTAsIHByb3RfcmV0KTsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgcHJvdF9yZXQpOwogCQkJcmV0dXJuIGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKIAkJfQogCX0KIAotCXJldCA9IGRvX2RldmljZV9hY2Nlc3MoU0NwbnQsIGxiYSwgbnVtLCAwKTsKKwlyZXQgPSBkb19kZXZpY2VfYWNjZXNzKHNjcCwgbGJhLCBudW0sIGZhbHNlKTsKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfcncsIGlmbGFncyk7CiAJaWYgKHJldCA9PSAtMSkKIAkJcmV0dXJuIERJRF9FUlJPUiA8PCAxNjsKIAotCXNjc2lfaW4oU0NwbnQpLT5yZXNpZCA9IHNjc2lfYnVmZmxlbihTQ3BudCkgLSByZXQ7CisJc2NzaV9pbihzY3ApLT5yZXNpZCA9IHNjc2lfYnVmZmxlbihzY3ApIC0gcmV0OwogCisJaWYgKHNkZWJ1Z19hbnlfaW5qZWN0aW5nX29wdCkgeworCQlzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCAqZXAgPSBzY3NpX2NtZF9wcml2KHNjcCk7CisKKwkJaWYgKGVwLT5pbmpfcmVjb3ZlcmVkKSB7CisJCQlta19zZW5zZV9idWZmZXIoc2NwLCBSRUNPVkVSRURfRVJST1IsCisJCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7CisJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfSBlbHNlIGlmIChlcC0+aW5qX3RyYW5zcG9ydCkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgQUJPUlRFRF9DT01NQU5ELAorCQkJCQlUUkFOU1BPUlRfUFJPQkxFTSwgQUNLX05BS19UTyk7CisJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfSBlbHNlIGlmIChlcC0+aW5qX2RpZikgeworCQkJLyogTG9naWNhbCBibG9jayBndWFyZCBjaGVjayBmYWlsZWQgKi8KKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgMSk7CisJCQlyZXR1cm4gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UgaWYgKGVwLT5pbmpfZGl4KSB7CisJCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsIDEpOworCQkJcmV0dXJuIGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIyMywzMSArMjgwOCw5NSBAQAogCX0KIH0KIAotc3RhdGljIGludCByZXNwX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCB1MzIgZWlfbGJhKQorc3RhdGljIGludAorcmVzcF93cml0ZV9kdDAoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKKwl1OCAqY21kID0gc2NwLT5jbW5kOworCXU2NCBsYmE7CisJdTMyIG51bTsKKwl1MzIgZWlfbGJhOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCWludCByZXQ7CisJYm9vbCBjaGVja19wcm90OwogCi0JcmV0ID0gY2hlY2tfZGV2aWNlX2FjY2Vzc19wYXJhbXMoU0NwbnQsIGxiYSwgbnVtKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCXN3aXRjaCAoY21kWzBdKSB7CisJY2FzZSBXUklURV8xNjoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTY0KGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMTApOworCQljaGVja19wcm90ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV8xMDoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFdSSVRFXzY6CisJCWVpX2xiYSA9IDA7CisJCWxiYSA9ICh1MzIpY21kWzNdIHwgKHUzMiljbWRbMl0gPDwgOCB8CisJCSAgICAgICh1MzIpKGNtZFsxXSAmIDB4MWYpIDw8IDE2OworCQludW0gPSAoMCA9PSBjbWRbNF0pID8gMjU2IDogY21kWzRdOworCQljaGVja19wcm90ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV8xMjoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgNik7CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIDB4NTM6CS8qIFhEV1JJVEVSRUFEKDEwKSAqLworCQllaV9sYmEgPSAwOworCQlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMik7CisJCW51bSA9IGdldF91bmFsaWduZWRfYmUxNihjbWQgKyA3KTsKKwkJY2hlY2tfcHJvdCA9IGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0OgkvKiBhc3N1bWUgV1JJVEUoMzIpICovCisJCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAxMik7CisJCWVpX2xiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyMCk7CisJCW51bSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyOCk7CisJCWNoZWNrX3Byb3QgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCWlmIChjaGVja19wcm90KSB7CisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX29wY29kZShzY3ApOworCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0KKwkJaWYgKChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8fAorCQkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApID09IDApCisJCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NwLT5kZXZpY2UsICJVbnByb3RlY3RlZCBXUiAiCisJCQkJICAgICJ0byBESUYgZGV2aWNlXG4iKTsKKwl9CisKKwkvKiBpbmxpbmUgY2hlY2tfZGV2aWNlX2FjY2Vzc19wYXJhbXMoKSAqLworCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBMQkFfT1VUX09GX1JBTkdFLCAwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCS8qIHRyYW5zZmVyIGxlbmd0aCBleGNlc3NpdmUgKHRpZSBpbiB0byBibG9jayBsaW1pdHMgVlBEIHBhZ2UpICovCisJaWYgKG51bSA+IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKSB7CisJCS8qIG5lZWRzIHdvcmsgdG8gZmluZCB3aGljaCBjZGIgYnl0ZSAnbnVtJyBjb21lcyBmcm9tICovCisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmF0b21pY19ydywgaWZsYWdzKTsKIAogCS8qIERJWCArIFQxMCBESUYgKi8KLQlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkgewotCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV93cml0ZShTQ3BudCwgbGJhLCBudW0sIGVpX2xiYSk7CisJaWYgKHNjc2lfZGVidWdfZGl4ICYmIHNjc2lfcHJvdF9zZ19jb3VudChzY3ApKSB7CisJCWludCBwcm90X3JldCA9IHByb3RfdmVyaWZ5X3dyaXRlKHNjcCwgbGJhLCBudW0sIGVpX2xiYSk7CiAKIAkJaWYgKHByb3RfcmV0KSB7CiAJCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsCi0JCQkJCXByb3RfcmV0KTsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgcHJvdF9yZXQpOwogCQkJcmV0dXJuIGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKIAkJfQogCX0KIAotCXJldCA9IGRvX2RldmljZV9hY2Nlc3MoU0NwbnQsIGxiYSwgbnVtLCAxKTsKKwlyZXQgPSBkb19kZXZpY2VfYWNjZXNzKHNjcCwgbGJhLCBudW0sIHRydWUpOwogCWlmIChzY3NpX2RlYnVnX2xicCgpKQogCQltYXBfcmVnaW9uKGxiYSwgbnVtKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwpAQCAtMjI1NSwzMCArMjkwNCw0MSBAQAogCQlyZXR1cm4gKERJRF9FUlJPUiA8PCAxNik7CiAJZWxzZSBpZiAoKHJldCA8IChudW0gKiBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKSkgJiYKIAkJIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykpCi0JCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQtPmRldmljZSwKKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzY3AtPmRldmljZSwKIAkJCSAgICAiJXM6IHdyaXRlOiBjZGIgaW5kaWNhdGVkPSV1LCBJTyBzZW50PSVkIGJ5dGVzXG4iLAogCQkJICAgIG15X25hbWUsIG51bSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUsIHJldCk7CiAKKwlpZiAoc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0KSB7CisJCXN0cnVjdCBzZGVidWdfc2NtZF9leHRyYV90ICplcCA9IHNjc2lfY21kX3ByaXYoc2NwKTsKKworCQlpZiAoZXAtPmlual9yZWNvdmVyZWQpIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIFJFQ09WRVJFRF9FUlJPUiwKKwkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKKwkJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UgaWYgKGVwLT5pbmpfZGlmKSB7CisJCQkvKiBMb2dpY2FsIGJsb2NrIGd1YXJkIGNoZWNrIGZhaWxlZCAqLworCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgQUJPUlRFRF9DT01NQU5ELCAweDEwLCAxKTsKKwkJCXJldHVybiBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0gZWxzZSBpZiAoZXAtPmlual9kaXgpIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgMSk7CisJCQlyZXR1cm4gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OworCQl9CisJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlc3Bfd3JpdGVfc2FtZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCB1MzIgZWlfbGJhLCB1bnNpZ25lZCBpbnQgdW5tYXApCitzdGF0aWMgaW50CityZXNwX3dyaXRlX3NhbWUoc3RydWN0IHNjc2lfY21uZCAqc2NwLCB1NjQgbGJhLCB1MzIgbnVtLCB1MzIgZWlfbGJhLAorCQlib29sIHVubWFwLCBib29sIG5kb2IpCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBsb25nIGk7CiAJaW50IHJldDsKIAotCXJldCA9IGNoZWNrX2RldmljZV9hY2Nlc3NfcGFyYW1zKHNjbWQsIGxiYSwgbnVtKTsKKwlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhzY3AsIGxiYSwgbnVtKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKG51bSA+IHNjc2lfZGVidWdfd3JpdGVfc2FtZV9sZW5ndGgpIHsKLQkJbWtfc2Vuc2VfYnVmZmVyKHNjbWQsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsCi0JCQkJMCk7Ci0JCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCX0KLQogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwogCiAJaWYgKHVubWFwICYmIHNjc2lfZGVidWdfbGJwKCkpIHsKQEAgLTIyODYsMTcgKzI5NDYsMjIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogRWxzZSBmZXRjaCBvbmUgbG9naWNhbCBibG9jayAqLwotCXJldCA9IGZldGNoX3RvX2Rldl9idWZmZXIoc2NtZCwKLQkJCQkgIGZha2Vfc3RvcmVwICsgKGxiYSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpLAotCQkJCSAgc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSk7CisJLyogaWYgbmRvYiB0aGVuIHplcm8gMSBsb2dpY2FsIGJsb2NrLCBlbHNlIGZldGNoIDEgbG9naWNhbCBibG9jayAqLworCWlmIChuZG9iKSB7CisJCW1lbXNldChmYWtlX3N0b3JlcCArIChsYmEgKiBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKSwgMCwKKwkJICAgICAgIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOworCQlyZXQgPSAwOworCX0gZWxzZQorCQlyZXQgPSBmZXRjaF90b19kZXZfYnVmZmVyKHNjcCwgZmFrZV9zdG9yZXAgKworCQkJCQkgICAgICAgKGxiYSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpLAorCQkJCQkgIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOwogCiAJaWYgKC0xID09IHJldCkgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwogCQlyZXR1cm4gKERJRF9FUlJPUiA8PCAxNik7CiAJfSBlbHNlIGlmICgocmV0IDwgKG51bSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpKSAmJgogCQkgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKSkKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzY21kLT5kZXZpY2UsCisJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2NwLT5kZXZpY2UsCiAJCQkgICAgIiVzOiAlczogY2RiIGluZGljYXRlZD0ldSwgSU8gc2VudD0lZCBieXRlc1xuIiwKIAkJCSAgICBteV9uYW1lLCAid3JpdGUgc2FtZSIsCiAJCQkgICAgbnVtICogc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSwgcmV0KTsKQEAgLTIzMTUsMTMgKzI5ODAsMTQzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK3Jlc3Bfd3JpdGVfc2FtZV8xMChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQoreworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisJdTMyIGxiYTsKKwl1MTYgbnVtOworCXUzMiBlaV9sYmEgPSAwOworCWJvb2wgdW5tYXAgPSBmYWxzZTsKKworCWlmIChjbWRbMV0gJiAweDgpIHsKKwkJaWYgKHNjc2lfZGVidWdfbGJwd3MxMCA9PSAwKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAxLCAzKTsKKwkJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UKKwkJCXVubWFwID0gdHJ1ZTsKKwl9CisJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCW51bSA9IGdldF91bmFsaWduZWRfYmUxNihjbWQgKyA3KTsKKwlpZiAobnVtID4gc2NzaV9kZWJ1Z193cml0ZV9zYW1lX2xlbmd0aCkgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA3LCAtMSk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlyZXR1cm4gcmVzcF93cml0ZV9zYW1lKHNjcCwgbGJhLCBudW0sIGVpX2xiYSwgdW5tYXAsIGZhbHNlKTsKK30KKworc3RhdGljIGludAorcmVzcF93cml0ZV9zYW1lXzE2KHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCit7CisJdTggKmNtZCA9IHNjcC0+Y21uZDsKKwl1NjQgbGJhOworCXUzMiBudW07CisJdTMyIGVpX2xiYSA9IDA7CisJYm9vbCB1bm1hcCA9IGZhbHNlOworCWJvb2wgbmRvYiA9IGZhbHNlOworCisJaWYgKGNtZFsxXSAmIDB4OCkgewkvKiBVTk1BUCAqLworCQlpZiAoc2NzaV9kZWJ1Z19sYnB3cyA9PSAwKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAxLCAzKTsKKwkJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UKKwkJCXVubWFwID0gdHJ1ZTsKKwl9CisJaWYgKGNtZFsxXSAmIDB4MSkgIC8qIE5ET0IgKG5vIGRhdGEtb3V0IGJ1ZmZlciwgYXNzdW1lcyB6ZXJvZXMpICovCisJCW5kb2IgPSB0cnVlOworCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAyKTsKKwludW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMTApOworCWlmIChudW0gPiBzY3NpX2RlYnVnX3dyaXRlX3NhbWVfbGVuZ3RoKSB7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDEwLCAtMSk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlyZXR1cm4gcmVzcF93cml0ZV9zYW1lKHNjcCwgbGJhLCBudW0sIGVpX2xiYSwgdW5tYXAsIG5kb2IpOworfQorCitzdGF0aWMgaW50CityZXNwX2NvbXBfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKK3sKKwl1OCAqY21kID0gc2NwLT5jbW5kOworCXU4ICphcnI7CisJdTggKmZha2Vfc3RvcmVwX2hvbGQ7CisJdTY0IGxiYTsKKwl1MzIgZG51bTsKKwl1MzIgbGJfc2l6ZSA9IHNjc2lfZGVidWdfc2VjdG9yX3NpemU7CisJdTggbnVtOworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOworCWludCByZXQ7CisKKwlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMik7CisJbnVtID0gY21kWzEzXTsJCS8qIDEgdG8gYSBtYXhpbXVtIG9mIDI1NSBsb2dpY2FsIGJsb2NrcyAqLworCWlmICgwID09IG51bSkKKwkJcmV0dXJuIDA7CS8qIGRlZ2VuZXJhdGUgY2FzZSwgbm90IGFuIGVycm9yICovCisJZG51bSA9IDIgKiBudW07CisJYXJyID0ga3phbGxvYyhkbnVtICogbGJfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKE5VTEwgPT0gYXJyKSB7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5TVUZGX1JFU19BU0MsCisJCQkJSU5TVUZGX1JFU19BU0NRKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCSAgICAoY21kWzFdICYgMHhlMCkpIHsKKwkJbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc2NwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCWlmICgoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gfHwKKwkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKKwkJc2Rldl9wcmludGsoS0VSTl9FUlIsIHNjcC0+ZGV2aWNlLCAiVW5wcm90ZWN0ZWQgV1IgIgorCQkJICAgICJ0byBESUYgZGV2aWNlXG4iKTsKKworCS8qIGlubGluZSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcygpICovCisJaWYgKGxiYSArIG51bSA+IHNkZWJ1Z19jYXBhY2l0eSkgeworCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIExCQV9PVVRfT0ZfUkFOR0UsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJLyogdHJhbnNmZXIgbGVuZ3RoIGV4Y2Vzc2l2ZSAodGllIGluIHRvIGJsb2NrIGxpbWl0cyBWUEQgcGFnZSkgKi8KKwlpZiAobnVtID4gc2RlYnVnX3N0b3JlX3NlY3RvcnMpIHsKKwkJLyogbmVlZHMgd29yayB0byBmaW5kIHdoaWNoIGNkYiBieXRlICdudW0nIGNvbWVzIGZyb20gKi8KKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYXRvbWljX3J3LCBpZmxhZ3MpOworCisJLyogdHJpY2sgZG9fZGV2aWNlX2FjY2VzcygpIHRvIGZldGNoIGJvdGggY29tcGFyZSBhbmQgd3JpdGUgYnVmZmVycworCSAqIGZyb20gZGF0YS1pbiBpbnRvIGFyci4gU2FmZSAoYXRvbWljKSBzaW5jZSB3cml0ZV9sb2NrIGhlbGQuICovCisJZmFrZV9zdG9yZXBfaG9sZCA9IGZha2Vfc3RvcmVwOworCWZha2Vfc3RvcmVwID0gYXJyOworCXJldCA9IGRvX2RldmljZV9hY2Nlc3Moc2NwLCAwLCBkbnVtLCB0cnVlKTsKKwlmYWtlX3N0b3JlcCA9IGZha2Vfc3RvcmVwX2hvbGQ7CisJaWYgKHJldCA9PSAtMSkgeworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOworCQlrZnJlZShhcnIpOworCQlyZXR1cm4gRElEX0VSUk9SIDw8IDE2OworCX0gZWxzZSBpZiAoKHJldCA8IChkbnVtICogbGJfc2l6ZSkpICYmCisJCSAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpKQorCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNjcC0+ZGV2aWNlLCAiJXM6IGNvbXBhcmVfd3JpdGU6IGNkYiAiCisJCQkgICAgImluZGljYXRlZD0ldSwgSU8gc2VudD0lZCBieXRlc1xuIiwgbXlfbmFtZSwKKwkJCSAgICBkbnVtICogbGJfc2l6ZSwgcmV0KTsKKwlpZiAoIWNvbXBfd3JpdGVfd29ya2VyKGxiYSwgbnVtLCBhcnIpKSB7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfcncsIGlmbGFncyk7CisJCWtmcmVlKGFycik7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIE1JU0NPTVBBUkUsIE1JU0NPTVBBUkVfVkVSSUZZX0FTQywgMCk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlpZiAoc2NzaV9kZWJ1Z19sYnAoKSkKKwkJbWFwX3JlZ2lvbihsYmEsIG51bSk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmF0b21pY19ydywgaWZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IHVubWFwX2Jsb2NrX2Rlc2MgewogCV9fYmU2NAlsYmE7CiAJX19iZTMyCWJsb2NrczsKIAlfX2JlMzIJX19yZXNlcnZlZDsKIH07CiAKLXN0YXRpYyBpbnQgcmVzcF91bm1hcChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NtZCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKQorc3RhdGljIGludAorcmVzcF91bm1hcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQogewogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAlzdHJ1Y3QgdW5tYXBfYmxvY2tfZGVzYyAqZGVzYzsKQEAgLTIzMjksMjAgKzMxMjQsMjYgQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCi0JcmV0ID0gY2hlY2tfcmVhZGluZXNzKHNjbWQsIFVBU19PTkxZLCBkZXZpcCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKIAotCXBheWxvYWRfbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZzY21kLT5jbW5kWzddKTsKLQlCVUdfT04oc2NzaV9idWZmbGVuKHNjbWQpICE9IHBheWxvYWRfbGVuKTsKKwlpZiAoIXNjc2lfZGVidWdfbGJwKCkpCisJCXJldHVybiAwOwkvKiBmaWIgYW5kIHNheSBpdHMgZG9uZSAqLworCXBheWxvYWRfbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTE2KHNjcC0+Y21uZCArIDcpOworCUJVR19PTihzY3NpX2J1ZmZsZW4oc2NwKSAhPSBwYXlsb2FkX2xlbik7CiAKIAlkZXNjcmlwdG9ycyA9IChwYXlsb2FkX2xlbiAtIDgpIC8gMTY7Ci0KLQlidWYgPSBrbWFsbG9jKHNjc2lfYnVmZmxlbihzY21kKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFidWYpCisJaWYgKGRlc2NyaXB0b3JzID4gc2NzaV9kZWJ1Z191bm1hcF9tYXhfZGVzYykgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA3LCAtMSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KIAotCXNjc2lfc2dfY29weV90b19idWZmZXIoc2NtZCwgYnVmLCBzY3NpX2J1ZmZsZW4oc2NtZCkpOworCWJ1ZiA9IGttYWxsb2Moc2NzaV9idWZmbGVuKHNjcCksIEdGUF9BVE9NSUMpOworCWlmICghYnVmKSB7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5TVUZGX1JFU19BU0MsCisJCQkJSU5TVUZGX1JFU19BU0NRKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCisJc2NzaV9zZ19jb3B5X3RvX2J1ZmZlcihzY3AsIGJ1Ziwgc2NzaV9idWZmbGVuKHNjcCkpOwogCiAJQlVHX09OKGdldF91bmFsaWduZWRfYmUxNigmYnVmWzBdKSAhPSBwYXlsb2FkX2xlbiAtIDIpOwogCUJVR19PTihnZXRfdW5hbGlnbmVkX2JlMTYoJmJ1ZlsyXSkgIT0gZGVzY3JpcHRvcnMgKiAxNik7CkBAIC0yMzU1LDcgKzMxNTYsNyBAQAogCQl1bnNpZ25lZCBsb25nIGxvbmcgbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZkZXNjW2ldLmxiYSk7CiAJCXVuc2lnbmVkIGludCBudW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoJmRlc2NbaV0uYmxvY2tzKTsKIAotCQlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhzY21kLCBsYmEsIG51bSk7CisJCXJldCA9IGNoZWNrX2RldmljZV9hY2Nlc3NfcGFyYW1zKHNjcCwgbGJhLCBudW0pOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAKQEAgLTIzNzMsMzcgKzMxNzQsNDQgQEAKIAogI2RlZmluZSBTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOIDMyCiAKLXN0YXRpYyBpbnQgcmVzcF9nZXRfbGJhX3N0YXR1cyhzdHJ1Y3Qgc2NzaV9jbW5kICogc2NtZCwKLQkJCSAgICAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50CityZXNwX2dldF9sYmFfc3RhdHVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGxiYTsKLQl1bnNpZ25lZCBpbnQgYWxsb2NfbGVuLCBtYXBwZWQsIG51bTsKLQl1bnNpZ25lZCBjaGFyIGFycltTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOXTsKKwl1OCAqY21kID0gc2NwLT5jbW5kOworCXU2NCBsYmE7CisJdTMyIGFsbG9jX2xlbiwgbWFwcGVkLCBudW07CisJdTggYXJyW1NERUJVR19HRVRfTEJBX1NUQVRVU19MRU5dOwogCWludCByZXQ7CiAKLQlyZXQgPSBjaGVja19yZWFkaW5lc3Moc2NtZCwgVUFTX09OTFksIGRldmlwKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZzY21kLT5jbW5kWzJdKTsKLQlhbGxvY19sZW4gPSBnZXRfdW5hbGlnbmVkX2JlMzIoJnNjbWQtPmNtbmRbMTBdKTsKKwlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlNjQoY21kICsgMik7CisJYWxsb2NfbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDEwKTsKIAogCWlmIChhbGxvY19sZW4gPCAyNCkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhzY21kLCBsYmEsIDEpOworCXJldCA9IGNoZWNrX2RldmljZV9hY2Nlc3NfcGFyYW1zKHNjcCwgbGJhLCAxKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbWFwcGVkID0gbWFwX3N0YXRlKGxiYSwgJm51bSk7CisJaWYgKHNjc2lfZGVidWdfbGJwKCkpCisJCW1hcHBlZCA9IG1hcF9zdGF0ZShsYmEsICZudW0pOworCWVsc2UgeworCQltYXBwZWQgPSAxOworCQkvKiBmb2xsb3dpbmcganVzdCBpbiBjYXNlIHZpcnR1YWxfZ2IgY2hhbmdlZCAqLworCQlzZGVidWdfY2FwYWNpdHkgPSBnZXRfc2RlYnVnX2NhcGFjaXR5KCk7CisJCWlmIChzZGVidWdfY2FwYWNpdHkgLSBsYmEgPD0gMHhmZmZmZmZmZikKKwkJCW51bSA9IHNkZWJ1Z19jYXBhY2l0eSAtIGxiYTsKKwkJZWxzZQorCQkJbnVtID0gMHhmZmZmZmZmZjsKKwl9CiAKIAltZW1zZXQoYXJyLCAwLCBTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOKTsKLQlwdXRfdW5hbGlnbmVkX2JlMzIoMjAsICZhcnJbMF0pOwkvKiBQYXJhbWV0ZXIgRGF0YSBMZW5ndGggKi8KLQlwdXRfdW5hbGlnbmVkX2JlNjQobGJhLCAmYXJyWzhdKTsJLyogTEJBICovCi0JcHV0X3VuYWxpZ25lZF9iZTMyKG51bSwgJmFyclsxNl0pOwkvKiBOdW1iZXIgb2YgYmxvY2tzICovCi0JYXJyWzIwXSA9ICFtYXBwZWQ7CQkJLyogbWFwcGVkID0gMCwgdW5tYXBwZWQgPSAxICovCisJcHV0X3VuYWxpZ25lZF9iZTMyKDIwLCBhcnIpOwkJLyogUGFyYW1ldGVyIERhdGEgTGVuZ3RoICovCisJcHV0X3VuYWxpZ25lZF9iZTY0KGxiYSwgYXJyICsgOCk7CS8qIExCQSAqLworCXB1dF91bmFsaWduZWRfYmUzMihudW0sIGFyciArIDE2KTsJLyogTnVtYmVyIG9mIGJsb2NrcyAqLworCWFyclsyMF0gPSAhbWFwcGVkOwkJLyogcHJvdl9zdGF0PTA6IG1hcHBlZDsgMTogZGVhbGxvYyAqLwogCi0JcmV0dXJuIGZpbGxfZnJvbV9kZXZfYnVmZmVyKHNjbWQsIGFyciwgU0RFQlVHX0dFVF9MQkFfU1RBVFVTX0xFTik7CisJcmV0dXJuIGZpbGxfZnJvbV9kZXZfYnVmZmVyKHNjcCwgYXJyLCBTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOKTsKIH0KIAogI2RlZmluZSBTREVCVUdfUkxVTl9BUlJfU1ogMjU2CkBAIC0yNDEyLDggKzMyMjAsOCBAQAogCQkJICAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCkKIHsKIAl1bnNpZ25lZCBpbnQgYWxsb2NfbGVuOwotCWludCBsdW5fY250LCBpLCB1cHBlciwgbnVtLCBuOwotCXU2NCB3bHVuLCBsdW47CisJaW50IGx1bl9jbnQsIGksIHVwcGVyLCBudW0sIG4sIHdhbnRfd2x1biwgc2hvcnRpc2g7CisJdTY0IGx1bjsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSBzY3AtPmNtbmQ7CiAJaW50IHNlbGVjdF9yZXBvcnQgPSAoaW50KWNtZFsyXTsKIAlzdHJ1Y3Qgc2NzaV9sdW4gKm9uZV9sdW47CkBAIC0yNDIxLDkgKzMyMjksOSBAQAogCXVuc2lnbmVkIGNoYXIgKiBtYXhfYWRkcjsKIAogCWFsbG9jX2xlbiA9IGNtZFs5XSArIChjbWRbOF0gPDwgOCkgKyAoY21kWzddIDw8IDE2KSArIChjbWRbNl0gPDwgMjQpOwotCWlmICgoYWxsb2NfbGVuIDwgNCkgfHwgKHNlbGVjdF9yZXBvcnQgPiAyKSkgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLAotCQkJICAgICAgIAkwKTsKKwlzaG9ydGlzaCA9IChhbGxvY19sZW4gPCA0KTsKKwlpZiAoc2hvcnRpc2ggfHwgKHNlbGVjdF9yZXBvcnQgPiAyKSkgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCBzaG9ydGlzaCA/IDYgOiAyLCAtMSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAkvKiBjYW4gcHJvZHVjZSByZXNwb25zZSB3aXRoIHVwIHRvIDE2ayBsdW5zIChsdW4gMCB0byBsdW4gMTYzODMpICovCkBAIC0yNDMzLDE0ICszMjQxLDE0IEBACiAJCWx1bl9jbnQgPSAwOwogCWVsc2UgaWYgKHNjc2lfZGVidWdfbm9fbHVuXzAgJiYgKGx1bl9jbnQgPiAwKSkKIAkJLS1sdW5fY250OwotCXdsdW4gPSAoc2VsZWN0X3JlcG9ydCA+IDApID8gMSA6IDA7Ci0JbnVtID0gbHVuX2NudCArIHdsdW47CisJd2FudF93bHVuID0gKHNlbGVjdF9yZXBvcnQgPiAwKSA/IDEgOiAwOworCW51bSA9IGx1bl9jbnQgKyB3YW50X3dsdW47CiAJYXJyWzJdID0gKChzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSAqIG51bSkgPj4gOCkgJiAweGZmOwogCWFyclszXSA9IChzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSAqIG51bSkgJiAweGZmOwogCW4gPSBtaW4oKGludCkoKFNERUJVR19STFVOX0FSUl9TWiAtIDgpIC8KIAkJCSAgICBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSksIG51bSk7CiAJaWYgKG4gPCBudW0pIHsKLQkJd2x1biA9IDA7CisJCXdhbnRfd2x1biA9IDA7CiAJCWx1bl9jbnQgPSBuOwogCX0KIAlvbmVfbHVuID0gKHN0cnVjdCBzY3NpX2x1biAqKSAmYXJyWzhdOwpAQCAtMjQ1NCw3ICszMjYyLDcgQEAKIAkJCSAgICAodXBwZXIgfCAoU0FNMl9MVU5fQUREUkVTU19NRVRIT0QgPDwgNikpOwogCQlvbmVfbHVuW2ldLnNjc2lfbHVuWzFdID0gbHVuICYgMHhmZjsKIAl9Ci0JaWYgKHdsdW4pIHsKKwlpZiAod2FudF93bHVuKSB7CiAJCW9uZV9sdW5baV0uc2NzaV9sdW5bMF0gPSAoU0FNMl9XTFVOX1JFUE9SVF9MVU5TID4+IDgpICYgMHhmZjsKIAkJb25lX2x1bltpXS5zY3NpX2x1blsxXSA9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUyAmIDB4ZmY7CiAJCWkrKzsKQEAgLTI0NzYsOCArMzI4NCw4IEBACiAJLyogYmV0dGVyIG5vdCB0byB1c2UgdGVtcG9yYXJ5IGJ1ZmZlci4gKi8KIAlidWYgPSBrbWFsbG9jKHNjc2lfYnVmZmxlbihzY3ApLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZikgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBOT1RfUkVBRFksCi0JCQkJTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRSwgMCk7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5TVUZGX1JFU19BU0MsCisJCQkJSU5TVUZGX1JFU19BU0NRKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCkBAIC0yNTAwLDYgKzMzMDgsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorcmVzcF94ZHdyaXRlcmVhZF8xMChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQoreworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisJdTY0IGxiYTsKKwl1MzIgbnVtOworCWludCBlcnJzdHM7CisKKwlpZiAoIXNjc2lfYmlkaV9jbW5kKHNjcCkpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlNVRkZfUkVTX0FTQywKKwkJCQlJTlNVRkZfUkVTX0FTQ1EpOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJZXJyc3RzID0gcmVzcF9yZWFkX2R0MChzY3AsIGRldmlwKTsKKwlpZiAoZXJyc3RzKQorCQlyZXR1cm4gZXJyc3RzOworCWlmICghKGNtZFsxXSAmIDB4NCkpIHsJCS8qIERJU0FCTEVfV1JJVEUgaXMgbm90IHNldCAqLworCQllcnJzdHMgPSByZXNwX3dyaXRlX2R0MChzY3AsIGRldmlwKTsKKwkJaWYgKGVycnN0cykKKwkJCXJldHVybiBlcnJzdHM7CisJfQorCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyKTsKKwludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJcmV0dXJuIHJlc3BfeGR3cml0ZXJlYWQoc2NwLCBsYmEsIG51bSwgZGV2aXApOworfQorCiAvKiBXaGVuIHRpbWVyIG9yIHRhc2tsZXQgZ29lcyBvZmYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovCiBzdGF0aWMgdm9pZCBzZGVidWdfcV9jbWRfY29tcGxldGUodW5zaWduZWQgbG9uZyBpbmR4KQogewpAQCAtMjY3MiwxMCArMzUwNiw3IEBACiAJb3Blbl9kZXZpcC0+c2RiZ19ob3N0ID0gc2RiZ19ob3N0OwogCWF0b21pY19zZXQoJm9wZW5fZGV2aXAtPm51bV9pbl9xLCAwKTsKIAlzZXRfYml0KFNERUJVR19VQV9QT1IsIG9wZW5fZGV2aXAtPnVhc19ibSk7Ci0Jb3Blbl9kZXZpcC0+dXNlZCA9IDE7Ci0JaWYgKHNkZXYtPmx1biA9PSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMpCi0JCW9wZW5fZGV2aXAtPndsdW4gPSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMgJiAweGZmOwotCisJb3Blbl9kZXZpcC0+dXNlZCA9IHRydWU7CiAJcmV0dXJuIG9wZW5fZGV2aXA7CiB9CiAKQEAgLTI3MDEsMTAgKzM1MzIsNiBAQAogCWlmIChOVUxMID09IGRldmlwKQogCQlyZXR1cm4gMTsJLyogbm8gcmVzb3VyY2VzLCB3aWxsIGJlIG1hcmtlZCBvZmZsaW5lICovCiAJc2RwLT5ob3N0ZGF0YSA9IGRldmlwOwotCXNkcC0+dGFnZ2VkX3N1cHBvcnRlZCA9IDE7Ci0JaWYgKHNkcC0+aG9zdC0+Y21kX3Blcl9sdW4pCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkcCwgREVGX1RBR0dFRF9RVUVVSU5HLAotCQkJCQlERUZfQ01EX1BFUl9MVU4pOwogCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHNkcC0+cmVxdWVzdF9xdWV1ZSwgLTFVKTsKIAlpZiAoc2NzaV9kZWJ1Z19ub191bGQpCiAJCXNkcC0+bm9fdWxkX2F0dGFjaCA9IDE7CkBAIC0yNzIxLDcgKzM1NDgsNyBAQAogCQkgICAgICAgc2RwLT5ob3N0LT5ob3N0X25vLCBzZHAtPmNoYW5uZWwsIHNkcC0+aWQsIHNkcC0+bHVuKTsKIAlpZiAoZGV2aXApIHsKIAkJLyogbWFrZSB0aGlzIHNsb3QgYXZhaWxhYmxlIGZvciByZS11c2UgKi8KLQkJZGV2aXAtPnVzZWQgPSAwOworCQlkZXZpcC0+dXNlZCA9IGZhbHNlOwogCQlzZHAtPmhvc3RkYXRhID0gTlVMTDsKIAl9CiB9CkBAIC0zMTY2LDYgKzM5OTMsNyBAQAogbW9kdWxlX3BhcmFtX25hbWVkKHJlbW92YWJsZSwgc2NzaV9kZWJ1Z19yZW1vdmFibGUsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChzY3NpX2xldmVsLCBzY3NpX2RlYnVnX3Njc2lfbGV2ZWwsIGludCwgU19JUlVHTyk7CiBtb2R1bGVfcGFyYW1fbmFtZWQoc2VjdG9yX3NpemUsIHNjc2lfZGVidWdfc2VjdG9yX3NpemUsIGludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fbmFtZWQoc3RyaWN0LCBzY3NpX2RlYnVnX3N0cmljdCwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwogbW9kdWxlX3BhcmFtX25hbWVkKHVubWFwX2FsaWdubWVudCwgc2NzaV9kZWJ1Z191bm1hcF9hbGlnbm1lbnQsIGludCwgU19JUlVHTyk7CiBtb2R1bGVfcGFyYW1fbmFtZWQodW5tYXBfZ3JhbnVsYXJpdHksIHNjc2lfZGVidWdfdW5tYXBfZ3JhbnVsYXJpdHksIGludCwgU19JUlVHTyk7CiBtb2R1bGVfcGFyYW1fbmFtZWQodW5tYXBfbWF4X2Jsb2Nrcywgc2NzaV9kZWJ1Z191bm1hcF9tYXhfYmxvY2tzLCBpbnQsIFNfSVJVR08pOwpAQCAtMzE4NSw3ICs0MDEzLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoYXRvLCAiYXBwbGljYXRpb24gdGFnIG93bmVyc2hpcDogMD1kaXNrIDE9aG9zdCAoZGVmPTEpIik7CiBNT0RVTEVfUEFSTV9ERVNDKGNsdXN0ZXJpbmcsICJ3aGVuIHNldCBlbmFibGVzIGxhcmdlciB0cmFuc2ZlcnMgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkZWxheSwgInJlc3BvbnNlIGRlbGF5IChkZWY9MSBqaWZmeSk7IDA6aW1tLCAtMSwtMjp0aW55Iik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRldl9zaXplX21iLCAic2l6ZSBpbiBNQiBvZiByYW0gc2hhcmVkIGJ5IGRldnMoZGVmPTgpIik7CitNT0RVTEVfUEFSTV9ERVNDKGRldl9zaXplX21iLCAic2l6ZSBpbiBNaUIgb2YgcmFtIHNoYXJlZCBieSBkZXZzKGRlZj04KSIpOwogTU9EVUxFX1BBUk1fREVTQyhkaWYsICJkYXRhIGludGVncml0eSBmaWVsZCB0eXBlOiAwLTMgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkaXgsICJkYXRhIGludGVncml0eSBleHRlbnNpb25zIG1hc2sgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkc2Vuc2UsICJ1c2UgZGVzY3JpcHRvciBzZW5zZSBmb3JtYXQoZGVmPTAgLT4gZml4ZWQpIik7CkBAIC0zMjEyLDExICs0MDQwLDEyIEBACiBNT0RVTEVfUEFSTV9ERVNDKHJlbW92YWJsZSwgImNsYWltIHRvIGhhdmUgcmVtb3ZhYmxlIG1lZGlhIChkZWY9MCkiKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2NzaV9sZXZlbCwgIlNDU0kgbGV2ZWwgdG8gc2ltdWxhdGUoZGVmPTZbU1BDLTRdKSIpOwogTU9EVUxFX1BBUk1fREVTQyhzZWN0b3Jfc2l6ZSwgImxvZ2ljYWwgYmxvY2sgc2l6ZSBpbiBieXRlcyAoZGVmPTUxMikiKTsKK01PRFVMRV9QQVJNX0RFU0Moc3RyaWN0LCAic3RyaWN0ZXIgY2hlY2tzOiByZXNlcnZlZCBmaWVsZCBpbiBjZGIgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyh1bm1hcF9hbGlnbm1lbnQsICJsb3dlc3QgYWxpZ25lZCB0aGluIHByb3Zpc2lvbmluZyBsYmEgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyh1bm1hcF9ncmFudWxhcml0eSwgInRoaW4gcHJvdmlzaW9uaW5nIGdyYW51bGFyaXR5IGluIGJsb2NrcyAoZGVmPTEpIik7CiBNT0RVTEVfUEFSTV9ERVNDKHVubWFwX21heF9ibG9ja3MsICJtYXggIyBvZiBibG9ja3MgY2FuIGJlIHVubWFwcGVkIGluIG9uZSBjbWQgKGRlZj0weGZmZmZmZmZmKSIpOwogTU9EVUxFX1BBUk1fREVTQyh1bm1hcF9tYXhfZGVzYywgIm1heCAjIG9mIHJhbmdlcyB0aGF0IGNhbiBiZSB1bm1hcHBlZCBpbiBvbmUgY21kIChkZWY9MjU2KSIpOwotTU9EVUxFX1BBUk1fREVTQyh2aXJ0dWFsX2diLCAidmlydHVhbCBnaWdhYnl0ZSBzaXplIChkZWY9MCAtPiB1c2UgZGV2X3NpemVfbWIpIik7CitNT0RVTEVfUEFSTV9ERVNDKHZpcnR1YWxfZ2IsICJ2aXJ0dWFsIGdpZ2FieXRlIChHaUIpIHNpemUgKGRlZj0wIC0+IHVzZSBkZXZfc2l6ZV9tYikiKTsKIE1PRFVMRV9QQVJNX0RFU0ModnBkX3VzZV9ob3N0bm8sICIwIC0+IGRldiBpZHMgaWdub3JlIGhvc3RubyAoZGVmPTEgLT4gdW5pcXVlIGRldiBpZHMpIik7CiBNT0RVTEVfUEFSTV9ERVNDKHdyaXRlX3NhbWVfbGVuZ3RoLCAiTWF4aW11bSBibG9ja3MgcGVyIFdSSVRFIFNBTUUgY21kIChkZWY9MHhmZmZmKSIpOwogCkBAIC0zMzgyLDYgKzQyMTEsMTYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIG9wdHNfZG9uZToKIAlzY3NpX2RlYnVnX29wdHMgPSBvcHRzOworCWlmIChTQ1NJX0RFQlVHX09QVF9SRUNPVkVSRURfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9UUkFOU1BPUlRfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9ESUZfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9ESVhfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9TSE9SVF9UUkFOU0ZFUiAmIG9wdHMpCisJCXNkZWJ1Z19hbnlfaW5qZWN0aW5nX29wdCA9IHRydWU7CiAJYXRvbWljX3NldCgmc2RlYnVnX2NtbmRfY291bnQsIDApOwogCWF0b21pY19zZXQoJnNkZWJ1Z19hX3RzZiwgMCk7CiAJcmV0dXJuIGNvdW50OwpAQCAtMzU4OSwxMiArNDQyOCwyNSBAQAogCQkJCXNpemVfdCBjb3VudCkKIHsKICAgICAgICAgaW50IG47CisJYm9vbCBjaGFuZ2VkOwogCiAJaWYgKChjb3VudCA+IDApICYmICgxID09IHNzY2FuZihidWYsICIlZCIsICZuKSkgJiYgKG4gPj0gMCkpIHsKKwkJY2hhbmdlZCA9IChzY3NpX2RlYnVnX3ZpcnR1YWxfZ2IgIT0gbik7CiAJCXNjc2lfZGVidWdfdmlydHVhbF9nYiA9IG47Ci0KIAkJc2RlYnVnX2NhcGFjaXR5ID0gZ2V0X3NkZWJ1Z19jYXBhY2l0eSgpOworCQlpZiAoY2hhbmdlZCkgeworCQkJc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKnNkaHA7CisJCQlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkcDsKIAorCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGhwLCAmc2RlYnVnX2hvc3RfbGlzdCwKKwkJCQkJICAgIGhvc3RfbGlzdCkgeworCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHAsICZzZGhwLT5kZXZfaW5mb19saXN0LAorCQkJCQkJICAgIGRldl9saXN0KSB7CisJCQkJCXNldF9iaXQoU0RFQlVHX1VBX0NBUEFDSVRZX0NIQU5HRUQsCisJCQkJCQlkcC0+dWFzX2JtKTsKKwkJCQl9CisJCQl9CisJCX0KIAkJcmV0dXJuIGNvdW50OwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTM3NDAsNiArNDU5MiwyMyBAQAogfQogc3RhdGljIERSSVZFUl9BVFRSX1JXKGhvc3RfbG9jayk7CiAKK3N0YXRpYyBzc2l6ZV90IHN0cmljdF9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsICEhc2NzaV9kZWJ1Z19zdHJpY3QpOworfQorc3RhdGljIHNzaXplX3Qgc3RyaWN0X3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQpCit7CisJaW50IG47CisKKwlpZiAoKGNvdW50ID4gMCkgJiYgKDEgPT0gc3NjYW5mKGJ1ZiwgIiVkIiwgJm4pKSAmJiAobiA+PSAwKSkgeworCQlzY3NpX2RlYnVnX3N0cmljdCA9IChuID4gMCk7CisJCXJldHVybiBjb3VudDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgRFJJVkVSX0FUVFJfUlcoc3RyaWN0KTsKKwogCiAvKiBOb3RlOiBUaGUgZm9sbG93aW5nIGFycmF5IGNyZWF0ZXMgYXR0cmlidXRlIGZpbGVzIGluIHRoZQogICAgL3N5cy9idXMvcHNldWRvL2RyaXZlcnMvc2NzaV9kZWJ1ZyBkaXJlY3RvcnkuIFRoZSBhZHZhbnRhZ2Ugb2YgdGhlc2UKQEAgLTM3NzUsNiArNDY0NCw3IEBACiAJJmRyaXZlcl9hdHRyX3JlbW92YWJsZS5hdHRyLAogCSZkcml2ZXJfYXR0cl9ob3N0X2xvY2suYXR0ciwKIAkmZHJpdmVyX2F0dHJfbmRlbGF5LmF0dHIsCisJJmRyaXZlcl9hdHRyX3N0cmljdC5hdHRyLAogCU5VTEwsCiB9OwogQVRUUklCVVRFX0dST1VQUyhzZGVidWdfZHJ2KTsKQEAgLTQwODcsMzk2ICs0OTU3LDkgQEAKIH0KIAogc3RhdGljIGludAotc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCi17Ci0JdW5zaWduZWQgY2hhciAqY21kID0gU0NwbnQtPmNtbmQ7Ci0JaW50IGxlbiwgazsKLQl1bnNpZ25lZCBpbnQgbnVtOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBsYmE7Ci0JdTMyIGVpX2xiYTsKLQlpbnQgZXJyc3RzID0gMDsKLQlpbnQgdGFyZ2V0ID0gU0NwbnQtPmRldmljZS0+aWQ7Ci0Jc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXAgPSBOVUxMOwotCWludCBpbmpfcmVjb3ZlcmVkID0gMDsKLQlpbnQgaW5qX3RyYW5zcG9ydCA9IDA7Ci0JaW50IGlual9kaWYgPSAwOwotCWludCBpbmpfZGl4ID0gMDsKLQlpbnQgaW5qX3Nob3J0ID0gMDsKLQlpbnQgZGVsYXlfb3ZlcnJpZGUgPSAwOwotCWludCB1bm1hcCA9IDA7Ci0KLQlzY3NpX3NldF9yZXNpZChTQ3BudCwgMCk7Ci0JaWYgKChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykgJiYKLQkgICAgIShTQ1NJX0RFQlVHX09QVF9OT19DREJfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpKSB7Ci0JCWNoYXIgYlsxMjBdOwotCQlpbnQgbjsKLQotCQlsZW4gPSBTQ3BudC0+Y21kX2xlbjsKLQkJaWYgKGxlbiA+IDMyKQotCQkJc3RyY3B5KGIsICJ0b28gbG9uZywgb3ZlciAzMiBieXRlcyIpOwotCQllbHNlIHsKLQkJCWZvciAoayA9IDAsIG4gPSAwOyBrIDwgbGVuOyArK2spCi0JCQkJbiArPSBzY25wcmludGYoYiArIG4sIHNpemVvZihiKSAtIG4sICIlMDJ4ICIsCi0JCQkJCSAgICAgICAodW5zaWduZWQgaW50KWNtZFtrXSk7Ci0JCX0KLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBTQ3BudC0+ZGV2aWNlLCAiJXM6IGNtZCAlc1xuIiwgbXlfbmFtZSwKLQkJCSAgICBiKTsKLQl9Ci0KLQlpZiAoKFNDcG50LT5kZXZpY2UtPmx1biA+PSBzY3NpX2RlYnVnX21heF9sdW5zKSAmJgotCSAgICAoU0NwbnQtPmRldmljZS0+bHVuICE9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUykpCi0JCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBOVUxMLCBESURfTk9fQ09OTkVDVCA8PCAxNiwgMCk7Ci0JZGV2aXAgPSBkZXZJbmZvUmVnKFNDcG50LT5kZXZpY2UpOwotCWlmIChOVUxMID09IGRldmlwKQotCQlyZXR1cm4gc2NoZWR1bGVfcmVzcChTQ3BudCwgTlVMTCwgRElEX05PX0NPTk5FQ1QgPDwgMTYsIDApOwotCi0JaWYgKChzY3NpX2RlYnVnX2V2ZXJ5X250aCAhPSAwKSAmJgotCSAgICAoYXRvbWljX2luY19yZXR1cm4oJnNkZWJ1Z19jbW5kX2NvdW50KSA+PQotCSAgICAgYWJzKHNjc2lfZGVidWdfZXZlcnlfbnRoKSkpIHsKLQkJYXRvbWljX3NldCgmc2RlYnVnX2NtbmRfY291bnQsIDApOwotCQlpZiAoc2NzaV9kZWJ1Z19ldmVyeV9udGggPCAtMSkKLQkJCXNjc2lfZGVidWdfZXZlcnlfbnRoID0gLTE7Ci0JCWlmIChTQ1NJX0RFQlVHX09QVF9USU1FT1VUICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJcmV0dXJuIDA7IC8qIGlnbm9yZSBjb21tYW5kIGNhdXNpbmcgdGltZW91dCAqLwotCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9NQUNfVElNRU9VVCAmIHNjc2lfZGVidWdfb3B0cyAmJgotCQkJIHNjc2lfbWVkaXVtX2FjY2Vzc19jb21tYW5kKFNDcG50KSkKLQkJCXJldHVybiAwOyAvKiB0aW1lIG91dCByZWFkcyBhbmQgd3JpdGVzICovCi0JCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX1JFQ09WRVJFRF9FUlIgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlpbmpfcmVjb3ZlcmVkID0gMTsgLyogdG8gcmVhZHMgYW5kIHdyaXRlcyBiZWxvdyAqLwotCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9UUkFOU1BPUlRfRVJSICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJaW5qX3RyYW5zcG9ydCA9IDE7IC8qIHRvIHJlYWRzIGFuZCB3cml0ZXMgYmVsb3cgKi8KLQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfRElGX0VSUiAmIHNjc2lfZGVidWdfb3B0cykKLQkJCWlual9kaWYgPSAxOyAvKiB0byByZWFkcyBhbmQgd3JpdGVzIGJlbG93ICovCi0JCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJWF9FUlIgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlpbmpfZGl4ID0gMTsgLyogdG8gcmVhZHMgYW5kIHdyaXRlcyBiZWxvdyAqLwotCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9TSE9SVF9UUkFOU0ZFUiAmIHNjc2lfZGVidWdfb3B0cykKLQkJCWlual9zaG9ydCA9IDE7Ci0JfQotCi0JaWYgKGRldmlwLT53bHVuKSB7Ci0JCXN3aXRjaCAoKmNtZCkgewotCQljYXNlIElOUVVJUlk6Ci0JCWNhc2UgUkVRVUVTVF9TRU5TRToKLQkJY2FzZSBURVNUX1VOSVRfUkVBRFk6Ci0JCWNhc2UgUkVQT1JUX0xVTlM6Ci0JCQlicmVhazsgIC8qIG9ubHkgYWxsb3dhYmxlIHdsdW4gY29tbWFuZHMgKi8KLQkJZGVmYXVsdDoKLQkJCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKLQkJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBPcGNvZGU6IDB4JXggIgotCQkJCSAgICAgICAibm90IHN1cHBvcnRlZCBmb3Igd2x1blxuIiwgKmNtZCk7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9PUENPREUsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBkZXZpcCwgZXJyc3RzLCAwKTsKLQkJfQotCX0KLQotCXN3aXRjaCAoKmNtZCkgewotCWNhc2UgSU5RVUlSWTogICAgIC8qIG1hbmRhdG9yeSwgaWdub3JlIHVuaXQgYXR0ZW50aW9uICovCi0JCWRlbGF5X292ZXJyaWRlID0gMTsKLQkJZXJyc3RzID0gcmVzcF9pbnF1aXJ5KFNDcG50LCB0YXJnZXQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVFVRVNUX1NFTlNFOgkvKiBtYW5kYXRvcnksIGlnbm9yZSB1bml0IGF0dGVudGlvbiAqLwotCQlkZWxheV9vdmVycmlkZSA9IDE7Ci0JCWVycnN0cyA9IHJlc3BfcmVxdWVzdHMoU0NwbnQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVpFUk9fVU5JVDoJLyogYWN0dWFsbHkgdGhpcyBpcyBSRVdJTkQgZm9yIFNTQyAqLwotCWNhc2UgU1RBUlRfU1RPUDoKLQkJZXJyc3RzID0gcmVzcF9zdGFydF9zdG9wKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgQUxMT1dfTUVESVVNX1JFTU9WQUw6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX09OTFksIGRldmlwKTsKLQkJaWYgKGVycnN0cykKLQkJCWJyZWFrOwotCQlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBNZWRpdW0gcmVtb3ZhbCAlc1xuIiwKLQkJCSAgICAgICBjbWRbNF0gPyAiaW5oaWJpdGVkIiA6ICJlbmFibGVkIik7Ci0JCWJyZWFrOwotCWNhc2UgU0VORF9ESUFHTk9TVElDOiAgICAgLyogbWFuZGF0b3J5ICovCi0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX09OTFksIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBURVNUX1VOSVRfUkVBRFk6ICAgICAvKiBtYW5kYXRvcnkgKi8KLQkJLyogZGVsYXlfb3ZlcnJpZGUgPSAxOyAqLwotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19UVVIsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVNFUlZFOgotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19PTkxZLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgUkVTRVJWRV8xMDoKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCBVQVNfT05MWSwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFJFTEVBU0U6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX09OTFksIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRUxFQVNFXzEwOgotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19PTkxZLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgUkVBRF9DQVBBQ0lUWToKLQkJZXJyc3RzID0gcmVzcF9yZWFkY2FwKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46Ci0JCWlmIChjbWRbMV0gPT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpCi0JCQllcnJzdHMgPSByZXNwX3JlYWRjYXAxNihTQ3BudCwgZGV2aXApOwotCQllbHNlIGlmIChjbWRbMV0gPT0gU0FJX0dFVF9MQkFfU1RBVFVTKSB7Ci0KLQkJCWlmIChzY3NpX2RlYnVnX2xicCgpID09IDApIHsKLQkJCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJCUlOVkFMSURfQ09NTUFORF9PUENPREUsIDApOwotCQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQl9IGVsc2UKLQkJCQllcnJzdHMgPSByZXNwX2dldF9sYmFfc3RhdHVzKFNDcG50LCBkZXZpcCk7Ci0JCX0gZWxzZSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9PUENPREUsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJfQotCQlicmVhazsKLQljYXNlIE1BSU5URU5BTkNFX0lOOgotCQlpZiAoTUlfUkVQT1JUX1RBUkdFVF9QR1MgIT0gY21kWzFdKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9PUENPREUsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJCWJyZWFrOwotCQl9Ci0JCWVycnN0cyA9IHJlc3BfcmVwb3J0X3RndHBncyhTQ3BudCwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFJFQURfMTY6Ci0JY2FzZSBSRUFEXzEyOgotCWNhc2UgUkVBRF8xMDoKLQkJLyogUkVBRHsxMCwxMiwxNn0gYW5kIERJRiBUeXBlIDIgYXJlIG5hdHVyYWwgZW5lbWllcyAqLwotCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04gJiYKLQkJICAgIGNtZFsxXSAmIDB4ZTApIHsKLQkJCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX0NPTU1BTkRfT1BDT0RFLCAwKTsKLQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICgoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gfHwKLQkJICAgICBzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTikgJiYKLQkJICAgIChjbWRbMV0gJiAweGUwKSA9PSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJVbnByb3RlY3RlZCBSRC9XUiB0byBESUYgZGV2aWNlXG4iKTsKLQotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIFJFQURfNjoKLXJlYWQ6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOwotCi0JCWlmIChpbmpfc2hvcnQpCi0JCQludW0gLz0gMjsKLQotCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwotCQlpZiAoaW5qX3JlY292ZXJlZCAmJiAoMCA9PSBlcnJzdHMpKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIFJFQ09WRVJFRF9FUlJPUiwKLQkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKLQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCX0gZWxzZSBpZiAoaW5qX3RyYW5zcG9ydCAmJiAoMCA9PSBlcnJzdHMpKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIEFCT1JURURfQ09NTUFORCwKLQkJCQkJVFJBTlNQT1JUX1BST0JMRU0sIEFDS19OQUtfVE8pOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJfSBlbHNlIGlmIChpbmpfZGlmICYmICgwID09IGVycnN0cykpIHsKLQkJCS8qIExvZ2ljYWwgYmxvY2sgZ3VhcmQgY2hlY2sgZmFpbGVkICovCi0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgMSk7Ci0JCQllcnJzdHMgPSBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCX0gZWxzZSBpZiAoaW5qX2RpeCAmJiAoMCA9PSBlcnJzdHMpKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgMSk7Ci0JCQllcnJzdHMgPSBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBSRVBPUlRfTFVOUzoJLyogbWFuZGF0b3J5LCBpZ25vcmUgdW5pdCBhdHRlbnRpb24gKi8KLQkJZGVsYXlfb3ZlcnJpZGUgPSAxOwotCQllcnJzdHMgPSByZXNwX3JlcG9ydF9sdW5zKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgVkVSSUZZOgkJLyogMTAgYnl0ZSBTQkMtMiBjb21tYW5kICovCi0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFdSSVRFXzE2OgotCWNhc2UgV1JJVEVfMTI6Ci0JY2FzZSBXUklURV8xMDoKLQkJLyogV1JJVEV7MTAsMTIsMTZ9IGFuZCBESUYgVHlwZSAyIGFyZSBuYXR1cmFsIGVuZW1pZXMgKi8KLQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCi0JCSAgICBjbWRbMV0gJiAweGUwKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OIHx8Ci0JCSAgICAgc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pICYmCi0JCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5wcm90ZWN0ZWQgUkQvV1IgdG8gRElGIGRldmljZVxuIik7Ci0KLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBXUklURV82Ogotd3JpdGU6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOwotCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhKTsKLQkJaWYgKGlual9yZWNvdmVyZWQgJiYgKDAgPT0gZXJyc3RzKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBSRUNPVkVSRURfRVJST1IsCi0JCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQl9IGVsc2UgaWYgKGlual9kaWYgJiYgKDAgPT0gZXJyc3RzKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBBQk9SVEVEX0NPTU1BTkQsIDB4MTAsIDEpOwotCQkJZXJyc3RzID0gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OwotCQl9IGVsc2UgaWYgKGlual9kaXggJiYgKDAgPT0gZXJyc3RzKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsIDEpOwotCQkJZXJyc3RzID0gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgV1JJVEVfU0FNRV8xNjoKLQljYXNlIFdSSVRFX1NBTUU6Ci0JCWlmIChjbWRbMV0gJiAweDgpIHsKLQkJCWlmICgoKmNtZCA9PSBXUklURV9TQU1FXzE2ICYmIHNjc2lfZGVidWdfbGJwd3MgPT0gMCkgfHwKLQkJCSAgICAoKmNtZCA9PSBXUklURV9TQU1FICYmIHNjc2lfZGVidWdfbGJwd3MxMCA9PSAwKSkgewotCQkJCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOwotCQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQl9IGVsc2UKLQkJCQl1bm1hcCA9IDE7Ci0JCX0KLQkJaWYgKGVycnN0cykKLQkJCWJyZWFrOwotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19UVVIsIGRldmlwKTsKLQkJaWYgKGVycnN0cykKLQkJCWJyZWFrOwotCQlpZiAoc2NzaV9kZWJ1Z19mYWtlX3J3KQotCQkJYnJlYWs7Ci0JCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtLCAmZWlfbGJhKTsKLQkJZXJyc3RzID0gcmVzcF93cml0ZV9zYW1lKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhLCB1bm1hcCk7Ci0JCWJyZWFrOwotCWNhc2UgVU5NQVA6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQotCQlpZiAoc2NzaV9kZWJ1Z191bm1hcF9tYXhfZGVzYyA9PSAwIHx8IHNjc2lfZGVidWdfbGJwdSA9PSAwKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQl9IGVsc2UKLQkJCWVycnN0cyA9IHJlc3BfdW5tYXAoU0NwbnQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RFX1NFTlNFOgotCWNhc2UgTU9ERV9TRU5TRV8xMDoKLQkJZXJyc3RzID0gcmVzcF9tb2RlX3NlbnNlKFNDcG50LCB0YXJnZXQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RFX1NFTEVDVDoKLQkJZXJyc3RzID0gcmVzcF9tb2RlX3NlbGVjdChTQ3BudCwgMSwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIE1PREVfU0VMRUNUXzEwOgotCQllcnJzdHMgPSByZXNwX21vZGVfc2VsZWN0KFNDcG50LCAwLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgTE9HX1NFTlNFOgotCQllcnJzdHMgPSByZXNwX2xvZ19zZW5zZShTQ3BudCwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOgotCQlkZWxheV9vdmVycmlkZSA9IDE7Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFdSSVRFX0JVRkZFUjoKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCBVQVNfT05MWSwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFhEV1JJVEVSRUFEXzEwOgotCQlpZiAoIXNjc2lfYmlkaV9jbW5kKFNDcG50KSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKLQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOwotCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWVycnN0cyA9IHJlc3BfeGR3cml0ZXJlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgVkFSSUFCTEVfTEVOR1RIX0NNRDoKLQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OKSB7Ci0KLQkJCWlmICgoY21kWzEwXSAmIDB4ZTApID09IDApCi0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJVbnByb3RlY3RlZCBSRC9XUiB0byBESUYgZGV2aWNlXG4iKTsKLQotCQkJaWYgKGNtZFs5XSA9PSBSRUFEXzMyKSB7Ci0JCQkJQlVHX09OKFNDcG50LT5jbWRfbGVuIDwgMzIpOwotCQkJCWdvdG8gcmVhZDsKLQkJCX0KLQotCQkJaWYgKGNtZFs5XSA9PSBXUklURV8zMikgewotCQkJCUJVR19PTihTQ3BudC0+Y21kX2xlbiA8IDMyKTsKLQkJCQlnb3RvIHdyaXRlOwotCQkJfQotCQl9Ci0KLQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOwotCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQlicmVhazsKLQljYXNlIDB4ODU6Ci0JCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKLQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQtPmRldmljZSwKLQkJCSIlczogQVRBIFBBU1MtVEhST1VHSCgxNikgbm90IHN1cHBvcnRlZFxuIiwgbXlfbmFtZSk7Ci0JCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCUlOVkFMSURfT1BDT0RFLCAwKTsKLQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBTQ3BudC0+ZGV2aWNlLAotCQkJCSAgICAiJXM6IE9wY29kZTogMHgleCBub3Qgc3VwcG9ydGVkXG4iLAotCQkJCSAgICBteV9uYW1lLCAqY21kKTsKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCBVQVNfT05MWSwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7CS8qIFVuaXQgYXR0ZW50aW9uIHRha2VzIHByZWNlZGVuY2UgKi8KLQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfT1BDT0RFLCAwKTsKLQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBkZXZpcCwgZXJyc3RzLAotCQkJICAgICAoZGVsYXlfb3ZlcnJpZGUgPyAwIDogc2NzaV9kZWJ1Z19kZWxheSkpOwotfQotCi1zdGF0aWMgaW50Ci1zZGVidWdfcXVldWVjb21tYW5kX2xvY2tfb3Jfbm90KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0JaWYgKHNjc2lfZGVidWdfaG9zdF9sb2NrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwotCQlpbnQgcmM7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgaWZsYWdzKTsKLQkJcmMgPSBzY3NpX2RlYnVnX3F1ZXVlY29tbWFuZChjbWQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGlmbGFncyk7Ci0JCXJldHVybiByYzsKLQl9IGVsc2UKLQkJcmV0dXJuIHNjc2lfZGVidWdfcXVldWVjb21tYW5kKGNtZCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNkZWJ1Z19jaGFuZ2VfcWRlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKK3NkZWJ1Z19jaGFuZ2VfcWRlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCkKIHsKIAlpbnQgbnVtX2luX3EgPSAwOwotCWludCBiYWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwOwogCkBAIC00NDg4LDQzICs0OTcxLDE4IEBACiAJfQogCW51bV9pbl9xID0gYXRvbWljX3JlYWQoJmRldmlwLT5udW1faW5fcSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWVkX2Fycl9sb2NrLCBpZmxhZ3MpOwotCWlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfREVGQVVMVCB8fCByZWFzb24gPT0gU0NTSV9RREVQVEhfUkFNUF9VUCkgewotCQlpZiAocWRlcHRoIDwgMSkKLQkJCXFkZXB0aCA9IDE7Ci0JCS8qIGFsbG93IHRvIGV4Y2VlZCBtYXggaG9zdCBxdWV1ZWRfYXJyIGVsZW1lbnRzIGZvciB0ZXN0aW5nICovCi0JCWlmIChxZGVwdGggPiBTQ1NJX0RFQlVHX0NBTlFVRVVFICsgMTApCi0JCQlxZGVwdGggPSBTQ1NJX0RFQlVHX0NBTlFVRVVFICsgMTA7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOwotCX0gZWxzZSBpZiAocmVhc29uID09IFNDU0lfUURFUFRIX1FGVUxMKQotCQlzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKTsKLQllbHNlCi0JCWJhZCA9IDE7Ci0JaWYgKGJhZCkKLQkJc2Rldl9wcmludGsoS0VSTl9XQVJOSU5HLCBzZGV2LAotCQkJICAgICIlczogdW5rbm93biByZWFzb249MHgleFxuIiwgX19mdW5jX18sIHJlYXNvbik7Ci0JaWYgKFNDU0lfREVCVUdfT1BUX1FfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpIHsKLQkJaWYgKFNDU0lfUURFUFRIX1FGVUxMID09IHJlYXNvbikKLQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKLQkJCSAgICAiJXM6IC0+ICVkLCBudW1faW5fcT0lZCwgcmVhc29uOiBxdWV1ZSBmdWxsXG4iLAotCQkJCSAgICBfX2Z1bmNfXywgcWRlcHRoLCBudW1faW5fcSk7Ci0JCWVsc2UgewotCQkJY29uc3QgY2hhciAqY3A7CiAKLQkJCXN3aXRjaCAocmVhc29uKSB7Ci0JCQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JCQkJY3AgPSAiZGVmYXVsdCAoc3lzZnMgPykiOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQkJCWNwID0gInJhbXAgdXAiOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQljcCA9ICJ1bmtub3duIjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKLQkJCQkgICAgIiVzOiBxZGVwdGg9JWQsIG51bV9pbl9xPSVkLCByZWFzb246ICVzXG4iLAotCQkJCSAgICBfX2Z1bmNfXywgcWRlcHRoLCBudW1faW5fcSwgY3ApOwotCQl9CisJaWYgKHFkZXB0aCA8IDEpCisJCXFkZXB0aCA9IDE7CisJLyogYWxsb3cgdG8gZXhjZWVkIG1heCBob3N0IHF1ZXVlZF9hcnIgZWxlbWVudHMgZm9yIHRlc3RpbmcgKi8KKwlpZiAocWRlcHRoID4gU0NTSV9ERUJVR19DQU5RVUVVRSArIDEwKQorCQlxZGVwdGggPSBTQ1NJX0RFQlVHX0NBTlFVRVVFICsgMTA7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKKworCWlmIChTQ1NJX0RFQlVHX09QVF9RX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKSB7CisJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCSAgICAiJXM6IHFkZXB0aD0lZCwgbnVtX2luX3E9JWRcbiIsCisJCQkgICAgX19mdW5jX18sIHFkZXB0aCwgbnVtX2luX3EpOwogCX0KIAlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CiB9CkBAIC00NTMyLDE0ICs0OTkwLDcgQEAKIHN0YXRpYyBpbnQKIHNkZWJ1Z19jaGFuZ2VfcXR5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXR5cGUpCiB7Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgcXR5cGUpOwotCQlpZiAocXR5cGUpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQlxdHlwZSA9IDA7CisJcXR5cGUgPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlKHNkZXYsIHF0eXBlKTsKIAlpZiAoU0NTSV9ERUJVR19PUFRfUV9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykgewogCQljb25zdCBjaGFyICpjcDsKIApAQCAtNDU2Miw2ICs1MDEzLDE5MyBAQAogCXJldHVybiBxdHlwZTsKIH0KIAorc3RhdGljIGludAorY2hlY2tfaW5qZWN0KHN0cnVjdCBzY3NpX2NtbmQgKnNjcCkKK3sKKwlzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCAqZXAgPSBzY3NpX2NtZF9wcml2KHNjcCk7CisKKwltZW1zZXQoZXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCkpOworCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzZGVidWdfY21uZF9jb3VudCkgPj0KKwkgICAgYWJzKHNjc2lfZGVidWdfZXZlcnlfbnRoKSkgeworCQlhdG9taWNfc2V0KCZzZGVidWdfY21uZF9jb3VudCwgMCk7CisJCWlmIChzY3NpX2RlYnVnX2V2ZXJ5X250aCA8IC0xKQorCQkJc2NzaV9kZWJ1Z19ldmVyeV9udGggPSAtMTsKKwkJaWYgKFNDU0lfREVCVUdfT1BUX1RJTUVPVVQgJiBzY3NpX2RlYnVnX29wdHMpCisJCQlyZXR1cm4gMTsgLyogaWdub3JlIGNvbW1hbmQgY2F1c2luZyB0aW1lb3V0ICovCisJCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX01BQ19USU1FT1VUICYgc2NzaV9kZWJ1Z19vcHRzICYmCisJCQkgc2NzaV9tZWRpdW1fYWNjZXNzX2NvbW1hbmQoc2NwKSkKKwkJCXJldHVybiAxOyAvKiB0aW1lIG91dCByZWFkcyBhbmQgd3JpdGVzICovCisJCWlmIChzZGVidWdfYW55X2luamVjdGluZ19vcHQpIHsKKwkJCWludCBvcHRzID0gc2NzaV9kZWJ1Z19vcHRzOworCisJCQlpZiAoU0NTSV9ERUJVR19PUFRfUkVDT1ZFUkVEX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual9yZWNvdmVyZWQgPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfVFJBTlNQT1JUX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual90cmFuc3BvcnQgPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfRElGX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual9kaWYgPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfRElYX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual9kaXggPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfU0hPUlRfVFJBTlNGRVIgJiBvcHRzKQorCQkJCWVwLT5pbmpfc2hvcnQgPSB0cnVlOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzY3NpX2RlYnVnX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3ApCit7CisJdTggc2RlYl9pOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2NwLT5kZXZpY2U7CisJY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgKm9pcDsKKwljb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCAqcl9vaXA7CisJc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXA7CisJdTggKmNtZCA9IHNjcC0+Y21uZDsKKwlpbnQgKCpyX3BmcCkoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworCWludCBrLCBuYTsKKwlpbnQgZXJyc3RzID0gMDsKKwlpbnQgZXJyc3RzX25vX2Nvbm5lY3QgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwl1MzIgZmxhZ3M7CisJdTE2IHNhOworCXU4IG9wY29kZSA9IGNtZFswXTsKKwlib29sIGhhc193bHVuX3JsOworCWJvb2wgZGVidWcgPSAhIShTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cyk7CisKKwlzY3NpX3NldF9yZXNpZChzY3AsIDApOworCWlmIChkZWJ1ZyAmJiAhKFNDU0lfREVCVUdfT1BUX05PX0NEQl9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykpIHsKKwkJY2hhciBiWzEyMF07CisJCWludCBuLCBsZW4sIHNiOworCisJCWxlbiA9IHNjcC0+Y21kX2xlbjsKKwkJc2IgPSAoaW50KXNpemVvZihiKTsKKwkJaWYgKGxlbiA+IDMyKQorCQkJc3RyY3B5KGIsICJ0b28gbG9uZywgb3ZlciAzMiBieXRlcyIpOworCQllbHNlIHsKKwkJCWZvciAoayA9IDAsIG4gPSAwOyBrIDwgbGVuICYmIG4gPCBzYjsgKytrKQorCQkJCW4gKz0gc2NucHJpbnRmKGIgKyBuLCBzYiAtIG4sICIlMDJ4ICIsCisJCQkJCSAgICAgICAodTMyKWNtZFtrXSk7CisJCX0KKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZHAsICIlczogY21kICVzXG4iLCBteV9uYW1lLCBiKTsKKwl9CisJaGFzX3dsdW5fcmwgPSAoc2RwLT5sdW4gPT0gU0FNMl9XTFVOX1JFUE9SVF9MVU5TKTsKKwlpZiAoKHNkcC0+bHVuID49IHNjc2lfZGVidWdfbWF4X2x1bnMpICYmICFoYXNfd2x1bl9ybCkKKwkJcmV0dXJuIHNjaGVkdWxlX3Jlc3Aoc2NwLCBOVUxMLCBlcnJzdHNfbm9fY29ubmVjdCwgMCk7CisKKwlzZGViX2kgPSBvcGNvZGVfaW5kX2FycltvcGNvZGVdOwkvKiBmdWxseSBtYXBwZWQgKi8KKwlvaXAgPSAmb3Bjb2RlX2luZm9fYXJyW3NkZWJfaV07CQkvKiBzYWZlIGlmIHRhYmxlIGNvbnNpc3RlbnQgKi8KKwlkZXZpcCA9IChzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopc2RwLT5ob3N0ZGF0YTsKKwlpZiAoIWRldmlwKSB7CisJCWRldmlwID0gZGV2SW5mb1JlZyhzZHApOworCQlpZiAoTlVMTCA9PSBkZXZpcCkKKwkJCXJldHVybiBzY2hlZHVsZV9yZXNwKHNjcCwgTlVMTCwgZXJyc3RzX25vX2Nvbm5lY3QsIDApOworCX0KKwluYSA9IG9pcC0+bnVtX2F0dGFjaGVkOworCXJfcGZwID0gb2lwLT5wZnA7CisJaWYgKG5hKSB7CS8qIG11bHRpcGxlIGNvbW1hbmRzIHdpdGggdGhpcyBvcGNvZGUgKi8KKwkJcl9vaXAgPSBvaXA7CisJCWlmIChGRl9TQSAmIHJfb2lwLT5mbGFncykgeworCQkJaWYgKEZfU0FfTE9XICYgb2lwLT5mbGFncykKKwkJCQlzYSA9IDB4MWYgJiBjbWRbMV07CisJCQllbHNlCisJCQkJc2EgPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgOCk7CisJCQlmb3IgKGsgPSAwOyBrIDw9IG5hOyBvaXAgPSByX29pcC0+YXJycCArIGsrKykgeworCQkJCWlmIChvcGNvZGUgPT0gb2lwLT5vcGNvZGUgJiYgc2EgPT0gb2lwLT5zYSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7ICAgLyogc2luY2Ugbm8gc2VydmljZSBhY3Rpb24gb25seSBjaGVjayBvcGNvZGUgKi8KKwkJCWZvciAoayA9IDA7IGsgPD0gbmE7IG9pcCA9IHJfb2lwLT5hcnJwICsgaysrKSB7CisJCQkJaWYgKG9wY29kZSA9PSBvaXAtPm9wY29kZSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGsgPiBuYSkgeworCQkJaWYgKEZfU0FfTE9XICYgcl9vaXAtPmZsYWdzKQorCQkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDEsIDQpOworCQkJZWxzZSBpZiAoRl9TQV9ISUdIICYgcl9vaXAtPmZsYWdzKQorCQkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDgsIDcpOworCQkJZWxzZQorCQkJCW1rX3NlbnNlX2ludmFsaWRfb3Bjb2RlKHNjcCk7CisJCQlnb3RvIGNoZWNrX2NvbmQ7CisJCX0KKwl9CS8qIGVsc2UgKHdoZW4gbmE9PTApIHdlIGFzc3VtZSB0aGUgb2lwIGlzIGEgbWF0Y2ggKi8KKwlmbGFncyA9IG9pcC0+ZmxhZ3M7CisJaWYgKEZfSU5WX09QICYgZmxhZ3MpIHsKKwkJbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc2NwKTsKKwkJZ290byBjaGVja19jb25kOworCX0KKwlpZiAoaGFzX3dsdW5fcmwgJiYgIShGX1JMX1dMVU5fT0sgJiBmbGFncykpIHsKKwkJaWYgKGRlYnVnKQorCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZHAsICJzY3NpX2RlYnVnOiBPcGNvZGU6ICIKKwkJCQkgICAgIjB4JXggbm90IHN1cHBvcnRlZCBmb3Igd2x1blxuIiwgb3Bjb2RlKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc2NwKTsKKwkJZ290byBjaGVja19jb25kOworCX0KKwlpZiAoc2NzaV9kZWJ1Z19zdHJpY3QpIHsJLyogY2hlY2sgY2RiIGFnYWluc3QgbWFzayAqLworCQl1OCByZW07CisJCWludCBqOworCisJCWZvciAoayA9IDE7IGsgPCBvaXAtPmxlbl9tYXNrWzBdICYmIGsgPCAxNjsgKytrKSB7CisJCQlyZW0gPSB+b2lwLT5sZW5fbWFza1trXSAmIGNtZFtrXTsKKwkJCWlmIChyZW0pIHsKKwkJCQlmb3IgKGogPSA3OyBqID49IDA7IC0taiwgcmVtIDw8PSAxKSB7CisJCQkJCWlmICgweDgwICYgcmVtKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIGssIGopOworCQkJCWdvdG8gY2hlY2tfY29uZDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIShGX1NLSVBfVUEgJiBmbGFncykgJiYKKwkgICAgU0RFQlVHX05VTV9VQVMgIT0gZmluZF9maXJzdF9iaXQoZGV2aXAtPnVhc19ibSwgU0RFQlVHX05VTV9VQVMpKSB7CisJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhzY3AsIFVBU19PTkxZLCBkZXZpcCk7CisJCWlmIChlcnJzdHMpCisJCQlnb3RvIGNoZWNrX2NvbmQ7CisJfQorCWlmICgoRl9NX0FDQ0VTUyAmIGZsYWdzKSAmJiBkZXZpcC0+c3RvcHBlZCkgeworCQlta19zZW5zZV9idWZmZXIoc2NwLCBOT1RfUkVBRFksIExPR0lDQUxfVU5JVF9OT1RfUkVBRFksIDB4Mik7CisJCWlmIChkZWJ1ZykKKwkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RwLCAiJXMgcmVwb3J0czogTm90IHJlYWR5OiAiCisJCQkJICAgICIlc1xuIiwgbXlfbmFtZSwgImluaXRpYWxpemluZyBjb21tYW5kICIKKwkJCQkgICAgInJlcXVpcmVkIik7CisJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCWdvdG8gZmluaTsKKwl9CisJaWYgKHNjc2lfZGVidWdfZmFrZV9ydyAmJiAoRl9GQUtFX1JXICYgZmxhZ3MpKQorCQlnb3RvIGZpbmk7CisJaWYgKHNjc2lfZGVidWdfZXZlcnlfbnRoKSB7CisJCWlmIChjaGVja19pbmplY3Qoc2NwKSkKKwkJCXJldHVybiAwOwkvKiBpZ25vcmUgY29tbWFuZDogbWFrZSB0cm91YmxlICovCisJfQorCWlmIChvaXAtPnBmcCkJLyogaWYgdGhpcyBjb21tYW5kIGhhcyBhIHJlc3BfKiBmdW5jdGlvbiwgY2FsbCBpdCAqLworCQllcnJzdHMgPSBvaXAtPnBmcChzY3AsIGRldmlwKTsKKwllbHNlIGlmIChyX3BmcCkJLyogaWYgbGVhZiBmdW5jdGlvbiBwdHIgTlVMTCwgdHJ5IHRoZSByb290J3MgKi8KKwkJZXJyc3RzID0gcl9wZnAoc2NwLCBkZXZpcCk7CisKK2Zpbmk6CisJcmV0dXJuIHNjaGVkdWxlX3Jlc3Aoc2NwLCBkZXZpcCwgZXJyc3RzLAorCQkJICAgICAoKEZfREVMQVlfT1ZFUlIgJiBmbGFncykgPyAwIDogc2NzaV9kZWJ1Z19kZWxheSkpOworY2hlY2tfY29uZDoKKwlyZXR1cm4gc2NoZWR1bGVfcmVzcChzY3AsIGRldmlwLCBjaGVja19jb25kaXRpb25fcmVzdWx0LCAwKTsKK30KKworc3RhdGljIGludAorc2RlYnVnX3F1ZXVlY29tbWFuZF9sb2NrX29yX25vdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCWlmIChzY3NpX2RlYnVnX2hvc3RfbG9jaykgeworCQl1bnNpZ25lZCBsb25nIGlmbGFnczsKKwkJaW50IHJjOworCisJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGlmbGFncyk7CisJCXJjID0gc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQoY21kKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBpZmxhZ3MpOworCQlyZXR1cm4gcmM7CisJfSBlbHNlCisJCXJldHVybiBzY3NpX2RlYnVnX3F1ZXVlY29tbWFuZChjbWQpOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzZGVidWdfZHJpdmVyX3RlbXBsYXRlID0gewogCS5zaG93X2luZm8gPQkJc2NzaV9kZWJ1Z19zaG93X2luZm8sCiAJLndyaXRlX2luZm8gPQkJc2NzaV9kZWJ1Z193cml0ZV9pbmZvLApAQCAtNDU4NywxMyArNTIyNSwxNiBAQAogCS5tYXhfc2VjdG9ycyA9CQktMVUsCiAJLnVzZV9jbHVzdGVyaW5nID0gCURJU0FCTEVfQ0xVU1RFUklORywKIAkubW9kdWxlID0JCVRISVNfTU9EVUxFLAorCS50cmFja19xdWV1ZV9kZXB0aCA9CTEsCisJLmNtZF9zaXplID0JCXNpemVvZihzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCksCiB9OwogCiBzdGF0aWMgaW50IHNkZWJ1Z19kcml2ZXJfcHJvYmUoc3RydWN0IGRldmljZSAqIGRldikKIHsKLSAgICAgICAgaW50IGVycm9yID0gMDsKLSAgICAgICAgc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKnNkYmdfaG9zdDsKLSAgICAgICAgc3RydWN0IFNjc2lfSG9zdCAqaHBudDsKKwlpbnQgZXJyb3IgPSAwOworCWludCBvcHRzOworCXN0cnVjdCBzZGVidWdfaG9zdF9pbmZvICpzZGJnX2hvc3Q7CisJc3RydWN0IFNjc2lfSG9zdCAqaHBudDsKIAlpbnQgaG9zdF9wcm90OwogCiAJc2RiZ19ob3N0ID0gdG9fc2RlYnVnX2hvc3QoZGV2KTsKQEAgLTQ2MDMsNyArNTI0NCw3IEBACiAJCXNkZWJ1Z19kcml2ZXJfdGVtcGxhdGUudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORzsKIAlocG50ID0gc2NzaV9ob3N0X2FsbG9jKCZzZGVidWdfZHJpdmVyX3RlbXBsYXRlLCBzaXplb2Yoc2RiZ19ob3N0KSk7CiAJaWYgKE5VTEwgPT0gaHBudCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzY3NpX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlwcl9lcnIoIiVzOiBzY3NpX2hvc3RfYWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWVycm9yID0gLUVOT0RFVjsKIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTQ2NjAsNiArNTMwMSwxOCBAQAogCWVsc2UKIAkJc2NzaV9ob3N0X3NldF9ndWFyZChocG50LCBTSE9TVF9ESVhfR1VBUkRfQ1JDKTsKIAorCW9wdHMgPSBzY3NpX2RlYnVnX29wdHM7CisJaWYgKFNDU0lfREVCVUdfT1BUX1JFQ09WRVJFRF9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX1RSQU5TUE9SVF9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJRl9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJWF9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX1NIT1JUX1RSQU5TRkVSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwogICAgICAgICBlcnJvciA9IHNjc2lfYWRkX2hvc3QoaHBudCwgJnNkYmdfaG9zdC0+ZGV2KTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogc2NzaV9hZGRfaG9zdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IGJjNWZmNmYuLmU0MmZmZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9pb2N0bC5oPgorI2luY2x1ZGUgPHNjc2kvc2cuaD4KIAogI2luY2x1ZGUgInNjc2lfcHJpdi5oIgogI2luY2x1ZGUgInNjc2lfbG9nZ2luZy5oIgpAQCAtMTU3LDggKzE1OCw5IEBACiAJCX0gZWxzZSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAogCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKLQkJCQkJICAgICJzY21kICVwIGFib3J0IGZhaWxlZCwgcnRuICVkXG4iLAotCQkJCQkgICAgc2NtZCwgcnRuKSk7CisJCQkJCSAgICAic2NtZCAlcCBhYm9ydCAlc1xuIiwgc2NtZCwKKwkJCQkJICAgIChydG4gPT0gRkFTVF9JT19GQUlMKSA/CisJCQkJCSAgICAibm90IHNlbmQiIDogImZhaWxlZCIpKTsKIAkJfQogCX0KIApAQCAtMzU1LDcgKzM1Nyw3IEBACiAKIAkJaWYgKGNtZF9jYW5jZWwgfHwgY21kX2ZhaWxlZCkgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKLQkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCiAJCQkJCSAgICAiJXM6IGNtZHMgZmFpbGVkOiAlZCwgY2FuY2VsOiAlZFxuIiwKIAkJCQkJICAgIF9fZnVuY19fLCBjbWRfZmFpbGVkLAogCQkJCQkgICAgY21kX2NhbmNlbCkpOwpAQCAtNjA4LDcgKzYxMCw3IEBACiAJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0ID0gc2Rldi0+aG9zdC0+aG9zdHQ7CiAJc3RydWN0IHNjc2lfZGV2aWNlICp0bXBfc2RldjsKIAotCWlmICghc2h0LT5jaGFuZ2VfcXVldWVfZGVwdGggfHwKKwlpZiAoIXNodC0+dHJhY2tfcXVldWVfZGVwdGggfHwKIAkgICAgc2Rldi0+cXVldWVfZGVwdGggPj0gc2Rldi0+bWF4X3F1ZXVlX2RlcHRoKQogCQlyZXR1cm47CiAKQEAgLTYyOSwxMiArNjMxLDggQEAKIAkJICAgIHRtcF9zZGV2LT5pZCAhPSBzZGV2LT5pZCB8fAogCQkgICAgdG1wX3NkZXYtPnF1ZXVlX2RlcHRoID09IHNkZXYtPm1heF9xdWV1ZV9kZXB0aCkKIAkJCWNvbnRpbnVlOwotCQkvKgotCQkgKiBjYWxsIGJhY2sgaW50byBMTEQgdG8gaW5jcmVhc2UgcXVldWVfZGVwdGggYnkgb25lCi0JCSAqIHdpdGggcmFtcCB1cCByZWFzb24gY29kZS4KLQkJICovCi0JCXNodC0+Y2hhbmdlX3F1ZXVlX2RlcHRoKHRtcF9zZGV2LCB0bXBfc2Rldi0+cXVldWVfZGVwdGggKyAxLAotCQkJCQlTQ1NJX1FERVBUSF9SQU1QX1VQKTsKKworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCh0bXBfc2RldiwgdG1wX3NkZXYtPnF1ZXVlX2RlcHRoICsgMSk7CiAJCXNkZXYtPmxhc3RfcXVldWVfcmFtcF91cCA9IGppZmZpZXM7CiAJfQogfQpAQCAtNjQ0LDcgKzY0Miw3IEBACiAJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0ID0gc2Rldi0+aG9zdC0+aG9zdHQ7CiAJc3RydWN0IHNjc2lfZGV2aWNlICp0bXBfc2RldjsKIAotCWlmICghc2h0LT5jaGFuZ2VfcXVldWVfZGVwdGgpCisJaWYgKCFzaHQtPnRyYWNrX3F1ZXVlX2RlcHRoKQogCQlyZXR1cm47CiAKIAlzaG9zdF9mb3JfZWFjaF9kZXZpY2UodG1wX3NkZXYsIHNkZXYtPmhvc3QpIHsKQEAgLTY1Niw4ICs2NTQsNyBAQAogCQkgKiB0aGUgZGV2aWNlIHdoZW4gd2UgZ290IHRoZSBxdWV1ZSBmdWxsIHNvIHdlIHN0YXJ0CiAJCSAqIGZyb20gdGhlIGhpZ2hlc3QgcG9zc2libGUgdmFsdWUgYW5kIHdvcmsgb3VyIHdheSBkb3duLgogCQkgKi8KLQkJc2h0LT5jaGFuZ2VfcXVldWVfZGVwdGgodG1wX3NkZXYsIHRtcF9zZGV2LT5xdWV1ZV9kZXB0aCAtIDEsCi0JCQkJCVNDU0lfUURFUFRIX1FGVUxMKTsKKwkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHRtcF9zZGV2LCB0bXBfc2Rldi0+cXVldWVfZGVwdGggLSAxKTsKIAl9CiB9CiAKQEAgLTg2OSw3ICs4NjYsMjQgQEAKIAlyZXR1cm4gcnRuOwogfQogCi1zdGF0aWMgaW50IHNjc2lfdHJ5X3RvX2Fib3J0X2NtZChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0dCwgc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKKy8qKgorICogc2NzaV90cnlfdG9fYWJvcnRfY21kIC0gQXNrIGhvc3QgdG8gYWJvcnQgYSBTQ1NJIGNvbW1hbmQKKyAqIEBzY21kOglTQ1NJIGNtZCB1c2VkIHRvIHNlbmQgYSB0YXJnZXQgcmVzZXQKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKglTVUNDRVNTLCBGQUlMRUQsIG9yIEZBU1RfSU9fRkFJTAorICoKKyAqIE5vdGVzOgorICogICAgU1VDQ0VTUyBkb2VzIG5vdCBuZWNlc3NhcmlseSBpbmRpY2F0ZSB0aGF0IHRoZSBjb21tYW5kCisgKiAgICBoYXMgYmVlbiBhYm9ydGVkOyBpdCBvbmx5IGluZGljYXRlcyB0aGF0IHRoZSBMTEREcworICogICAgaGFzIGNsZWFyZWQgYWxsIHJlZmVyZW5jZXMgdG8gdGhhdCBjb21tYW5kLgorICogICAgTExERHMgc2hvdWxkIHJldHVybiBGQUlMRUQgb25seSBpZiBhbiBhYm9ydCB3YXMgcmVxdWlyZWQKKyAqICAgIGJ1dCBjb3VsZCBub3QgYmUgZXhlY3V0ZWQuIExMRERzIHNob3VsZCByZXR1cm4gRkFTVF9JT19GQUlMCisgKiAgICBpZiB0aGUgZGV2aWNlIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIChlZyBkdWUgdG8gYQorICogICAgbGluayBkb3duIG9uIEZpYnJlQ2hhbm5lbCkKKyAqLworc3RhdGljIGludCBzY3NpX3RyeV90b19hYm9ydF9jbWQoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdHQsCisJCQkJIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7CiAJaWYgKCFob3N0dC0+ZWhfYWJvcnRfaGFuZGxlcikKIAkJcmV0dXJuIEZBSUxFRDsKQEAgLTExNTYsOSArMTE3MCw5IEBACiAJCXNob3N0ID0gc2NtZC0+ZGV2aWNlLT5ob3N0OwogCQlpZiAoc2NzaV9ob3N0X2VoX3Bhc3RfZGVhZGxpbmUoc2hvc3QpKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmVcbiIsCi0JCQkJCSAgICAgX19mdW5jX18pKTsKKwkJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCisJCQkJCSAgICAiJXM6IHNraXAgcmVxdWVzdCBzZW5zZSwgcGFzdCBlaCBkZWFkbGluZVxuIiwKKwkJCQkJICAgICBjdXJyZW50LT5jb21tKSk7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSAhPSBDSEVDS19DT05ESVRJT04pCkBAIC0xMTgwLDcgKzExOTQsNyBAQAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCiAJCQkic2Vuc2UgcmVxdWVzdGVkIGZvciAlcCByZXN1bHQgJXhcbiIsCiAJCQlzY21kLCBzY21kLT5yZXN1bHQpKTsKLQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywgc2NzaV9wcmludF9zZW5zZSgiYmgiLCBzY21kKSk7CisJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsIHNjc2lfcHJpbnRfc2Vuc2Uoc2NtZCkpOwogCiAJCXJ0biA9IHNjc2lfZGVjaWRlX2Rpc3Bvc2l0aW9uKHNjbWQpOwogCkBAIC0xMjY1LDkgKzEyNzksOSBAQAogCQkJCS8qIFB1c2ggaXRlbXMgYmFjayBvbnRvIHdvcmtfcSAqLwogCQkJCWxpc3Rfc3BsaWNlX2luaXQoY21kX2xpc3QsIHdvcmtfcSk7CiAJCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKLQkJCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2Rldi0+aG9zdCwKLQkJCQkJCSAgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmUiLAotCQkJCQkJICAgICBfX2Z1bmNfXykpOworCQkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJCQkgICAgIiVzOiBza2lwIHRlc3QgZGV2aWNlLCBwYXN0IGVoIGRlYWRsaW5lIiwKKwkJCQkJCSAgICBjdXJyZW50LT5jb21tKSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTEzMTgsMjEgKzEzMzIsMjAgQEAKIAkJaWYgKHNjc2lfaG9zdF9laF9wYXN0X2RlYWRsaW5lKHNob3N0KSkgewogCQkJbGlzdF9zcGxpY2VfaW5pdCgmY2hlY2tfbGlzdCwgd29ya19xKTsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJCSAgICAic2tpcCAlcywgcGFzdCBlaCBkZWFkbGluZVxuIiwKLQkJCQkJICAgICBfX2Z1bmNfXykpOworCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKKwkJCQkJICAgICIlczogc2tpcCBhYm9ydGluZyBjbWQsIHBhc3QgZWggZGVhZGxpbmVcbiIsCisJCQkJCSAgICBjdXJyZW50LT5jb21tKSk7CiAJCQlyZXR1cm4gbGlzdF9lbXB0eSh3b3JrX3EpOwogCQl9CiAJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaG9zdCwKLQkJCQkgICAgICIlczogYWJvcnRpbmcgY21kOiAweCVwXG4iLAotCQkJCSAgICAgY3VycmVudC0+Y29tbSwgc2NtZCkpOworCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAorCQkJCSAgICAgIiVzOiBhYm9ydGluZyBjbWRcbiIsIGN1cnJlbnQtPmNvbW0pKTsKIAkJcnRuID0gc2NzaV90cnlfdG9fYWJvcnRfY21kKHNob3N0LT5ob3N0dCwgc2NtZCk7CiAJCWlmIChydG4gPT0gRkFJTEVEKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgICIlczogYWJvcnRpbmcgY21kIGZhaWxlZDogMHglcFxuIiwKLQkJCQkJICAgICBjdXJyZW50LT5jb21tLCBzY21kKSk7CisJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAorCQkJCQkgICAgIiVzOiBhYm9ydGluZyBjbWQgZmFpbGVkXG4iLAorCQkJCQkgICAgIGN1cnJlbnQtPmNvbW0pKTsKIAkJCWxpc3Rfc3BsaWNlX2luaXQoJmNoZWNrX2xpc3QsIHdvcmtfcSk7CiAJCQlyZXR1cm4gbGlzdF9lbXB0eSh3b3JrX3EpOwogCQl9CkBAIC0xMzkwLDkgKzE0MDMsOSBAQAogCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkgewogCQlpZiAoc2NzaV9ob3N0X2VoX3Bhc3RfZGVhZGxpbmUoc2hvc3QpKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmVcbiIsCi0JCQkJCSAgICAgX19mdW5jX18pKTsKKwkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJCSAgICAiJXM6IHNraXAgU1RBUlRfVU5JVCwgcGFzdCBlaCBkZWFkbGluZVxuIiwKKwkJCQkJICAgIGN1cnJlbnQtPmNvbW0pKTsKIAkJCWJyZWFrOwogCQl9CiAJCXN0dV9zY21kID0gTlVMTDsKQEAgLTE0MDcsOSArMTQyMCw5IEBACiAJCQljb250aW51ZTsKIAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJICAgICAiJXM6IFNlbmRpbmcgU1RBUlRfVU5JVCB0byBzZGV2OiAweCVwXG4iLAotCQkJCSAgICAgY3VycmVudC0+Y29tbSwgc2RldikpOworCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAorCQkJCSAgICAgIiVzOiBTZW5kaW5nIFNUQVJUX1VOSVRcbiIsCisJCQkJICAgIGN1cnJlbnQtPmNvbW0pKTsKIAogCQlpZiAoIXNjc2lfZWhfdHJ5X3N0dShzdHVfc2NtZCkpIHsKIAkJCWlmICghc2NzaV9kZXZpY2Vfb25saW5lKHNkZXYpIHx8CkBAIC0xNDIzLDkgKzE0MzYsOSBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKLQkJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaG9zdCwKLQkJCQkJICAgICAiJXM6IFNUQVJUX1VOSVQgZmFpbGVkIHRvIHNkZXY6IgotCQkJCQkgICAgICIgMHglcFxuIiwgY3VycmVudC0+Y29tbSwgc2RldikpOworCQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCQkJICAgICIlczogU1RBUlRfVU5JVCBmYWlsZWRcbiIsCisJCQkJCSAgICBjdXJyZW50LT5jb21tKSk7CiAJCX0KIAl9CiAKQEAgLTE0NTYsOSArMTQ2OSw5IEBACiAJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIHNob3N0KSB7CiAJCWlmIChzY3NpX2hvc3RfZWhfcGFzdF9kZWFkbGluZShzaG9zdCkpIHsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJCSAgICAic2tpcCAlcywgcGFzdCBlaCBkZWFkbGluZVxuIiwKLQkJCQkJICAgICBfX2Z1bmNfXykpOworCQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCQkJICAgICIlczogc2tpcCBCRFIsIHBhc3QgZWggZGVhZGxpbmVcbiIsCisJCQkJCSAgICAgY3VycmVudC0+Y29tbSkpOwogCQkJYnJlYWs7CiAJCX0KIAkJYmRyX3NjbWQgPSBOVUxMOwpAQCAtMTQ3Miw5ICsxNDg1LDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaG9zdCwKLQkJCQkgICAgICIlczogU2VuZGluZyBCRFIgc2RldjogMHglcFxuIiwKLQkJCQkgICAgIGN1cnJlbnQtPmNvbW0sIHNkZXYpKTsKKwkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCQkgICAgICIlczogU2VuZGluZyBCRFJcbiIsIGN1cnJlbnQtPmNvbW0pKTsKIAkJcnRuID0gc2NzaV90cnlfYnVzX2RldmljZV9yZXNldChiZHJfc2NtZCk7CiAJCWlmIChydG4gPT0gU1VDQ0VTUyB8fCBydG4gPT0gRkFTVF9JT19GQUlMKSB7CiAJCQlpZiAoIXNjc2lfZGV2aWNlX29ubGluZShzZGV2KSB8fApAQCAtMTQ5MCw5ICsxNTAyLDggQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJCSAgICAgIiVzOiBCRFIgZmFpbGVkIHNkZXY6IDB4JXBcbiIsCi0JCQkJCSAgICAgY3VycmVudC0+Y29tbSwgc2RldikpOworCQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCQkJICAgICIlczogQkRSIGZhaWxlZFxuIiwgY3VycmVudC0+Y29tbSkpOwogCQl9CiAJfQogCkBAIC0xNTI4LDggKzE1MzksOCBAQAogCQkJbGlzdF9zcGxpY2VfaW5pdCgmdG1wX2xpc3QsIHdvcmtfcSk7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAogCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmVcbiIsCi0JCQkJCSAgICAgX19mdW5jX18pKTsKKwkJCQkJICAgICIlczogU2tpcCB0YXJnZXQgcmVzZXQsIHBhc3QgZWggZGVhZGxpbmVcbiIsCisJCQkJCSAgICAgY3VycmVudC0+Y29tbSkpOwogCQkJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIAkJfQogCkBAIC0xNTkxLDggKzE2MDIsOCBAQAogCQkJbGlzdF9zcGxpY2VfaW5pdCgmY2hlY2tfbGlzdCwgd29ya19xKTsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCiAJCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJCSAgICAic2tpcCAlcywgcGFzdCBlaCBkZWFkbGluZVxuIiwKLQkJCQkJICAgICBfX2Z1bmNfXykpOworCQkJCQkgICAgIiVzOiBza2lwIEJSU1QsIHBhc3QgZWggZGVhZGxpbmVcbiIsCisJCQkJCSAgICAgY3VycmVudC0+Y29tbSkpOwogCQkJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIAkJfQogCkBAIC0yMTkzLDkgKzIyMDQsOSBAQAogCQkgKi8KIAkJaWYgKCFzaG9zdC0+ZWhfbm9yZXN1bWUgJiYgc2NzaV9hdXRvcG1fZ2V0X2hvc3Qoc2hvc3QpICE9IDApIHsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDEsCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBoYW5kbGVyIHNjc2lfZWhfJWQgIgotCQkJCQkJInVuYWJsZSB0byBhdXRvcmVzdW1lXG4iLAotCQkJCQkJc2hvc3QtPmhvc3Rfbm8pKTsKKwkJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHNob3N0LAorCQkJCQkgICAgICJzY3NpX2VoXyVkOiB1bmFibGUgdG8gYXV0b3Jlc3VtZVxuIiwKKwkJCQkJICAgICBzaG9zdC0+aG9zdF9ubykpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMjI5Niw0MiArMjMwNywzNCBAQAogewogfQogCi0vKgotICogRnVuY3Rpb246CXNjc2lfcmVzZXRfcHJvdmlkZXIKLSAqCi0gKiBQdXJwb3NlOglTZW5kIHJlcXVlc3RlZCByZXNldCB0byBhIGJ1cyBvciBkZXZpY2UgYXQgYW55IHBoYXNlLgotICoKLSAqIEFyZ3VtZW50czoJZGV2aWNlCS0gZGV2aWNlIHRvIHNlbmQgcmVzZXQgdG8KLSAqCQlmbGFnIC0gcmVzZXQgdHlwZSAoc2VlIHNjc2kuaCkKLSAqCi0gKiBSZXR1cm5zOglTVUNDRVNTL0ZBSUxVUkUuCi0gKgotICogTm90ZXM6CVRoaXMgaXMgdXNlZCBieSB0aGUgU0NTSSBHZW5lcmljIGRyaXZlciB0byBwcm92aWRlCi0gKgkJQnVzL0RldmljZSByZXNldCBjYXBhYmlsaXR5LgorLyoqCisgKiBzY3NpX2lvY3RsX3Jlc2V0OiBleHBsaWNpdGx5IHJlc2V0IGEgaG9zdC9idXMvdGFyZ2V0L2RldmljZQorICogQGRldjoJc2NzaV9kZXZpY2UgdG8gb3BlcmF0ZSBvbgorICogQGFyZzoJcmVzZXQgdHlwZSAoc2VlIHNnLmgpCiAgKi8KIGludAotc2NzaV9yZXNldF9wcm92aWRlcihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGZsYWcpCitzY3NpX2lvY3RsX3Jlc2V0KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgX191c2VyICphcmcpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldi0+aG9zdDsKIAlzdHJ1Y3QgcmVxdWVzdCByZXE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcnRuOworCWludCBlcnJvciA9IDAsIHJ0biwgdmFsOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8ICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCWVycm9yID0gZ2V0X3VzZXIodmFsLCBhcmcpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKHNjc2lfYXV0b3BtX2dldF9ob3N0KHNob3N0KSA8IDApCi0JCXJldHVybiBGQUlMRUQ7CisJCXJldHVybiAtRUlPOwogCi0JaWYgKCFnZXRfZGV2aWNlKCZkZXYtPnNkZXZfZ2VuZGV2KSkgewotCQlydG4gPSBGQUlMRUQ7Ci0JCWdvdG8gb3V0X3B1dF9hdXRvcG1faG9zdDsKLQl9Ci0KKwllcnJvciA9IC1FSU87CiAJc2NtZCA9IHNjc2lfZ2V0X2NvbW1hbmQoZGV2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNjbWQpIHsKLQkJcnRuID0gRkFJTEVEOwotCQlwdXRfZGV2aWNlKCZkZXYtPnNkZXZfZ2VuZGV2KTsKKwlpZiAoIXNjbWQpCiAJCWdvdG8gb3V0X3B1dF9hdXRvcG1faG9zdDsKLQl9CiAKIAlibGtfcnFfaW5pdChOVUxMLCAmcmVxKTsKIAlzY21kLT5yZXF1ZXN0ID0gJnJlcTsKQEAgLTIzNDksMjkgKzIzNTIsMzcgQEAKIAlzaG9zdC0+dG1mX2luX3Byb2dyZXNzID0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAotCXN3aXRjaCAoZmxhZykgewotCWNhc2UgU0NTSV9UUllfUkVTRVRfREVWSUNFOgotCQlydG4gPSBzY3NpX3RyeV9idXNfZGV2aWNlX3Jlc2V0KHNjbWQpOwotCQlpZiAocnRuID09IFNVQ0NFU1MpCi0JCQlicmVhazsKLQkJLyogRkFMTFRIUk9VR0ggKi8KLQljYXNlIFNDU0lfVFJZX1JFU0VUX1RBUkdFVDoKLQkJcnRuID0gc2NzaV90cnlfdGFyZ2V0X3Jlc2V0KHNjbWQpOwotCQlpZiAocnRuID09IFNVQ0NFU1MpCi0JCQlicmVhazsKLQkJLyogRkFMTFRIUk9VR0ggKi8KLQljYXNlIFNDU0lfVFJZX1JFU0VUX0JVUzoKLQkJcnRuID0gc2NzaV90cnlfYnVzX3Jlc2V0KHNjbWQpOwotCQlpZiAocnRuID09IFNVQ0NFU1MpCi0JCQlicmVhazsKLQkJLyogRkFMTFRIUk9VR0ggKi8KLQljYXNlIFNDU0lfVFJZX1JFU0VUX0hPU1Q6Ci0JCXJ0biA9IHNjc2lfdHJ5X2hvc3RfcmVzZXQoc2NtZCk7CisJc3dpdGNoICh2YWwgJiB+U0dfU0NTSV9SRVNFVF9OT19FU0NBTEFURSkgeworCWNhc2UgU0dfU0NTSV9SRVNFVF9OT1RISU5HOgorCQlydG4gPSBTVUNDRVNTOwogCQlicmVhazsKKwljYXNlIFNHX1NDU0lfUkVTRVRfREVWSUNFOgorCQlydG4gPSBzY3NpX3RyeV9idXNfZGV2aWNlX3Jlc2V0KHNjbWQpOworCQlpZiAocnRuID09IFNVQ0NFU1MgfHwgKHZhbCAmIFNHX1NDU0lfUkVTRVRfTk9fRVNDQUxBVEUpKQorCQkJYnJlYWs7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBTR19TQ1NJX1JFU0VUX1RBUkdFVDoKKwkJcnRuID0gc2NzaV90cnlfdGFyZ2V0X3Jlc2V0KHNjbWQpOworCQlpZiAocnRuID09IFNVQ0NFU1MgfHwgKHZhbCAmIFNHX1NDU0lfUkVTRVRfTk9fRVNDQUxBVEUpKQorCQkJYnJlYWs7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBTR19TQ1NJX1JFU0VUX0JVUzoKKwkJcnRuID0gc2NzaV90cnlfYnVzX3Jlc2V0KHNjbWQpOworCQlpZiAocnRuID09IFNVQ0NFU1MgfHwgKHZhbCAmIFNHX1NDU0lfUkVTRVRfTk9fRVNDQUxBVEUpKQorCQkJYnJlYWs7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBTR19TQ1NJX1JFU0VUX0hPU1Q6CisJCXJ0biA9IHNjc2lfdHJ5X2hvc3RfcmVzZXQoc2NtZCk7CisJCWlmIChydG4gPT0gU1VDQ0VTUykKKwkJCWJyZWFrOwogCWRlZmF1bHQ6CisJCS8qIEZBTExUSFJPVUdIICovCiAJCXJ0biA9IEZBSUxFRDsKKwkJYnJlYWs7CiAJfQogCisJZXJyb3IgPSAocnRuID09IFNVQ0NFU1MpID8gMCA6IC1FSU87CisKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJc2hvc3QtPnRtZl9pbl9wcm9ncmVzcyA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC0yMzg1LDE1ICsyMzk2LDE1IEBACiAJCQkgICAgICJ3YWtpbmcgdXAgaG9zdCB0byByZXN0YXJ0IGFmdGVyIFRNRlxuIikpOwogCiAJd2FrZV91cCgmc2hvc3QtPmhvc3Rfd2FpdCk7Ci0KIAlzY3NpX3J1bl9ob3N0X3F1ZXVlcyhzaG9zdCk7CiAKLQlzY3NpX25leHRfY29tbWFuZChzY21kKTsKKwlzY3NpX3B1dF9jb21tYW5kKHNjbWQpOworCiBvdXRfcHV0X2F1dG9wbV9ob3N0OgogCXNjc2lfYXV0b3BtX3B1dF9ob3N0KHNob3N0KTsKLQlyZXR1cm4gcnRuOworCXJldHVybiBlcnJvcjsKIH0KLUVYUE9SVF9TWU1CT0woc2NzaV9yZXNldF9wcm92aWRlcik7CitFWFBPUlRfU1lNQk9MKHNjc2lfaW9jdGxfcmVzZXQpOwogCiAvKioKICAqIHNjc2lfbm9ybWFsaXplX3NlbnNlIC0gbm9ybWFsaXplIG1haW4gZWxlbWVudHMgZnJvbSBlaXRoZXIgZml4ZWQgb3IKQEAgLTI0MTIsMjAgKzI0MjMsMjAgQEAKICAqCXJlc3BvbmRlZCB0byBhIFNDU0kgY29tbWFuZCB3aXRoIHRoZSBDSEVDS19DT05ESVRJT04gc3RhdHVzLgogICoKICAqIFJldHVybiB2YWx1ZToKLSAqCTEgaWYgdmFsaWQgc2Vuc2UgZGF0YSBpbmZvcm1hdGlvbiBmb3VuZCwgZWxzZSAwOworICoJdHJ1ZSBpZiB2YWxpZCBzZW5zZSBkYXRhIGluZm9ybWF0aW9uIGZvdW5kLCBlbHNlIGZhbHNlOwogICovCi1pbnQgc2NzaV9ub3JtYWxpemVfc2Vuc2UoY29uc3QgdTggKnNlbnNlX2J1ZmZlciwgaW50IHNiX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQorYm9vbCBzY3NpX25vcm1hbGl6ZV9zZW5zZShjb25zdCB1OCAqc2Vuc2VfYnVmZmVyLCBpbnQgc2JfbGVuLAorCQkJICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQogewogCWlmICghc2Vuc2VfYnVmZmVyIHx8ICFzYl9sZW4pCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAltZW1zZXQoc3NoZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIpKTsKIAogCXNzaGRyLT5yZXNwb25zZV9jb2RlID0gKHNlbnNlX2J1ZmZlclswXSAmIDB4N2YpOwogCiAJaWYgKCFzY3NpX3NlbnNlX3ZhbGlkKHNzaGRyKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWlmIChzc2hkci0+cmVzcG9uc2VfY29kZSA+PSAweDcyKSB7CiAJCS8qCkBAIC0yNDU1LDEyICsyNDY2LDEyIEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9ub3JtYWxpemVfc2Vuc2UpOwogCi1pbnQgc2NzaV9jb21tYW5kX25vcm1hbGl6ZV9zZW5zZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCQkJIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCitib29sIHNjc2lfY29tbWFuZF9ub3JtYWxpemVfc2Vuc2UoY29uc3Qgc3RydWN0IHNjc2lfY21uZCAqY21kLAorCQkJCSAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKIHsKIAlyZXR1cm4gc2NzaV9ub3JtYWxpemVfc2Vuc2UoY21kLT5zZW5zZV9idWZmZXIsCiAJCQlTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIHNzaGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCmluZGV4IDFhYWFmNDMuLmM0ZjdiNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCiAJCQkJICAgICJpb2N0bF9pbnRlcm5hbF9jb21tYW5kIHJldHVybiBjb2RlID0gJXhcbiIsCiAJCQkJICAgIHJlc3VsdCk7Ci0JCQlzY3NpX3ByaW50X3NlbnNlX2hkcigiICAgIiwgJnNzaGRyKTsKKwkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKHNkZXYsIE5VTEwsICZzc2hkcik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTIwMCwxOSArMjAwLDYgQEAKIHsKIAljaGFyIHNjc2lfY21kW01BWF9DT01NQU5EX1NJWkVdOwogCi0JLyogTm8gaWRlYSBob3cgdGhpcyBoYXBwZW5zLi4uLiAqLwotCWlmICghc2RldikKLQkJcmV0dXJuIC1FTlhJTzsKLQotCS8qCi0JICogSWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgZXJyb3IgcmVjb3ZlcnksIGRvbid0IGxldCBhbnlvbmUKLQkgKiBlbHNlIHRyeSBhbmQgdXNlIHRoaXMgZGV2aWNlLiAgQWxzbywgaWYgZXJyb3IgcmVjb3ZlcnkgZmFpbHMsIGl0Ci0JICogbWF5IHRyeSBhbmQgdGFrZSB0aGUgZGV2aWNlIG9mZmxpbmUsIGluIHdoaWNoIGNhc2UgYWxsIGZ1cnRoZXIKLQkgKiBhY2Nlc3MgdG8gdGhlIGRldmljZSBpcyBwcm9oaWJpdGVkLgotCSAqLwotCWlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCS8qIENoZWNrIGZvciBkZXByZWNhdGVkIGlvY3RscyAuLi4gYWxsIHRoZSBpb2N0bHMgd2hpY2ggZG9uJ3QKIAkgKiBmb2xsb3cgdGhlIG5ldyB1bmlxdWUgbnVtYmVyaW5nIHNjaGVtZSBhcmUgZGVwcmVjYXRlZCAqLwogCXN3aXRjaCAoY21kKSB7CkBAIC0yNzMsNiArMjYwLDggQEAKIAkJCQkgICAgIFNUQVJUX1NUT1BfVElNRU9VVCwgTk9STUFMX1JFVFJJRVMpOwogICAgICAgICBjYXNlIFNDU0lfSU9DVExfR0VUX1BDSToKICAgICAgICAgICAgICAgICByZXR1cm4gc2NzaV9pb2N0bF9nZXRfcGNpKHNkZXYsIGFyZyk7CisJY2FzZSBTR19TQ1NJX1JFU0VUOgorCQlyZXR1cm4gc2NzaV9pb2N0bF9yZXNldChzZGV2LCBhcmcpOwogCWRlZmF1bHQ6CiAJCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+aW9jdGwpCiAJCQlyZXR1cm4gc2Rldi0+aG9zdC0+aG9zdHQtPmlvY3RsKHNkZXYsIGNtZCwgYXJnKTsKQEAgLTI4MSw1NSArMjcwLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfaW9jdGwpOwogCi0vKioKLSAqIHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKCkgLSBIYW5kbGUgU0dfU0NTSV9SRVNFVAotICogQHNkZXY6IHNjc2kgZGV2aWNlIHJlY2VpdmluZyBpb2N0bAotICogQGNtZDogTXVzdCBiZSBTQ19TQ1NJX1JFU0VUCi0gKiBAYXJnOiBwb2ludGVyIHRvIGludCBjb250YWluaW5nIFNHX1NDU0lfUkVTRVRfe0RFVklDRSxCVVMsSE9TVH0KLSAqIEBuZGVsYXk6IGZpbGUgbW9kZSBPX05ERUxBWSBmbGFnCisvKgorICogV2UgY2FuIHByb2Nlc3MgYSByZXNldCBldmVuIHdoZW4gYSBkZXZpY2UgaXNuJ3QgZnVsbHkgb3BlcmFibGUuCiAgKi8KLWludCBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBjbWQsCi0JCQkgICAgdm9pZCBfX3VzZXIgKmFyZywgaW50IG5kZWxheSkKK2ludCBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgY21kLAorCQlib29sIG5kZWxheSkKIHsKLQlpbnQgdmFsLCByZXN1bHQ7Ci0KLQkvKiBUaGUgZmlyc3Qgc2V0IG9mIGlvY3RzIG1heSBiZSBleGVjdXRlZCBldmVuIGlmIHdlJ3JlIGRvaW5nCi0JICogZXJyb3IgcHJvY2Vzc2luZywgYXMgbG9uZyBhcyB0aGUgZGV2aWNlIHdhcyBvcGVuZWQKLQkgKiBub24tYmxvY2tpbmcgKi8KLQlpZiAobmRlbGF5KSB7CisJaWYgKGNtZCA9PSBTR19TQ1NJX1JFU0VUICYmIG5kZWxheSkgewogCQlpZiAoc2NzaV9ob3N0X2luX3JlY292ZXJ5KHNkZXYtPmhvc3QpKQorCQkJcmV0dXJuIC1FQUdBSU47CisJfSBlbHNlIHsKKwkJaWYgKCFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RldikpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQl9IGVsc2UgaWYgKCFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RldikpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNHX1NDU0lfUkVTRVQ6Ci0JCXJlc3VsdCA9IGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpOwotCQlpZiAocmVzdWx0KQotCQkJcmV0dXJuIHJlc3VsdDsKLQkJaWYgKHZhbCA9PSBTR19TQ1NJX1JFU0VUX05PVEhJTkcpCi0JCQlyZXR1cm4gMDsKLQkJc3dpdGNoICh2YWwpIHsKLQkJY2FzZSBTR19TQ1NJX1JFU0VUX0RFVklDRToKLQkJCXZhbCA9IFNDU0lfVFJZX1JFU0VUX0RFVklDRTsKLQkJCWJyZWFrOwotCQljYXNlIFNHX1NDU0lfUkVTRVRfVEFSR0VUOgotCQkJdmFsID0gU0NTSV9UUllfUkVTRVRfVEFSR0VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0dfU0NTSV9SRVNFVF9CVVM6Ci0JCQl2YWwgPSBTQ1NJX1RSWV9SRVNFVF9CVVM7Ci0JCQlicmVhazsKLQkJY2FzZSBTR19TQ1NJX1JFU0VUX0hPU1Q6Ci0JCQl2YWwgPSBTQ1NJX1RSWV9SRVNFVF9IT1NUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0JCQlyZXR1cm4gLUVBQ0NFUzsKLQkJcmV0dXJuIChzY3NpX3Jlc2V0X3Byb3ZpZGVyKHNkZXYsIHZhbCkgPT0KLQkJCVNVQ0NFU1MpID8gMCA6IC1FSU87CiAJfQotCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNjc2lfaW9jdGxfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDUwYTZlMWEuLjdlM2Q5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrLW1xLmg+CisjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgpAQCAtNDcsNyArNDgsNyBAQAogCW1lbXBvb2xfdAkqcG9vbDsKIH07CiAKLSNkZWZpbmUgU1AoeCkgeyB4LCAic2dwb29sLSIgX19zdHJpbmdpZnkoeCkgfQorI2RlZmluZSBTUCh4KSB7IC5zaXplID0geCwgInNncG9vbC0iIF9fc3RyaW5naWZ5KHgpIH0KICNpZiAoU0NTSV9NQVhfU0dfU0VHTUVOVFMgPCAzMikKICNlcnJvciBTQ1NJX01BWF9TR19TRUdNRU5UUyBpcyB0b28gc21hbGwgKG11c3QgYmUgMzIgb3IgZ3JlYXRlcikKICNlbmRpZgpAQCAtNTQyLDE3ICs1NDMsNiBAQAogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIH0KIAotdm9pZCBzY3NpX25leHRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY21kLT5kZXZpY2U7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzZGV2LT5yZXF1ZXN0X3F1ZXVlOwotCi0Jc2NzaV9wdXRfY29tbWFuZChjbWQpOwotCXNjc2lfcnVuX3F1ZXVlKHEpOwotCi0JcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwotfQotCiB2b2lkIHNjc2lfcnVuX2hvc3RfcXVldWVzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKQEAgLTU5OCwxMCArNTg4LDEwIEBACiAJX19zZ19mcmVlX3RhYmxlKCZzZGItPnRhYmxlLCBTQ1NJX01BWF9TR19TRUdNRU5UUywgbXEsIHNjc2lfc2dfZnJlZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2NzaV9hbGxvY19zZ3RhYmxlKHN0cnVjdCBzY3NpX2RhdGFfYnVmZmVyICpzZGIsIGludCBuZW50cywKLQkJCSAgICAgIGdmcF90IGdmcF9tYXNrLCBib29sIG1xKQorc3RhdGljIGludCBzY3NpX2FsbG9jX3NndGFibGUoc3RydWN0IHNjc2lfZGF0YV9idWZmZXIgKnNkYiwgaW50IG5lbnRzLCBib29sIG1xKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqZmlyc3RfY2h1bmsgPSBOVUxMOworCWdmcF90IGdmcF9tYXNrID0gbXEgPyBHRlBfTk9JTyA6IEdGUF9BVE9NSUM7CiAJaW50IHJldDsKIAogCUJVR19PTighbmVudHMpOwpAQCAtNzMwLDggKzcyMCw2IEBACiAJCQlrYmxvY2tkX3NjaGVkdWxlX3dvcmsoJnNkZXYtPnJlcXVldWVfd29yayk7CiAJCWVsc2UKIAkJCWJsa19tcV9zdGFydF9zdG9wcGVkX2h3X3F1ZXVlcyhxLCB0cnVlKTsKLQotCQlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNzQzLDkgKzczMSwxMiBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAogCQlzY3NpX3JlbGVhc2VfYnVmZmVycyhjbWQpOwotCQlzY3NpX25leHRfY29tbWFuZChjbWQpOworCisJCXNjc2lfcHV0X2NvbW1hbmQoY21kKTsKKwkJc2NzaV9ydW5fcXVldWUocSk7CiAJfQogCisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXJldHVybiBmYWxzZTsKIH0KIApAQCAtODMxLDggKzgyMiw4IEBACiAJc3RydWN0IHJlcXVlc3QgKnJlcSA9IGNtZC0+cmVxdWVzdDsKIAlpbnQgZXJyb3IgPSAwOwogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKLQlpbnQgc2Vuc2VfdmFsaWQgPSAwOwotCWludCBzZW5zZV9kZWZlcnJlZCA9IDA7CisJYm9vbCBzZW5zZV92YWxpZCA9IGZhbHNlOworCWludCBzZW5zZV9kZWZlcnJlZCA9IDAsIGxldmVsID0gMDsKIAllbnVtIHtBQ1RJT05fRkFJTCwgQUNUSU9OX1JFUFJFUCwgQUNUSU9OX1JFVFJZLAogCSAgICAgIEFDVElPTl9ERUxBWUVEX1JFVFJZfSBhY3Rpb247CiAJdW5zaWduZWQgbG9uZyB3YWl0X2ZvciA9IChjbWQtPmFsbG93ZWQgKyAxKSAqIHJlcS0+dGltZW91dDsKQEAgLTkxMiw3ICs5MDMsNyBAQAogCQlpZiAoKHNzaGRyLmFzYyA9PSAweDApICYmIChzc2hkci5hc2NxID09IDB4MWQpKQogCQkJOwogCQllbHNlIGlmICghKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkKLQkJCXNjc2lfcHJpbnRfc2Vuc2UoIiIsIGNtZCk7CisJCQlzY3NpX3ByaW50X3NlbnNlKGNtZCk7CiAJCXJlc3VsdCA9IDA7CiAJCS8qIEJMT0NLX1BDIG1heSBoYXZlIHNldCBlcnJvciAqLwogCQllcnJvciA9IDA7CkBAIC0xMDM5LDEwICsxMDMwLDI0IEBACiAJY2FzZSBBQ1RJT05fRkFJTDoKIAkJLyogR2l2ZSB1cCBhbmQgZmFpbCB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXF1ZXN0ICovCiAJCWlmICghKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkgewotCQkJc2NzaV9wcmludF9yZXN1bHQoY21kKTsKLQkJCWlmIChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX1NFTlNFKQotCQkJCXNjc2lfcHJpbnRfc2Vuc2UoIiIsIGNtZCk7Ci0JCQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKKwkJCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKF9ycywKKwkJCQkJREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsCisJCQkJCURFRkFVTFRfUkFURUxJTUlUX0JVUlNUKTsKKworCQkJaWYgKHVubGlrZWx5KHNjc2lfbG9nZ2luZ19sZXZlbCkpCisJCQkJbGV2ZWwgPSBTQ1NJX0xPR19MRVZFTChTQ1NJX0xPR19NTENPTVBMRVRFX1NISUZULAorCQkJCQkJICAgICAgIFNDU0lfTE9HX01MQ09NUExFVEVfQklUUyk7CisKKwkJCS8qCisJCQkgKiBpZiBsb2dnaW5nIGlzIGVuYWJsZWQgdGhlIGZhaWx1cmUgd2lsbCBiZSBwcmludGVkCisJCQkgKiBpbiBzY3NpX2xvZ19jb21wbGV0aW9uKCksIHNvIGF2b2lkIGR1cGxpY2F0ZSBtZXNzYWdlcworCQkJICovCisJCQlpZiAoIWxldmVsICYmIF9fcmF0ZWxpbWl0KCZfcnMpKSB7CisJCQkJc2NzaV9wcmludF9yZXN1bHQoY21kLCBOVUxMLCBGQUlMRUQpOworCQkJCWlmIChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX1NFTlNFKQorCQkJCQlzY3NpX3ByaW50X3NlbnNlKGNtZCk7CisJCQkJc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CisJCQl9CiAJCX0KIAkJaWYgKCFzY3NpX2VuZF9yZXF1ZXN0KHJlcSwgZXJyb3IsIGJsa19ycV9lcnJfYnl0ZXMocmVxKSwgMCkpCiAJCQlyZXR1cm47CkBAIC0xMDcyLDggKzEwNzcsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBzY3NpX2luaXRfc2d0YWJsZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3Qgc2NzaV9kYXRhX2J1ZmZlciAqc2RiLAotCQkJICAgICBnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyBpbnQgc2NzaV9pbml0X3NndGFibGUoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IHNjc2lfZGF0YV9idWZmZXIgKnNkYikKIHsKIAlpbnQgY291bnQ7CiAKQEAgLTEwODEsNyArMTA4NSw3IEBACiAJICogSWYgc2cgdGFibGUgYWxsb2NhdGlvbiBmYWlscywgcmVxdWV1ZSByZXF1ZXN0IGxhdGVyLgogCSAqLwogCWlmICh1bmxpa2VseShzY3NpX2FsbG9jX3NndGFibGUoc2RiLCByZXEtPm5yX3BoeXNfc2VnbWVudHMsCi0JCQkJCWdmcF9tYXNrLCByZXEtPm1xX2N0eCAhPSBOVUxMKSkpCisJCQkJCXJlcS0+bXFfY3R4ICE9IE5VTEwpKSkKIAkJcmV0dXJuIEJMS1BSRVBfREVGRVI7CiAKIAkvKiAKQEAgLTExMDYsNyArMTExMCw3IEBACiAgKgkJQkxLUFJFUF9ERUZFUiBpZiB0aGUgZmFpbHVyZSBpcyByZXRyeWFibGUKICAqCQlCTEtQUkVQX0tJTEwgaWYgdGhlIGZhaWx1cmUgaXMgZmF0YWwKICAqLwotaW50IHNjc2lfaW5pdF9pbyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGdmcF90IGdmcF9tYXNrKQoraW50IHNjc2lfaW5pdF9pbyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY21kLT5kZXZpY2U7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gY21kLT5yZXF1ZXN0OwpAQCAtMTExNSw3ICsxMTE5LDcgQEAKIAogCUJVR19PTighcnEtPm5yX3BoeXNfc2VnbWVudHMpOwogCi0JZXJyb3IgPSBzY3NpX2luaXRfc2d0YWJsZShycSwgJmNtZC0+c2RiLCBnZnBfbWFzayk7CisJZXJyb3IgPSBzY3NpX2luaXRfc2d0YWJsZShycSwgJmNtZC0+c2RiKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyX2V4aXQ7CiAKQEAgLTExMzEsOCArMTEzNSw3IEBACiAJCQlycS0+bmV4dF9ycS0+c3BlY2lhbCA9IGJpZGlfc2RiOwogCQl9CiAKLQkJZXJyb3IgPSBzY3NpX2luaXRfc2d0YWJsZShycS0+bmV4dF9ycSwgcnEtPm5leHRfcnEtPnNwZWNpYWwsCi0JCQkJCSAgR0ZQX0FUT01JQyk7CisJCWVycm9yID0gc2NzaV9pbml0X3NndGFibGUocnEtPm5leHRfcnEsIHJxLT5uZXh0X3JxLT5zcGVjaWFsKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBlcnJfZXhpdDsKIAl9CkBAIC0xMTQ0LDcgKzExNDcsNyBAQAogCQlCVUdfT04ocHJvdF9zZGIgPT0gTlVMTCk7CiAJCWl2ZWNzID0gYmxrX3JxX2NvdW50X2ludGVncml0eV9zZyhycS0+cSwgcnEtPmJpbyk7CiAKLQkJaWYgKHNjc2lfYWxsb2Nfc2d0YWJsZShwcm90X3NkYiwgaXZlY3MsIGdmcF9tYXNrLCBpc19tcSkpIHsKKwkJaWYgKHNjc2lfYWxsb2Nfc2d0YWJsZShwcm90X3NkYiwgaXZlY3MsIGlzX21xKSkgewogCQkJZXJyb3IgPSBCTEtQUkVQX0RFRkVSOwogCQkJZ290byBlcnJfZXhpdDsKIAkJfQpAQCAtMTIxMyw3ICsxMjE2LDcgQEAKIAkgKiBzdWJtaXQgYSByZXF1ZXN0IHdpdGhvdXQgYW4gYXR0YWNoZWQgYmlvLgogCSAqLwogCWlmIChyZXEtPmJpbykgewotCQlpbnQgcmV0ID0gc2NzaV9pbml0X2lvKGNtZCwgR0ZQX0FUT01JQyk7CisJCWludCByZXQgPSBzY3NpX2luaXRfaW8oY21kKTsKIAkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CkBAIC0xNjM4LDYgKzE2NDEsODcgQEAKIH0KIAogLyoqCisgKiBzY3NpX2Rpc3BhdGNoX2NvbW1hbmQgLSBEaXNwYXRjaCBhIGNvbW1hbmQgdG8gdGhlIGxvdy1sZXZlbCBkcml2ZXIuCisgKiBAY21kOiBjb21tYW5kIGJsb2NrIHdlIGFyZSBkaXNwYXRjaGluZy4KKyAqCisgKiBSZXR1cm46IG5vbnplcm8gcmV0dXJuIHJlcXVlc3Qgd2FzIHJlamVjdGVkIGFuZCBkZXZpY2UncyBxdWV1ZSBuZWVkcyB0byBiZQorICogcGx1Z2dlZC4KKyAqLworc3RhdGljIGludCBzY3NpX2Rpc3BhdGNoX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OworCWludCBydG4gPSAwOworCisJYXRvbWljX2luYygmY21kLT5kZXZpY2UtPmlvcmVxdWVzdF9jbnQpOworCisJLyogY2hlY2sgaWYgdGhlIGRldmljZSBpcyBzdGlsbCB1c2FibGUgKi8KKwlpZiAodW5saWtlbHkoY21kLT5kZXZpY2UtPnNkZXZfc3RhdGUgPT0gU0RFVl9ERUwpKSB7CisJCS8qIGluIFNERVZfREVMIHdlIGVycm9yIGFsbCBjb21tYW5kcy4gRElEX05PX0NPTk5FQ1QKKwkJICogcmV0dXJucyBhbiBpbW1lZGlhdGUgZXJyb3IgdXB3YXJkcywgYW5kIHNpZ25hbHMKKwkJICogdGhhdCB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBwcmVzZW50ICovCisJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHNjc2kgbGxkIG1hZGUgdGhpcyBkZXZpY2UgYmxvY2tlZC4gKi8KKwlpZiAodW5saWtlbHkoc2NzaV9kZXZpY2VfYmxvY2tlZChjbWQtPmRldmljZSkpKSB7CisJCS8qCisJCSAqIGluIGJsb2NrZWQgc3RhdGUsIHRoZSBjb21tYW5kIGlzIGp1c3QgcHV0IGJhY2sgb24KKwkJICogdGhlIGRldmljZSBxdWV1ZS4gIFRoZSBzdXNwZW5kIHN0YXRlIGhhcyBhbHJlYWR5CisJCSAqIGJsb2NrZWQgdGhlIHF1ZXVlIHNvIGZ1dHVyZSByZXF1ZXN0cyBzaG91bGQgbm90CisJCSAqIG9jY3VyIHVudGlsIHRoZSBkZXZpY2UgdHJhbnNpdGlvbnMgb3V0IG9mIHRoZQorCQkgKiBzdXNwZW5kIHN0YXRlLgorCQkgKi8KKwkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKKwkJCSJxdWV1ZWNvbW1hbmQgOiBkZXZpY2UgYmxvY2tlZFxuIikpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOworCX0KKworCS8qIFN0b3JlIHRoZSBMVU4gdmFsdWUgaW4gY21uZCwgaWYgbmVlZGVkLiAqLworCWlmIChjbWQtPmRldmljZS0+bHVuX2luX2NkYikKKwkJY21kLT5jbW5kWzFdID0gKGNtZC0+Y21uZFsxXSAmIDB4MWYpIHwKKwkJCSAgICAgICAoY21kLT5kZXZpY2UtPmx1biA8PCA1ICYgMHhlMCk7CisKKwlzY3NpX2xvZ19zZW5kKGNtZCk7CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBxdWV1ZSB0aGlzIGNvbW1hbmQsIGNoZWNrIGlmIHRoZSBjb21tYW5kCisJICogbGVuZ3RoIGV4Y2VlZHMgd2hhdCB0aGUgaG9zdCBhZGFwdGVyIGNhbiBoYW5kbGUuCisJICovCisJaWYgKGNtZC0+Y21kX2xlbiA+IGNtZC0+ZGV2aWNlLT5ob3N0LT5tYXhfY21kX2xlbikgeworCQlTQ1NJX0xPR19NTFFVRVVFKDMsIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAorCQkJICAgICAgICJxdWV1ZWNvbW1hbmQgOiBjb21tYW5kIHRvbyBsb25nLiAiCisJCQkgICAgICAgImNkYl9zaXplPSVkIGhvc3QtPm1heF9jbWRfbGVuPSVkXG4iLAorCQkJICAgICAgIGNtZC0+Y21kX2xlbiwgY21kLT5kZXZpY2UtPmhvc3QtPm1heF9jbWRfbGVuKSk7CisJCWNtZC0+cmVzdWx0ID0gKERJRF9BQk9SVCA8PCAxNik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAodW5saWtlbHkoaG9zdC0+c2hvc3Rfc3RhdGUgPT0gU0hPU1RfREVMKSkgeworCQljbWQtPnJlc3VsdCA9IChESURfTk9fQ09OTkVDVCA8PCAxNik7CisJCWdvdG8gZG9uZTsKKworCX0KKworCXRyYWNlX3Njc2lfZGlzcGF0Y2hfY21kX3N0YXJ0KGNtZCk7CisJcnRuID0gaG9zdC0+aG9zdHQtPnF1ZXVlY29tbWFuZChob3N0LCBjbWQpOworCWlmIChydG4pIHsKKwkJdHJhY2Vfc2NzaV9kaXNwYXRjaF9jbWRfZXJyb3IoY21kLCBydG4pOworCQlpZiAocnRuICE9IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSAmJgorCQkgICAgcnRuICE9IFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWSkKKwkJCXJ0biA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisKKwkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKKwkJCSJxdWV1ZWNvbW1hbmQgOiByZXF1ZXN0IHJlamVjdGVkXG4iKSk7CisJfQorCisJcmV0dXJuIHJ0bjsKKyBkb25lOgorCWNtZC0+c2NzaV9kb25lKGNtZCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogc2NzaV9kb25lIC0gSW52b2tlIGNvbXBsZXRpb24gb24gZmluaXNoZWQgU0NTSSBjb21tYW5kLgogICogQGNtZDogVGhlIFNDU0kgQ29tbWFuZCBmb3Igd2hpY2ggYSBsb3ctbGV2ZWwgZGV2aWNlIGRyaXZlciAoTExERCkgZ2l2ZXMKICAqIG93bmVyc2hpcCBiYWNrIHRvIFNDU0kgQ29yZSAtLSBpLmUuIHRoZSBMTEREIGhhcyBmaW5pc2hlZCB3aXRoIGl0LgpAQCAtMTcyNSw3ICsxODA5LDcgQEAKIAkJICogd2UgYWRkIHRoZSBkZXYgdG8gdGhlIHN0YXJ2ZWQgbGlzdCBzbyBpdCBldmVudHVhbGx5IGdldHMKIAkJICogYSBydW4gd2hlbiBhIHRhZyBpcyBmcmVlZC4KIAkJICovCi0JCWlmIChibGtfcXVldWVfdGFnZ2VkKHEpICYmICFibGtfcnFfdGFnZ2VkKHJlcSkpIHsKKwkJaWYgKGJsa19xdWV1ZV90YWdnZWQocSkgJiYgIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUVVRUQpKSB7CiAJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkJaWYgKGxpc3RfZW1wdHkoJnNkZXYtPnN0YXJ2ZWRfZW50cnkpKQogCQkJCWxpc3RfYWRkX3RhaWwoJnNkZXYtPnN0YXJ2ZWRfZW50cnksCkBAIC0xNzM5LDYgKzE4MjMsMTEgQEAKIAogCQlpZiAoIXNjc2lfaG9zdF9xdWV1ZV9yZWFkeShxLCBzaG9zdCwgc2RldikpCiAJCQlnb3RvIGhvc3Rfbm90X3JlYWR5OworCQorCQlpZiAoc2Rldi0+c2ltcGxlX3RhZ3MpCisJCQljbWQtPmZsYWdzIHw9IFNDTURfVEFHR0VEOworCQllbHNlCisJCQljbWQtPmZsYWdzICY9IH5TQ01EX1RBR0dFRDsKIAogCQkvKgogCQkgKiBGaW5hbGx5LCBpbml0aWFsaXplIGFueSBlcnJvciBoYW5kbGluZyBwYXJhbWV0ZXJzLCBhbmQgc2V0IHVwCkBAIC0xODkzLDEwICsxOTgyLDEwIEBACiAJCWJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7CiAJfQogCi0JaWYgKGJsa19xdWV1ZV90YWdnZWQocSkpCi0JCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9RVUVVRUQ7CisJaWYgKHNkZXYtPnNpbXBsZV90YWdzKQorCQljbWQtPmZsYWdzIHw9IFNDTURfVEFHR0VEOwogCWVsc2UKLQkJcmVxLT5jbWRfZmxhZ3MgJj0gflJFUV9RVUVVRUQ7CisJCWNtZC0+ZmxhZ3MgJj0gflNDTURfVEFHR0VEOwogCiAJc2NzaV9pbml0X2NtZF9lcnJoKGNtZCk7CiAJY21kLT5zY3NpX2RvbmUgPSBzY3NpX21xX2RvbmU7CkBAIC0yMDkxLDcgKzIxODAsNyBAQAogCiAJbWVtc2V0KCZzaG9zdC0+dGFnX3NldCwgMCwgc2l6ZW9mKHNob3N0LT50YWdfc2V0KSk7CiAJc2hvc3QtPnRhZ19zZXQub3BzID0gJnNjc2lfbXFfb3BzOwotCXNob3N0LT50YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IDE7CisJc2hvc3QtPnRhZ19zZXQubnJfaHdfcXVldWVzID0gc2hvc3QtPm5yX2h3X3F1ZXVlcyA/IDogMTsKIAlzaG9zdC0+dGFnX3NldC5xdWV1ZV9kZXB0aCA9IHNob3N0LT5jYW5fcXVldWU7CiAJc2hvc3QtPnRhZ19zZXQuY21kX3NpemUgPSBjbWRfc2l6ZTsKIAlzaG9zdC0+dGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9sb2dnaW5nLmggYi9kcml2ZXJzL3Njc2kvc2NzaV9sb2dnaW5nLmgKaW5kZXggMWY2NTEzOS4uN2ZlNjRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbG9nZ2luZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xvZ2dpbmcuaApAQCAtNTEsNiArNTEsNyBAQAogCQl9IHdoaWxlICgwKTsJCQkJCVwKIH0gd2hpbGUgKDApCiAjZWxzZQorI2RlZmluZSBTQ1NJX0xPR19MRVZFTChTSElGVCwgQklUUykgMAogI2RlZmluZSBTQ1NJX0NIRUNLX0xPR0dJTkcoU0hJRlQsIEJJVFMsIExFVkVMLCBDTUQpCiAjZW5kaWYgLyogQ09ORklHX1NDU0lfTE9HR0lORyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmggYi9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKaW5kZXggMTJiOGUxYi4uMmRjNGE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaApAQCAtMjksNyArMjksNiBAQAogZXh0ZXJuIHZvaWQgc2NzaV9leGl0X2hvc3RzKHZvaWQpOwogCiAvKiBzY3NpLmMgKi8KLWV4dGVybiBpbnQgc2NzaV9kaXNwYXRjaF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIGV4dGVybiBpbnQgc2NzaV9zZXR1cF9jb21tYW5kX2ZyZWVsaXN0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKIGV4dGVybiB2b2lkIHNjc2lfZGVzdHJveV9jb21tYW5kX2ZyZWVsaXN0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKICNpZmRlZiBDT05GSUdfU0NTSV9MT0dHSU5HCkBAIC04NCw3ICs4Myw2IEBACiBleHRlcm4gaW50IHNjc2lfbWF5YmVfdW5ibG9ja19ob3N0KHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiBleHRlcm4gdm9pZCBzY3NpX2RldmljZV91bmJ1c3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIGV4dGVybiB2b2lkIHNjc2lfcXVldWVfaW5zZXJ0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50IHJlYXNvbik7Ci1leHRlcm4gdm9pZCBzY3NpX25leHRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogZXh0ZXJuIHZvaWQgc2NzaV9pb19jb21wbGV0aW9uKHN0cnVjdCBzY3NpX2NtbmQgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHNjc2lfcnVuX2hvc3RfcXVldWVzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqc2NzaV9hbGxvY19xdWV1ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IGJhM2YxZTguLjk4M2FlZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTI4Niw3ICsyODYsMTMgQEAKIAl9CiAJV0FSTl9PTl9PTkNFKCFibGtfZ2V0X3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUpKTsKIAlzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZWRhdGEgPSBzZGV2OwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKKworCWlmICghc2hvc3RfdXNlX2Jsa19tcShzZGV2LT5ob3N0KSAmJgorCSAgICAoc2hvc3QtPmJxdCB8fCBzaG9zdC0+aG9zdHQtPnVzZV9ibGtfdGFncykpIHsKKwkJYmxrX3F1ZXVlX2luaXRfdGFncyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLAorCQkJCSAgICBzZGV2LT5ob3N0LT5jbWRfcGVyX2x1biwgc2hvc3QtPmJxdCk7CisJfQorCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKIAogCXNjc2lfc3lzZnNfZGV2aWNlX2luaXRpYWxpemUoc2Rldik7CiAKQEAgLTg3NCw4ICs4ODAsMTAgQEAKIAkJCShpbnFfcmVzdWx0WzNdICYgMHgwZikgPT0gMSA/ICIgQ0NTIiA6ICIiKTsKIAogCWlmICgoc2Rldi0+c2NzaV9sZXZlbCA+PSBTQ1NJXzIpICYmIChpbnFfcmVzdWx0WzddICYgMikgJiYKLQkgICAgISgqYmZsYWdzICYgQkxJU1RfTk9UUSkpCisJICAgICEoKmJmbGFncyAmIEJMSVNUX05PVFEpKSB7CiAJCXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgPSAxOworCQlzZGV2LT5zaW1wbGVfdGFncyA9IDE7CisJfQogCiAJLyoKIAkgKiBTb21lIGRldmljZXMgKFRleGVsIENEIFJPTSBkcml2ZXMpIGhhdmUgaGFuZHNoYWtpbmcgcHJvYmxlbXMKQEAgLTEyMTQsOSArMTIyMiw5IEBACiAJCXNwYXJzZV9sdW4gPSAwOwogCiAJLyoKLQkgKiBJZiBsZXNzIHRoYW4gU0NTSV8xX0NTUywgYW5kIG5vIHNwZWNpYWwgbHVuIHNjYW5pbmcsIHN0b3AKKwkgKiBJZiBsZXNzIHRoYW4gU0NTSV8xX0NDUywgYW5kIG5vIHNwZWNpYWwgbHVuIHNjYW5uaW5nLCBzdG9wCiAJICogc2Nhbm5pbmc7IHRoaXMgbWF0Y2hlcyAyLjQgYmVoYXZpb3VyLCBidXQgY291bGQganVzdCBiZSBhIGJ1ZwotCSAqICh0byBjb250aW51ZSBzY2FubmluZyBhIFNDU0lfMV9DU1MgZGV2aWNlKS4KKwkgKiAodG8gY29udGludWUgc2Nhbm5pbmcgYSBTQ1NJXzFfQ0NTIGRldmljZSkuCiAJICoKIAkgKiBUaGlzIHRlc3QgaXMgYnJva2VuLiAgV2UgbWlnaHQgbm90IGhhdmUgYW55IGRldmljZSBvbiBsdW4wIGZvcgogCSAqIGEgc3BhcnNlbHVuIGRldmljZSwgYW5kIGlmIHRoYXQncyB0aGUgY2FzZSB0aGVuIGhvdyB3b3VsZCB3ZQpAQCAtMTU4NSwxNiArMTU5MywxNSBAQAogCiB2b2lkIHNjc2lfcmVzY2FuX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZHJpdmVyICpkcnY7Ci0JCiAJaWYgKCFkZXYtPmRyaXZlcikKIAkJcmV0dXJuOwogCi0JZHJ2ID0gdG9fc2NzaV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCWlmICh0cnlfbW9kdWxlX2dldChkcnYtPm93bmVyKSkgeworCWlmICh0cnlfbW9kdWxlX2dldChkZXYtPmRyaXZlci0+b3duZXIpKSB7CisJCXN0cnVjdCBzY3NpX2RyaXZlciAqZHJ2ID0gdG9fc2NzaV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCiAJCWlmIChkcnYtPnJlc2NhbikKIAkJCWRydi0+cmVzY2FuKGRldik7Ci0JCW1vZHVsZV9wdXQoZHJ2LT5vd25lcik7CisJCW1vZHVsZV9wdXQoZGV2LT5kcml2ZXItPm93bmVyKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfcmVzY2FuX2RldmljZSk7CkBAIC0xNzI3LDcgKzE3MzQsNyBAQAogCiAJaWYgKCgoY2hhbm5lbCAhPSBTQ0FOX1dJTERfQ0FSRCkgJiYgKGNoYW5uZWwgPiBzaG9zdC0+bWF4X2NoYW5uZWwpKSB8fAogCSAgICAoKGlkICE9IFNDQU5fV0lMRF9DQVJEKSAmJiAoaWQgPj0gc2hvc3QtPm1heF9pZCkpIHx8Ci0JICAgICgobHVuICE9IFNDQU5fV0lMRF9DQVJEKSAmJiAobHVuID4gc2hvc3QtPm1heF9sdW4pKSkKKwkgICAgKChsdW4gIT0gU0NBTl9XSUxEX0NBUkQpICYmIChsdW4gPj0gc2hvc3QtPm1heF9sdW4pKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZzaG9zdC0+c2Nhbl9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBmNGNiN2IzLi4xY2I2NGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTcyNyw5ICs3MjcsNyBAQAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CiAJY29uc3QgY2hhciAqbmFtZSA9ICJub25lIjsKIAotCWlmIChzZGV2LT5vcmRlcmVkX3RhZ3MpCi0JCW5hbWUgPSAib3JkZXJlZCI7Ci0JZWxzZSBpZiAoc2Rldi0+c2ltcGxlX3RhZ3MpCisJaWYgKHNkZXYtPnNpbXBsZV90YWdzKQogCQluYW1lID0gInNpbXBsZSI7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiVzXG4iLCBuYW1lKTsKQEAgLTc0Nyw5ICs3NDUsMTIgQEAKIAlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgfHwgIXNodC0+Y2hhbmdlX3F1ZXVlX3R5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHN0cm5jbXAoYnVmLCAib3JkZXJlZCIsIDcpID09IDApCi0JCXRhZ190eXBlID0gTVNHX09SREVSRURfVEFHOwotCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAic2ltcGxlIiwgNikgPT0gMCkKKwkvKgorCSAqIFdlJ3JlIG5ldmVyIGlzc3VlaW5nIG9yZGVyIHRhZ3MgdGhlc2UgZGF5cywgYnV0IGFsbG93IHRoZSB2YWx1ZQorCSAqIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwlpZiAoc3RybmNtcChidWYsICJvcmRlcmVkIiwgNykgPT0gMCB8fAorCSAgICBzdHJuY21wKGJ1ZiwgInNpbXBsZSIsIDYpID09IDApCiAJCXRhZ190eXBlID0gTVNHX1NJTVBMRV9UQUc7CiAJZWxzZSBpZiAoc3RybmNtcChidWYsICJub25lIiwgNCkgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04NzYsMTEgKzg3NywxMCBAQAogCiAJZGVwdGggPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCi0JaWYgKGRlcHRoIDwgMSkKKwlpZiAoZGVwdGggPCAxIHx8IGRlcHRoID4gc2h0LT5jYW5fcXVldWUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dmFsID0gc2h0LT5jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgZGVwdGgsCi0JCQkJCSBTQ1NJX1FERVBUSF9ERUZBVUxUKTsKKwlyZXR2YWwgPSBzaHQtPmNoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBkZXB0aCk7CiAJaWYgKHJldHZhbCA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYWNlLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFjZS5jCmluZGV4IDUwMzU5NGUuLjgyYWYyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYWNlLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhY2UuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJCXJldHVybiBzY3NpX3RyYWNlX3J3MTYocCwgY2RiLCBsZW4pOwogCWNhc2UgVU5NQVA6CiAJCXJldHVybiBzY3NpX3RyYWNlX3VubWFwKHAsIGNkYiwgbGVuKTsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAJCXJldHVybiBzY3NpX3RyYWNlX3NlcnZpY2VfYWN0aW9uX2luKHAsIGNkYiwgbGVuKTsKIAljYXNlIFZBUklBQkxFX0xFTkdUSF9DTUQ6CiAJCXJldHVybiBzY3NpX3RyYWNlX3ZhcmxlbihwLCBjZGIsIGxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKaW5kZXggY2YwODA3MS4uZmEyYWVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc3BpLmg+CiAKQEAgLTEyMDcsNiArMTIwOCwyOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3BpX3BvcHVsYXRlX3Bwcl9tc2cpOwogCisvKioKKyAqIHNwaV9wb3B1bGF0ZV90YWdfbXNnIC0gcGxhY2UgYSB0YWcgbWVzc2FnZSBpbiBhIGJ1ZmZlcgorICogQG1zZzoJcG9pbnRlciB0byB0aGUgYXJlYSB0byBwbGFjZSB0aGUgdGFnCisgKiBAY21kOglwb2ludGVyIHRvIHRoZSBzY3NpIGNvbW1hbmQgZm9yIHRoZSB0YWcKKyAqCisgKiBOb3RlczoKKyAqCWRlc2lnbmVkIHRvIGNyZWF0ZSB0aGUgY29ycmVjdCB0eXBlIG9mIHRhZyBtZXNzYWdlIGZvciB0aGUgCisgKglwYXJ0aWN1bGFyIHJlcXVlc3QuICBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB0YWcgbWVzc2FnZS4KKyAqCU1heSByZXR1cm4gMCBpZiBUQ1EgaXMgZGlzYWJsZWQgZm9yIHRoaXMgZGV2aWNlLgorICoqLworaW50IHNwaV9wb3B1bGF0ZV90YWdfbXNnKHVuc2lnbmVkIGNoYXIgKm1zZywgc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworICAgICAgICBpZiAoY21kLT5mbGFncyAmIFNDTURfVEFHR0VEKSB7CisJCSptc2crKyA9IE1TR19TSU1QTEVfVEFHOworICAgICAgICAJKm1zZysrID0gY21kLT5yZXF1ZXN0LT50YWc7CisgICAgICAgIAlyZXR1cm4gMjsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNwaV9wb3B1bGF0ZV90YWdfbXNnKTsKKwogI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvbmVfYnl0ZV9tc2dzW10gPSB7CiAvKiAweDAwICovICJUYXNrIENvbXBsZXRlIiwgTlVMTCAvKiBFeHRlbmRlZCBNZXNzYWdlICovLCAiU2F2ZSBQb2ludGVycyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaWNhbS5jIGIvZHJpdmVycy9zY3NpL3Njc2ljYW0uYwppbmRleCA5MmQyNGQ2Li45MTBmNGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaWNhbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpY2FtLmMKQEAgLTE2Myw4ICsxNjMsOCBAQAogCQkgICAgZW5kX2hlYWQgKiBlbmRfc2VjdG9yICsgZW5kX3NlY3RvcjsKIAogCQkvKiBUaGlzIGlzIHRoZSBhY3R1YWwgX3NlY3Rvcl8gbnVtYmVyIGF0IHRoZSBlbmQgKi8KLQkJbG9naWNhbF9lbmQgPSBnZXRfdW5hbGlnbmVkKCZsYXJnZXN0LT5zdGFydF9zZWN0KQotCQkgICAgKyBnZXRfdW5hbGlnbmVkKCZsYXJnZXN0LT5ucl9zZWN0cyk7CisJCWxvZ2ljYWxfZW5kID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZsYXJnZXN0LT5zdGFydF9zZWN0KQorCQkgICAgKyBnZXRfdW5hbGlnbmVkX2xlMzIoJmxhcmdlc3QtPm5yX3NlY3RzKTsKIAogCQkvKiBUaGlzIGlzIGZvciA+MTAyMyBjeWxpbmRlcnMgKi8KIAkJZXh0X2N5bCA9IChsb2dpY2FsX2VuZCAtIChlbmRfaGVhZCAqIGVuZF9zZWN0b3IgKyBlbmRfc2VjdG9yKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggY2ZiYTc0Yy4uZmVkYWIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogc3RhdGljIHZvaWQgc2RfcmVhZF9jYXBhY2l0eShzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpOwogc3RhdGljIHZvaWQgc2NzaV9kaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqY2Rldik7CiBzdGF0aWMgdm9pZCBzZF9wcmludF9zZW5zZV9oZHIoc3RydWN0IHNjc2lfZGlzayAqLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKik7Ci1zdGF0aWMgdm9pZCBzZF9wcmludF9yZXN1bHQoc3RydWN0IHNjc2lfZGlzayAqLCBpbnQpOworc3RhdGljIHZvaWQgc2RfcHJpbnRfcmVzdWx0KGNvbnN0IHN0cnVjdCBzY3NpX2Rpc2sgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNkX2luZGV4X2xvY2spOwogc3RhdGljIERFRklORV9JREEoc2RfaW5kZXhfaWRhKTsKQEAgLTUxMCw5ICs1MTAsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2RyaXZlciBzZF90ZW1wbGF0ZSA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5nZW5kcnYgPSB7CiAJCS5uYW1lCQk9ICJzZCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnByb2JlCQk9IHNkX3Byb2JlLAogCQkucmVtb3ZlCQk9IHNkX3JlbW92ZSwKIAkJLnNodXRkb3duCT0gc2Rfc2h1dGRvd24sCkBAIC02NTYsNyArNjU2LDcgQEAKIAl1bnNpZ25lZCBpbnQgbG9naWNhbF9ibG9ja19zaXplID0gc2RrcC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrcyA9IDA7CiAKLQlxLT5saW1pdHMuZGlzY2FyZF96ZXJvZXNfZGF0YSA9IHNka3AtPmxicHJ6OworCXEtPmxpbWl0cy5kaXNjYXJkX3plcm9lc19kYXRhID0gMDsKIAlxLT5saW1pdHMuZGlzY2FyZF9hbGlnbm1lbnQgPSBzZGtwLT51bm1hcF9hbGlnbm1lbnQgKgogCQlsb2dpY2FsX2Jsb2NrX3NpemU7CiAJcS0+bGltaXRzLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPQpAQCAtNjgwLDExICs2ODAsMTMgQEAKIAljYXNlIFNEX0xCUF9XUzE2OgogCQltYXhfYmxvY2tzID0gbWluX25vdF96ZXJvKHNka3AtPm1heF93c19ibG9ja3MsCiAJCQkJCSAgKHUzMilTRF9NQVhfV1MxNl9CTE9DS1MpOworCQlxLT5saW1pdHMuZGlzY2FyZF96ZXJvZXNfZGF0YSA9IHNka3AtPmxicHJ6OwogCQlicmVhazsKIAogCWNhc2UgU0RfTEJQX1dTMTA6CiAJCW1heF9ibG9ja3MgPSBtaW5fbm90X3plcm8oc2RrcC0+bWF4X3dzX2Jsb2NrcywKIAkJCQkJICAodTMyKVNEX01BWF9XUzEwX0JMT0NLUyk7CisJCXEtPmxpbWl0cy5kaXNjYXJkX3plcm9lc19kYXRhID0gc2RrcC0+bGJwcno7CiAJCWJyZWFrOwogCiAJY2FzZSBTRF9MQlBfWkVSTzoKQEAgLTc4NCw3ICs3ODYsNyBAQAogCSAqIGFtb3VudCBvZiBibG9ja3MgZGVzY3JpYmVkIGJ5IHRoZSByZXF1ZXN0LgogCSAqLwogCWJsa19hZGRfcmVxdWVzdF9wYXlsb2FkKHJxLCBwYWdlLCBsZW4pOwotCXJldCA9IHNjc2lfaW5pdF9pbyhjbWQsIEdGUF9BVE9NSUMpOworCXJldCA9IHNjc2lfaW5pdF9pbyhjbWQpOwogCXJxLT5fX2RhdGFfbGVuID0gbnJfYnl0ZXM7CiAKIG91dDoKQEAgLTg3OCw3ICs4ODAsNyBAQAogCSAqIGtub3dzIGhvdyBtdWNoIHRvIGFjdHVhbGx5IHdyaXRlLgogCSAqLwogCXJxLT5fX2RhdGFfbGVuID0gc2RwLT5zZWN0b3Jfc2l6ZTsKLQlyZXQgPSBzY3NpX2luaXRfaW8oY21kLCBHRlBfQVRPTUlDKTsKKwlyZXQgPSBzY3NpX2luaXRfaW8oY21kKTsKIAlycS0+X19kYXRhX2xlbiA9IG5yX2J5dGVzOwogCXJldHVybiByZXQ7CiB9CkBAIC05MTIsNyArOTE0LDcgQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgcHJvdGVjdDsKIAotCXJldCA9IHNjc2lfaW5pdF9pbyhTQ3BudCwgR0ZQX0FUT01JQyk7CisJcmV0ID0gc2NzaV9pbml0X2lvKFNDcG50KTsKIAlpZiAocmV0ICE9IEJMS1BSRVBfT0spCiAJCWdvdG8gb3V0OwogCVNDcG50ID0gcnEtPnNwZWNpYWw7CkBAIC0xMzM0LDkgKzEzMzYsOSBAQAogCSAqIG1heSB0cnkgYW5kIHRha2UgdGhlIGRldmljZSBvZmZsaW5lLCBpbiB3aGljaCBjYXNlIGFsbCBmdXJ0aGVyCiAJICogYWNjZXNzIHRvIHRoZSBkZXZpY2UgaXMgcHJvaGliaXRlZC4KIAkgKi8KLQllcnJvciA9IHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKHNkcCwgY21kLCBwLAotCQkJCQkobW9kZSAmIEZNT0RFX05ERUxBWSkgIT0gMCk7Ci0JaWYgKCFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RwKSB8fCAhZXJyb3IpCisJZXJyb3IgPSBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RwLCBjbWQsCisJCQkobW9kZSAmIEZNT0RFX05ERUxBWSkgIT0gMCk7CisJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAogCS8qCkBAIC0xNDkyLDcgKzE0OTQsNyBAQAogCX0KIAogCWlmIChyZXMpIHsKLQkJc2RfcHJpbnRfcmVzdWx0KHNka3AsIHJlcyk7CisJCXNkX3ByaW50X3Jlc3VsdChzZGtwLCAiU3luY2hyb25pemUgQ2FjaGUoMTApIGZhaWxlZCIsIHJlcyk7CiAKIAkJaWYgKGRyaXZlcl9ieXRlKHJlcykgJiBEUklWRVJfU0VOU0UpCiAJCQlzZF9wcmludF9zZW5zZV9oZHIoc2RrcCwgJnNzaGRyKTsKQEAgLTE1NDEsMzEgKzE1NDMsMTkgQEAKIAkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHNjc2lfZGlzayhiZGV2LT5iZF9kaXNrKS0+ZGV2aWNlOwotCWludCByZXQ7CisJaW50IGVycm9yOwogCi0JcmV0ID0gc2NzaV92ZXJpZnlfYmxrX2lvY3RsKGJkZXYsIGNtZCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGVycm9yIHJlY292ZXJ5LCBkb24ndCBsZXQgYW55b25lCi0JICogZWxzZSB0cnkgYW5kIHVzZSB0aGlzIGRldmljZS4gIEFsc28sIGlmIGVycm9yIHJlY292ZXJ5IGZhaWxzLCBpdAotCSAqIG1heSB0cnkgYW5kIHRha2UgdGhlIGRldmljZSBvZmZsaW5lLCBpbiB3aGljaCBjYXNlIGFsbCBmdXJ0aGVyCi0JICogYWNjZXNzIHRvIHRoZSBkZXZpY2UgaXMgcHJvaGliaXRlZC4KLQkgKi8KLQlpZiAoIXNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJZXJyb3IgPSBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RldiwgY21kLAorCQkJKG1vZGUgJiBGTU9ERV9OREVMQVkpICE9IDApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCSAgICAgICAKLQlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPmNvbXBhdF9pb2N0bCkgewotCQlyZXQgPSBzZGV2LT5ob3N0LT5ob3N0dC0+Y29tcGF0X2lvY3RsKHNkZXYsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQogCS8qIAogCSAqIExldCB0aGUgc3RhdGljIGlvY3RsIHRyYW5zbGF0aW9uIHRhYmxlIHRha2UgY2FyZSBvZiBpdC4KIAkgKi8KLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOyAKKwlpZiAoIXNkZXYtPmhvc3QtPmhvc3R0LT5jb21wYXRfaW9jdGwpCisJCXJldHVybiAtRU5PSU9DVExDTUQ7IAorCXJldHVybiBzZGV2LT5ob3N0LT5ob3N0dC0+Y29tcGF0X2lvY3RsKHNkZXYsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKIH0KICNlbmRpZgogCkBAIC0xNzEzLDE3ICsxNzAzLDYgQEAKIAkJaWYgKHNlbnNlX3ZhbGlkKQogCQkJc2Vuc2VfZGVmZXJyZWQgPSBzY3NpX3NlbnNlX2lzX2RlZmVycmVkKCZzc2hkcik7CiAJfQotI2lmZGVmIENPTkZJR19TQ1NJX0xPR0dJTkcKLQlTQ1NJX0xPR19ITENPTVBMRVRFKDEsIHNjc2lfcHJpbnRfcmVzdWx0KFNDcG50KSk7Ci0JaWYgKHNlbnNlX3ZhbGlkKSB7Ci0JCVNDU0lfTE9HX0hMQ09NUExFVEUoMSwgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ3BudCwKLQkJCQkJCSAgICJzZF9kb25lOiBzYltyZXNwYyxzayxhc2MsIgotCQkJCQkJICAgImFzY3FdPSV4LCV4LCV4LCV4XG4iLAotCQkJCQkJICAgc3NoZHIucmVzcG9uc2VfY29kZSwKLQkJCQkJCSAgIHNzaGRyLnNlbnNlX2tleSwgc3NoZHIuYXNjLAotCQkJCQkJICAgc3NoZHIuYXNjcSkpOwotCX0KLSNlbmRpZgogCXNka3AtPm1lZGl1bV9hY2Nlc3NfdGltZWRfb3V0ID0gMDsKIAogCWlmIChkcml2ZXJfYnl0ZShyZXN1bHQpICE9IERSSVZFUl9TRU5TRSAmJgpAQCAtMTc0Myw3ICsxNzIyLDYgQEAKIAkJICogdW5rbm93biBhbW91bnQgb2YgZGF0YSB3YXMgdHJhbnNmZXJyZWQgc28gdHJlYXQgaXQgYXMgYW4KIAkJICogZXJyb3IuCiAJCSAqLwotCQlzY3NpX3ByaW50X3NlbnNlKCJzZCIsIFNDcG50KTsKIAkJU0NwbnQtPnJlc3VsdCA9IDA7CiAJCW1lbXNldChTQ3BudC0+c2Vuc2VfYnVmZmVyLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQlicmVhazsKQEAgLTE3NzksNiArMTc1NywxMCBAQAogCQlicmVhazsKIAl9CiAgb3V0OgorCVNDU0lfTE9HX0hMQ09NUExFVEUoMSwgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ3BudCwKKwkJCQkJICAgInNkX2RvbmU6IGNvbXBsZXRlZCAlZCBvZiAlZCBieXRlc1xuIiwKKwkJCQkJICAgZ29vZF9ieXRlcywgc2NzaV9idWZmbGVuKFNDcG50KSkpOworCiAJaWYgKHJxX2RhdGFfZGlyKFNDcG50LT5yZXF1ZXN0KSA9PSBSRUFEICYmIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpCiAJCXNkX2RpZl9jb21wbGV0ZShTQ3BudCwgZ29vZF9ieXRlcyk7CiAKQEAgLTE4MzQsMTIgKzE4MTYsMTIgQEAKIAkJCS8qIG5vIHNlbnNlLCBUVVIgZWl0aGVyIHN1Y2NlZWRlZCBvciBmYWlsZWQKIAkJCSAqIHdpdGggYSBzdGF0dXMgZXJyb3IgKi8KIAkJCWlmKCFzcGludGltZSAmJiAhc2NzaV9zdGF0dXNfaXNfZ29vZCh0aGVfcmVzdWx0KSkgewotCQkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIlVuaXQgTm90IFJlYWR5XG4iKTsKLQkJCQlzZF9wcmludF9yZXN1bHQoc2RrcCwgdGhlX3Jlc3VsdCk7CisJCQkJc2RfcHJpbnRfcmVzdWx0KHNka3AsICJUZXN0IFVuaXQgUmVhZHkgZmFpbGVkIiwKKwkJCQkJCXRoZV9yZXN1bHQpOwogCQkJfQogCQkJYnJlYWs7CiAJCX0KLQkJCQkJCisKIAkJLyoKIAkJICogVGhlIGRldmljZSBkb2VzIG5vdCB3YW50IHRoZSBhdXRvbWF0aWMgc3RhcnQgdG8gYmUgaXNzdWVkLgogCQkgKi8KQEAgLTE5NTUsNyArMTkzNyw2IEBACiAJCQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyLCBpbnQgc2Vuc2VfdmFsaWQsCiAJCQlpbnQgdGhlX3Jlc3VsdCkKIHsKLQlzZF9wcmludF9yZXN1bHQoc2RrcCwgdGhlX3Jlc3VsdCk7CiAJaWYgKGRyaXZlcl9ieXRlKHRoZV9yZXN1bHQpICYgRFJJVkVSX1NFTlNFKQogCQlzZF9wcmludF9zZW5zZV9oZHIoc2RrcCwgc3NoZHIpOwogCWVsc2UKQEAgLTIwMDEsNyArMTk4Miw3IEBACiAKIAlkbyB7CiAJCW1lbXNldChjbWQsIDAsIDE2KTsKLQkJY21kWzBdID0gU0VSVklDRV9BQ1RJT05fSU47CisJCWNtZFswXSA9IFNFUlZJQ0VfQUNUSU9OX0lOXzE2OwogCQljbWRbMV0gPSBTQUlfUkVBRF9DQVBBQ0lUWV8xNjsKIAkJY21kWzEzXSA9IFJDMTZfTEVOOwogCQltZW1zZXQoYnVmZmVyLCAwLCBSQzE2X0xFTik7CkBAIC0yMDM2LDcgKzIwMTcsNyBAQAogCX0gd2hpbGUgKHRoZV9yZXN1bHQgJiYgcmV0cmllcyk7CiAKIAlpZiAodGhlX3Jlc3VsdCkgewotCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJSRUFEIENBUEFDSVRZKDE2KSBmYWlsZWRcbiIpOworCQlzZF9wcmludF9yZXN1bHQoc2RrcCwgIlJlYWQgQ2FwYWNpdHkoMTYpIGZhaWxlZCIsIHRoZV9yZXN1bHQpOwogCQlyZWFkX2NhcGFjaXR5X2Vycm9yKHNka3AsIHNkcCwgJnNzaGRyLCBzZW5zZV92YWxpZCwgdGhlX3Jlc3VsdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIxMTgsNyArMjA5OSw3IEBACiAJfSB3aGlsZSAodGhlX3Jlc3VsdCAmJiByZXRyaWVzKTsKIAogCWlmICh0aGVfcmVzdWx0KSB7Ci0JCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIlJFQUQgQ0FQQUNJVFkgZmFpbGVkXG4iKTsKKwkJc2RfcHJpbnRfcmVzdWx0KHNka3AsICJSZWFkIENhcGFjaXR5KDEwKSBmYWlsZWQiLCB0aGVfcmVzdWx0KTsKIAkJcmVhZF9jYXBhY2l0eV9lcnJvcihzZGtwLCBzZHAsICZzc2hkciwgc2Vuc2VfdmFsaWQsIHRoZV9yZXN1bHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yNjQzLDEyICsyNjI0LDEyIEBACiAKIAkJfSBlbHNlIHsJLyogTEJQIFZQRCBwYWdlIHRlbGxzIHVzIHdoYXQgdG8gdXNlICovCiAKLQkJCWlmIChzZGtwLT5sYnB1ICYmIHNka3AtPm1heF91bm1hcF9ibG9ja3MpCi0JCQkJc2RfY29uZmlnX2Rpc2NhcmQoc2RrcCwgU0RfTEJQX1VOTUFQKTsKLQkJCWVsc2UgaWYgKHNka3AtPmxicHdzKQorCQkJaWYgKHNka3AtPmxicHdzKQogCQkJCXNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFNEX0xCUF9XUzE2KTsKIAkJCWVsc2UgaWYgKHNka3AtPmxicHdzMTApCiAJCQkJc2RfY29uZmlnX2Rpc2NhcmQoc2RrcCwgU0RfTEJQX1dTMTApOworCQkJZWxzZSBpZiAoc2RrcC0+bGJwdSAmJiBzZGtwLT5tYXhfdW5tYXBfYmxvY2tzKQorCQkJCXNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFNEX0xCUF9VTk1BUCk7CiAJCQllbHNlCiAJCQkJc2RfY29uZmlnX2Rpc2NhcmQoc2RrcCwgU0RfTEJQX0RJU0FCTEUpOwogCQl9CkBAIC0zMTQyLDggKzMxMjMsNyBAQAogCXJlcyA9IHNjc2lfZXhlY3V0ZV9yZXFfZmxhZ3Moc2RwLCBjbWQsIERNQV9OT05FLCBOVUxMLCAwLCAmc3NoZHIsCiAJCQkgICAgICAgU0RfVElNRU9VVCwgU0RfTUFYX1JFVFJJRVMsIE5VTEwsIFJFUV9QTSk7CiAJaWYgKHJlcykgewotCQlzZF9wcmludGsoS0VSTl9XQVJOSU5HLCBzZGtwLCAiU1RBUlRfU1RPUCBGQUlMRURcbiIpOwotCQlzZF9wcmludF9yZXN1bHQoc2RrcCwgcmVzKTsKKwkJc2RfcHJpbnRfcmVzdWx0KHNka3AsICJTdGFydC9TdG9wIFVuaXQgZmFpbGVkIiwgcmVzKTsKIAkJaWYgKGRyaXZlcl9ieXRlKHJlcykgJiBEUklWRVJfU0VOU0UpCiAJCQlzZF9wcmludF9zZW5zZV9oZHIoc2RrcCwgJnNzaGRyKTsKIAkJaWYgKHNjc2lfc2Vuc2VfdmFsaWQoJnNzaGRyKSAmJgpAQCAtMzMzNywxNSArMzMxNywyNyBAQAogc3RhdGljIHZvaWQgc2RfcHJpbnRfc2Vuc2VfaGRyKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsCiAJCQkgICAgICAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKIHsKLQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAiICIpOwotCXNjc2lfc2hvd19zZW5zZV9oZHIoc3NoZHIpOwotCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsICIgIik7Ci0Jc2NzaV9zaG93X2V4dGRfc2Vuc2Uoc3NoZHItPmFzYywgc3NoZHItPmFzY3EpOworCXNjc2lfc2hvd19zZW5zZV9oZHIoc2RrcC0+ZGV2aWNlLAorCQkJICAgIHNka3AtPmRpc2sgPyBzZGtwLT5kaXNrLT5kaXNrX25hbWUgOiBOVUxMLCBzc2hkcik7CisJc2NzaV9zaG93X2V4dGRfc2Vuc2Uoc2RrcC0+ZGV2aWNlLAorCQkJICAgICBzZGtwLT5kaXNrID8gc2RrcC0+ZGlzay0+ZGlza19uYW1lIDogTlVMTCwKKwkJCSAgICAgc3NoZHItPmFzYywgc3NoZHItPmFzY3EpOwogfQogCi1zdGF0aWMgdm9pZCBzZF9wcmludF9yZXN1bHQoc3RydWN0IHNjc2lfZGlzayAqc2RrcCwgaW50IHJlc3VsdCkKK3N0YXRpYyB2b2lkIHNkX3ByaW50X3Jlc3VsdChjb25zdCBzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCBjb25zdCBjaGFyICptc2csCisJCQkgICAgaW50IHJlc3VsdCkKIHsKLQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAiICIpOwotCXNjc2lfc2hvd19yZXN1bHQocmVzdWx0KTsKKwljb25zdCBjaGFyICpoYl9zdHJpbmcgPSBzY3NpX2hvc3RieXRlX3N0cmluZyhyZXN1bHQpOworCWNvbnN0IGNoYXIgKmRiX3N0cmluZyA9IHNjc2lfZHJpdmVyYnl0ZV9zdHJpbmcocmVzdWx0KTsKKworCWlmIChoYl9zdHJpbmcgfHwgZGJfc3RyaW5nKQorCQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLAorCQkJICAiJXM6IFJlc3VsdDogaG9zdGJ5dGU9JXMgZHJpdmVyYnl0ZT0lc1xuIiwgbXNnLAorCQkJICBoYl9zdHJpbmcgPyBoYl9zdHJpbmcgOiAiaW52YWxpZCIsCisJCQkgIGRiX3N0cmluZyA/IGRiX3N0cmluZyA6ICJpbnZhbGlkIik7CisJZWxzZQorCQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLAorCQkJICAiJXM6IFJlc3VsdDogaG9zdGJ5dGU9MHglMDJ4IGRyaXZlcmJ5dGU9MHglMDJ4XG4iLAorCQkJICBtc2csIGhvc3RfYnl0ZShyZXN1bHQpLCBkcml2ZXJfYnl0ZShyZXN1bHQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmggYi9kcml2ZXJzL3Njc2kvc2QuaAppbmRleCA0NjczNzc4Li42M2JhNWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuaAorKysgYi9kcml2ZXJzL3Njc2kvc2QuaApAQCAtMTAzLDkgKzEwMyw5IEBACiAKICNkZWZpbmUgc2RfcHJpbnRrKHByZWZpeCwgc2RzaywgZm10LCBhLi4uKQkJCQlcCiAgICAgICAgIChzZHNrKS0+ZGlzayA/CQkJCQkJCVwKLQlzZGV2X3ByaW50ayhwcmVmaXgsIChzZHNrKS0+ZGV2aWNlLCAiWyVzXSAiIGZtdCwJCVwKLQkJICAgIChzZHNrKS0+ZGlzay0+ZGlza19uYW1lLCAjI2EpIDoJCQlcCi0Jc2Rldl9wcmludGsocHJlZml4LCAoc2RzayktPmRldmljZSwgZm10LCAjI2EpCisJICAgICAgc2Rldl9wcmVmaXhfcHJpbnRrKHByZWZpeCwgKHNkc2spLT5kZXZpY2UsCQlcCisJCQkJIChzZHNrKS0+ZGlzay0+ZGlza19uYW1lLCBmbXQsICMjYSkgOglcCisJICAgICAgc2Rldl9wcmludGsocHJlZml4LCAoc2RzayktPmRldmljZSwgZm10LCAjI2EpCiAKICNkZWZpbmUgc2RfZmlyc3RfcHJpbnRrKHByZWZpeCwgc2RzaywgZm10LCBhLi4uKQkJCVwKIAlkbyB7CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2VzLmMgYi9kcml2ZXJzL3Njc2kvc2VzLmMKaW5kZXggODBiZmVjZS4uYjdlNzllNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Nlcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZXMuYwpAQCAtNjkzLDkgKzY5Myw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfZHJpdmVyIHNlc190ZW1wbGF0ZSA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5nZW5kcnYgPSB7CiAJCS5uYW1lCQk9ICJzZXMiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wcm9iZQkJPSBzZXNfcHJvYmUsCiAJCS5yZW1vdmUJCT0gc2VzX3JlbW92ZSwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCA2MDM1NDQ0Li5iMTRmNjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMjE5LDggKzIxOSw4IEBACiAjZGVmaW5lIFNaX1NHX1JFUV9JTkZPIHNpemVvZihzZ19yZXFfaW5mb190KQogCiAjZGVmaW5lIHNnX3ByaW50ayhwcmVmaXgsIHNkcCwgZm10LCBhLi4uKSBcCi0Jc2Rldl9wcmludGsocHJlZml4LCAoc2RwKS0+ZGV2aWNlLCAiWyVzXSAiIGZtdCwgXAotCQkgICAgKHNkcCktPmRpc2stPmRpc2tfbmFtZSwgIyNhKQorCXNkZXZfcHJlZml4X3ByaW50ayhwcmVmaXgsIChzZHApLT5kZXZpY2UsCQlcCisJCQkgICAoc2RwKS0+ZGlzay0+ZGlza19uYW1lLCBmbXQsICMjYSkKIAogc3RhdGljIGludCBzZ19hbGxvd19hY2Nlc3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGNoYXIgKmNtZCkKIHsKQEAgLTEwNzEsMzkgKzEwNzEsNiBAQAogCQlpZiAoYXRvbWljX3JlYWQoJnNkcC0+ZGV0YWNoaW5nKSkKIAkJCXJldHVybiAtRU5PREVWOwogCQlyZXR1cm4gcHV0X3VzZXIoc2RwLT5kZXZpY2UtPmhvc3QtPmhvc3R0LT5lbXVsYXRlZCwgaXApOwotCWNhc2UgU0dfU0NTSV9SRVNFVDoKLQkJaWYgKGF0b21pY19yZWFkKCZzZHAtPmRldGFjaGluZykpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQlpZiAoc2NzaV9ob3N0X2luX3JlY292ZXJ5KHNkcC0+ZGV2aWNlLT5ob3N0KSkKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQl9IGVsc2UgaWYgKCFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RwLT5kZXZpY2UpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQkJcmVzdWx0ID0gZ2V0X3VzZXIodmFsLCBpcCk7Ci0JCWlmIChyZXN1bHQpCi0JCQlyZXR1cm4gcmVzdWx0OwotCQlpZiAoU0dfU0NTSV9SRVNFVF9OT1RISU5HID09IHZhbCkKLQkJCXJldHVybiAwOwotCQlzd2l0Y2ggKHZhbCkgewotCQljYXNlIFNHX1NDU0lfUkVTRVRfREVWSUNFOgotCQkJdmFsID0gU0NTSV9UUllfUkVTRVRfREVWSUNFOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0dfU0NTSV9SRVNFVF9UQVJHRVQ6Ci0JCQl2YWwgPSBTQ1NJX1RSWV9SRVNFVF9UQVJHRVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTR19TQ1NJX1JFU0VUX0JVUzoKLQkJCXZhbCA9IFNDU0lfVFJZX1JFU0VUX0JVUzsKLQkJCWJyZWFrOwotCQljYXNlIFNHX1NDU0lfUkVTRVRfSE9TVDoKLQkJCXZhbCA9IFNDU0lfVFJZX1JFU0VUX0hPU1Q7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKLQkJCXJldHVybiAtRUFDQ0VTOwotCQlyZXR1cm4gKHNjc2lfcmVzZXRfcHJvdmlkZXIoc2RwLT5kZXZpY2UsIHZhbCkgPT0KLQkJCVNVQ0NFU1MpID8gMCA6IC1FSU87CiAJY2FzZSBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORDoKIAkJaWYgKGF0b21pY19yZWFkKCZzZHAtPmRldGFjaGluZykpCiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTExMjMsMTMgKzEwOTAsNiBAQAogCQkJcmV0dXJuIHJlc3VsdDsKIAkJc2RwLT5zZ2RlYnVnID0gKGNoYXIpIHZhbDsKIAkJcmV0dXJuIDA7Ci0JY2FzZSBTQ1NJX0lPQ1RMX0dFVF9JRExVTjoKLQljYXNlIFNDU0lfSU9DVExfR0VUX0JVU19OVU1CRVI6Ci0JY2FzZSBTQ1NJX0lPQ1RMX1BST0JFX0hPU1Q6Ci0JY2FzZSBTR19HRVRfVFJBTlNGT1JNOgotCQlpZiAoYXRvbWljX3JlYWQoJnNkcC0+ZGV0YWNoaW5nKSkKLQkJCXJldHVybiAtRU5PREVWOwotCQlyZXR1cm4gc2NzaV9pb2N0bChzZHAtPmRldmljZSwgY21kX2luLCBwKTsKIAljYXNlIEJMS1NFQ1RHRVQ6CiAJCXJldHVybiBwdXRfdXNlcihtYXhfc2VjdG9yc19ieXRlcyhzZHAtPmRldmljZS0+cmVxdWVzdF9xdWV1ZSksCiAJCQkJaXApOwpAQCAtMTE0NSwxMSArMTEwNSwyNSBAQAogCQlyZXR1cm4gYmxrX3RyYWNlX3N0YXJ0c3RvcChzZHAtPmRldmljZS0+cmVxdWVzdF9xdWV1ZSwgMCk7CiAJY2FzZSBCTEtUUkFDRVRFQVJET1dOOgogCQlyZXR1cm4gYmxrX3RyYWNlX3JlbW92ZShzZHAtPmRldmljZS0+cmVxdWVzdF9xdWV1ZSk7CisJY2FzZSBTQ1NJX0lPQ1RMX0dFVF9JRExVTjoKKwljYXNlIFNDU0lfSU9DVExfR0VUX0JVU19OVU1CRVI6CisJY2FzZSBTQ1NJX0lPQ1RMX1BST0JFX0hPU1Q6CisJY2FzZSBTR19HRVRfVFJBTlNGT1JNOgorCWNhc2UgU0dfU0NTSV9SRVNFVDoKKwkJaWYgKGF0b21pY19yZWFkKCZzZHAtPmRldGFjaGluZykpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKHJlYWRfb25seSkKIAkJCXJldHVybiAtRVBFUk07CS8qIGRvbid0IGtub3cgc28gdGFrZSBzYWZlIGFwcHJvYWNoICovCi0JCXJldHVybiBzY3NpX2lvY3RsKHNkcC0+ZGV2aWNlLCBjbWRfaW4sIHApOworCQlicmVhazsKIAl9CisKKwlyZXN1bHQgPSBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RwLT5kZXZpY2UsCisJCQljbWRfaW4sIGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gc2NzaV9pb2N0bChzZHAtPmRldmljZSwgY21kX2luLCBwKTsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTEzNjAsNyArMTMzNCw3IEBACiAJCWlmICgoc2RwLT5zZ2RlYnVnID4gMCkgJiYKIAkJICAgICgoQ0hFQ0tfQ09ORElUSU9OID09IHNycC0+aGVhZGVyLm1hc2tlZF9zdGF0dXMpIHx8CiAJCSAgICAgKENPTU1BTkRfVEVSTUlOQVRFRCA9PSBzcnAtPmhlYWRlci5tYXNrZWRfc3RhdHVzKSkpCi0JCQlfX3Njc2lfcHJpbnRfc2Vuc2UoX19mdW5jX18sIHNlbnNlLAorCQkJX19zY3NpX3ByaW50X3NlbnNlKHNkcC0+ZGV2aWNlLCBfX2Z1bmNfXywgc2Vuc2UsCiAJCQkJCSAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiAKIAkJLyogRm9sbG93aW5nIGlmIHN0YXRlbWVudCBpcyBhIHBhdGNoIHN1cHBsaWVkIGJ5IEVyaWMgWW91bmdkYWxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3IuYyBiL2RyaXZlcnMvc2NzaS9zci5jCmluZGV4IDJkZTQ0Y2MuLjhiZDU0YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zci5jCkBAIC04OCw5ICs4OCw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfZHJpdmVyIHNyX3RlbXBsYXRlID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmdlbmRydiA9IHsKIAkJLm5hbWUgICAJPSAic3IiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wcm9iZQkJPSBzcl9wcm9iZSwKIAkJLnJlbW92ZQkJPSBzcl9yZW1vdmUsCiAJCS5wbQkJPSAmc3JfcG1fb3BzLApAQCAtMzg3LDcgKzM4Nyw3IEBACiAJc3RydWN0IHJlcXVlc3QgKnJxID0gU0NwbnQtPnJlcXVlc3Q7CiAJaW50IHJldDsKIAotCXJldCA9IHNjc2lfaW5pdF9pbyhTQ3BudCwgR0ZQX0FUT01JQyk7CisJcmV0ID0gc2NzaV9pbml0X2lvKFNDcG50KTsKIAlpZiAocmV0ICE9IEJMS1BSRVBfT0spCiAJCWdvdG8gb3V0OwogCVNDcG50ID0gcnEtPnNwZWNpYWw7CkBAIC01NDksNiArNTQ5LDExIEBACiAKIAltdXRleF9sb2NrKCZzcl9tdXRleCk7CiAKKwlyZXQgPSBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RldiwgY21kLAorCQkJKG1vZGUgJiBGTU9ERV9OREVMQVkpICE9IDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCiAJLyoKIAkgKiBTZW5kIFNDU0kgYWRkcmVzc2luZyBpb2N0bHMgZGlyZWN0bHkgdG8gbWlkIGxldmVsLCBzZW5kIG90aGVyCiAJICogaW9jdGxzIHRvIGNkcm9tL2Jsb2NrIGxldmVsLgpAQCAtNTY0LDE2ICs1NjksNiBAQAogCWlmIChyZXQgIT0gLUVOT1NZUykKIAkJZ290byBvdXQ7CiAKLQkvKgotCSAqIEVOT0RFViBtZWFucyB0aGF0IHdlIGRpZG4ndCByZWNvZ25pc2UgdGhlIGlvY3RsLCBvciB0aGF0IHdlCi0JICogY2Fubm90IGV4ZWN1dGUgaXQgaW4gdGhlIGN1cnJlbnQgZGV2aWNlIHN0YXRlLiAgSW4gZWl0aGVyCi0JICogY2FzZSBmYWxsIHRocm91Z2ggdG8gc2NzaV9pb2N0bCwgd2hpY2ggd2lsbCByZXR1cm4gRU5ET0VWIGFnYWluCi0JICogaWYgaXQgZG9lc24ndCByZWNvZ25pc2UgdGhlIGlvY3RsCi0JICovCi0JcmV0ID0gc2NzaV9ub25ibG9ja2FibGVfaW9jdGwoc2RldiwgY21kLCBhcmdwLAotCQkJCQkobW9kZSAmIEZNT0RFX05ERUxBWSkgIT0gMCk7Ci0JaWYgKHJldCAhPSAtRU5PREVWKQotCQlnb3RvIG91dDsKIAlyZXQgPSBzY3NpX2lvY3RsKHNkZXYsIGNtZCwgYXJncCk7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5oIGIvZHJpdmVycy9zY3NpL3NyLmgKaW5kZXggMWQxZjZmNDEuLjFkZTMzNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zci5oCisrKyBiL2RyaXZlcnMvc2NzaS9zci5oCkBAIC01Nyw4ICs1Nyw3IEBACiB9IFNjc2lfQ0Q7CiAKICNkZWZpbmUgc3JfcHJpbnRrKHByZWZpeCwgY2QsIGZtdCwgYS4uLikgXAotCXNkZXZfcHJpbnRrKHByZWZpeCwgKGNkKS0+ZGV2aWNlLCAiWyVzXSAiIGZtdCwgXAotCQkgICAgKGNkKS0+Y2RpLm5hbWUsICMjYSkKKwlzZGV2X3ByZWZpeF9wcmludGsocHJlZml4LCAoY2QpLT5kZXZpY2UsIChjZCktPmNkaS5uYW1lLCBmbXQsICMjYSkKIAogaW50IHNyX2RvX2lvY3RsKFNjc2lfQ0QgKiwgc3RydWN0IHBhY2tldF9jb21tYW5kICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYyBiL2RyaXZlcnMvc2NzaS9zcl9pb2N0bC5jCmluZGV4IDYzODlmY2YuLmZiOTI5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zcl9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zcl9pb2N0bC5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAkJCQkJICAiQ0RST00gbm90IHJlYWR5LiAgTWFrZSBzdXJlIHRoZXJlICIKIAkJCQkJICAiaXMgYSBkaXNjIGluIHRoZSBkcml2ZS5cbiIpOwogI2lmZGVmIERFQlVHCi0JCQlzY3NpX3ByaW50X3NlbnNlX2hkcigic3IiLCAmc3NoZHIpOworCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoY2QtPmRldmljZSwgY2QtPmNkaS5uYW1lLCAmc3NoZHIpOwogI2VuZGlmCiAJCQllcnIgPSAtRU5PTUVESVVNOwogCQkJYnJlYWs7CkBAIC0yNTcsMTUgKzI1NywxNSBAQAogCQkJCS8qIHNlbnNlOiBJbnZhbGlkIGNvbW1hbmQgb3BlcmF0aW9uIGNvZGUgKi8KIAkJCQllcnIgPSAtRURSSVZFX0NBTlRfRE9fVEhJUzsKICNpZmRlZiBERUJVRwotCQkJX19zY3NpX3ByaW50X2NvbW1hbmQoY2djLT5jbWQpOwotCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoInNyIiwgJnNzaGRyKTsKKwkJCV9fc2NzaV9wcmludF9jb21tYW5kKGNnYy0+Y21kLCBDRFJPTV9QQUNLRVRfU0laRSk7CisJCQlzY3NpX3ByaW50X3NlbnNlX2hkcihjZC0+ZGV2aWNlLCBjZC0+Y2RpLm5hbWUsICZzc2hkcik7CiAjZW5kaWYKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJc3JfcHJpbnRrKEtFUk5fRVJSLCBjZCwKIAkJCQkgICJDRFJPTSAoaW9jdGwpIGVycm9yLCBjb21tYW5kOiAiKTsKLQkJCV9fc2NzaV9wcmludF9jb21tYW5kKGNnYy0+Y21kKTsKLQkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKCJzciIsICZzc2hkcik7CisJCQlfX3Njc2lfcHJpbnRfY29tbWFuZChjZ2MtPmNtZCwgQ0RST01fUEFDS0VUX1NJWkUpOworCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoY2QtPmRldmljZSwgY2QtPmNkaS5uYW1lLCAmc3NoZHIpOwogCQkJZXJyID0gLUVJTzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggNGRhYTM3Mi4uMTI4ZDNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTU2LDcgKzU2LDggQEAKIAogLyogVGhlIGRyaXZlciBwcmludHMgc29tZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gb24gdGhlIGNvbnNvbGUgaWYgREVCVUcKICAgIGlzIGRlZmluZWQgYW5kIG5vbi16ZXJvLiAqLwotI2RlZmluZSBERUJVRyAwCisjZGVmaW5lIERFQlVHIDEKKyNkZWZpbmUgTk9fREVCVUcgMAogCiAjZGVmaW5lIFNUX0RFQl9NU0cgIEtFUk5fTk9USUNFCiAjaWYgREVCVUcKQEAgLTgwLDYgKzgxLDcgQEAKIHN0YXRpYyBpbnQgdHJ5X2RpcmVjdF9pbyA9IFRSWV9ESVJFQ1RfSU87CiBzdGF0aWMgaW50IHRyeV9yZGlvID0gMTsKIHN0YXRpYyBpbnQgdHJ5X3dkaW8gPSAxOworc3RhdGljIGludCBkZWJ1Z19mbGFnOwogCiBzdGF0aWMgc3RydWN0IGNsYXNzIHN0X3N5c2ZzX2NsYXNzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnN0X2Rldl9ncm91cHNbXTsKQEAgLTEwMCw2ICsxMDIsOSBAQAogTU9EVUxFX1BBUk1fREVTQyhtYXhfc2dfc2VncywgIk1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzIHRvIHVzZSAoMjU2KSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHRyeV9kaXJlY3RfaW8sIHRyeV9kaXJlY3RfaW8sIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRyeV9kaXJlY3RfaW8sICJUcnkgZGlyZWN0IEkvTyBiZXR3ZWVuIHVzZXIgYnVmZmVyIGFuZCB0YXBlIGRyaXZlICgxKSIpOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX2ZsYWcsIGRlYnVnX2ZsYWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2ZsYWcsICJFbmFibGUgREVCVUcsIHNhbWUgYXMgc2V0dGluZyBkZWJ1Z2dpbmc9MSIpOworCiAKIC8qIEV4dHJhIHBhcmFtZXRlcnMgZm9yIHRlc3RpbmcgKi8KIG1vZHVsZV9wYXJhbV9uYW1lZCh0cnlfcmRpbywgdHJ5X3JkaW8sIGludCwgMCk7CkBAIC0xMjQsNiArMTI5LDkgQEAKIAl9LAogCXsKIAkJInRyeV9kaXJlY3RfaW8iLCAmdHJ5X2RpcmVjdF9pbworCX0sCisJeworCQkiZGVidWdfZmxhZyIsICZkZWJ1Z19mbGFnCiAJfQogfTsKICNlbmRpZgpAQCAtMTk0LDkgKzIwMiw5IEBACiBzdGF0aWMgdm9pZCBkb19yZW1vdmVfc3lzZnNfZmlsZXModm9pZCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kcml2ZXIgc3RfdGVtcGxhdGUgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZ2VuZHJ2ID0gewogCQkubmFtZQkJPSAic3QiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wcm9iZQkJPSBzdF9wcm9iZSwKIAkJLnJlbW92ZQkJPSBzdF9yZW1vdmUsCiAJfSwKQEAgLTMwNiw4ICszMTQsNyBAQAogfQogCiAjZGVmaW5lIHN0X3ByaW50ayhwcmVmaXgsIHQsIGZtdCwgYS4uLikgXAotCXNkZXZfcHJpbnRrKHByZWZpeCwgKHQpLT5kZXZpY2UsICIlczogIiBmbXQsIFwKLQkJICAgIHRhcGVfbmFtZSh0KSwgIyNhKQorCXNkZXZfcHJlZml4X3ByaW50ayhwcmVmaXgsICh0KS0+ZGV2aWNlLCB0YXBlX25hbWUodCksIGZtdCwgIyNhKQogI2lmZGVmIERFQlVHCiAjZGVmaW5lIERFQkNfcHJpbnRrKHQsIGZtdCwgYS4uLikgXAogCWlmIChkZWJ1Z2dpbmcpIHsgc3RfcHJpbnRrKFNUX0RFQl9NU0csIHQsIGZtdCwgIyNhICk7IH0KQEAgLTM3NCw3ICszODEsOCBAQAogCQkJICAgIFNScG50LT5jbWRbMF0sIFNScG50LT5jbWRbMV0sIFNScG50LT5jbWRbMl0sCiAJCQkgICAgU1JwbnQtPmNtZFszXSwgU1JwbnQtPmNtZFs0XSwgU1JwbnQtPmNtZFs1XSk7CiAJCWlmIChjbWRzdGF0cC0+aGF2ZV9zZW5zZSkKLQkJCSBfX3Njc2lfcHJpbnRfc2Vuc2UobmFtZSwgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCQkJX19zY3NpX3ByaW50X3NlbnNlKFNUcC0+ZGV2aWNlLCBuYW1lLAorCQkJCQkgICBTUnBudC0+c2Vuc2UsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiAJfSApIC8qIGVuZCBERUIgKi8KIAlpZiAoIWRlYnVnZ2luZykgeyAvKiBBYm5vcm1hbCBjb25kaXRpb25zIGZvciB0YXBlICovCiAJCWlmICghY21kc3RhdHAtPmhhdmVfc2Vuc2UpCkBAIC0zOTAsNyArMzk4LDggQEAKIAkJCSBTUnBudC0+Y21kWzBdICE9IE1PREVfU0VOU0UgJiYKIAkJCSBTUnBudC0+Y21kWzBdICE9IFRFU1RfVU5JVF9SRUFEWSkgewogCi0JCQlfX3Njc2lfcHJpbnRfc2Vuc2UobmFtZSwgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCQkJX19zY3NpX3ByaW50X3NlbnNlKFNUcC0+ZGV2aWNlLCBuYW1lLAorCQkJCQkgICBTUnBudC0+c2Vuc2UsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiAJCX0KIAl9CiAKQEAgLTg1MiwxNyArODYxLDE2IEBACiAvKiBMb2NrIG9yIHVubG9jayB0aGUgZHJpdmUgZG9vci4gRG9uJ3QgdXNlIHdoZW4gc3RfcmVxdWVzdCBhbGxvY2F0ZWQuICovCiBzdGF0aWMgaW50IGRvX2Rvb3JfbG9jayhzdHJ1Y3Qgc2NzaV90YXBlICogU1RwLCBpbnQgZG9fbG9jaykKIHsKLQlpbnQgcmV0dmFsLCBjbWQ7CisJaW50IHJldHZhbDsKIAotCWNtZCA9IGRvX2xvY2sgPyBTQ1NJX0lPQ1RMX0RPT1JMT0NLIDogU0NTSV9JT0NUTF9ET09SVU5MT0NLOwogCURFQkNfcHJpbnRrKFNUcCwgIiVzb2NraW5nIGRyaXZlIGRvb3IuXG4iLCBkb19sb2NrID8gIkwiIDogIlVubCIpOwotCXJldHZhbCA9IHNjc2lfaW9jdGwoU1RwLT5kZXZpY2UsIGNtZCwgTlVMTCk7Ci0JaWYgKCFyZXR2YWwpIHsKKworCXJldHZhbCA9IHNjc2lfc2V0X21lZGl1bV9yZW1vdmFsKFNUcC0+ZGV2aWNlLAorCQkJZG9fbG9jayA/IFNDU0lfUkVNT1ZBTF9QUkVWRU5UIDogU0NTSV9SRU1PVkFMX0FMTE9XKTsKKwlpZiAoIXJldHZhbCkKIAkJU1RwLT5kb29yX2xvY2tlZCA9IGRvX2xvY2sgPyBTVF9MT0NLRURfRVhQTElDSVQgOiBTVF9VTkxPQ0tFRDsKLQl9Ci0JZWxzZSB7CisJZWxzZQogCQlTVHAtPmRvb3JfbG9ja2VkID0gU1RfTE9DS19GQUlMUzsKLQl9CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzM2NywxMSArMzM3NSwxMCBAQAogCSAqIG1heSB0cnkgYW5kIHRha2UgdGhlIGRldmljZSBvZmZsaW5lLCBpbiB3aGljaCBjYXNlIGFsbCBmdXJ0aGVyCiAJICogYWNjZXNzIHRvIHRoZSBkZXZpY2UgaXMgcHJvaGliaXRlZC4KIAkgKi8KLQlyZXR2YWwgPSBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChTVHAtPmRldmljZSwgY21kX2luLCBwLAotCQkJCQlmaWxlLT5mX2ZsYWdzICYgT19OREVMQVkpOwotCWlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKFNUcC0+ZGV2aWNlKSB8fCByZXR2YWwgIT0gLUVOT0RFVikKKwlyZXR2YWwgPSBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoU1RwLT5kZXZpY2UsIGNtZF9pbiwKKwkJCWZpbGUtPmZfZmxhZ3MgJiBPX05ERUxBWSk7CisJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7Ci0JcmV0dmFsID0gMDsKIAogCWNtZF90eXBlID0gX0lPQ19UWVBFKGNtZF9pbik7CiAJY21kX25yID0gX0lPQ19OUihjbWRfaW4pOwpAQCAtNDMwOSw2ICs0MzE2LDEyIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAic3Q6IFZlcnNpb24gJXMsIGZpeGVkIGJ1ZnNpemUgJWQsIHMvZyBzZWdzICVkXG4iLAogCQl2ZXJzdHIsIHN0X2ZpeGVkX2J1ZmZlcl9zaXplLCBzdF9tYXhfc2dfc2Vncyk7CiAKKwlkZWJ1Z2dpbmcgPSAoZGVidWdfZmxhZyA+IDApID8gZGVidWdfZmxhZyA6IE5PX0RFQlVHOworCWlmIChkZWJ1Z2dpbmcpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic3Q6IERlYnVnZ2luZyBlbmFibGVkIGRlYnVnX2ZsYWcgPSAlZFxuIiwKKwkJCWRlYnVnZ2luZyk7CisJfQorCiAJZXJyID0gY2xhc3NfcmVnaXN0ZXIoJnN0X3N5c2ZzX2NsYXNzKTsKIAlpZiAoZXJyKSB7CiAJCXByX2VycigiVW5hYmxlIHJlZ2lzdGVyIHN5c2ZzIGNsYXNzIGZvciBTQ1NJIHRhcGVzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdGV4LmMgYi9kcml2ZXJzL3Njc2kvc3RleC5jCmluZGV4IDFhYTRiZWYuLjk4YTYyYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdGV4LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0ZXguYwpAQCAtNTQ0LDMzICs1NDQsMTUgQEAKIH0KIAogc3RhdGljIGludAotc3RleF9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCi17Ci0JLyogQ2hlYXQ6IHVzdWFsbHkgZXh0cmFjdGVkIGZyb20gSW5xdWlyeSBkYXRhICovCi0Jc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCA9IDE7Ci0KLQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5ob3N0LT5jYW5fcXVldWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKIHN0ZXhfc2xhdmVfY29uZmlnKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKIAlzZGV2LT51c2VfMTBfZm9yX3J3ID0gMTsKIAlzZGV2LT51c2VfMTBfZm9yX21zID0gMTsKIAlibGtfcXVldWVfcnFfdGltZW91dChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA2MCAqIEhaKTsKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotc3RleF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIDEpOwotfQotCiBzdGF0aWMgaW50CiBzdGV4X3F1ZXVlY29tbWFuZF9sY2soc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKQEAgLTExNjIsOSArMTE0NCw3IEBACiAJaW50IHJlc3VsdCA9IFNVQ0NFU1M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJIiglcyk6IGFib3J0aW5nIGNvbW1hbmRcbiIsIHBjaV9uYW1lKGhiYS0+cGRldikpOwotCXNjc2lfcHJpbnRfY29tbWFuZChjbWQpOworCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLCAiYWJvcnRpbmcgY29tbWFuZFxuIik7CiAKIAliYXNlID0gaGJhLT5tbWlvX2Jhc2U7CiAJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC0xMzUyLDkgKzEzMzIsOCBAQAogCiAJaGJhID0gKHN0cnVjdCBzdF9oYmEgKikgJmNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJIiglcyk6IHJlc2V0dGluZyBob3N0XG4iLCBwY2lfbmFtZShoYmEtPnBkZXYpKTsKLQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKKwlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBjbWQtPmRldmljZS0+aG9zdCwKKwkJICAgICAicmVzZXR0aW5nIGhvc3RcbiIpOwogCiAJcmV0dXJuIHN0ZXhfZG9fcmVzZXQoaGJhKSA/IEZBSUxFRCA6IFNVQ0NFU1M7CiB9CkBAIC0xMzkxLDEyICsxMzcwLDExIEBACiAJLnByb2NfbmFtZQkJCT0gRFJWX05BTUUsCiAJLmJpb3NfcGFyYW0JCQk9IHN0ZXhfYmlvc3BhcmFtLAogCS5xdWV1ZWNvbW1hbmQJCQk9IHN0ZXhfcXVldWVjb21tYW5kLAotCS5zbGF2ZV9hbGxvYwkJCT0gc3RleF9zbGF2ZV9hbGxvYywKIAkuc2xhdmVfY29uZmlndXJlCQk9IHN0ZXhfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQkJPSBzdGV4X3NsYXZlX2Rlc3Ryb3ksCiAJLmVoX2Fib3J0X2hhbmRsZXIJCT0gc3RleF9hYm9ydCwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCQk9IHN0ZXhfcmVzZXQsCiAJLnRoaXNfaWQJCQk9IC0xLAorCS51c2VfYmxrX3RhZ3MJCQk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RleF9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYyBiL2RyaXZlcnMvc2NzaS9zdG9ydnNjX2Rydi5jCmluZGV4IDczM2U1ZjcuLmUzYmEyNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdG9ydnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdG9ydnNjX2Rydi5jCkBAIC0xMDk3LDcgKzEwOTcsOCBAQAogCWlmIChzY21uZC0+cmVzdWx0KSB7CiAJCWlmIChzY3NpX25vcm1hbGl6ZV9zZW5zZShzY21uZC0+c2Vuc2VfYnVmZmVyLAogCQkJCVNDU0lfU0VOU0VfQlVGRkVSU0laRSwgJnNlbnNlX2hkcikpCi0JCQlzY3NpX3ByaW50X3NlbnNlX2hkcigic3RvcnZzYyIsICZzZW5zZV9oZHIpOworCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoc2NtbmQtPmRldmljZSwgInN0b3J2c2MiLAorCQkJCQkgICAgICZzZW5zZV9oZHIpOwogCX0KIAogCWlmICh2bV9zcmItPnNyYl9zdGF0dXMgIT0gU1JCX1NUQVRVU19TVUNDRVNTKQpAQCAtMTQyOCw4ICsxNDI5LDcgQEAKIAogc3RhdGljIGludCBzdG9ydnNjX2RldmljZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2aWNlKQogewotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXZpY2UsIE1TR19TSU1QTEVfVEFHLAotCQkJCVNUT1JWU0NfTUFYX0lPX1JFUVVFU1RTKTsKKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2aWNlLCBTVE9SVlNDX01BWF9JT19SRVFVRVNUUyk7CiAKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCBQQUdFX1NJWkUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMjM2N2EuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjkzMyArMCwwIEBACi0vKiBzdW4zX05DUjUzODAuYyAtLSBhZGFwdGVkIGZyb20gYXRhcmlfTkNSNTM4MC5jIGZvciB0aGUgc3VuMyBieSAKLSAgIFNhbSBDcmVhc2V5LiAqLyAKLS8qIAotICogTkNSIDUzODAgZ2VuZXJpYyBkcml2ZXIgcm91dGluZXMuICBUaGVzZSBzaG91bGQgbWFrZSBpdCAqdHJpdmlhbCoKLSAqIAl0byBpbXBsZW1lbnQgNTM4MCBTQ1NJIGRyaXZlcnMgdW5kZXIgTGludXggd2l0aCBhIG5vbi10cmFudG9yCi0gKglhcmNoaXRlY3R1cmUuCi0gKgotICoJTm90ZSB0aGF0IHRoZXNlIHJvdXRpbmVzIGFsc28gd29yayB3aXRoIE5SNTNjNDAwIGZhbWlseSBjaGlwcy4KLSAqCi0gKiBDb3B5cmlnaHQgMTk5MywgRHJldyBFY2toYXJkdAotICoJVmlzaW9uYXJ5IENvbXB1dGluZyAKLSAqCShVbml4IGFuZCBMaW51eCBjb25zdWx0aW5nIGFuZCBjdXN0b20gcHJvZ3JhbW1pbmcpCi0gKiAJZHJld0Bjb2xvcmFkby5lZHUKLSAqCSsxICgzMDMpIDY2Ni01ODM2Ci0gKgotICogRElTVFJJQlVUSU9OIFJFTEVBU0UgNi4gCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0IAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAotICovCi0KLS8qCi0gKiArK3JvbWFuOiBUbyBwb3J0IHRoZSA1MzgwIGRyaXZlciB0byB0aGUgQXRhcmksIEkgaGFkIHRvIGRvIHNvbWUgY2hhbmdlcyBpbgotICogdGhpcyBmaWxlLCB0b286Ci0gKgotICogIC0gU29tZSBvZiB0aGUgZGVidWcgc3RhdGVtZW50cyB3ZXJlIGluY29ycmVjdCAodW5kZWZpbmVkIHZhcmlhYmxlcyBhbmQgdGhlCi0gKiAgICBsaWtlKS4gSSBmaXhlZCB0aGF0LgotICoKLSAqICAtIEluIGluZm9ybWF0aW9uX3RyYW5zZmVyKCksIEkgdGhpbmsgYSAjaWZkZWYgd2FzIHdyb25nLiBMb29raW5nIGF0IHRoZQotICogICAgcG9zc2libGUgRE1BIHRyYW5zZmVyIHNpemUgc2hvdWxkIGFsc28gaGFwcGVuIGZvciBSRUFMX0RNQS4gSSBhZGRlZCB0aGlzCi0gKiAgICBpbiB0aGUgI2lmIHN0YXRlbWVudC4KLSAqCi0gKiAgLSBXaGVuIHVzaW5nIHJlYWwgRE1BLCBpbmZvcm1hdGlvbl90cmFuc2ZlcigpIHNob3VsZCByZXR1cm4gaW4gYSBEQVRBT1VUCi0gKiAgICBwaGFzZSBhZnRlciBzdGFydGluZyB0aGUgRE1BLiBJdCBoYXMgbm90aGluZyBtb3JlIHRvIGRvLgotICoKLSAqICAtIFRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHNob3VsZCBydW4gbWFpbiBhZnRlciBlbmQgb2YgRE1BLCB0b28gKG5vdAotICogICAgb25seSBhZnRlciBSRVNFTEVDVElPTiBpbnRlcnJ1cHRzKS4gQWRkaXRpb25hbGx5LCBpdCBzaG91bGQgX25vdF8gdGVzdAotICogICAgZm9yIG1vcmUgaW50ZXJydXB0cyBhZnRlciBydW5uaW5nIG1haW4sIHNpbmNlIGEgRE1BIHByb2Nlc3MgbWF5IGhhdmUKLSAqICAgIGJlZW4gc3RhcnRlZCBhbmQgaW50ZXJydXB0cyBhcmUgdHVybmVkIG9uIG5vdy4gVGhlIG5ldyBpbnQgY291bGQgaGFwcGVuCi0gKiAgICBpbnNpZGUgdGhlIGV4ZWN1dGlvbiBvZiBOQ1I1MzgwX2ludHIoKSwgbGVhZGluZyB0byByZWN1cnNpdmUKLSAqICAgIGNhbGxzLgotICoKLSAqIC0gSSd2ZSBkZWxldGVkIGFsbCB0aGUgc3R1ZmYgZm9yIEFVVE9QUk9CRV9JUlEsIFJFQUxfRE1BX1BPTEwsIFBTRVVET19ETUEKLSAqICAgIGFuZCBVU0xFRVAsIGJlY2F1c2UgdGhlc2Ugd2VyZSBtZXNzaW5nIHVwIHJlYWRhYmlsaXR5IGFuZCB3aWxsIG5ldmVyIGJlCi0gKiAgICBuZWVkZWQgZm9yIEF0YXJpIFNDU0kuCi0gKiAKLSAqIC0gSSd2ZSByZXZpc2VkIHRoZSBOQ1I1MzgwX21haW4oKSBjYWxsaW5nIHNjaGVtZSAocmVsYXggdGhlICdtYWluX3J1bm5pbmcnCi0gKiAgIHN0dWZmKSwgYW5kICdtYWluJyBpcyBleGVjdXRlZCBpbiBhIGJvdHRvbSBoYWxmIGlmIGF3b2tlbiBieSBhbgotICogICBpbnRlcnJ1cHQuCi0gKgotICogLSBUaGUgY29kZSB3YXMgcXVpdGUgY2x1dHRlcmVkIHVwIGJ5ICIjaWYgKE5ERUJVRyAmIE5ERUJVR18qKSBwcmludGsuLi4iCi0gKiAgIGNvbnN0cnVjdHMuIEluIG15IGV5ZXMsIHRoaXMgbWFkZSB0aGUgc291cmNlIHJhdGhlciB1bnJlYWRhYmxlLCBzbyBJCi0gKiAgIGZpbmFsbHkgcmVwbGFjZWQgdGhhdCBieSB0aGUgKl9QUklOVEsoKSBtYWNyb3MuCi0gKgotICovCi0jaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc3BpLmg+Ci0KLS8qCi0gKiBGdXJ0aGVyIGRldmVsb3BtZW50IC8gdGVzdGluZyB0aGF0IHNob3VsZCBiZSBkb25lIDogCi0gKiAxLiAgVGVzdCBsaW5rZWQgY29tbWFuZCBoYW5kbGluZyBjb2RlIGFmdGVyIEVyaWMgaXMgcmVhZHkgd2l0aCAKLSAqICAgICB0aGUgaGlnaCBsZXZlbCBjb2RlLgotICovCi0KLSNpZiAoTkRFQlVHICYgTkRFQlVHX0xJU1RTKQotI2RlZmluZSBMSVNUKHgseSkgXAotICB7IHByaW50aygiTElORTolZCAgIEFkZGluZyAlcCB0byAlcFxuIiwgX19MSU5FX18sICh2b2lkKikoeCksICh2b2lkKikoeSkpOyBcCi0gICAgaWYgKCh4KT09KHkpKSB1ZGVsYXkoNSk7IH0KLSNkZWZpbmUgUkVNT1ZFKHcseCx5LHopIFwKLSAgeyBwcmludGsoIkxJTkU6JWQgICBSZW1vdmluZzogJXAtPiVwICAlcC0+JXAgXG4iLCBfX0xJTkVfXywgXAotCSAgICh2b2lkKikodyksICh2b2lkKikoeCksICh2b2lkKikoeSksICh2b2lkKikoeikpOyBcCi0gICAgaWYgKCh4KT09KHkpKSB1ZGVsYXkoNSk7IH0KLSNlbHNlCi0jZGVmaW5lIExJU1QoeCx5KQotI2RlZmluZSBSRU1PVkUodyx4LHkseikKLSNlbmRpZgotCi0jaWZuZGVmIG5vdHlldAotI3VuZGVmIExJTktFRAotI2VuZGlmCi0KLS8qCi0gKiBEZXNpZ24KLSAqIElzc3VlcyA6Ci0gKgotICogVGhlIG90aGVyIExpbnV4IFNDU0kgZHJpdmVycyB3ZXJlIHdyaXR0ZW4gd2hlbiBMaW51eCB3YXMgSW50ZWwgUEMtb25seSwKLSAqIGFuZCBzcGVjaWZpY2FsbHkgZm9yIGVhY2ggYm9hcmQgcmF0aGVyIHRoYW4gZWFjaCBjaGlwLiAgVGhpcyBtYWtlcyB0aGVpcgotICogYWRhcHRhdGlvbiB0byBwbGF0Zm9ybXMgbGlrZSB0aGUgTWFjIChTb21lIG9mIHdoaWNoIHVzZSBOQ1I1MzgwJ3MpCi0gKiBtb3JlIGRpZmZpY3VsdCB0aGFuIGl0IGhhcyB0byBiZS4KLSAqCi0gKiBBbHNvLCBtYW55IG9mIHRoZSBTQ1NJIGRyaXZlcnMgd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY29tbWFuZCBxdWV1aW5nCi0gKiByb3V0aW5lcyB3ZXJlIGltcGxlbWVudGVkLCBtZWFuaW5nIHRoZWlyIGltcGxlbWVudGF0aW9ucyBvZiBxdWV1ZWQgCi0gKiBjb21tYW5kcyB3ZXJlIGhhY2tlZCBvbiByYXRoZXIgdGhhbiBkZXNpZ25lZCBpbiBmcm9tIHRoZSBzdGFydC4KLSAqCi0gKiBXaGVuIEkgZGVzaWduZWQgdGhlIExpbnV4IFNDU0kgZHJpdmVycyBJIGZpZ3VyZWQgdGhhdCAKLSAqIHdoaWxlIGhhdmluZyB0d28gZGlmZmVyZW50IFNDU0kgYm9hcmRzIGluIGEgc3lzdGVtIG1pZ2h0IGJlIHVzZWZ1bAotICogZm9yIGRlYnVnZ2luZyB0aGluZ3MsIHR3byBvZiB0aGUgc2FtZSB0eXBlIHdvdWxkbid0IGJlIHVzZWQuCi0gKiBXZWxsLCBJIHdhcyB3cm9uZyBhbmQgYSBudW1iZXIgb2YgdXNlcnMgaGF2ZSBtYWlsZWQgbWUgYWJvdXQgcnVubmluZwotICogbXVsdGlwbGUgaGlnaC1wZXJmb3JtYW5jZSBTQ1NJIGJvYXJkcyBpbiBhIHNlcnZlci4KLSAqCi0gKiBGaW5hbGx5LCB3aGVuIEkgZ2V0IHF1ZXN0aW9ucyBmcm9tIHVzZXJzLCBJIGhhdmUgbm8gaWRlYSB3aGF0IAotICogcmV2aXNpb24gb2YgbXkgZHJpdmVyIHRoZXkgYXJlIHJ1bm5pbmcuCi0gKgotICogVGhpcyBkcml2ZXIgYXR0ZW1wdHMgdG8gYWRkcmVzcyB0aGVzZSBwcm9ibGVtcyA6Ci0gKiBUaGlzIGlzIGEgZ2VuZXJpYyA1MzgwIGRyaXZlci4gIFRvIHVzZSBpdCBvbiBhIGRpZmZlcmVudCBwbGF0Zm9ybSwgCi0gKiBvbmUgc2ltcGx5IHdyaXRlcyBhcHByb3ByaWF0ZSBzeXN0ZW0gc3BlY2lmaWMgbWFjcm9zIChpZSwgZGF0YQotICogdHJhbnNmZXIgLSBzb21lIFBDJ3Mgd2lsbCB1c2UgdGhlIEkvTyBidXMsIDY4SydzIG11c3QgdXNlIAotICogbWVtb3J5IG1hcHBlZCkgYW5kIGRyb3BzIHRoaXMgZmlsZSBpbiB0aGVpciAnQycgd3JhcHBlci4KLSAqCi0gKiBBcyBmYXIgYXMgY29tbWFuZCBxdWV1ZWluZywgdHdvIHF1ZXVlcyBhcmUgbWFpbnRhaW5lZCBmb3IgCi0gKiBlYWNoIDUzODAgaW4gdGhlIHN5c3RlbSAtIGNvbW1hbmRzIHRoYXQgaGF2ZW4ndCBiZWVuIGlzc3VlZCB5ZXQsCi0gKiBhbmQgY29tbWFuZHMgdGhhdCBhcmUgY3VycmVudGx5IGV4ZWN1dGluZy4gIFRoaXMgbWVhbnMgdGhhdCBhbiAKLSAqIHVubGltaXRlZCBudW1iZXIgb2YgY29tbWFuZHMgbWF5IGJlIHF1ZXVlZCwgbGV0dGluZyAKLSAqIG1vcmUgY29tbWFuZHMgcHJvcGFnYXRlIGZyb20gdGhlIGhpZ2hlciBkcml2ZXIgbGV2ZWxzIGdpdmluZyBoaWdoZXIgCi0gKiB0aHJvdWdocHV0LiAgTm90ZSB0aGF0IGJvdGggSV9UX0wgYW5kIElfVF9MX1EgbmV4dXNlcyBhcmUgc3VwcG9ydGVkLCAKLSAqIGFsbG93aW5nIG11bHRpcGxlIGNvbW1hbmRzIHRvIHByb3BhZ2F0ZSBhbGwgdGhlIHdheSB0byBhIFNDU0ktSUkgZGV2aWNlIAotICogd2hpbGUgYSBjb21tYW5kIGlzIGFscmVhZHkgZXhlY3V0aW5nLgotICoKLSAqIFRvIHNvbHZlIHRoZSBtdWx0aXBsZS1ib2FyZHMtaW4tdGhlLXNhbWUtc3lzdGVtIHByb2JsZW0sIAotICogdGhlcmUgaXMgYSBzZXBhcmF0ZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIGVhY2ggaW5zdGFuY2UKLSAqIG9mIGEgNTM4MCBpbiB0aGUgc3lzdGVtLiAgU28sIG11bHRpcGxlIE5DUjUzODAgZHJpdmVycyB3aWxsCi0gKiBiZSBhYmxlIHRvIGNvZXhpc3Qgd2l0aCBhcHByb3ByaWF0ZSBjaGFuZ2VzIHRvIHRoZSBoaWdoIGxldmVsCi0gKiBTQ1NJIGNvZGUuICAKLSAqCi0gKiBBIE5DUjUzODBfUFVCTElDX1JFVklTSU9OIG1hY3JvIGlzIHByb3ZpZGVkLCB3aXRoIHRoZSByZWxlYXNlCi0gKiBudW1iZXIgKHVwZGF0ZWQgZm9yIGVhY2ggcHVibGljIHJlbGVhc2UpIHByaW50ZWQgYnkgdGhlIAotICogTkNSNTM4MF9wcmludF9vcHRpb25zIGNvbW1hbmQsIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgCi0gKiB3cmFwcGVyIGRldGVjdCBmdW5jdGlvbiwgc28gdGhhdCBJIGtub3cgd2hhdCByZWxlYXNlIG9mIHRoZSBkcml2ZXIKLSAqIHVzZXJzIGFyZSB1c2luZy4KLSAqCi0gKiBJc3N1ZXMgc3BlY2lmaWMgdG8gdGhlIE5DUjUzODAgOiAKLSAqCi0gKiBXaGVuIHVzZWQgaW4gYSBQSU8gb3IgcHNldWRvLWRtYSBtb2RlLCB0aGUgTkNSNTM4MCBpcyBhIGJyYWluZGVhZCAKLSAqIHBpZWNlIG9mIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMgeW91IHRvIHNpdCBpbiBhIGxvb3AgcG9sbGluZyBmb3IgCi0gKiB0aGUgUkVRIHNpZ25hbCBhcyBsb25nIGFzIHlvdSBhcmUgY29ubmVjdGVkLiAgU29tZSBkZXZpY2VzIGFyZSAKLSAqIGJyYWluIGRlYWQgKGllLCBtYW55IFRFWEVMIENEIFJPTSBkcml2ZXMpIGFuZCB3b24ndCBkaXNjb25uZWN0IAotICogd2hpbGUgZG9pbmcgbG9uZyBzZWVrIG9wZXJhdGlvbnMuCi0gKiAKLSAqIFRoZSB3b3JrYXJvdW5kIGZvciB0aGlzIGlzIHRvIGtlZXAgdHJhY2sgb2YgZGV2aWNlcyB0aGF0IGhhdmUKLSAqIGRpc2Nvbm5lY3RlZC4gIElmIHRoZSBkZXZpY2UgaGFzbid0IGRpc2Nvbm5lY3RlZCwgZm9yIGNvbW1hbmRzIHRoYXQKLSAqIHNob3VsZCBkaXNjb25uZWN0LCB3ZSBkbyBzb21ldGhpbmcgbGlrZSAKLSAqCi0gKiB3aGlsZSAoIVJFUSBpcyBhc3NlcnRlZCkgeyBzbGVlcCBmb3IgTiB1c2VjczsgcG9sbCBmb3IgTSB1c2VjcyB9Ci0gKiAKLSAqIFNvbWUgdHdlYWtpbmcgb2YgTiBhbmQgTSBuZWVkcyB0byBiZSBkb25lLiAgQW4gYWxnb3JpdGhtIGJhc2VkIAotICogb24gInRpbWUgdG8gZGF0YSIgd291bGQgZ2l2ZSB0aGUgYmVzdCByZXN1bHRzIGFzIGxvbmcgYXMgc2hvcnQgdGltZQotICogdG8gZGF0YXMgKGllLCBvbiB0aGUgc2FtZSB0cmFjaykgd2VyZSBjb25zaWRlcmVkLCBob3dldmVyIHRoZXNlIAotICogYnJva2VuIGRldmljZXMgYXJlIHRoZSBleGNlcHRpb24gcmF0aGVyIHRoYW4gdGhlIHJ1bGUgYW5kIEknZCByYXRoZXIKLSAqIHNwZW5kIG15IHRpbWUgb3B0aW1pemluZyBmb3IgdGhlIG5vcm1hbCBjYXNlLgotICoKLSAqIEFyY2hpdGVjdHVyZSA6Ci0gKgotICogQXQgdGhlIGhlYXJ0IG9mIHRoZSBkZXNpZ24gaXMgYSBjb3JvdXRpbmUsIE5DUjUzODBfbWFpbiwKLSAqIHdoaWNoIGlzIHN0YXJ0ZWQgd2hlbiBub3QgcnVubmluZyBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIsCi0gKiB0aW1lciwgYW5kIHF1ZXVlIGNvbW1hbmQgZnVuY3Rpb24uICBJdCBhdHRlbXB0cyB0byBlc3RhYmxpc2gKLSAqIElfVF9MIG9yIElfVF9MX1EgbmV4dXNlcyBieSByZW1vdmluZyB0aGUgY29tbWFuZHMgZnJvbSB0aGUgCi0gKiBpc3N1ZSBxdWV1ZSBhbmQgY2FsbGluZyBOQ1I1MzgwX3NlbGVjdCgpIGlmIGEgbmV4dXMgCi0gKiBpcyBub3QgZXN0YWJsaXNoZWQuIAotICoKLSAqIE9uY2UgYSBuZXh1cyBpcyBlc3RhYmxpc2hlZCwgdGhlIE5DUjUzODBfaW5mb3JtYXRpb25fdHJhbnNmZXIoKQotICogcGhhc2UgZ29lcyB0aHJvdWdoIHRoZSB2YXJpb3VzIHBoYXNlcyBhcyBpbnN0cnVjdGVkIGJ5IHRoZSB0YXJnZXQuCi0gKiBpZiB0aGUgdGFyZ2V0IGdvZXMgaW50byBNU0cgSU4gYW5kIHNlbmRzIGEgRElTQ09OTkVDVCBtZXNzYWdlLAotICogdGhlIGNvbW1hbmQgc3RydWN0dXJlIGlzIHBsYWNlZCBpbnRvIHRoZSBwZXIgaW5zdGFuY2UgZGlzY29ubmVjdGVkCi0gKiBxdWV1ZSwgYW5kIE5DUjUzODBfbWFpbiB0cmllcyB0byBmaW5kIG1vcmUgd29yay4gIElmIFVTTEVFUAotICogd2FzIGRlZmluZWQsIGFuZCB0aGUgdGFyZ2V0IGlzIGlkbGUgZm9yIHRvbyBsb25nLCB0aGUgc3lzdGVtCi0gKiB3aWxsIHRyeSB0byBzbGVlcC4KLSAqCi0gKiBJZiBhIGNvbW1hbmQgaGFzIGRpc2Nvbm5lY3RlZCwgZXZlbnR1YWxseSBhbiBpbnRlcnJ1cHQgd2lsbCB0cmlnZ2VyLAotICogY2FsbGluZyBOQ1I1MzgwX2ludHIoKSAgd2hpY2ggd2lsbCBpbiB0dXJuIGNhbGwgTkNSNTM4MF9yZXNlbGVjdAotICogdG8gcmVlc3RhYmxpc2ggYSBuZXh1cy4gIFRoaXMgd2lsbCBydW4gbWFpbiBpZiBuZWNlc3NhcnkuCi0gKgotICogT24gY29tbWFuZCB0ZXJtaW5hdGlvbiwgdGhlIGRvbmUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYXMgCi0gKiBhcHByb3ByaWF0ZS4KLSAqCi0gKiBTQ1NJIHBvaW50ZXJzIGFyZSBtYWludGFpbmVkIGluIHRoZSBTQ3AgZmllbGQgb2YgU0NTSSBjb21tYW5kIAotICogc3RydWN0dXJlcywgYmVpbmcgaW5pdGlhbGl6ZWQgYWZ0ZXIgdGhlIGNvbW1hbmQgaXMgY29ubmVjdGVkCi0gKiBpbiBOQ1I1MzgwX3NlbGVjdCwgYW5kIHNldCBhcyBhcHByb3ByaWF0ZSBpbiBOQ1I1MzgwX2luZm9ybWF0aW9uX3RyYW5zZmVyLgotICogTm90ZSB0aGF0IGluIHZpb2xhdGlvbiBvZiB0aGUgc3RhbmRhcmQsIGFuIGltcGxpY2l0IFNBVkUgUE9JTlRFUlMgb3BlcmF0aW9uCi0gKiBpcyBkb25lLCBzaW5jZSBzb21lIEJST0tFTiBkaXNrcyBmYWlsIHRvIGlzc3VlIGFuIGV4cGxpY2l0IFNBVkUgUE9JTlRFUlMuCi0gKi8KLQotLyoKLSAqIFVzaW5nIHRoaXMgZmlsZSA6Ci0gKiBUaGlzIGZpbGUgYSBza2VsZXRvbiBMaW51eCBTQ1NJIGRyaXZlciBmb3IgdGhlIE5DUiA1MzgwIHNlcmllcwotICogb2YgY2hpcHMuICBUbyB1c2UgaXQsIHlvdSB3cml0ZSBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZnVuY3Rpb25zIAotICogYW5kIG1hY3JvcyBhbmQgaW5jbHVkZSB0aGlzIGZpbGUgaW4geW91ciBkcml2ZXIuCi0gKgotICogVGhlc2UgbWFjcm9zIGNvbnRyb2wgb3B0aW9ucyA6IAotICogQVVUT1NFTlNFIC0gaWYgZGVmaW5lZCwgUkVRVUVTVCBTRU5TRSB3aWxsIGJlIHBlcmZvcm1lZCBhdXRvbWF0aWNhbGx5Ci0gKglmb3IgY29tbWFuZHMgdGhhdCByZXR1cm4gd2l0aCBhIENIRUNLIENPTkRJVElPTiBzdGF0dXMuIAotICoKLSAqIExJTktFRCAtIGlmIGRlZmluZWQsIGxpbmtlZCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLgotICoKLSAqIFJFQUxfRE1BIC0gaWYgZGVmaW5lZCwgUkVBTCBETUEgaXMgdXNlZCBkdXJpbmcgdGhlIGRhdGEgdHJhbnNmZXIgcGhhc2VzLgotICoKLSAqIFNVUFBPUlRfVEFHUyAtIGlmIGRlZmluZWQsIFNDU0ktMiB0YWdnZWQgcXVldWluZyBpcyB1c2VkIHdoZXJlIHBvc3NpYmxlCi0gKgotICogVGhlc2UgbWFjcm9zIE1VU1QgYmUgZGVmaW5lZCA6Ci0gKiAKLSAqIE5DUjUzODBfcmVhZChyZWdpc3RlcikgIC0gcmVhZCBmcm9tIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIKLSAqCi0gKiBOQ1I1MzgwX3dyaXRlKHJlZ2lzdGVyLCB2YWx1ZSkgLSB3cml0ZSB0byB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgCi0gKgotICogRWl0aGVyIHJlYWwgRE1BICpvciogcHNldWRvIERNQSBtYXkgYmUgaW1wbGVtZW50ZWQKLSAqIFJFQUwgZnVuY3Rpb25zIDogCi0gKiBOQ1I1MzgwX1JFQUxfRE1BIHNob3VsZCBiZSBkZWZpbmVkIGlmIHJlYWwgRE1BIGlzIHRvIGJlIHVzZWQuCi0gKiBOb3RlIHRoYXQgdGhlIERNQSBzZXR1cCBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIAotICoJdGhhdCB0aGV5IHdlcmUgYWJsZSB0byBwcm9ncmFtIHRoZSBjb250cm9sbGVyIGZvci4KLSAqCi0gKiBBbHNvIG5vdGUgdGhhdCBnZW5lcmljIGkzODYvUEMgdmVyc2lvbnMgb2YgdGhlc2UgbWFjcm9zIGFyZSAKLSAqCWF2YWlsYWJsZSBhcyBOQ1I1MzgwX2kzODZfZG1hX3dyaXRlX3NldHVwLAotICoJTkNSNTM4MF9pMzg2X2RtYV9yZWFkX3NldHVwLCBhbmQgTkNSNTM4MF9pMzg2X2RtYV9yZXNpZHVhbC4KLSAqCi0gKiBOQ1I1MzgwX2RtYV93cml0ZV9zZXR1cChpbnN0YW5jZSwgc3JjLCBjb3VudCkgLSBpbml0aWFsaXplCi0gKiBOQ1I1MzgwX2RtYV9yZWFkX3NldHVwKGluc3RhbmNlLCBkc3QsIGNvdW50KSAtIGluaXRpYWxpemUKLSAqIE5DUjUzODBfZG1hX3Jlc2lkdWFsKGluc3RhbmNlKTsgLSByZXNpZHVhbCBjb3VudAotICoKLSAqIFBTRVVETyBmdW5jdGlvbnMgOgotICogTkNSNTM4MF9wd3JpdGUoaW5zdGFuY2UsIHNyYywgY291bnQpCi0gKiBOQ1I1MzgwX3ByZWFkKGluc3RhbmNlLCBkc3QsIGNvdW50KTsKLSAqCi0gKiBJZiBub3RoaW5nIHNwZWNpZmljIHRvIHRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgZG9pbmcgKGllLCB3aXRoIGV4dGVybmFsCi0gKiBoYXJkd2FyZSksIHlvdSBtdXN0IGFsc28gZGVmaW5lIAotICogIAotICogTkNSNTM4MF9xdWV1ZV9jb21tYW5kCi0gKiBOQ1I1MzgwX3Jlc2V0Ci0gKiBOQ1I1MzgwX2Fib3J0Ci0gKiBOQ1I1MzgwX3Byb2NfaW5mbwotICoKLSAqIHRvIGJlIHRoZSBnbG9iYWwgZW50cnkgcG9pbnRzIGludG8gdGhlIHNwZWNpZmljIGRyaXZlciwgaWUgCi0gKiAjZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZCB0MTI4X3F1ZXVlX2NvbW1hbmQuCi0gKgotICogSWYgdGhpcyBpcyBub3QgZG9uZSwgdGhlIHJvdXRpbmVzIHdpbGwgYmUgZGVmaW5lZCBhcyBzdGF0aWMgZnVuY3Rpb25zCi0gKiB3aXRoIHRoZSBOQ1I1MzgwKiBuYW1lcyBhbmQgdGhlIHVzZXIgbXVzdCBwcm92aWRlIGEgZ2xvYmFsbHkKLSAqIGFjY2Vzc2libGUgd3JhcHBlciBmdW5jdGlvbi4KLSAqCi0gKiBUaGUgZ2VuZXJpYyBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgYnkgY2FsbGluZyBOQ1I1MzgwX2luaXQoaW5zdGFuY2UpLAotICogYWZ0ZXIgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgaG9zdCBzcGVjaWZpYyBmaWVsZHMgYW5kIElELiAgSWYgdGhlIAotICogZHJpdmVyIHdpc2hlcyB0byBhdXRvcHJvYmUgZm9yIGFuIElSUSBsaW5lLCB0aGUgTkNSNTM4MF9wcm9iZV9pcnEoaW5zdGFuY2UsCi0gKiBwb3NzaWJsZSkgZnVuY3Rpb24gbWF5IGJlIHVzZWQuICBCZWZvcmUgdGhlIHNwZWNpZmljIGRyaXZlciBpbml0aWFsaXphdGlvbgotICogY29kZSBmaW5pc2hlcywgTkNSNTM4MF9wcmludF9vcHRpb25zIHNob3VsZCBiZSBjYWxsZWQuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKmZpcnN0X2luc3RhbmNlID0gTlVMTDsKLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0aGVfdGVtcGxhdGUgPSBOVUxMOwotCi0vKiBNYWNyb3MgZWFzZSBsaWZlLi4uIDotKSAqLwotI2RlZmluZQlTRVRVUF9IT1NUREFUQShpbikJCQkJXAotICAgIHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9CQkJXAotCShzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKShpbiktPmhvc3RkYXRhCi0jZGVmaW5lCUhPU1REQVRBKGluKSAoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopKGluKS0+aG9zdGRhdGEpCi0KLSNkZWZpbmUJTkVYVChjbWQpCQkoKHN0cnVjdCBzY3NpX2NtbmQgKikoY21kKS0+aG9zdF9zY3JpYmJsZSkKLSNkZWZpbmUJU0VUX05FWFQoY21kLCBuZXh0KQkoKGNtZCktPmhvc3Rfc2NyaWJibGUgPSAodm9pZCAqKShuZXh0KSkKLSNkZWZpbmUJTkVYVEFERFIoY21kKQkJKChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSYoKGNtZCktPmhvc3Rfc2NyaWJibGUpKQotCi0jZGVmaW5lCUhPU1ROTwkJaW5zdGFuY2UtPmhvc3Rfbm8KLSNkZWZpbmUJSF9OTyhjbWQpCShjbWQpLT5kZXZpY2UtPmhvc3QtPmhvc3Rfbm8KLQotI2RlZmluZSBTR0FERFIoYnVmZmVyKSAodm9pZCAqKSgoKHVuc2lnbmVkIGxvbmcpc2dfdmlydCgoKGJ1ZmZlcikpKSkpCi0KLSNpZmRlZiBTVVBQT1JUX1RBR1MKLQotLyoKLSAqIEZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgdGFnZ2VkIHF1ZXVpbmcKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiArK3JvbWFuICgwMS85Nik6IE5vdyBJJ3ZlIGltcGxlbWVudGVkIFNDU0ktMiB0YWdnZWQgcXVldWluZy4gU29tZSBub3RlczoKLSAqCi0gKiBVc2luZyBjb25zZWN1dGl2ZSBudW1iZXJzIGZvciB0aGUgdGFncyBpcyBubyBnb29kIGlkZWEgaW4gbXkgZXllcy4gVGhlcmUKLSAqIGNvdWxkIGJlIHdyb25nIHJlLXVzaW5ncyBpZiB0aGUgY291bnRlciAoOCBiaXQhKSB3cmFwcyBhbmQgc29tZSBlYXJseQotICogY29tbWFuZCBoYXMgYmVlbiBwcmVlbXB0ZWQgZm9yIGEgbG9uZyB0aW1lLiBNeSBzb2x1dGlvbjogYSBiaXRmaWVsZCBmb3IKLSAqIHJlbWVtYmVyaW5nIHVzZWQgdGFncy4KLSAqCi0gKiBUaGVyZSdzIGFsc28gdGhlIHByb2JsZW0gdGhhdCBlYWNoIHRhcmdldCBoYXMgYSBjZXJ0YWluIHF1ZXVlIHNpemUsIGJ1dCB3ZQotICogY2Fubm90IGtub3cgaXQgaW4gYWR2YW5jZSA6LSggV2UganVzdCBzZWUgYSBRVUVVRV9GVUxMIHN0YXR1cyBiZWluZwotICogcmV0dXJuZWQuIFNvLCBpbiB0aGlzIGNhc2UsIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgc2l6ZSBhc3N1bXB0aW9uIGlzCi0gKiByZWR1Y2VkIHRvIHRoZSBudW1iZXIgb2YgYWN0aXZlIHRhZ3MgaWYgUVVFVUVfRlVMTCBpcyByZXR1cm5lZCBieSB0aGUKLSAqIHRhcmdldC4gVGhlIGNvbW1hbmQgaXMgcmV0dXJuZWQgdG8gdGhlIG1pZC1sZXZlbCwgYnV0IHdpdGggc3RhdHVzIGNoYW5nZWQKLSAqIHRvIEJVU1ksIHNpbmNlIC0tYXMgSSd2ZSBzZWVuLS0gdGhlIG1pZC1sZXZlbCBjYW4ndCBoYW5kbGUgUVVFVUVfRlVMTAotICogY29ycmVjdGx5LgotICoKLSAqIFdlJ3JlIGFsc28gbm90IGFsbG93ZWQgcnVubmluZyB0YWdnZWQgY29tbWFuZHMgYXMgbG9uZyBhcyBhbiB1bnRhZ2dlZAotICogY29tbWFuZCBpcyBhY3RpdmUuIEFuZCBSRVFVRVNUIFNFTlNFIGNvbW1hbmRzIGFmdGVyIGEgY29udGluZ2VudCBhbGxlZ2lhbmNlCi0gKiBjb25kaXRpb24gX211c3RfIGJlIHVudGFnZ2VkLiBUbyBrZWVwIHRyYWNrIHdoZXRoZXIgYW4gdW50YWdnZWQgY29tbWFuZCBoYXMKLSAqIGJlZW4gaXNzdWVkLCB0aGUgaG9zdC0+YnVzeSBhcnJheSBpcyBzdGlsbCBlbXBsb3llZCwgYXMgaXQgaXMgd2l0aG91dAotICogc3VwcG9ydCBmb3IgdGFnZ2VkIHF1ZXVpbmcuCi0gKgotICogT25lIGNvdWxkIHN1c3BlY3QgdGhhdCB0aGVyZSBhcmUgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIGJldHdlZW4KLSAqIGlzX2x1bl9idXN5KCksIGNtZF9nZXRfdGFnKCkgYW5kIGNtZF9mcmVlX3RhZygpLiBCdXQgSSB0aGluayB0aGlzIGlzbid0IHRoZQotICogY2FzZTogaXNfbHVuX2J1c3koKSBhbmQgY21kX2dldF90YWcoKSBhcmUgYm90aCBjYWxsZWQgZnJvbSBOQ1I1MzgwX21haW4oKSwKLSAqIHdoaWNoIGFscmVhZHkgZ3VhcmFudGVlZCB0byBiZSBydW5uaW5nIGF0IG1vc3Qgb25jZS4gSXQgaXMgYWxzbyB0aGUgb25seQotICogcGxhY2Ugd2hlcmUgdGFncy9MVU5zIGFyZSBhbGxvY2F0ZWQuIFNvIG5vIG90aGVyIGFsbG9jYXRpb24gY2FuIHNsaXAKLSAqIGJldHdlZW4gdGhhdCBwYWlyLCB0aGVyZSBjb3VsZCBvbmx5IGhhcHBlbiBhIHJlc2VsZWN0aW9uLCB3aGljaCBjYW4gZnJlZSBhCi0gKiB0YWcsIGJ1dCB0aGF0IGRvZXNuJ3QgaHVydC4gT25seSB0aGUgc2VxdWVuY2UgaW4gY21kX2ZyZWVfdGFnKCkgYmVjb21lcwotICogaW1wb3J0YW50OiB0aGUgdGFnIGJpdCBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlICducl9hbGxvY2F0ZWQnIGlzIGRlY3JlYXNlZC4KLSAqLwotCi0vKiAtMSBmb3IgVEFHX05PTkUgaXMgbm90IHBvc3NpYmxlIHdpdGggdW5zaWduZWQgY2hhciBjbWQtPnRhZyAqLwotI3VuZGVmIFRBR19OT05FCi0jZGVmaW5lIFRBR19OT05FIDB4ZmYKLQotLyogRm9yIHRoZSBtNjhrLCB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gJ2FsbG9jYXRlZCcgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyISAqLwotI2lmIChNQVhfVEFHUyAlIDMyKSAhPSAwCi0jZXJyb3IgIk1BWF9UQUdTIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMiEiCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNoYXIJYWxsb2NhdGVkW01BWF9UQUdTLzhdOwotICAgIGludAkJbnJfYWxsb2NhdGVkOwotICAgIGludAkJcXVldWVfc2l6ZTsKLX0gVEFHX0FMTE9DOwotCi1zdGF0aWMgVEFHX0FMTE9DIFRhZ0FsbG9jWzhdWzhdOyAvKiA4IHRhcmdldHMgYW5kIDggTFVOcyAqLwotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3RhZ3MoIHZvaWQgKQotewotICAgIGludCB0YXJnZXQsIGx1bjsKLSAgICBUQUdfQUxMT0MgKnRhOwotICAgIAotICAgIGlmICghc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nKQotCXJldHVybjsKLSAgICAKLSAgICBmb3IoIHRhcmdldCA9IDA7IHRhcmdldCA8IDg7ICsrdGFyZ2V0ICkgewotCWZvciggbHVuID0gMDsgbHVuIDwgODsgKytsdW4gKSB7Ci0JICAgIHRhID0gJlRhZ0FsbG9jW3RhcmdldF1bbHVuXTsKLQkgICAgbWVtc2V0KCAmdGEtPmFsbG9jYXRlZCwgMCwgTUFYX1RBR1MvOCApOwotCSAgICB0YS0+bnJfYWxsb2NhdGVkID0gMDsKLQkgICAgLyogQXQgdGhlIGJlZ2lubmluZywgYXNzdW1lIHRoZSBtYXhpbXVtIHF1ZXVlIHNpemUgd2UgY291bGQKLQkgICAgICogc3VwcG9ydCAoTUFYX1RBR1MpLiBUaGlzIHZhbHVlIHdpbGwgYmUgZGVjcmVhc2VkIGlmIHRoZSB0YXJnZXQKLQkgICAgICogcmV0dXJucyBRVUVVRV9GVUxMIHN0YXR1cy4KLQkgICAgICovCi0JICAgIHRhLT5xdWV1ZV9zaXplID0gTUFYX1RBR1M7Ci0JfQotICAgIH0KLX0KLQotCi0vKiBDaGVjayBpZiB3ZSBjYW4gaXNzdWUgYSBjb21tYW5kIHRvIHRoaXMgTFVOOiBGaXJzdCBzZWUgaWYgdGhlIExVTiBpcyBtYXJrZWQKLSAqIGJ1c3kgYnkgYW4gdW50YWdnZWQgY29tbWFuZC4gSWYgdGhlIGNvbW1hbmQgc2hvdWxkIHVzZSB0YWdnZWQgcXVldWluZywgYWxzbwotICogY2hlY2sgdGhhdCB0aGVyZSBpcyBhIGZyZWUgdGFnIGFuZCB0aGUgdGFyZ2V0J3MgcXVldWUgd29uJ3Qgb3ZlcmZsb3cuIFRoaXMKLSAqIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIHRvIGF2b2lkIHJhY2UKLSAqIGNvbmRpdGlvbnMuCi0gKi8gCi0KLXN0YXRpYyBpbnQgaXNfbHVuX2J1c3koc3RydWN0IHNjc2lfY21uZCAqY21kLCBpbnQgc2hvdWxkX2JlX3RhZ2dlZCkKLXsKLSAgICB1OCBsdW4gPSBjbWQtPmRldmljZS0+bHVuOwotICAgIFNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKLQotICAgIGlmIChob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICYgKDEgPDwgbHVuKSkKLQlyZXR1cm4oIDEgKTsKLSAgICBpZiAoIXNob3VsZF9iZV90YWdnZWQgfHwKLQkhc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nIHx8ICFjbWQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkKLQlyZXR1cm4oIDAgKTsKLSAgICBpZiAoVGFnQWxsb2NbY21kLT5kZXZpY2UtPmlkXVtsdW5dLm5yX2FsbG9jYXRlZCA+PQotCVRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXS5xdWV1ZV9zaXplICkgewotCWRwcmludGsoTkRFQlVHX1RBR1MsICAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVkOiBubyBmcmVlIHRhZ3NcbiIsCi0JCSAgICBIX05PKGNtZCksIGNtZC0+ZGV2aWNlLT5pZCwgbHVuICk7Ci0JcmV0dXJuKCAxICk7Ci0gICAgfQotICAgIHJldHVybiggMCApOwotfQotCi0KLS8qIEFsbG9jYXRlIGEgdGFnIGZvciBhIGNvbW1hbmQgKHRoZXJlIGFyZSBubyBjaGVja3MgYW55bW9yZSwgY2hlY2tfbHVuX2J1c3koKQotICogbXVzdCBiZSBjYWxsZWQgYmVmb3JlISksIG9yIHJlc2VydmUgdGhlIExVTiBpbiAnYnVzeScgaWYgdGhlIGNvbW1hbmQgaXMKLSAqIHVudGFnZ2VkLgotICovCi0KLXN0YXRpYyB2b2lkIGNtZF9nZXRfdGFnKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50IHNob3VsZF9iZV90YWdnZWQpCi17Ci0gICAgdTggbHVuID0gY21kLT5kZXZpY2UtPmx1bjsKLSAgICBTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7Ci0KLSAgICAvKiBJZiB3ZSBvciB0aGUgdGFyZ2V0IGRvbid0IHN1cHBvcnQgdGFnZ2VkIHF1ZXVpbmcsIGFsbG9jYXRlIHRoZSBMVU4gZm9yCi0gICAgICogYW4gdW50YWdnZWQgY29tbWFuZC4KLSAgICAgKi8KLSAgICBpZiAoIXNob3VsZF9iZV90YWdnZWQgfHwKLQkhc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nIHx8ICFjbWQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCWNtZC0+dGFnID0gVEFHX05PTkU7Ci0JaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSB8PSAoMSA8PCBsdW4pOwotCWRwcmludGsoTkRFQlVHX1RBR1MsICAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVkIG5vdyBhbGxvY2F0ZWQgYnkgdW50YWdnZWQgIgotCQkgICAgImNvbW1hbmRcbiIsIEhfTk8oY21kKSwgY21kLT5kZXZpY2UtPmlkLCBsdW4gKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0JVEFHX0FMTE9DICp0YSA9ICZUYWdBbGxvY1tjbWQtPmRldmljZS0+aWRdW2x1bl07Ci0KLQljbWQtPnRhZyA9IGZpbmRfZmlyc3RfemVyb19iaXQoICZ0YS0+YWxsb2NhdGVkLCBNQVhfVEFHUyApOwotCXNldF9iaXQoIGNtZC0+dGFnLCAmdGEtPmFsbG9jYXRlZCApOwotCXRhLT5ucl9hbGxvY2F0ZWQrKzsKLQlkcHJpbnRrKE5ERUJVR19UQUdTLCAgInNjc2klZDogdXNpbmcgdGFnICVkIGZvciB0YXJnZXQgJWQgbHVuICVkICIKLQkJICAgICIobm93ICVkIHRhZ3MgaW4gdXNlKVxuIiwKLQkJICAgIEhfTk8oY21kKSwgY21kLT50YWcsIGNtZC0+ZGV2aWNlLT5pZCwgbHVuLAotCQkgICAgdGEtPm5yX2FsbG9jYXRlZCApOwotICAgIH0KLX0KLQotCi0vKiBNYXJrIHRoZSB0YWcgb2YgY29tbWFuZCAnY21kJyBhcyBmcmVlLCBvciBpbiBjYXNlIG9mIGFuIHVudGFnZ2VkIGNvbW1hbmQsCi0gKiB1bmxvY2sgdGhlIExVTi4KLSAqLwotCi1zdGF0aWMgdm9pZCBjbWRfZnJlZV90YWcoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotICAgIHU4IGx1biA9IGNtZC0+ZGV2aWNlLT5sdW47Ci0gICAgU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwotCi0gICAgaWYgKGNtZC0+dGFnID09IFRBR19OT05FKSB7Ci0JaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmPSB+KDEgPDwgbHVuKTsKLQlkcHJpbnRrKE5ERUJVR19UQUdTLCAgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlZCB1bnRhZ2dlZCBjbWQgZmluaXNoZWRcbiIsCi0JCSAgICBIX05PKGNtZCksIGNtZC0+ZGV2aWNlLT5pZCwgbHVuICk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNtZC0+dGFnID49IE1BWF9UQUdTKSB7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJzY3NpJWQ6IHRyeWluZyB0byBmcmVlIGJhZCB0YWcgJWQhXG4iLAotCQlIX05PKGNtZCksIGNtZC0+dGFnICk7Ci0gICAgfQotICAgIGVsc2UgewotCVRBR19BTExPQyAqdGEgPSAmVGFnQWxsb2NbY21kLT5kZXZpY2UtPmlkXVtsdW5dOwotCWNsZWFyX2JpdCggY21kLT50YWcsICZ0YS0+YWxsb2NhdGVkICk7Ci0JdGEtPm5yX2FsbG9jYXRlZC0tOwotCWRwcmludGsoTkRFQlVHX1RBR1MsICAic2NzaSVkOiBmcmVlZCB0YWcgJWQgZm9yIHRhcmdldCAlZCBsdW4gJWRcbiIsCi0JCSAgICBIX05PKGNtZCksIGNtZC0+dGFnLCBjbWQtPmRldmljZS0+aWQsIGx1biApOwotICAgIH0KLX0KLQotCi1zdGF0aWMgdm9pZCBmcmVlX2FsbF90YWdzKCB2b2lkICkKLXsKLSAgICBpbnQgdGFyZ2V0LCBsdW47Ci0gICAgVEFHX0FMTE9DICp0YTsKLQotICAgIGlmICghc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nKQotCXJldHVybjsKLSAgICAKLSAgICBmb3IoIHRhcmdldCA9IDA7IHRhcmdldCA8IDg7ICsrdGFyZ2V0ICkgewotCWZvciggbHVuID0gMDsgbHVuIDwgODsgKytsdW4gKSB7Ci0JICAgIHRhID0gJlRhZ0FsbG9jW3RhcmdldF1bbHVuXTsKLQkgICAgbWVtc2V0KCAmdGEtPmFsbG9jYXRlZCwgMCwgTUFYX1RBR1MvOCApOwotCSAgICB0YS0+bnJfYWxsb2NhdGVkID0gMDsKLQl9Ci0gICAgfQotfQotCi0jZW5kaWYgLyogU1VQUE9SVF9UQUdTICovCi0KLQotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBpbml0aWFsaXplX1NDcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi0gKgotICogUHVycG9zZSA6IGluaXRpYWxpemUgdGhlIHNhdmVkIGRhdGEgcG9pbnRlcnMgZm9yIGNtZCB0byBwb2ludCB0byB0aGUgCi0gKglzdGFydCBvZiB0aGUgYnVmZmVyLgotICoKLSAqIElucHV0cyA6IGNtZCAtIHN0cnVjdCBzY3NpX2NtbmQgc3RydWN0dXJlIHRvIGhhdmUgcG9pbnRlcnMgcmVzZXQuCi0gKi8KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBpbml0aWFsaXplX1NDcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0gICAgLyogCi0gICAgICogSW5pdGlhbGl6ZSB0aGUgU2NzaSBQb2ludGVyIGZpZWxkIHNvIHRoYXQgYWxsIG9mIHRoZSBjb21tYW5kcyBpbiB0aGUgCi0gICAgICogdmFyaW91cyBxdWV1ZXMgYXJlIHZhbGlkLgotICAgICAqLwotCi0gICAgaWYgKHNjc2lfYnVmZmxlbihjbWQpKSB7Ci0JY21kLT5TQ3AuYnVmZmVyID0gc2NzaV9zZ2xpc3QoY21kKTsKLQljbWQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsID0gc2NzaV9zZ19jb3VudChjbWQpIC0gMTsKLQljbWQtPlNDcC5wdHIgPSAoY2hhciAqKSBTR0FERFIoY21kLT5TQ3AuYnVmZmVyKTsKLQljbWQtPlNDcC50aGlzX3Jlc2lkdWFsID0gY21kLT5TQ3AuYnVmZmVyLT5sZW5ndGg7Ci0gICAgfSBlbHNlIHsKLQljbWQtPlNDcC5idWZmZXIgPSBOVUxMOwotCWNtZC0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwgPSAwOwotCWNtZC0+U0NwLnB0ciA9IE5VTEw7Ci0JY21kLT5TQ3AudGhpc19yZXNpZHVhbCA9IDA7Ci0gICAgfQotICAgIAotfQotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2lmIE5ERUJVRwotc3RhdGljIHN0cnVjdCB7Ci0gICAgdW5zaWduZWQgY2hhciBtYXNrOwotICAgIGNvbnN0IGNoYXIgKiBuYW1lO30gCi1zaWduYWxzW10gPSB7eyBTUl9EQlAsICJQQVJJVFkifSwgeyBTUl9SU1QsICJSU1QiIH0sIHsgU1JfQlNZLCAiQlNZIiB9LCAKLSAgICB7IFNSX1JFUSwgIlJFUSIgfSwgeyBTUl9NU0csICJNU0ciIH0sIHsgU1JfQ0QsICAiQ0QiIH0sIHsgU1JfSU8sICJJTyIgfSwgCi0gICAgeyBTUl9TRUwsICJTRUwiIH0sIHswLCBOVUxMfX0sIAotYmFzcnNbXSA9IHt7QkFTUl9BVE4sICJBVE4ifSwge0JBU1JfQUNLLCAiQUNLIn0sIHswLCBOVUxMfX0sCi1pY3JzW10gPSB7e0lDUl9BU1NFUlRfUlNULCAiQVNTRVJUIFJTVCJ9LHtJQ1JfQVNTRVJUX0FDSywgIkFTU0VSVCBBQ0sifSwKLSAgICB7SUNSX0FTU0VSVF9CU1ksICJBU1NFUlQgQlNZIn0sIHtJQ1JfQVNTRVJUX1NFTCwgIkFTU0VSVCBTRUwifSwgCi0gICAge0lDUl9BU1NFUlRfQVROLCAiQVNTRVJUIEFUTiJ9LCB7SUNSX0FTU0VSVF9EQVRBLCAiQVNTRVJUIERBVEEifSwgCi0gICAgezAsIE5VTEx9fSwKLW1yc1tdID0ge3tNUl9CTE9DS19ETUFfTU9ERSwgIk1PREUgQkxPQ0sgRE1BIn0sIHtNUl9UQVJHRVQsICJNT0RFIFRBUkdFVCJ9LCAKLSAgICB7TVJfRU5BQkxFX1BBUl9DSEVDSywgIk1PREUgUEFSSVRZIENIRUNLIn0sIHtNUl9FTkFCTEVfUEFSX0lOVFIsIAotICAgICJNT0RFIFBBUklUWSBJTlRSIn0sIHtNUl9FTkFCTEVfRU9QX0lOVFIsIk1PREUgRU9QIElOVFIifSwKLSAgICB7TVJfTU9OSVRPUl9CU1ksICJNT0RFIE1PTklUT1IgQlNZIn0sCi0gICAge01SX0RNQV9NT0RFLCAiTU9ERSBETUEifSwge01SX0FSQklUUkFURSwgIk1PREUgQVJCSVRSQVRJT04ifSwgCi0gICAgezAsIE5VTEx9fTsKLQotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX3ByaW50KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotICoKLSAqIFB1cnBvc2UgOiBwcmludCB0aGUgU0NTSSBidXMgc2lnbmFscyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCi0gKgotICogSW5wdXQgOiBpbnN0YW5jZSAtIHdoaWNoIE5DUjUzODAKLSAqLwotCi1zdGF0aWMgdm9pZCBOQ1I1MzgwX3ByaW50KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKSB7Ci0gICAgdW5zaWduZWQgY2hhciBzdGF0dXMsIGRhdGEsIGJhc3IsIG1yLCBpY3IsIGk7Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICBkYXRhID0gTkNSNTM4MF9yZWFkKENVUlJFTlRfU0NTSV9EQVRBX1JFRyk7Ci0gICAgc3RhdHVzID0gTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpOwotICAgIG1yID0gTkNSNTM4MF9yZWFkKE1PREVfUkVHKTsKLSAgICBpY3IgPSBOQ1I1MzgwX3JlYWQoSU5JVElBVE9SX0NPTU1BTkRfUkVHKTsKLSAgICBiYXNyID0gTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRyk7Ci0gICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotICAgIHByaW50aygiU1RBVFVTX1JFRzogJTAyeCAiLCBzdGF0dXMpOwotICAgIGZvciAoaSA9IDA7IHNpZ25hbHNbaV0ubWFzayA7ICsraSkgCi0JaWYgKHN0YXR1cyAmIHNpZ25hbHNbaV0ubWFzaykKLQkgICAgcHJpbnRrKCIsJXMiLCBzaWduYWxzW2ldLm5hbWUpOwotICAgIHByaW50aygiXG5CQVNSOiAlMDJ4ICIsIGJhc3IpOwotICAgIGZvciAoaSA9IDA7IGJhc3JzW2ldLm1hc2sgOyArK2kpIAotCWlmIChiYXNyICYgYmFzcnNbaV0ubWFzaykKLQkgICAgcHJpbnRrKCIsJXMiLCBiYXNyc1tpXS5uYW1lKTsKLSAgICBwcmludGsoIlxuSUNSOiAlMDJ4ICIsIGljcik7Ci0gICAgZm9yIChpID0gMDsgaWNyc1tpXS5tYXNrOyArK2kpIAotCWlmIChpY3IgJiBpY3JzW2ldLm1hc2spCi0JICAgIHByaW50aygiLCVzIiwgaWNyc1tpXS5uYW1lKTsKLSAgICBwcmludGsoIlxuTU9ERTogJTAyeCAiLCBtcik7Ci0gICAgZm9yIChpID0gMDsgbXJzW2ldLm1hc2s7ICsraSkgCi0JaWYgKG1yICYgbXJzW2ldLm1hc2spCi0JICAgIHByaW50aygiLCVzIiwgbXJzW2ldLm5hbWUpOwotICAgIHByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIHN0cnVjdCB7Ci0gICAgdW5zaWduZWQgY2hhciB2YWx1ZTsKLSAgICBjb25zdCBjaGFyICpuYW1lOwotfSBwaGFzZXNbXSA9IHsKLSAgICB7UEhBU0VfREFUQU9VVCwgIkRBVEFPVVQifSwge1BIQVNFX0RBVEFJTiwgIkRBVEFJTiJ9LCB7UEhBU0VfQ01ET1VULCAiQ01ET1VUIn0sCi0gICAge1BIQVNFX1NUQVRJTiwgIlNUQVRJTiJ9LCB7UEhBU0VfTVNHT1VULCAiTVNHT1VUIn0sIHtQSEFTRV9NU0dJTiwgIk1TR0lOIn0sCi0gICAge1BIQVNFX1VOS05PV04sICJVTktOT1dOIn19OwotCi0vKiAKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX3ByaW50X3BoYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotICoKLSAqIFB1cnBvc2UgOiBwcmludCB0aGUgY3VycmVudCBTQ1NJIHBoYXNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKLSAqCi0gKiBJbnB1dCA6IGluc3RhbmNlIC0gd2hpY2ggTkNSNTM4MAotICovCi0KLXN0YXRpYyB2b2lkIE5DUjUzODBfcHJpbnRfcGhhc2Uoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi17Ci0gICAgdW5zaWduZWQgY2hhciBzdGF0dXM7Ci0gICAgaW50IGk7Ci0KLSAgICBzdGF0dXMgPSBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRyk7Ci0gICAgaWYgKCEoc3RhdHVzICYgU1JfUkVRKSkgCi0JcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogUkVRIG5vdCBhc3NlcnRlZCwgcGhhc2UgdW5rbm93bi5cbiIsIEhPU1ROTyk7Ci0gICAgZWxzZSB7Ci0JZm9yIChpID0gMDsgKHBoYXNlc1tpXS52YWx1ZSAhPSBQSEFTRV9VTktOT1dOKSAmJiAKLQkgICAgKHBoYXNlc1tpXS52YWx1ZSAhPSAoc3RhdHVzICYgUEhBU0VfTUFTSykpOyArK2kpOyAKLQlwcmludGsoS0VSTl9ERUJVRyAic2NzaSVkOiBwaGFzZSAlc1xuIiwgSE9TVE5PLCBwaGFzZXNbaV0ubmFtZSk7Ci0gICAgfQotfQotCi0jZW5kaWYKLQotLyoKLSAqICsrcm9tYW46IE5ldyBzY2hlbWUgb2YgY2FsbGluZyBOQ1I1MzgwX21haW4oKQotICogCi0gKiBJZiB3ZSdyZSBub3QgaW4gYW4gaW50ZXJydXB0LCB3ZSBjYW4gY2FsbCBvdXIgbWFpbiBkaXJlY3RseSwgaXQgY2Fubm90IGJlCi0gKiBhbHJlYWR5IHJ1bm5pbmcuIEVsc2UsIHdlIHF1ZXVlIGl0IG9uIGEgdGFzayBxdWV1ZSwgaWYgbm90ICdtYWluX3J1bm5pbmcnCi0gKiB0ZWxscyB1cyB0aGF0IGEgbG93ZXIgbGV2ZWwgaXMgYWxyZWFkeSBleGVjdXRpbmcgaXQuIFRoaXMgd2F5LAotICogJ21haW5fcnVubmluZycgbmVlZHMgbm90IGJlIHByb3RlY3RlZCBpbiBhIHNwZWNpYWwgd2F5LgotICoKLSAqIHF1ZXVlX21haW4oKSBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gZm9yIHB1dHRpbmcgb3VyIG1haW4gb250byB0aGUgdGFzawotICogcXVldWUsIGlmIG1haW5fcnVubmluZyBpcyBmYWxzZS4gSXQgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGZyb20gYQotICogaW50ZXJydXB0IG9yIGJvdHRvbSBoYWxmLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9nZnAuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotc3RhdGljIHZvbGF0aWxlIGludCBtYWluX3J1bm5pbmcgPSAwOwotc3RhdGljIERFQ0xBUkVfV09SSyhOQ1I1MzgwX3RxdWV1ZSwgTkNSNTM4MF9tYWluKTsKLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBxdWV1ZV9tYWluKHZvaWQpCi17Ci0gICAgaWYgKCFtYWluX3J1bm5pbmcpIHsKLQkvKiBJZiBpbiBpbnRlcnJ1cHQgYW5kIE5DUjUzODBfbWFpbigpIG5vdCBhbHJlYWR5IHJ1bm5pbmcsCi0JICAgcXVldWUgaXQgb24gdGhlICdpbW1lZGlhdGUnIHRhc2sgcXVldWUsIHRvIGJlIHByb2Nlc3NlZAotCSAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjdXJyZW50IGludGVycnVwdCBwcm9jZXNzaW5nIGhhcwotCSAgIGZpbmlzaGVkLiAqLwotCXNjaGVkdWxlX3dvcmsoJk5DUjUzODBfdHF1ZXVlKTsKLSAgICB9Ci0gICAgLyogZWxzZTogbm90aGluZyB0byBkbzogdGhlIHJ1bm5pbmcgTkNSNTM4MF9tYWluKCkgd2lsbCBwaWNrIHVwCi0gICAgICAgYW55IG5ld2x5IHF1ZXVlZCBjb21tYW5kLiAqLwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBOQ1I1MzgwX2FsbF9pbml0ICh2b2lkKQotewotICAgIHN0YXRpYyBpbnQgZG9uZSA9IDA7Ci0gICAgaWYgKCFkb25lKSB7Ci0JZHByaW50ayhOREVCVUdfSU5JVCwgInNjc2kgOiBOQ1I1MzgwX2FsbF9pbml0KClcbiIpOwotCWRvbmUgPSAxOwotICAgIH0KLX0KLQotIAotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1ODM4MF9wcmludF9vcHRpb25zIChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLSAqCi0gKiBQdXJwb3NlIDogY2FsbGVkIGJ5IHByb2JlIGNvZGUgaW5kaWNhdGluZyB0aGUgTkNSNTM4MCBkcml2ZXIKLSAqCSAgICAgb3B0aW9ucyB0aGF0IHdlcmUgc2VsZWN0ZWQuCi0gKgotICogSW5wdXRzIDogaW5zdGFuY2UsIHBvaW50ZXIgdG8gdGhpcyBpbnN0YW5jZS4gIFVudXNlZC4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgTkNSNTM4MF9wcmludF9vcHRpb25zIChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLXsKLSAgICBwcmludGsoIiBnZW5lcmljIG9wdGlvbnMiCi0jaWZkZWYgQVVUT1NFTlNFIAotICAgICIgQVVUT1NFTlNFIgotI2VuZGlmCi0jaWZkZWYgUkVBTF9ETUEKLSAgICAiIFJFQUwgRE1BIgotI2VuZGlmCi0jaWZkZWYgUEFSSVRZCi0gICAgIiBQQVJJVFkiCi0jZW5kaWYKLSNpZmRlZiBTVVBQT1JUX1RBR1MKLSAgICAiIFNDU0ktMiBUQUdHRUQgUVVFVUlORyIKLSNlbmRpZgotICAgICk7Ci0gICAgcHJpbnRrKCIgZ2VuZXJpYyByZWxlYXNlPSVkIiwgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9wcmludF9zdGF0dXMgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotICoKLSAqIFB1cnBvc2UgOiBwcmludCBjb21tYW5kcyBpbiB0aGUgdmFyaW91cyBxdWV1ZXMsIGNhbGxlZCBmcm9tCi0gKglOQ1I1MzgwX2Fib3J0IGFuZCBOQ1I1MzgwX2RlYnVnIHRvIGFpZCBkZWJ1Z2dpbmcuCi0gKgotICogSW5wdXRzIDogaW5zdGFuY2UsIHBvaW50ZXIgdG8gdGhpcyBpbnN0YW5jZS4gIAotICovCi0KLXN0YXRpYyB2b2lkIGxwcmludF9TY3NpX0NtbmQoU2NzaV9DbW5kICpjbWQpCi17Ci0JaW50IGksIHM7Ci0JdW5zaWduZWQgY2hhciAqY29tbWFuZDsKLQlwcmludGsoInNjc2klZDogZGVzdGluYXRpb24gdGFyZ2V0ICVkLCBsdW4gJWxsdVxuIiwKLQkJSF9OTyhjbWQpLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCXByaW50ayhLRVJOX0NPTlQgIiAgICAgICAgY29tbWFuZCA9ICIpOwotCWNvbW1hbmQgPSBjbWQtPmNtbmQ7Ci0JcHJpbnRrKEtFUk5fQ09OVCAiJTJkICgweCUwMngpIiwgY29tbWFuZFswXSwgY29tbWFuZFswXSk7Ci0JZm9yIChpID0gMSwgcyA9IENPTU1BTkRfU0laRShjb21tYW5kWzBdKTsgaSA8IHM7ICsraSkKLQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBjb21tYW5kW2ldKTsKLQlwcmludGsoIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIE5DUjUzODBfcHJpbnRfc3RhdHVzKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotewotCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQlTY3NpX0NtbmQgKnB0cjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JTkNSNTM4MF9kcHJpbnQoTkRFQlVHX0FOWSwgaW5zdGFuY2UpOwotCU5DUjUzODBfZHByaW50X3BoYXNlKE5ERUJVR19BTlksIGluc3RhbmNlKTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopaW5zdGFuY2UtPmhvc3RkYXRhOwotCi0JcHJpbnRrKCJcbk5DUjUzODAgY29yZSByZWxlYXNlPSVkLlxuIiwgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXByaW50aygiTkNSNTM4MDogY29yb3V0aW5lIGlzJXMgcnVubmluZy5cbiIsCi0JCW1haW5fcnVubmluZyA/ICIiIDogIm4ndCIpOwotCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkKLQkJcHJpbnRrKCJzY3NpJWQ6IG5vIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZFxuIiwgSE9TVE5PKTsKLQllbHNlCi0JCWxwcmludF9TY3NpX0NtbmQoKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkKTsKLQlwcmludGsoInNjc2klZDogaXNzdWVfcXVldWVcbiIsIEhPU1ROTyk7Ci0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IE5FWFQocHRyKSkKLQkJbHByaW50X1Njc2lfQ21uZChwdHIpOwotCi0JcHJpbnRrKCJzY3NpJWQ6IGRpc2Nvbm5lY3RlZF9xdWV1ZVxuIiwgSE9TVE5PKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOwotCSAgICAgcHRyID0gTkVYVChwdHIpKQotCQlscHJpbnRfU2NzaV9DbW5kKHB0cik7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBzaG93X1Njc2lfQ21uZChTY3NpX0NtbmQgKmNtZCwgc3RydWN0IHNlcV9maWxlICptKQotewotCWludCBpLCBzOwotCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQ7Ci0Jc2VxX3ByaW50ZihtLCAic2NzaSVkOiBkZXN0aW5hdGlvbiB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLAotCQlIX05PKGNtZCksIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0Jc2VxX3ByaW50ZihtLCAiICAgICAgICBjb21tYW5kID0gIik7Ci0JY29tbWFuZCA9IGNtZC0+Y21uZDsKLQlzZXFfcHJpbnRmKG0sICIlMmQgKDB4JTAyeCkiLCBjb21tYW5kWzBdLCBjb21tYW5kWzBdKTsKLQlmb3IgKGkgPSAxLCBzID0gQ09NTUFORF9TSVpFKGNvbW1hbmRbMF0pOyBpIDwgczsgKytpKQotCQlzZXFfcHJpbnRmKG0sICIgJTAyeCIsIGNvbW1hbmRbaV0pOwotCXNlcV9wcmludGYobSwgIlxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgTkNSNTM4MF9zaG93X2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JU2NzaV9DbW5kICpwdHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopaW5zdGFuY2UtPmhvc3RkYXRhOwotCi0Jc2VxX3ByaW50ZihtLCAiTkNSNTM4MCBjb3JlIHJlbGVhc2U9JWQuXG4iLCBOQ1I1MzgwX1BVQkxJQ19SRUxFQVNFKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Jc2VxX3ByaW50ZihtLCAiTkNSNTM4MDogY29yb3V0aW5lIGlzJXMgcnVubmluZy5cbiIsCi0JCW1haW5fcnVubmluZyA/ICIiIDogIm4ndCIpOwotCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkKLQkJc2VxX3ByaW50ZihtLCAic2NzaSVkOiBubyBjdXJyZW50bHkgY29ubmVjdGVkIGNvbW1hbmRcbiIsIEhPU1ROTyk7Ci0JZWxzZQotCQlzaG93X1Njc2lfQ21uZCgoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQsIG0pOwotCXNlcV9wcmludGYobSwgInNjc2klZDogaXNzdWVfcXVldWVcbiIsIEhPU1ROTyk7Ci0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IE5FWFQocHRyKSkKLQkJc2hvd19TY3NpX0NtbmQocHRyLCBtKTsKLQotCXNlcV9wcmludGYobSwgInNjc2klZDogZGlzY29ubmVjdGVkX3F1ZXVlXG4iLCBIT1NUTk8pOwotCWZvciAocHRyID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOyBwdHI7Ci0JICAgICBwdHIgPSBORVhUKHB0cikpCi0JCXNob3dfU2NzaV9DbW5kKHB0ciwgbSk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIAotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfaW5pdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi0gKgotICogUHVycG9zZSA6IGluaXRpYWxpemVzICppbnN0YW5jZSBhbmQgY29ycmVzcG9uZGluZyA1MzgwIGNoaXAuCi0gKgotICogSW5wdXRzIDogaW5zdGFuY2UgLSBpbnN0YW50aWF0aW9uIG9mIHRoZSA1MzgwIGRyaXZlci4gIAotICoKLSAqIE5vdGVzIDogSSBhc3N1bWUgdGhhdCB0aGUgaG9zdCwgaG9zdG5vLCBhbmQgaWQgYml0cyBoYXZlIGJlZW4KLSAqIAlzZXQgY29ycmVjdGx5LiAgSSBkb24ndCBjYXJlIGFib3V0IHRoZSBpcnEgYW5kIG90aGVyIGZpZWxkcy4gCi0gKiAKLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBOQ1I1MzgwX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIGludCBmbGFncykKLXsKLSAgICBpbnQgaTsKLSAgICBTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7Ci0KLSAgICBOQ1I1MzgwX2FsbF9pbml0KCk7Ci0KLSAgICBob3N0ZGF0YS0+YWJvcnRlZCA9IDA7Ci0gICAgaG9zdGRhdGEtPmlkX21hc2sgPSAxIDw8IGluc3RhbmNlLT50aGlzX2lkOwotICAgIGhvc3RkYXRhLT5pZF9oaWdoZXJfbWFzayA9IDA7Ci0gICAgZm9yIChpID0gaG9zdGRhdGEtPmlkX21hc2s7IGkgPD0gMHg4MDsgaSA8PD0gMSkKLQlpZiAoaSA+IGhvc3RkYXRhLT5pZF9tYXNrKQotCSAgICBob3N0ZGF0YS0+aWRfaGlnaGVyX21hc2sgfD0gaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgODsgKytpKQotCWhvc3RkYXRhLT5idXN5W2ldID0gMDsKLSNpZmRlZiBTVVBQT1JUX1RBR1MKLSAgICBpbml0X3RhZ3MoKTsKLSNlbmRpZgotI2lmIGRlZmluZWQgKFJFQUxfRE1BKQotICAgIGhvc3RkYXRhLT5kbWFfbGVuID0gMDsKLSNlbmRpZgotICAgIGhvc3RkYXRhLT50YXJnZXRzX3ByZXNlbnQgPSAwOwotICAgIGhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwotICAgIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IE5VTEw7Ci0gICAgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSA9IE5VTEw7Ci0gICAgaG9zdGRhdGEtPmZsYWdzID0gRkxBR19DSEVDS19MQVNUX0JZVEVfU0VOVDsKLQotICAgIGlmICghdGhlX3RlbXBsYXRlKSB7Ci0JdGhlX3RlbXBsYXRlID0gaW5zdGFuY2UtPmhvc3R0OwotCWZpcnN0X2luc3RhbmNlID0gaW5zdGFuY2U7Ci0gICAgfQotCQotCi0jaWZuZGVmIEFVVE9TRU5TRQotICAgIGlmICgoaW5zdGFuY2UtPmNtZF9wZXJfbHVuID4gMSkgfHwgKGluc3RhbmNlLT5jYW5fcXVldWUgPiAxKSkKLQkgcHJpbnRrKCJzY3NpJWQ6IFdBUk5JTkcgOiBzdXBwb3J0IGZvciBtdWx0aXBsZSBvdXRzdGFuZGluZyBjb21tYW5kcyBlbmFibGVkXG4iCi0JICAgICAgICAiICAgICAgICB3aXRob3V0IEFVVE9TRU5TRSBvcHRpb24sIGNvbnRpbmdlbnQgYWxsZWdpYW5jZSBjb25kaXRpb25zIG1heVxuIgotCSAgICAgICAgIiAgICAgICAgYmUgaW5jb3JyZWN0bHkgY2xlYXJlZC5cbiIsIEhPU1ROTyk7Ci0jZW5kaWYgLyogZGVmIEFVVE9TRU5TRSAqLwotCi0gICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLSAgICBOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsKLSAgICBOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywgMCk7Ci0gICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgMCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgTkNSNTM4MF9leGl0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotewotCS8qIEVtcHR5LCBhcyB3ZSBkaWRuJ3Qgc2NoZWR1bGUgYW55IGRlbGF5ZWQgd29yayAqLwotfQotCi0vKiAKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfcXVldWVfY29tbWFuZCAoc3RydWN0IHNjc2lfY21uZCAqY21kLAotICoJdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCi0gKgotICogUHVycG9zZSA6ICBlbnF1ZXVlcyBhIFNDU0kgY29tbWFuZAotICoKLSAqIElucHV0cyA6IGNtZCAtIFNDU0kgY29tbWFuZCwgZG9uZSAtIGZ1bmN0aW9uIGNhbGxlZCBvbiBjb21wbGV0aW9uLCB3aXRoCi0gKglhIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvci4KLSAqIAotICogUmV0dXJucyA6IDAKLSAqCi0gKiBTaWRlIGVmZmVjdHMgOiAKLSAqICAgICAgY21kIGlzIGFkZGVkIHRvIHRoZSBwZXIgaW5zdGFuY2UgaXNzdWVfcXVldWUsIHdpdGggbWlub3IgCi0gKgl0d2lkZGxpbmcgZG9uZSB0byB0aGUgaG9zdCBzcGVjaWZpYyBmaWVsZHMgb2YgY21kLiAgSWYgdGhlIAotICoJbWFpbiBjb3JvdXRpbmUgaXMgbm90IHJ1bm5pbmcsIGl0IGlzIHJlc3RhcnRlZC4KLSAqCi0gKi8KLQotLyogT25seSBtYWtlIHN0YXRpYyBpZiBhIHdyYXBwZXIgZnVuY3Rpb24gaXMgdXNlZCAqLwotc3RhdGljIGludCBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmRfbGNrKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKLQkJCQkgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCi17Ci0gICAgU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwotICAgIHN0cnVjdCBzY3NpX2NtbmQgKnRtcDsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0jaWYgKE5ERUJVRyAmIE5ERUJVR19OT19XUklURSkKLSAgICBzd2l0Y2ggKGNtZC0+Y21uZFswXSkgewotICAgIGNhc2UgV1JJVEVfNjoKLSAgICBjYXNlIFdSSVRFXzEwOgotCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBXUklURSBhdHRlbXB0ZWQgd2l0aCBOT19XUklURSBkZWJ1Z2dpbmcgZmxhZyBzZXRcbiIsCi0JICAgICAgIEhfTk8oY21kKSk7Ci0JY21kLT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KTsKLQlkb25lKGNtZCk7Ci0JcmV0dXJuIDA7Ci0gICAgfQotI2VuZGlmIC8qIChOREVCVUcgJiBOREVCVUdfTk9fV1JJVEUpICovCi0KLQotI2lmZGVmIE5DUjUzODBfU1RBVFMKLSMgaWYgMAotICAgIGlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCAmJiAhaG9zdGRhdGEtPmlzc3VlX3F1ZXVlICYmCi0JIWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUpIHsKLQlob3N0ZGF0YS0+dGltZWJhc2UgPSBqaWZmaWVzOwotICAgIH0KLSMgZW5kaWYKLSMgaWZkZWYgTkNSNTM4MF9TVEFUX0xJTUlUCi0gICAgaWYgKHNjc2lfYnVmZmxlbihjbWQpID4gTkNSNTM4MF9TVEFUX0xJTUlUKQotIyBlbmRpZgotCXN3aXRjaCAoY21kLT5jbW5kWzBdKQotCXsKLQkgICAgY2FzZSBXUklURToKLQkgICAgY2FzZSBXUklURV82OgotCSAgICBjYXNlIFdSSVRFXzEwOgotCQlob3N0ZGF0YS0+dGltZV93cml0ZVtjbWQtPmRldmljZS0+aWRdIC09IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJaG9zdGRhdGEtPmJ5dGVzX3dyaXRlW2NtZC0+ZGV2aWNlLT5pZF0gKz0gc2NzaV9idWZmbGVuKGNtZCk7Ci0JCWhvc3RkYXRhLT5wZW5kaW5ndysrOwotCQlicmVhazsKLQkgICAgY2FzZSBSRUFEOgotCSAgICBjYXNlIFJFQURfNjoKLQkgICAgY2FzZSBSRUFEXzEwOgotCQlob3N0ZGF0YS0+dGltZV9yZWFkW2NtZC0+ZGV2aWNlLT5pZF0gLT0gKGppZmZpZXMgLSBob3N0ZGF0YS0+dGltZWJhc2UpOwotCQlob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOwotCQlob3N0ZGF0YS0+cGVuZGluZ3IrKzsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0KLSAgICAvKiAKLSAgICAgKiBXZSB1c2UgdGhlIGhvc3Rfc2NyaWJibGUgZmllbGQgYXMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGNvbW1hbmQgIAotICAgICAqIGluIGEgcXVldWUgCi0gICAgICovCi0KLSAgICBTRVRfTkVYVChjbWQsIE5VTEwpOwotICAgIGNtZC0+c2NzaV9kb25lID0gZG9uZTsKLQotICAgIGNtZC0+cmVzdWx0ID0gMDsKLQotCi0gICAgLyogCi0gICAgICogSW5zZXJ0IHRoZSBjbWQgaW50byB0aGUgaXNzdWUgcXVldWUuIE5vdGUgdGhhdCBSRVFVRVNUIFNFTlNFIAotICAgICAqIGNvbW1hbmRzIGFyZSBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGUgcXVldWUgc2luY2UgYW55IGNvbW1hbmQgd2lsbAotICAgICAqIGNsZWFyIHRoZSBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9uIHRoYXQgZXhpc3RzIGFuZCB0aGUgCi0gICAgICogc2Vuc2UgZGF0YSBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgd2hpbGUgdGhlIGNvbmRpdGlvbiBleGlzdHMuCi0gICAgICovCi0KLSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0gICAgLyogKytndWVudGhlcjogbm93IHRoYXQgdGhlIGlzc3VlIHF1ZXVlIGlzIGJlaW5nIHNldCB1cCwgd2UgY2FuIGxvY2sgU1QtRE1BLgotICAgICAqIE90aGVyd2lzZSBhIHJ1bm5pbmcgTkNSNTM4MF9tYWluIG1heSBzdGVhbCB0aGUgbG9jay4KLSAgICAgKiBMb2NrIGJlZm9yZSBhY3R1YWxseSBpbnNlcnRpbmcgZHVlIHRvIGZhaXJuZXNzIHJlYXNvbnMgZXhwbGFpbmVkIGluCi0gICAgICogYXRhcmlfc2NzaS5jLiBJZiB3ZSBpbnNlcnQgZmlyc3QsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciB0aGlzIGRyaXZlcgotICAgICAqIHRvIHJlbGVhc2UgdGhlIGxvY2suCi0gICAgICogU3RvcCB0aW1lciBmb3IgdGhpcyBjb21tYW5kIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrLCBvciB0aW1lb3V0cwotICAgICAqIG1heSBoYXBwZW4gKGFuZCB0aGV5IHJlYWxseSBkbyksIGFuZCBpdCdzIG5vIGdvb2QgaWYgdGhlIGNvbW1hbmQgZG9lc24ndAotICAgICAqIGFwcGVhciBpbiBhbnkgb2YgdGhlIHF1ZXVlcy4KLSAgICAgKiArK3JvbWFuOiBKdXN0IGRpc2FibGluZyB0aGUgTkNSIGludGVycnVwdCBpc24ndCBzdWZmaWNpZW50IGhlcmUsCi0gICAgICogYmVjYXVzZSBhbHNvIGEgdGltZXIgaW50IGNhbiB0cmlnZ2VyIGFuIGFib3J0IG9yIHJlc2V0LCB3aGljaCB3b3VsZAotICAgICAqIGFsdGVyIHF1ZXVlcyBhbmQgdG91Y2ggdGhlIGxvY2suCi0gICAgICovCi0gICAgaWYgKCEoaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKSB8fCAoY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpKSB7Ci0JTElTVChjbWQsIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSk7Ci0JU0VUX05FWFQoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IGNtZDsKLSAgICB9IGVsc2UgewotCWZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKilob3N0ZGF0YS0+aXNzdWVfcXVldWU7Ci0JICAgICBORVhUKHRtcCk7IHRtcCA9IE5FWFQodG1wKSkKLQkgICAgOwotCUxJU1QoY21kLCB0bXApOwotCVNFVF9ORVhUKHRtcCwgY21kKTsKLSAgICB9Ci0KLSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLSAgICBkcHJpbnRrKE5ERUJVR19RVUVVRVMsICJzY3NpJWQ6IGNvbW1hbmQgYWRkZWQgdG8gJXMgb2YgcXVldWVcbiIsIEhfTk8oY21kKSwKLQkgICAgICAoY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpID8gImhlYWQiIDogInRhaWwiKTsKLQotICAgIC8qIElmIHF1ZXVlX2NvbW1hbmQoKSBpcyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgKHJlYWwgb25lIG9yIGJvdHRvbQotICAgICAqIGhhbGYpLCB3ZSBsZXQgcXVldWVfbWFpbigpIGRvIHRoZSBqb2Igb2YgdGFraW5nIGNhcmUgYWJvdXQgbWFpbi4gSWYgaXQKLSAgICAgKiBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRoaXMgaXMgYSBuby1vcCwgZWxzZSBtYWluIHdpbGwgYmUgcXVldWVkLgotICAgICAqCi0gICAgICogSWYgd2UncmUgbm90IGluIGFuIGludGVycnVwdCwgd2UgY2FuIGNhbGwgTkNSNTM4MF9tYWluKCkKLSAgICAgKiB1bmNvbmRpdGlvbmFsbHksIGJlY2F1c2UgaXQgY2Fubm90IGJlIGFscmVhZHkgcnVubmluZy4KLSAgICAgKi8KLSAgICBpZiAoaW5faW50ZXJydXB0KCkgfHwgKChmbGFncyA+PiA4KSAmIDcpID49IDYpCi0JcXVldWVfbWFpbigpOwotICAgIGVsc2UKLQlOQ1I1MzgwX21haW4oTlVMTCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBERUZfU0NTSV9RQ01EKE5DUjUzODBfcXVldWVfY29tbWFuZCkKLQotLyoKLSAqIEZ1bmN0aW9uIDogTkNSNTM4MF9tYWluICh2b2lkKSAKLSAqCi0gKiBQdXJwb3NlIDogTkNSNTM4MF9tYWluIGlzIGEgY29yb3V0aW5lIHRoYXQgcnVucyBhcyBsb25nIGFzIG1vcmUgd29yayBjYW4gCi0gKgliZSBkb25lIG9uIHRoZSBOQ1I1MzgwIGhvc3QgYWRhcHRlcnMgaW4gYSBzeXN0ZW0uICBCb3RoIAotICoJTkNSNTM4MF9xdWV1ZV9jb21tYW5kKCkgYW5kIE5DUjUzODBfaW50cigpIHdpbGwgdHJ5IHRvIHN0YXJ0IGl0IAotICoJaW4gY2FzZSBpdCBpcyBub3QgcnVubmluZy4KLSAqIAotICogTk9URSA6IE5DUjUzODBfbWFpbiBleGl0cyB3aXRoIGludGVycnVwdHMgKmRpc2FibGVkKiwgdGhlIGNhbGxlciBzaG91bGQgCi0gKiAgcmVlbmFibGUgdGhlbS4gIFRoaXMgcHJldmVudHMgcmVlbnRyYW5jeSBhbmQga2VybmVsIHN0YWNrIG92ZXJmbG93LgotICovIAkKLSAgICAKLXN0YXRpYyB2b2lkIE5DUjUzODBfbWFpbiAoc3RydWN0IHdvcmtfc3RydWN0ICpibCkKLXsKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICp0bXAsICpwcmV2OwotICAgIHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gZmlyc3RfaW5zdGFuY2U7Ci0gICAgc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gSE9TVERBVEEoaW5zdGFuY2UpOwotICAgIGludCBkb25lOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgCi0gICAgLyoKLSAgICAgKiBXZSBydW4gKHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCkgdW50aWwgd2UncmUgc3VyZSB0aGF0IG5vbmUgb2YgCi0gICAgICogdGhlIGhvc3QgYWRhcHRlcnMgaGF2ZSBhbnl0aGluZyB0aGF0IGNhbiBiZSBkb25lLCBhdCB3aGljaCBwb2ludCAKLSAgICAgKiB3ZSBzZXQgbWFpbl9ydW5uaW5nIHRvIDAgYW5kIGV4aXQuCi0gICAgICoKLSAgICAgKiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGJlZm9yZSBkb2luZyB2YXJpb3VzIG90aGVyIGludGVybmFsIAotICAgICAqIGluc3RydWN0aW9ucywgYWZ0ZXIgd2UndmUgZGVjaWRlZCB0aGF0IHdlIG5lZWQgdG8gcnVuIHRocm91Z2gKLSAgICAgKiB0aGUgbG9vcCBhZ2Fpbi4KLSAgICAgKgotICAgICAqIHRoaXMgc2hvdWxkIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucy4KLSAgICAgKiAKLSAgICAgKiArK3JvbWFuOiBKdXN0IGRpc2FibGluZyB0aGUgTkNSIGludGVycnVwdCBpc24ndCBzdWZmaWNpZW50IGhlcmUsCi0gICAgICogYmVjYXVzZSBhbHNvIGEgdGltZXIgaW50IGNhbiB0cmlnZ2VyIGFuIGFib3J0IG9yIHJlc2V0LCB3aGljaCBjYW4KLSAgICAgKiBhbHRlciBxdWV1ZXMgYW5kIHRvdWNoIHRoZSBGYWxjb24gbG9jay4KLSAgICAgKi8KLQotICAgIC8qIFRlbGwgaW50IGhhbmRsZXJzIG1haW4oKSBpcyBub3cgYWxyZWFkeSBleGVjdXRpbmcuICBOb3RlIHRoYXQKLSAgICAgICBubyByYWNlcyBhcmUgcG9zc2libGUgaGVyZS4gSWYgYW4gaW50IGNvbWVzIGluIGJlZm9yZQotICAgICAgICdtYWluX3J1bm5pbmcnIGlzIHNldCBoZXJlLCBhbmQgcXVldWVzL2V4ZWN1dGVzIG1haW4gdmlhIHRoZQotICAgICAgIHRhc2sgcXVldWUsIGl0IGRvZXNuJ3QgZG8gYW55IGhhcm0sIGp1c3QgdGhpcyBpbnN0YW5jZSBvZiBtYWluCi0gICAgICAgd29uJ3QgZmluZCBhbnkgd29yayBsZWZ0IHRvIGRvLiAqLwotICAgIGlmIChtYWluX3J1bm5pbmcpCi0gICAgCXJldHVybjsKLSAgICBtYWluX3J1bm5pbmcgPSAxOwotCi0gICAgbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0gICAgZG8gewotCWxvY2FsX2lycV9kaXNhYmxlKCk7IC8qIEZyZWV6ZSByZXF1ZXN0IHF1ZXVlcyAqLwotCWRvbmUgPSAxOwotCQotCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCSAgICBkcHJpbnRrKE5ERUJVR19NQUlOLCAgInNjc2klZDogbm90IGNvbm5lY3RlZFxuIiwgSE9TVE5PICk7Ci0JICAgIC8qCi0JICAgICAqIFNlYXJjaCB0aHJvdWdoIHRoZSBpc3N1ZV9xdWV1ZSBmb3IgYSBjb21tYW5kIGRlc3RpbmVkCi0JICAgICAqIGZvciBhIHRhcmdldCB0aGF0J3Mgbm90IGJ1c3kuCi0JICAgICAqLwotI2lmIChOREVCVUcgJiBOREVCVUdfTElTVFMpCi0JICAgIGZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLCBwcmV2ID0gTlVMTDsKLQkJIHRtcCAmJiAodG1wICE9IHByZXYpOyBwcmV2ID0gdG1wLCB0bXAgPSBORVhUKHRtcCkpCi0JCTsKLQkgICAgaWYgKCh0bXAgPT0gcHJldikgJiYgdG1wKSBwcmludGsoIiBMT09QXG4iKTsvKiBlbHNlIHByaW50aygiXG4iKTsqLwotI2VuZGlmCi0JICAgIGZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLAotCQkgcHJldiA9IE5VTEw7IHRtcDsgcHJldiA9IHRtcCwgdG1wID0gTkVYVCh0bXApICkgewotCi0JCWlmIChwcmV2ICE9IHRtcCkKLQkJCWRwcmludGsoTkRFQlVHX0xJU1RTLCAiTUFJTiB0bXA9JXAgICB0YXJnZXQ9JWQgICBidXN5PSVkIGx1bj0lbGx1XG4iLCB0bXAsIHRtcC0+ZGV2aWNlLT5pZCwgaG9zdGRhdGEtPmJ1c3lbdG1wLT5kZXZpY2UtPmlkXSwgdG1wLT5kZXZpY2UtPmx1bik7Ci0JCS8qICBXaGVuIHdlIGZpbmQgb25lLCByZW1vdmUgaXQgZnJvbSB0aGUgaXNzdWUgcXVldWUuICovCi0JCS8qICsrZ3VlbnRoZXI6IHBvc3NpYmxlIHJhY2Ugd2l0aCBGYWxjb24gbG9ja2luZyAqLwotCQlpZiAoCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCSAgICAhaXNfbHVuX2J1c3koIHRtcCwgdG1wLT5jbW5kWzBdICE9IFJFUVVFU1RfU0VOU0UpCi0jZWxzZQotCQkgICAgIShob3N0ZGF0YS0+YnVzeVt0bXAtPmRldmljZS0+aWRdICYgKDEgPDwgdG1wLT5kZXZpY2UtPmx1bikpCi0jZW5kaWYKLQkJICAgICkgewotCQkgICAgLyogKytndWVudGhlcjoganVzdCB0byBiZSBzdXJlLCB0aGlzIG11c3QgYmUgYXRvbWljICovCi0JCSAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQkgICAgaWYgKHByZXYpIHsKLQkJICAgICAgICBSRU1PVkUocHJldiwgTkVYVChwcmV2KSwgdG1wLCBORVhUKHRtcCkpOwotCQkJU0VUX05FWFQocHJldiwgTkVYVCh0bXApKTsKLQkJICAgIH0gZWxzZSB7Ci0JCSAgICAgICAgUkVNT1ZFKC0xLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUsIHRtcCwgTkVYVCh0bXApKTsKLQkJCWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IE5FWFQodG1wKTsKLQkJICAgIH0KLQkJICAgIFNFVF9ORVhUKHRtcCwgTlVMTCk7Ci0JCSAgICAKLQkJICAgIC8qIHJlZW5hYmxlIGludGVycnVwdHMgYWZ0ZXIgZmluZGluZyBvbmUgKi8KLQkJICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJICAgIAotCQkgICAgLyogCi0JCSAgICAgKiBBdHRlbXB0IHRvIGVzdGFibGlzaCBhbiBJX1RfTCBuZXh1cyBoZXJlLiAKLQkJICAgICAqIE9uIHN1Y2Nlc3MsIGluc3RhbmNlLT5ob3N0ZGF0YS0+Y29ubmVjdGVkIGlzIHNldC4KLQkJICAgICAqIE9uIGZhaWx1cmUsIHdlIG11c3QgYWRkIHRoZSBjb21tYW5kIGJhY2sgdG8gdGhlCi0JCSAgICAgKiAgIGlzc3VlIHF1ZXVlIHNvIHdlIGNhbiBrZWVwIHRyeWluZy4JCi0JCSAgICAgKi8KLQkJICAgIGRwcmludGsoTkRFQlVHX01BSU4sICJzY3NpJWQ6IG1haW4oKTogY29tbWFuZCBmb3IgdGFyZ2V0ICVkICIKLQkJCQkibHVuICVsbHUgcmVtb3ZlZCBmcm9tIGlzc3VlX3F1ZXVlXG4iLAotCQkJCUhPU1ROTywgdG1wLT5kZXZpY2UtPmlkLCB0bXAtPmRldmljZS0+bHVuKTsKLQkJICAgIC8qIAotCQkgICAgICogUkVRVUVTVCBTRU5TRSBjb21tYW5kcyBhcmUgaXNzdWVkIHdpdGhvdXQgdGFnZ2VkCi0JCSAgICAgKiBxdWV1ZWluZywgZXZlbiBvbiBTQ1NJLUlJIGRldmljZXMgYmVjYXVzZSB0aGUgCi0JCSAgICAgKiBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9uIGV4aXN0cyBmb3IgdGhlIAotCQkgICAgICogZW50aXJlIHVuaXQuCi0JCSAgICAgKi8KLQkJICAgIC8qICsrcm9tYW46IC4uLmFuZCB0aGUgc3RhbmRhcmQgYWxzbyByZXF1aXJlcyB0aGF0Ci0JCSAgICAgKiBSRVFVRVNUIFNFTlNFIGNvbW1hbmQgYXJlIHVudGFnZ2VkLgotCQkgICAgICovCi0JCSAgICAKLSNpZmRlZiBTVVBQT1JUX1RBR1MKLQkJICAgIGNtZF9nZXRfdGFnKCB0bXAsIHRtcC0+Y21uZFswXSAhPSBSRVFVRVNUX1NFTlNFICk7Ci0jZW5kaWYKLQkJICAgIGlmICghTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIHRtcCwgCi0JCQkgICAgKHRtcC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSA/IFRBR19OT05FIDogCi0JCQkgICAgVEFHX05FWFQpKSB7Ci0JCQlicmVhazsKLQkJICAgIH0gZWxzZSB7Ci0JCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQkJTElTVCh0bXAsIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSk7Ci0JCQlTRVRfTkVYVCh0bXAsIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSk7Ci0JCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSB0bXA7Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCQljbWRfZnJlZV90YWcoIHRtcCApOwotI2VuZGlmCi0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQlkcHJpbnRrKE5ERUJVR19NQUlOLCAic2NzaSVkOiBtYWluKCk6IHNlbGVjdCgpIGZhaWxlZCwgIgotCQkJCSAgICAicmV0dXJuZWQgdG8gaXNzdWVfcXVldWVcbiIsIEhPU1ROTyk7Ci0JCQlpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCkKLQkJCSAgICBicmVhazsKLQkJICAgIH0KLQkJfSAvKiBpZiB0YXJnZXQvbHVuL3RhcmdldCBxdWV1ZSBpcyBub3QgYnVzeSAqLwotCSAgICB9IC8qIGZvciBpc3N1ZV9xdWV1ZSAqLwotCX0gLyogaWYgKCFob3N0ZGF0YS0+Y29ubmVjdGVkKSAqLwotCWlmIChob3N0ZGF0YS0+Y29ubmVjdGVkIAotI2lmZGVmIFJFQUxfRE1BCi0JICAgICYmICFob3N0ZGF0YS0+ZG1hX2xlbgotI2VuZGlmCi0JICAgICkgewotCSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JICAgIGRwcmludGsoTkRFQlVHX01BSU4sICJzY3NpJWQ6IG1haW46IHBlcmZvcm1pbmcgaW5mb3JtYXRpb24gdHJhbnNmZXJcbiIsCi0JCQlIT1NUTk8pOwotCSAgICBOQ1I1MzgwX2luZm9ybWF0aW9uX3RyYW5zZmVyKGluc3RhbmNlKTsKLQkgICAgZHByaW50ayhOREVCVUdfTUFJTiwgInNjc2klZDogbWFpbjogZG9uZSBzZXQgZmFsc2VcbiIsIEhPU1ROTyk7Ci0JICAgIGRvbmUgPSAwOwotCX0KLSAgICB9IHdoaWxlICghZG9uZSk7Ci0KLSAgICAvKiBCZXR0ZXIgYWxsb3cgaW50cyBfYWZ0ZXJfICdtYWluX3J1bm5pbmcnIGhhcyBiZWVuIGNsZWFyZWQsIGVsc2UKLSAgICAgICBhbiBpbnRlcnJ1cHQgY291bGQgYmVsaWV2ZSB3ZSdsbCBwaWNrIHVwIHRoZSB3b3JrIGl0IGxlZnQgZm9yCi0gICAgICAgdXMsIGJ1dCB3ZSB3b24ndCBzZWUgaXQgYW55bW9yZSBoZXJlLi4uICovCi0gICAgbWFpbl9ydW5uaW5nID0gMDsKLSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLQotI2lmZGVmIFJFQUxfRE1BCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfZG1hX2NvbXBsZXRlIChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLSAqCi0gKiBQdXJwb3NlIDogQ2FsbGVkIGJ5IGludGVycnVwdCBoYW5kbGVyIHdoZW4gRE1BIGZpbmlzaGVzIG9yIGEgcGhhc2UKLSAqCW1pc21hdGNoIG9jY3VycyAod2hpY2ggd291bGQgZmluaXNoIHRoZSBETUEgdHJhbnNmZXIpLiAgCi0gKgotICogSW5wdXRzIDogaW5zdGFuY2UgLSB0aGlzIGluc3RhbmNlIG9mIHRoZSBOQ1I1MzgwLgotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBOQ1I1MzgwX2RtYV9jb21wbGV0ZSggc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgKQotewotICAgIFNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKLSAgICBpbnQgICAgICAgICAgIHRyYW5zZmVyZWQ7Ci0gICAgdW5zaWduZWQgY2hhciAqKmRhdGE7Ci0gICAgdm9sYXRpbGUgaW50ICAqY291bnQ7Ci0KLSAgICBpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IHJlY2VpdmVkIGVuZCBvZiBETUEgaW50ZXJydXB0IHdpdGggIgotCSAgICAgICAibm8gY29ubmVjdGVkIGNtZFxuIiwgSE9TVE5PKTsKLQlyZXR1cm47Ci0gICAgfQotCi0gICAgZHByaW50ayhOREVCVUdfRE1BLCAic2NzaSVkOiByZWFsIERNQSB0cmFuc2ZlciBjb21wbGV0ZSwgYmFzciAweCVYLCBzciAweCVYXG4iLAotCSAgICAgICBIT1NUTk8sIE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpLAotCSAgICAgICBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpOwotCi0gICAgaWYoKHN1bjNzY3NpX2RtYV9maW5pc2gocnFfZGF0YV9kaXIoaG9zdGRhdGEtPmNvbm5lY3RlZC0+cmVxdWVzdCkpKSkgewotCSAgICBwcmludGsoInNjc2klZDogb3ZlcnJ1biBpbiBVREMgY291bnRlciAtLSBub3QgcHJlcGFyZWQgdG8gZGVhbCB3aXRoIHRoaXMhXG4iLCBIT1NUTk8pOwotCSAgICBwcmludGsoInBsZWFzZSBlLW1haWwgc2FtbXlAc2FtbXkubmV0IHdpdGggYSBkZXNjcmlwdGlvbiBvZiBob3cgdGhpc1xuIik7Ci0JICAgIHByaW50aygiZXJyb3Igd2FzIHByb2R1Y2VkLlxuIik7Ci0JICAgIEJVRygpOwotICAgIH0KLQotICAgIC8qIG1ha2Ugc3VyZSB3ZSdyZSBub3Qgc3R1Y2sgaW4gYSBkYXRhIHBoYXNlICovCi0gICAgaWYoKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgKEJBU1JfUEhBU0VfTUFUQ0ggfAotCQkJCQkgICAgQkFTUl9BQ0spKSA9PQotICAgICAgIChCQVNSX1BIQVNFX01BVENIIHwgQkFTUl9BQ0spKSB7Ci0JICAgIHByaW50aygic2NzaSVkOiBCQVNSICUwMnhcbiIsIEhPU1ROTywgTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykpOwotCSAgICBwcmludGsoInNjc2klZDogYnVzIHN0dWNrIGluIGRhdGEgcGhhc2UgLS0gcHJvYmFibHkgYSBzaW5nbGUgYnl0ZSAiCi0JCSAgICJvdmVycnVuIVxuIiwgSE9TVE5PKTsKLQkgICAgcHJpbnRrKCJub3QgcHJlcGFyZWQgZm9yIHRoaXMgZXJyb3IhXG4iKTsKLQkgICAgcHJpbnRrKCJwbGVhc2UgZS1tYWlsIHNhbW15QHNhbW15Lm5ldCB3aXRoIGEgZGVzY3JpcHRpb24gb2YgaG93IHRoaXNcbiIpOwotCSAgICBwcmludGsoImVycm9yIHdhcyBwcm9kdWNlZC5cbiIpOwotCSAgICBCVUcoKTsKLSAgICB9Ci0KLQotCi0gICAgKHZvaWQpIE5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7Ci0gICAgTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7Ci0gICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQotICAgIHRyYW5zZmVyZWQgPSBob3N0ZGF0YS0+ZG1hX2xlbiAtIE5DUjUzODBfZG1hX3Jlc2lkdWFsKGluc3RhbmNlKTsKLSAgICBob3N0ZGF0YS0+ZG1hX2xlbiA9IDA7Ci0KLSAgICBkYXRhID0gKHVuc2lnbmVkIGNoYXIgKiopICYoaG9zdGRhdGEtPmNvbm5lY3RlZC0+U0NwLnB0cik7Ci0gICAgY291bnQgPSAmKGhvc3RkYXRhLT5jb25uZWN0ZWQtPlNDcC50aGlzX3Jlc2lkdWFsKTsKLSAgICAqZGF0YSArPSB0cmFuc2ZlcmVkOwotICAgICpjb3VudCAtPSB0cmFuc2ZlcmVkOwotCi19Ci0jZW5kaWYgLyogUkVBTF9ETUEgKi8KLQotCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfaW50ciAoaW50IGlycSkKLSAqIAotICogUHVycG9zZSA6IGhhbmRsZSBpbnRlcnJ1cHRzLCByZWVzdGFibGlzaGluZyBJX1RfTCBvciBJX1RfTF9RIG5leHVzZXMKLSAqCWZyb20gdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZSwgYW5kIHJlc3RhcnRpbmcgTkNSNTM4MF9tYWluKCkgCi0gKglhcyByZXF1aXJlZC4KLSAqCi0gKiBJbnB1dHMgOiBpbnQgaXJxLCBpcnEgdGhhdCBjYXVzZWQgdGhpcyBpbnRlcnJ1cHQuCi0gKgotICovCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBOQ1I1MzgwX2ludHIgKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLSAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGZpcnN0X2luc3RhbmNlOwotICAgIGludCBkb25lID0gMSwgaGFuZGxlZCA9IDA7Ci0gICAgdW5zaWduZWQgY2hhciBiYXNyOwotCi0gICAgZHByaW50ayhOREVCVUdfSU5UUiwgInNjc2klZDogTkNSNTM4MCBpcnEgdHJpZ2dlcmVkXG4iLCBIT1NUTk8pOwotCi0gICAgLyogTG9vayBmb3IgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0gICAgYmFzciA9IE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpOwotICAgIGRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IEJBU1I9JTAyeFxuIiwgSE9TVE5PLCBiYXNyKTsKLSAgICAvKiBkaXNwYXRjaCB0byBhcHByb3ByaWF0ZSByb3V0aW5lIGlmIGZvdW5kIGFuZCBkb25lPTAgKi8KLSAgICBpZiAoYmFzciAmIEJBU1JfSVJRKSB7Ci0JTkNSNTM4MF9kcHJpbnQoTkRFQlVHX0lOVFIsIGluc3RhbmNlKTsKLQlpZiAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIChTUl9TRUx8U1JfSU8pKSA9PSAoU1JfU0VMfFNSX0lPKSkgewotCSAgICBkb25lID0gMDsKLS8vCSAgICBFTkFCTEVfSVJRKCk7Ci0JICAgIGRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IFNFTCBpbnRlcnJ1cHRcbiIsIEhPU1ROTyk7Ci0JICAgIE5DUjUzODBfcmVzZWxlY3QoaW5zdGFuY2UpOwotCSAgICAodm9pZCkgTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLQl9Ci0JZWxzZSBpZiAoYmFzciAmIEJBU1JfUEFSSVRZX0VSUk9SKSB7Ci0JICAgIGRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IFBBUklUWSBpbnRlcnJ1cHRcbiIsIEhPU1ROTyk7Ci0JICAgICh2b2lkKSBOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOwotCX0KLQllbHNlIGlmICgoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUlNUKSA9PSBTUl9SU1QpIHsKLQkgICAgZHByaW50ayhOREVCVUdfSU5UUiwgInNjc2klZDogUkVTRVQgaW50ZXJydXB0XG4iLCBIT1NUTk8pOwotCSAgICAodm9pZClOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOwotCX0KLQllbHNlIHsKLQkgICAgLyogIAotCSAgICAgKiBUaGUgcmVzdCBvZiB0aGUgaW50ZXJydXB0IGNvbmRpdGlvbnMgY2FuIG9jY3VyIG9ubHkgZHVyaW5nIGEKLQkgICAgICogRE1BIHRyYW5zZmVyCi0JICAgICAqLwotCi0jaWYgZGVmaW5lZChSRUFMX0RNQSkKLQkgICAgLyoKLQkgICAgICogV2Ugc2hvdWxkIG9ubHkgZ2V0IFBIQVNFIE1JU01BVENIIGFuZCBFT1AgaW50ZXJydXB0cyBpZiB3ZSBoYXZlCi0JICAgICAqIERNQSBlbmFibGVkLCBzbyBkbyBhIHNhbml0eSBjaGVjayBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXR0aW5nCi0JICAgICAqIG9mIHRoZSBNT0RFIHJlZ2lzdGVyLgotCSAgICAgKi8KLQotCSAgICBpZiAoKE5DUjUzODBfcmVhZChNT0RFX1JFRykgJiBNUl9ETUFfTU9ERSkgJiYKLQkJKChiYXNyICYgQkFTUl9FTkRfRE1BX1RSQU5TRkVSKSB8fCAKLQkJICEoYmFzciAmIEJBU1JfUEhBU0VfTUFUQ0gpKSkgewotCQkgICAgCi0JCWRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IFBIQVNFIE1JU00gb3IgRU9QIGludGVycnVwdFxuIiwgSE9TVE5PKTsKLQkJTkNSNTM4MF9kbWFfY29tcGxldGUoIGluc3RhbmNlICk7Ci0JCWRvbmUgPSAwOwotLy8JCUVOQUJMRV9JUlEoKTsKLQkgICAgfSBlbHNlCi0jZW5kaWYgLyogUkVBTF9ETUEgKi8KLQkgICAgewotLyogTVM6IElnbm9yZSB1bmtub3duIHBoYXNlIG1pc21hdGNoIGludGVycnVwdHMgKGNhdXNlZCBieSBFT1AgaW50ZXJydXB0KSAqLwotCQlpZiAoYmFzciAmIEJBU1JfUEhBU0VfTUFUQ0gpCi0JCSAgIGRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IHVua25vd24gaW50ZXJydXB0LCAiCi0JCQkgICAiQkFTUiAweCV4LCBNUiAweCV4LCBTUiAweCV4XG4iLAotCQkJICAgSE9TVE5PLCBiYXNyLCBOQ1I1MzgwX3JlYWQoTU9ERV9SRUcpLAotCQkJICAgTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpKTsKLQkJKHZvaWQpIE5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7Ci0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCQlkcmVncy0+Y3NyIHw9IENTUl9ETUFfRU5BQkxFOwotI2VuZGlmCi0JICAgIH0KLQl9IC8qIGlmICEoU0VMRUNUSU9OIHx8IFBBUklUWSkgKi8KLQloYW5kbGVkID0gMTsKLSAgICB9IC8qIEJBU1IgJiBJUlEgKi8KLSAgICBlbHNlIHsKLQotCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBpbnRlcnJ1cHQgd2l0aG91dCBJUlEgYml0IHNldCBpbiBCQVNSLCAiCi0JICAgICAgICJCQVNSIDB4JVgsIE1SIDB4JVgsIFNSIDB4JXhcbiIsIEhPU1ROTywgYmFzciwKLQkgICAgICAgTkNSNTM4MF9yZWFkKE1PREVfUkVHKSwgTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpKTsKLQkodm9pZCkgTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLSNpZmRlZiBTVU4zX1NDU0lfVk1FCi0JCWRyZWdzLT5jc3IgfD0gQ1NSX0RNQV9FTkFCTEU7Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFkb25lKSB7Ci0JZHByaW50ayhOREVCVUdfSU5UUiwgInNjc2klZDogaW4gaW50IHJvdXRpbmUsIGNhbGxpbmcgbWFpblxuIiwgSE9TVE5PKTsKLQkvKiBQdXQgYSBjYWxsIHRvIE5DUjUzODBfbWFpbigpIG9uIHRoZSBxdWV1ZS4uLiAqLwotCXF1ZXVlX21haW4oKTsKLSAgICB9Ci0gICAgcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Ci19Ci0KLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi1zdGF0aWMgdm9pZCBjb2xsZWN0X3N0YXRzKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSwKLQkJCSAgc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotIyBpZmRlZiBOQ1I1MzgwX1NUQVRfTElNSVQKLSAgICBpZiAoc2NzaV9idWZmbGVuKGNtZCkgPiBOQ1I1MzgwX1NUQVRfTElNSVQpCi0jIGVuZGlmCi0Jc3dpdGNoIChjbWQtPmNtbmRbMF0pCi0JewotCSAgICBjYXNlIFdSSVRFOgotCSAgICBjYXNlIFdSSVRFXzY6Ci0JICAgIGNhc2UgV1JJVEVfMTA6Ci0JCWhvc3RkYXRhLT50aW1lX3dyaXRlW2NtZC0+ZGV2aWNlLT5pZF0gKz0gKGppZmZpZXMgLSBob3N0ZGF0YS0+dGltZWJhc2UpOwotCQkvKmhvc3RkYXRhLT5ieXRlc193cml0ZVtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOyovCi0JCWhvc3RkYXRhLT5wZW5kaW5ndy0tOwotCQlicmVhazsKLQkgICAgY2FzZSBSRUFEOgotCSAgICBjYXNlIFJFQURfNjoKLQkgICAgY2FzZSBSRUFEXzEwOgotCQlob3N0ZGF0YS0+dGltZV9yZWFkW2NtZC0+ZGV2aWNlLT5pZF0gKz0gKGppZmZpZXMgLSBob3N0ZGF0YS0+dGltZWJhc2UpOwotCQkvKmhvc3RkYXRhLT5ieXRlc19yZWFkW2NtZC0+ZGV2aWNlLT5pZF0gKz0gc2NzaV9idWZmbGVuKGNtZCk7Ki8KLQkJaG9zdGRhdGEtPnBlbmRpbmdyLS07Ci0JCWJyZWFrOwotCX0KLX0KLSNlbmRpZgotCi0vKiAKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAotICogCQkJCSBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCWludCB0YWcpOwotICoKLSAqIFB1cnBvc2UgOiBlc3RhYmxpc2hlcyBJX1RfTCBvciBJX1RfTF9RIG5leHVzIGZvciBuZXcgb3IgZXhpc3RpbmcgY29tbWFuZCwKLSAqCWluY2x1ZGluZyBBUkJJVFJBVElPTiwgU0VMRUNUSU9OLCBhbmQgaW5pdGlhbCBtZXNzYWdlIG91dCBmb3IgCi0gKglJREVOVElGWSBhbmQgcXVldWUgbWVzc2FnZXMuIAotICoKLSAqIElucHV0cyA6IGluc3RhbmNlIC0gaW5zdGFudGlhdGlvbiBvZiB0aGUgNTM4MCBkcml2ZXIgb24gd2hpY2ggdGhpcyAKLSAqIAl0YXJnZXQgbGl2ZXMsIGNtZCAtIFNDU0kgY29tbWFuZCB0byBleGVjdXRlLCB0YWcgLSBzZXQgdG8gVEFHX05FWFQgZm9yIAotICoJbmV3IHRhZywgVEFHX05PTkUgZm9yIHVudGFnZ2VkIHF1ZXVlaW5nLCBvdGhlcndpc2Ugc2V0IHRvIHRoZSB0YWcgZm9yIAotICoJdGhlIGNvbW1hbmQgdGhhdCBpcyBwcmVzZW50bHkgY29ubmVjdGVkLgotICogCi0gKiBSZXR1cm5zIDogLTEgaWYgc2VsZWN0aW9uIGNvdWxkIG5vdCBleGVjdXRlIGZvciBzb21lIHJlYXNvbiwKLSAqCTAgaWYgc2VsZWN0aW9uIHN1Y2NlZWRlZCBvciBmYWlsZWQgYmVjYXVzZSB0aGUgdGFyZ2V0IAotICogCWRpZCBub3QgcmVzcG9uZC4KLSAqCi0gKiBTaWRlIGVmZmVjdHMgOiAKLSAqIAlJZiBidXMgYnVzeSwgYXJiaXRyYXRpb24gZmFpbGVkLCBldGMsIE5DUjUzODBfc2VsZWN0KCkgd2lsbCBleGl0IAotICoJCXdpdGggcmVnaXN0ZXJzIGFzIHRoZXkgc2hvdWxkIGhhdmUgYmVlbiBvbiBlbnRyeSAtIGllCi0gKgkJU0VMRUNUX0VOQUJMRSB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LCB0aGUgTkNSNTM4MAotICoJCXdpbGwgY2Vhc2UgdG8gZHJpdmUgYW55IFNDU0kgYnVzIHNpZ25hbHMuCi0gKgotICoJSWYgc3VjY2Vzc2Z1bCA6IElfVF9MIG9yIElfVF9MX1EgbmV4dXMgd2lsbCBiZSBlc3RhYmxpc2hlZCwgCi0gKgkJaW5zdGFuY2UtPmNvbm5lY3RlZCB3aWxsIGJlIHNldCB0byBjbWQuICAKLSAqIAkJU0VMRUNUIGludGVycnVwdCB3aWxsIGJlIGRpc2FibGVkLgotICoKLSAqCUlmIGZhaWxlZCAobm8gdGFyZ2V0KSA6IGNtZC0+c2NzaV9kb25lKCkgd2lsbCBiZSBjYWxsZWQsIGFuZCB0aGUgCi0gKgkJY21kLT5yZXN1bHQgaG9zdCBieXRlIHNldCB0byBESURfQkFEX1RBUkdFVC4KLSAqLwotCi1zdGF0aWMgaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCQkgIGludCB0YWcpCi17Ci0gICAgU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotICAgIHVuc2lnbmVkIGNoYXIgdG1wWzNdLCBwaGFzZTsKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGludCBsZW47Ci0gICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgICBob3N0ZGF0YS0+cmVzdGFydF9zZWxlY3QgPSAwOwotICAgIE5DUjUzODBfZHByaW50KE5ERUJVR19BUkJJVFJBVElPTiwgaW5zdGFuY2UpOwotICAgIGRwcmludGsoTkRFQlVHX0FSQklUUkFUSU9OLCAic2NzaSVkOiBzdGFydGluZyBhcmJpdHJhdGlvbiwgaWQgPSAlZFxuIiwgSE9TVE5PLAotCSAgICAgICBpbnN0YW5jZS0+dGhpc19pZCk7Ci0KLSAgICAvKiAKLSAgICAgKiBTZXQgdGhlIHBoYXNlIGJpdHMgdG8gMCwgb3RoZXJ3aXNlIHRoZSBOQ1I1MzgwIHdvbid0IGRyaXZlIHRoZSAKLSAgICAgKiBkYXRhIGJ1cyBkdXJpbmcgU0VMRUNUSU9OLgotICAgICAqLwotCi0gICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotICAgIGlmIChob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAtMTsKLSAgICB9Ci0gICAgTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDApOwotCi0KLSAgICAvKiAKLSAgICAgKiBTdGFydCBhcmJpdHJhdGlvbi4KLSAgICAgKi8KLSAgICAKLSAgICBOQ1I1MzgwX3dyaXRlKE9VVFBVVF9EQVRBX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotICAgIE5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0FSQklUUkFURSk7Ci0KLSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLSAgICAvKiBXYWl0IGZvciBhcmJpdHJhdGlvbiBsb2dpYyB0byBjb21wbGV0ZSAqLwotI2lmZGVmIE5DUl9USU1FT1VUCi0gICAgewotICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDIqTkNSX1RJTUVPVVQ7Ci0KLSAgICAgIHdoaWxlICghKE5DUjUzODBfcmVhZChJTklUSUFUT1JfQ09NTUFORF9SRUcpICYgSUNSX0FSQklUUkFUSU9OX1BST0dSRVNTKQotCSAgICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpICYmICFob3N0ZGF0YS0+Y29ubmVjdGVkKQotCTsKLSAgICAgIGlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKQotICAgICAgewotCXByaW50aygic2NzaSA6IGFyYml0cmF0aW9uIHRpbWVvdXQgYXQgJWRcbiIsIF9fTElORV9fKTsKLQlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsKLQlOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7Ci0JcmV0dXJuIC0xOwotICAgICAgfQotICAgIH0KLSNlbHNlIC8qIE5DUl9USU1FT1VUICovCi0gICAgd2hpbGUgKCEoTkNSNTM4MF9yZWFkKElOSVRJQVRPUl9DT01NQU5EX1JFRykgJiBJQ1JfQVJCSVRSQVRJT05fUFJPR1JFU1MpCi0JICYmICFob3N0ZGF0YS0+Y29ubmVjdGVkKTsKLSNlbmRpZgotCi0gICAgZHByaW50ayhOREVCVUdfQVJCSVRSQVRJT04sICJzY3NpJWQ6IGFyYml0cmF0aW9uIGNvbXBsZXRlXG4iLCBIT1NUTk8pOwotCi0gICAgaWYgKGhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKLQlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsgCi0JcmV0dXJuIC0xOwotICAgIH0KLSAgICAvKiAKLSAgICAgKiBUaGUgYXJiaXRyYXRpb24gZGVsYXkgaXMgMi4ydXMsIGJ1dCB0aGlzIGlzIGEgbWluaW11bSBhbmQgdGhlcmUgaXMgCi0gICAgICogbm8gbWF4aW11bSBzbyB3ZSBjYW4gc2FmZWx5IHNsZWVwIGZvciBjZWlsKDIuMikgdXNlY3MgdG8gYWNjb21tb2RhdGUKLSAgICAgKiB0aGUgaW50ZWdyYWwgbmF0dXJlIG9mIHVkZWxheSgpLgotICAgICAqCi0gICAgICovCi0KLSAgICB1ZGVsYXkoMyk7Ci0KLSAgICAvKiBDaGVjayBmb3IgbG9zdCBhcmJpdHJhdGlvbiAqLwotICAgIGlmICgoTkNSNTM4MF9yZWFkKElOSVRJQVRPUl9DT01NQU5EX1JFRykgJiBJQ1JfQVJCSVRSQVRJT05fTE9TVCkgfHwKLQkoTkNSNTM4MF9yZWFkKENVUlJFTlRfU0NTSV9EQVRBX1JFRykgJiBob3N0ZGF0YS0+aWRfaGlnaGVyX21hc2spIHx8Ci0JKE5DUjUzODBfcmVhZChJTklUSUFUT1JfQ09NTUFORF9SRUcpICYgSUNSX0FSQklUUkFUSU9OX0xPU1QpIHx8Ci0JaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCU5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UpOyAKLQlkcHJpbnRrKE5ERUJVR19BUkJJVFJBVElPTiwgInNjc2klZDogbG9zdCBhcmJpdHJhdGlvbiwgZGVhc3NlcnRpbmcgTVJfQVJCSVRSQVRFXG4iLAotCQkgICBIT1NUTk8pOwotCXJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAgLyogYWZ0ZXIvZHVyaW5nIGFyYml0cmF0aW9uLCBCU1kgc2hvdWxkIGJlIGFzc2VydGVkLgotCUlCTSBEUEVTLTMxMDgwIFZlcnNpb24gUzMxUSB3b3JrcyBub3cgKi8KLSAgICAgLyogVG54IHRvIFRob21hc19Sb2VzY2hAbTIubWF1cy5kZSBmb3IgZmluZGluZyB0aGlzISAoUm9tYW4pICovCi0gICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9TRUwgfAotCQkJCQkgSUNSX0FTU0VSVF9CU1kgKSA7Ci0gICAgCi0gICAgaWYgKChOQ1I1MzgwX3JlYWQoSU5JVElBVE9SX0NPTU1BTkRfUkVHKSAmIElDUl9BUkJJVFJBVElPTl9MT1NUKSB8fAotCWhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKLQlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsKLQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCWRwcmludGsoTkRFQlVHX0FSQklUUkFUSU9OLCAic2NzaSVkOiBsb3N0IGFyYml0cmF0aW9uLCBkZWFzc2VydGluZyBJQ1JfQVNTRVJUX1NFTFxuIiwKLQkJICAgSE9TVE5PKTsKLQlyZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgLyogCi0gICAgICogQWdhaW4sIGJ1cyBjbGVhciArIGJ1cyBzZXR0bGUgdGltZSBpcyAxLjJ1cywgaG93ZXZlciwgdGhpcyBpcyAKLSAgICAgKiBhIG1pbmltdW0gc28gd2UnbGwgdWRlbGF5IGNlaWwoMS4yKQotICAgICAqLwotCi0jaWZkZWYgQ09ORklHX0FUQVJJX1NDU0lfVE9TSElCQV9ERUxBWQotICAgIC8qICsrcm9tYW46IEJ1dCBzb21lIHRhcmdldHMgKHNlZSBhYm92ZSA6LSkgc2VlbSB0byBuZWVkIGEgYml0IG1vcmUuLi4gKi8KLSAgICB1ZGVsYXkoMTUpOwotI2Vsc2UKLSAgICB1ZGVsYXkoMik7Ci0jZW5kaWYKLSAgICAKLSAgICBpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCU5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UpOwotCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGRwcmludGsoTkRFQlVHX0FSQklUUkFUSU9OLCAic2NzaSVkOiB3b24gYXJiaXRyYXRpb25cbiIsIEhPU1ROTyk7Ci0KLSAgICAvKiAKLSAgICAgKiBOb3cgdGhhdCB3ZSBoYXZlIHdvbiBhcmJpdHJhdGlvbiwgc3RhcnQgU2VsZWN0aW9uIHByb2Nlc3MsIGFzc2VydGluZyAKLSAgICAgKiB0aGUgaG9zdCBhbmQgdGFyZ2V0IElEJ3Mgb24gdGhlIFNDU0kgYnVzLgotICAgICAqLwotCi0gICAgTkNSNTM4MF93cml0ZShPVVRQVVRfREFUQV9SRUcsIChob3N0ZGF0YS0+aWRfbWFzayB8ICgxIDw8IGNtZC0+ZGV2aWNlLT5pZCkpKTsKLQotICAgIC8qIAotICAgICAqIFJhaXNlIEFUTiB3aGlsZSBTRUwgaXMgdHJ1ZSBiZWZvcmUgQlNZIGdvZXMgZmFsc2UgZnJvbSBhcmJpdHJhdGlvbiwKLSAgICAgKiBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byBndWFyYW50ZWUgdGhhdCB3ZSdsbCBnZXQgYSBNRVNTQUdFIE9VVAotICAgICAqIHBoYXNlIGltbWVkaWF0ZWx5IGFmdGVyIHNlbGVjdGlvbi4KLSAgICAgKi8KLQotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCAoSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0JTWSB8IAotCUlDUl9BU1NFUlRfREFUQSB8IElDUl9BU1NFUlRfQVROIHwgSUNSX0FTU0VSVF9TRUwgKSk7Ci0gICAgTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7Ci0KLSAgICAvKiAKLSAgICAgKiBSZXNlbGVjdCBpbnRlcnJ1cHRzIG11c3QgYmUgdHVybmVkIG9mZiBwcmlvciB0byB0aGUgZHJvcHBpbmcgb2YgQlNZLAotICAgICAqIG90aGVyd2lzZSB3ZSB3aWxsIHRyaWdnZXIgYW4gaW50ZXJydXB0LgotICAgICAqLwotCi0gICAgaWYgKGhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKLQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCXJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCAwKTsKLQotICAgIC8qCi0gICAgICogVGhlIGluaXRpYXRvciBzaGFsbCB0aGVuIHdhaXQgYXQgbGVhc3QgdHdvIGRlc2tldyBkZWxheXMgYW5kIHJlbGVhc2UgCi0gICAgICogdGhlIEJTWSBzaWduYWwuCi0gICAgICovCi0gICAgdWRlbGF5KDEpOyAgICAgICAgLyogd2luZ2VsIC0tIHdhaXQgdHdvIGJ1cyBkZXNrZXcgZGVsYXkgPjIqNDVucyAqLwotCi0gICAgLyogUmVzZXQgQlNZICovCi0gICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIChJQ1JfQkFTRSB8IElDUl9BU1NFUlRfREFUQSB8IAotCUlDUl9BU1NFUlRfQVROIHwgSUNSX0FTU0VSVF9TRUwpKTsKLQotICAgIC8qIAotICAgICAqIFNvbWV0aGluZyB3ZWlyZCBoYXBwZW5zIHdoZW4gd2UgY2Vhc2UgdG8gZHJpdmUgQlNZIC0gbG9va3MKLSAgICAgKiBsaWtlIHRoZSBib2FyZC9jaGlwIGlzIGxldHRpbmcgdXMgZG8gYW5vdGhlciByZWFkIGJlZm9yZSB0aGUgCi0gICAgICogYXBwcm9wcmlhdGUgcHJvcGFnYXRpb24gZGVsYXkgaGFzIGV4cGlyZWQsIGFuZCB3ZSdyZSBjb25mdXNpbmcKLSAgICAgKiBhIEJTWSBzaWduYWwgZnJvbSBvdXJzZWx2ZXMgYXMgdGhlIHRhcmdldCdzIHJlc3BvbnNlIHRvIFNFTEVDVElPTi4KLSAgICAgKgotICAgICAqIEEgc21hbGwgZGVsYXkgKHRoZSAnQysrJyBmcm9udGVuZCBicmVha3MgdGhlIHBpcGVsaW5lIHdpdGggYW4KLSAgICAgKiB1bm5lY2Vzc2FyeSBqdW1wLCBtYWtpbmcgaXQgd29yayBvbiBteSAzODYtMzMvVHJhbnRvciBUMTI4LCB0aGUKLSAgICAgKiB0aWdodGVyICdDJyBjb2RlIGJyZWFrcyBhbmQgcmVxdWlyZXMgdGhpcykgc29sdmVzIHRoZSBwcm9ibGVtIC0gCi0gICAgICogdGhlIDEgdXMgZGVsYXkgaXMgYXJiaXRyYXJ5LCBhbmQgb25seSB1c2VkIGJlY2F1c2UgdGhpcyBkZWxheSB3aWxsIAotICAgICAqIGJlIHRoZSBzYW1lIG9uIG90aGVyIHBsYXRmb3JtcyBhbmQgc2luY2UgaXQgd29ya3MgaGVyZSwgaXQgc2hvdWxkIAotICAgICAqIHdvcmsgdGhlcmUuCi0gICAgICoKLSAgICAgKiB3aW5nZWwgc3VnZ2VzdHMgdGhhdCB0aGlzIGNvdWxkIGJlIGR1ZSB0byBmYWlsaW5nIHRvIHdhaXQKLSAgICAgKiBvbmUgZGVza2V3IGRlbGF5LgotICAgICAqLwotCi0gICAgdWRlbGF5KDEpOwotCi0gICAgZHByaW50ayhOREVCVUdfU0VMRUNUSU9OLCAic2NzaSVkOiBzZWxlY3RpbmcgdGFyZ2V0ICVkXG4iLCBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCk7Ci0KLSAgICAvKiAKLSAgICAgKiBUaGUgU0NTSSBzcGVjaWZpY2F0aW9uIGNhbGxzIGZvciBhIDI1MCBtcyB0aW1lb3V0IGZvciB0aGUgYWN0dWFsIAotICAgICAqIHNlbGVjdGlvbi4KLSAgICAgKi8KLQotICAgIHRpbWVvdXQgPSBqaWZmaWVzICsgMjU7IAotCi0gICAgLyogCi0gICAgICogWFhYIHZlcnkgaW50ZXJlc3RpbmcgLSB3ZSdyZSBzZWVpbmcgYSBib3VuY2Ugd2hlcmUgdGhlIEJTWSB3ZSAKLSAgICAgKiBhc3NlcnRlZCBpcyBiZWluZyByZWZsZWN0ZWQgLyBzdGlsbCBhc3NlcnRlZCAocHJvcGFnYXRpb24gZGVsYXk/KQotICAgICAqIGFuZCBpdCdzIGRldGVjdGluZyBhcyB0cnVlLiAgU2lnaC4KLSAgICAgKi8KLQotI2lmIDAKLSAgICAvKiArK3JvbWFuOiBJZiBhIHRhcmdldCBjb25mb3JtZWQgdG8gdGhlIFNDU0kgc3RhbmRhcmQsIGl0IHdvdWxkbid0IGFzc2VydAotICAgICAqIElPIHdoaWxlIFNFTCBpcyB0cnVlLiBCdXQgYWdhaW4sIHRoZXJlIGFyZSBzb21lIGRpc2tzIG91dCB0aGUgaW4gdGhlCi0gICAgICogd29ybGQgdGhhdCBkbyB0aGF0IG5ldmVydGhlbGVzcy4gKFNvbWVib2R5IGNsYWltZWQgdGhhdCB0aGlzIGFubm91bmNlcwotICAgICAqIHJlc2VsZWN0aW9uIGNhcGFiaWxpdHkgb2YgdGhlIHRhcmdldC4pIFNvIHdlIGJldHRlciBza2lwIHRoYXQgdGVzdCBhbmQKLSAgICAgKiBvbmx5IHdhaXQgZm9yIEJTWS4uLiAoRmFtb3VzIGdlcm1hbiB3b3JkczogRGVyIEtsw7xnZXJlIGdpYnQgbmFjaCA6LSkKLSAgICAgKi8KLQotICAgIHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSAmJiAhKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIAotCShTUl9CU1kgfCBTUl9JTykpKTsKLQotICAgIGlmICgoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgKFNSX1NFTCB8IFNSX0lPKSkgPT0gCi0JICAgIChTUl9TRUwgfCBTUl9JTykpIHsKLQkgICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQkgICAgTkNSNTM4MF9yZXNlbGVjdChpbnN0YW5jZSk7Ci0JICAgIHByaW50ayAoS0VSTl9FUlIgInNjc2klZDogcmVzZWxlY3Rpb24gYWZ0ZXIgd29uIGFyYml0cmF0aW9uP1xuIiwKLQkJICAgIEhPU1ROTyk7Ci0JICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQkgICAgcmV0dXJuIC0xOwotICAgIH0KLSNlbHNlCi0gICAgd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpICYmICEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfQlNZKSk7Ci0jZW5kaWYKLQotICAgIC8qIAotICAgICAqIE5vIGxlc3MgdGhhbiB0d28gZGVza2V3IGRlbGF5cyBhZnRlciB0aGUgaW5pdGlhdG9yIGRldGVjdHMgdGhlIAotICAgICAqIEJTWSBzaWduYWwgaXMgdHJ1ZSwgaXQgc2hhbGwgcmVsZWFzZSB0aGUgU0VMIHNpZ25hbCBhbmQgbWF5IAotICAgICAqIGNoYW5nZSB0aGUgREFUQSBCVVMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC13aW5nZWwKLSAgICAgKi8KLQotICAgIHVkZWxheSgxKTsKLQotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfQVROKTsKLQotICAgIGlmICghKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX0JTWSkpIHsKLQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCWlmIChob3N0ZGF0YS0+dGFyZ2V0c19wcmVzZW50ICYgKDEgPDwgY21kLT5kZXZpY2UtPmlkKSkgewotCSAgICBwcmludGsoS0VSTl9FUlIgInNjc2klZDogd2VpcmRuZXNzXG4iLCBIT1NUTk8pOwotCSAgICBpZiAoaG9zdGRhdGEtPnJlc3RhcnRfc2VsZWN0KQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlx0cmVzdGFydCBzZWxlY3RcbiIpOwotCSAgICBOQ1I1MzgwX2RwcmludChOREVCVUdfQU5ZLCBpbnN0YW5jZSk7Ci0JICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQkgICAgcmV0dXJuIC0xOwotCX0KLQljbWQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OwotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQljb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOwotI2VuZGlmCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JY21kX2ZyZWVfdGFnKCBjbWQgKTsKLSNlbmRpZgotCWNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCWRwcmludGsoTkRFQlVHX1NFTEVDVElPTiwgInNjc2klZDogdGFyZ2V0IGRpZCBub3QgcmVzcG9uZCB3aXRoaW4gMjUwbXNcbiIsIEhPU1ROTyk7Ci0JTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCXJldHVybiAwOwotICAgIH0gCi0KLSAgICBob3N0ZGF0YS0+dGFyZ2V0c19wcmVzZW50IHw9ICgxIDw8IGNtZC0+ZGV2aWNlLT5pZCk7Ci0KLSAgICAvKgotICAgICAqIFNpbmNlIHdlIGZvbGxvd2VkIHRoZSBTQ1NJIHNwZWMsIGFuZCByYWlzZWQgQVROIHdoaWxlIFNFTCAKLSAgICAgKiB3YXMgdHJ1ZSBidXQgYmVmb3JlIEJTWSB3YXMgZmFsc2UgZHVyaW5nIHNlbGVjdGlvbiwgdGhlIGluZm9ybWF0aW9uCi0gICAgICogdHJhbnNmZXIgcGhhc2Ugc2hvdWxkIGJlIGEgTUVTU0FHRSBPVVQgcGhhc2Ugc28gdGhhdCB3ZSBjYW4gc2VuZCB0aGUKLSAgICAgKiBJREVOVElGWSBtZXNzYWdlLgotICAgICAqIAotICAgICAqIElmIFNDU0ktSUkgdGFnZ2VkIHF1ZXVpbmcgaXMgZW5hYmxlZCwgd2UgYWxzbyBzZW5kIGEgU0lNUExFX1FVRVVFX1RBRwotICAgICAqIG1lc3NhZ2UgKDIgYnl0ZXMpIHdpdGggYSB0YWcgSUQgdGhhdCB3ZSBpbmNyZW1lbnQgd2l0aCBldmVyeSBjb21tYW5kCi0gICAgICogdW50aWwgaXQgd3JhcHMgYmFjayB0byAwLgotICAgICAqCi0gICAgICogWFhYIC0gaXQgdHVybnMgb3V0IHRoYXQgdGhlcmUgYXJlIHNvbWUgYnJva2VuIFNDU0ktSUkgZGV2aWNlcywKLSAgICAgKgkgICAgIHdoaWNoIGNsYWltIHRvIHN1cHBvcnQgdGFnZ2VkIHF1ZXVpbmcgYnV0IGZhaWwgd2hlbiBtb3JlIHRoYW4KLSAgICAgKgkgICAgIHNvbWUgbnVtYmVyIG9mIGNvbW1hbmRzIGFyZSBpc3N1ZWQgYXQgb25jZS4KLSAgICAgKi8KLQotICAgIC8qIFdhaXQgZm9yIHN0YXJ0IG9mIFJFUS9BQ0sgaGFuZHNoYWtlICovCi0gICAgd2hpbGUgKCEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSk7Ci0KLSAgICBkcHJpbnRrKE5ERUJVR19TRUxFQ1RJT04sICJzY3NpJWQ6IHRhcmdldCAlZCBzZWxlY3RlZCwgZ29pbmcgaW50byBNRVNTQUdFIE9VVCBwaGFzZS5cbiIsCi0JICAgICAgIEhPU1ROTywgY21kLT5kZXZpY2UtPmlkKTsKLSAgICB0bXBbMF0gPSBJREVOVElGWSgxLCBjbWQtPmRldmljZS0+bHVuKTsKLQotI2lmZGVmIFNVUFBPUlRfVEFHUwotICAgIGlmIChjbWQtPnRhZyAhPSBUQUdfTk9ORSkgewotCXRtcFsxXSA9IGhvc3RkYXRhLT5sYXN0X21lc3NhZ2UgPSBTSU1QTEVfUVVFVUVfVEFHOwotCXRtcFsyXSA9IGNtZC0+dGFnOwotCWxlbiA9IDM7Ci0gICAgfSBlbHNlIAotCWxlbiA9IDE7Ci0jZWxzZQotICAgIGxlbiA9IDE7Ci0gICAgY21kLT50YWc9MDsKLSNlbmRpZiAvKiBTVVBQT1JUX1RBR1MgKi8KLQotICAgIC8qIFNlbmQgbWVzc2FnZShzKSAqLwotICAgIGRhdGEgPSB0bXA7Ci0gICAgcGhhc2UgPSBQSEFTRV9NU0dPVVQ7Ci0gICAgTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgJmRhdGEpOwotICAgIGRwcmludGsoTkRFQlVHX1NFTEVDVElPTiwgInNjc2klZDogbmV4dXMgZXN0YWJsaXNoZWQuXG4iLCBIT1NUTk8pOwotICAgIC8qIFhYWCBuZWVkIHRvIGhhbmRsZSBlcnJvcnMgaGVyZSAqLwotICAgIGhvc3RkYXRhLT5jb25uZWN0ZWQgPSBjbWQ7Ci0jaWZuZGVmIFNVUFBPUlRfVEFHUwotICAgIGhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gfD0gKDEgPDwgY21kLT5kZXZpY2UtPmx1bik7Ci0jZW5kaWYgICAgCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotICAgIGRyZWdzLT5jc3IgfD0gQ1NSX0lOVFI7Ci0jZW5kaWYKLSAgICBpbml0aWFsaXplX1NDcChjbWQpOwotCi0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3RyYW5zZmVyX3BpbyAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIAotICogICAgICB1bnNpZ25lZCBjaGFyICpwaGFzZSwgaW50ICpjb3VudCwgdW5zaWduZWQgY2hhciAqKmRhdGEpCi0gKgotICogUHVycG9zZSA6IHRyYW5zZmVycyBkYXRhIGluIGdpdmVuIHBoYXNlIHVzaW5nIHBvbGxlZCBJL08KLSAqCi0gKiBJbnB1dHMgOiBpbnN0YW5jZSAtIGluc3RhbmNlIG9mIGRyaXZlciwgKnBoYXNlIC0gcG9pbnRlciB0byAKLSAqCXdoYXQgcGhhc2UgaXMgZXhwZWN0ZWQsICpjb3VudCAtIHBvaW50ZXIgdG8gbnVtYmVyIG9mIAotICoJYnl0ZXMgdG8gdHJhbnNmZXIsICoqZGF0YSAtIHBvaW50ZXIgdG8gZGF0YSBwb2ludGVyLgotICogCi0gKiBSZXR1cm5zIDogLTEgd2hlbiBkaWZmZXJlbnQgcGhhc2UgaXMgZW50ZXJlZCB3aXRob3V0IHRyYW5zZmVycmluZwotICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIGFyZSB0cmFuc2ZlcnJlZCBvciBleGl0Ci0gKglpcyBpbiBzYW1lIHBoYXNlLgotICoKLSAqIAlBbHNvLCAqcGhhc2UsICpjb3VudCwgKmRhdGEgYXJlIG1vZGlmaWVkIGluIHBsYWNlLgotICoKLSAqIFhYWCBOb3RlIDogaGFuZGxpbmcgZm9yIGJ1cyBmcmVlIG1heSBiZSB1c2VmdWwuCi0gKi8KLQotLyoKLSAqIE5vdGUgOiB0aGlzIGNvZGUgaXMgbm90IGFzIHF1aWNrIGFzIGl0IGNvdWxkIGJlLCBob3dldmVyIGl0IAotICogSVMgMTAwJSByZWxpYWJsZSwgYW5kIGZvciB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXIgd2hlcmUgc3BlZWQKLSAqIGNvdW50cywgd2Ugd2lsbCBhbHdheXMgZG8gYSBwc2V1ZG8gRE1BIG9yIERNQSB0cmFuc2Zlci4KLSAqLwotCi1zdGF0aWMgaW50IE5DUjUzODBfdHJhbnNmZXJfcGlvKCBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgCi0JCQkJIHVuc2lnbmVkIGNoYXIgKnBoYXNlLCBpbnQgKmNvdW50LAotCQkJCSB1bnNpZ25lZCBjaGFyICoqZGF0YSkKLXsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIHAgPSAqcGhhc2UsIHRtcDsKLSAgICByZWdpc3RlciBpbnQgYyA9ICpjb3VudDsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpkID0gKmRhdGE7Ci0KLSAgICAvKiAKLSAgICAgKiBUaGUgTkNSNTM4MCBjaGlwIHdpbGwgb25seSBkcml2ZSB0aGUgU0NTSSBidXMgd2hlbiB0aGUgCi0gICAgICogcGhhc2Ugc3BlY2lmaWVkIGluIHRoZSBhcHByb3ByaWF0ZSBiaXRzIG9mIHRoZSBUQVJHRVQgQ09NTUFORAotICAgICAqIFJFR0lTVEVSIG1hdGNoIHRoZSBTVEFUVVMgUkVHSVNURVIKLSAgICAgKi8KLQotICAgIE5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCBQSEFTRV9TUl9UT19UQ1IocCkpOwotCi0gICAgZG8gewotCS8qIAotCSAqIFdhaXQgZm9yIGFzc2VydGlvbiBvZiBSRVEsIGFmdGVyIHdoaWNoIHRoZSBwaGFzZSBiaXRzIHdpbGwgYmUgCi0JICogdmFsaWQgCi0JICovCi0Jd2hpbGUgKCEoKHRtcCA9IE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSkgJiBTUl9SRVEpKTsKLQotCWRwcmludGsoTkRFQlVHX0hBTkRTSEFLRSwgInNjc2klZDogUkVRIGRldGVjdGVkXG4iLCBIT1NUTk8pOwotCi0JLyogQ2hlY2sgZm9yIHBoYXNlIG1pc21hdGNoICovCQotCWlmICgodG1wICYgUEhBU0VfTUFTSykgIT0gcCkgewotCSAgICBkcHJpbnRrKE5ERUJVR19QSU8sICJzY3NpJWQ6IHBoYXNlIG1pc21hdGNoXG4iLCBIT1NUTk8pOwotCSAgICBOQ1I1MzgwX2RwcmludF9waGFzZShOREVCVUdfUElPLCBpbnN0YW5jZSk7Ci0JICAgIGJyZWFrOwotCX0KLQotCS8qIERvIGFjdHVhbCB0cmFuc2ZlciBmcm9tIFNDU0kgYnVzIHRvIC8gZnJvbSBtZW1vcnkgKi8KLQlpZiAoIShwICYgU1JfSU8pKSAKLQkgICAgTkNSNTM4MF93cml0ZShPVVRQVVRfREFUQV9SRUcsICpkKTsKLQllbHNlIAotCSAgICAqZCA9IE5DUjUzODBfcmVhZChDVVJSRU5UX1NDU0lfREFUQV9SRUcpOwotCi0JKytkOwotCi0JLyogCi0JICogVGhlIFNDU0kgc3RhbmRhcmQgc3VnZ2VzdHMgdGhhdCBpbiBNU0dPVVQgcGhhc2UsIHRoZSBpbml0aWF0b3IKLQkgKiBzaG91bGQgZHJvcCBBVE4gb24gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgbWVzc2FnZSBwaGFzZQotCSAqIGFmdGVyIFJFUSBoYXMgYmVlbiBhc3NlcnRlZCBmb3IgdGhlIGhhbmRzaGFrZSBidXQgYmVmb3JlCi0JICogdGhlIGluaXRpYXRvciByYWlzZXMgQUNLLgotCSAqLwotCi0JaWYgKCEocCAmIFNSX0lPKSkgewotCSAgICBpZiAoISgocCAmIFNSX01TRykgJiYgYyA+IDEpKSB7Ci0JCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IAotCQkgICAgSUNSX0FTU0VSVF9EQVRBKTsKLQkJTkNSNTM4MF9kcHJpbnQoTkRFQlVHX1BJTywgaW5zdGFuY2UpOwotCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCAKLQkJCUlDUl9BU1NFUlRfREFUQSB8IElDUl9BU1NFUlRfQUNLKTsKLQkgICAgfSBlbHNlIHsKLQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwKLQkJICAgIElDUl9BU1NFUlRfREFUQSB8IElDUl9BU1NFUlRfQVROKTsKLQkJTkNSNTM4MF9kcHJpbnQoTkRFQlVHX1BJTywgaW5zdGFuY2UpOwotCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCAKLQkJICAgIElDUl9BU1NFUlRfREFUQSB8IElDUl9BU1NFUlRfQVROIHwgSUNSX0FTU0VSVF9BQ0spOwotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgTkNSNTM4MF9kcHJpbnQoTkRFQlVHX1BJTywgaW5zdGFuY2UpOwotCSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FDSyk7Ci0JfQotCi0Jd2hpbGUgKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JFUSk7Ci0KLQlkcHJpbnRrKE5ERUJVR19IQU5EU0hBS0UsICJzY3NpJWQ6IHJlcSBmYWxzZSwgaGFuZHNoYWtlIGNvbXBsZXRlXG4iLCBIT1NUTk8pOwotCi0vKgotICogV2UgaGF2ZSBzZXZlcmFsIHNwZWNpYWwgY2FzZXMgdG8gY29uc2lkZXIgZHVyaW5nIFJFUS9BQ0sgaGFuZHNoYWtpbmcgOiAKLSAqIDEuICBXZSB3ZXJlIGluIE1TR09VVCBwaGFzZSwgYW5kIHdlIGFyZSBvbiB0aGUgbGFzdCBieXRlIG9mIHRoZSAKLSAqCW1lc3NhZ2UuICBBVE4gbXVzdCBiZSBkcm9wcGVkIGFzIEFDSyBpcyBkcm9wcGVkLgotICoKLSAqIDIuICBXZSBhcmUgaW4gYSBNU0dJTiBwaGFzZSwgYW5kIHdlIGFyZSBvbiB0aGUgbGFzdCBieXRlIG9mIHRoZSAgCi0gKgltZXNzYWdlLiAgV2UgbXVzdCBleGl0IHdpdGggQUNLIGFzc2VydGVkLCBzbyB0aGF0IHRoZSBjYWxsaW5nCi0gKgljb2RlIG1heSByYWlzZSBBVE4gYmVmb3JlIGRyb3BwaW5nIEFDSyB0byByZWplY3QgdGhlIG1lc3NhZ2UuCi0gKgotICogMy4gIEFDSyBhbmQgQVROIGFyZSBjbGVhciBhbmQgdGhlIHRhcmdldCBtYXkgcHJvY2VlZCBhcyBub3JtYWwuCi0gKi8KLQlpZiAoIShwID09IFBIQVNFX01TR0lOICYmIGMgPT0gMSkpIHsgIAotCSAgICBpZiAocCA9PSBQSEFTRV9NU0dPVVQgJiYgYyA+IDEpCi0JCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfQVROKTsKLQkgICAgZWxzZQotCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCX0gCi0gICAgfSB3aGlsZSAoLS1jKTsKLQotICAgIGRwcmludGsoTkRFQlVHX1BJTywgInNjc2klZDogcmVzaWR1YWwgJWRcbiIsIEhPU1ROTywgYyk7Ci0KLSAgICAqY291bnQgPSBjOwotICAgICpkYXRhID0gZDsKLSAgICB0bXAgPSBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRyk7Ci0gICAgLyogVGhlIHBoYXNlIHJlYWQgZnJvbSB0aGUgYnVzIGlzIHZhbGlkIGlmIGVpdGhlciBSRVEgaXMgKGFscmVhZHkpCi0gICAgICogYXNzZXJ0ZWQgb3IgaWYgQUNLIGhhc24ndCBiZWVuIHJlbGVhc2VkIHlldC4gVGhlIGxhdHRlciBpcyB0aGUgY2FzZSBpZgotICAgICAqIHdlJ3JlIGluIE1TR0lOIGFuZCBhbGwgd2FudGVkIGJ5dGVzIGhhdmUgYmVlbiByZWNlaXZlZC4gKi8KLSAgICBpZiAoKHRtcCAmIFNSX1JFUSkgfHwgKHAgPT0gUEhBU0VfTVNHSU4gJiYgYyA9PSAwKSkKLQkqcGhhc2UgPSB0bXAgJiBQSEFTRV9NQVNLOwotICAgIGVsc2UgCi0JKnBoYXNlID0gUEhBU0VfVU5LTk9XTjsKLQotICAgIGlmICghYyB8fCAoKnBoYXNlID09IHApKQotCXJldHVybiAwOwotICAgIGVsc2UgCi0JcmV0dXJuIC0xOwotfQotCi0vKgotICogRnVuY3Rpb24gOiBkb19hYm9ydCAoU2NzaV9Ib3N0ICpob3N0KQotICogCi0gKiBQdXJwb3NlIDogYWJvcnQgdGhlIGN1cnJlbnRseSBlc3RhYmxpc2hlZCBuZXh1cy4gIFNob3VsZCBvbmx5IGJlIAotICogCWNhbGxlZCBmcm9tIGEgcm91dGluZSB3aGljaCBjYW4gZHJvcCBpbnRvIGEgCi0gKiAKLSAqIFJldHVybnMgOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCi0gKi8KLQotc3RhdGljIGludCBkb19hYm9ydCAoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkgCi17Ci0gICAgdW5zaWduZWQgY2hhciB0bXAsICptc2dwdHIsIHBoYXNlOwotICAgIGludCBsZW47Ci0KLSAgICAvKiBSZXF1ZXN0IG1lc3NhZ2Ugb3V0IHBoYXNlICovCi0gICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9BVE4pOwotCi0gICAgLyogCi0gICAgICogV2FpdCBmb3IgdGhlIHRhcmdldCB0byBpbmRpY2F0ZSBhIHZhbGlkIHBoYXNlIGJ5IGFzc2VydGluZyAKLSAgICAgKiBSRVEuICBPbmNlIHRoaXMgaGFwcGVucywgd2UnbGwgaGF2ZSBlaXRoZXIgYSBNU0dPVVQgcGhhc2UgCi0gICAgICogYW5kIGNhbiBpbW1lZGlhdGVseSBzZW5kIHRoZSBBQk9SVCBtZXNzYWdlLCBvciB3ZSdsbCBoYXZlIHNvbWUgCi0gICAgICogb3RoZXIgcGhhc2UgYW5kIHdpbGwgaGF2ZSB0byBzb3VyY2Uvc2luayBkYXRhLgotICAgICAqIAotICAgICAqIFdlIHJlYWxseSBkb24ndCBjYXJlIHdoYXQgdmFsdWUgd2FzIG9uIHRoZSBidXMgb3Igd2hhdCB2YWx1ZQotICAgICAqIHRoZSB0YXJnZXQgc2Vlcywgc28gd2UganVzdCBoYW5kc2hha2UuCi0gICAgICovCi0gICAgCi0gICAgd2hpbGUgKCEoKHRtcCA9IE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSkgJiBTUl9SRVEpKTsKLQotICAgIE5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCBQSEFTRV9TUl9UT19UQ1IodG1wKSk7Ci0KLSAgICBpZiAoKHRtcCAmIFBIQVNFX01BU0spICE9IFBIQVNFX01TR09VVCkgewotCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfQVROIHwgCi0JCSAgICAgIElDUl9BU1NFUlRfQUNLKTsKLQl3aGlsZSAoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKTsKLQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FUTik7Ci0gICAgfQotICAgCi0gICAgdG1wID0gQUJPUlQ7Ci0gICAgbXNncHRyID0gJnRtcDsKLSAgICBsZW4gPSAxOwotICAgIHBoYXNlID0gUEhBU0VfTVNHT1VUOwotICAgIE5DUjUzODBfdHJhbnNmZXJfcGlvIChob3N0LCAmcGhhc2UsICZsZW4sICZtc2dwdHIpOwotCi0gICAgLyoKLSAgICAgKiBJZiB3ZSBnb3QgaGVyZSwgYW5kIHRoZSBjb21tYW5kIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksCi0gICAgICogd2UncmUgYWJvdXQgdG8gZ28gaW50byBidXMgZnJlZSBzdGF0ZS4KLSAgICAgKi8KLQotICAgIHJldHVybiBsZW4gPyAtMSA6IDA7Ci19Ci0KLSNpZiBkZWZpbmVkKFJFQUxfRE1BKQotLyogCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3RyYW5zZmVyX2RtYSAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIAotICogICAgICB1bnNpZ25lZCBjaGFyICpwaGFzZSwgaW50ICpjb3VudCwgdW5zaWduZWQgY2hhciAqKmRhdGEpCi0gKgotICogUHVycG9zZSA6IHRyYW5zZmVycyBkYXRhIGluIGdpdmVuIHBoYXNlIHVzaW5nIGVpdGhlciByZWFsCi0gKglvciBwc2V1ZG8gRE1BLgotICoKLSAqIElucHV0cyA6IGluc3RhbmNlIC0gaW5zdGFuY2Ugb2YgZHJpdmVyLCAqcGhhc2UgLSBwb2ludGVyIHRvIAotICoJd2hhdCBwaGFzZSBpcyBleHBlY3RlZCwgKmNvdW50IC0gcG9pbnRlciB0byBudW1iZXIgb2YgCi0gKglieXRlcyB0byB0cmFuc2ZlciwgKipkYXRhIC0gcG9pbnRlciB0byBkYXRhIHBvaW50ZXIuCi0gKiAKLSAqIFJldHVybnMgOiAtMSB3aGVuIGRpZmZlcmVudCBwaGFzZSBpcyBlbnRlcmVkIHdpdGhvdXQgdHJhbnNmZXJyaW5nCi0gKgltYXhpbXVtIG51bWJlciBvZiBieXRlcywgMCBpZiBhbGwgYnl0ZXMgb3IgdHJhbnNmZXJyZWQgb3IgZXhpdAotICoJaXMgaW4gc2FtZSBwaGFzZS4KLSAqCi0gKiAJQWxzbywgKnBoYXNlLCAqY291bnQsICpkYXRhIGFyZSBtb2RpZmllZCBpbiBwbGFjZS4KLSAqCi0gKi8KLQotCi1zdGF0aWMgaW50IE5DUjUzODBfdHJhbnNmZXJfZG1hKCBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgCi0JCQkJIHVuc2lnbmVkIGNoYXIgKnBoYXNlLCBpbnQgKmNvdW50LAotCQkJCSB1bnNpZ25lZCBjaGFyICoqZGF0YSkKLXsKLSAgICBTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7Ci0gICAgcmVnaXN0ZXIgaW50IGMgPSAqY291bnQ7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBwID0gKnBoYXNlOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgICAvKiBzYW5pdHkgY2hlY2sgKi8KLSAgICBpZighc3VuM19kbWFfc2V0dXBfZG9uZSkgewotCSBwcmludGsoInNjc2klZDogdHJhbnNmZXJfZG1hIHdpdGhvdXQgc2V0dXAhXG4iLCBIT1NUTk8pOwotCSBCVUcoKTsKLSAgICB9Ci0gICAgaG9zdGRhdGEtPmRtYV9sZW4gPSBjOwotCi0gICAgZHByaW50ayhOREVCVUdfRE1BLCAic2NzaSVkOiBpbml0aWFsaXppbmcgRE1BIGZvciAlcywgJWQgYnl0ZXMgJXMgJXBcbiIsCi0JICAgICAgIEhPU1ROTywgKHAgJiBTUl9JTykgPyAicmVhZGluZyIgOiAid3JpdGluZyIsCi0JICAgICAgIGMsIChwICYgU1JfSU8pID8gInRvIiA6ICJmcm9tIiwgKmRhdGEpOwotCi0gICAgLyogbmV0YnNkIHR1cm5zIG9mZiBpbnRzIGhlcmUsIHdoeSBub3QgYmUgc2FmZSBhbmQgZG8gaXQgdG9vICovCi0gICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotICAgIAotICAgIC8qIHNlbmQgc3RhcnQgY2hhaW4gKi8KLSAgICBzdW4zc2NzaV9kbWFfc3RhcnQoYywgKmRhdGEpOwotICAgIAotICAgIGlmIChwICYgU1JfSU8pIHsKLQkgICAgTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDEpOwotCSAgICBOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOwotCSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgMCk7Ci0JICAgIE5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIChOQ1I1MzgwX3JlYWQoTU9ERV9SRUcpIHwgTVJfRE1BX01PREUgfCBNUl9FTkFCTEVfRU9QX0lOVFIpKTsKLQkgICAgTkNSNTM4MF93cml0ZShTVEFSVF9ETUFfSU5JVElBVE9SX1JFQ0VJVkVfUkVHLCAwKTsKLSAgICB9IGVsc2UgewotCSAgICBOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywgMCk7Ci0JICAgIE5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7Ci0JICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQVNTRVJUX0RBVEEpOwotCSAgICBOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCAoTkNSNTM4MF9yZWFkKE1PREVfUkVHKSB8IE1SX0RNQV9NT0RFIHwgTVJfRU5BQkxFX0VPUF9JTlRSKSk7Ci0JICAgIE5DUjUzODBfd3JpdGUoU1RBUlRfRE1BX1NFTkRfUkVHLCAwKTsKLSAgICB9Ci0KLSNpZmRlZiBTVU4zX1NDU0lfVk1FCi0gICAgZHJlZ3MtPmNzciB8PSBDU1JfRE1BX0VOQUJMRTsKLSNlbmRpZgotCi0gICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0gICAgc3VuM19kbWFfYWN0aXZlID0gMTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKFJFQUxfRE1BKSAqLwotCi0vKgotICogRnVuY3Rpb24gOiBOQ1I1MzgwX2luZm9ybWF0aW9uX3RyYW5zZmVyIChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLSAqCi0gKiBQdXJwb3NlIDogcnVuIHRocm91Z2ggdGhlIHZhcmlvdXMgU0NTSSBwaGFzZXMgYW5kIGRvIGFzIHRoZSB0YXJnZXQgCi0gKiAJZGlyZWN0cyB1cyB0by4gIE9wZXJhdGVzIG9uIHRoZSBjdXJyZW50bHkgY29ubmVjdGVkIGNvbW1hbmQsIAotICoJaW5zdGFuY2UtPmNvbm5lY3RlZC4KLSAqCi0gKiBJbnB1dHMgOiBpbnN0YW5jZSwgaW5zdGFuY2UgZm9yIHdoaWNoIHdlIGFyZSBkb2luZyBjb21tYW5kcwotICoKLSAqIFNpZGUgZWZmZWN0cyA6IFNDU0kgdGhpbmdzIGhhcHBlbiwgdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZSB3aWxsIGJlIAotICoJbW9kaWZpZWQgaWYgYSBjb21tYW5kIGRpc2Nvbm5lY3RzLCAqaW5zdGFuY2UtPmNvbm5lY3RlZCB3aWxsCi0gKgljaGFuZ2UuCi0gKgotICogWFhYIE5vdGUgOiB3ZSBuZWVkIHRvIHdhdGNoIGZvciBidXMgZnJlZSBvciBhIHJlc2V0IGNvbmRpdGlvbiBoZXJlIAotICogCXRvIHJlY292ZXIgZnJvbSBhbiB1bmV4cGVjdGVkIGJ1cyBmcmVlIGNvbmRpdGlvbi4KLSAqLwotIAotc3RhdGljIHZvaWQgTkNSNTM4MF9pbmZvcm1hdGlvbl90cmFuc2ZlciAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi17Ci0gICAgU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgdW5zaWduZWQgY2hhciBtc2dvdXQgPSBOT1A7Ci0gICAgaW50IHNpbmsgPSAwOwotICAgIGludCBsZW47Ci0jaWYgZGVmaW5lZChSRUFMX0RNQSkKLSAgICBpbnQgdHJhbnNmZXJzaXplOwotI2VuZGlmCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICB1bnNpZ25lZCBjaGFyIHBoYXNlLCB0bXAsIGV4dGVuZGVkX21zZ1sxMF0sIG9sZF9waGFzZT0weGZmOwotICAgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQ7Ci0KLSNpZmRlZiBTVU4zX1NDU0lfVk1FCi0gICAgZHJlZ3MtPmNzciB8PSBDU1JfSU5UUjsKLSNlbmRpZgotCi0gICAgd2hpbGUgKDEpIHsKLQl0bXAgPSBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRyk7Ci0JLyogV2Ugb25seSBoYXZlIGEgdmFsaWQgU0NTSSBwaGFzZSB3aGVuIFJFUSBpcyBhc3NlcnRlZCAqLwotCWlmICh0bXAgJiBTUl9SRVEpIHsKLQkgICAgcGhhc2UgPSAodG1wICYgUEhBU0VfTUFTSyk7IAotIAkgICAgaWYgKHBoYXNlICE9IG9sZF9waGFzZSkgewotCQlvbGRfcGhhc2UgPSBwaGFzZTsKLQkJTkNSNTM4MF9kcHJpbnRfcGhhc2UoTkRFQlVHX0lORk9STUFUSU9OLCBpbnN0YW5jZSk7Ci0JICAgIH0KLQotCSAgICBpZihwaGFzZSA9PSBQSEFTRV9DTURPVVQpIHsKLQkJICAgIHZvaWQgKmQ7Ci0JCSAgICB1bnNpZ25lZCBsb25nIGNvdW50OwotCi0JCWlmICghY21kLT5TQ3AudGhpc19yZXNpZHVhbCAmJiBjbWQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsKSB7Ci0JCQljb3VudCA9IGNtZC0+U0NwLmJ1ZmZlci0+bGVuZ3RoOwotCQkJZCA9IFNHQUREUihjbWQtPlNDcC5idWZmZXIpOwotCQl9IGVsc2UgewotCQkJY291bnQgPSBjbWQtPlNDcC50aGlzX3Jlc2lkdWFsOwotCQkJZCA9IGNtZC0+U0NwLnB0cjsKLQkJfQotI2lmZGVmIFJFQUxfRE1BCi0JCS8qIHRoaXMgY29tbWFuZCBzZXR1cCBmb3IgZG1hIHlldD8gKi8KLQkJaWYoKGNvdW50ID4gU1VOM19ETUFfTUlOU0laRSkgJiYgKHN1bjNfZG1hX3NldHVwX2RvbmUKLQkJCQkJCSAgIT0gY21kKSkKLQkJewotCQkJaWYgKGNtZC0+cmVxdWVzdC0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpIHsKLQkJCQlzdW4zc2NzaV9kbWFfc2V0dXAoZCwgY291bnQsCi0JCQkJCQkgICBycV9kYXRhX2RpcihjbWQtPnJlcXVlc3QpKTsKLQkJCQlzdW4zX2RtYV9zZXR1cF9kb25lID0gY21kOwotCQkJfQotCQl9Ci0jZW5kaWYKLSNpZmRlZiBTVU4zX1NDU0lfVk1FCi0JCWRyZWdzLT5jc3IgfD0gQ1NSX0lOVFI7Ci0jZW5kaWYKLQkgICAgfQotCi0JICAgIAotCSAgICBpZiAoc2luayAmJiAocGhhc2UgIT0gUEhBU0VfTVNHT1VUKSkgewotCQlOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywgUEhBU0VfU1JfVE9fVENSKHRtcCkpOwotCi0JCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfQVROIHwgCi0JCSAgICBJQ1JfQVNTRVJUX0FDSyk7Ci0JCXdoaWxlIChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9SRVEpOwotCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCAKLQkJICAgIElDUl9BU1NFUlRfQVROKTsKLQkJc2luayA9IDA7Ci0JCWNvbnRpbnVlOwotCSAgICB9Ci0KLQkgICAgc3dpdGNoIChwaGFzZSkgewotCSAgICBjYXNlIFBIQVNFX0RBVEFPVVQ6Ci0jaWYgKE5ERUJVRyAmIE5ERUJVR19OT19EQVRBT1VUKQotCQlwcmludGsoInNjc2klZDogTkRFQlVHX05PX0RBVEFPVVQgc2V0LCBhdHRlbXB0ZWQgREFUQU9VVCAiCi0JCSAgICAgICAiYWJvcnRlZFxuIiwgSE9TVE5PKTsKLQkJc2luayA9IDE7Ci0JCWRvX2Fib3J0KGluc3RhbmNlKTsKLQkJY21kLT5yZXN1bHQgPSBESURfRVJST1IgIDw8IDE2OwotCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCQlyZXR1cm47Ci0jZW5kaWYKLQkgICAgY2FzZSBQSEFTRV9EQVRBSU46Ci0JCS8qIAotCQkgKiBJZiB0aGVyZSBpcyBubyByb29tIGxlZnQgaW4gdGhlIGN1cnJlbnQgYnVmZmVyIGluIHRoZQotCQkgKiBzY2F0dGVyLWdhdGhlciBsaXN0LCBtb3ZlIG9udG8gdGhlIG5leHQgb25lLgotCQkgKi8KLQkJaWYgKCFjbWQtPlNDcC50aGlzX3Jlc2lkdWFsICYmIGNtZC0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwpIHsKLQkJICAgICsrY21kLT5TQ3AuYnVmZmVyOwotCQkgICAgLS1jbWQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsOwotCQkgICAgY21kLT5TQ3AudGhpc19yZXNpZHVhbCA9IGNtZC0+U0NwLmJ1ZmZlci0+bGVuZ3RoOwotCQkgICAgY21kLT5TQ3AucHRyID0gU0dBRERSKGNtZC0+U0NwLmJ1ZmZlcik7Ci0JCSAgICBkcHJpbnRrKE5ERUJVR19JTkZPUk1BVElPTiwgInNjc2klZDogJWQgYnl0ZXMgYW5kICVkIGJ1ZmZlcnMgbGVmdFxuIiwKLQkJCSAgICAgICBIT1NUTk8sIGNtZC0+U0NwLnRoaXNfcmVzaWR1YWwsCi0JCQkgICAgICAgY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCk7Ci0JCX0KLQotCQkvKgotCQkgKiBUaGUgcHJlZmVycmVkIHRyYW5zZmVyIG1ldGhvZCBpcyBnb2luZyB0byBiZSAKLQkJICogUFNFVURPLURNQSBmb3Igc3lzdGVtcyB0aGF0IGFyZSBzdHJpY3RseSBQSU8sCi0JCSAqIHNpbmNlIHdlIGNhbiBsZXQgdGhlIGhhcmR3YXJlIGRvIHRoZSBoYW5kc2hha2luZy4KLQkJICoKLQkJICogRm9yIHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBrbm93IHRoZSB0cmFuc2ZlcnNpemUKLQkJICogYWhlYWQgb2YgdGltZSwgc2luY2UgdGhlIHBzZXVkby1ETUEgY29kZSB3aWxsIHNpdAotCQkgKiBpbiBhbiB1bmNvbmRpdGlvbmFsIGxvb3AuCi0JCSAqLwotCi0vKiArK3JvbWFuOiBJIHN1Z2dlc3QsIHRoaXMgc2hvdWxkIGJlCi0gKiAgICNpZiBkZWYoUkVBTF9ETUEpCi0gKiBpbnN0ZWFkIG9mIGxlYXZpbmcgUkVBTF9ETUEgb3V0LgotICovCi0KLSNpZiBkZWZpbmVkKFJFQUxfRE1BKQotLy8JCWlmICghY21kLT5kZXZpY2UtPmJvcmtlbiAmJgotCQlpZigodHJhbnNmZXJzaXplID0KLQkJICAgIE5DUjUzODBfZG1hX3hmZXJfbGVuKGluc3RhbmNlLGNtZCxwaGFzZSkpID4gU1VOM19ETUFfTUlOU0laRSkgewotCQkgICAgbGVuID0gdHJhbnNmZXJzaXplOwotCQkgICAgY21kLT5TQ3AucGhhc2UgPSBwaGFzZTsKLQotCQkgICAgaWYgKE5DUjUzODBfdHJhbnNmZXJfZG1hKGluc3RhbmNlLCAmcGhhc2UsCi0JCQkmbGVuLCAodW5zaWduZWQgY2hhciAqKikgJmNtZC0+U0NwLnB0cikpIHsKLQkJCS8qCi0JCQkgKiBJZiB0aGUgd2F0Y2hkb2cgdGltZXIgZmlyZXMsIGFsbCBmdXR1cmUKLQkJCSAqIGFjY2Vzc2VzIHRvIHRoaXMgZGV2aWNlIHdpbGwgdXNlIHRoZQotCQkJICogcG9sbGVkLUlPLiAqLyAKLQkJCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBzd2l0Y2hpbmcgdGFyZ2V0ICVkICIKLQkJCSAgICAgICAibHVuICVsbHUgdG8gc2xvdyBoYW5kc2hha2VcbiIsIEhPU1ROTywKLQkJCSAgICAgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCQkJY21kLT5kZXZpY2UtPmJvcmtlbiA9IDE7Ci0JCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCAKLQkJCSAgICBJQ1JfQVNTRVJUX0FUTik7Ci0JCQlzaW5rID0gMTsKLQkJCWRvX2Fib3J0KGluc3RhbmNlKTsKLQkJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SICA8PCAxNjsKLQkJCWNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JCQkvKiBYWFggLSBuZWVkIHRvIHNvdXJjZSBvciBzaW5rIGRhdGEgaGVyZSwgYXMgYXBwcm9wcmlhdGUgKi8KLQkJICAgIH0gZWxzZSB7Ci0jaWZkZWYgUkVBTF9ETUEKLQkJCS8qICsrcm9tYW46IFdoZW4gdXNpbmcgcmVhbCBETUEsCi0JCQkgKiBpbmZvcm1hdGlvbl90cmFuc2ZlcigpIHNob3VsZCByZXR1cm4gYWZ0ZXIKLQkJCSAqIHN0YXJ0aW5nIERNQSBzaW5jZSBpdCBoYXMgbm90aGluZyBtb3JlIHRvCi0JCQkgKiBkby4KLQkJCSAqLwotCQkJCSAgICByZXR1cm47Ci0jZWxzZQkJCQotCQkJY21kLT5TQ3AudGhpc19yZXNpZHVhbCAtPSB0cmFuc2ZlcnNpemUgLSBsZW47Ci0jZW5kaWYKLQkJICAgIH0KLQkJfSBlbHNlIAotI2VuZGlmIC8qIGRlZmluZWQoUkVBTF9ETUEpICovCi0JCSAgTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgCi0JCSAgICAoaW50ICopICZjbWQtPlNDcC50aGlzX3Jlc2lkdWFsLCAodW5zaWduZWQgY2hhciAqKikKLQkJICAgICZjbWQtPlNDcC5wdHIpOwotI2lmZGVmIFJFQUxfRE1BCi0JCS8qIGlmIHdlIGhhZCBpbnRlbmRlZCB0byBkbWEgdGhhdCBjb21tYW5kIGNsZWFyIGl0ICovCi0JCWlmKHN1bjNfZG1hX3NldHVwX2RvbmUgPT0gY21kKQotCQkJc3VuM19kbWFfc2V0dXBfZG9uZSA9IE5VTEw7Ci0jZW5kaWYKLQotCQlicmVhazsKLQkgICAgY2FzZSBQSEFTRV9NU0dJTjoKLQkJbGVuID0gMTsKLQkJZGF0YSA9ICZ0bXA7Ci0JCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIDApOyAJLyogZGlzYWJsZSByZXNlbGVjdHMgKi8KLQkJTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgJmRhdGEpOwotCQljbWQtPlNDcC5NZXNzYWdlID0gdG1wOwotCQkKLQkJc3dpdGNoICh0bXApIHsKLQkJLyoKLQkJICogTGlua2luZyBsZXRzIHVzIHJlZHVjZSB0aGUgdGltZSByZXF1aXJlZCB0byBnZXQgdGhlIAotCQkgKiBuZXh0IGNvbW1hbmQgb3V0IHRvIHRoZSBkZXZpY2UsIGhvcGVmdWxseSB0aGlzIHdpbGwKLQkJICogbWVhbiB3ZSBkb24ndCB3YXN0ZSBhbm90aGVyIHJldm9sdXRpb24gZHVlIHRvIHRoZSBkZWxheXMKLQkJICogcmVxdWlyZWQgYnkgQVJCSVRSQVRJT04gYW5kIGFub3RoZXIgU0VMRUNUSU9OLgotCQkgKgotCQkgKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBwcm9wb3NhbCwgbG93IGxldmVsIGRyaXZlcnMKLQkJICogbWVyZWx5IGhhdmUgdG8gc3RhcnQgdGhlIG5leHQgY29tbWFuZCwgcG9pbnRlZCB0byBieSAKLQkJICogbmV4dF9saW5rLCBkb25lKCkgaXMgY2FsbGVkIGFzIHdpdGggdW5saW5rZWQgY29tbWFuZHMuCi0JCSAqLwotI2lmZGVmIExJTktFRAotCQljYXNlIExJTktFRF9DTURfQ09NUExFVEU6Ci0JCWNhc2UgTElOS0VEX0ZMR19DTURfQ09NUExFVEU6Ci0JCSAgICAvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JCSAgICAKLQkJICAgIGRwcmludGsoTkRFQlVHX0xJTktFRCwgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlbGx1IGxpbmtlZCBjb21tYW5kICIKLQkJCSAgICAgICAiY29tcGxldGUuXG4iLCBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0KLQkJICAgIC8qIEVuYWJsZSByZXNlbGVjdCBpbnRlcnJ1cHRzICovCi0JCSAgICBOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7Ci0JCSAgICAvKgotCQkgICAgICogU2FuaXR5IGNoZWNrIDogQSBsaW5rZWQgY29tbWFuZCBzaG91bGQgb25seSB0ZXJtaW5hdGUKLQkJICAgICAqIHdpdGggb25lIG9mIHRoZXNlIG1lc3NhZ2VzIGlmIHRoZXJlIGFyZSBtb3JlIGxpbmtlZAotCQkgICAgICogY29tbWFuZHMgYXZhaWxhYmxlLgotCQkgICAgICovCi0KLQkJICAgIGlmICghY21kLT5uZXh0X2xpbmspIHsKLQkJCSBwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlbGx1ICIKLQkJCQkibGlua2VkIGNvbW1hbmQgY29tcGxldGUsIG5vIG5leHRfbGlua1xuIiwKLQkJCQlIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0JCQkgICAgc2luayA9IDE7Ci0JCQkgICAgZG9fYWJvcnQgKGluc3RhbmNlKTsKLQkJCSAgICByZXR1cm47Ci0JCSAgICB9Ci0KLQkJICAgIGluaXRpYWxpemVfU0NwKGNtZC0+bmV4dF9saW5rKTsKLQkJICAgIC8qIFRoZSBuZXh0IGNvbW1hbmQgaXMgc3RpbGwgcGFydCBvZiB0aGlzIHByb2Nlc3M7IGNvcHkgaXQKLQkJICAgICAqIGFuZCBkb24ndCBmcmVlIGl0ISAqLwotCQkgICAgY21kLT5uZXh0X2xpbmstPnRhZyA9IGNtZC0+dGFnOwotCQkgICAgY21kLT5yZXN1bHQgPSBjbWQtPlNDcC5TdGF0dXMgfCAoY21kLT5TQ3AuTWVzc2FnZSA8PCA4KTsgCi0JCSAgICBkcHJpbnRrKE5ERUJVR19MSU5LRUQsICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWxsdSBsaW5rZWQgcmVxdWVzdCAiCi0JCQkgICAgICAgImRvbmUsIGNhbGxpbmcgc2NzaV9kb25lKCkuXG4iLAotCQkJICAgICAgIEhPU1ROTywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JCSAgICBjb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOwotI2VuZGlmCi0JCSAgICBjbWQtPnNjc2lfZG9uZShjbWQpOwotCQkgICAgY21kID0gaG9zdGRhdGEtPmNvbm5lY3RlZDsKLQkJICAgIGJyZWFrOwotI2VuZGlmIC8qIGRlZiBMSU5LRUQgKi8KLQkJY2FzZSBBQk9SVDoKLQkJY2FzZSBDT01NQU5EX0NPTVBMRVRFOiAKLQkJICAgIC8qIEFjY2VwdCBtZXNzYWdlIGJ5IGNsZWFyaW5nIEFDSyAqLwotCQkgICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQkJICAgIGhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwotCQkgICAgZHByaW50ayhOREVCVUdfUVVFVUVTLCAic2NzaSVkOiBjb21tYW5kIGZvciB0YXJnZXQgJWQsIGx1biAlbGx1ICIKLQkJCSAgICAgICJjb21wbGV0ZWRcbiIsIEhPU1ROTywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLSNpZmRlZiBTVVBQT1JUX1RBR1MKLQkJICAgIGNtZF9mcmVlX3RhZyggY21kICk7Ci0JCSAgICBpZiAoc3RhdHVzX2J5dGUoY21kLT5TQ3AuU3RhdHVzKSA9PSBRVUVVRV9GVUxMKSB7Ci0JCQkvKiBUdXJuIGEgUVVFVUUgRlVMTCBzdGF0dXMgaW50byBCVVNZLCBJIHRoaW5rIHRoZQotCQkJICogbWlkIGxldmVsIGNhbm5vdCBoYW5kbGUgUVVFVUUgRlVMTCA6LSggKFRoZQotCQkJICogY29tbWFuZCBpcyByZXRyaWVkIGFmdGVyIEJVU1kpLiBBbHNvIHVwZGF0ZSBvdXIKLQkJCSAqIHF1ZXVlIHNpemUgdG8gdGhlIG51bWJlciBvZiBjdXJyZW50bHkgaXNzdWVkCi0JCQkgKiBjb21tYW5kcyBub3cuCi0JCQkgKi8KLQkJCS8qICsrQW5kcmVhczogdGhlIG1pZCBsZXZlbCBjb2RlIGtub3dzIGFib3V0Ci0JCQkgICBRVUVVRV9GVUxMIG5vdy4gKi8KLQkJCVRBR19BTExPQyAqdGEgPSAmVGFnQWxsb2NbY21kLT5kZXZpY2UtPmlkXVtjbWQtPmRldmljZS0+bHVuXTsKLQkJCWRwcmludGsoTkRFQlVHX1RBR1MsICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWxsdSByZXR1cm5lZCAiCi0JCQkJICAgIlFVRVVFX0ZVTEwgYWZ0ZXIgJWQgY29tbWFuZHNcbiIsCi0JCQkJICAgSE9TVE5PLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sCi0JCQkJICAgdGEtPm5yX2FsbG9jYXRlZCk7Ci0JCQlpZiAodGEtPnF1ZXVlX3NpemUgPiB0YS0+bnJfYWxsb2NhdGVkKQotCQkJICAgIHRhLT5ucl9hbGxvY2F0ZWQgPSB0YS0+cXVldWVfc2l6ZTsKLQkJICAgIH0KLSNlbHNlCi0JCSAgICBob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICY9IH4oMSA8PCBjbWQtPmRldmljZS0+bHVuKTsKLSNlbmRpZgotCQkgICAgLyogRW5hYmxlIHJlc2VsZWN0IGludGVycnVwdHMgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQotCQkgICAgLyogCi0JCSAgICAgKiBJJ20gbm90IHN1cmUgd2hhdCB0aGUgY29ycmVjdCB0aGluZyB0byBkbyBoZXJlIGlzIDogCi0JCSAgICAgKiAKLQkJICAgICAqIElmIHRoZSBjb21tYW5kIHRoYXQganVzdCBleGVjdXRlZCBpcyBOT1QgYSByZXF1ZXN0IAotCQkgICAgICogc2Vuc2UsIHRoZSBvYnZpb3VzIHRoaW5nIHRvIGRvIGlzIHRvIHNldCB0aGUgcmVzdWx0Ci0JCSAgICAgKiBjb2RlIHRvIHRoZSB2YWx1ZXMgb2YgdGhlIHN0b3JlZCBwYXJhbWV0ZXJzLgotCQkgICAgICogCi0JCSAgICAgKiBJZiBpdCB3YXMgYSBSRVFVRVNUIFNFTlNFIGNvbW1hbmQsIHdlIG5lZWQgc29tZSB3YXkgdG8KLQkJICAgICAqIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgZmFpbHVyZSBjb2RlIG9mIHRoZSBvcmlnaW5hbAotCQkgICAgICogYW5kIHRoZSBmYWlsdXJlIGNvZGUgb2YgdGhlIFJFUVVFU1Qgc2Vuc2UgLSB0aGUgb2J2aW91cwotCQkgICAgICogY2FzZSBpcyBzdWNjZXNzLCB3aGVyZSB3ZSBmYWxsIHRocm91Z2ggYW5kIGxlYXZlIHRoZQotCQkgICAgICogcmVzdWx0IGNvZGUgdW5jaGFuZ2VkLgotCQkgICAgICogCi0JCSAgICAgKiBUaGUgbm9uLW9idmlvdXMgcGxhY2UgaXMgd2hlcmUgdGhlIFJFUVVFU1QgU0VOU0UgZmFpbGVkCi0JCSAgICAgKi8KLQotCQkgICAgaWYgKGNtZC0+Y21uZFswXSAhPSBSRVFVRVNUX1NFTlNFKSAKLQkJCWNtZC0+cmVzdWx0ID0gY21kLT5TQ3AuU3RhdHVzIHwgKGNtZC0+U0NwLk1lc3NhZ2UgPDwgOCk7IAotCQkgICAgZWxzZSBpZiAoc3RhdHVzX2J5dGUoY21kLT5TQ3AuU3RhdHVzKSAhPSBHT09EKQotCQkJY21kLT5yZXN1bHQgPSAoY21kLT5yZXN1bHQgJiAweDAwZmZmZikgfCAoRElEX0VSUk9SIDw8IDE2KTsKLQkJICAgIAotI2lmZGVmIEFVVE9TRU5TRQotCQkgICAgaWYgKChjbWQtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgJiYKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RkYXRhLT5zZXMuY21kX2xlbikgewotCQkJc2NzaV9laF9yZXN0b3JlX2NtbmQoY21kLCAmaG9zdGRhdGEtPnNlcyk7Ci0JCQlob3N0ZGF0YS0+c2VzLmNtZF9sZW4gPSAwIDsKLQkJICAgIH0KLQotCQkgICAgaWYgKChjbWQtPmNtbmRbMF0gIT0gUkVRVUVTVF9TRU5TRSkgJiYgCi0JCQkoc3RhdHVzX2J5dGUoY21kLT5TQ3AuU3RhdHVzKSA9PSBDSEVDS19DT05ESVRJT04pKSB7Ci0JCQlzY3NpX2VoX3ByZXBfY21uZChjbWQsICZob3N0ZGF0YS0+c2VzLCBOVUxMLCAwLCB+MCk7Ci0JCQlkcHJpbnRrKE5ERUJVR19BVVRPU0VOU0UsICJzY3NpJWQ6IHBlcmZvcm1pbmcgcmVxdWVzdCBzZW5zZVxuIiwKLQkJCQkgICAgSE9TVE5PKTsKLQkJCS8qIHRoaXMgaXMgaW5pdGlhbGl6ZWQgZnJvbSBpbml0aWFsaXplX1NDcCAKLQkJCWNtZC0+U0NwLmJ1ZmZlciA9IE5VTEw7Ci0JCQljbWQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsID0gMDsKLQkJCSovCi0KLQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCUxJU1QoY21kLGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSk7Ci0JCQlTRVRfTkVYVChjbWQsIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSk7Ci0JCSAgICAgICAgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgY21kOwotCQkgICAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJCWRwcmludGsoTkRFQlVHX1FVRVVFUywgInNjc2klZDogUkVRVUVTVCBTRU5TRSBhZGRlZCB0byBoZWFkIG9mICIKLQkJCQkgICJpc3N1ZSBxdWV1ZVxuIiwgSF9OTyhjbWQpKTsKLQkJICAgfSBlbHNlCi0jZW5kaWYgLyogZGVmIEFVVE9TRU5TRSAqLwotCQkgICB7Ci0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCQkgICAgICAgY29sbGVjdF9zdGF0cyhob3N0ZGF0YSwgY21kKTsKLSNlbmRpZgotCQkgICAgICAgY21kLT5zY3NpX2RvbmUoY21kKTsKLQkJICAgIH0KLQotCQkgICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkgICAgLyogCi0JCSAgICAgKiBSZXN0b3JlIHBoYXNlIGJpdHMgdG8gMCBzbyBhbiBpbnRlcnJ1cHRlZCBzZWxlY3Rpb24sIAotCQkgICAgICogYXJiaXRyYXRpb24gY2FuIHJlc3VtZS4KLQkJICAgICAqLwotCQkgICAgTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDApOwotCQkgICAgCi0JCSAgICB3aGlsZSAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX0JTWSkgJiYgIWhvc3RkYXRhLT5jb25uZWN0ZWQpCi0JCQliYXJyaWVyKCk7Ci0KLQkJICAgIHJldHVybjsKLQkJY2FzZSBNRVNTQUdFX1JFSkVDVDoKLQkJICAgIC8qIEFjY2VwdCBtZXNzYWdlIGJ5IGNsZWFyaW5nIEFDSyAqLwotCQkgICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQkJICAgIC8qIEVuYWJsZSByZXNlbGVjdCBpbnRlcnJ1cHRzICovCi0JCSAgICBOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7Ci0JCSAgICBzd2l0Y2ggKGhvc3RkYXRhLT5sYXN0X21lc3NhZ2UpIHsKLQkJICAgIGNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCSAgICBjYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkgICAgY2FzZSBTSU1QTEVfUVVFVUVfVEFHOgotCQkJLyogVGhlIHRhcmdldCBvYnZpb3VzbHkgZG9lc24ndCBzdXBwb3J0IHRhZ2dlZAotCQkJICogcXVldWluZywgZXZlbiB0aG91Z2ggaXQgYW5ub3VuY2VkIHRoaXMgYWJpbGl0eSBpbgotCQkJICogaXRzIElOUVVJUlkgZGF0YSA/IT8gKG1heWJlIG9ubHkgdGhpcyBMVU4/KSBPaywKLQkJCSAqIGNsZWFyICd0YWdnZWRfc3VwcG9ydGVkJyBhbmQgbG9jayB0aGUgTFVOLCBzaW5jZQotCQkJICogdGhlIGNvbW1hbmQgaXMgdHJlYXRlZCBhcyB1bnRhZ2dlZCBmdXJ0aGVyIG9uLgotCQkJICovCi0JCQljbWQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCA9IDA7Ci0JCQlob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdIHw9ICgxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwotCQkJY21kLT50YWcgPSBUQUdfTk9ORTsKLQkJCWRwcmludGsoTkRFQlVHX1RBR1MsICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWxsdSByZWplY3RlZCAiCi0JCQkJICAgIlFVRVVFX1RBRyBtZXNzYWdlOyB0YWdnZWQgcXVldWluZyAiCi0JCQkJICAgImRpc2FibGVkXG4iLAotCQkJCSAgIEhPU1ROTywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQkJCWJyZWFrOwotCQkgICAgfQotCQkgICAgYnJlYWs7Ci0JCWNhc2UgRElTQ09OTkVDVDoKLQkJICAgIC8qIEFjY2VwdCBtZXNzYWdlIGJ5IGNsZWFyaW5nIEFDSyAqLwotCQkgICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQkJICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJICAgIGNtZC0+ZGV2aWNlLT5kaXNjb25uZWN0ID0gMTsKLQkJICAgIExJU1QoY21kLGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUpOwotCQkgICAgU0VUX05FWFQoY21kLCBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKTsKLQkJICAgIGhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwotCQkgICAgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSA9IGNtZDsKLQkJICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJICAgIGRwcmludGsoTkRFQlVHX1FVRVVFUywgInNjc2klZDogY29tbWFuZCBmb3IgdGFyZ2V0ICVkIGx1biAlbGx1IHdhcyAiCi0JCQkgICAgICAibW92ZWQgZnJvbSBjb25uZWN0ZWQgdG8gdGhlICIKLQkJCSAgICAgICJkaXNjb25uZWN0ZWRfcXVldWVcbiIsIEhPU1ROTywgCi0JCQkgICAgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCQkgICAgLyogCi0JCSAgICAgKiBSZXN0b3JlIHBoYXNlIGJpdHMgdG8gMCBzbyBhbiBpbnRlcnJ1cHRlZCBzZWxlY3Rpb24sIAotCQkgICAgICogYXJiaXRyYXRpb24gY2FuIHJlc3VtZS4KLQkJICAgICAqLwotCQkgICAgTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDApOwotCi0JCSAgICAvKiBFbmFibGUgcmVzZWxlY3QgaW50ZXJydXB0cyAqLwotCQkgICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkgICAgLyogV2FpdCBmb3IgYnVzIGZyZWUgdG8gYXZvaWQgbmFzdHkgdGltZW91dHMgKi8KLQkJICAgIHdoaWxlICgoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfQlNZKSAmJiAhaG9zdGRhdGEtPmNvbm5lY3RlZCkKLQkJICAgIAliYXJyaWVyKCk7Ci0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCQkgICAgZHJlZ3MtPmNzciB8PSBDU1JfRE1BX0VOQUJMRTsKLSNlbmRpZgotCQkgICAgcmV0dXJuOwotCQkvKiAKLQkJICogVGhlIFNDU0kgZGF0YSBwb2ludGVyIGlzICpJTVBMSUNJVExZKiBzYXZlZCBvbiBhIGRpc2Nvbm5lY3QKLQkJICogb3BlcmF0aW9uLCBpbiB2aW9sYXRpb24gb2YgdGhlIFNDU0kgc3BlYyBzbyB3ZSBjYW4gc2FmZWx5IAotCQkgKiBpZ25vcmUgU0FWRS9SRVNUT1JFIHBvaW50ZXJzIGNhbGxzLgotCQkgKgotCQkgKiBVbmZvcnR1bmF0ZWx5LCBzb21lIGRpc2tzIHZpb2xhdGUgdGhlIFNDU0kgc3BlYyBhbmQgCi0JCSAqIGRvbid0IGlzc3VlIHRoZSByZXF1aXJlZCBTQVZFX1BPSU5URVJTIG1lc3NhZ2UgYmVmb3JlCi0JCSAqIGRpc2Nvbm5lY3RpbmcsIGFuZCB3ZSBoYXZlIHRvIGJyZWFrIHNwZWMgdG8gcmVtYWluIAotCQkgKiBjb21wYXRpYmxlLgotCQkgKi8KLQkJY2FzZSBTQVZFX1BPSU5URVJTOgotCQljYXNlIFJFU1RPUkVfUE9JTlRFUlM6Ci0JCSAgICAvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JCSAgICAvKiBFbmFibGUgcmVzZWxlY3QgaW50ZXJydXB0cyAqLwotCQkgICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkgICAgYnJlYWs7Ci0JCWNhc2UgRVhURU5ERURfTUVTU0FHRToKLS8qIAotICogRXh0ZW5kZWQgbWVzc2FnZXMgYXJlIHNlbnQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQgOgotICogQnl0ZSAJCi0gKiAwCQlFWFRFTkRFRF9NRVNTQUdFID09IDEKLSAqIDEJCWxlbmd0aCAoaW5jbHVkZXMgb25lIGJ5dGUgZm9yIGNvZGUsIGRvZXNuJ3QgCi0gKgkJaW5jbHVkZSBmaXJzdCB0d28gYnl0ZXMpCi0gKiAyIAkJY29kZQotICogMy4ubGVuZ3RoKzEJYXJndW1lbnRzCi0gKgotICogU3RhcnQgdGhlIGV4dGVuZGVkIG1lc3NhZ2UgYnVmZmVyIHdpdGggdGhlIEVYVEVOREVEX01FU1NBR0UKLSAqIGJ5dGUsIHNpbmNlIHNwaV9wcmludF9tc2coKSB3YW50cyB0aGUgd2hvbGUgdGhpbmcuICAKLSAqLwotCQkgICAgZXh0ZW5kZWRfbXNnWzBdID0gRVhURU5ERURfTUVTU0FHRTsKLQkJICAgIC8qIEFjY2VwdCBmaXJzdCBieXRlIGJ5IGNsZWFyaW5nIEFDSyAqLwotCQkgICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQotCQkgICAgZHByaW50ayhOREVCVUdfRVhURU5ERUQsICJzY3NpJWQ6IHJlY2VpdmluZyBleHRlbmRlZCBtZXNzYWdlXG4iLCBIT1NUTk8pOwotCi0JCSAgICBsZW4gPSAyOwotCQkgICAgZGF0YSA9IGV4dGVuZGVkX21zZyArIDE7Ci0JCSAgICBwaGFzZSA9IFBIQVNFX01TR0lOOwotCQkgICAgTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgJmRhdGEpOwotCQkgICAgZHByaW50ayhOREVCVUdfRVhURU5ERUQsICJzY3NpJWQ6IGxlbmd0aD0lZCwgY29kZT0weCUwMnhcbiIsIEhPU1ROTywKLQkJCSAgICAgICAoaW50KWV4dGVuZGVkX21zZ1sxXSwgKGludClleHRlbmRlZF9tc2dbMl0pOwotCi0JCSAgICBpZiAoIWxlbiAmJiBleHRlbmRlZF9tc2dbMV0gPD0gCi0JCQkoc2l6ZW9mIChleHRlbmRlZF9tc2cpIC0gMSkpIHsKLQkJCS8qIEFjY2VwdCB0aGlyZCBieXRlIGJ5IGNsZWFyaW5nIEFDSyAqLwotCQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQkJCWxlbiA9IGV4dGVuZGVkX21zZ1sxXSAtIDE7Ci0JCQlkYXRhID0gZXh0ZW5kZWRfbXNnICsgMzsKLQkJCXBoYXNlID0gUEhBU0VfTVNHSU47Ci0KLQkJCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLQkJCWRwcmludGsoTkRFQlVHX0VYVEVOREVELCAic2NzaSVkOiBtZXNzYWdlIHJlY2VpdmVkLCByZXNpZHVhbCAlZFxuIiwKLQkJCQkgICBIT1NUTk8sIGxlbik7Ci0KLQkJCXN3aXRjaCAoZXh0ZW5kZWRfbXNnWzJdKSB7Ci0JCQljYXNlIEVYVEVOREVEX1NEVFI6Ci0JCQljYXNlIEVYVEVOREVEX1dEVFI6Ci0JCQljYXNlIEVYVEVOREVEX01PRElGWV9EQVRBX1BPSU5URVI6Ci0JCQljYXNlIEVYVEVOREVEX0VYVEVOREVEX0lERU5USUZZOgotCQkJICAgIHRtcCA9IDA7Ci0JCQl9Ci0JCSAgICB9IGVsc2UgaWYgKGxlbikgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJzY3NpJWQ6IGVycm9yIHJlY2VpdmluZyAiCi0JCQkgICAgICAgImV4dGVuZGVkIG1lc3NhZ2VcbiIsIEhPU1ROTyk7Ci0JCQl0bXAgPSAwOwotCQkgICAgfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBleHRlbmRlZCBtZXNzYWdlICIKLQkJCSAgICAgICAiY29kZSAlMDJ4IGxlbmd0aCAlZCBpcyB0b28gbG9uZ1xuIiwKLQkJCSAgICAgICBIT1NUTk8sIGV4dGVuZGVkX21zZ1syXSwgZXh0ZW5kZWRfbXNnWzFdKTsKLQkJCXRtcCA9IDA7Ci0JCSAgICB9Ci0JCS8qIEZhbGwgdGhyb3VnaCB0byByZWplY3QgbWVzc2FnZSAqLwotCi0JCS8qIAotICAJCSAqIElmIHdlIGdldCBzb21ldGhpbmcgd2VpcmQgdGhhdCB3ZSBhcmVuJ3QgZXhwZWN0aW5nLCAKLSAJCSAqIHJlamVjdCBpdC4KLQkJICovCi0JCWRlZmF1bHQ6Ci0JCSAgICBpZiAoIXRtcCkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcmVqZWN0aW5nIG1lc3NhZ2UgIiwgSE9TVE5PKTsKLQkJCXNwaV9wcmludF9tc2coZXh0ZW5kZWRfbXNnKTsKLQkJCXByaW50aygiXG4iKTsKLQkJICAgIH0gZWxzZSBpZiAodG1wICE9IEVYVEVOREVEX01FU1NBR0UpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAic2NzaSVkOiByZWplY3RpbmcgdW5rbm93biAiCi0JCQkgICAgICAgIm1lc3NhZ2UgJTAyeCBmcm9tIHRhcmdldCAlZCwgbHVuICVsbHVcbiIsCi0JCQkgICAgICAgSE9TVE5PLCB0bXAsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0JCSAgICBlbHNlCi0JCQlwcmludGsoS0VSTl9ERUJVRyAic2NzaSVkOiByZWplY3RpbmcgdW5rbm93biAiCi0JCQkgICAgICAgImV4dGVuZGVkIG1lc3NhZ2UgIgotCQkJICAgICAgICJjb2RlICUwMngsIGxlbmd0aCAlZCBmcm9tIHRhcmdldCAlZCwgbHVuICVsbHVcbiIsCi0JCQkgICAgICAgSE9TVE5PLCBleHRlbmRlZF9tc2dbMV0sIGV4dGVuZGVkX21zZ1swXSwKLQkJCSAgICAgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotICAgCi0KLQkJICAgIG1zZ291dCA9IE1FU1NBR0VfUkVKRUNUOwotCQkgICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgCi0JCQlJQ1JfQVNTRVJUX0FUTik7Ci0JCSAgICBicmVhazsKLQkJfSAvKiBzd2l0Y2ggKHRtcCkgKi8KLQkJYnJlYWs7Ci0JICAgIGNhc2UgUEhBU0VfTVNHT1VUOgotCQlsZW4gPSAxOwotCQlkYXRhID0gJm1zZ291dDsKLQkJaG9zdGRhdGEtPmxhc3RfbWVzc2FnZSA9IG1zZ291dDsKLQkJTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgJmRhdGEpOwotCQlpZiAobXNnb3V0ID09IEFCT1JUKSB7Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCSAgICBjbWRfZnJlZV90YWcoIGNtZCApOwotI2Vsc2UKLQkJICAgIGhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJj0gfigxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwotI2VuZGlmCi0JCSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLQkJICAgIGNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQkJICAgIGNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7Ci0jZW5kaWYKLQkJICAgIGNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JCSAgICBOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7Ci0JCSAgICByZXR1cm47Ci0JCX0KLQkJbXNnb3V0ID0gTk9QOwotCQlicmVhazsKLQkgICAgY2FzZSBQSEFTRV9DTURPVVQ6Ci0JCWxlbiA9IGNtZC0+Y21kX2xlbjsKLQkJZGF0YSA9IGNtZC0+Y21uZDsKLQkJLyogCi0JCSAqIFhYWCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgb24gbWFjaGluZXMgd2l0aCBhIAotCQkgKiBQU0VVRE8tRE1BIGFyY2hpdGVjdHVyZSB3ZSBzaG91bGQgcHJvYmFibHkgCi0JCSAqIHVzZSB0aGUgZG1hIHRyYW5zZmVyIGZ1bmN0aW9uLiAgCi0JCSAqLwotCQlOQ1I1MzgwX3RyYW5zZmVyX3BpbyhpbnN0YW5jZSwgJnBoYXNlLCAmbGVuLCAKLQkJICAgICZkYXRhKTsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgUEhBU0VfU1RBVElOOgotCQlsZW4gPSAxOwotCQlkYXRhID0gJnRtcDsKLQkJTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgJmRhdGEpOwotCQljbWQtPlNDcC5TdGF0dXMgPSB0bXA7Ci0JCWJyZWFrOwotCSAgICBkZWZhdWx0OgotCQlwcmludGsoInNjc2klZDogdW5rbm93biBwaGFzZVxuIiwgSE9TVE5PKTsKLQkJTkNSNTM4MF9kcHJpbnQoTkRFQlVHX0FOWSwgaW5zdGFuY2UpOwotCSAgICB9IC8qIHN3aXRjaChwaGFzZSkgKi8KLQl9IC8qIGlmICh0bXAgKiBTUl9SRVEpICovIAotICAgIH0gLyogd2hpbGUgKDEpICovCi19Ci0KLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9yZXNlbGVjdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi0gKgotICogUHVycG9zZSA6IGRvZXMgcmVzZWxlY3Rpb24sIGluaXRpYWxpemluZyB0aGUgaW5zdGFuY2UtPmNvbm5lY3RlZCAKLSAqCWZpZWxkIHRvIHBvaW50IHRvIHRoZSBzdHJ1Y3Qgc2NzaV9jbW5kIGZvciB3aGljaCB0aGUgSV9UX0wgb3IgSV9UX0xfUQotICoJbmV4dXMgaGFzIGJlZW4gcmVlc3RhYmxpc2hlZCwKLSAqCQotICogSW5wdXRzIDogaW5zdGFuY2UgLSB0aGlzIGluc3RhbmNlIG9mIHRoZSBOQ1I1MzgwLgotICoKLSAqLwotCi0vKiBpdCBtaWdodCBldmVudHVhbGx5IHByb3ZlIG5lY2Vzc2FyeSB0byBkbyBhIGRtYSBzZXR1cCBvbgotICAgcmVzZWxlY3Rpb24sIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgbmVlZGVkIG5vdyAtLSBzYW0gKi8KLQotc3RhdGljIHZvaWQgTkNSNTM4MF9yZXNlbGVjdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi17Ci0gICAgU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotICAgIHVuc2lnbmVkIGNoYXIgdGFyZ2V0X21hc2s7Ci0gICAgdW5zaWduZWQgY2hhciBsdW47Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0gICAgdW5zaWduZWQgY2hhciB0YWc7Ci0jZW5kaWYKLSAgICB1bnNpZ25lZCBjaGFyIG1zZ1szXTsKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICp0bXAgPSBOVUxMLCAqcHJldjsKLS8qICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7ICovCi0KLSAgICAvKgotICAgICAqIERpc2FibGUgYXJiaXRyYXRpb24sIGV0Yy4gc2luY2UgdGhlIGhvc3QgYWRhcHRlciBvYnZpb3VzbHkKLSAgICAgKiBsb3N0LCBhbmQgdGVsbCBhbiBpbnRlcnJ1cHRlZCBOQ1I1MzgwX3NlbGVjdCgpIHRvIHJlc3RhcnQuCi0gICAgICovCi0KLSAgICBOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsKLSAgICBob3N0ZGF0YS0+cmVzdGFydF9zZWxlY3QgPSAxOwotCi0gICAgdGFyZ2V0X21hc2sgPSBOQ1I1MzgwX3JlYWQoQ1VSUkVOVF9TQ1NJX0RBVEFfUkVHKSAmIH4oaG9zdGRhdGEtPmlkX21hc2spOwotCi0gICAgZHByaW50ayhOREVCVUdfUkVTRUxFQ1RJT04sICJzY3NpJWQ6IHJlc2VsZWN0XG4iLCBIT1NUTk8pOwotCi0gICAgLyogCi0gICAgICogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBkZXRlY3RlZCB0aGF0IG91ciBTQ1NJIElEIGlzIG9uIHRoZSBidXMsCi0gICAgICogU0VMIGlzIHRydWUgYW5kIEJTWSB3YXMgZmFsc2UgZm9yIGF0IGxlYXN0IG9uZSBidXMgc2V0dGxlIGRlbGF5Ci0gICAgICogKDQwMCBucykuCi0gICAgICoKLSAgICAgKiBXZSBtdXN0IGFzc2VydCBCU1kgb3Vyc2VsdmVzLCB1bnRpbCB0aGUgdGFyZ2V0IGRyb3BzIHRoZSBTRUwKLSAgICAgKiBzaWduYWwuCi0gICAgICovCi0KLSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0JTWSk7Ci0gICAgCi0gICAgd2hpbGUgKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1NFTCk7Ci0gICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQotICAgIC8qCi0gICAgICogV2FpdCBmb3IgdGFyZ2V0IHRvIGdvIGludG8gTVNHSU4uCi0gICAgICovCi0KLSAgICB3aGlsZSAoIShOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9SRVEpKTsKLQotI2lmIDEKLSAgICAvLyBhY2tub3dsZWRnZSB0b2dnbGUgdG8gTVNHSU4KLSAgICBOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywgUEhBU0VfU1JfVE9fVENSKFBIQVNFX01TR0lOKSk7Ci0KLSAgICAvLyBwZWVrIGF0IHRoZSBieXRlIHdpdGhvdXQgcmVhbGx5IGhpdHRpbmcgdGhlIGJ1cwotICAgIG1zZ1swXSA9IE5DUjUzODBfcmVhZChDVVJSRU5UX1NDU0lfREFUQV9SRUcpOwotI2VuZGlmCi0KLSAgICBpZiAoIShtc2dbMF0gJiAweDgwKSkgewotCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IGV4cGVjdGluZyBJREVOVElGWSBtZXNzYWdlLCBnb3QgIiwgSE9TVE5PKTsKLQlzcGlfcHJpbnRfbXNnKG1zZyk7Ci0JZG9fYWJvcnQoaW5zdGFuY2UpOwotCXJldHVybjsKLSAgICB9Ci0gICAgbHVuID0gKG1zZ1swXSAmIDB4MDcpOwotCi0gICAgLyogCi0gICAgICogRmluZCB0aGUgY29tbWFuZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBJX1RfTCBvciBJX1RfTF9RICBuZXh1cyB3ZSAKLSAgICAgKiBqdXN0IHJlZXN0YWJsaXNoZWQsIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlLgotICAgICAqLwotCi0gICAgZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCBwcmV2ID0gTlVMTDsKLQkgdG1wOyBwcmV2ID0gdG1wLCB0bXAgPSBORVhUKHRtcCkgKSB7Ci0JaWYgKCh0YXJnZXRfbWFzayA9PSAoMSA8PCB0bXAtPmRldmljZS0+aWQpKSAmJiAobHVuID09IHRtcC0+ZGV2aWNlLT5sdW4pCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JICAgICYmICh0YWcgPT0gdG1wLT50YWcpIAotI2VuZGlmCi0JICAgICkgewotCSAgICBpZiAocHJldikgewotCQlSRU1PVkUocHJldiwgTkVYVChwcmV2KSwgdG1wLCBORVhUKHRtcCkpOwotCQlTRVRfTkVYVChwcmV2LCBORVhUKHRtcCkpOwotCSAgICB9IGVsc2UgewotCQlSRU1PVkUoLTEsIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUsIHRtcCwgTkVYVCh0bXApKTsKLQkJaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSA9IE5FWFQodG1wKTsKLQkgICAgfQotCSAgICBTRVRfTkVYVCh0bXAsIE5VTEwpOwotCSAgICBicmVhazsKLQl9Ci0gICAgfQotICAgIAotICAgIGlmICghdG1wKSB7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiB3YXJuaW5nOiB0YXJnZXQgYml0bWFzayAlMDJ4IGx1biAlZCAiCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCSJ0YWcgJWQgIgotI2VuZGlmCi0JCSJub3QgaW4gZGlzY29ubmVjdGVkX3F1ZXVlLlxuIiwKLQkJSE9TVE5PLCB0YXJnZXRfbWFzaywgbHVuCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCSwgdGFnCi0jZW5kaWYKLQkJKTsKLQkvKiAKLQkgKiBTaW5jZSB3ZSBoYXZlIGFuIGVzdGFibGlzaGVkIG5leHVzIHRoYXQgd2UgY2FuJ3QgZG8gYW55dGhpbmcKLQkgKiB3aXRoLCB3ZSBtdXN0IGFib3J0IGl0LiAgCi0JICovCi0JZG9fYWJvcnQoaW5zdGFuY2UpOwotCXJldHVybjsKLSAgICB9Ci0jaWYgMQotICAgIC8qIGVuZ2FnZSBkbWEgc2V0dXAgZm9yIHRoZSBjb21tYW5kIHdlIGp1c3Qgc2F3ICovCi0gICAgewotCSAgICB2b2lkICpkOwotCSAgICB1bnNpZ25lZCBsb25nIGNvdW50OwotCi0JICAgIGlmICghdG1wLT5TQ3AudGhpc19yZXNpZHVhbCAmJiB0bXAtPlNDcC5idWZmZXJzX3Jlc2lkdWFsKSB7Ci0JCSAgICBjb3VudCA9IHRtcC0+U0NwLmJ1ZmZlci0+bGVuZ3RoOwotCQkgICAgZCA9IFNHQUREUih0bXAtPlNDcC5idWZmZXIpOwotCSAgICB9IGVsc2UgewotCQkgICAgY291bnQgPSB0bXAtPlNDcC50aGlzX3Jlc2lkdWFsOwotCQkgICAgZCA9IHRtcC0+U0NwLnB0cjsKLQkgICAgfQotI2lmZGVmIFJFQUxfRE1BCi0JICAgIC8qIHNldHVwIHRoaXMgY29tbWFuZCBmb3IgZG1hIGlmIG5vdCBhbHJlYWR5ICovCi0JICAgIGlmKChjb3VudCA+IFNVTjNfRE1BX01JTlNJWkUpICYmIChzdW4zX2RtYV9zZXR1cF9kb25lICE9IHRtcCkpCi0JICAgIHsKLQkJICAgIHN1bjNzY3NpX2RtYV9zZXR1cChkLCBjb3VudCwgcnFfZGF0YV9kaXIodG1wLT5yZXF1ZXN0KSk7Ci0JCSAgICBzdW4zX2RtYV9zZXR1cF9kb25lID0gdG1wOwotCSAgICB9Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLQotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfQUNLKTsKLSAgICAvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KLSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0gICAgLyogSWYgdGhlIHBoYXNlIGlzIHN0aWxsIE1TR0lOLCB0aGUgdGFyZ2V0IHdhbnRzIHRvIHNlbmQgc29tZSBtb3JlCi0gICAgICogbWVzc2FnZXMuIEluIGNhc2UgaXQgc3VwcG9ydHMgdGFnZ2VkIHF1ZXVpbmcsIHRoaXMgaXMgcHJvYmFibHkgYQotICAgICAqIFNJTVBMRV9RVUVVRV9UQUcgZm9yIHRoZSBJX1RfTF9RIG5leHVzLgotICAgICAqLwotICAgIHRhZyA9IFRBR19OT05FOwotICAgIGlmIChwaGFzZSA9PSBQSEFTRV9NU0dJTiAmJiBzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcpIHsKLQkvKiBBY2NlcHQgcHJldmlvdXMgSURFTlRJRlkgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KLQlOQ1I1MzgwX3dyaXRlKCBJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFICk7Ci0JbGVuID0gMjsKLQlkYXRhID0gbXNnKzE7Ci0JaWYgKCFOQ1I1MzgwX3RyYW5zZmVyX3BpbyhpbnN0YW5jZSwgJnBoYXNlLCAmbGVuLCAmZGF0YSkgJiYKLQkgICAgbXNnWzFdID09IFNJTVBMRV9RVUVVRV9UQUcpCi0JICAgIHRhZyA9IG1zZ1syXTsKLQlkcHJpbnRrKE5ERUJVR19UQUdTLCAic2NzaSVkOiB0YXJnZXQgbWFzayAlMDJ4LCBsdW4gJWQgc2VudCB0YWcgJWQgYXQgIgotCQkgICAicmVzZWxlY3Rpb25cbiIsIEhPU1ROTywgdGFyZ2V0X21hc2ssIGx1biwgdGFnKTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gdG1wOwotICAgIGRwcmludGsoTkRFQlVHX1JFU0VMRUNUSU9OLCAic2NzaSVkOiBuZXh1cyBlc3RhYmxpc2hlZCwgdGFyZ2V0ID0gJWQsIGx1biA9ICVsbHUsIHRhZyA9ICVkXG4iLAotCSAgICAgICBIT1NUTk8sIHRtcC0+ZGV2aWNlLT5pZCwgdG1wLT5kZXZpY2UtPmx1biwgdG1wLT50YWcpOwotfQotCi0KLS8qCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLSAqCi0gKiBQdXJwb3NlIDogYWJvcnQgYSBjb21tYW5kCi0gKgotICogSW5wdXRzIDogY21kIC0gdGhlIHN0cnVjdCBzY3NpX2NtbmQgdG8gYWJvcnQsIGNvZGUgLSBjb2RlIHRvIHNldCB0aGUKLSAqIAlob3N0IGJ5dGUgb2YgdGhlIHJlc3VsdCBmaWVsZCB0bywgaWYgemVybyBESURfQUJPUlRFRCBpcyAKLSAqCXVzZWQuCi0gKgotICogUmV0dXJucyA6IDAgLSBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgotICoKLSAqIFhYWCAtIHRoZXJlIGlzIG5vIHdheSB0byBhYm9ydCB0aGUgY29tbWFuZCB0aGF0IGlzIGN1cnJlbnRseSAKLSAqIAkgY29ubmVjdGVkLCB5b3UgaGF2ZSB0byB3YWl0IGZvciBpdCB0byBjb21wbGV0ZS4gIElmIHRoaXMgaXMgCi0gKgkgYSBwcm9ibGVtLCB3ZSBjb3VsZCBpbXBsZW1lbnQgbG9uZ2ptcCgpIC8gc2V0am1wKCksIHNldGptcCgpCi0gKiAJIGNhbGxlZCB3aGVyZSB0aGUgbG9vcCBzdGFydGVkIGluIE5DUjUzODBfbWFpbigpLgotICovCi0KLXN0YXRpYyBpbnQgTkNSNTM4MF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0gICAgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBjbWQtPmRldmljZS0+aG9zdDsKLSAgICBTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7Ci0gICAgc3RydWN0IHNjc2lfY21uZCAqdG1wLCAqKnByZXY7Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQotICAgIHByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBhYm9ydGluZyBjb21tYW5kXG4iLCBIT1NUTk8pOwotICAgIHNjc2lfcHJpbnRfY29tbWFuZChjbWQpOwotCi0gICAgTkNSNTM4MF9wcmludF9zdGF0dXMgKGluc3RhbmNlKTsKLQotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICAKLSAgICBkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogYWJvcnQgY2FsbGVkIGJhc3IgMHglMDJ4LCBzciAweCUwMnhcbiIsIEhPU1ROTywKLQkJTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRyksCi0JCU5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSk7Ci0KLSNpZiAxCi0vKiAKLSAqIENhc2UgMSA6IElmIHRoZSBjb21tYW5kIGlzIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbW1hbmQsIAotICogd2UnbGwgc2V0IHRoZSBhYm9ydGVkIGZsYWcgYW5kIHJldHVybiBjb250cm9sIHNvIHRoYXQgCi0gKiBpbmZvcm1hdGlvbiB0cmFuc2ZlciByb3V0aW5lIGNhbiBleGl0IGNsZWFubHkuCi0gKi8KLQotICAgIGlmIChob3N0ZGF0YS0+Y29ubmVjdGVkID09IGNtZCkgewotCi0JZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IGFib3J0aW5nIGNvbm5lY3RlZCBjb21tYW5kXG4iLCBIT1NUTk8pOwotLyoKLSAqIFdlIHNob3VsZCBwZXJmb3JtIEJTWSBjaGVja2luZywgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IHNsaXBwZWQKLSAqIGludG8gQlVTIEZSRUUuCi0gKi8KLQotLyoJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9BU1NFUlRfQVROKTsgKi8KLS8qIAotICogU2luY2Ugd2UgY2FuJ3QgY2hhbmdlIHBoYXNlcyB1bnRpbCB3ZSd2ZSBjb21wbGV0ZWQgdGhlIGN1cnJlbnQgCi0gKiBoYW5kc2hha2UsIHdlIGhhdmUgdG8gc291cmNlIG9yIHNpbmsgYSBieXRlIG9mIGRhdGEgaWYgdGhlIGN1cnJlbnQKLSAqIHBoYXNlIGlzIG5vdCBNU0dPVVQuCi0gKi8KLQotLyogCi0gKiBSZXR1cm4gY29udHJvbCB0byB0aGUgZXhlY3V0aW5nIE5DUiBkcml2ZSBzbyB3ZSBjYW4gY2xlYXIgdGhlCi0gKiBhYm9ydGVkIGZsYWcgYW5kIGdldCBiYWNrIGludG8gb3VyIG1haW4gbG9vcC4KLSAqLyAKLQotCWlmIChkb19hYm9ydChpbnN0YW5jZSkgPT0gMCkgewotCSAgaG9zdGRhdGEtPmFib3J0ZWQgPSAxOwotCSAgaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7Ci0JICBjbWQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKLSNpZmRlZiBTVVBQT1JUX1RBR1MKLQkgIGNtZF9mcmVlX3RhZyggY21kICk7Ci0jZWxzZQotCSAgaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmPSB+KDEgPDwgY21kLT5kZXZpY2UtPmx1bik7Ci0jZW5kaWYKLQkgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkgIGNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JICByZXR1cm4gU1VDQ0VTUzsKLQl9IGVsc2UgewotLyoJICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7ICovCi0JICBwcmludGsoInNjc2klZDogYWJvcnQgb2YgY29ubmVjdGVkIGNvbW1hbmQgZmFpbGVkIVxuIiwgSE9TVE5PKTsKLQkgIHJldHVybiBGQUlMRUQ7Ci0JfSAKLSAgIH0KLSNlbmRpZgotCi0vKiAKLSAqIENhc2UgMiA6IElmIHRoZSBjb21tYW5kIGhhc24ndCBiZWVuIGlzc3VlZCB5ZXQsIHdlIHNpbXBseSByZW1vdmUgaXQgCi0gKiAJICAgIGZyb20gdGhlIGlzc3VlIHF1ZXVlLgotICovCi0gICAgZm9yIChwcmV2ID0gKHN0cnVjdCBzY3NpX2NtbmQgKiopICYoaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKSwKLQl0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWU7Ci0JdG1wOyBwcmV2ID0gTkVYVEFERFIodG1wKSwgdG1wID0gTkVYVCh0bXApKQotCWlmIChjbWQgPT0gdG1wKSB7Ci0JICAgIFJFTU9WRSg1LCAqcHJldiwgdG1wLCBORVhUKHRtcCkpOwotCSAgICAoKnByZXYpID0gTkVYVCh0bXApOwotCSAgICBTRVRfTkVYVCh0bXAsIE5VTEwpOwotCSAgICB0bXAtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKLQkgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCSAgICBkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogYWJvcnQgcmVtb3ZlZCBjb21tYW5kIGZyb20gaXNzdWUgcXVldWUuXG4iLAotCQkJSE9TVE5PKTsKLQkgICAgLyogVGFnZ2VkIHF1ZXVpbmcgbm90ZTogbm8gdGFnIHRvIGZyZWUgaGVyZSwgaGFzbid0IGJlZW4gYXNzaWduZWQKLQkgICAgICogeWV0Li4uICovCi0JICAgIHRtcC0+c2NzaV9kb25lKHRtcCk7Ci0JICAgIHJldHVybiBTVUNDRVNTOwotCX0KLQotLyogCi0gKiBDYXNlIDMgOiBJZiBhbnkgY29tbWFuZHMgYXJlIGNvbm5lY3RlZCwgd2UncmUgZ29pbmcgdG8gZmFpbCB0aGUgYWJvcnQKLSAqCSAgICBhbmQgbGV0IHRoZSBoaWdoIGxldmVsIFNDU0kgZHJpdmVyIHJldHJ5IGF0IGEgbGF0ZXIgdGltZSBvciAKLSAqCSAgICBpc3N1ZSBhIHJlc2V0LgotICoKLSAqCSAgICBUaW1lb3V0cywgYW5kIHRoZXJlZm9yZSBhYm9ydGVkIGNvbW1hbmRzLCB3aWxsIGJlIGhpZ2hseSB1bmxpa2VseQotICogICAgICAgICAgYW5kIGhhbmRsaW5nIHRoZW0gY2xlYW5seSBpbiB0aGlzIHNpdHVhdGlvbiB3b3VsZCBtYWtlIHRoZSBjb21tb24KLSAqCSAgICBjYXNlIG9mIG5vcmVzZXRzIGxlc3MgZWZmaWNpZW50LCBhbmQgd291bGQgcG9sbHV0ZSBvdXIgY29kZS4gIFNvLAotICoJICAgIHdlIGZhaWwuCi0gKi8KLQotICAgIGlmIChob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiBhYm9ydCBmYWlsZWQsIGNvbW1hbmQgY29ubmVjdGVkLlxuIiwgSE9TVE5PKTsKLSAgICAgICAgcmV0dXJuIEZBSUxFRDsKLSAgICB9Ci0KLS8qCi0gKiBDYXNlIDQ6IElmIHRoZSBjb21tYW5kIGlzIGN1cnJlbnRseSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgYnVzLCBhbmQgCi0gKiAJdGhlcmUgYXJlIG5vIGNvbm5lY3RlZCBjb21tYW5kcywgd2UgcmVjb25uZWN0IHRoZSBJX1RfTCBvciAKLSAqCUlfVF9MX1EgbmV4dXMgYXNzb2NpYXRlZCB3aXRoIGl0LCBnbyBpbnRvIG1lc3NhZ2Ugb3V0LCBhbmQgc2VuZCAKLSAqICAgICAgYW4gYWJvcnQgbWVzc2FnZS4KLSAqCi0gKiBUaGlzIGNhc2UgaXMgZXNwZWNpYWxseSB1Z2x5LiBJbiBvcmRlciB0byByZWVzdGFibGlzaCB0aGUgbmV4dXMsIHdlCi0gKiBuZWVkIHRvIGNhbGwgTkNSNTM4MF9zZWxlY3QoKS4gIFRoZSBlYXNpZXN0IHdheSB0byBpbXBsZW1lbnQgdGhpcyAKLSAqIGZ1bmN0aW9uIHdhcyB0byBhYm9ydCBpZiB0aGUgYnVzIHdhcyBidXN5LCBhbmQgbGV0IHRoZSBpbnRlcnJ1cHQKLSAqIGhhbmRsZXIgdHJpZ2dlcmVkIG9uIHRoZSBTRUwgZm9yIHJlc2VsZWN0IHRha2UgY2FyZSBvZiBsb3N0IGFyYml0cmF0aW9ucwotICogd2hlcmUgbmVjZXNzYXJ5LCBtZWFuaW5nIGludGVycnVwdHMgbmVlZCB0byBiZSBlbmFibGVkLgotICoKLSAqIFdoZW4gaW50ZXJydXB0cyBhcmUgZW5hYmxlZCwgdGhlIHF1ZXVlcyBtYXkgY2hhbmdlIC0gc28gd2UgCi0gKiBjYW4ndCByZW1vdmUgaXQgZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlIGJlZm9yZSBzZWxlY3RpbmcgaXQKLSAqIGJlY2F1c2UgdGhhdCBjb3VsZCBjYXVzZSBhIGZhaWx1cmUgaW4gaGFzaGluZyB0aGUgbmV4dXMgaWYgdGhhdCAKLSAqIGRldmljZSByZXNlbGVjdGVkLgotICogCi0gKiBTaW5jZSB0aGUgcXVldWVzIG1heSBjaGFuZ2UsIHdlIGNhbid0IHVzZSB0aGUgcG9pbnRlcnMgZnJvbSB3aGVuIHdlCi0gKiBmaXJzdCBsb2NhdGUgaXQuCi0gKgotICogU28sIHdlIG11c3QgZmlyc3QgbG9jYXRlIHRoZSBjb21tYW5kLCBhbmQgaWYgTkNSNTM4MF9zZWxlY3QoKQotICogc3VjY2VlZHMsIHRoZW4gaXNzdWUgdGhlIGFib3J0LCByZWxvY2F0ZSB0aGUgY29tbWFuZCBhbmQgcmVtb3ZlCi0gKiBpdCBmcm9tIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUuCi0gKi8KLQotICAgIGZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgdG1wOwotCSB0bXAgPSBORVhUKHRtcCkpIAotICAgICAgICBpZiAoY21kID09IHRtcCkgewotICAgICAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCSAgICBkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogYWJvcnRpbmcgZGlzY29ubmVjdGVkIGNvbW1hbmQuXG4iLCBIT1NUTk8pOwotICAKLSAgICAgICAgICAgIGlmIChOQ1I1MzgwX3NlbGVjdCAoaW5zdGFuY2UsIGNtZCwgKGludCkgY21kLT50YWcpKSAKLQkJcmV0dXJuIEZBSUxFRDsKLQotCSAgICBkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogbmV4dXMgcmVlc3RhYmxpc2hlZC5cbiIsIEhPU1ROTyk7Ci0KLQkgICAgZG9fYWJvcnQgKGluc3RhbmNlKTsKLQotCSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JICAgIGZvciAocHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSAmKGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUpLAotCQl0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOwotCQl0bXA7IHByZXYgPSBORVhUQUREUih0bXApLCB0bXAgPSBORVhUKHRtcCkgKQotCQkgICAgaWYgKGNtZCA9PSB0bXApIHsKLQkJICAgIFJFTU9WRSg1LCAqcHJldiwgdG1wLCBORVhUKHRtcCkpOwotCQkgICAgKnByZXYgPSBORVhUKHRtcCk7Ci0JCSAgICBTRVRfTkVYVCh0bXAsIE5VTEwpOwotCQkgICAgdG1wLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7Ci0JCSAgICAvKiBXZSBtdXN0IHVubG9jayB0aGUgdGFnL0xVTiBpbW1lZGlhdGVseSBoZXJlLCBzaW5jZSB0aGUKLQkJICAgICAqIHRhcmdldCBnb2VzIHRvIEJVUyBGUkVFIGFuZCBkb2Vzbid0IHNlbmQgdXMgYW5vdGhlcgotCQkgICAgICogbWVzc2FnZSAoQ09NTUFORF9DT01QTEVURSBvciB0aGUgbGlrZSkKLQkJICAgICAqLwotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkgICAgY21kX2ZyZWVfdGFnKCB0bXAgKTsKLSNlbHNlCi0JCSAgICBob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICY9IH4oMSA8PCBjbWQtPmRldmljZS0+bHVuKTsKLSNlbmRpZgotCQkgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkgICAgdG1wLT5zY3NpX2RvbmUodG1wKTsKLQkJICAgIHJldHVybiBTVUNDRVNTOwotCQl9Ci0JfQotCi0vKgotICogQ2FzZSA1IDogSWYgd2UgcmVhY2hlZCB0aGlzIHBvaW50LCB0aGUgY29tbWFuZCB3YXMgbm90IGZvdW5kIGluIGFueSBvZiAKLSAqCSAgICB0aGUgcXVldWVzLgotICoKLSAqIFdlIHByb2JhYmx5IHJlYWNoZWQgdGhpcyBwb2ludCBiZWNhdXNlIG9mIGFuIHVubGlrZWx5IHJhY2UgY29uZGl0aW9uCi0gKiBiZXR3ZWVuIHRoZSBjb21tYW5kIGNvbXBsZXRpbmcgc3VjY2Vzc2Z1bGx5IGFuZCB0aGUgYWJvcnRpb24gY29kZSwKLSAqIHNvIHdlIHdvbid0IHBhbmljLCBidXQgd2Ugd2lsbCBub3RpZnkgdGhlIHVzZXIgaW4gY2FzZSBzb21ldGhpbmcgcmVhbGx5Ci0gKiBicm9rZS4KLSAqLwotCi0gICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotICAgIHByaW50ayhLRVJOX0lORk8gInNjc2klZDogd2FybmluZyA6IFNDU0kgY29tbWFuZCBwcm9iYWJseSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGJlZm9yZSBhYm9ydGlvblxuIiwgSE9TVE5PKTsgCi0KLSAgICByZXR1cm4gRkFJTEVEOwotfQotCi0KLS8qIAotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQotICogCi0gKiBQdXJwb3NlIDogcmVzZXQgdGhlIFNDU0kgYnVzLgotICoKLSAqIFJldHVybnMgOiBTVUNDRVNTIG9yIEZBSUxVUkUKLSAqCi0gKi8gCi0KLXN0YXRpYyBpbnQgTkNSNTM4MF9idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotICAgIFNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKLSAgICBpbnQgICAgICAgICAgIGk7Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSNpZiBkZWZpbmVkKFJFU0VUX1JVTl9ET05FKQotICAgIHN0cnVjdCBzY3NpX2NtbmQgKmNvbm5lY3RlZCwgKmRpc2Nvbm5lY3RlZF9xdWV1ZTsKLSNlbmRpZgotCi0KLSAgICBOQ1I1MzgwX3ByaW50X3N0YXR1cyAoY21kLT5kZXZpY2UtPmhvc3QpOwotCi0gICAgLyogZ2V0IGluIHBoYXNlICovCi0gICAgTkNSNTM4MF93cml0ZSggVEFSR0VUX0NPTU1BTkRfUkVHLAotCQkgICBQSEFTRV9TUl9UT19UQ1IoIE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSApKTsKLSAgICAvKiBhc3NlcnQgUlNUICovCi0gICAgTkNSNTM4MF93cml0ZSggSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfUlNUICk7Ci0gICAgdWRlbGF5ICg0MCk7Ci0gICAgLyogcmVzZXQgTkNSIHJlZ2lzdGVycyAqLwotICAgIE5DUjUzODBfd3JpdGUoIElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgKTsKLSAgICBOQ1I1MzgwX3dyaXRlKCBNT0RFX1JFRywgTVJfQkFTRSApOwotICAgIE5DUjUzODBfd3JpdGUoIFRBUkdFVF9DT01NQU5EX1JFRywgMCApOwotICAgIE5DUjUzODBfd3JpdGUoIFNFTEVDVF9FTkFCTEVfUkVHLCAwICk7Ci0gICAgLyogKytyb21hbjogcmVzZXQgaW50ZXJydXB0IGNvbmRpdGlvbiEgb3RoZXJ3aXNlIG5vIGludGVycnVwdHMgZG9uJ3QgZ2V0Ci0gICAgICogdGhyb3VnaCBhbnltb3JlIC4uLiAqLwotICAgICh2b2lkKU5DUjUzODBfcmVhZCggUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcgKTsKLQotCS8qIE1TY2ggMjAxNDAxMTUgLSBsb29raW5nIGF0IHRoZSBnZW5lcmljIE5DUjUzODAgZHJpdmVyLCBhbGwgb2YgdGhpcwotCSAqIHNob3VsZCBnby4KLQkgKiBDYXRjaC0yMjogaWYgd2UgZG9uJ3QgY2xlYXIgYWxsIHF1ZXVlcywgdGhlIFNDU0kgZHJpdmVyIGxvY2sgd2lsbAotCSAqIG5vdCBiZSByZWxlYXNlZCBieSBhdGFyaV9zY3NpX3Jlc2V0KCkhCi0JICovCi0KLSNpZiBkZWZpbmVkKFJFU0VUX1JVTl9ET05FKQotCS8qIFhYWCBTaG91bGQgbm93IGJlIGRvbmUgYnkgbWlkbGV2ZWwgY29kZSwgYnV0IGl0J3MgYnJva2VuIFhYWCAqLwotCS8qIFhYWCBzZWUgYmVsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhYWCAqLwotCi0gICAgLyogTVNjaDogb2xkLXN0eWxlIHJlc2V0OiBhY3R1YWxseSBhYm9ydCBhbGwgY29tbWFuZCBwcm9jZXNzaW5nIGhlcmUgKi8KLQotICAgIC8qIEFmdGVyIHRoZSByZXNldCwgdGhlcmUgYXJlIG5vIG1vcmUgY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZCBjb21tYW5kcwotICAgICAqIGFuZCBubyBidXN5IHVuaXRzOyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHJlLWluc2VydGluZyB0aGUgY29tbWFuZHMKLSAgICAgKiBpbnRvIHRoZSBpc3N1ZV9xdWV1ZSAodmlhIHNjc2lfZG9uZSgpKSwgdGhlIGFib3J0ZWQgY29tbWFuZHMgYXJlCi0gICAgICogcmVtZW1iZXJlZCBpbiBsb2NhbCB2YXJpYWJsZXMgZmlyc3QuCi0gICAgICovCi0gICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotICAgIGNvbm5lY3RlZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaG9zdGRhdGEtPmNvbm5lY3RlZDsKLSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLSAgICBkaXNjb25uZWN0ZWRfcXVldWUgPSAoc3RydWN0IHNjc2lfY21uZCAqKWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7Ci0gICAgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSA9IE5VTEw7Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0gICAgZnJlZV9hbGxfdGFncygpOwotI2VuZGlmCi0gICAgZm9yKCBpID0gMDsgaSA8IDg7ICsraSApCi0JaG9zdGRhdGEtPmJ1c3lbaV0gPSAwOwotI2lmZGVmIFJFQUxfRE1BCi0gICAgaG9zdGRhdGEtPmRtYV9sZW4gPSAwOwotI2VuZGlmCi0gICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0gICAgLyogSW4gb3JkZXIgdG8gdGVsbCB0aGUgbWlkLWxldmVsIGNvZGUgd2hpY2ggY29tbWFuZHMgd2VyZSBhYm9ydGVkLCAKLSAgICAgKiBzZXQgdGhlIGNvbW1hbmQgc3RhdHVzIHRvIERJRF9SRVNFVCBhbmQgY2FsbCBzY3NpX2RvbmUoKSAhISEKLSAgICAgKiBUaGlzIHVsdGltYXRlbHkgYWJvcnRzIHByb2Nlc3Npbmcgb2YgdGhlc2UgY29tbWFuZHMgaW4gdGhlIG1pZC1sZXZlbC4KLSAgICAgKi8KLQotICAgIGlmICgoY21kID0gY29ubmVjdGVkKSkgewotCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiByZXNldCBhYm9ydGVkIGEgY29ubmVjdGVkIGNvbW1hbmRcbiIsIEhfTk8oY21kKSk7Ci0JY21kLT5yZXN1bHQgPSAoY21kLT5yZXN1bHQgJiAweGZmZmYpIHwgKERJRF9SRVNFVCA8PCAxNik7Ci0JY21kLT5zY3NpX2RvbmUoIGNtZCApOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IChjbWQgPSBkaXNjb25uZWN0ZWRfcXVldWUpOyArK2kpIHsKLQlkaXNjb25uZWN0ZWRfcXVldWUgPSBORVhUKGNtZCk7Ci0JU0VUX05FWFQoY21kLCBOVUxMKTsKLQljbWQtPnJlc3VsdCA9IChjbWQtPnJlc3VsdCAmIDB4ZmZmZikgfCAoRElEX1JFU0VUIDw8IDE2KTsKLQljbWQtPnNjc2lfZG9uZSggY21kICk7Ci0gICAgfQotICAgIGlmIChpID4gMCkKLQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2k6IHJlc2V0IGFib3J0ZWQgJWQgZGlzY29ubmVjdGVkIGNvbW1hbmQocylcbiIsIGkpOwotCi0KLSAgICAvKiBzaW5jZSBhbGwgY29tbWFuZHMgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgdGVybWluYXRlZCwgd2UgbmVlZCB0byB0ZWxsCi0gICAgICogdGhlIG1pZGxldmVsIGNvZGUgdGhhdCB0aGUgcmVzZXQgd2FzIFNVQ0NFU1NGVUwsIGFuZCB0aGVyZSBpcyBubyAKLSAgICAgKiBuZWVkIHRvICd3YWtlIHVwJyB0aGUgY29tbWFuZHMgYnkgYSByZXF1ZXN0X3NlbnNlCi0gICAgICovCi0gICAgcmV0dXJuIFNVQ0NFU1M7Ci0jZWxzZSAvKiAxICovCi0KLSAgICAvKiBNU2NoOiBuZXctc3R5bGUgcmVzZXQgaGFuZGxpbmc6IGxldCB0aGUgbWlkLWxldmVsIGRvIHdoYXQgaXQgY2FuICovCi0KLSAgICAvKiArK2d1ZW50aGVyOiBNSUQtTEVWRUwgSVMgU1RJTEwgQlJPS0VOLgotICAgICAqIE1pZC1sZXZlbCBpcyBzdXBwb3NlZCB0byByZXF1ZXVlIGFsbCBjb21tYW5kcyB0aGF0IHdlcmUgYWN0aXZlIG9uIHRoZQotICAgICAqIHZhcmlvdXMgbG93LWxldmVsIHF1ZXVlcy4gSW4gZmFjdCBpdCBkb2VzIHRoaXMsIGJ1dCB0aGF0J3Mgbm90IGVub3VnaAotICAgICAqIGJlY2F1c2UgYWxsIHRoZXNlIGNvbW1hbmRzIGFyZSBzdWJqZWN0IHRvIHRpbWVvdXQuIEFuZCBpZiBhIHRpbWVvdXQKLSAgICAgKiBoYXBwZW5zIGZvciBhbnkgcmVtb3ZlZCBjb21tYW5kLCAqX2Fib3J0KCkgaXMgY2FsbGVkIGJ1dCBhbGwgcXVldWVzCi0gICAgICogYXJlIG5vdyBlbXB0eS4gQWJvcnQgdGhlbiBnaXZlcyB1cCB0aGUgZmFsY29uIGxvY2ssIHdoaWNoIGlzIGZhdGFsLAotICAgICAqIHNpbmNlIHRoZSBtaWQtbGV2ZWwgd2lsbCBxdWV1ZSBtb3JlIGNvbW1hbmRzIGFuZCBtdXN0IGhhdmUgdGhlIGxvY2sKLSAgICAgKiAoaXQncyBhbGwgaGFwcGVuaW5nIGluc2lkZSB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlciEhKS4KLSAgICAgKiBFdmVuIHdvcnNlLCBhYm9ydCB3aWxsIHJldHVybiBOT1RfUlVOTklORyBmb3IgYWxsIHRob3NlIGNvbW1hbmRzIG5vdAotICAgICAqIG9uIGFueSBxdWV1ZSwgc28gdGhleSB3b24ndCBiZSByZXRyaWVkIC4uLgotICAgICAqCi0gICAgICogQ29uY2x1c2lvbjogZWl0aGVyIHNjc2kuYyBkaXNhYmxlcyB0aW1lb3V0IGZvciBhbGwgcmVzZXR0ZWQgY29tbWFuZHMKLSAgICAgKiBpbW1lZGlhdGVseSwgb3Igd2UgbG9zZSEgIEFzIG9mIGxpbnV4LTIuMC4yMCBpdCBkb2Vzbid0LgotICAgICAqLwotCi0gICAgLyogQWZ0ZXIgdGhlIHJlc2V0LCB0aGVyZSBhcmUgbm8gbW9yZSBjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkIGNvbW1hbmRzCi0gICAgICogYW5kIG5vIGJ1c3kgdW5pdHM7IHNvIGNsZWFyIHRoZSBsb3ctbGV2ZWwgc3RhdHVzIGhlcmUgdG8gYXZvaWQgCi0gICAgICogY29uZmxpY3RzIHdoZW4gdGhlIG1pZC1sZXZlbCBjb2RlIHRyaWVzIHRvIHdha2UgdXAgdGhlIGFmZmVjdGVkIAotICAgICAqIGNvbW1hbmRzIQotICAgICAqLwotCi0gICAgaWYgKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSkKLQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogcmVzZXQgYWJvcnRlZCBpc3N1ZWQgY29tbWFuZChzKVxuIiwgSF9OTyhjbWQpKTsKLSAgICBpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCkgCi0JZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IHJlc2V0IGFib3J0ZWQgYSBjb25uZWN0ZWQgY29tbWFuZFxuIiwgSF9OTyhjbWQpKTsKLSAgICBpZiAoaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSkKLQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogcmVzZXQgYWJvcnRlZCBkaXNjb25uZWN0ZWQgY29tbWFuZChzKVxuIiwgSF9OTyhjbWQpKTsKLQotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICBob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBOVUxMOwotICAgIGhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwotICAgIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBOVUxMOwotI2lmZGVmIFNVUFBPUlRfVEFHUwotICAgIGZyZWVfYWxsX3RhZ3MoKTsKLSNlbmRpZgotICAgIGZvciggaSA9IDA7IGkgPCA4OyArK2kgKQotCWhvc3RkYXRhLT5idXN5W2ldID0gMDsKLSNpZmRlZiBSRUFMX0RNQQotICAgIGhvc3RkYXRhLT5kbWFfbGVuID0gMDsKLSNlbmRpZgotICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotICAgIC8qIHdlIGRpZCBubyBjb21wbGV0ZSByZXNldCBvZiBhbGwgY29tbWFuZHMsIHNvIGEgd2FrZXVwIGlzIHJlcXVpcmVkICovCi0gICAgcmV0dXJuIFNVQ0NFU1M7Ci0jZW5kaWYgLyogMSAqLwotfQotCi0vKiBMb2NhbCBWYXJpYWJsZXM6ICovCi0vKiB0YWItd2lkdGg6IDggICAgICovCi0vKiBFbmQ6ICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMKaW5kZXggOTcwN2I3NC4uMmE5MDZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuYwpAQCAtMjAsOTAgKzIwLDU5IEBACiAgKiBHZW5lcmljIEdlbmVyaWMgTkNSNTM4MCBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgMTk5NSwgUnVzc2VsbCBLaW5nCi0gKgotICogQUxQSEEgUkVMRUFTRSAxLgotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAogICovCiAKLQotLyoKLSAqIFRoaXMgaXMgZnJvbSBtYWNfc2NzaS5oLCBidXQgaGV5LCBtYXliZSB0aGlzIGlzIHVzZWZ1bCBmb3IgU3VuMyB0b28hIDopCi0gKgotICogT3B0aW9ucyA6Ci0gKgotICogUEFSSVRZIC0gZW5hYmxlIHBhcml0eSBjaGVja2luZy4gIE5vdCBzdXBwb3J0ZWQuCi0gKgotICogU0NTSTIgLSBlbmFibGUgc3VwcG9ydCBmb3IgU0NTSS1JSSB0YWdnZWQgcXVldWVpbmcuICBVbnRlc3RlZC4KLSAqCi0gKiBVU0xFRVAgLSBlbmFibGUgc3VwcG9ydCBmb3IgZGV2aWNlcyB0aGF0IGRvbid0IGRpc2Nvbm5lY3QuICBVbnRlc3RlZC4KLSAqLwotCi0jZGVmaW5lIEFVVE9TRU5TRQotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9zdW4zaW50cy5oPgogI2luY2x1ZGUgPGFzbS9kdm1hLmg+Ci0jaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoaW5lcy5oPgogCi0vKiBkbWEgb24hICovCi0jZGVmaW5lIFJFQUxfRE1BCi0KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlICJzdW4zX3Njc2kuaCIKKworLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBjb3JlIE5DUjUzODAgZHJpdmVyLiAqLworCisjZGVmaW5lIFJFQUxfRE1BCisvKiAjZGVmaW5lIFNVUFBPUlRfVEFHUyAqLworLyogbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gZG8gZG1hIG9uICovCisjZGVmaW5lIERNQV9NSU5fU0laRSAgICAgICAgICAgICAgICAgICAgMTI5CisKKy8qICNkZWZpbmUgTUFYX1RBR1MgICAgICAgICAgICAgICAgICAgICAzMiAqLworCisjZGVmaW5lIE5DUjUzODBfaW1wbGVtZW50YXRpb25fZmllbGRzICAgLyogbm9uZSAqLworCisjZGVmaW5lIE5DUjUzODBfcmVhZChyZWcpICAgICAgICAgICAgICAgc3VuM3Njc2lfcmVhZChyZWcpCisjZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkgICAgICAgc3VuM3Njc2lfd3JpdGUocmVnLCB2YWx1ZSkKKworI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgICAgICAgICAgIHN1bjNzY3NpX3F1ZXVlX2NvbW1hbmQKKyNkZWZpbmUgTkNSNTM4MF9idXNfcmVzZXQgICAgICAgICAgICAgICBzdW4zc2NzaV9idXNfcmVzZXQKKyNkZWZpbmUgTkNSNTM4MF9hYm9ydCAgICAgICAgICAgICAgICAgICBzdW4zc2NzaV9hYm9ydAorI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyAgICAgICAgICAgICAgIHN1bjNzY3NpX3Nob3dfaW5mbworI2RlZmluZSBOQ1I1MzgwX2luZm8gICAgICAgICAgICAgICAgICAgIHN1bjNzY3NpX2luZm8KKworI2RlZmluZSBOQ1I1MzgwX2RtYV9yZWFkX3NldHVwKGluc3RhbmNlLCBkYXRhLCBjb3VudCkgXAorICAgICAgICBzdW4zc2NzaV9kbWFfc2V0dXAoZGF0YSwgY291bnQsIDApCisjZGVmaW5lIE5DUjUzODBfZG1hX3dyaXRlX3NldHVwKGluc3RhbmNlLCBkYXRhLCBjb3VudCkgXAorICAgICAgICBzdW4zc2NzaV9kbWFfc2V0dXAoZGF0YSwgY291bnQsIDEpCisjZGVmaW5lIE5DUjUzODBfZG1hX3Jlc2lkdWFsKGluc3RhbmNlKSBcCisgICAgICAgIHN1bjNzY3NpX2RtYV9yZXNpZHVhbChpbnN0YW5jZSkKKyNkZWZpbmUgTkNSNTM4MF9kbWFfeGZlcl9sZW4oaW5zdGFuY2UsIGNtZCwgcGhhc2UpIFwKKyAgICAgICAgc3VuM3Njc2lfZG1hX3hmZXJfbGVuKGNtZC0+U0NwLnRoaXNfcmVzaWR1YWwsIGNtZCwgISgocGhhc2UpICYgU1JfSU8pKQorCisjZGVmaW5lIE5DUjUzODBfYWNxdWlyZV9kbWFfaXJxKGluc3RhbmNlKSAgICAoMSkKKyNkZWZpbmUgTkNSNTM4MF9yZWxlYXNlX2RtYV9pcnEoaW5zdGFuY2UpCisKICNpbmNsdWRlICJOQ1I1MzgwLmgiCiAKKwogZXh0ZXJuIGludCBzdW4zX21hcF90ZXN0KHVuc2lnbmVkIGxvbmcsIGNoYXIgKik7CiAKLSNkZWZpbmUgVVNFX1dSQVBQRVIKLS8qI2RlZmluZSBSRVNFVF9CT09UICovCi0jZGVmaW5lIERSSVZFUl9TRVRVUAotCi0vKgotICogQlVHIGNhbiBiZSB1c2VkIHRvIHRyaWdnZXIgYSBzdHJhbmdlIGNvZGUtc2l6ZSByZWxhdGVkIGhhbmcgb24gMi4xIGtlcm5lbHMKLSAqLwotI2lmZGVmIEJVRwotI3VuZGVmIFJFU0VUX0JPT1QKLSN1bmRlZiBEUklWRVJfU0VUVVAKLSNlbmRpZgotCi0vKiAjZGVmaW5lIFNVUFBPUlRfVEFHUyAqLwotCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotI2RlZmluZSBFTkFCTEVfSVJRKCkKLSNlbHNlCi0jZGVmaW5lCUVOQUJMRV9JUlEoKQllbmFibGVfaXJxKCBJUlFfU1VOM19TQ1NJICk7IAotI2VuZGlmCi0KLQotc3RhdGljIGlycXJldHVybl90IHNjc2lfc3VuM19pbnRyKGludCBpcnEsIHZvaWQgKmR1bW15KTsKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBzdW4zc2NzaV9yZWFkKGludCByZWcpOwotc3RhdGljIGlubGluZSB2b2lkIHN1bjNzY3NpX3dyaXRlKGludCByZWcsIGludCB2YWx1ZSk7Ci0KIHN0YXRpYyBpbnQgc2V0dXBfY2FuX3F1ZXVlID0gLTE7CiBtb2R1bGVfcGFyYW0oc2V0dXBfY2FuX3F1ZXVlLCBpbnQsIDApOwogc3RhdGljIGludCBzZXR1cF9jbWRfcGVyX2x1biA9IC0xOwpAQCAtMTE3LDkgKzg2LDcgQEAKIHN0YXRpYyBpbnQgc2V0dXBfaG9zdGlkID0gLTE7CiBtb2R1bGVfcGFyYW0oc2V0dXBfaG9zdGlkLCBpbnQsIDApOwogCi1zdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqc3VuM19kbWFfc2V0dXBfZG9uZSA9IE5VTEw7Ci0KLSNkZWZpbmUJUkVTRVRfUlVOX0RPTkUKKy8qICNkZWZpbmUgUkVTRVRfQk9PVCAqLwogCiAjZGVmaW5lCUFGVEVSX1JFU0VUX0RFTEFZCShIWi8yKQogCkBAIC0xMjksMTggKzk2LDE1IEBACiAvKiBkdm1hIGJ1ZmZlciB0byBhbGxvY2F0ZSAtLSAzMmsgc2hvdWxkIGhvcGVmdWxseSBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCAqLwogI2RlZmluZSBTVU4zX0RWTUFfQlVGU0laRSAweGUwMDAKIAotLyogbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gZG8gZG1hIG9uICovCi0jZGVmaW5lIFNVTjNfRE1BX01JTlNJWkUgMTI4Ci0KLXN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpzdW4zX3Njc2lfcmVncDsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICpzdW4zX2RtYV9zZXR1cF9kb25lOworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnN1bjNfc2NzaV9yZWdwOwogc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBzdW4zX2RtYV9yZWdzICpkcmVnczsKLSNpZm5kZWYgU1VOM19TQ1NJX1ZNRQotc3RhdGljIHN0cnVjdCBzdW4zX3VkY19yZWdzICp1ZGNfcmVncyA9IE5VTEw7Ci0jZW5kaWYKK3N0YXRpYyBzdHJ1Y3Qgc3VuM191ZGNfcmVncyAqdWRjX3JlZ3M7CiBzdGF0aWMgdW5zaWduZWQgY2hhciAqc3VuM19kbWFfb3JpZ19hZGRyID0gTlVMTDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1bjNfZG1hX29yaWdfY291bnQgPSAwOwogc3RhdGljIGludCBzdW4zX2RtYV9hY3RpdmUgPSAwOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9yZXNpZHVhbCA9IDA7CitzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqZGVmYXVsdF9pbnN0YW5jZTsKIAogLyoKICAqIE5DUiA1MzgwIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMKQEAgLTE0OCwxMiArMTEyLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBzdW4zc2NzaV9yZWFkKGludCByZWcpCiB7Ci0JcmV0dXJuKCBzdW4zX3Njc2lfcmVncFtyZWddICk7CisJcmV0dXJuIGluXzgoc3VuM19zY3NpX3JlZ3AgKyByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3VuM3Njc2lfd3JpdGUoaW50IHJlZywgaW50IHZhbHVlKQogewotCXN1bjNfc2NzaV9yZWdwW3JlZ10gPSB2YWx1ZTsKKwlvdXRfOChzdW4zX3Njc2lfcmVncCArIHJlZywgdmFsdWUpOwogfQogCiAjaWZuZGVmIFNVTjNfU0NTSV9WTUUKQEAgLTE4MCwyMTMgKzE0NCwxMCBAQAogfQogI2VuZGlmCiAKLS8qCi0gKiBYWFg6IHN0YXR1cyBkZWJ1ZwotICovCi1zdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqZGVmYXVsdF9pbnN0YW5jZTsKLQotLyoKLSAqIEZ1bmN0aW9uIDogaW50IHN1bjNzY3NpX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKLSAqCi0gKiBQdXJwb3NlIDogaW5pdGlhbGl6ZXMgbWFjIE5DUjUzODAgZHJpdmVyIGJhc2VkIG9uIHRoZQotICoJY29tbWFuZCBsaW5lIC8gY29tcGlsZSB0aW1lIHBvcnQgYW5kIGlycSBkZWZpbml0aW9ucy4KLSAqCi0gKiBJbnB1dHMgOiB0cG50IC0gdGVtcGxhdGUgZm9yIHRoaXMgU0NTSSBhZGFwdGVyLgotICoKLSAqIFJldHVybnMgOiAxIGlmIGEgaG9zdCBhZGFwdGVyIHdhcyBmb3VuZCwgMCBpZiBub3QuCi0gKgotICovCi0gCi1zdGF0aWMgaW50IF9faW5pdCBzdW4zc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKLXsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciwgaXJxOwotCXN0YXRpYyBpbnQgY2FsbGVkID0gMDsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZTsKLSNpZmRlZiBTVU4zX1NDU0lfVk1FCi0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyc1szXSA9IHsgSU9CQVNFX1NVTjNfVk1FU0NTSSwKLQkJCQkgICBJT0JBU0VfU1VOM19WTUVTQ1NJICsgMHg0MDAwLAotCQkJCSAgIDAgfTsKLQl1bnNpZ25lZCBsb25nIHZlY3NbM10gPSB7IFNVTjNfVkVDX1ZNRVNDU0kwLAotCQkJCSAgU1VOM19WRUNfVk1FU0NTSTEsCi0JCQkJICAwIH07Ci0jZW5kaWYKLQotCS8qIGNoZWNrIHRoYXQgdGhpcyBtYWNoaW5lIGhhcyBhbiBvbmJvYXJkIDUzODAgKi8KLQlzd2l0Y2goaWRwcm9tLT5pZF9tYWNodHlwZSkgewotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQljYXNlIFNNX1NVTjN8U01fM18xNjA6Ci0JY2FzZSBTTV9TVU4zfFNNXzNfMjYwOgotCQlicmVhazsKLSNlbHNlCi0JY2FzZSBTTV9TVU4zfFNNXzNfNTA6Ci0JY2FzZSBTTV9TVU4zfFNNXzNfNjA6Ci0JCWJyZWFrOwotI2VuZGlmCi0KLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZihjYWxsZWQpCi0JCXJldHVybiAwOwotCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCXRwbnQtPnByb2NfbmFtZSA9ICJTdW4zIDUzODAgVk1FIFNDU0kiOwotI2Vsc2UKLQl0cG50LT5wcm9jX25hbWUgPSAiU3VuMyA1MzgwIFNDU0kiOwotI2VuZGlmCi0KLQkvKiBzZXR1cCB2YXJpYWJsZXMgKi8KLQl0cG50LT5jYW5fcXVldWUgPQotCQkoc2V0dXBfY2FuX3F1ZXVlID4gMCkgPyBzZXR1cF9jYW5fcXVldWUgOiBDQU5fUVVFVUU7Ci0JdHBudC0+Y21kX3Blcl9sdW4gPQotCQkoc2V0dXBfY21kX3Blcl9sdW4gPiAwKSA/IHNldHVwX2NtZF9wZXJfbHVuIDogQ01EX1BFUl9MVU47Ci0JdHBudC0+c2dfdGFibGVzaXplID0gCi0JCShzZXR1cF9zZ190YWJsZXNpemUgPj0gMCkgPyBzZXR1cF9zZ190YWJsZXNpemUgOiBTR19UQUJMRVNJWkU7Ci0KLQlpZiAoc2V0dXBfaG9zdGlkID49IDApCi0JCXRwbnQtPnRoaXNfaWQgPSBzZXR1cF9ob3N0aWQ7Ci0JZWxzZSB7Ci0JCS8qIHVzZSA3IGFzIGRlZmF1bHQgKi8KLQkJdHBudC0+dGhpc19pZCA9IDc7Ci0JfQotCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCWlvYWRkciA9IDA7Ci0JZm9yIChpID0gMDsgYWRkcnNbaV0gIT0gMDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGNoYXIgeDsKLQotCQlpb2FkZHIgPSAodW5zaWduZWQgbG9uZylzdW4zX2lvcmVtYXAoYWRkcnNbaV0sIFBBR0VfU0laRSwKLQkJCQkJCSAgICAgU1VOM19QQUdFX1RZUEVfVk1FMTYpOwotCQlpcnEgPSB2ZWNzW2ldOwotCQlzdW4zX3Njc2lfcmVncCA9ICh1bnNpZ25lZCBjaGFyICopaW9hZGRyOwotCi0JCWRyZWdzID0gKHN0cnVjdCBzdW4zX2RtYV9yZWdzICopKCgodW5zaWduZWQgY2hhciAqKWlvYWRkcikgKyA4KTsKLQotCQlpZiAoc3VuM19tYXBfdGVzdCgodW5zaWduZWQgbG9uZylkcmVncywgJngpKSB7Ci0JCQl1bnNpZ25lZCBzaG9ydCBvbGRjc3I7Ci0KLQkJCW9sZGNzciA9IGRyZWdzLT5jc3I7Ci0JCQlkcmVncy0+Y3NyID0gMDsKLQkJCXVkZWxheShTVU4zX0RNQV9ERUxBWSk7Ci0JCQlpZiAoZHJlZ3MtPmNzciA9PSAweDE0MDApCi0JCQkJYnJlYWs7Ci0KLQkJCWRyZWdzLT5jc3IgPSBvbGRjc3I7Ci0JCX0KLQotCQlpb3VubWFwKCh2b2lkICopaW9hZGRyKTsKLQkJaW9hZGRyID0gMDsKLQl9Ci0KLQlpZiAoIWlvYWRkcikKLQkJcmV0dXJuIDA7Ci0jZWxzZQotCWlycSA9IElSUV9TVU4zX1NDU0k7Ci0JaW9hZGRyID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChJT0JBU0VfU1VOM19TQ1NJLCBQQUdFX1NJWkUpOwotCXN1bjNfc2NzaV9yZWdwID0gKHVuc2lnbmVkIGNoYXIgKilpb2FkZHI7Ci0KLQlkcmVncyA9IChzdHJ1Y3Qgc3VuM19kbWFfcmVncyAqKSgoKHVuc2lnbmVkIGNoYXIgKilpb2FkZHIpICsgOCk7Ci0KLQlpZigodWRjX3JlZ3MgPSBkdm1hX21hbGxvYyhzaXplb2Yoc3RydWN0IHN1bjNfdWRjX3JlZ3MpKSkKLQkgICA9PSBOVUxMKSB7Ci0JICAgICBwcmludGsoIlNVTjMgU2NzaSBjb3VsZG4ndCBhbGxvY2F0ZSBEVk1BIG1lbW9yeSFcbiIpOwotCSAgICAgcmV0dXJuIDA7Ci0JfQotI2VuZGlmCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JaWYgKHNldHVwX3VzZV90YWdnZWRfcXVldWluZyA8IDApCi0JCXNldHVwX3VzZV90YWdnZWRfcXVldWluZyA9IFVTRV9UQUdHRURfUVVFVUlORzsKLSNlbmRpZgotCi0JaW5zdGFuY2UgPSBzY3NpX3JlZ2lzdGVyICh0cG50LCBzaXplb2Yoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEpKTsKLQlpZihpbnN0YW5jZSA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQkJCi0JZGVmYXVsdF9pbnN0YW5jZSA9IGluc3RhbmNlOwotCi0gICAgICAgIGluc3RhbmNlLT5pb19wb3J0ID0gKHVuc2lnbmVkIGxvbmcpIGlvYWRkcjsKLQlpbnN0YW5jZS0+aXJxID0gaXJxOwotCi0JTkNSNTM4MF9pbml0KGluc3RhbmNlLCAwKTsKLQotCWluc3RhbmNlLT5uX2lvX3BvcnQgPSAzMjsKLQotICAgICAgICAoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopaW5zdGFuY2UtPmhvc3RkYXRhKS0+Y3RybCA9IDA7Ci0KLQlpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgc2NzaV9zdW4zX2ludHIsCi0JCQkgICAgIDAsICJTdW4zU0NTSS01MzgwIiwgaW5zdGFuY2UpKSB7Ci0jaWZuZGVmIFJFQUxfRE1BCi0JCXByaW50aygic2NzaSVkOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwKLQkJICAgICAgIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKLQkJaW5zdGFuY2UtPmlycSA9IFNDU0lfSVJRX05PTkU7Ci0jZWxzZQotCQlwcmludGsoInNjc2klZDogSVJRJWQgbm90IGZyZWUsIGJhaWxpbmcgb3V0XG4iLAotCQkgICAgICAgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwotCQlyZXR1cm4gMDsKLSNlbmRpZgotCX0KLQkKLQlwcl9pbmZvKCJzY3NpJWQ6ICVzIGF0IHBvcnQgJWxYIGlycSIsIGluc3RhbmNlLT5ob3N0X25vLAotCQl0cG50LT5wcm9jX25hbWUsIGluc3RhbmNlLT5pb19wb3J0KTsKLQlpZiAoaW5zdGFuY2UtPmlycSA9PSBTQ1NJX0lSUV9OT05FKQotCQlwcmludGsgKCJzIGRpc2FibGVkIik7Ci0JZWxzZQotCQlwcmludGsgKCIgJWQiLCBpbnN0YW5jZS0+aXJxKTsKLQlwcmludGsoIiBvcHRpb25zIENBTl9RVUVVRT0lZCBDTURfUEVSX0xVTj0lZCByZWxlYXNlPSVkIiwKLQkgICAgICAgaW5zdGFuY2UtPmNhbl9xdWV1ZSwgaW5zdGFuY2UtPmNtZF9wZXJfbHVuLAotCSAgICAgICBTVU4zU0NTSV9QVUJMSUNfUkVMRUFTRSk7Ci0JcHJpbnRrKCJcbnNjc2klZDoiLCBpbnN0YW5jZS0+aG9zdF9ubyk7Ci0JTkNSNTM4MF9wcmludF9vcHRpb25zKGluc3RhbmNlKTsKLQlwcmludGsoIlxuIik7Ci0KLQlkcmVncy0+Y3NyID0gMDsKLQl1ZGVsYXkoU1VOM19ETUFfREVMQVkpOwotCWRyZWdzLT5jc3IgPSBDU1JfU0NTSSB8IENTUl9GSUZPIHwgQ1NSX0lOVFI7Ci0JdWRlbGF5KFNVTjNfRE1BX0RFTEFZKTsKLQlkcmVncy0+Zmlmb19jb3VudCA9IDA7Ci0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCWRyZWdzLT5maWZvX2NvdW50X2hpID0gMDsKLQlkcmVncy0+ZG1hX2FkZHJfaGkgPSAwOwotCWRyZWdzLT5kbWFfYWRkcl9sbyA9IDA7Ci0JZHJlZ3MtPmRtYV9jb3VudF9oaSA9IDA7Ci0JZHJlZ3MtPmRtYV9jb3VudF9sbyA9IDA7Ci0KLQlkcmVncy0+aXZlY3QgPSBWTUVfREFUQTI0IHwgKGluc3RhbmNlLT5pcnEgJiAweGZmKTsKLSNlbmRpZgotCi0JY2FsbGVkID0gMTsKLQogI2lmZGVmIFJFU0VUX0JPT1QKLQlzdW4zX3Njc2lfcmVzZXRfYm9vdChpbnN0YW5jZSk7Ci0jZW5kaWYKLQotCXJldHVybiAxOwotfQotCi1pbnQgc3VuM3Njc2lfcmVsZWFzZSAoc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCi17Ci0JaWYgKHNocG50LT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKLQkJZnJlZV9pcnEoc2hwbnQtPmlycSwgc2hwbnQpOwotCi0JaW91bm1hcCgodm9pZCAqKXN1bjNfc2NzaV9yZWdwKTsKLQotCU5DUjUzODBfZXhpdChzaHBudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBSRVNFVF9CT09UCi0vKgotICogT3VyICdidXMgcmVzZXQgb24gYm9vdCcgZnVuY3Rpb24KLSAqLwotCiBzdGF0aWMgdm9pZCBzdW4zX3Njc2lfcmVzZXRfYm9vdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAl1bnNpZ25lZCBsb25nIGVuZDsKLQotCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwotCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCQogCS8qCiAJICogRG8gYSBTQ1NJIHJlc2V0IHRvIGNsZWFuIHVwIHRoZSBidXMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBObwpAQCAtNDIyLDExICsxODMsNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyICpzdW4zc2NzaV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKnNwbnQpCi17Ci0gICAgcmV0dXJuICIiOwotfQotCiAvLyBzYWZlIGJpdHMgZm9yIHRoZSBDU1IKICNkZWZpbmUgQ1NSX0dPT0QgMHgwNjBmCiAKQEAgLTQ2OCw3ICsyMjQsNiBAQAogdm9pZCBzdW4zX3N1bjNfZGVidWcgKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKIAogCWlmIChkZWZhdWx0X2luc3RhbmNlKSB7CiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC03MzIsMjUgKzQ4NywyMDAgQEAKIAogfQogCQotI2luY2x1ZGUgInN1bjNfTkNSNTM4MC5jIgorI2luY2x1ZGUgImF0YXJpX05DUjUzODAuYyIKIAotc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworI2lmZGVmIFNVTjNfU0NTSV9WTUUKKyNkZWZpbmUgU1VOM19TQ1NJX05BTUUgICAgICAgICAgIlN1bjMgTkNSNTM4MCBWTUUgU0NTSSIKKyNkZWZpbmUgRFJWX01PRFVMRV9OQU1FICAgICAgICAgInN1bjNfc2NzaV92bWUiCisjZWxzZQorI2RlZmluZSBTVU4zX1NDU0lfTkFNRSAgICAgICAgICAiU3VuMyBOQ1I1MzgwIFNDU0kiCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAgICAgICAgICJzdW4zX3Njc2kiCisjZW5kaWYKKworI2RlZmluZSBQRlggICAgICAgICAgICAgICAgICAgICBEUlZfTU9EVUxFX05BTUUgIjogIgorCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzdW4zX3Njc2lfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCisJLnByb2NfbmFtZQkJPSBEUlZfTU9EVUxFX05BTUUsCiAJLnNob3dfaW5mbwkJPSBzdW4zc2NzaV9zaG93X2luZm8sCiAJLm5hbWUJCQk9IFNVTjNfU0NTSV9OQU1FLAotCS5kZXRlY3QJCQk9IHN1bjNzY3NpX2RldGVjdCwKLQkucmVsZWFzZQkJPSBzdW4zc2NzaV9yZWxlYXNlLAogCS5pbmZvCQkJPSBzdW4zc2NzaV9pbmZvLAogCS5xdWV1ZWNvbW1hbmQJCT0gc3VuM3Njc2lfcXVldWVfY29tbWFuZCwKIAkuZWhfYWJvcnRfaGFuZGxlciAgICAgIAk9IHN1bjNzY3NpX2Fib3J0LAogCS5laF9idXNfcmVzZXRfaGFuZGxlciAgCT0gc3VuM3Njc2lfYnVzX3Jlc2V0LAotCS5jYW5fcXVldWUJCT0gQ0FOX1FVRVVFLAorCS5jYW5fcXVldWUJCT0gMTYsCiAJLnRoaXNfaWQJCT0gNywKLQkuc2dfdGFibGVzaXplCQk9IFNHX1RBQkxFU0laRSwKLQkuY21kX3Blcl9sdW4JCT0gQ01EX1BFUl9MVU4sCisJLnNnX3RhYmxlc2l6ZQkJPSBTR19OT05FLAorCS5jbWRfcGVyX2x1bgkJPSAyLAogCS51c2VfY2x1c3RlcmluZwkJPSBESVNBQkxFX0NMVVNURVJJTkcKIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IHN1bjNfc2NzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOworCWludCBlcnJvcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlycSwgKm1lbTsKKwl1bnNpZ25lZCBjaGFyICppb2FkZHI7CisJaW50IGhvc3RfZmxhZ3MgPSAwOworI2lmZGVmIFNVTjNfU0NTSV9WTUUKKwlpbnQgaTsKKyNlbmRpZgogCi0jaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKKwlpZiAoc2V0dXBfY2FuX3F1ZXVlID4gMCkKKwkJc3VuM19zY3NpX3RlbXBsYXRlLmNhbl9xdWV1ZSA9IHNldHVwX2Nhbl9xdWV1ZTsKKwlpZiAoc2V0dXBfY21kX3Blcl9sdW4gPiAwKQorCQlzdW4zX3Njc2lfdGVtcGxhdGUuY21kX3Blcl9sdW4gPSBzZXR1cF9jbWRfcGVyX2x1bjsKKwlpZiAoc2V0dXBfc2dfdGFibGVzaXplID49IDApCisJCXN1bjNfc2NzaV90ZW1wbGF0ZS5zZ190YWJsZXNpemUgPSBzZXR1cF9zZ190YWJsZXNpemU7CisJaWYgKHNldHVwX2hvc3RpZCA+PSAwKQorCQlzdW4zX3Njc2lfdGVtcGxhdGUudGhpc19pZCA9IHNldHVwX2hvc3RpZCAmIDc7CiAKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJaW9hZGRyID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgeDsKKworCQlpcnEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIGkpOworCQltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOworCQlpZiAoIWlycSB8fCAhbWVtKQorCQkJYnJlYWs7CisKKwkJaW9hZGRyID0gc3VuM19pb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSwKKwkJICAgICAgICAgICAgICAgICAgICAgIFNVTjNfUEFHRV9UWVBFX1ZNRTE2KTsKKwkJZHJlZ3MgPSAoc3RydWN0IHN1bjNfZG1hX3JlZ3MgKikoaW9hZGRyICsgOCk7CisKKwkJaWYgKHN1bjNfbWFwX3Rlc3QoKHVuc2lnbmVkIGxvbmcpZHJlZ3MsICZ4KSkgeworCQkJdW5zaWduZWQgc2hvcnQgb2xkY3NyOworCisJCQlvbGRjc3IgPSBkcmVncy0+Y3NyOworCQkJZHJlZ3MtPmNzciA9IDA7CisJCQl1ZGVsYXkoU1VOM19ETUFfREVMQVkpOworCQkJaWYgKGRyZWdzLT5jc3IgPT0gMHgxNDAwKQorCQkJCWJyZWFrOworCisJCQlkcmVncy0+Y3NyID0gb2xkY3NyOworCQl9CisKKwkJaW91bm1hcChpb2FkZHIpOworCQlpb2FkZHIgPSBOVUxMOworCX0KKwlpZiAoIWlvYWRkcikKKwkJcmV0dXJuIC1FTk9ERVY7CisjZWxzZQorCWlycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIWlycSB8fCAhbWVtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlvYWRkciA9IGlvcmVtYXAobWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKKwlkcmVncyA9IChzdHJ1Y3Qgc3VuM19kbWFfcmVncyAqKShpb2FkZHIgKyA4KTsKKworCXVkY19yZWdzID0gZHZtYV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdW4zX3VkY19yZWdzKSk7CisJaWYgKCF1ZGNfcmVncykgeworCQlwcl9lcnIoUEZYICJjb3VsZG4ndCBhbGxvY2F0ZSBEVk1BIG1lbW9yeSFcbiIpOworCQlpb3VubWFwKGlvYWRkcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKyNlbmRpZgorCisJc3VuM19zY3NpX3JlZ3AgPSBpb2FkZHI7CisKKwlpbnN0YW5jZSA9IHNjc2lfaG9zdF9hbGxvYygmc3VuM19zY3NpX3RlbXBsYXRlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSkpOworCWlmICghaW5zdGFuY2UpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfYWxsb2M7CisJfQorCWRlZmF1bHRfaW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCWluc3RhbmNlLT5pb19wb3J0ID0gKHVuc2lnbmVkIGxvbmcpaW9hZGRyOworCWluc3RhbmNlLT5pcnEgPSBpcnEtPnN0YXJ0OworCisjaWZkZWYgU1VQUE9SVF9UQUdTCisJaG9zdF9mbGFncyB8PSBzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPiAwID8gRkxBR19UQUdHRURfUVVFVUlORyA6IDA7CisjZW5kaWYKKworCU5DUjUzODBfaW5pdChpbnN0YW5jZSwgaG9zdF9mbGFncyk7CisKKwllcnJvciA9IHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIHNjc2lfc3VuM19pbnRyLCAwLAorCSAgICAgICAgICAgICAgICAgICAgIk5DUjUzODAiLCBpbnN0YW5jZSk7CisJaWYgKGVycm9yKSB7CisjaWZkZWYgUkVBTF9ETUEKKwkJcHJfZXJyKFBGWCAic2NzaSVkOiBJUlEgJWQgbm90IGZyZWUsIGJhaWxpbmcgb3V0XG4iLAorCQkgICAgICAgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOworCQlnb3RvIGZhaWxfaXJxOworI2Vsc2UKKwkJcHJfd2FybihQRlggInNjc2klZDogSVJRICVkIG5vdCBmcmVlLCBpbnRlcnJ1cHRzIGRpc2FibGVkXG4iLAorCQkgICAgICAgIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKKwkJaW5zdGFuY2UtPmlycSA9IE5PX0lSUTsKKyNlbmRpZgorCX0KKworCWRyZWdzLT5jc3IgPSAwOworCXVkZWxheShTVU4zX0RNQV9ERUxBWSk7CisJZHJlZ3MtPmNzciA9IENTUl9TQ1NJIHwgQ1NSX0ZJRk8gfCBDU1JfSU5UUjsKKwl1ZGVsYXkoU1VOM19ETUFfREVMQVkpOworCWRyZWdzLT5maWZvX2NvdW50ID0gMDsKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJZHJlZ3MtPmZpZm9fY291bnRfaGkgPSAwOworCWRyZWdzLT5kbWFfYWRkcl9oaSA9IDA7CisJZHJlZ3MtPmRtYV9hZGRyX2xvID0gMDsKKwlkcmVncy0+ZG1hX2NvdW50X2hpID0gMDsKKwlkcmVncy0+ZG1hX2NvdW50X2xvID0gMDsKKworCWRyZWdzLT5pdmVjdCA9IFZNRV9EQVRBMjQgfCAoaW5zdGFuY2UtPmlycSAmIDB4ZmYpOworI2VuZGlmCisKKyNpZmRlZiBSRVNFVF9CT09UCisJc3VuM19zY3NpX3Jlc2V0X2Jvb3QoaW5zdGFuY2UpOworI2VuZGlmCisKKwllcnJvciA9IHNjc2lfYWRkX2hvc3QoaW5zdGFuY2UsIE5VTEwpOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsX2hvc3Q7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbnN0YW5jZSk7CisKKwlzY3NpX3NjYW5faG9zdChpbnN0YW5jZSk7CisJcmV0dXJuIDA7CisKK2ZhaWxfaG9zdDoKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCisJCWZyZWVfaXJxKGluc3RhbmNlLT5pcnEsIGluc3RhbmNlKTsKK2ZhaWxfaXJxOgorCU5DUjUzODBfZXhpdChpbnN0YW5jZSk7CisJc2NzaV9ob3N0X3B1dChpbnN0YW5jZSk7CitmYWlsX2FsbG9jOgorCWlmICh1ZGNfcmVncykKKwkJZHZtYV9mcmVlKHVkY19yZWdzKTsKKwlpb3VubWFwKHN1bjNfc2NzaV9yZWdwKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHN1bjNfc2NzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc2NzaV9yZW1vdmVfaG9zdChpbnN0YW5jZSk7CisJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQorCQlmcmVlX2lycShpbnN0YW5jZS0+aXJxLCBpbnN0YW5jZSk7CisJTkNSNTM4MF9leGl0KGluc3RhbmNlKTsKKwlzY3NpX2hvc3RfcHV0KGluc3RhbmNlKTsKKwlpZiAodWRjX3JlZ3MpCisJCWR2bWFfZnJlZSh1ZGNfcmVncyk7CisJaW91bm1hcChzdW4zX3Njc2lfcmVncCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN1bjNfc2NzaV9kcml2ZXIgPSB7CisJLnJlbW92ZSA9IF9fZXhpdF9wKHN1bjNfc2NzaV9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gRFJWX01PRFVMRV9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcl9wcm9iZShzdW4zX3Njc2lfZHJpdmVyLCBzdW4zX3Njc2lfcHJvYmUpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX01PRFVMRV9OQU1FKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuaCBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuaAppbmRleCBlOTZhMzdjLi5kMjI3NDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5oCkBAIC0xMyw5NSArMTMsMTEgQEAKICAqCShVbml4IGFuZCBMaW51eCBjb25zdWx0aW5nIGFuZCBjdXN0b20gcHJvZ3JhbW1pbmcpCiAgKglkcmV3QGNvbG9yYWRvLmVkdQogICogICAgICArMSAoMzAzKSA0NDAtNDg5NAotICoKLSAqIEFMUEhBIFJFTEVBU0UgMS4KLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCiAjaWZuZGVmIFNVTjNfU0NTSV9ICiAjZGVmaW5lIFNVTjNfU0NTSV9ICiAKLSNkZWZpbmUgU1VOM1NDU0lfUFVCTElDX1JFTEVBU0UgMQotCi0vKgotICogSW50OiBsZXZlbCAyIGF1dG92ZWN0b3IKLSAqIElPOiB0eXBlIDEsIGJhc2UgMHgwMDE0MDAwMCwgNSBiaXRzIHBoeXMgc3BhY2U6IEE8NC4uMD4KLSAqLwotI2RlZmluZSBJUlFfU1VOM19TQ1NJIDIKLSNkZWZpbmUgSU9CQVNFX1NVTjNfU0NTSSAweDAwMTQwMDAwCi0KLSNkZWZpbmUgSU9CQVNFX1NVTjNfVk1FU0NTSSAweGZmMjAwMDAwCi0KLXN0YXRpYyBpbnQgc3VuM3Njc2lfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgc3VuM3Njc2lfZGV0ZWN0IChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwotc3RhdGljIGNvbnN0IGNoYXIgKnN1bjNzY3NpX2luZm8gKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgaW50IHN1bjNzY3NpX2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCBzdW4zc2NzaV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKiwgc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgc3VuM3Njc2lfcmVsZWFzZSAoc3RydWN0IFNjc2lfSG9zdCAqKTsKLQotI2lmbmRlZiBDTURfUEVSX0xVTgotI2RlZmluZSBDTURfUEVSX0xVTiAyCi0jZW5kaWYKLQotI2lmbmRlZiBDQU5fUVVFVUUKLSNkZWZpbmUgQ0FOX1FVRVVFIDE2Ci0jZW5kaWYKLQotI2lmbmRlZiBTR19UQUJMRVNJWkUKLSNkZWZpbmUgU0dfVEFCTEVTSVpFIFNHX05PTkUKLSNlbmRpZgotCi0jaWZuZGVmIE1BWF9UQUdTCi0jZGVmaW5lIE1BWF9UQUdTIDMyCi0jZW5kaWYKLQotI2lmbmRlZiBVU0VfVEFHR0VEX1FVRVVJTkcKLSNkZWZpbmUJVVNFX1RBR0dFRF9RVUVVSU5HIDEKLSNlbmRpZgotCi0jaW5jbHVkZSA8c2NzaS9zY3NpY2FtLmg+Ci0KLSNpZmRlZiBTVU4zX1NDU0lfVk1FCi0jZGVmaW5lIFNVTjNfU0NTSV9OQU1FICJTdW4zIE5DUjUzODAgVk1FIFNDU0kiCi0jZWxzZQotI2RlZmluZSBTVU4zX1NDU0lfTkFNRSAiU3VuMyBOQ1I1MzgwIFNDU0kiCi0jZW5kaWYKLQotI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcyBcCi0gICAgaW50IHBvcnQsIGN0cmwKLQotI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKSBcCi0gICAgICAgIHN0cnVjdCBTY3NpX0hvc3QgKl9pbnN0YW5jZQotCi0jZGVmaW5lIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpIFwKLSAgICAgICAgX2luc3RhbmNlID0gaW5zdGFuY2UKLQotI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKSBzdW4zc2NzaV9yZWFkKHJlZykKLSNkZWZpbmUgTkNSNTM4MF93cml0ZShyZWcsIHZhbHVlKSBzdW4zc2NzaV93cml0ZShyZWcsIHZhbHVlKQotCi0jZGVmaW5lIE5DUjUzODBfaW50ciBzdW4zc2NzaV9pbnRyCi0jZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZCBzdW4zc2NzaV9xdWV1ZV9jb21tYW5kCi0jZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0IHN1bjNzY3NpX2J1c19yZXNldAotI2RlZmluZSBOQ1I1MzgwX2Fib3J0IHN1bjNzY3NpX2Fib3J0Ci0jZGVmaW5lIE5DUjUzODBfc2hvd19pbmZvIHN1bjNzY3NpX3Nob3dfaW5mbwotI2RlZmluZSBOQ1I1MzgwX2RtYV94ZmVyX2xlbihpLCBjbWQsIHBoYXNlKSBcCi0gICAgICAgIHN1bjNzY3NpX2RtYV94ZmVyX2xlbihjbWQtPlNDcC50aGlzX3Jlc2lkdWFsLGNtZCwoKHBoYXNlKSAmIFNSX0lPKSA/IDAgOiAxKQotCi0jZGVmaW5lIE5DUjUzODBfZG1hX3dyaXRlX3NldHVwKGluc3RhbmNlLCBkYXRhLCBjb3VudCkgc3VuM3Njc2lfZG1hX3NldHVwKGRhdGEsIGNvdW50LCAxKQotI2RlZmluZSBOQ1I1MzgwX2RtYV9yZWFkX3NldHVwKGluc3RhbmNlLCBkYXRhLCBjb3VudCkgc3VuM3Njc2lfZG1hX3NldHVwKGRhdGEsIGNvdW50LCAwKQotI2RlZmluZSBOQ1I1MzgwX2RtYV9yZXNpZHVhbCBzdW4zc2NzaV9kbWFfcmVzaWR1YWwKLQogLyogYWRkaXRpb25hbCByZWdpc3RlcnMgLSBtYWlubHkgRE1BIGNvbnRyb2wgcmVncyAqLwogLyogdGhlc2Ugc3RhcnQgYXQgcmVnYmFzZSArIDggLS0gZGlyZWN0bHkgYWZ0ZXIgdGhlIE5DUiByZWdzICovCiBzdHJ1Y3Qgc3VuM19kbWFfcmVncyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jCmluZGV4IGU1OWU2ZjkuLjVkMDBlNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jCkBAIC04MjAsOSArODIwLDcgQEAKIAlpZiAocmVxdGFncyA+IFNZTV9DT05GX01BWF9UQUcpCiAJCXJlcXRhZ3MgPSBTWU1fQ09ORl9NQVhfVEFHOwogCWRlcHRoX3RvX3VzZSA9IHJlcXRhZ3MgPyByZXF0YWdzIDogMTsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LAotCQkJCXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgPyBNU0dfU0lNUExFX1RBRyA6IDAsCi0JCQkJZGVwdGhfdG9fdXNlKTsKKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBkZXB0aF90b191c2UpOwogCWxwLT5zLnNjZGV2X2RlcHRoID0gZGVwdGhfdG9fdXNlOwogCXN5bV90dW5lX2Rldl9xdWV1aW5nKHRwLCBzZGV2LT5sdW4sIHJlcXRhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdDEyOC5jIGIvZHJpdmVycy9zY3NpL3QxMjguYwppbmRleCA4Y2M4MDkzLi44NzgyOGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdDEyOC5jCisrKyBiL2RyaXZlcnMvc2NzaS90MTI4LmMKQEAgLTEsNCArMSwzIEBACi0jZGVmaW5lIEFVVE9TRU5TRQogI2RlZmluZSBQU0VVRE9fRE1BCiAKIC8qCkBAIC0xMiw4ICsxMSw2IEBACiAgKglkcmV3QGNvbG9yYWRvLmVkdQogICogICAgICArMSAoMzAzKSA0NDAtNDg5NAogICoKLSAqIERJU1RSSUJVVElPTiBSRUxFQVNFIDMuCi0gKgogICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0IAogICoKICAqIFRyYW50b3IgU3lzdGVtcywgTHRkLgpAQCAtMjQsNDAgKzIxLDkgQEAKICAqIDU0MTUgUmFuZGFsbCBQbGFjZQogICogRnJlbW9udCwgQ0EgOTQ1MzgKICAqIDErICg0MTUpIDc3MC0xNDAwLCBGQVggMSsgKDQxNSkgNzcwLTk5MTAKLSAqIAotICogYW5kIAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAogICovCiAKIC8qCi0gKiBPcHRpb25zIDogCi0gKiBBVVRPU0VOU0UgLSBpZiBkZWZpbmVkLCBSRVFVRVNUIFNFTlNFIHdpbGwgYmUgcGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkKLSAqICAgICAgZm9yIGNvbW1hbmRzIHRoYXQgcmV0dXJuIHdpdGggYSBDSEVDSyBDT05ESVRJT04gc3RhdHVzLiAKLSAqCi0gKiBQU0VVRE9fRE1BIC0gZW5hYmxlcyBQU0VVRE8tRE1BIGhhcmR3YXJlLCBzaG91bGQgZ2l2ZSBhIDMtNFggcGVyZm9ybWFuY2UKLSAqIGluY3JlYXNlIGNvbXBhcmVkIHRvIHBvbGxlZCBJL08uCi0gKgotICogUEFSSVRZIC0gZW5hYmxlIHBhcml0eSBjaGVja2luZy4gIE5vdCBzdXBwb3J0ZWQuCi0gKiAKLSAqIFNDU0kyIC0gZW5hYmxlIHN1cHBvcnQgZm9yIFNDU0ktSUkgdGFnZ2VkIHF1ZXVlaW5nLiAgVW50ZXN0ZWQuCi0gKgotICoKLSAqIFVOU0FGRSAtIGxlYXZlIGludGVycnVwdHMgZW5hYmxlZCBkdXJpbmcgcHNldWRvLURNQSB0cmFuc2ZlcnMuICBZb3UKLSAqICAgICAgICAgIG9ubHkgcmVhbGx5IHdhbnQgdG8gdXNlIHRoaXMgaWYgeW91J3JlIGhhdmluZyBhIHByb2JsZW0gd2l0aAotICogICAgICAgICAgZHJvcHBlZCBjaGFyYWN0ZXJzIGR1cmluZyBoaWdoIHNwZWVkIGNvbW11bmljYXRpb25zLCBhbmQgZXZlbgotICogICAgICAgICAgdGhlbiwgeW91J3JlIGdvaW5nIHRvIGJlIGJldHRlciBvZmYgdHdpZGRsaW5nIHdpdGggdHJhbnNmZXJzaXplLgotICoKLSAqIFVTTEVFUCAtIGVuYWJsZSBzdXBwb3J0IGZvciBkZXZpY2VzIHRoYXQgZG9uJ3QgZGlzY29ubmVjdC4gIFVudGVzdGVkLgotICoKICAqIFRoZSBjYXJkIGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCBpbiBvbmUgb2Ygc2V2ZXJhbCB3YXlzIDogCiAgKiAxLiAgQXV0b3Byb2JlIChkZWZhdWx0KSAtIHNpbmNlIHRoZSBib2FyZCBpcyBtZW1vcnkgbWFwcGVkLCAKICAqICAgICBhIEJJT1Mgc2lnbmF0dXJlIGlzIHNjYW5uZWQgZm9yIHRvIGxvY2F0ZSB0aGUgcmVnaXN0ZXJzLgpAQCAtMTExLDcgKzc3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCi0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAidDEyOC5oIgogI2RlZmluZSBBVVRPUFJPQkVfSVJRCkBAIC0xNDgsNiArMTEzLDcgQEAKIAogI2RlZmluZSBOT19TSUdOQVRVUkVTIEFSUkFZX1NJWkUoc2lnbmF0dXJlcykKIAorI2lmbmRlZiBNT0RVTEUKIC8qCiAgKiBGdW5jdGlvbiA6IHQxMjhfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpCiAgKgpAQCAtMTU4LDkgKzEyNCwxMyBAQAogICoKICAqLwogCi12b2lkIF9faW5pdCB0MTI4X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKXsKK3N0YXRpYyBpbnQgX19pbml0IHQxMjhfc2V0dXAoY2hhciAqc3RyKQorewogICAgIHN0YXRpYyBpbnQgY29tbWFuZGxpbmVfY3VycmVudCA9IDA7CiAgICAgaW50IGk7CisgICAgaW50IGludHNbMTBdOworCisgICAgZ2V0X29wdGlvbnMoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKICAgICBpZiAoaW50c1swXSAhPSAyKSAKIAlwcmludGsoInQxMjhfc2V0dXAgOiB1c2FnZSB0MTI4PWFkZHJlc3MsaXJxXG4iKTsKICAgICBlbHNlIApAQCAtMTc0LDggKzE0NCwxMiBAQAogCQl9CiAJICAgICsrY29tbWFuZGxpbmVfY3VycmVudDsKIAl9CisgICAgcmV0dXJuIDE7CiB9CiAKK19fc2V0dXAoInQxMjg9IiwgdDEyOF9zZXR1cCk7CisjZW5kaWYKKwogLyogCiAgKiBGdW5jdGlvbiA6IGludCB0MTI4X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKICAqCkBAIC0xODksMTcgKzE2MywxNCBAQAogICoKICAqLwogCi1pbnQgX19pbml0IHQxMjhfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KXsKK3N0YXRpYyBpbnQgX19pbml0IHQxMjhfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCit7CiAgICAgc3RhdGljIGludCBjdXJyZW50X292ZXJyaWRlID0gMCwgY3VycmVudF9iYXNlID0gMDsKICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZTsKICAgICB1bnNpZ25lZCBsb25nIGJhc2U7CiAgICAgdm9pZCBfX2lvbWVtICpwOwogICAgIGludCBzaWcsIGNvdW50OwogCi0gICAgdHBudC0+cHJvY19uYW1lID0gInQxMjgiOwotICAgIHRwbnQtPnNob3dfaW5mbyA9IHQxMjhfc2hvd19pbmZvOwotICAgIHRwbnQtPndyaXRlX2luZm8gPSB0MTI4X3dyaXRlX2luZm87Ci0KICAgICBmb3IgKGNvdW50ID0gMDsgY3VycmVudF9vdmVycmlkZSA8IE5PX09WRVJSSURFUzsgKytjdXJyZW50X292ZXJyaWRlKSB7CiAJYmFzZSA9IDA7CiAJcCA9IE5VTEw7CkBAIC0yNTQsMTUgKzIyNSwxOSBAQAogCWVsc2UgCiAJICAgIGluc3RhbmNlLT5pcnEgPSBOQ1I1MzgwX3Byb2JlX2lycShpbnN0YW5jZSwgVDEyOF9JUlFTKTsKIAotCWlmIChpbnN0YW5jZS0+aXJxICE9IFNDU0lfSVJRX05PTkUpIAorCS8qIENvbXBhdGliaWxpdHkgd2l0aCBkb2N1bWVudGVkIE5DUjUzODAga2VybmVsIHBhcmFtZXRlcnMgKi8KKwlpZiAoaW5zdGFuY2UtPmlycSA9PSAyNTUpCisJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CisKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCiAJICAgIGlmIChyZXF1ZXN0X2lycShpbnN0YW5jZS0+aXJxLCB0MTI4X2ludHIsIDAsICJ0MTI4IiwKIAkJCSAgICBpbnN0YW5jZSkpIHsKIAkJcHJpbnRrKCJzY3NpJWQgOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwgCiAJCSAgICBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7Ci0JCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOworCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROwogCSAgICB9IAogCi0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkgeworCWlmIChpbnN0YW5jZS0+aXJxID09IE5PX0lSUSkgewogCSAgICBwcmludGsoInNjc2klZCA6IGludGVycnVwdHMgbm90IGVuYWJsZWQuIGZvciBiZXR0ZXIgaW50ZXJhY3RpdmUgcGVyZm9ybWFuY2UsXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJICAgIHByaW50aygic2NzaSVkIDogcGxlYXNlIGp1bXBlciB0aGUgYm9hcmQgZm9yIGEgZnJlZSBJUlEuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJfQpAQCAtMjcxLDE2ICsyNDYsNiBAQAogCXByaW50aygic2NzaSVkIDogaXJxID0gJWRcbiIsIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKICNlbmRpZgogCi0JcHJpbnRrKCJzY3NpJWQgOiBhdCAweCUwOGx4IiwgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5iYXNlKTsKLQlpZiAoaW5zdGFuY2UtPmlycSA9PSBTQ1NJX0lSUV9OT05FKQotCSAgICBwcmludGsgKCIgaW50ZXJydXB0cyBkaXNhYmxlZCIpOwotCWVsc2UgCi0JICAgIHByaW50ayAoIiBpcnEgJWQiLCBpbnN0YW5jZS0+aXJxKTsKLQlwcmludGsoIiBvcHRpb25zIENBTl9RVUVVRT0lZCAgQ01EX1BFUl9MVU49JWQgcmVsZWFzZT0lZCIsCi0JICAgIENBTl9RVUVVRSwgQ01EX1BFUl9MVU4sIFQxMjhfUFVCTElDX1JFTEVBU0UpOwotCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JcHJpbnRrKCJcbiIpOwotCiAJKytjdXJyZW50X292ZXJyaWRlOwogCSsrY291bnQ7CiAgICAgfQpAQCAtMjkxLDcgKzI1Niw3IEBACiB7CiAJTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCk7CiAJTkNSNTM4MF9zZXR1cChzaG9zdCk7Ci0JaWYgKHNob3N0LT5pcnEpCisJaWYgKHNob3N0LT5pcnEgIT0gTk9fSVJRKQogCQlmcmVlX2lycShzaG9zdC0+aXJxLCBzaG9zdCk7CiAJTkNSNTM4MF9leGl0KHNob3N0KTsKIAlpZiAoc2hvc3QtPmlvX3BvcnQgJiYgc2hvc3QtPm5faW9fcG9ydCkKQEAgLTMyMSw4ICsyODYsOCBAQAogICogYW5kIG1hdGNoaW5nIHRoZSBIX0NfUyBjb29yZGluYXRlcyB0byB3aGF0IERPUyB1c2VzLgogICovCiAKLWludCB0MTI4X2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCi0JCXNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgKiBpcCkKK3N0YXRpYyBpbnQgdDEyOF9iaW9zcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3JfdCBjYXBhY2l0eSwgaW50ICppcCkKIHsKICAgaXBbMF0gPSA2NDsKICAgaXBbMV0gPSAzMjsKQEAgLTQzMCw2ICszOTUsMTAgQEAKIAkubmFtZSAgICAgICAgICAgPSAiVHJhbnRvciBUMTI4L1QxMjhGL1QyMjgiLAogCS5kZXRlY3QgICAgICAgICA9IHQxMjhfZGV0ZWN0LAogCS5yZWxlYXNlICAgICAgICA9IHQxMjhfcmVsZWFzZSwKKwkucHJvY19uYW1lICAgICAgPSAidDEyOCIsCisJLnNob3dfaW5mbyAgICAgID0gdDEyOF9zaG93X2luZm8sCisJLndyaXRlX2luZm8gICAgID0gdDEyOF93cml0ZV9pbmZvLAorCS5pbmZvICAgICAgICAgICA9IHQxMjhfaW5mbywKIAkucXVldWVjb21tYW5kICAgPSB0MTI4X3F1ZXVlX2NvbW1hbmQsCiAJLmVoX2Fib3J0X2hhbmRsZXIgPSB0MTI4X2Fib3J0LAogCS5laF9idXNfcmVzZXRfaGFuZGxlciAgICA9IHQxMjhfYnVzX3Jlc2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3QxMjguaCBiL2RyaXZlcnMvc2NzaS90MTI4LmgKaW5kZXggZmQ2OGNlYy4uMmM3MzcxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3QxMjguaAorKysgYi9kcml2ZXJzL3Njc2kvdDEyOC5oCkBAIC04LDggKzgsNiBAQAogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKICAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSAzLgotICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdAogICoKICAqIFRyYW50b3IgU3lzdGVtcywgTHRkLgpAQCAtMjAsMjUgKzE4LDExIEBACiAgKiA1NDE1IFJhbmRhbGwgUGxhY2UKICAqIEZyZW1vbnQsIENBIDk0NTM4CiAgKiAxKyAoNDE1KSA3NzAtMTQwMCwgRkFYIDErICg0MTUpIDc3MC05OTEwCi0gKgotICogYW5kCi0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0CiAgKi8KIAogI2lmbmRlZiBUMTI4X0gKICNkZWZpbmUgVDEyOF9ICiAKLSNkZWZpbmUgVDEyOF9QVUJMSUNfUkVMRUFTRSAzCi0KICNkZWZpbmUgVERFQlVHCQkwCiAjZGVmaW5lIFRERUJVR19JTklUCTB4MQogI2RlZmluZSBUREVCVUdfVFJBTlNGRVIgMHgyCkBAIC04OCwxMiArNzIsNiBAQAogI2RlZmluZSBUX0RBVEFfUkVHX09GRlNFVAkweDFlMDAJLyogcncgNTEyIGJ5dGVzIGxvbmcgKi8KIAogI2lmbmRlZiBBU00KLXN0YXRpYyBpbnQgdDEyOF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCB0MTI4X2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgc3RydWN0IGJsb2NrX2RldmljZSAqLAotCQkJICBzZWN0b3JfdCwgaW50Kik7Ci1zdGF0aWMgaW50IHQxMjhfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7Ci1zdGF0aWMgaW50IHQxMjhfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IHQxMjhfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiAKICNpZm5kZWYgQ01EX1BFUl9MVU4KICNkZWZpbmUgQ01EX1BFUl9MVU4gMgpAQCAtMTM0LDYgKzExMiw3IEBACiAjZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZCB0MTI4X3F1ZXVlX2NvbW1hbmQKICNkZWZpbmUgTkNSNTM4MF9hYm9ydCB0MTI4X2Fib3J0CiAjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0IHQxMjhfYnVzX3Jlc2V0CisjZGVmaW5lIE5DUjUzODBfaW5mbyB0MTI4X2luZm8KICNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8gdDEyOF9zaG93X2luZm8KICNkZWZpbmUgTkNSNTM4MF93cml0ZV9pbmZvIHQxMjhfd3JpdGVfaW5mbwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jIGIvZHJpdmVycy9zY3NpL3Rtc2NzaW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY0NTc1Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKglGSUxFIE5BTUUgOiBUTVNDU0lNLkMJCQkJCQkqCi0gKgkgICAgIEJZICAgOiBDLkwuIEh1YW5nLCAgY2hpbmdAdGVrcmFtLmNvbS50dwkJCSoKLSAqCURlc2NyaXB0aW9uOiBEZXZpY2UgRHJpdmVyIGZvciBUZWtyYW0gREMtMzkwKFQpIFBDSSBTQ1NJCSoKLSAqCQkgICAgIEJ1cyBNYXN0ZXIgSG9zdCBBZGFwdGVyCQkJCSoKLSAqIChDKUNvcHlyaWdodCAxOTk1LTE5OTYgVGVrcmFtIFRlY2hub2xvZ3kgQ28uLCBMdGQuCQkJKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKEMpIENvcHlyaWdodDogcHV0IHVuZGVyIEdOVSBHUEwgaW4gMTAvOTYJCQkJKgotICoJCQkJKHNlZSBEb2N1bWVudGF0aW9uL3Njc2kvdG1zY3NpbS50eHQpCSoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICRJZDogdG1zY3NpbS5jLHYgMi42MC4yLjMwIDIwMDAvMTIvMjAgMDE6MDc6MTIgZ2FybG9mZiBFeHAgJAkJKgotICoJRW5oYW5jZW1lbnRzIGFuZCBidWdmaXhlcyBieQkJCQkJKgotICoJS3VydCBHYXJsb2ZmIDxrdXJ0QGdhcmxvZmYuZGU+CTxnYXJsb2ZmQHN1c2UuZGU+CQkqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKglISVNUT1JZOgkJCQkJCQkqCi0gKgkJCQkJCQkJCSoKLSAqCVJFViMJREFURQlOQU1FCURFU0NSSVBUSU9OCQkJCSoKLSAqCTEuMDAgIDk2LzA0LzI0CUNMSAlGaXJzdCByZWxlYXNlCQkJCSoKLSAqCTEuMDEgIDk2LzA2LzEyCUNMSAlGaXhlZCBidWcgb2YgTWVkaWEgQ2hhbmdlIGZvciBSZW1vdmFibGUgKgotICoJCQkJRGV2aWNlLCBzY2FuIGFsbCBMVU4uIFN1cHBvcnQgUHJlMi4wLjEwICoKLSAqCTEuMDIgIDk2LzA2LzE4CUNMSAlGaXhlZCBidWcgb2YgQ29tbWFuZCB0aW1lb3V0IC4uLgkqCi0gKgkxLjAzICA5Ni8wOS8yNQlLRwlBZGRlZCB0bXNjc2ltX3Byb2NfaW5mbygpCQkqCi0gKgkxLjA0ICA5Ni8xMC8xMQlDTEgJVXBkYXRpbmcgZm9yIHN1cHBvcnQgS1YgMi4wLngJCSoKLSAqCTEuMDUgIDk2LzEwLzE4CUtHCUZpeGVkIGJ1ZyBpbiBEQzM5MF9hYm9ydChudWxsIHB0ciBkZXJlZikqCi0gKgkxLjA2ICA5Ni8xMC8yNQlLRwlGaXhlZCBtb2R1bGUgc3VwcG9ydAkJCSoKLSAqCTEuMDcgIDk2LzExLzA5CUtHCUZpeGVkIHRtc2NzaW1fcHJvY19pbmZvKCkJCSoKLSAqCTEuMDggIDk2LzExLzE4CUtHCUZpeGVkIG51bGwgcHRyIGluIERDMzkwX0Rpc2Nvbm5lY3QoKQkqCi0gKgkxLjA5ICA5Ni8xMS8zMAlLRwlBZGRlZCByZWdpc3RlciB0aGUgYWxsb2NhdGVkIElPIHNwYWNlCSoKLSAqCTEuMTAgIDk2LzEyLzA1CUNMSAlNb2RpZmllZCB0bXNjc2ltX3Byb2NfaW5mbygpLCBhbmQgcmVzZXQgKgotICoJCQkJcGVuZGluZyBpbnRlcnJ1cHQgaW4gREMzOTBfZGV0ZWN0KCkJKgotICoJMS4xMSAgOTcvMDIvMDUJS0cvQ0xICUZpeGVkcyBwcm9ibGVtIHdpdGggcGFydGl0aW9ucyBncmVhdGVyCSoKLSAqCQkJCXRoYW4gMUdCCQkJCSoKLSAqCTEuMTIgIDk4LzAyLzE1ICBNSiAgICAgIFJld3JpdHRlbiBQQ0kgcHJvYmluZwkJCSoKLSAqCTEuMTMgIDk4LzA0LzA4CUtHCVN1cHBvcnQgZm9yIG5vbiBEQzM5MCwgX19pbml0ZnVuYyBkZWNscywqCi0gKgkJCQljaGFuZ2VkIG1heCBkZXZzIGZyb20gMTAgdG8gMTYJCSoKLSAqCTEuMTRhIDk4LzA1LzA1CUtHCUR5bmFtaWMgRENCIGFsbG9jYXRpb24sIGFkZC1zaW5nbGUtZGV2CSoKLSAqCQkJCWZvciBMVU5zIGlmIExVTl9TQ0FOIChCSU9TKSBub3Qgc2V0CSoKLSAqCQkJCXJ1bnRpbWUgY29uZmlnIHVzaW5nIC9wcm9jIGludGVyZmFjZQkqCi0gKgkxLjE0YiA5OC8wNS8wNglLRwllbGltaW5hdGVkIGNsaSAoKTsgc3RpICgpOyBzcGlubG9ja3MJKgotICoJMS4xNGMgOTgvMDUvMDcJS0cJMi4wLnggY29tcGF0aWJpbGl0eQkJCSoKLSAqCTEuMjBhIDk4LzA1LzA3CUtHCWNoYW5nZWQgbmFtZXMgb2YgZnVuY3MgdG8gYmUgY29uc2lzdGVudCAqCi0gKgkJCQlEQzM5MF8gKGVudHJ5IHBvaW50cyksIGRjMzkwXyAoaW50ZXJuYWwpKgotICoJCQkJcmV3b3JrZWQgbG9ja2luZwkJCSoKLSAqCTEuMjBiIDk4LzA1LzEyCUtHCWJ1Z3M6IHZlcnNpb24sIGtmcmVlLCBfY3RtcAkJKgotICoJCQkJZGVidWcgb3V0cHV0CQkJCSoKLSAqCTEuMjBjIDk4LzA1LzEyCUtHCWJ1Z3M6IGtmcmVlLCBwYXJzaW5nLCBFRXByb21EZWZhdWx0cwkqCi0gKgkxLjIwZCA5OC8wNS8xNAlLRwlidWdzOiBsaXN0IGxpbmthZ2UsIGNsZWFyIGZsYWcgYWZ0ZXIgIAkqCi0gKgkJCQlyZXNldCBvbiBzdGFydHVwLCBjb2RlIGNsZWFudXAJCSoKLSAqCTEuMjBlIDk4LzA1LzE1CUtHCXNwaW5sb2NrIGNvbW1lbnRzLCBuYW1lIHNwYWNlIGNsZWFudXAJKgotICoJCQkJcExhc3REQ0Igbm93IHBhcnQgb2YgQUNCIHN0cnVjdHVyZQkqCi0gKgkJCQlhZGRlZCBzdGF0cywgdGltZW91dCBmb3IgMi4xLCBUYWdRIGJ1ZwkqCi0gKgkJCQlSRVNFVCBhbmQgSU5RVUlSWSBpbnRlcmZhY2UgY29tbWFuZHMJKgotICoJMS4yMGYgOTgvMDUvMTgJS0cJc3BpbmxvY2tzIGZpeGVzLCBtYXhfbHVuIGZpeCwgZnJlZSBEQ0JzCSoKLSAqCQkJCWZvciBtaXNzaW5nIExVTnMsIHBlbmRpbmcgaW50CQkqCi0gKgkxLjIwZyA5OC8wNS8xOQlLRwlDbGVhbiB1cDogQXZvaWQgc2hvcnQJCQkqCi0gKgkxLjIwaCA5OC8wNS8yMQlLRwlSZW1vdmUgQWRhcHRTQ1NJSUQsIG1heF9sdW4gLi4uCQkqCi0gKgkxLjIwaSA5OC8wNS8yMQlLRwlBaWlpZTogQnVnIHdpdGggVGFnUU1hc2sgICAgICAgCQkqCi0gKgkxLjIwaiA5OC8wNS8yNAlLRwlIYW5kbGUgU1RBVF9CVVNZLCBoYW5kbGUgcEFDQi0+cExpbmtEQ0IJKgotICoJCQkJPT0gMCBpbiByZW1vdmVfZGV2IGFuZCBEb2luZ1NSQl9Eb25lCSoKLSAqCTEuMjBrIDk4LzA1LzI1CUtHCURNQV9JTlQJKGV4cGVyaW1lbnRhbCkJICAgICAgIAkJKgotICoJMS4yMGwgOTgvMDUvMjcJS0cJcmVtb3ZlIERNQV9JTlQ7IERNQV9JRExFIGNtZHMgYWRkZWQ7CSoKLSAqCTEuMjBtIDk4LzA2LzEwCUtHCWdsaXRjaCBjb25maWd1cmFibGU7IG1hZGUgc29tZSBnbG9iYWwJKgotICoJCQkJdmFycyBwYXJ0IG9mIEFDQjsgdXNlIERDMzkwX3JlYWRYCSoKLSAqCTEuMjBuIDk4LzA2LzExCUtHCXN0YXJ0dXAgcGFyYW1zCQkJCSoKLSAqCTEuMjBvIDk4LzA2LzE1CUtHCWFkZGVkIFRhZ01heE51bSB0byBib290L21vZHVsZSBwYXJhbXMJKgotICoJCQkJRGV2aWNlIE5yIC0+IElkeCwgVGFnTWF4TnVtIHBvd2VyIG9mIDIgICoKLSAqCTEuMjBwIDk4LzA2LzE3CUtHCURvY3UgdXBkYXRlcy4gUmVzZXQgZGVwZW5kcyBvbiBzZXR0aW5ncyAqCi0gKgkJCQlwY2lfc2V0X21hc3RlciBhZGRlZDsgMi4wLnh4OiBwY2liaW9zXyoJKgotICoJCQkJdXNlZCBpbnN0ZWFkIG9mIE1lY2hOdW0gdGhpbmdzIC4uLgkqCi0gKgkxLjIwcSA5OC8wNi8yMwlLRwlDaGFuZ2VkIGRlZmF1bHRzLiBBZGRlZCBkZWJ1ZyBjb2RlIGZvcgkqCi0gKgkJCQlyZW1vdmFibGUgbWVkaWEgYW5kIGZpeGVkIGl0LiBUYWdNYXhOdW0JKgotICoJCQkJZml4ZWQgZm9yIERDMzkwLiBMb2NraW5nOiBBQ0IsIERSViBmb3IJKgotICoJCQkJYmV0dGVyIElSUSBzaGFyaW5nLiBTcGVsbGluZzogUXVldWVpbmcJKgotICoJCQkJUGFyc2luZyBhbmQgZ2xpdGNoX2NmZyBjaGFuZ2VzLiBEaXNwbGF5CSoKLSAqCQkJCXJlYWwgU3luY1NwZWVkIHZhbHVlLiBNYWRlIERpc0Nvbm4JKgotICoJCQkJZnVuY3Rpb25hbCAoISkJCQkJKgotICoJMS4yMHIgOTgvMDYvMzAJS0cJRGVidWcgbWFjcm9zLCBhbGxvdyBkaXNhYmxpbmcgRHNDbiwgc2V0CSoKLSAqCQkJCUJJVDQgaW4gQ3RybFI0LCBFTl9QQUdFX0lOVCwgMi4wIG1vZHVsZQkqCi0gKgkJCQlwYXJhbSAtMSBmaXhlZC4JCQkJKgotICoJMS4yMHMgOTgvMDgvMjAJS0cJRGVidWcgaW5mbyBvbiBhYm9ydCgpLCB0cnkgdG8gY2hlY2sgUENJLCoKLSAqCQkJCXBoeXNfdG9fYnVzIGluc3RlYWQgb2YgcGh5c190b192aXJ0LAkqCi0gKgkJCQlmaXhlZCBzZWwuIHByb2Nlc3MsIGZpeGVkIGxvY2tpbmcsCSoKLSAqCQkJCWFkZGVkIE1PRFVMRV9YWFggaW5mb3MsIGNoYW5nZWQgSVJRCSoKLSAqCQkJCXJlcXVlc3QgZmxhZ3MsIGRpc2FibGUgRE1BX0lOVAkJKgotICoJMS4yMHQgOTgvMDkvMDcJS0cJVGFnUSByZXBvcnQgZml4ZWQ7IFdyaXRlIEVyYXNlIERNQSBTdGF0OyoKLSAqCQkJCWluaXRmdW5jIC0+IF9faW5pdDsgYmV0dGVyIGFib3J0OwkqCi0gKgkJCQlUaW1lb3V0IGZvciBYRkVSX0RPTkUgJiBCTEFTVF9DT01QTEVURTsJKgotICoJCQkJQWxsb3cgdXAgdG8gMzMgY29tbWFuZHMgYmVpbmcgcHJvY2Vzc2VkICoKLSAqCTIuMGEgIDk4LzEwLzE0CUtHCU1heCBDbW5kcyBiYWNrIHRvIDE3LiBETUFfU3RhdCBjbGVhcmluZyAqCi0gKgkJCQlhbGwgZmxhZ3MuIENsZWFyIHdpdGhpbiB3aGlsZSgpIGxvb3BzCSoKLSAqCQkJCWluIERhdGFJbl8wL091dF8wLiBOdWxsIHB0ciBpbiBkdW1waW5mbwkqCi0gKgkJCQlmb3IgcFNSQj09MC4gQmV0dGVyIGxvY2tpbmcgZHVyaW5nIGluaXQuKgotICoJCQkJYmlvc19wYXJhbSgpIG5vdyByZXNwZWN0cyBwYXJ0LiB0YWJsZS4JKgotICoJMi4wYiAgOTgvMTAvMjQJS0cJRG9jdSBmaXhlcy4gVGltZW91dCBNc2cgaW4gRE1BIEJsYXN0LgkqCi0gKgkJCQlEaXNhbGxvdyBpbGxlZ2FsIGlkeCBpbiBJTlFVSVJZL1JFTU9WRQkqCi0gKgkyLjBjICA5OC8xMS8xOQlLRwlDbGVhbmVkIHVwIGRldGVjdC9pbml0IGZvciBTTVAgYm94ZXMsIAkqCi0gKgkJCQlXcml0ZSBFcmFzZSBETUEgKDEuMjB0KSBjYXVzZWQgcHJvYmxlbXMJKgotICoJMi4wZCAgOTgvMTIvMjUJS0cJQ2hyaXN0bWFzIHJlbGVhc2UgOy0pIE1lc3NhZ2UgaGFuZGxpbmcgICoKLSAqCQkJCWNvbXBsZXRlbHkgcmV3b3JrZWQuIEhhbmRsZSB0YXJnZXQgaW5pLQkqCi0gKgkJCQl0aWF0ZWQgU0RUUiBjb3JyZWN0bHkuCQkJKgotICoJMi4wZDEgOTkvMDEvMjUJS0cJVHJ5IHRvIGhhbmRsZSBSRVNUT1JFX1BUUgkJKgotICoJMi4wZDIgOTkvMDIvMDgJS0cJQ2hlY2sgZm9yIGZhaWx1cmUgb2Yga21hbGxvYywgY29ycmVjdCAJKgotICoJCQkJaW5jbHVzaW9uIG9mIHNjc2ljYW0uaCwgRGVsYXlSZXNldAkqCi0gKgkyLjBkMyA5OS8wNS8zMQlLRwlEUklWRVJfT0sgLT4gRElEX09LLCBESURfTk9fQ09OTkVDVCwJKgotICoJCQkJZGV0ZWN0IFRhcmdldCBtb2RlIGFuZCB3YXJuLgkJKgotICoJCQkJcGNtZC0+cmVzdWx0IGhhbmRsaW5nIGNsZWFuZWQgdXAuCSoKLSAqCTIuMGQ0IDk5LzA2LzAxCUtHCUNsZWFuZWQgc2VsZWN0aW9uIHByb2Nlc3MuIEZvdW5kIGJ1ZwkqCi0gKgkJCQl3aGljaCBwcmV2ZW50ZWQgbW9yZSB0aGFuIDE2IHRhZ3MuIE5vdzoJKgotICoJCQkJMjQuIFNEVFIgY2xlYW51cC4gQ2xlYW5lciBtdWx0aS1MVU4JKgotICoJCQkJaGFuZGxpbmcuIERvbid0IG1vZGlmeSBDb250cm9sUmVncy9GSUZPCSoKLSAqCQkJCXdoZW4gY29ubmVjdGVkLgkJCQkqCi0gKgkyLjBkNSA5OS8wNi8wMQlLRwlDbGVhciBEZXZJRCwgRml4IElOUVVJUlkgYWZ0ZXIgY2ZnIGNoZy4JKgotICoJMi4wZDYgOTkvMDYvMDIJS0cJQWRkZWQgQUREIHNwZWNpYWwgY29tbWFuZCB0byBhbGxvdyBjZmcuCSoKLSAqCQkJCWJlZm9yZSBkZXRlY3Rpb24uIFJlc2V0IFNZTkNfTkVHT19ET05FCSoKLSAqCQkJCWFmdGVyIGEgYnVzIHJlc2V0LgkJCSoKLSAqCTIuMGQ3IDk5LzA2LzAzCUtHCUZpeGVkIGJ1Z3Mgd3J0IGFkZCxyZW1vdmUgY29tbWFuZHMJKgotICoJMi4wZDggOTkvMDYvMDQJS0cJUmVtb3ZlZCBjb3B5aW5nIG9mIGNtbmQgaW50byBDbWRCbG9jay4JKgotICoJCQkJRml4ZWQgT29wcyBpbiBfcmVsZWFzZSgpLgkJKgotICoJMi4wZDkgOTkvMDYvMDYJS0cJQWxzbyB0YWcgcXVldWUgSU5RVUlSWSwgVF9VX1IsIC4uLgkqCi0gKgkJCQlBbGxvdyBhcmIuIG5vLiBvZiBUYWdnZWQgQ21uZHMuIE1heCAzMgkqCi0gKgkyLjBkMTA5OS8wNi8yMAlLRwlUYWdNYXhObyBjaGFuZ2VzIG5vdyBob25vdXJlZCEgUXVldWVpbmcgKgotICoJCQkJY2xlYXJpZmllZCAocmVuYW1lZCAuLikgVGFnTWFzayBoYW5kbGluZyoKLSAqCQkJCWNsZWFuZWQuCQkJCSoKLSAqCTIuMGQxMTk5LzA2LzI4CUtHCWNtZC0+cmVzdWx0IG5vdyBpZGVudGljYWwgdG8gMi4wZDIJKgotICoJMi4wZDEyOTkvMDcvMDQJS0cJQ2hhbmdlZCBvcmRlciBvZiBwcm9jZXNzaW5nIGluIElSUQkqCi0gKgkyLjBkMTM5OS8wNy8wNQlLRwlEb24ndCB1cGRhdGUgRENCIGZpZWxkcyBpZiByZW1vdmVkCSoKLSAqCTIuMGQxNDk5LzA3LzA1CUtHCXJlbW92ZV9kZXY6IE1vdmUga2ZyZWUoKSB0byB0aGUgZW5kCSoKLSAqCTIuMGQxNTk5LzA3LzEyCUtHCXVzZV9uZXdfZWhfY29kZTogMCwgVUxPTkcgLT4gVUlOVCB3aGVyZQkqCi0gKgkJCQlhcHByb3ByaWF0ZQkJCQkqCi0gKgkyLjBkMTY5OS8wNy8xMwlLRwlSZWVuYWJsZSBTdGFydFNDU0kgaW50ZXJydXB0LCBSZXRyeSBtc2cJKgotICoJMi4wZDE3OTkvMDcvMTUJS0cJUmVtb3ZlIGRlYnVnIG1zZy4gRGlzYWJsZSByZWNmZy4gd2hlbgkqCi0gKgkJCQl0aGVyZSBhcmUgcXVldWVkIGNtbmRzCQkJKgotICoJMi4wZDE4OTkvMDcvMTgJS0cJU2VsZWN0aW9uIHRpbWVvdXQ6IERvbid0IHJlcXVldWUJKgotICoJMi4wZDE5OTkvMDcvMTgJS0cJQWJvcnQ6IE9ubHkgY2FsbCBzY3NpX2RvbmUgaWYgZGVxdWV1ZWQJKgotICoJMi4wZDIwOTkvMDcvMTkJS0cJUnN0X0RldGVjdDogRG9pbmdTUkJfRG9uZQkJKgotICoJMi4wZDIxOTkvMDgvMTUJS0cJZGV2X2lkIGZvciByZXF1ZXN0L2ZyZWVfaXJxLCBjbW5kWzBdIGZvcioKLSAqCQkJCVJFVFJZLCBTUkJkb25lIGRvZXMgRElEX0FCT1JUIGZvciB0aGUgCSoKLSAqCQkJCWNtZCBwYXNzZWQgYnkgREMzOTBfcmVzZXQoKQkJKgotICoJMi4wZDIyOTkvMDgvMjUJS0cJZGV2X2lkIGZpeGVkLiBjYW5fcXVldWU6IDQyCQkqCi0gKgkyLjBkMjM5OS8wOC8yNQlLRwlSZW1vdmVkIHNvbWUgZGVidWdnaW5nIGNvZGUuIGRldl9pZCAJKgotICoJCQkJbm93IGlzIHNldCB0byBwQUNCLiBVc2UgdTgsdTE2LHUzMi4gCSoKLSAqCTIuMGQyNDk5LzExLzE0CUtHCVVucmVnLiBJL08gaWYgZmFpbGVkIElSUSBhbGxvYy4gQ2FsbAkqCi0gKiAJCQkJZG9uZSAoKSB3LyBESURfQkFEX1RBUkdFVCBpbiBjYXNlIG9mCSoKLSAqCQkJCW1pc3NpbmcgRENCLiBXZQlhcmUgb2xkIEVIISEJCSoKLSAqCTIuMGQyNTAwLzAxLzE1CUtHCTIuMy4zeCBjb21wYXQgZnJvbSBBbmRyZWFzIFNjaHVsdHoJKgotICoJCQkJc2V0IHVuaXF1ZV9pZC4gRGlzYWJsZSBSRVRSWSBtZXNzYWdlLgkqCi0gKgkyLjBkMjYwMC8wMS8yOQlLRwlHbyB0byBuZXcgRUguCQkJCSoKLSAqCTIuMGQyNzAwLzAxLzMxCUtHCS4uLiBidXQgbWFpbnRhaW4gMi4wIGNvbXBhdC4JCSoKLSAqCQkJCWFuZCBmaXggRENCIGZyZWVpbmcJCQkqCi0gKgkyLjBkMjgwMC8wMi8xNAlLRwlRdWV1ZSBzdGF0aXN0aWNzIGZpeGVkLCBkdW1wIHNwZWNpYWwgY21kKgotICoJCQkJV2FpdGluZ19UaW1lciBmb3IgZmFpbGVkIFN0YXJ0U0NTSQkqCi0gKgkJCQlOZXcgRUg6IERvbid0IHJldHVybiBjbW5kcyB0byBNTCBvbiBSU1QgKgotICoJCQkJVXNlIG9sZCBFSCAoZG9uJ3QgaGF2ZSBuZXcgRUggZm5zIHlldCkJKgotICogCQkJCVJlc2V0OiBVbmxvY2ssIGJ1dCByZWZ1c2UgdG8gcXVldWUJKgotICogCQkJCTIuMyBfX3NldHVwIGZ1bmN0aW9uCQkJKgotICoJMi4wZSAgMDAvMDUvMjIJS0cJUmV0dXJuIHJlc2lkdWFsIGZvciAyLjMJCQkqCi0gKgkyLjBlMSAwMC8wNS8yNQlLRwlDb21waWxlIGZpeGVzIGZvciAyLjMuOTkJCSoKLSAqCTIuMGUyIDAwLzA1LzI3CUtHCUplZmYgR2FyemlrJ3MgcGNpX2VuYWJsZV9kZXZpY2UoKQkqCi0gKgkyLjBlMyAwMC8wOS8yOQlLRwlTb21lIDIuNCBjaGFuZ2VzLiBEb24ndCB0cnkgU3luYyBOZWdvCSoKLSAqCQkJCWJlZm9yZSBJTlFVSVJZIGhhcyByZXBvcnRlZCBhYmlsaXR5LiAJKgotICoJCQkJUmVjb2duaXNlIElOUVVJUlkgYXMgc2Nhbm5pbmcgY29tbWFuZC4JKgotICoJMi4wZTQgMDAvMTAvMTMJS0cJQWxsb3cgY29tcGlsYXRpb24gaW50byAyLjQga2VybmVsCSoKLSAqCTIuMGU1IDAwLzExLzE3CUtHCVN0b3JlIElucS5mbGFncyBpbiBEQ0IJCQkqCi0gKgkyLjBlNiAwMC8xMS8yMiAgS0cJMi40IGluaXQgZnVuY3Rpb24gKFRoeCB0byBPLlNjaHVtYW5uKQkqCi0gKiAJCQkJMi40IFBDSSBkZXZpY2UgdGFibGUgKFRoeCB0byBBLlJpY2h0ZXIpCSoKLSAqCTIuMGU3IDAwLzExLzI4CUtHCUFsbG93IG92ZXJyaWRpbmcgb2YgQklPUyBzZXR0aW5ncwkqCi0gKgkyLjBmICAwMC8xMi8yMAlLRwlIYW5kbGUgZmFpbGVkIElOUVVJUllzIGR1cmluZyBzY2FuCSoKLSAqCTIuMWEgIDAzLzExLzI5ICBHTCwgS0cJSW5pdGlhbCBmaXhpbmcgZm9yIDIuNi4gQ29udmVydCB0bwkqCi0gKgkJCQl1c2UgdGhlIGN1cnJlbnQgUENJLW1hcHBpbmcgQVBJLCB1cGRhdGUJKgotICoJCQkJY29tbWFuZC1xdWV1aW5nLgkJCSoKLSAqCTIuMWIgIDA0LzA0LzEzICBHTAlGaXggZm9yIDY0LWJpdCBwbGF0Zm9ybXMJCSoKLSAqCTIuMWIxIDA0LzAxLzMxCUdMCShhcHBsaWVkIDA1LjA0KSBSZW1vdmUgaW50ZXJuYWwJCSoKLSAqCQkJCWNvbW1hbmQtcXVldWluZy4JCQkqCi0gKgkyLjFiMiAwNC8wMi8wMQlDSAkoYXBwbGllZCAwNS4wNCkgRml4IGVycm9yLWhhbmRsaW5nCSoKLSAqCTIuMWMgIDA0LzA1LzIzICBHTAlVcGRhdGUgdG8gdXNlIHRoZSBuZXcgcGNpX2RyaXZlciBBUEksCSoKLSAqCQkJCXNvbWUgc2NzaSBFSCB1cGRhdGVzLCBtb3JlIGNsZWFudXAuCSoKLSAqCTIuMWQgIDA0LzA1LzI3CUdMCU1vdmVkIHNldHRpbmcgb2Ygc2Nhbl9kZXZpY2VzIHRvCSoKLSAqCQkJCXNsYXZlX2FsbG9jL19jb25maWd1cmUvX2Rlc3Ryb3ksIGFzCSoKLSAqCQkJCXN1Z2dlc3RlZCBieSBDSC4JCQkqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIERFQlVHIG9wdGlvbnMgKi8KLS8vI2RlZmluZSBEQzM5MF9ERUJVRzAKLS8vI2RlZmluZSBEQzM5MF9ERUJVRzEKLS8vI2RlZmluZSBEQzM5MF9EQ0JERUJVRwotLy8jZGVmaW5lIERDMzkwX1BBUlNFREVCVUcKLS8vI2RlZmluZSBEQzM5MF9SRU1PVkFCTEVERUJVRwotLy8jZGVmaW5lIERDMzkwX0xPQ0tERUJVRwotCi0vLyNkZWZpbmUgTk9QIGRve313aGlsZSgwKQotI2RlZmluZSBDX05PUAotCi0vKiBEZWJ1ZyBkZWZpbml0aW9ucyAqLwotI2lmZGVmIERDMzkwX0RFQlVHMAotIyBkZWZpbmUgREVCVUcwKHgpIHgKLSNlbHNlCi0jIGRlZmluZSBERUJVRzAoeCkgQ19OT1AKLSNlbmRpZgotI2lmZGVmIERDMzkwX0RFQlVHMQotIyBkZWZpbmUgREVCVUcxKHgpIHgKLSNlbHNlCi0jIGRlZmluZSBERUJVRzEoeCkgQ19OT1AKLSNlbmRpZgotI2lmZGVmIERDMzkwX0RDQkRFQlVHCi0jIGRlZmluZSBEQ0JERUJVRyh4KSB4Ci0jZWxzZQotIyBkZWZpbmUgRENCREVCVUcoeCkgQ19OT1AKLSNlbmRpZgotI2lmZGVmIERDMzkwX1BBUlNFREVCVUcKLSMgZGVmaW5lIFBBUlNFREVCVUcoeCkgeAotI2Vsc2UKLSMgZGVmaW5lIFBBUlNFREVCVUcoeCkgQ19OT1AKLSNlbmRpZgotI2lmZGVmIERDMzkwX1JFTU9WQUJMRURFQlVHCi0jIGRlZmluZSBSRU1PVkFCTEVERUJVRyh4KSB4Ci0jZWxzZQotIyBkZWZpbmUgUkVNT1ZBQkxFREVCVUcoeCkgQ19OT1AKLSNlbmRpZgotI2RlZmluZSBEQ0JERUJVRzEoeCkgQ19OT1AKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpY2FtLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgotCi0KLSNkZWZpbmUgREMzOTBfQkFOTkVSICJUZWtyYW0gREMzOTAvQU01M0M5NzQiCi0jZGVmaW5lIERDMzkwX1ZFUlNJT04gIjIuMWQgMjAwNC0wNS0yNyIKLQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRDUzQzk3NCAJUENJX0RFVklDRV9JRF9BTURfU0NTSQotCi0jaW5jbHVkZSAidG1zY3NpbS5oIgotCi0KLXN0YXRpYyB2b2lkIGRjMzkwX0RhdGFPdXRfMCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX0RhdGFJbl8wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfQ29tbWFuZF8wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfU3RhdHVzXzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9Nc2dPdXRfMCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX01zZ0luXzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9EYXRhT3V0UGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9EYXRhSW5QaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX0NvbW1hbmRQaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX1N0YXR1c1BoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfTXNnT3V0UGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9Nc2dJblBoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfTm9wXzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9Ob3BfMSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLQotc3RhdGljIHZvaWQgZGMzOTBfU2V0WGZlclJhdGUoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IgKTsKLXN0YXRpYyB2b2lkIGRjMzkwX0Rpc2Nvbm5lY3QoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IgKTsKLXN0YXRpYyB2b2lkIGRjMzkwX1Jlc2VsZWN0KCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9TUkJkb25lKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCICk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9TY3NpUnN0RGV0ZWN0KCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9FbmFibGVNc2dPdXRfQWJvcnQoc3RydWN0IGRjMzkwX2FjYiosIHN0cnVjdCBkYzM5MF9zcmIqKTsKLXN0YXRpYyB2b2lkIGRjMzkwX2R1bXBpbmZvKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpOwotc3RhdGljIHZvaWQgZGMzOTBfUmVzZXREZXZQYXJhbShzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCKTsKLQotc3RhdGljIHUzMglkYzM5MF9sYXN0c3RhdHVzID0gMDsKLXN0YXRpYyB1OAlkYzM5MF9hZGFwdGVyQ250ID0gMDsKLQotc3RhdGljIGludCBkaXNhYmxlX2NsdXN0ZXJpbmc7Ci1tb2R1bGVfcGFyYW0oZGlzYWJsZV9jbHVzdGVyaW5nLCBpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2NsdXN0ZXJpbmcsICJJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyB3aXRoIHlvdXIgZGV2aWNlcywgdHJ5IHNldHRpbmcgdG8gMSIpOwotCi0vKiBTdGFydHVwIHZhbHVlcywgdG8gYmUgb3ZlcnJpZGVuIG9uIHRoZSBjb21tYW5kbGluZSAqLwotc3RhdGljIGludCB0bXNjc2ltW10gPSB7LTIsIC0yLCAtMiwgLTIsIC0yLCAtMn07Ci0KLW1vZHVsZV9wYXJhbV9hcnJheSh0bXNjc2ltLCBpbnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyh0bXNjc2ltLCAiSG9zdCBTQ1NJIElELCBTcGVlZCAoMD0xME1IeiksIERldmljZSBGbGFncywgQWRhcHRlciBGbGFncywgTWF4IFRhZ3MgKGxvZzIodGFncyktMSksIERlbGF5UmVzZXQgKHMpIik7Ci1NT0RVTEVfQVVUSE9SKCJDLkwuIEh1YW5nIC8gS3VydCBHYXJsb2ZmIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlNDU0kgaG9zdCBhZGFwdGVyIGRyaXZlciBmb3IgVGVrcmFtIERDMzkwIGFuZCBvdGhlciBBTUQ1M0M5NzRBIGJhc2VkIFBDSSBTQ1NJIGFkYXB0ZXJzIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgic2Qsc3Isc2csc3QiKTsKLQotc3RhdGljIHZvaWQgKmRjMzkwX3BoYXNlMFtdPXsKLSAgICAgICBkYzM5MF9EYXRhT3V0XzAsCi0gICAgICAgZGMzOTBfRGF0YUluXzAsCi0gICAgICAgZGMzOTBfQ29tbWFuZF8wLAotICAgICAgIGRjMzkwX1N0YXR1c18wLAotICAgICAgIGRjMzkwX05vcF8wLAotICAgICAgIGRjMzkwX05vcF8wLAotICAgICAgIGRjMzkwX01zZ091dF8wLAotICAgICAgIGRjMzkwX01zZ0luXzAsCi0gICAgICAgZGMzOTBfTm9wXzEKLSAgICAgICB9OwotCi1zdGF0aWMgdm9pZCAqZGMzOTBfcGhhc2UxW109ewotICAgICAgIGRjMzkwX0RhdGFPdXRQaGFzZSwKLSAgICAgICBkYzM5MF9EYXRhSW5QaGFzZSwKLSAgICAgICBkYzM5MF9Db21tYW5kUGhhc2UsCi0gICAgICAgZGMzOTBfU3RhdHVzUGhhc2UsCi0gICAgICAgZGMzOTBfTm9wXzAsCi0gICAgICAgZGMzOTBfTm9wXzAsCi0gICAgICAgZGMzOTBfTXNnT3V0UGhhc2UsCi0gICAgICAgZGMzOTBfTXNnSW5QaGFzZSwKLSAgICAgICBkYzM5MF9Ob3BfMQotICAgICAgIH07Ci0KLSNpZmRlZiBEQzM5MF9ERUJVRzEKLXN0YXRpYyBjaGFyKiBkYzM5MF9wMF9zdHJbXSA9IHsKLSAgICAgICAiZGMzOTBfRGF0YU91dF8wIiwKLSAgICAgICAiZGMzOTBfRGF0YUluXzAiLAotICAgICAgICJkYzM5MF9Db21tYW5kXzAiLAotICAgICAgICJkYzM5MF9TdGF0dXNfMCIsCi0gICAgICAgImRjMzkwX05vcF8wIiwKLSAgICAgICAiZGMzOTBfTm9wXzAiLAotICAgICAgICJkYzM5MF9Nc2dPdXRfMCIsCi0gICAgICAgImRjMzkwX01zZ0luXzAiLAotICAgICAgICJkYzM5MF9Ob3BfMSIKLSAgICAgICB9OwotICAgICAKLXN0YXRpYyBjaGFyKiBkYzM5MF9wMV9zdHJbXSA9IHsKLSAgICAgICAiZGMzOTBfRGF0YU91dFBoYXNlIiwKLSAgICAgICAiZGMzOTBfRGF0YUluUGhhc2UiLAotICAgICAgICJkYzM5MF9Db21tYW5kUGhhc2UiLAotICAgICAgICJkYzM5MF9TdGF0dXNQaGFzZSIsCi0gICAgICAgImRjMzkwX05vcF8wIiwKLSAgICAgICAiZGMzOTBfTm9wXzAiLAotICAgICAgICJkYzM5MF9Nc2dPdXRQaGFzZSIsCi0gICAgICAgImRjMzkwX01zZ0luUGhhc2UiLAotICAgICAgICJkYzM5MF9Ob3BfMSIKLSAgICAgICB9OwotI2VuZGlmICAgCi0KLXN0YXRpYyB1OCAgZGMzOTBfZWVwcm9tQnVmW01BWF9BREFQVEVSX05VTV1bRUVfTEVOXTsKLXN0YXRpYyB1OCAgZGMzOTBfY2xvY2tfcGVyaW9kMVtdID0gezQsIDUsIDYsIDcsIDgsIDEwLCAxMywgMjB9Owotc3RhdGljIHU4ICBkYzM5MF9jbG9ja19zcGVlZFtdID0gezEwMCw4MCw2Nyw1Nyw1MCwgNDAsIDMxLCAyMH07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnVuY3Rpb25zIGZvciB0aGUgbWFuYWdlbWVudCBvZiB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyAKLSAqIChEQ0JzLCBTUkJzLCBRdWV1ZWluZykKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIGlubGluZSBkYzM5MF9zdGFydF9zZWdtZW50KHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpwc2dsID0gcFNSQi0+cFNlZ21lbnRMaXN0OwotCi0JLyogc3RhcnQgbmV3IHNnIHNlZ21lbnQgKi8KLQlwU1JCLT5TR0J1c0FkZHIgPSBzZ19kbWFfYWRkcmVzcyhwc2dsKTsKLQlwU1JCLT5TR1RvQmVYZmVyTGVuID0gc2dfZG1hX2xlbihwc2dsKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5saW5lIGRjMzkwX2FkdmFuY2Vfc2VnbWVudChzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1MzIgcmVzaWR1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHhmZXIgPSBwU1JCLT5TR1RvQmVYZmVyTGVuIC0gcmVzaWR1ZTsKLQotCS8qIHhmZXIgbW9yZSBieXRlcyB0cmFuc2ZlcnJlZCAqLwotCXBTUkItPlNHQnVzQWRkciArPSB4ZmVyOwotCXBTUkItPlRvdGFsWGZlcnJlZExlbiArPSB4ZmVyOwotCXBTUkItPlNHVG9CZVhmZXJMZW4gPSByZXNpZHVlOwotCi0JcmV0dXJuIHhmZXI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGMzOTBfZGNiIF9faW5saW5lX18gKmRjMzkwX2ZpbmREQ0IgKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCB1OCBpZCwgdTggbHVuKQotewotICAgc3RydWN0IGRjMzkwX2RjYiogcERDQiA9IHBBQ0ItPnBMaW5rRENCOyBpZiAoIXBEQ0IpIHJldHVybiBOVUxMOwotICAgd2hpbGUgKHBEQ0ItPlRhcmdldElEICE9IGlkIHx8IHBEQ0ItPlRhcmdldExVTiAhPSBsdW4pCi0gICAgIHsKLQlwRENCID0gcERDQi0+cE5leHREQ0I7Ci0JaWYgKHBEQ0IgPT0gcEFDQi0+cExpbmtEQ0IpCi0JICAgICByZXR1cm4gTlVMTDsKLSAgICAgfQotICAgRENCREVCVUcxKCBwcmludGsgKEtFUk5fREVCVUcgIkRDQiAlcCAoJTAyeCwlMDJ4KSBmb3VuZC5cbiIsCVwKLQkJICAgICAgcERDQiwgcERDQi0+VGFyZ2V0SUQsIHBEQ0ItPlRhcmdldExVTikpOwotICAgcmV0dXJuIHBEQ0I7Ci19Ci0KLS8qIEluc2VydCBTUkIgb2luIHRvcCBvZiBmcmVlIGxpc3QgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZGMzOTBfRnJlZV9pbnNlcnQgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gICAgREVCVUcwKHByaW50ayAoIkRDMzkwOiBGcmVlIFNSQiAlcFxuIiwgcFNSQikpOwotICAgIHBTUkItPnBOZXh0U1JCID0gcEFDQi0+cEZyZWVTUkI7Ci0gICAgcEFDQi0+cEZyZWVTUkIgPSBwU1JCOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRjMzkwX0dvaW5nX2FwcGVuZCAoc3RydWN0IGRjMzkwX2RjYiogcERDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQikKLXsKLSAgICBwRENCLT5Hb2luZ1NSQkNudCsrOwotICAgIERFQlVHMChwcmludGsoIkRDMzkwOiBBcHBlbmQgU1JCICVwIHRvIEdvaW5nXG4iLCBwU1JCKSk7Ci0gICAgLyogQXBwZW5kIHRvIHRoZSBsaXN0IG9mIEdvaW5nIGNvbW1hbmRzICovCi0gICAgaWYoIHBEQ0ItPnBHb2luZ1NSQiApCi0JcERDQi0+cEdvaW5nTGFzdC0+cE5leHRTUkIgPSBwU1JCOwotICAgIGVsc2UKLQlwRENCLT5wR29pbmdTUkIgPSBwU1JCOwotCi0gICAgcERDQi0+cEdvaW5nTGFzdCA9IHBTUkI7Ci0gICAgLyogTm8gbmV4dCBvbmUgaW4gc2VudCBsaXN0ICovCi0gICAgcFNSQi0+cE5leHRTUkIgPSBOVUxMOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRjMzkwX0dvaW5nX3JlbW92ZSAoc3RydWN0IGRjMzkwX2RjYiogcERDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQikKLXsKLQlERUJVRzAocHJpbnRrKCJEQzM5MDogUmVtb3ZlIFNSQiAlcCBmcm9tIEdvaW5nXG4iLCBwU1JCKSk7Ci0gICBpZiAocFNSQiA9PSBwRENCLT5wR29pbmdTUkIpCi0JcERDQi0+cEdvaW5nU1JCID0gcFNSQi0+cE5leHRTUkI7Ci0gICBlbHNlCi0gICAgIHsKLQlzdHJ1Y3QgZGMzOTBfc3JiKiBwc3JiID0gcERDQi0+cEdvaW5nU1JCOwotCXdoaWxlIChwc3JiICYmIHBzcmItPnBOZXh0U1JCICE9IHBTUkIpCi0JICBwc3JiID0gcHNyYi0+cE5leHRTUkI7Ci0JaWYgKCFwc3JiKSAKLQkgIHsgcHJpbnRrIChLRVJOX0VSUiAiREMzOTA6IFJlbW92ZSBub24tZXguIFNSQiAlcCBmcm9tIEdvaW5nIVxuIiwgcFNSQik7IHJldHVybjsgfQotCXBzcmItPnBOZXh0U1JCID0gcFNSQi0+cE5leHRTUkI7Ci0JaWYgKHBTUkIgPT0gcERDQi0+cEdvaW5nTGFzdCkKLQkgIHBEQ0ItPnBHb2luZ0xhc3QgPSBwc3JiOwotICAgICB9Ci0gICBwRENCLT5Hb2luZ1NSQkNudC0tOwotfQotCi1zdGF0aWMgc3RydWN0IHNjYXR0ZXJsaXN0KiBkYzM5MF9zZ19idWlsZF9zaW5nbGUoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdm9pZCAqYWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKLXsKLQlzZ19pbml0X29uZShzZywgYWRkciwgbGVuZ3RoKTsKLQlyZXR1cm4gc2c7Ci19Ci0KLS8qIENyZWF0ZSBwY2kgbWFwcGluZyAqLwotc3RhdGljIGludCBkYzM5MF9wY2lfbWFwIChzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotCWludCBlcnJvciA9IDA7Ci0Jc3RydWN0IHNjc2lfY21uZCAqcGNtZCA9IHBTUkItPnBjbWQ7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwU1JCLT5wU1JCRENCLT5wRENCQUNCLT5wZGV2OwotCWRjMzkwX2NtZF9zY3BfdCogY21kcCA9ICgoZGMzOTBfY21kX3NjcF90KikoJnBjbWQtPlNDcCkpOwotCi0JLyogTWFwIHNlbnNlIGJ1ZmZlciAqLwotCWlmIChwU1JCLT5TUkJGbGFnICYgQVVUT19SRVFTRU5TRSkgewotCQlwU1JCLT5wU2VnbWVudExpc3QJPSBkYzM5MF9zZ19idWlsZF9zaW5nbGUoJnBTUkItPlNlZ21lbnR4LCBwY21kLT5zZW5zZV9idWZmZXIsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7Ci0JCXBTUkItPlNHY291bnQJCT0gcGNpX21hcF9zZyhwZGV2LCBwU1JCLT5wU2VnbWVudExpc3QsIDEsCi0JCQkJCQkgICAgIERNQV9GUk9NX0RFVklDRSk7Ci0JCWNtZHAtPnNhdmVkX2RtYV9oYW5kbGUJPSBzZ19kbWFfYWRkcmVzcyhwU1JCLT5wU2VnbWVudExpc3QpOwotCi0JCS8qIFRPRE86IGVycm9yIGhhbmRsaW5nICovCi0JCWlmIChwU1JCLT5TR2NvdW50ICE9IDEpCi0JCQllcnJvciA9IDE7Ci0JCURFQlVHMShwcmludGsoIiVzKCk6IE1hcHBlZCBzZW5zZSBidWZmZXIgJXAgYXQgJXhcbiIsIF9fZnVuY19fLCBwY21kLT5zZW5zZV9idWZmZXIsIGNtZHAtPnNhdmVkX2RtYV9oYW5kbGUpKTsKLQkvKiBNYXAgU0cgbGlzdCAqLwotCX0gZWxzZSBpZiAoc2NzaV9zZ19jb3VudChwY21kKSkgewotCQlpbnQgbnNlZzsKLQotCQluc2VnID0gc2NzaV9kbWFfbWFwKHBjbWQpOwotCi0JCXBTUkItPnBTZWdtZW50TGlzdAk9IHNjc2lfc2dsaXN0KHBjbWQpOwotCQlwU1JCLT5TR2NvdW50CQk9IG5zZWc7Ci0KLQkJLyogVE9ETzogZXJyb3IgaGFuZGxpbmcgKi8KLQkJaWYgKG5zZWcgPCAwKQotCQkJZXJyb3IgPSAxOwotCQlERUJVRzEocHJpbnRrKCIlcygpOiBNYXBwZWQgU0cgJXAgd2l0aCAlZCAoJWQpIGVsZW1lbnRzXG4iLFwKLQkJCSAgICAgIF9fZnVuY19fLCBzY3NpX3NnbGlzdChwY21kKSwgbnNlZywgc2NzaV9zZ19jb3VudChwY21kKSkpOwotCS8qIE1hcCBzaW5nbGUgc2VnbWVudCAqLwotCX0gZWxzZQotCQlwU1JCLT5TR2NvdW50ID0gMDsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotLyogUmVtb3ZlIHBjaSBtYXBwaW5nICovCi1zdGF0aWMgdm9pZCBkYzM5MF9wY2lfdW5tYXAgKHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0Jc3RydWN0IHNjc2lfY21uZCAqcGNtZCA9IHBTUkItPnBjbWQ7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwU1JCLT5wU1JCRENCLT5wRENCQUNCLT5wZGV2OwotCURFQlVHMShkYzM5MF9jbWRfc2NwX3QqIGNtZHAgPSAoKGRjMzkwX2NtZF9zY3BfdCopKCZwY21kLT5TQ3ApKSk7Ci0KLQlpZiAocFNSQi0+U1JCRmxhZykgewotCQlwY2lfdW5tYXBfc2cocGRldiwgJnBTUkItPlNlZ21lbnR4LCAxLCBETUFfRlJPTV9ERVZJQ0UpOwotCQlERUJVRzEocHJpbnRrKCIlcygpOiBVbm1hcHBlZCBzZW5zZSBidWZmZXIgYXQgJXhcbiIsIF9fZnVuY19fLCBjbWRwLT5zYXZlZF9kbWFfaGFuZGxlKSk7Ci0JfSBlbHNlIHsKLQkJc2NzaV9kbWFfdW5tYXAocGNtZCk7Ci0JCURFQlVHMShwcmludGsoIiVzKCk6IFVubWFwcGVkIFNHIGF0ICVwIHdpdGggJWQgZWxlbWVudHNcbiIsCi0JCQkgICAgICBfX2Z1bmNfXywgc2NzaV9zZ2xpc3QocGNtZCksIHNjc2lfc2dfY291bnQocGNtZCkpKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18KLWRjMzkwX2ZyZWV0YWcgKHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0JaWYgKHBTUkItPlRhZ051bWJlciAhPSBTQ1NJX05PX1RBRykgewotCQlwRENCLT5UYWdNYXNrICY9IH4oMSA8PCBwU1JCLT5UYWdOdW1iZXIpOyAgIC8qIGZyZWUgdGFnIG1hc2sgKi8KLQkJcFNSQi0+VGFnTnVtYmVyID0gU0NTSV9OT19UQUc7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQKLWRjMzkwX1N0YXJ0U0NTSSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX2RjYiogcERDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiApCi17Ci0gICAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCA9IHBTUkItPnBjbWQ7Ci0gICAgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gc2NtZC0+ZGV2aWNlOwotICAgIHU4IGNtZCwgZGlzY19hbGxvd2VkLCB0cnlfc3luY19uZWdvOwotICAgIGNoYXIgdGFnWzJdOwotCi0gICAgcFNSQi0+U2NzaVBoYXNlID0gU0NTSV9OT1AwOwotCi0gICAgaWYgKHBBQ0ItPkNvbm5lY3RlZCkKLSAgICB7Ci0JLy8gU2hvdWxkIG5vdCBoYXBwZW4gbm9ybWFsbHkKLQlwcmludGsgKEtFUk5fV0FSTklORyAiREMzOTA6IENhbid0IHNlbGVjdCB3aGVuIGNvbm5lY3RlZCEgKCUwOHgsJTAyeClcbiIsCi0JCXBTUkItPlNSQlN0YXRlLCBwU1JCLT5TUkJGbGFnKTsKLQlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9SRUFEWTsKLQlwQUNCLT5TZWxDb25uKys7Ci0JcmV0dXJuIDE7Ci0gICAgfQotICAgIGlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgcEFDQi0+bGFzdF9yZXNldCkpCi0gICAgewotCURFQlVHMChwcmludGsgKCJEQzM5MDogV2Ugd2VyZSBqdXN0IHJlc2V0IGFuZCBkb24ndCBhY2NlcHQgY29tbWFuZHMgeWV0IVxuIikpOwotCXJldHVybiAxOwotICAgIH0KLSAgICAvKiBLRzogTW92ZWQgcGNpIG1hcHBpbmcgaGVyZSAqLwotICAgIGRjMzkwX3BjaV9tYXAocFNSQik7Ci0gICAgLyogVE9ETzogZXJyb3IgaGFuZGxpbmcgKi8KLSAgICBEQzM5MF93cml0ZTggKFNjc2lfRGVzdF9JRCwgcERDQi0+VGFyZ2V0SUQpOwotICAgIERDMzkwX3dyaXRlOCAoU3luY19QZXJpb2QsIHBEQ0ItPlN5bmNQZXJpb2QpOwotICAgIERDMzkwX3dyaXRlOCAoU3luY19PZmZzZXQsIHBEQ0ItPlN5bmNPZmZzZXQpOwotICAgIERDMzkwX3dyaXRlOCAoQ3RybFJlZzEsIHBEQ0ItPkN0cmxSMSk7Ci0gICAgREMzOTBfd3JpdGU4IChDdHJsUmVnMywgcERDQi0+Q3RybFIzKTsKLSAgICBEQzM5MF93cml0ZTggKEN0cmxSZWc0LCBwRENCLT5DdHJsUjQpOwotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwkJLyogRmx1c2ggRklGTyAqLwotICAgIERFQlVHMShwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFN0YXJ0IFNDU0kgY29tbWFuZDogJTAyeCAoU3luYzolMDJ4KVxuIixcCi0gICAgICAgICAgICBzY21kLT5jbW5kWzBdLCBwRENCLT5TeW5jTW9kZSkpOwotCi0gICAgLyogRG9uJ3QgZGlzY29ubmVjdCBvbiBBVVRPX1JFUVNFTlNFLCBjYXVzZSBpdCBtaWdodCBiZSBhbgotICAgICAqIENvbnRpbmdlbnQgQWxsZWdpYW5jZSBDb25kaXRpb24gKDYuNiksIHdoZXJlIG5vIHRhZ3Mgc2hvdWxkIGJlIHVzZWQuCi0gICAgICogQWxsIG90aGVyIGhhdmUgdG8gYmUgYWxsb3dlZCB0byBkaXNjb25uZWN0IHRvIHByZXZlbnQgSW5jb3JyZWN0IAotICAgICAqIEluaXRpYXRvciBDb25uZWN0aW9uICg2LjguMi82LjUuMikgKi8KLSAgICAvKiBDaGFuZ2VkIEtHLCA5OS8wNi8wNiAqLwotICAgIGlmICghIChwU1JCLT5TUkJGbGFnICYgQVVUT19SRVFTRU5TRSkpCi0JZGlzY19hbGxvd2VkID0gcERDQi0+RGV2TW9kZSAmIEVOX0RJU0NPTk5FQ1RfOwotICAgIGVsc2UKLQlkaXNjX2FsbG93ZWQgPSAwOwotCi0gICAgaWYgKChwRENCLT5TeW5jTW9kZSAmIFNZTkNfRU5BQkxFKSAmJiBwRENCLT5UYXJnZXRMVU4gPT0gMCAmJiBzZGV2LT5zZHRyICYmCi0JKCgoc2NtZC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFIHx8IChwU1JCLT5TUkJGbGFnICYgQVVUT19SRVFTRU5TRSkpICYmCi0JICAhKHBEQ0ItPlN5bmNNb2RlICYgU1lOQ19ORUdPX0RPTkUpKSB8fCBzY21kLT5jbW5kWzBdID09IElOUVVJUlkpKQotICAgICAgdHJ5X3N5bmNfbmVnbyA9IDE7Ci0gICAgZWxzZQotICAgICAgdHJ5X3N5bmNfbmVnbyA9IDA7Ci0KLSAgICBwU1JCLT5Nc2dDbnQgPSAwOwotICAgIGNtZCA9IFNFTF9XX0FUTjsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lGaWZvLCBJREVOVElGWShkaXNjX2FsbG93ZWQsIHBEQ0ItPlRhcmdldExVTikpOwotICAgIC8qIENoYW5nZSA5OS8wNS8zMTogRG9uJ3QgdXNlIHRhZ3Mgd2hlbiBub3QgZGlzY29ubmVjdGluZyAoQlVTWSkgKi8KLSAgICBpZiAoKHBEQ0ItPlN5bmNNb2RlICYgRU5fVEFHX1FVRVVFSU5HKSAmJiBkaXNjX2FsbG93ZWQgJiYgc2NzaV9wb3B1bGF0ZV90YWdfbXNnKHNjbWQsIHRhZykpIHsKLQlEQzM5MF93cml0ZTgoU2NzaUZpZm8sIHRhZ1swXSk7Ci0JcERDQi0+VGFnTWFzayB8PSAxIDw8IHRhZ1sxXTsKLQlwU1JCLT5UYWdOdW1iZXIgPSB0YWdbMV07Ci0JREMzOTBfd3JpdGU4KFNjc2lGaWZvLCB0YWdbMV0pOwotCURFQlVHMShwcmludGsoS0VSTl9JTkZPICJEQzM5MDogU2VsZWN0IHcvRGlzQ24gZm9yIFNSQiAlcCwgYmxvY2sgdGFnICUwMnhcbiIsIHBTUkIsIHRhZ1sxXSkpOwotCWNtZCA9IFNFTF9XX0FUTjM7Ci0gICAgfSBlbHNlIHsKLQkvKiBObyBUYWdRICovCi0vL25vX3RhZzoKLQlERUJVRzEocHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IFNlbGVjdCB3JXMvRGlzQ24gZm9yIFNSQiAlcCwgTm8gVGFnUVxuIiwgZGlzY19hbGxvd2VkID8gIiIgOiAibyIsIHBTUkIpKTsKLSAgICB9Ci0KLSAgICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9TVEFSVF87Ci0KLSAgICBpZiAodHJ5X3N5bmNfbmVnbykKLSAgICAgIHsgCi0JdTggU3luY19PZmYgPSBwRENCLT5TeW5jT2Zmc2V0OwotICAgICAgICBERUJVRzAocHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBORVcgU3luYyBOZWdvIGNvZGUgdHJpZ2dlcmVkICglaSAlaSlcbiIsIHBEQ0ItPlRhcmdldElELCBwRENCLT5UYXJnZXRMVU4pKTsKLQlwU1JCLT5Nc2dPdXRCdWZbMF0gPSBFWFRFTkRFRF9NRVNTQUdFOwotCXBTUkItPk1zZ091dEJ1ZlsxXSA9IDM7Ci0JcFNSQi0+TXNnT3V0QnVmWzJdID0gRVhURU5ERURfU0RUUjsKLQlwU1JCLT5Nc2dPdXRCdWZbM10gPSBwRENCLT5OZWdvUGVyaW9kOwotCWlmICghKFN5bmNfT2ZmICYgMHgwZikpIFN5bmNfT2ZmID0gU1lOQ19ORUdPX09GRlNFVDsKLQlwU1JCLT5Nc2dPdXRCdWZbNF0gPSBTeW5jX09mZjsKLQlwU1JCLT5Nc2dDbnQgPSA1OwotCS8vcFNSQi0+U1JCU3RhdGUgPSBTUkJfTVNHT1VUXzsKLQlwU1JCLT5TUkJTdGF0ZSB8PSBET19TWU5DX05FR087Ci0JY21kID0gU0VMX1dfQVROX1NUT1A7Ci0gICAgICB9Ci0KLSAgICAvKiBDb21tYW5kIGlzIHdyaXR0ZW4gaW4gQ29tbWFuZFBoYXNlLCBpZiBTRUxfV19BVE5fU1RPUCAuLi4gKi8KLSAgICBpZiAoY21kICE9IFNFTF9XX0FUTl9TVE9QKQotICAgICAgewotCWlmKCBwU1JCLT5TUkJGbGFnICYgQVVUT19SRVFTRU5TRSApCi0JICB7Ci0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIFJFUVVFU1RfU0VOU0UpOwotCSAgICBEQzM5MF93cml0ZTggKFNjc2lGaWZvLCBwRENCLT5UYXJnZXRMVU4gPDwgNSk7Ci0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIDApOwotCSAgICBEQzM5MF93cml0ZTggKFNjc2lGaWZvLCAwKTsKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgMCk7Ci0JICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIkRDMzkwOiBBdXRvUmVxU2Vuc2UgIVxuIikpOwotCSAgfQotCWVsc2UJLyogd3JpdGUgY21uZCB0byBidXMgKi8gCi0JICB7Ci0JICAgIHU4ICpwdHI7IHU4IGk7Ci0JICAgIHB0ciA9ICh1OCAqKXNjbWQtPmNtbmQ7Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBzY21kLT5jbWRfbGVuOyBpKyspCi0JICAgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgKihwdHIrKykpOwotCSAgfQotICAgICAgfQotICAgIERFQlVHMChpZiAocEFDQi0+cEFjdGl2ZURDQikJXAotCSAgIHByaW50ayAoS0VSTl9XQVJOSU5HICJEQzM5MDogQWN0aXZlRENCICE9IDBcbiIpKTsKLSAgICBERUJVRzAoaWYgKHBEQ0ItPnBBY3RpdmVTUkIpCVwKLQkgICBwcmludGsgKEtFUk5fV0FSTklORyAiREMzOTA6IEFjdGl2ZVNSQiAhPSAwXG4iKSk7Ci0gICAgLy9EQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCk7Ci0gICAgaWYgKERDMzkwX3JlYWQ4IChTY3NpX1N0YXR1cykgJiBJTlRFUlJVUFQpCi0gICAgewotCWRjMzkwX2ZyZWV0YWcgKHBEQ0IsIHBTUkIpOwotCURFQlVHMChwcmludGsgKCJEQzM5MDogSW50ZXJydXB0IGR1cmluZyBTdGFydCBTQ1NJICh0YXJnZXQgJTAyaS0lMDJpKVxuIiwKLQkJICAgICAgIHNjbWQtPmRldmljZS0+aWQsICh1OClzY21kLT5kZXZpY2UtPmx1bikpOwotCXBTUkItPlNSQlN0YXRlID0gU1JCX1JFQURZOwotCS8vREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0JcEFDQi0+U2VsTG9zdCsrOwotCXJldHVybiAxOwotICAgIH0KLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIGNtZCk7Ci0gICAgcEFDQi0+cEFjdGl2ZURDQiA9IHBEQ0I7Ci0gICAgcERDQi0+cEFjdGl2ZVNSQiA9IHBTUkI7Ci0gICAgcEFDQi0+Q29ubmVjdGVkID0gMTsKLSAgICBwU1JCLT5TY3NpUGhhc2UgPSBTQ1NJX05PUDE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXwotZGMzOTBfSW52YWxpZENtZChzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCKQotewotCWlmIChwQUNCLT5wQWN0aXZlRENCLT5wQWN0aXZlU1JCLT5TUkJTdGF0ZSAmIChTUkJfU1RBUlRfIHwgU1JCX01TR09VVCkpCi0JCURDMzkwX3dyaXRlOChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci19Ci0KLQotc3RhdGljIGlycXJldHVybl90IF9faW5saW5lX18KLURDMzkwX0ludGVycnVwdCh2b2lkICpkZXZfaWQpCi17Ci0gICAgc3RydWN0IGRjMzkwX2FjYiAqcEFDQiA9IGRldl9pZDsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiICpwRENCOwotICAgIHN0cnVjdCBkYzM5MF9zcmIgKnBTUkI7Ci0gICAgdTggIHNzdGF0dXM9MDsKLSAgICB1OCAgcGhhc2U7Ci0gICAgdm9pZCAgICgqc3RhdGVWKSggc3RydWN0IGRjMzkwX2FjYiosIHN0cnVjdCBkYzM5MF9zcmIqLCB1OCAqKTsKLSAgICB1OCAgaXN0YXRlLCBpc3RhdHVzOwotCi0gICAgc3N0YXR1cyA9IERDMzkwX3JlYWQ4IChTY3NpX1N0YXR1cyk7Ci0gICAgaWYoICEoc3N0YXR1cyAmIElOVEVSUlVQVCkgKQotCXJldHVybiBJUlFfTk9ORTsKLQotICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgInNzdGF0dXM9JTAyeCwiLCBzc3RhdHVzKSk7Ci0KLSAgICAvL0RDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgV1JUX0VSQVNFX0RNQV9TVEFUIHwgRU5fSU5UX09OX1BDSV9BQk9SVCk7Ci0gICAgLy9kc3RhdHVzID0gREMzOTBfcmVhZDggKERNQV9TdGF0dXMpOwotICAgIC8vREMzOTBfd3JpdGUzMiAoRE1BX1Njc2lCdXNDdHJsLCBFTl9JTlRfT05fUENJX0FCT1JUKTsKLQotICAgIHNwaW5fbG9ja19pcnEocEFDQi0+cFNjc2lIb3N0LT5ob3N0X2xvY2spOwotCi0gICAgaXN0YXRlID0gREMzOTBfcmVhZDggKEludGVybl9TdGF0ZSk7Ci0gICAgaXN0YXR1cyA9IERDMzkwX3JlYWQ4IChJTlRfU3RhdHVzKTsgLyogVGhpcyBjbGVhcnMgU2NzaV9TdGF0dXMsIEludGVybl9TdGF0ZSBhbmQgSU5UX1N0YXR1cyAhICovCi0KLSAgICBERUJVRzEocHJpbnRrIChLRVJOX0lORk8gIklzdGF0dXMoUmVzLEludixEaXMsU2VydixTdWNjLFJlUyxTZWxBLFNlbCk9JTAyeCwiLGlzdGF0dXMpKTsKLSAgICBkYzM5MF9sYXN0c3RhdHVzICY9IH4weDAwZmZmZmZmOwotICAgIGRjMzkwX2xhc3RzdGF0dXMgfD0gLyogZHN0YXR1czw8MjQgfCAqLyBzc3RhdHVzPDwxNiB8IGlzdGF0ZTw8OCB8IGlzdGF0dXM7Ci0KLSAgICBpZiAoc3N0YXR1cyAmIElMTEVHQUxfT1BfRVJSKQotICAgIHsKLQlwcmludGsgKCJEQzM5MDogSWxsZWdhbCBPcGVyYXRpb24gZGV0ZWN0ZWQgKCUwOHgpIVxuIiwgZGMzOTBfbGFzdHN0YXR1cyk7Ci0JZGMzOTBfZHVtcGluZm8gKHBBQ0IsIHBBQ0ItPnBBY3RpdmVEQ0IsIHBBQ0ItPnBBY3RpdmVEQ0ItPnBBY3RpdmVTUkIpOwotICAgIH0KLQkKLSAgICBlbHNlIGlmIChpc3RhdHVzICYgIElOVkFMSURfQ01EKQotICAgIHsKLQlwcmludGsgKCJEQzM5MDogSW52YWxpZCBDb21tYW5kIGRldGVjdGVkICglMDh4KSFcbiIsIGRjMzkwX2xhc3RzdGF0dXMpOwotCWRjMzkwX0ludmFsaWRDbWQoIHBBQ0IgKTsKLQlnb3RvIHVubG9jazsKLSAgICB9Ci0KLSAgICBpZiAoaXN0YXR1cyAmICBTQ1NJX1JFU0VUKQotICAgIHsKLQlkYzM5MF9TY3NpUnN0RGV0ZWN0KCBwQUNCICk7Ci0JZ290byB1bmxvY2s7Ci0gICAgfQotCi0gICAgaWYgKGlzdGF0dXMgJiAgRElTQ09OTkVDVEVEKQotICAgIHsKLQlkYzM5MF9EaXNjb25uZWN0KCBwQUNCICk7Ci0JZ290byB1bmxvY2s7Ci0gICAgfQotCi0gICAgaWYgKGlzdGF0dXMgJiAgUkVTRUxFQ1RFRCkKLSAgICB7Ci0JZGMzOTBfUmVzZWxlY3QoIHBBQ0IgKTsKLQlnb3RvIHVubG9jazsKLSAgICB9Ci0KLSAgICBlbHNlIGlmIChpc3RhdHVzICYgKFNFTEVDVEVEIHwgU0VMX0FUVEVOVElPTikpCi0gICAgewotCXByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBUYXJnZXQgbW9kZSBub3Qgc3VwcG9ydGVkIVxuIik7Ci0JZ290byB1bmxvY2s7Ci0gICAgfQotCi0gICAgaWYgKGlzdGF0dXMgJiAoU1VDQ0VTU0ZVTF9PUHxTRVJWSUNFX1JFUVVFU1QpICkKLSAgICB7Ci0JcERDQiA9IHBBQ0ItPnBBY3RpdmVEQ0I7Ci0JaWYgKCFwRENCKQotCXsKLQkJcHJpbnRrIChLRVJOX0VSUiAiREMzOTA6IFN1Yy4gb3AvIFNlcnYuIHJlcTogcEFjdGl2ZURDQiA9IDAhXG4iKTsKLQkJZ290byB1bmxvY2s7Ci0JfQotCXBTUkIgPSBwRENCLT5wQWN0aXZlU1JCOwotCWlmKCBwRENCLT5EQ0JGbGFnICYgQUJPUlRfREVWXyApCi0JICBkYzM5MF9FbmFibGVNc2dPdXRfQWJvcnQgKHBBQ0IsIHBTUkIpOwotCi0JcGhhc2UgPSBwU1JCLT5TY3NpUGhhc2U7Ci0JREVCVUcxKHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogWyVpXSVzKDApICglMDJ4KVxuIiwgcGhhc2UsIGRjMzkwX3AwX3N0cltwaGFzZV0sIHNzdGF0dXMpKTsKLQlzdGF0ZVYgPSAodm9pZCAqKSBkYzM5MF9waGFzZTBbcGhhc2VdOwotCSggKnN0YXRlViApKCBwQUNCLCBwU1JCLCAmc3N0YXR1cyApOwotCi0JcFNSQi0+U2NzaVBoYXNlID0gc3N0YXR1cyAmIDc7Ci0JcGhhc2UgPSAodTgpIHNzdGF0dXMgJiA3OwotCURFQlVHMShwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFslaV0lcygxKSAoJTAyeClcbiIsIHBoYXNlLCBkYzM5MF9wMV9zdHJbcGhhc2VdLCBzc3RhdHVzKSk7Ci0Jc3RhdGVWID0gKHZvaWQgKikgZGMzOTBfcGhhc2UxW3BoYXNlXTsKLQkoICpzdGF0ZVYgKSggcEFDQiwgcFNSQiwgJnNzdGF0dXMgKTsKLSAgICB9Ci0KLSB1bmxvY2s6Ci0gICAgc3Bpbl91bmxvY2tfaXJxKHBBQ0ItPnBTY3NpSG9zdC0+aG9zdF9sb2NrKTsKLSAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBkb19EQzM5MF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotICAgIGlycXJldHVybl90IHJldDsKLSAgICBERUJVRzEocHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBJcnEgKCVpKSBjYXVnaHQ6ICIsIGlycSkpOwotICAgIC8qIExvY2tpbmcgaXMgZG9uZSBpbiBEQzM5MF9JbnRlcnJ1cHQgKi8KLSAgICByZXQgPSBEQzM5MF9JbnRlcnJ1cHQoZGV2X2lkKTsKLSAgICBERUJVRzEocHJpbnRrICgiLi4gSVJRIHJldHVybmVkXG4iKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX0RhdGFPdXRfMChzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0gICAgdTggICBzc3RhdHVzOwotICAgIHUzMiAgUmVzaWRDbnQ7Ci0gICAgdTggICBkc3RhdGUgPSAwOwotCi0gICAgc3N0YXR1cyA9ICpwc3N0YXR1czsKLQotICAgIGlmKCAhKHBTUkItPlNSQlN0YXRlICYgU1JCX1hGRVJQQUQpICkKLSAgICB7Ci0JaWYoIHNzdGF0dXMgJiAoUEFSSVRZX0VSUiB8IElMTEVHQUxfT1BfRVJSKSApCi0JICAgIHBTUkItPlNSQlN0YXR1cyB8PSBQQVJJVFlfRVJST1I7Ci0KLQlpZiggc3N0YXR1cyAmIENPVU5UXzJfWkVSTyApCi0JewotCSAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgSFo7Ci0KLQkgICAgLyogRnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIElTUiB3aXRoIHRoZSBob3N0X2xvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotCSAgICBpZiAocFNSQi0+U0dUb0JlWGZlckxlbikKLQkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpICYmICEoKGRzdGF0ZSA9IERDMzkwX3JlYWQ4IChETUFfU3RhdHVzKSkgJiBETUFfWEZFUl9ET05FKSkgewotCQkgICAgc3Bpbl91bmxvY2tfaXJxKHBBQ0ItPnBTY3NpSG9zdC0+aG9zdF9sb2NrKTsKLQkJICAgIHVkZWxheSg1MCk7Ci0JCSAgICBzcGluX2xvY2tfaXJxKHBBQ0ItPnBTY3NpSG9zdC0+aG9zdF9sb2NrKTsKLQkJfQotCSAgICBpZiAoIXRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQotCQlwcmludGsgKEtFUk5fQ1JJVCAiREMzOTA6IERlYWRsb2NrIGluIERhdGFPdXRfMDogRE1BIGFib3J0ZWQgdW5maW5pc2hlZDogJTA2eCBieXRlcyByZW1haW4hIVxuIiwKLQkJCURDMzkwX3JlYWQzMiAoRE1BX1drX0J5dGVDbnRyKSk7Ci0JICAgIGRjMzkwX2xhc3RzdGF0dXMgJj0gfjB4ZmYwMDAwMDA7Ci0JICAgIGRjMzkwX2xhc3RzdGF0dXMgfD0gZHN0YXRlIDw8IDI0OwotCSAgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gKz0gcFNSQi0+U0dUb0JlWGZlckxlbjsKLQkgICAgcFNSQi0+U0dJbmRleCsrOwotCSAgICBpZiggcFNSQi0+U0dJbmRleCA8IHBTUkItPlNHY291bnQgKQotCSAgICB7Ci0JCXBTUkItPnBTZWdtZW50TGlzdCsrOwotCi0JCWRjMzkwX3N0YXJ0X3NlZ21lbnQocFNSQik7Ci0JICAgIH0KLQkgICAgZWxzZQotCQlwU1JCLT5TR1RvQmVYZmVyTGVuID0gMDsKLQl9Ci0JZWxzZQotCXsKLQkgICAgUmVzaWRDbnQgPSAoKHUzMikgREMzOTBfcmVhZDggKEN1cnJlbnRfRmlmbykgJiAweDFmKSArCi0JCSAgICAoKCh1MzIpIERDMzkwX3JlYWQ4IChDdGNSZWdfSGlnaCkgPDwgMTYpIHwKLQkJICAgICAoKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19NaWQpIDw8IDgpIHwKLQkJICAgICAodTMyKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX0xvdykpOwotCi0JICAgIGRjMzkwX2FkdmFuY2Vfc2VnbWVudChwU1JCLCBSZXNpZENudCk7Ci0JfQotICAgIH0KLSAgICBpZiAoKCpwc3N0YXR1cyAmIDcpICE9IFNDU0lfREFUQV9PVVQpCi0gICAgewotCSAgICBEQzM5MF93cml0ZTggKERNQV9DbWQsIFdSSVRFX0RJUkVDVElPTitETUFfSURMRV9DTUQpOwotCSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsKLSAgICB9CSAgICAKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX0RhdGFJbl8wKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICB1OCAgIHNzdGF0dXMsIHJlc2lkdWFsLCBidmFsOwotICAgIHUzMiAgUmVzaWRDbnQsIGk7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHhmZXJDbnQ7Ci0KLSAgICBzc3RhdHVzID0gKnBzc3RhdHVzOwotCi0gICAgaWYoICEocFNSQi0+U1JCU3RhdGUgJiBTUkJfWEZFUlBBRCkgKQotICAgIHsKLQlpZiggc3N0YXR1cyAmIChQQVJJVFlfRVJSIHwgSUxMRUdBTF9PUF9FUlIpKQotCSAgICBwU1JCLT5TUkJTdGF0dXMgfD0gUEFSSVRZX0VSUk9SOwotCi0JaWYoIHNzdGF0dXMgJiBDT1VOVF8yX1pFUk8gKQotCXsKLQkgICAgaW50IGRzdGF0ZSA9IDA7Ci0JICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBIWjsKLQotCSAgICAvKiBGdW5jdGlvbiBjYWxsZWQgZnJvbSB0aGUgSVNSIHdpdGggdGhlIGhvc3RfbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCi0JICAgIGlmIChwU1JCLT5TR1RvQmVYZmVyTGVuKQotCQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkgJiYgISgoZHN0YXRlID0gREMzOTBfcmVhZDggKERNQV9TdGF0dXMpKSAmIERNQV9YRkVSX0RPTkUpKSB7Ci0JCSAgICBzcGluX3VubG9ja19pcnEocEFDQi0+cFNjc2lIb3N0LT5ob3N0X2xvY2spOwotCQkgICAgdWRlbGF5KDUwKTsKLQkJICAgIHNwaW5fbG9ja19pcnEocEFDQi0+cFNjc2lIb3N0LT5ob3N0X2xvY2spOwotCQl9Ci0JICAgIGlmICghdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKLQkJcHJpbnRrIChLRVJOX0NSSVQgIkRDMzkwOiBEZWFkbG9jayBpbiBEYXRhSW5fMDogRE1BIGFib3J0ZWQgdW5maW5pc2hlZDogJTA2eCBieXRlcyByZW1haW4hIVxuIiwKLQkJCURDMzkwX3JlYWQzMiAoRE1BX1drX0J5dGVDbnRyKSk7Ci0JCXByaW50ayAoS0VSTl9DUklUICJEQzM5MDogRGF0YUluXzA6IERNQSBTdGF0ZTogJWlcbiIsIGRzdGF0ZSk7Ci0JICAgIH0KLQkgICAgZGMzOTBfbGFzdHN0YXR1cyAmPSB+MHhmZjAwMDAwMDsKLQkgICAgZGMzOTBfbGFzdHN0YXR1cyB8PSBkc3RhdGUgPDwgMjQ7Ci0JICAgIERFQlVHMShSZXNpZENudCA9ICgodW5zaWduZWQgbG9uZykgREMzOTBfcmVhZDggKEN0Y1JlZ19IaWdoKSA8PCAxNikJXAotCQkrICgodW5zaWduZWQgbG9uZykgREMzOTBfcmVhZDggKEN0Y1JlZ19NaWQpIDw8IDgpCQlcCi0JCSsgKCh1bnNpZ25lZCBsb25nKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX0xvdykpKTsKLQkgICAgREVCVUcxKHByaW50ayAoS0VSTl9ERUJVRyAiQ291bnRfMl9aZXJvIChSZXNpZENudD0ldSxUb0JlWGZlcj0lbHUpLCIsIFJlc2lkQ250LCBwU1JCLT5TR1RvQmVYZmVyTGVuKSk7Ci0KLQkgICAgREMzOTBfd3JpdGU4IChETUFfQ21kLCBSRUFEX0RJUkVDVElPTitETUFfSURMRV9DTUQpOwotCi0JICAgIHBTUkItPlRvdGFsWGZlcnJlZExlbiArPSBwU1JCLT5TR1RvQmVYZmVyTGVuOwotCSAgICBwU1JCLT5TR0luZGV4Kys7Ci0JICAgIGlmKCBwU1JCLT5TR0luZGV4IDwgcFNSQi0+U0djb3VudCApCi0JICAgIHsKLQkJcFNSQi0+cFNlZ21lbnRMaXN0Kys7Ci0KLQkJZGMzOTBfc3RhcnRfc2VnbWVudChwU1JCKTsKLQkgICAgfQotCSAgICBlbHNlCi0JCXBTUkItPlNHVG9CZVhmZXJMZW4gPSAwOwotCX0KLQllbHNlCS8qIHBoYXNlIGNoYW5nZWQgKi8KLQl7Ci0JICAgIHJlc2lkdWFsID0gMDsKLQkgICAgYnZhbCA9IERDMzkwX3JlYWQ4IChDdXJyZW50X0ZpZm8pOwotCSAgICB3aGlsZSggYnZhbCAmIDB4MWYgKQotCSAgICB7Ci0JCURFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIkNoZWNrIGZvciByZXNpZHVhbHMsIikpOwotCQlpZiggKGJ2YWwgJiAweDFmKSA9PSAxICkKLQkJewotCQkgICAgZm9yKGk9MDsgaSA8IDB4MTAwOyBpKyspCi0JCSAgICB7Ci0JCQlidmFsID0gREMzOTBfcmVhZDggKEN1cnJlbnRfRmlmbyk7Ci0JCQlpZiggIShidmFsICYgMHgxZikgKQotCQkJICAgIGdvdG8gZGluXzE7Ci0JCQllbHNlIGlmKCBpID09IDB4MGZmICkKLQkJCXsKLQkJCSAgICByZXNpZHVhbCA9IDE7ICAgLyogOzEgcmVzaWR1YWwgYnl0ZSAqLwotCQkJICAgIGdvdG8gZGluXzE7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkJZWxzZQotCQkgICAgYnZhbCA9IERDMzkwX3JlYWQ4IChDdXJyZW50X0ZpZm8pOwotCSAgICB9Ci1kaW5fMToKLQkgICAgREMzOTBfd3JpdGU4IChETUFfQ21kLCBSRUFEX0RJUkVDVElPTitETUFfQkxBU1RfQ01EKTsKLQkgICAgZm9yIChpID0gMHhhMDAwOyBpOyBpLS0pCi0JICAgIHsKLQkJYnZhbCA9IERDMzkwX3JlYWQ4IChETUFfU3RhdHVzKTsKLQkJaWYgKGJ2YWwgJiBCTEFTVF9DT01QTEVURSkKLQkJICAgIGJyZWFrOwotCSAgICB9Ci0JICAgIC8qIEl0IHNlZW1zIGEgRE1BIEJsYXN0IGFib3J0IGlzbid0IHRoYXQgYmFkIC4uLiAqLwotCSAgICBpZiAoIWkpIHByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBETUEgQmxhc3QgYWJvcnRlZCB1bmZpbmlzaGVkIVxuIik7Ci0JICAgIC8vREMzOTBfd3JpdGU4IChETUFfQ21kLCBSRUFEX0RJUkVDVElPTitETUFfSURMRV9DTUQpOwotCSAgICBkYzM5MF9sYXN0c3RhdHVzICY9IH4weGZmMDAwMDAwOwotCSAgICBkYzM5MF9sYXN0c3RhdHVzIHw9IGJ2YWwgPDwgMjQ7Ci0KLQkgICAgREVCVUcxKHByaW50ayAoS0VSTl9ERUJVRyAiQmxhc3Q6IFJlYWQgJWkgdGltZXMgRE1BX1N0YXR1cyAlMDJ4IiwgMHhhMDAwLWksIGJ2YWwpKTsKLQkgICAgUmVzaWRDbnQgPSAoKCh1MzIpIERDMzkwX3JlYWQ4IChDdGNSZWdfSGlnaCkgPDwgMTYpIHwKLQkJCSgodTMyKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX01pZCkgPDwgOCkpIHwKLQkJICAgICh1MzIpIERDMzkwX3JlYWQ4IChDdGNSZWdfTG93KTsKLQotCSAgICB4ZmVyQ250ID0gZGMzOTBfYWR2YW5jZV9zZWdtZW50KHBTUkIsIFJlc2lkQ250KTsKLQotCSAgICBpZiAocmVzaWR1YWwpIHsKLQkJc2l6ZV90IGNvdW50ID0gMTsKLQkJc2l6ZV90IG9mZnNldCA9IHBTUkItPlNHQnVzQWRkciAtIHNnX2RtYV9hZGRyZXNzKHBTUkItPnBTZWdtZW50TGlzdCk7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXU4ICpwdHI7Ci0KLQkJYnZhbCA9IERDMzkwX3JlYWQ4IChTY3NpRmlmbyk7CSAgICAvKiBnZXQgb25lIHJlc2lkdWFsIGJ5dGUgKi8KLQotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCXB0ciA9IHNjc2lfa21hcF9hdG9taWNfc2cocFNSQi0+cFNlZ21lbnRMaXN0LCBwU1JCLT5TR2NvdW50LCAmb2Zmc2V0LCAmY291bnQpOwotCQlpZiAobGlrZWx5KHB0cikpIHsKLQkJCSoocHRyICsgb2Zmc2V0KSA9IGJ2YWw7Ci0JCQlzY3NpX2t1bm1hcF9hdG9taWNfc2cocHRyKTsKLQkJfQotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCVdBUk5fT04oIXB0cik7Ci0KLQkJLyogMSBtb3JlIGJ5dGUgcmVhZCAqLwotCQl4ZmVyQ250ICs9IGRjMzkwX2FkdmFuY2Vfc2VnbWVudChwU1JCLCBwU1JCLT5TR1RvQmVYZmVyTGVuIC0gMSk7Ci0JICAgIH0KLQkgICAgREVCVUcxKHByaW50ayAoS0VSTl9ERUJVRyAiWGZlcmVkOiAlbHUsIFRvdGFsOiAlbHUsIFJlbWFpbmluZzogJWx1XG4iLCB4ZmVyQ250LFwKLQkJCSAgIHBTUkItPlRvdGFsWGZlcnJlZExlbiwgcFNSQi0+U0dUb0JlWGZlckxlbikpOwotCX0KLSAgICB9Ci0gICAgaWYgKCgqcHNzdGF0dXMgJiA3KSAhPSBTQ1NJX0RBVEFfSU4pCi0gICAgewotCSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsKLQkgICAgREMzOTBfd3JpdGU4IChETUFfQ21kLCBSRUFEX0RJUkVDVElPTitETUFfSURMRV9DTUQpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX0NvbW1hbmRfMCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQotewotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfU3RhdHVzXzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLQotICAgIHBTUkItPlRhcmdldFN0YXR1cyA9IERDMzkwX3JlYWQ4IChTY3NpRmlmbyk7Ci0gICAgLy91ZGVsYXkgKDEpOwotICAgIHBTUkItPkVuZE1lc3NhZ2UgPSBEQzM5MF9yZWFkOCAoU2NzaUZpZm8pOwkvKiBnZXQgbWVzc2FnZSAqLwotCi0gICAgKnBzc3RhdHVzID0gU0NTSV9OT1AwOwotICAgIHBTUkItPlNSQlN0YXRlID0gU1JCX0NPTVBMRVRFRDsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIE1TR19BQ0NFUFRFRF9DTUQpOwotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfTXNnT3V0XzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICBpZiggcFNSQi0+U1JCU3RhdGUgJiAoU1JCX1VORVhQRUNUX1JFU0VMK1NSQl9BQk9SVF9TRU5UKSApCi0JKnBzc3RhdHVzID0gU0NTSV9OT1AwOwotICAgIC8vREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotfQotCi0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18KLWRjMzkwX3JlcHJvZyAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX2RjYiogcERDQikKLXsKLSAgREMzOTBfd3JpdGU4IChTeW5jX1BlcmlvZCwgcERDQi0+U3luY1BlcmlvZCk7Ci0gIERDMzkwX3dyaXRlOCAoU3luY19PZmZzZXQsIHBEQ0ItPlN5bmNPZmZzZXQpOwotICBEQzM5MF93cml0ZTggKEN0cmxSZWczLCBwRENCLT5DdHJsUjMpOwotICBEQzM5MF93cml0ZTggKEN0cmxSZWc0LCBwRENCLT5DdHJsUjQpOwotICBkYzM5MF9TZXRYZmVyUmF0ZSAocEFDQiwgcERDQik7Ci19Ci0KLQotI2lmZGVmIERDMzkwX0RFQlVHMAotc3RhdGljIHZvaWQKLWRjMzkwX3ByaW50TXNnICh1OCAqTXNnQnVmLCB1OCBsZW4pCi17Ci0gIGludCBpOwotICBwcmludGsgKCIgJTAyeCIsIE1zZ0J1ZlswXSk7Ci0gIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykKLSAgICBwcmludGsgKCIgJTAyeCIsIE1zZ0J1ZltpXSk7Ci0gIHByaW50ayAoIlxuIik7Ci19Ci0jZW5kaWYKLQotI2RlZmluZSBEQzM5MF9FTkFCTEVfTVNHT1VUIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgU0VUX0FUTl9DTUQpCi0KLS8qIHJlamVjdF9tc2cgKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18KLWRjMzkwX01zZ0luX3JlamVjdCAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQikKLXsKLSAgcFNSQi0+TXNnT3V0QnVmWzBdID0gTUVTU0FHRV9SRUpFQ1Q7Ci0gIHBTUkItPk1zZ0NudCA9IDE7Ci0gIERDMzkwX0VOQUJMRV9NU0dPVVQ7Ci0gIERFQlVHMCAocHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBSZWplY3QgbWVzc2FnZVxuIikpOwotfQotCi0vKiBhYm9ydCBjb21tYW5kICovCi1zdGF0aWMgdm9pZAotZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0ICggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiApCi17Ci0gICAgcFNSQi0+TXNnT3V0QnVmWzBdID0gQUJPUlQ7IAotICAgIHBTUkItPk1zZ0NudCA9IDE7IERDMzkwX0VOQUJMRV9NU0dPVVQ7Ci0gICAgcFNSQi0+cFNSQkRDQi0+RENCRmxhZyAmPSB+QUJPUlRfREVWXzsKLX0KLQotc3RhdGljIHN0cnVjdCBkYzM5MF9zcmIqCi1kYzM5MF9Nc2dJbl9RVGFnIChzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCLCBzOCB0YWcpCi17Ci0gIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIgPSBwRENCLT5wR29pbmdTUkI7Ci0KLSAgaWYgKHBTUkIpCi0gICAgewotCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQgPSBzY3NpX2ZpbmRfdGFnKHBTUkItPnBjbWQtPmRldmljZSwgdGFnKTsKLQlwU1JCID0gKHN0cnVjdCBkYzM5MF9zcmIgKilzY21kLT5ob3N0X3NjcmliYmxlOwotCi0JaWYgKHBEQ0ItPkRDQkZsYWcgJiBBQk9SVF9ERVZfKQotCXsKLQkgIHBTUkItPlNSQlN0YXRlID0gU1JCX0FCT1JUX1NFTlQ7Ci0JICBkYzM5MF9FbmFibGVNc2dPdXRfQWJvcnQoIHBBQ0IsIHBTUkIgKTsKLQl9Ci0KLQlpZiAoIShwU1JCLT5TUkJTdGF0ZSAmIFNSQl9ESVNDT05ORUNUKSkKLQkJZ290byBtaW5neDA7Ci0KLQlwRENCLT5wQWN0aXZlU1JCID0gcFNSQjsKLQlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9EQVRBX1hGRVI7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgIG1pbmd4MDoKLSAgICAgIHBTUkIgPSBwQUNCLT5wVG1wU1JCOwotICAgICAgcFNSQi0+U1JCU3RhdGUgPSBTUkJfVU5FWFBFQ1RfUkVTRUw7Ci0gICAgICBwRENCLT5wQWN0aXZlU1JCID0gcFNSQjsKLSAgICAgIHBTUkItPk1zZ091dEJ1ZlswXSA9IEFCT1JUX1RBRzsKLSAgICAgIHBTUkItPk1zZ0NudCA9IDE7IERDMzkwX0VOQUJMRV9NU0dPVVQ7Ci0gICAgfQotICByZXR1cm4gcFNSQjsKLX0KLQotCi0vKiBzZXQgYXN5bmMgdHJhbnNmZXIgbW9kZSAqLwotc3RhdGljIHZvaWQgCi1kYzM5MF9Nc2dJbl9zZXRfYXN5bmMgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IgPSBwU1JCLT5wU1JCRENCOwotICBpZiAoIShwU1JCLT5TUkJTdGF0ZSAmIERPX1NZTkNfTkVHTykpIAotICAgIHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogVGFyZ2V0ICVpIGluaXRpYXRlcyBOb24tU3luYz9cbiIsIHBEQ0ItPlRhcmdldElEKTsKLSAgcFNSQi0+U1JCU3RhdGUgJj0gfkRPX1NZTkNfTkVHTzsKLSAgcERDQi0+U3luY01vZGUgJj0gfihTWU5DX0VOQUJMRStTWU5DX05FR09fRE9ORSk7Ci0gIHBEQ0ItPlN5bmNQZXJpb2QgPSAwOwotICBwRENCLT5TeW5jT2Zmc2V0ID0gMDsKLSAgLy9wRENCLT5OZWdvUGVyaW9kID0gNTA7IC8qIDIwMG5zIDw9PiA1IE1IeiAqLwotICBwRENCLT5DdHJsUjMgPSBGQVNUX0NMSzsJLyogZmFzdCBjbG9jayAvIG5vcm1hbCBzY3NpICovCi0gIHBEQ0ItPkN0cmxSNCAmPSAweDNmOwotICBwRENCLT5DdHJsUjQgfD0gcEFDQi0+Z2xpdGNoX2NmZzsJLyogZ2xpdGNoIGVhdGVyICovCi0gIGRjMzkwX3JlcHJvZyAocEFDQiwgcERDQik7Ci19Ci0KLS8qIHNldCBzeW5jIHRyYW5zZmVyIG1vZGUgKi8KLXN0YXRpYyB2b2lkCi1kYzM5MF9Nc2dJbl9zZXRfc3luYyAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQikKLXsKLSAgdTggYnZhbDsKLSAgdTE2IHd2YWwsIHd2YWwxOwotICBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCID0gcFNSQi0+cFNSQkRDQjsKLSAgdTggb2xkc3luY3BlcmlvZCA9IHBEQ0ItPlN5bmNQZXJpb2Q7Ci0gIHU4IG9sZHN5bmNvZmZzZXQgPSBwRENCLT5TeW5jT2Zmc2V0OwotICAKLSAgaWYgKCEocFNSQi0+U1JCU3RhdGUgJiBET19TWU5DX05FR08pKQotICAgIHsKLSAgICAgIHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogVGFyZ2V0ICVpIGluaXRpYXRlcyBTeW5jOiAlaW5zICVpIC4uLiBhbnN3ZXIgLi4uXG4iLCAKLQkgICAgICBwRENCLT5UYXJnZXRJRCwgcFNSQi0+TXNnSW5CdWZbM108PDIsIHBTUkItPk1zZ0luQnVmWzRdKTsKLQotICAgICAgLyogcmVqZWN0ICovCi0gICAgICAvL2RjMzkwX01zZ0luX3JlamVjdCAocEFDQiwgcFNSQik7Ci0gICAgICAvL3JldHVybiBkYzM5MF9Nc2dJbl9zZXRfYXN5bmMgKHBBQ0IsIHBTUkIpOwotCi0gICAgICAvKiBSZXBseSB3aXRoIGNvcnJlY3RlZCBTRFRSIE1lc3NhZ2UgKi8KLSAgICAgIGlmIChwU1JCLT5Nc2dJbkJ1Zls0XSA+IDE1KQotCXsgCi0JICBwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IExvd2VyIFN5bmMgT2Zmc2V0IHRvIDE1XG4iKTsKLQkgIHBTUkItPk1zZ0luQnVmWzRdID0gMTU7Ci0JfQotICAgICAgaWYgKHBTUkItPk1zZ0luQnVmWzNdIDwgcERDQi0+TmVnb1BlcmlvZCkKLQl7Ci0JICBwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFNldCBzeW5jIG5lZ28gcGVyaW9kIHRvICVpbnNcbiIsIHBEQ0ItPk5lZ29QZXJpb2QgPDwgMik7Ci0JICBwU1JCLT5Nc2dJbkJ1ZlszXSA9IHBEQ0ItPk5lZ29QZXJpb2Q7Ci0JfQotICAgICAgbWVtY3B5IChwU1JCLT5Nc2dPdXRCdWYsIHBTUkItPk1zZ0luQnVmLCA1KTsKLSAgICAgIHBTUkItPk1zZ0NudCA9IDU7Ci0gICAgICBEQzM5MF9FTkFCTEVfTVNHT1VUOwotICAgIH0KLQotICBwU1JCLT5TUkJTdGF0ZSAmPSB+RE9fU1lOQ19ORUdPOwotICBwRENCLT5TeW5jTW9kZSB8PSBTWU5DX0VOQUJMRStTWU5DX05FR09fRE9ORTsKLSAgcERDQi0+U3luY09mZnNldCAmPSAweDBmMDsKLSAgcERDQi0+U3luY09mZnNldCB8PSBwU1JCLT5Nc2dJbkJ1Zls0XTsKLSAgcERDQi0+TmVnb1BlcmlvZCA9IHBTUkItPk1zZ0luQnVmWzNdOwotCi0gIHd2YWwgPSAodTE2KSBwU1JCLT5Nc2dJbkJ1ZlszXTsKLSAgd3ZhbCA9IHd2YWwgPDwgMjsgd3ZhbCAtPSAzOyB3dmFsMSA9IHd2YWwgLyAyNTsJLyogY29tcHV0ZSBzcGVlZCAqLwotICBpZiggKHd2YWwxICogMjUpICE9IHd2YWwpIHd2YWwxKys7Ci0gIGJ2YWwgPSBGQVNUX0NMSytGQVNUX1NDU0k7CS8qIGZhc3QgY2xvY2sgLyBmYXN0IHNjc2kgKi8KLQotICBwRENCLT5DdHJsUjQgJj0gMHgzZjsJCS8qIEdsaXRjaCBlYXRlcjogMTJucyBsZXNzIHRoYW4gbm9ybWFsICovCi0gIGlmIChwQUNCLT5nbGl0Y2hfY2ZnICE9IE5TX1RPX0dMSVRDSCgwKSkKLSAgICBwRENCLT5DdHJsUjQgfD0gTlNfVE9fR0xJVENIKCgoR0xJVENIX1RPX05TKHBBQ0ItPmdsaXRjaF9jZmcpKSAtIDEpKTsKLSAgZWxzZQotICAgIHBEQ0ItPkN0cmxSNCB8PSBOU19UT19HTElUQ0goMCk7Ci0gIGlmICh3dmFsMSA8IDQpIHBEQ0ItPkN0cmxSNCB8PSBOU19UT19HTElUQ0goMCk7IC8qIFVsdHJhICovCi0KLSAgaWYgKHd2YWwxID49IDgpCi0gICAgewotICAgICAgd3ZhbDEtLTsJLyogVGltaW5nIGNvbXB1dGF0aW9uIGRpZmZlcnMgYnkgMSBmcm9tIEZBU1RfU0NTSSAqLwotICAgICAgYnZhbCA9IEZBU1RfQ0xLOwkJLyogZmFzdCBjbG9jayAvIG5vcm1hbCBzY3NpICovCi0gICAgICBwRENCLT5DdHJsUjQgfD0gcEFDQi0+Z2xpdGNoX2NmZzsgCS8qIGdsaXRjaCBlYXRlciAqLwotICAgIH0KLQotICBwRENCLT5DdHJsUjMgPSBidmFsOwotICBwRENCLT5TeW5jUGVyaW9kID0gKHU4KXd2YWwxOwotICAKLSAgaWYgKChvbGRzeW5jcGVyaW9kICE9IHd2YWwxIHx8IG9sZHN5bmNvZmZzZXQgIT0gcERDQi0+U3luY09mZnNldCkgJiYgcERDQi0+VGFyZ2V0TFVOID09IDApCi0gICAgewotICAgICAgaWYgKCEgKGJ2YWwgJiBGQVNUX1NDU0kpKSB3dmFsMSsrOwotICAgICAgcHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBUYXJnZXQgJWk6IFN5bmMgdHJhbnNmZXIgJWkuJTFpIE1IeiwgT2Zmc2V0ICVpXG4iLCBwRENCLT5UYXJnZXRJRCwgCi0JICAgICAgNDAvd3ZhbDEsICgoNDAld3ZhbDEpKjEwK3d2YWwxLzIpL3d2YWwxLCBwRENCLT5TeW5jT2Zmc2V0ICYgMHgwZik7Ci0gICAgfQotICAKLSAgZGMzOTBfcmVwcm9nIChwQUNCLCBwRENCKTsKLX0KLQotCi0vKiBoYW5kbGUgUkVTVE9SRV9QVFIgKi8KLS8qIFRoaXMgZG9lc24ndCBsb29rIHZlcnkgaGVhbHRoeS4uLiB0by1iZS1maXhlZCAqLwotc3RhdGljIHZvaWQgCi1kYzM5MF9yZXN0b3JlX3B0ciAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQikKLXsKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpwY21kID0gcFNSQi0+cGNtZDsKLSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBzZ2w7Ci0gICAgcFNSQi0+VG90YWxYZmVycmVkTGVuID0gMDsKLSAgICBwU1JCLT5TR0luZGV4ID0gMDsKLSAgICBpZiAoc2NzaV9zZ19jb3VudChwY21kKSkgewotCXNpemVfdCBzYXZlZDsKLQlwU1JCLT5wU2VnbWVudExpc3QgPSBzY3NpX3NnbGlzdChwY21kKTsKLQlwc2dsID0gcFNSQi0+cFNlZ21lbnRMaXN0OwotCS8vZGMzOTBfcGNpX3N5bmMocFNSQik7Ci0KLQl3aGlsZSAocFNSQi0+VG90YWxYZmVycmVkTGVuICsgKHVuc2lnbmVkIGxvbmcpIHNnX2RtYV9sZW4ocHNnbCkgPCBwU1JCLT5TYXZlZF9QdHIpCi0JewotCSAgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gKz0gKHVuc2lnbmVkIGxvbmcpIHNnX2RtYV9sZW4ocHNnbCk7Ci0JICAgIHBTUkItPlNHSW5kZXgrKzsKLQkgICAgaWYoIHBTUkItPlNHSW5kZXggPCBwU1JCLT5TR2NvdW50ICkKLQkgICAgewotCQlwU1JCLT5wU2VnbWVudExpc3QrKzsKLQotCQlkYzM5MF9zdGFydF9zZWdtZW50KHBTUkIpOwotCSAgICB9Ci0JICAgIGVsc2UKLQkJcFNSQi0+U0dUb0JlWGZlckxlbiA9IDA7Ci0JfQotCi0Jc2F2ZWQgPSBwU1JCLT5TYXZlZF9QdHIgLSBwU1JCLT5Ub3RhbFhmZXJyZWRMZW47Ci0JcFNSQi0+U0dUb0JlWGZlckxlbiAtPSBzYXZlZDsKLQlwU1JCLT5TR0J1c0FkZHIgKz0gc2F2ZWQ7Ci0JcHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBQb2ludGVyIHJlc3RvcmVkLiBTZWdtZW50ICVpLCBUb3RhbCAlbGksIEJ1cyAlMDhseFxuIiwKLQkJcFNSQi0+U0dJbmRleCwgcFNSQi0+U2F2ZWRfUHRyLCBwU1JCLT5TR0J1c0FkZHIpOwotCi0gICAgfSBlbHNlIHsKLQkgcFNSQi0+U0djb3VudCA9IDA7Ci0JIHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogUkVTVE9SRV9QVFIgbWVzc2FnZSBmb3IgVHJhbnNmZXIgd2l0aG91dCBTY2F0dGVyLUdhdGhlciA/P1xuIik7Ci0gICAgfQotCi0gIHBTUkItPlRvdGFsWGZlcnJlZExlbiA9IHBTUkItPlNhdmVkX1B0cjsKLX0KLQotCi0vKiBBY2NvcmRpbmcgdG8gdGhlIGRvY3MsIHRoZSBBTTUzQzk3NCByZWFkcyB0aGUgbWVzc2FnZSBhbmQgCi0gKiBnZW5lcmF0ZXMgYSBTdWNjZXNzZnVsIE9wZXJhdGlvbiBJUlEgYmVmb3JlIGFzc2VydGluZyBBQ0sgZm9yCi0gKiB0aGUgbGFzdCBieXRlIChob3cgZG9lcyBpdCBrbm93IHdoZXRoZXIgaXQncyB0aGUgbGFzdCA/KSAqLwotLyogVGhlIG9sZCBjb2RlIGhhbmRsZWQgaXQgaW4gYW5vdGhlciB3YXksIGluZGljYXRpbmcsIHRoYXQgb24KLSAqIGV2ZXJ5IG1lc3NhZ2UgYnl0ZSBhbiBJUlEgaXMgZ2VuZXJhdGVkIGFuZCBldmVyeSBieXRlIGhhcyB0bwotICogYmUgbWFudWFsbHkgQUNLZWQuIEhtbW0gPyAgKEtHLCA5OC8xMS8yOCkgKi8KLS8qIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gd2FzIGNvcnJlY3QuIFNpZ2ghICovCi0KLS8qIENoZWNrIGlmIHRoZSBtZXNzYWdlIGlzIGNvbXBsZXRlICovCi1zdGF0aWMgdTggX19pbmxpbmVfXwotZGMzOTBfTXNnSW5fY29tcGxldGUgKHU4ICptc2didWYsIHUzMiBsZW4pCi17IAotICBpZiAoKm1zZ2J1ZiA9PSBFWFRFTkRFRF9NRVNTQUdFKQotICB7Ci0JaWYgKGxlbiA8IDIpIHJldHVybiAwOwotCWlmIChsZW4gPCBtc2didWZbMV0gKyAyKSByZXR1cm4gMDsKLSAgfQotICBlbHNlIGlmICgqbXNnYnVmID49IDB4MjAgJiYgKm1zZ2J1ZiA8PSAweDJmKSAvLyB0d28gYnl0ZSBtZXNzYWdlcwotCWlmIChsZW4gPCAyKSByZXR1cm4gMDsKLSAgcmV0dXJuIDE7Ci19Ci0KLQotCi0vKiByZWFkIGFuZCBldmFsIHJlY2VpdmVkIG1lc3NhZ2VzICovCi1zdGF0aWMgdm9pZAotZGMzOTBfTXNnSW5fMCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQotewotICAgIHN0cnVjdCBkYzM5MF9kY2IqICAgcERDQiA9IHBBQ0ItPnBBY3RpdmVEQ0I7Ci0KLSAgICAvKiBSZWFkIHRoZSBtc2cgKi8KLQotICAgIHBTUkItPk1zZ0luQnVmW3BBQ0ItPk1zZ0xlbisrXSA9IERDMzkwX3JlYWQ4IChTY3NpRmlmbyk7Ci0gICAgLy9wU1JCLT5TUkJTdGF0ZSA9IDA7Ci0KLSAgICAvKiBNc2cgY29tcGxldGUgPyAqLwotICAgIGlmIChkYzM5MF9Nc2dJbl9jb21wbGV0ZSAocFNSQi0+TXNnSW5CdWYsIHBBQ0ItPk1zZ0xlbikpCi0gICAgICB7Ci0JREVCVUcwIChwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IE1zZ0luOiIpOyBkYzM5MF9wcmludE1zZyAocFNSQi0+TXNnSW5CdWYsIHBBQ0ItPk1zZ0xlbikpOwotCS8qIE5vdyBldmFsIHRoZSBtc2cgKi8KLQlzd2l0Y2ggKHBTUkItPk1zZ0luQnVmWzBdKSAKLQkgIHsKLQkgIGNhc2UgRElTQ09OTkVDVDogCi0JICAgIHBTUkItPlNSQlN0YXRlID0gU1JCX0RJU0NPTk5FQ1Q7IGJyZWFrOwotCSAgICAKLQkgIGNhc2UgU0lNUExFX1FVRVVFX1RBRzoKLQkgIGNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JICBjYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCSAgICBwU1JCID0gZGMzOTBfTXNnSW5fUVRhZyAocEFDQiwgcERDQiwgcFNSQi0+TXNnSW5CdWZbMV0pOwotCSAgICBicmVhazsKLQkgICAgCi0JICBjYXNlIE1FU1NBR0VfUkVKRUNUOiAKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBSRVNFVF9BVE5fQ01EKTsKLQkgICAgcERDQi0+TmVnb1BlcmlvZCA9IDUwOyAvKiAyMDBucyA8PT4gNSBNSHogKi8KLQkgICAgaWYoIHBTUkItPlNSQlN0YXRlICYgRE9fU1lOQ19ORUdPKQotCSAgICAgIGRjMzkwX01zZ0luX3NldF9hc3luYyAocEFDQiwgcFNSQik7Ci0JICAgIGJyZWFrOwotCSAgICAKLQkgIGNhc2UgRVhURU5ERURfTUVTU0FHRToKLQkgICAgLyogcmVqZWN0IGV2ZXJ5IGV4dGVuZGVkIG1zZyBidXQgU0RUUiAqLwotCSAgICBpZiAocFNSQi0+TXNnSW5CdWZbMV0gIT0gMyB8fCBwU1JCLT5Nc2dJbkJ1ZlsyXSAhPSBFWFRFTkRFRF9TRFRSKQotCSAgICAgIGRjMzkwX01zZ0luX3JlamVjdCAocEFDQiwgcFNSQik7Ci0JICAgIGVsc2UKLQkgICAgICB7Ci0JCWlmIChwU1JCLT5Nc2dJbkJ1ZlszXSA9PSAwIHx8IHBTUkItPk1zZ0luQnVmWzRdID09IDApCi0JCSAgZGMzOTBfTXNnSW5fc2V0X2FzeW5jIChwQUNCLCBwU1JCKTsKLQkJZWxzZQotCQkgIGRjMzkwX01zZ0luX3NldF9zeW5jIChwQUNCLCBwU1JCKTsKLQkgICAgICB9Ci0JICAgIAotCSAgICAvLyBub3RoaW5nIGhhcyB0byBiZSBkb25lCi0JICBjYXNlIENPTU1BTkRfQ09NUExFVEU6IGJyZWFrOwotCSAgICAKLQkgICAgLy8gU0FWRSBQT0lOVEVSIG1heSBiZSBpZ25vcmVkIGFzIHdlIGhhdmUgdGhlIHN0cnVjdCBkYzM5MF9zcmIqIGFzc29jaWF0ZWQgd2l0aCB0aGUKLQkgICAgLy8gc2NzaSBjb21tYW5kLiBUaGFua3MsIEdlcmFyZCwgZm9yIHBvaW50aW5nIGl0IG91dC4KLQkgIGNhc2UgU0FWRV9QT0lOVEVSUzogCi0JICAgIHBTUkItPlNhdmVkX1B0ciA9IHBTUkItPlRvdGFsWGZlcnJlZExlbjsKLQkgICAgYnJlYWs7Ci0JICAgIC8vIFRoZSBkZXZpY2UgbWlnaHQgd2FudCB0byByZXN0YXJ0IHRyYW5zZmVyIHdpdGggYSBSRVNUT1JFCi0JICBjYXNlIFJFU1RPUkVfUE9JTlRFUlM6Ci0JICAgIERFQlVHMChwcmludGsgKCJEQzM5MDogUkVTVE9SRSBQT0lOVEVSIG1lc3NhZ2UgcmVjZWl2ZWQgLi4uIHRyeSB0byBoYW5kbGVcbiIpKTsKLQkgICAgZGMzOTBfcmVzdG9yZV9wdHIgKHBBQ0IsIHBTUkIpOwotCSAgICBicmVhazsKLQotCSAgICAvLyByZWplY3QgdW5rbm93biBtZXNzYWdlcwotCSAgZGVmYXVsdDogZGMzOTBfTXNnSW5fcmVqZWN0IChwQUNCLCBwU1JCKTsKLQkgIH0KLQkKLQkvKiBDbGVhciBjb3VudGVyIGFuZCBNc2dJbiBzdGF0ZSAqLwotCXBTUkItPlNSQlN0YXRlICY9IH5TUkJfTVNHSU47Ci0JcEFDQi0+TXNnTGVuID0gMDsKLSAgICAgIH0KLQotICAgICpwc3N0YXR1cyA9IFNDU0lfTk9QMDsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIE1TR19BQ0NFUFRFRF9DTUQpOwotICAgIC8vREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1kYzM5MF9EYXRhSU9fQ29tbSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggaW9EaXIpCi17Ci0gICAgdW5zaWduZWQgbG9uZyAgbHZhbDsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiKiAgIHBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotCi0gICAgaWYgKHBTUkIgPT0gcEFDQi0+cFRtcFNSQikKLSAgICB7Ci0JaWYgKHBEQ0IpCi0JCXByaW50ayhLRVJOX0VSUiAiREMzOTA6IHBTUkIgPT0gcFRtcFNSQiEgKFRhZ1EgRXJyb3I/KSAoJTAyaS0laSlcbiIsIHBEQ0ItPlRhcmdldElELCBwRENCLT5UYXJnZXRMVU4pOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJEQzM5MDogcFNSQiA9PSBwVG1wU1JCISAoVGFnUSBFcnJvcj8pIChEQ0IgMCEpXG4iKTsKLQotCS8qIFRyeSB0byByZWNvdmVyIC0gc29tZSBicm9rZW4gZGlza3MgcmVhY3QgYmFkbHkgdG8gdGFnZ2VkIElOUVVJUlkgKi8KLQlpZiAocERDQiAmJiBwQUNCLT5zY2FuX2RldmljZXMgJiYgcERDQi0+R29pbmdTUkJDbnQgPT0gMSkgewotCQlwU1JCID0gcERDQi0+cEdvaW5nU1JCOwotCQlwRENCLT5wQWN0aXZlU1JCID0gcFNSQjsKLQl9IGVsc2UgewotCQlwU1JCLT5wU1JCRENCID0gcERDQjsKLQkJZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0KHBBQ0IsIHBTUkIpOwotCQlpZiAocERDQikKLQkJCXBEQ0ItPkRDQkZsYWcgfD0gQUJPUlRfREVWOwotCQlyZXR1cm47Ci0JfQotICAgIH0KLQotICAgIGlmKCBwU1JCLT5TR0luZGV4IDwgcFNSQi0+U0djb3VudCApCi0gICAgewotCURDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EIHwgaW9EaXIpOwotCWlmKCAhcFNSQi0+U0dUb0JlWGZlckxlbiApCi0JewotCSAgICBkYzM5MF9zdGFydF9zZWdtZW50KHBTUkIpOwotCi0JICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIiBEQzM5MDogTmV4dCBTRyBzZWdtZW50LiIpKTsKLQl9Ci0JbHZhbCA9IHBTUkItPlNHVG9CZVhmZXJMZW47Ci0JREVCVUcxKHByaW50ayAoS0VSTl9ERUJVRyAiIERDMzkwOiBTdGFydCB0cmFuc2ZlcjogJWxpIGJ5dGVzIChhZGRyZXNzICUwOGx4KVxuIiwgbHZhbCwgcFNSQi0+U0dCdXNBZGRyKSk7Ci0JREMzOTBfd3JpdGU4IChDdGNSZWdfTG93LCAodTgpIGx2YWwpOwotCWx2YWwgPj49IDg7Ci0JREMzOTBfd3JpdGU4IChDdGNSZWdfTWlkLCAodTgpIGx2YWwpOwotCWx2YWwgPj49IDg7Ci0JREMzOTBfd3JpdGU4IChDdGNSZWdfSGlnaCwgKHU4KSBsdmFsKTsKLQotCURDMzkwX3dyaXRlMzIgKERNQV9YZmVyQ250LCBwU1JCLT5TR1RvQmVYZmVyTGVuKTsKLQlEQzM5MF93cml0ZTMyIChETUFfWGZlckFkZHIsIHBTUkItPlNHQnVzQWRkcik7Ci0KLQkvL0RDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EIHwgaW9EaXIpOwotCXBTUkItPlNSQlN0YXRlID0gU1JCX0RBVEFfWEZFUjsKLQotCURDMzkwX3dyaXRlOCAoU2NzaUNtZCwgRE1BX0NPTU1BTkQrSU5GT19YRkVSX0NNRCk7Ci0KLQlEQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9TVEFSVF9DTUQgfCBpb0Rpcik7Ci0JLy9ERUJVRzEoREMzOTBfd3JpdGUzMiAoRE1BX1Njc2lCdXNDdHJsLCBXUlRfRVJBU0VfRE1BX1NUQVQgfCBFTl9JTlRfT05fUENJX0FCT1JUKSk7Ci0JLy9ERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJEQzM5MDogRE1BX1N0YXR1czogJTAyeFxuIiwgREMzOTBfcmVhZDggKERNQV9TdGF0dXMpKSk7Ci0JLy9ERUJVRzEoREMzOTBfd3JpdGUzMiAoRE1BX1Njc2lCdXNDdHJsLCBFTl9JTlRfT05fUENJX0FCT1JUKSk7Ci0gICAgfQotICAgIGVsc2UgICAgLyogeGZlciBwYWQgKi8KLSAgICB7Ci0JaWYoIHBTUkItPlNHY291bnQgKQotCXsKLQkgICAgcFNSQi0+QWRhcHRTdGF0dXMgPSBIX09WRVJfVU5ERVJfUlVOOwotCSAgICBwU1JCLT5TUkJTdGF0dXMgfD0gT1ZFUl9SVU47Ci0JICAgIERFQlVHMChwcmludGsgKEtFUk5fV0FSTklORyAiIERDMzkwOiBPdmVycnVuIC0iKSk7Ci0JfQotCURFQlVHMChwcmludGsgKEtFUk5fV0FSTklORyAiIENsZWFyIHRyYW5zZmVyIHBhZCBcbiIpKTsKLQlEQzM5MF93cml0ZTggKEN0Y1JlZ19Mb3csIDApOwotCURDMzkwX3dyaXRlOCAoQ3RjUmVnX01pZCwgMCk7Ci0JREMzOTBfd3JpdGU4IChDdGNSZWdfSGlnaCwgMCk7Ci0KLQlwU1JCLT5TUkJTdGF0ZSB8PSBTUkJfWEZFUlBBRDsKLQlEQzM5MF93cml0ZTggKFNjc2lDbWQsIERNQV9DT01NQU5EK1hGRVJfUEFEX0JZVEUpOwotLyoKLQlEQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCB8IGlvRGlyKTsKLQlEQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9TVEFSVF9DTUQgfCBpb0Rpcik7Ci0qLwotICAgIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZGMzOTBfRGF0YU91dFBoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0gICAgZGMzOTBfRGF0YUlPX0NvbW0gKHBBQ0IsIHBTUkIsIFdSSVRFX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9EYXRhSW5QaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQotewotICAgIGRjMzkwX0RhdGFJT19Db21tIChwQUNCLCBwU1JCLCBSRUFEX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9Db21tYW5kUGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiKiAgIHBEQ0I7Ci0gICAgdTggIGksIGNudDsKLSAgICB1OCAgICAgKnB0cjsKLQotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgUkVTRVRfQVROX0NNRCk7Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0gICAgaWYoICEocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpICkKLSAgICB7Ci0JY250ID0gKHU4KSBwU1JCLT5wY21kLT5jbWRfbGVuOwotCXB0ciA9ICh1OCAqKSBwU1JCLT5wY21kLT5jbW5kOwotCWZvcihpPTA7IGkgPCBjbnQ7IGkrKykKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgKihwdHIrKykpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIFJFUVVFU1RfU0VOU0UpOwotCXBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIHBEQ0ItPlRhcmdldExVTiA8PCA1KTsKLQlEQzM5MF93cml0ZTggKFNjc2lGaWZvLCAwKTsKLQlEQzM5MF93cml0ZTggKFNjc2lGaWZvLCAwKTsKLQlEQzM5MF93cml0ZTggKFNjc2lGaWZvLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIDApOwotCURFQlVHMChwcmludGsoS0VSTl9ERUJVRyAiREMzOTA6IEF1dG9SZXFTZW5zZSAoQ21uZFBoYXNlKSFcbiIpKTsKLSAgICB9Ci0gICAgcFNSQi0+U1JCU3RhdGUgPSBTUkJfQ09NTUFORDsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIElORk9fWEZFUl9DTUQpOwotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfU3RhdHVzUGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsKLSAgICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9TVEFUVVM7Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBJTklUSUFUT1JfQ01EX0NNUExURSk7Ci0gICAgLy9EQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9Nc2dPdXRQaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQotewotICAgIHU4ICAgYnZhbCwgaSwgY250OwotICAgIHU4ICAgICAqcHRyOwotICAgIHN0cnVjdCBkYzM5MF9kY2IqICAgIHBEQ0I7Ci0KLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsKLSAgICBwRENCID0gcEFDQi0+cEFjdGl2ZURDQjsKLSAgICBpZiggIShwU1JCLT5TUkJTdGF0ZSAmIFNSQl9NU0dPVVQpICkKLSAgICB7Ci0JY250ID0gcFNSQi0+TXNnQ250OwotCWlmKCBjbnQgKQotCXsKLQkgICAgcHRyID0gKHU4ICopIHBTUkItPk1zZ091dEJ1ZjsKLQkgICAgZm9yKGk9MDsgaSA8IGNudDsgaSsrKQotCQlEQzM5MF93cml0ZTggKFNjc2lGaWZvLCAqKHB0cisrKSk7Ci0JICAgIHBTUkItPk1zZ0NudCA9IDA7Ci0JICAgIGlmKCAocERDQi0+RENCRmxhZyAmIEFCT1JUX0RFVl8pICYmCi0JCShwU1JCLT5Nc2dPdXRCdWZbMF0gPT0gQUJPUlQpICkKLQkJcFNSQi0+U1JCU3RhdGUgPSBTUkJfQUJPUlRfU0VOVDsKLQl9Ci0JZWxzZQotCXsKLQkgICAgYnZhbCA9IEFCT1JUOwkvKiA/Pz8gTVNHX05PUCAqLwotCSAgICBpZiggKHBTUkItPnBjbWQtPmNtbmRbMF0gPT0gSU5RVUlSWSApIHx8Ci0JCShwU1JCLT5wY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpIHx8Ci0JCShwU1JCLT5TUkJGbGFnICYgQVVUT19SRVFTRU5TRSkgKQotCSAgICB7Ci0JCWlmKCBwRENCLT5TeW5jTW9kZSAmIFNZTkNfRU5BQkxFICkKLQkJICAgIGdvdG8gIG1vcDE7Ci0JICAgIH0KLQkgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgYnZhbCk7Ci0JfQotCURDMzkwX3dyaXRlOCAoU2NzaUNtZCwgSU5GT19YRkVSX0NNRCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci1tb3AxOgotICAgICAgICBwcmludGsgKEtFUk5fRVJSICJEQzM5MDogT0xEIFN5bmMgTmVnbyBjb2RlIHRyaWdnZXJlZCEgKCVpICVpKVxuIiwgcERDQi0+VGFyZ2V0SUQsIHBEQ0ItPlRhcmdldExVTik7Ci0JREMzOTBfd3JpdGU4IChTY3NpRmlmbywgRVhURU5ERURfTUVTU0FHRSk7Ci0JREMzOTBfd3JpdGU4IChTY3NpRmlmbywgMyk7CS8qICAgIDtsZW5ndGggb2YgZXh0ZW5kZWQgbXNnICovCi0JREMzOTBfd3JpdGU4IChTY3NpRmlmbywgRVhURU5ERURfU0RUUik7CS8qICAgIDsgc3luYyBuZWdvICovCi0JREMzOTBfd3JpdGU4IChTY3NpRmlmbywgcERDQi0+TmVnb1BlcmlvZCk7Ci0JaWYgKHBEQ0ItPlN5bmNPZmZzZXQgJiAweDBmKQotCQkgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgcERDQi0+U3luY09mZnNldCk7Ci0JZWxzZQotCQkgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgU1lOQ19ORUdPX09GRlNFVCk7CQkgICAgCi0JcFNSQi0+U1JCU3RhdGUgfD0gRE9fU1lOQ19ORUdPOwotCURDMzkwX3dyaXRlOCAoU2NzaUNtZCwgSU5GT19YRkVSX0NNRCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfTXNnSW5QaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQotewotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotICAgIGlmKCAhKHBTUkItPlNSQlN0YXRlICYgU1JCX01TR0lOKSApCi0gICAgewotCXBTUkItPlNSQlN0YXRlICY9IH5TUkJfRElTQ09OTkVDVDsKLQlwU1JCLT5TUkJTdGF0ZSB8PSBTUkJfTVNHSU47Ci0gICAgfQotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgSU5GT19YRkVSX0NNRCk7Ci0gICAgLy9EQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9Ob3BfMCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQotewotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfTm9wXzEoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLX0KLQotCi1zdGF0aWMgdm9pZAotZGMzOTBfU2V0WGZlclJhdGUoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IgKQotewotICAgIHU4ICBidmFsLCBpLCBjbnQ7Ci0gICAgc3RydWN0IGRjMzkwX2RjYiogICBwdHI7Ci0KLSAgICBpZiggIShwRENCLT5UYXJnZXRMVU4pICkKLSAgICB7Ci0JaWYoICFwQUNCLT5zY2FuX2RldmljZXMgKQotCXsKLQkgICAgcHRyID0gcEFDQi0+cExpbmtEQ0I7Ci0JICAgIGNudCA9IHBBQ0ItPkRDQkNudDsKLQkgICAgYnZhbCA9IHBEQ0ItPlRhcmdldElEOwotCSAgICBmb3IoaT0wOyBpPGNudDsgaSsrKQotCSAgICB7Ci0JCWlmKCBwdHItPlRhcmdldElEID09IGJ2YWwgKQotCQl7Ci0JCSAgICBwdHItPlN5bmNQZXJpb2QgPSBwRENCLT5TeW5jUGVyaW9kOwotCQkgICAgcHRyLT5TeW5jT2Zmc2V0ID0gcERDQi0+U3luY09mZnNldDsKLQkJICAgIHB0ci0+Q3RybFIzID0gcERDQi0+Q3RybFIzOwotCQkgICAgcHRyLT5DdHJsUjQgPSBwRENCLT5DdHJsUjQ7Ci0JCSAgICBwdHItPlN5bmNNb2RlID0gcERDQi0+U3luY01vZGU7Ci0JCX0KLQkJcHRyID0gcHRyLT5wTmV4dERDQjsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgcmV0dXJuOwotfQotCi0KLXN0YXRpYyB2b2lkCi1kYzM5MF9EaXNjb25uZWN0KCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICkKLXsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiICpwRENCOwotICAgIHN0cnVjdCBkYzM5MF9zcmIgKnBTUkIsICpwc3JiOwotICAgIHU4ICBpLCBjbnQ7Ci0KLSAgICBERUJVRzAocHJpbnRrKEtFUk5fSU5GTyAiRElTQywiKSk7Ci0KLSAgICBpZiAoIXBBQ0ItPkNvbm5lY3RlZCkgcHJpbnRrKEtFUk5fRVJSICJEQzM5MDogRGlzY29ubmVjdCBub3QtY29ubmVjdGVkIGJ1cz9cbiIpOwotICAgIHBBQ0ItPkNvbm5lY3RlZCA9IDA7Ci0gICAgcERDQiA9IHBBQ0ItPnBBY3RpdmVEQ0I7Ci0gICAgaWYgKCFwRENCKQotICAgICB7Ci0JREVCVUcwKHByaW50ayhLRVJOX0VSUiAiQUNCOiVwLT5BY3RpdmVEQ0I6JXAgSU9Qb3J0OiUwNHggSVJROiUwMnggIVxuIixcCi0JICAgICAgIHBBQ0IsIHBEQ0IsIHBBQ0ItPklPUG9ydEJhc2UsIHBBQ0ItPklSUUxldmVsKSk7Ci0JbWRlbGF5KDQwMCk7Ci0JREMzOTBfcmVhZDggKElOVF9TdGF0dXMpOwkvKiBSZXNldCBQZW5kaW5nIElOVCAqLwotCURDMzkwX3dyaXRlOCAoU2NzaUNtZCwgRU5fU0VMX1JFU0VMKTsKLQlyZXR1cm47Ci0gICAgIH0KLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIEVOX1NFTF9SRVNFTCk7Ci0gICAgcFNSQiA9IHBEQ0ItPnBBY3RpdmVTUkI7Ci0gICAgcEFDQi0+cEFjdGl2ZURDQiA9IE5VTEw7Ci0gICAgcFNSQi0+U2NzaVBoYXNlID0gU0NTSV9OT1AwOwotICAgIGlmKCBwU1JCLT5TUkJTdGF0ZSAmIFNSQl9VTkVYUEVDVF9SRVNFTCApCi0JcFNSQi0+U1JCU3RhdGUgPSAwOwotICAgIGVsc2UgaWYoIHBTUkItPlNSQlN0YXRlICYgU1JCX0FCT1JUX1NFTlQgKQotICAgIHsKLQlwRENCLT5UYWdNYXNrID0gMDsKLQlwRENCLT5EQ0JGbGFnID0gMDsKLQljbnQgPSBwRENCLT5Hb2luZ1NSQkNudDsKLQlwRENCLT5Hb2luZ1NSQkNudCA9IDA7Ci0JcFNSQiA9IHBEQ0ItPnBHb2luZ1NSQjsKLQlmb3IoIGk9MDsgaSA8IGNudDsgaSsrKQotCXsKLQkgICAgcHNyYiA9IHBTUkItPnBOZXh0U1JCOwotCSAgICBkYzM5MF9GcmVlX2luc2VydCAocEFDQiwgcFNSQik7Ci0JICAgIHBTUkIgPSBwc3JiOwotCX0KLQlwRENCLT5wR29pbmdTUkIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotCWlmKCAocFNSQi0+U1JCU3RhdGUgJiAoU1JCX1NUQVJUXytTUkJfTVNHT1VUKSkgfHwKLQkgICAhKHBTUkItPlNSQlN0YXRlICYgKFNSQl9ESVNDT05ORUNUK1NSQl9DT01QTEVURUQpKSApCi0JewkvKiBTZWxlY3Rpb24gdGltZSBvdXQgKi8KLQkJcFNSQi0+QWRhcHRTdGF0dXMgPSBIX1NFTF9USU1FT1VUOwotCQlwU1JCLT5UYXJnZXRTdGF0dXMgPSAwOwotCQlnb3RvICBkaXNjMTsKLQl9Ci0JZWxzZSBpZiAoIShwU1JCLT5TUkJTdGF0ZSAmIFNSQl9ESVNDT05ORUNUKSAmJiAocFNSQi0+U1JCU3RhdGUgJiBTUkJfQ09NUExFVEVEKSkKLQl7Ci1kaXNjMToKLQkgICAgZGMzOTBfZnJlZXRhZyAocERDQiwgcFNSQik7Ci0JICAgIHBEQ0ItPnBBY3RpdmVTUkIgPSBOVUxMOwotCSAgICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9GUkVFOwotCSAgICBkYzM5MF9TUkJkb25lKCBwQUNCLCBwRENCLCBwU1JCKTsKLQl9Ci0gICAgfQotICAgIHBBQ0ItPk1zZ0xlbiA9IDA7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWRjMzkwX1Jlc2VsZWN0KCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICkKLXsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiKiAgIHBEQ0I7Ci0gICAgc3RydWN0IGRjMzkwX3NyYiogICBwU1JCOwotICAgIHU4ICBpZCwgbHVuOwotCi0gICAgREVCVUcwKHByaW50ayhLRVJOX0lORk8gIlJTRUwsIikpOwotICAgIHBBQ0ItPkNvbm5lY3RlZCA9IDE7Ci0gICAgcERDQiA9IHBBQ0ItPnBBY3RpdmVEQ0I7Ci0gICAgaWYoIHBEQ0IgKQotICAgIHsJLyogQXJiaXRyYXRpb24gbG9zdCBidXQgUmVzZWxlY3Rpb24gd29uICovCi0JREVCVUcwKHByaW50ayAoIkRDMzkwOiAoQWN0aXZlRENCICE9IDA6IEFyYi4gbG9zdCBidXQgcmVzZWwuIHdvbikhXG4iKSk7Ci0JcFNSQiA9IHBEQ0ItPnBBY3RpdmVTUkI7Ci0JaWYoICEoIHBBQ0ItPnNjYW5fZGV2aWNlcyApICkKLQl7Ci0JICAgIHN0cnVjdCBzY3NpX2NtbmQgKnBjbWQgPSBwU1JCLT5wY21kOwotCSAgICBzY3NpX3NldF9yZXNpZChwY21kLCBzY3NpX2J1ZmZsZW4ocGNtZCkpOwotCSAgICBTRVRfUkVTX0RJRChwY21kLT5yZXN1bHQsIERJRF9TT0ZUX0VSUk9SKTsKLQkgICAgZGMzOTBfR29pbmdfcmVtb3ZlKHBEQ0IsIHBTUkIpOwotCSAgICBkYzM5MF9GcmVlX2luc2VydChwQUNCLCBwU1JCKTsKLQkgICAgcGNtZC0+c2NzaV9kb25lIChwY21kKTsKLQkgICAgREVCVUcwKHByaW50ayhLRVJOX0RFQlVHIkRDMzkwOiBSZXR1cm4gU1JCICVwIHRvIGZyZWVcbiIsIHBTUkIpKTsKLQl9Ci0gICAgfQotICAgIC8qIEdldCBJRCAqLwotICAgIGx1biA9IERDMzkwX3JlYWQ4IChTY3NpRmlmbyk7Ci0gICAgREVCVUcwKHByaW50ayAoIkRldiAlMDJ4LCIsIGx1bikpOwotICAgIGlmICghKGx1biAmICgxIDw8IHBBQ0ItPnBTY3NpSG9zdC0+dGhpc19pZCkpKQotICAgICAgcHJpbnRrIChLRVJOX0VSUiAiREMzOTA6IFJlc2VsZWN0aW9uIG11c3Qgc2VsZWN0IGhvc3QgYWRhcHRlcjogJTAyeCFcbiIsIGx1bik7Ci0gICAgZWxzZQotICAgICAgbHVuIF49IDEgPDwgcEFDQi0+cFNjc2lIb3N0LT50aGlzX2lkOyAvKiBNYXNrIEFkYXB0ZXJJRCAqLwotICAgIGlkID0gMDsgd2hpbGUgKGx1biA+Pj0gMSkgaWQrKzsKLSAgICAvKiBHZXQgTFVOICovCi0gICAgbHVuID0gREMzOTBfcmVhZDggKFNjc2lGaWZvKTsKLSAgICBpZiAoIShsdW4gJiBJREVOVElGWV9CQVNFKSkgcHJpbnRrIChLRVJOX0VSUiAiREMzOTA6IFJlc2VsOiBFeHBlY3QgaWRlbnRpZnkgbWVzc2FnZSFcbiIpOwotICAgIGx1biAmPSA3OwotICAgIERFQlVHMChwcmludGsgKCIoJTAyaS0laSksIiwgaWQsIGx1bikpOwotICAgIHBEQ0IgPSBkYzM5MF9maW5kRENCIChwQUNCLCBpZCwgbHVuKTsKLSAgICBpZiAoIXBEQ0IpCi0gICAgewotCXByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBSZXNlbGVjdCBmcm9tIG5vbiBleGlzdGluZyBkZXZpY2UgKCUwMmktJWkpXG4iLAotCQkgICAgaWQsIGx1bik7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBwQUNCLT5wQWN0aXZlRENCID0gcERDQjsKLSAgICAvKiBUYWdROiBXZSBleHBlY3QgYSBtZXNzYWdlIHNvb24sIHNvIG5ldmVyIG1pbmQgdGhlIGV4YWN0IFNSQiAqLwotICAgIGlmKCBwRENCLT5TeW5jTW9kZSAmIEVOX1RBR19RVUVVRUlORyApCi0gICAgewotCXBTUkIgPSBwQUNCLT5wVG1wU1JCOwotCXBEQ0ItPnBBY3RpdmVTUkIgPSBwU1JCOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotCXBTUkIgPSBwRENCLT5wQWN0aXZlU1JCOwotCWlmKCAhcFNSQiB8fCAhKHBTUkItPlNSQlN0YXRlICYgU1JCX0RJU0NPTk5FQ1QpICkKLQl7Ci0JICAgIHBTUkI9IHBBQ0ItPnBUbXBTUkI7Ci0JICAgIHBTUkItPlNSQlN0YXRlID0gU1JCX1VORVhQRUNUX1JFU0VMOwotCSAgICBwcmludGsgKEtFUk5fRVJSICJEQzM5MDogUmVzZWxlY3Qgd2l0aG91dCBvdXRzdGFuZGluZyBjbW5kICglMDJpLSVpKVxuIiwKLQkJICAgIGlkLCBsdW4pOwotCSAgICBwRENCLT5wQWN0aXZlU1JCID0gcFNSQjsKLQkgICAgZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0ICggcEFDQiwgcFNSQiApOwotCX0KLQllbHNlCi0JewotCSAgICBpZiggcERDQi0+RENCRmxhZyAmIEFCT1JUX0RFVl8gKQotCSAgICB7Ci0JCXBTUkItPlNSQlN0YXRlID0gU1JCX0FCT1JUX1NFTlQ7Ci0JCXByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogUmVzZWxlY3Q6IEFib3J0ICglMDJpLSVpKVxuIiwKLQkJCWlkLCBsdW4pOwotCQlkYzM5MF9FbmFibGVNc2dPdXRfQWJvcnQoIHBBQ0IsIHBTUkIgKTsKLQkgICAgfQotCSAgICBlbHNlCi0JCXBTUkItPlNSQlN0YXRlID0gU1JCX0RBVEFfWEZFUjsKLQl9Ci0gICAgfQotCi0gICAgREVCVUcxKHByaW50ayAoS0VSTl9ERUJVRyAiUmVzZWwgU1JCKCVwKTogVGFnTnVtICglMDJ4KVxuIiwgcFNSQiwgcFNSQi0+VGFnTnVtYmVyKSk7Ci0gICAgcFNSQi0+U2NzaVBoYXNlID0gU0NTSV9OT1AwOwotICAgIERDMzkwX3dyaXRlOCAoU2NzaV9EZXN0X0lELCBwRENCLT5UYXJnZXRJRCk7Ci0gICAgREMzOTBfd3JpdGU4IChTeW5jX1BlcmlvZCwgcERDQi0+U3luY1BlcmlvZCk7Ci0gICAgREMzOTBfd3JpdGU4IChTeW5jX09mZnNldCwgcERDQi0+U3luY09mZnNldCk7Ci0gICAgREMzOTBfd3JpdGU4IChDdHJsUmVnMSwgcERDQi0+Q3RybFIxKTsKLSAgICBEQzM5MF93cml0ZTggKEN0cmxSZWczLCBwRENCLT5DdHJsUjMpOwotICAgIERDMzkwX3dyaXRlOCAoQ3RybFJlZzQsIHBEQ0ItPkN0cmxSNCk7CS8qIDsgR2xpdGNoIGVhdGVyICovCi0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBNU0dfQUNDRVBURURfQ01EKTsJLyogO3RvIHJlbGVhc2UgdGhlIC9BQ0sgc2lnbmFsICovCi19Ci0KLXN0YXRpYyBpbnQgX19pbmxpbmVfXwotZGMzOTBfUmVxdWVzdFNlbnNlKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0Jc3RydWN0IHNjc2lfY21uZCAqcGNtZDsKLQotCXBjbWQgPSBwU1JCLT5wY21kOwotCi0JUkVNT1ZBQkxFREVCVUcocHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IFJlcXVlc3RTZW5zZShDbWQgJTAyeCwgSWQgJTAyeCwgTFVOICUwMngpXG4iLFwKLQkJCSAgICAgIHBjbWQtPmNtbmRbMF0sIHBEQ0ItPlRhcmdldElELCBwRENCLT5UYXJnZXRMVU4pKTsKLQotCXBTUkItPlNSQkZsYWcgfD0gQVVUT19SRVFTRU5TRTsKLQlwU1JCLT5TYXZlZFRvdFhMZW4gPSBwU1JCLT5Ub3RhbFhmZXJyZWRMZW47Ci0JcFNSQi0+QWRhcHRTdGF0dXMgPSAwOwotCXBTUkItPlRhcmdldFN0YXR1cyA9IDA7IC8qIENIRUNLX0NPTkRJVElPTjw8MTsgKi8KLQotCS8qIFdlIGFyZSBjYWxsZWQgZnJvbSBTUkJkb25lLCBvcmlnaW5hbCBQQ0kgbWFwcGluZyBoYXMgYmVlbiByZW1vdmVkCi0JICogYWxyZWFkeSwgbmV3IG9uZSBpcyBzZXQgdXAgZnJvbSBTdGFydFNDU0kgKi8KLQlwU1JCLT5TR0luZGV4ID0gMDsKLQotCXBTUkItPlRvdGFsWGZlcnJlZExlbiA9IDA7Ci0JcFNSQi0+U0dUb0JlWGZlckxlbiA9IDA7Ci0JcmV0dXJuIGRjMzkwX1N0YXJ0U0NTSShwQUNCLCBwRENCLCBwU1JCKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZGMzOTBfU1JCZG9uZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX2RjYiogcERDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiApCi17Ci0gICAgdTggc3RhdHVzOwotICAgIHN0cnVjdCBzY3NpX2NtbmQgKnBjbWQ7Ci0KLSAgICBwY21kID0gcFNSQi0+cGNtZDsKLSAgICAvKiBLRzogTW92ZWQgcGNpX3VubWFwIGhlcmUgKi8KLSAgICBkYzM5MF9wY2lfdW5tYXAocFNSQik7Ci0KLSAgICBzdGF0dXMgPSBwU1JCLT5UYXJnZXRTdGF0dXM7Ci0KLSAgICBERUJVRzAocHJpbnRrICgiIFNSQmRvbmUgKCUwMngsJTA4eCksIFNSQiAlcFxuIiwgc3RhdHVzLCBwY21kLT5yZXN1bHQsIHBTUkIpKTsKLSAgICBpZihwU1JCLT5TUkJGbGFnICYgQVVUT19SRVFTRU5TRSkKLSAgICB7CS8qIExhc3QgY29tbWFuZCB3YXMgYSBSZXF1ZXN0IFNlbnNlICovCi0JcFNSQi0+U1JCRmxhZyAmPSB+QVVUT19SRVFTRU5TRTsKLQlwU1JCLT5BZGFwdFN0YXR1cyA9IDA7Ci0JcFNSQi0+VGFyZ2V0U3RhdHVzID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwotCi0JLy9wY21kLT5yZXN1bHQgPSBNS19SRVMoRFJJVkVSX1NFTlNFLERJRF9PSywwLHN0YXR1cyk7Ci0JaWYgKHN0YXR1cyA9PSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pCi0JICAgIHBjbWQtPnJlc3VsdCA9IE1LX1JFU19MTlgoMCwgRElEX0JBRF9UQVJHRVQsIDAsIC8qQ0hFQ0tfQ09ORElUSU9OKi8wKTsKLQllbHNlIC8qIFJldHJ5ICovCi0JewotCSAgICBpZiggcFNSQi0+cGNtZC0+Y21uZFswXSA9PSBURVNUX1VOSVRfUkVBRFkgLyogfHwgcFNSQi0+cGNtZC0+Y21uZFswXSA9PSBTVEFSVF9TVE9QICovKQotCSAgICB7Ci0JCS8qIERvbid0IHJldHJ5IG9uIFRFU1RfVU5JVF9SRUFEWSAqLwotCQlwY21kLT5yZXN1bHQgPSBNS19SRVNfTE5YKERSSVZFUl9TRU5TRSwgRElEX09LLCAwLCBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pOwotCQlSRU1PVkFCTEVERUJVRyhwcmludGsoS0VSTl9JTkZPICJDbWQ9JTAyeCwgUmVzdWx0PSUwOHgsIFhmZXJMPSUwOHhcbiIscFNSQi0+cGNtZC0+Y21uZFswXSxcCi0JCSAgICAgICAodTMyKSBwY21kLT5yZXN1bHQsICh1MzIpIHBTUkItPlRvdGFsWGZlcnJlZExlbikpOwotCSAgICB9IGVsc2UgewotCQlTRVRfUkVTX0RSVihwY21kLT5yZXN1bHQsIERSSVZFUl9TRU5TRSk7Ci0JCS8vcFNSQi0+U2NzaUNtZExlbgkgPSAodTgpIChwU1JCLT5TZWdtZW50MVswXSA+PiA4KTsKLQkJREVCVUcwIChwcmludGsgKCJEQzM5MDogUkVUUlkgKCUwMngpLCB0YXJnZXQgJTAyaS0lMDJpXG4iLCBwY21kLT5jbW5kWzBdLCBwY21kLT5kZXZpY2UtPmlkLCAodTgpcGNtZC0+ZGV2aWNlLT5sdW4pKTsKLQkJcFNSQi0+VG90YWxYZmVycmVkTGVuID0gMDsKLQkJU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LCBESURfU09GVF9FUlJPUik7Ci0JICAgIH0KLQl9Ci0JZ290byBjbWRfZG9uZTsKLSAgICB9Ci0gICAgaWYoIHN0YXR1cyApCi0gICAgewotCWlmIChzdGF0dXMgPT0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKQotCXsKLQkgICAgaWYgKGRjMzkwX1JlcXVlc3RTZW5zZShwQUNCLCBwRENCLCBwU1JCKSkgewotCQlTRVRfUkVTX0RJRChwY21kLT5yZXN1bHQsIERJRF9FUlJPUik7Ci0JCWdvdG8gY21kX2RvbmU7Ci0JICAgIH0KLQkgICAgcmV0dXJuOwotCX0KLQllbHNlIGlmIChzdGF0dXMgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCkKLQl7Ci0JICAgIHNjc2lfdHJhY2tfcXVldWVfZnVsbChwY21kLT5kZXZpY2UsIHBEQ0ItPkdvaW5nU1JCQ250IC0gMSk7Ci0JICAgIERFQlVHMCAocHJpbnRrICgiREMzOTA6IFJFVFJZICglMDJ4KSwgdGFyZ2V0ICUwMmktJTAyaVxuIiwgcGNtZC0+Y21uZFswXSwgcGNtZC0+ZGV2aWNlLT5pZCwgKHU4KXBjbWQtPmRldmljZS0+bHVuKSk7Ci0JICAgIHBTUkItPlRvdGFsWGZlcnJlZExlbiA9IDA7Ci0JICAgIFNFVF9SRVNfRElEKHBjbWQtPnJlc3VsdCwgRElEX1NPRlRfRVJST1IpOwotCX0KLQllbHNlIGlmIChzdGF0dXMgPT0gU0FNX1NUQVRfQlVTWSAmJgotCQkgKHBjbWQtPmNtbmRbMF0gPT0gVEVTVF9VTklUX1JFQURZIHx8IHBjbWQtPmNtbmRbMF0gPT0gSU5RVUlSWSkgJiYKLQkJIHBBQ0ItPnNjYW5fZGV2aWNlcykKLQl7Ci0JICAgIHBTUkItPkFkYXB0U3RhdHVzID0gMDsKLQkgICAgcFNSQi0+VGFyZ2V0U3RhdHVzID0gc3RhdHVzOwotCSAgICBwY21kLT5yZXN1bHQgPSBNS19SRVMoMCwwLHBTUkItPkVuZE1lc3NhZ2UsLypzdGF0dXMqLzApOwotCX0KLQllbHNlCi0JeyAgIC8qIEFub3RoZXIgZXJyb3IgKi8KLQkgICAgcFNSQi0+VG90YWxYZmVycmVkTGVuID0gMDsKLQkgICAgU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LCBESURfU09GVF9FUlJPUik7Ci0JICAgIGdvdG8gY21kX2RvbmU7Ci0JfQotICAgIH0KLSAgICBlbHNlCi0gICAgewkvKiAgVGFyZ2V0IHN0YXR1cyA9PSAwICovCi0Jc3RhdHVzID0gcFNSQi0+QWRhcHRTdGF0dXM7Ci0JaWYgKHN0YXR1cyA9PSBIX09WRVJfVU5ERVJfUlVOKQotCXsKLQkgICAgcFNSQi0+VGFyZ2V0U3RhdHVzID0gMDsKLQkgICAgU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LERJRF9PSyk7Ci0JICAgIFNFVF9SRVNfTVNHKHBjbWQtPnJlc3VsdCxwU1JCLT5FbmRNZXNzYWdlKTsKLQl9Ci0JZWxzZSBpZiAoc3RhdHVzID09IEhfU0VMX1RJTUVPVVQpCi0JewotCSAgICBwY21kLT5yZXN1bHQgPSBNS19SRVMoMCwgRElEX05PX0NPTk5FQ1QsIDAsIDApOwotCSAgICAvKiBEZXZpY2VzIGFyZSByZW1vdmVkIGJlbG93IC4uLiAqLwotCX0KLQllbHNlIGlmKCBwU1JCLT5TUkJTdGF0dXMgJiBQQVJJVFlfRVJST1IpCi0JewotCSAgICAvL3BjbWQtPnJlc3VsdCA9IE1LX1JFUygwLERJRF9QQVJJVFkscFNSQi0+RW5kTWVzc2FnZSwwKTsKLQkgICAgU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LERJRF9QQVJJVFkpOwotCSAgICBTRVRfUkVTX01TRyhwY21kLT5yZXN1bHQscFNSQi0+RW5kTWVzc2FnZSk7Ci0JfQotCWVsc2UJCSAgICAgICAvKiBObyBlcnJvciAqLwotCXsKLQkgICAgcFNSQi0+QWRhcHRTdGF0dXMgPSAwOwotCSAgICBwU1JCLT5UYXJnZXRTdGF0dXMgPSAwOwotCSAgICBTRVRfUkVTX0RJRChwY21kLT5yZXN1bHQsRElEX09LKTsKLQl9Ci0gICAgfQotCi1jbWRfZG9uZToKLSAgICBzY3NpX3NldF9yZXNpZChwY21kLCBzY3NpX2J1ZmZsZW4ocGNtZCkgLSBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4pOwotCi0gICAgZGMzOTBfR29pbmdfcmVtb3ZlIChwRENCLCBwU1JCKTsKLSAgICAvKiBBZGQgdG8gZnJlZSBsaXN0ICovCi0gICAgZGMzOTBfRnJlZV9pbnNlcnQgKHBBQ0IsIHBTUkIpOwotCi0gICAgREVCVUcwKHByaW50ayAoS0VSTl9ERUJVRyAiREMzOTA6IFNSQmRvbmU6IGRvbmVcbiIpKTsKLSAgICBwY21kLT5zY3NpX2RvbmUgKHBjbWQpOwotCi0gICAgcmV0dXJuOwotfQotCi0KLS8qIFJlbW92ZSBhbGwgU1JCcyBmcm9tIEdvaW5nIGxpc3QgYW5kIGluZm9ybSBtaWRsZXZlbCAqLwotc3RhdGljIHZvaWQKLWRjMzkwX0RvaW5nU1JCX0RvbmUoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotICAgIHN0cnVjdCBkYzM5MF9kY2IgKnBEQ0IsICpwZGNiOwotICAgIHN0cnVjdCBkYzM5MF9zcmIgKnBzcmIsICpwc3JiMjsKLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpwY21kOwotCi0gICAgcERDQiA9IHBBQ0ItPnBMaW5rRENCOwotICAgIHBkY2IgPSBwRENCOwotICAgIGlmICghIHBkY2IpIHJldHVybjsKLSAgICBkbwotICAgIHsKLQlwc3JiID0gcGRjYi0+cEdvaW5nU1JCOwotCWZvciAoaSA9IDA7IGkgPCBwZGNiLT5Hb2luZ1NSQkNudDsgaSsrKQotCXsKLQkgICAgcHNyYjIgPSBwc3JiLT5wTmV4dFNSQjsKLQkgICAgcGNtZCA9IHBzcmItPnBjbWQ7Ci0JICAgIGRjMzkwX0ZyZWVfaW5zZXJ0IChwQUNCLCBwc3JiKTsKLQkgICAgcHNyYiAgPSBwc3JiMjsKLQl9Ci0JcGRjYi0+R29pbmdTUkJDbnQgPSAwOwotCXBkY2ItPnBHb2luZ1NSQiA9IE5VTEw7Ci0JcGRjYi0+VGFnTWFzayA9IDA7Ci0JcGRjYiA9IHBkY2ItPnBOZXh0RENCOwotICAgIH0gd2hpbGUoIHBkY2IgIT0gcERDQiApOwotfQotCi0KLXN0YXRpYyB2b2lkCi1kYzM5MF9SZXNldFNDU0lCdXMoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IgKQotewotICAgIC8vREMzOTBfd3JpdGU4IChTY3NpQ21kLCBSU1RfREVWSUNFX0NNRCk7Ci0gICAgLy91ZGVsYXkgKDI1MCk7Ci0gICAgLy9EQzM5MF93cml0ZTggKFNjc2lDbWQsIE5PUF9DTUQpOwotCi0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0gICAgREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgUlNUX1NDU0lfQlVTX0NNRCk7Ci0gICAgcEFDQi0+Q29ubmVjdGVkID0gMDsKLQotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX1Njc2lSc3REZXRlY3QoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IgKQotewotICAgIHByaW50ayAoIkRDMzkwOiBSc3RfRGV0ZWN0OiBsYXN0c3RhdCA9ICUwOHhcbiIsIGRjMzkwX2xhc3RzdGF0dXMpOwotICAgIC8vREVCVUcwKHByaW50ayhLRVJOX0lORk8gIlJTVF9ERVRFQ1QsIikpOwotCi0gICAgREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotICAgIC8qIFVubG9jayBiZWZvcmUgPyAqLwotICAgIC8qIGRlbGF5IGhhbGYgYSBzZWNvbmQgKi8KLSAgICB1ZGVsYXkgKDEwMDApOwotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotICAgIHBBQ0ItPmxhc3RfcmVzZXQgPSBqaWZmaWVzICsgNSpIWi8yCi0JCSAgICArIEhaICogZGMzOTBfZWVwcm9tQnVmW3BBQ0ItPkFkYXB0ZXJJbmRleF1bRUVfREVMQVldOwotICAgIHBBQ0ItPkNvbm5lY3RlZCA9IDA7Ci0KLSAgICBpZiggcEFDQi0+QUNCRmxhZyAmIFJFU0VUX0RFViApCi0JcEFDQi0+QUNCRmxhZyB8PSBSRVNFVF9ET05FOwotICAgIGVsc2UKLSAgICB7ICAgLyogUmVzZXQgd2FzIGlzc3VlZCBieSBzYiBlbHNlICovCi0JcEFDQi0+QUNCRmxhZyB8PSBSRVNFVF9ERVRFQ1Q7Ci0KLQlkYzM5MF9SZXNldERldlBhcmFtKCBwQUNCICk7Ci0JZGMzOTBfRG9pbmdTUkJfRG9uZSggcEFDQiwgTlVMTCk7Ci0JLy9kYzM5MF9SZWNvdmVyU1JCKCBwQUNCICk7Ci0JcEFDQi0+cEFjdGl2ZURDQiA9IE5VTEw7Ci0JcEFDQi0+QUNCRmxhZyA9IDA7Ci0gICAgfQotICAgIHJldHVybjsKLX0KLQotc3RhdGljIGludCBEQzM5MF9xdWV1ZWNvbW1hbmRfbGNrKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKLQkJdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCi17Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY21kLT5kZXZpY2U7Ci0Jc3RydWN0IGRjMzkwX2FjYiAqYWNiID0gKHN0cnVjdCBkYzM5MF9hY2IgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgZGMzOTBfZGNiICpkY2IgPSBzZGV2LT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgZGMzOTBfc3JiICpzcmI7Ci0KLQlpZiAoc2Rldi0+cXVldWVfZGVwdGggPD0gZGNiLT5Hb2luZ1NSQkNudCkKLQkJZ290byBkZXZpY2VfYnVzeTsKLQlpZiAoYWNiLT5wQWN0aXZlRENCKQotCQlnb3RvIGhvc3RfYnVzeTsKLQlpZiAoYWNiLT5BQ0JGbGFnICYgKFJFU0VUX0RFVEVDVHxSRVNFVF9ET05FfFJFU0VUX0RFVikpCi0JCWdvdG8gaG9zdF9idXN5OwotCi0Jc3JiID0gYWNiLT5wRnJlZVNSQjsKLQlpZiAodW5saWtlbHkoc3JiID09IE5VTEwpKQotCQlnb3RvIGhvc3RfYnVzeTsKLQotCWNtZC0+c2NzaV9kb25lID0gZG9uZTsKLQljbWQtPnJlc3VsdCA9IDA7Ci0JYWNiLT5DbWRzKys7Ci0KLQlhY2ItPnBGcmVlU1JCID0gc3JiLT5wTmV4dFNSQjsKLQlzcmItPnBOZXh0U1JCID0gTlVMTDsKLQotCXNyYi0+cFNSQkRDQiA9IGRjYjsKLQlzcmItPnBjbWQgPSBjbWQ7Ci0JY21kLT5ob3N0X3NjcmliYmxlID0gKGNoYXIgKilzcmI7Ci0gICAgCi0Jc3JiLT5TR0luZGV4ID0gMDsKLQlzcmItPkFkYXB0U3RhdHVzID0gMDsKLQlzcmItPlRhcmdldFN0YXR1cyA9IDA7Ci0Jc3JiLT5Nc2dDbnQgPSAwOwotCi0Jc3JiLT5TUkJTdGF0dXMgPSAwOwotCXNyYi0+U1JCRmxhZyA9IDA7Ci0Jc3JiLT5TUkJTdGF0ZSA9IDA7Ci0Jc3JiLT5Ub3RhbFhmZXJyZWRMZW4gPSAwOwotCXNyYi0+U0dCdXNBZGRyID0gMDsKLQlzcmItPlNHVG9CZVhmZXJMZW4gPSAwOwotCXNyYi0+U2NzaVBoYXNlID0gMDsKLQlzcmItPkVuZE1lc3NhZ2UgPSAwOwotCXNyYi0+VGFnTnVtYmVyID0gU0NTSV9OT19UQUc7Ci0KLQlpZiAoZGMzOTBfU3RhcnRTQ1NJKGFjYiwgZGNiLCBzcmIpKSB7Ci0JCWRjMzkwX0ZyZWVfaW5zZXJ0KGFjYiwgc3JiKTsKLQkJZ290byBob3N0X2J1c3k7Ci0JfQotCi0JZGMzOTBfR29pbmdfYXBwZW5kKGRjYiwgc3JiKTsKLQotCXJldHVybiAwOwotCi0gaG9zdF9idXN5OgotCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwotCi0gZGV2aWNlX2J1c3k6Ci0JcmV0dXJuIFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWTsKLX0KLQotc3RhdGljIERFRl9TQ1NJX1FDTUQoREMzOTBfcXVldWVjb21tYW5kKQotCi1zdGF0aWMgdm9pZCBkYzM5MF9kdW1waW5mbyAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX2RjYiogcERDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQikKLXsKLSAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLSAgICB1MTYgcHN0YXQ7Ci0KLSAgICBpZiAoIXBEQ0IpIHBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotICAgIGlmICghcFNSQiAmJiBwRENCKSBwU1JCID0gcERDQi0+cEFjdGl2ZVNSQjsKLQotICAgIGlmIChwU1JCKSAKLSAgICB7Ci0JcHJpbnRrICgiREMzOTA6IFNSQjogWGZlcnJlZCAlMDhseCwgUmVtYWluICUwOGx4LCBTdGF0ZSAlMDh4LCBQaGFzZSAlMDJ4XG4iLAotCQlwU1JCLT5Ub3RhbFhmZXJyZWRMZW4sIHBTUkItPlNHVG9CZVhmZXJMZW4sIHBTUkItPlNSQlN0YXRlLAotCQlwU1JCLT5TY3NpUGhhc2UpOwotCXByaW50ayAoIkRDMzkwOiBBZHBhdGVyU3RhdHVzOiAlMDJ4LCBTUkIgU3RhdHVzICUwMnhcbiIsIHBTUkItPkFkYXB0U3RhdHVzLCBwU1JCLT5TUkJTdGF0dXMpOwotICAgIH0KLSAgICBwcmludGsgKCJEQzM5MDogU3RhdHVzIG9mIGxhc3QgSVJRIChETUEvU0MvSW50L0lSUSk6ICUwOHhcbiIsIGRjMzkwX2xhc3RzdGF0dXMpOwotICAgIHByaW50ayAoIkRDMzkwOiBSZWdpc3RlciBkdW1wOiBTQ1NJIGJsb2NrOlxuIik7Ci0gICAgcHJpbnRrICgiREMzOTA6IFhmZXJDbnQgIENtZCBTdGF0IEludFMgSVJRUyBGRklTIEN0bDEgQ3RsMiBDdGwzIEN0bDRcbiIpOwotICAgIHByaW50ayAoIkRDMzkwOiAgJTA2eCAgICUwMnggICAlMDJ4ICAgJTAyeCIsCi0JICAgIERDMzkwX3JlYWQ4KEN0Y1JlZ19Mb3cpICsgKERDMzkwX3JlYWQ4KEN0Y1JlZ19NaWQpIDw8IDgpICsgKERDMzkwX3JlYWQ4KEN0Y1JlZ19IaWdoKSA8PCAxNiksCi0JICAgIERDMzkwX3JlYWQ4KFNjc2lDbWQpLCBEQzM5MF9yZWFkOChTY3NpX1N0YXR1cyksIERDMzkwX3JlYWQ4KEludGVybl9TdGF0ZSkpOwotICAgIHByaW50ayAoIiAgICUwMnggICAlMDJ4ICAgJTAyeCAgICUwMnggICAlMDJ4ICAgJTAyeFxuIiwKLQkgICAgREMzOTBfcmVhZDgoSU5UX1N0YXR1cyksIERDMzkwX3JlYWQ4KEN1cnJlbnRfRmlmbyksIERDMzkwX3JlYWQ4KEN0cmxSZWcxKSwKLQkgICAgREMzOTBfcmVhZDgoQ3RybFJlZzIpLCBEQzM5MF9yZWFkOChDdHJsUmVnMyksIERDMzkwX3JlYWQ4KEN0cmxSZWc0KSk7Ci0gICAgREMzOTBfd3JpdGUzMiAoRE1BX1Njc2lCdXNDdHJsLCBXUlRfRVJBU0VfRE1BX1NUQVQgfCBFTl9JTlRfT05fUENJX0FCT1JUKTsKLSAgICBpZiAoREMzOTBfcmVhZDgoQ3VycmVudF9GaWZvKSAmIDB4MWYpCi0gICAgICB7Ci0JcHJpbnRrICgiREMzOTA6IEZJRk86Iik7Ci0Jd2hpbGUgKERDMzkwX3JlYWQ4KEN1cnJlbnRfRmlmbykgJiAweDFmKSBwcmludGsgKCIgJTAyeCIsIERDMzkwX3JlYWQ4KFNjc2lGaWZvKSk7Ci0JcHJpbnRrICgiXG4iKTsKLSAgICAgIH0KLSAgICBwcmludGsgKCJEQzM5MDogUmVnaXN0ZXIgZHVtcDogRE1BIGVuZ2luZTpcbiIpOwotICAgIHByaW50ayAoIkRDMzkwOiBDbWQgICBTVHJDbnQgICAgU0J1c0EgICAgV3JrQkMgICAgV3JrQUMgU3RhdCBTQnVzQ3RybFxuIik7Ci0gICAgcHJpbnRrICgiREMzOTA6ICAlMDJ4ICUwOHggJTA4eCAlMDh4ICUwOHggICAlMDJ4ICUwOHhcbiIsCi0JICAgIERDMzkwX3JlYWQ4KERNQV9DbWQpLCBEQzM5MF9yZWFkMzIoRE1BX1hmZXJDbnQpLCBEQzM5MF9yZWFkMzIoRE1BX1hmZXJBZGRyKSwKLQkgICAgREMzOTBfcmVhZDMyKERNQV9Xa19CeXRlQ250ciksIERDMzkwX3JlYWQzMihETUFfV2tfQWRkckNudHIpLAotCSAgICBEQzM5MF9yZWFkOChETUFfU3RhdHVzKSwgREMzOTBfcmVhZDMyKERNQV9TY3NpQnVzQ3RybCkpOwotICAgIERDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgRU5fSU5UX09OX1BDSV9BQk9SVCk7Ci0KLSAgICBwZGV2ID0gcEFDQi0+cGRldjsKLSAgICBwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfU1RBVFVTLCAmcHN0YXQpOwotICAgIHByaW50ayAoIkRDMzkwOiBSZWdpc3RlciBkdW1wOiBQQ0kgU3RhdHVzOiAlMDR4XG4iLCBwc3RhdCk7Ci0gICAgcHJpbnRrICgiREMzOTA6IEluIGNhc2Ugb2YgZHJpdmVyIHRyb3VibGUgcmVhZCBEb2N1bWVudGF0aW9uL3Njc2kvdG1zY3NpbS50eHRcbiIpOwotfQotCi0KLXN0YXRpYyBpbnQgREMzOTBfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotCXN0cnVjdCBkYzM5MF9hY2IgKnBBQ0IgPSAoc3RydWN0IGRjMzkwX2FjYiopIGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgZGMzOTBfZGNiICpwRENCID0gKHN0cnVjdCBkYzM5MF9kY2IqKSBjbWQtPmRldmljZS0+aG9zdGRhdGE7Ci0KLQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIGNtZCwgIkRDMzkwOiBBYm9ydCBjb21tYW5kXG4iKTsKLQotCS8qIGFib3J0KCkgaXMgdG9vIHN0dXBpZCBmb3IgYWxyZWFkeSBzZW50IGNvbW1hbmRzIGF0IHRoZSBtb21lbnQuIAotCSAqIElmIGl0J3MgY2FsbGVkIHdlIGFyZSBpbiB0cm91YmxlIGFueXdheSwgc28gbGV0J3MgZHVtcCBzb21lIGluZm8gCi0JICogaW50byB0aGUgc3lzbG9nIGF0IGxlYXN0LiAoS0csIDk4LzA4LzIwLDk5LzA2LzIwKSAqLwotCWRjMzkwX2R1bXBpbmZvKHBBQ0IsIHBEQ0IsIE5VTEwpOwotCi0JcERDQi0+RENCRmxhZyB8PSBBQk9SVF9ERVZfOwotCXByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBBYm9ydGVkLlxuIik7Ci0KLQlyZXR1cm4gRkFJTEVEOwotfQotCi0KLXN0YXRpYyB2b2lkIGRjMzkwX1Jlc2V0RGV2UGFyYW0oIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IgKQotewotICAgIHN0cnVjdCBkYzM5MF9kY2IgKnBEQ0IsICpwZGNiOwotCi0gICAgcERDQiA9IHBBQ0ItPnBMaW5rRENCOwotICAgIGlmICghIHBEQ0IpIHJldHVybjsKLSAgICBwZGNiID0gcERDQjsKLSAgICBkbwotICAgIHsKLQlwRENCLT5TeW5jTW9kZSAmPSB+U1lOQ19ORUdPX0RPTkU7Ci0JcERDQi0+U3luY1BlcmlvZCA9IDA7Ci0JcERDQi0+U3luY09mZnNldCA9IDA7Ci0JcERDQi0+VGFnTWFzayA9IDA7Ci0JcERDQi0+Q3RybFIzID0gRkFTVF9DTEs7Ci0JcERDQi0+Q3RybFI0ICY9IE5FR0FURV9SRVFBQ0tEQVRBIHwgQ1RSTDRfUkVTRVJWRUQgfCBORUdBVEVfUkVRQUNLOwotCXBEQ0ItPkN0cmxSNCB8PSBwQUNCLT5nbGl0Y2hfY2ZnOwotCXBEQ0IgPSBwRENCLT5wTmV4dERDQjsKLSAgICB9Ci0gICAgd2hpbGUoIHBkY2IgIT0gcERDQiApOwotICAgIHBBQ0ItPkFDQkZsYWcgJj0gfihSRVNFVF9ERVYgfCBSRVNFVF9ET05FIHwgUkVTRVRfREVURUNUKTsKLQotfQotCi1zdGF0aWMgaW50IERDMzkwX2J1c19yZXNldCAoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotCXN0cnVjdCBkYzM5MF9hY2IqICAgIHBBQ0IgPSAoc3RydWN0IGRjMzkwX2FjYiopIGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQl1OCAgIGJ2YWw7Ci0KLQlzcGluX2xvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCi0JYnZhbCA9IERDMzkwX3JlYWQ4KEN0cmxSZWcxKSB8IERJU19JTlRfT05fU0NTSV9SU1Q7Ci0JREMzOTBfd3JpdGU4KEN0cmxSZWcxLCBidmFsKTsJLyogZGlzYWJsZSBJUlEgb24gYnVzIHJlc2V0ICovCi0KLQlwQUNCLT5BQ0JGbGFnIHw9IFJFU0VUX0RFVjsKLQlkYzM5MF9SZXNldFNDU0lCdXMocEFDQik7Ci0KLQlkYzM5MF9SZXNldERldlBhcmFtKHBBQ0IpOwotCW1kZWxheSgxKTsKLQlwQUNCLT5sYXN0X3Jlc2V0ID0gamlmZmllcyArIDMqSFovMgotCQkrIEhaICogZGMzOTBfZWVwcm9tQnVmW3BBQ0ItPkFkYXB0ZXJJbmRleF1bRUVfREVMQVldOwotCi0JREMzOTBfd3JpdGU4KFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsKLQlEQzM5MF9yZWFkOChJTlRfU3RhdHVzKTsJCS8qIFJlc2V0IFBlbmRpbmcgSU5UICovCi0KLQlkYzM5MF9Eb2luZ1NSQl9Eb25lKHBBQ0IsIGNtZCk7Ci0KLQlwQUNCLT5wQWN0aXZlRENCID0gTlVMTDsKLQlwQUNCLT5BQ0JGbGFnID0gMDsKLQotCWJ2YWwgPSBEQzM5MF9yZWFkOChDdHJsUmVnMSkgJiB+RElTX0lOVF9PTl9TQ1NJX1JTVDsKLQlEQzM5MF93cml0ZTgoQ3RybFJlZzEsIGJ2YWwpOwkvKiByZS1lbmFibGUgaW50ZXJydXB0ICovCi0KLQlzcGluX3VubG9ja19pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0KLQlyZXR1cm4gU1VDQ0VTUzsKLX0KLQotLyoqCi0gKiBkYzM5MF9zbGF2ZV9hbGxvYyAtIENhbGxlZCBieSB0aGUgc2NzaSBtaWQgbGF5ZXIgdG8gdGVsbCB1cyBhYm91dCBhIG5ldwotICogc2NzaSBkZXZpY2UgdGhhdCB3ZSBuZWVkIHRvIGRlYWwgd2l0aC4KLSAqCi0gKiBAc2NzaV9kZXZpY2U6IFRoZSBuZXcgc2NzaSBkZXZpY2UgdGhhdCB3ZSBuZWVkIHRvIGhhbmRsZS4KLSAqLwotc3RhdGljIGludCBkYzM5MF9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2aWNlKQotewotCXN0cnVjdCBkYzM5MF9hY2IgKnBBQ0IgPSAoc3RydWN0IGRjMzkwX2FjYiopIHNjc2lfZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgZGMzOTBfZGNiICpwRENCLCAqcERDQjIgPSBOVUxMOwotCXVpbnQgaWQgPSBzY3NpX2RldmljZS0+aWQ7Ci0JdWludCBsdW4gPSBzY3NpX2RldmljZS0+bHVuOwotCi0JcERDQiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYzM5MF9kY2IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBEQ0IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKCFwQUNCLT5EQ0JDbnQrKykgewotCQlwQUNCLT5wTGlua0RDQiA9IHBEQ0I7Ci0JCXBBQ0ItPnBEQ0JSdW5Sb2JpbiA9IHBEQ0I7Ci0JfSBlbHNlIHsKLQkJcEFDQi0+cExhc3REQ0ItPnBOZXh0RENCID0gcERDQjsKLQl9Ci0gICAKLQlwRENCLT5wTmV4dERDQiA9IHBBQ0ItPnBMaW5rRENCOwotCXBBQ0ItPnBMYXN0RENCID0gcERDQjsKLQotCXBEQ0ItPnBEQ0JBQ0IgPSBwQUNCOwotCXBEQ0ItPlRhcmdldElEID0gaWQ7Ci0JcERDQi0+VGFyZ2V0TFVOID0gbHVuOwotCi0JLyoKLQkgKiBTb21lIHZhbHVlcyBhcmUgZm9yIGFsbCBMVU5zOiBDb3B5IHRoZW0gCi0JICogSW4gYSBjbGVhbiB3YXk6IFdlIHdvdWxkIGhhdmUgYW4gb3duIHN0cnVjdHVyZSBmb3IgYSBTQ1NJLUlEIAotCSAqLwotCWlmIChsdW4gJiYgKHBEQ0IyID0gZGMzOTBfZmluZERDQihwQUNCLCBpZCwgMCkpKSB7Ci0JCXBEQ0ItPkRldk1vZGUgPSBwRENCMi0+RGV2TW9kZTsKLQkJcERDQi0+U3luY01vZGUgPSBwRENCMi0+U3luY01vZGUgJiBTWU5DX05FR09fRE9ORTsKLQkJcERDQi0+U3luY1BlcmlvZCA9IHBEQ0IyLT5TeW5jUGVyaW9kOwotCQlwRENCLT5TeW5jT2Zmc2V0ID0gcERDQjItPlN5bmNPZmZzZXQ7Ci0JCXBEQ0ItPk5lZ29QZXJpb2QgPSBwRENCMi0+TmVnb1BlcmlvZDsKLSAgICAgIAotCQlwRENCLT5DdHJsUjMgPSBwRENCMi0+Q3RybFIzOwotCQlwRENCLT5DdHJsUjQgPSBwRENCMi0+Q3RybFI0OwotCX0gZWxzZSB7Ci0JCXU4IGluZGV4ID0gcEFDQi0+QWRhcHRlckluZGV4OwotCQlQRUVwcm9tIHByb20gPSAoUEVFcHJvbSkgJmRjMzkwX2VlcHJvbUJ1ZltpbmRleF1baWQgPDwgMl07Ci0KLQkJcERDQi0+RGV2TW9kZSA9IHByb20tPkVFX01PREUxOwotCQlwRENCLT5OZWdvUGVyaW9kID0KLQkJCShkYzM5MF9jbG9ja19wZXJpb2QxW3Byb20tPkVFX1NQRUVEXSAqIDI1KSA+PiAyOwotCQlwRENCLT5DdHJsUjMgPSBGQVNUX0NMSzsKLQkJcERDQi0+Q3RybFI0ID0gcEFDQi0+Z2xpdGNoX2NmZyB8IENUUkw0X1JFU0VSVkVEOwotCQlpZiAoZGMzOTBfZWVwcm9tQnVmW2luZGV4XVtFRV9NT0RFMl0gJiBBQ1RJVkVfTkVHQVRJT04pCi0JCQlwRENCLT5DdHJsUjQgfD0gTkVHQVRFX1JFUUFDS0RBVEEgfCBORUdBVEVfUkVRQUNLOwotCX0KLQotCWlmIChwRENCLT5EZXZNb2RlICYgU1lOQ19ORUdPXykKLQkJcERDQi0+U3luY01vZGUgfD0gU1lOQ19FTkFCTEU7Ci0JZWxzZSB7Ci0JCXBEQ0ItPlN5bmNNb2RlID0gMDsKLQkJcERDQi0+U3luY09mZnNldCAmPSB+MHgwZjsKLQl9Ci0KLQlwRENCLT5DdHJsUjEgPSBwQUNCLT5wU2NzaUhvc3QtPnRoaXNfaWQ7Ci0JaWYgKHBEQ0ItPkRldk1vZGUgJiBQQVJJVFlfQ0hLXykKLQkJcERDQi0+Q3RybFIxIHw9IFBBUklUWV9FUlJfUkVQTzsKLQotCXBBQ0ItPnNjYW5fZGV2aWNlcyA9IDE7Ci0Jc2NzaV9kZXZpY2UtPmhvc3RkYXRhID0gcERDQjsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkYzM5MF9zbGF2ZV9kZXN0cm95IC0gQ2FsbGVkIGJ5IHRoZSBzY3NpIG1pZCBsYXllciB0byB0ZWxsIHVzIGFib3V0IGEKLSAqIGRldmljZSB0aGF0IGlzIGdvaW5nIGF3YXkuCi0gKgotICogQHNjc2lfZGV2aWNlOiBUaGUgc2NzaSBkZXZpY2UgdGhhdCB3ZSBuZWVkIHRvIHJlbW92ZS4KLSAqLwotc3RhdGljIHZvaWQgZGMzOTBfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2aWNlKQotewotCXN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IgPSAoc3RydWN0IGRjMzkwX2FjYiopIHNjc2lfZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCID0gKHN0cnVjdCBkYzM5MF9kY2IqKSBzY3NpX2RldmljZS0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX2RjYiogcFByZXZEQ0IgPSBwQUNCLT5wTGlua0RDQjsKLQotCXBBQ0ItPnNjYW5fZGV2aWNlcyA9IDA7Ci0KLQlCVUdfT04ocERDQi0+R29pbmdTUkJDbnQgPiAxKTsKLQkKLQlpZiAocERDQiA9PSBwQUNCLT5wTGlua0RDQikgewotCQlpZiAocEFDQi0+cExhc3REQ0IgPT0gcERDQikgewotCQkJcERDQi0+cE5leHREQ0IgPSBOVUxMOwotCQkJcEFDQi0+cExhc3REQ0IgPSBOVUxMOwotCQl9Ci0JCXBBQ0ItPnBMaW5rRENCID0gcERDQi0+cE5leHREQ0I7Ci0JfSBlbHNlIHsKLQkJd2hpbGUgKHBQcmV2RENCLT5wTmV4dERDQiAhPSBwRENCKQotCQkJcFByZXZEQ0IgPSBwUHJldkRDQi0+cE5leHREQ0I7Ci0JCXBQcmV2RENCLT5wTmV4dERDQiA9IHBEQ0ItPnBOZXh0RENCOwotCQlpZiAocERDQiA9PSBwQUNCLT5wTGFzdERDQikKLQkJCXBBQ0ItPnBMYXN0RENCID0gcFByZXZEQ0I7Ci0JfQotCi0JaWYgKHBEQ0IgPT0gcEFDQi0+cEFjdGl2ZURDQikKLQkJcEFDQi0+cEFjdGl2ZURDQiA9IE5VTEw7Ci0JaWYgKHBEQ0IgPT0gcEFDQi0+cExpbmtEQ0IpCi0JCXBBQ0ItPnBMaW5rRENCID0gcERDQi0+cE5leHREQ0I7Ci0JaWYgKHBEQ0IgPT0gcEFDQi0+cERDQlJ1blJvYmluKQotCQlwQUNCLT5wRENCUnVuUm9iaW4gPSBwRENCLT5wTmV4dERDQjsKLQlrZnJlZShwRENCKTsgCi0JCi0JcEFDQi0+RENCQ250LS07Ci19Ci0KLXN0YXRpYyBpbnQgZGMzOTBfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzdHJ1Y3QgZGMzOTBfYWNiICphY2IgPSAoc3RydWN0IGRjMzkwX2FjYiAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhOwotCXN0cnVjdCBkYzM5MF9kY2IgKmRjYiA9IChzdHJ1Y3QgZGMzOTBfZGNiICopc2Rldi0+aG9zdGRhdGE7Ci0KLQlhY2ItPnNjYW5fZGV2aWNlcyA9IDA7Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgJiYgKGRjYi0+RGV2TW9kZSAmIFRBR19RVUVVRUlOR18pKSB7Ci0JCWRjYi0+U3luY01vZGUgfD0gRU5fVEFHX1FVRVVFSU5HOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBhY2ItPlRhZ01heE51bSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkucHJvY19uYW1lCQk9ICJ0bXNjc2ltIiwgCi0JLm5hbWUJCQk9IERDMzkwX0JBTk5FUiAiIFYiIERDMzkwX1ZFUlNJT04sCi0JLnNsYXZlX2FsbG9jCQk9IGRjMzkwX3NsYXZlX2FsbG9jLAotCS5zbGF2ZV9jb25maWd1cmUJPSBkYzM5MF9zbGF2ZV9jb25maWd1cmUsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gZGMzOTBfc2xhdmVfZGVzdHJveSwKLQkucXVldWVjb21tYW5kCQk9IERDMzkwX3F1ZXVlY29tbWFuZCwKLQkuZWhfYWJvcnRfaGFuZGxlcgk9IERDMzkwX2Fib3J0LAotCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IERDMzkwX2J1c19yZXNldCwKLQkuY2FuX3F1ZXVlCQk9IDEsCi0JLnRoaXNfaWQJCT0gNywKLQkuc2dfdGFibGVzaXplCQk9IFNHX0FMTCwKLQkuY21kX3Blcl9sdW4JCT0gMSwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCi0JLm1heF9zZWN0b3JzCQk9IDB4NDAwMCwgLyogOE1pQiA9IDE2ICogMTAyNCAqIDUxMiAqLwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBGdW5jdGlvbnMgZm9yIGFjY2VzcyB0byBEQzM5MCBFRVBST00KLSAqIGFuZCBzb21lIHRvIGVtdWxhdGUgaXQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgZGMzOTBfZWVwcm9tX3ByZXBhcmVfcmVhZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY21kKQotewotCXU4IGNhcnJ5RmxhZyA9IDEsIGogPSAweDgwLCBidmFsOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDk7IGkrKykgewotCQlpZiAoY2FycnlGbGFnKSB7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgMHg0MCk7Ci0JCQlidmFsID0gMHhjMDsKLQkJfSBlbHNlCi0JCQlidmFsID0gMHg4MDsKLQotCQl1ZGVsYXkoMTYwKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIGJ2YWwpOwotCQl1ZGVsYXkoMTYwKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDApOwotCQl1ZGVsYXkoMTYwKTsKLQotCQljYXJyeUZsYWcgPSAoY21kICYgaikgPyAxIDogMDsKLQkJaiA+Pj0gMTsKLQl9Ci19Ci0KLXN0YXRpYyB1MTYgZGMzOTBfZWVwcm9tX2dldF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCWludCBpOwotCXUxNiB3dmFsID0gMDsKLQl1OCBidmFsOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJd3ZhbCA8PD0gMTsKLQotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgMHg4MCk7Ci0JCXVkZWxheSgxNjApOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgMHg0MCk7Ci0JCXVkZWxheSgxNjApOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDAwLCAmYnZhbCk7Ci0KLQkJaWYgKGJ2YWwgPT0gMHgyMikKLQkJCXd2YWwgfD0gMTsKLQl9Ci0KLQlyZXR1cm4gd3ZhbDsKLX0KLQotc3RhdGljIHZvaWQgZGMzOTBfcmVhZF9lZXByb20oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiAqcHRyKQotewotCXU4IGNtZCA9IEVFUFJPTV9SRUFELCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDB4NDA7IGkrKykgewotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHhjMCwgMCk7Ci0JCXVkZWxheSgxNjApOwotCi0JCWRjMzkwX2VlcHJvbV9wcmVwYXJlX3JlYWQocGRldiwgY21kKyspOwotCQkqcHRyKysgPSBkYzM5MF9lZXByb21fZ2V0X2RhdGEocGRldik7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDApOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgMCk7Ci0JCXVkZWxheSgxNjApOwotCX0KLX0KLQotLyogT3ZlcnJpZGUgRUVwcm9tIHZhbHVlcyB3aXRoIGV4cGxpY2l0bHkgc2V0IHZhbHVlcyAqLwotc3RhdGljIHZvaWQgZGMzOTBfZWVwcm9tX292ZXJyaWRlKHU4IGluZGV4KQotewotCXU4ICpwdHIgPSAodTggKikgZGMzOTBfZWVwcm9tQnVmW2luZGV4XSwgaWQ7Ci0KLQkvKiBBZGFwdGVyIFNldHRpbmdzICovCi0JaWYgKHRtc2NzaW1bMF0gIT0gLTIpCi0JCXB0cltFRV9BREFQVF9TQ1NJX0lEXSA9ICh1OCl0bXNjc2ltWzBdOwkvKiBBZGFwdGVyIElEICovCi0JaWYgKHRtc2NzaW1bM10gIT0gLTIpCi0JCXB0cltFRV9NT0RFMl0gPSAodTgpdG1zY3NpbVszXTsKLQlpZiAodG1zY3NpbVs1XSAhPSAtMikKLQkJcHRyW0VFX0RFTEFZXSA9IHRtc2NzaW1bNV07CQkvKiBSZXNldCBkZWxheSAqLwotCWlmICh0bXNjc2ltWzRdICE9IC0yKQotCQlwdHJbRUVfVEFHX0NNRF9OVU1dID0gKHU4KXRtc2NzaW1bNF07CS8qIFRhZ2dlZCBDbWRzICovCi0KLQkvKiBEZXZpY2UgU2V0dGluZ3MgKi8KLQlmb3IgKGlkID0gMDsgaWQgPCBNQVhfU0NTSV9JRDsgaWQrKykgewotCQlpZiAodG1zY3NpbVsyXSAhPSAtMikKLQkJCXB0cltpZCA8PCAyXSA9ICh1OCl0bXNjc2ltWzJdOwkJLyogRUVfTU9ERTEgKi8KLQkJaWYgKHRtc2NzaW1bMV0gIT0gLTIpCi0JCQlwdHJbKGlkIDw8IDIpICsgMV0gPSAodTgpdG1zY3NpbVsxXTsJLyogRUVfU3BlZWQgKi8KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgdG1zY3NpbV9kZWZbXSA9IHsKLQk3LAotCTAgLyogMTBNSHogKi8sCi0JUEFSSVRZX0NIS18gfCBTRU5EX1NUQVJUXyB8IEVOX0RJU0NPTk5FQ1RfIHwgU1lOQ19ORUdPXyB8IFRBR19RVUVVRUlOR18sCi0JTU9SRTJfRFJWIHwgR1JFQVRFUl8xRyB8IFJTVF9TQ1NJX0JVUyB8IEFDVElWRV9ORUdBVElPTiB8IExVTl9DSEVDSywKLQkzIC8qIDE2IFRhZ3MgcGVyIExVTiAqLywKLQkxIC8qIHMgZGVsYXkgYWZ0ZXIgUmVzZXQgKi8sCi19OwotCi0vKiBDb3B5IGRlZmF1bHRzIG92ZXIgc2V0IHZhbHVlcyB3aGVyZSBtaXNzaW5nICovCi1zdGF0aWMgdm9pZCBkYzM5MF9maWxsX3dpdGhfZGVmYXVsdHMgKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0JCWlmICh0bXNjc2ltW2ldIDwgMCB8fCB0bXNjc2ltW2ldID4gMjU1KQotCQkJdG1zY3NpbVtpXSA9IHRtc2NzaW1fZGVmW2ldOwotCX0KLQotCS8qIFNhbml0eSBjaGVja3MgKi8KLQlpZiAodG1zY3NpbVswXSA+IDcpCi0JCXRtc2NzaW1bMF0gPSA3OwotCWlmICh0bXNjc2ltWzFdID4gNykKLQkJdG1zY3NpbVsxXSA9IDQ7Ci0JaWYgKHRtc2NzaW1bNF0gPiA1KQotCQl0bXNjc2ltWzRdID0gNDsKLQlpZiAodG1zY3NpbVs1XSA+IDE4MCkKLQkJdG1zY3NpbVs1XSA9IDE4MDsKLX0KLQotc3RhdGljIHZvaWQgZGMzOTBfY2hlY2tfZWVwcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBpbmRleCkKLXsKLQl1OCBpbnRlcnBkW10gPSB7MSwgMywgNSwgMTAsIDE2LCAzMCwgNjAsIDEyMH07Ci0JdTggRUVidWZbMTI4XTsKLQl1MTYgKnB0ciA9ICh1MTYgKilFRWJ1Ziwgd3ZhbCA9IDA7Ci0JaW50IGk7Ci0KLQlkYzM5MF9yZWFkX2VlcHJvbShwZGV2LCBwdHIpOwotCW1lbWNweShkYzM5MF9lZXByb21CdWZbaW5kZXhdLCBFRWJ1ZiwgRUVfQURBUFRfU0NTSV9JRCk7Ci0JbWVtY3B5KCZkYzM5MF9lZXByb21CdWZbaW5kZXhdW0VFX0FEQVBUX1NDU0lfSURdLCAKLQkgICAgICAgJkVFYnVmW1JFQUxfRUVfQURBUFRfU0NTSV9JRF0sIEVFX0xFTiAtIEVFX0FEQVBUX1NDU0lfSUQpOwotCi0JZGMzOTBfZWVwcm9tQnVmW2luZGV4XVtFRV9ERUxBWV0gPSBpbnRlcnBkW2RjMzkwX2VlcHJvbUJ1ZltpbmRleF1bRUVfREVMQVldXTsKLQotCWZvciAoaSA9IDA7IGkgPCAweDQwOyBpKyssIHB0cisrKQotCQl3dmFsICs9ICpwdHI7Ci0KLQkvKiBubyBUZWtyYW0gRUVwcm9tIGZvdW5kICovCi0JaWYgKHd2YWwgIT0gMHgxMjM0KSB7Ci0JCWludCBzcGVlZDsKLQotCQlwcmludGsoS0VSTl9JTkZPICJEQzM5MF9pbml0OiBObyBFRVBST00gZm91bmQhIFRyeWluZyBkZWZhdWx0IHNldHRpbmdzIC4uLlxuIik7Ci0KLQkJLyoKLQkJICogWFhYKGhjaCk6IGJvZ3VzLCBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgdGVrcmFtIGFuZAotCQkgKiAgICAgICAgICAgbm9uLXRla3JhbSBoYmFzIGluIGEgc2luZ2xlIG1hY2hpbmUuCi0JCSAqLwotCQlkYzM5MF9maWxsX3dpdGhfZGVmYXVsdHMoKTsKLQotCQlzcGVlZCA9IGRjMzkwX2Nsb2NrX3NwZWVkW3Rtc2NzaW1bMV1dOwotCQlwcmludGsoS0VSTl9JTkZPICJEQzM5MDogVXNlZCBkZWZhdWx0czogQWRhcHRJRD0laSwgU3BlZWRJZHg9JWkgKCVpLiVpIE1IeiksICIKLQkJICAgICAgICJEZXZNb2RlPTB4JTAyeCwgQWRhcHRNb2RlPTB4JTAyeCwgVGFnZ2VkQ21uZHM9JWkgKCVpKSwgRGVsYXlSZXNldD0laXNcbiIsIAotCQkgICAgICAgdG1zY3NpbVswXSwgdG1zY3NpbVsxXSwgc3BlZWQgLyAxMCwgc3BlZWQgJSAxMCwKLQkJICAgICAgICh1OCl0bXNjc2ltWzJdLCAodTgpdG1zY3NpbVszXSwgdG1zY3NpbVs0XSwgMiA8PCAodG1zY3NpbVs0XSksIHRtc2NzaW1bNV0pOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZGMzOTBfaW5pdF9odyhzdHJ1Y3QgZGMzOTBfYWNiICpwQUNCLCB1OCBpbmRleCkKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHBBQ0ItPnBTY3NpSG9zdDsKLQl1OCBkc3RhdGU7Ci0KLQkvKiBEaXNhYmxlIFNDU0kgYnVzIHJlc2V0IGludGVycnVwdCAqLwotCURDMzkwX3dyaXRlOChDdHJsUmVnMSwgRElTX0lOVF9PTl9TQ1NJX1JTVCB8IHNob3N0LT50aGlzX2lkKTsKLQotCWlmIChwQUNCLT5HbW9kZTIgJiBSU1RfU0NTSV9CVVMpIHsKLQkJZGMzOTBfUmVzZXRTQ1NJQnVzKHBBQ0IpOwotCQl1ZGVsYXkoMTAwMCk7Ci0JCXBBQ0ItPmxhc3RfcmVzZXQgPSBqaWZmaWVzICsgSFovMiArCi0JCQlIWiAqIGRjMzkwX2VlcHJvbUJ1ZltwQUNCLT5BZGFwdGVySW5kZXhdW0VFX0RFTEFZXTsKLQl9Ci0KLQlwQUNCLT5BQ0JGbGFnID0gMDsKLQotCS8qIFJlc2V0IFBlbmRpbmcgSU5UICovCi0JREMzOTBfcmVhZDgoSU5UX1N0YXR1cyk7Ci0JCi0JLyogMjUwbXMgc2VsZWN0aW9uIHRpbWVvdXQgKi8KLQlEQzM5MF93cml0ZTgoU2NzaV9UaW1lT3V0LCBTRUxfVElNRU9VVCk7Ci0JCi0JLyogQ29udmVyc2lvbiBmYWN0b3IgPSAwICwgNDBNSHogY2xvY2sgKi8KLQlEQzM5MF93cml0ZTgoQ2xrX0ZhY3RvciwgQ0xLX0ZSRVFfNDBNSFopOwotCQotCS8qIE5PUCBjbWQgLSBjbGVhciBjb21tYW5kIHJlZ2lzdGVyICovCi0JREMzOTBfd3JpdGU4KFNjc2lDbWQsIE5PUF9DTUQpOwotCQotCS8qIEVuYWJsZSBGZWF0dXJlIGFuZCBTQ1NJLTIgKi8KLQlEQzM5MF93cml0ZTgoQ3RybFJlZzIsIEVOX0ZFQVRVUkUrRU5fU0NTSTJfQ01EKTsKLQkKLQkvKiBGYXN0IGNsb2NrICovCi0JREMzOTBfd3JpdGU4KEN0cmxSZWczLCBGQVNUX0NMSyk7Ci0KLQkvKiBOZWdhdGlvbiAqLwotCURDMzkwX3dyaXRlOChDdHJsUmVnNCwgcEFDQi0+Z2xpdGNoX2NmZyB8IC8qIGdsaXRjaCBlYXRlciAqLwotCQkoZGMzOTBfZWVwcm9tQnVmW2luZGV4XVtFRV9NT0RFMl0gJiBBQ1RJVkVfTkVHQVRJT04pID8KLQkJIE5FR0FURV9SRVFBQ0tEQVRBIDogMCk7Ci0JCi0JLyogQ2xlYXIgVHJhbnNmZXIgQ291bnQgSGlnaDogSUQgKi8KLQlEQzM5MF93cml0ZTgoQ3RjUmVnX0hpZ2gsIDApOwotCURDMzkwX3dyaXRlOChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotCURDMzkwX3dyaXRlOChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0JREMzOTBfd3JpdGUzMihETUFfU2NzaUJ1c0N0cmwsIEVOX0lOVF9PTl9QQ0lfQUJPUlQpOwotCi0JZHN0YXRlID0gREMzOTBfcmVhZDgoRE1BX1N0YXR1cyk7Ci0JREMzOTBfd3JpdGU4KERNQV9TdGF0dXMsIGRzdGF0ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZGMzOTBfcHJvYmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IGRjMzkwX2FjYiAqcEFDQjsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKLQl1bnNpZ25lZCBsb25nIGlvX3BvcnQ7Ci0JaW50IGVycm9yID0gLUVOT0RFViwgaTsKLQotCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLQkJZ290byBvdXQ7Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCWVycm9yID0gLUVOT01FTTsKLQlpZiAoZGlzYWJsZV9jbHVzdGVyaW5nKQotCQlkcml2ZXJfdGVtcGxhdGUudXNlX2NsdXN0ZXJpbmcgPSBESVNBQkxFX0NMVVNURVJJTkc7Ci0Jc2hvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJmRyaXZlcl90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBkYzM5MF9hY2IpKTsKLQlpZiAoIXNob3N0KQotCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKLQotCXBBQ0IgPSAoc3RydWN0IGRjMzkwX2FjYiAqKXNob3N0LT5ob3N0ZGF0YTsKLQltZW1zZXQocEFDQiwgMCwgc2l6ZW9mKHN0cnVjdCBkYzM5MF9hY2IpKTsKLQotCWRjMzkwX2NoZWNrX2VlcHJvbShwZGV2LCBkYzM5MF9hZGFwdGVyQ250KTsKLQlkYzM5MF9lZXByb21fb3ZlcnJpZGUoZGMzOTBfYWRhcHRlckNudCk7Ci0KLQlpb19wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwotCi0Jc2hvc3QtPnRoaXNfaWQgPSBkYzM5MF9lZXByb21CdWZbZGMzOTBfYWRhcHRlckNudF1bRUVfQURBUFRfU0NTSV9JRF07Ci0Jc2hvc3QtPmlvX3BvcnQgPSBpb19wb3J0OwotCXNob3N0LT5uX2lvX3BvcnQgPSAweDgwOwotCXNob3N0LT5pcnEgPSBwZGV2LT5pcnE7Ci0Jc2hvc3QtPmJhc2UgPSBpb19wb3J0OwotCXNob3N0LT51bmlxdWVfaWQgPSBpb19wb3J0OwotCi0JcEFDQi0+bGFzdF9yZXNldCA9IGppZmZpZXM7Ci0JcEFDQi0+cFNjc2lIb3N0ID0gc2hvc3Q7Ci0JcEFDQi0+SU9Qb3J0QmFzZSA9ICh1MTYpIGlvX3BvcnQ7Ci0JcEFDQi0+SVJRTGV2ZWwgPSBwZGV2LT5pcnE7Ci0JCi0Jc2hvc3QtPm1heF9pZCA9IDg7Ci0KLQlpZiAoc2hvc3QtPm1heF9pZCAtIDEgPT0KLQkgICAgZGMzOTBfZWVwcm9tQnVmW2RjMzkwX2FkYXB0ZXJDbnRdW0VFX0FEQVBUX1NDU0lfSURdKQotCQlzaG9zdC0+bWF4X2lkLS07Ci0KLQlpZiAoZGMzOTBfZWVwcm9tQnVmW2RjMzkwX2FkYXB0ZXJDbnRdW0VFX01PREUyXSAmIExVTl9DSEVDSykKLQkJc2hvc3QtPm1heF9sdW4gPSA4OwotCWVsc2UKLQkJc2hvc3QtPm1heF9sdW4gPSAxOwotCi0JcEFDQi0+cEZyZWVTUkIgPSBwQUNCLT5TUkJfYXJyYXk7Ci0JcEFDQi0+U1JCQ291bnQgPSBNQVhfU1JCX0NOVDsKLQlwQUNCLT5BZGFwdGVySW5kZXggPSBkYzM5MF9hZGFwdGVyQ250OwotCXBBQ0ItPlRhZ01heE51bSA9Ci0JCTIgPDwgZGMzOTBfZWVwcm9tQnVmW2RjMzkwX2FkYXB0ZXJDbnRdW0VFX1RBR19DTURfTlVNXTsKLQlwQUNCLT5HbW9kZTIgPSBkYzM5MF9lZXByb21CdWZbZGMzOTBfYWRhcHRlckNudF1bRUVfTU9ERTJdOwotCi0JZm9yIChpID0gMDsgaSA8IHBBQ0ItPlNSQkNvdW50LTE7IGkrKykKLQkJcEFDQi0+U1JCX2FycmF5W2ldLnBOZXh0U1JCID0gJnBBQ0ItPlNSQl9hcnJheVtpKzFdOwotCXBBQ0ItPlNSQl9hcnJheVtwQUNCLT5TUkJDb3VudC0xXS5wTmV4dFNSQiA9IE5VTEw7Ci0JcEFDQi0+cFRtcFNSQiA9ICZwQUNCLT5UbXBTUkI7Ci0KLQlwQUNCLT5zZWxfdGltZW91dCA9IFNFTF9USU1FT1VUOwotCXBBQ0ItPmdsaXRjaF9jZmcgPSBFQVRFUl8yNU5TOwotCXBBQ0ItPnBkZXYgPSBwZGV2OwotCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb19wb3J0LCBzaG9zdC0+bl9pb19wb3J0LCAidG1zY3NpbSIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiREMzOTA6IHJlZ2lzdGVyIElPIHBvcnRzIGVycm9yIVxuIik7Ci0JCWdvdG8gb3V0X2hvc3RfcHV0OwotCX0KLQotCS8qIFJlc2V0IFBlbmRpbmcgSU5UICovCi0JREMzOTBfcmVhZDhfKElOVF9TdGF0dXMsIGlvX3BvcnQpOwotCi0JaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG9fREMzOTBfSW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCQkidG1zY3NpbSIsIHBBQ0IpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiREMzOTA6IHJlZ2lzdGVyIElSUSBlcnJvciFcbiIpOwotCQlnb3RvIG91dF9yZWxlYXNlX3JlZ2lvbjsKLQl9Ci0KLQlkYzM5MF9pbml0X2h3KHBBQ0IsIGRjMzkwX2FkYXB0ZXJDbnQpOwotCQotCWRjMzkwX2FkYXB0ZXJDbnQrKzsKLQotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBzaG9zdCk7Ci0KLQllcnJvciA9IHNjc2lfYWRkX2hvc3Qoc2hvc3QsICZwZGV2LT5kZXYpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZnJlZV9pcnE7Ci0Jc2NzaV9zY2FuX2hvc3Qoc2hvc3QpOwotCXJldHVybiAwOwotCi0gb3V0X2ZyZWVfaXJxOgotCWZyZWVfaXJxKHBkZXYtPmlycSwgcEFDQik7Ci0gb3V0X3JlbGVhc2VfcmVnaW9uOgotCXJlbGVhc2VfcmVnaW9uKGlvX3BvcnQsIHNob3N0LT5uX2lvX3BvcnQpOwotIG91dF9ob3N0X3B1dDoKLQlzY3NpX2hvc3RfcHV0KHNob3N0KTsKLSBvdXRfZGlzYWJsZV9kZXZpY2U6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotIG91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICogZGMzOTBfcmVtb3ZlX29uZSAtIENhbGxlZCB0byByZW1vdmUgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIuCi0gKgotICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gcmVtb3ZlLgotICovCi1zdGF0aWMgdm9pZCBkYzM5MF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyBpZmxhZ3M7Ci0Jc3RydWN0IGRjMzkwX2FjYiogcEFDQiA9IChzdHJ1Y3QgZGMzOTBfYWNiKikgc2NzaV9ob3N0LT5ob3N0ZGF0YTsKLQl1OCBidmFsOwotCi0Jc2NzaV9yZW1vdmVfaG9zdChzY3NpX2hvc3QpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2NzaV9ob3N0LT5ob3N0X2xvY2ssIGlmbGFncyk7Ci0JcEFDQi0+QUNCRmxhZyA9IFJFU0VUX0RFVjsKLQlidmFsID0gREMzOTBfcmVhZDgoQ3RybFJlZzEpIHwgRElTX0lOVF9PTl9TQ1NJX1JTVDsKLQlEQzM5MF93cml0ZTggKEN0cmxSZWcxLCBidmFsKTsJLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8KLQlpZiAocEFDQi0+R21vZGUyICYgUlNUX1NDU0lfQlVTKQotCQlkYzM5MF9SZXNldFNDU0lCdXMocEFDQik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzY3NpX2hvc3QtPmhvc3RfbG9jaywgaWZsYWdzKTsKLQotCWZyZWVfaXJxKHNjc2lfaG9zdC0+aXJxLCBwQUNCKTsKLQlyZWxlYXNlX3JlZ2lvbihzY3NpX2hvc3QtPmlvX3BvcnQsIHNjc2lfaG9zdC0+bl9pb19wb3J0KTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwotCXNjc2lfaG9zdF9wdXQoc2NzaV9ob3N0KTsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRtc2NzaW1fcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1ENTNDOTc0LAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHRtc2NzaW1fcGNpX3RibCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkYzM5MF9kcml2ZXIgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gInRtc2NzaW0iLAotCS5pZF90YWJsZSAgICAgICA9IHRtc2NzaW1fcGNpX3RibCwKLQkucHJvYmUgICAgICAgICAgPSBkYzM5MF9wcm9iZV9vbmUsCi0JLnJlbW92ZSAgICAgICAgID0gZGMzOTBfcmVtb3ZlX29uZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRjMzkwX21vZHVsZV9pbml0KHZvaWQpCi17Ci0JaWYgKCFkaXNhYmxlX2NsdXN0ZXJpbmcpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IGNsdXN0ZXJpbmcgbm93IGVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgeW91IGdldCBwcm9ibGVtcyBsb2FkXG4iKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgIHdpdGggXCJkaXNhYmxlX2NsdXN0ZXJpbmc9MVwiIGFuZCByZXBvcnQgdG8gbWFpbnRhaW5lcnNcbiIpOwotCX0KLQotCWlmICh0bXNjc2ltWzBdID09IC0xIHx8IHRtc2NzaW1bMF0gPiAxNSkgewotCQl0bXNjc2ltWzBdID0gNzsKLQkJdG1zY3NpbVsxXSA9IDQ7Ci0JCXRtc2NzaW1bMl0gPSBQQVJJVFlfQ0hLXyB8IFRBR19RVUVVRUlOR187Ci0JCXRtc2NzaW1bM10gPSBNT1JFMl9EUlYgfCBHUkVBVEVSXzFHIHwgUlNUX1NDU0lfQlVTIHwgQUNUSVZFX05FR0FUSU9OOwotCQl0bXNjc2ltWzRdID0gMjsKLQkJdG1zY3NpbVs1XSA9IDEwOwotCQlwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFVzaW5nIHNhZmUgc2V0dGluZ3MuXG4iKTsKLQl9Ci0KLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZGMzOTBfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGRjMzkwX21vZHVsZV9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkYzM5MF9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChkYzM5MF9tb2R1bGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChkYzM5MF9tb2R1bGVfZXhpdCk7Ci0KLSNpZm5kZWYgTU9EVUxFCi1zdGF0aWMgaW50IF9faW5pdCBkYzM5MF9zZXR1cCAoY2hhciAqc3RyKQotewkKLQlpbnQgaW50c1s4XSxpLCBpbTsKLQotCWdldF9vcHRpb25zKHN0ciwgQVJSQVlfU0laRShpbnRzKSwgaW50cyk7Ci0JaW0gPSBpbnRzWzBdOwotCi0JaWYgKGltID4gNikgewotCQlwcmludGsgKEtFUk5fTk9USUNFICJEQzM5MDogaWdub3JlIGV4dHJhIHBhcmFtcyFcbiIpOwotCQlpbSA9IDY7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGltOyBpKyspCi0JCXRtc2NzaW1baV0gPSBpbnRzW2krMV07Ci0JLyogZGMzOTBfY2hlY2twYXJhbXMgKCk7ICovCi0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoInRtc2NzaW09IiwgZGMzOTBfc2V0dXApOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdG1zY3NpbS5oIGIvZHJpdmVycy9zY3NpL3Rtc2NzaW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxYmI0YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvdG1zY3NpbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotOyoJRmlsZSBOYW1lIDogVE1TQ1NJTS5ICQkJCQkgICAgICAgKgotOyoJCSAgICBURUtSQU0gREMtMzkwKFQpIFBDSSBTQ1NJIEJ1cyBNYXN0ZXIgSG9zdCBBZGFwdGVyICAqCi07KgkJICAgIERldmljZSBEcml2ZXIJCQkJICAgICAgICoKLTsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICRJZDogdG1zY3NpbS5oLHYgMi4xNS4yLjMgMjAwMC8xMS8xNyAyMDo1MjoyNyBnYXJsb2ZmIEV4cCAkICovCi0KLSNpZm5kZWYgX1RNU0NTSU1fSAotI2RlZmluZSBfVE1TQ1NJTV9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jZGVmaW5lIFNDU0lfSVJRX05PTkUgMjU1Ci0KLSNkZWZpbmUgTUFYX0FEQVBURVJfTlVNIAk0Ci0jZGVmaW5lIE1BWF9TR19MSVNUX0JVRiAJMTYJLyogTm90IHVzZWQgKi8KLSNkZWZpbmUgTUFYX1NDU0lfSUQJCTgKLSNkZWZpbmUgTUFYX1NSQl9DTlQJCTUwCS8qIE1heCBudW1iZXIgb2Ygc3RhcnRlZCBjb21tYW5kcyAqLwotCi0jZGVmaW5lIFNFTF9USU1FT1VUCQkxNTMJLyogMjUwIG1zIHNlbGVjdGlvbiB0aW1lb3V0IChAIDQwIE1IeikgKi8KLQotLyoKLTstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotOyBTQ1NJIFJlcXVlc3QgQmxvY2sKLTstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLXN0cnVjdCBkYzM5MF9zcmIKLXsKLS8vdTgJCUNtZEJsb2NrWzEyXTsKLQotc3RydWN0IGRjMzkwX3NyYgkqcE5leHRTUkI7Ci1zdHJ1Y3QgZGMzOTBfZGNiCSpwU1JCRENCOwotc3RydWN0IHNjc2lfY21uZAkqcGNtZDsKLXN0cnVjdCBzY2F0dGVybGlzdAkqcFNlZ21lbnRMaXN0OwotCi1zdHJ1Y3Qgc2NhdHRlcmxpc3QgU2VnbWVudHg7CS8qIG1ha2UgYSBvbmUgZW50cnkgb2YgUy9HIGxpc3QgdGFibGUgKi8KLQotdW5zaWduZWQgbG9uZwlTR0J1c0FkZHI7CS8qO2Egc2VnbWVudCBzdGFydGluZyBhZGRyZXNzIGFzIHNlZW4gYnkgQU01M0M5NzRBCi0JCQkJICBpbiBDUFUgZW5kaWFubmVzcy4gV2UncmUgb25seSBnZXR0aW5nIDMyLWJpdCBidXMKLQkJCQkgIGFkZHJlc3NlcyBieSBkZWZhdWx0ICovCi11bnNpZ25lZCBsb25nCVNHVG9CZVhmZXJMZW47CS8qOyB0byBiZSB4ZmVyIGxlbmd0aCAqLwotdW5zaWduZWQgbG9uZwlUb3RhbFhmZXJyZWRMZW47Ci11bnNpZ25lZCBsb25nCVNhdmVkVG90WExlbjsKLXVuc2lnbmVkIGxvbmcJU2F2ZWRfUHRyOwotdTMyCQlTUkJTdGF0ZTsKLQotdTgJCVNSQlN0YXR1czsKLXU4CQlTUkJGbGFnOwkvKjsgYjAtQXV0b1JlcVNlbnNlLGI2LVJlYWQsYjctd3JpdGUgKi8KLQkJCQkvKjsgYjQtc2V0dGltZW91dCxiNS1SZXNpZHVhbCB2YWxpZCAqLwotdTgJCUFkYXB0U3RhdHVzOwotdTgJCVRhcmdldFN0YXR1czsKLQotdTgJCVNjc2lQaGFzZTsKLXM4CQlUYWdOdW1iZXI7Ci11OAkJU0dJbmRleDsKLXU4CQlTR2NvdW50OwotCi11OAkJTXNnQ250OwotdTgJCUVuZE1lc3NhZ2U7Ci0KLXU4CQlNc2dJbkJ1Zls2XTsKLXU4CQlNc2dPdXRCdWZbNl07Ci0KLS8vdTgJCUlPUkJGbGFnOwkvKjs4MWgtUmVzZXQsIDItcmV0cnkgKi8KLX07Ci0KLQotLyoKLTstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotOyBEZXZpY2UgQ29udHJvbCBCbG9jawotOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotc3RydWN0IGRjMzkwX2RjYgotewotc3RydWN0IGRjMzkwX2RjYgkqcE5leHREQ0I7Ci1zdHJ1Y3QgZGMzOTBfYWNiCSpwRENCQUNCOwotCi0vKiBRdWV1ZWQgU1JCcyAqLwotc3RydWN0IGRjMzkwX3NyYgkqcEdvaW5nU1JCOwotc3RydWN0IGRjMzkwX3NyYgkqcEdvaW5nTGFzdDsKLXN0cnVjdCBkYzM5MF9zcmIJKnBBY3RpdmVTUkI7Ci11OAkJR29pbmdTUkJDbnQ7Ci0KLXUzMgkJVGFnTWFzazsKLQotdTgJCVRhcmdldElEOwkvKjsgU0NTSSBUYXJnZXQgSUQgIChTQ1NJIE9ubHkpICovCi11OAkJVGFyZ2V0TFVOOwkvKjsgU0NTSSBMb2cuICBVbml0IChTQ1NJIE9ubHkpICovCi11OAkJRGV2TW9kZTsKLXU4CQlEQ0JGbGFnOwotCi11OAkJQ3RybFIxOwotdTgJCUN0cmxSMzsKLXU4CQlDdHJsUjQ7Ci0KLXU4CQlTeW5jTW9kZTsJLyo7IDA6YXN5bmMgbW9kZSAqLwotdTgJCU5lZ29QZXJpb2Q7CS8qO2ZvciBuZWdvLiAqLwotdTgJCVN5bmNQZXJpb2Q7CS8qO2ZvciByZWcuICovCi11OAkJU3luY09mZnNldDsJLyo7Zm9yIHJlZy4gYW5kIG5lZ28uKGxvdyBuaWJibGUpICovCi19OwotCi0KLS8qCi07LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTsgQWRhcHRlciBDb250cm9sIEJsb2NrCi07LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi1zdHJ1Y3QgZGMzOTBfYWNiCi17Ci1zdHJ1Y3QgU2NzaV9Ib3N0ICpwU2NzaUhvc3Q7Ci11MTYJCUlPUG9ydEJhc2U7Ci11OAkJSVJRTGV2ZWw7Ci11OAkJc3RhdHVzOwotCi11OAkJU1JCQ291bnQ7Ci11OAkJQWRhcHRlckluZGV4OwkvKjsgbnRoIEFkYXB0ZXIgdGhpcyBkcml2ZXIgKi8KLXU4CQlEQ0JDbnQ7Ci0KLXU4CQlUYWdNYXhOdW07Ci11OAkJQUNCRmxhZzsKLXU4CQlHbW9kZTI7Ci11OAkJc2Nhbl9kZXZpY2VzOwotCi1zdHJ1Y3QgZGMzOTBfZGNiCSpwTGlua0RDQjsKLXN0cnVjdCBkYzM5MF9kY2IJKnBMYXN0RENCOwotc3RydWN0IGRjMzkwX2RjYgkqcERDQlJ1blJvYmluOwotCi1zdHJ1Y3QgZGMzOTBfZGNiCSpwQWN0aXZlRENCOwotc3RydWN0IGRjMzkwX3NyYgkqcEZyZWVTUkI7Ci1zdHJ1Y3QgZGMzOTBfc3JiCSpwVG1wU1JCOwotCi11OAkJbXNnaW4xMjNbNF07Ci11OAkJQ29ubmVjdGVkOwotdTgJCXBhZDsKLQotI2lmIGRlZmluZWQoVVNFX1NQSU5MT0NLUykgJiYgVVNFX1NQSU5MT0NLUyA+IDEgJiYgKGRlZmluZWQoQ09ORklHX1NNUCkgfHwgREVCVUdfU1BJTkxPQ0tTID4gMCkKLXNwaW5sb2NrX3QJbG9jazsKLSNlbmRpZgotdTgJCXNlbF90aW1lb3V0OwotdTgJCWdsaXRjaF9jZmc7Ci0KLXU4CQlNc2dMZW47Ci11OAkJSWdub3JlX0lSUTsJLyogTm90IHVzZWQgKi8KLQotc3RydWN0IHBjaV9kZXYJKnBkZXY7Ci0KLXVuc2lnbmVkIGxvbmcgICBsYXN0X3Jlc2V0OwotdW5zaWduZWQgbG9uZwlDbWRzOwotdTMyCQlTZWxMb3N0OwotdTMyCQlTZWxDb25uOwotdTMyCQlDbWRJblE7Ci11MzIJCUNtZE91dE9mU1JCOwotCi1zdHJ1Y3QgZGMzOTBfc3JiCVRtcFNSQjsKLXN0cnVjdCBkYzM5MF9zcmIJU1JCX2FycmF5W01BWF9TUkJfQ05UXTsgCS8qIDUwIFNSQnMgKi8KLX07Ci0KLQotLyo7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLSNkZWZpbmUgQklUMzEJMHg4MDAwMDAwMAotI2RlZmluZSBCSVQzMAkweDQwMDAwMDAwCi0jZGVmaW5lIEJJVDI5CTB4MjAwMDAwMDAKLSNkZWZpbmUgQklUMjgJMHgxMDAwMDAwMAotI2RlZmluZSBCSVQyNwkweDA4MDAwMDAwCi0jZGVmaW5lIEJJVDI2CTB4MDQwMDAwMDAKLSNkZWZpbmUgQklUMjUJMHgwMjAwMDAwMAotI2RlZmluZSBCSVQyNAkweDAxMDAwMDAwCi0jZGVmaW5lIEJJVDIzCTB4MDA4MDAwMDAKLSNkZWZpbmUgQklUMjIJMHgwMDQwMDAwMAotI2RlZmluZSBCSVQyMQkweDAwMjAwMDAwCi0jZGVmaW5lIEJJVDIwCTB4MDAxMDAwMDAKLSNkZWZpbmUgQklUMTkJMHgwMDA4MDAwMAotI2RlZmluZSBCSVQxOAkweDAwMDQwMDAwCi0jZGVmaW5lIEJJVDE3CTB4MDAwMjAwMDAKLSNkZWZpbmUgQklUMTYJMHgwMDAxMDAwMAotI2RlZmluZSBCSVQxNQkweDAwMDA4MDAwCi0jZGVmaW5lIEJJVDE0CTB4MDAwMDQwMDAKLSNkZWZpbmUgQklUMTMJMHgwMDAwMjAwMAotI2RlZmluZSBCSVQxMgkweDAwMDAxMDAwCi0jZGVmaW5lIEJJVDExCTB4MDAwMDA4MDAKLSNkZWZpbmUgQklUMTAJMHgwMDAwMDQwMAotI2RlZmluZSBCSVQ5CTB4MDAwMDAyMDAKLSNkZWZpbmUgQklUOAkweDAwMDAwMTAwCi0jZGVmaW5lIEJJVDcJMHgwMDAwMDA4MAotI2RlZmluZSBCSVQ2CTB4MDAwMDAwNDAKLSNkZWZpbmUgQklUNQkweDAwMDAwMDIwCi0jZGVmaW5lIEJJVDQJMHgwMDAwMDAxMAotI2RlZmluZSBCSVQzCTB4MDAwMDAwMDgKLSNkZWZpbmUgQklUMgkweDAwMDAwMDA0Ci0jZGVmaW5lIEJJVDEJMHgwMDAwMDAwMgotI2RlZmluZSBCSVQwCTB4MDAwMDAwMDEKLQotLyo7LS0tVW5pdEN0cmxGbGFnICovCi0jZGVmaW5lIFVOSVRfQUxMT0NBVEVECUJJVDAKLSNkZWZpbmUgVU5JVF9JTkZPX0NIQU5HRUQgQklUMQotI2RlZmluZSBGT1JNQVRJTkdfTUVESUEgQklUMgotI2RlZmluZSBVTklUX1JFVFJZCUJJVDMKLQotLyo7LS0tVW5pdEZsYWdzICovCi0jZGVmaW5lIERBU0RfU1VQUE9SVAlCSVQwCi0jZGVmaW5lIFNDU0lfU1VQUE9SVAlCSVQxCi0jZGVmaW5lIEFTUElfU1VQUE9SVAlCSVQyCi0KLS8qOy0tLS1TUkJTdGF0ZSBtYWNoaW5lIGRlZmluaXRpb24gKi8KLSNkZWZpbmUgU1JCX0ZSRUUJMAotI2RlZmluZSBTUkJfV0FJVAlCSVQwCi0jZGVmaW5lIFNSQl9SRUFEWQlCSVQxCi0jZGVmaW5lIFNSQl9NU0dPVVQJQklUMgkvKjthcmJpdHJhdGlvbittc2dfb3V0IDFzdCBieXRlKi8KLSNkZWZpbmUgU1JCX01TR0lOCUJJVDMKLSNkZWZpbmUgU1JCX01TR0lOX01VTFRJIEJJVDQKLSNkZWZpbmUgU1JCX0NPTU1BTkQJQklUNQotI2RlZmluZSBTUkJfU1RBUlRfCUJJVDYJLyo7YXJiaXRyYXRpb24rbXNnX291dCtjb21tYW5kX291dCovCi0jZGVmaW5lIFNSQl9ESVNDT05ORUNUCUJJVDcKLSNkZWZpbmUgU1JCX0RBVEFfWEZFUglCSVQ4Ci0jZGVmaW5lIFNSQl9YRkVSUEFECUJJVDkKLSNkZWZpbmUgU1JCX1NUQVRVUwlCSVQxMAotI2RlZmluZSBTUkJfQ09NUExFVEVECUJJVDExCi0jZGVmaW5lIFNSQl9BQk9SVF9TRU5UCUJJVDEyCi0jZGVmaW5lIERPX1NZTkNfTkVHTwlCSVQxMwotI2RlZmluZSBTUkJfVU5FWFBFQ1RfUkVTRUwgQklUMTQKLQotLyo7LS0tU1JCc3RhdHVzICovCi0jZGVmaW5lIFNSQl9PSwkJQklUMAotI2RlZmluZSBBQk9SVElPTglCSVQxCi0jZGVmaW5lIE9WRVJfUlVOCUJJVDIKLSNkZWZpbmUgVU5ERVJfUlVOCUJJVDMKLSNkZWZpbmUgUEFSSVRZX0VSUk9SCUJJVDQKLSNkZWZpbmUgU1JCX0VSUk9SCUJJVDUKLQotLyo7LS0tQUNCRmxhZyAqLwotI2RlZmluZSBSRVNFVF9ERVYJQklUMAotI2RlZmluZSBSRVNFVF9ERVRFQ1QJQklUMQotI2RlZmluZSBSRVNFVF9ET05FCUJJVDIKLQotLyo7LS0tRENCRmxhZyAqLwotI2RlZmluZSBBQk9SVF9ERVZfCUJJVDAKLQotLyo7LS0tU1JCRmxhZyAqLwotI2RlZmluZSBEQVRBT1VUIAlCSVQ3Ci0jZGVmaW5lIERBVEFJTgkJQklUNgotI2RlZmluZSBSRVNJRFVBTF9WQUxJRAlCSVQ1Ci0jZGVmaW5lIEVOQUJMRV9USU1FUglCSVQ0Ci0jZGVmaW5lIFJFU0VUX0RFVjAJQklUMgotI2RlZmluZSBBQk9SVF9ERVYJQklUMQotI2RlZmluZSBBVVRPX1JFUVNFTlNFCUJJVDAKLQotLyo7LS0tQWRhcHRlciBzdGF0dXMgKi8KLSNkZWZpbmUgSF9TVEFUVVNfR09PRAkgMAotI2RlZmluZSBIX1NFTF9USU1FT1VUCSAweDExCi0jZGVmaW5lIEhfT1ZFUl9VTkRFUl9SVU4gMHgxMgotI2RlZmluZSBIX1VORVhQX0JVU19GUkVFIDB4MTMKLSNkZWZpbmUgSF9UQVJHRVRfUEhBU0VfRiAweDE0Ci0jZGVmaW5lIEhfSU5WQUxJRF9DQ0JfT1AgMHgxNgotI2RlZmluZSBIX0xJTktfQ0NCX0JBRAkgMHgxNwotI2RlZmluZSBIX0JBRF9UQVJHRVRfRElSIDB4MTgKLSNkZWZpbmUgSF9EVVBMSUNBVEVfQ0NCICAweDE5Ci0jZGVmaW5lIEhfQkFEX0NDQl9PUl9TRyAgMHgxQQotI2RlZmluZSBIX0FCT1JUIAkgMHgwRkYKLQotLyogY21kLT5yZXN1bHQgKi8KLSNkZWZpbmUgUkVTX1RBUkdFVAkJMHgwMDAwMDBGRgkvKiBUYXJnZXQgU3RhdGUgKi8KLSNkZWZpbmUgUkVTX1RBUkdFVF9MTlgJCVNUQVRVU19NQVNLCS8qIE9ubHkgb2ZmaWNpYWwgLi4uICovCi0jZGVmaW5lIFJFU19FTkRNU0cJCTB4MDAwMEZGMDAJLyogRW5kIE1lc3NhZ2UgKi8KLSNkZWZpbmUgUkVTX0RJRAkJCTB4MDBGRjAwMDAJLyogRElEXyBjb2RlcyAqLwotI2RlZmluZSBSRVNfRFJWCQkJMHhGRjAwMDAwMAkvKiBEUklWRVJfIGNvZGVzICovCi0KLSNkZWZpbmUgTUtfUkVTKGRydixkaWQsbXNnLHRndCkgKChpbnQpKGRydik8PDI0IHwgKGludCkoZGlkKTw8MTYgfCAoaW50KShtc2cpPDw4IHwgKGludCkodGd0KSkKLSNkZWZpbmUgTUtfUkVTX0xOWChkcnYsZGlkLG1zZyx0Z3QpICgoaW50KShkcnYpPDwyNCB8IChpbnQpKGRpZCk8PDE2IHwgKGludCkobXNnKTw8OCB8IChpbnQpKHRndCkpCi0KLSNkZWZpbmUgU0VUX1JFU19UQVJHRVQod2hvLCB0Z3QpIGRvIHsgd2hvICY9IH5SRVNfVEFSR0VUOyB3aG8gfD0gKGludCkodGd0KTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgU0VUX1JFU19UQVJHRVRfTE5YKHdobywgdGd0KSBkbyB7IHdobyAmPSB+UkVTX1RBUkdFVF9MTlg7IHdobyB8PSAoaW50KSh0Z3QpIDw8IDE7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFNFVF9SRVNfTVNHKHdobywgbXNnKSBkbyB7IHdobyAmPSB+UkVTX0VORE1TRzsgd2hvIHw9IChpbnQpKG1zZykgPDwgODsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgU0VUX1JFU19ESUQod2hvLCBkaWQpIGRvIHsgd2hvICY9IH5SRVNfRElEOyB3aG8gfD0gKGludCkoZGlkKSA8PCAxNjsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgU0VUX1JFU19EUlYod2hvLCBkcnYpIGRvIHsgd2hvICY9IH5SRVNfRFJWOyB3aG8gfD0gKGludCkoZHJ2KSA8PCAyNDsgfSB3aGlsZSAoMCkKLQotLyo7LS0tU3luY19Nb2RlICovCi0jZGVmaW5lIFNZTkNfRElTQUJMRQkwCi0jZGVmaW5lIFNZTkNfRU5BQkxFCUJJVDAKLSNkZWZpbmUgU1lOQ19ORUdPX0RPTkUJQklUMQotI2RlZmluZSBXSURFX0VOQUJMRQlCSVQyCS8qIE5vdCB1c2VkIDstKSAqLwotI2RlZmluZSBXSURFX05FR09fRE9ORQlCSVQzCS8qIE5vdCB1c2VkIDstKSAqLwotI2RlZmluZSBFTl9UQUdfUVVFVUVJTkcJQklUNAotI2RlZmluZSBFTl9BVE5fU1RPUAlCSVQ1Ci0KLSNkZWZpbmUgU1lOQ19ORUdPX09GRlNFVCAxNQotCi0vKjstLS1TQ1NJIGJ1cyBwaGFzZSovCi0jZGVmaW5lIFNDU0lfREFUQV9PVVQJMAotI2RlZmluZSBTQ1NJX0RBVEFfSU4JMQotI2RlZmluZSBTQ1NJX0NPTU1BTkQJMgotI2RlZmluZSBTQ1NJX1NUQVRVU18JMwotI2RlZmluZSBTQ1NJX05PUDAJNAotI2RlZmluZSBTQ1NJX05PUDEJNQotI2RlZmluZSBTQ1NJX01TR19PVVQJNgotI2RlZmluZSBTQ1NJX01TR19JTgk3Ci0KLS8qOy0tLS1TQ1NJIE1TRyBCWVRFKi8gLyogc2VlIHNjc2kvc2NzaS5oICovIC8qIE9uZSBpcyBtaXNzaW5nICEgKi8KLSNkZWZpbmUgQUJPUlRfVEFHCTB4MGQKLQotLyoKLSAqCVNJU0MgcXVlcnkgcXVldWUKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCWRtYV9hZGRyX3QJCXNhdmVkX2RtYV9oYW5kbGU7Ci19IGRjMzkwX2NtZF9zY3BfdDsKLQotLyoKLTs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci07IEVFUFJPTSBieXRlIG9mZnNldAotOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi10eXBlZGVmICBzdHJ1Y3QgIF9FRXByb20KLXsKLXU4CUVFX01PREUxOwotdTgJRUVfU1BFRUQ7Ci11OAl4eDE7Ci11OAl4eDI7Ci19IEVFcHJvbSwgKlBFRXByb207Ci0KLSNkZWZpbmUgUkVBTF9FRV9BREFQVF9TQ1NJX0lEIDY0Ci0jZGVmaW5lIFJFQUxfRUVfTU9ERTIJNjUKLSNkZWZpbmUgUkVBTF9FRV9ERUxBWQk2NgotI2RlZmluZSBSRUFMX0VFX1RBR19DTURfTlVNCTY3Ci0KLSNkZWZpbmUgRUVfQURBUFRfU0NTSV9JRCAzMgotI2RlZmluZSBFRV9NT0RFMgkzMwotI2RlZmluZSBFRV9ERUxBWQkzNAotI2RlZmluZSBFRV9UQUdfQ01EX05VTQkzNQotCi0jZGVmaW5lIEVFX0xFTgkJNDAKLQotLyo7IEVFX01PREUxIGJpdHMgZGVmaW5pdGlvbiovCi0jZGVmaW5lIFBBUklUWV9DSEtfCUJJVDAKLSNkZWZpbmUgU1lOQ19ORUdPXwlCSVQxCi0jZGVmaW5lIEVOX0RJU0NPTk5FQ1RfCUJJVDIKLSNkZWZpbmUgU0VORF9TVEFSVF8JQklUMwotI2RlZmluZSBUQUdfUVVFVUVJTkdfCUJJVDQKLQotLyo7IEVFX01PREUyIGJpdHMgZGVmaW5pdGlvbiovCi0jZGVmaW5lIE1PUkUyX0RSVglCSVQwCi0jZGVmaW5lIEdSRUFURVJfMUcJQklUMQotI2RlZmluZSBSU1RfU0NTSV9CVVMJQklUMgotI2RlZmluZSBBQ1RJVkVfTkVHQVRJT04gQklUMwotI2RlZmluZSBOT19TRUVLIAlCSVQ0Ci0jZGVmaW5lIExVTl9DSEVDSwlCSVQ1Ci0KLSNkZWZpbmUgRU5BQkxFX0NFCTEKLSNkZWZpbmUgRElTQUJMRV9DRQkwCi0jZGVmaW5lIEVFUFJPTV9SRUFECTB4ODAKLQotLyoKLTs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci07CUFNRCA1M0M5NzQgUmVnaXN0ZXJzIGJpdCBEZWZpbml0aW9uCi07PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLS8qCi07PT09PT09PT09PT09PT09PT09PT0KLTsgU0NTSSBSZWdpc3RlcgotOz09PT09PT09PT09PT09PT09PT09Ci0qLwotCi0vKjsgQ29tbWFuZCBSZWcuKCswQ0gpIChydykgKi8KLSNkZWZpbmUgRE1BX0NPTU1BTkQJCUJJVDcKLSNkZWZpbmUgTk9QX0NNRCAJCTAKLSNkZWZpbmUgQ0xFQVJfRklGT19DTUQJCTEKLSNkZWZpbmUgUlNUX0RFVklDRV9DTUQJCTIKLSNkZWZpbmUgUlNUX1NDU0lfQlVTX0NNRAkzCi0KLSNkZWZpbmUgSU5GT19YRkVSX0NNRAkJMHgxMAotI2RlZmluZSBJTklUSUFUT1JfQ01EX0NNUExURQkweDExCi0jZGVmaW5lIE1TR19BQ0NFUFRFRF9DTUQJMHgxMgotI2RlZmluZSBYRkVSX1BBRF9CWVRFCQkweDE4Ci0jZGVmaW5lIFNFVF9BVE5fQ01ECQkweDFBCi0jZGVmaW5lIFJFU0VUX0FUTl9DTUQJCTB4MUIKLQotI2RlZmluZSBTRUxfV09fQVROCQkweDQxCS8qIGN1cnJlbnRseSBub3QgdXNlZCAqLwotI2RlZmluZSBTRUxfV19BVE4JCTB4NDIKLSNkZWZpbmUgU0VMX1dfQVROX1NUT1AJCTB4NDMKLSNkZWZpbmUgU0VMX1dfQVROMwkJMHg0NgotI2RlZmluZSBFTl9TRUxfUkVTRUwJCTB4NDQKLSNkZWZpbmUgRElTX1NFTF9SRVNFTAkJMHg0NQkvKiBjdXJyZW50bHkgbm90IHVzZWQgKi8KLSNkZWZpbmUgUkVTRUwJCQkweDQwCS8qICIgKi8KLSNkZWZpbmUgUkVTRUxfQVROMwkJMHg0NwkvKiAiICovCi0KLSNkZWZpbmUgREFUQV9YRkVSX0NNRAkJSU5GT19YRkVSX0NNRAotCi0KLS8qOyBTQ1NJIFN0YXR1cyBSZWcuKCsxMEgpIChyKSAqLwotI2RlZmluZSBJTlRFUlJVUFQJCUJJVDcKLSNkZWZpbmUgSUxMRUdBTF9PUF9FUlIJCUJJVDYKLSNkZWZpbmUgUEFSSVRZX0VSUgkJQklUNQotI2RlZmluZSBDT1VOVF8yX1pFUk8JCUJJVDQKLSNkZWZpbmUgR1JPVVBfQ09ERV9WQUxJRAlCSVQzCi0jZGVmaW5lIFNDU0lfUEhBU0VfTUFTSyAJKEJJVDIrQklUMStCSVQwKSAKLS8qIEJJVDI6IE1TRyBwaGFzZTsgQklUMTogQy9EIHBoeXNlOyBCSVQwOiBJL08gcGhhc2UgKi8KLQotLyo7IEludGVycnVwdCBTdGF0dXMgUmVnLigrMTRIKSAocikgKi8KLSNkZWZpbmUgU0NTSV9SRVNFVAkJQklUNwotI2RlZmluZSBJTlZBTElEX0NNRAkJQklUNgotI2RlZmluZSBESVNDT05ORUNURUQJCUJJVDUKLSNkZWZpbmUgU0VSVklDRV9SRVFVRVNUIAlCSVQ0Ci0jZGVmaW5lIFNVQ0NFU1NGVUxfT1AJCUJJVDMKLSNkZWZpbmUgUkVTRUxFQ1RFRAkJQklUMgotI2RlZmluZSBTRUxfQVRURU5USU9OCQlCSVQxCi0jZGVmaW5lIFNFTEVDVEVECQlCSVQwCi0KLS8qOyBJbnRlcm5hbCBTdGF0ZSBSZWcuKCsxOEgpIChyKSAqLwotI2RlZmluZSBTWU5DX09GRlNFVF9GTEFHCUJJVDMKLSNkZWZpbmUgSU5UUk5fU1RBVEVfTUFTSwkoQklUMitCSVQxK0JJVDApCi0vKiAweDA0OiBTZWwuIHN1Y2Nlc3NmdWwgKHcvbyBzdG9wKSwgMHgwMTogU2VsLiBzdWNjZXNzZnVsICh3LyBzdG9wKSAqLwotCi0vKjsgQ2xvY2sgRmFjdG9yIFJlZy4oKzI0SCkgKHcpICovCi0jZGVmaW5lIENMS19GUkVRXzQwTUhaCQkwCi0jZGVmaW5lIENMS19GUkVRXzM1TUhaCQkoQklUMitCSVQxK0JJVDApCi0jZGVmaW5lIENMS19GUkVRXzMwTUhaCQkoQklUMitCSVQxKQotI2RlZmluZSBDTEtfRlJFUV8yNU1IWgkJKEJJVDIrQklUMCkKLSNkZWZpbmUgQ0xLX0ZSRVFfMjBNSFoJCUJJVDIKLSNkZWZpbmUgQ0xLX0ZSRVFfMTVNSFoJCShCSVQxK0JJVDApCi0jZGVmaW5lIENMS19GUkVRXzEwTUhaCQlCSVQxCi0KLS8qOyBDb250cm9sIFJlZy4gMSgrMjBIKSAocncpICovCi0jZGVmaW5lIEVYVEVOREVEX1RJTUlORyAJQklUNwotI2RlZmluZSBESVNfSU5UX09OX1NDU0lfUlNUCUJJVDYKLSNkZWZpbmUgUEFSSVRZX0VSUl9SRVBPIAlCSVQ0Ci0jZGVmaW5lIFNDU0lfSURfT05fQlVTCQkoQklUMitCSVQxK0JJVDApIC8qIGhvc3QgYWRhcHRlciBJRCAqLwotCi0vKjsgQ29udHJvbCBSZWcuIDIoKzJDSCkgKHJ3KSAqLwotI2RlZmluZSBFTl9GRUFUVVJFCQlCSVQ2Ci0jZGVmaW5lIEVOX1NDU0kyX0NNRAkJQklUMwotCi0vKjsgQ29udHJvbCBSZWcuIDMoKzMwSCkgKHJ3KSAqLwotI2RlZmluZSBJRF9NU0dfQ0hFQ0sJCUJJVDcKLSNkZWZpbmUgRU5fUVRBR19NU0cJCUJJVDYKLSNkZWZpbmUgRU5fR1JQMl9DTUQJCUJJVDUKLSNkZWZpbmUgRkFTVF9TQ1NJCQlCSVQ0CS8qIDsxME1CL1NFQyAqLwotI2RlZmluZSBGQVNUX0NMSwkJQklUMwkvKiA7MjUgLSA0MCBNSFogKi8KLQotLyo7IENvbnRyb2wgUmVnLiA0KCszNEgpIChydykgKi8KLSNkZWZpbmUgRUFURVJfMTJOUwkJMAotI2RlZmluZSBFQVRFUl8yNU5TCQlCSVQ3Ci0jZGVmaW5lIEVBVEVSXzM1TlMJCUJJVDYKLSNkZWZpbmUgRUFURVJfME5TCQkoQklUNytCSVQ2KQotI2RlZmluZSBSRURVQ0VEX1BPV0VSCQlCSVQ1Ci0jZGVmaW5lIENUUkw0X1JFU0VSVkVECQlCSVQ0CS8qIG11c3QgYmUgMSBhY2MuIHRvIEFNNTNDOTc0LmMgKi8KLSNkZWZpbmUgTkVHQVRFX1JFUUFDS0RBVEEJQklUMgotI2RlZmluZSBORUdBVEVfUkVRQUNLCQlCSVQzCi0KLSNkZWZpbmUgR0xJVENIX1RPX05TKHgpICgoKH54Pj42ICYgMikgPj4gMSkgfCAoKHg+PjYgJiAxKSA8PCAxIF4gKHg+PjYgJiAyKSkpCi0jZGVmaW5lIE5TX1RPX0dMSVRDSCh5KSAoKCh+eTw8NykgfCB+KCh5PDw2KSBeICgoeTw8NSAmIDE8PDYpIHwgfjB4NDApKSkgJiAweGMwKQotCi0vKgotOz09PT09PT09PT09PT09PT09PT09Ci07IERNQSBSZWdpc3RlcgotOz09PT09PT09PT09PT09PT09PT09Ci0qLwotLyo7IERNQSBDb21tYW5kIFJlZy4oKzQwSCkgKHJ3KSAqLwotI2RlZmluZSBSRUFEX0RJUkVDVElPTgkJQklUNwotI2RlZmluZSBXUklURV9ESVJFQ1RJT04gCTAKLSNkZWZpbmUgRU5fRE1BX0lOVAkJQklUNgotI2RlZmluZSBFTl9QQUdFX0lOVAkJQklUNQkvKiBwYWdlIHRyYW5zZmVyIGludGVycnVwdCBlbmFibGUgKi8KLSNkZWZpbmUgTUFQX1RPX01ETAkJQklUNAotI2RlZmluZSBESUFHTk9TVElDCQlCSVQyCi0jZGVmaW5lIERNQV9JRExFX0NNRAkJMAotI2RlZmluZSBETUFfQkxBU1RfQ01ECQlCSVQwCi0jZGVmaW5lIERNQV9BQk9SVF9DTUQJCUJJVDEKLSNkZWZpbmUgRE1BX1NUQVJUX0NNRAkJKEJJVDErQklUMCkKLQotLyo7IERNQSBTdGF0dXMgUmVnLigrNTRIKSAocikgKi8KLSNkZWZpbmUgUENJX01TX0FCT1JUCQlCSVQ2Ci0jZGVmaW5lIEJMQVNUX0NPTVBMRVRFCQlCSVQ1Ci0jZGVmaW5lIFNDU0lfSU5URVJSVVBUCQlCSVQ0Ci0jZGVmaW5lIERNQV9YRkVSX0RPTkUJCUJJVDMKLSNkZWZpbmUgRE1BX1hGRVJfQUJPUlQJCUJJVDIKLSNkZWZpbmUgRE1BX1hGRVJfRVJST1IJCUJJVDEKLSNkZWZpbmUgUE9XRVJfRE9XTgkJQklUMAotCi0vKjsgRE1BIFNDU0kgQnVzIGFuZCBDdHJsLigrNzBIKSAqLwotI2RlZmluZSBFTl9JTlRfT05fUENJX0FCT1JUCUJJVDI1Ci0jZGVmaW5lIFdSVF9FUkFTRV9ETUFfU1RBVAlCSVQyNAotI2RlZmluZSBQV19ET1dOX0NUUkwJCUJJVDIxCi0jZGVmaW5lIFNDU0lfQlVTWQkJQklUMjAKLSNkZWZpbmUgU0NMSwkJCUJJVDE5Ci0jZGVmaW5lIFNDQU0JCQlCSVQxOAotI2RlZmluZSBTQ1NJX0xJTkVTCQkweDAwMDNmZmZmCi0KLS8qCi07PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotOyBTQ1NJIENoaXAgcmVnaXN0ZXIgYWRkcmVzcyBvZmZzZXQKLTs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci07UmVnaXN0ZXJzIGFyZSBydyB1bmxlc3MgZGVjbGFyZWQgb3RoZXJ3aXNlIAotKi8KLSNkZWZpbmUgQ3RjUmVnX0xvdwkweDAwCS8qIHIJY3Vyci4gdHJhbnNmZXIgY291bnQgKi8KLSNkZWZpbmUgQ3RjUmVnX01pZAkweDA0CS8qIHIgKi8KLSNkZWZpbmUgQ3RjUmVnX0hpZ2gJMHgzOAkvKiByICovCi0jZGVmaW5lIFNjc2lGaWZvCTB4MDgKLSNkZWZpbmUgU2NzaUNtZCAJMHgwQwotI2RlZmluZSBTY3NpX1N0YXR1cwkweDEwCS8qIHIgKi8KLSNkZWZpbmUgSU5UX1N0YXR1cwkweDE0CS8qIHIgKi8KLSNkZWZpbmUgU3luY19QZXJpb2QJMHgxOAkvKiB3ICovCi0jZGVmaW5lIFN5bmNfT2Zmc2V0CTB4MUMJLyogdyAqLwotI2RlZmluZSBDbGtfRmFjdG9yCTB4MjQJLyogdyAqLwotI2RlZmluZSBDdHJsUmVnMQkweDIwCQotI2RlZmluZSBDdHJsUmVnMgkweDJDCi0jZGVmaW5lIEN0cmxSZWczCTB4MzAKLSNkZWZpbmUgQ3RybFJlZzQJMHgzNAotI2RlZmluZSBETUFfQ21kIAkweDQwCi0jZGVmaW5lIERNQV9YZmVyQ250CTB4NDQJLyogcncJc3RhcnRpbmcgdHJhbnNmZXIgY291bnQgKDMyIGJpdCkgKi8KLSNkZWZpbmUgRE1BX1hmZXJBZGRyCTB4NDgJLyogcncJc3RhcnRpbmcgcGh5c2ljYWwgYWRkcmVzcyAoMzIgYml0KSAqLwotI2RlZmluZSBETUFfV2tfQnl0ZUNudHIgMHg0QwkvKiByCXdvcmtpbmcgYnl0ZSBjb3VudGVyICovCi0jZGVmaW5lIERNQV9Xa19BZGRyQ250ciAweDUwCS8qIHIJd29ya2luZyBhZGRyZXNzIGNvdW50ZXIgKi8KLSNkZWZpbmUgRE1BX1N0YXR1cwkweDU0CS8qIHIgKi8KLSNkZWZpbmUgRE1BX01ETF9BZGRyCTB4NTgJLyogcncJc3RhcnRpbmcgTURMIGFkZHJlc3MgKi8KLSNkZWZpbmUgRE1BX1drX01ETF9DbnRyIDB4NUMJLyogcgl3b3JraW5nIE1ETCBjb3VudGVyICovCi0jZGVmaW5lIERNQV9TY3NpQnVzQ3RybCAweDcwCS8qIHJ3CVNDU0kgQnVzLCBQQ0kvRE1BIEN0cmwgKi8KLQotI2RlZmluZSBTdGNSZWdfTG93CUN0Y1JlZ19Mb3cJLyogdwlzdGFydCB0cmFuc2ZlciBjb3VudCAqLwotI2RlZmluZSBTdGNSZWdfTWlkCUN0Y1JlZ19NaWQJLyogdyAqLwotI2RlZmluZSBTdGNSZWdfSGlnaAlDdGNSZWdfSGlnaAkvKiB3ICovCi0jZGVmaW5lIFNjc2lfRGVzdF9JRAlTY3NpX1N0YXR1cwkvKiB3ICovCi0jZGVmaW5lIFNjc2lfVGltZU91dAlJTlRfU3RhdHVzCS8qIHcgKi8KLSNkZWZpbmUgSW50ZXJuX1N0YXRlCVN5bmNfUGVyaW9kCS8qIHIgKi8KLSNkZWZpbmUgQ3VycmVudF9GaWZvCVN5bmNfT2Zmc2V0CS8qIHIJQ3Vyci4gRklGTyAvIGludC4gc3RhdGUgKi8KLQotCi0jZGVmaW5lIERDMzkwX3JlYWQ4KGFkZHJlc3MpCQkJXAotCShpbmIgKHBBQ0ItPklPUG9ydEJhc2UgKyAoYWRkcmVzcykpKQotCi0jZGVmaW5lIERDMzkwX3JlYWQ4XyhhZGRyZXNzLCBiYXNlKQkJXAotCShpbmIgKCh1MTYpKGJhc2UpICsgKGFkZHJlc3MpKSkKLQotI2RlZmluZSBEQzM5MF9yZWFkMTYoYWRkcmVzcykJCQlcCi0JKGludyAocEFDQi0+SU9Qb3J0QmFzZSArIChhZGRyZXNzKSkpCi0KLSNkZWZpbmUgREMzOTBfcmVhZDMyKGFkZHJlc3MpCQkJXAotCShpbmwgKHBBQ0ItPklPUG9ydEJhc2UgKyAoYWRkcmVzcykpKQotCi0jZGVmaW5lIERDMzkwX3dyaXRlOChhZGRyZXNzLHZhbHVlKQkJXAotCW91dGIgKCh2YWx1ZSksIHBBQ0ItPklPUG9ydEJhc2UgKyAoYWRkcmVzcykpCi0KLSNkZWZpbmUgREMzOTBfd3JpdGU4XyhhZGRyZXNzLHZhbHVlLGJhc2UpCVwKLQlvdXRiICgodmFsdWUpLCAodTE2KShiYXNlKSArIChhZGRyZXNzKSkKLQotI2RlZmluZSBEQzM5MF93cml0ZTE2KGFkZHJlc3MsdmFsdWUpCQlcCi0Jb3V0dyAoKHZhbHVlKSwgcEFDQi0+SU9Qb3J0QmFzZSArIChhZGRyZXNzKSkKLQotI2RlZmluZSBEQzM5MF93cml0ZTMyKGFkZHJlc3MsdmFsdWUpCQlcCi0Jb3V0bCAoKHZhbHVlKSwgcEFDQi0+SU9Qb3J0QmFzZSArIChhZGRyZXNzKSkKLQotCi0jZW5kaWYgLyogX1RNU0NTSU1fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3UxNC0zNGYuYyBiL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMKaW5kZXggZDhkY2YzNi4uMTRlYjUwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3UxNC0zNGYuYworKysgYi9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCkBAIC02OTYsMjUgKzY5NiwyNSBAQAogICAgaWYgKFRMREVWKGRldi0+dHlwZSkgJiYgZGV2LT50YWdnZWRfc3VwcG9ydGVkKQogCiAgICAgICBpZiAodGFnX21vZGUgPT0gVEFHX1NJTVBMRSkgewotICAgICAgICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCBNU0dfU0lNUExFX1RBRywgdHFkKTsKKyAgICAgICAgIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldiwgdHFkKTsKICAgICAgICAgIHRhZ19zdWZmaXggPSAiLCBzaW1wbGUgdGFncyI7CiAgICAgICAgICB9CiAgICAgICBlbHNlIGlmICh0YWdfbW9kZSA9PSBUQUdfT1JERVJFRCkgewotICAgICAgICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCBNU0dfT1JERVJFRF9UQUcsIHRxZCk7CisgICAgICAgICBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIHRxZCk7CiAgICAgICAgICB0YWdfc3VmZml4ID0gIiwgb3JkZXJlZCB0YWdzIjsKICAgICAgICAgIH0KICAgICAgIGVsc2UgewotICAgICAgICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB0cWQpOworICAgICAgICAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCB0cWQpOwogICAgICAgICAgdGFnX3N1ZmZpeCA9ICIsIG5vIHRhZ3MiOwogICAgICAgICAgfQogCiAgICBlbHNlIGlmIChUTERFVihkZXYtPnR5cGUpICYmIGxpbmtlZF9jb21tKSB7Ci0gICAgICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXYsIDAsIHRxZCk7CisgICAgICBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIHRxZCk7CiAgICAgICB0YWdfc3VmZml4ID0gIiwgdW50YWdnZWQiOwogICAgICAgfQogCiAgICBlbHNlIHsKLSAgICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgMCwgdXRxZCk7CisgICAgICBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIHV0cWQpOwogICAgICAgdGFnX3N1ZmZpeCA9ICIiOwogICAgICAgfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5jIGIvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QuYwppbmRleCA2MDVjYTYwLi4yZTQ2MTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5jCisrKyBiL2RyaXZlcnMvc2NzaS91ZnMvdWZzaGNkLmMKQEAgLTI3MTMsNyArMjcxMyw3IEBACiAKIAlkZXZfZGJnKGhiYS0+ZGV2LCAiJXM6IGFjdGl2YXRlIHRjcSB3aXRoIHF1ZXVlIGRlcHRoICVkXG4iLAogCQkJX19mdW5jX18sIGx1bl9xZGVwdGgpOwotCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIGx1bl9xZGVwdGgpOworCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGx1bl9xZGVwdGgpOwogfQogCiAvKgpAQCAtMjc4MywxMSArMjc4Myw5IEBACiAJc3RydWN0IHVmc19oYmEgKmhiYTsKIAogCWhiYSA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7Ci0Jc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCA9IDE7CiAKIAkvKiBNb2RlIHNlbnNlKDYpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgVUZTLCBzbyB1c2UgTW9kZSBzZW5zZSgxMCkgKi8KIAlzZGV2LT51c2VfMTBfZm9yX21zID0gMTsKLQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfU0lNUExFX1RBRyk7CiAKIAkvKiBhbGxvdyBTQ1NJIGxheWVyIHRvIHJlc3RhcnQgdGhlIGRldmljZSBpbiBjYXNlIG9mIGVycm9ycyAqLwogCXNkZXYtPmFsbG93X3Jlc3RhcnQgPSAxOwpAQCAtMjgwNywzNCArMjgwNSwxNiBAQAogICogdWZzaGNkX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIGNoYW5nZSBxdWV1ZSBkZXB0aAogICogQHNkZXY6IHBvaW50ZXIgdG8gU0NTSSBkZXZpY2UKICAqIEBkZXB0aDogcmVxdWlyZWQgZGVwdGggdG8gc2V0Ci0gKiBAcmVhc29uOiByZWFzb24gZm9yIGNoYW5naW5nIHRoZSBkZXB0aAogICoKLSAqIENoYW5nZSBxdWV1ZSBkZXB0aCBhY2NvcmRpbmcgdG8gdGhlIHJlYXNvbiBhbmQgbWFrZSBzdXJlCi0gKiB0aGUgbWF4LiBsaW1pdHMgYXJlIG5vdCBjcm9zc2VkLgorICogQ2hhbmdlIHF1ZXVlIGRlcHRoIGFuZCBtYWtlIHN1cmUgdGhlIG1heC4gbGltaXRzIGFyZSBub3QgY3Jvc3NlZC4KICAqLwotc3RhdGljIGludCB1ZnNoY2RfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJaW50IGRlcHRoLCBpbnQgcmVhc29uKQorc3RhdGljIGludCB1ZnNoY2RfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQogewogCXN0cnVjdCB1ZnNfaGJhICpoYmEgPSBzaG9zdF9wcml2KHNkZXYtPmhvc3QpOwogCiAJaWYgKGRlcHRoID4gaGJhLT5udXRycykKIAkJZGVwdGggPSBoYmEtPm51dHJzOwotCi0Jc3dpdGNoIChyZWFzb24pIHsKLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JCQlkZXB0aCA9IDE7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBkZXB0aCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gZGVwdGg7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoKTsKIH0KIAogLyoqCkBAIC0yODYwLDcgKzI4NDAsNiBAQAogCXN0cnVjdCB1ZnNfaGJhICpoYmE7CiAKIAloYmEgPSBzaG9zdF9wcml2KHNkZXYtPmhvc3QpOwotCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgaGJhLT5udXRycyk7CiAJLyogRHJvcCB0aGUgcmVmZXJlbmNlIGFzIGl0IHdvbid0IGJlIG5lZWRlZCBhbnltb3JlICovCiAJaWYgKHVmc2hjZF9zY3NpX3RvX3VwaXVfbHVuKHNkZXYtPmx1bikgPT0gVUZTX1VQSVVfVUZTX0RFVklDRV9XTFVOKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MjM5LDYgKzQyMTgsOCBAQAogCS5jbWRfcGVyX2x1bgkJPSBVRlNIQ0RfQ01EX1BFUl9MVU4sCiAJLmNhbl9xdWV1ZQkJPSBVRlNIQ0RfQ0FOX1FVRVVFLAogCS5tYXhfaG9zdF9ibG9ja2VkCT0gMSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBpbnQgdWZzaGNkX2NvbmZpZ192cmVnX2xvYWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdWZzX3ZyZWcgKnZyZWcsCkBAIC00NzMxLDExICs0NzEyLDExIEBACiAJCQkJICAgICBTVEFSVF9TVE9QX1RJTUVPVVQsIDAsIE5VTEwsIFJFUV9QTSk7CiAJaWYgKHJldCkgewogCQlzZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNkcCwKLQkJCSAgIlNUQVJUX1NUT1AgZmFpbGVkIGZvciBwb3dlciBtb2RlOiAlZFxuIiwgcHdyX21vZGUpOwotCQlzY3NpX3Nob3dfcmVzdWx0KHJldCk7CisJCQkgICAgIlNUQVJUX1NUT1AgZmFpbGVkIGZvciBwb3dlciBtb2RlOiAlZCwgcmVzdWx0ICV4XG4iLAorCQkJICAgIHB3cl9tb2RlLCByZXQpOwogCQlpZiAoZHJpdmVyX2J5dGUocmV0KSAmIERSSVZFUl9TRU5TRSkgewotCQkJc2NzaV9zaG93X3NlbnNlX2hkcigmc3NoZHIpOwotCQkJc2NzaV9zaG93X2V4dGRfc2Vuc2Uoc3NoZHIuYXNjLCBzc2hkci5hc2NxKTsKKwkJCXNjc2lfc2hvd19zZW5zZV9oZHIoc2RwLCBOVUxMLCAmc3NoZHIpOworCQkJc2NzaV9zaG93X2V4dGRfc2Vuc2Uoc2RwLCBOVUxMLCBzc2hkci5hc2MsIHNzaGRyLmFzY3EpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdmlydGlvX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS92aXJ0aW9fc2NzaS5jCmluZGV4IGI4Mzg0NmYuLjIyZTcwMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS92aXJ0aW9fc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS92aXJ0aW9fc2NzaS5jCkBAIC01NjEsNiArNTYxLDE1IEBACiAJcmV0dXJuIHZpcnRzY3NpX3F1ZXVlY29tbWFuZCh2c2NzaSwgJnZzY3NpLT5yZXFfdnFzWzBdLCBzYyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdmlydGlvX3Njc2lfdnEgKnZpcnRzY3NpX3BpY2tfdnFfbXEoc3RydWN0IHZpcnRpb19zY3NpICp2c2NzaSwKKwkJCQkJCSAgc3RydWN0IHNjc2lfY21uZCAqc2MpCit7CisJdTMyIHRhZyA9IGJsa19tcV91bmlxdWVfdGFnKHNjLT5yZXF1ZXN0KTsKKwl1MTYgaHdxID0gYmxrX21xX3VuaXF1ZV90YWdfdG9faHdxKHRhZyk7CisKKwlyZXR1cm4gJnZzY3NpLT5yZXFfdnFzW2h3cV07Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX3Njc2lfdnEgKnZpcnRzY3NpX3BpY2tfdnEoc3RydWN0IHZpcnRpb19zY3NpICp2c2NzaSwKIAkJCQkJICAgICAgIHN0cnVjdCB2aXJ0aW9fc2NzaV90YXJnZXRfc3RhdGUgKnRndCkKIHsKQEAgLTYwNCw3ICs2MTMsMTIgQEAKIAlzdHJ1Y3QgdmlydGlvX3Njc2kgKnZzY3NpID0gc2hvc3RfcHJpdihzaCk7CiAJc3RydWN0IHZpcnRpb19zY3NpX3RhcmdldF9zdGF0ZSAqdGd0ID0KIAkJCQlzY3NpX3RhcmdldChzYy0+ZGV2aWNlKS0+aG9zdGRhdGE7Ci0Jc3RydWN0IHZpcnRpb19zY3NpX3ZxICpyZXFfdnEgPSB2aXJ0c2NzaV9waWNrX3ZxKHZzY3NpLCB0Z3QpOworCXN0cnVjdCB2aXJ0aW9fc2NzaV92cSAqcmVxX3ZxOworCisJaWYgKHNob3N0X3VzZV9ibGtfbXEoc2gpKQorCQlyZXFfdnEgPSB2aXJ0c2NzaV9waWNrX3ZxX21xKHZzY3NpLCBzYyk7CisJZWxzZQorCQlyZXFfdnEgPSB2aXJ0c2NzaV9waWNrX3ZxKHZzY3NpLCB0Z3QpOwogCiAJcmV0dXJuIHZpcnRzY3NpX3F1ZXVlY29tbWFuZCh2c2NzaSwgcmVxX3ZxLCBzYyk7CiB9CkBAIC02NjgsMzAgKzY4MiwxMyBAQAogICogdmlydHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKCkgLSBDaGFuZ2UgYSB2aXJ0c2NzaSB0YXJnZXQncyBxdWV1ZSBkZXB0aAogICogQHNkZXY6CVZpcnRzY3NpIHRhcmdldCB3aG9zZSBxdWV1ZSBkZXB0aCB0byBjaGFuZ2UKICAqIEBxZGVwdGg6CU5ldyBxdWV1ZSBkZXB0aAotICogQHJlYXNvbjoJUmVhc29uIGZvciB0aGUgcXVldWUgZGVwdGggY2hhbmdlLgogICovCi1zdGF0aWMgaW50IHZpcnRzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkJICAgICAgIGludCBxZGVwdGgsCi0JCQkJICAgICAgIGludCByZWFzb24pCitzdGF0aWMgaW50IHZpcnRzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCWludCBtYXhfZGVwdGggPSBzaG9zdC0+Y21kX3Blcl9sdW47CiAKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6IC8qIERyb3AgcWRlcHRoIGluIHJlc3BvbnNlIHRvIEJVU1kgc3RhdGUgKi8KLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUkFNUF9VUDogLyogUmFpc2UgcWRlcHRoIGFmdGVyIEJVU1kgc3RhdGUgcmVzb2x2ZWQgKi8KLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6IC8qIE1hbnVhbCBjaGFuZ2UgdmlhIHN5c2ZzICovCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsCi0JCQkJCXNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLAotCQkJCQltaW4obWF4X2RlcHRoLCBxZGVwdGgpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgbWluKG1heF9kZXB0aCwgcWRlcHRoKSk7CiB9CiAKIHN0YXRpYyBpbnQgdmlydHNjc2lfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2MpCkBAIC03NTgsNiArNzU1LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKIAkudGFyZ2V0X2FsbG9jID0gdmlydHNjc2lfdGFyZ2V0X2FsbG9jLAogCS50YXJnZXRfZGVzdHJveSA9IHZpcnRzY3NpX3RhcmdldF9kZXN0cm95LAorCS50cmFja19xdWV1ZV9kZXB0aCA9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB2aXJ0c2NzaV9ob3N0X3RlbXBsYXRlX211bHRpID0gewpAQCAtNzc2LDYgKzc3NCw3IEBACiAJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnRhcmdldF9hbGxvYyA9IHZpcnRzY3NpX3RhcmdldF9hbGxvYywKIAkudGFyZ2V0X2Rlc3Ryb3kgPSB2aXJ0c2NzaV90YXJnZXRfZGVzdHJveSwKKwkudHJhY2tfcXVldWVfZGVwdGggPSAxLAogfTsKIAogI2RlZmluZSB2aXJ0c2NzaV9jb25maWdfZ2V0KHZkZXYsIGZsZCkgXApAQCAtOTgzLDYgKzk4Miw3IEBACiAJc2hvc3QtPm1heF9pZCA9IG51bV90YXJnZXRzOwogCXNob3N0LT5tYXhfY2hhbm5lbCA9IDA7CiAJc2hvc3QtPm1heF9jbWRfbGVuID0gVklSVElPX1NDU0lfQ0RCX1NJWkU7CisJc2hvc3QtPm5yX2h3X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CiAKIAlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19TQ1NJX0ZfVDEwX1BJKSkgewogCQlob3N0X3Byb3QgPSBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8IFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jCmluZGV4IDU5OGY2NWUuLjBmMTMzYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Ztd19wdnNjc2kuYwpAQCAtNTA0LDMzICs1MDQsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcHZzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkJICAgICBpbnQgcWRlcHRoLAotCQkJCSAgICAgaW50IHJlYXNvbikKK3N0YXRpYyBpbnQgcHZzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7Ci0JaW50IG1heF9kZXB0aDsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7Ci0KLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCS8qCi0JCSAqIFdlIHN1cHBvcnQgb25seSBjaGFuZ2luZyBkZWZhdWx0LgotCQkgKi8KLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JbWF4X2RlcHRoID0gc2hvc3QtPmNhbl9xdWV1ZTsKIAlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JCW1heF9kZXB0aCA9IDE7Ci0JaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKLQkJcWRlcHRoID0gbWF4X2RlcHRoOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOwotCi0JaWYgKHNkZXYtPmlucXVpcnlfbGVuID4gNykKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAotCQkJICAgICJxZGVwdGgoJWQpLCB0YWdnZWQoJWQpLCBzaW1wbGUoJWQpLCBvcmRlcmVkKCVkKSwgc2NzaV9sZXZlbCglZCksIGNtZF9xdWUoJWQpXG4iLAotCQkJICAgIHNkZXYtPnF1ZXVlX2RlcHRoLCBzZGV2LT50YWdnZWRfc3VwcG9ydGVkLAotCQkJICAgIHNkZXYtPnNpbXBsZV90YWdzLCBzZGV2LT5vcmRlcmVkX3RhZ3MsCi0JCQkgICAgc2Rldi0+c2NzaV9sZXZlbCwgKHNkZXYtPmlucXVpcnlbN10gJiAyKSA+PiAxKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CisJCXFkZXB0aCA9IDE7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CiB9CiAKIC8qCkBAIC03MjMsMTAgKzcwMSw2IEBACiAJbWVtY3B5KGUtPmNkYiwgY21kLT5jbW5kLCBlLT5jZGJMZW4pOwogCiAJZS0+dGFnID0gU0lNUExFX1FVRVVFX1RBRzsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCAmJgotCSAgICAoY21kLT50YWcgPT0gSEVBRF9PRl9RVUVVRV9UQUcgfHwKLQkgICAgIGNtZC0+dGFnID09IE9SREVSRURfUVVFVUVfVEFHKSkKLQkJZS0+dGFnID0gY21kLT50YWc7CiAKIAlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCiAJCWUtPmZsYWdzID0gUFZTQ1NJX0ZMQUdfQ01EX0RJUl9UT0hPU1Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvd2Q3MDAwLmMgYi9kcml2ZXJzL3Njc2kvd2Q3MDAwLmMKaW5kZXggMzI2NzQyMy4uZjk0ZDczNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkNzAwMC5jCisrKyBiL2RyaXZlcnMvc2NzaS93ZDcwMDAuYwpAQCAtMTY1Myw3ICsxNjUzLDYgQEAKIAkuY2FuX3F1ZXVlCQk9IFdENzAwMF9RLAogCS50aGlzX2lkCQk9IDcsCiAJLnNnX3RhYmxlc2l6ZQkJPSBXRDcwMDBfU0csCi0JLmNtZF9wZXJfbHVuCQk9IDEsCiAJLnVuY2hlY2tlZF9pc2FfZG1hCT0gMSwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkNzE5eC5jIGIvZHJpdmVycy9zY3NpL3dkNzE5eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDI2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvd2Q3MTl4LmMKQEAgLTAsMCArMSw5OTYgQEAKKy8qCisgKiBEcml2ZXIgZm9yIFdlc3Rlcm4gRGlnaXRhbCBXRDcxOTMsIFdENzE5NyBhbmQgV0Q3Mjk2IFNDU0kgY2FyZHMKKyAqIENvcHlyaWdodCAyMDEzIE9uZHJlaiBaYXJ5CisgKgorICogT3JpZ2luYWwgZHJpdmVyIGJ5CisgKiBBYXJvbiBEZXdlbGwgPGRld2VsbEB3b29kcy5uZXQ+CisgKiBHYWVydGkgPEp1ZXJnZW4uR2FlcnRuZXJAbWJveC5zaS51bmktaGFubm92ZXIuZGU+CisgKgorICogSFcgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgaW4gYm9vazoKKyAqCisgKiBTUElERVIgQ29tbWFuZCBQcm90b2NvbAorICogYnkgQ2hhbmRydSBNLiBTaXBweQorICogU0NTSSBTdG9yYWdlIFByb2R1Y3RzIChNQ1ApCisgKiBXZXN0ZXJuIERpZ2l0YWwgQ29ycG9yYXRpb24KKyAqIDA5LTE1LTk1CisgKgorICogaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAwNzA3MTcxNzUyNTQvaHR0cDovL3N1bjEucnJ6bi51bmktaGFubm92ZXIuZGUvZ2FlcnRuZXIuanVlcmdlbi93ZDcxOXgvTGludXgvRG9jdS9TcGlkZXIvCisgKi8KKworLyoKKyAqIERyaXZlciB3b3JrZmxvdzoKKyAqIDEuIFNDU0kgY29tbWFuZCBpcyB0cmFuc2Zvcm1lZCB0byBTQ0IgKFNwaWRlciBDb250cm9sIEJsb2NrKSBieSB0aGUKKyAqICAgIHF1ZXVlY29tbWFuZCBmdW5jdGlvbi4KKyAqIDIuIFRoZSBhZGRyZXNzIG9mIHRoZSBTQ0IgaXMgc3RvcmVkIGluIGEgbGlzdCB0byBiZSBhYmxlIHRvIGFjY2VzcyBpdCwgaWYKKyAqICAgIHNvbWV0aGluZyBnb2VzIHdyb25nLgorICogMy4gVGhlIGFkZHJlc3Mgb2YgdGhlIFNDQiBpcyB3cml0dGVuIHRvIHRoZSBDb250cm9sbGVyLCB3aGljaCBsb2FkcyB0aGUgU0NCCisgKiAgICB2aWEgQk0tRE1BIGFuZCBwcm9jZXNzZXMgaXQuCisgKiA0LiBBZnRlciBpdCBoYXMgZmluaXNoZWQsIGl0IGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQsIGFuZCBzZXRzIHJlZ2lzdGVycy4KKyAqCisgKiBmbGF3czoKKyAqICAtIGFib3J0L3Jlc2V0IGZ1bmN0aW9ucworICoKKyAqIFRvRG86CisgKiAgLSB0YWdnZWQgcXVldWVpbmcKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2VlcHJvbV85M2N4Ni5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSAid2Q3MTl4LmgiCisKKy8qIGxvdy1sZXZlbCByZWdpc3RlciBhY2Nlc3MgKi8KK3N0YXRpYyBpbmxpbmUgdTggd2Q3MTl4X3JlYWRiKHN0cnVjdCB3ZDcxOXggKndkLCB1OCByZWcpCit7CisJcmV0dXJuIGlvcmVhZDgod2QtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB3ZDcxOXhfcmVhZGwoc3RydWN0IHdkNzE5eCAqd2QsIHU4IHJlZykKK3sKKwlyZXR1cm4gaW9yZWFkMzIod2QtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2Q3MTl4X3dyaXRlYihzdHJ1Y3Qgd2Q3MTl4ICp3ZCwgdTggcmVnLCB1OCB2YWwpCit7CisJaW93cml0ZTgodmFsLCB3ZC0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3ZDcxOXhfd3JpdGV3KHN0cnVjdCB3ZDcxOXggKndkLCB1OCByZWcsIHUxNiB2YWwpCit7CisJaW93cml0ZTE2KHZhbCwgd2QtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2Q3MTl4X3dyaXRlbChzdHJ1Y3Qgd2Q3MTl4ICp3ZCwgdTggcmVnLCB1MzIgdmFsKQoreworCWlvd3JpdGUzMih2YWwsIHdkLT5iYXNlICsgcmVnKTsKK30KKworLyogd2FpdCB1bnRpbCB0aGUgY29tbWFuZCByZWdpc3RlciBpcyByZWFkeSAqLworc3RhdGljIGlubGluZSBpbnQgd2Q3MTl4X3dhaXRfcmVhZHkoc3RydWN0IHdkNzE5eCAqd2QpCit7CisJaW50IGkgPSAwOworCisJZG8geworCQlpZiAod2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfQU1SX0NPTU1BTkQpID09IFdENzE5WF9DTURfUkVBRFkpCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKGkrKyA8IFdENzE5WF9XQUlUX0ZPUl9DTURfUkVBRFkpOworCisJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgImNvbW1hbmQgcmVnaXN0ZXIgaXMgbm90IHJlYWR5OiAweCUwMnhcbiIsCisJCXdkNzE5eF9yZWFkYih3ZCwgV0Q3MTlYX0FNUl9DT01NQU5EKSk7CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworLyogcG9sbCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHVudGlsIGNvbW1hbmQgZmluaXNoZXMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdkNzE5eF93YWl0X2RvbmUoc3RydWN0IHdkNzE5eCAqd2QsIGludCB0aW1lb3V0KQoreworCXU4IHN0YXR1czsKKworCXdoaWxlICh0aW1lb3V0ID4gMCkgeworCQlzdGF0dXMgPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9BTVJfSU5UX1NUQVRVUyk7CisJCWlmIChzdGF0dXMpCisJCQlicmVhazsKKwkJdGltZW91dC0tOworCQl1ZGVsYXkoMSk7CisJfQorCisJaWYgKHRpbWVvdXQgPD0gMCkgeworCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAiZGlyZWN0IGNvbW1hbmQgdGltZWQgb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJaWYgKHN0YXR1cyAhPSBXRDcxOVhfSU5UX05PRVJST1JTKSB7CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJkaXJlY3QgY29tbWFuZCBmYWlsZWQsIHN0YXR1cyAweCUwMngsIFNVRSAweCUwMnhcbiIsCisJCQlzdGF0dXMsIHdkNzE5eF9yZWFkYih3ZCwgV0Q3MTlYX0FNUl9TQ0JfRVJST1IpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2RpcmVjdF9jbWQoc3RydWN0IHdkNzE5eCAqd2QsIHU4IG9wY29kZSwgdTggZGV2LCB1OCBsdW4sCisJCQkgICAgIHU4IHRhZywgZG1hX2FkZHJfdCBkYXRhLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKGFsbG93IGNvbW1hbmQgcmVnaXN0ZXIgdG8gY2xlYXIpICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9JTlRfU1RBVFVTLCBXRDcxOVhfSU5UX05PTkUpOworCisJLyogV2FpdCBmb3IgdGhlIENvbW1hbmQgcmVnaXN0ZXIgdG8gYmVjb21lIGZyZWUgKi8KKwlpZiAod2Q3MTl4X3dhaXRfcmVhZHkod2QpKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCS8qIG1ha2Ugc3VyZSB3ZSBnZXQgTk8gaW50ZXJydXB0cyAqLworCWRldiB8PSBXRDcxOVhfRElTQUJMRV9JTlQ7CisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9DTURfUEFSQU0sIGRldik7CisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9DTURfUEFSQU1fMiwgbHVuKTsKKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0NNRF9QQVJBTV8zLCB0YWcpOworCWlmIChkYXRhKQorCQl3ZDcxOXhfd3JpdGVsKHdkLCBXRDcxOVhfQU1SX1NDQl9JTiwgZGF0YSk7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGFnYWluICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9JTlRfU1RBVFVTLCBXRDcxOVhfSU5UX05PTkUpOworCisJLyogTm93LCB3cml0ZSB0aGUgY29tbWFuZCAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfQ09NTUFORCwgb3Bjb2RlKTsKKworCWlmICh0aW1lb3V0KQkvKiB3YWl0IGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZSAqLworCQlyZXQgPSB3ZDcxOXhfd2FpdF9kb25lKHdkLCB0aW1lb3V0KTsKKworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKGNsZWFuIHVwKSAqLworCWlmIChvcGNvZGUgIT0gV0Q3MTlYX0NNRF9SRUFEX0ZJUk1WRVIpCisJCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfSU5UX1NUQVRVUywgV0Q3MTlYX0lOVF9OT05FKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdkNzE5eF9kZXN0cm95KHN0cnVjdCB3ZDcxOXggKndkKQoreworCXN0cnVjdCB3ZDcxOXhfc2NiICpzY2I7CisKKwkvKiBzdG9wIHRoZSBSSVNDICovCisJaWYgKHdkNzE5eF9kaXJlY3RfY21kKHdkLCBXRDcxOVhfQ01EX1NMRUVQLCAwLCAwLCAwLCAwLAorCQkJICAgICAgV0Q3MTlYX1dBSVRfRk9SX1JJU0MpKQorCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgIlJJU0Mgc2xlZXAgY29tbWFuZCBmYWlsZWRcbiIpOworCS8qIGRpc2FibGUgUklTQyAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9QQ0lfTU9ERV9TRUxFQ1QsIDApOworCisJLyogZnJlZSBhbGwgU0NCcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NiLCAmd2QtPmFjdGl2ZV9zY2JzLCBsaXN0KQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHdkLT5wZGV2LCBzaXplb2Yoc3RydWN0IHdkNzE5eF9zY2IpLCBzY2IsCisJCQkJICAgIHNjYi0+cGh5cyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzY2IsICZ3ZC0+ZnJlZV9zY2JzLCBsaXN0KQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHdkLT5wZGV2LCBzaXplb2Yoc3RydWN0IHdkNzE5eF9zY2IpLCBzY2IsCisJCQkJICAgIHNjYi0+cGh5cyk7CisJLyogZnJlZSBpbnRlcm5hbCBidWZmZXJzICovCisJcGNpX2ZyZWVfY29uc2lzdGVudCh3ZC0+cGRldiwgd2QtPmZ3X3NpemUsIHdkLT5md192aXJ0LCB3ZC0+ZndfcGh5cyk7CisJd2QtPmZ3X3ZpcnQgPSBOVUxMOworCXBjaV9mcmVlX2NvbnNpc3RlbnQod2QtPnBkZXYsIFdENzE5WF9IQVNIX1RBQkxFX1NJWkUsIHdkLT5oYXNoX3ZpcnQsCisJCQkgICAgd2QtPmhhc2hfcGh5cyk7CisJd2QtPmhhc2hfdmlydCA9IE5VTEw7CisJcGNpX2ZyZWVfY29uc2lzdGVudCh3ZC0+cGRldiwgc2l6ZW9mKHN0cnVjdCB3ZDcxOXhfaG9zdF9wYXJhbSksCisJCQkgICAgd2QtPnBhcmFtcywgd2QtPnBhcmFtc19waHlzKTsKKwl3ZC0+cGFyYW1zID0gTlVMTDsKKwlmcmVlX2lycSh3ZC0+cGRldi0+aXJxLCB3ZCk7Cit9CisKKy8qIGZpbmlzaCBhIFNDU0kgY29tbWFuZCwgbWFyayBTQ0IgKGlmIGFueSkgYXMgZnJlZSwgdW5tYXAgYnVmZmVycyAqLworc3RhdGljIHZvaWQgd2Q3MTl4X2ZpbmlzaF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBpbnQgcmVzdWx0KQoreworCXN0cnVjdCB3ZDcxOXggKndkID0gc2hvc3RfcHJpdihjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IHdkNzE5eF9zY2IgKnNjYiA9IChzdHJ1Y3Qgd2Q3MTl4X3NjYiAqKSBjbWQtPmhvc3Rfc2NyaWJibGU7CisKKwlpZiAoc2NiKSB7CisJCWxpc3RfbW92ZSgmc2NiLT5saXN0LCAmd2QtPmZyZWVfc2Nicyk7CisJCWRtYV91bm1hcF9zaW5nbGUoJndkLT5wZGV2LT5kZXYsIGNtZC0+U0NwLmRtYV9oYW5kbGUsCisJCQkJIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJc2NzaV9kbWFfdW5tYXAoY21kKTsKKwl9CisJY21kLT5yZXN1bHQgPSByZXN1bHQgPDwgMTY7CisJY21kLT5zY3NpX2RvbmUoY21kKTsKK30KKworLyogQnVpbGQgYSBTQ0IgYW5kIHNlbmQgaXQgdG8gdGhlIGNhcmQgKi8KK3N0YXRpYyBpbnQgd2Q3MTl4X3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCwgc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCWludCBpLCBjb3VudF9zZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB3ZDcxOXhfc2NiICpzY2I7CisJc3RydWN0IHdkNzE5eCAqd2QgPSBzaG9zdF9wcml2KHNoKTsKKwlkbWFfYWRkcl90IHBoeXM7CisKKwljbWQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOworCisJLyogZ2V0IGEgZnJlZSBTQ0IgLSBlaXRoZXIgZnJvbSBleGlzdGluZyBvbmVzIG9yIGFsbG9jYXRlIGEgbmV3IG9uZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJc2NiID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZ3ZC0+ZnJlZV9zY2JzLCBzdHJ1Y3Qgd2Q3MTl4X3NjYiwgbGlzdCk7CisJaWYgKHNjYikgeworCQlsaXN0X2RlbCgmc2NiLT5saXN0KTsKKwkJcGh5cyA9IHNjYi0+cGh5czsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXNjYiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHdkLT5wZGV2LCBzaXplb2Yoc3RydWN0IHdkNzE5eF9zY2IpLAorCQkJCQkgICAmcGh5cyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWlmICghc2NiKSB7CisJCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIFNDQlxuIik7CisJCQl3ZDcxOXhfZmluaXNoX2NtZChjbWQsIERJRF9FUlJPUik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwltZW1zZXQoc2NiLCAwLCBzaXplb2Yoc3RydWN0IHdkNzE5eF9zY2IpKTsKKwlsaXN0X2FkZCgmc2NiLT5saXN0LCAmd2QtPmFjdGl2ZV9zY2JzKTsKKworCXNjYi0+cGh5cyA9IHBoeXM7CisJc2NiLT5jbWQgPSBjbWQ7CisJY21kLT5ob3N0X3NjcmliYmxlID0gKGNoYXIgKikgc2NiOworCisJc2NiLT5DREJfdGFnID0gMDsJLyogVGFnZ2VkIHF1ZXVlaW5nIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJc2NiLT5kZXZpZCA9IGNtZC0+ZGV2aWNlLT5pZDsKKwlzY2ItPmx1biA9IGNtZC0+ZGV2aWNlLT5sdW47CisKKwkvKiBjb3B5IHRoZSBjb21tYW5kICovCisJbWVtY3B5KHNjYi0+Q0RCLCBjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbik7CisKKwkvKiBtYXAgc2Vuc2UgYnVmZmVyICovCisJc2NiLT5zZW5zZV9idWZfbGVuZ3RoID0gU0NTSV9TRU5TRV9CVUZGRVJTSVpFOworCWNtZC0+U0NwLmRtYV9oYW5kbGUgPSBkbWFfbWFwX3NpbmdsZSgmd2QtPnBkZXYtPmRldiwgY21kLT5zZW5zZV9idWZmZXIsCisJCQlTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJc2NiLT5zZW5zZV9idWYgPSBjcHVfdG9fbGUzMihjbWQtPlNDcC5kbWFfaGFuZGxlKTsKKworCS8qIHJlcXVlc3QgYXV0b3NlbnNlICovCisJc2NiLT5TQ0Jfb3B0aW9ucyB8PSBXRDcxOVhfU0NCX0ZMQUdTX0FVVE9fUkVRVUVTVF9TRU5TRTsKKworCS8qIGNoZWNrIGRpcmVjdGlvbiAqLworCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCXNjYi0+U0NCX29wdGlvbnMgfD0gV0Q3MTlYX1NDQl9GTEFHU19DSEVDS19ESVJFQ1RJT04KKwkJCQkgfCAgV0Q3MTlYX1NDQl9GTEFHU19QQ0lfVE9fU0NTSTsKKwllbHNlIGlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKKwkJc2NiLT5TQ0Jfb3B0aW9ucyB8PSBXRDcxOVhfU0NCX0ZMQUdTX0NIRUNLX0RJUkVDVElPTjsKKworCS8qIFNjYXRoZXIvZ2F0aGVyICovCisJY291bnRfc2cgPSBzY3NpX2RtYV9tYXAoY21kKTsKKwlpZiAoY291bnRfc2cgPCAwKSB7CisJCXdkNzE5eF9maW5pc2hfY21kKGNtZCwgRElEX0VSUk9SKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJQlVHX09OKGNvdW50X3NnID4gV0Q3MTlYX1NHKTsKKworCWlmIChjb3VudF9zZykgeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCisJCXNjYi0+ZGF0YV9sZW5ndGggPSBjcHVfdG9fbGUzMihjb3VudF9zZyAqCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHdkNzE5eF9zZ2xpc3QpKTsKKwkJc2NiLT5kYXRhX3AgPSBjcHVfdG9fbGUzMihzY2ItPnBoeXMgKworCQkJCQkgIG9mZnNldG9mKHN0cnVjdCB3ZDcxOXhfc2NiLCBzZ19saXN0KSk7CisKKwkJc2NzaV9mb3JfZWFjaF9zZyhjbWQsIHNnLCBjb3VudF9zZywgaSkgeworCQkJc2NiLT5zZ19saXN0W2ldLnB0ciA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCQlzY2ItPnNnX2xpc3RbaV0ubGVuZ3RoID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOworCQl9CisJCXNjYi0+U0NCX29wdGlvbnMgfD0gV0Q3MTlYX1NDQl9GTEFHU19ET19TQ0FUVEVSX0dBVEhFUjsKKwl9IGVsc2UgeyAvKiB6ZXJvIGxlbmd0aCAqLworCQlzY2ItPmRhdGFfbGVuZ3RoID0gMDsKKwkJc2NiLT5kYXRhX3AgPSAwOworCX0KKworCS8qIGNoZWNrIGlmIHRoZSBDb21tYW5kIHJlZ2lzdGVyIGlzIGZyZWUgKi8KKwlpZiAod2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfQU1SX0NPTU1BTkQpICE9IFdENzE5WF9DTURfUkVBRFkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwkvKiB3cml0ZSBwb2ludGVyIHRvIHRoZSBBTVIgKi8KKwl3ZDcxOXhfd3JpdGVsKHdkLCBXRDcxOVhfQU1SX1NDQl9JTiwgc2NiLT5waHlzKTsKKwkvKiBzZW5kIFNDQiBvcGNvZGUgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0NPTU1BTkQsIFdENzE5WF9DTURfUFJPQ0VTU19TQ0IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2NoaXBfaW5pdChzdHJ1Y3Qgd2Q3MTl4ICp3ZCkKK3sKKwlpbnQgaSwgcmV0OworCXUzMiByaXNjX2luaXRbM107CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd193Y3MsICpmd19yaXNjOworCWNvbnN0IGNoYXIgZnduYW1lX3djc1tdID0gIndkNzE5eC13Y3MuYmluIjsKKwljb25zdCBjaGFyIGZ3bmFtZV9yaXNjW10gPSAid2Q3MTl4LXJpc2MuYmluIjsKKworCW1lbXNldCh3ZC0+aGFzaF92aXJ0LCAwLCBXRDcxOVhfSEFTSF9UQUJMRV9TSVpFKTsKKworCS8qIFdDUyAoc2VxdWVuY2VyKSBmaXJtd2FyZSAqLworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X3djcywgZnduYW1lX3djcywgJndkLT5wZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgIlVuYWJsZSB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxuIiwKKwkJCWZ3bmFtZV93Y3MsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFJJU0MgZmlybXdhcmUgKi8KKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19yaXNjLCBmd25hbWVfcmlzYywgJndkLT5wZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgIlVuYWJsZSB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxuIiwKKwkJCWZ3bmFtZV9yaXNjLCByZXQpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X3djcyk7CisJCXJldHVybiByZXQ7CisJfQorCXdkLT5md19zaXplID0gQUxJR04oZndfd2NzLT5zaXplLCA0KSArIGZ3X3Jpc2MtPnNpemU7CisKKwlpZiAoIXdkLT5md192aXJ0KQorCQl3ZC0+ZndfdmlydCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHdkLT5wZGV2LCB3ZC0+Zndfc2l6ZSwKKwkJCQkJCSAgICZ3ZC0+ZndfcGh5cyk7CisJaWYgKCF3ZC0+ZndfdmlydCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisKKwkvKiBtYWtlIGEgZnJlc2ggY29weSBvZiBXQ1MgYW5kIFJJU0MgY29kZSAqLworCW1lbWNweSh3ZC0+ZndfdmlydCwgZndfd2NzLT5kYXRhLCBmd193Y3MtPnNpemUpOworCW1lbWNweSh3ZC0+ZndfdmlydCArIEFMSUdOKGZ3X3djcy0+c2l6ZSwgNCksIGZ3X3Jpc2MtPmRhdGEsCisJCWZ3X3Jpc2MtPnNpemUpOworCisJLyogUmVzZXQgdGhlIFNwaWRlciBDaGlwIGFuZCBhZGFwdGVyIGl0c2VsZiAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9QQ0lfUE9SVF9SRVNFVCwgV0Q3MTlYX1BDSV9SRVNFVCk7CisJdWRlbGF5KFdENzE5WF9XQUlUX0ZPUl9SSVNDKTsKKwkvKiBDbGVhciBQSU8gbW9kZSBiaXRzIHNldCBieSBCSU9TICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9DTURfUEFSQU0sIDApOworCS8qIGVuc3VyZSBSSVNDIGlzIG5vdCBydW5uaW5nICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX1BDSV9NT0RFX1NFTEVDVCwgMCk7CisJLyogZW5zdXJlIGNvbW1hbmQgcG9ydCBpcyByZWFkeSAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfQ09NTUFORCwgMCk7CisJaWYgKHdkNzE5eF93YWl0X3JlYWR5KHdkKSkgeworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisKKwkvKiBUcmFuc2ZlciB0aGUgZmlyc3QgMksgd29yZHMgb2YgUklTQyBjb2RlIHRvIGtpY2sgc3RhcnQgdGhlIHVQICovCisJcmlzY19pbml0WzBdID0gd2QtPmZ3X3BoeXM7CQkJCS8qIFdDUyBGVyAqLworCXJpc2NfaW5pdFsxXSA9IHdkLT5md19waHlzICsgQUxJR04oZndfd2NzLT5zaXplLCA0KTsJLyogUklTQyBGVyAqLworCXJpc2NfaW5pdFsyXSA9IHdkLT5oYXNoX3BoeXM7CQkJCS8qIGhhc2ggdGFibGUgKi8KKworCS8qIGNsZWFyIERNQSBzdGF0dXMgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX0NIQU5ORUwyXzNTVEFUVVMsIDApOworCisJLyogYWRkcmVzcyB0byByZWFkIGZpcm13YXJlIGZyb20gKi8KKwl3ZDcxOXhfd3JpdGVsKHdkLCBXRDcxOVhfUENJX0VYVEVSTkFMX0FERFIsIHJpc2NfaW5pdFsxXSk7CisJLyogYmFzZSBhZGRyZXNzIHRvIHdyaXRlIGZpcm13YXJlIHRvIChvbiBjYXJkKSAqLworCXdkNzE5eF93cml0ZXcod2QsIFdENzE5WF9QQ0lfSU5URVJOQUxfQUREUiwgV0Q3MTlYX1BSQU1fQkFTRV9BRERSKTsKKwkvKiBzaXplOiBmaXJzdCAySyB3b3JkcyAqLworCXdkNzE5eF93cml0ZXcod2QsIFdENzE5WF9QQ0lfRE1BX1RSQU5TRkVSX1NJWkUsIDIwNDggKiAyKTsKKwkvKiBzdGFydCBETUEgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX0NIQU5ORUwyXzNDTUQsIFdENzE5WF9TVEFSVF9DSEFOTkVMMl8zRE1BKTsKKworCS8qIHdhaXQgZm9yIERNQSB0byBjb21wbGV0ZSAqLworCWkgPSBXRDcxOVhfV0FJVF9GT1JfUklTQzsKKwl3aGlsZSAoaS0tID4gMCkgeworCQl1OCBzdGF0dXMgPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9QQ0lfQ0hBTk5FTDJfM1NUQVRVUyk7CisJCWlmIChzdGF0dXMgPT0gV0Q3MTlYX1NUQVJUX0NIQU5ORUwyXzNET05FKQorCQkJYnJlYWs7CisJCWlmIChzdGF0dXMgPT0gV0Q3MTlYX1NUQVJUX0NIQU5ORUwyXzNBQk9SVCkgeworCQkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJSSVNDIGJvb3RzdHJhcCBmYWlsZWQ6IERNQSBhYm9ydGVkXG4iKTsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQorCWlmIChpIDwgMSkgeworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgIlJJU0MgYm9vdHN0cmFwIGZhaWxlZDogRE1BIHRpbWVvdXRcbiIpOworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisKKwkvKiBmaXJtd2FyZSBpcyBsb2FkZWQsIG5vdyBpbml0aWFsaXplIGFuZCB3YWtlIHVwIHRoZSBSSVNDICovCisJLyogd3JpdGUgUklTQyBpbml0aWFsaXphdGlvbiBsb25nIHdvcmRzIHRvIFNwaWRlciAqLworCXdkNzE5eF93cml0ZWwod2QsIFdENzE5WF9BTVJfU0NCX0lOLCByaXNjX2luaXRbMF0pOworCXdkNzE5eF93cml0ZWwod2QsIFdENzE5WF9BTVJfU0NCX0lOICsgNCwgcmlzY19pbml0WzFdKTsKKwl3ZDcxOXhfd3JpdGVsKHdkLCBXRDcxOVhfQU1SX1NDQl9JTiArIDgsIHJpc2NfaW5pdFsyXSk7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIFJJU0MgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0NNRF9QQVJBTSwgV0Q3MTlYX0RJU0FCTEVfSU5UKTsKKworCS8qIGlzc3VlIElOSVRJQUxJWkUgUklTQyBjb21hbmQgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0NPTU1BTkQsIFdENzE5WF9DTURfSU5JVF9SSVNDKTsKKwkvKiBlbmFibGUgYWR2YW5jZWQgbW9kZSAod2FrZSB1cCBSSVNDKSAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9QQ0lfTU9ERV9TRUxFQ1QsIFdENzE5WF9FTkFCTEVfQURWQU5DRV9NT0RFKTsKKwl1ZGVsYXkoV0Q3MTlYX1dBSVRfRk9SX1JJU0MpOworCisJcmV0ID0gd2Q3MTl4X3dhaXRfZG9uZSh3ZCwgV0Q3MTlYX1dBSVRfRk9SX1JJU0MpOworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0lOVF9TVEFUVVMsIFdENzE5WF9JTlRfTk9ORSk7CisJaWYgKHJldCkgeworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFJJU0NcbiIpOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisJLyogUklTQyBpcyB1cCBhbmQgcnVubmluZyAqLworCisJLyogUmVhZCBGVyB2ZXJzaW9uIGZyb20gUklTQyAqLworCXJldCA9IHdkNzE5eF9kaXJlY3RfY21kKHdkLCBXRDcxOVhfQ01EX1JFQURfRklSTVZFUiwgMCwgMCwgMCwgMCwKKwkJCQlXRDcxOVhfV0FJVF9GT1JfUklTQyk7CisJaWYgKHJldCkgeworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgIlVuYWJsZSB0byByZWFkIGZpcm13YXJlIHZlcnNpb25cbiIpOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisJZGV2X2luZm8oJndkLT5wZGV2LT5kZXYsICJSSVNDIGluaXRpYWxpemVkIHdpdGggZmlybXdhcmUgdmVyc2lvbiAlLjJ4LiUuMnhcbiIsCisJCQl3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9BTVJfU0NCX09VVCArIDEpLAorCQkJd2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfQU1SX1NDQl9PVVQpKTsKKworCS8qIFJFU0VUIFNDU0kgYnVzICovCisJcmV0ID0gd2Q3MTl4X2RpcmVjdF9jbWQod2QsIFdENzE5WF9DTURfQlVTUkVTRVQsIDAsIDAsIDAsIDAsCisJCQkJV0Q3MTlYX1dBSVRfRk9SX1NDU0lfUkVTRVQpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJTQ1NJIGJ1cyByZXNldCBmYWlsZWRcbiIpOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisKKwkvKiB1c2UgSG9zdFBhcmFtZXRlciBzdHJ1Y3R1cmUgdG8gc2V0IFNwaWRlcidzIEhvc3QgUGFyYW1ldGVyIEJsb2NrICovCisJcmV0ID0gd2Q3MTl4X2RpcmVjdF9jbWQod2QsIFdENzE5WF9DTURfU0VUX1BBUkFNLCAwLAorCQkJCXNpemVvZihzdHJ1Y3Qgd2Q3MTl4X2hvc3RfcGFyYW0pLCAwLAorCQkJCXdkLT5wYXJhbXNfcGh5cywgV0Q3MTlYX1dBSVRfRk9SX1JJU0MpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IEhPU1QgUEFSQU1FVEVSU1xuIik7CisJCWdvdG8gd2Q3MTl4X2luaXRfZW5kOworCX0KKworCS8qIGluaXRpYXRlIFNDQU0gKGRvZXMgbm90aGluZyBpZiBkaXNhYmxlZCBpbiBCSU9TKSAqLworCS8qIGJ1Zz86IHdlIHNob3VsZCBwYXNzIGEgbWFzayBvZiBzdGF0aWMgSURzIHdoaWNoIHdlIGRvbid0IGhhdmUgKi8KKwlyZXQgPSB3ZDcxOXhfZGlyZWN0X2NtZCh3ZCwgV0Q3MTlYX0NNRF9JTklUX1NDQU0sIDAsIDAsIDAsIDAsCisJCQkJV0Q3MTlYX1dBSVRfRk9SX1NDU0lfUkVTRVQpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJTQ0FNIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gd2Q3MTl4X2luaXRfZW5kOworCX0KKworCS8qIGNsZWFyIEFNUl9CSU9TX1NIQVJFX0lOVCByZWdpc3RlciAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfQklPU19TSEFSRV9JTlQsIDApOworCit3ZDcxOXhfaW5pdF9lbmQ6CisJcmVsZWFzZV9maXJtd2FyZShmd193Y3MpOworCXJlbGVhc2VfZmlybXdhcmUoZndfcmlzYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdkNzE5eF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJaW50IGFjdGlvbiwgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHdkNzE5eF9zY2IgKnNjYiA9IChzdHJ1Y3Qgd2Q3MTl4X3NjYiAqKWNtZC0+aG9zdF9zY3JpYmJsZTsKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IHNob3N0X3ByaXYoY21kLT5kZXZpY2UtPmhvc3QpOworCisJZGV2X2luZm8oJndkLT5wZGV2LT5kZXYsICJhYm9ydCBjb21tYW5kLCB0YWc6ICV4XG4iLCBjbWQtPnRhZyk7CisKKwlhY3Rpb24gPSAvKmNtZC0+dGFnID8gV0Q3MTlYX0NNRF9BQk9SVF9UQUcgOiAqL1dENzE5WF9DTURfQUJPUlQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCXJlc3VsdCA9IHdkNzE5eF9kaXJlY3RfY21kKHdkLCBhY3Rpb24sIGNtZC0+ZGV2aWNlLT5pZCwKKwkJCQkgICBjbWQtPmRldmljZS0+bHVuLCBjbWQtPnRhZywgc2NiLT5waHlzLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIEZBSUxFRDsKKworCXJldHVybiBTVUNDRVNTOworfQorCitzdGF0aWMgaW50IHdkNzE5eF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHU4IG9wY29kZSwgdTggZGV2aWNlKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IHNob3N0X3ByaXYoY21kLT5kZXZpY2UtPmhvc3QpOworCisJZGV2X2luZm8oJndkLT5wZGV2LT5kZXYsICIlcyByZXNldCByZXF1ZXN0ZWRcbiIsCisJCSAob3Bjb2RlID09IFdENzE5WF9DTURfQlVTUkVTRVQpID8gImJ1cyIgOiAiZGV2aWNlIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCXJlc3VsdCA9IHdkNzE5eF9kaXJlY3RfY21kKHdkLCBvcGNvZGUsIGRldmljZSwgMCwgMCwgMCwKKwkJCQkgICBXRDcxOVhfV0FJVF9GT1JfU0NTSV9SRVNFVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCWlmIChyZXN1bHQpCisJCXJldHVybiBGQUlMRUQ7CisKKwlyZXR1cm4gU1VDQ0VTUzsKK30KKworc3RhdGljIGludCB3ZDcxOXhfZGV2X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlyZXR1cm4gd2Q3MTl4X3Jlc2V0KGNtZCwgV0Q3MTlYX0NNRF9SRVNFVCwgY21kLT5kZXZpY2UtPmlkKTsKK30KKworc3RhdGljIGludCB3ZDcxOXhfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlyZXR1cm4gd2Q3MTl4X3Jlc2V0KGNtZCwgV0Q3MTlYX0NNRF9CVVNSRVNFVCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCXN0cnVjdCB3ZDcxOXggKndkID0gc2hvc3RfcHJpdihjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IHdkNzE5eF9zY2IgKnNjYiwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQ7CisKKwlkZXZfaW5mbygmd2QtPnBkZXYtPmRldiwgImhvc3QgcmVzZXQgcmVxdWVzdGVkXG4iKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCS8qIFRyeSB0byByZWluaXQgdGhlIFJJU0MgKi8KKwlpZiAod2Q3MTl4X2NoaXBfaW5pdCh3ZCkgPT0gMCkKKwkJcmVzdWx0ID0gU1VDQ0VTUzsKKwllbHNlCisJCXJlc3VsdCA9IEZBSUxFRDsKKworCS8qIGZsdXNoIGFsbCBTQ0JzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjYiwgdG1wLCAmd2QtPmFjdGl2ZV9zY2JzLCBsaXN0KSB7CisJCXN0cnVjdCBzY3NpX2NtbmQgKnRtcF9jbWQgPSBzY2ItPmNtZDsKKwkJd2Q3MTl4X2ZpbmlzaF9jbWQodG1wX2NtZCwgcmVzdWx0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3ZDcxOXhfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJCSAgICBzZWN0b3JfdCBjYXBhY2l0eSwgaW50IGdlb21bXSkKK3sKKwlpZiAoY2FwYWNpdHkgPj0gMHgyMDAwMDApIHsKKwkJZ2VvbVswXSA9IDI1NTsJLyogaGVhZHMgKi8KKwkJZ2VvbVsxXSA9IDYzOwkvKiBzZWN0b3JzICovCisJfSBlbHNlIHsKKwkJZ2VvbVswXSA9IDY0OwkvKiBoZWFkcyAqLworCQlnZW9tWzFdID0gMzI7CS8qIHNlY3RvcnMgKi8KKwl9CisJZ2VvbVsyXSA9IHNlY3Rvcl9kaXYoY2FwYWNpdHksIGdlb21bMF0gKiBnZW9tWzFdKTsJLyogY3lsaW5kZXJzICovCisKKwlyZXR1cm4gMDsKK30KKworLyogcHJvY2VzcyBhIFNDQi1jb21wbGV0aW9uIGludGVycnVwdCAqLworc3RhdGljIGlubGluZSB2b2lkIHdkNzE5eF9pbnRlcnJ1cHRfU0NCKHN0cnVjdCB3ZDcxOXggKndkLAorCQkJCQl1bmlvbiB3ZDcxOXhfcmVncyByZWdzLAorCQkJCQlzdHJ1Y3Qgd2Q3MTl4X3NjYiAqc2NiKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKKwlpbnQgcmVzdWx0OworCisJLyogbm93IGhhdmUgdG8gZmluZCByZXN1bHQgZnJvbSBjYXJkICovCisJc3dpdGNoIChyZWdzLmJ5dGVzLlNVRSkgeworCWNhc2UgV0Q3MTlYX1NVRV9OT0VSUk9SUzoKKwkJcmVzdWx0ID0gRElEX09LOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfUkVKRUNURUQ6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJjb21tYW5kIHJlamVjdGVkXG4iKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfU0NCUUZVTEw6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJTQ0IgcXVldWUgaXMgZnVsbFxuIik7CisJCXJlc3VsdCA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX1RFUk06CisJCWRldl9kYmcoJndkLT5wZGV2LT5kZXYsICJTQ0IgdGVybWluYXRlZCBieSBkaXJlY3QgY29tbWFuZFxuIik7CisJCXJlc3VsdCA9IERJRF9BQk9SVDsJLyogb3IgRElEX1JFU0VUPyAqLworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfQ0hBTjFBQk9SVDoKKwljYXNlIFdENzE5WF9TVUVfQ0hBTjIzQUJPUlQ6CisJCXJlc3VsdCA9IERJRF9BQk9SVDsKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgIkRNQSBhYm9ydFxuIik7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9DSEFOMVBBUjoKKwljYXNlIFdENzE5WF9TVUVfQ0hBTjIzUEFSOgorCQlyZXN1bHQgPSBESURfUEFSSVRZOworCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAiRE1BIHBhcml0eSBlcnJvclxuIik7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9USU1FT1VUOgorCQlyZXN1bHQgPSBESURfVElNRV9PVVQ7CisJCWRldl9kYmcoJndkLT5wZGV2LT5kZXYsICJzZWxlY3Rpb24gdGltZW91dFxuIik7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9SRVNFVDoKKwkJZGV2X2RiZygmd2QtPnBkZXYtPmRldiwgImJ1cyByZXNldCBvY2N1cmVkXG4iKTsKKwkJcmVzdWx0ID0gRElEX1JFU0VUOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfQlVTRVJST1I6CisJCWRldl9kYmcoJndkLT5wZGV2LT5kZXYsICJTQ1NJIGJ1cyBlcnJvclxuIik7CisJCXJlc3VsdCA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX1dST05HV0FZOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAid3JvbmcgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb25cbiIpOworCQlyZXN1bHQgPSBESURfRVJST1I7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9CQURQSEFTRToKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgImludmFsaWQgU0NTSSBwaGFzZVxuIik7CisJCXJlc3VsdCA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX1RPT0xPTkc6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJyZWNvcmQgdG9vIGxvbmdcbiIpOworCQlyZXN1bHQgPSBESURfRVJST1I7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9CVVNGUkVFOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAidW5leHBlY3RlZCBidXMgZnJlZVxuIik7CisJCXJlc3VsdCA9IERJRF9OT19DT05ORUNUOyAvKiBvciBESURfRVJST1IgPz8/Ki8KKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX0FSU0RPTkU6CisJCWRldl9kYmcoJndkLT5wZGV2LT5kZXYsICJhdXRvIHJlcXVlc3Qgc2Vuc2VcbiIpOworCQlpZiAocmVncy5ieXRlcy5TQ1NJID09IDApCisJCQlyZXN1bHQgPSBESURfT0s7CisJCWVsc2UKKwkJCXJlc3VsdCA9IERJRF9QQVJJVFk7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9JR05PUkVEOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAidGFyZ2V0IGlkICVkIGlnbm9yZWQgY29tbWFuZFxuIiwKKwkJCXNjYi0+Y21kLT5kZXZpY2UtPmlkKTsKKwkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1Q7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9XUk9OR1RBR1M6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJyZXZlcnNlZCB0YWdzXG4iKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfQkFEVEFHUzoKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgInRhZyB0eXBlIG5vdCBzdXBwb3J0ZWQgYnkgdGFyZ2V0XG4iKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfTk9TQ0FNSUQ6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJubyBTQ0FNIHNvZnQgSUQgYXZhaWxhYmxlXG4iKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgInVua25vd24gU1VFIGVycm9yIGNvZGU6IDB4JXhcbiIsCisJCQkgcmVncy5ieXRlcy5TVUUpOworCQlyZXN1bHQgPSBESURfRVJST1I7CisJCWJyZWFrOworCX0KKwljbWQgPSBzY2ItPmNtZDsKKworCXdkNzE5eF9maW5pc2hfY21kKGNtZCwgcmVzdWx0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHdkNzE5eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB3ZDcxOXggKndkID0gZGV2X2lkOworCXVuaW9uIHdkNzE5eF9yZWdzIHJlZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgU0NCX291dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJLyogcmVhZCBTQ0IgcG9pbnRlciBiYWNrIGZyb20gY2FyZCAqLworCVNDQl9vdXQgPSB3ZDcxOXhfcmVhZGwod2QsIFdENzE5WF9BTVJfU0NCX09VVCk7CisJLyogcmVhZCBhbGwgc3RhdHVzIGluZm8gYXQgb25jZSAqLworCXJlZ3MuYWxsID0gY3B1X3RvX2xlMzIod2Q3MTl4X3JlYWRsKHdkLCBXRDcxOVhfQU1SX09QX0NPREUpKTsKKworCXN3aXRjaCAocmVncy5ieXRlcy5JTlQpIHsKKwljYXNlIFdENzE5WF9JTlRfTk9ORToKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJY2FzZSBXRDcxOVhfSU5UX0xJTktOT1NUQVRVUzoKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgImxpbmtlZCBjb21tYW5kIGNvbXBsZXRlZCB3aXRoIG5vIHN0YXR1c1xuIik7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX0lOVF9CQURJTlQ6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJ1bnNvbGljaXRlZCBpbnRlcnJ1cHRcbiIpOworCQlicmVhazsKKwljYXNlIFdENzE5WF9JTlRfTk9FUlJPUlM6CisJY2FzZSBXRDcxOVhfSU5UX0xJTktOT0VSUk9SUzoKKwljYXNlIFdENzE5WF9JTlRfRVJST1JTTE9HR0VEOgorCWNhc2UgV0Q3MTlYX0lOVF9TUElERVJGQUlMRUQ6CisJCS8qIHdhcyB0aGUgY21kIGNvbXBsZXRlZCBhIGRpcmVjdCBvciBTQ0IgY29tbWFuZD8gKi8KKwkJaWYgKHJlZ3MuYnl0ZXMuT1BDID09IFdENzE5WF9DTURfUFJPQ0VTU19TQ0IpIHsKKwkJCXN0cnVjdCB3ZDcxOXhfc2NiICpzY2I7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjYiwgJndkLT5hY3RpdmVfc2NicywgbGlzdCkKKwkJCQlpZiAoU0NCX291dCA9PSBzY2ItPnBoeXMpCisJCQkJCWJyZWFrOworCQkJaWYgKFNDQl9vdXQgPT0gc2NiLT5waHlzKQorCQkJCXdkNzE5eF9pbnRlcnJ1cHRfU0NCKHdkLCByZWdzLCBzY2IpOworCQkJZWxzZQorCQkJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJjYXJkIHJldHVybmVkIGludmFsaWQgU0NCIHBvaW50ZXJcbiIpOworCQl9IGVsc2UKKwkJCWRldl93YXJuKCZ3ZC0+cGRldi0+ZGV2LCAiZGlyZWN0IGNvbW1hbmQgMHgleCBjb21wbGV0ZWRcbiIsCisJCQkJIHJlZ3MuYnl0ZXMuT1BDKTsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfSU5UX1BJT1JFQURZOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAiY2FyZCBpbmRpY2F0ZXMgUElPIGRhdGEgcmVhZHkgYnV0IHdlIG5ldmVyIHVzZSBQSU9cbiIpOworCQkvKiBpbnRlcnJ1cHQgd2lsbCBub3QgYmUgY2xlYXJlZCB1bnRpbCBhbGwgZGF0YSBpcyByZWFkICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJ1bmtub3duIGludGVycnVwdCByZWFzb246ICVkXG4iLAorCQkJcmVncy5ieXRlcy5JTlQpOworCisJfQorCS8qIGNsZWFyIGludGVycnVwdCBzbyBhbm90aGVyIGNhbiBoYXBwZW4gKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0lOVF9TVEFUVVMsIFdENzE5WF9JTlRfTk9ORSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCB3ZDcxOXhfZWVwcm9tX3JlZ19yZWFkKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKK3sKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IGVlcHJvbS0+ZGF0YTsKKwl1OCByZWcgPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9QQ0lfR1BJT19EQVRBKTsKKworCWVlcHJvbS0+cmVnX2RhdGFfb3V0ID0gcmVnICYgV0Q3MTlYX0VFX0RPOworfQorCitzdGF0aWMgdm9pZCB3ZDcxOXhfZWVwcm9tX3JlZ193cml0ZShzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCit7CisJc3RydWN0IHdkNzE5eCAqd2QgPSBlZXByb20tPmRhdGE7CisJdTggcmVnID0gMDsKKworCWlmIChlZXByb20tPnJlZ19kYXRhX2luKQorCQlyZWcgfD0gV0Q3MTlYX0VFX0RJOworCWlmIChlZXByb20tPnJlZ19kYXRhX2Nsb2NrKQorCQlyZWcgfD0gV0Q3MTlYX0VFX0NMSzsKKwlpZiAoZWVwcm9tLT5yZWdfY2hpcF9zZWxlY3QpCisJCXJlZyB8PSBXRDcxOVhfRUVfQ1M7CisKKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX0dQSU9fREFUQSwgcmVnKTsKK30KKworLyogcmVhZCBjb25maWcgZnJvbSBFRVBST00gc28gaXQgY2FuIGJlIGRvd25sb2FkZWQgYnkgdGhlIFJJU0Mgb24gKHJlLSlpbml0ICovCitzdGF0aWMgdm9pZCB3ZDcxOXhfcmVhZF9lZXByb20oc3RydWN0IHdkNzE5eCAqd2QpCit7CisJc3RydWN0IGVlcHJvbV85M2N4NiBlZXByb207CisJdTggZ3BpbzsKKwlzdHJ1Y3Qgd2Q3MTl4X2VlcHJvbV9oZWFkZXIgaGVhZGVyOworCisJZWVwcm9tLmRhdGEgPSB3ZDsKKwllZXByb20ucmVnaXN0ZXJfcmVhZCA9IHdkNzE5eF9lZXByb21fcmVnX3JlYWQ7CisJZWVwcm9tLnJlZ2lzdGVyX3dyaXRlID0gd2Q3MTl4X2VlcHJvbV9yZWdfd3JpdGU7CisJZWVwcm9tLndpZHRoID0gUENJX0VFUFJPTV9XSURUSF85M0M0NjsKKworCS8qIHNldCBhbGwgb3V0cHV0cyB0byBsb3cgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX0dQSU9fREFUQSwgMCk7CisJLyogY29uZmlndXJlIEdQSU8gcGlucyAqLworCWdwaW8gPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9QQ0lfR1BJT19DT05UUk9MKTsKKwkvKiBHUElPIG91dHB1dHMgKi8KKwlncGlvICY9ICh+KFdENzE5WF9FRV9DTEsgfCBXRDcxOVhfRUVfREkgfCBXRDcxOVhfRUVfQ1MpKTsKKwkvKiBHUElPIGlucHV0ICovCisJZ3BpbyB8PSBXRDcxOVhfRUVfRE87CisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX1BDSV9HUElPX0NPTlRST0wsIGdwaW8pOworCisJLyogcmVhZCBFRVBST00gaGVhZGVyICovCisJZWVwcm9tXzkzY3g2X211bHRpcmVhZGIoJmVlcHJvbSwgMCwgKHU4ICopJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworCisJaWYgKGhlYWRlci5zaWcxID09ICdXJyAmJiBoZWFkZXIuc2lnMiA9PSAnRCcpCisJCWVlcHJvbV85M2N4Nl9tdWx0aXJlYWRiKCZlZXByb20sIGhlYWRlci5jZmdfb2Zmc2V0LAorCQkJCQkodTggKil3ZC0+cGFyYW1zLAorCQkJCQlzaXplb2Yoc3RydWN0IHdkNzE5eF9ob3N0X3BhcmFtKSk7CisJZWxzZSB7IC8qIGRlZmF1bHQgRUVQUk9NIHZhbHVlcyAqLworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgIkVFUFJPTSBzaWduYXR1cmUgaXMgaW52YWxpZCAoMHglMDJ4IDB4JTAyeCksIHVzaW5nIGRlZmF1bHQgdmFsdWVzXG4iLAorCQkJIGhlYWRlci5zaWcxLCBoZWFkZXIuc2lnMik7CisJCXdkLT5wYXJhbXMtPmNoXzFfdGgJPSAweDEwOwkvKiAxNiBEV3MgPSA2NCBCICovCisJCXdkLT5wYXJhbXMtPnNjc2lfY29uZgk9IDB4NGM7CS8qIDQ4bWEsIHNwdWUsIHBhcml0eSBjaGVjayAqLworCQl3ZC0+cGFyYW1zLT5vd25fc2NzaV9pZAk9IDB4MDc7CS8qIElEIDcsIFNDQU0gZGlzYWJsZWQgKi8KKwkJd2QtPnBhcmFtcy0+c2VsX3RpbWVvdXQgPSAweDRkOwkvKiAyNTAgbXMgKi8KKwkJd2QtPnBhcmFtcy0+c2xlZXBfdGltZXIJPSAweDAxOworCQl3ZC0+cGFyYW1zLT5jZGJfc2l6ZQk9IGNwdV90b19sZTE2KDB4NTU1NSk7CS8qIGFsbCA2IEIgKi8KKwkJd2QtPnBhcmFtcy0+c2NzaV9wYWQJPSAweDFiOworCQlpZiAod2QtPnR5cGUgPT0gV0Q3MTlYX1RZUEVfNzE5MykgLyogbmFycm93IGNhcmQgLSBkaXNhYmxlICovCisJCQl3ZC0+cGFyYW1zLT53aWRlID0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCk7CisJCWVsc2UJLyogaW5pdGlhdGUgJiByZXNwb25kIHRvIFdJREUgbWVzc2FnZXMgKi8KKwkJCXdkLT5wYXJhbXMtPndpZGUgPSBjcHVfdG9fbGUzMigweGZmZmZmZmZmKTsKKwkJd2QtPnBhcmFtcy0+c3luYwk9IGNwdV90b19sZTMyKDB4ZmZmZmZmZmYpOworCQl3ZC0+cGFyYW1zLT5zb2Z0X21hc2sJPSAweDAwOwkvKiBhbGwgZGlzYWJsZWQgKi8KKwkJd2QtPnBhcmFtcy0+dW5zb2xfbWFzawk9IDB4MDA7CS8qIGFsbCBkaXNhYmxlZCAqLworCX0KKwkvKiBkaXNhYmxlIFRBR0dFRCBtZXNzYWdlcyAqLworCXdkLT5wYXJhbXMtPnRhZ19lbiA9IGNwdV90b19sZTE2KDB4MDAwMCk7Cit9CisKKy8qIFJlYWQgY2FyZCB0eXBlIGZyb20gR1BJTyBiaXRzIDEgYW5kIDMgKi8KK3N0YXRpYyBlbnVtIHdkNzE5eF9jYXJkX3R5cGUgd2Q3MTl4X2RldGVjdF90eXBlKHN0cnVjdCB3ZDcxOXggKndkKQoreworCXU4IGNhcmQgPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9QQ0lfR1BJT19DT05UUk9MKTsKKworCWNhcmQgfD0gV0Q3MTlYX0dQSU9fSURfQklUUzsKKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX0dQSU9fQ09OVFJPTCwgY2FyZCk7CisJY2FyZCA9IHdkNzE5eF9yZWFkYih3ZCwgV0Q3MTlYX1BDSV9HUElPX0RBVEEpICYgV0Q3MTlYX0dQSU9fSURfQklUUzsKKwlzd2l0Y2ggKGNhcmQpIHsKKwljYXNlIDB4MDg6CisJCXJldHVybiBXRDcxOVhfVFlQRV83MTkzOworCWNhc2UgMHgwMjoKKwkJcmV0dXJuIFdENzE5WF9UWVBFXzcxOTc7CisJY2FzZSAweDAwOgorCQlyZXR1cm4gV0Q3MTlYX1RZUEVfNzI5NjsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgInVua25vd24gY2FyZCB0eXBlIDB4JXhcbiIsIGNhcmQpOworCQlyZXR1cm4gV0Q3MTlYX1RZUEVfVU5LTk9XTjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2JvYXJkX2ZvdW5kKHN0cnVjdCBTY3NpX0hvc3QgKnNoKQoreworCXN0cnVjdCB3ZDcxOXggKndkID0gc2hvc3RfcHJpdihzaCk7CisJY2hhciAqY2FyZF90eXBlc1tdID0geyAiVW5rbm93biBjYXJkIiwgIldENzE5MyIsICJXRDcxOTciLCAiV0Q3Mjk2IiB9OworCWludCByZXQ7CisKKwlJTklUX0xJU1RfSEVBRCgmd2QtPmFjdGl2ZV9zY2JzKTsKKwlJTklUX0xJU1RfSEVBRCgmd2QtPmZyZWVfc2Nicyk7CisKKwlzaC0+YmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydCh3ZC0+cGRldiwgMCk7CisKKwl3ZC0+dHlwZSA9IHdkNzE5eF9kZXRlY3RfdHlwZSh3ZCk7CisKKwl3ZC0+c2ggPSBzaDsKKwlzaC0+aXJxID0gd2QtPnBkZXYtPmlycTsKKwl3ZC0+ZndfdmlydCA9IE5VTEw7CisKKwkvKiBtZW1vcnkgYXJlYSBmb3IgaG9zdCAoRUVQUk9NKSBwYXJhbWV0ZXJzICovCisJd2QtPnBhcmFtcyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHdkLT5wZGV2LAorCQkJCQkgIHNpemVvZihzdHJ1Y3Qgd2Q3MTl4X2hvc3RfcGFyYW0pLAorCQkJCQkgICZ3ZC0+cGFyYW1zX3BoeXMpOworCWlmICghd2QtPnBhcmFtcykgeworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBwYXJhbWV0ZXIgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogbWVtb3J5IGFyZWEgZm9yIHRoZSBSSVNDIGZvciBoYXNoIHRhYmxlIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzICovCisJd2QtPmhhc2hfdmlydCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHdkLT5wZGV2LCBXRDcxOVhfSEFTSF9UQUJMRV9TSVpFLAorCQkJCQkgICAgICZ3ZC0+aGFzaF9waHlzKTsKKwlpZiAoIXdkLT5oYXNoX3ZpcnQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgaGFzaCBidWZmZXJcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfZnJlZV9wYXJhbXM7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEod2QtPnBkZXYtPmlycSwgd2Q3MTl4X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkgICJ3ZDcxOXgiLCB3ZCk7CisJaWYgKHJldCkgeworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgInVuYWJsZSB0byBhc3NpZ24gSVJRICVkXG4iLAorCQkJIHdkLT5wZGV2LT5pcnEpOworCQlnb3RvIGZhaWxfZnJlZV9oYXNoOworCX0KKworCS8qIHJlYWQgcGFyYW1ldGVycyBmcm9tIEVFUFJPTSAqLworCXdkNzE5eF9yZWFkX2VlcHJvbSh3ZCk7CisKKwlyZXQgPSB3ZDcxOXhfY2hpcF9pbml0KHdkKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfZnJlZV9pcnE7CisKKwlzaC0+dGhpc19pZCA9IHdkLT5wYXJhbXMtPm93bl9zY3NpX2lkICYgV0Q3MTlYX0VFX1NDU0lfSURfTUFTSzsKKworCWRldl9pbmZvKCZ3ZC0+cGRldi0+ZGV2LCAiJXMgYXQgSS9PIDB4JWx4LCBJUlEgJXUsIFNDU0kgSUQgJWRcbiIsCisJCSBjYXJkX3R5cGVzW3dkLT50eXBlXSwgc2gtPmJhc2UsIHNoLT5pcnEsIHNoLT50aGlzX2lkKTsKKworCXJldHVybiAwOworCitmYWlsX2ZyZWVfaXJxOgorCWZyZWVfaXJxKHdkLT5wZGV2LT5pcnEsIHdkKTsKK2ZhaWxfZnJlZV9oYXNoOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQod2QtPnBkZXYsIFdENzE5WF9IQVNIX1RBQkxFX1NJWkUsIHdkLT5oYXNoX3ZpcnQsCisJCQkgICAgd2QtPmhhc2hfcGh5cyk7CitmYWlsX2ZyZWVfcGFyYW1zOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQod2QtPnBkZXYsIHNpemVvZihzdHJ1Y3Qgd2Q3MTl4X2hvc3RfcGFyYW0pLAorCQkJICAgIHdkLT5wYXJhbXMsIHdkLT5wYXJhbXNfcGh5cyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB3ZDcxOXhfdGVtcGxhdGUgPSB7CisJLm5hbWUJCQkJPSAiV2VzdGVybiBEaWdpdGFsIDcxOXgiLAorCS5xdWV1ZWNvbW1hbmQJCQk9IHdkNzE5eF9xdWV1ZWNvbW1hbmQsCisJLmVoX2Fib3J0X2hhbmRsZXIJCT0gd2Q3MTl4X2Fib3J0LAorCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcgk9IHdkNzE5eF9kZXZfcmVzZXQsCisJLmVoX2J1c19yZXNldF9oYW5kbGVyCQk9IHdkNzE5eF9idXNfcmVzZXQsCisJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgkJPSB3ZDcxOXhfaG9zdF9yZXNldCwKKwkuYmlvc19wYXJhbQkJCT0gd2Q3MTl4X2Jpb3NwYXJhbSwKKwkucHJvY19uYW1lCQkJPSAid2Q3MTl4IiwKKwkuY2FuX3F1ZXVlCQkJPSAyNTUsCisJLnRoaXNfaWQJCQk9IDcsCisJLnNnX3RhYmxlc2l6ZQkJCT0gV0Q3MTlYX1NHLAorCS5jbWRfcGVyX2x1bgkJCT0gV0Q3MTlYX0NNRF9QRVJfTFVOLAorCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCit9OworCitzdGF0aWMgaW50IHdkNzE5eF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpkKQoreworCWludCBlcnI7CisJc3RydWN0IFNjc2lfSG9zdCAqc2g7CisJc3RydWN0IHdkNzE5eCAqd2Q7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7CisKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHNldCAzMi1iaXQgRE1BIG1hc2tcbiIpOworCQlnb3RvIGRpc2FibGVfZGV2aWNlOworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgIndkNzE5eCIpOworCWlmIChlcnIpCisJCWdvdG8gZGlzYWJsZV9kZXZpY2U7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwllcnIgPSAtRU5PREVWOworCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApID09IDApCisJCWdvdG8gcmVsZWFzZV9yZWdpb247CisKKwllcnIgPSAtRU5PTUVNOworCXNoID0gc2NzaV9ob3N0X2FsbG9jKCZ3ZDcxOXhfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3Qgd2Q3MTl4KSk7CisJaWYgKCFzaCkKKwkJZ290byByZWxlYXNlX3JlZ2lvbjsKKworCXdkID0gc2hvc3RfcHJpdihzaCk7CisJd2QtPmJhc2UgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisJaWYgKCF3ZC0+YmFzZSkKKwkJZ290byBmcmVlX2hvc3Q7CisJd2QtPnBkZXYgPSBwZGV2OworCisJZXJyID0gd2Q3MTl4X2JvYXJkX2ZvdW5kKHNoKTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubWFwOworCisJZXJyID0gc2NzaV9hZGRfaG9zdChzaCwgJndkLT5wZGV2LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZGVzdHJveTsKKworCXNjc2lfc2Nhbl9ob3N0KHNoKTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBzaCk7CisJcmV0dXJuIDA7CisKK2Rlc3Ryb3k6CisJd2Q3MTl4X2Rlc3Ryb3kod2QpOwordW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgd2QtPmJhc2UpOworZnJlZV9ob3N0OgorCXNjc2lfaG9zdF9wdXQoc2gpOworcmVsZWFzZV9yZWdpb246CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCB3ZDcxOXhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IHNob3N0X3ByaXYoc2gpOworCisJc2NzaV9yZW1vdmVfaG9zdChzaCk7CisJd2Q3MTl4X2Rlc3Ryb3kod2QpOworCXBjaV9pb3VubWFwKHBkZXYsIHdkLT5iYXNlKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXNjc2lfaG9zdF9wdXQoc2gpOworfQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUod2Q3MTl4X3BjaV90YWJsZSkgPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfV0QsIDB4MzI5NikgfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHdkNzE5eF9wY2lfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgd2Q3MTl4X3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJIndkNzE5eCIsCisJLmlkX3RhYmxlID0Jd2Q3MTl4X3BjaV90YWJsZSwKKwkucHJvYmUgPQl3ZDcxOXhfcGNpX3Byb2JlLAorCS5yZW1vdmUgPQl3ZDcxOXhfcGNpX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdkNzE5eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJndkNzE5eF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdkNzE5eF9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3ZDcxOXhfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdkNzE5eF9pbml0KTsKK21vZHVsZV9leGl0KHdkNzE5eF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJXZXN0ZXJuIERpZ2l0YWwgV0Q3MTkzLzcxOTcvNzI5NiBTQ1NJIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiT25kcmVqIFphcnksIEFhcm9uIERld2VsbCwgSnVlcmdlbiBHYWVydG5lciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKCJ3ZDcxOXgtd2NzLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJ3ZDcxOXgtcmlzYy5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS93ZDcxOXguaCBiL2RyaXZlcnMvc2NzaS93ZDcxOXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODVlMzBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL3dkNzE5eC5oCkBAIC0wLDAgKzEsMjQ5IEBACisjaWZuZGVmIF9XRDcxOVhfSF8KKyNkZWZpbmUgX1dENzE5WF9IXworCisjZGVmaW5lIFdENzE5WF9TRyAyNTUJCS8qIFNjYXR0ZXIvZ2F0aGVyIHNpemUgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9QRVJfTFVOIDEJLyogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbGlua2VkIGNvbW1hbmRzLCBidXQKKwkJCQkgKiB0aGlzIGlzIDEgZm9yIG5vdyB0byBiZSBzYWZlLiAqLworCitzdHJ1Y3Qgd2Q3MTl4X3NnbGlzdCB7CisJX19sZTMyIHB0cjsKKwlfX2xlMzIgbGVuZ3RoOworfSBfX3BhY2tlZDsKKworZW51bSB3ZDcxOXhfY2FyZF90eXBlIHsKKwlXRDcxOVhfVFlQRV9VTktOT1dOID0gMCwKKwlXRDcxOVhfVFlQRV83MTkzLAorCVdENzE5WF9UWVBFXzcxOTcsCisJV0Q3MTlYX1RZUEVfNzI5NiwKK307CisKK3VuaW9uIHdkNzE5eF9yZWdzIHsKKwlfX2xlMzIgYWxsOwkvKiBBbGwgU3RhdHVzIGF0IG9uY2UgKi8KKwlzdHJ1Y3QgeworCQl1OCBPUEM7CQkvKiBPcGNvZGUgcmVnaXN0ZXIgKi8KKwkJdTggU0NTSTsJLyogU0NTSSBFcnJvcnMgKi8KKwkJdTggU1VFOwkJLyogU3BpZGVyIHVuaXF1ZSBFcnJvcnMgKi8KKwkJdTggSU5UOwkJLyogSW50ZXJydXB0IFN0YXR1cyAqLworCX0gYnl0ZXM7Cit9OworCisvKiBTcGlkZXIgQ29tbWFuZCBCbG9jayAoU0NCKSAqLworc3RydWN0IHdkNzE5eF9zY2IgeworCV9fbGUzMiBJbnRfU0NCOwkvKiAwMC0wMyBJbnRlcm5hbCBTQ0IgbGluayBwb2ludGVyIChtdXN0IGJlIGNsZWFyZWQpICovCisJdTggU0NCX29wY29kZTsJLyogMDQgU0NCIENvbW1hbmQgb3Bjb2RlICovCisJdTggQ0RCX3RhZzsJLyogMDUgU0NTSSBUYWcgYnl0ZSBmb3IgQ0RCIHF1ZXVlcyAoMCBpZiB1bnRhZ2dlZCkgKi8KKwl1OCBsdW47CQkvKiAwNiBTQ1NJIExVTiAqLworCXU4IGRldmlkOwkvKiAwNyBTQ1NJIERldmljZSBJRCAqLworCXU4IENEQlsxNl07CS8qIDA4LTIzIFNDU0kgQ0RCICgxNiBieXRlcyBhcyBkZWZpbmVkIGJ5IEFOU0kgc3BlYy4gKi8KKwlfX2xlMzIgZGF0YV9wOwkvKiAyNC0yNyBEYXRhIHRyYW5zZmVyIGFkZHJlc3MgKG9yIFNHIGxpc3QgYWRkcmVzcykgKi8KKwlfX2xlMzIgZGF0YV9sZW5ndGg7IC8qIDI4LTMxIERhdGEgdHJhbnNmZXIgTGVuZ3RoIChvciBTRyBsaXN0IGxlbmd0aCkgKi8KKwlfX2xlMzIgQ0RCX2xpbms7ICAgIC8qIDMyLTM1IFNDU0kgQ0RCIExpbmsgUHRyICovCisJX19sZTMyIHNlbnNlX2J1ZjsgICAvKiAzNi0zOSBBdXRvIHJlcXVlc3Qgc2Vuc2UgYnVmZmVyIGFkZHJlc3MgKi8KKwl1OCBzZW5zZV9idWZfbGVuZ3RoOy8qIDQwIEF1dG8gcmVxdWVzdCBzZW5zZSB0cmFuc2ZlciBsZW5ndGggKi8KKwl1OCByZXNlcnZlZDsJLyogNDEgcmVzZXJ2ZWQgKi8KKwl1OCBTQ0Jfb3B0aW9uczsJLyogNDIgU0NCLW9wdGlvbnMgKi8KKwl1OCBTQ0JfdGFnX21zZzsJLyogNDMgVGFnZ2VkIG1lc3NhZ2VzIG9wdGlvbnMgKi8KKwkvKiBOb3QgZmlsbGVkIGluIGJ5IGhvc3QgKi8KKwlfX2xlMzIgcmVxX3B0cjsJLyogNDQtNDcgUHRyIHRvIEhvc3QgUmVxdWVzdCByZXR1cm5lZCBvbiBpbnRlcnJ1cHQgKi8KKwl1OCBob3N0X29wY29kZTsJLyogNDggSG9zdCBDb21tYW5kIE9wY29kZSAoc2FtZSBhcyBBTVJfMDApICovCisJdTggc2NzaV9zdGF0OwkvKiA0OSBTQ1NJIFN0YXR1cyByZXR1cm5lZCAqLworCXU4IHJldF9lcnJvcjsJLyogNTAgU1BJREVSIFVuaXF1ZSBFcnJvciBDb2RlIHJldHVybmVkIChTVUUpICovCisJdTggaW50X3N0YXQ7CS8qIDUxIE1lc3NhZ2UgdTggLyBJbnRlcnJ1cHQgU3RhdHVzIGJ5dGUgcmV0dXJuZWQgKi8KKwlfX2xlMzIgdHJhbnNmZXJyZWQ7IC8qIDUyLTU1IEJ5dGVzIFRyYW5zZmVycmVkICovCisJdTggbGFzdF90cmFuc1szXTsgIC8qIDU2LTU4IEJ5dGVzIFRyYW5zZmVycmVkIGluIGxhc3Qgc2Vzc2lvbiAqLworCXU4IGxlbmd0aDsJLyogNTkgU0NTSSBNZXNzYWdlcyBMZW5ndGggKDEtOCkgKi8KKwl1OCBzeW5jX29mZnNldDsJLyogNjAgU3luY2hyb25vdXMgb2Zmc2V0ICovCisJdTggc3luY19yYXRlOwkvKiA2MSBTeW5jaHJvbm91cyByYXRlICovCisJdTggZmxhZ3NbMl07CS8qIDYyLTYzIFNDQiBzcGVjaWZpYyBmbGFncyAobG9jYWwgdG8gZWFjaCB0aHJlYWQpICovCisJLyogZXZlcnl0aGluZyBiZWxvdyBpcyBmb3IgZHJpdmVyIHVzZSAobm90IHVzZWQgYnkgY2FyZCkgKi8KKwlkbWFfYWRkcl90IHBoeXM7CS8qIGJ1cyBhZGRyZXNzIG9mIHRoZSBTQ0IgKi8KKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CS8qIGEgY29weSBvZiB0aGUgcG9pbnRlciB3ZSB3ZXJlIHBhc3NlZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3Qgd2Q3MTl4X3NnbGlzdCBzZ19saXN0W1dENzE5WF9TR10gX19hbGlnbmVkKDgpOyAvKiBTRyBsaXN0ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd2Q3MTl4IHsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaDsJLyogcG9pbnRlciB0byBob3N0IHN0cnVjdHVyZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXZvaWQgX19pb21lbSAqYmFzZTsKKwllbnVtIHdkNzE5eF9jYXJkX3R5cGUgdHlwZTsgLyogdHlwZSBvZiBjYXJkICovCisJdm9pZCAqZndfdmlydDsJCS8qIGZpcm13YXJlIGJ1ZmZlciBDUFUgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QgZndfcGh5czsJLyogZmlybXdhcmUgYnVmZmVyIGJ1cyBhZGRyZXNzICovCisJc2l6ZV90IGZ3X3NpemU7CQkvKiBmaXJtd2FyZSBidWZmZXIgc2l6ZSAqLworCXN0cnVjdCB3ZDcxOXhfaG9zdF9wYXJhbSAqcGFyYW1zOyAvKiBob3N0IHBhcmFtZXRlcnMgKEVFUFJPTSkgKi8KKwlkbWFfYWRkcl90IHBhcmFtc19waHlzOyAvKiBob3N0IHBhcmFtZXRlcnMgYnVzIGFkZHJlc3MgKi8KKwl2b2lkICpoYXNoX3ZpcnQ7CS8qIGhhc2ggdGFibGUgQ1BVIGFkZHJlc3MgKi8KKwlkbWFfYWRkcl90IGhhc2hfcGh5czsJLyogaGFzaCB0YWJsZSBidXMgYWRkcmVzcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3NjYnM7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX3NjYnM7Cit9OworCisvKiB0aW1lb3V0IGRlbGF5cyBpbiBtaWNyb3NlY3MgKi8KKyNkZWZpbmUgV0Q3MTlYX1dBSVRfRk9SX0NNRF9SRUFEWQk1MDAKKyNkZWZpbmUgV0Q3MTlYX1dBSVRfRk9SX1JJU0MJCTIwMDAKKyNkZWZpbmUgV0Q3MTlYX1dBSVRfRk9SX1NDU0lfUkVTRVQJMzAwMDAwMAorCisvKiBBbGwgY29tbWFuZHMgZXhjZXB0IDB4MDAgZ2VuZXJhdGUgYW4gaW50ZXJydXB0ICovCisjZGVmaW5lIFdENzE5WF9DTURfUkVBRFkJMHgwMCAvKiBDb21tYW5kIHJlZ2lzdGVyIHJlYWR5IChvciBub29wKSAqLworI2RlZmluZSBXRDcxOVhfQ01EX0lOSVRfUklTQwkweDAxIC8qIEluaXRpYWxpemUgUklTQyAqLworLyogMHgwMiBpcyByZXNlcnZlZCAqLworI2RlZmluZSBXRDcxOVhfQ01EX0JVU1JFU0VUCTB4MDMgLyogQXNzZXJ0IFNDU0kgYnVzIHJlc2V0ICovCisjZGVmaW5lIFdENzE5WF9DTURfUkVBRF9GSVJNVkVSCTB4MDQgLyogUmVhZCB0aGUgRmlybXdhcmUgUmV2aXNpb24gKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9FQ0hPX0JZVEVTCTB4MDUgLyogRWNobyBjb21tYW5kIGJ5dGVzIChEVykgKi8KKy8qIDB4MDYgaXMgcmVzZXJ2ZWQgKi8KKy8qIDB4MDcgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9HRVRfUEFSQU0JMHgwOCAvKiBHZXQgcHJvZ3JhbW1hYmxlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9TRVRfUEFSQU0JMHgwOSAvKiBTZXQgcHJvZ3JhbW1hYmxlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9TTEVFUAkweDBhIC8qIFB1dCBTUElERVIgdG8gc2xlZXAgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9SRUFEX0lOSVQJMHgwYiAvKiBSZWFkIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9SRVNUT1JFX0lOSVQJMHgwYyAvKiBSZXN0b3JlIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgKi8KKy8qIDB4MGQgaXMgcmVzZXJ2ZWQgKi8KKy8qIDB4MGUgaXMgcmVzZXJ2ZWQgKi8KKy8qIDB4MGYgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9BQk9SVF9UQUcJMHgxMCAvKiBTZW5kIEFib3J0IHRhZyBtZXNzYWdlIHRvIHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfQ01EX0FCT1JUCTB4MTEgLyogU2VuZCBBYm9ydCBtZXNzYWdlIHRvIHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfQ01EX1JFU0VUCTB4MTIgLyogU2VuZCBSZXNldCBtZXNzYWdlIHRvIHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfQ01EX0lOSVRfU0NBTQkweDEzIC8qIEluaXRpYXRlIFNDQU0gKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9HRVRfU1lOQwkweDE0IC8qIEdldCBzeW5jaHJvbm91cyByYXRlcyAqLworI2RlZmluZSBXRDcxOVhfQ01EX1NFVF9TWU5DCTB4MTUgLyogU2V0IHN5bmNocm9ub3VzIHJhdGVzICovCisjZGVmaW5lIFdENzE5WF9DTURfR0VUX1dJRFRICTB4MTYgLyogR2V0IFNDU0kgYnVzIHdpZHRoICovCisjZGVmaW5lIFdENzE5WF9DTURfU0VUX1dJRFRICTB4MTcgLyogU2V0IFNDU0kgYnVzIHdpZHRoICovCisjZGVmaW5lIFdENzE5WF9DTURfR0VUX1RBR1MJMHgxOCAvKiBHZXQgdGFnIGZsYWdzICovCisjZGVmaW5lIFdENzE5WF9DTURfU0VUX1RBR1MJMHgxOSAvKiBTZXQgdGFnIGZsYWdzICovCisjZGVmaW5lIFdENzE5WF9DTURfR0VUX1BBUkFNMgkweDFhIC8qIEdldCBwcm9ncmFtbWFibGUgcGFyYW1zIChmb3JtYXQgMikgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9TRVRfUEFSQU0yCTB4MWIgLyogU2V0IHByb2dyYW1tYWJsZSBwYXJhbXMgKGZvcm1hdCAyKSAqLworLyogQ29tbWFuZHMgd2l0aCByZXF1ZXN0IHBvaW50ZXJzIChtYWlsYm94KSAqLworI2RlZmluZSBXRDcxOVhfQ01EX1BST0NFU1NfU0NCCTB4ODAgLyogUHJvY2VzcyBTQ1NJIENvbnRyb2wgQmxvY2sgKFNDQikgKi8KKy8qIE5vIGludGVycnVwdCBnZW5lcmF0ZWQgb24gYWNjZXB0YW5jZSBvZiBTQ0IgcG9pbnRlciAqLworCisvKiBpbnRlcnJ1cHQgc3RhdHVzIGRlZmluZXMgKi8KKyNkZWZpbmUgV0Q3MTlYX0lOVF9OT05FCQkweDAwIC8qIE5vIGludGVycnVwdCBwZW5kaW5nICovCisjZGVmaW5lIFdENzE5WF9JTlRfTk9FUlJPUlMJMHgwMSAvKiBDb21tYW5kIGNvbXBsZXRlZCB3aXRoIG5vIGVycm9ycyAqLworI2RlZmluZSBXRDcxOVhfSU5UX0xJTktOT0VSUk9SUwkweDAyIC8qIGxpbmsgY21kIGNvbXBsZXRlZCB3aXRoIG5vIGVycm9ycyAqLworI2RlZmluZSBXRDcxOVhfSU5UX0xJTktOT1NUQVRVUwkweDAzIC8qIGxpbmsgY21kIGNvbXBsZXRlZCB3aXRoIG5vIGZsYWcgc2V0ICovCisjZGVmaW5lIFdENzE5WF9JTlRfRVJST1JTTE9HR0VECTB4MDQgLyogY21kIGNvbXBsZXRlZCB3aXRoIGVycm9ycyBsb2dnZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX0lOVF9TUElERVJGQUlMRUQJMHgwNSAvKiBjbWQgZmFpbGVkIHdpdGhvdXQgdmFsaWQgU0NTSSBzdGF0dXMgKi8KKyNkZWZpbmUgV0Q3MTlYX0lOVF9CQURJTlQJMHg4MCAvKiB1bnNvbGljaXRlZCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgV0Q3MTlYX0lOVF9QSU9SRUFEWQkweGYwIC8qIGRhdGEgcmVhZHkgZm9yIFBJTyBvdXRwdXQgKi8KKworLyogU3BpZGVyIFVuaXF1ZSBFcnJvciBDb2RlcyAoU1VFKSAqLworI2RlZmluZSBXRDcxOVhfU1VFX05PRVJST1JTCTB4MDAgLyogTm8gZXJyb3JzIGRldGVjdGVkIGJ5IFNQSURFUiAqLworI2RlZmluZSBXRDcxOVhfU1VFX1JFSkVDVEVECTB4MDEgLyogQ29tbWFuZCBSZWplY3RlZCAoYmFkIG9wY29kZS9wYXJhbSkgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9TQ0JRRlVMTAkweDAyIC8qIFNDQiBxdWV1ZSBmdWxsICovCisvKiAweDAzIGlzIHJlc2VydmVkICovCisjZGVmaW5lIFdENzE5WF9TVUVfVEVSTQkJMHgwNCAvKiBIb3N0IHRlcm1pbmF0ZWQgU0NCIHZpYSBwcmltYXRpdmUgY21kICovCisjZGVmaW5lIFdENzE5WF9TVUVfQ0hBTjFQQVIJMHgwNSAvKiBQQ0kgQ2hhbm5lbCAxIHBhcml0eSBlcnJvciBvY2N1cnJlZCAqLworI2RlZmluZSBXRDcxOVhfU1VFX0NIQU4xQUJPUlQJMHgwNiAvKiBQQ0kgQ2hhbm5lbCAxIHN5c3RlbSBhYm9ydCBvY2N1cnJlZCAqLworI2RlZmluZSBXRDcxOVhfU1VFX0NIQU4yM1BBUgkweDA3IC8qIFBDSSBDaGFubmVsIDIvMyBwYXJpdHkgZXJyb3Igb2NjdXJyZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9DSEFOMjNBQk9SVAkweDA4IC8qIFBDSSBDaGFubmVsIDIvMyBzeXN0ZW0gYWJvcnQgb2NjdXJyZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9USU1FT1VUCTB4MTAgLyogU2VsZWN0aW9uL3Jlc2VsZWN0aW9uIHRpbWVvdXQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9SRVNFVAkweDExIC8qIFNDU0kgYnVzIHJlc2V0IG9jY3VycmVkICovCisjZGVmaW5lIFdENzE5WF9TVUVfQlVTRVJST1IJMHgxMiAvKiBTQ1NJIGJ1cyBlcnJvciAqLworI2RlZmluZSBXRDcxOVhfU1VFX1dST05HV0FZCTB4MTMgLyogV3JvbmcgZGF0YSB0cmFuc2ZlciBkaXIgc2V0IGJ5IHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfU1VFX0JBRFBIQVNFCTB4MTQgLyogU0NTSSBwaGFzZSBpbGxlZ2FsIG9yIHVuZXhwZWN0ZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9UT09MT05HCTB4MTUgLyogdGFyZ2V0IHJlcXVlc3RlZCB0b28gbXVjaCBkYXRhICovCisjZGVmaW5lIFdENzE5WF9TVUVfQlVTRlJFRQkweDE2IC8qIFVuZXhwZWN0ZWQgU0NTSSBidXMgZnJlZSAqLworI2RlZmluZSBXRDcxOVhfU1VFX0FSU0RPTkUJMHgxNyAvKiBBdXRvIHJlcXVlc3Qgc2Vuc2UgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9JR05PUkVECTB4MTggLyogU0NTSSBtZXNzYWdlIHdhcyBpZ25vcmVkIGJ5IHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfU1VFX1dST05HVEFHUwkweDE5IC8qIFRhZ2dlZCBTQ0IgJiB0YWdzIG9mZiAob3IgdmljZSB2ZXJzYSkgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9CQURUQUdTCTB4MWEgLyogV3JvbmcgdGFnIG1lc3NhZ2UgdHlwZSBmb3IgdGFyZ2V0ICovCisjZGVmaW5lIFdENzE5WF9TVUVfTk9TQ0FNSUQJMHgxYiAvKiBObyBTQ0FNIHNvZnQgSUQgYXZhaWxhYmxlICovCisKKy8qIGNvZGUgc2l6ZXMgKi8KKyNkZWZpbmUJV0Q3MTlYX0hBU0hfVEFCTEVfU0laRQk0MDk2CisKKy8qIEFkdmFuY2VkIE1vZGUgUmVnaXN0ZXJzICovCisvKiBSZWdzIDB4MDAuLjB4MWYgYXJlIGZvciBBZHZhbmNlZCBNb2RlIG9mIHRoZSBjYXJkIChSSVNDIGlzIHJ1bm5pbmcpLiAqLworI2RlZmluZSBXRDcxOVhfQU1SX0NPTU1BTkQJCTB4MDAKKyNkZWZpbmUgV0Q3MTlYX0FNUl9DTURfUEFSQU0JCTB4MDEKKyNkZWZpbmUgV0Q3MTlYX0FNUl9DTURfUEFSQU1fMgkJMHgwMgorI2RlZmluZSBXRDcxOVhfQU1SX0NNRF9QQVJBTV8zCQkweDAzCisjZGVmaW5lIFdENzE5WF9BTVJfU0NCX0lOCQkweDA0CisKKyNkZWZpbmUgV0Q3MTlYX0FNUl9CSU9TX1NIQVJFX0lOVAkweDBmCisKKyNkZWZpbmUgV0Q3MTlYX0FNUl9TQ0JfT1VUCQkweDE4CisjZGVmaW5lIFdENzE5WF9BTVJfT1BfQ09ERQkJMHgxYworI2RlZmluZSBXRDcxOVhfQU1SX1NDU0lfU1RBVFVTCQkweDFkCisjZGVmaW5lIFdENzE5WF9BTVJfU0NCX0VSUk9SCQkweDFlCisjZGVmaW5lIFdENzE5WF9BTVJfSU5UX1NUQVRVUwkJMHgxZgorCisjZGVmaW5lIFdENzE5WF9ESVNBQkxFX0lOVAkweDgwCisKKy8qIFNDQiBmbGFncyAqLworI2RlZmluZSBXRDcxOVhfU0NCX0ZMQUdTX0NIRUNLX0RJUkVDVElPTgkweDAxCisjZGVmaW5lIFdENzE5WF9TQ0JfRkxBR1NfUENJX1RPX1NDU0kJCTB4MDIKKyNkZWZpbmUgV0Q3MTlYX1NDQl9GTEFHU19BVVRPX1JFUVVFU1RfU0VOU0UJMHgxMAorI2RlZmluZSBXRDcxOVhfU0NCX0ZMQUdTX0RPX1NDQVRURVJfR0FUSEVSCTB4MjAKKyNkZWZpbmUgV0Q3MTlYX1NDQl9GTEFHU19OT19ESVNDT05ORUNUCQkweDQwCisKKy8qIFBDSSBSZWdpc3RlcnMgdXNlZCBmb3IgcmVzZXQsIGluaXRpYWwgY29kZSBkb3dubG9hZCAqLworLyogUmVncyAweDIwLi4weDNmIGFyZSBmb3IgTm9ybWFsIChET1MpIG1vZGUgKFJJU0MgaXMgYXNsZWVwKS4gKi8KKyNkZWZpbmUgV0Q3MTlYX1BDSV9HUElPX0NPTlRST0wJCTB4M0MKKyNkZWZpbmUgV0Q3MTlYX1BDSV9HUElPX0RBVEEJCTB4M0QKKyNkZWZpbmUgV0Q3MTlYX1BDSV9QT1JUX1JFU0VUCQkweDNFCisjZGVmaW5lIFdENzE5WF9QQ0lfTU9ERV9TRUxFQ1QJCTB4M0YKKworI2RlZmluZSBXRDcxOVhfUENJX0VYVEVSTkFMX0FERFIJMHg2MAorI2RlZmluZSBXRDcxOVhfUENJX0lOVEVSTkFMX0FERFIJMHg2NAorI2RlZmluZSBXRDcxOVhfUENJX0RNQV9UUkFOU0ZFUl9TSVpFCTB4NjYKKyNkZWZpbmUgV0Q3MTlYX1BDSV9DSEFOTkVMMl8zQ01ECTB4NjgKKyNkZWZpbmUgV0Q3MTlYX1BDSV9DSEFOTkVMMl8zU1RBVFVTCTB4NjkKKworI2RlZmluZSBXRDcxOVhfR1BJT19JRF9CSVRTCQkweDBhCisjZGVmaW5lIFdENzE5WF9QUkFNX0JBU0VfQUREUgkJMHgwMAorCisvKiBjb2RlcyB3cml0dGVuIHRvIG9yIHJlYWQgZnJvbSB0aGUgY2FyZCAqLworI2RlZmluZSBXRDcxOVhfUENJX1JFU0VUCQkgMHgwMQorI2RlZmluZSBXRDcxOVhfRU5BQkxFX0FEVkFOQ0VfTU9ERQkgMHgwMQorCisjZGVmaW5lIFdENzE5WF9TVEFSVF9DSEFOTkVMMl8zRE1BCSAweDE3CisjZGVmaW5lIFdENzE5WF9TVEFSVF9DSEFOTkVMMl8zRE9ORQkgMHgwMQorI2RlZmluZSBXRDcxOVhfU1RBUlRfQ0hBTk5FTDJfM0FCT1JUCSAweDIwCisKKy8qIDMzQzI5NiBHUElPIGJpdHMgZm9yIEVFUFJPTSBwaW5zICovCisjZGVmaW5lIFdENzE5WF9FRV9ESQkoMSA8PCAxKQorI2RlZmluZSBXRDcxOVhfRUVfQ1MJKDEgPDwgMikKKyNkZWZpbmUgV0Q3MTlYX0VFX0NMSwkoMSA8PCAzKQorI2RlZmluZSBXRDcxOVhfRUVfRE8JKDEgPDwgNCkKKworLyogRUVQUk9NIGNvbnRlbnRzICovCitzdHJ1Y3Qgd2Q3MTl4X2VlcHJvbV9oZWFkZXIgeworCXU4IHNpZzE7CisJdTggc2lnMjsKKwl1OCB2ZXJzaW9uOworCXU4IGNoZWNrc3VtOworCXU4IGNmZ19vZmZzZXQ7CisJdTggY2ZnX3NpemU7CisJdTggc2V0dXBfb2Zmc2V0OworCXU4IHNldHVwX3NpemU7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFdENzE5WF9FRV9TSUcxCQkwCisjZGVmaW5lIFdENzE5WF9FRV9TSUcyCQkxCisjZGVmaW5lIFdENzE5WF9FRV9WRVJTSU9OCTIKKyNkZWZpbmUgV0Q3MTlYX0VFX0NIRUNLU1VNCTMKKyNkZWZpbmUgV0Q3MTlYX0VFX0NGR19PRkZTRVQJNAorI2RlZmluZSBXRDcxOVhfRUVfQ0ZHX1NJWkUJNQorI2RlZmluZSBXRDcxOVhfRUVfU0VUVVBfT0ZGU0VUCTYKKyNkZWZpbmUgV0Q3MTlYX0VFX1NFVFVQX1NJWkUJNworCisjZGVmaW5lIFdENzE5WF9FRV9TQ1NJX0lEX01BU0sJMHhmCisKKy8qIFNQSURFUiBIb3N0IFBhcmFtZXRlcnMgQmxvY2sgKD1FRVBST00gY29uZmlndXJhdGlvbiBibG9jaykgKi8KK3N0cnVjdCB3ZDcxOXhfaG9zdF9wYXJhbSB7CisJdTggY2hfMV90aDsJLyogRklGTyB0aHJlc2hvbGQgKi8KKwl1OCBzY3NpX2NvbmY7CS8qIFNDU0kgY29uZmlndXJhdGlvbiAqLworCXU4IG93bl9zY3NpX2lkOwkvKiBjb250cm9sbGVyIFNDU0kgSUQgKi8KKwl1OCBzZWxfdGltZW91dDsJLyogc2VsZWN0aW9uIHRpbWVvdXQqLworCXU4IHNsZWVwX3RpbWVyOwkvKiBzZWVwIHRpbWVyICovCisJX19sZTE2IGNkYl9zaXplOy8qIENEQiBzaXplIGdyb3VwcyAqLworCV9fbGUxNiB0YWdfZW47CS8qIFRhZyBtc2cgZW5hYmxlcyAoSUQgMC0xNSkgKi8KKwl1OCBzY3NpX3BhZDsJLyogU0NTSSBwYWQgY29udHJvbCAqLworCV9fbGUzMiB3aWRlOwkvKiBXSURFIG1zZyBvcHRpb25zIChJRCAwLTE1KSAqLworCV9fbGUzMiBzeW5jOwkvKiBTWU5DIG1zZyBvcHRpb25zIChJRCAwLTE1KSAqLworCXU4IHNvZnRfbWFzazsJLyogc29mdCBlcnJvciBtYXNrICovCisJdTggdW5zb2xfbWFzazsJLyogdW5zb2xpY2l0ZWQgZXJyb3IgbWFzayAqLworfSBfX3BhY2tlZDsKKworI2VuZGlmIC8qIF9XRDcxOVhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zcy5oIGIvZHJpdmVycy9zb2MvdGkva25hdl9xbXNzLmgKaW5kZXggYmM5ZGNjOC4uNTFkYTIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdGkva25hdl9xbXNzLmgKKysrIGIvZHJpdmVycy9zb2MvdGkva25hdl9xbXNzLmgKQEAgLTM0OCwxNSArMzQ4LDE1IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWdpb24sICZrZGV2LT5yZWdpb25zLCBsaXN0KQogCiAjZGVmaW5lIGZpcnN0X3JlZ2lvbihrZGV2KQkJCQkJXAotCWxpc3RfZmlyc3RfZW50cnkoJmtkZXYtPnJlZ2lvbnMsIFwKLQkJCXN0cnVjdCBrbmF2X3JlZ2lvbiwgbGlzdCkKKwlsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmtkZXYtPnJlZ2lvbnMsIFwKKwkJCQkgc3RydWN0IGtuYXZfcmVnaW9uLCBsaXN0KQogCiAjZGVmaW5lIGZvcl9lYWNoX3F1ZXVlX3JhbmdlKGtkZXYsIHJhbmdlKQkJCVwKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhbmdlLCAma2Rldi0+cXVldWVfcmFuZ2VzLCBsaXN0KQogCiAjZGVmaW5lIGZpcnN0X3F1ZXVlX3JhbmdlKGtkZXYpCQkJCQlcCi0JbGlzdF9maXJzdF9lbnRyeSgma2Rldi0+cXVldWVfcmFuZ2VzLCBcCi0JCQlzdHJ1Y3Qga25hdl9yYW5nZV9pbmZvLCBsaXN0KQorCWxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgma2Rldi0+cXVldWVfcmFuZ2VzLCBcCisJCQkJIHN0cnVjdCBrbmF2X3JhbmdlX2luZm8sIGxpc3QpCiAKICNkZWZpbmUgZm9yX2VhY2hfcG9vbChrZGV2LCBwb29sKQkJCQlcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb29sLCAma2Rldi0+cG9vbHMsIGxpc3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9rbmF2X3Ftc3NfcXVldWUuYyBiL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zc19xdWV1ZS5jCmluZGV4IDBhMmM4NjMuLjliOGRkNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zc19xdWV1ZS5jCisrKyBiL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zc19xdWV1ZS5jCkBAIC03ODUsNyArNzg1LDcgQEAKIAkJZGV2X2VycihrZGV2LT5kZXYsICJvdXQgb2YgZGVzY3MgaW4gcmVnaW9uKCVkKSBmb3IgcG9vbCglcylcbiIsCiAJCQlyZWdpb25faWQsIG5hbWUpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfdW5sb2NrOwogCX0KIAogCS8qIFJlZ2lvbiBtYWludGFpbnMgYSBzb3J0ZWQgKGJ5IHJlZ2lvbiBvZmZzZXQpIGxpc3Qgb2YgcG9vbHMKQEAgLTgxNSwxNSArODE1LDE2IEBACiAJCWRldl9lcnIoa2Rldi0+ZGV2LCAicG9vbCglcykgY3JlYXRlIGZhaWxlZDogZnJhZ21lbnRlZCBkZXNjIHBvb2wgaW4gcmVnaW9uKCVkKVxuIiwKIAkJCW5hbWUsIHJlZ2lvbl9pZCk7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOworCQlnb3RvIGVycl91bmxvY2s7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZrbmF2X2Rldl9sb2NrKTsKIAlrZGVzY19maWxsX3Bvb2wocG9vbCk7CiAJcmV0dXJuIHBvb2w7CiAKLWVycjoKK2Vycl91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZrbmF2X2Rldl9sb2NrKTsKK2VycjoKIAlrZnJlZShwb29sLT5uYW1lKTsKIAlkZXZtX2tmcmVlKGtkZXYtPmRldiwgcG9vbCk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKQEAgLTEzMDUsMTQgKzEzMDYsMTQgQEAKIHN0YXRpYyB2b2lkIGtuYXZfcXVldWVfZnJlZV9yZWdpb25zKHN0cnVjdCBrbmF2X2RldmljZSAqa2RldikKIHsKIAlzdHJ1Y3Qga25hdl9yZWdpb24gKnJlZ2lvbjsKLQlzdHJ1Y3Qga25hdl9wb29sICpwb29sOworCXN0cnVjdCBrbmF2X3Bvb2wgKnBvb2wsICp0bXA7CiAJdW5zaWduZWQgc2l6ZTsKIAogCWZvciAoOzspIHsKIAkJcmVnaW9uID0gZmlyc3RfcmVnaW9uKGtkZXYpOwogCQlpZiAoIXJlZ2lvbikKIAkJCWJyZWFrOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvb2wsICZyZWdpb24tPnBvb2xzLCByZWdpb25faW5zdCkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvb2wsIHRtcCwgJnJlZ2lvbi0+cG9vbHMsIHJlZ2lvbl9pbnN0KQogCQkJa25hdl9wb29sX2Rlc3Ryb3kocG9vbCk7CiAKIAkJc2l6ZSA9IHJlZ2lvbi0+dmlydF9lbmQgLSByZWdpb24tPnZpcnRfc3RhcnQ7CkBAIC0xNjM5LDcgKzE2NDAsNyBAQAogCXNpemUgPSAoMSA8PCBrZGV2LT5pbnN0X3NoaWZ0KSAqIGtkZXYtPm51bV9xdWV1ZXNfaW5fdXNlOwogCWtkZXYtPmluc3RhbmNlcyA9IGRldm1fa3phbGxvYyhrZGV2LT5kZXYsIHNpemUsIEdGUF9LRVJORUwpOwogCWlmICgha2Rldi0+aW5zdGFuY2VzKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yX2VhY2hfcXVldWVfcmFuZ2Uoa2RldiwgcmFuZ2UpIHsKIAkJaWYgKHJhbmdlLT5vcHMgJiYgcmFuZ2UtPm9wcy0+aW5pdF9yYW5nZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9LY29uZmlnIGIvZHJpdmVycy9zb2MvdmVyc2F0aWxlL0tjb25maWcKaW5kZXggYmY1ZWU5Yy4uYTkyOGE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdmVyc2F0aWxlL0tjb25maWcKKysrIGIvZHJpdmVycy9zb2MvdmVyc2F0aWxlL0tjb25maWcKQEAgLTEsNiArMSwxNSBAQAogIwogIyBBUk0gVmVyc2F0aWxlIFNvQyBkcml2ZXJzCiAjCitjb25maWcgU09DX0lOVEVHUkFUT1JfQ00KKwlib29sICJTb0MgYnVzIGRldmljZSBmb3IgdGhlIEFSTSBJbnRlZ3JhdG9yIHBsYXRmb3JtIGNvcmUgbW9kdWxlcyIKKwlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUgorCXNlbGVjdCBTT0NfQlVTCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgU29DIGJ1cyBvbiB0aGUgQVJNIEludGVncmF0b3IgcGxhdGZvcm0KKwkgIGNvcmUgbW9kdWxlcyBwcm92aWRpbmcgc29tZSBzeXNmcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQVNJQworCSAgdmFyaWFudC4KKwogY29uZmlnIFNPQ19SRUFMVklFVwogCWJvb2wgIlNvQyBidXMgZGV2aWNlIGZvciB0aGUgQVJNIFJlYWxWaWV3IHBsYXRmb3JtcyIKIAlkZXBlbmRzIG9uIEFSQ0hfUkVBTFZJRVcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9NYWtlZmlsZSBiL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9NYWtlZmlsZQppbmRleCBhZDU0NzQzLi5jZjYxMmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NvYy92ZXJzYXRpbGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zb2MvdmVyc2F0aWxlL01ha2VmaWxlCkBAIC0xICsxLDIgQEAKK29iai0kKENPTkZJR19TT0NfSU5URUdSQVRPUl9DTSkJKz0gc29jLWludGVncmF0b3Iubwogb2JqLSQoQ09ORklHX1NPQ19SRUFMVklFVykJKz0gc29jLXJlYWx2aWV3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9zb2MtaW50ZWdyYXRvci5jIGIvZHJpdmVycy9zb2MvdmVyc2F0aWxlL3NvYy1pbnRlZ3JhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkN2QzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9zb2MtaW50ZWdyYXRvci5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMdGQuCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c19zb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9JRF9PRkZTRVQJMHgwMAorCitzdGF0aWMgdTMyIGludGVncmF0b3JfY29yZWlkOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbnRlZ3JhdG9yX2NtX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhcm0sY29yZS1tb2R1bGUtaW50ZWdyYXRvciIsIH0sCisJeyB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaW50ZWdyYXRvcl9hcmNoX3N0cih1MzIgaWQpCit7CisJc3dpdGNoICgoaWQgPj4gMTYpICYgMHhmZikgeworCWNhc2UgMHgwMDoKKwkJcmV0dXJuICJBU0IgbGl0dGxlLWVuZGlhbiI7CisJY2FzZSAweDAxOgorCQlyZXR1cm4gIkFIQiBsaXR0bGUtZW5kaWFuIjsKKwljYXNlIDB4MDM6CisJCXJldHVybiAiQUhCLUxpdGUgc3lzdGVtIGJ1cywgYmktZW5kaWFuIjsKKwljYXNlIDB4MDQ6CisJCXJldHVybiAiQUhCIjsKKwljYXNlIDB4MDg6CisJCXJldHVybiAiQUhCIHN5c3RlbSBidXMsIEFTQiBwcm9jZXNzb3IgYnVzIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVua25vd24iOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmludGVncmF0b3JfZnBnYV9zdHIodTMyIGlkKQoreworCXN3aXRjaCAoKGlkID4+IDEyKSAmIDB4ZikgeworCWNhc2UgMHgwMToKKwkJcmV0dXJuICJYQzQwNjIiOworCWNhc2UgMHgwMjoKKwkJcmV0dXJuICJYQzQwODUiOworCWNhc2UgMHgwMzoKKwkJcmV0dXJuICJYVkM2MDAiOworCWNhc2UgMHgwNDoKKwkJcmV0dXJuICJFUE03MjU2QUUgKEFsdGVyYSBQTEQpIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVua25vd24iOworCX0KK30KKworc3RhdGljIHNzaXplX3QgaW50ZWdyYXRvcl9nZXRfbWFuZihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlMDJ4XG4iLCBpbnRlZ3JhdG9yX2NvcmVpZCA+PiAyNCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpbnRlZ3JhdG9yX21hbmZfYXR0ciA9CisJX19BVFRSKG1hbnVmYWN0dXJlciwgIFNfSVJVR08sIGludGVncmF0b3JfZ2V0X21hbmYsICBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgaW50ZWdyYXRvcl9nZXRfYXJjaChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaW50ZWdyYXRvcl9hcmNoX3N0cihpbnRlZ3JhdG9yX2NvcmVpZCkpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaW50ZWdyYXRvcl9hcmNoX2F0dHIgPQorCV9fQVRUUihhcmNoLCAgU19JUlVHTywgaW50ZWdyYXRvcl9nZXRfYXJjaCwgIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBpbnRlZ3JhdG9yX2dldF9mcGdhKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpbnRlZ3JhdG9yX2ZwZ2Ffc3RyKGludGVncmF0b3JfY29yZWlkKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpbnRlZ3JhdG9yX2ZwZ2FfYXR0ciA9CisJX19BVFRSKGZwZ2EsICBTX0lSVUdPLCBpbnRlZ3JhdG9yX2dldF9mcGdhLCAgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IGludGVncmF0b3JfZ2V0X2J1aWxkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJTAyeFxuIiwgKGludGVncmF0b3JfY29yZWlkID4+IDQpICYgMHhGRik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpbnRlZ3JhdG9yX2J1aWxkX2F0dHIgPQorCV9fQVRUUihidWlsZCwgIFNfSVJVR08sIGludGVncmF0b3JfZ2V0X2J1aWxkLCAgTlVMTCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGludGVncmF0b3Jfc29jX2luaXQodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcDsKKwlzdHJ1Y3Qgc29jX2RldmljZSAqc29jX2RldjsKKwlzdHJ1Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgKnNvY19kZXZfYXR0cjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBpbnRlZ3JhdG9yX2NtX21hdGNoKTsKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN5c2Nvbl9yZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAobnApOworCWlmIChJU19FUlIoc3lzY29uX3JlZ21hcCkpCisJCXJldHVybiBQVFJfRVJSKHN5c2Nvbl9yZWdtYXApOworCisJcmV0ID0gcmVnbWFwX3JlYWQoc3lzY29uX3JlZ21hcCwgSU5URUdSQVRPUl9IRFJfSURfT0ZGU0VULAorCQkJICAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpbnRlZ3JhdG9yX2NvcmVpZCA9IHZhbDsKKworCXNvY19kZXZfYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCpzb2NfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNvY19kZXZfYXR0cikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzb2NfZGV2X2F0dHItPnNvY19pZCA9ICJJbnRlZ3JhdG9yIjsKKwlzb2NfZGV2X2F0dHItPm1hY2hpbmUgPSAiSW50ZWdyYXRvciI7CisJc29jX2Rldl9hdHRyLT5mYW1pbHkgPSAiVmVyc2F0aWxlIjsKKwlzb2NfZGV2ID0gc29jX2RldmljZV9yZWdpc3Rlcihzb2NfZGV2X2F0dHIpOworCWlmIChJU19FUlIoc29jX2RldikpIHsKKwkJa2ZyZWUoc29jX2Rldl9hdHRyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldiA9IHNvY19kZXZpY2VfdG9fZGV2aWNlKHNvY19kZXYpOworCisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmludGVncmF0b3JfbWFuZl9hdHRyKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmaW50ZWdyYXRvcl9hcmNoX2F0dHIpOworCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZpbnRlZ3JhdG9yX2ZwZ2FfYXR0cik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmludGVncmF0b3JfYnVpbGRfYXR0cik7CisKKwlkZXZfaW5mbyhkZXYsICJEZXRlY3RlZCBBUk0gY29yZSBtb2R1bGU6XG4iKTsKKwlkZXZfaW5mbyhkZXYsICIgICAgTWFudWZhY3R1cmVyOiAlMDJ4XG4iLCAodmFsID4+IDI0KSk7CisJZGV2X2luZm8oZGV2LCAiICAgIEFyY2hpdGVjdHVyZTogJXNcbiIsIGludGVncmF0b3JfYXJjaF9zdHIodmFsKSk7CisJZGV2X2luZm8oZGV2LCAiICAgIEZQR0E6ICVzXG4iLCBpbnRlZ3JhdG9yX2ZwZ2Ffc3RyKHZhbCkpOworCWRldl9pbmZvKGRldiwgIiAgICBCdWlsZDogJTAyeFxuIiwgKHZhbCA+PiA0KSAmIDB4RkYpOworCWRldl9pbmZvKGRldiwgIiAgICBSZXY6ICVjXG4iLCAoJ0EnICsgKHZhbCAmIDB4MDMpKSk7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChpbnRlZ3JhdG9yX3NvY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvaXNsMjkwMjguYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvaXNsMjkwMjguYwppbmRleCA2MDE0NjI1Li5lOTY5MTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L2lzbDI5MDI4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9pc2wyOTAyOC5jCkBAIC01MzcsNyArNTM3LDggQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBpc2wyOTAyOF9pZCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlzbDI5MDI4X29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJpc2lsLGlzbDI5MDI4IiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImlzbCxpc2wyOTAyOCIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpc2lsLGlzbDI5MDI4IiwgfSwvKiBkZXByZWNhdGVkLCBkb24ndCB1c2UgKi8KIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaXNsMjkwMjhfb2ZfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvbG9vcGJhY2svdGNtX2xvb3AuYyBiL2RyaXZlcnMvdGFyZ2V0L2xvb3BiYWNrL3RjbV9sb29wLmMKaW5kZXggYWIzYWIyNy4uNGQxYjcyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvbG9vcGJhY2svdGNtX2xvb3AuYworKysgYi9kcml2ZXJzL3RhcmdldC9sb29wYmFjay90Y21fbG9vcC5jCkBAIC0xMTAsNTggKzExMCw2IEBACiAgKi8KIHN0cnVjdCBkZXZpY2UgKnRjbV9sb29wX3ByaW1hcnk7CiAKLS8qCi0gKiBDb3BpZWQgZnJvbSBkcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmM6ZmNfY2hhbmdlX3F1ZXVlX2RlcHRoKCkgYW5kCi0gKiBkcml2ZXJzL3Njc2kvbGliaXNjc2kuYzppc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoKQotICovCi1zdGF0aWMgaW50IHRjbV9sb29wX2NoYW5nZV9xdWV1ZV9kZXB0aCgKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JaW50IGRlcHRoLAotCWludCByZWFzb24pCi17Ci0Jc3dpdGNoIChyZWFzb24pIHsKLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUkFNUF9VUDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci0KLXN0YXRpYyBpbnQgdGNtX2xvb3BfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnKQotewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIHRhZyk7Ci0KLQkJaWYgKHRhZykKLQkJCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JfSBlbHNlCi0JCXRhZyA9IDA7Ci0KLQlyZXR1cm4gdGFnOwotfQotCi0vKgotICogTG9jYXRlIHRoZSBTQU0gVGFzayBBdHRyIGZyb20gc3RydWN0IHNjc2lfY21uZCAqCi0gKi8KLXN0YXRpYyBpbnQgdGNtX2xvb3Bfc2FtX2F0dHIoc3RydWN0IHNjc2lfY21uZCAqc2MsIGludCB0YWcpCi17Ci0JaWYgKHNjLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgJiYKLQkgICAgc2MtPmRldmljZS0+b3JkZXJlZF90YWdzICYmIHRhZyA+PSAwKQotCQlyZXR1cm4gTVNHX09SREVSRURfVEFHOwotCi0JcmV0dXJuIE1TR19TSU1QTEVfVEFHOwotfQotCiBzdGF0aWMgdm9pZCB0Y21fbG9vcF9zdWJtaXNzaW9uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB0Y21fbG9vcF9jbWQgKnRsX2NtZCA9CkBAIC0yMjAsNyArMTY4LDcgQEAKIAogCXJjID0gdGFyZ2V0X3N1Ym1pdF9jbWRfbWFwX3NnbHMoc2VfY21kLCB0bF9uZXh1cy0+c2Vfc2Vzcywgc2MtPmNtbmQsCiAJCQkmdGxfY21kLT50bF9zZW5zZV9idWZbMF0sIHRsX2NtZC0+c2MtPmRldmljZS0+bHVuLAotCQkJdHJhbnNmZXJfbGVuZ3RoLCB0Y21fbG9vcF9zYW1fYXR0cihzYywgdGxfY21kLT5zY19jbWRfdGFnKSwKKwkJCXRyYW5zZmVyX2xlbmd0aCwgTVNHX1NJTVBMRV9UQUcsCiAJCQlzYy0+c2NfZGF0YV9kaXJlY3Rpb24sIDAsCiAJCQlzY3NpX3NnbGlzdChzYyksIHNjc2lfc2dfY291bnQoc2MpLAogCQkJc2dsX2JpZGksIHNnbF9iaWRpX2NvdW50LApAQCAtNDMxLDI3ICszNzksMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0Y21fbG9vcF9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZCkKLXsKLQlpZiAoc2QtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2QsIHNkLT5xdWV1ZV9kZXB0aCk7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkLCBNU0dfU0lNUExFX1RBRywKLQkJCQkJc2QtPmhvc3QtPmNtZF9wZXJfbHVuKTsKLQl9IGVsc2UgewotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZCwgMCwKLQkJCQkJc2QtPmhvc3QtPmNtZF9wZXJfbHVuKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgdGNtX2xvb3BfZHJpdmVyX3RlbXBsYXRlID0gewogCS5zaG93X2luZm8JCT0gdGNtX2xvb3Bfc2hvd19pbmZvLAogCS5wcm9jX25hbWUJCT0gInRjbV9sb29wYmFjayIsCiAJLm5hbWUJCQk9ICJUQ01fTG9vcGJhY2siLAogCS5xdWV1ZWNvbW1hbmQJCT0gdGNtX2xvb3BfcXVldWVjb21tYW5kLAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSB0Y21fbG9vcF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlCT0gdGNtX2xvb3BfY2hhbmdlX3F1ZXVlX3R5cGUsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfdHlwZQk9IHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUsCiAJLmVoX2Fib3J0X2hhbmRsZXIgPSB0Y21fbG9vcF9hYm9ydF90YXNrLAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IHRjbV9sb29wX2RldmljZV9yZXNldCwKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIgPSB0Y21fbG9vcF90YXJnZXRfcmVzZXQsCkBAIC00NjIsOCArMzk2LDkgQEAKIAkubWF4X3NlY3RvcnMJCT0gMHhGRkZGLAogCS51c2VfY2x1c3RlcmluZwkJPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLnNsYXZlX2FsbG9jCQk9IHRjbV9sb29wX3NsYXZlX2FsbG9jLAotCS5zbGF2ZV9jb25maWd1cmUJPSB0Y21fbG9vcF9zbGF2ZV9jb25maWd1cmUsCiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCisJLnVzZV9ibGtfdGFncwkJPSAxLAorCS50cmFja19xdWV1ZV9kZXB0aAk9IDEsCiB9OwogCiBzdGF0aWMgaW50IHRjbV9sb29wX2RyaXZlcl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9hbHVhLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9hbHVhLmMKaW5kZXggZmI4Nzc4MC4uNzVjYmRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfYWx1YS5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2FsdWEuYwpAQCAtNTc2LDcgKzU3Niw3IEBACiAJY2FzZSBTRU5EX0RJQUdOT1NUSUM6CiAJY2FzZSBSRUFEX0NBUEFDSVRZOgogCQlyZXR1cm4gMDsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAJCXN3aXRjaCAoY2RiWzFdICYgMHgxZikgewogCQljYXNlIFNBSV9SRUFEX0NBUEFDSVRZXzE2OgogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYwppbmRleCA5ZjkzYjgyLi40YzI2MWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCWNhc2UgQUNDRVNTX0NPTlRST0xfT1VUOgogCWNhc2UgSU5RVUlSWToKIAljYXNlIExPR19TRU5TRToKLQljYXNlIFJFQURfTUVESUFfU0VSSUFMX05VTUJFUjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzEyOgogCWNhc2UgUkVQT1JUX0xVTlM6CiAJY2FzZSBSRVFVRVNUX1NFTlNFOgogCWNhc2UgUEVSU0lTVEVOVF9SRVNFUlZFX0lOOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfc2JjLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zYmMuYwppbmRleCBlYmU2MmFmLi44ZDE3MWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zYmMuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zYmMuYwpAQCAtODUyLDcgKzg1Miw3IEBACiAJCXNpemUgPSBSRUFEX0NBUF9MRU47CiAJCWNtZC0+ZXhlY3V0ZV9jbWQgPSBzYmNfZW11bGF0ZV9yZWFkY2FwYWNpdHk7CiAJCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKIAkJc3dpdGNoIChjbWQtPnRfdGFza19jZGJbMV0gJiAweDFmKSB7CiAJCWNhc2UgU0FJX1JFQURfQ0FQQUNJVFlfMTY6CiAJCQljbWQtPmV4ZWN1dGVfY21kID0gc2JjX2VtdWxhdGVfcmVhZGNhcGFjaXR5XzE2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl90dHkuYyBiL2RyaXZlcnMvdHR5L25fdHR5LmMKaW5kZXggMmU5MDBhOS4uMjZmMDk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl90dHkuYworKysgYi9kcml2ZXJzL3R0eS9uX3R0eS5jCkBAIC0yMTIzLDcgKzIxMjMsNyBAQAogewogCXN0cnVjdCBuX3R0eV9kYXRhICpsZGF0YSA9IHR0eS0+ZGlzY19kYXRhOwogCXVuc2lnbmVkIGNoYXIgX191c2VyICpiID0gYnVmOwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CiAJaW50IGM7CiAJaW50IG1pbmltdW0sIHRpbWU7CiAJc3NpemVfdCByZXR2YWwgPSAwOwpAQCAtMjE4NiwxMCArMjE4Niw2IEBACiAJCQluci0tOwogCQkJYnJlYWs7CiAJCX0KLQkJLyogVGhpcyBzdGF0ZW1lbnQgbXVzdCBiZSBmaXJzdCBiZWZvcmUgY2hlY2tpbmcgZm9yIGlucHV0Ci0JCSAgIHNvIHRoYXQgYW55IGludGVycnVwdCB3aWxsIHNldCB0aGUgc3RhdGUgYmFjayB0bwotCQkgICBUQVNLX1JVTk5JTkcuICovCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKIAkJaWYgKCgobWluaW11bSAtIChiIC0gYnVmKSkgPCBsZGF0YS0+bWluaW11bV90b193YWtlKSAmJgogCQkgICAgKChtaW5pbXVtIC0gKGIgLSBidWYpKSA+PSAxKSkKQEAgLTIyMjAsMTMgKzIyMTYsMTMgQEAKIAkJCQluX3R0eV9zZXRfcm9vbSh0dHkpOwogCQkJCXVwX3JlYWQoJnR0eS0+dGVybWlvc19yd3NlbSk7CiAKLQkJCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJCQl0aW1lb3V0ID0gd2FpdF93b2tlbigmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFLAorCQkJCQkJICAgICB0aW1lb3V0KTsKIAogCQkJCWRvd25fcmVhZCgmdHR5LT50ZXJtaW9zX3J3c2VtKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKIAkJLyogRGVhbCB3aXRoIHBhY2tldCBtb2RlLiAqLwogCQlpZiAocGFja2V0ICYmIGIgPT0gYnVmKSB7CkBAIC0yMjczLDcgKzIyNjksNiBAQAogCiAJbXV0ZXhfdW5sb2NrKCZsZGF0YS0+YXRvbWljX3JlYWRfbG9jayk7CiAKLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJaWYgKGIgLSBidWYpCiAJCXJldHZhbCA9IGIgLSBidWY7CiAKQEAgLTIzMDYsNyArMjMwMSw3IEBACiAJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBucikKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpiID0gYnVmOwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CiAJaW50IGM7CiAJc3NpemVfdCByZXR2YWwgPSAwOwogCkBAIC0yMzI0LDcgKzIzMTksNiBAQAogCiAJYWRkX3dhaXRfcXVldWUoJnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOwogCXdoaWxlICgxKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CkBAIC0yMzc4LDEyICsyMzcyLDExIEBACiAJCX0KIAkJdXBfcmVhZCgmdHR5LT50ZXJtaW9zX3J3c2VtKTsKIAotCQlzY2hlZHVsZSgpOworCQl3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAogCQlkb3duX3JlYWQoJnR0eS0+dGVybWlvc19yd3NlbSk7CiAJfQogYnJlYWtfb3V0OgotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CiAJaWYgKGIgLSBidWYgIT0gbnIgJiYgdHR5LT5mYXN5bmMpCiAJCXNldF9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgJnR0eS0+ZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwppbmRleCA2NDliNzg0Li45OGY4YmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwpAQCAtMjQ5LDE0ICsyNDksMTQgQEAKIAogY29uZmlnIFNFUklBTF9TQU1TVU5HX1VBUlRTXzQKIAlib29sCi0JZGVwZW5kcyBvbiBQTEFUX1NBTVNVTkcKKwlkZXBlbmRzIG9uIFNFUklBTF9TQU1TVU5HCiAJZGVmYXVsdCB5IGlmICEoQ1BVX1MzQzI0MTAgfHwgQ1BVX1MzQzI0MTIgfHwgQ1BVX1MzQzI0NDAgfHwgQ1BVX1MzQzI0NDIpCiAJaGVscAogCSAgSW50ZXJuYWwgbm9kZSBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDQgU2Ftc3VuZyBjb21wYXRpYmxlIFVBUlRzCiAKIGNvbmZpZyBTRVJJQUxfU0FNU1VOR19VQVJUUwogCWludAotCWRlcGVuZHMgb24gUExBVF9TQU1TVU5HCisJZGVwZW5kcyBvbiBTRVJJQUxfU0FNU1VORwogCWRlZmF1bHQgNCBpZiBTRVJJQUxfU0FNU1VOR19VQVJUU180IHx8IENQVV9TM0MyNDE2CiAJZGVmYXVsdCAzCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS90Y21fdXNiX2dhZGdldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS90Y21fdXNiX2dhZGdldC5jCmluZGV4IDZjZGI3YTUuLjAyNGY1ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvdGNtX3VzYl9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3RjbV91c2JfZ2FkZ2V0LmMKQEAgLTkxMiw3ICs5MTIsNyBAQAogCWNhc2UgSU5RVUlSWToKIAljYXNlIE1PREVfU0VOU0U6CiAJY2FzZSBNT0RFX1NFTlNFXzEwOgotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKIAljYXNlIE1BSU5URU5BTkNFX0lOOgogCWNhc2UgUEVSU0lTVEVOVF9SRVNFUlZFX0lOOgogCWNhc2UgU0VDVVJJVFlfUFJPVE9DT0xfSU46CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMKaW5kZXggZTA4ZjY0Ny4uNjZhNjg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYwpAQCAtMTY0LDEwICsxNjQsMTAgQEAKIAkJCSB1bnNpZ25lZCBjaGFyIGFzYywKIAkJCSB1bnNpZ25lZCBjaGFyIGFzY3EpCiB7Ci0JY29uc3QgY2hhciAqd2hhdCwgKmtleXN0cjsKKwljb25zdCBjaGFyICp3aGF0LCAqa2V5c3RyLCAqZm10OwogCiAJa2V5c3RyID0gc2NzaV9zZW5zZV9rZXlfc3RyaW5nKGtleSk7Ci0Jd2hhdCA9IHNjc2lfZXh0ZF9zZW5zZV9mb3JtYXQoYXNjLCBhc2NxKTsKKwl3aGF0ID0gc2NzaV9leHRkX3NlbnNlX2Zvcm1hdChhc2MsIGFzY3EsICZmbXQpOwogCiAJaWYgKGtleXN0ciA9PSBOVUxMKQogCQlrZXlzdHIgPSAiKFVua25vd24gS2V5KSI7CkBAIC0xNzUsOCArMTc1LDEwIEBACiAJCXdoYXQgPSAiKHVua25vd24gQVNDL0FTQ1EpIjsKIAogCXVzYl9zdG9yX2RiZyh1cywgIiVzOiAiLCBrZXlzdHIpOwotCVVTX0RFQlVHUFgod2hhdCwgYXNjcSk7Ci0JVVNfREVCVUdQWCgiXG4iKTsKKwlpZiAoZm10KQorCQlVU19ERUJVR1BYKCIlcyAoJXMleClcbiIsIHdoYXQsIGZtdCwgYXNjcSk7CisJZWxzZQorCQlVU19ERUJVR1BYKCIlc1xuIiwgd2hhdCk7CiB9CiAKIGludCB1c2Jfc3Rvcl9kYmcoY29uc3Qgc3RydWN0IHVzX2RhdGEgKnVzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jCmluZGV4IDg5YjI0MzQuLjQwNDdlZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiB7CiAJaW50IHRhZzsKIAotCWlmIChibGtfcnFfdGFnZ2VkKGNtbmQtPnJlcXVlc3QpKQorCWlmIChjbW5kLT5mbGFncyAmIFNDTURfVEFHR0VEKQogCQl0YWcgPSBjbW5kLT5yZXF1ZXN0LT50YWcgKyAyOwogCWVsc2UKIAkJdGFnID0gMTsKQEAgLTc5OSw4ICs3OTksNyBAQAogCWlmIChkZXZpbmZvLT5mbGFncyAmIFVTX0ZMX05PX1JFUE9SVF9PUENPREVTKQogCQlzZGV2LT5ub19yZXBvcnRfb3Bjb2RlcyA9IDE7CiAKLQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfT1JERVJFRF9UQUcpOwotCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIGRldmluZm8tPnFkZXB0aCAtIDIpOworCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRldmluZm8tPnFkZXB0aCAtIDIpOwogCXJldHVybiAwOwogfQogCkBAIC04MTcsNyArODE2LDYgQEAKIAkuc2dfdGFibGVzaXplID0gU0dfTk9ORSwKIAkuY21kX3Blcl9sdW4gPSAxLAkvKiB1bnRpbCB3ZSBvdmVycmlkZSBpdCAqLwogCS5za2lwX3NldHRsZV9kZWxheSA9IDEsCi0JLm9yZGVyZWRfdGFnID0gMSwKIAogCS8qCiAJICogVGhlIHVhcyBkcml2ZXJzIGV4cGVjdHMgdGFncyBub3QgdG8gYmUgYmlnZ2VyIHRoYW4gdGhlIG1heGltdW0KQEAgLTgyNSw2ICs4MjMsNyBAQAogCSAqIGFsbG9jYXRvci4KIAkgKi8KIAkuZGlzYWJsZV9ibGtfbXEgPSB0cnVlLAorCS51c2VfYmxrX3RhZ3MgPSAxLAogfTsKIAogI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2ludHJzLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2ludHJzLmMKaW5kZXggNTUzMjEyZi4uZThkNjk1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9pbnRycy5jCisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfaW50cnMuYwpAQCAtNTYwLDcgKzU2MCw3IEBACiAJCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAogCQlnZXRfY2FjaGVkX21zaV9tc2coaXJxLCAmbXNnKTsKLQkJd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCQlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgdmZpb19tc2loYW5kbGVyLCAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggOGQwMzkyNC4uZWZiMDkwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC0xNjgsNyArMTY4LDYgQEAKIGNvbmZpZyBCQUNLTElHSFRfQVRNRUxfTENEQwogCWJvb2wgIkF0bWVsIExDREMgQ29udHJhc3QtYXMtQmFja2xpZ2h0IGNvbnRyb2wiCiAJZGVwZW5kcyBvbiBGQl9BVE1FTAotCWRlZmF1bHQgeSBpZiBNQUNIX0FUOTFTQU05MjYxRUsgfHwgTUFDSF9BVDkxU0FNOUcxMEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSwogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgYSBiYWNrbGlnaHQgY29udHJvbCBpbnRlcm5hbCB0byB0aGUgQXRtZWwgTENEQwogCSAgZHJpdmVyLiAgSWYgdGhlIExDRCAiY29udHJhc3QgY29udHJvbCIgb24geW91ciBib2FyZCBpcyB3aXJlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnIGIvZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnCmluZGV4IGM3YmY2MDYuLmM3OGJmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWcKQEAgLTk5OSwyMyArOTk5LDYgQEAKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFUOTEvQVQzMiBMQ0QgQ29udHJvbGxlci4KIAotY29uZmlnIEZCX0lOVFNSQU0KLQlib29sICJGcmFtZSBCdWZmZXIgaW4gaW50ZXJuYWwgU1JBTSIKLQlkZXBlbmRzIG9uIEZCX0FUTUVMICYmIEFSQ0hfQVQ5MVNBTTkyNjEKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBtYXAgRnJhbWUgQnVmZmVyIGluIGludGVybmFsIFNSQU0uIFNheSBOIGlmIHlvdSB3YW50Ci0JICB0byBsZXQgZnJhbWUgYnVmZmVyIGluIGV4dGVybmFsIFNEUkFNLgotCi1jb25maWcgRkJfQVRNRUxfU1ROCi0JYm9vbCAiVXNlIGEgU1ROIGRpc3BsYXkgd2l0aCBBVDkxL0FUMzIgTENEIENvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBGQl9BVE1FTCAmJiAoTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTlHMTBFSykKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgU1ROIExDRCBkaXNwbGF5IHRvIHRoZSBBVDkxL0FUMzIgTENECi0JICBDb250cm9sbGVyLiBTYXkgTiBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVEZULgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgRkJfTlZJRElBCiAJdHJpc3RhdGUgIm5WaWRpYSBGcmFtZWJ1ZmZlciBTdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2diZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2diZWZiLmMKaW5kZXggNGFhNTZiYS4uNmQ5ZWYzOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvZ2JlZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2diZWZiLmMKQEAgLTU0LDcgKzU0LDggQEAKICNlbmRpZgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4NgotI2RlZmluZSBwZ3Byb3RfZmIoX3Byb3QpICgoX3Byb3QpIHwgX1BBR0VfUENEKQorI2RlZmluZSBwZ3Byb3RfZmIoX3Byb3QpICgoKF9wcm90KSAmIH5fUEFHRV9DQUNIRV9NQVNLKSB8CVwKKwkJCSAgY2FjaGVtb2RlMnByb3R2YWwoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUykpCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvdmVybWlsaW9uL3Zlcm1pbGlvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi92ZXJtaWxpb24vdmVybWlsaW9uLmMKaW5kZXggNWY5MzBhZS4uNmI3MGQ3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi92ZXJtaWxpb24vdmVybWlsaW9uLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi92ZXJtaWxpb24vdmVybWlsaW9uLmMKQEAgLTEwMDMsMTMgKzEwMDMsMTUgQEAKIAlzdHJ1Y3Qgdm1sX2luZm8gKnZpbmZvID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB2bWxfaW5mbywgaW5mbyk7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHByb3Q7CiAKIAlyZXQgPSB2bWxmYl92cmFtX29mZnNldCh2aW5mbywgb2Zmc2V0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX1BDRDsKLQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmPSB+X1BBR0VfUFdUOworCXByb3QgPSBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmIH5fUEFHRV9DQUNIRV9NQVNLOworCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpID0KKwkJcHJvdCB8IGNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpOwogCiAJcmV0dXJuIHZtX2lvbWFwX21lbW9yeSh2bWEsIHZpbmZvLT52cmFtX3N0YXJ0LAogCQkJdmluZm8tPnZyYW1fY29udGlnX3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwppbmRleCA5OTAwZThlLi4wMzMyMWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwpAQCAtNzIsMTEgKzcyLDE4IEBACiBzdGF0aWMgaW50IG9tYXBfaGRxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogc3RhdGljIGludCBvbWFwX2hkcV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9tYXBfaGRxX2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAidGksb21hcDMtMXciIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvbWFwX2hkcV9kdF9pZHMpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2hkcV9kcml2ZXIgPSB7CiAJLnByb2JlID0Jb21hcF9oZHFfcHJvYmUsCiAJLnJlbW92ZSA9CW9tYXBfaGRxX3JlbW92ZSwKIAkuZHJpdmVyID0JewogCQkubmFtZSA9CSJvbWFwX2hkcSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9tYXBfaGRxX2R0X2lkcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IGQwMTA3ZDQuLjA4ZjQxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTE1NCwxNCArMTU0LDE0IEBACiAKIGNvbmZpZyBBVDkxUk05MjAwX1dBVENIRE9HCiAJdHJpc3RhdGUgIkFUOTFSTTkyMDAgd2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKKwlkZXBlbmRzIG9uIFNPQ19BVDkxUk05MjAwCiAJaGVscAogCSAgV2F0Y2hkb2cgdGltZXIgZW1iZWRkZWQgaW50byBBVDkxUk05MjAwIGNoaXBzLiBUaGlzIHdpbGwgcmVib290IHlvdXIKIAkgIHN5c3RlbSB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuCiAKIGNvbmZpZyBBVDkxU0FNOVhfV0FUQ0hET0cKIAl0cmlzdGF0ZSAiQVQ5MVNBTTlYIC8gQVQ5MUNBUDkgd2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVJNOTIwMAorCWRlcGVuZHMgb24gQVJDSF9BVDkxCiAJc2VsZWN0IFdBVENIRE9HX0NPUkUKIAloZWxwCiAJICBXYXRjaGRvZyB0aW1lciBlbWJlZGRlZCBpbnRvIEFUOTFTQU05WCBhbmQgQVQ5MUNBUDkgY2hpcHMuIFRoaXMgd2lsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbl93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb25fd2R0LmMKaW5kZXggMDBkMDc0MS4uOGNiMWZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29yaW9uX3dkdC5jCkBAIC0xMTQsNiArMTE0LDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXJtYWRhMzc1X3dkdF9jbG9ja19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJICAgIHN0cnVjdCBvcmlvbl93YXRjaGRvZyAqZGV2KQoreworCWludCByZXQ7CisKKwlkZXYtPmNsayA9IG9mX2Nsa19nZXRfYnlfbmFtZShwZGV2LT5kZXYub2Zfbm9kZSwgImZpeGVkIik7CisJaWYgKCFJU19FUlIoZGV2LT5jbGspKSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCWNsa19wdXQoZGV2LT5jbGspOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWF0b21pY19pb19tb2RpZnkoZGV2LT5yZWcgKyBUSU1FUl9DVFJMLAorCQkJCVdEVF9BWFBfRklYRURfRU5BQkxFX0JJVCwKKwkJCQlXRFRfQVhQX0ZJWEVEX0VOQUJMRV9CSVQpOworCQlkZXYtPmNsa19yYXRlID0gY2xrX2dldF9yYXRlKGRldi0+Y2xrKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBNYW5kYXRvcnkgZmFsbGJhY2sgZm9yIHByb3BlciBkZXZpY2V0cmVlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwlkZXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihkZXYtPmNsaykpCisJCXJldHVybiBQVFJfRVJSKGRldi0+Y2xrKTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPmNsayk7CisJaWYgKHJldCkgeworCQljbGtfcHV0KGRldi0+Y2xrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhdG9taWNfaW9fbW9kaWZ5KGRldi0+cmVnICsgVElNRVJfQ1RSTCwKKwkJCVdEVF9BMzcwX1JBVElPX01BU0soV0RUX0EzNzBfUkFUSU9fU0hJRlQpLAorCQkJV0RUX0EzNzBfUkFUSU9fTUFTSyhXRFRfQTM3MF9SQVRJT19TSElGVCkpOworCWRldi0+Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZGV2LT5jbGspIC8gV0RUX0EzNzBfUkFUSU87CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhcm1hZGF4cF93ZHRfY2xvY2tfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCSAgIHN0cnVjdCBvcmlvbl93YXRjaGRvZyAqZGV2KQogewpAQCAtMzk0LDcgKzQzNCw3IEBACiAJLnJzdG91dF9tYXNrX2JpdCA9IEJJVCgxMCksCiAJLndkdF9lbmFibGVfYml0ID0gQklUKDgpLAogCS53ZHRfY291bnRlcl9vZmZzZXQgPSAweDM0LAotCS5jbG9ja19pbml0ID0gYXJtYWRhMzcwX3dkdF9jbG9ja19pbml0LAorCS5jbG9ja19pbml0ID0gYXJtYWRhMzc1X3dkdF9jbG9ja19pbml0LAogCS5lbmFibGVkID0gYXJtYWRhMzc1X2VuYWJsZWQsCiAJLnN0YXJ0ID0gYXJtYWRhMzc1X3N0YXJ0LAogCS5zdG9wID0gYXJtYWRhMzc1X3N0b3AsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9lZmkuYyBiL2RyaXZlcnMveGVuL2VmaS5jCmluZGV4IDFmODUwYzkuLmY3NDVkYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2VmaS5jCisrKyBiL2RyaXZlcnMveGVuL2VmaS5jCkBAIC0yOTQsNiArMjk0LDcgQEAKIAkuYWNwaSAgICAgICAgICAgICAgICAgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKIAkuYWNwaTIwICAgICAgICAgICAgICAgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKIAkuc21iaW9zICAgICAgICAgICAgICAgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKKwkuc21iaW9zMyAgICAgICAgICAgICAgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKIAkuc2FsX3N5c3RhYiAgICAgICAgICAgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKIAkuYm9vdF9pbmZvICAgICAgICAgICAgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKIAkuaGNkcCAgICAgICAgICAgICAgICAgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3hlbi1zY3NpYmFjay5jIGIvZHJpdmVycy94ZW4veGVuLXNjc2liYWNrLmMKaW5kZXggM2UzMjE0Ni4uNTA2MTBhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4veGVuLXNjc2liYWNrLmMKKysrIGIvZHJpdmVycy94ZW4veGVuLXNjc2liYWNrLmMKQEAgLTI3NCwxMCArMjc0LDYgQEAKIAkgICAgICAgdHBnLT50cG9ydC0+dHBvcnRfbmFtZSwgcGVuZGluZ19yZXEtPnYycC0+bHVuLAogCSAgICAgICBwZW5kaW5nX3JlcS0+Y21uZFswXSwgc3RhdHVzX2J5dGUoZXJyb3JzKSwgbXNnX2J5dGUoZXJyb3JzKSwKIAkgICAgICAgaG9zdF9ieXRlKGVycm9ycyksIGRyaXZlcl9ieXRlKGVycm9ycykpOwotCi0JaWYgKENIRUNLX0NPTkRJVElPTiAmIHN0YXR1c19ieXRlKGVycm9ycykpCi0JCV9fc2NzaV9wcmludF9zZW5zZSgieGVuLXB2c2NzaSIsIHNlbnNlX2J1ZmZlciwKLQkJCQkgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogfQogCiBzdGF0aWMgdm9pZCBzY3NpYmFja19mYXN0X2ZsdXNoX2FyZWEoc3RydWN0IHZzY3NpYmtfcGVuZCAqcmVxKQpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCAxZDljOWYzLi5iNDhjNDFiIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMjM1LDcgKzIzNSwxMCBAQAogCXNiID0gZ2V0X2FjdGl2ZV9zdXBlcihiZGV2KTsKIAlpZiAoIXNiKQogCQlnb3RvIG91dDsKLQllcnJvciA9IGZyZWV6ZV9zdXBlcihzYik7CisJaWYgKHNiLT5zX29wLT5mcmVlemVfc3VwZXIpCisJCWVycm9yID0gc2ItPnNfb3AtPmZyZWV6ZV9zdXBlcihzYik7CisJZWxzZQorCQllcnJvciA9IGZyZWV6ZV9zdXBlcihzYik7CiAJaWYgKGVycm9yKSB7CiAJCWRlYWN0aXZhdGVfc3VwZXIoc2IpOwogCQliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudC0tOwpAQCAtMjcyLDcgKzI3NSwxMCBAQAogCWlmICghc2IpCiAJCWdvdG8gb3V0OwogCi0JZXJyb3IgPSB0aGF3X3N1cGVyKHNiKTsKKwlpZiAoc2ItPnNfb3AtPnRoYXdfc3VwZXIpCisJCWVycm9yID0gc2ItPnNfb3AtPnRoYXdfc3VwZXIoc2IpOworCWVsc2UKKwkJZXJyb3IgPSB0aGF3X3N1cGVyKHNiKTsKIAlpZiAoZXJyb3IpIHsKIAkJYmRldi0+YmRfZnNmcmVlemVfY291bnQrKzsKIAkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9lZml2YXJmcy9zdXBlci5jIGIvZnMvZWZpdmFyZnMvc3VwZXIuYwppbmRleCAwYTQ4ODg2Li42ZGFkMTE3IDEwMDY0NAotLS0gYS9mcy9lZml2YXJmcy9zdXBlci5jCisrKyBiL2ZzL2VmaXZhcmZzL3N1cGVyLmMKQEAgLTIzNiw2ICsyMzYsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZWZpdmFyZnNfdHlwZSA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAogCS5uYW1lICAgID0gImVmaXZhcmZzIiwKIAkubW91bnQgICA9IGVmaXZhcmZzX21vdW50LAogCS5raWxsX3NiID0gZWZpdmFyZnNfa2lsbF9zYiwKQEAgLTI0NCwxNyArMjQ1LDIzIEBACiBzdGF0aWMgX19pbml0IGludCBlZml2YXJmc19pbml0KHZvaWQpCiB7CiAJaWYgKCFlZmlfZW5hYmxlZChFRklfUlVOVElNRV9TRVJWSUNFUykpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghZWZpdmFyc19rb2JqZWN0KCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZlZml2YXJmc190eXBlKTsKIH0KIAorc3RhdGljIF9fZXhpdCB2b2lkIGVmaXZhcmZzX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmVmaXZhcmZzX3R5cGUpOworfQorCiBNT0RVTEVfQVVUSE9SKCJNYXR0aGV3IEdhcnJldHQsIEplcmVteSBLZXJyIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkVGSSBWYXJpYWJsZSBGaWxlc3lzdGVtIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfRlMoImVmaXZhcmZzIik7CiAKIG1vZHVsZV9pbml0KGVmaXZhcmZzX2luaXQpOworbW9kdWxlX2V4aXQoZWZpdmFyZnNfZXhpdCk7CmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNzMwMmI3NS4uMDFhZWJlMyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtMjc3LDYgKzI3Nyw3IEBACiAJCWdvdG8gZXJyOwogCiAJbW0tPnN0YWNrX3ZtID0gbW0tPnRvdGFsX3ZtID0gMTsKKwlhcmNoX2Jwcm1fbW1faW5pdChtbSwgdm1hKTsKIAl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAlicHJtLT5wID0gdm1hLT52bV9lbmQgLSBzaXplb2Yodm9pZCAqKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZGlyLmMgYi9mcy9nZnMyL2Rpci5jCmluZGV4IDVkNDI2MWZmNS4uYzVhMzRmMCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kaXIuYworKysgYi9mcy9nZnMyL2Rpci5jCkBAIC0zNjUsMjMgKzM2NSwxNyBAQAogCiAJcmV0ID0gZ2ZzMl9kaXJfcmVhZF9kYXRhKGlwLCBoYywgaHNpemUpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWlmIChpc192bWFsbG9jX2FkZHIoaGMpKQotCQkJdmZyZWUoaGMpOwotCQllbHNlCi0JCQlrZnJlZShoYyk7CisJCWt2ZnJlZShoYyk7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQogCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlpZiAoaXAtPmlfaGFzaF9jYWNoZSkgewotCQlpZiAoaXNfdm1hbGxvY19hZGRyKGhjKSkKLQkJCXZmcmVlKGhjKTsKLQkJZWxzZQotCQkJa2ZyZWUoaGMpOwotCX0gZWxzZSB7CisJaWYgKGxpa2VseSghaXAtPmlfaGFzaF9jYWNoZSkpIHsKIAkJaXAtPmlfaGFzaF9jYWNoZSA9IGhjOworCQloYyA9IE5VTEw7CiAJfQogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlrdmZyZWUoaGMpOwogCiAJcmV0dXJuIGlwLT5pX2hhc2hfY2FjaGU7CiB9CkBAIC0zOTYsMTAgKzM5MCw3IEBACiB7CiAJX19iZTY0ICpoYyA9IGlwLT5pX2hhc2hfY2FjaGU7CiAJaXAtPmlfaGFzaF9jYWNoZSA9IE5VTEw7Ci0JaWYgKGlzX3ZtYWxsb2NfYWRkcihoYykpCi0JCXZmcmVlKGhjKTsKLQllbHNlCi0JCWtmcmVlKGhjKTsKKwlrdmZyZWUoaGMpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZnMyX2RpcmVudF9zZW50aW5lbChjb25zdCBzdHJ1Y3QgZ2ZzMl9kaXJlbnQgKmRlbnQpCkBAIC0xMTY4LDEwICsxMTU5LDcgQEAKIAlnZnMyX2Rpbm9kZV9vdXQoZGlwLCBkaWJoLT5iX2RhdGEpOwogCWJyZWxzZShkaWJoKTsKIG91dF9rZnJlZToKLQlpZiAoaXNfdm1hbGxvY19hZGRyKGhjMikpCi0JCXZmcmVlKGhjMik7Ci0JZWxzZQotCQlrZnJlZShoYzIpOworCWt2ZnJlZShoYzIpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTMwMiwxNCArMTI5MCw2IEBACiAJcmV0dXJuIHB0cjsKIH0KIAotc3RhdGljIHZvaWQgZ2ZzMl9mcmVlX3NvcnRfYnVmZmVyKHZvaWQgKnB0cikKLXsKLQlpZiAoaXNfdm1hbGxvY19hZGRyKHB0cikpCi0JCXZmcmVlKHB0cik7Ci0JZWxzZQotCQlrZnJlZShwdHIpOwotfQotCiBzdGF0aWMgaW50IGdmczJfZGlyX3JlYWRfbGVhZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwKIAkJCSAgICAgIGludCAqY29waWVkLCB1bnNpZ25lZCAqZGVwdGgsCiAJCQkgICAgICB1NjQgbGVhZl9ubykKQEAgLTEzOTMsNyArMTM3Myw3IEBACiBvdXRfZnJlZToKIAlmb3IoaSA9IDA7IGkgPCBsZWFmOyBpKyspCiAJCWJyZWxzZShsYXJyW2ldKTsKLQlnZnMyX2ZyZWVfc29ydF9idWZmZXIobGFycik7CisJa3ZmcmVlKGxhcnIpOwogb3V0OgogCXJldHVybiBlcnJvcjsKIH0KQEAgLTIwMDQsMTAgKzE5ODQsNyBAQAogCWdmczJfcmxpc3RfZnJlZSgmcmxpc3QpOwogCWdmczJfcXVvdGFfdW5ob2xkKGRpcCk7CiBvdXQ6Ci0JaWYgKGlzX3ZtYWxsb2NfYWRkcihodCkpCi0JCXZmcmVlKGh0KTsKLQllbHNlCi0JCWtmcmVlKGh0KTsKKwlrdmZyZWUoaHQpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9maWxlLmMgYi9mcy9nZnMyL2ZpbGUuYwppbmRleCA4MGRkNDRkLi42ZTYwMGFiIDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtMzM3LDcgKzMzNyw4IEBACiAJc2l6ZV90IGJsa3MgPSAoc2l6ZSArIHNkcC0+c2Rfc2Iuc2JfYnNpemUgLSAxKSA+PiBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0OwogCWludCBoaW50ID0gbWluX3Qoc2l6ZV90LCBJTlRfTUFYLCBibGtzKTsKIAotCWF0b21pY19zZXQoJmlwLT5pX3Jlcy0+cnNfc2l6ZWhpbnQsIGhpbnQpOworCWlmIChoaW50ID4gYXRvbWljX3JlYWQoJmlwLT5pX3Jlcy0+cnNfc2l6ZWhpbnQpKQorCQlhdG9taWNfc2V0KCZpcC0+aV9yZXMtPnJzX3NpemVoaW50LCBoaW50KTsKIH0KIAogLyoqCkBAIC03MjgsNyArNzI5LDYgQEAKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKIAlpbnQgZXJyb3I7Ci0JbG9mZl90IHNpemUgPSBsZW47CiAJdW5zaWduZWQgaW50IG5yX2Jsa3M7CiAJc2VjdG9yX3QgbGJsb2NrID0gb2Zmc2V0ID4+IGlub2RlLT5pX2Jsa2JpdHM7CiAKQEAgLTc2MiwxMSArNzYyLDYgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQotCWlmIChvZmZzZXQgKyBzaXplID4gaW5vZGUtPmlfc2l6ZSAmJiAhKG1vZGUgJiBGQUxMT0NfRkxfS0VFUF9TSVpFKSkKLQkJaV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyBzaXplKTsKLQotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCiBvdXQ6CiAJYnJlbHNlKGRpYmgpOwogCXJldHVybiBlcnJvcjsKQEAgLTc5Niw4ICs3OTEsNyBAQAogCX0KIH0KIAotc3RhdGljIGxvbmcgZ2ZzMl9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LAotCQkJICAgbG9mZl90IGxlbikKK3N0YXRpYyBsb25nIF9fZ2ZzMl9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7CkBAIC04MTEsMTQgKzgwNSw5IEBACiAJbG9mZl90IGJzaXplX21hc2sgPSB+KChsb2ZmX3Qpc2RwLT5zZF9zYi5zYl9ic2l6ZSAtIDEpOwogCWxvZmZfdCBuZXh0ID0gKG9mZnNldCArIGxlbiAtIDEpID4+IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQ7CiAJbG9mZl90IG1heF9jaHVua19zaXplID0gVUlOVF9NQVggJiBic2l6ZV9tYXNrOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKIAogCW5leHQgPSAobmV4dCArIDEpIDw8IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQ7CiAKLQkvKiBXZSBvbmx5IHN1cHBvcnQgdGhlIEZBTExPQ19GTF9LRUVQX1NJWkUgbW9kZSAqLwotCWlmIChtb2RlICYgfkZBTExPQ19GTF9LRUVQX1NJWkUpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCW9mZnNldCAmPSBic2l6ZV9tYXNrOwogCiAJbGVuID0gbmV4dCAtIG9mZnNldDsKQEAgLTgyOSwxNyArODE4LDYgQEAKIAlpZiAoYnl0ZXMgPT0gMCkKIAkJYnl0ZXMgPSBzZHAtPnNkX3NiLnNiX2JzaXplOwogCi0JZXJyb3IgPSBnZnMyX3JzX2FsbG9jKGlwKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQotCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmdoKTsKLQllcnJvciA9IGdmczJfZ2xvY2tfbnEoJmdoKTsKLQlpZiAodW5saWtlbHkoZXJyb3IpKQotCQlnb3RvIG91dF91bmluaXQ7Ci0KIAlnZnMyX3NpemVfaGludChmaWxlLCBvZmZzZXQsIGxlbik7CiAKIAl3aGlsZSAobGVuID4gMCkgewpAQCAtODUyLDggKzgzMCw3IEBACiAJCX0KIAkJZXJyb3IgPSBnZnMyX3F1b3RhX2xvY2tfY2hlY2soaXApOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF91bmxvY2s7Ci0KKwkJCXJldHVybiBlcnJvcjsKIHJldHJ5OgogCQlnZnMyX3dyaXRlX2NhbGNfcmVzZXJ2KGlwLCBieXRlcywgJmRhdGFfYmxvY2tzLCAmaW5kX2Jsb2Nrcyk7CiAKQEAgLTg5NSwyMCArODcyLDY0IEBACiAJCWdmczJfcXVvdGFfdW5sb2NrKGlwKTsKIAl9CiAKLQlpZiAoZXJyb3IgPT0gMCkKLQkJZXJyb3IgPSBnZW5lcmljX3dyaXRlX3N5bmMoZmlsZSwgcG9zLCBjb3VudCk7Ci0JZ290byBvdXRfdW5sb2NrOworCWlmICghKG1vZGUgJiBGQUxMT0NfRkxfS0VFUF9TSVpFKSAmJiAocG9zICsgY291bnQpID4gaW5vZGUtPmlfc2l6ZSkgeworCQlpX3NpemVfd3JpdGUoaW5vZGUsIHBvcyArIGNvdW50KTsKKwkJLyogTWFya3MgdGhlIGlub2RlIGFzIGRpcnR5ICovCisJCWZpbGVfdXBkYXRlX3RpbWUoZmlsZSk7CisJfQorCisJcmV0dXJuIGdlbmVyaWNfd3JpdGVfc3luYyhmaWxlLCBwb3MsIGNvdW50KTsKIAogb3V0X3RyYW5zX2ZhaWw6CiAJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UoaXApOwogb3V0X3F1bmxvY2s6CiAJZ2ZzMl9xdW90YV91bmxvY2soaXApOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGxvbmcgZ2ZzMl9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfaG9sZGVyIGdoOworCWludCByZXQ7CisKKwlpZiAobW9kZSAmIH5GQUxMT0NfRkxfS0VFUF9TSVpFKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKKwlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7CisJcmV0ID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VuaW5pdDsKKworCWlmICghKG1vZGUgJiBGQUxMT0NfRkxfS0VFUF9TSVpFKSAmJgorCSAgICAob2Zmc2V0ICsgbGVuKSA+IGlub2RlLT5pX3NpemUpIHsKKwkJcmV0ID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICsgbGVuKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlyZXQgPSBnZXRfd3JpdGVfYWNjZXNzKGlub2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlyZXQgPSBnZnMyX3JzX2FsbG9jKGlwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9wdXR3OworCisJcmV0ID0gX19nZnMyX2ZhbGxvY2F0ZShmaWxlLCBtb2RlLCBvZmZzZXQsIGxlbik7CisJaWYgKHJldCkKKwkJZ2ZzMl9yc19kZWx0cmVlKGlwLT5pX3Jlcyk7CitvdXRfcHV0dzoKKwlwdXRfd3JpdGVfYWNjZXNzKGlub2RlKTsKIG91dF91bmxvY2s6CiAJZ2ZzMl9nbG9ja19kcSgmZ2gpOwogb3V0X3VuaW5pdDoKIAlnZnMyX2hvbGRlcl91bmluaXQoJmdoKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggOGYwYzE5ZC4uYTIzNTI0YSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtODM2LDggKzgzNiw3IEBACiAJZ2gtPmdoX2ZsYWdzID0gZmxhZ3M7CiAJZ2gtPmdoX2lmbGFncyA9IDA7CiAJZ2gtPmdoX2lwID0gX1JFVF9JUF87Ci0JaWYgKGdoLT5naF9vd25lcl9waWQpCi0JCXB1dF9waWQoZ2gtPmdoX293bmVyX3BpZCk7CisJcHV0X3BpZChnaC0+Z2hfb3duZXJfcGlkKTsKIAlnaC0+Z2hfb3duZXJfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChjdXJyZW50KSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvcHMuYyBiL2ZzL2dmczIvZ2xvcHMuYwppbmRleCAxY2MwYmJhLi5mZTkxOTUxIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb3BzLmMKKysrIGIvZnMvZ2ZzMi9nbG9wcy5jCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAidHJhbnMuaCIKICNpbmNsdWRlICJkaXIuaCIKIAorc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmdmczJfZnJlZXplX3dxOworCiBzdGF0aWMgdm9pZCBnZnMyX2FpbF9lcnJvcihzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJZnNfZXJyKGdsLT5nbF9zYmQsICJBSUwgYnVmZmVyICVwOiBibG9ja25yICVsbHUgc3RhdGUgMHglMDhseCBtYXBwaW5nICVwIHBhZ2Ugc3RhdGUgMHglbHhcbiIsCkBAIC05NCwxMSArOTYsOCBAQAogICAgICAgICAgKiBvbiB0aGUgc3RhY2sgKi8KIAl0ci50cl9yZXNlcnZlZCA9IDEgKyBnZnMyX3N0cnVjdDJibGsoc2RwLCB0ci50cl9yZXZva2VzLCBzaXplb2YodTY0KSk7CiAJdHIudHJfaXAgPSBfUkVUX0lQXzsKLQlzYl9zdGFydF9pbnR3cml0ZShzZHAtPnNkX3Zmcyk7Ci0JaWYgKGdmczJfbG9nX3Jlc2VydmUoc2RwLCB0ci50cl9yZXNlcnZlZCkgPCAwKSB7Ci0JCXNiX2VuZF9pbnR3cml0ZShzZHAtPnNkX3Zmcyk7CisJaWYgKGdmczJfbG9nX3Jlc2VydmUoc2RwLCB0ci50cl9yZXNlcnZlZCkgPCAwKQogCQlyZXR1cm47Ci0JfQogCVdBUk5fT05fT05DRShjdXJyZW50LT5qb3VybmFsX2luZm8pOwogCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9ICZ0cjsKIApAQCAtNDY5LDIwICs0NjgsMTkgQEAKIAogc3RhdGljIHZvaWQgZnJlZXplX2dvX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogeworCWludCBlcnJvciA9IDA7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwotCURFRklORV9XQUlUKHdhaXQpOwogCiAJaWYgKGdsLT5nbF9zdGF0ZSA9PSBMTV9TVF9TSEFSRUQgJiYKIAkgICAgdGVzdF9iaXQoU0RGX0pPVVJOQUxfTElWRSwgJnNkcC0+c2RfZmxhZ3MpKSB7Ci0JCWF0b21pY19zZXQoJnNkcC0+c2RfbG9nX2ZyZWV6ZSwgMSk7Ci0JCXdha2VfdXAoJnNkcC0+c2RfbG9nZF93YWl0cSk7Ci0JCWRvIHsKLQkJCXByZXBhcmVfdG9fd2FpdCgmc2RwLT5zZF9sb2dfZnJvemVuX3dhaXQsICZ3YWl0LAotCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX2ZyZWV6ZSkpCi0JCQkJaW9fc2NoZWR1bGUoKTsKLQkJfSB3aGlsZShhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfZnJlZXplKSk7Ci0JCWZpbmlzaF93YWl0KCZzZHAtPnNkX2xvZ19mcm96ZW5fd2FpdCwgJndhaXQpOworCQlhdG9taWNfc2V0KCZzZHAtPnNkX2ZyZWV6ZV9zdGF0ZSwgU0ZTX1NUQVJUSU5HX0ZSRUVaRSk7CisJCWVycm9yID0gZnJlZXplX3N1cGVyKHNkcC0+c2RfdmZzKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBjb3VsZG4ndCBmcmVlemUgZmlsZXN5c3RlbTogJWRcbiIsIGVycm9yKTsKKwkJCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgMCk7CisJCX0KKwkJcXVldWVfd29yayhnZnMyX2ZyZWV6ZV93cSwgJnNkcC0+c2RfZnJlZXplX3dvcmspOworCQlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwsIEZSRUVaRV9GTFVTSCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb3BzLmggYi9mcy9nZnMyL2dsb3BzLmgKaW5kZXggNzQ1NWQyNi4uOGVkMTg1NyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9wcy5oCisrKyBiL2ZzL2dmczIvZ2xvcHMuaApAQCAtMTIsNiArMTIsOCBAQAogCiAjaW5jbHVkZSAiaW5jb3JlLmgiCiAKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZ2ZzMl9mcmVlemVfd3E7CisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfbWV0YV9nbG9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfaW5vZGVfZ2xvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3JncnBfZ2xvcHM7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2luY29yZS5oIGIvZnMvZ2ZzMi9pbmNvcmUuaAppbmRleCAzOWU3ZTk5Li43YTJkYmJjIDEwMDY0NAotLS0gYS9mcy9nZnMyL2luY29yZS5oCisrKyBiL2ZzL2dmczIvaW5jb3JlLmgKQEAgLTk3LDYgKzk3LDcgQEAKICNkZWZpbmUgR0ZTMl9SREZfQ0hFQ0sJCTB4MTAwMDAwMDAgLyogY2hlY2sgZm9yIHVubGlua2VkIGlub2RlcyAqLwogI2RlZmluZSBHRlMyX1JERl9VUFRPREFURQkweDIwMDAwMDAwIC8qIHJnIGlzIHVwIHRvIGRhdGUgKi8KICNkZWZpbmUgR0ZTMl9SREZfRVJST1IJCTB4NDAwMDAwMDAgLyogZXJyb3IgaW4gcmcgKi8KKyNkZWZpbmUgR0ZTMl9SREZfUFJFRkVSUkVECTB4ODAwMDAwMDAgLyogVGhpcyByZ3JwIGlzIHByZWZlcnJlZCAqLwogI2RlZmluZSBHRlMyX1JERl9NQVNLCQkweGYwMDAwMDAwIC8qIG1hc2sgZm9yIGludGVybmFsIGZsYWdzICovCiAJc3BpbmxvY2tfdCByZF9yc3NwaW47ICAgICAgICAgICAvKiBwcm90ZWN0cyByZXNlcnZhdGlvbiByZWxhdGVkIHZhcnMgKi8KIAlzdHJ1Y3QgcmJfcm9vdCByZF9yc3RyZWU7ICAgICAgIC8qIG11bHRpLWJsb2NrIHJlc2VydmF0aW9uIHRyZWUgKi8KQEAgLTU4Nyw2ICs1ODgsMTIgQEAKIAlTREZfU0tJUF9ETE1fVU5MT0NLCT0gOCwKIH07CiAKK2VudW0gZ2ZzMl9mcmVlemVfc3RhdGUgeworCVNGU19VTkZST1pFTgkJPSAwLAorCVNGU19TVEFSVElOR19GUkVFWkUJPSAxLAorCVNGU19GUk9aRU4JCT0gMiwKK307CisKICNkZWZpbmUgR0ZTMl9GU05BTUVfTEVOCQkyNTYKIAogc3RydWN0IGdmczJfaW51bV9ob3N0IHsKQEAgLTY4NCw2ICs2OTEsNyBAQAogCXN0cnVjdCBnZnMyX2hvbGRlciBzZF9saXZlX2doOwogCXN0cnVjdCBnZnMyX2dsb2NrICpzZF9yZW5hbWVfZ2w7CiAJc3RydWN0IGdmczJfZ2xvY2sgKnNkX2ZyZWV6ZV9nbDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2RfZnJlZXplX3dvcms7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgc2RfZ2xvY2tfd2FpdDsKIAlhdG9taWNfdCBzZF9nbG9ja19kaXNwb3NhbDsKIAlzdHJ1Y3QgY29tcGxldGlvbiBzZF9sb2NraW5nX2luaXQ7CkBAIC03ODgsNiArNzk2LDkgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBzZF9sb2dfZmx1c2hfd2FpdDsKIAlpbnQgc2RfbG9nX2Vycm9yOwogCisJYXRvbWljX3Qgc2RfcmVzZXJ2aW5nX2xvZzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBzZF9yZXNlcnZpbmdfbG9nX3dhaXQ7CisKIAl1bnNpZ25lZCBpbnQgc2RfbG9nX2ZsdXNoX2hlYWQ7CiAJdTY0IHNkX2xvZ19mbHVzaF93cmFwcGVkOwogCkBAIC03OTcsMTIgKzgwOCw4IEBACiAKIAkvKiBGb3IgcXVpZXNjaW5nIHRoZSBmaWxlc3lzdGVtICovCiAJc3RydWN0IGdmczJfaG9sZGVyIHNkX2ZyZWV6ZV9naDsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgc2RfZnJlZXplX3Jvb3RfZ2g7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIHNkX3RoYXdfZ2g7Ci0JYXRvbWljX3Qgc2RfbG9nX2ZyZWV6ZTsKLQlhdG9taWNfdCBzZF9mcm96ZW5fcm9vdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCBzZF9mcm96ZW5fcm9vdF93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90IHNkX2xvZ19mcm96ZW5fd2FpdDsKKwlhdG9taWNfdCBzZF9mcmVlemVfc3RhdGU7CisJc3RydWN0IG11dGV4IHNkX2ZyZWV6ZV9tdXRleDsKIAogCWNoYXIgc2RfZnNuYW1lW0dGUzJfRlNOQU1FX0xFTl07CiAJY2hhciBzZF90YWJsZV9uYW1lW0dGUzJfRlNOQU1FX0xFTl07CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggYzRlZDgyMy4uOTA1NDAwMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtNTk2LDcgKzU5Niw2IEBACiAJc3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IEdGUzJfSShkaXIpLCAqaXA7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZkaXAtPmlfaW5vZGUpOwogCXN0cnVjdCBnZnMyX2dsb2NrICppb19nbDsKLQlzdHJ1Y3QgZGVudHJ5ICpkOwogCWludCBlcnJvciwgZnJlZV92ZnNfaW5vZGUgPSAwOwogCXUzMiBhZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGJsb2NrcyA9IDE7CkBAIC02MjQsMjIgKzYyMywxOCBAQAogCWlub2RlID0gZ2ZzMl9kaXJfc2VhcmNoKGRpciwgJmRlbnRyeS0+ZF9uYW1lLCAhU19JU1JFRyhtb2RlKSB8fCBleGNsKTsKIAllcnJvciA9IFBUUl9FUlIoaW5vZGUpOwogCWlmICghSVNfRVJSKGlub2RlKSkgewotCQlkID0gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7Ci0JCWVycm9yID0gUFRSX0VSUihkKTsKLQkJaWYgKElTX0VSUihkKSkgewotCQkJaW5vZGUgPSBFUlJfQ0FTVChkKTsKKwkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJCWlwdXQoaW5vZGUpOworCQkJaW5vZGUgPSBFUlJfUFRSKC1FSVNESVIpOwogCQkJZ290byBmYWlsX2d1bmxvY2s7CiAJCX0KKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAkJZXJyb3IgPSAwOwogCQlpZiAoZmlsZSkgewotCQkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCQlXQVJOX09OKGQgIT0gTlVMTCk7CisJCQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJCQllcnJvciA9IGZpbmlzaF9vcGVuKGZpbGUsIGRlbnRyeSwgZ2ZzMl9vcGVuX2NvbW1vbiwgb3BlbmVkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZXJyb3IgPSBmaW5pc2hfbm9fb3BlbihmaWxlLCBkKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWRwdXQoZCk7CisJCQllbHNlCisJCQkJZXJyb3IgPSBmaW5pc2hfbm9fb3BlbihmaWxlLCBOVUxMKTsKIAkJfQogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdChnaHMpOwogCQlyZXR1cm4gZXJyb3I7CkBAIC0xMDQ1LDExICsxMDQwLDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gZ2ZzMl9kaXJfY2hlY2soJmRpcC0+aV9pbm9kZSwgbmFtZSwgaXApOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGdmczJfZGlyX2NoZWNrKCZkaXAtPmlfaW5vZGUsIG5hbWUsIGlwKTsKIH0KIAogLyoqCkBAIC0xMjU0LDExICsxMjQ1LDggQEAKIAlpZiAoZCAhPSBOVUxMKQogCQlkZW50cnkgPSBkOwogCWlmIChkZW50cnktPmRfaW5vZGUpIHsKLQkJaWYgKCEoKm9wZW5lZCAmIEZJTEVfT1BFTkVEKSkgewotCQkJaWYgKGQgPT0gTlVMTCkKLQkJCQlkZ2V0KGRlbnRyeSk7Ci0JCQlyZXR1cm4gZmluaXNoX25vX29wZW4oZmlsZSwgZGVudHJ5KTsKLQkJfQorCQlpZiAoISgqb3BlbmVkICYgRklMRV9PUEVORUQpKQorCQkJcmV0dXJuIGZpbmlzaF9ub19vcGVuKGZpbGUsIGQpOwogCQlkcHV0KGQpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNjIyLDI2ICsxNjEwLDE4IEBACiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwOwogCXN0cnVjdCBnZnMyX2hvbGRlciBpX2doOwotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7CiAJaW50IGVycm9yOwogCWludCB1bmxvY2sgPSAwOwotCWludCBmcm96ZW5fcm9vdCA9IDA7CiAKIAogCWlwID0gR0ZTMl9JKGlub2RlKTsKIAlpZiAoZ2ZzMl9nbG9ja19pc19sb2NrZWRfYnlfbWUoaXAtPmlfZ2wpID09IE5VTEwpIHsKLQkJaWYgKHVubGlrZWx5KGdmczJfZ2xvY2tfaXNfaGVsZF9leGNsKHNkcC0+c2RfZnJlZXplX2dsKSAmJgotCQkJICAgICBpbm9kZSA9PSBzZHAtPnNkX3Jvb3RfZGlyLT5kX2lub2RlICYmCi0JCQkgICAgIGF0b21pY19pbmNfbm90X3plcm8oJnNkcC0+c2RfZnJvemVuX3Jvb3QpKSkKLQkJCWZyb3plbl9yb290ID0gMTsKLQkJZWxzZSB7Ci0JCQlpZiAobWFzayAmIE1BWV9OT1RfQkxPQ0spCi0JCQkJcmV0dXJuIC1FQ0hJTEQ7Ci0JCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmlfZ2gpOwotCQkJaWYgKGVycm9yKQotCQkJCXJldHVybiBlcnJvcjsKLQkJCXVubG9jayA9IDE7Ci0JCX0KKwkJaWYgKG1hc2sgJiBNQVlfTk9UX0JMT0NLKQorCQkJcmV0dXJuIC1FQ0hJTEQ7CisJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmaV9naCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwkJdW5sb2NrID0gMTsKIAl9CiAKIAlpZiAoKG1hc2sgJiBNQVlfV1JJVEUpICYmIElTX0lNTVVUQUJMRShpbm9kZSkpCkBAIC0xNjUwLDggKzE2MzAsNiBAQAogCQllcnJvciA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiAJaWYgKHVubG9jaykKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOwotCWVsc2UgaWYgKGZyb3plbl9yb290ICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJnNkcC0+c2RfZnJvemVuX3Jvb3QpKQotCQl3YWtlX3VwKCZzZHAtPnNkX2Zyb3plbl9yb290X3dhaXQpOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTgyNCwyOSArMTgwMiwxOSBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGlub2RlKTsKIAlpbnQgZXJyb3I7CiAJaW50IHVubG9jayA9IDA7Ci0JaW50IGZyb3plbl9yb290ID0gMDsKIAogCWlmIChnZnMyX2dsb2NrX2lzX2xvY2tlZF9ieV9tZShpcC0+aV9nbCkgPT0gTlVMTCkgewotCQlpZiAodW5saWtlbHkoZ2ZzMl9nbG9ja19pc19oZWxkX2V4Y2woc2RwLT5zZF9mcmVlemVfZ2wpICYmCi0JCQkgICAgIGlub2RlID09IHNkcC0+c2Rfcm9vdF9kaXItPmRfaW5vZGUgJiYKLQkJCSAgICAgYXRvbWljX2luY19ub3RfemVybygmc2RwLT5zZF9mcm96ZW5fcm9vdCkpKQotCQkJZnJvemVuX3Jvb3QgPSAxOwotCQllbHNlIHsKLQkJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmZ2gpOwotCQkJaWYgKGVycm9yKQotCQkJCXJldHVybiBlcnJvcjsKLQkJCXVubG9jayA9IDE7Ci0JCX0KKwkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZnaCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwkJdW5sb2NrID0gMTsKIAl9CiAKIAlnZW5lcmljX2ZpbGxhdHRyKGlub2RlLCBzdGF0KTsKIAlpZiAodW5sb2NrKQogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2gpOwotCWVsc2UgaWYgKGZyb3plbl9yb290ICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJnNkcC0+c2RfZnJvemVuX3Jvb3QpKQotCQl3YWtlX3VwKCZzZHAtPnNkX2Zyb3plbl9yb290X3dhaXQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvZy5jIGIvZnMvZ2ZzMi9sb2cuYwppbmRleCAzOTY2ZmFkLi41MzZlN2E2IDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvZy5jCisrKyBiL2ZzL2dmczIvbG9nLmMKQEAgLTMzOSw2ICszMzksNyBAQAogCiBpbnQgZ2ZzMl9sb2dfcmVzZXJ2ZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGJsa3MpCiB7CisJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgcmVzZXJ2ZWRfYmxrcyA9IDcgKiAoNDA5NiAvIHNkcC0+c2RfdmZzLT5zX2Jsb2Nrc2l6ZSk7CiAJdW5zaWduZWQgd2FudGVkID0gYmxrcyArIHJlc2VydmVkX2Jsa3M7CiAJREVGSU5FX1dBSVQod2FpdCk7CkBAIC0zNjIsOSArMzYzLDEzIEBACiAJCX0gd2hpbGUoZnJlZV9ibG9ja3MgPD0gd2FudGVkKTsKIAkJZmluaXNoX3dhaXQoJnNkcC0+c2RfbG9nX3dhaXRxLCAmd2FpdCk7CiAJfQorCWF0b21pY19pbmMoJnNkcC0+c2RfcmVzZXJ2aW5nX2xvZyk7CiAJaWYgKGF0b21pY19jbXB4Y2hnKCZzZHAtPnNkX2xvZ19ibGtzX2ZyZWUsIGZyZWVfYmxvY2tzLAotCQkJCWZyZWVfYmxvY2tzIC0gYmxrcykgIT0gZnJlZV9ibG9ja3MpCisJCQkJZnJlZV9ibG9ja3MgLSBibGtzKSAhPSBmcmVlX2Jsb2NrcykgeworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2RwLT5zZF9yZXNlcnZpbmdfbG9nKSkKKwkJCXdha2VfdXAoJnNkcC0+c2RfcmVzZXJ2aW5nX2xvZ193YWl0KTsKIAkJZ290byByZXRyeTsKKwl9CiAJdHJhY2VfZ2ZzMl9sb2dfYmxvY2tzKHNkcCwgLWJsa3MpOwogCiAJLyoKQEAgLTM3Nyw5ICszODIsMTEgQEAKIAlkb3duX3JlYWQoJnNkcC0+c2RfbG9nX2ZsdXNoX2xvY2spOwogCWlmICh1bmxpa2VseSghdGVzdF9iaXQoU0RGX0pPVVJOQUxfTElWRSwgJnNkcC0+c2RfZmxhZ3MpKSkgewogCQlnZnMyX2xvZ19yZWxlYXNlKHNkcCwgYmxrcyk7Ci0JCXJldHVybiAtRVJPRlM7CisJCXJldCA9IC1FUk9GUzsKIAl9Ci0JcmV0dXJuIDA7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNkcC0+c2RfcmVzZXJ2aW5nX2xvZykpCisJCXdha2VfdXAoJnNkcC0+c2RfcmVzZXJ2aW5nX2xvZ193YWl0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTY1Miw5ICs2NTksMTIgQEAKIAl1MzIgaGFzaDsKIAlpbnQgcncgPSBXUklURV9GTFVTSF9GVUEgfCBSRVFfTUVUQTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1lbXBvb2xfYWxsb2MoZ2ZzMl9wYWdlX3Bvb2wsIEdGUF9OT0lPKTsKKwllbnVtIGdmczJfZnJlZXplX3N0YXRlIHN0YXRlID0gYXRvbWljX3JlYWQoJnNkcC0+c2RfZnJlZXplX3N0YXRlKTsKIAlsaCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAljbGVhcl9wYWdlKGxoKTsKIAorCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgKHN0YXRlICE9IFNGU19GUk9aRU4pKTsKKwogCXRhaWwgPSBjdXJyZW50X3RhaWwoc2RwKTsKIAogCWxoLT5saF9oZWFkZXIubWhfbWFnaWMgPSBjcHVfdG9fYmUzMihHRlMyX01BR0lDKTsKQEAgLTY5NSw2ICs3MDUsNyBAQAogCQkgICAgZW51bSBnZnMyX2ZsdXNoX3R5cGUgdHlwZSkKIHsKIAlzdHJ1Y3QgZ2ZzMl90cmFucyAqdHI7CisJZW51bSBnZnMyX2ZyZWV6ZV9zdGF0ZSBzdGF0ZSA9IGF0b21pY19yZWFkKCZzZHAtPnNkX2ZyZWV6ZV9zdGF0ZSk7CiAKIAlkb3duX3dyaXRlKCZzZHAtPnNkX2xvZ19mbHVzaF9sb2NrKTsKIApAQCAtNzEzLDggKzcyNCwxMiBAQAogCQlJTklUX0xJU1RfSEVBRCgmdHItPnRyX2FpbDFfbGlzdCk7CiAJCUlOSVRfTElTVF9IRUFEKCZ0ci0+dHJfYWlsMl9saXN0KTsKIAkJdHItPnRyX2ZpcnN0ID0gc2RwLT5zZF9sb2dfZmx1c2hfaGVhZDsKKwkJaWYgKHVubGlrZWx5IChzdGF0ZSA9PSBTRlNfRlJPWkVOKSkKKwkJCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIXRyLT50cl9udW1fYnVmX25ldyAmJiAhdHItPnRyX251bV9kYXRhYnVmX25ldyk7CiAJfQogCisJaWYgKHVubGlrZWx5KHN0YXRlID09IFNGU19GUk9aRU4pKQorCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFzZHAtPnNkX2xvZ19udW1fcmV2b2tlKTsKIAlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsCiAJCQlzZHAtPnNkX2xvZ19udW1fcmV2b2tlID09IHNkcC0+c2RfbG9nX2NvbW1pdGVkX3Jldm9rZSk7CiAKQEAgLTc0NSw4ICs3NjAsNiBAQAogCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKIAlnZnMyX2xvZ191bmxvY2soc2RwKTsKIAotCWlmIChhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfZnJlZXplKSkKLQkJdHlwZSA9IEZSRUVaRV9GTFVTSDsKIAlpZiAodHlwZSAhPSBOT1JNQUxfRkxVU0gpIHsKIAkJaWYgKCFzZHAtPnNkX2xvZ19pZGxlKSB7CiAJCQlmb3IgKDs7KSB7CkBAIC03NjMsMjEgKzc3Niw4IEBACiAJCX0KIAkJaWYgKHR5cGUgPT0gU0hVVERPV05fRkxVU0ggfHwgdHlwZSA9PSBGUkVFWkVfRkxVU0gpCiAJCQlnZnMyX2xvZ19zaHV0ZG93bihzZHApOwotCQlpZiAodHlwZSA9PSBGUkVFWkVfRkxVU0gpIHsKLQkJCWludCBlcnJvcjsKLQotCQkJYXRvbWljX3NldCgmc2RwLT5zZF9sb2dfZnJlZXplLCAwKTsKLQkJCXdha2VfdXAoJnNkcC0+c2RfbG9nX2Zyb3plbl93YWl0KTsKLQkJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHNkcC0+c2RfZnJlZXplX2dsLAotCQkJCQkJICAgTE1fU1RfU0hBUkVELCAwLAotCQkJCQkJICAgJnNkcC0+c2RfdGhhd19naCk7Ci0JCQlpZiAoZXJyb3IpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBjb3Vsbid0IGdldCBmcmVlemUgbG9jayA6ICVkXG4iLCBlcnJvcik7Ci0JCQkJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAwKTsKLQkJCX0KLQkJCWVsc2UKLQkJCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmc2RwLT5zZF90aGF3X2doKTsKLQkJfQorCQlpZiAodHlwZSA9PSBGUkVFWkVfRkxVU0gpCisJCQlhdG9taWNfc2V0KCZzZHAtPnNkX2ZyZWV6ZV9zdGF0ZSwgU0ZTX0ZST1pFTik7CiAJfQogCiAJdHJhY2VfZ2ZzMl9sb2dfZmx1c2goc2RwLCAwKTsKQEAgLTg4OCw3ICs4ODgsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBnZnMyX2pybmxfZmx1c2hfcmVxZChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKLQlyZXR1cm4gKGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ19waW5uZWQpID49IGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ190aHJlc2gxKSB8fCBhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfZnJlZXplKSk7CisJcmV0dXJuIChhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfcGlubmVkKSA+PSBhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfdGhyZXNoMSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZnMyX2FpbF9mbHVzaF9yZXFkKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCA4MmI2YWM4Li4yNDFhMzk5IDEwMDY0NAotLS0gYS9mcy9nZnMyL21haW4uYworKysgYi9mcy9nZnMyL21haW4uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgInF1b3RhLmgiCiAjaW5jbHVkZSAicmVjb3ZlcnkuaCIKICNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJnbG9wcy5oIgogCiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZ2ZzMl9jb250cm9sX3dxOwogCkBAIC0xNjEsOSArMTYyLDE0IEBACiAJaWYgKCFnZnMyX2NvbnRyb2xfd3EpCiAJCWdvdG8gZmFpbF9yZWNvdmVyeTsKIAorCWdmczJfZnJlZXplX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJmcmVlemVfd29ya3F1ZXVlIiwgMCwgMCk7CisKKwlpZiAoIWdmczJfZnJlZXplX3dxKQorCQlnb3RvIGZhaWxfY29udHJvbDsKKwogCWdmczJfcGFnZV9wb29sID0gbWVtcG9vbF9jcmVhdGVfcGFnZV9wb29sKDY0LCAwKTsKIAlpZiAoIWdmczJfcGFnZV9wb29sKQotCQlnb3RvIGZhaWxfY29udHJvbDsKKwkJZ290byBmYWlsX2ZyZWV6ZTsKIAogCWdmczJfcmVnaXN0ZXJfZGVidWdmcygpOwogCkBAIC0xNzEsNiArMTc3LDggQEAKIAogCXJldHVybiAwOwogCitmYWlsX2ZyZWV6ZToKKwlkZXN0cm95X3dvcmtxdWV1ZShnZnMyX2ZyZWV6ZV93cSk7CiBmYWlsX2NvbnRyb2w6CiAJZGVzdHJveV93b3JrcXVldWUoZ2ZzMl9jb250cm9sX3dxKTsKIGZhaWxfcmVjb3Zlcnk6CkBAIC0yMjQsNiArMjMyLDcgQEAKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmdmczJtZXRhX2ZzX3R5cGUpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGdmc19yZWNvdmVyeV93cSk7CiAJZGVzdHJveV93b3JrcXVldWUoZ2ZzMl9jb250cm9sX3dxKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShnZnMyX2ZyZWV6ZV93cSk7CiAJbGlzdF9scnVfZGVzdHJveSgmZ2ZzMl9xZF9scnUpOwogCiAJcmN1X2JhcnJpZXIoKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggZDNlYWUyNC4uYjU4MDNhYyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTEyOSwxMSArMTI5LDExIEBACiAKIAlpbml0X3J3c2VtKCZzZHAtPnNkX2xvZ19mbHVzaF9sb2NrKTsKIAlhdG9taWNfc2V0KCZzZHAtPnNkX2xvZ19pbl9mbGlnaHQsIDApOworCWF0b21pY19zZXQoJnNkcC0+c2RfcmVzZXJ2aW5nX2xvZywgMCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2RwLT5zZF9yZXNlcnZpbmdfbG9nX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNkcC0+c2RfbG9nX2ZsdXNoX3dhaXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNkcC0+c2RfbG9nX2Zyb3plbl93YWl0KTsKLQlhdG9taWNfc2V0KCZzZHAtPnNkX2xvZ19mcmVlemUsIDApOwotCWF0b21pY19zZXQoJnNkcC0+c2RfZnJvemVuX3Jvb3QsIDApOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNkcC0+c2RfZnJvemVuX3Jvb3Rfd2FpdCk7CisJYXRvbWljX3NldCgmc2RwLT5zZF9mcmVlemVfc3RhdGUsIFNGU19VTkZST1pFTik7CisJbXV0ZXhfaW5pdCgmc2RwLT5zZF9mcmVlemVfbXV0ZXgpOwogCiAJcmV0dXJuIHNkcDsKIH0KQEAgLTc2MCwxNSArNzYwLDcgQEAKIAlzZXRfYml0KFNERl9KT1VSTkFMX0NIRUNLRUQsICZzZHAtPnNkX2ZsYWdzKTsKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmamlfZ2gpOwogCWppbmRleCA9IDA7Ci0JaWYgKCFzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKSB7Ci0JCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHNkcC0+c2RfZnJlZXplX2dsLCBMTV9TVF9TSEFSRUQsIDAsCi0JCQkJCSAgICZzZHAtPnNkX3RoYXdfZ2gpOwotCQlpZiAoZXJyb3IpIHsKLQkJCWZzX2VycihzZHAsICJjYW4ndCBhY3F1aXJlIGZyZWV6ZSBnbG9jazogJWRcbiIsIGVycm9yKTsKLQkJCWdvdG8gZmFpbF9qaW5vZGVfZ2g7Ci0JCX0KLQl9Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2RfdGhhd19naCk7CisJSU5JVF9XT1JLKCZzZHAtPnNkX2ZyZWV6ZV93b3JrLCBnZnMyX2ZyZWV6ZV9mdW5jKTsKIAlyZXR1cm4gMDsKIAogZmFpbF9qaW5vZGVfZ2g6CmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmMgYi9mcy9nZnMyL3F1b3RhLmMKaW5kZXggNjRiMjlmNy4uYzhiMTQ4YiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5jCisrKyBiL2ZzL2dmczIvcXVvdGEuYwpAQCAtMTM2MCwxMyArMTM2MCw4IEBACiAKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIWF0b21pY19yZWFkKCZzZHAtPnNkX3F1b3RhX2NvdW50KSk7CiAKLQlpZiAoc2RwLT5zZF9xdW90YV9iaXRtYXApIHsKLQkJaWYgKGlzX3ZtYWxsb2NfYWRkcihzZHAtPnNkX3F1b3RhX2JpdG1hcCkpCi0JCQl2ZnJlZShzZHAtPnNkX3F1b3RhX2JpdG1hcCk7Ci0JCWVsc2UKLQkJCWtmcmVlKHNkcC0+c2RfcXVvdGFfYml0bWFwKTsKLQkJc2RwLT5zZF9xdW90YV9iaXRtYXAgPSBOVUxMOwotCX0KKwlrdmZyZWUoc2RwLT5zZF9xdW90YV9iaXRtYXApOworCXNkcC0+c2RfcXVvdGFfYml0bWFwID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgcXVvdGFkX2Vycm9yKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICptc2csIGludCBlcnJvcikKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5jIGIvZnMvZ2ZzMi9yZ3JwLmMKaW5kZXggNzQ3NGM0MS4uOTE1MDIwNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmMKKysrIGIvZnMvZ2ZzMi9yZ3JwLmMKQEAgLTkzNiw3ICs5MzYsNyBAQAogCXJnZC0+cmRfZ2wtPmdsX3ZtLnN0YXJ0ID0gcmdkLT5yZF9hZGRyICogYnNpemU7CiAJcmdkLT5yZF9nbC0+Z2xfdm0uZW5kID0gcmdkLT5yZF9nbC0+Z2xfdm0uc3RhcnQgKyAocmdkLT5yZF9sZW5ndGggKiBic2l6ZSkgLSAxOwogCXJnZC0+cmRfcmdsID0gKHN0cnVjdCBnZnMyX3JncnBfbHZiICopcmdkLT5yZF9nbC0+Z2xfbGtzYi5zYl9sdmJwdHI7Ci0JcmdkLT5yZF9mbGFncyAmPSB+R0ZTMl9SREZfVVBUT0RBVEU7CisJcmdkLT5yZF9mbGFncyAmPSB+KEdGUzJfUkRGX1VQVE9EQVRFIHwgR0ZTMl9SREZfUFJFRkVSUkVEKTsKIAlpZiAocmdkLT5yZF9kYXRhID4gc2RwLT5zZF9tYXhfcmdfZGF0YSkKIAkJc2RwLT5zZF9tYXhfcmdfZGF0YSA9IHJnZC0+cmRfZGF0YTsKIAlzcGluX2xvY2soJnNkcC0+c2RfcmluZGV4X3NwaW4pOwpAQCAtOTU1LDYgKzk1NSwzNiBAQAogfQogCiAvKioKKyAqIHNldF9yZ3JwX3ByZWZlcmVuY2VzIC0gUnVuIGFsbCB0aGUgcmdycHMsIHNlbGVjdGluZyBzb21lIHdlIHByZWZlciB0byB1c2UKKyAqIEBzZHA6IHRoZSBHRlMyIHN1cGVyYmxvY2sKKyAqCisgKiBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHNlbGVjdCBhIHN1YnNldCBvZiB0aGUgcmVzb3VyY2UgZ3JvdXBzCisgKiBhbmQgbWFyayB0aGVtIGFzIFBSRUZFUlJFRC4gV2UgZG8gaXQgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2ggbm9kZSBwcmVmZXJzCisgKiB0byB1c2UgYSB1bmlxdWUgc2V0IG9mIHJncnBzIHRvIG1pbmltaXplIGdsb2NrIGNvbnRlbnRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHNldF9yZ3JwX3ByZWZlcmVuY2VzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoreworCXN0cnVjdCBnZnMyX3JncnBkICpyZ2QsICpmaXJzdDsKKwlpbnQgaTsKKworCS8qIFNraXAgYW4gaW5pdGlhbCBudW1iZXIgb2YgcmdycHMsIGJhc2VkIG9uIHRoaXMgbm9kZSdzIGpvdXJuYWwgSUQuCisJICAgVGhhdCBzaG91bGQgc3RhcnQgZWFjaCBub2RlIG91dCBvbiBpdHMgb3duIHNldC4gKi8KKwlyZ2QgPSBnZnMyX3JncnBkX2dldF9maXJzdChzZHApOworCWZvciAoaSA9IDA7IGkgPCBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkOyBpKyspCisJCXJnZCA9IGdmczJfcmdycGRfZ2V0X25leHQocmdkKTsKKwlmaXJzdCA9IHJnZDsKKworCWRvIHsKKwkJcmdkLT5yZF9mbGFncyB8PSBHRlMyX1JERl9QUkVGRVJSRUQ7CisJCWZvciAoaSA9IDA7IGkgPCBzZHAtPnNkX2pvdXJuYWxzOyBpKyspIHsKKwkJCXJnZCA9IGdmczJfcmdycGRfZ2V0X25leHQocmdkKTsKKwkJCWlmIChyZ2QgPT0gZmlyc3QpCisJCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChyZ2QgIT0gZmlyc3QpOworfQorCisvKioKICAqIGdmczJfcmlfdXBkYXRlIC0gUHVsbCBpbiBhIG5ldyByZXNvdXJjZSBpbmRleCBmcm9tIHRoZSBkaXNrCiAgKiBAaXA6IHBvaW50ZXIgdG8gdGhlIHJpbmRleCBpbm9kZQogICoKQEAgLTk3Myw2ICsxMDAzLDggQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKKwlzZXRfcmdycF9wcmVmZXJlbmNlcyhzZHApOworCiAJc2RwLT5zZF9yaW5kZXhfdXB0b2RhdGUgPSAxOwogCXJldHVybiAwOwogfQpAQCAtMTg5MSw2ICsxOTIzLDI1IEBACiB9CiAKIC8qKgorICogZmFzdF90b19hY3F1aXJlIC0gZGV0ZXJtaW5lIGlmIGEgcmVzb3VyY2UgZ3JvdXAgd2lsbCBiZSBmYXN0IHRvIGFjcXVpcmUKKyAqCisgKiBJZiB0aGlzIGlzIG9uZSBvZiBvdXIgcHJlZmVycmVkIHJncnBzLCBpdCBzaG91bGQgYmUgcXVpY2tlciB0byBhY3F1aXJlLAorICogYmVjYXVzZSB3ZSB0cmllZCB0byBzZXQgb3Vyc2VsdmVzIHVwIGFzIGRsbSBsb2NrIG1hc3Rlci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZmFzdF90b19hY3F1aXJlKHN0cnVjdCBnZnMyX3JncnBkICpyZ2QpCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gcmdkLT5yZF9nbDsKKworCWlmIChnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQgJiYgbGlzdF9lbXB0eSgmZ2wtPmdsX2hvbGRlcnMpICYmCisJICAgICF0ZXN0X2JpdChHTEZfREVNT1RFX0lOX1BST0dSRVNTLCAmZ2wtPmdsX2ZsYWdzKSAmJgorCSAgICAhdGVzdF9iaXQoR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncykpCisJCXJldHVybiAxOworCWlmIChyZ2QtPnJkX2ZsYWdzICYgR0ZTMl9SREZfUFJFRkVSUkVEKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBnZnMyX2lucGxhY2VfcmVzZXJ2ZSAtIFJlc2VydmUgc3BhY2UgaW4gdGhlIGZpbGVzeXN0ZW0KICAqIEBpcDogdGhlIGlub2RlIHRvIHJlc2VydmUgc3BhY2UgZm9yCiAgKiBAYXA6IHRoZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMKQEAgLTE5MzIsMTAgKzE5ODMsMTUgQEAKIAkJCXJnX2xvY2tlZCA9IDA7CiAJCQlpZiAoc2tpcCAmJiBza2lwLS0pCiAJCQkJZ290byBuZXh0X3JncnA7Ci0JCQlpZiAoIWdmczJfcnNfYWN0aXZlKHJzKSAmJiAobG9vcHMgPCAyKSAmJgotCQkJICAgICBnZnMyX3JncnBfdXNlZF9yZWNlbnRseShycywgMTAwMCkgJiYKLQkJCSAgICAgZ2ZzMl9yZ3JwX2Nvbmdlc3RlZChycy0+cnNfcmJtLnJnZCwgbG9vcHMpKQotCQkJCWdvdG8gbmV4dF9yZ3JwOworCQkJaWYgKCFnZnMyX3JzX2FjdGl2ZShycykpIHsKKwkJCQlpZiAobG9vcHMgPT0gMCAmJgorCQkJCSAgICAhZmFzdF90b19hY3F1aXJlKHJzLT5yc19yYm0ucmdkKSkKKwkJCQkJZ290byBuZXh0X3JncnA7CisJCQkJaWYgKChsb29wcyA8IDIpICYmCisJCQkJICAgIGdmczJfcmdycF91c2VkX3JlY2VudGx5KHJzLCAxMDAwKSAmJgorCQkJCSAgICBnZnMyX3JncnBfY29uZ2VzdGVkKHJzLT5yc19yYm0ucmdkLCBsb29wcykpCisJCQkJCWdvdG8gbmV4dF9yZ3JwOworCQkJfQogCQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQocnMtPnJzX3JibS5yZ2QtPnJkX2dsLAogCQkJCQkJICAgTE1fU1RfRVhDTFVTSVZFLCBmbGFncywKIAkJCQkJCSAgICZycy0+cnNfcmdkX2doKTsKQEAgLTIxOTUsNiArMjI1MSw5IEBACiAJCQl0cmFjZV9nZnMyX3JzKHJzLCBUUkFDRV9SU19DTEFJTSk7CiAJCQlpZiAocnMtPnJzX2ZyZWUgJiYgIXJldCkKIAkJCQlnb3RvIG91dDsKKwkJCS8qIFdlIHVzZWQgdXAgb3VyIGJsb2NrIHJlc2VydmF0aW9uLCBzbyB3ZSBzaG91bGQKKwkJCSAgIHJlc2VydmUgbW9yZSBibG9ja3MgbmV4dCB0aW1lLiAqLworCQkJYXRvbWljX2FkZChSR1JQX1JTUlZfQUREQkxLUywgJnJzLT5yc19zaXplaGludCk7CiAJCX0KIAkJX19yc19kZWx0cmVlKHJzKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9nZnMyL3JncnAuaCBiL2ZzL2dmczIvcmdycC5oCmluZGV4IDVkOGYwODUuLmIxMDRmNGEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmdycC5oCisrKyBiL2ZzL2dmczIvcmdycC5oCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KICNkZWZpbmUgUkdSUF9SU1JWX01JTkJZVEVTIDgKICNkZWZpbmUgUkdSUF9SU1JWX01JTkJMS1MgKCh1MzIpKFJHUlBfUlNSVl9NSU5CWVRFUyAqIEdGUzJfTkJCWSkpCisjZGVmaW5lIFJHUlBfUlNSVl9BRERCTEtTIDY0CiAKIHN0cnVjdCBnZnMyX3JncnBkOwogc3RydWN0IGdmczJfc2JkOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zdXBlci5jIGIvZnMvZ2ZzMi9zdXBlci5jCmluZGV4IGEzNDZmNTYuLjViMzI3ZjggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3VwZXIuYworKysgYi9mcy9nZnMyL3N1cGVyLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTM5OSw3ICs0MDAsNyBAQAogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShzZHAtPnNkX2pkZXNjLT5qZF9pbm9kZSk7CiAJc3RydWN0IGdmczJfZ2xvY2sgKmpfZ2wgPSBpcC0+aV9nbDsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgdGhhd19naDsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZnJlZXplX2doOwogCXN0cnVjdCBnZnMyX2xvZ19oZWFkZXJfaG9zdCBoZWFkOwogCWludCBlcnJvcjsKIApAQCAtNDA4LDcgKzQwOSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHNkcC0+c2RfZnJlZXplX2dsLCBMTV9TVF9TSEFSRUQsIDAsCi0JCQkJICAgJnRoYXdfZ2gpOworCQkJCSAgICZmcmVlemVfZ2gpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX3RocmVhZHM7CiAKQEAgLTQzNCwxMyArNDM1LDEzIEBACiAKIAlzZXRfYml0KFNERl9KT1VSTkFMX0xJVkUsICZzZHAtPnNkX2ZsYWdzKTsKIAotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZ0aGF3X2doKTsKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZnJlZXplX2doKTsKIAogCXJldHVybiAwOwogCiBmYWlsOgotCXRoYXdfZ2guZ2hfZmxhZ3MgfD0gR0xfTk9DQUNIRTsKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmdGhhd19naCk7CisJZnJlZXplX2doLmdoX2ZsYWdzIHw9IEdMX05PQ0FDSEU7CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmZyZWV6ZV9naCk7CiBmYWlsX3RocmVhZHM6CiAJa3RocmVhZF9zdG9wKHNkcC0+c2RfcXVvdGFkX3Byb2Nlc3MpOwogCWt0aHJlYWRfc3RvcChzZHAtPnNkX2xvZ2RfcHJvY2Vzcyk7CkBAIC01ODAsMTQgKzU4MSwxNSBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqbV9iaCwgKmxfYmg7CiAJaW50IGVycm9yOwogCisJc2Jfc3RhcnRfd3JpdGUoc2IpOwogCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KG1faXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgR0xfTk9DQUNIRSwKIAkJCQkgICAmZ2gpOwogCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIG91dDsKIAogCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihtX2lwLCAmbV9iaCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJc3Bpbl9sb2NrKCZzZHAtPnNkX3N0YXRmc19zcGluKTsKIAlnZnMyX3N0YXRmc19jaGFuZ2VfaW4obV9zYywgbV9iaC0+Yl9kYXRhICsKQEAgLTYxNSw4ICs2MTcsMTAgQEAKIAlicmVsc2UobF9iaCk7CiBvdXRfYmg6CiAJYnJlbHNlKG1fYmgpOwotb3V0Ogorb3V0X3VubG9jazoKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2gpOworb3V0OgorCXNiX2VuZF93cml0ZShzYik7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC02NDMsMTQgKzY0Nyw4IEBACiAJc3RydWN0IGxmY2MgKmxmY2M7CiAJTElTVF9IRUFEKGxpc3QpOwogCXN0cnVjdCBnZnMyX2xvZ19oZWFkZXJfaG9zdCBsaDsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKHNkcC0+c2Rfcm9vdF9kaXItPmRfaW5vZGUpOwogCWludCBlcnJvcjsKIAotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGRpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCAwLAotCQkJCSAgICZzZHAtPnNkX2ZyZWV6ZV9yb290X2doKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlhdG9taWNfc2V0KCZzZHAtPnNkX2Zyb3plbl9yb290LCAxKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGpkLCAmc2RwLT5zZF9qaW5kZXhfbGlzdCwgamRfbGlzdCkgewogCQlsZmNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxmY2MpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFsZmNjKSB7CkBAIC02OTIsMTEgKzY5MCw2IEBACiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZsZmNjLT5naCk7CiAJCWtmcmVlKGxmY2MpOwogCX0KLQlpZiAoZXJyb3IpIHsKLQkJYXRvbWljX2RlYygmc2RwLT5zZF9mcm96ZW5fcm9vdCk7Ci0JCXdhaXRfZXZlbnQoc2RwLT5zZF9mcm96ZW5fcm9vdF93YWl0LCBhdG9taWNfcmVhZCgmc2RwLT5zZF9mcm96ZW5fcm9vdCkgPT0gMCk7Ci0JCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX2ZyZWV6ZV9yb290X2doKTsKLQl9CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC04MzQsMTggKzgyNywxNCBAQAogCiBzdGF0aWMgaW50IGdmczJfbWFrZV9mc19ybyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgdGhhd19naDsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZnJlZXplX2doOwogCWludCBlcnJvcjsKIAogCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHNkcC0+c2RfZnJlZXplX2dsLCBMTV9TVF9TSEFSRUQsIEdMX05PQ0FDSEUsCi0JCQkJICAgJnRoYXdfZ2gpOworCQkJCSAgICZmcmVlemVfZ2gpOwogCWlmIChlcnJvciAmJiAhdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpCiAJCXJldHVybiBlcnJvcjsKIAotCWRvd25fd3JpdGUoJnNkcC0+c2RfbG9nX2ZsdXNoX2xvY2spOwotCWNsZWFyX2JpdChTREZfSk9VUk5BTF9MSVZFLCAmc2RwLT5zZF9mbGFncyk7Ci0JdXBfd3JpdGUoJnNkcC0+c2RfbG9nX2ZsdXNoX2xvY2spOwotCiAJa3RocmVhZF9zdG9wKHNkcC0+c2RfcXVvdGFkX3Byb2Nlc3MpOwogCWt0aHJlYWRfc3RvcChzZHAtPnNkX2xvZ2RfcHJvY2Vzcyk7CiAKQEAgLTg1MywxMSArODQyLDE2IEBACiAJZ2ZzMl9xdW90YV9zeW5jKHNkcC0+c2RfdmZzLCAwKTsKIAlnZnMyX3N0YXRmc19zeW5jKHNkcC0+c2RfdmZzLCAwKTsKIAorCWRvd25fd3JpdGUoJnNkcC0+c2RfbG9nX2ZsdXNoX2xvY2spOworCWNsZWFyX2JpdChTREZfSk9VUk5BTF9MSVZFLCAmc2RwLT5zZF9mbGFncyk7CisJdXBfd3JpdGUoJnNkcC0+c2RfbG9nX2ZsdXNoX2xvY2spOworCiAJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMLCBTSFVURE9XTl9GTFVTSCk7CisJd2FpdF9ldmVudChzZHAtPnNkX3Jlc2VydmluZ19sb2dfd2FpdCwgYXRvbWljX3JlYWQoJnNkcC0+c2RfcmVzZXJ2aW5nX2xvZykgPT0gMCk7CiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ19ibGtzX2ZyZWUpID09IHNkcC0+c2RfamRlc2MtPmpkX2Jsb2Nrcyk7CiAKLQlpZiAodGhhd19naC5naF9nbCkKLQkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnRoYXdfZ2gpOworCWlmIChmcmVlemVfZ2guZ2hfZ2wpCisJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZmcmVlemVfZ2gpOwogCiAJZ2ZzMl9xdW90YV9jbGVhbnVwKHNkcCk7CiAKQEAgLTk0MywxMSArOTM3LDQxIEBACiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOwogCiAJZ2ZzMl9xdW90YV9zeW5jKHNiLCAtMSk7Ci0JaWYgKHdhaXQgJiYgc2RwICYmICFhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfZnJlZXplKSkKKwlpZiAod2FpdCAmJiBzZHApCiAJCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCwgTk9STUFMX0ZMVVNIKTsKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBnZnMyX2ZyZWV6ZV9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IGdmczJfaG9sZGVyIGZyZWV6ZV9naDsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ2ZzMl9zYmQsIHNkX2ZyZWV6ZV93b3JrKTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2RwLT5zZF92ZnM7CisKKwlhdG9taWNfaW5jKCZzYi0+c19hY3RpdmUpOworCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHNkcC0+c2RfZnJlZXplX2dsLCBMTV9TVF9TSEFSRUQsIDAsCisJCQkJICAgJmZyZWV6ZV9naCk7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IGNvdWxuJ3QgZ2V0IGZyZWV6ZSBsb2NrIDogJWRcbiIsIGVycm9yKTsKKwkJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAwKTsKKwl9CisJZWxzZSB7CisJCWF0b21pY19zZXQoJnNkcC0+c2RfZnJlZXplX3N0YXRlLCBTRlNfVU5GUk9aRU4pOworCQllcnJvciA9IHRoYXdfc3VwZXIoc2IpOworCQlpZiAoZXJyb3IpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IGNvdWxkbid0IHRoYXcgZmlsZXN5c3RlbTogJWRcbiIsCisJCQkgICAgICAgZXJyb3IpOworCQkJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAwKTsKKwkJfQorCQlpZiAoIXRlc3RfYml0KFNERl9KT1VSTkFMX0xJVkUsICZzZHAtPnNkX2ZsYWdzKSkKKwkJCWZyZWV6ZV9naC5naF9mbGFncyB8PSBHTF9OT0NBQ0hFOworCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZnJlZXplX2doKTsKKwl9CisJZGVhY3RpdmF0ZV9zdXBlcihzYik7CisJcmV0dXJuOworfQorCiAvKioKICAqIGdmczJfZnJlZXplIC0gcHJldmVudCBmdXJ0aGVyIHdyaXRlcyB0byB0aGUgZmlsZXN5c3RlbQogICogQHNiOiB0aGUgVkZTIHN0cnVjdHVyZSBmb3IgdGhlIGZpbGVzeXN0ZW0KQEAgLTk1NywxMCArOTgxLDE2IEBACiBzdGF0aWMgaW50IGdmczJfZnJlZXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IgPSAwOwogCi0JaWYgKHRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZzZHAtPnNkX2ZyZWV6ZV9tdXRleCk7CisJaWYgKGF0b21pY19yZWFkKCZzZHAtPnNkX2ZyZWV6ZV9zdGF0ZSkgIT0gU0ZTX1VORlJPWkVOKQorCQlnb3RvIG91dDsKKworCWlmICh0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkgeworCQllcnJvciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAogCWZvciAoOzspIHsKIAkJZXJyb3IgPSBnZnMyX2xvY2tfZnNfY2hlY2tfY2xlYW4oc2RwLCAmc2RwLT5zZF9mcmVlemVfZ2gpOwpAQCAtOTgwLDcgKzEwMTAsMTAgQEAKIAkJZnNfZXJyKHNkcCwgInJldHJ5aW5nLi4uXG4iKTsKIAkJbXNsZWVwKDEwMDApOwogCX0KLQlyZXR1cm4gMDsKKwllcnJvciA9IDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzZHAtPnNkX2ZyZWV6ZV9tdXRleCk7CisJcmV0dXJuIGVycm9yOwogfQogCiAvKioKQEAgLTk5MywxMCArMTAyNiwxNSBAQAogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gc2ItPnNfZnNfaW5mbzsKIAorCW11dGV4X2xvY2soJnNkcC0+c2RfZnJlZXplX211dGV4KTsKKyAgICAgICAgaWYgKGF0b21pY19yZWFkKCZzZHAtPnNkX2ZyZWV6ZV9zdGF0ZSkgIT0gU0ZTX0ZST1pFTiB8fAorCSAgICBzZHAtPnNkX2ZyZWV6ZV9naC5naF9nbCA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmc2RwLT5zZF9mcmVlemVfbXV0ZXgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworCX0KKwogCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX2ZyZWV6ZV9naCk7Ci0JYXRvbWljX2RlYygmc2RwLT5zZF9mcm96ZW5fcm9vdCk7Ci0Jd2FpdF9ldmVudChzZHAtPnNkX2Zyb3plbl9yb290X3dhaXQsIGF0b21pY19yZWFkKCZzZHAtPnNkX2Zyb3plbl9yb290KSA9PSAwKTsKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmc2RwLT5zZF9mcmVlemVfcm9vdF9naCk7CisJbXV0ZXhfdW5sb2NrKCZzZHAtPnNkX2ZyZWV6ZV9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MTgsOCArMTY1Niw4IEBACiAJLmV2aWN0X2lub2RlCQk9IGdmczJfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgkJPSBnZnMyX3B1dF9zdXBlciwKIAkuc3luY19mcwkJPSBnZnMyX3N5bmNfZnMsCi0JLmZyZWV6ZV9mcyAJCT0gZ2ZzMl9mcmVlemUsCi0JLnVuZnJlZXplX2ZzCQk9IGdmczJfdW5mcmVlemUsCisJLmZyZWV6ZV9zdXBlcgkJPSBnZnMyX2ZyZWV6ZSwKKwkudGhhd19zdXBlcgkJPSBnZnMyX3VuZnJlZXplLAogCS5zdGF0ZnMJCQk9IGdmczJfc3RhdGZzLAogCS5yZW1vdW50X2ZzCQk9IGdmczJfcmVtb3VudF9mcywKIAkuZHJvcF9pbm9kZQkJPSBnZnMyX2Ryb3BfaW5vZGUsCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmggYi9mcy9nZnMyL3N1cGVyLmgKaW5kZXggOTBlMzMyMi4uNzNjOTdkYyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5oCisrKyBiL2ZzL2dmczIvc3VwZXIuaApAQCAtNDUsNiArNDUsNyBAQAogZXh0ZXJuIHZvaWQgdXBkYXRlX3N0YXRmcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICptX2JoLAogCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxfYmgpOwogZXh0ZXJuIGludCBnZnMyX3N0YXRmc19zeW5jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKK2V4dGVybiB2b2lkIGdmczJfZnJlZXplX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGdmczJfZnNfdHlwZTsKIGV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnZnMybWV0YV9mc190eXBlOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi90cmFucy5jIGIvZnMvZ2ZzMi90cmFucy5jCmluZGV4IDQyYmZkMzM2Li44OGJmZjI0IDEwMDY0NAotLS0gYS9mcy9nZnMyL3RyYW5zLmMKKysrIGIvZnMvZ2ZzMi90cmFucy5jCkBAIC04OSwxNCArODksMTcgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIgPSBjdXJyZW50LT5qb3VybmFsX2luZm87CiAJczY0IG5idWY7CisJaW50IGFsbG9jZWQgPSB0ci0+dHJfYWxsb2NlZDsKKwogCUJVR19PTighdHIpOwogCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CiAKIAlpZiAoIXRyLT50cl90b3VjaGVkKSB7CiAJCWdmczJfbG9nX3JlbGVhc2Uoc2RwLCB0ci0+dHJfcmVzZXJ2ZWQpOwotCQlpZiAodHItPnRyX2FsbG9jZWQpCisJCWlmIChhbGxvY2VkKSB7CiAJCQlrZnJlZSh0cik7Ci0JCXNiX2VuZF9pbnR3cml0ZShzZHAtPnNkX3Zmcyk7CisJCQlzYl9lbmRfaW50d3JpdGUoc2RwLT5zZF92ZnMpOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwOSwxMyArMTEyLDE0IEBACiAJCWdmczJfcHJpbnRfdHJhbnModHIpOwogCiAJZ2ZzMl9sb2dfY29tbWl0KHNkcCwgdHIpOwotCWlmICh0ci0+dHJfYWxsb2NlZCAmJiAhdHItPnRyX2F0dGFjaGVkKQorCWlmIChhbGxvY2VkICYmICF0ci0+dHJfYXR0YWNoZWQpCiAJCQlrZnJlZSh0cik7CiAJdXBfcmVhZCgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7CiAKIAlpZiAoc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJiBNU19TWU5DSFJPTk9VUykKIAkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMLCBOT1JNQUxfRkxVU0gpOwotCXNiX2VuZF9pbnR3cml0ZShzZHAtPnNkX3Zmcyk7CisJaWYgKGFsbG9jZWQpCisJCXNiX2VuZF9pbnR3cml0ZShzZHAtPnNkX3Zmcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpnZnMyX2FsbG9jX2J1ZmRhdGEoc3RydWN0IGdmczJfZ2xvY2sgKmdsLApAQCAtMTkyLDYgKzE5Niw3IEBACiB7CiAJc3RydWN0IGdmczJfbWV0YV9oZWFkZXIgKm1oOwogCXN0cnVjdCBnZnMyX3RyYW5zICp0cjsKKwllbnVtIGdmczJfZnJlZXplX3N0YXRlIHN0YXRlID0gYXRvbWljX3JlYWQoJnNkcC0+c2RfZnJlZXplX3N0YXRlKTsKIAogCXRyID0gY3VycmVudC0+am91cm5hbF9pbmZvOwogCXRyLT50cl90b3VjaGVkID0gMTsKQEAgLTIwNSw2ICsyMTAsMTAgQEAKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmQtPmJkX2JoLT5iX2Jsb2NrbnIpOwogCQlCVUcoKTsKIAl9CisJaWYgKHVubGlrZWx5KHN0YXRlID09IFNGU19GUk9aRU4pKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6YWRkaW5nIGJ1ZiB3aGlsZSBmcm96ZW5cbiIpOworCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIDApOworCX0KIAlnZnMyX3BpbihzZHAsIGJkLT5iZF9iaCk7CiAJbWgtPl9fcGFkMCA9IGNwdV90b19iZTY0KDApOwogCW1oLT5taF9qaWQgPSBjcHVfdG9fYmUzMihzZHAtPnNkX2pkZXNjLT5qZF9qaWQpOwpkaWZmIC0tZ2l0IGEvZnMvaW9jdGwuYyBiL2ZzL2lvY3RsLmMKaW5kZXggOGFjM2ZhZC4uNzdjOWE3OCAxMDA2NDQKLS0tIGEvZnMvaW9jdGwuYworKysgYi9mcy9pb2N0bC5jCkBAIC01MTgsMTAgKzUxOCwxMiBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJLyogSWYgZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgZnJlZXplIGZlYXR1cmUsIHJldHVybi4gKi8KLQlpZiAoc2ItPnNfb3AtPmZyZWV6ZV9mcyA9PSBOVUxMKQorCWlmIChzYi0+c19vcC0+ZnJlZXplX2ZzID09IE5VTEwgJiYgc2ItPnNfb3AtPmZyZWV6ZV9zdXBlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAkvKiBGcmVlemUgKi8KKwlpZiAoc2ItPnNfb3AtPmZyZWV6ZV9zdXBlcikKKwkJcmV0dXJuIHNiLT5zX29wLT5mcmVlemVfc3VwZXIoc2IpOwogCXJldHVybiBmcmVlemVfc3VwZXIoc2IpOwogfQogCkBAIC01MzMsNiArNTM1LDggQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCS8qIFRoYXcgKi8KKwlpZiAoc2ItPnNfb3AtPnRoYXdfc3VwZXIpCisJCXJldHVybiBzYi0+c19vcC0+dGhhd19zdXBlcihzYik7CiAJcmV0dXJuIHRoYXdfc3VwZXIoc2IpOwogfQogCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmNsb2NrLmMgYi9mcy9sb2NrZC9zdmNsb2NrLmMKaW5kZXggMTNkYjk1Zi4uNTY1OTg3NCAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjbG9jay5jCisrKyBiL2ZzL2xvY2tkL3N2Y2xvY2suYwpAQCAtNTMsNyArNTMsNyBAQAogc3RhdGljIExJU1RfSEVBRChubG1fYmxvY2tlZCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5sbV9ibG9ja2VkX2xvY2spOwogCi0jaWZkZWYgTE9DS0RfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiBzdGF0aWMgY29uc3QgY2hhciAqbmxtZGJnX2Nvb2tpZTJhKGNvbnN0IHN0cnVjdCBubG1fY29va2llICpjb29raWUpCiB7CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9ibG9ja2xheW91dC9ibG9ja2xheW91dC5jIGIvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMKaW5kZXggNGY0NmY3YS4uNzdmZWM2YSAxMDA2NDQKLS0tIGEvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMKKysrIGIvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMKQEAgLTgxMiw3ICs4MTIsNyBAQAogCiAJLyogT3B0aW1pemUgY29tbW9uIGNhc2UgdGhhdCB3cml0ZXMgZnJvbSAwIHRvIGVuZCBvZiBmaWxlICovCiAJZW5kID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9DQUNIRV9TSVpFKTsKLQlpZiAoZW5kICE9IE5GU19JKGlub2RlKS0+bnBhZ2VzKSB7CisJaWYgKGVuZCAhPSBpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzKSB7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJZW5kID0gcGFnZV9jYWNoZV9uZXh0X2hvbGUobWFwcGluZywgaWR4ICsgMSwgVUxPTkdfTUFYKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jIGIvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYwppbmRleCA3MzQ2NmI5Li5lMzZhOWQ3IDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCisrKyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAkJZ290byBvdXRfaXB1dDsKIAlyZXMtPnNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiAJcmVzLT5jaGFuZ2VfYXR0ciA9IGRlbGVnYXRpb24tPmNoYW5nZV9hdHRyOwotCWlmIChuZnNpLT5ucGFnZXMgIT0gMCkKKwlpZiAobmZzaS0+bnJlcXVlc3RzICE9IDApCiAJCXJlcy0+Y2hhbmdlX2F0dHIrKzsKIAlyZXMtPmN0aW1lID0gaW5vZGUtPmlfY3RpbWU7CiAJcmVzLT5tdGltZSA9IGlub2RlLT5pX210aW1lOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGVsYXlvdXQvZmlsZWxheW91dGRldi5jIGIvZnMvbmZzL2ZpbGVsYXlvdXQvZmlsZWxheW91dGRldi5jCmluZGV4IDliYjgwNmEuLmJmZWNhYzcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlbGF5b3V0L2ZpbGVsYXlvdXRkZXYuYworKysgYi9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0ZGV2LmMKQEAgLTIwNCw4ICsyMDQsNyBAQAogCWlmZGVidWcoRkFDSUxJVFkpCiAJCXByaW50X2RzKGRzKTsKIAotCWlmIChkcy0+ZHNfY2xwKQotCQluZnNfcHV0X2NsaWVudChkcy0+ZHNfY2xwKTsKKwluZnNfcHV0X2NsaWVudChkcy0+ZHNfY2xwKTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmZHMtPmRzX2FkZHJzKSkgewogCQlkYSA9IGxpc3RfZmlyc3RfZW50cnkoJmRzLT5kc19hZGRycywKZGlmZiAtLWdpdCBhL2ZzL25mcy9mc2NhY2hlLmMgYi9mcy9uZnMvZnNjYWNoZS5jCmluZGV4IDNlZjAxZjAuLmQ2M2JlYTggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9mc2NhY2hlLmMKKysrIGIvZnMvbmZzL2ZzY2FjaGUuYwpAQCAtMjY5LDggKzI2OSw4IEBACiAJCWlmICghZnNjYWNoZV9tYXliZV9yZWxlYXNlX3BhZ2UoY29va2llLCBwYWdlLCBnZnApKQogCQkJcmV0dXJuIDA7CiAKLQkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKHBhZ2UtPm1hcHBpbmctPmhvc3QsCi0JCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfVU5DQUNIRUQsIDEpOworCQluZnNfaW5jX2ZzY2FjaGVfc3RhdHMocGFnZS0+bWFwcGluZy0+aG9zdCwKKwkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCk7CiAJfQogCiAJcmV0dXJuIDE7CkBAIC0yOTMsOCArMjkzLDggQEAKIAogCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAJZnNjYWNoZV91bmNhY2hlX3BhZ2UoY29va2llLCBwYWdlKTsKLQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMocGFnZS0+bWFwcGluZy0+aG9zdCwKLQkJCSAgICAgIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1VOQ0FDSEVELCAxKTsKKwluZnNfaW5jX2ZzY2FjaGVfc3RhdHMocGFnZS0+bWFwcGluZy0+aG9zdCwKKwkJCSAgICAgIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1VOQ0FDSEVEKTsKIH0KIAogLyoKQEAgLTM0MywxOSArMzQzLDE5IEBACiAJY2FzZSAwOiAvKiByZWFkIEJJTyBzdWJtaXR0ZWQgKHBhZ2UgaW4gZnNjYWNoZSkgKi8KIAkJZGZwcmludGsoRlNDQUNIRSwKIAkJCSAiTkZTOiAgICByZWFkcGFnZV9mcm9tX2ZzY2FjaGU6IEJJTyBzdWJtaXR0ZWRcbiIpOwotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfT0ssIDEpOworCQluZnNfaW5jX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfT0spOwogCQlyZXR1cm4gcmV0OwogCiAJY2FzZSAtRU5PQlVGUzogLyogaW5vZGUgbm90IGluIGNhY2hlICovCiAJY2FzZSAtRU5PREFUQTogLyogcGFnZSBub3QgaW4gY2FjaGUgKi8KLQkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19SRUFEX0ZBSUwsIDEpOworCQluZnNfaW5jX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCk7CiAJCWRmcHJpbnRrKEZTQ0FDSEUsCiAJCQkgIk5GUzogICAgcmVhZHBhZ2VfZnJvbV9mc2NhY2hlICVkXG4iLCByZXQpOwogCQlyZXR1cm4gMTsKIAogCWRlZmF1bHQ6CiAJCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6ICAgIHJlYWRwYWdlX2Zyb21fZnNjYWNoZSAlZFxuIiwgcmV0KTsKLQkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19SRUFEX0ZBSUwsIDEpOworCQluZnNfaW5jX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC00MjksMTEgKzQyOSwxMSBAQAogCiAJaWYgKHJldCAhPSAwKSB7CiAJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKG5mc19pX2ZzY2FjaGUoaW5vZGUpLCBwYWdlKTsKLQkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLAotCQkJCSAgICAgIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1dSSVRURU5fRkFJTCwgMSk7Ci0JCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfVU5DQUNIRUQsIDEpOworCQluZnNfaW5jX2ZzY2FjaGVfc3RhdHMoaW5vZGUsCisJCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfV1JJVFRFTl9GQUlMKTsKKwkJbmZzX2luY19mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCk7CiAJfSBlbHNlIHsKLQkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLAotCQkJCSAgICAgIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1dSSVRURU5fT0ssIDEpOworCQluZnNfaW5jX2ZzY2FjaGVfc3RhdHMoaW5vZGUsCisJCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfV1JJVFRFTl9PSyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCAwMDY4OWE4Li40YmZmZTYzIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtMTkyLDYgKzE5Miw3IEBACiAJbmZzX3phcF9jYWNoZXNfbG9ja2VkKGlub2RlKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZnNfemFwX2NhY2hlcyk7CiAKIHZvaWQgbmZzX3phcF9tYXBwaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewpAQCAtMTE0OSw3ICsxMTUwLDcgQEAKIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRVNJWkUpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfU0laRSkKIAkJCSYmIGlfc2l6ZV9yZWFkKGlub2RlKSA9PSBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnByZV9zaXplKQotCQkJJiYgbmZzaS0+bnBhZ2VzID09IDApIHsKKwkJCSYmIG5mc2ktPm5yZXF1ZXN0cyA9PSAwKSB7CiAJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKSk7CiAJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKIAl9CkBAIC0xMTkyLDcgKzExOTMsNyBAQAogCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKSB7CiAJCWN1cl9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCQluZXdfaXNpemUgPSBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpOwotCQlpZiAoY3VyX3NpemUgIT0gbmV3X2lzaXplICYmIG5mc2ktPm5wYWdlcyA9PSAwKQorCQlpZiAoY3VyX3NpemUgIT0gbmV3X2lzaXplICYmIG5mc2ktPm5yZXF1ZXN0cyA9PSAwKQogCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX1JFVkFMX1BBR0VDQUNIRTsKIAl9CiAKQEAgLTE2MTksNyArMTYyMCw3IEBACiAJCWlmIChuZXdfaXNpemUgIT0gY3VyX2lzaXplKSB7CiAJCQkvKiBEbyB3ZSBwZXJoYXBzIGhhdmUgYW55IG91dHN0YW5kaW5nIHdyaXRlcywgb3IgaGFzCiAJCQkgKiB0aGUgZmlsZSBncm93biBiZXlvbmQgb3VyIGxhc3Qgd3JpdGU/ICovCi0JCQlpZiAoKG5mc2ktPm5wYWdlcyA9PSAwKSB8fCBuZXdfaXNpemUgPiBjdXJfaXNpemUpIHsKKwkJCWlmICgobmZzaS0+bnJlcXVlc3RzID09IDApIHx8IG5ld19pc2l6ZSA+IGN1cl9pc2l6ZSkgewogCQkJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmV3X2lzaXplKTsKIAkJCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9EQVRBOwogCQkJCWludmFsaWQgJj0gfk5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOwpAQCAtMTc4NCw3ICsxNzg1LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmbmZzaS0+YWNjZXNzX2NhY2hlX2VudHJ5X2xydSk7CiAJSU5JVF9MSVNUX0hFQUQoJm5mc2ktPmFjY2Vzc19jYWNoZV9pbm9kZV9scnUpOwogCUlOSVRfTElTVF9IRUFEKCZuZnNpLT5jb21taXRfaW5mby5saXN0KTsKLQluZnNpLT5ucGFnZXMgPSAwOworCW5mc2ktPm5yZXF1ZXN0cyA9IDA7CiAJbmZzaS0+Y29tbWl0X2luZm8ubmNvbW1pdCA9IDA7CiAJYXRvbWljX3NldCgmbmZzaS0+Y29tbWl0X2luZm8ucnBjc19vdXQsIDApOwogCWF0b21pY19zZXQoJm5mc2ktPnNpbGx5X2NvdW50LCAxKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pb3N0YXQuaCBiL2ZzL25mcy9pb3N0YXQuaAppbmRleCBjNTgzMjQ4Li4wY2I4MDZmIDEwMDY0NAotLS0gYS9mcy9uZnMvaW9zdGF0LmgKKysrIGIvZnMvbmZzL2lvc3RhdC5oCkBAIC01NSw2ICs1NSwxMSBAQAogewogCXRoaXNfY3B1X2FkZChORlNfU0VSVkVSKGlub2RlKS0+aW9fc3RhdHMtPmZzY2FjaGVbc3RhdF0sIGFkZGVuZCk7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2luY19mc2NhY2hlX3N0YXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBlbnVtIG5mc19zdGF0X2ZzY2FjaGVjb3VudGVycyBzdGF0KQoreworCXRoaXNfY3B1X2luYyhORlNfU0VSVkVSKGlub2RlKS0+aW9fc3RhdHMtPmZzY2FjaGVbc3RhdF0pOworfQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mc19pb3N0YXRzIF9fcGVyY3B1ICpuZnNfYWxsb2NfaW9zdGF0cyh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczQyLmggYi9mcy9uZnMvbmZzNDIuaAppbmRleCBkMTAzMzNhLi43YWZiODk0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNDIuaAorKysgYi9mcy9uZnMvbmZzNDIuaApAQCAtNiw2ICs2LDggQEAKICNkZWZpbmUgX19MSU5VWF9GU19ORlNfTkZTNF8yX0gKIAogLyogbmZzNC4ycHJvYy5jICovCitpbnQgbmZzNDJfcHJvY19hbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGxvZmZfdCk7CitpbnQgbmZzNDJfcHJvY19kZWFsbG9jYXRlKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgbG9mZl90KTsKIGxvZmZfdCBuZnM0Ml9wcm9jX2xsc2VlayhzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7CiAKIC8qIG5mczQuMnhkci5oICovCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNDJwcm9jLmMgYi9mcy9uZnMvbmZzNDJwcm9jLmMKaW5kZXggMDg4NmYxZC4uY2IxNzA3MiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczQycHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0MnByb2MuYwpAQCAtMzIsNiArMzIsODEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IF9uZnM0Ml9wcm9jX2ZhbGxvY2F0ZShzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZywgc3RydWN0IGZpbGUgKmZpbGVwLAorCQkJCSBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlzdHJ1Y3QgbmZzNDJfZmFsbG9jX2FyZ3MgYXJncyA9IHsKKwkJLmZhbGxvY19maAk9IE5GU19GSChpbm9kZSksCisJCS5mYWxsb2Nfb2Zmc2V0CT0gb2Zmc2V0LAorCQkuZmFsbG9jX2xlbmd0aAk9IGxlbiwKKwl9OworCXN0cnVjdCBuZnM0Ml9mYWxsb2NfcmVzIHJlczsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NFUlZFUihpbm9kZSk7CisJaW50IHN0YXR1czsKKworCW1zZy0+cnBjX2FyZ3AgPSAmYXJnczsKKwltc2ctPnJwY19yZXNwID0gJnJlczsKKworCXN0YXR1cyA9IG5mczQyX3NldF9yd19zdGF0ZWlkKCZhcmdzLmZhbGxvY19zdGF0ZWlkLCBmaWxlcCwgRk1PREVfV1JJVEUpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gbmZzNF9jYWxsX3N5bmMoc2VydmVyLT5jbGllbnQsIHNlcnZlciwgbXNnLAorCQkJICAgICAgJmFyZ3Muc2VxX2FyZ3MsICZyZXMuc2VxX3JlcywgMCk7Cit9CisKK3N0YXRpYyBpbnQgbmZzNDJfcHJvY19mYWxsb2NhdGUoc3RydWN0IHJwY19tZXNzYWdlICptc2csIHN0cnVjdCBmaWxlICpmaWxlcCwKKwkJCQlsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGZpbGVfaW5vZGUoZmlsZXApKTsKKwlzdHJ1Y3QgbmZzNF9leGNlcHRpb24gZXhjZXB0aW9uID0geyB9OworCWludCBlcnI7CisKKwlkbyB7CisJCWVyciA9IF9uZnM0Ml9wcm9jX2ZhbGxvY2F0ZShtc2csIGZpbGVwLCBvZmZzZXQsIGxlbik7CisJCWlmIChlcnIgPT0gLUVOT1RTVVBQKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQllcnIgPSBuZnM0X2hhbmRsZV9leGNlcHRpb24oc2VydmVyLCBlcnIsICZleGNlcHRpb24pOworCX0gd2hpbGUgKGV4Y2VwdGlvbi5yZXRyeSk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbmZzNDJfcHJvY19hbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pCit7CisJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKKwkJLnJwY19wcm9jID0gJm5mczRfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX0FMTE9DQVRFXSwKKwl9OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlpbnQgZXJyOworCisJaWYgKCFuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfQUxMT0NBVEUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwllcnIgPSBuZnM0Ml9wcm9jX2ZhbGxvY2F0ZSgmbXNnLCBmaWxlcCwgb2Zmc2V0LCBsZW4pOworCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApCisJCU5GU19TRVJWRVIoaW5vZGUpLT5jYXBzICY9IH5ORlNfQ0FQX0FMTE9DQVRFOworCXJldHVybiBlcnI7Cit9CisKK2ludCBuZnM0Ml9wcm9jX2RlYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGVwLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBycGNfbWVzc2FnZSBtc2cgPSB7CisJCS5ycGNfcHJvYyA9ICZuZnM0X3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9ERUFMTE9DQVRFXSwKKwl9OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlpbnQgZXJyOworCisJaWYgKCFuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfREVBTExPQ0FURSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVyciA9IG5mczQyX3Byb2NfZmFsbG9jYXRlKCZtc2csIGZpbGVwLCBvZmZzZXQsIGxlbik7CisJaWYgKGVyciA9PSAtRU9QTk9UU1VQUCkKKwkJTkZTX1NFUlZFUihpbm9kZSktPmNhcHMgJj0gfk5GU19DQVBfREVBTExPQ0FURTsKKwlyZXR1cm4gZXJyOworfQorCiBsb2ZmX3QgbmZzNDJfcHJvY19sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGVwLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKQEAgLTUwLDcgKzEyNSw3IEBACiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOwogCWludCBzdGF0dXM7CiAKLQlpZiAoIShzZXJ2ZXItPmNhcHMgJiBORlNfQ0FQX1NFRUspKQorCWlmICghbmZzX3NlcnZlcl9jYXBhYmxlKGlub2RlLCBORlNfQ0FQX1NFRUspKQogCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJc3RhdHVzID0gbmZzNDJfc2V0X3J3X3N0YXRlaWQoJmFyZ3Muc2Ffc3RhdGVpZCwgZmlsZXAsIEZNT0RFX1JFQUQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczQyeGRyLmMgYi9mcy9uZnMvbmZzNDJ4ZHIuYwppbmRleCBjOTA0NjliLi4wMzhhN2UxNSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczQyeGRyLmMKKysrIGIvZnMvbmZzL25mczQyeGRyLmMKQEAgLTQsNiArNCwxNSBAQAogI2lmbmRlZiBfX0xJTlVYX0ZTX05GU19ORlM0XzJYRFJfSAogI2RlZmluZSBfX0xJTlVYX0ZTX05GU19ORlM0XzJYRFJfSAogCisjZGVmaW5lIGVuY29kZV9mYWxsb2NhdGVfbWF4c3oJCShlbmNvZGVfc3RhdGVpZF9tYXhzeiArIFwKKwkJCQkJIDIgLyogb2Zmc2V0ICovICsgXAorCQkJCQkgMiAvKiBsZW5ndGggKi8pCisjZGVmaW5lIGVuY29kZV9hbGxvY2F0ZV9tYXhzegkJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfZmFsbG9jYXRlX21heHN6KQorI2RlZmluZSBkZWNvZGVfYWxsb2NhdGVfbWF4c3oJCShvcF9kZWNvZGVfaGRyX21heHN6KQorI2RlZmluZSBlbmNvZGVfZGVhbGxvY2F0ZV9tYXhzegkJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfZmFsbG9jYXRlX21heHN6KQorI2RlZmluZSBkZWNvZGVfZGVhbGxvY2F0ZV9tYXhzegkJKG9wX2RlY29kZV9oZHJfbWF4c3opCiAjZGVmaW5lIGVuY29kZV9zZWVrX21heHN6CQkob3BfZW5jb2RlX2hkcl9tYXhzeiArIFwKIAkJCQkJIGVuY29kZV9zdGF0ZWlkX21heHN6ICsgXAogCQkJCQkgMiAvKiBvZmZzZXQgKi8gKyBcCkBAIC0xNCw2ICsyMywxOCBAQAogCQkJCQkgMiAvKiBvZmZzZXQgKi8gKyBcCiAJCQkJCSAyIC8qIGxlbmd0aCAqLykKIAorI2RlZmluZSBORlM0X2VuY19hbGxvY2F0ZV9zegkJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfcHV0ZmhfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfYWxsb2NhdGVfbWF4c3opCisjZGVmaW5lIE5GUzRfZGVjX2FsbG9jYXRlX3N6CQkoY29tcG91bmRfZGVjb2RlX2hkcl9tYXhzeiArIFwKKwkJCQkJIGRlY29kZV9wdXRmaF9tYXhzeiArIFwKKwkJCQkJIGRlY29kZV9hbGxvY2F0ZV9tYXhzeikKKyNkZWZpbmUgTkZTNF9lbmNfZGVhbGxvY2F0ZV9zegkJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfcHV0ZmhfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfZGVhbGxvY2F0ZV9tYXhzeikKKyNkZWZpbmUgTkZTNF9kZWNfZGVhbGxvY2F0ZV9zegkJKGNvbXBvdW5kX2RlY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBkZWNvZGVfcHV0ZmhfbWF4c3ogKyBcCisJCQkJCSBkZWNvZGVfZGVhbGxvY2F0ZV9tYXhzeikKICNkZWZpbmUgTkZTNF9lbmNfc2Vla19zegkJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCiAJCQkJCSBlbmNvZGVfcHV0ZmhfbWF4c3ogKyBcCiAJCQkJCSBlbmNvZGVfc2Vla19tYXhzeikKQEAgLTIyLDYgKzQzLDMwIEBACiAJCQkJCSBkZWNvZGVfc2Vla19tYXhzeikKIAogCitzdGF0aWMgdm9pZCBlbmNvZGVfZmFsbG9jYXRlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfYXJncyAqYXJncykKK3sKKwllbmNvZGVfbmZzNF9zdGF0ZWlkKHhkciwgJmFyZ3MtPmZhbGxvY19zdGF0ZWlkKTsKKwllbmNvZGVfdWludDY0KHhkciwgYXJncy0+ZmFsbG9jX29mZnNldCk7CisJZW5jb2RlX3VpbnQ2NCh4ZHIsIGFyZ3MtPmZhbGxvY19sZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVfYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICBzdHJ1Y3QgbmZzNDJfZmFsbG9jX2FyZ3MgKmFyZ3MsCisJCQkgICAgc3RydWN0IGNvbXBvdW5kX2hkciAqaGRyKQoreworCWVuY29kZV9vcF9oZHIoeGRyLCBPUF9BTExPQ0FURSwgZGVjb2RlX2FsbG9jYXRlX21heHN6LCBoZHIpOworCWVuY29kZV9mYWxsb2NhdGUoeGRyLCBhcmdzKTsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlX2RlYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfYXJncyAqYXJncywKKwkJCSAgICAgIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKK3sKKwllbmNvZGVfb3BfaGRyKHhkciwgT1BfREVBTExPQ0FURSwgZGVjb2RlX2RlYWxsb2NhdGVfbWF4c3osIGhkcik7CisJZW5jb2RlX2ZhbGxvY2F0ZSh4ZHIsIGFyZ3MpOworfQorCiBzdGF0aWMgdm9pZCBlbmNvZGVfc2VlayhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJc3RydWN0IG5mczQyX3NlZWtfYXJncyAqYXJncywKIAkJCXN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKQEAgLTMzLDYgKzc4LDQyIEBACiB9CiAKIC8qCisgKiBFbmNvZGUgQUxMT0NBVEUgcmVxdWVzdAorICovCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgc3RydWN0IG5mczQyX2ZhbGxvY19hcmdzICphcmdzKQoreworCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0geworCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCisJfTsKKworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmFsbG9jX2ZoLCAmaGRyKTsKKwllbmNvZGVfYWxsb2NhdGUoeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfbm9wcygmaGRyKTsKK30KKworLyoKKyAqIEVuY29kZSBERUFMTE9DQVRFIHJlcXVlc3QKKyAqLworc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2RlYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfYXJncyAqYXJncykKK3sKKwlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKKwkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAorCX07CisKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZhbGxvY19maCwgJmhkcik7CisJZW5jb2RlX2RlYWxsb2NhdGUoeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfbm9wcygmaGRyKTsKK30KKworLyoKICAqIEVuY29kZSBTRUVLIHJlcXVlc3QKICAqLwogc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX3NlZWsoc3RydWN0IHJwY19ycXN0ICpyZXEsCkBAIC01MCw2ICsxMzEsMTYgQEAKIAllbmNvZGVfbm9wcygmaGRyKTsKIH0KIAorc3RhdGljIGludCBkZWNvZGVfYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mczQyX2ZhbGxvY19yZXMgKnJlcykKK3sKKwlyZXR1cm4gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0FMTE9DQVRFKTsKK30KKworc3RhdGljIGludCBkZWNvZGVfZGVhbGxvY2F0ZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzNDJfZmFsbG9jX3JlcyAqcmVzKQoreworCXJldHVybiBkZWNvZGVfb3BfaGRyKHhkciwgT1BfREVBTExPQ0FURSk7Cit9CisKIHN0YXRpYyBpbnQgZGVjb2RlX3NlZWsoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mczQyX3NlZWtfcmVzICpyZXMpCiB7CiAJaW50IHN0YXR1czsKQEAgLTczLDYgKzE2NCw1NCBAQAogfQogCiAvKgorICogRGVjb2RlIEFMTE9DQVRFIHJlcXVlc3QKKyAqLworc3RhdGljIGludCBuZnM0X3hkcl9kZWNfYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwKKwkJCQkgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgc3RydWN0IG5mczQyX2ZhbGxvY19yZXMgKnJlcykKK3sKKwlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gb3V0OworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfYWxsb2NhdGUoeGRyLCByZXMpOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBEZWNvZGUgREVBTExPQ0FURSByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2RlYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwKKwkJCQkgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfcmVzICpyZXMpCit7CisJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXQ7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXQ7CisJc3RhdHVzID0gZGVjb2RlX2RlYWxsb2NhdGUoeGRyLCByZXMpOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCiAgKiBEZWNvZGUgU0VFSyByZXF1ZXN0CiAgKi8KIHN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3NlZWsoc3RydWN0IHJwY19ycXN0ICpycXN0cCwKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0X2ZzLmggYi9mcy9uZnMvbmZzNF9mcy5oCmluZGV4IGJlNmNhYzMuLmEwODE3ODcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0X2ZzLmgKKysrIGIvZnMvbmZzL25mczRfZnMuaApAQCAtMjI2LDYgKzIyNiw3IEBACiAJCQkJY29uc3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb25zICpsb2NhdGlvbnMpOwogCiAvKiBuZnM0cHJvYy5jICovCitleHRlcm4gaW50IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3QgbmZzX3NlcnZlciAqLCBpbnQsIHN0cnVjdCBuZnM0X2V4Y2VwdGlvbiAqKTsKIGV4dGVybiBpbnQgbmZzNF9jYWxsX3N5bmMoc3RydWN0IHJwY19jbG50ICosIHN0cnVjdCBuZnNfc2VydmVyICosCiAJCQkgIHN0cnVjdCBycGNfbWVzc2FnZSAqLCBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICosCiAJCQkgIHN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcyAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRjbGllbnQuYyBiL2ZzL25mcy9uZnM0Y2xpZW50LmMKaW5kZXggZmZkYjI4ZC4uMDMzMTEyNSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRjbGllbnQuYworKysgYi9mcy9uZnMvbmZzNGNsaWVudC5jCkBAIC0yNDEsMjggKzI0MSwyNSBAQAogICovCiBzdGF0aWMgaW50IG5mczRfaW5pdF9jYWxsYmFjayhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogeworCXN0cnVjdCBycGNfeHBydCAqeHBydDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoY2xwLT5ycGNfb3BzLT52ZXJzaW9uID09IDQpIHsKLQkJc3RydWN0IHJwY194cHJ0ICp4cHJ0OworCXhwcnQgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGNscC0+Y2xfcnBjY2xpZW50LT5jbF94cHJ0KTsKIAotCQl4cHJ0ID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhjbHAtPmNsX3JwY2NsaWVudC0+Y2xfeHBydCk7Ci0KLQkJaWYgKG5mczRfaGFzX3Nlc3Npb24oY2xwKSkgewotCQkJZXJyb3IgPSB4cHJ0X3NldHVwX2JhY2tjaGFubmVsKHhwcnQsCi0JCQkJCQlORlM0MV9CQ19NSU5fQ0FMTEJBQ0tTKTsKLQkJCWlmIChlcnJvciA8IDApCi0JCQkJcmV0dXJuIGVycm9yOwotCQl9Ci0KLQkJZXJyb3IgPSBuZnNfY2FsbGJhY2tfdXAoY2xwLT5jbF9tdm9wcy0+bWlub3JfdmVyc2lvbiwgeHBydCk7Ci0JCWlmIChlcnJvciA8IDApIHsKLQkJCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc3RhcnQgY2FsbGJhY2suIEVycm9yID0gJWRcbiIsCi0JCQkJX19mdW5jX18sIGVycm9yKTsKKwlpZiAobmZzNF9oYXNfc2Vzc2lvbihjbHApKSB7CisJCWVycm9yID0geHBydF9zZXR1cF9iYWNrY2hhbm5lbCh4cHJ0LCBORlM0MV9CQ19NSU5fQ0FMTEJBQ0tTKTsKKwkJaWYgKGVycm9yIDwgMCkKIAkJCXJldHVybiBlcnJvcjsKLQkJfQotCQlfX3NldF9iaXQoTkZTX0NTX0NBTExCQUNLLCAmY2xwLT5jbF9yZXNfc3RhdGUpOwogCX0KKworCWVycm9yID0gbmZzX2NhbGxiYWNrX3VwKGNscC0+Y2xfbXZvcHMtPm1pbm9yX3ZlcnNpb24sIHhwcnQpOworCWlmIChlcnJvciA8IDApIHsKKwkJZHByaW50aygiJXM6IGZhaWxlZCB0byBzdGFydCBjYWxsYmFjay4gRXJyb3IgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisJX19zZXRfYml0KE5GU19DU19DQUxMQkFDSywgJmNscC0+Y2xfcmVzX3N0YXRlKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00OTgsOCArNDk1LDcgQEAKIAkJCWF0b21pY19pbmMoJnBvcy0+Y2xfY291bnQpOwogCQkJc3Bpbl91bmxvY2soJm5uLT5uZnNfY2xpZW50X2xvY2spOwogCi0JCQlpZiAocHJldikKLQkJCQluZnNfcHV0X2NsaWVudChwcmV2KTsKKwkJCW5mc19wdXRfY2xpZW50KHByZXYpOwogCQkJcHJldiA9IHBvczsKIAogCQkJc3RhdHVzID0gbmZzX3dhaXRfY2xpZW50X2luaXRfY29tcGxldGUocG9zKTsKQEAgLTUxNyw4ICs1MTMsNyBAQAogCQlhdG9taWNfaW5jKCZwb3MtPmNsX2NvdW50KTsKIAkJc3Bpbl91bmxvY2soJm5uLT5uZnNfY2xpZW50X2xvY2spOwogCi0JCWlmIChwcmV2KQotCQkJbmZzX3B1dF9jbGllbnQocHJldik7CisJCW5mc19wdXRfY2xpZW50KHByZXYpOwogCQlwcmV2ID0gcG9zOwogCiAJCXN0YXR1cyA9IG5mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKHBvcywgJmNsaWQsIGNyZWQpOwpAQCAtNTQ5LDggKzU0NCw3IEBACiAKIAkvKiBObyBtYXRjaCBmb3VuZC4gVGhlIHNlcnZlciBsb3N0IG91ciBjbGllbnRpZCAqLwogb3V0OgotCWlmIChwcmV2KQotCQluZnNfcHV0X2NsaWVudChwcmV2KTsKKwluZnNfcHV0X2NsaWVudChwcmV2KTsKIAlkcHJpbnRrKCJORlM6IDwtLSAlcyBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTY0MSw4ICs2MzUsNyBAQAogCQkJYXRvbWljX2luYygmcG9zLT5jbF9jb3VudCk7CiAJCQlzcGluX3VubG9jaygmbm4tPm5mc19jbGllbnRfbG9jayk7CiAKLQkJCWlmIChwcmV2KQotCQkJCW5mc19wdXRfY2xpZW50KHByZXYpOworCQkJbmZzX3B1dF9jbGllbnQocHJldik7CiAJCQlwcmV2ID0gcG9zOwogCiAJCQlzdGF0dXMgPSBuZnNfd2FpdF9jbGllbnRfaW5pdF9jb21wbGV0ZShwb3MpOwpAQCAtNjc1LDggKzY2OCw3IEBACiAJLyogTm8gbWF0Y2hpbmcgbmZzX2NsaWVudCBmb3VuZC4gKi8KIAlzcGluX3VubG9jaygmbm4tPm5mc19jbGllbnRfbG9jayk7CiAJZHByaW50aygiTkZTOiA8LS0gJXMgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwotCWlmIChwcmV2KQotCQluZnNfcHV0X2NsaWVudChwcmV2KTsKKwluZnNfcHV0X2NsaWVudChwcmV2KTsKIAlyZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmCS8qIENPTkZJR19ORlNfVjRfMSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRmaWxlLmMgYi9mcy9uZnMvbmZzNGZpbGUuYwppbmRleCBjNTFmYjRkLi44YjQ2Mzg5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGZpbGUuYworKysgYi9mcy9uZnMvbmZzNGZpbGUuYwpAQCAtMyw2ICszLDggQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkyICBSaWNrIFNsYWRrZXkKICAqLworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJmc2NhY2hlLmgiCkBAIC0xMzQsNiArMTM2LDMyIEBACiAJCXJldHVybiBuZnNfZmlsZV9sbHNlZWsoZmlsZXAsIG9mZnNldCwgd2hlbmNlKTsKIAl9CiB9CisKK3N0YXRpYyBsb25nIG5mczQyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlsb25nIHJldDsKKworCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKChtb2RlICE9IDApICYmIChtb2RlICE9IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUpKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0ID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICsgbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlpZiAobW9kZSAmIEZBTExPQ19GTF9QVU5DSF9IT0xFKQorCQlyZXQgPSBuZnM0Ml9wcm9jX2RlYWxsb2NhdGUoZmlsZXAsIG9mZnNldCwgbGVuKTsKKwllbHNlCisJCXJldCA9IG5mczQyX3Byb2NfYWxsb2NhdGUoZmlsZXAsIG9mZnNldCwgbGVuKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKworCW5mc196YXBfY2FjaGVzKGlub2RlKTsKKwlyZXR1cm4gcmV0OworfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMiAqLwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5mczRfZmlsZV9vcGVyYXRpb25zID0gewpAQCAtMTU1LDYgKzE4Myw5IEBACiAJLmZsb2NrCQk9IG5mc19mbG9jaywKIAkuc3BsaWNlX3JlYWQJPSBuZnNfZmlsZV9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCT0gaXRlcl9maWxlX3NwbGljZV93cml0ZSwKKyNpZmRlZiBDT05GSUdfTkZTX1Y0XzIKKwkuZmFsbG9jYXRlCT0gbmZzNDJfZmFsbG9jYXRlLAorI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMiAqLwogCS5jaGVja19mbGFncwk9IG5mc19jaGVja19mbGFncywKIAkuc2V0bGVhc2UJPSBzaW1wbGVfbm9zZXRsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IDY5ZGMyMGEuLmU3ZjhkNWYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC0xNTgsOCArMTU4LDYgQEAKIAkJcmV0dXJuIC1FQUNDRVM7CiAJY2FzZSAtTkZTNEVSUl9NSU5PUl9WRVJTX01JU01BVENIOgogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKLQljYXNlIC1ORlM0RVJSX0FDQ0VTUzoKLQkJcmV0dXJuIC1FQUNDRVM7CiAJY2FzZSAtTkZTNEVSUl9GSUxFX09QRU46CiAJCXJldHVybiAtRUJVU1k7CiAJZGVmYXVsdDoKQEAgLTM0NCw3ICszNDIsNyBAQAogLyogVGhpcyBpcyB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZSBmb3IgcHJvY2Vzc2VzIHRoYXQgYXJlIGFsbG93ZWQKICAqIHRvIHNsZWVwLgogICovCi1zdGF0aWMgaW50IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBpbnQgZXJyb3Jjb2RlLCBzdHJ1Y3QgbmZzNF9leGNlcHRpb24gKmV4Y2VwdGlvbikKK2ludCBuZnM0X2hhbmRsZV9leGNlcHRpb24oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgaW50IGVycm9yY29kZSwgc3RydWN0IG5mczRfZXhjZXB0aW9uICpleGNlcHRpb24pCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUgPSBleGNlcHRpb24tPnN0YXRlOwpAQCAtNzcwNCw2ICs3NzAyLDkgQEAKIAogCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwogCisJLyogbmZzNF9sYXlvdXRnZXRfcmVsZWFzZSBjYWxscyBwbmZzX3B1dF9sYXlvdXRfaGRyICovCisJcG5mc19nZXRfbGF5b3V0X2hkcihORlNfSShpbm9kZSktPmxheW91dCk7CisKIAlsZ3AtPmFyZ3MubGF5b3V0LnBhZ2VzID0gbmZzNF9hbGxvY19wYWdlcyhtYXhfcGFnZXMsIGdmcF9mbGFncyk7CiAJaWYgKCFsZ3AtPmFyZ3MubGF5b3V0LnBhZ2VzKSB7CiAJCW5mczRfbGF5b3V0Z2V0X3JlbGVhc2UobGdwKTsKQEAgLTc3MTYsOSArNzcxNyw2IEBACiAJbGdwLT5yZXMuc2VxX3Jlcy5zcl9zbG90ID0gTlVMTDsKIAluZnM0X2luaXRfc2VxdWVuY2UoJmxncC0+YXJncy5zZXFfYXJncywgJmxncC0+cmVzLnNlcV9yZXMsIDApOwogCi0JLyogbmZzNF9sYXlvdXRnZXRfcmVsZWFzZSBjYWxscyBwbmZzX3B1dF9sYXlvdXRfaGRyICovCi0JcG5mc19nZXRfbGF5b3V0X2hkcihORlNfSShpbm9kZSktPmxheW91dCk7Ci0KIAl0YXNrID0gcnBjX3J1bl90YXNrKCZ0YXNrX3NldHVwX2RhdGEpOwogCWlmIChJU19FUlIodGFzaykpCiAJCXJldHVybiBFUlJfQ0FTVCh0YXNrKTsKQEAgLTg0MjYsNiArODQyNCw4IEBACiAJCXwgTkZTX0NBUF9QT1NJWF9MT0NLCiAJCXwgTkZTX0NBUF9TVEFURUlEX05GU1Y0MQogCQl8IE5GU19DQVBfQVRPTUlDX09QRU5fVjEKKwkJfCBORlNfQ0FQX0FMTE9DQVRFCisJCXwgTkZTX0NBUF9ERUFMTE9DQVRFCiAJCXwgTkZTX0NBUF9TRUVLLAogCS5pbml0X2NsaWVudCA9IG5mczQxX2luaXRfY2xpZW50LAogCS5zaHV0ZG93bl9jbGllbnQgPSBuZnM0MV9zaHV0ZG93bl9jbGllbnQsCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCAyMDZjMDhhLi5jYjQzNzZiIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTE0MSwxMyArMTQxLDE1IEBACiAJCQkJWERSX1FVQURMRU4oTkZTNF9WRVJJRklFUl9TSVpFKSArIFwKIAkJCQlYRFJfUVVBRExFTihORlM0X1NFVENMSUVOVElEX05BTUVMRU4pICsgXAogCQkJCTEgLyogc2NfcHJvZyAqLyArIFwKLQkJCQlYRFJfUVVBRExFTihSUENCSU5EX01BWE5FVElETEVOKSArIFwKLQkJCQlYRFJfUVVBRExFTihSUENCSU5EX01BWFVBRERSTEVOKSArIFwKKwkJCQkxICsgWERSX1FVQURMRU4oUlBDQklORF9NQVhORVRJRExFTikgKyBcCisJCQkJMSArIFhEUl9RVUFETEVOKFJQQ0JJTkRfTUFYVUFERFJMRU4pICsgXAogCQkJCTEpIC8qIHNjX2NiX2lkZW50ICovCiAjZGVmaW5lIGRlY29kZV9zZXRjbGllbnRpZF9tYXhzeiBcCiAJCQkJKG9wX2RlY29kZV9oZHJfbWF4c3ogKyBcCi0JCQkJMiArIFwKLQkJCQkxMDI0KSAvKiBsYXJnZSB2YWx1ZSBmb3IgQ0xJRF9JTlVTRSAqLworCQkJCTIgLyogY2xpZW50aWQgKi8gKyBcCisJCQkJWERSX1FVQURMRU4oTkZTNF9WRVJJRklFUl9TSVpFKSArIFwKKwkJCQkxICsgWERSX1FVQURMRU4oUlBDQklORF9NQVhORVRJRExFTikgKyBcCisJCQkJMSArIFhEUl9RVUFETEVOKFJQQ0JJTkRfTUFYVUFERFJMRU4pKQogI2RlZmluZSBlbmNvZGVfc2V0Y2xpZW50aWRfY29uZmlybV9tYXhzeiBcCiAJCQkJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCiAJCQkJMyArIChORlM0X1ZFUklGSUVSX1NJWkUgPj4gMikpCkBAIC03Mzk0LDYgKzczOTYsOCBAQAogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogI2lmZGVmIENPTkZJR19ORlNfVjRfMgogCVBST0MoU0VFSywJCWVuY19zZWVrLAkJZGVjX3NlZWspLAorCVBST0MoQUxMT0NBVEUsCQllbmNfYWxsb2NhdGUsCQlkZWNfYWxsb2NhdGUpLAorCVBST0MoREVBTExPQ0FURSwJZW5jX2RlYWxsb2NhdGUsCQlkZWNfZGVhbGxvY2F0ZSksCiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8yICovCiB9OwogCmRpZmYgLS1naXQgYS9mcy9uZnMvcGFnZWxpc3QuYyBiL2ZzL25mcy9wYWdlbGlzdC5jCmluZGV4IGVkMGRiNjEuLjJiNWU3NjkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wYWdlbGlzdC5jCisrKyBiL2ZzL25mcy9wYWdlbGlzdC5jCkBAIC0yNTgsNiArMjU4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogbmZzX3BhZ2VfZ3JvdXBfaW5pdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSwgc3RydWN0IG5mc19wYWdlICpwcmV2KQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJV0FSTl9PTl9PTkNFKHByZXYgPT0gcmVxKTsKIAogCWlmICghcHJldikgewpAQCAtMjc2LDEyICsyNzcsMTYgQEAKIAkJICogbmZzX3BhZ2VfZ3JvdXBfZGVzdHJveSBpcyBjYWxsZWQgKi8KIAkJa3JlZl9nZXQoJnJlcS0+d2JfaGVhZC0+d2Jfa3JlZik7CiAKLQkJLyogZ3JhYiBleHRyYSByZWYgaWYgaGVhZCByZXF1ZXN0IGhhcyBleHRyYSByZWYgZnJvbQotCQkgKiB0aGUgd3JpdGUvY29tbWl0IHBhdGggdG8gaGFuZGxlIGhhbmRvZmYgYmV0d2VlbiB3cml0ZQotCQkgKiBhbmQgY29tbWl0IGxpc3RzICovCisJCS8qIGdyYWIgZXh0cmEgcmVmIGFuZCBidW1wIHRoZSByZXF1ZXN0IGNvdW50IGlmIGhlYWQgcmVxdWVzdAorCQkgKiBoYXMgZXh0cmEgcmVmIGZyb20gdGhlIHdyaXRlL2NvbW1pdCBwYXRoIHRvIGhhbmRsZSBoYW5kb2ZmCisJCSAqIGJldHdlZW4gd3JpdGUgYW5kIGNvbW1pdCBsaXN0cy4gKi8KIAkJaWYgKHRlc3RfYml0KFBHX0lOT0RFX1JFRiwgJnByZXYtPndiX2hlYWQtPndiX2ZsYWdzKSkgeworCQkJaW5vZGUgPSBwYWdlX2ZpbGVfbWFwcGluZyhyZXEtPndiX3BhZ2UpLT5ob3N0OwogCQkJc2V0X2JpdChQR19JTk9ERV9SRUYsICZyZXEtPndiX2ZsYWdzKTsKIAkJCWtyZWZfZ2V0KCZyZXEtPndiX2tyZWYpOworCQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJCU5GU19JKGlub2RlKS0+bnJlcXVlc3RzKys7CisJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvcmVhZC5jIGIvZnMvbmZzL3JlYWQuYwppbmRleCBiZWZmMjc2Li5jOTFhNDc5IDEwMDY0NAotLS0gYS9mcy9uZnMvcmVhZC5jCisrKyBiL2ZzL25mcy9yZWFkLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCWRwcmludGsoIk5GUzogbmZzX3JlYWRwYWdlICglcCAlbGRAJWx1KVxuIiwKIAkJcGFnZSwgUEFHRV9DQUNIRV9TSVpFLCBwYWdlX2ZpbGVfaW5kZXgocGFnZSkpOwogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19WRlNSRUFEUEFHRSk7Ci0JbmZzX2FkZF9zdGF0cyhpbm9kZSwgTkZTSU9TX1JFQURQQUdFUywgMSk7CisJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX1JFQURQQUdFUyk7CiAKIAkvKgogCSAqIFRyeSB0byBmbHVzaCBhbnkgcGVuZGluZyB3cml0ZXMgdG8gdGhlIGZpbGUuLgpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCBmODNiMDJkLi5hZjNhZjY4IDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtNTc1LDcgKzU3NSw3IEBACiAJaW50IHJldDsKIAogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19WRlNXUklURVBBR0UpOwotCW5mc19hZGRfc3RhdHMoaW5vZGUsIE5GU0lPU19XUklURVBBR0VTLCAxKTsKKwluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfV1JJVEVQQUdFUyk7CiAKIAluZnNfcGFnZWlvX2NvbmRfY29tcGxldGUocGdpbywgcGFnZV9maWxlX2luZGV4KHBhZ2UpKTsKIAlyZXQgPSBuZnNfcGFnZV9hc3luY19mbHVzaChwZ2lvLCBwYWdlLCB3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpOwpAQCAtNjcwLDcgKzY3MCw4IEBACiAJbmZzX2xvY2tfcmVxdWVzdChyZXEpOwogCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlpZiAoIW5mc2ktPm5wYWdlcyAmJiBORlNfUFJPVE8oaW5vZGUpLT5oYXZlX2RlbGVnYXRpb24oaW5vZGUsIEZNT0RFX1dSSVRFKSkKKwlpZiAoIW5mc2ktPm5yZXF1ZXN0cyAmJgorCSAgICBORlNfUFJPVE8oaW5vZGUpLT5oYXZlX2RlbGVnYXRpb24oaW5vZGUsIEZNT0RFX1dSSVRFKSkKIAkJaW5vZGUtPmlfdmVyc2lvbisrOwogCS8qCiAJICogU3dhcC1zcGFjZSBzaG91bGQgbm90IGdldCB0cnVuY2F0ZWQuIEhlbmNlIG5vIG5lZWQgdG8gcGx1ZyB0aGUgcmFjZQpAQCAtNjgxLDkgKzY4MiwxMSBAQAogCQlTZXRQYWdlUHJpdmF0ZShyZXEtPndiX3BhZ2UpOwogCQlzZXRfcGFnZV9wcml2YXRlKHJlcS0+d2JfcGFnZSwgKHVuc2lnbmVkIGxvbmcpcmVxKTsKIAl9Ci0JbmZzaS0+bnBhZ2VzKys7CisJbmZzaS0+bnJlcXVlc3RzKys7CiAJLyogdGhpcyBhIGhlYWQgcmVxdWVzdCBmb3IgYSBwYWdlIGdyb3VwIC0gbWFyayBpdCBhcyBoYXZpbmcgYW4KLQkgKiBleHRyYSByZWZlcmVuY2Ugc28gc3ViIGdyb3VwcyBjYW4gZm9sbG93IHN1aXQgKi8KKwkgKiBleHRyYSByZWZlcmVuY2Ugc28gc3ViIGdyb3VwcyBjYW4gZm9sbG93IHN1aXQuCisJICogVGhpcyBmbGFnIGFsc28gaW5mb3JtcyBwZ2lvIGxheWVyIHdoZW4gdG8gYnVtcCBucmVxdWVzdHMgd2hlbgorCSAqIGFkZGluZyBzdWJyZXF1ZXN0cy4gKi8KIAlXQVJOX09OKHRlc3RfYW5kX3NldF9iaXQoUEdfSU5PREVfUkVGLCAmcmVxLT53Yl9mbGFncykpOwogCWtyZWZfZ2V0KCZyZXEtPndiX2tyZWYpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKQEAgLTcwOSw3ICs3MTIsMTEgQEAKIAkJCXdha2VfdXBfcGFnZShoZWFkLT53Yl9wYWdlLCBQR19wcml2YXRlKTsKIAkJCWNsZWFyX2JpdChQR19NQVBQRUQsICZoZWFkLT53Yl9mbGFncyk7CiAJCX0KLQkJbmZzaS0+bnBhZ2VzLS07CisJCW5mc2ktPm5yZXF1ZXN0cy0tOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJbmZzaS0+bnJlcXVlc3RzLS07CiAJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAl9CiAKQEAgLTE3MzUsNyArMTc0Miw3IEBACiAJCS8qIERvbid0IGNvbW1pdCB5ZXQgaWYgdGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmbHVzaCBhbmQgdGhlcmUKIAkJICogYXJlIGEgbG90IG9mIG91dHN0YW5kaW5nIHdyaXRlcyBmb3IgdGhpcyBtYXBwaW5nLgogCQkgKi8KLQkJaWYgKG5mc2ktPmNvbW1pdF9pbmZvLm5jb21taXQgPD0gKG5mc2ktPm5wYWdlcyA+PiAxKSkKKwkJaWYgKG5mc2ktPmNvbW1pdF9pbmZvLm5jb21taXQgPD0gKG5mc2ktPm5yZXF1ZXN0cyA+PiAxKSkKIAkJCWdvdG8gb3V0X21hcmtfZGlydHk7CiAKIAkJLyogZG9uJ3Qgd2FpdCBmb3IgdGhlIENPTU1JVCByZXNwb25zZSAqLwpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYwppbmRleCBkYWY3NjY1Li4yODNhYTMxIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYworKysgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYwpAQCAtMjI3LDE0ICsyMjcsMTMgQEAKIAlzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmtldmVudDsKIAljaGFyIF9fdXNlciAqc3RhcnQ7CiAJaW50IHJldDsKLQlERUZJTkVfV0FJVCh3YWl0KTsKKwlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCiAJc3RhcnQgPSBidWY7CiAJZ3JvdXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKKwlhZGRfd2FpdF9xdWV1ZSgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgJndhaXQpOwogCXdoaWxlICgxKSB7Ci0JCXByZXBhcmVfdG9fd2FpdCgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KIAkJbXV0ZXhfbG9jaygmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CiAJCWtldmVudCA9IGdldF9vbmVfZXZlbnQoZ3JvdXAsIGNvdW50KTsKIAkJbXV0ZXhfdW5sb2NrKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KTsKQEAgLTI2NCwxMCArMjYzLDEwIEBACiAJCWlmIChzdGFydCAhPSBidWYpCiAJCQlicmVhazsKIAotCQlzY2hlZHVsZSgpOworCQl3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAl9CisJcmVtb3ZlX3dhaXRfcXVldWUoJmdyb3VwLT5ub3RpZmljYXRpb25fd2FpdHEsICZ3YWl0KTsKIAotCWZpbmlzaF93YWl0KCZncm91cC0+bm90aWZpY2F0aW9uX3dhaXRxLCAmd2FpdCk7CiAJaWYgKHN0YXJ0ICE9IGJ1ZiAmJiByZXQgIT0gLUVGQVVMVCkKIAkJcmV0ID0gYnVmIC0gc3RhcnQ7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA0ZTAzODhjLi5mNjczNGM2IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC01NTIsNiArNTUyLDkgQEAKIAkJW2lsb2cyKFZNX0dST1dTRE9XTildCT0gImdkIiwKIAkJW2lsb2cyKFZNX1BGTk1BUCldCT0gInBmIiwKIAkJW2lsb2cyKFZNX0RFTllXUklURSldCT0gImR3IiwKKyNpZmRlZiBDT05GSUdfWDg2X0lOVEVMX01QWAorCQlbaWxvZzIoVk1fTVBYKV0JCT0gIm1wIiwKKyNlbmRpZgogCQlbaWxvZzIoVk1fTE9DS0VEKV0JPSAibG8iLAogCQlbaWxvZzIoVk1fSU8pXQkJPSAiaW8iLAogCQlbaWxvZzIoVk1fU0VRX1JFQUQpXQk9ICJzciIsCmRpZmYgLS1naXQgYS9mcy9wc3RvcmUvaW5vZGUuYyBiL2ZzL3BzdG9yZS9pbm9kZS5jCmluZGV4IGZhZmI3YTAuLjUwNDE2NjAgMTAwNjQ0Ci0tLSBhL2ZzL3BzdG9yZS9pbm9kZS5jCisrKyBiL2ZzL3BzdG9yZS9pbm9kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2xvZy5oPgogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIApAQCAtMTIwLDYgKzEyMSwxOCBAQAogCS5zaG93CT0gcHN0b3JlX2Z0cmFjZV9zZXFfc2hvdywKIH07CiAKK3N0YXRpYyBpbnQgcHN0b3JlX2NoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyhzdHJ1Y3QgcHN0b3JlX3ByaXZhdGUgKnBzKQoreworCXN3aXRjaCAocHMtPnR5cGUpIHsKKwljYXNlIFBTVE9SRV9UWVBFX0RNRVNHOgorCWNhc2UgUFNUT1JFX1RZUEVfQ09OU09MRToKKwkJcmV0dXJuIGNoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyhTWVNMT0dfQUNUSU9OX1JFQURfQUxMLAorCQkJU1lTTE9HX0ZST01fUkVBREVSKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKIHN0YXRpYyBzc2l6ZV90IHBzdG9yZV9maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAogCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0xMzgsNiArMTUxLDEwIEBACiAJaW50IGVycjsKIAljb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgKnNvcHMgPSBOVUxMOwogCisJZXJyID0gcHN0b3JlX2NoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyhwcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWlmIChwcy0+dHlwZSA9PSBQU1RPUkVfVFlQRV9GVFJBQ0UpCiAJCXNvcHMgPSAmcHN0b3JlX2Z0cmFjZV9zZXFfb3BzOwogCkBAIC0xNzQsNiArMTkxLDExIEBACiBzdGF0aWMgaW50IHBzdG9yZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlzdHJ1Y3QgcHN0b3JlX3ByaXZhdGUgKnAgPSBkZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKKwlpbnQgZXJyOworCisJZXJyID0gcHN0b3JlX2NoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyhwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKHAtPnBzaS0+ZXJhc2UpCiAJCXAtPnBzaS0+ZXJhc2UocC0+dHlwZSwgcC0+aWQsIHAtPmNvdW50LApkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL3JhbS5jIGIvZnMvcHN0b3JlL3JhbS5jCmluZGV4IDNiNTc0NDMuLmVjODgxYjMgMTAwNjQ0Ci0tLSBhL2ZzL3BzdG9yZS9yYW0uYworKysgYi9mcy9wc3RvcmUvcmFtLmMKQEAgLTEzNSwyNSArMTM1LDI3IEBACiAJcmV0dXJuIHByejsKIH0KIAotc3RhdGljIHZvaWQgcmFtb29wc19yZWFkX2ttc2dfaGRyKGNoYXIgKmJ1ZmZlciwgc3RydWN0IHRpbWVzcGVjICp0aW1lLAorc3RhdGljIGludCByYW1vb3BzX3JlYWRfa21zZ19oZHIoY2hhciAqYnVmZmVyLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWUsCiAJCQkJICBib29sICpjb21wcmVzc2VkKQogewogCWNoYXIgZGF0YV90eXBlOworCWludCBoZWFkZXJfbGVuZ3RoID0gMDsKIAotCWlmIChzc2NhbmYoYnVmZmVyLCBSQU1PT1BTX0tFUk5NU0dfSERSICIlbHUuJWx1LSVjXG4iLAotCQkJJnRpbWUtPnR2X3NlYywgJnRpbWUtPnR2X25zZWMsICZkYXRhX3R5cGUpID09IDMpIHsKKwlpZiAoc3NjYW5mKGJ1ZmZlciwgUkFNT09QU19LRVJOTVNHX0hEUiAiJWx1LiVsdS0lY1xuJW4iLCAmdGltZS0+dHZfc2VjLAorCQkJJnRpbWUtPnR2X25zZWMsICZkYXRhX3R5cGUsICZoZWFkZXJfbGVuZ3RoKSA9PSAzKSB7CiAJCWlmIChkYXRhX3R5cGUgPT0gJ0MnKQogCQkJKmNvbXByZXNzZWQgPSB0cnVlOwogCQllbHNlCiAJCQkqY29tcHJlc3NlZCA9IGZhbHNlOwotCX0gZWxzZSBpZiAoc3NjYW5mKGJ1ZmZlciwgUkFNT09QU19LRVJOTVNHX0hEUiAiJWx1LiVsdVxuIiwKLQkJCSZ0aW1lLT50dl9zZWMsICZ0aW1lLT50dl9uc2VjKSA9PSAyKSB7CisJfSBlbHNlIGlmIChzc2NhbmYoYnVmZmVyLCBSQU1PT1BTX0tFUk5NU0dfSERSICIlbHUuJWx1XG4lbiIsCisJCQkmdGltZS0+dHZfc2VjLCAmdGltZS0+dHZfbnNlYywgJmhlYWRlcl9sZW5ndGgpID09IDIpIHsKIAkJCSpjb21wcmVzc2VkID0gZmFsc2U7CiAJfSBlbHNlIHsKIAkJdGltZS0+dHZfc2VjID0gMDsKIAkJdGltZS0+dHZfbnNlYyA9IDA7CiAJCSpjb21wcmVzc2VkID0gZmFsc2U7CiAJfQorCXJldHVybiBoZWFkZXJfbGVuZ3RoOwogfQogCiBzdGF0aWMgc3NpemVfdCByYW1vb3BzX3BzdG9yZV9yZWFkKHU2NCAqaWQsIGVudW0gcHN0b3JlX3R5cGVfaWQgKnR5cGUsCkBAIC0xNjUsNiArMTY3LDcgQEAKIAlzc2l6ZV90IGVjY19ub3RpY2Vfc2l6ZTsKIAlzdHJ1Y3QgcmFtb29wc19jb250ZXh0ICpjeHQgPSBwc2ktPmRhdGE7CiAJc3RydWN0IHBlcnNpc3RlbnRfcmFtX3pvbmUgKnByejsKKwlpbnQgaGVhZGVyX2xlbmd0aDsKIAogCXByeiA9IHJhbW9vcHNfZ2V0X25leHRfcHJ6KGN4dC0+cHJ6cywgJmN4dC0+ZHVtcF9yZWFkX2NudCwKIAkJCQkgICBjeHQtPm1heF9kdW1wX2NudCwgaWQsIHR5cGUsCkBAIC0xNzgsNyArMTgxLDEzIEBACiAJaWYgKCFwcnopCiAJCXJldHVybiAwOwogCisJaWYgKCFwZXJzaXN0ZW50X3JhbV9vbGQocHJ6KSkKKwkJcmV0dXJuIDA7CisKIAlzaXplID0gcGVyc2lzdGVudF9yYW1fb2xkX3NpemUocHJ6KTsKKwloZWFkZXJfbGVuZ3RoID0gcmFtb29wc19yZWFkX2ttc2dfaGRyKHBlcnNpc3RlbnRfcmFtX29sZChwcnopLCB0aW1lLAorCQkJY29tcHJlc3NlZCk7CisJc2l6ZSAtPSBoZWFkZXJfbGVuZ3RoOwogCiAJLyogRUNDIGNvcnJlY3Rpb24gbm90aWNlICovCiAJZWNjX25vdGljZV9zaXplID0gcGVyc2lzdGVudF9yYW1fZWNjX3N0cmluZyhwcnosIE5VTEwsIDApOwpAQCAtMTg3LDggKzE5Niw3IEBACiAJaWYgKCpidWYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkoKmJ1ZiwgcGVyc2lzdGVudF9yYW1fb2xkKHByeiksIHNpemUpOwotCXJhbW9vcHNfcmVhZF9rbXNnX2hkcigqYnVmLCB0aW1lLCBjb21wcmVzc2VkKTsKKwltZW1jcHkoKmJ1ZiwgKGNoYXIgKilwZXJzaXN0ZW50X3JhbV9vbGQocHJ6KSArIGhlYWRlcl9sZW5ndGgsIHNpemUpOwogCXBlcnNpc3RlbnRfcmFtX2VjY19zdHJpbmcocHJ6LCAqYnVmICsgc2l6ZSwgZWNjX25vdGljZV9zaXplICsgMSk7CiAKIAlyZXR1cm4gc2l6ZSArIGVjY19ub3RpY2Vfc2l6ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZnV0ZXguaAppbmRleCAwMWYyMjdlLi5iNTliNWE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mdXRleC5oCkBAIC01LDYgKzUsMTE5IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogCisjaWZuZGVmIENPTkZJR19TTVAKKy8qCisgKiBUaGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIG9ubHkgZm9yIHVuaXByb2Nlc3NvciBtYWNoaW5lcy4KKyAqIEZvciBVUCwgaXQncyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBwYWdlZmF1bHRfZGlzYWJsZSgpIGFsc28gZGlzYWJsZXMKKyAqIHByZWVtcHRpb24gdG8gZW5zdXJlIG11dHVhbCBleGNsdXNpb24uCisgKgorICovCisKKy8qKgorICogZnV0ZXhfYXRvbWljX29wX2ludXNlcigpIC0gQXRvbWljIGFyaXRobWV0aWMgb3BlcmF0aW9uIHdpdGggY29uc3RhbnQKKyAqCQkJICBhcmd1bWVudCBhbmQgY29tcGFyaXNvbiBvZiB0aGUgcHJldmlvdXMKKyAqCQkJICBmdXRleCB2YWx1ZSB3aXRoIGFub3RoZXIgY29uc3RhbnQuCisgKgorICogQGVuY29kZWRfb3A6CWVuY29kZWQgb3BlcmF0aW9uIHRvIGV4ZWN1dGUKKyAqIEB1YWRkcjoJcG9pbnRlciB0byB1c2VyIHNwYWNlIGFkZHJlc3MKKyAqCisgKiBSZXR1cm46CisgKiAwIC0gT24gc3VjY2VzcworICogPDAgLSBPbiBlcnJvcgorICovCitzdGF0aWMgaW5saW5lIGludAorZnV0ZXhfYXRvbWljX29wX2ludXNlcihpbnQgZW5jb2RlZF9vcCwgdTMyIF9fdXNlciAqdWFkZHIpCit7CisJaW50IG9wID0gKGVuY29kZWRfb3AgPj4gMjgpICYgNzsKKwlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CisJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CisJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKKwlpbnQgb2xkdmFsLCByZXQ7CisJdTMyIHRtcDsKKworCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKKwkJb3BhcmcgPSAxIDw8IG9wYXJnOworCisJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKworCXJldCA9IC1FRkFVTFQ7CisJaWYgKHVubGlrZWx5KGdldF91c2VyKG9sZHZhbCwgdWFkZHIpICE9IDApKQorCQlnb3RvIG91dF9wYWdlZmF1bHRfZW5hYmxlOworCisJcmV0ID0gMDsKKwl0bXAgPSBvbGR2YWw7CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBGVVRFWF9PUF9TRVQ6CisJCXRtcCA9IG9wYXJnOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX0FERDoKKwkJdG1wICs9IG9wYXJnOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX09SOgorCQl0bXAgfD0gb3Bhcmc7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfQU5ETjoKKwkJdG1wICY9IH5vcGFyZzsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9YT1I6CisJCXRtcCBePSBvcGFyZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwl9CisKKwlpZiAocmV0ID09IDAgJiYgdW5saWtlbHkocHV0X3VzZXIodG1wLCB1YWRkcikgIT0gMCkpCisJCXJldCA9IC1FRkFVTFQ7CisKK291dF9wYWdlZmF1bHRfZW5hYmxlOgorCXBhZ2VmYXVsdF9lbmFibGUoKTsKKworCWlmIChyZXQgPT0gMCkgeworCQlzd2l0Y2ggKGNtcCkgeworCQljYXNlIEZVVEVYX09QX0NNUF9FUTogcmV0ID0gKG9sZHZhbCA9PSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTkU6IHJldCA9IChvbGR2YWwgIT0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0xUOiByZXQgPSAob2xkdmFsIDwgY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0dFOiByZXQgPSAob2xkdmFsID49IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9MRTogcmV0ID0gKG9sZHZhbCA8PSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfR1Q6IHJldCA9IChvbGR2YWwgPiBjbXBhcmcpOyBicmVhazsKKwkJZGVmYXVsdDogcmV0ID0gLUVOT1NZUzsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKCkgLSBDb21wYXJlIGFuZCBleGNoYW5nZSB0aGUgY29udGVudCBvZiB0aGUKKyAqCQkJCXVhZGRyIHdpdGggbmV3dmFsIGlmIHRoZSBjdXJyZW50IHZhbHVlIGlzCisgKgkJCQlvbGR2YWwuCisgKiBAdXZhbDoJcG9pbnRlciB0byBzdG9yZSBjb250ZW50IG9mIEB1YWRkcgorICogQHVhZGRyOglwb2ludGVyIHRvIHVzZXIgc3BhY2UgYWRkcmVzcworICogQG9sZHZhbDoJb2xkIHZhbHVlCisgKiBAbmV3dmFsOgluZXcgdmFsdWUgdG8gc3RvcmUgdG8gQHVhZGRyCisgKgorICogUmV0dXJuOgorICogMCAtIE9uIHN1Y2Nlc3MKKyAqIDwwIC0gT24gZXJyb3IKKyAqLworc3RhdGljIGlubGluZSBpbnQKK2Z1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKHUzMiAqdXZhbCwgdTMyIF9fdXNlciAqdWFkZHIsCisJCQkgICAgICB1MzIgb2xkdmFsLCB1MzIgbmV3dmFsKQoreworCXUzMiB2YWw7CisKKwlpZiAodW5saWtlbHkoZ2V0X3VzZXIodmFsLCB1YWRkcikgIT0gMCkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHZhbCA9PSBvbGR2YWwgJiYgdW5saWtlbHkocHV0X3VzZXIobmV3dmFsLCB1YWRkcikgIT0gMCkpCisJCXJldHVybiAtRUZBVUxUOworCisJKnV2YWwgPSB2YWw7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50CiBmdXRleF9hdG9taWNfb3BfaW51c2VyIChpbnQgZW5jb2RlZF9vcCwgdTMyIF9fdXNlciAqdWFkZHIpCiB7CkBAIC01NCw0ICsxNjcsNSBAQAogCXJldHVybiAtRU5PU1lTOwogfQogCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2lvLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lvLmgKaW5kZXggYjhmZGM1Ny4uOWRiMDQyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaW8uaApAQCAtMTIsNiArMTIsNyBAQAogI2RlZmluZSBfX0FTTV9HRU5FUklDX0lPX0gKIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+IC8qIEkvTyBpcyBhbGwgZG9uZSB0aHJvdWdoIG1lbW9yeSBhY2Nlc3NlcyAqLworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPiAvKiBmb3IgbWVtc2V0KCkgYW5kIG1lbWNweSgpICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0lPTUFQCkBAIC0yNCwyNjAgKzI1LDY5MSBAQAogI2RlZmluZSBtbWlvd2IoKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogcmVhZFgvd3JpdGVYKCkgYXJlIHVzZWQgdG8gYWNjZXNzIG1lbW9yeSBtYXBwZWQgZGV2aWNlcy4gT24gc29tZQotICogYXJjaGl0ZWN0dXJlcyB0aGUgbWVtb3J5IG1hcHBlZCBJTyBzdHVmZiBuZWVkcyB0byBiZSBhY2Nlc3NlZAotICogZGlmZmVyZW50bHkuIE9uIHRoZSBzaW1wbGUgYXJjaGl0ZWN0dXJlcywgd2UganVzdCByZWFkL3dyaXRlIHRoZQotICogbWVtb3J5IGxvY2F0aW9uIGRpcmVjdGx5LgorICogX19yYXdfe3JlYWQsd3JpdGV9e2IsdyxsLHF9KCkgYWNjZXNzIG1lbW9yeSBpbiBuYXRpdmUgZW5kaWFubmVzcy4KKyAqCisgKiBPbiBzb21lIGFyY2hpdGVjdHVyZXMgbWVtb3J5IG1hcHBlZCBJTyBuZWVkcyB0byBiZSBhY2Nlc3NlZCBkaWZmZXJlbnRseS4KKyAqIE9uIHRoZSBzaW1wbGUgYXJjaGl0ZWN0dXJlcywgd2UganVzdCByZWFkL3dyaXRlIHRoZSBtZW1vcnkgbG9jYXRpb24KKyAqIGRpcmVjdGx5LgogICovCisKICNpZm5kZWYgX19yYXdfcmVhZGIKKyNkZWZpbmUgX19yYXdfcmVhZGIgX19yYXdfcmVhZGIKIHN0YXRpYyBpbmxpbmUgdTggX19yYXdfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewotCXJldHVybiAqKGNvbnN0IHZvbGF0aWxlIHU4IF9fZm9yY2UgKikgYWRkcjsKKwlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1OCBfX2ZvcmNlICopYWRkcjsKIH0KICNlbmRpZgogCiAjaWZuZGVmIF9fcmF3X3JlYWR3CisjZGVmaW5lIF9fcmF3X3JlYWR3IF9fcmF3X3JlYWR3CiBzdGF0aWMgaW5saW5lIHUxNiBfX3Jhd19yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0JcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdTE2IF9fZm9yY2UgKikgYWRkcjsKKwlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1MTYgX19mb3JjZSAqKWFkZHI7CiB9CiAjZW5kaWYKIAogI2lmbmRlZiBfX3Jhd19yZWFkbAorI2RlZmluZSBfX3Jhd19yZWFkbCBfX3Jhd19yZWFkbAogc3RhdGljIGlubGluZSB1MzIgX19yYXdfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewotCXJldHVybiAqKGNvbnN0IHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopIGFkZHI7CisJcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdTMyIF9fZm9yY2UgKilhZGRyOwogfQogI2VuZGlmCiAKLSNkZWZpbmUgcmVhZGIgX19yYXdfcmVhZGIKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgX19yYXdfcmVhZHEKKyNkZWZpbmUgX19yYXdfcmVhZHEgX19yYXdfcmVhZHEKK3N0YXRpYyBpbmxpbmUgdTY0IF9fcmF3X3JlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1NjQgX19mb3JjZSAqKWFkZHI7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAorI2lmbmRlZiBfX3Jhd193cml0ZWIKKyNkZWZpbmUgX19yYXdfd3JpdGViIF9fcmF3X3dyaXRlYgorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1OCB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdTggX19mb3JjZSAqKWFkZHIgPSB2YWx1ZTsKK30KKyNlbmRpZgorCisjaWZuZGVmIF9fcmF3X3dyaXRldworI2RlZmluZSBfX3Jhd193cml0ZXcgX19yYXdfd3JpdGV3CitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGV3KHUxNiB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdTE2IF9fZm9yY2UgKilhZGRyID0gdmFsdWU7Cit9CisjZW5kaWYKKworI2lmbmRlZiBfX3Jhd193cml0ZWwKKyNkZWZpbmUgX19yYXdfd3JpdGVsIF9fcmF3X3dyaXRlbAorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlbCh1MzIgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopYWRkciA9IHZhbHVlOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgX19yYXdfd3JpdGVxCisjZGVmaW5lIF9fcmF3X3dyaXRlcSBfX3Jhd193cml0ZXEKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXEodTY0IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKWFkZHIgPSB2YWx1ZTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCisvKgorICoge3JlYWQsd3JpdGV9e2IsdyxsLHF9KCkgYWNjZXNzIGxpdHRsZSBlbmRpYW4gbWVtb3J5IGFuZCByZXR1cm4gcmVzdWx0IGluCisgKiBuYXRpdmUgZW5kaWFubmVzcy4KKyAqLworCisjaWZuZGVmIHJlYWRiCisjZGVmaW5lIHJlYWRiIHJlYWRiCitzdGF0aWMgaW5saW5lIHU4IHJlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGIoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiByZWFkdwogI2RlZmluZSByZWFkdyByZWFkdwogc3RhdGljIGlubGluZSB1MTYgcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXJldHVybiBfX2xlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KGFkZHIpKTsKIH0KKyNlbmRpZgogCisjaWZuZGVmIHJlYWRsCiAjZGVmaW5lIHJlYWRsIHJlYWRsCiBzdGF0aWMgaW5saW5lIHUzMiByZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJcmV0dXJuIF9fbGUzMl90b19jcHUoX19yYXdfcmVhZGwoYWRkcikpOwogfQotCi0jaWZuZGVmIF9fcmF3X3dyaXRlYgotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JKih2b2xhdGlsZSB1OCBfX2ZvcmNlICopIGFkZHIgPSBiOwotfQogI2VuZGlmCiAKLSNpZm5kZWYgX19yYXdfd3JpdGV3Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGV3KHUxNiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JKih2b2xhdGlsZSB1MTYgX19mb3JjZSAqKSBhZGRyID0gYjsKLX0KLSNlbmRpZgotCi0jaWZuZGVmIF9fcmF3X3dyaXRlbAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlbCh1MzIgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCSoodm9sYXRpbGUgdTMyIF9fZm9yY2UgKikgYWRkciA9IGI7Ci19Ci0jZW5kaWYKLQotI2RlZmluZSB3cml0ZWIgX19yYXdfd3JpdGViCi0jZGVmaW5lIHdyaXRldyhiLGFkZHIpIF9fcmF3X3dyaXRldyhfX2NwdV90b19sZTE2KGIpLGFkZHIpCi0jZGVmaW5lIHdyaXRlbChiLGFkZHIpIF9fcmF3X3dyaXRlbChfX2NwdV90b19sZTMyKGIpLGFkZHIpCi0KICNpZmRlZiBDT05GSUdfNjRCSVQKLSNpZm5kZWYgX19yYXdfcmVhZHEKLXN0YXRpYyBpbmxpbmUgdTY0IF9fcmF3X3JlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1NjQgX19mb3JjZSAqKSBhZGRyOwotfQotI2VuZGlmCi0KKyNpZm5kZWYgcmVhZHEKICNkZWZpbmUgcmVhZHEgcmVhZHEKIHN0YXRpYyBpbmxpbmUgdTY0IHJlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gX19sZTY0X3RvX2NwdShfX3Jhd19yZWFkcShhZGRyKSk7CiB9Ci0KLSNpZm5kZWYgX19yYXdfd3JpdGVxCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVxKHU2NCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKSBhZGRyID0gYjsKLX0KICNlbmRpZgotCi0jZGVmaW5lIHdyaXRlcShiLCBhZGRyKSBfX3Jhd193cml0ZXEoX19jcHVfdG9fbGU2NChiKSwgYWRkcikKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAotI2lmbmRlZiBQQ0lfSU9CQVNFCi0jZGVmaW5lIFBDSV9JT0JBU0UgKCh2b2lkIF9faW9tZW0gKikgMCkKKyNpZm5kZWYgd3JpdGViCisjZGVmaW5lIHdyaXRlYiB3cml0ZWIKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWIodTggdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZWIodmFsdWUsIGFkZHIpOworfQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgd3JpdGV3CisjZGVmaW5lIHdyaXRldyB3cml0ZXcKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXcodTE2IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGV3KGNwdV90b19sZTE2KHZhbHVlKSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiB3cml0ZWwKKyNkZWZpbmUgd3JpdGVsIHdyaXRlbAorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlbCh1MzIgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZWwoX19jcHVfdG9fbGUzMih2YWx1ZSksIGFkZHIpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgd3JpdGVxCisjZGVmaW5lIHdyaXRlcSB3cml0ZXEKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXEodTY0IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGVxKF9fY3B1X3RvX2xlNjQodmFsdWUpLCBhZGRyKTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCiAvKgotICogdHJhZGl0aW9uYWwgaW5wdXQvb3V0cHV0IGZ1bmN0aW9ucworICoge3JlYWQsd3JpdGV9e2IsdyxsLHF9X3JlbGF4ZWQoKSBhcmUgbGlrZSB0aGUgcmVndWxhciB2ZXJzaW9uLCBidXQKKyAqIGFyZSBub3QgZ3VhcmFudGVlZCB0byBwcm92aWRlIG9yZGVyaW5nIGFnYWluc3Qgc3BpbmxvY2tzIG9yIG1lbW9yeQorICogYWNjZXNzZXMuCiAgKi8KKyNpZm5kZWYgcmVhZGJfcmVsYXhlZAorI2RlZmluZSByZWFkYl9yZWxheGVkIHJlYWRiCisjZW5kaWYKIAotc3RhdGljIGlubGluZSB1OCBpbmIodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiByZWFkYihhZGRyICsgUENJX0lPQkFTRSk7Ci19CisjaWZuZGVmIHJlYWR3X3JlbGF4ZWQKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZCByZWFkdworI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdTE2IGludyh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIHJlYWR3KGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KKyNpZm5kZWYgcmVhZGxfcmVsYXhlZAorI2RlZmluZSByZWFkbF9yZWxheGVkIHJlYWRsCisjZW5kaWYKIAotc3RhdGljIGlubGluZSB1MzIgaW5sKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gcmVhZGwoYWRkciArIFBDSV9JT0JBU0UpOwotfQorI2lmbmRlZiByZWFkcV9yZWxheGVkCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQgcmVhZHEKKyNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0Yih1OCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jd3JpdGViKGIsIGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KKyNpZm5kZWYgd3JpdGViX3JlbGF4ZWQKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQgd3JpdGViCisjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIG91dHcodTE2IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl3cml0ZXcoYiwgYWRkciArIFBDSV9JT0JBU0UpOwotfQorI2lmbmRlZiB3cml0ZXdfcmVsYXhlZAorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCB3cml0ZXcKKyNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0bCh1MzIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXdyaXRlbChiLCBhZGRyICsgUENJX0lPQkFTRSk7Ci19CisjaWZuZGVmIHdyaXRlbF9yZWxheGVkCisjZGVmaW5lIHdyaXRlbF9yZWxheGVkIHdyaXRlbAorI2VuZGlmCiAKLSNkZWZpbmUgaW5iX3AoYWRkcikJaW5iKGFkZHIpCi0jZGVmaW5lIGlud19wKGFkZHIpCWludyhhZGRyKQotI2RlZmluZSBpbmxfcChhZGRyKQlpbmwoYWRkcikKLSNkZWZpbmUgb3V0Yl9wKHgsIGFkZHIpCW91dGIoKHgpLCAoYWRkcikpCi0jZGVmaW5lIG91dHdfcCh4LCBhZGRyKQlvdXR3KCh4KSwgKGFkZHIpKQotI2RlZmluZSBvdXRsX3AoeCwgYWRkcikJb3V0bCgoeCksIChhZGRyKSkKKyNpZm5kZWYgd3JpdGVxX3JlbGF4ZWQKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQgd3JpdGVxCisjZW5kaWYKIAotI2lmbmRlZiBpbnNiCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5zYih1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQorLyoKKyAqIHtyZWFkLHdyaXRlfXN7Yix3LGwscX0oKSByZXBlYXRlZGx5IGFjY2VzcyB0aGUgc2FtZSBtZW1vcnkgYWRkcmVzcyBpbgorICogbmF0aXZlIGVuZGlhbm5lc3MgaW4gOC0sIDE2LSwgMzItIG9yIDY0LWJpdCBjaHVua3MgKEBjb3VudCB0aW1lcykuCisgKi8KKyNpZm5kZWYgcmVhZHNiCisjZGVmaW5lIHJlYWRzYiByZWFkc2IKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkc2IoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWZmZXIsCisJCQkgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpZiAoY291bnQpIHsKIAkJdTggKmJ1ZiA9IGJ1ZmZlcjsKKwogCQlkbyB7Ci0JCQl1OCB4ID0gX19yYXdfcmVhZGIoYWRkciArIFBDSV9JT0JBU0UpOworCQkJdTggeCA9IF9fcmF3X3JlYWRiKGFkZHIpOwogCQkJKmJ1ZisrID0geDsKIAkJfSB3aGlsZSAoLS1jb3VudCk7CiAJfQogfQogI2VuZGlmCiAKLSNpZm5kZWYgaW5zdwotc3RhdGljIGlubGluZSB2b2lkIGluc3codW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKKyNpZm5kZWYgcmVhZHN3CisjZGVmaW5lIHJlYWRzdyByZWFkc3cKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkc3coY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWZmZXIsCisJCQkgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpZiAoY291bnQpIHsKIAkJdTE2ICpidWYgPSBidWZmZXI7CisKIAkJZG8gewotCQkJdTE2IHggPSBfX3Jhd19yZWFkdyhhZGRyICsgUENJX0lPQkFTRSk7CisJCQl1MTYgeCA9IF9fcmF3X3JlYWR3KGFkZHIpOwogCQkJKmJ1ZisrID0geDsKIAkJfSB3aGlsZSAoLS1jb3VudCk7CiAJfQogfQogI2VuZGlmCiAKLSNpZm5kZWYgaW5zbAotc3RhdGljIGlubGluZSB2b2lkIGluc2wodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKKyNpZm5kZWYgcmVhZHNsCisjZGVmaW5lIHJlYWRzbCByZWFkc2wKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkc2woY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWZmZXIsCisJCQkgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpZiAoY291bnQpIHsKIAkJdTMyICpidWYgPSBidWZmZXI7CisKIAkJZG8gewotCQkJdTMyIHggPSBfX3Jhd19yZWFkbChhZGRyICsgUENJX0lPQkFTRSk7CisJCQl1MzIgeCA9IF9fcmF3X3JlYWRsKGFkZHIpOwogCQkJKmJ1ZisrID0geDsKIAkJfSB3aGlsZSAoLS1jb3VudCk7CiAJfQogfQogI2VuZGlmCiAKLSNpZm5kZWYgb3V0c2IKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzYih1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQorI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiByZWFkc3EKKyNkZWZpbmUgcmVhZHNxIHJlYWRzcQorc3RhdGljIGlubGluZSB2b2lkIHJlYWRzcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmJ1ZmZlciwKKwkJCSAgdW5zaWduZWQgaW50IGNvdW50KQoreworCWlmIChjb3VudCkgeworCQl1NjQgKmJ1ZiA9IGJ1ZmZlcjsKKworCQlkbyB7CisJCQl1NjQgeCA9IF9fcmF3X3JlYWRxKGFkZHIpOworCQkJKmJ1ZisrID0geDsKKwkJfSB3aGlsZSAoLS1jb3VudCk7CisJfQorfQorI2VuZGlmCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCisKKyNpZm5kZWYgd3JpdGVzYgorI2RlZmluZSB3cml0ZXNiIHdyaXRlc2IKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXNiKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQogewogCWlmIChjb3VudCkgewogCQljb25zdCB1OCAqYnVmID0gYnVmZmVyOworCiAJCWRvIHsKLQkJCV9fcmF3X3dyaXRlYigqYnVmKyssIGFkZHIgKyBQQ0lfSU9CQVNFKTsKKwkJCV9fcmF3X3dyaXRlYigqYnVmKyssIGFkZHIpOwogCQl9IHdoaWxlICgtLWNvdW50KTsKIAl9CiB9CiAjZW5kaWYKIAotI2lmbmRlZiBvdXRzdwotc3RhdGljIGlubGluZSB2b2lkIG91dHN3KHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCisjaWZuZGVmIHdyaXRlc3cKKyNkZWZpbmUgd3JpdGVzdyB3cml0ZXN3CitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzdyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpZiAoY291bnQpIHsKIAkJY29uc3QgdTE2ICpidWYgPSBidWZmZXI7CisKIAkJZG8gewotCQkJX19yYXdfd3JpdGV3KCpidWYrKywgYWRkciArIFBDSV9JT0JBU0UpOworCQkJX19yYXdfd3JpdGV3KCpidWYrKywgYWRkcik7CiAJCX0gd2hpbGUgKC0tY291bnQpOwogCX0KIH0KICNlbmRpZgogCi0jaWZuZGVmIG91dHNsCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0c2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKKyNpZm5kZWYgd3JpdGVzbAorI2RlZmluZSB3cml0ZXNsIHdyaXRlc2wKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXNsKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQogewogCWlmIChjb3VudCkgewogCQljb25zdCB1MzIgKmJ1ZiA9IGJ1ZmZlcjsKKwogCQlkbyB7Ci0JCQlfX3Jhd193cml0ZWwoKmJ1ZisrLCBhZGRyICsgUENJX0lPQkFTRSk7CisJCQlfX3Jhd193cml0ZWwoKmJ1ZisrLCBhZGRyKTsKIAkJfSB3aGlsZSAoLS1jb3VudCk7CiAJfQogfQogI2VuZGlmCiAKLSNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSU9NQVAKLSNkZWZpbmUgaW9yZWFkOChhZGRyKQkJcmVhZGIoYWRkcikKLSNkZWZpbmUgaW9yZWFkMTYoYWRkcikJCXJlYWR3KGFkZHIpCi0jZGVmaW5lIGlvcmVhZDE2YmUoYWRkcikJX19iZTE2X3RvX2NwdShfX3Jhd19yZWFkdyhhZGRyKSkKLSNkZWZpbmUgaW9yZWFkMzIoYWRkcikJCXJlYWRsKGFkZHIpCi0jZGVmaW5lIGlvcmVhZDMyYmUoYWRkcikJX19iZTMyX3RvX2NwdShfX3Jhd19yZWFkbChhZGRyKSkKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgd3JpdGVzcQorI2RlZmluZSB3cml0ZXNxIHdyaXRlc3EKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXNxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQoreworCWlmIChjb3VudCkgeworCQljb25zdCB1NjQgKmJ1ZiA9IGJ1ZmZlcjsKIAotI2RlZmluZSBpb3dyaXRlOCh2LCBhZGRyKQl3cml0ZWIoKHYpLCAoYWRkcikpCi0jZGVmaW5lIGlvd3JpdGUxNih2LCBhZGRyKQl3cml0ZXcoKHYpLCAoYWRkcikpCi0jZGVmaW5lIGlvd3JpdGUxNmJlKHYsIGFkZHIpCV9fcmF3X3dyaXRldyhfX2NwdV90b19iZTE2KHYpLCBhZGRyKQotI2RlZmluZSBpb3dyaXRlMzIodiwgYWRkcikJd3JpdGVsKCh2KSwgKGFkZHIpKQotI2RlZmluZSBpb3dyaXRlMzJiZSh2LCBhZGRyKQlfX3Jhd193cml0ZWwoX19jcHVfdG9fYmUzMih2KSwgYWRkcikKKwkJZG8geworCQkJX19yYXdfd3JpdGVxKCpidWYrKywgYWRkcik7CisJCX0gd2hpbGUgKC0tY291bnQpOworCX0KK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCi0jZGVmaW5lIGlvcmVhZDhfcmVwKHAsIGRzdCwgY291bnQpIFwKLQlpbnNiKCh1bnNpZ25lZCBsb25nKSAocCksIChkc3QpLCAoY291bnQpKQotI2RlZmluZSBpb3JlYWQxNl9yZXAocCwgZHN0LCBjb3VudCkgXAotCWluc3coKHVuc2lnbmVkIGxvbmcpIChwKSwgKGRzdCksIChjb3VudCkpCi0jZGVmaW5lIGlvcmVhZDMyX3JlcChwLCBkc3QsIGNvdW50KSBcCi0JaW5zbCgodW5zaWduZWQgbG9uZykgKHApLCAoZHN0KSwgKGNvdW50KSkKLQotI2RlZmluZSBpb3dyaXRlOF9yZXAocCwgc3JjLCBjb3VudCkgXAotCW91dHNiKCh1bnNpZ25lZCBsb25nKSAocCksIChzcmMpLCAoY291bnQpKQotI2RlZmluZSBpb3dyaXRlMTZfcmVwKHAsIHNyYywgY291bnQpIFwKLQlvdXRzdygodW5zaWduZWQgbG9uZykgKHApLCAoc3JjKSwgKGNvdW50KSkKLSNkZWZpbmUgaW93cml0ZTMyX3JlcChwLCBzcmMsIGNvdW50KSBcCi0Jb3V0c2woKHVuc2lnbmVkIGxvbmcpIChwKSwgKHNyYyksIChjb3VudCkpCi0jZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSU9NQVAgKi8KKyNpZm5kZWYgUENJX0lPQkFTRQorI2RlZmluZSBQQ0lfSU9CQVNFICgodm9pZCBfX2lvbWVtICopMCkKKyNlbmRpZgogCiAjaWZuZGVmIElPX1NQQUNFX0xJTUlUCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZgogI2VuZGlmCiAKKy8qCisgKiB7aW4sb3V0fXtiLHcsbH0oKSBhY2Nlc3MgbGl0dGxlIGVuZGlhbiBJL08uIHtpbixvdXR9e2IsdyxsfV9wKCkgY2FuIGJlCisgKiBpbXBsZW1lbnRlZCBvbiBoYXJkd2FyZSB0aGF0IG5lZWRzIGFuIGFkZGl0aW9uYWwgZGVsYXkgZm9yIEkvTyBhY2Nlc3NlcyB0bworICogdGFrZSBlZmZlY3QuCisgKi8KKworI2lmbmRlZiBpbmIKKyNkZWZpbmUgaW5iIGluYgorc3RhdGljIGlubGluZSB1OCBpbmIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiByZWFkYihQQ0lfSU9CQVNFICsgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbncKKyNkZWZpbmUgaW53IGludworc3RhdGljIGlubGluZSB1MTYgaW53KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gcmVhZHcoUENJX0lPQkFTRSArIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW5sCisjZGVmaW5lIGlubCBpbmwKK3N0YXRpYyBpbmxpbmUgdTMyIGlubCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIHJlYWRsKFBDSV9JT0JBU0UgKyBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dGIKKyNkZWZpbmUgb3V0YiBvdXRiCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0Yih1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXdyaXRlYih2YWx1ZSwgUENJX0lPQkFTRSArIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0dworI2RlZmluZSBvdXR3IG91dHcKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXR3KHUxNiB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXdyaXRldyh2YWx1ZSwgUENJX0lPQkFTRSArIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0bAorI2RlZmluZSBvdXRsIG91dGwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRsKHUzMiB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXdyaXRlbCh2YWx1ZSwgUENJX0lPQkFTRSArIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW5iX3AKKyNkZWZpbmUgaW5iX3AgaW5iX3AKK3N0YXRpYyBpbmxpbmUgdTggaW5iX3AodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBpbmIoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbndfcAorI2RlZmluZSBpbndfcCBpbndfcAorc3RhdGljIGlubGluZSB1MTYgaW53X3AodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBpbncoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbmxfcAorI2RlZmluZSBpbmxfcCBpbmxfcAorc3RhdGljIGlubGluZSB1MzIgaW5sX3AodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBpbmwoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRiX3AKKyNkZWZpbmUgb3V0Yl9wIG91dGJfcAorc3RhdGljIGlubGluZSB2b2lkIG91dGJfcCh1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCW91dGIodmFsdWUsIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0d19wCisjZGVmaW5lIG91dHdfcCBvdXR3X3AKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXR3X3AodTE2IHZhbHVlLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJb3V0dyh2YWx1ZSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRsX3AKKyNkZWZpbmUgb3V0bF9wIG91dGxfcAorc3RhdGljIGlubGluZSB2b2lkIG91dGxfcCh1MzIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlvdXRsKHZhbHVlLCBhZGRyKTsKK30KKyNlbmRpZgorCisvKgorICoge2luLG91dH1ze2IsdyxsfXssX3B9KCkgYXJlIHZhcmlhbnRzIG9mIHRoZSBhYm92ZSB0aGF0IHJlcGVhdGVkbHkgYWNjZXNzIGEKKyAqIHNpbmdsZSBJL08gcG9ydCBtdWx0aXBsZSB0aW1lcy4KKyAqLworCisjaWZuZGVmIGluc2IKKyNkZWZpbmUgaW5zYiBpbnNiCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zYih1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXJlYWRzYihQQ0lfSU9CQVNFICsgYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbnN3CisjZGVmaW5lIGluc3cgaW5zdworc3RhdGljIGlubGluZSB2b2lkIGluc3codW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlyZWFkc3coUENJX0lPQkFTRSArIGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW5zbAorI2RlZmluZSBpbnNsIGluc2wKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJcmVhZHNsKFBDSV9JT0JBU0UgKyBhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHNiCisjZGVmaW5lIG91dHNiIG91dHNiCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c2IodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkgdW5zaWduZWQgaW50IGNvdW50KQoreworCXdyaXRlc2IoUENJX0lPQkFTRSArIGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0c3cKKyNkZWZpbmUgb3V0c3cgb3V0c3cKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRzdyh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJd3JpdGVzdyhQQ0lfSU9CQVNFICsgYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRzbAorI2RlZmluZSBvdXRzbCBvdXRzbAorc3RhdGljIGlubGluZSB2b2lkIG91dHNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl3cml0ZXNsKFBDSV9JT0JBU0UgKyBhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGluc2JfcAorI2RlZmluZSBpbnNiX3AgaW5zYl9wCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zYl9wKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJaW5zYihhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGluc3dfcAorI2RlZmluZSBpbnN3X3AgaW5zd19wCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zd19wKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJaW5zdyhhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGluc2xfcAorI2RlZmluZSBpbnNsX3AgaW5zbF9wCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbF9wKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJaW5zbChhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHNiX3AKKyNkZWZpbmUgb3V0c2JfcCBvdXRzYl9wCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c2JfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlvdXRzYihhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHN3X3AKKyNkZWZpbmUgb3V0c3dfcCBvdXRzd19wCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c3dfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlvdXRzdyhhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHNsX3AKKyNkZWZpbmUgb3V0c2xfcCBvdXRzbF9wCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c2xfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlvdXRzbChhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0lPTUFQCisjaWZuZGVmIGlvcmVhZDgKKyNkZWZpbmUgaW9yZWFkOCBpb3JlYWQ4CitzdGF0aWMgaW5saW5lIHU4IGlvcmVhZDgoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiByZWFkYihhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvcmVhZDE2CisjZGVmaW5lIGlvcmVhZDE2IGlvcmVhZDE2CitzdGF0aWMgaW5saW5lIHUxNiBpb3JlYWQxNihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIHJlYWR3KGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW9yZWFkMzIKKyNkZWZpbmUgaW9yZWFkMzIgaW9yZWFkMzIKK3N0YXRpYyBpbmxpbmUgdTMyIGlvcmVhZDMyKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZGwoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlOAorI2RlZmluZSBpb3dyaXRlOCBpb3dyaXRlOAorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGU4KHU4IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGViKHZhbHVlLCBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvd3JpdGUxNgorI2RlZmluZSBpb3dyaXRlMTYgaW93cml0ZTE2CitzdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZTE2KHUxNiB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXdyaXRldyh2YWx1ZSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlMzIKKyNkZWZpbmUgaW93cml0ZTMyIGlvd3JpdGUzMgorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUzMih1MzIgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZWwodmFsdWUsIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW9yZWFkMTZiZQorI2RlZmluZSBpb3JlYWQxNmJlIGlvcmVhZDE2YmUKK3N0YXRpYyBpbmxpbmUgdTE2IGlvcmVhZDE2YmUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBfX2JlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KGFkZHIpKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvcmVhZDMyYmUKKyNkZWZpbmUgaW9yZWFkMzJiZSBpb3JlYWQzMmJlCitzdGF0aWMgaW5saW5lIHUzMiBpb3JlYWQzMmJlKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gX19iZTMyX3RvX2NwdShfX3Jhd19yZWFkbChhZGRyKSk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlMTZiZQorI2RlZmluZSBpb3dyaXRlMTZiZSBpb3dyaXRlMTZiZQorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUxNmJlKHUxNiB2YWx1ZSwgdm9pZCB2b2xhdGlsZSBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRldyhfX2NwdV90b19iZTE2KHZhbHVlKSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlMzJiZQorI2RlZmluZSBpb3dyaXRlMzJiZSBpb3dyaXRlMzJiZQorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUzMmJlKHUzMiB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRlbChfX2NwdV90b19iZTMyKHZhbHVlKSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3JlYWQ4X3JlcAorI2RlZmluZSBpb3JlYWQ4X3JlcCBpb3JlYWQ4X3JlcAorc3RhdGljIGlubGluZSB2b2lkIGlvcmVhZDhfcmVwKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmZmVyLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlyZWFkc2IoYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3JlYWQxNl9yZXAKKyNkZWZpbmUgaW9yZWFkMTZfcmVwIGlvcmVhZDE2X3JlcAorc3RhdGljIGlubGluZSB2b2lkIGlvcmVhZDE2X3JlcChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsCisJCQkJdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJcmVhZHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW9yZWFkMzJfcmVwCisjZGVmaW5lIGlvcmVhZDMyX3JlcCBpb3JlYWQzMl9yZXAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQzMl9yZXAoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLAorCQkJCXZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXJlYWRzbChhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvd3JpdGU4X3JlcAorI2RlZmluZSBpb3dyaXRlOF9yZXAgaW93cml0ZThfcmVwCitzdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZThfcmVwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwKKwkJCQljb25zdCB2b2lkICpidWZmZXIsCisJCQkJdW5zaWduZWQgaW50IGNvdW50KQoreworCXdyaXRlc2IoYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlMTZfcmVwCisjZGVmaW5lIGlvd3JpdGUxNl9yZXAgaW93cml0ZTE2X3JlcAorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUxNl9yZXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLAorCQkJCSBjb25zdCB2b2lkICpidWZmZXIsCisJCQkJIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl3cml0ZXN3KGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW93cml0ZTMyX3JlcAorI2RlZmluZSBpb3dyaXRlMzJfcmVwIGlvd3JpdGUzMl9yZXAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMzJfcmVwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwKKwkJCQkgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCSB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJd3JpdGVzbChhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX0lPTUFQICovCisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jZGVmaW5lIF9faW9fdmlydCh4KSAoKHZvaWQgX19mb3JjZSAqKSAoeCkpCisjZGVmaW5lIF9faW9fdmlydCh4KSAoKHZvaWQgX19mb3JjZSAqKSh4KSkKIAogI2lmbmRlZiBDT05GSUdfR0VORVJJQ19JT01BUAogc3RydWN0IHBjaV9kZXY7CiBleHRlcm4gdm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXgpOwogCiAjaWZuZGVmIHBjaV9pb3VubWFwCisjZGVmaW5lIHBjaV9pb3VubWFwIHBjaV9pb3VubWFwCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICpwKQogewogfQpAQCAtMjg5LDExICs3MjEsMTUgQEAKICAqIFRoZXNlIGFyZSBwcmV0dHkgdHJpdmlhbAogICovCiAjaWZuZGVmIHZpcnRfdG9fcGh5cworI2RlZmluZSB2aXJ0X3RvX3BoeXMgdmlydF90b19waHlzCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCiB7CiAJcmV0dXJuIF9fcGEoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcyk7CiB9CisjZW5kaWYKIAorI2lmbmRlZiBwaHlzX3RvX3ZpcnQKKyNkZWZpbmUgcGh5c190b192aXJ0IHBoeXNfdG9fdmlydAogc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXJldHVybiBfX3ZhKGFkZHJlc3MpOwpAQCAtMzA2LDM3ICs3NDIsNjUgQEAKICAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgZm9yIHRoZSBuby1NTVUgY2FzZSBvbmx5Li4uIGlmIHlvdSBoYXZlIGFuIE1NVQogICogeW91J2xsIG5lZWQgdG8gcHJvdmlkZSB5b3VyIG93biBkZWZpbml0aW9ucy4KICAqLwotI2lmbmRlZiBDT05GSUdfTU1VCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcChwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSopICh1bnNpZ25lZCBsb25nKW9mZnNldDsKLX0KIAotI2RlZmluZSBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykJaW9yZW1hcChvZmZzZXQsIHNpemUpCisjaWZuZGVmIENPTkZJR19NTVUKKyNpZm5kZWYgaW9yZW1hcAorI2RlZmluZSBpb3JlbWFwIGlvcmVtYXAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwKHBoeXNfYWRkcl90IG9mZnNldCwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZylvZmZzZXQ7Cit9CisjZW5kaWYKKworI2lmbmRlZiBfX2lvcmVtYXAKKyNkZWZpbmUgX19pb3JlbWFwIF9faW9yZW1hcAorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKl9faW9yZW1hcChwaHlzX2FkZHJfdCBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIGlvcmVtYXAob2Zmc2V0LCBzaXplKTsKK30KKyNlbmRpZgogCiAjaWZuZGVmIGlvcmVtYXBfbm9jYWNoZQotI2RlZmluZSBpb3JlbWFwX25vY2FjaGUgaW9yZW1hcAorI2RlZmluZSBpb3JlbWFwX25vY2FjaGUgaW9yZW1hcF9ub2NhY2hlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHBoeXNfYWRkcl90IG9mZnNldCwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIGlvcmVtYXAob2Zmc2V0LCBzaXplKTsKK30KICNlbmRpZgogCiAjaWZuZGVmIGlvcmVtYXBfd2MKLSNkZWZpbmUgaW9yZW1hcF93YyBpb3JlbWFwX25vY2FjaGUKKyNkZWZpbmUgaW9yZW1hcF93YyBpb3JlbWFwX3djCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcF93YyhwaHlzX2FkZHJfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKK30KICNlbmRpZgogCisjaWZuZGVmIGlvdW5tYXAKKyNkZWZpbmUgaW91bm1hcCBpb3VubWFwCiBzdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiB9CisjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKICNpZmRlZiBDT05GSUdfSEFTX0lPUE9SVF9NQVAKICNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSU9NQVAKKyNpZm5kZWYgaW9wb3J0X21hcAorI2RlZmluZSBpb3BvcnRfbWFwIGlvcG9ydF9tYXAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKQogewogCXJldHVybiBQQ0lfSU9CQVNFICsgKHBvcnQgJiBJT19TUEFDRV9MSU1JVCk7CiB9CisjZW5kaWYKIAorI2lmbmRlZiBpb3BvcnRfdW5tYXAKKyNkZWZpbmUgaW9wb3J0X3VubWFwIGlvcG9ydF91bm1hcAogc3RhdGljIGlubGluZSB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKnApCiB7CiB9CisjZW5kaWYKICNlbHNlIC8qIENPTkZJR19HRU5FUklDX0lPTUFQICovCiBleHRlcm4gdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKTsKIGV4dGVybiB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKnApOwpAQCAtMzQ0LDM1ICs4MDgsNjggQEAKICNlbmRpZiAvKiBDT05GSUdfSEFTX0lPUE9SVF9NQVAgKi8KIAogI2lmbmRlZiB4bGF0ZV9kZXZfa21lbV9wdHIKLSNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyIHhsYXRlX2Rldl9rbWVtX3B0cgorc3RhdGljIGlubGluZSB2b2lkICp4bGF0ZV9kZXZfa21lbV9wdHIodm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gYWRkcjsKK30KICNlbmRpZgorCiAjaWZuZGVmIHhsYXRlX2Rldl9tZW1fcHRyCi0jZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKKyNkZWZpbmUgeGxhdGVfZGV2X21lbV9wdHIgeGxhdGVfZGV2X21lbV9wdHIKK3N0YXRpYyBpbmxpbmUgdm9pZCAqeGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgYWRkcikKK3sKKwlyZXR1cm4gX192YShhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIHVueGxhdGVfZGV2X21lbV9wdHIKKyNkZWZpbmUgdW54bGF0ZV9kZXZfbWVtX3B0ciB1bnhsYXRlX2Rldl9tZW1fcHRyCitzdGF0aWMgaW5saW5lIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cihwaHlzX2FkZHJfdCBwaHlzLCB2b2lkICphZGRyKQoreworfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVklSVF9UT19CVVMKICNpZm5kZWYgdmlydF90b19idXMKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2J1cyh2b2xhdGlsZSB2b2lkICphZGRyZXNzKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fYnVzKHZvaWQgKmFkZHJlc3MpCiB7Ci0JcmV0dXJuICgodW5zaWduZWQgbG9uZykgYWRkcmVzcyk7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWFkZHJlc3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqYnVzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXJldHVybiAodm9pZCAqKSBhZGRyZXNzOworCXJldHVybiAodm9pZCAqKWFkZHJlc3M7CiB9CiAjZW5kaWYKICNlbmRpZgogCiAjaWZuZGVmIG1lbXNldF9pbwotI2RlZmluZSBtZW1zZXRfaW8oYSwgYiwgYykJbWVtc2V0KF9faW9fdmlydChhKSwgKGIpLCAoYykpCisjZGVmaW5lIG1lbXNldF9pbyBtZW1zZXRfaW8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBpbnQgdmFsdWUsCisJCQkgICAgIHNpemVfdCBzaXplKQoreworCW1lbXNldChfX2lvX3ZpcnQoYWRkciksIHZhbHVlLCBzaXplKTsKK30KICNlbmRpZgogCiAjaWZuZGVmIG1lbWNweV9mcm9taW8KLSNkZWZpbmUgbWVtY3B5X2Zyb21pbyhhLCBiLCBjKQltZW1jcHkoKGEpLCBfX2lvX3ZpcnQoYiksIChjKSkKKyNkZWZpbmUgbWVtY3B5X2Zyb21pbyBtZW1jcHlfZnJvbWlvCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICpidWZmZXIsCisJCQkJIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwKKwkJCQkgc2l6ZV90IHNpemUpCit7CisJbWVtY3B5KGJ1ZmZlciwgX19pb192aXJ0KGFkZHIpLCBzaXplKTsKK30KICNlbmRpZgorCiAjaWZuZGVmIG1lbWNweV90b2lvCi0jZGVmaW5lIG1lbWNweV90b2lvKGEsIGIsIGMpCW1lbWNweShfX2lvX3ZpcnQoYSksIChiKSwgKGMpKQorI2RlZmluZSBtZW1jcHlfdG9pbyBtZW1jcHlfdG9pbworc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJICAgICAgIHNpemVfdCBzaXplKQoreworCW1lbWNweShfX2lvX3ZpcnQoYWRkciksIGJ1ZmZlciwgc2l6ZSk7Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1faG9va3MuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1faG9va3MuaAppbmRleCA2N2RlYTgxLi44NjZhYTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21tX2hvb2tzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tbV9ob29rcy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIERlZmluZSBnZW5lcmljIG5vLW9wIGhvb2tzIGZvciBhcmNoX2R1cF9tbWFwIGFuZCBhcmNoX2V4aXRfbW1hcCwgdG8KLSAqIGJlIGluY2x1ZGVkIGluIGFzbS1GT08vbW11X2NvbnRleHQuaCBmb3IgYW55IGFyY2ggRk9PIHdoaWNoIGRvZXNuJ3QKLSAqIG5lZWQgdG8gaG9vayB0aGVzZS4KKyAqIERlZmluZSBnZW5lcmljIG5vLW9wIGhvb2tzIGZvciBhcmNoX2R1cF9tbWFwLCBhcmNoX2V4aXRfbW1hcAorICogYW5kIGFyY2hfdW5tYXAgdG8gYmUgaW5jbHVkZWQgaW4gYXNtLUZPTy9tbXVfY29udGV4dC5oIGZvciBhbnkKKyAqIGFyY2ggRk9PIHdoaWNoIGRvZXNuJ3QgbmVlZCB0byBob29rIHRoZXNlLgogICovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19NTV9IT09LU19ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19NTV9IT09LU19ICkBAIC0xNSw0ICsxNSwxNSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2Jwcm1fbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworfQorCiAjZW5kaWYJLyogX0FTTV9HRU5FUklDX01NX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXNpLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21zaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzU4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21zaS5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX19BU01fR0VORVJJQ19NU0lfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX01TSV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZuZGVmIE5VTV9NU0lfQUxMT0NfU0NSQVRDSFBBRF9SRUdTCisjIGRlZmluZSBOVU1fTVNJX0FMTE9DX1NDUkFUQ0hQQURfUkVHUwkyCisjZW5kaWYKKworc3RydWN0IG1zaV9kZXNjOworCisvKioKKyAqIHN0cnVjdCBtc2lfYWxsb2NfaW5mbyAtIERlZmF1bHQgc3RydWN0dXJlIGZvciBNU0kgaW50ZXJydXB0IGFsbG9jYXRpb24uCisgKiBAZGVzYzoJUG9pbnRlciB0byBtc2kgZGVzY3JpcHRvcgorICogQGh3aXJxOglBc3NvY2lhdGVkIGh3IGludGVycnVwdCBudW1iZXIgaW4gdGhlIGRvbWFpbgorICogQHNjcmF0Y2hwYWQ6CVN0b3JhZ2UgZm9yIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHNjcmF0Y2ggZGF0YQorICoKKyAqIEFyY2hpdGVjdHVyZXMgY2FuIHByb3ZpZGUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIGJ5IG5vdCBpbmNsdWRpbmcKKyAqIGFzbS1nZW5lcmljL21zaS5oIGludG8gdGhlaXIgYXJjaCBzcGVjaWZpYyBoZWFkZXIgZmlsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbXNpX2FsbG9jX2luZm8geworCXN0cnVjdCBtc2lfZGVzYwkJCSpkZXNjOworCWlycV9od19udW1iZXJfdAkJCWh3aXJxOworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZwkJdWw7CisJCXZvaWQJCQkqcHRyOworCX0gc2NyYXRjaHBhZFtOVU1fTVNJX0FMTE9DX1NDUkFUQ0hQQURfUkVHU107Cit9IG1zaV9hbGxvY19pbmZvX3Q7CisKKyNkZWZpbmUgR0VORVJJQ19NU0lfRE9NQUlOX09QUwkJMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcHJlZW1wdC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wcmVlbXB0LmgKaW5kZXggMWNkM2Y1ZC4uZWI2ZjllNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wcmVlbXB0LmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wcmVlbXB0LmgKQEAgLTIzLDkgKzIzLDYgQEAKIC8qCiAgKiBtdXN0IGJlIG1hY3JvcyB0byBhdm9pZCBoZWFkZXIgcmVjdXJzaW9uIGhlbGwKICAqLwotI2RlZmluZSB0YXNrX3ByZWVtcHRfY291bnQocCkgXAotCSh0YXNrX3RocmVhZF9pbmZvKHApLT5wcmVlbXB0X2NvdW50ICYgflBSRUVNUFRfTkVFRF9SRVNDSEVEKQotCiAjZGVmaW5lIGluaXRfdGFza19wcmVlbXB0X2NvdW50KHApIGRvIHsgXAogCXRhc2tfdGhyZWFkX2luZm8ocCktPnByZWVtcHRfY291bnQgPSBQUkVFTVBUX0RJU0FCTEVEOyBcCiB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWNjb21wLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NlY2NvbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmExZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWNjb21wLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWdlbmVyaWMvc2VjY29tcC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMaW1pdGVkCisgKiBBdXRob3I6IEFLQVNISSBUYWthaGlybyA8dGFrYWhpcm8uYWthc2hpQGxpbmFyby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfU0VDQ09NUF9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19TRUNDT01QX0gKKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NUEFUKSAmJiAhZGVmaW5lZChfX05SX3NlY2NvbXBfcmVhZF8zMikKKyNkZWZpbmUgX19OUl9zZWNjb21wX3JlYWRfMzIJCV9fTlJfcmVhZAorI2RlZmluZSBfX05SX3NlY2NvbXBfd3JpdGVfMzIJCV9fTlJfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIJCV9fTlJfZXhpdAorI2RlZmluZSBfX05SX3NlY2NvbXBfc2lncmV0dXJuXzMyCV9fTlJfcnRfc2lncmV0dXJuCisjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAmJiAhIGFscmVhZHkgZGVmaW5lZCAqLworCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkCQlfX05SX3JlYWQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3dyaXRlCQlfX05SX3dyaXRlCisjZGVmaW5lIF9fTlJfc2VjY29tcF9leGl0CQlfX05SX2V4aXQKKyNpZm5kZWYgX19OUl9zZWNjb21wX3NpZ3JldHVybgorI2RlZmluZSBfX05SX3NlY2NvbXBfc2lncmV0dXJuCQlfX05SX3J0X3NpZ3JldHVybgorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfU0VDQ09NUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaAppbmRleCA1NjcyZDdlLi4wODg0ODA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKQEAgLTk2LDEwICs5Niw5IEBACiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nCQlzdGFydDsKIAl1bnNpZ25lZCBsb25nCQllbmQ7Ci0JdW5zaWduZWQgaW50CQluZWVkX2ZsdXNoIDogMSwJLyogRGlkIGZyZWUgUFRFcyAqLwogCS8qIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIG9wZXJhdGlvbiB0byBjbGVhcgogCSAqIGEgZnVsbCBtbSBhbmQgY2FuIG1ha2Ugc29tZSBvcHRpbWl6YXRpb25zICovCi0JCQkJZnVsbG1tIDogMSwKKwl1bnNpZ25lZCBpbnQJCWZ1bGxtbSA6IDEsCiAJLyogd2UgaGF2ZSBwZXJmb3JtZWQgYW4gb3BlcmF0aW9uIHdoaWNoCiAJICogcmVxdWlyZXMgYSBjb21wbGV0ZSBmbHVzaCBvZiB0aGUgdGxiICovCiAJCQkJbmVlZF9mbHVzaF9hbGwgOiAxOwpAQCAtMTI4LDE2ICsxMjcsNTQgQEAKIAkJdGxiX2ZsdXNoX21tdSh0bGIpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfYWRqdXN0X3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXRsYi0+c3RhcnQgPSBtaW4odGxiLT5zdGFydCwgYWRkcmVzcyk7CisJdGxiLT5lbmQgPSBtYXgodGxiLT5lbmQsIGFkZHJlc3MgKyBQQUdFX1NJWkUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVzZXRfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKK3sKKwl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOworCXRsYi0+ZW5kID0gMDsKK30KKworLyoKKyAqIEluIHRoZSBjYXNlIG9mIHRsYiB2bWEgaGFuZGxpbmcsIHdlIGNhbiBvcHRpbWlzZSB0aGVzZSBhd2F5IGluIHRoZQorICogY2FzZSB3aGVyZSB3ZSdyZSBkb2luZyBhIGZ1bGwgTU0gZmx1c2guICBXaGVuIHdlJ3JlIGRvaW5nIGEgbXVubWFwLAorICogdGhlIHZtYXMgYXJlIGFkanVzdGVkIHRvIG9ubHkgY292ZXIgdGhlIHJlZ2lvbiB0byBiZSB0b3JuIGRvd24uCisgKi8KKyNpZm5kZWYgdGxiX3N0YXJ0X3ZtYQorI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBfX3RsYl9lbmRfdm1hKHRsYiwgdm1hKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoIXRsYi0+ZnVsbG1tICYmIHRsYi0+ZW5kKSB7CQkJXAorCQkJdGxiX2ZsdXNoKHRsYik7CQkJCVwKKwkJCV9fdGxiX3Jlc2V0X3JhbmdlKHRsYik7CQkJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNpZm5kZWYgdGxiX2VuZF92bWEKKyNkZWZpbmUgdGxiX2VuZF92bWEJX190bGJfZW5kX3ZtYQorI2VuZGlmCisKKyNpZm5kZWYgX190bGJfcmVtb3ZlX3RsYl9lbnRyeQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKIC8qKgogICogdGxiX3JlbW92ZV90bGJfZW50cnkgLSByZW1lbWJlciBhIHB0ZSB1bm1hcHBpbmcgZm9yIGxhdGVyIHRsYiBpbnZhbGlkYXRpb24uCiAgKgotICogUmVjb3JkIHRoZSBmYWN0IHRoYXQgcHRlJ3Mgd2VyZSByZWFsbHkgdW1hcHBlZCBpbiAtPm5lZWRfZmx1c2gsIHNvIHdlIGNhbgotICogbGF0ZXIgb3B0aW1pc2UgYXdheSB0aGUgdGxiIGludmFsaWRhdGUuICAgVGhpcyBoZWxwcyB3aGVuIHVzZXJzcGFjZSBpcwotICogdW5tYXBwaW5nIGFscmVhZHktdW5tYXBwZWQgcGFnZXMsIHdoaWNoIGhhcHBlbnMgcXVpdGUgYSBsb3QuCisgKiBSZWNvcmQgdGhlIGZhY3QgdGhhdCBwdGUncyB3ZXJlIHJlYWxseSB1bm1hcHBlZCBieSB1cGRhdGluZyB0aGUgcmFuZ2UsCisgKiBzbyB3ZSBjYW4gbGF0ZXIgb3B0aW1pc2UgYXdheSB0aGUgdGxiIGludmFsaWRhdGUuICAgVGhpcyBoZWxwcyB3aGVuCisgKiB1c2Vyc3BhY2UgaXMgdW5tYXBwaW5nIGFscmVhZHktdW5tYXBwZWQgcGFnZXMsIHdoaWNoIGhhcHBlbnMgcXVpdGUgYSBsb3QuCiAgKi8KICNkZWZpbmUgdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGVwLCBhZGRyZXNzKQkJXAogCWRvIHsJCQkJCQkJXAotCQl0bGItPm5lZWRfZmx1c2ggPSAxOwkJCQlcCisJCV9fdGxiX2FkanVzdF9yYW5nZSh0bGIsIGFkZHJlc3MpOwkJXAogCQlfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcyk7CVwKIAl9IHdoaWxlICgwKQogCkBAIC0xNTEsMjcgKzE4OCwyNyBAQAogCiAjZGVmaW5lIHRsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeSh0bGIsIHBtZHAsIGFkZHJlc3MpCQlcCiAJZG8gewkJCQkJCQlcCi0JCXRsYi0+bmVlZF9mbHVzaCA9IDE7CQkJCVwKKwkJX190bGJfYWRqdXN0X3JhbmdlKHRsYiwgYWRkcmVzcyk7CQlcCiAJCV9fdGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHRsYiwgcG1kcCwgYWRkcmVzcyk7CVwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIHB0ZV9mcmVlX3RsYih0bGIsIHB0ZXAsIGFkZHJlc3MpCQkJXAogCWRvIHsJCQkJCQkJXAotCQl0bGItPm5lZWRfZmx1c2ggPSAxOwkJCQlcCisJCV9fdGxiX2FkanVzdF9yYW5nZSh0bGIsIGFkZHJlc3MpOwkJXAogCQlfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZXAsIGFkZHJlc3MpOwkJXAogCX0gd2hpbGUgKDApCiAKICNpZm5kZWYgX19BUkNIX0hBU180TEVWRUxfSEFDSwogI2RlZmluZSBwdWRfZnJlZV90bGIodGxiLCBwdWRwLCBhZGRyZXNzKQkJCVwKIAlkbyB7CQkJCQkJCVwKLQkJdGxiLT5uZWVkX2ZsdXNoID0gMTsJCQkJXAorCQlfX3RsYl9hZGp1c3RfcmFuZ2UodGxiLCBhZGRyZXNzKTsJCVwKIAkJX19wdWRfZnJlZV90bGIodGxiLCBwdWRwLCBhZGRyZXNzKTsJCVwKIAl9IHdoaWxlICgwKQogI2VuZGlmCiAKICNkZWZpbmUgcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCwgYWRkcmVzcykJCQlcCiAJZG8gewkJCQkJCQlcCi0JCXRsYi0+bmVlZF9mbHVzaCA9IDE7CQkJCVwKKwkJX190bGJfYWRqdXN0X3JhbmdlKHRsYiwgYWRkcmVzcyk7CQlcCiAJCV9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCwgYWRkcmVzcyk7CQlcCiAJfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9hcm0vdXg1MDBfcG1fZG9tYWlucy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9hcm0vdXg1MDBfcG1fZG9tYWlucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OGE2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2FybS91eDUwMF9wbV9kb21haW5zLmgKQEAgLTAsMCArMSwxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBMaW5hcm8gTHRkLgorICoKKyAqIEF1dGhvcjogVWxmIEhhbnNzb24gPHVsZi5oYW5zc29uQGxpbmFyby5vcmc+CisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqLworI2lmbmRlZiBfRFRfQklORElOR1NfQVJNX1VYNTAwX1BNX0RPTUFJTlNfSAorI2RlZmluZSBfRFRfQklORElOR1NfQVJNX1VYNTAwX1BNX0RPTUFJTlNfSAorCisjZGVmaW5lIERPTUFJTl9WQVBFCQkwCisKKy8qIE51bWJlciBvZiBQTSBkb21haW5zLiAqLworI2RlZmluZSBOUl9ET01BSU5TCQkoRE9NQUlOX1ZBUEUgKyAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svaW14NS1jbG9jay5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9pbXg1LWNsb2NrLmgKaW5kZXggNWYyNjY3ZWMuLmY0Yjc0NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svaW14NS1jbG9jay5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svaW14NS1jbG9jay5oCkBAIC0xOTgsNiArMTk4LDkgQEAKICNkZWZpbmUgSU1YNV9DTEtfT0NSQU0JCQkxODYKICNkZWZpbmUgSU1YNV9DTEtfU0FIQVJBX0lQR19HQVRFCTE4NwogI2RlZmluZSBJTVg1X0NMS19TQVRBX1JFRgkJMTg4Ci0jZGVmaW5lIElNWDVfQ0xLX0VORAkJCTE4OQorI2RlZmluZSBJTVg1X0NMS19TVEVQX1NFTAkJMTg5CisjZGVmaW5lIElNWDVfQ0xLX0NQVV9QT0RGX1NFTAkJMTkwCisjZGVmaW5lIElNWDVfQ0xLX0FSTQkJCTE5MQorI2RlZmluZSBJTVg1X0NMS19FTkQJCQkxOTIKIAogI2VuZGlmIC8qIF9fRFRfQklORElOR1NfQ0xPQ0tfSU1YNV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3NDAtY2xvY2suaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc0MC1jbG9jay5oCmluZGV4IGY2YjRiMGYuLjQ3NjEzNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc0MC1jbG9jay5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc0MC1jbG9jay5oCkBAIC00MCw2ICs0MCw3IEBACiAKIC8qIE1TVFAyICovCiAjZGVmaW5lIFI4QTc3NDBfQ0xLX1NDSUZBNgkzMAorI2RlZmluZSBSOEE3NzQwX0NMS19JTlRDQQkyOQogI2RlZmluZSBSOEE3NzQwX0NMS19TQ0lGQTcJMjIKICNkZWZpbmUgUjhBNzc0MF9DTEtfRE1BQzEJMTgKICNkZWZpbmUgUjhBNzc0MF9DTEtfRE1BQzIJMTcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc5MC1jbG9jay5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkwLWNsb2NrLmgKaW5kZXggOGVhN2FiMC4uYzI3YjNiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkwLWNsb2NrLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkwLWNsb2NrLmgKQEAgLTI2LDggKzI2LDE4IEBACiAjZGVmaW5lIFI4QTc3OTBfQ0xLX01TSU9GMAkJMAogCiAvKiBNU1RQMSAqLwotI2RlZmluZSBSOEE3NzkwX0NMS19KUFUJCTYKKyNkZWZpbmUgUjhBNzc5MF9DTEtfVkNQMQkJMAorI2RlZmluZSBSOEE3NzkwX0NMS19WQ1AwCQkxCisjZGVmaW5lIFI4QTc3OTBfQ0xLX1ZQQzEJCTIKKyNkZWZpbmUgUjhBNzc5MF9DTEtfVlBDMAkJMworI2RlZmluZSBSOEE3NzkwX0NMS19KUFUJCQk2CisjZGVmaW5lIFI4QTc3OTBfQ0xLX1NTUDEJCTkKICNkZWZpbmUgUjhBNzc5MF9DTEtfVE1VMQkJMTEKKyNkZWZpbmUgUjhBNzc5MF9DTEtfM0RHCQkJMTIKKyNkZWZpbmUgUjhBNzc5MF9DTEtfMkRETUFDCQkxNQorI2RlZmluZSBSOEE3NzkwX0NMS19GRFAxXzIJCTE3CisjZGVmaW5lIFI4QTc3OTBfQ0xLX0ZEUDFfMQkJMTgKKyNkZWZpbmUgUjhBNzc5MF9DTEtfRkRQMV8wCQkxOQogI2RlZmluZSBSOEE3NzkwX0NMS19UTVUzCQkyMQogI2RlZmluZSBSOEE3NzkwX0NMS19UTVUyCQkyMgogI2RlZmluZSBSOEE3NzkwX0NMS19DTVQwCQkyNApAQCAtNjgsNiArNzgsOCBAQAogI2RlZmluZSBSOEE3NzkwX0NMS19VU0JETUFDMQkJMzEKIAogLyogTVNUUDUgKi8KKyNkZWZpbmUgUjhBNzc5MF9DTEtfQVVESU9fRE1BQzEJCTEKKyNkZWZpbmUgUjhBNzc5MF9DTEtfQVVESU9fRE1BQzAJCTIKICNkZWZpbmUgUjhBNzc5MF9DTEtfVEhFUk1BTAkJMjIKICNkZWZpbmUgUjhBNzc5MF9DTEtfUFdNCQkJMjMKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkxLWNsb2NrLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTEtY2xvY2suaAppbmRleCA1OGMzZjQ5Li4zZWEyYmJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTEtY2xvY2suaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTEtY2xvY2suaApAQCAtMjUsOCArMjUsMTUgQEAKICNkZWZpbmUgUjhBNzc5MV9DTEtfTVNJT0YwCQkwCiAKIC8qIE1TVFAxICovCi0jZGVmaW5lIFI4QTc3OTFfQ0xLX0pQVQkJNgorI2RlZmluZSBSOEE3NzkxX0NMS19WQ1AwCQkxCisjZGVmaW5lIFI4QTc3OTFfQ0xLX1ZQQzAJCTMKKyNkZWZpbmUgUjhBNzc5MV9DTEtfSlBVCQkJNgorI2RlZmluZSBSOEE3NzkxX0NMS19TU1AxCQk5CiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1RNVTEJCTExCisjZGVmaW5lIFI4QTc3OTFfQ0xLXzNERwkJCTEyCisjZGVmaW5lIFI4QTc3OTFfQ0xLXzJERE1BQwkJMTUKKyNkZWZpbmUgUjhBNzc5MV9DTEtfRkRQMV8xCQkxOAorI2RlZmluZSBSOEE3NzkxX0NMS19GRFAxXzAJCTE5CiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1RNVTMJCTIxCiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1RNVTIJCTIyCiAjZGVmaW5lIFI4QTc3OTFfQ0xLX0NNVDAJCTI0CkBAIC02Miw2ICs2OSw4IEBACiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1VTQkRNQUMxCQkzMQogCiAvKiBNU1RQNSAqLworI2RlZmluZSBSOEE3NzkxX0NMS19BVURJT19ETUFDMQkJMQorI2RlZmluZSBSOEE3NzkxX0NMS19BVURJT19ETUFDMAkJMgogI2RlZmluZSBSOEE3NzkxX0NMS19USEVSTUFMCQkyMgogI2RlZmluZSBSOEE3NzkxX0NMS19QV00JCQkyMwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTQtY2xvY2suaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc5NC1jbG9jay5oCmluZGV4IDlhYzEwNDMuLmFhOWMyODZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTQtY2xvY2suaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTQtY2xvY2suaApAQCAtMjYsMTEgKzI2LDE4IEBACiAjZGVmaW5lIFI4QTc3OTRfQ0xLX01TSU9GMAkJMAogCiAvKiBNU1RQMSAqLworI2RlZmluZSBSOEE3Nzk0X0NMS19WQ1AwCQkxCisjZGVmaW5lIFI4QTc3OTRfQ0xLX1ZQQzAJCTMKICNkZWZpbmUgUjhBNzc5NF9DTEtfVE1VMQkJMTEKKyNkZWZpbmUgUjhBNzc5NF9DTEtfM0RHCQkJMTIKKyNkZWZpbmUgUjhBNzc5NF9DTEtfMkRETUFDCQkxNQorI2RlZmluZSBSOEE3Nzk0X0NMS19GRFAxXzAJCTE5CiAjZGVmaW5lIFI4QTc3OTRfQ0xLX1RNVTMJCTIxCiAjZGVmaW5lIFI4QTc3OTRfQ0xLX1RNVTIJCTIyCiAjZGVmaW5lIFI4QTc3OTRfQ0xLX0NNVDAJCTI0CiAjZGVmaW5lIFI4QTc3OTRfQ0xLX1RNVTAJCTI1CisjZGVmaW5lIFI4QTc3OTRfQ0xLX1ZTUDFfRFUwCQkyOAorI2RlZmluZSBSOEE3Nzk0X0NMS19WU1AxX1MJCTMxCiAKIC8qIE1TVFAyICovCiAjZGVmaW5lIFI4QTc3OTRfQ0xLX1NDSUZBMgkJMgpAQCAtNjEsNiArNjgsOCBAQAogI2RlZmluZSBSOEE3Nzk0X0NMS19TQ0lGMAkJMjEKIAogLyogTVNUUDggKi8KKyNkZWZpbmUgUjhBNzc5NF9DTEtfVklOMQkJMTAKKyNkZWZpbmUgUjhBNzc5NF9DTEtfVklOMAkJMTEKICNkZWZpbmUgUjhBNzc5NF9DTEtfRVRIRVIJCTEzCiAKIC8qIE1TVFA5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MDctY2xrcy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zdGloNDA3LWNsa3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWYyYjcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zdGloNDA3LWNsa3MuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogVGhpcyBoZWFkZXIgcHJvdmlkZXMgY29uc3RhbnRzIGNsayBpbmRleCBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqIFNUaUg0MDcgU29DLgorICovCisjaWZuZGVmIF9EVF9CSU5ESU5HU19DTEtfU1RJSDQwNworI2RlZmluZSBfRFRfQklORElOR1NfQ0xLX1NUSUg0MDcKKworLyogQ0xPQ0tHRU4gQzAgKi8KKyNkZWZpbmUgQ0xLX0lDTl9HUFUJCTAKKyNkZWZpbmUgQ0xLX0ZETUEJCTEKKyNkZWZpbmUgQ0xLX05BTkQJCTIKKyNkZWZpbmUgQ0xLX0hWQQkJCTMKKyNkZWZpbmUgQ0xLX1BST0NfU1RGRQkJNAorI2RlZmluZSBDTEtfUFJPQ19UUAkJNQorI2RlZmluZSBDTEtfUlhfSUNOX0RNVQkJNgorI2RlZmluZSBDTEtfUlhfSUNOX0RJU1BfMAk2CisjZGVmaW5lIENMS19SWF9JQ05fRElTUF8xCTYKKyNkZWZpbmUgQ0xLX1JYX0lDTl9IVkEJCTcKKyNkZWZpbmUgQ0xLX1JYX0lDTl9UUwkJNworI2RlZmluZSBDTEtfSUNOX0NQVQkJOAorI2RlZmluZSBDTEtfVFhfSUNOX0RNVQkJOQorI2RlZmluZSBDTEtfVFhfSUNOX0hWQQkJOQorI2RlZmluZSBDTEtfVFhfSUNOX1RTCQk5CisjZGVmaW5lIENMS19JQ05fQ09NUE8JCTkKKyNkZWZpbmUgQ0xLX01NQ18wCQkxMAorI2RlZmluZSBDTEtfTU1DXzEJCTExCisjZGVmaW5lIENMS19KUEVHREVDCQkxMgorI2RlZmluZSBDTEtfSUNOX1JFRwkJMTMKKyNkZWZpbmUgQ0xLX1RSQUNFX0E5CQkxMworI2RlZmluZSBDTEtfUFRJX1NUTQkJMTMKKyNkZWZpbmUgQ0xLX0VYVDJGX0E5CQkxMworI2RlZmluZSBDTEtfSUNfQkRJU1BfMAkJMTQKKyNkZWZpbmUgQ0xLX0lDX0JESVNQXzEJCTE1CisjZGVmaW5lIENMS19QUF9ETVUJCTE2CisjZGVmaW5lIENMS19WSURfRE1VCQkxNworI2RlZmluZSBDTEtfRFNTX0xQQwkJMTgKKyNkZWZpbmUgQ0xLX1NUMjMxX0FVRF8wCQkxOQorI2RlZmluZSBDTEtfU1QyMzFfR1BfMAkJMTkKKyNkZWZpbmUgQ0xLX1NUMjMxX0dQXzEJCTIwCisjZGVmaW5lIENMS19TVDIzMV9ETVUJCTIxCisjZGVmaW5lIENMS19JQ05fTE1JCQkyMgorI2RlZmluZSBDTEtfVFhfSUNOX0RJU1BfMAkyMworI2RlZmluZSBDTEtfVFhfSUNOX0RJU1BfMQkyMworI2RlZmluZSBDTEtfSUNOX1NCQwkJMjQKKyNkZWZpbmUgQ0xLX1NURkVfRlJDMgkJMjUKKyNkZWZpbmUgQ0xLX0VUSF9QSFkJCTI2CisjZGVmaW5lIENMS19FVEhfUkVGX1BIWUNMSwkyNworI2RlZmluZSBDTEtfRkxBU0hfUFJPTUlQCTI4CisjZGVmaW5lIENMS19NQUlOX0RJU1AJCTI5CisjZGVmaW5lIENMS19BVVhfRElTUAkJMzAKKyNkZWZpbmUgQ0xLX0NPTVBPX0RWUAkJMzEKKworLyogQ0xPQ0tHRU4gRDAgKi8KKyNkZWZpbmUgQ0xLX1BDTV8wCQkwCisjZGVmaW5lIENMS19QQ01fMQkJMQorI2RlZmluZSBDTEtfUENNXzIJCTIKKyNkZWZpbmUgQ0xLX1NQRElGRgkJMworCisvKiBDTE9DS0dFTiBEMiAqLworI2RlZmluZSBDTEtfUElYX01BSU5fRElTUAkwCisjZGVmaW5lIENMS19QSVhfUElQCQkxCisjZGVmaW5lIENMS19QSVhfR0RQMQkJMgorI2RlZmluZSBDTEtfUElYX0dEUDIJCTMKKyNkZWZpbmUgQ0xLX1BJWF9HRFAzCQk0CisjZGVmaW5lIENMS19QSVhfR0RQNAkJNQorI2RlZmluZSBDTEtfUElYX0FVWF9ESVNQCTYKKyNkZWZpbmUgQ0xLX0RFTkMJCTcKKyNkZWZpbmUgQ0xLX1BJWF9IRERBQwkJOAorI2RlZmluZSBDTEtfSEREQUMJCTkKKyNkZWZpbmUgQ0xLX1NEREFDCQkxMAorI2RlZmluZSBDTEtfUElYX0RWTwkJMTEKKyNkZWZpbmUgQ0xLX0RWTwkJCTEyCisjZGVmaW5lIENMS19QSVhfSERNSQkJMTMKKyNkZWZpbmUgQ0xLX1RNRFNfSERNSQkJMTQKKyNkZWZpbmUgQ0xLX1JFRl9IRE1JUEhZCQkxNQorCisvKiBDTE9DS0dFTiBEMyAqLworI2RlZmluZSBDTEtfU1RGRV9GUkMxCQkwCisjZGVmaW5lIENMS19UU09VVF8wCQkxCisjZGVmaW5lIENMS19UU09VVF8xCQkyCisjZGVmaW5lIENMS19NQ0hJCQkzCisjZGVmaW5lIENMS19WU0VOU19DT01QTwkJNAorI2RlZmluZSBDTEtfRlJDMV9SRU1PVEUJCTUKKyNkZWZpbmUgQ0xLX0xQQ18wCQk2CisjZGVmaW5lIENMS19MUENfMQkJNworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MTAtY2xrcy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zdGloNDEwLWNsa3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDk3YTRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zdGloNDEwLWNsa3MuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogVGhpcyBoZWFkZXIgcHJvdmlkZXMgY29uc3RhbnRzIGNsayBpbmRleCBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqIFNUaUg0MTAgU29DLgorICovCisjaWZuZGVmIF9EVF9CSU5ESU5HU19DTEtfU1RJSDQxMAorI2RlZmluZSBfRFRfQklORElOR1NfQ0xLX1NUSUg0MTAKKworI2luY2x1ZGUgInN0aWg0MDctY2xrcy5oIgorCisvKiBTVGlINDEwIGludHJvZHVjZXMgbmV3IGNsb2NrIG91dHB1dHMgY29tcGFyZWQgdG8gU1RpSDQwNyAqLworCisvKiBDTE9DS0dFTiBDMCAqLworI2RlZmluZSBDTEtfVFhfSUNOX0hBREVTCTMyCisjZGVmaW5lIENMS19SWF9JQ05fSEFERVMJMzMKKyNkZWZpbmUgQ0xLX0lDTl9SRUdfMTYJCTM0CisjZGVmaW5lIENMS19QUF9IQURFUwkJMzUKKyNkZWZpbmUgQ0xLX0NMVVNUX0hBREVTCQkzNgorI2RlZmluZSBDTEtfSFdQRV9IQURFUwkJMzcKKyNkZWZpbmUgQ0xLX0ZDX0hBREVTCQkzOAorCisvKiBDTE9DS0dFTiBEMCAqLworI2RlZmluZSBDTEtfUENNUjEwX01BU1RFUgk0CisjZGVmaW5lIENMS19VU0IyX1BIWQkJNQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmExMTQtY2FyLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMTE0LWNhci5oCmluZGV4IGZjMTI2MjEuLjUzNGMwM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmExMTQtY2FyLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTExNC1jYXIuaApAQCAtNDksNyArNDksNyBAQAogI2RlZmluZSBURUdSQTExNF9DTEtfSTJTMCAzMAogLyogMzEgKi8KIAotLyogMzIgKi8KKyNkZWZpbmUgVEVHUkExMTRfQ0xLX01DIDMyCiAvKiAzMyAqLwogI2RlZmluZSBURUdSQTExNF9DTEtfQVBCRE1BIDM0CiAvKiAzNSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTEyNC1jYXIuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmExMjQtY2FyLmgKaW5kZXggNmJhYzYzNy4uYWY5YmM5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTEyNC1jYXIuaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMTI0LWNhci5oCkBAIC00OCw3ICs0OCw3IEBACiAjZGVmaW5lIFRFR1JBMTI0X0NMS19JMlMwIDMwCiAvKiAzMSAqLwogCi0vKiAzMiAqLworI2RlZmluZSBURUdSQTEyNF9DTEtfTUMgMzIKIC8qIDMzICovCiAjZGVmaW5lIFRFR1JBMTI0X0NMS19BUEJETUEgMzQKIC8qIDM1ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMjAtY2FyLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMjAtY2FyLmgKaW5kZXggOTQwNjIwNy4uMDQ1MDBiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTIwLWNhci5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmEyMC1jYXIuaApAQCAtNDksNyArNDksNyBAQAogLyogMzAgKi8KICNkZWZpbmUgVEVHUkEyMF9DTEtfQ0FDSEUyIDMxCiAKLSNkZWZpbmUgVEVHUkEyMF9DTEtfTUVNIDMyCisjZGVmaW5lIFRFR1JBMjBfQ0xLX01DIDMyCiAjZGVmaW5lIFRFR1JBMjBfQ0xLX0FIQkRNQSAzMwogI2RlZmluZSBURUdSQTIwX0NMS19BUEJETUEgMzQKIC8qIDM1ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTExNC1tYy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmExMTQtbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjQ4OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmExMTQtbWMuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIERUX0JJTkRJTkdTX01FTU9SWV9URUdSQTExNF9NQ19ICisjZGVmaW5lIERUX0JJTkRJTkdTX01FTU9SWV9URUdSQTExNF9NQ19ICisKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9QVEMJMAorI2RlZmluZSBURUdSQV9TV0dST1VQX0RDCTEKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9EQ0IJMgorI2RlZmluZSBURUdSQV9TV0dST1VQX0VQUAkzCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfRzIJNAorI2RlZmluZSBURUdSQV9TV0dST1VQX0FWUEMJNQorI2RlZmluZSBURUdSQV9TV0dST1VQX05WCTYKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9IREEJNworI2RlZmluZSBURUdSQV9TV0dST1VQX0hDCTgKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9NU0VOQwk5CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfUFBDUwkxMAorI2RlZmluZSBURUdSQV9TV0dST1VQX1ZERQkxMQorI2RlZmluZSBURUdSQV9TV0dST1VQX01QQ09SRUxQCTEyCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTVBDT1JFCTEzCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfVkkJMTQKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9JU1AJMTUKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9YVVNCX0hPU1QJMTYKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9YVVNCX0RFVgkxNworI2RlZmluZSBURUdSQV9TV0dST1VQX0VNVUNJRgkxOAorI2RlZmluZSBURUdSQV9TV0dST1VQX1RTRUMJMTkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTEyNC1tYy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmExMjQtbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDhlZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmExMjQtbWMuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIERUX0JJTkRJTkdTX01FTU9SWV9URUdSQTEyNF9NQ19ICisjZGVmaW5lIERUX0JJTkRJTkdTX01FTU9SWV9URUdSQTEyNF9NQ19ICisKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9QVEMJMAorI2RlZmluZSBURUdSQV9TV0dST1VQX0RDCTEKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9EQ0IJMgorI2RlZmluZSBURUdSQV9TV0dST1VQX0FGSQkzCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfQVZQQwk0CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSERBCTUKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9IQwk2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTVNFTkMJNworI2RlZmluZSBURUdSQV9TV0dST1VQX1BQQ1MJOAorI2RlZmluZSBURUdSQV9TV0dST1VQX1NBVEEJOQorI2RlZmluZSBURUdSQV9TV0dST1VQX1ZERQkxMAorI2RlZmluZSBURUdSQV9TV0dST1VQX01QQ09SRUxQCTExCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTVBDT1JFCTEyCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSVNQMgkxMworI2RlZmluZSBURUdSQV9TV0dST1VQX1hVU0JfSE9TVAkxNAorI2RlZmluZSBURUdSQV9TV0dST1VQX1hVU0JfREVWCTE1CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSVNQMkIJMTYKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9UU0VDCTE3CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfQTlBVlAJMTgKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9HUFUJMTkKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9TRE1NQzFBCTIwCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfU0RNTUMyQQkyMQorI2RlZmluZSBURUdSQV9TV0dST1VQX1NETU1DM0EJMjIKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9TRE1NQzRBCTIzCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfVklDCTI0CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfVkkJMjUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTMwLW1jLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTMwLW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyYmViMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvbWVtb3J5L3RlZ3JhMzAtbWMuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIERUX0JJTkRJTkdTX01FTU9SWV9URUdSQTMwX01DX0gKKyNkZWZpbmUgRFRfQklORElOR1NfTUVNT1JZX1RFR1JBMzBfTUNfSAorCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfUFRDCTAKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9EQwkxCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfRENCCTIKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9FUFAJMworI2RlZmluZSBURUdSQV9TV0dST1VQX0cyCTQKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9NUEUJNQorI2RlZmluZSBURUdSQV9TV0dST1VQX1ZJCTYKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9BRkkJNworI2RlZmluZSBURUdSQV9TV0dST1VQX0FWUEMJOAorI2RlZmluZSBURUdSQV9TV0dST1VQX05WCTkKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9OVjIJMTAKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9IREEJMTEKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9IQwkxMgorI2RlZmluZSBURUdSQV9TV0dST1VQX1BQQ1MJMTMKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9TQVRBCTE0CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfVkRFCTE1CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTVBDT1JFTFAJMTYKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9NUENPUkUJMTcKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9JU1AJMTgKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL3JlZ3VsYXRvci9tYXhpbSxtYXg3NzgwMi5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZWd1bGF0b3IvbWF4aW0sbWF4Nzc4MDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjI4NjMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZWd1bGF0b3IvbWF4aW0sbWF4Nzc4MDIuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEdvb2dsZSwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBEZXZpY2UgVHJlZSBiaW5kaW5nIGNvbnN0YW50cyBmb3IgdGhlIE1heGltIDc3ODAyIFBNSUMgcmVndWxhdG9ycworICovCisKKyNpZm5kZWYgX0RUX0JJTkRJTkdTX1JFR1VMQVRPUl9NQVhJTV9NQVg3NzgwMl9ICisjZGVmaW5lIF9EVF9CSU5ESU5HU19SRUdVTEFUT1JfTUFYSU1fTUFYNzc4MDJfSAorCisvKiBSZWd1bGF0b3Igb3BlcmF0aW5nIG1vZGVzICovCisjZGVmaW5lIE1BWDc3ODAyX09QTU9ERV9MUAkxCisjZGVmaW5lIE1BWDc3ODAyX09QTU9ERV9OT1JNQUwJMworCisjZW5kaWYgLyogX0RUX0JJTkRJTkdTX1JFR1VMQVRPUl9NQVhJTV9NQVg3NzgwMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQwNy1yZXNldHMuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvcmVzZXQtY29udHJvbGxlci9zdGloNDA3LXJlc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZDQzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQwNy1yZXNldHMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogVGhpcyBoZWFkZXIgcHJvdmlkZXMgY29uc3RhbnRzIGZvciB0aGUgcmVzZXQgY29udHJvbGxlcgorICogYmFzZWQgcGVyaXBoZXJhbCBwb3dlcmRvd24gcmVxdWVzdHMgb24gdGhlIFNUTWljcm9lbGVjdHJvbmljcworICogU1RpSDQwNyBTb0MuCisgKi8KKyNpZm5kZWYgX0RUX0JJTkRJTkdTX1JFU0VUX0NPTlRST0xMRVJfU1RJSDQwNworI2RlZmluZSBfRFRfQklORElOR1NfUkVTRVRfQ09OVFJPTExFUl9TVElINDA3CisKKy8qIFBvd2VyZG93biByZXF1ZXN0cyBjb250cm9sIDAgKi8KKyNkZWZpbmUgU1RJSDQwN19FTUlTU19QT1dFUkRPV04JCTAKKyNkZWZpbmUgU1RJSDQwN19OQU5EX1BPV0VSRE9XTgkJMQorCisvKiBTeW5wIEdNQUMgUG93ZXJEb3duICovCisjZGVmaW5lIFNUSUg0MDdfRVRIMV9QT1dFUkRPV04JCTIKKworLyogUG93ZXJkb3duIHJlcXVlc3RzIGNvbnRyb2wgMSAqLworI2RlZmluZSBTVElINDA3X1VTQjNfUE9XRVJET1dOCQkzCisjZGVmaW5lIFNUSUg0MDdfVVNCMl9QT1JUMV9QT1dFUkRPV04JNAorI2RlZmluZSBTVElINDA3X1VTQjJfUE9SVDBfUE9XRVJET1dOCTUKKyNkZWZpbmUgU1RJSDQwN19QQ0lFMV9QT1dFUkRPV04JCTYKKyNkZWZpbmUgU1RJSDQwN19QQ0lFMF9QT1dFUkRPV04JCTcKKyNkZWZpbmUgU1RJSDQwN19TQVRBMV9QT1dFUkRPV04JCTgKKyNkZWZpbmUgU1RJSDQwN19TQVRBMF9QT1dFUkRPV04JCTkKKworLyogUmVzZXQgZGVmaW5lcyAqLworI2RlZmluZSBTVElINDA3X0VUSDFfU09GVFJFU0VUCQkwCisjZGVmaW5lIFNUSUg0MDdfTU1DMV9TT0ZUUkVTRVQJCTEKKyNkZWZpbmUgU1RJSDQwN19QSUNPUEhZX1NPRlRSRVNFVAkyCisjZGVmaW5lIFNUSUg0MDdfSVJCX1NPRlRSRVNFVAkJMworI2RlZmluZSBTVElINDA3X1BDSUUwX1NPRlRSRVNFVAkJNAorI2RlZmluZSBTVElINDA3X1BDSUUxX1NPRlRSRVNFVAkJNQorI2RlZmluZSBTVElINDA3X1NBVEEwX1NPRlRSRVNFVAkJNgorI2RlZmluZSBTVElINDA3X1NBVEExX1NPRlRSRVNFVAkJNworI2RlZmluZSBTVElINDA3X01JUEhZMF9TT0ZUUkVTRVQJOAorI2RlZmluZSBTVElINDA3X01JUEhZMV9TT0ZUUkVTRVQJOQorI2RlZmluZSBTVElINDA3X01JUEhZMl9TT0ZUUkVTRVQJMTAKKyNkZWZpbmUgU1RJSDQwN19TQVRBMF9QV1JfU09GVFJFU0VUCTExCisjZGVmaW5lIFNUSUg0MDdfU0FUQTFfUFdSX1NPRlRSRVNFVAkxMgorI2RlZmluZSBTVElINDA3X0RFTFRBX1NPRlRSRVNFVAkJMTMKKyNkZWZpbmUgU1RJSDQwN19CTElUVEVSX1NPRlRSRVNFVAkxNAorI2RlZmluZSBTVElINDA3X0hEVFZPVVRfU09GVFJFU0VUCTE1CisjZGVmaW5lIFNUSUg0MDdfSERRVkRQX1NPRlRSRVNFVAkxNgorI2RlZmluZSBTVElINDA3X1ZEUF9BVVhfU09GVFJFU0VUCTE3CisjZGVmaW5lIFNUSUg0MDdfQ09NUE9fU09GVFJFU0VUCQkxOAorI2RlZmluZSBTVElINDA3X0hETUlfVFhfUEhZX1NPRlRSRVNFVAkxOQorI2RlZmluZSBTVElINDA3X0pQRUdfREVDX1NPRlRSRVNFVAkyMAorI2RlZmluZSBTVElINDA3X1ZQOF9ERUNfU09GVFJFU0VUCTIxCisjZGVmaW5lIFNUSUg0MDdfR1BVX1NPRlRSRVNFVAkJMjIKKyNkZWZpbmUgU1RJSDQwN19IVkFfU09GVFJFU0VUCQkyMworI2RlZmluZSBTVElINDA3X0VSQU1fSFZBX1NPRlRSRVNFVAkyNAorI2RlZmluZSBTVElINDA3X0xQTV9TT0ZUUkVTRVQJCTI1CisjZGVmaW5lIFNUSUg0MDdfS0VZU0NBTl9TT0ZUUkVTRVQJMjYKKyNkZWZpbmUgU1RJSDQwN19VU0IyX1BPUlQwX1NPRlRSRVNFVAkyNworI2RlZmluZSBTVElINDA3X1VTQjJfUE9SVDFfU09GVFJFU0VUCTI4CisKKy8qIFBpY29waHkgcmVzZXQgZGVmaW5lcyAqLworI2RlZmluZSBTVElINDA3X1BJQ09QSFkwX1JFU0VUCQkwCisjZGVmaW5lIFNUSUg0MDdfUElDT1BIWTFfUkVTRVQJCTEKKyNkZWZpbmUgU1RJSDQwN19QSUNPUEhZMl9SRVNFVAkJMgorCisjZW5kaWYgLyogX0RUX0JJTkRJTkdTX1JFU0VUX0NPTlRST0xMRVJfU1RJSDQwNyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1lbC1tY2kuaCBiL2luY2x1ZGUvbGludXgvYXRtZWwtbWNpLmgKaW5kZXggOTFiNzdmOC4uOTE3Nzk0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1lbC1tY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bWVsLW1jaS5oCkBAIC0xMSw2ICsxMSw3IEBACiAgKiBAZGV0ZWN0X3BpbjogR1BJTyBwaW4gd2lyZWQgdG8gdGhlIGNhcmQgZGV0ZWN0IHN3aXRjaAogICogQHdwX3BpbjogR1BJTyBwaW4gd2lyZWQgdG8gdGhlIHdyaXRlIHByb3RlY3Qgc2Vuc29yCiAgKiBAZGV0ZWN0X2lzX2FjdGl2ZV9oaWdoOiBUaGUgc3RhdGUgb2YgdGhlIGRldGVjdCBwaW4gd2hlbiBpdCBpcyBhY3RpdmUKKyAqIEBub25fcmVtb3ZhYmxlOiBUaGUgc2xvdCBpcyBub3QgcmVtb3ZhYmxlLCBvbmx5IGRldGVjdCBvbmNlCiAgKgogICogSWYgYSBnaXZlbiBzbG90IGlzIG5vdCBwcmVzZW50IG9uIHRoZSBib2FyZCwgQGJ1c193aWR0aCBzaG91bGQgYmUKICAqIHNldCB0byAwLiBUaGUgb3RoZXIgZmllbGRzIGFyZSBpZ25vcmVkIGluIHRoaXMgY2FzZS4KQEAgLTI2LDYgKzI3LDcgQEAKIAlpbnQJCQlkZXRlY3RfcGluOwogCWludAkJCXdwX3BpbjsKIAlib29sCQkJZGV0ZWN0X2lzX2FjdGl2ZV9oaWdoOworCWJvb2wJCQlub25fcmVtb3ZhYmxlOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oIGIvaW5jbHVkZS9saW51eC9ibGstbXEuaAppbmRleCBjOWJlMTU4Li4xNWY3MDM0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGstbXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oCkBAIC0xNjcsNiArMTY3LDIzIEBACiAJCWdmcF90IGdmcCwgYm9vbCByZXNlcnZlZCk7CiBzdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX3RhZ190b19ycShzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIHVuc2lnbmVkIGludCB0YWcpOwogCitlbnVtIHsKKwlCTEtfTVFfVU5JUVVFX1RBR19CSVRTID0gMTYsCisJQkxLX01RX1VOSVFVRV9UQUdfTUFTSyA9ICgxIDw8IEJMS19NUV9VTklRVUVfVEFHX0JJVFMpIC0gMSwKK307CisKK3UzMiBibGtfbXFfdW5pcXVlX3RhZyhzdHJ1Y3QgcmVxdWVzdCAqcnEpOworCitzdGF0aWMgaW5saW5lIHUxNiBibGtfbXFfdW5pcXVlX3RhZ190b19od3EodTMyIHVuaXF1ZV90YWcpCit7CisJcmV0dXJuIHVuaXF1ZV90YWcgPj4gQkxLX01RX1VOSVFVRV9UQUdfQklUUzsKK30KKworc3RhdGljIGlubGluZSB1MTYgYmxrX21xX3VuaXF1ZV90YWdfdG9fdGFnKHUzMiB1bmlxdWVfdGFnKQoreworCXJldHVybiB1bmlxdWVfdGFnICYgQkxLX01RX1VOSVFVRV9UQUdfTUFTSzsKK30KKwogc3RydWN0IGJsa19tcV9od19jdHggKmJsa19tcV9tYXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgY29uc3QgaW50IGN0eF9pbmRleCk7CiBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqYmxrX21xX2FsbG9jX3NpbmdsZV9od19xdWV1ZShzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKiwgdW5zaWduZWQgaW50LCBpbnQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCBhYWMwZjllLi42ZDc2YjhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTExMzYsNyArMTEzNiw2IEBACiAvKgogICogdGFnIHN0dWZmCiAgKi8KLSNkZWZpbmUgYmxrX3JxX3RhZ2dlZChycSkJCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfUVVFVUVEKQogZXh0ZXJuIGludCBibGtfcXVldWVfc3RhcnRfdGFnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogZXh0ZXJuIHN0cnVjdCByZXF1ZXN0ICpibGtfcXVldWVfZmluZF90YWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9lbmRfdGFnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbGsvdGkuaCBiL2luY2x1ZGUvbGludXgvY2xrL3RpLmgKaW5kZXggZjc1YWNiZi4uNzRlNTM0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbGsvdGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsay90aS5oCkBAIC0yNTQsMTMgKzI1NCwyNiBAQAogdm9pZCBvbWFwMl9pbml0X2Nsa19od19vbWFwX2Nsb2NrcyhzdHJ1Y3QgY2xrICpjbGspOwogaW50IG9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUoc3RydWN0IGNsa19odyAqaHcpOwogdm9pZCBvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZShzdHJ1Y3QgY2xrX2h3ICpodyk7CitpbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHU4IGluZGV4KTsKIGludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKTsKK2ludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGVfYW5kX3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJICAgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLAorCQkJCQkgICB1OCBpbmRleCk7Citsb25nIG9tYXAzX25vbmNvcmVfZHBsbF9kZXRlcm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICpiZXN0X3BhcmVudF9yYXRlLAorCQkJCSAgICAgICBzdHJ1Y3QgY2xrICoqYmVzdF9wYXJlbnRfY2xrKTsKIHVuc2lnbmVkIGxvbmcgb21hcDRfZHBsbF9yZWdtNHhlbl9yZWNhbGMoc3RydWN0IGNsa19odyAqaHcsCiAJCQkJCSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKTsKIGxvbmcgb21hcDRfZHBsbF9yZWdtNHhlbl9yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlLAogCQkJCSAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSk7Citsb25nIG9tYXA0X2RwbGxfcmVnbTR4ZW5fZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCXVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkJdW5zaWduZWQgbG9uZyAqYmVzdF9wYXJlbnRfcmF0ZSwKKwkJCQkJc3RydWN0IGNsayAqKmJlc3RfcGFyZW50X2Nsayk7CiB1OCBvbWFwMl9pbml0X2RwbGxfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3KTsKIHVuc2lnbmVkIGxvbmcgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpOwogbG9uZyBvbWFwMl9kcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUsCkBAIC0yNzgsNiArMjkxLDggQEAKIHZvaWQgb21hcDJfY2xrX2VuYWJsZV9pbml0X2Nsb2Nrcyhjb25zdCBjaGFyICoqY2xrX25hbWVzLCB1OCBudW1fY2xvY2tzKTsKIGludCBvbWFwM19kcGxsNF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAkJCSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKTsKK2ludCBvbWFwM19kcGxsNF9zZXRfcmF0ZV9hbmRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUsIHU4IGluZGV4KTsKIGludCBvbWFwMl9kZmx0X2Nsa19lbmFibGUoc3RydWN0IGNsa19odyAqaHcpOwogdm9pZCBvbWFwMl9kZmx0X2Nsa19kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KTsKIGludCBvbWFwMl9kZmx0X2Nsa19pc19lbmFibGVkKHN0cnVjdCBjbGtfaHcgKmh3KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKaW5kZXggZTE3MDdkZS4uY2E2ZDJhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKQEAgLTY0LDYgKzY0LDcgQEAKIAkJCQkgICAgdW5pb24gbWFwX2luZm8gKm1hcF9jb250ZXh0KTsKIAogdHlwZWRlZiB2b2lkICgqZG1fcHJlc3VzcGVuZF9mbikgKHN0cnVjdCBkbV90YXJnZXQgKnRpKTsKK3R5cGVkZWYgdm9pZCAoKmRtX3ByZXN1c3BlbmRfdW5kb19mbikgKHN0cnVjdCBkbV90YXJnZXQgKnRpKTsKIHR5cGVkZWYgdm9pZCAoKmRtX3Bvc3RzdXNwZW5kX2ZuKSAoc3RydWN0IGRtX3RhcmdldCAqdGkpOwogdHlwZWRlZiBpbnQgKCpkbV9wcmVyZXN1bWVfZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSk7CiB0eXBlZGVmIHZvaWQgKCpkbV9yZXN1bWVfZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSk7CkBAIC0xNDUsNiArMTQ2LDcgQEAKIAlkbV9lbmRpb19mbiBlbmRfaW87CiAJZG1fcmVxdWVzdF9lbmRpb19mbiBycV9lbmRfaW87CiAJZG1fcHJlc3VzcGVuZF9mbiBwcmVzdXNwZW5kOworCWRtX3ByZXN1c3BlbmRfdW5kb19mbiBwcmVzdXNwZW5kX3VuZG87CiAJZG1fcG9zdHN1c3BlbmRfZm4gcG9zdHN1c3BlbmQ7CiAJZG1fcHJlcmVzdW1lX2ZuIHByZXJlc3VtZTsKIAlkbV9yZXN1bWVfZm4gcmVzdW1lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaAppbmRleCBlMWU2OGRhLi5kYTNiNzJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VkYWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaApAQCAtMTk0LDcgKzE5NCw4IEBACiAgKiBATUVNX0REUjM6CQlERFIzIFJBTQogICogQE1FTV9SRERSMzoJCVJlZ2lzdGVyZWQgRERSMyBSQU0KICAqCQkJVGhpcyBpcyBhIHZhcmlhbnQgb2YgdGhlIEREUjMgbWVtb3JpZXMuCi0gKiBATUVNX0REUjQ6CQlERFI0IFJBTQorICogQE1FTV9MUkREUjMJCUxvYWQtUmVkdWNlZCBERFIzIG1lbW9yeS4KKyAqIEBNRU1fRERSNDoJCVVuYnVmZmVyZWQgRERSNCBSQU0KICAqIEBNRU1fUkREUjQ6CQlSZWdpc3RlcmVkIEREUjQgUkFNCiAgKgkJCVRoaXMgaXMgYSB2YXJpYW50IG9mIHRoZSBERFI0IG1lbW9yaWVzLgogICovCkBAIC0yMTYsNiArMjE3LDcgQEAKIAlNRU1fWERSLAogCU1FTV9ERFIzLAogCU1FTV9SRERSMywKKwlNRU1fTFJERFIzLAogCU1FTV9ERFI0LAogCU1FTV9SRERSNCwKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VlcHJvbV85M2N4Ni5oIGIvaW5jbHVkZS9saW51eC9lZXByb21fOTNjeDYuaAppbmRleCBlNTBmOThiLi5lYjBiMTk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VlcHJvbV85M2N4Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvZWVwcm9tXzkzY3g2LmgKQEAgLTc1LDYgKzc1LDEwIEBACiAJY29uc3QgdTggd29yZCwgdTE2ICpkYXRhKTsKIGV4dGVybiB2b2lkIGVlcHJvbV85M2N4Nl9tdWx0aXJlYWQoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tLAogCWNvbnN0IHU4IHdvcmQsIF9fbGUxNiAqZGF0YSwgY29uc3QgdTE2IHdvcmRzKTsKK2V4dGVybiB2b2lkIGVlcHJvbV85M2N4Nl9yZWFkYihzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20sCisJY29uc3QgdTggYnl0ZSwgdTggKmRhdGEpOworZXh0ZXJuIHZvaWQgZWVwcm9tXzkzY3g2X211bHRpcmVhZGIoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tLAorCWNvbnN0IHU4IGJ5dGUsIHU4ICpkYXRhLCBjb25zdCB1MTYgYnl0ZXMpOwogCiBleHRlcm4gdm9pZCBlZXByb21fOTNjeDZfd3JlbihzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20sIGJvb2wgZW5hYmxlKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggMDk0OWY5Yy4uMDIzOGQ2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC01NDcsNiArNTQ3LDkgQEAKICNkZWZpbmUgU01CSU9TX1RBQkxFX0dVSUQgICAgXAogICAgIEVGSV9HVUlEKCAgMHhlYjlkMmQzMSwgMHgyZDg4LCAweDExZDMsIDB4OWEsIDB4MTYsIDB4MCwgMHg5MCwgMHgyNywgMHgzZiwgMHhjMSwgMHg0ZCApCiAKKyNkZWZpbmUgU01CSU9TM19UQUJMRV9HVUlEICAgIFwKKyAgICBFRklfR1VJRCggIDB4ZjJmZDE1NDQsIDB4OTc5NCwgMHg0YTJjLCAweDk5LCAweDJlLCAweGU1LCAweGJiLCAweGNmLCAweDIwLCAweGUzLCAweDk0ICkKKwogI2RlZmluZSBTQUxfU1lTVEVNX1RBQkxFX0dVSUQgICAgXAogICAgIEVGSV9HVUlEKCAgMHhlYjlkMmQzMiwgMHgyZDg4LCAweDExZDMsIDB4OWEsIDB4MTYsIDB4MCwgMHg5MCwgMHgyNywgMHgzZiwgMHhjMSwgMHg0ZCApCiAKQEAgLTgxMCw3ICs4MTMsOCBAQAogCXVuc2lnbmVkIGxvbmcgbXBzOwkJLyogTVBTIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZyBhY3BpOwkJLyogQUNQSSB0YWJsZSAgKElBNjQgZXh0IDAuNzEpICovCiAJdW5zaWduZWQgbG9uZyBhY3BpMjA7CQkvKiBBQ1BJIHRhYmxlICAoQUNQSSAyLjApICovCi0JdW5zaWduZWQgbG9uZyBzbWJpb3M7CQkvKiBTTSBCSU9TIHRhYmxlICovCisJdW5zaWduZWQgbG9uZyBzbWJpb3M7CQkvKiBTTUJJT1MgdGFibGUgKDMyIGJpdCBlbnRyeSBwb2ludCkgKi8KKwl1bnNpZ25lZCBsb25nIHNtYmlvczM7CQkvKiBTTUJJT1MgdGFibGUgKDY0IGJpdCBlbnRyeSBwb2ludCkgKi8KIAl1bnNpZ25lZCBsb25nIHNhbF9zeXN0YWI7CS8qIFNBTCBzeXN0ZW0gdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nIGJvb3RfaW5mbzsJLyogYm9vdCBpbmZvIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZyBoY2RwOwkJLyogSENEUCB0YWJsZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmggYi9pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaAppbmRleCA3ZmQ4MWI4Li42YjdmZDljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaApAQCAtMjQ2LDE1ICsyNDYsNiBAQAogICogZGVmaW5lZCBpbiA8bGludXgvd2FpdC5oPgogICovCiAKLSNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemVraWxsYWJsZSh3cSwgY29uZGl0aW9uKQkJCVwKLSh7CQkJCQkJCQkJXAotCWludCBfX3JldHZhbDsJCQkJCQkJXAotCWZyZWV6ZXJfZG9fbm90X2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsID0gd2FpdF9ldmVudF9raWxsYWJsZSh3cSwgKGNvbmRpdGlvbikpOwkJXAotCWZyZWV6ZXJfY291bnQoKTsJCQkJCQlcCi0JX19yZXR2YWw7CQkJCQkJCVwKLX0pCi0KIC8qIERPIE5PVCBBREQgQU5ZIE5FVyBDQUxMRVJTIE9GIFRISVMgRlVOQ1RJT04gKi8KICNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemVraWxsYWJsZV91bnNhZmUod3EsIGNvbmRpdGlvbikJCQlcCiAoewkJCQkJCQkJCVwKQEAgLTI2NSwzNSArMjU2LDYgQEAKIAlfX3JldHZhbDsJCQkJCQkJXAogfSkKIAotI2RlZmluZSB3YWl0X2V2ZW50X2ZyZWV6YWJsZSh3cSwgY29uZGl0aW9uKQkJCQlcCi0oewkJCQkJCQkJCVwKLQlpbnQgX19yZXR2YWw7CQkJCQkJCVwKLQlmcmVlemVyX2RvX25vdF9jb3VudCgpOwkJCQkJCVwKLQlfX3JldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh3cSwgKGNvbmRpdGlvbikpOwkJXAotCWZyZWV6ZXJfY291bnQoKTsJCQkJCQlcCi0JX19yZXR2YWw7CQkJCQkJCVwKLX0pCi0KLSNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJXAotKHsJCQkJCQkJCQlcCi0JbG9uZyBfX3JldHZhbCA9IHRpbWVvdXQ7CQkJCQlcCi0JZnJlZXplcl9kb19ub3RfY291bnQoKTsJCQkJCQlcCi0JX19yZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwJKGNvbmRpdGlvbiksCVwKLQkJCQlfX3JldHZhbCk7CQkJCVwKLQlmcmVlemVyX2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsOwkJCQkJCQlcCi19KQotCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKQkJCVwKLSh7CQkJCQkJCQkJXAotCWludCBfX3JldHZhbDsJCQkJCQkJXAotCWZyZWV6ZXJfZG9fbm90X2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKTsJXAotCWZyZWV6ZXJfY291bnQoKTsJCQkJCQlcCi0JX19yZXR2YWw7CQkJCQkJCVwKLX0pCi0KLQogI2Vsc2UgLyogIUNPTkZJR19GUkVFWkVSICovCiBzdGF0aWMgaW5saW5lIGJvb2wgZnJvemVuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyByZXR1cm4gZmFsc2U7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlemluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0zMzEsMTggKzI5Myw2IEBACiAjZGVmaW5lIGZyZWV6YWJsZV9zY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UoZXhwaXJlcywgZGVsdGEsIG1vZGUpCVwKIAlzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UoZXhwaXJlcywgZGVsdGEsIG1vZGUpCiAKLSNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGUod3EsIGNvbmRpdGlvbikJCQkJXAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUod3EsIGNvbmRpdGlvbikKLQotI2RlZmluZSB3YWl0X2V2ZW50X2ZyZWV6YWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCQlcCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCi0KLSNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfZXhjbHVzaXZlKHdxLCBjb25kaXRpb24pCQkJXAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlKHdxLCBjb25kaXRpb24pCi0KLSNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemVraWxsYWJsZSh3cSwgY29uZGl0aW9uKQkJXAotCQl3YWl0X2V2ZW50X2tpbGxhYmxlKHdxLCBjb25kaXRpb24pCi0KICNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemVraWxsYWJsZV91bnNhZmUod3EsIGNvbmRpdGlvbikJCQlcCiAJCXdhaXRfZXZlbnRfa2lsbGFibGUod3EsIGNvbmRpdGlvbikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDlhYjc3OWUuLmI0YTFkNzNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0xNTc3LDcgKzE1NzcsOSBAQAogCXZvaWQgKCpldmljdF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKIAl2b2lkICgqcHV0X3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogCWludCAoKnN5bmNfZnMpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KTsKKwlpbnQgKCpmcmVlemVfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiAJaW50ICgqZnJlZXplX2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworCWludCAoKnRoYXdfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiAJaW50ICgqdW5mcmVlemVfZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiAJaW50ICgqc3RhdGZzKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTsKIAlpbnQgKCpyZW1vdW50X2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCAqLCBjaGFyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvcG1idXMuaCBiL2luY2x1ZGUvbGludXgvaTJjL3BtYnVzLmgKaW5kZXggNjkyODBkYi4uZWUzYzJhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvcG1idXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy9wbWJ1cy5oCkBAIC00MCw2ICs0MCwxMCBAQAogCiBzdHJ1Y3QgcG1idXNfcGxhdGZvcm1fZGF0YSB7CiAJdTMyIGZsYWdzOwkJLyogRGV2aWNlIHNwZWNpZmljIGZsYWdzICovCisKKwkvKiByZWd1bGF0b3Igc3VwcG9ydCAqLworCWludCBudW1fcmVndWxhdG9yczsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqcmVnX2luaXRfZGF0YTsKIH07CiAKICNlbmRpZiAvKiBfUE1CVVNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmggYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCmluZGV4IDc3ZmM0M2YuLjMwMzdmYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaApAQCAtMTAyLDcgKzEwMiw3IEBACiAjZGVmaW5lIElOSVRfSURTCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCisjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVCiAjZGVmaW5lIElOSVRfVEFTS19SQ1VfVFJFRV9QUkVFTVBUKCkJCQkJCVwKIAkucmN1X2Jsb2NrZWRfbm9kZSA9IE5VTEwsCiAjZWxzZQpAQCAtMTY2LDYgKzE2NiwxNSBAQAogIyBkZWZpbmUgSU5JVF9SVF9NVVRFWEVTKHRzaykKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCisjIGRlZmluZSBJTklUX05VTUFfQkFMQU5DSU5HKHRzaykJCQkJCVwKKwkubnVtYV9wcmVmZXJyZWRfbmlkID0gLTEsCQkJCQlcCisJLm51bWFfZ3JvdXAgPSBOVUxMLAkJCQkJCVwKKwkubnVtYV9mYXVsdHMgPSBOVUxMLAorI2Vsc2UKKyMgZGVmaW5lIElOSVRfTlVNQV9CQUxBTkNJTkcodHNrKQorI2VuZGlmCisKIC8qCiAgKiAgSU5JVF9UQVNLIGlzIHVzZWQgdG8gc2V0IHVwIHRoZSBmaXJzdCB0YXNrIHRhYmxlLCB0b3VjaCBhdAogICogeW91ciBvd24gcmlzayEuIEJhc2U9MCwgbGltaXQ9MHgxZmZmZmYgKD0yTUIpCkBAIC0yMzcsNiArMjQ2LDcgQEAKIAlJTklUX0NQVVNFVF9TRVEodHNrKQkJCQkJCVwKIAlJTklUX1JUX01VVEVYRVModHNrKQkJCQkJCVwKIAlJTklUX1ZUSU1FKHRzaykJCQkJCQkJXAorCUlOSVRfTlVNQV9CQUxBTkNJTkcodHNrKQkJCQkJXAogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tbXUuaCBiL2luY2x1ZGUvbGludXgvaW9tbXUuaAppbmRleCBlNmE3YzlmLi5iMjlhNTk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvbW11LmgKKysrIGIvaW5jbHVkZS9saW51eC9pb21tdS5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2lvbW11Lmg+CiAKICNkZWZpbmUgSU9NTVVfUkVBRAkoMSA8PCAwKQpAQCAtOTcsNiArOTgsOCBAQAogICogQGRldGFjaF9kZXY6IGRldGFjaCBkZXZpY2UgZnJvbSBhbiBpb21tdSBkb21haW4KICAqIEBtYXA6IG1hcCBhIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9uIHRvIGFuIGlvbW11IGRvbWFpbgogICogQHVubWFwOiB1bm1hcCBhIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9uIGZyb20gYW4gaW9tbXUgZG9tYWluCisgKiBAbWFwX3NnOiBtYXAgYSBzY2F0dGVyLWdhdGhlciBsaXN0IG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgY2h1bmtzCisgKiB0byBhbiBpb21tdSBkb21haW4KICAqIEBpb3ZhX3RvX3BoeXM6IHRyYW5zbGF0ZSBpb3ZhIHRvIHBoeXNpY2FsIGFkZHJlc3MKICAqIEBhZGRfZGV2aWNlOiBhZGQgZGV2aWNlIHRvIGlvbW11IGdyb3VwaW5nCiAgKiBAcmVtb3ZlX2RldmljZTogcmVtb3ZlIGRldmljZSBmcm9tIGlvbW11IGdyb3VwaW5nCkBAIC0xMTQsNiArMTE3LDggQEAKIAkJICAgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplLCBpbnQgcHJvdCk7CiAJc2l6ZV90ICgqdW5tYXApKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAogCQkgICAgIHNpemVfdCBzaXplKTsKKwlzaXplX3QgKCptYXBfc2cpKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAorCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cywgaW50IHByb3QpOwogCXBoeXNfYWRkcl90ICgqaW92YV90b19waHlzKShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIGRtYV9hZGRyX3QgaW92YSk7CiAJaW50ICgqYWRkX2RldmljZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAl2b2lkICgqcmVtb3ZlX2RldmljZSkoc3RydWN0IGRldmljZSAqZGV2KTsKQEAgLTE1Niw2ICsxNjEsOSBAQAogCQkgICAgIHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpOwogZXh0ZXJuIHNpemVfdCBpb21tdV91bm1hcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKIAkJICAgICAgIHNpemVfdCBzaXplKTsKK2V4dGVybiBzaXplX3QgZGVmYXVsdF9pb21tdV9tYXBfc2coc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyx1bnNpZ25lZCBpbnQgbmVudHMsCisJCQkJaW50IHByb3QpOwogZXh0ZXJuIHBoeXNfYWRkcl90IGlvbW11X2lvdmFfdG9fcGh5cyhzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIGRtYV9hZGRyX3QgaW92YSk7CiBleHRlcm4gdm9pZCBpb21tdV9zZXRfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiAJCQlpb21tdV9mYXVsdF9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqdG9rZW4pOwpAQCAtMjQxLDYgKzI0OSwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGlvbW11X21hcF9zZyhzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCisJCQkJICB1bnNpZ25lZCBsb25nIGlvdmEsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJICB1bnNpZ25lZCBpbnQgbmVudHMsIGludCBwcm90KQoreworCXJldHVybiBkb21haW4tPm9wcy0+bWFwX3NnKGRvbWFpbiwgaW92YSwgc2csIG5lbnRzLCBwcm90KTsKK30KKwogI2Vsc2UgLyogQ09ORklHX0lPTU1VX0FQSSAqLwogCiBzdHJ1Y3QgaW9tbXVfb3BzIHt9OwpAQCAtMjkzLDYgKzMwOCwxMyBAQAogCXJldHVybiAtRU5PREVWOwogfQogCitzdGF0aWMgaW5saW5lIHNpemVfdCBpb21tdV9tYXBfc2coc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJCSAgdW5zaWduZWQgbG9uZyBpb3ZhLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgdW5zaWduZWQgaW50IG5lbnRzLCBpbnQgcHJvdCkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogc3RhdGljIGlubGluZSBpbnQgaW9tbXVfZG9tYWluX3dpbmRvd19lbmFibGUoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCQkJCQkgICAgIHUzMiB3bmRfbnIsIHBoeXNfYWRkcl90IHBhZGRyLAogCQkJCQkgICAgIHU2NCBzaXplLCBpbnQgcHJvdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IDAzZjQ4ZDkuLmQwOWVjN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtMTUsMTEgKzE1LDEzIEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvaXJxaGFuZGxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogI2luY2x1ZGUgPGxpbnV4L2lycW5yLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTI3LDExICsyOSw3IEBACiAKIHN0cnVjdCBzZXFfZmlsZTsKIHN0cnVjdCBtb2R1bGU7Ci1zdHJ1Y3QgaXJxX2Rlc2M7Ci1zdHJ1Y3QgaXJxX2RhdGE7Ci10eXBlZGVmCXZvaWQgKCppcnFfZmxvd19oYW5kbGVyX3QpKHVuc2lnbmVkIGludCBpcnEsCi0JCQkJCSAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwotdHlwZWRlZgl2b2lkICgqaXJxX3ByZWZsb3dfaGFuZGxlcl90KShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworc3RydWN0IG1zaV9tc2c7CiAKIC8qCiAgKiBJUlEgbGluZSBzdGF0dXMuCkBAIC0xMTMsMTAgKzExMSwxNCBAQAogICoKICAqIElSUV9TRVRfTUFTS19PSwktIE9LLCBjb3JlIHVwZGF0ZXMgaXJxX2RhdGEuYWZmaW5pdHkKICAqIElSUV9TRVRfTUFTS19OT0NQWQktIE9LLCBjaGlwIGRpZCB1cGRhdGUgaXJxX2RhdGEuYWZmaW5pdHkKKyAqIElSUV9TRVRfTUFTS19PS19ET05FCS0gU2FtZSBhcyBJUlFfU0VUX01BU0tfT0sgZm9yIGNvcmUuIFNwZWNpYWwgY29kZSB0bworICoJCQkgIHN1cHBvcnQgc3RhY2tlZCBpcnFjaGlwcywgd2hpY2ggaW5kaWNhdGVzIHNraXBwaW5nCisgKgkJCSAgYWxsIGRlc2NlbmRlbnQgaXJxY2hpcHMuCiAgKi8KIGVudW0gewogCUlSUV9TRVRfTUFTS19PSyA9IDAsCiAJSVJRX1NFVF9NQVNLX09LX05PQ09QWSwKKwlJUlFfU0VUX01BU0tfT0tfRE9ORSwKIH07CiAKIHN0cnVjdCBtc2lfZGVzYzsKQEAgLTEzMyw2ICsxMzUsOCBAQAogICogQGNoaXA6CQlsb3cgbGV2ZWwgaW50ZXJydXB0IGhhcmR3YXJlIGFjY2VzcwogICogQGRvbWFpbjoJCUludGVycnVwdCB0cmFuc2xhdGlvbiBkb21haW47IHJlc3BvbnNpYmxlIGZvciBtYXBwaW5nCiAgKgkJCWJldHdlZW4gaHdpcnEgbnVtYmVyIGFuZCBsaW51eCBpcnEgbnVtYmVyLgorICogQHBhcmVudF9kYXRhOglwb2ludGVyIHRvIHBhcmVudCBzdHJ1Y3QgaXJxX2RhdGEgdG8gc3VwcG9ydCBoaWVyYXJjaHkKKyAqCQkJaXJxX2RvbWFpbgogICogQGhhbmRsZXJfZGF0YToJcGVyLUlSUSBkYXRhIGZvciB0aGUgaXJxX2NoaXAgbWV0aG9kcwogICogQGNoaXBfZGF0YToJCXBsYXRmb3JtLXNwZWNpZmljIHBlci1jaGlwIHByaXZhdGUgZGF0YSBmb3IgdGhlIGNoaXAKICAqCQkJbWV0aG9kcywgdG8gYWxsb3cgc2hhcmVkIGNoaXAgaW1wbGVtZW50YXRpb25zCkBAIC0xNTEsNiArMTU1LDkgQEAKIAl1bnNpZ25lZCBpbnQJCXN0YXRlX3VzZV9hY2Nlc3NvcnM7CiAJc3RydWN0IGlycV9jaGlwCQkqY2hpcDsKIAlzdHJ1Y3QgaXJxX2RvbWFpbgkqZG9tYWluOworI2lmZGVmCUNPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWQorCXN0cnVjdCBpcnFfZGF0YQkJKnBhcmVudF9kYXRhOworI2VuZGlmCiAJdm9pZAkJCSpoYW5kbGVyX2RhdGE7CiAJdm9pZAkJCSpjaGlwX2RhdGE7CiAJc3RydWN0IG1zaV9kZXNjCQkqbXNpX2Rlc2M7CkBAIC0zMTUsNiArMzIyLDggQEAKICAqCQkJCWFueSBvdGhlciBjYWxsYmFjayByZWxhdGVkIHRvIHRoaXMgaXJxCiAgKiBAaXJxX3JlbGVhc2VfcmVzb3VyY2VzOglvcHRpb25hbCB0byByZWxlYXNlIHJlc291cmNlcyBhY3F1aXJlZCB3aXRoCiAgKgkJCQlpcnFfcmVxdWVzdF9yZXNvdXJjZXMKKyAqIEBpcnFfY29tcG9zZV9tc2lfbXNnOglvcHRpb25hbCB0byBjb21wb3NlIG1lc3NhZ2UgY29udGVudCBmb3IgTVNJCisgKiBAaXJxX3dyaXRlX21zaV9tc2c6CW9wdGlvbmFsIHRvIHdyaXRlIG1lc3NhZ2UgY29udGVudCBmb3IgTVNJCiAgKiBAZmxhZ3M6CQljaGlwIHNwZWNpZmljIGZsYWdzCiAgKi8KIHN0cnVjdCBpcnFfY2hpcCB7CkBAIC0zNTEsNiArMzYwLDkgQEAKIAlpbnQJCSgqaXJxX3JlcXVlc3RfcmVzb3VyY2VzKShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOwogCXZvaWQJCSgqaXJxX3JlbGVhc2VfcmVzb3VyY2VzKShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOwogCisJdm9pZAkJKCppcnFfY29tcG9zZV9tc2lfbXNnKShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHN0cnVjdCBtc2lfbXNnICptc2cpOworCXZvaWQJCSgqaXJxX3dyaXRlX21zaV9tc2cpKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CisKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogfTsKIApAQCAtNDM4LDYgKzQ1MCwxOCBAQAogZXh0ZXJuIHZvaWQgaGFuZGxlX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKIGV4dGVybiB2b2lkIGhhbmRsZV9uZXN0ZWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogCitleHRlcm4gaW50IGlycV9jaGlwX2NvbXBvc2VfbXNpX21zZyhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHN0cnVjdCBtc2lfbXNnICptc2cpOworI2lmZGVmCUNPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWQorZXh0ZXJuIHZvaWQgaXJxX2NoaXBfYWNrX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworZXh0ZXJuIGludCBpcnFfY2hpcF9yZXRyaWdnZXJfaGllcmFyY2h5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CitleHRlcm4gdm9pZCBpcnFfY2hpcF9tYXNrX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworZXh0ZXJuIHZvaWQgaXJxX2NoaXBfdW5tYXNrX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworZXh0ZXJuIHZvaWQgaXJxX2NoaXBfZW9pX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworZXh0ZXJuIGludCBpcnFfY2hpcF9zZXRfYWZmaW5pdHlfcGFyZW50KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwKKwkJCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QsCisJCQkJCWJvb2wgZm9yY2UpOworI2VuZGlmCisKIC8qIEhhbmRsaW5nIG9mIHVuaGFuZGxlZCBhbmQgc3B1cmlvdXMgaW50ZXJydXB0czogKi8KIGV4dGVybiB2b2lkIG5vdGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKIAkJCSAgIGlycXJldHVybl90IGFjdGlvbl9yZXQpOwpAQCAtNjM5LDEzICs2NjMsNiBAQAogdm9pZCBpcnFfaW5pdF9kZXNjKHVuc2lnbmVkIGludCBpcnEpOwogI2VuZGlmCiAKLSNpZm5kZWYgaXJxX3JlZ193cml0ZWwKLSMgZGVmaW5lIGlycV9yZWdfd3JpdGVsKHZhbCwgYWRkcikJd3JpdGVsKHZhbCwgYWRkcikKLSNlbmRpZgotI2lmbmRlZiBpcnFfcmVnX3JlYWRsCi0jIGRlZmluZSBpcnFfcmVnX3JlYWRsKGFkZHIpCQlyZWFkbChhZGRyKQotI2VuZGlmCi0KIC8qKgogICogc3RydWN0IGlycV9jaGlwX3JlZ3MgLSByZWdpc3RlciBvZmZzZXRzIGZvciBzdHJ1Y3QgaXJxX2djaQogICogQGVuYWJsZToJRW5hYmxlIHJlZ2lzdGVyIG9mZnNldCB0byByZWdfYmFzZQpAQCAtNjkyLDYgKzcwOSw4IEBACiAgKiBzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAtIEdlbmVyaWMgaXJxIGNoaXAgZGF0YSBzdHJ1Y3R1cmUKICAqIEBsb2NrOgkJTG9jayB0byBwcm90ZWN0IHJlZ2lzdGVyIGFuZCBjYWNoZSBkYXRhIGFjY2VzcwogICogQHJlZ19iYXNlOgkJUmVnaXN0ZXIgYmFzZSBhZGRyZXNzICh2aXJ0dWFsKQorICogQHJlZ19yZWFkbDoJCUFsdGVybmF0ZSBJL08gYWNjZXNzb3IgKGRlZmF1bHRzIHRvIHJlYWRsIGlmIE5VTEwpCisgKiBAcmVnX3dyaXRlbDoJCUFsdGVybmF0ZSBJL08gYWNjZXNzb3IgKGRlZmF1bHRzIHRvIHdyaXRlbCBpZiBOVUxMKQogICogQGlycV9iYXNlOgkJSW50ZXJydXB0IGJhc2UgbnIgZm9yIHRoaXMgY2hpcAogICogQGlycV9jbnQ6CQlOdW1iZXIgb2YgaW50ZXJydXB0cyBoYW5kbGVkIGJ5IHRoaXMgY2hpcAogICogQG1hc2tfY2FjaGU6CQlDYWNoZWQgbWFzayByZWdpc3RlciBzaGFyZWQgYmV0d2VlbiBhbGwgY2hpcCB0eXBlcwpAQCAtNzE2LDYgKzczNSw4IEBACiBzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyB7CiAJcmF3X3NwaW5sb2NrX3QJCWxvY2s7CiAJdm9pZCBfX2lvbWVtCQkqcmVnX2Jhc2U7CisJdTMyCQkJKCpyZWdfcmVhZGwpKHZvaWQgX19pb21lbSAqYWRkcik7CisJdm9pZAkJCSgqcmVnX3dyaXRlbCkodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKIAl1bnNpZ25lZCBpbnQJCWlycV9iYXNlOwogCXVuc2lnbmVkIGludAkJaXJxX2NudDsKIAl1MzIJCQltYXNrX2NhY2hlOwpAQCAtNzQwLDEyICs3NjEsMTQgQEAKICAqCQkJCXRoZSBwYXJlbnQgaXJxLiBVc3VhbGx5IEdQSU8gaW1wbGVtZW50YXRpb25zCiAgKiBASVJRX0dDX01BU0tfQ0FDSEVfUEVSX1RZUEU6CU1hc2sgY2FjaGUgaXMgY2hpcCB0eXBlIHByaXZhdGUKICAqIEBJUlFfR0NfTk9fTUFTSzoJCURvIG5vdCBjYWxjdWxhdGUgaXJxX2RhdGEtPm1hc2sKKyAqIEBJUlFfR0NfQkVfSU86CQlVc2UgYmlnLWVuZGlhbiByZWdpc3RlciBhY2Nlc3NlcyAoZGVmYXVsdDogTEUpCiAgKi8KIGVudW0gaXJxX2djX2ZsYWdzIHsKIAlJUlFfR0NfSU5JVF9NQVNLX0NBQ0hFCQk9IDEgPDwgMCwKIAlJUlFfR0NfSU5JVF9ORVNURURfTE9DSwkJPSAxIDw8IDEsCiAJSVJRX0dDX01BU0tfQ0FDSEVfUEVSX1RZUEUJPSAxIDw8IDIsCiAJSVJRX0dDX05PX01BU0sJCQk9IDEgPDwgMywKKwlJUlFfR0NfQkVfSU8JCQk9IDEgPDwgNCwKIH07CiAKIC8qCkBAIC04MjEsNCArODQ0LDIyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2djX3VubG9jayhzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MpIHsgfQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfcmVnX3dyaXRlbChzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MsCisJCQkJICB1MzIgdmFsLCBpbnQgcmVnX29mZnNldCkKK3sKKwlpZiAoZ2MtPnJlZ193cml0ZWwpCisJCWdjLT5yZWdfd3JpdGVsKHZhbCwgZ2MtPnJlZ19iYXNlICsgcmVnX29mZnNldCk7CisJZWxzZQorCQl3cml0ZWwodmFsLCBnYy0+cmVnX2Jhc2UgKyByZWdfb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaXJxX3JlZ19yZWFkbChzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MsCisJCQkJaW50IHJlZ19vZmZzZXQpCit7CisJaWYgKGdjLT5yZWdfcmVhZGwpCisJCXJldHVybiBnYy0+cmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIHJlZ19vZmZzZXQpOworCWVsc2UKKwkJcmV0dXJuIHJlYWRsKGdjLT5yZWdfYmFzZSArIHJlZ19vZmZzZXQpOworfQorCiAjZW5kaWYgLyogX0xJTlVYX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycWRvbWFpbi5oIGIvaW5jbHVkZS9saW51eC9pcnFkb21haW4uaAppbmRleCBiMGY5ZDE2Li42NzZkNzMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycWRvbWFpbi5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxZG9tYWluLmgKQEAgLTMzLDExICszMywxNCBAQAogI2RlZmluZSBfTElOVVhfSVJRRE9NQUlOX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxaGFuZGxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KIAogc3RydWN0IGRldmljZV9ub2RlOwogc3RydWN0IGlycV9kb21haW47CiBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkOworc3RydWN0IGlycV9jaGlwOworc3RydWN0IGlycV9kYXRhOwogCiAvKiBOdW1iZXIgb2YgaXJxcyByZXNlcnZlZCBmb3IgYSBsZWdhY3kgaXNhIGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgTlVNX0lTQV9JTlRFUlJVUFRTCTE2CkBAIC02NCw2ICs2NywxNiBAQAogCWludCAoKnhsYXRlKShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAogCQkgICAgIGNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCiAJCSAgICAgdW5zaWduZWQgbG9uZyAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF90eXBlKTsKKworI2lmZGVmCUNPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWQorCS8qIGV4dGVuZGVkIFYyIGludGVyZmFjZXMgdG8gc3VwcG9ydCBoaWVyYXJjaHkgaXJxX2RvbWFpbnMgKi8KKwlpbnQgKCphbGxvYykoc3RydWN0IGlycV9kb21haW4gKmQsIHVuc2lnbmVkIGludCB2aXJxLAorCQkgICAgIHVuc2lnbmVkIGludCBucl9pcnFzLCB2b2lkICphcmcpOworCXZvaWQgKCpmcmVlKShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgdW5zaWduZWQgaW50IHZpcnEsCisJCSAgICAgdW5zaWduZWQgaW50IG5yX2lycXMpOworCXZvaWQgKCphY3RpdmF0ZSkoc3RydWN0IGlycV9kb21haW4gKmQsIHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpOworCXZvaWQgKCpkZWFjdGl2YXRlKShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSk7CisjZW5kaWYKIH07CiAKIGV4dGVybiBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgaXJxX2dlbmVyaWNfY2hpcF9vcHM7CkBAIC03Nyw2ICs5MCw3IEBACiAgKiBAb3BzOiBwb2ludGVyIHRvIGlycV9kb21haW4gbWV0aG9kcwogICogQGhvc3RfZGF0YTogcHJpdmF0ZSBkYXRhIHBvaW50ZXIgZm9yIHVzZSBieSBvd25lci4gIE5vdCB0b3VjaGVkIGJ5IGlycV9kb21haW4KICAqICAgICAgICAgICAgIGNvcmUgY29kZS4KKyAqIEBmbGFnczogaG9zdCBwZXIgaXJxX2RvbWFpbiBmbGFncwogICoKICAqIE9wdGlvbmFsIGVsZW1lbnRzCiAgKiBAb2Zfbm9kZTogUG9pbnRlciB0byBkZXZpY2UgdHJlZSBub2RlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGlycV9kb21haW4uIFVzZWQKQEAgLTg0LDYgKzk4LDcgQEAKICAqIEBnYzogUG9pbnRlciB0byBhIGxpc3Qgb2YgZ2VuZXJpYyBjaGlwcy4gVGhlcmUgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yCiAgKiAgICAgIHNldHRpbmcgdXAgb25lIG9yIG1vcmUgZ2VuZXJpYyBjaGlwcyBmb3IgaW50ZXJydXB0IGNvbnRyb2xsZXJzCiAgKiAgICAgIGRyaXZlcnMgdXNpbmcgdGhlIGdlbmVyaWMgY2hpcCBsaWJyYXJ5IHdoaWNoIHVzZXMgdGhpcyBwb2ludGVyLgorICogQHBhcmVudDogUG9pbnRlciB0byBwYXJlbnQgaXJxX2RvbWFpbiB0byBzdXBwb3J0IGhpZXJhcmNoeSBpcnFfZG9tYWlucwogICoKICAqIFJldm1hcCBkYXRhLCB1c2VkIGludGVybmFsbHkgYnkgaXJxX2RvbWFpbgogICogQHJldm1hcF9kaXJlY3RfbWF4X2lycTogVGhlIGxhcmdlc3QgaHdpcnEgdGhhdCBjYW4gYmUgc2V0IGZvciBjb250cm9sbGVycyB0aGF0CkBAIC05NywxMCArMTEyLDE0IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgKm9wczsKIAl2b2lkICpob3N0X2RhdGE7CisJdW5zaWduZWQgaW50IGZsYWdzOwogCiAJLyogT3B0aW9uYWwgZGF0YSAqLwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKIAlzdHJ1Y3QgaXJxX2RvbWFpbl9jaGlwX2dlbmVyaWMgKmdjOworI2lmZGVmCUNPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWQorCXN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQ7CisjZW5kaWYKIAogCS8qIHJldmVyc2UgbWFwIGRhdGEuIFRoZSBsaW5lYXIgbWFwIGdldHMgYXBwZW5kZWQgdG8gdGhlIGlycV9kb21haW4gKi8KIAlpcnFfaHdfbnVtYmVyX3QgaHdpcnFfbWF4OwpAQCAtMTEwLDYgKzEyOSwyMiBAQAogCXVuc2lnbmVkIGludCBsaW5lYXJfcmV2bWFwW107CiB9OwogCisvKiBJcnEgZG9tYWluIGZsYWdzICovCitlbnVtIHsKKwkvKiBJcnEgZG9tYWluIGlzIGhpZXJhcmNoaWNhbCAqLworCUlSUV9ET01BSU5fRkxBR19ISUVSQVJDSFkJPSAoMSA8PCAwKSwKKworCS8qIENvcmUgY2FsbHMgYWxsb2MvZnJlZSByZWN1cnNpdmUgdGhyb3VnaCB0aGUgZG9tYWluIGhpZXJhcmNoeS4gKi8KKwlJUlFfRE9NQUlOX0ZMQUdfQVVUT19SRUNVUlNJVkUJPSAoMSA8PCAxKSwKKworCS8qCisJICogRmxhZ3Mgc3RhcnRpbmcgZnJvbSBJUlFfRE9NQUlOX0ZMQUdfTk9OQ09SRSBhcmUgcmVzZXJ2ZWQKKwkgKiBmb3IgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcHVycG9zZXMgYW5kIGlnbm9yZWQgYnkgdGhlCisJICogY29yZSBjb2RlLgorCSAqLworCUlSUV9ET01BSU5fRkxBR19OT05DT1JFCQk9ICgxIDw8IDE2KSwKK307CisKICNpZmRlZiBDT05GSUdfSVJRX0RPTUFJTgogc3RydWN0IGlycV9kb21haW4gKl9faXJxX2RvbWFpbl9hZGQoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLCBpbnQgc2l6ZSwKIAkJCQkgICAgaXJxX2h3X251bWJlcl90IGh3aXJxX21heCwgaW50IGRpcmVjdF9tYXgsCkBAIC0yMjAsOCArMjU1LDc0IEBACiAJCQljb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAogCQkJaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X3R5cGUpOwogCisvKiBWMiBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgaGllcmFyY2h5IElSUSBkb21haW5zLiAqLworZXh0ZXJuIHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJCXVuc2lnbmVkIGludCB2aXJxKTsKKyNpZmRlZglDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKK2V4dGVybiBzdHJ1Y3QgaXJxX2RvbWFpbiAqaXJxX2RvbWFpbl9hZGRfaGllcmFyY2h5KHN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQsCisJCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzaXplLAorCQkJc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzICpvcHMsIHZvaWQgKmhvc3RfZGF0YSk7CitleHRlcm4gaW50IF9faXJxX2RvbWFpbl9hbGxvY19pcnFzKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIGludCBpcnFfYmFzZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgbnJfaXJxcywgaW50IG5vZGUsIHZvaWQgKmFyZywKKwkJCQkgICBib29sIHJlYWxsb2MpOworZXh0ZXJuIHZvaWQgaXJxX2RvbWFpbl9mcmVlX2lycXModW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBucl9pcnFzKTsKK2V4dGVybiB2b2lkIGlycV9kb21haW5fYWN0aXZhdGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpOworZXh0ZXJuIHZvaWQgaXJxX2RvbWFpbl9kZWFjdGl2YXRlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhKTsKKworc3RhdGljIGlubGluZSBpbnQgaXJxX2RvbWFpbl9hbGxvY19pcnFzKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQl1bnNpZ25lZCBpbnQgbnJfaXJxcywgaW50IG5vZGUsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gX19pcnFfZG9tYWluX2FsbG9jX2lycXMoZG9tYWluLCAtMSwgbnJfaXJxcywgbm9kZSwgYXJnLCBmYWxzZSk7Cit9CisKK2V4dGVybiBpbnQgaXJxX2RvbWFpbl9zZXRfaHdpcnFfYW5kX2NoaXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJIHVuc2lnbmVkIGludCB2aXJxLAorCQkJCQkgaXJxX2h3X251bWJlcl90IGh3aXJxLAorCQkJCQkgc3RydWN0IGlycV9jaGlwICpjaGlwLAorCQkJCQkgdm9pZCAqY2hpcF9kYXRhKTsKK2V4dGVybiB2b2lkIGlycV9kb21haW5fc2V0X2luZm8oc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJaXJxX2h3X251bWJlcl90IGh3aXJxLCBzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAsCisJCQkJdm9pZCAqY2hpcF9kYXRhLCBpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlciwKKwkJCQl2b2lkICpoYW5kbGVyX2RhdGEsIGNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSk7CitleHRlcm4gdm9pZCBpcnFfZG9tYWluX3Jlc2V0X2lycV9kYXRhKHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpOworZXh0ZXJuIHZvaWQgaXJxX2RvbWFpbl9mcmVlX2lycXNfY29tbW9uKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJCXVuc2lnbmVkIGludCB2aXJxLAorCQkJCQl1bnNpZ25lZCBpbnQgbnJfaXJxcyk7CitleHRlcm4gdm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxc190b3Aoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgbnJfaXJxcyk7CisKK2V4dGVybiBpbnQgaXJxX2RvbWFpbl9hbGxvY19pcnFzX3BhcmVudChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQl1bnNpZ25lZCBpbnQgaXJxX2Jhc2UsCisJCQkJCXVuc2lnbmVkIGludCBucl9pcnFzLCB2b2lkICphcmcpOworCitleHRlcm4gdm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxc19wYXJlbnQoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJdW5zaWduZWQgaW50IGlycV9iYXNlLAorCQkJCQl1bnNpZ25lZCBpbnQgbnJfaXJxcyk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpcnFfZG9tYWluX2lzX2hpZXJhcmNoeShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluKQoreworCXJldHVybiBkb21haW4tPmZsYWdzICYgSVJRX0RPTUFJTl9GTEFHX0hJRVJBUkNIWTsKK30KKyNlbHNlCS8qIENPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWSAqLworc3RhdGljIGlubGluZSB2b2lkIGlycV9kb21haW5fYWN0aXZhdGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2RvbWFpbl9kZWFjdGl2YXRlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpIHsgfQorc3RhdGljIGlubGluZSBpbnQgaXJxX2RvbWFpbl9hbGxvY19pcnFzKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQl1bnNpZ25lZCBpbnQgbnJfaXJxcywgaW50IG5vZGUsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpcnFfZG9tYWluX2lzX2hpZXJhcmNoeShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluKQoreworCXJldHVybiBmYWxzZTsKK30KKyNlbmRpZgkvKiBDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkgKi8KKwogI2Vsc2UgLyogQ09ORklHX0lSUV9ET01BSU4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZGlzcG9zZV9tYXBwaW5nKHVuc2lnbmVkIGludCB2aXJxKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZG9tYWluX2FjdGl2YXRlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGlycV9kb21haW5fZGVhY3RpdmF0ZV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKSB7IH0KICNlbmRpZiAvKiAhQ09ORklHX0lSUV9ET01BSU4gKi8KIAogI2VuZGlmIC8qIF9MSU5VWF9JUlFET01BSU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFoYW5kbGVyLmggYi9pbmNsdWRlL2xpbnV4L2lycWhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQ1NDMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pcnFoYW5kbGVyLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfTElOVVhfSVJRSEFORExFUl9ICisjZGVmaW5lIF9MSU5VWF9JUlFIQU5ETEVSX0gKKworLyoKKyAqIEludGVycnVwdCBmbG93IGhhbmRsZXIgdHlwZWRlZnMgYXJlIGRlZmluZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhcgorICogaW5jbHVkZSBkZXBlbmRlbmNpZXMuCisgKi8KKworc3RydWN0IGlycV9kZXNjOworc3RydWN0IGlycV9kYXRhOwordHlwZWRlZgl2b2lkICgqaXJxX2Zsb3dfaGFuZGxlcl90KSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwordHlwZWRlZgl2b2lkICgqaXJxX3ByZWZsb3dfaGFuZGxlcl90KShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDNkNzcwZjU1Li40NDZkNzZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTE2Miw2ICsxNjIsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQCisgIHZvaWQgX19fbWlnaHRfc2xlZXAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBwcmVlbXB0X29mZnNldCk7CiAgIHZvaWQgX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KTsKIC8qKgogICogbWlnaHRfc2xlZXAgLSBhbm5vdGF0aW9uIGZvciBmdW5jdGlvbnMgdGhhdCBjYW4gc2xlZXAKQEAgLTE3NSwxMCArMTc2LDE0IEBACiAgKi8KICMgZGVmaW5lIG1pZ2h0X3NsZWVwKCkgXAogCWRvIHsgX19taWdodF9zbGVlcChfX0ZJTEVfXywgX19MSU5FX18sIDApOyBtaWdodF9yZXNjaGVkKCk7IH0gd2hpbGUgKDApCisjIGRlZmluZSBzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKQogI2Vsc2UKKyAgc3RhdGljIGlubGluZSB2b2lkIF9fX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgIGludCBwcmVlbXB0X29mZnNldCkgeyB9CiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAogCQkJCSAgIGludCBwcmVlbXB0X29mZnNldCkgeyB9CiAjIGRlZmluZSBtaWdodF9zbGVlcCgpIGRvIHsgbWlnaHRfcmVzY2hlZCgpOyB9IHdoaWxlICgwKQorIyBkZWZpbmUgc2NoZWRfYW5ub3RhdGVfc2xlZXAoKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2RlZmluZSBtaWdodF9zbGVlcF9pZihjb25kKSBkbyB7IGlmIChjb25kKSBtaWdodF9zbGVlcCgpOyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggYmQ1ZmVmZS4uYmZiYzgxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC0xMTkxLDkgKzExOTEsOSBAQAogZXh0ZXJuIGludCBhdGFfc2NzaV9zbGF2ZV9jb25maWcoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIGV4dGVybiB2b2lkIGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCQkgICAgICAgaW50IHF1ZXVlX2RlcHRoLCBpbnQgcmVhc29uKTsKKwkJCQkgICAgICAgaW50IHF1ZXVlX2RlcHRoKTsKIGV4dGVybiBpbnQgX19hdGFfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCQkgICAgaW50IHF1ZXVlX2RlcHRoLCBpbnQgcmVhc29uKTsKKwkJCQkgICAgaW50IHF1ZXVlX2RlcHRoKTsKIGV4dGVybiBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhX2Rldl9wYWlyKHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsKIGV4dGVybiBpbnQgYXRhX2RvX3NldF9tb2RlKHN0cnVjdCBhdGFfbGluayAqbGluaywgc3RydWN0IGF0YV9kZXZpY2UgKipyX2ZhaWxlZF9kZXYpOwogZXh0ZXJuIHZvaWQgYXRhX3Njc2lfcG9ydF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBhdGFfcG9ydCAqYXApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC9kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9sb2NrZC9kZWJ1Zy5oCmluZGV4IDI1N2QzNzcuLjBjYTgxMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2QvZGVidWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2RlYnVnLmgKQEAgLTE3LDEyICsxNyw4IEBACiAgKiBFbmFibGUgbG9ja2QgZGVidWdnaW5nLgogICogUmVxdWlyZXMgUlBDX0RFQlVHLgogICovCi0jaWZkZWYgUlBDX0RFQlVHCi0jIGRlZmluZSBMT0NLRF9ERUJVRwkJMQotI2VuZGlmCi0KICN1bmRlZiBpZmRlYnVnCi0jaWYgZGVmaW5lZChSUENfREVCVUcpICYmIGRlZmluZWQoTE9DS0RfREVCVUcpCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgaWZkZWJ1ZyhmbGFnKQkJaWYgKHVubGlrZWx5KG5sbV9kZWJ1ZyAmIE5MTURCR18jI2ZsYWcpKQogI2Vsc2UKICMgZGVmaW5lIGlmZGVidWcoZmxhZykJCWlmICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYnVzLmggYi9pbmNsdWRlL2xpbnV4L21idXMuaAppbmRleCA1NTBjODhmLi42MTFiNjlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21idXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21idXMuaApAQCAtNjEsNiArNjEsNyBAQAogfQogI2VuZGlmCiAKK2ludCBtdmVidV9tYnVzX3NhdmVfY3B1X3RhcmdldCh1MzIgKnN0b3JlX2FkZHIpOwogdm9pZCBtdmVidV9tYnVzX2dldF9wY2llX21lbV9hcGVydHVyZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CiB2b2lkIG12ZWJ1X21idXNfZ2V0X3BjaWVfaW9fYXBlcnR1cmUoc3RydWN0IHJlc291cmNlICpyZXMpOwogaW50IG12ZWJ1X21idXNfYWRkX3dpbmRvd19yZW1hcF9ieV9pZCh1bnNpZ25lZCBpbnQgdGFyZ2V0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvYWJ4NTAwL2FiODUwMC1zeXNjdHJsLmggYi9pbmNsdWRlL2xpbnV4L21mZC9hYng1MDAvYWI4NTAwLXN5c2N0cmwuaAppbmRleCBhZGJhODlkLi42ODkzMTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9hYng1MDAvYWI4NTAwLXN5c2N0cmwuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9hYng1MDAvYWI4NTAwLXN5c2N0cmwuaApAQCAtMTIsNyArMTIsNiBAQAogCiBpbnQgYWI4NTAwX3N5c2N0cmxfcmVhZCh1MTYgcmVnLCB1OCAqdmFsdWUpOwogaW50IGFiODUwMF9zeXNjdHJsX3dyaXRlKHUxNiByZWcsIHU4IG1hc2ssIHU4IHZhbHVlKTsKLXZvaWQgYWI4NTAwX3Jlc3RhcnQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpOwogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9hcml6b25hL3JlZ2lzdGVycy5oIGIvaW5jbHVkZS9saW51eC9tZmQvYXJpem9uYS9yZWdpc3RlcnMuaAppbmRleCBjMGIwNzVmLi5hYWNjMTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9hcml6b25hL3JlZ2lzdGVycy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2FyaXpvbmEvcmVnaXN0ZXJzLmgKQEAgLTEyNSw2ICsxMjUsOCBAQAogI2RlZmluZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMSAgICAgICAgICAgICAgICAgIDB4MjE4CiAjZGVmaW5lIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8yICAgICAgICAgICAgICAgICAgMHgyMTkKICNkZWZpbmUgQVJJWk9OQV9NSUNfQklBU19DVFJMXzMgICAgICAgICAgICAgICAgICAweDIxQQorI2RlZmluZSBBUklaT05BX0hQX0NUUkxfMUwgICAgICAgICAgICAgICAgICAgICAgIDB4MjI1CisjZGVmaW5lIEFSSVpPTkFfSFBfQ1RSTF8xUiAgICAgICAgICAgICAgICAgICAgICAgMHgyMjYKICNkZWZpbmUgQVJJWk9OQV9BQ0NFU1NPUllfREVURUNUX01PREVfMSAgICAgICAgICAweDI5MwogI2RlZmluZSBBUklaT05BX0hFQURQSE9ORV9ERVRFQ1RfMSAgICAgICAgICAgICAgIDB4MjlCCiAjZGVmaW5lIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8yICAgICAgICAgICAgICAgMHgyOUMKQEAgLTI3OSw4ICsyODEsMTYgQEAKICNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMiAgICAgICAgICAgICAgICAweDU0OAogI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8zICAgICAgICAgICAgICAgIDB4NTQ5CiAjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzQgICAgICAgICAgICAgICAgMHg1NEEKKyNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfNSAgICAgICAgICAgICAgICAweDU0QgorI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF82ICAgICAgICAgICAgICAgIDB4NTRDCisjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzcgICAgICAgICAgICAgICAgMHg1NEQKKyNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfOCAgICAgICAgICAgICAgICAweDU0RQogI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xMSAgICAgICAgICAgICAgIDB4NTUxCiAjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzEyICAgICAgICAgICAgICAgMHg1NTIKKyNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTMgICAgICAgICAgICAgICAweDU1MworI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xNCAgICAgICAgICAgICAgIDB4NTU0CisjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzE1ICAgICAgICAgICAgICAgMHg1NTUKKyNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTYgICAgICAgICAgICAgICAweDU1NgogI2RlZmluZSBBUklaT05BX0FJRjJfVFhfRU5BQkxFUyAgICAgICAgICAgICAgICAgIDB4NTU5CiAjZGVmaW5lIEFSSVpPTkFfQUlGMl9SWF9FTkFCTEVTICAgICAgICAgICAgICAgICAgMHg1NUEKICNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZPUkNFX1dSSVRFICAgICAgICAgICAgICAgICAweDU1QgpAQCAtMjI0NSw2ICsyMjU1LDQ2IEBACiAjZGVmaW5lIEFSSVpPTkFfTUlDQjNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCM19FTkEgKi8KIAogLyoKKyAqIFI1NDkgKDB4MjI1KSAtIEhQIEN0cmwgMUwKKyAqLworI2RlZmluZSBBUklaT05BX1JNVl9TSFJUX0hQMUwgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogUk1WX1NIUlRfSFAxTCAqLworI2RlZmluZSBBUklaT05BX1JNVl9TSFJUX0hQMUxfTUFTSyAgICAgICAgICAgICAgIDB4NDAwMCAgLyogUk1WX1NIUlRfSFAxTCAqLworI2RlZmluZSBBUklaT05BX1JNVl9TSFJUX0hQMUxfU0hJRlQgICAgICAgICAgICAgICAgICAxNCAgLyogUk1WX1NIUlRfSFAxTCAqLworI2RlZmluZSBBUklaT05BX1JNVl9TSFJUX0hQMUxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogUk1WX1NIUlRfSFAxTCAqLworI2RlZmluZSBBUklaT05BX0hQMUxfRkxXUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFAxTF9GTFdSICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9GTFdSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUDFMX0ZMV1IgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFMX0ZMV1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEhQMUxfRkxXUiAqLworI2RlZmluZSBBUklaT05BX0hQMUxfRkxXUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFAxTF9GTFdSICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9TSFJUSSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUDFMX1NIUlRJICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9TSFJUSV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUDFMX1NIUlRJICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9TSFJUSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUDFMX1NIUlRJICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9TSFJUSV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUDFMX1NIUlRJICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9TSFJUTyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBIUDFMX1NIUlRPICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9TSFJUT19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBIUDFMX1NIUlRPICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9TSFJUT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUDFMX1NIUlRPICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9TSFJUT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUDFMX1NIUlRPICovCisKKy8qCisgKiBSNTUwICgweDIyNikgLSBIUCBDdHJsIDFSCisgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFSICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFJNVl9TSFJUX0hQMVIgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFSX01BU0sgICAgICAgICAgICAgICAweDQwMDAgIC8qIFJNVl9TSFJUX0hQMVIgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFSX1NISUZUICAgICAgICAgICAgICAgICAgMTQgIC8qIFJNVl9TSFJUX0hQMVIgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFJNVl9TSFJUX0hQMVIgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX0ZMV1IgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQMVJfRkxXUiAqLworI2RlZmluZSBBUklaT05BX0hQMVJfRkxXUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFAxUl9GTFdSICovCisjZGVmaW5lIEFSSVpPTkFfSFAxUl9GTFdSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBIUDFSX0ZMV1IgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX0ZMV1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQMVJfRkxXUiAqLworI2RlZmluZSBBUklaT05BX0hQMVJfU0hSVEkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFAxUl9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMVJfU0hSVElfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFAxUl9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMVJfU0hSVElfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFAxUl9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMVJfU0hSVElfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFAxUl9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMVJfU0hSVE8gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFAxUl9TSFJUTyAqLworI2RlZmluZSBBUklaT05BX0hQMVJfU0hSVE9fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFAxUl9TSFJUTyAqLworI2RlZmluZSBBUklaT05BX0hQMVJfU0hSVE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFAxUl9TSFJUTyAqLworI2RlZmluZSBBUklaT05BX0hQMVJfU0hSVE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFAxUl9TSFJUTyAqLworCisvKgogICogUjY1OSAoMHgyOTMpIC0gQWNjZXNzb3J5IERldGVjdCBNb2RlIDEKICAqLwogI2RlZmluZSBBUklaT05BX0FDQ0RFVF9TUkMgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUNDREVUX1NSQyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvYXRtZWwtaGxjZGMuaCBiL2luY2x1ZGUvbGludXgvbWZkL2F0bWVsLWhsY2RjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI3OWFiMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2F0bWVsLWhsY2RjLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIEVsZWN0cm9ucworICogQ29weXJpZ2h0IChDKSAyMDE0IEF0bWVsCisgKgorICogQXV0aG9yOiBCb3JpcyBCUkVaSUxMT04gPGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUZEX0hMQ0RDX0gKKyNkZWZpbmUgX19MSU5VWF9NRkRfSExDRENfSAorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNkZWZpbmUgQVRNRUxfSExDRENfQ0ZHKGkpCQkoKGkpICogMHg0KQorI2RlZmluZSBBVE1FTF9ITENEQ19TSUdfQ0ZHCQlMQ0RDRkcoNSkKKyNkZWZpbmUgQVRNRUxfSExDRENfSFNQT0wJCUJJVCgwKQorI2RlZmluZSBBVE1FTF9ITENEQ19WU1BPTAkJQklUKDEpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX1ZTUERMWVMJCUJJVCgyKQorI2RlZmluZSBBVE1FTF9ITENEQ19WU1BETFlFCQlCSVQoMykKKyNkZWZpbmUgQVRNRUxfSExDRENfRElTUFBPTAkJQklUKDQpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0RJVEhFUgkJQklUKDYpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0RJU1BETFkJCUJJVCg3KQorI2RlZmluZSBBVE1FTF9ITENEQ19NT0RFX01BU0sJCUdFTk1BU0soOSwgOCkKKyNkZWZpbmUgQVRNRUxfSExDRENfUFAJCQlCSVQoMTApCisjZGVmaW5lIEFUTUVMX0hMQ0RDX1ZTUFNVCQlCSVQoMTIpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX1ZTUEhPCQlCSVQoMTMpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0dVQVJEVElNRV9NQVNLCUdFTk1BU0soMjAsIDE2KQorCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0VOCQkJMHgyMAorI2RlZmluZSBBVE1FTF9ITENEQ19ESVMJCQkweDI0CisjZGVmaW5lIEFUTUVMX0hMQ0RDX1NSCQkJMHgyOAorI2RlZmluZSBBVE1FTF9ITENEQ19JRVIJCQkweDJjCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0lEUgkJCTB4MzAKKyNkZWZpbmUgQVRNRUxfSExDRENfSU1SCQkJMHgzNAorI2RlZmluZSBBVE1FTF9ITENEQ19JU1IJCQkweDM4CisKKyNkZWZpbmUgQVRNRUxfSExDRENfQ0xLUE9MCQlCSVQoMCkKKyNkZWZpbmUgQVRNRUxfSExDRENfQ0xLU0VMCQlCSVQoMikKKyNkZWZpbmUgQVRNRUxfSExDRENfQ0xLUFdNU0VMCQlCSVQoMykKKyNkZWZpbmUgQVRNRUxfSExDRENfQ0dESVMoaSkJCUJJVCg4ICsgKGkpKQorI2RlZmluZSBBVE1FTF9ITENEQ19DTEtESVZfU0hGVAkJMTYKKyNkZWZpbmUgQVRNRUxfSExDRENfQ0xLRElWX01BU0sJCUdFTk1BU0soMjMsIDE2KQorI2RlZmluZSBBVE1FTF9ITENEQ19DTEtESVYoZGl2KQkJKChkaXYgLSAyKSA8PCBBVE1FTF9ITENEQ19DTEtESVZfU0hGVCkKKworI2RlZmluZSBBVE1FTF9ITENEQ19QSVhFTF9DTEsJCUJJVCgwKQorI2RlZmluZSBBVE1FTF9ITENEQ19TWU5DCQlCSVQoMSkKKyNkZWZpbmUgQVRNRUxfSExDRENfRElTUAkJQklUKDIpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX1BXTQkJCUJJVCgzKQorI2RlZmluZSBBVE1FTF9ITENEQ19TSVAJCQlCSVQoNCkKKworI2RlZmluZSBBVE1FTF9ITENEQ19TT0YJCQlCSVQoMCkKKyNkZWZpbmUgQVRNRUxfSExDRENfU1lOQ0RJUwkJQklUKDEpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0ZJRk9FUlIJCUJJVCg0KQorI2RlZmluZSBBVE1FTF9ITENEQ19MQVlFUl9TVEFUVVMoeCkJQklUKCh4KSArIDgpCisKKy8qKgorICogU3RydWN0dXJlIHNoYXJlZCBieSB0aGUgTUZEIGRldmljZSBhbmQgaXRzIHN1YmRldmljZXMuCisgKgorICogQHJlZ21hcDogcmVnaXN0ZXIgbWFwIHVzZWQgdG8gYWNjZXNzIEhMQ0RDIElQIHJlZ2lzdGVycworICogQHBlcmlwaF9jbGs6IHRoZSBobGNkYyBwZXJpcGhlcmFsIGNsb2NrCisgKiBAc3lzX2NsazogdGhlIGhsY2RjIHN5c3RlbSBjbG9jaworICogQHNsb3dfY2xrOiB0aGUgc3lzdGVtIHNsb3cgY2xrCisgKiBAaXJxOiB0aGUgaGxjZGMgaXJxCisgKi8KK3N0cnVjdCBhdG1lbF9obGNkYyB7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCBjbGsgKnBlcmlwaF9jbGs7CisJc3RydWN0IGNsayAqc3lzX2NsazsKKwlzdHJ1Y3QgY2xrICpzbG93X2NsazsKKwlpbnQgaXJxOworfTsKKworI2VuZGlmIC8qIF9fTElOVVhfTUZEX0hMQ0RDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2F4cDIweC5oIGIvaW5jbHVkZS9saW51eC9tZmQvYXhwMjB4LmgKaW5kZXggZDBlMzFhMi4uODE1ODlkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvYXhwMjB4LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvYXhwMjB4LmgKQEAgLTE0LDYgKzE0LDggQEAKIGVudW0gewogCUFYUDIwMl9JRCA9IDAsCiAJQVhQMjA5X0lELAorCUFYUDI4OF9JRCwKKwlOUl9BWFAyMFhfVkFSSUFOVFMsCiB9OwogCiAjZGVmaW5lIEFYUDIwWF9EQVRBQ0FDSEUobSkJCSgweDA0ICsgKG0pKQpAQCAtNDksMTEgKzUxLDEzIEBACiAjZGVmaW5lIEFYUDIwWF9JUlEzX0VOCQkJMHg0MgogI2RlZmluZSBBWFAyMFhfSVJRNF9FTgkJCTB4NDMKICNkZWZpbmUgQVhQMjBYX0lSUTVfRU4JCQkweDQ0CisjZGVmaW5lIEFYUDIwWF9JUlE2X0VOCQkJMHg0NQogI2RlZmluZSBBWFAyMFhfSVJRMV9TVEFURQkJMHg0OAogI2RlZmluZSBBWFAyMFhfSVJRMl9TVEFURQkJMHg0OQogI2RlZmluZSBBWFAyMFhfSVJRM19TVEFURQkJMHg0YQogI2RlZmluZSBBWFAyMFhfSVJRNF9TVEFURQkJMHg0YgogI2RlZmluZSBBWFAyMFhfSVJRNV9TVEFURQkJMHg0YworI2RlZmluZSBBWFAyMFhfSVJRNl9TVEFURQkJMHg0ZAogCiAvKiBBREMgKi8KICNkZWZpbmUgQVhQMjBYX0FDSU5fVl9BRENfSAkJMHg1NgpAQCAtMTE2LDYgKzEyMCwxNSBAQAogI2RlZmluZSBBWFAyMFhfQ0NfQ1RSTAkJCTB4YjgKICNkZWZpbmUgQVhQMjBYX0ZHX1JFUwkJCTB4YjkKIAorLyogQVhQMjg4IHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBBWFAyODhfUE1JQ19BRENfSCAgICAgICAgICAgICAgIDB4NTYKKyNkZWZpbmUgQVhQMjg4X1BNSUNfQURDX0wgICAgICAgICAgICAgICAweDU3CisjZGVmaW5lIEFYUDI4OF9BRENfVFNfUElOX0NUUkwgICAgICAgICAgMHg4NAorCisjZGVmaW5lIEFYUDI4OF9QTUlDX0FEQ19FTiAgICAgICAgICAgICAgMHg4NAorI2RlZmluZSBBWFAyODhfRkdfVFVORTUJCQkweGVkCisKKwogLyogUmVndWxhdG9ycyBJRHMgKi8KIGVudW0gewogCUFYUDIwWF9MRE8xID0gMCwKQEAgLTE2OSwxMiArMTgyLDU4IEBACiAJQVhQMjBYX0lSUV9HUElPMF9JTlBVVCwKIH07CiAKK2VudW0gYXhwMjg4X2lycXMgeworCUFYUDI4OF9JUlFfVkJVU19GQUxMICAgICA9IDIsCisJQVhQMjg4X0lSUV9WQlVTX1JJU0UsCisJQVhQMjg4X0lSUV9PViwKKwlBWFAyODhfSVJRX0ZBTExJTkdfQUxULAorCUFYUDI4OF9JUlFfUklTSU5HX0FMVCwKKwlBWFAyODhfSVJRX09WX0FMVCwKKwlBWFAyODhfSVJRX0RPTkUgICAgICAgICAgPSAxMCwKKwlBWFAyODhfSVJRX0NIQVJHSU5HLAorCUFYUDI4OF9JUlFfU0FGRV9RVUlULAorCUFYUDI4OF9JUlFfU0FGRV9FTlRFUiwKKwlBWFAyODhfSVJRX0FCU0VOVCwKKwlBWFAyODhfSVJRX0FQUEVORCwKKwlBWFAyODhfSVJRX1FXQlRVLAorCUFYUDI4OF9JUlFfV0JUVSwKKwlBWFAyODhfSVJRX1FXQlRPLAorCUFYUDI4OF9JUlFfV0JUTywKKwlBWFAyODhfSVJRX1FDQlRVLAorCUFYUDI4OF9JUlFfQ0JUVSwKKwlBWFAyODhfSVJRX1FDQlRPLAorCUFYUDI4OF9JUlFfQ0JUTywKKwlBWFAyODhfSVJRX1dMMiwKKwlBWFAyODhfSVJRX1dMMSwKKwlBWFAyODhfSVJRX0dQQURDLAorCUFYUDI4OF9JUlFfT1QgICAgICAgICAgICA9IDMxLAorCUFYUDI4OF9JUlFfR1BJTzAsCisJQVhQMjg4X0lSUV9HUElPMSwKKwlBWFAyODhfSVJRX1BPS08sCisJQVhQMjg4X0lSUV9QT0tMLAorCUFYUDI4OF9JUlFfUE9LUywKKwlBWFAyODhfSVJRX1BPS04sCisJQVhQMjg4X0lSUV9QT0tQLAorCUFYUDI4OF9JUlFfVElNRVIsCisJQVhQMjg4X0lSUV9NVl9DSE5HLAorCUFYUDI4OF9JUlFfQkNfVVNCX0NITkcsCit9OworCisjZGVmaW5lIEFYUDI4OF9UU19BRENfSAkJMHg1OAorI2RlZmluZSBBWFAyODhfVFNfQURDX0wJCTB4NTkKKyNkZWZpbmUgQVhQMjg4X0dQX0FEQ19ICQkweDVhCisjZGVmaW5lIEFYUDI4OF9HUF9BRENfTAkJMHg1YgorCiBzdHJ1Y3QgYXhwMjB4X2RldiB7CiAJc3RydWN0IGRldmljZQkJCSpkZXY7CiAJc3RydWN0IGkyY19jbGllbnQJCSppMmNfY2xpZW50OwogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCXN0cnVjdCByZWdtYXBfaXJxX2NoaXBfZGF0YQkqcmVnbWFwX2lycWM7CiAJbG9uZwkJCQl2YXJpYW50OworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJfY2VsbHM7CisJc3RydWN0IG1mZF9jZWxsICAgICAgICAgICAgICAgICAqY2VsbHM7CisJY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcJKnJlZ21hcF9jZmc7CisJY29uc3Qgc3RydWN0IHJlZ21hcF9pcnFfY2hpcAkqcmVnbWFwX2lycV9jaGlwOwogfTsKIAogI2VuZGlmIC8qIF9fTElOVVhfTUZEX0FYUDIwWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21mZC9jb3JlLmgKaW5kZXggNzNlMTcwOS4uYTc2YmMxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaApAQCAtMTExLDYgKzExMSwxMyBAQAogCQkJICAgc3RydWN0IHJlc291cmNlICptZW1fYmFzZSwKIAkJCSAgIGludCBpcnFfYmFzZSwgc3RydWN0IGlycV9kb21haW4gKmlycV9kb21haW4pOwogCitzdGF0aWMgaW5saW5lIGludCBtZmRfYWRkX2hvdHBsdWdfZGV2aWNlcyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCisJCWNvbnN0IHN0cnVjdCBtZmRfY2VsbCAqY2VsbHMsIGludCBuX2RldnMpCit7CisJcmV0dXJuIG1mZF9hZGRfZGV2aWNlcyhwYXJlbnQsIFBMQVRGT1JNX0RFVklEX0FVVE8sIGNlbGxzLCBuX2RldnMsCisJCQlOVUxMLCAwLCBOVUxMKTsKK30KKwogZXh0ZXJuIHZvaWQgbWZkX3JlbW92ZV9kZXZpY2VzKHN0cnVjdCBkZXZpY2UgKnBhcmVudCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvZGxuMi5oIGIvaW5jbHVkZS9saW51eC9tZmQvZGxuMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNGIyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9kbG4yLmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgX19MSU5VWF9VU0JfRExOMl9ICisjZGVmaW5lIF9fTElOVVhfVVNCX0RMTjJfSAorCisjZGVmaW5lIERMTjJfQ01EKGNtZCwgaWQpCQkoKGNtZCkgfCAoKGlkKSA8PCA4KSkKKworc3RydWN0IGRsbjJfcGxhdGZvcm1fZGF0YSB7CisJdTE2IGhhbmRsZTsJCS8qIHN1Yi1kcml2ZXIgaGFuZGxlIChpbnRlcm5hbGx5IHVzZWQgb25seSkgKi8KKwl1OCBwb3J0OwkJLyogSTJDL1NQSSBwb3J0ICovCit9OworCisvKioKKyAqIGRsbjJfZXZlbnRfY2JfdCAtIGV2ZW50IGNhbGxiYWNrIGZ1bmN0aW9uIHNpZ25hdHVyZQorICoKKyAqIEBwZGV2IC0gdGhlIHN1Yi1kZXZpY2UgdGhhdCByZWdpc3RlcmVkIHRoaXMgY2FsbGJhY2sKKyAqIEBlY2hvIC0gdGhlIGVjaG8gaGVhZGVyIGZpZWxkIHJlY2VpdmVkIGluIHRoZSBtZXNzYWdlCisgKiBAZGF0YSAtIHRoZSBkYXRhIHBheWxvYWQKKyAqIEBsZW4gIC0gdGhlIGRhdGEgcGF5bG9hZCBsZW5ndGgKKyAqCisgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0IGFuZCB0aGUgZGF0YSBwYXlsb2FkIGlzCisgKiBvbmx5IHZhbGlkIGR1cmluZyB0aGUgY2FsbC4gSWYgdGhlIHVzZXIgbmVlZHMgbGF0ZXIgYWNjZXNzIG9mIHRoZSBkYXRhLCBpdAorICogbXVzdCBjb3B5IGl0LgorICovCisKK3R5cGVkZWYgdm9pZCAoKmRsbjJfZXZlbnRfY2JfdCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGVjaG8sCisJCQkJY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbik7CisKKy8qKgorICogZGwybl9yZWdpc3Rlcl9ldmVudF9jYiAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGFuIGV2ZW50CisgKgorICogQHBkZXYgLSB0aGUgc3ViLWRldmljZSB0aGF0IHJlZ2lzdGVycyB0aGUgY2FsbGJhY2sKKyAqIEBldmVudCAtIHRoZSBldmVudCBmb3Igd2hpY2ggdG8gcmVnaXN0ZXIgYSBjYWxsYmFjaworICogQGV2ZW50X2NiIC0gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgaW4gY2FzZSBvZiBlcnJvcgorICovCitpbnQgZGxuMl9yZWdpc3Rlcl9ldmVudF9jYihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1MTYgZXZlbnQsCisJCQkgICBkbG4yX2V2ZW50X2NiX3QgZXZlbnRfY2IpOworCisvKioKKyAqIGRsbjJfdW5yZWdpc3Rlcl9ldmVudF9jYiAtIHVucmVnaXN0ZXIgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhbiBldmVudAorICoKKyAqIEBwZGV2IC0gdGhlIHN1Yi1kZXZpY2UgdGhhdCByZWdpc3RlcmVkIHRoZSBjYWxsYmFjaworICogQGV2ZW50IC0gdGhlIGV2ZW50IGZvciB3aGljaCB0byByZWdpc3RlciBhIGNhbGxiYWNrCisgKi8KK3ZvaWQgZGxuMl91bnJlZ2lzdGVyX2V2ZW50X2NiKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBldmVudCk7CisKKy8qKgorICogZGxuMl90cmFuc2ZlciAtIGlzc3VlIGEgRExOMiBjb21tYW5kIGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlIGFuZCB0aGUKKyAqIGFzc29jaWF0ZWQgZGF0YQorICoKKyAqIEBwZGV2IC0gdGhlIHN1Yi1kZXZpY2Ugd2hpY2ggaXMgaXNzdWluZyB0aGlzIHRyYW5zZmVyCisgKiBAY21kIC0gdGhlIGNvbW1hbmQgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlCisgKiBAb2J1ZiAtIHRoZSBidWZmZXIgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlOyBpdCBjYW4gYmUgTlVMTCBpZiB0aGUgdXNlcgorICoJZG9lc24ndCBuZWVkIHRvIHRyYW5zbWl0IGRhdGEgd2l0aCB0aGlzIGNvbW1hbmQKKyAqIEBvYnVmX2xlbiAtIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlCisgKiBAaWJ1ZiAtIGFueSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBjb3BpZWQgaGVyZTsgaXQgY2FuIGJlCisgKglOVUxMIGlmIHRoZSB1c2VyIGRvZXNuJ3QgbmVlZCB0aGUgcmVzcG9uc2UgZGF0YQorICogQGlidWZfbGVuIC0gbXVzdCBiZSBpbml0aWFsaXplZCB0byB0aGUgaW5wdXQgYnVmZmVyIHNpemU7IGl0IHdpbGwgYmUgbW9kaWZpZWQKKyAqCXRvIGluZGljYXRlIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlcnJlZDsKKyAqCisgKiBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBlcnJvcnMKKyAqLworaW50IGRsbjJfdHJhbnNmZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGNtZCwKKwkJICBjb25zdCB2b2lkICpvYnVmLCB1bnNpZ25lZCBvYnVmX2xlbiwKKwkJICB2b2lkICppYnVmLCB1bnNpZ25lZCAqaWJ1Zl9sZW4pOworCisvKioKKyAqIGRsbjJfdHJhbnNmZXJfcnggLSB2YXJpYW50IG9mIEBkbG4yX3RyYW5zZmVyKCkgd2hlcmUgVFggYnVmZmVyIGlzIG5vdCBuZWVkZWQKKyAqCisgKiBAcGRldiAtIHRoZSBzdWItZGV2aWNlIHdoaWNoIGlzIGlzc3VpbmcgdGhpcyB0cmFuc2ZlcgorICogQGNtZCAtIHRoZSBjb21tYW5kIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZQorICogQGlidWYgLSBhbnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3BvbnNlIHdpbGwgYmUgY29waWVkIGhlcmU7IGl0IGNhbiBiZQorICoJTlVMTCBpZiB0aGUgdXNlciBkb2Vzbid0IG5lZWQgdGhlIHJlc3BvbnNlIGRhdGEKKyAqIEBpYnVmX2xlbiAtIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gdGhlIGlucHV0IGJ1ZmZlciBzaXplOyBpdCB3aWxsIGJlIG1vZGlmaWVkCisgKgl0byBpbmRpY2F0ZSB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXJyZWQ7CisgKgorICogQHJldHVybiAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZXJyb3JzCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgZGxuMl90cmFuc2Zlcl9yeChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1MTYgY21kLAorCQkJCSAgIHZvaWQgKmlidWYsIHVuc2lnbmVkICppYnVmX2xlbikKK3sKKwlyZXR1cm4gZGxuMl90cmFuc2ZlcihwZGV2LCBjbWQsIE5VTEwsIDAsIGlidWYsIGlidWZfbGVuKTsKK30KKworLyoqCisgKiBkbG4yX3RyYW5zZmVyX3R4IC0gdmFyaWFudCBvZiBAZGxuMl90cmFuc2ZlcigpIHdoZXJlIFJYIGJ1ZmZlciBpcyBub3QgbmVlZGVkCisgKgorICogQHBkZXYgLSB0aGUgc3ViLWRldmljZSB3aGljaCBpcyBpc3N1aW5nIHRoaXMgdHJhbnNmZXIKKyAqIEBjbWQgLSB0aGUgY29tbWFuZCB0byBiZSBzZW50IHRvIHRoZSBkZXZpY2UKKyAqIEBvYnVmIC0gdGhlIGJ1ZmZlciB0byBiZSBzZW50IHRvIHRoZSBkZXZpY2U7IGl0IGNhbiBiZSBOVUxMIGlmIHRoZQorICoJdXNlciBkb2Vzbid0IG5lZWQgdG8gdHJhbnNtaXQgZGF0YSB3aXRoIHRoaXMgY29tbWFuZAorICogQG9idWZfbGVuIC0gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBiZSBzZW50IHRvIHRoZSBkZXZpY2UKKyAqCisgKiBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBlcnJvcnMKKyAqLworc3RhdGljIGlubGluZSBpbnQgZGxuMl90cmFuc2Zlcl90eChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1MTYgY21kLAorCQkJCSAgIGNvbnN0IHZvaWQgKm9idWYsIHVuc2lnbmVkIG9idWZfbGVuKQoreworCXJldHVybiBkbG4yX3RyYW5zZmVyKHBkZXYsIGNtZCwgb2J1Ziwgb2J1Zl9sZW4sIE5VTEwsIE5VTEwpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21heDc3Njg2LmggYi9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY4Ni5oCmluZGV4IDdlNmRjNGIuLjU1M2Y3ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL21heDc3Njg2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWF4Nzc2ODYuaApAQCAtMTMxLDEzICsxMzEsNiBAQAogCU1BWDc3Njg2X09QTU9ERV9TVEFOREJZLAogfTsKIAotZW51bSBtYXg3NzgwMl9vcG1vZGUgewotCU1BWDc3ODAyX09QTU9ERV9PRkYsCi0JTUFYNzc4MDJfT1BNT0RFX1NUQU5EQlksCi0JTUFYNzc4MDJfT1BNT0RFX0xQLAotCU1BWDc3ODAyX09QTU9ERV9OT1JNQUwsCi19OwotCiBzdHJ1Y3QgbWF4Nzc2ODZfb3Btb2RlX2RhdGEgewogCWludCBpZDsKIAlpbnQgbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21heDc3NjkzLXByaXZhdGUuaCBiL2luY2x1ZGUvbGludXgvbWZkL21heDc3NjkzLXByaXZhdGUuaAppbmRleCA1ODJlNjdmLi4wOGRhZTAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY5My1wcml2YXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWF4Nzc2OTMtcHJpdmF0ZS5oCkBAIC0yNiw3ICsyNiw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAotI2RlZmluZSBNQVg3NzY5M19OVU1fSVJRX01VSUNfUkVHUwkzCiAjZGVmaW5lIE1BWDc3NjkzX1JFR19JTlZBTElECQkoMHhmZikKIAogLyogU2xhdmUgYWRkciA9IDB4Q0M6IFBNSUMsIENoYXJnZXIsIEZsYXNoIExFRCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvcnRzeF9wY2kuaCBiL2luY2x1ZGUvbGludXgvbWZkL3J0c3hfcGNpLmgKaW5kZXggNzQzNDZkNS4uMGMxMjYyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvcnRzeF9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9ydHN4X3BjaS5oCkBAIC01NTgsNiArNTU4LDcgQEAKICNkZWZpbmUgU0RfU0FNUExFX1BPSU5UX0NUTAkJMHhGREE3CiAjZGVmaW5lIFNEX1BVU0hfUE9JTlRfQ1RMCQkweEZEQTgKICNkZWZpbmUgU0RfQ01EMAkJCQkweEZEQTkKKyNkZWZpbmUgICBTRF9DTURfU1RBUlQJCQkweDQwCiAjZGVmaW5lIFNEX0NNRDEJCQkJMHhGREFBCiAjZGVmaW5lIFNEX0NNRDIJCQkJMHhGREFCCiAjZGVmaW5lIFNEX0NNRDMJCQkJMHhGREFDCkBAIC03MDcsNiArNzA4LDE0IEBACiAjZGVmaW5lIFBNX0NUUkwxCQkJMHhGRjQ0CiAjZGVmaW5lIFBNX0NUUkwyCQkJMHhGRjQ1CiAjZGVmaW5lIFBNX0NUUkwzCQkJMHhGRjQ2CisjZGVmaW5lICAgU0RJT19TRU5EX1BNRV9FTgkJMHg4MAorI2RlZmluZSAgIEZPUkNFX1JDX01PREVfT04JCTB4NDAKKyNkZWZpbmUgICBGT1JDRV9SWDUwX0xJTktfT04JCTB4MjAKKyNkZWZpbmUgICBEM19ERUxJTktfTU9ERV9FTgkJMHgxMAorI2RlZmluZSAgIFVTRV9QRVNSVEJfQ1RMX0RFTElOSwkJMHgwOAorI2RlZmluZSAgIERFTEFZX1BJTl9XQUtFCQkweDA0CisjZGVmaW5lICAgUkVTRVRfUElOX1dBS0UJCTB4MDIKKyNkZWZpbmUgICBQTV9XQUtFX0VOCQkJMHgwMQogI2RlZmluZSBQTV9DVFJMNAkJCTB4RkY0NwogCiAvKiBNZW1vcnkgbWFwcGluZyAqLwpAQCAtNzUyLDYgKzc2MSwxNCBAQAogI2RlZmluZSBQSFlfRFVNX1JFRwkJCTB4MUYKIAogI2RlZmluZSBMQ1RMUgkJCQkweDgwCisjZGVmaW5lICAgTENUTFJfRVhUX1NZTkMJCTB4ODAKKyNkZWZpbmUgICBMQ1RMUl9DT01NT05fQ0xPQ0tfQ0ZHCTB4NDAKKyNkZWZpbmUgICBMQ1RMUl9SRVRSQUlOX0xJTksJCTB4MjAKKyNkZWZpbmUgICBMQ1RMUl9MSU5LX0RJU0FCTEUJCTB4MTAKKyNkZWZpbmUgICBMQ1RMUl9SQ0IJCQkweDA4CisjZGVmaW5lICAgTENUTFJfUkVTRVJWRUQJCTB4MDQKKyNkZWZpbmUgICBMQ1RMUl9BU1BNX0NUTF9NQVNLCQkweDAzCisKICNkZWZpbmUgUENSX1NFVFRJTkdfUkVHMQkJMHg3MjQKICNkZWZpbmUgUENSX1NFVFRJTkdfUkVHMgkJMHg4MTQKICNkZWZpbmUgUENSX1NFVFRJTkdfUkVHMwkJMHg3NDcKQEAgLTk2Nyw0ICs5ODQsMjQgQEAKIAlyZXR1cm4gKHU4ICopKHBjci0+aG9zdF9jbWRzX3B0cik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJ0c3hfcGNpX3VwZGF0ZV9jZmdfYnl0ZShzdHJ1Y3QgcnRzeF9wY3IgKnBjciwgaW50IGFkZHIsCisJCXU4IG1hc2ssIHU4IGFwcGVuZCkKK3sKKwlpbnQgZXJyOworCXU4IHZhbDsKKworCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjci0+cGNpLCBhZGRyLCAmdmFsKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjci0+cGNpLCBhZGRyLCAodmFsICYgbWFzaykgfCBhcHBlbmQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRzeF9wY2lfd3JpdGVfYmUzMihzdHJ1Y3QgcnRzeF9wY3IgKnBjciwgdTE2IHJlZywgdTMyIHZhbCkKK3sKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgcmVnLCAgICAgMHhGRiwgdmFsID4+IDI0KTsKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgcmVnICsgMSwgMHhGRiwgdmFsID4+IDE2KTsKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgcmVnICsgMiwgMHhGRiwgdmFsID4+IDgpOworCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCByZWcgKyAzLCAweEZGLCB2YWwpOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tZmQvc2Ftc3VuZy9jb3JlLmgKaW5kZXggMTgyNWVkYS4uM2ZkYjdjZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvY29yZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIE1JTl84MDBfTVYJCTgwMDAwMAogI2RlZmluZSBNSU5fNzUwX01WCQk3NTAwMDAKICNkZWZpbmUgTUlOXzYwMF9NVgkJNjAwMDAwCisjZGVmaW5lIE1JTl81MDBfTVYJCTUwMDAwMAogCiAvKiBNYWNyb3MgdG8gcmVwcmVzZW50IHN0ZXBzIGZvciBMRE8vQlVDSyAqLwogI2RlZmluZSBTVEVQXzUwX01WCQk1MDAwMApAQCAtNDEsNiArNDIsNyBAQAogCVM1TTg3NjdYLAogCVMyTVBBMDEsCiAJUzJNUFMxMVgsCisJUzJNUFMxM1gsCiAJUzJNUFMxNFgsCiAJUzJNUFUwMiwKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNWRkYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIHMybXBzMTMuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkCisgKiAgICAgICAgICAgICAgaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9TMk1QUzEzX0gKKyNkZWZpbmUgX19MSU5VWF9NRkRfUzJNUFMxM19ICisKKy8qIFMyTVBTMTMgcmVnaXN0ZXJzICovCitlbnVtIHMybXBzMTNfcmVnIHsKKwlTMk1QUzEzX1JFR19JRCwKKwlTMk1QUzEzX1JFR19JTlQxLAorCVMyTVBTMTNfUkVHX0lOVDIsCisJUzJNUFMxM19SRUdfSU5UMywKKwlTMk1QUzEzX1JFR19JTlQxTSwKKwlTMk1QUzEzX1JFR19JTlQyTSwKKwlTMk1QUzEzX1JFR19JTlQzTSwKKwlTMk1QUzEzX1JFR19TVDEsCisJUzJNUFMxM19SRUdfU1QyLAorCVMyTVBTMTNfUkVHX1BXUk9OU1JDLAorCVMyTVBTMTNfUkVHX09GRlNSQywKKwlTMk1QUzEzX1JFR19CVV9DSEcsCisJUzJNUFMxM19SRUdfUlRDQ1RSTCwKKwlTMk1QUzEzX1JFR19DVFJMMSwKKwlTMk1QUzEzX1JFR19DVFJMMiwKKwlTMk1QUzEzX1JFR19SU1ZEMSwKKwlTMk1QUzEzX1JFR19SU1ZEMiwKKwlTMk1QUzEzX1JFR19SU1ZEMywKKwlTMk1QUzEzX1JFR19SU1ZENCwKKwlTMk1QUzEzX1JFR19SU1ZENSwKKwlTMk1QUzEzX1JFR19SU1ZENiwKKwlTMk1QUzEzX1JFR19DVFJMMywKKwlTMk1QUzEzX1JFR19SU1ZENywKKwlTMk1QUzEzX1JFR19SU1ZEOCwKKwlTMk1QUzEzX1JFR19XUlNUQkksCisJUzJNUFMxM19SRUdfQjFDVFJMLAorCVMyTVBTMTNfUkVHX0IxT1VULAorCVMyTVBTMTNfUkVHX0IyQ1RSTCwKKwlTMk1QUzEzX1JFR19CMk9VVCwKKwlTMk1QUzEzX1JFR19CM0NUUkwsCisJUzJNUFMxM19SRUdfQjNPVVQsCisJUzJNUFMxM19SRUdfQjRDVFJMLAorCVMyTVBTMTNfUkVHX0I0T1VULAorCVMyTVBTMTNfUkVHX0I1Q1RSTCwKKwlTMk1QUzEzX1JFR19CNU9VVCwKKwlTMk1QUzEzX1JFR19CNkNUUkwsCisJUzJNUFMxM19SRUdfQjZPVVQsCisJUzJNUFMxM19SRUdfQjdDVFJMLAorCVMyTVBTMTNfUkVHX0I3T1VULAorCVMyTVBTMTNfUkVHX0I4Q1RSTCwKKwlTMk1QUzEzX1JFR19COE9VVCwKKwlTMk1QUzEzX1JFR19COUNUUkwsCisJUzJNUFMxM19SRUdfQjlPVVQsCisJUzJNUFMxM19SRUdfQjEwQ1RSTCwKKwlTMk1QUzEzX1JFR19CMTBPVVQsCisJUzJNUFMxM19SRUdfQkIxQ1RSTCwKKwlTMk1QUzEzX1JFR19CQjFPVVQsCisJUzJNUFMxM19SRUdfQlVDS19SQU1QMSwKKwlTMk1QUzEzX1JFR19CVUNLX1JBTVAyLAorCVMyTVBTMTNfUkVHX0xET19EVlMxLAorCVMyTVBTMTNfUkVHX0xET19EVlMyLAorCVMyTVBTMTNfUkVHX0xET19EVlMzLAorCVMyTVBTMTNfUkVHX0I2T1VUMiwKKwlTMk1QUzEzX1JFR19MMUNUUkwsCisJUzJNUFMxM19SRUdfTDJDVFJMLAorCVMyTVBTMTNfUkVHX0wzQ1RSTCwKKwlTMk1QUzEzX1JFR19MNENUUkwsCisJUzJNUFMxM19SRUdfTDVDVFJMLAorCVMyTVBTMTNfUkVHX0w2Q1RSTCwKKwlTMk1QUzEzX1JFR19MN0NUUkwsCisJUzJNUFMxM19SRUdfTDhDVFJMLAorCVMyTVBTMTNfUkVHX0w5Q1RSTCwKKwlTMk1QUzEzX1JFR19MMTBDVFJMLAorCVMyTVBTMTNfUkVHX0wxMUNUUkwsCisJUzJNUFMxM19SRUdfTDEyQ1RSTCwKKwlTMk1QUzEzX1JFR19MMTNDVFJMLAorCVMyTVBTMTNfUkVHX0wxNENUUkwsCisJUzJNUFMxM19SRUdfTDE1Q1RSTCwKKwlTMk1QUzEzX1JFR19MMTZDVFJMLAorCVMyTVBTMTNfUkVHX0wxN0NUUkwsCisJUzJNUFMxM19SRUdfTDE4Q1RSTCwKKwlTMk1QUzEzX1JFR19MMTlDVFJMLAorCVMyTVBTMTNfUkVHX0wyMENUUkwsCisJUzJNUFMxM19SRUdfTDIxQ1RSTCwKKwlTMk1QUzEzX1JFR19MMjJDVFJMLAorCVMyTVBTMTNfUkVHX0wyM0NUUkwsCisJUzJNUFMxM19SRUdfTDI0Q1RSTCwKKwlTMk1QUzEzX1JFR19MMjVDVFJMLAorCVMyTVBTMTNfUkVHX0wyNkNUUkwsCisJUzJNUFMxM19SRUdfTDI3Q1RSTCwKKwlTMk1QUzEzX1JFR19MMjhDVFJMLAorCVMyTVBTMTNfUkVHX0wzMENUUkwsCisJUzJNUFMxM19SRUdfTDMxQ1RSTCwKKwlTMk1QUzEzX1JFR19MMzJDVFJMLAorCVMyTVBTMTNfUkVHX0wzM0NUUkwsCisJUzJNUFMxM19SRUdfTDM0Q1RSTCwKKwlTMk1QUzEzX1JFR19MMzVDVFJMLAorCVMyTVBTMTNfUkVHX0wzNkNUUkwsCisJUzJNUFMxM19SRUdfTDM3Q1RSTCwKKwlTMk1QUzEzX1JFR19MMzhDVFJMLAorCVMyTVBTMTNfUkVHX0wzOUNUUkwsCisJUzJNUFMxM19SRUdfTDQwQ1RSTCwKKwlTMk1QUzEzX1JFR19MRE9EU0NIMSwKKwlTMk1QUzEzX1JFR19MRE9EU0NIMiwKKwlTMk1QUzEzX1JFR19MRE9EU0NIMywKKwlTMk1QUzEzX1JFR19MRE9EU0NINCwKKwlTMk1QUzEzX1JFR19MRE9EU0NINSwKK307CisKKy8qICByZWd1bGF0b3IgaWRzICovCitlbnVtIHMybXBzMTNfcmVndWxhdG9ycyB7CisJUzJNUFMxM19MRE8xLAorCVMyTVBTMTNfTERPMiwKKwlTMk1QUzEzX0xETzMsCisJUzJNUFMxM19MRE80LAorCVMyTVBTMTNfTERPNSwKKwlTMk1QUzEzX0xETzYsCisJUzJNUFMxM19MRE83LAorCVMyTVBTMTNfTERPOCwKKwlTMk1QUzEzX0xETzksCisJUzJNUFMxM19MRE8xMCwKKwlTMk1QUzEzX0xETzExLAorCVMyTVBTMTNfTERPMTIsCisJUzJNUFMxM19MRE8xMywKKwlTMk1QUzEzX0xETzE0LAorCVMyTVBTMTNfTERPMTUsCisJUzJNUFMxM19MRE8xNiwKKwlTMk1QUzEzX0xETzE3LAorCVMyTVBTMTNfTERPMTgsCisJUzJNUFMxM19MRE8xOSwKKwlTMk1QUzEzX0xETzIwLAorCVMyTVBTMTNfTERPMjEsCisJUzJNUFMxM19MRE8yMiwKKwlTMk1QUzEzX0xETzIzLAorCVMyTVBTMTNfTERPMjQsCisJUzJNUFMxM19MRE8yNSwKKwlTMk1QUzEzX0xETzI2LAorCVMyTVBTMTNfTERPMjcsCisJUzJNUFMxM19MRE8yOCwKKwlTMk1QUzEzX0xETzI5LAorCVMyTVBTMTNfTERPMzAsCisJUzJNUFMxM19MRE8zMSwKKwlTMk1QUzEzX0xETzMyLAorCVMyTVBTMTNfTERPMzMsCisJUzJNUFMxM19MRE8zNCwKKwlTMk1QUzEzX0xETzM1LAorCVMyTVBTMTNfTERPMzYsCisJUzJNUFMxM19MRE8zNywKKwlTMk1QUzEzX0xETzM4LAorCVMyTVBTMTNfTERPMzksCisJUzJNUFMxM19MRE80MCwKKwlTMk1QUzEzX0JVQ0sxLAorCVMyTVBTMTNfQlVDSzIsCisJUzJNUFMxM19CVUNLMywKKwlTMk1QUzEzX0JVQ0s0LAorCVMyTVBTMTNfQlVDSzUsCisJUzJNUFMxM19CVUNLNiwKKwlTMk1QUzEzX0JVQ0s3LAorCVMyTVBTMTNfQlVDSzgsCisJUzJNUFMxM19CVUNLOSwKKwlTMk1QUzEzX0JVQ0sxMCwKKworCVMyTVBTMTNfUkVHVUxBVE9SX01BWCwKK307CisKKy8qCisgKiBEZWZhdWx0IHJhbXAgZGVsYXkgaW4gdXYvdXMuIERhdGFzaGVldCBzYXlzIHRoYXQgcmFtcCBkZWxheSBjYW4gYmUKKyAqIGNvbnRyb2xsZWQgaG93ZXZlciBpdCBkb2VzIG5vdCBzcGVjaWZ5IHdoaWNoIHJlZ2lzdGVyIGlzIHVzZWQgZm9yIHRoYXQuCisgKiBMZXQncyBhc3N1bWUgdGhhdCBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgc2V0LgorICovCisjZGVmaW5lIFMyTVBTMTNfQlVDS19SQU1QX0RFTEFZCQkxMjUwMAorCisjZW5kaWYgLyogIF9fTElOVVhfTUZEX1MyTVBTMTNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaCBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi9pbXg2cS1pb211eGMtZ3ByLmgKaW5kZXggZmY0NDM3NC4uYzg3N2NhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24vaW14NnEtaW9tdXhjLWdwci5oCkBAIC0zOTUsNCArMzk1LDQzIEBACiAjZGVmaW5lIElNWDZTTF9HUFIxX0ZFQ19DTE9DS19NVVgxX1NFTF9NQVNLICAgICgweDMgPDwgMTcpCiAjZGVmaW5lIElNWDZTTF9HUFIxX0ZFQ19DTE9DS19NVVgyX1NFTF9NQVNLICAgICgweDEgPDwgMTQpCiAKKy8qIEZvciBpbXg2c3ggaW9tdXggZ3ByIHJlZ2lzdGVyIGZpZWxkIGRlZmluZSAqLworI2RlZmluZSBJTVg2U1hfR1BSMV9WREVDX1NXX1JTVF9NQVNLCQkJKDB4MSA8PCAyMCkKKyNkZWZpbmUgSU1YNlNYX0dQUjFfVkRFQ19TV19SU1RfUkVTRVQJCQkoMHgxIDw8IDIwKQorI2RlZmluZSBJTVg2U1hfR1BSMV9WREVDX1NXX1JTVF9SRUxFQVNFCQkJKDB4MCA8PCAyMCkKKyNkZWZpbmUgSU1YNlNYX0dQUjFfVkFEQ19TV19SU1RfTUFTSwkJCSgweDEgPDwgMTkpCisjZGVmaW5lIElNWDZTWF9HUFIxX1ZBRENfU1dfUlNUX1JFU0VUCQkJKDB4MSA8PCAxOSkKKyNkZWZpbmUgSU1YNlNYX0dQUjFfVkFEQ19TV19SU1RfUkVMRUFTRQkJCSgweDAgPDwgMTkpCisjZGVmaW5lIElNWDZTWF9HUFIxX0ZFQ19DTE9DS19NVVhfU0VMX01BU0sJCSgweDMgPDwgMTMpCisjZGVmaW5lIElNWDZTWF9HUFIxX0ZFQ19DTE9DS19QQURfRElSX01BU0sJCSgweDMgPDwgMTcpCisjZGVmaW5lIElNWDZTWF9HUFIxX0ZFQ19DTE9DS19NVVhfU0VMX0VYVAkJKDB4MyA8PCAxMykKKworI2RlZmluZSBJTVg2U1hfR1BSNF9GRUNfRU5FVDFfU1RPUF9SRVEJCQkoMHgxIDw8IDMpCisjZGVmaW5lIElNWDZTWF9HUFI0X0ZFQ19FTkVUMl9TVE9QX1JFUQkJCSgweDEgPDwgNCkKKworI2RlZmluZSBJTVg2U1hfR1BSNV9ESVNQX01VWF9MREJfQ1RSTF9NQVNLCQkoMHgxIDw8IDMpCisjZGVmaW5lIElNWDZTWF9HUFI1X0RJU1BfTVVYX0xEQl9DVFJMX0xDRElGMQkJKDB4MCA8PCAzKQorI2RlZmluZSBJTVg2U1hfR1BSNV9ESVNQX01VWF9MREJfQ1RSTF9MQ0RJRjIJCSgweDEgPDwgMykKKworI2RlZmluZSBJTVg2U1hfR1BSNV9DU0kyX01VWF9DVFJMX01BU0sJCQkoMHgzIDw8IDI3KQorI2RlZmluZSBJTVg2U1hfR1BSNV9DU0kyX01VWF9DVFJMX0VYVF9QSU4JCSgweDAgPDwgMjcpCisjZGVmaW5lIElNWDZTWF9HUFI1X0NTSTJfTVVYX0NUUkxfQ1ZECQkJKDB4MSA8PCAyNykKKyNkZWZpbmUgSU1YNlNYX0dQUjVfQ1NJMl9NVVhfQ1RSTF9WREFDX1RPX0NTSQkJKDB4MiA8PCAyNykKKyNkZWZpbmUgSU1YNlNYX0dQUjVfQ1NJMl9NVVhfQ1RSTF9HTkQJCQkoMHgzIDw8IDI3KQorI2RlZmluZSBJTVg2U1hfR1BSNV9WQURDX1RPX0NTSV9DQVBUVVJFX0VOX01BU0sJCSgweDEgPDwgMjYpCisjZGVmaW5lIElNWDZTWF9HUFI1X1ZBRENfVE9fQ1NJX0NBUFRVUkVfRU5fRU5BQkxFCSgweDEgPDwgMjYpCisjZGVmaW5lIElNWDZTWF9HUFI1X1ZBRENfVE9fQ1NJX0NBUFRVUkVfRU5fRElTQUJMRQkoMHgwIDw8IDI2KQorI2RlZmluZSBJTVg2U1hfR1BSNV9DU0kxX01VWF9DVFJMX01BU0sJCQkoMHgzIDw8IDQpCisjZGVmaW5lIElNWDZTWF9HUFI1X0NTSTFfTVVYX0NUUkxfRVhUX1BJTgkJKDB4MCA8PCA0KQorI2RlZmluZSBJTVg2U1hfR1BSNV9DU0kxX01VWF9DVFJMX0NWRAkJCSgweDEgPDwgNCkKKyNkZWZpbmUgSU1YNlNYX0dQUjVfQ1NJMV9NVVhfQ1RSTF9WREFDX1RPX0NTSQkJKDB4MiA8PCA0KQorI2RlZmluZSBJTVg2U1hfR1BSNV9DU0kxX01VWF9DVFJMX0dORAkJCSgweDMgPDwgNCkKKworI2RlZmluZSBJTVg2U1hfR1BSNV9ESVNQX01VWF9EQ0lDMl9MQ0RJRjIJCSgweDAgPDwgMikKKyNkZWZpbmUgSU1YNlNYX0dQUjVfRElTUF9NVVhfRENJQzJfTFZEUwkJCSgweDEgPDwgMikKKyNkZWZpbmUgSU1YNlNYX0dQUjVfRElTUF9NVVhfRENJQzJfTUFTSwkJCSgweDEgPDwgMikKKyNkZWZpbmUgSU1YNlNYX0dQUjVfRElTUF9NVVhfRENJQzFfTENESUYxCQkoMHgwIDw8IDEpCisjZGVmaW5lIElNWDZTWF9HUFI1X0RJU1BfTVVYX0RDSUMxX0xWRFMJCQkoMHgxIDw8IDEpCisjZGVmaW5lIElNWDZTWF9HUFI1X0RJU1BfTVVYX0RDSUMxX01BU0sJCQkoMHgxIDw8IDEpCisKICNlbmRpZiAvKiBfX0xJTlVYX0lNWDZRX0lPTVVYQ19HUFJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvdGMzNTg5eC5oIGIvaW5jbHVkZS9saW51eC9tZmQvdGMzNTg5eC5oCmluZGV4IGU2MDg4YzIuLmUxYzEyZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3RjMzU4OXguaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC90YzM1ODl4LmgKQEAgLTE2NCwxMyArMTY0LDEwIEBACiAKIC8qKgogICogc3RydWN0IHRjMzU4OXhfZ3Bpb19wbGF0Zm9ybV9kYXRhIC0gVEMzNTg5eCBHUElPIHBsYXRmb3JtIGRhdGEKLSAqIEBncGlvX2Jhc2U6IGZpcnN0IGdwaW8gbnVtYmVyIGFzc2lnbmVkIHRvIFRDMzU4OXguICBBIG1heGltdW0gb2YKLSAqCSAgICAgICAlVEMzNTg5eF9OUl9HUElPUyBHUElPcyB3aWxsIGJlIGFsbG9jYXRlZC4KICAqIEBzZXR1cDogY2FsbGJhY2sgZm9yIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uCiAgKiBAcmVtb3ZlOiBjYWxsYmFjayBmb3IgYm9hcmQtc3BlY2lmaWMgdGVhcmRvd24KICAqLwogc3RydWN0IHRjMzU4OXhfZ3Bpb19wbGF0Zm9ybV9kYXRhIHsKLQlpbnQgZ3Bpb19iYXNlOwogCXZvaWQgKCpzZXR1cCkoc3RydWN0IHRjMzU4OXggKnRjMzU4OXgsIHVuc2lnbmVkIGdwaW9fYmFzZSk7CiAJdm9pZCAoKnJlbW92ZSkoc3RydWN0IHRjMzU4OXggKnRjMzU4OXgsIHVuc2lnbmVkIGdwaW9fYmFzZSk7CiB9OwpAQCAtMTc4LDE4ICsxNzUsMTMgQEAKIC8qKgogICogc3RydWN0IHRjMzU4OXhfcGxhdGZvcm1fZGF0YSAtIFRDMzU4OXggcGxhdGZvcm0gZGF0YQogICogQGJsb2NrOiBiaXRtYXNrIG9mIGJsb2NrcyB0byBlbmFibGUgKHVzZSBUQzM1ODl4X0JMT0NLXyopCi0gKiBAaXJxX2Jhc2U6IGJhc2UgSVJRIG51bWJlci4gICVUQzM1ODl4X05SX0lSUVMgaXJxcyB3aWxsIGJlIHVzZWQuCiAgKiBAZ3BpbzogR1BJTy1zcGVjaWZpYyBwbGF0Zm9ybSBkYXRhCiAgKiBAa2V5cGFkOiBrZXlwYWQtc3BlY2lmaWMgcGxhdGZvcm0gZGF0YQogICovCiBzdHJ1Y3QgdGMzNTg5eF9wbGF0Zm9ybV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQgYmxvY2s7Ci0JaW50IGlycV9iYXNlOwogCXN0cnVjdCB0YzM1ODl4X2dwaW9fcGxhdGZvcm1fZGF0YSAqZ3BpbzsKIAljb25zdCBzdHJ1Y3QgdGMzNTg5eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqa2V5cGFkOwogfTsKIAotI2RlZmluZSBUQzM1ODl4X05SX0dQSU9TCTI0Ci0jZGVmaW5lIFRDMzU4OXhfTlJfSVJRUwkJVEMzNTg5eF9JTlRfR1BJTyhUQzM1ODl4X05SX0dQSU9TKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCBiNDY0NjExLi5mNzYwNmQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMjgsNiArMTI4LDcgQEAKICNkZWZpbmUgVk1fSFVHRVRMQgkweDAwNDAwMDAwCS8qIEh1Z2UgVExCIFBhZ2UgVk0gKi8KICNkZWZpbmUgVk1fTk9OTElORUFSCTB4MDA4MDAwMDAJLyogSXMgbm9uLWxpbmVhciAocmVtYXBfZmlsZV9wYWdlcykgKi8KICNkZWZpbmUgVk1fQVJDSF8xCTB4MDEwMDAwMDAJLyogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWcgKi8KKyNkZWZpbmUgVk1fQVJDSF8yCTB4MDIwMDAwMDAKICNkZWZpbmUgVk1fRE9OVERVTVAJMHgwNDAwMDAwMAkvKiBEbyBub3QgaW5jbHVkZSBpbiB0aGUgY29yZSBkdW1wICovCiAKICNpZmRlZiBDT05GSUdfTUVNX1NPRlRfRElSVFkKQEAgLTE1NSw2ICsxNTYsMTEgQEAKICMgZGVmaW5lIFZNX01BUFBFRF9DT1BZCVZNX0FSQ0hfMQkvKiBUIGlmIG1hcHBlZCBjb3B5IG9mIGRhdGEgKG5vbW11IG1tYXApICovCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1g4NikKKy8qIE1QWCBzcGVjaWZpYyBib3VuZHMgdGFibGUgb3IgYm91bmRzIGRpcmVjdG9yeSAqLworIyBkZWZpbmUgVk1fTVBYCQlWTV9BUkNIXzIKKyNlbmRpZgorCiAjaWZuZGVmIFZNX0dST1dTVVAKICMgZGVmaW5lIFZNX0dST1dTVVAJVk1fTk9ORQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggNmUwYjI4Ni4uMDA0ZTlkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtNDU0LDYgKzQ1NCwxMCBAQAogCWJvb2wgdGxiX2ZsdXNoX3BlbmRpbmc7CiAjZW5kaWYKIAlzdHJ1Y3QgdXByb2Jlc19zdGF0ZSB1cHJvYmVzX3N0YXRlOworI2lmZGVmIENPTkZJR19YODZfSU5URUxfTVBYCisJLyogYWRkcmVzcyBvZiB0aGUgYm91bmRzIGRpcmVjdG9yeSAqLworCXZvaWQgX191c2VyICpiZF9hZGRyOworI2VuZGlmCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1faW5pdF9jcHVtYXNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oIGIvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCmluZGV4IGIwNjkyZDIuLjRkNjljMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKQEAgLTg4LDYgKzg4LDkgQEAKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBkYXRhX3RhZ191bml0X3NpemU7ICAgICAvKiBEQVRBIFRBRyBVTklUIHNpemUgKi8KIAl1bnNpZ25lZCBpbnQJCWJvb3Rfcm9fbG9jazsJCS8qIHJvIGxvY2sgc3VwcG9ydCAqLwogCWJvb2wJCQlib290X3JvX2xvY2thYmxlOworCWJvb2wJCQlmZnVfY2FwYWJsZTsJLyogRmlybXdhcmUgdXBncmFkZSBzdXBwb3J0ICovCisjZGVmaW5lIE1NQ19GSVJNV0FSRV9MRU4gOAorCXU4CQkJZndyZXZbTU1DX0ZJUk1XQVJFX0xFTl07ICAvKiBGVyB2ZXJzaW9uICovCiAJdTgJCQlyYXdfZXhjZXB0aW9uX3N0YXR1czsJLyogNTQgKi8KIAl1OAkJCXJhd19wYXJ0aXRpb25fc3VwcG9ydDsJLyogMTYwICovCiAJdTgJCQlyYXdfcnBtYl9zaXplX211bHQ7CS8qIDE2OCAqLwpAQCAtNTA5LDI0ICs1MTIsOCBAQAogCiAjZGVmaW5lIG1tY19kZXZfdG9fY2FyZChkKQljb250YWluZXJfb2YoZCwgc3RydWN0IG1tY19jYXJkLCBkZXYpCiAKLSNkZWZpbmUgbW1jX2xpc3RfdG9fY2FyZChsKQljb250YWluZXJfb2YobCwgc3RydWN0IG1tY19jYXJkLCBub2RlKQotI2RlZmluZSBtbWNfZ2V0X2RydmRhdGEoYykJZGV2X2dldF9kcnZkYXRhKCYoYyktPmRldikKLSNkZWZpbmUgbW1jX3NldF9kcnZkYXRhKGMsZCkJZGV2X3NldF9kcnZkYXRhKCYoYyktPmRldiwgZCkKLQotLyoKLSAqIE1NQyBkZXZpY2UgZHJpdmVyIChlLmcuLCBGbGFzaCBjYXJkLCBJL08gY2FyZC4uLikKLSAqLwotc3RydWN0IG1tY19kcml2ZXIgewotCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRydjsKLQlpbnQgKCpwcm9iZSkoc3RydWN0IG1tY19jYXJkICopOwotCXZvaWQgKCpyZW1vdmUpKHN0cnVjdCBtbWNfY2FyZCAqKTsKLQlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgbW1jX2NhcmQgKik7Ci0JaW50ICgqcmVzdW1lKShzdHJ1Y3QgbW1jX2NhcmQgKik7Ci0Jdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgbW1jX2NhcmQgKik7Ci19OwotCi1leHRlcm4gaW50IG1tY19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1tY19kcml2ZXIgKik7Ci1leHRlcm4gdm9pZCBtbWNfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1tY19kcml2ZXIgKik7CitleHRlcm4gaW50IG1tY19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKik7CitleHRlcm4gdm9pZCBtbWNfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKik7CiAKIGV4dGVybiB2b2lkIG1tY19maXh1cF9kZXZpY2Uoc3RydWN0IG1tY19jYXJkICpjYXJkLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgbW1jX2ZpeHVwICp0YWJsZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmgKaW5kZXggZjIwNmUyOS4uY2IyYjA0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NvcmUuaApAQCAtMTU0LDcgKzE1NCw4IEBACiBleHRlcm4gaW50IF9fbW1jX3N3aXRjaChzdHJ1Y3QgbW1jX2NhcmQgKiwgdTgsIHU4LCB1OCwgdW5zaWduZWQgaW50LCBib29sLAogCQkJYm9vbCwgYm9vbCk7CiBleHRlcm4gaW50IG1tY19zd2l0Y2goc3RydWN0IG1tY19jYXJkICosIHU4LCB1OCwgdTgsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IG1tY19zZW5kX2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCAqZXh0X2NzZCk7CitleHRlcm4gaW50IG1tY19zZW5kX3R1bmluZyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworZXh0ZXJuIGludCBtbWNfZ2V0X2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCAqKm5ld19leHRfY3NkKTsKIAogI2RlZmluZSBNTUNfRVJBU0VfQVJHCQkweDAwMDAwMDAwCiAjZGVmaW5lIE1NQ19TRUNVUkVfRVJBU0VfQVJHCTB4ODAwMDAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2R3X21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKaW5kZXggMDAxMzY2OS4uNDJiNzI0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKQEAgLTU0LDYgKzU0LDcgQEAKICAqCXRyYW5zZmVyIGlzIGluIHByb2dyZXNzLgogICogQHVzZV9kbWE6IFdoZXRoZXIgRE1BIGNoYW5uZWwgaXMgaW5pdGlhbGl6ZWQgb3Igbm90LgogICogQHVzaW5nX2RtYTogV2hldGhlciBETUEgaXMgaW4gdXNlIGZvciB0aGUgY3VycmVudCB0cmFuc2Zlci4KKyAqIEBkbWFfNjRiaXRfYWRkcmVzczogV2hldGhlciBETUEgc3VwcG9ydHMgNjQtYml0IGFkZHJlc3MgbW9kZSBvciBub3QuCiAgKiBAc2dfZG1hOiBCdXMgYWRkcmVzcyBvZiBETUEgYnVmZmVyLgogICogQHNnX2NwdTogVmlydHVhbCBhZGRyZXNzIG9mIERNQSBidWZmZXIuCiAgKiBAZG1hX29wczogUG9pbnRlciB0byBwbGF0Zm9ybS1zcGVjaWZpYyBETUEgY2FsbGJhY2tzLgpAQCAtOTYsNiArOTcsNyBAQAogICogQHF1aXJrczogU2V0IG9mIHF1aXJrcyB0aGF0IGFwcGx5IHRvIHNwZWNpZmljIHZlcnNpb25zIG9mIHRoZSBJUC4KICAqIEBpcnFfZmxhZ3M6IFRoZSBmbGFncyB0byBiZSBwYXNzZWQgdG8gcmVxdWVzdF9pcnEuCiAgKiBAaXJxOiBUaGUgaXJxIHZhbHVlIHRvIGJlIHBhc3NlZCB0byByZXF1ZXN0X2lycS4KKyAqIEBzZGlvX2lkMDogTnVtYmVyIG9mIHNsb3QwIGluIHRoZSBTRElPIGludGVycnVwdCByZWdpc3RlcnMuCiAgKgogICogTG9ja2luZwogICogPT09PT09PQpAQCAtMTM1LDExICsxMzcsMTEgQEAKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQJc3RvcF9hYm9ydDsKIAl1bnNpZ25lZCBpbnQJCXByZXZfYmxrc3o7CiAJdW5zaWduZWQgY2hhcgkJdGltaW5nOwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSpjYXJkX3dvcmtxdWV1ZTsKIAogCS8qIERNQSBpbnRlcmZhY2UgbWVtYmVycyovCiAJaW50CQkJdXNlX2RtYTsKIAlpbnQJCQl1c2luZ19kbWE7CisJaW50CQkJZG1hXzY0Yml0X2FkZHJlc3M7CiAKIAlkbWFfYWRkcl90CQlzZ19kbWE7CiAJdm9pZAkJCSpzZ19jcHU7CkBAIC0xNTQsNyArMTU2LDYgQEAKIAl1MzIJCQlzdG9wX2NtZHI7CiAJdTMyCQkJZGlyX3N0YXR1czsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdGFza2xldDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJY2FyZF93b3JrOwogCXVuc2lnbmVkIGxvbmcJCXBlbmRpbmdfZXZlbnRzOwogCXVuc2lnbmVkIGxvbmcJCWNvbXBsZXRlZF9ldmVudHM7CiAJZW51bSBkd19tY2lfc3RhdGUJc3RhdGU7CkBAIC0xOTMsNiArMTk0LDggQEAKIAlib29sCQkJdnFtbWNfZW5hYmxlZDsKIAl1bnNpZ25lZCBsb25nCQlpcnFfZmxhZ3M7IC8qIElSUSBmbGFncyAqLwogCWludAkJCWlycTsKKworCWludAkJCXNkaW9faWQwOwogfTsKIAogLyogRE1BIG9wcyBmb3IgSW50ZXJuYWwvRXh0ZXJuYWwgRE1BQyBpbnRlcmZhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaCBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAppbmRleCBkZjBjMTUzLi45ZjMyMjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCkBAIC0yODksNiArMjg5LDcgQEAKICNkZWZpbmUgTU1DX0NBUDJfSFM0MDBfMV8yVgkoMSA8PCAxNikJLyogQ2FuIHN1cHBvcnQgSFM0MDAgMS4yViAqLwogI2RlZmluZSBNTUNfQ0FQMl9IUzQwMAkJKE1NQ19DQVAyX0hTNDAwXzFfOFYgfCBcCiAJCQkJIE1NQ19DQVAyX0hTNDAwXzFfMlYpCisjZGVmaW5lIE1NQ19DQVAyX0hTWDAwXzFfMlYJKE1NQ19DQVAyX0hTMjAwXzFfMlZfU0RSIHwgTU1DX0NBUDJfSFM0MDBfMV8yVikKICNkZWZpbmUgTU1DX0NBUDJfU0RJT19JUlFfTk9USFJFQUQgKDEgPDwgMTcpCiAKIAltbWNfcG1fZmxhZ190CQlwbV9jYXBzOwkvKiBzdXBwb3J0ZWQgcG0gZmVhdHVyZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKaW5kZXggMWNkMDBiMy4uNDlhZDdhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKQEAgLTI5Niw2ICsyOTYsNyBAQAogI2RlZmluZSBFWFRfQ1NEX1NBTklUSVpFX1NUQVJUCQkxNjUgICAgIC8qIFcgKi8KICNkZWZpbmUgRVhUX0NTRF9XUl9SRUxfUEFSQU0JCTE2NgkvKiBSTyAqLwogI2RlZmluZSBFWFRfQ1NEX1JQTUJfTVVMVAkJMTY4CS8qIFJPICovCisjZGVmaW5lIEVYVF9DU0RfRldfQ09ORklHCQkxNjkJLyogUi9XICovCiAjZGVmaW5lIEVYVF9DU0RfQk9PVF9XUAkJCTE3MwkvKiBSL1cgKi8KICNkZWZpbmUgRVhUX0NTRF9FUkFTRV9HUk9VUF9ERUYJCTE3NQkvKiBSL1cgKi8KICNkZWZpbmUgRVhUX0NTRF9QQVJUX0NPTkZJRwkJMTc5CS8qIFIvVyAqLwpAQCAtMzMyLDYgKzMzMyw4IEBACiAjZGVmaW5lIEVYVF9DU0RfR0VORVJJQ19DTUQ2X1RJTUUJMjQ4CS8qIFJPICovCiAjZGVmaW5lIEVYVF9DU0RfQ0FDSEVfU0laRQkJMjQ5CS8qIFJPLCA0IGJ5dGVzICovCiAjZGVmaW5lIEVYVF9DU0RfUFdSX0NMX0REUl8yMDBfMzYwCTI1MwkvKiBSTyAqLworI2RlZmluZSBFWFRfQ1NEX0ZJUk1XQVJFX1ZFUlNJT04JMjU0CS8qIFJPLCA4IGJ5dGVzICovCisjZGVmaW5lIEVYVF9DU0RfU1VQUE9SVEVEX01PREUJCTQ5MwkvKiBSTyAqLwogI2RlZmluZSBFWFRfQ1NEX1RBR19VTklUX1NJWkUJCTQ5OAkvKiBSTyAqLwogI2RlZmluZSBFWFRfQ1NEX0RBVEFfVEFHX1NVUFBPUlQJNDk5CS8qIFJPICovCiAjZGVmaW5lIEVYVF9DU0RfTUFYX1BBQ0tFRF9XUklURVMJNTAwCS8qIFJPICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9zZGhjaS5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2RoY2kuaAppbmRleCBkYmE3OTNlLi4zNzVhZjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9zZGhjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL3NkaGNpLmgKQEAgLTEwMCw2ICsxMDAsMTIgQEAKICNkZWZpbmUgU0RIQ0lfUVVJUksyX0JST0tFTl9ERFI1MAkJCSgxPDw3KQogLyogU3RvcCBjb21tYW5kIChDTUQxMikgY2FuIHNldCBUcmFuc2ZlciBDb21wbGV0ZSB3aGVuIG5vdCB1c2luZyBNTUNfUlNQX0JVU1kgKi8KICNkZWZpbmUgU0RIQ0lfUVVJUksyX1NUT1BfV0lUSF9UQwkJCSgxPDw4KQorLyogQ29udHJvbGxlciBkb2VzIG5vdCBzdXBwb3J0IDY0LWJpdCBETUEgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUksyX0JST0tFTl82NF9CSVRfRE1BCQkJKDE8PDkpCisvKiBuZWVkIGNsZWFyIHRyYW5zZmVyIG1vZGUgcmVnaXN0ZXIgYmVmb3JlIHNlbmQgY21kICovCisjZGVmaW5lIFNESENJX1FVSVJLMl9DTEVBUl9UUkFOU0ZFUk1PREVfUkVHX0JFRk9SRV9DTUQJKDE8PDEwKQorLyogQ2FwYWJpbGl0eSByZWdpc3RlciBiaXQtNjMgaW5kaWNhdGVzIEhTNDAwIHN1cHBvcnQgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUksyX0NBUFNfQklUNjNfRk9SX0hTNDAwCQkoMTw8MTEpCiAKIAlpbnQgaXJxOwkJLyogRGV2aWNlIElSUSAqLwogCXZvaWQgX19pb21lbSAqaW9hZGRyOwkvKiBNYXBwZWQgYWRkcmVzcyAqLwpAQCAtMTMwLDYgKzEzNiw3IEBACiAjZGVmaW5lIFNESENJX1NESU9fSVJRX0VOQUJMRUQJKDE8PDkpCS8qIFNESU8gaXJxIGVuYWJsZWQgKi8KICNkZWZpbmUgU0RIQ0lfU0RSMTA0X05FRURTX1RVTklORyAoMTw8MTApCS8qIFNEUjEwNC9IUzIwMCBuZWVkcyB0dW5pbmcgKi8KICNkZWZpbmUgU0RIQ0lfVVNJTkdfUkVUVU5JTkdfVElNRVIgKDE8PDExKQkvKiBIb3N0IGlzIHVzaW5nIGEgcmV0dW5pbmcgdGltZXIgZm9yIHRoZSBjYXJkICovCisjZGVmaW5lIFNESENJX1VTRV82NF9CSVRfRE1BCSgxPDwxMikJLyogVXNlIDY0LWJpdCBETUEgKi8KIAogCXVuc2lnbmVkIGludCB2ZXJzaW9uOwkvKiBTREhDSSBzcGVjLiB2ZXJzaW9uICovCiAKQEAgLTE1NSwxMiArMTYyLDE5IEBACiAKIAlpbnQgc2dfY291bnQ7CQkvKiBNYXBwZWQgc2cgZW50cmllcyAqLwogCi0JdTggKmFkbWFfZGVzYzsJCS8qIEFETUEgZGVzY3JpcHRvciB0YWJsZSAqLwotCXU4ICphbGlnbl9idWZmZXI7CS8qIEJvdW5jZSBidWZmZXIgKi8KKwl2b2lkICphZG1hX3RhYmxlOwkvKiBBRE1BIGRlc2NyaXB0b3IgdGFibGUgKi8KKwl2b2lkICphbGlnbl9idWZmZXI7CS8qIEJvdW5jZSBidWZmZXIgKi8KKworCXNpemVfdCBhZG1hX3RhYmxlX3N6OwkvKiBBRE1BIGRlc2NyaXB0b3IgdGFibGUgc2l6ZSAqLworCXNpemVfdCBhbGlnbl9idWZmZXJfc3o7CS8qIEJvdW5jZSBidWZmZXIgc2l6ZSAqLwogCiAJZG1hX2FkZHJfdCBhZG1hX2FkZHI7CS8qIE1hcHBlZCBBRE1BIGRlc2NyLiB0YWJsZSAqLwogCWRtYV9hZGRyX3QgYWxpZ25fYWRkcjsJLyogTWFwcGVkIGJvdW5jZSBidWZmZXIgKi8KIAorCXVuc2lnbmVkIGludCBkZXNjX3N6OwkvKiBBRE1BIGRlc2NyaXB0b3Igc2l6ZSAqLworCXVuc2lnbmVkIGludCBhbGlnbl9zejsJLyogQURNQSBhbGlnbm1lbnQgKi8KKwl1bnNpZ25lZCBpbnQgYWxpZ25fbWFzazsJLyogQURNQSBhbGlnbm1lbnQgbWFzayAqLworCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGZpbmlzaF90YXNrbGV0OwkvKiBUYXNrbGV0IHN0cnVjdHVyZXMgKi8KIAogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkvKiBUaW1lciBmb3IgdGltZW91dHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgKaW5kZXggNTBmMGJjOS4uYWFiMDMyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgKQEAgLTg0LDggKzg0LDYgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcnY7CiB9OwogCi0jZGVmaW5lIHRvX3NkaW9fZHJpdmVyKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2Rpb19kcml2ZXIsIGRydikKLQogLyoqCiAgKiBTRElPX0RFVklDRSAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyBTRElPIGRldmljZQogICogQHZlbmQ6IHRoZSAxNiBiaXQgbWFudWZhY3R1cmVyIGNvZGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXNpLmggYi9pbmNsdWRlL2xpbnV4L21zaS5oCmluZGV4IDQ0ZjQ3NDYuLjhhYzRhNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tc2kuaApAQCAtMTAsMTcgKzEwLDEyIEBACiAJdTMyCWRhdGE7CQkvKiAxNiBiaXRzIG9mIG1zaSBtZXNzYWdlIGRhdGEgKi8KIH07CiAKK2V4dGVybiBpbnQgcGNpX21zaV9pZ25vcmVfbWFzazsKIC8qIEhlbHBlciBmdW5jdGlvbnMgKi8KIHN0cnVjdCBpcnFfZGF0YTsKIHN0cnVjdCBtc2lfZGVzYzsKLXZvaWQgbWFza19tc2lfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7Ci12b2lkIHVubWFza19tc2lfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7Ci12b2lkIF9fcmVhZF9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpOwogdm9pZCBfX2dldF9jYWNoZWRfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKLXZvaWQgX193cml0ZV9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpOwotdm9pZCByZWFkX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CiB2b2lkIGdldF9jYWNoZWRfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKLXZvaWQgd3JpdGVfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKIAogc3RydWN0IG1zaV9kZXNjIHsKIAlzdHJ1Y3QgewpAQCAtNDgsNiArNDMsNTIgQEAKIAlzdHJ1Y3QgbXNpX21zZyBtc2c7CiB9OwogCisvKiBIZWxwZXJzIHRvIGhpZGUgc3RydWN0IG1zaV9kZXNjIGltcGxlbWVudGF0aW9uIGRldGFpbHMgKi8KKyNkZWZpbmUgbXNpX2Rlc2NfdG9fZGV2KGRlc2MpCQkoJihkZXNjKS0+ZGV2LmRldikKKyNkZWZpbmUgZGV2X3RvX21zaV9saXN0KGRldikJCSgmdG9fcGNpX2RldigoZGV2KSktPm1zaV9saXN0KQorI2RlZmluZSBmaXJzdF9tc2lfZW50cnkoZGV2KQkJXAorCWxpc3RfZmlyc3RfZW50cnkoZGV2X3RvX21zaV9saXN0KChkZXYpKSwgc3RydWN0IG1zaV9kZXNjLCBsaXN0KQorI2RlZmluZSBmb3JfZWFjaF9tc2lfZW50cnkoZGVzYywgZGV2KQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeSgoZGVzYyksIGRldl90b19tc2lfbGlzdCgoZGV2KSksIGxpc3QpCisKKyNpZmRlZiBDT05GSUdfUENJX01TSQorI2RlZmluZSBmaXJzdF9wY2lfbXNpX2VudHJ5KHBkZXYpCWZpcnN0X21zaV9lbnRyeSgmKHBkZXYpLT5kZXYpCisjZGVmaW5lIGZvcl9lYWNoX3BjaV9tc2lfZW50cnkoZGVzYywgcGRldikJXAorCWZvcl9lYWNoX21zaV9lbnRyeSgoZGVzYyksICYocGRldiktPmRldikKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqbXNpX2Rlc2NfdG9fcGNpX2RldihzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCit7CisJcmV0dXJuIGRlc2MtPmRldjsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJX01TSSAqLworCit2b2lkIF9fcGNpX3JlYWRfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKK3ZvaWQgX19wY2lfd3JpdGVfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKK3ZvaWQgcGNpX3dyaXRlX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CisKK3UzMiBfX3BjaV9tc2l4X2Rlc2NfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgZmxhZyk7Cit1MzIgX19wY2lfbXNpX2Rlc2NfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpOwordm9pZCBwY2lfbXNpX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7Cit2b2lkIHBjaV9tc2lfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworCisvKiBDb252ZXJzaW9uIGhlbHBlcnMuIFNob3VsZCBiZSByZW1vdmVkIGFmdGVyIG1lcmdpbmcgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRlX21zaV9tc2coc3RydWN0IG1zaV9kZXNjICplbnRyeSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlfX3BjaV93cml0ZV9tc2lfbXNnKGVudHJ5LCBtc2cpOworfQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX21zaV9tc2coaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsIG1zZyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbWFza19tc2lfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlwY2lfbXNpX21hc2tfaXJxKGRhdGEpOworfQorc3RhdGljIGlubGluZSB2b2lkIHVubWFza19tc2lfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlwY2lfbXNpX3VubWFza19pcnEoZGF0YSk7Cit9CisKIC8qCiAgKiBUaGUgYXJjaCBob29rcyB0byBzZXR1cCB1cCBtc2kgaXJxcy4gVGhvc2UgZnVuY3Rpb25zIGFyZQogICogaW1wbGVtZW50ZWQgYXMgd2VhayBzeW1ib2xzIHNvIHRoYXQgdGhleSAvY2FuLyBiZSBvdmVycmlkZW4gYnkKQEAgLTYxLDE4ICsxMDIsMTQyIEBACiAKIHZvaWQgZGVmYXVsdF90ZWFyZG93bl9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgZGVmYXVsdF9yZXN0b3JlX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotdTMyIGRlZmF1bHRfbXNpX21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIG1hc2ssIHUzMiBmbGFnKTsKLXUzMiBkZWZhdWx0X21zaXhfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgZmxhZyk7CiAKLXN0cnVjdCBtc2lfY2hpcCB7CitzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgewogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworI2lmZGVmIENPTkZJR19HRU5FUklDX01TSV9JUlFfRE9NQUlOCisJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKKyNlbmRpZgogCi0JaW50ICgqc2V0dXBfaXJxKShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJaW50ICgqc2V0dXBfaXJxKShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXAsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkgc3RydWN0IG1zaV9kZXNjICpkZXNjKTsKLQl2b2lkICgqdGVhcmRvd25faXJxKShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEpOworCXZvaWQgKCp0ZWFyZG93bl9pcnEpKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwgdW5zaWduZWQgaW50IGlycSk7CiB9OwogCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfTVNJX0lSUV9ET01BSU4KKworI2luY2x1ZGUgPGxpbnV4L2lycWhhbmRsZXIuaD4KKyNpbmNsdWRlIDxhc20vbXNpLmg+CisKK3N0cnVjdCBpcnFfZG9tYWluOworc3RydWN0IGlycV9jaGlwOworc3RydWN0IGRldmljZV9ub2RlOworc3RydWN0IG1zaV9kb21haW5faW5mbzsKKworLyoqCisgKiBzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgLSBNU0kgaW50ZXJydXB0IGRvbWFpbiBjYWxsYmFja3MKKyAqIEBnZXRfaHdpcnE6CQlSZXRyaWV2ZSB0aGUgcmVzdWx0aW5nIGh3IGlycSBudW1iZXIKKyAqIEBtc2lfaW5pdDoJCURvbWFpbiBzcGVjaWZpYyBpbml0IGZ1bmN0aW9uIGZvciBNU0kgaW50ZXJydXB0cworICogQG1zaV9mcmVlOgkJRG9tYWluIHNwZWNpZmljIGZ1bmN0aW9uIHRvIGZyZWUgYSBNU0kgaW50ZXJydXB0cworICogQG1zaV9jaGVjazoJCUNhbGxiYWNrIGZvciB2ZXJpZmljYXRpb24gb2YgdGhlIGRvbWFpbi9pbmZvL2RldiBkYXRhCisgKiBAbXNpX3ByZXBhcmU6CVByZXBhcmUgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGludGVycnVwdHMgaW4gdGhlIGRvbWFpbgorICogQG1zaV9maW5pc2g6CQlPcHRpb25hbCBjYWxsYmFjbCB0byBmaW5hbGl6ZSB0aGUgYWxsb2NhdGlvbgorICogQHNldF9kZXNjOgkJU2V0IHRoZSBtc2kgZGVzY3JpcHRvciBmb3IgYW4gaW50ZXJydXB0CisgKiBAaGFuZGxlX2Vycm9yOglPcHRpb25hbCBlcnJvciBoYW5kbGVyIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzCisgKgorICogQGdldF9od2lycSwgQG1zaV9pbml0IGFuZCBAbXNpX2ZyZWUgYXJlIGNhbGxiYWNrcyB1c2VkIGJ5CisgKiBtc2lfY3JlYXRlX2lycV9kb21haW4oKSBhbmQgcmVsYXRlZCBpbnRlcmZhY2VzCisgKgorICogQG1zaV9jaGVjaywgQG1zaV9wcmVwYXJlLCBAbXNpX2ZpbmlzaCwgQHNldF9kZXNjIGFuZCBAaGFuZGxlX2Vycm9yCisgKiBhcmUgY2FsbGJhY2tzIHVzZWQgYnkgbXNpX2lycV9kb21haW5fYWxsb2NfaXJxcygpIGFuZCByZWxhdGVkCisgKiBpbnRlcmZhY2VzIHdoaWNoIGFyZSBiYXNlZCBvbiBtc2lfZGVzYy4KKyAqLworc3RydWN0IG1zaV9kb21haW5fb3BzIHsKKwlpcnFfaHdfbnVtYmVyX3QJKCpnZXRfaHdpcnEpKHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sCisJCQkJICAgICBtc2lfYWxsb2NfaW5mb190ICphcmcpOworCWludAkJKCptc2lfaW5pdCkoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkgICAgdW5zaWduZWQgaW50IHZpcnEsIGlycV9od19udW1iZXJfdCBod2lycSwKKwkJCQkgICAgbXNpX2FsbG9jX2luZm9fdCAqYXJnKTsKKwl2b2lkCQkoKm1zaV9mcmVlKShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCSAgICBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgdmlycSk7CisJaW50CQkoKm1zaV9jaGVjaykoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgICAgIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpOworCWludAkJKCptc2lfcHJlcGFyZSkoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbnZlYywKKwkJCQkgICAgICAgbXNpX2FsbG9jX2luZm9fdCAqYXJnKTsKKwl2b2lkCQkoKm1zaV9maW5pc2gpKG1zaV9hbGxvY19pbmZvX3QgKmFyZywgaW50IHJldHZhbCk7CisJdm9pZAkJKCpzZXRfZGVzYykobXNpX2FsbG9jX2luZm9fdCAqYXJnLAorCQkJCSAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpOworCWludAkJKCpoYW5kbGVfZXJyb3IpKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJCXN0cnVjdCBtc2lfZGVzYyAqZGVzYywgaW50IGVycm9yKTsKK307CisKKy8qKgorICogc3RydWN0IG1zaV9kb21haW5faW5mbyAtIE1TSSBpbnRlcnJ1cHQgZG9tYWluIGRhdGEKKyAqIEBmbGFnczoJCUZsYWdzIHRvIGRlY3JpYmUgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcworICogQG9wczoJCVRoZSBjYWxsYmFjayBkYXRhIHN0cnVjdHVyZQorICogQGNoaXA6CQlPcHRpb25hbDogYXNzb2NpYXRlZCBpbnRlcnJ1cHQgY2hpcAorICogQGNoaXBfZGF0YToJCU9wdGlvbmFsOiBhc3NvY2lhdGVkIGludGVycnVwdCBjaGlwIGRhdGEKKyAqIEBoYW5kbGVyOgkJT3B0aW9uYWw6IGFzc29jaWF0ZWQgaW50ZXJydXB0IGZsb3cgaGFuZGxlcgorICogQGhhbmRsZXJfZGF0YToJT3B0aW9uYWw6IGFzc29jaWF0ZWQgaW50ZXJydXB0IGZsb3cgaGFuZGxlciBkYXRhCisgKiBAaGFuZGxlcl9uYW1lOglPcHRpb25hbDogYXNzb2NpYXRlZCBpbnRlcnJ1cHQgZmxvdyBoYW5kbGVyIG5hbWUKKyAqIEBkYXRhOgkJT3B0aW9uYWw6IGRvbWFpbiBzcGVjaWZpYyBkYXRhCisgKi8KK3N0cnVjdCBtc2lfZG9tYWluX2luZm8geworCXUzMgkJCWZsYWdzOworCXN0cnVjdCBtc2lfZG9tYWluX29wcwkqb3BzOworCXN0cnVjdCBpcnFfY2hpcAkJKmNoaXA7CisJdm9pZAkJCSpjaGlwX2RhdGE7CisJaXJxX2Zsb3dfaGFuZGxlcl90CWhhbmRsZXI7CisJdm9pZAkJCSpoYW5kbGVyX2RhdGE7CisJY29uc3QgY2hhcgkJKmhhbmRsZXJfbmFtZTsKKwl2b2lkCQkJKmRhdGE7Cit9OworCisvKiBGbGFncyBmb3IgbXNpX2RvbWFpbl9pbmZvICovCitlbnVtIHsKKwkvKgorCSAqIEluaXQgbm9uIGltcGxlbWVudGVkIG9wcyBjYWxsYmFja3Mgd2l0aCBkZWZhdWx0IE1TSSBkb21haW4KKwkgKiBjYWxsYmFja3MuCisJICovCisJTVNJX0ZMQUdfVVNFX0RFRl9ET01fT1BTCT0gKDEgPDwgMCksCisJLyoKKwkgKiBJbml0IG5vbiBpbXBsZW1lbnRlZCBjaGlwIGNhbGxiYWNrcyB3aXRoIGRlZmF1bHQgTVNJIGNoaXAKKwkgKiBjYWxsYmFja3MuCisJICovCisJTVNJX0ZMQUdfVVNFX0RFRl9DSElQX09QUwk9ICgxIDw8IDEpLAorCS8qIEJ1aWxkIGlkZW50aXR5IG1hcCBiZXR3ZWVuIGh3aXJxIGFuZCBpcnEgKi8KKwlNU0lfRkxBR19JREVOVElUWV9NQVAJCT0gKDEgPDwgMiksCisJLyogU3VwcG9ydCBtdWx0aXBsZSBQQ0kgTVNJIGludGVycnVwdHMgKi8KKwlNU0lfRkxBR19NVUxUSV9QQ0lfTVNJCQk9ICgxIDw8IDMpLAorCS8qIFN1cHBvcnQgUENJIE1TSVggaW50ZXJydXB0cyAqLworCU1TSV9GTEFHX1BDSV9NU0lYCQk9ICgxIDw8IDQpLAorfTsKKworaW50IG1zaV9kb21haW5fc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCisJCQkgICAgYm9vbCBmb3JjZSk7CisKK3N0cnVjdCBpcnFfZG9tYWluICptc2lfY3JlYXRlX2lycV9kb21haW4oc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAorCQkJCQkgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkJIHN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQpOworaW50IG1zaV9kb21haW5fYWxsb2NfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIGludCBudmVjKTsKK3ZvaWQgbXNpX2RvbWFpbl9mcmVlX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2KTsKK3N0cnVjdCBtc2lfZG9tYWluX2luZm8gKm1zaV9nZXRfZG9tYWluX2luZm8oc3RydWN0IGlycV9kb21haW4gKmRvbWFpbik7CisKKyNlbmRpZiAvKiBDT05GSUdfR0VORVJJQ19NU0lfSVJRX0RPTUFJTiAqLworCisjaWZkZWYgQ09ORklHX1BDSV9NU0lfSVJRX0RPTUFJTgordm9pZCBwY2lfbXNpX2RvbWFpbl93cml0ZV9tc2coc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CitzdHJ1Y3QgaXJxX2RvbWFpbiAqcGNpX21zaV9jcmVhdGVfaXJxX2RvbWFpbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSAgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkJICAgICBzdHJ1Y3QgaXJxX2RvbWFpbiAqcGFyZW50KTsKK2ludCBwY2lfbXNpX2RvbWFpbl9hbGxvY19pcnFzKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkgICAgICBpbnQgbnZlYywgaW50IHR5cGUpOwordm9pZCBwY2lfbXNpX2RvbWFpbl9mcmVlX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IHBjaV9kZXYgKmRldik7CitzdHJ1Y3QgaXJxX2RvbWFpbiAqcGNpX21zaV9jcmVhdGVfZGVmYXVsdF9pcnFfZG9tYWluKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sIHN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQpOworCitpcnFfaHdfbnVtYmVyX3QgcGNpX21zaV9kb21haW5fY2FsY19od2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgIHN0cnVjdCBtc2lfZGVzYyAqZGVzYyk7CitpbnQgcGNpX21zaV9kb21haW5fY2hlY2tfY2FwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkgICAgIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sIHN0cnVjdCBkZXZpY2UgKmRldik7CisjZW5kaWYgLyogQ09ORklHX1BDSV9NU0lfSVJRX0RPTUFJTiAqLworCiAjZW5kaWYgLyogTElOVVhfTVNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzNC5oIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKaW5kZXggMzU2YWNjMi4uMDIyYjc2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKQEAgLTQ5MCw2ICs0OTAsOCBAQAogCiAJLyogbmZzNDIgKi8KIAlORlNQUk9DNF9DTE5UX1NFRUssCisJTkZTUFJPQzRfQ0xOVF9BTExPQ0FURSwKKwlORlNQUk9DNF9DTE5UX0RFQUxMT0NBVEUsCiB9OwogCiAvKiBuZnM0MSB0eXBlcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKaW5kZXggYzcyZDFhZC4uNmQ2MjdiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkgKi8KIAlfX2JlMzIJCQljb29raWV2ZXJmWzJdOwogCi0JdW5zaWduZWQgbG9uZwkJbnBhZ2VzOworCXVuc2lnbmVkIGxvbmcJCW5yZXF1ZXN0czsKIAlzdHJ1Y3QgbmZzX21kc19jb21taXRfaW5mbyBjb21taXRfaW5mbzsKIAogCS8qIE9wZW4gY29udGV4dHMgZm9yIHNoYXJlZCBtbWFwIHdyaXRlcyAqLwpAQCAtNTIwLDcgKzUyMCw3IEBACiBzdGF0aWMgaW5saW5lIGludAogbmZzX2hhdmVfd3JpdGViYWNrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXJldHVybiBORlNfSShpbm9kZSktPm5wYWdlcyAhPSAwOworCXJldHVybiBORlNfSShpbm9kZSktPm5yZXF1ZXN0cyAhPSAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKaW5kZXggYTMyYmEwZC4uMWUzN2ZiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCkBAIC0yMzEsNSArMjMxLDcgQEAKICNkZWZpbmUgTkZTX0NBUF9BVE9NSUNfT1BFTl9WMQkoMVUgPDwgMTcpCiAjZGVmaW5lIE5GU19DQVBfU0VDVVJJVFlfTEFCRUwJKDFVIDw8IDE4KQogI2RlZmluZSBORlNfQ0FQX1NFRUsJCSgxVSA8PCAxOSkKKyNkZWZpbmUgTkZTX0NBUF9BTExPQ0FURQkoMVUgPDwgMjApCisjZGVmaW5lIE5GU19DQVBfREVBTExPQ0FURQkoMVUgPDwgMjEpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAppbmRleCA0N2ViYjRmLi40NjdjODRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaApAQCAtMTI0Myw2ICsxMjQzLDIwIEBACiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKICNpZmRlZiBDT05GSUdfTkZTX1Y0XzIKK3N0cnVjdCBuZnM0Ml9mYWxsb2NfYXJncyB7CisJc3RydWN0IG5mczRfc2VxdWVuY2VfYXJncwlzZXFfYXJnczsKKworCXN0cnVjdCBuZnNfZmgJCQkqZmFsbG9jX2ZoOworCW5mczRfc3RhdGVpZAkJCSBmYWxsb2Nfc3RhdGVpZDsKKwl1NjQJCQkJIGZhbGxvY19vZmZzZXQ7CisJdTY0CQkJCSBmYWxsb2NfbGVuZ3RoOworfTsKKworc3RydWN0IG5mczQyX2ZhbGxvY19yZXMgeworCXN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcwlzZXFfcmVzOworCXVuc2lnbmVkIGludAkJCXN0YXR1czsKK307CisKIHN0cnVjdCBuZnM0Ml9zZWVrX2FyZ3MgewogCXN0cnVjdCBuZnM0X3NlcXVlbmNlX2FyZ3MJc2VxX2FyZ3M7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2YuaCBiL2luY2x1ZGUvbGludXgvb2YuaAppbmRleCAyOWYwYWRjLi5jNTViNTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZi5oCkBAIC05MjIsNCArOTIyLDE1IEBACiAvKiBDT05GSUdfT0ZfUkVTT0xWRSBhcGkgKi8KIGV4dGVybiBpbnQgb2ZfcmVzb2x2ZV9waGFuZGxlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKnRyZWUpOwogCisvKioKKyAqIG9mX2RldmljZV9pc19zeXN0ZW1fcG93ZXJfY29udHJvbGxlciAtIFRlbGxzIGlmIHN5c3RlbS1wb3dlci1jb250cm9sbGVyIGlzIGZvdW5kIGZvciBkZXZpY2Vfbm9kZQorICogQG5wOiBQb2ludGVyIHRvIHRoZSBnaXZlbiBkZXZpY2Vfbm9kZQorICoKKyAqIHJldHVybiB0cnVlIGlmIHByZXNlbnQgZmFsc2Ugb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBvZl9kZXZpY2VfaXNfc3lzdGVtX3Bvd2VyX2NvbnRyb2xsZXIoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlyZXR1cm4gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAic3lzdGVtLXBvd2VyLWNvbnRyb2xsZXIiKTsKK30KKwogI2VuZGlmIC8qIF9MSU5VWF9PRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX3BjaS5oIGIvaW5jbHVkZS9saW51eC9vZl9wY2kuaAppbmRleCAxZmQyMDdlLi5jZTBlNWFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfcGNpLmgKQEAgLTU5LDEzICs1OSwxMyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19PRikgJiYgZGVmaW5lZChDT05GSUdfUENJX01TSSkKLWludCBvZl9wY2lfbXNpX2NoaXBfYWRkKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCk7Ci12b2lkIG9mX3BjaV9tc2lfY2hpcF9yZW1vdmUoc3RydWN0IG1zaV9jaGlwICpjaGlwKTsKLXN0cnVjdCBtc2lfY2hpcCAqb2ZfcGNpX2ZpbmRfbXNpX2NoaXBfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpOworaW50IG9mX3BjaV9tc2lfY2hpcF9hZGQoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwKTsKK3ZvaWQgb2ZfcGNpX21zaV9jaGlwX3JlbW92ZShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApOworc3RydWN0IG1zaV9jb250cm9sbGVyICpvZl9wY2lfZmluZF9tc2lfY2hpcF9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApIHsgcmV0dXJuIC1FSU5WQUw7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvZl9wY2lfbXNpX2NoaXBfcmVtb3ZlKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCkgeyB9Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBtc2lfY2hpcCAqCitzdGF0aWMgaW5saW5lIGludCBvZl9wY2lfbXNpX2NoaXBfYWRkKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCkgeyByZXR1cm4gLUVJTlZBTDsgfQorc3RhdGljIGlubGluZSB2b2lkIG9mX3BjaV9tc2lfY2hpcF9yZW1vdmUoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwKSB7IH0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1zaV9jb250cm9sbGVyICoKIG9mX3BjaV9maW5kX21zaV9jaGlwX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKSB7IHJldHVybiBOVUxMOyB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vbWFwLWdwbWMuaCBiL2luY2x1ZGUvbGludXgvb21hcC1ncG1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwODBlZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvb21hcC1ncG1jLmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiAgT01BUCBHUE1DIChHZW5lcmFsIFB1cnBvc2UgTWVtb3J5IENvbnRyb2xsZXIpIGRlZmluZXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKiBNYXhpbXVtIE51bWJlciBvZiBDaGlwIFNlbGVjdHMgKi8KKyNkZWZpbmUgR1BNQ19DU19OVU0JCTgKKworI2RlZmluZSBHUE1DX0NPTkZJR19XUAkJMHgwMDAwMDAwNQorCisjZGVmaW5lIEdQTUNfSVJRX0ZJRk9FVkVOVEVOQUJMRQkweDAxCisjZGVmaW5lIEdQTUNfSVJRX0NPVU5UX0VWRU5UCQkweDAyCisKKyNkZWZpbmUgR1BNQ19CVVJTVF80CQkJNAkvKiA0IHdvcmQgYnVyc3QgKi8KKyNkZWZpbmUgR1BNQ19CVVJTVF84CQkJOAkvKiA4IHdvcmQgYnVyc3QgKi8KKyNkZWZpbmUgR1BNQ19CVVJTVF8xNgkJCTE2CS8qIDE2IHdvcmQgYnVyc3QgKi8KKyNkZWZpbmUgR1BNQ19ERVZXSURUSF84QklUCQkxCS8qIDgtYml0IGRldmljZSB3aWR0aCAqLworI2RlZmluZSBHUE1DX0RFVldJRFRIXzE2QklUCQkyCS8qIDE2LWJpdCBkZXZpY2Ugd2lkdGggKi8KKyNkZWZpbmUgR1BNQ19NVVhfQUFECQkJMQkvKiBBZGRyLUFkZHItRGF0YSBtdWx0aXBsZXggKi8KKyNkZWZpbmUgR1BNQ19NVVhfQUQJCQkyCS8qIEFkZHItRGF0YSBtdWx0aXBsZXggKi8KKworLyogYm9vbCB0eXBlIHRpbWUgc2V0dGluZ3MgKi8KK3N0cnVjdCBncG1jX2Jvb2xfdGltaW5ncyB7CisJYm9vbCBjeWNsZTJjeWNsZWRpZmZjc2VuOworCWJvb2wgY3ljbGUyY3ljbGVzYW1lY3NlbjsKKwlib29sIHdlX2V4dHJhX2RlbGF5OworCWJvb2wgb2VfZXh0cmFfZGVsYXk7CisJYm9vbCBhZHZfZXh0cmFfZGVsYXk7CisJYm9vbCBjc19leHRyYV9kZWxheTsKKwlib29sIHRpbWVfcGFyYV9ncmFudWxhcml0eTsKK307CisKKy8qCisgKiBOb3RlIHRoYXQgYWxsIHZhbHVlcyBpbiB0aGlzIHN0cnVjdCBhcmUgaW4gbmFub3NlY29uZHMgZXhjZXB0IHN5bmNfY2xrCisgKiAod2hpY2ggaXMgaW4gcGljb3NlY29uZHMpLCB3aGlsZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIGFyZSBpbiBncG1jX2ZjayBjeWNsZXMuCisgKi8KK3N0cnVjdCBncG1jX3RpbWluZ3MgeworCS8qIE1pbmltdW0gY2xvY2sgcGVyaW9kIGZvciBzeW5jaHJvbm91cyBtb2RlIChpbiBwaWNvc2Vjb25kcykgKi8KKwl1MzIgc3luY19jbGs7CisKKwkvKiBDaGlwLXNlbGVjdCBzaWduYWwgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ1NfQ09ORklHMiAqLworCXUzMiBjc19vbjsJCS8qIEFzc2VydGlvbiB0aW1lICovCisJdTMyIGNzX3JkX29mZjsJCS8qIFJlYWQgZGVhc3NlcnRpb24gdGltZSAqLworCXUzMiBjc193cl9vZmY7CQkvKiBXcml0ZSBkZWFzc2VydGlvbiB0aW1lICovCisKKwkvKiBBRFYgc2lnbmFsIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NPTkZJRzMgKi8KKwl1MzIgYWR2X29uOwkJLyogQXNzZXJ0aW9uIHRpbWUgKi8KKwl1MzIgYWR2X3JkX29mZjsJCS8qIFJlYWQgZGVhc3NlcnRpb24gdGltZSAqLworCXUzMiBhZHZfd3Jfb2ZmOwkJLyogV3JpdGUgZGVhc3NlcnRpb24gdGltZSAqLworCisJLyogV0Ugc2lnbmFscyB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DT05GSUc0ICovCisJdTMyIHdlX29uOwkJLyogV0UgYXNzZXJ0aW9uIHRpbWUgKi8KKwl1MzIgd2Vfb2ZmOwkJLyogV0UgZGVhc3NlcnRpb24gdGltZSAqLworCisJLyogT0Ugc2lnbmFscyB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DT05GSUc0ICovCisJdTMyIG9lX29uOwkJLyogT0UgYXNzZXJ0aW9uIHRpbWUgKi8KKwl1MzIgb2Vfb2ZmOwkJLyogT0UgZGVhc3NlcnRpb24gdGltZSAqLworCisJLyogQWNjZXNzIHRpbWUgYW5kIGN5Y2xlIHRpbWUgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ09ORklHNSAqLworCXUzMiBwYWdlX2J1cnN0X2FjY2VzczsJLyogTXVsdGlwbGUgYWNjZXNzIHdvcmQgZGVsYXkgKi8KKwl1MzIgYWNjZXNzOwkJLyogU3RhcnQtY3ljbGUgdG8gZmlyc3QgZGF0YSB2YWxpZCBkZWxheSAqLworCXUzMiByZF9jeWNsZTsJCS8qIFRvdGFsIHJlYWQgY3ljbGUgdGltZSAqLworCXUzMiB3cl9jeWNsZTsJCS8qIFRvdGFsIHdyaXRlIGN5Y2xlIHRpbWUgKi8KKworCXUzMiBidXNfdHVybmFyb3VuZDsKKwl1MzIgY3ljbGUyY3ljbGVfZGVsYXk7CisKKwl1MzIgd2FpdF9tb25pdG9yaW5nOworCXUzMiBjbGtfYWN0aXZhdGlvbjsKKworCS8qIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgb24gT01BUDM0MzAgKi8KKwl1MzIgd3JfYWNjZXNzOwkJLyogV1JBQ0NFU1NUSU1FICovCisJdTMyIHdyX2RhdGFfbXV4X2J1czsJLyogV1JEQVRBT05BRE1VWEJVUyAqLworCisJc3RydWN0IGdwbWNfYm9vbF90aW1pbmdzIGJvb2xfdGltaW5nczsKK307CisKKy8qIERldmljZSB0aW1pbmdzIGluIHBpY29zZWNvbmRzICovCitzdHJ1Y3QgZ3BtY19kZXZpY2VfdGltaW5ncyB7CisJdTMyIHRfY2Vhc3U7CS8qIGFkZHJlc3Mgc2V0dXAgdG8gQ1MgdmFsaWQgKi8KKwl1MzIgdF9hdmRhc3U7CS8qIGFkZHJlc3Mgc2V0dXAgdG8gQURWIHZhbGlkICovCisJLyogWFhYOiB0cnkgdG8gY29tYmluZSB0X2F2ZHBfciAmIHRfYXZkcF93LiBJc3N1ZSBpcworCSAqIG9mIHR1c2IgdXNpbmcgdGhlc2UgdGltaW5ncyBldmVuIGZvciBzeW5jIHdoaWxzdAorCSAqIGlkZWFsbHkgZm9yIGFkdl9yZC8od3IpX29mZiBpdCBzaG91bGQgaGF2ZSBjb25zaWRlcmVkCisJICogdF9hdmRoIGluc3RlYWQuIFRoaXMgaW5kaXJlY3RseSBuZWNlc3NpdGF0ZXMgci93CisJICogdmFyaWF0aW9ucyBvZiB0X2F2ZHAgYXMgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBvbmUKKwkgKiBzeW5jICYgb3RoZXIgYXN5bmMKKwkgKi8KKwl1MzIgdF9hdmRwX3I7CS8qIEFEViBsb3cgdGltZSAod2hhdCBhYm91dCB0X2NlciA/KSAqLworCXUzMiB0X2F2ZHBfdzsKKwl1MzIgdF9hYXZkaDsJLyogYWRkcmVzcyBob2xkIHRpbWUgKi8KKwl1MzIgdF9vZWFzdTsJLyogYWRkcmVzcyBzZXR1cCB0byBPRSB2YWxpZCAqLworCXUzMiB0X2FhOwkvKiBhY2Nlc3MgdGltZSBmcm9tIEFEViBhc3NlcnRpb24gKi8KKwl1MzIgdF9pYWE7CS8qIGluaXRpYWwgYWNjZXNzIHRpbWUgKi8KKwl1MzIgdF9vZTsJLyogYWNjZXNzIHRpbWUgZnJvbSBPRSBhc3NlcnRpb24gKi8KKwl1MzIgdF9jZTsJLyogYWNjZXNzIHRpbWUgZnJvbSBDUyBhc2VydGlvbiAqLworCXUzMiB0X3JkX2N5Y2xlOwkvKiByZWFkIGN5Y2xlIHRpbWUgKi8KKwl1MzIgdF9jZXpfcjsJLyogcmVhZCBDUyBkZWFzc2VydGlvbiB0byBoaWdoIFogKi8KKwl1MzIgdF9jZXpfdzsJLyogd3JpdGUgQ1MgZGVhc3NlcnRpb24gdG8gaGlnaCBaICovCisJdTMyIHRfb2V6OwkvKiBPRSBkZWFzc2VydGlvbiB0byBoaWdoIFogKi8KKwl1MzIgdF93ZWFzdTsJLyogYWRkcmVzcyBzZXR1cCB0byBXRSB2YWxpZCAqLworCXUzMiB0X3dwbDsJLyogd3JpdGUgYXNzZXJ0aW9uIHRpbWUgKi8KKwl1MzIgdF93cGg7CS8qIHdyaXRlIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKwl1MzIgdF93cl9jeWNsZTsJLyogd3JpdGUgY3ljbGUgdGltZSAqLworCisJdTMyIGNsazsKKwl1MzIgdF9iYWNjOwkvKiBidXJzdCBhY2Nlc3MgdmFsaWQgY2xvY2sgdG8gb3V0cHV0IGRlbGF5ICovCisJdTMyIHRfY2VzOwkvKiBDUyBzZXR1cCB0aW1lIHRvIGNsayAqLworCXUzMiB0X2F2ZHM7CS8qIEFEViBzZXR1cCB0aW1lIHRvIGNsayAqLworCXUzMiB0X2F2ZGg7CS8qIEFEViBob2xkIHRpbWUgZnJvbSBjbGsgKi8KKwl1MzIgdF9hY2g7CS8qIGFkZHJlc3MgaG9sZCB0aW1lIGZyb20gY2xrICovCisJdTMyIHRfcmR5bzsJLyogY2xrIHRvIHJlYWR5IHZhbGlkICovCisKKwl1MzIgdF9jZV9yZHl6OwkvKiBYWFg6IGRlc2NyaXB0aW9uID8sIG9yIHVzZSB0X2NleiBpbnN0ZWFkICovCisJdTMyIHRfY2VfYXZkOwkvKiBDUyBvbiB0byBBRFYgb24gZGVsYXkgKi8KKworCS8qIFhYWDogY2hlY2sgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbWJpbmluZworCSAqIGN5Y19hYXZoZF9vZSAmIGN5Y19hYXZkaF93ZQorCSAqLworCXU4IGN5Y19hYXZkaF9vZTsvKiByZWFkIGFkZHJlc3MgaG9sZCB0aW1lIGluIGN5Y2xlcyAqLworCXU4IGN5Y19hYXZkaF93ZTsvKiB3cml0ZSBhZGRyZXNzIGhvbGQgdGltZSBpbiBjeWNsZXMgKi8KKwl1OCBjeWNfb2U7CS8qIGFjY2VzcyB0aW1lIGZyb20gT0UgYXNzZXJ0aW9uIGluIGN5Y2xlcyAqLworCXU4IGN5Y193cGw7CS8qIHdyaXRlIGRlYXNzZXJ0aW9uIHRpbWUgaW4gY3ljbGVzICovCisJdTMyIGN5Y19pYWE7CS8qIGluaXRpYWwgYWNjZXNzIHRpbWUgaW4gY3ljbGVzICovCisKKwkvKiBleHRyYSBkZWxheXMgKi8KKwlib29sIGNlX3hkZWxheTsKKwlib29sIGF2ZF94ZGVsYXk7CisJYm9vbCBvZV94ZGVsYXk7CisJYm9vbCB3ZV94ZGVsYXk7Cit9OworCitzdHJ1Y3QgZ3BtY19zZXR0aW5ncyB7CisJYm9vbCBidXJzdF93cmFwOwkvKiBlbmFibGVzIHdyYXAgYnVyc3RpbmcgKi8KKwlib29sIGJ1cnN0X3JlYWQ7CS8qIGVuYWJsZXMgcmVhZCBwYWdlL2J1cnN0IG1vZGUgKi8KKwlib29sIGJ1cnN0X3dyaXRlOwkvKiBlbmFibGVzIHdyaXRlIHBhZ2UvYnVyc3QgbW9kZSAqLworCWJvb2wgZGV2aWNlX25hbmQ7CS8qIGRldmljZSBpcyBOQU5EICovCisJYm9vbCBzeW5jX3JlYWQ7CQkvKiBlbmFibGVzIHN5bmNocm9ub3VzIHJlYWRzICovCisJYm9vbCBzeW5jX3dyaXRlOwkvKiBlbmFibGVzIHN5bmNocm9ub3VzIHdyaXRlcyAqLworCWJvb2wgd2FpdF9vbl9yZWFkOwkvKiBtb25pdG9yIHdhaXQgb24gcmVhZHMgKi8KKwlib29sIHdhaXRfb25fd3JpdGU7CS8qIG1vbml0b3Igd2FpdCBvbiB3cml0ZXMgKi8KKwl1MzIgYnVyc3RfbGVuOwkJLyogcGFnZS9idXJzdCBsZW5ndGggKi8KKwl1MzIgZGV2aWNlX3dpZHRoOwkvKiBkZXZpY2UgYnVzIHdpZHRoICg4IG9yIDE2IGJpdCkgKi8KKwl1MzIgbXV4X2FkZF9kYXRhOwkvKiBtdWx0aXBsZXggYWRkcmVzcyAmIGRhdGEgKi8KKwl1MzIgd2FpdF9waW47CQkvKiB3YWl0LXBpbiB0byBiZSB1c2VkICovCit9OworCitleHRlcm4gaW50IGdwbWNfY2FsY190aW1pbmdzKHN0cnVjdCBncG1jX3RpbWluZ3MgKmdwbWNfdCwKKwkJCSAgICAgc3RydWN0IGdwbWNfc2V0dGluZ3MgKmdwbWNfcywKKwkJCSAgICAgc3RydWN0IGdwbWNfZGV2aWNlX3RpbWluZ3MgKmRldl90KTsKKworc3RydWN0IGdwbWNfbmFuZF9yZWdzOworc3RydWN0IGRldmljZV9ub2RlOworCitleHRlcm4gdm9pZCBncG1jX3VwZGF0ZV9uYW5kX3JlZyhzdHJ1Y3QgZ3BtY19uYW5kX3JlZ3MgKnJlZywgaW50IGNzKTsKK2V4dGVybiBpbnQgZ3BtY19nZXRfY2xpZW50X2lycSh1bnNpZ25lZCBpcnFfY29uZmlnKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBncG1jX3RpY2tzX3RvX25zKHVuc2lnbmVkIGludCB0aWNrcyk7CisKK2V4dGVybiB2b2lkIGdwbWNfY3Nfd3JpdGVfcmVnKGludCBjcywgaW50IGlkeCwgdTMyIHZhbCk7CitleHRlcm4gaW50IGdwbWNfY2FsY19kaXZpZGVyKHVuc2lnbmVkIGludCBzeW5jX2Nsayk7CitleHRlcm4gaW50IGdwbWNfY3Nfc2V0X3RpbWluZ3MoaW50IGNzLCBjb25zdCBzdHJ1Y3QgZ3BtY190aW1pbmdzICp0KTsKK2V4dGVybiBpbnQgZ3BtY19jc19wcm9ncmFtX3NldHRpbmdzKGludCBjcywgc3RydWN0IGdwbWNfc2V0dGluZ3MgKnApOworZXh0ZXJuIGludCBncG1jX2NzX3JlcXVlc3QoaW50IGNzLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgKmJhc2UpOworZXh0ZXJuIHZvaWQgZ3BtY19jc19mcmVlKGludCBjcyk7CitleHRlcm4gaW50IGdwbWNfY29uZmlndXJlKGludCBjbWQsIGludCB3dmFsKTsKK2V4dGVybiB2b2lkIGdwbWNfcmVhZF9zZXR0aW5nc19kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCSAgc3RydWN0IGdwbWNfc2V0dGluZ3MgKnApOworCitleHRlcm4gdm9pZCBvbWFwM19ncG1jX3NhdmVfY29udGV4dCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAzX2dwbWNfcmVzdG9yZV9jb250ZXh0KHZvaWQpOworCitzdHJ1Y3QgZ3BtY190aW1pbmdzOworc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhOworc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhOworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfTVREX05BTkRfT01BUDIpCitleHRlcm4gaW50IGdwbWNfbmFuZF9pbml0KHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSAqZCwKKwkJCSAgc3RydWN0IGdwbWNfdGltaW5ncyAqZ3BtY190KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBncG1jX25hbmRfaW5pdChzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmQsCisJCQkJIHN0cnVjdCBncG1jX3RpbWluZ3MgKmdwbWNfdCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfTVREX09ORU5BTkRfT01BUDIpCitleHRlcm4gdm9pZCBncG1jX29uZW5hbmRfaW5pdChzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgKmQpOworI2Vsc2UKKyNkZWZpbmUgYm9hcmRfb25lbmFuZF9kYXRhCU5VTEwKK3N0YXRpYyBpbmxpbmUgdm9pZCBncG1jX29uZW5hbmRfaW5pdChzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgKmQpCit7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDRjOGFjNWYuLmE1MjNjZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtNDUwLDcgKzQ1MCw3IEBACiAJc3RydWN0IHJlc291cmNlIGJ1c25fcmVzOwkvKiBidXMgbnVtYmVycyByb3V0ZWQgdG8gdGhpcyBidXMgKi8KIAogCXN0cnVjdCBwY2lfb3BzCSpvcHM7CQkvKiBjb25maWd1cmF0aW9uIGFjY2VzcyBmdW5jdGlvbnMgKi8KLQlzdHJ1Y3QgbXNpX2NoaXAJKm1zaTsJCS8qIE1TSSBjb250cm9sbGVyICovCisJc3RydWN0IG1zaV9jb250cm9sbGVyICptc2k7CS8qIE1TSSBjb250cm9sbGVyICovCiAJdm9pZAkJKnN5c2RhdGE7CS8qIGhvb2sgZm9yIHN5cy1zcGVjaWZpYyBleHRlbnNpb24gKi8KIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NkaXI7CS8qIGRpcmVjdG9yeSBlbnRyeSBpbiAvcHJvYy9idXMvcGNpICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggMWZhOTlhMy4uOTdmYjlmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTUyMiw2ICs1MjIsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTEwSF9GMwkweDE0MDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjMgMHgxNDFkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0Y0IDB4MTQxZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTYwSF9OQl9GMyAweDE1NzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX002MEhfTkJfRjQgMHgxNTc0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GMAkweDE2MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YxCTB4MTYwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjIJMHgxNjAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDg5M2EwZDAuLjQ4NmU4NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC03OSw3ICs3OSw3IEBACiAJc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5CWVudHJpZXNbMF07CiB9OwogCi1zdHJ1Y3QgcGVyZl9yZWdzX3VzZXIgeworc3RydWN0IHBlcmZfcmVncyB7CiAJX191NjQJCWFiaTsKIAlzdHJ1Y3QgcHRfcmVncwkqcmVnczsKIH07CkBAIC01ODAsMzQgKzU4MCw0MCBAQAogCiAKIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIHsKLQl1NjQJCQkJdHlwZTsKKwkvKgorCSAqIEZpZWxkcyBzZXQgYnkgcGVyZl9zYW1wbGVfZGF0YV9pbml0KCksIGdyb3VwIHNvIGFzIHRvCisJICogbWluaW1pemUgdGhlIGNhY2hlbGluZXMgdG91Y2hlZC4KKwkgKi8KKwl1NjQJCQkJYWRkcjsKKwlzdHJ1Y3QgcGVyZl9yYXdfcmVjb3JkCQkqcmF3OworCXN0cnVjdCBwZXJmX2JyYW5jaF9zdGFjawkqYnJfc3RhY2s7CisJdTY0CQkJCXBlcmlvZDsKKwl1NjQJCQkJd2VpZ2h0OworCXU2NAkJCQl0eG47CisJdW5pb24gIHBlcmZfbWVtX2RhdGFfc3JjCWRhdGFfc3JjOwogCisJLyoKKwkgKiBUaGUgb3RoZXIgZmllbGRzLCBvcHRpb25hbGx5IHtzZXQsdXNlZH0gYnkKKwkgKiBwZXJmX3twcmVwYXJlLG91dHB1dH1fc2FtcGxlKCkuCisJICovCisJdTY0CQkJCXR5cGU7CiAJdTY0CQkJCWlwOwogCXN0cnVjdCB7CiAJCXUzMglwaWQ7CiAJCXUzMgl0aWQ7CiAJfQkJCQl0aWRfZW50cnk7CiAJdTY0CQkJCXRpbWU7Ci0JdTY0CQkJCWFkZHI7CiAJdTY0CQkJCWlkOwogCXU2NAkJCQlzdHJlYW1faWQ7CiAJc3RydWN0IHsKIAkJdTMyCWNwdTsKIAkJdTMyCXJlc2VydmVkOwogCX0JCQkJY3B1X2VudHJ5OwotCXU2NAkJCQlwZXJpb2Q7Ci0JdW5pb24gIHBlcmZfbWVtX2RhdGFfc3JjCWRhdGFfc3JjOwogCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeQkqY2FsbGNoYWluOwotCXN0cnVjdCBwZXJmX3Jhd19yZWNvcmQJCSpyYXc7Ci0Jc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrCSpicl9zdGFjazsKLQlzdHJ1Y3QgcGVyZl9yZWdzX3VzZXIJCXJlZ3NfdXNlcjsKKwlzdHJ1Y3QgcGVyZl9yZWdzCQlyZWdzX3VzZXI7CisJc3RydWN0IHBlcmZfcmVncwkJcmVnc19pbnRyOwogCXU2NAkJCQlzdGFja191c2VyX3NpemU7Ci0JdTY0CQkJCXdlaWdodDsKLQkvKgotCSAqIFRyYW5zYWN0aW9uIGZsYWdzIGZvciBhYm9ydCBldmVudHM6Ci0JICovCi0JdTY0CQkJCXR4bjsKLX07Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyogZGVmYXVsdCB2YWx1ZSBmb3IgZGF0YSBzb3VyY2UgKi8KICNkZWZpbmUgUEVSRl9NRU1fTkEgKFBFUkZfTUVNX1MoT1AsIE5BKSAgIHxcCkBAIC02MjQsOSArNjMwLDYgQEAKIAlkYXRhLT5yYXcgID0gTlVMTDsKIAlkYXRhLT5icl9zdGFjayA9IE5VTEw7CiAJZGF0YS0+cGVyaW9kID0gcGVyaW9kOwotCWRhdGEtPnJlZ3NfdXNlci5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FOwotCWRhdGEtPnJlZ3NfdXNlci5yZWdzID0gTlVMTDsKLQlkYXRhLT5zdGFja191c2VyX3NpemUgPSAwOwogCWRhdGEtPndlaWdodCA9IDA7CiAJZGF0YS0+ZGF0YV9zcmMudmFsID0gUEVSRl9NRU1fTkE7CiAJZGF0YS0+dHhuID0gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9oc21tYy1vbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YmJjZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBNTUMgZGVmaW5pdGlvbnMgZm9yIE9NQVAyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIuZmxhZ3MgcG9zc2liaWxpdGllcworICoKKyAqIE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xUOiBTb21lIEhTTU1DIGNvbnRyb2xsZXIgaW5zdGFuY2VzIGNhbgorICogICAgb3BlcmF0ZSB3aXRoIGVpdGhlciAxLjhWZGMgb3IgMy4wVmRjIGNhcmQgdm9sdGFnZXM7IHRoaXMgZmxhZworICogICAgc2hvdWxkIGJlIHNldCBpZiB0aGlzIGlzIHRoZSBjYXNlLiAgU2VlIGZvciBleGFtcGxlIFNlY3Rpb24gMjIuNS4zCisgKiAgICAiTU1DL1NEL1NESU8xIEJ1cyBWb2x0YWdlIFNlbGVjdGlvbiIgb2YgdGhlIE9NQVAzNHh4IE11bHRpbWVkaWEKKyAqICAgIERldmljZSBTaWxpY29uIFJldmlzaW9uIDMuMS54IFJldmlzaW9uIFpSIChKdWx5IDIwMTEpIChTV1BVMjIzUikuCisgKgorICogT01BUF9IU01NQ19CUk9LRU5fTVVMVElCTE9DS19SRUFEOiBNdWx0aXBsZS1ibG9jayByZWFkIHRyYW5zZmVycworICogICAgZG9uJ3Qgd29yayBjb3JyZWN0bHkgb24gc29tZSBNTUMgY29udHJvbGxlciBpbnN0YW5jZXMgb24gc29tZQorICogICAgT01BUDMgU29DczsgdGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgaWYgdGhpcyBpcyB0aGUgY2FzZS4gIFNlZQorICogICAgZm9yIGV4YW1wbGUgQWR2aXNvcnkgMi4xLjEuMTI4ICJNTUM6IE11bHRpcGxlIEJsb2NrIFJlYWQKKyAqICAgIE9wZXJhdGlvbiBJc3N1ZSIgaW4gX09NQVAzNTMwLzM1MjUvMzUxNS8zNTAzIFNpbGljb24gRXJyYXRhXworICogICAgUmV2aXNpb24gRiAoT2N0b2JlciAyMDEwKSAoU1BSWjI3OEYpLgorICovCisjZGVmaW5lIE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xUCQlCSVQoMCkKKyNkZWZpbmUgT01BUF9IU01NQ19CUk9LRU5fTVVMVElCTE9DS19SRUFECUJJVCgxKQorI2RlZmluZSBPTUFQX0hTTU1DX1NXQUtFVVBfTUlTU0lORwkJQklUKDIpCisKK3N0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIHsKKwl1OCBmbGFnczsKK307CisKK3N0cnVjdCBtbWNfY2FyZDsKKworc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSB7CisJLyogYmFjay1saW5rIHRvIGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCS8qIHNldCBpZiB5b3VyIGJvYXJkIGhhcyBjb21wb25lbnRzIG9yIHdpcmluZyB0aGF0IGxpbWl0cyB0aGUKKwkgKiBtYXhpbXVtIGZyZXF1ZW5jeSBvbiB0aGUgTU1DIGJ1cyAqLworCXVuc2lnbmVkIGludCBtYXhfZnJlcTsKKworCS8qIEludGVncmF0aW5nIGF0dHJpYnV0ZXMgZnJvbSB0aGUgb21hcF9od21vZCBsYXllciAqLworCXU4IGNvbnRyb2xsZXJfZmxhZ3M7CisKKwkvKiBSZWdpc3RlciBvZmZzZXQgZGV2aWF0aW9uICovCisJdTE2IHJlZ19vZmZzZXQ7CisKKwkvKgorCSAqIDQvOCB3aXJlcyBhbmQgYW55IGFkZGl0aW9uYWwgaG9zdCBjYXBhYmlsaXRpZXMKKwkgKiBuZWVkIHRvIE9SJ2QgYWxsIGNhcGFiaWxpdGllcyAocmVmLiBsaW51eC9tbWMvaG9zdC5oKQorCSAqLworCXUzMiBjYXBzOwkvKiBVc2VkIGZvciB0aGUgTU1DIGRyaXZlciBvbiAyNDMwIGFuZCBsYXRlciAqLworCXUzMiBwbV9jYXBzOwkvKiBQTSBjYXBhYmlsaXRpZXMgb2YgdGhlIG1tYyAqLworCisJLyogc3dpdGNoIHBpbiBjYW4gYmUgZm9yIGNhcmQgZGV0ZWN0IChkZWZhdWx0KSBvciBjYXJkIGNvdmVyICovCisJdW5zaWduZWQgY292ZXI6MTsKKworCS8qIHVzZSB0aGUgaW50ZXJuYWwgY2xvY2sgKi8KKwl1bnNpZ25lZCBpbnRlcm5hbF9jbG9jazoxOworCisJLyogbm9ucmVtb3ZhYmxlIGUuZy4gZU1NQyAqLworCXVuc2lnbmVkIG5vbnJlbW92YWJsZToxOworCisJLyogZU1NQyBkb2VzIG5vdCBoYW5kbGUgcG93ZXIgb2ZmIHdoZW4gbm90IGluIHNsZWVwIHN0YXRlICovCisJdW5zaWduZWQgbm9fcmVndWxhdG9yX29mZl9pbml0OjE7CisKKwkvKiB3ZSBjYW4gcHV0IHRoZSBmZWF0dXJlcyBhYm92ZSBpbnRvIHRoaXMgdmFyaWFibGUgKi8KKyNkZWZpbmUgSFNNTUNfSEFTX1BCSUFTCQkoMSA8PCAwKQorI2RlZmluZSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVAkoMSA8PCAxKQorI2RlZmluZSBIU01NQ19IQVNfSFNQRV9TVVBQT1JUCSgxIDw8IDIpCisJdW5zaWduZWQgZmVhdHVyZXM7CisKKwlpbnQgc3dpdGNoX3BpbjsJCQkvKiBncGlvIChjYXJkIGRldGVjdCkgKi8KKwlpbnQgZ3Bpb193cDsJCQkvKiBncGlvICh3cml0ZSBwcm90ZWN0KSAqLworCisJaW50ICgqc2V0X3Bvd2VyKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCk7CisJdm9pZCAoKnJlbXV4KShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbik7CisJLyogQ2FsbCBiYWNrIGJlZm9yZSBlbmFibGluZyAvIGRpc2FibGluZyByZWd1bGF0b3JzICovCisJdm9pZCAoKmJlZm9yZV9zZXRfcmVnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCk7CisJLyogQ2FsbCBiYWNrIGFmdGVyIGVuYWJsaW5nIC8gZGlzYWJsaW5nIHJlZ3VsYXRvcnMgKi8KKwl2b2lkICgqYWZ0ZXJfc2V0X3JlZykoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcG93ZXJfb24sIGludCB2ZGQpOworCS8qIGlmIHdlIGhhdmUgc3BlY2lhbCBjYXJkLCBpbml0IGl0IHVzaW5nIHRoaXMgY2FsbGJhY2sgKi8KKwl2b2lkICgqaW5pdF9jYXJkKShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOworCisJY29uc3QgY2hhciAqbmFtZTsKKwl1MzIgb2NyX21hc2s7Cit9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1hdG1lbC1tY2kuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9tbWMtYXRtZWwtbWNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5YTJkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9tbWMtYXRtZWwtbWNpLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfX01NQ19BVE1FTF9NQ0lfSAorI2RlZmluZSBfX01NQ19BVE1FTF9NQ0lfSAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtYXRtZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1kdy5oPgorCisvKioKKyAqIHN0cnVjdCBtY2lfZG1hX2RhdGEgLSBETUEgZGF0YSBmb3IgTUNJIGludGVyZmFjZQorICovCitzdHJ1Y3QgbWNpX2RtYV9kYXRhIHsKKyNpZmRlZiBDT05GSUdfQVJNCisJc3RydWN0IGF0X2RtYV9zbGF2ZSAgICAgc2RhdGE7CisjZWxzZQorCXN0cnVjdCBkd19kbWFfc2xhdmUgICAgIHNkYXRhOworI2VuZGlmCit9OworCisvKiBhY2Nlc3NvciBtYWNyb3MgKi8KKyNkZWZpbmUJc2xhdmVfZGF0YV9wdHIocykJKCYocyktPnNkYXRhKQorI2RlZmluZSBmaW5kX3NsYXZlX2RldihzKQkoKHMpLT5zZGF0YS5kbWFfZGV2KQorCisjZW5kaWYgLyogX19NTUNfQVRNRUxfTUNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9tbWMtb21hcC5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmgKaW5kZXggNTFlNzBjZi4uNWMxODhmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmgKQEAgLTEwLDMyICsxMCw4IEBACiAKICNkZWZpbmUgT01BUF9NTUNfTUFYX1NMT1RTCTIKIAotLyoKLSAqIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ci5mbGFncyBwb3NzaWJpbGl0aWVzCi0gKgotICogT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQ6IFNvbWUgSFNNTUMgY29udHJvbGxlciBpbnN0YW5jZXMgY2FuCi0gKiAgICBvcGVyYXRlIHdpdGggZWl0aGVyIDEuOFZkYyBvciAzLjBWZGMgY2FyZCB2b2x0YWdlczsgdGhpcyBmbGFnCi0gKiAgICBzaG91bGQgYmUgc2V0IGlmIHRoaXMgaXMgdGhlIGNhc2UuICBTZWUgZm9yIGV4YW1wbGUgU2VjdGlvbiAyMi41LjMKLSAqICAgICJNTUMvU0QvU0RJTzEgQnVzIFZvbHRhZ2UgU2VsZWN0aW9uIiBvZiB0aGUgT01BUDM0eHggTXVsdGltZWRpYQotICogICAgRGV2aWNlIFNpbGljb24gUmV2aXNpb24gMy4xLnggUmV2aXNpb24gWlIgKEp1bHkgMjAxMSkgKFNXUFUyMjNSKS4KLSAqCi0gKiBPTUFQX0hTTU1DX0JST0tFTl9NVUxUSUJMT0NLX1JFQUQ6IE11bHRpcGxlLWJsb2NrIHJlYWQgdHJhbnNmZXJzCi0gKiAgICBkb24ndCB3b3JrIGNvcnJlY3RseSBvbiBzb21lIE1NQyBjb250cm9sbGVyIGluc3RhbmNlcyBvbiBzb21lCi0gKiAgICBPTUFQMyBTb0NzOyB0aGlzIGZsYWcgc2hvdWxkIGJlIHNldCBpZiB0aGlzIGlzIHRoZSBjYXNlLiAgU2VlCi0gKiAgICBmb3IgZXhhbXBsZSBBZHZpc29yeSAyLjEuMS4xMjggIk1NQzogTXVsdGlwbGUgQmxvY2sgUmVhZAotICogICAgT3BlcmF0aW9uIElzc3VlIiBpbiBfT01BUDM1MzAvMzUyNS8zNTE1LzM1MDMgU2lsaWNvbiBFcnJhdGFfCi0gKiAgICBSZXZpc2lvbiBGIChPY3RvYmVyIDIwMTApIChTUFJaMjc4RikuCi0gKi8KLSNkZWZpbmUgT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQJCUJJVCgwKQotI2RlZmluZSBPTUFQX0hTTU1DX0JST0tFTl9NVUxUSUJMT0NLX1JFQUQJQklUKDEpCi0jZGVmaW5lIE9NQVBfSFNNTUNfU1dBS0VVUF9NSVNTSU5HCQlCSVQoMikKLQogc3RydWN0IG1tY19jYXJkOwogCi1zdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgewotCXU4IGZsYWdzOwotfTsKLQogc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgewogCS8qIGJhY2stbGluayB0byBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0xMDYsOSArODIsNiBAQAogCQl1bnNpZ25lZCB2Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXA6MTsKIAogCQkvKiB3ZSBjYW4gcHV0IHRoZSBmZWF0dXJlcyBhYm92ZSBpbnRvIHRoaXMgdmFyaWFibGUgKi8KLSNkZWZpbmUgSFNNTUNfSEFTX1BCSUFTCQkoMSA8PCAwKQotI2RlZmluZSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVAkoMSA8PCAxKQotI2RlZmluZSBIU01NQ19IQVNfSFNQRV9TVVBQT1JUCSgxIDw8IDIpCiAjZGVmaW5lIE1NQ19PTUFQN1hYCQkoMSA8PCAzKQogI2RlZmluZSBNTUNfT01BUDE1WFgJCSgxIDw8IDQpCiAjZGVmaW5lIE1NQ19PTUFQMTZYWAkJKDEgPDwgNSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9weGFfc2RoY2kuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9weGFfc2RoY2kuaAppbmRleCAyN2QzMTU2Li45ZTIwYzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvcHhhX3NkaGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3B4YV9zZGhjaS5oCkBAIC01NSw5ICs1NSw0IEBACiAJdW5zaWduZWQgaW50CXF1aXJrczI7CiAJdW5zaWduZWQgaW50CXBtX2NhcHM7CiB9OwotCi1zdHJ1Y3Qgc2RoY2lfcHhhIHsKLQl1OAljbGtfZW5hYmxlOwotCXU4CXBvd2VyX21vZGU7Ci19OwogI2VuZGlmIC8qIF9QWEFfU0RIQ0lfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9zZXJpYWwtb21hcC5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NlcmlhbC1vbWFwLmgKaW5kZXggYzg2MGMxYi4uZDA5Mjc1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NlcmlhbC1vbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NlcmlhbC1vbWFwLmgKQEAgLTM4LDkgKzM4LDYgQEAKIAl1bnNpZ25lZCBpbnQJCWRtYV9yeF90aW1lb3V0OwogCXVuc2lnbmVkIGludAkJYXV0b3N1c3BlbmRfdGltZW91dDsKIAl1bnNpZ25lZCBpbnQJCWRtYV9yeF9wb2xsX3JhdGU7Ci0JaW50CQkJRFRSX2dwaW87Ci0JaW50CQkJRFRSX2ludmVydGVkOwotCWludAkJCURUUl9wcmVzZW50OwogCiAJaW50ICgqZ2V0X2NvbnRleHRfbG9zc19jb3VudCkoc3RydWN0IGRldmljZSAqKTsKIAl2b2lkICgqZW5hYmxlX3dha2V1cCkoc3RydWN0IGRldmljZSAqLCBib29sKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCA1M2ZmMWE3Li5lZDRmNTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC01Nyw3ICs1Nyw3IEBACiAJSU5WQUxJRF9SQ1VfRkxBVk9SCiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpCisjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1BSRUVNUFRfUkNVKQogdm9pZCByY3V0b3J0dXJlX2dldF9ncF9kYXRhKGVudW0gcmN1dG9ydHVyZV90eXBlIHRlc3RfdHlwZSwgaW50ICpmbGFncywKIAkJCSAgICB1bnNpZ25lZCBsb25nICpncG51bSwgdW5zaWduZWQgbG9uZyAqY29tcGxldGVkKTsKIHZvaWQgcmN1dG9ydHVyZV9yZWNvcmRfdGVzdF90cmFuc2l0aW9uKHZvaWQpOwpAQCAtMjYwLDcgKzI2MCw3IEBACiB2b2lkIHJjdV9pbml0KHZvaWQpOwogdm9pZCByY3Vfc2NoZWRfcXModm9pZCk7CiB2b2lkIHJjdV9iaF9xcyh2b2lkKTsKLXZvaWQgcmN1X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1LCBpbnQgdXNlcik7Cit2b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IHVzZXIpOwogc3RydWN0IG5vdGlmaWVyX2Jsb2NrOwogdm9pZCByY3VfaWRsZV9lbnRlcih2b2lkKTsKIHZvaWQgcmN1X2lkbGVfZXhpdCh2b2lkKTsKQEAgLTM0OCw4ICszNDgsOCBAQAogICovCiAjZGVmaW5lIGNvbmRfcmVzY2hlZF9yY3VfcXMoKSBcCiBkbyB7IFwKLQlyY3Vfbm90ZV92b2x1bnRhcnlfY29udGV4dF9zd2l0Y2goY3VycmVudCk7IFwKLQljb25kX3Jlc2NoZWQoKTsgXAorCWlmICghY29uZF9yZXNjaGVkKCkpIFwKKwkJcmN1X25vdGVfdm9sdW50YXJ5X2NvbnRleHRfc3dpdGNoKGN1cnJlbnQpOyBcCiB9IHdoaWxlICgwKQogCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTE9DS19BTExPQykgfHwgZGVmaW5lZChDT05GSUdfUkNVX1RSQUNFKSB8fCBkZWZpbmVkKENPTkZJR19TTVApCkBAIC0zNjUsNyArMzY1LDcgQEAKIAkJCSAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpOwogdm9pZCB3YWl0X3JjdV9ncChjYWxsX3JjdV9mdW5jX3QgY3JmKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKQorI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19QUkVFTVBUX1JDVSkKICNpbmNsdWRlIDxsaW51eC9yY3V0cmVlLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19USU5ZX1JDVSkKICNpbmNsdWRlIDxsaW51eC9yY3V0aW55Lmg+CkBAIC04NjcsNyArODY3LDcgQEAKICAqCiAgKiBJbiBub24tcHJlZW1wdGlibGUgUkNVIGltcGxlbWVudGF0aW9ucyAoVFJFRV9SQ1UgYW5kIFRJTllfUkNVKSwKICAqIGl0IGlzIGlsbGVnYWwgdG8gYmxvY2sgd2hpbGUgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgotICogSW4gcHJlZW1wdGlibGUgUkNVIGltcGxlbWVudGF0aW9ucyAoVFJFRV9QUkVFTVBUX1JDVSkgaW4gQ09ORklHX1BSRUVNUFQKKyAqIEluIHByZWVtcHRpYmxlIFJDVSBpbXBsZW1lbnRhdGlvbnMgKFBSRUVNUFRfUkNVKSBpbiBDT05GSUdfUFJFRU1QVAogICoga2VybmVsIGJ1aWxkcywgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBtYXkgYmUgcHJlZW1wdGVkLAogICogYnV0IGV4cGxpY2l0IGJsb2NraW5nIGlzIGlsbGVnYWwuICBGaW5hbGx5LCBpbiBwcmVlbXB0aWJsZSBSQ1UKICAqIGltcGxlbWVudGF0aW9ucyBpbiByZWFsLXRpbWUgKHdpdGggLXJ0IHBhdGNoc2V0KSBrZXJuZWwgYnVpbGRzLCBSQ1UKQEAgLTkwMiw3ICs5MDIsOSBAQAogICogVW5mb3J0dW5hdGVseSwgdGhpcyBmdW5jdGlvbiBhY3F1aXJlcyB0aGUgc2NoZWR1bGVyJ3MgcnVucXVldWUgYW5kCiAgKiBwcmlvcml0eS1pbmhlcml0YW5jZSBzcGlubG9ja3MuICBUaGlzIG1lYW5zIHRoYXQgZGVhZGxvY2sgY291bGQgcmVzdWx0CiAgKiBpZiB0aGUgY2FsbGVyIG9mIHJjdV9yZWFkX3VubG9jaygpIGFscmVhZHkgaG9sZHMgb25lIG9mIHRoZXNlIGxvY2tzIG9yCi0gKiBhbnkgbG9jayB0aGF0IGlzIGV2ZXIgYWNxdWlyZWQgd2hpbGUgaG9sZGluZyB0aGVtLgorICogYW55IGxvY2sgdGhhdCBpcyBldmVyIGFjcXVpcmVkIHdoaWxlIGhvbGRpbmcgdGhlbTsgb3IgYW55IGxvY2sgd2hpY2gKKyAqIGNhbiBiZSB0YWtlbiBmcm9tIGludGVycnVwdCBjb250ZXh0IGJlY2F1c2UgcmN1X2Jvb3N0KCktPnJ0X211dGV4X2xvY2soKQorICogZG9lcyBub3QgZGlzYWJsZSBpcnFzIHdoaWxlIHRha2luZyAtPndhaXRfbG9jay4KICAqCiAgKiBUaGF0IHNhaWQsIFJDVSByZWFkZXJzIGFyZSBuZXZlciBwcmlvcml0eSBib29zdGVkIHVubGVzcyB0aGV5IHdlcmUKICAqIHByZWVtcHRlZC4gIFRoZXJlZm9yZSwgb25lIHdheSB0byBhdm9pZCBkZWFkbG9jayBpcyB0byBtYWtlIHN1cmUKQEAgLTEwNjIsNiArMTA2NCw3IEBACiAgKi8KICNkZWZpbmUgUkNVX0lOSVRfUE9JTlRFUihwLCB2KSBcCiAJZG8geyBcCisJCXJjdV9kZXJlZmVyZW5jZV9zcGFyc2UocCwgX19yY3UpOyBcCiAJCXAgPSBSQ1VfSU5JVElBTElaRVIodik7IFwKIAl9IHdoaWxlICgwKQogCkBAIC0xMTE4LDcgKzExMjEsNyBAQAogCV9fa2ZyZWVfcmN1KCYoKHB0ciktPnJjdV9oZWFkKSwgb2Zmc2V0b2YodHlwZW9mKCoocHRyKSksIHJjdV9oZWFkKSkKIAogI2lmIGRlZmluZWQoQ09ORklHX1RJTllfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMKQotc3RhdGljIGlubGluZSBpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1LCB1bnNpZ25lZCBsb25nICpkZWx0YV9qaWZmaWVzKQorc3RhdGljIGlubGluZSBpbnQgcmN1X25lZWRzX2NwdSh1bnNpZ25lZCBsb25nICpkZWx0YV9qaWZmaWVzKQogewogCSpkZWx0YV9qaWZmaWVzID0gVUxPTkdfTUFYOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAppbmRleCAzOGNjNWIxLi4wZTUzNjYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaApAQCAtNzgsNyArNzgsNyBAQAogCWNhbGxfcmN1KGhlYWQsIGZ1bmMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmN1X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaCh2b2lkKQogewogCXJjdV9zY2hlZF9xcygpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAppbmRleCAzZTJmNWQ0Li41Mjk1Mzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtMzAsOSArMzAsOSBAQAogI2lmbmRlZiBfX0xJTlVYX1JDVVRSRUVfSAogI2RlZmluZSBfX0xJTlVYX1JDVVRSRUVfSAogCi12b2lkIHJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpOwordm9pZCByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaCh2b2lkKTsKICNpZm5kZWYgQ09ORklHX1JDVV9OT0NCX0NQVV9BTEwKLWludCByY3VfbmVlZHNfY3B1KGludCBjcHUsIHVuc2lnbmVkIGxvbmcgKmRlbHRhX2ppZmZpZXMpOworaW50IHJjdV9uZWVkc19jcHUodW5zaWduZWQgbG9uZyAqZGVsdGFfamlmZmllcyk7CiAjZW5kaWYgLyogI2lmbmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVX0FMTCAqLwogdm9pZCByY3VfY3B1X3N0YWxsX3Jlc2V0KHZvaWQpOwogCkBAIC00Myw3ICs0Myw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfdmlydF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpCiB7Ci0JcmN1X25vdGVfY29udGV4dF9zd2l0Y2goY3B1KTsKKwlyY3Vfbm90ZV9jb250ZXh0X3N3aXRjaCgpOwogfQogCiB2b2lkIHN5bmNocm9uaXplX3JjdV9iaCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVnbWFwLmggYi9pbmNsdWRlL2xpbnV4L3JlZ21hcC5oCmluZGV4IGM1ZWQ4M2YuLjQ0MTliOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVnbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWdtYXAuaApAQCAtMjcsNiArMjcsNyBAQAogc3RydWN0IHJlZ21hcDsKIHN0cnVjdCByZWdtYXBfcmFuZ2VfY2ZnOwogc3RydWN0IHJlZ21hcF9maWVsZDsKK3N0cnVjdCBzbmRfYWM5NzsKIAogLyogQW4gZW51bSBvZiBhbGwgdGhlIHN1cHBvcnRlZCBjYWNoZSB0eXBlcyAqLwogZW51bSByZWdjYWNoZV90eXBlIHsKQEAgLTM0MCw2ICszNDEsOCBAQAogc3RydWN0IHJlZ21hcCAqcmVnbWFwX2luaXRfbW1pb19jbGsoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjbGtfaWQsCiAJCQkJICAgIHZvaWQgX19pb21lbSAqcmVncywKIAkJCQkgICAgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZyk7CitzdHJ1Y3QgcmVnbWFwICpyZWdtYXBfaW5pdF9hYzk3KHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJCQljb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqY29uZmlnKTsKIAogc3RydWN0IHJlZ21hcCAqZGV2bV9yZWdtYXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJY29uc3Qgc3RydWN0IHJlZ21hcF9idXMgKmJ1cywKQEAgLTM1Niw2ICszNTksMTAgQEAKIHN0cnVjdCByZWdtYXAgKmRldm1fcmVnbWFwX2luaXRfbW1pb19jbGsoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjbGtfaWQsCiAJCQkJCSB2b2lkIF9faW9tZW0gKnJlZ3MsCiAJCQkJCSBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqY29uZmlnKTsKK3N0cnVjdCByZWdtYXAgKmRldm1fcmVnbWFwX2luaXRfYWM5NyhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqY29uZmlnKTsKKworYm9vbCByZWdtYXBfYWM5N19kZWZhdWx0X3ZvbGF0aWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZyk7CiAKIC8qKgogICogcmVnbWFwX2luaXRfbW1pbygpOiBJbml0aWFsaXNlIHJlZ2lzdGVyIG1hcApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKaW5kZXggZjU0MGIxNC4uZDE3ZTFmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCkBAIC0xMDEsNiArMTAxLDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgIERhdGEgcGFzc2VkIGlzICJzdHJ1Y3QgcHJlX3ZvbHRhZ2VfY2hhbmdlX2RhdGEiCiAgKiBBQk9SVF9WT0xUQUdFX0NIQU5HRSBSZWd1bGF0b3Igdm9sdGFnZSBjaGFuZ2UgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4KICAqICAgICAgICAgICAgICAgICAgICAgIERhdGEgcGFzc2VkIGlzIG9sZCB2b2x0YWdlIGNhc3QgdG8gKHZvaWQgKikuCisgKiBQUkVfRElTQUJMRSAgICBSZWd1bGF0b3IgaXMgYWJvdXQgdG8gYmUgZGlzYWJsZWQKKyAqIEFCT1JUX0RJU0FCTEUgIFJlZ3VsYXRvciBkaXNhYmxlIGZhaWxlZCBmb3Igc29tZSByZWFzb24KICAqCiAgKiBOT1RFOiBUaGVzZSBldmVudHMgY2FuIGJlIE9SJ2VkIHRvZ2V0aGVyIHdoZW4gcGFzc2VkIGludG8gaGFuZGxlci4KICAqLwpAQCAtMTE1LDYgKzExNyw4IEBACiAjZGVmaW5lIFJFR1VMQVRPUl9FVkVOVF9ESVNBQkxFIAkJMHg4MAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfUFJFX1ZPTFRBR0VfQ0hBTkdFCTB4MTAwCiAjZGVmaW5lIFJFR1VMQVRPUl9FVkVOVF9BQk9SVF9WT0xUQUdFX0NIQU5HRQkweDIwMAorI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfUFJFX0RJU0FCTEUJCTB4NDAwCisjZGVmaW5lIFJFR1VMQVRPUl9FVkVOVF9BQk9SVF9ESVNBQkxFCQkweDgwMAogCiAvKioKICAqIHN0cnVjdCBwcmVfdm9sdGFnZV9jaGFuZ2VfZGF0YSAtIERhdGEgc2VudCB3aXRoIFBSRV9WT0xUQUdFX0NIQU5HRSBldmVudApAQCAtMjg0LDcgKzI4OCw3IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWd1bGF0b3IgKl9fbXVzdF9jaGVjawogcmVndWxhdG9yX2dldF9leGNsdXNpdmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKIHsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVndWxhdG9yICpfX211c3RfY2hlY2sKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKaW5kZXggZmMwZWUwYy4uNWYxZTljYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKQEAgLTI0Myw2ICsyNDMsOCBAQAogICoKICAqIEBlbmFibGVfdGltZTogVGltZSB0YWtlbiBmb3IgaW5pdGlhbCBlbmFibGUgb2YgcmVndWxhdG9yIChpbiB1UykuCiAgKiBAb2ZmX29uX2RlbGF5OiBndWFyZCB0aW1lIChpbiB1UyksIGJlZm9yZSByZS1lbmFibGluZyBhIHJlZ3VsYXRvcgorICoKKyAqIEBvZl9tYXBfbW9kZTogTWFwcyBhIGhhcmR3YXJlIG1vZGUgZGVmaW5lZCBpbiBhIERldmljZVRyZWUgdG8gYSBzdGFuZGFyZCBtb2RlCiAgKi8KIHN0cnVjdCByZWd1bGF0b3JfZGVzYyB7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTI4NSw2ICsyODcsOCBAQAogCXVuc2lnbmVkIGludCBlbmFibGVfdGltZTsKIAogCXVuc2lnbmVkIGludCBvZmZfb25fZGVsYXk7CisKKwl1bnNpZ25lZCBpbnQgKCpvZl9tYXBfbW9kZSkodW5zaWduZWQgaW50IG1vZGUpOwogfTsKIAogLyoqCkBAIC0zMDEsNiArMzA1LDkgQEAKICAqICAgICAgICAgICBOVUxMKS4KICAqIEByZWdtYXA6IHJlZ21hcCB0byB1c2UgZm9yIGNvcmUgcmVnbWFwIGhlbHBlcnMgaWYgZGV2X2dldF9yZWd1bGF0b3IoKSBpcwogICogICAgICAgICAgaW5zdWZmaWNpZW50LgorICogQGVuYV9ncGlvX2luaXRpYWxpemVkOiBHUElPIGNvbnRyb2xsaW5nIHJlZ3VsYXRvciBlbmFibGUgd2FzIHByb3Blcmx5CisgKiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVkLCBtZWFuaW5nIHRoYXQgPj0gMCBpcyBhIHZhbGlkIGdwaW8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciBhbmQgPCAwIGlzIGEgbm9uIGV4aXN0ZW50IGdwaW8uCiAgKiBAZW5hX2dwaW86IEdQSU8gY29udHJvbGxpbmcgcmVndWxhdG9yIGVuYWJsZS4KICAqIEBlbmFfZ3Bpb19pbnZlcnQ6IFNlbnNlIGZvciBHUElPIGVuYWJsZSBjb250cm9sLgogICogQGVuYV9ncGlvX2ZsYWdzOiBGbGFncyB0byB1c2Ugd2hlbiBjYWxsaW5nIGdwaW9fcmVxdWVzdF9vbmUoKQpAQCAtMzEyLDYgKzMxOSw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlOwogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKIAorCWJvb2wgZW5hX2dwaW9faW5pdGlhbGl6ZWQ7CiAJaW50IGVuYV9ncGlvOwogCXVuc2lnbmVkIGludCBlbmFfZ3Bpb19pbnZlcnQ6MTsKIAl1bnNpZ25lZCBpbnQgZW5hX2dwaW9fZmxhZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oCmluZGV4IGY5MjE3OTYuLjc2Mzk1M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oCkBAIC02LDI0ICs2LDI5IEBACiAjaWZuZGVmIF9fTElOVVhfT0ZfUkVHX0gKICNkZWZpbmUgX19MSU5VWF9PRl9SRUdfSAogCitzdHJ1Y3QgcmVndWxhdG9yX2Rlc2M7CisKIHN0cnVjdCBvZl9yZWd1bGF0b3JfbWF0Y2ggewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJdm9pZCAqZHJpdmVyX2RhdGE7CiAJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7CisJY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjOwogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX09GKQogZXh0ZXJuIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCiAJKm9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKKwkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpOwogZXh0ZXJuIGludCBvZl9yZWd1bGF0b3JfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAJCQkgICAgICBzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoICptYXRjaGVzLAogCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9tYXRjaGVzKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCiAJKm9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJICAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVzZXQtY29udHJvbGxlci5oIGIvaW5jbHVkZS9saW51eC9yZXNldC1jb250cm9sbGVyLmgKaW5kZXggNDFhNDY5NWYuLmNlNmI5NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzZXQtY29udHJvbGxlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVzZXQtY29udHJvbGxlci5oCkBAIC0xMiwxMSArMTIsMTMgQEAKICAqICAgICAgICAgdGhpbmdzIHRvIHJlc2V0IHRoZSBkZXZpY2UKICAqIEBhc3NlcnQ6IG1hbnVhbGx5IGFzc2VydCB0aGUgcmVzZXQgbGluZSwgaWYgc3VwcG9ydGVkCiAgKiBAZGVhc3NlcnQ6IG1hbnVhbGx5IGRlYXNzZXJ0IHRoZSByZXNldCBsaW5lLCBpZiBzdXBwb3J0ZWQKKyAqIEBzdGF0dXM6IHJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSByZXNldCBsaW5lLCBpZiBzdXBwb3J0ZWQKICAqLwogc3RydWN0IHJlc2V0X2NvbnRyb2xfb3BzIHsKIAlpbnQgKCpyZXNldCkoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwgdW5zaWduZWQgbG9uZyBpZCk7CiAJaW50ICgqYXNzZXJ0KShzdHJ1Y3QgcmVzZXRfY29udHJvbGxlcl9kZXYgKnJjZGV2LCB1bnNpZ25lZCBsb25nIGlkKTsKIAlpbnQgKCpkZWFzc2VydCkoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwgdW5zaWduZWQgbG9uZyBpZCk7CisJaW50ICgqc3RhdHVzKShzdHJ1Y3QgcmVzZXRfY29udHJvbGxlcl9kZXYgKnJjZGV2LCB1bnNpZ25lZCBsb25nIGlkKTsKIH07CiAKIHN0cnVjdCBtb2R1bGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jlc2V0LmggYi9pbmNsdWRlL2xpbnV4L3Jlc2V0LmgKaW5kZXggMzQ5ZjE1MC4uZGE1NjAyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZXNldC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVzZXQuaApAQCAtMTAsNiArMTAsNyBAQAogaW50IHJlc2V0X2NvbnRyb2xfcmVzZXQoc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGMpOwogaW50IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKTsKIGludCByZXNldF9jb250cm9sX2RlYXNzZXJ0KHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKTsKK2ludCByZXNldF9jb250cm9sX3N0YXR1cyhzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0Yyk7CiAKIHN0cnVjdCByZXNldF9jb250cm9sICpyZXNldF9jb250cm9sX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKTsKIHZvaWQgcmVzZXRfY29udHJvbF9wdXQoc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGMpOwpAQCAtNTcsNiArNTgsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcmVzZXRfY29udHJvbF9zdGF0dXMoc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGMpCit7CisJV0FSTl9PTigxKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2NvbnRyb2xfcHV0KHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKQogewogCVdBUk5fT04oMSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0Yy5oIGIvaW5jbHVkZS9saW51eC9ydGMuaAppbmRleCBjMmMyODk3Li42ZDZiZTA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRjLmgKQEAgLTE5LDExICsxOSwyOCBAQAogZXh0ZXJuIGludCBydGNfbW9udGhfZGF5cyh1bnNpZ25lZCBpbnQgbW9udGgsIHVuc2lnbmVkIGludCB5ZWFyKTsKIGV4dGVybiBpbnQgcnRjX3llYXJfZGF5cyh1bnNpZ25lZCBpbnQgZGF5LCB1bnNpZ25lZCBpbnQgbW9udGgsIHVuc2lnbmVkIGludCB5ZWFyKTsKIGV4dGVybiBpbnQgcnRjX3ZhbGlkX3RtKHN0cnVjdCBydGNfdGltZSAqdG0pOwotZXh0ZXJuIGludCBydGNfdG1fdG9fdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtLCB1bnNpZ25lZCBsb25nICp0aW1lKTsKLWV4dGVybiB2b2lkIHJ0Y190aW1lX3RvX3RtKHVuc2lnbmVkIGxvbmcgdGltZSwgc3RydWN0IHJ0Y190aW1lICp0bSk7CitleHRlcm4gdGltZTY0X3QgcnRjX3RtX3RvX3RpbWU2NChzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKK2V4dGVybiB2b2lkIHJ0Y190aW1lNjRfdG9fdG0odGltZTY0X3QgdGltZSwgc3RydWN0IHJ0Y190aW1lICp0bSk7CiBrdGltZV90IHJ0Y190bV90b19rdGltZShzdHJ1Y3QgcnRjX3RpbWUgdG0pOwogc3RydWN0IHJ0Y190aW1lIHJ0Y19rdGltZV90b190bShrdGltZV90IGt0KTsKIAorLyoqCisgKiBEZXByZWNhdGVkLiBVc2UgcnRjX3RpbWU2NF90b190bSgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcnRjX3RpbWVfdG9fdG0odW5zaWduZWQgbG9uZyB0aW1lLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXJ0Y190aW1lNjRfdG9fdG0odGltZSwgdG0pOworfQorCisvKioKKyAqIERlcHJlY2F0ZWQuIFVzZSBydGNfdG1fdG9fdGltZTY0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJ0Y190bV90b190aW1lKHN0cnVjdCBydGNfdGltZSAqdG0sIHVuc2lnbmVkIGxvbmcgKnRpbWUpCit7CisJKnRpbWUgPSBydGNfdG1fdG9fdGltZTY0KHRtKTsKKworCXJldHVybiAwOworfQogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA1ZTM0NGJiLi41NWY1ZWU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0yNDMsNiArMjQzLDQzIEBACiAJCQkJKCh0YXNrLT5zdGF0ZSAmIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSAhPSAwICYmIFwKIAkJCQkgKHRhc2stPmZsYWdzICYgUEZfRlJPWkVOKSA9PSAwKQogCisjaWZkZWYgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUAorCisjZGVmaW5lIF9fc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkJCQlcCisJZG8gewkJCQkJCQlcCisJCSh0c2spLT50YXNrX3N0YXRlX2NoYW5nZSA9IF9USElTX0lQXzsJCVwKKwkJKHRzayktPnN0YXRlID0gKHN0YXRlX3ZhbHVlKTsJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkJCQlcCisJZG8gewkJCQkJCQlcCisJCSh0c2spLT50YXNrX3N0YXRlX2NoYW5nZSA9IF9USElTX0lQXzsJCVwKKwkJc2V0X21iKCh0c2spLT5zdGF0ZSwgKHN0YXRlX3ZhbHVlKSk7CQlcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIHNldF9jdXJyZW50X3N0YXRlKCkgaW5jbHVkZXMgYSBiYXJyaWVyIHNvIHRoYXQgdGhlIHdyaXRlIG9mIGN1cnJlbnQtPnN0YXRlCisgKiBpcyBjb3JyZWN0bHkgc2VyaWFsaXNlZCB3cnQgdGhlIGNhbGxlcidzIHN1YnNlcXVlbnQgdGVzdCBvZiB3aGV0aGVyIHRvCisgKiBhY3R1YWxseSBzbGVlcDoKKyAqCisgKglzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisgKglpZiAoZG9faV9uZWVkX3RvX3NsZWVwKCkpCisgKgkJc2NoZWR1bGUoKTsKKyAqCisgKiBJZiB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgc3VjaCBzZXJpYWxpc2F0aW9uIHRoZW4gdXNlIF9fc2V0X2N1cnJlbnRfc3RhdGUoKQorICovCisjZGVmaW5lIF9fc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGVfdmFsdWUpCQkJXAorCWRvIHsJCQkJCQkJXAorCQljdXJyZW50LT50YXNrX3N0YXRlX2NoYW5nZSA9IF9USElTX0lQXzsJCVwKKwkJY3VycmVudC0+c3RhdGUgPSAoc3RhdGVfdmFsdWUpOwkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQljdXJyZW50LT50YXNrX3N0YXRlX2NoYW5nZSA9IF9USElTX0lQXzsJCVwKKwkJc2V0X21iKGN1cnJlbnQtPnN0YXRlLCAoc3RhdGVfdmFsdWUpKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZWxzZQorCiAjZGVmaW5lIF9fc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkJCVwKIAlkbyB7ICh0c2spLT5zdGF0ZSA9IChzdGF0ZV92YWx1ZSk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHNldF90YXNrX3N0YXRlKHRzaywgc3RhdGVfdmFsdWUpCQlcCkBAIC0yNTksMTEgKzI5NiwxMyBAQAogICoKICAqIElmIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCBzdWNoIHNlcmlhbGlzYXRpb24gdGhlbiB1c2UgX19zZXRfY3VycmVudF9zdGF0ZSgpCiAgKi8KLSNkZWZpbmUgX19zZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkJCQlcCisjZGVmaW5lIF9fc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGVfdmFsdWUpCQlcCiAJZG8geyBjdXJyZW50LT5zdGF0ZSA9IChzdGF0ZV92YWx1ZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNldF9jdXJyZW50X3N0YXRlKHN0YXRlX3ZhbHVlKQkJXAorI2RlZmluZSBzZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkJCQlcCiAJc2V0X21iKGN1cnJlbnQtPnN0YXRlLCAoc3RhdGVfdmFsdWUpKQogCisjZW5kaWYKKwogLyogVGFzayBjb21tYW5kIG5hbWUgbGVuZ3RoICovCiAjZGVmaW5lIFRBU0tfQ09NTV9MRU4gMTYKIApAQCAtMTI3OCw5ICsxMzE3LDkgQEAKIAl1bmlvbiByY3Vfc3BlY2lhbCByY3VfcmVhZF91bmxvY2tfc3BlY2lhbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJjdV9ub2RlX2VudHJ5OwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUFJFRU1QVF9SQ1UgKi8KLSNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVQogCXN0cnVjdCByY3Vfbm9kZSAqcmN1X2Jsb2NrZWRfbm9kZTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVICovCiAjaWZkZWYgQ09ORklHX1RBU0tTX1JDVQogCXVuc2lnbmVkIGxvbmcgcmN1X3Rhc2tzX252Y3N3OwogCWJvb2wgcmN1X3Rhc2tzX2hvbGRvdXQ7CkBAIC0xNTU4LDI4ICsxNTk3LDIzIEBACiAJc3RydWN0IG51bWFfZ3JvdXAgKm51bWFfZ3JvdXA7CiAKIAkvKgotCSAqIEV4cG9uZW50aWFsIGRlY2F5aW5nIGF2ZXJhZ2Ugb2YgZmF1bHRzIG9uIGEgcGVyLW5vZGUgYmFzaXMuCi0JICogU2NoZWR1bGluZyBwbGFjZW1lbnQgZGVjaXNpb25zIGFyZSBtYWRlIGJhc2VkIG9uIHRoZSB0aGVzZSBjb3VudHMuCi0JICogVGhlIHZhbHVlcyByZW1haW4gc3RhdGljIGZvciB0aGUgZHVyYXRpb24gb2YgYSBQVEUgc2NhbgorCSAqIG51bWFfZmF1bHRzIGlzIGFuIGFycmF5IHNwbGl0IGludG8gZm91ciByZWdpb25zOgorCSAqIGZhdWx0c19tZW1vcnksIGZhdWx0c19jcHUsIGZhdWx0c19tZW1vcnlfYnVmZmVyLCBmYXVsdHNfY3B1X2J1ZmZlcgorCSAqIGluIHRoaXMgcHJlY2lzZSBvcmRlci4KKwkgKgorCSAqIGZhdWx0c19tZW1vcnk6IEV4cG9uZW50aWFsIGRlY2F5aW5nIGF2ZXJhZ2Ugb2YgZmF1bHRzIG9uIGEgcGVyLW5vZGUKKwkgKiBiYXNpcy4gU2NoZWR1bGluZyBwbGFjZW1lbnQgZGVjaXNpb25zIGFyZSBtYWRlIGJhc2VkIG9uIHRoZXNlCisJICogY291bnRzLiBUaGUgdmFsdWVzIHJlbWFpbiBzdGF0aWMgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIFBURSBzY2FuLgorCSAqIGZhdWx0c19jcHU6IFRyYWNrIHRoZSBub2RlcyB0aGUgcHJvY2VzcyB3YXMgcnVubmluZyBvbiB3aGVuIGEgTlVNQQorCSAqIGhpbnRpbmcgZmF1bHQgd2FzIGluY3VycmVkLgorCSAqIGZhdWx0c19tZW1vcnlfYnVmZmVyIGFuZCBmYXVsdHNfY3B1X2J1ZmZlcjogUmVjb3JkIGZhdWx0cyBwZXIgbm9kZQorCSAqIGR1cmluZyB0aGUgY3VycmVudCBzY2FuIHdpbmRvdy4gV2hlbiB0aGUgc2NhbiBjb21wbGV0ZXMsIHRoZSBjb3VudHMKKwkgKiBpbiBmYXVsdHNfbWVtb3J5IGFuZCBmYXVsdHNfY3B1IGRlY2F5IGFuZCB0aGVzZSB2YWx1ZXMgYXJlIGNvcGllZC4KIAkgKi8KLQl1bnNpZ25lZCBsb25nICpudW1hX2ZhdWx0c19tZW1vcnk7CisJdW5zaWduZWQgbG9uZyAqbnVtYV9mYXVsdHM7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9udW1hX2ZhdWx0czsKIAogCS8qCi0JICogbnVtYV9mYXVsdHNfYnVmZmVyIHJlY29yZHMgZmF1bHRzIHBlciBub2RlIGR1cmluZyB0aGUgY3VycmVudAotCSAqIHNjYW4gd2luZG93LiBXaGVuIHRoZSBzY2FuIGNvbXBsZXRlcywgdGhlIGNvdW50cyBpbgotCSAqIG51bWFfZmF1bHRzX21lbW9yeSBkZWNheSBhbmQgdGhlc2UgdmFsdWVzIGFyZSBjb3BpZWQuCi0JICovCi0JdW5zaWduZWQgbG9uZyAqbnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeTsKLQotCS8qCi0JICogVHJhY2sgdGhlIG5vZGVzIHRoZSBwcm9jZXNzIHdhcyBydW5uaW5nIG9uIHdoZW4gYSBOVU1BIGhpbnRpbmcKLQkgKiBmYXVsdCB3YXMgaW5jdXJyZWQuCi0JICovCi0JdW5zaWduZWQgbG9uZyAqbnVtYV9mYXVsdHNfY3B1OwotCXVuc2lnbmVkIGxvbmcgKm51bWFfZmF1bHRzX2J1ZmZlcl9jcHU7Ci0KLQkvKgogCSAqIG51bWFfZmF1bHRzX2xvY2FsaXR5IHRyYWNrcyBpZiBmYXVsdHMgcmVjb3JkZWQgZHVyaW5nIHRoZSBsYXN0CiAJICogc2NhbiB3aW5kb3cgd2VyZSByZW1vdGUvbG9jYWwuIFRoZSB0YXNrIHNjYW4gcGVyaW9kIGlzIGFkYXB0ZWQKIAkgKiBiYXNlZCBvbiB0aGUgbG9jYWxpdHkgb2YgdGhlIGZhdWx0cyB3aXRoIGRpZmZlcmVudCB3ZWlnaHRzCkBAIC0xNjYxLDYgKzE2OTUsOSBAQAogCXVuc2lnbmVkIGludAlzZXF1ZW50aWFsX2lvOwogCXVuc2lnbmVkIGludAlzZXF1ZW50aWFsX2lvX2F2ZzsKICNlbmRpZgorI2lmZGVmIENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVAKKwl1bnNpZ25lZCBsb25nCXRhc2tfc3RhdGVfY2hhbmdlOworI2VuZGlmCiB9OwogCiAvKiBGdXR1cmUtc2FmZSBhY2Nlc3NvciBmb3Igc3RydWN0IHRhc2tfc3RydWN0J3MgY3B1c19hbGxvd2VkLiAqLwpAQCAtMjA1Miw2ICsyMDg5LDEwIEBACiAJdGFzay0+ZmxhZ3MgfD0gb3JpZ19mbGFncyAmIGZsYWdzOwogfQogCitleHRlcm4gaW50IGNwdXNldF9jcHVtYXNrX2Nhbl9zaHJpbmsoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmN1ciwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp0cmlhbCk7CitleHRlcm4gaW50IHRhc2tfY2FuX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCisJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3NfY3B1c19hbGxvd2VkKTsKICNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gdm9pZCBkb19zZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc2spOwpAQCAtMjc2MCw3ICsyODAxLDcgQEAKIGV4dGVybiBpbnQgX2NvbmRfcmVzY2hlZCh2b2lkKTsKIAogI2RlZmluZSBjb25kX3Jlc2NoZWQoKSAoewkJCVwKLQlfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgMCk7CVwKKwlfX19taWdodF9zbGVlcChfX0ZJTEVfXywgX19MSU5FX18sIDApOwlcCiAJX2NvbmRfcmVzY2hlZCgpOwkJCVwKIH0pCiAKQEAgLTI3NzMsMTQgKzI4MTQsMTQgQEAKICNlbmRpZgogCiAjZGVmaW5lIGNvbmRfcmVzY2hlZF9sb2NrKGxvY2spICh7CQkJCVwKLQlfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgUFJFRU1QVF9MT0NLX09GRlNFVCk7CVwKKwlfX19taWdodF9zbGVlcChfX0ZJTEVfXywgX19MSU5FX18sIFBSRUVNUFRfTE9DS19PRkZTRVQpO1wKIAlfX2NvbmRfcmVzY2hlZF9sb2NrKGxvY2spOwkJCQlcCiB9KQogCiBleHRlcm4gaW50IF9fY29uZF9yZXNjaGVkX3NvZnRpcnEodm9pZCk7CiAKICNkZWZpbmUgY29uZF9yZXNjaGVkX3NvZnRpcnEoKSAoewkJCQkJXAotCV9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fLCBTT0ZUSVJRX0RJU0FCTEVfT0ZGU0VUKTsJXAorCV9fX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgU09GVElSUV9ESVNBQkxFX09GRlNFVCk7CVwKIAlfX2NvbmRfcmVzY2hlZF9zb2Z0aXJxKCk7CQkJCQlcCiB9KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKaW5kZXggOGUwMzAwNy4uYTdjYmI1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaApAQCAtNTMsNyArNTMsNyBAQAogCXN0cnVjdCByY3VfaGVhZAkJY3JfcmN1OwogCXN0cnVjdCBycGNfYXV0aCAqCWNyX2F1dGg7CiAJY29uc3Qgc3RydWN0IHJwY19jcmVkb3BzICpjcl9vcHM7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCXVuc2lnbmVkIGxvbmcJCWNyX21hZ2ljOwkvKiAweDBmNGFhNGYwICovCiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nCQljcl9leHBpcmU7CS8qIHdoZW4gdG8gZ2MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaAppbmRleCA3MDczNmI5Li5kODZhY2M2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCkBAIC02Myw2ICs2Myw5IEBACiAJc3RydWN0IHJwY19ydHQJCWNsX3J0dF9kZWZhdWx0OwogCXN0cnVjdCBycGNfdGltZW91dAljbF90aW1lb3V0X2RlZmF1bHQ7CiAJY29uc3Qgc3RydWN0IHJwY19wcm9ncmFtICpjbF9wcm9ncmFtOworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKKwlzdHJ1Y3QgZGVudHJ5CQkqY2xfZGVidWdmczsJLyogZGVidWdmcyBkaXJlY3RvcnkgKi8KKyNlbmRpZgogfTsKIAogLyoKQEAgLTE3Niw1ICsxNzksNiBAQAogY29uc3QgY2hhcgkqcnBjX3BlZXJhZGRyMnN0cihzdHJ1Y3QgcnBjX2NsbnQgKiwgZW51bSBycGNfZGlzcGxheV9mb3JtYXRfdCk7CiBpbnQJCXJwY19sb2NhbGFkZHIoc3RydWN0IHJwY19jbG50ICosIHN0cnVjdCBzb2NrYWRkciAqLCBzaXplX3QpOwogCitjb25zdCBjaGFyICpycGNfcHJvY19uYW1lKGNvbnN0IHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfQ0xOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvZGVidWcuaAppbmRleCA5Mzg1YmQ3Li5jNTdkOGVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKQEAgLTEwLDIyICsxMCwxMCBAQAogCiAjaW5jbHVkZSA8dWFwaS9saW51eC9zdW5ycGMvZGVidWcuaD4KIAotCi0vKgotICogRW5hYmxlIFJQQyBkZWJ1Z2dpbmcvcHJvZmlsaW5nLgotICovCi0jaWZkZWYgQ09ORklHX1NVTlJQQ19ERUJVRwotI2RlZmluZSAgUlBDX0RFQlVHCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLSNkZWZpbmUgUlBDX1RSQUNFUE9JTlRTCi0jZW5kaWYKLS8qICNkZWZpbmUgIFJQQ19QUk9GSUxFICovCi0KIC8qCiAgKiBEZWJ1Z2dpbmcgbWFjcm9zIGV0YwogICovCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogZXh0ZXJuIHVuc2lnbmVkIGludAkJcnBjX2RlYnVnOwogZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzX2RlYnVnOwogZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzZF9kZWJ1ZzsKQEAgLTM2LDcgKzI0LDcgQEAKICNkZWZpbmUgZHByaW50a19yY3UoYXJncy4uLikJZGZwcmludGtfcmN1KEZBQ0lMSVRZLCAjIyBhcmdzKQogCiAjdW5kZWYgaWZkZWJ1ZwotI2lmZGVmIFJQQ19ERUJVRwkJCQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIGlmZGVidWcoZmFjKQkJaWYgKHVubGlrZWx5KHJwY19kZWJ1ZyAmIFJQQ0RCR18jI2ZhYykpCiAKICMgZGVmaW5lIGRmcHJpbnRrKGZhYywgYXJncy4uLikJXApAQCAtNjUsOSArNTMsNTUgQEAKIC8qCiAgKiBTeXNjdGwgaW50ZXJmYWNlIGZvciBSUEMgZGVidWdnaW5nCiAgKi8KLSNpZmRlZiBSUENfREVCVUcKKworc3RydWN0IHJwY19jbG50Oworc3RydWN0IHJwY194cHJ0OworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogdm9pZAkJcnBjX3JlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKIHZvaWQJCXJwY191bnJlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKK2ludAkJc3VucnBjX2RlYnVnZnNfaW5pdCh2b2lkKTsKK3ZvaWQJCXN1bnJwY19kZWJ1Z2ZzX2V4aXQodm9pZCk7CitpbnQJCXJwY19jbG50X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHJwY19jbG50ICopOwordm9pZAkJcnBjX2NsbnRfZGVidWdmc191bnJlZ2lzdGVyKHN0cnVjdCBycGNfY2xudCAqKTsKK2ludAkJcnBjX3hwcnRfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcnBjX3hwcnQgKik7Cit2b2lkCQlycGNfeHBydF9kZWJ1Z2ZzX3VucmVnaXN0ZXIoc3RydWN0IHJwY194cHJ0ICopOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50CitzdW5ycGNfZGVidWdmc19pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc3VucnBjX2RlYnVnZnNfZXhpdCh2b2lkKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JwY19jbG50X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHJwY19jbG50ICpjbG50KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3JwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludAorcnBjX3hwcnRfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcnBjX3hwcnRfZGVidWdmc191bnJlZ2lzdGVyKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3sKKwlyZXR1cm47Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaAppbmRleCAxNTY1YmJlLi5lZWNiNWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tZXRyaWNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvbWV0cmljcy5oCkBAIC0yNywxMCArMjcsMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjZGVmaW5lIFJQQ19JT1NUQVRTX1ZFUlMJIjEuMCIKIAogc3RydWN0IHJwY19pb3N0YXRzIHsKKwlzcGlubG9ja190CQlvbV9sb2NrOworCiAJLyoKIAkgKiBUaGVzZSBjb3VudGVycyBnaXZlIGFuIGlkZWEgYWJvdXQgaG93IG1hbnkgcmVxdWVzdAogCSAqIHRyYW5zbWlzc2lvbnMgYXJlIHJlcXVpcmVkLCBvbiBhdmVyYWdlLCB0byBjb21wbGV0ZSB0aGF0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaAppbmRleCAxYTg5NTk5Li41ZjFlNmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKQEAgLTc5LDcgKzc5LDcgQEAKIAl1bnNpZ25lZCBzaG9ydAkJdGtfZmxhZ3M7CS8qIG1pc2MgZmxhZ3MgKi8KIAl1bnNpZ25lZCBzaG9ydAkJdGtfdGltZW91dHM7CS8qIG1haiB0aW1lb3V0cyAqLwogCi0jaWYgZGVmaW5lZChSUENfREVCVUcpIHx8IGRlZmluZWQoUlBDX1RSQUNFUE9JTlRTKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykgfHwgSVNfRU5BQkxFRChDT05GSUdfVFJBQ0VQT0lOVFMpCiAJdW5zaWduZWQgc2hvcnQJCXRrX3BpZDsJCS8qIGRlYnVnZ2luZyBhaWQgKi8KICNlbmRpZgogCXVuc2lnbmVkIGNoYXIJCXRrX3ByaW9yaXR5IDogMiwvKiBUYXNrIHByaW9yaXR5ICovCkBAIC0xODcsNyArMTg3LDcgQEAKIAl1bnNpZ25lZCBjaGFyCQlucjsJCQkvKiAjIHRhc2tzIHJlbWFpbmluZyBmb3IgY29va2llICovCiAJdW5zaWduZWQgc2hvcnQJCXFsZW47CQkJLyogdG90YWwgIyB0YXNrcyB3YWl0aW5nIGluIHF1ZXVlICovCiAJc3RydWN0IHJwY190aW1lcgl0aW1lcl9saXN0OwotI2lmIGRlZmluZWQoUlBDX0RFQlVHKSB8fCBkZWZpbmVkKFJQQ19UUkFDRVBPSU5UUykKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpIHx8IElTX0VOQUJMRUQoQ09ORklHX1RSQUNFUE9JTlRTKQogCWNvbnN0IGNoYXIgKgkJbmFtZTsKICNlbmRpZgogfTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogaW50CQlycGNpb2RfdXAodm9pZCk7CiB2b2lkCQlycGNpb2RfZG93bih2b2lkKTsKIGludAkJX19ycGNfd2FpdF9mb3JfY29tcGxldGlvbl90YXNrKHN0cnVjdCBycGNfdGFzayAqdGFzaywgd2FpdF9iaXRfYWN0aW9uX2YgKik7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogc3RydWN0IG5ldDsKIHZvaWQJCXJwY19zaG93X3Rhc2tzKHN0cnVjdCBuZXQgKik7CiAjZW5kaWYKQEAgLTI1MSw3ICsyNTEsNyBAQAogCXJldHVybiBfX3JwY193YWl0X2Zvcl9jb21wbGV0aW9uX3Rhc2sodGFzaywgTlVMTCk7CiB9CiAKLSNpZiBkZWZpbmVkKFJQQ19ERUJVRykgfHwgZGVmaW5lZCAoUlBDX1RSQUNFUE9JTlRTKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykgfHwgSVNfRU5BQkxFRChDT05GSUdfVFJBQ0VQT0lOVFMpCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKiBycGNfcW5hbWUoY29uc3Qgc3RydWN0IHJwY193YWl0X3F1ZXVlICpxKQogewogCXJldHVybiAoKHEgJiYgcS0+bmFtZSkgPyBxLT5uYW1lIDogInVua25vd24iKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAppbmRleCBjZjM5MWVlLi45ZDI3YWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCkBAIC0yMzksNiArMjM5LDkgQEAKIAlzdHJ1Y3QgbmV0CQkqeHBydF9uZXQ7CiAJY29uc3QgY2hhcgkJKnNlcnZlcm5hbWU7CiAJY29uc3QgY2hhcgkJKmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9NQVhdOworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmczsJCS8qIGRlYnVnZnMgZGlyZWN0b3J5ICovCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TVU5SUENfQkFDS0NIQU5ORUwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0c29jay5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHNvY2suaAppbmRleCAxYWQzNmNjLi43NTkxNzg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0c29jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRzb2NrLmgKQEAgLTE3LDYgKzE3LDY1IEBACiAjZGVmaW5lIFJQQ19ERUZfTUlOX1JFU1ZQT1JUCSg2NjVVKQogI2RlZmluZSBSUENfREVGX01BWF9SRVNWUE9SVAkoMTAyM1UpCiAKK3N0cnVjdCBzb2NrX3hwcnQgeworCXN0cnVjdCBycGNfeHBydAkJeHBydDsKKworCS8qCisJICogTmV0d29yayBsYXllcgorCSAqLworCXN0cnVjdCBzb2NrZXQgKgkJc29jazsKKwlzdHJ1Y3Qgc29jayAqCQlpbmV0OworCisJLyoKKwkgKiBTdGF0ZSBvZiBUQ1AgcmVwbHkgcmVjZWl2ZQorCSAqLworCV9fYmUzMgkJCXRjcF9mcmFnaGRyLAorCQkJCXRjcF94aWQsCisJCQkJdGNwX2NhbGxkaXI7CisKKwl1MzIJCQl0Y3Bfb2Zmc2V0LAorCQkJCXRjcF9yZWNsZW47CisKKwl1bnNpZ25lZCBsb25nCQl0Y3BfY29waWVkLAorCQkJCXRjcF9mbGFnczsKKworCS8qCisJICogQ29ubmVjdGlvbiBvZiB0cmFuc3BvcnRzCisJICovCisJc3RydWN0IGRlbGF5ZWRfd29yawljb25uZWN0X3dvcmtlcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQlzcmNhZGRyOworCXVuc2lnbmVkIHNob3J0CQlzcmNwb3J0OworCisJLyoKKwkgKiBVRFAgc29ja2V0IGJ1ZmZlciBzaXplIHBhcmFtZXRlcnMKKwkgKi8KKwlzaXplX3QJCQlyY3ZzaXplLAorCQkJCXNuZHNpemU7CisKKwkvKgorCSAqIFNhdmVkIHNvY2tldCBjYWxsYmFjayBhZGRyZXNzZXMKKwkgKi8KKwl2b2lkCQkJKCpvbGRfZGF0YV9yZWFkeSkoc3RydWN0IHNvY2sgKik7CisJdm9pZAkJCSgqb2xkX3N0YXRlX2NoYW5nZSkoc3RydWN0IHNvY2sgKik7CisJdm9pZAkJCSgqb2xkX3dyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqKTsKKwl2b2lkCQkJKCpvbGRfZXJyb3JfcmVwb3J0KShzdHJ1Y3Qgc29jayAqKTsKK307CisKKy8qCisgKiBUQ1AgcmVjZWl2ZSBzdGF0ZSBmbGFncworICovCisjZGVmaW5lIFRDUF9SQ1ZfTEFTVF9GUkFHCSgxVUwgPDwgMCkKKyNkZWZpbmUgVENQX1JDVl9DT1BZX0ZSQUdIRFIJKDFVTCA8PCAxKQorI2RlZmluZSBUQ1BfUkNWX0NPUFlfWElECSgxVUwgPDwgMikKKyNkZWZpbmUgVENQX1JDVl9DT1BZX0RBVEEJKDFVTCA8PCAzKQorI2RlZmluZSBUQ1BfUkNWX1JFQURfQ0FMTERJUgkoMVVMIDw8IDQpCisjZGVmaW5lIFRDUF9SQ1ZfQ09QWV9DQUxMRElSCSgxVUwgPDwgNSkKKworLyoKKyAqIFRDUCBSUEMgZmxhZ3MKKyAqLworI2RlZmluZSBUQ1BfUlBDX1JFUExZCQkoMVVMIDw8IDYpCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfTElOVVhfU1VOUlBDX1hQUlRTT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzbG9nLmggYi9pbmNsdWRlL2xpbnV4L3N5c2xvZy5oCmluZGV4IDk4YTMxNTMuLjRiN2I4NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzbG9nLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNsb2cuaApAQCAtNDksNCArNDksMTMgQEAKIAogaW50IGRvX3N5c2xvZyhpbnQgdHlwZSwgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGNvdW50LCBib29sIGZyb21fZmlsZSk7CiAKKyNpZmRlZiBDT05GSUdfUFJJTlRLCitpbnQgY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKGludCB0eXBlLCBib29sIGZyb21fZmlsZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogX0xJTlVYX1NZU0xPR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IDhjNDJjZjguLjIwM2MyYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC0zOSw5ICszOSwyMCBAQAogCXJldHVybiBsaHMtPnR2X3VzZWMgLSByaHMtPnR2X3VzZWM7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1rdGltZShjb25zdCB1bnNpZ25lZCBpbnQgeWVhciwgY29uc3QgdW5zaWduZWQgaW50IG1vbiwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgZGF5LCBjb25zdCB1bnNpZ25lZCBpbnQgaG91ciwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWluLCBjb25zdCB1bnNpZ25lZCBpbnQgc2VjKTsKK2V4dGVybiB0aW1lNjRfdCBta3RpbWU2NChjb25zdCB1bnNpZ25lZCBpbnQgeWVhciwgY29uc3QgdW5zaWduZWQgaW50IG1vbiwKKwkJCWNvbnN0IHVuc2lnbmVkIGludCBkYXksIGNvbnN0IHVuc2lnbmVkIGludCBob3VyLAorCQkJY29uc3QgdW5zaWduZWQgaW50IG1pbiwgY29uc3QgdW5zaWduZWQgaW50IHNlYyk7CisKKy8qKgorICogRGVwcmVjYXRlZC4gVXNlIG1rdGltZTY0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBta3RpbWUoY29uc3QgdW5zaWduZWQgaW50IHllYXIsCisJCQljb25zdCB1bnNpZ25lZCBpbnQgbW9uLCBjb25zdCB1bnNpZ25lZCBpbnQgZGF5LAorCQkJY29uc3QgdW5zaWduZWQgaW50IGhvdXIsIGNvbnN0IHVuc2lnbmVkIGludCBtaW4sCisJCQljb25zdCB1bnNpZ25lZCBpbnQgc2VjKQoreworCXJldHVybiBta3RpbWU2NCh5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWMpOworfQogCiBleHRlcm4gdm9pZCBzZXRfbm9ybWFsaXplZF90aW1lc3BlYyhzdHJ1Y3QgdGltZXNwZWMgKnRzLCB0aW1lX3Qgc2VjLCBzNjQgbnNlYyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZWtlZXBlcl9pbnRlcm5hbC5oIGIvaW5jbHVkZS9saW51eC90aW1la2VlcGVyX2ludGVybmFsLmgKaW5kZXggOTU2NDBkYy4uMDVhZjlhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1la2VlcGVyX2ludGVybmFsLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1la2VlcGVyX2ludGVybmFsLmgKQEAgLTQyLDYgKzQyLDcgQEAKICAqIHN0cnVjdCB0aW1la2VlcGVyIC0gU3RydWN0dXJlIGhvbGRpbmcgaW50ZXJuYWwgdGltZWtlZXBpbmcgdmFsdWVzLgogICogQHRrcjoJCVRoZSByZWFkb3V0IGJhc2Ugc3RydWN0dXJlCiAgKiBAeHRpbWVfc2VjOgkJQ3VycmVudCBDTE9DS19SRUFMVElNRSB0aW1lIGluIHNlY29uZHMKKyAqIEBrdGltZV9zZWM6CQlDdXJyZW50IENMT0NLX01PTk9UT05JQyB0aW1lIGluIHNlY29uZHMKICAqIEB3YWxsX3RvX21vbm90b25pYzoJQ0xPQ0tfUkVBTFRJTUUgdG8gQ0xPQ0tfTU9OT1RPTklDIG9mZnNldAogICogQG9mZnNfcmVhbDoJCU9mZnNldCBjbG9jayBtb25vdG9uaWMgLT4gY2xvY2sgcmVhbHRpbWUKICAqIEBvZmZzX2Jvb3Q6CQlPZmZzZXQgY2xvY2sgbW9ub3RvbmljIC0+IGNsb2NrIGJvb3R0aW1lCkBAIC03Nyw2ICs3OCw3IEBACiBzdHJ1Y3QgdGltZWtlZXBlciB7CiAJc3RydWN0IHRrX3JlYWRfYmFzZQl0a3I7CiAJdTY0CQkJeHRpbWVfc2VjOworCXVuc2lnbmVkIGxvbmcJCWt0aW1lX3NlYzsKIAlzdHJ1Y3QgdGltZXNwZWM2NAl3YWxsX3RvX21vbm90b25pYzsKIAlrdGltZV90CQkJb2Zmc19yZWFsOwogCWt0aW1lX3QJCQlvZmZzX2Jvb3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVrZWVwaW5nLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVrZWVwaW5nLmgKaW5kZXggMWNhYTZiMC4uOWI2M2QxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1la2VlcGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZWtlZXBpbmcuaApAQCAtMTAsNyArMTAsNyBAQAogICogR2V0IGFuZCBzZXQgdGltZW9mZGF5CiAgKi8KIGV4dGVybiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpOwotZXh0ZXJuIGludCBkb19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0dik7CitleHRlcm4gaW50IGRvX3NldHRpbWVvZmRheTY0KGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7CiBleHRlcm4gaW50IGRvX3N5c19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0diwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKIApAQCAtMjUsMTQgKzI1LDI0IEBACiAvKgogICogdGltZXNwZWMgYmFzZWQgaW50ZXJmYWNlcwogICovCi1zdHJ1Y3QgdGltZXNwZWMgZ2V0X21vbm90b25pY19jb2Fyc2Uodm9pZCk7Ci1leHRlcm4gdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cyk7CitzdHJ1Y3QgdGltZXNwZWM2NCBnZXRfbW9ub3RvbmljX2NvYXJzZTY0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ2V0cmF3bW9ub3RvbmljNjQoc3RydWN0IHRpbWVzcGVjNjQgKnRzKTsKIGV4dGVybiB2b2lkIGt0aW1lX2dldF90czY0KHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7CitleHRlcm4gdGltZTY0X3Qga3RpbWVfZ2V0X3NlY29uZHModm9pZCk7CitleHRlcm4gdGltZTY0X3Qga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcyh2b2lkKTsKIAogZXh0ZXJuIGludCBfX2dldG5zdGltZW9mZGF5NjQoc3RydWN0IHRpbWVzcGVjNjQgKnR2KTsKIGV4dGVybiB2b2lkIGdldG5zdGltZW9mZGF5NjQoc3RydWN0IHRpbWVzcGVjNjQgKnR2KTsKIAogI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKy8qKgorICogRGVwcmVjYXRlZC4gVXNlIGRvX3NldHRpbWVvZmRheTY0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvX3NldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCXJldHVybiBkb19zZXR0aW1lb2ZkYXk2NCh0cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IF9fZ2V0bnN0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0cykKIHsKIAlyZXR1cm4gX19nZXRuc3RpbWVvZmRheTY0KHRzKTsKQEAgLTUzLDcgKzYzLDI3IEBACiAJZ2V0bnN0aW1lb2ZkYXk2NCh0cyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlnZXRyYXdtb25vdG9uaWM2NCh0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbWVzcGVjIGdldF9tb25vdG9uaWNfY29hcnNlKHZvaWQpCit7CisJcmV0dXJuIGdldF9tb25vdG9uaWNfY29hcnNlNjQoKTsKK30KICNlbHNlCisvKioKKyAqIERlcHJlY2F0ZWQuIFVzZSBkb19zZXR0aW1lb2ZkYXk2NCgpLgorICovCitzdGF0aWMgaW5saW5lIGludCBkb19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0OworCisJdHM2NCA9IHRpbWVzcGVjX3RvX3RpbWVzcGVjNjQoKnRzKTsKKwlyZXR1cm4gZG9fc2V0dGltZW9mZGF5NjQoJnRzNjQpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBfX2dldG5zdGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7CiAJc3RydWN0IHRpbWVzcGVjNjQgdHM2NDsKQEAgLTg2LDYgKzExNiwxOSBAQAogCWdldG5zdGltZW9mZGF5NjQoJnRzNjQpOwogCSp0cyA9IHRpbWVzcGVjNjRfdG9fdGltZXNwZWModHM2NCk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0OworCisJZ2V0cmF3bW9ub3RvbmljNjQoJnRzNjQpOworCSp0cyA9IHRpbWVzcGVjNjRfdG9fdGltZXNwZWModHM2NCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbWVzcGVjIGdldF9tb25vdG9uaWNfY29hcnNlKHZvaWQpCit7CisJcmV0dXJuIHRpbWVzcGVjNjRfdG9fdGltZXNwZWMoZ2V0X21vbm90b25pY19jb2Fyc2U2NCgpKTsKK30KICNlbmRpZgogCiBleHRlcm4gdm9pZCBnZXRib290dGltZShzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKQEAgLTE4Miw3ICsyMjUsNyBAQAogLyoKICAqIFJUQyBzcGVjaWZpYwogICovCi1leHRlcm4gdm9pZCB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEpOworZXh0ZXJuIHZvaWQgdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZTY0KHN0cnVjdCB0aW1lc3BlYzY0ICpkZWx0YSk7CiAKIC8qCiAgKiBQUFMgYWNjZXNzb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmV4cHJlc3MuaCBiL2luY2x1ZGUvbGludXgvdmV4cHJlc3MuaAppbmRleCBhNGM5NTQ3Li5mOGU3NmUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZleHByZXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC92ZXhwcmVzcy5oCkBAIC0xNSw4ICsxNSw2IEBACiAjZGVmaW5lIF9MSU5VWF9WRVhQUkVTU19ICiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KIAogI2RlZmluZSBWRVhQUkVTU19TSVRFX01CCQkwCkBAIC0yNCwxMyArMjIsNiBAQAogI2RlZmluZSBWRVhQUkVTU19TSVRFX0RCMgkJMgogI2RlZmluZSBWRVhQUkVTU19TSVRFX01BU1RFUgkJMHhmCiAKLSNkZWZpbmUgVkVYUFJFU1NfUkVTX0ZVTkMoX3NpdGUsIF9mdW5jKQlcCi17CQkJCQlcCi0JLnN0YXJ0ID0gKF9zaXRlKSwJCVwKLQkuZW5kID0gKF9mdW5jKSwJCQlcCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9CVVMsCVwKLX0KLQogLyogQ29uZmlnIGluZnJhc3RydWN0dXJlICovCiAKIHZvaWQgdmV4cHJlc3NfY29uZmlnX3NldF9tYXN0ZXIodTMyIHNpdGUpOwpAQCAtNTgsMTYgKzQ5LDYgQEAKIAogLyogUGxhdGZvcm0gY29udHJvbCAqLwogCi11bnNpZ25lZCBpbnQgdmV4cHJlc3NfZ2V0X21jaV9jYXJkaW4oc3RydWN0IGRldmljZSAqZGV2KTsKLXUzMiB2ZXhwcmVzc19nZXRfcHJvY2lkKGludCBzaXRlKTsKLXZvaWQgKnZleHByZXNzX2dldF8yNG1oel9jbG9ja19iYXNlKHZvaWQpOwogdm9pZCB2ZXhwcmVzc19mbGFnc19zZXQodTMyIGRhdGEpOwogCi12b2lkIHZleHByZXNzX3N5c3JlZ19lYXJseV9pbml0KHZvaWQgX19pb21lbSAqYmFzZSk7Ci1pbnQgdmV4cHJlc3Nfc3lzY2ZnX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLQotLyogQ2xvY2tzICovCi0KLXZvaWQgdmV4cHJlc3NfY2xrX2luaXQodm9pZCBfX2lvbWVtICpzcDgxMF9iYXNlKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dhaXQuaCBiL2luY2x1ZGUvbGludXgvd2FpdC5oCmluZGV4IGU0YThlYjkuLjIyMzJlZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2FpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvd2FpdC5oCkBAIC0xMyw5ICsxMywxMiBAQAogdHlwZWRlZiBpbnQgKCp3YWl0X3F1ZXVlX2Z1bmNfdCkod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgZmxhZ3MsIHZvaWQgKmtleSk7CiBpbnQgZGVmYXVsdF93YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IGZsYWdzLCB2b2lkICprZXkpOwogCisvKiBfX3dhaXRfcXVldWU6OmZsYWdzICovCisjZGVmaW5lIFdRX0ZMQUdfRVhDTFVTSVZFCTB4MDEKKyNkZWZpbmUgV1FfRkxBR19XT0tFTgkJMHgwMgorCiBzdHJ1Y3QgX193YWl0X3F1ZXVlIHsKIAl1bnNpZ25lZCBpbnQJCWZsYWdzOwotI2RlZmluZSBXUV9GTEFHX0VYQ0xVU0lWRQkweDAxCiAJdm9pZAkJCSpwcml2YXRlOwogCXdhaXRfcXVldWVfZnVuY190CWZ1bmM7CiAJc3RydWN0IGxpc3RfaGVhZAl0YXNrX2xpc3Q7CkBAIC0yNTgsMTEgKzI2MSwzNyBAQAogICovCiAjZGVmaW5lIHdhaXRfZXZlbnQod3EsIGNvbmRpdGlvbikJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAogCWlmIChjb25kaXRpb24pCQkJCQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKIAlfX3dhaXRfZXZlbnQod3EsIGNvbmRpdGlvbik7CQkJCQlcCiB9IHdoaWxlICgwKQogCisjZGVmaW5lIF9fd2FpdF9ldmVudF9mcmVlemFibGUod3EsIGNvbmRpdGlvbikJCQkJXAorCV9fX3dhaXRfZXZlbnQod3EsIGNvbmRpdGlvbiwgVEFTS19JTlRFUlJVUFRJQkxFLCAwLCAwLAkJXAorCQkJICAgIHNjaGVkdWxlKCk7IHRyeV90b19mcmVlemUoKSkKKworLyoqCisgKiB3YWl0X2V2ZW50IC0gc2xlZXAgKG9yIGZyZWV6ZSkgdW50aWwgYSBjb25kaXRpb24gZ2V0cyB0cnVlCisgKiBAd3E6IHRoZSB3YWl0cXVldWUgdG8gd2FpdCBvbgorICogQGNvbmRpdGlvbjogYSBDIGV4cHJlc3Npb24gZm9yIHRoZSBldmVudCB0byB3YWl0IGZvcgorICoKKyAqIFRoZSBwcm9jZXNzIGlzIHB1dCB0byBzbGVlcCAoVEFTS19JTlRFUlJVUFRJQkxFIC0tIHNvIGFzIG5vdCB0byBjb250cmlidXRlCisgKiB0byBzeXN0ZW0gbG9hZCkgdW50aWwgdGhlIEBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuIFRoZQorICogQGNvbmRpdGlvbiBpcyBjaGVja2VkIGVhY2ggdGltZSB0aGUgd2FpdHF1ZXVlIEB3cSBpcyB3b2tlbiB1cC4KKyAqCisgKiB3YWtlX3VwKCkgaGFzIHRvIGJlIGNhbGxlZCBhZnRlciBjaGFuZ2luZyBhbnkgdmFyaWFibGUgdGhhdCBjb3VsZAorICogY2hhbmdlIHRoZSByZXN1bHQgb2YgdGhlIHdhaXQgY29uZGl0aW9uLgorICovCisjZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlKHdxLCBjb25kaXRpb24pCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3JldCA9IDA7CQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQlcCisJCV9fcmV0ID0gX193YWl0X2V2ZW50X2ZyZWV6YWJsZSh3cSwgY29uZGl0aW9uKTsJCVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisKICNkZWZpbmUgX193YWl0X2V2ZW50X3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJCQlcCiAJX19fd2FpdF9ldmVudCh3cSwgX19fd2FpdF9jb25kX3RpbWVvdXQoY29uZGl0aW9uKSwJCVwKIAkJICAgICAgVEFTS19VTklOVEVSUlVQVElCTEUsIDAsIHRpbWVvdXQsCQkJXApAQCAtMjkwLDExICszMTksMzAgQEAKICNkZWZpbmUgd2FpdF9ldmVudF90aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCQkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX3JldCA9IHRpbWVvdXQ7CQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoIV9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbikpCQkJCVwKIAkJX19yZXQgPSBfX3dhaXRfZXZlbnRfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KTsJXAogCV9fcmV0OwkJCQkJCQkJXAogfSkKIAorI2RlZmluZSBfX3dhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJCVwKKwlfX193YWl0X2V2ZW50KHdxLCBfX193YWl0X2NvbmRfdGltZW91dChjb25kaXRpb24pLAkJXAorCQkgICAgICBUQVNLX0lOVEVSUlVQVElCTEUsIDAsIHRpbWVvdXQsCQkJXAorCQkgICAgICBfX3JldCA9IHNjaGVkdWxlX3RpbWVvdXQoX19yZXQpOyB0cnlfdG9fZnJlZXplKCkpCisKKy8qCisgKiBsaWtlIHdhaXRfZXZlbnRfdGltZW91dCgpIC0tIGV4Y2VwdCBpdCB1c2VzIFRBU0tfSU5URVJSVVBUSUJMRSB0byBhdm9pZAorICogaW5jcmVhc2luZyBsb2FkIGFuZCBpcyBmcmVlemFibGUuCisgKi8KKyNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJXAorKHsJCQkJCQkJCQlcCisJbG9uZyBfX3JldCA9IHRpbWVvdXQ7CQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlpZiAoIV9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbikpCQkJCVwKKwkJX19yZXQgPSBfX3dhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCk7CVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisKICNkZWZpbmUgX193YWl0X2V2ZW50X2NtZCh3cSwgY29uZGl0aW9uLCBjbWQxLCBjbWQyKQkJCVwKIAkodm9pZClfX193YWl0X2V2ZW50KHdxLCBjb25kaXRpb24sIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCAwLCAwLAlcCiAJCQkgICAgY21kMTsgc2NoZWR1bGUoKTsgY21kMikKQEAgLTMxNSw2ICszNjMsNyBAQAogICovCiAjZGVmaW5lIHdhaXRfZXZlbnRfY21kKHdxLCBjb25kaXRpb24sIGNtZDEsIGNtZDIpCQkJXAogZG8gewkJCQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCiAJaWYgKGNvbmRpdGlvbikJCQkJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCV9fd2FpdF9ldmVudF9jbWQod3EsIGNvbmRpdGlvbiwgY21kMSwgY21kMik7CQkJXApAQCAtMzQyLDYgKzM5MSw3IEBACiAjZGVmaW5lIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh3cSwgY29uZGl0aW9uKQkJCQlcCiAoewkJCQkJCQkJCVwKIAlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAogCWlmICghKGNvbmRpdGlvbikpCQkJCQkJXAogCQlfX3JldCA9IF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHdxLCBjb25kaXRpb24pOwlcCiAJX19yZXQ7CQkJCQkJCQlcCkBAIC0zNzUsNiArNDI1LDcgQEAKICNkZWZpbmUgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX3JldCA9IHRpbWVvdXQ7CQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoIV9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbikpCQkJCVwKIAkJX19yZXQgPSBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLAkJXAogCQkJCQkJY29uZGl0aW9uLCB0aW1lb3V0KTsJXApAQCAtNDI1LDYgKzQ3Niw3IEBACiAjZGVmaW5lIHdhaXRfZXZlbnRfaHJ0aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCQkJXAogKHsJCQkJCQkJCQlcCiAJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKIAkJX19yZXQgPSBfX3dhaXRfZXZlbnRfaHJ0aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQsCVwKIAkJCQkJICAgICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsJXApAQCAtNDUwLDYgKzUwMiw3IEBACiAjZGVmaW5lIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9ocnRpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX3JldCA9IDA7CQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCiAJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQlcCiAJCV9fcmV0ID0gX193YWl0X2V2ZW50X2hydGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0LAlcCiAJCQkJCSAgICAgICBUQVNLX0lOVEVSUlVQVElCTEUpOwlcCkBAIC00NjMsMTIgKzUxNiwyNyBAQAogI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlKHdxLCBjb25kaXRpb24pCQlcCiAoewkJCQkJCQkJCVwKIAlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAogCWlmICghKGNvbmRpdGlvbikpCQkJCQkJXAogCQlfX3JldCA9IF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKTtcCiAJX19yZXQ7CQkJCQkJCQlcCiB9KQogCiAKKyNkZWZpbmUgX193YWl0X2V2ZW50X2ZyZWV6YWJsZV9leGNsdXNpdmUod3EsIGNvbmRpdGlvbikJCQlcCisJX19fd2FpdF9ldmVudCh3cSwgY29uZGl0aW9uLCBUQVNLX0lOVEVSUlVQVElCTEUsIDEsIDAsCQlcCisJCQlzY2hlZHVsZSgpOyB0cnlfdG9fZnJlZXplKCkpCisKKyNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfZXhjbHVzaXZlKHdxLCBjb25kaXRpb24pCQkJXAorKHsJCQkJCQkJCQlcCisJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKKwkJX19yZXQgPSBfX3dhaXRfZXZlbnRfZnJlZXphYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKTtcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCisKICNkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja2VkKHdxLCBjb25kaXRpb24sIGV4Y2x1c2l2ZSwgaXJxKSBcCiAoewkJCQkJCQkJCVwKIAlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCkBAIC02MzcsNiArNzA1LDcgQEAKICNkZWZpbmUgd2FpdF9ldmVudF9raWxsYWJsZSh3cSwgY29uZGl0aW9uKQkJCQlcCiAoewkJCQkJCQkJCVwKIAlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAogCWlmICghKGNvbmRpdGlvbikpCQkJCQkJXAogCQlfX3JldCA9IF9fd2FpdF9ldmVudF9raWxsYWJsZSh3cSwgY29uZGl0aW9uKTsJCVwKIAlfX3JldDsJCQkJCQkJCVwKQEAgLTgzMCw2ICs4OTksOCBAQAogbG9uZyBwcmVwYXJlX3RvX3dhaXRfZXZlbnQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqd2FpdCwgaW50IHN0YXRlKTsKIHZvaWQgZmluaXNoX3dhaXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqd2FpdCk7CiB2b2lkIGFib3J0X2V4Y2x1c2l2ZV93YWl0KHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIGludCBtb2RlLCB2b2lkICprZXkpOworbG9uZyB3YWl0X3dva2VuKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgbG9uZyB0aW1lb3V0KTsKK2ludCB3b2tlbl93YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSk7CiBpbnQgYXV0b3JlbW92ZV93YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSk7CiBpbnQgd2FrZV9iaXRfZnVuY3Rpb24od2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KTsKIApAQCAtODg2LDYgKzk1Nyw3IEBACiBzdGF0aWMgaW5saW5lIGludAogd2FpdF9vbl9iaXQodm9pZCAqd29yZCwgaW50IGJpdCwgdW5zaWduZWQgbW9kZSkKIHsKKwltaWdodF9zbGVlcCgpOwogCWlmICghdGVzdF9iaXQoYml0LCB3b3JkKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIG91dF9vZl9saW5lX3dhaXRfb25fYml0KHdvcmQsIGJpdCwKQEAgLTkxMCw2ICs5ODIsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIHdhaXRfb25fYml0X2lvKHZvaWQgKndvcmQsIGludCBiaXQsIHVuc2lnbmVkIG1vZGUpCiB7CisJbWlnaHRfc2xlZXAoKTsKIAlpZiAoIXRlc3RfYml0KGJpdCwgd29yZCkpCiAJCXJldHVybiAwOwogCXJldHVybiBvdXRfb2ZfbGluZV93YWl0X29uX2JpdCh3b3JkLCBiaXQsCkBAIC05MzYsNiArMTAwOSw3IEBACiBzdGF0aWMgaW5saW5lIGludAogd2FpdF9vbl9iaXRfYWN0aW9uKHZvaWQgKndvcmQsIGludCBiaXQsIHdhaXRfYml0X2FjdGlvbl9mICphY3Rpb24sIHVuc2lnbmVkIG1vZGUpCiB7CisJbWlnaHRfc2xlZXAoKTsKIAlpZiAoIXRlc3RfYml0KGJpdCwgd29yZCkpCiAJCXJldHVybiAwOwogCXJldHVybiBvdXRfb2ZfbGluZV93YWl0X29uX2JpdCh3b3JkLCBiaXQsIGFjdGlvbiwgbW9kZSk7CkBAIC05NjMsNiArMTAzNyw3IEBACiBzdGF0aWMgaW5saW5lIGludAogd2FpdF9vbl9iaXRfbG9jayh2b2lkICp3b3JkLCBpbnQgYml0LCB1bnNpZ25lZCBtb2RlKQogeworCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGJpdCwgd29yZCkpCiAJCXJldHVybiAwOwogCXJldHVybiBvdXRfb2ZfbGluZV93YWl0X29uX2JpdF9sb2NrKHdvcmQsIGJpdCwgYml0X3dhaXQsIG1vZGUpOwpAQCAtOTg2LDYgKzEwNjEsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIHdhaXRfb25fYml0X2xvY2tfaW8odm9pZCAqd29yZCwgaW50IGJpdCwgdW5zaWduZWQgbW9kZSkKIHsKKwltaWdodF9zbGVlcCgpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChiaXQsIHdvcmQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXRfbG9jayh3b3JkLCBiaXQsIGJpdF93YWl0X2lvLCBtb2RlKTsKQEAgLTEwMTEsNiArMTA4Nyw3IEBACiBzdGF0aWMgaW5saW5lIGludAogd2FpdF9vbl9iaXRfbG9ja19hY3Rpb24odm9pZCAqd29yZCwgaW50IGJpdCwgd2FpdF9iaXRfYWN0aW9uX2YgKmFjdGlvbiwgdW5zaWduZWQgbW9kZSkKIHsKKwltaWdodF9zbGVlcCgpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChiaXQsIHdvcmQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXRfbG9jayh3b3JkLCBiaXQsIGFjdGlvbiwgbW9kZSk7CkBAIC0xMDI5LDYgKzExMDYsNyBAQAogc3RhdGljIGlubGluZQogaW50IHdhaXRfb25fYXRvbWljX3QoYXRvbWljX3QgKnZhbCwgaW50ICgqYWN0aW9uKShhdG9taWNfdCAqKSwgdW5zaWduZWQgbW9kZSkKIHsKKwltaWdodF9zbGVlcCgpOwogCWlmIChhdG9taWNfcmVhZCh2YWwpID09IDApCiAJCXJldHVybiAwOwogCXJldHVybiBvdXRfb2ZfbGluZV93YWl0X29uX2F0b21pY190KHZhbCwgYWN0aW9uLCBtb2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCA3ZGIzZGIxLi5lNmYyMzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC04OTcsNiArODk3LDcgQEAKIAkJaWYgKCFfX3JjKSB7CQkJCQkJXAogCQkJKihfX3RpbWVvKSA9IHNjaGVkdWxlX3RpbWVvdXQoKihfX3RpbWVvKSk7CVwKIAkJfQkJCQkJCQlcCisJCXNjaGVkX2Fubm90YXRlX3NsZWVwKCk7CQkJCQkJXAogCQlsb2NrX3NvY2soX19zayk7CQkJCQlcCiAJCV9fcmMgPSBfX2NvbmRpdGlvbjsJCQkJCVwKIAkJX19yYzsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmZjLmggYi9pbmNsdWRlL3Njc2kvbGliZmMuaAppbmRleCA1MmJlYWRmLi45M2QxNGRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliZmMuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliZmMuaApAQCAtMTEwNSw4ICsxMTA1LDYgQEAKIGludCBmY19laF9kZXZpY2VfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqKTsKIGludCBmY19laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiBpbnQgZmNfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICopOwotaW50IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbik7Ci1pbnQgZmNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCB0YWdfdHlwZSk7CiAKIC8qCiAgKiBFTFMvQ1QgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDcyOGM5YWQuLjRkMWM0NmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC0zNzgsOCArMzc4LDYgQEAKIC8qCiAgKiBzY3NpIGhvc3QgdGVtcGxhdGUKICAqLwotZXh0ZXJuIGludCBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgsCi0JCQkJICAgIGludCByZWFzb24pOwogZXh0ZXJuIGludCBpc2NzaV9laF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7CiBleHRlcm4gaW50IGlzY3NpX2VoX3JlY292ZXJfdGFyZ2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKIGV4dGVybiBpbnQgaXNjc2lfZWhfc2Vzc2lvbl9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGlic2FzLmggYi9pbmNsdWRlL3Njc2kvbGlic2FzLmgKaW5kZXggZWY3ODcyYy4uODMyZGNjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYnNhcy5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJzYXMuaApAQCAtMzY1LDEyICszNjUsNiBAQAogc3RydWN0IHNjc2lfY29yZSB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAKLQlzdHJ1Y3QgbXV0ZXgJICB0YXNrX3F1ZXVlX2ZsdXNoOwotCXNwaW5sb2NrX3QgICAgICAgIHRhc2tfcXVldWVfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkICB0YXNrX3F1ZXVlOwotCWludCAgICAgICAgICAgICAgIHRhc2tfcXVldWVfc2l6ZTsKLQotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcXVldWVfdGhyZWFkOwogfTsKIAogc3RydWN0IHNhc19oYV9ldmVudCB7CkBAIC00MjIsOSArNDE2LDYgQEAKIAlzdHJ1Y3QgYXNkX3Nhc19wb3J0ICoqc2FzX3BvcnQ7IC8qIGFycmF5IG9mIHZhbGlkIHBvaW50ZXJzLCBtdXN0IGJlIHNldCAqLwogCWludCAgICAgICAgICAgICBudW1fcGh5czsgLyogbXVzdCBiZSBzZXQsIGd0IDAsIHN0YXRpYyAqLwogCi0JLyogVGhlIGNsYXNzIGNhbGxzIHRoaXMgdG8gc2VuZCBhIHRhc2sgZm9yIGV4ZWN1dGlvbi4gKi8KLQlpbnQgbGxkZF9tYXhfZXhlY3V0ZV9udW07Ci0JaW50IGxsZGRfcXVldWVfc2l6ZTsKIAlpbnQgc3RyaWN0X3dpZGVfcG9ydHM7IC8qIGJvdGggc2FzX2FkZHIgYW5kIGF0dGFjaGVkX3Nhc19hZGRyIG11c3QgbWF0Y2gKIAkJCQkqIHRoZWlyIHNpYmxpbmdzIHdoZW4gZm9ybWluZyB3aWRlIHBvcnRzICovCiAKQEAgLTYxMiw3ICs2MDMsNiBAQAogCiBzdHJ1Y3Qgc2FzX3Rhc2sgewogCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgIGxpc3Q7CiAKIAlzcGlubG9ja190ICAgdGFza19zdGF0ZV9sb2NrOwogCXVuc2lnbmVkICAgICB0YXNrX3N0YXRlX2ZsYWdzOwpAQCAtNjY1LDggKzY1NSw3IEBACiAJaW50ICAoKmxsZGRfZGV2X2ZvdW5kKShzdHJ1Y3QgZG9tYWluX2RldmljZSAqKTsKIAl2b2lkICgqbGxkZF9kZXZfZ29uZSkoc3RydWN0IGRvbWFpbl9kZXZpY2UgKik7CiAKLQlpbnQgKCpsbGRkX2V4ZWN1dGVfdGFzaykoc3RydWN0IHNhc190YXNrICosIGludCBudW0sCi0JCQkJIGdmcF90IGdmcF9mbGFncyk7CisJaW50ICgqbGxkZF9leGVjdXRlX3Rhc2spKHN0cnVjdCBzYXNfdGFzayAqLCBnZnBfdCBnZnBfZmxhZ3MpOwogCiAJLyogVGFzayBNYW5hZ2VtZW50IEZ1bmN0aW9ucy4gTXVzdCBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuICovCiAJaW50ICgqbGxkZF9hYm9ydF90YXNrKShzdHJ1Y3Qgc2FzX3Rhc2sgKik7CkBAIC03MDAsMTIgKzY4OSwxMCBAQAogaW50IHNhc19zZXRfcGh5X3NwZWVkKHN0cnVjdCBzYXNfcGh5ICpwaHksCiAJCSAgICAgIHN0cnVjdCBzYXNfcGh5X2xpbmtyYXRlcyAqcmF0ZXMpOwogaW50IHNhc19waHlfcmVzZXQoc3RydWN0IHNhc19waHkgKnBoeSwgaW50IGhhcmRfcmVzZXQpOwotaW50IHNhc19xdWV1ZV91cChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spOwogZXh0ZXJuIGludCBzYXNfcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKiAsc3RydWN0IHNjc2lfY21uZCAqKTsKIGV4dGVybiBpbnQgc2FzX3RhcmdldF9hbGxvYyhzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CiBleHRlcm4gaW50IHNhc19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICopOwotZXh0ZXJuIGludCBzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQgbmV3X2RlcHRoLAotCQkJCSAgaW50IHJlYXNvbik7CitleHRlcm4gaW50IHNhc19jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCBuZXdfZGVwdGgpOwogZXh0ZXJuIGludCBzYXNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCBxdCk7CiBleHRlcm4gaW50IHNhc19iaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqLAogCQkJICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2kuaAppbmRleCBkMTcxNzhlLi44YTdmOGFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKQEAgLTEyOCw4ICsxMjgsMTAgQEAKICNkZWZpbmUgTU9WRV9NRURJVU0gICAgICAgICAgIDB4YTUKICNkZWZpbmUgRVhDSEFOR0VfTUVESVVNICAgICAgIDB4YTYKICNkZWZpbmUgUkVBRF8xMiAgICAgICAgICAgICAgIDB4YTgKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fT1VUXzEyIDB4YTkKICNkZWZpbmUgV1JJVEVfMTIgICAgICAgICAgICAgIDB4YWEKLSNkZWZpbmUgUkVBRF9NRURJQV9TRVJJQUxfTlVNQkVSIDB4YWIKKyNkZWZpbmUgUkVBRF9NRURJQV9TRVJJQUxfTlVNQkVSIDB4YWIgLyogT2Jzb2xldGUgd2l0aCBTUEMtMiAqLworI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTl8xMiAgMHhhYgogI2RlZmluZSBXUklURV9WRVJJRllfMTIgICAgICAgMHhhZQogI2RlZmluZSBWRVJJRllfMTIJICAgICAgMHhhZgogI2RlZmluZSBTRUFSQ0hfSElHSF8xMiAgICAgICAgMHhiMApAQCAtMTUxLDcgKzE1Myw5IEBACiAjZGVmaW5lIFZFUklGWV8xNgkgICAgICAweDhmCiAjZGVmaW5lIFNZTkNIUk9OSVpFX0NBQ0hFXzE2ICAweDkxCiAjZGVmaW5lIFdSSVRFX1NBTUVfMTYJICAgICAgMHg5MwotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTiAgICAgMHg5ZQorI2RlZmluZSBTRVJWSUNFX0FDVElPTl9CSURJUkVDVElPTkFMIDB4OWQKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU5fMTYgIDB4OWUKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fT1VUXzE2IDB4OWYKIC8qIHZhbHVlcyBmb3Igc2VydmljZSBhY3Rpb24gaW4gKi8KICNkZWZpbmUJU0FJX1JFQURfQ0FQQUNJVFlfMTYgIDB4MTAKICNkZWZpbmUgU0FJX0dFVF9MQkFfU1RBVFVTICAgIDB4MTIKQEAgLTE2NSw4ICsxNjksOCBAQAogI2RlZmluZSBNSV9SRVBPUlRfQUxJQVNFUyAgICAgMHgwYgogI2RlZmluZSBNSV9SRVBPUlRfU1VQUE9SVEVEX09QRVJBVElPTl9DT0RFUyAweDBjCiAjZGVmaW5lIE1JX1JFUE9SVF9TVVBQT1JURURfVEFTS19NQU5BR0VNRU5UX0ZVTkNUSU9OUyAweDBkCi0jZGVmaW5lIE1JX1JFUE9SVF9QUklPUklUWSAgIDB4MGUKLSNkZWZpbmUgTUlfUkVQT1JUX1RJTUVTVEFNUCAgMHgwZgorI2RlZmluZSBNSV9SRVBPUlRfUFJJT1JJVFkgICAgMHgwZQorI2RlZmluZSBNSV9SRVBPUlRfVElNRVNUQU1QICAgMHgwZgogI2RlZmluZSBNSV9NQU5BR0VNRU5UX1BST1RPQ09MX0lOIDB4MTAKIC8qIHZhbHVlIGZvciBNSV9SRVBPUlRfVEFSR0VUX1BHUyBleHQgaGVhZGVyICovCiAjZGVmaW5lIE1JX0VYVF9IRFJfUEFSQU1fRk1UICAweDIwCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKaW5kZXggNTIyYTVmMjcuLjlmYzFhZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKQEAgLTUzLDYgKzUzLDkgQEAKIAl2b2xhdGlsZSBpbnQgcGhhc2U7CiB9OwogCisvKiBmb3Igc2NtZC0+ZmxhZ3MgKi8KKyNkZWZpbmUgU0NNRF9UQUdHRUQJCSgxIDw8IDApCisKIHN0cnVjdCBzY3NpX2NtbmQgewogCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgIC8qIHNjc2lfY21uZCBwYXJ0aWNpcGF0ZXMgaW4gcXVldWUgbGlzdHMgKi8KQEAgLTEzMiw2ICsxMzUsNyBAQAogCQkJCQkgKiB0byBiZSBhdCBhbiBhZGRyZXNzIDwgMTZNYikuICovCiAKIAlpbnQgcmVzdWx0OwkJLyogU3RhdHVzIGNvZGUgZnJvbSBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlpbnQgZmxhZ3M7CQkvKiBDb21tYW5kIGZsYWdzICovCiAKIAl1bnNpZ25lZCBjaGFyIHRhZzsJLyogU0NTSS1JSSBxdWV1ZWQgY29tbWFuZCB0YWcgKi8KIH07CkBAIC0xNTksNyArMTYzLDcgQEAKIAkJCQkgc2l6ZV90ICpvZmZzZXQsIHNpemVfdCAqbGVuKTsKIGV4dGVybiB2b2lkIHNjc2lfa3VubWFwX2F0b21pY19zZyh2b2lkICp2aXJ0KTsKIAotZXh0ZXJuIGludCBzY3NpX2luaXRfaW8oc3RydWN0IHNjc2lfY21uZCAqY21kLCBnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gaW50IHNjc2lfaW5pdF9pbyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogCiBleHRlcm4gaW50IHNjc2lfZG1hX21hcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogZXh0ZXJuIHZvaWQgc2NzaV9kbWFfdW5tYXAoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RiZy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKaW5kZXggZTg5ODQ0Yy4uNzk4Mjc5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKQEAgLTIsMjMgKzIsMjcgQEAKICNkZWZpbmUgX1NDU0lfU0NTSV9EQkdfSAogCiBzdHJ1Y3Qgc2NzaV9jbW5kOworc3RydWN0IHNjc2lfZGV2aWNlOwogc3RydWN0IHNjc2lfc2Vuc2VfaGRyOwogCiBleHRlcm4gdm9pZCBzY3NpX3ByaW50X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqKTsKLWV4dGVybiB2b2lkIF9fc2NzaV9wcmludF9jb21tYW5kKHVuc2lnbmVkIGNoYXIgKik7Ci1leHRlcm4gdm9pZCBzY3NpX3Nob3dfZXh0ZF9zZW5zZSh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKTsKLWV4dGVybiB2b2lkIHNjc2lfc2hvd19zZW5zZV9oZHIoc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOwotZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zZW5zZV9oZHIoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKik7Ci1leHRlcm4gdm9pZCBzY3NpX2NtZF9wcmludF9zZW5zZV9oZHIoc3RydWN0IHNjc2lfY21uZCAqLCBjb25zdCBjaGFyICosCi0JCQkJICAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKik7Ci1leHRlcm4gdm9pZCBzY3NpX3ByaW50X3NlbnNlKGNoYXIgKiwgc3RydWN0IHNjc2lfY21uZCAqKTsKLWV4dGVybiB2b2lkIF9fc2NzaV9wcmludF9zZW5zZShjb25zdCBjaGFyICpuYW1lLAorZXh0ZXJuIHZvaWQgX19zY3NpX3ByaW50X2NvbW1hbmQoY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgc2NzaV9zaG93X2V4dGRfc2Vuc2UoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CitleHRlcm4gdm9pZCBzY3NpX3Nob3dfc2Vuc2VfaGRyKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqLCBjb25zdCBjaGFyICosCisJCQkJY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOworZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zZW5zZV9oZHIoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOworZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICopOworZXh0ZXJuIHZvaWQgX19zY3NpX3ByaW50X3NlbnNlKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqLCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwKIAkJCSAgICAgICBpbnQgc2Vuc2VfbGVuKTsKLWV4dGVybiB2b2lkIHNjc2lfc2hvd19yZXN1bHQoaW50KTsKLWV4dGVybiB2b2lkIHNjc2lfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1leHRlcm4gdm9pZCBzY3NpX3ByaW50X3N0YXR1cyh1bnNpZ25lZCBjaGFyKTsKK2V4dGVybiB2b2lkIHNjc2lfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2NtbmQgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfaG9zdGJ5dGVfc3RyaW5nKGludCk7CitleHRlcm4gY29uc3QgY2hhciAqc2NzaV9kcml2ZXJieXRlX3N0cmluZyhpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfbWxyZXR1cm5fc3RyaW5nKGludCk7CiBleHRlcm4gY29uc3QgY2hhciAqc2NzaV9zZW5zZV9rZXlfc3RyaW5nKHVuc2lnbmVkIGNoYXIpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfZXh0ZF9zZW5zZV9mb3JtYXQodW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CitleHRlcm4gY29uc3QgY2hhciAqc2NzaV9leHRkX3NlbnNlX2Zvcm1hdCh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyLAorCQkJCQkgIGNvbnN0IGNoYXIgKiopOwogCiAjZW5kaWYgLyogX1NDU0lfU0NTSV9EQkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCAyN2VjZWU3Li42MzY0ZTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMTQxLDcgKzE0MSw2IEBACiAJdW5zaWduZWQgcHByOjE7CQkvKiBEZXZpY2Ugc3VwcG9ydHMgUFBSIG1lc3NhZ2VzICovCiAJdW5zaWduZWQgdGFnZ2VkX3N1cHBvcnRlZDoxOwkvKiBTdXBwb3J0cyBTQ1NJLUlJIHRhZ2dlZCBxdWV1aW5nICovCiAJdW5zaWduZWQgc2ltcGxlX3RhZ3M6MTsJLyogc2ltcGxlIHF1ZXVlIHRhZyBtZXNzYWdlcyBhcmUgZW5hYmxlZCAqLwotCXVuc2lnbmVkIG9yZGVyZWRfdGFnczoxOy8qIG9yZGVyZWQgcXVldWUgdGFnIG1lc3NhZ2VzIGFyZSBlbmFibGVkICovCiAJdW5zaWduZWQgd2FzX3Jlc2V0OjE7CS8qIFRoZXJlIHdhcyBhIGJ1cyByZXNldCBvbiB0aGUgYnVzIGZvciAKIAkJCQkgKiB0aGlzIGRldmljZSAqLwogCXVuc2lnbmVkIGV4cGVjdGluZ19jY191YToxOyAvKiBFeHBlY3RpbmcgYSBDSEVDS19DT05ESVRJT04vVU5JVF9BVFROCkBAIC0yMDEsMTEgKzIwMCw2IEBACiAJdW5zaWduZWQgbG9uZwkJc2Rldl9kYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZih1bnNpZ25lZCBsb25nKSkpKTsKIAotc3RydWN0IHNjc2lfZGhfZGV2bGlzdCB7Ci0JY2hhciAqdmVuZG9yOwotCWNoYXIgKm1vZGVsOwotfTsKLQogdHlwZWRlZiB2b2lkICgqYWN0aXZhdGVfY29tcGxldGUpKHZvaWQgKiwgaW50KTsKIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyIHsKIAkvKiBVc2VkIGJ5IHRoZSBpbmZyYXN0cnVjdHVyZSAqLwpAQCAtMjE0LDkgKzIwOCw4IEBACiAJLyogRmlsbGVkIGJ5IHRoZSBoYXJkd2FyZSBoYW5kbGVyICovCiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3Qgc3RydWN0IHNjc2lfZGhfZGV2bGlzdCAqZGV2bGlzdDsKIAlpbnQgKCpjaGVja19zZW5zZSkoc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqKTsKLQlpbnQgKCphdHRhY2gpKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKKwlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICooKmF0dGFjaCkoc3RydWN0IHNjc2lfZGV2aWNlICopOwogCXZvaWQgKCpkZXRhY2gpKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKIAlpbnQgKCphY3RpdmF0ZSkoc3RydWN0IHNjc2lfZGV2aWNlICosIGFjdGl2YXRlX2NvbXBsZXRlLCB2b2lkICopOwogCWludCAoKnByZXBfZm4pKHN0cnVjdCBzY3NpX2RldmljZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKQEAgLTIyOCw3ICsyMjEsNiBAQAogCXN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyICpzY3NpX2RoOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlzdHJ1Y3Qga3JlZiBrcmVmOwotCWNoYXIgYnVmWzBdOwogfTsKIAogI2RlZmluZQl0b19zY3NpX2RldmljZShkKQlcCkBAIC0yNDQsNiArMjM2LDE1IEBACiAjZGVmaW5lIHNkZXZfZGJnKHNkZXYsIGZtdCwgYS4uLikgXAogCWRldl9kYmcoJihzZGV2KS0+c2Rldl9nZW5kZXYsIGZtdCwgIyNhKQogCisvKgorICogbGlrZSBzY21kX3ByaW50aywgYnV0IHRoZSBkZXZpY2UgbmFtZSBpcyBwYXNzZWQgaW4KKyAqIGFzIGEgc3RyaW5nIHBvaW50ZXIKKyAqLworI2RlZmluZSBzZGV2X3ByZWZpeF9wcmludGsobCwgc2RldiwgcCwgZm10LCBhLi4uKQkJCVwKKwkocCkgPwkJCQkJCQkJXAorCXNkZXZfcHJpbnRrKGwsIHNkZXYsICJbJXNdICIgZm10LCBwLCAjI2EpIDoJCQlcCisJc2Rldl9wcmludGsobCwgc2RldiwgZm10LCAjI2EpCisKICNkZWZpbmUgc2NtZF9wcmludGsocHJlZml4LCBzY21kLCBmbXQsIGEuLi4pCQkJCVwKICAgICAgICAgKHNjbWQpLT5yZXF1ZXN0LT5ycV9kaXNrID8JCQkJCVwKIAlzZGV2X3ByaW50ayhwcmVmaXgsIChzY21kKS0+ZGV2aWNlLCAiWyVzXSAiIGZtdCwJCVwKQEAgLTM3OSw3ICszODAsNyBAQAogI2RlZmluZSBfX3Nob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkgXAogCWxpc3RfZm9yX2VhY2hfZW50cnkoKHNkZXYpLCAmKChzaG9zdCktPl9fZGV2aWNlcyksIHNpYmxpbmdzKQogCi1leHRlcm4gdm9pZCBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50LCBpbnQpOworZXh0ZXJuIGludCBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50KTsKIGV4dGVybiBpbnQgc2NzaV90cmFja19xdWV1ZV9mdWxsKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQpOwogCiBleHRlcm4gaW50IHNjc2lfc2V0X21lZGl1bV9yZW1vdmFsKHN0cnVjdCBzY3NpX2RldmljZSAqLCBjaGFyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RyaXZlci5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZHJpdmVyLmgKaW5kZXggYzJiNzU5OC4uODkxYTY1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZHJpdmVyLmgKQEAgLTksNyArOSw2IEBACiBzdHJ1Y3Qgc2NzaV9kZXZpY2U7CiAKIHN0cnVjdCBzY3NpX2RyaXZlciB7Ci0Jc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWdlbmRydjsKIAogCXZvaWQgKCpyZXNjYW4pKHN0cnVjdCBkZXZpY2UgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9laC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZWguaAppbmRleCAwNmE4NzkwLi4xZTE0MjFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9laC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2VoLmgKQEAgLTI3LDEwICsyNywxMCBAQAogCXU4IGFkZGl0aW9uYWxfbGVuZ3RoOwkvKiBhbHdheXMgMCBmb3IgZml4ZWQgc2Vuc2UgZm9ybWF0ICovCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBzY3NpX3NlbnNlX3ZhbGlkKHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCitzdGF0aWMgaW5saW5lIGJvb2wgc2NzaV9zZW5zZV92YWxpZChjb25zdCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQogewogCWlmICghc3NoZHIpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gKHNzaGRyLT5yZXNwb25zZV9jb2RlICYgMHg3MCkgPT0gMHg3MDsKIH0KQEAgLTQyLDEyICs0MiwxMiBAQAogZXh0ZXJuIHZvaWQgc2NzaV9yZXBvcnRfYnVzX3Jlc2V0KHN0cnVjdCBTY3NpX0hvc3QgKiwgaW50KTsKIGV4dGVybiB2b2lkIHNjc2lfcmVwb3J0X2RldmljZV9yZXNldChzdHJ1Y3QgU2NzaV9Ib3N0ICosIGludCwgaW50KTsKIGV4dGVybiBpbnQgc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKLWV4dGVybiBpbnQgc2NzaV9ub3JtYWxpemVfc2Vuc2UoY29uc3QgdTggKnNlbnNlX2J1ZmZlciwgaW50IHNiX2xlbiwKLQkJc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcik7Ci1leHRlcm4gaW50IHNjc2lfY29tbWFuZF9ub3JtYWxpemVfc2Vuc2Uoc3RydWN0IHNjc2lfY21uZCAqY21kLAotCQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKTsKK2V4dGVybiBib29sIHNjc2lfbm9ybWFsaXplX3NlbnNlKGNvbnN0IHU4ICpzZW5zZV9idWZmZXIsIGludCBzYl9sZW4sCisJCQkJIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpOworZXh0ZXJuIGJvb2wgc2NzaV9jb21tYW5kX25vcm1hbGl6ZV9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCisJCQkJCSBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKTsKIAotc3RhdGljIGlubGluZSBpbnQgc2NzaV9zZW5zZV9pc19kZWZlcnJlZChzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQorc3RhdGljIGlubGluZSBib29sIHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKIHsKIAlyZXR1cm4gKChzc2hkci0+cmVzcG9uc2VfY29kZSA+PSAweDcwKSAmJiAoc3NoZHItPnJlc3BvbnNlX2NvZGUgJiAxKSk7CiB9CkBAIC02MCwxNSArNjAsNyBAQAogCiBleHRlcm4gdm9pZCBzY3NpX2J1aWxkX3NlbnNlX2J1ZmZlcihpbnQgZGVzYywgdTggKmJ1ZiwgdTgga2V5LCB1OCBhc2MsIHU4IGFzY3EpOwogCi0vKgotICogUmVzZXQgcmVxdWVzdCBmcm9tIGV4dGVybmFsIHNvdXJjZQotICovCi0jZGVmaW5lIFNDU0lfVFJZX1JFU0VUX0RFVklDRQkxCi0jZGVmaW5lIFNDU0lfVFJZX1JFU0VUX0JVUwkyCi0jZGVmaW5lIFNDU0lfVFJZX1JFU0VUX0hPU1QJMwotI2RlZmluZSBTQ1NJX1RSWV9SRVNFVF9UQVJHRVQJNAotCi1leHRlcm4gaW50IHNjc2lfcmVzZXRfcHJvdmlkZXIoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCk7CitleHRlcm4gaW50IHNjc2lfaW9jdGxfcmVzZXQoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCBfX3VzZXIgKik7CiAKIHN0cnVjdCBzY3NpX2VoX3NhdmUgewogCS8qIHNhdmVkIHN0YXRlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKaW5kZXggNWUzNjI0OC4uYzhhNDYyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApAQCAtNDYsMTIgKzQ2LDYgQEAKICNkZWZpbmUgRElTQUJMRV9DTFVTVEVSSU5HIDAKICNkZWZpbmUgRU5BQkxFX0NMVVNURVJJTkcgMQogCi1lbnVtIHsKLQlTQ1NJX1FERVBUSF9ERUZBVUxULAkvKiBkZWZhdWx0IHJlcXVlc3RlZCBjaGFuZ2UsIGUuZy4gZnJvbSBzeXNmcyAqLwotCVNDU0lfUURFUFRIX1FGVUxMLAkvKiBzY3NpLW1sIHJlcXVlc3RlZCBkdWUgdG8gcXVldWUgZnVsbCAqLwotCVNDU0lfUURFUFRIX1JBTVBfVVAsCS8qIHNjc2ktbWwgcmVxdWVzdGVkIGR1ZSB0byB0aHJlc2hvbGQgZXZlbnQgKi8KLX07Ci0KIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgewogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMTk1LDcgKzE4OSw3IEBACiAJICogVGhpbmdzIGN1cnJlbnRseSByZWNvbW1lbmRlZCB0byBiZSBoYW5kbGVkIGF0IHRoaXMgdGltZSBpbmNsdWRlOgogCSAqCiAJICogMS4gIFNldHRpbmcgdGhlIGRldmljZSBxdWV1ZSBkZXB0aC4gIFByb3BlciBzZXR0aW5nIG9mIHRoaXMgaXMKLQkgKiAgICAgZGVzY3JpYmVkIGluIHRoZSBjb21tZW50cyBmb3Igc2NzaV9hZGp1c3RfcXVldWVfZGVwdGguCisJICogICAgIGRlc2NyaWJlZCBpbiB0aGUgY29tbWVudHMgZm9yIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLgogCSAqIDIuICBEZXRlcm1pbmluZyBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZSB2YXJpb3VzIHN5bmNocm9ub3VzCiAJICogICAgIG5lZ290aWF0aW9uIHByb3RvY29scy4gIFRoZSBkZXZpY2Ugc3RydWN0IHdpbGwgYWxyZWFkeSBoYXZlCiAJICogICAgIHJlc3BvbmRlZCB0byBJTlFVSVJZIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUgc3RhbmRhcmQgaXRlbXMKQEAgLTI4MSw3ICsyNzUsNyBAQAogCSAqCiAJICogU3RhdHVzOiBPUFRJT05BTAogCSAqLwotCWludCAoKiBjaGFuZ2VfcXVldWVfZGVwdGgpKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQsIGludCk7CisJaW50ICgqIGNoYW5nZV9xdWV1ZV9kZXB0aCkoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCk7CiAKIAkvKgogCSAqIEZpbGwgaW4gdGhpcyBmdW5jdGlvbiB0byBhbGxvdyB0aGUgY2hhbmdpbmcgb2YgdGFnIHR5cGVzCkBAIC00MjIsNiArNDE2LDE2IEBACiAJdW5zaWduZWQgY2hhciBwcmVzZW50OwogCiAJLyoKKwkgKiBMZXQgdGhlIGJsb2NrIGxheWVyIGFzc2lnbnMgdGFncyB0byBhbGwgY29tbWFuZHMuCisJICovCisJdW5zaWduZWQgdXNlX2Jsa190YWdzOjE7CisKKwkvKgorCSAqIFRyYWNrIFFVRVVFX0ZVTEwgZXZlbnRzIGFuZCByZWR1Y2UgcXVldWUgZGVwdGggb24gZGVtYW5kLgorCSAqLworCXVuc2lnbmVkIHRyYWNrX3F1ZXVlX2RlcHRoOjE7CisKKwkvKgogCSAqIFRoaXMgc3BlY2lmaWVzIHRoZSBtb2RlIHRoYXQgYSBMTEQgc3VwcG9ydHMuCiAJICovCiAJdW5zaWduZWQgc3VwcG9ydGVkX21vZGU6MjsKQEAgLTQ1MSwxMSArNDU1LDYgQEAKIAkgKi8KIAl1bnNpZ25lZCBza2lwX3NldHRsZV9kZWxheToxOwogCi0JLyoKLQkgKiBUcnVlIGlmIHdlIGFyZSB1c2luZyBvcmRlcmVkIHdyaXRlIHN1cHBvcnQuCi0JICovCi0JdW5zaWduZWQgb3JkZXJlZF90YWc6MTsKLQogCS8qIFRydWUgaWYgdGhlIGNvbnRyb2xsZXIgZG9lcyBub3Qgc3VwcG9ydCBXUklURSBTQU1FICovCiAJdW5zaWduZWQgbm9fd3JpdGVfc2FtZToxOwogCkBAIC02MzgsNiArNjM3LDE0IEBACiAJc2hvcnQgdW5zaWduZWQgaW50IHNnX3Byb3RfdGFibGVzaXplOwogCXVuc2lnbmVkIGludCBtYXhfc2VjdG9yczsKIAl1bnNpZ25lZCBsb25nIGRtYV9ib3VuZGFyeTsKKwkvKgorCSAqIEluIHNjc2ktbXEgbW9kZSwgdGhlIG51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgc3VwcG9ydGVkIGJ5IHRoZSBMTEQuCisJICoKKwkgKiBOb3RlOiBpdCBpcyBhc3N1bWVkIHRoYXQgZWFjaCBoYXJkd2FyZSBxdWV1ZSBoYXMgYSBxdWV1ZSBkZXB0aCBvZgorCSAqIGNhbl9xdWV1ZS4gSW4gb3RoZXIgd29yZHMsIHRoZSB0b3RhbCBxdWV1ZSBkZXB0aCBwZXIgaG9zdAorCSAqIGlzIG5yX2h3X3F1ZXVlcyAqIGNhbl9xdWV1ZS4KKwkgKi8KKwl1bnNpZ25lZCBucl9od19xdWV1ZXM7CiAJLyogCiAJICogVXNlZCB0byBhc3NpZ24gc2VyaWFsIG51bWJlcnMgdG8gdGhlIGNtZHMuCiAJICogUHJvdGVjdGVkIGJ5IHRoZSBob3N0IGxvY2suCkBAIC02NDcsNyArNjU0LDYgQEAKIAl1bnNpZ25lZCBhY3RpdmVfbW9kZToyOwogCXVuc2lnbmVkIHVuY2hlY2tlZF9pc2FfZG1hOjE7CiAJdW5zaWduZWQgdXNlX2NsdXN0ZXJpbmc6MTsKLQl1bnNpZ25lZCB1c2VfYmxrX3RjcToxOwogCiAJLyoKIAkgKiBIb3N0IGhhcyByZXF1ZXN0ZWQgdGhhdCBubyBmdXJ0aGVyIHJlcXVlc3RzIGNvbWUgdGhyb3VnaCBmb3IgdGhlCkBAIC02NjIsMTEgKzY2OCw2IEBACiAJICovCiAJdW5zaWduZWQgcmV2ZXJzZV9vcmRlcmluZzoxOwogCi0JLyoKLQkgKiBPcmRlcmVkIHdyaXRlIHN1cHBvcnQKLQkgKi8KLQl1bnNpZ25lZCBvcmRlcmVkX3RhZzoxOwotCiAJLyogVGFzayBtZ210IGZ1bmN0aW9uIGluIHByb2dyZXNzICovCiAJdW5zaWduZWQgdG1mX2luX3Byb2dyZXNzOjE7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9pb2N0bC5oCmluZGV4IGI5MDA2ODQuLjhkMTlkMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaApAQCAtNDAsOSArNDAsOSBAQAogCXVuc2lnbmVkIGNoYXIgaG9zdF93d25bOF07IC8vIGluY2x1ZGUgTlVMTCB0ZXJtLgogfSBTY3NpX0ZDVGFyZ0FkZHJlc3M7CiAKK2ludCBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAorCQlpbnQgY21kLCBib29sIG5kZWxheSk7CiBleHRlcm4gaW50IHNjc2lfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCwgdm9pZCBfX3VzZXIgKik7Ci1leHRlcm4gaW50IHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGNtZCwKLQkJCQkgICB2b2lkIF9fdXNlciAqYXJnLCBpbnQgbmRlbGF5KTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfU0NTSV9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90Y3EuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCmluZGV4IDU2ZWQ4NDMuLmZlNGE3MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCkBAIC0xNiwyMCArMTYsMTYgQEAKIAogI2lmZGVmIENPTkZJR19CTE9DSwogCitpbnQgc2NzaV9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSk7CisKIC8qKgogICogc2NzaV9nZXRfdGFnX3R5cGUgLSBnZXQgdGhlIHR5cGUgb2YgdGFnIHRoZSBkZXZpY2Ugc3VwcG9ydHMKICAqIEBzZGV2Ogl0aGUgc2NzaSBkZXZpY2UKLSAqCi0gKiBOb3RlczoKLSAqCUlmIHRoZSBkcml2ZSBvbmx5IHN1cHBvcnRzIHNpbXBsZSB0YWdzLCByZXR1cm5zIE1TR19TSU1QTEVfVEFHCi0gKglpZiBpdCBzdXBwb3J0cyBhbGwgdGFnIHR5cGVzLCByZXR1cm5zIE1TR19PUkRFUkVEX1RBRy4KICAqLwogc3RhdGljIGlubGluZSBpbnQgc2NzaV9nZXRfdGFnX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCWlmICghc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKIAkJcmV0dXJuIDA7Ci0JaWYgKHNkZXYtPm9yZGVyZWRfdGFncykKLQkJcmV0dXJuIE1TR19PUkRFUkVEX1RBRzsKIAlpZiAoc2Rldi0+c2ltcGxlX3RhZ3MpCiAJCXJldHVybiBNU0dfU0lNUExFX1RBRzsKIAlyZXR1cm4gMDsKQEAgLTM5LDkwICszNSwzMyBAQAogewogCXN3aXRjaCAodGFnKSB7CiAJY2FzZSBNU0dfT1JERVJFRF9UQUc6Ci0JCXNkZXYtPm9yZGVyZWRfdGFncyA9IDE7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgTVNHX1NJTVBMRV9UQUc6CiAJCXNkZXYtPnNpbXBsZV90YWdzID0gMTsKIAkJYnJlYWs7CiAJY2FzZSAwOgogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAwOwogCQlzZGV2LT5zaW1wbGVfdGFncyA9IDA7CiAJCWJyZWFrOwogCX0KIH0KLS8qKgotICogc2NzaV9hY3RpdmF0ZV90Y3EgLSB0dXJuIG9uIHRhZyBjb21tYW5kIHF1ZXVlaW5nCi0gKiBAU0RwbnQ6CWRldmljZSB0byB0dXJuIG9uIFRDUSBmb3IKLSAqIEBkZXB0aDoJcXVldWUgZGVwdGgKLSAqCi0gKiBOb3RlczoKLSAqCUV2ZW50dWFsbHksIEkgaG9wZSBkZXB0aCB3b3VsZCBiZSB0aGUgbWF4aW11bSBkZXB0aAotICoJdGhlIGRldmljZSBjb3VsZCBjb3BlIHdpdGggYW5kIHRoZSByZWFsIHF1ZXVlIGRlcHRoCi0gKgl3b3VsZCBiZSBhZGp1c3RhYmxlIGZyb20gMCB0byBkZXB0aC4KLSAqKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2FjdGl2YXRlX3RjcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKLXsKLQlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JCXJldHVybjsKLQotCWlmIChzaG9zdF91c2VfYmxrX21xKHNkZXYtPmhvc3QpKQotCQlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX1FVRVVFRCwgc2Rldi0+cmVxdWVzdF9xdWV1ZSk7Ci0JZWxzZSBpZiAoIWJsa19xdWV1ZV90YWdnZWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSkpCi0JCWJsa19xdWV1ZV9pbml0X3RhZ3Moc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZGVwdGgsCi0JCQkJICAgIHNkZXYtPmhvc3QtPmJxdCk7Ci0KLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgZGVwdGgpOwotfQotCi0vKioKLSAqIHNjc2lfZGVhY3RpdmF0ZV90Y3EgLSB0dXJuIG9mZiB0YWcgY29tbWFuZCBxdWV1ZWluZwotICogQFNEcG50OglkZXZpY2UgdG8gdHVybiBvZmYgVENRIGZvcgotICoqLwotc3RhdGljIGlubGluZSB2b2lkIHNjc2lfZGVhY3RpdmF0ZV90Y3Eoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCi17Ci0JaWYgKGJsa19xdWV1ZV90YWdnZWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSkpCi0JCWJsa19xdWV1ZV9mcmVlX3RhZ3Moc2Rldi0+cmVxdWVzdF9xdWV1ZSk7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgZGVwdGgpOwotfQotCi0vKioKLSAqIHNjc2lfcG9wdWxhdGVfdGFnX21zZyAtIHBsYWNlIGEgdGFnIG1lc3NhZ2UgaW4gYSBidWZmZXIKLSAqIEBTQ3BudDoJcG9pbnRlciB0byB0aGUgU2NzaV9DbW5kIGZvciB0aGUgdGFnCi0gKiBAbXNnOglwb2ludGVyIHRvIHRoZSBhcmVhIHRvIHBsYWNlIHRoZSB0YWcKLSAqCi0gKiBOb3RlczoKLSAqCWRlc2lnbmVkIHRvIGNyZWF0ZSB0aGUgY29ycmVjdCB0eXBlIG9mIHRhZyBtZXNzYWdlIGZvciB0aGUgCi0gKglwYXJ0aWN1bGFyIHJlcXVlc3QuICBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB0YWcgbWVzc2FnZS4KLSAqCU1heSByZXR1cm4gMCBpZiBUQ1EgaXMgZGlzYWJsZWQgZm9yIHRoaXMgZGV2aWNlLgotICoqLwotc3RhdGljIGlubGluZSBpbnQgc2NzaV9wb3B1bGF0ZV90YWdfbXNnKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgY2hhciAqbXNnKQotewotICAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gY21kLT5yZXF1ZXN0OwotCi0gICAgICAgIGlmIChibGtfcnFfdGFnZ2VkKHJlcSkpIHsKLQkJKm1zZysrID0gTVNHX1NJTVBMRV9UQUc7Ci0gICAgICAgIAkqbXNnKysgPSByZXEtPnRhZzsKLSAgICAgICAgCXJldHVybiAyOwotCX0KLQotCXJldHVybiAwOwotfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfbXFfZmluZF90YWcoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCi0JCXVuc2lnbmVkIGludCBod19jdHgsIGludCB0YWcpCisJCQkJCQkgaW50IHVuaXF1ZV90YWcpCiB7Ci0Jc3RydWN0IHJlcXVlc3QgKnJlcTsKKwl1MTYgaHdxID0gYmxrX21xX3VuaXF1ZV90YWdfdG9faHdxKHVuaXF1ZV90YWcpOworCXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBOVUxMOwogCi0JcmVxID0gYmxrX21xX3RhZ190b19ycShzaG9zdC0+dGFnX3NldC50YWdzW2h3X2N0eF0sIHRhZyk7CisJaWYgKGh3cSA8IHNob3N0LT50YWdfc2V0Lm5yX2h3X3F1ZXVlcykKKwkJcmVxID0gYmxrX21xX3RhZ190b19ycShzaG9zdC0+dGFnX3NldC50YWdzW2h3cV0sCisJCQkJICAgICAgIGJsa19tcV91bmlxdWVfdGFnX3RvX3RhZyh1bmlxdWVfdGFnKSk7CiAJcmV0dXJuIHJlcSA/IChzdHJ1Y3Qgc2NzaV9jbW5kICopcmVxLT5zcGVjaWFsIDogTlVMTDsKIH0KIAogLyoqCiAgKiBzY3NpX2ZpbmRfdGFnIC0gZmluZCBhIHRhZ2dlZCBjb21tYW5kIGJ5IGRldmljZQogICogQFNEcG50Oglwb2ludGVyIHRvIHRoZSBTY1NJIGRldmljZQotICogQHRhZzoJdGhlIHRhZyBudW1iZXIKKyAqIEB0YWc6CXRhZyBnZW5lcmF0ZWQgYnkgYmxrX21xX3VuaXF1ZV90YWcoKQogICoKICAqIE5vdGVzOgogICoJT25seSB3b3JrcyB3aXRoIHRhZ3MgYWxsb2NhdGVkIGJ5IHRoZSBnZW5lcmljIGJsayBsYXllci4KQEAgLTEzMyw5ICs3Miw5IEBACiAKICAgICAgICAgaWYgKHRhZyAhPSBTQ1NJX05PX1RBRykgewogCQlpZiAoc2hvc3RfdXNlX2Jsa19tcShzZGV2LT5ob3N0KSkKLQkJCXJldHVybiBzY3NpX21xX2ZpbmRfdGFnKHNkZXYtPmhvc3QsIDAsIHRhZyk7CisJCQlyZXR1cm4gc2NzaV9tcV9maW5kX3RhZyhzZGV2LT5ob3N0LCB0YWcpOwogCi0gICAgICAgIAlyZXEgPSBibGtfcXVldWVfZmluZF90YWcoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgdGFnKTsKKwkJcmVxID0gYmxrX3F1ZXVlX2ZpbmRfdGFnKHNkZXYtPnJlcXVlc3RfcXVldWUsIHRhZyk7CiAJICAgICAgICByZXR1cm4gcmVxID8gKHN0cnVjdCBzY3NpX2NtbmQgKilyZXEtPnNwZWNpYWwgOiBOVUxMOwogCX0KIApAQCAtMTc0LDcgKzExMyw3IEBACiAvKioKICAqIHNjc2lfaG9zdF9maW5kX3RhZyAtIGZpbmQgdGhlIHRhZ2dlZCBjb21tYW5kIGJ5IGhvc3QKICAqIEBzaG9zdDoJcG9pbnRlciB0byBzY3NpX2hvc3QKLSAqIEB0YWc6CXRhZyBvZiB0aGUgc2NzaV9jbW5kCisgKiBAdGFnOgl0YWcgZ2VuZXJhdGVkIGJ5IGJsa19tcV91bmlxdWVfdGFnKCkKICAqCiAgKiBOb3RlczoKICAqCU9ubHkgd29ya3Mgd2l0aCB0YWdzIGFsbG9jYXRlZCBieSB0aGUgZ2VuZXJpYyBibGsgbGF5ZXIuCkBAIC0xODYsNyArMTI1LDcgQEAKIAogCWlmICh0YWcgIT0gU0NTSV9OT19UQUcpIHsKIAkJaWYgKHNob3N0X3VzZV9ibGtfbXEoc2hvc3QpKQotCQkJcmV0dXJuIHNjc2lfbXFfZmluZF90YWcoc2hvc3QsIDAsIHRhZyk7CisJCQlyZXR1cm4gc2NzaV9tcV9maW5kX3RhZyhzaG9zdCwgdGFnKTsKIAkJcmVxID0gYmxrX21hcF9xdWV1ZV9maW5kX3RhZyhzaG9zdC0+YnF0LCB0YWcpOwogCQlyZXR1cm4gcmVxID8gKHN0cnVjdCBzY3NpX2NtbmQgKilyZXEtPnNwZWNpYWwgOiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaAppbmRleCA3NDk3YTM4Li5hNGZhNTJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oCkBAIC0xNTcsNSArMTU3LDYgQEAKIGludCBzcGlfcG9wdWxhdGVfc3luY19tc2codW5zaWduZWQgY2hhciAqbXNnLCBpbnQgcGVyaW9kLCBpbnQgb2Zmc2V0KTsKIGludCBzcGlfcG9wdWxhdGVfcHByX21zZyh1bnNpZ25lZCBjaGFyICptc2csIGludCBwZXJpb2QsIGludCBvZmZzZXQsIGludCB3aWR0aCwKIAkJaW50IG9wdGlvbnMpOworaW50IHNwaV9wb3B1bGF0ZV90YWdfbXNnKHVuc2lnbmVkIGNoYXIgKm1zZywgc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIAogI2VuZGlmIC8qIFNDU0lfVFJBTlNQT1JUX1NQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2cuaCBiL2luY2x1ZGUvc2NzaS9zZy5oCmluZGV4IDc1MGU1ZGIuLjNhZmVjNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zZy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zZy5oCkBAIC0xNjQsMTIgKzE2NCwxNSBAQAogCiAvKiBSZXR1cm5zIC1FQlVTWSBpZiBvY2N1cGllZC4gM3JkIGFyZ3VtZW50IHBvaW50ZXIgdG8gaW50IChzZWUgbmV4dCkgKi8KICNkZWZpbmUgU0dfU0NTSV9SRVNFVCAweDIyODQKLS8qIEFzc29jaWF0ZWQgdmFsdWVzIHRoYXQgY2FuIGJlIGdpdmVuIHRvIFNHX1NDU0lfUkVTRVQgZm9sbG93ICovCisvKiBBc3NvY2lhdGVkIHZhbHVlcyB0aGF0IGNhbiBiZSBnaXZlbiB0byBTR19TQ1NJX1JFU0VUIGZvbGxvdy4KKyAqIFNHX1NDU0lfUkVTRVRfTk9fRVNDQUxBVEUgbWF5IGJlIE9SLWVkIHRvIHRoZSBfREVWSUNFLCBfVEFSR0VULCBfQlVTCisgKiBvciBfSE9TVCByZXNldCB2YWx1ZSBzbyBvbmx5IHRoYXQgYWN0aW9uIGlzIGF0dGVtcHRlZC4gKi8KICNkZWZpbmUJCVNHX1NDU0lfUkVTRVRfTk9USElORwkwCiAjZGVmaW5lCQlTR19TQ1NJX1JFU0VUX0RFVklDRQkxCiAjZGVmaW5lCQlTR19TQ1NJX1JFU0VUX0JVUwkyCiAjZGVmaW5lCQlTR19TQ1NJX1JFU0VUX0hPU1QJMwogI2RlZmluZQkJU0dfU0NTSV9SRVNFVF9UQVJHRVQJNAorI2RlZmluZQkJU0dfU0NTSV9SRVNFVF9OT19FU0NBTEFURQkweDEwMAogCiAvKiBzeW5jaHJvbm91cyBTQ1NJIGNvbW1hbmQgaW9jdGwsIChvbmx5IGluIHZlcnNpb24gMyBpbnRlcmZhY2UpICovCiAjZGVmaW5lIFNHX0lPIDB4MjI4NSAgIC8qIHNpbWlsYXIgZWZmZWN0IGFzIHdyaXRlKCkgZm9sbG93ZWQgYnkgcmVhZCgpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFybTkyMDBfc2RyYW1jLmggYi9pbmNsdWRlL3NvYy9hdDkxL2F0OTFybTkyMDBfc2RyYW1jLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXJtOTIwMF9zZHJhbWMuaApyZW5hbWUgdG8gaW5jbHVkZS9zb2MvYXQ5MS9hdDkxcm05MjAwX3NkcmFtYy5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05X2RkcnNkci5oIGIvaW5jbHVkZS9zb2MvYXQ5MS9hdDkxc2FtOV9kZHJzZHIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOV9kZHJzZHIuaApyZW5hbWUgdG8gaW5jbHVkZS9zb2MvYXQ5MS9hdDkxc2FtOV9kZHJzZHIuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOV9zZHJhbWMuaCBiL2luY2x1ZGUvc29jL2F0OTEvYXQ5MXNhbTlfc2RyYW1jLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTlfc2RyYW1jLmgKcmVuYW1lIHRvIGluY2x1ZGUvc29jL2F0OTEvYXQ5MXNhbTlfc2RyYW1jLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc29jL3RlZ3JhL21jLmggYi9pbmNsdWRlL3NvYy90ZWdyYS9tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGViOGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvYy90ZWdyYS9tYy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1NPQ19URUdSQV9NQ19IX18KKyNkZWZpbmUgX19TT0NfVEVHUkFfTUNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgY2xrOworc3RydWN0IGRldmljZTsKK3N0cnVjdCBwYWdlOworCitzdHJ1Y3QgdGVncmFfc21tdV9lbmFibGUgeworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgaW50IGJpdDsKK307CisKKy8qIGxhdGVuY3kgYWxsb3dhbmNlICovCitzdHJ1Y3QgdGVncmFfbWNfbGEgeworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgaW50IHNoaWZ0OworCXVuc2lnbmVkIGludCBtYXNrOworCXVuc2lnbmVkIGludCBkZWY7Cit9OworCitzdHJ1Y3QgdGVncmFfbWNfY2xpZW50IHsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgc3dncm91cDsKKworCXVuc2lnbmVkIGludCBmaWZvX3NpemU7CisKKwlzdHJ1Y3QgdGVncmFfc21tdV9lbmFibGUgc21tdTsKKwlzdHJ1Y3QgdGVncmFfbWNfbGEgbGE7Cit9OworCitzdHJ1Y3QgdGVncmFfc21tdV9zd2dyb3VwIHsKKwl1bnNpZ25lZCBpbnQgc3dncm91cDsKKwl1bnNpZ25lZCBpbnQgcmVnOworfTsKKworc3RydWN0IHRlZ3JhX3NtbXVfb3BzIHsKKwl2b2lkICgqZmx1c2hfZGNhY2hlKShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgICAgIHNpemVfdCBzaXplKTsKK307CisKK3N0cnVjdCB0ZWdyYV9zbW11X3NvYyB7CisJY29uc3Qgc3RydWN0IHRlZ3JhX21jX2NsaWVudCAqY2xpZW50czsKKwl1bnNpZ25lZCBpbnQgbnVtX2NsaWVudHM7CisKKwljb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zd2dyb3VwICpzd2dyb3VwczsKKwl1bnNpZ25lZCBpbnQgbnVtX3N3Z3JvdXBzOworCisJYm9vbCBzdXBwb3J0c19yb3VuZF9yb2Jpbl9hcmJpdHJhdGlvbjsKKwlib29sIHN1cHBvcnRzX3JlcXVlc3RfbGltaXQ7CisKKwl1bnNpZ25lZCBpbnQgbnVtX2FzaWRzOworCisJY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfb3BzICpvcHM7Cit9OworCitzdHJ1Y3QgdGVncmFfbWM7CitzdHJ1Y3QgdGVncmFfc21tdTsKKworI2lmZGVmIENPTkZJR19URUdSQV9JT01NVV9TTU1VCitzdHJ1Y3QgdGVncmFfc21tdSAqdGVncmFfc21tdV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3NvYyAqc29jLAorCQkJCSAgICBzdHJ1Y3QgdGVncmFfbWMgKm1jKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0ZWdyYV9zbW11ICoKK3RlZ3JhX3NtbXVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zb2MgKnNvYywKKwkJIHN0cnVjdCB0ZWdyYV9tYyAqbWMpCit7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworc3RydWN0IHRlZ3JhX21jX3NvYyB7CisJY29uc3Qgc3RydWN0IHRlZ3JhX21jX2NsaWVudCAqY2xpZW50czsKKwl1bnNpZ25lZCBpbnQgbnVtX2NsaWVudHM7CisKKwljb25zdCB1bnNpZ25lZCBpbnQgKmVtZW1fcmVnczsKKwl1bnNpZ25lZCBpbnQgbnVtX2VtZW1fcmVnczsKKworCXVuc2lnbmVkIGludCBudW1fYWRkcmVzc19iaXRzOworCXVuc2lnbmVkIGludCBhdG9tX3NpemU7CisKKwljb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zb2MgKnNtbXU7Cit9OworCitzdHJ1Y3QgdGVncmFfbWMgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdGVncmFfc21tdSAqc21tdTsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGNsayAqY2xrOworCWludCBpcnE7CisKKwljb25zdCBzdHJ1Y3QgdGVncmFfbWNfc29jICpzb2M7CisJdW5zaWduZWQgbG9uZyB0aWNrOworfTsKKworI2VuZGlmIC8qIF9fU09DX1RFR1JBX01DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaAppbmRleCBlMzM1ZTdkLi5jNzhlODhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaApAQCAtMzYsNyArMzYsNyBAQAogCiAjaWZkZWYgQ09ORklHX1JDVV9UUkFDRQogCi0jaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpCisjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1BSRUVNUFRfUkNVKQogCiAvKgogICogVHJhY2Vwb2ludCBmb3IgZ3JhY2UtcGVyaW9kIGV2ZW50cy4gIFRha2VzIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZQpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJCSAgX19lbnRyeS0+Y3B1LCBfX2VudHJ5LT5xc2V2ZW50KQogKTsKIAotI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkgKi8KKyNlbmRpZiAvKiAjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1BSRUVNUFRfUkNVKSAqLwogCiAvKgogICogVHJhY2Vwb2ludCBmb3IgZHludGljay1pZGxlIGVudHJ5L2V4aXQgZXZlbnRzLiAgVGhlc2UgdGFrZSBhIHN0cmluZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmgKaW5kZXggMGE2OGQ1YS4uMzBmZWRhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oCkBAIC05NywxNiArOTcsMTkgQEAKIAlsb25nIHN0YXRlID0gcC0+c3RhdGU7CiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVAorI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRworCUJVR19PTihwICE9IGN1cnJlbnQpOworI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9ERUJVRyAqLwogCS8qCiAJICogRm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcyBhIHByZWVtcHRlZCB0YXNrIGlzIGEgcnVubmluZyB0YXNrLgogCSAqLwotCWlmICh0YXNrX3ByZWVtcHRfY291bnQocCkgJiBQUkVFTVBUX0FDVElWRSkKKwlpZiAocHJlZW1wdF9jb3VudCgpICYgUFJFRU1QVF9BQ1RJVkUpCiAJCXN0YXRlID0gVEFTS19SVU5OSU5HIHwgVEFTS19TVEFURV9NQVg7Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVCAqLwogCiAJcmV0dXJuIHN0YXRlOwogfQotI2VuZGlmCisjZW5kaWYgLyogQ1JFQVRFX1RSQUNFX1BPSU5UUyAqLwogCiAvKgogICogVHJhY2Vwb2ludCBmb3IgdGFzayBzd2l0Y2hlcywgcGVyZm9ybWVkIGJ5IHRoZSBzY2hlZHVsZXI6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY3NpLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY3NpLmgKaW5kZXggZGI2YzkzNS4uMDc5YmQxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NzaS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Njc2kuaApAQCAtOTQsNyArOTQsNyBAQAogCQlzY3NpX29wY29kZV9uYW1lKFdSSVRFXzE2KSwJCQlcCiAJCXNjc2lfb3Bjb2RlX25hbWUoVkVSSUZZXzE2KSwJCQlcCiAJCXNjc2lfb3Bjb2RlX25hbWUoV1JJVEVfU0FNRV8xNiksCQlcCi0JCXNjc2lfb3Bjb2RlX25hbWUoU0VSVklDRV9BQ1RJT05fSU4pLAkJXAorCQlzY3NpX29wY29kZV9uYW1lKFNFUlZJQ0VfQUNUSU9OX0lOXzE2KSwJCVwKIAkJc2NzaV9vcGNvZGVfbmFtZShTQUlfUkVBRF9DQVBBQ0lUWV8xNiksCQlcCiAJCXNjc2lfb3Bjb2RlX25hbWUoU0FJX0dFVF9MQkFfU1RBVFVTKSwJCVwKIAkJc2NzaV9vcGNvZGVfbmFtZShNSV9SRVBPUlRfVEFSR0VUX1BHUyksCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zdW5ycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3N1bnJwYy5oCmluZGV4IDFmZWYzZTYuLjE3MWNhNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3N1bnJwYy5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3N1bnJwYy5oCkBAIC02LDYgKzYsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3hwcnRzb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3RjcF9zdGF0ZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CkBAIC0zMDYsNiArMzA4LDE2NCBAQAogREVGSU5FX1JQQ19TT0NLRVRfRVZFTlQocnBjX3NvY2tldF9jbG9zZSk7CiBERUZJTkVfUlBDX1NPQ0tFVF9FVkVOVChycGNfc29ja2V0X3NodXRkb3duKTsKIAorREVDTEFSRV9FVkVOVF9DTEFTUyhycGNfeHBydF9ldmVudCwKKwlUUF9QUk9UTyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIF9fYmUzMiB4aWQsIGludCBzdGF0dXMpLAorCisJVFBfQVJHUyh4cHJ0LCB4aWQsIHN0YXR1cyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fYmUzMiwgeGlkKQorCQlfX2ZpZWxkKGludCwgc3RhdHVzKQorCQlfX3N0cmluZyhhZGRyLCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0pCisJCV9fc3RyaW5nKHBvcnQsIHhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QT1JUXSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnhpZCA9IHhpZDsKKwkJX19lbnRyeS0+c3RhdHVzID0gc3RhdHVzOworCQlfX2Fzc2lnbl9zdHIoYWRkciwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FERFJdKTsKKwkJX19hc3NpZ25fc3RyKHBvcnQsIHhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QT1JUXSk7CisJKSwKKworCVRQX3ByaW50aygicGVlcj1bJXNdOiVzIHhpZD0weCV4IHN0YXR1cz0lZCIsIF9fZ2V0X3N0cihhZGRyKSwKKwkJCV9fZ2V0X3N0cihwb3J0KSwgYmUzMl90b19jcHUoX19lbnRyeS0+eGlkKSwKKwkJCV9fZW50cnktPnN0YXR1cykKKyk7CisKK0RFRklORV9FVkVOVChycGNfeHBydF9ldmVudCwgeHBydF9sb29rdXBfcnFzdCwKKwlUUF9QUk9UTyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIF9fYmUzMiB4aWQsIGludCBzdGF0dXMpLAorCVRQX0FSR1MoeHBydCwgeGlkLCBzdGF0dXMpKTsKKworREVGSU5FX0VWRU5UKHJwY194cHJ0X2V2ZW50LCB4cHJ0X3RyYW5zbWl0LAorCVRQX1BST1RPKHN0cnVjdCBycGNfeHBydCAqeHBydCwgX19iZTMyIHhpZCwgaW50IHN0YXR1cyksCisJVFBfQVJHUyh4cHJ0LCB4aWQsIHN0YXR1cykpOworCitERUZJTkVfRVZFTlQocnBjX3hwcnRfZXZlbnQsIHhwcnRfY29tcGxldGVfcnFzdCwKKwlUUF9QUk9UTyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIF9fYmUzMiB4aWQsIGludCBzdGF0dXMpLAorCVRQX0FSR1MoeHBydCwgeGlkLCBzdGF0dXMpKTsKKworVFJBQ0VfRVZFTlQoeHNfdGNwX2RhdGFfcmVhZHksCisJVFBfUFJPVE8oc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBpbnQgZXJyLCB1bnNpZ25lZCBpbnQgdG90YWwpLAorCisJVFBfQVJHUyh4cHJ0LCBlcnIsIHRvdGFsKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoaW50LCBlcnIpCisJCV9fZmllbGQodW5zaWduZWQgaW50LCB0b3RhbCkKKwkJX19zdHJpbmcoYWRkciwgeHBydCA/IHhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSA6CisJCQkJIihudWxsKSIpCisJCV9fc3RyaW5nKHBvcnQsIHhwcnQgPyB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0gOgorCQkJCSIobnVsbCkiKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZXJyID0gZXJyOworCQlfX2VudHJ5LT50b3RhbCA9IHRvdGFsOworCQlfX2Fzc2lnbl9zdHIoYWRkciwgeHBydCA/CisJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0gOiAiKG51bGwpIik7CisJCV9fYXNzaWduX3N0cihwb3J0LCB4cHJ0ID8KKwkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QT1JUXSA6ICIobnVsbCkiKTsKKwkpLAorCisJVFBfcHJpbnRrKCJwZWVyPVslc106JXMgZXJyPSVkIHRvdGFsPSV1IiwgX19nZXRfc3RyKGFkZHIpLAorCQkJX19nZXRfc3RyKHBvcnQpLCBfX2VudHJ5LT5lcnIsIF9fZW50cnktPnRvdGFsKQorKTsKKworI2RlZmluZSBycGNfc2hvd19zb2NrX3hwcnRfZmxhZ3MoZmxhZ3MpIFwKKwlfX3ByaW50X2ZsYWdzKGZsYWdzLCAifCIsIFwKKwkJeyBUQ1BfUkNWX0xBU1RfRlJBRywgIlRDUF9SQ1ZfTEFTVF9GUkFHIiB9LCBcCisJCXsgVENQX1JDVl9DT1BZX0ZSQUdIRFIsICJUQ1BfUkNWX0NPUFlfRlJBR0hEUiIgfSwgXAorCQl7IFRDUF9SQ1ZfQ09QWV9YSUQsICJUQ1BfUkNWX0NPUFlfWElEIiB9LCBcCisJCXsgVENQX1JDVl9DT1BZX0RBVEEsICJUQ1BfUkNWX0NPUFlfREFUQSIgfSwgXAorCQl7IFRDUF9SQ1ZfUkVBRF9DQUxMRElSLCAiVENQX1JDVl9SRUFEX0NBTExESVIiIH0sIFwKKwkJeyBUQ1BfUkNWX0NPUFlfQ0FMTERJUiwgIlRDUF9SQ1ZfQ09QWV9DQUxMRElSIiB9LCBcCisJCXsgVENQX1JQQ19SRVBMWSwgIlRDUF9SUENfUkVQTFkiIH0pCisKK1RSQUNFX0VWRU5UKHhzX3RjcF9kYXRhX3JlY3YsCisJVFBfUFJPVE8oc3RydWN0IHNvY2tfeHBydCAqeHMpLAorCisJVFBfQVJHUyh4cyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX3N0cmluZyhhZGRyLCB4cy0+eHBydC5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0pCisJCV9fc3RyaW5nKHBvcnQsIHhzLT54cHJ0LmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QT1JUXSkKKwkJX19maWVsZChfX2JlMzIsIHhpZCkKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBmbGFncykKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBjb3BpZWQpCisJCV9fZmllbGQodW5zaWduZWQgaW50LCByZWNsZW4pCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgb2Zmc2V0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKGFkZHIsIHhzLT54cHJ0LmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSk7CisJCV9fYXNzaWduX3N0cihwb3J0LCB4cy0+eHBydC5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0pOworCQlfX2VudHJ5LT54aWQgPSB4cy0+dGNwX3hpZDsKKwkJX19lbnRyeS0+ZmxhZ3MgPSB4cy0+dGNwX2ZsYWdzOworCQlfX2VudHJ5LT5jb3BpZWQgPSB4cy0+dGNwX2NvcGllZDsKKwkJX19lbnRyeS0+cmVjbGVuID0geHMtPnRjcF9yZWNsZW47CisJCV9fZW50cnktPm9mZnNldCA9IHhzLT50Y3Bfb2Zmc2V0OworCSksCisKKwlUUF9wcmludGsoInBlZXI9WyVzXTolcyB4aWQ9MHgleCBmbGFncz0lcyBjb3BpZWQ9JWx1IHJlY2xlbj0ldSBvZmZzZXQ9JWx1IiwKKwkJCV9fZ2V0X3N0cihhZGRyKSwgX19nZXRfc3RyKHBvcnQpLCBiZTMyX3RvX2NwdShfX2VudHJ5LT54aWQpLAorCQkJcnBjX3Nob3dfc29ja194cHJ0X2ZsYWdzKF9fZW50cnktPmZsYWdzKSwKKwkJCV9fZW50cnktPmNvcGllZCwgX19lbnRyeS0+cmVjbGVuLCBfX2VudHJ5LT5vZmZzZXQpCispOworCitUUkFDRV9FVkVOVChzdmNfcmVjdiwKKwlUUF9QUk9UTyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3QsIGludCBzdGF0dXMpLAorCisJVFBfQVJHUyhycXN0LCBzdGF0dXMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3Qgc29ja2FkZHIgKiwgYWRkcikKKwkJX19maWVsZChfX2JlMzIsIHhpZCkKKwkJX19maWVsZChpbnQsIHN0YXR1cykKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnJxc3QtPnJxX2FkZHI7CisJCV9fZW50cnktPnhpZCA9IHN0YXR1cyA+IDAgPyBycXN0LT5ycV94aWQgOiAwOworCQlfX2VudHJ5LT5zdGF0dXMgPSBzdGF0dXM7CisJKSwKKworCVRQX3ByaW50aygiYWRkcj0lcElTY3AgeGlkPTB4JXggc3RhdHVzPSVkIiwgX19lbnRyeS0+YWRkciwKKwkJCWJlMzJfdG9fY3B1KF9fZW50cnktPnhpZCksIF9fZW50cnktPnN0YXR1cykKKyk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1Moc3ZjX3Jxc3Rfc3RhdHVzLAorCisJVFBfUFJPVE8oc3RydWN0IHN2Y19ycXN0ICpycXN0LCBpbnQgc3RhdHVzKSwKKworCVRQX0FSR1MocnFzdCwgc3RhdHVzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoc3RydWN0IHNvY2thZGRyICosIGFkZHIpCisJCV9fZmllbGQoX19iZTMyLCB4aWQpCisJCV9fZmllbGQoaW50LCBkcm9wbWUpCisJCV9fZmllbGQoaW50LCBzdGF0dXMpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZycXN0LT5ycV9hZGRyOworCQlfX2VudHJ5LT54aWQgPSBycXN0LT5ycV94aWQ7CisJCV9fZW50cnktPmRyb3BtZSA9IChpbnQpcnFzdC0+cnFfZHJvcG1lOworCQlfX2VudHJ5LT5zdGF0dXMgPSBzdGF0dXM7CisJKSwKKworCVRQX3ByaW50aygiYWRkcj0lcElTY3AgcnFfeGlkPTB4JXggZHJvcG1lPSVkIHN0YXR1cz0lZCIsCisJCV9fZW50cnktPmFkZHIsIGJlMzJfdG9fY3B1KF9fZW50cnktPnhpZCksIF9fZW50cnktPmRyb3BtZSwKKwkJX19lbnRyeS0+c3RhdHVzKQorKTsKKworREVGSU5FX0VWRU5UKHN2Y19ycXN0X3N0YXR1cywgc3ZjX3Byb2Nlc3MsCisJVFBfUFJPVE8oc3RydWN0IHN2Y19ycXN0ICpycXN0LCBpbnQgc3RhdHVzKSwKKwlUUF9BUkdTKHJxc3QsIHN0YXR1cykpOworCitERUZJTkVfRVZFTlQoc3ZjX3Jxc3Rfc3RhdHVzLCBzdmNfc2VuZCwKKwlUUF9QUk9UTyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3QsIGludCBzdGF0dXMpLAorCVRQX0FSR1MocnFzdCwgc3RhdHVzKSk7CisKICNlbmRpZiAvKiBfVFJBQ0VfU1VOUlBDX0ggKi8KIAogI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGFyZ2V0LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy90YXJnZXQuaAppbmRleCBkYTljYzBmLi40NTQwMzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy90YXJnZXQuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy90YXJnZXQuaApAQCAtOTYsNyArOTYsNyBAQAogCQlzY3NpX29wY29kZV9uYW1lKFdSSVRFXzE2KSwJCQlcCiAJCXNjc2lfb3Bjb2RlX25hbWUoVkVSSUZZXzE2KSwJCQlcCiAJCXNjc2lfb3Bjb2RlX25hbWUoV1JJVEVfU0FNRV8xNiksCQlcCi0JCXNjc2lfb3Bjb2RlX25hbWUoU0VSVklDRV9BQ1RJT05fSU4pLAkJXAorCQlzY3NpX29wY29kZV9uYW1lKFNFUlZJQ0VfQUNUSU9OX0lOXzE2KSwJCVwKIAkJc2NzaV9vcGNvZGVfbmFtZShTQUlfUkVBRF9DQVBBQ0lUWV8xNiksCQlcCiAJCXNjc2lfb3Bjb2RlX25hbWUoU0FJX0dFVF9MQkFfU1RBVFVTKSwJCVwKIAkJc2NzaV9vcGNvZGVfbmFtZShNSV9SRVBPUlRfVEFSR0VUX1BHUyksCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc2lnaW5mby5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NpZ2luZm8uaAppbmRleCBiYTViZTdmLi4xZTM1NTIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKQEAgLTkxLDYgKzkxLDEwIEBACiAJCQlpbnQgX3RyYXBubzsJLyogVFJBUCAjIHdoaWNoIGNhdXNlZCB0aGUgc2lnbmFsICovCiAjZW5kaWYKIAkJCXNob3J0IF9hZGRyX2xzYjsgLyogTFNCIG9mIHRoZSByZXBvcnRlZCBhZGRyZXNzICovCisJCQlzdHJ1Y3QgeworCQkJCXZvaWQgX191c2VyICpfbG93ZXI7CisJCQkJdm9pZCBfX3VzZXIgKl91cHBlcjsKKwkJCX0gX2FkZHJfYm5kOwogCQl9IF9zaWdmYXVsdDsKIAogCQkvKiBTSUdQT0xMICovCkBAIC0xMzEsNiArMTM1LDggQEAKICNkZWZpbmUgc2lfdHJhcG5vCV9zaWZpZWxkcy5fc2lnZmF1bHQuX3RyYXBubwogI2VuZGlmCiAjZGVmaW5lIHNpX2FkZHJfbHNiCV9zaWZpZWxkcy5fc2lnZmF1bHQuX2FkZHJfbHNiCisjZGVmaW5lIHNpX2xvd2VyCV9zaWZpZWxkcy5fc2lnZmF1bHQuX2FkZHJfYm5kLl9sb3dlcgorI2RlZmluZSBzaV91cHBlcglfc2lmaWVsZHMuX3NpZ2ZhdWx0Ll9hZGRyX2JuZC5fdXBwZXIKICNkZWZpbmUgc2lfYmFuZAkJX3NpZmllbGRzLl9zaWdwb2xsLl9iYW5kCiAjZGVmaW5lIHNpX2ZkCQlfc2lmaWVsZHMuX3NpZ3BvbGwuX2ZkCiAjaWZkZWYgX19BUkNIX1NJR1NZUwpAQCAtMTk5LDcgKzIwNSw4IEBACiAgKi8KICNkZWZpbmUgU0VHVl9NQVBFUlIJKF9fU0lfRkFVTFR8MSkJLyogYWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdCAqLwogI2RlZmluZSBTRUdWX0FDQ0VSUgkoX19TSV9GQVVMVHwyKQkvKiBpbnZhbGlkIHBlcm1pc3Npb25zIGZvciBtYXBwZWQgb2JqZWN0ICovCi0jZGVmaW5lIE5TSUdTRUdWCTIKKyNkZWZpbmUgU0VHVl9CTkRFUlIJKF9fU0lfRkFVTFR8MykgIC8qIGZhaWxlZCBhZGRyZXNzIGJvdW5kIGNoZWNrcyAqLworI2RlZmluZSBOU0lHU0VHVgkzCiAKIC8qCiAgKiBTSUdCVVMgc2lfY29kZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9kbS1pb2N0bC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2RtLWlvY3RsLmgKaW5kZXggMzMxNWFiMi4uYTU3MGQ3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2RtLWlvY3RsLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTI2Nyw5ICsyNjcsOSBAQAogI2RlZmluZSBETV9ERVZfU0VUX0dFT01FVFJZCV9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU0VUX0dFT01FVFJZX0NNRCwgc3RydWN0IGRtX2lvY3RsKQogCiAjZGVmaW5lIERNX1ZFUlNJT05fTUFKT1IJNAotI2RlZmluZSBETV9WRVJTSU9OX01JTk9SCTI4CisjZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IJMjkKICNkZWZpbmUgRE1fVkVSU0lPTl9QQVRDSExFVkVMCTAKLSNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDE0LTA5LTE3KSIKKyNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDE0LTEwLTI4KSIKIAogLyogU3RhdHVzIGJpdHMgKi8KICNkZWZpbmUgRE1fUkVBRE9OTFlfRkxBRwkoMSA8PCAwKSAvKiBJbi9PdXQgKi8KQEAgLTM1Miw0ICszNTIsOSBAQAogICovCiAjZGVmaW5lIERNX0RFRkVSUkVEX1JFTU9WRQkJKDEgPDwgMTcpIC8qIEluL091dCAqLwogCisvKgorICogSWYgc2V0LCB0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZCBpbnRlcm5hbGx5LgorICovCisjZGVmaW5lIERNX0lOVEVSTkFMX1NVU1BFTkRfRkxBRwkoMSA8PCAxOCkgLyogT3V0ICovCisKICNlbmRpZgkJCQkvKiBfTElOVVhfRE1fSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2VsZi1lbS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2VsZi1lbS5oCmluZGV4IGFhOTBiYzkuLmFlOTlmNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9lbGYtZW0uaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZWxmLWVtLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNkZWZpbmUgRU1fTU4xMDMwMAk4OQkvKiBQYW5hc29uaWMvTUVJIE1OMTAzMDAsIEFNMzMgKi8KICNkZWZpbmUgRU1fT1BFTlJJU0MgICAgIDkyICAgICAvKiBPcGVuUklTQyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCiAjZGVmaW5lIEVNX0JMQUNLRklOICAgICAxMDYgICAgIC8qIEFESSBCbGFja2ZpbiBQcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fQUxURVJBX05JT1MyCTExMwkvKiBBbHRlcmEgTmlvcyBJSSBzb2Z0LWNvcmUgcHJvY2Vzc29yICovCiAjZGVmaW5lIEVNX1RJX0M2MDAwCTE0MAkvKiBUSSBDNlggRFNQcyAqLwogI2RlZmluZSBFTV9BQVJDSDY0CTE4MwkvKiBBUk0gNjQgYml0ICovCiAjZGVmaW5lIEVNX0ZSVgkJMHg1NDQxCS8qIEZ1aml0c3UgRlItViAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2VsZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2VsZi5oCmluZGV4IGVhOWJmMjUuLjcxZTFkMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9lbGYuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZWxmLmgKQEAgLTM5Nyw2ICszOTcsNyBAQAogI2RlZmluZSBOVF9BUk1fVExTCTB4NDAxCQkvKiBBUk0gVExTIHJlZ2lzdGVyICovCiAjZGVmaW5lIE5UX0FSTV9IV19CUkVBSwkweDQwMgkJLyogQVJNIGhhcmR3YXJlIGJyZWFrcG9pbnQgcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5UX0FSTV9IV19XQVRDSAkweDQwMwkJLyogQVJNIGhhcmR3YXJlIHdhdGNocG9pbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5UX0FSTV9TWVNURU1fQ0FMTAkweDQwNAkvKiBBUk0gc3lzdGVtIGNhbGwgbnVtYmVyICovCiAjZGVmaW5lIE5UX01FVEFHX0NCVUYJMHg1MDAJCS8qIE1ldGFnIGNhdGNoIGJ1ZmZlciByZWdpc3RlcnMgKi8KICNkZWZpbmUgTlRfTUVUQUdfUlBJUEUJMHg1MDEJCS8qIE1ldGFnIHJlYWQgcGlwZWxpbmUgc3RhdGUgKi8KICNkZWZpbmUgTlRfTUVUQUdfVExTCTB4NTAyCQkvKiBNZXRhZyBUTFMgcG9pbnRlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25mc2QvZGVidWcuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZnNkL2RlYnVnLmgKaW5kZXggYTZmNDUzYy4uMWZkYzk1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25mc2QvZGVidWcuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmZzZC9kZWJ1Zy5oCkBAIC0xNSw3ICsxNSw3IEBACiAgKiBFbmFibGUgZGVidWdnaW5nIGZvciBuZnNkLgogICogUmVxdWlyZXMgUlBDX0RFQlVHLgogICovCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgTkZTRF9ERUJVRwkJMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDlkODQ1NDAuLjliNzlhYmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMTM3LDggKzEzNyw5IEBACiAJUEVSRl9TQU1QTEVfREFUQV9TUkMJCQk9IDFVIDw8IDE1LAogCVBFUkZfU0FNUExFX0lERU5USUZJRVIJCQk9IDFVIDw8IDE2LAogCVBFUkZfU0FNUExFX1RSQU5TQUNUSU9OCQkJPSAxVSA8PCAxNywKKwlQRVJGX1NBTVBMRV9SRUdTX0lOVFIJCQk9IDFVIDw8IDE4LAogCi0JUEVSRl9TQU1QTEVfTUFYID0gMVUgPDwgMTgsCQkvKiBub24tQUJJICovCisJUEVSRl9TQU1QTEVfTUFYID0gMVUgPDwgMTksCQkvKiBub24tQUJJICovCiB9OwogCiAvKgpAQCAtMjM4LDYgKzIzOSw3IEBACiAjZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjIJODAJLyogYWRkOiBicmFuY2hfc2FtcGxlX3R5cGUgKi8KICNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMwk5NgkvKiBhZGQ6IHNhbXBsZV9yZWdzX3VzZXIgKi8KIAkJCQkJLyogYWRkOiBzYW1wbGVfc3RhY2tfdXNlciAqLworI2RlZmluZSBQRVJGX0FUVFJfU0laRV9WRVI0CTEwNAkvKiBhZGQ6IHNhbXBsZV9yZWdzX2ludHIgKi8KIAogLyoKICAqIEhhcmR3YXJlIGV2ZW50X2lkIHRvIG1vbml0b3IgdmlhIGEgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBldmVudDoKQEAgLTMzNCw2ICszMzYsMTUgQEAKIAogCS8qIEFsaWduIHRvIHU2NC4gKi8KIAlfX3UzMglfX3Jlc2VydmVkXzI7CisJLyoKKwkgKiBEZWZpbmVzIHNldCBvZiByZWdzIHRvIGR1bXAgZm9yIGVhY2ggc2FtcGxlCisJICogc3RhdGUgY2FwdHVyZWQgb246CisJICogIC0gcHJlY2lzZSA9IDA6IFBNVSBpbnRlcnJ1cHQKKwkgKiAgLSBwcmVjaXNlID4gMDogc2FtcGxlZCBpbnN0cnVjdGlvbgorCSAqCisJICogU2VlIGFzbS9wZXJmX3JlZ3MuaCBmb3IgZGV0YWlscy4KKwkgKi8KKwlfX3U2NAlzYW1wbGVfcmVnc19pbnRyOwogfTsKIAogI2RlZmluZSBwZXJmX2ZsYWdzKGF0dHIpCSgqKCYoYXR0ciktPnJlYWRfZm9ybWF0ICsgMSkpCkBAIC02ODYsNiArNjk3LDggQEAKIAkgKgl7IHU2NAkJCXdlaWdodDsgICB9ICYmIFBFUkZfU0FNUExFX1dFSUdIVAogCSAqCXsgdTY0CQkJZGF0YV9zcmM7IH0gJiYgUEVSRl9TQU1QTEVfREFUQV9TUkMKIAkgKgl7IHU2NAkJCXRyYW5zYWN0aW9uOyB9ICYmIFBFUkZfU0FNUExFX1RSQU5TQUNUSU9OCisJICoJeyB1NjQJCQlhYmk7ICMgZW51bSBwZXJmX3NhbXBsZV9yZWdzX2FiaQorCSAqCSAgdTY0CQkJcmVnc1t3ZWlnaHQobWFzayldOyB9ICYmIFBFUkZfU0FNUExFX1JFR1NfSU5UUgogCSAqIH07CiAJICovCiAJUEVSRl9SRUNPUkRfU0FNUExFCQkJPSA5LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaAppbmRleCA1MTNkZjc1Li44OWY2MzUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaApAQCAtMTc5LDQgKzE3OSwxMCBAQAogI2RlZmluZSBQUl9TRVRfVEhQX0RJU0FCTEUJNDEKICNkZWZpbmUgUFJfR0VUX1RIUF9ESVNBQkxFCTQyCiAKKy8qCisgKiBUZWxsIHRoZSBrZXJuZWwgdG8gc3RhcnQvc3RvcCBoZWxwaW5nIHVzZXJzcGFjZSBtYW5hZ2UgYm91bmRzIHRhYmxlcy4KKyAqLworI2RlZmluZSBQUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQgIDQzCisjZGVmaW5lIFBSX01QWF9ESVNBQkxFX01BTkFHRU1FTlQgNDQKKwogI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9zY2hlZC5oCmluZGV4IGI5MzJiZTkuLmNjODlkZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9zY2hlZC5oCkBAIC0yMyw4ICsyMyw4IEBACiAjZGVmaW5lIENMT05FX0NISUxEX1NFVFRJRAkweDAxMDAwMDAwCS8qIHNldCB0aGUgVElEIGluIHRoZSBjaGlsZCAqLwogLyogMHgwMjAwMDAwMCB3YXMgcHJldmlvdXNseSB0aGUgdW51c2VkIENMT05FX1NUT1BQRUQgKFN0YXJ0IGluIHN0b3BwZWQgc3RhdGUpCiAgICBhbmQgaXMgbm93IGF2YWlsYWJsZSBmb3IgcmUtdXNlLiAqLwotI2RlZmluZSBDTE9ORV9ORVdVVFMJCTB4MDQwMDAwMDAJLyogTmV3IHV0c25hbWUgZ3JvdXA/ICovCi0jZGVmaW5lIENMT05FX05FV0lQQwkJMHgwODAwMDAwMAkvKiBOZXcgaXBjcyAqLworI2RlZmluZSBDTE9ORV9ORVdVVFMJCTB4MDQwMDAwMDAJLyogTmV3IHV0c25hbWUgbmFtZXNwYWNlICovCisjZGVmaW5lIENMT05FX05FV0lQQwkJMHgwODAwMDAwMAkvKiBOZXcgaXBjIG5hbWVzcGFjZSAqLwogI2RlZmluZSBDTE9ORV9ORVdVU0VSCQkweDEwMDAwMDAwCS8qIE5ldyB1c2VyIG5hbWVzcGFjZSAqLwogI2RlZmluZSBDTE9ORV9ORVdQSUQJCTB4MjAwMDAwMDAJLyogTmV3IHBpZCBuYW1lc3BhY2UgKi8KICNkZWZpbmUgQ0xPTkVfTkVXTkVUCQkweDQwMDAwMDAwCS8qIE5ldyBuZXR3b3JrIG5hbWVzcGFjZSAqLwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDIwODFhNGQuLjkwMzUwNWUgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCSAgdGhvdXNhbmRzIG9mIENQVXMuICBJdCBhbHNvIHNjYWxlcyBkb3duIG5pY2VseSB0bwogCSAgc21hbGxlciBzeXN0ZW1zLgogCi1jb25maWcgVFJFRV9QUkVFTVBUX1JDVQorY29uZmlnIFBSRUVNUFRfUkNVCiAJYm9vbCAiUHJlZW1wdGlibGUgdHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIgogCWRlcGVuZHMgb24gUFJFRU1QVAogCXNlbGVjdCBJUlFfV09SSwpAQCAtNTAxLDEyICs1MDEsNiBAQAogCiBlbmRjaG9pY2UKIAotY29uZmlnIFBSRUVNUFRfUkNVCi0JZGVmX2Jvb2wgVFJFRV9QUkVFTVBUX1JDVQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgcHJlZW1wdGlibGUtUkNVIGNvZGUgdGhhdCBpcyBjb21tb24gYmV0d2VlbgotCSAgVFJFRV9QUkVFTVBUX1JDVSBhbmQsIGluIHRoZSBvbGQgZGF5cywgVElOWV9QUkVFTVBUX1JDVS4KLQogY29uZmlnIFRBU0tTX1JDVQogCWJvb2wgIlRhc2tfYmFzZWQgUkNVIGltcGxlbWVudGF0aW9uIHVzaW5nIHZvbHVudGFyeSBjb250ZXh0IHN3aXRjaCIKIAlkZWZhdWx0IG4KQEAgLTUxOCw3ICs1MTIsNyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIFJDVV9TVEFMTF9DT01NT04KLQlkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UgfHwgUkNVX1RSQUNFICkKKwlkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFBSRUVNUFRfUkNVIHx8IFJDVV9UUkFDRSApCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBSQ1UgQ1BVIHN0YWxsIGNvZGUgdGhhdCBpcyBjb21tb24gYmV0d2VlbgogCSAgdGhlIFRJTlkgYW5kIFRSRUUgdmFyaWFudHMgb2YgUkNVLiAgVGhlIHB1cnBvc2UgaXMgdG8gYWxsb3cKQEAgLTU3Niw3ICs1NzAsNyBAQAogCWludCAiVHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIGZhbm91dCB2YWx1ZSIKIAlyYW5nZSAyIDY0IGlmIDY0QklUCiAJcmFuZ2UgMiAzMiBpZiAhNjRCSVQKLQlkZXBlbmRzIG9uIFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UKKwlkZXBlbmRzIG9uIFRSRUVfUkNVIHx8IFBSRUVNUFRfUkNVCiAJZGVmYXVsdCA2NCBpZiA2NEJJVAogCWRlZmF1bHQgMzIgaWYgITY0QklUCiAJaGVscApAQCAtNTk2LDcgKzU5MCw3IEBACiAJaW50ICJUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgbGVhZi1sZXZlbCBmYW5vdXQgdmFsdWUiCiAJcmFuZ2UgMiBSQ1VfRkFOT1VUIGlmIDY0QklUCiAJcmFuZ2UgMiBSQ1VfRkFOT1VUIGlmICE2NEJJVAotCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVQorCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgUFJFRU1QVF9SQ1UKIAlkZWZhdWx0IDE2CiAJaGVscAogCSAgVGhpcyBvcHRpb24gY29udHJvbHMgdGhlIGxlYWYtbGV2ZWwgZmFub3V0IG9mIGhpZXJhcmNoaWNhbApAQCAtNjIxLDcgKzYxNSw3IEBACiAKIGNvbmZpZyBSQ1VfRkFOT1VUX0VYQUNUCiAJYm9vbCAiRGlzYWJsZSB0cmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgYXV0by1iYWxhbmNpbmciCi0JZGVwZW5kcyBvbiBUUkVFX1JDVSB8fCBUUkVFX1BSRUVNUFRfUkNVCisJZGVwZW5kcyBvbiBUUkVFX1JDVSB8fCBQUkVFTVBUX1JDVQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGZvcmNlcyB1c2Ugb2YgdGhlIGV4YWN0IFJDVV9GQU5PVVQgdmFsdWUgc3BlY2lmaWVkLApAQCAtNjUyLDExICs2NDYsMTEgQEAKIAkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCiBjb25maWcgVFJFRV9SQ1VfVFJBQ0UKLQlkZWZfYm9vbCBSQ1VfVFJBQ0UgJiYgKCBUUkVFX1JDVSB8fCBUUkVFX1BSRUVNUFRfUkNVICkKKwlkZWZfYm9vbCBSQ1VfVFJBQ0UgJiYgKCBUUkVFX1JDVSB8fCBQUkVFTVBUX1JDVSApCiAJc2VsZWN0IERFQlVHX0ZTCiAJaGVscAogCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgdHJhY2luZyBmb3IgdGhlIFRSRUVfUkNVIGFuZAotCSAgVFJFRV9QUkVFTVBUX1JDVSBpbXBsZW1lbnRhdGlvbnMsIHBlcm1pdHRpbmcgTWFrZWZpbGUgdG8KKwkgIFBSRUVNUFRfUkNVIGltcGxlbWVudGF0aW9ucywgcGVybWl0dGluZyBNYWtlZmlsZSB0bwogCSAgdHJpdmlhbGx5IHNlbGVjdCBrZXJuZWwvcmN1dHJlZV90cmFjZS5jLgogCiBjb25maWcgUkNVX0JPT1NUCkBAIC02NzIsMzAgKzY2NiwzMSBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCByZWFsLXRpbWUgYXBwcyBvciBoZWF2eSBsb2FkcwogCSAgU2F5IE4gaGVyZSBpZiB5b3UgYXJlIHVuc3VyZS4KIAotY29uZmlnIFJDVV9CT09TVF9QUklPCi0JaW50ICJSZWFsLXRpbWUgcHJpb3JpdHkgdG8gYm9vc3QgUkNVIHJlYWRlcnMgdG8iCitjb25maWcgUkNVX0tUSFJFQURfUFJJTworCWludCAiUmVhbC10aW1lIHByaW9yaXR5IHRvIHVzZSBmb3IgUkNVIHdvcmtlciB0aHJlYWRzIgogCXJhbmdlIDEgOTkKIAlkZXBlbmRzIG9uIFJDVV9CT09TVAogCWRlZmF1bHQgMQogCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgcmVhbC10aW1lIHByaW9yaXR5IHRvIHdoaWNoIGxvbmctdGVybQotCSAgcHJlZW1wdGVkIFJDVSByZWFkZXJzIGFyZSB0byBiZSBib29zdGVkLiAgSWYgeW91IGFyZSB3b3JraW5nCi0JICB3aXRoIGEgcmVhbC10aW1lIGFwcGxpY2F0aW9uIHRoYXQgaGFzIG9uZSBvciBtb3JlIENQVS1ib3VuZAotCSAgdGhyZWFkcyBydW5uaW5nIGF0IGEgcmVhbC10aW1lIHByaW9yaXR5IGxldmVsLCB5b3Ugc2hvdWxkIHNldAotCSAgUkNVX0JPT1NUX1BSSU8gdG8gYSBwcmlvcml0eSBoaWdoZXIgdGhlbiB0aGUgaGlnaGVzdC1wcmlvcml0eQotCSAgcmVhbC10aW1lIENQVS1ib3VuZCB0aHJlYWQuICBUaGUgZGVmYXVsdCBSQ1VfQk9PU1RfUFJJTyB2YWx1ZQotCSAgb2YgMSBpcyBhcHByb3ByaWF0ZSBpbiB0aGUgY29tbW9uIGNhc2UsIHdoaWNoIGlzIHJlYWwtdGltZQorCSAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBTQ0hFRF9GSUZPIHByaW9yaXR5IHZhbHVlIHRoYXQgd2lsbCBiZQorCSAgYXNzaWduZWQgdG8gdGhlIHJjdWMvbiBhbmQgcmN1Yi9uIHRocmVhZHMgYW5kIGlzIGFsc28gdGhlIHZhbHVlCisJICB1c2VkIGZvciBSQ1VfQk9PU1QgKGlmIGVuYWJsZWQpLiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhCisJICByZWFsLXRpbWUgYXBwbGljYXRpb24gdGhhdCBoYXMgb25lIG9yIG1vcmUgQ1BVLWJvdW5kIHRocmVhZHMKKwkgIHJ1bm5pbmcgYXQgYSByZWFsLXRpbWUgcHJpb3JpdHkgbGV2ZWwsIHlvdSBzaG91bGQgc2V0CisJICBSQ1VfS1RIUkVBRF9QUklPIHRvIGEgcHJpb3JpdHkgaGlnaGVyIHRoYW4gdGhlIGhpZ2hlc3QtcHJpb3JpdHkKKwkgIHJlYWwtdGltZSBDUFUtYm91bmQgYXBwbGljYXRpb24gdGhyZWFkLiAgVGhlIGRlZmF1bHQgUkNVX0tUSFJFQURfUFJJTworCSAgdmFsdWUgb2YgMSBpcyBhcHByb3ByaWF0ZSBpbiB0aGUgY29tbW9uIGNhc2UsIHdoaWNoIGlzIHJlYWwtdGltZQogCSAgYXBwbGljYXRpb25zIHRoYXQgZG8gbm90IGhhdmUgYW55IENQVS1ib3VuZCB0aHJlYWRzLgogCiAJICBTb21lIHJlYWwtdGltZSBhcHBsaWNhdGlvbnMgbWlnaHQgbm90IGhhdmUgYSBzaW5nbGUgcmVhbC10aW1lCiAJICB0aHJlYWQgdGhhdCBzYXR1cmF0ZXMgYSBnaXZlbiBDUFUsIGJ1dCBpbnN0ZWFkIG1pZ2h0IGhhdmUKIAkgIG11bHRpcGxlIHJlYWwtdGltZSB0aHJlYWRzIHRoYXQsIHRha2VuIHRvZ2V0aGVyLCBmdWxseSB1dGlsaXplCi0JICB0aGF0IENQVS4gIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCBzZXQgUkNVX0JPT1NUX1BSSU8gdG8KKwkgIHRoYXQgQ1BVLiAgSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHNldCBSQ1VfS1RIUkVBRF9QUklPIHRvCiAJICBhIHByaW9yaXR5IGhpZ2hlciB0aGFuIHRoZSBsb3dlc3QtcHJpb3JpdHkgdGhyZWFkIHRoYXQgaXMKIAkgIGNvbnNwaXJpbmcgdG8gcHJldmVudCB0aGUgQ1BVIGZyb20gcnVubmluZyBhbnkgbm9uLXJlYWwtdGltZQogCSAgdGFza3MuICBGb3IgZXhhbXBsZSwgaWYgb25lIHRocmVhZCBhdCBwcmlvcml0eSAxMCBhbmQgYW5vdGhlcgogCSAgdGhyZWFkIGF0IHByaW9yaXR5IDUgYXJlIGJldHdlZW4gdGhlbXNlbHZlcyBmdWxseSBjb25zdW1pbmcKLQkgIHRoZSBDUFUgdGltZSBvbiBhIGdpdmVuIENQVSwgdGhlbiBSQ1VfQk9PU1RfUFJJTyBzaG91bGQgYmUKKwkgIHRoZSBDUFUgdGltZSBvbiBhIGdpdmVuIENQVSwgdGhlbiBSQ1VfS1RIUkVBRF9QUklPIHNob3VsZCBiZQogCSAgc2V0IHRvIHByaW9yaXR5IDYgb3IgaGlnaGVyLgogCiAJICBTcGVjaWZ5IHRoZSByZWFsLXRpbWUgcHJpb3JpdHksIG9yIHRha2UgdGhlIGRlZmF1bHQgaWYgdW5zdXJlLgpAQCAtNzE1LDcgKzcxMCw3IEBACiAKIGNvbmZpZyBSQ1VfTk9DQl9DUFUKIAlib29sICJPZmZsb2FkIFJDVSBjYWxsYmFjayBwcm9jZXNzaW5nIGZyb20gYm9vdC1zZWxlY3RlZCBDUFVzIgotCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVQorCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgUFJFRU1QVF9SQ1UKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBVc2UgdGhpcyBvcHRpb24gdG8gcmVkdWNlIE9TIGppdHRlciBmb3IgYWdncmVzc2l2ZSBIUEMgb3IKQEAgLTczOSw2ICs3MzQsNyBAQAogY2hvaWNlCiAJcHJvbXB0ICJCdWlsZC1mb3JjZWQgbm8tQ0JzIENQVXMiCiAJZGVmYXVsdCBSQ1VfTk9DQl9DUFVfTk9ORQorCWRlcGVuZHMgb24gUkNVX05PQ0JfQ1BVCiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWxsb3dzIG5vLUNCcyBDUFVzICh3aG9zZSBSQ1UgY2FsbGJhY2tzIGFyZSBpbnZva2VkCiAJICBmcm9tIGt0aHJlYWRzIHJhdGhlciB0aGFuIGZyb20gc29mdGlycSBjb250ZXh0KSB0byBiZSBzcGVjaWZpZWQKQEAgLTc0Nyw3ICs3NDMsNiBAQAogCiBjb25maWcgUkNVX05PQ0JfQ1BVX05PTkUKIAlib29sICJObyBidWlsZF9mb3JjZWQgbm8tQ0JzIENQVXMiCi0JZGVwZW5kcyBvbiBSQ1VfTk9DQl9DUFUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBkb2VzIG5vdCBmb3JjZSBhbnkgb2YgdGhlIENQVXMgdG8gYmUgbm8tQ0JzIENQVXMuCiAJICBPbmx5IENQVXMgZGVzaWduYXRlZCBieSB0aGUgcmN1X25vY2JzPSBib290IHBhcmFtZXRlciB3aWxsIGJlCkBAIC03NjEsNyArNzU2LDYgQEAKIAogY29uZmlnIFJDVV9OT0NCX0NQVV9aRVJPCiAJYm9vbCAiQ1BVIDAgaXMgYSBidWlsZF9mb3JjZWQgbm8tQ0JzIENQVSIKLQlkZXBlbmRzIG9uIFJDVV9OT0NCX0NQVQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGZvcmNlcyBDUFUgMCB0byBiZSBhIG5vLUNCcyBDUFUsIHNvIHRoYXQgaXRzIFJDVQogCSAgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGJ5IGEgcGVyLUNQVSBrdGhyZWFkIHdob3NlIG5hbWUgYmVnaW5zCkBAIC03NzYsNyArNzcwLDYgQEAKIAogY29uZmlnIFJDVV9OT0NCX0NQVV9BTEwKIAlib29sICJBbGwgQ1BVcyBhcmUgYnVpbGRfZm9yY2VkIG5vLUNCcyBDUFVzIgotCWRlcGVuZHMgb24gUkNVX05PQ0JfQ1BVCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZm9yY2VzIGFsbCBDUFVzIHRvIGJlIG5vLUNCcyBDUFVzLiAgVGhlIHJjdV9ub2Nicz0KIAkgIGJvb3QgcGFyYW1ldGVyIHdpbGwgYmUgaWdub3JlZC4gIEFsbCBDUFVzJyBSQ1UgY2FsbGJhY2tzIHdpbGwKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggY2ViYjExZC4uMWYzN2YxNTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdC5jCisrKyBiL2tlcm5lbC9hdWRpdC5jCkBAIC00OTksNyArNDk5LDYgQEAKIAlzZXRfZnJlZXphYmxlKCk7CiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKIAkJZmx1c2hfaG9sZF9xdWV1ZSgpOwogCkBAIC01MTQsMTYgKzUxMyw4IEBACiAJCQkJYXVkaXRfcHJpbnRrX3NrYihza2IpOwogCQkJY29udGludWU7CiAJCX0KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJYWRkX3dhaXRfcXVldWUoJmthdWRpdGRfd2FpdCwgJndhaXQpOwogCi0JCWlmICghc2tiX3F1ZXVlX2xlbigmYXVkaXRfc2tiX3F1ZXVlKSkgewotCQkJdHJ5X3RvX2ZyZWV6ZSgpOwotCQkJc2NoZWR1bGUoKTsKLQkJfQotCi0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoJmthdWRpdGRfd2FpdCwgJndhaXQpOworCQl3YWl0X2V2ZW50X2ZyZWV6YWJsZShrYXVkaXRkX3dhaXQsIHNrYl9xdWV1ZV9sZW4oJmF1ZGl0X3NrYl9xdWV1ZSkpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHUuYyBiL2tlcm5lbC9jcHUuYwppbmRleCA5MGEzZDAxLi41ZDIyMDIzIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1LmMKKysrIGIva2VybmVsL2NwdS5jCkBAIC04Niw2ICs4NiwxNiBAQAogI2RlZmluZSBjcHVocF9sb2NrX2FjcXVpcmUoKSAgICAgIGxvY2tfbWFwX2FjcXVpcmUoJmNwdV9ob3RwbHVnLmRlcF9tYXApCiAjZGVmaW5lIGNwdWhwX2xvY2tfcmVsZWFzZSgpICAgICAgbG9ja19tYXBfcmVsZWFzZSgmY3B1X2hvdHBsdWcuZGVwX21hcCkKIAorc3RhdGljIHZvaWQgYXBwbHlfcHV0c19wZW5kaW5nKGludCBtYXgpCit7CisJaW50IGRlbHRhOworCisJaWYgKGF0b21pY19yZWFkKCZjcHVfaG90cGx1Zy5wdXRzX3BlbmRpbmcpID49IG1heCkgeworCQlkZWx0YSA9IGF0b21pY194Y2hnKCZjcHVfaG90cGx1Zy5wdXRzX3BlbmRpbmcsIDApOworCQljcHVfaG90cGx1Zy5yZWZjb3VudCAtPSBkZWx0YTsKKwl9Cit9CisKIHZvaWQgZ2V0X29ubGluZV9jcHVzKHZvaWQpCiB7CiAJbWlnaHRfc2xlZXAoKTsKQEAgLTkzLDYgKzEwMyw3IEBACiAJCXJldHVybjsKIAljcHVocF9sb2NrX2FjcXVpcmVfcmVhZCgpOwogCW11dGV4X2xvY2soJmNwdV9ob3RwbHVnLmxvY2spOworCWFwcGx5X3B1dHNfcGVuZGluZyg2NTUzNik7CiAJY3B1X2hvdHBsdWcucmVmY291bnQrKzsKIAltdXRleF91bmxvY2soJmNwdV9ob3RwbHVnLmxvY2spOwogfQpAQCAtMTA1LDYgKzExNiw3IEBACiAJaWYgKCFtdXRleF90cnlsb2NrKCZjcHVfaG90cGx1Zy5sb2NrKSkKIAkJcmV0dXJuIGZhbHNlOwogCWNwdWhwX2xvY2tfYWNxdWlyZV90cnlyZWFkKCk7CisJYXBwbHlfcHV0c19wZW5kaW5nKDY1NTM2KTsKIAljcHVfaG90cGx1Zy5yZWZjb3VudCsrOwogCW11dGV4X3VubG9jaygmY3B1X2hvdHBsdWcubG9jayk7CiAJcmV0dXJuIHRydWU7CkBAIC0xNjEsMTIgKzE3Myw3IEBACiAJY3B1aHBfbG9ja19hY3F1aXJlKCk7CiAJZm9yICg7OykgewogCQltdXRleF9sb2NrKCZjcHVfaG90cGx1Zy5sb2NrKTsKLQkJaWYgKGF0b21pY19yZWFkKCZjcHVfaG90cGx1Zy5wdXRzX3BlbmRpbmcpKSB7Ci0JCQlpbnQgZGVsdGE7Ci0KLQkJCWRlbHRhID0gYXRvbWljX3hjaGcoJmNwdV9ob3RwbHVnLnB1dHNfcGVuZGluZywgMCk7Ci0JCQljcHVfaG90cGx1Zy5yZWZjb3VudCAtPSBkZWx0YTsKLQkJfQorCQlhcHBseV9wdXRzX3BlbmRpbmcoMSk7CiAJCWlmIChsaWtlbHkoIWNwdV9ob3RwbHVnLnJlZmNvdW50KSkKIAkJCWJyZWFrOwogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCAxZjEwN2M3Li43MjNjZmM5IDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC01MDYsNiArNTA2LDE2IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKKwkvKgorCSAqIFdlIGNhbid0IHNocmluayBpZiB3ZSB3b24ndCBoYXZlIGVub3VnaCByb29tIGZvciBTQ0hFRF9ERUFETElORQorCSAqIHRhc2tzLgorCSAqLworCXJldCA9IC1FQlVTWTsKKwlpZiAoaXNfY3B1X2V4Y2x1c2l2ZShjdXIpICYmCisJICAgICFjcHVzZXRfY3B1bWFza19jYW5fc2hyaW5rKGN1ci0+Y3B1c19hbGxvd2VkLAorCQkJCSAgICAgICB0cmlhbC0+Y3B1c19hbGxvd2VkKSkKKwkJZ290byBvdXQ7CisKIAlyZXQgPSAwOwogb3V0OgogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMTQyOSwxNyArMTQzOSw4IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoKHRhc2ssIHRzZXQpIHsKLQkJLyoKLQkJICogS3RocmVhZHMgd2hpY2ggZGlzYWxsb3cgc2V0YWZmaW5pdHkgc2hvdWxkbid0IGJlIG1vdmVkCi0JCSAqIHRvIGEgbmV3IGNwdXNldDsgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlaXIgY3B1Ci0JCSAqIGFmZmluaXR5IGFuZCBpc29sYXRpbmcgc3VjaCB0aHJlYWRzIGJ5IHRoZWlyIHNldCBvZgotCQkgKiBhbGxvd2VkIG5vZGVzIGlzIHVubmVjZXNzYXJ5LiAgVGh1cywgY3B1c2V0cyBhcmUgbm90Ci0JCSAqIGFwcGxpY2FibGUgZm9yIHN1Y2ggdGhyZWFkcy4gIFRoaXMgcHJldmVudHMgY2hlY2tpbmcgZm9yCi0JCSAqIHN1Y2Nlc3Mgb2Ygc2V0X2NwdXNfYWxsb3dlZF9wdHIoKSBvbiBhbGwgYXR0YWNoZWQgdGFza3MKLQkJICogYmVmb3JlIGNwdXNfYWxsb3dlZCBtYXkgYmUgY2hhbmdlZC4KLQkJICovCi0JCXJldCA9IC1FSU5WQUw7Ci0JCWlmICh0YXNrLT5mbGFncyAmIFBGX05PX1NFVEFGRklOSVRZKQorCQlyZXQgPSB0YXNrX2Nhbl9hdHRhY2godGFzaywgY3MtPmNwdXNfYWxsb3dlZCk7CisJCWlmIChyZXQpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCXJldCA9IHNlY3VyaXR5X3Rhc2tfc2V0c2NoZWR1bGVyKHRhc2spOwogCQlpZiAocmV0KQpkaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwppbmRleCAxY2Q1ZWVmLi4zZTE5ZDNlIDEwMDY0NAotLS0gYS9rZXJuZWwvZXZlbnRzL2NvcmUuYworKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwpAQCAtNDQ2MCw3ICs0NDYwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfc2FtcGxlX3JlZ3NfdXNlcihzdHJ1Y3QgcGVyZl9yZWdzX3VzZXIgKnJlZ3NfdXNlciwKK3N0YXRpYyB2b2lkIHBlcmZfc2FtcGxlX3JlZ3NfdXNlcihzdHJ1Y3QgcGVyZl9yZWdzICpyZWdzX3VzZXIsCiAJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkgewpAQCAtNDQ3MSwxMSArNDQ3MSwyMiBAQAogCX0KIAogCWlmIChyZWdzKSB7Ci0JCXJlZ3NfdXNlci0+cmVncyA9IHJlZ3M7CiAJCXJlZ3NfdXNlci0+YWJpICA9IHBlcmZfcmVnX2FiaShjdXJyZW50KTsKKwkJcmVnc191c2VyLT5yZWdzID0gcmVnczsKKwl9IGVsc2UgeworCQlyZWdzX3VzZXItPmFiaSA9IFBFUkZfU0FNUExFX1JFR1NfQUJJX05PTkU7CisJCXJlZ3NfdXNlci0+cmVncyA9IE5VTEw7CiAJfQogfQogCitzdGF0aWMgdm9pZCBwZXJmX3NhbXBsZV9yZWdzX2ludHIoc3RydWN0IHBlcmZfcmVncyAqcmVnc19pbnRyLAorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVnc19pbnRyLT5yZWdzID0gcmVnczsKKwlyZWdzX2ludHItPmFiaSAgPSBwZXJmX3JlZ19hYmkoY3VycmVudCk7Cit9CisKKwogLyoKICAqIEdldCByZW1haW5pbmcgdGFzayBzaXplIGZyb20gdXNlciBzdGFjayBwb2ludGVyLgogICoKQEAgLTQ4NTcsNiArNDg2OCwyMyBAQAogCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RSQU5TQUNUSU9OKQogCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBkYXRhLT50eG4pOwogCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVHU19JTlRSKSB7CisJCXU2NCBhYmkgPSBkYXRhLT5yZWdzX2ludHIuYWJpOworCQkvKgorCQkgKiBJZiB0aGVyZSBhcmUgbm8gcmVncyB0byBkdW1wLCBub3RpY2UgaXQgdGhyb3VnaAorCQkgKiBmaXJzdCB1NjQgYmVpbmcgemVybyAoUEVSRl9TQU1QTEVfUkVHU19BQklfTk9ORSkuCisJCSAqLworCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBhYmkpOworCisJCWlmIChhYmkpIHsKKwkJCXU2NCBtYXNrID0gZXZlbnQtPmF0dHIuc2FtcGxlX3JlZ3NfaW50cjsKKworCQkJcGVyZl9vdXRwdXRfc2FtcGxlX3JlZ3MoaGFuZGxlLAorCQkJCQkJZGF0YS0+cmVnc19pbnRyLnJlZ3MsCisJCQkJCQltYXNrKTsKKwkJfQorCX0KKwogCWlmICghZXZlbnQtPmF0dHIud2F0ZXJtYXJrKSB7CiAJCWludCB3YWtldXBfZXZlbnRzID0gZXZlbnQtPmF0dHIud2FrZXVwX2V2ZW50czsKIApAQCAtNDkyMiwxMiArNDk1MCwxMyBAQAogCQloZWFkZXItPnNpemUgKz0gc2l6ZTsKIAl9CiAKKwlpZiAoc2FtcGxlX3R5cGUgJiAoUEVSRl9TQU1QTEVfUkVHU19VU0VSIHwgUEVSRl9TQU1QTEVfU1RBQ0tfVVNFUikpCisJCXBlcmZfc2FtcGxlX3JlZ3NfdXNlcigmZGF0YS0+cmVnc191c2VyLCByZWdzKTsKKwogCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfVVNFUikgewogCQkvKiByZWdzIGR1bXAgQUJJIGluZm8gKi8KIAkJaW50IHNpemUgPSBzaXplb2YodTY0KTsKIAotCQlwZXJmX3NhbXBsZV9yZWdzX3VzZXIoJmRhdGEtPnJlZ3NfdXNlciwgcmVncyk7Ci0KIAkJaWYgKGRhdGEtPnJlZ3NfdXNlci5yZWdzKSB7CiAJCQl1NjQgbWFzayA9IGV2ZW50LT5hdHRyLnNhbXBsZV9yZWdzX3VzZXI7CiAJCQlzaXplICs9IGh3ZWlnaHQ2NChtYXNrKSAqIHNpemVvZih1NjQpOwpAQCAtNDk0MywxNSArNDk3MiwxMSBAQAogCQkgKiBpbiBjYXNlIG5ldyBzYW1wbGUgdHlwZSBpcyBhZGRlZCwgYmVjYXVzZSB3ZSBjb3VsZCBlYXQKIAkJICogdXAgdGhlIHJlc3Qgb2YgdGhlIHNhbXBsZSBzaXplLgogCQkgKi8KLQkJc3RydWN0IHBlcmZfcmVnc191c2VyICp1cmVncyA9ICZkYXRhLT5yZWdzX3VzZXI7CiAJCXUxNiBzdGFja19zaXplID0gZXZlbnQtPmF0dHIuc2FtcGxlX3N0YWNrX3VzZXI7CiAJCXUxNiBzaXplID0gc2l6ZW9mKHU2NCk7CiAKLQkJaWYgKCF1cmVncy0+YWJpKQotCQkJcGVyZl9zYW1wbGVfcmVnc191c2VyKHVyZWdzLCByZWdzKTsKLQogCQlzdGFja19zaXplID0gcGVyZl9zYW1wbGVfdXN0YWNrX3NpemUoc3RhY2tfc2l6ZSwgaGVhZGVyLT5zaXplLAotCQkJCQkJICAgICB1cmVncy0+cmVncyk7CisJCQkJCQkgICAgIGRhdGEtPnJlZ3NfdXNlci5yZWdzKTsKIAogCQkvKgogCQkgKiBJZiB0aGVyZSBpcyBzb21ldGhpbmcgdG8gZHVtcCwgYWRkIHNwYWNlIGZvciB0aGUgZHVtcApAQCAtNDk2NCw2ICs0OTg5LDIxIEBACiAJCWRhdGEtPnN0YWNrX3VzZXJfc2l6ZSA9IHN0YWNrX3NpemU7CiAJCWhlYWRlci0+c2l6ZSArPSBzaXplOwogCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfSU5UUikgeworCQkvKiByZWdzIGR1bXAgQUJJIGluZm8gKi8KKwkJaW50IHNpemUgPSBzaXplb2YodTY0KTsKKworCQlwZXJmX3NhbXBsZV9yZWdzX2ludHIoJmRhdGEtPnJlZ3NfaW50ciwgcmVncyk7CisKKwkJaWYgKGRhdGEtPnJlZ3NfaW50ci5yZWdzKSB7CisJCQl1NjQgbWFzayA9IGV2ZW50LT5hdHRyLnNhbXBsZV9yZWdzX2ludHI7CisKKwkJCXNpemUgKz0gaHdlaWdodDY0KG1hc2spICogc2l6ZW9mKHU2NCk7CisJCX0KKworCQloZWFkZXItPnNpemUgKz0gc2l6ZTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfb3V0cHV0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKQEAgLTcxNTEsNiArNzE5MSw4IEBACiAJCQlyZXQgPSAtRUlOVkFMOwogCX0KIAorCWlmIChhdHRyLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfSU5UUikKKwkJcmV0ID0gcGVyZl9yZWdfdmFsaWRhdGUoYXR0ci0+c2FtcGxlX3JlZ3NfaW50cik7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNWQzMDAxOS4uMjMyYzRiYyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC05OTcsNiArOTk3LDggQEAKIAogCQlnZXRfdGFza19zdHJ1Y3QocCk7CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJc2NoZWRfYW5ub3RhdGVfc2xlZXAoKTsKKwogCQlpZiAoKGV4aXRfY29kZSAmIDB4N2YpID09IDApIHsKIAkJCXdoeSA9IENMRF9FWElURUQ7CiAJCQlzdGF0dXMgPSBleGl0X2NvZGUgPj4gODsKQEAgLTEwNzksNiArMTA4MSw3IEBACiAJICogdGhyZWFkIGNhbiByZWFwIGl0IGJlY2F1c2Ugd2UgaXRzIHN0YXRlID09IERFQUQvVFJBQ0UuCiAJICovCiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXNjaGVkX2Fubm90YXRlX3NsZWVwKCk7CiAKIAlyZXR2YWwgPSB3by0+d29fcnVzYWdlCiAJCT8gZ2V0cnVzYWdlKHAsIFJVU0FHRV9CT1RILCB3by0+d29fcnVzYWdlKSA6IDA7CkBAIC0xMjEwLDYgKzEyMTMsNyBAQAogCXBpZCA9IHRhc2tfcGlkX3ZucihwKTsKIAl3aHkgPSBwdHJhY2UgPyBDTERfVFJBUFBFRCA6IENMRF9TVE9QUEVEOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpOwogCiAJaWYgKHVubGlrZWx5KHdvLT53b19mbGFncyAmIFdOT1dBSVQpKQogCQlyZXR1cm4gd2FpdF9ub3JlYXBfY29weW91dCh3bywgcCwgcGlkLCB1aWQsIHdoeSwgZXhpdF9jb2RlKTsKQEAgLTEyNzIsNiArMTI3Niw3IEBACiAJcGlkID0gdGFza19waWRfdm5yKHApOwogCWdldF90YXNrX3N0cnVjdChwKTsKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJc2NoZWRfYW5ub3RhdGVfc2xlZXAoKTsKIAogCWlmICghd28tPndvX2luZm8pIHsKIAkJcmV0dmFsID0gd28tPndvX3J1c2FnZQpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggOWI3ZDc0Ni4uOWNhODQxOCAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0xMDIyLDExICsxMDIyLDE0IEBACiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNpZ2hhbmQtPmNvdW50KSkgewogCQlzaWduYWxmZF9jbGVhbnVwKHNpZ2hhbmQpOworCQkvKgorCQkgKiBzaWdoYW5kX2NhY2hlcCBpcyBTTEFCX0RFU1RST1lfQllfUkNVIHNvIHdlIGNhbiBmcmVlIGl0CisJCSAqIHdpdGhvdXQgYW4gUkNVIGdyYWNlIHBlcmlvZCwgc2VlIF9fbG9ja190YXNrX3NpZ2hhbmQoKS4KKwkJICovCiAJCWttZW1fY2FjaGVfZnJlZShzaWdoYW5kX2NhY2hlcCwgc2lnaGFuZCk7CiAJfQogfQogCi0KIC8qCiAgKiBJbml0aWFsaXplIFBPU0lYIHRpbWVyIGhhbmRsaW5nIGZvciBhIHRocmVhZCBncm91cC4KICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9LY29uZmlnIGIva2VybmVsL2lycS9LY29uZmlnCmluZGV4IDIyNTA4NmIuLjlhNzZlM2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvS2NvbmZpZworKysgYi9rZXJuZWwvaXJxL0tjb25maWcKQEAgLTU1LDYgKzU1LDIxIEBACiBjb25maWcgSVJRX0RPTUFJTgogCWJvb2wKIAorIyBTdXBwb3J0IGZvciBoaWVyYXJjaGljYWwgaXJxIGRvbWFpbnMKK2NvbmZpZyBJUlFfRE9NQUlOX0hJRVJBUkNIWQorCWJvb2wKKwlzZWxlY3QgSVJRX0RPTUFJTgorCisjIEdlbmVyaWMgTVNJIGludGVycnVwdCBzdXBwb3J0Citjb25maWcgR0VORVJJQ19NU0lfSVJRCisJYm9vbAorCisjIEdlbmVyaWMgTVNJIGhpZXJhcmNoaWNhbCBpbnRlcnJ1cHQgZG9tYWluIHN1cHBvcnQKK2NvbmZpZyBHRU5FUklDX01TSV9JUlFfRE9NQUlOCisJYm9vbAorCXNlbGVjdCBJUlFfRE9NQUlOX0hJRVJBUkNIWQorCXNlbGVjdCBHRU5FUklDX01TSV9JUlEKKwogY29uZmlnIEhBTkRMRV9ET01BSU5fSVJRCiAJYm9vbAogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL01ha2VmaWxlIGIva2VybmVsL2lycS9NYWtlZmlsZQppbmRleCBmZmYxNzM4Li5kMTIxMjM1IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL01ha2VmaWxlCisrKyBiL2tlcm5lbC9pcnEvTWFrZWZpbGUKQEAgLTYsMyArNiw0IEBACiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgKz0gbWlncmF0aW9uLm8KIG9iai0kKENPTkZJR19QTV9TTEVFUCkgKz0gcG0ubworb2JqLSQoQ09ORklHX0dFTkVSSUNfTVNJX0lSUSkgKz0gbXNpLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggZTUyMDJmMC4uNmYxYzdhNSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9jaGlwLmMKKysrIGIva2VybmVsL2lycS9jaGlwLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgogCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2lycS5oPgogCkBAIC0xNzgsNiArMTc5LDcgQEAKIAlpcnFfc3RhdGVfY2xyX2Rpc2FibGVkKGRlc2MpOwogCWRlc2MtPmRlcHRoID0gMDsKIAorCWlycV9kb21haW5fYWN0aXZhdGVfaXJxKCZkZXNjLT5pcnFfZGF0YSk7CiAJaWYgKGRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9zdGFydHVwKSB7CiAJCXJldCA9IGRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9zdGFydHVwKCZkZXNjLT5pcnFfZGF0YSk7CiAJCWlycV9zdGF0ZV9jbHJfbWFza2VkKGRlc2MpOwpAQCAtMTk5LDYgKzIwMSw3IEBACiAJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9kaXNhYmxlKCZkZXNjLT5pcnFfZGF0YSk7CiAJZWxzZQogCQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEpOworCWlycV9kb21haW5fZGVhY3RpdmF0ZV9pcnEoJmRlc2MtPmlycV9kYXRhKTsKIAlpcnFfc3RhdGVfc2V0X21hc2tlZChkZXNjKTsKIH0KIApAQCAtNzI4LDcgKzczMSwzMCBAQAogCWlmICghaGFuZGxlKSB7CiAJCWhhbmRsZSA9IGhhbmRsZV9iYWRfaXJxOwogCX0gZWxzZSB7Ci0JCWlmIChXQVJOX09OKGRlc2MtPmlycV9kYXRhLmNoaXAgPT0gJm5vX2lycV9jaGlwKSkKKwkJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSA9ICZkZXNjLT5pcnFfZGF0YTsKKyNpZmRlZiBDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKKwkJLyoKKwkJICogV2l0aCBoaWVyYXJjaGljYWwgZG9tYWlucyB3ZSBtaWdodCBydW4gaW50byBhCisJCSAqIHNpdHVhdGlvbiB3aGVyZSB0aGUgb3V0ZXJtb3N0IGNoaXAgaXMgbm90IHlldCBzZXQKKwkJICogdXAsIGJ1dCB0aGUgaW5uZXIgY2hpcHMgYXJlIHRoZXJlLiAgSW5zdGVhZCBvZgorCQkgKiBiYWlsaW5nIHdlIGluc3RhbGwgdGhlIGhhbmRsZXIsIGJ1dCBvYnZpb3VzbHkgd2UKKwkJICogY2Fubm90IGVuYWJsZS9zdGFydHVwIHRoZSBpbnRlcnJ1cHQgYXQgdGhpcyBwb2ludC4KKwkJICovCisJCXdoaWxlIChpcnFfZGF0YSkgeworCQkJaWYgKGlycV9kYXRhLT5jaGlwICE9ICZub19pcnFfY2hpcCkKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBCYWlsIG91dCBpZiB0aGUgb3V0ZXIgY2hpcCBpcyBub3Qgc2V0IHVwCisJCQkgKiBhbmQgdGhlIGludGVycnJ1cHQgc3VwcG9zZWQgdG8gYmUgc3RhcnRlZAorCQkJICogcmlnaHQgYXdheS4KKwkJCSAqLworCQkJaWYgKFdBUk5fT04oaXNfY2hhaW5lZCkpCisJCQkJZ290byBvdXQ7CisJCQkvKiBUcnkgdGhlIHBhcmVudCAqLworCQkJaXJxX2RhdGEgPSBpcnFfZGF0YS0+cGFyZW50X2RhdGE7CisJCX0KKyNlbmRpZgorCQlpZiAoV0FSTl9PTighaXJxX2RhdGEgfHwgaXJxX2RhdGEtPmNoaXAgPT0gJm5vX2lycV9jaGlwKSkKIAkJCWdvdG8gb3V0OwogCX0KIApAQCAtODQ3LDMgKzg3MywxMDUgQEAKIAkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CisKKyNpZmRlZglDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKKy8qKgorICogaXJxX2NoaXBfYWNrX3BhcmVudCAtIEFja25vd2xlZGdlIHRoZSBwYXJlbnQgaW50ZXJydXB0CisgKiBAZGF0YToJUG9pbnRlciB0byBpbnRlcnJ1cHQgc3BlY2lmaWMgZGF0YQorICovCit2b2lkIGlycV9jaGlwX2Fja19wYXJlbnQoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWRhdGEgPSBkYXRhLT5wYXJlbnRfZGF0YTsKKwlkYXRhLT5jaGlwLT5pcnFfYWNrKGRhdGEpOworfQorCisvKioKKyAqIGlycV9jaGlwX21hc2tfcGFyZW50IC0gTWFzayB0aGUgcGFyZW50IGludGVycnVwdAorICogQGRhdGE6CVBvaW50ZXIgdG8gaW50ZXJydXB0IHNwZWNpZmljIGRhdGEKKyAqLwordm9pZCBpcnFfY2hpcF9tYXNrX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhOworCWRhdGEtPmNoaXAtPmlycV9tYXNrKGRhdGEpOworfQorCisvKioKKyAqIGlycV9jaGlwX3VubWFza19wYXJlbnQgLSBVbm1hc2sgdGhlIHBhcmVudCBpbnRlcnJ1cHQKKyAqIEBkYXRhOglQb2ludGVyIHRvIGludGVycnVwdCBzcGVjaWZpYyBkYXRhCisgKi8KK3ZvaWQgaXJxX2NoaXBfdW5tYXNrX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhOworCWRhdGEtPmNoaXAtPmlycV91bm1hc2soZGF0YSk7Cit9CisKKy8qKgorICogaXJxX2NoaXBfZW9pX3BhcmVudCAtIEludm9rZSBFT0kgb24gdGhlIHBhcmVudCBpbnRlcnJ1cHQKKyAqIEBkYXRhOglQb2ludGVyIHRvIGludGVycnVwdCBzcGVjaWZpYyBkYXRhCisgKi8KK3ZvaWQgaXJxX2NoaXBfZW9pX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhOworCWRhdGEtPmNoaXAtPmlycV9lb2koZGF0YSk7Cit9CisKKy8qKgorICogaXJxX2NoaXBfc2V0X2FmZmluaXR5X3BhcmVudCAtIFNldCBhZmZpbml0eSBvbiB0aGUgcGFyZW50IGludGVycnVwdAorICogQGRhdGE6CVBvaW50ZXIgdG8gaW50ZXJydXB0IHNwZWNpZmljIGRhdGEKKyAqIEBkZXN0OglUaGUgYWZmaW5pdHkgbWFzayB0byBzZXQKKyAqIEBmb3JjZToJRmxhZyB0byBlbmZvcmNlIHNldHRpbmcgKGRpc2FibGUgb25saW5lIGNoZWNrcykKKyAqCisgKiBDb25kaXRpbmFsLCBhcyB0aGUgdW5kZXJseWluZyBwYXJlbnQgY2hpcCBtaWdodCBub3QgaW1wbGVtZW50IGl0LgorICovCitpbnQgaXJxX2NoaXBfc2V0X2FmZmluaXR5X3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsCisJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0LCBib29sIGZvcmNlKQoreworCWRhdGEgPSBkYXRhLT5wYXJlbnRfZGF0YTsKKwlpZiAoZGF0YS0+Y2hpcC0+aXJxX3NldF9hZmZpbml0eSkKKwkJcmV0dXJuIGRhdGEtPmNoaXAtPmlycV9zZXRfYWZmaW5pdHkoZGF0YSwgZGVzdCwgZm9yY2UpOworCisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKy8qKgorICogaXJxX2NoaXBfcmV0cmlnZ2VyX2hpZXJhcmNoeSAtIFJldHJpZ2dlciBhbiBpbnRlcnJ1cHQgaW4gaGFyZHdhcmUKKyAqIEBkYXRhOglQb2ludGVyIHRvIGludGVycnVwdCBzcGVjaWZpYyBkYXRhCisgKgorICogSXRlcmF0ZSB0aHJvdWdoIHRoZSBkb21haW4gaGllcmFyY2h5IG9mIHRoZSBpbnRlcnJ1cHQgYW5kIGNoZWNrCisgKiB3aGV0aGVyIGEgaHcgcmV0cmlnZ2VyIGZ1bmN0aW9uIGV4aXN0cy4gSWYgeWVzLCBpbnZva2UgaXQuCisgKi8KK2ludCBpcnFfY2hpcF9yZXRyaWdnZXJfaGllcmFyY2h5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlmb3IgKGRhdGEgPSBkYXRhLT5wYXJlbnRfZGF0YTsgZGF0YTsgZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhKQorCQlpZiAoZGF0YS0+Y2hpcCAmJiBkYXRhLT5jaGlwLT5pcnFfcmV0cmlnZ2VyKQorCQkJcmV0dXJuIGRhdGEtPmNoaXAtPmlycV9yZXRyaWdnZXIoZGF0YSk7CisKKwlyZXR1cm4gLUVOT1NZUzsKK30KKyNlbmRpZgorCisvKioKKyAqIGlycV9jaGlwX2NvbXBvc2VfbXNpX21zZyAtIENvbXBvbnNlIG1zaSBtZXNzYWdlIGZvciBhIGlycSBjaGlwCisgKiBAZGF0YToJUG9pbnRlciB0byBpbnRlcnJ1cHQgc3BlY2lmaWMgZGF0YQorICogQG1zZzoJUG9pbnRlciB0byB0aGUgTVNJIG1lc3NhZ2UKKyAqCisgKiBGb3IgaGllcmFyY2hpY2FsIGRvbWFpbnMgd2UgZmluZCB0aGUgZmlyc3QgY2hpcCBpbiB0aGUgaGllcmFyY2h5CisgKiB3aGljaCBpbXBsZW1lbnRzIHRoZSBpcnFfY29tcG9zZV9tc2lfbXNnIGNhbGxiYWNrLiBGb3Igbm9uCisgKiBoaWVyYXJjaGljYWwgd2UgdXNlIHRoZSB0b3AgbGV2ZWwgY2hpcC4KKyAqLworaW50IGlycV9jaGlwX2NvbXBvc2VfbXNpX21zZyhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IGlycV9kYXRhICpwb3MgPSBOVUxMOworCisjaWZkZWYJQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZCisJZm9yICg7IGRhdGE7IGRhdGEgPSBkYXRhLT5wYXJlbnRfZGF0YSkKKyNlbmRpZgorCQlpZiAoZGF0YS0+Y2hpcCAmJiBkYXRhLT5jaGlwLT5pcnFfY29tcG9zZV9tc2lfbXNnKQorCQkJcG9zID0gZGF0YTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlwb3MtPmNoaXAtPmlycV9jb21wb3NlX21zaV9tc2cocG9zLCBtc2cpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2dlbmVyaWMtY2hpcC5jIGIva2VybmVsL2lycS9nZW5lcmljLWNoaXAuYwppbmRleCBjZjgwZTdiLi42MTAyNGU4IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2dlbmVyaWMtY2hpcC5jCisrKyBiL2tlcm5lbC9pcnEvZ2VuZXJpYy1jaGlwLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAl1MzIgbWFzayA9IGQtPm1hc2s7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MuZGlzYWJsZSk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIG1hc2ssIGN0LT5yZWdzLmRpc2FibGUpOwogCSpjdC0+bWFza19jYWNoZSAmPSB+bWFzazsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KQEAgLTU5LDcgKzU5LDcgQEAKIAogCWlycV9nY19sb2NrKGdjKTsKIAkqY3QtPm1hc2tfY2FjaGUgfD0gbWFzazsKLQlpcnFfcmVnX3dyaXRlbCgqY3QtPm1hc2tfY2FjaGUsIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLm1hc2spOworCWlycV9yZWdfd3JpdGVsKGdjLCAqY3QtPm1hc2tfY2FjaGUsIGN0LT5yZWdzLm1hc2spOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2djX21hc2tfc2V0X2JpdCk7CkBAIC03OSw3ICs3OSw3IEBACiAKIAlpcnFfZ2NfbG9jayhnYyk7CiAJKmN0LT5tYXNrX2NhY2hlICY9IH5tYXNrOwotCWlycV9yZWdfd3JpdGVsKCpjdC0+bWFza19jYWNoZSwgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MubWFzayk7CisJaXJxX3JlZ193cml0ZWwoZ2MsICpjdC0+bWFza19jYWNoZSwgY3QtPnJlZ3MubWFzayk7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcnFfZ2NfbWFza19jbHJfYml0KTsKQEAgLTk4LDcgKzk4LDcgQEAKIAl1MzIgbWFzayA9IGQtPm1hc2s7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MuZW5hYmxlKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgbWFzaywgY3QtPnJlZ3MuZW5hYmxlKTsKIAkqY3QtPm1hc2tfY2FjaGUgfD0gbWFzazsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KQEAgLTExNCw3ICsxMTQsNyBAQAogCXUzMiBtYXNrID0gZC0+bWFzazsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChtYXNrLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5hY2spOworCWlycV9yZWdfd3JpdGVsKGdjLCBtYXNrLCBjdC0+cmVncy5hY2spOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2djX2Fja19zZXRfYml0KTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogCXUzMiBtYXNrID0gfmQtPm1hc2s7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MuYWNrKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgbWFzaywgY3QtPnJlZ3MuYWNrKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtMTQ1LDggKzE0NSw4IEBACiAJdTMyIG1hc2sgPSBkLT5tYXNrOwogCiAJaXJxX2djX2xvY2soZ2MpOwotCWlycV9yZWdfd3JpdGVsKG1hc2ssIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLm1hc2spOwotCWlycV9yZWdfd3JpdGVsKG1hc2ssIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLmFjayk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIG1hc2ssIGN0LT5yZWdzLm1hc2spOworCWlycV9yZWdfd3JpdGVsKGdjLCBtYXNrLCBjdC0+cmVncy5hY2spOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogCkBAIC0xNjEsNyArMTYxLDcgQEAKIAl1MzIgbWFzayA9IGQtPm1hc2s7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MuZW9pKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgbWFzaywgY3QtPnJlZ3MuZW9pKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtMTkxLDYgKzE5MSwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTMyIGlycV9yZWFkbF9iZSh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGlvcmVhZDMyYmUoYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIGlycV93cml0ZWxfYmUodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlvd3JpdGUzMmJlKHZhbCwgYWRkcik7Cit9CisKIHN0YXRpYyB2b2lkCiBpcnFfaW5pdF9nZW5lcmljX2NoaXAoc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjLCBjb25zdCBjaGFyICpuYW1lLAogCQkgICAgICBpbnQgbnVtX2N0LCB1bnNpZ25lZCBpbnQgaXJxX2Jhc2UsCkBAIC0yNDUsNyArMjU1LDcgQEAKIAkJfQogCQljdFtpXS5tYXNrX2NhY2hlID0gbXNrcHRyOwogCQlpZiAoZmxhZ3MgJiBJUlFfR0NfSU5JVF9NQVNLX0NBQ0hFKQotCQkJKm1za3B0ciA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgbXNrcmVnKTsKKwkJCSptc2twdHIgPSBpcnFfcmVnX3JlYWRsKGdjLCBtc2tyZWcpOwogCX0KIH0KIApAQCAtMzAwLDcgKzMxMCwxMyBAQAogCQlkZ2MtPmdjW2ldID0gZ2MgPSB0bXA7CiAJCWlycV9pbml0X2dlbmVyaWNfY2hpcChnYywgbmFtZSwgbnVtX2N0LCBpICogaXJxc19wZXJfY2hpcCwKIAkJCQkgICAgICBOVUxMLCBoYW5kbGVyKTsKKwogCQlnYy0+ZG9tYWluID0gZDsKKwkJaWYgKGdjZmxhZ3MgJiBJUlFfR0NfQkVfSU8pIHsKKwkJCWdjLT5yZWdfcmVhZGwgPSAmaXJxX3JlYWRsX2JlOworCQkJZ2MtPnJlZ193cml0ZWwgPSAmaXJxX3dyaXRlbF9iZTsKKwkJfQorCiAJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ2NfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2FkZF90YWlsKCZnYy0+bGlzdCwgJmdjX2xpc3QpOwogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2NfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pcnFkb21haW4uYyBiL2tlcm5lbC9pcnEvaXJxZG9tYWluLmMKaW5kZXggNjUzNGZmNi4uN2ZhYzMxMSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pcnFkb21haW4uYworKysgYi9rZXJuZWwvaXJxL2lycWRvbWFpbi5jCkBAIC0yMyw2ICsyMywxMCBAQAogc3RhdGljIERFRklORV9NVVRFWChyZXZtYXBfdHJlZXNfbXV0ZXgpOwogc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluICppcnFfZGVmYXVsdF9kb21haW47CiAKK3N0YXRpYyBpbnQgaXJxX2RvbWFpbl9hbGxvY19kZXNjcyhpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMsCisJCQkJICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEsIGludCBub2RlKTsKK3N0YXRpYyB2b2lkIGlycV9kb21haW5fY2hlY2tfaGllcmFyY2h5KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4pOworCiAvKioKICAqIF9faXJxX2RvbWFpbl9hZGQoKSAtIEFsbG9jYXRlIGEgbmV3IGlycV9kb21haW4gZGF0YSBzdHJ1Y3R1cmUKICAqIEBvZl9ub2RlOiBvcHRpb25hbCBkZXZpY2UtdHJlZSBub2RlIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgpAQCAtMzAsNyArMzQsNyBAQAogICogQGh3aXJxX21heDogTWF4aW11bSBudW1iZXIgb2YgaW50ZXJydXB0cyBzdXBwb3J0ZWQgYnkgY29udHJvbGxlcgogICogQGRpcmVjdF9tYXg6IE1heGltdW0gdmFsdWUgb2YgZGlyZWN0IG1hcHM7IFVzZSB+MCBmb3Igbm8gbGltaXQ7IDAgZm9yIG5vCiAgKiAgICAgICAgICAgICAgZGlyZWN0IG1hcHBpbmcKLSAqIEBvcHM6IG1hcC91bm1hcCBkb21haW4gY2FsbGJhY2tzCisgKiBAb3BzOiBkb21haW4gY2FsbGJhY2tzCiAgKiBAaG9zdF9kYXRhOiBDb250cm9sbGVyIHByaXZhdGUgZGF0YSBwb2ludGVyCiAgKgogICogQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplIGFuZCBpcnFfZG9tYWluIHN0cnVjdHVyZS4KQEAgLTU2LDYgKzYwLDcgQEAKIAlkb21haW4tPmh3aXJxX21heCA9IGh3aXJxX21heDsKIAlkb21haW4tPnJldm1hcF9zaXplID0gc2l6ZTsKIAlkb21haW4tPnJldm1hcF9kaXJlY3RfbWF4X2lycSA9IGRpcmVjdF9tYXg7CisJaXJxX2RvbWFpbl9jaGVja19oaWVyYXJjaHkoZG9tYWluKTsKIAogCW11dGV4X2xvY2soJmlycV9kb21haW5fbXV0ZXgpOwogCWxpc3RfYWRkKCZkb21haW4tPmxpbmssICZpcnFfZG9tYWluX2xpc3QpOwpAQCAtMTA5LDcgKzExNCw3IEBACiAgKiBAZmlyc3RfaXJxOiBmaXJzdCBudW1iZXIgb2YgaXJxIGJsb2NrIGFzc2lnbmVkIHRvIHRoZSBkb21haW4sCiAgKglwYXNzIHplcm8gdG8gYXNzaWduIGlycXMgb24tdGhlLWZseS4gSWYgZmlyc3RfaXJxIGlzIG5vbi16ZXJvLCB0aGVuCiAgKglwcmUtbWFwIGFsbCBvZiB0aGUgaXJxcyBpbiB0aGUgZG9tYWluIHRvIHZpcnFzIHN0YXJ0aW5nIGF0IGZpcnN0X2lycS4KLSAqIEBvcHM6IG1hcC91bm1hcCBkb21haW4gY2FsbGJhY2tzCisgKiBAb3BzOiBkb21haW4gY2FsbGJhY2tzCiAgKiBAaG9zdF9kYXRhOiBDb250cm9sbGVyIHByaXZhdGUgZGF0YSBwb2ludGVyCiAgKgogICogQWxsb2NhdGVzIGFuIGlycV9kb21haW4sIGFuZCBvcHRpb25hbGx5IGlmIGZpcnN0X2lycSBpcyBwb3NpdGl2ZSB0aGVuIGFsc28KQEAgLTE3NCwxMCArMTc5LDggQEAKIAogCWRvbWFpbiA9IF9faXJxX2RvbWFpbl9hZGQob2Zfbm9kZSwgZmlyc3RfaHdpcnEgKyBzaXplLAogCQkJCSAgZmlyc3RfaHdpcnEgKyBzaXplLCAwLCBvcHMsIGhvc3RfZGF0YSk7Ci0JaWYgKCFkb21haW4pCi0JCXJldHVybiBOVUxMOwotCi0JaXJxX2RvbWFpbl9hc3NvY2lhdGVfbWFueShkb21haW4sIGZpcnN0X2lycSwgZmlyc3RfaHdpcnEsIHNpemUpOworCWlmIChkb21haW4pCisJCWlycV9kb21haW5fYXNzb2NpYXRlX21hbnkoZG9tYWluLCBmaXJzdF9pcnEsIGZpcnN0X2h3aXJxLCBzaXplKTsKIAogCXJldHVybiBkb21haW47CiB9CkBAIC0zODgsNyArMzkxLDYgQEAKIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX21hcHBpbmcoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKIAkJCQlpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7Ci0JdW5zaWduZWQgaW50IGhpbnQ7CiAJaW50IHZpcnE7CiAKIAlwcl9kZWJ1ZygiaXJxX2NyZWF0ZV9tYXBwaW5nKDB4JXAsIDB4JWx4KVxuIiwgZG9tYWluLCBod2lycSk7CkBAIC00MTAsMTIgKzQxMiw4IEBACiAJfQogCiAJLyogQWxsb2NhdGUgYSB2aXJ0dWFsIGludGVycnVwdCBudW1iZXIgKi8KLQloaW50ID0gaHdpcnEgJSBucl9pcnFzOwotCWlmIChoaW50ID09IDApCi0JCWhpbnQrKzsKLQl2aXJxID0gaXJxX2FsbG9jX2Rlc2NfZnJvbShoaW50LCBvZl9ub2RlX3RvX25pZChkb21haW4tPm9mX25vZGUpKTsKLQlpZiAodmlycSA8PSAwKQotCQl2aXJxID0gaXJxX2FsbG9jX2Rlc2NfZnJvbSgxLCBvZl9ub2RlX3RvX25pZChkb21haW4tPm9mX25vZGUpKTsKKwl2aXJxID0gaXJxX2RvbWFpbl9hbGxvY19kZXNjcygtMSwgMSwgaHdpcnEsCisJCQkJICAgICAgb2Zfbm9kZV90b19uaWQoZG9tYWluLT5vZl9ub2RlKSk7CiAJaWYgKHZpcnEgPD0gMCkgewogCQlwcl9kZWJ1ZygiLT4gdmlycSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiAwOwpAQCAtNDcxLDcgKzQ2OSw3IEBACiAJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKIAlpcnFfaHdfbnVtYmVyX3QgaHdpcnE7CiAJdW5zaWduZWQgaW50IHR5cGUgPSBJUlFfVFlQRV9OT05FOwotCXVuc2lnbmVkIGludCB2aXJxOworCWludCB2aXJxOwogCiAJZG9tYWluID0gaXJxX2RhdGEtPm5wID8gaXJxX2ZpbmRfaG9zdChpcnFfZGF0YS0+bnApIDogaXJxX2RlZmF1bHRfZG9tYWluOwogCWlmICghZG9tYWluKSB7CkBAIC00ODksMTAgKzQ4NywyNCBAQAogCQkJcmV0dXJuIDA7CiAJfQogCi0JLyogQ3JlYXRlIG1hcHBpbmcgKi8KLQl2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKGRvbWFpbiwgaHdpcnEpOwotCWlmICghdmlycSkKLQkJcmV0dXJuIHZpcnE7CisJaWYgKGlycV9kb21haW5faXNfaGllcmFyY2h5KGRvbWFpbikpIHsKKwkJLyoKKwkJICogSWYgd2UndmUgYWxyZWFkeSBjb25maWd1cmVkIHRoaXMgaW50ZXJydXB0LAorCQkgKiBkb24ndCBkbyBpdCBhZ2Fpbiwgb3IgaGVsbCB3aWxsIGJyZWFrIGxvb3NlLgorCQkgKi8KKwkJdmlycSA9IGlycV9maW5kX21hcHBpbmcoZG9tYWluLCBod2lycSk7CisJCWlmICh2aXJxKQorCQkJcmV0dXJuIHZpcnE7CisKKwkJdmlycSA9IGlycV9kb21haW5fYWxsb2NfaXJxcyhkb21haW4sIDEsIE5VTUFfTk9fTk9ERSwgaXJxX2RhdGEpOworCQlpZiAodmlycSA8PSAwKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJLyogQ3JlYXRlIG1hcHBpbmcgKi8KKwkJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhkb21haW4sIGh3aXJxKTsKKwkJaWYgKCF2aXJxKQorCQkJcmV0dXJuIHZpcnE7CisJfQogCiAJLyogU2V0IHR5cGUgaWYgc3BlY2lmaWVkIGFuZCBkaWZmZXJlbnQgdGhhbiB0aGUgY3VycmVudCBvbmUgKi8KIAlpZiAodHlwZSAhPSBJUlFfVFlQRV9OT05FICYmCkBAIC01NDAsOCArNTUyLDggQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaHdpcnEgPCBkb21haW4tPnJldm1hcF9kaXJlY3RfbWF4X2lycSkgewotCQlkYXRhID0gaXJxX2dldF9pcnFfZGF0YShod2lycSk7Ci0JCWlmIChkYXRhICYmIChkYXRhLT5kb21haW4gPT0gZG9tYWluKSAmJiAoZGF0YS0+aHdpcnEgPT0gaHdpcnEpKQorCQlkYXRhID0gaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoZG9tYWluLCBod2lycSk7CisJCWlmIChkYXRhICYmIGRhdGEtPmh3aXJxID09IGh3aXJxKQogCQkJcmV0dXJuIGh3aXJxOwogCX0KIApAQCAtNzA5LDMgKzcyMSw1MTggQEAKIAkueGxhdGUgPSBpcnFfZG9tYWluX3hsYXRlX29uZXR3b2NlbGwsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2RvbWFpbl9zaW1wbGVfb3BzKTsKKworc3RhdGljIGludCBpcnFfZG9tYWluX2FsbG9jX2Rlc2NzKGludCB2aXJxLCB1bnNpZ25lZCBpbnQgY250LAorCQkJCSAgaXJxX2h3X251bWJlcl90IGh3aXJxLCBpbnQgbm9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgaGludDsKKworCWlmICh2aXJxID49IDApIHsKKwkJdmlycSA9IGlycV9hbGxvY19kZXNjcyh2aXJxLCB2aXJxLCBjbnQsIG5vZGUpOworCX0gZWxzZSB7CisJCWhpbnQgPSBod2lycSAlIG5yX2lycXM7CisJCWlmIChoaW50ID09IDApCisJCQloaW50Kys7CisJCXZpcnEgPSBpcnFfYWxsb2NfZGVzY3NfZnJvbShoaW50LCBjbnQsIG5vZGUpOworCQlpZiAodmlycSA8PSAwICYmIGhpbnQgPiAxKQorCQkJdmlycSA9IGlycV9hbGxvY19kZXNjc19mcm9tKDEsIGNudCwgbm9kZSk7CisJfQorCisJcmV0dXJuIHZpcnE7Cit9CisKKyNpZmRlZglDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKKy8qKgorICogaXJxX2RvbWFpbl9hZGRfaGllcmFyY2h5IC0gQWRkIGEgaXJxZG9tYWluIGludG8gdGhlIGhpZXJhcmNoeQorICogQHBhcmVudDoJUGFyZW50IGlycSBkb21haW4gdG8gYXNzb2NpYXRlIHdpdGggdGhlIG5ldyBkb21haW4KKyAqIEBmbGFnczoJSXJxIGRvbWFpbiBmbGFncyBhc3NvY2lhdGVkIHRvIHRoZSBkb21haW4KKyAqIEBzaXplOglTaXplIG9mIHRoZSBkb21haW4uIFNlZSBiZWxvdworICogQG5vZGU6CU9wdGlvbmFsIGRldmljZS10cmVlIG5vZGUgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyCisgKiBAb3BzOglQb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgZG9tYWluIGNhbGxiYWNrcworICogQGhvc3RfZGF0YToJQ29udHJvbGxlciBwcml2YXRlIGRhdGEgcG9pbnRlcgorICoKKyAqIElmIEBzaXplIGlzIDAgYSB0cmVlIGRvbWFpbiBpcyBjcmVhdGVkLCBvdGhlcndpc2UgYSBsaW5lYXIgZG9tYWluLgorICoKKyAqIElmIHN1Y2Nlc3NmdWwgdGhlIHBhcmVudCBpcyBhc3NvY2lhdGVkIHRvIHRoZSBuZXcgZG9tYWluIGFuZCB0aGUKKyAqIGRvbWFpbiBmbGFncyBhcmUgc2V0LgorICogUmV0dXJucyBwb2ludGVyIHRvIElSUSBkb21haW4sIG9yIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IGlycV9kb21haW4gKmlycV9kb21haW5fYWRkX2hpZXJhcmNoeShzdHJ1Y3QgaXJxX2RvbWFpbiAqcGFyZW50LAorCQkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJCQkgICAgdW5zaWduZWQgaW50IHNpemUsCisJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgKm9wcywKKwkJCQkJICAgIHZvaWQgKmhvc3RfZGF0YSkKK3sKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOworCisJaWYgKHNpemUpCisJCWRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihub2RlLCBzaXplLCBvcHMsIGhvc3RfZGF0YSk7CisJZWxzZQorCQlkb21haW4gPSBpcnFfZG9tYWluX2FkZF90cmVlKG5vZGUsIG9wcywgaG9zdF9kYXRhKTsKKwlpZiAoZG9tYWluKSB7CisJCWRvbWFpbi0+cGFyZW50ID0gcGFyZW50OworCQlkb21haW4tPmZsYWdzIHw9IGZsYWdzOworCX0KKworCXJldHVybiBkb21haW47Cit9CisKK3N0YXRpYyB2b2lkIGlycV9kb21haW5faW5zZXJ0X2lycShpbnQgdmlycSkKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKmRhdGE7CisKKwlmb3IgKGRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKHZpcnEpOyBkYXRhOyBkYXRhID0gZGF0YS0+cGFyZW50X2RhdGEpIHsKKwkJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiA9IGRhdGEtPmRvbWFpbjsKKwkJaXJxX2h3X251bWJlcl90IGh3aXJxID0gZGF0YS0+aHdpcnE7CisKKwkJaWYgKGh3aXJxIDwgZG9tYWluLT5yZXZtYXBfc2l6ZSkgeworCQkJZG9tYWluLT5saW5lYXJfcmV2bWFwW2h3aXJxXSA9IHZpcnE7CisJCX0gZWxzZSB7CisJCQltdXRleF9sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOworCQkJcmFkaXhfdHJlZV9pbnNlcnQoJmRvbWFpbi0+cmV2bWFwX3RyZWUsIGh3aXJxLCBkYXRhKTsKKwkJCW11dGV4X3VubG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKKwkJfQorCisJCS8qIElmIG5vdCBhbHJlYWR5IGFzc2lnbmVkLCBnaXZlIHRoZSBkb21haW4gdGhlIGNoaXAncyBuYW1lICovCisJCWlmICghZG9tYWluLT5uYW1lICYmIGRhdGEtPmNoaXApCisJCQlkb21haW4tPm5hbWUgPSBkYXRhLT5jaGlwLT5uYW1lOworCX0KKworCWlycV9jbGVhcl9zdGF0dXNfZmxhZ3ModmlycSwgSVJRX05PUkVRVUVTVCk7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9kb21haW5fcmVtb3ZlX2lycShpbnQgdmlycSkKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKmRhdGE7CisKKwlpcnFfc2V0X3N0YXR1c19mbGFncyh2aXJxLCBJUlFfTk9SRVFVRVNUKTsKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgTlVMTCwgTlVMTCk7CisJc3luY2hyb25pemVfaXJxKHZpcnEpOworCXNtcF9tYigpOworCisJZm9yIChkYXRhID0gaXJxX2dldF9pcnFfZGF0YSh2aXJxKTsgZGF0YTsgZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhKSB7CisJCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW4gPSBkYXRhLT5kb21haW47CisJCWlycV9od19udW1iZXJfdCBod2lycSA9IGRhdGEtPmh3aXJxOworCisJCWlmIChod2lycSA8IGRvbWFpbi0+cmV2bWFwX3NpemUpIHsKKwkJCWRvbWFpbi0+bGluZWFyX3Jldm1hcFtod2lycV0gPSAwOworCQl9IGVsc2UgeworCQkJbXV0ZXhfbG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKKwkJCXJhZGl4X3RyZWVfZGVsZXRlKCZkb21haW4tPnJldm1hcF90cmVlLCBod2lycSk7CisJCQltdXRleF91bmxvY2soJnJldm1hcF90cmVlc19tdXRleCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kb21haW5faW5zZXJ0X2lycV9kYXRhKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJCQkgICBzdHJ1Y3QgaXJxX2RhdGEgKmNoaWxkKQoreworCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGE7CisKKwlpcnFfZGF0YSA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmlycV9kYXRhKSwgR0ZQX0tFUk5FTCwgY2hpbGQtPm5vZGUpOworCWlmIChpcnFfZGF0YSkgeworCQljaGlsZC0+cGFyZW50X2RhdGEgPSBpcnFfZGF0YTsKKwkJaXJxX2RhdGEtPmlycSA9IGNoaWxkLT5pcnE7CisJCWlycV9kYXRhLT5ub2RlID0gY2hpbGQtPm5vZGU7CisJCWlycV9kYXRhLT5kb21haW4gPSBkb21haW47CisJfQorCisJcmV0dXJuIGlycV9kYXRhOworfQorCitzdGF0aWMgdm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxX2RhdGEodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBucl9pcnFzKQoreworCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEsICp0bXA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJCWlycV9kYXRhID0gaXJxX2dldF9pcnFfZGF0YSh2aXJxICsgaSk7CisJCXRtcCA9IGlycV9kYXRhLT5wYXJlbnRfZGF0YTsKKwkJaXJxX2RhdGEtPnBhcmVudF9kYXRhID0gTlVMTDsKKwkJaXJxX2RhdGEtPmRvbWFpbiA9IE5VTEw7CisKKwkJd2hpbGUgKHRtcCkgeworCQkJaXJxX2RhdGEgPSB0bXA7CisJCQl0bXAgPSB0bXAtPnBhcmVudF9kYXRhOworCQkJa2ZyZWUoaXJxX2RhdGEpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGlycV9kb21haW5fYWxsb2NfaXJxX2RhdGEoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhOworCXN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQ7CisJaW50IGk7CisKKwkvKiBUaGUgb3V0ZXJtb3N0IGlycV9kYXRhIGlzIGVtYmVkZGVkIGluIHN0cnVjdCBpcnFfZGVzYyAqLworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJaXJxX2RhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKHZpcnEgKyBpKTsKKwkJaXJxX2RhdGEtPmRvbWFpbiA9IGRvbWFpbjsKKworCQlmb3IgKHBhcmVudCA9IGRvbWFpbi0+cGFyZW50OyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50KSB7CisJCQlpcnFfZGF0YSA9IGlycV9kb21haW5faW5zZXJ0X2lycV9kYXRhKHBhcmVudCwgaXJxX2RhdGEpOworCQkJaWYgKCFpcnFfZGF0YSkgeworCQkJCWlycV9kb21haW5fZnJlZV9pcnFfZGF0YSh2aXJxLCBpICsgMSk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcnFfZG9tYWluX2dldF9pcnFfZGF0YSAtIEdldCBpcnFfZGF0YSBhc3NvY2lhdGVkIHdpdGggQHZpcnEgYW5kIEBkb21haW4KKyAqIEBkb21haW46CWRvbWFpbiB0byBtYXRjaAorICogQHZpcnE6CUlSUSBudW1iZXIgdG8gZ2V0IGlycV9kYXRhCisgKi8KK3N0cnVjdCBpcnFfZGF0YSAqaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJIHVuc2lnbmVkIGludCB2aXJxKQoreworCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGE7CisKKwlmb3IgKGlycV9kYXRhID0gaXJxX2dldF9pcnFfZGF0YSh2aXJxKTsgaXJxX2RhdGE7CisJICAgICBpcnFfZGF0YSA9IGlycV9kYXRhLT5wYXJlbnRfZGF0YSkKKwkJaWYgKGlycV9kYXRhLT5kb21haW4gPT0gZG9tYWluKQorCQkJcmV0dXJuIGlycV9kYXRhOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogaXJxX2RvbWFpbl9zZXRfaHdpcnFfYW5kX2NoaXAgLSBTZXQgaHdpcnEgYW5kIGlycWNoaXAgb2YgQHZpcnEgYXQgQGRvbWFpbgorICogQGRvbWFpbjoJSW50ZXJydXB0IGRvbWFpbiB0byBtYXRjaAorICogQHZpcnE6CUlSUSBudW1iZXIKKyAqIEBod2lycToJVGhlIGh3aXJxIG51bWJlcgorICogQGNoaXA6CVRoZSBhc3NvY2lhdGVkIGludGVycnVwdCBjaGlwCisgKiBAY2hpcF9kYXRhOglUaGUgYXNzb2NpYXRlZCBjaGlwIGRhdGEKKyAqLworaW50IGlycV9kb21haW5fc2V0X2h3aXJxX2FuZF9jaGlwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCB2aXJxLAorCQkJCSAgaXJxX2h3X251bWJlcl90IGh3aXJxLCBzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAsCisJCQkJICB2b2lkICpjaGlwX2RhdGEpCit7CisJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSA9IGlycV9kb21haW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmlycSk7CisKKwlpZiAoIWlycV9kYXRhKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWlycV9kYXRhLT5od2lycSA9IGh3aXJxOworCWlycV9kYXRhLT5jaGlwID0gY2hpcCA/IGNoaXAgOiAmbm9faXJxX2NoaXA7CisJaXJxX2RhdGEtPmNoaXBfZGF0YSA9IGNoaXBfZGF0YTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlycV9kb21haW5fc2V0X2luZm8gLSBTZXQgdGhlIGNvbXBsZXRlIGRhdGEgZm9yIGEgQHZpcnEgaW4gQGRvbWFpbgorICogQGRvbWFpbjoJCUludGVycnVwdCBkb21haW4gdG8gbWF0Y2gKKyAqIEB2aXJxOgkJSVJRIG51bWJlcgorICogQGh3aXJxOgkJVGhlIGhhcmR3YXJlIGludGVycnVwdCBudW1iZXIKKyAqIEBjaGlwOgkJVGhlIGFzc29jaWF0ZWQgaW50ZXJydXB0IGNoaXAKKyAqIEBjaGlwX2RhdGE6CQlUaGUgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgY2hpcCBkYXRhCisgKiBAaGFuZGxlcjoJCVRoZSBpbnRlcnJ1cHQgZmxvdyBoYW5kbGVyCisgKiBAaGFuZGxlcl9kYXRhOglUaGUgaW50ZXJydXB0IGZsb3cgaGFuZGxlciBkYXRhCisgKiBAaGFuZGxlcl9uYW1lOglUaGUgaW50ZXJydXB0IGhhbmRsZXIgbmFtZQorICovCit2b2lkIGlycV9kb21haW5fc2V0X2luZm8oc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgaXJxX2h3X251bWJlcl90IGh3aXJxLCBzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAsCisJCQkgdm9pZCAqY2hpcF9kYXRhLCBpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlciwKKwkJCSB2b2lkICpoYW5kbGVyX2RhdGEsIGNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSkKK3sKKwlpcnFfZG9tYWluX3NldF9od2lycV9hbmRfY2hpcChkb21haW4sIHZpcnEsIGh3aXJxLCBjaGlwLCBjaGlwX2RhdGEpOworCV9faXJxX3NldF9oYW5kbGVyKHZpcnEsIGhhbmRsZXIsIDAsIGhhbmRsZXJfbmFtZSk7CisJaXJxX3NldF9oYW5kbGVyX2RhdGEodmlycSwgaGFuZGxlcl9kYXRhKTsKK30KKworLyoqCisgKiBpcnFfZG9tYWluX3Jlc2V0X2lycV9kYXRhIC0gQ2xlYXIgaHdpcnEsIGNoaXAgYW5kIGNoaXBfZGF0YSBpbiBAaXJxX2RhdGEKKyAqIEBpcnFfZGF0YToJVGhlIHBvaW50ZXIgdG8gaXJxX2RhdGEKKyAqLwordm9pZCBpcnFfZG9tYWluX3Jlc2V0X2lycV9kYXRhKHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpCit7CisJaXJxX2RhdGEtPmh3aXJxID0gMDsKKwlpcnFfZGF0YS0+Y2hpcCA9ICZub19pcnFfY2hpcDsKKwlpcnFfZGF0YS0+Y2hpcF9kYXRhID0gTlVMTDsKK30KKworLyoqCisgKiBpcnFfZG9tYWluX2ZyZWVfaXJxc19jb21tb24gLSBDbGVhciBpcnFfZGF0YSBhbmQgZnJlZSB0aGUgcGFyZW50CisgKiBAZG9tYWluOglJbnRlcnJ1cHQgZG9tYWluIHRvIG1hdGNoCisgKiBAdmlycToJSVJRIG51bWJlciB0byBzdGFydCB3aXRoCisgKiBAbnJfaXJxczoJVGhlIG51bWJlciBvZiBpcnFzIHRvIGZyZWUKKyAqLwordm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxc19jb21tb24oc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJIHVuc2lnbmVkIGludCBucl9pcnFzKQoreworCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJCWlycV9kYXRhID0gaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoZG9tYWluLCB2aXJxICsgaSk7CisJCWlmIChpcnFfZGF0YSkKKwkJCWlycV9kb21haW5fcmVzZXRfaXJxX2RhdGEoaXJxX2RhdGEpOworCX0KKwlpcnFfZG9tYWluX2ZyZWVfaXJxc19wYXJlbnQoZG9tYWluLCB2aXJxLCBucl9pcnFzKTsKK30KKworLyoqCisgKiBpcnFfZG9tYWluX2ZyZWVfaXJxc190b3AgLSBDbGVhciBoYW5kbGVyIGFuZCBoYW5kbGVyIGRhdGEsIGNsZWFyIGlycWRhdGEgYW5kIGZyZWUgcGFyZW50CisgKiBAZG9tYWluOglJbnRlcnJ1cHQgZG9tYWluIHRvIG1hdGNoCisgKiBAdmlycToJSVJRIG51bWJlciB0byBzdGFydCB3aXRoCisgKiBAbnJfaXJxczoJVGhlIG51bWJlciBvZiBpcnFzIHRvIGZyZWUKKyAqLwordm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxc190b3Aoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJaXJxX3NldF9oYW5kbGVyX2RhdGEodmlycSArIGksIE5VTEwpOworCQlpcnFfc2V0X2hhbmRsZXIodmlycSArIGksIE5VTEwpOworCX0KKwlpcnFfZG9tYWluX2ZyZWVfaXJxc19jb21tb24oZG9tYWluLCB2aXJxLCBucl9pcnFzKTsKK30KKworc3RhdGljIGJvb2wgaXJxX2RvbWFpbl9pc19hdXRvX3JlY3Vyc2l2ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluKQoreworCXJldHVybiBkb21haW4tPmZsYWdzICYgSVJRX0RPTUFJTl9GTEFHX0FVVE9fUkVDVVJTSVZFOworfQorCitzdGF0aWMgdm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxc19yZWN1cnNpdmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJICAgdW5zaWduZWQgaW50IGlycV9iYXNlLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlkb21haW4tPm9wcy0+ZnJlZShkb21haW4sIGlycV9iYXNlLCBucl9pcnFzKTsKKwlpZiAoaXJxX2RvbWFpbl9pc19hdXRvX3JlY3Vyc2l2ZShkb21haW4pKSB7CisJCUJVR19PTighZG9tYWluLT5wYXJlbnQpOworCQlpcnFfZG9tYWluX2ZyZWVfaXJxc19yZWN1cnNpdmUoZG9tYWluLT5wYXJlbnQsIGlycV9iYXNlLAorCQkJCQkgICAgICAgbnJfaXJxcyk7CisJfQorfQorCitzdGF0aWMgaW50IGlycV9kb21haW5fYWxsb2NfaXJxc19yZWN1cnNpdmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJICAgdW5zaWduZWQgaW50IGlycV9iYXNlLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbnJfaXJxcywgdm9pZCAqYXJnKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQgPSBkb21haW4tPnBhcmVudDsKKwlib29sIHJlY3Vyc2l2ZSA9IGlycV9kb21haW5faXNfYXV0b19yZWN1cnNpdmUoZG9tYWluKTsKKworCUJVR19PTihyZWN1cnNpdmUgJiYgIXBhcmVudCk7CisJaWYgKHJlY3Vyc2l2ZSkKKwkJcmV0ID0gaXJxX2RvbWFpbl9hbGxvY19pcnFzX3JlY3Vyc2l2ZShwYXJlbnQsIGlycV9iYXNlLAorCQkJCQkJICAgICAgbnJfaXJxcywgYXJnKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IGRvbWFpbi0+b3BzLT5hbGxvYyhkb21haW4sIGlycV9iYXNlLCBucl9pcnFzLCBhcmcpOworCWlmIChyZXQgPCAwICYmIHJlY3Vyc2l2ZSkKKwkJaXJxX2RvbWFpbl9mcmVlX2lycXNfcmVjdXJzaXZlKHBhcmVudCwgaXJxX2Jhc2UsIG5yX2lycXMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBfX2lycV9kb21haW5fYWxsb2NfaXJxcyAtIEFsbG9jYXRlIElSUXMgZnJvbSBkb21haW4KKyAqIEBkb21haW46CWRvbWFpbiB0byBhbGxvY2F0ZSBmcm9tCisgKiBAaXJxX2Jhc2U6CWFsbG9jYXRlIHNwZWNpZmllZCBJUlEgbnVibWVyIGlmIGlycV9iYXNlID49IDAKKyAqIEBucl9pcnFzOgludW1iZXIgb2YgSVJRcyB0byBhbGxvY2F0ZQorICogQG5vZGU6CU5VTUEgbm9kZSBpZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24KKyAqIEBhcmc6CWRvbWFpbiBzcGVjaWZpYyBhcmd1bWVudAorICogQHJlYWxsb2M6CUlSUSBkZXNjcmlwdG9ycyBoYXZlIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQgaWYgdHJ1ZQorICoKKyAqIEFsbG9jYXRlIElSUSBudW1iZXJzIGFuZCBpbml0aWFsaXplZCBhbGwgZGF0YSBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQKKyAqIGhpZXJhcmNoeSBJUlEgZG9tYWlucy4KKyAqIFBhcmFtZXRlciBAcmVhbGxvYyBpcyBtYWlubHkgdG8gc3VwcG9ydCBsZWdhY3kgSVJRcy4KKyAqIFJldHVybnMgZXJyb3IgY29kZSBvciBhbGxvY2F0ZWQgSVJRIG51bWJlcgorICoKKyAqIFRoZSB3aG9sZSBwcm9jZXNzIHRvIHNldHVwIGFuIElSUSBoYXMgYmVlbiBzcGxpdCBpbnRvIHR3byBzdGVwcy4KKyAqIFRoZSBmaXJzdCBzdGVwLCBfX2lycV9kb21haW5fYWxsb2NfaXJxcygpLCBpcyB0byBhbGxvY2F0ZSBJUlEKKyAqIGRlc2NyaXB0b3IgYW5kIHJlcXVpcmVkIGhhcmR3YXJlIHJlc291cmNlcy4gVGhlIHNlY29uZCBzdGVwLAorICogaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoKSwgaXMgdG8gcHJvZ3JhbSBoYXJkd2FyZXMgd2l0aCBwcmVhbGxvY2F0ZWQKKyAqIHJlc291cmNlcy4gSW4gdGhpcyB3YXksIGl0J3MgZWFzaWVyIHRvIHJvbGxiYWNrIHdoZW4gZmFpbGluZyB0bworICogYWxsb2NhdGUgcmVzb3VyY2VzLgorICovCitpbnQgX19pcnFfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgaW50IGlycV9iYXNlLAorCQkJICAgIHVuc2lnbmVkIGludCBucl9pcnFzLCBpbnQgbm9kZSwgdm9pZCAqYXJnLAorCQkJICAgIGJvb2wgcmVhbGxvYykKK3sKKwlpbnQgaSwgcmV0LCB2aXJxOworCisJaWYgKGRvbWFpbiA9PSBOVUxMKSB7CisJCWRvbWFpbiA9IGlycV9kZWZhdWx0X2RvbWFpbjsKKwkJaWYgKFdBUk4oIWRvbWFpbiwgImRvbWFpbiBpcyBOVUxMOyBjYW5ub3QgYWxsb2NhdGUgSVJRXG4iKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZG9tYWluLT5vcHMtPmFsbG9jKSB7CisJCXByX2RlYnVnKCJkb21haW4tPm9wcy0+YWxsb2MoKSBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJaWYgKHJlYWxsb2MgJiYgaXJxX2Jhc2UgPj0gMCkgeworCQl2aXJxID0gaXJxX2Jhc2U7CisJfSBlbHNlIHsKKwkJdmlycSA9IGlycV9kb21haW5fYWxsb2NfZGVzY3MoaXJxX2Jhc2UsIG5yX2lycXMsIDAsIG5vZGUpOworCQlpZiAodmlycSA8IDApIHsKKwkJCXByX2RlYnVnKCJjYW5ub3QgYWxsb2NhdGUgSVJRKGJhc2UgJWQsIGNvdW50ICVkKVxuIiwKKwkJCQkgaXJxX2Jhc2UsIG5yX2lycXMpOworCQkJcmV0dXJuIHZpcnE7CisJCX0KKwl9CisKKwlpZiAoaXJxX2RvbWFpbl9hbGxvY19pcnFfZGF0YShkb21haW4sIHZpcnEsIG5yX2lycXMpKSB7CisJCXByX2RlYnVnKCJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBJUlElZFxuIiwgdmlycSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfZGVzYzsKKwl9CisKKwltdXRleF9sb2NrKCZpcnFfZG9tYWluX211dGV4KTsKKwlyZXQgPSBpcnFfZG9tYWluX2FsbG9jX2lycXNfcmVjdXJzaXZlKGRvbWFpbiwgdmlycSwgbnJfaXJxcywgYXJnKTsKKwlpZiAocmV0IDwgMCkgeworCQltdXRleF91bmxvY2soJmlycV9kb21haW5fbXV0ZXgpOworCQlnb3RvIG91dF9mcmVlX2lycV9kYXRhOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKQorCQlpcnFfZG9tYWluX2luc2VydF9pcnEodmlycSArIGkpOworCW11dGV4X3VubG9jaygmaXJxX2RvbWFpbl9tdXRleCk7CisKKwlyZXR1cm4gdmlycTsKKworb3V0X2ZyZWVfaXJxX2RhdGE6CisJaXJxX2RvbWFpbl9mcmVlX2lycV9kYXRhKHZpcnEsIG5yX2lycXMpOworb3V0X2ZyZWVfZGVzYzoKKwlpcnFfZnJlZV9kZXNjcyh2aXJxLCBucl9pcnFzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlycV9kb21haW5fZnJlZV9pcnFzIC0gRnJlZSBJUlEgbnVtYmVyIGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcworICogQHZpcnE6CWJhc2UgSVJRIG51bWJlcgorICogQG5yX2lycXM6CW51bWJlciBvZiBJUlFzIHRvIGZyZWUKKyAqLwordm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxcyh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMpCit7CisJc3RydWN0IGlycV9kYXRhICpkYXRhID0gaXJxX2dldF9pcnFfZGF0YSh2aXJxKTsKKwlpbnQgaTsKKworCWlmIChXQVJOKCFkYXRhIHx8ICFkYXRhLT5kb21haW4gfHwgIWRhdGEtPmRvbWFpbi0+b3BzLT5mcmVlLAorCQkgIk5VTEwgcG9pbnRlciwgY2Fubm90IGZyZWUgaXJxXG4iKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmaXJxX2RvbWFpbl9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykKKwkJaXJxX2RvbWFpbl9yZW1vdmVfaXJxKHZpcnEgKyBpKTsKKwlpcnFfZG9tYWluX2ZyZWVfaXJxc19yZWN1cnNpdmUoZGF0YS0+ZG9tYWluLCB2aXJxLCBucl9pcnFzKTsKKwltdXRleF91bmxvY2soJmlycV9kb21haW5fbXV0ZXgpOworCisJaXJxX2RvbWFpbl9mcmVlX2lycV9kYXRhKHZpcnEsIG5yX2lycXMpOworCWlycV9mcmVlX2Rlc2NzKHZpcnEsIG5yX2lycXMpOworfQorCisvKioKKyAqIGlycV9kb21haW5fYWxsb2NfaXJxc19wYXJlbnQgLSBBbGxvY2F0ZSBpbnRlcnJ1cHRzIGZyb20gcGFyZW50IGRvbWFpbgorICogQGlycV9iYXNlOglCYXNlIElSUSBudW1iZXIKKyAqIEBucl9pcnFzOglOdW1iZXIgb2YgSVJRcyB0byBhbGxvY2F0ZQorICogQGFyZzoJQWxsb2NhdGlvbiBkYXRhIChhcmNoL2RvbWFpbiBzcGVjaWZpYykKKyAqCisgKiBDaGVjayB3aGV0aGVyIHRoZSBkb21haW4gaGFzIGJlZW4gc2V0dXAgcmVjdXJzaXZlLiBJZiBub3QgYWxsb2NhdGUKKyAqIHRocm91Z2ggdGhlIHBhcmVudCBkb21haW4uCisgKi8KK2ludCBpcnFfZG9tYWluX2FsbG9jX2lycXNfcGFyZW50KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJIHVuc2lnbmVkIGludCBpcnFfYmFzZSwgdW5zaWduZWQgaW50IG5yX2lycXMsCisJCQkJIHZvaWQgKmFyZykKK3sKKwkvKiBpcnFfZG9tYWluX2FsbG9jX2lycXNfcmVjdXJzaXZlKCkgaGFzIGNhbGxlZCBwYXJlbnQncyBhbGxvYygpICovCisJaWYgKGlycV9kb21haW5faXNfYXV0b19yZWN1cnNpdmUoZG9tYWluKSkKKwkJcmV0dXJuIDA7CisKKwlkb21haW4gPSBkb21haW4tPnBhcmVudDsKKwlpZiAoZG9tYWluKQorCQlyZXR1cm4gaXJxX2RvbWFpbl9hbGxvY19pcnFzX3JlY3Vyc2l2ZShkb21haW4sIGlycV9iYXNlLAorCQkJCQkJICAgICAgIG5yX2lycXMsIGFyZyk7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKy8qKgorICogaXJxX2RvbWFpbl9mcmVlX2lycXNfcGFyZW50IC0gRnJlZSBpbnRlcnJ1cHRzIGZyb20gcGFyZW50IGRvbWFpbgorICogQGlycV9iYXNlOglCYXNlIElSUSBudW1iZXIKKyAqIEBucl9pcnFzOglOdW1iZXIgb2YgSVJRcyB0byBmcmVlCisgKgorICogQ2hlY2sgd2hldGhlciB0aGUgZG9tYWluIGhhcyBiZWVuIHNldHVwIHJlY3Vyc2l2ZS4gSWYgbm90IGZyZWUKKyAqIHRocm91Z2ggdGhlIHBhcmVudCBkb21haW4uCisgKi8KK3ZvaWQgaXJxX2RvbWFpbl9mcmVlX2lycXNfcGFyZW50KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJIHVuc2lnbmVkIGludCBpcnFfYmFzZSwgdW5zaWduZWQgaW50IG5yX2lycXMpCit7CisJLyogaXJxX2RvbWFpbl9mcmVlX2lycXNfcmVjdXJzaXZlKCkgd2lsbCBjYWxsIHBhcmVudCdzIGZyZWUgKi8KKwlpZiAoIWlycV9kb21haW5faXNfYXV0b19yZWN1cnNpdmUoZG9tYWluKSAmJiBkb21haW4tPnBhcmVudCkKKwkJaXJxX2RvbWFpbl9mcmVlX2lycXNfcmVjdXJzaXZlKGRvbWFpbi0+cGFyZW50LCBpcnFfYmFzZSwKKwkJCQkJICAgICAgIG5yX2lycXMpOworfQorCisvKioKKyAqIGlycV9kb21haW5fYWN0aXZhdGVfaXJxIC0gQ2FsbCBkb21haW5fb3BzLT5hY3RpdmF0ZSByZWN1cnNpdmVseSB0byBhY3RpdmF0ZQorICoJCQkgICAgIGludGVycnVwdAorICogQGlycV9kYXRhOglvdXRlcm1vc3QgaXJxX2RhdGEgYXNzb2NpYXRlZCB3aXRoIGludGVycnVwdAorICoKKyAqIFRoaXMgaXMgdGhlIHNlY29uZCBzdGVwIHRvIGNhbGwgZG9tYWluX29wcy0+YWN0aXZhdGUgdG8gcHJvZ3JhbSBpbnRlcnJ1cHQKKyAqIGNvbnRyb2xsZXJzLCBzbyB0aGUgaW50ZXJydXB0IGNvdWxkIGFjdHVhbGx5IGdldCBkZWxpdmVyZWQuCisgKi8KK3ZvaWQgaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSkKK3sKKwlpZiAoaXJxX2RhdGEgJiYgaXJxX2RhdGEtPmRvbWFpbikgeworCQlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluID0gaXJxX2RhdGEtPmRvbWFpbjsKKworCQlpZiAoaXJxX2RhdGEtPnBhcmVudF9kYXRhKQorCQkJaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoaXJxX2RhdGEtPnBhcmVudF9kYXRhKTsKKwkJaWYgKGRvbWFpbi0+b3BzLT5hY3RpdmF0ZSkKKwkJCWRvbWFpbi0+b3BzLT5hY3RpdmF0ZShkb21haW4sIGlycV9kYXRhKTsKKwl9Cit9CisKKy8qKgorICogaXJxX2RvbWFpbl9kZWFjdGl2YXRlX2lycSAtIENhbGwgZG9tYWluX29wcy0+ZGVhY3RpdmF0ZSByZWN1cnNpdmVseSB0bworICoJCQkgICAgICAgZGVhY3RpdmF0ZSBpbnRlcnJ1cHQKKyAqIEBpcnFfZGF0YTogb3V0ZXJtb3N0IGlycV9kYXRhIGFzc29jaWF0ZWQgd2l0aCBpbnRlcnJ1cHQKKyAqCisgKiBJdCBjYWxscyBkb21haW5fb3BzLT5kZWFjdGl2YXRlIHRvIHByb2dyYW0gaW50ZXJydXB0IGNvbnRyb2xsZXJzIHRvIGRpc2FibGUKKyAqIGludGVycnVwdCBkZWxpdmVyeS4KKyAqLwordm9pZCBpcnFfZG9tYWluX2RlYWN0aXZhdGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpCit7CisJaWYgKGlycV9kYXRhICYmIGlycV9kYXRhLT5kb21haW4pIHsKKwkJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiA9IGlycV9kYXRhLT5kb21haW47CisKKwkJaWYgKGRvbWFpbi0+b3BzLT5kZWFjdGl2YXRlKQorCQkJZG9tYWluLT5vcHMtPmRlYWN0aXZhdGUoZG9tYWluLCBpcnFfZGF0YSk7CisJCWlmIChpcnFfZGF0YS0+cGFyZW50X2RhdGEpCisJCQlpcnFfZG9tYWluX2RlYWN0aXZhdGVfaXJxKGlycV9kYXRhLT5wYXJlbnRfZGF0YSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpcnFfZG9tYWluX2NoZWNrX2hpZXJhcmNoeShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluKQoreworCS8qIEhpZXJhcmNoeSBpcnFfZG9tYWlucyBtdXN0IGltcGxlbWVudCBjYWxsYmFjayBhbGxvYygpICovCisJaWYgKGRvbWFpbi0+b3BzLT5hbGxvYykKKwkJZG9tYWluLT5mbGFncyB8PSBJUlFfRE9NQUlOX0ZMQUdfSElFUkFSQ0hZOworfQorI2Vsc2UJLyogQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZICovCisvKioKKyAqIGlycV9kb21haW5fZ2V0X2lycV9kYXRhIC0gR2V0IGlycV9kYXRhIGFzc29jaWF0ZWQgd2l0aCBAdmlycSBhbmQgQGRvbWFpbgorICogQGRvbWFpbjoJZG9tYWluIHRvIG1hdGNoCisgKiBAdmlycToJSVJRIG51bWJlciB0byBnZXQgaXJxX2RhdGEKKyAqLworc3RydWN0IGlycV9kYXRhICppcnFfZG9tYWluX2dldF9pcnFfZGF0YShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQkgdW5zaWduZWQgaW50IHZpcnEpCit7CisJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEodmlycSk7CisKKwlyZXR1cm4gKGlycV9kYXRhICYmIGlycV9kYXRhLT5kb21haW4gPT0gZG9tYWluKSA/IGlycV9kYXRhIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgaXJxX2RvbWFpbl9jaGVja19oaWVyYXJjaHkoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbikKK3sKK30KKyNlbmRpZgkvKiBDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDBhOTEwNGIuLjgwNjkyMzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMTgzLDYgKzE4Myw3IEBACiAJcmV0ID0gY2hpcC0+aXJxX3NldF9hZmZpbml0eShkYXRhLCBtYXNrLCBmb3JjZSk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIElSUV9TRVRfTUFTS19PSzoKKwljYXNlIElSUV9TRVRfTUFTS19PS19ET05FOgogCQljcHVtYXNrX2NvcHkoZGF0YS0+YWZmaW5pdHksIG1hc2spOwogCWNhc2UgSVJRX1NFVF9NQVNLX09LX05PQ09QWToKIAkJaXJxX3NldF90aHJlYWRfYWZmaW5pdHkoZGVzYyk7CkBAIC02MDAsNiArNjAxLDcgQEAKIAogCXN3aXRjaCAocmV0KSB7CiAJY2FzZSBJUlFfU0VUX01BU0tfT0s6CisJY2FzZSBJUlFfU0VUX01BU0tfT0tfRE9ORToKIAkJaXJxZF9jbGVhcigmZGVzYy0+aXJxX2RhdGEsIElSUURfVFJJR0dFUl9NQVNLKTsKIAkJaXJxZF9zZXQoJmRlc2MtPmlycV9kYXRhLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbXNpLmMgYi9rZXJuZWwvaXJxL21zaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTgxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvaXJxL21zaS5jCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogbGludXgva2VybmVsL2lycS9tc2kuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLgorICogQXV0aG9yOiBKaWFuZyBMaXUgPGppYW5nLmxpdUBsaW51eC5pbnRlbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBjb21tb24gY29kZSB0byBzdXBwb3J0IE1lc3NhZ2UgU2lnbmFsbGVkIEludGVycnVwdCBmb3IKKyAqIFBDSSBjb21wYXRpYmxlIGFuZCBub24gUENJIGNvbXBhdGlibGUgZGV2aWNlcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisjaW5jbHVkZSA8bGludXgvbXNpLmg+CisKKy8qIFRlbXBhcm9yeSBzb2x1dGlvbiBmb3IgYnVpbGRpbmcsIHdpbGwgYmUgcmVtb3ZlZCBsYXRlciAqLworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCit2b2lkIF9fZ2V0X2NhY2hlZF9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJKm1zZyA9IGVudHJ5LT5tc2c7Cit9CisKK3ZvaWQgZ2V0X2NhY2hlZF9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeSA9IGlycV9nZXRfbXNpX2Rlc2MoaXJxKTsKKworCV9fZ2V0X2NhY2hlZF9tc2lfbXNnKGVudHJ5LCBtc2cpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X2NhY2hlZF9tc2lfbXNnKTsKKworI2lmZGVmIENPTkZJR19HRU5FUklDX01TSV9JUlFfRE9NQUlOCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2NoaXBfd3JpdGVfbXNpX21zZyhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsCisJCQkJCSAgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlkYXRhLT5jaGlwLT5pcnFfd3JpdGVfbXNpX21zZyhkYXRhLCBtc2cpOworfQorCisvKioKKyAqIG1zaV9kb21haW5fc2V0X2FmZmluaXR5IC0gR2VuZXJpYyBhZmZpbml0eSBzZXR0ZXIgZnVuY3Rpb24gZm9yIE1TSSBkb21haW5zCisgKiBAaXJxX2RhdGE6CVRoZSBpcnEgZGF0YSBhc3NvY2lhdGVkIHRvIHRoZSBpbnRlcnJ1cHQKKyAqIEBtYXNrOglUaGUgYWZmaW5pdHkgbWFzayB0byBzZXQKKyAqIEBmb3JjZToJRmxhZyB0byBlbmZvcmNlIHNldHRpbmcgKGRpc2FibGUgb25saW5lIGNoZWNrcykKKyAqCisgKiBJbnRlbmRlZCB0byBiZSB1c2VkIGJ5IE1TSSBpbnRlcnJ1cHQgY29udHJvbGxlcnMgd2hpY2ggYXJlCisgKiBpbXBsZW1lbnRlZCB3aXRoIGhpZXJhcmNoaWNhbCBkb21haW5zLgorICovCitpbnQgbXNpX2RvbWFpbl9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKnBhcmVudCA9IGlycV9kYXRhLT5wYXJlbnRfZGF0YTsKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisJaW50IHJldDsKKworCXJldCA9IHBhcmVudC0+Y2hpcC0+aXJxX3NldF9hZmZpbml0eShwYXJlbnQsIG1hc2ssIGZvcmNlKTsKKwlpZiAocmV0ID49IDAgJiYgcmV0ICE9IElSUV9TRVRfTUFTS19PS19ET05FKSB7CisJCUJVR19PTihpcnFfY2hpcF9jb21wb3NlX21zaV9tc2coaXJxX2RhdGEsICZtc2cpKTsKKwkJaXJxX2NoaXBfd3JpdGVfbXNpX21zZyhpcnFfZGF0YSwgJm1zZyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXNpX2RvbWFpbl9hY3RpdmF0ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpCit7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCisJQlVHX09OKGlycV9jaGlwX2NvbXBvc2VfbXNpX21zZyhpcnFfZGF0YSwgJm1zZykpOworCWlycV9jaGlwX3dyaXRlX21zaV9tc2coaXJxX2RhdGEsICZtc2cpOworfQorCitzdGF0aWMgdm9pZCBtc2lfZG9tYWluX2RlYWN0aXZhdGUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgIHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpCit7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwlpcnFfY2hpcF93cml0ZV9tc2lfbXNnKGlycV9kYXRhLCAmbXNnKTsKK30KKworc3RhdGljIGludCBtc2lfZG9tYWluX2FsbG9jKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCB2aXJxLAorCQkJICAgIHVuc2lnbmVkIGludCBucl9pcnFzLCB2b2lkICphcmcpCit7CisJc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbyA9IGRvbWFpbi0+aG9zdF9kYXRhOworCXN0cnVjdCBtc2lfZG9tYWluX29wcyAqb3BzID0gaW5mby0+b3BzOworCWlycV9od19udW1iZXJfdCBod2lycSA9IG9wcy0+Z2V0X2h3aXJxKGluZm8sIGFyZyk7CisJaW50IGksIHJldDsKKworCWlmIChpcnFfZmluZF9tYXBwaW5nKGRvbWFpbiwgaHdpcnEpID4gMCkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlyZXQgPSBpcnFfZG9tYWluX2FsbG9jX2lycXNfcGFyZW50KGRvbWFpbiwgdmlycSwgbnJfaXJxcywgYXJnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJcmV0ID0gb3BzLT5tc2lfaW5pdChkb21haW4sIGluZm8sIHZpcnEgKyBpLCBod2lycSArIGksIGFyZyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAob3BzLT5tc2lfZnJlZSkgeworCQkJCWZvciAoaS0tOyBpID4gMDsgaS0tKQorCQkJCQlvcHMtPm1zaV9mcmVlKGRvbWFpbiwgaW5mbywgdmlycSArIGkpOworCQkJfQorCQkJaXJxX2RvbWFpbl9mcmVlX2lycXNfdG9wKGRvbWFpbiwgdmlycSwgbnJfaXJxcyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1zaV9kb21haW5fZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvID0gZG9tYWluLT5ob3N0X2RhdGE7CisJaW50IGk7CisKKwlpZiAoaW5mby0+b3BzLT5tc2lfZnJlZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKQorCQkJaW5mby0+b3BzLT5tc2lfZnJlZShkb21haW4sIGluZm8sIHZpcnEgKyBpKTsKKwl9CisJaXJxX2RvbWFpbl9mcmVlX2lycXNfdG9wKGRvbWFpbiwgdmlycSwgbnJfaXJxcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgbXNpX2RvbWFpbl9vcHMgPSB7CisJLmFsbG9jCQk9IG1zaV9kb21haW5fYWxsb2MsCisJLmZyZWUJCT0gbXNpX2RvbWFpbl9mcmVlLAorCS5hY3RpdmF0ZQk9IG1zaV9kb21haW5fYWN0aXZhdGUsCisJLmRlYWN0aXZhdGUJPSBtc2lfZG9tYWluX2RlYWN0aXZhdGUsCit9OworCisjaWZkZWYgR0VORVJJQ19NU0lfRE9NQUlOX09QUworc3RhdGljIGlycV9od19udW1iZXJfdCBtc2lfZG9tYWluX29wc19nZXRfaHdpcnEoc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkJCW1zaV9hbGxvY19pbmZvX3QgKmFyZykKK3sKKwlyZXR1cm4gYXJnLT5od2lycTsKK30KKworc3RhdGljIGludCBtc2lfZG9tYWluX29wc19wcmVwYXJlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGludCBudmVjLCBtc2lfYWxsb2NfaW5mb190ICphcmcpCit7CisJbWVtc2V0KGFyZywgMCwgc2l6ZW9mKCphcmcpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXNpX2RvbWFpbl9vcHNfc2V0X2Rlc2MobXNpX2FsbG9jX2luZm9fdCAqYXJnLAorCQkJCSAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCit7CisJYXJnLT5kZXNjID0gZGVzYzsKK30KKyNlbHNlCisjZGVmaW5lIG1zaV9kb21haW5fb3BzX2dldF9od2lycQlOVUxMCisjZGVmaW5lIG1zaV9kb21haW5fb3BzX3ByZXBhcmUJCU5VTEwKKyNkZWZpbmUgbXNpX2RvbWFpbl9vcHNfc2V0X2Rlc2MJCU5VTEwKKyNlbmRpZiAvKiAhR0VORVJJQ19NU0lfRE9NQUlOX09QUyAqLworCitzdGF0aWMgaW50IG1zaV9kb21haW5fb3BzX2luaXQoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCSAgICAgICBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2aXJxLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEsCisJCQkgICAgICAgbXNpX2FsbG9jX2luZm9fdCAqYXJnKQoreworCWlycV9kb21haW5fc2V0X2h3aXJxX2FuZF9jaGlwKGRvbWFpbiwgdmlycSwgaHdpcnEsIGluZm8tPmNoaXAsCisJCQkJICAgICAgaW5mby0+Y2hpcF9kYXRhKTsKKwlpZiAoaW5mby0+aGFuZGxlciAmJiBpbmZvLT5oYW5kbGVyX25hbWUpIHsKKwkJX19pcnFfc2V0X2hhbmRsZXIodmlycSwgaW5mby0+aGFuZGxlciwgMCwgaW5mby0+aGFuZGxlcl9uYW1lKTsKKwkJaWYgKGluZm8tPmhhbmRsZXJfZGF0YSkKKwkJCWlycV9zZXRfaGFuZGxlcl9kYXRhKHZpcnEsIGluZm8tPmhhbmRsZXJfZGF0YSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zaV9kb21haW5fb3BzX2NoZWNrKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgbXNpX2RvbWFpbl9vcHNfZGVmYXVsdCA9IHsKKwkuZ2V0X2h3aXJxCT0gbXNpX2RvbWFpbl9vcHNfZ2V0X2h3aXJxLAorCS5tc2lfaW5pdAk9IG1zaV9kb21haW5fb3BzX2luaXQsCisJLm1zaV9jaGVjawk9IG1zaV9kb21haW5fb3BzX2NoZWNrLAorCS5tc2lfcHJlcGFyZQk9IG1zaV9kb21haW5fb3BzX3ByZXBhcmUsCisJLnNldF9kZXNjCT0gbXNpX2RvbWFpbl9vcHNfc2V0X2Rlc2MsCit9OworCitzdGF0aWMgdm9pZCBtc2lfZG9tYWluX3VwZGF0ZV9kb21fb3BzKHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8pCit7CisJc3RydWN0IG1zaV9kb21haW5fb3BzICpvcHMgPSBpbmZvLT5vcHM7CisKKwlpZiAob3BzID09IE5VTEwpIHsKKwkJaW5mby0+b3BzID0gJm1zaV9kb21haW5fb3BzX2RlZmF1bHQ7CisJCXJldHVybjsKKwl9CisKKwlpZiAob3BzLT5nZXRfaHdpcnEgPT0gTlVMTCkKKwkJb3BzLT5nZXRfaHdpcnEgPSBtc2lfZG9tYWluX29wc19kZWZhdWx0LmdldF9od2lycTsKKwlpZiAob3BzLT5tc2lfaW5pdCA9PSBOVUxMKQorCQlvcHMtPm1zaV9pbml0ID0gbXNpX2RvbWFpbl9vcHNfZGVmYXVsdC5tc2lfaW5pdDsKKwlpZiAob3BzLT5tc2lfY2hlY2sgPT0gTlVMTCkKKwkJb3BzLT5tc2lfY2hlY2sgPSBtc2lfZG9tYWluX29wc19kZWZhdWx0Lm1zaV9jaGVjazsKKwlpZiAob3BzLT5tc2lfcHJlcGFyZSA9PSBOVUxMKQorCQlvcHMtPm1zaV9wcmVwYXJlID0gbXNpX2RvbWFpbl9vcHNfZGVmYXVsdC5tc2lfcHJlcGFyZTsKKwlpZiAob3BzLT5zZXRfZGVzYyA9PSBOVUxMKQorCQlvcHMtPnNldF9kZXNjID0gbXNpX2RvbWFpbl9vcHNfZGVmYXVsdC5zZXRfZGVzYzsKK30KKworc3RhdGljIHZvaWQgbXNpX2RvbWFpbl91cGRhdGVfY2hpcF9vcHMoc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpbmZvLT5jaGlwOworCisJQlVHX09OKCFjaGlwKTsKKwlpZiAoIWNoaXAtPmlycV9tYXNrKQorCQljaGlwLT5pcnFfbWFzayA9IHBjaV9tc2lfbWFza19pcnE7CisJaWYgKCFjaGlwLT5pcnFfdW5tYXNrKQorCQljaGlwLT5pcnFfdW5tYXNrID0gcGNpX21zaV91bm1hc2tfaXJxOworCWlmICghY2hpcC0+aXJxX3NldF9hZmZpbml0eSkKKwkJY2hpcC0+aXJxX3NldF9hZmZpbml0eSA9IG1zaV9kb21haW5fc2V0X2FmZmluaXR5OworfQorCisvKioKKyAqIG1zaV9jcmVhdGVfaXJxX2RvbWFpbiAtIENyZWF0ZSBhIE1TSSBpbnRlcnJ1cHQgZG9tYWluCisgKiBAb2Zfbm9kZToJT3B0aW9uYWwgZGV2aWNlLXRyZWUgbm9kZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIEBpbmZvOglNU0kgZG9tYWluIGluZm8KKyAqIEBwYXJlbnQ6CVBhcmVudCBpcnEgZG9tYWluCisgKi8KK3N0cnVjdCBpcnFfZG9tYWluICptc2lfY3JlYXRlX2lycV9kb21haW4oc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkJIHN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQpCit7CisJaWYgKGluZm8tPmZsYWdzICYgTVNJX0ZMQUdfVVNFX0RFRl9ET01fT1BTKQorCQltc2lfZG9tYWluX3VwZGF0ZV9kb21fb3BzKGluZm8pOworCWlmIChpbmZvLT5mbGFncyAmIE1TSV9GTEFHX1VTRV9ERUZfQ0hJUF9PUFMpCisJCW1zaV9kb21haW5fdXBkYXRlX2NoaXBfb3BzKGluZm8pOworCisJcmV0dXJuIGlycV9kb21haW5fYWRkX2hpZXJhcmNoeShwYXJlbnQsIDAsIDAsIG5vZGUsICZtc2lfZG9tYWluX29wcywKKwkJCQkJaW5mbyk7Cit9CisKKy8qKgorICogbXNpX2RvbWFpbl9hbGxvY19pcnFzIC0gQWxsb2NhdGUgaW50ZXJydXB0cyBmcm9tIGEgTVNJIGludGVycnVwdCBkb21haW4KKyAqIEBkb21haW46CVRoZSBkb21haW4gdG8gYWxsb2NhdGUgZnJvbQorICogQGRldjoJUG9pbnRlciB0byBkZXZpY2Ugc3RydWN0IG9mIHRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBpbnRlcnJ1cHRzCisgKgkJYXJlIGFsbG9jYXRlZAorICogQG52ZWM6CVRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyB0byBhbGxvY2F0ZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUuCisgKi8KK2ludCBtc2lfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBpbnQgbnZlYykKK3sKKwlzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvID0gZG9tYWluLT5ob3N0X2RhdGE7CisJc3RydWN0IG1zaV9kb21haW5fb3BzICpvcHMgPSBpbmZvLT5vcHM7CisJbXNpX2FsbG9jX2luZm9fdCBhcmc7CisJc3RydWN0IG1zaV9kZXNjICpkZXNjOworCWludCBpLCByZXQsIHZpcnEgPSAtMTsKKworCXJldCA9IG9wcy0+bXNpX2NoZWNrKGRvbWFpbiwgaW5mbywgZGV2KTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IG9wcy0+bXNpX3ByZXBhcmUoZG9tYWluLCBkZXYsIG52ZWMsICZhcmcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3JfZWFjaF9tc2lfZW50cnkoZGVzYywgZGV2KSB7CisJCW9wcy0+c2V0X2Rlc2MoJmFyZywgZGVzYyk7CisJCWlmIChpbmZvLT5mbGFncyAmIE1TSV9GTEFHX0lERU5USVRZX01BUCkKKwkJCXZpcnEgPSAoaW50KW9wcy0+Z2V0X2h3aXJxKGluZm8sICZhcmcpOworCQllbHNlCisJCQl2aXJxID0gLTE7CisKKwkJdmlycSA9IF9faXJxX2RvbWFpbl9hbGxvY19pcnFzKGRvbWFpbiwgdmlycSwgZGVzYy0+bnZlY191c2VkLAorCQkJCQkgICAgICAgZGV2X3RvX25vZGUoZGV2KSwgJmFyZywgZmFsc2UpOworCQlpZiAodmlycSA8IDApIHsKKwkJCXJldCA9IC1FTk9TUEM7CisJCQlpZiAob3BzLT5oYW5kbGVfZXJyb3IpCisJCQkJcmV0ID0gb3BzLT5oYW5kbGVfZXJyb3IoZG9tYWluLCBkZXNjLCByZXQpOworCQkJaWYgKG9wcy0+bXNpX2ZpbmlzaCkKKwkJCQlvcHMtPm1zaV9maW5pc2goJmFyZywgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnZlY191c2VkOyBpKyspCisJCQlpcnFfc2V0X21zaV9kZXNjX29mZih2aXJxLCBpLCBkZXNjKTsKKwl9CisKKwlpZiAob3BzLT5tc2lfZmluaXNoKQorCQlvcHMtPm1zaV9maW5pc2goJmFyZywgMCk7CisKKwlmb3JfZWFjaF9tc2lfZW50cnkoZGVzYywgZGV2KSB7CisJCWlmIChkZXNjLT5udmVjX3VzZWQgPT0gMSkKKwkJCWRldl9kYmcoZGV2LCAiaXJxICVkIGZvciBNU0lcbiIsIHZpcnEpOworCQllbHNlCisJCQlkZXZfZGJnKGRldiwgImlycSBbJWQtJWRdIGZvciBNU0lcbiIsCisJCQkJdmlycSwgdmlycSArIGRlc2MtPm52ZWNfdXNlZCAtIDEpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1zaV9kb21haW5fZnJlZV9pcnFzIC0gRnJlZSBpbnRlcnJ1cHRzIGZyb20gYSBNU0kgaW50ZXJydXB0IEBkb21haW4gYXNzb2NpYXRlZCB0cCBAZGV2CisgKiBAZG9tYWluOglUaGUgZG9tYWluIHRvIG1hbmFnaW5nIHRoZSBpbnRlcnJ1cHRzCisgKiBAZGV2OglQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3Qgb2YgdGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIGludGVycnVwdHMKKyAqCQlhcmUgZnJlZQorICovCit2b2lkIG1zaV9kb21haW5fZnJlZV9pcnFzKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2M7CisKKwlmb3JfZWFjaF9tc2lfZW50cnkoZGVzYywgZGV2KSB7CisJCWlycV9kb21haW5fZnJlZV9pcnFzKGRlc2MtPmlycSwgZGVzYy0+bnZlY191c2VkKTsKKwkJZGVzYy0+aXJxID0gMDsKKwl9Cit9CisKKy8qKgorICogbXNpX2dldF9kb21haW5faW5mbyAtIEdldCB0aGUgTVNJIGludGVycnVwdCBkb21haW4gaW5mbyBmb3IgQGRvbWFpbgorICogQGRvbWFpbjoJVGhlIGludGVycnVwdCBkb21haW4gdG8gcmV0cmlldmUgZGF0YSBmcm9tCisgKgorICogUmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgbXNpX2RvbWFpbl9pbmZvIHN0b3JlZCBpbgorICogQGRvbWFpbi0+aG9zdF9kYXRhLgorICovCitzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICptc2lfZ2V0X2RvbWFpbl9pbmZvKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4pCit7CisJcmV0dXJuIChzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICopZG9tYWluLT5ob3N0X2RhdGE7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfR0VORVJJQ19NU0lfSVJRX0RPTUFJTiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbXV0ZXguYyBiL2tlcm5lbC9sb2NraW5nL211dGV4LmMKaW5kZXggZGFkYmY4OC4uNDU0MTk1MSAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbXV0ZXguYworKysgYi9rZXJuZWwvbG9ja2luZy9tdXRleC5jCkBAIC0zNzgsOCArMzc4LDE0IEBACiAJICogcmVzY2hlZHVsZSBub3csIGJlZm9yZSB3ZSB0cnktbG9jayB0aGUgbXV0ZXguIFRoaXMgYXZvaWRzIGdldHRpbmcKIAkgKiBzY2hlZHVsZWQgb3V0IHJpZ2h0IGFmdGVyIHdlIG9idGFpbmVkIHRoZSBtdXRleC4KIAkgKi8KLQlpZiAobmVlZF9yZXNjaGVkKCkpCisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCS8qCisJCSAqIFdlIF9zaG91bGRfIGhhdmUgVEFTS19SVU5OSU5HIGhlcmUsIGJ1dCBqdXN0IGluIGNhc2UKKwkJICogd2UgZG8gbm90LCBtYWtlIGl0IHNvLCBvdGhlcndpc2Ugd2UgbWlnaHQgZ2V0IHN0dWNrLgorCQkgKi8KKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlzY2hlZHVsZV9wcmVlbXB0X2Rpc2FibGVkKCk7CisJfQogCiAJcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDg4Y2VjMWQuLmU1MmE4NzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTMwOTcsNiArMzA5NywzMiBAQAogfQogCiAvKgorICogQ2FuJ3QgdXNlIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgpIGJlY2F1c2Ugb3VyIGNvbmRpdGlvbgorICogJ2ZpbmlzaGVkX2xvYWRpbmcoKScgY29udGFpbnMgYSBibG9ja2luZyBwcmltaXRpdmUgaXRzZWxmIChtdXRleF9sb2NrKS4KKyAqLworc3RhdGljIGludCB3YWl0X2ZpbmlzaGVkX2xvYWRpbmcoc3RydWN0IG1vZHVsZSAqbW9kKQoreworCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CisJaW50IHJldCA9IDA7CisKKwlhZGRfd2FpdF9xdWV1ZSgmbW9kdWxlX3dxLCAmd2FpdCk7CisJZm9yICg7OykgeworCQlpZiAoZmluaXNoZWRfbG9hZGluZyhtb2QtPm5hbWUpKQorCQkJYnJlYWs7CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfQorCisJCXdhaXRfd29rZW4oJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCX0KKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbW9kdWxlX3dxLCAmd2FpdCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogV2UgdHJ5IHRvIHBsYWNlIGl0IGluIHRoZSBsaXN0IG5vdyB0byBtYWtlIHN1cmUgaXQncyB1bmlxdWUgYmVmb3JlCiAgKiB3ZSBkZWRpY2F0ZSB0b28gbWFueSByZXNvdXJjZXMuICBJbiBwYXJ0aWN1bGFyLCB0ZW1wb3JhcnkgcGVyY3B1CiAgKiBtZW1vcnkgZXhoYXVzdGlvbi4KQEAgLTMxMTYsOCArMzE0Miw4IEBACiAJCSAgICB8fCBvbGQtPnN0YXRlID09IE1PRFVMRV9TVEFURV9VTkZPUk1FRCkgewogCQkJLyogV2FpdCBpbiBjYXNlIGl0IGZhaWxzIHRvIGxvYWQuICovCiAJCQltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7Ci0JCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobW9kdWxlX3dxLAotCQkJCQkgICAgICAgZmluaXNoZWRfbG9hZGluZyhtb2QtPm5hbWUpKTsKKworCQkJZXJyID0gd2FpdF9maW5pc2hlZF9sb2FkaW5nKG1vZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0X3VubG9ja2VkOwogCQkJZ290byBhZ2FpbjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrL3ByaW50ay5jCmluZGV4IGNlZDJiODQuLmM4NzU1ZTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay9wcmludGsuYwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAJICAgICAgIHR5cGUgIT0gU1lTTE9HX0FDVElPTl9TSVpFX0JVRkZFUjsKIH0KIAotc3RhdGljIGludCBjaGVja19zeXNsb2dfcGVybWlzc2lvbnMoaW50IHR5cGUsIGJvb2wgZnJvbV9maWxlKQoraW50IGNoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyhpbnQgdHlwZSwgYm9vbCBmcm9tX2ZpbGUpCiB7CiAJLyoKIAkgKiBJZiB0aGlzIGlzIGZyb20gL3Byb2Mva21zZyBhbmQgd2UndmUgYWxyZWFkeSBvcGVuZWQgaXQsIHRoZW4gd2UndmUKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvTWFrZWZpbGUgYi9rZXJuZWwvcmN1L01ha2VmaWxlCmluZGV4IDgwN2NjZmIuLmU2ZmFlNTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvTWFrZWZpbGUKKysrIGIva2VybmVsL3JjdS9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKIG9iai15ICs9IHVwZGF0ZS5vIHNyY3Uubwogb2JqLSQoQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QpICs9IHJjdXRvcnR1cmUubwogb2JqLSQoQ09ORklHX1RSRUVfUkNVKSArPSB0cmVlLm8KLW9iai0kKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKSArPSB0cmVlLm8KK29iai0kKENPTkZJR19QUkVFTVBUX1JDVSkgKz0gdHJlZS5vCiBvYmotJChDT05GSUdfVFJFRV9SQ1VfVFJBQ0UpICs9IHRyZWVfdHJhY2Uubwogb2JqLSQoQ09ORklHX1RJTllfUkNVKSArPSB0aW55Lm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvcmN1LmggYi9rZXJuZWwvcmN1L3JjdS5oCmluZGV4IGZmMWE2ZGUuLjA3YmIwMmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvcmN1LmgKKysrIGIva2VybmVsL3JjdS9yY3UuaApAQCAtMTM1LDQgKzEzNSw2IEBACiAgKi8KICNkZWZpbmUgVFBTKHgpICB0cmFjZXBvaW50X3N0cmluZyh4KQogCit2b2lkIHJjdV9lYXJseV9ib290X3Rlc3RzKHZvaWQpOworCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwppbmRleCAyNDBmYTkwLi40ZDU1OWJhIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwpAQCAtODEyLDYgKzgxMiw3IEBACiAJCWN1cl9vcHMtPmNiX2JhcnJpZXIoKTsKIAkJc3R1dHRlcl93YWl0KCJyY3VfdG9ydHVyZV9jYmZsb29kIik7CiAJfSB3aGlsZSAoIXRvcnR1cmVfbXVzdF9zdG9wKCkpOworCXZmcmVlKHJocCk7CiAJdG9ydHVyZV9rdGhyZWFkX3N0b3BwaW5nKCJyY3VfdG9ydHVyZV9jYmZsb29kIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jCmluZGV4IGMwNjIzZmMuLjBkYjU2NDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdGlueS5jCisrKyBiL2tlcm5lbC9yY3UvdGlueS5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKICAqIGJlIGNhbGxlZCBmcm9tIGhhcmRpcnEgY29udGV4dC4gIEl0IGlzIG5vcm1hbGx5IGNhbGxlZCBmcm9tIHRoZQogICogc2NoZWR1bGluZy1jbG9jayBpbnRlcnJ1cHQuCiAgKi8KLXZvaWQgcmN1X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1LCBpbnQgdXNlcikKK3ZvaWQgcmN1X2NoZWNrX2NhbGxiYWNrcyhpbnQgdXNlcikKIHsKIAlSQ1VfVFJBQ0UoY2hlY2tfY3B1X3N0YWxscygpKTsKIAlpZiAodXNlciB8fCByY3VfaXNfY3B1X3JydXB0X2Zyb21faWRsZSgpKQpAQCAtMzgwLDcgKzM4MCw5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdV9iaCk7CiAKLXZvaWQgcmN1X2luaXQodm9pZCkKK3ZvaWQgX19pbml0IHJjdV9pbml0KHZvaWQpCiB7CiAJb3Blbl9zb2Z0aXJxKFJDVV9TT0ZUSVJRLCByY3VfcHJvY2Vzc19jYWxsYmFja3MpOworCisJcmN1X2Vhcmx5X2Jvb3RfdGVzdHMoKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmMKaW5kZXggOTgxNTQ0Ny4uNzY4MGZjMiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlLmMKKysrIGIva2VybmVsL3JjdS90cmVlLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCS5uYW1lID0gUkNVX1NUQVRFX05BTUUoc25hbWUpLCBcCiAJLmFiYnIgPSBzYWJiciwgXAogfTsgXAotREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCBzbmFtZSMjX2RhdGEpCitERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgcmN1X2RhdGEsIHNuYW1lIyNfZGF0YSkKIAogUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9zY2hlZCwgJ3MnLCBjYWxsX3JjdV9zY2hlZCk7CiBSQ1VfU1RBVEVfSU5JVElBTElaRVIocmN1X2JoLCAnYicsIGNhbGxfcmN1X2JoKTsKQEAgLTE1MiwxOSArMTUyLDYgQEAKICAqLwogc3RhdGljIGludCByY3Vfc2NoZWR1bGVyX2Z1bGx5X2FjdGl2ZSBfX3JlYWRfbW9zdGx5OwogCi0jaWZkZWYgQ09ORklHX1JDVV9CT09TVAotCi0vKgotICogQ29udHJvbCB2YXJpYWJsZXMgZm9yIHBlci1DUFUgYW5kIHBlci1yY3Vfbm9kZSBrdGhyZWFkcy4gIFRoZXNlCi0gKiBoYW5kbGUgYWxsIGZsYXZvcnMgb2YgUkNVLgotICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIHJjdV9jcHVfa3RocmVhZF90YXNrKTsKLURFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgcmN1X2NwdV9rdGhyZWFkX3N0YXR1cyk7Ci1ERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHJjdV9jcHVfa3RocmVhZF9sb29wcyk7Ci1ERUZJTkVfUEVSX0NQVShjaGFyLCByY3VfY3B1X2hhc193b3JrKTsKLQotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCi0KIHN0YXRpYyB2b2lkIHJjdV9ib29zdF9rdGhyZWFkX3NldGFmZmluaXR5KHN0cnVjdCByY3Vfbm9kZSAqcm5wLCBpbnQgb3V0Z29pbmdjcHUpOwogc3RhdGljIHZvaWQgaW52b2tlX3JjdV9jb3JlKHZvaWQpOwogc3RhdGljIHZvaWQgaW52b2tlX3JjdV9jYWxsYmFja3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CkBAIC0yODYsMTEgKzI3MywxMSBAQAogICogYW5kIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHByZWVtcHRpYmxlIFJDVS4KICAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGRpc2FibGVkIHByZWVtcHRpb24uCiAgKi8KLXZvaWQgcmN1X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSkKK3ZvaWQgcmN1X25vdGVfY29udGV4dF9zd2l0Y2godm9pZCkKIHsKIAl0cmFjZV9yY3VfdXRpbGl6YXRpb24oVFBTKCJTdGFydCBjb250ZXh0IHN3aXRjaCIpKTsKIAlyY3Vfc2NoZWRfcXMoKTsKLQlyY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGNwdSk7CisJcmN1X3ByZWVtcHRfbm90ZV9jb250ZXh0X3N3aXRjaCgpOwogCWlmICh1bmxpa2VseShyYXdfY3B1X3JlYWQocmN1X3NjaGVkX3FzX21hc2spKSkKIAkJcmN1X21vbWVudGFyeV9keW50aWNrX2lkbGUoKTsKIAl0cmFjZV9yY3VfdXRpbGl6YXRpb24oVFBTKCJFbmQgY29udGV4dCBzd2l0Y2giKSk7CkBAIC0zMjUsNyArMzEyLDcgQEAKIAkJCQkgIHVuc2lnbmVkIGxvbmcgKm1heGopLAogCQkJIGJvb2wgKmlzaWRsZSwgdW5zaWduZWQgbG9uZyAqbWF4aik7CiBzdGF0aWMgdm9pZCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKTsKLXN0YXRpYyBpbnQgcmN1X3BlbmRpbmcoaW50IGNwdSk7CitzdGF0aWMgaW50IHJjdV9wZW5kaW5nKHZvaWQpOwogCiAvKgogICogUmV0dXJuIHRoZSBudW1iZXIgb2YgUkNVLXNjaGVkIGJhdGNoZXMgcHJvY2Vzc2VkIHRodXMgZmFyIGZvciBkZWJ1ZyAmIHN0YXRzLgpAQCAtNTEwLDExICs0OTcsMTEgQEAKICAqIHdlIHJlYWxseSBoYXZlIGVudGVyZWQgaWRsZSwgYW5kIG11c3QgZG8gdGhlIGFwcHJvcHJpYXRlIGFjY291bnRpbmcuCiAgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBkaXNhYmxlZCBpbnRlcnJ1cHRzLgogICovCi1zdGF0aWMgdm9pZCByY3VfZXFzX2VudGVyX2NvbW1vbihzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwLCBsb25nIGxvbmcgb2xkdmFsLAotCQkJCWJvb2wgdXNlcikKK3N0YXRpYyB2b2lkIHJjdV9lcXNfZW50ZXJfY29tbW9uKGxvbmcgbG9uZyBvbGR2YWwsIGJvb2wgdXNlcikKIHsKIAlzdHJ1Y3QgcmN1X3N0YXRlICpyc3A7CiAJc3RydWN0IHJjdV9kYXRhICpyZHA7CisJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9IHRoaXNfY3B1X3B0cigmcmN1X2R5bnRpY2tzKTsKIAogCXRyYWNlX3JjdV9keW50aWNrKFRQUygiU3RhcnQiKSwgb2xkdmFsLCByZHRwLT5keW50aWNrc19uZXN0aW5nKTsKIAlpZiAoIXVzZXIgJiYgIWlzX2lkbGVfdGFzayhjdXJyZW50KSkgewpAQCAtNTMxLDcgKzUxOCw3IEBACiAJCXJkcCA9IHRoaXNfY3B1X3B0cihyc3AtPnJkYSk7CiAJCWRvX25vY2JfZGVmZXJyZWRfd2FrZXVwKHJkcCk7CiAJfQotCXJjdV9wcmVwYXJlX2Zvcl9pZGxlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmN1X3ByZXBhcmVfZm9yX2lkbGUoKTsKIAkvKiBDUFVzIHNlZWluZyBhdG9taWNfaW5jKCkgbXVzdCBzZWUgcHJpb3IgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7ICAvKiBTZWUgYWJvdmUuICovCiAJYXRvbWljX2luYygmcmR0cC0+ZHludGlja3MpOwpAQCAtNTY1LDcgKzU1Miw3IEBACiAJV0FSTl9PTl9PTkNFKChvbGR2YWwgJiBEWU5USUNLX1RBU0tfTkVTVF9NQVNLKSA9PSAwKTsKIAlpZiAoKG9sZHZhbCAmIERZTlRJQ0tfVEFTS19ORVNUX01BU0spID09IERZTlRJQ0tfVEFTS19ORVNUX1ZBTFVFKSB7CiAJCXJkdHAtPmR5bnRpY2tzX25lc3RpbmcgPSAwOwotCQlyY3VfZXFzX2VudGVyX2NvbW1vbihyZHRwLCBvbGR2YWwsIHVzZXIpOworCQlyY3VfZXFzX2VudGVyX2NvbW1vbihvbGR2YWwsIHVzZXIpOwogCX0gZWxzZSB7CiAJCXJkdHAtPmR5bnRpY2tzX25lc3RpbmcgLT0gRFlOVElDS19UQVNLX05FU1RfVkFMVUU7CiAJfQpAQCAtNTg5LDcgKzU3Niw3IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcmN1X2Vxc19lbnRlcihmYWxzZSk7Ci0JcmN1X3N5c2lkbGVfZW50ZXIodGhpc19jcHVfcHRyKCZyY3VfZHludGlja3MpLCAwKTsKKwlyY3Vfc3lzaWRsZV9lbnRlcigwKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfaWRsZV9lbnRlcik7CkBAIC02MzksOCArNjI2LDggQEAKIAlpZiAocmR0cC0+ZHludGlja3NfbmVzdGluZykKIAkJdHJhY2VfcmN1X2R5bnRpY2soVFBTKCItLT0iKSwgb2xkdmFsLCByZHRwLT5keW50aWNrc19uZXN0aW5nKTsKIAllbHNlCi0JCXJjdV9lcXNfZW50ZXJfY29tbW9uKHJkdHAsIG9sZHZhbCwgdHJ1ZSk7Ci0JcmN1X3N5c2lkbGVfZW50ZXIocmR0cCwgMSk7CisJCXJjdV9lcXNfZW50ZXJfY29tbW9uKG9sZHZhbCwgdHJ1ZSk7CisJcmN1X3N5c2lkbGVfZW50ZXIoMSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC02NTEsMTYgKzYzOCwxNyBAQAogICogd2UgcmVhbGx5IGhhdmUgZXhpdGVkIGlkbGUsIGFuZCBtdXN0IGRvIHRoZSBhcHByb3ByaWF0ZSBhY2NvdW50aW5nLgogICogVGhlIGNhbGxlciBtdXN0IGhhdmUgZGlzYWJsZWQgaW50ZXJydXB0cy4KICAqLwotc3RhdGljIHZvaWQgcmN1X2Vxc19leGl0X2NvbW1vbihzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwLCBsb25nIGxvbmcgb2xkdmFsLAotCQkJICAgICAgIGludCB1c2VyKQorc3RhdGljIHZvaWQgcmN1X2Vxc19leGl0X2NvbW1vbihsb25nIGxvbmcgb2xkdmFsLCBpbnQgdXNlcikKIHsKKwlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gdGhpc19jcHVfcHRyKCZyY3VfZHludGlja3MpOworCiAJcmN1X2R5bnRpY2tzX3Rhc2tfZXhpdCgpOwogCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyAgLyogRm9yY2Ugb3JkZXJpbmcgdy9wcmV2aW91cyBzb2pvdXJuLiAqLwogCWF0b21pY19pbmMoJnJkdHAtPmR5bnRpY2tzKTsKIAkvKiBDUFVzIHNlZWluZyBhdG9taWNfaW5jKCkgbXVzdCBzZWUgbGF0ZXIgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCiAJc21wX21iX19hZnRlcl9hdG9taWMoKTsgIC8qIFNlZSBhYm92ZS4gKi8KIAlXQVJOX09OX09OQ0UoIShhdG9taWNfcmVhZCgmcmR0cC0+ZHludGlja3MpICYgMHgxKSk7Ci0JcmN1X2NsZWFudXBfYWZ0ZXJfaWRsZShzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJjdV9jbGVhbnVwX2FmdGVyX2lkbGUoKTsKIAl0cmFjZV9yY3VfZHludGljayhUUFMoIkVuZCIpLCBvbGR2YWwsIHJkdHAtPmR5bnRpY2tzX25lc3RpbmcpOwogCWlmICghdXNlciAmJiAhaXNfaWRsZV90YXNrKGN1cnJlbnQpKSB7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSBfX21heWJlX3VudXNlZCA9CkBAIC02OTEsNyArNjc5LDcgQEAKIAkJcmR0cC0+ZHludGlja3NfbmVzdGluZyArPSBEWU5USUNLX1RBU0tfTkVTVF9WQUxVRTsKIAl9IGVsc2UgewogCQlyZHRwLT5keW50aWNrc19uZXN0aW5nID0gRFlOVElDS19UQVNLX0VYSVRfSURMRTsKLQkJcmN1X2Vxc19leGl0X2NvbW1vbihyZHRwLCBvbGR2YWwsIHVzZXIpOworCQlyY3VfZXFzX2V4aXRfY29tbW9uKG9sZHZhbCwgdXNlcik7CiAJfQogfQogCkBAIC03MTIsNyArNzAwLDcgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlyY3VfZXFzX2V4aXQoZmFsc2UpOwotCXJjdV9zeXNpZGxlX2V4aXQodGhpc19jcHVfcHRyKCZyY3VfZHludGlja3MpLCAwKTsKKwlyY3Vfc3lzaWRsZV9leGl0KDApOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9pZGxlX2V4aXQpOwpAQCAtNzYzLDggKzc1MSw4IEBACiAJaWYgKG9sZHZhbCkKIAkJdHJhY2VfcmN1X2R5bnRpY2soVFBTKCIrKz0iKSwgb2xkdmFsLCByZHRwLT5keW50aWNrc19uZXN0aW5nKTsKIAllbHNlCi0JCXJjdV9lcXNfZXhpdF9jb21tb24ocmR0cCwgb2xkdmFsLCB0cnVlKTsKLQlyY3Vfc3lzaWRsZV9leGl0KHJkdHAsIDEpOworCQlyY3VfZXFzX2V4aXRfY29tbW9uKG9sZHZhbCwgdHJ1ZSk7CisJcmN1X3N5c2lkbGVfZXhpdCgxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTIzODcsNyArMjM3NSw3IEBACiAgKiBpbnZva2VkIGZyb20gdGhlIHNjaGVkdWxpbmctY2xvY2sgaW50ZXJydXB0LiAgSWYgcmN1X3BlbmRpbmcgcmV0dXJucwogICogZmFsc2UsIHRoZXJlIGlzIG5vIHBvaW50IGluIGludm9raW5nIHJjdV9jaGVja19jYWxsYmFja3MoKS4KICAqLwotdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKQordm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCB1c2VyKQogewogCXRyYWNlX3JjdV91dGlsaXphdGlvbihUUFMoIlN0YXJ0IHNjaGVkdWxlci10aWNrIikpOwogCWluY3JlbWVudF9jcHVfc3RhbGxfdGlja3MoKTsKQEAgLTI0MTksOCArMjQwNyw4IEBACiAKIAkJcmN1X2JoX3FzKCk7CiAJfQotCXJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhjcHUpOwotCWlmIChyY3VfcGVuZGluZyhjcHUpKQorCXJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcygpOworCWlmIChyY3VfcGVuZGluZygpKQogCQlpbnZva2VfcmN1X2NvcmUoKTsKIAlpZiAodXNlcikKIAkJcmN1X25vdGVfdm9sdW50YXJ5X2NvbnRleHRfc3dpdGNoKGN1cnJlbnQpOwpAQCAtMjk2Myw2ICsyOTUxLDkgQEAKICAqLwogdm9pZCBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQodm9pZCkKIHsKKwljcHVtYXNrX3Zhcl90IGNtOworCWJvb2wgY21hID0gZmFsc2U7CisJaW50IGNwdTsKIAlsb25nIGZpcnN0c25hcCwgcywgc25hcDsKIAlpbnQgdHJ5Y291bnQgPSAwOwogCXN0cnVjdCByY3Vfc3RhdGUgKnJzcCA9ICZyY3Vfc2NoZWRfc3RhdGU7CkBAIC0yOTk3LDExICsyOTg4LDI2IEBACiAJfQogCVdBUk5fT05fT05DRShjcHVfaXNfb2ZmbGluZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSk7CiAKKwkvKiBPZmZsaW5lIENQVXMsIGlkbGUgQ1BVcywgYW5kIGFueSBDUFUgd2UgcnVuIG9uIGFyZSBxdWllc2NlbnQuICovCisJY21hID0gemFsbG9jX2NwdW1hc2tfdmFyKCZjbSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtYSkgeworCQljcHVtYXNrX2NvcHkoY20sIGNwdV9vbmxpbmVfbWFzayk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIGNtKTsKKwkJZm9yX2VhY2hfY3B1KGNwdSwgY20pIHsKKwkJCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSAmcGVyX2NwdShyY3VfZHludGlja3MsIGNwdSk7CisKKwkJCWlmICghKGF0b21pY19hZGRfcmV0dXJuKDAsICZyZHRwLT5keW50aWNrcykgJiAweDEpKQorCQkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgY20pOworCQl9CisJCWlmIChjcHVtYXNrX3dlaWdodChjbSkgPT0gMCkKKwkJCWdvdG8gYWxsX2NwdXNfaWRsZTsKKwl9CisKIAkvKgogCSAqIEVhY2ggcGFzcyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgbG9vcCBhdHRlbXB0cyB0byBmb3JjZSBhCiAJICogY29udGV4dCBzd2l0Y2ggb24gZWFjaCBDUFUuCiAJICovCi0Jd2hpbGUgKHRyeV9zdG9wX2NwdXMoY3B1X29ubGluZV9tYXNrLAorCXdoaWxlICh0cnlfc3RvcF9jcHVzKGNtYSA/IGNtIDogY3B1X29ubGluZV9tYXNrLAogCQkJICAgICBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWRfY3B1X3N0b3AsCiAJCQkgICAgIE5VTEwpID09IC1FQUdBSU4pIHsKIAkJcHV0X29ubGluZV9jcHVzKCk7CkBAIC0zMDEzLDYgKzMwMTksNyBAQAogCQkJLyogZW5zdXJlIHRlc3QgaGFwcGVucyBiZWZvcmUgY2FsbGVyIGtmcmVlICovCiAJCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsgLyogXl5eICovCiAJCQlhdG9taWNfbG9uZ19pbmMoJnJzcC0+ZXhwZWRpdGVkX3dvcmtkb25lMSk7CisJCQlmcmVlX2NwdW1hc2tfdmFyKGNtKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0zMDIyLDYgKzMwMjksNyBAQAogCQl9IGVsc2UgewogCQkJd2FpdF9yY3VfZ3AoY2FsbF9yY3Vfc2NoZWQpOwogCQkJYXRvbWljX2xvbmdfaW5jKCZyc3AtPmV4cGVkaXRlZF9ub3JtYWwpOworCQkJZnJlZV9jcHVtYXNrX3ZhcihjbSk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMzAzMSw2ICszMDM5LDcgQEAKIAkJCS8qIGVuc3VyZSB0ZXN0IGhhcHBlbnMgYmVmb3JlIGNhbGxlciBrZnJlZSAqLwogCQkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7IC8qIF5eXiAqLwogCQkJYXRvbWljX2xvbmdfaW5jKCZyc3AtPmV4cGVkaXRlZF93b3JrZG9uZTIpOworCQkJZnJlZV9jcHVtYXNrX3ZhcihjbSk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMzA0NSw2ICszMDU0LDcgQEAKIAkJCS8qIENQVSBob3RwbHVnIG9wZXJhdGlvbiBpbiBmbGlnaHQsIHVzZSBub3JtYWwgR1AuICovCiAJCQl3YWl0X3JjdV9ncChjYWxsX3JjdV9zY2hlZCk7CiAJCQlhdG9taWNfbG9uZ19pbmMoJnJzcC0+ZXhwZWRpdGVkX25vcm1hbCk7CisJCQlmcmVlX2NwdW1hc2tfdmFyKGNtKTsKIAkJCXJldHVybjsKIAkJfQogCQlzbmFwID0gYXRvbWljX2xvbmdfcmVhZCgmcnNwLT5leHBlZGl0ZWRfc3RhcnQpOwpAQCAtMzA1Miw2ICszMDYyLDkgQEAKIAl9CiAJYXRvbWljX2xvbmdfaW5jKCZyc3AtPmV4cGVkaXRlZF9zdG9wcGVkY3B1cyk7CiAKK2FsbF9jcHVzX2lkbGU6CisJZnJlZV9jcHVtYXNrX3ZhcihjbSk7CisKIAkvKgogCSAqIEV2ZXJ5b25lIHVwIHRvIG91ciBtb3N0IHJlY2VudCBmZXRjaCBpcyBjb3ZlcmVkIGJ5IG91ciBncmFjZQogCSAqIHBlcmlvZC4gIFVwZGF0ZSB0aGUgY291bnRlciwgYnV0IG9ubHkgaWYgb3VyIHdvcmsgaXMgc3RpbGwKQEAgLTMxNDMsMTIgKzMxNTYsMTIgQEAKICAqIGJ5IHRoZSBjdXJyZW50IENQVSwgcmV0dXJuaW5nIDEgaWYgc28uICBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlCiAgKiBSQ1UgaW1wbGVtZW50YXRpb247IGl0IGlzIC1ub3QtIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KICAqLwotc3RhdGljIGludCByY3VfcGVuZGluZyhpbnQgY3B1KQorc3RhdGljIGludCByY3VfcGVuZGluZyh2b2lkKQogewogCXN0cnVjdCByY3Vfc3RhdGUgKnJzcDsKIAogCWZvcl9lYWNoX3JjdV9mbGF2b3IocnNwKQotCQlpZiAoX19yY3VfcGVuZGluZyhyc3AsIHBlcl9jcHVfcHRyKHJzcC0+cmRhLCBjcHUpKSkKKwkJaWYgKF9fcmN1X3BlbmRpbmcocnNwLCB0aGlzX2NwdV9wdHIocnNwLT5yZGEpKSkKIAkJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtMzE1OCw3ICszMTcxLDcgQEAKICAqIG5vbi1OVUxMLCBzdG9yZSBhbiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgYWxsIGNhbGxiYWNrcyBhcmUgbGF6eS4KICAqIChJZiB0aGVyZSBhcmUgbm8gY2FsbGJhY2tzLCBhbGwgb2YgdGhlbSBhcmUgZGVlbWVkIHRvIGJlIGxhenkuKQogICovCi1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHJjdV9jcHVfaGFzX2NhbGxiYWNrcyhpbnQgY3B1LCBib29sICphbGxfbGF6eSkKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgcmN1X2NwdV9oYXNfY2FsbGJhY2tzKGJvb2wgKmFsbF9sYXp5KQogewogCWJvb2wgYWwgPSB0cnVlOwogCWJvb2wgaGMgPSBmYWxzZTsKQEAgLTMxNjYsNyArMzE3OSw3IEBACiAJc3RydWN0IHJjdV9zdGF0ZSAqcnNwOwogCiAJZm9yX2VhY2hfcmN1X2ZsYXZvcihyc3ApIHsKLQkJcmRwID0gcGVyX2NwdV9wdHIocnNwLT5yZGEsIGNwdSk7CisJCXJkcCA9IHRoaXNfY3B1X3B0cihyc3AtPnJkYSk7CiAJCWlmICghcmRwLT5ueHRsaXN0KQogCQkJY29udGludWU7CiAJCWhjID0gdHJ1ZTsKQEAgLTM0ODUsOCArMzQ5OCwxMCBAQAogCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKLQkJZm9yX2VhY2hfcmN1X2ZsYXZvcihyc3ApCisJCWZvcl9lYWNoX3JjdV9mbGF2b3IocnNwKSB7CiAJCQlyY3VfY2xlYW51cF9kZWFkX2NwdShjcHUsIHJzcCk7CisJCQlkb19ub2NiX2RlZmVycmVkX3dha2V1cChwZXJfY3B1X3B0cihyc3AtPnJkYSwgY3B1KSk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0zNzY2LDYgKzM3ODEsOCBAQAogCXBtX25vdGlmaWVyKHJjdV9wbV9ub3RpZnksIDApOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQlyY3VfY3B1X25vdGlmeShOVUxMLCBDUFVfVVBfUFJFUEFSRSwgKHZvaWQgKikobG9uZyljcHUpOworCisJcmN1X2Vhcmx5X2Jvb3RfdGVzdHMoKTsKIH0KIAogI2luY2x1ZGUgInRyZWVfcGx1Z2luLmgiCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuaCBiL2tlcm5lbC9yY3UvdHJlZS5oCmluZGV4IGJiZGM0NWQuLjhlN2IxODQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdHJlZS5oCisrKyBiL2tlcm5lbC9yY3UvdHJlZS5oCkBAIC0xMzksNyArMTM5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGV4cG1hc2s7CS8qIEdyb3VwcyB0aGF0IGhhdmUgLT5ibGtkX3Rhc2tzICovCiAJCQkJLyogIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBkcmFpbiB0byBhbGxvdyB0aGUgKi8KIAkJCQkvKiAgY3VycmVudCBleHBlZGl0ZWQgZ3JhY2UgcGVyaW9kIHRvICovCi0JCQkJLyogIGNvbXBsZXRlIChvbmx5IGZvciBUUkVFX1BSRUVNUFRfUkNVKS4gKi8KKwkJCQkvKiAgY29tcGxldGUgKG9ubHkgZm9yIFBSRUVNUFRfUkNVKS4gKi8KIAl1bnNpZ25lZCBsb25nIHFzbWFza2luaXQ7CiAJCQkJLyogUGVyLUdQIGluaXRpYWwgdmFsdWUgZm9yIHFzbWFzayAmIGV4cG1hc2suICovCiAJdW5zaWduZWQgbG9uZyBncnBtYXNrOwkvKiBNYXNrIHRvIGFwcGx5IHRvIHBhcmVudCBxc21hc2suICovCkBAIC01MzAsMTAgKzUzMCwxMCBAQAogZXh0ZXJuIHN0cnVjdCByY3Vfc3RhdGUgcmN1X2JoX3N0YXRlOwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X2JoX2RhdGEpOwogCi0jaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKKyNpZmRlZiBDT05GSUdfUFJFRU1QVF9SQ1UKIGV4dGVybiBzdHJ1Y3QgcmN1X3N0YXRlIHJjdV9wcmVlbXB0X3N0YXRlOwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X3ByZWVtcHRfZGF0YSk7Ci0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVSAqLwogCiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVAogREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgcmN1X2NwdV9rdGhyZWFkX3N0YXR1cyk7CkBAIC01NDcsNyArNTQ3LDcgQEAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciByY3V0cmVlX3BsdWdpbi5oICovCiBzdGF0aWMgdm9pZCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpOwogbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7Ci1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfbm90ZV9jb250ZXh0X3N3aXRjaCh2b2lkKTsKIHN0YXRpYyBpbnQgcmN1X3ByZWVtcHRfYmxvY2tlZF9yZWFkZXJzX2NncChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBzdGF0aWMgdm9pZCByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wLApAQCAtNTYxLDEyICs1NjEsMTIgQEAKIAkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAogCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyh2b2lkKTsKIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKTsKLSNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgZGVmaW5lZChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkKKyNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpCiBzdGF0aWMgdm9pZCByY3VfcmVwb3J0X2V4cF9ybnAoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKIAkJCSAgICAgICBib29sIHdha2UpOwotI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgZGVmaW5lZChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkgKi8KKyNlbmRpZiAvKiAjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpIHx8IGRlZmluZWQoQ09ORklHX1BSRUVNUFRfUkNVKSAqLwogc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKTsKIHN0YXRpYyB2b2lkIHJjdV9pbml0aWF0ZV9ib29zdChzdHJ1Y3QgcmN1X25vZGUgKnJucCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ib29zdF9zdGFydF9ncChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CkBAIC01NzksOCArNTc5LDggQEAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLwogc3RhdGljIHZvaWQgX19pbml0IHJjdV9zcGF3bl9ib29zdF9rdGhyZWFkcyh2b2lkKTsKIHN0YXRpYyB2b2lkIHJjdV9wcmVwYXJlX2t0aHJlYWRzKGludCBjcHUpOwotc3RhdGljIHZvaWQgcmN1X2NsZWFudXBfYWZ0ZXJfaWRsZShpbnQgY3B1KTsKLXN0YXRpYyB2b2lkIHJjdV9wcmVwYXJlX2Zvcl9pZGxlKGludCBjcHUpOworc3RhdGljIHZvaWQgcmN1X2NsZWFudXBfYWZ0ZXJfaWRsZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVwYXJlX2Zvcl9pZGxlKHZvaWQpOwogc3RhdGljIHZvaWQgcmN1X2lkbGVfY291bnRfY2FsbGJhY2tzX3Bvc3RlZCh2b2lkKTsKIHN0YXRpYyB2b2lkIHByaW50X2NwdV9zdGFsbF9pbmZvX2JlZ2luKHZvaWQpOwogc3RhdGljIHZvaWQgcHJpbnRfY3B1X3N0YWxsX2luZm8oc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgY3B1KTsKQEAgLTYwNiw4ICs2MDYsOCBAQAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVICovCiBzdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCByY3Vfa2lja19ub2h6X2NwdShpbnQgY3B1KTsKIHN0YXRpYyBib29sIGluaXRfbm9jYl9jYWxsYmFja19saXN0KHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKLXN0YXRpYyB2b2lkIHJjdV9zeXNpZGxlX2VudGVyKHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGludCBpcnEpOwotc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZXhpdChzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwLCBpbnQgaXJxKTsKK3N0YXRpYyB2b2lkIHJjdV9zeXNpZGxlX2VudGVyKGludCBpcnEpOworc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZXhpdChpbnQgaXJxKTsKIHN0YXRpYyB2b2lkIHJjdV9zeXNpZGxlX2NoZWNrX2NwdShzdHJ1Y3QgcmN1X2RhdGEgKnJkcCwgYm9vbCAqaXNpZGxlLAogCQkJCSAgdW5zaWduZWQgbG9uZyAqbWF4aik7CiBzdGF0aWMgYm9vbCBpc19zeXNpZGxlX3JjdV9zdGF0ZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlX3BsdWdpbi5oIGIva2VybmVsL3JjdS90cmVlX3BsdWdpbi5oCmluZGV4IGMxZDdmMjcuLjNlYzg1Y2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdHJlZV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1L3RyZWVfcGx1Z2luLmgKQEAgLTMwLDE0ICszMCwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcGJvb3QuaD4KICNpbmNsdWRlICIuLi90aW1lL3RpY2staW50ZXJuYWwuaCIKIAotI2RlZmluZSBSQ1VfS1RIUkVBRF9QUklPIDEKLQogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKKwogI2luY2x1ZGUgIi4uL2xvY2tpbmcvcnRtdXRleF9jb21tb24uaCIKLSNkZWZpbmUgUkNVX0JPT1NUX1BSSU8gQ09ORklHX1JDVV9CT09TVF9QUklPCi0jZWxzZQotI2RlZmluZSBSQ1VfQk9PU1RfUFJJTyBSQ1VfS1RIUkVBRF9QUklPCi0jZW5kaWYKKworLyogcmN1Yy9yY3ViIGt0aHJlYWQgcmVhbHRpbWUgcHJpb3JpdHkgKi8KK3N0YXRpYyBpbnQga3RocmVhZF9wcmlvID0gQ09ORklHX1JDVV9LVEhSRUFEX1BSSU87Cittb2R1bGVfcGFyYW0oa3RocmVhZF9wcmlvLCBpbnQsIDA2NDQpOworCisvKgorICogQ29udHJvbCB2YXJpYWJsZXMgZm9yIHBlci1DUFUgYW5kIHBlci1yY3Vfbm9kZSBrdGhyZWFkcy4gIFRoZXNlCisgKiBoYW5kbGUgYWxsIGZsYXZvcnMgb2YgUkNVLgorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIHJjdV9jcHVfa3RocmVhZF90YXNrKTsKK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgcmN1X2NwdV9rdGhyZWFkX3N0YXR1cyk7CitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHJjdV9jcHVfa3RocmVhZF9sb29wcyk7CitERUZJTkVfUEVSX0NQVShjaGFyLCByY3VfY3B1X2hhc193b3JrKTsKKworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCiAKICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVCiBzdGF0aWMgY3B1bWFza192YXJfdCByY3Vfbm9jYl9tYXNrOyAvKiBDUFVzIHRvIGhhdmUgY2FsbGJhY2tzIG9mZmxvYWRlZC4gKi8KQEAgLTcyLDkgKzgyLDYgQEAKICNpZmRlZiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVF9SVU5OQUJMRQogCXByX2luZm8oIlx0UkNVIHRvcnR1cmUgdGVzdGluZyBzdGFydHMgZHVyaW5nIGJvb3QuXG4iKTsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpICYmICFkZWZpbmVkKENPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UpCi0JcHJfaW5mbygiXHREdW1wIHN0YWNrcyBvZiB0YXNrcyBibG9ja2luZyBSQ1UtcHJlZW1wdCBHUC5cbiIpOwotI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPKQogCXByX2luZm8oIlx0QWRkaXRpb25hbCBwZXItQ1BVIGluZm8gcHJpbnRlZCB3aXRoIHN0YWxscy5cbiIpOwogI2VuZGlmCkBAIC04NSw5ICs5MiwxMiBAQAogCQlwcl9pbmZvKCJcdEJvb3QtdGltZSBhZGp1c3RtZW50IG9mIGxlYWYgZmFub3V0IHRvICVkLlxuIiwgcmN1X2Zhbm91dF9sZWFmKTsKIAlpZiAobnJfY3B1X2lkcyAhPSBOUl9DUFVTKQogCQlwcl9pbmZvKCJcdFJDVSByZXN0cmljdGluZyBDUFVzIGZyb20gTlJfQ1BVUz0lZCB0byBucl9jcHVfaWRzPSVkLlxuIiwgTlJfQ1BVUywgbnJfY3B1X2lkcyk7CisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCXByX2luZm8oIlx0UkNVIGt0aHJlYWQgcHJpb3JpdHk6ICVkLlxuIiwga3RocmVhZF9wcmlvKTsKKyNlbmRpZgogfQogCi0jaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKKyNpZmRlZiBDT05GSUdfUFJFRU1QVF9SQ1UKIAogUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9wcmVlbXB0LCAncCcsIGNhbGxfcmN1KTsKIHN0YXRpYyBzdHJ1Y3QgcmN1X3N0YXRlICpyY3Vfc3RhdGVfcCA9ICZyY3VfcHJlZW1wdF9zdGF0ZTsKQEAgLTE1Niw3ICsxNjYsNyBAQAogICoKICAqIENhbGxlciBtdXN0IGRpc2FibGUgcHJlZW1wdGlvbi4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfbm90ZV9jb250ZXh0X3N3aXRjaChpbnQgY3B1KQorc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfbm90ZV9jb250ZXh0X3N3aXRjaCh2b2lkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IGN1cnJlbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE2Nyw3ICsxNzcsNyBAQAogCSAgICAhdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwuYi5ibG9ja2VkKSB7CiAKIAkJLyogUG9zc2libHkgYmxvY2tpbmcgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAqLwotCQlyZHAgPSBwZXJfY3B1X3B0cihyY3VfcHJlZW1wdF9zdGF0ZS5yZGEsIGNwdSk7CisJCXJkcCA9IHRoaXNfY3B1X3B0cihyY3VfcHJlZW1wdF9zdGF0ZS5yZGEpOwogCQlybnAgPSByZHAtPm15bm9kZTsKIAkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJc21wX21iX19hZnRlcl91bmxvY2tfbG9jaygpOwpAQCAtNDE1LDggKzQyNSw2IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRQotCiAvKgogICogRHVtcCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3IgYWxsIHRhc2tzIGJsb2NraW5nIHRoZSBjdXJyZW50IFJDVQogICogZ3JhY2UgcGVyaW9kIG9uIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLgpAQCAtNDUxLDE0ICs0NTksNiBAQAogCQlyY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGxfcm5wKHJucCk7CiB9CiAKLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFICovCi0KLXN0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCi17Ci19Ci0KLSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRSAqLwotCiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTwogCiBzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbF9iZWdpbihzdHJ1Y3QgcmN1X25vZGUgKnJucCkKQEAgLTYyMSw3ICs2MjEsNyBAQAogICoKICAqIENhbGxlciBtdXN0IGRpc2FibGUgaGFyZCBpcnFzLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19jYWxsYmFja3MoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyh2b2lkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IGN1cnJlbnQ7CiAKQEAgLTYzMCw4ICs2MzAsOCBAQAogCQlyZXR1cm47CiAJfQogCWlmICh0LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcgPiAwICYmCi0JICAgIHBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KS5xc19wZW5kaW5nICYmCi0JICAgICFwZXJfY3B1KHJjdV9wcmVlbXB0X2RhdGEsIGNwdSkucGFzc2VkX3F1aWVzY2UpCisJICAgIF9fdGhpc19jcHVfcmVhZChyY3VfcHJlZW1wdF9kYXRhLnFzX3BlbmRpbmcpICYmCisJICAgICFfX3RoaXNfY3B1X3JlYWQocmN1X3ByZWVtcHRfZGF0YS5wYXNzZWRfcXVpZXNjZSkpCiAJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsLmIubmVlZF9xcyA9IHRydWU7CiB9CiAKQEAgLTkxOSw3ICs5MTksNyBAQAogCV9fcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVSAqLwogCiBzdGF0aWMgc3RydWN0IHJjdV9zdGF0ZSAqcmN1X3N0YXRlX3AgPSAmcmN1X3NjaGVkX3N0YXRlOwogCkBAIC05NDUsNyArOTQ1LDcgQEAKICAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB3ZSBuZXZlciBoYXZlIHRvIGNoZWNrIGZvcgogICogQ1BVcyBiZWluZyBpbiBxdWllc2NlbnQgc3RhdGVzLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKHZvaWQpCiB7CiB9CiAKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAgKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSBjYWxsYmFja3MKICAqIHRvIGNoZWNrLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19jYWxsYmFja3MoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyh2b2lkKQogewogfQogCkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogewogfQogCi0jZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVSAqLwogCiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVAogCkBAIC0xMzI2LDcgKzEzMjYsNyBAQAogCXNtcF9tYl9fYWZ0ZXJfdW5sb2NrX2xvY2soKTsKIAlybnAtPmJvb3N0X2t0aHJlYWRfdGFzayA9IHQ7CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCXNwLnNjaGVkX3ByaW9yaXR5ID0gUkNVX0JPT1NUX1BSSU87CisJc3Auc2NoZWRfcHJpb3JpdHkgPSBrdGhyZWFkX3ByaW87CiAJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2sodCwgU0NIRURfRklGTywgJnNwKTsKIAl3YWtlX3VwX3Byb2Nlc3ModCk7IC8qIGdldCB0byBUQVNLX0lOVEVSUlVQVElCTEUgcXVpY2tseS4gKi8KIAlyZXR1cm4gMDsKQEAgLTEzNDMsNyArMTM0Myw3IEBACiB7CiAJc3RydWN0IHNjaGVkX3BhcmFtIHNwOwogCi0Jc3Auc2NoZWRfcHJpb3JpdHkgPSBSQ1VfS1RIUkVBRF9QUklPOworCXNwLnNjaGVkX3ByaW9yaXR5ID0ga3RocmVhZF9wcmlvOwogCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKGN1cnJlbnQsIFNDSEVEX0ZJRk8sICZzcCk7CiB9CiAKQEAgLTE1MTIsMTAgKzE1MTIsMTAgQEAKICAqIGFueSBmbGF2b3Igb2YgUkNVLgogICovCiAjaWZuZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMCi1pbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1LCB1bnNpZ25lZCBsb25nICpkZWx0YV9qaWZmaWVzKQoraW50IHJjdV9uZWVkc19jcHUodW5zaWduZWQgbG9uZyAqZGVsdGFfamlmZmllcykKIHsKIAkqZGVsdGFfamlmZmllcyA9IFVMT05HX01BWDsKLQlyZXR1cm4gcmN1X2NwdV9oYXNfY2FsbGJhY2tzKGNwdSwgTlVMTCk7CisJcmV0dXJuIHJjdV9jcHVfaGFzX2NhbGxiYWNrcyhOVUxMKTsKIH0KICNlbmRpZiAvKiAjaWZuZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMICovCiAKQEAgLTE1MjMsNyArMTUyMyw3IEBACiAgKiBCZWNhdXNlIHdlIGRvIG5vdCBoYXZlIFJDVV9GQVNUX05PX0haLCBkb24ndCBib3RoZXIgY2xlYW5pbmcgdXAKICAqIGFmdGVyIGl0LgogICovCi1zdGF0aWMgdm9pZCByY3VfY2xlYW51cF9hZnRlcl9pZGxlKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfY2xlYW51cF9hZnRlcl9pZGxlKHZvaWQpCiB7CiB9CiAKQEAgLTE1MzEsNyArMTUzMSw3IEBACiAgKiBEbyB0aGUgaWRsZS1lbnRyeSBncmFjZS1wZXJpb2Qgd29yaywgd2hpY2gsIGJlY2F1c2UgQ09ORklHX1JDVV9GQVNUX05PX0haPW4sCiAgKiBpcyBub3RoaW5nLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlcGFyZV9mb3JfaWRsZShpbnQgY3B1KQorc3RhdGljIHZvaWQgcmN1X3ByZXBhcmVfZm9yX2lkbGUodm9pZCkKIHsKIH0KIApAQCAtMTYyNCwxNSArMTYyNCwxNSBAQAogICogVGhlIGNhbGxlciBtdXN0IGhhdmUgZGlzYWJsZWQgaW50ZXJydXB0cy4KICAqLwogI2lmbmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVX0FMTAotaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSwgdW5zaWduZWQgbG9uZyAqZGopCitpbnQgcmN1X25lZWRzX2NwdSh1bnNpZ25lZCBsb25nICpkaikKIHsKLQlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gJnBlcl9jcHUocmN1X2R5bnRpY2tzLCBjcHUpOworCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSB0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyk7CiAKIAkvKiBTbmFwc2hvdCB0byBkZXRlY3QgbGF0ZXIgcG9zdGluZyBvZiBub24tbGF6eSBjYWxsYmFjay4gKi8KIAlyZHRwLT5ub25sYXp5X3Bvc3RlZF9zbmFwID0gcmR0cC0+bm9ubGF6eV9wb3N0ZWQ7CiAKIAkvKiBJZiBubyBjYWxsYmFja3MsIFJDVSBkb2Vzbid0IG5lZWQgdGhlIENQVS4gKi8KLQlpZiAoIXJjdV9jcHVfaGFzX2NhbGxiYWNrcyhjcHUsICZyZHRwLT5hbGxfbGF6eSkpIHsKKwlpZiAoIXJjdV9jcHVfaGFzX2NhbGxiYWNrcygmcmR0cC0+YWxsX2xhenkpKSB7CiAJCSpkaiA9IFVMT05HX01BWDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTY2NiwxMiArMTY2NiwxMiBAQAogICoKICAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGRpc2FibGVkIGludGVycnVwdHMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVwYXJlX2Zvcl9pZGxlKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlcGFyZV9mb3JfaWRsZSh2b2lkKQogewogI2lmbmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVX0FMTAogCWJvb2wgbmVlZHdha2U7CiAJc3RydWN0IHJjdV9kYXRhICpyZHA7Ci0Jc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9ICZwZXJfY3B1KHJjdV9keW50aWNrcywgY3B1KTsKKwlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gdGhpc19jcHVfcHRyKCZyY3VfZHludGlja3MpOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCXN0cnVjdCByY3Vfc3RhdGUgKnJzcDsKIAlpbnQgdG5lOwpAQCAtMTY3OSw3ICsxNjc5LDcgQEAKIAkvKiBIYW5kbGUgbm9oeiBlbmFibGVtZW50IHN3aXRjaGVzIGNvbnNlcnZhdGl2ZWx5LiAqLwogCXRuZSA9IEFDQ0VTU19PTkNFKHRpY2tfbm9oel9hY3RpdmUpOwogCWlmICh0bmUgIT0gcmR0cC0+dGlja19ub2h6X2VuYWJsZWRfc25hcCkgewotCQlpZiAocmN1X2NwdV9oYXNfY2FsbGJhY2tzKGNwdSwgTlVMTCkpCisJCWlmIChyY3VfY3B1X2hhc19jYWxsYmFja3MoTlVMTCkpCiAJCQlpbnZva2VfcmN1X2NvcmUoKTsgLyogZm9yY2Ugbm9oeiB0byBzZWUgdXBkYXRlLiAqLwogCQlyZHRwLT50aWNrX25vaHpfZW5hYmxlZF9zbmFwID0gdG5lOwogCQlyZXR1cm47CkBAIC0xNjg4LDcgKzE2ODgsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBJZiB0aGlzIGlzIGEgbm8tQ0JzIENQVSwgbm8gY2FsbGJhY2tzLCBqdXN0IHJldHVybi4gKi8KLQlpZiAocmN1X2lzX25vY2JfY3B1KGNwdSkpCisJaWYgKHJjdV9pc19ub2NiX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMTcxMiw3ICsxNzEyLDcgQEAKIAkJcmV0dXJuOwogCXJkdHAtPmxhc3RfYWNjZWxlcmF0ZSA9IGppZmZpZXM7CiAJZm9yX2VhY2hfcmN1X2ZsYXZvcihyc3ApIHsKLQkJcmRwID0gcGVyX2NwdV9wdHIocnNwLT5yZGEsIGNwdSk7CisJCXJkcCA9IHRoaXNfY3B1X3B0cihyc3AtPnJkYSk7CiAJCWlmICghKnJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSkKIAkJCWNvbnRpbnVlOwogCQlybnAgPSByZHAtPm15bm9kZTsKQEAgLTE3MzEsMTAgKzE3MzEsMTAgQEAKICAqIGFueSBncmFjZSBwZXJpb2RzIHRoYXQgZWxhcHNlZCB3aGlsZSB0aGUgQ1BVIHdhcyBpZGxlLCBhbmQgaWYgYW55CiAgKiBjYWxsYmFja3MgYXJlIG5vdyByZWFkeSB0byBpbnZva2UsIGluaXRpYXRlIGludm9jYXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9jbGVhbnVwX2FmdGVyX2lkbGUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9jbGVhbnVwX2FmdGVyX2lkbGUodm9pZCkKIHsKICNpZm5kZWYgQ09ORklHX1JDVV9OT0NCX0NQVV9BTEwKLQlpZiAocmN1X2lzX25vY2JfY3B1KGNwdSkpCisJaWYgKHJjdV9pc19ub2NiX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpKQogCQlyZXR1cm47CiAJaWYgKHJjdV90cnlfYWR2YW5jZV9hbGxfY2JzKCkpCiAJCWludm9rZV9yY3VfY29yZSgpOwpAQCAtMjU3Myw5ICsyNTczLDEzIEBACiAJCQlyZHAtPm5vY2JfbGVhZGVyID0gcmRwX3NwYXduOwogCQkJaWYgKHJkcF9sYXN0ICYmIHJkcCAhPSByZHBfc3Bhd24pCiAJCQkJcmRwX2xhc3QtPm5vY2JfbmV4dF9mb2xsb3dlciA9IHJkcDsKLQkJCXJkcF9sYXN0ID0gcmRwOwotCQkJcmRwID0gcmRwLT5ub2NiX25leHRfZm9sbG93ZXI7Ci0JCQlyZHBfbGFzdC0+bm9jYl9uZXh0X2ZvbGxvd2VyID0gTlVMTDsKKwkJCWlmIChyZHAgPT0gcmRwX3NwYXduKSB7CisJCQkJcmRwID0gcmRwLT5ub2NiX25leHRfZm9sbG93ZXI7CisJCQl9IGVsc2UgeworCQkJCXJkcF9sYXN0ID0gcmRwOworCQkJCXJkcCA9IHJkcC0+bm9jYl9uZXh0X2ZvbGxvd2VyOworCQkJCXJkcF9sYXN0LT5ub2NiX25leHRfZm9sbG93ZXIgPSBOVUxMOworCQkJfQogCQl9IHdoaWxlIChyZHApOwogCQlyZHBfc3Bhd24tPm5vY2JfbmV4dF9mb2xsb3dlciA9IHJkcF9vbGRfbGVhZGVyOwogCX0KQEAgLTI3NjEsOSArMjc2NSwxMCBAQAogICogdG8gZGV0ZWN0IGZ1bGwtc3lzdGVtIGlkbGUgc3RhdGVzLCBub3QgUkNVIHF1aWVzY2VudCBzdGF0ZXMgYW5kIGdyYWNlCiAgKiBwZXJpb2RzLiAgVGhlIGNhbGxlciBtdXN0IGhhdmUgZGlzYWJsZWQgaW50ZXJydXB0cy4KICAqLwotc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZW50ZXIoc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCwgaW50IGlycSkKK3N0YXRpYyB2b2lkIHJjdV9zeXNpZGxlX2VudGVyKGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBqOworCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSB0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyk7CiAKIAkvKiBJZiB0aGVyZSBhcmUgbm8gbm9oel9mdWxsPSBDUFVzLCBubyBuZWVkIHRvIHRyYWNrIHRoaXMuICovCiAJaWYgKCF0aWNrX25vaHpfZnVsbF9lbmFibGVkKCkpCkBAIC0yODMyLDggKzI4MzcsMTAgQEAKICAqIHVzZXJtb2RlIGV4ZWN1dGlvbiBkb2VzIC1ub3QtIGNvdW50IGFzIGlkbGUgaGVyZSEgIFRoZSBjYWxsZXIgbXVzdAogICogaGF2ZSBkaXNhYmxlZCBpbnRlcnJ1cHRzLgogICovCi1zdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9leGl0KHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGludCBpcnEpCitzdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9leGl0KGludCBpcnEpCiB7CisJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9IHRoaXNfY3B1X3B0cigmcmN1X2R5bnRpY2tzKTsKKwogCS8qIElmIHRoZXJlIGFyZSBubyBub2h6X2Z1bGw9IENQVXMsIG5vIG5lZWQgdG8gdHJhY2sgdGhpcy4gKi8KIAlpZiAoIXRpY2tfbm9oel9mdWxsX2VuYWJsZWQoKSkKIAkJcmV0dXJuOwpAQCAtMzEyNywxMSArMzEzNCwxMSBAQAogCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX05PX0haX0ZVTExfU1lTSURMRSAqLwogCi1zdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9lbnRlcihzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwLCBpbnQgaXJxKQorc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZW50ZXIoaW50IGlycSkKIHsKIH0KIAotc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZXhpdChzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwLCBpbnQgaXJxKQorc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZXhpdChpbnQgaXJxKQogewogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3VwZGF0ZS5jIGIva2VybmVsL3JjdS91cGRhdGUuYwppbmRleCAzZWY4YmE1Li5lMGQzMWEzNDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdS91cGRhdGUuYwpAQCAtMzA2LDcgKzMwNiw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyY3VoZWFkX2RlYnVnX2Rlc2NyKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19SQ1VfVFJBQ0UpCisjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1BSRUVNUFRfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19SQ1VfVFJBQ0UpCiB2b2lkIGRvX3RyYWNlX3JjdV90b3J0dXJlX3JlYWQoY29uc3QgY2hhciAqcmN1dG9ydHVyZW5hbWUsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2VjcywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNfb2xkLCB1bnNpZ25lZCBsb25nIGMpCkBAIC01MzEsNyArNTMxLDggQEAKIAlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQ7CiAJTElTVF9IRUFEKHJjdV90YXNrc19ob2xkb3V0cyk7CiAKLQkvKiBGSVhNRTogQWRkIGhvdXNla2VlcGluZyBhZmZpbml0eS4gKi8KKwkvKiBSdW4gb24gaG91c2VrZWVwaW5nIENQVXMgYnkgZGVmYXVsdC4gIFN5c2FkbSBjYW4gbW92ZSBpZiBkZXNpcmVkLiAqLworCWhvdXNla2VlcGluZ19hZmZpbmUoY3VycmVudCk7CiAKIAkvKgogCSAqIEVhY2ggcGFzcyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgbG9vcCBtYWtlcyBvbmUgY2hlY2sgZm9yCkBAIC02OTAsMyArNjkxLDg3IEBACiB9CiAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RBU0tTX1JDVSAqLworCisjaWZkZWYgQ09ORklHX1BST1ZFX1JDVQorCisvKgorICogRWFybHkgYm9vdCBzZWxmIHRlc3QgcGFyYW1ldGVycywgb25lIGZvciBlYWNoIGZsYXZvcgorICovCitzdGF0aWMgYm9vbCByY3Vfc2VsZl90ZXN0Oworc3RhdGljIGJvb2wgcmN1X3NlbGZfdGVzdF9iaDsKK3N0YXRpYyBib29sIHJjdV9zZWxmX3Rlc3Rfc2NoZWQ7CisKK21vZHVsZV9wYXJhbShyY3Vfc2VsZl90ZXN0LCBib29sLCAwNDQ0KTsKK21vZHVsZV9wYXJhbShyY3Vfc2VsZl90ZXN0X2JoLCBib29sLCAwNDQ0KTsKK21vZHVsZV9wYXJhbShyY3Vfc2VsZl90ZXN0X3NjaGVkLCBib29sLCAwNDQ0KTsKKworc3RhdGljIGludCByY3Vfc2VsZl90ZXN0X2NvdW50ZXI7CisKK3N0YXRpYyB2b2lkIHRlc3RfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpyKQoreworCXJjdV9zZWxmX3Rlc3RfY291bnRlcisrOworCXByX2luZm8oIlJDVSB0ZXN0IGNhbGxiYWNrIGV4ZWN1dGVkICVkXG4iLCByY3Vfc2VsZl90ZXN0X2NvdW50ZXIpOworfQorCitzdGF0aWMgdm9pZCBlYXJseV9ib290X3Rlc3RfY2FsbF9yY3Uodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IHJjdV9oZWFkIGhlYWQ7CisKKwljYWxsX3JjdSgmaGVhZCwgdGVzdF9jYWxsYmFjayk7Cit9CisKK3N0YXRpYyB2b2lkIGVhcmx5X2Jvb3RfdGVzdF9jYWxsX3JjdV9iaCh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgcmN1X2hlYWQgaGVhZDsKKworCWNhbGxfcmN1X2JoKCZoZWFkLCB0ZXN0X2NhbGxiYWNrKTsKK30KKworc3RhdGljIHZvaWQgZWFybHlfYm9vdF90ZXN0X2NhbGxfcmN1X3NjaGVkKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCByY3VfaGVhZCBoZWFkOworCisJY2FsbF9yY3Vfc2NoZWQoJmhlYWQsIHRlc3RfY2FsbGJhY2spOworfQorCit2b2lkIHJjdV9lYXJseV9ib290X3Rlc3RzKHZvaWQpCit7CisJcHJfaW5mbygiUnVubmluZyBSQ1Ugc2VsZiB0ZXN0c1xuIik7CisKKwlpZiAocmN1X3NlbGZfdGVzdCkKKwkJZWFybHlfYm9vdF90ZXN0X2NhbGxfcmN1KCk7CisJaWYgKHJjdV9zZWxmX3Rlc3RfYmgpCisJCWVhcmx5X2Jvb3RfdGVzdF9jYWxsX3JjdV9iaCgpOworCWlmIChyY3Vfc2VsZl90ZXN0X3NjaGVkKQorCQllYXJseV9ib290X3Rlc3RfY2FsbF9yY3Vfc2NoZWQoKTsKK30KKworc3RhdGljIGludCByY3VfdmVyaWZ5X2Vhcmx5X2Jvb3RfdGVzdHModm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZWFybHlfYm9vdF90ZXN0X2NvdW50ZXIgPSAwOworCisJaWYgKHJjdV9zZWxmX3Rlc3QpIHsKKwkJZWFybHlfYm9vdF90ZXN0X2NvdW50ZXIrKzsKKwkJcmN1X2JhcnJpZXIoKTsKKwl9CisJaWYgKHJjdV9zZWxmX3Rlc3RfYmgpIHsKKwkJZWFybHlfYm9vdF90ZXN0X2NvdW50ZXIrKzsKKwkJcmN1X2JhcnJpZXJfYmgoKTsKKwl9CisJaWYgKHJjdV9zZWxmX3Rlc3Rfc2NoZWQpIHsKKwkJZWFybHlfYm9vdF90ZXN0X2NvdW50ZXIrKzsKKwkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKKwl9CisKKwlpZiAocmN1X3NlbGZfdGVzdF9jb3VudGVyICE9IGVhcmx5X2Jvb3RfdGVzdF9jb3VudGVyKSB7CisJCVdBUk5fT04oMSk7CisJCXJldCA9IC0xOworCX0KKworCXJldHVybiByZXQ7Cit9CitsYXRlX2luaXRjYWxsKHJjdV92ZXJpZnlfZWFybHlfYm9vdF90ZXN0cyk7CisjZWxzZQordm9pZCByY3VfZWFybHlfYm9vdF90ZXN0cyh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19QUk9WRV9SQ1UgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb21wbGV0aW9uLmMgYi9rZXJuZWwvc2NoZWQvY29tcGxldGlvbi5jCmluZGV4IGE2M2Y0ZGMuLjYwN2Y4NTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb21wbGV0aW9uLmMKKysrIGIva2VybmVsL3NjaGVkL2NvbXBsZXRpb24uYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgKgogICogVGhpcyB3YWl0cyB0byBiZSBzaWduYWxlZCBmb3IgY29tcGxldGlvbiBvZiBhIHNwZWNpZmljIHRhc2suIEl0IGlzIE5PVAogICogaW50ZXJydXB0aWJsZSBhbmQgdGhlcmUgaXMgbm8gdGltZW91dC4gVGhlIGNhbGxlciBpcyBhY2NvdW50ZWQgYXMgd2FpdGluZwotICogZm9yIElPLgorICogZm9yIElPICh3aGljaCB0cmFkaXRpb25hbGx5IG1lYW5zIGJsa2lvIG9ubHkpLgogICovCiB2b2lkIF9fc2NoZWQgd2FpdF9mb3JfY29tcGxldGlvbl9pbyhzdHJ1Y3QgY29tcGxldGlvbiAqeCkKIHsKQEAgLTE2Myw3ICsxNjMsOCBAQAogICoKICAqIFRoaXMgd2FpdHMgZm9yIGVpdGhlciBhIGNvbXBsZXRpb24gb2YgYSBzcGVjaWZpYyB0YXNrIHRvIGJlIHNpZ25hbGVkIG9yIGZvciBhCiAgKiBzcGVjaWZpZWQgdGltZW91dCB0byBleHBpcmUuIFRoZSB0aW1lb3V0IGlzIGluIGppZmZpZXMuIEl0IGlzIG5vdAotICogaW50ZXJydXB0aWJsZS4gVGhlIGNhbGxlciBpcyBhY2NvdW50ZWQgYXMgd2FpdGluZyBmb3IgSU8uCisgKiBpbnRlcnJ1cHRpYmxlLiBUaGUgY2FsbGVyIGlzIGFjY291bnRlZCBhcyB3YWl0aW5nIGZvciBJTyAod2hpY2ggdHJhZGl0aW9uYWxseQorICogbWVhbnMgYmxraW8gb25seSkuCiAgKgogICogUmV0dXJuOiAwIGlmIHRpbWVkIG91dCwgYW5kIHBvc2l0aXZlIChhdCBsZWFzdCAxLCBvciBudW1iZXIgb2YgamlmZmllcyBsZWZ0CiAgKiB0aWxsIHRpbWVvdXQpIGlmIGNvbXBsZXRlZC4KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jCmluZGV4IDg5ZTcyODMuLmJiMzk4YzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmMKKysrIGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtMTAwOCw2ICsxMDA4LDkgQEAKIAlyZXR1cm4gY3B1X2N1cnIodGFza19jcHUocCkpID09IHA7CiB9CiAKKy8qCisgKiBDYW4gZHJvcCBycS0+bG9jayBiZWNhdXNlIGZyb20gc2NoZWRfY2xhc3M6OnN3aXRjaGVkX2Zyb20oKSBtZXRob2RzIGRyb3AgaXQuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19jbGFzc19jaGFuZ2VkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpwcmV2X2NsYXNzLAogCQkJCSAgICAgICBpbnQgb2xkcHJpbykKQEAgLTEwMTUsNiArMTAxOCw3IEBACiAJaWYgKHByZXZfY2xhc3MgIT0gcC0+c2NoZWRfY2xhc3MpIHsKIAkJaWYgKHByZXZfY2xhc3MtPnN3aXRjaGVkX2Zyb20pCiAJCQlwcmV2X2NsYXNzLT5zd2l0Y2hlZF9mcm9tKHJxLCBwKTsKKwkJLyogUG9zc2JsZSBycS0+bG9jayAnaG9sZScuICAqLwogCQlwLT5zY2hlZF9jbGFzcy0+c3dpdGNoZWRfdG8ocnEsIHApOwogCX0gZWxzZSBpZiAob2xkcHJpbyAhPSBwLT5wcmlvIHx8IGRsX3Rhc2socCkpCiAJCXAtPnNjaGVkX2NsYXNzLT5wcmlvX2NoYW5nZWQocnEsIHAsIG9sZHByaW8pOwpAQCAtMTA1NCw3ICsxMDU4LDcgQEAKIAkgKiB0dHd1KCkgd2lsbCBzb3J0IG91dCB0aGUgcGxhY2VtZW50LgogCSAqLwogCVdBUk5fT05fT05DRShwLT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcgJiYgcC0+c3RhdGUgIT0gVEFTS19XQUtJTkcgJiYKLQkJCSEodGFza19wcmVlbXB0X2NvdW50KHApICYgUFJFRU1QVF9BQ1RJVkUpKTsKKwkJCSFwLT5vbl9ycSk7CiAKICNpZmRlZiBDT05GSUdfTE9DS0RFUAogCS8qCkBAIC0xNDA3LDcgKzE0MTEsOCBAQAogc3RhdGljIGlubGluZQogaW50IHNlbGVjdF90YXNrX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSwgaW50IHNkX2ZsYWdzLCBpbnQgd2FrZV9mbGFncykKIHsKLQljcHUgPSBwLT5zY2hlZF9jbGFzcy0+c2VsZWN0X3Rhc2tfcnEocCwgY3B1LCBzZF9mbGFncywgd2FrZV9mbGFncyk7CisJaWYgKHAtPm5yX2NwdXNfYWxsb3dlZCA+IDEpCisJCWNwdSA9IHAtPnNjaGVkX2NsYXNzLT5zZWxlY3RfdGFza19ycShwLCBjcHUsIHNkX2ZsYWdzLCB3YWtlX2ZsYWdzKTsKIAogCS8qCiAJICogSW4gb3JkZXIgbm90IHRvIGNhbGwgc2V0X3Rhc2tfY3B1KCkgb24gYSBibG9ja2luZyB0YXNrIHdlIG5lZWQKQEAgLTE2MjMsOCArMTYyOCwxMCBAQAogCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFpc19pZGxlX3Rhc2socnEtPmN1cnIpKQotCQlyZXR1cm47CisJcmN1X3JlYWRfbG9jaygpOworCisJaWYgKCFpc19pZGxlX3Rhc2socmN1X2RlcmVmZXJlbmNlKHJxLT5jdXJyKSkpCisJCWdvdG8gb3V0OwogCiAJaWYgKHNldF9ucl9pZl9wb2xsaW5nKHJxLT5pZGxlKSkgewogCQl0cmFjZV9zY2hlZF93YWtlX2lkbGVfd2l0aG91dF9pcGkoY3B1KTsKQEAgLTE2MzUsNiArMTY0Miw5IEBACiAJCS8qIEVsc2UgY3B1IGlzIG5vdCBpbiBpZGxlLCBkbyBub3RoaW5nIGhlcmUgKi8KIAkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CiAJfQorCitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIGJvb2wgY3B1c19zaGFyZV9jYWNoZShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSkKQEAgLTE4NTMsMTIgKzE4NjMsMTAgQEAKIAlwLT5udW1hX3NjYW5fc2VxID0gcC0+bW0gPyBwLT5tbS0+bnVtYV9zY2FuX3NlcSA6IDA7CiAJcC0+bnVtYV9zY2FuX3BlcmlvZCA9IHN5c2N0bF9udW1hX2JhbGFuY2luZ19zY2FuX2RlbGF5OwogCXAtPm51bWFfd29yay5uZXh0ID0gJnAtPm51bWFfd29yazsKLQlwLT5udW1hX2ZhdWx0c19tZW1vcnkgPSBOVUxMOwotCXAtPm51bWFfZmF1bHRzX2J1ZmZlcl9tZW1vcnkgPSBOVUxMOworCXAtPm51bWFfZmF1bHRzID0gTlVMTDsKIAlwLT5sYXN0X3Rhc2tfbnVtYV9wbGFjZW1lbnQgPSAwOwogCXAtPmxhc3Rfc3VtX2V4ZWNfcnVudGltZSA9IDA7CiAKLQlJTklUX0xJU1RfSEVBRCgmcC0+bnVtYV9lbnRyeSk7CiAJcC0+bnVtYV9ncm91cCA9IE5VTEw7CiAjZW5kaWYgLyogQ09ORklHX05VTUFfQkFMQU5DSU5HICovCiB9CkBAIC0yMDM0LDI1ICsyMDQyLDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lCi12b2lkIF9fZGxfY2xlYXIoc3RydWN0IGRsX2J3ICpkbF9iLCB1NjQgdHNrX2J3KQotewotCWRsX2ItPnRvdGFsX2J3IC09IHRza19idzsKLX0KLQotc3RhdGljIGlubGluZQotdm9pZCBfX2RsX2FkZChzdHJ1Y3QgZGxfYncgKmRsX2IsIHU2NCB0c2tfYncpCi17Ci0JZGxfYi0+dG90YWxfYncgKz0gdHNrX2J3OwotfQotCi1zdGF0aWMgaW5saW5lCi1ib29sIF9fZGxfb3ZlcmZsb3coc3RydWN0IGRsX2J3ICpkbF9iLCBpbnQgY3B1cywgdTY0IG9sZF9idywgdTY0IG5ld19idykKLXsKLQlyZXR1cm4gZGxfYi0+YncgIT0gLTEgJiYKLQkgICAgICAgZGxfYi0+YncgKiBjcHVzIDwgZGxfYi0+dG90YWxfYncgLSBvbGRfYncgKyBuZXdfYnc7Ci19Ci0KIC8qCiAgKiBXZSBtdXN0IGJlIHN1cmUgdGhhdCBhY2NlcHRpbmcgYSBuZXcgdGFzayAob3IgYWxsb3dpbmcgY2hhbmdpbmcgdGhlCiAgKiBwYXJhbWV0ZXJzIG9mIGFuIGV4aXN0aW5nIG9uZSkgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBiYW5kd2lkdGgKQEAgLTIyMjAsNyArMjIwOSw2IEBACiAKIC8qKgogICogZmluaXNoX3Rhc2tfc3dpdGNoIC0gY2xlYW4gdXAgYWZ0ZXIgYSB0YXNrLXN3aXRjaAotICogQHJxOiBydW5xdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGFzay1zd2l0Y2gKICAqIEBwcmV2OiB0aGUgdGhyZWFkIHdlIGp1c3Qgc3dpdGNoZWQgYXdheSBmcm9tLgogICoKICAqIGZpbmlzaF90YXNrX3N3aXRjaCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgY29udGV4dCBzd2l0Y2gsIHBhaXJlZApAQCAtMjIzMiwxMCArMjIyMCwxNiBAQAogICogc28sIHdlIGZpbmlzaCB0aGF0IGhlcmUgb3V0c2lkZSBvZiB0aGUgcnVucXVldWUgbG9jay4gKERvaW5nIGl0CiAgKiB3aXRoIHRoZSBsb2NrIGhlbGQgY2FuIGNhdXNlIGRlYWRsb2Nrczsgc2VlIHNjaGVkdWxlKCkgZm9yCiAgKiBkZXRhaWxzLikKKyAqCisgKiBUaGUgY29udGV4dCBzd2l0Y2ggaGF2ZSBmbGlwcGVkIHRoZSBzdGFjayBmcm9tIHVuZGVyIHVzIGFuZCByZXN0b3JlZCB0aGUKKyAqIGxvY2FsIHZhcmlhYmxlcyB3aGljaCB3ZXJlIHNhdmVkIHdoZW4gdGhpcyB0YXNrIGNhbGxlZCBzY2hlZHVsZSgpIGluIHRoZQorICogcGFzdC4gcHJldiA9PSBjdXJyZW50IGlzIHN0aWxsIGNvcnJlY3QgYnV0IHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhpc19ycQorICogYmVjYXVzZSBwcmV2IG1heSBoYXZlIG1vdmVkIHRvIGFub3RoZXIgQ1BVLgogICovCi1zdGF0aWMgdm9pZCBmaW5pc2hfdGFza19zd2l0Y2goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQorc3RhdGljIHN0cnVjdCBycSAqZmluaXNoX3Rhc2tfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIAlfX3JlbGVhc2VzKHJxLT5sb2NrKQogeworCXN0cnVjdCBycSAqcnEgPSB0aGlzX3JxKCk7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBycS0+cHJldl9tbTsKIAlsb25nIHByZXZfc3RhdGU7CiAKQEAgLTIyNzUsNiArMjI2OSw3IEBACiAJfQogCiAJdGlja19ub2h6X3Rhc2tfc3dpdGNoKGN1cnJlbnQpOworCXJldHVybiBycTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTIzMDksMjUgKzIzMDQsMjIgQEAKIGFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgc2NoZWR1bGVfdGFpbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCiAJX19yZWxlYXNlcyhycS0+bG9jaykKIHsKLQlzdHJ1Y3QgcnEgKnJxID0gdGhpc19ycSgpOworCXN0cnVjdCBycSAqcnE7CiAKLQlmaW5pc2hfdGFza19zd2l0Y2gocnEsIHByZXYpOwotCi0JLyoKLQkgKiBGSVhNRTogZG8gd2UgbmVlZCB0byB3b3JyeSBhYm91dCBycSBiZWluZyBpbnZhbGlkYXRlZCBieSB0aGUKLQkgKiB0YXNrX3N3aXRjaD8KLQkgKi8KKwkvKiBmaW5pc2hfdGFza19zd2l0Y2goKSBkcm9wcyBycS0+bG9jayBhbmQgZW5hYmxlcyBwcmVlbXRpb24gKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlycSA9IGZpbmlzaF90YXNrX3N3aXRjaChwcmV2KTsKIAlwb3N0X3NjaGVkdWxlKHJxKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogCiAJaWYgKGN1cnJlbnQtPnNldF9jaGlsZF90aWQpCiAJCXB1dF91c2VyKHRhc2tfcGlkX3ZucihjdXJyZW50KSwgY3VycmVudC0+c2V0X2NoaWxkX3RpZCk7CiB9CiAKIC8qCi0gKiBjb250ZXh0X3N3aXRjaCAtIHN3aXRjaCB0byB0aGUgbmV3IE1NIGFuZCB0aGUgbmV3Ci0gKiB0aHJlYWQncyByZWdpc3RlciBzdGF0ZS4KKyAqIGNvbnRleHRfc3dpdGNoIC0gc3dpdGNoIHRvIHRoZSBuZXcgTU0gYW5kIHRoZSBuZXcgdGhyZWFkJ3MgcmVnaXN0ZXIgc3RhdGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKgogY29udGV4dF9zd2l0Y2goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiB7CkBAIC0yMzY2LDE0ICsyMzU4LDkgQEAKIAljb250ZXh0X3RyYWNraW5nX3Rhc2tfc3dpdGNoKHByZXYsIG5leHQpOwogCS8qIEhlcmUgd2UganVzdCBzd2l0Y2ggdGhlIHJlZ2lzdGVyIHN0YXRlIGFuZCB0aGUgc3RhY2suICovCiAJc3dpdGNoX3RvKHByZXYsIG5leHQsIHByZXYpOwotCiAJYmFycmllcigpOwotCS8qCi0JICogdGhpc19ycSBtdXN0IGJlIGV2YWx1YXRlZCBhZ2FpbiBiZWNhdXNlIHByZXYgbWF5IGhhdmUgbW92ZWQKLQkgKiBDUFVzIHNpbmNlIGl0IGNhbGxlZCBzY2hlZHVsZSgpLCB0aHVzIHRoZSAncnEnIG9uIGl0cyBzdGFjawotCSAqIGZyYW1lIHdpbGwgYmUgaW52YWxpZC4KLQkgKi8KLQlmaW5pc2hfdGFza19zd2l0Y2godGhpc19ycSgpLCBwcmV2KTsKKworCXJldHVybiBmaW5pc2hfdGFza19zd2l0Y2gocHJldik7CiB9CiAKIC8qCkBAIC0yNzczLDcgKzI3NjAsNyBAQAogCXByZWVtcHRfZGlzYWJsZSgpOwogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlycSA9IGNwdV9ycShjcHUpOwotCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKGNwdSk7CisJcmN1X25vdGVfY29udGV4dF9zd2l0Y2goKTsKIAlwcmV2ID0gcnEtPmN1cnI7CiAKIAlzY2hlZHVsZV9kZWJ1ZyhwcmV2KTsKQEAgLTI4MjYsMTUgKzI4MTMsOCBAQAogCQlycS0+Y3VyciA9IG5leHQ7CiAJCSsrKnN3aXRjaF9jb3VudDsKIAotCQljb250ZXh0X3N3aXRjaChycSwgcHJldiwgbmV4dCk7IC8qIHVubG9ja3MgdGhlIHJxICovCi0JCS8qCi0JCSAqIFRoZSBjb250ZXh0IHN3aXRjaCBoYXZlIGZsaXBwZWQgdGhlIHN0YWNrIGZyb20gdW5kZXIgdXMKLQkJICogYW5kIHJlc3RvcmVkIHRoZSBsb2NhbCB2YXJpYWJsZXMgd2hpY2ggd2VyZSBzYXZlZCB3aGVuCi0JCSAqIHRoaXMgdGFzayBjYWxsZWQgc2NoZWR1bGUoKSBpbiB0aGUgcGFzdC4gcHJldiA9PSBjdXJyZW50Ci0JCSAqIGlzIHN0aWxsIGNvcnJlY3QsIGJ1dCBpdCBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBjcHUvcnEuCi0JCSAqLwotCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JCXJxID0gY3B1X3JxKGNwdSk7CisJCXJxID0gY29udGV4dF9zd2l0Y2gocnEsIHByZXYsIG5leHQpOyAvKiB1bmxvY2tzIHRoZSBycSAqLworCQljcHUgPSBjcHVfb2YocnEpOwogCX0gZWxzZQogCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CiAKQEAgLTQ2NTMsNiArNDYzMyw4MSBAQAogI2VuZGlmCiB9CiAKK2ludCBjcHVzZXRfY3B1bWFza19jYW5fc2hyaW5rKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjdXIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqdHJpYWwpCit7CisJaW50IHJldCA9IDEsIHRyaWFsX2NwdXM7CisJc3RydWN0IGRsX2J3ICpjdXJfZGxfYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmN1X3JlYWRfbG9ja19zY2hlZCgpOworCWN1cl9kbF9iID0gZGxfYndfb2YoY3B1bWFza19hbnkoY3VyKSk7CisJdHJpYWxfY3B1cyA9IGNwdW1hc2tfd2VpZ2h0KHRyaWFsKTsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY3VyX2RsX2ItPmxvY2ssIGZsYWdzKTsKKwlpZiAoY3VyX2RsX2ItPmJ3ICE9IC0xICYmCisJICAgIGN1cl9kbF9iLT5idyAqIHRyaWFsX2NwdXMgPCBjdXJfZGxfYi0+dG90YWxfYncpCisJCXJldCA9IDA7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cl9kbF9iLT5sb2NrLCBmbGFncyk7CisJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdGFza19jYW5fYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjc19jcHVzX2FsbG93ZWQpCit7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIEt0aHJlYWRzIHdoaWNoIGRpc2FsbG93IHNldGFmZmluaXR5IHNob3VsZG4ndCBiZSBtb3ZlZAorCSAqIHRvIGEgbmV3IGNwdXNldDsgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlaXIgY3B1CisJICogYWZmaW5pdHkgYW5kIGlzb2xhdGluZyBzdWNoIHRocmVhZHMgYnkgdGhlaXIgc2V0IG9mCisJICogYWxsb3dlZCBub2RlcyBpcyB1bm5lY2Vzc2FyeS4gIFRodXMsIGNwdXNldHMgYXJlIG5vdAorCSAqIGFwcGxpY2FibGUgZm9yIHN1Y2ggdGhyZWFkcy4gIFRoaXMgcHJldmVudHMgY2hlY2tpbmcgZm9yCisJICogc3VjY2VzcyBvZiBzZXRfY3B1c19hbGxvd2VkX3B0cigpIG9uIGFsbCBhdHRhY2hlZCB0YXNrcworCSAqIGJlZm9yZSBjcHVzX2FsbG93ZWQgbWF5IGJlIGNoYW5nZWQuCisJICovCisJaWYgKHAtPmZsYWdzICYgUEZfTk9fU0VUQUZGSU5JVFkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChkbF90YXNrKHApICYmICFjcHVtYXNrX2ludGVyc2VjdHModGFza19ycShwKS0+cmQtPnNwYW4sCisJCQkJCSAgICAgIGNzX2NwdXNfYWxsb3dlZCkpIHsKKwkJdW5zaWduZWQgaW50IGRlc3RfY3B1ID0gY3B1bWFza19hbnlfYW5kKGNwdV9hY3RpdmVfbWFzaywKKwkJCQkJCQljc19jcHVzX2FsbG93ZWQpOworCQlzdHJ1Y3QgZGxfYncgKmRsX2I7CisJCWJvb2wgb3ZlcmZsb3c7CisJCWludCBjcHVzOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKKwkJZGxfYiA9IGRsX2J3X29mKGRlc3RfY3B1KTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkbF9iLT5sb2NrLCBmbGFncyk7CisJCWNwdXMgPSBkbF9id19jcHVzKGRlc3RfY3B1KTsKKwkJb3ZlcmZsb3cgPSBfX2RsX292ZXJmbG93KGRsX2IsIGNwdXMsIDAsIHAtPmRsLmRsX2J3KTsKKwkJaWYgKG92ZXJmbG93KQorCQkJcmV0ID0gLUVCVVNZOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBXZSByZXNlcnZlIHNwYWNlIGZvciB0aGlzIHRhc2sgaW4gdGhlIGRlc3RpbmF0aW9uCisJCQkgKiByb290X2RvbWFpbiwgYXMgd2UgY2FuJ3QgZmFpbCBhZnRlciB0aGlzIHBvaW50LgorCQkJICogV2Ugd2lsbCBmcmVlIHJlc291cmNlcyBpbiB0aGUgc291cmNlIHJvb3RfZG9tYWluCisJCQkgKiBsYXRlciBvbiAoc2VlIHNldF9jcHVzX2FsbG93ZWRfZGwoKSkuCisJCQkgKi8KKwkJCV9fZGxfYWRkKGRsX2IsIHAtPmRsLmRsX2J3KTsKKwkJfQorCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGxfYi0+bG9jaywgZmxhZ3MpOworCQlyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTsKKworCX0KKyNlbmRpZgorb3V0OgorCXJldHVybiByZXQ7Cit9CisKICNpZmRlZiBDT05GSUdfU01QCiAvKgogICogbW92ZV9xdWV1ZWRfdGFzayAtIG1vdmUgYSBxdWV1ZWQgdGFzayB0byBuZXcgcnEuCkBAIC02MTAzLDcgKzYxNTgsOSBAQAogCiAjaWZkZWYgQ09ORklHX05VTUEKIHN0YXRpYyBpbnQgc2NoZWRfZG9tYWluc19udW1hX2xldmVsczsKK2VudW0gbnVtYV90b3BvbG9neV90eXBlIHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZTsKIHN0YXRpYyBpbnQgKnNjaGVkX2RvbWFpbnNfbnVtYV9kaXN0YW5jZTsKK2ludCBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsKIHN0YXRpYyBzdHJ1Y3QgY3B1bWFzayAqKipzY2hlZF9kb21haW5zX251bWFfbWFza3M7CiBzdGF0aWMgaW50IHNjaGVkX2RvbWFpbnNfY3Vycl9sZXZlbDsKICNlbmRpZgpAQCAtNjI3NSw3ICs2MzMyLDcgQEAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJcbiIpOwogfQogCi1zdGF0aWMgYm9vbCBmaW5kX251bWFfZGlzdGFuY2UoaW50IGRpc3RhbmNlKQorYm9vbCBmaW5kX251bWFfZGlzdGFuY2UoaW50IGRpc3RhbmNlKQogewogCWludCBpOwogCkBAIC02MjkwLDYgKzYzNDcsNTYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBBIHN5c3RlbSBjYW4gaGF2ZSB0aHJlZSB0eXBlcyBvZiBOVU1BIHRvcG9sb2d5OgorICogTlVNQV9ESVJFQ1Q6IGFsbCBub2RlcyBhcmUgZGlyZWN0bHkgY29ubmVjdGVkLCBvciBub3QgYSBOVU1BIHN5c3RlbQorICogTlVNQV9HTFVFTEVTU19NRVNIOiBzb21lIG5vZGVzIHJlYWNoYWJsZSB0aHJvdWdoIGludGVybWVkaWFyeSBub2RlcworICogTlVNQV9CQUNLUExBTkU6IG5vZGVzIGNhbiByZWFjaCBvdGhlciBub2RlcyB0aHJvdWdoIGEgYmFja3BsYW5lCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGdsdWVsZXNzIG1lc2ggdG9wb2xvZ3kgYW5kIGEgYmFja3BsYW5lCisgKiB0b3BvbG9neSBsaWVzIGluIHdoZXRoZXIgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIG5vdCBkaXJlY3RseQorICogY29ubmVjdGVkIG5vZGVzIGdvZXMgdGhyb3VnaCBpbnRlcm1lZGlhcnkgbm9kZXMgKHdoZXJlIHByb2dyYW1zCisgKiBjb3VsZCBydW4pLCBvciB0aHJvdWdoIGJhY2twbGFuZSBjb250cm9sbGVycy4gVGhpcyBhZmZlY3RzCisgKiBwbGFjZW1lbnQgb2YgcHJvZ3JhbXMuCisgKgorICogVGhlIHR5cGUgb2YgdG9wb2xvZ3kgY2FuIGJlIGRpc2Nlcm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6CisgKiAtIElmIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gYW55IG5vZGVzIGlzIDEgaG9wLCB0aGUgc3lzdGVtCisgKiAgIGlzIGRpcmVjdGx5IGNvbm5lY3RlZC4KKyAqIC0gSWYgZm9yIHR3byBub2RlcyBBIGFuZCBCLCBsb2NhdGVkIE4gPiAxIGhvcHMgYXdheSBmcm9tIGVhY2ggb3RoZXIsCisgKiAgIHRoZXJlIGlzIGFuIGludGVybWVkaWFyeSBub2RlIEMsIHdoaWNoIGlzIDwgTiBob3BzIGF3YXkgZnJvbSBib3RoCisgKiAgIG5vZGVzIEEgYW5kIEIsIHRoZSBzeXN0ZW0gaXMgYSBnbHVlbGVzcyBtZXNoLgorICovCitzdGF0aWMgdm9pZCBpbml0X251bWFfdG9wb2xvZ3lfdHlwZSh2b2lkKQoreworCWludCBhLCBiLCBjLCBuOworCisJbiA9IHNjaGVkX21heF9udW1hX2Rpc3RhbmNlOworCisJaWYgKG4gPD0gMSkKKwkJc2NoZWRfbnVtYV90b3BvbG9neV90eXBlID0gTlVNQV9ESVJFQ1Q7CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShhKSB7CisJCWZvcl9lYWNoX29ubGluZV9ub2RlKGIpIHsKKwkJCS8qIEZpbmQgdHdvIG5vZGVzIGZ1cnRoZXN0IHJlbW92ZWQgZnJvbSBlYWNoIG90aGVyLiAqLworCQkJaWYgKG5vZGVfZGlzdGFuY2UoYSwgYikgPCBuKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBJcyB0aGVyZSBhbiBpbnRlcm1lZGlhcnkgbm9kZSBiZXR3ZWVuIGEgYW5kIGI/ICovCisJCQlmb3JfZWFjaF9vbmxpbmVfbm9kZShjKSB7CisJCQkJaWYgKG5vZGVfZGlzdGFuY2UoYSwgYykgPCBuICYmCisJCQkJICAgIG5vZGVfZGlzdGFuY2UoYiwgYykgPCBuKSB7CisJCQkJCXNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZSA9CisJCQkJCQkJTlVNQV9HTFVFTEVTU19NRVNIOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCisJCQlzY2hlZF9udW1hX3RvcG9sb2d5X3R5cGUgPSBOVU1BX0JBQ0tQTEFORTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgc2NoZWRfaW5pdF9udW1hKHZvaWQpCiB7CiAJaW50IG5leHRfZGlzdGFuY2UsIGN1cnJfZGlzdGFuY2UgPSBub2RlX2Rpc3RhbmNlKDAsIDApOwpAQCAtNjQyNiw2ICs2NTMzLDkgQEAKIAlzY2hlZF9kb21haW5fdG9wb2xvZ3kgPSB0bDsKIAogCXNjaGVkX2RvbWFpbnNfbnVtYV9sZXZlbHMgPSBsZXZlbDsKKwlzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZSA9IHNjaGVkX2RvbWFpbnNfbnVtYV9kaXN0YW5jZVtsZXZlbCAtIDFdOworCisJaW5pdF9udW1hX3RvcG9sb2d5X3R5cGUoKTsKIH0KIAogc3RhdGljIHZvaWQgc2NoZWRfZG9tYWluc19udW1hX21hc2tzX3NldChpbnQgY3B1KQpAQCAtNzE3OCw2ICs3Mjg4LDI1IEBACiAKIHZvaWQgX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KQogeworCS8qCisJICogQmxvY2tpbmcgcHJpbWl0aXZlcyB3aWxsIHNldCAoYW5kIHRoZXJlZm9yZSBkZXN0cm95KSBjdXJyZW50LT5zdGF0ZSwKKwkgKiBzaW5jZSB3ZSB3aWxsIGV4aXQgd2l0aCBUQVNLX1JVTk5JTkcgbWFrZSBzdXJlIHdlIGVudGVyIHdpdGggaXQsCisJICogb3RoZXJ3aXNlIHdlIHdpbGwgZGVzdHJveSBzdGF0ZS4KKwkgKi8KKwlpZiAoV0FSTl9PTkNFKGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORywKKwkJCSJkbyBub3QgY2FsbCBibG9ja2luZyBvcHMgd2hlbiAhVEFTS19SVU5OSU5HOyAiCisJCQkic3RhdGU9JWx4IHNldCBhdCBbPCVwPl0gJXBTXG4iLAorCQkJY3VycmVudC0+c3RhdGUsCisJCQkodm9pZCAqKWN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlLAorCQkJKHZvaWQgKiljdXJyZW50LT50YXNrX3N0YXRlX2NoYW5nZSkpCisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCV9fX21pZ2h0X3NsZWVwKGZpbGUsIGxpbmUsIHByZWVtcHRfb2Zmc2V0KTsKK30KK0VYUE9SVF9TWU1CT0woX19taWdodF9zbGVlcCk7CisKK3ZvaWQgX19fbWlnaHRfc2xlZXAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBwcmVlbXB0X29mZnNldCkKK3sKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBwcmV2X2ppZmZ5OwkvKiByYXRlbGltaXRpbmcgKi8KIAogCXJjdV9zbGVlcF9jaGVjaygpOyAvKiBXQVJOX09OX09OQ0UoKSBieSBkZWZhdWx0LCBubyByYXRlIGxpbWl0IHJlcWQuICovCkBAIC03MjA5LDcgKzczMzgsNyBAQAogI2VuZGlmCiAJZHVtcF9zdGFjaygpOwogfQotRVhQT1JUX1NZTUJPTChfX21pZ2h0X3NsZWVwKTsKK0VYUE9SVF9TWU1CT0woX19fbWlnaHRfc2xlZXApOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5oIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmgKaW5kZXggNTM4Yzk3OS4uMDIwMDM5YiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmgKKysrIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmgKQEAgLTI1LDkgKzI1LDYgQEAKIHZvaWQgY3B1ZGxfc2V0KHN0cnVjdCBjcHVkbCAqY3AsIGludCBjcHUsIHU2NCBkbCwgaW50IGlzX3ZhbGlkKTsKIGludCBjcHVkbF9pbml0KHN0cnVjdCBjcHVkbCAqY3ApOwogdm9pZCBjcHVkbF9jbGVhbnVwKHN0cnVjdCBjcHVkbCAqY3ApOwotI2Vsc2UKLSNkZWZpbmUgY3B1ZGxfc2V0KGNwLCBjcHUsIGRsKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGNwdWRsX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0NQVURMX0ggKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHVwcmkuaCBiL2tlcm5lbC9zY2hlZC9jcHVwcmkuaAppbmRleCA2YjAzMzM0Li42M2NiYjljIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY3B1cHJpLmgKKysrIGIva2VybmVsL3NjaGVkL2NwdXByaS5oCkBAIC0yNiw5ICsyNiw2IEBACiB2b2lkIGNwdXByaV9zZXQoc3RydWN0IGNwdXByaSAqY3AsIGludCBjcHUsIGludCBwcmkpOwogaW50IGNwdXByaV9pbml0KHN0cnVjdCBjcHVwcmkgKmNwKTsKIHZvaWQgY3B1cHJpX2NsZWFudXAoc3RydWN0IGNwdXByaSAqY3ApOwotI2Vsc2UKLSNkZWZpbmUgY3B1cHJpX3NldChjcCwgY3B1LCBwcmkpIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgY3B1cHJpX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9DUFVQUklfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYWRsaW5lLmMgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYwppbmRleCAyOGZhOWQ5Li5lNWRiOGM2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYworKysgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYwpAQCAtNTYzLDExICs1NjMsNiBAQAogewogCXN0cnVjdCBocnRpbWVyICp0aW1lciA9ICZkbF9zZS0+ZGxfdGltZXI7CiAKLQlpZiAoaHJ0aW1lcl9hY3RpdmUodGltZXIpKSB7Ci0JCWhydGltZXJfdHJ5X3RvX2NhbmNlbCh0aW1lcik7Ci0JCXJldHVybjsKLQl9Ci0KIAlocnRpbWVyX2luaXQodGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CiAJdGltZXItPmZ1bmN0aW9uID0gZGxfdGFza190aW1lcjsKIH0KQEAgLTYzMyw3ICs2MjgsNyBAQAogCiAJc2NoZWRfcnRfYXZnX3VwZGF0ZShycSwgZGVsdGFfZXhlYyk7CiAKLQlkbF9zZS0+cnVudGltZSAtPSBkZWx0YV9leGVjOworCWRsX3NlLT5ydW50aW1lIC09IGRsX3NlLT5kbF95aWVsZGVkID8gMCA6IGRlbHRhX2V4ZWM7CiAJaWYgKGRsX3J1bnRpbWVfZXhjZWVkZWQocnEsIGRsX3NlKSkgewogCQlfX2RlcXVldWVfdGFza19kbChycSwgY3VyciwgMCk7CiAJCWlmIChsaWtlbHkoc3RhcnRfZGxfdGltZXIoZGxfc2UsIGN1cnItPmRsLmRsX2Jvb3N0ZWQpKSkKQEAgLTkzMyw3ICs5MjgsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycjsKIAlzdHJ1Y3QgcnEgKnJxOwogCi0JaWYgKHNkX2ZsYWcgIT0gU0RfQkFMQU5DRV9XQUtFICYmIHNkX2ZsYWcgIT0gU0RfQkFMQU5DRV9GT1JLKQorCWlmIChzZF9mbGFnICE9IFNEX0JBTEFOQ0VfV0FLRSkKIAkJZ290byBvdXQ7CiAKIAlycSA9IGNwdV9ycShjcHUpOwpAQCAtMTAxOCw2ICsxMDEzLDEwIEBACiB7CiAJaHJ0aWNrX3N0YXJ0KHJxLCBwLT5kbC5ydW50aW1lKTsKIH0KKyNlbHNlIC8qICFDT05GSUdfU0NIRURfSFJUSUNLICovCitzdGF0aWMgdm9pZCBzdGFydF9ocnRpY2tfZGwoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworfQogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpwaWNrX25leHRfZGxfZW50aXR5KHN0cnVjdCBycSAqcnEsCkBAIC0xMDcxLDEwICsxMDcwLDggQEAKIAkvKiBSdW5uaW5nIHRhc2sgd2lsbCBuZXZlciBiZSBwdXNoZWQuICovCiAgICAgICAgZGVxdWV1ZV9wdXNoYWJsZV9kbF90YXNrKHJxLCBwKTsKIAotI2lmZGVmIENPTkZJR19TQ0hFRF9IUlRJQ0sKIAlpZiAoaHJ0aWNrX2VuYWJsZWQocnEpKQogCQlzdGFydF9ocnRpY2tfZGwocnEsIHApOwotI2VuZGlmCiAKIAlzZXRfcG9zdF9zY2hlZHVsZShycSk7CiAKQEAgLTEwOTMsMTAgKzEwOTAsOCBAQAogewogCXVwZGF0ZV9jdXJyX2RsKHJxKTsKIAotI2lmZGVmIENPTkZJR19TQ0hFRF9IUlRJQ0sKIAlpZiAoaHJ0aWNrX2VuYWJsZWQocnEpICYmIHF1ZXVlZCAmJiBwLT5kbC5ydW50aW1lID4gMCkKIAkJc3RhcnRfaHJ0aWNrX2RsKHJxLCBwKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB0YXNrX2ZvcmtfZGwoc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMTMzMyw2ICsxMzI4LDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHRfdGFzazsKIAlzdHJ1Y3QgcnEgKmxhdGVyX3JxOworCWludCByZXQgPSAwOwogCiAJaWYgKCFycS0+ZGwub3ZlcmxvYWRlZCkKIAkJcmV0dXJuIDA7CkBAIC0xMzc4LDcgKzEzNzQsNiBAQAogCQkJICogVGhlIHRhc2sgaXMgc3RpbGwgdGhlcmUuIFdlIGRvbid0IHRyeQogCQkJICogYWdhaW4sIHNvbWUgb3RoZXIgY3B1IHdpbGwgcHVsbCBpdCB3aGVuIHJlYWR5LgogCQkJICovCi0JCQlkZXF1ZXVlX3B1c2hhYmxlX2RsX3Rhc2socnEsIG5leHRfdGFzayk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0xMzk0LDYgKzEzODksNyBAQAogCWRlYWN0aXZhdGVfdGFzayhycSwgbmV4dF90YXNrLCAwKTsKIAlzZXRfdGFza19jcHUobmV4dF90YXNrLCBsYXRlcl9ycS0+Y3B1KTsKIAlhY3RpdmF0ZV90YXNrKGxhdGVyX3JxLCBuZXh0X3Rhc2ssIDApOworCXJldCA9IDE7CiAKIAlyZXNjaGVkX2N1cnIobGF0ZXJfcnEpOwogCkBAIC0xNDAyLDcgKzEzOTgsNyBAQAogb3V0OgogCXB1dF90YXNrX3N0cnVjdChuZXh0X3Rhc2spOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcHVzaF9kbF90YXNrcyhzdHJ1Y3QgcnEgKnJxKQpAQCAtMTUwOCw3ICsxNTA0LDcgQEAKIAkgICAgcC0+bnJfY3B1c19hbGxvd2VkID4gMSAmJgogCSAgICBkbF90YXNrKHJxLT5jdXJyKSAmJgogCSAgICAocnEtPmN1cnItPm5yX2NwdXNfYWxsb3dlZCA8IDIgfHwKLQkgICAgIGRsX2VudGl0eV9wcmVlbXB0KCZycS0+Y3Vyci0+ZGwsICZwLT5kbCkpKSB7CisJICAgICAhZGxfZW50aXR5X3ByZWVtcHQoJnAtPmRsLCAmcnEtPmN1cnItPmRsKSkpIHsKIAkJcHVzaF9kbF90YXNrcyhycSk7CiAJfQogfQpAQCAtMTUxNywxMCArMTUxMywzMyBAQAogCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzaykKIHsKIAlzdHJ1Y3QgcnEgKnJxOworCXN0cnVjdCByb290X2RvbWFpbiAqc3JjX3JkOwogCWludCB3ZWlnaHQ7CiAKIAlCVUdfT04oIWRsX3Rhc2socCkpOwogCisJcnEgPSB0YXNrX3JxKHApOworCXNyY19yZCA9IHJxLT5yZDsKKwkvKgorCSAqIE1pZ3JhdGluZyBhIFNDSEVEX0RFQURMSU5FIHRhc2sgYmV0d2VlbiBleGNsdXNpdmUKKwkgKiBjcHVzZXRzIChkaWZmZXJlbnQgcm9vdF9kb21haW5zKSBlbnRhaWxzIGEgYmFuZHdpZHRoCisJICogdXBkYXRlLiBXZSBhbHJlYWR5IG1hZGUgc3BhY2UgZm9yIHVzIGluIHRoZSBkZXN0aW5hdGlvbgorCSAqIGRvbWFpbiAoc2VlIGNwdXNldF9jYW5fYXR0YWNoKCkpLgorCSAqLworCWlmICghY3B1bWFza19pbnRlcnNlY3RzKHNyY19yZC0+c3BhbiwgbmV3X21hc2spKSB7CisJCXN0cnVjdCBkbF9idyAqc3JjX2RsX2I7CisKKwkJc3JjX2RsX2IgPSBkbF9id19vZihjcHVfb2YocnEpKTsKKwkJLyoKKwkJICogV2Ugbm93IGZyZWUgcmVzb3VyY2VzIG9mIHRoZSByb290X2RvbWFpbiB3ZSBhcmUgbWlncmF0aW5nCisJCSAqIG9mZi4gSW4gdGhlIHdvcnN0IGNhc2UsIHNjaGVkX3NldGF0dHIoKSBtYXkgdGVtcG9yYXJ5IGZhaWwKKwkJICogdW50aWwgd2UgY29tcGxldGUgdGhlIHVwZGF0ZS4KKwkJICovCisJCXJhd19zcGluX2xvY2soJnNyY19kbF9iLT5sb2NrKTsKKwkJX19kbF9jbGVhcihzcmNfZGxfYiwgcC0+ZGwuZGxfYncpOworCQlyYXdfc3Bpbl91bmxvY2soJnNyY19kbF9iLT5sb2NrKTsKKwl9CisKIAkvKgogCSAqIFVwZGF0ZSBvbmx5IGlmIHRoZSB0YXNrIGlzIGFjdHVhbGx5IHJ1bm5pbmcgKGkuZS4sCiAJICogaXQgaXMgb24gdGhlIHJxIEFORCBpdCBpcyBub3QgdGhyb3R0bGVkKS4KQEAgLTE1MzcsOCArMTU1Niw2IEBACiAJaWYgKChwLT5ucl9jcHVzX2FsbG93ZWQgPiAxKSA9PSAod2VpZ2h0ID4gMSkpCiAJCXJldHVybjsKIAotCXJxID0gdGFza19ycShwKTsKLQogCS8qCiAJICogVGhlIHByb2Nlc3MgdXNlZCB0byBiZSBhYmxlIHRvIG1pZ3JhdGUgT1IgaXQgY2FuIG5vdyBtaWdyYXRlCiAJICovCkBAIC0xNTg2LDIyICsxNjAzLDQ4IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKKy8qCisgKiAgRW5zdXJlIHAncyBkbF90aW1lciBpcyBjYW5jZWxsZWQuIE1heSBkcm9wIHJxLT5sb2NrIGZvciBhIHdoaWxlLgorICovCitzdGF0aWMgdm9pZCBjYW5jZWxfZGxfdGltZXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXN0cnVjdCBocnRpbWVyICpkbF90aW1lciA9ICZwLT5kbC5kbF90aW1lcjsKKworCS8qIE5vYm9keSB3aWxsIGNoYW5nZSB0YXNrJ3MgY2xhc3MgaWYgcGlfbG9jayBpcyBoZWxkICovCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcC0+cGlfbG9jayk7CisKKwlpZiAoaHJ0aW1lcl9hY3RpdmUoZGxfdGltZXIpKSB7CisJCWludCByZXQgPSBocnRpbWVyX3RyeV90b19jYW5jZWwoZGxfdGltZXIpOworCisJCWlmICh1bmxpa2VseShyZXQgPT0gLTEpKSB7CisJCQkvKgorCQkJICogTm90ZSwgcCBtYXkgbWlncmF0ZSBPUiBuZXcgZGVhZGxpbmUgdGFza3MKKwkJCSAqIG1heSBhcHBlYXIgaW4gcnEgd2hlbiB3ZSBhcmUgdW5sb2NraW5nIGl0LgorCQkJICogQSBjYWxsZXIgb2YgdXMgbXVzdCBiZSBmaW5lIHdpdGggdGhhdC4KKwkJCSAqLworCQkJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJCQlocnRpbWVyX2NhbmNlbChkbF90aW1lcik7CisJCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIHN3aXRjaGVkX2Zyb21fZGwoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCWlmIChocnRpbWVyX2FjdGl2ZSgmcC0+ZGwuZGxfdGltZXIpICYmICFkbF9wb2xpY3kocC0+cG9saWN5KSkKLQkJaHJ0aW1lcl90cnlfdG9fY2FuY2VsKCZwLT5kbC5kbF90aW1lcik7CisJY2FuY2VsX2RsX3RpbWVyKHJxLCBwKTsKIAogCV9fZGxfY2xlYXJfcGFyYW1zKHApOwogCi0jaWZkZWYgQ09ORklHX1NNUAogCS8qCiAJICogU2luY2UgdGhpcyBtaWdodCBiZSB0aGUgb25seSAtZGVhZGxpbmUgdGFzayBvbiB0aGUgcnEsCiAJICogdGhpcyBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gdHJ5IHRvIHB1bGwgc29tZSBvdGhlciBvbmUKIAkgKiBmcm9tIGFuIG92ZXJsb2FkZWQgY3B1LCBpZiBhbnkuCiAJICovCi0JaWYgKCFycS0+ZGwuZGxfbnJfcnVubmluZykKLQkJcHVsbF9kbF90YXNrKHJxKTsKLSNlbmRpZgorCWlmICghdGFza19vbl9ycV9xdWV1ZWQocCkgfHwgcnEtPmRsLmRsX25yX3J1bm5pbmcpCisJCXJldHVybjsKKworCWlmIChwdWxsX2RsX3Rhc2socnEpKQorCQlyZXNjaGVkX2N1cnIocnEpOwogfQogCiAvKgpAQCAtMTYyMiw3ICsxNjY1LDggQEAKIAogCWlmICh0YXNrX29uX3JxX3F1ZXVlZChwKSAmJiBycS0+Y3VyciAhPSBwKSB7CiAjaWZkZWYgQ09ORklHX1NNUAotCQlpZiAocnEtPmRsLm92ZXJsb2FkZWQgJiYgcHVzaF9kbF90YXNrKHJxKSAmJiBycSAhPSB0YXNrX3JxKHApKQorCQlpZiAocC0+bnJfY3B1c19hbGxvd2VkID4gMSAmJiBycS0+ZGwub3ZlcmxvYWRlZCAmJgorCQkJcHVzaF9kbF90YXNrKHJxKSAmJiBycSAhPSB0YXNrX3JxKHApKQogCQkJLyogT25seSByZXNjaGVkdWxlIGlmIHB1c2hpbmcgZmFpbGVkICovCiAJCQljaGVja19yZXNjaGVkID0gMDsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCkBAIC0xNzA0LDMgKzE3NDgsMTIgQEAKIAogCS51cGRhdGVfY3VycgkJPSB1cGRhdGVfY3Vycl9kbCwKIH07CisKKyNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKK2V4dGVybiB2b2lkIHByaW50X2RsX3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGRsX3JxICpkbF9ycSk7CisKK3ZvaWQgcHJpbnRfZGxfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KQoreworCXByaW50X2RsX3JxKG0sIGNwdSwgJmNwdV9ycShjcHUpLT5kbCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NDSEVEX0RFQlVHICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVidWcuYyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jCmluZGV4IGNlMzM3ODAuLjkyY2M1MjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jCkBAIC0yNjEsNiArMjYxLDEyIEBACiAjdW5kZWYgUAogfQogCit2b2lkIHByaW50X2RsX3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGRsX3JxICpkbF9ycSkKK3sKKwlTRVFfcHJpbnRmKG0sICJcbmRsX3JxWyVkXTpcbiIsIGNwdSk7CisJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsZFxuIiwgImRsX25yX3J1bm5pbmciLCBkbF9ycS0+ZGxfbnJfcnVubmluZyk7Cit9CisKIGV4dGVybiBfX3JlYWRfbW9zdGx5IGludCBzY2hlZF9jbG9ja19ydW5uaW5nOwogCiBzdGF0aWMgdm9pZCBwcmludF9jcHUoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KQpAQCAtMzI5LDYgKzMzNSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkX2RlYnVnX2xvY2ssIGZsYWdzKTsKIAlwcmludF9jZnNfc3RhdHMobSwgY3B1KTsKIAlwcmludF9ydF9zdGF0cyhtLCBjcHUpOworCXByaW50X2RsX3N0YXRzKG0sIGNwdSk7CiAKIAlwcmludF9ycShtLCBycSwgY3B1KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZF9kZWJ1Z19sb2NrLCBmbGFncyk7CkBAIC01MjgsOCArNTM1LDggQEAKIAkJCXVuc2lnbmVkIGxvbmcgbnJfZmF1bHRzID0gLTE7CiAJCQlpbnQgY3B1X2N1cnJlbnQsIGhvbWVfbm9kZTsKIAotCQkJaWYgKHAtPm51bWFfZmF1bHRzX21lbW9yeSkKLQkJCQlucl9mYXVsdHMgPSBwLT5udW1hX2ZhdWx0c19tZW1vcnlbMipub2RlICsgaV07CisJCQlpZiAocC0+bnVtYV9mYXVsdHMpCisJCQkJbnJfZmF1bHRzID0gcC0+bnVtYV9mYXVsdHNbMipub2RlICsgaV07CiAKIAkJCWNwdV9jdXJyZW50ID0gIWkgPyAodGFza19ub2RlKHApID09IG5vZGUpIDoKIAkJCQkocG9sICYmIG5vZGVfaXNzZXQobm9kZSwgcG9sLT52Lm5vZGVzKSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCBlZjJiMTA0Li5kZjJjZGY3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTg3Myw3ICs4NzMsNiBAQAogCXNwaW5sb2NrX3QgbG9jazsgLyogbnJfdGFza3MsIHRhc2tzICovCiAJaW50IG5yX3Rhc2tzOwogCXBpZF90IGdpZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHRhc2tfbGlzdDsKIAogCXN0cnVjdCByY3VfaGVhZCByY3U7CiAJbm9kZW1hc2tfdCBhY3RpdmVfbm9kZXM7CkBAIC05MDEsMTggKzkwMCwyNCBAQAogCXJldHVybiBwLT5udW1hX2dyb3VwID8gcC0+bnVtYV9ncm91cC0+Z2lkIDogMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdGFza19mYXVsdHNfaWR4KGludCBuaWQsIGludCBwcml2KQorLyoKKyAqIFRoZSBhdmVyYWdlZCBzdGF0aXN0aWNzLCBzaGFyZWQgJiBwcml2YXRlLCBtZW1vcnkgJiBjcHUsCisgKiBvY2N1cHkgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGFycmF5LiBUaGUgc2Vjb25kIGhhbGYgb2YgdGhlCisgKiBhcnJheSBpcyBmb3IgY3VycmVudCBjb3VudGVycywgd2hpY2ggYXJlIGF2ZXJhZ2VkIGludG8gdGhlCisgKiBmaXJzdCBzZXQgYnkgdGFza19udW1hX3BsYWNlbWVudC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGFza19mYXVsdHNfaWR4KGVudW0gbnVtYV9mYXVsdHNfc3RhdHMgcywgaW50IG5pZCwgaW50IHByaXYpCiB7Ci0JcmV0dXJuIE5SX05VTUFfSElOVF9GQVVMVF9UWVBFUyAqIG5pZCArIHByaXY7CisJcmV0dXJuIE5SX05VTUFfSElOVF9GQVVMVF9UWVBFUyAqIChzICogbnJfbm9kZV9pZHMgKyBuaWQpICsgcHJpdjsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRhc2tfZmF1bHRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZCkKIHsKLQlpZiAoIXAtPm51bWFfZmF1bHRzX21lbW9yeSkKKwlpZiAoIXAtPm51bWFfZmF1bHRzKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBwLT5udW1hX2ZhdWx0c19tZW1vcnlbdGFza19mYXVsdHNfaWR4KG5pZCwgMCldICsKLQkJcC0+bnVtYV9mYXVsdHNfbWVtb3J5W3Rhc2tfZmF1bHRzX2lkeChuaWQsIDEpXTsKKwlyZXR1cm4gcC0+bnVtYV9mYXVsdHNbdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNLCBuaWQsIDApXSArCisJCXAtPm51bWFfZmF1bHRzW3Rhc2tfZmF1bHRzX2lkeChOVU1BX01FTSwgbmlkLCAxKV07CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBncm91cF9mYXVsdHMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKQpAQCAtOTIwLDE0ICs5MjUsNzkgQEAKIAlpZiAoIXAtPm51bWFfZ3JvdXApCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHAtPm51bWFfZ3JvdXAtPmZhdWx0c1t0YXNrX2ZhdWx0c19pZHgobmlkLCAwKV0gKwotCQlwLT5udW1hX2dyb3VwLT5mYXVsdHNbdGFza19mYXVsdHNfaWR4KG5pZCwgMSldOworCXJldHVybiBwLT5udW1hX2dyb3VwLT5mYXVsdHNbdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNLCBuaWQsIDApXSArCisJCXAtPm51bWFfZ3JvdXAtPmZhdWx0c1t0YXNrX2ZhdWx0c19pZHgoTlVNQV9NRU0sIG5pZCwgMSldOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ3JvdXBfZmF1bHRzX2NwdShzdHJ1Y3QgbnVtYV9ncm91cCAqZ3JvdXAsIGludCBuaWQpCiB7Ci0JcmV0dXJuIGdyb3VwLT5mYXVsdHNfY3B1W3Rhc2tfZmF1bHRzX2lkeChuaWQsIDApXSArCi0JCWdyb3VwLT5mYXVsdHNfY3B1W3Rhc2tfZmF1bHRzX2lkeChuaWQsIDEpXTsKKwlyZXR1cm4gZ3JvdXAtPmZhdWx0c19jcHVbdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNLCBuaWQsIDApXSArCisJCWdyb3VwLT5mYXVsdHNfY3B1W3Rhc2tfZmF1bHRzX2lkeChOVU1BX01FTSwgbmlkLCAxKV07Cit9CisKKy8qIEhhbmRsZSBwbGFjZW1lbnQgb24gc3lzdGVtcyB3aGVyZSBub3QgYWxsIG5vZGVzIGFyZSBkaXJlY3RseSBjb25uZWN0ZWQuICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzY29yZV9uZWFyYnlfbm9kZXMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkLAorCQkJCQlpbnQgbWF4ZGlzdCwgYm9vbCB0YXNrKQoreworCXVuc2lnbmVkIGxvbmcgc2NvcmUgPSAwOworCWludCBub2RlOworCisJLyoKKwkgKiBBbGwgbm9kZXMgYXJlIGRpcmVjdGx5IGNvbm5lY3RlZCwgYW5kIHRoZSBzYW1lIGRpc3RhbmNlCisJICogZnJvbSBlYWNoIG90aGVyLiBObyBuZWVkIGZvciBmYW5jeSBwbGFjZW1lbnQgYWxnb3JpdGhtcy4KKwkgKi8KKwlpZiAoc2NoZWRfbnVtYV90b3BvbG9neV90eXBlID09IE5VTUFfRElSRUNUKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhpcyBjb2RlIGlzIGNhbGxlZCBmb3IgZWFjaCBub2RlLCBpbnRyb2R1Y2luZyBOXjIgY29tcGxleGl0eSwKKwkgKiB3aGljaCBzaG91bGQgYmUgb2sgZ2l2ZW4gdGhlIG51bWJlciBvZiBub2RlcyByYXJlbHkgZXhjZWVkcyA4LgorCSAqLworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKKwkJdW5zaWduZWQgbG9uZyBmYXVsdHM7CisJCWludCBkaXN0ID0gbm9kZV9kaXN0YW5jZShuaWQsIG5vZGUpOworCisJCS8qCisJCSAqIFRoZSBmdXJ0aGVzdCBhd2F5IG5vZGVzIGluIHRoZSBzeXN0ZW0gYXJlIG5vdCBpbnRlcmVzdGluZworCQkgKiBmb3IgcGxhY2VtZW50OyBuaWQgd2FzIGFscmVhZHkgY291bnRlZC4KKwkJICovCisJCWlmIChkaXN0ID09IHNjaGVkX21heF9udW1hX2Rpc3RhbmNlIHx8IG5vZGUgPT0gbmlkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogT24gc3lzdGVtcyB3aXRoIGEgYmFja3BsYW5lIE5VTUEgdG9wb2xvZ3ksIGNvbXBhcmUgZ3JvdXBzCisJCSAqIG9mIG5vZGVzLCBhbmQgbW92ZSB0YXNrcyB0b3dhcmRzIHRoZSBncm91cCB3aXRoIHRoZSBtb3N0CisJCSAqIG1lbW9yeSBhY2Nlc3Nlcy4gV2hlbiBjb21wYXJpbmcgdHdvIG5vZGVzIGF0IGRpc3RhbmNlCisJCSAqICJob3BsaW1pdCIsIG9ubHkgbm9kZXMgY2xvc2VyIGJ5IHRoYW4gImhvcGxpbWl0IiBhcmUgcGFydAorCQkgKiBvZiBlYWNoIGdyb3VwLiBTa2lwIG90aGVyIG5vZGVzLgorCQkgKi8KKwkJaWYgKHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZSA9PSBOVU1BX0JBQ0tQTEFORSAmJgorCQkJCQlkaXN0ID4gbWF4ZGlzdCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEFkZCB1cCB0aGUgZmF1bHRzIGZyb20gbmVhcmJ5IG5vZGVzLiAqLworCQlpZiAodGFzaykKKwkJCWZhdWx0cyA9IHRhc2tfZmF1bHRzKHAsIG5vZGUpOworCQllbHNlCisJCQlmYXVsdHMgPSBncm91cF9mYXVsdHMocCwgbm9kZSk7CisKKwkJLyoKKwkJICogT24gc3lzdGVtcyB3aXRoIGEgZ2x1ZWxlc3MgbWVzaCBOVU1BIHRvcG9sb2d5LCB0aGVyZSBhcmUKKwkJICogbm8gZml4ZWQgImdyb3VwcyBvZiBub2RlcyIuIEluc3RlYWQsIG5vZGVzIHRoYXQgYXJlIG5vdAorCQkgKiBkaXJlY3RseSBjb25uZWN0ZWQgYm91bmNlIHRyYWZmaWMgdGhyb3VnaCBpbnRlcm1lZGlhdGUKKwkJICogbm9kZXM7IGEgbnVtYV9ncm91cCBjYW4gb2NjdXB5IGFueSBzZXQgb2Ygbm9kZXMuCisJCSAqIFRoZSBmdXJ0aGVyIGF3YXkgYSBub2RlIGlzLCB0aGUgbGVzcyB0aGUgZmF1bHRzIGNvdW50LgorCQkgKiBUaGlzIHNlZW1zIHRvIHJlc3VsdCBpbiBnb29kIHRhc2sgcGxhY2VtZW50LgorCQkgKi8KKwkJaWYgKHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZSA9PSBOVU1BX0dMVUVMRVNTX01FU0gpIHsKKwkJCWZhdWx0cyAqPSAoc2NoZWRfbWF4X251bWFfZGlzdGFuY2UgLSBkaXN0KTsKKwkJCWZhdWx0cyAvPSAoc2NoZWRfbWF4X251bWFfZGlzdGFuY2UgLSBMT0NBTF9ESVNUQU5DRSk7CisJCX0KKworCQlzY29yZSArPSBmYXVsdHM7CisJfQorCisJcmV0dXJuIHNjb3JlOwogfQogCiAvKgpAQCAtOTM2LDExICsxMDA2LDEyIEBACiAgKiBsYXJnZXIgbXVsdGlwbGllciwgaW4gb3JkZXIgdG8gZ3JvdXAgdGFza3MgdG9nZXRoZXIgdGhhdCBhcmUgYWxtb3N0CiAgKiBldmVubHkgc3ByZWFkIG91dCBiZXR3ZWVuIG51bWEgbm9kZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0YXNrX3dlaWdodChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGFza193ZWlnaHQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkLAorCQkJCQlpbnQgZGlzdCkKIHsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX2ZhdWx0czsKKwl1bnNpZ25lZCBsb25nIGZhdWx0cywgdG90YWxfZmF1bHRzOwogCi0JaWYgKCFwLT5udW1hX2ZhdWx0c19tZW1vcnkpCisJaWYgKCFwLT5udW1hX2ZhdWx0cykKIAkJcmV0dXJuIDA7CiAKIAl0b3RhbF9mYXVsdHMgPSBwLT50b3RhbF9udW1hX2ZhdWx0czsKQEAgLTk0OCwxNSArMTAxOSwyOSBAQAogCWlmICghdG90YWxfZmF1bHRzKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiAxMDAwICogdGFza19mYXVsdHMocCwgbmlkKSAvIHRvdGFsX2ZhdWx0czsKKwlmYXVsdHMgPSB0YXNrX2ZhdWx0cyhwLCBuaWQpOworCWZhdWx0cyArPSBzY29yZV9uZWFyYnlfbm9kZXMocCwgbmlkLCBkaXN0LCB0cnVlKTsKKworCXJldHVybiAxMDAwICogZmF1bHRzIC8gdG90YWxfZmF1bHRzOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ3JvdXBfd2VpZ2h0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBncm91cF93ZWlnaHQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkLAorCQkJCQkgaW50IGRpc3QpCiB7Ci0JaWYgKCFwLT5udW1hX2dyb3VwIHx8ICFwLT5udW1hX2dyb3VwLT50b3RhbF9mYXVsdHMpCisJdW5zaWduZWQgbG9uZyBmYXVsdHMsIHRvdGFsX2ZhdWx0czsKKworCWlmICghcC0+bnVtYV9ncm91cCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gMTAwMCAqIGdyb3VwX2ZhdWx0cyhwLCBuaWQpIC8gcC0+bnVtYV9ncm91cC0+dG90YWxfZmF1bHRzOworCXRvdGFsX2ZhdWx0cyA9IHAtPm51bWFfZ3JvdXAtPnRvdGFsX2ZhdWx0czsKKworCWlmICghdG90YWxfZmF1bHRzKQorCQlyZXR1cm4gMDsKKworCWZhdWx0cyA9IGdyb3VwX2ZhdWx0cyhwLCBuaWQpOworCWZhdWx0cyArPSBzY29yZV9uZWFyYnlfbm9kZXMocCwgbmlkLCBkaXN0LCBmYWxzZSk7CisKKwlyZXR1cm4gMTAwMCAqIGZhdWx0cyAvIHRvdGFsX2ZhdWx0czsKIH0KIAogYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwYWdlICogcGFnZSwKQEAgLTEwODksNiArMTE3NCw3IEBACiAJc3RydWN0IG51bWFfc3RhdHMgc3JjX3N0YXRzLCBkc3Rfc3RhdHM7CiAKIAlpbnQgaW1iYWxhbmNlX3BjdDsKKwlpbnQgZGlzdDsKIAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqYmVzdF90YXNrOwogCWxvbmcgYmVzdF9pbXA7CkBAIC0xMTY4LDYgKzEyNTQsNyBAQAogCWxvbmcgbG9hZDsKIAlsb25nIGltcCA9IGVudi0+cC0+bnVtYV9ncm91cCA/IGdyb3VwaW1wIDogdGFza2ltcDsKIAlsb25nIG1vdmVpbXAgPSBpbXA7CisJaW50IGRpc3QgPSBlbnYtPmRpc3Q7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKQEAgLTEyMDgsOCArMTI5NSw4IEBACiAJCSAqIGluIGFueSBncm91cCB0aGVuIGxvb2sgb25seSBhdCB0YXNrIHdlaWdodHMuCiAJCSAqLwogCQlpZiAoY3VyLT5udW1hX2dyb3VwID09IGVudi0+cC0+bnVtYV9ncm91cCkgewotCQkJaW1wID0gdGFza2ltcCArIHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5zcmNfbmlkKSAtCi0JCQkgICAgICB0YXNrX3dlaWdodChjdXIsIGVudi0+ZHN0X25pZCk7CisJCQlpbXAgPSB0YXNraW1wICsgdGFza193ZWlnaHQoY3VyLCBlbnYtPnNyY19uaWQsIGRpc3QpIC0KKwkJCSAgICAgIHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5kc3RfbmlkLCBkaXN0KTsKIAkJCS8qCiAJCQkgKiBBZGQgc29tZSBoeXN0ZXJlc2lzIHRvIHByZXZlbnQgc3dhcHBpbmcgdGhlCiAJCQkgKiB0YXNrcyB3aXRoaW4gYSBncm91cCBvdmVyIHRpbnkgZGlmZmVyZW5jZXMuCkBAIC0xMjIzLDExICsxMzEwLDExIEBACiAJCQkgKiBpbnN0ZWFkLgogCQkJICovCiAJCQlpZiAoY3VyLT5udW1hX2dyb3VwKQotCQkJCWltcCArPSBncm91cF93ZWlnaHQoY3VyLCBlbnYtPnNyY19uaWQpIC0KLQkJCQkgICAgICAgZ3JvdXBfd2VpZ2h0KGN1ciwgZW52LT5kc3RfbmlkKTsKKwkJCQlpbXAgKz0gZ3JvdXBfd2VpZ2h0KGN1ciwgZW52LT5zcmNfbmlkLCBkaXN0KSAtCisJCQkJICAgICAgIGdyb3VwX3dlaWdodChjdXIsIGVudi0+ZHN0X25pZCwgZGlzdCk7CiAJCQllbHNlCi0JCQkJaW1wICs9IHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5zcmNfbmlkKSAtCi0JCQkJICAgICAgIHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5kc3RfbmlkKTsKKwkJCQlpbXAgKz0gdGFza193ZWlnaHQoY3VyLCBlbnYtPnNyY19uaWQsIGRpc3QpIC0KKwkJCQkgICAgICAgdGFza193ZWlnaHQoY3VyLCBlbnYtPmRzdF9uaWQsIGRpc3QpOwogCQl9CiAJfQogCkBAIC0xMzI2LDcgKzE0MTMsNyBAQAogCX07CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAJdW5zaWduZWQgbG9uZyB0YXNrd2VpZ2h0LCBncm91cHdlaWdodDsKLQlpbnQgbmlkLCByZXQ7CisJaW50IG5pZCwgcmV0LCBkaXN0OwogCWxvbmcgdGFza2ltcCwgZ3JvdXBpbXA7CiAKIAkvKgpAQCAtMTM1NCwyOSArMTQ0MSw0NSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl0YXNrd2VpZ2h0ID0gdGFza193ZWlnaHQocCwgZW52LnNyY19uaWQpOwotCWdyb3Vwd2VpZ2h0ID0gZ3JvdXBfd2VpZ2h0KHAsIGVudi5zcmNfbmlkKTsKLQl1cGRhdGVfbnVtYV9zdGF0cygmZW52LnNyY19zdGF0cywgZW52LnNyY19uaWQpOwogCWVudi5kc3RfbmlkID0gcC0+bnVtYV9wcmVmZXJyZWRfbmlkOwotCXRhc2tpbXAgPSB0YXNrX3dlaWdodChwLCBlbnYuZHN0X25pZCkgLSB0YXNrd2VpZ2h0OwotCWdyb3VwaW1wID0gZ3JvdXBfd2VpZ2h0KHAsIGVudi5kc3RfbmlkKSAtIGdyb3Vwd2VpZ2h0OworCWRpc3QgPSBlbnYuZGlzdCA9IG5vZGVfZGlzdGFuY2UoZW52LnNyY19uaWQsIGVudi5kc3RfbmlkKTsKKwl0YXNrd2VpZ2h0ID0gdGFza193ZWlnaHQocCwgZW52LnNyY19uaWQsIGRpc3QpOworCWdyb3Vwd2VpZ2h0ID0gZ3JvdXBfd2VpZ2h0KHAsIGVudi5zcmNfbmlkLCBkaXN0KTsKKwl1cGRhdGVfbnVtYV9zdGF0cygmZW52LnNyY19zdGF0cywgZW52LnNyY19uaWQpOworCXRhc2tpbXAgPSB0YXNrX3dlaWdodChwLCBlbnYuZHN0X25pZCwgZGlzdCkgLSB0YXNrd2VpZ2h0OworCWdyb3VwaW1wID0gZ3JvdXBfd2VpZ2h0KHAsIGVudi5kc3RfbmlkLCBkaXN0KSAtIGdyb3Vwd2VpZ2h0OwogCXVwZGF0ZV9udW1hX3N0YXRzKCZlbnYuZHN0X3N0YXRzLCBlbnYuZHN0X25pZCk7CiAKIAkvKiBUcnkgdG8gZmluZCBhIHNwb3Qgb24gdGhlIHByZWZlcnJlZCBuaWQuICovCiAJdGFza19udW1hX2ZpbmRfY3B1KCZlbnYsIHRhc2tpbXAsIGdyb3VwaW1wKTsKIAotCS8qIE5vIHNwYWNlIGF2YWlsYWJsZSBvbiB0aGUgcHJlZmVycmVkIG5pZC4gTG9vayBlbHNld2hlcmUuICovCi0JaWYgKGVudi5iZXN0X2NwdSA9PSAtMSkgeworCS8qCisJICogTG9vayBhdCBvdGhlciBub2RlcyBpbiB0aGVzZSBjYXNlczoKKwkgKiAtIHRoZXJlIGlzIG5vIHNwYWNlIGF2YWlsYWJsZSBvbiB0aGUgcHJlZmVycmVkX25pZAorCSAqIC0gdGhlIHRhc2sgaXMgcGFydCBvZiBhIG51bWFfZ3JvdXAgdGhhdCBpcyBpbnRlcmxlYXZlZCBhY3Jvc3MKKwkgKiAgIG11bHRpcGxlIE5VTUEgbm9kZXM7IGluIG9yZGVyIHRvIGJldHRlciBjb25zb2xpZGF0ZSB0aGUgZ3JvdXAsCisJICogICB3ZSBuZWVkIHRvIGNoZWNrIG90aGVyIGxvY2F0aW9ucy4KKwkgKi8KKwlpZiAoZW52LmJlc3RfY3B1ID09IC0xIHx8IChwLT5udW1hX2dyb3VwICYmCisJCQlub2Rlc193ZWlnaHQocC0+bnVtYV9ncm91cC0+YWN0aXZlX25vZGVzKSA+IDEpKSB7CiAJCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewogCQkJaWYgKG5pZCA9PSBlbnYuc3JjX25pZCB8fCBuaWQgPT0gcC0+bnVtYV9wcmVmZXJyZWRfbmlkKQogCQkJCWNvbnRpbnVlOwogCisJCQlkaXN0ID0gbm9kZV9kaXN0YW5jZShlbnYuc3JjX25pZCwgZW52LmRzdF9uaWQpOworCQkJaWYgKHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZSA9PSBOVU1BX0JBQ0tQTEFORSAmJgorCQkJCQkJZGlzdCAhPSBlbnYuZGlzdCkgeworCQkJCXRhc2t3ZWlnaHQgPSB0YXNrX3dlaWdodChwLCBlbnYuc3JjX25pZCwgZGlzdCk7CisJCQkJZ3JvdXB3ZWlnaHQgPSBncm91cF93ZWlnaHQocCwgZW52LnNyY19uaWQsIGRpc3QpOworCQkJfQorCiAJCQkvKiBPbmx5IGNvbnNpZGVyIG5vZGVzIHdoZXJlIGJvdGggdGFzayBhbmQgZ3JvdXBzIGJlbmVmaXQgKi8KLQkJCXRhc2tpbXAgPSB0YXNrX3dlaWdodChwLCBuaWQpIC0gdGFza3dlaWdodDsKLQkJCWdyb3VwaW1wID0gZ3JvdXBfd2VpZ2h0KHAsIG5pZCkgLSBncm91cHdlaWdodDsKKwkJCXRhc2tpbXAgPSB0YXNrX3dlaWdodChwLCBuaWQsIGRpc3QpIC0gdGFza3dlaWdodDsKKwkJCWdyb3VwaW1wID0gZ3JvdXBfd2VpZ2h0KHAsIG5pZCwgZGlzdCkgLSBncm91cHdlaWdodDsKIAkJCWlmICh0YXNraW1wIDwgMCAmJiBncm91cGltcCA8IDApCiAJCQkJY29udGludWU7CiAKKwkJCWVudi5kaXN0ID0gZGlzdDsKIAkJCWVudi5kc3RfbmlkID0gbmlkOwogCQkJdXBkYXRlX251bWFfc3RhdHMoJmVudi5kc3Rfc3RhdHMsIGVudi5kc3RfbmlkKTsKIAkJCXRhc2tfbnVtYV9maW5kX2NwdSgmZW52LCB0YXNraW1wLCBncm91cGltcCk7CkBAIC0xNDMxLDcgKzE1MzQsNyBAQAogCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwgPSBIWjsKIAogCS8qIFRoaXMgdGFzayBoYXMgbm8gTlVNQSBmYXVsdCBzdGF0aXN0aWNzIHlldCAqLwotCWlmICh1bmxpa2VseShwLT5udW1hX3ByZWZlcnJlZF9uaWQgPT0gLTEgfHwgIXAtPm51bWFfZmF1bHRzX21lbW9yeSkpCisJaWYgKHVubGlrZWx5KHAtPm51bWFfcHJlZmVycmVkX25pZCA9PSAtMSB8fCAhcC0+bnVtYV9mYXVsdHMpKQogCQlyZXR1cm47CiAKIAkvKiBQZXJpb2RpY2FsbHkgcmV0cnkgbWlncmF0aW5nIHRoZSB0YXNrIHRvIHRoZSBwcmVmZXJyZWQgbm9kZSAqLwpAQCAtMTU4MCw2ICsxNjgzLDkyIEBACiAJcmV0dXJuIGRlbHRhOwogfQogCisvKgorICogRGV0ZXJtaW5lIHRoZSBwcmVmZXJyZWQgbmlkIGZvciBhIHRhc2sgaW4gYSBudW1hX2dyb3VwLiBUaGlzIG5lZWRzIHRvCisgKiBiZSBkb25lIGluIGEgd2F5IHRoYXQgcHJvZHVjZXMgY29uc2lzdGVudCByZXN1bHRzIHdpdGggZ3JvdXBfd2VpZ2h0LAorICogb3RoZXJ3aXNlIHdvcmtsb2FkcyBtaWdodCBub3QgY29udmVyZ2UuCisgKi8KK3N0YXRpYyBpbnQgcHJlZmVycmVkX2dyb3VwX25pZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWQpCit7CisJbm9kZW1hc2tfdCBub2RlczsKKwlpbnQgZGlzdDsKKworCS8qIERpcmVjdCBjb25uZWN0aW9ucyBiZXR3ZWVuIGFsbCBOVU1BIG5vZGVzLiAqLworCWlmIChzY2hlZF9udW1hX3RvcG9sb2d5X3R5cGUgPT0gTlVNQV9ESVJFQ1QpCisJCXJldHVybiBuaWQ7CisKKwkvKgorCSAqIE9uIGEgc3lzdGVtIHdpdGggZ2x1ZWxlc3MgbWVzaCBOVU1BIHRvcG9sb2d5LCBncm91cF93ZWlnaHQKKwkgKiBzY29yZXMgbm9kZXMgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgTlVNQSBoaW50aW5nIGZhdWx0cyBvbgorCSAqIGJvdGggdGhlIG5vZGUgaXRzZWxmLCBhbmQgb24gbmVhcmJ5IG5vZGVzLgorCSAqLworCWlmIChzY2hlZF9udW1hX3RvcG9sb2d5X3R5cGUgPT0gTlVNQV9HTFVFTEVTU19NRVNIKSB7CisJCXVuc2lnbmVkIGxvbmcgc2NvcmUsIG1heF9zY29yZSA9IDA7CisJCWludCBub2RlLCBtYXhfbm9kZSA9IG5pZDsKKworCQlkaXN0ID0gc2NoZWRfbWF4X251bWFfZGlzdGFuY2U7CisKKwkJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQkJc2NvcmUgPSBncm91cF93ZWlnaHQocCwgbm9kZSwgZGlzdCk7CisJCQlpZiAoc2NvcmUgPiBtYXhfc2NvcmUpIHsKKwkJCQltYXhfc2NvcmUgPSBzY29yZTsKKwkJCQltYXhfbm9kZSA9IG5vZGU7CisJCQl9CisJCX0KKwkJcmV0dXJuIG1heF9ub2RlOworCX0KKworCS8qCisJICogRmluZGluZyB0aGUgcHJlZmVycmVkIG5pZCBpbiBhIHN5c3RlbSB3aXRoIE5VTUEgYmFja3BsYW5lCisJICogaW50ZXJjb25uZWN0IHRvcG9sb2d5IGlzIG1vcmUgaW52b2x2ZWQuIFRoZSBnb2FsIGlzIHRvIGxvY2F0ZQorCSAqIHRhc2tzIGZyb20gbnVtYV9ncm91cHMgbmVhciBlYWNoIG90aGVyIGluIHRoZSBzeXN0ZW0sIGFuZAorCSAqIHVudGFuZ2xlIHdvcmtsb2FkcyBmcm9tIGRpZmZlcmVudCBzaWRlcyBvZiB0aGUgc3lzdGVtLiBUaGlzIHJlcXVpcmVzCisJICogc2VhcmNoaW5nIGRvd24gdGhlIGhpZXJhcmNoeSBvZiBub2RlIGdyb3VwcywgcmVjdXJzaXZlbHkgc2VhcmNoaW5nCisJICogaW5zaWRlIHRoZSBoaWdoZXN0IHNjb3JpbmcgZ3JvdXAgb2Ygbm9kZXMuIFRoZSBub2RlbWFzayB0cmlja3MKKwkgKiBrZWVwIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBzZWFyY2ggZG93bi4KKwkgKi8KKwlub2RlcyA9IG5vZGVfb25saW5lX21hcDsKKwlmb3IgKGRpc3QgPSBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsgZGlzdCA+IExPQ0FMX0RJU1RBTkNFOyBkaXN0LS0pIHsKKwkJdW5zaWduZWQgbG9uZyBtYXhfZmF1bHRzID0gMDsKKwkJbm9kZW1hc2tfdCBtYXhfZ3JvdXA7CisJCWludCBhLCBiOworCisJCS8qIEFyZSB0aGVyZSBub2RlcyBhdCB0aGlzIGRpc3RhbmNlIGZyb20gZWFjaCBvdGhlcj8gKi8KKwkJaWYgKCFmaW5kX251bWFfZGlzdGFuY2UoZGlzdCkpCisJCQljb250aW51ZTsKKworCQlmb3JfZWFjaF9ub2RlX21hc2soYSwgbm9kZXMpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmF1bHRzID0gMDsKKwkJCW5vZGVtYXNrX3QgdGhpc19ncm91cDsKKwkJCW5vZGVzX2NsZWFyKHRoaXNfZ3JvdXApOworCisJCQkvKiBTdW0gZ3JvdXAncyBOVU1BIGZhdWx0czsgaW5jbHVkZXMgYT09YiBjYXNlLiAqLworCQkJZm9yX2VhY2hfbm9kZV9tYXNrKGIsIG5vZGVzKSB7CisJCQkJaWYgKG5vZGVfZGlzdGFuY2UoYSwgYikgPCBkaXN0KSB7CisJCQkJCWZhdWx0cyArPSBncm91cF9mYXVsdHMocCwgYik7CisJCQkJCW5vZGVfc2V0KGIsIHRoaXNfZ3JvdXApOworCQkJCQlub2RlX2NsZWFyKGIsIG5vZGVzKTsKKwkJCQl9CisJCQl9CisKKwkJCS8qIFJlbWVtYmVyIHRoZSB0b3AgZ3JvdXAuICovCisJCQlpZiAoZmF1bHRzID4gbWF4X2ZhdWx0cykgeworCQkJCW1heF9mYXVsdHMgPSBmYXVsdHM7CisJCQkJbWF4X2dyb3VwID0gdGhpc19ncm91cDsKKwkJCQkvKgorCQkJCSAqIHN1YnRsZTogYXQgdGhlIHNtYWxsZXN0IGRpc3RhbmNlIHRoZXJlIGlzCisJCQkJICoganVzdCBvbmUgbm9kZSBsZWZ0IGluIGVhY2ggImdyb3VwIiwgdGhlCisJCQkJICogd2lubmVyIGlzIHRoZSBwcmVmZXJyZWQgbmlkLgorCQkJCSAqLworCQkJCW5pZCA9IGE7CisJCQl9CisJCX0KKwkJLyogTmV4dCByb3VuZCwgZXZhbHVhdGUgdGhlIG5vZGVzIHdpdGhpbiBtYXhfZ3JvdXAuICovCisJCW5vZGVzID0gbWF4X2dyb3VwOworCX0KKwlyZXR1cm4gbmlkOworfQorCiBzdGF0aWMgdm9pZCB0YXNrX251bWFfcGxhY2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlpbnQgc2VxLCBuaWQsIG1heF9uaWQgPSAtMSwgbWF4X2dyb3VwX25pZCA9IC0xOwpAQCAtMTYwNywxOCArMTc5NiwyMyBAQAogCiAJLyogRmluZCB0aGUgbm9kZSB3aXRoIHRoZSBoaWdoZXN0IG51bWJlciBvZiBmYXVsdHMgKi8KIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKKwkJLyogS2VlcCB0cmFjayBvZiB0aGUgb2Zmc2V0cyBpbiBudW1hX2ZhdWx0cyBhcnJheSAqLworCQlpbnQgbWVtX2lkeCwgbWVtYnVmX2lkeCwgY3B1X2lkeCwgY3B1YnVmX2lkeDsKIAkJdW5zaWduZWQgbG9uZyBmYXVsdHMgPSAwLCBncm91cF9mYXVsdHMgPSAwOwotCQlpbnQgcHJpdiwgaTsKKwkJaW50IHByaXY7CiAKIAkJZm9yIChwcml2ID0gMDsgcHJpdiA8IE5SX05VTUFfSElOVF9GQVVMVF9UWVBFUzsgcHJpdisrKSB7CiAJCQlsb25nIGRpZmYsIGZfZGlmZiwgZl93ZWlnaHQ7CiAKLQkJCWkgPSB0YXNrX2ZhdWx0c19pZHgobmlkLCBwcml2KTsKKwkJCW1lbV9pZHggPSB0YXNrX2ZhdWx0c19pZHgoTlVNQV9NRU0sIG5pZCwgcHJpdik7CisJCQltZW1idWZfaWR4ID0gdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNQlVGLCBuaWQsIHByaXYpOworCQkJY3B1X2lkeCA9IHRhc2tfZmF1bHRzX2lkeChOVU1BX0NQVSwgbmlkLCBwcml2KTsKKwkJCWNwdWJ1Zl9pZHggPSB0YXNrX2ZhdWx0c19pZHgoTlVNQV9DUFVCVUYsIG5pZCwgcHJpdik7CiAKIAkJCS8qIERlY2F5IGV4aXN0aW5nIHdpbmRvdywgY29weSBmYXVsdHMgc2luY2UgbGFzdCBzY2FuICovCi0JCQlkaWZmID0gcC0+bnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeVtpXSAtIHAtPm51bWFfZmF1bHRzX21lbW9yeVtpXSAvIDI7Ci0JCQlmYXVsdF90eXBlc1twcml2XSArPSBwLT5udW1hX2ZhdWx0c19idWZmZXJfbWVtb3J5W2ldOwotCQkJcC0+bnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeVtpXSA9IDA7CisJCQlkaWZmID0gcC0+bnVtYV9mYXVsdHNbbWVtYnVmX2lkeF0gLSBwLT5udW1hX2ZhdWx0c1ttZW1faWR4XSAvIDI7CisJCQlmYXVsdF90eXBlc1twcml2XSArPSBwLT5udW1hX2ZhdWx0c1ttZW1idWZfaWR4XTsKKwkJCXAtPm51bWFfZmF1bHRzW21lbWJ1Zl9pZHhdID0gMDsKIAogCQkJLyoKIAkJCSAqIE5vcm1hbGl6ZSB0aGUgZmF1bHRzX2Zyb20sIHNvIGFsbCB0YXNrcyBpbiBhIGdyb3VwCkBAIC0xNjI4LDIxICsxODIyLDI3IEBACiAJCQkgKiBmYXVsdHMgYXJlIGxlc3MgaW1wb3J0YW50LgogCQkJICovCiAJCQlmX3dlaWdodCA9IGRpdjY0X3U2NChydW50aW1lIDw8IDE2LCBwZXJpb2QgKyAxKTsKLQkJCWZfd2VpZ2h0ID0gKGZfd2VpZ2h0ICogcC0+bnVtYV9mYXVsdHNfYnVmZmVyX2NwdVtpXSkgLworCQkJZl93ZWlnaHQgPSAoZl93ZWlnaHQgKiBwLT5udW1hX2ZhdWx0c1tjcHVidWZfaWR4XSkgLwogCQkJCSAgICh0b3RhbF9mYXVsdHMgKyAxKTsKLQkJCWZfZGlmZiA9IGZfd2VpZ2h0IC0gcC0+bnVtYV9mYXVsdHNfY3B1W2ldIC8gMjsKLQkJCXAtPm51bWFfZmF1bHRzX2J1ZmZlcl9jcHVbaV0gPSAwOworCQkJZl9kaWZmID0gZl93ZWlnaHQgLSBwLT5udW1hX2ZhdWx0c1tjcHVfaWR4XSAvIDI7CisJCQlwLT5udW1hX2ZhdWx0c1tjcHVidWZfaWR4XSA9IDA7CiAKLQkJCXAtPm51bWFfZmF1bHRzX21lbW9yeVtpXSArPSBkaWZmOwotCQkJcC0+bnVtYV9mYXVsdHNfY3B1W2ldICs9IGZfZGlmZjsKLQkJCWZhdWx0cyArPSBwLT5udW1hX2ZhdWx0c19tZW1vcnlbaV07CisJCQlwLT5udW1hX2ZhdWx0c1ttZW1faWR4XSArPSBkaWZmOworCQkJcC0+bnVtYV9mYXVsdHNbY3B1X2lkeF0gKz0gZl9kaWZmOworCQkJZmF1bHRzICs9IHAtPm51bWFfZmF1bHRzW21lbV9pZHhdOwogCQkJcC0+dG90YWxfbnVtYV9mYXVsdHMgKz0gZGlmZjsKIAkJCWlmIChwLT5udW1hX2dyb3VwKSB7Ci0JCQkJLyogc2FmZSBiZWNhdXNlIHdlIGNhbiBvbmx5IGNoYW5nZSBvdXIgb3duIGdyb3VwICovCi0JCQkJcC0+bnVtYV9ncm91cC0+ZmF1bHRzW2ldICs9IGRpZmY7Ci0JCQkJcC0+bnVtYV9ncm91cC0+ZmF1bHRzX2NwdVtpXSArPSBmX2RpZmY7CisJCQkJLyoKKwkJCQkgKiBzYWZlIGJlY2F1c2Ugd2UgY2FuIG9ubHkgY2hhbmdlIG91ciBvd24gZ3JvdXAKKwkJCQkgKgorCQkJCSAqIG1lbV9pZHggcmVwcmVzZW50cyB0aGUgb2Zmc2V0IGZvciBhIGdpdmVuCisJCQkJICogbmlkIGFuZCBwcml2IGluIGEgc3BlY2lmaWMgcmVnaW9uIGJlY2F1c2UgaXQKKwkJCQkgKiBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBudW1hX2ZhdWx0cyBhcnJheS4KKwkJCQkgKi8KKwkJCQlwLT5udW1hX2dyb3VwLT5mYXVsdHNbbWVtX2lkeF0gKz0gZGlmZjsKKwkJCQlwLT5udW1hX2dyb3VwLT5mYXVsdHNfY3B1W21lbV9pZHhdICs9IGZfZGlmZjsKIAkJCQlwLT5udW1hX2dyb3VwLT50b3RhbF9mYXVsdHMgKz0gZGlmZjsKLQkJCQlncm91cF9mYXVsdHMgKz0gcC0+bnVtYV9ncm91cC0+ZmF1bHRzW2ldOworCQkJCWdyb3VwX2ZhdWx0cyArPSBwLT5udW1hX2dyb3VwLT5mYXVsdHNbbWVtX2lkeF07CiAJCQl9CiAJCX0KIApAQCAtMTY2Miw3ICsxODYyLDcgQEAKIAlpZiAocC0+bnVtYV9ncm91cCkgewogCQl1cGRhdGVfbnVtYV9hY3RpdmVfbm9kZV9tYXNrKHAtPm51bWFfZ3JvdXApOwogCQlzcGluX3VubG9ja19pcnEoZ3JvdXBfbG9jayk7Ci0JCW1heF9uaWQgPSBtYXhfZ3JvdXBfbmlkOworCQltYXhfbmlkID0gcHJlZmVycmVkX2dyb3VwX25pZChwLCBtYXhfZ3JvdXBfbmlkKTsKIAl9CiAKIAlpZiAobWF4X2ZhdWx0cykgewpAQCAtMTcwNSw3ICsxOTA1LDYgQEAKIAogCQlhdG9taWNfc2V0KCZncnAtPnJlZmNvdW50LCAxKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmdycC0+bG9jayk7Ci0JCUlOSVRfTElTVF9IRUFEKCZncnAtPnRhc2tfbGlzdCk7CiAJCWdycC0+Z2lkID0gcC0+cGlkOwogCQkvKiBTZWNvbmQgaGFsZiBvZiB0aGUgYXJyYXkgdHJhY2tzIG5pZHMgd2hlcmUgZmF1bHRzIGhhcHBlbiAqLwogCQlncnAtPmZhdWx0c19jcHUgPSBncnAtPmZhdWx0cyArIE5SX05VTUFfSElOVF9GQVVMVF9UWVBFUyAqCkBAIC0xNzE0LDExICsxOTEzLDEwIEBACiAJCW5vZGVfc2V0KHRhc2tfbm9kZShjdXJyZW50KSwgZ3JwLT5hY3RpdmVfbm9kZXMpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBOUl9OVU1BX0hJTlRfRkFVTFRfU1RBVFMgKiBucl9ub2RlX2lkczsgaSsrKQotCQkJZ3JwLT5mYXVsdHNbaV0gPSBwLT5udW1hX2ZhdWx0c19tZW1vcnlbaV07CisJCQlncnAtPmZhdWx0c1tpXSA9IHAtPm51bWFfZmF1bHRzW2ldOwogCiAJCWdycC0+dG90YWxfZmF1bHRzID0gcC0+dG90YWxfbnVtYV9mYXVsdHM7CiAKLQkJbGlzdF9hZGQoJnAtPm51bWFfZW50cnksICZncnAtPnRhc2tfbGlzdCk7CiAJCWdycC0+bnJfdGFza3MrKzsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHAtPm51bWFfZ3JvdXAsIGdycCk7CiAJfQpAQCAtMTc3MywxMyArMTk3MSwxMiBAQAogCWRvdWJsZV9sb2NrX2lycSgmbXlfZ3JwLT5sb2NrLCAmZ3JwLT5sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9OVU1BX0hJTlRfRkFVTFRfU1RBVFMgKiBucl9ub2RlX2lkczsgaSsrKSB7Ci0JCW15X2dycC0+ZmF1bHRzW2ldIC09IHAtPm51bWFfZmF1bHRzX21lbW9yeVtpXTsKLQkJZ3JwLT5mYXVsdHNbaV0gKz0gcC0+bnVtYV9mYXVsdHNfbWVtb3J5W2ldOworCQlteV9ncnAtPmZhdWx0c1tpXSAtPSBwLT5udW1hX2ZhdWx0c1tpXTsKKwkJZ3JwLT5mYXVsdHNbaV0gKz0gcC0+bnVtYV9mYXVsdHNbaV07CiAJfQogCW15X2dycC0+dG90YWxfZmF1bHRzIC09IHAtPnRvdGFsX251bWFfZmF1bHRzOwogCWdycC0+dG90YWxfZmF1bHRzICs9IHAtPnRvdGFsX251bWFfZmF1bHRzOwogCi0JbGlzdF9tb3ZlKCZwLT5udW1hX2VudHJ5LCAmZ3JwLT50YXNrX2xpc3QpOwogCW15X2dycC0+bnJfdGFza3MtLTsKIAlncnAtPm5yX3Rhc2tzKys7CiAKQEAgLTE3OTksMjcgKzE5OTYsMjMgQEAKIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXN0cnVjdCBudW1hX2dyb3VwICpncnAgPSBwLT5udW1hX2dyb3VwOwotCXZvaWQgKm51bWFfZmF1bHRzID0gcC0+bnVtYV9mYXVsdHNfbWVtb3J5OworCXZvaWQgKm51bWFfZmF1bHRzID0gcC0+bnVtYV9mYXVsdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAogCWlmIChncnApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmdycC0+bG9jaywgZmxhZ3MpOwogCQlmb3IgKGkgPSAwOyBpIDwgTlJfTlVNQV9ISU5UX0ZBVUxUX1NUQVRTICogbnJfbm9kZV9pZHM7IGkrKykKLQkJCWdycC0+ZmF1bHRzW2ldIC09IHAtPm51bWFfZmF1bHRzX21lbW9yeVtpXTsKKwkJCWdycC0+ZmF1bHRzW2ldIC09IHAtPm51bWFfZmF1bHRzW2ldOwogCQlncnAtPnRvdGFsX2ZhdWx0cyAtPSBwLT50b3RhbF9udW1hX2ZhdWx0czsKIAotCQlsaXN0X2RlbCgmcC0+bnVtYV9lbnRyeSk7CiAJCWdycC0+bnJfdGFza3MtLTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JwLT5sb2NrLCBmbGFncyk7CiAJCVJDVV9JTklUX1BPSU5URVIocC0+bnVtYV9ncm91cCwgTlVMTCk7CiAJCXB1dF9udW1hX2dyb3VwKGdycCk7CiAJfQogCi0JcC0+bnVtYV9mYXVsdHNfbWVtb3J5ID0gTlVMTDsKLQlwLT5udW1hX2ZhdWx0c19idWZmZXJfbWVtb3J5ID0gTlVMTDsKLQlwLT5udW1hX2ZhdWx0c19jcHU9IE5VTEw7Ci0JcC0+bnVtYV9mYXVsdHNfYnVmZmVyX2NwdSA9IE5VTEw7CisJcC0+bnVtYV9mYXVsdHMgPSBOVUxMOwogCWtmcmVlKG51bWFfZmF1bHRzKTsKIH0KIApAQCAtMTg0MiwyNCArMjAzNSwxNCBAQAogCQlyZXR1cm47CiAKIAkvKiBBbGxvY2F0ZSBidWZmZXIgdG8gdHJhY2sgZmF1bHRzIG9uIGEgcGVyLW5vZGUgYmFzaXMgKi8KLQlpZiAodW5saWtlbHkoIXAtPm51bWFfZmF1bHRzX21lbW9yeSkpIHsKLQkJaW50IHNpemUgPSBzaXplb2YoKnAtPm51bWFfZmF1bHRzX21lbW9yeSkgKgorCWlmICh1bmxpa2VseSghcC0+bnVtYV9mYXVsdHMpKSB7CisJCWludCBzaXplID0gc2l6ZW9mKCpwLT5udW1hX2ZhdWx0cykgKgogCQkJICAgTlJfTlVNQV9ISU5UX0ZBVUxUX0JVQ0tFVFMgKiBucl9ub2RlX2lkczsKIAotCQlwLT5udW1hX2ZhdWx0c19tZW1vcnkgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUx8X19HRlBfTk9XQVJOKTsKLQkJaWYgKCFwLT5udW1hX2ZhdWx0c19tZW1vcnkpCisJCXAtPm51bWFfZmF1bHRzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMfF9fR0ZQX05PV0FSTik7CisJCWlmICghcC0+bnVtYV9mYXVsdHMpCiAJCQlyZXR1cm47CiAKLQkJQlVHX09OKHAtPm51bWFfZmF1bHRzX2J1ZmZlcl9tZW1vcnkpOwotCQkvKgotCQkgKiBUaGUgYXZlcmFnZWQgc3RhdGlzdGljcywgc2hhcmVkICYgcHJpdmF0ZSwgbWVtb3J5ICYgY3B1LAotCQkgKiBvY2N1cHkgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGFycmF5LiBUaGUgc2Vjb25kIGhhbGYgb2YgdGhlCi0JCSAqIGFycmF5IGlzIGZvciBjdXJyZW50IGNvdW50ZXJzLCB3aGljaCBhcmUgYXZlcmFnZWQgaW50byB0aGUKLQkJICogZmlyc3Qgc2V0IGJ5IHRhc2tfbnVtYV9wbGFjZW1lbnQuCi0JCSAqLwotCQlwLT5udW1hX2ZhdWx0c19jcHUgPSBwLT5udW1hX2ZhdWx0c19tZW1vcnkgKyAoMiAqIG5yX25vZGVfaWRzKTsKLQkJcC0+bnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeSA9IHAtPm51bWFfZmF1bHRzX21lbW9yeSArICg0ICogbnJfbm9kZV9pZHMpOwotCQlwLT5udW1hX2ZhdWx0c19idWZmZXJfY3B1ID0gcC0+bnVtYV9mYXVsdHNfbWVtb3J5ICsgKDYgKiBucl9ub2RlX2lkcyk7CiAJCXAtPnRvdGFsX251bWFfZmF1bHRzID0gMDsKIAkJbWVtc2V0KHAtPm51bWFfZmF1bHRzX2xvY2FsaXR5LCAwLCBzaXplb2YocC0+bnVtYV9mYXVsdHNfbG9jYWxpdHkpKTsKIAl9CkBAIC0xODk5LDggKzIwODIsOCBAQAogCWlmIChtaWdyYXRlZCkKIAkJcC0+bnVtYV9wYWdlc19taWdyYXRlZCArPSBwYWdlczsKIAotCXAtPm51bWFfZmF1bHRzX2J1ZmZlcl9tZW1vcnlbdGFza19mYXVsdHNfaWR4KG1lbV9ub2RlLCBwcml2KV0gKz0gcGFnZXM7Ci0JcC0+bnVtYV9mYXVsdHNfYnVmZmVyX2NwdVt0YXNrX2ZhdWx0c19pZHgoY3B1X25vZGUsIHByaXYpXSArPSBwYWdlczsKKwlwLT5udW1hX2ZhdWx0c1t0YXNrX2ZhdWx0c19pZHgoTlVNQV9NRU1CVUYsIG1lbV9ub2RlLCBwcml2KV0gKz0gcGFnZXM7CisJcC0+bnVtYV9mYXVsdHNbdGFza19mYXVsdHNfaWR4KE5VTUFfQ1BVQlVGLCBjcHVfbm9kZSwgcHJpdildICs9IHBhZ2VzOwogCXAtPm51bWFfZmF1bHRzX2xvY2FsaXR5W2xvY2FsXSArPSBwYWdlczsKIH0KIApAQCAtNDQ2OSw3ICs0NjUyLDcgQEAKIAkJCQlsYXRlc3RfaWRsZV90aW1lc3RhbXAgPSBycS0+aWRsZV9zdGFtcDsKIAkJCQlzaGFsbG93ZXN0X2lkbGVfY3B1ID0gaTsKIAkJCX0KLQkJfSBlbHNlIHsKKwkJfSBlbHNlIGlmIChzaGFsbG93ZXN0X2lkbGVfY3B1ID09IC0xKSB7CiAJCQlsb2FkID0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKIAkJCWlmIChsb2FkIDwgbWluX2xvYWQgfHwgKGxvYWQgPT0gbWluX2xvYWQgJiYgaSA9PSB0aGlzX2NwdSkpIHsKIAkJCQltaW5fbG9hZCA9IGxvYWQ7CkBAIC00NTQ3LDkgKzQ3MzAsNiBAQAogCWludCB3YW50X2FmZmluZSA9IDA7CiAJaW50IHN5bmMgPSB3YWtlX2ZsYWdzICYgV0ZfU1lOQzsKIAotCWlmIChwLT5ucl9jcHVzX2FsbG93ZWQgPT0gMSkKLQkJcmV0dXJuIHByZXZfY3B1OwotCiAJaWYgKHNkX2ZsYWcgJiBTRF9CQUxBTkNFX1dBS0UpCiAJCXdhbnRfYWZmaW5lID0gY3B1bWFza190ZXN0X2NwdShjcHUsIHRza19jcHVzX2FsbG93ZWQocCkpOwogCkBAIC01MTg5LDcgKzUzNjksNyBAQAogCXN0cnVjdCBudW1hX2dyb3VwICpudW1hX2dyb3VwID0gcmN1X2RlcmVmZXJlbmNlKHAtPm51bWFfZ3JvdXApOwogCWludCBzcmNfbmlkLCBkc3RfbmlkOwogCi0JaWYgKCFzY2hlZF9mZWF0KE5VTUFfRkFWT1VSX0hJR0hFUikgfHwgIXAtPm51bWFfZmF1bHRzX21lbW9yeSB8fAorCWlmICghc2NoZWRfZmVhdChOVU1BX0ZBVk9VUl9ISUdIRVIpIHx8ICFwLT5udW1hX2ZhdWx0cyB8fAogCSAgICAhKGVudi0+c2QtPmZsYWdzICYgU0RfTlVNQSkpIHsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTUyMjgsNyArNTQwOCw3IEBACiAJaWYgKCFzY2hlZF9mZWF0KE5VTUEpIHx8ICFzY2hlZF9mZWF0KE5VTUFfUkVTSVNUX0xPV0VSKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKCFwLT5udW1hX2ZhdWx0c19tZW1vcnkgfHwgIShlbnYtPnNkLT5mbGFncyAmIFNEX05VTUEpKQorCWlmICghcC0+bnVtYV9mYXVsdHMgfHwgIShlbnYtPnNkLT5mbGFncyAmIFNEX05VTUEpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlzcmNfbmlkID0gY3B1X3RvX25vZGUoZW52LT5zcmNfY3B1KTsKQEAgLTYxNzIsOCArNjM1MiwxMCBAQAogCQkgKiB3aXRoIGEgbGFyZ2Ugd2VpZ2h0IHRhc2sgb3V0d2VpZ2hzIHRoZSB0YXNrcyBvbiB0aGUgc3lzdGVtKS4KIAkJICovCiAJCWlmIChwcmVmZXJfc2libGluZyAmJiBzZHMtPmxvY2FsICYmCi0JCSAgICBzZHMtPmxvY2FsX3N0YXQuZ3JvdXBfaGFzX2ZyZWVfY2FwYWNpdHkpCisJCSAgICBzZHMtPmxvY2FsX3N0YXQuZ3JvdXBfaGFzX2ZyZWVfY2FwYWNpdHkpIHsKIAkJCXNncy0+Z3JvdXBfY2FwYWNpdHlfZmFjdG9yID0gbWluKHNncy0+Z3JvdXBfY2FwYWNpdHlfZmFjdG9yLCAxVSk7CisJCQlzZ3MtPmdyb3VwX3R5cGUgPSBncm91cF9jbGFzc2lmeShzZywgc2dzKTsKKwkJfQogCiAJCWlmICh1cGRhdGVfc2RfcGlja19idXNpZXN0KGVudiwgc2RzLCBzZywgc2dzKSkgewogCQkJc2RzLT5idXNpZXN0ID0gc2c7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvcnQuYyBiL2tlcm5lbC9zY2hlZC9ydC5jCmluZGV4IDIwYmNhMzkuLmVlMTVmNWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZC9ydC5jCkBAIC0xMzAxLDkgKzEzMDEsNiBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycjsKIAlzdHJ1Y3QgcnEgKnJxOwogCi0JaWYgKHAtPm5yX2NwdXNfYWxsb3dlZCA9PSAxKQotCQlnb3RvIG91dDsKLQogCS8qIEZvciBhbnl0aGluZyBidXQgd2FrZSB1cHMsIGp1c3QgcmV0dXJuIHRoZSB0YXNrX2NwdSAqLwogCWlmIChzZF9mbGFnICE9IFNEX0JBTEFOQ0VfV0FLRSAmJiBzZF9mbGFnICE9IFNEX0JBTEFOQ0VfRk9SSykKIAkJZ290byBvdXQ7CkBAIC0xMzUxLDE2ICsxMzQ4LDIyIEBACiAKIHN0YXRpYyB2b2lkIGNoZWNrX3ByZWVtcHRfZXF1YWxfcHJpbyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JaWYgKHJxLT5jdXJyLT5ucl9jcHVzX2FsbG93ZWQgPT0gMSkKKwkvKgorCSAqIEN1cnJlbnQgY2FuJ3QgYmUgbWlncmF0ZWQsIHVzZWxlc3MgdG8gcmVzY2hlZHVsZSwKKwkgKiBsZXQncyBob3BlIHAgY2FuIG1vdmUgb3V0LgorCSAqLworCWlmIChycS0+Y3Vyci0+bnJfY3B1c19hbGxvd2VkID09IDEgfHwKKwkgICAgIWNwdXByaV9maW5kKCZycS0+cmQtPmNwdXByaSwgcnEtPmN1cnIsIE5VTEwpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIHAgaXMgbWlncmF0YWJsZSwgc28gbGV0J3Mgbm90IHNjaGVkdWxlIGl0IGFuZAorCSAqIHNlZSBpZiBpdCBpcyBwdXNoZWQgb3IgcHVsbGVkIHNvbWV3aGVyZSBlbHNlLgorCSAqLwogCWlmIChwLT5ucl9jcHVzX2FsbG93ZWQgIT0gMQogCSAgICAmJiBjcHVwcmlfZmluZCgmcnEtPnJkLT5jcHVwcmksIHAsIE5VTEwpKQogCQlyZXR1cm47CiAKLQlpZiAoIWNwdXByaV9maW5kKCZycS0+cmQtPmNwdXByaSwgcnEtPmN1cnIsIE5VTEwpKQotCQlyZXR1cm47Ci0KIAkvKgogCSAqIFRoZXJlIGFwcGVhcnMgdG8gYmUgb3RoZXIgY3B1cyB0aGF0IGNhbiBhY2NlcHQKIAkgKiBjdXJyZW50IGFuZCBub25lIHRvIHJ1biAncCcsIHNvIGxldHMgcmVzY2hlZHVsZQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaAppbmRleCAyZGY4ZWYwLi45YTJhNDVjIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaAorKysgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaApAQCAtMTc2LDYgKzE3NiwyNSBAQAogCXU2NCBidywgdG90YWxfYnc7CiB9OwogCitzdGF0aWMgaW5saW5lCit2b2lkIF9fZGxfY2xlYXIoc3RydWN0IGRsX2J3ICpkbF9iLCB1NjQgdHNrX2J3KQoreworCWRsX2ItPnRvdGFsX2J3IC09IHRza19idzsKK30KKworc3RhdGljIGlubGluZQordm9pZCBfX2RsX2FkZChzdHJ1Y3QgZGxfYncgKmRsX2IsIHU2NCB0c2tfYncpCit7CisJZGxfYi0+dG90YWxfYncgKz0gdHNrX2J3OworfQorCitzdGF0aWMgaW5saW5lCitib29sIF9fZGxfb3ZlcmZsb3coc3RydWN0IGRsX2J3ICpkbF9iLCBpbnQgY3B1cywgdTY0IG9sZF9idywgdTY0IG5ld19idykKK3sKKwlyZXR1cm4gZGxfYi0+YncgIT0gLTEgJiYKKwkgICAgICAgZGxfYi0+YncgKiBjcHVzIDwgZGxfYi0+dG90YWxfYncgLSBvbGRfYncgKyBuZXdfYnc7Cit9CisKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggc2NoZWRfZG9tYWluc19tdXRleDsKIAogI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKQEAgLTY3OCw3ICs2OTcsMjUgQEAKIAlyZXR1cm4gcnEtPmNsb2NrX3Rhc2s7CiB9CiAKKyNpZmRlZiBDT05GSUdfTlVNQQorZW51bSBudW1hX3RvcG9sb2d5X3R5cGUgeworCU5VTUFfRElSRUNULAorCU5VTUFfR0xVRUxFU1NfTUVTSCwKKwlOVU1BX0JBQ0tQTEFORSwKK307CitleHRlcm4gZW51bSBudW1hX3RvcG9sb2d5X3R5cGUgc2NoZWRfbnVtYV90b3BvbG9neV90eXBlOworZXh0ZXJuIGludCBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsKK2V4dGVybiBib29sIGZpbmRfbnVtYV9kaXN0YW5jZShpbnQgZGlzdGFuY2UpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKKy8qIFRoZSByZWdpb25zIGluIG51bWFfZmF1bHRzIGFycmF5IGZyb20gdGFza19zdHJ1Y3QgKi8KK2VudW0gbnVtYV9mYXVsdHNfc3RhdHMgeworCU5VTUFfTUVNID0gMCwKKwlOVU1BX0NQVSwKKwlOVU1BX01FTUJVRiwKKwlOVU1BX0NQVUJVRgorfTsKIGV4dGVybiB2b2lkIHNjaGVkX3NldG51bWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbm9kZSk7CiBleHRlcm4gaW50IG1pZ3JhdGVfdGFza190byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpOwogZXh0ZXJuIGludCBtaWdyYXRlX3N3YXAoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKQEAgLTExMjcsNiArMTE2NCwxMSBAQAogCXZvaWQgKCp0YXNrX2ZvcmspIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCXZvaWQgKCp0YXNrX2RlYWQpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCisJLyoKKwkgKiBUaGUgc3dpdGNoZWRfZnJvbSgpIGNhbGwgaXMgYWxsb3dlZCB0byBkcm9wIHJxLT5sb2NrLCB0aGVyZWZvcmUgd2UKKwkgKiBjYW5ub3QgYXNzdW1lIHRoZSBzd2l0Y2hlZF9mcm9tL3N3aXRjaGVkX3RvIHBhaXIgaXMgc2VybGlhemVkIGJ5CisJICogcnEtPmxvY2suIFRoZXkgYXJlIGhvd2V2ZXIgc2VyaWFsaXplZCBieSBwLT5waV9sb2NrLgorCSAqLwogCXZvaWQgKCpzd2l0Y2hlZF9mcm9tKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCXZvaWQgKCpzd2l0Y2hlZF90bykgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAl2b2lkICgqcHJpb19jaGFuZ2VkKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCkBAIC0xNTA0LDYgKzE1NDYsNyBAQAogZXh0ZXJuIHN0cnVjdCBzY2hlZF9lbnRpdHkgKl9fcGlja19sYXN0X2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpOwogZXh0ZXJuIHZvaWQgcHJpbnRfY2ZzX3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSk7CiBleHRlcm4gdm9pZCBwcmludF9ydF9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcHJpbnRfZGxfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KTsKIAogZXh0ZXJuIHZvaWQgaW5pdF9jZnNfcnEoc3RydWN0IGNmc19ycSAqY2ZzX3JxKTsKIGV4dGVybiB2b2lkIGluaXRfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSwgc3RydWN0IHJxICpycSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvd2FpdC5jIGIva2VybmVsL3NjaGVkL3dhaXQuYwppbmRleCA1YTYyOTE1Li44NTIxNDNhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvd2FpdC5jCisrKyBiL2tlcm5lbC9zY2hlZC93YWl0LmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogdm9pZCBfX2luaXRfd2FpdHF1ZXVlX2hlYWQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQogewpAQCAtMjk3LDYgKzI5OCw3MSBAQAogfQogRVhQT1JUX1NZTUJPTChhdXRvcmVtb3ZlX3dha2VfZnVuY3Rpb24pOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfa3RocmVhZF9zaG91bGRfc3RvcCh2b2lkKQoreworCXJldHVybiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9LVEhSRUFEKSAmJiBrdGhyZWFkX3Nob3VsZF9zdG9wKCk7Cit9CisKKy8qCisgKiBERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuYyk7CisgKgorICogYWRkX3dhaXRfcXVldWUoJndxLCAmd2FpdCk7CisgKiBmb3IgKDs7KSB7CisgKiAgICAgaWYgKGNvbmRpdGlvbikKKyAqICAgICAgICAgYnJlYWs7CisgKgorICogICAgIHAtPnN0YXRlID0gbW9kZTsJCQkJY29uZGl0aW9uID0gdHJ1ZTsKKyAqICAgICBzbXBfbWIoKTsgLy8gQQkJCQlzbXBfd21iKCk7IC8vIEMKKyAqICAgICBpZiAoIXdhaXQtPmZsYWdzICYgV1FfRkxBR19XT0tFTikJd2FpdC0+ZmxhZ3MgfD0gV1FfRkxBR19XT0tFTjsKKyAqICAgICAgICAgc2NoZWR1bGUoKQkJCQl0cnlfdG9fd2FrZV91cCgpOworICogICAgIHAtPnN0YXRlID0gVEFTS19SVU5OSU5HOwkJICAgIH5+fn5+fn5+fn5+fn5+fn5+fgorICogICAgIHdhaXQtPmZsYWdzICY9IH5XUV9GTEFHX1dPS0VOOwkJY29uZGl0aW9uID0gdHJ1ZTsKKyAqICAgICBzbXBfbWIoKSAvLyBCCQkJCXNtcF93bWIoKTsgLy8gQworICoJCQkJCQl3YWl0LT5mbGFncyB8PSBXUV9GTEFHX1dPS0VOOworICogfQorICogcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmd2FpdCk7CisgKgorICovCitsb25nIHdhaXRfd29rZW4od2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBsb25nIHRpbWVvdXQpCit7CisJc2V0X2N1cnJlbnRfc3RhdGUobW9kZSk7IC8qIEEgKi8KKwkvKgorCSAqIFRoZSBhYm92ZSBpbXBsaWVzIGFuIHNtcF9tYigpLCB3aGljaCBtYXRjaGVzIHdpdGggdGhlIHNtcF93bWIoKSBmcm9tCisJICogd29rZW5fd2FrZV9mdW5jdGlvbigpIHN1Y2ggdGhhdCBpZiB3ZSBvYnNlcnZlIFdRX0ZMQUdfV09LRU4gd2UgbXVzdAorCSAqIGFsc28gb2JzZXJ2ZSBhbGwgc3RhdGUgYmVmb3JlIHRoZSB3YWtldXAuCisJICovCisJaWYgKCEod2FpdC0+ZmxhZ3MgJiBXUV9GTEFHX1dPS0VOKSAmJiAhaXNfa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwkvKgorCSAqIFRoZSBiZWxvdyBpbXBsaWVzIGFuIHNtcF9tYigpLCBpdCB0b28gcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGZyb20KKwkgKiB3b2tlbl93YWtlX2Z1bmN0aW9uKCkgc3VjaCB0aGF0IHdlIG11c3QgZWl0aGVyIG9ic2VydmUgdGhlIHdhaXQKKwkgKiBjb25kaXRpb24gYmVpbmcgdHJ1ZSBfT1JfIFdRX0ZMQUdfV09LRU4gc3VjaCB0aGF0IHdlIHdpbGwgbm90IG1pc3MKKwkgKiBhbiBldmVudC4KKwkgKi8KKwlzZXRfbWIod2FpdC0+ZmxhZ3MsIHdhaXQtPmZsYWdzICYgfldRX0ZMQUdfV09LRU4pOyAvKiBCICovCisKKwlyZXR1cm4gdGltZW91dDsKK30KK0VYUE9SVF9TWU1CT0wod2FpdF93b2tlbik7CisKK2ludCB3b2tlbl93YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSkKK3sKKwkvKgorCSAqIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHVuZGVyIHdhaXRxdWV1ZSBsb2NrLCBMT0NLCisJICogZG9lc24ndCBpbXBseSB3cml0ZSBiYXJyaWVyIGFuZCB0aGUgdXNlcnMgZXhwZWN0cyB3cml0ZQorCSAqIGJhcnJpZXIgc2VtYW50aWNzIG9uIHdha2V1cCBmdW5jdGlvbnMuICBUaGUgZm9sbG93aW5nCisJICogc21wX3dtYigpIGlzIGVxdWl2YWxlbnQgdG8gc21wX3dtYigpIGluIHRyeV90b193YWtlX3VwKCkKKwkgKiBhbmQgaXMgcGFpcmVkIHdpdGggc2V0X21iKCkgaW4gd2FpdF93b2tlbigpLgorCSAqLworCXNtcF93bWIoKTsgLyogQyAqLworCXdhaXQtPmZsYWdzIHw9IFdRX0ZMQUdfV09LRU47CisKKwlyZXR1cm4gZGVmYXVsdF93YWtlX2Z1bmN0aW9uKHdhaXQsIG1vZGUsIHN5bmMsIGtleSk7Cit9CitFWFBPUlRfU1lNQk9MKHdva2VuX3dha2VfZnVuY3Rpb24pOworCiBpbnQgd2FrZV9iaXRfZnVuY3Rpb24od2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqYXJnKQogewogCXN0cnVjdCB3YWl0X2JpdF9rZXkgKmtleSA9IGFyZzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCA4ZjA4NzZmLi4xNmEzMDUyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0xMjc1LDcgKzEyNzUsMTcgQEAKIAkJCWxvY2FsX2lycV9yZXN0b3JlKCpmbGFncyk7CiAJCQlicmVhazsKIAkJfQotCisJCS8qCisJCSAqIFRoaXMgc2lnaGFuZCBjYW4gYmUgYWxyZWFkeSBmcmVlZCBhbmQgZXZlbiByZXVzZWQsIGJ1dAorCQkgKiB3ZSByZWx5IG9uIFNMQUJfREVTVFJPWV9CWV9SQ1UgYW5kIHNpZ2hhbmRfY3RvcigpIHdoaWNoCisJCSAqIGluaXRpYWxpemVzIC0+c2lnbG9jazogdGhpcyBzbGFiIGNhbid0IGdvIGF3YXksIGl0IGhhcworCQkgKiB0aGUgc2FtZSBvYmplY3QgdHlwZSwgLT5zaWdsb2NrIGNhbid0IGJlIHJlaW5pdGlhbGl6ZWQuCisJCSAqCisJCSAqIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdHNrLT5zaWdoYW5kIGlzIHN0aWxsIHRoZSBzYW1lCisJCSAqIGFmdGVyIHdlIHRha2UgdGhlIGxvY2ssIHdlIGNhbiByYWNlIHdpdGggZGVfdGhyZWFkKCkgb3IKKwkJICogX19leGl0X3NpZ25hbCgpLiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhlIG5leHQgaXRlcmF0aW9uCisJCSAqIG11c3Qgc2VlIC0+c2lnaGFuZCA9PSBOVUxMLgorCQkgKi8KIAkJc3Bpbl9sb2NrKCZzaWdoYW5kLT5zaWdsb2NrKTsKIAkJaWYgKGxpa2VseShzaWdoYW5kID09IHRzay0+c2lnaGFuZCkpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMTMzMSwyMyArMTM0MSwyMSBAQAogCWludCBlcnJvciA9IC1FU1JDSDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci1yZXRyeToKLQlwID0gcGlkX3Rhc2socGlkLCBQSURUWVBFX1BJRCk7Ci0JaWYgKHApIHsKLQkJZXJyb3IgPSBncm91cF9zZW5kX3NpZ19pbmZvKHNpZywgaW5mbywgcCk7Ci0JCWlmICh1bmxpa2VseShlcnJvciA9PSAtRVNSQ0gpKQotCQkJLyoKLQkJCSAqIFRoZSB0YXNrIHdhcyB1bmhhc2hlZCBpbiBiZXR3ZWVuLCB0cnkgYWdhaW4uCi0JCQkgKiBJZiBpdCBpcyBkZWFkLCBwaWRfdGFzaygpIHdpbGwgcmV0dXJuIE5VTEwsCi0JCQkgKiBpZiB3ZSByYWNlIHdpdGggZGVfdGhyZWFkKCkgaXQgd2lsbCBmaW5kIHRoZQotCQkJICogbmV3IGxlYWRlci4KLQkJCSAqLwotCQkJZ290byByZXRyeTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJZm9yICg7OykgeworCQlyY3VfcmVhZF9sb2NrKCk7CisJCXAgPSBwaWRfdGFzayhwaWQsIFBJRFRZUEVfUElEKTsKKwkJaWYgKHApCisJCQllcnJvciA9IGdyb3VwX3NlbmRfc2lnX2luZm8oc2lnLCBpbmZvLCBwKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCWlmIChsaWtlbHkoIXAgfHwgZXJyb3IgIT0gLUVTUkNIKSkKKwkJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBlcnJvcjsKKwkJLyoKKwkJICogVGhlIHRhc2sgd2FzIHVuaGFzaGVkIGluIGJldHdlZW4sIHRyeSBhZ2Fpbi4gIElmIGl0CisJCSAqIGlzIGRlYWQsIHBpZF90YXNrKCkgd2lsbCByZXR1cm4gTlVMTCwgaWYgd2UgcmFjZSB3aXRoCisJCSAqIGRlX3RocmVhZCgpIGl0IHdpbGwgZmluZCB0aGUgbmV3IGxlYWRlci4KKwkJICovCisJfQogfQogCiBpbnQga2lsbF9wcm9jX2luZm8oaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHBpZF90IHBpZCkKQEAgLTI3NDgsNiArMjc1NiwxMCBAQAogCQlpZiAoZnJvbS0+c2lfY29kZSA9PSBCVVNfTUNFRVJSX0FSIHx8IGZyb20tPnNpX2NvZGUgPT0gQlVTX01DRUVSUl9BTykKIAkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX2FkZHJfbHNiLCAmdG8tPnNpX2FkZHJfbHNiKTsKICNlbmRpZgorI2lmZGVmIFNFR1ZfQk5ERVJSCisJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX2xvd2VyLCAmdG8tPnNpX2xvd2VyKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdXBwZXIsICZ0by0+c2lfdXBwZXIpOworI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgX19TSV9DSExEOgogCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9waWQsICZ0by0+c2lfcGlkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbXBib290LmMgYi9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGViODllMTguLmYwMzJmYjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zbXBib290LmMKKysrIGIva2VybmVsL3NtcGJvb3QuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQkJcHJlZW1wdF9lbmFibGUoKTsKIAkJCWlmIChodC0+Y2xlYW51cCkKIAkJCQlodC0+Y2xlYW51cCh0ZC0+Y3B1LCBjcHVfb25saW5lKHRkLT5jcHUpKTsKQEAgLTEzNiwyNiArMTM2LDI3IEBACiAJCS8qIENoZWNrIGZvciBzdGF0ZSBjaGFuZ2Ugc2V0dXAgKi8KIAkJc3dpdGNoICh0ZC0+c3RhdHVzKSB7CiAJCWNhc2UgSFBfVEhSRUFEX05PTkU6CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJaWYgKGh0LT5zZXR1cCkKIAkJCQlodC0+c2V0dXAodGQtPmNwdSk7CiAJCQl0ZC0+c3RhdHVzID0gSFBfVEhSRUFEX0FDVElWRTsKLQkJCXByZWVtcHRfZGlzYWJsZSgpOwotCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwogCQljYXNlIEhQX1RIUkVBRF9QQVJLRUQ6CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJaWYgKGh0LT51bnBhcmspCiAJCQkJaHQtPnVucGFyayh0ZC0+Y3B1KTsKIAkJCXRkLT5zdGF0dXMgPSBIUF9USFJFQURfQUNUSVZFOwotCQkJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JCQlicmVhazsKKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKCFodC0+dGhyZWFkX3Nob3VsZF9ydW4odGQtPmNwdSkpIHsKLQkJCXByZWVtcHRfZW5hYmxlKCk7CisJCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCQlzY2hlZHVsZSgpOwogCQl9IGVsc2UgewotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJCXByZWVtcHRfZW5hYmxlKCk7CiAJCQlodC0+dGhyZWFkX2ZuKHRkLT5jcHUpOwogCQl9CmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCAwNjk5YWRkLi41MDFiYWE5IDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTY1Niw3ICs2NTYsNyBAQAogCQkgKiBpbiB0aGUgdGFzayBzdGFjayBoZXJlLgogCQkgKi8KIAkJX19kb19zb2Z0aXJxKCk7Ci0JCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKGNwdSk7CisJCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKCk7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAxZWFhMmYwLi5hOGM5ZjVhIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC05MSw2ICs5MSwxMiBAQAogI2lmbmRlZiBTRVRfVFNDX0NUTAogIyBkZWZpbmUgU0VUX1RTQ19DVEwoYSkJCSgtRUlOVkFMKQogI2VuZGlmCisjaWZuZGVmIE1QWF9FTkFCTEVfTUFOQUdFTUVOVAorIyBkZWZpbmUgTVBYX0VOQUJMRV9NQU5BR0VNRU5UKGEpCSgtRUlOVkFMKQorI2VuZGlmCisjaWZuZGVmIE1QWF9ESVNBQkxFX01BTkFHRU1FTlQKKyMgZGVmaW5lIE1QWF9ESVNBQkxFX01BTkFHRU1FTlQoYSkJKC1FSU5WQUwpCisjZW5kaWYKIAogLyoKICAqIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbS13aWRlIG92ZXJmbG93IFVJRCBhbmQgR0lEIGFyZSBkZWZpbmVkLCBmb3IKQEAgLTIyMDMsNiArMjIwOSwxMiBAQAogCQkJbWUtPm1tLT5kZWZfZmxhZ3MgJj0gflZNX05PSFVHRVBBR0U7CiAJCXVwX3dyaXRlKCZtZS0+bW0tPm1tYXBfc2VtKTsKIAkJYnJlYWs7CisJY2FzZSBQUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQ6CisJCWVycm9yID0gTVBYX0VOQUJMRV9NQU5BR0VNRU5UKG1lKTsKKwkJYnJlYWs7CisJY2FzZSBQUl9NUFhfRElTQUJMRV9NQU5BR0VNRU5UOgorCQllcnJvciA9IE1QWF9ESVNBQkxFX01BTkFHRU1FTlQobWUpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnJvciA9IC1FSU5WQUw7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvTWFrZWZpbGUgYi9rZXJuZWwvdGltZS9NYWtlZmlsZQppbmRleCA3MzQ3NDI2Li5mNjIyY2YyIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdGltZS9NYWtlZmlsZQpAQCAtMTMsNyArMTMsNyBAQAogb2JqLSQoQ09ORklHX1RJQ0tfT05FU0hPVCkJCQkrPSB0aWNrLXNjaGVkLm8KIG9iai0kKENPTkZJR19USU1FUl9TVEFUUykJCQkrPSB0aW1lcl9zdGF0cy5vCiBvYmotJChDT05GSUdfREVCVUdfRlMpCQkJCSs9IHRpbWVrZWVwaW5nX2RlYnVnLm8KLW9iai0kKENPTkZJR19URVNUX1VERUxBWSkJCQkrPSB1ZGVsYXlfdGVzdC5vCitvYmotJChDT05GSUdfVEVTVF9VREVMQVkpCQkJKz0gdGVzdF91ZGVsYXkubwogCiAkKG9iaikvdGltZS5vOiAkKG9iaikvdGltZWNvbnN0LmgKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdWRlbGF5X3Rlc3QuYyBiL2tlcm5lbC90aW1lL3Rlc3RfdWRlbGF5LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGtlcm5lbC90aW1lL3VkZWxheV90ZXN0LmMKcmVuYW1lIHRvIGtlcm5lbC90aW1lL3Rlc3RfdWRlbGF5LmMKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwppbmRleCA3YjU3NDFmLi4xZjQzNTYwIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKKysrIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCkBAIC01ODUsNyArNTg1LDcgQEAKIAkJbGFzdF9qaWZmaWVzID0gamlmZmllczsKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZqaWZmaWVzX2xvY2ssIHNlcSkpOwogCi0JaWYgKHJjdV9uZWVkc19jcHUoY3B1LCAmcmN1X2RlbHRhX2ppZmZpZXMpIHx8CisJaWYgKHJjdV9uZWVkc19jcHUoJnJjdV9kZWx0YV9qaWZmaWVzKSB8fAogCSAgICBhcmNoX25lZWRzX2NwdSgpIHx8IGlycV93b3JrX25lZWRzX2NwdSgpKSB7CiAJCW5leHRfamlmZmllcyA9IGxhc3RfamlmZmllcyArIDE7CiAJCWRlbHRhX2ppZmZpZXMgPSAxOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZS5jIGIva2VybmVsL3RpbWUvdGltZS5jCmluZGV4IGE5YWUyMGYuLjY1MDE1ZmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWUuYworKysgYi9rZXJuZWwvdGltZS90aW1lLmMKQEAgLTMwNCw3ICszMDQsOSBAQAogfQogRVhQT1JUX1NZTUJPTCh0aW1lc3BlY190cnVuYyk7CiAKLS8qIENvbnZlcnRzIEdyZWdvcmlhbiBkYXRlIHRvIHNlY29uZHMgc2luY2UgMTk3MC0wMS0wMSAwMDowMDowMC4KKy8qCisgKiBta3RpbWU2NCAtIENvbnZlcnRzIGRhdGUgdG8gc2Vjb25kcy4KKyAqIENvbnZlcnRzIEdyZWdvcmlhbiBkYXRlIHRvIHNlY29uZHMgc2luY2UgMTk3MC0wMS0wMSAwMDowMDowMC4KICAqIEFzc3VtZXMgaW5wdXQgaW4gbm9ybWFsIGRhdGUgZm9ybWF0LCBpLmUuIDE5ODAtMTItMzEgMjM6NTk6NTkKICAqID0+IHllYXI9MTk4MCwgbW9uPTEyLCBkYXk9MzEsIGhvdXI9MjMsIG1pbj01OSwgc2VjPTU5LgogICoKQEAgLTMxNCwxNSArMzE2LDEwIEBACiAgKiAteWVhci8xMDAreWVhci80MDAgdGVybXMsIGFuZCBhZGQgMTAuXQogICoKICAqIFRoaXMgYWxnb3JpdGhtIHdhcyBmaXJzdCBwdWJsaXNoZWQgYnkgR2F1c3MgKEkgdGhpbmspLgotICoKLSAqIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gd2lsbCBvdmVyZmxvdyBvbiAyMTA2LTAyLTA3IDA2OjI4OjE2IG9uCi0gKiBtYWNoaW5lcyB3aGVyZSBsb25nIGlzIDMyLWJpdCEgKEhvd2V2ZXIsIGFzIHRpbWVfdCBpcyBzaWduZWQsIHdlCi0gKiB3aWxsIGFscmVhZHkgZ2V0IHByb2JsZW1zIGF0IG90aGVyIHBsYWNlcyBvbiAyMDM4LTAxLTE5IDAzOjE0OjA4KQogICovCi11bnNpZ25lZCBsb25nCi1ta3RpbWUoY29uc3QgdW5zaWduZWQgaW50IHllYXIwLCBjb25zdCB1bnNpZ25lZCBpbnQgbW9uMCwKLSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZGF5LCBjb25zdCB1bnNpZ25lZCBpbnQgaG91ciwKLSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWluLCBjb25zdCB1bnNpZ25lZCBpbnQgc2VjKQordGltZTY0X3QgbWt0aW1lNjQoY29uc3QgdW5zaWduZWQgaW50IHllYXIwLCBjb25zdCB1bnNpZ25lZCBpbnQgbW9uMCwKKwkJY29uc3QgdW5zaWduZWQgaW50IGRheSwgY29uc3QgdW5zaWduZWQgaW50IGhvdXIsCisJCWNvbnN0IHVuc2lnbmVkIGludCBtaW4sIGNvbnN0IHVuc2lnbmVkIGludCBzZWMpCiB7CiAJdW5zaWduZWQgaW50IG1vbiA9IG1vbjAsIHllYXIgPSB5ZWFyMDsKIApAQCAtMzMyLDE1ICszMjksMTQgQEAKIAkJeWVhciAtPSAxOwogCX0KIAotCXJldHVybiAoKCgodW5zaWduZWQgbG9uZykKKwlyZXR1cm4gKCgoKHRpbWU2NF90KQogCQkgICh5ZWFyLzQgLSB5ZWFyLzEwMCArIHllYXIvNDAwICsgMzY3Km1vbi8xMiArIGRheSkgKwogCQkgIHllYXIqMzY1IC0gNzE5NDk5CiAJICAgICkqMjQgKyBob3VyIC8qIG5vdyBoYXZlIGhvdXJzICovCiAJICApKjYwICsgbWluIC8qIG5vdyBoYXZlIG1pbnV0ZXMgKi8KIAkpKjYwICsgc2VjOyAvKiBmaW5hbGx5IHNlY29uZHMgKi8KIH0KLQotRVhQT1JUX1NZTUJPTChta3RpbWUpOworRVhQT1JUX1NZTUJPTChta3RpbWU2NCk7CiAKIC8qKgogICogc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMgLSBzZXQgdGltZXNwZWMgc2VjIGFuZCBuc2VjIHBhcnRzIGFuZCBub3JtYWxpemUKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGVjMTc5MWYuLjZhOTMxODUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtNDE3LDcgKzQxNyw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB0a191cGRhdGVfa3RpbWVfZGF0YShzdHJ1Y3QgdGltZWtlZXBlciAqdGspCiB7Ci0JczY0IG5zZWM7CisJdTY0IHNlY29uZHM7CisJdTMyIG5zZWM7CiAKIAkvKgogCSAqIFRoZSB4dGltZSBiYXNlZCBtb25vdG9uaWMgcmVhZG91dCBpczoKQEAgLTQyNiwxMyArNDI3LDIyIEBACiAJICoJbnNlYyA9IGJhc2VfbW9ubyArIG5vdygpOwogCSAqID09PiBiYXNlX21vbm8gPSAoeHRpbWVfc2VjICsgd3RtX3NlYykgKiAxZTkgKyB3dG1fbnNlYwogCSAqLwotCW5zZWMgPSAoczY0KSh0ay0+eHRpbWVfc2VjICsgdGstPndhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyk7Ci0JbnNlYyAqPSBOU0VDX1BFUl9TRUM7Ci0JbnNlYyArPSB0ay0+d2FsbF90b19tb25vdG9uaWMudHZfbnNlYzsKLQl0ay0+dGtyLmJhc2VfbW9ubyA9IG5zX3RvX2t0aW1lKG5zZWMpOworCXNlY29uZHMgPSAodTY0KSh0ay0+eHRpbWVfc2VjICsgdGstPndhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyk7CisJbnNlYyA9ICh1MzIpIHRrLT53YWxsX3RvX21vbm90b25pYy50dl9uc2VjOworCXRrLT50a3IuYmFzZV9tb25vID0gbnNfdG9fa3RpbWUoc2Vjb25kcyAqIE5TRUNfUEVSX1NFQyArIG5zZWMpOwogCiAJLyogVXBkYXRlIHRoZSBtb25vdG9uaWMgcmF3IGJhc2UgKi8KIAl0ay0+YmFzZV9yYXcgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHRrLT5yYXdfdGltZSk7CisKKwkvKgorCSAqIFRoZSBzdW0gb2YgdGhlIG5hbm9zZWNvbmRzIHBvcnRpb25zIG9mIHh0aW1lIGFuZAorCSAqIHdhbGxfdG9fbW9ub3RvbmljIGNhbiBiZSBncmVhdGVyL2VxdWFsIG9uZSBzZWNvbmQuIFRha2UKKwkgKiB0aGlzIGludG8gYWNjb3VudCBiZWZvcmUgdXBkYXRpbmcgdGstPmt0aW1lX3NlYy4KKwkgKi8KKwluc2VjICs9ICh1MzIpKHRrLT50a3IueHRpbWVfbnNlYyA+PiB0ay0+dGtyLnNoaWZ0KTsKKwlpZiAobnNlYyA+PSBOU0VDX1BFUl9TRUMpCisJCXNlY29uZHMrKzsKKwl0ay0+a3RpbWVfc2VjID0gc2Vjb25kczsKIH0KIAogLyogbXVzdCBob2xkIHRpbWVrZWVwZXJfbG9jayAqLwpAQCAtNTE5LDkgKzUyOSw5IEBACiAKIC8qKgogICogZ2V0bnN0aW1lb2ZkYXk2NCAtIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXNwZWM2NC4KLSAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHRvIGJlIHNldAorICogQHRzOgkJcG9pbnRlciB0byB0aGUgdGltZXNwZWM2NCB0byBiZSBzZXQKICAqCi0gKiBSZXR1cm5zIHRoZSB0aW1lIG9mIGRheSBpbiBhIHRpbWVzcGVjIChXQVJOIGlmIHN1c3BlbmRlZCkuCisgKiBSZXR1cm5zIHRoZSB0aW1lIG9mIGRheSBpbiBhIHRpbWVzcGVjNjQgKFdBUk4gaWYgc3VzcGVuZGVkKS4KICAqLwogdm9pZCBnZXRuc3RpbWVvZmRheTY0KHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKQEAgLTYyMyw3ICs2MzMsNyBAQAogICoKICAqIFRoZSBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBtb25vdG9uaWMgY2xvY2sgZnJvbSB0aGUgcmVhbHRpbWUKICAqIGNsb2NrIGFuZCB0aGUgd2FsbF90b19tb25vdG9uaWMgb2Zmc2V0IGFuZCBzdG9yZXMgdGhlIHJlc3VsdAotICogaW4gbm9ybWFsaXplZCB0aW1lc3BlYyBmb3JtYXQgaW4gdGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgQHRzLgorICogaW4gbm9ybWFsaXplZCB0aW1lc3BlYzY0IGZvcm1hdCBpbiB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieSBAdHMuCiAgKi8KIHZvaWQga3RpbWVfZ2V0X3RzNjQoc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewpAQCAtNjQ4LDYgKzY1OCw1NCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3RpbWVfZ2V0X3RzNjQpOwogCisvKioKKyAqIGt0aW1lX2dldF9zZWNvbmRzIC0gR2V0IHRoZSBzZWNvbmRzIHBvcnRpb24gb2YgQ0xPQ0tfTU9OT1RPTklDCisgKgorICogUmV0dXJucyB0aGUgc2Vjb25kcyBwb3J0aW9uIG9mIENMT0NLX01PTk9UT05JQyB3aXRoIGEgc2luZ2xlIG5vbgorICogc2VyaWFsaXplZCByZWFkLiB0ay0+a3RpbWVfc2VjIGlzIG9mIHR5cGUgJ3Vuc2lnbmVkIGxvbmcnIHNvIHRoaXMKKyAqIHdvcmtzIG9uIGJvdGggMzIgYW5kIDY0IGJpdCBzeXN0ZW1zLiBPbiAzMiBiaXQgc3lzdGVtcyB0aGUgcmVhZG91dAorICogY292ZXJzIH4xMzYgeWVhcnMgb2YgdXB0aW1lIHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggdG8gcHJldmVudAorICogcHJlbWF0dXJlIHdyYXAgYXJvdW5kcy4KKyAqLwordGltZTY0X3Qga3RpbWVfZ2V0X3NlY29uZHModm9pZCkKK3sKKwlzdHJ1Y3QgdGltZWtlZXBlciAqdGsgPSAmdGtfY29yZS50aW1la2VlcGVyOworCisJV0FSTl9PTih0aW1la2VlcGluZ19zdXNwZW5kZWQpOworCXJldHVybiB0ay0+a3RpbWVfc2VjOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3RpbWVfZ2V0X3NlY29uZHMpOworCisvKioKKyAqIGt0aW1lX2dldF9yZWFsX3NlY29uZHMgLSBHZXQgdGhlIHNlY29uZHMgcG9ydGlvbiBvZiBDTE9DS19SRUFMVElNRQorICoKKyAqIFJldHVybnMgdGhlIHdhbGwgY2xvY2sgc2Vjb25kcyBzaW5jZSAxOTcwLiBUaGlzIHJlcGxhY2VzIHRoZQorICogZ2V0X3NlY29uZHMoKSBpbnRlcmZhY2Ugd2hpY2ggaXMgbm90IHkyMDM4IHNhZmUgb24gMzJiaXQgc3lzdGVtcy4KKyAqCisgKiBGb3IgNjRiaXQgc3lzdGVtcyB0aGUgZmFzdCBhY2Nlc3MgdG8gdGstPnh0aW1lX3NlYyBpcyBwcmVzZXJ2ZWQuIE9uCisgKiAzMmJpdCBzeXN0ZW1zIHRoZSBhY2Nlc3MgbXVzdCBiZSBwcm90ZWN0ZWQgd2l0aCB0aGUgc2VxdWVuY2UKKyAqIGNvdW50ZXIgdG8gcHJvdmlkZSAiYXRvbWljIiBhY2Nlc3MgdG8gdGhlIDY0Yml0IHRrLT54dGltZV9zZWMKKyAqIHZhbHVlLgorICovCit0aW1lNjRfdCBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKHZvaWQpCit7CisJc3RydWN0IHRpbWVrZWVwZXIgKnRrID0gJnRrX2NvcmUudGltZWtlZXBlcjsKKwl0aW1lNjRfdCBzZWNvbmRzOworCXVuc2lnbmVkIGludCBzZXE7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpKQorCQlyZXR1cm4gdGstPnh0aW1lX3NlYzsKKworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbigmdGtfY29yZS5zZXEpOworCQlzZWNvbmRzID0gdGstPnh0aW1lX3NlYzsKKworCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJnRrX2NvcmUuc2VxLCBzZXEpKTsKKworCXJldHVybiBzZWNvbmRzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3RpbWVfZ2V0X3JlYWxfc2Vjb25kcyk7CisKICNpZmRlZiBDT05GSUdfTlRQX1BQUwogCiAvKioKQEAgLTcwMywxOCArNzYxLDE4IEBACiBFWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7CiAKIC8qKgotICogZG9fc2V0dGltZW9mZGF5IC0gU2V0cyB0aGUgdGltZSBvZiBkYXkKLSAqIEB0djoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIG5ldyB0aW1lCisgKiBkb19zZXR0aW1lb2ZkYXk2NCAtIFNldHMgdGhlIHRpbWUgb2YgZGF5LgorICogQHRzOiAgICAgcG9pbnRlciB0byB0aGUgdGltZXNwZWM2NCB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBuZXcgdGltZQogICoKICAqIFNldHMgdGhlIHRpbWUgb2YgZGF5IHRvIHRoZSBuZXcgdGltZSBhbmQgdXBkYXRlIE5UUCBhbmQgbm90aWZ5IGhydGltZXJzCiAgKi8KLWludCBkb19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0dikKK2ludCBkb19zZXR0aW1lb2ZkYXk2NChjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7CiAJc3RydWN0IHRpbWVrZWVwZXIgKnRrID0gJnRrX2NvcmUudGltZWtlZXBlcjsKLQlzdHJ1Y3QgdGltZXNwZWM2NCB0c19kZWx0YSwgeHQsIHRtcDsKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0c19kZWx0YSwgeHQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghdGltZXNwZWNfdmFsaWRfc3RyaWN0KHR2KSkKKwlpZiAoIXRpbWVzcGVjNjRfdmFsaWRfc3RyaWN0KHRzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVrZWVwZXJfbG9jaywgZmxhZ3MpOwpAQCAtNzIzLDEzICs3ODEsMTIgQEAKIAl0aW1la2VlcGluZ19mb3J3YXJkX25vdyh0ayk7CiAKIAl4dCA9IHRrX3h0aW1lKHRrKTsKLQl0c19kZWx0YS50dl9zZWMgPSB0di0+dHZfc2VjIC0geHQudHZfc2VjOwotCXRzX2RlbHRhLnR2X25zZWMgPSB0di0+dHZfbnNlYyAtIHh0LnR2X25zZWM7CisJdHNfZGVsdGEudHZfc2VjID0gdHMtPnR2X3NlYyAtIHh0LnR2X3NlYzsKKwl0c19kZWx0YS50dl9uc2VjID0gdHMtPnR2X25zZWMgLSB4dC50dl9uc2VjOwogCiAJdGtfc2V0X3dhbGxfdG9fbW9ubyh0aywgdGltZXNwZWM2NF9zdWIodGstPndhbGxfdG9fbW9ub3RvbmljLCB0c19kZWx0YSkpOwogCi0JdG1wID0gdGltZXNwZWNfdG9fdGltZXNwZWM2NCgqdHYpOwotCXRrX3NldF94dGltZSh0aywgJnRtcCk7CisJdGtfc2V0X3h0aW1lKHRrLCB0cyk7CiAKIAl0aW1la2VlcGluZ191cGRhdGUodGssIFRLX0NMRUFSX05UUCB8IFRLX01JUlJPUiB8IFRLX0NMT0NLX1dBU19TRVQpOwogCkBAIC03NDEsNyArNzk4LDcgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOworRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXk2NCk7CiAKIC8qKgogICogdGltZWtlZXBpbmdfaW5qZWN0X29mZnNldCAtIEFkZHMgb3Igc3VidHJhY3RzIGZyb20gdGhlIGN1cnJlbnQgdGltZS4KQEAgLTg5NSwxMiArOTUyLDEyIEBACiB9CiAKIC8qKgotICogZ2V0cmF3bW9ub3RvbmljIC0gUmV0dXJucyB0aGUgcmF3IG1vbm90b25pYyB0aW1lIGluIGEgdGltZXNwZWMKLSAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHRvIGJlIHNldAorICogZ2V0cmF3bW9ub3RvbmljNjQgLSBSZXR1cm5zIHRoZSByYXcgbW9ub3RvbmljIHRpbWUgaW4gYSB0aW1lc3BlYworICogQHRzOgkJcG9pbnRlciB0byB0aGUgdGltZXNwZWM2NCB0byBiZSBzZXQKICAqCiAgKiBSZXR1cm5zIHRoZSByYXcgbW9ub3RvbmljIHRpbWUgKGNvbXBsZXRlbHkgdW4tbW9kaWZpZWQgYnkgbnRwKQogICovCi12b2lkIGdldHJhd21vbm90b25pYyhzdHJ1Y3QgdGltZXNwZWMgKnRzKQordm9pZCBnZXRyYXdtb25vdG9uaWM2NChzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7CiAJc3RydWN0IHRpbWVrZWVwZXIgKnRrID0gJnRrX2NvcmUudGltZWtlZXBlcjsKIAlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0OwpAQCAtOTE1LDkgKzk3MiwxMCBAQAogCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJnRrX2NvcmUuc2VxLCBzZXEpKTsKIAogCXRpbWVzcGVjNjRfYWRkX25zKCZ0czY0LCBuc2Vjcyk7Ci0JKnRzID0gdGltZXNwZWM2NF90b190aW1lc3BlYyh0czY0KTsKKwkqdHMgPSB0czY0OwogfQotRVhQT1JUX1NZTUJPTChnZXRyYXdtb25vdG9uaWMpOworRVhQT1JUX1NZTUJPTChnZXRyYXdtb25vdG9uaWM2NCk7CisKIAogLyoqCiAgKiB0aW1la2VlcGluZ192YWxpZF9mb3JfaHJlcyAtIENoZWNrIGlmIHRpbWVrZWVwaW5nIGlzIHN1aXRhYmxlIGZvciBocmVzCkBAIC0xMDY4LDggKzExMjYsOCBAQAogfQogCiAvKioKLSAqIHRpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUgLSBBZGRzIHN1c3BlbmQgaW50ZXJ2YWwgdG8gdGltZWVrZWVwaW5nIHZhbHVlcwotICogQGRlbHRhOiBwb2ludGVyIHRvIGEgdGltZXNwZWMgZGVsdGEgdmFsdWUKKyAqIHRpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWU2NCAtIEFkZHMgc3VzcGVuZCBpbnRlcnZhbCB0byB0aW1lZWtlZXBpbmcgdmFsdWVzCisgKiBAZGVsdGE6IHBvaW50ZXIgdG8gYSB0aW1lc3BlYzY0IGRlbHRhIHZhbHVlCiAgKgogICogVGhpcyBob29rIGlzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgY2Fubm90IHN1cHBvcnQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrCiAgKiBiZWNhdXNlIHRoZWlyIFJUQy9wZXJzaXN0ZW50IGNsb2NrIGlzIG9ubHkgYWNjZXNzaWJsZSB3aGVuIGlycXMgYXJlIGVuYWJsZWQuCkBAIC0xMDc3LDEwICsxMTM1LDkgQEAKICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHJ0Y19yZXN1bWUoKSwgYW5kIGFsbG93cwogICogYSBzdXNwZW5kIG9mZnNldCB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSB0aW1la2VlcGluZyB2YWx1ZXMuCiAgKi8KLXZvaWQgdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZShzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhKQordm9pZCB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lNjQoc3RydWN0IHRpbWVzcGVjNjQgKmRlbHRhKQogewogCXN0cnVjdCB0aW1la2VlcGVyICp0ayA9ICZ0a19jb3JlLnRpbWVrZWVwZXI7Ci0Jc3RydWN0IHRpbWVzcGVjNjQgdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgpAQCAtMTA5NSw4ICsxMTUyLDcgQEAKIAogCXRpbWVrZWVwaW5nX2ZvcndhcmRfbm93KHRrKTsKIAotCXRtcCA9IHRpbWVzcGVjX3RvX3RpbWVzcGVjNjQoKmRlbHRhKTsKLQlfX3RpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUodGssICZ0bXApOworCV9fdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZSh0aywgZGVsdGEpOwogCiAJdGltZWtlZXBpbmdfdXBkYXRlKHRrLCBUS19DTEVBUl9OVFAgfCBUS19NSVJST1IgfCBUS19DTE9DS19XQVNfU0VUKTsKIApAQCAtMTMzMiw2ICsxMzg4LDEyIEBACiAJICoKIAkgKiBYWFggLSBUT0RPOiBEb2MgbnRwX2Vycm9yIGNhbGN1bGF0aW9uLgogCSAqLworCWlmICgobXVsdF9hZGogPiAwKSAmJiAodGstPnRrci5tdWx0ICsgbXVsdF9hZGogPCBtdWx0X2FkaikpIHsKKwkJLyogTlRQIGFkanVzdG1lbnQgY2F1c2VkIGNsb2Nrc291cmNlIG11bHQgb3ZlcmZsb3cgKi8KKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm47CisJfQorCiAJdGstPnRrci5tdWx0ICs9IG11bHRfYWRqOwogCXRrLT54dGltZV9pbnRlcnZhbCArPSBpbnRlcnZhbDsKIAl0ay0+dGtyLnh0aW1lX25zZWMgLT0gb2Zmc2V0OwpAQCAtMTM5Nyw3ICsxNDU5LDggQEAKIAl9CiAKIAlpZiAodW5saWtlbHkodGstPnRrci5jbG9jay0+bWF4YWRqICYmCi0JCSh0ay0+dGtyLm11bHQgPiB0ay0+dGtyLmNsb2NrLT5tdWx0ICsgdGstPnRrci5jbG9jay0+bWF4YWRqKSkpIHsKKwkJKGFicyh0ay0+dGtyLm11bHQgLSB0ay0+dGtyLmNsb2NrLT5tdWx0KQorCQkJPiB0ay0+dGtyLmNsb2NrLT5tYXhhZGopKSkgewogCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcKIAkJCSJBZGp1c3RpbmcgJXMgbW9yZSB0aGFuIDExJSUgKCVsZCB2cyAlbGQpXG4iLAogCQkJdGstPnRrci5jbG9jay0+bmFtZSwgKGxvbmcpdGstPnRrci5tdWx0LApAQCAtMTY0Niw3ICsxNzA5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3VycmVudF9rZXJuZWxfdGltZSk7CiAKLXN0cnVjdCB0aW1lc3BlYyBnZXRfbW9ub3RvbmljX2NvYXJzZSh2b2lkKQorc3RydWN0IHRpbWVzcGVjNjQgZ2V0X21vbm90b25pY19jb2Fyc2U2NCh2b2lkKQogewogCXN0cnVjdCB0aW1la2VlcGVyICp0ayA9ICZ0a19jb3JlLnRpbWVrZWVwZXI7CiAJc3RydWN0IHRpbWVzcGVjNjQgbm93LCBtb25vOwpAQCAtMTY2Miw3ICsxNzI1LDcgQEAKIAlzZXRfbm9ybWFsaXplZF90aW1lc3BlYzY0KCZub3csIG5vdy50dl9zZWMgKyBtb25vLnR2X3NlYywKIAkJCQlub3cudHZfbnNlYyArIG1vbm8udHZfbnNlYyk7CiAKLQlyZXR1cm4gdGltZXNwZWM2NF90b190aW1lc3BlYyhub3cpOworCXJldHVybiBub3c7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lci5jIGIva2VybmVsL3RpbWUvdGltZXIuYwppbmRleCAzMjYwZmZkLi4yZDNmNWM1IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyLmMKQEAgLTEzNzcsMTIgKzEzNzcsMTEgQEAKIHZvaWQgdXBkYXRlX3Byb2Nlc3NfdGltZXMoaW50IHVzZXJfdGljaykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50OwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBOb3RlOiB0aGlzIHRpbWVyIGlycSBjb250ZXh0IG11c3QgYmUgYWNjb3VudGVkIGZvciBhcyB3ZWxsLiAqLwogCWFjY291bnRfcHJvY2Vzc190aWNrKHAsIHVzZXJfdGljayk7CiAJcnVuX2xvY2FsX3RpbWVycygpOwotCXJjdV9jaGVja19jYWxsYmFja3MoY3B1LCB1c2VyX3RpY2spOworCXJjdV9jaGVja19jYWxsYmFja3ModXNlcl90aWNrKTsKICNpZmRlZiBDT05GSUdfSVJRX1dPUksKIAlpZiAoaW5faXJxKCkpCiAJCWlycV93b3JrX3RpY2soKTsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggNGUzNWE1ZC4uZDc4MDM1MSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTEyMzgsMjEgKzEyMzgsOSBAQAogCSAgUkNVIGdyYWNlIHBlcmlvZCBwZXJzaXN0cywgYWRkaXRpb25hbCBDUFUgc3RhbGwgd2FybmluZ3MgYXJlCiAJICBwcmludGVkIGF0IG1vcmUgd2lkZWx5IHNwYWNlZCBpbnRlcnZhbHMuCiAKLWNvbmZpZyBSQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UKLQlib29sICJQcmludCBhZGRpdGlvbmFsIHBlci10YXNrIGluZm9ybWF0aW9uIGZvciBSQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIgotCWRlcGVuZHMgb24gVFJFRV9QUkVFTVBUX1JDVQotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGNhdXNlcyBSQ1UgdG8gcHJpbnRrIGRldGFpbGVkIHBlci10YXNrIGluZm9ybWF0aW9uCi0JICBmb3IgYW55IHRhc2tzIHRoYXQgYXJlIHN0YWxsaW5nIHRoZSBjdXJyZW50IFJDVSBncmFjZSBwZXJpb2QuCi0KLQkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgotCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VjaCBjaGVja3MuCi0KIGNvbmZpZyBSQ1VfQ1BVX1NUQUxMX0lORk8KIAlib29sICJQcmludCBhZGRpdGlvbmFsIGRpYWdub3N0aWNzIG9uIFJDVSBDUFUgc3RhbGwiCi0JZGVwZW5kcyBvbiAoVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVSkgJiYgREVCVUdfS0VSTkVMCisJZGVwZW5kcyBvbiAoVFJFRV9SQ1UgfHwgUFJFRU1QVF9SQ1UpICYmIERFQlVHX0tFUk5FTAogCWRlZmF1bHQgbgogCWhlbHAKIAkgIEZvciBlYWNoIHN0YWxsZWQgQ1BVIHRoYXQgaXMgYXdhcmUgb2YgdGhlIGN1cnJlbnQgUkNVIGdyYWNlCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA4NjM5ZjZiLi5iODUyYjEwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTg2MCw3ICs4NjAsNiBAQAogCWludCBjb3VudDsKIAogCXJlc3VsdCA9IHBzLT5hY3Rpb24ocCwgcGZuKTsKLQlhY3Rpb25fcmVzdWx0KHBmbiwgcHMtPm1zZywgcmVzdWx0KTsKIAogCWNvdW50ID0gcGFnZV9jb3VudChwKSAtIDE7CiAJaWYgKHBzLT5hY3Rpb24gPT0gbWVfc3dhcGNhY2hlX2RpcnR5ICYmIHJlc3VsdCA9PSBERUxBWUVEKQpAQCAtODcxLDYgKzg3MCw3IEBACiAJCSAgICAgICBwZm4sIHBzLT5tc2csIGNvdW50KTsKIAkJcmVzdWx0ID0gRkFJTEVEOwogCX0KKwlhY3Rpb25fcmVzdWx0KHBmbiwgcHMtPm1zZywgcmVzdWx0KTsKIAogCS8qIENvdWxkIGRvIG1vcmUgY2hlY2tzIGhlcmUgaWYgcGFnZSBsb29rcyBvayAqLwogCS8qCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGQ1ZjJhZTkuLjBiM2Y2YzcgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC0yMjAsOSArMjIwLDYgQEAKIAkvKiBJcyBpdCBmcm9tIDAgdG8gfjA/ICovCiAJdGxiLT5mdWxsbW0gICAgID0gIShzdGFydCB8IChlbmQrMSkpOwogCXRsYi0+bmVlZF9mbHVzaF9hbGwgPSAwOwotCXRsYi0+c3RhcnQJPSBzdGFydDsKLQl0bGItPmVuZAk9IGVuZDsKLQl0bGItPm5lZWRfZmx1c2ggPSAwOwogCXRsYi0+bG9jYWwubmV4dCA9IE5VTEw7CiAJdGxiLT5sb2NhbC5uciAgID0gMDsKIAl0bGItPmxvY2FsLm1heCAgPSBBUlJBWV9TSVpFKHRsYi0+X19wYWdlcyk7CkBAIC0yMzIsMTUgKzIyOSwyMCBAQAogI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCiAJdGxiLT5iYXRjaCA9IE5VTEw7CiAjZW5kaWYKKworCV9fdGxiX3Jlc2V0X3JhbmdlKHRsYik7CiB9CiAKIHN0YXRpYyB2b2lkIHRsYl9mbHVzaF9tbXVfdGxib25seShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQogewotCXRsYi0+bmVlZF9mbHVzaCA9IDA7CisJaWYgKCF0bGItPmVuZCkKKwkJcmV0dXJuOworCiAJdGxiX2ZsdXNoKHRsYik7CiAjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKIAl0bGJfdGFibGVfZmx1c2godGxiKTsKICNlbmRpZgorCV9fdGxiX3Jlc2V0X3JhbmdlKHRsYik7CiB9CiAKIHN0YXRpYyB2b2lkIHRsYl9mbHVzaF9tbXVfZnJlZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQpAQCAtMjU2LDggKzI1OCw2IEBACiAKIHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQogewotCWlmICghdGxiLT5uZWVkX2ZsdXNoKQotCQlyZXR1cm47CiAJdGxiX2ZsdXNoX21tdV90bGJvbmx5KHRsYik7CiAJdGxiX2ZsdXNoX21tdV9mcmVlKHRsYik7CiB9CkBAIC0yOTIsNyArMjkyLDcgQEAKIHsKIAlzdHJ1Y3QgbW11X2dhdGhlcl9iYXRjaCAqYmF0Y2g7CiAKLQlWTV9CVUdfT04oIXRsYi0+bmVlZF9mbHVzaCk7CisJVk1fQlVHX09OKCF0bGItPmVuZCk7CiAKIAliYXRjaCA9IHRsYi0+YWN0aXZlOwogCWJhdGNoLT5wYWdlc1tiYXRjaC0+bnIrK10gPSBwYWdlOwpAQCAtMzU5LDggKzM1OSw2IEBACiB7CiAJc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqKmJhdGNoID0gJnRsYi0+YmF0Y2g7CiAKLQl0bGItPm5lZWRfZmx1c2ggPSAxOwotCiAJLyoKIAkgKiBXaGVuIHRoZXJlJ3MgbGVzcyB0aGVuIHR3byB1c2VycyBvZiB0aGlzIG1tIHRoZXJlIGNhbm5vdCBiZSBhCiAJICogY29uY3VycmVudCBwYWdlLXRhYmxlIHdhbGsuCkBAIC0xMTg2LDIwICsxMTg0LDggQEAKIAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIAogCS8qIERvIHRoZSBhY3R1YWwgVExCIGZsdXNoIGJlZm9yZSBkcm9wcGluZyBwdGwgKi8KLQlpZiAoZm9yY2VfZmx1c2gpIHsKLQkJdW5zaWduZWQgbG9uZyBvbGRfZW5kOwotCi0JCS8qCi0JCSAqIEZsdXNoIHRoZSBUTEIganVzdCBmb3IgdGhlIHByZXZpb3VzIHNlZ21lbnQsCi0JCSAqIHRoZW4gdXBkYXRlIHRoZSByYW5nZSB0byBiZSB0aGUgcmVtYWluaW5nCi0JCSAqIFRMQiByYW5nZS4KLQkJICovCi0JCW9sZF9lbmQgPSB0bGItPmVuZDsKLQkJdGxiLT5lbmQgPSBhZGRyOworCWlmIChmb3JjZV9mbHVzaCkKIAkJdGxiX2ZsdXNoX21tdV90bGJvbmx5KHRsYik7Ci0JCXRsYi0+c3RhcnQgPSBhZGRyOwotCQl0bGItPmVuZCA9IG9sZF9lbmQ7Ci0JfQogCXB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpOwogCiAJLyoKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCBhZTkxOTg5Li5iNmMwYTc3IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0yNjAxLDYgKzI2MDEsOCBAQAogCWRldGFjaF92bWFzX3RvX2JlX3VubWFwcGVkKG1tLCB2bWEsIHByZXYsIGVuZCk7CiAJdW5tYXBfcmVnaW9uKG1tLCB2bWEsIHByZXYsIHN0YXJ0LCBlbmQpOwogCisJYXJjaF91bm1hcChtbSwgdm1hLCBzdGFydCwgZW5kKTsKKwogCS8qIEZpeCB1cCBhbGwgb3RoZXIgVk0gaW5mb3JtYXRpb24gKi8KIAlyZW1vdmVfdm1hX2xpc3QobW0sIHZtYSk7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwppbmRleCBhZjczYmMzLi40MTBkZDVlIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCkBAIC0xMDEsMTEgKzEwMSwxMSBAQAogI2RlZmluZSBfX2dldF9ycG5fc3RvcF9iaXRzKGxpbmUpICgoKGxpbmUpID4+IDIpICYgMHgxKQogI2RlZmluZSBfX2dldF9ycG5fcGFyaXR5KGxpbmUpICAgICgoKGxpbmUpID4+IDMpICYgMHg3KQogCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmZjb21tX3dxKTsKKwogc3RhdGljIHZvaWQgcmZjb21tX3NjaGVkdWxlKHZvaWQpCiB7Ci0JaWYgKCFyZmNvbW1fdGhyZWFkKQotCQlyZXR1cm47Ci0Jd2FrZV91cF9wcm9jZXNzKHJmY29tbV90aHJlYWQpOworCXdha2VfdXBfYWxsKCZyZmNvbW1fd3EpOwogfQogCiAvKiAtLS0tIFJGQ09NTSBGQ1MgY29tcHV0YXRpb24gLS0tLSAqLwpAQCAtMjA4NiwyNCArMjA4NiwyMiBAQAogCiBzdGF0aWMgaW50IHJmY29tbV9ydW4odm9pZCAqdW51c2VkKQogeworCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CiAJQlRfREJHKCIiKTsKIAogCXNldF91c2VyX25pY2UoY3VycmVudCwgLTEwKTsKIAogCXJmY29tbV9hZGRfbGlzdGVuZXIoQkRBRERSX0FOWSk7CiAKLQl3aGlsZSAoMSkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCQlicmVhazsKKwlhZGRfd2FpdF9xdWV1ZSgmcmZjb21tX3dxLCAmd2FpdCk7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAogCQkvKiBQcm9jZXNzIHN0dWZmICovCiAJCXJmY29tbV9wcm9jZXNzX3Nlc3Npb25zKCk7CiAKLQkJc2NoZWR1bGUoKTsKKwkJd2FpdF93b2tlbigmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAJfQotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcmZjb21tX3dxLCAmd2FpdCk7CiAKIAlyZmNvbW1fa2lsbF9saXN0ZW5lcigpOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDk0NWJiZDAuLjNhY2ZmMDkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC03MjAwLDExICs3MjAwLDEwIEBACiAJICovCiAJc3RydWN0IG5ldCAqbmV0OwogCWJvb2wgdW5yZWdpc3RlcmluZzsKLQlERUZJTkVfV0FJVCh3YWl0KTsKKwlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCisJYWRkX3dhaXRfcXVldWUoJm5ldGRldl91bnJlZ2lzdGVyaW5nX3dxLCAmd2FpdCk7CiAJZm9yICg7OykgewotCQlwcmVwYXJlX3RvX3dhaXQoJm5ldGRldl91bnJlZ2lzdGVyaW5nX3dxLCAmd2FpdCwKLQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCXVucmVnaXN0ZXJpbmcgPSBmYWxzZTsKIAkJcnRubF9sb2NrKCk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfbGlzdCwgZXhpdF9saXN0KSB7CkBAIC03MjE2LDkgKzcyMTUsMTAgQEAKIAkJaWYgKCF1bnJlZ2lzdGVyaW5nKQogCQkJYnJlYWs7CiAJCV9fcnRubF91bmxvY2soKTsKLQkJc2NoZWR1bGUoKTsKKworCQl3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCX0KLQlmaW5pc2hfd2FpdCgmbmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EsICZ3YWl0KTsKIH0KIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA3NjMyMWVhLi44OGU4ZGUzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtMzY1LDExICszNjUsMTAgQEAKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAJYm9vbCB1bnJlZ2lzdGVyaW5nOwotCURFRklORV9XQUlUKHdhaXQpOworCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CiAKKwlhZGRfd2FpdF9xdWV1ZSgmbmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EsICZ3YWl0KTsKIAlmb3IgKDs7KSB7Ci0JCXByZXBhcmVfdG9fd2FpdCgmbmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EsICZ3YWl0LAotCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJdW5yZWdpc3RlcmluZyA9IGZhbHNlOwogCQlydG5sX2xvY2soKTsKIAkJZm9yX2VhY2hfbmV0KG5ldCkgewpAQCAtMzgxLDkgKzM4MCwxMCBAQAogCQlpZiAoIXVucmVnaXN0ZXJpbmcpCiAJCQlicmVhazsKIAkJX19ydG5sX3VubG9jaygpOwotCQlzY2hlZHVsZSgpOworCisJCXdhaXRfd29rZW4oJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAJfQotCWZpbmlzaF93YWl0KCZuZXRkZXZfdW5yZWdpc3RlcmluZ193cSwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZuZXRkZXZfdW5yZWdpc3RlcmluZ193cSwgJndhaXQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvS2NvbmZpZyBiL25ldC9zdW5ycGMvS2NvbmZpZwppbmRleCAwNzU0ZDBmLi5mYjc4MTE3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL0tjb25maWcKKysrIGIvbmV0L3N1bnJwYy9LY29uZmlnCkBAIC0zNSw2ICszNSw3IEBACiBjb25maWcgU1VOUlBDX0RFQlVHCiAJYm9vbCAiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmciCiAJZGVwZW5kcyBvbiBTVU5SUEMgJiYgU1lTQ1RMCisJc2VsZWN0IERFQlVHX0ZTCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHN5c2N0bC1iYXNlZCBkZWJ1Z2dpbmcgaW50ZXJmYWNlCiAJICB0aGF0IGlzIGJlIHVzZWQgYnkgdGhlICdycGNkZWJ1ZycgdXRpbGl0eSB0byB0dXJuIG9uIG9yIG9mZgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9NYWtlZmlsZSBiL25ldC9zdW5ycGMvTWFrZWZpbGUKaW5kZXggZTVhN2ExYy4uMTVlNmY2YyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9NYWtlZmlsZQorKysgYi9uZXQvc3VucnBjL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiAJICAgIGFkZHIubyBycGNiX2NsbnQubyB0aW1lci5vIHhkci5vIFwKIAkgICAgc3VucnBjX3N5bXMubyBjYWNoZS5vIHJwY19waXBlLm8gXAogCSAgICBzdmNfeHBydC5vCitzdW5ycGMtJChDT05GSUdfU1VOUlBDX0RFQlVHKSArPSBkZWJ1Z2ZzLm8KIHN1bnJwYy0kKENPTkZJR19TVU5SUENfQkFDS0NIQU5ORUwpICs9IGJhY2tjaGFubmVsX3Jxc3QubyBiY19zdmMubwogc3VucnBjLSQoQ09ORklHX1BST0NfRlMpICs9IHN0YXRzLm8KIHN1bnJwYy0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGguYyBiL25ldC9zdW5ycGMvYXV0aC5jCmluZGV4IDM4M2ViOTEuLjQ3ZjM4YmUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19hcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApAQCAtNjQ2LDcgKzY0Niw3IEBACiAJY3JlZC0+Y3JfYXV0aCA9IGF1dGg7CiAJY3JlZC0+Y3Jfb3BzID0gb3BzOwogCWNyZWQtPmNyX2V4cGlyZSA9IGppZmZpZXM7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCWNyZWQtPmNyX21hZ2ljID0gUlBDQVVUSF9DUkVEX01BR0lDOwogI2VuZGlmCiAJY3JlZC0+Y3JfdWlkID0gYWNyZWQtPnVpZDsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nZW5lcmljLmMgYi9uZXQvc3VucnBjL2F1dGhfZ2VuZXJpYy5jCmluZGV4IDZmNmI4MjkuLjQxMjQ4YjEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nZW5lcmljLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dlbmVyaWMuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9kZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCmluZGV4IDUzZWQ4ZDMuLmRhY2UxM2QgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKQEAgLTY2LDcgKzY2LDcgQEAKICNkZWZpbmUgR1NTX0tFWV9FWFBJUkVfVElNRU8gMjQwCiBzdGF0aWMgdW5zaWduZWQgaW50IGdzc19rZXlfZXhwaXJlX3RpbWVvID0gR1NTX0tFWV9FWFBJUkVfVElNRU87CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19nZW5lcmljX3Rva2VuLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19nZW5lcmljX3Rva2VuLmMKaW5kZXggYzU4NmU5Mi4uMjU0ZGVmZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfZ2VuZXJpY190b2tlbi5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2dlbmVyaWNfdG9rZW4uYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3NfYXNuMS5oPgogCiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkgICAgICAgIFJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfY3J5cHRvLmMKaW5kZXggZjVlZDlmNi4uYjU0MDhlOCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19rcmI1Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZICAgICAgICBSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfa2V5cy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9rZXlzLmMKaW5kZXggMjQ1ODliZC4uMjM0ZmE4ZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9rZXlzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9rZXlzLmMKQEAgLTYxLDcgKzYxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CiAjaW5jbHVkZSA8bGludXgvbGNtLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkgICAgICAgIFJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwppbmRleCAwZDNjMTU4Li4yOGRiNDQyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3Nfa3JiNV9lbmN0eXBlcy5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZWFsLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYwppbmRleCA0Mjc2OGU1Li4xZDc0ZDY1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYwpAQCAtNjQsNyArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZICAgICAgICBSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfc2VxbnVtLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlcW51bS5jCmluZGV4IDYyYWM5MGMuLjIwZDU1YzcgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfc2VxbnVtLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZXFudW0uYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3Nfa3JiNS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZICAgICAgICBSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfdW5zZWFsLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3Vuc2VhbC5jCmluZGV4IDZjOTgxZGQuLmRjZjk1MTUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfdW5zZWFsLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV91bnNlYWwuYwpAQCAtNjIsNyArNjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3Nfa3JiNS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZICAgICAgICBSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfd3JhcC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKaW5kZXggNGI2MTRjNi4uY2E3ZTkyYSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYwppbmRleCA5MmQ1YWI5Li43MDYzZDg1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZ3NzX2FwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkgICAgICAgIFJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfcnBjX3hkci5oIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfcnBjX3hkci5oCmluZGV4IDY4NWE2ODguLjlkODhjNjIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3JwY194ZHIuaAorKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19ycGNfeGRyLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94cHJ0c29jay5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCmluZGV4IGM1NDhhYjIuLmRlODU2ZGQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlICJnc3NfcnBjX3VwY2FsbC5oIgogCiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfbnVsbC5jIGIvbmV0L3N1bnJwYy9hdXRoX251bGwuYwppbmRleCA3MTJjMTIzLi5jMmEyYjU4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfbnVsbC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9udWxsLmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAJLmNyX29wcwkJPSAmbnVsbF9jcmVkb3BzLAogCS5jcl9jb3VudAk9IEFUT01JQ19JTklUKDEpLAogCS5jcl9mbGFncwk9IDFVTCA8PCBSUENBVVRIX0NSRURfVVBUT0RBVEUsCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCS5jcl9tYWdpYwk9IFJQQ0FVVEhfQ1JFRF9NQUdJQywKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF91bml4LmMgYi9uZXQvc3VucnBjL2F1dGhfdW5peC5jCmluZGV4IGQ1ZDY5MjMuLjRmZWRhMmQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF91bml4LmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX3VuaXguYwpAQCAtMjUsNyArMjUsNyBAQAogCiAjZGVmaW5lIFVOWF9XUklURVNMQUNLCQkoMjEgKyAoVU5YX01BWE5PREVOQU1FID4+IDIpKQogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9iYWNrY2hhbm5lbF9ycXN0LmMgYi9uZXQvc3VucnBjL2JhY2tjaGFubmVsX3Jxc3QuYwppbmRleCA5NzYxYTBkLi42NTFmNDlhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2JhY2tjaGFubmVsX3Jxc3QuYworKysgYi9uZXQvc3VucnBjL2JhY2tjaGFubmVsX3Jxc3QuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9iY194cHJ0Lmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfVFJBTlMKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NsbnQuYyBiL25ldC9zdW5ycGMvY2xudC5jCmluZGV4IDlhY2Q2Y2UuLjA1ZGExMmEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2xudC5jCisrKyBiL25ldC9zdW5ycGMvY2xudC5jCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAic3VucnBjLmgiCiAjaW5jbHVkZSAibmV0bnMuaCIKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfQ0FMTAogI2VuZGlmCiAKQEAgLTMwNSw2ICszMDUsMTAgQEAKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBpcGVmc19zYjsKIAlpbnQgZXJyOwogCisJZXJyID0gcnBjX2NsbnRfZGVidWdmc19yZWdpc3RlcihjbG50KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJcGlwZWZzX3NiID0gcnBjX2dldF9zYl9uZXQobmV0KTsKIAlpZiAocGlwZWZzX3NiKSB7CiAJCWVyciA9IHJwY19zZXR1cF9waXBlZGlyKHBpcGVmc19zYiwgY2xudCk7CkBAIC0zMzEsNiArMzM1LDcgQEAKIG91dDoKIAlpZiAocGlwZWZzX3NiKQogCQlycGNfcHV0X3NiX25ldChuZXQpOworCXJwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihjbG50KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02NzAsNiArNjc1LDcgQEAKIAogCXJwY191bnJlZ2lzdGVyX2NsaWVudChjbG50KTsKIAlfX3JwY19jbG50X3JlbW92ZV9waXBlZGlyKGNsbnQpOworCXJwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihjbG50KTsKIAogCS8qCiAJICogQSBuZXcgdHJhbnNwb3J0IHdhcyBjcmVhdGVkLiAgImNsbnQiIHRoZXJlZm9yZQpAQCAtNzcxLDYgKzc3Nyw3IEBACiAJCQlyY3VfZGVyZWZlcmVuY2UoY2xudC0+Y2xfeHBydCktPnNlcnZlcm5hbWUpOwogCWlmIChjbG50LT5jbF9wYXJlbnQgIT0gY2xudCkKIAkJcGFyZW50ID0gY2xudC0+Y2xfcGFyZW50OworCXJwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihjbG50KTsKIAlycGNfY2xudF9yZW1vdmVfcGlwZWRpcihjbG50KTsKIAlycGNfdW5yZWdpc3Rlcl9jbGllbnQoY2xudCk7CiAJcnBjX2ZyZWVfaW9zdGF0cyhjbG50LT5jbF9tZXRyaWNzKTsKQEAgLTEzOTYsOCArMTQwMyw5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGNfcmVzdGFydF9jYWxsKTsKIAotI2lmZGVmIFJQQ19ERUJVRwotc3RhdGljIGNvbnN0IGNoYXIgKnJwY19wcm9jX25hbWUoY29uc3Qgc3RydWN0IHJwY190YXNrICp0YXNrKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKK2NvbnN0IGNoYXIKKypycGNfcHJvY19uYW1lKGNvbnN0IHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKIAljb25zdCBzdHJ1Y3QgcnBjX3Byb2NpbmZvICpwcm9jID0gdGFzay0+dGtfbXNnLnJwY19wcm9jOwogCkBAIC0yNDIxLDcgKzI0MjksNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnBjX2NhbGxfbnVsbCk7CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiBzdGF0aWMgdm9pZCBycGNfc2hvd19oZWFkZXIodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICItcGlkLSBmbGdzIHN0YXR1cyAtY2xpZW50LSAtLXJxc3RwLSAiCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2RlYnVnZnMuYyBiL25ldC9zdW5ycGMvZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MTFmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvc3VucnBjL2RlYnVnZnMuYwpAQCAtMCwwICsxLDI5MiBAQAorLyoqCisgKiBkZWJ1Z2ZzIGludGVyZmFjZSBmb3Igc3VucnBjCisgKgorICogKGMpIDIwMTQgSmVmZiBMYXl0b24gPGpsYXl0b25AcHJpbWFyeWRhdGEuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KKyNpbmNsdWRlICJuZXRucy5oIgorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqdG9wZGlyOworc3RhdGljIHN0cnVjdCBkZW50cnkgKnJwY19jbG50X2RpcjsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpycGNfeHBydF9kaXI7CisKK3N0cnVjdCBycGNfY2xudF9pdGVyIHsKKwlzdHJ1Y3QgcnBjX2NsbnQJKmNsbnQ7CisJbG9mZl90CQlwb3M7Cit9OworCitzdGF0aWMgaW50Cit0YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqdikKK3sKKwl1MzIgeGlkID0gMDsKKwlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2sgPSB2OworCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IHRhc2stPnRrX2NsaWVudDsKKwljb25zdCBjaGFyICpycGNfd2FpdHEgPSAibm9uZSI7CisKKwlpZiAoUlBDX0lTX1FVRVVFRCh0YXNrKSkKKwkJcnBjX3dhaXRxID0gcnBjX3FuYW1lKHRhc2stPnRrX3dhaXRxdWV1ZSk7CisKKwlpZiAodGFzay0+dGtfcnFzdHApCisJCXhpZCA9IGJlMzJfdG9fY3B1KHRhc2stPnRrX3Jxc3RwLT5ycV94aWQpOworCisJc2VxX3ByaW50ZihmLCAiJTV1ICUwNHggJTZkIDB4JXggMHgleCAlOGxkICVwcyAlc3YldSAlcyBhOiVwcyBxOiVzXG4iLAorCQl0YXNrLT50a19waWQsIHRhc2stPnRrX2ZsYWdzLCB0YXNrLT50a19zdGF0dXMsCisJCWNsbnQtPmNsX2NsaWQsIHhpZCwgdGFzay0+dGtfdGltZW91dCwgdGFzay0+dGtfb3BzLAorCQljbG50LT5jbF9wcm9ncmFtLT5uYW1lLCBjbG50LT5jbF92ZXJzLCBycGNfcHJvY19uYW1lKHRhc2spLAorCQl0YXNrLT50a19hY3Rpb24sIHJwY193YWl0cSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICoKK3Rhc2tzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwcG9zKQorCV9fYWNxdWlyZXMoJmNsbnQtPmNsX2xvY2spCit7CisJc3RydWN0IHJwY19jbG50X2l0ZXIgKml0ZXIgPSBmLT5wcml2YXRlOworCWxvZmZfdCBwb3MgPSAqcHBvczsKKwlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQgPSBpdGVyLT5jbG50OworCXN0cnVjdCBycGNfdGFzayAqdGFzazsKKworCWl0ZXItPnBvcyA9IHBvcyArIDE7CisJc3Bpbl9sb2NrKCZjbG50LT5jbF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRhc2ssICZjbG50LT5jbF90YXNrcywgdGtfdGFzaykKKwkJaWYgKHBvcy0tID09IDApCisJCQlyZXR1cm4gdGFzazsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKgordGFza3NfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBycGNfY2xudF9pdGVyICppdGVyID0gZi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQgPSBpdGVyLT5jbG50OworCXN0cnVjdCBycGNfdGFzayAqdGFzayA9IHY7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCA9IHRhc2stPnRrX3Rhc2submV4dDsKKworCSsraXRlci0+cG9zOworCSsrKnBvczsKKworCS8qIElmIHRoZXJlJ3MgYW5vdGhlciB0YXNrIG9uIGxpc3QsIHJldHVybiBpdCAqLworCWlmIChuZXh0ID09ICZjbG50LT5jbF90YXNrcykKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGxpc3RfZW50cnkobmV4dCwgc3RydWN0IHJwY190YXNrLCB0a190YXNrKTsKK30KKworc3RhdGljIHZvaWQKK3Rhc2tzX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmNsbnQtPmNsX2xvY2spCit7CisJc3RydWN0IHJwY19jbG50X2l0ZXIgKml0ZXIgPSBmLT5wcml2YXRlOworCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IGl0ZXItPmNsbnQ7CisKKwlzcGluX3VubG9jaygmY2xudC0+Y2xfbG9jayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdGFza3Nfc2VxX29wZXJhdGlvbnMgPSB7CisJLnN0YXJ0CT0gdGFza3Nfc3RhcnQsCisJLm5leHQJPSB0YXNrc19uZXh0LAorCS5zdG9wCT0gdGFza3Nfc3RvcCwKKwkuc2hvdwk9IHRhc2tzX3Nob3csCit9OworCitzdGF0aWMgaW50IHRhc2tzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlscCwgJnRhc2tzX3NlcV9vcGVyYXRpb25zLAorCQkJCQlzaXplb2Yoc3RydWN0IHJwY19jbG50X2l0ZXIpKTsKKworCWlmICghcmV0KSB7CisJCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCQlzdHJ1Y3QgcnBjX2NsbnRfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKKworCQlpdGVyLT5jbG50ID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJml0ZXItPmNsbnQtPmNsX2NvdW50KSkgeworCQkJc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlscCk7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAordGFza3NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcnBjX2NsbnRfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKKworCXJwY19yZWxlYXNlX2NsaWVudChpdGVyLT5jbG50KTsKKwlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlscCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRhc2tzX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHRhc2tzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSB0YXNrc19yZWxlYXNlLAorfTsKKworaW50CitycGNfY2xudF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBycGNfY2xudCAqY2xudCkKK3sKKwlpbnQgbGVuLCBlcnI7CisJY2hhciBuYW1lWzI0XTsgLyogZW5vdWdoIGZvciAiLi4vLi4vcnBjX3hwcnQvICsgOCBoZXggZGlnaXRzICsgTlVMTCAqLworCisJLyogQWxyZWFkeSByZWdpc3RlcmVkPyAqLworCWlmIChjbG50LT5jbF9kZWJ1Z2ZzKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiV4IiwgY2xudC0+Y2xfY2xpZCk7CisJaWYgKGxlbiA+PSBzaXplb2YobmFtZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbWFrZSB0aGUgcGVyLWNsaWVudCBkaXIgKi8KKwljbG50LT5jbF9kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHJwY19jbG50X2Rpcik7CisJaWYgKCFjbG50LT5jbF9kZWJ1Z2ZzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIG1ha2UgdGFza3MgZmlsZSAqLworCWVyciA9IC1FTk9NRU07CisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0YXNrcyIsIFNfSUZSRUcgfCBTX0lSVVNSLCBjbG50LT5jbF9kZWJ1Z2ZzLAorCQkJCSBjbG50LCAmdGFza3NfZm9wcykpCisJCWdvdG8gb3V0X2VycjsKKworCWVyciA9IC1FSU5WQUw7CisJcmN1X3JlYWRfbG9jaygpOworCWxlbiA9IHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIi4uLy4uL3JwY194cHJ0LyVzIiwKKwkJCXJjdV9kZXJlZmVyZW5jZShjbG50LT5jbF94cHJ0KS0+ZGVidWdmcy0+ZF9uYW1lLm5hbWUpOworCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChsZW4gPj0gc2l6ZW9mKG5hbWUpKQorCQlnb3RvIG91dF9lcnI7CisKKwllcnIgPSAtRU5PTUVNOworCWlmICghZGVidWdmc19jcmVhdGVfc3ltbGluaygieHBydCIsIGNsbnQtPmNsX2RlYnVnZnMsIG5hbWUpKQorCQlnb3RvIG91dF9lcnI7CisKKwlyZXR1cm4gMDsKK291dF9lcnI6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGNsbnQtPmNsX2RlYnVnZnMpOworCWNsbnQtPmNsX2RlYnVnZnMgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQKK3JwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGNsbnQtPmNsX2RlYnVnZnMpOworCWNsbnQtPmNsX2RlYnVnZnMgPSBOVUxMOworfQorCitzdGF0aWMgaW50Cit4cHJ0X2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCit7CisJc3RydWN0IHJwY194cHJ0ICp4cHJ0ID0gZi0+cHJpdmF0ZTsKKworCXNlcV9wcmludGYoZiwgIm5ldGlkOiAlc1xuIiwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX05FVElEXSk7CisJc2VxX3ByaW50ZihmLCAiYWRkcjogICVzXG4iLCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0pOworCXNlcV9wcmludGYoZiwgInBvcnQ6ICAlc1xuIiwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdKTsKKwlzZXFfcHJpbnRmKGYsICJzdGF0ZTogMHglbHhcbiIsIHhwcnQtPnN0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoreHBydF9pbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcmV0ID0gc2luZ2xlX29wZW4oZmlscCwgeHBydF9pbmZvX3Nob3csIHhwcnQpOworCisJaWYgKCFyZXQpIHsKKwkJaWYgKCF4cHJ0X2dldCh4cHJ0KSkgeworCQkJc2luZ2xlX3JlbGVhc2UoaW5vZGUsIGZpbHApOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cit4cHJ0X2luZm9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSBpbm9kZS0+aV9wcml2YXRlOworCisJeHBydF9wdXQoeHBydCk7CisJcmV0dXJuIHNpbmdsZV9yZWxlYXNlKGlub2RlLCBmaWxwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeHBydF9pbmZvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHhwcnRfaW5mb19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0geHBydF9pbmZvX3JlbGVhc2UsCit9OworCitpbnQKK3JwY194cHJ0X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQoreworCWludCBsZW4sIGlkOworCXN0YXRpYyBhdG9taWNfdAljdXJfaWQ7CisJY2hhcgkJbmFtZVs5XTsgLyogOCBoZXggZGlnaXRzICsgTlVMTCB0ZXJtICovCisKKwlpZCA9ICh1bnNpZ25lZCBpbnQpYXRvbWljX2luY19yZXR1cm4oJmN1cl9pZCk7CisKKwlsZW4gPSBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIleCIsIGlkKTsKKwlpZiAobGVuID49IHNpemVvZihuYW1lKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBtYWtlIHRoZSBwZXItY2xpZW50IGRpciAqLworCXhwcnQtPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgcnBjX3hwcnRfZGlyKTsKKwlpZiAoIXhwcnQtPmRlYnVnZnMpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogbWFrZSB0YXNrcyBmaWxlICovCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbmZvIiwgU19JRlJFRyB8IFNfSVJVU1IsIHhwcnQtPmRlYnVnZnMsCisJCQkJIHhwcnQsICZ4cHJ0X2luZm9fZm9wcykpIHsKKwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHhwcnQtPmRlYnVnZnMpOworCQl4cHJ0LT5kZWJ1Z2ZzID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3JwY194cHJ0X2RlYnVnZnNfdW5yZWdpc3RlcihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHhwcnQtPmRlYnVnZnMpOworCXhwcnQtPmRlYnVnZnMgPSBOVUxMOworfQorCit2b2lkIF9fZXhpdAorc3VucnBjX2RlYnVnZnNfZXhpdCh2b2lkKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZSh0b3BkaXIpOworfQorCitpbnQgX19pbml0CitzdW5ycGNfZGVidWdmc19pbml0KHZvaWQpCit7CisJdG9wZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJzdW5ycGMiLCBOVUxMKTsKKwlpZiAoIXRvcGRpcikKKwkJZ290byBvdXQ7CisKKwlycGNfY2xudF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInJwY19jbG50IiwgdG9wZGlyKTsKKwlpZiAoIXJwY19jbG50X2RpcikKKwkJZ290byBvdXRfcmVtb3ZlOworCisJcnBjX3hwcnRfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJycGNfeHBydCIsIHRvcGRpcik7CisJaWYgKCFycGNfeHBydF9kaXIpCisJCWdvdG8gb3V0X3JlbW92ZTsKKworCXJldHVybiAwOworb3V0X3JlbW92ZToKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUodG9wZGlyKTsKKwl0b3BkaXIgPSBOVUxMOworb3V0OgorCXJldHVybiAtRU5PTUVNOworfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKaW5kZXggMTg5MWExMC4uMDUyMDIwMSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYworKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCkBAIC0zMiw3ICszMiw3IEBACiAKICNpbmNsdWRlICJuZXRucy5oIgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19CSU5ECiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zY2hlZC5jIGIvbmV0L3N1bnJwYy9zY2hlZC5jCmluZGV4IGZlMzQ0MWEuLmQyMGYyMzIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc2NoZWQuYworKysgYi9uZXQvc3VucnBjL3NjaGVkLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2luY2x1ZGUgInN1bnJwYy5oIgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogI2RlZmluZSBSUENEQkdfRkFDSUxJVFkJCVJQQ0RCR19TQ0hFRAogI2VuZGlmCiAKQEAgLTI1OCw3ICsyNTgsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChSUENfREVCVUcpIHx8IGRlZmluZWQoUlBDX1RSQUNFUE9JTlRTKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykgfHwgSVNfRU5BQkxFRChDT05GSUdfVFJBQ0VQT0lOVFMpCiBzdGF0aWMgdm9pZCBycGNfdGFza19zZXRfZGVidWdpbmZvKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKIAlzdGF0aWMgYXRvbWljX3QgcnBjX3BpZDsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3RhdHMuYyBiL25ldC9zdW5ycGMvc3RhdHMuYwppbmRleCA1NDUzMDQ5Li45NzExYTE1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N0YXRzLmMKKysrIGIvbmV0L3N1bnJwYy9zdGF0cy5jCkBAIC0xMTYsNyArMTE2LDE1IEBACiAgKi8KIHN0cnVjdCBycGNfaW9zdGF0cyAqcnBjX2FsbG9jX2lvc3RhdHMoc3RydWN0IHJwY19jbG50ICpjbG50KQogewotCXJldHVybiBrY2FsbG9jKGNsbnQtPmNsX21heHByb2MsIHNpemVvZihzdHJ1Y3QgcnBjX2lvc3RhdHMpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgcnBjX2lvc3RhdHMgKnN0YXRzOworCWludCBpOworCisJc3RhdHMgPSBrY2FsbG9jKGNsbnQtPmNsX21heHByb2MsIHNpemVvZigqc3RhdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNsbnQtPmNsX21heHByb2M7IGkrKykKKwkJCXNwaW5fbG9ja19pbml0KCZzdGF0c1tpXS5vbV9sb2NrKTsKKwl9CisJcmV0dXJuIHN0YXRzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnBjX2FsbG9jX2lvc3RhdHMpOwogCkBAIC0xMzUsMjAgKzE0MywyMSBAQAogICogcnBjX2NvdW50X2lvc3RhdHMgLSB0YWxseSB1cCBwZXItdGFzayBzdGF0cwogICogQHRhc2s6IGNvbXBsZXRlZCBycGNfdGFzawogICogQHN0YXRzOiBhcnJheSBvZiBzdGF0IHN0cnVjdHVyZXMKLSAqCi0gKiBSZWxpZXMgb24gdGhlIGNhbGxlciBmb3Igc2VyaWFsaXphdGlvbi4KICAqLwogdm9pZCBycGNfY291bnRfaW9zdGF0cyhjb25zdCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBycGNfaW9zdGF0cyAqc3RhdHMpCiB7CiAJc3RydWN0IHJwY19ycXN0ICpyZXEgPSB0YXNrLT50a19ycXN0cDsKIAlzdHJ1Y3QgcnBjX2lvc3RhdHMgKm9wX21ldHJpY3M7Ci0Ja3RpbWVfdCBkZWx0YTsKKwlrdGltZV90IGRlbHRhLCBub3c7CiAKIAlpZiAoIXN0YXRzIHx8ICFyZXEpCiAJCXJldHVybjsKIAorCW5vdyA9IGt0aW1lX2dldCgpOwogCW9wX21ldHJpY3MgPSAmc3RhdHNbdGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX3N0YXRpZHhdOwogCisJc3Bpbl9sb2NrKCZvcF9tZXRyaWNzLT5vbV9sb2NrKTsKKwogCW9wX21ldHJpY3MtPm9tX29wcysrOwogCW9wX21ldHJpY3MtPm9tX250cmFucyArPSByZXEtPnJxX250cmFuczsKIAlvcF9tZXRyaWNzLT5vbV90aW1lb3V0cyArPSB0YXNrLT50a190aW1lb3V0czsKQEAgLTE2MSw4ICsxNzAsMTAgQEAKIAogCW9wX21ldHJpY3MtPm9tX3J0dCA9IGt0aW1lX2FkZChvcF9tZXRyaWNzLT5vbV9ydHQsIHJlcS0+cnFfcnR0KTsKIAotCWRlbHRhID0ga3RpbWVfc3ViKGt0aW1lX2dldCgpLCB0YXNrLT50a19zdGFydCk7CisJZGVsdGEgPSBrdGltZV9zdWIobm93LCB0YXNrLT50a19zdGFydCk7CiAJb3BfbWV0cmljcy0+b21fZXhlY3V0ZSA9IGt0aW1lX2FkZChvcF9tZXRyaWNzLT5vbV9leGVjdXRlLCBkZWx0YSk7CisKKwlzcGluX3VubG9jaygmb3BfbWV0cmljcy0+b21fbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGNfY291bnRfaW9zdGF0cyk7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYyBiL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYwppbmRleCBjZDMwMTIwLi5lMzdmYmVkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMKKysrIGIvbmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jCkBAIC05NywxMyArOTcsMjAgQEAKIAllcnIgPSByZWdpc3Rlcl9ycGNfcGlwZWZzKCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ0OwotI2lmZGVmIFJQQ19ERUJVRworCisJZXJyID0gc3VucnBjX2RlYnVnZnNfaW5pdCgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0NTsKKworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAlycGNfcmVnaXN0ZXJfc3lzY3RsKCk7CiAjZW5kaWYKIAlzdmNfaW5pdF94cHJ0X3NvY2soKTsJLyogc3ZjIHNvY2sgdHJhbnNwb3J0ICovCiAJaW5pdF9zb2NrZXRfeHBydCgpOwkvKiBjbG50IHNvY2sgdHJhbnNwb3J0ICovCiAJcmV0dXJuIDA7CiAKK291dDU6CisJdW5yZWdpc3Rlcl9ycGNfcGlwZWZzKCk7CiBvdXQ0OgogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmc3VucnBjX25ldF9vcHMpOwogb3V0MzoKQEAgLTEyMCwxMCArMTI3LDExIEBACiAJcnBjYXV0aF9yZW1vdmVfbW9kdWxlKCk7CiAJY2xlYW51cF9zb2NrZXRfeHBydCgpOwogCXN2Y19jbGVhbnVwX3hwcnRfc29jaygpOworCXN1bnJwY19kZWJ1Z2ZzX2V4aXQoKTsKIAl1bnJlZ2lzdGVyX3JwY19waXBlZnMoKTsKIAlycGNfZGVzdHJveV9tZW1wb29sKCk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZzdW5ycGNfbmV0X29wcyk7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCXJwY191bnJlZ2lzdGVyX3N5c2N0bCgpOwogI2VuZGlmCiAJcmN1X2JhcnJpZXIoKTsgLyogV2FpdCBmb3IgY29tcGxldGlvbiBvZiBjYWxsX3JjdSgpJ3MgKi8KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IGNhOGE3OTUuLjI3ODNmZDggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjLmMKKysrIGIvbmV0L3N1bnJwYy9zdmMuYwpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2JjX3hwcnQuaD4KIAorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zdW5ycGMuaD4KKwogI2RlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX1NWQ0RTUAogCiBzdGF0aWMgdm9pZCBzdmNfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCk7CkBAIC0xMDQwLDcgKzEwNDIsNyBAQAogLyoKICAqIGRwcmludGsgdGhlIGdpdmVuIGVycm9yIHdpdGggdGhlIGFkZHJlc3Mgb2YgdGhlIGNsaWVudCB0aGF0IGNhdXNlZCBpdC4KICAqLwotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIHN0YXRpYyBfX3ByaW50ZigyLCAzKQogdm9pZCBzdmNfcHJpbnRrKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewpAQCAtMTMxNCwyNCArMTMxNiwyNSBAQAogCXJxc3RwLT5ycV9yZXMudGFpbFswXS5pb3ZfYmFzZSA9IE5VTEw7CiAJcnFzdHAtPnJxX3Jlcy50YWlsWzBdLmlvdl9sZW4gPSAwOwogCi0JcnFzdHAtPnJxX3hpZCA9IHN2Y19nZXR1MzIoYXJndik7Ci0KIAlkaXIgID0gc3ZjX2dldG5sKGFyZ3YpOwogCWlmIChkaXIgIT0gMCkgewogCQkvKiBkaXJlY3Rpb24gIT0gQ0FMTCAqLwogCQlzdmNfcHJpbnRrKHJxc3RwLCAiYmFkIGRpcmVjdGlvbiAlZCwgZHJvcHBpbmcgcmVxdWVzdFxuIiwgZGlyKTsKIAkJc2Vydi0+c3Zfc3RhdHMtPnJwY2JhZGZtdCsrOwotCQlzdmNfZHJvcChycXN0cCk7Ci0JCXJldHVybiAwOworCQlnb3RvIG91dF9kcm9wOwogCX0KIAogCS8qIFJldHVybnMgMSBmb3Igc2VuZCwgMCBmb3IgZHJvcCAqLwotCWlmIChzdmNfcHJvY2Vzc19jb21tb24ocnFzdHAsIGFyZ3YsIHJlc3YpKQotCQlyZXR1cm4gc3ZjX3NlbmQocnFzdHApOwotCWVsc2UgewotCQlzdmNfZHJvcChycXN0cCk7Ci0JCXJldHVybiAwOworCWlmIChsaWtlbHkoc3ZjX3Byb2Nlc3NfY29tbW9uKHJxc3RwLCBhcmd2LCByZXN2KSkpIHsKKwkJaW50IHJldCA9IHN2Y19zZW5kKHJxc3RwKTsKKworCQl0cmFjZV9zdmNfcHJvY2VzcyhycXN0cCwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9CitvdXRfZHJvcDoKKwl0cmFjZV9zdmNfcHJvY2VzcyhycXN0cCwgMCk7CisJc3ZjX2Ryb3AocnFzdHApOworCXJldHVybiAwOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfU1VOUlBDX0JBQ0tDSEFOTkVMKQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCmluZGV4IGMxNzljYTIuLmJiYjNiMDQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYworKysgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3Zjc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94cHJ0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3N1bnJwYy5oPgogCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfU1ZDWFBSVAogCkBAIC03NzMsMzUgKzc3NCw0MyBAQAogCiAJZXJyID0gc3ZjX2FsbG9jX2FyZyhycXN0cCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKIAl0cnlfdG9fZnJlZXplKCk7CiAJY29uZF9yZXNjaGVkKCk7CisJZXJyID0gLUVJTlRSOwogCWlmIChzaWduYWxsZWQoKSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCXJldHVybiAtRUlOVFI7CisJCWdvdG8gb3V0OwogCiAJeHBydCA9IHN2Y19nZXRfbmV4dF94cHJ0KHJxc3RwLCB0aW1lb3V0KTsKLQlpZiAoSVNfRVJSKHhwcnQpKQotCQlyZXR1cm4gUFRSX0VSUih4cHJ0KTsKKwlpZiAoSVNfRVJSKHhwcnQpKSB7CisJCWVyciA9IFBUUl9FUlIoeHBydCk7CisJCWdvdG8gb3V0OworCX0KIAogCWxlbiA9IHN2Y19oYW5kbGVfeHBydChycXN0cCwgeHBydCk7CiAKIAkvKiBObyBkYXRhLCBpbmNvbXBsZXRlIChUQ1ApIHJlYWQsIG9yIGFjY2VwdCgpICovCisJZXJyID0gLUVBR0FJTjsKIAlpZiAobGVuIDw9IDApCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9yZWxlYXNlOwogCiAJY2xlYXJfYml0KFhQVF9PTEQsICZ4cHJ0LT54cHRfZmxhZ3MpOwogCiAJcnFzdHAtPnJxX3NlY3VyZSA9IHhwcnQtPnhwdF9vcHMtPnhwb19zZWN1cmVfcG9ydChycXN0cCk7CiAJcnFzdHAtPnJxX2NoYW5kbGUuZGVmZXIgPSBzdmNfZGVmZXI7CisJcnFzdHAtPnJxX3hpZCA9IHN2Y19nZXR1MzIoJnJxc3RwLT5ycV9hcmcuaGVhZFswXSk7CiAKIAlpZiAoc2Vydi0+c3Zfc3RhdHMpCiAJCXNlcnYtPnN2X3N0YXRzLT5uZXRjbnQrKzsKKwl0cmFjZV9zdmNfcmVjdihycXN0cCwgbGVuKTsKIAlyZXR1cm4gbGVuOwotb3V0Ogorb3V0X3JlbGVhc2U6CiAJcnFzdHAtPnJxX3Jlcy5sZW4gPSAwOwogCXN2Y194cHJ0X3JlbGVhc2UocnFzdHApOwotCXJldHVybiAtRUFHQUlOOworb3V0OgorCXRyYWNlX3N2Y19yZWN2KHJxc3RwLCBlcnIpOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzdmNfcmVjdik7CiAKQEAgLTgyMSwxMiArODMwLDEyIEBACiBpbnQgc3ZjX3NlbmQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIHsKIAlzdHJ1Y3Qgc3ZjX3hwcnQJKnhwcnQ7Ci0JaW50CQlsZW47CisJaW50CQlsZW4gPSAtRUZBVUxUOwogCXN0cnVjdCB4ZHJfYnVmCSp4YjsKIAogCXhwcnQgPSBycXN0cC0+cnFfeHBydDsKIAlpZiAoIXhwcnQpCi0JCXJldHVybiAtRUZBVUxUOworCQlnb3RvIG91dDsKIAogCS8qIHJlbGVhc2UgdGhlIHJlY2VpdmUgc2tiIGJlZm9yZSBzZW5kaW5nIHRoZSByZXBseSAqLwogCXJxc3RwLT5ycV94cHJ0LT54cHRfb3BzLT54cG9fcmVsZWFzZV9ycXN0KHJxc3RwKTsKQEAgLTg0OSw3ICs4NTgsOSBAQAogCXN2Y194cHJ0X3JlbGVhc2UocnFzdHApOwogCiAJaWYgKGxlbiA9PSAtRUNPTk5SRUZVU0VEIHx8IGxlbiA9PSAtRU5PVENPTk4gfHwgbGVuID09IC1FQUdBSU4pCi0JCXJldHVybiAwOworCQlsZW4gPSAwOworb3V0OgorCXRyYWNlX3N2Y19zZW5kKHJxc3RwLCBsZW4pOwogCXJldHVybiBsZW47CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3lzY3RsLmMgYi9uZXQvc3VucnBjL3N5c2N0bC5jCmluZGV4IGM5OWM1OGUuLjg4N2YwMTggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3lzY3RsLmMKKysrIGIvbmV0L3N1bnJwYy9zeXNjdGwuYwpAQCAtMzcsNyArMzcsNyBAQAogdW5zaWduZWQgaW50CW5sbV9kZWJ1ZzsKIEVYUE9SVF9TWU1CT0xfR1BMKG5sbV9kZWJ1Zyk7CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3VucnBjX3RhYmxlX2hlYWRlcjsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHN1bnJwY190YWJsZVtdOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0LmMgYi9uZXQvc3VucnBjL3hwcnQuYwppbmRleCA1NmU0ZTE1Li5lYmJlZmFkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnQuYworKysgYi9uZXQvc3VucnBjL3hwcnQuYwpAQCAtNDksMTMgKzQ5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL21ldHJpY3MuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvYmNfeHBydC5oPgogCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3N1bnJwYy5oPgorCiAjaW5jbHVkZSAic3VucnBjLmgiCiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXMKICAqLwogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19YUFJUCiAjZW5kaWYKIApAQCAtNzcyLDExICs3NzQsMTQgQEAKIAlzdHJ1Y3QgcnBjX3Jxc3QgKmVudHJ5OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnhwcnQtPnJlY3YsIHJxX2xpc3QpCi0JCWlmIChlbnRyeS0+cnFfeGlkID09IHhpZCkKKwkJaWYgKGVudHJ5LT5ycV94aWQgPT0geGlkKSB7CisJCQl0cmFjZV94cHJ0X2xvb2t1cF9ycXN0KHhwcnQsIHhpZCwgMCk7CiAJCQlyZXR1cm4gZW50cnk7CisJCX0KIAogCWRwcmludGsoIlJQQzogICAgICAgeHBydF9sb29rdXBfcnFzdCBkaWQgbm90IGZpbmQgeGlkICUwOHhcbiIsCiAJCQludG9obCh4aWQpKTsKKwl0cmFjZV94cHJ0X2xvb2t1cF9ycXN0KHhwcnQsIHhpZCwgLUVOT0VOVCk7CiAJeHBydC0+c3RhdC5iYWRfeGlkcysrOwogCXJldHVybiBOVUxMOwogfQpAQCAtODEwLDYgKzgxNSw3IEBACiAKIAlkcHJpbnRrKCJSUEM6ICU1dSB4aWQgJTA4eCBjb21wbGV0ZSAoJWQgYnl0ZXMgcmVjZWl2ZWQpXG4iLAogCQkJdGFzay0+dGtfcGlkLCBudG9obChyZXEtPnJxX3hpZCksIGNvcGllZCk7CisJdHJhY2VfeHBydF9jb21wbGV0ZV9ycXN0KHhwcnQsIHJlcS0+cnFfeGlkLCBjb3BpZWQpOwogCiAJeHBydC0+c3RhdC5yZWN2cysrOwogCXJlcS0+cnFfcnR0ID0ga3RpbWVfc3ViKGt0aW1lX2dldCgpLCByZXEtPnJxX3h0aW1lKTsKQEAgLTkyNiw2ICs5MzIsNyBAQAogCiAJcmVxLT5ycV94dGltZSA9IGt0aW1lX2dldCgpOwogCXN0YXR1cyA9IHhwcnQtPm9wcy0+c2VuZF9yZXF1ZXN0KHRhc2spOworCXRyYWNlX3hwcnRfdHJhbnNtaXQoeHBydCwgcmVxLT5ycV94aWQsIHN0YXR1cyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCXRhc2stPnRrX3N0YXR1cyA9IHN0YXR1czsKIAkJcmV0dXJuOwpAQCAtMTI5Niw2ICsxMzAzLDcgQEAKICAqLwogc3RydWN0IHJwY194cHJ0ICp4cHJ0X2NyZWF0ZV90cmFuc3BvcnQoc3RydWN0IHhwcnRfY3JlYXRlICphcmdzKQogeworCWludCBlcnI7CiAJc3RydWN0IHJwY194cHJ0CSp4cHJ0OwogCXN0cnVjdCB4cHJ0X2NsYXNzICp0OwogCkBAIC0xMzM2LDYgKzEzNDQsMTIgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCisJZXJyID0gcnBjX3hwcnRfZGVidWdmc19yZWdpc3Rlcih4cHJ0KTsKKwlpZiAoZXJyKSB7CisJCXhwcnRfZGVzdHJveSh4cHJ0KTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisKIAlkcHJpbnRrKCJSUEM6ICAgICAgIGNyZWF0ZWQgdHJhbnNwb3J0ICVwIHdpdGggJXUgc2xvdHNcbiIsIHhwcnQsCiAJCQl4cHJ0LT5tYXhfcmVxcyk7CiBvdXQ6CkBAIC0xMzUyLDYgKzEzNjYsNyBAQAogCWRwcmludGsoIlJQQzogICAgICAgZGVzdHJveWluZyB0cmFuc3BvcnQgJXBcbiIsIHhwcnQpOwogCWRlbF90aW1lcl9zeW5jKCZ4cHJ0LT50aW1lcik7CiAKKwlycGNfeHBydF9kZWJ1Z2ZzX3VucmVnaXN0ZXIoeHBydCk7CiAJcnBjX2Rlc3Ryb3lfd2FpdF9xdWV1ZSgmeHBydC0+YmluZGluZyk7CiAJcnBjX2Rlc3Ryb3lfd2FpdF9xdWV1ZSgmeHBydC0+cGVuZGluZyk7CiAJcnBjX2Rlc3Ryb3lfd2FpdF9xdWV1ZSgmeHBydC0+c2VuZGluZyk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMKaW5kZXggNjE2NmM5OC4uZGYwMWQxMiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYwpAQCAtNDksMTEgKzQ5LDExIEBACiAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX1RSQU5TCiAjZW5kaWYKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIHN0YXRpYyBjb25zdCBjaGFyIHRyYW5zZmVydHlwZXNbXVsxMl0gPSB7CiAJInB1cmUgaW5saW5lIiwJLyogbm8gY2h1bmtzICovCiAJIiByZWFkIGNodW5rIiwJLyogc29tZSBhcmd1bWVudCB2aWEgcmRtYSByZWFkICovCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYwppbmRleCA2YTQ2MTVkLi5iYmQ2MTU1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogI2luY2x1ZGUgInhwcnRfcmRtYS5oIgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19UUkFOUwogI2VuZGlmCiAKQEAgLTczLDkgKzczLDkgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeHBydF9yZG1hX21heF9pbmxpbmVfd3JpdGUgPSBSUENSRE1BX0RFRl9JTkxJTkU7CiBzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9pbmxpbmVfd3JpdGVfcGFkZGluZzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeHBydF9yZG1hX21lbXJlZ19zdHJhdGVneSA9IFJQQ1JETUFfRlJNUjsKLSAgICAgICAgICAgICAgICBpbnQgeHBydF9yZG1hX3BhZF9vcHRpbWl6ZSA9IDA7CisJCWludCB4cHJ0X3JkbWFfcGFkX29wdGltaXplID0gMTsKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAogc3RhdGljIHVuc2lnbmVkIGludCBtaW5fc2xvdF90YWJsZV9zaXplID0gUlBDUkRNQV9NSU5fU0xPVF9UQUJMRTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3Nsb3RfdGFibGVfc2l6ZSA9IFJQQ1JETUFfTUFYX1NMT1RfVEFCTEU7CkBAIC01OTksNyArNTk5LDcgQEAKIAogCWlmIChyZXEtPnJsX25pb3ZzID09IDApCiAJCXJjID0gcnBjcmRtYV9tYXJzaGFsX3JlcShycXN0KTsKLQllbHNlIGlmIChyX3hwcnQtPnJ4X2lhLnJpX21lbXJlZ19zdHJhdGVneSA9PSBSUENSRE1BX0ZSTVIpCisJZWxzZSBpZiAocl94cHJ0LT5yeF9pYS5yaV9tZW1yZWdfc3RyYXRlZ3kgIT0gUlBDUkRNQV9BTExQSFlTSUNBTCkKIAkJcmMgPSBycGNyZG1hX21hcnNoYWxfY2h1bmtzKHJxc3QsIDApOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbGVkX21hcnNoYWw7CkBAIC03MDUsNyArNzA1LDcgQEAKIAlpbnQgcmM7CiAKIAlkcHJpbnRrKCJSUENSRE1BIE1vZHVsZSBSZW1vdmVkLCBkZXJlZ2lzdGVyIFJQQyBSRE1BIHRyYW5zcG9ydFxuIik7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCWlmIChzdW5ycGNfdGFibGVfaGVhZGVyKSB7CiAJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN1bnJwY190YWJsZV9oZWFkZXIpOwogCQlzdW5ycGNfdGFibGVfaGVhZGVyID0gTlVMTDsKQEAgLTczNiw3ICs3MzYsNyBAQAogCWRwcmludGsoIlx0UGFkZGluZyAlZFxuXHRNZW1yZWcgJWRcbiIsCiAJCXhwcnRfcmRtYV9pbmxpbmVfd3JpdGVfcGFkZGluZywgeHBydF9yZG1hX21lbXJlZ19zdHJhdGVneSk7CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAJaWYgKCFzdW5ycGNfdGFibGVfaGVhZGVyKQogCQlzdW5ycGNfdGFibGVfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN1bnJwY190YWJsZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYyBiL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYwppbmRleCA2MWM0MTI5Li5jOThlNDA2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jCkBAIC01NywxMSArNTcsMTIgQEAKICAqIEdsb2JhbHMvTWFjcm9zCiAgKi8KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfVFJBTlMKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBycGNyZG1hX3Jlc2V0X2ZybXJzKHN0cnVjdCBycGNyZG1hX2lhICopOworc3RhdGljIHZvaWQgcnBjcmRtYV9yZXNldF9mbXJzKHN0cnVjdCBycGNyZG1hX2lhICopOwogCiAvKgogICogaW50ZXJuYWwgZnVuY3Rpb25zCkBAIC0xMDUsMTMgKzEwNiw1MSBAQAogCiBzdGF0aWMgREVDTEFSRV9UQVNLTEVUKHJwY3JkbWFfdGFza2xldF9nLCBycGNyZG1hX3J1bl90YXNrbGV0LCAwVUwpOwogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFzeW5jX2V2ZW50W10gPSB7CisJIkNRIGVycm9yIiwKKwkiUVAgZmF0YWwgZXJyb3IiLAorCSJRUCByZXF1ZXN0IGVycm9yIiwKKwkiUVAgYWNjZXNzIGVycm9yIiwKKwkiY29tbXVuaWNhdGlvbiBlc3RhYmxpc2hlZCIsCisJInNlbmQgcXVldWUgZHJhaW5lZCIsCisJInBhdGggbWlncmF0aW9uIHN1Y2Nlc3NmdWwiLAorCSJwYXRoIG1pZyBlcnJvciIsCisJImRldmljZSBmYXRhbCBlcnJvciIsCisJInBvcnQgYWN0aXZlIiwKKwkicG9ydCBlcnJvciIsCisJIkxJRCBjaGFuZ2UiLAorCSJQX2tleSBjaGFuZ2UiLAorCSJTTSBjaGFuZ2UiLAorCSJTUlEgZXJyb3IiLAorCSJTUlEgbGltaXQgcmVhY2hlZCIsCisJImxhc3QgV1FFIHJlYWNoZWQiLAorCSJjbGllbnQgcmVyZWdpc3RlciIsCisJIkdJRCBjaGFuZ2UiLAorfTsKKworI2RlZmluZSBBU1lOQ19NU0coc3RhdHVzKQkJCQkJXAorCSgoc3RhdHVzKSA8IEFSUkFZX1NJWkUoYXN5bmNfZXZlbnQpID8JCQlcCisJCWFzeW5jX2V2ZW50WyhzdGF0dXMpXSA6ICJ1bmtub3duIGFzeW5jIGVycm9yIikKKworc3RhdGljIHZvaWQKK3JwY3JkbWFfc2NoZWR1bGVfdGFza2xldChzdHJ1Y3QgbGlzdF9oZWFkICpzY2hlZF9saXN0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnBjcmRtYV90a19sb2NrX2csIGZsYWdzKTsKKwlsaXN0X3NwbGljZV90YWlsKHNjaGVkX2xpc3QsICZycGNyZG1hX3Rhc2tsZXRzX2cpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwY3JkbWFfdGtfbG9ja19nLCBmbGFncyk7CisJdGFza2xldF9zY2hlZHVsZSgmcnBjcmRtYV90YXNrbGV0X2cpOworfQorCiBzdGF0aWMgdm9pZAogcnBjcmRtYV9xcF9hc3luY19lcnJvcl91cGNhbGwoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgcnBjcmRtYV9lcCAqZXAgPSBjb250ZXh0OwogCi0JZHByaW50aygiUlBDOiAgICAgICAlczogUVAgZXJyb3IgJVggb24gZGV2aWNlICVzIGVwICVwXG4iLAotCQlfX2Z1bmNfXywgZXZlbnQtPmV2ZW50LCBldmVudC0+ZGV2aWNlLT5uYW1lLCBjb250ZXh0KTsKKwlwcl9lcnIoIlJQQzogICAgICAgJXM6ICVzIG9uIGRldmljZSAlcyBlcCAlcFxuIiwKKwkgICAgICAgX19mdW5jX18sIEFTWU5DX01TRyhldmVudC0+ZXZlbnQpLAorCQlldmVudC0+ZGV2aWNlLT5uYW1lLCBjb250ZXh0KTsKIAlpZiAoZXAtPnJlcF9jb25uZWN0ZWQgPT0gMSkgewogCQllcC0+cmVwX2Nvbm5lY3RlZCA9IC1FSU87CiAJCWVwLT5yZXBfZnVuYyhlcCk7CkBAIC0xMjQsOCArMTYzLDkgQEAKIHsKIAlzdHJ1Y3QgcnBjcmRtYV9lcCAqZXAgPSBjb250ZXh0OwogCi0JZHByaW50aygiUlBDOiAgICAgICAlczogQ1EgZXJyb3IgJVggb24gZGV2aWNlICVzIGVwICVwXG4iLAotCQlfX2Z1bmNfXywgZXZlbnQtPmV2ZW50LCBldmVudC0+ZGV2aWNlLT5uYW1lLCBjb250ZXh0KTsKKwlwcl9lcnIoIlJQQzogICAgICAgJXM6ICVzIG9uIGRldmljZSAlcyBlcCAlcFxuIiwKKwkgICAgICAgX19mdW5jX18sIEFTWU5DX01TRyhldmVudC0+ZXZlbnQpLAorCQlldmVudC0+ZGV2aWNlLT5uYW1lLCBjb250ZXh0KTsKIAlpZiAoZXAtPnJlcF9jb25uZWN0ZWQgPT0gMSkgewogCQllcC0+cmVwX2Nvbm5lY3RlZCA9IC1FSU87CiAJCWVwLT5yZXBfZnVuYyhlcCk7CkBAIC0yNDMsNyArMjgzLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVkX2xpc3Q7CiAJc3RydWN0IGliX3djICp3Y3M7CiAJaW50IGJ1ZGdldCwgY291bnQsIHJjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlJTklUX0xJU1RfSEVBRCgmc2NoZWRfbGlzdCk7CiAJYnVkZ2V0ID0gUlBDUkRNQV9XQ19CVURHRVQgLyBSUENSRE1BX1BPTExTSVpFOwpAQCAtMjYxLDEwICszMDAsNyBAQAogCXJjID0gMDsKIAogb3V0X3NjaGVkdWxlOgotCXNwaW5fbG9ja19pcnFzYXZlKCZycGNyZG1hX3RrX2xvY2tfZywgZmxhZ3MpOwotCWxpc3Rfc3BsaWNlX3RhaWwoJnNjaGVkX2xpc3QsICZycGNyZG1hX3Rhc2tsZXRzX2cpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwY3JkbWFfdGtfbG9ja19nLCBmbGFncyk7Ci0JdGFza2xldF9zY2hlZHVsZSgmcnBjcmRtYV90YXNrbGV0X2cpOworCXJwY3JkbWFfc2NoZWR1bGVfdGFza2xldCgmc2NoZWRfbGlzdCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zMDksMTEgKzM0NSwxOCBAQAogc3RhdGljIHZvaWQKIHJwY3JkbWFfZmx1c2hfY3FzKHN0cnVjdCBycGNyZG1hX2VwICplcCkKIHsKLQlycGNyZG1hX3JlY3ZjcV91cGNhbGwoZXAtPnJlcF9hdHRyLnJlY3ZfY3EsIGVwKTsKLQlycGNyZG1hX3NlbmRjcV91cGNhbGwoZXAtPnJlcF9hdHRyLnNlbmRfY3EsIGVwKTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJTElTVF9IRUFEKHNjaGVkX2xpc3QpOworCisJd2hpbGUgKGliX3BvbGxfY3EoZXAtPnJlcF9hdHRyLnJlY3ZfY3EsIDEsICZ3YykgPiAwKQorCQlycGNyZG1hX3JlY3ZjcV9wcm9jZXNzX3djKCZ3YywgJnNjaGVkX2xpc3QpOworCWlmICghbGlzdF9lbXB0eSgmc2NoZWRfbGlzdCkpCisJCXJwY3JkbWFfc2NoZWR1bGVfdGFza2xldCgmc2NoZWRfbGlzdCk7CisJd2hpbGUgKGliX3BvbGxfY3EoZXAtPnJlcF9hdHRyLnNlbmRfY3EsIDEsICZ3YykgPiAwKQorCQlycGNyZG1hX3NlbmRjcV9wcm9jZXNzX3djKCZ3Yyk7CiB9CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNvbm5bXSA9IHsKIAkiYWRkcmVzcyByZXNvbHZlZCIsCiAJImFkZHJlc3MgZXJyb3IiLApAQCAtMzQ0LDcgKzM4Nyw3IEBACiAJc3RydWN0IHJwY3JkbWFfeHBydCAqeHBydCA9IGlkLT5jb250ZXh0OwogCXN0cnVjdCBycGNyZG1hX2lhICppYSA9ICZ4cHJ0LT5yeF9pYTsKIAlzdHJ1Y3QgcnBjcmRtYV9lcCAqZXAgPSAmeHBydC0+cnhfZXA7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCXN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmVwLT5yZXBfcmVtb3RlX2FkZHI7CiAjZW5kaWYKIAlzdHJ1Y3QgaWJfcXBfYXR0ciBhdHRyOwpAQCAtNDA4LDcgKzQ1MSw3IEBACiAJCWJyZWFrOwogCX0KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAlpZiAoY29ubnN0YXRlID09IDEpIHsKIAkJaW50IGlyZCA9IGF0dHIubWF4X2Rlc3RfcmRfYXRvbWljOwogCQlpbnQgdGlyZCA9IGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzOwpAQCAtNzMzLDcgKzc3Niw5IEBACiAKIAkvKiBzZXQgdHJpZ2dlciBmb3IgcmVxdWVzdGluZyBzZW5kIGNvbXBsZXRpb24gKi8KIAllcC0+cmVwX2NxaW5pdCA9IGVwLT5yZXBfYXR0ci5jYXAubWF4X3NlbmRfd3IvMiAtIDE7Ci0JaWYgKGVwLT5yZXBfY3Fpbml0IDw9IDIpCisJaWYgKGVwLT5yZXBfY3Fpbml0ID4gUlBDUkRNQV9NQVhfVU5TSUdOQUxFRF9TRU5EUykKKwkJZXAtPnJlcF9jcWluaXQgPSBSUENSRE1BX01BWF9VTlNJR05BTEVEX1NFTkRTOworCWVsc2UgaWYgKGVwLT5yZXBfY3Fpbml0IDw9IDIpCiAJCWVwLT5yZXBfY3Fpbml0ID0gMDsKIAlJTklUX0NRQ09VTlQoZXApOwogCWVwLT5yZXBfaWEgPSBpYTsKQEAgLTg2Niw4ICs5MTEsMTkgQEAKIAkJcnBjcmRtYV9lcF9kaXNjb25uZWN0KGVwLCBpYSk7CiAJCXJwY3JkbWFfZmx1c2hfY3FzKGVwKTsKIAotCQlpZiAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSA9PSBSUENSRE1BX0ZSTVIpCisJCXN3aXRjaCAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSkgeworCQljYXNlIFJQQ1JETUFfRlJNUjoKIAkJCXJwY3JkbWFfcmVzZXRfZnJtcnMoaWEpOworCQkJYnJlYWs7CisJCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKKwkJCXJwY3JkbWFfcmVzZXRfZm1ycyhpYSk7CisJCQlicmVhazsKKwkJY2FzZSBSUENSRE1BX0FMTFBIWVNJQ0FMOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyYyA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQogCiAJCXhwcnQgPSBjb250YWluZXJfb2YoaWEsIHN0cnVjdCBycGNyZG1hX3hwcnQsIHJ4X2lhKTsKIAkJaWQgPSBycGNyZG1hX2NyZWF0ZV9pZCh4cHJ0LCBpYSwKQEAgLTEyODcsNiArMTM0MywzNCBAQAogCWtmcmVlKGJ1Zi0+cmJfcG9vbCk7CiB9CiAKKy8qIEFmdGVyIGEgZGlzY29ubmVjdCwgdW5tYXAgYWxsIEZNUnMuCisgKgorICogVGhpcyBpcyBpbnZva2VkIG9ubHkgaW4gdGhlIHRyYW5zcG9ydCBjb25uZWN0IHdvcmtlciBpbiBvcmRlcgorICogdG8gc2VyaWFsaXplIHdpdGggcnBjcmRtYV9yZWdpc3Rlcl9mbXJfZXh0ZXJuYWwoKS4KKyAqLworc3RhdGljIHZvaWQKK3JwY3JkbWFfcmVzZXRfZm1ycyhzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEpCit7CisJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0ID0KKwkJCQljb250YWluZXJfb2YoaWEsIHN0cnVjdCBycGNyZG1hX3hwcnQsIHJ4X2lhKTsKKwlzdHJ1Y3QgcnBjcmRtYV9idWZmZXIgKmJ1ZiA9ICZyX3hwcnQtPnJ4X2J1ZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IHJwY3JkbWFfbXcgKnI7CisJTElTVF9IRUFEKGwpOworCWludCByYzsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmYnVmLT5yYl9hbGwpIHsKKwkJciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgcnBjcmRtYV9tdywgbXdfYWxsKTsKKworCQlJTklUX0xJU1RfSEVBRCgmbCk7CisJCWxpc3RfYWRkKCZyLT5yLmZtci0+bGlzdCwgJmwpOworCQlyYyA9IGliX3VubWFwX2ZtcigmbCk7CisJCWlmIChyYykKKwkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGliX3VubWFwX2ZtciBmYWlsZWQgJWlcbiIsCisJCQkJX19mdW5jX18sIHJjKTsKKwl9Cit9CisKIC8qIEFmdGVyIGEgZGlzY29ubmVjdCwgYSBmbHVzaGVkIEZBU1RfUkVHX01SIGNhbiBsZWF2ZSBhbiBGUk1SIGluCiAgKiBhbiB1bnVzYWJsZSBzdGF0ZS4gRmluZCBGUk1ScyBpbiB0aGlzIHN0YXRlIGFuZCBkZXJlZyAvIHJlZwogICogZWFjaC4gIEZSTVJzIHRoYXQgYXJlIFZBTElEIGFuZCBhdHRhY2hlZCB0byBhbiBycGNyZG1hX3JlcSBhcmUKQEAgLTE5MTgsMTAgKzIwMDIsMTAgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlPOwogCX0KIAlpZiAocmMpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIHJjOwogCiAJcmV0dXJuIG5zZWdzOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS94cHJ0X3JkbWEuaCBiL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmgKaW5kZXggYWM3ZmM5YS4uYjc5OTA0MSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS94cHJ0X3JkbWEuaAorKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3hwcnRfcmRtYS5oCkBAIC05Nyw2ICs5NywxMiBAQAogCXN0cnVjdCBpYl93YwkJcmVwX3JlY3Zfd2NzW1JQQ1JETUFfUE9MTFNJWkVdOwogfTsKIAorLyoKKyAqIEZvcmNlIGEgc2lnbmFsZWQgU0VORCBXb3JrIFJlcXVlc3QgZXZlcnkgc28gb2Z0ZW4sCisgKiBpbiBjYXNlIHRoZSBwcm92aWRlciBuZWVkcyB0byBkbyBzb21lIGhvdXNla2VlcGluZy4KKyAqLworI2RlZmluZSBSUENSRE1BX01BWF9VTlNJR05BTEVEX1NFTkRTCSgzMikKKwogI2RlZmluZSBJTklUX0NRQ09VTlQoZXApIGF0b21pY19zZXQoJihlcCktPnJlcF9jcWNvdW50LCAoZXApLT5yZXBfY3Fpbml0KQogI2RlZmluZSBERUNSX0NRQ09VTlQoZXApIGF0b21pY19zdWJfcmV0dXJuKDEsICYoZXApLT5yZXBfY3Fjb3VudCkKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDNiMzA1YWIuLjg3Y2U3ZTggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAqIHNvbWVvbmUgZWxzZSdzIGZpbGUgbmFtZXMhCiAgKi8KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAogc3RhdGljIHVuc2lnbmVkIGludCBtaW5fc2xvdF90YWJsZV9zaXplID0gUlBDX01JTl9TTE9UX1RBQkxFOwogc3RhdGljIHVuc2lnbmVkIGludCBtYXhfc2xvdF90YWJsZV9zaXplID0gUlBDX01BWF9TTE9UX1RBQkxFOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAgKi8KICNkZWZpbmUgWFNfSURMRV9ESVNDX1RPCQkoNVUgKiA2MCAqIEhaKQogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyB1bmRlZiAgUlBDX0RFQlVHX0RBVEEKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfVFJBTlMKICNlbmRpZgpAQCAtMjE2LDY1ICsyMTYsNiBAQAogfQogI2VuZGlmCiAKLXN0cnVjdCBzb2NrX3hwcnQgewotCXN0cnVjdCBycGNfeHBydAkJeHBydDsKLQotCS8qCi0JICogTmV0d29yayBsYXllcgotCSAqLwotCXN0cnVjdCBzb2NrZXQgKgkJc29jazsKLQlzdHJ1Y3Qgc29jayAqCQlpbmV0OwotCi0JLyoKLQkgKiBTdGF0ZSBvZiBUQ1AgcmVwbHkgcmVjZWl2ZQotCSAqLwotCV9fYmUzMgkJCXRjcF9mcmFnaGRyLAotCQkJCXRjcF94aWQsCi0JCQkJdGNwX2NhbGxkaXI7Ci0KLQl1MzIJCQl0Y3Bfb2Zmc2V0LAotCQkJCXRjcF9yZWNsZW47Ci0KLQl1bnNpZ25lZCBsb25nCQl0Y3BfY29waWVkLAotCQkJCXRjcF9mbGFnczsKLQotCS8qCi0JICogQ29ubmVjdGlvbiBvZiB0cmFuc3BvcnRzCi0JICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yawljb25uZWN0X3dvcmtlcjsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQlzcmNhZGRyOwotCXVuc2lnbmVkIHNob3J0CQlzcmNwb3J0OwotCi0JLyoKLQkgKiBVRFAgc29ja2V0IGJ1ZmZlciBzaXplIHBhcmFtZXRlcnMKLQkgKi8KLQlzaXplX3QJCQlyY3ZzaXplLAotCQkJCXNuZHNpemU7Ci0KLQkvKgotCSAqIFNhdmVkIHNvY2tldCBjYWxsYmFjayBhZGRyZXNzZXMKLQkgKi8KLQl2b2lkCQkJKCpvbGRfZGF0YV9yZWFkeSkoc3RydWN0IHNvY2sgKik7Ci0Jdm9pZAkJCSgqb2xkX3N0YXRlX2NoYW5nZSkoc3RydWN0IHNvY2sgKik7Ci0Jdm9pZAkJCSgqb2xkX3dyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqKTsKLQl2b2lkCQkJKCpvbGRfZXJyb3JfcmVwb3J0KShzdHJ1Y3Qgc29jayAqKTsKLX07Ci0KLS8qCi0gKiBUQ1AgcmVjZWl2ZSBzdGF0ZSBmbGFncwotICovCi0jZGVmaW5lIFRDUF9SQ1ZfTEFTVF9GUkFHCSgxVUwgPDwgMCkKLSNkZWZpbmUgVENQX1JDVl9DT1BZX0ZSQUdIRFIJKDFVTCA8PCAxKQotI2RlZmluZSBUQ1BfUkNWX0NPUFlfWElECSgxVUwgPDwgMikKLSNkZWZpbmUgVENQX1JDVl9DT1BZX0RBVEEJKDFVTCA8PCAzKQotI2RlZmluZSBUQ1BfUkNWX1JFQURfQ0FMTERJUgkoMVVMIDw8IDQpCi0jZGVmaW5lIFRDUF9SQ1ZfQ09QWV9DQUxMRElSCSgxVUwgPDwgNSkKLQotLyoKLSAqIFRDUCBSUEMgZmxhZ3MKLSAqLwotI2RlZmluZSBUQ1BfUlBDX1JFUExZCQkoMVVMIDw8IDYpCi0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJwY194cHJ0ICp4cHJ0X2Zyb21fc29jayhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgcnBjX3hwcnQgKikgc2stPnNrX3VzZXJfZGF0YTsKQEAgLTE0MTUsNiArMTM1Niw3IEBACiAKIAlkcHJpbnRrKCJSUEM6ICAgICAgIHhzX3RjcF9kYXRhX3JlY3Ygc3RhcnRlZFxuIik7CiAJZG8geworCQl0cmFjZV94c190Y3BfZGF0YV9yZWN2KHRyYW5zcG9ydCk7CiAJCS8qIFJlYWQgaW4gYSBuZXcgZnJhZ21lbnQgbWFya2VyIGlmIG5lY2Vzc2FyeSAqLwogCQkvKiBDYW4gd2UgZXZlciByZWFsbHkgZXhwZWN0IHRvIGdldCBjb21wbGV0ZWx5IGVtcHR5IGZyYWdtZW50cz8gKi8KIAkJaWYgKHRyYW5zcG9ydC0+dGNwX2ZsYWdzICYgVENQX1JDVl9DT1BZX0ZSQUdIRFIpIHsKQEAgLTE0MzksNiArMTM4MSw3IEBACiAJCS8qIFNraXAgb3ZlciBhbnkgdHJhaWxpbmcgYnl0ZXMgb24gc2hvcnQgcmVhZHMgKi8KIAkJeHNfdGNwX3JlYWRfZGlzY2FyZCh0cmFuc3BvcnQsICZkZXNjKTsKIAl9IHdoaWxlIChkZXNjLmNvdW50KTsKKwl0cmFjZV94c190Y3BfZGF0YV9yZWN2KHRyYW5zcG9ydCk7CiAJZHByaW50aygiUlBDOiAgICAgICB4c190Y3BfZGF0YV9yZWN2IGRvbmVcbiIpOwogCXJldHVybiBsZW4gLSBkZXNjLmNvdW50OwogfQpAQCAtMTQ1NCwxMiArMTM5NywxNSBAQAogCXN0cnVjdCBycGNfeHBydCAqeHBydDsKIAlyZWFkX2Rlc2NyaXB0b3JfdCByZF9kZXNjOwogCWludCByZWFkOworCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOwogCiAJZHByaW50aygiUlBDOiAgICAgICB4c190Y3BfZGF0YV9yZWFkeS4uLlxuIik7CiAKIAlyZWFkX2xvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKLQlpZiAoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkKKwlpZiAoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkgeworCQlyZWFkID0gMDsKIAkJZ290byBvdXQ7CisJfQogCS8qIEFueSBkYXRhIG1lYW5zIHdlIGhhZCBhIHVzZWZ1bCBjb252ZXJzYXRpb24sIHNvCiAJICogdGhlIHdlIGRvbid0IG5lZWQgdG8gZGVsYXkgdGhlIG5leHQgcmVjb25uZWN0CiAJICovCkBAIC0xNDcxLDggKzE0MTcsMTEgQEAKIAlkbyB7CiAJCXJkX2Rlc2MuY291bnQgPSA2NTUzNjsKIAkJcmVhZCA9IHRjcF9yZWFkX3NvY2soc2ssICZyZF9kZXNjLCB4c190Y3BfZGF0YV9yZWN2KTsKKwkJaWYgKHJlYWQgPiAwKQorCQkJdG90YWwgKz0gcmVhZDsKIAl9IHdoaWxlIChyZWFkID4gMCk7CiBvdXQ6CisJdHJhY2VfeHNfdGNwX2RhdGFfcmVhZHkoeHBydCwgcmVhZCwgdG90YWwpOwogCXJlYWRfdW5sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKQEAgLTMwNDIsNyArMjk5MSw3IEBACiAgKi8KIGludCBpbml0X3NvY2tldF94cHJ0KHZvaWQpCiB7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCWlmICghc3VucnBjX3RhYmxlX2hlYWRlcikKIAkJc3VucnBjX3RhYmxlX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShzdW5ycGNfdGFibGUpOwogI2VuZGlmCkBAIC0zMDYxLDcgKzMwMTAsNyBAQAogICovCiB2b2lkIGNsZWFudXBfc29ja2V0X3hwcnQodm9pZCkKIHsKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAJaWYgKHN1bnJwY190YWJsZV9oZWFkZXIpIHsKIAkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3VucnBjX3RhYmxlX2hlYWRlcik7CiAJCXN1bnJwY190YWJsZV9oZWFkZXIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZSBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKaW5kZXggNjVlN2IwOC4uNTM3NGIxYiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQorKysgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCkBAIC0xNzksNiArMTc5LDEyIEBACiAjICQoUSkkKE1BS0UpICQobW9kYnVpbHRpbik9ZGlyCiBtb2RidWlsdGluIDo9IC1mICQoc3JjdHJlZSkvc2NyaXB0cy9NYWtlZmlsZS5tb2RidWlsdGluIG9iagogCisjIyMKKyMgU2hvcnRoYW5kIGZvciAkKFEpJChNQUtFKSAtZiBzY3JpcHRzL01ha2VmaWxlLmR0Ymluc3Qgb2JqPQorIyBVc2FnZToKKyMgJChRKSQoTUFLRSkgJChkdGJpbnN0KT1kaXIKK2R0Ymluc3QgOj0gLWYgJChpZiAkKEtCVUlMRF9TUkMpLCQoc3JjdHJlZSkvKXNjcmlwdHMvTWFrZWZpbGUuZHRiaW5zdCBvYmoKKwogIyBQcmVmaXggLUkgd2l0aCAkKHNyY3RyZWUpIGlmIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoLgogIyBza2lwIGlmIC1JIGhhcyBubyBwYXJhbWV0ZXIKIGFkZHRyZWUgPSAkKGlmICQocGF0c3Vic3QgLUklLCUsJCgxKSksIFwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuZHRiaW5zdCBiL3NjcmlwdHMvTWFrZWZpbGUuZHRiaW5zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDllZDdhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5kdGJpbnN0CkBAIC0wLDAgKzEsNTEgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgSW5zdGFsbGluZyBkdGIgZmlsZXMKKyMKKyMgSW5zdGFsbHMgYWxsIGR0YiBmaWxlcyBsaXN0ZWQgaW4gJChkdGIteSkgZWl0aGVyIGluIHRoZQorIyBJTlNUQUxMX0RUQlNfUEFUSCBkaXJlY3Rvcnkgb3IgdGhlIGRlZmF1bHQgbG9jYXRpb246CisjCisjICAgJElOU1RBTExfUEFUSC9kdGJzLyRLRVJORUxSRUxFQVNFCisjCisjIFRyYXZlcnNlIHRocm91Z2ggc3ViZGlyZWN0b3JpZXMgbGlzdGVkIGluICQoZHRzLWRpcnMpLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzcmMgOj0gJChvYmopCisKK1BIT05ZIDo9IF9fZHRic19pbnN0YWxsCitfX2R0YnNfaW5zdGFsbDoKKworZXhwb3J0IGR0Ymluc3Qtcm9vdCA/PSAkKG9iaikKKworaW5jbHVkZSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKK2luY2x1ZGUgc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQoraW5jbHVkZSAkKHNyY3RyZWUpLyQob2JqKS9NYWtlZmlsZQorCitQSE9OWSArPSBfX2R0YnNfaW5zdGFsbF9wcmVwCitfX2R0YnNfaW5zdGFsbF9wcmVwOgoraWZlcSAoIiQoZHRiaW5zdC1yb290KSIsICIkKG9iaikiKQorCSQoUSlpZiBbIC1kICQoSU5TVEFMTF9EVEJTX1BBVEgpLm9sZCBdOyB0aGVuIHJtIC1yZiAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQ7IGZpCisJJChRKWlmIFsgLWQgJChJTlNUQUxMX0RUQlNfUEFUSCkgXTsgdGhlbiBtdiAkKElOU1RBTExfRFRCU19QQVRIKSAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQ7IGZpCisJJChRKW1rZGlyIC1wICQoSU5TVEFMTF9EVEJTX1BBVEgpCitlbmRpZgorCitkdGJpbnN0LWZpbGVzCTo9ICQoZHRiLXkpCitkdGJpbnN0LWRpcnMJOj0gJChkdHMtZGlycykKKworIyBIZWxwZXIgdGFyZ2V0cyBmb3IgSW5zdGFsbGluZyBEVEJzIGludG8gdGhlIGJvb3QgZGlyZWN0b3J5CitxdWlldF9jbWRfZHRiX2luc3RhbGwgPQlJTlNUQUxMICQ8CisgICAgICBjbWRfZHRiX2luc3RhbGwgPQlta2RpciAtcCAkKDIpOyBjcCAkPCAkKDIpCisKK2luc3RhbGwtZGlyID0gJChwYXRzdWJzdCAkKGR0Ymluc3Qtcm9vdCklLCQoSU5TVEFMTF9EVEJTX1BBVEgpJSwkKG9iaikpCisKKyQoZHRiaW5zdC1maWxlcykgJChkdGJpbnN0LWRpcnMpOiB8IF9fZHRic19pbnN0YWxsX3ByZXAKKworJChkdGJpbnN0LWZpbGVzKTogJS5kdGI6ICQob2JqKS8lLmR0YgorCSQoY2FsbCBjbWQsZHRiX2luc3RhbGwsJChpbnN0YWxsLWRpcikpCisKKyQoZHRiaW5zdC1kaXJzKToKKwkkKFEpJChNQUtFKSAkKGR0Ymluc3QpPSQob2JqKS8kQAorCitQSE9OWSArPSAkKGR0Ymluc3QtZmlsZXMpICQoZHRiaW5zdC1kaXJzKQorX19kdGJzX2luc3RhbGw6ICQoZHRiaW5zdC1maWxlcykgJChkdGJpbnN0LWRpcnMpCisKKy5QSE9OWTogJChQSE9OWSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggNTRiZTE5YS4uNTExNzU1MiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTI4MywxOCArMjgzLDYgQEAKIAogZHRjLXRtcCA9ICQoc3Vic3QgJChjb21tYSksXywkKGRvdC10YXJnZXQpLmR0cy50bXApCiAKLSMgSGVscGVyIHRhcmdldHMgZm9yIEluc3RhbGxpbmcgRFRCcyBpbnRvIHRoZSBib290IGRpcmVjdG9yeQotcXVpZXRfY21kX2R0Yl9pbnN0YWxsID0JSU5TVEFMTCAkPAotICAgICAgY21kX2R0Yl9pbnN0YWxsID0JY3AgJDwgJCgyKQotCi1fZHRiaW5zdF9wcmVfOgotCSQoUSlpZiBbIC1kICQoSU5TVEFMTF9EVEJTX1BBVEgpLm9sZCBdOyB0aGVuIHJtIC1yZiAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQ7IGZpCi0JJChRKWlmIFsgLWQgJChJTlNUQUxMX0RUQlNfUEFUSCkgXTsgdGhlbiBtdiAkKElOU1RBTExfRFRCU19QQVRIKSAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQ7IGZpCi0JJChRKW1rZGlyIC1wICQoSU5TVEFMTF9EVEJTX1BBVEgpCi0KLSUuZHRiX2R0Ymluc3RfOiAkKG9iaikvJS5kdGIgX2R0Ymluc3RfcHJlXwotCSQoY2FsbCBjbWQsZHRiX2luc3RhbGwsJChJTlNUQUxMX0RUQlNfUEFUSCkpCi0KICMgQnppcDIKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi90cmFjZWV2ZW50L3BsdWdpbl9zY3NpLmMgYi90b29scy9saWIvdHJhY2VldmVudC9wbHVnaW5fc2NzaS5jCmluZGV4IGVkYTMyNmYuLjM3MjdkZTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi90cmFjZWV2ZW50L3BsdWdpbl9zY3NpLmMKKysrIGIvdG9vbHMvbGliL3RyYWNlZXZlbnQvcGx1Z2luX3Njc2kuYwpAQCAtODUsOCArODUsOSBAQAogI2RlZmluZSBNT1ZFX01FRElVTQkJCTB4YTUKICNkZWZpbmUgRVhDSEFOR0VfTUVESVVNCQkJMHhhNgogI2RlZmluZSBSRUFEXzEyCQkJCTB4YTgKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fT1VUXzEyCQkweGE5CiAjZGVmaW5lIFdSSVRFXzEyCQkJMHhhYQotI2RlZmluZSBSRUFEX01FRElBX1NFUklBTF9OVU1CRVIJMHhhYgorI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTl8xMgkJMHhhYgogI2RlZmluZSBXUklURV9WRVJJRllfMTIJCQkweGFlCiAjZGVmaW5lIFZFUklGWV8xMgkJCTB4YWYKICNkZWZpbmUgU0VBUkNIX0hJR0hfMTIJCQkweGIwCkBAIC0xMDcsNyArMTA4LDkgQEAKICNkZWZpbmUgVkVSSUZZXzE2CQkJMHg4ZgogI2RlZmluZSBTWU5DSFJPTklaRV9DQUNIRV8xNgkJMHg5MQogI2RlZmluZSBXUklURV9TQU1FXzE2CQkJMHg5MwotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTgkJMHg5ZQorI2RlZmluZSBTRVJWSUNFX0FDVElPTl9CSURJUkVDVElPTkFMCTB4OWQKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU5fMTYJCTB4OWUKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fT1VUXzE2CQkweDlmCiAvKiB2YWx1ZXMgZm9yIHNlcnZpY2UgYWN0aW9uIGluICovCiAjZGVmaW5lCVNBSV9SRUFEX0NBUEFDSVRZXzE2CQkweDEwCiAjZGVmaW5lIFNBSV9HRVRfTEJBX1NUQVRVUwkJMHgxMgpAQCAtMzkzLDcgKzM5Niw3IEBACiAJCXJldHVybiBzY3NpX3RyYWNlX3J3MTYocCwgY2RiLCBsZW4pOwogCWNhc2UgVU5NQVA6CiAJCXJldHVybiBzY3NpX3RyYWNlX3VubWFwKHAsIGNkYiwgbGVuKTsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAJCXJldHVybiBzY3NpX3RyYWNlX3NlcnZpY2VfYWN0aW9uX2luKHAsIGNkYiwgbGVuKTsKIAljYXNlIFZBUklBQkxFX0xFTkdUSF9DTUQ6CiAJCXJldHVybiBzY3NpX3RyYWNlX3ZhcmxlbihwLCBjZGIsIGxlbik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmLy5naXRpZ25vcmUgYi90b29scy9wZXJmLy5naXRpZ25vcmUKaW5kZXggNzE3MjIxZS4uNDAzOTljMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCisrKyBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQpAQCAtMiw2ICsyLDggQEAKIFBFUkYtR1VJLVZBUlMKIFBFUkYtVkVSU0lPTi1GSUxFCiBwZXJmCitwZXJmLXJlYWQtdmRzbzMyCitwZXJmLXJlYWQtdmRzb3gzMgogcGVyZi1oZWxwCiBwZXJmLXJlY29yZAogcGVyZi1yZXBvcnQKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0CmluZGV4IDM5OGY4ZDUuLmFmOWE1NGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dApAQCAtMjE0LDYgKzIxNCwxMiBAQAogQWZ0ZXIgc3RhcnRpbmcgdGhlIHByb2dyYW0sIHdhaXQgbXNlY3MgYmVmb3JlIG1lYXN1cmluZy4gVGhpcyBpcyB1c2VmdWwgdG8KIGZpbHRlciBvdXQgdGhlIHN0YXJ0dXAgcGhhc2Ugb2YgdGhlIHByb2dyYW0sIHdoaWNoIGlzIG9mdGVuIHZlcnkgZGlmZmVyZW50LgogCistSTo6CistLWludHItcmVnczo6CitDYXB0dXJlIG1hY2hpbmUgc3RhdGUgKHJlZ2lzdGVycykgYXQgaW50ZXJydXB0LCBpLmUuLCBvbiBjb3VudGVyIG92ZXJmbG93cyBmb3IKK2VhY2ggc2FtcGxlLiBMaXN0IG9mIGNhcHR1cmVkIHJlZ2lzdGVycyBkZXBlbmRzIG9uIHRoZSBhcmNoaXRlY3R1cmUuIFRoaXMgb3B0aW9uCitpcyBvZmYgYnkgZGVmYXVsdC4KKwogU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rcGVyZjpwZXJmLXN0YXRbMV0sIGxpbmtwZXJmOnBlcmYtbGlzdFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKaW5kZXggMDkyN2JmNC4uZGQ3Y2NjZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CkBAIC0xNTksNyArMTU5LDcgQEAKIC0tZHVtcC1yYXctdHJhY2U6OgogICAgICAgICBEdW1wIHJhdyB0cmFjZSBpbiBBU0NJSS4KIAotLWcgW3R5cGUsbWluWyxsaW1pdF0sb3JkZXJbLGtleV1dOjoKKy1nIFt0eXBlLG1pblssbGltaXRdLG9yZGVyWyxrZXldWyxicmFuY2hdXTo6CiAtLWNhbGwtZ3JhcGg6OgogICAgICAgICBEaXNwbGF5IGNhbGwgY2hhaW5zIHVzaW5nIHR5cGUsIG1pbiBwZXJjZW50IHRocmVzaG9sZCwgb3B0aW9uYWwgcHJpbnQKIAlsaW1pdCBhbmQgb3JkZXIuCkBAIC0xNzcsNiArMTc3LDExIEBACiAJLSBmdW5jdGlvbjogY29tcGFyZSBvbiBmdW5jdGlvbnMKIAktIGFkZHJlc3M6IGNvbXBhcmUgb24gaW5kaXZpZHVhbCBjb2RlIGFkZHJlc3NlcwogCisJYnJhbmNoIGNhbiBiZToKKwktIGJyYW5jaDogaW5jbHVkZSBsYXN0IGJyYW5jaCBpbmZvcm1hdGlvbiBpbiBjYWxsZ3JhcGgKKwl3aGVuIGF2YWlsYWJsZS4gVXN1YWxseSBtb3JlIGNvbnZlbmllbnQgdG8gdXNlIC0tYnJhbmNoLWhpc3RvcnkKKwlmb3IgdGhpcy4KKwogCURlZmF1bHQ6IGZyYWN0YWwsMC41LGNhbGxlZSxmdW5jdGlvbi4KIAogLS1jaGlsZHJlbjo6CkBAIC0yNjYsNiArMjcxLDExIEBACiAJYnJhbmNoIHN0YWNrcyBhbmQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0byB0aGUgYnJhbmNoIHZpZXcgbW9kZSwKIAl1bmxlc3MgLS1uby1icmFuY2gtc3RhY2sgaXMgdXNlZC4KIAorLS1icmFuY2gtaGlzdG9yeTo6CisJQWRkIHRoZSBhZGRyZXNzZXMgb2Ygc2FtcGxlZCB0YWtlbiBicmFuY2hlcyB0byB0aGUgY2FsbHN0YWNrLgorCVRoaXMgYWxsb3dzIHRvIGV4YW1pbmUgdGhlIHBhdGggdGhlIHByb2dyYW0gdG9vayB0byBlYWNoIHNhbXBsZS4KKwlUaGUgZGF0YSBjb2xsZWN0aW9uIG11c3QgaGF2ZSB1c2VkIC1iIChvciAtaikgYW5kIC1nLgorCiAtLW9iamR1bXA9PHBhdGg+OjoKICAgICAgICAgUGF0aCB0byBvYmpkdW1wIGJpbmFyeS4KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCmluZGV4IDI2MjkxNmYuLjQ3OGVmYTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorKysgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKQEAgLTYwLDYgKzYwLDE1IEBACiAjCiAjIERlZmluZSBOT19MSUJEV19EV0FSRl9VTldJTkQgaWYgeW91IGRvIG5vdCB3YW50IGxpYmR3IHN1cHBvcnQKICMgZm9yIGR3YXJmIGJhY2t0cmFjZSBwb3N0IHVud2luZC4KKyMKKyMgRGVmaW5lIE5PX1BFUkZfUkVBRF9WRFNPMzIgaWYgeW91IGRvIG5vdCB3YW50IHRvIGJ1aWxkIHBlcmYtcmVhZC12ZHNvMzIKKyMgZm9yIHJlYWRpbmcgdGhlIDMyLWJpdCBjb21wYXRpYmlsaXR5IFZEU08gaW4gNjQtYml0IG1vZGUKKyMKKyMgRGVmaW5lIE5PX1BFUkZfUkVBRF9WRFNPWDMyIGlmIHlvdSBkbyBub3Qgd2FudCB0byBidWlsZCBwZXJmLXJlYWQtdmRzb3gzMgorIyBmb3IgcmVhZGluZyB0aGUgeDMyIG1vZGUgMzItYml0IGNvbXBhdGliaWxpdHkgVkRTTyBpbiA2NC1iaXQgbW9kZQorIworIyBEZWZpbmUgTk9fWkxJQiBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc3VwcG9ydCBjb21wcmVzc2VkIGtlcm5lbCBtb2R1bGVzCisKIAogaWZlcSAoJChzcmN0cmVlKSwpCiBzcmN0cmVlIDo9ICQocGF0c3Vic3QgJS8sJSwkKGRpciAkKHNoZWxsIHB3ZCkpKQpAQCAtMTcxLDExICsxODAsMTYgQEAKIAogU0NSSVBUUyA9ICQocGF0c3Vic3QgJS5zaCwlLCQoU0NSSVBUX1NIKSkKIAotIwotIyBTaW5nbGUgJ3BlcmYnIGJpbmFyeSByaWdodCBub3c6Ci0jCiBQUk9HUkFNUyArPSAkKE9VVFBVVClwZXJmCiAKK2lmbmRlZiBOT19QRVJGX1JFQURfVkRTTzMyCitQUk9HUkFNUyArPSAkKE9VVFBVVClwZXJmLXJlYWQtdmRzbzMyCitlbmRpZgorCitpZm5kZWYgTk9fUEVSRl9SRUFEX1ZEU09YMzIKK1BST0dSQU1TICs9ICQoT1VUUFVUKXBlcmYtcmVhZC12ZHNveDMyCitlbmRpZgorCiAjIHdoYXQgJ2FsbCcgd2lsbCBidWlsZCBhbmQgJ2luc3RhbGwnIHdpbGwgaW5zdGFsbCwgaW4gcGVyZmV4ZWNkaXIKIEFMTF9QUk9HUkFNUyA9ICQoUFJPR1JBTVMpICQoU0NSSVBUUykKIApAQCAtMjQ3LDEyICsyNjEsMTQgQEAKIExJQl9IICs9IHV0aWwvY2FjaGUuaAogTElCX0ggKz0gdXRpbC9jYWxsY2hhaW4uaAogTElCX0ggKz0gdXRpbC9idWlsZC1pZC5oCitMSUJfSCArPSB1dGlsL2RiLWV4cG9ydC5oCiBMSUJfSCArPSB1dGlsL2RlYnVnLmgKIExJQl9IICs9IHV0aWwvcG11LmgKIExJQl9IICs9IHV0aWwvZXZlbnQuaAogTElCX0ggKz0gdXRpbC9ldnNlbC5oCiBMSUJfSCArPSB1dGlsL2V2bGlzdC5oCiBMSUJfSCArPSB1dGlsL2V4ZWNfY21kLmgKK0xJQl9IICs9IHV0aWwvZmluZC12ZHNvLW1hcC5jCiBMSUJfSCArPSB1dGlsL2xldmVuc2h0ZWluLmgKIExJQl9IICs9IHV0aWwvbWFjaGluZS5oCiBMSUJfSCArPSB1dGlsL21hcC5oCkBAIC0zMDQsNiArMzIwLDcgQEAKIExJQl9IICs9IHVpL3VpLmgKIExJQl9IICs9IHV0aWwvZGF0YS5oCiBMSUJfSCArPSB1dGlsL2t2bS1zdGF0LmgKK0xJQl9IICs9IHV0aWwvdGhyZWFkLXN0YWNrLmgKIAogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9hYnNwYXRoLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvYWxpYXMubwpAQCAtMzExLDYgKzMyOCw3IEBACiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2J1aWxkLWlkLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvY29uZmlnLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvY3R5cGUubworTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9kYi1leHBvcnQubwogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9wbXUubwogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9lbnZpcm9ubWVudC5vCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2V2ZW50Lm8KQEAgLTM4MCw2ICszOTgsNyBAQAogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9kYXRhLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvdHNjLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvY2xvZXhlYy5vCitMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL3RocmVhZC1zdGFjay5vCiAKIExJQl9PQkpTICs9ICQoT1VUUFVUKXVpL3NldHVwLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXVpL2hlbHBsaW5lLm8KQEAgLTQ3OCw4ICs0OTcsNiBAQAogZW5kaWYKIAogaWZkZWYgTk9fTElCRUxGCi1FWFRMSUJTIDo9ICQoZmlsdGVyLW91dCAtbGVsZiwkKEVYVExJQlMpKQotCiAjIFJlbW92ZSBFTEYvRFdBUkYgZGVwZW5kZW50IGNvZGVzCiBMSUJfT0JKUyA6PSAkKGZpbHRlci1vdXQgJChPVVRQVVQpdXRpbC9zeW1ib2wtZWxmLm8sJChMSUJfT0JKUykpCiBMSUJfT0JKUyA6PSAkKGZpbHRlci1vdXQgJChPVVRQVVQpdXRpbC9kd2FyZi1hdXgubywkKExJQl9PQkpTKSkKQEAgLTU2OCw2ICs1ODUsMTAgQEAKICAgQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJlbmNoL251bWEubwogZW5kaWYKIAoraWZuZGVmIE5PX1pMSUIKKyAgTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC96bGliLm8KK2VuZGlmCisKIGlmZGVmIEFTQ0lJRE9DOAogICBleHBvcnQgQVNDSUlET0M4CiBlbmRpZgpAQCAtNzMyLDYgKzc1MywxNiBAQAogJChPVVRQVVQpcGVyZi0lOiAlLm8gJChQRVJGTElCUykKIAkkKFFVSUVUX0xJTkspJChDQykgJChDRkxBR1MpIC1vICRAICQoTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCiAKK2lmbmRlZiBOT19QRVJGX1JFQURfVkRTTzMyCiskKE9VVFBVVClwZXJmLXJlYWQtdmRzbzMyOiBwZXJmLXJlYWQtdmRzby5jIHV0aWwvZmluZC12ZHNvLW1hcC5jCisJJChRVUlFVF9DQykkKENDKSAtbTMyICQoZmlsdGVyIC1zdGF0aWMsJChMREZMQUdTKSkgLVdhbGwgLVdlcnJvciAtbyAkQCBwZXJmLXJlYWQtdmRzby5jCitlbmRpZgorCitpZm5kZWYgTk9fUEVSRl9SRUFEX1ZEU09YMzIKKyQoT1VUUFVUKXBlcmYtcmVhZC12ZHNveDMyOiBwZXJmLXJlYWQtdmRzby5jIHV0aWwvZmluZC12ZHNvLW1hcC5jCisJJChRVUlFVF9DQykkKENDKSAtbXgzMiAkKGZpbHRlciAtc3RhdGljLCQoTERGTEFHUykpIC1XYWxsIC1XZXJyb3IgLW8gJEAgcGVyZi1yZWFkLXZkc28uYworZW5kaWYKKwogJChMSUJfT0JKUykgJChCVUlMVElOX09CSlMpOiAkKExJQl9IKQogJChwYXRzdWJzdCBwZXJmLSUsJS5vLCQoUFJPR1JBTVMpKTogJChMSUJfSCkgJCh3aWxkY2FyZCAqLyouaCkKIApAQCAtODc2LDYgKzkwNywxNCBAQAogCQkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKSc7IFwKIAkJJChJTlNUQUxMKSAkKE9VVFBVVClwZXJmICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJzsgXAogCQkkKExOKSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKS9wZXJmJyAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKS90cmFjZScKK2lmbmRlZiBOT19QRVJGX1JFQURfVkRTTzMyCisJJChjYWxsIFFVSUVUX0lOU1RBTEwsIHBlcmYtcmVhZC12ZHNvMzIpIFwKKwkJJChJTlNUQUxMKSAkKE9VVFBVVClwZXJmLXJlYWQtdmRzbzMyICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJzsKK2VuZGlmCitpZm5kZWYgTk9fUEVSRl9SRUFEX1ZEU09YMzIKKwkkKGNhbGwgUVVJRVRfSU5TVEFMTCwgcGVyZi1yZWFkLXZkc294MzIpIFwKKwkJJChJTlNUQUxMKSAkKE9VVFBVVClwZXJmLXJlYWQtdmRzb3gzMiAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKSc7CitlbmRpZgogCSQoY2FsbCBRVUlFVF9JTlNUQUxMLCBsaWJleGVjKSBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKScKIAkkKGNhbGwgUVVJRVRfSU5TVEFMTCwgcGVyZi1hcmNoaXZlKSBcCkBAIC05MjgsNyArOTY3LDcgQEAKIAogY2xlYW46ICQoTElCVFJBQ0VFVkVOVCktY2xlYW4gJChMSUJBUElLRlMpLWNsZWFuIGNvbmZpZy1jbGVhbgogCSQoY2FsbCBRVUlFVF9DTEVBTiwgY29yZS1vYmpzKSAgJChSTSkgJChMSUJfT0JKUykgJChCVUlMVElOX09CSlMpICQoTElCX0ZJTEUpICQoT1VUUFVUKXBlcmYtYXJjaGl2ZSAkKE9VVFBVVClwZXJmLXdpdGgta2NvcmUgJChPVVRQVVQpcGVyZi5vICQoTEFOR19CSU5ESU5HUykgJChHVEtfT0JKUykKLQkkKGNhbGwgUVVJRVRfQ0xFQU4sIGNvcmUtcHJvZ3MpICQoUk0pICQoQUxMX1BST0dSQU1TKSBwZXJmCisJJChjYWxsIFFVSUVUX0NMRUFOLCBjb3JlLXByb2dzKSAkKFJNKSAkKEFMTF9QUk9HUkFNUykgcGVyZiBwZXJmLXJlYWQtdmRzbzMyIHBlcmYtcmVhZC12ZHNveDMyCiAJJChjYWxsIFFVSUVUX0NMRUFOLCBjb3JlLWdlbikgICAkKFJNKSAgKi5zcGVjICoucHljICoucHlvICovKi5weWMgKi8qLnB5byAkKE9VVFBVVCljb21tb24tY21kcy5oIFRBR1MgdGFncyBjc2NvcGUqICQoT1VUUFVUKVBFUkYtVkVSU0lPTi1GSUxFICQoT1VUUFVUKVBFUkYtQ0ZMQUdTICQoT1VUUFVUKVBFUkYtRkVBVFVSRVMgJChPVVRQVVQpdXRpbC8qLWJpc29uKiAkKE9VVFBVVCl1dGlsLyotZmxleCoKIAkkKFFVSUVUX1NVQkRJUjApRG9jdW1lbnRhdGlvbiAkKFFVSUVUX1NVQkRJUjEpIGNsZWFuCiAJJChweXRob24tY2xlYW4pCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2FyY2gvcG93ZXJwYy91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jIGIvdG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYwppbmRleCBkNzNlZjhiLi4zYmI1MGVhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2FyY2gvcG93ZXJwYy91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jCisrKyBiL3Rvb2xzL3BlcmYvYXJjaC9wb3dlcnBjL3V0aWwvc2tpcC1jYWxsY2hhaW4taWR4LmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogICoJCXlldCB1c2VkKQogICoJLTEgaW4gY2FzZSBvZiBlcnJvcnMKICAqLwotc3RhdGljIGludCBjaGVja19yZXR1cm5fYWRkcihjb25zdCBjaGFyICpleGVjX2ZpbGUsIER3YXJmX0FkZHIgcGMpCitzdGF0aWMgaW50IGNoZWNrX3JldHVybl9hZGRyKHN0cnVjdCBkc28gKmRzbywgRHdhcmZfQWRkciBwYykKIHsKIAlpbnQJCXJjID0gLTE7CiAJRHdmbAkJKmR3Zmw7CkBAIC0xNTYsMTUgKzE1NiwyNyBAQAogCUR3YXJmX0FkZHIJZW5kID0gcGM7CiAJYm9vbAkJc2lnbmFscDsKIAotCWR3ZmwgPSBkd2ZsX2JlZ2luKCZvZmZsaW5lX2NhbGxiYWNrcyk7Ci0JaWYgKCFkd2ZsKSB7Ci0JCXByX2RlYnVnKCJkd2ZsX2JlZ2luKCkgZmFpbGVkOiAlc1xuIiwgZHdhcmZfZXJybXNnKC0xKSk7Ci0JCXJldHVybiAtMTsKLQl9CisJZHdmbCA9IGRzby0+ZHdmbDsKIAotCWlmIChkd2ZsX3JlcG9ydF9vZmZsaW5lKGR3ZmwsICIiLCAgZXhlY19maWxlLCAtMSkgPT0gTlVMTCkgewotCQlwcl9kZWJ1ZygiZHdmbF9yZXBvcnRfb2ZmbGluZSgpIGZhaWxlZCAlc1xuIiwgZHdhcmZfZXJybXNnKC0xKSk7Ci0JCWdvdG8gb3V0OworCWlmICghZHdmbCkgeworCQlkd2ZsID0gZHdmbF9iZWdpbigmb2ZmbGluZV9jYWxsYmFja3MpOworCQlpZiAoIWR3ZmwpIHsKKwkJCXByX2RlYnVnKCJkd2ZsX2JlZ2luKCkgZmFpbGVkOiAlc1xuIiwgZHdhcmZfZXJybXNnKC0xKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoZHdmbF9yZXBvcnRfb2ZmbGluZShkd2ZsLCAiIiwgZHNvLT5sb25nX25hbWUsIC0xKSA9PSBOVUxMKSB7CisJCQlwcl9kZWJ1ZygiZHdmbF9yZXBvcnRfb2ZmbGluZSgpIGZhaWxlZCAlc1xuIiwKKwkJCQkJCWR3YXJmX2Vycm1zZygtMSkpOworCQkJLyoKKwkJCSAqIFdlIG5vcm1hbGx5IGNhY2hlIHRoZSBEV0FSRiBkZWJ1ZyBpbmZvIGFuZCBuZXZlcgorCQkJICogY2FsbCBkd2ZsX2VuZCgpLiBCdXQgdG8gcHJldmVudCBmZCBsZWFrLCBmcmVlIGluCisJCQkgKiBjYXNlIG9mIGVycm9yLgorCQkJICovCisJCQlkd2ZsX2VuZChkd2ZsKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRzby0+ZHdmbCA9IGR3Zmw7CiAJfQogCiAJbW9kID0gZHdmbF9hZGRybW9kdWxlKGR3ZmwsIHBjKTsKQEAgLTE5NCw3ICsyMDYsNiBAQAogCXJjID0gY2hlY2tfcmV0dXJuX3JlZyhyYV9yZWdubywgZnJhbWUpOwogCiBvdXQ6Ci0JZHdmbF9lbmQoZHdmbCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMjEsOCArMjMyLDcgQEAKICAqCWluZGV4OglvZiBjYWxsY2hhaW4gZW50cnkgdGhhdCBuZWVkcyB0byBiZSBpZ25vcmVkIChpZiBhbnkpCiAgKgktMQlpZiBubyBlbnRyeSBuZWVkcyB0byBiZSBpZ25vcmVkIG9yIGluIGNhc2Ugb2YgZXJyb3JzCiAgKi8KLWludCBhcmNoX3NraXBfY2FsbGNoYWluX2lkeChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAotCQkJCXN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluKQoraW50IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4pCiB7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAJc3RydWN0IGRzbyAqZHNvID0gTlVMTDsKQEAgLTIzNSw3ICsyNDUsNyBAQAogCiAJaXAgPSBjaGFpbi0+aXBzWzJdOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBtYWNoaW5lLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCisJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCiAJCQlNQVBfX0ZVTkNUSU9OLCBpcCwgJmFsKTsKIAogCWlmIChhbC5tYXApCkBAIC0yNDYsNyArMjU2LDcgQEAKIAkJcmV0dXJuIHNraXBfc2xvdDsKIAl9CiAKLQlyYyA9IGNoZWNrX3JldHVybl9hZGRyKGRzby0+bG9uZ19uYW1lLCBpcCk7CisJcmMgPSBjaGVja19yZXR1cm5fYWRkcihkc28sIGlwKTsKIAogCXByX2RlYnVnKCJEU08gJXMsIG5yICUiIFBSSXg2NCAiLCBpcCAweCUiIFBSSXg2NCAicmMgJWRcbiIsCiAJCQkJZHNvLT5sb25nX25hbWUsIGNoYWluLT5uciwgaXAsIHJjKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMgYi90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCmluZGV4IDI1MTE0YzkuLjFjZTQyNWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwpAQCAtMzU3LDYgKzM1Nyw3IEBACiBzdGF0aWMgc3RydWN0IHBlcmZfdG9vbCB0b29sID0gewogCS5zYW1wbGUJPSBkaWZmX19wcm9jZXNzX3NhbXBsZV9ldmVudCwKIAkubW1hcAk9IHBlcmZfZXZlbnRfX3Byb2Nlc3NfbW1hcCwKKwkubW1hcDIJPSBwZXJmX2V2ZW50X19wcm9jZXNzX21tYXAyLAogCS5jb21tCT0gcGVyZl9ldmVudF9fcHJvY2Vzc19jb21tLAogCS5leGl0CT0gcGVyZl9ldmVudF9fcHJvY2Vzc19leGl0LAogCS5mb3JrCT0gcGVyZl9ldmVudF9fcHJvY2Vzc19mb3JrLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jCmluZGV4IGRlOTljYTEuLjg0ZGYyZGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1pbmplY3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4taW5qZWN0LmMKQEAgLTIxNyw4ICsyMTcsNyBAQAogCQlnb3RvIHJlcGlwZTsKIAl9CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAotCQkJICAgICAgc2FtcGxlLT5pcCwgJmFsKTsKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLCBzYW1wbGUtPmlwLCAmYWwpOwogCiAJaWYgKGFsLm1hcCAhPSBOVUxMKSB7CiAJCWlmICghYWwubWFwLT5kc28tPmhpdCkgewpAQCAtNDEwLDYgKzQwOSw3IEBACiAJCQkudHJhY2luZ19kYXRhCT0gcGVyZl9ldmVudF9fcmVwaXBlX29wMl9zeW50aCwKIAkJCS5maW5pc2hlZF9yb3VuZAk9IHBlcmZfZXZlbnRfX3JlcGlwZV9vcDJfc3ludGgsCiAJCQkuYnVpbGRfaWQJPSBwZXJmX2V2ZW50X19yZXBpcGVfb3AyX3N5bnRoLAorCQkJLmlkX2luZGV4CT0gcGVyZl9ldmVudF9fcmVwaXBlX29wMl9zeW50aCwKIAkJfSwKIAkJLmlucHV0X25hbWUgID0gIi0iLAogCQkuc2FtcGxlcyA9IExJU1RfSEVBRF9JTklUKGluamVjdC5zYW1wbGVzKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYwppbmRleCBiNjVlYjA1MC4uM2MwZjNkNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWt2bS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYwpAQCAtMTEzMiw2ICsxMTMyLDEwIEBACiAJCSItbSIsICIxMDI0IiwKIAkJIi1jIiwgIjEiLAogCX07CisJY29uc3QgY2hhciAqIGNvbnN0IGt2bV9zdGF0X3JlY29yZF91c2FnZVtdID0geworCQkicGVyZiBrdm0gc3RhdCByZWNvcmQgWzxvcHRpb25zPl0iLAorCQlOVUxMCisJfTsKIAljb25zdCBjaGFyICogY29uc3QgKmV2ZW50c190cDsKIAlldmVudHNfdHBfc2l6ZSA9IDA7CiAKQEAgLTExNTksNiArMTE2MywyNyBAQAogCWZvciAoaiA9IDE7IGogPCAodW5zaWduZWQgaW50KWFyZ2M7IGorKywgaSsrKQogCQlyZWNfYXJndltpXSA9IGFyZ3Zbal07CiAKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICdlJywgImV2ZW50IiwgUEFSU0VfT1BUX0hJRERFTik7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAwLCAiZmlsdGVyIiwgUEFSU0VfT1BUX0hJRERFTik7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnUicsICJyYXctc2FtcGxlcyIsIFBBUlNFX09QVF9ISURERU4pOworCisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnRicsICJmcmVxIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsIDAsICJncm91cCIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnZycsIE5VTEwsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAwLCAiY2FsbC1ncmFwaCIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnZCcsICJkYXRhIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICdUJywgInRpbWVzdGFtcCIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnUCcsICJwZXJpb2QiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ24nLCAibm8tc2FtcGxlcyIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnTicsICJuby1idWlsZGlkLWNhY2hlIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICdCJywgIm5vLWJ1aWxkaWQiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ0cnLCAiY2dyb3VwIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICdiJywgImJyYW5jaC1hbnkiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ2onLCAiYnJhbmNoLWZpbHRlciIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnVycsICJ3ZWlnaHQiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgMCwgInRyYW5zYWN0aW9uIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKworCXJlY29yZF91c2FnZSA9IGt2bV9zdGF0X3JlY29yZF91c2FnZTsKIAlyZXR1cm4gY21kX3JlY29yZChpLCByZWNfYXJndiwgTlVMTCk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMKaW5kZXggN2FmMjZhYy4uOTIxYmI2OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAlib29sIHNob3dfZnVuY3M7CiAJYm9vbCBtb2RfZXZlbnRzOwogCWJvb2wgdXByb2JlczsKKwlib29sIHF1aWV0OwogCWludCBuZXZlbnRzOwogCXN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50IGV2ZW50c1tNQVhfUFJPQkVTXTsKIAlzdHJ1Y3Qgc3RybGlzdCAqZGVsbGlzdDsKQEAgLTMxMiw5ICszMTMsMTEgQEAKICNlbmRpZgogCQlOVUxMCiB9OwotCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCU9QVF9JTkNSKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKIAkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgcGFyc2VkIGFyZ3VtZW50cywgZXRjKSIpLAorCU9QVF9CT09MRUFOKCdxJywgInF1aWV0IiwgJnBhcmFtcy5xdWlldCwKKwkJICAgICJiZSBxdWlldCAoZG8gbm90IHNob3cgYW55IG1lc2FnZXMpIiksCiAJT1BUX0JPT0xFQU4oJ2wnLCAibGlzdCIsICZwYXJhbXMubGlzdF9ldmVudHMsCiAJCSAgICAibGlzdCB1cCBjdXJyZW50IHByb2JlIGV2ZW50cyIpLAogCU9QVF9DQUxMQkFDSygnZCcsICJkZWwiLCBOVUxMLCAiW0dST1VQOl1FVkVOVCIsICJkZWxldGUgYSBwcm9iZSBldmVudC4iLApAQCAtMzgyLDYgKzM4NSwxNCBAQAogCX07CiAJaW50IHJldDsKIAorCXNldF9vcHRpb25fZmxhZyhvcHRpb25zLCAnYScsICJhZGQiLCBQQVJTRV9PUFRfRVhDTFVTSVZFKTsKKwlzZXRfb3B0aW9uX2ZsYWcob3B0aW9ucywgJ2QnLCAiZGVsIiwgUEFSU0VfT1BUX0VYQ0xVU0lWRSk7CisJc2V0X29wdGlvbl9mbGFnKG9wdGlvbnMsICdsJywgImxpc3QiLCBQQVJTRV9PUFRfRVhDTFVTSVZFKTsKKyNpZmRlZiBIQVZFX0RXQVJGX1NVUFBPUlQKKwlzZXRfb3B0aW9uX2ZsYWcob3B0aW9ucywgJ0wnLCAibGluZSIsIFBBUlNFX09QVF9FWENMVVNJVkUpOworCXNldF9vcHRpb25fZmxhZyhvcHRpb25zLCAnVicsICJ2YXJzIiwgUEFSU0VfT1BUX0VYQ0xVU0lWRSk7CisjZW5kaWYKKwogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHByb2JlX3VzYWdlLAogCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAlpZiAoYXJnYyA+IDApIHsKQEAgLTM5Niw2ICs0MDcsMTQgQEAKIAkJfQogCX0KIAorCWlmIChwYXJhbXMucXVpZXQpIHsKKwkJaWYgKHZlcmJvc2UgIT0gMCkgeworCQkJcHJfZXJyKCIgIEVycm9yOiAtdiBhbmQgLXEgYXJlIGV4Y2x1c2l2ZS5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdmVyYm9zZSA9IC0xOworCX0KKwogCWlmIChwYXJhbXMubWF4X3Byb2JlX3BvaW50cyA9PSAwKQogCQlwYXJhbXMubWF4X3Byb2JlX3BvaW50cyA9IE1BWF9QUk9CRVM7CiAKQEAgLTQwOSwyMiArNDI4LDYgQEAKIAlzeW1ib2xfY29uZi50cnlfdm1saW51eF9wYXRoID0gKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA9PSBOVUxMKTsKIAogCWlmIChwYXJhbXMubGlzdF9ldmVudHMpIHsKLQkJaWYgKHBhcmFtcy5tb2RfZXZlbnRzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLWFkZC8tLWRlbC5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQotCQlpZiAocGFyYW1zLnNob3dfbGluZXMpIHsKLQkJCXByX2VycigiICBFcnJvcjogRG9uJ3QgdXNlIC0tbGlzdCB3aXRoIC0tbGluZS5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQotCQlpZiAocGFyYW1zLnNob3dfdmFycykgewotCQkJcHJfZXJyKCIgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLXZhcnMuXG4iKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KLQkJaWYgKHBhcmFtcy5zaG93X2Z1bmNzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLWZ1bmNzLlxuIik7Ci0JCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwotCQl9CiAJCWlmIChwYXJhbXMudXByb2JlcykgewogCQkJcHJfd2FybmluZygiICBFcnJvcjogRG9uJ3QgdXNlIC0tbGlzdCB3aXRoIC0tZXhlYy5cbiIpOwogCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKQEAgLTQzNSwxOSArNDM4LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKHBhcmFtcy5zaG93X2Z1bmNzKSB7Ci0JCWlmIChwYXJhbXMubmV2ZW50cyAhPSAwIHx8IHBhcmFtcy5kZWxsaXN0KSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWZ1bmNzIHdpdGgiCi0JCQkgICAgICAgIiAtLWFkZC8tLWRlbC5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQotCQlpZiAocGFyYW1zLnNob3dfbGluZXMpIHsKLQkJCXByX2VycigiICBFcnJvcjogRG9uJ3QgdXNlIC0tZnVuY3Mgd2l0aCAtLWxpbmUuXG4iKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KLQkJaWYgKHBhcmFtcy5zaG93X3ZhcnMpIHsKLQkJCXByX2VycigiICBFcnJvcjogRG9uJ3QgdXNlIC0tZnVuY3Mgd2l0aCAtLXZhcnMuXG4iKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KIAkJaWYgKCFwYXJhbXMuZmlsdGVyKQogCQkJcGFyYW1zLmZpbHRlciA9IHN0cmZpbHRlcl9fbmV3KERFRkFVTFRfRlVOQ19GSUxURVIsCiAJCQkJCQkgICAgICAgTlVMTCk7CkBAIC00NjIsMTYgKzQ1Miw2IEBACiAKICNpZmRlZiBIQVZFX0RXQVJGX1NVUFBPUlQKIAlpZiAocGFyYW1zLnNob3dfbGluZXMpIHsKLQkJaWYgKHBhcmFtcy5tb2RfZXZlbnRzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpbmUgd2l0aCIKLQkJCSAgICAgICAiIC0tYWRkLy0tZGVsLlxuIik7Ci0JCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwotCQl9Ci0JCWlmIChwYXJhbXMuc2hvd192YXJzKSB7Ci0JCQlwcl9lcnIoIiBFcnJvcjogRG9uJ3QgdXNlIC0tbGluZSB3aXRoIC0tdmFycy5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQotCiAJCXJldCA9IHNob3dfbGluZV9yYW5nZSgmcGFyYW1zLmxpbmVfcmFuZ2UsIHBhcmFtcy50YXJnZXQsCiAJCQkJICAgICAgcGFyYW1zLnVwcm9iZXMpOwogCQlpZiAocmV0IDwgMCkKQEAgLTQ3OSwxMSArNDU5LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKHBhcmFtcy5zaG93X3ZhcnMpIHsKLQkJaWYgKHBhcmFtcy5tb2RfZXZlbnRzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLXZhcnMgd2l0aCIKLQkJCSAgICAgICAiIC0tYWRkLy0tZGVsLlxuIik7Ci0JCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwotCQl9CiAJCWlmICghcGFyYW1zLmZpbHRlcikKIAkJCXBhcmFtcy5maWx0ZXIgPSBzdHJmaWx0ZXJfX25ldyhERUZBVUxUX1ZBUl9GSUxURVIsCiAJCQkJCQkgICAgICAgTlVMTCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggMjU4M2E5Yi4uODY0OGM2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtMjAwLDYgKzIwMCwxNyBAQAogCWlmIChzaXplID09IDApCiAJCXJldHVybiAwOwogCisJLyoKKwkgKiBEdXJpbmcgdGhpcyBwcm9jZXNzLCBpdCdsbCBsb2FkIGtlcm5lbCBtYXAgYW5kIHJlcGxhY2UgdGhlCisJICogZHNvLT5sb25nX25hbWUgdG8gYSByZWFsIHBhdGhuYW1lIGl0IGZvdW5kLiAgSW4gdGhpcyBjYXNlCisJICogd2UgcHJlZmVyIHRoZSB2bWxpbnV4IHBhdGggbGlrZQorCSAqICAgL2xpYi9tb2R1bGVzLzMuMTYuNC9idWlsZC92bWxpbnV4CisJICoKKwkgKiByYXRoZXIgdGhhbiBidWlsZC1pZCBwYXRoIChpbiBkZWJ1ZyBkaXJlY3RvcnkpLgorCSAqICAgJEhPTUUvLmRlYnVnLy5idWlsZC1pZC9mMC82ZTE3YWE1MGFkZjRkMDBiODg5MjVlMDM3NzVkZTEwNzYxMTU1MQorCSAqLworCXN5bWJvbF9jb25mLmlnbm9yZV92bWxpbnV4X2J1aWxkaWQgPSB0cnVlOworCiAJcmV0dXJuIF9fcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCBzdGFydCwKIAkJCQkJICAgICAgc2l6ZSAtIHN0YXJ0LAogCQkJCQkgICAgICBzaXplLCAmYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMpOwpAQCAtNjgwLDExICs2OTEsMTIgQEAKIAlyZXR1cm4gcGVyZl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVjb3JkX3VzYWdlW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IF9fcmVjb3JkX3VzYWdlW10gPSB7CiAJInBlcmYgcmVjb3JkIFs8b3B0aW9ucz5dIFs8Y29tbWFuZD5dIiwKIAkicGVyZiByZWNvcmQgWzxvcHRpb25zPl0gLS0gPGNvbW1hbmQ+IFs8b3B0aW9ucz5dIiwKIAlOVUxMCiB9OworY29uc3QgY2hhciAqIGNvbnN0ICpyZWNvcmRfdXNhZ2UgPSBfX3JlY29yZF91c2FnZTsKIAogLyoKICAqIFhYWCBJZGVhbGx5IHdvdWxkIGJlIGxvY2FsIHRvIGNtZF9yZWNvcmQoKSBhbmQgcGFzc2VkIHRvIGEgcmVjb3JkX19uZXcKQEAgLTcyNSw3ICs3MzcsNyBAQAogICogcGVyZl9ldmxpc3RfX3ByZXBhcmVfd29ya2xvYWQsIGV0YyBpbnN0ZWFkIG9mIGZvcmsrZXhlYydpbiAncGVyZiByZWNvcmQnLAogICogdXNpbmcgcGlwZXMsIGV0Yy4KICAqLwotY29uc3Qgc3RydWN0IG9wdGlvbiByZWNvcmRfb3B0aW9uc1tdID0geworc3RydWN0IG9wdGlvbiBfX3JlY29yZF9vcHRpb25zW10gPSB7CiAJT1BUX0NBTExCQUNLKCdlJywgImV2ZW50IiwgJnJlY29yZC5ldmxpc3QsICJldmVudCIsCiAJCSAgICAgImV2ZW50IHNlbGVjdG9yLiB1c2UgJ3BlcmYgbGlzdCcgdG8gbGlzdCBhdmFpbGFibGUgZXZlbnRzIiwKIAkJICAgICBwYXJzZV9ldmVudHNfb3B0aW9uKSwKQEAgLTc5OSw5ICs4MTEsMTMgQEAKIAkJICAgICJzYW1wbGUgdHJhbnNhY3Rpb24gZmxhZ3MgKHNwZWNpYWwgZXZlbnRzIG9ubHkpIiksCiAJT1BUX0JPT0xFQU4oMCwgInBlci10aHJlYWQiLCAmcmVjb3JkLm9wdHMudGFyZ2V0LnBlcl90aHJlYWQsCiAJCSAgICAidXNlIHBlci10aHJlYWQgbW1hcHMiKSwKKwlPUFRfQk9PTEVBTignSScsICJpbnRyLXJlZ3MiLCAmcmVjb3JkLm9wdHMuc2FtcGxlX2ludHJfcmVncywKKwkJICAgICJTYW1wbGUgbWFjaGluZSByZWdpc3RlcnMgb24gaW50ZXJydXB0IiksCiAJT1BUX0VORCgpCiB9OwogCitzdHJ1Y3Qgb3B0aW9uICpyZWNvcmRfb3B0aW9ucyA9IF9fcmVjb3JkX29wdGlvbnM7CisKIGludCBjbWRfcmVjb3JkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fbWF5YmVfdW51c2VkKQogewogCWludCBlcnIgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCmluZGV4IDE0MGE2Y2QuLjM5MzY3NjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKQEAgLTIyNiw4ICsyMjYsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKLQkJCXVpX19lcnJvcigiU2VsZWN0ZWQgLWcgYnV0IG5vIGNhbGxjaGFpbiBkYXRhLiBEaWQgIgotCQkJCSAgICAieW91IGNhbGwgJ3BlcmYgcmVjb3JkJyB3aXRob3V0IC1nP1xuIik7CisJCQl1aV9fZXJyb3IoIlNlbGVjdGVkIC1nIG9yIC0tYnJhbmNoLWhpc3RvcnkgYnV0IG5vICIKKwkJCQkgICJjYWxsY2hhaW4gZGF0YS4gRGlkXG4iCisJCQkJICAieW91IGNhbGwgJ3BlcmYgcmVjb3JkJyB3aXRob3V0IC1nP1xuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9IGVsc2UgaWYgKCFyZXAtPmRvbnRfdXNlX2NhbGxjaGFpbnMgJiYKQEAgLTU3NSw2ICs1NzYsNyBAQAogCXN0cnVjdCBzdGF0IHN0OwogCWJvb2wgaGFzX2JyX3N0YWNrID0gZmFsc2U7CiAJaW50IGJyYW5jaF9tb2RlID0gLTE7CisJYm9vbCBicmFuY2hfY2FsbF9tb2RlID0gZmFsc2U7CiAJY2hhciBjYWxsY2hhaW5fZGVmYXVsdF9vcHRbXSA9ICJmcmFjdGFsLDAuNSxjYWxsZWUiOwogCWNvbnN0IGNoYXIgKiBjb25zdCByZXBvcnRfdXNhZ2VbXSA9IHsKIAkJInBlcmYgcmVwb3J0IFs8b3B0aW9ucz5dIiwKQEAgLTYzNyw4ICs2MzksOCBAQAogCQkgICAicmVnZXggZmlsdGVyIHRvIGlkZW50aWZ5IHBhcmVudCwgc2VlOiAnLS1zb3J0IHBhcmVudCciKSwKIAlPUFRfQk9PTEVBTigneCcsICJleGNsdWRlLW90aGVyIiwgJnN5bWJvbF9jb25mLmV4Y2x1ZGVfb3RoZXIsCiAJCSAgICAiT25seSBkaXNwbGF5IGVudHJpZXMgd2l0aCBwYXJlbnQtbWF0Y2giKSwKLQlPUFRfQ0FMTEJBQ0tfREVGQVVMVCgnZycsICJjYWxsLWdyYXBoIiwgJnJlcG9ydCwgIm91dHB1dF90eXBlLG1pbl9wZXJjZW50WyxwcmludF9saW1pdF0sY2FsbF9vcmRlciIsCi0JCSAgICAgIkRpc3BsYXkgY2FsbGNoYWlucyB1c2luZyBvdXRwdXRfdHlwZSAoZ3JhcGgsIGZsYXQsIGZyYWN0YWwsIG9yIG5vbmUpICwgbWluIHBlcmNlbnQgdGhyZXNob2xkLCBvcHRpb25hbCBwcmludCBsaW1pdCwgY2FsbGNoYWluIG9yZGVyLCBrZXkgKGZ1bmN0aW9uIG9yIGFkZHJlc3MpLiAiCisJT1BUX0NBTExCQUNLX0RFRkFVTFQoJ2cnLCAiY2FsbC1ncmFwaCIsICZyZXBvcnQsICJvdXRwdXRfdHlwZSxtaW5fcGVyY2VudFsscHJpbnRfbGltaXRdLGNhbGxfb3JkZXJbLGJyYW5jaF0iLAorCQkgICAgICJEaXNwbGF5IGNhbGxjaGFpbnMgdXNpbmcgb3V0cHV0X3R5cGUgKGdyYXBoLCBmbGF0LCBmcmFjdGFsLCBvciBub25lKSAsIG1pbiBwZXJjZW50IHRocmVzaG9sZCwgb3B0aW9uYWwgcHJpbnQgbGltaXQsIGNhbGxjaGFpbiBvcmRlciwga2V5IChmdW5jdGlvbiBvciBhZGRyZXNzKSwgYWRkIGJyYW5jaGVzLiAiCiAJCSAgICAgIkRlZmF1bHQ6IGZyYWN0YWwsMC41LGNhbGxlZSxmdW5jdGlvbiIsICZyZXBvcnRfcGFyc2VfY2FsbGNoYWluX29wdCwgY2FsbGNoYWluX2RlZmF1bHRfb3B0KSwKIAlPUFRfQk9PTEVBTigwLCAiY2hpbGRyZW4iLCAmc3ltYm9sX2NvbmYuY3VtdWxhdGVfY2FsbGNoYWluLAogCQkgICAgIkFjY3VtdWxhdGUgY2FsbGNoYWlucyBvZiBjaGlsZHJlbiBhbmQgc2hvdyB0b3RhbCBvdmVyaGVhZCBhcyB3ZWxsIiksCkBAIC02ODQsNyArNjg2LDEwIEBACiAJT1BUX0JPT0xFQU4oMCwgImdyb3VwIiwgJnN5bWJvbF9jb25mLmV2ZW50X2dyb3VwLAogCQkgICAgIlNob3cgZXZlbnQgZ3JvdXAgaW5mb3JtYXRpb24gdG9nZXRoZXIiKSwKIAlPUFRfQ0FMTEJBQ0tfTk9PUFQoJ2InLCAiYnJhbmNoLXN0YWNrIiwgJmJyYW5jaF9tb2RlLCAiIiwKLQkJICAgICJ1c2UgYnJhbmNoIHJlY29yZHMgZm9yIGhpc3RvZ3JhbSBmaWxsaW5nIiwgcGFyc2VfYnJhbmNoX21vZGUpLAorCQkgICAgInVzZSBicmFuY2ggcmVjb3JkcyBmb3IgcGVyIGJyYW5jaCBoaXN0b2dyYW0gZmlsbGluZyIsCisJCSAgICBwYXJzZV9icmFuY2hfbW9kZSksCisJT1BUX0JPT0xFQU4oMCwgImJyYW5jaC1oaXN0b3J5IiwgJmJyYW5jaF9jYWxsX21vZGUsCisJCSAgICAiYWRkIGxhc3QgYnJhbmNoIHJlY29yZHMgdG8gY2FsbCBoaXN0b3J5IiksCiAJT1BUX1NUUklORygwLCAib2JqZHVtcCIsICZvYmpkdW1wX3BhdGgsICJwYXRoIiwKIAkJICAgIm9iamR1bXAgYmluYXJ5IHRvIHVzZSBmb3IgZGlzYXNzZW1ibHkgYW5kIGFubm90YXRpb25zIiksCiAJT1BUX0JPT0xFQU4oMCwgImRlbWFuZ2xlIiwgJnN5bWJvbF9jb25mLmRlbWFuZ2xlLApAQCAtNzQ1LDEwICs3NTAsMjQgQEAKIAloYXNfYnJfc3RhY2sgPSBwZXJmX2hlYWRlcl9faGFzX2ZlYXQoJnNlc3Npb24tPmhlYWRlciwKIAkJCQkJICAgICBIRUFERVJfQlJBTkNIX1NUQUNLKTsKIAotCWlmICgoYnJhbmNoX21vZGUgPT0gLTEgJiYgaGFzX2JyX3N0YWNrKSB8fCBicmFuY2hfbW9kZSA9PSAxKSB7CisJLyoKKwkgKiBCcmFuY2ggbW9kZSBpcyBhIHRyaXN0YXRlOgorCSAqIC0xIG1lYW5zIGRlZmF1bHQsIHNvIGRlY2lkZSBiYXNlZCBvbiB0aGUgZmlsZSBoYXZpbmcgYnJhbmNoIGRhdGEuCisJICogMC8xIG1lYW5zIHRoZSB1c2VyIGNob3NlIGEgbW9kZS4KKwkgKi8KKwlpZiAoKChicmFuY2hfbW9kZSA9PSAtMSAmJiBoYXNfYnJfc3RhY2spIHx8IGJyYW5jaF9tb2RlID09IDEpICYmCisJICAgIGJyYW5jaF9jYWxsX21vZGUgPT0gLTEpIHsKIAkJc29ydF9fbW9kZSA9IFNPUlRfTU9ERV9fQlJBTkNIOwogCQlzeW1ib2xfY29uZi5jdW11bGF0ZV9jYWxsY2hhaW4gPSBmYWxzZTsKIAl9CisJaWYgKGJyYW5jaF9jYWxsX21vZGUpIHsKKwkJY2FsbGNoYWluX3BhcmFtLmtleSA9IENDS0VZX0FERFJFU1M7CisJCWNhbGxjaGFpbl9wYXJhbS5icmFuY2hfY2FsbHN0YWNrID0gMTsKKwkJc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiA9IHRydWU7CisJCWNhbGxjaGFpbl9yZWdpc3Rlcl9wYXJhbSgmY2FsbGNoYWluX3BhcmFtKTsKKwkJaWYgKHNvcnRfb3JkZXIgPT0gTlVMTCkKKwkJCXNvcnRfb3JkZXIgPSAic3JjbGluZSxzeW1ib2wsZHNvIjsKKwl9CiAKIAlpZiAocmVwb3J0Lm1lbV9tb2RlKSB7CiAJCWlmIChzb3J0X19tb2RlID09IFNPUlRfTU9ERV9fQlJBTkNIKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKaW5kZXggOTcwOGExMi4uY2UzMDRkZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYwpAQCAtMjMsNyArMjMsNiBAQAogc3RhdGljIGJvb2wJCQlkZWJ1Z19tb2RlOwogc3RhdGljIHU2NAkJCWxhc3RfdGltZXN0YW1wOwogc3RhdGljIHU2NAkJCW5yX3Vub3JkZXJlZDsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgb3B0aW9uCXJlY29yZF9vcHRpb25zW107CiBzdGF0aWMgYm9vbAkJCW5vX2NhbGxjaGFpbjsKIHN0YXRpYyBib29sCQkJbGF0ZW5jeV9mb3JtYXQ7CiBzdGF0aWMgYm9vbAkJCXN5c3RlbV93aWRlOwpAQCAtMzc5LDcgKzM3OCw2IEBACiAKIHN0YXRpYyB2b2lkIHByaW50X3NhbXBsZV9hZGRyKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKLQkJCSAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCiAJCQkgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCSAgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cikKIHsKQEAgLTM5MCw3ICszODgsNyBAQAogCWlmICghc2FtcGxlX2FkZHJfY29ycmVsYXRlc19zeW0oYXR0cikpCiAJCXJldHVybjsKIAotCXBlcmZfZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlX2FkZHIoZXZlbnQsIHNhbXBsZSwgbWFjaGluZSwgdGhyZWFkLCAmYWwpOworCXBlcmZfZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlX2FkZHIoZXZlbnQsIHNhbXBsZSwgdGhyZWFkLCAmYWwpOwogCiAJaWYgKFBSSU5UX0ZJRUxEKFNZTSkpIHsKIAkJcHJpbnRmKCIgIik7CkBAIC00MzgsNyArNDM2LDcgQEAKIAkgICAgKChldnNlbC0+YXR0ci5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpICYmCiAJICAgICAhb3V0cHV0W2F0dHItPnR5cGVdLnVzZXJfc2V0KSkgewogCQlwcmludGYoIiA9PiAiKTsKLQkJcHJpbnRfc2FtcGxlX2FkZHIoZXZlbnQsIHNhbXBsZSwgYWwtPm1hY2hpbmUsIHRocmVhZCwgYXR0cik7CisJCXByaW50X3NhbXBsZV9hZGRyKGV2ZW50LCBzYW1wbGUsIHRocmVhZCwgYXR0cik7CiAJfQogCiAJaWYgKHByaW50X3NyY2xpbmVfbGFzdCkKQEAgLTQ3NSw3ICs0NzMsNyBAQAogCQlldmVudF9mb3JtYXRfX3ByaW50KGV2c2VsLT50cF9mb3JtYXQsIHNhbXBsZS0+Y3B1LAogCQkJCSAgICBzYW1wbGUtPnJhd19kYXRhLCBzYW1wbGUtPnJhd19zaXplKTsKIAlpZiAoUFJJTlRfRklFTEQoQUREUikpCi0JCXByaW50X3NhbXBsZV9hZGRyKGV2ZW50LCBzYW1wbGUsIGFsLT5tYWNoaW5lLCB0aHJlYWQsIGF0dHIpOworCQlwcmludF9zYW1wbGVfYWRkcihldmVudCwgc2FtcGxlLCB0aHJlYWQsIGF0dHIpOwogCiAJaWYgKFBSSU5UX0ZJRUxEKElQKSkgewogCQlpZiAoIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwppbmRleCAwNTVjZTkyLi44OTEwODYzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKQEAgLTM4OCwyMCArMzg4LDEwMiBAQAogCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfaXRsYl9jYWNoZV9zdGF0c1swXSwgY291bnRbMF0pOwogfQogCitzdGF0aWMgdm9pZCB6ZXJvX3Blcl9wa2coc3RydWN0IHBlcmZfZXZzZWwgKmNvdW50ZXIpCit7CisJaWYgKGNvdW50ZXItPnBlcl9wa2dfbWFzaykKKwkJbWVtc2V0KGNvdW50ZXItPnBlcl9wa2dfbWFzaywgMCwgTUFYX05SX0NQVVMpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3Blcl9wa2coc3RydWN0IHBlcmZfZXZzZWwgKmNvdW50ZXIsIGludCBjcHUsIGJvb2wgKnNraXApCit7CisJdW5zaWduZWQgbG9uZyAqbWFzayA9IGNvdW50ZXItPnBlcl9wa2dfbWFzazsKKwlzdHJ1Y3QgY3B1X21hcCAqY3B1cyA9IHBlcmZfZXZzZWxfX2NwdXMoY291bnRlcik7CisJaW50IHM7CisKKwkqc2tpcCA9IGZhbHNlOworCisJaWYgKCFjb3VudGVyLT5wZXJfcGtnKQorCQlyZXR1cm4gMDsKKworCWlmIChjcHVfbWFwX19lbXB0eShjcHVzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW1hc2spIHsKKwkJbWFzayA9IHphbGxvYyhNQVhfTlJfQ1BVUyk7CisJCWlmICghbWFzaykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWNvdW50ZXItPnBlcl9wa2dfbWFzayA9IG1hc2s7CisJfQorCisJcyA9IGNwdV9tYXBfX2dldF9zb2NrZXQoY3B1cywgY3B1KTsKKwlpZiAocyA8IDApCisJCXJldHVybiAtMTsKKworCSpza2lwID0gdGVzdF9hbmRfc2V0X2JpdChzLCBtYXNrKSA9PSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfY2Ioc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgY3B1LCBpbnQgdGhyZWFkIF9fbWF5YmVfdW51c2VkLAorCQkgICBzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICpjb3VudCkKK3sKKwlzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICphZ2dyID0gJmV2c2VsLT5jb3VudHMtPmFnZ3I7CisJc3RhdGljIHN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgemVybzsKKwlib29sIHNraXAgPSBmYWxzZTsKKworCWlmIChjaGVja19wZXJfcGtnKGV2c2VsLCBjcHUsICZza2lwKSkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHBlci1wa2cgY291bnRlclxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc2tpcCkKKwkJY291bnQgPSAmemVybzsKKworCXN3aXRjaCAoYWdncl9tb2RlKSB7CisJY2FzZSBBR0dSX0NPUkU6CisJY2FzZSBBR0dSX1NPQ0tFVDoKKwljYXNlIEFHR1JfTk9ORToKKwkJaWYgKCFldnNlbC0+c25hcHNob3QpCisJCQlwZXJmX2V2c2VsX19jb21wdXRlX2RlbHRhcyhldnNlbCwgY3B1LCBjb3VudCk7CisJCXBlcmZfY291bnRzX3ZhbHVlc19fc2NhbGUoY291bnQsIHNjYWxlLCBOVUxMKTsKKwkJZXZzZWwtPmNvdW50cy0+Y3B1W2NwdV0gPSAqY291bnQ7CisJCXVwZGF0ZV9zaGFkb3dfc3RhdHMoZXZzZWwsIGNvdW50LT52YWx1ZXMpOworCQlicmVhazsKKwljYXNlIEFHR1JfR0xPQkFMOgorCQlhZ2dyLT52YWwgKz0gY291bnQtPnZhbDsKKwkJaWYgKHNjYWxlKSB7CisJCQlhZ2dyLT5lbmEgKz0gY291bnQtPmVuYTsKKwkJCWFnZ3ItPnJ1biArPSBjb3VudC0+cnVuOworCQl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyKTsKKwogLyoKICAqIFJlYWQgb3V0IHRoZSByZXN1bHRzIG9mIGEgc2luZ2xlIGNvdW50ZXI6CiAgKiBhZ2dyZWdhdGUgY291bnRzIGFjcm9zcyBDUFVzIGluIHN5c3RlbS13aWRlIG1vZGUKICAqLwogc3RhdGljIGludCByZWFkX2NvdW50ZXJfYWdncihzdHJ1Y3QgcGVyZl9ldnNlbCAqY291bnRlcikKIHsKKwlzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICphZ2dyID0gJmNvdW50ZXItPmNvdW50cy0+YWdncjsKIAlzdHJ1Y3QgcGVyZl9zdGF0ICpwcyA9IGNvdW50ZXItPnByaXY7CiAJdTY0ICpjb3VudCA9IGNvdW50ZXItPmNvdW50cy0+YWdnci52YWx1ZXM7CiAJaW50IGk7CiAKLQlpZiAoX19wZXJmX2V2c2VsX19yZWFkKGNvdW50ZXIsIHBlcmZfZXZzZWxfX25yX2NwdXMoY291bnRlciksCi0JCQkgICAgICAgdGhyZWFkX21hcF9fbnIoZXZzZWxfbGlzdC0+dGhyZWFkcyksIHNjYWxlKSA8IDApCisJYWdnci0+dmFsID0gYWdnci0+ZW5hID0gYWdnci0+cnVuID0gMDsKKworCWlmIChyZWFkX2NvdW50ZXIoY291bnRlcikpCiAJCXJldHVybiAtMTsKIAorCWlmICghY291bnRlci0+c25hcHNob3QpCisJCXBlcmZfZXZzZWxfX2NvbXB1dGVfZGVsdGFzKGNvdW50ZXIsIC0xLCBhZ2dyKTsKKwlwZXJmX2NvdW50c192YWx1ZXNfX3NjYWxlKGFnZ3IsIHNjYWxlLCAmY291bnRlci0+Y291bnRzLT5zY2FsZWQpOworCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkJdXBkYXRlX3N0YXRzKCZwcy0+cmVzX3N0YXRzW2ldLCBjb3VudFtpXSk7CiAKQEAgLTQyNCwxNiArNTA2LDIxIEBACiAgKi8KIHN0YXRpYyBpbnQgcmVhZF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyKQogewotCXU2NCAqY291bnQ7Ci0JaW50IGNwdTsKKwlpbnQgbnRocmVhZHMgPSB0aHJlYWRfbWFwX19ucihldnNlbF9saXN0LT50aHJlYWRzKTsKKwlpbnQgbmNwdXMgPSBwZXJmX2V2c2VsX19ucl9jcHVzKGNvdW50ZXIpOworCWludCBjcHUsIHRocmVhZDsKIAotCWZvciAoY3B1ID0gMDsgY3B1IDwgcGVyZl9ldnNlbF9fbnJfY3B1cyhjb3VudGVyKTsgY3B1KyspIHsKLQkJaWYgKF9fcGVyZl9ldnNlbF9fcmVhZF9vbl9jcHUoY291bnRlciwgY3B1LCAwLCBzY2FsZSkgPCAwKQotCQkJcmV0dXJuIC0xOworCWlmIChjb3VudGVyLT5zeXN0ZW1fd2lkZSkKKwkJbnRocmVhZHMgPSAxOwogCi0JCWNvdW50ID0gY291bnRlci0+Y291bnRzLT5jcHVbY3B1XS52YWx1ZXM7CisJaWYgKGNvdW50ZXItPnBlcl9wa2cpCisJCXplcm9fcGVyX3BrZyhjb3VudGVyKTsKIAotCQl1cGRhdGVfc2hhZG93X3N0YXRzKGNvdW50ZXIsIGNvdW50KTsKKwlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IG50aHJlYWRzOyB0aHJlYWQrKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IG5jcHVzOyBjcHUrKykgeworCQkJaWYgKHBlcmZfZXZzZWxfX3JlYWRfY2IoY291bnRlciwgY3B1LCB0aHJlYWQsIHJlYWRfY2IpKQorCQkJCXJldHVybiAtMTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCmluZGV4IDM1YjQyNWIuLmYzYmIxYTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKQEAgLTUyOCw3ICs1MjgsNyBAQAogCQl9CiAKIAkJdGFsLmZpbHRlcmVkID0gMDsKLQkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oYWwudGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLAorCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihhbC50aHJlYWQsIGNwdW1vZGUsCiAJCQkJCSAgIE1BUF9fRlVOQ1RJT04sIGlwLCAmdGFsKTsKIAogCQlpZiAodGFsLnN5bSkKQEAgLTE5NjMsNyArMTk2Myw3IEBACiAJCU5VTEwKIAl9OwogCi0JY29uc3Qgc3RydWN0IG9wdGlvbiByZWNvcmRfb3B0aW9uc1tdID0geworCWNvbnN0IHN0cnVjdCBvcHRpb24gdGltZWNoYXJ0X3JlY29yZF9vcHRpb25zW10gPSB7CiAJT1BUX0JPT0xFQU4oJ1AnLCAicG93ZXItb25seSIsICZ0Y2hhcnQucG93ZXJfb25seSwgIm91dHB1dCBwb3dlciBkYXRhIG9ubHkiKSwKIAlPUFRfQk9PTEVBTignVCcsICJ0YXNrcy1vbmx5IiwgJnRjaGFydC50YXNrc19vbmx5LAogCQkgICAgIm91dHB1dCBwcm9jZXNzZXMgZGF0YSBvbmx5IiksCkBAIC0xOTcyLDcgKzE5NzIsNyBAQAogCU9QVF9CT09MRUFOKCdnJywgImNhbGxjaGFpbiIsICZ0Y2hhcnQud2l0aF9iYWNrdHJhY2UsICJyZWNvcmQgY2FsbGNoYWluIiksCiAJT1BUX0VORCgpCiAJfTsKLQljb25zdCBjaGFyICogY29uc3QgcmVjb3JkX3VzYWdlW10gPSB7CisJY29uc3QgY2hhciAqIGNvbnN0IHRpbWVjaGFydF9yZWNvcmRfdXNhZ2VbXSA9IHsKIAkJInBlcmYgdGltZWNoYXJ0IHJlY29yZCBbPG9wdGlvbnM+XSIsCiAJCU5VTEwKIAl9OwpAQCAtMTk4NSw3ICsxOTg1LDggQEAKIAl9CiAKIAlpZiAoYXJnYyAmJiAhc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpIHsKLQkJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcmVjb3JkX29wdGlvbnMsIHJlY29yZF91c2FnZSwKKwkJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgdGltZWNoYXJ0X3JlY29yZF9vcHRpb25zLAorCQkJCSAgICAgdGltZWNoYXJ0X3JlY29yZF91c2FnZSwKIAkJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwogCiAJCWlmICh0Y2hhcnQucG93ZXJfb25seSAmJiB0Y2hhcnQudGFza3Nfb25seSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwppbmRleCBmYjEyNjQ1Li44M2E0ODM1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwpAQCAtMTg0Niw3ICsxODQ2LDcgQEAKIAlpZiAodHJhY2UtPnN1bW1hcnlfb25seSkKIAkJcmV0dXJuIDA7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIHRyYWNlLT5ob3N0LCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAorCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwKIAkJCSAgICAgIHNhbXBsZS0+aXAsICZhbCk7CiAKIAl0cmFjZV9fZnByaW50Zl9lbnRyeV9oZWFkKHRyYWNlLCB0aHJlYWQsIDAsIHNhbXBsZS0+dGltZSwgdHJhY2UtPm91dHB1dCk7CkBAIC0xODU5LDExICsxODU5LDExIEBACiAKIAlmcHJpbnRmKHRyYWNlLT5vdXRwdXQsICJdID0+ICIpOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCB0cmFjZS0+aG9zdCwgY3B1bW9kZSwgTUFQX19WQVJJQUJMRSwKKwl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIGNwdW1vZGUsIE1BUF9fVkFSSUFCTEUsCiAJCQkJICAgc2FtcGxlLT5hZGRyLCAmYWwpOwogCiAJaWYgKCFhbC5tYXApIHsKLQkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCB0cmFjZS0+aG9zdCwgY3B1bW9kZSwKKwkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBjcHVtb2RlLAogCQkJCQkgICBNQVBfX0ZVTkNUSU9OLCBzYW1wbGUtPmFkZHIsICZhbCk7CiAKIAkJaWYgKGFsLm1hcCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKaW5kZXggNThmNjA5MS4uNWQ0YjAzOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKQEAgLTE1MCw3ICsxNTAsNyBAQAogIyBhZGRpbmcgYXNzZW1ibGVyIGZpbGVzIG1pc3NpbmcgdGhlIC5HTlUtc3RhY2sgbGlua2VyIG5vdGUuCiBMREZMQUdTICs9IC1XbCwteixub2V4ZWNzdGFjawogCi1FWFRMSUJTID0gLWxlbGYgLWxwdGhyZWFkIC1scnQgLWxtIC1sZGwKK0VYVExJQlMgPSAtbHB0aHJlYWQgLWxydCAtbG0gLWxkbAogCiBpZm5lcSAoJChPVVRQVVQpLCkKICAgT1VUUFVUX0ZFQVRVUkVTID0gJChPVVRQVVQpY29uZmlnL2ZlYXR1cmUtY2hlY2tzLwpAQCAtMjAwLDcgKzIwMCw4IEBACiAJbGlidW53aW5kCQkJXAogCXN0YWNrcHJvdGVjdG9yLWFsbAkJXAogCXRpbWVyZmQJCQkJXAotCWxpYmR3LWR3YXJmLXVud2luZAorCWxpYmR3LWR3YXJmLXVud2luZAkJXAorCXpsaWIKIAogTElCX0ZFQVRVUkVfVEVTVFMgPQkJCVwKIAlkd2FyZgkJCQlcCkBAIC0yMTQsNyArMjE1LDggQEAKIAlsaWJweXRob24JCQlcCiAJbGlic2xhbmcJCQlcCiAJbGlidW53aW5kCQkJXAotCWxpYmR3LWR3YXJmLXVud2luZAorCWxpYmR3LWR3YXJmLXVud2luZAkJXAorCXpsaWIKIAogVkZfRkVBVFVSRV9URVNUUyA9CQkJXAogCWJhY2t0cmFjZQkJCVwKQEAgLTIzMCw3ICsyMzIsOSBAQAogCWJpb25pYwkJCQlcCiAJbGliZXJ0eQkJCQlcCiAJbGliZXJ0eS16CQkJXAotCWNwbHVzLWRlbWFuZ2xlCisJY3BsdXMtZGVtYW5nbGUJCQlcCisJY29tcGlsZS0zMgkJCVwKKwljb21waWxlLXgzMgogCiAjIFNldCBGRUFUVVJFX0NIRUNLXyhDfExEKUZMQUdTLWFsbCBmb3IgYWxsIENPUkVfRkVBVFVSRV9URVNUUyBmZWF0dXJlcy4KICMgSWYgaW4gdGhlIGZ1dHVyZSB3ZSBuZWVkIHBlci1mZWF0dXJlIGNoZWNrcy9mbGFncyBmb3IgZmVhdHVyZXMgbm90CkBAIC0zNTAsNiArMzU0LDcgQEAKIAogaWZuZGVmIE5PX0xJQkVMRgogICBDRkxBR1MgKz0gLURIQVZFX0xJQkVMRl9TVVBQT1JUCisgIEVYVExJQlMgKz0gLWxlbGYKIAogICBpZmVxICgkKGZlYXR1cmUtbGliZWxmLW1tYXApLCAxKQogICAgIENGTEFHUyArPSAtREhBVkVfTElCRUxGX01NQVBfU1VQUE9SVApAQCAtMzY5LDcgKzM3NCw3IEBACiAgICAgZWxzZQogICAgICAgQ0ZMQUdTICs9IC1ESEFWRV9EV0FSRl9TVVBQT1JUICQoTElCRFdfQ0ZMQUdTKQogICAgICAgTERGTEFHUyArPSAkKExJQkRXX0xERkxBR1MpCi0gICAgICBFWFRMSUJTICs9IC1sZWxmIC1sZHcKKyAgICAgIEVYVExJQlMgKz0gLWxkdwogICAgIGVuZGlmICMgUEVSRl9IQVZFX0RXQVJGX1JFR1MKICAgZW5kaWYgIyBOT19EV0FSRgogZW5kaWYgIyBOT19MSUJFTEYKQEAgLTYwMiw2ICs2MDcsMTUgQEAKICAgQ0ZMQUdTICs9IC1ESEFWRV9MSUJCRkRfU1VQUE9SVAogZW5kaWYKIAoraWZuZGVmIE5PX1pMSUIKKyAgaWZlcSAoJChmZWF0dXJlLXpsaWIpLCAxKQorICAgIENGTEFHUyArPSAtREhBVkVfWkxJQl9TVVBQT1JUCisgICAgRVhUTElCUyArPSAtbHoKKyAgZWxzZQorICAgIE5PX1pMSUIgOj0gMQorICBlbmRpZgorZW5kaWYKKwogaWZuZGVmIE5PX0JBQ0tUUkFDRQogICBpZmVxICgkKGZlYXR1cmUtYmFja3RyYWNlKSwgMSkKICAgICBDRkxBR1MgKz0gLURIQVZFX0JBQ0tUUkFDRV9TVVBQT1JUCkBAIC02MjIsNiArNjM2LDMxIEBACiAgICAgQ0ZMQUdTICs9IC1ESEFWRV9LVk1fU1RBVF9TVVBQT1JUCiBlbmRpZgogCitpZmVxICgke0lTXzY0X0JJVH0sIDEpCisgIGlmbmRlZiBOT19QRVJGX1JFQURfVkRTTzMyCisgICAgJChjYWxsIGZlYXR1cmVfY2hlY2ssY29tcGlsZS0zMikKKyAgICBpZmVxICgkKGZlYXR1cmUtY29tcGlsZS0zMiksIDEpCisgICAgICBDRkxBR1MgKz0gLURIQVZFX1BFUkZfUkVBRF9WRFNPMzIKKyAgICBlbHNlCisgICAgICBOT19QRVJGX1JFQURfVkRTTzMyIDo9IDEKKyAgICBlbmRpZgorICBlbmRpZgorICBpZm5lcSAoJHtJU19YODZfNjR9LCAxKQorICAgIE5PX1BFUkZfUkVBRF9WRFNPWDMyIDo9IDEKKyAgZW5kaWYKKyAgaWZuZGVmIE5PX1BFUkZfUkVBRF9WRFNPWDMyCisgICAgJChjYWxsIGZlYXR1cmVfY2hlY2ssY29tcGlsZS14MzIpCisgICAgaWZlcSAoJChmZWF0dXJlLWNvbXBpbGUteDMyKSwgMSkKKyAgICAgIENGTEFHUyArPSAtREhBVkVfUEVSRl9SRUFEX1ZEU09YMzIKKyAgICBlbHNlCisgICAgICBOT19QRVJGX1JFQURfVkRTT1gzMiA6PSAxCisgICAgZW5kaWYKKyAgZW5kaWYKK2Vsc2UKKyAgTk9fUEVSRl9SRUFEX1ZEU08zMiA6PSAxCisgIE5PX1BFUkZfUkVBRF9WRFNPWDMyIDo9IDEKK2VuZGlmCisKICMgQW1vbmcgdGhlIHZhcmlhYmxlcyBiZWxvdywgdGhlc2U6CiAjICAgcGVyZmV4ZWNkaXIKICMgICB0ZW1wbGF0ZV9kaXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlLmFyY2ggYi90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZS5hcmNoCmluZGV4IDRiMDY3MTkuLjg1MWNkMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlLmFyY2gKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUuYXJjaApAQCAtMjEsMyArMjEsMTEgQEAKICAgICBSQVdfQVJDSCA6PSB4ODZfNjQKICAgZW5kaWYKIGVuZGlmCisKK2lmZXEgKCR7SVNfWDg2XzY0fSwgMSkKKyAgSVNfNjRfQklUIDo9IDEKK2Vsc2UgaWZlcSAoJChBUkNIKSx4ODYpCisgIElTXzY0X0JJVCA6PSAwCitlbHNlCisgIElTXzY0X0JJVCA6PSAkKHNoZWxsIGVjaG8gX19MUDY0X18gfCAke0NDfSAke0NGTEFHU30gLUUgLXggYyAtIHwgdGFpbCAtbiAxKQorZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvTWFrZWZpbGUKaW5kZXggNzJhYjI5OC4uNTNmMTliNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvTWFrZWZpbGUKQEAgLTI3LDcgKzI3LDEwIEBACiAJdGVzdC1saWJ1bndpbmQtZGVidWctZnJhbWUuYmluCVwKIAl0ZXN0LXN0YWNrcHJvdGVjdG9yLWFsbC5iaW4JXAogCXRlc3QtdGltZXJmZC5iaW4JCVwKLQl0ZXN0LWxpYmR3LWR3YXJmLXVud2luZC5iaW4KKwl0ZXN0LWxpYmR3LWR3YXJmLXVud2luZC5iaW4JXAorCXRlc3QtY29tcGlsZS0zMi5iaW4JCVwKKwl0ZXN0LWNvbXBpbGUteDMyLmJpbgkJXAorCXRlc3QtemxpYi5iaW4KIAogQ0MgOj0gJChDUk9TU19DT01QSUxFKWdjYyAtTUQKIFBLR19DT05GSUcgOj0gJChDUk9TU19DT01QSUxFKXBrZy1jb25maWcKQEAgLTM5LDcgKzQyLDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogdGVzdC1hbGwuYmluOgotCSQoQlVJTEQpIC1XZXJyb3IgLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1PMiAtV2Vycm9yIC1EX0ZPUlRJRllfU09VUkNFPTIgLWxkdyAtbGVsZiAtbG51bWEgLWxlbGYgLWxhdWRpdCAtSS91c3IvaW5jbHVkZS9zbGFuZyAtbHNsYW5nICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMj4vZGV2L251bGwpICQoRkxBR1NfUEVSTF9FTUJFRCkgJChGTEFHU19QWVRIT05fRU1CRUQpIC1EUEFDS0FHRT0nInBlcmYiJyAtbGJmZCAtbGRsCisJJChCVUlMRCkgLVdlcnJvciAtZnN0YWNrLXByb3RlY3Rvci1hbGwgLU8yIC1XZXJyb3IgLURfRk9SVElGWV9TT1VSQ0U9MiAtbGR3IC1sZWxmIC1sbnVtYSAtbGVsZiAtbGF1ZGl0IC1JL3Vzci9pbmNsdWRlL3NsYW5nIC1sc2xhbmcgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsrLTIuMCAyPi9kZXYvbnVsbCkgJChGTEFHU19QRVJMX0VNQkVEKSAkKEZMQUdTX1BZVEhPTl9FTUJFRCkgLURQQUNLQUdFPScicGVyZiInIC1sYmZkIC1sZGwgLWx6CiAKIHRlc3QtaGVsbG8uYmluOgogCSQoQlVJTEQpCkBAIC0xMzEsNiArMTM0LDE1IEBACiB0ZXN0LXN5bmMtY29tcGFyZS1hbmQtc3dhcC5iaW46CiAJJChCVUlMRCkgLVdlcnJvcgogCit0ZXN0LWNvbXBpbGUtMzIuYmluOgorCSQoQ0MpIC1tMzIgLW8gJChPVVRQVVQpJEAgdGVzdC1jb21waWxlLmMKKwordGVzdC1jb21waWxlLXgzMi5iaW46CisJJChDQykgLW14MzIgLW8gJChPVVRQVVQpJEAgdGVzdC1jb21waWxlLmMKKwordGVzdC16bGliLmJpbjoKKwkkKEJVSUxEKSAtbHoKKwogLWluY2x1ZGUgKi5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtYWxsLmMgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LWFsbC5jCmluZGV4IGE3ZDAyMmUuLjY1MmUwMDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtYWxsLmMKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC1hbGwuYwpAQCAtOTMsNiArOTMsMTAgQEAKICMgaW5jbHVkZSAidGVzdC1zeW5jLWNvbXBhcmUtYW5kLXN3YXAuYyIKICN1bmRlZiBtYWluCiAKKyNkZWZpbmUgbWFpbiBtYWluX3Rlc3RfemxpYgorIyBpbmNsdWRlICJ0ZXN0LXpsaWIuYyIKKyN1bmRlZiBtYWluCisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJbWFpbl90ZXN0X2xpYnB5dGhvbigpOwpAQCAtMTE2LDYgKzEyMCw3IEBACiAJbWFpbl90ZXN0X3N0YWNrcHJvdGVjdG9yX2FsbCgpOwogCW1haW5fdGVzdF9saWJkd19kd2FyZl91bndpbmQoKTsKIAltYWluX3Rlc3Rfc3luY19jb21wYXJlX2FuZF9zd2FwKGFyZ2MsIGFyZ3YpOworCW1haW5fdGVzdF96bGliKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtY29tcGlsZS5jIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC1jb21waWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkYmY0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtY29tcGlsZS5jCkBAIC0wLDAgKzEsNCBAQAoraW50IG1haW4odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtemxpYi5jIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC16bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExMWZmZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtemxpYi5jCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgPHpsaWIuaD4KKworaW50IG1haW4odm9pZCkKK3sKKwl6X3N0cmVhbSB6czsKKworCWluZmxhdGVJbml0KCZ6cyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYtcmVhZC12ZHNvLmMgYi90b29scy9wZXJmL3BlcmYtcmVhZC12ZHNvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY0ZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi1yZWFkLXZkc28uYwpAQCAtMCwwICsxLDM0IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBWRFNPX19NQVBfTkFNRSAiW3Zkc29dIgorCisvKgorICogSW5jbHVkZSBkZWZpbml0aW9uIG9mIGZpbmRfdmRzb19tYXAoKSBhbHNvIHVzZWQgaW4gdXRpbC92ZHNvLmMgZm9yCisgKiBidWlsZGluZyBwZXJmLgorICovCisjaW5jbHVkZSAidXRpbC9maW5kLXZkc28tbWFwLmMiCisKK2ludCBtYWluKHZvaWQpCit7CisJdm9pZCAqc3RhcnQsICplbmQ7CisJc2l6ZV90IHNpemUsIHdyaXR0ZW47CisKKwlpZiAoZmluZF92ZHNvX21hcCgmc3RhcnQsICZlbmQpKQorCQlyZXR1cm4gMTsKKworCXNpemUgPSBlbmQgLSBzdGFydDsKKworCXdoaWxlIChzaXplKSB7CisJCXdyaXR0ZW4gPSBmd3JpdGUoc3RhcnQsIDEsIHNpemUsIHN0ZG91dCk7CisJCWlmICghd3JpdHRlbikKKwkJCXJldHVybiAxOworCQlzdGFydCArPSB3cml0dGVuOworCQlzaXplIC09IHdyaXR0ZW47CisJfQorCisJaWYgKGZmbHVzaChzdGRvdXQpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLmggYi90b29scy9wZXJmL3BlcmYuaAppbmRleCAyMjBkNDRlLi4xZGFiYjg1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYuaAorKysgYi90b29scy9wZXJmL3BlcmYuaApAQCAtNTIsNiArNTIsNyBAQAogCWJvb2wJICAgICBzYW1wbGVfd2VpZ2h0OwogCWJvb2wJICAgICBzYW1wbGVfdGltZTsKIAlib29sCSAgICAgcGVyaW9kOworCWJvb2wJICAgICBzYW1wbGVfaW50cl9yZWdzOwogCXVuc2lnbmVkIGludCBmcmVxOwogCXVuc2lnbmVkIGludCBtbWFwX3BhZ2VzOwogCXVuc2lnbmVkIGludCB1c2VyX2ZyZXE7CkBAIC02Miw0ICs2Myw3IEBACiAJdW5zaWduZWQgICAgIGluaXRpYWxfZGVsYXk7CiB9OwogCitzdHJ1Y3Qgb3B0aW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCAqcmVjb3JkX3VzYWdlOworZXh0ZXJuIHN0cnVjdCBvcHRpb24gKnJlY29yZF9vcHRpb25zOwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9leHBvcnQtdG8tcG9zdGdyZXNxbC1yZWNvcmQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9leHBvcnQtdG8tcG9zdGdyZXNxbC1yZWNvcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxZDY2ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2V4cG9ydC10by1wb3N0Z3Jlc3FsLXJlY29yZApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9iYXNoCisKKyMKKyMgZXhwb3J0IHBlcmYgZGF0YSB0byBhIHBvc3RncmVzcWwgZGF0YWJhc2UuIENhbiBjb3ZlcgorIyBwZXJmIGlwIHNhbXBsZXMgKGV4Y2x1ZGluZyB0aGUgdHJhY2Vwb2ludHMpLiBObyBzcGVjaWFsCisjIHJlY29yZCByZXF1aXJlbWVudHMsIGp1c3QgcmVjb3JkIHdoYXQgeW91IHdhbnQgdG8gZXhwb3J0LgorIworcGVyZiByZWNvcmQgJEAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2V4cG9ydC10by1wb3N0Z3Jlc3FsLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2V4cG9ydC10by1wb3N0Z3Jlc3FsLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDMzNWI2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZXhwb3J0LXRvLXBvc3RncmVzcWwtcmVwb3J0CkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9iYXNoCisjIGRlc2NyaXB0aW9uOiBleHBvcnQgcGVyZiBkYXRhIHRvIGEgcG9zdGdyZXNxbCBkYXRhYmFzZQorIyBhcmdzOiBbZGF0YWJhc2UgbmFtZV0gW2NvbHVtbnNdIFtjYWxsc10KK25fYXJncz0wCitmb3IgaSBpbiAiJEAiCitkbworICAgIGlmIGV4cHIgbWF0Y2ggIiRpIiAiLSIgPiAvZGV2L251bGwgOyB0aGVuCisJYnJlYWsKKyAgICBmaQorICAgIG5fYXJncz0kKCggJG5fYXJncyArIDEgKSkKK2RvbmUKK2lmIFsgIiRuX2FyZ3MiIC1ndCAzIF0gOyB0aGVuCisgICAgZWNobyAidXNhZ2U6IGV4cG9ydC10by1wb3N0Z3Jlc3FsLXJlcG9ydCBbZGF0YWJhc2UgbmFtZV0gW2NvbHVtbnNdIFtjYWxsc10iCisgICAgZXhpdAorZmkKK2lmIFsgIiRuX2FyZ3MiIC1ndCAyIF0gOyB0aGVuCisgICAgZGJuYW1lPSQxCisgICAgY29sdW1ucz0kMgorICAgIGNhbGxzPSQzCisgICAgc2hpZnQgMworZWxpZiBbICIkbl9hcmdzIiAtZ3QgMSBdIDsgdGhlbgorICAgIGRibmFtZT0kMQorICAgIGNvbHVtbnM9JDIKKyAgICBzaGlmdCAyCitlbGlmIFsgIiRuX2FyZ3MiIC1ndCAwIF0gOyB0aGVuCisgICAgZGJuYW1lPSQxCisgICAgc2hpZnQKK2ZpCitwZXJmIHNjcmlwdCAkQCAtcyAiJFBFUkZfRVhFQ19QQVRIIi9zY3JpcHRzL3B5dGhvbi9leHBvcnQtdG8tcG9zdGdyZXNxbC5weSAkZGJuYW1lICRjb2x1bW5zICRjYWxscwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9leHBvcnQtdG8tcG9zdGdyZXNxbC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZXhwb3J0LXRvLXBvc3RncmVzcWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkYWZkOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZXhwb3J0LXRvLXBvc3RncmVzcWwucHkKQEAgLTAsMCArMSw0NDQgQEAKKyMgZXhwb3J0LXRvLXBvc3RncmVzcWwucHk6IGV4cG9ydCBwZXJmIGRhdGEgdG8gYSBwb3N0Z3Jlc3FsIGRhdGFiYXNlCisjIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyMgbW9yZSBkZXRhaWxzLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBkYXRldGltZQorCitmcm9tIFB5U2lkZS5RdFNxbCBpbXBvcnQgKgorCisjIE5lZWQgdG8gYWNjZXNzIFBvc3RncmVTUUwgQyBsaWJyYXJ5IGRpcmVjdGx5IHRvIHVzZSBDT1BZIEZST00gU1RESU4KK2Zyb20gY3R5cGVzIGltcG9ydCAqCitsaWJwcSA9IENETEwoImxpYnBxLnNvLjUiKQorUFFjb25uZWN0ZGIgPSBsaWJwcS5QUWNvbm5lY3RkYgorUFFjb25uZWN0ZGIucmVzdHlwZSA9IGNfdm9pZF9wCitQUWZpbmlzaCA9IGxpYnBxLlBRZmluaXNoCitQUXN0YXR1cyA9IGxpYnBxLlBRc3RhdHVzCitQUWV4ZWMgPSBsaWJwcS5QUWV4ZWMKK1BRZXhlYy5yZXN0eXBlID0gY192b2lkX3AKK1BRcmVzdWx0U3RhdHVzID0gbGlicHEuUFFyZXN1bHRTdGF0dXMKK1BRcHV0Q29weURhdGEgPSBsaWJwcS5QUXB1dENvcHlEYXRhCitQUXB1dENvcHlEYXRhLmFyZ3R5cGVzID0gWyBjX3ZvaWRfcCwgY192b2lkX3AsIGNfaW50IF0KK1BRcHV0Q29weUVuZCA9IGxpYnBxLlBRcHV0Q29weUVuZAorUFFwdXRDb3B5RW5kLmFyZ3R5cGVzID0gWyBjX3ZvaWRfcCwgY192b2lkX3AgXQorCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKKyMgVGhlc2UgcGVyZiBpbXBvcnRzIGFyZSBub3QgdXNlZCBhdCBwcmVzZW50CisjZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKKyNmcm9tIENvcmUgaW1wb3J0ICoKKworcGVyZl9kYl9leHBvcnRfbW9kZSA9IFRydWUKK3BlcmZfZGJfZXhwb3J0X2NhbGxzID0gRmFsc2UKKworZGVmIHVzYWdlKCk6CisJcHJpbnQgPj4gc3lzLnN0ZGVyciwgIlVzYWdlIGlzOiBleHBvcnQtdG8tcG9zdGdyZXNxbC5weSA8ZGF0YWJhc2UgbmFtZT4gWzxjb2x1bW5zPl0gWzxjYWxscz5dIgorCXByaW50ID4+IHN5cy5zdGRlcnIsICJ3aGVyZToJY29sdW1ucwkJJ2FsbCcgb3IgJ2JyYW5jaGVzJyIKKwlwcmludCA+PiBzeXMuc3RkZXJyLCAiCQljYWxscwkJJ2NhbGxzJyA9PiBjcmVhdGUgY2FsbHMgdGFibGUiCisJcmFpc2UgRXhjZXB0aW9uKCJUb28gZmV3IGFyZ3VtZW50cyIpCisKK2lmIChsZW4oc3lzLmFyZ3YpIDwgMik6CisJdXNhZ2UoKQorCitkYm5hbWUgPSBzeXMuYXJndlsxXQorCitpZiAobGVuKHN5cy5hcmd2KSA+PSAzKToKKwljb2x1bW5zID0gc3lzLmFyZ3ZbMl0KK2Vsc2U6CisJY29sdW1ucyA9ICJhbGwiCisKK2lmIGNvbHVtbnMgbm90IGluICgiYWxsIiwgImJyYW5jaGVzIik6CisJdXNhZ2UoKQorCiticmFuY2hlcyA9IChjb2x1bW5zID09ICJicmFuY2hlcyIpCisKK2lmIChsZW4oc3lzLmFyZ3YpID49IDQpOgorCWlmIChzeXMuYXJndlszXSA9PSAiY2FsbHMiKToKKwkJcGVyZl9kYl9leHBvcnRfY2FsbHMgPSBUcnVlCisJZWxzZToKKwkJdXNhZ2UoKQorCitvdXRwdXRfZGlyX25hbWUgPSBvcy5nZXRjd2QoKSArICIvIiArIGRibmFtZSArICItcGVyZi1kYXRhIgorb3MubWtkaXIob3V0cHV0X2Rpcl9uYW1lKQorCitkZWYgZG9fcXVlcnkocSwgcyk6CisJaWYgKHEuZXhlY18ocykpOgorCQlyZXR1cm4KKwlyYWlzZSBFeGNlcHRpb24oIlF1ZXJ5IGZhaWxlZDogIiArIHEubGFzdEVycm9yKCkudGV4dCgpKQorCitwcmludCBkYXRldGltZS5kYXRldGltZS50b2RheSgpLCAiQ3JlYXRpbmcgZGF0YWJhc2UuLi4iCisKK2RiID0gUVNxbERhdGFiYXNlLmFkZERhdGFiYXNlKCdRUFNRTCcpCitxdWVyeSA9IFFTcWxRdWVyeShkYikKK2RiLnNldERhdGFiYXNlTmFtZSgncG9zdGdyZXMnKQorZGIub3BlbigpCit0cnk6CisJZG9fcXVlcnkocXVlcnksICdDUkVBVEUgREFUQUJBU0UgJyArIGRibmFtZSkKK2V4Y2VwdDoKKwlvcy5ybWRpcihvdXRwdXRfZGlyX25hbWUpCisJcmFpc2UKK3F1ZXJ5LmZpbmlzaCgpCitxdWVyeS5jbGVhcigpCitkYi5jbG9zZSgpCisKK2RiLnNldERhdGFiYXNlTmFtZShkYm5hbWUpCitkYi5vcGVuKCkKKworcXVlcnkgPSBRU3FsUXVlcnkoZGIpCitkb19xdWVyeShxdWVyeSwgJ1NFVCBjbGllbnRfbWluX21lc3NhZ2VzIFRPIFdBUk5JTkcnKQorCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBzZWxlY3RlZF9ldmVudHMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ25hbWUJCXZhcmNoYXIoODApKScpCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBtYWNoaW5lcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQkncGlkCQlpbnRlZ2VyLCcKKwkJJ3Jvb3RfZGlyIAl2YXJjaGFyKDQwOTYpKScpCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSB0aHJlYWRzICgnCisJCSdpZAkJYmlnaW50CQlOT1QgTlVMTCwnCisJCSdtYWNoaW5lX2lkCWJpZ2ludCwnCisJCSdwcm9jZXNzX2lkCWJpZ2ludCwnCisJCSdwaWQJCWludGVnZXIsJworCQkndGlkCQlpbnRlZ2VyKScpCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBjb21tcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQknY29tbQkJdmFyY2hhcigxNikpJykKK2RvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIGNvbW1fdGhyZWFkcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQknY29tbV9pZAliaWdpbnQsJworCQkndGhyZWFkX2lkCWJpZ2ludCknKQorZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVEFCTEUgZHNvcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQknbWFjaGluZV9pZAliaWdpbnQsJworCQknc2hvcnRfbmFtZQl2YXJjaGFyKDI1NiksJworCQknbG9uZ19uYW1lCXZhcmNoYXIoNDA5NiksJworCQknYnVpbGRfaWQJdmFyY2hhcig2NCkpJykKK2RvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIHN5bWJvbHMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ2Rzb19pZAkJYmlnaW50LCcKKwkJJ3N5bV9zdGFydAliaWdpbnQsJworCQknc3ltX2VuZAliaWdpbnQsJworCQknYmluZGluZwlpbnRlZ2VyLCcKKwkJJ25hbWUJCXZhcmNoYXIoMjA0OCkpJykKK2RvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIGJyYW5jaF90eXBlcyAoJworCQknaWQJCWludGVnZXIJCU5PVCBOVUxMLCcKKwkJJ25hbWUJCXZhcmNoYXIoODApKScpCisKK2lmIGJyYW5jaGVzOgorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIHNhbXBsZXMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ2V2c2VsX2lkCWJpZ2ludCwnCisJCSdtYWNoaW5lX2lkCWJpZ2ludCwnCisJCSd0aHJlYWRfaWQJYmlnaW50LCcKKwkJJ2NvbW1faWQJYmlnaW50LCcKKwkJJ2Rzb19pZAkJYmlnaW50LCcKKwkJJ3N5bWJvbF9pZAliaWdpbnQsJworCQknc3ltX29mZnNldAliaWdpbnQsJworCQknaXAJCWJpZ2ludCwnCisJCSd0aW1lCQliaWdpbnQsJworCQknY3B1CQlpbnRlZ2VyLCcKKwkJJ3RvX2Rzb19pZAliaWdpbnQsJworCQkndG9fc3ltYm9sX2lkCWJpZ2ludCwnCisJCSd0b19zeW1fb2Zmc2V0CWJpZ2ludCwnCisJCSd0b19pcAkJYmlnaW50LCcKKwkJJ2JyYW5jaF90eXBlCWludGVnZXIsJworCQknaW5fdHgJCWJvb2xlYW4pJykKK2Vsc2U6CisJZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVEFCTEUgc2FtcGxlcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQknZXZzZWxfaWQJYmlnaW50LCcKKwkJJ21hY2hpbmVfaWQJYmlnaW50LCcKKwkJJ3RocmVhZF9pZAliaWdpbnQsJworCQknY29tbV9pZAliaWdpbnQsJworCQknZHNvX2lkCQliaWdpbnQsJworCQknc3ltYm9sX2lkCWJpZ2ludCwnCisJCSdzeW1fb2Zmc2V0CWJpZ2ludCwnCisJCSdpcAkJYmlnaW50LCcKKwkJJ3RpbWUJCWJpZ2ludCwnCisJCSdjcHUJCWludGVnZXIsJworCQkndG9fZHNvX2lkCWJpZ2ludCwnCisJCSd0b19zeW1ib2xfaWQJYmlnaW50LCcKKwkJJ3RvX3N5bV9vZmZzZXQJYmlnaW50LCcKKwkJJ3RvX2lwCQliaWdpbnQsJworCQkncGVyaW9kCQliaWdpbnQsJworCQknd2VpZ2h0CQliaWdpbnQsJworCQkndHJhbnNhY3Rpb24JYmlnaW50LCcKKwkJJ2RhdGFfc3JjCWJpZ2ludCwnCisJCSdicmFuY2hfdHlwZQlpbnRlZ2VyLCcKKwkJJ2luX3R4CQlib29sZWFuKScpCisKK2lmIHBlcmZfZGJfZXhwb3J0X2NhbGxzOgorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIGNhbGxfcGF0aHMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ3BhcmVudF9pZAliaWdpbnQsJworCQknc3ltYm9sX2lkCWJpZ2ludCwnCisJCSdpcAkJYmlnaW50KScpCisJZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVEFCTEUgY2FsbHMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ3RocmVhZF9pZAliaWdpbnQsJworCQknY29tbV9pZAliaWdpbnQsJworCQknY2FsbF9wYXRoX2lkCWJpZ2ludCwnCisJCSdjYWxsX3RpbWUJYmlnaW50LCcKKwkJJ3JldHVybl90aW1lCWJpZ2ludCwnCisJCSdicmFuY2hfY291bnQJYmlnaW50LCcKKwkJJ2NhbGxfaWQJYmlnaW50LCcKKwkJJ3JldHVybl9pZAliaWdpbnQsJworCQkncGFyZW50X2NhbGxfcGF0aF9pZAliaWdpbnQsJworCQknZmxhZ3MJCWludGVnZXIpJykKKworZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVklFVyBzYW1wbGVzX3ZpZXcgQVMgJworCSdTRUxFQ1QgJworCQknaWQsJworCQkndGltZSwnCisJCSdjcHUsJworCQknKFNFTEVDVCBwaWQgRlJPTSB0aHJlYWRzIFdIRVJFIGlkID0gdGhyZWFkX2lkKSBBUyBwaWQsJworCQknKFNFTEVDVCB0aWQgRlJPTSB0aHJlYWRzIFdIRVJFIGlkID0gdGhyZWFkX2lkKSBBUyB0aWQsJworCQknKFNFTEVDVCBjb21tIEZST00gY29tbXMgV0hFUkUgaWQgPSBjb21tX2lkKSBBUyBjb21tYW5kLCcKKwkJJyhTRUxFQ1QgbmFtZSBGUk9NIHNlbGVjdGVkX2V2ZW50cyBXSEVSRSBpZCA9IGV2c2VsX2lkKSBBUyBldmVudCwnCisJCSd0b19oZXgoaXApIEFTIGlwX2hleCwnCisJCScoU0VMRUNUIG5hbWUgRlJPTSBzeW1ib2xzIFdIRVJFIGlkID0gc3ltYm9sX2lkKSBBUyBzeW1ib2wsJworCQknc3ltX29mZnNldCwnCisJCScoU0VMRUNUIHNob3J0X25hbWUgRlJPTSBkc29zIFdIRVJFIGlkID0gZHNvX2lkKSBBUyBkc29fc2hvcnRfbmFtZSwnCisJCSd0b19oZXgodG9faXApIEFTIHRvX2lwX2hleCwnCisJCScoU0VMRUNUIG5hbWUgRlJPTSBzeW1ib2xzIFdIRVJFIGlkID0gdG9fc3ltYm9sX2lkKSBBUyB0b19zeW1ib2wsJworCQkndG9fc3ltX29mZnNldCwnCisJCScoU0VMRUNUIHNob3J0X25hbWUgRlJPTSBkc29zIFdIRVJFIGlkID0gdG9fZHNvX2lkKSBBUyB0b19kc29fc2hvcnRfbmFtZSwnCisJCScoU0VMRUNUIG5hbWUgRlJPTSBicmFuY2hfdHlwZXMgV0hFUkUgaWQgPSBicmFuY2hfdHlwZSkgQVMgYnJhbmNoX3R5cGVfbmFtZSwnCisJCSdpbl90eCcKKwknIEZST00gc2FtcGxlcycpCisKKworZmlsZV9oZWFkZXIgPSBzdHJ1Y3QucGFjaygiITExc2lpIiwgIlBHQ09QWVxuXDM3N1xyXG5cMCIsIDAsIDApCitmaWxlX3RyYWlsZXIgPSAiXDM3N1wzNzciCisKK2RlZiBvcGVuX291dHB1dF9maWxlKGZpbGVfbmFtZSk6CisJcGF0aF9uYW1lID0gb3V0cHV0X2Rpcl9uYW1lICsgIi8iICsgZmlsZV9uYW1lCisJZmlsZSA9IG9wZW4ocGF0aF9uYW1lLCAidysiKQorCWZpbGUud3JpdGUoZmlsZV9oZWFkZXIpCisJcmV0dXJuIGZpbGUKKworZGVmIGNsb3NlX291dHB1dF9maWxlKGZpbGUpOgorCWZpbGUud3JpdGUoZmlsZV90cmFpbGVyKQorCWZpbGUuY2xvc2UoKQorCitkZWYgY29weV9vdXRwdXRfZmlsZV9kaXJlY3QoZmlsZSwgdGFibGVfbmFtZSk6CisJY2xvc2Vfb3V0cHV0X2ZpbGUoZmlsZSkKKwlzcWwgPSAiQ09QWSAiICsgdGFibGVfbmFtZSArICIgRlJPTSAnIiArIGZpbGUubmFtZSArICInIChGT1JNQVQgJ2JpbmFyeScpIgorCWRvX3F1ZXJ5KHF1ZXJ5LCBzcWwpCisKKyMgVXNlIENPUFkgRlJPTSBTVERJTiBiZWNhdXNlIHNlY3VyaXR5IG1heSBwcmV2ZW50IHBvc3RncmVzIGZyb20gYWNjZXNzaW5nIHRoZSBmaWxlcyBkaXJlY3RseQorZGVmIGNvcHlfb3V0cHV0X2ZpbGUoZmlsZSwgdGFibGVfbmFtZSk6CisJY29ubiA9IFBRY29ubmVjdGRiKCJkYm5hbWUgPSAiICsgZGJuYW1lKQorCWlmIChQUXN0YXR1cyhjb25uKSk6CisJCXJhaXNlIEV4Y2VwdGlvbigiQ09QWSBGUk9NIFNURElOIFBRY29ubmVjdGRiIGZhaWxlZCIpCisJZmlsZS53cml0ZShmaWxlX3RyYWlsZXIpCisJZmlsZS5zZWVrKDApCisJc3FsID0gIkNPUFkgIiArIHRhYmxlX25hbWUgKyAiIEZST00gU1RESU4gKEZPUk1BVCAnYmluYXJ5JykiCisJcmVzID0gUFFleGVjKGNvbm4sIHNxbCkKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSA0KToKKwkJcmFpc2UgRXhjZXB0aW9uKCJDT1BZIEZST00gU1RESU4gUFFleGVjIGZhaWxlZCIpCisJZGF0YSA9IGZpbGUucmVhZCg2NTUzNikKKwl3aGlsZSAobGVuKGRhdGEpKToKKwkJcmV0ID0gUFFwdXRDb3B5RGF0YShjb25uLCBkYXRhLCBsZW4oZGF0YSkpCisJCWlmIChyZXQgIT0gMSk6CisJCQlyYWlzZSBFeGNlcHRpb24oIkNPUFkgRlJPTSBTVERJTiBQUXB1dENvcHlEYXRhIGZhaWxlZCwgZXJyb3IgIiArIHN0cihyZXQpKQorCQlkYXRhID0gZmlsZS5yZWFkKDY1NTM2KQorCXJldCA9IFBRcHV0Q29weUVuZChjb25uLCBOb25lKQorCWlmIChyZXQgIT0gMSk6CisJCXJhaXNlIEV4Y2VwdGlvbigiQ09QWSBGUk9NIFNURElOIFBRcHV0Q29weUVuZCBmYWlsZWQsIGVycm9yICIgKyBzdHIocmV0KSkKKwlQUWZpbmlzaChjb25uKQorCitkZWYgcmVtb3ZlX291dHB1dF9maWxlKGZpbGUpOgorCW5hbWUgPSBmaWxlLm5hbWUKKwlmaWxlLmNsb3NlKCkKKwlvcy51bmxpbmsobmFtZSkKKworZXZzZWxfZmlsZQkJPSBvcGVuX291dHB1dF9maWxlKCJldnNlbF90YWJsZS5iaW4iKQorbWFjaGluZV9maWxlCQk9IG9wZW5fb3V0cHV0X2ZpbGUoIm1hY2hpbmVfdGFibGUuYmluIikKK3RocmVhZF9maWxlCQk9IG9wZW5fb3V0cHV0X2ZpbGUoInRocmVhZF90YWJsZS5iaW4iKQorY29tbV9maWxlCQk9IG9wZW5fb3V0cHV0X2ZpbGUoImNvbW1fdGFibGUuYmluIikKK2NvbW1fdGhyZWFkX2ZpbGUJPSBvcGVuX291dHB1dF9maWxlKCJjb21tX3RocmVhZF90YWJsZS5iaW4iKQorZHNvX2ZpbGUJCT0gb3Blbl9vdXRwdXRfZmlsZSgiZHNvX3RhYmxlLmJpbiIpCitzeW1ib2xfZmlsZQkJPSBvcGVuX291dHB1dF9maWxlKCJzeW1ib2xfdGFibGUuYmluIikKK2JyYW5jaF90eXBlX2ZpbGUJPSBvcGVuX291dHB1dF9maWxlKCJicmFuY2hfdHlwZV90YWJsZS5iaW4iKQorc2FtcGxlX2ZpbGUJCT0gb3Blbl9vdXRwdXRfZmlsZSgic2FtcGxlX3RhYmxlLmJpbiIpCitpZiBwZXJmX2RiX2V4cG9ydF9jYWxsczoKKwljYWxsX3BhdGhfZmlsZQkJPSBvcGVuX291dHB1dF9maWxlKCJjYWxsX3BhdGhfdGFibGUuYmluIikKKwljYWxsX2ZpbGUJCT0gb3Blbl9vdXRwdXRfZmlsZSgiY2FsbF90YWJsZS5iaW4iKQorCitkZWYgdHJhY2VfYmVnaW4oKToKKwlwcmludCBkYXRldGltZS5kYXRldGltZS50b2RheSgpLCAiV3JpdGluZyB0byBpbnRlcm1lZGlhdGUgZmlsZXMuLi4iCisJIyBpZCA9PSAwIG1lYW5zIHVua25vd24uICBJdCBpcyBlYXNpZXIgdG8gY3JlYXRlIHJlY29yZHMgZm9yIHRoZW0gdGhhbiByZXBsYWNlIHRoZSB6ZXJvZXMgd2l0aCBOVUxMcworCWV2c2VsX3RhYmxlKDAsICJ1bmtub3duIikKKwltYWNoaW5lX3RhYmxlKDAsIDAsICJ1bmtub3duIikKKwl0aHJlYWRfdGFibGUoMCwgMCwgMCwgLTEsIC0xKQorCWNvbW1fdGFibGUoMCwgInVua25vd24iKQorCWRzb190YWJsZSgwLCAwLCAidW5rbm93biIsICJ1bmtub3duIiwgIiIpCisJc3ltYm9sX3RhYmxlKDAsIDAsIDAsIDAsIDAsICJ1bmtub3duIikKKwlzYW1wbGVfdGFibGUoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkKKwlpZiBwZXJmX2RiX2V4cG9ydF9jYWxsczoKKwkJY2FsbF9wYXRoX3RhYmxlKDAsIDAsIDAsIDApCisKK3VuaGFuZGxlZF9jb3VudCA9IDAKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50IGRhdGV0aW1lLmRhdGV0aW1lLnRvZGF5KCksICJDb3B5aW5nIHRvIGRhdGFiYXNlLi4uIgorCWNvcHlfb3V0cHV0X2ZpbGUoZXZzZWxfZmlsZSwJCSJzZWxlY3RlZF9ldmVudHMiKQorCWNvcHlfb3V0cHV0X2ZpbGUobWFjaGluZV9maWxlLAkJIm1hY2hpbmVzIikKKwljb3B5X291dHB1dF9maWxlKHRocmVhZF9maWxlLAkJInRocmVhZHMiKQorCWNvcHlfb3V0cHV0X2ZpbGUoY29tbV9maWxlLAkJImNvbW1zIikKKwljb3B5X291dHB1dF9maWxlKGNvbW1fdGhyZWFkX2ZpbGUsCSJjb21tX3RocmVhZHMiKQorCWNvcHlfb3V0cHV0X2ZpbGUoZHNvX2ZpbGUsCQkiZHNvcyIpCisJY29weV9vdXRwdXRfZmlsZShzeW1ib2xfZmlsZSwJCSJzeW1ib2xzIikKKwljb3B5X291dHB1dF9maWxlKGJyYW5jaF90eXBlX2ZpbGUsCSJicmFuY2hfdHlwZXMiKQorCWNvcHlfb3V0cHV0X2ZpbGUoc2FtcGxlX2ZpbGUsCQkic2FtcGxlcyIpCisJaWYgcGVyZl9kYl9leHBvcnRfY2FsbHM6CisJCWNvcHlfb3V0cHV0X2ZpbGUoY2FsbF9wYXRoX2ZpbGUsCSJjYWxsX3BhdGhzIikKKwkJY29weV9vdXRwdXRfZmlsZShjYWxsX2ZpbGUsCQkiY2FsbHMiKQorCisJcHJpbnQgZGF0ZXRpbWUuZGF0ZXRpbWUudG9kYXkoKSwgIlJlbW92aW5nIGludGVybWVkaWF0ZSBmaWxlcy4uLiIKKwlyZW1vdmVfb3V0cHV0X2ZpbGUoZXZzZWxfZmlsZSkKKwlyZW1vdmVfb3V0cHV0X2ZpbGUobWFjaGluZV9maWxlKQorCXJlbW92ZV9vdXRwdXRfZmlsZSh0aHJlYWRfZmlsZSkKKwlyZW1vdmVfb3V0cHV0X2ZpbGUoY29tbV9maWxlKQorCXJlbW92ZV9vdXRwdXRfZmlsZShjb21tX3RocmVhZF9maWxlKQorCXJlbW92ZV9vdXRwdXRfZmlsZShkc29fZmlsZSkKKwlyZW1vdmVfb3V0cHV0X2ZpbGUoc3ltYm9sX2ZpbGUpCisJcmVtb3ZlX291dHB1dF9maWxlKGJyYW5jaF90eXBlX2ZpbGUpCisJcmVtb3ZlX291dHB1dF9maWxlKHNhbXBsZV9maWxlKQorCWlmIHBlcmZfZGJfZXhwb3J0X2NhbGxzOgorCQlyZW1vdmVfb3V0cHV0X2ZpbGUoY2FsbF9wYXRoX2ZpbGUpCisJCXJlbW92ZV9vdXRwdXRfZmlsZShjYWxsX2ZpbGUpCisJb3Mucm1kaXIob3V0cHV0X2Rpcl9uYW1lKQorCXByaW50IGRhdGV0aW1lLmRhdGV0aW1lLnRvZGF5KCksICJBZGRpbmcgcHJpbWFyeSBrZXlzIgorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgc2VsZWN0ZWRfZXZlbnRzIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIG1hY2hpbmVzICAgICAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSB0aHJlYWRzICAgICAgICAgQUREIFBSSU1BUlkgS0VZIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgY29tbXMgICAgICAgICAgIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNvbW1fdGhyZWFkcyAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBkc29zICAgICAgICAgICAgQUREIFBSSU1BUlkgS0VZIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgc3ltYm9scyAgICAgICAgIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGJyYW5jaF90eXBlcyAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBzYW1wbGVzICAgICAgICAgQUREIFBSSU1BUlkgS0VZIChpZCknKQorCWlmIHBlcmZfZGJfZXhwb3J0X2NhbGxzOgorCQlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNhbGxfcGF0aHMgICAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgY2FsbHMgICAgICAgICAgIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKworCXByaW50IGRhdGV0aW1lLmRhdGV0aW1lLnRvZGF5KCksICJBZGRpbmcgZm9yZWlnbiBrZXlzIgorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgdGhyZWFkcyAnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBtYWNoaW5lZmsgIEZPUkVJR04gS0VZIChtYWNoaW5lX2lkKSAgIFJFRkVSRU5DRVMgbWFjaGluZXMgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHByb2Nlc3NmayAgRk9SRUlHTiBLRVkgKHByb2Nlc3NfaWQpICAgUkVGRVJFTkNFUyB0aHJlYWRzICAgIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgY29tbV90aHJlYWRzICcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGNvbW1mayAgICAgRk9SRUlHTiBLRVkgKGNvbW1faWQpICAgICAgUkVGRVJFTkNFUyBjb21tcyAgICAgIChpZCksJworCQkJCQknQUREIENPTlNUUkFJTlQgdGhyZWFkZmsgICBGT1JFSUdOIEtFWSAodGhyZWFkX2lkKSAgICBSRUZFUkVOQ0VTIHRocmVhZHMgICAgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBkc29zICcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIG1hY2hpbmVmayAgRk9SRUlHTiBLRVkgKG1hY2hpbmVfaWQpICAgUkVGRVJFTkNFUyBtYWNoaW5lcyAgIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgc3ltYm9scyAnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBkc29mayAgICAgIEZPUkVJR04gS0VZIChkc29faWQpICAgICAgIFJFRkVSRU5DRVMgZHNvcyAgICAgICAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIHNhbXBsZXMgJworCQkJCQknQUREIENPTlNUUkFJTlQgZXZzZWxmayAgICBGT1JFSUdOIEtFWSAoZXZzZWxfaWQpICAgICBSRUZFUkVOQ0VTIHNlbGVjdGVkX2V2ZW50cyAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIG1hY2hpbmVmayAgRk9SRUlHTiBLRVkgKG1hY2hpbmVfaWQpICAgUkVGRVJFTkNFUyBtYWNoaW5lcyAgIChpZCksJworCQkJCQknQUREIENPTlNUUkFJTlQgdGhyZWFkZmsgICBGT1JFSUdOIEtFWSAodGhyZWFkX2lkKSAgICBSRUZFUkVOQ0VTIHRocmVhZHMgICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBjb21tZmsgICAgIEZPUkVJR04gS0VZIChjb21tX2lkKSAgICAgIFJFRkVSRU5DRVMgY29tbXMgICAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGRzb2ZrICAgICAgRk9SRUlHTiBLRVkgKGRzb19pZCkgICAgICAgUkVGRVJFTkNFUyBkc29zICAgICAgIChpZCksJworCQkJCQknQUREIENPTlNUUkFJTlQgc3ltYm9sZmsgICBGT1JFSUdOIEtFWSAoc3ltYm9sX2lkKSAgICBSRUZFUkVOQ0VTIHN5bWJvbHMgICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCB0b2Rzb2ZrICAgIEZPUkVJR04gS0VZICh0b19kc29faWQpICAgIFJFRkVSRU5DRVMgZHNvcyAgICAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHRvc3ltYm9sZmsgRk9SRUlHTiBLRVkgKHRvX3N5bWJvbF9pZCkgUkVGRVJFTkNFUyBzeW1ib2xzICAgIChpZCknKQorCWlmIHBlcmZfZGJfZXhwb3J0X2NhbGxzOgorCQlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNhbGxfcGF0aHMgJworCQkJCQknQUREIENPTlNUUkFJTlQgcGFyZW50ZmsgICAgRk9SRUlHTiBLRVkgKHBhcmVudF9pZCkgICAgUkVGRVJFTkNFUyBjYWxsX3BhdGhzIChpZCksJworCQkJCQknQUREIENPTlNUUkFJTlQgc3ltYm9sZmsgICAgRk9SRUlHTiBLRVkgKHN5bWJvbF9pZCkgICAgUkVGRVJFTkNFUyBzeW1ib2xzICAgIChpZCknKQorCQlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNhbGxzICcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHRocmVhZGZrICAgIEZPUkVJR04gS0VZICh0aHJlYWRfaWQpICAgIFJFRkVSRU5DRVMgdGhyZWFkcyAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGNvbW1mayAgICAgIEZPUkVJR04gS0VZIChjb21tX2lkKSAgICAgIFJFRkVSRU5DRVMgY29tbXMgICAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGNhbGxfcGF0aGZrIEZPUkVJR04gS0VZIChjYWxsX3BhdGhfaWQpIFJFRkVSRU5DRVMgY2FsbF9wYXRocyAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGNhbGxmayAgICAgIEZPUkVJR04gS0VZIChjYWxsX2lkKSAgICAgIFJFRkVSRU5DRVMgc2FtcGxlcyAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHJldHVybmZrICAgIEZPUkVJR04gS0VZIChyZXR1cm5faWQpICAgIFJFRkVSRU5DRVMgc2FtcGxlcyAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHBhcmVudF9jYWxsX3BhdGhmayBGT1JFSUdOIEtFWSAocGFyZW50X2NhbGxfcGF0aF9pZCkgUkVGRVJFTkNFUyBjYWxsX3BhdGhzIChpZCknKQorCQlkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBJTkRFWCBwY3BpZF9pZHggT04gY2FsbHMgKHBhcmVudF9jYWxsX3BhdGhfaWQpJykKKworCWlmICh1bmhhbmRsZWRfY291bnQpOgorCQlwcmludCBkYXRldGltZS5kYXRldGltZS50b2RheSgpLCAiV2FybmluZzogIiwgdW5oYW5kbGVkX2NvdW50LCAiIHVuaGFuZGxlZCBldmVudHMiCisJcHJpbnQgZGF0ZXRpbWUuZGF0ZXRpbWUudG9kYXkoKSwgIkRvbmUiCisKK2RlZiB0cmFjZV91bmhhbmRsZWQoZXZlbnRfbmFtZSwgY29udGV4dCwgZXZlbnRfZmllbGRzX2RpY3QpOgorCWdsb2JhbCB1bmhhbmRsZWRfY291bnQKKwl1bmhhbmRsZWRfY291bnQgKz0gMQorCitkZWYgc2NoZWRfX3NjaGVkX3N3aXRjaCgqeCk6CisJcGFzcworCitkZWYgZXZzZWxfdGFibGUoZXZzZWxfaWQsIGV2c2VsX25hbWUsICp4KToKKwluID0gbGVuKGV2c2VsX25hbWUpCisJZm10ID0gIiFoaXFpIiArIHN0cihuKSArICJzIgorCXZhbHVlID0gc3RydWN0LnBhY2soZm10LCAyLCA4LCBldnNlbF9pZCwgbiwgZXZzZWxfbmFtZSkKKwlldnNlbF9maWxlLndyaXRlKHZhbHVlKQorCitkZWYgbWFjaGluZV90YWJsZShtYWNoaW5lX2lkLCBwaWQsIHJvb3RfZGlyLCAqeCk6CisJbiA9IGxlbihyb290X2RpcikKKwlmbXQgPSAiIWhpcWlpaSIgKyBzdHIobikgKyAicyIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgMywgOCwgbWFjaGluZV9pZCwgNCwgcGlkLCBuLCByb290X2RpcikKKwltYWNoaW5lX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiB0aHJlYWRfdGFibGUodGhyZWFkX2lkLCBtYWNoaW5lX2lkLCBwcm9jZXNzX2lkLCBwaWQsIHRpZCwgKngpOgorCXZhbHVlID0gc3RydWN0LnBhY2soIiFoaXFpcWlxaWlpaSIsIDUsIDgsIHRocmVhZF9pZCwgOCwgbWFjaGluZV9pZCwgOCwgcHJvY2Vzc19pZCwgNCwgcGlkLCA0LCB0aWQpCisJdGhyZWFkX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiBjb21tX3RhYmxlKGNvbW1faWQsIGNvbW1fc3RyLCAqeCk6CisJbiA9IGxlbihjb21tX3N0cikKKwlmbXQgPSAiIWhpcWkiICsgc3RyKG4pICsgInMiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDIsIDgsIGNvbW1faWQsIG4sIGNvbW1fc3RyKQorCWNvbW1fZmlsZS53cml0ZSh2YWx1ZSkKKworZGVmIGNvbW1fdGhyZWFkX3RhYmxlKGNvbW1fdGhyZWFkX2lkLCBjb21tX2lkLCB0aHJlYWRfaWQsICp4KToKKwlmbXQgPSAiIWhpcWlxaXEiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDMsIDgsIGNvbW1fdGhyZWFkX2lkLCA4LCBjb21tX2lkLCA4LCB0aHJlYWRfaWQpCisJY29tbV90aHJlYWRfZmlsZS53cml0ZSh2YWx1ZSkKKworZGVmIGRzb190YWJsZShkc29faWQsIG1hY2hpbmVfaWQsIHNob3J0X25hbWUsIGxvbmdfbmFtZSwgYnVpbGRfaWQsICp4KToKKwluMSA9IGxlbihzaG9ydF9uYW1lKQorCW4yID0gbGVuKGxvbmdfbmFtZSkKKwluMyA9IGxlbihidWlsZF9pZCkKKwlmbXQgPSAiIWhpcWlxaSIgKyBzdHIobjEpICsgInNpIiAgKyBzdHIobjIpICsgInNpIiArIHN0cihuMykgKyAicyIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgNSwgOCwgZHNvX2lkLCA4LCBtYWNoaW5lX2lkLCBuMSwgc2hvcnRfbmFtZSwgbjIsIGxvbmdfbmFtZSwgbjMsIGJ1aWxkX2lkKQorCWRzb19maWxlLndyaXRlKHZhbHVlKQorCitkZWYgc3ltYm9sX3RhYmxlKHN5bWJvbF9pZCwgZHNvX2lkLCBzeW1fc3RhcnQsIHN5bV9lbmQsIGJpbmRpbmcsIHN5bWJvbF9uYW1lLCAqeCk6CisJbiA9IGxlbihzeW1ib2xfbmFtZSkKKwlmbXQgPSAiIWhpcWlxaXFpcWlpaSIgKyBzdHIobikgKyAicyIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgNiwgOCwgc3ltYm9sX2lkLCA4LCBkc29faWQsIDgsIHN5bV9zdGFydCwgOCwgc3ltX2VuZCwgNCwgYmluZGluZywgbiwgc3ltYm9sX25hbWUpCisJc3ltYm9sX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiBicmFuY2hfdHlwZV90YWJsZShicmFuY2hfdHlwZSwgbmFtZSwgKngpOgorCW4gPSBsZW4obmFtZSkKKwlmbXQgPSAiIWhpaWkiICsgc3RyKG4pICsgInMiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDIsIDQsIGJyYW5jaF90eXBlLCBuLCBuYW1lKQorCWJyYW5jaF90eXBlX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiBzYW1wbGVfdGFibGUoc2FtcGxlX2lkLCBldnNlbF9pZCwgbWFjaGluZV9pZCwgdGhyZWFkX2lkLCBjb21tX2lkLCBkc29faWQsIHN5bWJvbF9pZCwgc3ltX29mZnNldCwgaXAsIHRpbWUsIGNwdSwgdG9fZHNvX2lkLCB0b19zeW1ib2xfaWQsIHRvX3N5bV9vZmZzZXQsIHRvX2lwLCBwZXJpb2QsIHdlaWdodCwgdHJhbnNhY3Rpb24sIGRhdGFfc3JjLCBicmFuY2hfdHlwZSwgaW5fdHgsICp4KToKKwlpZiBicmFuY2hlczoKKwkJdmFsdWUgPSBzdHJ1Y3QucGFjaygiIWhpcWlxaXFpcWlxaXFpcWlxaXFpcWlpaXFpcWlxaXFpaWlCIiwgMTcsIDgsIHNhbXBsZV9pZCwgOCwgZXZzZWxfaWQsIDgsIG1hY2hpbmVfaWQsIDgsIHRocmVhZF9pZCwgOCwgY29tbV9pZCwgOCwgZHNvX2lkLCA4LCBzeW1ib2xfaWQsIDgsIHN5bV9vZmZzZXQsIDgsIGlwLCA4LCB0aW1lLCA0LCBjcHUsIDgsIHRvX2Rzb19pZCwgOCwgdG9fc3ltYm9sX2lkLCA4LCB0b19zeW1fb2Zmc2V0LCA4LCB0b19pcCwgNCwgYnJhbmNoX3R5cGUsIDEsIGluX3R4KQorCWVsc2U6CisJCXZhbHVlID0gc3RydWN0LnBhY2soIiFoaXFpcWlxaXFpcWlxaXFpcWlxaXFpaWlxaXFpcWlxaXFpcWlxaXFpaWlCIiwgMjEsIDgsIHNhbXBsZV9pZCwgOCwgZXZzZWxfaWQsIDgsIG1hY2hpbmVfaWQsIDgsIHRocmVhZF9pZCwgOCwgY29tbV9pZCwgOCwgZHNvX2lkLCA4LCBzeW1ib2xfaWQsIDgsIHN5bV9vZmZzZXQsIDgsIGlwLCA4LCB0aW1lLCA0LCBjcHUsIDgsIHRvX2Rzb19pZCwgOCwgdG9fc3ltYm9sX2lkLCA4LCB0b19zeW1fb2Zmc2V0LCA4LCB0b19pcCwgOCwgcGVyaW9kLCA4LCB3ZWlnaHQsIDgsIHRyYW5zYWN0aW9uLCA4LCBkYXRhX3NyYywgNCwgYnJhbmNoX3R5cGUsIDEsIGluX3R4KQorCXNhbXBsZV9maWxlLndyaXRlKHZhbHVlKQorCitkZWYgY2FsbF9wYXRoX3RhYmxlKGNwX2lkLCBwYXJlbnRfaWQsIHN5bWJvbF9pZCwgaXAsICp4KToKKwlmbXQgPSAiIWhpcWlxaXFpcSIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgNCwgOCwgY3BfaWQsIDgsIHBhcmVudF9pZCwgOCwgc3ltYm9sX2lkLCA4LCBpcCkKKwljYWxsX3BhdGhfZmlsZS53cml0ZSh2YWx1ZSkKKworZGVmIGNhbGxfcmV0dXJuX3RhYmxlKGNyX2lkLCB0aHJlYWRfaWQsIGNvbW1faWQsIGNhbGxfcGF0aF9pZCwgY2FsbF90aW1lLCByZXR1cm5fdGltZSwgYnJhbmNoX2NvdW50LCBjYWxsX2lkLCByZXR1cm5faWQsIHBhcmVudF9jYWxsX3BhdGhfaWQsIGZsYWdzLCAqeCk6CisJZm10ID0gIiFoaXFpcWlxaXFpcWlxaXFpcWlxaXFpaSIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgMTEsIDgsIGNyX2lkLCA4LCB0aHJlYWRfaWQsIDgsIGNvbW1faWQsIDgsIGNhbGxfcGF0aF9pZCwgOCwgY2FsbF90aW1lLCA4LCByZXR1cm5fdGltZSwgOCwgYnJhbmNoX2NvdW50LCA4LCBjYWxsX2lkLCA4LCByZXR1cm5faWQsIDgsIHBhcmVudF9jYWxsX3BhdGhfaWQsIDQsIGZsYWdzKQorCWNhbGxfZmlsZS53cml0ZSh2YWx1ZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvYnVpbHRpbi10ZXN0LmMgYi90b29scy9wZXJmL3Rlc3RzL2J1aWx0aW4tdGVzdC5jCmluZGV4IDE2MmM5NzguLjRiN2Q5YWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvYnVpbHRpbi10ZXN0LmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9idWlsdGluLXRlc3QuYwpAQCAtODUsNyArODUsNyBAQAogCQkuZnVuYyA9IHRlc3RfX2hpc3RzX2xpbmssCiAJfSwKIAl7Ci0JCS5kZXNjID0gIlRyeSAndXNlIHBlcmYnIGluIHB5dGhvbiwgY2hlY2tpbmcgbGluayBwcm9ibGVtcyIsCisJCS5kZXNjID0gIlRyeSAnaW1wb3J0IHBlcmYnIGluIHB5dGhvbiwgY2hlY2tpbmcgbGluayBwcm9ibGVtcyIsCiAJCS5mdW5jID0gdGVzdF9fcHl0aG9uX3VzZSwKIAl9LAogCXsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvY29kZS1yZWFkaW5nLmMgYi90b29scy9wZXJmL3Rlc3RzL2NvZGUtcmVhZGluZy5jCmluZGV4IDY3ZjJkNjMuLmY2NzFlYzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvY29kZS1yZWFkaW5nLmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9jb2RlLXJlYWRpbmcuYwpAQCAtMTMzLDggKzEzMyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9vYmplY3RfY29kZSh1NjQgYWRkciwgc2l6ZV90IGxlbiwgdTggY3B1bW9kZSwKLQkJCSAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJICAgIHN0cnVjdCBzdGF0ZSAqc3RhdGUpCisJCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3Qgc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXVuc2lnbmVkIGNoYXIgYnVmMVtCVUZTWl07CkBAIC0xNDUsOCArMTQ0LDcgQEAKIAogCXByX2RlYnVnKCJSZWFkaW5nIG9iamVjdCBjb2RlIGZvciBtZW1vcnkgYWRkcmVzczogJSMiUFJJeDY0IlxuIiwgYWRkcik7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLAotCQkJICAgICAgJmFsKTsKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLCAmYWwpOwogCWlmICghYWwubWFwIHx8ICFhbC5tYXAtPmRzbykgewogCQlwcl9kZWJ1ZygidGhyZWFkX19maW5kX2FkZHJfbWFwIGZhaWxlZFxuIik7CiAJCXJldHVybiAtMTsKQEAgLTE3MCw4ICsxNjgsOCBAQAogCQlsZW4gPSBhbC5tYXAtPmVuZCAtIGFkZHI7CiAKIAkvKiBSZWFkIHRoZSBvYmplY3QgY29kZSB1c2luZyBwZXJmICovCi0JcmV0X2xlbiA9IGRzb19fZGF0YV9yZWFkX29mZnNldChhbC5tYXAtPmRzbywgbWFjaGluZSwgYWwuYWRkciwgYnVmMSwKLQkJCQkJbGVuKTsKKwlyZXRfbGVuID0gZHNvX19kYXRhX3JlYWRfb2Zmc2V0KGFsLm1hcC0+ZHNvLCB0aHJlYWQtPm1nLT5tYWNoaW5lLAorCQkJCQlhbC5hZGRyLCBidWYxLCBsZW4pOwogCWlmIChyZXRfbGVuICE9IGxlbikgewogCQlwcl9kZWJ1ZygiZHNvX19kYXRhX3JlYWRfb2Zmc2V0IGZhaWxlZFxuIik7CiAJCXJldHVybiAtMTsKQEAgLTI2NCw4ICsyNjIsNyBAQAogCiAJY3B1bW9kZSA9IGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLOwogCi0JcmV0dXJuIHJlYWRfb2JqZWN0X2NvZGUoc2FtcGxlLmlwLCBSRUFETEVOLCBjcHVtb2RlLCB0aHJlYWQsIG1hY2hpbmUsCi0JCQkJc3RhdGUpOworCXJldHVybiByZWFkX29iamVjdF9jb2RlKHNhbXBsZS5pcCwgUkVBRExFTiwgY3B1bW9kZSwgdGhyZWFkLCBzdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY2Vzc19ldmVudChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jIGIvdG9vbHMvcGVyZi90ZXN0cy9kd2FyZi11bndpbmQuYwppbmRleCBmYzI1ZTU3Li5hYjI4Y2NhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvZHdhcmYtdW53aW5kLmMKQEAgLTU5LDcgKzU5LDcgQEAKIH0KIAogX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKLXN0YXRpYyBpbnQgdW53aW5kX3RocmVhZChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQorc3RhdGljIGludCB1bndpbmRfdGhyZWFkKHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKIHsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGUgc2FtcGxlOwogCXVuc2lnbmVkIGxvbmcgY250ID0gMDsKQEAgLTcyLDcgKzcyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gdW53aW5kX19nZXRfZW50cmllcyh1bndpbmRfZW50cnksICZjbnQsIG1hY2hpbmUsIHRocmVhZCwKKwllcnIgPSB1bndpbmRfX2dldF9lbnRyaWVzKHVud2luZF9lbnRyeSwgJmNudCwgdGhyZWFkLAogCQkJCSAgJnNhbXBsZSwgTUFYX1NUQUNLKTsKIAlpZiAoZXJyKQogCQlwcl9kZWJ1ZygidW53aW5kIGZhaWxlZFxuIik7CkBAIC04OSwyMSArODksMjEgQEAKIH0KIAogX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKLXN0YXRpYyBpbnQga3JhdmFfMyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQorc3RhdGljIGludCBrcmF2YV8zKHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKIHsKLQlyZXR1cm4gdW53aW5kX3RocmVhZCh0aHJlYWQsIG1hY2hpbmUpOworCXJldHVybiB1bndpbmRfdGhyZWFkKHRocmVhZCk7CiB9CiAKIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCi1zdGF0aWMgaW50IGtyYXZhXzIoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3N0YXRpYyBpbnQga3JhdmFfMihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCiB7Ci0JcmV0dXJuIGtyYXZhXzModGhyZWFkLCBtYWNoaW5lKTsKKwlyZXR1cm4ga3JhdmFfMyh0aHJlYWQpOwogfQogCiBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQotc3RhdGljIGludCBrcmF2YV8xKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCitzdGF0aWMgaW50IGtyYXZhXzEoc3RydWN0IHRocmVhZCAqdGhyZWFkKQogewotCXJldHVybiBrcmF2YV8yKHRocmVhZCwgbWFjaGluZSk7CisJcmV0dXJuIGtyYXZhXzIodGhyZWFkKTsKIH0KIAogaW50IHRlc3RfX2R3YXJmX3Vud2luZCh2b2lkKQpAQCAtMTM3LDcgKzEzNyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGtyYXZhXzEodGhyZWFkLCBtYWNoaW5lKTsKKwllcnIgPSBrcmF2YV8xKHRocmVhZCk7CiAKICBvdXQ6CiAJbWFjaGluZV9fZGVsZXRlX3RocmVhZHMobWFjaGluZSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jIGIvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19maWx0ZXIuYwppbmRleCA1YTMxNzg3Li43NGYyNTdhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfZmlsdGVyLmMKQEAgLTQzLDcgKzQzLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgYWRkX2hpc3RfZW50cmllcyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwKLQkJCSAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSBfX21heWJlX3VudXNlZCkKKwkJCSAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKIHsKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL21tYXAtdGhyZWFkLWxvb2t1cC5jIGIvdG9vbHMvcGVyZi90ZXN0cy9tbWFwLXRocmVhZC1sb29rdXAuYwppbmRleCA0YTQ1NmZlLi4yMTEzZjFjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL21tYXAtdGhyZWFkLWxvb2t1cC5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvbW1hcC10aHJlYWQtbG9va3VwLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCiAJCXByX2RlYnVnKCJsb29raW5nIGZvciBtYXAgJXBcbiIsIHRkLT5tYXApOwogCi0JCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsIG1hY2hpbmUsCisJCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsCiAJCQkJICAgICAgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLCBNQVBfX0ZVTkNUSU9OLAogCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSAodGQtPm1hcCArIDEpLCAmYWwpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL3NhbXBsZS1wYXJzaW5nLmMgYi90b29scy9wZXJmL3Rlc3RzL3NhbXBsZS1wYXJzaW5nLmMKaW5kZXggY2EyOTJmOS4uNDkwOGM2NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9zYW1wbGUtcGFyc2luZy5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvc2FtcGxlLXBhcnNpbmcuYwpAQCAtMTI2LDE2ICsxMjYsMjggQEAKIAlpZiAodHlwZSAmIFBFUkZfU0FNUExFX1RSQU5TQUNUSU9OKQogCQlDT01QKHRyYW5zYWN0aW9uKTsKIAorCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfUkVHU19JTlRSKSB7CisJCXNpemVfdCBzeiA9IGh3ZWlnaHRfbG9uZyhzMS0+aW50cl9yZWdzLm1hc2spICogc2l6ZW9mKHU2NCk7CisKKwkJQ09NUChpbnRyX3JlZ3MubWFzayk7CisJCUNPTVAoaW50cl9yZWdzLmFiaSk7CisJCWlmIChzMS0+aW50cl9yZWdzLmFiaSAmJgorCQkgICAgKCFzMS0+aW50cl9yZWdzLnJlZ3MgfHwgIXMyLT5pbnRyX3JlZ3MucmVncyB8fAorCQkgICAgIG1lbWNtcChzMS0+aW50cl9yZWdzLnJlZ3MsIHMyLT5pbnRyX3JlZ3MucmVncywgc3opKSkgeworCQkJcHJfZGVidWcoIlNhbXBsZXMgZGlmZmVyIGF0ICdpbnRyX3JlZ3MnXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IGRvX3Rlc3QodTY0IHNhbXBsZV90eXBlLCB1NjQgc2FtcGxlX3JlZ3NfdXNlciwgdTY0IHJlYWRfZm9ybWF0KQorc3RhdGljIGludCBkb190ZXN0KHU2NCBzYW1wbGVfdHlwZSwgdTY0IHNhbXBsZV9yZWdzLCB1NjQgcmVhZF9mb3JtYXQpCiB7CiAJc3RydWN0IHBlcmZfZXZzZWwgZXZzZWwgPSB7CiAJCS5uZWVkc19zd2FwID0gZmFsc2UsCiAJCS5hdHRyID0gewogCQkJLnNhbXBsZV90eXBlID0gc2FtcGxlX3R5cGUsCi0JCQkuc2FtcGxlX3JlZ3NfdXNlciA9IHNhbXBsZV9yZWdzX3VzZXIsCiAJCQkucmVhZF9mb3JtYXQgPSByZWFkX2Zvcm1hdCwKIAkJfSwKIAl9OwpAQCAtMTU0LDcgKzE2Niw3IEBACiAJCS8qIDEgYnJhbmNoX2VudHJ5ICovCiAJCS5kYXRhID0gezEsIDIxMSwgMjEyLCAyMTN9LAogCX07Ci0JdTY0IHVzZXJfcmVnc1s2NF07CisJdTY0IHJlZ3NbNjRdOwogCWNvbnN0IHU2NCByYXdfZGF0YVtdID0gezB4MTIzNDU2NzgwYTBiMGMwZFVMTCwgMHgxMTAyMDMwNDA1MDYwNzA4VUxMfTsKIAljb25zdCB1NjQgZGF0YVtdID0gezB4MjIxMTQ0MzM2NjU1ODg3N1VMTCwgMCwgMHhhYWJiY2NkZGVlZmY0MzIxVUxMfTsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGUgc2FtcGxlID0gewpAQCAtMTc2LDggKzE4OCw4IEBACiAJCS5icmFuY2hfc3RhY2sJPSAmYnJhbmNoX3N0YWNrLmJyYW5jaF9zdGFjaywKIAkJLnVzZXJfcmVncwk9IHsKIAkJCS5hYmkJPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV82NCwKLQkJCS5tYXNrCT0gc2FtcGxlX3JlZ3NfdXNlciwKLQkJCS5yZWdzCT0gdXNlcl9yZWdzLAorCQkJLm1hc2sJPSBzYW1wbGVfcmVncywKKwkJCS5yZWdzCT0gcmVncywKIAkJfSwKIAkJLnVzZXJfc3RhY2sJPSB7CiAJCQkuc2l6ZQk9IHNpemVvZihkYXRhKSwKQEAgLTE4NywxNCArMTk5LDI1IEBACiAJCQkudGltZV9lbmFibGVkID0gMHgwMzBhNTlkNjY0ZmNhN2RlVUxMLAogCQkJLnRpbWVfcnVubmluZyA9IDB4MDExYjZhZTU1M2ViOThlZFVMTCwKIAkJfSwKKwkJLmludHJfcmVncwk9IHsKKwkJCS5hYmkJPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV82NCwKKwkJCS5tYXNrCT0gc2FtcGxlX3JlZ3MsCisJCQkucmVncwk9IHJlZ3MsCisJCX0sCiAJfTsKIAlzdHJ1Y3Qgc2FtcGxlX3JlYWRfdmFsdWUgdmFsdWVzW10gPSB7ezEsIDV9LCB7OSwgM30sIHsyLCA3fSwgezYsIDR9LH07CiAJc3RydWN0IHBlcmZfc2FtcGxlIHNhbXBsZV9vdXQ7CiAJc2l6ZV90IGksIHN6LCBidWZzejsKIAlpbnQgZXJyLCByZXQgPSAtMTsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodXNlcl9yZWdzKTsgaSsrKQotCQkqKGkgKyAodTggKil1c2VyX3JlZ3MpID0gaSAmIDB4ZmU7CisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVHU19VU0VSKQorCQlldnNlbC5hdHRyLnNhbXBsZV9yZWdzX3VzZXIgPSBzYW1wbGVfcmVnczsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfSU5UUikKKwkJZXZzZWwuYXR0ci5zYW1wbGVfcmVnc19pbnRyID0gc2FtcGxlX3JlZ3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJlZ3MpOyBpKyspCisJCSooaSArICh1OCAqKXJlZ3MpID0gaSAmIDB4ZmU7CiAKIAlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9HUk9VUCkgewogCQlzYW1wbGUucmVhZC5ncm91cC5uciAgICAgPSA0OwpAQCAtMjcxLDcgKzI5NCw3IEBACiB7CiAJY29uc3QgdTY0IHJmW10gPSB7NCwgNSwgNiwgNywgMTIsIDEzLCAxNCwgMTV9OwogCXU2NCBzYW1wbGVfdHlwZTsKLQl1NjQgc2FtcGxlX3JlZ3NfdXNlcjsKKwl1NjQgc2FtcGxlX3JlZ3M7CiAJc2l6ZV90IGk7CiAJaW50IGVycjsKIApAQCAtMjgwLDcgKzMwMyw3IEBACiAJICogd2VyZSBhZGRlZC4gIFBsZWFzZSBhY3R1YWxseSB1cGRhdGUgdGhlIHRlc3QgcmF0aGVyIHRoYW4ganVzdCBjaGFuZ2UKIAkgKiB0aGUgY29uZGl0aW9uIGJlbG93LgogCSAqLwotCWlmIChQRVJGX1NBTVBMRV9NQVggPiBQRVJGX1NBTVBMRV9UUkFOU0FDVElPTiA8PCAxKSB7CisJaWYgKFBFUkZfU0FNUExFX01BWCA+IFBFUkZfU0FNUExFX1JFR1NfSU5UUiA8PCAxKSB7CiAJCXByX2RlYnVnKCJzYW1wbGUgZm9ybWF0IGhhcyBjaGFuZ2VkLCBzb21lIG5ldyBQRVJGX1NBTVBMRV8gYml0IHdhcyBpbnRyb2R1Y2VkIC0gdGVzdCBuZWVkcyB1cGRhdGluZ1xuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yOTcsMjIgKzMyMCwyNCBAQAogCQkJfQogCQkJY29udGludWU7CiAJCX0KKwkJc2FtcGxlX3JlZ3MgPSAwOwogCiAJCWlmIChzYW1wbGVfdHlwZSA9PSBQRVJGX1NBTVBMRV9SRUdTX1VTRVIpCi0JCQlzYW1wbGVfcmVnc191c2VyID0gMHgzZmZmOwotCQllbHNlCi0JCQlzYW1wbGVfcmVnc191c2VyID0gMDsKKwkJCXNhbXBsZV9yZWdzID0gMHgzZmZmOwogCi0JCWVyciA9IGRvX3Rlc3Qoc2FtcGxlX3R5cGUsIHNhbXBsZV9yZWdzX3VzZXIsIDApOworCQlpZiAoc2FtcGxlX3R5cGUgPT0gUEVSRl9TQU1QTEVfUkVHU19JTlRSKQorCQkJc2FtcGxlX3JlZ3MgPSAweGZmMGZmZjsKKworCQllcnIgPSBkb190ZXN0KHNhbXBsZV90eXBlLCBzYW1wbGVfcmVncywgMCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KIAogCS8qIFRlc3QgYWxsIHNhbXBsZSBmb3JtYXQgYml0cyB0b2dldGhlciAqLwogCXNhbXBsZV90eXBlID0gUEVSRl9TQU1QTEVfTUFYIC0gMTsKLQlzYW1wbGVfcmVnc191c2VyID0gMHgzZmZmOworCXNhbXBsZV9yZWdzID0gMHgzZmZmOyAvKiBzaGFyZWQgeWIgaW50ciBhbmQgdXNlciByZWdzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmYpOyBpKyspIHsKLQkJZXJyID0gZG9fdGVzdChzYW1wbGVfdHlwZSwgc2FtcGxlX3JlZ3NfdXNlciwgcmZbaV0pOworCQllcnIgPSBkb190ZXN0KHNhbXBsZV90eXBlLCBzYW1wbGVfcmVncywgcmZbaV0pOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKaW5kZXggZjA2OTdhMy4uMWUwYTJmZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9icm93c2Vycy9hbm5vdGF0ZS5jCisrKyBiL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvYW5ub3RhdGUuYwpAQCAtMjcsNiArMjcsNyBAQAogCWJvb2wgaGlkZV9zcmNfY29kZSwKIAkgICAgIHVzZV9vZmZzZXQsCiAJICAgICBqdW1wX2Fycm93cywKKwkgICAgIHNob3dfbGluZW5yLAogCSAgICAgc2hvd19ucl9qdW1wczsKIH0gYW5ub3RhdGVfYnJvd3Nlcl9fb3B0cyA9IHsKIAkudXNlX29mZnNldAk9IHRydWUsCkBAIC0xMjgsNyArMTI5LDExIEBACiAJaWYgKCEqZGwtPmxpbmUpCiAJCXNsc21nX3dyaXRlX25zdHJpbmcoIiAiLCB3aWR0aCAtIHBjbnRfd2lkdGgpOwogCWVsc2UgaWYgKGRsLT5vZmZzZXQgPT0gLTEpIHsKLQkJcHJpbnRlZCA9IHNjbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIiUqcyAgIiwKKwkJaWYgKGRsLT5saW5lX25yICYmIGFubm90YXRlX2Jyb3dzZXJfX29wdHMuc2hvd19saW5lbnIpCisJCQlwcmludGVkID0gc2NucHJpbnRmKGJmLCBzaXplb2YoYmYpLCAiJS0qZCAiLAorCQkJCQlhYi0+YWRkcl93aWR0aCArIDEsIGRsLT5saW5lX25yKTsKKwkJZWxzZQorCQkJcHJpbnRlZCA9IHNjbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIiUqcyAgIiwKIAkJCQkgICAgYWItPmFkZHJfd2lkdGgsICIgIik7CiAJCXNsc21nX3dyaXRlX25zdHJpbmcoYmYsIHByaW50ZWQpOwogCQlzbHNtZ193cml0ZV9uc3RyaW5nKGRsLT5saW5lLCB3aWR0aCAtIHByaW50ZWQgLSBwY250X3dpZHRoICsgMSk7CkBAIC03MzMsNiArNzM4LDcgQEAKIAkJIm8gICAgICAgICAgICAgVG9nZ2xlIGRpc2Fzc2VtYmxlciBvdXRwdXQvc2ltcGxpZmllZCB2aWV3XG4iCiAJCSJzICAgICAgICAgICAgIFRvZ2dsZSBzb3VyY2UgY29kZSB2aWV3XG4iCiAJCSIvICAgICAgICAgICAgIFNlYXJjaCBzdHJpbmdcbiIKKwkJImsgICAgICAgICAgICAgVG9nZ2xlIGxpbmUgbnVtYmVyc1xuIgogCQkiciAgICAgICAgICAgICBSdW4gYXZhaWxhYmxlIHNjcmlwdHNcbiIKIAkJIj8gICAgICAgICAgICAgU2VhcmNoIHN0cmluZyBiYWNrd2FyZHNcbiIpOwogCQkJY29udGludWU7CkBAIC03NDEsNiArNzQ3LDEwIEBACiAJCQkJc2NyaXB0X2Jyb3dzZShOVUxMKTsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJY2FzZSAnayc6CisJCQlhbm5vdGF0ZV9icm93c2VyX19vcHRzLnNob3dfbGluZW5yID0KKwkJCQkhYW5ub3RhdGVfYnJvd3Nlcl9fb3B0cy5zaG93X2xpbmVucjsKKwkJCWJyZWFrOwogCQljYXNlICdIJzoKIAkJCW5kID0gYnJvd3Nlci0+Y3Vycl9ob3Q7CiAJCQlicmVhazsKQEAgLTk4NCw2ICs5OTQsNyBAQAogfSBhbm5vdGF0ZV9fY29uZmlnc1tdID0gewogCUFOTk9UQVRFX0NGRyhoaWRlX3NyY19jb2RlKSwKIAlBTk5PVEFURV9DRkcoanVtcF9hcnJvd3MpLAorCUFOTk9UQVRFX0NGRyhzaG93X2xpbmVuciksCiAJQU5OT1RBVEVfQ0ZHKHNob3dfbnJfanVtcHMpLAogCUFOTk9UQVRFX0NGRyh1c2Vfb2Zmc2V0KSwKIH07CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMgYi90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMKaW5kZXggY2ZiOTc2Yi4uNTAyZGFmZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9icm93c2Vycy9oaXN0cy5jCisrKyBiL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvaGlzdHMuYwpAQCAtMjI3LDEwICsyMjcsMTQgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGNhbGxjaGFpbl9ub2RlX19pbml0X2hhdmVfY2hpbGRyZW4oc3RydWN0IGNhbGxjaGFpbl9ub2RlICpub2RlKQorc3RhdGljIHZvaWQgY2FsbGNoYWluX25vZGVfX2luaXRfaGF2ZV9jaGlsZHJlbihzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKm5vZGUsCisJCQkJCSAgICAgICBib29sIGhhc19zaWJsaW5nKQogewogCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47CiAKKwljaGFpbiA9IGxpc3RfZW50cnkobm9kZS0+dmFsLm5leHQsIHN0cnVjdCBjYWxsY2hhaW5fbGlzdCwgbGlzdCk7CisJY2hhaW4tPm1zLmhhc19jaGlsZHJlbiA9IGhhc19zaWJsaW5nOworCiAJaWYgKCFsaXN0X2VtcHR5KCZub2RlLT52YWwpKSB7CiAJCWNoYWluID0gbGlzdF9lbnRyeShub2RlLT52YWwucHJldiwgc3RydWN0IGNhbGxjaGFpbl9saXN0LCBsaXN0KTsKIAkJY2hhaW4tPm1zLmhhc19jaGlsZHJlbiA9ICFSQl9FTVBUWV9ST09UKCZub2RlLT5yYl9yb290KTsKQEAgLTI0MSwxMSArMjQ1LDEyIEBACiAKIHN0YXRpYyB2b2lkIGNhbGxjaGFpbl9faW5pdF9oYXZlX2NoaWxkcmVuKHN0cnVjdCByYl9yb290ICpyb290KQogewotCXN0cnVjdCByYl9ub2RlICpuZDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQgPSByYl9maXJzdChyb290KTsKKwlib29sIGhhc19zaWJsaW5nID0gbmQgJiYgcmJfbmV4dChuZCk7CiAKIAlmb3IgKG5kID0gcmJfZmlyc3Qocm9vdCk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqbm9kZSA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUsIHJiX25vZGUpOwotCQljYWxsY2hhaW5fbm9kZV9faW5pdF9oYXZlX2NoaWxkcmVuKG5vZGUpOworCQljYWxsY2hhaW5fbm9kZV9faW5pdF9oYXZlX2NoaWxkcmVuKG5vZGUsIGhhc19zaWJsaW5nKTsKIAl9CiB9CiAKQEAgLTQ2MywyMyArNDY4LDYgQEAKIAlyZXR1cm4ga2V5OwogfQogCi1zdGF0aWMgY2hhciAqY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKHN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2wsCi0JCQkJICAgICAgY2hhciAqYmYsIHNpemVfdCBiZnNpemUsIGJvb2wgc2hvd19kc28pCi17Ci0JaW50IHByaW50ZWQ7Ci0KLQlpZiAoY2wtPm1zLnN5bSkKLQkJcHJpbnRlZCA9IHNjbnByaW50ZihiZiwgYmZzaXplLCAiJXMiLCBjbC0+bXMuc3ltLT5uYW1lKTsKLQllbHNlCi0JCXByaW50ZWQgPSBzY25wcmludGYoYmYsIGJmc2l6ZSwgIiUjIiBQUkl4NjQsIGNsLT5pcCk7Ci0KLQlpZiAoc2hvd19kc28pCi0JCXNjbnByaW50ZihiZiArIHByaW50ZWQsIGJmc2l6ZSAtIHByaW50ZWQsICIgJXMiLAotCQkJICBjbC0+bXMubWFwID8gY2wtPm1zLm1hcC0+ZHNvLT5zaG9ydF9uYW1lIDogInVua25vd24iKTsKLQotCXJldHVybiBiZjsKLX0KLQogc3RydWN0IGNhbGxjaGFpbl9wcmludF9hcmcgewogCS8qIGZvciBoaXN0cyBicm93c2VyICovCiAJb2ZmX3QJcm93X29mZnNldDsKQEAgLTU1OSw4ICs1NDcsMTEgQEAKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAlpbnQgZmlyc3Rfcm93ID0gcm93LCBvZmZzZXQgPSBsZXZlbCAqIExFVkVMX09GRlNFVF9TVEVQOwogCXU2NCBuZXdfdG90YWw7CisJYm9vbCBuZWVkX3BlcmNlbnQ7CiAKIAlub2RlID0gcmJfZmlyc3Qocm9vdCk7CisJbmVlZF9wZXJjZW50ID0gISFyYl9uZXh0KG5vZGUpOworCiAJd2hpbGUgKG5vZGUpIHsKIAkJc3RydWN0IGNhbGxjaGFpbl9ub2RlICpjaGlsZCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZSk7CiAJCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfbmV4dChub2RlKTsKQEAgLTU3Nyw3ICs1NjgsNyBAQAogCiAJCQlpZiAoZmlyc3QpCiAJCQkJZmlyc3QgPSBmYWxzZTsKLQkJCWVsc2UgaWYgKGxldmVsID4gMSkKKwkJCWVsc2UgaWYgKG5lZWRfcGVyY2VudCkKIAkJCQlleHRyYV9vZmZzZXQgPSBMRVZFTF9PRkZTRVRfU1RFUDsKIAogCQkJZm9sZGVkX3NpZ24gPSBjYWxsY2hhaW5fbGlzdF9fZm9sZGVkKGNoYWluKTsKQEAgLTU5MCw3ICs1ODEsNyBAQAogCQkJc3RyID0gY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKGNoYWluLCBiZiwgc2l6ZW9mKGJmKSwKIAkJCQkJCSAgICAgICBicm93c2VyLT5zaG93X2Rzbyk7CiAKLQkJCWlmICh3YXNfZmlyc3QgJiYgbGV2ZWwgPiAxKSB7CisJCQlpZiAod2FzX2ZpcnN0ICYmIG5lZWRfcGVyY2VudCkgewogCQkJCWRvdWJsZSBwZXJjZW50ID0gY3VtdWwgKiAxMDAuMCAvIHRvdGFsOwogCiAJCQkJaWYgKGFzcHJpbnRmKCZhbGxvY19zdHIsICIlMi4yZiUlICVzIiwgcGVyY2VudCwgc3RyKSA8IDApCkBAIC04MDcsNiArNzk4LDEzIEBACiAJCQkuaXNfY3VycmVudF9lbnRyeSA9IGN1cnJlbnRfZW50cnksCiAJCX07CiAKKwkJaWYgKGNhbGxjaGFpbl9wYXJhbS5tb2RlID09IENIQUlOX0dSQVBIX1JFTCkgeworCQkJaWYgKHN5bWJvbF9jb25mLmN1bXVsYXRlX2NhbGxjaGFpbikKKwkJCQl0b3RhbCA9IGVudHJ5LT5zdGF0X2FjYy0+cGVyaW9kOworCQkJZWxzZQorCQkJCXRvdGFsID0gZW50cnktPnN0YXQucGVyaW9kOworCQl9CisKIAkJcHJpbnRlZCArPSBoaXN0X2Jyb3dzZXJfX3Nob3dfY2FsbGNoYWluKGJyb3dzZXIsCiAJCQkJCSZlbnRyeS0+c29ydGVkX2NoYWluLCAxLCByb3csIHRvdGFsLAogCQkJCQloaXN0X2Jyb3dzZXJfX3Nob3dfY2FsbGNoYWluX2VudHJ5LCAmYXJnLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMKaW5kZXggZmM2NTRmYi4uNGIzNTg1ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYworKysgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jCkBAIC04OSwxNSArODksNiBAQAogCQkJCXBlcmZfZ3RrX19ocHBfY29sb3Jfb3ZlcmhlYWRfYWNjOwogfQogCi1zdGF0aWMgdm9pZCBjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjbCwKLQkJCQkgICAgIGNoYXIgKmJmLCBzaXplX3QgYmZzaXplKQotewotCWlmIChjbC0+bXMuc3ltKQotCQlzY25wcmludGYoYmYsIGJmc2l6ZSwgIiVzIiwgY2wtPm1zLnN5bS0+bmFtZSk7Ci0JZWxzZQotCQlzY25wcmludGYoYmYsIGJmc2l6ZSwgIiUjIiBQUkl4NjQsIGNsLT5pcCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfY2FsbGNoYWluKHN0cnVjdCByYl9yb290ICpyb290LCBHdGtUcmVlU3RvcmUgKnN0b3JlLAogCQkJCSAgICBHdGtUcmVlSXRlciAqcGFyZW50LCBpbnQgY29sLCB1NjQgdG90YWwpCiB7CkBAIC0xMjgsNyArMTE5LDcgQEAKIAkJCXNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTUuMmYlJSIsIHBlcmNlbnQpOwogCQkJZ3RrX3RyZWVfc3RvcmVfc2V0KHN0b3JlLCAmaXRlciwgMCwgYnVmLCAtMSk7CiAKLQkJCWNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShjaGFpbiwgYnVmLCBzaXplb2YoYnVmKSk7CisJCQljYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoY2hhaW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZhbHNlKTsKIAkJCWd0a190cmVlX3N0b3JlX3NldChzdG9yZSwgJml0ZXIsIGNvbCwgYnVmLCAtMSk7CiAKIAkJCWlmIChuZWVkX25ld19wYXJlbnQpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvc3RkaW8vaGlzdC5jIGIvdG9vbHMvcGVyZi91aS9zdGRpby9oaXN0LmMKaW5kZXggMTViNDUxYS4uZGZjYmM5MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9zdGRpby9oaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91aS9zdGRpby9oaXN0LmMKQEAgLTQxLDYgKzQxLDcgQEAKIHsKIAlpbnQgaTsKIAlzaXplX3QgcmV0ID0gMDsKKwljaGFyIGJmWzEwMjRdOwogCiAJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOwogCWZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7CkBAIC01NiwxMSArNTcsOCBAQAogCQl9IGVsc2UKIAkJCXJldCArPSBmcHJpbnRmKGZwLCAiJXMiLCAiICAgICAgICAgICIpOwogCX0KLQlpZiAoY2hhaW4tPm1zLnN5bSkKLQkJcmV0ICs9IGZwcmludGYoZnAsICIlc1xuIiwgY2hhaW4tPm1zLnN5bS0+bmFtZSk7Ci0JZWxzZQotCQlyZXQgKz0gZnByaW50ZihmcCwgIjB4JTAiIFBSSXg2NCAiXG4iLCBjaGFpbi0+aXApOwotCisJZnB1dHMoY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKGNoYWluLCBiZiwgc2l6ZW9mKGJmKSwgZmFsc2UpLCBmcCk7CisJZnB1dGMoJ1xuJywgZnApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE2OCw2ICsxNjYsNyBAQAogCXN0cnVjdCByYl9ub2RlICpub2RlOwogCWludCBpID0gMDsKIAlpbnQgcmV0ID0gMDsKKwljaGFyIGJmWzEwMjRdOwogCiAJLyoKIAkgKiBJZiBoYXZlIG9uZSBzaW5nbGUgY2FsbGNoYWluIHJvb3QsIGRvbid0IGJvdGhlciBwcmludGluZwpAQCAtMTk2LDEwICsxOTUsOCBAQAogCQkJfSBlbHNlCiAJCQkJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOwogCi0JCQlpZiAoY2hhaW4tPm1zLnN5bSkKLQkJCQlyZXQgKz0gZnByaW50ZihmcCwgIiAlc1xuIiwgY2hhaW4tPm1zLnN5bS0+bmFtZSk7Ci0JCQllbHNlCi0JCQkJcmV0ICs9IGZwcmludGYoZnAsICIgJXBcbiIsICh2b2lkICopKGxvbmcpY2hhaW4tPmlwKTsKKwkJCXJldCArPSBmcHJpbnRmKGZwLCAiJXNcbiIsIGNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShjaGFpbiwgYmYsIHNpemVvZihiZiksCisJCQkJCQkJZmFsc2UpKTsKIAogCQkJaWYgKCsrZW50cmllc19wcmludGVkID09IGNhbGxjaGFpbl9wYXJhbS5wcmludF9saW1pdCkKIAkJCQlicmVhazsKQEAgLTIxOSw2ICsyMTYsNyBAQAogewogCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47CiAJc2l6ZV90IHJldCA9IDA7CisJY2hhciBiZlsxMDI0XTsKIAogCWlmICghbm9kZSkKIAkJcmV0dXJuIDA7CkBAIC0yMjksMTEgKzIyNyw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJm5vZGUtPnZhbCwgbGlzdCkgewogCQlpZiAoY2hhaW4tPmlwID49IFBFUkZfQ09OVEVYVF9NQVgpCiAJCQljb250aW51ZTsKLQkJaWYgKGNoYWluLT5tcy5zeW0pCi0JCQlyZXQgKz0gZnByaW50ZihmcCwgIiAgICAgICAgICAgICAgICAlc1xuIiwgY2hhaW4tPm1zLnN5bS0+bmFtZSk7Ci0JCWVsc2UKLQkJCXJldCArPSBmcHJpbnRmKGZwLCAiICAgICAgICAgICAgICAgICVwXG4iLAotCQkJCQkodm9pZCAqKShsb25nKWNoYWluLT5pcCk7CisJCXJldCArPSBmcHJpbnRmKGZwLCAiICAgICAgICAgICAgICAgICVzXG4iLCBjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoY2hhaW4sCisJCQkJCWJmLCBzaXplb2YoYmYpLCBmYWxzZSkpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCmluZGV4IDdkYWJkZTEuLjc5OTk5Y2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCkBAIC0xNywxMSArMTcsMTMgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImFubm90YXRlLmgiCiAjaW5jbHVkZSAiZXZzZWwuaCIKKyNpbmNsdWRlIDxyZWdleC5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogY29uc3QgY2hhciAJKmRpc2Fzc2VtYmxlcl9zdHlsZTsKIGNvbnN0IGNoYXIJKm9iamR1bXBfcGF0aDsKK3N0YXRpYyByZWdleF90CSBmaWxlX2xpbmVubzsKIAogc3RhdGljIHN0cnVjdCBpbnMgKmluc19fZmluZChjb25zdCBjaGFyICpuYW1lKTsKIHN0YXRpYyBpbnQgZGlzYXNtX2xpbmVfX3BhcnNlKGNoYXIgKmxpbmUsIGNoYXIgKipuYW1lcCwgY2hhciAqKnJhd3ApOwpAQCAtNTcwLDEzICs1NzIsMTUgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGlzYXNtX2xpbmUgKmRpc2FzbV9saW5lX19uZXcoczY0IG9mZnNldCwgY2hhciAqbGluZSwgc2l6ZV90IHByaXZzaXplKQorc3RhdGljIHN0cnVjdCBkaXNhc21fbGluZSAqZGlzYXNtX2xpbmVfX25ldyhzNjQgb2Zmc2V0LCBjaGFyICpsaW5lLAorCQkJCQlzaXplX3QgcHJpdnNpemUsIGludCBsaW5lX25yKQogewogCXN0cnVjdCBkaXNhc21fbGluZSAqZGwgPSB6YWxsb2Moc2l6ZW9mKCpkbCkgKyBwcml2c2l6ZSk7CiAKIAlpZiAoZGwgIT0gTlVMTCkgewogCQlkbC0+b2Zmc2V0ID0gb2Zmc2V0OwogCQlkbC0+bGluZSA9IHN0cmR1cChsaW5lKTsKKwkJZGwtPmxpbmVfbnIgPSBsaW5lX25yOwogCQlpZiAoZGwtPmxpbmUgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X2RlbGV0ZTsKIApAQCAtNzg4LDEzICs3OTIsMTUgQEAKICAqIFRoZSBvcHMucmF3IHBhcnQgd2lsbCBiZSBwYXJzZWQgZnVydGhlciBhY2NvcmRpbmcgdG8gdHlwZSBvZiB0aGUgaW5zdHJ1Y3Rpb24uCiAgKi8KIHN0YXRpYyBpbnQgc3ltYm9sX19wYXJzZV9vYmpkdW1wX2xpbmUoc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkJICAgICAgRklMRSAqZmlsZSwgc2l6ZV90IHByaXZzaXplKQorCQkJCSAgICAgIEZJTEUgKmZpbGUsIHNpemVfdCBwcml2c2l6ZSwKKwkJCQkgICAgICBpbnQgKmxpbmVfbnIpCiB7CiAJc3RydWN0IGFubm90YXRpb24gKm5vdGVzID0gc3ltYm9sX19hbm5vdGF0aW9uKHN5bSk7CiAJc3RydWN0IGRpc2FzbV9saW5lICpkbDsKIAljaGFyICpsaW5lID0gTlVMTCwgKnBhcnNlZF9saW5lLCAqdG1wLCAqdG1wMiwgKmM7CiAJc2l6ZV90IGxpbmVfbGVuOwogCXM2NCBsaW5lX2lwLCBvZmZzZXQgPSAtMTsKKwlyZWdtYXRjaF90IG1hdGNoWzJdOwogCiAJaWYgKGdldGxpbmUoJmxpbmUsICZsaW5lX2xlbiwgZmlsZSkgPCAwKQogCQlyZXR1cm4gLTE7CkBAIC04MTIsNiArODE4LDEyIEBACiAJbGluZV9pcCA9IC0xOwogCXBhcnNlZF9saW5lID0gbGluZTsKIAorCS8qIC9maWxlbmFtZTpsaW5lbnIgPyBTYXZlIGxpbmUgbnVtYmVyIGFuZCBpZ25vcmUuICovCisJaWYgKHJlZ2V4ZWMoJmZpbGVfbGluZW5vLCBsaW5lLCAyLCBtYXRjaCwgMCkgPT0gMCkgeworCQkqbGluZV9uciA9IGF0b2kobGluZSArIG1hdGNoWzFdLnJtX3NvKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKIAkgKiBTdHJpcCBsZWFkaW5nIHNwYWNlczoKIAkgKi8KQEAgLTg0Miw4ICs4NTQsOSBAQAogCQkJcGFyc2VkX2xpbmUgPSB0bXAyICsgMTsKIAl9CiAKLQlkbCA9IGRpc2FzbV9saW5lX19uZXcob2Zmc2V0LCBwYXJzZWRfbGluZSwgcHJpdnNpemUpOworCWRsID0gZGlzYXNtX2xpbmVfX25ldyhvZmZzZXQsIHBhcnNlZF9saW5lLCBwcml2c2l6ZSwgKmxpbmVfbnIpOwogCWZyZWUobGluZSk7CisJKCpsaW5lX25yKSsrOwogCiAJaWYgKGRsID09IE5VTEwpCiAJCXJldHVybiAtMTsKQEAgLTg2OSw2ICs4ODIsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgdm9pZCBzeW1ib2xfX2luaXRfcmVnZXhwcih2b2lkKQoreworCXJlZ2NvbXAoJmZpbGVfbGluZW5vLCAiXi9bXjpdKzooWzAtOV0rKSIsIFJFR19FWFRFTkRFRCk7Cit9CisKIHN0YXRpYyB2b2lkIGRlbGV0ZV9sYXN0X25vcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7CiAJc3RydWN0IGFubm90YXRpb24gKm5vdGVzID0gc3ltYm9sX19hbm5vdGF0aW9uKHN5bSk7CkBAIC05MDQsNiArOTIyLDcgQEAKIAljaGFyIHN5bWZzX2ZpbGVuYW1lW1BBVEhfTUFYXTsKIAlzdHJ1Y3Qga2NvcmVfZXh0cmFjdCBrY2U7CiAJYm9vbCBkZWxldGVfZXh0cmFjdCA9IGZhbHNlOworCWludCBsaW5lbm8gPSAwOwogCiAJaWYgKGZpbGVuYW1lKQogCQlzeW1ib2xfX2pvaW5fc3ltZnMoc3ltZnNfZmlsZW5hbWUsIGZpbGVuYW1lKTsKQEAgLTkxNSw2ICs5MzQsOCBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJZ290byBmYWxsYmFjazsKKwl9IGVsc2UgaWYgKGRzb19faXNfa2NvcmUoZHNvKSkgeworCQlnb3RvIGZhbGxiYWNrOwogCX0gZWxzZSBpZiAocmVhZGxpbmsoc3ltZnNfZmlsZW5hbWUsIGNvbW1hbmQsIHNpemVvZihjb21tYW5kKSkgPCAwIHx8CiAJCSAgIHN0cnN0cihjb21tYW5kLCAiW2tlcm5lbC5rYWxsc3ltc10iKSB8fAogCQkgICBhY2Nlc3Moc3ltZnNfZmlsZW5hbWUsIFJfT0spKSB7CkBAIC05ODIsNyArMTAwMyw3IEBACiAJc25wcmludGYoY29tbWFuZCwgc2l6ZW9mKGNvbW1hbmQpLAogCQkgIiVzICVzJXMgLS1zdGFydC1hZGRyZXNzPTB4JTAxNiIgUFJJeDY0CiAJCSAiIC0tc3RvcC1hZGRyZXNzPTB4JTAxNiIgUFJJeDY0Ci0JCSAiIC1kICVzICVzIC1DICVzIDI+L2Rldi9udWxsfGdyZXAgLXYgJXN8ZXhwYW5kIiwKKwkJICIgLWwgLWQgJXMgJXMgLUMgJXMgMj4vZGV2L251bGx8Z3JlcCAtdiAlc3xleHBhbmQiLAogCQkgb2JqZHVtcF9wYXRoID8gb2JqZHVtcF9wYXRoIDogIm9iamR1bXAiLAogCQkgZGlzYXNzZW1ibGVyX3N0eWxlID8gIi1NICIgOiAiIiwKIAkJIGRpc2Fzc2VtYmxlcl9zdHlsZSA/IGRpc2Fzc2VtYmxlcl9zdHlsZSA6ICIiLApAQCAtOTk5LDcgKzEwMjAsOCBAQAogCQlnb3RvIG91dF9mcmVlX2ZpbGVuYW1lOwogCiAJd2hpbGUgKCFmZW9mKGZpbGUpKQotCQlpZiAoc3ltYm9sX19wYXJzZV9vYmpkdW1wX2xpbmUoc3ltLCBtYXAsIGZpbGUsIHByaXZzaXplKSA8IDApCisJCWlmIChzeW1ib2xfX3BhcnNlX29iamR1bXBfbGluZShzeW0sIG1hcCwgZmlsZSwgcHJpdnNpemUsCisJCQkgICAgJmxpbmVubykgPCAwKQogCQkJYnJlYWs7CiAKIAkvKgpAQCAtMTE3MCw3ICsxMTkyLDcgQEAKIAkJCWdvdG8gbmV4dDsKIAogCQlvZmZzZXQgPSBzdGFydCArIGk7Ci0JCXNyY19saW5lLT5wYXRoID0gZ2V0X3NyY2xpbmUobWFwLT5kc28sIG9mZnNldCk7CisJCXNyY19saW5lLT5wYXRoID0gZ2V0X3NyY2xpbmUobWFwLT5kc28sIG9mZnNldCwgTlVMTCwgZmFsc2UpOwogCQlpbnNlcnRfc291cmNlX2xpbmUoJnRtcF9yb290LCBzcmNfbGluZSk7CiAKIAluZXh0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmggYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaAppbmRleCAxMTJkNmUyLi4wNzg0YTk0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaAorKysgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaApAQCAtNTgsNiArNTgsNyBAQAogCWNoYXIJCSAgICAqbGluZTsKIAljaGFyCQkgICAgKm5hbWU7CiAJc3RydWN0IGlucwkgICAgKmluczsKKwlpbnQJCSAgICBsaW5lX25yOwogCXN0cnVjdCBpbnNfb3BlcmFuZHMgb3BzOwogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwppbmRleCBhOTA0YTRjLi5lOGQ3OWU1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYworKysgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwpAQCAtMTUsNiArMTUsMTEgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInNlc3Npb24uaCIKICNpbmNsdWRlICJ0b29sLmgiCisjaW5jbHVkZSAiaGVhZGVyLmgiCisjaW5jbHVkZSAidmRzby5oIgorCisKK3N0YXRpYyBib29sIG5vX2J1aWxkaWRfY2FjaGU7CiAKIGludCBidWlsZF9pZF9fbWFya19kc29faGl0KHN0cnVjdCBwZXJmX3Rvb2wgKnRvb2wgX19tYXliZV91bnVzZWQsCiAJCQkgICB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKQEAgLTMzLDggKzM4LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsIG1hY2hpbmUsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sCi0JCQkgICAgICBzYW1wbGUtPmlwLCAmYWwpOworCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sIHNhbXBsZS0+aXAsICZhbCk7CiAKIAlpZiAoYWwubWFwICE9IE5VTEwpCiAJCWFsLm1hcC0+ZHNvLT5oaXQgPSAxOwpAQCAtMTA2LDMgKzExMCwzNDMgQEAKIAkJCSBidWlsZF9pZF9oZXgsIGJ1aWxkX2lkX2hleCArIDIpOwogCXJldHVybiBiZjsKIH0KKworI2RlZmluZSBkc29zX19mb3JfZWFjaF93aXRoX2J1aWxkX2lkKHBvcywgaGVhZCkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQlcCisJCWlmICghcG9zLT5oYXNfYnVpbGRfaWQpCQlcCisJCQljb250aW51ZTsJCVwKKwkJZWxzZQorCitzdGF0aWMgaW50IHdyaXRlX2J1aWxkaWQoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLCB1OCAqYnVpbGRfaWQsCisJCQkgcGlkX3QgcGlkLCB1MTYgbWlzYywgaW50IGZkKQoreworCWludCBlcnI7CisJc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGI7CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IG5hbWVfbGVuICsgMTsKKwlsZW4gPSBQRVJGX0FMSUdOKGxlbiwgTkFNRV9BTElHTik7CisKKwltZW1zZXQoJmIsIDAsIHNpemVvZihiKSk7CisJbWVtY3B5KCZiLmJ1aWxkX2lkLCBidWlsZF9pZCwgQlVJTERfSURfU0laRSk7CisJYi5waWQgPSBwaWQ7CisJYi5oZWFkZXIubWlzYyA9IG1pc2M7CisJYi5oZWFkZXIuc2l6ZSA9IHNpemVvZihiKSArIGxlbjsKKworCWVyciA9IHdyaXRlbihmZCwgJmIsIHNpemVvZihiKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gd3JpdGVfcGFkZGVkKGZkLCBuYW1lLCBuYW1lX2xlbiArIDEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJICAgICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAorCQkJCSAgICAgICBwaWRfdCBwaWQsIHUxNiBtaXNjLCBpbnQgZmQpCit7CisJY2hhciBubVtQQVRIX01BWF07CisJc3RydWN0IGRzbyAqcG9zOworCisJZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpIHsKKwkJaW50IGVycjsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJc2l6ZV90IG5hbWVfbGVuOworCisJCWlmICghcG9zLT5oaXQpCisJCQljb250aW51ZTsKKworCQlpZiAoZHNvX19pc192ZHNvKHBvcykpIHsKKwkJCW5hbWUgPSBwb3MtPnNob3J0X25hbWU7CisJCQluYW1lX2xlbiA9IHBvcy0+c2hvcnRfbmFtZV9sZW4gKyAxOworCQl9IGVsc2UgaWYgKGRzb19faXNfa2NvcmUocG9zKSkgeworCQkJbWFjaGluZV9fbW1hcF9uYW1lKG1hY2hpbmUsIG5tLCBzaXplb2Yobm0pKTsKKwkJCW5hbWUgPSBubTsKKwkJCW5hbWVfbGVuID0gc3RybGVuKG5tKSArIDE7CisJCX0gZWxzZSB7CisJCQluYW1lID0gcG9zLT5sb25nX25hbWU7CisJCQluYW1lX2xlbiA9IHBvcy0+bG9uZ19uYW1lX2xlbiArIDE7CisJCX0KKworCQllcnIgPSB3cml0ZV9idWlsZGlkKG5hbWUsIG5hbWVfbGVuLCBwb3MtPmJ1aWxkX2lkLAorCQkJCSAgICBwaWQsIG1pc2MsIGZkKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjaGluZV9fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgaW50IGZkKQoreworCWludCBlcnI7CisJdTE2IGttaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwsCisJICAgIHVtaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOworCisJaWYgKCFtYWNoaW5lX19pc19ob3N0KG1hY2hpbmUpKSB7CisJCWttaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUw7CisJCXVtaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9VU0VSOworCX0KKworCWVyciA9IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZSgmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCwgbWFjaGluZSwKKwkJCQkJICBtYWNoaW5lLT5waWQsIGttaXNjLCBmZCk7CisJaWYgKGVyciA9PSAwKQorCQllcnIgPSBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkLAorCQkJCQkJICBtYWNoaW5lLCBtYWNoaW5lLT5waWQsIHVtaXNjLAorCQkJCQkJICBmZCk7CisJcmV0dXJuIGVycjsKK30KKworaW50IHBlcmZfc2Vzc2lvbl9fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBpbnQgZmQpCit7CisJc3RydWN0IHJiX25vZGUgKm5kOworCWludCBlcnIgPSBtYWNoaW5lX193cml0ZV9idWlsZGlkX3RhYmxlKCZzZXNzaW9uLT5tYWNoaW5lcy5ob3N0LCBmZCk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZXNzaW9uLT5tYWNoaW5lcy5ndWVzdHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKKwkJZXJyID0gbWFjaGluZV9fd3JpdGVfYnVpbGRpZF90YWJsZShwb3MsIGZkKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZHNvc19faGl0X2FsbChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBkc28gKnBvczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQorCQlwb3MtPmhpdCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWNoaW5lX19oaXRfYWxsX2Rzb3Moc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCit7CisJaW50IGVycjsKKworCWVyciA9IF9fZHNvc19faGl0X2FsbCgmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBfX2Rzb3NfX2hpdF9hbGwoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkKTsKK30KKworaW50IGRzb3NfX2hpdF9hbGwoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisJaW50IGVycjsKKworCWVyciA9IG1hY2hpbmVfX2hpdF9hbGxfZHNvcygmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7CisKKwkJZXJyID0gbWFjaGluZV9faGl0X2FsbF9kc29zKHBvcyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGRpc2FibGVfYnVpbGRpZF9jYWNoZSh2b2lkKQoreworCW5vX2J1aWxkaWRfY2FjaGUgPSB0cnVlOworfQorCitpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfa2FsbHN5bXMsIGJvb2wgaXNfdmRzbykKK3sKKwljb25zdCBzaXplX3Qgc2l6ZSA9IFBBVEhfTUFYOworCWNoYXIgKnJlYWxuYW1lLCAqZmlsZW5hbWUgPSB6YWxsb2Moc2l6ZSksCisJICAgICAqbGlua25hbWUgPSB6YWxsb2Moc2l6ZSksICp0YXJnZXRuYW1lOworCWludCBsZW4sIGVyciA9IC0xOworCWJvb2wgc2xhc2ggPSBpc19rYWxsc3ltcyB8fCBpc192ZHNvOworCisJaWYgKGlzX2thbGxzeW1zKSB7CisJCWlmIChzeW1ib2xfY29uZi5rcHRyX3Jlc3RyaWN0KSB7CisJCQlwcl9kZWJ1ZygiTm90IGNhY2hpbmcgYSBrcHRyX3Jlc3RyaWN0J2VkIC9wcm9jL2thbGxzeW1zXG4iKTsKKwkJCWVyciA9IDA7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisJCXJlYWxuYW1lID0gKGNoYXIgKikgbmFtZTsKKwl9IGVsc2UKKwkJcmVhbG5hbWUgPSByZWFscGF0aChuYW1lLCBOVUxMKTsKKworCWlmIChyZWFsbmFtZSA9PSBOVUxMIHx8IGZpbGVuYW1lID09IE5VTEwgfHwgbGlua25hbWUgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZTsKKworCWxlbiA9IHNjbnByaW50ZihmaWxlbmFtZSwgc2l6ZSwgIiVzJXMlcyIsCisJCSAgICAgICBkZWJ1Z2Rpciwgc2xhc2ggPyAiLyIgOiAiIiwKKwkJICAgICAgIGlzX3Zkc28gPyBEU09fX05BTUVfVkRTTyA6IHJlYWxuYW1lKTsKKwlpZiAobWtkaXJfcChmaWxlbmFtZSwgMDc1NSkpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlzbnByaW50ZihmaWxlbmFtZSArIGxlbiwgc2l6ZSAtIGxlbiwgIi8lcyIsIHNidWlsZF9pZCk7CisKKwlpZiAoYWNjZXNzKGZpbGVuYW1lLCBGX09LKSkgeworCQlpZiAoaXNfa2FsbHN5bXMpIHsKKwkJCSBpZiAoY29weWZpbGUoIi9wcm9jL2thbGxzeW1zIiwgZmlsZW5hbWUpKQorCQkJCWdvdG8gb3V0X2ZyZWU7CisJCX0gZWxzZSBpZiAobGluayhyZWFsbmFtZSwgZmlsZW5hbWUpICYmIGNvcHlmaWxlKG5hbWUsIGZpbGVuYW1lKSkKKwkJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJbGVuID0gc2NucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMiLAorCQkgICAgICAgZGVidWdkaXIsIHNidWlsZF9pZCk7CisKKwlpZiAoYWNjZXNzKGxpbmtuYW1lLCBYX09LKSAmJiBta2Rpcl9wKGxpbmtuYW1lLCAwNzU1KSkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGxpbmtuYW1lICsgbGVuLCBzaXplIC0gbGVuLCAiLyVzIiwgc2J1aWxkX2lkICsgMik7CisJdGFyZ2V0bmFtZSA9IGZpbGVuYW1lICsgc3RybGVuKGRlYnVnZGlyKSAtIDU7CisJbWVtY3B5KHRhcmdldG5hbWUsICIuLi8uLiIsIDUpOworCisJaWYgKHN5bWxpbmsodGFyZ2V0bmFtZSwgbGlua25hbWUpID09IDApCisJCWVyciA9IDA7CitvdXRfZnJlZToKKwlpZiAoIWlzX2thbGxzeW1zKQorCQlmcmVlKHJlYWxuYW1lKTsKKwlmcmVlKGZpbGVuYW1lKTsKKwlmcmVlKGxpbmtuYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfYihjb25zdCB1OCAqYnVpbGRfaWQsIHNpemVfdCBidWlsZF9pZF9zaXplLAorCQkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZWJ1Z2RpciwKKwkJCQkgYm9vbCBpc19rYWxsc3ltcywgYm9vbCBpc192ZHNvKQoreworCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisKKwlidWlsZF9pZF9fc3ByaW50ZihidWlsZF9pZCwgYnVpbGRfaWRfc2l6ZSwgc2J1aWxkX2lkKTsKKworCXJldHVybiBidWlsZF9pZF9jYWNoZV9fYWRkX3Moc2J1aWxkX2lkLCBkZWJ1Z2RpciwgbmFtZSwKKwkJCQkgICAgIGlzX2thbGxzeW1zLCBpc192ZHNvKTsKK30KKworaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWNvbnN0IHNpemVfdCBzaXplID0gUEFUSF9NQVg7CisJY2hhciAqZmlsZW5hbWUgPSB6YWxsb2Moc2l6ZSksCisJICAgICAqbGlua25hbWUgPSB6YWxsb2Moc2l6ZSk7CisJaW50IGVyciA9IC0xOworCisJaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgbGlua25hbWUgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAorCQkgZGVidWdkaXIsIHNidWlsZF9pZCwgc2J1aWxkX2lkICsgMik7CisKKwlpZiAoYWNjZXNzKGxpbmtuYW1lLCBGX09LKSkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmIChyZWFkbGluayhsaW5rbmFtZSwgZmlsZW5hbWUsIHNpemUgLSAxKSA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAodW5saW5rKGxpbmtuYW1lKSkKKwkJZ290byBvdXRfZnJlZTsKKworCS8qCisJICogU2luY2UgdGhlIGxpbmsgaXMgcmVsYXRpdmUsIHdlIG11c3QgbWFrZSBpdCBhYnNvbHV0ZToKKwkgKi8KKwlzbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzLyVzIiwKKwkJIGRlYnVnZGlyLCBzYnVpbGRfaWQsIGZpbGVuYW1lKTsKKworCWlmICh1bmxpbmsobGlua25hbWUpKQorCQlnb3RvIG91dF9mcmVlOworCisJZXJyID0gMDsKK291dF9mcmVlOgorCWZyZWUoZmlsZW5hbWUpOworCWZyZWUobGlua25hbWUpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZHNvX19jYWNoZV9idWlsZF9pZChzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWJvb2wgaXNfa2FsbHN5bXMgPSBkc28tPmtlcm5lbCAmJiBkc28tPmxvbmdfbmFtZVswXSAhPSAnLyc7CisJYm9vbCBpc192ZHNvID0gZHNvX19pc192ZHNvKGRzbyk7CisJY29uc3QgY2hhciAqbmFtZSA9IGRzby0+bG9uZ19uYW1lOworCWNoYXIgbm1bUEFUSF9NQVhdOworCisJaWYgKGRzb19faXNfa2NvcmUoZHNvKSkgeworCQlpc19rYWxsc3ltcyA9IHRydWU7CisJCW1hY2hpbmVfX21tYXBfbmFtZShtYWNoaW5lLCBubSwgc2l6ZW9mKG5tKSk7CisJCW5hbWUgPSBubTsKKwl9CisJcmV0dXJuIGJ1aWxkX2lkX2NhY2hlX19hZGRfYihkc28tPmJ1aWxkX2lkLCBzaXplb2YoZHNvLT5idWlsZF9pZCksIG5hbWUsCisJCQkJICAgICBkZWJ1Z2RpciwgaXNfa2FsbHN5bXMsIGlzX3Zkc28pOworfQorCitzdGF0aWMgaW50IF9fZHNvc19fY2FjaGVfYnVpbGRfaWRzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCXN0cnVjdCBkc28gKnBvczsKKwlpbnQgZXJyID0gMDsKKworCWRzb3NfX2Zvcl9lYWNoX3dpdGhfYnVpbGRfaWQocG9zLCBoZWFkKQorCQlpZiAoZHNvX19jYWNoZV9idWlsZF9pZChwb3MsIG1hY2hpbmUsIGRlYnVnZGlyKSkKKwkJCWVyciA9IC0xOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBtYWNoaW5lX19jYWNoZV9idWlsZF9pZHMoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWludCByZXQgPSBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcygmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCwgbWFjaGluZSwKKwkJCQkJICBkZWJ1Z2Rpcik7CisJcmV0IHw9IF9fZHNvc19fY2FjaGVfYnVpbGRfaWRzKCZtYWNoaW5lLT51c2VyX2Rzb3MuaGVhZCwgbWFjaGluZSwKKwkJCQkgICAgICAgZGVidWdkaXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBwZXJmX3Nlc3Npb25fX2NhY2hlX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCByYl9ub2RlICpuZDsKKwlpbnQgcmV0OworCWNoYXIgZGVidWdkaXJbUEFUSF9NQVhdOworCisJaWYgKG5vX2J1aWxkaWRfY2FjaGUpCisJCXJldHVybiAwOworCisJc25wcmludGYoZGVidWdkaXIsIHNpemVvZihkZWJ1Z2RpciksICIlcyIsIGJ1aWxkaWRfZGlyKTsKKworCWlmIChta2RpcihkZWJ1Z2RpciwgMDc1NSkgIT0gMCAmJiBlcnJubyAhPSBFRVhJU1QpCisJCXJldHVybiAtMTsKKworCXJldCA9IG1hY2hpbmVfX2NhY2hlX2J1aWxkX2lkcygmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCwgZGVidWdkaXIpOworCisJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZXNzaW9uLT5tYWNoaW5lcy5ndWVzdHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKKwkJcmV0IHw9IG1hY2hpbmVfX2NhY2hlX2J1aWxkX2lkcyhwb3MsIGRlYnVnZGlyKTsKKwl9CisJcmV0dXJuIHJldCA/IC0xIDogMDsKK30KKworc3RhdGljIGJvb2wgbWFjaGluZV9fcmVhZF9idWlsZF9pZHMoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGJvb2wgd2l0aF9oaXRzKQoreworCWJvb2wgcmV0OworCisJcmV0ICA9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQsIHdpdGhfaGl0cyk7CisJcmV0IHw9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkLCB3aXRoX2hpdHMpOworCXJldHVybiByZXQ7Cit9CisKK2Jvb2wgcGVyZl9zZXNzaW9uX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBib29sIHdpdGhfaGl0cykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisJYm9vbCByZXQgPSBtYWNoaW5lX19yZWFkX2J1aWxkX2lkcygmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCwgd2l0aF9oaXRzKTsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7CisJCXJldCB8PSBtYWNoaW5lX19yZWFkX2J1aWxkX2lkcyhwb3MsIHdpdGhfaGl0cyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oIGIvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmgKaW5kZXggYWUzOTI1Ni4uODIzNjMxOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmgKQEAgLTE1LDQgKzE1LDE2IEBACiBpbnQgYnVpbGRfaWRfX21hcmtfZHNvX2hpdChzdHJ1Y3QgcGVyZl90b29sICp0b29sLCB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCSAgIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCQkgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CisKK2ludCBkc29zX19oaXRfYWxsKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworCitib29sIHBlcmZfc2Vzc2lvbl9fcmVhZF9idWlsZF9pZHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgYm9vbCB3aXRoX2hpdHMpOworaW50IHBlcmZfc2Vzc2lvbl9fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBpbnQgZmQpOworaW50IHBlcmZfc2Vzc2lvbl9fY2FjaGVfYnVpbGRfaWRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworCitpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfa2FsbHN5bXMsIGJvb2wgaXNfdmRzbyk7CitpbnQgYnVpbGRfaWRfY2FjaGVfX3JlbW92ZV9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIpOwordm9pZCBkaXNhYmxlX2J1aWxkaWRfY2FjaGUodm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCmluZGV4IGM4NGQzZjguLmNmNTI0YTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYworKysgYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKQEAgLTE0OSw2ICsxNDksMTAgQEAKIAkJY2FsbGNoYWluX3BhcmFtLmtleSA9IENDS0VZX0FERFJFU1M7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoIXN0cm5jbXAodmFsdWUsICJicmFuY2giLCBzdHJsZW4odmFsdWUpKSkgeworCQljYWxsY2hhaW5fcGFyYW0uYnJhbmNoX2NhbGxzdGFjayA9IDE7CisJCXJldHVybiAwOworCX0KIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTc1NCw4ICs3NTgsOCBAQAogCiAJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gfHwgc3ltYm9sX2NvbmYuY3VtdWxhdGVfY2FsbGNoYWluIHx8CiAJICAgIHNvcnRfX2hhc19wYXJlbnQpIHsKLQkJcmV0dXJuIG1hY2hpbmVfX3Jlc29sdmVfY2FsbGNoYWluKGFsLT5tYWNoaW5lLCBldnNlbCwgYWwtPnRocmVhZCwKLQkJCQkJCSAgc2FtcGxlLCBwYXJlbnQsIGFsLCBtYXhfc3RhY2spOworCQlyZXR1cm4gdGhyZWFkX19yZXNvbHZlX2NhbGxjaGFpbihhbC0+dGhyZWFkLCBldnNlbCwgc2FtcGxlLAorCQkJCQkJIHBhcmVudCwgYWwsIG1heF9zdGFjayk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODA4LDMgKzgxMiwzMiBAQAogb3V0OgogCXJldHVybiAxOwogfQorCitjaGFyICpjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjbCwKKwkJCSAgICAgICBjaGFyICpiZiwgc2l6ZV90IGJmc2l6ZSwgYm9vbCBzaG93X2RzbykKK3sKKwlpbnQgcHJpbnRlZDsKKworCWlmIChjbC0+bXMuc3ltKSB7CisJCWlmIChjYWxsY2hhaW5fcGFyYW0ua2V5ID09IENDS0VZX0FERFJFU1MgJiYKKwkJICAgIGNsLT5tcy5tYXAgJiYgIWNsLT5zcmNsaW5lKQorCQkJY2wtPnNyY2xpbmUgPSBnZXRfc3JjbGluZShjbC0+bXMubWFwLT5kc28sCisJCQkJCQkgIG1hcF9fcmlwXzJvYmpkdW1wKGNsLT5tcy5tYXAsCisJCQkJCQkJCSAgICBjbC0+aXApLAorCQkJCQkJICBjbC0+bXMuc3ltLCBmYWxzZSk7CisJCWlmIChjbC0+c3JjbGluZSkKKwkJCXByaW50ZWQgPSBzY25wcmludGYoYmYsIGJmc2l6ZSwgIiVzICVzIiwKKwkJCQkJY2wtPm1zLnN5bS0+bmFtZSwgY2wtPnNyY2xpbmUpOworCQllbHNlCisJCQlwcmludGVkID0gc2NucHJpbnRmKGJmLCBiZnNpemUsICIlcyIsIGNsLT5tcy5zeW0tPm5hbWUpOworCX0gZWxzZQorCQlwcmludGVkID0gc2NucHJpbnRmKGJmLCBiZnNpemUsICIlIyIgUFJJeDY0LCBjbC0+aXApOworCisJaWYgKHNob3dfZHNvKQorCQlzY25wcmludGYoYmYgKyBwcmludGVkLCBiZnNpemUgLSBwcmludGVkLCAiICVzIiwKKwkJCSAgY2wtPm1zLm1hcCA/CisJCQkgIGNsLT5tcy5tYXAtPmRzby0+c2hvcnRfbmFtZSA6CisJCQkgICJ1bmtub3duIik7CisKKwlyZXR1cm4gYmY7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmggYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmgKaW5kZXggOTRjZmVmZC4uZGJjMDhjZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaApAQCAtNjMsNiArNjMsNyBAQAogCXNvcnRfY2hhaW5fZnVuY190CXNvcnQ7CiAJZW51bSBjaGFpbl9vcmRlcglvcmRlcjsKIAllbnVtIGNoYWluX2tleQkJa2V5OworCWJvb2wJCQlicmFuY2hfY2FsbHN0YWNrOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBjYWxsY2hhaW5fcGFyYW0gY2FsbGNoYWluX3BhcmFtOwpAQCAtNzAsNiArNzEsNyBAQAogc3RydWN0IGNhbGxjaGFpbl9saXN0IHsKIAl1NjQJCQlpcDsKIAlzdHJ1Y3QgbWFwX3N5bWJvbAltczsKKwljaGFyCQkgICAgICAgKnNyY2xpbmU7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogfTsKIApAQCAtMTg0LDE1ICsxODYsMTYgQEAKIH0KIAogI2lmZGVmIEhBVkVfU0tJUF9DQUxMQ0hBSU5fSURYCi1leHRlcm4gaW50IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbik7CitleHRlcm4gaW50IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4pOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHN0cnVjdCBtYWNoaW5lICptYWNoaW5lIF9fbWF5YmVfdW51c2VkLAotCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fbWF5YmVfdW51c2VkLAorc3RhdGljIGlubGluZSBpbnQgYXJjaF9za2lwX2NhbGxjaGFpbl9pZHgoc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fbWF5YmVfdW51c2VkLAogCQkJc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4gX19tYXliZV91bnVzZWQpCiB7CiAJcmV0dXJuIC0xOwogfQogI2VuZGlmCiAKK2NoYXIgKmNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNsLAorCQkJICAgICAgIGNoYXIgKmJmLCBzaXplX3QgYmZzaXplLCBib29sIHNob3dfZHNvKTsKKwogI2VuZGlmCS8qIF9fUEVSRl9DQUxMQ0hBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NvbW0uaCBiL3Rvb2xzL3BlcmYvdXRpbC9jb21tLmgKaW5kZXggNTFjMTBhYi4uNzFjOWMzOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NvbW0uaAorKysgYi90b29scy9wZXJmL3V0aWwvY29tbS5oCkBAIC0xMiw2ICsxMiwxMCBAQAogCXU2NCBzdGFydDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJYm9vbCBleGVjOworCXVuaW9uIHsgLyogVG9vbCBzcGVjaWZpYyBhcmVhICovCisJCXZvaWQJKnByaXY7CisJCXU2NAlkYl9pZDsKKwl9OwogfTsKIAogdm9pZCBjb21tX19mcmVlKHN0cnVjdCBjb21tICpjb21tKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kYi1leHBvcnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kYi1leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODFkYWUzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RiLWV4cG9ydC5jCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogZGItZXhwb3J0LmM6IFN1cHBvcnQgZm9yIGV4cG9ydGluZyBkYXRhIHN1aXRhYmxlIGZvciBpbXBvcnQgdG8gYSBkYXRhYmFzZQorICogQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZXZzZWwuaCIKKyNpbmNsdWRlICJtYWNoaW5lLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAiY29tbS5oIgorI2luY2x1ZGUgInN5bWJvbC5oIgorI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInRocmVhZC1zdGFjay5oIgorI2luY2x1ZGUgImRiLWV4cG9ydC5oIgorCitzdHJ1Y3QgZGVmZXJyZWRfZXhwb3J0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJc3RydWN0IGNvbW0gKmNvbW07Cit9OworCitzdGF0aWMgaW50IGRiX2V4cG9ydF9fZGVmZXJyZWQoc3RydWN0IGRiX2V4cG9ydCAqZGJlKQoreworCXN0cnVjdCBkZWZlcnJlZF9leHBvcnQgKmRlOworCWludCBlcnI7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRiZS0+ZGVmZXJyZWQpKSB7CisJCWRlID0gbGlzdF9lbnRyeShkYmUtPmRlZmVycmVkLm5leHQsIHN0cnVjdCBkZWZlcnJlZF9leHBvcnQsCisJCQkJbm9kZSk7CisJCWVyciA9IGRiZS0+ZXhwb3J0X2NvbW0oZGJlLCBkZS0+Y29tbSk7CisJCWxpc3RfZGVsKCZkZS0+bm9kZSk7CisJCWZyZWUoZGUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGJfZXhwb3J0X19mcmVlX2RlZmVycmVkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSkKK3sKKwlzdHJ1Y3QgZGVmZXJyZWRfZXhwb3J0ICpkZTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmZGJlLT5kZWZlcnJlZCkpIHsKKwkJZGUgPSBsaXN0X2VudHJ5KGRiZS0+ZGVmZXJyZWQubmV4dCwgc3RydWN0IGRlZmVycmVkX2V4cG9ydCwKKwkJCQlub2RlKTsKKwkJbGlzdF9kZWwoJmRlLT5ub2RlKTsKKwkJZnJlZShkZSk7CisJfQorfQorCitzdGF0aWMgaW50IGRiX2V4cG9ydF9fZGVmZXJfY29tbShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tKQoreworCXN0cnVjdCBkZWZlcnJlZF9leHBvcnQgKmRlOworCisJZGUgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZWZlcnJlZF9leHBvcnQpKTsKKwlpZiAoIWRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRlLT5jb21tID0gY29tbTsKKwlsaXN0X2FkZF90YWlsKCZkZS0+bm9kZSwgJmRiZS0+ZGVmZXJyZWQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkYl9leHBvcnRfX2luaXQoc3RydWN0IGRiX2V4cG9ydCAqZGJlKQoreworCW1lbXNldChkYmUsIDAsIHNpemVvZihzdHJ1Y3QgZGJfZXhwb3J0KSk7CisJSU5JVF9MSVNUX0hFQUQoJmRiZS0+ZGVmZXJyZWQpOworCXJldHVybiAwOworfQorCitpbnQgZGJfZXhwb3J0X19mbHVzaChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUpCit7CisJcmV0dXJuIGRiX2V4cG9ydF9fZGVmZXJyZWQoZGJlKTsKK30KKwordm9pZCBkYl9leHBvcnRfX2V4aXQoc3RydWN0IGRiX2V4cG9ydCAqZGJlKQoreworCWRiX2V4cG9ydF9fZnJlZV9kZWZlcnJlZChkYmUpOworCWNhbGxfcmV0dXJuX3Byb2Nlc3Nvcl9fZnJlZShkYmUtPmNycCk7CisJZGJlLT5jcnAgPSBOVUxMOworfQorCitpbnQgZGJfZXhwb3J0X19ldnNlbChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkKK3sKKwlpZiAoZXZzZWwtPmRiX2lkKQorCQlyZXR1cm4gMDsKKworCWV2c2VsLT5kYl9pZCA9ICsrZGJlLT5ldnNlbF9sYXN0X2RiX2lkOworCisJaWYgKGRiZS0+ZXhwb3J0X2V2c2VsKQorCQlyZXR1cm4gZGJlLT5leHBvcnRfZXZzZWwoZGJlLCBldnNlbCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fbWFjaGluZShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCWlmIChtYWNoaW5lLT5kYl9pZCkKKwkJcmV0dXJuIDA7CisKKwltYWNoaW5lLT5kYl9pZCA9ICsrZGJlLT5tYWNoaW5lX2xhc3RfZGJfaWQ7CisKKwlpZiAoZGJlLT5leHBvcnRfbWFjaGluZSkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X21hY2hpbmUoZGJlLCBtYWNoaW5lKTsKKworCXJldHVybiAwOworfQorCitpbnQgZGJfZXhwb3J0X190aHJlYWQoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCSAgICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBzdHJ1Y3QgY29tbSAqY29tbSkKK3sKKwl1NjQgbWFpbl90aHJlYWRfZGJfaWQgPSAwOworCWludCBlcnI7CisKKwlpZiAodGhyZWFkLT5kYl9pZCkKKwkJcmV0dXJuIDA7CisKKwl0aHJlYWQtPmRiX2lkID0gKytkYmUtPnRocmVhZF9sYXN0X2RiX2lkOworCisJaWYgKHRocmVhZC0+cGlkXyAhPSAtMSkgeworCQlzdHJ1Y3QgdGhyZWFkICptYWluX3RocmVhZDsKKworCQlpZiAodGhyZWFkLT5waWRfID09IHRocmVhZC0+dGlkKSB7CisJCQltYWluX3RocmVhZCA9IHRocmVhZDsKKwkJfSBlbHNlIHsKKwkJCW1haW5fdGhyZWFkID0gbWFjaGluZV9fZmluZG5ld190aHJlYWQobWFjaGluZSwKKwkJCQkJCQkgICAgICB0aHJlYWQtPnBpZF8sCisJCQkJCQkJICAgICAgdGhyZWFkLT5waWRfKTsKKwkJCWlmICghbWFpbl90aHJlYWQpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQllcnIgPSBkYl9leHBvcnRfX3RocmVhZChkYmUsIG1haW5fdGhyZWFkLCBtYWNoaW5lLAorCQkJCQkJY29tbSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQlpZiAoY29tbSkgeworCQkJCWVyciA9IGRiX2V4cG9ydF9fY29tbV90aHJlYWQoZGJlLCBjb21tLCB0aHJlYWQpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KKwkJbWFpbl90aHJlYWRfZGJfaWQgPSBtYWluX3RocmVhZC0+ZGJfaWQ7CisJfQorCisJaWYgKGRiZS0+ZXhwb3J0X3RocmVhZCkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X3RocmVhZChkYmUsIHRocmVhZCwgbWFpbl90aHJlYWRfZGJfaWQsCisJCQkJCSAgbWFjaGluZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fY29tbShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tLAorCQkgICAgc3RydWN0IHRocmVhZCAqbWFpbl90aHJlYWQpCit7CisJaW50IGVycjsKKworCWlmIChjb21tLT5kYl9pZCkKKwkJcmV0dXJuIDA7CisKKwljb21tLT5kYl9pZCA9ICsrZGJlLT5jb21tX2xhc3RfZGJfaWQ7CisKKwlpZiAoZGJlLT5leHBvcnRfY29tbSkgeworCQlpZiAobWFpbl90aHJlYWQtPmNvbW1fc2V0KQorCQkJZXJyID0gZGJlLT5leHBvcnRfY29tbShkYmUsIGNvbW0pOworCQllbHNlCisJCQllcnIgPSBkYl9leHBvcnRfX2RlZmVyX2NvbW0oZGJlLCBjb21tKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGRiX2V4cG9ydF9fY29tbV90aHJlYWQoZGJlLCBjb21tLCBtYWluX3RocmVhZCk7Cit9CisKK2ludCBkYl9leHBvcnRfX2NvbW1fdGhyZWFkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGNvbW0gKmNvbW0sCisJCQkgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJdTY0IGRiX2lkOworCisJZGJfaWQgPSArK2RiZS0+Y29tbV90aHJlYWRfbGFzdF9kYl9pZDsKKworCWlmIChkYmUtPmV4cG9ydF9jb21tX3RocmVhZCkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2NvbW1fdGhyZWFkKGRiZSwgZGJfaWQsIGNvbW0sIHRocmVhZCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fZHNvKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGRzbyAqZHNvLAorCQkgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlpZiAoZHNvLT5kYl9pZCkKKwkJcmV0dXJuIDA7CisKKwlkc28tPmRiX2lkID0gKytkYmUtPmRzb19sYXN0X2RiX2lkOworCisJaWYgKGRiZS0+ZXhwb3J0X2RzbykKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2RzbyhkYmUsIGRzbywgbWFjaGluZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fc3ltYm9sKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHN5bWJvbCAqc3ltLAorCQkgICAgICBzdHJ1Y3QgZHNvICpkc28pCit7CisJdTY0ICpzeW1fZGJfaWQgPSBzeW1ib2xfX3ByaXYoc3ltKTsKKworCWlmICgqc3ltX2RiX2lkKQorCQlyZXR1cm4gMDsKKworCSpzeW1fZGJfaWQgPSArK2RiZS0+c3ltYm9sX2xhc3RfZGJfaWQ7CisKKwlpZiAoZGJlLT5leHBvcnRfc3ltYm9sKQorCQlyZXR1cm4gZGJlLT5leHBvcnRfc3ltYm9sKGRiZSwgc3ltLCBkc28pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkICpnZXRfbWFpbl90aHJlYWQoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlpZiAodGhyZWFkLT5waWRfID09IHRocmVhZC0+dGlkKQorCQlyZXR1cm4gdGhyZWFkOworCisJaWYgKHRocmVhZC0+cGlkXyA9PSAtMSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gbWFjaGluZV9fZmluZF90aHJlYWQobWFjaGluZSwgdGhyZWFkLT5waWRfLCB0aHJlYWQtPnBpZF8pOworfQorCitzdGF0aWMgaW50IGRiX2lkc19mcm9tX2FsKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAorCQkJICB1NjQgKmRzb19kYl9pZCwgdTY0ICpzeW1fZGJfaWQsIHU2NCAqb2Zmc2V0KQoreworCWludCBlcnI7CisKKwlpZiAoYWwtPm1hcCkgeworCQlzdHJ1Y3QgZHNvICpkc28gPSBhbC0+bWFwLT5kc287CisKKwkJZXJyID0gZGJfZXhwb3J0X19kc28oZGJlLCBkc28sIGFsLT5tYWNoaW5lKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCSpkc29fZGJfaWQgPSBkc28tPmRiX2lkOworCisJCWlmICghYWwtPnN5bSkgeworCQkJYWwtPnN5bSA9IHN5bWJvbF9fbmV3KGFsLT5hZGRyLCAwLCAwLCAidW5rbm93biIpOworCQkJaWYgKGFsLT5zeW0pCisJCQkJc3ltYm9sc19faW5zZXJ0KCZkc28tPnN5bWJvbHNbYWwtPm1hcC0+dHlwZV0sCisJCQkJCQlhbC0+c3ltKTsKKwkJfQorCisJCWlmIChhbC0+c3ltKSB7CisJCQl1NjQgKmRiX2lkID0gc3ltYm9sX19wcml2KGFsLT5zeW0pOworCisJCQllcnIgPSBkYl9leHBvcnRfX3N5bWJvbChkYmUsIGFsLT5zeW0sIGRzbyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQkqc3ltX2RiX2lkID0gKmRiX2lkOworCQkJKm9mZnNldCA9IGFsLT5hZGRyIC0gYWwtPnN5bS0+c3RhcnQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fYnJhbmNoX3R5cGUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCB1MzIgYnJhbmNoX3R5cGUsCisJCQkgICBjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChkYmUtPmV4cG9ydF9icmFuY2hfdHlwZSkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2JyYW5jaF90eXBlKGRiZSwgYnJhbmNoX3R5cGUsIG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkYl9leHBvcnRfX3NhbXBsZShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAorCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKK3sKKwlzdHJ1Y3QgZXhwb3J0X3NhbXBsZSBlcyA9IHsKKwkJLmV2ZW50ID0gZXZlbnQsCisJCS5zYW1wbGUgPSBzYW1wbGUsCisJCS5ldnNlbCA9IGV2c2VsLAorCQkudGhyZWFkID0gdGhyZWFkLAorCQkuYWwgPSBhbCwKKwl9OworCXN0cnVjdCB0aHJlYWQgKm1haW5fdGhyZWFkOworCXN0cnVjdCBjb21tICpjb21tID0gTlVMTDsKKwlpbnQgZXJyOworCisJZXJyID0gZGJfZXhwb3J0X19ldnNlbChkYmUsIGV2c2VsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZGJfZXhwb3J0X19tYWNoaW5lKGRiZSwgYWwtPm1hY2hpbmUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltYWluX3RocmVhZCA9IGdldF9tYWluX3RocmVhZChhbC0+bWFjaGluZSwgdGhyZWFkKTsKKwlpZiAobWFpbl90aHJlYWQpCisJCWNvbW0gPSBtYWNoaW5lX190aHJlYWRfZXhlY19jb21tKGFsLT5tYWNoaW5lLCBtYWluX3RocmVhZCk7CisKKwllcnIgPSBkYl9leHBvcnRfX3RocmVhZChkYmUsIHRocmVhZCwgYWwtPm1hY2hpbmUsIGNvbW0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoY29tbSkgeworCQllcnIgPSBkYl9leHBvcnRfX2NvbW0oZGJlLCBjb21tLCBtYWluX3RocmVhZCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcy5jb21tX2RiX2lkID0gY29tbS0+ZGJfaWQ7CisJfQorCisJZXMuZGJfaWQgPSArK2RiZS0+c2FtcGxlX2xhc3RfZGJfaWQ7CisKKwllcnIgPSBkYl9pZHNfZnJvbV9hbChkYmUsIGFsLCAmZXMuZHNvX2RiX2lkLCAmZXMuc3ltX2RiX2lkLCAmZXMub2Zmc2V0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKChldnNlbC0+YXR0ci5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpICYmCisJICAgIHNhbXBsZV9hZGRyX2NvcnJlbGF0ZXNfc3ltKCZldnNlbC0+YXR0cikpIHsKKwkJc3RydWN0IGFkZHJfbG9jYXRpb24gYWRkcl9hbDsKKworCQlwZXJmX2V2ZW50X19wcmVwcm9jZXNzX3NhbXBsZV9hZGRyKGV2ZW50LCBzYW1wbGUsIHRocmVhZCwgJmFkZHJfYWwpOworCQllcnIgPSBkYl9pZHNfZnJvbV9hbChkYmUsICZhZGRyX2FsLCAmZXMuYWRkcl9kc29fZGJfaWQsCisJCQkJICAgICAmZXMuYWRkcl9zeW1fZGJfaWQsICZlcy5hZGRyX29mZnNldCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAoZGJlLT5jcnApIHsKKwkJCWVyciA9IHRocmVhZF9zdGFja19fcHJvY2Vzcyh0aHJlYWQsIGNvbW0sIHNhbXBsZSwgYWwsCisJCQkJCQkgICAgJmFkZHJfYWwsIGVzLmRiX2lkLAorCQkJCQkJICAgIGRiZS0+Y3JwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWlmIChkYmUtPmV4cG9ydF9zYW1wbGUpCisJCXJldHVybiBkYmUtPmV4cG9ydF9zYW1wbGUoZGJlLCAmZXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiBicmFuY2hfdHlwZTsKKwljb25zdCBjaGFyICpuYW1lOworfSBicmFuY2hfdHlwZXNbXSA9IHsKKwl7MCwgIm5vIGJyYW5jaCJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX0NBTEwsICJjYWxsIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfUkVUVVJOLCAicmV0dXJuIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfQ09ORElUSU9OQUwsICJjb25kaXRpb25hbCBqdW1wIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0gsICJ1bmNvbmRpdGlvbmFsIGp1bXAifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19DQUxMIHwgUEVSRl9JUF9GTEFHX0lOVEVSUlVQVCwKKwkgInNvZnR3YXJlIGludGVycnVwdCJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX1JFVFVSTiB8IFBFUkZfSVBfRkxBR19JTlRFUlJVUFQsCisJICJyZXR1cm4gZnJvbSBpbnRlcnJ1cHQifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19DQUxMIHwgUEVSRl9JUF9GTEFHX1NZU0NBTExSRVQsCisJICJzeXN0ZW0gY2FsbCJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX1JFVFVSTiB8IFBFUkZfSVBfRkxBR19TWVNDQUxMUkVULAorCSAicmV0dXJuIGZyb20gc3lzdGVtIGNhbGwifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19BU1lOQywgImFzeW5jaHJvbm91cyBicmFuY2gifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19DQUxMIHwgUEVSRl9JUF9GTEFHX0FTWU5DIHwKKwkgUEVSRl9JUF9GTEFHX0lOVEVSUlVQVCwgImhhcmR3YXJlIGludGVycnVwdCJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX1RYX0FCT1JULCAidHJhbnNhY3Rpb24gYWJvcnQifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19UUkFDRV9CRUdJTiwgInRyYWNlIGJlZ2luIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfVFJBQ0VfRU5ELCAidHJhY2UgZW5kIn0sCisJezAsIE5VTEx9Cit9OworCitpbnQgZGJfZXhwb3J0X19icmFuY2hfdHlwZXMoc3RydWN0IGRiX2V4cG9ydCAqZGJlKQoreworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgYnJhbmNoX3R5cGVzW2ldLm5hbWUgOyBpKyspIHsKKwkJZXJyID0gZGJfZXhwb3J0X19icmFuY2hfdHlwZShkYmUsIGJyYW5jaF90eXBlc1tpXS5icmFuY2hfdHlwZSwKKwkJCQkJICAgICBicmFuY2hfdHlwZXNbaV0ubmFtZSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGVycjsKK30KKworaW50IGRiX2V4cG9ydF9fY2FsbF9wYXRoKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGNhbGxfcGF0aCAqY3ApCit7CisJaW50IGVycjsKKworCWlmIChjcC0+ZGJfaWQpCisJCXJldHVybiAwOworCisJaWYgKGNwLT5wYXJlbnQpIHsKKwkJZXJyID0gZGJfZXhwb3J0X19jYWxsX3BhdGgoZGJlLCBjcC0+cGFyZW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJY3AtPmRiX2lkID0gKytkYmUtPmNhbGxfcGF0aF9sYXN0X2RiX2lkOworCisJaWYgKGRiZS0+ZXhwb3J0X2NhbGxfcGF0aCkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2NhbGxfcGF0aChkYmUsIGNwKTsKKworCXJldHVybiAwOworfQorCitpbnQgZGJfZXhwb3J0X19jYWxsX3JldHVybihzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjYWxsX3JldHVybiAqY3IpCit7CisJaW50IGVycjsKKworCWlmIChjci0+ZGJfaWQpCisJCXJldHVybiAwOworCisJZXJyID0gZGJfZXhwb3J0X19jYWxsX3BhdGgoZGJlLCBjci0+Y3ApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwljci0+ZGJfaWQgPSArK2RiZS0+Y2FsbF9yZXR1cm5fbGFzdF9kYl9pZDsKKworCWlmIChkYmUtPmV4cG9ydF9jYWxsX3JldHVybikKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2NhbGxfcmV0dXJuKGRiZSwgY3IpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGItZXhwb3J0LmggYi90b29scy9wZXJmL3V0aWwvZGItZXhwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiZDIyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kYi1leHBvcnQuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIGRiLWV4cG9ydC5oOiBTdXBwb3J0IGZvciBleHBvcnRpbmcgZGF0YSBzdWl0YWJsZSBmb3IgaW1wb3J0IHRvIGEgZGF0YWJhc2UKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fUEVSRl9EQl9FWFBPUlRfSAorI2RlZmluZSBfX1BFUkZfREJfRVhQT1JUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgcGVyZl9ldnNlbDsKK3N0cnVjdCBtYWNoaW5lOworc3RydWN0IHRocmVhZDsKK3N0cnVjdCBjb21tOworc3RydWN0IGRzbzsKK3N0cnVjdCBwZXJmX3NhbXBsZTsKK3N0cnVjdCBhZGRyX2xvY2F0aW9uOworc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvcjsKK3N0cnVjdCBjYWxsX3BhdGg7CitzdHJ1Y3QgY2FsbF9yZXR1cm47CisKK3N0cnVjdCBleHBvcnRfc2FtcGxlIHsKKwl1bmlvbiBwZXJmX2V2ZW50CSpldmVudDsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGUJKnNhbXBsZTsKKwlzdHJ1Y3QgcGVyZl9ldnNlbAkqZXZzZWw7CisJc3RydWN0IHRocmVhZAkJKnRocmVhZDsKKwlzdHJ1Y3QgYWRkcl9sb2NhdGlvbgkqYWw7CisJdTY0CQkJZGJfaWQ7CisJdTY0CQkJY29tbV9kYl9pZDsKKwl1NjQJCQlkc29fZGJfaWQ7CisJdTY0CQkJc3ltX2RiX2lkOworCXU2NAkJCW9mZnNldDsgLyogaXAgb2Zmc2V0IGZyb20gc3ltYm9sIHN0YXJ0ICovCisJdTY0CQkJYWRkcl9kc29fZGJfaWQ7CisJdTY0CQkJYWRkcl9zeW1fZGJfaWQ7CisJdTY0CQkJYWRkcl9vZmZzZXQ7IC8qIGFkZHIgb2Zmc2V0IGZyb20gc3ltYm9sIHN0YXJ0ICovCit9OworCitzdHJ1Y3QgZGJfZXhwb3J0IHsKKwlpbnQgKCpleHBvcnRfZXZzZWwpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKTsKKwlpbnQgKCpleHBvcnRfbWFjaGluZSkoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CisJaW50ICgqZXhwb3J0X3RocmVhZCkoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCQkgICAgIHU2NCBtYWluX3RocmVhZF9kYl9pZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOworCWludCAoKmV4cG9ydF9jb21tKShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tKTsKKwlpbnQgKCpleHBvcnRfY29tbV90aHJlYWQpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgdTY0IGRiX2lkLAorCQkJCSAgc3RydWN0IGNvbW0gKmNvbW0sIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisJaW50ICgqZXhwb3J0X2Rzbykoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgZHNvICpkc28sCisJCQkgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKKwlpbnQgKCpleHBvcnRfc3ltYm9sKShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBzeW1ib2wgKnN5bSwKKwkJCSAgICAgc3RydWN0IGRzbyAqZHNvKTsKKwlpbnQgKCpleHBvcnRfYnJhbmNoX3R5cGUpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgdTMyIGJyYW5jaF90eXBlLAorCQkJCSAgY29uc3QgY2hhciAqbmFtZSk7CisJaW50ICgqZXhwb3J0X3NhbXBsZSkoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgZXhwb3J0X3NhbXBsZSAqZXMpOworCWludCAoKmV4cG9ydF9jYWxsX3BhdGgpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGNhbGxfcGF0aCAqY3ApOworCWludCAoKmV4cG9ydF9jYWxsX3JldHVybikoc3RydWN0IGRiX2V4cG9ydCAqZGJlLAorCQkJCSAgc3RydWN0IGNhbGxfcmV0dXJuICpjcik7CisJc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwOworCXU2NCBldnNlbF9sYXN0X2RiX2lkOworCXU2NCBtYWNoaW5lX2xhc3RfZGJfaWQ7CisJdTY0IHRocmVhZF9sYXN0X2RiX2lkOworCXU2NCBjb21tX2xhc3RfZGJfaWQ7CisJdTY0IGNvbW1fdGhyZWFkX2xhc3RfZGJfaWQ7CisJdTY0IGRzb19sYXN0X2RiX2lkOworCXU2NCBzeW1ib2xfbGFzdF9kYl9pZDsKKwl1NjQgc2FtcGxlX2xhc3RfZGJfaWQ7CisJdTY0IGNhbGxfcGF0aF9sYXN0X2RiX2lkOworCXU2NCBjYWxsX3JldHVybl9sYXN0X2RiX2lkOworCXN0cnVjdCBsaXN0X2hlYWQgZGVmZXJyZWQ7Cit9OworCitpbnQgZGJfZXhwb3J0X19pbml0KHN0cnVjdCBkYl9leHBvcnQgKmRiZSk7CitpbnQgZGJfZXhwb3J0X19mbHVzaChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUpOwordm9pZCBkYl9leHBvcnRfX2V4aXQoc3RydWN0IGRiX2V4cG9ydCAqZGJlKTsKK2ludCBkYl9leHBvcnRfX2V2c2VsKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKTsKK2ludCBkYl9leHBvcnRfX21hY2hpbmUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CitpbnQgZGJfZXhwb3J0X190aHJlYWQoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCSAgICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBzdHJ1Y3QgY29tbSAqY29tbSk7CitpbnQgZGJfZXhwb3J0X19jb21tKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGNvbW0gKmNvbW0sCisJCSAgICBzdHJ1Y3QgdGhyZWFkICptYWluX3RocmVhZCk7CitpbnQgZGJfZXhwb3J0X19jb21tX3RocmVhZChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKK2ludCBkYl9leHBvcnRfX2RzbyhzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBkc28gKmRzbywKKwkJICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOworaW50IGRiX2V4cG9ydF9fc3ltYm9sKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHN5bWJvbCAqc3ltLAorCQkgICAgICBzdHJ1Y3QgZHNvICpkc28pOworaW50IGRiX2V4cG9ydF9fYnJhbmNoX3R5cGUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCB1MzIgYnJhbmNoX3R5cGUsCisJCQkgICBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBkYl9leHBvcnRfX3NhbXBsZShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAorCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7CisKK2ludCBkYl9leHBvcnRfX2JyYW5jaF90eXBlcyhzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUpOworCitpbnQgZGJfZXhwb3J0X19jYWxsX3BhdGgoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgY2FsbF9wYXRoICpjcCk7CitpbnQgZGJfZXhwb3J0X19jYWxsX3JldHVybihzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjYWxsX3JldHVybiAqY3IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKaW5kZXggYmEzNTdmMy4uYWQ2MGIyZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKQEAgLTE5LDEzICsxOSwxNCBAQAogaW50IHZlcmJvc2U7CiBib29sIGR1bXBfdHJhY2UgPSBmYWxzZSwgcXVpZXQgPSBmYWxzZTsKIGludCBkZWJ1Z19vcmRlcmVkX2V2ZW50czsKK3N0YXRpYyBpbnQgcmVkaXJlY3RfdG9fc3RkZXJyOwogCiBzdGF0aWMgaW50IF9lcHJpbnRmKGludCBsZXZlbCwgaW50IHZhciwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAodmFyID49IGxldmVsKSB7Ci0JCWlmICh1c2VfYnJvd3NlciA+PSAxKQorCQlpZiAodXNlX2Jyb3dzZXIgPj0gMSAmJiAhcmVkaXJlY3RfdG9fc3RkZXJyKQogCQkJdWlfaGVscGxpbmVfX3ZzaG93KGZtdCwgYXJncyk7CiAJCWVsc2UKIAkJCXJldCA9IHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmdzKTsKQEAgLTE0NSw2ICsxNDYsNyBAQAogfSBkZWJ1Z192YXJpYWJsZXNbXSA9IHsKIAl7IC5uYW1lID0gInZlcmJvc2UiLAkJLnB0ciA9ICZ2ZXJib3NlIH0sCiAJeyAubmFtZSA9ICJvcmRlcmVkLWV2ZW50cyIsCS5wdHIgPSAmZGVidWdfb3JkZXJlZF9ldmVudHN9LAorCXsgLm5hbWUgPSAic3RkZXJyIiwJCS5wdHIgPSAmcmVkaXJlY3RfdG9fc3RkZXJyfSwKIAl7IC5uYW1lID0gTlVMTCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Rzby5jIGIvdG9vbHMvcGVyZi91dGlsL2Rzby5jCmluZGV4IDAyNDdhY2YuLjQ1YmU5NDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kc28uYworKysgYi90b29scy9wZXJmL3V0aWwvZHNvLmMKQEAgLTIxLDggKzIxLDEwIEBACiAJCVtEU09fQklOQVJZX1RZUEVfX0JVSUxESURfREVCVUdJTkZPXQkJPSAnYicsCiAJCVtEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0RTT10JCT0gJ2QnLAogCQlbRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFXQkJPSAnSycsCisJCVtEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0tNT0RVTEVfQ09NUF0JPSAnbScsCiAJCVtEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tBTExTWU1TXQkJPSAnZycsCiAJCVtEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEVdCQk9ICdHJywKKwkJW0RTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRV9DT01QXQkJPSAnTScsCiAJCVtEU09fQklOQVJZX1RZUEVfX0dVRVNUX1ZNTElOVVhdCQk9ICdWJywKIAl9OwogCkBAIC0xMTIsMTEgKzExNCwxMyBAQAogCQlicmVhazsKIAogCWNhc2UgRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFOgorCWNhc2UgRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVA6CiAJCXBhdGhfX2pvaW4zKGZpbGVuYW1lLCBzaXplLCBzeW1ib2xfY29uZi5zeW1mcywKIAkJCSAgICByb290X2RpciwgZHNvLT5sb25nX25hbWUpOwogCQlicmVhazsKIAogCWNhc2UgRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFOgorCWNhc2UgRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFX0NPTVA6CiAJCV9fc3ltYm9sX19qb2luX3N5bWZzKGZpbGVuYW1lLCBzaXplLCBkc28tPmxvbmdfbmFtZSk7CiAJCWJyZWFrOwogCkBAIC0xMzcsNiArMTQxLDczIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY29uc3QgY2hhciAqZm10OworCWludCAoKmRlY29tcHJlc3MpKGNvbnN0IGNoYXIgKmlucHV0LCBpbnQgb3V0cHV0KTsKK30gY29tcHJlc3Npb25zW10gPSB7CisjaWZkZWYgSEFWRV9aTElCX1NVUFBPUlQKKwl7ICJneiIsIGd6aXBfZGVjb21wcmVzc190b19maWxlIH0sCisjZW5kaWYKKwl7IE5VTEwsIE5VTEwgfSwKK307CisKK2Jvb2wgaXNfc3VwcG9ydGVkX2NvbXByZXNzaW9uKGNvbnN0IGNoYXIgKmV4dCkKK3sKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgY29tcHJlc3Npb25zW2ldLmZtdDsgaSsrKSB7CisJCWlmICghc3RyY21wKGV4dCwgY29tcHJlc3Npb25zW2ldLmZtdCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitib29sIGlzX2ttb2R1bGVfZXh0ZW5zaW9uKGNvbnN0IGNoYXIgKmV4dCkKK3sKKwlpZiAoc3RybmNtcChleHQsICJrbyIsIDIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoZXh0WzJdID09ICdcMCcgfHwgKGV4dFsyXSA9PSAnLicgJiYgaXNfc3VwcG9ydGVkX2NvbXByZXNzaW9uKGV4dCszKSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitib29sIGlzX2tlcm5lbF9tb2R1bGUoY29uc3QgY2hhciAqcGF0aG5hbWUsIGJvb2wgKmNvbXByZXNzZWQpCit7CisJY29uc3QgY2hhciAqZXh0ID0gc3RycmNocihwYXRobmFtZSwgJy4nKTsKKworCWlmIChleHQgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGlzX3N1cHBvcnRlZF9jb21wcmVzc2lvbihleHQgKyAxKSkgeworCQlpZiAoY29tcHJlc3NlZCkKKwkJCSpjb21wcmVzc2VkID0gdHJ1ZTsKKwkJZXh0IC09IDM7CisJfSBlbHNlIGlmIChjb21wcmVzc2VkKQorCQkqY29tcHJlc3NlZCA9IGZhbHNlOworCisJcmV0dXJuIGlzX2ttb2R1bGVfZXh0ZW5zaW9uKGV4dCArIDEpOworfQorCitib29sIGRlY29tcHJlc3NfdG9fZmlsZShjb25zdCBjaGFyICpleHQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgb3V0cHV0X2ZkKQoreworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBjb21wcmVzc2lvbnNbaV0uZm10OyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoZXh0LCBjb21wcmVzc2lvbnNbaV0uZm10KSkKKwkJCXJldHVybiAhY29tcHJlc3Npb25zW2ldLmRlY29tcHJlc3MoZmlsZW5hbWUsCisJCQkJCQkJICAgb3V0cHV0X2ZkKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitib29sIGRzb19fbmVlZHNfZGVjb21wcmVzcyhzdHJ1Y3QgZHNvICpkc28pCit7CisJcmV0dXJuIGRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFX0NPTVAgfHwKKwkJZHNvLT5zeW10YWJfdHlwZSA9PSBEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEVfQ09NUDsKK30KKwogLyoKICAqIEdsb2JhbCBsaXN0IG9mIG9wZW4gRFNPcyBhbmQgdGhlIGNvdW50ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kc28uaCBiL3Rvb2xzL3BlcmYvdXRpbC9kc28uaAppbmRleCBhY2I2NTFhLi4zNzgyYzgyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZHNvLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2Rzby5oCkBAIC0yMiw3ICsyMiw5IEBACiAJRFNPX0JJTkFSWV9UWVBFX19CVUlMRElEX0RFQlVHSU5GTywKIAlEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0RTTywKIAlEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEUsCisJRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVAsCiAJRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFLAorCURTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV9DT01QLAogCURTT19CSU5BUllfVFlQRV9fS0NPUkUsCiAJRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LQ09SRSwKIAlEU09fQklOQVJZX1RZUEVfX09QRU5FTUJFRERFRF9ERUJVR0lORk8sCkBAIC0xMjcsNiArMTI5LDcgQEAKIAljb25zdCBjaGFyCSAqbG9uZ19uYW1lOwogCXUxNgkJIGxvbmdfbmFtZV9sZW47CiAJdTE2CQkgc2hvcnRfbmFtZV9sZW47CisJdm9pZAkJKmR3Zmw7CQkJLyogRFdBUkYgZGVidWcgaW5mbyAqLwogCiAJLyogZHNvIGRhdGEgZmlsZSAqLwogCXN0cnVjdCB7CkBAIC0xMzgsNiArMTQxLDExIEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgb3Blbl9lbnRyeTsKIAl9IGRhdGE7CiAKKwl1bmlvbiB7IC8qIFRvb2wgc3BlY2lmaWMgYXJlYSAqLworCQl2b2lkCSAqcHJpdjsKKwkJdTY0CSBkYl9pZDsKKwl9OworCiAJY2hhcgkJIG5hbWVbMF07CiB9OwogCkBAIC0xNzksNiArMTg3LDExIEBACiBjaGFyIGRzb19fc3ltdGFiX29yaWdpbihjb25zdCBzdHJ1Y3QgZHNvICpkc28pOwogaW50IGRzb19fcmVhZF9iaW5hcnlfdHlwZV9maWxlbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpkc28sIGVudW0gZHNvX2JpbmFyeV90eXBlIHR5cGUsCiAJCQkJICAgY2hhciAqcm9vdF9kaXIsIGNoYXIgKmZpbGVuYW1lLCBzaXplX3Qgc2l6ZSk7Citib29sIGlzX3N1cHBvcnRlZF9jb21wcmVzc2lvbihjb25zdCBjaGFyICpleHQpOworYm9vbCBpc19rbW9kdWxlX2V4dGVuc2lvbihjb25zdCBjaGFyICpleHQpOworYm9vbCBpc19rZXJuZWxfbW9kdWxlKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBib29sICpjb21wcmVzc2VkKTsKK2Jvb2wgZGVjb21wcmVzc190b19maWxlKGNvbnN0IGNoYXIgKmV4dCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBvdXRwdXRfZmQpOworYm9vbCBkc29fX25lZWRzX2RlY29tcHJlc3Moc3RydWN0IGRzbyAqZHNvKTsKIAogLyoKICAqIFRoZSBkc29fX2RhdGFfKiBleHRlcm5hbCBpbnRlcmZhY2UgcHJvdmlkZXMgZm9sbG93aW5nIGZ1bmN0aW9uczoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKaW5kZXggNGFmNmIyNy4uNmM2ZDA0NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKQEAgLTI4LDYgKzI4LDcgQEAKIAlbUEVSRl9SRUNPUkRfSEVBREVSX1RSQUNJTkdfREFUQV0JPSAiVFJBQ0lOR19EQVRBIiwKIAlbUEVSRl9SRUNPUkRfSEVBREVSX0JVSUxEX0lEXQkJPSAiQlVJTERfSUQiLAogCVtQRVJGX1JFQ09SRF9GSU5JU0hFRF9ST1VORF0JCT0gIkZJTklTSEVEX1JPVU5EIiwKKwlbUEVSRl9SRUNPUkRfSURfSU5ERVhdCQkJPSAiSURfSU5ERVgiLAogfTsKIAogY29uc3QgY2hhciAqcGVyZl9ldmVudF9fbmFtZSh1bnNpZ25lZCBpbnQgaWQpCkBAIC03MzAsMTIgKzczMSwxMiBAQAogCXJldHVybiBtYWNoaW5lX19wcm9jZXNzX2V2ZW50KG1hY2hpbmUsIGV2ZW50LCBzYW1wbGUpOwogfQogCi12b2lkIHRocmVhZF9fZmluZF9hZGRyX21hcChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCi0JCQkgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgdTggY3B1bW9kZSwKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbWFwKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgdTggY3B1bW9kZSwKIAkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpCiB7CiAJc3RydWN0IG1hcF9ncm91cHMgKm1nID0gdGhyZWFkLT5tZzsKKwlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSA9IG1nLT5tYWNoaW5lOwogCWJvb2wgbG9hZF9tYXAgPSBmYWxzZTsKIAogCWFsLT5tYWNoaW5lID0gbWFjaGluZTsKQEAgLTgwNiwxNCArODA3LDE0IEBACiAJfQogfQogCi12b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCQl1OCBjcHVtb2RlLCBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCB0eXBlLCBhZGRyLCBhbCk7CisJdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgY3B1bW9kZSwgdHlwZSwgYWRkciwgYWwpOwogCWlmIChhbC0+bWFwICE9IE5VTEwpCiAJCWFsLT5zeW0gPSBtYXBfX2ZpbmRfc3ltYm9sKGFsLT5tYXAsIGFsLT5hZGRyLAotCQkJCQkgICBtYWNoaW5lLT5zeW1ib2xfZmlsdGVyKTsKKwkJCQkJICAgdGhyZWFkLT5tZy0+bWFjaGluZS0+c3ltYm9sX2ZpbHRlcik7CiAJZWxzZQogCQlhbC0+c3ltID0gTlVMTDsKIH0KQEAgLTg0Miw4ICs4NDMsNyBAQAogCSAgICBtYWNoaW5lLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0gPT0gTlVMTCkKIAkJbWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzKG1hY2hpbmUpOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgbWFjaGluZSwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwKLQkJCSAgICAgIHNhbXBsZS0+aXAsIGFsKTsKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLCBzYW1wbGUtPmlwLCBhbCk7CiAJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwKIAkJICAgIGFsLT5tYXAgPyBhbC0+bWFwLT5kc28tPmxvbmdfbmFtZSA6CiAJCQlhbC0+bGV2ZWwgPT0gJ0gnID8gIltoeXBlcnZpc29yXSIgOiAiPG5vdCBmb3VuZD4iKTsKQEAgLTkwMiwxNiArOTAyLDE0IEBACiAKIHZvaWQgcGVyZl9ldmVudF9fcHJlcHJvY2Vzc19zYW1wbGVfYWRkcih1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCQkJc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCi0JCQkJCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAogCQkJCQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCiAJCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKIAl1OCBjcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAotCQkJICAgICAgc2FtcGxlLT5hZGRyLCBhbCk7CisJdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwgc2FtcGxlLT5hZGRyLCBhbCk7CiAJaWYgKCFhbC0+bWFwKQotCQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCBNQVBfX1ZBUklBQkxFLAorCQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBjcHVtb2RlLCBNQVBfX1ZBUklBQkxFLAogCQkJCSAgICAgIHNhbXBsZS0+YWRkciwgYWwpOwogCiAJYWwtPmNwdSA9IHNhbXBsZS0+Y3B1OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCA1Njk5ZTdlLi5jNGZmZTJiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMTQzLDYgKzE0MywzMiBAQAogCXN0cnVjdCBicmFuY2hfZW50cnkJZW50cmllc1swXTsKIH07CiAKK2VudW0geworCVBFUkZfSVBfRkxBR19CUkFOQ0gJCT0gMVVMTCA8PCAwLAorCVBFUkZfSVBfRkxBR19DQUxMCQk9IDFVTEwgPDwgMSwKKwlQRVJGX0lQX0ZMQUdfUkVUVVJOCQk9IDFVTEwgPDwgMiwKKwlQRVJGX0lQX0ZMQUdfQ09ORElUSU9OQUwJPSAxVUxMIDw8IDMsCisJUEVSRl9JUF9GTEFHX1NZU0NBTExSRVQJCT0gMVVMTCA8PCA0LAorCVBFUkZfSVBfRkxBR19BU1lOQwkJPSAxVUxMIDw8IDUsCisJUEVSRl9JUF9GTEFHX0lOVEVSUlVQVAkJPSAxVUxMIDw8IDYsCisJUEVSRl9JUF9GTEFHX1RYX0FCT1JUCQk9IDFVTEwgPDwgNywKKwlQRVJGX0lQX0ZMQUdfVFJBQ0VfQkVHSU4JPSAxVUxMIDw8IDgsCisJUEVSRl9JUF9GTEFHX1RSQUNFX0VORAkJPSAxVUxMIDw8IDksCisJUEVSRl9JUF9GTEFHX0lOX1RYCQk9IDFVTEwgPDwgMTAsCit9OworCisjZGVmaW5lIFBFUkZfQlJBTkNIX01BU0sJCShcCisJUEVSRl9JUF9GTEFHX0JSQU5DSAkJfFwKKwlQRVJGX0lQX0ZMQUdfQ0FMTAkJfFwKKwlQRVJGX0lQX0ZMQUdfUkVUVVJOCQl8XAorCVBFUkZfSVBfRkxBR19DT05ESVRJT05BTAl8XAorCVBFUkZfSVBfRkxBR19TWVNDQUxMUkVUCQl8XAorCVBFUkZfSVBfRkxBR19BU1lOQwkJfFwKKwlQRVJGX0lQX0ZMQUdfSU5URVJSVVBUCQl8XAorCVBFUkZfSVBfRkxBR19UWF9BQk9SVAkJfFwKKwlQRVJGX0lQX0ZMQUdfVFJBQ0VfQkVHSU4JfFwKKwlQRVJGX0lQX0ZMQUdfVFJBQ0VfRU5EKQorCiBzdHJ1Y3QgcGVyZl9zYW1wbGUgewogCXU2NCBpcDsKIAl1MzIgcGlkLCB0aWQ7CkBAIC0xNjIsNiArMTg4LDcgQEAKIAlzdHJ1Y3QgaXBfY2FsbGNoYWluICpjYWxsY2hhaW47CiAJc3RydWN0IGJyYW5jaF9zdGFjayAqYnJhbmNoX3N0YWNrOwogCXN0cnVjdCByZWdzX2R1bXAgIHVzZXJfcmVnczsKKwlzdHJ1Y3QgcmVnc19kdW1wICBpbnRyX3JlZ3M7CiAJc3RydWN0IHN0YWNrX2R1bXAgdXNlcl9zdGFjazsKIAlzdHJ1Y3Qgc2FtcGxlX3JlYWQgcmVhZDsKIH07CkBAIC0xODcsNiArMjE0LDcgQEAKIAlQRVJGX1JFQ09SRF9IRUFERVJfVFJBQ0lOR19EQVRBCQk9IDY2LAogCVBFUkZfUkVDT1JEX0hFQURFUl9CVUlMRF9JRAkJPSA2NywKIAlQRVJGX1JFQ09SRF9GSU5JU0hFRF9ST1VORAkJPSA2OCwKKwlQRVJGX1JFQ09SRF9JRF9JTkRFWAkJCT0gNjksCiAJUEVSRl9SRUNPUkRfSEVBREVSX01BWAogfTsKIApAQCAtMjE0LDYgKzI0Miw3IEBACiAJdTMyIG5yX2ludmFsaWRfY2hhaW5zOwogCXUzMiBucl91bmtub3duX2lkOwogCXUzMiBucl91bnByb2Nlc3NhYmxlX3NhbXBsZXM7CisJdTMyIG5yX3Vub3JkZXJlZF9ldmVudHM7CiB9OwogCiBzdHJ1Y3QgYXR0cl9ldmVudCB7CkBAIC0yMzksNiArMjY4LDE5IEBACiAJdTMyIHNpemU7CiB9OwogCitzdHJ1Y3QgaWRfaW5kZXhfZW50cnkgeworCXU2NCBpZDsKKwl1NjQgaWR4OworCXU2NCBjcHU7CisJdTY0IHRpZDsKK307CisKK3N0cnVjdCBpZF9pbmRleF9ldmVudCB7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwl1NjQgbnI7CisJc3RydWN0IGlkX2luZGV4X2VudHJ5IGVudHJpZXNbMF07Cit9OworCiB1bmlvbiBwZXJmX2V2ZW50IHsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCXN0cnVjdCBtbWFwX2V2ZW50CQltbWFwOwpAQCAtMjUzLDYgKzI5NSw3IEBACiAJc3RydWN0IGV2ZW50X3R5cGVfZXZlbnQJCWV2ZW50X3R5cGU7CiAJc3RydWN0IHRyYWNpbmdfZGF0YV9ldmVudAl0cmFjaW5nX2RhdGE7CiAJc3RydWN0IGJ1aWxkX2lkX2V2ZW50CQlidWlsZF9pZDsKKwlzdHJ1Y3QgaWRfaW5kZXhfZXZlbnQJCWlkX2luZGV4OwogfTsKIAogdm9pZCBwZXJmX2V2ZW50X19wcmludF90b3RhbHModm9pZCk7CkBAIC0zMjIsNyArMzY1LDYgQEAKIGJvb2wgc2FtcGxlX2FkZHJfY29ycmVsYXRlc19zeW0oc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cik7CiB2b2lkIHBlcmZfZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlX2FkZHIodW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAotCQkJCQlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKIAkJCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKaW5kZXggM2M5ZTc3ZC4uY2ZiZTJiOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwpAQCAtNDEzLDcgKzQxMyw3IEBACiAJaW50IG5mZHMgPSAwOwogCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZzZWwsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKKwlldmxpc3RfX2Zvcl9lYWNoKGV2bGlzdCwgZXZzZWwpIHsKIAkJaWYgKGV2c2VsLT5zeXN0ZW1fd2lkZSkKIAkJCW5mZHMgKz0gbnJfY3B1czsKIAkJZWxzZQpAQCAtNTI3LDYgKzUyNywyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwZXJmX2V2bGlzdF9fc2V0X3NpZF9pZHgoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsCisJCQkJICAgICBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBpZHgsIGludCBjcHUsCisJCQkJICAgICBpbnQgdGhyZWFkKQoreworCXN0cnVjdCBwZXJmX3NhbXBsZV9pZCAqc2lkID0gU0lEKGV2c2VsLCBjcHUsIHRocmVhZCk7CisJc2lkLT5pZHggPSBpZHg7CisJaWYgKGV2bGlzdC0+Y3B1cyAmJiBjcHUgPj0gMCkKKwkJc2lkLT5jcHUgPSBldmxpc3QtPmNwdXMtPm1hcFtjcHVdOworCWVsc2UKKwkJc2lkLT5jcHUgPSAtMTsKKwlpZiAoIWV2c2VsLT5zeXN0ZW1fd2lkZSAmJiBldmxpc3QtPnRocmVhZHMgJiYgdGhyZWFkID49IDApCisJCXNpZC0+dGlkID0gZXZsaXN0LT50aHJlYWRzLT5tYXBbdGhyZWFkXTsKKwllbHNlCisJCXNpZC0+dGlkID0gLTE7Cit9CisKIHN0cnVjdCBwZXJmX3NhbXBsZV9pZCAqcGVyZl9ldmxpc3RfX2lkMnNpZChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgdTY0IGlkKQogewogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwpAQCAtODAwLDE0ICs4MTYsMjYgQEAKIAkJCXBlcmZfZXZsaXN0X19tbWFwX2dldChldmxpc3QsIGlkeCk7CiAJCX0KIAotCQlpZiAoX19wZXJmX2V2bGlzdF9fYWRkX3BvbGxmZChldmxpc3QsIGZkLCBpZHgpIDwgMCkgeworCQkvKgorCQkgKiBUaGUgc3lzdGVtX3dpZGUgZmxhZyBjYXVzZXMgYSBzZWxlY3RlZCBldmVudCB0byBiZSBvcGVuZWQKKwkJICogYWx3YXlzIHdpdGhvdXQgYSBwaWQuICBDb25zZXF1ZW50bHkgaXQgd2lsbCBuZXZlciBnZXQgYQorCQkgKiBQT0xMSFVQLCBidXQgaXQgaXMgdXNlZCBmb3IgdHJhY2tpbmcgaW4gY29tYmluYXRpb24gd2l0aAorCQkgKiBvdGhlciBldmVudHMsIHNvIGl0IHNob3VsZCBub3QgbmVlZCB0byBiZSBwb2xsZWQgYW55d2F5LgorCQkgKiBUaGVyZWZvcmUgZG9uJ3QgYWRkIGl0IGZvciBwb2xsaW5nLgorCQkgKi8KKwkJaWYgKCFldnNlbC0+c3lzdGVtX3dpZGUgJiYKKwkJICAgIF9fcGVyZl9ldmxpc3RfX2FkZF9wb2xsZmQoZXZsaXN0LCBmZCwgaWR4KSA8IDApIHsKIAkJCXBlcmZfZXZsaXN0X19tbWFwX3B1dChldmxpc3QsIGlkeCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCQlpZiAoKGV2c2VsLT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpICYmCi0JCSAgICBwZXJmX2V2bGlzdF9faWRfYWRkX2ZkKGV2bGlzdCwgZXZzZWwsIGNwdSwgdGhyZWFkLCBmZCkgPCAwKQotCQkJcmV0dXJuIC0xOworCQlpZiAoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgeworCQkJaWYgKHBlcmZfZXZsaXN0X19pZF9hZGRfZmQoZXZsaXN0LCBldnNlbCwgY3B1LCB0aHJlYWQsCisJCQkJCQkgICBmZCkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCXBlcmZfZXZsaXN0X19zZXRfc2lkX2lkeChldmxpc3QsIGV2c2VsLCBpZHgsIGNwdSwKKwkJCQkJCSB0aHJlYWQpOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCmluZGV4IDJmOWU2ODAuLjFlOTBjODUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCkBAIC02NTgsOSArNjU4LDIyIEBACiAJCWF0dHItPm1tYXBfZGF0YSA9IHRyYWNrOwogCX0KIAorCS8qCisJICogV2UgZG9uJ3QgYWxsb3cgdXNlciBzcGFjZSBjYWxsY2hhaW5zIGZvciAgZnVuY3Rpb24gdHJhY2UKKwkgKiBldmVudCwgZHVlIHRvIGlzc3VlcyB3aXRoIHBhZ2UgZmF1bHRzIHdoaWxlIHRyYWNpbmcgcGFnZQorCSAqIGZhdWx0IGhhbmRsZXIgYW5kIGl0cyBvdmVyYWxsIHRyaWNraW5lc3MgbmF0dXJlLgorCSAqLworCWlmIChwZXJmX2V2c2VsX19pc19mdW5jdGlvbl9ldmVudChldnNlbCkpCisJCWV2c2VsLT5hdHRyLmV4Y2x1ZGVfY2FsbGNoYWluX3VzZXIgPSAxOworCiAJaWYgKGNhbGxjaGFpbl9wYXJhbS5lbmFibGVkICYmICFldnNlbC0+bm9fYXV4X3NhbXBsZXMpCiAJCXBlcmZfZXZzZWxfX2NvbmZpZ19jYWxsZ3JhcGgoZXZzZWwpOwogCisJaWYgKG9wdHMtPnNhbXBsZV9pbnRyX3JlZ3MpIHsKKwkJYXR0ci0+c2FtcGxlX3JlZ3NfaW50ciA9IFBFUkZfUkVHU19NQVNLOworCQlwZXJmX2V2c2VsX19zZXRfc2FtcGxlX2JpdChldnNlbCwgUkVHU19JTlRSKTsKKwl9CisKIAlpZiAodGFyZ2V0X19oYXNfY3B1KCZvcHRzLT50YXJnZXQpKQogCQlwZXJmX2V2c2VsX19zZXRfc2FtcGxlX2JpdChldnNlbCwgQ1BVKTsKIApAQCAtODUzLDggKzg2Niw2IEBACiAJcGVyZl9ldnNlbF9fZnJlZV9pZChldnNlbCk7CiAJY2xvc2VfY2dyb3VwKGV2c2VsLT5jZ3JwKTsKIAl6ZnJlZSgmZXZzZWwtPmdyb3VwX25hbWUpOwotCWlmIChldnNlbC0+dHBfZm9ybWF0KQotCQlwZXZlbnRfZnJlZV9mb3JtYXQoZXZzZWwtPnRwX2Zvcm1hdCk7CiAJemZyZWUoJmV2c2VsLT5uYW1lKTsKIAlwZXJmX2V2c2VsX19vYmplY3QuZmluaShldnNlbCk7CiB9CkBAIC04NjUsOSArODc2LDggQEAKIAlmcmVlKGV2c2VsKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVfZGVsdGFzKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCQkgIGludCBjcHUsCi0JCQkJICBzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICpjb3VudCkKK3ZvaWQgcGVyZl9ldnNlbF9fY29tcHV0ZV9kZWx0YXMoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgY3B1LAorCQkJCXN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgKmNvdW50KQogewogCXN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgdG1wOwogCkBAIC04ODcsNiArODk3LDQyIEBACiAJY291bnQtPnJ1biA9IGNvdW50LT5ydW4gLSB0bXAucnVuOwogfQogCit2b2lkIHBlcmZfY291bnRzX3ZhbHVlc19fc2NhbGUoc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqY291bnQsCisJCQkgICAgICAgYm9vbCBzY2FsZSwgczggKnBzY2FsZWQpCit7CisJczggc2NhbGVkID0gMDsKKworCWlmIChzY2FsZSkgeworCQlpZiAoY291bnQtPnJ1biA9PSAwKSB7CisJCQlzY2FsZWQgPSAtMTsKKwkJCWNvdW50LT52YWwgPSAwOworCQl9IGVsc2UgaWYgKGNvdW50LT5ydW4gPCBjb3VudC0+ZW5hKSB7CisJCQlzY2FsZWQgPSAxOworCQkJY291bnQtPnZhbCA9ICh1NjQpKChkb3VibGUpIGNvdW50LT52YWwgKiBjb3VudC0+ZW5hIC8gY291bnQtPnJ1biArIDAuNSk7CisJCX0KKwl9IGVsc2UKKwkJY291bnQtPmVuYSA9IGNvdW50LT5ydW4gPSAwOworCisJaWYgKHBzY2FsZWQpCisJCSpwc2NhbGVkID0gc2NhbGVkOworfQorCitpbnQgcGVyZl9ldnNlbF9fcmVhZF9jYihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBjcHUsIGludCB0aHJlYWQsCisJCQlwZXJmX2V2c2VsX19yZWFkX2NiX3QgY2IpCit7CisJc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyBjb3VudDsKKworCW1lbXNldCgmY291bnQsIDAsIHNpemVvZihjb3VudCkpOworCisJaWYgKEZEKGV2c2VsLCBjcHUsIHRocmVhZCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZWFkbihGRChldnNlbCwgY3B1LCB0aHJlYWQpLCAmY291bnQsIHNpemVvZihjb3VudCkpIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCXJldHVybiBjYihldnNlbCwgY3B1LCB0aHJlYWQsICZjb3VudCk7Cit9CisKIGludCBfX3BlcmZfZXZzZWxfX3JlYWRfb25fY3B1KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKIAkJCSAgICAgIGludCBjcHUsIGludCB0aHJlYWQsIGJvb2wgc2NhbGUpCiB7CkBAIC05MDIsNjkgKzk0OCwxMiBAQAogCWlmIChyZWFkbihGRChldnNlbCwgY3B1LCB0aHJlYWQpLCAmY291bnQsIG52ICogc2l6ZW9mKHU2NCkpIDwgMCkKIAkJcmV0dXJuIC1lcnJubzsKIAotCWNvbXB1dGVfZGVsdGFzKGV2c2VsLCBjcHUsICZjb3VudCk7Ci0KLQlpZiAoc2NhbGUpIHsKLQkJaWYgKGNvdW50LnJ1biA9PSAwKQotCQkJY291bnQudmFsID0gMDsKLQkJZWxzZSBpZiAoY291bnQucnVuIDwgY291bnQuZW5hKQotCQkJY291bnQudmFsID0gKHU2NCkoKGRvdWJsZSljb3VudC52YWwgKiBjb3VudC5lbmEgLyBjb3VudC5ydW4gKyAwLjUpOwotCX0gZWxzZQotCQljb3VudC5lbmEgPSBjb3VudC5ydW4gPSAwOwotCisJcGVyZl9ldnNlbF9fY29tcHV0ZV9kZWx0YXMoZXZzZWwsIGNwdSwgJmNvdW50KTsKKwlwZXJmX2NvdW50c192YWx1ZXNfX3NjYWxlKCZjb3VudCwgc2NhbGUsIE5VTEwpOwogCWV2c2VsLT5jb3VudHMtPmNwdVtjcHVdID0gY291bnQ7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBfX3BlcmZfZXZzZWxfX3JlYWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkgICAgICAgaW50IG5jcHVzLCBpbnQgbnRocmVhZHMsIGJvb2wgc2NhbGUpCi17Ci0Jc2l6ZV90IG52ID0gc2NhbGUgPyAzIDogMTsKLQlpbnQgY3B1LCB0aHJlYWQ7Ci0Jc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqYWdnciA9ICZldnNlbC0+Y291bnRzLT5hZ2dyLCBjb3VudDsKLQotCWlmIChldnNlbC0+c3lzdGVtX3dpZGUpCi0JCW50aHJlYWRzID0gMTsKLQotCWFnZ3ItPnZhbCA9IGFnZ3ItPmVuYSA9IGFnZ3ItPnJ1biA9IDA7Ci0KLQlmb3IgKGNwdSA9IDA7IGNwdSA8IG5jcHVzOyBjcHUrKykgewotCQlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IG50aHJlYWRzOyB0aHJlYWQrKykgewotCQkJaWYgKEZEKGV2c2VsLCBjcHUsIHRocmVhZCkgPCAwKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAocmVhZG4oRkQoZXZzZWwsIGNwdSwgdGhyZWFkKSwKLQkJCQkgICZjb3VudCwgbnYgKiBzaXplb2YodTY0KSkgPCAwKQotCQkJCXJldHVybiAtZXJybm87Ci0KLQkJCWFnZ3ItPnZhbCArPSBjb3VudC52YWw7Ci0JCQlpZiAoc2NhbGUpIHsKLQkJCQlhZ2dyLT5lbmEgKz0gY291bnQuZW5hOwotCQkJCWFnZ3ItPnJ1biArPSBjb3VudC5ydW47Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljb21wdXRlX2RlbHRhcyhldnNlbCwgLTEsIGFnZ3IpOwotCi0JZXZzZWwtPmNvdW50cy0+c2NhbGVkID0gMDsKLQlpZiAoc2NhbGUpIHsKLQkJaWYgKGFnZ3ItPnJ1biA9PSAwKSB7Ci0JCQlldnNlbC0+Y291bnRzLT5zY2FsZWQgPSAtMTsKLQkJCWFnZ3ItPnZhbCA9IDA7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmIChhZ2dyLT5ydW4gPCBhZ2dyLT5lbmEpIHsKLQkJCWV2c2VsLT5jb3VudHMtPnNjYWxlZCA9IDE7Ci0JCQlhZ2dyLT52YWwgPSAodTY0KSgoZG91YmxlKWFnZ3ItPnZhbCAqIGFnZ3ItPmVuYSAvIGFnZ3ItPnJ1biArIDAuNSk7Ci0JCX0KLQl9IGVsc2UKLQkJYWdnci0+ZW5hID0gYWdnci0+cnVuID0gMDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGdldF9ncm91cF9mZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBjcHUsIGludCB0aHJlYWQpCiB7CiAJc3RydWN0IHBlcmZfZXZzZWwgKmxlYWRlciA9IGV2c2VsLT5sZWFkZXI7CkBAIC0xMDM5LDYgKzEwMjgsNyBAQAogCXJldCArPSBQUklOVF9BVFRSX1g2NChicmFuY2hfc2FtcGxlX3R5cGUpOwogCXJldCArPSBQUklOVF9BVFRSX1g2NChzYW1wbGVfcmVnc191c2VyKTsKIAlyZXQgKz0gUFJJTlRfQVRUUl9VMzIoc2FtcGxlX3N0YWNrX3VzZXIpOworCXJldCArPSBQUklOVF9BVFRSX1g2NChzYW1wbGVfcmVnc19pbnRyKTsKIAogCXJldCArPSBmcHJpbnRmKGZwLCAiJS42MHNcbiIsIGdyYXBoX2RvdHRlZF9saW5lKTsKIApAQCAtMTUzOCw2ICsxNTI4LDIzIEBACiAJCWFycmF5Kys7CiAJfQogCisJZGF0YS0+aW50cl9yZWdzLmFiaSA9IFBFUkZfU0FNUExFX1JFR1NfQUJJX05PTkU7CisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIpIHsKKwkJT1ZFUkZMT1dfQ0hFQ0tfdTY0KGFycmF5KTsKKwkJZGF0YS0+aW50cl9yZWdzLmFiaSA9ICphcnJheTsKKwkJYXJyYXkrKzsKKworCQlpZiAoZGF0YS0+aW50cl9yZWdzLmFiaSAhPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FKSB7CisJCQl1NjQgbWFzayA9IGV2c2VsLT5hdHRyLnNhbXBsZV9yZWdzX2ludHI7CisKKwkJCXN6ID0gaHdlaWdodF9sb25nKG1hc2spICogc2l6ZW9mKHU2NCk7CisJCQlPVkVSRkxPV19DSEVDSyhhcnJheSwgc3osIG1heF9zaXplKTsKKwkJCWRhdGEtPmludHJfcmVncy5tYXNrID0gbWFzazsKKwkJCWRhdGEtPmludHJfcmVncy5yZWdzID0gKHU2NCAqKWFycmF5OworCQkJYXJyYXkgPSAodm9pZCAqKWFycmF5ICsgc3o7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYzMyw2ICsxNjQwLDE2IEBACiAJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9UUkFOU0FDVElPTikKIAkJcmVzdWx0ICs9IHNpemVvZih1NjQpOwogCisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIpIHsKKwkJaWYgKHNhbXBsZS0+aW50cl9yZWdzLmFiaSkgeworCQkJcmVzdWx0ICs9IHNpemVvZih1NjQpOworCQkJc3ogPSBod2VpZ2h0X2xvbmcoc2FtcGxlLT5pbnRyX3JlZ3MubWFzaykgKiBzaXplb2YodTY0KTsKKwkJCXJlc3VsdCArPSBzejsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCArPSBzaXplb2YodTY0KTsKKwkJfQorCX0KKwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE4MTEsNiArMTgyOCwxNyBAQAogCQlhcnJheSsrOwogCX0KIAorCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfUkVHU19JTlRSKSB7CisJCWlmIChzYW1wbGUtPmludHJfcmVncy5hYmkpIHsKKwkJCSphcnJheSsrID0gc2FtcGxlLT5pbnRyX3JlZ3MuYWJpOworCQkJc3ogPSBod2VpZ2h0X2xvbmcoc2FtcGxlLT5pbnRyX3JlZ3MubWFzaykgKiBzaXplb2YodTY0KTsKKwkJCW1lbWNweShhcnJheSwgc2FtcGxlLT5pbnRyX3JlZ3MucmVncywgc3opOworCQkJYXJyYXkgPSAodm9pZCAqKWFycmF5ICsgc3o7CisJCX0gZWxzZSB7CisJCQkqYXJyYXkrKyA9IDA7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk0MCw3ICsxOTY4LDcgQEAKIAkJYml0X25hbWUoUkVBRCksIGJpdF9uYW1lKENBTExDSEFJTiksIGJpdF9uYW1lKElEKSwgYml0X25hbWUoQ1BVKSwKIAkJYml0X25hbWUoUEVSSU9EKSwgYml0X25hbWUoU1RSRUFNX0lEKSwgYml0X25hbWUoUkFXKSwKIAkJYml0X25hbWUoQlJBTkNIX1NUQUNLKSwgYml0X25hbWUoUkVHU19VU0VSKSwgYml0X25hbWUoU1RBQ0tfVVNFUiksCi0JCWJpdF9uYW1lKElERU5USUZJRVIpLAorCQliaXRfbmFtZShJREVOVElGSUVSKSwgYml0X25hbWUoUkVHU19JTlRSKSwKIAkJeyAubmFtZSA9IE5VTEwsIH0KIAl9OwogI3VuZGVmIGJpdF9uYW1lCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCmluZGV4IDE2M2M1NjAuLjM4NjIyNzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCkBAIC0zNiw2ICszNiw5IEBACiAJc3RydWN0IGhsaXN0X25vZGUgCW5vZGU7CiAJdTY0CQkgCWlkOwogCXN0cnVjdCBwZXJmX2V2c2VsCSpldnNlbDsKKwlpbnQJCQlpZHg7CisJaW50CQkJY3B1OworCXBpZF90CQkJdGlkOwogCiAJLyogSG9sZHMgdG90YWwgSUQgcGVyaW9kIHZhbHVlIGZvciBQRVJGX1NBTVBMRV9SRUFEIHByb2Nlc3NpbmcuICovCiAJdTY0CQkJcGVyaW9kOwpAQCAtNTQsNiArNTcsNyBAQAogICogQGlzX3BvczogdGhlIHBvc2l0aW9uIChjb3VudGluZyBiYWNrd2FyZHMpIG9mIHRoZSBldmVudCBpZCAoUEVSRl9TQU1QTEVfSUQgb3IKICAqICAgICAgICAgIFBFUkZfU0FNUExFX0lERU5USUZJRVIpIGluIGEgbm9uLXNhbXBsZSBldmVudCBpLmUuIGlmIHNhbXBsZV9pZF9hbGwKICAqICAgICAgICAgIGlzIHVzZWQgdGhlcmUgaXMgYW4gaWQgc2FtcGxlIGFwcGVuZGVkIHRvIG5vbi1zYW1wbGUgZXZlbnRzCisgKiBAcHJpdjogICBBbmQgd2hhdCBpcyBpbiBpdHMgY29udGFpbmluZyB1bm5hbWVkIHVuaW9uIGFyZSB0b29sIHNwZWNpZmljCiAgKi8KIHN0cnVjdCBwZXJmX2V2c2VsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CkBAIC02OSwxMCArNzMsMTIgQEAKIAljaGFyCQkJKm5hbWU7CiAJZG91YmxlCQkJc2NhbGU7CiAJY29uc3QgY2hhcgkJKnVuaXQ7CisJYm9vbAkJCXNuYXBzaG90OwogCXN0cnVjdCBldmVudF9mb3JtYXQJKnRwX2Zvcm1hdDsKIAl1bmlvbiB7CiAJCXZvaWQJCSpwcml2OwogCQlvZmZfdAkJaWRfb2Zmc2V0OworCQl1NjQJCWRiX2lkOwogCX07CiAJc3RydWN0IGNncm91cF9zZWwJKmNncnA7CiAJdm9pZAkJCSpoYW5kbGVyOwpAQCAtODYsNiArOTIsOCBAQAogCWJvb2wJCQlpbW1lZGlhdGU7CiAJYm9vbAkJCXN5c3RlbV93aWRlOwogCWJvb2wJCQl0cmFja2luZzsKKwlib29sCQkJcGVyX3BrZzsKKwl1bnNpZ25lZCBsb25nCQkqcGVyX3BrZ19tYXNrOwogCS8qIHBhcnNlIG1vZGlmaWVyIGhlbHBlciAqLwogCWludAkJCWV4Y2x1ZGVfR0g7CiAJaW50CQkJbnJfbWVtYmVyczsKQEAgLTEwNSw2ICsxMTMsMTIgQEAKIHN0cnVjdCBwZXJmX2V2bGlzdDsKIHN0cnVjdCByZWNvcmRfb3B0czsKIAordm9pZCBwZXJmX2NvdW50c192YWx1ZXNfX3NjYWxlKHN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgKmNvdW50LAorCQkJICAgICAgIGJvb2wgc2NhbGUsIHM4ICpwc2NhbGVkKTsKKwordm9pZCBwZXJmX2V2c2VsX19jb21wdXRlX2RlbHRhcyhzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBjcHUsCisJCQkJc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqY291bnQpOworCiBpbnQgcGVyZl9ldnNlbF9fb2JqZWN0X2NvbmZpZyhzaXplX3Qgb2JqZWN0X3NpemUsCiAJCQkgICAgICBpbnQgKCppbml0KShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpLAogCQkJICAgICAgdm9pZCAoKmZpbmkpKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkpOwpAQCAtMjIyLDYgKzIzNiwxMyBAQAogCSAoYSktPmF0dHIudHlwZSA9PSAoYiktPmF0dHIudHlwZSAmJglcCiAJIChhKS0+YXR0ci5jb25maWcgPT0gKGIpLT5hdHRyLmNvbmZpZykKIAordHlwZWRlZiBpbnQgKHBlcmZfZXZzZWxfX3JlYWRfY2JfdCkoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkJCSAgICBpbnQgY3B1LCBpbnQgdGhyZWFkLAorCQkJCSAgICBzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICpjb3VudCk7CisKK2ludCBwZXJmX2V2c2VsX19yZWFkX2NiKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgaW50IGNwdSwgaW50IHRocmVhZCwKKwkJCXBlcmZfZXZzZWxfX3JlYWRfY2JfdCBjYik7CisKIGludCBfX3BlcmZfZXZzZWxfX3JlYWRfb25fY3B1KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKIAkJCSAgICAgIGludCBjcHUsIGludCB0aHJlYWQsIGJvb2wgc2NhbGUpOwogCkBAIC0yNTEsMzUgKzI3Miw2IEBACiAJcmV0dXJuIF9fcGVyZl9ldnNlbF9fcmVhZF9vbl9jcHUoZXZzZWwsIGNwdSwgdGhyZWFkLCB0cnVlKTsKIH0KIAotaW50IF9fcGVyZl9ldnNlbF9fcmVhZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBuY3B1cywgaW50IG50aHJlYWRzLAotCQkgICAgICAgYm9vbCBzY2FsZSk7Ci0KLS8qKgotICogcGVyZl9ldnNlbF9fcmVhZCAtIFJlYWQgdGhlIGFnZ3JlZ2F0ZSByZXN1bHRzIG9uIGFsbCBDUFVzCi0gKgotICogQGV2c2VsIC0gZXZlbnQgc2VsZWN0b3IgdG8gcmVhZCB2YWx1ZQotICogQG5jcHVzIC0gTnVtYmVyIG9mIGNwdXMgYWZmZWN0ZWQsIGZyb20gemVybwotICogQG50aHJlYWRzIC0gTnVtYmVyIG9mIHRocmVhZHMgYWZmZWN0ZWQsIGZyb20gemVybwotICovCi1zdGF0aWMgaW5saW5lIGludCBwZXJmX2V2c2VsX19yZWFkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCQkgICAgaW50IG5jcHVzLCBpbnQgbnRocmVhZHMpCi17Ci0JcmV0dXJuIF9fcGVyZl9ldnNlbF9fcmVhZChldnNlbCwgbmNwdXMsIG50aHJlYWRzLCBmYWxzZSk7Ci19Ci0KLS8qKgotICogcGVyZl9ldnNlbF9fcmVhZF9zY2FsZWQgLSBSZWFkIHRoZSBhZ2dyZWdhdGUgcmVzdWx0cyBvbiBhbGwgQ1BVcywgc2NhbGVkCi0gKgotICogQGV2c2VsIC0gZXZlbnQgc2VsZWN0b3IgdG8gcmVhZCB2YWx1ZQotICogQG5jcHVzIC0gTnVtYmVyIG9mIGNwdXMgYWZmZWN0ZWQsIGZyb20gemVybwotICogQG50aHJlYWRzIC0gTnVtYmVyIG9mIHRocmVhZHMgYWZmZWN0ZWQsIGZyb20gemVybwotICovCi1zdGF0aWMgaW5saW5lIGludCBwZXJmX2V2c2VsX19yZWFkX3NjYWxlZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCi0JCQkJCSAgaW50IG5jcHVzLCBpbnQgbnRocmVhZHMpCi17Ci0JcmV0dXJuIF9fcGVyZl9ldnNlbF9fcmVhZChldnNlbCwgbmNwdXMsIG50aHJlYWRzLCB0cnVlKTsKLX0KLQogaW50IHBlcmZfZXZzZWxfX3BhcnNlX3NhbXBsZShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9maW5kLXZkc28tbWFwLmMgYi90b29scy9wZXJmL3V0aWwvZmluZC12ZHNvLW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZWYxY2YKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvZmluZC12ZHNvLW1hcC5jCkBAIC0wLDAgKzEsMzAgQEAKK3N0YXRpYyBpbnQgZmluZF92ZHNvX21hcCh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQpCit7CisJRklMRSAqbWFwczsKKwljaGFyIGxpbmVbMTI4XTsKKwlpbnQgZm91bmQgPSAwOworCisJbWFwcyA9IGZvcGVuKCIvcHJvYy9zZWxmL21hcHMiLCAiciIpOworCWlmICghbWFwcykgeworCQlmcHJpbnRmKHN0ZGVyciwgInZkc286IGNhbm5vdCBvcGVuIG1hcHNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKCFmb3VuZCAmJiBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIG1hcHMpKSB7CisJCWludCBtID0gLTE7CisKKwkJLyogV2UgY2FyZSBvbmx5IGFib3V0IHByaXZhdGUgci14IG1hcHBpbmdzLiAqLworCQlpZiAoMiAhPSBzc2NhbmYobGluZSwgIiVwLSVwIHIteHAgJSp4ICUqeDolKnggJSp1ICVuIiwKKwkJCQlzdGFydCwgZW5kLCAmbSkpCisJCQljb250aW51ZTsKKwkJaWYgKG0gPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCFzdHJuY21wKCZsaW5lW21dLCBWRFNPX19NQVBfTkFNRSwKKwkJCSAgICAgc2l6ZW9mKFZEU09fX01BUF9OQU1FKSAtIDEpKQorCQkJZm91bmQgPSAxOworCX0KKworCWZjbG9zZShtYXBzKTsKKwlyZXR1cm4gIWZvdW5kOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCmluZGV4IDI2ZjViMmYuLmIyMGU0MGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKQEAgLTI0LDggKzI0LDYgQEAKICNpbmNsdWRlICJidWlsZC1pZC5oIgogI2luY2x1ZGUgImRhdGEuaCIKIAotc3RhdGljIGJvb2wgbm9fYnVpbGRpZF9jYWNoZSA9IGZhbHNlOwotCiBzdGF0aWMgdTMyIGhlYWRlcl9hcmdjOwogc3RhdGljIGNvbnN0IGNoYXIgKipoZWFkZXJfYXJndjsKIApAQCAtNzksMTAgKzc3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBOQU1FX0FMSUdOIDY0Ci0KLXN0YXRpYyBpbnQgd3JpdGVfcGFkZGVkKGludCBmZCwgY29uc3Qgdm9pZCAqYmYsIHNpemVfdCBjb3VudCwKLQkJCXNpemVfdCBjb3VudF9hbGlnbmVkKQoraW50IHdyaXRlX3BhZGRlZChpbnQgZmQsIGNvbnN0IHZvaWQgKmJmLCBzaXplX3QgY291bnQsIHNpemVfdCBjb3VudF9hbGlnbmVkKQogewogCXN0YXRpYyBjb25zdCBjaGFyIHplcm9fYnVmW05BTUVfQUxJR05dOwogCWludCBlcnIgPSBkb193cml0ZShmZCwgYmYsIGNvdW50KTsKQEAgLTE3MSwzNDAgKzE2Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpCVwKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkJXAotCQlpZiAoIXBvcy0+aGFzX2J1aWxkX2lkKQkJXAotCQkJY29udGludWU7CQlcCi0JCWVsc2UKLQotc3RhdGljIGludCB3cml0ZV9idWlsZGlkKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgdTggKmJ1aWxkX2lkLAotCQkJIHBpZF90IHBpZCwgdTE2IG1pc2MsIGludCBmZCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBidWlsZF9pZF9ldmVudCBiOwotCXNpemVfdCBsZW47Ci0KLQlsZW4gPSBuYW1lX2xlbiArIDE7Ci0JbGVuID0gUEVSRl9BTElHTihsZW4sIE5BTUVfQUxJR04pOwotCi0JbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOwotCW1lbWNweSgmYi5idWlsZF9pZCwgYnVpbGRfaWQsIEJVSUxEX0lEX1NJWkUpOwotCWIucGlkID0gcGlkOwotCWIuaGVhZGVyLm1pc2MgPSBtaXNjOwotCWIuaGVhZGVyLnNpemUgPSBzaXplb2YoYikgKyBsZW47Ci0KLQllcnIgPSBkb193cml0ZShmZCwgJmIsIHNpemVvZihiKSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gd3JpdGVfcGFkZGVkKGZkLCBuYW1lLCBuYW1lX2xlbiArIDEsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbnQgX19kc29zX19oaXRfYWxsKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCi17Ci0Jc3RydWN0IGRzbyAqcG9zOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpCi0JCXBvcy0+aGl0ID0gdHJ1ZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1hY2hpbmVfX2hpdF9hbGxfZHNvcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gX19kc29zX19oaXRfYWxsKCZtYWNoaW5lLT5rZXJuZWxfZHNvcy5oZWFkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIF9fZHNvc19faGl0X2FsbCgmbWFjaGluZS0+dXNlcl9kc29zLmhlYWQpOwotfQotCi1pbnQgZHNvc19faGl0X2FsbChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQotewotCXN0cnVjdCByYl9ub2RlICpuZDsKLQlpbnQgZXJyOwotCi0JZXJyID0gbWFjaGluZV9faGl0X2FsbF9kc29zKCZzZXNzaW9uLT5tYWNoaW5lcy5ob3N0KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZm9yIChuZCA9IHJiX2ZpcnN0KCZzZXNzaW9uLT5tYWNoaW5lcy5ndWVzdHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewotCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKLQotCQllcnIgPSBtYWNoaW5lX19oaXRfYWxsX2Rzb3MocG9zKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCi0JCQkJICAgICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJCSAgICAgICBwaWRfdCBwaWQsIHUxNiBtaXNjLCBpbnQgZmQpCi17Ci0JY2hhciBubVtQQVRIX01BWF07Ci0Jc3RydWN0IGRzbyAqcG9zOwotCi0JZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpIHsKLQkJaW50IGVycjsKLQkJY29uc3QgY2hhciAqbmFtZTsKLQkJc2l6ZV90IG5hbWVfbGVuOwotCi0JCWlmICghcG9zLT5oaXQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZHNvX19pc192ZHNvKHBvcykpIHsKLQkJCW5hbWUgPSBwb3MtPnNob3J0X25hbWU7Ci0JCQluYW1lX2xlbiA9IHBvcy0+c2hvcnRfbmFtZV9sZW4gKyAxOwotCQl9IGVsc2UgaWYgKGRzb19faXNfa2NvcmUocG9zKSkgewotCQkJbWFjaGluZV9fbW1hcF9uYW1lKG1hY2hpbmUsIG5tLCBzaXplb2Yobm0pKTsKLQkJCW5hbWUgPSBubTsKLQkJCW5hbWVfbGVuID0gc3RybGVuKG5tKSArIDE7Ci0JCX0gZWxzZSB7Ci0JCQluYW1lID0gcG9zLT5sb25nX25hbWU7Ci0JCQluYW1lX2xlbiA9IHBvcy0+bG9uZ19uYW1lX2xlbiArIDE7Ci0JCX0KLQotCQllcnIgPSB3cml0ZV9idWlsZGlkKG5hbWUsIG5hbWVfbGVuLCBwb3MtPmJ1aWxkX2lkLAotCQkJCSAgICBwaWQsIG1pc2MsIGZkKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWFjaGluZV9fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgaW50IGZkKQotewotCWludCBlcnI7Ci0JdTE2IGttaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwsCi0JICAgIHVtaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOwotCi0JaWYgKCFtYWNoaW5lX19pc19ob3N0KG1hY2hpbmUpKSB7Ci0JCWttaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUw7Ci0JCXVtaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9VU0VSOwotCX0KLQotCWVyciA9IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZSgmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCwgbWFjaGluZSwKLQkJCQkJICBtYWNoaW5lLT5waWQsIGttaXNjLCBmZCk7Ci0JaWYgKGVyciA9PSAwKQotCQllcnIgPSBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkLAotCQkJCQkJICBtYWNoaW5lLCBtYWNoaW5lLT5waWQsIHVtaXNjLAotCQkJCQkJICBmZCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBkc29zX193cml0ZV9idWlsZGlkX3RhYmxlKHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyLCBpbnQgZmQpCi17Ci0Jc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbnRhaW5lcl9vZihoZWFkZXIsCi0JCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uLCBoZWFkZXIpOwotCXN0cnVjdCByYl9ub2RlICpuZDsKLQlpbnQgZXJyID0gbWFjaGluZV9fd3JpdGVfYnVpbGRpZF90YWJsZSgmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCwgZmQpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKLQkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7Ci0JCWVyciA9IG1hY2hpbmVfX3dyaXRlX2J1aWxkaWRfdGFibGUocG9zLCBmZCk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyLAotCQkJICBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX2thbGxzeW1zLCBib29sIGlzX3Zkc28pCi17Ci0JY29uc3Qgc2l6ZV90IHNpemUgPSBQQVRIX01BWDsKLQljaGFyICpyZWFsbmFtZSwgKmZpbGVuYW1lID0gemFsbG9jKHNpemUpLAotCSAgICAgKmxpbmtuYW1lID0gemFsbG9jKHNpemUpLCAqdGFyZ2V0bmFtZTsKLQlpbnQgbGVuLCBlcnIgPSAtMTsKLQlib29sIHNsYXNoID0gaXNfa2FsbHN5bXMgfHwgaXNfdmRzbzsKLQotCWlmIChpc19rYWxsc3ltcykgewotCQlpZiAoc3ltYm9sX2NvbmYua3B0cl9yZXN0cmljdCkgewotCQkJcHJfZGVidWcoIk5vdCBjYWNoaW5nIGEga3B0cl9yZXN0cmljdCdlZCAvcHJvYy9rYWxsc3ltc1xuIik7Ci0JCQllcnIgPSAwOwotCQkJZ290byBvdXRfZnJlZTsKLQkJfQotCQlyZWFsbmFtZSA9IChjaGFyICopIG5hbWU7Ci0JfSBlbHNlCi0JCXJlYWxuYW1lID0gcmVhbHBhdGgobmFtZSwgTlVMTCk7Ci0KLQlpZiAocmVhbG5hbWUgPT0gTlVMTCB8fCBmaWxlbmFtZSA9PSBOVUxMIHx8IGxpbmtuYW1lID09IE5VTEwpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlsZW4gPSBzY25wcmludGYoZmlsZW5hbWUsIHNpemUsICIlcyVzJXMiLAotCQkgICAgICAgZGVidWdkaXIsIHNsYXNoID8gIi8iIDogIiIsCi0JCSAgICAgICBpc192ZHNvID8gRFNPX19OQU1FX1ZEU08gOiByZWFsbmFtZSk7Ci0JaWYgKG1rZGlyX3AoZmlsZW5hbWUsIDA3NTUpKQotCQlnb3RvIG91dF9mcmVlOwotCi0Jc25wcmludGYoZmlsZW5hbWUgKyBsZW4sIHNpemUgLSBsZW4sICIvJXMiLCBzYnVpbGRfaWQpOwotCi0JaWYgKGFjY2VzcyhmaWxlbmFtZSwgRl9PSykpIHsKLQkJaWYgKGlzX2thbGxzeW1zKSB7Ci0JCQkgaWYgKGNvcHlmaWxlKCIvcHJvYy9rYWxsc3ltcyIsIGZpbGVuYW1lKSkKLQkJCQlnb3RvIG91dF9mcmVlOwotCQl9IGVsc2UgaWYgKGxpbmsocmVhbG5hbWUsIGZpbGVuYW1lKSAmJiBjb3B5ZmlsZShuYW1lLCBmaWxlbmFtZSkpCi0JCQlnb3RvIG91dF9mcmVlOwotCX0KLQotCWxlbiA9IHNjbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzIiwKLQkJICAgICAgIGRlYnVnZGlyLCBzYnVpbGRfaWQpOwotCi0JaWYgKGFjY2VzcyhsaW5rbmFtZSwgWF9PSykgJiYgbWtkaXJfcChsaW5rbmFtZSwgMDc1NSkpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlzbnByaW50ZihsaW5rbmFtZSArIGxlbiwgc2l6ZSAtIGxlbiwgIi8lcyIsIHNidWlsZF9pZCArIDIpOwotCXRhcmdldG5hbWUgPSBmaWxlbmFtZSArIHN0cmxlbihkZWJ1Z2RpcikgLSA1OwotCW1lbWNweSh0YXJnZXRuYW1lLCAiLi4vLi4iLCA1KTsKLQotCWlmIChzeW1saW5rKHRhcmdldG5hbWUsIGxpbmtuYW1lKSA9PSAwKQotCQllcnIgPSAwOwotb3V0X2ZyZWU6Ci0JaWYgKCFpc19rYWxsc3ltcykKLQkJZnJlZShyZWFsbmFtZSk7Ci0JZnJlZShmaWxlbmFtZSk7Ci0JZnJlZShsaW5rbmFtZSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBidWlsZF9pZF9jYWNoZV9fYWRkX2IoY29uc3QgdTggKmJ1aWxkX2lkLCBzaXplX3QgYnVpbGRfaWRfc2l6ZSwKLQkJCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVidWdkaXIsCi0JCQkJIGJvb2wgaXNfa2FsbHN5bXMsIGJvb2wgaXNfdmRzbykKLXsKLQljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwotCi0JYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIGJ1aWxkX2lkX3NpemUsIHNidWlsZF9pZCk7Ci0KLQlyZXR1cm4gYnVpbGRfaWRfY2FjaGVfX2FkZF9zKHNidWlsZF9pZCwgZGVidWdkaXIsIG5hbWUsCi0JCQkJICAgICBpc19rYWxsc3ltcywgaXNfdmRzbyk7Ci19Ci0KLWludCBidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX3MoY29uc3QgY2hhciAqc2J1aWxkX2lkLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKLXsKLQljb25zdCBzaXplX3Qgc2l6ZSA9IFBBVEhfTUFYOwotCWNoYXIgKmZpbGVuYW1lID0gemFsbG9jKHNpemUpLAotCSAgICAgKmxpbmtuYW1lID0gemFsbG9jKHNpemUpOwotCWludCBlcnIgPSAtMTsKLQotCWlmIChmaWxlbmFtZSA9PSBOVUxMIHx8IGxpbmtuYW1lID09IE5VTEwpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlzbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzLyVzIiwKLQkJIGRlYnVnZGlyLCBzYnVpbGRfaWQsIHNidWlsZF9pZCArIDIpOwotCi0JaWYgKGFjY2VzcyhsaW5rbmFtZSwgRl9PSykpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlpZiAocmVhZGxpbmsobGlua25hbWUsIGZpbGVuYW1lLCBzaXplIC0gMSkgPCAwKQotCQlnb3RvIG91dF9mcmVlOwotCi0JaWYgKHVubGluayhsaW5rbmFtZSkpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQkvKgotCSAqIFNpbmNlIHRoZSBsaW5rIGlzIHJlbGF0aXZlLCB3ZSBtdXN0IG1ha2UgaXQgYWJzb2x1dGU6Ci0JICovCi0Jc25wcmludGYobGlua25hbWUsIHNpemUsICIlcy8uYnVpbGQtaWQvJS4ycy8lcyIsCi0JCSBkZWJ1Z2Rpciwgc2J1aWxkX2lkLCBmaWxlbmFtZSk7Ci0KLQlpZiAodW5saW5rKGxpbmtuYW1lKSkKLQkJZ290byBvdXRfZnJlZTsKLQotCWVyciA9IDA7Ci1vdXRfZnJlZToKLQlmcmVlKGZpbGVuYW1lKTsKLQlmcmVlKGxpbmtuYW1lKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGRzb19fY2FjaGVfYnVpbGRfaWQoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKLQkJCSAgICAgICBjb25zdCBjaGFyICpkZWJ1Z2RpcikKLXsKLQlib29sIGlzX2thbGxzeW1zID0gZHNvLT5rZXJuZWwgJiYgZHNvLT5sb25nX25hbWVbMF0gIT0gJy8nOwotCWJvb2wgaXNfdmRzbyA9IGRzb19faXNfdmRzbyhkc28pOwotCWNvbnN0IGNoYXIgKm5hbWUgPSBkc28tPmxvbmdfbmFtZTsKLQljaGFyIG5tW1BBVEhfTUFYXTsKLQotCWlmIChkc29fX2lzX2tjb3JlKGRzbykpIHsKLQkJaXNfa2FsbHN5bXMgPSB0cnVlOwotCQltYWNoaW5lX19tbWFwX25hbWUobWFjaGluZSwgbm0sIHNpemVvZihubSkpOwotCQluYW1lID0gbm07Ci0JfQotCXJldHVybiBidWlsZF9pZF9jYWNoZV9fYWRkX2IoZHNvLT5idWlsZF9pZCwgc2l6ZW9mKGRzby0+YnVpbGRfaWQpLCBuYW1lLAotCQkJCSAgICAgZGVidWdkaXIsIGlzX2thbGxzeW1zLCBpc192ZHNvKTsKLX0KLQotc3RhdGljIGludCBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAotCQkJCSAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKLXsKLQlzdHJ1Y3QgZHNvICpwb3M7Ci0JaW50IGVyciA9IDA7Ci0KLQlkc29zX19mb3JfZWFjaF93aXRoX2J1aWxkX2lkKHBvcywgaGVhZCkKLQkJaWYgKGRzb19fY2FjaGVfYnVpbGRfaWQocG9zLCBtYWNoaW5lLCBkZWJ1Z2RpcikpCi0JCQllcnIgPSAtMTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgbWFjaGluZV9fY2FjaGVfYnVpbGRfaWRzKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKLXsKLQlpbnQgcmV0ID0gX19kc29zX19jYWNoZV9idWlsZF9pZHMoJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQsIG1hY2hpbmUsCi0JCQkJCSAgZGVidWdkaXIpOwotCXJldCB8PSBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcygmbWFjaGluZS0+dXNlcl9kc29zLmhlYWQsIG1hY2hpbmUsCi0JCQkJICAgICAgIGRlYnVnZGlyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fY2FjaGVfYnVpbGRfaWRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0Jc3RydWN0IHJiX25vZGUgKm5kOwotCWludCByZXQ7Ci0JY2hhciBkZWJ1Z2RpcltQQVRIX01BWF07Ci0KLQlzbnByaW50ZihkZWJ1Z2Rpciwgc2l6ZW9mKGRlYnVnZGlyKSwgIiVzIiwgYnVpbGRpZF9kaXIpOwotCi0JaWYgKG1rZGlyKGRlYnVnZGlyLCAwNzU1KSAhPSAwICYmIGVycm5vICE9IEVFWElTVCkKLQkJcmV0dXJuIC0xOwotCi0JcmV0ID0gbWFjaGluZV9fY2FjaGVfYnVpbGRfaWRzKCZzZXNzaW9uLT5tYWNoaW5lcy5ob3N0LCBkZWJ1Z2Rpcik7Ci0KLQlmb3IgKG5kID0gcmJfZmlyc3QoJnNlc3Npb24tPm1hY2hpbmVzLmd1ZXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7Ci0JCXN0cnVjdCBtYWNoaW5lICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IG1hY2hpbmUsIHJiX25vZGUpOwotCQlyZXQgfD0gbWFjaGluZV9fY2FjaGVfYnVpbGRfaWRzKHBvcywgZGVidWdkaXIpOwotCX0KLQlyZXR1cm4gcmV0ID8gLTEgOiAwOwotfQotCi1zdGF0aWMgYm9vbCBtYWNoaW5lX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgYm9vbCB3aXRoX2hpdHMpCi17Ci0JYm9vbCByZXQ7Ci0KLQlyZXQgID0gX19kc29zX19yZWFkX2J1aWxkX2lkcygmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCwgd2l0aF9oaXRzKTsKLQlyZXQgfD0gX19kc29zX19yZWFkX2J1aWxkX2lkcygmbWFjaGluZS0+dXNlcl9kc29zLmhlYWQsIHdpdGhfaGl0cyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGJvb2wgcGVyZl9zZXNzaW9uX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBib29sIHdpdGhfaGl0cykKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmQ7Ci0JYm9vbCByZXQgPSBtYWNoaW5lX19yZWFkX2J1aWxkX2lkcygmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCwgd2l0aF9oaXRzKTsKLQotCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKLQkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7Ci0JCXJldCB8PSBtYWNoaW5lX19yZWFkX2J1aWxkX2lkcyhwb3MsIHdpdGhfaGl0cyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCB3cml0ZV90cmFjaW5nX2RhdGEoaW50IGZkLCBzdHJ1Y3QgcGVyZl9oZWFkZXIgKmggX19tYXliZV91bnVzZWQsCiAJCQkgICAgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCiB7CkBAIC01MjMsMTMgKzE4NCwxMiBAQAogCWlmICghcGVyZl9zZXNzaW9uX19yZWFkX2J1aWxkX2lkcyhzZXNzaW9uLCB0cnVlKSkKIAkJcmV0dXJuIC0xOwogCi0JZXJyID0gZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShoLCBmZCk7CisJZXJyID0gcGVyZl9zZXNzaW9uX193cml0ZV9idWlsZGlkX3RhYmxlKHNlc3Npb24sIGZkKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHdyaXRlIGJ1aWxkaWQgdGFibGVcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlpZiAoIW5vX2J1aWxkaWRfY2FjaGUpCi0JCXBlcmZfc2Vzc2lvbl9fY2FjaGVfYnVpbGRfaWRzKHNlc3Npb24pOworCXBlcmZfc2Vzc2lvbl9fY2FjaGVfYnVpbGRfaWRzKHNlc3Npb24pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MDEsOCArMjYxLDEwIEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJcmV0ID0gLTE7CiAJCWdvdG8gZG9uZTsKKwl9CiAKIAlzID0gYnVmOwogCkBAIC05NjUsNyArNjI3LDggQEAKIAkJbiA9IHNzY2FuZihidWYsICIlKnMgJSJQUkl1NjQsICZtZW0pOwogCQlpZiAobiA9PSAxKQogCQkJcmV0ID0gZG9fd3JpdGUoZmQsICZtZW0sIHNpemVvZihtZW0pKTsKLQl9CisJfSBlbHNlCisJCXJldCA9IC0xOwogCWZyZWUoYnVmKTsKIAlmY2xvc2UoZnApOwogCXJldHVybiByZXQ7CkBAIC0xNjAzLDcgKzEyNjYsNyBAQAogCiAJCWRzb19fc2V0X2J1aWxkX2lkKGRzbywgJmJldi0+YnVpbGRfaWQpOwogCi0JCWlmIChmaWxlbmFtZVswXSA9PSAnWycpCisJCWlmICghaXNfa2VybmVsX21vZHVsZShmaWxlbmFtZSwgTlVMTCkpCiAJCQlkc28tPmtlcm5lbCA9IGRzb190eXBlOwogCiAJCWJ1aWxkX2lkX19zcHJpbnRmKGRzby0+YnVpbGRfaWQsIHNpemVvZihkc28tPmJ1aWxkX2lkKSwKQEAgLTI0NzcsNiArMjE0MCw3IEBACiAJWzFdID0gUEVSRl9BVFRSX1NJWkVfVkVSMSwKIAlbMl0gPSBQRVJGX0FUVFJfU0laRV9WRVIyLAogCVszXSA9IFBFUkZfQVRUUl9TSVpFX1ZFUjMsCisJWzRdID0gUEVSRl9BVFRSX1NJWkVfVkVSNCwKIAkwLAogfTsKIApAQCAtMzEyNCw4ICsyNzg4LDMgQEAKIAkJCQkgc2Vzc2lvbik7CiAJcmV0dXJuIDA7CiB9Ci0KLXZvaWQgZGlzYWJsZV9idWlsZGlkX2NhY2hlKHZvaWQpCi17Ci0Jbm9fYnVpbGRpZF9jYWNoZSA9IHRydWU7Ci19CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmggYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKaW5kZXggOGY1Y2JhZS4uM2JiOTBhYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaApAQCAtMTIyLDEwICsxMjIsNiBAQAogCiBpbnQgcGVyZl9oZWFkZXJfX2ZwcmludGZfaW5mbyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzLCBGSUxFICpmcCwgYm9vbCBmdWxsKTsKIAotaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyLAotCQkJICBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX2thbGxzeW1zLCBib29sIGlzX3Zkc28pOwotaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKTsKLQogaW50IHBlcmZfZXZlbnRfX3N5bnRoZXNpemVfYXR0cihzdHJ1Y3QgcGVyZl90b29sICp0b29sLAogCQkJCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsIHUzMiBpZHMsIHU2NCAqaWQsCiAJCQkJcGVyZl9ldmVudF9faGFuZGxlcl90IHByb2Nlc3MpOwpAQCAtMTUxLDcgKzE0Nyw5IEBACiAJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogYm9vbCBpc19wZXJmX21hZ2ljKHU2NCBtYWdpYyk7CiAKLWludCBkc29zX19oaXRfYWxsKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworI2RlZmluZSBOQU1FX0FMSUdOIDY0CisKK2ludCB3cml0ZV9wYWRkZWQoaW50IGZkLCBjb25zdCB2b2lkICpiZiwgc2l6ZV90IGNvdW50LCBzaXplX3QgY291bnRfYWxpZ25lZCk7CiAKIC8qCiAgKiBhcmNoIHNwZWNpZmljIGNhbGxiYWNrCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRtYXAuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCmluZGV4IDAxZmZkMTIuLjQwYmQyMTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCkBAIC00Niw0ICs0NiwyMSBAQAogCQlfX2JpdG1hcF9vcihkc3QsIHNyYzEsIHNyYzIsIG5iaXRzKTsKIH0KIAorLyoqCisgKiB0ZXN0X2FuZF9zZXRfYml0IC0gU2V0IGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gc2V0CisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVF9NQVNLKG5yKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRfV09SRChucik7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisKKwlvbGQgPSAqcDsKKwkqcCA9IG9sZCB8IG1hc2s7CisKKwlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7Cit9CisKICNlbmRpZiAvKiBfUEVSRl9CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaAppbmRleCBkYWRmYTdlLi5jMzI5NDE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaApAQCAtMTUsNiArMTUsOCBAQAogI2RlZmluZSBCSVRTX1RPX1U2NChucikgICAgICAgICBESVZfUk9VTkRfVVAobnIsIEJJVFNfUEVSX0JZVEUgKiBzaXplb2YodTY0KSkKICNkZWZpbmUgQklUU19UT19VMzIobnIpICAgICAgICAgRElWX1JPVU5EX1VQKG5yLCBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHUzMikpCiAjZGVmaW5lIEJJVFNfVE9fQllURVMobnIpICAgICAgIERJVl9ST1VORF9VUChuciwgQklUU19QRVJfQllURSkKKyNkZWZpbmUgQklUX1dPUkQobnIpICAgICAgICAgICAgKChucikgLyBCSVRTX1BFUl9MT05HKQorI2RlZmluZSBCSVRfTUFTSyhucikgICAgICAgICAgICAoMVVMIDw8ICgobnIpICUgQklUU19QRVJfTE9ORykpCiAKICNkZWZpbmUgZm9yX2VhY2hfc2V0X2JpdChiaXQsIGFkZHIsIHNpemUpIFwKIAlmb3IgKChiaXQpID0gZmluZF9maXJzdF9iaXQoKGFkZHIpLCAoc2l6ZSkpOwkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmMKaW5kZXggMzRmYzdjOC4uMTVkZDBhOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuYworKysgYi90b29scy9wZXJmL3V0aWwvbWFjaGluZS5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUgPHN5bWJvbC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgInVud2luZC5oIgorI2luY2x1ZGUgImxpbnV4L2hhc2guaCIKIAogc3RhdGljIHZvaWQgZHNvc19faW5pdChzdHJ1Y3QgZHNvcyAqZHNvcykKIHsKQEAgLTIxLDcgKzIyLDcgQEAKIAogaW50IG1hY2hpbmVfX2luaXQoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGNvbnN0IGNoYXIgKnJvb3RfZGlyLCBwaWRfdCBwaWQpCiB7Ci0JbWFwX2dyb3Vwc19faW5pdCgmbWFjaGluZS0+a21hcHMpOworCW1hcF9ncm91cHNfX2luaXQoJm1hY2hpbmUtPmttYXBzLCBtYWNoaW5lKTsKIAlSQl9DTEVBUl9OT0RFKCZtYWNoaW5lLT5yYl9ub2RlKTsKIAlkc29zX19pbml0KCZtYWNoaW5lLT51c2VyX2Rzb3MpOwogCWRzb3NfX2luaXQoJm1hY2hpbmUtPmtlcm5lbF9kc29zKTsKQEAgLTMyLDcgKzMzLDYgQEAKIAogCW1hY2hpbmUtPnZkc29faW5mbyA9IE5VTEw7CiAKLQltYWNoaW5lLT5rbWFwcy5tYWNoaW5lID0gbWFjaGluZTsKIAltYWNoaW5lLT5waWQgPSBwaWQ7CiAKIAltYWNoaW5lLT5zeW1ib2xfZmlsdGVyID0gTlVMTDsKQEAgLTMxOSw3ICszMTksNyBAQAogCQlnb3RvIG91dF9lcnI7CiAKIAlpZiAoIWxlYWRlci0+bWcpCi0JCWxlYWRlci0+bWcgPSBtYXBfZ3JvdXBzX19uZXcoKTsKKwkJbGVhZGVyLT5tZyA9IG1hcF9ncm91cHNfX25ldyhtYWNoaW5lKTsKIAogCWlmICghbGVhZGVyLT5tZykKIAkJZ290byBvdXRfZXJyOwpAQCAtNDY1LDYgKzQ2NSw3IEBACiB7CiAJc3RydWN0IG1hcCAqbWFwOwogCXN0cnVjdCBkc28gKmRzbyA9IF9fZHNvc19fZmluZG5ldygmbWFjaGluZS0+a2VybmVsX2Rzb3MsIGZpbGVuYW1lKTsKKwlib29sIGNvbXByZXNzZWQ7CiAKIAlpZiAoZHNvID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtNDc3LDYgKzQ3OCwxMSBAQAogCQlkc28tPnN5bXRhYl90eXBlID0gRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFOwogCWVsc2UKIAkJZHNvLT5zeW10YWJfdHlwZSA9IERTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRTsKKworCS8qIF9LTU9EVUxFX0NPTVAgc2hvdWxkIGJlIG5leHQgdG8gX0tNT0RVTEUgKi8KKwlpZiAoaXNfa2VybmVsX21vZHVsZShmaWxlbmFtZSwgJmNvbXByZXNzZWQpICYmIGNvbXByZXNzZWQpCisJCWRzby0+c3ltdGFiX3R5cGUrKzsKKwogCW1hcF9ncm91cHNfX2luc2VydCgmbWFjaGluZS0+a21hcHMsIG1hcCk7CiAJcmV0dXJuIG1hcDsKIH0KQEAgLTg2Miw4ICs4NjgsMTQgQEAKIAkJCXN0cnVjdCBtYXAgKm1hcDsKIAkJCWNoYXIgKmxvbmdfbmFtZTsKIAotCQkJaWYgKGRvdCA9PSBOVUxMIHx8IHN0cmNtcChkb3QsICIua28iKSkKKwkJCWlmIChkb3QgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKKworCQkJLyogT24gc29tZSBzeXN0ZW0sIG1vZHVsZXMgYXJlIGNvbXByZXNzZWQgbGlrZSAua28uZ3ogKi8KKwkJCWlmIChpc19zdXBwb3J0ZWRfY29tcHJlc3Npb24oZG90ICsgMSkgJiYKKwkJCSAgICBpc19rbW9kdWxlX2V4dGVuc2lvbihkb3QgLSAyKSkKKwkJCQlkb3QgLT0gMzsKKwogCQkJc25wcmludGYoZHNvX25hbWUsIHNpemVvZihkc29fbmFtZSksICJbJS4qc10iLAogCQkJCSAoaW50KShkb3QgLSBkZW50LT5kX25hbWUpLCBkZW50LT5kX25hbWUpOwogCkBAIC0xMDQ1LDYgKzEwNTcsMTEgQEAKIAkJCWRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKIAkJCWlmIChkb3QgPT0gTlVMTCkKIAkJCQlnb3RvIG91dF9wcm9ibGVtOworCQkJLyogT24gc29tZSBzeXN0ZW0sIG1vZHVsZXMgYXJlIGNvbXByZXNzZWQgbGlrZSAua28uZ3ogKi8KKwkJCWlmIChpc19zdXBwb3J0ZWRfY29tcHJlc3Npb24oZG90ICsgMSkpCisJCQkJZG90IC09IDM7CisJCQlpZiAoIWlzX2ttb2R1bGVfZXh0ZW5zaW9uKGRvdCArIDEpKQorCQkJCWdvdG8gb3V0X3Byb2JsZW07CiAJCQlzbnByaW50ZihzaG9ydF9tb2R1bGVfbmFtZSwgc2l6ZW9mKHNob3J0X21vZHVsZV9uYW1lKSwKIAkJCQkJIlslLipzXSIsIChpbnQpKGRvdCAtIG5hbWUpLCBuYW1lKTsKIAkJCXN0cnhmcmNoYXIoc2hvcnRfbW9kdWxlX25hbWUsICctJywgJ18nKTsKQEAgLTEwNjksOCArMTA4NiwyMCBAQAogCQkgKiBTaG91bGQgYmUgdGhlcmUgYWxyZWFkeSwgZnJvbSB0aGUgYnVpbGQtaWQgdGFibGUgaW4KIAkJICogdGhlIGhlYWRlci4KIAkJICovCi0JCXN0cnVjdCBkc28gKmtlcm5lbCA9IF9fZHNvc19fZmluZG5ldygmbWFjaGluZS0+a2VybmVsX2Rzb3MsCi0JCQkJCQkgICAgIGttbWFwX3ByZWZpeCk7CisJCXN0cnVjdCBkc28gKmtlcm5lbCA9IE5VTEw7CisJCXN0cnVjdCBkc28gKmRzbzsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRzbywgJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQsIG5vZGUpIHsKKwkJCWlmIChpc19rZXJuZWxfbW9kdWxlKGRzby0+bG9uZ19uYW1lLCBOVUxMKSkKKwkJCQljb250aW51ZTsKKworCQkJa2VybmVsID0gZHNvOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoa2VybmVsID09IE5VTEwpCisJCQlrZXJuZWwgPSBfX2Rzb3NfX2ZpbmRuZXcoJm1hY2hpbmUtPmtlcm5lbF9kc29zLAorCQkJCQkJIGttbWFwX3ByZWZpeCk7CiAJCWlmIChrZXJuZWwgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X3Byb2JsZW07CiAKQEAgLTEwNzgsNiArMTEwNyw5IEBACiAJCWlmIChfX21hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhtYWNoaW5lLCBrZXJuZWwpIDwgMCkKIAkJCWdvdG8gb3V0X3Byb2JsZW07CiAKKwkJaWYgKHN0cnN0cihrZXJuZWwtPmxvbmdfbmFtZSwgInZtbGludXgiKSkKKwkJCWRzb19fc2V0X3Nob3J0X25hbWUoa2VybmVsLCAiW2tlcm5lbC52bWxpbnV4XSIsIGZhbHNlKTsKKwogCQltYWNoaW5lX19zZXRfa2VybmVsX21tYXBfbGVuKG1hY2hpbmUsIGV2ZW50KTsKIAogCQkvKgpAQCAtMTI5MCw3ICsxMzIyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXBfX3Jlc29sdmVfYW1zKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCitzdGF0aWMgdm9pZCBpcF9fcmVzb2x2ZV9hbXMoc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJICAgIHN0cnVjdCBhZGRyX21hcF9zeW1ib2wgKmFtcywKIAkJCSAgICB1NjQgaXApCiB7CkBAIC0xMzA0LDcgKzEzMzYsNyBAQAogCSAqIFRodXMsIHdlIGhhdmUgdG8gdHJ5IGNvbnNlY3V0aXZlbHkgdW50aWwgd2UgZmluZCBhIG1hdGNoCiAJICogb3IgZWxzZSwgdGhlIHN5bWJvbCBpcyB1bmtub3duCiAJICovCi0JdGhyZWFkX19maW5kX2NwdW1vZGVfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG1hY2hpbmUsIE1BUF9fRlVOQ1RJT04sIGlwLCAmYWwpOworCXRocmVhZF9fZmluZF9jcHVtb2RlX2FkZHJfbG9jYXRpb24odGhyZWFkLCBNQVBfX0ZVTkNUSU9OLCBpcCwgJmFsKTsKIAogCWFtcy0+YWRkciA9IGlwOwogCWFtcy0+YWxfYWRkciA9IGFsLmFkZHI7CkBAIC0xMzEyLDIzICsxMzQ0LDIxIEBACiAJYW1zLT5tYXAgPSBhbC5tYXA7CiB9CiAKLXN0YXRpYyB2b2lkIGlwX19yZXNvbHZlX2RhdGEoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKK3N0YXRpYyB2b2lkIGlwX19yZXNvbHZlX2RhdGEoc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJICAgICB1OCBtLCBzdHJ1Y3QgYWRkcl9tYXBfc3ltYm9sICphbXMsIHU2NCBhZGRyKQogewogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCiAJbWVtc2V0KCZhbCwgMCwgc2l6ZW9mKGFsKSk7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG1hY2hpbmUsIG0sIE1BUF9fVkFSSUFCTEUsIGFkZHIsCi0JCQkJICAgJmFsKTsKKwl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG0sIE1BUF9fVkFSSUFCTEUsIGFkZHIsICZhbCk7CiAJaWYgKGFsLm1hcCA9PSBOVUxMKSB7CiAJCS8qCiAJCSAqIHNvbWUgc2hhcmVkIGRhdGEgcmVnaW9ucyBoYXZlIGV4ZWN1dGUgYml0IHNldCB3aGljaCBwdXRzCiAJCSAqIHRoZWlyIG1hcHBpbmcgaW4gdGhlIE1BUF9fRlVOQ1RJT04gdHlwZSBhcnJheS4KIAkJICogQ2hlY2sgdGhlcmUgYXMgYSBmYWxsYmFjayBvcHRpb24gYmVmb3JlIGRyb3BwaW5nIHRoZSBzYW1wbGUuCiAJCSAqLwotCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG1hY2hpbmUsIG0sIE1BUF9fRlVOQ1RJT04sIGFkZHIsCi0JCQkJCSAgICZhbCk7CisJCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgbSwgTUFQX19GVU5DVElPTiwgYWRkciwgJmFsKTsKIAl9CiAKIAlhbXMtPmFkZHIgPSBhZGRyOwpAQCAtMTM0NSwxNCArMTM3NSw0NSBAQAogCWlmICghbWkpCiAJCXJldHVybiBOVUxMOwogCi0JaXBfX3Jlc29sdmVfYW1zKGFsLT5tYWNoaW5lLCBhbC0+dGhyZWFkLCAmbWktPmlhZGRyLCBzYW1wbGUtPmlwKTsKLQlpcF9fcmVzb2x2ZV9kYXRhKGFsLT5tYWNoaW5lLCBhbC0+dGhyZWFkLCBhbC0+Y3B1bW9kZSwKLQkJCSAmbWktPmRhZGRyLCBzYW1wbGUtPmFkZHIpOworCWlwX19yZXNvbHZlX2FtcyhhbC0+dGhyZWFkLCAmbWktPmlhZGRyLCBzYW1wbGUtPmlwKTsKKwlpcF9fcmVzb2x2ZV9kYXRhKGFsLT50aHJlYWQsIGFsLT5jcHVtb2RlLCAmbWktPmRhZGRyLCBzYW1wbGUtPmFkZHIpOwogCW1pLT5kYXRhX3NyYy52YWwgPSBzYW1wbGUtPmRhdGFfc3JjOwogCiAJcmV0dXJuIG1pOwogfQogCitzdGF0aWMgaW50IGFkZF9jYWxsY2hhaW5faXAoc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJICAgIHN0cnVjdCBzeW1ib2wgKipwYXJlbnQsCisJCQkgICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKnJvb3RfYWwsCisJCQkgICAgaW50IGNwdW1vZGUsCisJCQkgICAgdTY0IGlwKQoreworCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOworCisJYWwuZmlsdGVyZWQgPSAwOworCWFsLnN5bSA9IE5VTEw7CisJaWYgKGNwdW1vZGUgPT0gLTEpCisJCXRocmVhZF9fZmluZF9jcHVtb2RlX2FkZHJfbG9jYXRpb24odGhyZWFkLCBNQVBfX0ZVTkNUSU9OLAorCQkJCQkJICAgaXAsICZhbCk7CisJZWxzZQorCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sCisJCQkJICAgaXAsICZhbCk7CisJaWYgKGFsLnN5bSAhPSBOVUxMKSB7CisJCWlmIChzb3J0X19oYXNfcGFyZW50ICYmICEqcGFyZW50ICYmCisJCSAgICBzeW1ib2xfX21hdGNoX3JlZ2V4KGFsLnN5bSwgJnBhcmVudF9yZWdleCkpCisJCQkqcGFyZW50ID0gYWwuc3ltOworCQllbHNlIGlmIChoYXZlX2lnbm9yZV9jYWxsZWVzICYmIHJvb3RfYWwgJiYKKwkJICBzeW1ib2xfX21hdGNoX3JlZ2V4KGFsLnN5bSwgJmlnbm9yZV9jYWxsZWVzX3JlZ2V4KSkgeworCQkJLyogVHJlYXQgdGhpcyBzeW1ib2wgYXMgdGhlIHJvb3QsCisJCQkgICBmb3JnZXR0aW5nIGl0cyBjYWxsZWVzLiAqLworCQkJKnJvb3RfYWwgPSBhbDsKKwkJCWNhbGxjaGFpbl9jdXJzb3JfcmVzZXQoJmNhbGxjaGFpbl9jdXJzb3IpOworCQl9CisJfQorCisJcmV0dXJuIGNhbGxjaGFpbl9jdXJzb3JfYXBwZW5kKCZjYWxsY2hhaW5fY3Vyc29yLCBhbC5hZGRyLCBhbC5tYXAsIGFsLnN5bSk7Cit9CisKIHN0cnVjdCBicmFuY2hfaW5mbyAqc2FtcGxlX19yZXNvbHZlX2JzdGFjayhzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKIAkJCQkJICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKQogewpAQCAtMTM2NCwxNiArMTQyNSw1NyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBicy0+bnI7IGkrKykgewotCQlpcF9fcmVzb2x2ZV9hbXMoYWwtPm1hY2hpbmUsIGFsLT50aHJlYWQsICZiaVtpXS50bywgYnMtPmVudHJpZXNbaV0udG8pOwotCQlpcF9fcmVzb2x2ZV9hbXMoYWwtPm1hY2hpbmUsIGFsLT50aHJlYWQsICZiaVtpXS5mcm9tLCBicy0+ZW50cmllc1tpXS5mcm9tKTsKKwkJaXBfX3Jlc29sdmVfYW1zKGFsLT50aHJlYWQsICZiaVtpXS50bywgYnMtPmVudHJpZXNbaV0udG8pOworCQlpcF9fcmVzb2x2ZV9hbXMoYWwtPnRocmVhZCwgJmJpW2ldLmZyb20sIGJzLT5lbnRyaWVzW2ldLmZyb20pOwogCQliaVtpXS5mbGFncyA9IGJzLT5lbnRyaWVzW2ldLmZsYWdzOwogCX0KIAlyZXR1cm4gYmk7CiB9CiAKLXN0YXRpYyBpbnQgbWFjaGluZV9fcmVzb2x2ZV9jYWxsY2hhaW5fc2FtcGxlKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJCQkgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKyNkZWZpbmUgQ0hBU0hTWiAxMjcKKyNkZWZpbmUgQ0hBU0hCSVRTIDcKKyNkZWZpbmUgTk9fRU5UUlkgMHhmZgorCisjZGVmaW5lIFBFUkZfTUFYX0JSQU5DSF9ERVBUSCAxMjcKKworLyogUmVtb3ZlIGxvb3BzLiAqLworc3RhdGljIGludCByZW1vdmVfbG9vcHMoc3RydWN0IGJyYW5jaF9lbnRyeSAqbCwgaW50IG5yKQoreworCWludCBpLCBqLCBvZmY7CisJdW5zaWduZWQgY2hhciBjaGFzaFtDSEFTSFNaXTsKKworCW1lbXNldChjaGFzaCwgTk9fRU5UUlksIHNpemVvZihjaGFzaCkpOworCisJQlVHX09OKFBFUkZfTUFYX0JSQU5DSF9ERVBUSCA+IDI1NSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlpbnQgaCA9IGhhc2hfNjQobFtpXS5mcm9tLCBDSEFTSEJJVFMpICUgQ0hBU0hTWjsKKworCQkvKiBubyBjb2xsaXNpb24gaGFuZGxpbmcgZm9yIG5vdyAqLworCQlpZiAoY2hhc2hbaF0gPT0gTk9fRU5UUlkpIHsKKwkJCWNoYXNoW2hdID0gaTsKKwkJfSBlbHNlIGlmIChsW2NoYXNoW2hdXS5mcm9tID09IGxbaV0uZnJvbSkgeworCQkJYm9vbCBpc19sb29wID0gdHJ1ZTsKKwkJCS8qIGNoZWNrIGlmIGl0IGlzIGEgcmVhbCBsb29wICovCisJCQlvZmYgPSAwOworCQkJZm9yIChqID0gY2hhc2hbaF07IGogPCBpICYmIGkgKyBvZmYgPCBucjsgaisrLCBvZmYrKykKKwkJCQlpZiAobFtqXS5mcm9tICE9IGxbaSArIG9mZl0uZnJvbSkgeworCQkJCQlpc19sb29wID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWlmIChpc19sb29wKSB7CisJCQkJbWVtbW92ZShsICsgaSwgbCArIGkgKyBvZmYsCisJCQkJCShuciAtIChpICsgb2ZmKSkgKiBzaXplb2YoKmwpKTsKKwkJCQluciAtPSBvZmY7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIG5yOworfQorCitzdGF0aWMgaW50IHRocmVhZF9fcmVzb2x2ZV9jYWxsY2hhaW5fc2FtcGxlKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCQkJICAgICBzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwKKwkJCQkJICAgICBzdHJ1Y3QgYnJhbmNoX3N0YWNrICpicmFuY2gsCiAJCQkJCSAgICAgc3RydWN0IHN5bWJvbCAqKnBhcmVudCwKIAkJCQkJICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqcm9vdF9hbCwKIAkJCQkJICAgICBpbnQgbWF4X3N0YWNrKQpAQCAtMTM4MywyNCArMTQ4NSw4MyBAQAogCWludCBpOwogCWludCBqOwogCWludCBlcnI7Ci0JaW50IHNraXBfaWR4IF9fbWF5YmVfdW51c2VkOwotCi0JY2FsbGNoYWluX2N1cnNvcl9yZXNldCgmY2FsbGNoYWluX2N1cnNvcik7Ci0KLQlpZiAoY2hhaW4tPm5yID4gUEVSRl9NQVhfU1RBQ0tfREVQVEgpIHsKLQkJcHJfd2FybmluZygiY29ycnVwdGVkIGNhbGxjaGFpbi4gc2tpcHBpbmcuLi5cbiIpOwotCQlyZXR1cm4gMDsKLQl9CisJaW50IHNraXBfaWR4ID0gLTE7CisJaW50IGZpcnN0X2NhbGwgPSAwOwogCiAJLyoKIAkgKiBCYXNlZCBvbiBEV0FSRiBkZWJ1ZyBpbmZvcm1hdGlvbiwgc29tZSBhcmNoaXRlY3R1cmVzIHNraXAKIAkgKiBhIGNhbGxjaGFpbiBlbnRyeSBzYXZlZCBieSB0aGUga2VybmVsLgogCSAqLwotCXNraXBfaWR4ID0gYXJjaF9za2lwX2NhbGxjaGFpbl9pZHgobWFjaGluZSwgdGhyZWFkLCBjaGFpbik7CisJaWYgKGNoYWluLT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKQorCQlza2lwX2lkeCA9IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHRocmVhZCwgY2hhaW4pOwogCi0JZm9yIChpID0gMDsgaSA8IGNoYWluX25yOyBpKyspIHsKKwljYWxsY2hhaW5fY3Vyc29yX3Jlc2V0KCZjYWxsY2hhaW5fY3Vyc29yKTsKKworCS8qCisJICogQWRkIGJyYW5jaGVzIHRvIGNhbGwgc3RhY2sgZm9yIGVhc2llciBicm93c2luZy4gVGhpcyBnaXZlcworCSAqIG1vcmUgY29udGV4dCBmb3IgYSBzYW1wbGUgdGhhbiBqdXN0IHRoZSBjYWxsZXJzLgorCSAqCisJICogVGhpcyB1c2VzIGluZGl2aWR1YWwgaGlzdG9ncmFtcyBvZiBwYXRocyBjb21wYXJlZCB0byB0aGUKKwkgKiBhZ2dyZWdhdGVkIGhpc3RvZ3JhbXMgdGhlIG5vcm1hbCBMQlIgbW9kZSB1c2VzLgorCSAqCisJICogTGltaXRhdGlvbnMgZm9yIG5vdzoKKwkgKiAtIE5vIGV4dHJhIGZpbHRlcnMKKwkgKiAtIE5vIGFubm90YXRpb25zIChzaG91bGQgYW5ub3RhdGUgc29tZWhvdykKKwkgKi8KKworCWlmIChicmFuY2ggJiYgY2FsbGNoYWluX3BhcmFtLmJyYW5jaF9jYWxsc3RhY2spIHsKKwkJaW50IG5yID0gbWluKG1heF9zdGFjaywgKGludClicmFuY2gtPm5yKTsKKwkJc3RydWN0IGJyYW5jaF9lbnRyeSBiZVtucl07CisKKwkJaWYgKGJyYW5jaC0+bnIgPiBQRVJGX01BWF9CUkFOQ0hfREVQVEgpIHsKKwkJCXByX3dhcm5pbmcoImNvcnJ1cHRlZCBicmFuY2ggY2hhaW4uIHNraXBwaW5nLi4uXG4iKTsKKwkJCWdvdG8gY2hlY2tfY2FsbHM7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQkJaWYgKGNhbGxjaGFpbl9wYXJhbS5vcmRlciA9PSBPUkRFUl9DQUxMRUUpIHsKKwkJCQliZVtpXSA9IGJyYW5jaC0+ZW50cmllc1tpXTsKKwkJCQkvKgorCQkJCSAqIENoZWNrIGZvciBvdmVybGFwIGludG8gdGhlIGNhbGxjaGFpbi4KKwkJCQkgKiBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb25lIG9mZiBjb21wYXJlZCB0bworCQkJCSAqIHRoZSBicmFuY2ggZW50cnkuIFRvIGFkanVzdCBmb3IgdGhpcworCQkJCSAqIGFzc3VtZSB0aGUgY2FsbGluZyBpbnN0cnVjdGlvbiBpcyBub3QgbG9uZ2VyCisJCQkJICogdGhhbiA4IGJ5dGVzLgorCQkJCSAqLworCQkJCWlmIChpID09IHNraXBfaWR4IHx8CisJCQkJICAgIGNoYWluLT5pcHNbZmlyc3RfY2FsbF0gPj0gUEVSRl9DT05URVhUX01BWCkKKwkJCQkJZmlyc3RfY2FsbCsrOworCQkJCWVsc2UgaWYgKGJlW2ldLmZyb20gPCBjaGFpbi0+aXBzW2ZpcnN0X2NhbGxdICYmCisJCQkJICAgIGJlW2ldLmZyb20gPj0gY2hhaW4tPmlwc1tmaXJzdF9jYWxsXSAtIDgpCisJCQkJCWZpcnN0X2NhbGwrKzsKKwkJCX0gZWxzZQorCQkJCWJlW2ldID0gYnJhbmNoLT5lbnRyaWVzW2JyYW5jaC0+bnIgLSBpIC0gMV07CisJCX0KKworCQluciA9IHJlbW92ZV9sb29wcyhiZSwgbnIpOworCisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCQllcnIgPSBhZGRfY2FsbGNoYWluX2lwKHRocmVhZCwgcGFyZW50LCByb290X2FsLAorCQkJCQkgICAgICAgLTEsIGJlW2ldLnRvKTsKKwkJCWlmICghZXJyKQorCQkJCWVyciA9IGFkZF9jYWxsY2hhaW5faXAodGhyZWFkLCBwYXJlbnQsIHJvb3RfYWwsCisJCQkJCQkgICAgICAgLTEsIGJlW2ldLmZyb20pOworCQkJaWYgKGVyciA9PSAtRUlOVkFMKQorCQkJCWJyZWFrOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJCWNoYWluX25yIC09IG5yOworCX0KKworY2hlY2tfY2FsbHM6CisJaWYgKGNoYWluLT5uciA+IFBFUkZfTUFYX1NUQUNLX0RFUFRIKSB7CisJCXByX3dhcm5pbmcoImNvcnJ1cHRlZCBjYWxsY2hhaW4uIHNraXBwaW5nLi4uXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChpID0gZmlyc3RfY2FsbDsgaSA8IGNoYWluX25yOyBpKyspIHsKIAkJdTY0IGlwOwotCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAogCQlpZiAoY2FsbGNoYWluX3BhcmFtLm9yZGVyID09IE9SREVSX0NBTExFRSkKIAkJCWogPSBpOwpAQCAtMTQzNywyNCArMTU5OCwxMCBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlhbC5maWx0ZXJlZCA9IDA7Ci0JCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgbWFjaGluZSwgY3B1bW9kZSwKLQkJCQkJICAgTUFQX19GVU5DVElPTiwgaXAsICZhbCk7Ci0JCWlmIChhbC5zeW0gIT0gTlVMTCkgewotCQkJaWYgKHNvcnRfX2hhc19wYXJlbnQgJiYgISpwYXJlbnQgJiYKLQkJCSAgICBzeW1ib2xfX21hdGNoX3JlZ2V4KGFsLnN5bSwgJnBhcmVudF9yZWdleCkpCi0JCQkJKnBhcmVudCA9IGFsLnN5bTsKLQkJCWVsc2UgaWYgKGhhdmVfaWdub3JlX2NhbGxlZXMgJiYgcm9vdF9hbCAmJgotCQkJICBzeW1ib2xfX21hdGNoX3JlZ2V4KGFsLnN5bSwgJmlnbm9yZV9jYWxsZWVzX3JlZ2V4KSkgewotCQkJCS8qIFRyZWF0IHRoaXMgc3ltYm9sIGFzIHRoZSByb290LAotCQkJCSAgIGZvcmdldHRpbmcgaXRzIGNhbGxlZXMuICovCi0JCQkJKnJvb3RfYWwgPSBhbDsKLQkJCQljYWxsY2hhaW5fY3Vyc29yX3Jlc2V0KCZjYWxsY2hhaW5fY3Vyc29yKTsKLQkJCX0KLQkJfQotCi0JCWVyciA9IGNhbGxjaGFpbl9jdXJzb3JfYXBwZW5kKCZjYWxsY2hhaW5fY3Vyc29yLAotCQkJCQkgICAgICBpcCwgYWwubWFwLCBhbC5zeW0pOworCQllcnIgPSBhZGRfY2FsbGNoYWluX2lwKHRocmVhZCwgcGFyZW50LCByb290X2FsLAorCQkJCSAgICAgICBjcHVtb2RlLCBpcCk7CisJCWlmIChlcnIgPT0gLUVJTlZBTCkKKwkJCWJyZWFrOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0xNDY5LDE5ICsxNjE2LDE2IEBACiAJCQkJICAgICAgIGVudHJ5LT5tYXAsIGVudHJ5LT5zeW0pOwogfQogCi1pbnQgbWFjaGluZV9fcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCi0JCQkgICAgICAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkJICAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKLQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKLQkJCSAgICAgICBzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50LAotCQkJICAgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICpyb290X2FsLAotCQkJICAgICAgIGludCBtYXhfc3RhY2spCitpbnQgdGhyZWFkX19yZXNvbHZlX2NhbGxjaGFpbihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCSAgICAgIHN0cnVjdCBzeW1ib2wgKipwYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqcm9vdF9hbCwKKwkJCSAgICAgIGludCBtYXhfc3RhY2spCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IG1hY2hpbmVfX3Jlc29sdmVfY2FsbGNoYWluX3NhbXBsZShtYWNoaW5lLCB0aHJlYWQsCi0JCQkJCQlzYW1wbGUtPmNhbGxjaGFpbiwgcGFyZW50LAotCQkJCQkJcm9vdF9hbCwgbWF4X3N0YWNrKTsKKwlpbnQgcmV0ID0gdGhyZWFkX19yZXNvbHZlX2NhbGxjaGFpbl9zYW1wbGUodGhyZWFkLCBzYW1wbGUtPmNhbGxjaGFpbiwKKwkJCQkJCSAgIHNhbXBsZS0+YnJhbmNoX3N0YWNrLAorCQkJCQkJICAgcGFyZW50LCByb290X2FsLCBtYXhfc3RhY2spOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTE0OTUsNyArMTYzOSw3IEBACiAJICAgICghc2FtcGxlLT51c2VyX3N0YWNrLnNpemUpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiB1bndpbmRfX2dldF9lbnRyaWVzKHVud2luZF9lbnRyeSwgJmNhbGxjaGFpbl9jdXJzb3IsIG1hY2hpbmUsCisJcmV0dXJuIHVud2luZF9fZ2V0X2VudHJpZXModW53aW5kX2VudHJ5LCAmY2FsbGNoYWluX2N1cnNvciwKIAkJCQkgICB0aHJlYWQsIHNhbXBsZSwgbWF4X3N0YWNrKTsKIAogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmgKaW5kZXggMmI2NTFhNy4uZThiNzc3OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuaAorKysgYi90b29scy9wZXJmL3V0aWwvbWFjaGluZS5oCkBAIC00MCw2ICs0MCwxMCBAQAogCXU2NAkJICBrZXJuZWxfc3RhcnQ7CiAJc3ltYm9sX2ZpbHRlcl90CSAgc3ltYm9sX2ZpbHRlcjsKIAlwaWRfdAkJICAqY3VycmVudF90aWQ7CisJdW5pb24geyAvKiBUb29sIHNwZWNpZmljIGFyZWEgKi8KKwkJdm9pZAkgICpwcml2OworCQl1NjQJICBkYl9pZDsKKwl9OwogfTsKIAogc3RhdGljIGlubGluZQpAQCAtMTIyLDEzICsxMjYsMTIgQEAKIAkJCQkJICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKTsKIHN0cnVjdCBtZW1faW5mbyAqc2FtcGxlX19yZXNvbHZlX21lbShzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKIAkJCQkgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7Ci1pbnQgbWFjaGluZV9fcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCi0JCQkgICAgICAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkJICAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKLQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKLQkJCSAgICAgICBzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50LAotCQkJICAgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICpyb290X2FsLAotCQkJICAgICAgIGludCBtYXhfc3RhY2spOworaW50IHRocmVhZF9fcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJICAgICAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkgICAgICBzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50LAorCQkJICAgICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKnJvb3RfYWwsCisJCQkgICAgICBpbnQgbWF4X3N0YWNrKTsKIAogLyoKICAqIERlZmF1bHQgZ3Vlc3Qga2VybmVsIGlzIGRlZmluZWQgYnkgcGFyYW1ldGVyIC0tZ3Vlc3RrYWxsc3ltcwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5jIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCmluZGV4IDIxMzdjNDUuLjYyY2E5ZjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCiAJaWYgKG1hcCAmJiBtYXAtPmRzbykgewogCQlzcmNsaW5lID0gZ2V0X3NyY2xpbmUobWFwLT5kc28sCi0JCQkJICAgICAgbWFwX19yaXBfMm9iamR1bXAobWFwLCBhZGRyKSk7CisJCQkJICAgICAgbWFwX19yaXBfMm9iamR1bXAobWFwLCBhZGRyKSwgTlVMTCwgdHJ1ZSk7CiAJCWlmIChzcmNsaW5lICE9IFNSQ0xJTkVfVU5LTk9XTikKIAkJCXJldCA9IGZwcmludGYoZnAsICIlcyVzIiwgcHJlZml4LCBzcmNsaW5lKTsKIAkJZnJlZV9zcmNsaW5lKHNyY2xpbmUpOwpAQCAtNDEzLDE0ICs0MTMsMTQgQEAKIAlyZXR1cm4gaXAgKyBtYXAtPnJlbG9jOwogfQogCi12b2lkIG1hcF9ncm91cHNfX2luaXQoc3RydWN0IG1hcF9ncm91cHMgKm1nKQordm9pZCBtYXBfZ3JvdXBzX19pbml0KHN0cnVjdCBtYXBfZ3JvdXBzICptZywgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkgewogCQltZy0+bWFwc1tpXSA9IFJCX1JPT1Q7CiAJCUlOSVRfTElTVF9IRUFEKCZtZy0+cmVtb3ZlZF9tYXBzW2ldKTsKIAl9Ci0JbWctPm1hY2hpbmUgPSBOVUxMOworCW1nLT5tYWNoaW5lID0gbWFjaGluZTsKIAltZy0+cmVmY250ID0gMTsKIH0KIApAQCAtNDcxLDEyICs0NzEsMTIgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RydWN0IG1hcF9ncm91cHMgKm1hcF9ncm91cHNfX25ldyh2b2lkKQorc3RydWN0IG1hcF9ncm91cHMgKm1hcF9ncm91cHNfX25ldyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKIHsKIAlzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcgPSBtYWxsb2Moc2l6ZW9mKCptZykpOwogCiAJaWYgKG1nICE9IE5VTEwpCi0JCW1hcF9ncm91cHNfX2luaXQobWcpOworCQltYXBfZ3JvdXBzX19pbml0KG1nLCBtYWNoaW5lKTsKIAogCXJldHVybiBtZzsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaCBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaAppbmRleCAyZjgzOTU0Li42OTUxYTlkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCkBAIC02NCw3ICs2NCw3IEBACiAJaW50CQkgcmVmY250OwogfTsKIAotc3RydWN0IG1hcF9ncm91cHMgKm1hcF9ncm91cHNfX25ldyh2b2lkKTsKK3N0cnVjdCBtYXBfZ3JvdXBzICptYXBfZ3JvdXBzX19uZXcoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOwogdm9pZCBtYXBfZ3JvdXBzX19kZWxldGUoc3RydWN0IG1hcF9ncm91cHMgKm1nKTsKIGJvb2wgbWFwX2dyb3Vwc19fZW1wdHkoc3RydWN0IG1hcF9ncm91cHMgKm1nKTsKIApAQCAtMTUwLDcgKzE1MCw3IEBACiBzdHJ1Y3QgbWFwICptYXBzX19maW5kKHN0cnVjdCByYl9yb290ICptYXBzLCB1NjQgYWRkcik7CiBzdHJ1Y3QgbWFwICptYXBzX19maXJzdChzdHJ1Y3QgcmJfcm9vdCAqbWFwcyk7CiBzdHJ1Y3QgbWFwICptYXBzX19uZXh0KHN0cnVjdCBtYXAgKm1hcCk7Ci12b2lkIG1hcF9ncm91cHNfX2luaXQoc3RydWN0IG1hcF9ncm91cHMgKm1nKTsKK3ZvaWQgbWFwX2dyb3Vwc19faW5pdChzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKIHZvaWQgbWFwX2dyb3Vwc19fZXhpdChzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcpOwogaW50IG1hcF9ncm91cHNfX2Nsb25lKHN0cnVjdCBtYXBfZ3JvdXBzICptZywKIAkJICAgICAgc3RydWN0IG1hcF9ncm91cHMgKnBhcmVudCwgZW51bSBtYXBfdHlwZSB0eXBlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCBjNjU5YTNjLi43N2I0M2ZlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC02ODEsNiArNjgxLDggQEAKIAlpZiAoZXZzZWwpIHsKIAkJZXZzZWwtPnVuaXQgPSBpbmZvLnVuaXQ7CiAJCWV2c2VsLT5zY2FsZSA9IGluZm8uc2NhbGU7CisJCWV2c2VsLT5wZXJfcGtnID0gaW5mby5wZXJfcGtnOworCQlldnNlbC0+c25hcHNob3QgPSBpbmZvLnNuYXBzaG90OwogCX0KIAogCXJldHVybiBldnNlbCA/IDAgOiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmMKaW5kZXggYmY0ODA5Mi4uZjYyZGVlN2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuYwpAQCAtNDIsNyArNDIsMjYgQEAKIAkJcmV0dXJuIG9wdGVycm9yKG9wdCwgInRha2VzIG5vIHZhbHVlIiwgZmxhZ3MpOwogCWlmICh1bnNldCAmJiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9OT05FRykpCiAJCXJldHVybiBvcHRlcnJvcihvcHQsICJpc24ndCBhdmFpbGFibGUiLCBmbGFncyk7CisJaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfRElTQUJMRUQpCisJCXJldHVybiBvcHRlcnJvcihvcHQsICJpcyBub3QgdXNhYmxlIiwgZmxhZ3MpOwogCisJaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfRVhDTFVTSVZFKSB7CisJCWlmIChwLT5leGNsX29wdCkgeworCQkJY2hhciBtc2dbMTI4XTsKKworCQkJaWYgKCgoZmxhZ3MgJiBPUFRfU0hPUlQpICYmIHAtPmV4Y2xfb3B0LT5zaG9ydF9uYW1lKSB8fAorCQkJICAgIHAtPmV4Y2xfb3B0LT5sb25nX25hbWUgPT0gTlVMTCkgeworCQkJCXNjbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2ggYCVjJyIsCisJCQkJCSAgcC0+ZXhjbF9vcHQtPnNob3J0X25hbWUpOworCQkJfSBlbHNlIHsKKwkJCQlzY25wcmludGYobXNnLCBzaXplb2YobXNnKSwgImNhbm5vdCBiZSB1c2VkIHdpdGggJXMiLAorCQkJCQkgIHAtPmV4Y2xfb3B0LT5sb25nX25hbWUpOworCQkJfQorCQkJb3B0ZXJyb3Iob3B0LCBtc2csIGZsYWdzKTsKKwkJCXJldHVybiAtMzsKKwkJfQorCQlwLT5leGNsX29wdCA9IG9wdDsKKwl9CiAJaWYgKCEoZmxhZ3MgJiBPUFRfU0hPUlQpICYmIHAtPm9wdCkgewogCQlzd2l0Y2ggKG9wdC0+dHlwZSkgewogCQljYXNlIE9QVElPTl9DQUxMQkFDSzoKQEAgLTM0MywxMyArMzYyLDE0IEBACiAJCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSkKIHsKIAlpbnQgaW50ZXJuYWxfaGVscCA9ICEoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQKTsKKwlpbnQgZXhjbF9zaG9ydF9vcHQgPSAxOworCWNvbnN0IGNoYXIgKmFyZzsKIAogCS8qIHdlIG11c3QgcmVzZXQgLT5vcHQsIHVua25vd24gc2hvcnQgb3B0aW9uIGxlYXZlIGl0IGRhbmdsaW5nICovCiAJY3R4LT5vcHQgPSBOVUxMOwogCiAJZm9yICg7IGN0eC0+YXJnYzsgY3R4LT5hcmdjLS0sIGN0eC0+YXJndisrKSB7Ci0JCWNvbnN0IGNoYXIgKmFyZyA9IGN0eC0+YXJndlswXTsKLQorCQlhcmcgPSBjdHgtPmFyZ3ZbMF07CiAJCWlmICgqYXJnICE9ICctJyB8fCAhYXJnWzFdKSB7CiAJCQlpZiAoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pCiAJCQkJYnJlYWs7CkBAIC0zNTgsMTkgKzM3OCwyMSBAQAogCQl9CiAKIAkJaWYgKGFyZ1sxXSAhPSAnLScpIHsKLQkJCWN0eC0+b3B0ID0gYXJnICsgMTsKKwkJCWN0eC0+b3B0ID0gKythcmc7CiAJCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAqY3R4LT5vcHQgPT0gJ2gnKQogCQkJCXJldHVybiB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwodXNhZ2VzdHIsIG9wdGlvbnMsIDApOwogCQkJc3dpdGNoIChwYXJzZV9zaG9ydF9vcHQoY3R4LCBvcHRpb25zKSkgewogCQkJY2FzZSAtMToKLQkJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZSh1c2FnZXN0ciwgb3B0aW9ucywgYXJnICsgMSwgMSk7CisJCQkJcmV0dXJuIHBhcnNlX29wdGlvbnNfdXNhZ2UodXNhZ2VzdHIsIG9wdGlvbnMsIGFyZywgMSk7CiAJCQljYXNlIC0yOgogCQkJCWdvdG8gdW5rbm93bjsKKwkJCWNhc2UgLTM6CisJCQkJZ290byBleGNsdXNpdmU7CiAJCQlkZWZhdWx0OgogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGN0eC0+b3B0KQotCQkJCWNoZWNrX3R5cG9zKGFyZyArIDEsIG9wdGlvbnMpOworCQkJCWNoZWNrX3R5cG9zKGFyZywgb3B0aW9ucyk7CiAJCQl3aGlsZSAoY3R4LT5vcHQpIHsKIAkJCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAqY3R4LT5vcHQgPT0gJ2gnKQogCQkJCQlyZXR1cm4gdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKHVzYWdlc3RyLCBvcHRpb25zLCAwKTsKQEAgLTM4Nyw2ICs0MDksOCBAQAogCQkJCQljdHgtPmFyZ3ZbMF0gPSBzdHJkdXAoY3R4LT5vcHQgLSAxKTsKIAkJCQkJKihjaGFyICopY3R4LT5hcmd2WzBdID0gJy0nOwogCQkJCQlnb3RvIHVua25vd247CisJCQkJY2FzZSAtMzoKKwkJCQkJZ290byBleGNsdXNpdmU7CiAJCQkJZGVmYXVsdDoKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNDAyLDE5ICs0MjYsMjMgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGludGVybmFsX2hlbHAgJiYgIXN0cmNtcChhcmcgKyAyLCAiaGVscC1hbGwiKSkKKwkJYXJnICs9IDI7CisJCWlmIChpbnRlcm5hbF9oZWxwICYmICFzdHJjbXAoYXJnLCAiaGVscC1hbGwiKSkKIAkJCXJldHVybiB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwodXNhZ2VzdHIsIG9wdGlvbnMsIDEpOwotCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAhc3RyY21wKGFyZyArIDIsICJoZWxwIikpCisJCWlmIChpbnRlcm5hbF9oZWxwICYmICFzdHJjbXAoYXJnLCAiaGVscCIpKQogCQkJcmV0dXJuIHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbCh1c2FnZXN0ciwgb3B0aW9ucywgMCk7Ci0JCWlmICghc3RyY21wKGFyZyArIDIsICJsaXN0LW9wdHMiKSkKKwkJaWYgKCFzdHJjbXAoYXJnLCAibGlzdC1vcHRzIikpCiAJCQlyZXR1cm4gUEFSU0VfT1BUX0xJU1RfT1BUUzsKLQkJaWYgKCFzdHJjbXAoYXJnICsgMiwgImxpc3QtY21kcyIpKQorCQlpZiAoIXN0cmNtcChhcmcsICJsaXN0LWNtZHMiKSkKIAkJCXJldHVybiBQQVJTRV9PUFRfTElTVF9TVUJDTURTOwotCQlzd2l0Y2ggKHBhcnNlX2xvbmdfb3B0KGN0eCwgYXJnICsgMiwgb3B0aW9ucykpIHsKKwkJc3dpdGNoIChwYXJzZV9sb25nX29wdChjdHgsIGFyZywgb3B0aW9ucykpIHsKIAkJY2FzZSAtMToKLQkJCXJldHVybiBwYXJzZV9vcHRpb25zX3VzYWdlKHVzYWdlc3RyLCBvcHRpb25zLCBhcmcgKyAyLCAwKTsKKwkJCXJldHVybiBwYXJzZV9vcHRpb25zX3VzYWdlKHVzYWdlc3RyLCBvcHRpb25zLCBhcmcsIDApOwogCQljYXNlIC0yOgogCQkJZ290byB1bmtub3duOworCQljYXNlIC0zOgorCQkJZXhjbF9zaG9ydF9vcHQgPSAwOworCQkJZ290byBleGNsdXNpdmU7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtNDI2LDYgKzQ1NCwxNyBAQAogCQljdHgtPm9wdCA9IE5VTEw7CiAJfQogCXJldHVybiBQQVJTRV9PUFRfRE9ORTsKKworZXhjbHVzaXZlOgorCXBhcnNlX29wdGlvbnNfdXNhZ2UodXNhZ2VzdHIsIG9wdGlvbnMsIGFyZywgZXhjbF9zaG9ydF9vcHQpOworCWlmICgoZXhjbF9zaG9ydF9vcHQgJiYgY3R4LT5leGNsX29wdC0+c2hvcnRfbmFtZSkgfHwKKwkgICAgY3R4LT5leGNsX29wdC0+bG9uZ19uYW1lID09IE5VTEwpIHsKKwkJY2hhciBvcHQgPSBjdHgtPmV4Y2xfb3B0LT5zaG9ydF9uYW1lOworCQlwYXJzZV9vcHRpb25zX3VzYWdlKE5VTEwsIG9wdGlvbnMsICZvcHQsIDEpOworCX0gZWxzZSB7CisJCXBhcnNlX29wdGlvbnNfdXNhZ2UoTlVMTCwgb3B0aW9ucywgY3R4LT5leGNsX29wdC0+bG9uZ19uYW1lLCAwKTsKKwl9CisJcmV0dXJuIFBBUlNFX09QVF9IRUxQOwogfQogCiBpbnQgcGFyc2Vfb3B0aW9uc19lbmQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4KQpAQCAtNTA5LDYgKzU0OCw4IEBACiAJfQogCWlmICghZnVsbCAmJiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfSElEREVOKSkKIAkJcmV0dXJuOworCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9ESVNBQkxFRCkKKwkJcmV0dXJuOwogCiAJcG9zID0gZnByaW50ZihzdGRlcnIsICIgICAgIik7CiAJaWYgKG9wdHMtPnNob3J0X25hbWUpCkBAIC02NzksMyArNzIwLDE2IEBACiAJfQogCXJldHVybiAwOwogfQorCit2b2lkIHNldF9vcHRpb25fZmxhZyhzdHJ1Y3Qgb3B0aW9uICpvcHRzLCBpbnQgc2hvcnRvcHQsIGNvbnN0IGNoYXIgKmxvbmdvcHQsCisJCSAgICAgaW50IGZsYWcpCit7CisJZm9yICg7IG9wdHMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0cysrKSB7CisJCWlmICgoc2hvcnRvcHQgJiYgb3B0cy0+c2hvcnRfbmFtZSA9PSBzaG9ydG9wdCkgfHwKKwkJICAgIChvcHRzLT5sb25nX25hbWUgJiYgbG9uZ29wdCAmJgorCQkgICAgICFzdHJjbXAob3B0cy0+bG9uZ19uYW1lLCBsb25nb3B0KSkpIHsKKwkJCW9wdHMtPmZsYWdzIHw9IGZsYWc7CisJCQlicmVhazsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmggYi90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5oCmluZGV4IGI1OWJhODUuLjk3YjE1M2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuaApAQCAtMzgsNiArMzgsOCBAQAogCVBBUlNFX09QVF9OT05FRyAgID0gNCwKIAlQQVJTRV9PUFRfSElEREVOICA9IDgsCiAJUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCA9IDE2LAorCVBBUlNFX09QVF9ESVNBQkxFRCA9IDMyLAorCVBBUlNFX09QVF9FWENMVVNJVkUgPSA2NCwKIH07CiAKIHN0cnVjdCBvcHRpb247CkBAIC0xNzMsNiArMTc1LDcgQEAKIAljb25zdCBjaGFyICoqb3V0OwogCWludCBhcmdjLCBjcGlkeDsKIAljb25zdCBjaGFyICpvcHQ7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqZXhjbF9vcHQ7CiAJaW50IGZsYWdzOwogfTsKIApAQCAtMjExLDQgKzIxNCw1IEBACiAKIGV4dGVybiBjb25zdCBjaGFyICpwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmZpbGUpOwogCit2b2lkIHNldF9vcHRpb25fZmxhZyhzdHJ1Y3Qgb3B0aW9uICpvcHRzLCBpbnQgc29wdCwgY29uc3QgY2hhciAqbG9wdCwgaW50IGZsYWcpOwogI2VuZGlmIC8qIF9fUEVSRl9QQVJTRV9PUFRJT05TX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wbXUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wbXUuYwppbmRleCBlMjQzYWQ5Li41YzljNDk0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcG11LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BtdS5jCkBAIC0xNjMsNiArMTYzLDQxIEBACiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50CitwZXJmX3BtdV9fcGFyc2VfcGVyX3BrZyhzdHJ1Y3QgcGVyZl9wbXVfYWxpYXMgKmFsaWFzLCBjaGFyICpkaXIsIGNoYXIgKm5hbWUpCit7CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwlpbnQgZmQ7CisKKwlzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgIiVzLyVzLnBlci1wa2ciLCBkaXIsIG5hbWUpOworCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAtMTsKKworCWNsb3NlKGZkKTsKKworCWFsaWFzLT5wZXJfcGtnID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZXJmX3BtdV9fcGFyc2Vfc25hcHNob3Qoc3RydWN0IHBlcmZfcG11X2FsaWFzICphbGlhcywKKwkJCQkgICAgY2hhciAqZGlyLCBjaGFyICpuYW1lKQoreworCWNoYXIgcGF0aFtQQVRIX01BWF07CisJaW50IGZkOworCisJc25wcmludGYocGF0aCwgUEFUSF9NQVgsICIlcy8lcy5zbmFwc2hvdCIsIGRpciwgbmFtZSk7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJYWxpYXMtPnNuYXBzaG90ID0gdHJ1ZTsKKwljbG9zZShmZCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcGVyZl9wbXVfX25ld19hbGlhcyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBjaGFyICpkaXIsIGNoYXIgKm5hbWUsIEZJTEUgKmZpbGUpCiB7CiAJc3RydWN0IHBlcmZfcG11X2FsaWFzICphbGlhczsKQEAgLTE4MSw2ICsyMTYsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZhbGlhcy0+dGVybXMpOwogCWFsaWFzLT5zY2FsZSA9IDEuMDsKIAlhbGlhcy0+dW5pdFswXSA9ICdcMCc7CisJYWxpYXMtPnBlcl9wa2cgPSBmYWxzZTsKIAogCXJldCA9IHBhcnNlX2V2ZW50c190ZXJtcygmYWxpYXMtPnRlcm1zLCBidWYpOwogCWlmIChyZXQpIHsKQEAgLTE5NCw2ICsyMzAsOCBAQAogCSAqLwogCXBlcmZfcG11X19wYXJzZV91bml0KGFsaWFzLCBkaXIsIG5hbWUpOwogCXBlcmZfcG11X19wYXJzZV9zY2FsZShhbGlhcywgZGlyLCBuYW1lKTsKKwlwZXJmX3BtdV9fcGFyc2VfcGVyX3BrZyhhbGlhcywgZGlyLCBuYW1lKTsKKwlwZXJmX3BtdV9fcGFyc2Vfc25hcHNob3QoYWxpYXMsIGRpciwgbmFtZSk7CiAKIAlsaXN0X2FkZF90YWlsKCZhbGlhcy0+bGlzdCwgbGlzdCk7CiAKQEAgLTIwOSw2ICsyNDcsMTAgQEAKIAkJcmV0dXJuIHRydWU7CiAJaWYgKGxlbiA+IDYgJiYgIXN0cmNtcChuYW1lICsgbGVuIC0gNiwgIi5zY2FsZSIpKQogCQlyZXR1cm4gdHJ1ZTsKKwlpZiAobGVuID4gOCAmJiAhc3RyY21wKG5hbWUgKyBsZW4gLSA4LCAiLnBlci1wa2ciKSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKGxlbiA+IDkgJiYgIXN0cmNtcChuYW1lICsgbGVuIC0gOSwgIi5zbmFwc2hvdCIpKQorCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKIH0KQEAgLTYxNywyMyArNjU5LDI3IEBACiB9CiAKIAotc3RhdGljIGludCBjaGVja191bml0X3NjYWxlKHN0cnVjdCBwZXJmX3BtdV9hbGlhcyAqYWxpYXMsCi0JCQkgICAgY29uc3QgY2hhciAqKnVuaXQsIGRvdWJsZSAqc2NhbGUpCitzdGF0aWMgaW50IGNoZWNrX2luZm9fZGF0YShzdHJ1Y3QgcGVyZl9wbXVfYWxpYXMgKmFsaWFzLAorCQkJICAgc3RydWN0IHBlcmZfcG11X2luZm8gKmluZm8pCiB7CiAJLyoKIAkgKiBPbmx5IG9uZSB0ZXJtIGluIGV2ZW50IGRlZmluaXRpb24gY2FuCi0JICogZGVmaW5lIHVuaXQgYW5kIHNjYWxlLCBmYWlsIGlmIHRoZXJlJ3MKLQkgKiBtb3JlIHRoYW4gb25lLgorCSAqIGRlZmluZSB1bml0LCBzY2FsZSBhbmQgc25hcHNob3QsIGZhaWwKKwkgKiBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUuCiAJICovCi0JaWYgKCgqdW5pdCAmJiBhbGlhcy0+dW5pdCkgfHwKLQkgICAgKCpzY2FsZSAmJiBhbGlhcy0+c2NhbGUpKQorCWlmICgoaW5mby0+dW5pdCAmJiBhbGlhcy0+dW5pdCkgfHwKKwkgICAgKGluZm8tPnNjYWxlICYmIGFsaWFzLT5zY2FsZSkgfHwKKwkgICAgKGluZm8tPnNuYXBzaG90ICYmIGFsaWFzLT5zbmFwc2hvdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGFsaWFzLT51bml0KQotCQkqdW5pdCA9IGFsaWFzLT51bml0OworCQlpbmZvLT51bml0ID0gYWxpYXMtPnVuaXQ7CiAKIAlpZiAoYWxpYXMtPnNjYWxlKQotCQkqc2NhbGUgPSBhbGlhcy0+c2NhbGU7CisJCWluZm8tPnNjYWxlID0gYWxpYXMtPnNjYWxlOworCisJaWYgKGFsaWFzLT5zbmFwc2hvdCkKKwkJaW5mby0+c25hcHNob3QgPSBhbGlhcy0+c25hcHNob3Q7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0OSwxMiArNjk1LDE1IEBACiAJc3RydWN0IHBlcmZfcG11X2FsaWFzICphbGlhczsKIAlpbnQgcmV0OwogCisJaW5mby0+cGVyX3BrZyA9IGZhbHNlOworCiAJLyoKIAkgKiBNYXJrIHVuaXQgYW5kIHNjYWxlIGFzIG5vdCBzZXQKIAkgKiAoZGlmZmVyZW50IGZyb20gZGVmYXVsdCB2YWx1ZXMsIHNlZSBiZWxvdykKIAkgKi8KLQlpbmZvLT51bml0ICAgPSBOVUxMOwotCWluZm8tPnNjYWxlICA9IDAuMDsKKwlpbmZvLT51bml0ICAgICA9IE5VTEw7CisJaW5mby0+c2NhbGUgICAgPSAwLjA7CisJaW5mby0+c25hcHNob3QgPSBmYWxzZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0ZXJtLCBoLCBoZWFkX3Rlcm1zLCBsaXN0KSB7CiAJCWFsaWFzID0gcG11X2ZpbmRfYWxpYXMocG11LCB0ZXJtKTsKQEAgLTY2NCwxMCArNzEzLDEzIEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCXJldCA9IGNoZWNrX3VuaXRfc2NhbGUoYWxpYXMsICZpbmZvLT51bml0LCAmaW5mby0+c2NhbGUpOworCQlyZXQgPSBjaGVja19pbmZvX2RhdGEoYWxpYXMsIGluZm8pOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAorCQlpZiAoYWxpYXMtPnBlcl9wa2cpCisJCQlpbmZvLT5wZXJfcGtnID0gdHJ1ZTsKKwogCQlsaXN0X2RlbCgmdGVybS0+bGlzdCk7CiAJCWZyZWUodGVybSk7CiAJfQpAQCAtNzQ3LDE1ICs3OTksMTggQEAKIAogCXBtdSA9IE5VTEw7CiAJbGVuID0gMDsKLQl3aGlsZSAoKHBtdSA9IHBlcmZfcG11X19zY2FuKHBtdSkpICE9IE5VTEwpCisJd2hpbGUgKChwbXUgPSBwZXJmX3BtdV9fc2NhbihwbXUpKSAhPSBOVUxMKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxpYXMsICZwbXUtPmFsaWFzZXMsIGxpc3QpCiAJCQlsZW4rKzsKLQlhbGlhc2VzID0gbWFsbG9jKHNpemVvZihjaGFyICopICogbGVuKTsKKwkJaWYgKHBtdS0+c2VsZWN0YWJsZSkKKwkJCWxlbisrOworCX0KKwlhbGlhc2VzID0gemFsbG9jKHNpemVvZihjaGFyICopICogbGVuKTsKIAlpZiAoIWFsaWFzZXMpCi0JCXJldHVybjsKKwkJZ290byBvdXRfZW5vbWVtOwogCXBtdSA9IE5VTEw7CiAJaiA9IDA7Ci0Jd2hpbGUgKChwbXUgPSBwZXJmX3BtdV9fc2NhbihwbXUpKSAhPSBOVUxMKQorCXdoaWxlICgocG11ID0gcGVyZl9wbXVfX3NjYW4ocG11KSkgIT0gTlVMTCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsaWFzLCAmcG11LT5hbGlhc2VzLCBsaXN0KSB7CiAJCQljaGFyICpuYW1lID0gZm9ybWF0X2FsaWFzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHBtdSwgYWxpYXMpOwogCQkJYm9vbCBpc19jcHUgPSAhc3RyY21wKHBtdS0+bmFtZSwgImNwdSIpOwpAQCAtNzY1LDEzICs4MjAsMjMgQEAKIAkJCSAgICAgICghaXNfY3B1ICYmIHN0cmdsb2JtYXRjaChhbGlhcy0+bmFtZSwKIAkJCQkJCSAgICAgICBldmVudF9nbG9iKSkpKQogCQkJCWNvbnRpbnVlOwotCQkJYWxpYXNlc1tqXSA9IG5hbWU7CisKIAkJCWlmIChpc19jcHUgJiYgIW5hbWVfb25seSkKLQkJCQlhbGlhc2VzW2pdID0gZm9ybWF0X2FsaWFzX29yKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0JCQkJCQkJICAgICAgcG11LCBhbGlhcyk7Ci0JCQlhbGlhc2VzW2pdID0gc3RyZHVwKGFsaWFzZXNbal0pOworCQkJCW5hbWUgPSBmb3JtYXRfYWxpYXNfb3IoYnVmLCBzaXplb2YoYnVmKSwgcG11LCBhbGlhcyk7CisKKwkJCWFsaWFzZXNbal0gPSBzdHJkdXAobmFtZSk7CisJCQlpZiAoYWxpYXNlc1tqXSA9PSBOVUxMKQorCQkJCWdvdG8gb3V0X2Vub21lbTsKIAkJCWorKzsKIAkJfQorCQlpZiAocG11LT5zZWxlY3RhYmxlKSB7CisJCQljaGFyICpzOworCQkJaWYgKGFzcHJpbnRmKCZzLCAiJXMvLyIsIHBtdS0+bmFtZSkgPCAwKQorCQkJCWdvdG8gb3V0X2Vub21lbTsKKwkJCWFsaWFzZXNbal0gPSBzOworCQkJaisrOworCQl9CisJfQogCWxlbiA9IGo7CiAJcXNvcnQoYWxpYXNlcywgbGVuLCBzaXplb2YoY2hhciAqKSwgY21wX3N0cmluZyk7CiAJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7CkBAIC03ODAsMTIgKzg0NSwyMCBAQAogCQkJY29udGludWU7CiAJCX0KIAkJcHJpbnRmKCIgICUtNTBzIFtLZXJuZWwgUE1VIGV2ZW50XVxuIiwgYWxpYXNlc1tqXSk7Ci0JCXpmcmVlKCZhbGlhc2VzW2pdKTsKIAkJcHJpbnRlZCsrOwogCX0KIAlpZiAocHJpbnRlZCkKIAkJcHJpbnRmKCJcbiIpOwotCWZyZWUoYWxpYXNlcyk7CitvdXRfZnJlZToKKwlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCXpmcmVlKCZhbGlhc2VzW2pdKTsKKwl6ZnJlZSgmYWxpYXNlcyk7CisJcmV0dXJuOworCitvdXRfZW5vbWVtOgorCXByaW50ZigiRkFUQUw6IG5vdCBlbm91Z2ggbWVtb3J5IHRvIHByaW50IFBNVSBldmVudHNcbiIpOworCWlmIChhbGlhc2VzKQorCQlnb3RvIG91dF9mcmVlOwogfQogCiBib29sIHBtdV9oYXZlX2V2ZW50KGNvbnN0IGNoYXIgKnBuYW1lLCBjb25zdCBjaGFyICpuYW1lKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BtdS5oIGIvdG9vbHMvcGVyZi91dGlsL3BtdS5oCmluZGV4IGZlOWRmYmUuLjZiMTI0OWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wbXUuaAorKysgYi90b29scy9wZXJmL3V0aWwvcG11LmgKQEAgLTE4LDYgKzE4LDcgQEAKIHN0cnVjdCBwZXJmX3BtdSB7CiAJY2hhciAqbmFtZTsKIAlfX3UzMiB0eXBlOworCWJvb2wgc2VsZWN0YWJsZTsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICpkZWZhdWx0X2NvbmZpZzsKIAlzdHJ1Y3QgY3B1X21hcCAqY3B1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZvcm1hdDsgIC8qIEhFQUQgc3RydWN0IHBlcmZfcG11X2Zvcm1hdCAtPiBsaXN0ICovCkBAIC0yOCw2ICsyOSw4IEBACiBzdHJ1Y3QgcGVyZl9wbXVfaW5mbyB7CiAJY29uc3QgY2hhciAqdW5pdDsKIAlkb3VibGUgc2NhbGU7CisJYm9vbCBwZXJfcGtnOworCWJvb2wgc25hcHNob3Q7CiB9OwogCiAjZGVmaW5lIFVOSVRfTUFYX0xFTgkzMSAvKiBtYXggbGVuZ3RoIGZvciBldmVudCB1bml0IG5hbWUgKi8KQEAgLTM4LDYgKzQxLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7ICAvKiBFTEVNICovCiAJY2hhciB1bml0W1VOSVRfTUFYX0xFTisxXTsKIAlkb3VibGUgc2NhbGU7CisJYm9vbCBwZXJfcGtnOworCWJvb2wgc25hcHNob3Q7CiB9OwogCiBzdHJ1Y3QgcGVyZl9wbXUgKnBlcmZfcG11X19maW5kKGNvbnN0IGNoYXIgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwppbmRleCBjMTUwY2E0Li4yOGViMTQxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwpAQCAtMTkxMCwyMSArMTkxMCwyMSBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcHJpbnRmKCIgICUtMjBzIChvbiAlcyIsIGJ1ZiwgcGxhY2UpOworCXByX2luZm8oIiAgJS0yMHMgKG9uICVzIiwgYnVmLCBwbGFjZSk7CiAJaWYgKG1vZHVsZSkKLQkJcHJpbnRmKCIgaW4gJXMiLCBtb2R1bGUpOworCQlwcl9pbmZvKCIgaW4gJXMiLCBtb2R1bGUpOwogCiAJaWYgKHBldi0+bmFyZ3MgPiAwKSB7Ci0JCXByaW50ZigiIHdpdGgiKTsKKwkJcHJfaW5mbygiIHdpdGgiKTsKIAkJZm9yIChpID0gMDsgaSA8IHBldi0+bmFyZ3M7IGkrKykgewogCQkJcmV0ID0gc3ludGhlc2l6ZV9wZXJmX3Byb2JlX2FyZygmcGV2LT5hcmdzW2ldLAogCQkJCQkJCWJ1ZiwgMTI4KTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwotCQkJcHJpbnRmKCIgJXMiLCBidWYpOworCQkJcHJfaW5mbygiICVzIiwgYnVmKTsKIAkJfQogCX0KLQlwcmludGYoIilcbiIpOworCXByX2luZm8oIilcbiIpOwogCWZyZWUocGxhY2UpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMTI0LDcgKzIxMjQsNyBAQAogCX0KIAogCXJldCA9IDA7Ci0JcHJpbnRmKCJBZGRlZCBuZXcgZXZlbnQlc1xuIiwgKG50ZXZzID4gMSkgPyAiczoiIDogIjoiKTsKKwlwcl9pbmZvKCJBZGRlZCBuZXcgZXZlbnQlc1xuIiwgKG50ZXZzID4gMSkgPyAiczoiIDogIjoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnRldnM7IGkrKykgewogCQl0ZXYgPSAmdGV2c1tpXTsKIAkJaWYgKHBldi0+ZXZlbnQpCkBAIC0yMTc5LDggKzIxNzksOCBAQAogCiAJaWYgKHJldCA+PSAwKSB7CiAJCS8qIFNob3cgaG93IHRvIHVzZSB0aGUgZXZlbnQuICovCi0JCXByaW50ZigiXG5Zb3UgY2FuIG5vdyB1c2UgaXQgaW4gYWxsIHBlcmYgdG9vbHMsIHN1Y2ggYXM6XG5cbiIpOwotCQlwcmludGYoIlx0cGVyZiByZWNvcmQgLWUgJXM6JXMgLWFSIHNsZWVwIDFcblxuIiwgdGV2LT5ncm91cCwKKwkJcHJfaW5mbygiXG5Zb3UgY2FuIG5vdyB1c2UgaXQgaW4gYWxsIHBlcmYgdG9vbHMsIHN1Y2ggYXM6XG5cbiIpOworCQlwcl9pbmZvKCJcdHBlcmYgcmVjb3JkIC1lICVzOiVzIC1hUiBzbGVlcCAxXG5cbiIsIHRldi0+Z3JvdXAsCiAJCQkgdGV2LT5ldmVudCk7CiAJfQogCkBAIC0yNDQ0LDcgKzI0NDQsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCXByaW50ZigiUmVtb3ZlZCBldmVudDogJXNcbiIsIGVudC0+cyk7CisJcHJfaW5mbygiUmVtb3ZlZCBldmVudDogJXNcbiIsIGVudC0+cyk7CiAJcmV0dXJuIDA7CiBlcnJvcjoKIAlwcl93YXJuaW5nKCJGYWlsZWQgdG8gZGVsZXRlIGV2ZW50OiAlc1xuIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMgYi90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jCmluZGV4IDBhMDFiYWMuLjIyZWJjNDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogI2luY2x1ZGUgIi4uL3V0aWwuaCIKICNpbmNsdWRlIDxFWFRFUk4uaD4KQEAgLTU3LDcgKzU4LDcgQEAKICNkZWZpbmUgRlRSQUNFX01BWF9FVkVOVAkJCQlcCiAJKCgxIDw8IChzaXplb2YodW5zaWduZWQgc2hvcnQpICogOCkpIC0gMSkKIAotc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnRzW0ZUUkFDRV9NQVhfRVZFTlRdOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGV2ZW50c19kZWZpbmVkLCBGVFJBQ0VfTUFYX0VWRU5UKTsKIAogZXh0ZXJuIHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqc2NyaXB0aW5nX2NvbnRleHQ7CiAKQEAgLTIzOCwzNSArMjM5LDE1IEBACiAJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5uZXh0KTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpmaW5kX2NhY2hlX2V2ZW50KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkKLXsKLQlzdGF0aWMgY2hhciBldl9uYW1lWzI1Nl07Ci0Jc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnQ7Ci0JaW50IHR5cGUgPSBldnNlbC0+YXR0ci5jb25maWc7Ci0KLQlpZiAoZXZlbnRzW3R5cGVdKQotCQlyZXR1cm4gZXZlbnRzW3R5cGVdOwotCi0JZXZlbnRzW3R5cGVdID0gZXZlbnQgPSBldnNlbC0+dHBfZm9ybWF0OwotCWlmICghZXZlbnQpCi0JCXJldHVybiBOVUxMOwotCi0Jc3ByaW50Zihldl9uYW1lLCAiJXM6OiVzIiwgZXZlbnQtPnN5c3RlbSwgZXZlbnQtPm5hbWUpOwotCi0JZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGV2ZW50LT5wcmludF9mbXQuYXJncyk7Ci0KLQlyZXR1cm4gZXZlbnQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmxfcHJvY2Vzc190cmFjZXBvaW50KHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCQkJICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKIHsKKwlzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudCA9IGV2c2VsLT50cF9mb3JtYXQ7CiAJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CiAJc3RhdGljIGNoYXIgaGFuZGxlclsyNTZdOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CiAJdW5zaWduZWQgbG9uZyBzLCBuczsKLQlzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudDsKIAlpbnQgcGlkOwogCWludCBjcHUgPSBzYW1wbGUtPmNwdTsKIAl2b2lkICpkYXRhID0gc2FtcGxlLT5yYXdfZGF0YTsKQEAgLTI3OCw3ICsyNTksNiBAQAogCWlmIChldnNlbC0+YXR0ci50eXBlICE9IFBFUkZfVFlQRV9UUkFDRVBPSU5UKQogCQlyZXR1cm47CiAKLQlldmVudCA9IGZpbmRfY2FjaGVfZXZlbnQoZXZzZWwpOwogCWlmICghZXZlbnQpCiAJCWRpZSgidWchIG5vIGV2ZW50IGZvdW5kIGZvciB0eXBlICUiIFBSSXU2NCwgKHU2NClldnNlbC0+YXR0ci5jb25maWcpOwogCkBAIC0yODYsNiArMjY2LDkgQEAKIAogCXNwcmludGYoaGFuZGxlciwgIiVzOjolcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKIAorCWlmICghdGVzdF9hbmRfc2V0X2JpdChldmVudC0+aWQsIGV2ZW50c19kZWZpbmVkKSkKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGhhbmRsZXIsIGV2ZW50LT5wcmludF9mbXQuYXJncyk7CisKIAlzID0gbnNlY3MgLyBOU0VDU19QRVJfU0VDOwogCW5zID0gbnNlY3MgLSBzICogTlNFQ1NfUEVSX1NFQzsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jCmluZGV4IDQ5NmYyMWMuLmQ4MDhhMzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMKQEAgLTI0LDcgKzI0LDkgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogCiAjaW5jbHVkZSAiLi4vLi4vcGVyZi5oIgogI2luY2x1ZGUgIi4uL2RlYnVnLmgiCkBAIC0zMyw2ICszNSwxMCBAQAogI2luY2x1ZGUgIi4uL3V0aWwuaCIKICNpbmNsdWRlICIuLi9ldmVudC5oIgogI2luY2x1ZGUgIi4uL3RocmVhZC5oIgorI2luY2x1ZGUgIi4uL2NvbW0uaCIKKyNpbmNsdWRlICIuLi9tYWNoaW5lLmgiCisjaW5jbHVkZSAiLi4vZGItZXhwb3J0LmgiCisjaW5jbHVkZSAiLi4vdGhyZWFkLXN0YWNrLmgiCiAjaW5jbHVkZSAiLi4vdHJhY2UtZXZlbnQuaCIKICNpbmNsdWRlICIuLi9tYWNoaW5lLmgiCiAKQEAgLTQxLDcgKzQ3LDcgQEAKICNkZWZpbmUgRlRSQUNFX01BWF9FVkVOVAkJCQlcCiAJKCgxIDw8IChzaXplb2YodW5zaWduZWQgc2hvcnQpICogOCkpIC0gMSkKIAotc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnRzW0ZUUkFDRV9NQVhfRVZFTlRdOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGV2ZW50c19kZWZpbmVkLCBGVFJBQ0VfTUFYX0VWRU5UKTsKIAogI2RlZmluZSBNQVhfRklFTERTCTY0CiAjZGVmaW5lIE5fQ09NTU9OX0ZJRUxEUwk3CkBAIC01Myw2ICs1OSwyNCBAQAogCiBzdGF0aWMgUHlPYmplY3QgKm1haW5fbW9kdWxlLCAqbWFpbl9kaWN0OwogCitzdHJ1Y3QgdGFibGVzIHsKKwlzdHJ1Y3QgZGJfZXhwb3J0CWRiZTsKKwlQeU9iamVjdAkJKmV2c2VsX2hhbmRsZXI7CisJUHlPYmplY3QJCSptYWNoaW5lX2hhbmRsZXI7CisJUHlPYmplY3QJCSp0aHJlYWRfaGFuZGxlcjsKKwlQeU9iamVjdAkJKmNvbW1faGFuZGxlcjsKKwlQeU9iamVjdAkJKmNvbW1fdGhyZWFkX2hhbmRsZXI7CisJUHlPYmplY3QJCSpkc29faGFuZGxlcjsKKwlQeU9iamVjdAkJKnN5bWJvbF9oYW5kbGVyOworCVB5T2JqZWN0CQkqYnJhbmNoX3R5cGVfaGFuZGxlcjsKKwlQeU9iamVjdAkJKnNhbXBsZV9oYW5kbGVyOworCVB5T2JqZWN0CQkqY2FsbF9wYXRoX2hhbmRsZXI7CisJUHlPYmplY3QJCSpjYWxsX3JldHVybl9oYW5kbGVyOworCWJvb2wJCQlkYl9leHBvcnRfbW9kZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGFibGVzIHRhYmxlc19nbG9iYWw7CisKIHN0YXRpYyB2b2lkIGhhbmRsZXJfY2FsbF9kaWUoY29uc3QgY2hhciAqaGFuZGxlcl9uYW1lKSBOT1JFVFVSTjsKIHN0YXRpYyB2b2lkIGhhbmRsZXJfY2FsbF9kaWUoY29uc3QgY2hhciAqaGFuZGxlcl9uYW1lKQogewpAQCAtMjMyLDMxICsyNTYsNiBAQAogCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+bmV4dCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGV2ZW50X2Zvcm1hdCAqZmluZF9jYWNoZV9ldmVudChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCi17Ci0Jc3RhdGljIGNoYXIgZXZfbmFtZVsyNTZdOwotCXN0cnVjdCBldmVudF9mb3JtYXQgKmV2ZW50OwotCWludCB0eXBlID0gZXZzZWwtPmF0dHIuY29uZmlnOwotCi0JLyoKLSAJICogWFhYOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBjYWNoZSB0aGlzIHNpbmNlIG5vdyB3ZSBoYXZlIGV2c2VsLT50cF9mb3JtYXQKLSAJICogY2FjaGVkIGFscmVhZHk/IE5lZWQgdG8gcmUtcmVhZCB0aGlzICJjYWNoZSIgcm91dGluZSB0aGF0IGFzIHdlbGwgY2FsbHMKLSAJICogZGVmaW5lX2V2ZW50X3N5bWJvbHMoKSA6LVwKLSAJICovCi0JaWYgKGV2ZW50c1t0eXBlXSkKLQkJcmV0dXJuIGV2ZW50c1t0eXBlXTsKLQotCWV2ZW50c1t0eXBlXSA9IGV2ZW50ID0gZXZzZWwtPnRwX2Zvcm1hdDsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm4gTlVMTDsKLQotCXNwcmludGYoZXZfbmFtZSwgIiVzX18lcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKLQotCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBldmVudC0+cHJpbnRfZm10LmFyZ3MpOwotCi0JcmV0dXJuIGV2ZW50OwotfQotCiBzdGF0aWMgUHlPYmplY3QgKmdldF9maWVsZF9udW1lcmljX2VudHJ5KHN0cnVjdCBldmVudF9mb3JtYXQgKmV2ZW50LAogCQlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZCwgdm9pZCAqZGF0YSkKIHsKQEAgLTMxMiw5ICszMTEsOSBAQAogCWlmICghc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiB8fCAhc2FtcGxlLT5jYWxsY2hhaW4pCiAJCWdvdG8gZXhpdDsKIAotCWlmIChtYWNoaW5lX19yZXNvbHZlX2NhbGxjaGFpbihhbC0+bWFjaGluZSwgZXZzZWwsIGFsLT50aHJlYWQsCi0JCQkJCSAgIHNhbXBsZSwgTlVMTCwgTlVMTCwKLQkJCQkJICAgUEVSRl9NQVhfU1RBQ0tfREVQVEgpICE9IDApIHsKKwlpZiAodGhyZWFkX19yZXNvbHZlX2NhbGxjaGFpbihhbC0+dGhyZWFkLCBldnNlbCwKKwkJCQkgICAgICBzYW1wbGUsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgUEVSRl9NQVhfU1RBQ0tfREVQVEgpICE9IDApIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gcmVzb2x2ZSBjYWxsY2hhaW4uIFNraXBwaW5nXG4iKTsKIAkJZ290byBleGl0OwogCX0KQEAgLTM4MCwxMiArMzc5LDEyIEBACiAJCQkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJCSAgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKKwlzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudCA9IGV2c2VsLT50cF9mb3JtYXQ7CiAJUHlPYmplY3QgKmhhbmRsZXIsICpjb250ZXh0LCAqdCwgKm9iaiwgKmNhbGxjaGFpbjsKIAlQeU9iamVjdCAqZGljdCA9IE5VTEw7CiAJc3RhdGljIGNoYXIgaGFuZGxlcl9uYW1lWzI1Nl07CiAJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CiAJdW5zaWduZWQgbG9uZyBzLCBuczsKLQlzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudDsKIAl1bnNpZ25lZCBuID0gMDsKIAlpbnQgcGlkOwogCWludCBjcHUgPSBzYW1wbGUtPmNwdTsKQEAgLTM5Nyw3ICszOTYsNiBAQAogCWlmICghdCkKIAkJUHlfRmF0YWxFcnJvcigiY291bGRuJ3QgY3JlYXRlIFB5dGhvbiB0dXBsZSIpOwogCi0JZXZlbnQgPSBmaW5kX2NhY2hlX2V2ZW50KGV2c2VsKTsKIAlpZiAoIWV2ZW50KQogCQlkaWUoInVnISBubyBldmVudCBmb3VuZCBmb3IgdHlwZSAlZCIsIChpbnQpZXZzZWwtPmF0dHIuY29uZmlnKTsKIApAQCAtNDA1LDYgKzQwMyw5IEBACiAKIAlzcHJpbnRmKGhhbmRsZXJfbmFtZSwgIiVzX18lcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKIAorCWlmICghdGVzdF9hbmRfc2V0X2JpdChldmVudC0+aWQsIGV2ZW50c19kZWZpbmVkKSkKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGhhbmRsZXJfbmFtZSwgZXZlbnQtPnByaW50X2ZtdC5hcmdzKTsKKwogCWhhbmRsZXIgPSBnZXRfaGFuZGxlcihoYW5kbGVyX25hbWUpOwogCWlmICghaGFuZGxlcikgewogCQlkaWN0ID0gUHlEaWN0X05ldygpOwpAQCAtNDc1LDYgKzQ3NiwyODkgQEAKIAlQeV9ERUNSRUYodCk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqdHVwbGVfbmV3KHVuc2lnbmVkIGludCBzeikKK3sKKwlQeU9iamVjdCAqdDsKKworCXQgPSBQeVR1cGxlX05ldyhzeik7CisJaWYgKCF0KQorCQlQeV9GYXRhbEVycm9yKCJjb3VsZG4ndCBjcmVhdGUgUHl0aG9uIHR1cGxlIik7CisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBpbnQgdHVwbGVfc2V0X3U2NChQeU9iamVjdCAqdCwgdW5zaWduZWQgaW50IHBvcywgdTY0IHZhbCkKK3sKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJcmV0dXJuIFB5VHVwbGVfU2V0SXRlbSh0LCBwb3MsIFB5SW50X0Zyb21Mb25nKHZhbCkpOworI2VuZGlmCisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgorCXJldHVybiBQeVR1cGxlX1NldEl0ZW0odCwgcG9zLCBQeUxvbmdfRnJvbUxvbmdMb25nKHZhbCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgdHVwbGVfc2V0X3MzMihQeU9iamVjdCAqdCwgdW5zaWduZWQgaW50IHBvcywgczMyIHZhbCkKK3sKKwlyZXR1cm4gUHlUdXBsZV9TZXRJdGVtKHQsIHBvcywgUHlJbnRfRnJvbUxvbmcodmFsKSk7Cit9CisKK3N0YXRpYyBpbnQgdHVwbGVfc2V0X3N0cmluZyhQeU9iamVjdCAqdCwgdW5zaWduZWQgaW50IHBvcywgY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gUHlUdXBsZV9TZXRJdGVtKHQsIHBvcywgUHlTdHJpbmdfRnJvbVN0cmluZyhzKSk7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9ldnNlbChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygyKTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgZXZzZWwtPmRiX2lkKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDEsIHBlcmZfZXZzZWxfX25hbWUoZXZzZWwpKTsKKworCWNhbGxfb2JqZWN0KHRhYmxlcy0+ZXZzZWxfaGFuZGxlciwgdCwgImV2c2VsX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X21hY2hpbmUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLAorCQkJCSBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygzKTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgbWFjaGluZS0+ZGJfaWQpOworCXR1cGxlX3NldF9zMzIodCwgMSwgbWFjaGluZS0+cGlkKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDIsIG1hY2hpbmUtPnJvb3RfZGlyID8gbWFjaGluZS0+cm9vdF9kaXIgOiAiIik7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPm1hY2hpbmVfaGFuZGxlciwgdCwgIm1hY2hpbmVfdGFibGUiKTsKKworCVB5X0RFQ1JFRih0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9leHBvcnRfdGhyZWFkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJCXU2NCBtYWluX3RocmVhZF9kYl9pZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCit7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gY29udGFpbmVyX29mKGRiZSwgc3RydWN0IHRhYmxlcywgZGJlKTsKKwlQeU9iamVjdCAqdDsKKworCXQgPSB0dXBsZV9uZXcoNSk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIHRocmVhZC0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMSwgbWFjaGluZS0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMiwgbWFpbl90aHJlYWRfZGJfaWQpOworCXR1cGxlX3NldF9zMzIodCwgMywgdGhyZWFkLT5waWRfKTsKKwl0dXBsZV9zZXRfczMyKHQsIDQsIHRocmVhZC0+dGlkKTsKKworCWNhbGxfb2JqZWN0KHRhYmxlcy0+dGhyZWFkX2hhbmRsZXIsIHQsICJ0aHJlYWRfdGFibGUiKTsKKworCVB5X0RFQ1JFRih0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9leHBvcnRfY29tbShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tKQoreworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9IGNvbnRhaW5lcl9vZihkYmUsIHN0cnVjdCB0YWJsZXMsIGRiZSk7CisJUHlPYmplY3QgKnQ7CisKKwl0ID0gdHVwbGVfbmV3KDIpOworCisJdHVwbGVfc2V0X3U2NCh0LCAwLCBjb21tLT5kYl9pZCk7CisJdHVwbGVfc2V0X3N0cmluZyh0LCAxLCBjb21tX19zdHIoY29tbSkpOworCisJY2FsbF9vYmplY3QodGFibGVzLT5jb21tX2hhbmRsZXIsIHQsICJjb21tX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X2NvbW1fdGhyZWFkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgdTY0IGRiX2lkLAorCQkJCSAgICAgc3RydWN0IGNvbW0gKmNvbW0sIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygzKTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMSwgY29tbS0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMiwgdGhyZWFkLT5kYl9pZCk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPmNvbW1fdGhyZWFkX2hhbmRsZXIsIHQsICJjb21tX3RocmVhZF90YWJsZSIpOworCisJUHlfREVDUkVGKHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9kc28oc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgZHNvICpkc28sCisJCQkgICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9IGNvbnRhaW5lcl9vZihkYmUsIHN0cnVjdCB0YWJsZXMsIGRiZSk7CisJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKKwlQeU9iamVjdCAqdDsKKworCWJ1aWxkX2lkX19zcHJpbnRmKGRzby0+YnVpbGRfaWQsIHNpemVvZihkc28tPmJ1aWxkX2lkKSwgc2J1aWxkX2lkKTsKKworCXQgPSB0dXBsZV9uZXcoNSk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIGRzby0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMSwgbWFjaGluZS0+ZGJfaWQpOworCXR1cGxlX3NldF9zdHJpbmcodCwgMiwgZHNvLT5zaG9ydF9uYW1lKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDMsIGRzby0+bG9uZ19uYW1lKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDQsIHNidWlsZF9pZCk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPmRzb19oYW5kbGVyLCB0LCAiZHNvX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X3N5bWJvbChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBzeW1ib2wgKnN5bSwKKwkJCQlzdHJ1Y3QgZHNvICpkc28pCit7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gY29udGFpbmVyX29mKGRiZSwgc3RydWN0IHRhYmxlcywgZGJlKTsKKwl1NjQgKnN5bV9kYl9pZCA9IHN5bWJvbF9fcHJpdihzeW0pOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldyg2KTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgKnN5bV9kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxLCBkc28tPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDIsIHN5bS0+c3RhcnQpOworCXR1cGxlX3NldF91NjQodCwgMywgc3ltLT5lbmQpOworCXR1cGxlX3NldF9zMzIodCwgNCwgc3ltLT5iaW5kaW5nKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDUsIHN5bS0+bmFtZSk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPnN5bWJvbF9oYW5kbGVyLCB0LCAic3ltYm9sX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X2JyYW5jaF90eXBlKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgdTMyIGJyYW5jaF90eXBlLAorCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygyKTsKKworCXR1cGxlX3NldF9zMzIodCwgMCwgYnJhbmNoX3R5cGUpOworCXR1cGxlX3NldF9zdHJpbmcodCwgMSwgbmFtZSk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPmJyYW5jaF90eXBlX2hhbmRsZXIsIHQsICJicmFuY2hfdHlwZV90YWJsZSIpOworCisJUHlfREVDUkVGKHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9zYW1wbGUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLAorCQkJCXN0cnVjdCBleHBvcnRfc2FtcGxlICplcykKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygyMSk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIGVzLT5kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxLCBlcy0+ZXZzZWwtPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDIsIGVzLT5hbC0+bWFjaGluZS0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMywgZXMtPnRocmVhZC0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgNCwgZXMtPmNvbW1fZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgNSwgZXMtPmRzb19kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCA2LCBlcy0+c3ltX2RiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDcsIGVzLT5vZmZzZXQpOworCXR1cGxlX3NldF91NjQodCwgOCwgZXMtPnNhbXBsZS0+aXApOworCXR1cGxlX3NldF91NjQodCwgOSwgZXMtPnNhbXBsZS0+dGltZSk7CisJdHVwbGVfc2V0X3MzMih0LCAxMCwgZXMtPnNhbXBsZS0+Y3B1KTsKKwl0dXBsZV9zZXRfdTY0KHQsIDExLCBlcy0+YWRkcl9kc29fZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMTIsIGVzLT5hZGRyX3N5bV9kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxMywgZXMtPmFkZHJfb2Zmc2V0KTsKKwl0dXBsZV9zZXRfdTY0KHQsIDE0LCBlcy0+c2FtcGxlLT5hZGRyKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDE1LCBlcy0+c2FtcGxlLT5wZXJpb2QpOworCXR1cGxlX3NldF91NjQodCwgMTYsIGVzLT5zYW1wbGUtPndlaWdodCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxNywgZXMtPnNhbXBsZS0+dHJhbnNhY3Rpb24pOworCXR1cGxlX3NldF91NjQodCwgMTgsIGVzLT5zYW1wbGUtPmRhdGFfc3JjKTsKKwl0dXBsZV9zZXRfczMyKHQsIDE5LCBlcy0+c2FtcGxlLT5mbGFncyAmIFBFUkZfQlJBTkNIX01BU0spOworCXR1cGxlX3NldF9zMzIodCwgMjAsICEhKGVzLT5zYW1wbGUtPmZsYWdzICYgUEVSRl9JUF9GTEFHX0lOX1RYKSk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPnNhbXBsZV9oYW5kbGVyLCB0LCAic2FtcGxlX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X2NhbGxfcGF0aChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjYWxsX3BhdGggKmNwKQoreworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9IGNvbnRhaW5lcl9vZihkYmUsIHN0cnVjdCB0YWJsZXMsIGRiZSk7CisJUHlPYmplY3QgKnQ7CisJdTY0IHBhcmVudF9kYl9pZCwgc3ltX2RiX2lkOworCisJcGFyZW50X2RiX2lkID0gY3AtPnBhcmVudCA/IGNwLT5wYXJlbnQtPmRiX2lkIDogMDsKKwlzeW1fZGJfaWQgPSBjcC0+c3ltID8gKih1NjQgKilzeW1ib2xfX3ByaXYoY3AtPnN5bSkgOiAwOworCisJdCA9IHR1cGxlX25ldyg0KTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgY3AtPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDEsIHBhcmVudF9kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAyLCBzeW1fZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMywgY3AtPmlwKTsKKworCWNhbGxfb2JqZWN0KHRhYmxlcy0+Y2FsbF9wYXRoX2hhbmRsZXIsIHQsICJjYWxsX3BhdGhfdGFibGUiKTsKKworCVB5X0RFQ1JFRih0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9leHBvcnRfY2FsbF9yZXR1cm4oc3RydWN0IGRiX2V4cG9ydCAqZGJlLAorCQkJCSAgICAgc3RydWN0IGNhbGxfcmV0dXJuICpjcikKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCXU2NCBjb21tX2RiX2lkID0gY3ItPmNvbW0gPyBjci0+Y29tbS0+ZGJfaWQgOiAwOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygxMSk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIGNyLT5kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxLCBjci0+dGhyZWFkLT5kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAyLCBjb21tX2RiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDMsIGNyLT5jcC0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgNCwgY3ItPmNhbGxfdGltZSk7CisJdHVwbGVfc2V0X3U2NCh0LCA1LCBjci0+cmV0dXJuX3RpbWUpOworCXR1cGxlX3NldF91NjQodCwgNiwgY3ItPmJyYW5jaF9jb3VudCk7CisJdHVwbGVfc2V0X3U2NCh0LCA3LCBjci0+Y2FsbF9yZWYpOworCXR1cGxlX3NldF91NjQodCwgOCwgY3ItPnJldHVybl9yZWYpOworCXR1cGxlX3NldF91NjQodCwgOSwgY3ItPmNwLT5wYXJlbnQtPmRiX2lkKTsKKwl0dXBsZV9zZXRfczMyKHQsIDEwLCBjci0+ZmxhZ3MpOworCisJY2FsbF9vYmplY3QodGFibGVzLT5jYWxsX3JldHVybl9oYW5kbGVyLCB0LCAiY2FsbF9yZXR1cm5fdGFibGUiKTsKKworCVB5X0RFQ1JFRih0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9wcm9jZXNzX2NhbGxfcmV0dXJuKHN0cnVjdCBjYWxsX3JldHVybiAqY3IsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRiX2V4cG9ydCAqZGJlID0gZGF0YTsKKworCXJldHVybiBkYl9leHBvcnRfX2NhbGxfcmV0dXJuKGRiZSwgY3IpOworfQorCiBzdGF0aWMgdm9pZCBweXRob25fcHJvY2Vzc19nZW5lcmFsX2V2ZW50KHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAogCQkJCQkgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAogCQkJCQkgc3RydWN0IHRocmVhZCAqdGhyZWFkLApAQCAtNTUxLDE5ICs4MzUsMjUgQEAKIAlQeV9ERUNSRUYodCk7CiB9CiAKLXN0YXRpYyB2b2lkIHB5dGhvbl9wcm9jZXNzX2V2ZW50KHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50IF9fbWF5YmVfdW51c2VkLAorc3RhdGljIHZvaWQgcHl0aG9uX3Byb2Nlc3NfZXZlbnQodW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAogCQkJCSBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCQkJIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCQkgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKQogeworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9ICZ0YWJsZXNfZ2xvYmFsOworCiAJc3dpdGNoIChldnNlbC0+YXR0ci50eXBlKSB7CiAJY2FzZSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDoKIAkJcHl0aG9uX3Byb2Nlc3NfdHJhY2Vwb2ludChzYW1wbGUsIGV2c2VsLCB0aHJlYWQsIGFsKTsKIAkJYnJlYWs7CiAJLyogUmVzZXJ2ZSBmb3IgZnV0dXJlIHByb2Nlc3NfaHcvc3cvcmF3IEFQSXMgKi8KIAlkZWZhdWx0OgotCQlweXRob25fcHJvY2Vzc19nZW5lcmFsX2V2ZW50KHNhbXBsZSwgZXZzZWwsIHRocmVhZCwgYWwpOworCQlpZiAodGFibGVzLT5kYl9leHBvcnRfbW9kZSkKKwkJCWRiX2V4cG9ydF9fc2FtcGxlKCZ0YWJsZXMtPmRiZSwgZXZlbnQsIHNhbXBsZSwgZXZzZWwsCisJCQkJCSAgdGhyZWFkLCBhbCk7CisJCWVsc2UKKwkJCXB5dGhvbl9wcm9jZXNzX2dlbmVyYWxfZXZlbnQoc2FtcGxlLCBldnNlbCwgdGhyZWFkLCBhbCk7CiAJfQogfQogCkBAIC01ODksMTEgKzg3OSw3OSBAQAogCXJldHVybiAtMTsKIH0KIAorI2RlZmluZSBTRVRfVEFCTEVfSEFORExFUl8obmFtZSwgaGFuZGxlcl9uYW1lLCB0YWJsZV9uYW1lKSBkbyB7CQlcCisJdGFibGVzLT5oYW5kbGVyX25hbWUgPSBnZXRfaGFuZGxlcigjdGFibGVfbmFtZSk7CQlcCisJaWYgKHRhYmxlcy0+aGFuZGxlcl9uYW1lKQkJCQkJXAorCQl0YWJsZXMtPmRiZS5leHBvcnRfICMjIG5hbWUgPSBweXRob25fZXhwb3J0XyAjIyBuYW1lOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFNFVF9UQUJMRV9IQU5ETEVSKG5hbWUpIFwKKwlTRVRfVEFCTEVfSEFORExFUl8obmFtZSwgbmFtZSAjIyBfaGFuZGxlciwgbmFtZSAjIyBfdGFibGUpCisKK3N0YXRpYyB2b2lkIHNldF90YWJsZV9oYW5kbGVycyhzdHJ1Y3QgdGFibGVzICp0YWJsZXMpCit7CisJY29uc3QgY2hhciAqcGVyZl9kYl9leHBvcnRfbW9kZSA9ICJwZXJmX2RiX2V4cG9ydF9tb2RlIjsKKwljb25zdCBjaGFyICpwZXJmX2RiX2V4cG9ydF9jYWxscyA9ICJwZXJmX2RiX2V4cG9ydF9jYWxscyI7CisJUHlPYmplY3QgKmRiX2V4cG9ydF9tb2RlLCAqZGJfZXhwb3J0X2NhbGxzOworCWJvb2wgZXhwb3J0X2NhbGxzID0gZmFsc2U7CisJaW50IHJldDsKKworCW1lbXNldCh0YWJsZXMsIDAsIHNpemVvZihzdHJ1Y3QgdGFibGVzKSk7CisJaWYgKGRiX2V4cG9ydF9faW5pdCgmdGFibGVzLT5kYmUpKQorCQlQeV9GYXRhbEVycm9yKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBleHBvcnQiKTsKKworCWRiX2V4cG9ydF9tb2RlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCBwZXJmX2RiX2V4cG9ydF9tb2RlKTsKKwlpZiAoIWRiX2V4cG9ydF9tb2RlKQorCQlyZXR1cm47CisKKwlyZXQgPSBQeU9iamVjdF9Jc1RydWUoZGJfZXhwb3J0X21vZGUpOworCWlmIChyZXQgPT0gLTEpCisJCWhhbmRsZXJfY2FsbF9kaWUocGVyZl9kYl9leHBvcnRfbW9kZSk7CisJaWYgKCFyZXQpCisJCXJldHVybjsKKworCXRhYmxlcy0+ZGJlLmNycCA9IE5VTEw7CisJZGJfZXhwb3J0X2NhbGxzID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCBwZXJmX2RiX2V4cG9ydF9jYWxscyk7CisJaWYgKGRiX2V4cG9ydF9jYWxscykgeworCQlyZXQgPSBQeU9iamVjdF9Jc1RydWUoZGJfZXhwb3J0X2NhbGxzKTsKKwkJaWYgKHJldCA9PSAtMSkKKwkJCWhhbmRsZXJfY2FsbF9kaWUocGVyZl9kYl9leHBvcnRfY2FsbHMpOworCQlleHBvcnRfY2FsbHMgPSAhIXJldDsKKwl9CisKKwlpZiAoZXhwb3J0X2NhbGxzKSB7CisJCXRhYmxlcy0+ZGJlLmNycCA9CisJCQljYWxsX3JldHVybl9wcm9jZXNzb3JfX25ldyhweXRob25fcHJvY2Vzc19jYWxsX3JldHVybiwKKwkJCQkJCSAgICZ0YWJsZXMtPmRiZSk7CisJCWlmICghdGFibGVzLT5kYmUuY3JwKQorCQkJUHlfRmF0YWxFcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBjYWxscyBwcm9jZXNzb3IiKTsKKwl9CisKKwl0YWJsZXMtPmRiX2V4cG9ydF9tb2RlID0gdHJ1ZTsKKwkvKgorCSAqIFJlc2VydmUgcGVyIHN5bWJvbCBzcGFjZSBmb3Igc3ltYm9sLT5kYl9pZCB2aWEgc3ltYm9sX19wcml2KCkKKwkgKi8KKwlzeW1ib2xfY29uZi5wcml2X3NpemUgPSBzaXplb2YodTY0KTsKKworCVNFVF9UQUJMRV9IQU5ETEVSKGV2c2VsKTsKKwlTRVRfVEFCTEVfSEFORExFUihtYWNoaW5lKTsKKwlTRVRfVEFCTEVfSEFORExFUih0aHJlYWQpOworCVNFVF9UQUJMRV9IQU5ETEVSKGNvbW0pOworCVNFVF9UQUJMRV9IQU5ETEVSKGNvbW1fdGhyZWFkKTsKKwlTRVRfVEFCTEVfSEFORExFUihkc28pOworCVNFVF9UQUJMRV9IQU5ETEVSKHN5bWJvbCk7CisJU0VUX1RBQkxFX0hBTkRMRVIoYnJhbmNoX3R5cGUpOworCVNFVF9UQUJMRV9IQU5ETEVSKHNhbXBsZSk7CisJU0VUX1RBQkxFX0hBTkRMRVIoY2FsbF9wYXRoKTsKKwlTRVRfVEFCTEVfSEFORExFUihjYWxsX3JldHVybik7Cit9CisKIC8qCiAgKiBTdGFydCB0cmFjZSBzY3JpcHQKICAqLwogc3RhdGljIGludCBweXRob25fc3RhcnRfc2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogeworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9ICZ0YWJsZXNfZ2xvYmFsOwogCWNvbnN0IGNoYXIgKipjb21tYW5kX2xpbmU7CiAJY2hhciBidWZbUEFUSF9NQVhdOwogCWludCBpLCBlcnIgPSAwOwpAQCAtNjMyLDYgKzk5MCwxNCBAQAogCiAJZnJlZShjb21tYW5kX2xpbmUpOwogCisJc2V0X3RhYmxlX2hhbmRsZXJzKHRhYmxlcyk7CisKKwlpZiAodGFibGVzLT5kYl9leHBvcnRfbW9kZSkgeworCQllcnIgPSBkYl9leHBvcnRfX2JyYW5jaF90eXBlcygmdGFibGVzLT5kYmUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKKwl9CisKIAlyZXR1cm4gZXJyOwogZXJyb3I6CiAJUHlfRmluYWxpemUoKTsKQEAgLTY0Miw3ICsxMDA4LDkgQEAKIAogc3RhdGljIGludCBweXRob25fZmx1c2hfc2NyaXB0KHZvaWQpCiB7Ci0JcmV0dXJuIDA7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gJnRhYmxlc19nbG9iYWw7CisKKwlyZXR1cm4gZGJfZXhwb3J0X19mbHVzaCgmdGFibGVzLT5kYmUpOwogfQogCiAvKgpAQCAtNjUwLDggKzEwMTgsMTIgQEAKICAqLwogc3RhdGljIGludCBweXRob25fc3RvcF9zY3JpcHQodm9pZCkKIHsKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSAmdGFibGVzX2dsb2JhbDsKKwogCXRyeV9jYWxsX29iamVjdCgidHJhY2VfZW5kIiwgTlVMTCk7CiAKKwlkYl9leHBvcnRfX2V4aXQoJnRhYmxlcy0+ZGJlKTsKKwogCVB5X1hERUNSRUYobWFpbl9kaWN0KTsKIAlQeV9YREVDUkVGKG1haW5fbW9kdWxlKTsKIAlQeV9GaW5hbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggNjcwMmFjMi4uNWYwZTA1YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC0yMjgsNiArMjI4LDE1IEBACiAJCQkJICB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCQkgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogCitzdGF0aWMgaW50IHByb2Nlc3NfaWRfaW5kZXhfc3R1YihzdHJ1Y3QgcGVyZl90b29sICp0b29sIF9fbWF5YmVfdW51c2VkLAorCQkJCSB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCBfX21heWJlX3VudXNlZCwKKwkJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqcGVyZl9zZXNzaW9uCisJCQkJIF9fbWF5YmVfdW51c2VkKQoreworCWR1bXBfcHJpbnRmKCI6IHVuaGFuZGxlZCFcbiIpOworCXJldHVybiAwOworfQorCiB2b2lkIHBlcmZfdG9vbF9fZmlsbF9kZWZhdWx0cyhzdHJ1Y3QgcGVyZl90b29sICp0b29sKQogewogCWlmICh0b29sLT5zYW1wbGUgPT0gTlVMTCkKQEAgLTI2Miw2ICsyNzEsOCBAQAogCQllbHNlCiAJCQl0b29sLT5maW5pc2hlZF9yb3VuZCA9IHByb2Nlc3NfZmluaXNoZWRfcm91bmRfc3R1YjsKIAl9CisJaWYgKHRvb2wtPmlkX2luZGV4ID09IE5VTEwpCisJCXRvb2wtPmlkX2luZGV4ID0gcHJvY2Vzc19pZF9pbmRleF9zdHViOwogfQogIAogc3RhdGljIHZvaWQgc3dhcF9zYW1wbGVfaWRfYWxsKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQpAQCAtNDYwLDYgKzQ3MSw3IEBACiAJW1BFUkZfUkVDT1JEX0hFQURFUl9FVkVOVF9UWVBFXQkgID0gcGVyZl9ldmVudF9fZXZlbnRfdHlwZV9zd2FwLAogCVtQRVJGX1JFQ09SRF9IRUFERVJfVFJBQ0lOR19EQVRBXSA9IHBlcmZfZXZlbnRfX3RyYWNpbmdfZGF0YV9zd2FwLAogCVtQRVJGX1JFQ09SRF9IRUFERVJfQlVJTERfSURdCSAgPSBOVUxMLAorCVtQRVJGX1JFQ09SRF9JRF9JTkRFWF0JCSAgPSBwZXJmX2V2ZW50X19hbGw2NF9zd2FwLAogCVtQRVJGX1JFQ09SRF9IRUFERVJfTUFYXQkgID0gTlVMTCwKIH07CiAKQEAgLTUyMSwxNSArNTMzLDExIEBACiAJCXJldHVybiAtRVRJTUU7CiAKIAlpZiAodGltZXN0YW1wIDwgb2UtPmxhc3RfZmx1c2gpIHsKLQkJV0FSTl9PTkNFKDEsICJUaW1lc3RhbXAgYmVsb3cgbGFzdCB0aW1lc2xpY2UgZmx1c2hcbiIpOwotCi0JCXByX29lX3RpbWUodGltZXN0YW1wLCAgICAgICJvdXQgb2Ygb3JkZXIgZXZlbnQiKTsKKwkJcHJfb2VfdGltZSh0aW1lc3RhbXAsICAgICAgIm91dCBvZiBvcmRlciBldmVudFxuIik7CiAJCXByX29lX3RpbWUob2UtPmxhc3RfZmx1c2gsICJsYXN0IGZsdXNoLCBsYXN0X2ZsdXNoX3R5cGUgJWRcbiIsCiAJCQkgICBvZS0+bGFzdF9mbHVzaF90eXBlKTsKIAotCQkvKiBXZSBjb3VsZCBnZXQgb3V0IG9mIG9yZGVyIG1lc3NhZ2VzIGFmdGVyIGZvcmNlZCBmbHVzaC4gKi8KLQkJaWYgKG9lLT5sYXN0X2ZsdXNoX3R5cGUgIT0gT0VfRkxVU0hfX0hBTEYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJcy0+c3RhdHMubnJfdW5vcmRlcmVkX2V2ZW50cysrOwogCX0KIAogCW5ldyA9IG9yZGVyZWRfZXZlbnRzX19uZXcob2UsIHRpbWVzdGFtcCwgZXZlbnQpOwpAQCAtNTgwLDE1ICs1ODgsNDYgQEAKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpyZWdzX2FiaVtdID0geworCVtQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FXSA9ICJub25lIiwKKwlbUEVSRl9TQU1QTEVfUkVHU19BQklfMzJdID0gIjMyLWJpdCIsCisJW1BFUkZfU0FNUExFX1JFR1NfQUJJXzY0XSA9ICI2NC1iaXQiLAorfTsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpyZWdzX2R1bXBfYWJpKHN0cnVjdCByZWdzX2R1bXAgKmQpCit7CisJaWYgKGQtPmFiaSA+IFBFUkZfU0FNUExFX1JFR1NfQUJJXzY0KQorCQlyZXR1cm4gInVua25vd24iOworCisJcmV0dXJuIHJlZ3NfYWJpW2QtPmFiaV07Cit9CisKK3N0YXRpYyB2b2lkIHJlZ3NfX3ByaW50Zihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgcmVnc19kdW1wICpyZWdzKQoreworCXU2NCBtYXNrID0gcmVncy0+bWFzazsKKworCXByaW50ZigiLi4uICVzIHJlZ3M6IG1hc2sgMHglIiBQUkl4NjQgIiBBQkkgJXNcbiIsCisJICAgICAgIHR5cGUsCisJICAgICAgIG1hc2ssCisJICAgICAgIHJlZ3NfZHVtcF9hYmkocmVncykpOworCisJcmVnc19kdW1wX19wcmludGYobWFzaywgcmVncy0+cmVncyk7Cit9CisKIHN0YXRpYyB2b2lkIHJlZ3NfdXNlcl9fcHJpbnRmKHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlKQogewogCXN0cnVjdCByZWdzX2R1bXAgKnVzZXJfcmVncyA9ICZzYW1wbGUtPnVzZXJfcmVnczsKIAotCWlmICh1c2VyX3JlZ3MtPnJlZ3MpIHsKLQkJdTY0IG1hc2sgPSB1c2VyX3JlZ3MtPm1hc2s7Ci0JCXByaW50ZigiLi4uIHVzZXIgcmVnczogbWFzayAweCUiIFBSSXg2NCAiXG4iLCBtYXNrKTsKLQkJcmVnc19kdW1wX19wcmludGYobWFzaywgdXNlcl9yZWdzLT5yZWdzKTsKLQl9CisJaWYgKHVzZXJfcmVncy0+cmVncykKKwkJcmVnc19fcHJpbnRmKCJ1c2VyIiwgdXNlcl9yZWdzKTsKK30KKworc3RhdGljIHZvaWQgcmVnc19pbnRyX19wcmludGYoc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUpCit7CisJc3RydWN0IHJlZ3NfZHVtcCAqaW50cl9yZWdzID0gJnNhbXBsZS0+aW50cl9yZWdzOworCisJaWYgKGludHJfcmVncy0+cmVncykKKwkJcmVnc19fcHJpbnRmKCJpbnRyIiwgaW50cl9yZWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhY2tfdXNlcl9fcHJpbnRmKHN0cnVjdCBzdGFja19kdW1wICpkdW1wKQpAQCAtNjg3LDYgKzcyNiw5IEBACiAJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVHU19VU0VSKQogCQlyZWdzX3VzZXJfX3ByaW50ZihzYW1wbGUpOwogCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVHU19JTlRSKQorCQlyZWdzX2ludHJfX3ByaW50ZihzYW1wbGUpOworCiAJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfU1RBQ0tfVVNFUikKIAkJc3RhY2tfdXNlcl9fcHJpbnRmKCZzYW1wbGUtPnVzZXJfc3RhY2spOwogCkBAIC04ODgsMTEgKzkzMCwyNiBAQAogCQlyZXR1cm4gdG9vbC0+YnVpbGRfaWQodG9vbCwgZXZlbnQsIHNlc3Npb24pOwogCWNhc2UgUEVSRl9SRUNPUkRfRklOSVNIRURfUk9VTkQ6CiAJCXJldHVybiB0b29sLT5maW5pc2hlZF9yb3VuZCh0b29sLCBldmVudCwgc2Vzc2lvbik7CisJY2FzZSBQRVJGX1JFQ09SRF9JRF9JTkRFWDoKKwkJcmV0dXJuIHRvb2wtPmlkX2luZGV4KHRvb2wsIGV2ZW50LCBzZXNzaW9uKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiB9CiAKK2ludCBwZXJmX3Nlc3Npb25fX2RlbGl2ZXJfc3ludGhfZXZlbnQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkgICAgICB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCQkgICAgICBzdHJ1Y3QgcGVyZl90b29sICp0b29sKQoreworCWV2ZW50c19zdGF0c19faW5jKCZzZXNzaW9uLT5zdGF0cywgZXZlbnQtPmhlYWRlci50eXBlKTsKKworCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPj0gUEVSRl9SRUNPUkRfVVNFUl9UWVBFX1NUQVJUKQorCQlyZXR1cm4gcGVyZl9zZXNzaW9uX19wcm9jZXNzX3VzZXJfZXZlbnQoc2Vzc2lvbiwgZXZlbnQsIHRvb2wsIDApOworCisJcmV0dXJuIHBlcmZfc2Vzc2lvbl9fZGVsaXZlcl9ldmVudChzZXNzaW9uLCBldmVudCwgc2FtcGxlLCB0b29sLCAwKTsKK30KKwogc3RhdGljIHZvaWQgZXZlbnRfc3dhcCh1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwgYm9vbCBzYW1wbGVfaWRfYWxsKQogewogCXBlcmZfZXZlbnRfX3N3YXBfb3Agc3dhcDsKQEAgLTEwNTcsNiArMTExNCw5IEBACiAJCQkgICAgIkRvIHlvdSBoYXZlIGEgS1ZNIGd1ZXN0IHJ1bm5pbmcgYW5kIG5vdCB1c2luZyAncGVyZiBrdm0nP1xuIiwKIAkJCSAgICBzZXNzaW9uLT5zdGF0cy5ucl91bnByb2Nlc3NhYmxlX3NhbXBsZXMpOwogCX0KKworCWlmIChzZXNzaW9uLT5zdGF0cy5ucl91bm9yZGVyZWRfZXZlbnRzICE9IDApCisJCXVpX193YXJuaW5nKCIldSBvdXQgb2Ygb3JkZXIgZXZlbnRzIHJlY29yZGVkLlxuIiwgc2Vzc2lvbi0+c3RhdHMubnJfdW5vcmRlcmVkX2V2ZW50cyk7CiB9CiAKIHZvbGF0aWxlIGludCBzZXNzaW9uX2RvbmU7CkBAIC0xNDE3LDkgKzE0NzcsOSBAQAogCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluICYmIHNhbXBsZS0+Y2FsbGNoYWluKSB7CiAJCXN0cnVjdCBhZGRyX2xvY2F0aW9uIG5vZGVfYWw7CiAKLQkJaWYgKG1hY2hpbmVfX3Jlc29sdmVfY2FsbGNoYWluKGFsLT5tYWNoaW5lLCBldnNlbCwgYWwtPnRocmVhZCwKLQkJCQkJICAgICAgIHNhbXBsZSwgTlVMTCwgTlVMTCwKLQkJCQkJICAgICAgIFBFUkZfTUFYX1NUQUNLX0RFUFRIKSAhPSAwKSB7CisJCWlmICh0aHJlYWRfX3Jlc29sdmVfY2FsbGNoYWluKGFsLT50aHJlYWQsIGV2c2VsLAorCQkJCQkgICAgICBzYW1wbGUsIE5VTEwsIE5VTEwsCisJCQkJCSAgICAgIFBFUkZfTUFYX1NUQUNLX0RFUFRIKSAhPSAwKSB7CiAJCQlpZiAodmVyYm9zZSkKIAkJCQllcnJvcigiRmFpbGVkIHRvIHJlc29sdmUgY2FsbGNoYWluLiBTa2lwcGluZ1xuIik7CiAJCQlyZXR1cm47CkBAIC0xNTk0LDMgKzE2NTQsMTExIEBACiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KKworaW50IHBlcmZfZXZlbnRfX3Byb2Nlc3NfaWRfaW5kZXgoc3RydWN0IHBlcmZfdG9vbCAqdG9vbCBfX21heWJlX3VudXNlZCwKKwkJCQkgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QgPSBzZXNzaW9uLT5ldmxpc3Q7CisJc3RydWN0IGlkX2luZGV4X2V2ZW50ICppZSA9ICZldmVudC0+aWRfaW5kZXg7CisJc2l6ZV90IGksIG5yLCBtYXhfbnI7CisKKwltYXhfbnIgPSAoaWUtPmhlYWRlci5zaXplIC0gc2l6ZW9mKHN0cnVjdCBpZF9pbmRleF9ldmVudCkpIC8KKwkJIHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZW50cnkpOworCW5yID0gaWUtPm5yOworCWlmIChuciA+IG1heF9ucikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZHVtcF90cmFjZSkKKwkJZnByaW50ZihzdGRvdXQsICIgbnI6ICV6dVxuIiwgbnIpOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJc3RydWN0IGlkX2luZGV4X2VudHJ5ICplID0gJmllLT5lbnRyaWVzW2ldOworCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfaWQgKnNpZDsKKworCQlpZiAoZHVtcF90cmFjZSkgeworCQkJZnByaW50ZihzdGRvdXQsCSIgLi4uIGlkOiAlIlBSSXU2NCwgZS0+aWQpOworCQkJZnByaW50ZihzdGRvdXQsCSIgIGlkeDogJSJQUkl1NjQsIGUtPmlkeCk7CisJCQlmcHJpbnRmKHN0ZG91dCwJIiAgY3B1OiAlIlBSSWQ2NCwgZS0+Y3B1KTsKKwkJCWZwcmludGYoc3Rkb3V0LAkiICB0aWQ6ICUiUFJJZDY0IlxuIiwgZS0+dGlkKTsKKwkJfQorCisJCXNpZCA9IHBlcmZfZXZsaXN0X19pZDJzaWQoZXZsaXN0LCBlLT5pZCk7CisJCWlmICghc2lkKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisJCXNpZC0+aWR4ID0gZS0+aWR4OworCQlzaWQtPmNwdSA9IGUtPmNwdTsKKwkJc2lkLT50aWQgPSBlLT50aWQ7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcGVyZl9ldmVudF9fc3ludGhlc2l6ZV9pZF9pbmRleChzdHJ1Y3QgcGVyZl90b29sICp0b29sLAorCQkJCSAgICBwZXJmX2V2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKKwkJCQkgICAgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsCisJCQkJICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCXVuaW9uIHBlcmZfZXZlbnQgKmV2OworCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKKwlzaXplX3QgbnIgPSAwLCBpID0gMCwgc3osIG1heF9uciwgbjsKKwlpbnQgZXJyOworCisJcHJfZGVidWcyKCJTeW50aGVzaXppbmcgaWQgaW5kZXhcbiIpOworCisJbWF4X25yID0gKFVJTlQxNl9NQVggLSBzaXplb2Yoc3RydWN0IGlkX2luZGV4X2V2ZW50KSkgLworCQkgc2l6ZW9mKHN0cnVjdCBpZF9pbmRleF9lbnRyeSk7CisKKwlldmxpc3RfX2Zvcl9lYWNoKGV2bGlzdCwgZXZzZWwpCisJCW5yICs9IGV2c2VsLT5pZHM7CisKKwluID0gbnIgPiBtYXhfbnIgPyBtYXhfbnIgOiBucjsKKwlzeiA9IHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZXZlbnQpICsgbiAqIHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZW50cnkpOworCWV2ID0gemFsbG9jKHN6KTsKKwlpZiAoIWV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWV2LT5pZF9pbmRleC5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX0lEX0lOREVYOworCWV2LT5pZF9pbmRleC5oZWFkZXIuc2l6ZSA9IHN6OworCWV2LT5pZF9pbmRleC5uciA9IG47CisKKwlldmxpc3RfX2Zvcl9lYWNoKGV2bGlzdCwgZXZzZWwpIHsKKwkJdTMyIGo7CisKKwkJZm9yIChqID0gMDsgaiA8IGV2c2VsLT5pZHM7IGorKykgeworCQkJc3RydWN0IGlkX2luZGV4X2VudHJ5ICplOworCQkJc3RydWN0IHBlcmZfc2FtcGxlX2lkICpzaWQ7CisKKwkJCWlmIChpID49IG4pIHsKKwkJCQllcnIgPSBwcm9jZXNzKHRvb2wsIGV2LCBOVUxMLCBtYWNoaW5lKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlnb3RvIG91dF9lcnI7CisJCQkJbnIgLT0gbjsKKwkJCQlpID0gMDsKKwkJCX0KKworCQkJZSA9ICZldi0+aWRfaW5kZXguZW50cmllc1tpKytdOworCisJCQllLT5pZCA9IGV2c2VsLT5pZFtqXTsKKworCQkJc2lkID0gcGVyZl9ldmxpc3RfX2lkMnNpZChldmxpc3QsIGUtPmlkKTsKKwkJCWlmICghc2lkKSB7CisJCQkJZnJlZShldik7CisJCQkJcmV0dXJuIC1FTk9FTlQ7CisJCQl9CisKKwkJCWUtPmlkeCA9IHNpZC0+aWR4OworCQkJZS0+Y3B1ID0gc2lkLT5jcHU7CisJCQllLT50aWQgPSBzaWQtPnRpZDsKKwkJfQorCX0KKworCXN6ID0gc2l6ZW9mKHN0cnVjdCBpZF9pbmRleF9ldmVudCkgKyBuciAqIHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZW50cnkpOworCWV2LT5pZF9pbmRleC5oZWFkZXIuc2l6ZSA9IHN6OworCWV2LT5pZF9pbmRleC5uciA9IG5yOworCisJZXJyID0gcHJvY2Vzcyh0b29sLCBldiwgTlVMTCwgbWFjaGluZSk7CitvdXRfZXJyOgorCWZyZWUoZXYpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmggYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCmluZGV4IGE0YmU4NTEuLmRjMjZlYmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaApAQCAtMTI2LDQgKzEyNiwxOSBAQAogZXh0ZXJuIHZvbGF0aWxlIGludCBzZXNzaW9uX2RvbmU7CiAKICNkZWZpbmUgc2Vzc2lvbl9kb25lKCkJQUNDRVNTX09OQ0Uoc2Vzc2lvbl9kb25lKQorCitpbnQgcGVyZl9zZXNzaW9uX19kZWxpdmVyX3N5bnRoX2V2ZW50KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICAgICAgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkJICAgICAgc3RydWN0IHBlcmZfdG9vbCAqdG9vbCk7CisKK2ludCBwZXJmX2V2ZW50X19wcm9jZXNzX2lkX2luZGV4KHN0cnVjdCBwZXJmX3Rvb2wgKnRvb2wsCisJCQkJIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKKworaW50IHBlcmZfZXZlbnRfX3N5bnRoZXNpemVfaWRfaW5kZXgoc3RydWN0IHBlcmZfdG9vbCAqdG9vbCwKKwkJCQkgICAgcGVyZl9ldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJICAgIHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LAorCQkJCSAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CisKICNlbmRpZiAvKiBfX1BFUkZfU0VTU0lPTl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc29ydC5jIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuYwppbmRleCA5NDAyODg1Li45MTM5ZGRhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc29ydC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMKQEAgLTI5MSw3ICsyOTEsOCBAQAogCQllbHNlIHsKIAkJCXN0cnVjdCBtYXAgKm1hcCA9IGxlZnQtPm1zLm1hcDsKIAkJCWxlZnQtPnNyY2xpbmUgPSBnZXRfc3JjbGluZShtYXAtPmRzbywKLQkJCQkJICAgIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgbGVmdC0+aXApKTsKKwkJCQkJICAgbWFwX19yaXBfMm9iamR1bXAobWFwLCBsZWZ0LT5pcCksCisJCQkJCQkgICAgbGVmdC0+bXMuc3ltLCB0cnVlKTsKIAkJfQogCX0KIAlpZiAoIXJpZ2h0LT5zcmNsaW5lKSB7CkBAIC0zMDAsNyArMzAxLDggQEAKIAkJZWxzZSB7CiAJCQlzdHJ1Y3QgbWFwICptYXAgPSByaWdodC0+bXMubWFwOwogCQkJcmlnaHQtPnNyY2xpbmUgPSBnZXRfc3JjbGluZShtYXAtPmRzbywKLQkJCQkJICAgIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgcmlnaHQtPmlwKSk7CisJCQkJCSAgICAgbWFwX19yaXBfMm9iamR1bXAobWFwLCByaWdodC0+aXApLAorCQkJCQkJICAgICByaWdodC0+bXMuc3ltLCB0cnVlKTsKIAkJfQogCX0KIAlyZXR1cm4gc3RyY21wKHJpZ2h0LT5zcmNsaW5lLCBsZWZ0LT5zcmNsaW5lKTsKQEAgLTMwOSw3ICszMTEsNyBAQAogc3RhdGljIGludCBoaXN0X2VudHJ5X19zcmNsaW5lX3NucHJpbnRmKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgY2hhciAqYmYsCiAJCQkJCXNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgd2lkdGgpCiB7Ci0JcmV0dXJuIHJlcHNlcF9zbnByaW50ZihiZiwgc2l6ZSwgIiUqLiotcyIsIHdpZHRoLCB3aWR0aCwgaGUtPnNyY2xpbmUpOworCXJldHVybiByZXBzZXBfc25wcmludGYoYmYsIHNpemUsICIlLSouKnMiLCB3aWR0aCwgd2lkdGgsIGhlLT5zcmNsaW5lKTsKIH0KIAogc3RydWN0IHNvcnRfZW50cnkgc29ydF9zcmNsaW5lID0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NyY2xpbmUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zcmNsaW5lLmMKaW5kZXggZjNlNGJjNS4uZTczYjZhNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NyY2xpbmUuYworKysgYi90b29scy9wZXJmL3V0aWwvc3JjbGluZS5jCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgInV0aWwvdXRpbC5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKIAorI2luY2x1ZGUgInN5bWJvbC5oIgorCiAjaWZkZWYgSEFWRV9MSUJCRkRfU1VQUE9SVAogCiAvKgpAQCAtMjUwLDcgKzI1Miw4IEBACiAgKi8KICNkZWZpbmUgQTJMX0ZBSUxfTElNSVQgMTIzCiAKLWNoYXIgKmdldF9zcmNsaW5lKHN0cnVjdCBkc28gKmRzbywgdW5zaWduZWQgbG9uZyBhZGRyKQorY2hhciAqZ2V0X3NyY2xpbmUoc3RydWN0IGRzbyAqZHNvLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBzeW1ib2wgKnN5bSwKKwkJICBib29sIHNob3dfc3ltKQogewogCWNoYXIgKmZpbGUgPSBOVUxMOwogCXVuc2lnbmVkIGxpbmUgPSAwOwpAQCAtMjU4LDcgKzI2MSw3IEBACiAJY29uc3QgY2hhciAqZHNvX25hbWU7CiAKIAlpZiAoIWRzby0+aGFzX3NyY2xpbmUpCi0JCXJldHVybiBTUkNMSU5FX1VOS05PV047CisJCWdvdG8gb3V0OwogCiAJaWYgKGRzby0+c3ltc3JjX2ZpbGVuYW1lKQogCQlkc29fbmFtZSA9IGRzby0+c3ltc3JjX2ZpbGVuYW1lOwpAQCAtMjc0LDcgKzI3Nyw3IEBACiAJaWYgKCFhZGRyMmxpbmUoZHNvX25hbWUsIGFkZHIsICZmaWxlLCAmbGluZSwgZHNvKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoYXNwcmludGYoJnNyY2xpbmUsICIlczoldSIsIGZpbGUsIGxpbmUpIDwgMCkgeworCWlmIChhc3ByaW50Zigmc3JjbGluZSwgIiVzOiV1IiwgYmFzZW5hbWUoZmlsZSksIGxpbmUpIDwgMCkgewogCQlmcmVlKGZpbGUpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yODksNyArMjkyLDEzIEBACiAJCWRzby0+aGFzX3NyY2xpbmUgPSAwOwogCQlkc29fX2ZyZWVfYTJsKGRzbyk7CiAJfQotCXJldHVybiBTUkNMSU5FX1VOS05PV047CisJaWYgKHN5bSkgeworCQlpZiAoYXNwcmludGYoJnNyY2xpbmUsICIlcyslbGQiLCBzaG93X3N5bSA/IHN5bS0+bmFtZSA6ICIiLAorCQkJCQlhZGRyIC0gc3ltLT5zdGFydCkgPCAwKQorCQkJcmV0dXJuIFNSQ0xJTkVfVU5LTk9XTjsKKwl9IGVsc2UgaWYgKGFzcHJpbnRmKCZzcmNsaW5lLCAiJXNbJWx4XSIsIGRzby0+c2hvcnRfbmFtZSwgYWRkcikgPCAwKQorCQlyZXR1cm4gU1JDTElORV9VTktOT1dOOworCXJldHVybiBzcmNsaW5lOwogfQogCiB2b2lkIGZyZWVfc3JjbGluZShjaGFyICpzcmNsaW5lKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1lbGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmMKaW5kZXggMWUyM2E1Yi4uMDZmY2QxYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1lbGYuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jCkBAIC0xMSw2ICsxMSwyNyBAQAogI2luY2x1ZGUgPHN5bWJvbC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgImRlYnVnLmgiCiAKKyNpZmRlZiBIQVZFX0NQTFVTX0RFTUFOR0xFX1NVUFBPUlQKK2V4dGVybiBjaGFyICpjcGx1c19kZW1hbmdsZShjb25zdCBjaGFyICosIGludCk7CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqYmZkX2RlbWFuZ2xlKHZvaWQgX19tYXliZV91bnVzZWQgKnYsIGNvbnN0IGNoYXIgKmMsIGludCBpKQoreworCXJldHVybiBjcGx1c19kZW1hbmdsZShjLCBpKTsKK30KKyNlbHNlCisjaWZkZWYgTk9fREVNQU5HTEUKK3N0YXRpYyBpbmxpbmUgY2hhciAqYmZkX2RlbWFuZ2xlKHZvaWQgX19tYXliZV91bnVzZWQgKnYsCisJCQkJIGNvbnN0IGNoYXIgX19tYXliZV91bnVzZWQgKmMsCisJCQkJIGludCBfX21heWJlX3VudXNlZCBpKQoreworCXJldHVybiBOVUxMOworfQorI2Vsc2UKKyNkZWZpbmUgUEFDS0FHRSAncGVyZicKKyNpbmNsdWRlIDxiZmQuaD4KKyNlbmRpZgorI2VuZGlmCisKICNpZm5kZWYgSEFWRV9FTEZfR0VUUEhEUk5VTV9TVVBQT1JUCiBzdGF0aWMgaW50IGVsZl9nZXRwaGRybnVtKEVsZiAqZWxmLCBzaXplX3QgKmRzdCkKIHsKQEAgLTU0Niw2ICs1NjcsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkZWNvbXByZXNzX2ttb2R1bGUoc3RydWN0IGRzbyAqZHNvLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgZW51bSBkc29fYmluYXJ5X3R5cGUgdHlwZSkKK3sKKwlpbnQgZmQ7CisJY29uc3QgY2hhciAqZXh0ID0gc3RycmNocihuYW1lLCAnLicpOworCWNoYXIgdG1wYnVmW10gPSAiL3RtcC9wZXJmLWttb2QtWFhYWFhYIjsKKworCWlmICgodHlwZSAhPSBEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0tNT0RVTEVfQ09NUCAmJgorCSAgICAgdHlwZSAhPSBEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEVfQ09NUCkgfHwKKwkgICAgdHlwZSAhPSBkc28tPnN5bXRhYl90eXBlKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWV4dCB8fCAhaXNfc3VwcG9ydGVkX2NvbXByZXNzaW9uKGV4dCArIDEpKQorCQlyZXR1cm4gLTE7CisKKwlmZCA9IG1rc3RlbXAodG1wYnVmKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWRlY29tcHJlc3NfdG9fZmlsZShleHQgKyAxLCBuYW1lLCBmZCkpIHsKKwkJY2xvc2UoZmQpOworCQlmZCA9IC0xOworCX0KKworCXVubGluayh0bXBidWYpOworCisJcmV0dXJuIGZkOworfQorCiBib29sIHN5bXNyY19fcG9zc2libHlfcnVudGltZShzdHJ1Y3Qgc3ltc3JjICpzcykKIHsKIAlyZXR1cm4gc3MtPmR5bnN5bSB8fCBzcy0+b3Bkc2VjOwpAQCAtNTcxLDcgKzYyMSwxMSBAQAogCUVsZiAqZWxmOwogCWludCBmZDsKIAotCWZkID0gb3BlbihuYW1lLCBPX1JET05MWSk7CisJaWYgKGRzb19fbmVlZHNfZGVjb21wcmVzcyhkc28pKQorCQlmZCA9IGRlY29tcHJlc3Nfa21vZHVsZShkc28sIG5hbWUsIHR5cGUpOworCWVsc2UKKwkJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKKwogCWlmIChmZCA8IDApCiAJCXJldHVybiAtMTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1taW5pbWFsLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLW1pbmltYWwuYwppbmRleCBjOTU0MWZlLi5mYTU4NWM2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLW1pbmltYWwuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLW1pbmltYWwuYwpAQCAtMzQxLDcgKzM0MSw2IEBACiAKIAlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoc3MtPm5hbWUsIGJ1aWxkX2lkLCBCVUlMRF9JRF9TSVpFKSA+IDApIHsKIAkJZHNvX19zZXRfYnVpbGRfaWQoZHNvLCBidWlsZF9pZCk7Ci0JCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCAwNzgzMzExLi5jMjRjNWI4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC01MSw3ICs1MSw5IEBACiAJRFNPX0JJTkFSWV9UWVBFX19CVUlMRElEX0RFQlVHSU5GTywKIAlEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0RTTywKIAlEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEUsCisJRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVAsCiAJRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFLAorCURTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV9DT01QLAogCURTT19CSU5BUllfVFlQRV9fT1BFTkVNQkVEREVEX0RFQlVHSU5GTywKIAlEU09fQklOQVJZX1RZUEVfX05PVF9GT1VORCwKIH07CkBAIC0xMzAwLDcgKzEzMDIsOSBAQAogCQlyZXR1cm4gZHNvLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMOwogCiAJY2FzZSBEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEU6CisJY2FzZSBEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEVfQ09NUDoKIAljYXNlIERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRToKKwljYXNlIERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV9DT01QOgogCQkvKgogCQkgKiBrZXJuZWwgbW9kdWxlcyBrbm93IHRoZWlyIHN5bXRhYiB0eXBlIC0gaXQncyBzZXQgd2hlbgogCQkgKiBjcmVhdGluZyBhIG1vZHVsZSBkc28gaW4gbWFjaGluZV9fbmV3X21vZHVsZSgpLgpAQCAtMTM2OCw3ICsxMzcyLDkgQEAKIAkJcmV0dXJuIC0xOwogCiAJa21vZCA9IGRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFIHx8Ci0JCWRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFOworCQlkc28tPnN5bXRhYl90eXBlID09IERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV9DT01QIHx8CisJCWRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFIHx8CisJCWRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVA7CiAKIAkvKgogCSAqIEl0ZXJhdGUgb3ZlciBjYW5kaWRhdGUgZGVidWcgaW1hZ2VzLgpAQCAtMTUwNSwxMiArMTUxMSwxMCBAQAogCQkJICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgaSwgZXJyID0gMDsKLQljaGFyICpmaWxlbmFtZTsKKwljaGFyICpmaWxlbmFtZSA9IE5VTEw7CiAKLQlwcl9kZWJ1ZygiTG9va2luZyBhdCB0aGUgdm1saW51eF9wYXRoICglZCBlbnRyaWVzIGxvbmcpXG4iLAotCQkgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzICsgMSk7Ci0KLQlmaWxlbmFtZSA9IGRzb19fYnVpbGRfaWRfZmlsZW5hbWUoZHNvLCBOVUxMLCAwKTsKKwlpZiAoIXN5bWJvbF9jb25mLmlnbm9yZV92bWxpbnV4X2J1aWxkaWQpCisJCWZpbGVuYW1lID0gZHNvX19idWlsZF9pZF9maWxlbmFtZShkc28sIE5VTEwsIDApOwogCWlmIChmaWxlbmFtZSAhPSBOVUxMKSB7CiAJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KGRzbywgbWFwLCBmaWxlbmFtZSwgdHJ1ZSwgZmlsdGVyKTsKIAkJaWYgKGVyciA+IDApCkBAIC0xNTE4LDYgKzE1MjIsOSBAQAogCQlmcmVlKGZpbGVuYW1lKTsKIAl9CiAKKwlwcl9kZWJ1ZygiTG9va2luZyBhdCB0aGUgdm1saW51eF9wYXRoICglZCBlbnRyaWVzIGxvbmcpXG4iLAorCQkgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzICsgMSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzOyArK2kpIHsKIAkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoZHNvLCBtYXAsIHZtbGludXhfcGF0aFtpXSwgZmFsc2UsIGZpbHRlcik7CiAJCWlmIChlcnIgPiAwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCmluZGV4IGViMmMxOWIuLjlkNjAyZTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKQEAgLTIzLDI3ICsyMyw2IEBACiAKICNpbmNsdWRlICJkc28uaCIKIAotI2lmZGVmIEhBVkVfQ1BMVVNfREVNQU5HTEVfU1VQUE9SVAotZXh0ZXJuIGNoYXIgKmNwbHVzX2RlbWFuZ2xlKGNvbnN0IGNoYXIgKiwgaW50KTsKLQotc3RhdGljIGlubGluZSBjaGFyICpiZmRfZGVtYW5nbGUodm9pZCBfX21heWJlX3VudXNlZCAqdiwgY29uc3QgY2hhciAqYywgaW50IGkpCi17Ci0JcmV0dXJuIGNwbHVzX2RlbWFuZ2xlKGMsIGkpOwotfQotI2Vsc2UKLSNpZmRlZiBOT19ERU1BTkdMRQotc3RhdGljIGlubGluZSBjaGFyICpiZmRfZGVtYW5nbGUodm9pZCBfX21heWJlX3VudXNlZCAqdiwKLQkJCQkgY29uc3QgY2hhciBfX21heWJlX3VudXNlZCAqYywKLQkJCQkgaW50IF9fbWF5YmVfdW51c2VkIGkpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0jZWxzZQotI2RlZmluZSBQQUNLQUdFICdwZXJmJwotI2luY2x1ZGUgPGJmZC5oPgotI2VuZGlmCi0jZW5kaWYKLQogLyoKICAqIGxpYmVsZiAwLjgueCBhbmQgZWFybGllciBkbyBub3Qgc3VwcG9ydCBFTEZfQ19SRUFEX01NQVA7CiAgKiBmb3IgbmV3ZXIgdmVyc2lvbnMgd2UgY2FuIHVzZSBtbWFwIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2U6CkBAIC0xMDUsNiArODQsNyBAQAogCXVuc2lnbmVkIHNob3J0CW5yX2V2ZW50czsKIAlib29sCQl0cnlfdm1saW51eF9wYXRoLAogCQkJaWdub3JlX3ZtbGludXgsCisJCQlpZ25vcmVfdm1saW51eF9idWlsZGlkLAogCQkJc2hvd19rZXJuZWxfcGF0aCwKIAkJCXVzZV9tb2R1bGVzLAogCQkJc29ydF9ieV9uYW1lLApAQCAtMTIyLDcgKzEwMiw4IEBACiAJCQlkZW1hbmdsZSwKIAkJCWRlbWFuZ2xlX2tlcm5lbCwKIAkJCWZpbHRlcl9yZWxhdGl2ZSwKLQkJCXNob3dfaGlzdF9oZWFkZXJzOworCQkJc2hvd19oaXN0X2hlYWRlcnMsCisJCQlicmFuY2hfY2FsbHN0YWNrOwogCWNvbnN0IGNoYXIJKnZtbGludXhfbmFtZSwKIAkJCSprYWxsc3ltc19uYW1lLAogCQkJKnNvdXJjZV9wcmVmaXgsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLXN0YWNrLmMgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLXN0YWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVkNTlhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQtc3RhY2suYwpAQCAtMCwwICsxLDc0NyBAQAorLyoKKyAqIHRocmVhZC1zdGFjay5jOiBTeW50aGVzaXplIGEgdGhyZWFkJ3Mgc3RhY2sgdXNpbmcgY2FsbCAvIHJldHVybiBldmVudHMKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAibWFjaGluZS5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInN5bWJvbC5oIgorI2luY2x1ZGUgImNvbW0uaCIKKyNpbmNsdWRlICJ0aHJlYWQtc3RhY2suaCIKKworI2RlZmluZSBDQUxMX1BBVEhfQkxPQ0tfU0hJRlQgOAorI2RlZmluZSBDQUxMX1BBVEhfQkxPQ0tfU0laRSAoMSA8PCBDQUxMX1BBVEhfQkxPQ0tfU0hJRlQpCisjZGVmaW5lIENBTExfUEFUSF9CTE9DS19NQVNLIChDQUxMX1BBVEhfQkxPQ0tfU0laRSAtIDEpCisKK3N0cnVjdCBjYWxsX3BhdGhfYmxvY2sgeworCXN0cnVjdCBjYWxsX3BhdGggY3BbQ0FMTF9QQVRIX0JMT0NLX1NJWkVdOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK307CisKKy8qKgorICogc3RydWN0IGNhbGxfcGF0aF9yb290IC0gcm9vdCBvZiBhbGwgY2FsbCBwYXRocy4KKyAqIEBjYWxsX3BhdGg6IHJvb3QgY2FsbCBwYXRoCisgKiBAYmxvY2tzOiBsaXN0IG9mIGJsb2NrcyB0byBzdG9yZSBjYWxsIHBhdGhzCisgKiBAbmV4dDogbmV4dCBmcmVlIHNwYWNlCisgKiBAc3o6IG51bWJlciBvZiBzcGFjZXMKKyAqLworc3RydWN0IGNhbGxfcGF0aF9yb290IHsKKwlzdHJ1Y3QgY2FsbF9wYXRoIGNhbGxfcGF0aDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2NrczsKKwlzaXplX3QgbmV4dDsKKwlzaXplX3Qgc3o7Cit9OworCisvKioKKyAqIHN0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgLSBwcm92aWRlcyBhIGNhbGwtYmFjayB0byBjb25zdW1lIGNhbGwtcmV0dXJuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgKiBAY3ByOiBjYWxsIHBhdGggcm9vdAorICogQHByb2Nlc3M6IGNhbGwtYmFjayB0aGF0IGFjY2VwdHMgY2FsbC9yZXR1cm4gaW5mb3JtYXRpb24KKyAqIEBkYXRhOiBhbm9ueW1vdXMgZGF0YSBmb3IgY2FsbC1iYWNrCisgKi8KK3N0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgeworCXN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByOworCWludCAoKnByb2Nlc3MpKHN0cnVjdCBjYWxsX3JldHVybiAqY3IsIHZvaWQgKmRhdGEpOworCXZvaWQgKmRhdGE7Cit9OworCisjZGVmaW5lIFNUQUNLX0dST1dUSCAyMDQ4CisKKy8qKgorICogc3RydWN0IHRocmVhZF9zdGFja19lbnRyeSAtIHRocmVhZCBzdGFjayBlbnRyeS4KKyAqIEByZXRfYWRkcjogcmV0dXJuIGFkZHJlc3MKKyAqIEB0aW1lc3RhbXA6IHRpbWVzdGFtcCAoaWYga25vd24pCisgKiBAcmVmOiBleHRlcm5hbCByZWZlcmVuY2UgKGUuZy4gZGJfaWQgb2Ygc2FtcGxlKQorICogQGJyYW5jaF9jb3VudDogdGhlIGJyYW5jaCBjb3VudCB3aGVuIHRoZSBlbnRyeSB3YXMgY3JlYXRlZAorICogQGNwOiBjYWxsIHBhdGgKKyAqIEBub19jYWxsOiBhICdjYWxsJyB3YXMgbm90IHNlZW4KKyAqLworc3RydWN0IHRocmVhZF9zdGFja19lbnRyeSB7CisJdTY0IHJldF9hZGRyOworCXU2NCB0aW1lc3RhbXA7CisJdTY0IHJlZjsKKwl1NjQgYnJhbmNoX2NvdW50OworCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCWJvb2wgbm9fY2FsbDsKK307CisKKy8qKgorICogc3RydWN0IHRocmVhZF9zdGFjayAtIHRocmVhZCBzdGFjayBjb25zdHJ1Y3RlZCBmcm9tICdjYWxsJyBhbmQgJ3JldHVybicKKyAqICAgICAgICAgICAgICAgICAgICAgICBicmFuY2ggc2FtcGxlcy4KKyAqIEBzdGFjazogYXJyYXkgdGhhdCBob2xkcyB0aGUgc3RhY2sKKyAqIEBjbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzdGFjaworICogQHN6OiBjdXJyZW50IG1heGltdW0gc3RhY2sgc2l6ZQorICogQHRyYWNlX25yOiBjdXJyZW50IHRyYWNlIG51bWJlcgorICogQGJyYW5jaF9jb3VudDogcnVubmluZyBicmFuY2ggY291bnQKKyAqIEBrZXJuZWxfc3RhcnQ6IGtlcm5lbCBzdGFydCBhZGRyZXNzCisgKiBAbGFzdF90aW1lOiBsYXN0IHRpbWVzdGFtcAorICogQGNycDogY2FsbC9yZXR1cm4gcHJvY2Vzc29yCisgKiBAY29tbTogY3VycmVudCBjb21tCisgKi8KK3N0cnVjdCB0aHJlYWRfc3RhY2sgeworCXN0cnVjdCB0aHJlYWRfc3RhY2tfZW50cnkgKnN0YWNrOworCXNpemVfdCBjbnQ7CisJc2l6ZV90IHN6OworCXU2NCB0cmFjZV9ucjsKKwl1NjQgYnJhbmNoX2NvdW50OworCXU2NCBrZXJuZWxfc3RhcnQ7CisJdTY0IGxhc3RfdGltZTsKKwlzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yICpjcnA7CisJc3RydWN0IGNvbW0gKmNvbW07Cit9OworCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fZ3JvdyhzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cykKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0YWNrX2VudHJ5ICpuZXdfc3RhY2s7CisJc2l6ZV90IHN6LCBuZXdfc3o7CisKKwluZXdfc3ogPSB0cy0+c3ogKyBTVEFDS19HUk9XVEg7CisJc3ogPSBuZXdfc3ogKiBzaXplb2Yoc3RydWN0IHRocmVhZF9zdGFja19lbnRyeSk7CisKKwluZXdfc3RhY2sgPSByZWFsbG9jKHRzLT5zdGFjaywgc3opOworCWlmICghbmV3X3N0YWNrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRzLT5zdGFjayA9IG5ld19zdGFjazsKKwl0cy0+c3ogPSBuZXdfc3o7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRocmVhZF9zdGFja19fbmV3KHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCQkJICAgICAgc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwKQoreworCXN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzOworCisJdHMgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aHJlYWRfc3RhY2spKTsKKwlpZiAoIXRzKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh0aHJlYWRfc3RhY2tfX2dyb3codHMpKSB7CisJCWZyZWUodHMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAodGhyZWFkLT5tZyAmJiB0aHJlYWQtPm1nLT5tYWNoaW5lKQorCQl0cy0+a2VybmVsX3N0YXJ0ID0gbWFjaGluZV9fa2VybmVsX3N0YXJ0KHRocmVhZC0+bWctPm1hY2hpbmUpOworCWVsc2UKKwkJdHMtPmtlcm5lbF9zdGFydCA9IDFVTEwgPDwgNjM7CisJdHMtPmNycCA9IGNycDsKKworCXJldHVybiB0czsKK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX3B1c2goc3RydWN0IHRocmVhZF9zdGFjayAqdHMsIHU2NCByZXRfYWRkcikKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICh0cy0+Y250ID09IHRzLT5zeikgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX2dyb3codHMpOworCQlpZiAoZXJyKSB7CisJCQlwcl93YXJuaW5nKCJPdXQgb2YgbWVtb3J5OiBkaXNjYXJkaW5nIHRocmVhZCBzdGFja1xuIik7CisJCQl0cy0+Y250ID0gMDsKKwkJfQorCX0KKworCXRzLT5zdGFja1t0cy0+Y250KytdLnJldF9hZGRyID0gcmV0X2FkZHI7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfX3BvcChzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cywgdTY0IHJldF9hZGRyKQoreworCXNpemVfdCBpOworCisJLyoKKwkgKiBJbiBzb21lIGNhc2VzIHRoZXJlIG1heSBiZSBmdW5jdGlvbnMgd2hpY2ggYXJlIG5vdCBzZWVuIHRvIHJldHVybi4KKwkgKiBGb3IgZXhhbXBsZSB3aGVuIHNldGptcCAvIGxvbmdqbXAgaGFzIGJlZW4gdXNlZC4gIE9yIHRoZSBwZXJmIGNvbnRleHQKKwkgKiBzd2l0Y2ggaW4gdGhlIGtlcm5lbCB3aGljaCBkb2Vzbid0IHN0b3AgYW5kIHN0YXJ0IHRyYWNpbmcgaW4gZXhhY3RseQorCSAqIHRoZSBzYW1lIGNvZGUgcGF0aC4gIFdoZW4gdGhhdCBoYXBwZW5zIHRoZSByZXR1cm4gYWRkcmVzcyB3aWxsIGJlCisJICogZnVydGhlciBkb3duIHRoZSBzdGFjay4gIElmIHRoZSByZXR1cm4gYWRkcmVzcyBpcyBub3QgZm91bmQgYXQgYWxsLAorCSAqIHdlIGFzc3VtZSB0aGUgb3Bwb3NpdGUgKGkuZS4gdGhpcyBpcyBhIHJldHVybiBmb3IgYSBjYWxsIHRoYXQgd2Fzbid0CisJICogc2VlbiBmb3Igc29tZSByZWFzb24pIGFuZCBsZWF2ZSB0aGUgc3RhY2sgYWxvbmUuCisJICovCisJZm9yIChpID0gdHMtPmNudDsgaTsgKSB7CisJCWlmICh0cy0+c3RhY2tbLS1pXS5yZXRfYWRkciA9PSByZXRfYWRkcikgeworCQkJdHMtPmNudCA9IGk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyBib29sIHRocmVhZF9zdGFja19faW5fa2VybmVsKHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzKQoreworCWlmICghdHMtPmNudCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRzLT5zdGFja1t0cy0+Y250IC0gMV0uY3AtPmluX2tlcm5lbDsKK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCQkgICAgIHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzLCBzaXplX3QgaWR4LAorCQkJCSAgICAgdTY0IHRpbWVzdGFtcCwgdTY0IHJlZiwgYm9vbCBub19yZXR1cm4pCit7CisJc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwID0gdHMtPmNycDsKKwlzdHJ1Y3QgdGhyZWFkX3N0YWNrX2VudHJ5ICp0c2U7CisJc3RydWN0IGNhbGxfcmV0dXJuIGNyID0geworCQkudGhyZWFkID0gdGhyZWFkLAorCQkuY29tbSA9IHRzLT5jb21tLAorCQkuZGJfaWQgPSAwLAorCX07CisKKwl0c2UgPSAmdHMtPnN0YWNrW2lkeF07CisJY3IuY3AgPSB0c2UtPmNwOworCWNyLmNhbGxfdGltZSA9IHRzZS0+dGltZXN0YW1wOworCWNyLnJldHVybl90aW1lID0gdGltZXN0YW1wOworCWNyLmJyYW5jaF9jb3VudCA9IHRzLT5icmFuY2hfY291bnQgLSB0c2UtPmJyYW5jaF9jb3VudDsKKwljci5jYWxsX3JlZiA9IHRzZS0+cmVmOworCWNyLnJldHVybl9yZWYgPSByZWY7CisJaWYgKHRzZS0+bm9fY2FsbCkKKwkJY3IuZmxhZ3MgfD0gQ0FMTF9SRVRVUk5fTk9fQ0FMTDsKKwlpZiAobm9fcmV0dXJuKQorCQljci5mbGFncyB8PSBDQUxMX1JFVFVSTl9OT19SRVRVUk47CisKKwlyZXR1cm4gY3JwLT5wcm9jZXNzKCZjciwgY3JwLT5kYXRhKTsKK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX2ZsdXNoKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IHRocmVhZF9zdGFjayAqdHMpCit7CisJc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwID0gdHMtPmNycDsKKwlpbnQgZXJyOworCisJaWYgKCFjcnApIHsKKwkJdHMtPmNudCA9IDA7CisJCXJldHVybiAwOworCX0KKworCXdoaWxlICh0cy0+Y250KSB7CisJCWVyciA9IHRocmVhZF9zdGFja19fY2FsbF9yZXR1cm4odGhyZWFkLCB0cywgLS10cy0+Y250LAorCQkJCQkJdHMtPmxhc3RfdGltZSwgMCwgdHJ1ZSk7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigiRXJyb3IgZmx1c2hpbmcgdGhyZWFkIHN0YWNrIVxuIik7CisJCQl0cy0+Y250ID0gMDsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHRocmVhZF9zdGFja19fZXZlbnQoc3RydWN0IHRocmVhZCAqdGhyZWFkLCB1MzIgZmxhZ3MsIHU2NCBmcm9tX2lwLAorCQkJdTY0IHRvX2lwLCB1MTYgaW5zbl9sZW4sIHU2NCB0cmFjZV9ucikKK3sKKwlpZiAoIXRocmVhZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXRocmVhZC0+dHMpIHsKKwkJdGhyZWFkLT50cyA9IHRocmVhZF9zdGFja19fbmV3KHRocmVhZCwgTlVMTCk7CisJCWlmICghdGhyZWFkLT50cykgeworCQkJcHJfd2FybmluZygiT3V0IG9mIG1lbW9yeTogbm8gdGhyZWFkIHN0YWNrXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXRocmVhZC0+dHMtPnRyYWNlX25yID0gdHJhY2VfbnI7CisJfQorCisJLyoKKwkgKiBXaGVuIHRoZSB0cmFjZSBpcyBkaXNjb250aW51b3VzLCB0aGUgdHJhY2VfbnIgY2hhbmdlcy4gIEluIHRoYXQgY2FzZQorCSAqIHRoZSBzdGFjayBtaWdodCBiZSBjb21wbGV0ZWx5IGludmFsaWQuICBCZXR0ZXIgdG8gcmVwb3J0IG5vdGhpbmcgdGhhbgorCSAqIHRvIHJlcG9ydCBzb21ldGhpbmcgbWlzbGVhZGluZywgc28gZmx1c2ggdGhlIHN0YWNrLgorCSAqLworCWlmICh0cmFjZV9uciAhPSB0aHJlYWQtPnRzLT50cmFjZV9ucikgeworCQlpZiAodGhyZWFkLT50cy0+dHJhY2VfbnIpCisJCQl0aHJlYWRfc3RhY2tfX2ZsdXNoKHRocmVhZCwgdGhyZWFkLT50cyk7CisJCXRocmVhZC0+dHMtPnRyYWNlX25yID0gdHJhY2VfbnI7CisJfQorCisJLyogU3RvcCBoZXJlIGlmIHRocmVhZF9zdGFja19fcHJvY2VzcygpIGlzIGluIHVzZSAqLworCWlmICh0aHJlYWQtPnRzLT5jcnApCisJCXJldHVybiAwOworCisJaWYgKGZsYWdzICYgUEVSRl9JUF9GTEFHX0NBTEwpIHsKKwkJdTY0IHJldF9hZGRyOworCisJCWlmICghdG9faXApCisJCQlyZXR1cm4gMDsKKwkJcmV0X2FkZHIgPSBmcm9tX2lwICsgaW5zbl9sZW47CisJCWlmIChyZXRfYWRkciA9PSB0b19pcCkKKwkJCXJldHVybiAwOyAvKiBaZXJvLWxlbmd0aCBjYWxscyBhcmUgZXhjbHVkZWQgKi8KKwkJcmV0dXJuIHRocmVhZF9zdGFja19fcHVzaCh0aHJlYWQtPnRzLCByZXRfYWRkcik7CisJfSBlbHNlIGlmIChmbGFncyAmIFBFUkZfSVBfRkxBR19SRVRVUk4pIHsKKwkJaWYgKCFmcm9tX2lwKQorCQkJcmV0dXJuIDA7CisJCXRocmVhZF9zdGFja19fcG9wKHRocmVhZC0+dHMsIHRvX2lwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0aHJlYWRfc3RhY2tfX3NldF90cmFjZV9ucihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHU2NCB0cmFjZV9ucikKK3sKKwlpZiAoIXRocmVhZCB8fCAhdGhyZWFkLT50cykKKwkJcmV0dXJuOworCisJaWYgKHRyYWNlX25yICE9IHRocmVhZC0+dHMtPnRyYWNlX25yKSB7CisJCWlmICh0aHJlYWQtPnRzLT50cmFjZV9ucikKKwkJCXRocmVhZF9zdGFja19fZmx1c2godGhyZWFkLCB0aHJlYWQtPnRzKTsKKwkJdGhyZWFkLT50cy0+dHJhY2VfbnIgPSB0cmFjZV9ucjsKKwl9Cit9CisKK3ZvaWQgdGhyZWFkX3N0YWNrX19mcmVlKHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlpZiAodGhyZWFkLT50cykgeworCQl0aHJlYWRfc3RhY2tfX2ZsdXNoKHRocmVhZCwgdGhyZWFkLT50cyk7CisJCXpmcmVlKCZ0aHJlYWQtPnRzLT5zdGFjayk7CisJCXpmcmVlKCZ0aHJlYWQtPnRzKTsKKwl9Cit9CisKK3ZvaWQgdGhyZWFkX3N0YWNrX19zYW1wbGUoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwKKwkJCSAgc2l6ZV90IHN6LCB1NjQgaXApCit7CisJc2l6ZV90IGk7CisKKwlpZiAoIXRocmVhZCB8fCAhdGhyZWFkLT50cykKKwkJY2hhaW4tPm5yID0gMTsKKwllbHNlCisJCWNoYWluLT5uciA9IG1pbihzeiwgdGhyZWFkLT50cy0+Y250ICsgMSk7CisKKwljaGFpbi0+aXBzWzBdID0gaXA7CisKKwlmb3IgKGkgPSAxOyBpIDwgY2hhaW4tPm5yOyBpKyspCisJCWNoYWluLT5pcHNbaV0gPSB0aHJlYWQtPnRzLT5zdGFja1t0aHJlYWQtPnRzLT5jbnQgLSBpXS5yZXRfYWRkcjsKK30KKworc3RhdGljIHZvaWQgY2FsbF9wYXRoX19pbml0KHN0cnVjdCBjYWxsX3BhdGggKmNwLCBzdHJ1Y3QgY2FsbF9wYXRoICpwYXJlbnQsCisJCQkgICAgc3RydWN0IHN5bWJvbCAqc3ltLCB1NjQgaXAsIGJvb2wgaW5fa2VybmVsKQoreworCWNwLT5wYXJlbnQgPSBwYXJlbnQ7CisJY3AtPnN5bSA9IHN5bTsKKwljcC0+aXAgPSBzeW0gPyAwIDogaXA7CisJY3AtPmRiX2lkID0gMDsKKwljcC0+aW5fa2VybmVsID0gaW5fa2VybmVsOworCVJCX0NMRUFSX05PREUoJmNwLT5yYl9ub2RlKTsKKwljcC0+Y2hpbGRyZW4gPSBSQl9ST09UOworfQorCitzdGF0aWMgc3RydWN0IGNhbGxfcGF0aF9yb290ICpjYWxsX3BhdGhfcm9vdF9fbmV3KHZvaWQpCit7CisJc3RydWN0IGNhbGxfcGF0aF9yb290ICpjcHI7CisKKwljcHIgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjYWxsX3BhdGhfcm9vdCkpOworCWlmICghY3ByKQorCQlyZXR1cm4gTlVMTDsKKwljYWxsX3BhdGhfX2luaXQoJmNwci0+Y2FsbF9wYXRoLCBOVUxMLCBOVUxMLCAwLCBmYWxzZSk7CisJSU5JVF9MSVNUX0hFQUQoJmNwci0+YmxvY2tzKTsKKwlyZXR1cm4gY3ByOworfQorCitzdGF0aWMgdm9pZCBjYWxsX3BhdGhfcm9vdF9fZnJlZShzdHJ1Y3QgY2FsbF9wYXRoX3Jvb3QgKmNwcikKK3sKKwlzdHJ1Y3QgY2FsbF9wYXRoX2Jsb2NrICpwb3MsICpuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgJmNwci0+YmxvY2tzLCBub2RlKSB7CisJCWxpc3RfZGVsKCZwb3MtPm5vZGUpOworCQlmcmVlKHBvcyk7CisJfQorCWZyZWUoY3ByKTsKK30KKworc3RhdGljIHN0cnVjdCBjYWxsX3BhdGggKmNhbGxfcGF0aF9fbmV3KHN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByLAorCQkJCQlzdHJ1Y3QgY2FsbF9wYXRoICpwYXJlbnQsCisJCQkJCXN0cnVjdCBzeW1ib2wgKnN5bSwgdTY0IGlwLAorCQkJCQlib29sIGluX2tlcm5lbCkKK3sKKwlzdHJ1Y3QgY2FsbF9wYXRoX2Jsb2NrICpjcGI7CisJc3RydWN0IGNhbGxfcGF0aCAqY3A7CisJc2l6ZV90IG47CisKKwlpZiAoY3ByLT5uZXh0IDwgY3ByLT5zeikgeworCQljcGIgPSBsaXN0X2xhc3RfZW50cnkoJmNwci0+YmxvY2tzLCBzdHJ1Y3QgY2FsbF9wYXRoX2Jsb2NrLAorCQkJCSAgICAgIG5vZGUpOworCX0gZWxzZSB7CisJCWNwYiA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGNhbGxfcGF0aF9ibG9jaykpOworCQlpZiAoIWNwYikKKwkJCXJldHVybiBOVUxMOworCQlsaXN0X2FkZF90YWlsKCZjcGItPm5vZGUsICZjcHItPmJsb2Nrcyk7CisJCWNwci0+c3ogKz0gQ0FMTF9QQVRIX0JMT0NLX1NJWkU7CisJfQorCisJbiA9IGNwci0+bmV4dCsrICYgQ0FMTF9QQVRIX0JMT0NLX01BU0s7CisJY3AgPSAmY3BiLT5jcFtuXTsKKworCWNhbGxfcGF0aF9faW5pdChjcCwgcGFyZW50LCBzeW0sIGlwLCBpbl9rZXJuZWwpOworCisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgc3RydWN0IGNhbGxfcGF0aCAqY2FsbF9wYXRoX19maW5kbmV3KHN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByLAorCQkJCQkgICAgc3RydWN0IGNhbGxfcGF0aCAqcGFyZW50LAorCQkJCQkgICAgc3RydWN0IHN5bWJvbCAqc3ltLCB1NjQgaXAsIHU2NCBrcykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnA7CisJc3RydWN0IHJiX25vZGUgKm5vZGVfcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgY2FsbF9wYXRoICpjcDsKKwlib29sIGluX2tlcm5lbCA9IGlwID49IGtzOworCisJaWYgKHN5bSkKKwkJaXAgPSAwOworCisJaWYgKCFwYXJlbnQpCisJCXJldHVybiBjYWxsX3BhdGhfX25ldyhjcHIsIHBhcmVudCwgc3ltLCBpcCwgaW5fa2VybmVsKTsKKworCXAgPSAmcGFyZW50LT5jaGlsZHJlbi5yYl9ub2RlOworCXdoaWxlICgqcCAhPSBOVUxMKSB7CisJCW5vZGVfcGFyZW50ID0gKnA7CisJCWNwID0gcmJfZW50cnkobm9kZV9wYXJlbnQsIHN0cnVjdCBjYWxsX3BhdGgsIHJiX25vZGUpOworCisJCWlmIChjcC0+c3ltID09IHN5bSAmJiBjcC0+aXAgPT0gaXApCisJCQlyZXR1cm4gY3A7CisKKwkJaWYgKHN5bSA8IGNwLT5zeW0gfHwgKHN5bSA9PSBjcC0+c3ltICYmIGlwIDwgY3AtPmlwKSkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwl9CisKKwljcCA9IGNhbGxfcGF0aF9fbmV3KGNwciwgcGFyZW50LCBzeW0sIGlwLCBpbl9rZXJuZWwpOworCWlmICghY3ApCisJCXJldHVybiBOVUxMOworCisJcmJfbGlua19ub2RlKCZjcC0+cmJfbm9kZSwgbm9kZV9wYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigmY3AtPnJiX25vZGUsICZwYXJlbnQtPmNoaWxkcmVuKTsKKworCXJldHVybiBjcDsKK30KKworc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqCitjYWxsX3JldHVybl9wcm9jZXNzb3JfX25ldyhpbnQgKCpwcm9jZXNzKShzdHJ1Y3QgY2FsbF9yZXR1cm4gKmNyLCB2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwOworCisJY3JwID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yKSk7CisJaWYgKCFjcnApCisJCXJldHVybiBOVUxMOworCWNycC0+Y3ByID0gY2FsbF9wYXRoX3Jvb3RfX25ldygpOworCWlmICghY3JwLT5jcHIpCisJCWdvdG8gb3V0X2ZyZWU7CisJY3JwLT5wcm9jZXNzID0gcHJvY2VzczsKKwljcnAtPmRhdGEgPSBkYXRhOworCXJldHVybiBjcnA7CisKK291dF9mcmVlOgorCWZyZWUoY3JwKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBjYWxsX3JldHVybl9wcm9jZXNzb3JfX2ZyZWUoc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwKQoreworCWlmIChjcnApIHsKKwkJY2FsbF9wYXRoX3Jvb3RfX2ZyZWUoY3JwLT5jcHIpOworCQlmcmVlKGNycCk7CisJfQorfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fcHVzaF9jcChzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cywgdTY0IHJldF9hZGRyLAorCQkJCSB1NjQgdGltZXN0YW1wLCB1NjQgcmVmLCBzdHJ1Y3QgY2FsbF9wYXRoICpjcCwKKwkJCQkgYm9vbCBub19jYWxsKQoreworCXN0cnVjdCB0aHJlYWRfc3RhY2tfZW50cnkgKnRzZTsKKwlpbnQgZXJyOworCisJaWYgKHRzLT5jbnQgPT0gdHMtPnN6KSB7CisJCWVyciA9IHRocmVhZF9zdGFja19fZ3Jvdyh0cyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXRzZSA9ICZ0cy0+c3RhY2tbdHMtPmNudCsrXTsKKwl0c2UtPnJldF9hZGRyID0gcmV0X2FkZHI7CisJdHNlLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJdHNlLT5yZWYgPSByZWY7CisJdHNlLT5icmFuY2hfY291bnQgPSB0cy0+YnJhbmNoX2NvdW50OworCXRzZS0+Y3AgPSBjcDsKKwl0c2UtPm5vX2NhbGwgPSBub19jYWxsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGhyZWFkX3N0YWNrX19wb3BfY3Aoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cywKKwkJCQl1NjQgcmV0X2FkZHIsIHU2NCB0aW1lc3RhbXAsIHU2NCByZWYsCisJCQkJc3RydWN0IHN5bWJvbCAqc3ltKQoreworCWludCBlcnI7CisKKwlpZiAoIXRzLT5jbnQpCisJCXJldHVybiAxOworCisJaWYgKHRzLT5jbnQgPT0gMSkgeworCQlzdHJ1Y3QgdGhyZWFkX3N0YWNrX2VudHJ5ICp0c2UgPSAmdHMtPnN0YWNrWzBdOworCisJCWlmICh0c2UtPmNwLT5zeW0gPT0gc3ltKQorCQkJcmV0dXJuIHRocmVhZF9zdGFja19fY2FsbF9yZXR1cm4odGhyZWFkLCB0cywgLS10cy0+Y250LAorCQkJCQkJCSB0aW1lc3RhbXAsIHJlZiwgZmFsc2UpOworCX0KKworCWlmICh0cy0+c3RhY2tbdHMtPmNudCAtIDFdLnJldF9hZGRyID09IHJldF9hZGRyKSB7CisJCXJldHVybiB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIC0tdHMtPmNudCwKKwkJCQkJCSB0aW1lc3RhbXAsIHJlZiwgZmFsc2UpOworCX0gZWxzZSB7CisJCXNpemVfdCBpID0gdHMtPmNudCAtIDE7CisKKwkJd2hpbGUgKGktLSkgeworCQkJaWYgKHRzLT5zdGFja1tpXS5yZXRfYWRkciAhPSByZXRfYWRkcikKKwkJCQljb250aW51ZTsKKwkJCWkgKz0gMTsKKwkJCXdoaWxlICh0cy0+Y250ID4gaSkgeworCQkJCWVyciA9IHRocmVhZF9zdGFja19fY2FsbF9yZXR1cm4odGhyZWFkLCB0cywKKwkJCQkJCQkJLS10cy0+Y250LAorCQkJCQkJCQl0aW1lc3RhbXAsIHJlZiwKKwkJCQkJCQkJdHJ1ZSk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJCXJldHVybiB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIC0tdHMtPmNudCwKKwkJCQkJCQkgdGltZXN0YW1wLCByZWYsIGZhbHNlKTsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fYm90dG9tKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IHRocmVhZF9zdGFjayAqdHMsCisJCQkJc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmZyb21fYWwsCisJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKnRvX2FsLCB1NjQgcmVmKQoreworCXN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByID0gdHMtPmNycC0+Y3ByOworCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwl1NjQgaXA7CisKKwlpZiAoc2FtcGxlLT5pcCkgeworCQlpcCA9IHNhbXBsZS0+aXA7CisJCXN5bSA9IGZyb21fYWwtPnN5bTsKKwl9IGVsc2UgaWYgKHNhbXBsZS0+YWRkcikgeworCQlpcCA9IHNhbXBsZS0+YWRkcjsKKwkJc3ltID0gdG9fYWwtPnN5bTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisKKwljcCA9IGNhbGxfcGF0aF9fZmluZG5ldyhjcHIsICZjcHItPmNhbGxfcGF0aCwgc3ltLCBpcCwKKwkJCQl0cy0+a2VybmVsX3N0YXJ0KTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiB0aHJlYWRfc3RhY2tfX3B1c2hfY3AodGhyZWFkLT50cywgaXAsIHNhbXBsZS0+dGltZSwgcmVmLCBjcCwKKwkJCQkgICAgIHRydWUpOworfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fbm9fY2FsbF9yZXR1cm4oc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJCQlzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cywKKwkJCQkJc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICpmcm9tX2FsLAorCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqdG9fYWwsIHU2NCByZWYpCit7CisJc3RydWN0IGNhbGxfcGF0aF9yb290ICpjcHIgPSB0cy0+Y3JwLT5jcHI7CisJc3RydWN0IGNhbGxfcGF0aCAqY3AsICpwYXJlbnQ7CisJdTY0IGtzID0gdHMtPmtlcm5lbF9zdGFydDsKKwlpbnQgZXJyOworCisJaWYgKHNhbXBsZS0+aXAgPj0ga3MgJiYgc2FtcGxlLT5hZGRyIDwga3MpIHsKKwkJLyogUmV0dXJuIHRvIHVzZXJzcGFjZSwgc28gcG9wIGFsbCBrZXJuZWwgYWRkcmVzc2VzICovCisJCXdoaWxlICh0aHJlYWRfc3RhY2tfX2luX2tlcm5lbCh0cykpIHsKKwkJCWVyciA9IHRocmVhZF9zdGFja19fY2FsbF9yZXR1cm4odGhyZWFkLCB0cywgLS10cy0+Y250LAorCQkJCQkJCXNhbXBsZS0+dGltZSwgcmVmLAorCQkJCQkJCXRydWUpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJLyogSWYgdGhlIHN0YWNrIGlzIGVtcHR5LCBwdXNoIHRoZSB1c2Vyc3BhY2UgYWRkcmVzcyAqLworCQlpZiAoIXRzLT5jbnQpIHsKKwkJCWNwID0gY2FsbF9wYXRoX19maW5kbmV3KGNwciwgJmNwci0+Y2FsbF9wYXRoLAorCQkJCQkJdG9fYWwtPnN5bSwgc2FtcGxlLT5hZGRyLAorCQkJCQkJdHMtPmtlcm5lbF9zdGFydCk7CisJCQlpZiAoIWNwKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIHRocmVhZF9zdGFja19fcHVzaF9jcCh0cywgMCwgc2FtcGxlLT50aW1lLCByZWYsCisJCQkJCQkgICAgIGNwLCB0cnVlKTsKKwkJfQorCX0gZWxzZSBpZiAodGhyZWFkX3N0YWNrX19pbl9rZXJuZWwodHMpICYmIHNhbXBsZS0+aXAgPCBrcykgeworCQkvKiBSZXR1cm4gdG8gdXNlcnNwYWNlLCBzbyBwb3AgYWxsIGtlcm5lbCBhZGRyZXNzZXMgKi8KKwkJd2hpbGUgKHRocmVhZF9zdGFja19faW5fa2VybmVsKHRzKSkgeworCQkJZXJyID0gdGhyZWFkX3N0YWNrX19jYWxsX3JldHVybih0aHJlYWQsIHRzLCAtLXRzLT5jbnQsCisJCQkJCQkJc2FtcGxlLT50aW1lLCByZWYsCisJCQkJCQkJdHJ1ZSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAodHMtPmNudCkKKwkJcGFyZW50ID0gdHMtPnN0YWNrW3RzLT5jbnQgLSAxXS5jcDsKKwllbHNlCisJCXBhcmVudCA9ICZjcHItPmNhbGxfcGF0aDsKKworCS8qIFRoaXMgJ3JldHVybicgaGFkIG5vICdjYWxsJywgc28gcHVzaCBhbmQgcG9wIHRvcCBvZiBzdGFjayAqLworCWNwID0gY2FsbF9wYXRoX19maW5kbmV3KGNwciwgcGFyZW50LCBmcm9tX2FsLT5zeW0sIHNhbXBsZS0+aXAsCisJCQkJdHMtPmtlcm5lbF9zdGFydCk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSB0aHJlYWRfc3RhY2tfX3B1c2hfY3AodHMsIHNhbXBsZS0+YWRkciwgc2FtcGxlLT50aW1lLCByZWYsIGNwLAorCQkJCSAgICB0cnVlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHRocmVhZF9zdGFja19fcG9wX2NwKHRocmVhZCwgdHMsIHNhbXBsZS0+YWRkciwgc2FtcGxlLT50aW1lLCByZWYsCisJCQkJICAgIHRvX2FsLT5zeW0pOworfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fdHJhY2VfYmVnaW4oc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJCSAgICAgc3RydWN0IHRocmVhZF9zdGFjayAqdHMsIHU2NCB0aW1lc3RhbXAsCisJCQkJICAgICB1NjQgcmVmKQoreworCXN0cnVjdCB0aHJlYWRfc3RhY2tfZW50cnkgKnRzZTsKKwlpbnQgZXJyOworCisJaWYgKCF0cy0+Y250KQorCQlyZXR1cm4gMDsKKworCS8qIFBvcCB0cmFjZSBlbmQgKi8KKwl0c2UgPSAmdHMtPnN0YWNrW3RzLT5jbnQgLSAxXTsKKwlpZiAodHNlLT5jcC0+c3ltID09IE5VTEwgJiYgdHNlLT5jcC0+aXAgPT0gMCkgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIC0tdHMtPmNudCwKKwkJCQkJCXRpbWVzdGFtcCwgcmVmLCBmYWxzZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fdHJhY2VfZW5kKHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzLAorCQkJCSAgIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLCB1NjQgcmVmKQoreworCXN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByID0gdHMtPmNycC0+Y3ByOworCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCXU2NCByZXRfYWRkcjsKKworCS8qIE5vIHBvaW50IGhhdmluZyAndHJhY2UgZW5kJyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjayAqLworCWlmICghdHMtPmNudCB8fCAodHMtPmNudCA9PSAxICYmIHRzLT5zdGFja1swXS5yZWYgPT0gcmVmKSkKKwkJcmV0dXJuIDA7CisKKwljcCA9IGNhbGxfcGF0aF9fZmluZG5ldyhjcHIsIHRzLT5zdGFja1t0cy0+Y250IC0gMV0uY3AsIE5VTEwsIDAsCisJCQkJdHMtPmtlcm5lbF9zdGFydCk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXRfYWRkciA9IHNhbXBsZS0+aXAgKyBzYW1wbGUtPmluc25fbGVuOworCisJcmV0dXJuIHRocmVhZF9zdGFja19fcHVzaF9jcCh0cywgcmV0X2FkZHIsIHNhbXBsZS0+dGltZSwgcmVmLCBjcCwKKwkJCQkgICAgIGZhbHNlKTsKK30KKworaW50IHRocmVhZF9zdGFja19fcHJvY2VzcyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBjb21tICpjb21tLAorCQkJICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCSAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmZyb21fYWwsCisJCQkgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICp0b19hbCwgdTY0IHJlZiwKKwkJCSAgc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwKQoreworCXN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzID0gdGhyZWFkLT50czsKKwlpbnQgZXJyID0gMDsKKworCWlmICh0cykgeworCQlpZiAoIXRzLT5jcnApIHsKKwkJCS8qIFN1cGVyc2VkZSB0aHJlYWRfc3RhY2tfX2V2ZW50KCkgKi8KKwkJCXRocmVhZF9zdGFja19fZnJlZSh0aHJlYWQpOworCQkJdGhyZWFkLT50cyA9IHRocmVhZF9zdGFja19fbmV3KHRocmVhZCwgY3JwKTsKKwkJCWlmICghdGhyZWFkLT50cykKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCXRzID0gdGhyZWFkLT50czsKKwkJCXRzLT5jb21tID0gY29tbTsKKwkJfQorCX0gZWxzZSB7CisJCXRocmVhZC0+dHMgPSB0aHJlYWRfc3RhY2tfX25ldyh0aHJlYWQsIGNycCk7CisJCWlmICghdGhyZWFkLT50cykKKwkJCXJldHVybiAtRU5PTUVNOworCQl0cyA9IHRocmVhZC0+dHM7CisJCXRzLT5jb21tID0gY29tbTsKKwl9CisKKwkvKiBGbHVzaCBzdGFjayBvbiBleGVjICovCisJaWYgKHRzLT5jb21tICE9IGNvbW0gJiYgdGhyZWFkLT5waWRfID09IHRocmVhZC0+dGlkKSB7CisJCWVyciA9IHRocmVhZF9zdGFja19fZmx1c2godGhyZWFkLCB0cyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQl0cy0+Y29tbSA9IGNvbW07CisJfQorCisJLyogSWYgdGhlIHN0YWNrIGlzIGVtcHR5LCBwdXQgdGhlIGN1cnJlbnQgc3ltYm9sIG9uIHRoZSBzdGFjayAqLworCWlmICghdHMtPmNudCkgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX2JvdHRvbSh0aHJlYWQsIHRzLCBzYW1wbGUsIGZyb21fYWwsIHRvX2FsLAorCQkJCQkgICByZWYpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwl0cy0+YnJhbmNoX2NvdW50ICs9IDE7CisJdHMtPmxhc3RfdGltZSA9IHNhbXBsZS0+dGltZTsKKworCWlmIChzYW1wbGUtPmZsYWdzICYgUEVSRl9JUF9GTEFHX0NBTEwpIHsKKwkJc3RydWN0IGNhbGxfcGF0aF9yb290ICpjcHIgPSB0cy0+Y3JwLT5jcHI7CisJCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCQl1NjQgcmV0X2FkZHI7CisKKwkJaWYgKCFzYW1wbGUtPmlwIHx8ICFzYW1wbGUtPmFkZHIpCisJCQlyZXR1cm4gMDsKKworCQlyZXRfYWRkciA9IHNhbXBsZS0+aXAgKyBzYW1wbGUtPmluc25fbGVuOworCQlpZiAocmV0X2FkZHIgPT0gc2FtcGxlLT5hZGRyKQorCQkJcmV0dXJuIDA7IC8qIFplcm8tbGVuZ3RoIGNhbGxzIGFyZSBleGNsdWRlZCAqLworCisJCWNwID0gY2FsbF9wYXRoX19maW5kbmV3KGNwciwgdHMtPnN0YWNrW3RzLT5jbnQgLSAxXS5jcCwKKwkJCQkJdG9fYWwtPnN5bSwgc2FtcGxlLT5hZGRyLAorCQkJCQl0cy0+a2VybmVsX3N0YXJ0KTsKKwkJaWYgKCFjcCkKKwkJCXJldHVybiAtRU5PTUVNOworCQllcnIgPSB0aHJlYWRfc3RhY2tfX3B1c2hfY3AodHMsIHJldF9hZGRyLCBzYW1wbGUtPnRpbWUsIHJlZiwKKwkJCQkJICAgIGNwLCBmYWxzZSk7CisJfSBlbHNlIGlmIChzYW1wbGUtPmZsYWdzICYgUEVSRl9JUF9GTEFHX1JFVFVSTikgeworCQlpZiAoIXNhbXBsZS0+aXAgfHwgIXNhbXBsZS0+YWRkcikKKwkJCXJldHVybiAwOworCisJCWVyciA9IHRocmVhZF9zdGFja19fcG9wX2NwKHRocmVhZCwgdHMsIHNhbXBsZS0+YWRkciwKKwkJCQkJICAgc2FtcGxlLT50aW1lLCByZWYsIGZyb21fYWwtPnN5bSk7CisJCWlmIChlcnIpIHsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQllcnIgPSB0aHJlYWRfc3RhY2tfX25vX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIHNhbXBsZSwKKwkJCQkJCQkgICBmcm9tX2FsLCB0b19hbCwgcmVmKTsKKwkJfQorCX0gZWxzZSBpZiAoc2FtcGxlLT5mbGFncyAmIFBFUkZfSVBfRkxBR19UUkFDRV9CRUdJTikgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX3RyYWNlX2JlZ2luKHRocmVhZCwgdHMsIHNhbXBsZS0+dGltZSwgcmVmKTsKKwl9IGVsc2UgaWYgKHNhbXBsZS0+ZmxhZ3MgJiBQRVJGX0lQX0ZMQUdfVFJBQ0VfRU5EKSB7CisJCWVyciA9IHRocmVhZF9zdGFja19fdHJhY2VfZW5kKHRzLCBzYW1wbGUsIHJlZik7CisJfQorCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQtc3RhY2suaCBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQtc3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQzYmJlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC1zdGFjay5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogdGhyZWFkLXN0YWNrLmg6IFN5bnRoZXNpemUgYSB0aHJlYWQncyBzdGFjayB1c2luZyBjYWxsIC8gcmV0dXJuIGV2ZW50cworICogQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19QRVJGX1RIUkVBRF9TVEFDS19ICisjZGVmaW5lIF9fUEVSRl9USFJFQURfU1RBQ0tfSAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorCitzdHJ1Y3QgdGhyZWFkOworc3RydWN0IGNvbW07CitzdHJ1Y3QgaXBfY2FsbGNoYWluOworc3RydWN0IHN5bWJvbDsKK3N0cnVjdCBkc287CitzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yOworc3RydWN0IGNvbW07CitzdHJ1Y3QgcGVyZl9zYW1wbGU7CitzdHJ1Y3QgYWRkcl9sb2NhdGlvbjsKKworLyoKKyAqIENhbGwvUmV0dXJuIGZsYWdzLgorICoKKyAqIENBTExfUkVUVVJOX05PX0NBTEw6ICdyZXR1cm4nIGJ1dCBubyBtYXRjaGluZyAnY2FsbCcKKyAqIENBTExfUkVUVVJOX05PX1JFVFVSTjogJ2NhbGwnIGJ1dCBubyBtYXRjaGluZyAncmV0dXJuJworICovCitlbnVtIHsKKwlDQUxMX1JFVFVSTl9OT19DQUxMCT0gMSA8PCAwLAorCUNBTExfUkVUVVJOX05PX1JFVFVSTgk9IDEgPDwgMSwKK307CisKKy8qKgorICogc3RydWN0IGNhbGxfcmV0dXJuIC0gcGFpcmVkIGNhbGwvcmV0dXJuIGluZm9ybWF0aW9uLgorICogQHRocmVhZDogdGhyZWFkIGluIHdoaWNoIGNhbGwvcmV0dXJuIG9jY3VycmVkCisgKiBAY29tbTogY29tbSBpbiB3aGljaCBjYWxsL3JldHVybiBvY2N1cnJlZAorICogQGNwOiBjYWxsIHBhdGgKKyAqIEBjYWxsX3RpbWU6IHRpbWVzdGFtcCBvZiBjYWxsIChpZiBrbm93bikKKyAqIEByZXR1cm5fdGltZTogdGltZXN0YW1wIG9mIHJldHVybiAoaWYga25vd24pCisgKiBAYnJhbmNoX2NvdW50OiBudW1iZXIgb2YgYnJhbmNoZXMgc2VlbiBiZXR3ZWVuIGNhbGwgYW5kIHJldHVybgorICogQGNhbGxfcmVmOiBleHRlcm5hbCByZWZlcmVuY2UgdG8gJ2NhbGwnIHNhbXBsZSAoZS5nLiBkYl9pZCkKKyAqIEByZXR1cm5fcmVmOiAgZXh0ZXJuYWwgcmVmZXJlbmNlIHRvICdyZXR1cm4nIHNhbXBsZSAoZS5nLiBkYl9pZCkKKyAqIEBkYl9pZDogaWQgdXNlZCBmb3IgZGItZXhwb3J0CisgKiBAZmxhZ3M6IENhbGwvUmV0dXJuIGZsYWdzCisgKi8KK3N0cnVjdCBjYWxsX3JldHVybiB7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkOworCXN0cnVjdCBjb21tICpjb21tOworCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCXU2NCBjYWxsX3RpbWU7CisJdTY0IHJldHVybl90aW1lOworCXU2NCBicmFuY2hfY291bnQ7CisJdTY0IGNhbGxfcmVmOworCXU2NCByZXR1cm5fcmVmOworCXU2NCBkYl9pZDsKKwl1MzIgZmxhZ3M7Cit9OworCisvKioKKyAqIHN0cnVjdCBjYWxsX3BhdGggLSBub2RlIGluIGxpc3Qgb2YgY2FsbHMgbGVhZGluZyB0byBhIGZ1bmN0aW9uIGNhbGwuCisgKiBAcGFyZW50OiBjYWxsIHBhdGggdG8gdGhlIHBhcmVudCBmdW5jdGlvbiBjYWxsCisgKiBAc3ltOiBzeW1ib2wgb2YgZnVuY3Rpb24gY2FsbGVkCisgKiBAaXA6IG9ubHkgaWYgc3ltIGlzIG51bGwsIHRoZSBpcCBvZiB0aGUgZnVuY3Rpb24KKyAqIEBkYl9pZDogaWQgdXNlZCBmb3IgZGItZXhwb3J0CisgKiBAaW5fa2VybmVsOiB3aGV0aGVyIGZ1bmN0aW9uIGlzIGEgaW4gdGhlIGtlcm5lbAorICogQHJiX25vZGU6IG5vZGUgaW4gcGFyZW50J3MgdHJlZSBvZiBjYWxsZWQgZnVuY3Rpb25zCisgKiBAY2hpbGRyZW46IHRyZWUgb2YgY2FsbCBwYXRocyBvZiBmdW5jdGlvbnMgY2FsbGVkCisgKgorICogSW4gY29tYmluYXRpb24gd2l0aCB0aGUgY2FsbF9yZXR1cm4gc3RydWN0dXJlLCB0aGUgY2FsbF9wYXRoIHN0cnVjdHVyZQorICogZGVmaW5lcyBhIGNvbnRleHQtc2Vuc2l0dmUgY2FsbC1ncmFwaC4KKyAqLworc3RydWN0IGNhbGxfcGF0aCB7CisJc3RydWN0IGNhbGxfcGF0aCAqcGFyZW50OworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwl1NjQgaXA7CisJdTY0IGRiX2lkOworCWJvb2wgaW5fa2VybmVsOworCXN0cnVjdCByYl9ub2RlIHJiX25vZGU7CisJc3RydWN0IHJiX3Jvb3QgY2hpbGRyZW47Cit9OworCitpbnQgdGhyZWFkX3N0YWNrX19ldmVudChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHUzMiBmbGFncywgdTY0IGZyb21faXAsCisJCQl1NjQgdG9faXAsIHUxNiBpbnNuX2xlbiwgdTY0IHRyYWNlX25yKTsKK3ZvaWQgdGhyZWFkX3N0YWNrX19zZXRfdHJhY2VfbnIoc3RydWN0IHRocmVhZCAqdGhyZWFkLCB1NjQgdHJhY2VfbnIpOwordm9pZCB0aHJlYWRfc3RhY2tfX3NhbXBsZShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLAorCQkJICBzaXplX3Qgc3osIHU2NCBpcCk7Cit2b2lkIHRocmVhZF9zdGFja19fZnJlZShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworCitzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yICoKK2NhbGxfcmV0dXJuX3Byb2Nlc3Nvcl9fbmV3KGludCAoKnByb2Nlc3MpKHN0cnVjdCBjYWxsX3JldHVybiAqY3IsIHZvaWQgKmRhdGEpLAorCQkJICAgdm9pZCAqZGF0YSk7Cit2b2lkIGNhbGxfcmV0dXJuX3Byb2Nlc3Nvcl9fZnJlZShzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yICpjcnApOworaW50IHRocmVhZF9zdGFja19fcHJvY2VzcyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBjb21tICpjb21tLAorCQkJICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCSAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmZyb21fYWwsCisJCQkgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICp0b19hbCwgdTY0IHJlZiwKKwkJCSAgc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKaW5kZXggYzQxNDExNy4uOWViYzhiMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJzZXNzaW9uLmgiCiAjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAidGhyZWFkLXN0YWNrLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiY29tbS5oIgpAQCAtMTUsNyArMTYsNyBAQAogCXBpZF90IHBpZCA9IHRocmVhZC0+cGlkXzsKIAogCWlmIChwaWQgPT0gdGhyZWFkLT50aWQgfHwgcGlkID09IC0xKSB7Ci0JCXRocmVhZC0+bWcgPSBtYXBfZ3JvdXBzX19uZXcoKTsKKwkJdGhyZWFkLT5tZyA9IG1hcF9ncm91cHNfX25ldyhtYWNoaW5lKTsKIAl9IGVsc2UgewogCQlsZWFkZXIgPSBtYWNoaW5lX19maW5kbmV3X3RocmVhZChtYWNoaW5lLCBwaWQsIHBpZCk7CiAJCWlmIChsZWFkZXIpCkBAIC02Niw2ICs2Nyw4IEBACiB7CiAJc3RydWN0IGNvbW0gKmNvbW0sICp0bXA7CiAKKwl0aHJlYWRfc3RhY2tfX2ZyZWUodGhyZWFkKTsKKwogCWlmICh0aHJlYWQtPm1nKSB7CiAJCW1hcF9ncm91cHNfX3B1dCh0aHJlYWQtPm1nKTsKIAkJdGhyZWFkLT5tZyA9IE5VTEw7CkBAIC0xMDAsMTUgKzEwMywxNCBAQAogCXJldHVybiBsYXN0OwogfQogCi0vKiBDSEVDS01FOiB0aW1lIHNob3VsZCBhbHdheXMgYmUgMCBpZiBldmVudCBhcmVuJ3Qgb3JkZXJlZCAqLwogaW50IF9fdGhyZWFkX19zZXRfY29tbShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIGNvbnN0IGNoYXIgKnN0ciwgdTY0IHRpbWVzdGFtcCwKIAkJICAgICAgIGJvb2wgZXhlYykKIHsKIAlzdHJ1Y3QgY29tbSAqbmV3LCAqY3VyciA9IHRocmVhZF9fY29tbSh0aHJlYWQpOwogCWludCBlcnI7CiAKLQkvKiBPdmVycmlkZSBsYXRlc3QgZW50cnkgaWYgaXQgaGFkIG5vIHNwZWNpZmljIHRpbWUgY292ZXJhZ2UgKi8KLQlpZiAoIWN1cnItPnN0YXJ0ICYmICFjdXJyLT5leGVjKSB7CisJLyogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgOnRpZCBlbnRyeSAqLworCWlmICghdGhyZWFkLT5jb21tX3NldCkgewogCQllcnIgPSBjb21tX19vdmVycmlkZShjdXJyLCBzdHIsIHRpbWVzdGFtcCwgZXhlYyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtMTk4LDcgKzIwMCw2IEBACiB9CiAKIHZvaWQgdGhyZWFkX19maW5kX2NwdW1vZGVfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCi0JCQkJCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAogCQkJCQllbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpCiB7CkBAIC0yMTEsOCArMjEyLDcgQEAKIAl9OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3B1bW9kZXMpOyBpKyspIHsKLQkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBtYWNoaW5lLCBjcHVtb2Rlc1tpXSwgdHlwZSwKLQkJCQkJICAgYWRkciwgYWwpOworCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIGNwdW1vZGVzW2ldLCB0eXBlLCBhZGRyLCBhbCk7CiAJCWlmIChhbC0+bWFwKQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCmluZGV4IDhjNzVmYTcuLjE2MGZkMDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaAorKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSA8c3RybGlzdC5oPgogCitzdHJ1Y3QgdGhyZWFkX3N0YWNrOworCiBzdHJ1Y3QgdGhyZWFkIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCByYl9ub2RlCSByYl9ub2RlOwpAQCAtMjMsOCArMjUsMTAgQEAKIAlib29sCQkJZGVhZDsgLyogaWYgc2V0IHRocmVhZCBoYXMgZXhpdGVkICovCiAJc3RydWN0IGxpc3RfaGVhZAljb21tX2xpc3Q7CiAJaW50CQkJY29tbV9sZW47CisJdTY0CQkJZGJfaWQ7CiAKIAl2b2lkCQkJKnByaXY7CisJc3RydWN0IHRocmVhZF9zdGFjawkqdHM7CiB9OwogCiBzdHJ1Y3QgbWFjaGluZTsKQEAgLTU0LDE2ICs1OCwxNSBAQAogaW50IHRocmVhZF9fZm9yayhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCB0aHJlYWQgKnBhcmVudCwgdTY0IHRpbWVzdGFtcCk7CiBzaXplX3QgdGhyZWFkX19mcHJpbnRmKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgRklMRSAqZnApOwogCi12b2lkIHRocmVhZF9fZmluZF9hZGRyX21hcChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAordm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9tYXAoc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJICAgdTggY3B1bW9kZSwgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKIAkJCSAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7CiAKLXZvaWQgdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJCXU4IGNwdW1vZGUsIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKTsKIAogdm9pZCB0aHJlYWRfX2ZpbmRfY3B1bW9kZV9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKLQkJCQkJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCiAJCQkJCWVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90b29sLmggYi90b29scy9wZXJmL3V0aWwvdG9vbC5oCmluZGV4IGYxMTYzNjkuLmJiMjcwOGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90b29sLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Rvb2wuaApAQCAtMzksNyArMzksOCBAQAogCWV2ZW50X2F0dHJfb3AJYXR0cjsKIAlldmVudF9vcDIJdHJhY2luZ19kYXRhOwogCWV2ZW50X29wMglmaW5pc2hlZF9yb3VuZCwKLQkJCWJ1aWxkX2lkOworCQkJYnVpbGRfaWQsCisJCQlpZF9pbmRleDsKIAlib29sCQlvcmRlcmVkX2V2ZW50czsKIAlib29sCQlvcmRlcmluZ19yZXF1aXJlc190aW1lc3RhbXBzOwogfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGliZHcuYyBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGliZHcuYwppbmRleCA3NDE5NzY4Li4yZGNmZTlhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYmR3LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJkdy5jCkBAIC0yNiw3ICsyNiw3IEBACiAJRHdmbF9Nb2R1bGUgKm1vZDsKIAlzdHJ1Y3QgZHNvICpkc28gPSBOVUxMOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odWktPnRocmVhZCwgdWktPm1hY2hpbmUsCisJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odWktPnRocmVhZCwKIAkJCQkgICBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCiAJCQkJICAgTUFQX19GVU5DVElPTiwgaXAsIGFsKTsKIApAQCAtODksNyArODksNyBAQAogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXNzaXplX3Qgc2l6ZTsKIAotCXRocmVhZF9fZmluZF9hZGRyX21hcCh1aS0+dGhyZWFkLCB1aS0+bWFjaGluZSwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAorCXRocmVhZF9fZmluZF9hZGRyX21hcCh1aS0+dGhyZWFkLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCiAJCQkgICAgICBNQVBfX0ZVTkNUSU9OLCBhZGRyLCAmYWwpOwogCWlmICghYWwubWFwKSB7CiAJCXByX2RlYnVnKCJ1bndpbmQ6IG5vIG1hcCBmb3IgJWx4XG4iLCAodW5zaWduZWQgbG9uZylhZGRyKTsKQEAgLTE2NCwxNCArMTY0LDE0IEBACiB9CiAKIGludCB1bndpbmRfX2dldF9lbnRyaWVzKHVud2luZF9lbnRyeV9jYl90IGNiLCB2b2lkICphcmcsCi0JCQlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJc3RydWN0IHBlcmZfc2FtcGxlICpkYXRhLAogCQkJaW50IG1heF9zdGFjaykKIHsKIAlzdHJ1Y3QgdW53aW5kX2luZm8gdWkgPSB7CiAJCS5zYW1wbGUJCT0gZGF0YSwKIAkJLnRocmVhZAkJPSB0aHJlYWQsCi0JCS5tYWNoaW5lCT0gbWFjaGluZSwKKwkJLm1hY2hpbmUJPSB0aHJlYWQtPm1nLT5tYWNoaW5lLAogCQkuY2IJCT0gY2IsCiAJCS5hcmcJCT0gYXJnLAogCQkubWF4X3N0YWNrCT0gbWF4X3N0YWNrLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJ1bndpbmQuYyBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGlidW53aW5kLmMKaW5kZXggNGQ0NWMwZC4uMzcxMjE5YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJ1bndpbmQuYworKysgYi90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYnVud2luZC5jCkBAIC0yODQsNyArMjg0LDcgQEAKIHsKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAotCXRocmVhZF9fZmluZF9hZGRyX21hcCh1aS0+dGhyZWFkLCB1aS0+bWFjaGluZSwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAorCXRocmVhZF9fZmluZF9hZGRyX21hcCh1aS0+dGhyZWFkLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCiAJCQkgICAgICBNQVBfX0ZVTkNUSU9OLCBpcCwgJmFsKTsKIAlyZXR1cm4gYWwubWFwOwogfQpAQCAtMzc0LDcgKzM3NCw3IEBACiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAJc3NpemVfdCBzaXplOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbWFwKHVpLT50aHJlYWQsIHVpLT5tYWNoaW5lLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCisJdGhyZWFkX19maW5kX2FkZHJfbWFwKHVpLT50aHJlYWQsIFBFUkZfUkVDT1JEX01JU0NfVVNFUiwKIAkJCSAgICAgIE1BUF9fRlVOQ1RJT04sIGFkZHIsICZhbCk7CiAJaWYgKCFhbC5tYXApIHsKIAkJcHJfZGVidWcoInVud2luZDogbm8gbWFwIGZvciAlbHhcbiIsICh1bnNpZ25lZCBsb25nKWFkZHIpOwpAQCAtNDc2LDE0ICs0NzYsMTMgQEAKIAlwcl9kZWJ1ZygidW53aW5kOiBwdXRfdW53aW5kX2luZm8gY2FsbGVkXG4iKTsKIH0KIAotc3RhdGljIGludCBlbnRyeSh1NjQgaXAsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCitzdGF0aWMgaW50IGVudHJ5KHU2NCBpcCwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkgdW53aW5kX2VudHJ5X2NiX3QgY2IsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdW53aW5kX2VudHJ5IGU7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG1hY2hpbmUsCi0JCQkJICAgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAorCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAogCQkJCSAgIE1BUF9fRlVOQ1RJT04sIGlwLCAmYWwpOwogCiAJZS5pcCA9IGlwOwpAQCAtNTg2LDIxICs1ODUsMjEgQEAKIAkJdW53X3dvcmRfdCBpcDsKIAogCQl1bndfZ2V0X3JlZygmYywgVU5XX1JFR19JUCwgJmlwKTsKLQkJcmV0ID0gaXAgPyBlbnRyeShpcCwgdWktPnRocmVhZCwgdWktPm1hY2hpbmUsIGNiLCBhcmcpIDogMDsKKwkJcmV0ID0gaXAgPyBlbnRyeShpcCwgdWktPnRocmVhZCwgY2IsIGFyZykgOiAwOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKIGludCB1bndpbmRfX2dldF9lbnRyaWVzKHVud2luZF9lbnRyeV9jYl90IGNiLCB2b2lkICphcmcsCi0JCQlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJc3RydWN0IHBlcmZfc2FtcGxlICpkYXRhLCBpbnQgbWF4X3N0YWNrKQogewogCXU2NCBpcDsKIAlzdHJ1Y3QgdW53aW5kX2luZm8gdWkgPSB7CiAJCS5zYW1wbGUgICAgICAgPSBkYXRhLAogCQkudGhyZWFkICAgICAgID0gdGhyZWFkLAotCQkubWFjaGluZSAgICAgID0gbWFjaGluZSwKKwkJLm1hY2hpbmUgICAgICA9IHRocmVhZC0+bWctPm1hY2hpbmUsCiAJfTsKIAlpbnQgcmV0OwogCkBAIC02MTEsNyArNjEwLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZW50cnkoaXAsIHRocmVhZCwgbWFjaGluZSwgY2IsIGFyZyk7CisJcmV0ID0gZW50cnkoaXAsIHRocmVhZCwgY2IsIGFyZyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQuaCBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQuaAppbmRleCBmNTBiNzM3Li4xMjc5MGNmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdW53aW5kLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Vud2luZC5oCkBAIC0xNiw3ICsxNiw2IEBACiAKICNpZmRlZiBIQVZFX0RXQVJGX1VOV0lORF9TVVBQT1JUCiBpbnQgdW53aW5kX19nZXRfZW50cmllcyh1bndpbmRfZW50cnlfY2JfdCBjYiwgdm9pZCAqYXJnLAotCQkJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCiAJCQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCiAJCQlzdHJ1Y3QgcGVyZl9zYW1wbGUgKmRhdGEsIGludCBtYXhfc3RhY2spOwogLyogbGlidW53aW5kIHNwZWNpZmljICovCkBAIC0zOCw3ICszNyw2IEBACiBzdGF0aWMgaW5saW5lIGludAogdW53aW5kX19nZXRfZW50cmllcyh1bndpbmRfZW50cnlfY2JfdCBjYiBfX21heWJlX3VudXNlZCwKIAkJICAgIHZvaWQgKmFyZyBfX21heWJlX3VudXNlZCwKLQkJICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lIF9fbWF5YmVfdW51c2VkLAogCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fbWF5YmVfdW51c2VkLAogCQkgICAgc3RydWN0IHBlcmZfc2FtcGxlICpkYXRhIF9fbWF5YmVfdW51c2VkLAogCQkgICAgaW50IG1heF9zdGFjayBfX21heWJlX3VudXNlZCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmggYi90b29scy9wZXJmL3V0aWwvdXRpbC5oCmluZGV4IDgwYmZkYWEuLjQxOWJlZTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaApAQCAtMTU0LDcgKzE1NCw2IEBACiAKIGV4dGVybiBpbnQgcHJlZml4Y21wKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiB2b2lkIHNldF9idWlsZGlkX2Rpcih2b2lkKTsKLWV4dGVybiB2b2lkIGRpc2FibGVfYnVpbGRpZF9jYWNoZSh2b2lkKTsKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpza2lwX3ByZWZpeChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKQEAgLTMzOCw4ICszMzcsMTAgQEAKIH0KIAogc3RydWN0IGRzbzsKK3N0cnVjdCBzeW1ib2w7CiAKLWNoYXIgKmdldF9zcmNsaW5lKHN0cnVjdCBkc28gKmRzbywgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2NoYXIgKmdldF9zcmNsaW5lKHN0cnVjdCBkc28gKmRzbywgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sCisJCSAgYm9vbCBzaG93X3N5bSk7CiB2b2lkIGZyZWVfc3JjbGluZShjaGFyICpzcmNsaW5lKTsKIAogaW50IGZpbGVuYW1lX19yZWFkX2ludChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50ICp2YWx1ZSk7CkBAIC0zNTEsNCArMzUyLDkgQEAKIAogY29uc3QgY2hhciAqZ2V0X2ZpbGVuYW1lX2Zvcl9wZXJmX2t2bSh2b2lkKTsKIGJvb2wgZmluZF9wcm9jZXNzKGNvbnN0IGNoYXIgKm5hbWUpOworCisjaWZkZWYgSEFWRV9aTElCX1NVUFBPUlQKK2ludCBnemlwX2RlY29tcHJlc3NfdG9fZmlsZShjb25zdCBjaGFyICppbnB1dCwgaW50IG91dHB1dF9mZCk7CisjZW5kaWYKKwogI2VuZGlmIC8qIEdJVF9DT01QQVRfVVRJTF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdmRzby5jIGIvdG9vbHMvcGVyZi91dGlsL3Zkc28uYwppbmRleCBhZGNhNjkzLi41YzdkZDc5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdmRzby5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC92ZHNvLmMKQEAgLTEyLDkgKzEyLDE2IEBACiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgInN5bWJvbC5oIgogI2luY2x1ZGUgIm1hY2hpbmUuaCIKKyNpbmNsdWRlICJ0aHJlYWQuaCIKICNpbmNsdWRlICJsaW51eC9zdHJpbmcuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCisvKgorICogSW5jbHVkZSBkZWZpbml0aW9uIG9mIGZpbmRfdmRzb19tYXAoKSBhbHNvIHVzZWQgaW4gcGVyZi1yZWFkLXZkc28uYyBmb3IKKyAqIGJ1aWxkaW5nIHBlcmYtcmVhZC12ZHNvMzIgYW5kIHBlcmYtcmVhZC12ZHNveDMyLgorICovCisjaW5jbHVkZSAiZmluZC12ZHNvLW1hcC5jIgorCiAjZGVmaW5lIFZEU09fX1RFTVBfRklMRV9OQU1FICIvdG1wL3BlcmYtdmRzby5zby1YWFhYWFgiCiAKIHN0cnVjdCB2ZHNvX2ZpbGUgewpAQCAtMjIsMTAgKzI5LDE1IEBACiAJYm9vbCBlcnJvcjsKIAljaGFyIHRlbXBfZmlsZV9uYW1lW3NpemVvZihWRFNPX19URU1QX0ZJTEVfTkFNRSldOwogCWNvbnN0IGNoYXIgKmRzb19uYW1lOworCWNvbnN0IGNoYXIgKnJlYWRfcHJvZzsKIH07CiAKIHN0cnVjdCB2ZHNvX2luZm8gewogCXN0cnVjdCB2ZHNvX2ZpbGUgdmRzbzsKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJc3RydWN0IHZkc29fZmlsZSB2ZHNvMzI7CisJc3RydWN0IHZkc29fZmlsZSB2ZHNveDMyOworI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IHZkc29faW5mbyAqdmRzb19pbmZvX19uZXcodm9pZCkKQEAgLTM1LDQyICs0NywyMyBAQAogCQkJLnRlbXBfZmlsZV9uYW1lID0gVkRTT19fVEVNUF9GSUxFX05BTUUsCiAJCQkuZHNvX25hbWUgPSBEU09fX05BTUVfVkRTTywKIAkJfSwKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJCS52ZHNvMzIgID0geworCQkJLnRlbXBfZmlsZV9uYW1lID0gVkRTT19fVEVNUF9GSUxFX05BTUUsCisJCQkuZHNvX25hbWUgPSBEU09fX05BTUVfVkRTTzMyLAorCQkJLnJlYWRfcHJvZyA9ICJwZXJmLXJlYWQtdmRzbzMyIiwKKwkJfSwKKwkJLnZkc294MzIgID0geworCQkJLnRlbXBfZmlsZV9uYW1lID0gVkRTT19fVEVNUF9GSUxFX05BTUUsCisJCQkuZHNvX25hbWUgPSBEU09fX05BTUVfVkRTT1gzMiwKKwkJCS5yZWFkX3Byb2cgPSAicGVyZi1yZWFkLXZkc294MzIiLAorCQl9LAorI2VuZGlmCiAJfTsKIAogCXJldHVybiBtZW1kdXAoJnZkc29faW5mb19pbml0LCBzaXplb2YodmRzb19pbmZvX2luaXQpKTsKIH0KIAotc3RhdGljIGludCBmaW5kX3Zkc29fbWFwKHZvaWQgKipzdGFydCwgdm9pZCAqKmVuZCkKLXsKLQlGSUxFICptYXBzOwotCWNoYXIgbGluZVsxMjhdOwotCWludCBmb3VuZCA9IDA7Ci0KLQltYXBzID0gZm9wZW4oIi9wcm9jL3NlbGYvbWFwcyIsICJyIik7Ci0JaWYgKCFtYXBzKSB7Ci0JCXByX2VycigidmRzbzogY2Fubm90IG9wZW4gbWFwc1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQl3aGlsZSAoIWZvdW5kICYmIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgbWFwcykpIHsKLQkJaW50IG0gPSAtMTsKLQotCQkvKiBXZSBjYXJlIG9ubHkgYWJvdXQgcHJpdmF0ZSByLXggbWFwcGluZ3MuICovCi0JCWlmICgyICE9IHNzY2FuZihsaW5lLCAiJXAtJXAgci14cCAlKnggJSp4OiUqeCAlKnUgJW4iLAotCQkJCXN0YXJ0LCBlbmQsICZtKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobSA8IDApCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXN0cm5jbXAoJmxpbmVbbV0sIFZEU09fX01BUF9OQU1FLAotCQkJICAgICBzaXplb2YoVkRTT19fTUFQX05BTUUpIC0gMSkpCi0JCQlmb3VuZCA9IDE7Ci0JfQotCi0JZmNsb3NlKG1hcHMpOwotCXJldHVybiAhZm91bmQ7Ci19Ci0KIHN0YXRpYyBjaGFyICpnZXRfZmlsZShzdHJ1Y3QgdmRzb19maWxlICp2ZHNvX2ZpbGUpCiB7CiAJY2hhciAqdmRzbyA9IE5VTEw7CkBAIC0xMTcsNiArMTEwLDEyIEBACiAKIAlpZiAodmRzb19pbmZvLT52ZHNvLmZvdW5kKQogCQl1bmxpbmsodmRzb19pbmZvLT52ZHNvLnRlbXBfZmlsZV9uYW1lKTsKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJaWYgKHZkc29faW5mby0+dmRzbzMyLmZvdW5kKQorCQl1bmxpbmsodmRzb19pbmZvLT52ZHNvMzIudGVtcF9maWxlX25hbWUpOworCWlmICh2ZHNvX2luZm8tPnZkc294MzIuZm91bmQpCisJCXVubGluayh2ZHNvX2luZm8tPnZkc294MzIudGVtcF9maWxlX25hbWUpOworI2VuZGlmCiAKIAl6ZnJlZSgmbWFjaGluZS0+dmRzb19pbmZvKTsKIH0KQEAgLTEzNSw2ICsxMzQsMTUzIEBACiAJcmV0dXJuIGRzbzsKIH0KIAorI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKworc3RhdGljIGVudW0gZHNvX3R5cGUgbWFjaGluZV9fdGhyZWFkX2Rzb190eXBlKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAorCQkJCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJZW51bSBkc29fdHlwZSBkc29fdHlwZSA9IERTT19fVFlQRV9VTktOT1dOOworCXN0cnVjdCBtYXAgKm1hcDsKKwlzdHJ1Y3QgZHNvICpkc287CisKKwltYXAgPSBtYXBfZ3JvdXBzX19maXJzdCh0aHJlYWQtPm1nLCBNQVBfX0ZVTkNUSU9OKTsKKwlmb3IgKDsgbWFwIDsgbWFwID0gbWFwX2dyb3Vwc19fbmV4dChtYXApKSB7CisJCWRzbyA9IG1hcC0+ZHNvOworCQlpZiAoIWRzbyB8fCBkc28tPmxvbmdfbmFtZVswXSAhPSAnLycpCisJCQljb250aW51ZTsKKwkJZHNvX3R5cGUgPSBkc29fX3R5cGUoZHNvLCBtYWNoaW5lKTsKKwkJaWYgKGRzb190eXBlICE9IERTT19fVFlQRV9VTktOT1dOKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGRzb190eXBlOworfQorCitzdGF0aWMgaW50IHZkc29fX2RvX2NvcHlfY29tcGF0KEZJTEUgKmYsIGludCBmZCkKK3sKKwljaGFyIGJ1Zls0MDk2XTsKKwlzaXplX3QgY291bnQ7CisKKwl3aGlsZSAoMSkgeworCQljb3VudCA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIGYpOworCQlpZiAoZmVycm9yKGYpKQorCQkJcmV0dXJuIC1lcnJubzsKKwkJaWYgKGZlb2YoZikpCisJCQlicmVhazsKKwkJaWYgKGNvdW50ICYmIHdyaXRlbihmZCwgYnVmLCBjb3VudCkgIT0gKHNzaXplX3QpY291bnQpCisJCQlyZXR1cm4gLWVycm5vOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZkc29fX2NvcHlfY29tcGF0KGNvbnN0IGNoYXIgKnByb2csIGludCBmZCkKK3sKKwlGSUxFICpmOworCWludCBlcnI7CisKKwlmID0gcG9wZW4ocHJvZywgInIiKTsKKwlpZiAoIWYpCisJCXJldHVybiAtZXJybm87CisKKwllcnIgPSB2ZHNvX19kb19jb3B5X2NvbXBhdChmLCBmZCk7CisKKwlpZiAocGNsb3NlKGYpID09IC0xKQorCQlyZXR1cm4gLWVycm5vOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB2ZHNvX19jcmVhdGVfY29tcGF0X2ZpbGUoY29uc3QgY2hhciAqcHJvZywgY2hhciAqdGVtcF9uYW1lKQoreworCWludCBmZCwgZXJyOworCisJZmQgPSBta3N0ZW1wKHRlbXBfbmFtZSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCWVyciA9IHZkc29fX2NvcHlfY29tcGF0KHByb2csIGZkKTsKKworCWlmIChjbG9zZShmZCkgPT0gLTEpCisJCXJldHVybiAtZXJybm87CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdmRzb19fZ2V0X2NvbXBhdF9maWxlKHN0cnVjdCB2ZHNvX2ZpbGUgKnZkc29fZmlsZSkKK3sKKwlpbnQgZXJyOworCisJaWYgKHZkc29fZmlsZS0+Zm91bmQpCisJCXJldHVybiB2ZHNvX2ZpbGUtPnRlbXBfZmlsZV9uYW1lOworCisJaWYgKHZkc29fZmlsZS0+ZXJyb3IpCisJCXJldHVybiBOVUxMOworCisJZXJyID0gdmRzb19fY3JlYXRlX2NvbXBhdF9maWxlKHZkc29fZmlsZS0+cmVhZF9wcm9nLAorCQkJCSAgICAgICB2ZHNvX2ZpbGUtPnRlbXBfZmlsZV9uYW1lKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiJXMgZmFpbGVkLCBlcnJvciAlZFxuIiwgdmRzb19maWxlLT5yZWFkX3Byb2csIGVycik7CisJCXZkc29fZmlsZS0+ZXJyb3IgPSB0cnVlOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl2ZHNvX2ZpbGUtPmZvdW5kID0gdHJ1ZTsKKworCXJldHVybiB2ZHNvX2ZpbGUtPnRlbXBfZmlsZV9uYW1lOworfQorCitzdGF0aWMgc3RydWN0IGRzbyAqdmRzb19fZmluZG5ld19jb21wYXQoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCisJCQkJCXN0cnVjdCB2ZHNvX2ZpbGUgKnZkc29fZmlsZSkKK3sKKwljb25zdCBjaGFyICpmaWxlX25hbWU7CisJc3RydWN0IGRzbyAqZHNvOworCisJZHNvID0gZHNvc19fZmluZCgmbWFjaGluZS0+dXNlcl9kc29zLCB2ZHNvX2ZpbGUtPmRzb19uYW1lLCB0cnVlKTsKKwlpZiAoZHNvKQorCQlyZXR1cm4gZHNvOworCisJZmlsZV9uYW1lID0gdmRzb19fZ2V0X2NvbXBhdF9maWxlKHZkc29fZmlsZSk7CisJaWYgKCFmaWxlX25hbWUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHZkc29fX25ldyhtYWNoaW5lLCB2ZHNvX2ZpbGUtPmRzb19uYW1lLCBmaWxlX25hbWUpOworfQorCitzdGF0aWMgaW50IHZkc29fX2Rzb19maW5kbmV3X2NvbXBhdChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKKwkJCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJCSAgICBzdHJ1Y3QgdmRzb19pbmZvICp2ZHNvX2luZm8sCisJCQkJICAgIHN0cnVjdCBkc28gKipkc28pCit7CisJZW51bSBkc29fdHlwZSBkc29fdHlwZTsKKworCWRzb190eXBlID0gbWFjaGluZV9fdGhyZWFkX2Rzb190eXBlKG1hY2hpbmUsIHRocmVhZCk7CisKKyNpZm5kZWYgSEFWRV9QRVJGX1JFQURfVkRTTzMyCisJaWYgKGRzb190eXBlID09IERTT19fVFlQRV8zMkJJVCkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKyNpZm5kZWYgSEFWRV9QRVJGX1JFQURfVkRTT1gzMgorCWlmIChkc29fdHlwZSA9PSBEU09fX1RZUEVfWDMyQklUKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCisJc3dpdGNoIChkc29fdHlwZSkgeworCWNhc2UgRFNPX19UWVBFXzMyQklUOgorCQkqZHNvID0gdmRzb19fZmluZG5ld19jb21wYXQobWFjaGluZSwgJnZkc29faW5mby0+dmRzbzMyKTsKKwkJcmV0dXJuIDE7CisJY2FzZSBEU09fX1RZUEVfWDMyQklUOgorCQkqZHNvID0gdmRzb19fZmluZG5ld19jb21wYXQobWFjaGluZSwgJnZkc29faW5mby0+dmRzb3gzMik7CisJCXJldHVybiAxOworCWNhc2UgRFNPX19UWVBFX1VOS05PV046CisJY2FzZSBEU09fX1RZUEVfNjRCSVQ6CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCisjZW5kaWYKKwogc3RydWN0IGRzbyAqdmRzb19fZHNvX2ZpbmRuZXcoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCiAJCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX19tYXliZV91bnVzZWQpCiB7CkBAIC0xNDgsNiArMjk0LDExIEBACiAJaWYgKCF2ZHNvX2luZm8pCiAJCXJldHVybiBOVUxMOwogCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCWlmICh2ZHNvX19kc29fZmluZG5ld19jb21wYXQobWFjaGluZSwgdGhyZWFkLCB2ZHNvX2luZm8sICZkc28pKQorCQlyZXR1cm4gZHNvOworI2VuZGlmCisKIAlkc28gPSBkc29zX19maW5kKCZtYWNoaW5lLT51c2VyX2Rzb3MsIERTT19fTkFNRV9WRFNPLCB0cnVlKTsKIAlpZiAoIWRzbykgewogCQljaGFyICpmaWxlOwpAQCAtMTY0LDUgKzMxNSw3IEBACiAKIGJvb2wgZHNvX19pc192ZHNvKHN0cnVjdCBkc28gKmRzbykKIHsKLQlyZXR1cm4gIXN0cmNtcChkc28tPnNob3J0X25hbWUsIERTT19fTkFNRV9WRFNPKTsKKwlyZXR1cm4gIXN0cmNtcChkc28tPnNob3J0X25hbWUsIERTT19fTkFNRV9WRFNPKSB8fAorCSAgICAgICAhc3RyY21wKGRzby0+c2hvcnRfbmFtZSwgRFNPX19OQU1FX1ZEU08zMikgfHwKKwkgICAgICAgIXN0cmNtcChkc28tPnNob3J0X25hbWUsIERTT19fTkFNRV9WRFNPWDMyKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC92ZHNvLmggYi90b29scy9wZXJmL3V0aWwvdmRzby5oCmluZGV4IGFmOWQ2OTIuLmQ5N2RhMTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC92ZHNvLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Zkc28uaApAQCAtNyw3ICs3LDkgQEAKIAogI2RlZmluZSBWRFNPX19NQVBfTkFNRSAiW3Zkc29dIgogCi0jZGVmaW5lIERTT19fTkFNRV9WRFNPICJbdmRzb10iCisjZGVmaW5lIERTT19fTkFNRV9WRFNPICAgICJbdmRzb10iCisjZGVmaW5lIERTT19fTkFNRV9WRFNPMzIgICJbdmRzbzMyXSIKKyNkZWZpbmUgRFNPX19OQU1FX1ZEU09YMzIgIlt2ZHNveDMyXSIKIAogc3RhdGljIGlubGluZSBib29sIGlzX3Zkc29fbWFwKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3psaWIuYyBiL3Rvb2xzL3BlcmYvdXRpbC96bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1YTQ0OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC96bGliLmMKQEAgLTAsMCArMSw3OCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHpsaWIuaD4KKworI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKworCisjZGVmaW5lIENIVU5LX1NJWkUgIDE2Mzg0CisKK2ludCBnemlwX2RlY29tcHJlc3NfdG9fZmlsZShjb25zdCBjaGFyICppbnB1dCwgaW50IG91dHB1dF9mZCkKK3sKKwlpbnQgcmV0ID0gWl9TVFJFQU1fRVJST1I7CisJaW50IGlucHV0X2ZkOworCXZvaWQgKnB0cjsKKwlpbnQgbGVuOworCXN0cnVjdCBzdGF0IHN0YnVmOworCXVuc2lnbmVkIGNoYXIgYnVmW0NIVU5LX1NJWkVdOworCXpfc3RyZWFtIHpzID0geworCQkuemFsbG9jCQk9IFpfTlVMTCwKKwkJLnpmcmVlCQk9IFpfTlVMTCwKKwkJLm9wYXF1ZQkJPSBaX05VTEwsCisJCS5hdmFpbF9pbgk9IDAsCisJCS5uZXh0X2luCT0gWl9OVUxMLAorCX07CisKKwlpbnB1dF9mZCA9IG9wZW4oaW5wdXQsIE9fUkRPTkxZKTsKKwlpZiAoaW5wdXRfZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZnN0YXQoaW5wdXRfZmQsICZzdGJ1ZikgPCAwKQorCQlnb3RvIG91dF9jbG9zZTsKKworCXB0ciA9IG1tYXAoTlVMTCwgc3RidWYuc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgaW5wdXRfZmQsIDApOworCWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKKwkJZ290byBvdXRfY2xvc2U7CisKKwlpZiAoaW5mbGF0ZUluaXQyKCZ6cywgMTYgKyBNQVhfV0JJVFMpICE9IFpfT0spCisJCWdvdG8gb3V0X3VubWFwOworCisJenMubmV4dF9pbiA9IHB0cjsKKwl6cy5hdmFpbF9pbiA9IHN0YnVmLnN0X3NpemU7CisKKwlkbyB7CisJCXpzLm5leHRfb3V0ID0gYnVmOworCQl6cy5hdmFpbF9vdXQgPSBDSFVOS19TSVpFOworCisJCXJldCA9IGluZmxhdGUoJnpzLCBaX05PX0ZMVVNIKTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSBaX05FRURfRElDVDoKKwkJCXJldCA9IFpfREFUQV9FUlJPUjsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFpfREFUQV9FUlJPUjoKKwkJY2FzZSBaX01FTV9FUlJPUjoKKwkJCWdvdG8gb3V0OworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlsZW4gPSBDSFVOS19TSVpFIC0genMuYXZhaWxfb3V0OworCQlpZiAod3JpdGVuKG91dHB1dF9mZCwgYnVmLCBsZW4pICE9IGxlbikgeworCQkJcmV0ID0gWl9EQVRBX0VSUk9SOworCQkJZ290byBvdXQ7CisJCX0KKworCX0gd2hpbGUgKHJldCAhPSBaX1NUUkVBTV9FTkQpOworCitvdXQ6CisJaW5mbGF0ZUVuZCgmenMpOworb3V0X3VubWFwOgorCW11bm1hcChwdHIsIHN0YnVmLnN0X3NpemUpOworb3V0X2Nsb3NlOgorCWNsb3NlKGlucHV0X2ZkKTsKKworCXJldHVybiByZXQgPT0gWl9TVFJFQU1fRU5EID8gMCA6IC0xOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXRlc3QtMS1ydW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaAppbmRleCBmNmIyYjQ3Li44Y2E5ZjIxIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaApAQCAtNDUsNyArNDUsNyBAQAogdG91Y2ggJFQKIAogLiAkS1ZNL2Jpbi9mdW5jdGlvbnMuc2gKLS4gJEtWUEFUSC92ZXJfZnVuY3Rpb25zLnNoCisuICRDT05GSUdGUkFHL3Zlcl9mdW5jdGlvbnMuc2gKIAogY29uZmlnX3RlbXBsYXRlPSR7MX0KIGNvbmZpZ19kaXI9YGVjaG8gJGNvbmZpZ190ZW1wbGF0ZSB8IHNlZCAtZSAncywvW14vXSokLCwnYApAQCAtMTY4LDggKzE2OCw4IEBACiAJdG91Y2ggJHJlc2Rpci9idWlsZG9ubHkKIAlleGl0IDAKIGZpCi1lY2hvICRRRU1VICRxZW11X2FyZ3MgLW0gNTEyIC1rZXJuZWwgJGJ1aWxkZGlyLyRCT09UX0lNQUdFIC1hcHBlbmQgXCIkcWVtdV9hcHBlbmQgJGJvb3RfYXJnc1wiID4gJHJlc2Rpci9xZW11LWNtZAotKCAkUUVNVSAkcWVtdV9hcmdzIC1tIDUxMiAta2VybmVsICRidWlsZGRpci8kQk9PVF9JTUFHRSAtYXBwZW5kICIkcWVtdV9hcHBlbmQgJGJvb3RfYXJncyI7IGVjaG8gJD8gPiAkcmVzZGlyL3FlbXUtcmV0dmFsICkgJgorZWNobyAkUUVNVSAkcWVtdV9hcmdzIC1tIDUxMiAta2VybmVsICRyZXNkaXIvYnpJbWFnZSAtYXBwZW5kIFwiJHFlbXVfYXBwZW5kICRib290X2FyZ3NcIiA+ICRyZXNkaXIvcWVtdS1jbWQKKyggJFFFTVUgJHFlbXVfYXJncyAtbSA1MTIgLWtlcm5lbCAkcmVzZGlyL2J6SW1hZ2UgLWFwcGVuZCAiJHFlbXVfYXBwZW5kICRib290X2FyZ3MiOyBlY2hvICQ/ID4gJHJlc2Rpci9xZW11LXJldHZhbCApICYKIHFlbXVfcGlkPSQhCiBjb21tYW5kY29tcGxldGVkPTAKIGVjaG8gTW9uaXRvcmluZyBxZW11IGpvYiBhdCBwaWQgJHFlbXVfcGlkCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0uc2gKaW5kZXggZTUyN2RjOS4uMzY4ZDY0YSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLnNoCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS5zaApAQCAtNDcsNyArNDcsNiBAQAogY29uZmlncz0iIgogY3B1cz0wCiBkcz1gZGF0ZSArJVkuJW0uJWQtJUg6JU06JVNgCi1rdmVyc2lvbj0iIgogCiAuIGZ1bmN0aW9ucy5zaAogCkBAIC02NCw3ICs2Myw2IEBACiAJZWNobyAiICAgICAgIC0tZHVyYXRpb24gbWludXRlcyIKIAllY2hvICIgICAgICAgLS1pbnRlcmFjdGl2ZSIKIAllY2hvICIgICAgICAgLS1rbWFrZS1hcmcga2VybmVsLW1ha2UtYXJndW1lbnRzIgotCWVjaG8gIiAgICAgICAtLWt2ZXJzaW9uIHZOLk5OIgogCWVjaG8gIiAgICAgICAtLW1hYyBubjpubjpubjpubjpubjpubiIKIAllY2hvICIgICAgICAgLS1uby1pbml0cmQiCiAJZWNobyAiICAgICAgIC0tcWVtdS1hcmdzIHFlbXUtc3lzdGVtLS4uLiIKQEAgLTEyOCwxMSArMTI2LDYgQEAKIAkJVE9SVFVSRV9LTUFLRV9BUkc9IiQyIgogCQlzaGlmdAogCQk7OwotCS0ta3ZlcnNpb24pCi0JCWNoZWNrYXJnIC0ta3ZlcnNpb24gIihrZXJuZWwgdmVyc2lvbikiICQjICIkMiIgJ152WzAtOS5dKiQnICdeZXJyb3InCi0JCWt2ZXJzaW9uPSQyCi0JCXNoaWZ0Ci0JCTs7CiAJLS1tYWMpCiAJCWNoZWNrYXJnIC0tbWFjICIoTUFDIGFkZHJlc3MpIiAkIyAiJDIiICdeXChbMC05YS1mQS1GXVx7Mlx9OlwpXHs1XH1bMC05YS1mQS1GXVx7Mlx9JCcgZXJyb3IKIAkJVE9SVFVSRV9RRU1VX01BQz0kMgpAQCAtMTcwLDExICsxNjMsMTAgQEAKIGRvbmUKIAogQ09ORklHRlJBRz0ke0tWTX0vY29uZmlncy8ke1RPUlRVUkVfU1VJVEV9OyBleHBvcnQgQ09ORklHRlJBRwotS1ZQQVRIPSR7Q09ORklHRlJBR30vJGt2ZXJzaW9uOyBleHBvcnQgS1ZQQVRICiAKIGlmIHRlc3QgLXogIiRjb25maWdzIgogdGhlbgotCWNvbmZpZ3M9ImBjYXQgJENPTkZJR0ZSQUcvJGt2ZXJzaW9uL0NGTElTVGAiCisJY29uZmlncz0iYGNhdCAkQ09ORklHRlJBRy9DRkxJU1RgIgogZmkKIAogaWYgdGVzdCAteiAiJHJlc2RpciIKQEAgLTE4NiwxMCArMTc4LDEwIEBACiB0b3VjaCAkVC9jZmdjcHUKIGZvciBDRiBpbiAkY29uZmlncwogZG8KLQlpZiB0ZXN0IC1mICIkQ09ORklHRlJBRy8ka3ZlcnNpb24vJENGIgorCWlmIHRlc3QgLWYgIiRDT05GSUdGUkFHLyRDRiIKIAl0aGVuCi0JCWNwdV9jb3VudD1gY29uZmlnTlJfQ1BVUy5zaCAkQ09ORklHRlJBRy8ka3ZlcnNpb24vJENGYAotCQljcHVfY291bnQ9YGNvbmZpZ2ZyYWdfYm9vdF9jcHVzICIkVE9SVFVSRV9CT09UQVJHUyIgIiRDT05GSUdGUkFHLyRrdmVyc2lvbi8kQ0YiICIkY3B1X2NvdW50ImAKKwkJY3B1X2NvdW50PWBjb25maWdOUl9DUFVTLnNoICRDT05GSUdGUkFHLyRDRmAKKwkJY3B1X2NvdW50PWBjb25maWdmcmFnX2Jvb3RfY3B1cyAiJFRPUlRVUkVfQk9PVEFSR1MiICIkQ09ORklHRlJBRy8kQ0YiICIkY3B1X2NvdW50ImAKIAkJZWNobyAkQ0YgJGNwdV9jb3VudCA+PiAkVC9jZmdjcHUKIAllbHNlCiAJCWVjaG8gIlRoZSAtLWNvbmZpZ3MgZmlsZSAkQ0YgZG9lcyBub3QgZXhpc3QsIHRlcm1pbmF0aW5nLiIKQEAgLTI1Miw3ICsyNDQsNiBAQAogY2F0IDw8IF9fX0VPRl9fXyA+ICRUL3NjcmlwdAogQ09ORklHRlJBRz0iJENPTkZJR0ZSQUciOyBleHBvcnQgQ09ORklHRlJBRwogS1ZNPSIkS1ZNIjsgZXhwb3J0IEtWTQotS1ZQQVRIPSIkS1ZQQVRIIjsgZXhwb3J0IEtWUEFUSAogUEFUSD0iJFBBVEgiOyBleHBvcnQgUEFUSAogVE9SVFVSRV9CT09UX0lNQUdFPSIkVE9SVFVSRV9CT09UX0lNQUdFIjsgZXhwb3J0IFRPUlRVUkVfQk9PVF9JTUFHRQogVE9SVFVSRV9CVUlMRE9OTFk9IiRUT1JUVVJFX0JVSUxET05MWSI7IGV4cG9ydCBUT1JUVVJFX0JVSUxET05MWQpAQCAtMjg1LDcgKzI3Niw3IEBACiBmaQogX19fRU9GX19fCiBhd2sgPCAkVC9jZmdjcHUucGFjayBcCi0JLXYgQ09ORklHRElSPSIkQ09ORklHRlJBRy8ka3ZlcnNpb24vIiBcCisJLXYgQ09ORklHRElSPSIkQ09ORklHRlJBRy8iIFwKIAktdiBLVk09IiRLVk0iIFwKIAktdiBuY3B1cz0kY3B1cyBcCiAJLXYgcmQ9JHJlc2Rpci8kZHMvIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVElOWTAyIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9USU5ZMDIKaW5kZXggZjRmZWFlZS4uMzZlNDFkZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9USU5ZMDIKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9USU5ZMDIKQEAgLTcsNiArNyw4IEBACiBDT05GSUdfTk9fSFpfSURMRT1uCiBDT05GSUdfTk9fSFpfRlVMTD1uCiBDT05GSUdfUkNVX1RSQUNFPXkKK0NPTkZJR19QUk9WRV9MT0NLSU5HPXkKK0NPTkZJR19QUk9WRV9SQ1U9eQogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgogQ09ORklHX1BSRUVNUFRfQ09VTlQ9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9USU5ZMDIuYm9vdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVElOWTAyLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwODAyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVElOWTAyLmJvb3QKQEAgLTAsMCArMSwyIEBACityY3VwZGF0ZS5yY3Vfc2VsZl90ZXN0PTEKK3JjdXBkYXRlLnJjdV9zZWxmX3Rlc3RfYmg9MQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDEgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMQppbmRleCAzOGUzODk1Li5mOGExMGE3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMQorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMQpAQCAtMiw3ICsyLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9bgogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KIENPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15CisjQ0hFQ0sjQ09ORklHX1BSRUVNUFRfUkNVPXkKIENPTkZJR19IWl9QRVJJT0RJQz1uCiBDT05GSUdfTk9fSFpfSURMRT15CiBDT05GSUdfTk9fSFpfRlVMTD1uCkBAIC0xNCw2ICsxNCw1IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVX1pFUk89eQogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9bgogQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz1uCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFPW4KIENPTkZJR19SQ1VfQk9PU1Q9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDIgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMgppbmRleCBlYTExOWJhLi42MjkxMjJmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMgorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMgpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9bgogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KIENPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15CisjQ0hFQ0sjQ09ORklHX1BSRUVNUFRfUkNVPXkKIENPTkZJR19IWl9QRVJJT0RJQz1uCiBDT05GSUdfTk9fSFpfSURMRT15CiBDT05GSUdfTk9fSFpfRlVMTD1uCkBAIC0xOSw2ICsxOSw1IEBACiBDT05GSUdfREVCVUdfTE9DS19BTExPQz15CiBDT05GSUdfUFJPVkVfTE9DS0lORz1uCiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPW4KLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9eQogQ09ORklHX1JDVV9CT09TVD1uCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMi1UIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDItVAppbmRleCAxOWNmOTQ4Li5hMjVkZTQ3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMi1UCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTAyLVQKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPW4KIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCiBDT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQorI0NIRUNLI0NPTkZJR19QUkVFTVBUX1JDVT15CiBDT05GSUdfSFpfUEVSSU9ESUM9bgogQ09ORklHX05PX0haX0lETEU9eQogQ09ORklHX05PX0haX0ZVTEw9bgpAQCAtMTksNiArMTksNSBAQAogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQogQ09ORklHX1BST1ZFX0xPQ0tJTkc9bgogQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz1uCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFPXkKIENPTkZJR19SQ1VfQk9PU1Q9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMwppbmRleCBmNDU2N2ZiLi41M2YyNGUwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9bgogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KIENPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15CisjQ0hFQ0sjQ09ORklHX1BSRUVNUFRfUkNVPXkKIENPTkZJR19IWl9QRVJJT0RJQz15CiBDT05GSUdfTk9fSFpfSURMRT1uCiBDT05GSUdfTk9fSFpfRlVMTD1uCkBAIC0xNSw3ICsxNSw2IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVPW4KIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89bgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT1uCiBDT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCitDT05GSUdfUkNVX0tUSFJFQURfUFJJTz0yCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA0CmluZGV4IDBhMjYyZmIuLjBmODRkYjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA0CisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA0CkBAIC0xOSw1ICsxOSw0IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVPW4KIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT15CiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA1CmluZGV4IDNhMDZiOTcuLjIxMmUzYmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA1CisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA1CkBAIC0xOSw1ICsxOSw0IEBACiBDT05GSUdfUFJPVkVfTE9DS0lORz15CiBDT05GSUdfUFJPVkVfUkNVPXkKIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89bgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT1uCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNS5ib290IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDUuYm9vdAppbmRleCAzYjQyYjhiLi4xNWIzZTFhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNS5ib290CisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA1LmJvb3QKQEAgLTEgKzEsMiBAQAogcmN1dG9ydHVyZS50b3J0dXJlX3R5cGU9c2NoZWQKK3JjdXBkYXRlLnJjdV9zZWxmX3Rlc3Rfc2NoZWQ9MQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDYgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNgppbmRleCA4ZjA4NGNjLi43ZWVlNjNiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNgorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNgpAQCAtMjAsNSArMjAsNCBAQAogQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQogQ09ORklHX1BST1ZFX1JDVT15CiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPW4KLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDYuYm9vdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA2LmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5YTAzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA2LmJvb3QKQEAgLTAsMCArMSwzIEBACityY3VwZGF0ZS5yY3Vfc2VsZl90ZXN0PTEKK3JjdXBkYXRlLnJjdV9zZWxmX3Rlc3RfYmg9MQorcmN1cGRhdGUucmN1X3NlbGZfdGVzdF9zY2hlZD0xCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA3CmluZGV4IDhmMTAxNzYuLjkyYTk3ZmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA3CisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA3CkBAIC0xOSw1ICsxOSw0IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVPW4KIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT1uCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4CmluZGV4IDY5YTJlMjUuLjU4MTIwMjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4CisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4CkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT1uCiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgogQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKKyNDSEVDSyNDT05GSUdfUFJFRU1QVF9SQ1U9eQogQ09ORklHX0haX1BFUklPRElDPW4KIENPTkZJR19OT19IWl9JRExFPXkKIENPTkZJR19OT19IWl9GVUxMPW4KQEAgLTE4LDcgKzE4LDggQEAKIENPTkZJR19SQ1VfTk9DQl9DUFU9eQogQ09ORklHX1JDVV9OT0NCX0NQVV9BTEw9eQogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9bgorQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQorQ09ORklHX1BST1ZFX1JDVT15CiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPW4KLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9bgogQ09ORklHX1JDVV9CT09TVD1uCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOC1UIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDgtVAppbmRleCBhMGYzMmZiLi4zZWFlY2NhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOC1UCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4LVQKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPW4KIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCiBDT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQorI0NIRUNLI0NPTkZJR19QUkVFTVBUX1JDVT15CiBDT05GSUdfSFpfUEVSSU9ESUM9bgogQ09ORklHX05PX0haX0lETEU9eQogQ09ORklHX05PX0haX0ZVTEw9bgpAQCAtMTksNiArMTksNSBAQAogQ09ORklHX1JDVV9OT0NCX0NQVV9BTEw9eQogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9bgogQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz1uCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFPW4KIENPTkZJR19SQ1VfQk9PU1Q9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDguYm9vdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4LmJvb3QKaW5kZXggM2I0MmI4Yi4uMjU2MWRhZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDguYm9vdAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOC5ib290CkBAIC0xICsxLDMgQEAKIHJjdXRvcnR1cmUudG9ydHVyZV90eXBlPXNjaGVkCityY3VwZGF0ZS5yY3Vfc2VsZl90ZXN0PTEKK3JjdXBkYXRlLnJjdV9zZWxmX3Rlc3Rfc2NoZWQ9MQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOQppbmRleCBiN2E2MmE1Li42MDc2YjM2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOQorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOQpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9bgogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KIENPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15CisjQ0hFQ0sjQ09ORklHX1BSRUVNUFRfUkNVPXkKIENPTkZJR19IWl9QRVJJT0RJQz1uCiBDT05GSUdfTk9fSFpfSURMRT15CiBDT05GSUdfTk9fSFpfRlVMTD1uCkBAIC0xNCw2ICsxNCw1IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVPW4KIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89bgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT1uCiBDT05GSUdfUkNVX0JPT1NUPW4KIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9DRkxJU1QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvQ0ZMSVNUCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODIyMzk0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9DRkxJU1QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1QMS1TLVQtTkgtU0QtU01QLUhQCi1QMi0yLXQtbmgtc2QtU01QLWhwCi1QMy0zLVQtbmgtU0QtU01QLWhwCi1QNC1BLXQtTkgtc2QtU01QLUhQCi1QNS1VLVQtTkgtc2QtU01QLWhwCi1OMS1TLVQtTkgtU0QtU01QLUhQCi1OMi0yLXQtbmgtc2QtU01QLWhwCi1OMy0zLVQtbmgtU0QtU01QLWhwCi1ONC1BLXQtTkgtc2QtU01QLUhQCi1ONS1VLVQtTkgtc2QtU01QLWhwCi1QVDEtbmgKLVBUMi1OSAotTlQxLW5oCi1OVDMtTkgKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL04xLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZWY4NzMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL04xLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjItMi10LW5oLXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmU0MTg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMi0yLXQtbmgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD00Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL04zLTMtVC1uaC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTAwZjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL04zLTMtVC1uaC1TRC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9ONC1BLXQtTkgtc2QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTZiNDQ1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9ONC1BLXQtTkgtc2QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL041LVUtVC1OSC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkOTI0Zi4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjUtVS1ULU5ILXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL05UMS1uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2YzMTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL05UMS1uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNDSEVDSyNDT05GSUdfVElOWV9SQ1U9eQotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPW4KLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OVDMtTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTlQzLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmQwMjM1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OVDMtTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9eQotIwotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AxLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQwMmQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AxLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9OAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AyLTItdC1uaC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDItMi10LW5oLXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYzYjY2Ny4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDItMi10LW5oLXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AzLTMtVC1uaC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMzVlMTQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AzLTMtVC1uaC1TRC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QNC1BLXQtTkgtc2QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2NmNmE5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QNC1BLXQtTkgtc2QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QNS1VLVQtTkgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1A1LVUtVC1OSC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NWMwMDguLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1A1LVUtVC1OSC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9eQotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfT0JKRUNUUz15Ci1DT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1BUMS1uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMzYxYzMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1BUMS1uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLUNPTkZJR19USU5ZX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj1uCi0jCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1BUMi1OSCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QVDItTkgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YWJmYzMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1BUMi1OSAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19USU5ZX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9eQotIwotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL3Zlcl9mdW5jdGlvbnMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvdmVyX2Z1bmN0aW9ucy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjZTM3YS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvdmVyX2Z1bmN0aW9ucy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jCi0jIEtlcm5lbC12ZXJzaW9uLWRlcGVuZGVudCBzaGVsbCBmdW5jdGlvbnMgZm9yIHRoZSByZXN0IG9mIHRoZSBzY3JpcHRzLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB5b3UgY2FuIGFjY2VzcyBpdCBvbmxpbmUgYXQKLSMgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbC4KLSMKLSMgQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMTMKLSMKLSMgQXV0aG9yczogUGF1bCBFLiBNY0tlbm5leSA8cGF1bG1ja0BsaW51eC52bmV0LmlibS5jb20+Ci0KLSMgcGVyX3ZlcnNpb25fYm9vdF9wYXJhbXMgYm9vdHBhcmFtLXN0cmluZyBjb25maWctZmlsZSBzZWNvbmRzCi0jCi0jIEFkZHMgcGVyLXZlcnNpb24gdG9ydHVyZS1tb2R1bGUgcGFyYW1ldGVycyB0byBrZXJuZWxzIHN1cHBvcnRpbmcgdGhlbS4KLSMgV2hpY2ggb2xkIGtlcm5lbHMgZG8gbm90LgotcGVyX3ZlcnNpb25fYm9vdF9wYXJhbXMgKCkgewotCWVjaG8JcmN1dG9ydHVyZS5zdGF0X2ludGVydmFsPTE1IFwKLQkJcmN1dG9ydHVyZS5zaHV0ZG93bl9zZWNzPSQzIFwKLQkJcmN1dG9ydHVyZS5yY3V0b3J0dXJlX3J1bm5hYmxlPTEgXAotCQlyY3V0b3J0dXJlLnRlc3Rfbm9faWRsZV9oej0xIFwKLQkJcmN1dG9ydHVyZS52ZXJib3NlPTEKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvQ0ZMSVNUIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9DRkxJU1QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNGNiYzY2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvQ0ZMSVNUCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotc3lzaWRsZVkuMjAxMy4wNi4xOWEKLXN5c2lkbGVOLjIwMTMuMDYuMTlhCi1QMS1TLVQtTkgtU0QtU01QLUhQCi1QMi0yLXQtbmgtc2QtU01QLWhwCi1QMy0zLVQtbmgtU0QtU01QLWhwCi1QNC1BLXQtTkgtc2QtU01QLUhQCi1QNS1VLVQtTkgtc2QtU01QLWhwCi1QNi0tLXQtbmgtU0Qtc21wLWhwCi1OMS1TLVQtTkgtU0QtU01QLUhQCi1OMi0yLXQtbmgtc2QtU01QLWhwCi1OMy0zLVQtbmgtU0QtU01QLWhwCi1ONC1BLXQtTkgtc2QtU01QLUhQCi1ONS1VLVQtTkgtc2QtU01QLWhwCi1QVDEtbmgKLVBUMi1OSAotTlQxLW5oCi1OVDMtTkgKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjEtUy1ULU5ILVNELVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjEtUy1ULU5ILVNELVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxZTExZC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL04xLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfRkFTVF9OT19IWj15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD04Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OMi0yLXQtbmgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmU0MTg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjItMi10LW5oLXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL04zLTMtVC1uaC1TRC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL04zLTMtVC1uaC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTAwZjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OMy0zLVQtbmgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9ONC1BLXQtTkgtc2QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9ONC1BLXQtTkgtc2QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTZiNDQ1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjQtQS10LU5ILXNkLVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjUtVS1ULU5ILXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkOTI0Zi4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL041LVUtVC1OSC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjYtLS10LW5oLVNELXNtcC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjYtLS10LW5oLVNELXNtcC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNjYzM2ZC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL042LS0tdC1uaC1TRC1zbXAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19OUl9DUFVTPTEKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9ONy00LVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9ONy00LVQtTkgtU0QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjY0MGNmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjctNC1ULU5ILVNELVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTE2Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVT15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVX05PTkU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9aRVJPPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFVfQUxMPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL044LTItVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL044LTItVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NWRhMmQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OOC0yLVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MTQKLUNPTkZJR19OUl9DUFVTPTE2Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTlQxLW5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2YzMTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj1uCi0jCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL05UMy1OSCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTlQzLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmQwMjM1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTlQzLU5ICisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI0NIRUNLI0NPTkZJR19USU5ZX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1AxLVMtVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1AxLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NDdjNDQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMS1TLVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfUkNVX0ZBU1RfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD04Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1AyLTItdC1uaC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1AyLTItdC1uaC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmM2I2NjcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMi0yLXQtbmgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD00Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDM1ZTE0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDMtMy1ULW5oLVNELVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NjZjZhOS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A0LUEtdC1OSC1zZC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNS1VLVQtTkgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNS1VLVQtTkgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTVjMDA4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDUtVS1ULU5ILXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A2LS0tdC1uaC1TRC1zbXAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A2LS0tdC1uaC1TRC1zbXAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YzkxNzUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNi0tLXQtbmgtU0Qtc21wLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD1uCi1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A3LTQtVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A3LTQtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YThjNWIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz0xNgotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19SQ1VfTk9DQl9DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9OT05FPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFVfWkVSTz1uCi1DT05GSUdfUkNVX05PQ0JfQ1BVX0FMTD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfT0JKRUNUUz15Ci1DT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfU0xVQj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQLWFsbCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDctNC1ULU5ILVNELVNNUC1IUC1hbGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZWNlYmMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQLWFsbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MgotQ09ORklHX05SX0NQVVM9MTYKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVPXkKLUNPTkZJR19SQ1VfTk9DQl9DUFVfTk9ORT15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVX1pFUk89bgotQ09ORklHX1JDVV9OT0NCX0NQVV9BTEw9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX09CSkVDVFM9eQotQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX1NMVUI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDctNC1ULU5ILVNELVNNUC1IUC1ub25lIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQLW5vbmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZWNlYmMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQLW5vbmUKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTE2Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVT15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVX05PTkU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9aRVJPPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFVfQUxMPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19TTFVCPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A3LTQtVC1OSC1TRC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A3LTQtVC1OSC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4OGJjNzAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz0xNgotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9OT05FPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFVfWkVSTz15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVX0FMTD1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfT0JKRUNUUz15Ci1DT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfU0xVQj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QVDEtbmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1BUMS1uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMzNjFjMy4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1BUMS1uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLUNPTkZJR19USU5ZX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj1uCi0jCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QVDItTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1BUMi1OSApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhYmZjMy4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1BUMi1OSAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19USU5ZX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9eQotIwotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL0NGTElTVCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9DRkxJU1QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjIzOTQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL0NGTElTVAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVAxLVMtVC1OSC1TRC1TTVAtSFAKLVAyLTItdC1uaC1zZC1TTVAtaHAKLVAzLTMtVC1uaC1TRC1TTVAtaHAKLVA0LUEtdC1OSC1zZC1TTVAtSFAKLVA1LVUtVC1OSC1zZC1TTVAtaHAKLU4xLVMtVC1OSC1TRC1TTVAtSFAKLU4yLTItdC1uaC1zZC1TTVAtaHAKLU4zLTMtVC1uaC1TRC1TTVAtaHAKLU40LUEtdC1OSC1zZC1TTVAtSFAKLU41LVUtVC1OSC1zZC1TTVAtaHAKLVBUMS1uaAotUFQyLU5ICi1OVDEtbmgKLU5UMy1OSApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL04xLVMtVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjEtUy1ULU5ILVNELVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxZTExZC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjEtUy1ULU5ILVNELVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9GQVNUX05PX0haPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjItMi10LW5oLXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmU0MTg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OMi0yLXQtbmgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD00Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL04zLTMtVC1uaC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTAwZjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL04zLTMtVC1uaC1TRC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9ONC1BLXQtTkgtc2QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTZiNDQ1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9ONC1BLXQtTkgtc2QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL041LVUtVC1OSC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkOTI0Zi4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjUtVS1ULU5ILXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL05UMS1uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2YzMTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL05UMS1uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNDSEVDSyNDT05GSUdfVElOWV9SQ1U9eQotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPW4KLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OVDMtTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTlQzLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmQwMjM1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OVDMtTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9eQotIwotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1AxLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NDdjNDQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1AxLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19SQ1VfRkFTVF9OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMi0yLXQtbmgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1AyLTItdC1uaC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmM2I2NjcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1AyLTItdC1uaC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTQKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDMtMy1ULW5oLVNELVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDM1ZTE0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMy0zLVQtbmgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1A0LUEtdC1OSC1zZC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NjZjZhOS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDQtQS10LU5ILXNkLVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDUtVS1ULU5ILXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QNS1VLVQtTkgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTVjMDA4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QNS1VLVQtTkgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX09CSkVDVFM9eQotQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QVDEtbmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUFQxLW5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzM2MWMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9bgotIwotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QVDItTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUFQyLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGFiZmMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QVDItTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy92ZXJfZnVuY3Rpb25zLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL3Zlcl9mdW5jdGlvbnMuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZTU1NjkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL3Zlcl9mdW5jdGlvbnMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jIS9iaW4vYmFzaAotIwotIyBLZXJuZWwtdmVyc2lvbi1kZXBlbmRlbnQgc2hlbGwgZnVuY3Rpb25zIGZvciB0aGUgcmVzdCBvZiB0aGUgc2NyaXB0cy4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgeW91IGNhbiBhY2Nlc3MgaXQgb25saW5lIGF0Ci0jIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWwuCi0jCi0jIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDEzCi0jCi0jIEF1dGhvcnM6IFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgotCi0jIHJjdXRvcnR1cmVfcGFyYW1fb25vZmYgYm9vdHBhcmFtLXN0cmluZyBjb25maWctZmlsZQotIwotIyBBZGRzIG9ub2ZmIHJjdXRvcnR1cmUgbW9kdWxlIHBhcmFtZXRlcnMgdG8ga2VybmVscyBoYXZpbmcgaXQuCi1yY3V0b3J0dXJlX3BhcmFtX29ub2ZmICgpIHsKLQlpZiAhIGJvb3RwYXJhbV9ob3RwbHVnX2NwdSAiJDEiICYmIGNvbmZpZ2ZyYWdfaG90cGx1Z19jcHUgIiQyIgotCXRoZW4KLQkJZWNobyBDUFUtaG90cGx1ZyBrZXJuZWwsIGFkZGluZyByY3V0b3J0dXJlIG9ub2ZmLiAxPiYyCi0JCWVjaG8gcmN1dG9ydHVyZS5vbm9mZl9pbnRlcnZhbD0zIHJjdXRvcnR1cmUub25vZmZfaG9sZG9mZj0zMAotCWZpCi19Ci0KLSMgcGVyX3ZlcnNpb25fYm9vdF9wYXJhbXMgYm9vdHBhcmFtLXN0cmluZyBjb25maWctZmlsZSBzZWNvbmRzCi0jCi0jIEFkZHMgcGVyLXZlcnNpb24gdG9ydHVyZS1tb2R1bGUgcGFyYW1ldGVycyB0byBrZXJuZWxzIHN1cHBvcnRpbmcgdGhlbS4KLXBlcl92ZXJzaW9uX2Jvb3RfcGFyYW1zICgpIHsKLQllY2hvICQxIGByY3V0b3J0dXJlX3BhcmFtX29ub2ZmICIkMSIgIiQyImAgXAotCQlyY3V0b3J0dXJlLnN0YXRfaW50ZXJ2YWw9MTUgXAotCQlyY3V0b3J0dXJlLnNodXRkb3duX3NlY3M9JDMgXAotCQlyY3V0b3J0dXJlLnJjdXRvcnR1cmVfcnVubmFibGU9MSBcCi0JCXJjdXRvcnR1cmUudGVzdF9ub19pZGxlX2h6PTEgXAotCQlyY3V0b3J0dXJlLnZlcmJvc2U9MQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L0NGTElTVCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9DRkxJU1QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjIzOTQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L0NGTElTVAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVAxLVMtVC1OSC1TRC1TTVAtSFAKLVAyLTItdC1uaC1zZC1TTVAtaHAKLVAzLTMtVC1uaC1TRC1TTVAtaHAKLVA0LUEtdC1OSC1zZC1TTVAtSFAKLVA1LVUtVC1OSC1zZC1TTVAtaHAKLU4xLVMtVC1OSC1TRC1TTVAtSFAKLU4yLTItdC1uaC1zZC1TTVAtaHAKLU4zLTMtVC1uaC1TRC1TTVAtaHAKLU40LUEtdC1OSC1zZC1TTVAtSFAKLU41LVUtVC1OSC1zZC1TTVAtaHAKLVBUMS1uaAotUFQyLU5ICi1OVDEtbmgKLU5UMy1OSApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L04xLVMtVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjEtUy1ULU5ILVNELVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxZTExZC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjEtUy1ULU5ILVNELVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9GQVNUX05PX0haPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjItMi10LW5oLXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmU0MTg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OMi0yLXQtbmgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD00Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L04zLTMtVC1uaC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTAwZjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L04zLTMtVC1uaC1TRC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9ONC1BLXQtTkgtc2QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTZiNDQ1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9ONC1BLXQtTkgtc2QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L041LVUtVC1OSC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkOTI0Zi4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjUtVS1ULU5ILXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L05UMS1uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2YzMTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L05UMS1uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNDSEVDSyNDT05GSUdfVElOWV9SQ1U9eQotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPW4KLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OVDMtTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTlQzLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmQwMjM1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OVDMtTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9eQotIwotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1AxLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NDdjNDQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1AxLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19SQ1VfRkFTVF9OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMi0yLXQtbmgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1AyLTItdC1uaC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmM2I2NjcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1AyLTItdC1uaC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTQKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDMtMy1ULW5oLVNELVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDM1ZTE0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMy0zLVQtbmgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1A0LUEtdC1OSC1zZC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NjZjZhOS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDQtQS10LU5ILXNkLVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDUtVS1ULU5ILXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QNS1VLVQtTkgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTVjMDA4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QNS1VLVQtTkgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX09CSkVDVFM9eQotQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QVDEtbmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUFQxLW5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzM2MWMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9bgotIwotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QVDItTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUFQyLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGFiZmMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QVDItTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS92ZXJfZnVuY3Rpb25zLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L3Zlcl9mdW5jdGlvbnMuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NzdkOGQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L3Zlcl9mdW5jdGlvbnMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jIS9iaW4vYmFzaAotIwotIyBLZXJuZWwtdmVyc2lvbi1kZXBlbmRlbnQgc2hlbGwgZnVuY3Rpb25zIGZvciB0aGUgcmVzdCBvZiB0aGUgc2NyaXB0cy4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgeW91IGNhbiBhY2Nlc3MgaXQgb25saW5lIGF0Ci0jIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWwuCi0jCi0jIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDEzCi0jCi0jIEF1dGhvcnM6IFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgotCi0jIHJjdXRvcnR1cmVfcGFyYW1fbl9iYXJyaWVyX2NicyBib290cGFyYW0tc3RyaW5nCi0jCi0jIEFkZHMgbl9iYXJyaWVyX2NicyByY3V0b3J0dXJlIG1vZHVsZSBwYXJhbWV0ZXIgdG8ga2VybmVscyBoYXZpbmcgaXQuCi1yY3V0b3J0dXJlX3BhcmFtX25fYmFycmllcl9jYnMgKCkgewotCWlmIGVjaG8gJDEgfCBncmVwIC1xICJyY3V0b3J0dXJlXC5uX2JhcnJpZXJfY2JzIgotCXRoZW4KLQkJOgotCWVsc2UKLQkJZWNobyByY3V0b3J0dXJlLm5fYmFycmllcl9jYnM9NAotCWZpCi19Ci0KLSMgcmN1dG9ydHVyZV9wYXJhbV9vbm9mZiBib290cGFyYW0tc3RyaW5nIGNvbmZpZy1maWxlCi0jCi0jIEFkZHMgb25vZmYgcmN1dG9ydHVyZSBtb2R1bGUgcGFyYW1ldGVycyB0byBrZXJuZWxzIGhhdmluZyBpdC4KLXJjdXRvcnR1cmVfcGFyYW1fb25vZmYgKCkgewotCWlmICEgYm9vdHBhcmFtX2hvdHBsdWdfY3B1ICIkMSIgJiYgY29uZmlnZnJhZ19ob3RwbHVnX2NwdSAiJDIiCi0JdGhlbgotCQllY2hvIENQVS1ob3RwbHVnIGtlcm5lbCwgYWRkaW5nIHJjdXRvcnR1cmUgb25vZmYuIDE+JjIKLQkJZWNobyByY3V0b3J0dXJlLm9ub2ZmX2ludGVydmFsPTMgcmN1dG9ydHVyZS5vbm9mZl9ob2xkb2ZmPTMwCi0JZmkKLX0KLQotIyBwZXJfdmVyc2lvbl9ib290X3BhcmFtcyBib290cGFyYW0tc3RyaW5nIGNvbmZpZy1maWxlIHNlY29uZHMKLSMKLSMgQWRkcyBwZXItdmVyc2lvbiB0b3J0dXJlLW1vZHVsZSBwYXJhbWV0ZXJzIHRvIGtlcm5lbHMgc3VwcG9ydGluZyB0aGVtLgotcGVyX3ZlcnNpb25fYm9vdF9wYXJhbXMgKCkgewotCWVjaG8gJDEgYHJjdXRvcnR1cmVfcGFyYW1fb25vZmYgIiQxIiAiJDIiYCBcCi0JCWByY3V0b3J0dXJlX3BhcmFtX25fYmFycmllcl9jYnMgIiQxImAgXAotCQlyY3V0b3J0dXJlLnN0YXRfaW50ZXJ2YWw9MTUgXAotCQlyY3V0b3J0dXJlLnNodXRkb3duX3NlY3M9JDMgXAotCQlyY3V0b3J0dXJlLnJjdXRvcnR1cmVfcnVubmFibGU9MSBcCi0JCXJjdXRvcnR1cmUudGVzdF9ub19pZGxlX2h6PTEgXAotCQlyY3V0b3J0dXJlLnZlcmJvc2U9MQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9kb2MvVElOWV9SQ1UudHh0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9kb2MvVElOWV9SQ1UudHh0CmluZGV4IDI4ZGI2N2IuLjllZjMzYTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvZG9jL1RJTllfUkNVLnR4dAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2RvYy9USU5ZX1JDVS50eHQKQEAgLTM0LDcgKzM0LDcgQEAKIENPTkZJR19QUkVFTVBUX1JDVQogQ09ORklHX1NNUAogQ09ORklHX1RJTllfUkNVCi1DT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorQ09ORklHX1BSRUVNUFRfUkNVCiBDT05GSUdfVFJFRV9SQ1UKIAogCUFsbCBmb3JjZWQgYnkgQ09ORklHX1RJTllfUkNVLgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9kb2MvVFJFRV9SQ1Uta2NvbmZpZy50eHQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2RvYy9UUkVFX1JDVS1rY29uZmlnLnR4dAppbmRleCAzZTU4OGRiLi5lYzAzYzg4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2RvYy9UUkVFX1JDVS1rY29uZmlnLnR4dAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2RvYy9UUkVFX1JDVS1rY29uZmlnLnR4dApAQCAtMSw1ICsxLDUgQEAKIFRoaXMgZG9jdW1lbnQgZ2l2ZXMgYSBicmllZiByYXRpb25hbGUgZm9yIHRoZSBUUkVFX1JDVS1yZWxhdGVkIHRlc3QKLWNhc2VzLCBhIGdyb3VwIHRoYXQgaW5jbHVkZXMgVFJFRV9QUkVFTVBUX1JDVS4KK2Nhc2VzLCBhIGdyb3VwIHRoYXQgaW5jbHVkZXMgUFJFRU1QVF9SQ1UuCiAKIAogS2NvbmZpZyBQYXJhbWV0ZXJzOgpAQCAtMTQsMTAgKzE0LDkgQEAKIENPTkZJR19QUkVFTVBUIC0tIERvIGhhbGYuICAoRmlyc3QgdGhyZWUgYW5kICM4LikKIENPTkZJR19QUk9WRV9MT0NLSU5HIC0tIERvIGFsbCBidXQgdHdvLCBjb3ZlcmluZyBDT05GSUdfUFJPVkVfUkNVIGFuZCBub3QuCiBDT05GSUdfUFJPVkVfUkNVIC0tIERvIGFsbCBidXQgb25lIHVuZGVyIENPTkZJR19QUk9WRV9MT0NLSU5HLgotQ09ORklHX1JDVV9CT09TVCAtLSBvbmUgb2YgVFJFRV9QUkVFTVBUX1JDVS4KLUNPTkZJR19SQ1VfQk9PU1RfUFJJTyAtLSBzZXQgdG8gMiBmb3IgX0JPT1NUIHRlc3RpbmcuCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPIC0tIGRvIG9uZSB3aXRoIGFuZCB3aXRob3V0IF9WRVJCT1NFLgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRSAtLSBkbyBvbmUgd2l0aCBhbmQgd2l0aG91dCBfSU5GTy4KK0NPTkZJR19SQ1VfQk9PU1QgLS0gb25lIG9mIFBSRUVNUFRfUkNVLgorQ09ORklHX1JDVV9LVEhSRUFEX1BSSU8gLS0gc2V0IHRvIDIgZm9yIF9CT09TVCB0ZXN0aW5nLgorQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTyAtLSBEbyBvbmUuCiBDT05GSUdfUkNVX0ZBTk9VVCAtLSBDb3ZlciBoaWVyYXJjaHkgYXMgY3VycmVudGx5LCBidXQgb3ZlcmxhcCB3aXRoIG90aGVycy4KIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIC0tIERvIG9uZS4KIENPTkZJR19SQ1VfRkFOT1VUX0xFQUYgLS0gRG8gb25lIG5vbi1kZWZhdWx0LgpAQCAtMjcsNyArMjYsNyBAQAogQ09ORklHX1JDVV9OT0NCX0NQVV9OT05FIC0tIERvIG9uZS4KIENPTkZJR19SQ1VfTk9DQl9DUFVfWkVSTyAtLSBEbyBvbmUuCiBDT05GSUdfUkNVX1RSQUNFIC0tIERvIGhhbGYuCi1DT05GSUdfU01QIC0tIE5lZWQgb25lICFTTVAgZm9yIFRSRUVfUFJFRU1QVF9SQ1UuCitDT05GSUdfU01QIC0tIE5lZWQgb25lICFTTVAgZm9yIFBSRUVNUFRfUkNVLgogUkNVLWJoOiBEbyBvbmUgd2l0aCBQUkVFTVBUIGFuZCBvbmUgd2l0aCAhUFJFRU1QVC4KIFJDVS1zY2hlZDogRG8gb25lIHdpdGggUFJFRU1QVCBidXQgbm90IEJPT1NULgogCkBAIC03Nyw3ICs3Niw3IEBACiAKIENPTkZJR19SQ1VfU1RBTExfQ09NTU9OCiAKLQlJbXBsaWVkIGJ5IFRSRUVfUkNVIGFuZCBUUkVFX1BSRUVNUFRfUkNVLgorCUltcGxpZWQgYnkgVFJFRV9SQ1UgYW5kIFBSRUVNUFRfUkNVLgogCiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVAogQ09ORklHX1JDVV9UT1JUVVJFX1RFU1RfUlVOTkFCTEUKQEAgLTg4LDcgKzg3LDcgQEAKIAogCVJlZHVuZGFudCB3aXRoIENPTkZJR19OT19IWl9GVUxMLgogCi1DT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorQ09ORklHX1BSRUVNUFRfUkNVCiBDT05GSUdfVFJFRV9SQ1UKIAogCVRoZXNlIGFyZSBjb250cm9sbGVkIGJ5IENPTkZJR19QUkVFTVBULgo=